From dd1f179cda58f54140945ad67846ff417903a862 Mon Sep 17 00:00:00 2001 From: Gabriele Cosmo Date: Fri, 30 Jun 2023 09:09:57 +0200 Subject: [PATCH] Import Geant4 11.2.0.beta source tree --- .github/CODEOWNERS | 11 +- .gitlab/CODEOWNERS | 38 +- CMakeLists.txt | 4 +- ReleaseNotes/Beta4.11.2-1.txt | 1001 + ReleaseNotes/Patch.11.0-4.txt | 111 + ReleaseNotes/Patch.11.1-1.txt | 2 +- cmake/History | 73 +- cmake/Modules/FindFLUKAInterface.cmake | 18 + cmake/Modules/G4CTest.cmake | 18 - cmake/Modules/G4ConfigureCMakeHelpers.cmake | 5 +- .../Modules/G4ConfigurePkgConfigHelpers.cmake | 2 +- cmake/Modules/G4DatasetDefinitions.cmake | 12 +- cmake/Modules/G4DeveloperAPI.cmake | 90 +- cmake/Modules/G4InterfaceOptions.cmake | 50 +- cmake/Modules/geant4_module_check.py | 253 +- cmake/Templates/Geant4Config.cmake.in | 123 +- cmake/Templates/geant4-config.in | 4 +- .../geant4_validate_sources.cmake.in | 10 +- config/G4UI_USE.gmk | 8 +- config/History | 9 + config/binmake.gmk | 6 +- config/sys/Darwin-clang.gmk | 6 +- config/sys/Darwin-g++.gmk | 6 +- config/sys/Linux-clang.gmk | 7 +- config/sys/Linux-g++.gmk | 7 +- config/sys/Linux-icc.gmk | 7 +- config/sys/Linux-icx.gmk | 7 +- config/sys/WIN32-VC.gmk | 6 +- examples/.doxygen/Doxyfile | 4 + examples/.doxygen/Doxymain.h | 2 +- examples/.doxygen/Doxymodules_hadronic.h | 18 + examples/.doxygen/History | 6 + examples/.doxygen/generate_standalone.sh | 2 +- examples/History | 48 + examples/advanced/CMakeLists.txt | 1 + examples/advanced/CaTS/CaTS.out | 36 +- .../ChargeExchangeMC/ChargeExchangeMC.out | 688 +- .../HGCal_testbeam/testbeam_electron.out | 34 +- .../ICRP110_HumanPhantoms/CMakeLists.txt | 7 +- .../advanced/ICRP110_HumanPhantoms/History | 14 + .../ICRP110_HumanPhantoms/ICRP110Phantoms.out | 40 +- .../ICRP110standalone.cc | 65 + .../ICRP110_HumanPhantoms/OrganDoses.out | 80 +- .../advanced/ICRP110_HumanPhantoms/README | 10 +- .../include/ICRP110StandaloneVisAction.hh | 47 + .../src/ICRP110StandaloneVisAction.cc | 58 + .../ICRP110_HumanPhantoms/standalone.mac | 34 + .../advanced/ICRP110_HumanPhantoms/vis.mac | 3 +- .../ICRP145_HumanPhantoms/CMakeLists.txt | 6 + .../advanced/ICRP145_HumanPhantoms/History | 16 + .../ICRP145_HumanPhantoms/ICRP145Phantoms.out | 36 +- .../ICRP145standalone.cc | 68 + .../advanced/ICRP145_HumanPhantoms/README | 18 +- .../include/ICRP145StandaloneVisAction.hh | 51 + .../ICRP145_HumanPhantoms/include/TETRun.hh | 1 + .../src/ICRP145StandaloneVisAction.cc | 58 + .../ICRP145_HumanPhantoms/src/TETRun.cc | 26 +- .../ICRP145_HumanPhantoms/standalone.mac | 52 + examples/advanced/STCyclotron/STCyclotron.out | 26 +- examples/advanced/air_shower/air_shower.out | 33 +- examples/advanced/amsEcal/run1.out | 194 +- .../advanced/brachytherapy/brachytherapy.out | 24 +- .../composite_calorimeter.out | 49 +- examples/advanced/doiPET/doiPET.out | 20 +- examples/advanced/eFLASH_radiotherapy/History | 3 + .../eFLASH_radiotherapy.out | 26 +- .../advanced/eFLASH_radiotherapy/flash.cc | 23 +- examples/advanced/eRosita/eRosita.out | 12 +- examples/advanced/fastAerosol/History | 3 + examples/advanced/fastAerosol/fastAerosol.cc | 117 +- examples/advanced/fastAerosol/fastAerosol.out | 38 +- .../include/FAActionInitialization.hh | 10 +- .../include/FACloudParameterisation.hh | 7 +- .../include/FADetectorConstruction.hh | 64 +- .../fastAerosol/include/FAEventAction.hh | 20 +- .../include/FAPrimaryGeneratorAction.hh | 22 +- .../fastAerosol/include/FARunAction.hh | 22 +- .../fastAerosol/include/FASteppingAction.hh | 17 +- .../fastAerosol/include/FastAerosol.hh | 292 +- .../fastAerosol/include/FastAerosolSolid.hh | 151 +- .../fastAerosol/src/FAActionInitialization.cc | 10 +- .../src/FACloudParameterisation.cc | 8 +- .../fastAerosol/src/FADetectorConstruction.cc | 814 +- .../advanced/fastAerosol/src/FAEventAction.cc | 14 +- .../src/FAPrimaryGeneratorAction.cc | 81 +- .../advanced/fastAerosol/src/FARunAction.cc | 18 +- .../fastAerosol/src/FASteppingAction.cc | 7 +- .../advanced/fastAerosol/src/FastAerosol.cc | 1339 +- .../fastAerosol/src/FastAerosolSolid.cc | 19 +- examples/advanced/gammaknife/gammaknife.out | 810 +- .../gammaray_telescope/gammaraytel.out | 29905 ++++++++-------- examples/advanced/gorad/gorad.out | 18 +- .../advanced/hadrontherapy/hadrontherapy.out | 30 +- .../advanced/human_phantom/human_phantom.out | 24 +- .../advanced/iort_therapy/iort_therapy.out | 6 +- .../lAr_calorimeter/lAr_calorimeter.out | 372 +- .../advanced/medical_linac/medical_linac.out | 40 +- examples/advanced/microbeam/microbeam.out | 24 +- .../microelectronics/microelectronics.out | 22 +- examples/advanced/nanobeam/OM50.grid | 0 examples/advanced/nanobeam/nanobeam.out | 7 +- .../purging_magnet/purging_magnet.out | 27 +- .../radioprotection/radioprotection.out | 36 +- .../stim_pixe_tomography/CMakeLists.txt | 64 + .../stim_pixe_tomography/GPSPointLoop.C | 126 + .../advanced/stim_pixe_tomography/History | 8 + examples/advanced/stim_pixe_tomography/README | 178 + .../advanced/stim_pixe_tomography/README.md | 179 + .../Scripts/BinToStd_GammaAtCreation.C | 199 + .../Scripts/BinToStd_GammaAtExit.C | 196 + .../Scripts/BinToStd_ProtonAtExit.C | 184 + .../Scripts/BinToStd_gamma_position.C | 296 + .../Scripts/BinToStd_proton_position.C | 305 + .../Scripts/Check_PixeEventFile.C | 85 + .../Concatenate_BinToStd_GammaAtCreation.C | 279 + ...enate_BinToStd_GammaAtCreation_fabricate.C | 226 + .../Concatenate_BinToStd_GammaAtExit.C | 270 + ...ncatenate_BinToStd_GammaAtExit_fabricate.C | 232 + .../Concatenate_BinToStd_ProtonAtExit.C | 276 + .../Scripts/Extract_Projection.C | 70 + .../Scripts/Extract_Slice.C | 66 + .../Scripts/LocateInterruption_GammaAtExit.C | 93 + .../Scripts/LocateInterruption_ProtonAtExit.C | 93 + .../Scripts/Spectrum_gamma.C | 143 + .../Scripts/Spectrum_proton.C | 129 + .../Scripts/TomoSpectrum.C | 103 + .../Scripts/TomoSpectrum_HIST.C | 120 + .../Scripts/TomoSpectrum_HIST_proton.C | 122 + .../generate_voxelized_sphere_phantom.py | 180 + .../generate_voxelized_worm_phantom.py | 265 + .../include/ActionInitialization.hh | 50 + .../include/DetectorConstruction.hh | 143 + .../include/DetectorMessenger.hh | 74 + .../include/PhysListEmStandard.hh | 57 + .../include/PhysicsList.hh | 72 + .../include/PhysicsListMessenger.hh | 61 + .../include/PrimaryGeneratorAction.hh | 58 + .../stim_pixe_tomography/include/Run.hh | 128 + .../stim_pixe_tomography/include/RunAction.hh | 73 + .../include/RunActionMessenger.hh | 61 +- .../include/StackingAction.hh | 51 + .../include/TrackingAction.hh | 50 + .../stim_pixe_tomography/init_vis.mac | 17 + .../advanced/stim_pixe_tomography/pixe3d.mac | 852 + .../stim_pixe_tomography/pixe3d_initial.mac | 39 + .../stim_pixe_tomography/pixe3d_stim.mac | 852 + .../src/ActionInitialization.cc | 64 + .../src/DetectorConstruction.cc | 847 + .../src/DetectorMessenger.cc | 173 + .../src/PhysListEmStandard.cc | 173 + .../stim_pixe_tomography/src/PhysicsList.cc | 243 + .../src/PhysicsListMessenger.cc | 70 + .../src/PrimaryGeneratorAction.cc | 29 +- .../advanced/stim_pixe_tomography/src/Run.cc | 177 + .../stim_pixe_tomography/src/RunAction.cc | 112 + .../src/RunActionMessenger.cc | 111 + .../src/StackingAction.cc | 82 + .../src/TrackingAction.cc | 99 + .../stim_pixe_tomography.cc | 111 + .../stim_pixe_tomography.out | 1736 + .../advanced/stim_pixe_tomography/test.in | 152 + .../advanced/stim_pixe_tomography/vis.mac | 106 + .../underground_physics.out | 5 +- .../xray_SiliconPoreOptics/CMakeLists.txt | 58 + .../xray_SiliconPoreOptics/GNUmakefile | 15 + .../advanced/xray_SiliconPoreOptics/History | 8 + .../xray_SiliconPoreOptics/README.txt | 135 + .../SiliconPoreOptics.out | 870 + .../Xray_SiliconPoreOptics.cc | 97 + .../Xray_SiliconPoreOptics.out | 882 + .../analysis/README.txt | 4 + .../analysis/analysis.C | 233 + .../G4EmStandardPhysics_SpacePhysics.hh | 63 + .../include/XraySPOActionInitialization.hh | 53 + .../include/XraySPODetectorConstruction.hh | 74 + .../include/XraySPODetectorMessenger.hh | 65 + .../include/XraySPOHistoManager.hh | 60 + .../include/XraySPOPhysicsList.hh | 67 + .../include/XraySPOPhysicsListMessenger.hh | 65 + .../include/XraySPOPrimaryGeneratorAction.hh | 64 + .../include/XraySPORunAction.hh | 63 + .../include/XraySPOSteppingAction.hh | 63 + .../xray_SiliconPoreOptics/init_vis.mac | 17 + .../xray_SiliconPoreOptics/pores.gdml | 195 + .../advanced/xray_SiliconPoreOptics/run01.mac | 33 + .../src/G4EmStandardPhysics_SpacePhysics.cc | 326 + .../src/XraySPOActionInitialization.cc | 60 + .../src/XraySPODetectorConstruction.cc | 152 + .../src/XraySPODetectorMessenger.cc | 62 + .../src/XraySPOHistoManager.cc | 67 + .../src/XraySPOPhysicsList.cc | 253 + .../src/XraySPOPhysicsListMessenger.cc | 64 + .../src/XraySPOPrimaryGeneratorAction.cc | 58 + .../src/XraySPORunAction.cc | 67 +- .../src/XraySPOSteppingAction.cc | 135 + .../advanced/xray_SiliconPoreOptics/vis.mac | 25 + .../advanced/xray_TESdetector/CMakeLists.txt | 67 + .../advanced/xray_TESdetector/GNUmakefile | 16 + examples/advanced/xray_TESdetector/History | 11 + examples/advanced/xray_TESdetector/README.txt | 172 + .../xray_TESdetector/XrayTESdetector.out | 1946 + .../xray_TESdetector/analysis/analysis.C | 300 + .../G4EmStandardPhysics_SpacePhysics.hh | 64 + .../include/XrayTESdetActionInitialization.hh | 57 + .../include/XrayTESdetDetParameterisation.hh | 81 + .../include/XrayTESdetDetectorConstruction.hh | 163 + .../include/XrayTESdetDetectorMessenger.hh | 60 + .../include/XrayTESdetHistoManager.hh | 59 + .../include/XrayTESdetPhysicsList.hh | 70 + .../include/XrayTESdetPhysicsListMessenger.hh | 66 + .../XrayTESdetPrimaryGeneratorAction.hh | 64 + .../include/XrayTESdetRunAction.hh | 62 + .../include/XrayTESdetSteppingAction.hh | 68 + .../advanced/xray_TESdetector/init_vis.mac | 13 + .../advanced/xray_TESdetector/pixelpos.txt | 317 + .../advanced/xray_TESdetector/pixelpos2.txt | 5 + examples/advanced/xray_TESdetector/run01.mac | 21 + examples/advanced/xray_TESdetector/run02.mac | 23 + .../src/G4EmStandardPhysics_SpacePhysics.cc | 327 + .../src/XrayTESdetActionInitialization.cc | 59 + .../src/XrayTESdetDetParameterisation.cc | 107 + .../src/XrayTESdetDetectorConstruction.cc | 1214 + .../src/XrayTESdetDetectorMessenger.cc | 71 + .../src/XrayTESdetHistoManager.cc | 78 + .../src/XrayTESdetPhysicsList.cc | 247 + .../src/XrayTESdetPhysicsListMessenger.cc | 74 + .../src/XrayTESdetPrimaryGeneratorAction.cc | 142 + .../src/XrayTESdetRunAction.cc | 85 + .../src/XrayTESdetSteppingAction.cc | 207 + examples/advanced/xray_TESdetector/vis.mac | 25 + .../xray_TESdetector/xray_TESdetector.cc | 106 + .../xray_TESdetector/xray_TESdetector.gdml | 15305 ++++++++ .../xray_TESdetector/xray_TESdetector.out | 1429 + .../xray_fluorescence/xray_fluorescence.out | 26 +- .../xray_telescope/xray_telescope.out | 7 +- examples/basic/B1/exampleB1.out | 38 +- examples/basic/B2/B2a/exampleB2a.out | 36 +- examples/basic/B2/B2b/exampleB2b.out | 208 +- examples/basic/B3/B3a/exampleB3a.out | 29 +- examples/basic/B3/B3b/exampleB3b.out | 31 +- examples/basic/B4/.README.txt | 4 +- examples/basic/B4/B4a/exampleB4a.out | 49 +- examples/basic/B4/B4a/include/EventAction.hh | 1 - examples/basic/B4/B4a/plotHisto.C | 9 +- examples/basic/B4/B4a/plotNtuple.C | 12 +- examples/basic/B4/B4a/run1.mac | 50 +- examples/basic/B4/B4a/run2.mac | 20 +- examples/basic/B4/B4a/src/EventAction.cc | 11 +- .../B4/B4a/src/PrimaryGeneratorAction.cc | 2 +- examples/basic/B4/B4a/src/RunAction.cc | 12 +- examples/basic/B4/B4b/exampleB4b.out | 49 +- examples/basic/B4/B4b/include/RunData.hh | 2 +- examples/basic/B4/B4b/plotHisto.C | 9 +- examples/basic/B4/B4b/plotNtuple.C | 12 +- examples/basic/B4/B4b/run1.mac | 50 +- examples/basic/B4/B4b/run2.mac | 20 +- examples/basic/B4/B4b/src/EventAction.cc | 5 +- .../B4/B4b/src/PrimaryGeneratorAction.cc | 2 +- examples/basic/B4/B4b/src/RunAction.cc | 10 +- examples/basic/B4/B4b/src/RunData.cc | 3 +- examples/basic/B4/B4c/exampleB4c.out | 49 +- examples/basic/B4/B4c/plotHisto.C | 9 +- examples/basic/B4/B4c/plotNtuple.C | 12 +- examples/basic/B4/B4c/run1.mac | 50 +- examples/basic/B4/B4c/run2.mac | 20 +- examples/basic/B4/B4c/src/EventAction.cc | 3 +- .../B4/B4c/src/PrimaryGeneratorAction.cc | 2 +- examples/basic/B4/B4c/src/RunAction.cc | 6 +- examples/basic/B4/B4d/exampleB4d.out | 51 +- examples/basic/B4/B4d/plotHisto.C | 9 +- examples/basic/B4/B4d/plotNtuple.C | 12 +- examples/basic/B4/B4d/run1.mac | 50 +- examples/basic/B4/B4d/run2.mac | 22 +- examples/basic/B4/B4d/src/EventAction.cc | 2 +- .../B4/B4d/src/PrimaryGeneratorAction.cc | 2 +- examples/basic/B4/B4d/src/RunAction.cc | 6 +- examples/basic/B4/History | 4 + examples/basic/B4/README | 5 +- examples/basic/B4/macros/plotHisto.C | 9 +- examples/basic/B4/macros/plotNtuple.C | 12 +- examples/basic/B4/macros/run1.mac | 50 +- examples/basic/B4/macros/run2.mac | 20 +- examples/basic/B5/exampleB5.out | 461 +- .../extended/analysis/AnaEx01/AnaEx01-csv.out | 36 +- .../analysis/AnaEx01/AnaEx01-hdf5.out | 36 +- .../analysis/AnaEx01/AnaEx01-root.out | 36 +- .../extended/analysis/AnaEx01/AnaEx01-xml.out | 36 +- .../extended/analysis/AnaEx02/AnaEx02.out | 36 +- .../extended/analysis/AnaEx03/AnaEx03-csv.out | 56 +- .../analysis/AnaEx03/AnaEx03-hdf5.out | 56 +- .../analysis/AnaEx03/AnaEx03-root.out | 56 +- .../extended/analysis/AnaEx03/AnaEx03-xml.out | 56 +- .../extended/analysis/B1Con/exampleB01Con.out | 136 +- examples/extended/biasing/B01/exampleB01.out | 34 +- examples/extended/biasing/B02/exampleB02.out | 34 +- examples/extended/biasing/B03/exampleB03.out | 32 +- .../extended/biasing/GB01/exampleGB01.out | 88 +- .../extended/biasing/GB02/exampleGB02.out | 114 +- .../extended/biasing/GB03/exampleGB03.out | 50 +- .../extended/biasing/GB04/exampleGB04.out | 42 +- .../extended/biasing/GB05/exampleGB05.out | 428 +- .../extended/biasing/GB06/exampleGB06.out | 36 +- .../extended/biasing/GB07/exampleGB07.out | 922 +- examples/extended/biasing/ReverseMC01/History | 2 + .../include/RMC01AnalysisManager.hh | 1 - .../run_adjoint_simulation_electron.out | 6 +- examples/extended/common/common.out | 6 +- examples/extended/electromagnetic/.README.txt | 5 +- examples/extended/electromagnetic/History | 3 + examples/extended/electromagnetic/README | 6 +- .../electromagnetic/TestEm0/.README.txt | 3 + .../electromagnetic/TestEm0/CMakeLists.txt | 2 +- .../electromagnetic/TestEm0/DirectAccess.out | 121 + .../extended/electromagnetic/TestEm0/History | 5 + .../extended/electromagnetic/TestEm0/README | 3 + .../electromagnetic/TestEm0/TestEm0.out | 28 +- .../TestEm0/include/DetectorConstruction.hh | 13 +- .../TestEm0/include/DetectorMessenger.hh | 15 +- .../TestEm0/include/PhysListEmStandard.hh | 6 +- .../TestEm0/include/PhysicsList.hh | 6 +- .../TestEm0/include/PhysicsListMessenger.hh | 13 +- .../TestEm0/include/PrimaryGeneratorAction.hh | 9 +- .../TestEm0/include/RunAction.hh | 14 +- .../extended/electromagnetic/TestEm0/ion.mac | 20 + .../TestEm0/src/DetectorConstruction.cc | 2 - .../TestEm0/src/DetectorMessenger.cc | 6 +- .../TestEm0/src/PhysListEmStandard.cc | 7 +- .../TestEm0/src/PhysicsList.cc | 9 +- .../TestEm0/src/PhysicsListMessenger.cc | 3 +- .../TestEm0/src/PrimaryGeneratorAction.cc | 7 +- .../electromagnetic/TestEm0/src/RunAction.cc | 24 +- .../electromagnetic/TestEm1/.README.txt | 1 + .../electromagnetic/TestEm1/CMakeLists.txt | 2 +- .../extended/electromagnetic/TestEm1/History | 4 + .../extended/electromagnetic/TestEm1/README | 1 + .../electromagnetic/TestEm1/TestEm1.out | 110 +- .../electromagnetic/TestEm1/etaDecay.mac | 27 + .../TestEm1/include/ActionInitialization.hh | 8 +- .../TestEm1/include/DetectorConstruction.hh | 20 +- .../TestEm1/include/DetectorMessenger.hh | 14 +- .../TestEm1/include/EventAction.hh | 8 +- .../TestEm1/include/HistoManager.hh | 4 +- .../TestEm1/include/PhysListEmStandard.hh | 6 +- .../TestEm1/include/PhysicsList.hh | 15 +- .../TestEm1/include/PhysicsListMessenger.hh | 12 +- .../TestEm1/include/PrimaryGeneratorAction.hh | 12 +- .../include/PrimaryGeneratorMessenger.hh | 12 +- .../electromagnetic/TestEm1/include/Run.hh | 21 +- .../TestEm1/include/RunAction.hh | 8 +- .../TestEm1/include/StackingAction.hh | 6 +- .../TestEm1/include/StepMax.hh | 6 +- .../TestEm1/include/StepMaxMessenger.hh | 8 +- .../TestEm1/include/SteppingAction.hh | 6 +- .../TestEm1/include/TrackingAction.hh | 8 +- .../TestEm1/src/ActionInitialization.cc | 7 +- .../TestEm1/src/DetectorConstruction.cc | 2 - .../TestEm1/src/DetectorMessenger.cc | 6 +- .../TestEm1/src/EventAction.cc | 14 - .../TestEm1/src/HistoManager.cc | 7 - .../TestEm1/src/PhysListEmStandard.cc | 5 - .../TestEm1/src/PhysicsList.cc | 11 +- .../TestEm1/src/PhysicsListMessenger.cc | 5 +- .../TestEm1/src/PrimaryGeneratorAction.cc | 8 +- .../TestEm1/src/PrimaryGeneratorMessenger.cc | 5 +- .../electromagnetic/TestEm1/src/Run.cc | 15 +- .../electromagnetic/TestEm1/src/RunAction.cc | 4 +- .../TestEm1/src/StackingAction.cc | 11 - .../electromagnetic/TestEm1/src/StepMax.cc | 2 +- .../TestEm1/src/StepMaxMessenger.cc | 2 +- .../TestEm1/src/SteppingAction.cc | 6 +- .../TestEm1/src/TrackingAction.cc | 2 +- .../electromagnetic/TestEm10/TestEm10.out | 29 +- .../electromagnetic/TestEm11/.README.txt | 9 +- .../extended/electromagnetic/TestEm11/History | 8 + .../extended/electromagnetic/TestEm11/README | 7 +- .../electromagnetic/TestEm11/TestEm11.out | 13 +- .../TestEm11/include/ActionInitialization.hh | 6 +- .../TestEm11/include/DetectorConstruction.hh | 20 +- .../TestEm11/include/DetectorMessenger.hh | 18 +- .../TestEm11/include/EventAction.hh | 12 +- .../TestEm11/include/HistoManager.hh | 4 +- .../TestEm11/include/PhysListEmStandard.hh | 6 +- .../TestEm11/include/PhysicsList.hh | 12 +- .../TestEm11/include/PhysicsListMessenger.hh | 10 +- .../include/PrimaryGeneratorAction.hh | 12 +- .../include/PrimaryGeneratorMessenger.hh | 12 +- .../electromagnetic/TestEm11/include/Run.hh | 25 +- .../TestEm11/include/RunAction.hh | 18 +- .../TestEm11/include/StepMax.hh | 21 +- .../TestEm11/include/StepMaxMessenger.hh | 10 +- .../TestEm11/include/SteppingAction.hh | 8 +- .../TestEm11/include/TrackingAction.hh | 10 +- .../TestEm11/src/ActionInitialization.cc | 13 +- .../TestEm11/src/DetectorConstruction.cc | 10 +- .../TestEm11/src/DetectorMessenger.cc | 8 +- .../TestEm11/src/EventAction.cc | 42 +- .../TestEm11/src/HistoManager.cc | 11 +- .../TestEm11/src/PhysListEmStandard.cc | 5 - .../TestEm11/src/PhysicsList.cc | 13 +- .../TestEm11/src/PhysicsListMessenger.cc | 2 +- .../TestEm11/src/PrimaryGeneratorAction.cc | 3 +- .../TestEm11/src/PrimaryGeneratorMessenger.cc | 2 +- .../electromagnetic/TestEm11/src/Run.cc | 83 +- .../electromagnetic/TestEm11/src/RunAction.cc | 3 +- .../electromagnetic/TestEm11/src/StepMax.cc | 2 +- .../TestEm11/src/StepMaxMessenger.cc | 4 +- .../TestEm11/src/SteppingAction.cc | 7 +- .../TestEm11/src/TrackingAction.cc | 23 +- .../extended/electromagnetic/TestEm12/History | 2 + .../electromagnetic/TestEm12/TestEm12.out | 25 +- .../TestEm12/include/ActionInitialization.hh | 6 +- .../TestEm12/include/DetectorConstruction.hh | 16 +- .../TestEm12/include/DetectorMessenger.hh | 16 +- .../TestEm12/include/EventAction.hh | 10 +- .../TestEm12/include/HistoManager.hh | 4 +- .../TestEm12/include/PhysListEmStandard.hh | 6 +- .../TestEm12/include/PhysListEmStandardSSM.hh | 6 +- .../TestEm12/include/PhysicsList.hh | 14 +- .../TestEm12/include/PhysicsListMessenger.hh | 10 +- .../include/PrimaryGeneratorAction.hh | 10 +- .../include/PrimaryGeneratorMessenger.hh | 10 +- .../electromagnetic/TestEm12/include/Run.hh | 22 +- .../TestEm12/include/RunAction.hh | 18 +- .../TestEm12/include/StepMax.hh | 16 +- .../TestEm12/include/StepMaxMessenger.hh | 10 +- .../TestEm12/include/SteppingAction.hh | 6 +- .../TestEm12/include/TrackingAction.hh | 6 +- .../TestEm12/src/ActionInitialization.cc | 13 +- .../TestEm12/src/DetectorConstruction.cc | 3 - .../TestEm12/src/DetectorMessenger.cc | 7 +- .../TestEm12/src/EventAction.cc | 11 - .../TestEm12/src/HistoManager.cc | 7 - .../TestEm12/src/PhysListEmStandard.cc | 5 - .../TestEm12/src/PhysListEmStandardSSM.cc | 7 +- .../TestEm12/src/PhysicsList.cc | 2 +- .../TestEm12/src/PhysicsListMessenger.cc | 3 +- .../TestEm12/src/PrimaryGeneratorAction.cc | 6 - .../TestEm12/src/PrimaryGeneratorMessenger.cc | 4 +- .../electromagnetic/TestEm12/src/Run.cc | 15 +- .../electromagnetic/TestEm12/src/RunAction.cc | 3 +- .../electromagnetic/TestEm12/src/StepMax.cc | 2 +- .../TestEm12/src/StepMaxMessenger.cc | 4 +- .../TestEm12/src/SteppingAction.cc | 8 +- .../TestEm12/src/TrackingAction.cc | 3 +- .../extended/electromagnetic/TestEm13/History | 2 + .../electromagnetic/TestEm13/TestEm13.out | 6 +- .../TestEm13/include/ActionInitialization.hh | 4 +- .../TestEm13/include/DetectorConstruction.hh | 14 +- .../TestEm13/include/DetectorMessenger.hh | 14 +- .../TestEm13/include/PhysListEmLivermore.hh | 6 +- .../TestEm13/include/PhysListEmPenelope.hh | 6 +- .../TestEm13/include/PhysListEmStandard.hh | 6 +- .../TestEm13/include/PhysicsList.hh | 13 +- .../TestEm13/include/PhysicsListMessenger.hh | 10 +- .../include/PrimaryGeneratorAction.hh | 8 +- .../electromagnetic/TestEm13/include/Run.hh | 14 +- .../TestEm13/include/RunAction.hh | 14 +- .../TestEm13/include/SteppingAction.hh | 6 +- .../TestEm13/src/ActionInitialization.cc | 7 +- .../TestEm13/src/DetectorConstruction.cc | 2 - .../TestEm13/src/DetectorMessenger.cc | 6 +- .../TestEm13/src/PhysListEmLivermore.cc | 5 - .../TestEm13/src/PhysListEmPenelope.cc | 5 - .../TestEm13/src/PhysListEmStandard.cc | 5 - .../TestEm13/src/PhysicsList.cc | 5 +- .../TestEm13/src/PhysicsListMessenger.cc | 3 +- .../TestEm13/src/PrimaryGeneratorAction.cc | 2 +- .../electromagnetic/TestEm13/src/Run.cc | 9 +- .../electromagnetic/TestEm13/src/RunAction.cc | 7 +- .../TestEm13/src/SteppingAction.cc | 11 - .../extended/electromagnetic/TestEm14/History | 2 + .../electromagnetic/TestEm14/TestEm14.out | 6 +- .../TestEm14/include/ActionInitialization.hh | 4 +- .../TestEm14/include/DetectorConstruction.hh | 24 +- .../TestEm14/include/DetectorMessenger.hh | 14 +- .../TestEm14/include/HistoManager.hh | 5 +- .../TestEm14/include/PhysListEmLivermore.hh | 6 +- .../TestEm14/include/PhysListEmPenelope.hh | 6 +- .../TestEm14/include/PhysListEmStandard.hh | 6 +- .../TestEm14/include/PhysicsList.hh | 13 +- .../TestEm14/include/PhysicsListMessenger.hh | 10 +- .../include/PrimaryGeneratorAction.hh | 10 +- .../electromagnetic/TestEm14/include/Run.hh | 18 +- .../TestEm14/include/RunAction.hh | 18 +- .../TestEm14/include/SteppingAction.hh | 6 +- .../TestEm14/src/ActionInitialization.cc | 9 +- .../TestEm14/src/DetectorConstruction.cc | 2 - .../TestEm14/src/DetectorMessenger.cc | 6 +- .../TestEm14/src/HistoManager.cc | 8 - .../TestEm14/src/PhysListEmLivermore.cc | 6 - .../TestEm14/src/PhysListEmPenelope.cc | 6 - .../TestEm14/src/PhysListEmStandard.cc | 5 - .../TestEm14/src/PhysicsList.cc | 4 - .../TestEm14/src/PhysicsListMessenger.cc | 3 +- .../TestEm14/src/PrimaryGeneratorAction.cc | 2 +- .../electromagnetic/TestEm14/src/Run.cc | 10 +- .../electromagnetic/TestEm14/src/RunAction.cc | 2 +- .../TestEm14/src/SteppingAction.cc | 11 - .../electromagnetic/TestEm15/.README.txt | 219 +- .../extended/electromagnetic/TestEm15/History | 4 + .../extended/electromagnetic/TestEm15/README | 118 +- .../electromagnetic/TestEm15/README.gamma | 7 +- .../electromagnetic/TestEm15/TestEm15.out | 7 +- .../electromagnetic/TestEm16/TestEm16.out | 5 +- .../electromagnetic/TestEm17/TestEm17.out | 29 +- .../extended/electromagnetic/TestEm18/History | 3 + .../electromagnetic/TestEm18/TestEm18.out | 4 +- .../TestEm18/include/DetectorConstruction.hh | 12 +- .../TestEm18/include/DetectorMessenger.hh | 16 +- .../TestEm18/include/EventAction.hh | 10 +- .../TestEm18/include/HistoManager.hh | 4 +- .../TestEm18/include/PhysListEmLivermore.hh | 6 +- .../TestEm18/include/PhysListEmPenelope.hh | 6 +- .../TestEm18/include/PhysListEmStandard.hh | 6 +- .../TestEm18/include/PhysicsList.hh | 10 +- .../TestEm18/include/PhysicsListMessenger.hh | 10 +- .../include/PrimaryGeneratorAction.hh | 8 +- .../TestEm18/include/RunAction.hh | 28 +- .../TestEm18/include/StackingAction.hh | 8 +- .../TestEm18/include/StackingMessenger.hh | 8 +- .../TestEm18/include/StepMax.hh | 18 +- .../TestEm18/include/StepMaxMessenger.hh | 8 +- .../TestEm18/include/SteppingAction.hh | 8 +- .../TestEm18/include/TrackingAction.hh | 8 +- .../TestEm18/src/DetectorConstruction.cc | 2 - .../TestEm18/src/DetectorMessenger.cc | 7 +- .../TestEm18/src/EventAction.cc | 7 +- .../TestEm18/src/HistoManager.cc | 7 - .../TestEm18/src/PhysListEmLivermore.cc | 5 - .../TestEm18/src/PhysListEmPenelope.cc | 5 - .../TestEm18/src/PhysListEmStandard.cc | 5 - .../TestEm18/src/PhysicsList.cc | 4 +- .../TestEm18/src/PhysicsListMessenger.cc | 3 +- .../TestEm18/src/PrimaryGeneratorAction.cc | 2 +- .../electromagnetic/TestEm18/src/RunAction.cc | 2 +- .../TestEm18/src/StackingAction.cc | 3 +- .../TestEm18/src/StackingMessenger.cc | 2 +- .../electromagnetic/TestEm18/src/StepMax.cc | 2 +- .../TestEm18/src/StepMaxMessenger.cc | 2 +- .../TestEm18/src/SteppingAction.cc | 7 +- .../TestEm18/src/TrackingAction.cc | 2 +- .../extended/electromagnetic/TestEm2/History | 2 + .../electromagnetic/TestEm2/TestEm2.out | 25 +- .../TestEm2/include/ActionInitialization.hh | 10 +- .../TestEm2/include/DetectorConstruction.hh | 28 +- .../TestEm2/include/DetectorMessenger.hh | 16 +- .../TestEm2/include/EmAcceptance.hh | 6 +- .../TestEm2/include/EventAction.hh | 8 +- .../TestEm2/include/PhysListEmStandard.hh | 7 +- .../TestEm2/include/PhysicsList.hh | 10 +- .../TestEm2/include/PhysicsListMessenger.hh | 16 +- .../TestEm2/include/PrimaryGeneratorAction.hh | 16 +- .../electromagnetic/TestEm2/include/Run.hh | 31 +- .../TestEm2/include/RunAction.hh | 26 +- .../TestEm2/include/RunActionMessenger.hh | 12 +- .../TestEm2/include/StepMax.hh | 6 +- .../TestEm2/include/StepMaxMessenger.hh | 6 +- .../TestEm2/include/SteppingAction.hh | 6 +- .../TestEm2/include/TrackingAction.hh | 6 +- .../TestEm2/src/ActionInitialization.cc | 5 - .../TestEm2/src/DetectorConstruction.cc | 6 +- .../TestEm2/src/DetectorMessenger.cc | 2 +- .../TestEm2/src/EmAcceptance.cc | 11 - .../TestEm2/src/EventAction.cc | 11 - .../TestEm2/src/PhysListEmStandard.cc | 5 - .../TestEm2/src/PhysicsList.cc | 3 +- .../TestEm2/src/PhysicsListMessenger.cc | 2 +- .../TestEm2/src/PrimaryGeneratorAction.cc | 3 +- .../electromagnetic/TestEm2/src/Run.cc | 9 +- .../electromagnetic/TestEm2/src/RunAction.cc | 4 +- .../TestEm2/src/RunActionMessenger.cc | 5 +- .../electromagnetic/TestEm2/src/StepMax.cc | 2 +- .../TestEm2/src/StepMaxMessenger.cc | 2 +- .../TestEm2/src/SteppingAction.cc | 7 +- .../TestEm2/src/TrackingAction.cc | 6 - .../electromagnetic/TestEm3/.README.txt | 7 +- .../extended/electromagnetic/TestEm3/History | 8 + .../extended/electromagnetic/TestEm3/README | 4 +- .../electromagnetic/TestEm3/TestEm3-geom.out | 30 +- .../electromagnetic/TestEm3/TestEm3.out | 45 +- .../TestEm3/include/ActionInitialization.hh | 4 +- .../TestEm3/include/DetectorConstruction.hh | 44 +- .../TestEm3/include/DetectorMessenger.hh | 18 +- .../TestEm3/include/EmAcceptance.hh | 6 +- .../TestEm3/include/EventAction.hh | 17 +- .../TestEm3/include/HistoManager.hh | 7 +- .../TestEm3/include/PhysListEmStandard.hh | 6 +- .../TestEm3/include/PhysicsList.hh | 10 +- .../TestEm3/include/PhysicsListMessenger.hh | 10 +- .../TestEm3/include/PrimaryGeneratorAction.hh | 13 +- .../include/PrimaryGeneratorMessenger.hh | 12 +- .../electromagnetic/TestEm3/include/Run.hh | 27 +- .../TestEm3/include/RunAction.hh | 20 +- .../TestEm3/include/RunActionMessenger.hh | 12 +- .../TestEm3/include/StepMax.hh | 6 +- .../TestEm3/include/StepMaxMessenger.hh | 8 +- .../TestEm3/include/SteppingAction.hh | 8 +- .../TestEm3/include/TrackingAction.hh | 12 +- .../electromagnetic/TestEm3/run01.mac | 20 +- .../TestEm3/src/ActionInitialization.cc | 9 +- .../TestEm3/src/DetectorConstruction.cc | 5 - .../TestEm3/src/DetectorMessenger.cc | 8 +- .../TestEm3/src/EmAcceptance.cc | 11 - .../TestEm3/src/EventAction.cc | 39 +- .../TestEm3/src/HistoManager.cc | 17 +- .../TestEm3/src/PhysListEmStandard.cc | 5 - .../TestEm3/src/PhysicsList.cc | 3 +- .../TestEm3/src/PhysicsListMessenger.cc | 2 +- .../TestEm3/src/PrimaryGeneratorAction.cc | 6 +- .../TestEm3/src/PrimaryGeneratorMessenger.cc | 5 +- .../electromagnetic/TestEm3/src/Run.cc | 78 +- .../electromagnetic/TestEm3/src/RunAction.cc | 3 +- .../TestEm3/src/RunActionMessenger.cc | 5 +- .../electromagnetic/TestEm3/src/StepMax.cc | 2 +- .../TestEm3/src/StepMaxMessenger.cc | 2 +- .../TestEm3/src/SteppingAction.cc | 7 +- .../TestEm3/src/TrackingAction.cc | 16 +- .../extended/electromagnetic/TestEm4/History | 3 + .../electromagnetic/TestEm4/TestEm4.out | 9 +- .../TestEm4/include/ActionInitialization.hh | 9 +- .../TestEm4/include/DetectorConstruction.hh | 8 +- .../TestEm4/include/EventAction.hh | 17 +- .../TestEm4/include/PhysicsList.hh | 11 +- .../TestEm4/include/PrimaryGeneratorAction.hh | 10 +- .../TestEm4/include/RunAction.hh | 7 +- .../TestEm4/include/SteppingAction.hh | 9 +- .../TestEm4/src/ActionInitialization.cc | 11 - .../TestEm4/src/DetectorConstruction.cc | 11 - .../TestEm4/src/EventAction.cc | 19 +- .../TestEm4/src/PhysicsList.cc | 7 - .../TestEm4/src/PrimaryGeneratorAction.cc | 5 - .../electromagnetic/TestEm4/src/RunAction.cc | 57 +- .../TestEm4/src/SteppingAction.cc | 7 +- .../extended/electromagnetic/TestEm5/History | 2 + .../electromagnetic/TestEm5/TestEm5-geom.out | 12 +- .../TestEm5/TestEm5-pixe_ANSTO.out | 7 +- .../electromagnetic/TestEm5/TestEm5.out | 137 +- .../TestEm5/include/ActionInitialization.hh | 4 +- .../TestEm5/include/DetectorConstruction.hh | 34 +- .../TestEm5/include/DetectorMessenger.hh | 22 +- .../TestEm5/include/EventAction.hh | 14 +- .../TestEm5/include/HistoManager.hh | 6 +- .../TestEm5/include/PhysListEmStandard.hh | 6 +- .../TestEm5/include/PhysicsList.hh | 10 +- .../TestEm5/include/PhysicsListMessenger.hh | 10 +- .../TestEm5/include/PrimaryGeneratorAction.hh | 12 +- .../include/PrimaryGeneratorMessenger.hh | 12 +- .../electromagnetic/TestEm5/include/Run.hh | 33 +- .../TestEm5/include/RunAction.hh | 18 +- .../TestEm5/include/StackingAction.hh | 6 +- .../TestEm5/include/StackingMessenger.hh | 10 +- .../TestEm5/include/StepMax.hh | 7 +- .../TestEm5/include/StepMaxMessenger.hh | 6 +- .../TestEm5/include/SteppingAction.hh | 8 +- .../TestEm5/include/TrackingAction.hh | 16 +- .../TestEm5/src/ActionInitialization.cc | 7 +- .../TestEm5/src/DetectorConstruction.cc | 5 - .../TestEm5/src/DetectorMessenger.cc | 11 +- .../TestEm5/src/EventAction.cc | 12 - .../TestEm5/src/HistoManager.cc | 8 - .../TestEm5/src/PhysListEmStandard.cc | 4 +- .../TestEm5/src/PhysicsList.cc | 3 +- .../TestEm5/src/PhysicsListMessenger.cc | 5 +- .../TestEm5/src/PrimaryGeneratorAction.cc | 5 +- .../TestEm5/src/PrimaryGeneratorMessenger.cc | 5 +- .../electromagnetic/TestEm5/src/Run.cc | 27 +- .../electromagnetic/TestEm5/src/RunAction.cc | 2 +- .../TestEm5/src/StackingAction.cc | 4 +- .../TestEm5/src/StackingMessenger.cc | 4 +- .../electromagnetic/TestEm5/src/StepMax.cc | 2 +- .../TestEm5/src/StepMaxMessenger.cc | 2 +- .../TestEm5/src/SteppingAction.cc | 10 +- .../TestEm5/src/TrackingAction.cc | 8 +- .../electromagnetic/TestEm6/TestEm6.out | 6 +- .../extended/electromagnetic/TestEm7/History | 3 + .../electromagnetic/TestEm7/TestEm7.out | 78 +- .../extended/electromagnetic/TestEm7/c12.mac | 13 +- .../extended/electromagnetic/TestEm7/mu.mac | 50 + .../extended/electromagnetic/TestEm8/History | 3 + .../electromagnetic/TestEm8/TestEm8.out | 4 +- .../TestEm8/include/ActionInitialization.hh | 18 +- .../TestEm8/include/DetectorConstruction.hh | 72 +- .../TestEm8/include/DetectorMessenger.hh | 39 +- .../TestEm8/include/EventAction.hh | 15 +- .../TestEm8/include/PhysicsList.hh | 37 +- .../TestEm8/include/PhysicsListMessenger.hh | 42 +- .../TestEm8/include/PrimaryGeneratorAction.hh | 22 +- .../electromagnetic/TestEm8/include/Run.hh | 76 +- .../TestEm8/include/RunAction.hh | 26 +- .../TestEm8/include/StackingAction.hh | 27 +- .../TestEm8/include/StackingMessenger.hh | 21 +- .../TestEm8/include/StepMax.hh | 38 +- .../TestEm8/include/TargetSD.hh | 28 +- .../TestEm8/include/TestParameters.hh | 34 +- .../TestEm8/src/ActionInitialization.cc | 16 +- .../TestEm8/src/DetectorConstruction.cc | 464 +- .../TestEm8/src/DetectorMessenger.cc | 97 +- .../TestEm8/src/EventAction.cc | 29 +- .../TestEm8/src/PhysicsList.cc | 60 +- .../TestEm8/src/PhysicsListMessenger.cc | 109 +- .../TestEm8/src/PrimaryGeneratorAction.cc | 21 +- .../electromagnetic/TestEm8/src/Run.cc | 184 +- .../electromagnetic/TestEm8/src/RunAction.cc | 59 +- .../TestEm8/src/StackingAction.cc | 39 +- .../TestEm8/src/StackingMessenger.cc | 22 +- .../electromagnetic/TestEm8/src/StepMax.cc | 46 +- .../electromagnetic/TestEm8/src/TargetSD.cc | 33 +- .../TestEm8/src/TestParameters.cc | 128 +- .../electromagnetic/TestEm9/TestEm9.out | 31 +- .../errorpropagation/errProp/errProp.out | 24 +- .../extended/eventgenerator/exgps/History | 7 +- .../eventgenerator/exgps/exgps_batch.out | 2 +- .../particleGun/particleGun_run1.out | 6 +- .../particleGun/particleGun_run2.out | 4 +- .../particleGun/particleGun_run3.out | 4 +- .../particleGun/particleGun_run4.out | 4 +- .../pythia/py8decayer/.README.txt | 12 +- .../eventgenerator/pythia/py8decayer/History | 4 + .../eventgenerator/pythia/py8decayer/README | 14 +- .../userPrimaryGenerator.out | 4 +- examples/extended/exoticphysics/History | 7 +- .../exoticphysics/channeling/channeling.out | 85 +- .../exoticphysics/dmparticle/dmparticle.out | 27 +- .../exoticphysics/monopole/monopole.out | 40 +- .../exoticphysics/saxs/saxs-slits.out | 14 +- examples/extended/exoticphysics/saxs/saxs.out | 14 +- examples/extended/exoticphysics/ucn/ExUCN.out | 7 +- .../field/BlineTracer/BlineTracer.out | 2 +- examples/extended/field/field01/field01.out | 346 +- examples/extended/field/field02/field02.out | 4251 +-- examples/extended/field/field03/field03.out | 94 +- examples/extended/field/field04/field04.out | 3897 +- examples/extended/field/field05/field05.out | 5 +- examples/extended/field/field06/field06.out | 6 +- .../extended/g3tog4/clGeometry/clGeometry.out | 52 +- .../extended/geometry/transforms/batch.out | 2 +- .../geometry/vecGeomNavigation/CMakeLists.txt | 2 +- .../geometry/vecGeomNavigation/History | 5 +- .../geometry/vecGeomNavigation/vecGeomNav.out | 146 +- examples/extended/hadronic/.README.txt | 12 +- .../FissionFragment/FissionFragment.out | 36 +- .../extended/hadronic/FlukaCern/.README.txt | 43 + .../FlukaCern/FlukaInterface/README.md | 140 + .../source/cpp_fortran_bridges/cpp/flush.cc | 25 +- .../source/cpp_fortran_bridges/cpp/flush.h | 47 + .../cpp/string_conversion.cc | 55 + .../cpp/string_conversion.h | 41 +- .../source/cpp_fortran_bridges/cpp/types.h | 68 + .../cpp_fortran_bridges/fortran/closef.f | 7 + .../cpp_fortran_bridges/fortran/flushf.f | 7 + .../source/cpp_utils/string_print.cc | 65 + .../source/cpp_utils/string_print.h | 35 +- .../fluka4_wrapper/cpp/procedures/flabrt.cc | 35 +- .../fluka4_wrapper/cpp/procedures/flabrt.h | 26 +- .../fluka4_wrapper/cpp/procedures/oauxf.cc | 55 + .../fluka4_wrapper/cpp/procedures/oauxf.h | 48 + .../fortran/procedures/flabrw.f | 19 + .../fortran/procedures/oauxfw.f | 18 + .../interface_to_G4/cmcyl.hh | 50 + .../fluka_common_dependencies.hh | 74 + .../interface_to_G4/fluka_dependencies.hh | 95 + .../interface_to_G4/fluka_interface.cc | 1110 + .../interface_to_G4/fluka_interface.hh | 89 + .../test/interface_to_G4/test_interface.cc | 146 + .../fluka_G4_bridges/FLUKAParticleTable.cc | 367 + .../fluka_G4_bridges/FLUKAParticleTable.hh | 79 +- .../source/fluka_G4_bridges/flrndm.cc | 52 + .../source/fluka_G4_bridges/flrndm.hh | 54 + .../source/fluka_G4_bridges/flrnlp.cc | 54 + .../source/fluka_G4_bridges/flrnlp.hh | 54 + .../source/fluka_G4_bridges/flrnoc.cc | 52 + .../source/fluka_G4_bridges/flrnoc.hh | 48 + .../FLUKAHadronInelasticPhysicsConstructor.cc | 271 + .../FLUKAHadronInelasticPhysicsConstructor.hh | 56 +- .../FLUKAInelasticScatteringXS.cc | 159 + .../FLUKAInelasticScatteringXS.hh | 81 + .../FLUKANuclearInelasticModel.cc | 66 + .../FLUKANuclearInelasticModel.hh | 60 + ...HP_CernFLUKAHadronInelastic_PhysicsList.cc | 129 + ...HP_CernFLUKAHadronInelastic_PhysicsList.hh | 55 + .../build_G4_process_helpers.cc | 93 + .../build_G4_process_helpers.hh | 69 + .../FlukaCern/PhysicsListLevel/.README.txt | 25 + .../FlukaCern/PhysicsListLevel/README.md | 16 + .../ProcessLevel/CrossSection/.README.txt | 169 + .../ProcessLevel/CrossSection/CMakeLists.txt | 76 + .../CrossSection/HadronNucleusXS.cc | 184 + .../ProcessLevel/CrossSection/History | 19 + .../ProcessLevel-CrossSection.out | 38 + .../ProcessLevel/CrossSection/README.md | 158 + .../ProcessLevel/CrossSection/all_XS.in | 14 + .../include/DetectorConstruction.hh | 59 + .../CrossSection/include/XSHistoManager.hh | 128 + .../include/XSHistoManagerMessenger.hh | 83 + .../CrossSection/src/DetectorConstruction.cc | 75 + .../CrossSection/src/XSHistoManager.cc | 463 + .../src/XSHistoManagerMessenger.cc | 112 + .../CrossSection/study_all_XS.flair | 248 + .../ProcessLevel/FinalState/.README.txt | 190 + .../ProcessLevel/FinalState/CMakeLists.txt | 72 + .../FinalState/HadNucIneEvents.cc | 441 + .../FlukaCern/ProcessLevel/FinalState/History | 19 + .../FinalState/ProcessLevel-FinalState.out | 151 + .../ProcessLevel/FinalState/README.md | 181 + .../include/FinalStateHistoManager.hh | 129 + .../FinalState/include/HadronicGenerator.hh | 183 + .../FinalState/src/FinalStateHistoManager.cc | 373 + .../FinalState/src/HadronicGenerator.cc | 1328 + .../FinalState/study_final_state.flair | 734 + .../update_final_state_flair_file.sh | 84 + .../extended/hadronic/FlukaCern/README.md | 47 + .../FlukaCern/utils/include/G4H1Wrapper.hh | 90 + .../utils/include/tools_histo_flair.hh | 109 + .../FlukaCern/utils/src/G4H1Wrapper.cc | 147 + .../FlukaCern/utils/src/tools_histo_flair.cc | 331 + examples/extended/hadronic/Hadr00/hadr00.out | 38 +- examples/extended/hadronic/Hadr01/History | 5 + examples/extended/hadronic/Hadr01/hadr01.out | 88 +- .../Hadr01/include/DetectorMessenger.hh | 1 + .../extended/hadronic/Hadr01/neutronGP.in | 29 + examples/extended/hadronic/Hadr01/run.csh | 38 +- .../hadronic/Hadr01/src/DetectorMessenger.cc | 8 + .../hadronic/Hadr01/src/HistoManager.cc | 15 +- examples/extended/hadronic/Hadr02/hadr02.out | 62 +- examples/extended/hadronic/Hadr03/.README.txt | 2 +- examples/extended/hadronic/Hadr03/Hadr03.cc | 2 +- examples/extended/hadronic/Hadr03/History | 10 + examples/extended/hadronic/Hadr03/README | 2 +- examples/extended/hadronic/Hadr03/hadr03.out | 216 +- .../Hadr03/include/ActionInitialization.hh | 10 +- .../Hadr03/include/DetectorConstruction.hh | 14 +- .../Hadr03/include/DetectorMessenger.hh | 16 +- .../Hadr03/include/GammaNuclearPhysics.hh | 3 +- .../Hadr03/include/GammaNuclearPhysicsLEND.hh | 3 +- .../hadronic/Hadr03/include/HistoManager.hh | 4 +- .../hadronic/Hadr03/include/PhysicsList.hh | 2 +- .../Hadr03/include/PrimaryGeneratorAction.hh | 8 +- .../extended/hadronic/Hadr03/include/Run.hh | 20 +- .../hadronic/Hadr03/include/RunAction.hh | 20 +- .../hadronic/Hadr03/include/RunMessenger.hh | 10 +- .../hadronic/Hadr03/include/SteppingAction.hh | 6 +- .../extended/hadronic/Hadr03/nFission.mac | 10 +- .../Hadr03/src/ActionInitialization.cc | 10 +- .../Hadr03/src/DetectorConstruction.cc | 2 - .../hadronic/Hadr03/src/DetectorMessenger.cc | 4 +- .../Hadr03/src/GammaNuclearPhysics.cc | 6 - .../Hadr03/src/GammaNuclearPhysicsLEND.cc | 5 - .../hadronic/Hadr03/src/HistoManager.cc | 7 - .../hadronic/Hadr03/src/PhysicsList.cc | 10 +- .../Hadr03/src/PrimaryGeneratorAction.cc | 3 +- examples/extended/hadronic/Hadr03/src/Run.cc | 12 +- .../extended/hadronic/Hadr03/src/RunAction.cc | 4 +- .../hadronic/Hadr03/src/RunMessenger.cc | 4 +- .../hadronic/Hadr03/src/SteppingAction.cc | 17 +- examples/extended/hadronic/Hadr04/History | 3 + examples/extended/hadronic/Hadr04/hadr04.out | 5 +- .../Hadr04/include/ActionInitialization.hh | 8 +- .../Hadr04/include/DetectorConstruction.hh | 15 +- .../Hadr04/include/DetectorMessenger.hh | 16 +- .../hadronic/Hadr04/include/HistoManager.hh | 4 +- .../Hadr04/include/NeutronHPphysics.hh | 9 +- .../hadronic/Hadr04/include/PhysicsList.hh | 6 +- .../Hadr04/include/PrimaryGeneratorAction.hh | 9 +- .../extended/hadronic/Hadr04/include/Run.hh | 16 +- .../hadronic/Hadr04/include/RunAction.hh | 16 +- .../hadronic/Hadr04/include/StackingAction.hh | 6 +- .../hadronic/Hadr04/include/SteppingAction.hh | 6 +- .../hadronic/Hadr04/include/TrackingAction.hh | 14 +- .../Hadr04/src/ActionInitialization.cc | 10 +- .../Hadr04/src/DetectorConstruction.cc | 2 - .../hadronic/Hadr04/src/DetectorMessenger.cc | 4 +- .../hadronic/Hadr04/src/HistoManager.cc | 7 - .../hadronic/Hadr04/src/NeutronHPphysics.cc | 3 +- .../hadronic/Hadr04/src/PhysicsList.cc | 7 - .../Hadr04/src/PrimaryGeneratorAction.cc | 4 - examples/extended/hadronic/Hadr04/src/Run.cc | 10 +- .../extended/hadronic/Hadr04/src/RunAction.cc | 3 +- .../hadronic/Hadr04/src/StackingAction.cc | 11 - .../hadronic/Hadr04/src/SteppingAction.cc | 7 +- .../hadronic/Hadr04/src/TrackingAction.cc | 7 - examples/extended/hadronic/Hadr05/.README.txt | 7 +- examples/extended/hadronic/Hadr05/Cu-lAr.mac | 9 +- examples/extended/hadronic/Hadr05/Fe-Sci.mac | 11 +- examples/extended/hadronic/Hadr05/History | 2 + .../extended/hadronic/Hadr05/Pb-lAr-em.mac | 19 +- examples/extended/hadronic/Hadr05/Pb-lAr.mac | 9 +- examples/extended/hadronic/Hadr05/README | 7 +- examples/extended/hadronic/Hadr05/W-lAr.mac | 11 +- examples/extended/hadronic/Hadr05/hadr05.out | 36 +- .../hadronic/Hadr05/include/EventAction.hh | 7 +- .../hadronic/Hadr05/include/HistoManager.hh | 2 +- .../extended/hadronic/Hadr05/include/Run.hh | 9 +- .../hadronic/Hadr05/include/TrackingAction.hh | 4 +- examples/extended/hadronic/Hadr05/plotHisto.C | 23 +- .../Hadr05/src/ActionInitialization.cc | 2 +- .../hadronic/Hadr05/src/EventAction.cc | 39 +- .../hadronic/Hadr05/src/HistoManager.cc | 5 +- examples/extended/hadronic/Hadr05/src/Run.cc | 82 +- .../hadronic/Hadr05/src/TrackingAction.cc | 15 +- examples/extended/hadronic/Hadr06/.README.txt | 12 +- examples/extended/hadronic/Hadr06/History | 9 +- examples/extended/hadronic/Hadr06/README | 10 +- examples/extended/hadronic/Hadr06/hadr06.out | 109 +- .../Hadr06/include/ActionInitialization.hh | 8 +- .../Hadr06/include/DetectorConstruction.hh | 19 +- .../Hadr06/include/DetectorMessenger.hh | 16 +- .../Hadr06/include/ElectromagneticPhysics.hh | 2 +- .../hadronic/Hadr06/include/EventAction.hh | 13 +- .../Hadr06/include/GammaNuclearPhysics.hh | 7 +- .../Hadr06/include/GammaNuclearPhysicsLEND.hh | 5 +- .../Hadr06/include/HadronElasticPhysicsHP.hh | 4 +- .../hadronic/Hadr06/include/HistoManager.hh | 4 +- .../hadronic/Hadr06/include/PhysicsList.hh | 2 +- .../Hadr06/include/PrimaryGeneratorAction.hh | 9 +- .../Hadr06/include/RadioactiveDecayPhysics.hh | 5 +- .../extended/hadronic/Hadr06/include/Run.hh | 16 +- .../hadronic/Hadr06/include/RunAction.hh | 16 +- .../hadronic/Hadr06/include/SteppingAction.hh | 6 +- .../hadronic/Hadr06/include/TrackingAction.hh | 8 +- .../Hadr06/include/TrackingMessenger.hh | 8 +- examples/extended/hadronic/Hadr06/run1.mac | 14 +- .../Hadr06/src/ActionInitialization.cc | 10 +- .../Hadr06/src/DetectorConstruction.cc | 3 - .../hadronic/Hadr06/src/DetectorMessenger.cc | 4 +- .../Hadr06/src/ElectromagneticPhysics.cc | 7 +- .../hadronic/Hadr06/src/EventAction.cc | 23 +- .../Hadr06/src/GammaNuclearPhysics.cc | 6 - .../Hadr06/src/GammaNuclearPhysicsLEND.cc | 6 - .../Hadr06/src/HadronElasticPhysicsHP.cc | 3 +- .../hadronic/Hadr06/src/HistoManager.cc | 14 +- .../hadronic/Hadr06/src/PhysicsList.cc | 8 +- .../Hadr06/src/PrimaryGeneratorAction.cc | 5 - .../Hadr06/src/RadioactiveDecayPhysics.cc | 5 - examples/extended/hadronic/Hadr06/src/Run.cc | 42 +- .../extended/hadronic/Hadr06/src/RunAction.cc | 3 +- .../hadronic/Hadr06/src/SteppingAction.cc | 7 +- .../hadronic/Hadr06/src/TrackingAction.cc | 3 +- .../hadronic/Hadr06/src/TrackingMessenger.cc | 3 +- examples/extended/hadronic/Hadr07/.README.txt | 3 + examples/extended/hadronic/Hadr07/History | 3 + examples/extended/hadronic/Hadr07/README | 13 +- examples/extended/hadronic/Hadr07/hadr07.out | 72 +- .../hadronic/Hadr07/include/EventAction.hh | 10 +- .../extended/hadronic/Hadr07/include/Run.hh | 12 +- .../hadronic/Hadr07/include/TrackingAction.hh | 6 +- .../extended/hadronic/Hadr07/multiLayers.mac | 4 +- examples/extended/hadronic/Hadr07/plotHisto.C | 20 +- .../Hadr07/src/ActionInitialization.cc | 2 +- .../hadronic/Hadr07/src/EventAction.cc | 31 +- .../hadronic/Hadr07/src/HistoManager.cc | 7 +- examples/extended/hadronic/Hadr07/src/Run.cc | 65 +- .../hadronic/Hadr07/src/TrackingAction.cc | 6 +- examples/extended/hadronic/Hadr08/hadr08.out | 38 +- examples/extended/hadronic/Hadr09/hadr09.out | 4697 ++- examples/extended/hadronic/Hadr10/History | 4 +- examples/extended/hadronic/Hadr10/hadr10.in | 1 + examples/extended/hadronic/Hadr10/hadr10.out | 2271 +- examples/extended/hadronic/History | 4 + .../hadronic/NeutronSource/NeutronSource.out | 112 +- .../hadronic/ParticleFluence/Calo/Calo.out | 220 +- .../hadronic/ParticleFluence/Calo/History | 7 + .../ParticleFluence/Calo/include/Run.hh | 6 +- .../Calo/include/TrackingAction.hh | 2 +- .../hadronic/ParticleFluence/Calo/src/Run.cc | 2 +- .../ConcentricSpheres/ConcentricSpheres.out | 1338 +- .../ParticleFluence/ConcentricSpheres/History | 7 + .../ConcentricSpheres/include/Run.hh | 6 +- .../include/TrackingAction.hh | 2 +- .../ConcentricSpheres/src/Run.cc | 2 +- .../hadronic/ParticleFluence/Layer/History | 6 + .../hadronic/ParticleFluence/Layer/Layer.out | 1920 +- .../ParticleFluence/Layer/include/Run.hh | 6 +- .../Layer/include/TrackingAction.hh | 2 +- .../hadronic/ParticleFluence/Layer/src/Run.cc | 2 +- .../hadronic/ParticleFluence/Sphere/History | 6 + .../ParticleFluence/Sphere/Sphere.out | 1382 +- .../ParticleFluence/Sphere/include/Run.hh | 6 +- .../Sphere/include/TrackingAction.hh | 2 +- .../ParticleFluence/Sphere/src/Run.cc | 2 +- examples/extended/hadronic/README | 8 + examples/extended/medical/DICOM/run.out | 40 +- examples/extended/medical/DICOM2/run.out | 42 +- .../medical/GammaTherapy/GammaTherapy.out | 25 +- examples/extended/medical/History | 8 +- examples/extended/medical/dna/.README.txt | 2 + examples/extended/medical/dna/AuNP/AuNP.out | 2 +- examples/extended/medical/dna/History | 2 + examples/extended/medical/dna/README | 1 + .../extended/medical/dna/UHDR/.README.txt | 140 + .../extended/medical/dna/UHDR/CMakeLists.txt | 58 + examples/extended/medical/dna/UHDR/History | 9 + examples/extended/medical/dna/UHDR/README | 132 + examples/extended/medical/dna/UHDR/UHDR.cc | 81 + examples/extended/medical/dna/UHDR/UHDR.out | 679 + examples/extended/medical/dna/UHDR/beam.in | 38 + .../dna/UHDR/include/ActionInitialization.hh | 52 + .../dna/UHDR/include/BoundedBrownianAction.hh | 57 + .../UHDR/include/ChemFrickeReactionBuilder.hh | 24 +- .../include/ChemNO2_NO3ScavengerBuilder.hh | 41 + .../UHDR/include/ChemOxygenWaterBuilder.hh | 45 + .../dna/UHDR/include/ChemPureWaterBuilder.hh | 42 + .../dna/UHDR/include/ChemistryWorld.hh | 59 + .../dna/UHDR/include/DetectorConstruction.hh | 50 + .../dna/UHDR/include/EmDNAChemistry.hh | 58 + .../medical/dna/UHDR/include/PhysicsList.hh | 61 + .../UHDR/include/PrimaryGeneratorAction.hh | 68 + .../UHDR/include/PrimaryGeneratorMessenger.hh | 37 +- .../medical/dna/UHDR/include/PulseAction.hh | 98 + .../dna/UHDR/include/PulseActionMessenger.hh | 32 +- .../extended/medical/dna/UHDR/include/Run.hh | 58 + .../medical/dna/UHDR/include/RunAction.hh | 70 + .../medical/dna/UHDR/include/Scorer.hh | 173 + .../dna/UHDR/include/StackingAction.hh | 43 + .../dna/UHDR/include/TimeStepAction.hh | 78 + .../extended/medical/dna/UHDR/plotG_time.C | 233 + .../extended/medical/dna/UHDR/pulseShape.dat | 95 + .../dna/UHDR/src/ActionInitialization.cc | 80 + .../dna/UHDR/src/BoundedBrownianAction.cc | 86 + .../dna/UHDR/src/ChemFrickeReactionBuilder.cc | 85 + .../UHDR/src/ChemNO2_NO3ScavengerBuilder.cc | 66 + .../dna/UHDR/src/ChemOxygenWaterBuilder.cc | 383 + .../dna/UHDR/src/ChemPureWaterBuilder.cc | 164 + .../medical/dna/UHDR/src/ChemistryWorld.cc | 124 + .../dna/UHDR/src/DetectorConstruction.cc | 90 + .../medical/dna/UHDR/src/EmDNAChemistry.cc | 505 + .../medical/dna/UHDR/src/PhysicsList.cc | 67 + .../dna/UHDR/src/PrimaryGeneratorAction.cc | 94 + .../dna/UHDR/src/PrimaryGeneratorMessenger.cc | 72 + .../medical/dna/UHDR/src/PulseAction.cc | 193 + .../dna/UHDR/src/PulseActionMessenger.cc | 55 + examples/extended/medical/dna/UHDR/src/Run.cc | 84 + .../medical/dna/UHDR/src/RunAction.cc | 117 + .../extended/medical/dna/UHDR/src/Scorer.cc | 463 + .../medical/dna/UHDR/src/StackingAction.cc | 50 + .../medical/dna/UHDR/src/TimeStepAction.cc | 97 + examples/extended/medical/dna/chem1/chem1.out | 4 +- examples/extended/medical/dna/chem2/chem2.out | 2 +- examples/extended/medical/dna/chem3/chem3.out | 4 +- examples/extended/medical/dna/chem4/chem4.out | 10 +- examples/extended/medical/dna/chem5/chem5.out | 6 +- examples/extended/medical/dna/chem6/chem6.out | 34 +- .../medical/dna/clustering/clustering.out | 4 +- .../medical/dna/dnadamage1/dnadamage1.out | 16 +- .../medical/dna/dnadamage2/.README.txt | 321 + .../medical/dna/dnadamage2/CMakeLists.txt | 72 + .../medical/dna/dnadamage2/CaesiumSource.src | 19 + .../medical/dna/dnadamage2/CobaltSource.src | 28 + .../extended/medical/dna/dnadamage2/History | 8 + .../medical/dna/dnadamage2/PlasmidOffsets.txt | 27 + .../medical/dna/dnadamage2/README.txt | 336 + .../dna/dnadamage2/RunDoseDependance.in | 97 + .../medical/dna/dnadamage2/dnadamage2.cc | 129 + .../medical/dna/dnadamage2/dnadamage2.in | 59 + .../medical/dna/dnadamage2/dnadamage2.out | 486 + .../include/ActionInitialization.hh | 64 + .../include/DetectorConstruction.hh | 113 + .../include/G4EmDNAChemistryForPlasmids.hh | 81 + .../dnadamage2/include/MoleculeInserter.hh | 108 + .../dna/dnadamage2/include/PhysGeoImport.hh | 133 + .../dna/dnadamage2/include/PhysicsList.hh | 90 + .../dnadamage2/include/PlasmidMolecules.hh | 116 + .../include/PrimaryGeneratorAction.hh | 83 + .../medical/dna/dnadamage2/include/Run.hh | 81 + .../dna/dnadamage2/include/RunAction.hh | 73 + .../dnadamage2/include/ScavengerMolecules.hh | 81 + .../dna/dnadamage2/include/ScoreLET.hh | 89 + .../dna/dnadamage2/include/ScoreSpecies.hh | 167 + .../dnadamage2/include/ScoreStrandBreaks.hh | 114 + .../dna/dnadamage2/include/StackingAction.hh | 65 + .../dna/dnadamage2/include/TimeStepAction.hh | 75 + .../medical/dna/dnadamage2/init_vis.in | 59 + .../extended/medical/dna/dnadamage2/pUC19.xyz | 2686 ++ .../dnadamage2/src/ActionInitialization.cc | 92 + .../dnadamage2/src/DetectorConstruction.cc | 294 + .../src/G4EmDNAChemistryForPlasmids.cc | 911 + .../dna/dnadamage2/src/MoleculeInserter.cc | 159 + .../dna/dnadamage2/src/PhysGeoImport.cc | 382 + .../medical/dna/dnadamage2/src/PhysicsList.cc | 266 + .../dna/dnadamage2/src/PlasmidMolecules.cc | 146 + .../dnadamage2/src/PrimaryGeneratorAction.cc | 211 + .../medical/dna/dnadamage2/src/Run.cc | 160 + .../medical/dna/dnadamage2/src/RunAction.cc | 149 + .../dna/dnadamage2/src/ScavengerMolecules.cc | 88 + .../medical/dna/dnadamage2/src/ScoreLET.cc | 158 + .../dna/dnadamage2/src/ScoreSpecies.cc | 410 + .../dna/dnadamage2/src/ScoreStrandBreaks.cc | 400 + .../dna/dnadamage2/src/StackingAction.cc | 81 + .../dna/dnadamage2/src/TimeStepAction.cc | 112 + .../extended/medical/dna/dnadamage2/vis.in | 43 + .../medical/dna/dnaphysics/dnaphysics.out | 26 +- examples/extended/medical/dna/icsd/History | 7 + examples/extended/medical/dna/icsd/icsd.mac | 2 +- examples/extended/medical/dna/icsd/icsd.out | 28 +- .../medical/dna/icsd/src/PhysicsList.cc | 39 +- .../medical/dna/jetcounter/jetcounter.out | 24 +- examples/extended/medical/dna/mfp/mfp.out | 4 +- .../dna/microdosimetry/microdosimetry.out | 9 +- .../medical/dna/microprox/microprox.out | 6 +- .../extended/medical/dna/microyz/microyz.out | 6 +- .../medical/dna/moleculardna/.README.txt | 35 +- .../medical/dna/moleculardna/CMakeLists.txt | 4 +- .../extended/medical/dna/moleculardna/History | 16 +- .../extended/medical/dna/moleculardna/README | 46 +- .../include/ActionInitialization.hh | 4 +- .../moleculardna/include/AnalysisManager.hh | 19 +- .../dna/moleculardna/include/ChromosomeHit.hh | 4 +- .../include/CylindricalChromosome.hh | 6 +- .../dna/moleculardna/include/DNAHashing.hh | 3 +- .../dna/moleculardna/include/DNAHit.hh | 28 +- .../include/EllipticalChromosome.hh | 6 +- .../dna/moleculardna/include/EventAction.hh | 2 +- .../dna/moleculardna/include/OctreeNode.hh | 4 +- .../include/ParallelWorldPhysics.hh | 2 +- .../dna/moleculardna/include/PhysicsList.hh | 4 +- .../include/PrimaryGeneratorAction.hh | 29 +- .../include/PrimaryGeneratorMessenger.hh | 60 + .../include/PrimaryGeneratorSource.hh | 131 + .../include/PrimaryGeneratorSourceGRASCSV.hh | 68 + .../dna/moleculardna/include/RodChromosome.hh | 6 +- .../dna/moleculardna/include/RunAction.hh | 2 +- .../include/SphericalChromosome.hh | 8 +- .../moleculardna/include/StackingAction.hh | 4 +- .../moleculardna/include/SteppingAction.hh | 2 +- .../moleculardna/include/VirtualChromosome.hh | 2 +- .../medical/dna/moleculardna/moleculardna.out | 14 +- .../moleculardna/phase_space/phase_space.csv | 94 + .../phase_space/phase_space_test.mac | 78 + .../moleculardna/src/ActionInitialization.cc | 10 - .../dna/moleculardna/src/AnalysisManager.cc | 14 +- .../dna/moleculardna/src/ChromosomeHit.cc | 13 +- .../moleculardna/src/ChromosomeMessenger.cc | 3 +- .../moleculardna/src/CylindricalChromosome.cc | 12 +- .../dna/moleculardna/src/DNAGeometry.cc | 1 - .../dna/moleculardna/src/DNAHashing.cc | 2 +- .../medical/dna/moleculardna/src/DNAHit.cc | 61 +- .../dna/moleculardna/src/DamageModel.cc | 99 +- .../moleculardna/src/DetectorConstruction.cc | 5 +- .../dna/moleculardna/src/DetectorMessenger.cc | 8 +- .../moleculardna/src/EllipticalChromosome.cc | 12 +- .../dna/moleculardna/src/EventAction.cc | 7 +- .../dna/moleculardna/src/OctreeNode.cc | 8 +- .../moleculardna/src/ParallelWorldPhysics.cc | 4 - .../dna/moleculardna/src/PhysicsList.cc | 7 +- .../moleculardna/src/PlacementVolumeInfo.cc | 14 +- .../src/PrimaryGeneratorAction.cc | 78 +- .../src/PrimaryGeneratorMessenger.cc | 69 + .../src/PrimaryGeneratorSourceGRASCSV.cc | 177 + .../dna/moleculardna/src/RodChromosome.cc | 12 +- .../medical/dna/moleculardna/src/RunAction.cc | 7 +- .../moleculardna/src/SphericalChromosome.cc | 12 +- .../dna/moleculardna/src/StackingAction.cc | 10 - .../dna/moleculardna/src/SteppingAction.cc | 13 +- .../dna/moleculardna/src/TimeStepAction.cc | 17 +- .../dna/moleculardna/src/UtilityFunctions.cc | 8 +- .../dna/moleculardna/src/VirtualChromosome.cc | 4 +- .../extended/medical/dna/neuron/neuron.out | 26 +- .../extended/medical/dna/pdb4dna/.gitignore | 2 - .../extended/medical/dna/pdb4dna/pdb4dna.out | 4 +- examples/extended/medical/dna/range/History | 6 + examples/extended/medical/dna/range/range.cc | 30 +- examples/extended/medical/dna/range/range.out | 5 +- .../dna/range/src/DetectorConstruction.cc | 3 +- .../medical/dna/range/src/PhysicsList.cc | 47 +- .../medical/dna/scavenger/scavenger.out | 6 +- .../extended/medical/dna/slowing/slowing.out | 4 +- examples/extended/medical/dna/spower/History | 7 + examples/extended/medical/dna/spower/alpha.in | 36 + .../extended/medical/dna/spower/spower.cc | 13 +- .../extended/medical/dna/spower/spower.in | 10 +- .../extended/medical/dna/spower/spower.out | 54 +- .../dna/spower/src/DetectorConstruction.cc | 3 +- .../medical/dna/spower/src/PhysicsList.cc | 41 +- .../extended/medical/dna/svalue/svalue.out | 42 +- .../dna/wholeNuclearDNA/wholeNuclearDNA.out | 4 +- .../extended/medical/dna/wvalue/wvalue.out | 4 +- .../electronScattering/electronScattering.out | 25 +- .../electronScattering2.out | 25 +- .../medical/fanoCavity/fanoCavity.out | 4 +- .../medical/fanoCavity2/fanoCavity2.out | 4 +- examples/extended/optical/LXe/LXe.out | 53 +- examples/extended/optical/LXe/cerenkov.out | 51 +- examples/extended/optical/LXe/photon.out | 35 +- examples/extended/optical/LXe/wls.out | 37 +- .../extended/optical/OpNovice/OpNovice.out | 44 +- examples/extended/optical/OpNovice/opgdml.out | 44 +- .../extended/optical/OpNovice/optPhoton.out | 37 +- .../extended/optical/OpNovice2/OpNovice2.out | 37 +- .../extended/optical/OpNovice2/boundary.out | 77 +- .../extended/optical/OpNovice2/coated.out | 39 +- .../optical/OpNovice2/complexRindex.out | 35 +- .../extended/optical/OpNovice2/electron.out | 37 +- .../extended/optical/OpNovice2/fresnel.out | 39 +- .../optical/OpNovice2/scint_by_particle.out | 57 +- examples/extended/optical/OpNovice2/wls.out | 37 +- examples/extended/optical/wls/electron.out | 37 +- examples/extended/parallel/MPI/History | 8 +- .../ThreadsafeScorers/threadsafe-scorers.out | 1527 +- .../parameterisations/Par01/examplePar01.out | 36 +- .../parameterisations/Par02/examplePar02.out | 13 +- .../parameterisations/Par03/Par03.out | 15 +- .../parameterisations/Par04/examplePar04.out | 15 +- .../extended/parameterisations/gflash/History | 13 +- .../gflash/gflash1/ExGflash1.cc | 42 +- .../include/ExGflash1DetectorConstruction.hh | 55 +- .../include/ExGflash1SensitiveDetector.hh | 35 +- .../include/ExGflashActionInitialization.hh | 8 +- .../gflash1/include/ExGflashEventAction.hh | 29 +- .../gflash/gflash1/include/ExGflashHit.hh | 100 +- .../gflash1/include/ExGflashHitsCollection.hh | 2 +- .../include/ExGflashPrimaryGeneratorAction.hh | 10 +- .../gflash1/include/ExGflashRunAction.hh | 14 +- .../src/ExGflash1DetectorConstruction.cc | 234 +- .../gflash1/src/ExGflash1SensitiveDetector.cc | 100 +- .../src/ExGflashActionInitialization.cc | 14 +- .../gflash/gflash1/src/ExGflashEventAction.cc | 245 +- .../gflash/gflash1/src/ExGflashHit.cc | 61 +- .../src/ExGflashPrimaryGeneratorAction.cc | 7 +- .../gflash/gflash1/src/ExGflashRunAction.cc | 30 +- .../parameterisations/gflash/gflash1/test.out | 74 +- .../parameterisations/gflash/gflash1/vis.mac | 2 +- .../gflash/gflash2/ExGflash2.cc | 42 +- .../include/ExGflash2DetectorConstruction.hh | 50 +- .../gflash2/include/ExGflash2ParallelWorld.hh | 47 +- .../include/ExGflash2SensitiveDetector.hh | 35 +- .../include/ExGflashActionInitialization.hh | 8 +- .../gflash2/include/ExGflashEventAction.hh | 29 +- .../gflash/gflash2/include/ExGflashHit.hh | 100 +- .../gflash2/include/ExGflashHitsCollection.hh | 2 +- .../include/ExGflashPrimaryGeneratorAction.hh | 10 +- .../gflash2/include/ExGflashRunAction.hh | 14 +- .../src/ExGflash2DetectorConstruction.cc | 220 +- .../gflash2/src/ExGflash2ParallelWorld.cc | 114 +- .../gflash2/src/ExGflash2SensitiveDetector.cc | 100 +- .../src/ExGflashActionInitialization.cc | 14 +- .../gflash/gflash2/src/ExGflashEventAction.cc | 245 +- .../gflash/gflash2/src/ExGflashHit.cc | 61 +- .../src/ExGflashPrimaryGeneratorAction.cc | 7 +- .../gflash/gflash2/src/ExGflashRunAction.cc | 30 +- .../parameterisations/gflash/gflash2/test.out | 74 +- .../parameterisations/gflash/gflash2/vis.mac | 2 +- .../gflash/gflash3/ExGflash3.cc | 44 +- .../include/ExGflash3DetectorConstruction.hh | 47 +- .../gflash3/include/ExGflash3ParallelWorld.hh | 25 +- .../include/ExGflash3SensitiveDetector.hh | 35 +- .../include/ExGflashActionInitialization.hh | 8 +- .../gflash3/include/ExGflashEventAction.hh | 29 +- .../gflash/gflash3/include/ExGflashHit.hh | 100 +- .../gflash3/include/ExGflashHitsCollection.hh | 2 +- .../include/ExGflashPrimaryGeneratorAction.hh | 10 +- .../gflash3/include/ExGflashRunAction.hh | 14 +- .../src/ExGflash3DetectorConstruction.cc | 166 +- .../gflash3/src/ExGflash3ParallelWorld.cc | 165 +- .../gflash3/src/ExGflash3SensitiveDetector.cc | 103 +- .../src/ExGflashActionInitialization.cc | 14 +- .../gflash/gflash3/src/ExGflashEventAction.cc | 245 +- .../gflash/gflash3/src/ExGflashHit.cc | 61 +- .../src/ExGflashPrimaryGeneratorAction.cc | 7 +- .../gflash/gflash3/src/ExGflashRunAction.cc | 30 +- .../parameterisations/gflash/gflash3/test.out | 70 +- .../parameterisations/gflash/gflash3/vis.mac | 4 +- .../gflash/gflasha/.README.txt | 28 +- .../gflash/gflasha/CMakeLists.txt | 2 +- .../gflash/gflasha/ExGflasha.cc | 36 +- .../parameterisations/gflash/gflasha/README | 29 +- .../parameterisations/gflash/gflasha/cmpE.C | 74 + .../include/ExGflashActionInitialization.hh | 14 +- .../include/ExGflashDetectorConstruction.hh | 107 +- .../gflasha/include/ExGflashEventAction.hh | 16 +- .../gflasha/include/ExGflashHistoManager.hh | 24 +- .../gflash/gflasha/include/ExGflashHit.hh | 60 +- .../include/ExGflashHomoShowerTuning.hh | 155 +- .../gflasha/include/ExGflashMessenger.hh | 24 +- .../include/ExGflashPrimaryGeneratorAction.hh | 12 +- .../gflasha/include/ExGflashRunAction.hh | 21 +- .../include/ExGflashSensitiveDetector.hh | 29 +- .../src/ExGflashActionInitialization.cc | 6 +- .../src/ExGflashDetectorConstruction.cc | 146 +- .../gflash/gflasha/src/ExGflashEventAction.cc | 47 +- .../gflasha/src/ExGflashHistoManager.cc | 34 +- .../gflash/gflasha/src/ExGflashHit.cc | 8 +- .../gflash/gflasha/src/ExGflashMessenger.cc | 12 +- .../src/ExGflashPrimaryGeneratorAction.cc | 1 - .../gflash/gflasha/src/ExGflashRunAction.cc | 12 +- .../gflasha/src/ExGflashSensitiveDetector.cc | 24 +- .../parameterisations/gflash/gflasha/test.out | 56 +- .../extended/persistency/P01/p01-write.out | 89 +- examples/extended/persistency/P03/batch.out | 27 +- .../extended/persistency/gdml/G01/History | 9 +- .../persistency/gdml/G01/g01-schema.out | 1880 + .../extended/persistency/gdml/G01/g01.out | 46 +- .../persistency/gdml/G01/load_gdml.cc | 4 + .../extended/persistency/gdml/G04/g04.out | 46 +- .../extensibleFactory/extensibleFactory.out | 36 +- .../factory/factory-environment.out | 36 +- .../extended/physicslists/factory/factory.out | 36 +- .../physicslists/genericPL/genericPL.out | 36 +- .../extended/polarisation/Pol01/pol01.out | 4 +- .../Activation/Activation.out | 44 +- .../radioactivedecay/rdecay01/rdecay01.out | 76 +- .../radioactivedecay/rdecay02/rdecay02.out | 87 +- examples/extended/runAndEvent/RE01/sample.out | 9479 +++-- examples/extended/runAndEvent/RE02/run.out | 38 +- examples/extended/runAndEvent/RE02/run3.out | 38 +- examples/extended/runAndEvent/RE02/run4.out | 44 +- examples/extended/runAndEvent/RE03/run.out | 40 +- .../extended/runAndEvent/RE04/exampleRE04.out | 36 +- .../extended/runAndEvent/RE05/exampleRE05.out | 89 +- .../extended/runAndEvent/RE06/exampleRE06.out | 394 +- .../extended/runAndEvent/RE07/processes.out | 2 +- .../extended/runAndEvent/RE07/specialized.out | 2 +- .../extended/runAndEvent/RE07/tracking.out | 2 +- .../extended/visualization/movies/movies.out | 36 +- .../visualization/perspective/History | 8 + .../include/PerspectiveVisAction.hh | 57 +- .../visualization/standalone/.README.txt | 49 +- .../extended/visualization/standalone/History | 6 + .../extended/visualization/standalone/README | 51 +- .../include/DetectorConstruction.hh | 62 + .../include/DrawGeometryVisAction.hh | 57 + .../standalone/include/StandaloneVisAction.hh | 9 +- .../standalone/src/DetectorConstruction.cc | 170 + .../standalone/src/DrawGeometryVisAction.cc | 68 + .../standalone/src/StandaloneVisAction.cc | 41 +- .../visualization/standalone/standalone.cc | 21 +- .../visualization/standalone/standalone.mac | 2 + .../visualization/userVisAction/run1.out | 42 +- .../visualization/userVisAction/run2.out | 48 +- .../userVisAction/userVisAction.out | 38 +- source/GNUmakefile | 213 - source/analysis/GNUmakefile | 26 - source/analysis/History | 5 +- source/analysis/accumulables/GNUmakefile | 16 - source/analysis/csv/GNUmakefile | 23 - source/analysis/factory/GNUmakefile | 22 - source/analysis/hdf5/GNUmakefile | 26 - source/analysis/hntools/GNUmakefile | 18 - source/analysis/management/GNUmakefile | 17 - source/analysis/root/GNUmakefile | 24 - source/analysis/xml/GNUmakefile | 23 - source/digits_hits/GNUmakefile | 18 - source/digits_hits/History | 3 + source/digits_hits/detector/GNUmakefile | 29 - source/digits_hits/detector/History | 6 + .../detector/include/G4CellScoreComposer.hh | 20 +- .../detector/include/G4CellScoreValues.hh | 42 +- .../include/G4CollectionNameVector.hh | 5 +- .../digits_hits/detector/include/G4HCtable.hh | 23 +- .../include/G4MultiFunctionalDetector.hh | 44 +- .../include/G4MultiSensitiveDetector.hh | 57 +- .../detector/include/G4SDManager.hh | 64 +- .../detector/include/G4SDStructure.hh | 34 +- .../detector/include/G4SDmessenger.hh | 4 +- .../detector/include/G4SensitiveVolumeList.hh | 21 +- .../detector/include/G4TScoreHistFiller.hh | 24 +- .../detector/include/G4TScoreHistFiller.icc | 103 +- .../detector/include/G4TrackLogger.hh | 14 +- .../detector/include/G4VPrimitivePlotter.hh | 17 +- .../detector/include/G4VPrimitiveScorer.hh | 95 +- .../detector/include/G4VReadOutGeometry.hh | 37 +- .../detector/include/G4VSDFilter.hh | 10 +- .../detector/include/G4VScoreHistFiller.hh | 14 +- .../detector/include/G4VSensitiveDetector.hh | 136 +- source/digits_hits/detector/sources.cmake | 1 - .../detector/src/G4CellScoreComposer.cc | 36 +- source/digits_hits/detector/src/G4HCtable.cc | 49 +- .../detector/src/G4MultiFunctionalDetector.cc | 58 +- .../detector/src/G4MultiSensitiveDetector.cc | 68 +- .../digits_hits/detector/src/G4SDManager.cc | 98 +- .../digits_hits/detector/src/G4SDStructure.cc | 154 +- .../digits_hits/detector/src/G4SDmessenger.cc | 24 +- .../detector/src/G4SensitiveVolumeList.cc | 43 +- .../digits_hits/detector/src/G4TrackLogger.cc | 20 +- .../detector/src/G4VPrimitiveScorer.cc | 82 +- .../detector/src/G4VReadOutGeometry.cc | 140 +- .../digits_hits/detector/src/G4VSDFilter.cc | 9 +- .../detector/src/G4VScoreHistFiller.cc | 31 +- .../detector/src/G4VSensitiveDetector.cc | 65 +- source/digits_hits/digits/GNUmakefile | 20 - source/digits_hits/digits/History | 4 + .../digits/include/G4DCofThisEvent.hh | 44 +- .../digits/include/G4TDigiCollection.hh | 110 +- source/digits_hits/digits/include/G4VDigi.hh | 40 +- .../digits/include/G4VDigiCollection.hh | 25 +- source/digits_hits/digits/sources.cmake | 1 - .../digits_hits/digits/src/G4DCofThisEvent.cc | 36 +- .../digits/src/G4TDigiCollection.cc | 17 - .../digits/src/G4VDigiCollection.cc | 18 +- source/digits_hits/hits/GNUmakefile | 19 - source/digits_hits/hits/History | 4 + .../hits/include/G4HCofThisEvent.hh | 40 +- .../hits/include/G4THitsCollection.hh | 109 +- source/digits_hits/hits/include/G4THitsMap.hh | 200 +- .../digits_hits/hits/include/G4THitsVector.hh | 210 +- source/digits_hits/hits/include/G4VHit.hh | 40 +- .../hits/include/G4VHitsCollection.hh | 24 +- source/digits_hits/hits/sources.cmake | 1 - .../digits_hits/hits/src/G4HCofThisEvent.cc | 35 +- .../digits_hits/hits/src/G4THitsCollection.cc | 12 - .../digits_hits/hits/src/G4VHitsCollection.cc | 20 +- source/digits_hits/scorer/GNUmakefile | 32 - source/digits_hits/utils/GNUmakefile | 35 - source/digits_hits/utils/History | 4 +- source/error_propagation/GNUmakefile | 56 - source/error_propagation/History | 3 + source/event/GNUmakefile | 57 - source/event/History | 5 +- source/event/include/G4ParticleGun.hh | 2 + source/externals/GNUmakefile | 50 - source/externals/History | 3 + source/externals/clhep/GNUmakefile | 22 - source/externals/clhep/History | 6 + .../include/CLHEP/Vector/RotationInterfaces.h | 2 +- .../clhep/include/CLHEP/Vector/ThreeVector.h | 2 +- .../clhep/include/CLHEP/Vector/TwoVector.h | 2 +- source/externals/clhep/src/DualRand.cc | 16 +- source/externals/clhep/src/Evaluator.cc | 8 +- source/externals/clhep/src/JamesRandom.cc | 2 +- source/externals/clhep/src/MTwistEngine.cc | 6 +- source/externals/clhep/src/MixMaxRng.cc | 4 +- source/externals/clhep/src/NonRandomEngine.cc | 6 +- source/externals/clhep/src/RandBinomial.cc | 2 +- source/externals/clhep/src/RandBreitWigner.cc | 2 +- source/externals/clhep/src/RandChiSquare.cc | 2 +- source/externals/clhep/src/RandExponential.cc | 2 +- source/externals/clhep/src/RandFlat.cc | 4 +- source/externals/clhep/src/RandGamma.cc | 2 +- source/externals/clhep/src/RandGauss.cc | 4 +- source/externals/clhep/src/RandGaussQ.cc | 2 +- source/externals/clhep/src/RandGeneral.cc | 2 +- source/externals/clhep/src/RandLandau.cc | 2 +- source/externals/clhep/src/RandPoisson.cc | 2 +- source/externals/clhep/src/RandPoissonQ.cc | 2 +- source/externals/clhep/src/RandStudentT.cc | 2 +- source/externals/clhep/src/RanecuEngine.cc | 2 +- source/externals/clhep/src/Ranlux64Engine.cc | 6 +- source/externals/clhep/src/RanluxEngine.cc | 10 +- source/externals/clhep/src/RanluxppEngine.cc | 8 +- source/externals/clhep/src/RanshiEngine.cc | 8 +- source/externals/clhep/src/engineIDulong.cc | 4 +- source/externals/expat/GNUmakefile | 20 - source/externals/g4tools/GNUmakefile | 13 - source/externals/g4tools/History | 28 + source/externals/g4tools/History_tools | 21 + .../externals/g4tools/include/tools/ccontour | 4 +- .../externals/g4tools/include/tools/lina/mat4 | 50 +- .../g4tools/include/tools/lina/mat4f | 3 + .../g4tools/include/tools/rcsv_histo | 10 +- .../g4tools/include/tools/sg/write_paper | 18 +- .../g4tools/include/tools/sg/zb_action | 168 +- .../g4tools/include/tools/sg/zb_viewer | 103 + .../externals/g4tools/include/tools/version | 8 +- .../externals/g4tools/include/tools/zb/buffer | 388 +- .../externals/g4tools/include/toolx/Qt/glarea | 98 +- .../externals/g4tools/include/toolx/Qt/pixwin | 121 + source/externals/g4tools/include/toolx/Qt/s2q | 25 + .../g4tools/include/toolx/Qt/session | 23 +- .../g4tools/include/toolx/Qt/zb_viewer | 106 + .../g4tools/include/toolx/Windows/pixwin | 365 + .../g4tools/include/toolx/Windows/session | 9 + .../g4tools/include/toolx/Windows/zb_viewer | 91 + .../g4tools/include/toolx/X11/base_session | 30 +- .../g4tools/include/toolx/X11/colors | 122 + .../g4tools/include/toolx/X11/pixwin | 121 + .../g4tools/include/toolx/X11/zb_viewer | 151 + .../g4tools/include/toolx/Xt/ImageArea | 222 + .../g4tools/include/toolx/Xt/session | 24 +- .../g4tools/include/toolx/Xt/zb_viewer | 208 + .../g4tools/include/toolx/sg/GL_manager | 1 - source/externals/g4tools/include/toolx/sg/gl | 8 +- source/externals/ptl/.clang-tidy | 40 + source/externals/ptl/GNUmakefile | 22 - source/externals/zlib/GNUmakefile | 11 - source/externals/zlib/History | 3 + source/externals/zlib/include/deflate.h | 5 +- source/externals/zlib/include/inftrees.h | 2 +- source/externals/zlib/include/zlib.h | 20 +- source/externals/zlib/include/zutil.h | 2 + source/externals/zlib/src/Makefile.in | 410 - source/externals/zlib/src/adler32.c | 1 + source/externals/zlib/src/compress.c | 7 +- source/externals/zlib/src/crc32.c | 34 +- source/externals/zlib/src/deflate.c | 219 +- source/externals/zlib/src/gzlib.c | 2 +- source/externals/zlib/src/gzread.c | 8 +- source/externals/zlib/src/gzwrite.c | 2 +- source/externals/zlib/src/infback.c | 17 +- source/externals/zlib/src/inflate.c | 7 +- source/externals/zlib/src/inftrees.c | 4 +- source/externals/zlib/src/trees.c | 124 +- source/externals/zlib/src/uncompr.c | 5 +- source/externals/zlib/src/zconf.h.cmakein | 20 +- source/externals/zlib/src/zutil.c | 17 +- source/g3tog4/GNUmakefile | 192 - source/g3tog4/History | 3 + source/geometry/GNUmakefile | 21 - source/geometry/History | 3 + source/geometry/biasing/GNUmakefile | 25 - source/geometry/biasing/History | 12 +- source/geometry/biasing/include/G4IStore.hh | 13 +- .../biasing/include/G4ImportanceAlgorithm.hh | 11 +- .../include/G4WeightWindowAlgorithm.hh | 6 +- .../biasing/include/G4WeightWindowStore.hh | 10 +- source/geometry/biasing/src/G4GeometryCell.cc | 12 +- .../biasing/src/G4GeometryCellComp.cc | 5 +- .../biasing/src/G4GeometryCellImportance.cc | 6 +- .../biasing/src/G4GeometryCellStep.cc | 3 +- source/geometry/biasing/src/G4IStore.cc | 41 +- .../biasing/src/G4ImportanceAlgorithm.cc | 26 +- source/geometry/biasing/src/G4VGCellFinder.cc | 8 +- source/geometry/biasing/src/G4VIStore.cc | 8 +- .../biasing/src/G4VImportanceAlgorithm.cc | 8 +- .../biasing/src/G4VImportanceSplitExaminer.cc | 8 +- .../biasing/src/G4VWeightWindowAlgorithm.cc | 8 +- .../biasing/src/G4VWeightWindowStore.cc | 8 +- .../biasing/src/G4WeightWindowAlgorithm.cc | 6 +- .../biasing/src/G4WeightWindowStore.cc | 20 +- source/geometry/divisions/GNUmakefile | 27 - source/geometry/divisions/History | 10 +- .../divisions/include/G4PVDivision.hh | 22 +- .../divisions/include/G4PVDivisionFactory.hh | 20 +- .../include/G4ParameterisationBox.hh | 98 +- .../include/G4ParameterisationCons.hh | 98 +- .../include/G4ParameterisationPara.hh | 98 +- .../include/G4ParameterisationPolycone.hh | 102 +- .../include/G4ParameterisationPolyhedra.hh | 104 +- .../include/G4ParameterisationTrd.hh | 98 +- .../include/G4ParameterisationTubs.hh | 98 +- .../divisions/include/G4ReplicatedSlice.hh | 26 +- .../include/G4VDivisionParameterisation.hh | 8 +- source/geometry/divisions/src/G4PVDivision.cc | 8 +- .../divisions/src/G4PVDivisionFactory.cc | 12 +- .../divisions/src/G4ParameterisationBox.cc | 43 +- .../divisions/src/G4ParameterisationCons.cc | 42 +- .../divisions/src/G4ParameterisationPara.cc | 44 +- .../src/G4ParameterisationPolycone.cc | 36 +- .../src/G4ParameterisationPolyhedra.cc | 42 +- .../divisions/src/G4ParameterisationTrd.cc | 47 +- .../divisions/src/G4ParameterisationTubs.cc | 38 +- .../divisions/src/G4ReplicatedSlice.cc | 8 +- source/geometry/magneticfield/GNUmakefile | 21 - source/geometry/magneticfield/History | 48 +- .../include/G4BFieldIntegrationDriver.hh | 90 +- .../include/G4BFieldIntegrationDriver.icc | 122 + .../include/G4BogackiShampine23.hh | 28 +- .../include/G4BogackiShampine45.hh | 16 +- .../magneticfield/include/G4BorisDriver.hh | 106 +- .../magneticfield/include/G4BorisDriver.icc | 4 +- .../magneticfield/include/G4BulirschStoer.hh | 6 +- .../include/G4BulirschStoerDriver.hh | 2 +- .../include/G4CachedMagneticField.hh | 48 +- .../magneticfield/include/G4CashKarpRKF45.hh | 24 +- .../magneticfield/include/G4ChargeState.hh | 10 +- .../magneticfield/include/G4ChordFinder.hh | 15 +- .../magneticfield/include/G4ChordFinder.icc | 6 +- .../include/G4ChordFinderDelegate.icc | 4 +- .../magneticfield/include/G4ClassicalRK4.hh | 12 +- .../magneticfield/include/G4ConstRK4.hh | 16 +- .../magneticfield/include/G4DELPHIMagField.hh | 8 +- .../magneticfield/include/G4DoLoMcPriRK34.hh | 12 +- .../include/G4DormandPrince745.hh | 32 +- .../include/G4DormandPrinceRK56.hh | 9 +- .../include/G4DormandPrinceRK78.hh | 12 +- .../magneticfield/include/G4ElectricField.hh | 22 +- .../include/G4ElectroMagneticField.hh | 28 +- .../include/G4EqEMFieldWithEDM.hh | 19 +- .../include/G4EqEMFieldWithSpin.hh | 20 +- .../magneticfield/include/G4EqGravityField.hh | 10 +- .../include/G4EqMagElectricField.hh | 9 +- .../include/G4ErrorMag_UsualEqRhs.hh | 6 +- .../include/G4ExactHelixStepper.hh | 18 +- .../magneticfield/include/G4ExplicitEuler.hh | 12 +- .../include/G4FSALBogackiShampine45.hh | 10 +- .../include/G4FSALDormandPrince745.hh | 8 +- .../include/G4FSALIntegrationDriver.hh | 57 +- .../include/G4FSALIntegrationDriver.icc | 11 +- .../magneticfield/include/G4FieldTrack.hh | 12 +- .../magneticfield/include/G4FieldTrack.icc | 25 +- .../include/G4HarmonicPolMagField.hh | 8 +- .../include/G4HelixExplicitEuler.hh | 14 +- .../magneticfield/include/G4HelixHeum.hh | 11 +- .../include/G4HelixImplicitEuler.hh | 11 +- .../include/G4HelixMixedStepper.hh | 41 +- .../include/G4HelixSimpleRunge.hh | 10 +- .../magneticfield/include/G4ImplicitEuler.hh | 9 +- .../include/G4IntegrationDriver.hh | 49 +- .../include/G4IntegrationDriver.icc | 9 +- .../include/G4InterpolationDriver.hh | 121 +- .../include/G4InterpolationDriver.icc | 817 +- .../include/G4LineCurrentMagField.hh | 8 +- .../magneticfield/include/G4LineSection.hh | 2 +- .../include/G4MagErrorStepper.hh | 8 +- .../include/G4MagHelicalStepper.hh | 22 +- .../include/G4MagIntegratorDriver.hh | 124 +- .../include/G4MagIntegratorStepper.hh | 14 +- .../magneticfield/include/G4Mag_EqRhs.hh | 42 +- .../magneticfield/include/G4Mag_SpinEqRhs.hh | 8 +- .../magneticfield/include/G4Mag_UsualEqRhs.hh | 12 +- .../magneticfield/include/G4MagneticField.hh | 22 +- .../magneticfield/include/G4MonopoleEq.hh | 9 +- .../magneticfield/include/G4NystromRK4.hh | 16 +- .../include/G4OldMagIntDriver.hh | 117 +- .../geometry/magneticfield/include/G4QSS2.hh | 400 + .../geometry/magneticfield/include/G4QSS3.hh | 671 + .../magneticfield/include/G4QSSDriver.hh | 85 + .../magneticfield/include/G4QSSDriver.icc | 173 + .../include/G4QSSDriverCreator.hh | 64 + .../magneticfield/include/G4QSSMessenger.hh} | 67 +- .../include/G4QSS_CustomStats.hh | 128 + .../magneticfield/include/G4QSStepper.hh | 586 + .../include/G4QuadrupoleMagField.hh | 17 +- .../magneticfield/include/G4RK547FEq1.hh | 14 +- .../magneticfield/include/G4RK547FEq2.hh | 14 +- .../magneticfield/include/G4RK547FEq3.hh | 14 +- .../magneticfield/include/G4RKG3_Stepper.hh | 12 +- .../include/G4RKIntegrationDriver.hh | 26 +- .../include/G4RKIntegrationDriver.icc | 2 +- .../magneticfield/include/G4RepleteEofM.hh | 8 +- .../include/G4SextupoleMagField.hh | 31 +- .../magneticfield/include/G4SimpleHeum.hh | 12 +- .../magneticfield/include/G4SimpleRunge.hh | 14 +- .../include/G4TDormandPrince45.hh | 681 +- .../magneticfield/include/G4TsitourasRK45.hh | 8 +- .../include/G4UniformElectricField.hh | 10 +- .../include/G4UniformGravityField.hh | 10 +- .../include/G4UniformMagField.hh | 10 +- .../include/G4VIntegrationDriver.hh | 6 +- .../magneticfield/include/G4qss_misc.hh | 122 + source/geometry/magneticfield/sources.cmake | 30 +- .../src/G4BFieldIntegrationDriver.cc | 2 +- .../magneticfield/src/G4BogackiShampine23.cc | 2 +- .../magneticfield/src/G4BogackiShampine45.cc | 12 +- .../magneticfield/src/G4BorisDriver.cc | 2 +- .../magneticfield/src/G4BulirschStoer.cc | 21 +- .../src/G4CachedMagneticField.cc | 10 +- .../magneticfield/src/G4ChargeState.cc | 9 +- .../magneticfield/src/G4ChordFinder.cc | 109 +- .../magneticfield/src/G4DELPHIMagField.cc | 8 +- .../magneticfield/src/G4ElectricField.cc | 15 +- .../src/G4ElectroMagneticField.cc | 12 +- .../magneticfield/src/G4EqEMFieldWithEDM.cc | 28 +- .../magneticfield/src/G4EqEMFieldWithSpin.cc | 18 +- .../magneticfield/src/G4EqGravityField.cc | 4 +- .../magneticfield/src/G4EqMagElectricField.cc | 4 +- .../magneticfield/src/G4EquationOfMotion.cc | 4 +- .../src/G4ErrorMag_UsualEqRhs.cc | 4 +- .../magneticfield/src/G4ExactHelixStepper.cc | 4 +- .../magneticfield/src/G4ExplicitEuler.cc | 4 +- source/geometry/magneticfield/src/G4Field.cc | 11 +- .../magneticfield/src/G4FieldManager.cc | 32 +- .../magneticfield/src/G4FieldManagerStore.cc | 9 +- .../magneticfield/src/G4FieldTrack.cc | 2 +- .../src/G4HarmonicPolMagField.cc | 8 +- .../magneticfield/src/G4HelixExplicitEuler.cc | 4 +- .../geometry/magneticfield/src/G4HelixHeum.cc | 4 +- .../magneticfield/src/G4HelixImplicitEuler.cc | 4 +- .../magneticfield/src/G4HelixMixedStepper.cc | 39 +- .../magneticfield/src/G4HelixSimpleRunge.cc | 4 +- .../src/G4LineCurrentMagField.cc | 4 +- .../magneticfield/src/G4LineSection.cc | 7 +- .../magneticfield/src/G4MagHelicalStepper.cc | 24 +- .../src/G4MagIntegratorDriver.cc | 20 +- .../geometry/magneticfield/src/G4Mag_EqRhs.cc | 4 +- .../magneticfield/src/G4Mag_SpinEqRhs.cc | 14 +- .../magneticfield/src/G4Mag_UsualEqRhs.cc | 4 +- .../magneticfield/src/G4MagneticField.cc | 6 +- .../magneticfield/src/G4MonopoleEq.cc | 4 +- .../magneticfield/src/G4NystromRK4.cc | 7 +- .../magneticfield/src/G4OldMagIntDriver.cc | 20 +- source/geometry/magneticfield/src/G4QSS3.cc | 68 + .../magneticfield/src/G4QSSDriverCreator.cc | 108 + .../magneticfield/src/G4QSSMessenger.cc | 107 + .../geometry/magneticfield/src/G4QSStepper.cc | 65 + .../magneticfield/src/G4QuadrupoleMagField.cc | 6 +- .../geometry/magneticfield/src/G4RK547FEq1.cc | 46 +- .../geometry/magneticfield/src/G4RK547FEq2.cc | 46 +- .../geometry/magneticfield/src/G4RK547FEq3.cc | 46 +- .../magneticfield/src/G4RKG3_Stepper.cc | 4 +- .../magneticfield/src/G4RepleteEofM.cc | 24 +- .../magneticfield/src/G4SextupoleMagField.cc | 6 +- .../src/G4UniformElectricField.cc | 6 +- .../src/G4UniformGravityField.cc | 6 +- .../magneticfield/src/G4UniformMagField.cc | 6 +- source/geometry/management/GNUmakefile | 25 - source/geometry/management/History | 7 +- .../management/include/G4AffineTransform.icc | 48 +- .../management/include/G4BlockingList.icc | 2 +- .../include/G4ErrorCylSurfaceTarget.hh | 12 +- .../include/G4ErrorPlaneSurfaceTarget.hh | 12 +- .../include/G4ErrorSurfaceTarget.hh | 12 +- .../include/G4ErrorTanPlaneTarget.hh | 4 +- .../management/include/G4ErrorTarget.hh | 2 +- .../management/include/G4GeomSplitter.hh | 6 +- .../include/G4IdentityTrajectoryFilter.hh | 4 +- .../include/G4LogicalCrystalVolume.hh | 4 +- .../management/include/G4LogicalVolume.icc | 6 +- .../management/include/G4ReflectedSolid.hh | 46 +- .../geometry/management/include/G4Region.icc | 2 +- .../management/include/G4SmartVoxelProxy.icc | 6 +- .../include/G4VNestedParameterisation.hh | 101 +- .../management/include/G4VPhysicalVolume.icc | 2 +- .../geometry/management/include/G4VSolid.icc | 2 +- .../management/include/G4VoxelLimits.icc | 10 +- .../geometry/management/src/G4BlockingList.cc | 2 +- .../management/src/G4BoundingEnvelope.cc | 106 +- .../geometry/management/src/G4ErrorTarget.cc | 2 +- source/geometry/management/src/G4GeomTools.cc | 22 +- .../management/src/G4GeometryManager.cc | 28 +- .../management/src/G4LogicalCrystalVolume.cc | 2 +- .../management/src/G4LogicalVolume.cc | 10 +- .../management/src/G4LogicalVolumeStore.cc | 4 +- .../management/src/G4PhysicalVolumeStore.cc | 4 +- .../management/src/G4ReflectedSolid.cc | 2 +- source/geometry/management/src/G4Region.cc | 18 +- .../geometry/management/src/G4RegionStore.cc | 4 +- .../management/src/G4SmartVoxelHeader.cc | 26 +- .../geometry/management/src/G4SolidStore.cc | 4 +- .../management/src/G4VPhysicalVolume.cc | 4 +- source/geometry/management/src/G4VSolid.cc | 16 +- .../geometry/management/src/G4VoxelLimits.cc | 33 +- source/geometry/navigation/GNUmakefile | 38 - source/geometry/navigation/History | 16 +- .../include/G4AuxiliaryNavServices.icc | 4 +- .../navigation/include/G4BrentLocator.hh | 16 +- .../include/G4ErrorPropagationNavigator.hh | 8 +- .../navigation/include/G4GeometryMessenger.hh | 12 +- .../include/G4GlobalMagFieldMessenger.hh | 4 +- .../include/G4LocatorChangeLogger.hh | 2 +- .../navigation/include/G4MultiLevelLocator.hh | 16 +- .../navigation/include/G4MultiNavigator.hh | 36 +- .../navigation/include/G4Navigator.icc | 12 +- .../navigation/include/G4NormalNavigation.icc | 5 +- .../include/G4ParameterisedNavigation.hh | 8 +- .../G4PartialPhantomParameterisation.hh | 17 +- .../navigation/include/G4PathFinder.hh | 3 +- .../include/G4PhantomParameterisation.hh | 36 +- .../navigation/include/G4PropagatorInField.hh | 24 +- .../include/G4PropagatorInField.icc | 35 +- .../navigation/include/G4RegularNavigation.hh | 2 +- .../navigation/include/G4ReplicaNavigation.hh | 4 +- .../include/G4ReplicaNavigation.icc | 12 +- .../navigation/include/G4SimpleLocator.hh | 16 +- .../include/G4TransportationManager.icc | 10 +- .../include/G4VIntersectionLocator.icc | 2 +- .../navigation/include/G4VoxelNavigation.icc | 7 +- .../geometry/navigation/src/G4BrentLocator.cc | 12 +- .../geometry/navigation/src/G4DrawVoxels.cc | 12 +- .../src/G4ErrorPropagationNavigator.cc | 10 +- .../navigation/src/G4GeomTestVolume.cc | 14 +- .../navigation/src/G4GeometryMessenger.cc | 8 +- .../src/G4GlobalMagFieldMessenger.cc | 9 +- .../navigation/src/G4LocatorChangeRecord.cc | 2 +- .../navigation/src/G4MultiLevelLocator.cc | 41 +- .../navigation/src/G4MultiNavigator.cc | 43 +- .../navigation/src/G4NavigationLogger.cc | 16 +- source/geometry/navigation/src/G4Navigator.cc | 70 +- .../navigation/src/G4NormalNavigation.cc | 8 +- .../src/G4ParameterisedNavigation.cc | 22 +- .../src/G4PartialPhantomParameterisation.cc | 13 +- .../geometry/navigation/src/G4PathFinder.cc | 11 +- .../src/G4PhantomParameterisation.cc | 13 +- .../navigation/src/G4PropagatorInField.cc | 110 +- .../navigation/src/G4RegularNavigation.cc | 20 +- .../src/G4RegularNavigationHelper.cc | 8 +- .../navigation/src/G4ReplicaNavigation.cc | 36 +- .../geometry/navigation/src/G4SafetyHelper.cc | 10 +- .../navigation/src/G4SimpleLocator.cc | 4 +- .../navigation/src/G4TransportationManager.cc | 43 +- .../navigation/src/G4VExternalNavigation.cc | 10 +- .../navigation/src/G4VIntersectionLocator.cc | 4 +- .../navigation/src/G4VoxelNavigation.cc | 27 +- .../geometry/navigation/src/G4VoxelSafety.cc | 11 +- source/geometry/solids/Boolean/GNUmakefile | 28 - source/geometry/solids/Boolean/History | 13 +- .../solids/Boolean/include/G4BooleanSolid.hh | 31 +- .../Boolean/include/G4DisplacedSolid.hh | 44 +- .../Boolean/include/G4IntersectionSolid.hh | 30 +- .../solids/Boolean/include/G4MultiUnion.hh | 38 +- .../solids/Boolean/include/G4ScaledSolid.hh | 38 +- .../Boolean/include/G4SubtractionSolid.hh | 30 +- .../solids/Boolean/include/G4UnionSolid.hh | 30 +- .../Boolean/include/G4VBooleanProcessor.hh | 58 + source/geometry/solids/Boolean/sources.cmake | 1 + .../solids/Boolean/src/G4BooleanSolid.cc | 28 +- .../solids/Boolean/src/G4DisplacedSolid.cc | 4 +- .../solids/Boolean/src/G4IntersectionSolid.cc | 81 +- .../solids/Boolean/src/G4MultiUnion.cc | 106 +- .../solids/Boolean/src/G4ScaledSolid.cc | 10 +- .../solids/Boolean/src/G4SubtractionSolid.cc | 141 +- .../solids/Boolean/src/G4UnionSolid.cc | 135 +- source/geometry/solids/CSG/GNUmakefile | 30 - source/geometry/solids/CSG/History | 5 +- source/geometry/solids/CSG/include/G4Box.hh | 43 +- .../geometry/solids/CSG/include/G4CSGSolid.hh | 8 +- source/geometry/solids/CSG/include/G4Cons.hh | 50 +- source/geometry/solids/CSG/include/G4Cons.icc | 2 +- .../geometry/solids/CSG/include/G4CutTubs.hh | 45 +- .../geometry/solids/CSG/include/G4CutTubs.icc | 2 +- source/geometry/solids/CSG/include/G4Orb.hh | 42 +- source/geometry/solids/CSG/include/G4Para.hh | 42 +- source/geometry/solids/CSG/include/G4Para.icc | 2 +- .../geometry/solids/CSG/include/G4Sphere.hh | 44 +- .../geometry/solids/CSG/include/G4Sphere.icc | 7 +- source/geometry/solids/CSG/include/G4Torus.hh | 41 +- source/geometry/solids/CSG/include/G4Trap.hh | 51 +- source/geometry/solids/CSG/include/G4Trap.icc | 4 +- source/geometry/solids/CSG/include/G4Trd.hh | 46 +- source/geometry/solids/CSG/include/G4Tubs.hh | 47 +- source/geometry/solids/CSG/include/G4Tubs.icc | 2 +- source/geometry/solids/CSG/include/G4UBox.hh | 14 +- source/geometry/solids/CSG/include/G4UCons.hh | 14 +- .../geometry/solids/CSG/include/G4UCutTubs.hh | 16 +- source/geometry/solids/CSG/include/G4UOrb.hh | 14 +- source/geometry/solids/CSG/include/G4UPara.hh | 14 +- .../geometry/solids/CSG/include/G4USphere.hh | 14 +- .../geometry/solids/CSG/include/G4UTorus.hh | 14 +- source/geometry/solids/CSG/include/G4UTrap.hh | 14 +- source/geometry/solids/CSG/include/G4UTrd.hh | 14 +- source/geometry/solids/CSG/include/G4UTubs.hh | 14 +- source/geometry/solids/CSG/src/G4Box.cc | 33 +- source/geometry/solids/CSG/src/G4Cons.cc | 95 +- source/geometry/solids/CSG/src/G4CutTubs.cc | 89 +- source/geometry/solids/CSG/src/G4Orb.cc | 26 +- source/geometry/solids/CSG/src/G4Para.cc | 14 +- source/geometry/solids/CSG/src/G4Sphere.cc | 154 +- source/geometry/solids/CSG/src/G4Torus.cc | 79 +- source/geometry/solids/CSG/src/G4Trap.cc | 84 +- source/geometry/solids/CSG/src/G4Trd.cc | 30 +- source/geometry/solids/CSG/src/G4Tubs.cc | 86 +- source/geometry/solids/CSG/src/G4UBox.cc | 4 +- source/geometry/solids/CSG/src/G4UCons.cc | 6 +- source/geometry/solids/CSG/src/G4UCutTubs.cc | 22 +- source/geometry/solids/CSG/src/G4UOrb.cc | 16 +- source/geometry/solids/CSG/src/G4UPara.cc | 6 +- source/geometry/solids/CSG/src/G4USphere.cc | 4 +- source/geometry/solids/CSG/src/G4UTorus.cc | 6 +- source/geometry/solids/CSG/src/G4UTrap.cc | 48 +- source/geometry/solids/CSG/src/G4UTrd.cc | 6 +- source/geometry/solids/CSG/src/G4UTubs.cc | 6 +- source/geometry/solids/GNUmakefile | 20 - source/geometry/solids/History | 8 +- source/geometry/solids/specific/GNUmakefile | 34 - source/geometry/solids/specific/History | 19 +- .../specific/include/G4ClippablePolygon.hh | 110 +- .../specific/include/G4ClippablePolygon.icc | 2 +- .../solids/specific/include/G4Ellipsoid.hh | 44 +- .../specific/include/G4EllipticalCone.hh | 44 +- .../specific/include/G4EllipticalTube.hh | 48 +- .../specific/include/G4EnclosingCylinder.hh | 6 +- .../specific/include/G4ExtrudedSolid.hh | 31 +- .../specific/include/G4ExtrudedSolid.icc | 4 +- .../specific/include/G4GenericPolycone.hh | 124 +- .../solids/specific/include/G4GenericTrap.hh | 50 +- .../solids/specific/include/G4GenericTrap.icc | 2 +- .../solids/specific/include/G4Hype.hh | 189 +- .../specific/include/G4IntersectingCone.hh | 2 - .../solids/specific/include/G4Paraboloid.hh | 42 +- .../solids/specific/include/G4PolyPhiFace.hh | 57 +- .../solids/specific/include/G4Polycone.hh | 152 +- .../specific/include/G4PolyconeHistorical.hh | 1 + .../solids/specific/include/G4PolyconeSide.hh | 29 +- .../solids/specific/include/G4Polyhedra.hh | 178 +- .../specific/include/G4PolyhedraSide.hh | 45 +- .../specific/include/G4QuadrangularFacet.hh | 43 +- .../specific/include/G4ReduciblePolygon.hh | 50 +- .../specific/include/G4SolidExtentList.hh | 29 +- .../specific/include/G4SolidsWorkspace.hh | 48 +- .../specific/include/G4TessellatedSolid.hh | 52 +- .../geometry/solids/specific/include/G4Tet.hh | 52 +- .../specific/include/G4TriangularFacet.hh | 51 +- .../solids/specific/include/G4TwistBoxSide.hh | 56 +- .../specific/include/G4TwistTrapAlphaSide.hh | 57 +- .../specific/include/G4TwistTrapFlatSide.hh | 123 +- .../include/G4TwistTrapParallelSide.hh | 56 +- .../specific/include/G4TwistTubsFlatSide.hh | 116 +- .../specific/include/G4TwistTubsHypeSide.hh | 136 +- .../specific/include/G4TwistTubsSide.hh | 164 +- .../solids/specific/include/G4TwistedBox.hh | 16 +- .../solids/specific/include/G4TwistedTrap.hh | 12 +- .../solids/specific/include/G4TwistedTrd.hh | 16 +- .../solids/specific/include/G4TwistedTubs.hh | 488 +- .../solids/specific/include/G4UEllipsoid.hh | 16 +- .../specific/include/G4UEllipticalCone.hh | 16 +- .../specific/include/G4UEllipticalTube.hh | 16 +- .../specific/include/G4UExtrudedSolid.hh | 18 +- .../specific/include/G4UGenericPolycone.hh | 16 +- .../solids/specific/include/G4UGenericTrap.hh | 14 +- .../solids/specific/include/G4UHype.hh | 18 +- .../solids/specific/include/G4UParaboloid.hh | 16 +- .../solids/specific/include/G4UPolycone.hh | 18 +- .../solids/specific/include/G4UPolyhedra.hh | 18 +- .../specific/include/G4UTessellatedSolid.hh | 14 +- .../solids/specific/include/G4UTet.hh | 18 +- .../solids/specific/include/G4VCSGface.hh | 40 +- .../solids/specific/include/G4VCSGfaceted.hh | 53 +- .../solids/specific/include/G4VFacet.hh | 2 +- .../specific/include/G4VTwistSurface.hh | 52 +- .../specific/include/G4VTwistSurface.icc | 17 +- .../specific/include/G4VTwistedFaceted.hh | 465 +- .../solids/specific/include/G4Voxelizer.hh | 2 - .../solids/specific/include/G4Voxelizer.icc | 5 +- .../solids/specific/src/G4ClippablePolygon.cc | 12 +- .../solids/specific/src/G4Ellipsoid.cc | 6 +- .../solids/specific/src/G4EllipticalCone.cc | 12 +- .../solids/specific/src/G4EllipticalTube.cc | 8 +- .../specific/src/G4EnclosingCylinder.cc | 8 +- .../solids/specific/src/G4ExtrudedSolid.cc | 70 +- .../solids/specific/src/G4GenericPolycone.cc | 16 +- .../solids/specific/src/G4GenericTrap.cc | 58 +- source/geometry/solids/specific/src/G4Hype.cc | 32 +- .../solids/specific/src/G4IntersectingCone.cc | 4 +- .../solids/specific/src/G4Paraboloid.cc | 14 +- .../solids/specific/src/G4PolyPhiFace.cc | 57 +- .../solids/specific/src/G4Polycone.cc | 32 +- .../specific/src/G4PolyconeHistorical.cc | 4 +- .../solids/specific/src/G4PolyconeSide.cc | 7 +- .../solids/specific/src/G4Polyhedra.cc | 36 +- .../specific/src/G4PolyhedraHistorical.cc | 4 +- .../solids/specific/src/G4PolyhedraSide.cc | 13 +- .../specific/src/G4QuadrangularFacet.cc | 10 +- .../solids/specific/src/G4ReduciblePolygon.cc | 12 +- .../solids/specific/src/G4SolidExtentList.cc | 6 +- .../solids/specific/src/G4SolidsWorkspace.cc | 3 - .../solids/specific/src/G4SurfBits.cc | 8 +- .../solids/specific/src/G4TessellatedSolid.cc | 71 +- source/geometry/solids/specific/src/G4Tet.cc | 46 +- .../solids/specific/src/G4TriangularFacet.cc | 34 +- .../solids/specific/src/G4TwistBoxSide.cc | 44 +- .../specific/src/G4TwistTrapAlphaSide.cc | 36 +- .../specific/src/G4TwistTrapFlatSide.cc | 15 +- .../specific/src/G4TwistTrapParallelSide.cc | 36 +- .../specific/src/G4TwistTubsFlatSide.cc | 12 +- .../specific/src/G4TwistTubsHypeSide.cc | 17 +- .../solids/specific/src/G4TwistTubsSide.cc | 14 +- .../solids/specific/src/G4TwistedBox.cc | 6 +- .../solids/specific/src/G4TwistedTrap.cc | 6 +- .../solids/specific/src/G4TwistedTrd.cc | 6 +- .../solids/specific/src/G4TwistedTubs.cc | 86 +- .../solids/specific/src/G4UEllipsoid.cc | 2 +- .../solids/specific/src/G4UEllipticalCone.cc | 4 +- .../solids/specific/src/G4UEllipticalTube.cc | 4 +- .../solids/specific/src/G4UExtrudedSolid.cc | 41 +- .../solids/specific/src/G4UGenericPolycone.cc | 10 +- .../solids/specific/src/G4UGenericTrap.cc | 11 +- .../geometry/solids/specific/src/G4UHype.cc | 2 +- .../solids/specific/src/G4UParaboloid.cc | 2 +- .../solids/specific/src/G4UPolycone.cc | 18 +- .../solids/specific/src/G4UPolyhedra.cc | 24 +- .../specific/src/G4UTessellatedSolid.cc | 20 +- source/geometry/solids/specific/src/G4UTet.cc | 30 +- .../solids/specific/src/G4VCSGfaceted.cc | 10 +- .../geometry/solids/specific/src/G4VFacet.cc | 6 +- .../solids/specific/src/G4VTwistSurface.cc | 68 +- .../solids/specific/src/G4VTwistedFaceted.cc | 95 +- .../solids/specific/src/G4Voxelizer.cc | 93 +- source/geometry/volumes/GNUmakefile | 33 - source/geometry/volumes/History | 3 + .../volumes/include/G4AssemblyTriplet.icc | 3 +- .../volumes/include/G4AssemblyVolume.icc | 4 +- source/geometry/volumes/include/G4GRSSolid.hh | 8 +- .../geometry/volumes/include/G4GRSSolid.icc | 8 +- .../geometry/volumes/include/G4GRSVolume.hh | 10 +- .../geometry/volumes/include/G4GRSVolume.icc | 4 +- .../volumes/include/G4GeometryWorkspace.hh | 2 +- .../volumes/include/G4LogicalBorderSurface.hh | 2 +- .../volumes/include/G4LogicalSkinSurface.hh | 2 +- .../volumes/include/G4NavigationHistory.hh | 2 +- .../volumes/include/G4NavigationHistory.icc | 6 +- .../include/G4NavigationHistoryPool.hh | 7 +- .../volumes/include/G4NavigationLevelRep.icc | 3 +- .../volumes/include/G4PVParameterised.hh | 12 +- .../geometry/volumes/include/G4PVPlacement.hh | 24 +- .../geometry/volumes/include/G4PVReplica.hh | 26 +- .../volumes/include/G4TouchableHistory.hh | 20 +- .../volumes/include/G4TouchableHistory.icc | 2 +- .../include/G4VExternalPhysicalVolume.hh | 6 +- .../geometry/volumes/src/G4AssemblyStore.cc | 11 +- .../geometry/volumes/src/G4AssemblyVolume.cc | 29 +- .../volumes/src/G4GeometryWorkspace.cc | 16 +- .../volumes/src/G4LogicalBorderSurface.cc | 20 +- .../volumes/src/G4LogicalSkinSurface.cc | 29 +- .../volumes/src/G4NavigationHistory.cc | 3 +- .../volumes/src/G4NavigationHistoryPool.cc | 12 +- .../geometry/volumes/src/G4PVParameterised.cc | 16 +- source/geometry/volumes/src/G4PVPlacement.cc | 18 +- source/geometry/volumes/src/G4PVReplica.cc | 4 +- .../volumes/src/G4ReflectionFactory.cc | 31 +- .../volumes/src/G4TouchableHistory.cc | 9 +- .../volumes/src/G4VExternalPhysicalVolume.cc | 6 +- source/global/GNUmakefile | 21 - source/global/HEPGeometry/GNUmakefile | 16 - source/global/HEPNumerics/GNUmakefile | 16 - source/global/HEPRandom/GNUmakefile | 17 - source/global/History | 53 +- source/global/management/GNUmakefile | 15 - .../global/management/include/G4Backtrace.hh | 2 +- .../include/G4BuffercoutDestination.hh | 25 +- .../include/G4FilecoutDestination.hh | 1 + .../include/G4LockcoutDestination.hh | 1 + .../include/G4MasterForwardcoutDestination.hh | 1 + .../include/G4MulticoutDestination.hh | 11 +- source/global/management/include/G4SIunits.hh | 329 - source/global/management/include/G4Version.hh | 41 +- .../management/include/G4coutDestination.hh | 14 +- .../management/include/G4coutFormatters.hh | 2 +- source/global/management/include/G4ios.hh | 10 + .../management/include/G4strstreambuf.icc | 139 - source/global/management/sources.cmake | 3 - .../management/src/G4BuffercoutDestination.cc | 112 +- .../management/src/G4FilecoutDestination.cc | 11 + .../management/src/G4LockcoutDestination.cc | 8 + .../management/src/G4MTcoutDestination.cc | 45 +- .../src/G4MasterForwardcoutDestination.cc | 15 + .../management/src/G4PhysicsModelCatalog.cc | 5 + .../management/src/G4coutDestination.cc | 30 + .../global/management/src/G4coutFormatters.cc | 3 +- source/global/management/src/G4ios.cc | 207 +- source/graphics_reps/GNUmakefile | 25 - source/graphics_reps/History | 28 + source/graphics_reps/include/G4AttValue.hh | 3 +- .../graphics_reps/include/G4SceneTreeItem.hh | 135 + source/graphics_reps/sources.cmake | 2 + source/graphics_reps/src/G4SceneTreeItem.cc | 246 + source/intercoms/GNUmakefile | 25 - source/intercoms/History | 19 +- source/intercoms/include/G4AnyMethod.hh | 179 +- source/intercoms/include/G4AnyType.hh | 118 +- .../intercoms/include/G4GenericMessenger.hh | 224 +- source/intercoms/include/G4UIbatch.hh | 13 +- source/intercoms/include/G4UIbridge.hh | 2 - .../intercoms/include/G4UIcmdWith3Vector.hh | 39 +- .../include/G4UIcmdWith3VectorAndUnit.hh | 99 +- source/intercoms/include/G4UIcmdWithABool.hh | 36 +- .../intercoms/include/G4UIcmdWithADouble.hh | 36 +- .../include/G4UIcmdWithADoubleAndUnit.hh | 107 +- .../intercoms/include/G4UIcmdWithALongInt.hh | 36 +- .../intercoms/include/G4UIcmdWithAString.hh | 32 +- .../intercoms/include/G4UIcmdWithAnInteger.hh | 36 +- .../include/G4UIcmdWithoutParameter.hh | 8 +- source/intercoms/include/G4UIcommand.hh | 176 +- source/intercoms/include/G4UIcommandStatus.hh | 12 +- source/intercoms/include/G4UIcommandTree.hh | 16 +- source/intercoms/include/G4UIdirectory.hh | 17 +- source/intercoms/include/G4UImanager.hh | 184 +- source/intercoms/include/G4UImessenger.hh | 60 +- source/intercoms/include/G4UIparameter.hh | 108 +- source/intercoms/include/G4UIsession.hh | 14 +- source/intercoms/include/G4UItokenNum.hh | 82 +- .../include/G4VFlavoredParallelWorld.hh | 5 +- .../include/G4VGlobalFastSimulationManager.hh | 16 +- .../G4LocalThreadCoutMessenger.hh | 6 +- .../{ => private}/G4ProfilerMessenger.hh | 53 +- .../include/{ => private}/G4UIaliasList.hh | 27 +- .../{ => private}/G4UIcontrolMessenger.hh | 4 +- .../intercoms/include/private/G4UIparsing.hh | 292 + .../include/{ => private}/G4UnitsMessenger.hh | 6 +- source/intercoms/sources.cmake | 12 +- source/intercoms/src/G4GenericMessenger.cc | 309 +- .../src/G4LocalThreadCoutMessenger.cc | 86 +- source/intercoms/src/G4ProfilerMessenger.cc | 155 +- source/intercoms/src/G4UIaliasList.cc | 100 +- source/intercoms/src/G4UIbatch.cc | 110 +- source/intercoms/src/G4UIbridge.cc | 19 +- source/intercoms/src/G4UIcmdWith3Vector.cc | 9 +- .../src/G4UIcmdWith3VectorAndUnit.cc | 53 +- source/intercoms/src/G4UIcmdWithABool.cc | 3 +- source/intercoms/src/G4UIcmdWithADouble.cc | 3 +- .../src/G4UIcmdWithADoubleAndUnit.cc | 44 +- source/intercoms/src/G4UIcmdWithALongInt.cc | 8 +- source/intercoms/src/G4UIcmdWithAString.cc | 5 +- source/intercoms/src/G4UIcmdWithAnInteger.cc | 6 +- source/intercoms/src/G4UIcommand.cc | 1267 +- source/intercoms/src/G4UIcommandTree.cc | 465 +- source/intercoms/src/G4UIcontrolMessenger.cc | 407 +- source/intercoms/src/G4UIdirectory.cc | 6 +- source/intercoms/src/G4UImanager.cc | 455 +- source/intercoms/src/G4UImessenger.cc | 73 +- source/intercoms/src/G4UIparameter.cc | 899 +- source/intercoms/src/G4UIsession.cc | 19 +- source/intercoms/src/G4UnitsMessenger.cc | 7 +- .../src/G4VGlobalFastSimulationManager.cc | 10 +- source/interfaces/CMakeLists.txt | 6 +- source/interfaces/GNUmakefile | 30 - source/interfaces/History | 120 +- source/interfaces/basic/GNUmakefile | 49 - source/interfaces/basic/include/G4UIWin32.hh | 184 - source/interfaces/basic/sources.cmake | 53 - source/interfaces/basic/src/G4UIWin32.cc | 1309 - source/interfaces/basic/src/G4UItcsh.cc | 758 - source/interfaces/basic/src/G4UIterminal.cc | 340 - source/interfaces/basic/src/G4VUIshell.cc | 323 - source/interfaces/common/GNUmakefile | 40 - .../common/include/G4VInteractorManager.hh | 102 - source/interfaces/common/sources.cmake | 38 - .../common/src/G4InteractorMessenger.cc | 244 - .../include/G4InteractorMessenger.hh | 13 +- .../include/G4UIArrayString.hh | 29 +- .../{basic => core}/include/G4UIcsh.hh | 15 +- .../{basic => core}/include/G4UItcsh.hh | 153 +- .../{basic => core}/include/G4UIterminal.hh | 59 +- .../{common => core}/include/G4VBasicShell.hh | 78 +- .../include/G4VInteractiveSession.hh | 50 +- .../core/include/G4VInteractorManager.hh | 105 + .../{basic => core}/include/G4VUIshell.hh | 101 +- source/interfaces/core/sources.cmake | 29 + .../core/src/G4InteractorMessenger.cc | 263 + .../{basic => core}/src/G4UIArrayString.cc | 150 +- .../interfaces/{basic => core}/src/G4UIcsh.cc | 32 +- source/interfaces/core/src/G4UItcsh.cc | 775 + source/interfaces/core/src/G4UIterminal.cc | 350 + .../{common => core}/src/G4VBasicShell.cc | 384 +- .../src/G4VInteractiveSession.cc | 101 +- .../src/G4VInteractorManager.cc | 236 +- source/interfaces/core/src/G4VUIshell.cc | 321 + .../include/G4Qt.hh | 35 +- .../include/G4UIExecutive.hh | 43 +- .../include/G4UIQt.hh | 291 +- .../implementation/include/G4UIWin32.hh | 182 + .../include/G4UIXm.hh | 55 +- .../include/G4Win32.hh | 32 +- .../include/G4Xt.hh | 36 +- .../interfaces/implementation/sources.cmake | 42 + .../{common => implementation}/src/G4Qt.cc | 118 +- .../src/G4UIExecutive.cc | 222 +- .../{basic => implementation}/src/G4UIQt.cc | 3718 +- .../implementation/src/G4UIWin32.cc | 1352 + .../{basic => implementation}/src/G4UIXm.cc | 425 +- .../{common => implementation}/src/G4Win32.cc | 87 +- .../{common => implementation}/src/G4Xt.cc | 161 +- source/materials/GNUmakefile | 35 - source/materials/History | 9 +- source/materials/include/G4AtomicBond.hh | 127 +- .../materials/include/G4AtomicFormFactor.hh | 360 +- source/materials/include/G4AtomicShells.hh | 47 +- .../include/G4AtomicShells_XDB_EADL.hh | 43 +- source/materials/include/G4CrystalAtomBase.hh | 62 +- .../include/G4CrystalBravaisLattices.h | 24 +- .../materials/include/G4CrystalExtension.hh | 219 +- .../include/G4CrystalLatticeSystems.h | 26 +- source/materials/include/G4CrystalUnitCell.hh | 229 +- .../include/G4DensityEffectCalculator.hh | 22 +- .../materials/include/G4DensityEffectData.hh | 107 +- source/materials/include/G4Element.hh | 241 +- source/materials/include/G4ElementData.hh | 98 +- source/materials/include/G4ElementTable.hh | 13 +- source/materials/include/G4ElementVector.hh | 13 +- source/materials/include/G4ExtDEDXTable.hh | 200 +- .../materials/include/G4ExtendedMaterial.hh | 102 +- .../materials/include/G4ICRU90StoppingData.hh | 88 +- source/materials/include/G4IonStoppingData.hh | 224 +- source/materials/include/G4IonisParamElm.hh | 140 +- source/materials/include/G4IonisParamMat.hh | 172 +- source/materials/include/G4Isotope.hh | 147 +- source/materials/include/G4IsotopeVector.hh | 14 +- source/materials/include/G4LatticeLogical.hh | 78 +- source/materials/include/G4LatticePhysical.hh | 56 +- source/materials/include/G4Material.hh | 354 +- .../include/G4MaterialPropertiesIndex.hh | 13 +- .../include/G4MaterialPropertiesTable.hh | 102 +- .../include/G4MaterialPropertyVector.hh | 18 +- source/materials/include/G4MaterialTable.hh | 13 +- .../include/G4MicroElecMaterialStructure.hh | 46 +- .../include/G4MicroElecSiStructure.hh | 27 +- .../materials/include/G4NistElementBuilder.hh | 142 +- source/materials/include/G4NistManager.hh | 314 +- .../include/G4NistMaterialBuilder.hh | 170 +- source/materials/include/G4NistMessenger.hh | 54 +- .../include/G4OpticalMaterialProperties.hh | 55 +- source/materials/include/G4OpticalSurface.hh | 139 +- source/materials/include/G4SandiaTable.hh | 139 +- .../materials/include/G4StaticSandiaData.hh | 37 +- source/materials/include/G4SurfaceProperty.hh | 29 +- .../include/G4UCNMaterialPropertiesTable.hh | 44 +- .../include/G4UCNMicroRoughnessHelper.hh | 236 +- source/materials/include/G4VIonDEDXTable.hh | 102 +- .../materials/include/G4VMaterialExtension.hh | 32 +- source/materials/sources.cmake | 3 +- source/materials/src/G4AtomicFormFactor.cc | 437 +- source/materials/src/G4AtomicShells.cc | 87 +- .../materials/src/G4AtomicShells_XDB_EADL.cc | 92 +- source/materials/src/G4CrystalExtension.cc | 155 +- source/materials/src/G4CrystalUnitCell.cc | 989 +- .../src/G4DensityEffectCalculator.cc | 260 +- source/materials/src/G4DensityEffectData.cc | 2795 +- source/materials/src/G4Element.cc | 320 +- source/materials/src/G4ElementData.cc | 74 +- source/materials/src/G4ExtDEDXTable.cc | 468 +- source/materials/src/G4ExtendedMaterial.cc | 101 +- source/materials/src/G4ICRU90StoppingData.cc | 86 +- source/materials/src/G4IonStoppingData.cc | 383 +- source/materials/src/G4IonisParamElm.cc | 94 +- source/materials/src/G4IonisParamMat.cc | 527 +- source/materials/src/G4Isotope.cc | 144 +- source/materials/src/G4LatticeLogical.cc | 231 +- source/materials/src/G4LatticePhysical.cc | 126 +- source/materials/src/G4Material.cc | 732 +- .../src/G4MaterialPropertiesTable.cc | 320 +- .../src/G4MicroElecMaterialStructure.cc | 208 +- .../materials/src/G4MicroElecSiStructure.cc | 22 +- source/materials/src/G4NistElementBuilder.cc | 3875 +- source/materials/src/G4NistManager.cc | 128 +- source/materials/src/G4NistMaterialBuilder.cc | 550 +- source/materials/src/G4NistMessenger.cc | 107 +- source/materials/src/G4OpticalSurface.cc | 248 +- source/materials/src/G4SandiaTable.cc | 1238 +- source/materials/src/G4SurfaceProperty.cc | 34 +- .../src/G4UCNMaterialPropertiesTable.cc | 389 +- .../src/G4UCNMicroRoughnessHelper.cc | 486 +- source/parameterisations/CMakeLists.txt | 3 +- source/parameterisations/GNUmakefile | 18 - source/parameterisations/History | 6 + source/parameterisations/channeling/History | 16 + .../channeling/include/G4BaierKatkov.hh | 304 + .../include/G4ChannelingFastSimCrystalData.hh | 113 + .../G4ChannelingFastSimInterpolation.hh | 96 + .../include/G4ChannelingFastSimModel.hh | 142 + .../G4VChannelingFastSimCrystalData.hh | 302 + .../channeling/sources.cmake | 29 + .../channeling/src/G4BaierKatkov.cc | 583 + .../src/G4ChannelingFastSimCrystalData.cc | 408 + .../src/G4ChannelingFastSimInterpolation.cc | 201 + .../src/G4ChannelingFastSimModel.cc | 505 + .../src/G4VChannelingFastSimCrystalData.cc | 485 + source/parameterisations/gflash/GNUmakefile | 42 - source/particles/GNUmakefile | 21 - source/particles/History | 24 +- source/particles/adjoint/GNUmakefile | 21 - .../adjoint/include/G4AdjointAlpha.hh | 2 +- .../adjoint/include/G4AdjointDeuteron.hh | 2 +- .../adjoint/include/G4AdjointElectron.hh | 2 +- .../adjoint/include/G4AdjointElectronFI.hh | 2 +- .../adjoint/include/G4AdjointGamma.hh | 2 +- .../adjoint/include/G4AdjointGenericIon.hh | 2 +- .../particles/adjoint/include/G4AdjointHe3.hh | 2 +- .../adjoint/include/G4AdjointIons.hh | 4 +- .../adjoint/include/G4AdjointPositron.hh | 2 +- .../adjoint/include/G4AdjointProton.hh | 2 +- .../adjoint/include/G4AdjointTriton.hh | 2 +- .../particles/adjoint/src/G4AdjointAlpha.cc | 10 +- .../adjoint/src/G4AdjointDeuteron.cc | 10 +- .../adjoint/src/G4AdjointElectron.cc | 8 +- .../adjoint/src/G4AdjointElectronFI.cc | 8 +- .../particles/adjoint/src/G4AdjointGamma.cc | 8 +- .../adjoint/src/G4AdjointGenericIon.cc | 10 +- source/particles/adjoint/src/G4AdjointHe3.cc | 10 +- source/particles/adjoint/src/G4AdjointIons.cc | 7 - .../adjoint/src/G4AdjointPositron.cc | 8 +- .../particles/adjoint/src/G4AdjointProton.cc | 8 +- .../particles/adjoint/src/G4AdjointTriton.cc | 10 +- source/particles/bosons/GNUmakefile | 20 - .../bosons/include/G4BosonConstructor.hh | 5 - .../bosons/include/G4ChargedGeantino.hh | 2 +- source/particles/bosons/include/G4Gamma.hh | 2 +- source/particles/bosons/include/G4Geantino.hh | 2 +- .../bosons/include/G4OpticalPhoton.hh | 2 +- .../particles/bosons/include/G4PhononLong.hh | 2 +- .../bosons/include/G4PhononTransFast.hh | 2 +- .../bosons/include/G4PhononTransSlow.hh | 2 +- .../bosons/include/G4UnknownParticle.hh | 2 +- .../bosons/src/G4BosonConstructor.cc | 9 - .../particles/bosons/src/G4ChargedGeantino.cc | 8 +- source/particles/bosons/src/G4Gamma.cc | 8 +- source/particles/bosons/src/G4Geantino.cc | 8 +- .../particles/bosons/src/G4OpticalPhoton.cc | 8 +- source/particles/bosons/src/G4PhononLong.cc | 8 +- .../particles/bosons/src/G4PhononTransFast.cc | 8 +- .../particles/bosons/src/G4PhononTransSlow.cc | 8 +- .../particles/bosons/src/G4UnknownParticle.cc | 8 +- source/particles/hadrons/GNUmakefile | 15 - source/particles/hadrons/barions/GNUmakefile | 20 - .../hadrons/barions/include/G4AntiLambda.hh | 2 +- .../hadrons/barions/include/G4AntiLambdab.hh | 2 +- .../barions/include/G4AntiLambdacPlus.hh | 2 +- .../hadrons/barions/include/G4AntiNeutron.hh | 2 +- .../barions/include/G4AntiOmegaMinus.hh | 2 +- .../barions/include/G4AntiOmegabMinus.hh | 2 +- .../barions/include/G4AntiOmegacZero.hh | 2 +- .../hadrons/barions/include/G4AntiProton.hh | 2 +- .../barions/include/G4AntiSigmaMinus.hh | 2 +- .../barions/include/G4AntiSigmaPlus.hh | 2 +- .../barions/include/G4AntiSigmaZero.hh | 2 +- .../barions/include/G4AntiSigmabMinus.hh | 2 +- .../barions/include/G4AntiSigmabPlus.hh | 2 +- .../barions/include/G4AntiSigmabZero.hh | 2 +- .../barions/include/G4AntiSigmacPlus.hh | 2 +- .../barions/include/G4AntiSigmacPlusPlus.hh | 2 +- .../barions/include/G4AntiSigmacZero.hh | 2 +- .../hadrons/barions/include/G4AntiXiMinus.hh | 2 +- .../hadrons/barions/include/G4AntiXiZero.hh | 2 +- .../hadrons/barions/include/G4AntiXibMinus.hh | 2 +- .../hadrons/barions/include/G4AntiXibZero.hh | 2 +- .../hadrons/barions/include/G4AntiXicPlus.hh | 2 +- .../hadrons/barions/include/G4AntiXicZero.hh | 2 +- .../barions/include/G4BaryonConstructor.hh | 5 - .../hadrons/barions/include/G4Lambda.hh | 2 +- .../hadrons/barions/include/G4Lambdab.hh | 2 +- .../hadrons/barions/include/G4LambdacPlus.hh | 2 +- .../hadrons/barions/include/G4Neutron.hh | 2 +- .../hadrons/barions/include/G4OmegaMinus.hh | 2 +- .../hadrons/barions/include/G4OmegabMinus.hh | 2 +- .../hadrons/barions/include/G4OmegacZero.hh | 2 +- .../hadrons/barions/include/G4Proton.hh | 2 +- .../hadrons/barions/include/G4SigmaMinus.hh | 2 +- .../hadrons/barions/include/G4SigmaPlus.hh | 2 +- .../hadrons/barions/include/G4SigmaZero.hh | 2 +- .../hadrons/barions/include/G4SigmabMinus.hh | 2 +- .../hadrons/barions/include/G4SigmabPlus.hh | 2 +- .../hadrons/barions/include/G4SigmabZero.hh | 2 +- .../hadrons/barions/include/G4SigmacPlus.hh | 2 +- .../barions/include/G4SigmacPlusPlus.hh | 2 +- .../hadrons/barions/include/G4SigmacZero.hh | 2 +- .../hadrons/barions/include/G4XiMinus.hh | 2 +- .../hadrons/barions/include/G4XiZero.hh | 2 +- .../hadrons/barions/include/G4XibMinus.hh | 2 +- .../hadrons/barions/include/G4XibZero.hh | 2 +- .../hadrons/barions/include/G4XicPlus.hh | 2 +- .../hadrons/barions/include/G4XicZero.hh | 2 +- .../hadrons/barions/src/G4AntiLambda.cc | 12 +- .../hadrons/barions/src/G4AntiLambdab.cc | 8 +- .../hadrons/barions/src/G4AntiLambdacPlus.cc | 8 +- .../hadrons/barions/src/G4AntiNeutron.cc | 10 +- .../hadrons/barions/src/G4AntiOmegaMinus.cc | 12 +- .../hadrons/barions/src/G4AntiOmegabMinus.cc | 8 +- .../hadrons/barions/src/G4AntiOmegacZero.cc | 8 +- .../hadrons/barions/src/G4AntiProton.cc | 8 +- .../hadrons/barions/src/G4AntiSigmaMinus.cc | 12 +- .../hadrons/barions/src/G4AntiSigmaPlus.cc | 12 +- .../hadrons/barions/src/G4AntiSigmaZero.cc | 10 +- .../hadrons/barions/src/G4AntiSigmabMinus.cc | 12 +- .../hadrons/barions/src/G4AntiSigmabPlus.cc | 12 +- .../hadrons/barions/src/G4AntiSigmabZero.cc | 12 +- .../hadrons/barions/src/G4AntiSigmacPlus.cc | 12 +- .../barions/src/G4AntiSigmacPlusPlus.cc | 12 +- .../hadrons/barions/src/G4AntiSigmacZero.cc | 12 +- .../hadrons/barions/src/G4AntiXiMinus.cc | 12 +- .../hadrons/barions/src/G4AntiXiZero.cc | 12 +- .../hadrons/barions/src/G4AntiXibMinus.cc | 8 +- .../hadrons/barions/src/G4AntiXibZero.cc | 8 +- .../hadrons/barions/src/G4AntiXicPlus.cc | 8 +- .../hadrons/barions/src/G4AntiXicZero.cc | 8 +- .../barions/src/G4BaryonConstructor.cc | 9 - .../particles/hadrons/barions/src/G4Lambda.cc | 12 +- .../hadrons/barions/src/G4Lambdab.cc | 8 +- .../hadrons/barions/src/G4LambdacPlus.cc | 8 +- .../hadrons/barions/src/G4Neutron.cc | 12 +- .../hadrons/barions/src/G4OmegaMinus.cc | 12 +- .../hadrons/barions/src/G4OmegabMinus.cc | 8 +- .../hadrons/barions/src/G4OmegacZero.cc | 8 +- .../particles/hadrons/barions/src/G4Proton.cc | 10 +- .../hadrons/barions/src/G4SigmaMinus.cc | 12 +- .../hadrons/barions/src/G4SigmaPlus.cc | 12 +- .../hadrons/barions/src/G4SigmaZero.cc | 10 +- .../hadrons/barions/src/G4SigmabMinus.cc | 12 +- .../hadrons/barions/src/G4SigmabPlus.cc | 12 +- .../hadrons/barions/src/G4SigmabZero.cc | 12 +- .../hadrons/barions/src/G4SigmacPlus.cc | 12 +- .../hadrons/barions/src/G4SigmacPlusPlus.cc | 12 +- .../hadrons/barions/src/G4SigmacZero.cc | 12 +- .../hadrons/barions/src/G4XiMinus.cc | 12 +- .../particles/hadrons/barions/src/G4XiZero.cc | 12 +- .../hadrons/barions/src/G4XibMinus.cc | 8 +- .../hadrons/barions/src/G4XibZero.cc | 8 +- .../hadrons/barions/src/G4XicPlus.cc | 8 +- .../hadrons/barions/src/G4XicZero.cc | 8 +- source/particles/hadrons/ions/GNUmakefile | 20 - .../particles/hadrons/ions/include/G4Alpha.hh | 2 +- .../hadrons/ions/include/G4AntiAlpha.hh | 2 +- .../hadrons/ions/include/G4AntiDeuteron.hh | 2 +- .../include/G4AntiDoubleHyperDoubleNeutron.hh | 2 +- .../ions/include/G4AntiDoubleHyperH4.hh | 2 +- .../hadrons/ions/include/G4AntiHe3.hh | 2 +- .../hadrons/ions/include/G4AntiHyperAlpha.hh | 2 +- .../hadrons/ions/include/G4AntiHyperH4.hh | 2 +- .../hadrons/ions/include/G4AntiHyperHe5.hh | 2 +- .../hadrons/ions/include/G4AntiHyperTriton.hh | 2 +- .../hadrons/ions/include/G4AntiTriton.hh | 2 +- .../hadrons/ions/include/G4Deuteron.hh | 2 +- .../include/G4DoubleHyperDoubleNeutron.hh | 2 +- .../hadrons/ions/include/G4DoubleHyperH4.hh | 2 +- .../hadrons/ions/include/G4GenericIon.hh | 2 +- .../ions/include/G4GenericMuonicAtom.hh | 2 +- .../particles/hadrons/ions/include/G4He3.hh | 2 +- .../hadrons/ions/include/G4HyperAlpha.hh | 2 +- .../hadrons/ions/include/G4HyperH4.hh | 2 +- .../hadrons/ions/include/G4HyperHe5.hh | 2 +- .../hadrons/ions/include/G4HyperTriton.hh | 2 +- .../hadrons/ions/include/G4IonConstructor.hh | 4 - .../hadrons/ions/include/G4Triton.hh | 2 +- source/particles/hadrons/ions/src/G4Alpha.cc | 10 +- .../particles/hadrons/ions/src/G4AntiAlpha.cc | 10 +- .../hadrons/ions/src/G4AntiDeuteron.cc | 10 +- .../src/G4AntiDoubleHyperDoubleNeutron.cc | 6 +- .../hadrons/ions/src/G4AntiDoubleHyperH4.cc | 6 +- .../particles/hadrons/ions/src/G4AntiHe3.cc | 10 +- .../hadrons/ions/src/G4AntiHyperAlpha.cc | 6 +- .../hadrons/ions/src/G4AntiHyperH4.cc | 6 +- .../hadrons/ions/src/G4AntiHyperHe5.cc | 6 +- .../hadrons/ions/src/G4AntiHyperTriton.cc | 6 +- .../hadrons/ions/src/G4AntiTriton.cc | 8 +- .../particles/hadrons/ions/src/G4Deuteron.cc | 10 +- .../ions/src/G4DoubleHyperDoubleNeutron.cc | 6 +- .../hadrons/ions/src/G4DoubleHyperH4.cc | 6 +- .../hadrons/ions/src/G4GenericIon.cc | 10 +- .../hadrons/ions/src/G4GenericMuonicAtom.cc | 4 +- source/particles/hadrons/ions/src/G4He3.cc | 10 +- .../hadrons/ions/src/G4HyperAlpha.cc | 6 +- .../particles/hadrons/ions/src/G4HyperH4.cc | 6 +- .../particles/hadrons/ions/src/G4HyperHe5.cc | 6 +- .../hadrons/ions/src/G4HyperTriton.cc | 6 +- .../hadrons/ions/src/G4IonConstructor.cc | 7 - source/particles/hadrons/ions/src/G4Triton.cc | 6 +- source/particles/hadrons/mesons/GNUmakefile | 20 - .../mesons/include/G4AntiBMesonZero.hh | 2 +- .../mesons/include/G4AntiBsMesonZero.hh | 2 +- .../mesons/include/G4AntiDMesonZero.hh | 2 +- .../hadrons/mesons/include/G4AntiKaonZero.hh | 2 +- .../hadrons/mesons/include/G4BMesonMinus.hh | 2 +- .../hadrons/mesons/include/G4BMesonPlus.hh | 2 +- .../hadrons/mesons/include/G4BMesonZero.hh | 2 +- .../hadrons/mesons/include/G4BcMesonMinus.hh | 2 +- .../hadrons/mesons/include/G4BcMesonPlus.hh | 2 +- .../hadrons/mesons/include/G4BsMesonZero.hh | 2 +- .../hadrons/mesons/include/G4DMesonMinus.hh | 2 +- .../hadrons/mesons/include/G4DMesonPlus.hh | 2 +- .../hadrons/mesons/include/G4DMesonZero.hh | 2 +- .../hadrons/mesons/include/G4DsMesonMinus.hh | 2 +- .../hadrons/mesons/include/G4DsMesonPlus.hh | 2 +- .../particles/hadrons/mesons/include/G4Eta.hh | 2 +- .../hadrons/mesons/include/G4EtaPrime.hh | 2 +- .../hadrons/mesons/include/G4Etac.hh | 2 +- .../hadrons/mesons/include/G4JPsi.hh | 2 +- .../hadrons/mesons/include/G4KaonMinus.hh | 2 +- .../hadrons/mesons/include/G4KaonPlus.hh | 2 +- .../hadrons/mesons/include/G4KaonZero.hh | 2 +- .../hadrons/mesons/include/G4KaonZeroLong.hh | 2 +- .../hadrons/mesons/include/G4KaonZeroShort.hh | 2 +- .../mesons/include/G4MesonConstructor.hh | 4 - .../hadrons/mesons/include/G4PionMinus.hh | 2 +- .../hadrons/mesons/include/G4PionPlus.hh | 2 +- .../hadrons/mesons/include/G4PionZero.hh | 2 +- .../hadrons/mesons/include/G4Upsilon.hh | 2 +- .../hadrons/mesons/src/G4AntiBMesonZero.cc | 8 +- .../hadrons/mesons/src/G4AntiBsMesonZero.cc | 8 +- .../hadrons/mesons/src/G4AntiDMesonZero.cc | 8 +- .../hadrons/mesons/src/G4AntiKaonZero.cc | 12 +- .../hadrons/mesons/src/G4BMesonMinus.cc | 8 +- .../hadrons/mesons/src/G4BMesonPlus.cc | 8 +- .../hadrons/mesons/src/G4BMesonZero.cc | 8 +- .../hadrons/mesons/src/G4BcMesonMinus.cc | 8 +- .../hadrons/mesons/src/G4BcMesonPlus.cc | 8 +- .../hadrons/mesons/src/G4BsMesonZero.cc | 8 +- .../hadrons/mesons/src/G4DMesonMinus.cc | 8 +- .../hadrons/mesons/src/G4DMesonPlus.cc | 8 +- .../hadrons/mesons/src/G4DMesonZero.cc | 8 +- .../hadrons/mesons/src/G4DsMesonMinus.cc | 8 +- .../hadrons/mesons/src/G4DsMesonPlus.cc | 8 +- source/particles/hadrons/mesons/src/G4Eta.cc | 12 +- .../hadrons/mesons/src/G4EtaPrime.cc | 12 +- source/particles/hadrons/mesons/src/G4Etac.cc | 8 +- source/particles/hadrons/mesons/src/G4JPsi.cc | 8 +- .../hadrons/mesons/src/G4KaonMinus.cc | 12 +- .../hadrons/mesons/src/G4KaonPlus.cc | 12 +- .../hadrons/mesons/src/G4KaonZero.cc | 12 +- .../hadrons/mesons/src/G4KaonZeroLong.cc | 12 +- .../hadrons/mesons/src/G4KaonZeroShort.cc | 12 +- .../hadrons/mesons/src/G4MesonConstructor.cc | 9 - .../hadrons/mesons/src/G4PionMinus.cc | 10 +- .../hadrons/mesons/src/G4PionPlus.cc | 10 +- .../hadrons/mesons/src/G4PionZero.cc | 10 +- .../particles/hadrons/mesons/src/G4Upsilon.cc | 8 +- source/particles/leptons/GNUmakefile | 21 - .../leptons/include/G4AntiNeutrinoE.hh | 2 +- .../leptons/include/G4AntiNeutrinoMu.hh | 2 +- .../leptons/include/G4AntiNeutrinoTau.hh | 2 +- .../particles/leptons/include/G4Electron.hh | 2 +- .../leptons/include/G4LeptonConstructor.hh | 6 - .../particles/leptons/include/G4MuonMinus.hh | 2 +- .../particles/leptons/include/G4MuonPlus.hh | 2 +- .../particles/leptons/include/G4NeutrinoE.hh | 2 +- .../particles/leptons/include/G4NeutrinoMu.hh | 2 +- .../leptons/include/G4NeutrinoTau.hh | 2 +- .../particles/leptons/include/G4Positron.hh | 2 +- .../particles/leptons/include/G4TauMinus.hh | 2 +- source/particles/leptons/include/G4TauPlus.hh | 2 +- .../particles/leptons/src/G4AntiNeutrinoE.cc | 8 +- .../particles/leptons/src/G4AntiNeutrinoMu.cc | 8 +- .../leptons/src/G4AntiNeutrinoTau.cc | 8 +- source/particles/leptons/src/G4Electron.cc | 8 +- .../leptons/src/G4LeptonConstructor.cc | 7 - source/particles/leptons/src/G4MuonMinus.cc | 10 +- source/particles/leptons/src/G4MuonPlus.cc | 10 +- source/particles/leptons/src/G4NeutrinoE.cc | 8 +- source/particles/leptons/src/G4NeutrinoMu.cc | 8 +- source/particles/leptons/src/G4NeutrinoTau.cc | 8 +- source/particles/leptons/src/G4Positron.cc | 8 +- source/particles/leptons/src/G4TauMinus.cc | 10 +- source/particles/leptons/src/G4TauPlus.cc | 10 +- source/particles/management/GNUmakefile | 24 - .../include/G4DalitzDecayChannel.hh | 8 +- .../include/G4DecayTableMessenger.hh | 6 +- .../management/include/G4DynamicParticle.icc | 4 +- .../include/G4HyperNucleiProperties.hh | 4 +- source/particles/management/include/G4Ions.hh | 4 +- .../management/include/G4IsotopeProperty.hh | 4 +- .../management/include/G4KL3DecayChannel.hh | 8 +- .../management/include/G4MuonDecayChannel.hh | 8 +- .../include/G4MuonDecayChannelWithSpin.hh | 8 +- .../G4MuonRadiativeDecayChannelWithSpin.hh | 8 +- .../management/include/G4MuonicAtom.hh | 2 +- .../include/G4NeutronBetaDecayChannel.hh | 6 +- .../management/include/G4NucleiProperties.hh | 4 +- .../include/G4NucleiPropertiesTableAME12.hh | 4 +- .../G4NucleiPropertiesTheoreticalTable.hh | 2 +- .../management/include/G4NuclideTable.hh | 18 +- .../include/G4NuclideTableMessenger.hh | 4 +- .../management/include/G4PDGCodeChecker.hh | 2 +- .../management/include/G4PDefManager.hh | 2 +- .../include/G4ParticleDefinition.icc | 10 +- .../management/include/G4ParticleMessenger.hh | 6 +- .../include/G4ParticlePropertyData.hh | 2 +- .../include/G4ParticlePropertyData.icc | 14 +- .../include/G4ParticlePropertyMessenger.hh | 6 +- .../include/G4ParticleTableIterator.hh | 2 +- .../include/G4ParticlesWorkspace.hh | 2 +- .../include/G4PhaseSpaceDecayChannel.hh | 6 +- .../include/G4PionRadiativeDecayChannel.hh | 8 +- .../management/include/G4PrimaryParticle.hh | 4 +- .../management/include/G4PrimaryVertex.hh | 2 +- .../include/G4TauLeptonicDecayChannel.hh | 8 +- .../management/include/G4VDecayChannel.hh | 23 +- .../management/include/G4VIsotopeTable.hh | 6 +- .../G4VUserPrimaryParticleInformation.hh | 4 +- .../G4VUserPrimaryVertexInformation.hh | 4 +- source/particles/management/sources.cmake | 4 +- .../management/src/G4DalitzDecayChannel.cc | 24 +- .../management/src/G4DecayProducts.cc | 30 +- .../particles/management/src/G4DecayTable.cc | 24 +- .../management/src/G4DecayTableMessenger.cc | 8 +- .../management/src/G4DynamicParticle.cc | 17 +- .../management/src/G4ElectronOccupancy.cc | 6 +- .../management/src/G4HyperNucleiProperties.cc | 2 +- source/particles/management/src/G4IonTable.cc | 351 +- source/particles/management/src/G4Ions.cc | 13 +- .../management/src/G4IsotopeProperty.cc | 11 +- .../management/src/G4KL3DecayChannel.cc | 27 +- .../management/src/G4MuonDecayChannel.cc | 26 +- .../src/G4MuonDecayChannelWithSpin.cc | 27 +- .../G4MuonRadiativeDecayChannelWithSpin.cc | 27 +- .../particles/management/src/G4MuonicAtom.cc | 4 - .../management/src/G4MuonicAtomHelper.cc | 2 +- .../src/G4NeutronBetaDecayChannel.cc | 19 +- .../management/src/G4NucleiProperties.cc | 62 +- .../src/G4NucleiPropertiesTableAME12.cc | 33 +- .../G4NucleiPropertiesTheoreticalTableA.cc | 27 +- .../management/src/G4NuclideTable.cc | 56 +- .../management/src/G4PDGCodeChecker.cc | 19 +- .../particles/management/src/G4PDefManager.cc | 10 +- .../management/src/G4ParticleDefinition.cc | 16 +- .../management/src/G4ParticleMessenger.cc | 9 +- .../management/src/G4ParticlePropertyData.cc | 5 - .../src/G4ParticlePropertyMessenger.cc | 18 +- .../management/src/G4ParticlePropertyTable.cc | 10 +- .../management/src/G4ParticleTable.cc | 58 +- .../management/src/G4ParticlesWorkspace.cc | 6 +- .../src/G4PhaseSpaceDecayChannel.cc | 44 +- .../src/G4PionRadiativeDecayChannel.cc | 26 +- .../management/src/G4PrimaryParticle.cc | 8 +- .../management/src/G4PrimaryVertex.cc | 15 +- .../src/G4TauLeptonicDecayChannel.cc | 29 +- .../management/src/G4VDecayChannel.cc | 9 +- .../management/src/G4VIsotopeTable.cc | 19 +- source/particles/shortlived/GNUmakefile | 21 - .../shortlived/include/G4DiQuarks.hh | 2 +- .../include/G4ExcitedBaryonConstructor.hh | 10 +- .../shortlived/include/G4ExcitedBaryons.hh | 2 +- .../include/G4ExcitedDeltaConstructor.hh | 26 +- .../include/G4ExcitedLambdaConstructor.hh | 28 +- .../include/G4ExcitedMesonConstructor.hh | 6 +- .../shortlived/include/G4ExcitedMesons.hh | 2 +- .../include/G4ExcitedNucleonConstructor.hh | 30 +- .../include/G4ExcitedSigmaConstructor.hh | 28 +- .../include/G4ExcitedXiConstructor.hh | 28 +- .../particles/shortlived/include/G4Gluons.hh | 2 +- .../particles/shortlived/include/G4Quarks.hh | 2 +- .../include/G4ShortLivedConstructor.hh | 4 - .../include/G4VShortLivedParticle.hh | 2 +- source/particles/shortlived/src/G4DiQuarks.cc | 3 - .../src/G4ExcitedBaryonConstructor.cc | 11 +- .../shortlived/src/G4ExcitedBaryons.cc | 3 - .../src/G4ExcitedDeltaConstructor.cc | 6 +- .../src/G4ExcitedLambdaConstructor.cc | 6 +- .../src/G4ExcitedMesonConstructor.cc | 10 +- .../shortlived/src/G4ExcitedMesons.cc | 3 - .../src/G4ExcitedNucleonConstructor.cc | 6 +- .../src/G4ExcitedSigmaConstructor.cc | 6 +- .../shortlived/src/G4ExcitedXiConstructor.cc | 6 +- source/particles/shortlived/src/G4Gluons.cc | 3 - source/particles/shortlived/src/G4Quarks.cc | 3 - .../shortlived/src/G4ShortLivedConstructor.cc | 187 +- .../shortlived/src/G4VShortLivedParticle.cc | 2 - source/particles/utils/GNUmakefile | 24 - .../utils/include/G4HtmlPPReporter.hh | 9 +- .../include/G4IsotopeMagneticMomentTable.hh | 12 +- .../utils/include/G4SimplePPReporter.hh | 9 +- .../utils/include/G4TextPPReporter.hh | 9 +- .../utils/include/G4TextPPRetriever.hh | 9 +- .../include/G4VParticlePropertyReporter.hh | 2 +- .../particles/utils/src/G4HtmlPPReporter.cc | 35 +- .../utils/src/G4IsotopeMagneticMomentTable.cc | 28 +- .../particles/utils/src/G4SimplePPReporter.cc | 13 +- .../particles/utils/src/G4TextPPReporter.cc | 16 +- .../particles/utils/src/G4TextPPRetriever.cc | 12 +- .../utils/src/G4VParticlePropertyReporter.cc | 2 +- source/persistency/CMakeLists.txt | 7 +- source/persistency/GNUmakefile | 25 - source/persistency/History | 7 + source/persistency/ascii/GNUmakefile | 29 - source/persistency/gdml/GNUmakefile | 48 - source/persistency/gdml/History | 24 +- .../gdml/include/G4GDMLMessenger.hh | 1 + .../persistency/gdml/include/G4GDMLParser.hh | 1 + .../persistency/gdml/include/G4GDMLParser.icc | 5 + source/persistency/gdml/include/G4GDMLRead.hh | 6 + .../persistency/gdml/src/G4GDMLMessenger.cc | 12 + source/persistency/gdml/src/G4GDMLRead.cc | 37 + .../gdml/src/G4GDMLWriteStructure.cc | 2 +- source/persistency/mctruth/GNUmakefile | 26 - source/physics_lists/GNUmakefile | 48 - source/physics_lists/History | 3 + source/physics_lists/builders/GNUmakefile | 91 - source/physics_lists/builders/History | 4 +- source/physics_lists/constructors/GNUmakefile | 33 - .../constructors/decay/GNUmakefile | 77 - .../physics_lists/constructors/decay/History | 8 +- .../constructors/electromagnetic/GNUmakefile | 58 - .../constructors/electromagnetic/History | 33 +- .../include/G4ChemDissociationChannels.hh | 42 + .../G4ChemDissociationChannels_option1.hh | 42 + .../include/G4EmDNAChemistry.hh | 27 +- .../include/G4EmDNAChemistry_option1.hh | 24 +- .../include/G4EmDNAChemistry_option2.hh | 30 +- .../include/G4EmDNAChemistry_option3.hh | 14 +- .../include/G4EmModelActivator.hh | 3 +- .../include/G4EmParticleList.hh | 10 +- .../include/G4GammaGeneralProcess.hh | 20 +- .../electromagnetic/sources.cmake | 6 +- .../src/G4ChemDissociationChannels.cc | 319 + .../src/G4ChemDissociationChannels_option1.cc | 456 + .../electromagnetic/src/G4EmBuilder.cc | 16 +- .../electromagnetic/src/G4EmDNAChemistry.cc | 327 +- .../src/G4EmDNAChemistry_option1.cc | 339 +- .../src/G4EmDNAChemistry_option2.cc | 324 +- .../src/G4EmDNAChemistry_option3.cc | 482 +- .../electromagnetic/src/G4EmModelActivator.cc | 123 +- .../electromagnetic/src/G4EmParticleList.cc | 15 +- .../src/G4EmStandardPhysicsSS.cc | 11 +- .../constructors/factory/GNUmakefile | 96 - .../constructors/factory/History | 3 + .../include/G4RegisterPhysicsConstructors.icc | 3 + .../gamma_lepto_nuclear/GNUmakefile | 73 - .../constructors/gamma_lepto_nuclear/History | 3 + .../src/G4EmExtraPhysics.cc | 1 - .../constructors/hadron_elastic/GNUmakefile | 56 - .../constructors/hadron_elastic/History | 8 + .../constructors/hadron_elastic/README | 8 + .../include/G4HadronElasticPhysicsHP.hh | 2 +- .../include/G4HadronElasticPhysicsHPT.hh | 61 + .../constructors/hadron_elastic/sources.cmake | 2 + .../src/G4HadronElasticPhysicsHPT.cc | 87 + .../constructors/hadron_inelastic/GNUmakefile | 81 - .../constructors/hadron_inelastic/History | 15 + .../constructors/hadron_inelastic/README | 9 + .../include/G4HadronInelasticQBBC_ABLA.hh | 63 + .../hadron_inelastic/sources.cmake | 3 + .../src/G4HadronInelasticQBBC_ABLA.cc | 202 + .../constructors/ions/GNUmakefile | 74 - .../constructors/limiters/GNUmakefile | 81 - .../constructors/stopping/GNUmakefile | 74 - .../constructors/stopping/History | 5 + .../constructors/stopping/README | 4 + .../include/G4StoppingPhysicsWithINCLXX.hh | 77 + .../constructors/stopping/sources.cmake | 4 +- .../src/G4StoppingPhysicsWithINCLXX.cc | 177 + source/physics_lists/lists/GNUmakefile | 99 - source/physics_lists/lists/History | 39 + .../include/G4PhysListFactoryMessenger.hh | 7 +- .../lists/include/INCLXXPhysicsListHelper.icc | 3 +- .../physics_lists/lists/include/QBBC_ABLA.hh | 60 + .../lists/include/QGSP_BIC_HPT.hh | 58 + source/physics_lists/lists/sources.cmake | 4 + .../lists/src/G4PhysListFactory.cc | 29 +- .../lists/src/G4PhysListFactoryMessenger.cc | 10 + source/physics_lists/lists/src/QBBC_ABLA.cc | 74 + .../physics_lists/lists/src/QGSP_BIC_HPT.cc | 86 + source/physics_lists/lists/src/Shielding.cc | 6 +- source/physics_lists/util/GNUmakefile | 39 - source/physics_lists/util/History | 3 +- source/processes/GNUmakefile | 160 - source/processes/History | 3 + source/processes/biasing/GNUmakefile | 17 - source/processes/biasing/generic/GNUmakefile | 34 - .../processes/biasing/importance/GNUmakefile | 34 - .../processes/biasing/management/GNUmakefile | 33 - source/processes/cuts/GNUmakefile | 21 - source/processes/decay/GNUmakefile | 28 - source/processes/electromagnetic/GNUmakefile | 23 - .../electromagnetic/adjoint/GNUmakefile | 37 - .../processes/electromagnetic/dna/GNUmakefile | 15 - source/processes/electromagnetic/dna/History | 63 + .../dna/management/GNUmakefile | 35 - .../dna/management/include/G4KDTree.hh | 16 +- .../dna/management/include/G4KDTree.icc | 8 +- .../management/include/G4VUserPulseInfo.hh | 40 + .../dna/management/sources.cmake | 4 +- .../dna/management/src/G4Scheduler.cc | 5 +- .../dna/management/src/G4VUserPulseInfo.cc} | 8 +- .../electromagnetic/dna/models/GNUmakefile | 42 - .../models/include/G4DNACPA100ElasticModel.hh | 183 +- .../include/G4DNACPA100ExcitationModel.hh | 111 +- .../include/G4DNACPA100IonisationModel.hh | 206 +- .../G4DNADingfelderChargeIncreaseModel.hh | 93 +- .../dna/models/include/G4DNADummyModel.hh | 77 - .../dna/models/include/G4DNAEventScheduler.hh | 7 +- .../dna/models/include/G4DNAModelInterface.hh | 258 +- .../models/include/G4DNAPTBElasticModel.hh | 359 +- .../models/include/G4DNAPTBExcitationModel.hh | 127 +- .../models/include/G4DNAPTBIonisationModel.hh | 328 +- .../G4DNARuddIonisationExtendedModel.hh | 211 +- .../dna/models/include/G4DNAVacuumModel.hh | 68 +- .../dna/models/include/G4VDNAModel.hh | 516 +- .../electromagnetic/dna/models/sources.cmake | 2 - .../dna/models/src/G4DNACPA100ElasticModel.cc | 817 +- .../models/src/G4DNACPA100ExcitationModel.cc | 597 +- .../models/src/G4DNACPA100IonisationModel.cc | 1717 +- .../src/G4DNADingfelderChargeIncreaseModel.cc | 37 +- .../dna/models/src/G4DNADummyModel.cc | 79 - .../dna/models/src/G4DNAEventScheduler.cc | 29 +- .../dna/models/src/G4DNAModelInterface.cc | 960 +- .../dna/models/src/G4DNAPTBElasticModel.cc | 879 +- .../dna/models/src/G4DNAPTBExcitationModel.cc | 566 +- .../dna/models/src/G4DNAPTBIonisationModel.cc | 1704 +- .../src/G4DNARuddIonisationExtendedModel.cc | 1307 +- .../dna/models/src/G4DNAVacuumModel.cc | 71 +- .../dna/models/src/G4VDNAModel.cc | 375 +- .../electromagnetic/dna/molecules/GNUmakefile | 7 - .../dna/molecules/management/GNUmakefile | 28 - .../dna/molecules/types/GNUmakefile | 25 - .../electromagnetic/dna/processes/GNUmakefile | 43 - .../electromagnetic/dna/utils/GNUmakefile | 41 - .../G4DNACPA100ExcitationStructure.hh} | 82 +- .../include/G4DNACPA100IonisationStructure.hh | 89 + .../dna/utils/include/G4DNAMaterialManager.hh | 77 + .../include/G4DNAPTBExcitationStructure.hh | 29 +- .../include/G4DNAPTBIonisationStructure.hh | 46 +- .../electromagnetic/dna/utils/sources.cmake | 12 +- .../src/G4DNACPA100ExcitationStructure.cc | 261 + .../src/G4DNACPA100IonisationStructure.cc | 387 + .../dna/utils/src/G4DNAChemistryManager.cc | 28 +- .../dna/utils/src/G4DNAMaterialManager.cc | 69 + .../utils/src/G4DNAPTBExcitationStructure.cc | 141 +- .../utils/src/G4DNAPTBIonisationStructure.cc | 378 +- .../electromagnetic/highenergy/GNUmakefile | 37 - .../electromagnetic/highenergy/History | 6 +- .../include/G4GammaConversionToMuons.hh | 2 +- .../highenergy/src/G4AnnihiToMuPair.cc | 74 +- .../src/G4GammaConversionToMuons.cc | 273 +- .../electromagnetic/lowenergy/GNUmakefile | 37 - .../electromagnetic/lowenergy/History | 22 + .../include/G4LivermoreComptonModel.hh | 10 +- .../G4LivermoreGammaConversion5DModel.hh | 52 +- .../G4LivermoreGammaConversionModel.hh | 16 +- .../include/G4LivermorePhotoElectricModel.hh | 121 +- .../include/G4LivermoreRayleighModel.hh | 42 +- .../lowenergy/include/G4LowEWentzelVIModel.hh | 2 +- .../lowenergy/src/G4LivermoreComptonModel.cc | 939 +- .../src/G4LivermoreGammaConversion5DModel.cc | 243 +- .../src/G4LivermoreGammaConversionModel.cc | 196 +- .../src/G4LivermorePhotoElectricModel.cc | 870 +- .../lowenergy/src/G4LivermoreRayleighModel.cc | 258 +- .../lowenergy/src/G4LowEWentzelVIModel.cc | 9 +- .../electromagnetic/muons/GNUmakefile | 31 - .../processes/electromagnetic/muons/History | 2 +- .../processes/electromagnetic/pii/GNUmakefile | 31 - .../electromagnetic/polarisation/GNUmakefile | 36 - .../electromagnetic/standard/GNUmakefile | 38 - .../electromagnetic/standard/History | 91 +- .../standard/include/G4BetheHeitlerModel.hh | 2 + .../standard/include/G4BraggIonModel.hh | 71 +- .../standard/include/G4BraggModel.hh | 68 +- .../standard/include/G4CoulombScattering.hh | 13 +- .../standard/include/G4ESTARStopping.hh | 1 - .../standard/include/G4IonICRU73Data.hh | 4 +- .../include/G4LindhardSorensenIonModel.hh | 29 +- .../standard/include/G4PAIModel.hh | 8 +- .../standard/include/G4PAIxSection.hh | 51 +- .../include/G4PairProductionRelModel.hh | 1 + .../standard/include/G4SeltzerBergerModel.hh | 4 +- .../standard/include/G4UrbanMscModel.hh | 40 +- .../standard/include/G4WaterStopping.hh | 18 +- .../include/G4eBremsstrahlungRelModel.hh | 2 + .../include/G4eCoulombScatteringModel.hh | 30 +- .../standard/include/G4hIonisation.hh | 13 +- .../standard/include/G4ionIonisation.hh | 23 +- .../standard/src/G4BetheBlochModel.cc | 62 +- .../standard/src/G4BetheHeitlerModel.cc | 45 +- .../standard/src/G4BraggIonModel.cc | 364 +- .../standard/src/G4BraggModel.cc | 79 +- .../standard/src/G4CoulombScattering.cc | 78 +- .../standard/src/G4ESTARStopping.cc | 12 +- .../standard/src/G4GSMottCorrection.cc | 10 +- .../standard/src/G4GSPWACorrections.cc | 10 +- .../standard/src/G4GoudsmitSaundersonTable.cc | 13 +- .../standard/src/G4IonICRU73Data.cc | 55 +- .../src/G4LindhardSorensenIonModel.cc | 75 +- .../standard/src/G4PAIModel.cc | 36 +- .../standard/src/G4PAIModelData.cc | 5 +- .../standard/src/G4PAIPhotData.cc | 9 +- .../standard/src/G4PAIPhotModel.cc | 56 +- .../standard/src/G4PAIxSection.cc | 237 +- .../standard/src/G4PAIySection.cc | 103 +- .../standard/src/G4PairProductionRelModel.cc | 57 +- .../standard/src/G4SBBremTable.cc | 18 +- .../standard/src/G4SeltzerBergerModel.cc | 80 +- .../standard/src/G4UrbanMscModel.cc | 38 +- .../standard/src/G4WaterStopping.cc | 21 +- .../standard/src/G4eBremsstrahlung.cc | 2 - .../standard/src/G4eBremsstrahlungRelModel.cc | 73 +- .../standard/src/G4eCoulombScatteringModel.cc | 31 +- .../standard/src/G4eDPWAElasticDCS.cc | 15 +- .../standard/src/G4hIonisation.cc | 11 +- .../standard/src/G4ionIonisation.cc | 43 +- .../electromagnetic/utils/GNUmakefile | 32 - .../processes/electromagnetic/utils/History | 52 +- .../utils/include/G4EmCorrections.hh | 96 +- .../utils/include/G4EmParameters.hh | 4 + .../utils/include/G4LossTableManager.hh | 66 +- .../utils/include/G4VEmModel.hh | 23 +- .../utils/include/G4VEnergyLossProcess.hh | 14 +- .../utils/src/G4EmCalculator.cc | 2 +- .../utils/src/G4EmCorrections.cc | 44 +- .../utils/src/G4EmParameters.cc | 7 + .../utils/src/G4LossTableBuilder.cc | 20 +- .../utils/src/G4LossTableManager.cc | 84 +- .../electromagnetic/utils/src/G4VEmModel.cc | 20 +- .../electromagnetic/utils/src/G4VEmProcess.cc | 2 +- .../utils/src/G4VEnergyLossProcess.cc | 92 +- .../electromagnetic/utils/src/G4VMscModel.cc | 12 +- .../utils/src/G4VMultipleScattering.cc | 2 +- .../utils/src/G4ionEffectiveCharge.cc | 2 +- .../electromagnetic/xrays/GNUmakefile | 35 - source/processes/hadronic/GNUmakefile | 91 - .../hadronic/cross_sections/GNUmakefile | 31 - .../processes/hadronic/cross_sections/History | 27 + .../include/G4CrossSectionDataStore.hh | 3 +- .../include/G4ElNeutrinoNucleusTotXsc.hh | 8 +- .../include/G4GammaNuclearXS.hh | 54 +- .../src/G4CrossSectionDataStore.cc | 16 +- .../src/G4ElNeutrinoNucleusTotXsc.cc | 4 +- .../cross_sections/src/G4GammaNuclearXS.cc | 273 +- .../cross_sections/src/G4NeutronCaptureXS.cc | 15 +- .../cross_sections/src/G4NeutronElasticXS.cc | 15 +- .../src/G4NeutronInelasticXS.cc | 15 +- .../src/G4ParticleInelasticXS.cc | 15 +- .../processes/hadronic/management/GNUmakefile | 33 - source/processes/hadronic/management/History | 17 +- .../management/include/G4HadronicProcess.hh | 10 +- .../include/G4HadronicProcessStore.hh | 22 +- .../management/src/G4HadronicProcess.cc | 89 +- .../management/src/G4HadronicProcessStore.cc | 103 +- source/processes/hadronic/models/GNUmakefile | 81 - .../hadronic/models/abla/GNUmakefile | 35 - source/processes/hadronic/models/abla/History | 5 + .../models/abla/include/G4AblaInterface.hh | 7 +- .../models/abla/src/G4AblaInterface.cc | 56 + .../hadronic/models/abrasion/GNUmakefile | 47 - .../models/binary_cascade/GNUmakefile | 45 - .../hadronic/models/binary_cascade/History | 5 + .../binary_cascade/include/G4BinaryCascade.hh | 1 + .../binary_cascade/src/G4BinaryCascade.cc | 20 +- .../src/G4BinaryLightIonReaction.cc | 7 +- .../hadronic/models/cascade/GNUmakefile | 17 - .../processes/hadronic/models/cascade/History | 33 +- .../models/cascade/cascade/GNUmakefile | 82 - .../cascade/include/G4AblaDeexcitation.hh} | 54 +- .../cascade/include/G4CascadeInterface.hh | 1 + .../cascade/include/G4CascadeParameters.hh | 3 + .../cascade/include/G4InuclCollider.hh | 1 + .../models/cascade/cascade/sources.cmake | 3 + .../cascade/cascade/src/G4AblaDeexcitation.cc | 73 + .../cascade/cascade/src/G4CascadeInterface.cc | 11 +- .../cascade/src/G4CascadeParameters.cc | 4 + .../cascade/src/G4EquilibriumEvaporator.cc | 4 +- .../cascade/cascade/src/G4InuclCollider.cc | 7 + .../models/coherent_elastic/GNUmakefile | 34 - .../hadronic/models/de_excitation/GNUmakefile | 35 - .../hadronic/models/de_excitation/History | 20 + .../models/de_excitation/ablation/GNUmakefile | 43 - .../de_excitation/evaporation/GNUmakefile | 37 - .../de_excitation/fermi_breakup/GNUmakefile | 27 - .../models/de_excitation/fission/GNUmakefile | 33 - .../de_excitation/gem_evaporation/GNUmakefile | 35 - .../models/de_excitation/handler/GNUmakefile | 39 - .../handler/include/G4ExcitationHandler.hh | 20 +- .../de_excitation/management/GNUmakefile | 33 - .../include/G4DeexPrecoParameters.hh | 52 +- .../management/include/G4LevelManager.hh | 14 + .../management/include/G4LevelReader.hh | 93 +- .../management/include/G4NuclearLevelData.hh | 14 +- .../include/G4VEvaporationChannel.hh | 13 +- .../include/G4VEvaporationFactory.hh | 14 +- .../management/src/G4DeexPrecoParameters.cc | 60 +- .../management/src/G4LevelReader.cc | 178 +- .../management/src/G4NuclearLevelData.cc | 23 +- .../management/src/G4VEvaporationChannel.cc | 4 +- .../management/src/G4VEvaporationFactory.cc | 3 - .../multifragmentation/GNUmakefile | 31 - .../photon_evaporation/GNUmakefile | 38 - .../models/de_excitation/util/GNUmakefile | 31 - .../models/em_dissociation/GNUmakefile | 45 - .../hadronic/models/fission/GNUmakefile | 34 - .../hadronic/models/gamma_nuclear/GNUmakefile | 42 - .../hadronic/models/im_r_matrix/GNUmakefile | 36 - .../hadronic/models/inclxx/GNUmakefile | 20 - .../processes/hadronic/models/inclxx/History | 10 +- .../models/inclxx/incl_physics/GNUmakefile | 47 - .../incl_physics/include/G4INCLCascade.hh | 35 +- .../include/G4INCLCoulombNonRelativistic.hh | 5 +- .../include/G4INCLIPropagationModel.hh | 1 + .../incl_physics/include/G4INCLNucleus.hh | 17 +- .../include/G4INCLParticleEntryAvatar.hh | 9 +- .../include/G4INCLPbarAtrestEntryChannel.hh | 95 + .../include/G4INCLStandardPropagationModel.hh | 3 +- .../models/inclxx/incl_physics/sources.cmake | 2 + .../inclxx/incl_physics/src/G4INCLCascade.cc | 547 +- .../src/G4INCLDeltaDecayChannel.cc | 20 +- .../src/G4INCLInteractionAvatar.cc | 31 +- .../incl_physics/src/G4INCLKinematicsUtils.cc | 4 +- .../G4INCLNNToMissingStrangenessChannel.cc | 4 + .../src/G4INCLNpiToLK2piChannel.cc | 2 + .../incl_physics/src/G4INCLNpiToLKChannel.cc | 4 +- .../src/G4INCLNpiToLKpiChannel.cc | 4 +- .../G4INCLNpiToMissingStrangenessChannel.cc | 7 +- .../src/G4INCLNpiToNKKbChannel.cc | 4 +- .../src/G4INCLNpiToSK2piChannel.cc | 4 +- .../incl_physics/src/G4INCLNpiToSKChannel.cc | 4 +- .../src/G4INCLNpiToSKpiChannel.cc | 4 +- .../src/G4INCLNuclearPotentialIsospin.cc | 13 +- .../inclxx/incl_physics/src/G4INCLNucleus.cc | 23 +- .../src/G4INCLParticleEntryAvatar.cc | 16 +- .../src/G4INCLPbarAtrestEntryChannel.cc | 730 + .../src/G4INCLPiNElasticChannel.cc | 26 +- .../src/G4INCLPiNToDeltaChannel.cc | 4 +- .../incl_physics/src/G4INCLPiNToEtaChannel.cc | 75 +- .../src/G4INCLPiNToMultiPionsChannel.cc | 60 +- .../src/G4INCLPiNToOmegaChannel.cc | 54 +- .../src/G4INCLReflectionChannel.cc | 9 +- .../src/G4INCLStandardPropagationModel.cc | 98 +- .../models/inclxx/interface/GNUmakefile | 50 - .../inclxx/interface/src/G4INCLXXInterface.cc | 8 +- .../hadronic/models/inclxx/utils/GNUmakefile | 32 - .../inclxx/utils/include/G4INCLConfig.hh | 8 + .../inclxx/utils/include/G4INCLEventInfo.hh | 8 + .../inclxx/utils/include/G4INCLParticle.hh | 56 +- .../utils/include/G4INCLParticleTable.hh | 5 +- .../utils/include/G4INCLParticleType.hh | 1 + .../inclxx/utils/include/G4INCLRandom.hh | 8 +- .../inclxx/utils/include/G4INCLVersion.hh | 4 +- .../models/inclxx/utils/src/G4INCLConfig.cc | 1 + .../inclxx/utils/src/G4INCLEventInfo.cc | 38 +- .../models/inclxx/utils/src/G4INCLHFB.cc | 4 +- .../models/inclxx/utils/src/G4INCLParticle.cc | 6 + .../inclxx/utils/src/G4INCLParticleSpecies.cc | 102 +- .../inclxx/utils/src/G4INCLParticleTable.cc | 52 +- .../hadronic/models/lend/GNUmakefile | 43 - source/processes/hadronic/models/lend/History | 8 +- .../lend/src/G4LENDCombinedCrossSection.cc | 12 +- .../lend/src/G4LENDGammaCrossSection.cc | 4 +- .../hadronic/models/lepto_nuclear/GNUmakefile | 41 - .../hadronic/models/particle_hp/GNUmakefile | 44 - .../hadronic/models/particle_hp/History | 66 +- .../models/particle_hp/include/G4ArrayOps.hh | 317 +- .../particle_hp/include/G4ENDFTapeRead.hh | 77 +- .../include/G4ENDFYieldDataContainer.hh | 48 +- .../include/G4FFGDebuggingMacros.hh | 317 +- .../particle_hp/include/G4FFGDefaultValues.hh | 106 +- .../particle_hp/include/G4FFGEnumerations.hh | 189 +- .../particle_hp/include/G4FFGVerboseMacros.hh | 18 +- .../include/G4FPYBiasedLightFragmentDist.hh | 55 +- .../include/G4FPYNormalFragmentDist.hh | 53 +- .../particle_hp/include/G4FPYNubarValues.hh | 166 +- .../particle_hp/include/G4FPYSamplingOps.hh | 138 +- .../include/G4FPYTreeStructures.hh | 5 +- .../include/G4FissionFragmentGenerator.hh | 161 +- .../include/G4FissionProductYieldDist.hh | 301 +- .../include/G4InterpolationIterator.hh | 81 +- .../include/G4InterpolationManager.hh | 311 +- .../include/G4InterpolationScheme.hh | 2 + .../particle_hp/include/G4NRESP71M03.hh | 52 +- .../include/G4NeutronHP2AInelasticFS.hh | 2 +- .../include/G4NeutronHP2N2AInelasticFS.hh | 2 +- .../include/G4NeutronHP2NAInelasticFS.hh | 2 +- .../include/G4NeutronHP2NDInelasticFS.hh | 2 +- .../include/G4NeutronHP2NInelasticFS.hh | 2 +- .../include/G4NeutronHP2NPInelasticFS.hh | 2 +- .../include/G4NeutronHP2PInelasticFS.hh | 2 +- .../include/G4NeutronHP3AInelasticFS.hh | 2 +- .../include/G4NeutronHP3NAInelasticFS.hh | 2 +- .../include/G4NeutronHP3NInelasticFS.hh | 2 +- .../include/G4NeutronHP3NPInelasticFS.hh | 2 +- .../include/G4NeutronHP4NInelasticFS.hh | 2 +- .../include/G4NeutronHPAInelasticFS.hh | 2 +- .../particle_hp/include/G4NeutronHPAngular.hh | 2 +- .../include/G4NeutronHPAngularP.hh | 2 +- .../include/G4NeutronHPArbitaryTab.hh | 2 +- .../G4NeutronHPBGGNucleonInelasticXS.hh | 2 +- .../particle_hp/include/G4NeutronHPCapture.hh | 2 +- .../include/G4NeutronHPCaptureData.hh | 2 +- .../include/G4NeutronHPCaptureFS.hh | 2 +- .../particle_hp/include/G4NeutronHPChannel.hh | 2 +- .../include/G4NeutronHPChannelList.hh | 2 +- .../include/G4NeutronHPContAngularPar.hh | 2 +- .../include/G4NeutronHPContEnergyAngular.hh | 2 +- .../include/G4NeutronHPD2AInelasticFS.hh | 2 +- .../include/G4NeutronHPDAInelasticFS.hh | 2 +- .../include/G4NeutronHPDInelasticFS.hh | 2 +- .../particle_hp/include/G4NeutronHPData.hh | 2 +- .../include/G4NeutronHPDataPoint.hh | 2 +- .../include/G4NeutronHPDataUsed.hh | 2 +- .../include/G4NeutronHPDeExGammas.hh | 2 +- .../include/G4NeutronHPDiscreteTwoBody.hh | 2 +- .../particle_hp/include/G4NeutronHPElastic.hh | 2 +- .../include/G4NeutronHPElasticData.hh | 2 +- .../include/G4NeutronHPElasticFS.hh | 2 +- .../include/G4NeutronHPElementData.hh | 2 +- .../include/G4NeutronHPEnAngCorrelation.hh | 2 +- .../include/G4NeutronHPEnergyDistribution.hh | 2 +- .../include/G4NeutronHPEvapSpectrum.hh | 2 +- .../include/G4NeutronHPFCFissionFS.hh | 2 +- .../include/G4NeutronHPFFFissionFS.hh | 2 +- .../include/G4NeutronHPFSFissionFS.hh | 2 +- .../include/G4NeutronHPFastLegendre.hh | 2 +- .../particle_hp/include/G4NeutronHPField.hh | 2 +- .../include/G4NeutronHPFieldPoint.hh | 2 +- .../include/G4NeutronHPFinalState.hh | 2 +- .../particle_hp/include/G4NeutronHPFission.hh | 2 +- .../include/G4NeutronHPFissionBaseFS.hh | 2 +- .../include/G4NeutronHPFissionData.hh | 2 +- .../include/G4NeutronHPFissionERelease.hh | 2 +- .../include/G4NeutronHPFissionFS.hh | 2 +- .../include/G4NeutronHPFissionSpectrum.hh | 2 +- .../particle_hp/include/G4NeutronHPHash.hh | 2 +- .../include/G4NeutronHPHe3InelasticFS.hh | 2 +- .../include/G4NeutronHPInelastic.hh | 2 +- .../include/G4NeutronHPInelasticBaseFS.hh | 2 +- .../include/G4NeutronHPInelasticCompFS.hh | 2 +- .../include/G4NeutronHPInelasticData.hh | 2 +- .../include/G4NeutronHPInterpolator.hh | 2 +- .../particle_hp/include/G4NeutronHPIsoData.hh | 2 +- .../include/G4NeutronHPIsotropic.hh | 2 +- .../include/G4NeutronHPJENDLHEData.hh | 2 +- .../include/G4NeutronHPJENDLHEElasticData.hh | 2 +- .../G4NeutronHPJENDLHEInelasticData.hh | 2 +- .../include/G4NeutronHPKallbachMannSyst.hh | 2 +- .../include/G4NeutronHPLCFissionFS.hh | 2 +- .../include/G4NeutronHPLabAngularEnergy.hh | 2 +- .../include/G4NeutronHPLegendreStore.hh | 2 +- .../include/G4NeutronHPLegendreTable.hh | 2 +- .../particle_hp/include/G4NeutronHPList.hh | 2 +- .../include/G4NeutronHPMadlandNixSpectrum.hh | 2 +- .../particle_hp/include/G4NeutronHPManager.hh | 2 +- .../include/G4NeutronHPMessenger.hh | 2 +- .../include/G4NeutronHPN2AInelasticFS.hh | 2 +- .../include/G4NeutronHPN2PInelasticFS.hh | 2 +- .../include/G4NeutronHPN3AInelasticFS.hh | 2 +- .../include/G4NeutronHPNAInelasticFS.hh | 2 +- .../include/G4NeutronHPNBodyPhaseSpace.hh | 2 +- .../include/G4NeutronHPND2AInelasticFS.hh | 2 +- .../include/G4NeutronHPNDInelasticFS.hh | 2 +- .../include/G4NeutronHPNHe3InelasticFS.hh | 2 +- .../include/G4NeutronHPNInelasticFS.hh | 2 +- .../include/G4NeutronHPNPAInelasticFS.hh | 2 +- .../include/G4NeutronHPNPInelasticFS.hh | 2 +- .../include/G4NeutronHPNT2AInelasticFS.hh | 2 +- .../include/G4NeutronHPNTInelasticFS.hh | 2 +- .../include/G4NeutronHPNXInelasticFS.hh | 2 +- .../particle_hp/include/G4NeutronHPNames.hh | 2 +- .../include/G4NeutronHPNeutronYield.hh | 2 +- .../include/G4NeutronHPPAInelasticFS.hh | 2 +- .../include/G4NeutronHPPDInelasticFS.hh | 2 +- .../include/G4NeutronHPPInelasticFS.hh | 2 +- .../include/G4NeutronHPPTInelasticFS.hh | 2 +- .../particle_hp/include/G4NeutronHPPartial.hh | 2 +- .../include/G4NeutronHPPhotonDist.hh | 2 +- .../include/G4NeutronHPPolynomExpansion.hh | 2 +- .../particle_hp/include/G4NeutronHPProduct.hh | 2 +- .../include/G4NeutronHPReactionWhiteBoard.hh | 2 +- .../include/G4NeutronHPSCFissionFS.hh | 2 +- .../include/G4NeutronHPSimpleEvapSpectrum.hh | 2 +- .../include/G4NeutronHPT2AInelasticFS.hh | 2 +- .../include/G4NeutronHPTCFissionFS.hh | 2 +- .../include/G4NeutronHPTInelasticFS.hh | 2 +- .../include/G4NeutronHPThermalBoost.hh | 2 +- .../include/G4NeutronHPThermalScattering.hh | 2 +- .../G4NeutronHPThermalScatteringData.hh | 2 +- .../G4NeutronHPThermalScatteringNames.hh | 2 +- .../include/G4NeutronHPThreadLocalManager.hh | 2 +- .../particle_hp/include/G4NeutronHPVector.hh | 2 +- .../include/G4NeutronHPWattSpectrum.hh | 2 +- .../include/G4ParticleHP2AInelasticFS.hh | 31 +- .../include/G4ParticleHP2N2AInelasticFS.hh | 31 +- .../include/G4ParticleHP2NAInelasticFS.hh | 31 +- .../include/G4ParticleHP2NDInelasticFS.hh | 31 +- .../include/G4ParticleHP2NInelasticFS.hh | 31 +- .../include/G4ParticleHP2NPInelasticFS.hh | 31 +- .../include/G4ParticleHP2PInelasticFS.hh | 31 +- .../include/G4ParticleHP3AInelasticFS.hh | 31 +- .../include/G4ParticleHP3NAInelasticFS.hh | 31 +- .../include/G4ParticleHP3NInelasticFS.hh | 31 +- .../include/G4ParticleHP3NPInelasticFS.hh | 31 +- .../include/G4ParticleHP4NInelasticFS.hh | 31 +- .../include/G4ParticleHPAInelasticFS.hh | 31 +- .../include/G4ParticleHPAngular.hh | 136 +- .../include/G4ParticleHPAngularP.hh | 138 +- .../include/G4ParticleHPArbitaryTab.hh | 141 +- .../G4ParticleHPBGGNucleonInelasticXS.hh | 33 +- .../include/G4ParticleHPCapture.hh | 51 +- .../include/G4ParticleHPCaptureData.hh | 88 +- .../include/G4ParticleHPCaptureFS.hh | 57 +- .../include/G4ParticleHPChannel.hh | 296 +- .../include/G4ParticleHPChannelList.hh | 115 +- .../include/G4ParticleHPContAngularPar.hh | 344 +- .../include/G4ParticleHPContEnergyAngular.hh | 102 +- .../include/G4ParticleHPD2AInelasticFS.hh | 26 +- .../include/G4ParticleHPDAInelasticFS.hh | 31 +- .../include/G4ParticleHPDInelasticFS.hh | 31 +- .../particle_hp/include/G4ParticleHPData.hh | 82 +- .../include/G4ParticleHPDataPoint.hh | 52 +- .../include/G4ParticleHPDataUsed.hh | 59 +- .../include/G4ParticleHPDiscreteTwoBody.hh | 103 +- .../include/G4ParticleHPElastic.hh | 58 +- .../include/G4ParticleHPElasticData.hh | 66 +- .../include/G4ParticleHPElasticFS.hh | 75 +- .../include/G4ParticleHPElementData.hh | 136 +- .../include/G4ParticleHPEnAngCorrelation.hh | 202 +- .../include/G4ParticleHPEnergyDistribution.hh | 158 +- .../include/G4ParticleHPEvapSpectrum.hh | 75 +- .../include/G4ParticleHPFCFissionFS.hh | 29 +- .../include/G4ParticleHPFFFissionFS.hh | 41 +- .../include/G4ParticleHPFSFissionFS.hh | 137 +- .../include/G4ParticleHPFastLegendre.hh | 380 +- .../particle_hp/include/G4ParticleHPField.hh | 86 +- .../include/G4ParticleHPFieldPoint.hh | 56 +- .../include/G4ParticleHPFinalState.hh | 172 +- .../include/G4ParticleHPFission.hh | 50 +- .../include/G4ParticleHPFissionBaseFS.hh | 100 +- .../include/G4ParticleHPFissionData.hh | 88 +- .../include/G4ParticleHPFissionERelease.hh | 182 +- .../include/G4ParticleHPFissionFS.hh | 53 +- .../include/G4ParticleHPFissionSpectrum.hh | 120 +- .../particle_hp/include/G4ParticleHPHash.hh | 159 +- .../include/G4ParticleHPHe3InelasticFS.hh | 31 +- .../include/G4ParticleHPInelastic.hh | 127 +- .../include/G4ParticleHPInelasticBaseFS.hh | 28 +- .../include/G4ParticleHPInelasticCompFS.hh | 36 +- .../include/G4ParticleHPInelasticData.hh | 109 +- .../include/G4ParticleHPInterpolator.hh | 190 +- .../include/G4ParticleHPIsoData.hh | 152 +- .../include/G4ParticleHPIsotropic.hh | 28 +- .../include/G4ParticleHPJENDLHEData.hh | 58 +- .../include/G4ParticleHPJENDLHEElasticData.hh | 4 +- .../G4ParticleHPJENDLHEInelasticData.hh | 4 +- .../include/G4ParticleHPKallbachMannSyst.hh | 105 +- .../include/G4ParticleHPLCFissionFS.hh | 29 +- .../include/G4ParticleHPLabAngularEnergy.hh | 99 +- .../include/G4ParticleHPLegendreStore.hh | 94 +- .../include/G4ParticleHPLegendreTable.hh | 135 +- .../particle_hp/include/G4ParticleHPList.hh | 72 +- .../include/G4ParticleHPMadlandNixSpectrum.hh | 215 +- .../include/G4ParticleHPManager.hh | 312 +- .../include/G4ParticleHPMessenger.hh | 42 +- .../include/G4ParticleHPN2AInelasticFS.hh | 31 +- .../include/G4ParticleHPN2PInelasticFS.hh | 31 +- .../include/G4ParticleHPN3AInelasticFS.hh | 31 +- .../include/G4ParticleHPNAInelasticFS.hh | 31 +- .../include/G4ParticleHPNBodyPhaseSpace.hh | 125 +- .../include/G4ParticleHPND2AInelasticFS.hh | 31 +- .../include/G4ParticleHPNDInelasticFS.hh | 31 +- .../include/G4ParticleHPNHe3InelasticFS.hh | 31 +- .../include/G4ParticleHPNInelasticFS.hh | 31 +- .../include/G4ParticleHPNPAInelasticFS.hh | 31 +- .../include/G4ParticleHPNPInelasticFS.hh | 31 +- .../include/G4ParticleHPNT2AInelasticFS.hh | 31 +- .../include/G4ParticleHPNTInelasticFS.hh | 31 +- .../include/G4ParticleHPNXInelasticFS.hh | 31 +- .../particle_hp/include/G4ParticleHPNames.hh | 60 +- .../include/G4ParticleHPPAInelasticFS.hh | 31 +- .../include/G4ParticleHPPDInelasticFS.hh | 31 +- .../include/G4ParticleHPPInelasticFS.hh | 31 +- .../include/G4ParticleHPPTInelasticFS.hh | 31 +- .../include/G4ParticleHPPartial.hh | 177 +- .../include/G4ParticleHPParticleYield.hh | 200 +- .../include/G4ParticleHPPhotonDist.hh | 274 +- .../include/G4ParticleHPPolynomExpansion.hh | 68 +- .../include/G4ParticleHPProduct.hh | 340 +- .../include/G4ParticleHPReactionWhiteBoard.hh | 49 +- .../include/G4ParticleHPSCFissionFS.hh | 29 +- .../include/G4ParticleHPSimpleEvapSpectrum.hh | 110 +- .../include/G4ParticleHPT2AInelasticFS.hh | 26 +- .../include/G4ParticleHPTCFissionFS.hh | 29 +- .../include/G4ParticleHPTInelasticFS.hh | 31 +- .../include/G4ParticleHPThermalBoost.hh | 74 +- .../include/G4ParticleHPThermalScattering.hh | 159 +- .../G4ParticleHPThermalScatteringData.hh | 102 +- .../G4ParticleHPThermalScatteringNames.hh | 51 +- .../include/G4ParticleHPThreadLocalManager.hh | 31 +- .../particle_hp/include/G4ParticleHPVector.hh | 908 +- .../include/G4ParticleHPWattSpectrum.hh | 81 +- .../particle_hp/include/G4ShiftedGaussian.hh | 57 +- .../particle_hp/include/G4TableTemplate.hh | 106 +- .../particle_hp/include/G4VNeutronHPEDis.hh | 2 +- .../include/G4VNeutronHPEnergyAngular.hh | 2 +- .../particle_hp/include/G4VParticleHPEDis.hh | 31 +- .../include/G4VParticleHPEnergyAngular.hh | 132 +- .../include/G4WattFissionSpectrumValues.hh | 173 +- .../G4WendtFissionFragmentGenerator.hh | 43 +- .../hadronic/models/particle_hp/sources.cmake | 2 - .../models/particle_hp/src/G4ENDFTapeRead.cc | 890 +- .../src/G4ENDFYieldDataContainer.cc | 78 +- .../particle_hp/src/G4FFGDebuggingMacros.cc | 11 +- .../src/G4FPYBiasedLightFragmentDist.cc | 146 +- .../src/G4FPYNormalFragmentDist.cc | 140 +- .../particle_hp/src/G4FPYSamplingOps.cc | 1047 +- .../src/G4FissionFragmentGenerator.cc | 1051 +- .../src/G4FissionProductYieldDist.cc | 2286 +- .../particle_hp/src/G4InterpolationManager.cc | 199 +- .../models/particle_hp/src/G4NRESP71M03.cc | 525 +- .../src/G4ParticleHP2AInelasticFS.cc | 79 +- .../src/G4ParticleHP2N2AInelasticFS.cc | 77 +- .../src/G4ParticleHP2NAInelasticFS.cc | 74 +- .../src/G4ParticleHP2NDInelasticFS.cc | 76 +- .../src/G4ParticleHP2NInelasticFS.cc | 77 +- .../src/G4ParticleHP2NPInelasticFS.cc | 77 +- .../src/G4ParticleHP2PInelasticFS.cc | 77 +- .../src/G4ParticleHP3AInelasticFS.cc | 76 +- .../src/G4ParticleHP3NAInelasticFS.cc | 76 +- .../src/G4ParticleHP3NInelasticFS.cc | 76 +- .../src/G4ParticleHP3NPInelasticFS.cc | 77 +- .../src/G4ParticleHP4NInelasticFS.cc | 76 +- .../src/G4ParticleHPAInelasticFS.cc | 70 +- .../particle_hp/src/G4ParticleHPAngular.cc | 371 +- .../src/G4ParticleHPArbitaryTab.cc | 112 +- .../src/G4ParticleHPBGGNucleonInelasticXS.cc | 31 +- .../particle_hp/src/G4ParticleHPCapture.cc | 290 +- .../src/G4ParticleHPCaptureData.cc | 329 +- .../particle_hp/src/G4ParticleHPCaptureFS.cc | 657 +- .../particle_hp/src/G4ParticleHPChannel.cc | 512 +- .../src/G4ParticleHPChannelList.cc | 345 +- .../src/G4ParticleHPContAngularPar.cc | 738 +- .../src/G4ParticleHPContEnergyAngular.cc | 82 +- .../src/G4ParticleHPD2AInelasticFS.cc | 76 +- .../src/G4ParticleHPDAInelasticFS.cc | 78 +- .../src/G4ParticleHPDInelasticFS.cc | 70 +- .../particle_hp/src/G4ParticleHPData.cc | 117 +- .../particle_hp/src/G4ParticleHPDeExGammas.cc | 4 +- .../src/G4ParticleHPDiscreteTwoBody.cc | 531 +- .../particle_hp/src/G4ParticleHPElastic.cc | 246 +- .../src/G4ParticleHPElasticData.cc | 310 +- .../particle_hp/src/G4ParticleHPElasticFS.cc | 423 +- .../src/G4ParticleHPElementData.cc | 308 +- .../src/G4ParticleHPEnAngCorrelation.cc | 242 +- .../src/G4ParticleHPFCFissionFS.cc | 27 +- .../src/G4ParticleHPFFFissionFS.cc | 320 +- .../src/G4ParticleHPFSFissionFS.cc | 206 +- .../src/G4ParticleHPFastLegendre.cc | 2 + .../src/G4ParticleHPFastLegendre_14.cc | 2 + .../src/G4ParticleHPFastLegendre_18.cc | 2 + .../src/G4ParticleHPFastLegendre_21.cc | 2 + .../src/G4ParticleHPFastLegendre_24.cc | 2 + .../src/G4ParticleHPFastLegendre_26.cc | 2 + .../src/G4ParticleHPFastLegendre_28.cc | 2 + .../src/G4ParticleHPFastLegendre_30.cc | 2 + .../particle_hp/src/G4ParticleHPField.cc | 149 +- .../particle_hp/src/G4ParticleHPFieldPoint.cc | 54 +- .../particle_hp/src/G4ParticleHPFinalState.cc | 590 +- .../particle_hp/src/G4ParticleHPFission.cc | 207 +- .../src/G4ParticleHPFissionBaseFS.cc | 189 +- .../src/G4ParticleHPFissionData.cc | 281 +- .../particle_hp/src/G4ParticleHPFissionFS.cc | 441 +- .../src/G4ParticleHPHe3InelasticFS.cc | 70 +- .../particle_hp/src/G4ParticleHPInelastic.cc | 460 +- .../src/G4ParticleHPInelasticBaseFS.cc | 42 +- .../src/G4ParticleHPInelasticCompFS.cc | 76 +- .../src/G4ParticleHPInelasticData.cc | 325 +- .../src/G4ParticleHPInterpolator.cc | 219 +- .../particle_hp/src/G4ParticleHPIsoData.cc | 268 +- .../particle_hp/src/G4ParticleHPIsotropic.cc | 125 +- .../src/G4ParticleHPJENDLHEData.cc | 490 +- .../src/G4ParticleHPJENDLHEElasticData.cc | 5 +- .../src/G4ParticleHPJENDLHEInelasticData.cc | 5 +- .../src/G4ParticleHPKallbachMannSyst.cc | 168 +- .../src/G4ParticleHPLCFissionFS.cc | 27 +- .../src/G4ParticleHPLabAngularEnergy.cc | 564 +- .../src/G4ParticleHPLegendreStore.cc | 352 +- .../particle_hp/src/G4ParticleHPList.cc | 110 +- .../src/G4ParticleHPMadlandNixSpectrum.cc | 260 +- .../particle_hp/src/G4ParticleHPManager.cc | 306 +- .../particle_hp/src/G4ParticleHPMessenger.cc | 578 +- .../src/G4ParticleHPN2AInelasticFS.cc | 77 +- .../src/G4ParticleHPN2PInelasticFS.cc | 76 +- .../src/G4ParticleHPN3AInelasticFS.cc | 76 +- .../src/G4ParticleHPNAInelasticFS.cc | 76 +- .../src/G4ParticleHPNBodyPhaseSpace.cc | 194 +- .../src/G4ParticleHPND2AInelasticFS.cc | 79 +- .../src/G4ParticleHPNDInelasticFS.cc | 77 +- .../src/G4ParticleHPNHe3InelasticFS.cc | 77 +- .../src/G4ParticleHPNInelasticFS.cc | 75 +- .../src/G4ParticleHPNPAInelasticFS.cc | 78 +- .../src/G4ParticleHPNPInelasticFS.cc | 74 +- .../src/G4ParticleHPNT2AInelasticFS.cc | 78 +- .../src/G4ParticleHPNTInelasticFS.cc | 76 +- .../src/G4ParticleHPNXInelasticFS.cc | 80 +- .../particle_hp/src/G4ParticleHPNames.cc | 594 +- .../src/G4ParticleHPPAInelasticFS.cc | 78 +- .../src/G4ParticleHPPDInelasticFS.cc | 78 +- .../src/G4ParticleHPPInelasticFS.cc | 71 +- .../src/G4ParticleHPPTInelasticFS.cc | 76 +- .../particle_hp/src/G4ParticleHPPartial.cc | 235 +- .../particle_hp/src/G4ParticleHPPhotonDist.cc | 818 +- .../particle_hp/src/G4ParticleHPProduct.cc | 115 +- .../src/G4ParticleHPReactionWhiteBoard.cc | 91 +- .../src/G4ParticleHPSCFissionFS.cc | 27 +- .../src/G4ParticleHPT2AInelasticFS.cc | 76 +- .../src/G4ParticleHPTCFissionFS.cc | 27 +- .../src/G4ParticleHPTInelasticFS.cc | 70 +- .../src/G4ParticleHPThermalScattering.cc | 2107 +- .../src/G4ParticleHPThermalScatteringData.cc | 719 +- .../src/G4ParticleHPThermalScatteringNames.cc | 291 +- .../src/G4ParticleHPThreadLocalManager.cc | 57 +- .../particle_hp/src/G4ParticleHPVector.cc | 928 +- .../src/G4ParticleHPWattSpectrum.cc | 44 +- .../particle_hp/src/G4ShiftedGaussian.cc | 124 +- .../src/G4WendtFissionFragmentGenerator.cc | 251 +- .../hadronic/models/parton_string/GNUmakefile | 23 - .../parton_string/diffraction/GNUmakefile | 39 - .../parton_string/hadronization/GNUmakefile | 36 - .../parton_string/management/GNUmakefile | 34 - .../models/parton_string/qgsm/GNUmakefile | 36 - .../models/parton_string/qgsm/History | 7 +- .../qgsm/include/G4BaryonSplitter.hh | 4 +- .../qgsm/include/G4MesonSplitter.hh | 4 +- .../qgsm/src/G4BaryonSplitter.cc | 19 +- .../parton_string/qgsm/src/G4MesonSplitter.cc | 15 +- .../qgsm/src/G4QGSMSplitableHadron.cc | 4 +- .../models/pre_equilibrium/GNUmakefile | 18 - .../pre_equilibrium/exciton_model/GNUmakefile | 46 - .../processes/hadronic/models/qmd/GNUmakefile | 50 - source/processes/hadronic/models/qmd/History | 8 + .../models/qmd/include/G4QMDMeanField.hh | 44 +- .../models/qmd/src/G4QMDGroundStateNucleus.cc | 5 +- .../hadronic/models/qmd/src/G4QMDMeanField.cc | 605 +- .../hadronic/models/quasi_elastic/GNUmakefile | 32 - .../models/radioactive_decay/GNUmakefile | 40 - .../hadronic/models/radioactive_decay/History | 16 + .../include/G4BetaDecayCorrections.hh | 3 +- .../include/G4BetaMinusDecay.hh | 4 +- .../include/G4BetaPlusDecay.hh | 4 +- .../include/G4BetaSpectrumSampler.hh | 67 + .../include/G4RadioactiveDecay.hh | 10 +- .../models/radioactive_decay/sources.cmake | 2 + .../src/G4BetaDecayCorrections.cc | 15 +- .../radioactive_decay/src/G4BetaMinusDecay.cc | 30 +- .../radioactive_decay/src/G4BetaPlusDecay.cc | 37 +- .../src/G4BetaSpectrumSampler.cc | 98 + .../models/theo_high_energy/GNUmakefile | 40 - .../processes/hadronic/processes/GNUmakefile | 39 - source/processes/hadronic/processes/History | 38 +- .../include/G4ElNeutrinoNucleusProcess.hh | 11 +- .../include/G4MuNeutrinoNucleusProcess.hh | 9 +- .../include/G4NeutrinoElectronProcess.hh | 17 +- .../include/G4NeutronGeneralProcess.hh | 10 +- .../processes/include/G4NuVacOscProcess.hh | 103 + .../include/G4TauNeutrinoNucleusProcess.hh | 25 +- .../hadronic/processes/sources.cmake | 2 + .../src/G4ElNeutrinoNucleusProcess.cc | 33 +- .../processes/src/G4HadronElasticProcess.cc | 1 + .../src/G4MuNeutrinoNucleusProcess.cc | 27 +- .../src/G4NeutrinoElectronProcess.cc | 29 +- .../processes/src/G4NeutronGeneralProcess.cc | 65 +- .../processes/src/G4NuVacOscProcess.cc | 350 + .../src/G4TauNeutrinoNucleusProcess.cc | 37 +- .../processes/hadronic/stopping/GNUmakefile | 49 - source/processes/hadronic/stopping/History | 4 + .../include/G4HadronicAbsorptionINCLXX.hh | 67 + .../processes/hadronic/stopping/sources.cmake | 3 + .../src/G4HadronicAbsorptionINCLXX.cc | 81 + source/processes/hadronic/util/GNUmakefile | 33 - source/processes/hadronic/util/History | 43 +- .../util/include/G4HadronicParameters.hh | 136 +- .../hadronic/util/include/G4Nucleus.hh | 3 + .../hadronic/util/src/G4HadronicParameters.cc | 39 + .../processes/hadronic/util/src/G4Nucleus.cc | 122 +- source/processes/management/GNUmakefile | 23 - source/processes/optical/GNUmakefile | 34 - source/processes/parameterisation/GNUmakefile | 28 - source/processes/parameterisation/History | 2 +- source/processes/scoring/GNUmakefile | 34 - source/processes/scoring/History | 7 + .../scoring/include/G4ParallelWorldProcess.hh | 220 +- .../include/G4ParallelWorldProcessStore.hh | 45 +- .../include/G4ParallelWorldScoringProcess.hh | 196 +- .../include/G4ScoreSplittingProcess.hh | 181 +- .../include/{ => private}/G4EnergySplitter.hh | 58 +- .../{ => private}/G4EnergySplitter.icc | 34 +- source/processes/scoring/sources.cmake | 7 +- .../processes/scoring/src/G4EnergySplitter.cc | 379 +- .../scoring/src/G4ParallelWorldProcess.cc | 357 +- .../src/G4ParallelWorldProcessStore.cc | 64 +- .../src/G4ParallelWorldScoringProcess.cc | 388 +- .../scoring/src/G4ScoreSplittingProcess.cc | 401 +- source/processes/solidstate/GNUmakefile | 19 - .../solidstate/channeling/GNUmakefile | 28 - .../processes/solidstate/phonon/GNUmakefile | 24 - source/processes/transportation/GNUmakefile | 36 - source/processes/transportation/History | 9 +- .../include/G4TransportationParameters.hh | 37 +- .../src/G4TransportationParameters.cc | 87 +- source/readout/GNUmakefile | 44 - source/readout/History | 3 + source/run/GNUmakefile | 71 - source/run/History | 15 +- .../G4AdjointPrimaryGeneratorAction.hh | 56 +- source/run/include/G4AdjointSimManager.hh | 63 +- source/run/include/G4ExceptionHandler.hh | 19 +- source/run/include/G4MSSteppingAction.hh | 10 +- source/run/include/G4MTRunManager.hh | 251 +- source/run/include/G4MTRunManagerKernel.hh | 23 +- source/run/include/G4MaterialScanner.hh | 15 +- source/run/include/G4MultiRunAction.hh | 19 +- .../run/include/G4PhysicsBuilderInterface.hh | 15 +- source/run/include/G4PhysicsListHelper.hh | 44 +- .../include/G4PhysicsListOrderingParameter.hh | 12 +- source/run/include/G4PhysicsListWorkspace.hh | 25 +- source/run/include/G4RNGHelper.hh | 35 +- source/run/include/G4Run.hh | 79 +- source/run/include/G4RunManager.hh | 477 +- source/run/include/G4RunManagerFactory.hh | 83 +- source/run/include/G4RunManagerKernel.hh | 109 +- source/run/include/G4TaskRunManager.hh | 331 +- source/run/include/G4TaskRunManagerKernel.hh | 54 +- source/run/include/G4UserRunAction.hh | 10 +- .../run/include/G4UserTaskInitialization.hh | 44 +- .../include/G4UserTaskThreadInitialization.hh | 56 +- .../run/include/G4UserWorkerInitialization.hh | 43 +- .../G4UserWorkerThreadInitialization.hh | 45 +- source/run/include/G4VModularPhysicsList.hh | 61 +- source/run/include/G4VPersistencyManager.hh | 26 +- source/run/include/G4VPhysicsConstructor.hh | 62 +- source/run/include/G4VUPLSplitter.hh | 89 +- .../include/G4VUserActionInitialization.hh | 38 +- .../include/G4VUserDetectorConstruction.hh | 21 +- source/run/include/G4VUserParallelWorld.hh | 14 +- source/run/include/G4VUserPhysicsList.hh | 217 +- .../include/G4VUserPrimaryGeneratorAction.hh | 3 +- source/run/include/G4WorkerRunManager.hh | 80 +- .../run/include/G4WorkerRunManagerKernel.hh | 8 +- source/run/include/G4WorkerTaskRunManager.hh | 62 +- .../include/G4WorkerTaskRunManagerKernel.hh | 12 +- source/run/include/G4WorkerThread.hh | 10 +- .../{ => private}/G4AdjointSimMessenger.hh | 6 +- .../run/include/private/G4CopyRandomState.hh | 58 + .../{ => private}/G4MatScanMessenger.hh | 8 +- .../include/{ => private}/G4RunMessenger.hh | 13 +- .../G4UserPhysicsListMessenger.hh | 19 +- source/run/sources.cmake | 15 +- .../src/G4AdjointPrimaryGeneratorAction.cc | 161 +- source/run/src/G4AdjointSimManager.cc | 303 +- source/run/src/G4AdjointSimMessenger.cc | 165 +- source/run/src/G4ExceptionHandler.cc | 174 +- source/run/src/G4MSSteppingAction.cc | 23 +- source/run/src/G4MTRunManager.cc | 315 +- source/run/src/G4MTRunManagerKernel.cc | 104 +- source/run/src/G4MatScanMessenger.cc | 116 +- source/run/src/G4MaterialScanner.cc | 106 +- source/run/src/G4MultiRunAction.cc | 23 +- source/run/src/G4PhysicsListHelper.cc | 1255 +- source/run/src/G4PhysicsListWorkspace.cc | 29 +- source/run/src/G4RNGHelper.cc | 31 +- source/run/src/G4Run.cc | 19 +- source/run/src/G4RunManager.cc | 720 +- source/run/src/G4RunManagerFactory.cc | 137 +- source/run/src/G4RunManagerKernel.cc | 842 +- source/run/src/G4RunMessenger.cc | 455 +- source/run/src/G4TaskRunManager.cc | 401 +- source/run/src/G4TaskRunManagerKernel.cc | 120 +- source/run/src/G4UserPhysicsListMessenger.cc | 217 +- source/run/src/G4UserRunAction.cc | 44 +- source/run/src/G4UserTaskInitialization.cc | 36 - .../run/src/G4UserTaskThreadInitialization.cc | 53 +- .../src/G4UserWorkerThreadInitialization.cc | 86 +- source/run/src/G4VModularPhysicsList.cc | 266 +- source/run/src/G4VPersistencyManager.cc | 3 +- source/run/src/G4VPhysicsConstructor.cc | 32 +- source/run/src/G4VUserActionInitialization.cc | 35 +- source/run/src/G4VUserDetectorConstruction.cc | 172 +- source/run/src/G4VUserParallelWorld.cc | 43 +- source/run/src/G4VUserPhysicsList.cc | 582 +- .../run/src/G4VUserPrimaryGeneratorAction.cc | 23 +- source/run/src/G4WorkerRunManager.cc | 470 +- source/run/src/G4WorkerRunManagerKernel.cc | 63 +- source/run/src/G4WorkerTaskRunManager.cc | 288 +- .../run/src/G4WorkerTaskRunManagerKernel.cc | 73 +- source/run/src/G4WorkerThread.cc | 94 +- source/track/GNUmakefile | 33 - source/track/History | 3 + source/tracking/GNUmakefile | 40 - source/tracking/History | 6 + .../include/G4AdjointCrossSurfChecker.hh | 143 +- .../include/G4AdjointSteppingAction.hh | 102 +- .../include/G4AdjointTrackingAction.hh | 127 +- .../tracking/include/G4MultiSteppingAction.hh | 17 +- .../tracking/include/G4MultiTrackingAction.hh | 23 +- source/tracking/include/G4RichTrajectory.hh | 100 +- .../tracking/include/G4RichTrajectoryPoint.hh | 113 +- source/tracking/include/G4SmoothTrajectory.hh | 148 +- .../include/G4SmoothTrajectoryPoint.hh | 98 +- source/tracking/include/G4SteppingManager.hh | 842 +- source/tracking/include/G4SteppingVerbose.hh | 57 +- .../include/G4SteppingVerboseWithUnits.hh | 53 +- source/tracking/include/G4TrackingManager.hh | 177 +- .../tracking/include/G4TrackingMessenger.hh | 31 +- source/tracking/include/G4Trajectory.hh | 135 +- source/tracking/include/G4TrajectoryPoint.hh | 66 +- .../tracking/include/G4UserSteppingAction.hh | 22 +- .../tracking/include/G4UserTrackingAction.hh | 26 +- source/tracking/include/G4VSteppingVerbose.hh | 264 +- source/tracking/include/G4VTrackingManager.hh | 38 +- source/tracking/include/G4VTrajectory.hh | 122 +- source/tracking/include/G4VTrajectoryPoint.hh | 72 +- source/tracking/include/trkgdefs.hh | 18 +- source/tracking/sources.cmake | 1 - .../tracking/src/G4AdjointCrossSurfChecker.cc | 358 +- .../tracking/src/G4AdjointSteppingAction.cc | 56 +- .../tracking/src/G4AdjointTrackingAction.cc | 62 +- source/tracking/src/G4MultiSteppingAction.cc | 11 +- source/tracking/src/G4MultiTrackingAction.cc | 16 +- source/tracking/src/G4RichTrajectory.cc | 184 +- source/tracking/src/G4RichTrajectoryPoint.cc | 210 +- source/tracking/src/G4SmoothTrajectory.cc | 114 +- .../tracking/src/G4SmoothTrajectoryPoint.cc | 72 +- source/tracking/src/G4SteppingManager.cc | 616 +- source/tracking/src/G4SteppingVerbose.cc | 1156 +- .../src/G4SteppingVerboseWithUnits.cc | 975 +- source/tracking/src/G4TrackingManager.cc | 74 +- source/tracking/src/G4TrackingMessenger.cc | 86 +- source/tracking/src/G4Trajectory.cc | 103 +- source/tracking/src/G4TrajectoryPoint.cc | 40 +- source/tracking/src/G4UserSteppingAction.cc | 18 +- source/tracking/src/G4UserTrackingAction.cc | 16 +- source/tracking/src/G4VSteppingVerbose.cc | 52 +- source/tracking/src/G4VTrajectory.cc | 64 +- .../visualization/FukuiRenderer/GNUmakefile | 38 - source/visualization/FukuiRenderer/History | 3 + .../{ => private}/G4DAWNFILESceneHandler.hh | 0 .../include/{ => private}/G4DAWNFILEViewer.hh | 0 .../include/{ => private}/G4FRConst.hh | 0 .../include/{ => private}/G4FRSceneFunc.icc | 0 .../include/{ => private}/G4FRofstream.hh | 0 .../{ => private}/G4VisFeaturesOfDAWNFILE.hh | 0 .../visualization/FukuiRenderer/sources.cmake | 9 +- source/visualization/GNUmakefile | 73 - source/visualization/HepRep/GNUmakefile | 43 - source/visualization/HepRep/History | 3 + .../{ => private}/G4HepRepFileSceneHandler.hh | 0 .../{ => private}/G4HepRepFileViewer.hh | 0 .../{ => private}/G4HepRepMessenger.hh | 0 source/visualization/HepRep/sources.cmake | 9 +- source/visualization/History | 3 + source/visualization/OpenGL/GNUmakefile | 134 - source/visualization/OpenGL/History | 64 + .../visualization/OpenGL/include/G4OpenGL.hh | 8 - .../include/G4OpenGLImmediateQtViewer.hh | 4 +- .../OpenGL/include/G4OpenGLQtViewer.hh | 25 +- .../OpenGL/include/G4OpenGLSceneHandler.hh | 38 - .../OpenGL/include/G4OpenGLStoredQtViewer.hh | 3 +- .../OpenGL/include/G4OpenGLVboDrawer.hh | 161 - .../OpenGL/include/G4OpenGLViewer.hh | 46 - source/visualization/OpenGL/sources.cmake | 41 +- .../OpenGL/src/G4OpenGLImmediateQtViewer.cc | 55 +- .../src/G4OpenGLImmediateSceneHandler.cc | 2 - .../OpenGL/src/G4OpenGLQtExportDialog.cc | 10 +- .../OpenGL/src/G4OpenGLQtMovieDialog.cc | 10 +- .../OpenGL/src/G4OpenGLQtViewer.cc | 213 +- .../OpenGL/src/G4OpenGLSceneHandler.cc | 446 +- .../OpenGL/src/G4OpenGLStoredQtViewer.cc | 14 +- .../OpenGL/src/G4OpenGLVboDrawer.cc | 254 - .../OpenGL/src/G4OpenGLViewer.cc | 84 - source/visualization/OpenInventor/GNUmakefile | 91 - source/visualization/OpenInventor/History | 32 + .../include/G4OpenInventorQtExaminerViewer.hh | 2 + .../OpenInventor/include/ui_OIQtListsDialog.h | 26 +- .../visualization/OpenInventor/sources.cmake | 18 +- source/visualization/Qt3D/GNUmakefile | 37 - source/visualization/Qt3D/History | 13 + .../include/{ => private}/G4Qt3DQEntity.hh | 0 .../{ => private}/G4Qt3DSceneHandler.hh | 0 .../Qt3D/include/{ => private}/G4Qt3DUtils.hh | 0 .../include/{ => private}/G4Qt3DViewer.hh | 0 source/visualization/Qt3D/sources.cmake | 27 +- .../Qt3D/src/G4Qt3DSceneHandler.cc | 90 +- source/visualization/Qt3D/src/G4Qt3DViewer.cc | 11 +- source/visualization/RayTracer/GNUmakefile | 82 - source/visualization/RayTracer/History | 7 + .../include/{ => private}/G4RTJpeg.hh | 0 .../include/{ => private}/G4RTJpegCoder.hh | 0 .../{ => private}/G4RTJpegCoderTables.hh | 0 .../include/{ => private}/G4RTJpegMaker.hh | 0 .../include/{ => private}/G4RTMessenger.hh | 0 .../include/{ => private}/G4RTOutBitStream.hh | 0 .../G4RTPrimaryGeneratorAction.hh | 0 .../include/{ => private}/G4RTRun.hh | 0 .../include/{ => private}/G4RTRunAction.hh | 0 .../{ => private}/G4RTSimpleScanner.hh | 0 .../{ => private}/G4RTSteppingAction.hh | 0 .../{ => private}/G4RTTrackingAction.hh | 0 .../{ => private}/G4RTWorkerInitialization.hh | 0 .../include/{ => private}/G4RTXScanner.hh | 0 .../{ => private}/G4RayTracerFeatures.hh | 0 .../{ => private}/G4RayTracerSceneHandler.hh | 0 .../{ => private}/G4RayTracerViewer.hh | 0 .../{ => private}/G4RayTracerXViewer.hh | 0 .../include/{ => private}/G4RayTrajectory.hh | 0 .../{ => private}/G4RayTrajectoryPoint.hh | 0 .../include/{ => private}/G4TheMTRayTracer.hh | 0 .../include/{ => private}/G4TheRayTracer.hh | 0 .../{ => private}/G4VFigureFileMaker.hh | 0 .../include/{ => private}/G4VRTScanner.hh | 0 source/visualization/RayTracer/sources.cmake | 34 +- source/visualization/ToolsSG/GNUmakefile | 55 - source/visualization/ToolsSG/History | 45 + .../ToolsSG/include/G4ToolsSGOffscreen.hh | 1 - .../ToolsSG/include/G4ToolsSGQtZB.hh | 53 + .../ToolsSG/include/G4ToolsSGWindowsGLES.hh | 1 - .../ToolsSG/include/G4ToolsSGWindowsZB.hh | 52 + .../ToolsSG/include/G4ToolsSGX11GLES.hh | 1 - .../ToolsSG/include/G4ToolsSGX11ZB.hh | 52 + .../ToolsSG/include/G4ToolsSGXtGLES.hh | 1 - .../ToolsSG/include/G4ToolsSGXtZB.hh | 52 + .../include/{ => private}/G4ToolsSGNode.hh | 0 .../{ => private}/G4ToolsSGOffscreenViewer.hh | 0 .../{ => private}/G4ToolsSGQtViewer.hh | 15 +- .../include/private/G4ToolsSGQtZBViewer.hh | 135 + .../{ => private}/G4ToolsSGSceneHandler.hh | 0 .../include/{ => private}/G4ToolsSGViewer.hh | 0 source/visualization/ToolsSG/sources.cmake | 107 +- .../ToolsSG/src/G4ToolsSGOffscreen.cc | 7 - .../ToolsSG/src/G4ToolsSGQtGLES.cc | 41 +- .../ToolsSG/src/G4ToolsSGQtZB.cc | 115 + .../ToolsSG/src/G4ToolsSGQtZBViewer.cc} | 7 +- .../ToolsSG/src/G4ToolsSGWindowsGLES.cc | 28 - .../ToolsSG/src/G4ToolsSGWindowsZB.cc | 87 + .../ToolsSG/src/G4ToolsSGX11GLES.cc | 28 - .../ToolsSG/src/G4ToolsSGX11ZB.cc | 87 + .../ToolsSG/src/G4ToolsSGXtGLES.cc | 44 +- .../ToolsSG/src/G4ToolsSGXtZB.cc | 103 + source/visualization/Tree/GNUmakefile | 44 - source/visualization/Tree/History | 3 + .../{ => private}/G4ASCIITreeMessenger.hh | 0 .../{ => private}/G4ASCIITreeSceneHandler.hh | 0 .../{ => private}/G4ASCIITreeViewer.hh | 0 .../{ => private}/G4VTreeSceneHandler.hh | 0 .../{ => private}/G4VTreeSceneHandler.icc | 0 .../include/{ => private}/G4VTreeViewer.hh | 0 source/visualization/Tree/sources.cmake | 7 +- source/visualization/VRML/GNUmakefile | 40 - source/visualization/VRML/History | 3 + .../{ => private}/G4VRML2FileSceneHandler.hh | 0 .../{ => private}/G4VRML2FileViewer.hh | 0 source/visualization/VRML/sources.cmake | 5 +- source/visualization/Vtk/History | 37 + source/visualization/Vtk/include/G4Vtk.hh | 15 +- source/visualization/Vtk/include/G4VtkQt.hh | 16 +- .../Vtk/include/G4VtkSceneHandler.hh | 171 - .../visualization/Vtk/include/G4VtkViewer.hh | 194 - .../Vtk/include/private/G4VVtkPipeline.hh | 192 + .../private/G4VtkClipClosedSurfacePipeline.hh | 77 + .../include/private/G4VtkClipOpenPipeline.hh | 76 + .../private/G4VtkClipperClosedPipeline.hh | 50 + .../include/private/G4VtkCutterPipeline.hh | 74 + .../Vtk/include/private/G4VtkImagePipeline.hh | 83 + .../include/private/G4VtkInteractorStyle.hh | 62 + .../Vtk/include/private/G4VtkMessenger.hh | 70 + .../private/G4VtkPolydataCubePipeline.hh} | 17 +- .../G4VtkPolydataInstanceAppendPipeline.hh | 58 + .../G4VtkPolydataInstanceBakePipeline.hh | 67 + .../private/G4VtkPolydataInstancePipeline.hh | 58 + .../G4VtkPolydataInstanceTensorPipeline.hh | 50 + .../include/private/G4VtkPolydataPipeline.hh | 95 + .../private/G4VtkPolydataPolygonPipeline.hh | 48 + .../G4VtkPolydataPolyline2DPipeline.hh | 61 + .../private/G4VtkPolydataPolylinePipeline.hh | 50 + .../private/G4VtkPolydataSpherePipeline.hh | 50 + .../include/private/G4VtkQtSceneHandler.hh | 57 + .../Vtk/include/private/G4VtkQtViewer.hh | 115 + .../Vtk/include/private/G4VtkSceneHandler.hh | 125 + .../Vtk/include/private/G4VtkStore.hh | 189 + .../private/G4VtkStructuredGridPipeline.hh | 58 + .../include/private/G4VtkText2DPipeline.hh | 63 + .../Vtk/include/private/G4VtkTextPipeline.hh | 63 + .../private/G4VtkUnstructuredGridPipeline.hh | 123 + .../Vtk/include/private/G4VtkUtility.hh | 49 + .../Vtk/include/private/G4VtkViewer.hh | 287 + .../Vtk/include/private/G4VtkVisContext.hh | 81 + .../Vtk/include/private/vtkTensorGlyphColor.h | 260 + .../Vtk/include/vtkTensorGlyphColor.h | 261 - source/visualization/Vtk/sources.cmake | 58 +- source/visualization/Vtk/src/G4Vtk.cc | 43 +- .../Vtk/src/G4VtkClipClosedSurfacePipeline.cc | 143 + .../Vtk/src/G4VtkClipOpenPipeline.cc | 133 + .../Vtk/src/G4VtkClipperClosedPipeline.cc | 106 + .../Vtk/src/G4VtkCutterPipeline.cc | 118 + .../Vtk/src/G4VtkImagePipeline.cc | 140 + .../Vtk/src/G4VtkInteractorStyle.cc | 28 + .../visualization/Vtk/src/G4VtkMessenger.cc | 279 +- .../G4VtkPolydataInstanceAppendPipeline.cc | 146 + .../src/G4VtkPolydataInstanceBakePipeline.cc | 138 + .../Vtk/src/G4VtkPolydataInstancePipeline.cc | 73 + .../G4VtkPolydataInstanceTensorPipeline.cc | 105 + .../Vtk/src/G4VtkPolydataPipeline.cc | 225 + .../Vtk/src/G4VtkPolydataPolygonPipeline.cc | 79 + .../src/G4VtkPolydataPolyline2DPipeline.cc | 112 + .../Vtk/src/G4VtkPolydataPolylinePipeline.cc | 62 + .../Vtk/src/G4VtkPolydataSpherePipeline.cc | 77 + source/visualization/Vtk/src/G4VtkQt.cc | 58 +- .../Vtk/src/G4VtkQtSceneHandler.cc | 72 +- source/visualization/Vtk/src/G4VtkQtViewer.cc | 253 +- .../Vtk/src/G4VtkSceneHandler.cc | 942 +- source/visualization/Vtk/src/G4VtkStore.cc | 769 + .../Vtk/src/G4VtkText2DPipeline.cc | 117 + .../Vtk/src/G4VtkTextPipeline.cc | 105 + .../Vtk/src/G4VtkUnstructuredGridPipeline.cc | 200 + source/visualization/Vtk/src/G4VtkUtility.cc | 81 + source/visualization/Vtk/src/G4VtkViewer.cc | 599 +- .../Vtk/src/vtkTensorGlyphColor.cxx | 368 +- source/visualization/gMocren/GNUmakefile | 58 - source/visualization/gMocren/History | 3 + .../G4GMocrenFileCTtoDensityMap.hh | 0 .../G4GMocrenFileSceneHandler.hh | 0 .../{ => private}/G4GMocrenFileViewer.hh | 0 .../include/{ => private}/G4GMocrenIO.hh | 0 .../{ => private}/G4GMocrenMessenger.hh | 0 .../{ => private}/G4GMocrenTouchable.hh | 0 source/visualization/gMocren/sources.cmake | 9 +- source/visualization/management/GNUmakefile | 51 - source/visualization/management/History | 188 + .../management/include/G4VSceneHandler.hh | 12 +- .../management/include/G4VUserVisAction.hh | 35 +- .../management/include/G4VViewer.hh | 59 + .../management/include/G4VVisCommand.hh | 3 + .../management/include/G4ViewParameters.hh | 3 +- .../include/G4VisCommandsTouchable.hh | 1 + .../management/include/G4VisExecutive.icc | 49 + source/visualization/management/sources.cmake | 3 +- .../management/src/G4VSceneHandler.cc | 287 +- .../visualization/management/src/G4VViewer.cc | 219 +- .../management/src/G4VVisCommand.cc | 17 +- .../management/src/G4ViewParameters.cc | 4 +- .../src/G4VisCommandsSceneHandler.cc | 6 +- .../management/src/G4VisCommandsTouchable.cc | 57 +- .../src/G4VisCommandsTouchableSet.cc | 14 + .../management/src/G4VisCommandsViewer.cc | 9 +- .../management/src/G4VisCommandsViewerSet.cc | 13 +- source/visualization/modeling/GNUmakefile | 45 - source/visualization/modeling/History | 31 +- .../modeling/include/G4CallbackModel.hh | 6 +- .../modeling/include/G4ModelingParameters.hh | 8 + .../modeling/include/G4ModelingParameters.icc | 8 + .../modeling/include/G4PhysicalVolumeModel.hh | 7 +- .../modeling/include/G4PseudoScene.hh | 13 +- .../modeling/include/G4VModel.hh | 4 - .../modeling/src/G4ModelingParameters.cc | 7 + .../modeling/src/G4PhysicalVolumeModel.cc | 140 +- 3780 files changed, 205938 insertions(+), 135910 deletions(-) create mode 100644 ReleaseNotes/Beta4.11.2-1.txt create mode 100644 ReleaseNotes/Patch.11.0-4.txt create mode 100644 cmake/Modules/FindFLUKAInterface.cmake create mode 100644 examples/advanced/ICRP110_HumanPhantoms/ICRP110standalone.cc create mode 100644 examples/advanced/ICRP110_HumanPhantoms/include/ICRP110StandaloneVisAction.hh create mode 100644 examples/advanced/ICRP110_HumanPhantoms/src/ICRP110StandaloneVisAction.cc create mode 100644 examples/advanced/ICRP110_HumanPhantoms/standalone.mac create mode 100644 examples/advanced/ICRP145_HumanPhantoms/ICRP145standalone.cc create mode 100644 examples/advanced/ICRP145_HumanPhantoms/include/ICRP145StandaloneVisAction.hh create mode 100644 examples/advanced/ICRP145_HumanPhantoms/src/ICRP145StandaloneVisAction.cc create mode 100644 examples/advanced/ICRP145_HumanPhantoms/standalone.mac mode change 100755 => 100644 examples/advanced/nanobeam/OM50.grid create mode 100644 examples/advanced/stim_pixe_tomography/CMakeLists.txt create mode 100644 examples/advanced/stim_pixe_tomography/GPSPointLoop.C create mode 100644 examples/advanced/stim_pixe_tomography/History create mode 100644 examples/advanced/stim_pixe_tomography/README create mode 100644 examples/advanced/stim_pixe_tomography/README.md create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/BinToStd_GammaAtCreation.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/BinToStd_GammaAtExit.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/BinToStd_ProtonAtExit.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/BinToStd_gamma_position.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/BinToStd_proton_position.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/Check_PixeEventFile.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_GammaAtCreation.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_GammaAtCreation_fabricate.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_GammaAtExit.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_GammaAtExit_fabricate.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_ProtonAtExit.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/Extract_Projection.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/Extract_Slice.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/LocateInterruption_GammaAtExit.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/LocateInterruption_ProtonAtExit.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/Spectrum_gamma.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/Spectrum_proton.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/TomoSpectrum.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/TomoSpectrum_HIST.C create mode 100644 examples/advanced/stim_pixe_tomography/Scripts/TomoSpectrum_HIST_proton.C create mode 100755 examples/advanced/stim_pixe_tomography/Scripts/generate_voxelized_sphere_phantom.py create mode 100755 examples/advanced/stim_pixe_tomography/Scripts/generate_voxelized_worm_phantom.py create mode 100644 examples/advanced/stim_pixe_tomography/include/ActionInitialization.hh create mode 100644 examples/advanced/stim_pixe_tomography/include/DetectorConstruction.hh create mode 100644 examples/advanced/stim_pixe_tomography/include/DetectorMessenger.hh create mode 100644 examples/advanced/stim_pixe_tomography/include/PhysListEmStandard.hh create mode 100644 examples/advanced/stim_pixe_tomography/include/PhysicsList.hh create mode 100644 examples/advanced/stim_pixe_tomography/include/PhysicsListMessenger.hh create mode 100644 examples/advanced/stim_pixe_tomography/include/PrimaryGeneratorAction.hh create mode 100644 examples/advanced/stim_pixe_tomography/include/Run.hh create mode 100644 examples/advanced/stim_pixe_tomography/include/RunAction.hh rename source/processes/electromagnetic/dna/utils/include/G4DNACPA100WaterIonisationStructure.hh => examples/advanced/stim_pixe_tomography/include/RunActionMessenger.hh (62%) create mode 100644 examples/advanced/stim_pixe_tomography/include/StackingAction.hh create mode 100644 examples/advanced/stim_pixe_tomography/include/TrackingAction.hh create mode 100644 examples/advanced/stim_pixe_tomography/init_vis.mac create mode 100644 examples/advanced/stim_pixe_tomography/pixe3d.mac create mode 100644 examples/advanced/stim_pixe_tomography/pixe3d_initial.mac create mode 100644 examples/advanced/stim_pixe_tomography/pixe3d_stim.mac create mode 100644 examples/advanced/stim_pixe_tomography/src/ActionInitialization.cc create mode 100644 examples/advanced/stim_pixe_tomography/src/DetectorConstruction.cc create mode 100644 examples/advanced/stim_pixe_tomography/src/DetectorMessenger.cc create mode 100644 examples/advanced/stim_pixe_tomography/src/PhysListEmStandard.cc create mode 100644 examples/advanced/stim_pixe_tomography/src/PhysicsList.cc create mode 100644 examples/advanced/stim_pixe_tomography/src/PhysicsListMessenger.cc rename source/materials/src/G4AtomicBond.cc => examples/advanced/stim_pixe_tomography/src/PrimaryGeneratorAction.cc (80%) create mode 100644 examples/advanced/stim_pixe_tomography/src/Run.cc create mode 100644 examples/advanced/stim_pixe_tomography/src/RunAction.cc create mode 100644 examples/advanced/stim_pixe_tomography/src/RunActionMessenger.cc create mode 100644 examples/advanced/stim_pixe_tomography/src/StackingAction.cc create mode 100644 examples/advanced/stim_pixe_tomography/src/TrackingAction.cc create mode 100644 examples/advanced/stim_pixe_tomography/stim_pixe_tomography.cc create mode 100644 examples/advanced/stim_pixe_tomography/stim_pixe_tomography.out create mode 100644 examples/advanced/stim_pixe_tomography/test.in create mode 100644 examples/advanced/stim_pixe_tomography/vis.mac create mode 100644 examples/advanced/xray_SiliconPoreOptics/CMakeLists.txt create mode 100644 examples/advanced/xray_SiliconPoreOptics/GNUmakefile create mode 100644 examples/advanced/xray_SiliconPoreOptics/History create mode 100644 examples/advanced/xray_SiliconPoreOptics/README.txt create mode 100644 examples/advanced/xray_SiliconPoreOptics/SiliconPoreOptics.out create mode 100644 examples/advanced/xray_SiliconPoreOptics/Xray_SiliconPoreOptics.cc create mode 100644 examples/advanced/xray_SiliconPoreOptics/Xray_SiliconPoreOptics.out create mode 100644 examples/advanced/xray_SiliconPoreOptics/analysis/README.txt create mode 100644 examples/advanced/xray_SiliconPoreOptics/analysis/analysis.C create mode 100644 examples/advanced/xray_SiliconPoreOptics/include/G4EmStandardPhysics_SpacePhysics.hh create mode 100644 examples/advanced/xray_SiliconPoreOptics/include/XraySPOActionInitialization.hh create mode 100644 examples/advanced/xray_SiliconPoreOptics/include/XraySPODetectorConstruction.hh create mode 100644 examples/advanced/xray_SiliconPoreOptics/include/XraySPODetectorMessenger.hh create mode 100644 examples/advanced/xray_SiliconPoreOptics/include/XraySPOHistoManager.hh create mode 100644 examples/advanced/xray_SiliconPoreOptics/include/XraySPOPhysicsList.hh create mode 100644 examples/advanced/xray_SiliconPoreOptics/include/XraySPOPhysicsListMessenger.hh create mode 100644 examples/advanced/xray_SiliconPoreOptics/include/XraySPOPrimaryGeneratorAction.hh create mode 100644 examples/advanced/xray_SiliconPoreOptics/include/XraySPORunAction.hh create mode 100644 examples/advanced/xray_SiliconPoreOptics/include/XraySPOSteppingAction.hh create mode 100644 examples/advanced/xray_SiliconPoreOptics/init_vis.mac create mode 100644 examples/advanced/xray_SiliconPoreOptics/pores.gdml create mode 100644 examples/advanced/xray_SiliconPoreOptics/run01.mac create mode 100644 examples/advanced/xray_SiliconPoreOptics/src/G4EmStandardPhysics_SpacePhysics.cc create mode 100644 examples/advanced/xray_SiliconPoreOptics/src/XraySPOActionInitialization.cc create mode 100644 examples/advanced/xray_SiliconPoreOptics/src/XraySPODetectorConstruction.cc create mode 100644 examples/advanced/xray_SiliconPoreOptics/src/XraySPODetectorMessenger.cc create mode 100644 examples/advanced/xray_SiliconPoreOptics/src/XraySPOHistoManager.cc create mode 100644 examples/advanced/xray_SiliconPoreOptics/src/XraySPOPhysicsList.cc create mode 100644 examples/advanced/xray_SiliconPoreOptics/src/XraySPOPhysicsListMessenger.cc create mode 100644 examples/advanced/xray_SiliconPoreOptics/src/XraySPOPrimaryGeneratorAction.cc rename source/processes/electromagnetic/dna/utils/src/G4DNACPA100WaterExcitationStructure.cc => examples/advanced/xray_SiliconPoreOptics/src/XraySPORunAction.cc (60%) create mode 100644 examples/advanced/xray_SiliconPoreOptics/src/XraySPOSteppingAction.cc create mode 100644 examples/advanced/xray_SiliconPoreOptics/vis.mac create mode 100644 examples/advanced/xray_TESdetector/CMakeLists.txt create mode 100644 examples/advanced/xray_TESdetector/GNUmakefile create mode 100644 examples/advanced/xray_TESdetector/History create mode 100644 examples/advanced/xray_TESdetector/README.txt create mode 100644 examples/advanced/xray_TESdetector/XrayTESdetector.out create mode 100644 examples/advanced/xray_TESdetector/analysis/analysis.C create mode 100644 examples/advanced/xray_TESdetector/include/G4EmStandardPhysics_SpacePhysics.hh create mode 100644 examples/advanced/xray_TESdetector/include/XrayTESdetActionInitialization.hh create mode 100644 examples/advanced/xray_TESdetector/include/XrayTESdetDetParameterisation.hh create mode 100644 examples/advanced/xray_TESdetector/include/XrayTESdetDetectorConstruction.hh create mode 100644 examples/advanced/xray_TESdetector/include/XrayTESdetDetectorMessenger.hh create mode 100644 examples/advanced/xray_TESdetector/include/XrayTESdetHistoManager.hh create mode 100644 examples/advanced/xray_TESdetector/include/XrayTESdetPhysicsList.hh create mode 100644 examples/advanced/xray_TESdetector/include/XrayTESdetPhysicsListMessenger.hh create mode 100644 examples/advanced/xray_TESdetector/include/XrayTESdetPrimaryGeneratorAction.hh create mode 100644 examples/advanced/xray_TESdetector/include/XrayTESdetRunAction.hh create mode 100644 examples/advanced/xray_TESdetector/include/XrayTESdetSteppingAction.hh create mode 100644 examples/advanced/xray_TESdetector/init_vis.mac create mode 100644 examples/advanced/xray_TESdetector/pixelpos.txt create mode 100644 examples/advanced/xray_TESdetector/pixelpos2.txt create mode 100644 examples/advanced/xray_TESdetector/run01.mac create mode 100644 examples/advanced/xray_TESdetector/run02.mac create mode 100644 examples/advanced/xray_TESdetector/src/G4EmStandardPhysics_SpacePhysics.cc create mode 100644 examples/advanced/xray_TESdetector/src/XrayTESdetActionInitialization.cc create mode 100644 examples/advanced/xray_TESdetector/src/XrayTESdetDetParameterisation.cc create mode 100644 examples/advanced/xray_TESdetector/src/XrayTESdetDetectorConstruction.cc create mode 100644 examples/advanced/xray_TESdetector/src/XrayTESdetDetectorMessenger.cc create mode 100644 examples/advanced/xray_TESdetector/src/XrayTESdetHistoManager.cc create mode 100644 examples/advanced/xray_TESdetector/src/XrayTESdetPhysicsList.cc create mode 100644 examples/advanced/xray_TESdetector/src/XrayTESdetPhysicsListMessenger.cc create mode 100644 examples/advanced/xray_TESdetector/src/XrayTESdetPrimaryGeneratorAction.cc create mode 100644 examples/advanced/xray_TESdetector/src/XrayTESdetRunAction.cc create mode 100644 examples/advanced/xray_TESdetector/src/XrayTESdetSteppingAction.cc create mode 100644 examples/advanced/xray_TESdetector/vis.mac create mode 100644 examples/advanced/xray_TESdetector/xray_TESdetector.cc create mode 100644 examples/advanced/xray_TESdetector/xray_TESdetector.gdml create mode 100644 examples/advanced/xray_TESdetector/xray_TESdetector.out create mode 100644 examples/extended/electromagnetic/TestEm0/DirectAccess.out create mode 100644 examples/extended/electromagnetic/TestEm0/ion.mac create mode 100644 examples/extended/electromagnetic/TestEm1/etaDecay.mac create mode 100644 examples/extended/electromagnetic/TestEm7/mu.mac create mode 100644 examples/extended/hadronic/FlukaCern/.README.txt create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/README.md rename source/digits_hits/digits/src/G4VDigi.cc => examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/flush.cc (86%) create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/flush.h create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/string_conversion.cc rename source/visualization/Vtk/include/G4VtkQtViewer.hh => examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/string_conversion.h (74%) create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/types.h create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/fortran/closef.f create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/fortran/flushf.f create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_utils/string_print.cc rename source/tracking/src/G4VTrajectoryPoint.cc => examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_utils/string_print.h (75%) rename source/run/src/G4PhysicsListOrderingParamater.cc => examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/cpp/procedures/flabrt.cc (74%) rename source/particles/management/src/G4VUserPrimaryVertexInformation.cc => examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/cpp/procedures/flabrt.h (82%) create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/cpp/procedures/oauxf.cc create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/cpp/procedures/oauxf.h create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/fortran/procedures/flabrw.f create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/fortran/procedures/oauxfw.f create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/cmcyl.hh create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/fluka_common_dependencies.hh create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/fluka_dependencies.hh create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/fluka_interface.cc create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/fluka_interface.hh create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/test/interface_to_G4/test_interface.cc create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/FLUKAParticleTable.cc rename source/global/management/include/G4strstreambuf.hh => examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/FLUKAParticleTable.hh (56%) create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrndm.cc create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrndm.hh create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrnlp.cc create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrnlp.hh create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrnoc.cc create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrnoc.hh create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKAHadronInelasticPhysicsConstructor.cc rename source/processes/electromagnetic/dna/utils/include/G4DNACPA100WaterExcitationStructure.hh => examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKAHadronInelasticPhysicsConstructor.hh (64%) create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKAInelasticScatteringXS.cc create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKAInelasticScatteringXS.hh create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKANuclearInelasticModel.cc create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKANuclearInelasticModel.hh create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/G4_HP_CernFLUKAHadronInelastic_PhysicsList.cc create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/G4_HP_CernFLUKAHadronInelastic_PhysicsList.hh create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/build_G4_process_helpers.cc create mode 100644 examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/build_G4_process_helpers.hh create mode 100644 examples/extended/hadronic/FlukaCern/PhysicsListLevel/.README.txt create mode 100644 examples/extended/hadronic/FlukaCern/PhysicsListLevel/README.md create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/.README.txt create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/CMakeLists.txt create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/HadronNucleusXS.cc create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/History create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/ProcessLevel-CrossSection.out create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/README.md create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/all_XS.in create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/include/DetectorConstruction.hh create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/include/XSHistoManager.hh create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/include/XSHistoManagerMessenger.hh create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/src/DetectorConstruction.cc create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/src/XSHistoManager.cc create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/src/XSHistoManagerMessenger.cc create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/study_all_XS.flair create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/.README.txt create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/CMakeLists.txt create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/HadNucIneEvents.cc create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/History create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/ProcessLevel-FinalState.out create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/README.md create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/include/FinalStateHistoManager.hh create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/include/HadronicGenerator.hh create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/src/FinalStateHistoManager.cc create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/src/HadronicGenerator.cc create mode 100644 examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/study_final_state.flair create mode 100755 examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/update_final_state_flair_file.sh create mode 100644 examples/extended/hadronic/FlukaCern/README.md create mode 100644 examples/extended/hadronic/FlukaCern/utils/include/G4H1Wrapper.hh create mode 100644 examples/extended/hadronic/FlukaCern/utils/include/tools_histo_flair.hh create mode 100644 examples/extended/hadronic/FlukaCern/utils/src/G4H1Wrapper.cc create mode 100644 examples/extended/hadronic/FlukaCern/utils/src/tools_histo_flair.cc create mode 100644 examples/extended/hadronic/Hadr01/neutronGP.in create mode 100644 examples/extended/medical/dna/UHDR/.README.txt create mode 100644 examples/extended/medical/dna/UHDR/CMakeLists.txt create mode 100644 examples/extended/medical/dna/UHDR/History create mode 100644 examples/extended/medical/dna/UHDR/README create mode 100644 examples/extended/medical/dna/UHDR/UHDR.cc create mode 100644 examples/extended/medical/dna/UHDR/UHDR.out create mode 100644 examples/extended/medical/dna/UHDR/beam.in create mode 100644 examples/extended/medical/dna/UHDR/include/ActionInitialization.hh create mode 100644 examples/extended/medical/dna/UHDR/include/BoundedBrownianAction.hh rename source/particles/management/src/G4VUserPrimaryParticleInformation.cc => examples/extended/medical/dna/UHDR/include/ChemFrickeReactionBuilder.hh (83%) create mode 100644 examples/extended/medical/dna/UHDR/include/ChemNO2_NO3ScavengerBuilder.hh create mode 100644 examples/extended/medical/dna/UHDR/include/ChemOxygenWaterBuilder.hh create mode 100644 examples/extended/medical/dna/UHDR/include/ChemPureWaterBuilder.hh create mode 100644 examples/extended/medical/dna/UHDR/include/ChemistryWorld.hh create mode 100644 examples/extended/medical/dna/UHDR/include/DetectorConstruction.hh create mode 100644 examples/extended/medical/dna/UHDR/include/EmDNAChemistry.hh create mode 100644 examples/extended/medical/dna/UHDR/include/PhysicsList.hh create mode 100644 examples/extended/medical/dna/UHDR/include/PrimaryGeneratorAction.hh rename source/visualization/Vtk/include/G4VtkMessenger.hh => examples/extended/medical/dna/UHDR/include/PrimaryGeneratorMessenger.hh (76%) create mode 100644 examples/extended/medical/dna/UHDR/include/PulseAction.hh rename source/visualization/Vtk/include/G4VtkQtSceneHandler.hh => examples/extended/medical/dna/UHDR/include/PulseActionMessenger.hh (78%) create mode 100644 examples/extended/medical/dna/UHDR/include/Run.hh create mode 100644 examples/extended/medical/dna/UHDR/include/RunAction.hh create mode 100644 examples/extended/medical/dna/UHDR/include/Scorer.hh create mode 100644 examples/extended/medical/dna/UHDR/include/StackingAction.hh create mode 100644 examples/extended/medical/dna/UHDR/include/TimeStepAction.hh create mode 100644 examples/extended/medical/dna/UHDR/plotG_time.C create mode 100644 examples/extended/medical/dna/UHDR/pulseShape.dat create mode 100644 examples/extended/medical/dna/UHDR/src/ActionInitialization.cc create mode 100644 examples/extended/medical/dna/UHDR/src/BoundedBrownianAction.cc create mode 100644 examples/extended/medical/dna/UHDR/src/ChemFrickeReactionBuilder.cc create mode 100644 examples/extended/medical/dna/UHDR/src/ChemNO2_NO3ScavengerBuilder.cc create mode 100644 examples/extended/medical/dna/UHDR/src/ChemOxygenWaterBuilder.cc create mode 100644 examples/extended/medical/dna/UHDR/src/ChemPureWaterBuilder.cc create mode 100644 examples/extended/medical/dna/UHDR/src/ChemistryWorld.cc create mode 100644 examples/extended/medical/dna/UHDR/src/DetectorConstruction.cc create mode 100644 examples/extended/medical/dna/UHDR/src/EmDNAChemistry.cc create mode 100644 examples/extended/medical/dna/UHDR/src/PhysicsList.cc create mode 100644 examples/extended/medical/dna/UHDR/src/PrimaryGeneratorAction.cc create mode 100644 examples/extended/medical/dna/UHDR/src/PrimaryGeneratorMessenger.cc create mode 100644 examples/extended/medical/dna/UHDR/src/PulseAction.cc create mode 100644 examples/extended/medical/dna/UHDR/src/PulseActionMessenger.cc create mode 100644 examples/extended/medical/dna/UHDR/src/Run.cc create mode 100644 examples/extended/medical/dna/UHDR/src/RunAction.cc create mode 100644 examples/extended/medical/dna/UHDR/src/Scorer.cc create mode 100644 examples/extended/medical/dna/UHDR/src/StackingAction.cc create mode 100644 examples/extended/medical/dna/UHDR/src/TimeStepAction.cc create mode 100644 examples/extended/medical/dna/dnadamage2/.README.txt create mode 100644 examples/extended/medical/dna/dnadamage2/CMakeLists.txt create mode 100644 examples/extended/medical/dna/dnadamage2/CaesiumSource.src create mode 100644 examples/extended/medical/dna/dnadamage2/CobaltSource.src create mode 100644 examples/extended/medical/dna/dnadamage2/History create mode 100644 examples/extended/medical/dna/dnadamage2/PlasmidOffsets.txt create mode 100644 examples/extended/medical/dna/dnadamage2/README.txt create mode 100644 examples/extended/medical/dna/dnadamage2/RunDoseDependance.in create mode 100644 examples/extended/medical/dna/dnadamage2/dnadamage2.cc create mode 100644 examples/extended/medical/dna/dnadamage2/dnadamage2.in create mode 100644 examples/extended/medical/dna/dnadamage2/dnadamage2.out create mode 100644 examples/extended/medical/dna/dnadamage2/include/ActionInitialization.hh create mode 100644 examples/extended/medical/dna/dnadamage2/include/DetectorConstruction.hh create mode 100644 examples/extended/medical/dna/dnadamage2/include/G4EmDNAChemistryForPlasmids.hh create mode 100644 examples/extended/medical/dna/dnadamage2/include/MoleculeInserter.hh create mode 100644 examples/extended/medical/dna/dnadamage2/include/PhysGeoImport.hh create mode 100644 examples/extended/medical/dna/dnadamage2/include/PhysicsList.hh create mode 100644 examples/extended/medical/dna/dnadamage2/include/PlasmidMolecules.hh create mode 100644 examples/extended/medical/dna/dnadamage2/include/PrimaryGeneratorAction.hh create mode 100644 examples/extended/medical/dna/dnadamage2/include/Run.hh create mode 100644 examples/extended/medical/dna/dnadamage2/include/RunAction.hh create mode 100644 examples/extended/medical/dna/dnadamage2/include/ScavengerMolecules.hh create mode 100644 examples/extended/medical/dna/dnadamage2/include/ScoreLET.hh create mode 100644 examples/extended/medical/dna/dnadamage2/include/ScoreSpecies.hh create mode 100644 examples/extended/medical/dna/dnadamage2/include/ScoreStrandBreaks.hh create mode 100644 examples/extended/medical/dna/dnadamage2/include/StackingAction.hh create mode 100644 examples/extended/medical/dna/dnadamage2/include/TimeStepAction.hh create mode 100644 examples/extended/medical/dna/dnadamage2/init_vis.in create mode 100644 examples/extended/medical/dna/dnadamage2/pUC19.xyz create mode 100644 examples/extended/medical/dna/dnadamage2/src/ActionInitialization.cc create mode 100644 examples/extended/medical/dna/dnadamage2/src/DetectorConstruction.cc create mode 100644 examples/extended/medical/dna/dnadamage2/src/G4EmDNAChemistryForPlasmids.cc create mode 100644 examples/extended/medical/dna/dnadamage2/src/MoleculeInserter.cc create mode 100644 examples/extended/medical/dna/dnadamage2/src/PhysGeoImport.cc create mode 100644 examples/extended/medical/dna/dnadamage2/src/PhysicsList.cc create mode 100644 examples/extended/medical/dna/dnadamage2/src/PlasmidMolecules.cc create mode 100644 examples/extended/medical/dna/dnadamage2/src/PrimaryGeneratorAction.cc create mode 100644 examples/extended/medical/dna/dnadamage2/src/Run.cc create mode 100644 examples/extended/medical/dna/dnadamage2/src/RunAction.cc create mode 100644 examples/extended/medical/dna/dnadamage2/src/ScavengerMolecules.cc create mode 100644 examples/extended/medical/dna/dnadamage2/src/ScoreLET.cc create mode 100644 examples/extended/medical/dna/dnadamage2/src/ScoreSpecies.cc create mode 100644 examples/extended/medical/dna/dnadamage2/src/ScoreStrandBreaks.cc create mode 100644 examples/extended/medical/dna/dnadamage2/src/StackingAction.cc create mode 100644 examples/extended/medical/dna/dnadamage2/src/TimeStepAction.cc create mode 100644 examples/extended/medical/dna/dnadamage2/vis.in create mode 100644 examples/extended/medical/dna/moleculardna/include/PrimaryGeneratorMessenger.hh create mode 100644 examples/extended/medical/dna/moleculardna/include/PrimaryGeneratorSource.hh create mode 100644 examples/extended/medical/dna/moleculardna/include/PrimaryGeneratorSourceGRASCSV.hh create mode 100644 examples/extended/medical/dna/moleculardna/phase_space/phase_space.csv create mode 100644 examples/extended/medical/dna/moleculardna/phase_space/phase_space_test.mac create mode 100644 examples/extended/medical/dna/moleculardna/src/PrimaryGeneratorMessenger.cc create mode 100644 examples/extended/medical/dna/moleculardna/src/PrimaryGeneratorSourceGRASCSV.cc delete mode 100644 examples/extended/medical/dna/pdb4dna/.gitignore create mode 100644 examples/extended/medical/dna/spower/alpha.in create mode 100644 examples/extended/parameterisations/gflash/gflasha/cmpE.C create mode 100644 examples/extended/persistency/gdml/G01/g01-schema.out create mode 100644 examples/extended/visualization/standalone/include/DetectorConstruction.hh create mode 100644 examples/extended/visualization/standalone/include/DrawGeometryVisAction.hh create mode 100644 examples/extended/visualization/standalone/src/DetectorConstruction.cc create mode 100644 examples/extended/visualization/standalone/src/DrawGeometryVisAction.cc delete mode 100644 source/GNUmakefile delete mode 100644 source/analysis/GNUmakefile delete mode 100644 source/analysis/accumulables/GNUmakefile delete mode 100644 source/analysis/csv/GNUmakefile delete mode 100644 source/analysis/factory/GNUmakefile delete mode 100644 source/analysis/hdf5/GNUmakefile delete mode 100644 source/analysis/hntools/GNUmakefile delete mode 100644 source/analysis/management/GNUmakefile delete mode 100644 source/analysis/root/GNUmakefile delete mode 100644 source/analysis/xml/GNUmakefile delete mode 100644 source/digits_hits/GNUmakefile delete mode 100644 source/digits_hits/detector/GNUmakefile delete mode 100644 source/digits_hits/digits/GNUmakefile delete mode 100644 source/digits_hits/hits/GNUmakefile delete mode 100644 source/digits_hits/scorer/GNUmakefile delete mode 100644 source/digits_hits/utils/GNUmakefile delete mode 100644 source/error_propagation/GNUmakefile delete mode 100644 source/event/GNUmakefile delete mode 100644 source/externals/GNUmakefile delete mode 100644 source/externals/clhep/GNUmakefile delete mode 100644 source/externals/expat/GNUmakefile delete mode 100644 source/externals/g4tools/GNUmakefile create mode 100644 source/externals/g4tools/include/tools/sg/zb_viewer create mode 100644 source/externals/g4tools/include/toolx/Qt/pixwin create mode 100644 source/externals/g4tools/include/toolx/Qt/s2q create mode 100644 source/externals/g4tools/include/toolx/Qt/zb_viewer create mode 100644 source/externals/g4tools/include/toolx/Windows/pixwin create mode 100644 source/externals/g4tools/include/toolx/Windows/zb_viewer create mode 100644 source/externals/g4tools/include/toolx/X11/colors create mode 100644 source/externals/g4tools/include/toolx/X11/pixwin create mode 100644 source/externals/g4tools/include/toolx/X11/zb_viewer create mode 100644 source/externals/g4tools/include/toolx/Xt/ImageArea create mode 100644 source/externals/g4tools/include/toolx/Xt/zb_viewer create mode 100644 source/externals/ptl/.clang-tidy delete mode 100644 source/externals/ptl/GNUmakefile delete mode 100644 source/externals/zlib/GNUmakefile delete mode 100644 source/externals/zlib/src/Makefile.in delete mode 100644 source/g3tog4/GNUmakefile delete mode 100644 source/geometry/GNUmakefile delete mode 100644 source/geometry/biasing/GNUmakefile delete mode 100644 source/geometry/divisions/GNUmakefile delete mode 100644 source/geometry/magneticfield/GNUmakefile create mode 100644 source/geometry/magneticfield/include/G4BFieldIntegrationDriver.icc create mode 100644 source/geometry/magneticfield/include/G4QSS2.hh create mode 100644 source/geometry/magneticfield/include/G4QSS3.hh create mode 100644 source/geometry/magneticfield/include/G4QSSDriver.hh create mode 100644 source/geometry/magneticfield/include/G4QSSDriver.icc create mode 100644 source/geometry/magneticfield/include/G4QSSDriverCreator.hh rename source/{run/src/G4UserWorkerInitialization.cc => geometry/magneticfield/include/G4QSSMessenger.hh} (53%) create mode 100644 source/geometry/magneticfield/include/G4QSS_CustomStats.hh create mode 100644 source/geometry/magneticfield/include/G4QSStepper.hh create mode 100644 source/geometry/magneticfield/include/G4qss_misc.hh create mode 100644 source/geometry/magneticfield/src/G4QSS3.cc create mode 100644 source/geometry/magneticfield/src/G4QSSDriverCreator.cc create mode 100644 source/geometry/magneticfield/src/G4QSSMessenger.cc create mode 100644 source/geometry/magneticfield/src/G4QSStepper.cc delete mode 100644 source/geometry/management/GNUmakefile delete mode 100644 source/geometry/navigation/GNUmakefile delete mode 100644 source/geometry/solids/Boolean/GNUmakefile create mode 100644 source/geometry/solids/Boolean/include/G4VBooleanProcessor.hh delete mode 100644 source/geometry/solids/CSG/GNUmakefile delete mode 100644 source/geometry/solids/GNUmakefile delete mode 100644 source/geometry/solids/specific/GNUmakefile delete mode 100644 source/geometry/volumes/GNUmakefile delete mode 100644 source/global/GNUmakefile delete mode 100644 source/global/HEPGeometry/GNUmakefile delete mode 100644 source/global/HEPNumerics/GNUmakefile delete mode 100644 source/global/HEPRandom/GNUmakefile delete mode 100644 source/global/management/GNUmakefile delete mode 100644 source/global/management/include/G4SIunits.hh delete mode 100644 source/global/management/include/G4strstreambuf.icc delete mode 100644 source/graphics_reps/GNUmakefile create mode 100644 source/graphics_reps/include/G4SceneTreeItem.hh create mode 100644 source/graphics_reps/src/G4SceneTreeItem.cc delete mode 100644 source/intercoms/GNUmakefile rename source/intercoms/include/{ => private}/G4LocalThreadCoutMessenger.hh (99%) rename source/intercoms/include/{ => private}/G4ProfilerMessenger.hh (65%) rename source/intercoms/include/{ => private}/G4UIaliasList.hh (81%) rename source/intercoms/include/{ => private}/G4UIcontrolMessenger.hh (99%) create mode 100644 source/intercoms/include/private/G4UIparsing.hh rename source/intercoms/include/{ => private}/G4UnitsMessenger.hh (99%) delete mode 100644 source/interfaces/GNUmakefile delete mode 100644 source/interfaces/basic/GNUmakefile delete mode 100644 source/interfaces/basic/include/G4UIWin32.hh delete mode 100644 source/interfaces/basic/sources.cmake delete mode 100644 source/interfaces/basic/src/G4UIWin32.cc delete mode 100644 source/interfaces/basic/src/G4UItcsh.cc delete mode 100644 source/interfaces/basic/src/G4UIterminal.cc delete mode 100644 source/interfaces/basic/src/G4VUIshell.cc delete mode 100644 source/interfaces/common/GNUmakefile delete mode 100644 source/interfaces/common/include/G4VInteractorManager.hh delete mode 100644 source/interfaces/common/sources.cmake delete mode 100644 source/interfaces/common/src/G4InteractorMessenger.cc rename source/interfaces/{common => core}/include/G4InteractorMessenger.hh (90%) rename source/interfaces/{basic => core}/include/G4UIArrayString.hh (94%) rename source/interfaces/{basic => core}/include/G4UIcsh.hh (91%) rename source/interfaces/{basic => core}/include/G4UItcsh.hh (61%) rename source/interfaces/{basic => core}/include/G4UIterminal.hh (81%) rename source/interfaces/{common => core}/include/G4VBasicShell.hh (56%) rename source/interfaces/{common => core}/include/G4VInteractiveSession.hh (65%) create mode 100644 source/interfaces/core/include/G4VInteractorManager.hh rename source/interfaces/{basic => core}/include/G4VUIshell.hh (76%) create mode 100644 source/interfaces/core/sources.cmake create mode 100644 source/interfaces/core/src/G4InteractorMessenger.cc rename source/interfaces/{basic => core}/src/G4UIArrayString.cc (57%) rename source/interfaces/{basic => core}/src/G4UIcsh.cc (83%) create mode 100644 source/interfaces/core/src/G4UItcsh.cc create mode 100644 source/interfaces/core/src/G4UIterminal.cc rename source/interfaces/{common => core}/src/G4VBasicShell.cc (56%) rename source/interfaces/{common => core}/src/G4VInteractiveSession.cc (50%) rename source/interfaces/{common => core}/src/G4VInteractorManager.cc (69%) create mode 100644 source/interfaces/core/src/G4VUIshell.cc rename source/interfaces/{common => implementation}/include/G4Qt.hh (79%) rename source/interfaces/{basic => implementation}/include/G4UIExecutive.hh (90%) rename source/interfaces/{basic => implementation}/include/G4UIQt.hh (64%) create mode 100644 source/interfaces/implementation/include/G4UIWin32.hh rename source/interfaces/{basic => implementation}/include/G4UIXm.hh (81%) rename source/interfaces/{common => implementation}/include/G4Win32.hh (83%) rename source/interfaces/{common => implementation}/include/G4Xt.hh (80%) create mode 100644 source/interfaces/implementation/sources.cmake rename source/interfaces/{common => implementation}/src/G4Qt.cc (78%) rename source/interfaces/{basic => implementation}/src/G4UIExecutive.cc (58%) rename source/interfaces/{basic => implementation}/src/G4UIQt.cc (56%) create mode 100644 source/interfaces/implementation/src/G4UIWin32.cc rename source/interfaces/{basic => implementation}/src/G4UIXm.cc (54%) rename source/interfaces/{common => implementation}/src/G4Win32.cc (71%) rename source/interfaces/{common => implementation}/src/G4Xt.cc (63%) delete mode 100644 source/materials/GNUmakefile delete mode 100644 source/parameterisations/GNUmakefile create mode 100644 source/parameterisations/channeling/History create mode 100644 source/parameterisations/channeling/include/G4BaierKatkov.hh create mode 100644 source/parameterisations/channeling/include/G4ChannelingFastSimCrystalData.hh create mode 100644 source/parameterisations/channeling/include/G4ChannelingFastSimInterpolation.hh create mode 100644 source/parameterisations/channeling/include/G4ChannelingFastSimModel.hh create mode 100644 source/parameterisations/channeling/include/G4VChannelingFastSimCrystalData.hh create mode 100644 source/parameterisations/channeling/sources.cmake create mode 100644 source/parameterisations/channeling/src/G4BaierKatkov.cc create mode 100644 source/parameterisations/channeling/src/G4ChannelingFastSimCrystalData.cc create mode 100644 source/parameterisations/channeling/src/G4ChannelingFastSimInterpolation.cc create mode 100644 source/parameterisations/channeling/src/G4ChannelingFastSimModel.cc create mode 100644 source/parameterisations/channeling/src/G4VChannelingFastSimCrystalData.cc delete mode 100644 source/parameterisations/gflash/GNUmakefile delete mode 100644 source/particles/GNUmakefile delete mode 100644 source/particles/adjoint/GNUmakefile delete mode 100644 source/particles/bosons/GNUmakefile delete mode 100644 source/particles/hadrons/GNUmakefile delete mode 100644 source/particles/hadrons/barions/GNUmakefile delete mode 100644 source/particles/hadrons/ions/GNUmakefile delete mode 100644 source/particles/hadrons/mesons/GNUmakefile delete mode 100644 source/particles/leptons/GNUmakefile delete mode 100644 source/particles/management/GNUmakefile delete mode 100644 source/particles/shortlived/GNUmakefile delete mode 100644 source/particles/utils/GNUmakefile delete mode 100644 source/persistency/GNUmakefile delete mode 100644 source/persistency/ascii/GNUmakefile delete mode 100644 source/persistency/gdml/GNUmakefile delete mode 100644 source/persistency/mctruth/GNUmakefile delete mode 100644 source/physics_lists/GNUmakefile delete mode 100644 source/physics_lists/builders/GNUmakefile delete mode 100644 source/physics_lists/constructors/GNUmakefile delete mode 100644 source/physics_lists/constructors/decay/GNUmakefile delete mode 100644 source/physics_lists/constructors/electromagnetic/GNUmakefile create mode 100644 source/physics_lists/constructors/electromagnetic/include/G4ChemDissociationChannels.hh create mode 100644 source/physics_lists/constructors/electromagnetic/include/G4ChemDissociationChannels_option1.hh create mode 100644 source/physics_lists/constructors/electromagnetic/src/G4ChemDissociationChannels.cc create mode 100644 source/physics_lists/constructors/electromagnetic/src/G4ChemDissociationChannels_option1.cc delete mode 100644 source/physics_lists/constructors/factory/GNUmakefile delete mode 100644 source/physics_lists/constructors/gamma_lepto_nuclear/GNUmakefile delete mode 100644 source/physics_lists/constructors/hadron_elastic/GNUmakefile create mode 100644 source/physics_lists/constructors/hadron_elastic/include/G4HadronElasticPhysicsHPT.hh create mode 100644 source/physics_lists/constructors/hadron_elastic/src/G4HadronElasticPhysicsHPT.cc delete mode 100644 source/physics_lists/constructors/hadron_inelastic/GNUmakefile create mode 100644 source/physics_lists/constructors/hadron_inelastic/include/G4HadronInelasticQBBC_ABLA.hh create mode 100644 source/physics_lists/constructors/hadron_inelastic/src/G4HadronInelasticQBBC_ABLA.cc delete mode 100644 source/physics_lists/constructors/ions/GNUmakefile delete mode 100644 source/physics_lists/constructors/limiters/GNUmakefile delete mode 100644 source/physics_lists/constructors/stopping/GNUmakefile create mode 100644 source/physics_lists/constructors/stopping/include/G4StoppingPhysicsWithINCLXX.hh create mode 100644 source/physics_lists/constructors/stopping/src/G4StoppingPhysicsWithINCLXX.cc delete mode 100644 source/physics_lists/lists/GNUmakefile create mode 100644 source/physics_lists/lists/include/QBBC_ABLA.hh create mode 100644 source/physics_lists/lists/include/QGSP_BIC_HPT.hh create mode 100644 source/physics_lists/lists/src/QBBC_ABLA.cc create mode 100644 source/physics_lists/lists/src/QGSP_BIC_HPT.cc delete mode 100644 source/physics_lists/util/GNUmakefile delete mode 100644 source/processes/GNUmakefile delete mode 100644 source/processes/biasing/GNUmakefile delete mode 100644 source/processes/biasing/generic/GNUmakefile delete mode 100644 source/processes/biasing/importance/GNUmakefile delete mode 100644 source/processes/biasing/management/GNUmakefile delete mode 100644 source/processes/cuts/GNUmakefile delete mode 100644 source/processes/decay/GNUmakefile delete mode 100644 source/processes/electromagnetic/GNUmakefile delete mode 100644 source/processes/electromagnetic/adjoint/GNUmakefile delete mode 100644 source/processes/electromagnetic/dna/GNUmakefile delete mode 100644 source/processes/electromagnetic/dna/management/GNUmakefile create mode 100644 source/processes/electromagnetic/dna/management/include/G4VUserPulseInfo.hh rename source/processes/{hadronic/models/particle_hp/include/G4NeutronHPGamma.hh => electromagnetic/dna/management/src/G4VUserPulseInfo.cc} (92%) delete mode 100644 source/processes/electromagnetic/dna/models/GNUmakefile delete mode 100644 source/processes/electromagnetic/dna/models/include/G4DNADummyModel.hh delete mode 100644 source/processes/electromagnetic/dna/models/src/G4DNADummyModel.cc delete mode 100644 source/processes/electromagnetic/dna/molecules/GNUmakefile delete mode 100644 source/processes/electromagnetic/dna/molecules/management/GNUmakefile delete mode 100644 source/processes/electromagnetic/dna/molecules/types/GNUmakefile delete mode 100644 source/processes/electromagnetic/dna/processes/GNUmakefile delete mode 100644 source/processes/electromagnetic/dna/utils/GNUmakefile rename source/processes/electromagnetic/dna/utils/{src/G4DNACPA100WaterIonisationStructure.cc => include/G4DNACPA100ExcitationStructure.hh} (60%) create mode 100644 source/processes/electromagnetic/dna/utils/include/G4DNACPA100IonisationStructure.hh create mode 100644 source/processes/electromagnetic/dna/utils/include/G4DNAMaterialManager.hh create mode 100644 source/processes/electromagnetic/dna/utils/src/G4DNACPA100ExcitationStructure.cc create mode 100644 source/processes/electromagnetic/dna/utils/src/G4DNACPA100IonisationStructure.cc create mode 100644 source/processes/electromagnetic/dna/utils/src/G4DNAMaterialManager.cc delete mode 100644 source/processes/electromagnetic/highenergy/GNUmakefile delete mode 100644 source/processes/electromagnetic/lowenergy/GNUmakefile delete mode 100644 source/processes/electromagnetic/muons/GNUmakefile delete mode 100644 source/processes/electromagnetic/pii/GNUmakefile delete mode 100644 source/processes/electromagnetic/polarisation/GNUmakefile delete mode 100644 source/processes/electromagnetic/standard/GNUmakefile delete mode 100644 source/processes/electromagnetic/utils/GNUmakefile delete mode 100644 source/processes/electromagnetic/xrays/GNUmakefile delete mode 100644 source/processes/hadronic/GNUmakefile delete mode 100644 source/processes/hadronic/cross_sections/GNUmakefile delete mode 100644 source/processes/hadronic/management/GNUmakefile delete mode 100644 source/processes/hadronic/models/GNUmakefile delete mode 100644 source/processes/hadronic/models/abla/GNUmakefile delete mode 100644 source/processes/hadronic/models/abrasion/GNUmakefile delete mode 100644 source/processes/hadronic/models/binary_cascade/GNUmakefile delete mode 100644 source/processes/hadronic/models/cascade/GNUmakefile delete mode 100644 source/processes/hadronic/models/cascade/cascade/GNUmakefile rename source/{digits_hits/detector/include/G4SensitiveVolumeList.icc => processes/hadronic/models/cascade/cascade/include/G4AblaDeexcitation.hh} (62%) create mode 100644 source/processes/hadronic/models/cascade/cascade/src/G4AblaDeexcitation.cc delete mode 100644 source/processes/hadronic/models/coherent_elastic/GNUmakefile delete mode 100644 source/processes/hadronic/models/de_excitation/GNUmakefile delete mode 100644 source/processes/hadronic/models/de_excitation/ablation/GNUmakefile delete mode 100644 source/processes/hadronic/models/de_excitation/evaporation/GNUmakefile delete mode 100644 source/processes/hadronic/models/de_excitation/fermi_breakup/GNUmakefile delete mode 100644 source/processes/hadronic/models/de_excitation/fission/GNUmakefile delete mode 100644 source/processes/hadronic/models/de_excitation/gem_evaporation/GNUmakefile delete mode 100644 source/processes/hadronic/models/de_excitation/handler/GNUmakefile delete mode 100644 source/processes/hadronic/models/de_excitation/management/GNUmakefile delete mode 100644 source/processes/hadronic/models/de_excitation/multifragmentation/GNUmakefile delete mode 100644 source/processes/hadronic/models/de_excitation/photon_evaporation/GNUmakefile delete mode 100644 source/processes/hadronic/models/de_excitation/util/GNUmakefile delete mode 100644 source/processes/hadronic/models/em_dissociation/GNUmakefile delete mode 100644 source/processes/hadronic/models/fission/GNUmakefile delete mode 100644 source/processes/hadronic/models/gamma_nuclear/GNUmakefile delete mode 100644 source/processes/hadronic/models/im_r_matrix/GNUmakefile delete mode 100644 source/processes/hadronic/models/inclxx/GNUmakefile delete mode 100644 source/processes/hadronic/models/inclxx/incl_physics/GNUmakefile create mode 100644 source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLPbarAtrestEntryChannel.hh create mode 100644 source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPbarAtrestEntryChannel.cc delete mode 100644 source/processes/hadronic/models/inclxx/interface/GNUmakefile delete mode 100644 source/processes/hadronic/models/inclxx/utils/GNUmakefile delete mode 100644 source/processes/hadronic/models/lend/GNUmakefile delete mode 100644 source/processes/hadronic/models/lepto_nuclear/GNUmakefile delete mode 100644 source/processes/hadronic/models/particle_hp/GNUmakefile delete mode 100644 source/processes/hadronic/models/parton_string/GNUmakefile delete mode 100644 source/processes/hadronic/models/parton_string/diffraction/GNUmakefile delete mode 100644 source/processes/hadronic/models/parton_string/hadronization/GNUmakefile delete mode 100644 source/processes/hadronic/models/parton_string/management/GNUmakefile delete mode 100644 source/processes/hadronic/models/parton_string/qgsm/GNUmakefile delete mode 100644 source/processes/hadronic/models/pre_equilibrium/GNUmakefile delete mode 100644 source/processes/hadronic/models/pre_equilibrium/exciton_model/GNUmakefile delete mode 100644 source/processes/hadronic/models/qmd/GNUmakefile delete mode 100644 source/processes/hadronic/models/quasi_elastic/GNUmakefile delete mode 100644 source/processes/hadronic/models/radioactive_decay/GNUmakefile create mode 100644 source/processes/hadronic/models/radioactive_decay/include/G4BetaSpectrumSampler.hh create mode 100644 source/processes/hadronic/models/radioactive_decay/src/G4BetaSpectrumSampler.cc delete mode 100644 source/processes/hadronic/models/theo_high_energy/GNUmakefile delete mode 100644 source/processes/hadronic/processes/GNUmakefile create mode 100644 source/processes/hadronic/processes/include/G4NuVacOscProcess.hh create mode 100644 source/processes/hadronic/processes/src/G4NuVacOscProcess.cc delete mode 100644 source/processes/hadronic/stopping/GNUmakefile create mode 100644 source/processes/hadronic/stopping/include/G4HadronicAbsorptionINCLXX.hh create mode 100644 source/processes/hadronic/stopping/src/G4HadronicAbsorptionINCLXX.cc delete mode 100644 source/processes/hadronic/util/GNUmakefile delete mode 100644 source/processes/management/GNUmakefile delete mode 100644 source/processes/optical/GNUmakefile delete mode 100644 source/processes/parameterisation/GNUmakefile delete mode 100644 source/processes/scoring/GNUmakefile rename source/processes/scoring/include/{ => private}/G4EnergySplitter.hh (63%) rename source/processes/scoring/include/{ => private}/G4EnergySplitter.icc (66%) delete mode 100644 source/processes/solidstate/GNUmakefile delete mode 100644 source/processes/solidstate/channeling/GNUmakefile delete mode 100644 source/processes/solidstate/phonon/GNUmakefile delete mode 100644 source/processes/transportation/GNUmakefile delete mode 100644 source/readout/GNUmakefile delete mode 100644 source/run/GNUmakefile rename source/run/include/{ => private}/G4AdjointSimMessenger.hh (98%) create mode 100644 source/run/include/private/G4CopyRandomState.hh rename source/run/include/{ => private}/G4MatScanMessenger.hh (94%) rename source/run/include/{ => private}/G4RunMessenger.hh (95%) rename source/run/include/{ => private}/G4UserPhysicsListMessenger.hh (93%) delete mode 100644 source/run/src/G4UserTaskInitialization.cc delete mode 100644 source/track/GNUmakefile delete mode 100644 source/tracking/GNUmakefile delete mode 100644 source/visualization/FukuiRenderer/GNUmakefile rename source/visualization/FukuiRenderer/include/{ => private}/G4DAWNFILESceneHandler.hh (100%) rename source/visualization/FukuiRenderer/include/{ => private}/G4DAWNFILEViewer.hh (100%) rename source/visualization/FukuiRenderer/include/{ => private}/G4FRConst.hh (100%) rename source/visualization/FukuiRenderer/include/{ => private}/G4FRSceneFunc.icc (100%) rename source/visualization/FukuiRenderer/include/{ => private}/G4FRofstream.hh (100%) rename source/visualization/FukuiRenderer/include/{ => private}/G4VisFeaturesOfDAWNFILE.hh (100%) delete mode 100644 source/visualization/GNUmakefile delete mode 100644 source/visualization/HepRep/GNUmakefile rename source/visualization/HepRep/include/{ => private}/G4HepRepFileSceneHandler.hh (100%) rename source/visualization/HepRep/include/{ => private}/G4HepRepFileViewer.hh (100%) rename source/visualization/HepRep/include/{ => private}/G4HepRepMessenger.hh (100%) delete mode 100644 source/visualization/OpenGL/GNUmakefile delete mode 100644 source/visualization/OpenGL/include/G4OpenGLVboDrawer.hh delete mode 100644 source/visualization/OpenGL/src/G4OpenGLVboDrawer.cc delete mode 100644 source/visualization/OpenInventor/GNUmakefile delete mode 100644 source/visualization/Qt3D/GNUmakefile rename source/visualization/Qt3D/include/{ => private}/G4Qt3DQEntity.hh (100%) rename source/visualization/Qt3D/include/{ => private}/G4Qt3DSceneHandler.hh (100%) rename source/visualization/Qt3D/include/{ => private}/G4Qt3DUtils.hh (100%) rename source/visualization/Qt3D/include/{ => private}/G4Qt3DViewer.hh (100%) delete mode 100644 source/visualization/RayTracer/GNUmakefile rename source/visualization/RayTracer/include/{ => private}/G4RTJpeg.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RTJpegCoder.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RTJpegCoderTables.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RTJpegMaker.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RTMessenger.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RTOutBitStream.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RTPrimaryGeneratorAction.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RTRun.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RTRunAction.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RTSimpleScanner.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RTSteppingAction.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RTTrackingAction.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RTWorkerInitialization.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RTXScanner.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RayTracerFeatures.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RayTracerSceneHandler.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RayTracerViewer.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RayTracerXViewer.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RayTrajectory.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4RayTrajectoryPoint.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4TheMTRayTracer.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4TheRayTracer.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4VFigureFileMaker.hh (100%) rename source/visualization/RayTracer/include/{ => private}/G4VRTScanner.hh (100%) delete mode 100644 source/visualization/ToolsSG/GNUmakefile create mode 100644 source/visualization/ToolsSG/include/G4ToolsSGQtZB.hh create mode 100644 source/visualization/ToolsSG/include/G4ToolsSGWindowsZB.hh create mode 100644 source/visualization/ToolsSG/include/G4ToolsSGX11ZB.hh create mode 100644 source/visualization/ToolsSG/include/G4ToolsSGXtZB.hh rename source/visualization/ToolsSG/include/{ => private}/G4ToolsSGNode.hh (100%) rename source/visualization/ToolsSG/include/{ => private}/G4ToolsSGOffscreenViewer.hh (100%) rename source/visualization/ToolsSG/include/{ => private}/G4ToolsSGQtViewer.hh (93%) create mode 100644 source/visualization/ToolsSG/include/private/G4ToolsSGQtZBViewer.hh rename source/visualization/ToolsSG/include/{ => private}/G4ToolsSGSceneHandler.hh (100%) rename source/visualization/ToolsSG/include/{ => private}/G4ToolsSGViewer.hh (100%) create mode 100644 source/visualization/ToolsSG/src/G4ToolsSGQtZB.cc rename source/{processes/hadronic/models/particle_hp/include/G4NeutronHPLevel.hh => visualization/ToolsSG/src/G4ToolsSGQtZBViewer.cc} (92%) create mode 100644 source/visualization/ToolsSG/src/G4ToolsSGWindowsZB.cc create mode 100644 source/visualization/ToolsSG/src/G4ToolsSGX11ZB.cc create mode 100644 source/visualization/ToolsSG/src/G4ToolsSGXtZB.cc delete mode 100644 source/visualization/Tree/GNUmakefile rename source/visualization/Tree/include/{ => private}/G4ASCIITreeMessenger.hh (100%) rename source/visualization/Tree/include/{ => private}/G4ASCIITreeSceneHandler.hh (100%) rename source/visualization/Tree/include/{ => private}/G4ASCIITreeViewer.hh (100%) rename source/visualization/Tree/include/{ => private}/G4VTreeSceneHandler.hh (100%) rename source/visualization/Tree/include/{ => private}/G4VTreeSceneHandler.icc (100%) rename source/visualization/Tree/include/{ => private}/G4VTreeViewer.hh (100%) delete mode 100644 source/visualization/VRML/GNUmakefile rename source/visualization/VRML/include/{ => private}/G4VRML2FileSceneHandler.hh (100%) rename source/visualization/VRML/include/{ => private}/G4VRML2FileViewer.hh (100%) delete mode 100644 source/visualization/Vtk/include/G4VtkSceneHandler.hh delete mode 100644 source/visualization/Vtk/include/G4VtkViewer.hh create mode 100644 source/visualization/Vtk/include/private/G4VVtkPipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkClipClosedSurfacePipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkClipOpenPipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkClipperClosedPipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkCutterPipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkImagePipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkInteractorStyle.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkMessenger.hh rename source/{digits_hits/hits/src/G4VHit.cc => visualization/Vtk/include/private/G4VtkPolydataCubePipeline.hh} (88%) create mode 100644 source/visualization/Vtk/include/private/G4VtkPolydataInstanceAppendPipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkPolydataInstanceBakePipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkPolydataInstancePipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkPolydataInstanceTensorPipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkPolydataPipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkPolydataPolygonPipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkPolydataPolyline2DPipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkPolydataPolylinePipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkPolydataSpherePipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkQtSceneHandler.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkQtViewer.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkSceneHandler.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkStore.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkStructuredGridPipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkText2DPipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkTextPipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkUnstructuredGridPipeline.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkUtility.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkViewer.hh create mode 100644 source/visualization/Vtk/include/private/G4VtkVisContext.hh create mode 100644 source/visualization/Vtk/include/private/vtkTensorGlyphColor.h delete mode 100644 source/visualization/Vtk/include/vtkTensorGlyphColor.h create mode 100644 source/visualization/Vtk/src/G4VtkClipClosedSurfacePipeline.cc create mode 100644 source/visualization/Vtk/src/G4VtkClipOpenPipeline.cc create mode 100644 source/visualization/Vtk/src/G4VtkClipperClosedPipeline.cc create mode 100644 source/visualization/Vtk/src/G4VtkCutterPipeline.cc create mode 100644 source/visualization/Vtk/src/G4VtkImagePipeline.cc create mode 100644 source/visualization/Vtk/src/G4VtkInteractorStyle.cc create mode 100644 source/visualization/Vtk/src/G4VtkPolydataInstanceAppendPipeline.cc create mode 100644 source/visualization/Vtk/src/G4VtkPolydataInstanceBakePipeline.cc create mode 100644 source/visualization/Vtk/src/G4VtkPolydataInstancePipeline.cc create mode 100644 source/visualization/Vtk/src/G4VtkPolydataInstanceTensorPipeline.cc create mode 100644 source/visualization/Vtk/src/G4VtkPolydataPipeline.cc create mode 100644 source/visualization/Vtk/src/G4VtkPolydataPolygonPipeline.cc create mode 100644 source/visualization/Vtk/src/G4VtkPolydataPolyline2DPipeline.cc create mode 100644 source/visualization/Vtk/src/G4VtkPolydataPolylinePipeline.cc create mode 100644 source/visualization/Vtk/src/G4VtkPolydataSpherePipeline.cc create mode 100644 source/visualization/Vtk/src/G4VtkStore.cc create mode 100644 source/visualization/Vtk/src/G4VtkText2DPipeline.cc create mode 100644 source/visualization/Vtk/src/G4VtkTextPipeline.cc create mode 100644 source/visualization/Vtk/src/G4VtkUnstructuredGridPipeline.cc create mode 100644 source/visualization/Vtk/src/G4VtkUtility.cc delete mode 100644 source/visualization/gMocren/GNUmakefile rename source/visualization/gMocren/include/{ => private}/G4GMocrenFileCTtoDensityMap.hh (100%) rename source/visualization/gMocren/include/{ => private}/G4GMocrenFileSceneHandler.hh (100%) rename source/visualization/gMocren/include/{ => private}/G4GMocrenFileViewer.hh (100%) rename source/visualization/gMocren/include/{ => private}/G4GMocrenIO.hh (100%) rename source/visualization/gMocren/include/{ => private}/G4GMocrenMessenger.hh (100%) rename source/visualization/gMocren/include/{ => private}/G4GMocrenTouchable.hh (100%) delete mode 100644 source/visualization/management/GNUmakefile delete mode 100644 source/visualization/modeling/GNUmakefile diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 04e9ce6f97a..24989414287 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -4,7 +4,7 @@ # Software Management /CMakeLists.txt @drbenmorgan /cmake/ @drbenmorgan @gunterfolger -/config/ @gcosmo +/config/ @gcosmo @drbenmorgan /ReleaseNotes/ @gcosmo /source/global/ @gcosmo @drbenmorgan @gunterfolger @@ -29,10 +29,13 @@ # Generic Processes and Materials /source/materials/ @marcverderi @civanch /source/parameterisations/ @marcverderi +/source/parameterisations/channeling/ @pandola +/source/parameterisations/gflash/ @marcverderi /source/processes/biasing/ @marcverderi @civanch /source/processes/parameterisation/ @marcverderi @civanch # Electromagnetic Standard Physics +/source/processes/electromagnetic/ @civanch @dsawkey /source/processes/electromagnetic/highenergy/ @civanch @dsawkey /source/processes/electromagnetic/muons/ @civanch @dsawkey /source/processes/electromagnetic/polarisation/ @civanch @dsawkey @@ -54,10 +57,9 @@ /source/analysis/ @ihrivnac # User and Category Interfaces -# TBA: Hajime Yoshida /source/intercoms/ @koichi-murakami @makotoasai /source/interfaces/ @koichi-murakami @laurent-garnier -/environments/ @koichi-murakami +/environments/ @drbenmorgan @koichi-murakami # Visualization /source/graphics_reps/ @laurent-garnier @jiperl @johna1941 @@ -77,3 +79,6 @@ # Testing /tests/ @gunterfolger @whokion +# Other +/source/error_propagation/ @arceciemat +/source/externals/ @gcosmo @drbenmorgan @gunterfolger diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS index 79b2f988d38..649b61897ad 100644 --- a/.gitlab/CODEOWNERS +++ b/.gitlab/CODEOWNERS @@ -5,7 +5,7 @@ # Software Management /CMakeLists.txt @bmorgan /cmake/ @bmorgan @gunter -/config/ @gcosmo +/config/ @gcosmo @bmorgan /ReleaseNotes/ @gcosmo /source/global/ @gcosmo @bmorgan @gunter @@ -29,6 +29,9 @@ # Generic Processes and Materials /source/materials/ @maire @vnivanch @mverderi @dsawkey @asaim @ebagli /source/parameterisations/ @mverderi +/source/parameterisations/channeling/ @pandola +/source/parameterisations/gflash/ @azaborow +/source/parameterisations/ @mverderi /source/processes/biasing/ @mverderi @vnivanch @asaim /source/processes/biasing/generic/ @mverderi /source/processes/biasing/importance/ @ahoward @@ -36,10 +39,12 @@ /source/processes/parameterisation/ @mverderi @vnivanch @asaim # Electromagnetic Standard Physics +/source/processes/electromagnetic/ @vnivanch @mnovak +/source/processes/electromagnetic/adjoint @vnivanch @ldesorgh /source/processes/electromagnetic/highenergy/ @vnivanch @dsawkey /source/processes/electromagnetic/muons/ @vnivanch @dsawkey /source/processes/electromagnetic/polarisation/ @vnivanch @dsawkey -/source/processes/electromagnetic/standard/ @vnivanch @dsawkey +/source/processes/electromagnetic/standard/ @vnivanch @dsawkey @mnovak /source/processes/electromagnetic/xrays/ @vnivanch @dsawkey /source/processes/optical/ @vnivanch @dsawkey @@ -77,12 +82,11 @@ /source/persistency/gdml/ @gcosmo @witoldp /source/analysis/ @ihrivnac /source/analysis/g4tools/ @gybarran @ihrivnac -/source/analysis/test/ @gybarran @ihrivnac # User and Category Interfaces -/source/intercoms/ @asaim @hajime @kmura -/source/interfaces/ @hajime @kmura @lgarnier -/environments/ @hajime @kmura +/source/intercoms/ @asaim @kmura +/source/interfaces/ @kmura @lgarnier +/environments/ @bmorgan @kmura # Visualization /source/graphics_reps/ @allison @lgarnier @perl @@ -95,13 +99,18 @@ /source/visualization/RayTracer/ @asaim @allison @lgarnier @perl /source/visualization/Tree/ @allison @lgarnier @perl /source/visualization/VRML/ @stanaka @lgarnier @perl +/source/visualization/Vtk/ @allison @sboogert /source/visualization/gMocren/ @akimura @lgarnier @perl # Physics Lists -/source/physics_lists/ @gunter @wenzel +/source/physics_lists/ @gunter @wenzel @ribon @vnivanch # Other -/source/error_propagation @arce +/source/error_propagation/ @arce +/source/externals/ @gcosmo @bmorgan @gunter + +# Advanced Examples (Can be extended with responsibles per example) +/examples/advanced/ @guatelli @fromano @pandola # Novice+Extended Examples (Individual Examples assigned to Responsibles) /examples/basic/ @ihrivnac @ahoward @@ -184,6 +193,7 @@ /examples/extended/geometry/vecGeomNavigation/ @japost @ihrivnac /examples/extended/hadronic/FissionFragment/ @bwendt @ihrivnac +/examples/extended/hadronic/FlukaCern/ @ribon @ghugo @ihrivnac /examples/extended/hadronic/Hadr00/ @vnivanch @ihrivnac /examples/extended/hadronic/Hadr01/ @vnivanch @ihrivnac /examples/extended/hadronic/Hadr02/ @vnivanch @ihrivnac @@ -193,12 +203,15 @@ /examples/extended/hadronic/Hadr07/ @maire @ihrivnac /examples/extended/hadronic/Hadr08/ @ribon @ihrivnac /examples/extended/hadronic/Hadr09/ @ribon @ihrivnac +/examples/extended/hadronic/Hadr10/ @ribon @ihrivnac /examples/extended/hadronic/NeutronSource/ @maire @ihrivnac /examples/extended/hadronic/ParticleFluence/ @ribon @ihrivnac /examples/extended/medical/DICOM/ @arce @ihrivnac /examples/extended/medical/DICOM2/ @jmadsen @ihrivnac +/examples/extended/medical/dna/AuNP/ @dsakata @ihrivnac +/examples/extended/medical/dna/UHDR/ @ngoc @ihrivnac /examples/extended/medical/dna/chem1/ @matkara @ihrivnac /examples/extended/medical/dna/chem2/ @matkara @ihrivnac /examples/extended/medical/dna/chem3/ @matkara @ihrivnac @@ -207,6 +220,7 @@ /examples/extended/medical/dna/chem6/ @wshin @ihrivnac /examples/extended/medical/dna/clustering/ @matkara @ihrivnac /examples/extended/medical/dna/dnadamage1/ @ngoc @ihrivnac +/examples/extended/medical/dna/dnadamage2/ @ngoc @ihrivnac /examples/extended/medical/dna/dnaphysics/ @sincerti @ihrivnac /examples/extended/medical/dna/icsd/ @cvillagr @ihrivnac /examples/extended/medical/dna/jetcounter/ @ngoc @ihrivnac @@ -237,11 +251,12 @@ /examples/extended/optical/LXe/ @dsawkey @ihrivnac /examples/extended/optical/wls/ @dsawkey @ihrivnac +/examples/extended/parallel/MPI/ @kmura @ihrivnac /examples/extended/parallel/MPI/exMPI01/ @kmura @ihrivnac /examples/extended/parallel/MPI/exMPI02/ @kmura @ihrivnac /examples/extended/parallel/MPI/exMPI03/ @kmura @ihrivnac /examples/extended/parallel/MPI/exMPI04/ @ihrivnac -/examples/extended/parallel/TBB/ @dotti @ihrivnac +/examples/extended/parallel/TBB/ @jmadsen @ihrivnac /examples/extended/parallel/ThreadsafeScorers/ @jmadsen @ihrivnac /examples/extended/parallel/TopC/ @cooperma @ihrivnac @@ -251,7 +266,7 @@ /examples/extended/parameterisations/Par03/ @azaborow @ihrivnac /examples/extended/parameterisations/Par04/ @azaborow @ihrivnac -/examples/extended/persistency/gdml/ @witoldp @ihrivnac +/examples/extended/persistency/gdml/ @witoldp @gcosmo @ihrivnac /examples/extended/persistency/P01/ @witoldp @ihrivnac /examples/extended/persistency/P02/ @witoldp @ihrivnac /examples/extended/persistency/P03/ @arce @ihrivnac @@ -280,9 +295,6 @@ /examples/extended/visualization/standalone/ @allison @ihrivnac /examples/extended/visualization/userVisAction/ @allison @ihrivnac -# Advanced Examples (Can be extended with responsibles per example) -/examples/advanced/ @guatelli @fromano @pandola - # Testing /tests/ @gunter @syjun diff --git a/CMakeLists.txt b/CMakeLists.txt index de7fefbc165..50796f4d41d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,8 +30,8 @@ project(Geant4 DESCRIPTION "C++ toolkit for simulating the passage of particles through matter" HOMEPAGE_URL "https://geant4.cern.ch") set(${PROJECT_NAME}_VERSION_MAJOR 11) -set(${PROJECT_NAME}_VERSION_MINOR 1) -set(${PROJECT_NAME}_VERSION_PATCH 2) +set(${PROJECT_NAME}_VERSION_MINOR 2) +set(${PROJECT_NAME}_VERSION_PATCH 0) set(${PROJECT_NAME}_VERSION "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}.${${PROJECT_NAME}_VERSION_PATCH}") # - Prepend our own CMake Modules to the search path diff --git a/ReleaseNotes/Beta4.11.2-1.txt b/ReleaseNotes/Beta4.11.2-1.txt new file mode 100644 index 00000000000..7b938f97c72 --- /dev/null +++ b/ReleaseNotes/Beta4.11.2-1.txt @@ -0,0 +1,1001 @@ + + Geant4 11.2-beta-01 Release Notes + --------------------------------- + + 30 June 2023 + + Migration Notes & Main New Features + ----------------------------------- + + o Reviewed/simplified stream buffer and I/O classes. + o New Quantum State Simulation (QSS) integration method, an alternative + method of integration offering built-in interpolation capability and + enabling faster finding of the intersection of the trajectory with surfaces. + o Added possibility to set alternative grammar for schema validation + while reading a GDML file. + o Implemented single scattering per region, active inside the region + and disabled outside. + o Rewritten G4DNARuddIonisationExtendedModel G4DNA model, applicable for + scaled energy interval from 100 eV to 100 MeV. + o New submodule "channeling", implementing fast-simulation channeling model + in oriented crystals with Baier Katkov method for the calculation of + radiation probability, radiation point and parameters of photon production + as well as spectrum accumulation. + o Implemented interface allowing the coupling between Binary Cascade (BIC) + and Abla, i.e. using BIC for the cascade and then Abla for the nuclear + de-excitation. + o Extended Bertini model to allow the use of Abla as alternative post-cascade + nuclear de-excitation (the default de-excitation remains unchanged). + o Major extension of the INCLXX model to handle antiproton annihilation + at rest. All INCLXX-based physics lists now use INCLXX for the antiproton + annihilation at rest. + o Accurate modeling of elastic resonant scattering in heavy nuclei by + the use of DBRC (Doppler Broadening Rejection Correction) algorithm. + o Removed most calls to environment variables in hadronic physics classes. + o New physics list QBBC_ABLA, behaving as QBBC, but using the ABLA model + for nuclear de-excitation, instead of Precompound. + o New physics list QGSP_BIC_HPT, similar to QGSP_BIC_HP, but with + special treatment of elastic scattering of thermal neutrons activated. + o Added 6 new physics lists to physics factory, for "HPT" variants + (i.e. with special treatment of elastic scattering of thermal neutrons) + of physics lists with "HP" already present (FTFP_BERT_HPT, + QGSP_BIC_AllHPT, Shielding_HPT, ShieldingM_HPT). + o New physics list names Shielding_HP and ShieldingM_HP, as alias of, + respectively, Shielding and ShieldingM. + o First version of the TSG_[QT,X11,XT,WINDOWS]_ZB sub drivers, allowing for + interactive 3D rendering bypassing native graphics systems. + o TSG_QT driver temporarly enabled by default with OGL driver choice, + to allow support of Qt6. + o Supporting first implementation of a no-frills GUI-side scene tree + in the Qt GUI. + o Implemented "generic cutaways" in visualization. Clips, sections and + cutaways will now be available to *all* viewers (OpenGL still uses + OpenGL clip planes. Use another driver, e.g., TSG, to get "generic + cutaways). + o New extended hadronic example, FlukaCern, showing the interface between + Geant4 and (Fortran) FLUKA-Cern: this allows to get, in a Geant4 + application, hadron-nucleus reaction cross sections and final states + from FLUKA-Cern. + o Enabled first-level support for Qt6. + Fixed minimum supported version for Qt5 to be 5.9. + o Split build of G4persistency library into G4mctruth, G4geomtext and + (optional) G4gdml libraries. + o Added support for declaring headers of a source code module private. + Headers declared private are not installed. Partial refactoring of + modules. + o Removed deprecated GNUmake scripts for libraries build. + o Build option with VecGeom requires VecGeom-1.2.3 or higher. + o Requires CLHEP-2.4.6.4 for external CLHEP installation. + o New data sets: G4EMLOW-8.4, G4ABLA-3.3, G4INCL-1.1. + + ---------------------------------------------------------------------------- + + Technical Notes + --------------- + + o Tested platforms: + + Linux, gcc-8.3.1. + Tested on 64 bit architectures (Intel or AMD) with Linux CentOS8. + Versions of Geant4 have also been compiled successfully on other + Linux distributions, Ubuntu, Debian, Suse or other RedHat systems. + + MacOS 13.4, Apple LLVM/clang-14.0.3 (Intel or Apple Silicon). + + Windows/10 with Visual C++ 14.34 (Visual Studio 2022) + + o More verified configurations: + + Linux, with gcc-9.3/10.3/11.2/12.1/13.1, clang-10/11/12/13/14/15/16. + + Linux, with Intel-icx 2022.2/2023.1. + + MacOS 11.6 and 12.6, with Apple LLVM/clang-12/14. + + o External dependencies + + CLHEP-2.4.6.4, suggested for external installation of the CLHEP library. + + VecGeom-1.2.3 or later, for optional use of VecGeom geometry primitives. + + PTL-2.3.3, for external installation of the PTL tasking library. + + o New data sets: + + G4EMLOW-8.4, G4ABLA-3.3, G4INCL-1.1. + + Please refer to the Geant4 User Documentation: + http://cern.ch/geant4/support/user_documentation + for further information about using Geant4. + + ---------------------------------------------------------------------------- + +List of features and fixes included in this Beta release since 11.1.p02: + + o Configuration: + ------------- + + CMake: + o Added support for declaring headers of a source code module private. + Headers declared private are not installed; geant4_module_check reports + an inconsistency if a private header is used non-privately. + o Updated Qt MOC application for G4UI implementation in place of + G4UIbasic/G4UIcommon. + o Streamlined VTK cmake components. + o No longer link to QtPrintSupport, which is not used in the toolkit. + o Support finding and use of Qt6 on request for beta testing. + Fixed minimum supported version for Qt5; requiring Qt5 >= 5.9 if Qt5 + support is selected. + Find and refind Qt6OpenGLWidgets module in Qt6 for use by Qt/OpenGL + consumers. Find and refind Qt6OpenGLWidgets module in Qt6 for use + by Qt/OpenGL consumers. + o Handling TOOLSSG_[X11,XT,WINDOWS,QT]_ZB vis drivers. + o Export VTK_DIR and QtX_DIR to package cache to assist in refinding both. + o Added new capabilities to geant4_module_check.py script: given a + module, print list of modules that depend on it; print all modules + sorted in descending order of the number of modules using them; + show which headers from linked modules are included by a module in + its usage requirements output. + o Updated configuration scripts for splitting of G4persistency library. + o Removed setting of -D flags in Geant4Config to enable visualisation + drivers. Libraries now export compile definitions for what they + support to move to a "use on link" model. + o Removed obsolete and confusing GEANT4_BUILD_TESTS option and + configuration. + o Make linking a source code module to a final Geant4 library a + cmake-time error. + o Updated to datasets: G4ABLA-3.3, G4INCL-1.1 and G4EMLOW-8.4. + + + GNUMake: + o Removed deprecated GNUmake scripts for libraries build. + o Updated UI/interfaces include paths to reflect new organization. + o Updated scripts for splitting of the G4persistency library. + o No longer link to QtPrintSupport, which is not used in the toolkit. + + o Digits & Hits: + ------------- + + Applied clang-tidy corrections and general code modernization. + + Moved docstrings prior to function declarations for doxygen/IDE + compatibility. + + o Externals: + --------- + + CLHEP: + o Synchronised with CLHEP-2.4.6.4. + - Fixed compilation warnings for implicit type conversions on + macOS/XCode 14.1 in Random and Evaluator code. + - Fixed cases of C++20 deprecated arithmetics with unnamed enumerations + in Vector classes. + + g4tools: + o Updated to g4tools 6.2.0: + - Added support for Qt6 in glarea. + - Enabling Qt, Xt, X11, Windows viewers for the tools/zbuffer rendering. + - Fixed compilation warnings on Intel/icx compiler for mismatched array + bounds. Fixed Coverity defect. + + zlib: + o Updated to upstream zlib-1.2.13, retaining prior Geant4 patches. + + o Geometry: + -------- + + Applied clang-tidy fixes (readability, modernization, performance, ...). + + biasing: + o Use G4AutoLock in G4IStore and G4ImportanceAlgorithm instead of static + mutex data member. + + magneticfield: + o Added new Quantum State Simulation (QSS) integration method, an + alternative method of integration which creates approximation functions + for each coordinate (x,p), changing the interpolation polynomials when + the deviation from exact solution is larger than a threshold value. + Offers built-in interpolation capability, enabling faster finding of + the intersection of the trajectory with surfaces. + Currently restricted to using only with a pure magnetic field. + + navigation: + o G4PropagatorInField: added parameters for big steps. + New parameter 'fMaxStepSizeMultiplier', needed to reduce costly + unnecessary integration in QSS; new parameter 'fMinBigDistance' used + as minimum distance in case of long steps. Updated default values: + 'fLargestAcceptableStep' = 100 * meter ( from 1000* meter ); + 'fMaxStepSizeMultiplier' = 0.1 ( from 100 ). + + solids/Boolean: + o Added external Boolean processor visualisation interface + G4VBooleanProcessor. + + solids/specific: + o Use const iterator in G4Voxelizer::GetPointVoxel(). + o Fixed use of index in G4Tet::GetPointOnSurface(). + + o Global: + ------ + + Removed public interface to G4strstreambuf: G4strstreambuf becomes a + private implementation detail of G4ios. + Minimized coupling among G4cout/G4strstreambuf/G4coutDestination. + + Added G4debug output stream for logging messages at lower priority than + G4cout. If used with the Qt GUI, G4debug output is highlighted. + + G4PhysicsModelCatalog: added the new INCLXX model of antiproton + annihilation at rest. + + Added G4VERSION_REFERENCE_TAG macro to distinguish release/development + versions and cycle of the latter. + + Removed obsolete and no longer used G4SIunits header. + + Changed date for release 11.2-beta. + + o Graphics Representations: + ------------------------ + + Supporting first implementation of a no-frills GUI-side scene tree. + Added G4SceneTreeItem class, an aggregate of data members that represent + properties of objects in the scene (G4Scene). Its data members are + low-level types, so that it can be used across categories, avoiding + coupling. + + Added data member 'fExpanded' to G4SceneTreeItem. + + o Intercoms: + --------- + + Replaced direct access to G4cout/etc stream buffers with call to + G4coutDestination installer function. + + Implemented ReceiveG4debug() for G4UIsession et al. + + Applied clang-tidy and clang-format fixes plus normal ordering of + docstrings/access specifications. + + Removed unused/pointless operators. Use C++17 type aliases. + + Refactored G4UIaliasList to simplify implementation and in particular + memory management. + + Simplified G4UImessenger implementation. + + Factor G4UIcommand/parameter range validation functions to reduce code + duplication. + + Moved clear implementation detail classes to private headers. + + o Interfaces: + ---------- + + Implemented ReceiveG4debug for concrete sessions. For the Qt GUI + (G4UIQt) HTML code is added in order to highlight G4ddebug output. + + First implementation of user-specified output styles: "/gui/outputStyle". + Output streams: cout cerr warn error debug (extendible, see + G4VInteractiveSession header). Only used by G4UIQt at present. + + Support for first implementation of a no-frills GUI-side scene tree. + + Refactored modules into G4UIcore and G4UIimplementation to isolate + core/always on functionality from concrete UIs requiring external + libraries. Both modules are still built into a G4interfaces library, + with no change to user interface for applications. + + Applied clang-tidy and clang-format fixes, together with + public/protected/private ordering in headers. + + G4UIQt: fixed mutex bug in implementation of G4UIQt::ReceiveG4debug(); + This "workaround" is to make sure all flushed output appears on the + terminal after a crash. Fixed QSplitter issue, necessary for Qt6 support. + Introduced new scene tree - Add colour choice. + Introduced widget for 'mouseDoubleClickEvent'. Implemented callbacks + SceneTreeItemExpanded() and SceneTreeItemCollapsed(). + Improved command; allow for leading space in 'pvpath'. Code tidying. + Reworked double-click to use QTreeWidget::itemDoubleClicked. + + Removed header no longer used in Qt5, which is also not present in Qt6. + Removed support for Qt < 5.9 in CMake script. + + Export public compile definitions to indicate availablity of specific UIs. + Moves to "use on link" model. + + o Materials: + --------- + + Applied standard and extended clang-tidy fixes, normal order access + specifiers and docstrings; applied clang-format. + + o Parameterisations: + ----------------- + + New submodule "channeling", implementing fast-simulation channeling + model in oriented crystals with Baier Katkov method for the calculation of + radiation probability, radiation point and parameters of photon production + as well as spectrum accumulation. + + o Particles: + --------- + + G4IonTable: fixed GetIon() method for the case when the ground state level + of an isomer is floating. Removed some code duplication in FindIon() and + GetIon() methods. + + G4NuclideTable: taken into account the possibility of floating ground state + levels. + + G4Ion: added protection against unphysical index of floating level. + + Applied core/recommended clang-tidy fixes. + + o Persistency: + ----------- + + Split build of G4persistency library into G4mctruth, G4geomtext and + (optional) G4gdml libraries. + + GDML: + o Added possibility to set alternative grammar for schema validation + while reading a GDML file. This can be achieved by either calling the + new method SetImportSchema(..) from G4GDMLParser, providing the + absolute path and file name of the XML schema, or by using the new + UI command: /persistency/gdml/schema "[absolute_path]/schema_filename" + before importing the GDML file. + By setting a locally stored alternative grammar, it will instruct the + parser to ignore the default schema specified in the GDML file and + therefore no longer require access to the network for retrieving the + schema. + o Allow setting of alternative grammar for schema validation via an + environment variable G4GDML_SCHEMA_FILE; it overrides the value set by + SetImportSchema() if both are non-empty strings. Forcing parser to + ignore any schema set in the input GDML file. Checking of grammar and + schema override will fail on missing schema. + o In G4GDMLWriteStructure::ExportSD(), use GetMasterSensitiveDetector() + from logical volume to retrieve the shadow pointer of the sensitive + detector. + + o Physics Lists: + ------------- + + Constructors: + o electromagnetic: + - G4EmBuilder, G4EmModelActivator, G4EmStandardPhysicsSS: fixed issue + in single scattering model definition per region for e+, e-, and + light hadrons. Addressing problem report #2530. + - G4EmBuilder, G4EmStandardPhysicsSS: use new constructor for the + G4CoulombScattering process. + - G4EmModelActivator: use new constructor for the G4CoulombScattering + process; allow adding G4EmStandardPhysicsSS on top of + G4EmStandardPhysics_option3. + Implemented single scattering per region by adding extra single + scattering process, which is active inside the region and not active + outside; multiple scattering and single scattering processes for a + given charged particle are disabled in the region. + Addressing problem report #2530. + - New G4ChemDissociationChannels and G4ChemDissociationChannels_option1 + classes. + - G4GammaGeneralProcess: added method GetGammaNuclear(). + - G4EmParticleList: added method EmChargedPartNames(), returning a + minimal list of charged EM particles. + - Fixed compilation warnings on macOS/XCode for implicit type + conversion. + o factory: + - Added G4StoppingPhysicsWithINCLXX in G4RegisterPhysicsConstructors. + o gamma_lepto_nuclear: + - G4EmExtraPhysics: activate biasing in processes, not in + cross-sections. + o constructors/hadron_elastic + - New class G4HadronElasticPhysicsHPT, inheriting from + G4HadronElasticPhysicsHP and activating the special treatment of + elastic scattering of thermal neutrons. + - G4HadronElasticPhysicsHP: changed method ConstructProcess() from + "final" to "override", to be able to define the ConstructProcess() + method for the derived class G4HadronElasticPhysicsHPT. + o constructors/hadron_inelastic + - New class G4HadronInelasticQBBC_ABLA, similar to + G4HadronInelasticQBBC_ABLA, except that for the final-state of + nuclear inelastic interactions of charged pions and nucleons + projectiles, the ABLA model is utilized for nuclear de-excitation, + instead of the usual Precompound/de-excitation. + Meant for testing purposes. In principle, these couplings with ABLA + nuclear de-excitation can be extended to all types of projectiles and + to other reference physics lists, but, for the time being, it is + restricted to pion+, pion-, proton and neutron, and only for QBBC. + o constructors/stopping (phys-ctor-stopping-V11-01-00) + - G4StoppingPhysicsWithINCLXX: new class, similar to G4StoppingPhysics, + with the only difference that the INCLXX model (instead of FTFP) is + utilized for the antiproton annihilation at rest. + + lists: + o New class QBBC_ABLA, which is similar to QBBC, except that for + hadron inelastic the constructor G4HadronInelasticQBBC_ABLA is used, + instead of G4HadronInelasticQBBC. This means that the physics list + QBBC_ABLA behaves as QBBC, with the only difference that for the + final-state of nuclear inelastic interactions of charged pions and + nucleons projectiles, the ABLA model is being used for nuclear + de-excitation, instead of the usual Precompound/de-excitation. + o New class QGSP_BIC_HPT, which is similar to QGSP_BIC_HP, but with + special treatment of elastic scattering of thermal neutrons activated. + o Use the new class G4StoppingPhysicsWithINCLXX (instead of + G4StoppingPhysics) in INCLXXPhysicsListHelper: all the INCLXX-based + physics lists use INCLXX for the antiproton annihilation at rest. + o G4PhysListFactory: added 6 new physics lists, corresponding to "HPT" + variants (i.e. with special treatment of elastic scattering of thermal + neutrons) of physics lists with "HP" already present (FTFP_BERT_HPT, + QGSP_BERT_HPT, FTFP_INCLXX_HPT, QGSP_INCLXX_HPT, QGSP_BIC_HPT, + QGSP_BIC_AllHPT, Shielding_HPT, ShieldingM_HPT). + Of these, only one (QGSP_BIC_HPT) corresponds to a concrete new physics + list, whereas the others are obtained from the "HP" physics lists by + adding the physics constructor G4ThermalNeutrons. + Introduced new physics list names Shielding_HP and ShieldingM_HP, as + alias of, respectively, Shielding and ShieldingM. These new aliases + allow to have a consistent notation _HPT for all the HP-based physics + lists when the special elastic scattering treatment of thermal neutrons + is enabled. + o Shielding: added information note that the new physics list names (to + be used with the physics list factory), Shielding_HP and ShieldingM_HP, + are equivalent to, respectively, Shielding and ShieldingM. + o G4PhysListFactoryMessenger: added the new UI command + "/physics_lists/factory/addThermal" to enable the special treatment of + elastic scattering of thermal neutrons for HP-based physics lists. + + o Electromagnetic Processes: + ------------------------- + + DNA: + o Reorganised multiple material model of PTB. G4VDNAModel plays like a + data layer for multiple material models. The concrete models are + independent of G4DNAModelInterface. + o G4DNARuddIonisationExtendedModel: rewrite of the model, applicable for + scaled energy interval from 100 eV to 100 MeV. If for an ion data is not + available, proton x-section and effective charge are used, sampling of + delta-electron is done using the two regions regression method. + Sharing data between threads. + o Introduced G4DNAMaterialManager to handle available DNA materials + and keep DNA cross-section data shared across threads. + o Replaced string to material index and some code cleanup in PTB models. + o Added material pointer members for each concrete PTB models. + o Code cleanup in G4DNAModelInterface for the model combination of + different materials. + o Added PTB model data to G4DNAMaterialManager singleton. + Updated RegisterModel() function with new structure. + o Added DNA cross-section to dna_option6. + o Use analytical method for DNA material in option6, water is unchanged. + Minor correction for DNA material in option6. + o Added time structure (pulsed beam) to water radiolysis + (G4VUserPulseInfo). + o Corrected initial values of G4DNAEventScheduler. + o Use analytical method for DNA material in option6, water is unchanged. + Minor correction for DNA material in option6. + o Modified DNA cross-section file name, according to new G4EMLOW-8.4 data + set. + o Fixed Coverity defects for uninitialised scalar variables. + o Fixed compilation warnings on macOS/XCode for implicit type conversions. + + High Energy: + o G4GammaConversionToMuons, G4AnnihiToMuPair: removed using namespace std + and applied cling-tidy base fixes. + + Low Energy: + o In G4LivermorePhotoElectricModel and G4LivermoreRayleighModel removed + calls to environment variables and use G4EmParameters method instead. + Added lock for reading data on the fly; minor code formatting. + o G4LivermoreGammaConversionModel, G4LivermoreGammaConversion5DModel: + fixed Spline interpolation by calling FillSecondDerivatives(). + o G4LowEWentzelVIModel: updated according to Coulomb scattering models. + o Use access to G4LEDATA via G4EmParameters for G4LivermoreComptonModel, + G4LivermoreGammaConversion5DModel and G4LivermoreGammaConversionModel. + o Applied clang-tidy and clang-format to Livermore code. + + Standard: + o G4UrbanMscModel: check IsLocked() method before definition of lateral + displacement algorithm and positron correction; improved code + formatting. + o G4CoulombScattering: added SetCombined() method allowing the user to + configure the process; improved code formatting and initialisation. + Added constructor with changed signature, which uses flag "isCombined" + instead of process name. + Added extra constructor to address all existing cases; + for pure single scattering, integral method type is changed and Spline + interpolation is used. Addressing problem report #2530. + o G4UrbanMscModel: code optimisation; no functional changes. + o Code cleanup in G4PAI* classes. + o Removed use of std::getenv() from model classes, use G4EmParameters + instead. + o G4eCoulombScatterinModel: improved initialisation and code formatting. + o G4BraggModel, G4BraggIonModel: use proton stopping data for for all + ions except alpha; make data-sets pointers static. + Addressing problem report #2532. + o G4BetheHeitlerModel, G4PairProductionRelModel, G4eBremsstrahlungRelModel, + G4SeltzerBergerModel: reorganized initialisation. Initialisation of + static element data is performamed only once for the first object + independently on how many objects of this kind is created in a thread. + Results of simulation are identical. Addressing problem report #2543. + o In G4BetheBlochModel, G4BraggIonModel and G4BraggModel, updating + effective charge of an ion at each step of simulation or at each call + to G4EmCalculator. + o G4eBremsstrahlung, G4SeltzerBergerModel: avoid changing LPM flag at + initialisation; avoid repeating base class initialisation; improved + comments in code. + o G4eBremsstrahlungRelModel: use LPM flag from G4EmParameters and + improved comments in code. + o G4WaterStopping, G4hIonisation: codee clean-up. + o G4ionIonisation: do not use G4WaterStopping; code clean-up. + o Updated hadron/ion ionisation models; initialise stopping power data + once: PSTAR and ICRU90 in G4BraggModel, ASTAR in G4BraggIonModel, + ICRU73 and ICRU90 ion (Z>2) data in G4LindHardSorensenIonModel. + o G4BraggIonModel inherits from G4Bragg model; fixed stopping power + of heavy ions at moderate energies. + o G4LindhardSorensenIonModel: use G4BraggModel for preliminary computation + of DEDX at initialisation for G4GenericIon instead of G4BraggIonModel, + which fixes a problem of low-energy ion tracking recently introduced. + + Utils: + o G4EmParameters: added extra member and access method to G4LEDATA path + allowing checking of the environment variable for the EM data only once. + o G4VEnergyLossProcess: make more straightforward computation of ion + effective charge. + o G4VEmModel: trigger computation of ion effective charge for + G4EmCalculator. Use LPM flag from G4EmParameters. + o G4ionEffectiveCharge: minor optimisation. + o G4VEnergyLossProcess, G4VEmProcess, G4VMultipleScattering: use flag of + master thread from G4LossTableManager. + o G4VEnergyLossProcess: added extra protection excluding negative range; + renamed class member; changed condition to stop low-energy ion, use + kinetic energy and not scaled energy. + Added extra protection for the case of negative range of low-energy + particles. Addressing problem report #2542. + o G4LossTableManager: reserve memory for internal vectors; simplified + destructor; move a part of initialisation of class members to header. + o G4EmCorrections: code formatting; removed lock of threads, use instead + flag from G4LossTableManager. + o Improved printout in G4EmCalculator. + o G4LossTableBuilder, G4VEnergyLossProcess: improved debug printout. + + o Generic Processes: + ----------------- + + Scoring: + o Applied core clang-tidy/format fixes. + o Make G4EnergySplitter a private implementation detail of the module. + Make dependency to 'intercoms' private. + + Transportation: + o In G4TransportationParameters, added a method to set both warning and + important energies; added method to report lock errors. + Improved reporting of inconsistent changes of 'warning' & 'important' + energies (not only enforce warning_E < important_E but also warn about + violations). + + o Hadronic Processes: + ------------------ + + cross_sections + o Removed calls to environment variable G4PARTICLEXSDATA, use + G4HadronicParameters access method instead. + o In G4CrossSectionDataStore, reduced number of calls to environment + variables, which are done only to print output for documentation. + Removed remaining calls to getenv() and use G4HadronicParameters + instead. + o G4ElNeutrinoNucleusTotXsc: uncommented methods for interface with + G4ElNeutrinoNucleusProcess. + o G4GammaNuclearXS: general code clean-up: instantiate data only once + for all instances of this cross-section class; upload data for all + elements before the first run; simplified computation of isotope + cross-section; added extra public method LowEnergyCrossSection(). + More accurate usage of cache; simplified GetIsoCrosssection() and + SelectIsotope() methods. + o Fixed compilation warnings for implicit type conversions on + macOS/XCode>=14.1. + + management + o G4HadronicProcess: removed usage of "DebugFlag" and "RandomFile". + Replaced access to environment variables with call to + G4HadronicParameters. Added extra G4Exception for the case where a + worker cannot share initialisation with the master thread. + Addressing problem report #2528. + Improved diagnostics. + o G4HadronicProcessStore: avoid checking of environment variables, call + G4HadronicParameters instead. + + models/abla + o G4AblaInterface: implemented method ApplyYourself() to allow the + coupling between Binary Cascade (BIC) and Abla, i.e. using BIC for the + cascade and then Abla for the nuclear de-excitation. + + models/binary_cascade + o G4BinaryCascade, G4BinaryLightIonReaction: avoid calls to getenv(), + use G4HadronicParameters instead. + + models/cascade + o Extended Bertini model to allow the use of Abla as alternative + post-cascade nuclear de-excitation (the default de-excitation remains + unchanged). + There are two ways to set Abla as de-excitation for Bertini: via C++ + interface, by calling G4CascadeInterface::useAblaDeexcitation(); + via environmental variable, by setting G4CASCADE_USE_ABLA=1. + o G4AblaDeexcitation: new class that does the nuclear de-excitation, + after the Bertini cascade, by using the Abla model, and then tranforms + the secondaries in Bertini objects. + o G4CascadeInterface: added new method useAblaDeexcitation() which sets + Abla as nuclear de-excitation; this method can be called directly by the + user, or automatically in the constructor of the class when the flag + G4CascadeParameters::useAbla() is enabled. + o G4InuclCollider: added new method useAblaDeexcitation() which creates + an instance of the new class G4AblaDeexcitation. + o G4CascadeParameters: added Boolean flag that enables the Abla + de-dexcitation model in the case that the new environmental variable + G4CASCADE_USE_ABLA is set. + o Fixed coverity defect for incorrect integer divide in fission part of + G4EquilibriumEvaporator::deExcite(). + + models/de_excitation + o G4LevelReader: allow to add more levels of a given isotope than the + hardcoded limit=635 (max number of levels in G4LEVELGAMMADATA). + Addressing problem report #2534. + o G4LevelManager: added extra public accessor method allowing users to + check level energies and other parameters. + o G4DeexPrecoParameters: moved part of initialisation to header; do not + use autolock, use internal flag instead to allow only one dump of + paramenters; print all pre-compound parameters, separate pre-compound + and de-excitation printouts. + o G4NuclearLevelData: fixed uploading of data before the run. + + models/inclxx + o Major extension of the INCLXX model to handle antiproton annihilation + at rest. + + models/lend + o Fixed coverity defect; G4LENDGammaCrossSection::SelectChannel() may + return negative array index, same in G4LENDGammaCombinedCrossSection; + initialize 'iChannel' to a positive number. + + models/particle_hp + o Accurate modeling of elastic resonant scattering in heavy nuclei by + the use of DBRC (Doppler Broadening Rejection Correction) algorithm. + In G4ParticleHPManager, added new member variables and corresponding + methods, related to the DBRC algorithm. + In G4ParticleHPMessenger, added new UI commands to enable DBRC (which + is off by default) and to specify its parameters. + In G4ParticleHPVector, added new method GetMaxY() to provide the maximum + cross-section in the interval between two kinetic energy values. + In G4ParticleHPChannel, modified method ApplyYourself(), with an extra + argument, for a special treatment of the elastic channel. + In G4ParticleHPElastic, modified G4ParticleHPChannel::ApplyYourself() + call, with an extra parameter. + In G4ParticleHPElasticFS, implemented the DBRC algorithm in the new + method GetBiasedThermalNucleus(); modified the method ApplyYourself() + to call the new method GetBiasedThermalNucleus(); introduced two more + new methods, InitializeScatterKernelParameters() and + RegisterCrossSection(), and corresponding new member variables. + o G4ParticleHPMessenger: when changing the neutron kinetic energy + threshold for applying the SVT algorithm, as part of the setting of the + DBRC (Double Broadening Rejection Correction) algorithm, update the + corresponding value in G4HadronicParameters. + o G4ParticleHPManager: removed the neutron kinetic energy threshold for + applying the SVT (Sampling of the Velocity of the Target) algorithm, as + this parameter is in G4HadronicParameters. + o G4ParticleHPElasticFS: get the neutron kinetic energy threshold for + applying the SVT algorithm from G4HadronicParameters; in the method + GetBiasedThermalNucleus(), corrected mistake in the interval where the + max neutron cross-section is considered for rejection. + o G4ParticleHPDeExGammas: removed internal counter; delete only objects + which are created. + o Removed G4ParticleHPGamma and G4ParticleHPLevel classes. + o G4ParticleHPEnergyDistribution, G4ParticleHPContAngularPar, + G4ParticleHPEnAngCorrelation: fixed Coverity warnings. + o Applied clang-format and clang-tidy fixes. + + models/parton_string + o G4BaryonSplitter, G4MesonSplitter, G4QGSMSplittableHadron, G4SPBaryon: + some code cleanup. + + models/qmd + o Fixed Coverity defect for uninitialized variable. + o Code cleanup in G4QMDMeanField in attempt to fix false positive on + gcc-13.1 diagnostics on alma9. + + models/radioactive_decay + o Fix in stairstep beta decay spectrum. Addressing problem report #2367. + Created new class G4BetaSpectrumSampler to sample a sloped distribution + instead of a flat one. Changed G4BetaMinusDecay and G4BetaPlusDecay to + use the above sampler. Added protection against very large arguments + in std::exp within G4BetaDecayCorrections::ModSquared. + o Fixed Coverity defect for uninitialized data in G4BetaSpectrumSampler, + G4RadioactiveDecay and G4BetaSpectrumSampler. + + processes + o G4(El,Tau)NeutrinoNucleusProcess, G4NeutrinoElectronProcess, + G4MuNeutrinoNucleusProcess: update neutrino cross-section biasing + in selected detector-region. + o G4ElNeutrinoNucleusProcess: updated process name to be + "el-neutrino-nucleus". + o New process G4NuVacOscProcess or 3-flavour neutrino oscillation in + vacuum. + o G4NeutronGeneralProcess: added two access methods, an extra set method + and removed possible variable shadowing. + o G4HadronElasticProcess, G4NeutronGeneralProcess: fixed problems + identified by Coverity. + o G4TauNeutrinoNucleusProcess: cleanup of constructor and destructor to + fix Coverity warning. + + stopping + o G4HadronicAbsorptionINCLXX: new class to handle annihilation at rest by + INCLXX; for the time being, only for antiproton. + + util + o G4HadronicParameter: introduced the neutron kinetic energy threshold + for applying the SVT (Sampling of the Velocity of the Target) + algorithm. This is needed to have a consistent value in methods + GetBiasedThermalNucleus() in G4Nucleus and G4ParticleHPElasticFS + respectively, to avoid circular dependency with 'particle_hp' module. + Removed two obsolete environment variables and access methods; added + flag for charge exchange. + Added class members defined via environment variable and access methods + for these members, this allows to remove the majority of calls to + std::getenv(). + Added two strings and extra methods to access environment variables used + in G4HadronicProcessStore. These variables are not used in ordinary runs + but are checked in each thread and for each particle. With this update + these variables will be checked only once. + Added G4Exception for the case, when environment variable + G4PARTICLEXSDATA is not defined. + Added extra Boolean method for accessing debug flag for Binary Cascade, + which may be defined via environment variable G4BINARY_CASCADE_DEBUG. + o G4Nucleus: in the method GetBiasedThermalNucleus(), get the neutron + kinetic energy threshold for applying the SVT algorithm from + G4HadronicParameter in method DoKinematicsOfThermalNucleus(), and + corrected the way to pass the last parameter, by reference instead of + by value. + Split the method GetBiasedThermalNucleus() into two parts, by + introducing a new public method, DoKinematicsOfThermalNucleus(), + which is used also by G4ParticleHPElasticFS to implement the DBRC + algorithm. + + o Run: + --- + + Refactor random state file copying to use std::filesystem for portability. + + Applied core and optional clang-tidy fixes, plus clang-format and tidying: + removed obsolete comments/dead blocks; normal order access specifiers and + make docstrings Doxygen/IDE compatible. + + o Track & Tracking: + ---------------- + + Applied standard and extended set of clang-tidy/format fixes. + + o Visualization: + ------------- + + Isolated private headers and updated dependencies. + + Link to new G4UIcore/UIimplementation modules in place of former + G4UIbasic/UIcommon. + + Exporting public compile definitions to indicate availablity of specific + drivers. Moves to "use on link" model. + + management: + o Introducing scene tree in G4VViewer. The scene tree is a tree of + G4SceneTreeItem objects; its root is a data member fSceneTree of all + viewers by virtue of G4VViewer inheritance. The root G4SceneTreeItem + has children that represent the models (G4VModel sub-classes) in the + scene. For a G4PhysicalVolumeModel (detector components), its children + and children's children, etc., imitate the geometry hierarchy of that + model. These descendants are called "touchables". There may be more than + one G4PhysicalVolumeModel, depending how the user creates his/her scene. + The scene tree is reviewed, and updated if necessary, at every pass of + G4VSceneHandler::ProcessScene(). This is called a "kernel visit". + A kernel visit is triggered by vis commands (e.g.,"/vis/viewer/rebuild") + and by a viewer if deemed necessary. For example, a kernel visit may not + be required for a rotation, zoom, etc., but required for a change from + surface to wireframe. The idea is that the scene tree can be passed to a + GUI, the GUI can create a tree widget, and interactions with it raise UI + commands such as "/vis/scene/activateModel", "/vis/set/touchable" and + "/vis/touchable/set/"... + The viewer decides if this requires a kernel visit, otherwise it must + update 'fSceneTree' itself (utilities are provided). + o Add code to build a scene tree in G4VSceneHandler::ProcessScene(). + o First implementation of a no-frills GUI-side interactive scene tree. + Works with touchables; can change the visibility of a touchable. + A view can be prepared with a graphical driver, such as OGL, TSG, OI + or Vtk, and transferred it to Ray Tracer, TOOLSSG_OFFSCREEN, etc., + simply with "/vis/open RayTracer", etc. + o Implemented "generic cutaways". It relies on the Boolean Processor + which handles the Boolean operations on polyhedral representations of + solids. Clips, sections and cutaways will now be available to *all* + viewers (OGL viewers still use OpenGL clip planes). + o New scene tree: implementing expand and collapse of touchables. + Expand only to depth 2, thereafter sub-trees are collapsed. + When the scene tree is expanded or collapsed it is remembered in + the viewer-side scene tree and may be propagated to other viewers. + o G4VSceneHandler: protect material pointer used to name G4Mesh item. + If null, use name of container. It avoids cases of crash when a G4Mesh + is in a parallel world. + In RequestPrimitives(), improved test for invalid Boolean solid. + In CreateSectionSolid() and CreateCutawaySolid(), improved algorithms. + o In G4VViewer::SceneTreeScene::FindOrInsertTouchable(), fixed Coverity + warning. Augmented to handle depth of descent. + o G4VVisCommand: added static G4SceneTreeItem 'fExistingSceneTree', used + for remembering scene tree of previous viewer. + o G4VisCommandsSceneHandler: if there is an existing viewer, store scene + tree. + o G4VisCommandsViewer: if there is an existing viewer, store scene tree. + Copy existing scene tree to the new viewer. + o With "/vis/viewer/select", call UpdateGUISceneTree() to ensure the + scene tree of the newly selected viewer is in sync. + o G4VViewer: add scene tree and related functionality. + Improved G4VViewer::SceneTreeScene::FindOrInsertTouchable(). + Simplified ghost-touchable transition. + Added "utility" function UpdateGUISceneTree(). + o Correct Special Mesh Rendering Option default. + o G4ViewParameters: initialise fSpecialMeshRenderingOption' + (meshAsDefault). + o Default special mesh rendering for viewers which can render all objects. + o Improved vis-side scene tree creation and maintenance. + o G4VisCommandsTouchableSet: with "/vis/touchable/set/visibility", + added one-time warning about circumstances in which the command may + appear not to work. + o In G4VisExecutive, temporary divert OGL to TSG for allowing support of + Qt6. Declare TOOLSSG_[X11,XT,WINDOWS,QT]_ZB drivers. + o In G4VisCommandsTouchable, introduced UI command + "/vis/touchable/twinkle". + o Improved layout in G4VViewer::SceneTreeScene::FindOrInsertModel(). + o Code cleanup in G4VUserVisAction: made protected Draw() virtual method; + improved comments. + o Fixed compilation warning for implicit type conversion on + macOS/XCode>=14.1. + + modeling: + o G4VModel: removed unnecessary reference to G4PhysicalVolumeModel. + o G4PseudoScene: added G4VisAttributes (this was always available, but + never previously made onward available to sub-classes). + o Added static utility G4PhysicalVolumeModel::GetPVNamePathString(). + o Updates to implement "generic cutaways". + o G4PhysicalVolumeModel: in DescribeSolid(), improved tests for invalid + Boolean solid in code for section and cutaway. Fixed Coverity warnings. + + OpenGL: + o Removed obsolete G4OPENGL_VERSION_2 symbol and G4OpenGLVboDrawer class. + o Make "modeling" module a private dependency, unless Qt is active, when + it must be public. + o First implementation of a no-frills GUI-side scene tree. + o G4OpenGLQtViewer: disabled "old" scene tree. + o No longer link to QtPrintSupport, which is not used in the toolkit. + o Removed support for Qt less than version 5.9. Clarify remaining version + checks using QT_VERSION_CHECK instead of raw hex. + o Minimum build and code changes required to compile/link against both + Qt5 and Qt6. + + OpenInventor: + o First implementation of a no-frills GUI-side scene tree. + o No longer link to QtPrintSupport, which is not used in the toolkit. + o Support compilation against Qt5 and Qt6. + + Qt3D + o Support compilation against Qt5 and Qt6. + + ToolsGS: + o First version of the TSG_[QT,X11,XT,WINDOWS]_ZB sub drivers, allowing + the rendering with g4tools/zbuffer (the same used by TSG_OFFSCREEN). + They allow interactive 3D rendering bypassing native graphics + systems. It is fully standalone over the standard C/C++ libs and the + standard pixmap logic of X11, Xt, Qt, Windows, running only the CPU. + Tested with Qt5 and Qt6. + o First implementation of a no-frills GUI-side scene tree. + o No longer link to QtPrintSupport, which is not used in the toolkit. + o Link to Qt6OpenGLWidgets library when using Qt6 to access QOpenGLWidget. + o Fixed Coverity warnings. + + Vtk: + o Refactor of VTK viewer with pipelines, geometry stores; improved 2D + rendering, streamlined VTK cmake components. + o G4VtkSceneHandler: text justification to given coordinate. + o Separated pipelines into source and include files. + o Use class inheritance for pipelines G4VVtkPipeline and added ability + to chain pipelines. + o Separated interactive cutters, clippers. + o 2D transparent image overlay. + o Improved geant4 commands (/vis/vtk/..). + o Added vtkUnstructuredGridPipeline for special mesh rendering. + o Applied clang-tidy and clang-format fixes. + o Removed dead code and no-ops. + o Fixed compilation warnings for implicit type conversions on + macOS/XCode>=14.1. + + o Data Sets: + --------- + + G4EMLOW-8.4: + o Updated microelec data for electrons. + o Updated DNA data. + o Added README to all subdirectories. + + G4ABLA-3.3: + o New file named "mass2016.dat" with experimental atomic mass evaluation + from 2016. + o New file "mass2020.dat" with the binding energies from the atomic mass + evaluation AME2020. + + G4INCL-1.1: + o Addec new files for antiproton annihilation at rest of INCL. + + o Examples: + -------- + + Updated reference outputs, macros, READMEs and scripts. + + advanced/eFLASH_radiotherapy + o Removed visualization in batch mode. + + advanced/fastAerosol + o General code cleanup, including clang-tidy. + + advanced/ICRP110_HumanPhantoms + o Now building two executables: ICRP110phantoms and ICRP110standalone. + ICRP110standalone allows allows visualisation of the phantom without + the overhead of the run manager and initialising of all the physics + tables (i.e. cannot visualise trajectories). + o standalone.mac: disable auto refresh *before* creating scene. + For auto-refresh viewers, without this change the viewer attempts to + draw the detector with the default view parameters, and in the case of + this phantom, it overwhelms the graphics system. + o This phantom should be displayed with special mesh rendering. + + advanced/ICRP145_HumanPhantoms + o Introduce ICRP145standalone. Building two executables: ICRP145phantoms + and ICRP145standalone. ICRP145standalone allows visualisation of the + phantom without the overhead of the run manager and physics tables + and geometry initialisation. Of course, you cannot run or visualise + trajectories. Disabled auto refresh *before* creating scene. + + advanced/stim_pixe_tomography + o New application for simulating three-dimensional STIM or PIXE tomography + experiments. References: NIM Phys.Res. B (536) 2023: 38-44; + Phys. Med. (94) 2022: 85-93; Phys. Med. (65) 2019: 172-180. + + advanced/xray_TESdetector + o New example of the application of Geant4 in a space environment. + It represents an x-ray detector derived from the X-IFU, the X-ray + spectrometer designed and developed by the European Space Agency (ESA) + for use on the ATHENA telescope. The main purpose of the simulation is + the estimation of the particle radiation background impacting on the + detector. + + advanced/xray_SiliconPoreOptics + o New example demonstrating an application of Geant4 in space environment. + The geometry used in this example represents a single reflective pore + used to simulate on a smaller scale the effect of the millions of pores + forming the mirror of the ATHENA Silicon Pore Optics (SPO), as described + in: V.Fioretti et al., STI: Ultraviolet to Gamma Ray. Vol.10699. SPIE, + 2018. + The main purpose of the simulation is the estimation of the induced + residual background at the pore exit caused by proton scattering at + grazing angles. + + basic/B4 + o In PrimaryGeneratorAction, default e-, 300 MeV. + o RunAction: adjusted binning of histograms. + o Updated run1.mac and run2.mac macros. + + extended/biasing/ReverseMC01 + o Removed inclusion of unneeded and now obsolete G4strstreambuf header. + + extended/electromagnetic/TestEm0 + o New input macro ion.mac. + o RunAction: restore output format. + o Code revision of all headers. + + extended/electromagnetic/TestEm1 + o New input macro etaDecay.mac. + o PhysicsList::AddRadioactiveDecay(): set ARM false. + o Code revision of all headers. + + extended/electromagnetic/TestEm2 + o Code revision of all headers. + + extended/electromagnetic/TestEm3 + o Compute and plot energy leakage and total energy. + o Run: fixed division by zero for the case if energy deposition + in a layer is zero. + o Code revision of all headers. + + extended/electromagnetic/TestEm4 + o RunAction: print run conditions and histograms statistics. + o Code revision of all headers. + + extended/electromagnetic/TestEm5 + o Code revision of all headers. + + extended/electromagnetic/TestEm7 + o Added extra macro for test muon dEdx and Range. + + extended/electromagnetic/TestEm8 + o Applied clang-format and code revision of all headers. + + extended/electromagnetic/TestEm11 + o Compute and plot energy leakage and total energy. + o In PhysicsList::RadioactiveDecay(): setARM = false. + o Revised headers. + + extended/electromagnetic/TestEm12 + + extended/electromagnetic/TestEm13 + + extended/electromagnetic/TestEm14 + o Code revision of all headers. + + extended/electromagnetic/TestEm18 + o Fix in destructor of StakingAction. + o Code revision of all headers. + + extended/hadronic/FlukaCern + o New Geant4-FLUKA interface and two hadronic examples, providing access + to FLUKA-Cern hadron-nucleus inelastic physics: + - ProcessLevel/CrossSection: allows the study of Geant4 cross-sections, + and FLUKA-Cern hadron-nucleus reaction cross-sections. + - ProcessLevel/FinalState: shows how to simulate inelastic + hadron-nucleus interactions, using Geant4 or FLUKA-Cern models. + + extended/hadronic/Hadr01 + o Added UI commands to enable neutron general process and extra macro + file. + o HistoManager: added protection agains secondary zero-energy particles. + + extended/hadronic/Hadr03 + o In main(), set ProduceFissionFragments to true. + o PhysicsList: return to use QGSP_BIC_HP. + o SteppingAction: added protection against secondaries. + o Run::EndOfRun(): format adjustement. + o Code revision of all headers. + + extended/hadronic/Hadr04 + o PhysicsList: removed definition of meV. + o Code revision of all headers. + + extended/hadronic/Hadr05 + o Compute and plot Edep, Eleak, Etotal=Edep+Eleak. + + extended/hadronic/Hadr06 + o Compute and plot total energy released. + o Code revision of all headers. + + extended/hadronic/Hadr07 + o Compute and plot Edep, Eleak, Etotal=Edep+Eleak. + + extended/hadronic/Hadr10 + o In SteppingAction, protecting the argument of acos() to be within range. + + extended/hadronic/ParticleFluence + o Run, TrackingAction: replaced G4int with G4long for keeping the + information on the multiplicity of particle production. This avoids + rare cases of negative multiplicities due to integer overflow, seen for + runs with at least 4000 events, in particular with heavy materials, + such as Tungsten and Lead. + + extended/medical/dna/dnadamage2 + o New example providing scoring of plasmid DNA strand breaks using the + IRT method (J. Ramos-Mendez, et al., Medical Physics, 2020, 47(11), + 5919-5930). + Extends the chem6 example by adding DNA molecule information and the + scoring of Strand Breaks. Experimental conditions are considered such + as oxygen and DMSO molar concentrations. + + extended/medical/dna/icsd + o PhysicsList: deleted unused models; apdated RegisterModel() function + with new structure. Deleted G4DNAVacuumModel. + + extended/medical/dna/moleculardna + o Migrated data download to CERN EOS area for examples. + o Added ability to read particles from a space phase file (csv). + o Updated ecoli.mac file. + o Overall code revision with clang-tidy. + + extended/medical/dna/range + o Added DNA materials. + o Simplified PhysicsList. + o Use G4RunManagerFactory in main(). + + extended/medical/dna/spower + o Added DNA materials. + o Simplified PhysicsList. + o Added extra macro alpha.in. + o Code cleanup in main(). + + extended/medical/dna/UHDR + o New example showing how to activate the mesoscopic model in chemistry + and combine with SBS model (Tran et al.,Int. J. Mol. Sci. 22 (2021) + 6023). + It allows to simulate chemical reactions longtime (beyond 1 us) of + post-irradiation. + + extended/parameterisations/gflash + o gflasha: use G4PhysListFactory for physics list initialization. + o gflash2: removed unused statics from DetectorConstruction class. + o Some code cleanup in gflash1,2,3,a. + o Overall code revision with clang-tidy and clang-format. + + extended/persistency/gdml/G01 + o Added comment in main() to demonstrate how to set alternative + schema file for validation while parsing a GDML document. + + extended/visualization/perspective + o PerspectiveVisAction: fixed missing include for G4Transform3D header. + o In PerspectiveVisAction header, removed unnecessary forward class + declarations. Applied clang-format. + + extended/visualization/standalone + o Included an example of DrawGeometry. DrawGeometryVisAction shows how to + visualise the geometry alone, i.e., without run manager and physics. + + ---------------------------------------------------------------------------- + diff --git a/ReleaseNotes/Patch.11.0-4.txt b/ReleaseNotes/Patch.11.0-4.txt new file mode 100644 index 00000000000..0d3c62b35ae --- /dev/null +++ b/ReleaseNotes/Patch.11.0-4.txt @@ -0,0 +1,111 @@ + + Geant4 11.0 - patch-04 Release Notes + ------------------------------------ + + 3 March 2023 + +List of fixes included in this public patch since the public release 11.0.3: + + o Configuration + ------------- + + CMake: + o Removed no longer required G4VecGeomShim module. + VecGeom supports/supplies full imported targets since 1.1.18 + Use of VECGEOM_LIBRARIES variable is required to allow build against + CUDA-enabled VecGeom. + + o Analysis + -------- + + Added a protection against nullptr in G4VAnalysisManager::GetNofNtuples() + Addressing problem report #2518. + + Do not remove non-empty HDF5 output files. + + o Global: + ------ + + Updated date and version for 11.0.4. + + o Materials: + --------- + + G4Material: added an extra check on number of atoms in method + AddElementByNumberOfAtoms(..). Addressing problem report #2514. + + o Particles: + --------- + + G4XicZero, G4AntiXicZero, G4OmegacZero, G4AntiOmegacZero: updated mean + lifetime values according to PDG-2022. + + G4Triton, G4AntiTriton: corrected the lifetime value for triton and + anti_triton. The half-life (12.32 years) was incorrectly used instead of + the mean lifetime (17.774 years) for triton, whereas the anti_triton was + incorrectly treated as stable. + + G4AntiNeutron: set the "PDG stable" flag to "false", as for G4Neutron. + This has no practical consequences, i.e. anti_neutron decays regardless + of this flag. + + o Physics Lists: + ------------- + + constructors/decay + o G4RadioactiveDecayPhysics: assigned RadioactiveDecay process to G4Triton + (which is the only light ion that decays). Note: before, triton did not + have beta decay, i.e. it was wrongly treated as stable even when + radioactive decay physics was enabled; anti_triton did not, and still + does not, have beta decay (because RadioactiveDecay, in its current + implementation, does not handle any kind of anti-ions): in practice, + this is an acceptable approximation because of its relatively long + lifetime and the fact that annihilation and nuclear capture are more + likely to happen before decay. + + o Processes - Electromagnetic: + --------------------------- + + standard: + o G4WentzelOKandVIxSection: fixed numeric instability for the extreme + case of very small kinetic energy (< 1 eV). Improved comments and + fixed single scattering per region. Addressing problem report #2530. + + o Processes - Hadronic: + -------------------- + + cross_sections: + o G4ComponentAntiNuclNuclearXS: fix and extension in methods + GetTotalElementCrossSection() and GetInelasticElementCrossSection(); + a bug was causing undefined values for, respectively, the total and + inelastic cross-sections of anti-proton interactions with light target + nuclei (d, H3, He3 and He4). + o G4NeutronInelasticXS, G4ParticleInelasticXS: fixed computation of + isotope cross-sections. Addressing problem report #2498. + + models/cascade + o G4NumIntTwoBodyAngDst: corrected incomplete initialization of a vector. + Addressing problem report #2515. + o G4TwoBodyAngularDist: corrected the charge exchange reaction of pion+ + on neutron producing in the final state pion0 and proton. + Addressing problem report #2516. + + models/lepto_nuclear + o G4ElectroVDNuclearModel: added protections against null pointers to + gamma cross-section and material, responsible for rare crashes. + + models/particle_hp + o G4ParticleHPContAngularPar: added protection against zero probability + for both discrete and continuous emission. + + models/parton_string + o G4DiffractiveSplitableHadron: fixed rare large energy violations seen + with FTF when dealing with charm and bottom hadron nuclear interactions. + o G4LundStringFragmentation, G4QGSMFragmentation: corrected value for + the probability of charm/anti-charm creation from the vacuum (a factor + of 10 higher was set to enhance the production of charm hadrons for + testing purposes). + o G4QGSMFragmentation: bug-fix in the method GetLightConeZ(), which + might cause rare access to arrays with a wrong index. + + util + o G4Nucleus: corrected method GetN_asInt() for the case of hypernuclei. + + ---------------------------------------------------------------------------- + + Technical Notes + --------------- + + o This patch should be applied on top of release 11.0 series. + o Technical notes distributed for release 11.0 are also applicable and + valid for this patch. + +The code and rebuilt binary libraries for release 11.0.4 are available +through the Geant4 "Download" Web page. + +Please refer to the Geant4 User Documentation for further information about +using Geant4. diff --git a/ReleaseNotes/Patch.11.1-1.txt b/ReleaseNotes/Patch.11.1-1.txt index c31ec464f2e..68161d23d34 100644 --- a/ReleaseNotes/Patch.11.1-1.txt +++ b/ReleaseNotes/Patch.11.1-1.txt @@ -139,7 +139,7 @@ List of fixes included in this public patch since the public release 11.1.0: Based on GitHub PR#52 (https://github.com/Geant4/geant4/pull/52). + extended/medical/dna/moleculardna o Fixed materials definition and corrected mistake in PhysicsList. - o Updated imput macros. + o Updated input macros. + extended/parallel/MPI o Use PROJECT_ or Geant4_ scoped _SOURCE/BINARY_DIR variables in place of CMAKE_ scope version to ease use of Geant4 as a CMake subproject. diff --git a/cmake/History b/cmake/History index f96ba858b85..167656b37b3 100644 --- a/cmake/History +++ b/cmake/History @@ -5,21 +5,88 @@ which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-06-21 Ben Morgan (cmake-V11-01-21) +- Remobe obsolete and confusing GEANT4_BUILD_TESTS option and configuration -## 2023-02-06 Ben Morgan (cmake-V11-00-53) +## 2023-06-14 Gunter Folger (cmake-V11-01-20) +- Update to use G4EMLOW 8.4, as provoded by Vladimir + +## 2023-05-31 Ben Morgan (cmake-V11-01-19) +- Require Qt5 >= 5.9 if Qt5 support is selected + - Version chosen as current system version on oldest support OS (CentOS7) + +## 2023-05-29 Guy Barrand (cmake-V11-01-18) +- Templates/Geant4Config.cmake.inm Modules/G4InterfaceOptions.cmake: handle the TOOLSSG_[X11,XT,WINDOWS,QT]_ZB vis drivers. + +## 2023-05-23 Ben Morgan (cmake-V11-01-17) +- Add capabilities to geant4_module_check.py: + - Given a module, print list of modules that depend on it + - Print all modules sorted in descending order of the number of modules using them + - Show which headers from linked modules are included by a module in its + usage requirements output + +## 2023-05-12 Ben Morgan (cmake-V11-01-16) +- Make linking a source code module to a final Geant4 library a cmake-time error + - Fixes #161 + +## 2023-05-10 Ben Morgan (cmake-V11-01-15) +- Update config scripts for split of G4persistency library + +## 2023-05-10 Gunter Folger (cmake-V11-01-14) +- Update to use G4INCL 1.1 + +## 2023-04-28 Ben Morgan (cmake-V11-01-13) +- Export VTK_DIR and QtX_DIR to package cache to assist in refinding both. + +## 2023-04-27 Ben Morgan (cmake-V11-01-12) +- Find and refind Qt6OpenGLWidgets module in Qt6 for use by Qt/OpenGL consumers. + +## 2023-04-26 Ben Morgan (cmake-V11-01-11) +- Support finding and use of Qt6 on request for beta testing. + +## 2023-04-02 Ben Morgan (cmake-V11-01-10) +- No longer link to QtPrintSupport, which is not used in the toolkit. + +## 2023-03-28 Gunter Folger (cmake-V11-01-09) +- Update to use G4ABLA 3.3 + +## 2023-03-22 Ben Morgan (cmake-V11-01-08) +- Remove setting of -D flags in Geant4Config to enable vis drivers. Libraries + now export compile definitions for what they support to move to a "use on link" + model. + +## 2023-02-16 Gunter Folger (cmake-V11-01-07) +- Update to use G4EMLOW 8.3 + +## 2023-02-13 Stewart Boogert (cmake-V11-01-06) +- streamlined VTK cmake components. + +## 2023-02-06 Ben Morgan (cmake-V11-01-05) - Remove no longer required G4VecGeomShim module. - VecGeom supports/supplies full imported targets since 1.1.18 - Use of VECGEOM_LIBRARIES variable required to allow build against CUDA-enabled VecGeom -## 2023-01-18 Ben Morgan (cmake-V11-00-52) +## 2023-01-30 Ben Morgan (cmake-V11-01-04) +- Update Qt MOC application for G4UIimplementation in place of G4UIbasic/G4UIcommon + +## 2023-01-25 Ben Morgan (cmake-V11-01-03) +- Initial support for declaring headers of a source code module private. + - Headers declared private are not installed + - geant4_module_check reports an inconsistency if a private header is used + non-privately + +## 2023-01-18 Ben Morgan (cmake-V11-01-02) - Fix configuration/use of G4ToolsSG in geant4-config - Addresses issue reported on [Geant4 Forum](https://geant4-forum.web.cern.ch/t/missing-g4toolssg-in-geant4-config-in-pre-compiled-geant4-11-1-for-linux/9738) -## 2023-01-09 Ben Morgan (cmake-V11-00-51) +## 2023-01-09 Ben Morgan (cmake-V11-01-01) - Use PROJECT_ or Geant4_ scoped _SOURCE/BINARY_DIR variables in place of CMAKE_ scope version to ease use of Geant4 as a CMake subproject. - Fixes [GitHub PR #52](https://github.com/Geant4/geant4/pull/52) +## 2022-12-20 Gunter Folger (cmake-V11-01-00) +- Use new dataset G4ABLA 3.2 + ## 2022-12-05 Ben Morgan (cmake-V11-00-50) - Revert VecGeom minimum version to 1.2.0 due to issues with 1.2.1 reported by CMS but not yet triaged in VecGeom itself. diff --git a/cmake/Modules/FindFLUKAInterface.cmake b/cmake/Modules/FindFLUKAInterface.cmake new file mode 100644 index 00000000000..01ac3990b55 --- /dev/null +++ b/cmake/Modules/FindFLUKAInterface.cmake @@ -0,0 +1,18 @@ +# - Check that FLUKA_INTERFACE environment was properly set. +# Note: This file can also be placed in geant4_application/cmake/Modules/FindFLUKAInterface.cmake + +message(STATUS "FLUKAInterface_INCLUDE_DIR = $ENV{FLUKAInterface_INCLUDE_DIR}") +message(STATUS "FLUKAInterface_LIBRARIES = $ENV{FLUKAInterface_LIBRARIES}") +if (NOT DEFINED ENV{FLUKAInterface_INCLUDE_DIR}) + message(FATAL_ERROR "\n $FLUKAInterface_INCLUDE_DIR is not set! \n Did you source env_FLUKA_G4_interface.sh? \n") +elseif (NOT DEFINED ENV{FLUKAInterface_LIBRARIES}) + message(FATAL_ERROR "\n $FLUKAInterface_LIBRARIES is not set! \n Did you source env_FLUKA_G4_interface.sh? \n") +endif() + + +string(REPLACE " " ";" FLUKAInterface_INCLUDE_DIR $ENV{FLUKAInterface_INCLUDE_DIR}) +string(REPLACE " " ";" FLUKAInterface_LIBRARIES $ENV{FLUKAInterface_LIBRARIES}) + + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(FLUKAInterface DEFAULT_MSG FLUKAInterface_INCLUDE_DIR FLUKAInterface_LIBRARIES) diff --git a/cmake/Modules/G4CTest.cmake b/cmake/Modules/G4CTest.cmake index 7aa02e3fea0..7d59b854d22 100644 --- a/cmake/Modules/G4CTest.cmake +++ b/cmake/Modules/G4CTest.cmake @@ -7,11 +7,6 @@ option(GEANT4_ENABLE_TESTING "Enable and define all the tests of the project" OF geant4_add_feature(GEANT4_ENABLE_TESTING "Enable and define all the tests of the project") mark_as_advanced(GEANT4_ENABLE_TESTING) -# - "BUILD_TESTS" means all 'tests' in individual categories. -option(GEANT4_BUILD_TESTS "Build all the tests of the project" OFF) -geant4_add_feature(GEANT4_BUILD_TESTS "Build all the tests of the project") -mark_as_advanced(GEANT4_BUILD_TESTS) - #----------------------------------------------------------------------- # Configure CTest and relevant Geant4 settings, if required # @@ -48,16 +43,3 @@ if(GEANT4_ENABLE_TESTING) list(APPEND GEANT4_TEST_ENVIRONMENT G4RUN_MANAGER_TYPE=TBB) endif() endif() - -#----------------------------------------------------------------------- -# Add Unit Tests if required -# -if(GEANT4_BUILD_TESTS) - file(GLOB_RECURSE files RELATIVE ${PROJECT_SOURCE_DIR} source/CMakeLists.txt) - foreach( file ${files} ) - get_filename_component(path ${file} PATH) - if(path MATCHES "/test$") - add_subdirectory(${path}) - endif() - endforeach() -endif() diff --git a/cmake/Modules/G4ConfigureCMakeHelpers.cmake b/cmake/Modules/G4ConfigureCMakeHelpers.cmake index bc9864b7bb9..65c52a07f0d 100644 --- a/cmake/Modules/G4ConfigureCMakeHelpers.cmake +++ b/cmake/Modules/G4ConfigureCMakeHelpers.cmake @@ -51,9 +51,6 @@ if(NOT CMAKE_CONFIGURATION_TYPES) set(Geant4_BUILD_TYPE \"${CMAKE_BUILD_TYPE}\")") endif() -# Core compile definitions... -set(GEANT4_CORE_DEFINITIONS ) - # Third party includes (libraries *should* be handled by the imports) set(GEANT4_THIRD_PARTY_INCLUDES ) @@ -194,7 +191,7 @@ configure_file( ) -foreach(_mod HepMC Pythia6 Pythia8 StatTest TBB XQuartzGL) +foreach(_mod FLUKAInterface HepMC Pythia6 Pythia8 StatTest TBB XQuartzGL) configure_file( ${PROJECT_SOURCE_DIR}/cmake/Modules/Find${_mod}.cmake ${PROJECT_BINARY_DIR}/Modules/Find${_mod}.cmake diff --git a/cmake/Modules/G4ConfigurePkgConfigHelpers.cmake b/cmake/Modules/G4ConfigurePkgConfigHelpers.cmake index 48390ae6c67..1f88814ab59 100644 --- a/cmake/Modules/G4ConfigurePkgConfigHelpers.cmake +++ b/cmake/Modules/G4ConfigurePkgConfigHelpers.cmake @@ -242,7 +242,7 @@ if(NOT GEANT4_BUILD_GRANULAR_LIBS) # - Qt if(GEANT4_USE_QT) set(G4_BUILTWITH_QT "yes") - set(_qtcomps Core Gui Widgets OpenGL PrintSupport) + set(_qtcomps Core Gui Widgets OpenGL) if(QT_VERSION_MAJOR VERSION_GREATER_EQUAL 5.15) list(APPEND _qtcomp 3DCore 3DExtras 3DRender) endif() diff --git a/cmake/Modules/G4DatasetDefinitions.cmake b/cmake/Modules/G4DatasetDefinitions.cmake index bee223acf8c..be80c4c45e8 100644 --- a/cmake/Modules/G4DatasetDefinitions.cmake +++ b/cmake/Modules/G4DatasetDefinitions.cmake @@ -18,11 +18,11 @@ geant4_add_dataset( # - Low energy electromagnetics geant4_add_dataset( NAME G4EMLOW - VERSION 8.2 + VERSION 8.4 FILENAME G4EMLOW EXTENSION tar.gz ENVVAR G4LEDATA - MD5SUM 07773e57be3f6f2ebb744da5ed574f6d + MD5SUM 59e2aea7f089f0b97f588b4b8e85dd28 ) # - Photon evaporation @@ -88,22 +88,22 @@ geant4_add_dataset( # - ABLA geant4_add_dataset( NAME G4ABLA - VERSION 3.1 + VERSION 3.3 FILENAME G4ABLA EXTENSION tar.gz ENVVAR G4ABLADATA - MD5SUM 180f1f5d937733b207f8d5677f76296e + MD5SUM b25d093339e1e4532e31038653580ca6 ) # - INCL geant4_add_dataset( NAME G4INCL - VERSION 1.0 + VERSION 1.1 FILENAME G4INCL EXTENSION tar.gz ENVVAR G4INCLDATA - MD5SUM 85fe937b6df46d41814f07175d3f5b51 + MD5SUM c719b61b1971a823188fc6c937e48287 ) # - ENSDFSTATE diff --git a/cmake/Modules/G4DeveloperAPI.cmake b/cmake/Modules/G4DeveloperAPI.cmake index 5ae62435914..9ab9efd2842 100644 --- a/cmake/Modules/G4DeveloperAPI.cmake +++ b/cmake/Modules/G4DeveloperAPI.cmake @@ -49,15 +49,17 @@ include_guard(DIRECTORY) # # geant4_add_module( # PUBLIC_HEADERS header1 [header2 ...] +# PRIVATE_HEADERS header1 [header2 ..] # [SOURCES source1 [source2 ...]]) # # Add a Geant4 module called ```` to the project, composed -# of the source files listed in the ``PUBLIC_HEADERS`` and ``SOURCES`` -# arguments. The ```` must be unique within the project. +# of the source files listed in the ``PUBLIC_HEADERS``, ``PRIVATE_HEADERS``, +# and ``SOURCES`` arguments. The ```` must be unique within the project. # The directory in which the module is added (i.e. ``CMAKE_CURRENT_LIST_DIR`` # for the CMake script in which ``geant4_add_module`` is called) must contain: # # * An ``include`` subdirectory for the public headers +# * A ``include/private`` subdirectory for the private headers # * A ``src`` subdirectory for source files if the module provides these # # Any module with only ``PUBLIC_HEADERS`` has its ``IS_INTERFACE`` property @@ -69,6 +71,12 @@ include_guard(DIRECTORY) # this is interpreted as being relative to the ``include`` subdirectory of the module. # Absolute paths may also be supplied, e.g. if headers are generated by the project. # +# The ``PRIVATE_HEADERS`` argument must list the headers comprising any +# interfaces that are implementation details of the module. If a header is supplied +# as a relative path, this is interpreted as being relative to the ``include/private`` +# subdirectory of the module. Absolute paths may also be supplied, e.g. if headers +# are generated by the project. +# # The ``SOURCES`` argument should list any source files for the module. # If a source is is supplied as a relative path, this is interpreted as being # relative to the ``src`` subdirectory of the module. Absolute paths may @@ -80,7 +88,7 @@ function(geant4_add_module _name) cmake_parse_arguments(G4ADDMOD "" "" - "PUBLIC_HEADERS;SOURCES" + "PUBLIC_HEADERS;PRIVATE_HEADERS;SOURCES" ${ARGN} ) __geant4_assert_no_unparsed_arguments(G4ADDMOD geant4_add_module) @@ -100,14 +108,20 @@ function(geant4_add_module _name) geant4_set_module_property(${_name} PROPERTY CMAKE_LIST_FILE "${CMAKE_CURRENT_LIST_FILE}") # Compose header/source lists - geant4_module_sources(${_name} PUBLIC_HEADERS ${G4ADDMOD_PUBLIC_HEADERS} SOURCES ${G4ADDMOD_SOURCES}) + geant4_module_sources(${_name} + PUBLIC_HEADERS ${G4ADDMOD_PUBLIC_HEADERS} + PRIVATE_HEADERS ${G4ADDMOD_PRIVATE_HEADERS} + SOURCES ${G4ADDMOD_SOURCES}) # Set default usage requirements for this module, dependent on whether it is an INTERFACE or not + # TODO: It's a hard error if a module is INTERFACE and has PRIVATE_HEADERS if(NOT G4ADDMOD_SOURCES) geant4_module_include_directories(${_name} INTERFACE $) geant4_set_module_property(${_name} PROPERTY IS_INTERFACE TRUE) else() # Set the default include directory for this module + # Private header inclusions are, for now, dealt with at the target level (until we require CMake >=3.18) + # - See set_source_files_properties for details geant4_module_include_directories(${_name} PUBLIC $) # Some compile definitions are still transported via directory level @@ -131,6 +145,7 @@ endfunction() # # geant4_module_sources( # PUBLIC_HEADERS header1 [header2 ...] +# PRIVATE_HEADERS header1 [header2 ...] # [SOURCES source1 [source2 ...]]) # # Append sources to a Geant4 module called ````, composed of the source @@ -146,7 +161,7 @@ function(geant4_module_sources _name) cmake_parse_arguments(G4MODSRCS "" "" - "PUBLIC_HEADERS;SOURCES" + "PUBLIC_HEADERS;PRIVATE_HEADERS;SOURCES" ${ARGN} ) __geant4_assert_no_unparsed_arguments(G4MODSRCS geant4_module_sources) @@ -169,6 +184,16 @@ function(geant4_module_sources _name) endforeach() geant4_set_module_property(${_name} APPEND PROPERTY PUBLIC_HEADERS ${__tmp_HEADERS}) + set(__tmp_HEADERS) + foreach(__elem ${G4MODSRCS_PRIVATE_HEADERS}) + if(IS_ABSOLUTE "${__elem}") + list(APPEND __tmp_HEADERS "${__elem}") + else() + list(APPEND __tmp_HEADERS "${CMAKE_CURRENT_LIST_DIR}/include/private/${__elem}") + endif() + endforeach() + geant4_set_module_property(${_name} APPEND PROPERTY PRIVATE_HEADERS ${__tmp_HEADERS}) + set(__tmp_SOURCES) foreach(__elem ${G4MODSRCS_SOURCES}) if(IS_ABSOLUTE "${__elem}") @@ -859,11 +884,12 @@ function(geant4_compose_targets) endif() endforeach() - # - For each module, write out files for - # 1. module -> used modules adjacency list for detecting module-module cycles + # - For each module + # 1. Write out files for + # 1.1. module -> used modules adjacency list for detecting module-module cycles file(WRITE "${PROJECT_BINARY_DIR}/G4ModuleAdjacencyList.txt" "# Geant4 Module - Module Adjacencies\n") - # 2. module,location,public headers for developer query operations + # 1.2. module,location,public headers for developer query operations # Basically need a dict of module : [headers, ...] # - Two main queries to run # - Given a module, what public headers does it provide? @@ -884,26 +910,51 @@ function(geant4_compose_targets) file(WRITE "${PROJECT_BINARY_DIR}/G4ModuleInterfaceMap.csv" "") configure_file("${PROJECT_SOURCE_DIR}/cmake/Modules/geant4_module_check.py" "${PROJECT_BINARY_DIR}/geant4_module_check.py" COPYONLY) + # 2. Check it does not link to a composed library composed of N>1 modules + get_property(__g4definedlibraries GLOBAL PROPERTY GEANT4_DEFINED_CATEGORIES) + set(__g4disallowedlinks ${__g4definedlibraries}) + list(REMOVE_ITEM __g4disallowedlinks ${__g4definedmodules}) + foreach(__module ${__g4definedmodules}) - # Adjacency list - take all dependencies geant4_get_module_property(__publicdeps ${__module} PUBLIC_LINK_LIBRARIES) geant4_get_module_property(__privatedeps ${__module} PRIVATE_LINK_LIBRARIES) geant4_get_module_property(__interfacedeps ${__module} INTERFACE_LINK_LIBRARIES) + + # 1.1 Adjacency list - take all dependencies set(__alldeps_l ${__publicdeps} ${__privatedeps} ${__interfacedeps}) list(JOIN __alldeps_l " " __alldeps) file(APPEND "${PROJECT_BINARY_DIR}/G4ModuleAdjacencyList.txt" "${__module} ${__alldeps}\n") - # 2. Module interfaces, needs CMAKE, PUBLIC_HEADER + # 1.2 Module interfaces, needs CMAKE, PUBLIC_HEADER geant4_get_module_property(__listfile ${__module} CMAKE_LIST_FILE) geant4_get_module_property(__publichdrs ${__module} PUBLIC_HEADERS) + geant4_get_module_property(__privatehdrs ${__module} PRIVATE_HEADERS) + geant4_get_module_property(__srcs ${__module} SOURCES) geant4_get_module_property(__parent_target ${__module} PARENT_TARGET) get_filename_component(__listdir "${__listfile}" DIRECTORY) + # Remove generated headers + list(TRANSFORM __publichdrs REPLACE "^${PROJECT_BINARY_DIR}/.*$" "") list(TRANSFORM __publichdrs REPLACE "^/.*/" "") - file(APPEND "${PROJECT_BINARY_DIR}/G4ModuleInterfaceMap.csv" "${__module},${__listdir},${__publichdrs},${__publicdeps},${__privatedeps},${__interfacedeps},${__parent_target},${__gmc_build_settings}\n") + list(TRANSFORM __privatehdrs REPLACE "^/.*/" "") + list(TRANSFORM __srcs REPLACE "^/.*/" "") + file(APPEND "${PROJECT_BINARY_DIR}/G4ModuleInterfaceMap.csv" "${__module},${__listdir},${__publichdrs},${__privatehdrs},${__srcs},${__publicdeps},${__privatedeps},${__interfacedeps},${__parent_target},${__gmc_build_settings}\n") + + # 2. Check for disallowed links in each link type + foreach(__linktype IN ITEMS public private interface) + foreach(__link ${__${__linktype}deps}) + if(__link IN_LIST __g4disallowedlinks) + geant4_get_category_property(__linktothese ${__link} MODULES) + string(REPLACE "${PROJECT_SOURCE_DIR}/" "" __badlistfile ${__listfile}) + message(FATAL_ERROR "Geant4 module '${__module}' has a ${__linktype} link to composed category '${__link}'." + "It must link to one or more of its component modules instead:\n" + "${__linktothese}\n" + "in ${__badlistfile}\n") + endif() + endforeach() + endforeach() endforeach() # Process all defined libraries - get_property(__g4definedlibraries GLOBAL PROPERTY GEANT4_DEFINED_CATEGORIES) set(__g4builtlibraries) set(__g4public_headers) @@ -1224,19 +1275,21 @@ function(__geant4_add_library _name _type) foreach(__g4mod ${__g4modules}) # - Process sources... geant4_get_module_property(_headers ${__g4mod} PUBLIC_HEADERS) + geant4_get_module_property(_headers_private ${__g4mod} PRIVATE_HEADERS) geant4_get_module_property(_srcs ${__g4mod} SOURCES) geant4_get_module_property(_cmakescript ${__g4mod} CMAKE_LIST_FILE) + get_filename_component(_moddir "${_cmakescript}" DIRECTORY) # - Group sources and scripts for IDEs # NB: Seemingly has to be done at same level we define target. # TODO: If lib name is same as mod name, don't group avoid extra # folder layer. - source_group(${__g4mod}\\Headers FILES ${_headers}) + source_group(${__g4mod}\\Headers FILES ${_headers} ${_headers_private}) source_group(${__g4mod}\\Sources FILES ${_srcs}) source_group(${__g4mod} FILES ${_cmakescript}) # - Add sources to target - PRIVATE, because consuming targets don't need them - target_sources(${_target_name} PRIVATE ${_headers} ${_srcs} ${_cmakescript}) + target_sources(${_target_name} PRIVATE ${_headers} ${_headers_private} ${_srcs} ${_cmakescript}) # - Process usage properties # Include dirs, compile definitions and libraries can be handled together @@ -1256,8 +1309,11 @@ function(__geant4_add_library _name _type) # declared its deps correctly (but then an error will occur # anyway, and point is that libs are linked, not modules!) # "Module" level really means "Source file" level, so same - # sets of rules should apply (i.e. can't specify inc dirs - # at source level). + # sets of rules should apply. + # Can use set_source_files_properties for module-level PRIVATE_HEADERS, + # but that's it + set_property(SOURCE ${_srcs} APPEND PROPERTY INCLUDE_DIRECTORIES "${_moddir}/include/private") + foreach(_prop ${_props_to_process}) # Further gotcha with INTERFACE modules here # - If an interface module is composed into a non-interface module @@ -1306,7 +1362,7 @@ function(__geant4_add_library _name _type) # moc-ing, so hard code for now. # TODO: likely need an additional "module target properties" to hold things # that can be passed to set_target_properties - if(__g4mod MATCHES "G4UIbasic|G4OpenGL|G4OpenInventor|G4ToolsSG" AND GEANT4_USE_QT) + if(__g4mod MATCHES "G4UIimplementation|G4OpenGL|G4OpenInventor|G4ToolsSG" AND GEANT4_USE_QT) set_target_properties(${_target_name} PROPERTIES AUTOMOC ON) endif() endforeach() diff --git a/cmake/Modules/G4InterfaceOptions.cmake b/cmake/Modules/G4InterfaceOptions.cmake index 5a2643e0bf7..664ccba3f6d 100644 --- a/cmake/Modules/G4InterfaceOptions.cmake +++ b/cmake/Modules/G4InterfaceOptions.cmake @@ -65,14 +65,27 @@ if(GEANT4_USE_INVENTOR_QT AND NOT GEANT4_USE_QT) message(STATUS "Forcing GEANT4_USE_QT to ON, required by selection of GEANT4_USE_INVENTOR_QT as ON") endif() set(GEANT4_USE_TOOLSSG_QT_GLES ${GEANT4_USE_QT}) +set(GEANT4_USE_TOOLSSG_QT_ZB ${GEANT4_USE_QT}) + +# TEMPORARY for 11.2 Beta Development +# Decision still required on whether to allow selection of 5/6 in production +cmake_dependent_option(GEANT4_USE_QT_QT6 "Require Qt6 when building Qt support" OFF "GEANT4_USE_QT" OFF) +mark_as_advanced(GEANT4_USE_QT_QT6) # - Vtk option(GEANT4_USE_VTK "Build Geant4 with VTK visualisation" OFF) mark_as_advanced(GEANT4_USE_VTK) if(GEANT4_USE_VTK) - find_package(VTK 8.2 REQUIRED) + find_package(VTK 9 REQUIRED COMPONENTS + CommonColor + InteractionStyle + IOExport + GUISupportQt + RenderingVolumeOpenGL2 + ) + geant4_save_package_variables(VTK VTK_DIR) endif() -geant4_add_feature(GEANT4_USE_VTK "Using VTK for visualisation (EXPERIMENTAL)") +geant4_add_feature(GEANT4_USE_VTK "Using VTK for visualisation") # - Unix only if(UNIX) @@ -86,6 +99,7 @@ if(UNIX) message(STATUS "Forcing GEANT4_USE_XM to ON, required by Inventor driver") endif() set(GEANT4_USE_TOOLSSG_XT_GLES ${GEANT4_USE_XM}) + set(GEANT4_USE_TOOLSSG_XT_ZB ${GEANT4_USE_XM}) geant4_add_feature(GEANT4_USE_XM "Build Geant4 with Xm Support") # - OpenGL/X11 Vis Driver @@ -94,6 +108,9 @@ if(UNIX) set(GEANT4_USE_TOOLSSG_X11_GLES ${GEANT4_USE_OPENGL_X11}) geant4_add_feature(GEANT4_USE_OPENGL_X11 "Build Geant4 OpenGL driver with X11 support") + # tools/zb X11 Vis Driver + set(GEANT4_USE_TOOLSSG_X11_ZB ${X11_FOUND}) + # RayTracer driver with X11 support option(GEANT4_USE_RAYTRACER_X11 "Build RayTracer driver with X11 support" OFF) geant4_add_feature(GEANT4_USE_RAYTRACER_X11 "Build RayTracer driver with X11 support") @@ -104,6 +121,8 @@ if(WIN32) option(GEANT4_USE_OPENGL_WIN32 "Build OpenGL driver with Win32 support" OFF) set(GEANT4_USE_TOOLSSG_WINDOWS_GLES ${GEANT4_USE_OPENGL_WIN32}) geant4_add_feature(GEANT4_USE_OPENGL_WIN32 "Build OpenGL driver with Win32 support") + + set(GEANT4_USE_TOOLSSG_WINDOWS_ZB ON) endif() #----------------------------------------------------------------------- @@ -136,19 +155,36 @@ endif() # - Qt5/6 if(GEANT4_USE_QT) # Use versioned targets to support Qt5 < 5.15 + # 5.9 is selected as the min version to support based on the system version on CentOS7 # Once 5.15 is the minimum version, the "Qt${QT_VERSION_MAJOR}_..." variables can be dropped # - https://doc.qt.io/qt-6/cmake-manual.html - find_package(QT NAMES Qt5 COMPONENTS Core REQUIRED) - find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Gui Widgets OpenGL PrintSupport REQUIRED) + # TEMPORARY for 11.2 beta: + # - Decision still required on whether to allow selection of 5/6 in production + # TODO: + # - Because VTK and SoQt use Qt themselves, we may want to consider checking that we + # have a consistent link to the same Qt version + if(GEANT4_USE_QT_QT6) + find_package(QT NAMES Qt6 COMPONENTS Core REQUIRED) + else() + find_package(QT 5.9 NAMES Qt5 COMPONENTS Core REQUIRED) + endif() + + find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Gui Widgets OpenGL REQUIRED) geant4_save_package_variables(Qt${QT_VERSION_MAJOR} + Qt${QT_VERSION_MAJOR}_DIR Qt${QT_VERSION_MAJOR}Core_DIR Qt${QT_VERSION_MAJOR}Gui_DIR Qt${QT_VERSION_MAJOR}Widgets_DIR - Qt${QT_VERSION_MAJOR}OpenGL_DIR - Qt${QT_VERSION_MAJOR}PrintSupport_DIR) + Qt${QT_VERSION_MAJOR}OpenGL_DIR) + + # G4OpenGL and G4ToolsSG also require OpenGLWidgets in Qt6 + if(QT_VERSION_MAJOR GREATER 5) + find_package(Qt${QT_VERSION_MAJOR}OpenGLWidgets REQUIRED) + geant4_save_package_variables(Qt${QT_VERSION_MAJOR} Qt${QT_VERSION_MAJOR}OpenGLWidgets_DIR) + endif() - get_target_property(QT_QMAKE_EXECUTABLE ${Qt${QT_VERSION_MAJOR}Core_QMAKE_EXECUTABLE} IMPORTED_LOCATION) + get_target_property(QT_QMAKE_EXECUTABLE Qt${QT_VERSION_MAJOR}::qmake IMPORTED_LOCATION) geant4_add_feature(GEANT4_USE_QT "Build Geant4 with Qt${QT_VERSION_MAJOR} support") # Qt3D is only supported on 5.15 and above, but always on if available diff --git a/cmake/Modules/geant4_module_check.py b/cmake/Modules/geant4_module_check.py index f04a70985fa..bd33c83ffa2 100755 --- a/cmake/Modules/geant4_module_check.py +++ b/cmake/Modules/geant4_module_check.py @@ -34,11 +34,13 @@ def initdb(filename): for row in reader: db['modules'][row[0]] = {'location': row[1], 'headers': set(row[2].split(';')) - set(['']), - 'public_deps': set(row[3].split(';')) - set(['']), - 'private_deps': set(row[4].split(';')) - set(['']), - 'interface_deps': set(row[5].split(';')) - set(['']), - 'parent_target': row[6]} - db['build_settings'].add(row[7]) + 'private_headers': set(row[3].split(';')) - set(['']), + 'sources': set(row[4].split(';')) - set(['']), + 'public_deps': set(row[5].split(';')) - set(['']), + 'private_deps': set(row[6].split(';')) - set(['']), + 'interface_deps': set(row[7].split(';')) - set(['']), + 'parent_target': row[8]} + db['build_settings'].add(row[9]) return db @@ -55,10 +57,45 @@ def get_location(name, db): return get_module(name, db)['location'] +def get_header_path(name, db): + return os.path.join(get_location(name, db), 'include') + + +def get_private_header_path(name, db): + return os.path.join(get_location(name, db), 'include/private') + + +def get_source_path(name, db): + return os.path.join(get_location(name, db), 'src') + + def get_headers(name, db): return get_module(name, db)['headers'] +def get_headers_absolute(name, db): + base_path = get_header_path(name, db) + return set(os.path.join(base_path, h) for h in get_headers(name, db)) + + +def get_private_headers(name, db): + return get_module(name, db)['private_headers'] + + +def get_private_headers_absolute(name, db): + base_path = get_private_header_path(name, db) + return set(os.path.join(base_path, h) for h in get_private_headers(name, db)) + + +def get_sources(name, db): + return get_module(name, db)['sources'] + + +def get_sources_absolute(name, db): + base_path = get_source_path(name, db) + return set(os.path.join(base_path, h) for h in get_sources(name, db)) + + def get_public_deps(name, db): return get_module(name, db)['public_deps'] @@ -79,6 +116,18 @@ def what_provides(h, db): return set([m for m in get_modules(db) if h in get_headers(m, db)]) +def what_provides_private(h, db): + return set([m for m in get_modules(db) if h in get_private_headers(m, db)]) + + +def what_requires(m, db): + return set([om for om in get_modules(db) if m in get_public_deps(om, db)]) + + +def what_requires_private(m, db): + return set([om for om in get_modules(db) if m in get_private_deps(om, db)]) + + def has_setting(setting, build_settings): if setting.startswith('!'): return setting[1:] not in build_settings @@ -108,52 +157,122 @@ def scan_includes(input_file, settings): return result -def scan_files(input_path, settings): +def scan_files(files, settings): used_headers = set() - with os.scandir(input_path) as hdr_it: - for entry in hdr_it: - used_headers |= scan_includes(entry.path, settings) + for f in files: + used_headers |= scan_includes(f, settings) return used_headers +def scan_module_headers(name, db, full_scan): + if full_scan: + # NB: know that will have private/ subdir, so only consider files + header_list = [e.path for e in os.scandir( + get_header_path(name, db)) if e.is_file()] + else: + header_list = get_headers_absolute(name, db) + + return scan_files(header_list, db['build_settings']) + + +def scan_module_private_headers(name, db, full_scan): + if full_scan: + header_list = [e.path for e in os.scandir( + get_private_header_path(name, db))] + else: + header_list = get_private_headers_absolute(name, db) + + return scan_files(header_list, db['build_settings']) + + +def scan_module_sources(name, db, full_scan): + if full_scan: + source_list = [e.path for e in os.scandir(get_source_path(name, db))] + else: + source_list = get_sources_absolute(name, db) + + return scan_files(source_list, db['build_settings']) + + def find_modules(list_of_headers, module_db): found_modules = set() + blame_headers = defaultdict(set) orphan_hdrs = set() for h in list_of_headers: ms = what_provides(h, module_db) found_modules |= ms if not ms: orphan_hdrs.add(h) + else: + blame_headers[ms.pop()].add(h) + + return {'modules': found_modules, 'blame': {k: sorted(v) for k, v in blame_headers.items()}, 'headers': orphan_hdrs} + + +def find_modules_private(list_of_headers, module_db): + found_modules = set() + blame_headers = defaultdict(set) + orphan_hdrs = set() + for h in list_of_headers: + ms = what_provides_private(h, module_db) + found_modules |= ms + if not ms: + orphan_hdrs.add(h) + else: + blame_headers[ms.pop()].add(h) - return {'modules': found_modules, 'headers': orphan_hdrs} + return {'modules': found_modules, 'blame': {k: sorted(v) for k, v in blame_headers.items()}, 'headers': orphan_hdrs} -def usage_requirements(module_name, module_db): +def usage_requirements(module_name, module_db, full_scan): """ Find modules needed publically and privately by input module """ try: module_path = get_location(module_name, module_db) module_headers = get_headers(module_name, module_db) + module_private_headers = get_private_headers(module_name, module_db) except KeyError as err: print(f'No module named \'{module_name}\'', file=sys.stderr) sys.exit(1) # Determine public usage reqs - includes_from_headers = scan_files(os.path.join(module_path, "include"), module_db['build_settings']) + includes_from_headers = scan_module_headers( + module_name, module_db, full_scan) includes_from_headers -= module_headers public_deps = find_modules(includes_from_headers, module_db) + access_violation_public = find_modules_private( + includes_from_headers, module_db) - # The same for private, if module has srcs + # Determine private usage reqs + # private headers... try: - includes_from_srcs = scan_files(os.path.join(module_path, "src"), module_db['build_settings']) + includes_from_private_headers = scan_module_private_headers( + module_name, module_db, full_scan) + includes_from_private_headers -= module_headers + includes_from_private_headers -= module_private_headers + except FileNotFoundError: + includes_from_private_headers = set() + + # ... and sources if they exist + try: + includes_from_srcs = scan_module_sources( + module_name, module_db, full_scan) includes_from_srcs -= module_headers - private_deps = find_modules(includes_from_srcs, module_db) - # Public deps are higher priority - private_deps['modules'] -= public_deps['modules'] - private_deps['headers'] -= public_deps['headers'] + includes_from_srcs -= module_private_headers except FileNotFoundError: - private_deps = {'modules': set(), 'headers': set()} + includes_from_srcs = set() + + # Join private/src and remove public deps, which are higher priority + # We don't do this for blames as these can be unique + private_deps = find_modules( + includes_from_private_headers | includes_from_srcs, module_db) + private_deps['modules'] -= public_deps['modules'] + private_deps['headers'] -= public_deps['headers'] + + # Determine any access violations + access_violation_private = find_modules_private( + includes_from_private_headers | includes_from_srcs, module_db) # Transform results to output dict d = {'module': module_name, @@ -161,22 +280,30 @@ def usage_requirements(module_name, module_db): 'public': sorted(public_deps['modules']), 'private': sorted(private_deps['modules']) }, + 'blame': { + 'public': OrderedDict(sorted(public_deps['blame'].items())), + 'private': OrderedDict(sorted(private_deps['blame'].items())) + }, 'external_headers': { 'public': sorted(public_deps['headers']), 'private': sorted(private_deps['headers']) + }, + 'access_violations': { + 'public': sorted(access_violation_public['modules']), + 'private': sorted(access_violation_private['modules']) } } return d -def check_consistency(module_name, module_db): +def check_consistency(module_name, module_db, full_scan): """ Check module declared/apparent dependencies for consistency """ # NB: Can have false positives from externals G4expat, G4clhep, G4zlib, G4tools (plus imported :: targets and stdlib) def filter_dependencies(dep_list, module_name): return set([x for x in dep_list if not re.match("^.+::.+", x)]) - set(['G4expat', 'G4clhep', 'G4zlib', 'G4tools', 'G4ptl', 'stdc++fs']) - ur = usage_requirements(module_name, module_db) + ur = usage_requirements(module_name, module_db, full_scan) apparent_public_deps = filter_dependencies( ur['dependencies']['public'], module_name) apparent_private_deps = filter_dependencies( @@ -189,6 +316,11 @@ def filter_dependencies(dep_list, module_name): declared_private_deps = filter_dependencies( get_private_deps(module_name, module_db), module_name) + public_access_violations = filter_dependencies( + ur['access_violations']['public'], module_name) + private_access_violations = filter_dependencies( + ur['access_violations']['private'], module_name) + # Collate any consistency errors report = [] # - Declared dependencies duplicated between public/private @@ -221,6 +353,16 @@ def filter_dependencies(dep_list, module_name): report.append( f' - may not require PRIVATE dependencies: {overdeclared_private_deps}') + # - Module exposes a header that's declared private locally or in another module + if public_access_violations: + report.append( + f' ! public interface #include-s PRIVATE headers from modules: {public_access_violations}') + + # - Module uses a header that's declared private + if private_access_violations: + report.append( + f' ! implementation uses PRIVATE headers from modules: {private_access_violations}') + return report @@ -238,9 +380,45 @@ def do_provides(header_name, module_db, verbose): print(mods.pop()) -def do_check_consistency(module_name, module_db): +def do_requires(module_name, module_db): + """find all modules that use module_name + """ + try: + public_users = sorted(what_requires(module_name, module_db)) + private_users = sorted(what_requires_private(module_name, module_db)) + except KeyError as err: + print(f'No module named \'{module_name}\'', file=sys.stderr) + sys.exit(1) + + print(f'{module_name} is required by:') + + if len(public_users) != 0: + print('- PUBLIC:') + print(" -", "\n - ".join(public_users)) + + if len(private_users) != 0: + print('PRIVATE:') + print(" -", "\n - ".join(private_users)) + + +def do_count_usage(module_db, verbose): + """print modules ordered by number of modules linking to them""" + reqcount = dict.fromkeys(get_modules(module_db), 0) + + for m in get_modules(module_db): + reqcount[m] += len(what_requires(m, module_db)) + reqcount[m] += len(what_requires_private(m, module_db)) + + for m in sorted(reqcount, key=reqcount.get, reverse=True): + if verbose: + print(m, f'({reqcount[m]} users)') + else: + print(m) + + +def do_check_consistency(module_name, module_db, full_scan): try: - cc = check_consistency(module_name, module_db) + cc = check_consistency(module_name, module_db, full_scan) if cc: print(f'{module_name} has inconsistent dependencies:', file=sys.stderr) print("\n".join(cc), file=sys.stderr) @@ -292,10 +470,10 @@ def do_find_cycles(module_db, verbose): sys.exit(1) -def do_find_inconsistencies(db, verbose): +def do_find_inconsistencies(db, verbose, full_scan): inconsistent = {} for m in get_modules(db): - cc = check_consistency(m, db) + cc = check_consistency(m, db, full_scan) if cc: inconsistent[m] = "\n".join(cc) @@ -327,6 +505,9 @@ def do_libraries(db, verbose): metavar="FILE", help="module interface map file") parser.add_argument("-v", "--verbose", action="store_true", help="verbose output") + parser.add_argument("--all-files", + action="store_true", + help="consider all files in source tree for consistency checks") query_group = parser.add_mutually_exclusive_group(required=True) @@ -353,7 +534,17 @@ def do_libraries(db, verbose): query_group.add_argument( "-u", "--usage-requirements", metavar="", - help="determine and print usage requirements of module" + help="print usage requirements of module" + ) + query_group.add_argument( + "-r", "--requires", + metavar="", + help="print modules linking to this module" + ) + query_group.add_argument( + "--count-usage", + action="store_true", + help="print modules from most to least linked to" ) query_group.add_argument( "-c", "--check-consistency", @@ -408,14 +599,18 @@ def do_libraries(db, verbose): elif args.provides: do_provides(args.provides, db, args.verbose) elif args.usage_requirements: - ur = usage_requirements(args.usage_requirements, db) + ur = usage_requirements(args.usage_requirements, db, args.all_files) print(json.dumps(ur, indent=2)) + elif args.count_usage: + do_count_usage(db, args.verbose) + elif args.requires: + do_requires(args.requires, db) elif args.check_consistency: - do_check_consistency(args.check_consistency, db) + do_check_consistency(args.check_consistency, db, args.all_files) elif args.find_cycles: do_find_cycles(db, args.verbose) elif args.find_inconsistencies: - do_find_inconsistencies(db, args.verbose) + do_find_inconsistencies(db, args.verbose, args.all_files) elif args.library: try: print(get_parent_target(args.library, db)) diff --git a/cmake/Templates/Geant4Config.cmake.in b/cmake/Templates/Geant4Config.cmake.in index b758062db3e..871410e55b9 100644 --- a/cmake/Templates/Geant4Config.cmake.in +++ b/cmake/Templates/Geant4Config.cmake.in @@ -4,7 +4,6 @@ # # It defines the following variables # Geant4_INCLUDE_DIRS - include directories for Geant4 -# Geant4_DEFINITIONS - compile definitions needed to use Geant4 # Geant4_LIBRARIES - libraries to link against # Geant4_BUILD_TYPE - Build type (e.g. "Release") used to build this # install. Only set if Geant4 was installed using @@ -41,8 +40,8 @@ # In Geant4, components can be optional subcomponents of an always # available library. In that case there will be no # Geant4_{COMPONENT}_LIBRARY variable. These non-library components are -# generally activated by compile definitions, and in these cases the -# appropriate definition will be added to the Geant4_DEFINITIONS component. +# generally activated by compile definitions that are part of the target's +# COMPILE_DEFINITIONS property. # # If you use the REQUIRED and/or COMPONENTS arguments of find_package to # specify components, then the module will issue a FATAL_ERROR if the @@ -91,6 +90,11 @@ # vis_toolssg_xt_gles (ToolsSG visualization with Xt windowing and GLES rendering) # vis_toolssg_qt_gles (ToolsSG visualization with Qt windowing and GLES rendering) # vis_toolssg_windows_gles (ToolsSG visualization with Windows windowing and GLES rendering) + +# vis_toolssg_x11_zb (ToolsSG visualization with X11 windowing and g4tools zbuffer rendering) +# vis_toolssg_xt_zb (ToolsSG visualization with Xt windowing and g4tools zbuffer rendering) +# vis_toolssg_qt_zb (ToolsSG visualization with Qt windowing and g4tools zbuffer rendering) +# vis_toolssg_windows_zb (ToolsSG visualization with Windows windowing and g4tools zbuffer rendering) # # In addition, two 'shorthand' components are defined to help activate all # available User Interface and Visualization drivers: @@ -194,16 +198,6 @@ get_filename_component(_geant4_thisdir "${CMAKE_CURRENT_LIST_FILE}" PATH) # - Provide variable indicating C++ Standard we were compiled against set(Geant4_CXX_STANDARD "@CMAKE_CXX_STANDARD@") -#----------------------------------------------------------------------- -# Set the base compile definitions required to use Geant4 if the variable -# does not exist (we do this to ensure multiple calls to find_package -# don't overwrite previous invocations) -# Components may append to this, but should prefer usage requirements -# via INTERFACE_COMPILE_DEFINITIONS -if(NOT Geant4_DEFINITIONS) - set(Geant4_DEFINITIONS @GEANT4_CORE_DEFINITIONS@) -endif() - #----------------------------------------------------------------------- # Configure the path to the Geant4 headers, using a relative path if # possible. This is only known at CMake time, so we expand a CMake @@ -367,19 +361,9 @@ endif() # - UI : TCSH set(Geant4_ui_tcsh_FOUND @UNIX@) -if(Geant4_ui_tcsh_FOUND) - if(("ui_tcsh" IN_LIST Geant4_FIND_COMPONENTS) OR Geant4_ui_all_FOUND) - list(APPEND Geant4_DEFINITIONS -DG4UI_USE_TCSH) - endif() -endif() # - UI : win32 set(Geant4_ui_win32_FOUND @WIN32@) -if(Geant4_ui_win32_FOUND) - if(("ui_win32" IN_LIST Geant4_FIND_COMPONENTS) OR Geant4_ui_all_FOUND) - list(APPEND Geant4_DEFINITIONS -DG4UI_USE_WIN32) - endif() -endif() #----------------------------------------------------------------------- # Components which requires slightly more complex setup @@ -389,10 +373,6 @@ set(Geant4_vis_raytracer_x11_FOUND @GEANT4_USE_RAYTRACER_X11@) if(Geant4_vis_raytracer_x11_FOUND) find_dependency(X11) include("${CMAKE_CURRENT_LIST_DIR}/G4X11Shim.cmake") - - if(("vis_raytracer_x11" IN_LIST Geant4_FIND_COMPONENTS) OR Geant4_vis_all_FOUND) - list(APPEND Geant4_DEFINITIONS -DG4VIS_USE_RAYTRACERX) - endif() endif() # - Qt (UI and Vis!) @@ -405,7 +385,9 @@ if(Geant4_qt_FOUND) find_dependency(Qt@QT_VERSION_MAJOR@Gui REQUIRED) find_dependency(Qt@QT_VERSION_MAJOR@Widgets REQUIRED) find_dependency(Qt@QT_VERSION_MAJOR@OpenGL REQUIRED) - find_dependency(Qt@QT_VERSION_MAJOR@PrintSupport REQUIRED) + if(@QT_VERSION_MAJOR@ GREATER 5) + find_dependency(Qt@QT_VERSION_MAJOR@OpenGLWidgets REQUIRED) + endif() if(Geant4_qt3d_FOUND) find_dependency(Qt@QT_VERSION_MAJOR@3DCore @QT3D_MINIMUM_VERSION@ REQUIRED) @@ -421,7 +403,6 @@ if(Geant4_qt_FOUND) OR ("vis_openinventor" IN_LIST Geant4_FIND_COMPONENTS) OR ("vis_toolssg_qt_gles" IN_LIST Geant4_FIND_COMPONENTS) OR Geant4_ui_all_FOUND OR Geant4_vis_all_FOUND) - list(APPEND Geant4_DEFINITIONS -DG4UI_USE_QT -DG4VIS_USE_OPENGLQT) set(_geant4_use_opengl_library ON) # Qt3D is always on if available set(_geant4_use_qt3D_library ${Geant4_qt3d_FOUND}) @@ -446,7 +427,6 @@ if(Geant4_motif_FOUND) OR ("vis_openinventor" IN_LIST Geant4_FIND_COMPONENTS) OR ("vis_toolssg_xt_gles" IN_LIST Geant4_FIND_COMPONENTS) OR Geant4_ui_all_FOUND OR Geant4_vis_all_FOUND) - list(APPEND Geant4_DEFINITIONS -DG4UI_USE_XM -DG4VIS_USE_OPENGLXM) set(_geant4_use_opengl_library ON) endif() endif() @@ -463,7 +443,6 @@ if(Geant4_vis_opengl_x11_FOUND) endif() if(("vis_opengl_x11" IN_LIST Geant4_FIND_COMPONENTS) OR Geant4_vis_all_FOUND) - list(APPEND Geant4_DEFINITIONS -DG4VIS_USE_OPENGLX) set(_geant4_use_opengl_library ON) endif() endif() @@ -473,7 +452,6 @@ set(Geant4_vis_opengl_win32_FOUND @GEANT4_USE_OPENGL_WIN32@) if(Geant4_vis_opengl_win32_FOUND) find_dependency(OpenGL) if(("vis_opengl_win32" IN_LIST Geant4_FIND_COMPONENTS) OR Geant4_vis_all_FOUND) - list(APPEND Geant4_DEFINITIONS -DG4VIS_USE_OPENGLWIN32) set(_geant4_use_opengl_library ON) endif() endif() @@ -499,16 +477,6 @@ if(Geant4_vis_openinventor_FOUND) endif() if(("vis_openinventor" IN_LIST Geant4_FIND_COMPONENTS) OR Geant4_vis_all_FOUND) - if(Geant4_vis_openinventor_qt_FOUND) - list(APPEND Geant4_DEFINITIONS -DG4VIS_USE_OI -DG4VIS_USE_OIQT) - else() - if(WIN32) - list(APPEND Geant4_DEFINITIONS -DG4VIS_USE_OI -DG4VIS_USE_OIWIN32) - else() - list(APPEND Geant4_DEFINITIONS -DG4VIS_USE_OI -DG4VIS_USE_OIX) - endif() - endif() - set(_geant4_use_inventor_library ON) endif() endif() @@ -523,21 +491,24 @@ if(Geant4_vis_toolssg_x11_gles_FOUND) else() find_dependency(OpenGL) endif() +endif() - if(("vis_toolssg_x11_gles" IN_LIST Geant4_FIND_COMPONENTS) OR Geant4_vis_all_FOUND) - list(APPEND Geant4_DEFINITIONS -DG4VIS_USE_TOOLSSG_X11_GLES) - endif() +# - ToolsSG X11/ZB +set(Geant4_vis_toolssg_x11_zb_FOUND @GEANT4_USE_TOOLSSG_X11_ZB@) +if(Geant4_vis_toolssg_x11_zb_FOUND) + find_dependency(X11) + include("${CMAKE_CURRENT_LIST_DIR}/G4X11Shim.cmake") endif() # - ToolsSG Windows/GLES set(Geant4_vis_toolssg_windows_gles_FOUND @GEANT4_USE_TOOLSSG_WINDOWS_GLES@) if(Geant4_vis_toolssg_windows_gles_FOUND) find_dependency(OpenGL) - if(("vis_toolssg_windows_gles" IN_LIST Geant4_FIND_COMPONENTS) OR Geant4_vis_all_FOUND) - list(APPEND Geant4_DEFINITIONS -DG4VIS_USE_TOOLSSG_WINDOWS_GLES) - endif() endif() +# - ToolsSG Windows/ZB +set(Geant4_vis_toolssg_windows_zb_FOUND @GEANT4_USE_TOOLSSG_WINDOWS_ZB@) + # - ToolsSG Xt/GLES set(Geant4_vis_toolssg_xt_gles_FOUND @GEANT4_USE_TOOLSSG_XT_GLES@) if(Geant4_vis_toolssg_xt_gles_FOUND) @@ -548,33 +519,37 @@ if(Geant4_vis_toolssg_xt_gles_FOUND) else() find_dependency(OpenGL) endif() +endif() - if(("vis_toolssg_xt_gles" IN_LIST Geant4_FIND_COMPONENTS) OR Geant4_vis_all_FOUND) - list(APPEND Geant4_DEFINITIONS -DG4VIS_USE_TOOLSSG_XT_GLES) - endif() +# - ToolsSG Xt/ZB +set(Geant4_vis_toolssg_xt_zb_FOUND @GEANT4_USE_TOOLSSG_XT_ZB@) +if(Geant4_vis_toolssg_xt_zb_FOUND) + find_dependency(X11) + include("${CMAKE_CURRENT_LIST_DIR}/G4X11Shim.cmake") endif() # - ToolsSG Qt/GLES set(Geant4_vis_toolssg_qt_gles_FOUND @GEANT4_USE_TOOLSSG_QT_GLES@) if(Geant4_vis_toolssg_qt_gles_FOUND) find_dependency(OpenGL) - if(("vis_toolssg_qt_gles" IN_LIST Geant4_FIND_COMPONENTS) OR Geant4_vis_all_FOUND) - list(APPEND Geant4_DEFINITIONS -DG4VIS_USE_TOOLSSG_QT_GLES) - endif() endif() +# - ToolsSG Qt/ZB +set(Geant4_vis_toolssg_qt_zb_FOUND @GEANT4_USE_TOOLSSG_QT_ZB@) + # Reset any OpenGL Preference set(OpenGL_GL_PREFERENCE "${OpenGL_GL_PREFERENCE_SAVE}") set(Geant4_vis_Vtk_FOUND @GEANT4_USE_VTK@) if(Geant4_vis_Vtk_FOUND) - find_dependency(VTK) - list(APPEND Geant4_DEFINITIONS -DG4VIS_USE_VTK) + find_dependency(VTK 9 REQUIRED COMPONENTS + CommonColor + InteractionStyle + IOExport + GUISupportQt + RenderingVolumeOpenGL2 + ) set(_geant4_use_vtk_library ON) - - if(Geant4_qt_FOUND) - list(APPEND Geant4_DEFINITIONS -DG4VIS_USE_VTK_QT) - endif() endif() #----------------------------------------------------------------------- @@ -628,13 +603,11 @@ set(_geant4_internal_libraries # - G4OpenGL if it's requested. if(_geant4_use_opengl_library) list(APPEND _geant4_internal_libraries Geant4::G4OpenGL${_geant4_lib_use_suffix}) - list(APPEND Geant4_DEFINITIONS -DG4VIS_USE_OPENGL) endif() # - Qt3D if it's requested. if(_geant4_use_qt3D_library) list(APPEND _geant4_internal_libraries Geant4::G4visQt3D${_geant4_lib_use_suffix}) - list(APPEND Geant4_DEFINITIONS -DG4VIS_USE_QT3D) endif() # - G4OpenInventor if it's requested. @@ -646,6 +619,11 @@ if(_geant4_use_vtk_library) list(APPEND _geant4_internal_libraries Geant4::G4visVtk${_geant4_lib_use_suffix}) endif() +# - GDML always added for now as old G4persistency lib always added if present +if(Geant4_gdml_FOUND) + set(_geant4_g4gdml_library Geant4::G4gdml${_geant4_lib_use_suffix}) +endif() + # - G3toG4 if it's requested if(_geant4_use_g3tog4_library) set(_geant4_g3tog4_library Geant4::G3toG4${_geant4_lib_use_suffix}) @@ -693,7 +671,9 @@ list(APPEND _geant4_internal_libraries Geant4::G4vis_management${_geant4_lib_use_suffix} Geant4::G4modeling${_geant4_lib_use_suffix} Geant4::G4interfaces${_geant4_lib_use_suffix} - Geant4::G4persistency${_geant4_lib_use_suffix} + Geant4::G4mctruth${_geant4_lib_use_suffix} + Geant4::G4geomtext${_geant4_lib_use_suffix} + ${_geant4_g4gdml_library} ${_geant4_g3tog4_library} Geant4::G4analysis${_geant4_lib_use_suffix} Geant4::G4error_propagation${_geant4_lib_use_suffix} @@ -728,24 +708,9 @@ endforeach() set(Geant4_LIBRARIES ${_geant4_internal_libraries}) #----------------------------------------------------------------------- -# Remove any duplicates from the Geant4_{DEFINITIONS,INCLUDE_DIRS,LIBRARIES} +# Remove any duplicates from the Geant4_{INCLUDE_DIRS,LIBRARIES} # variables so that multiple passes append things correctly # -if(Geant4_DEFINITIONS) - list(REMOVE_DUPLICATES Geant4_DEFINITIONS) -endif() -# - Create an interface target to export the selected definitions as -# usage requirements -if(NOT TARGET Geant4::G4UIVisDefinitions) - add_library(Geant4::G4UIVisDefinitions INTERFACE IMPORTED) -endif() -string(REGEX REPLACE "^\-D|;-D" ";" G4UIVIS_COMPILE_DEFINITIONS "${Geant4_DEFINITIONS}") -set_target_properties(Geant4::G4UIVisDefinitions PROPERTIES - INTERFACE_COMPILE_DEFINITIONS "${G4UIVIS_COMPILE_DEFINITIONS}") -unset(G4UIVIS_COMPILE_DEFINITIONS) - -list(APPEND Geant4_LIBRARIES Geant4::G4UIVisDefinitions) - if(Geant4_INCLUDE_DIRS) list(REMOVE_DUPLICATES Geant4_INCLUDE_DIRS) endif() diff --git a/cmake/Templates/geant4-config.in b/cmake/Templates/geant4-config.in index f19240ae2c5..9f2b496a49d 100644 --- a/cmake/Templates/geant4-config.in +++ b/cmake/Templates/geant4-config.in @@ -116,7 +116,8 @@ for g4incdir in ${includedirs} ; do done libs="-lG4interfaces \ --lG4persistency \ +-lG4geomtext \ +-lG4mctruth \ -lG4analysis \ -lG4error_propagation \ -lG4readout \ @@ -176,6 +177,7 @@ feature_list="${feature_list} gdml[${have_gdml}]" if test "x${have_gdml}" = "xyes" ; then cflags="${cflags} @G4_XERCESC_CFLAGS@" + libs="-lG4gdml ${libs}" fi # - PTL diff --git a/cmake/Templates/geant4_validate_sources.cmake.in b/cmake/Templates/geant4_validate_sources.cmake.in index 1649d9d21f2..83c352e7814 100644 --- a/cmake/Templates/geant4_validate_sources.cmake.in +++ b/cmake/Templates/geant4_validate_sources.cmake.in @@ -74,11 +74,19 @@ foreach(_sourcesfile ${GEANT4_SOURCESCMAKE_FILES}) # - Find on disk files... file(GLOB - _ondisk_hh + _ondisk_public_hh RELATIVE ${_sourcesfile_location}/include ${_sourcesfile_location}/include/*.hh ${_sourcesfile_location}/include/*.icc ) + file(GLOB + _ondisk_private_hh + RELATIVE ${_sourcesfile_location}/include/private + ${_sourcesfile_location}/include/private/*.hh + ${_sourcesfile_location}/include/private/*.icc + ) + set(_ondisk_hh ${_ondisk_public_hh} ${_ondisk_private_hh}) + file(GLOB _ondisk_cc RELATIVE ${_sourcesfile_location}/src diff --git a/config/G4UI_USE.gmk b/config/G4UI_USE.gmk index 59332e3d246..91087bd6c3a 100644 --- a/config/G4UI_USE.gmk +++ b/config/G4UI_USE.gmk @@ -24,11 +24,11 @@ endif # there is no need to use it. ifneq ($(G4INCLUDE_EXEC),1) - CPPFLAGS += -I$(G4BASE)/interfaces/basic/include - CPPFLAGS += -I$(G4BASE)/interfaces/common/include + CPPFLAGS += -I$(G4BASE)/interfaces/core/include + CPPFLAGS += -I$(G4BASE)/interfaces/implementation/include endif -UILIBS += -lG4UIbasic -UILIBS += -lG4UIcommon +UILIBS += -lG4UIcore +UILIBS += -lG4UIimplementation ifdef G4UI_USE_TERMINAL G4UI_USE = 1 diff --git a/config/History b/config/History index e8f9789f0d5..392db5a670a 100644 --- a/config/History +++ b/config/History @@ -6,6 +6,15 @@ It must **not** be used as a substitute for writing good git commit messages! -------------------------------------------------------------------------------- +## 2023-05-10 Ben Morgan (config-V11-01-02) +- Update config scripts for split of G4persistency library + +## 2023-04-02 Ben Morgan (config-V11-01-01) +- No longer link to QtPrintSupport, which is not used in the toolkit. + +## 2023-02-01 Ben Morgan (config-V11-01-00) +- Update UI/interfaces include paths to reflect new organization + ## 2022-11-02 Gabriele Cosmo (config-V11-00-12) - Silence ld warnings in Darwin setups. diff --git a/config/binmake.gmk b/config/binmake.gmk index 6daeda2fcec..24a98ea4ebc 100644 --- a/config/binmake.gmk +++ b/config/binmake.gmk @@ -226,7 +226,11 @@ LDLIBS1 := $(EXTRALIBS) # VISLIBS (and UILIBS?) is handled by the granular library script... # ifdef GLOBALLIBS - LDLIBS2 := $(VISLIBS) -lG4interfaces -lG4persistency + LDLIBS2 := $(VISLIBS) -lG4interfaces -lG4mctruth -lG4geomtext + + ifdef G4LIB_USE_GDML + LDLIBS2 += -lG4gdml + endif ifdef G4LIB_USE_G3TOG4 LDLIBS2 += -lG3toG4 diff --git a/config/sys/Darwin-clang.gmk b/config/sys/Darwin-clang.gmk index 9a6b438ae2b..b19312cb741 100644 --- a/config/sys/Darwin-clang.gmk +++ b/config/sys/Darwin-clang.gmk @@ -146,23 +146,21 @@ ifeq ($(G4SYSTEM),Darwin-clang) QTFLAGS += -I $(QTLPATH)/Qt3DCore.framework/Headers QTFLAGS += -I $(QTLPATH)/Qt3DExtras.framework/Headers QTFLAGS += -I $(QTLPATH)/Qt3DRender.framework/Headers - QTFLAGS += -I $(QTLPATH)/QtPrintSupport.framework/Headers QTFLAGS += -I $(QTHOME)/include/Qt -I$(QTHOME)/include endif ifndef QTLIBS QTLIBS := -F$(QTLPATH) -framework QtCore -framework QtGui - QTLIBS += -framework QtWidgets -framework QtPrintSupport + QTLIBS += -framework QtWidgets endif ifndef QT3DLIBS QT3DLIBS := -F$(QTLPATH) -framework QtCore -framework QtGui QT3DLIBS += -framework QtWidgets QT3DLIBS += -framework Qt3DCore -framework Qt3DExtras -framework Qt3DRender - QT3DLIBS += -framework QtPrintSupport endif ifndef GLQTLIBS GLQTLIBS := -F$(QTLPATH) -framework QtCore -framework QtGui GLQTLIBS += -framework QtWidgets - GLQTLIBS += -framework QtOpenGL -framework QtPrintSupport + GLQTLIBS += -framework QtOpenGL endif endif diff --git a/config/sys/Darwin-g++.gmk b/config/sys/Darwin-g++.gmk index ad48cd01c6e..173dcdc73e7 100644 --- a/config/sys/Darwin-g++.gmk +++ b/config/sys/Darwin-g++.gmk @@ -175,23 +175,21 @@ ifeq ($(G4SYSTEM),Darwin-g++) QTFLAGS += -I $(QTLPATH)/Qt3DCore.framework/Headers QTFLAGS += -I $(QTLPATH)/Qt3DExtras.framework/Headers QTFLAGS += -I $(QTLPATH)/Qt3DRender.framework/Headers - QTFLAGS += -I $(QTLPATH)/QtPrintSupport.framework/Headers QTFLAGS += -I $(QTHOME)/include/Qt -I$(QTHOME)/include endif ifndef QTLIBS QTLIBS := -F$(QTLPATH) -framework QtCore -framework QtGui - QTLIBS += -framework QtWidgets -framework QtPrintSupport + QTLIBS += -framework QtWidgets endif ifndef QT3DLIBS QT3DLIBS := -F$(QTLPATH) -framework QtCore -framework QtGui QT3DLIBS += -framework QtWidgets QT3DLIBS += -framework Qt3DCore -framework Qt3DExtras -framework Qt3DRender - QT3DLIBS += -framework QtPrintSupport endif ifndef GLQTLIBS GLQTLIBS := -F$(QTLPATH) -framework QtCore -framework QtGui GLQTLIBS += -framework QtWidgets - GLQTLIBS += -framework QtOpenGL -framework QtPrintSupport + GLQTLIBS += -framework QtOpenGL endif endif diff --git a/config/sys/Linux-clang.gmk b/config/sys/Linux-clang.gmk index f7c5b4cc76d..3f9ad6fc939 100644 --- a/config/sys/Linux-clang.gmk +++ b/config/sys/Linux-clang.gmk @@ -106,7 +106,6 @@ ifeq ($(G4SYSTEM),Linux-clang) QTFLAGS += -I $(QTHOME)/include/Qt3DCore QTFLAGS += -I $(QTHOME)/include/Qt3DExtras QTFLAGS += -I $(QTHOME)/include/Qt3DRender - QTFLAGS += -I $(QTHOME)/include/QtPrintSupport endif else # Qt4 ifndef QTFLAGS @@ -125,13 +124,13 @@ ifeq ($(G4SYSTEM),Linux-clang) endif ifeq ($(QT_VERSION),5) ifndef QTLIBS # Qt5 - QTLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt5PrintSupport + QTLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets endif ifndef QT3DLIBS - QT3DLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt53DCore -lQt53DExtras -lQt53DRender -lQt5PrintSupport + QT3DLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt53DCore -lQt53DExtras -lQt53DRender endif ifndef GLQTLIBS - GLQTLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt5OpenGL -lQt5PrintSupport + GLQTLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt5OpenGL endif else # Qt4 ifndef QTLIBS diff --git a/config/sys/Linux-g++.gmk b/config/sys/Linux-g++.gmk index fe31f751ce6..b34ba0fc9a0 100644 --- a/config/sys/Linux-g++.gmk +++ b/config/sys/Linux-g++.gmk @@ -103,7 +103,6 @@ ifeq ($(G4SYSTEM),Linux-g++) QTFLAGS += -I $(QTHOME)/include/Qt3DCore QTFLAGS += -I $(QTHOME)/include/Qt3DExtras QTFLAGS += -I $(QTHOME)/include/Qt3DRender - QTFLAGS += -I $(QTHOME)/include/QtPrintSupport endif else # Qt4 ifndef QTFLAGS @@ -122,13 +121,13 @@ ifeq ($(G4SYSTEM),Linux-g++) endif ifeq ($(QT_VERSION),5) ifndef QTLIBS # Qt5 - QTLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt5PrintSupport + QTLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets endif ifndef QT3DLIBS - QT3DLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt53DCore -lQt53DExtras -lQt53DRender -lQt5PrintSupport + QT3DLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt53DCore -lQt53DExtras -lQt53DRender endif ifndef GLQTLIBS - GLQTLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt5OpenGL -lQt5PrintSupport + GLQTLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt5OpenGL endif else # Qt4 ifndef QTLIBS diff --git a/config/sys/Linux-icc.gmk b/config/sys/Linux-icc.gmk index 1bca1c3a98a..b214017bab1 100644 --- a/config/sys/Linux-icc.gmk +++ b/config/sys/Linux-icc.gmk @@ -97,7 +97,6 @@ ifeq ($(G4SYSTEM),Linux-icc) QTFLAGS += -I $(QTHOME)/include/Qt3DCore QTFLAGS += -I $(QTHOME)/include/Qt3DExtras QTFLAGS += -I $(QTHOME)/include/Qt3DRender - QTFLAGS += -I $(QTHOME)/include/QtPrintSupport endif else # Qt4 ifndef QTFLAGS @@ -116,13 +115,13 @@ ifeq ($(G4SYSTEM),Linux-icc) endif ifeq ($(QT_VERSION),5) ifndef QTLIBS # Qt5 - QTLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt5PrintSupport + QTLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets endif ifndef QT3DLIBS - QT3DLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt53DCore -lQt53DExtras -lQt53DRender -lQt5PrintSupport + QT3DLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt53DCore -lQt53DExtras -lQt53DRender endif ifndef GLQTLIBS - GLQTLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt5OpenGL -lQt5PrintSupport + GLQTLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt5OpenGL endif else # Qt4 ifndef QTLIBS diff --git a/config/sys/Linux-icx.gmk b/config/sys/Linux-icx.gmk index 31de2359834..1ed311763ed 100644 --- a/config/sys/Linux-icx.gmk +++ b/config/sys/Linux-icx.gmk @@ -98,7 +98,6 @@ ifeq ($(G4SYSTEM),Linux-icx) QTFLAGS += -I $(QTHOME)/include/Qt3DCore QTFLAGS += -I $(QTHOME)/include/Qt3DExtras QTFLAGS += -I $(QTHOME)/include/Qt3DRender - QTFLAGS += -I $(QTHOME)/include/QtPrintSupport endif else # Qt4 ifndef QTFLAGS @@ -117,13 +116,13 @@ ifeq ($(G4SYSTEM),Linux-icx) endif ifeq ($(QT_VERSION),5) ifndef QTLIBS # Qt5 - QTLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt5PrintSupport + QTLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets endif ifndef QT3DLIBS - QT3DLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt53DCore -lQt53DExtras -lQt53DRender -lQt5PrintSupport + QT3DLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt53DCore -lQt53DExtras -lQt53DRender endif ifndef GLQTLIBS - GLQTLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt5OpenGL -lQt5PrintSupport + GLQTLIBS := -L$(QTLIBPATH) -lQt5Core -lQt5Gui -lQt5Widgets -lQt5OpenGL endif else # Qt4 ifndef QTLIBS diff --git a/config/sys/WIN32-VC.gmk b/config/sys/WIN32-VC.gmk index 674374867e7..6a3959aeda1 100644 --- a/config/sys/WIN32-VC.gmk +++ b/config/sys/WIN32-VC.gmk @@ -47,16 +47,14 @@ ifeq ($(G4SYSTEM),WIN32-VC) QTFLAGS += -I$(QTHOME)/include/QtGui QTFLAGS += -I$(QTHOME)/include/QtWidgets QTFLAGS += -I$(QTHOME)/include/QtOpenGL - QTFLAGS += -I$(QTHOME)/include/QtPrintSupport endif ifndef QTMOC QTMOC := $(QTHOME)/bin/moc endif ifndef QTLIBS # Qt5 - QTLIBS := $(LIB_PATH)$(QTHOME)/lib Qt5Core.lib Qt5Gui.lib Qt5Widgets.lib Qt5PrintSupport.lib - endif + QTLIBS := $(LIB_PATH)$(QTHOME)/lib Qt5Core.lib Qt5Gui.lib Qt5Widgets.lib ifndef GLQTLIBS - GLQTLIBS := $(LIB_PATH)$(QTHOME)/lib Qt5Core.lib Qt5Gui.lib Qt5Widgets.lib Qt5OpenGL.lib Qt5PrintSupport.lib + GLQTLIBS := $(LIB_PATH)$(QTHOME)/lib Qt5Core.lib Qt5Gui.lib Qt5Widgets.lib Qt5OpenGL.lib endif # diff --git a/examples/.doxygen/Doxyfile b/examples/.doxygen/Doxyfile index 60789f5e433..10a605848f8 100644 --- a/examples/.doxygen/Doxyfile +++ b/examples/.doxygen/Doxyfile @@ -855,6 +855,10 @@ INPUT = Doxymain.h \ ../extended/hadronic/Hadr09/.README.txt \ ../extended/hadronic/Hadr10/.README.txt \ ../extended/hadronic/FissionFragment \ + ../extended/hadronic/FlukaCern/.README.txt \ + ../extended/hadronic/FlukaCern/ProcessLevel/CrossSection/.README.txt \ + ../extended/hadronic/FlukaCern/ProcessLevel/FinalState/.README.txt \ + ../extended/hadronic/FlukaCern/PhysicsListLevel/.README.txt \ ../extended/hadronic/NeutronSource/.README.txt \ ../extended/hadronic/ParticleFluence/.README.txt \ ../extended/hadronic/ParticleFluence/Calo/.README.txt \ diff --git a/examples/.doxygen/Doxymain.h b/examples/.doxygen/Doxymain.h index 381c5703472..f86037a39f0 100644 --- a/examples/.doxygen/Doxymain.h +++ b/examples/.doxygen/Doxymain.h @@ -32,7 +32,7 @@ examples are also used as "acceptance"-tests for the release process. See more on each examples category pages: - \ref README_basic - \ref README_extended -- +- Advanced Examples The previous set of examples oriented to novice users, "novice", diff --git a/examples/.doxygen/Doxymodules_hadronic.h b/examples/.doxygen/Doxymodules_hadronic.h index 53cab3f224d..45e6a34552c 100644 --- a/examples/.doxygen/Doxymodules_hadronic.h +++ b/examples/.doxygen/Doxymodules_hadronic.h @@ -121,6 +121,24 @@ /** @} */ +/** @defgroup extended_hadronic_FlukaCern_exFlukaCernCrossSection exFlukaCernCrossSection +* Hadronic FlukaCern exFlukaCernCrossSection example has its + * standalone documentation + * @ingroup extended_hadronic + * @{ + */ + +/** @} */ + +/** @defgroup extended_hadronic_FlukaCern_exFlukaCernFinalState exFlukaCernFinalState +* Hadronic FlukaCern exFlukaCernFinalState example has its + * standalone documentation + * @ingroup extended_hadronic + * @{ + */ + +/** @} */ + /** @defgroup extended_hadronic_NeutronSource NeutronSource * The NeutronSource hadronic classes have their * standalone documentation diff --git a/examples/.doxygen/History b/examples/.doxygen/History index 4b542cdfd39..c148618df85 100644 --- a/examples/.doxygen/History +++ b/examples/.doxygen/History @@ -5,6 +5,12 @@ which **must** added in reverse chronological order (newest at the top). It must be used as a substitute for writing good git commit messages! +## 2023-06-05 S. Guatelli (doxygen-V11-01-01) +- updated link to the Advanced Examples webpage + +## 2023-05-22 G. Hugo (doxygen-V11-01-00) +- Added FlukaCern extended examples in documentation (hadronic/FlukaCern). + ## 2022-11-09 I. Hrivnacova (doxygen-V11-00-03) - Updated configuration files and generate_standalone.sh script - Added new extended example analysis/AnaEx03 diff --git a/examples/.doxygen/generate_standalone.sh b/examples/.doxygen/generate_standalone.sh index cb63798823f..264c8440cfa 100755 --- a/examples/.doxygen/generate_standalone.sh +++ b/examples/.doxygen/generate_standalone.sh @@ -36,7 +36,7 @@ for DIR in eventgenerator/HepMC/MCTruth eventgenerator/pythia/py8decayer hadroni done # process examples in fourth level directory in extended -for DIR in parallel/MPI/examples/exMPI01 parallel/MPI/examples/exMPI02 parallel/MPI/examples/exMPI03; do +for DIR in hadronic/FlukaCern/ProcessLevel/CrossSection hadronic/FlukaCern/ProcessLevel/FinalState parallel/MPI/examples/exMPI01 parallel/MPI/examples/exMPI02 parallel/MPI/examples/exMPI03; do generate ${DIR} ${BACK_PATH4} done diff --git a/examples/History b/examples/History index 9b35d2f91aa..fb3f6b7a582 100644 --- a/examples/History +++ b/examples/History @@ -6,6 +6,54 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-06-30 Gabriele Cosmo (examples-V11-01-06) +- Updated reference outputs according to reference tag geant4-11-01-ref-06. +- Included tags: doxygen-V11-01-01, eFLASH_radiotherapy-V11-01-00, + exhadr04-V11-01-00, exhadr06-V11-01-01, molecularDNA-V11-01-04, + range-V11-01-01, spower-V11-01-01, exgflash-V11-01-01. + +## 2023-05-31 Gabriele Cosmo (examples-V11-01-05) +- Updated reference outputs according to reference tag geant4-11-01-ref-05. +- Included tags: testem2-V11-01-00, testem3-V11-01-02, testem5-V11-01-00, + testem12-V11-01-00, testem13-V11-01-00, testem14-V11-01-00, + testem18-V11-01-00, exHadronic-V11-01-00, exhadr01-V11-01-01, + exhadrParticleFluenceCalo-V11-01-00, exdna-V11-01-01, + exhadrParticleFluenceConcentricSpheres-V11-01-00, + exhadrParticleFluenceLayer-V11-01-00, UHDR-V11-01-00, + exhadrParticleFluenceSphere-V11-01-00, dnadamage2-V11-01-00, + range-V11-01-00, spower-V11-01-00. + +## 2023-04-30 Gabriele Cosmo (examples-V11-01-04) +- Updated reference outputs according to reference tag geant4-11-01-ref-04. +- Included tags: ICRP145Phantoms-V11-01-02, fastAerosol-V11-01-00, + xraysiliconporeoptics-V11-01-00, testem3-V11-01-01, + testem4-V11-01-00, testem7-V11-01-00, testem8-V11-01-00, + testem11-V11-01-01, p8decayer-V11-01-00, exhadr03-V11-01-01, + molecularDNA-V11-01-03, exgflash-V11-01-00, G01-V11-01-00. + +## 2023-03-31 Gabriele Cosmo (examples-V11-01-03) +- Updated reference outputs according to reference tag geant4-11-01-ref-03. +- Included tags: CRP110Phantoms-V11-01-01, ICRP145Phantoms-V11-01-01, + stim_pixe_tomography-V11-01-00, xraytesdetector-V11-01-01, + testem0-V11-01-00, testem1-V11-01-00, exhadr03-V11-01-00, + exicsd-V11-01-01, exam-ext-vis-persp-V11-01-01. + +## 2023-02-28 Gabriele Cosmo (examples-V11-01-02) +- Updated reference outputs according to reference tag geant4-11-01-ref-02. +- Included tags: exampleB4-V11-01-00, exhadr10-V11-01-01, molecularDNA-V11-01-02, + exam-ext-vis-persp-V11-01-00. + +## 2023-01-31 Gabriele Cosmo (examples-V11-01-01) +- Updated reference outputs according to reference tag geant4-11-01-ref-01. +- Included tags: ICRP110Phantoms-V11-01-00, ReverseMC01-V11-01-00, + electromagnetic-V11-01-00, testem3-V11-01-00, + testem11-V11-01-00, testem15-V11-01-00, exgps-V11-01-00, + exExoticPhysics-V11-01-00, VecGeomNavigation-V11-01-00, + exhadr01-V11-01-00, exhadr05-V11-01-00, exhadr06-V11-01-00, + exhadr07-V11-01-00, exMedical-V11-01-00, exicsd-V11-01-00, + molecularDNA-V11-01-01, exam-ext-vis-standalone-V11-01-00, + MPI-V11-01-00. + ## 2022-10-31 Gabriele Cosmo (examples-V11-01-00) - Updated reference outputs according to reference tag geant4-11-01-ref-00. - Included tags: doxygen-V11-00-03, CaTS-V11-00-02, eRosita-V11-00-03, diff --git a/examples/advanced/CMakeLists.txt b/examples/advanced/CMakeLists.txt index 4197d8d11ae..4b547b6630c 100644 --- a/examples/advanced/CMakeLists.txt +++ b/examples/advanced/CMakeLists.txt @@ -11,6 +11,7 @@ find_package(ROOT QUIET) add_subdirectory(air_shower) add_subdirectory(amsEcal) add_subdirectory(brachytherapy) +add_subdirectory(stim_pixe_tomography) if(Geant4_gdml_FOUND) add_subdirectory(ChargeExchangeMC) diff --git a/examples/advanced/CaTS/CaTS.out b/examples/advanced/CaTS/CaTS.out index 310497e7bc6..218028f3506 100644 --- a/examples/advanced/CaTS/CaTS.out +++ b/examples/advanced/CaTS/CaTS.out @@ -38,7 +38,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -188,7 +188,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -220,7 +220,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -252,7 +252,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -265,7 +265,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -311,7 +310,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -343,7 +342,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -375,7 +374,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -407,7 +406,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -439,7 +438,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -471,7 +470,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -503,7 +502,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -888,12 +887,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -911,4 +919,4 @@ Correlated gamma emission flag 0 Max 2J for sampling of angular correlations 10 ======================================================================= writing Event: 0 -TimeTotal> 5.254 2.780 +TimeTotal> 3.700 2.610 diff --git a/examples/advanced/ChargeExchangeMC/ChargeExchangeMC.out b/examples/advanced/ChargeExchangeMC/ChargeExchangeMC.out index aa104c7e9f2..fd3dde04c16 100644 --- a/examples/advanced/ChargeExchangeMC/ChargeExchangeMC.out +++ b/examples/advanced/ChargeExchangeMC/ChargeExchangeMC.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -243,7 +243,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -275,7 +275,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -307,7 +307,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -320,7 +320,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -366,7 +365,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -398,7 +397,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -430,7 +429,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -462,7 +461,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -494,7 +493,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -526,7 +525,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -558,7 +557,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -948,12 +947,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1046,510 +1054,462 @@ Index : 9 used in the geometry : Yes ================================================================== ### Run 0 starts. -Event 1968 +Event 3030 --- Reconstructed data: -- entry points: - left: -7.81554 3.15803 -15 cm - right: 4.20707 5.36192 -15 cm + left: -11.6903 -5.46792 -15 cm + right: -5.21072 4.84864 -15 cm target: 0 0 0 fm - -- the angle: 118.101 deg - -- mass of the output particle: 515.946 MeV - -- mass of the nucleus output particle: 968.468 MeV + -- the angle: 124.155 deg + -- mass of the output particle: 160.234 MeV + -- mass of the nucleus output particle: 1.34328 GeV -- production model data: Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta 125.9820 40.9285 320.7577 MeV -- 621.7979 MeV - (SCM) : eta 125.9820 40.9285 56.4045 MeV -- 535.6572 MeV - Nucleus output particle (LAB) : neutron -125.9820 -40.9285 409.2423 MeV -- 1.0597 GeV - (SCM) : neutron -125.9820 -40.9285 -56.4045 MeV -- 979.1114 MeV + Output particle (LAB) : eta 54.4971 -7.4244 100.8705 MeV -- 197.1669 MeV + (SCM) : eta 54.4971 -7.4244 16.9540 MeV -- 170.2567 MeV + Nucleus output particle (LAB) : neutron -54.4971 7.4244 629.1295 MeV -- 1.4843 GeV + (SCM) : neutron -54.4971 7.4244 -16.9540 MeV -- 1.3445 GeV -- triggered angular ranges: 4 [ 0.4000, 0.2000) --- Energy Deposit - monitor : 502.526 keV - vc (l) : 92.2691 keV + monitor : 456.825 keV + vc (l) : 0 eV vc (r) : 0 eV - cal (l) : 389.494 MeV - 0 0 2.097 0.9607 20.48 10 - 0 0 0.2204 15.74 325.1 5.929 - 0 0 0.4297 0 3.894 0.6428 - 0 0 2.72 1.324 0 0 - cal (r) : 232.304 MeV - 2.182 25.66 42.15 1.246 0 0 - 0 20.78 119.9 20.16 0 0 - 0 0 0.2587 0 0 0 + cal (l) : 137.276 MeV 0 0 0 0 0 0 -Event 2373 - --- Track Points - monitor : pi- [1,bp] 737.2 MeV : -6.668 1.144 -1.25 mm [-0.007102, -0.01338, 0.9999] - target : pi- [1,bp] 736.7 MeV : 2.696 4.211 0.002316 cm [-0.6418, -0.7669, -0.003398] - : eta [3,op] 306 MeV : -3.421 -3.098 -0.03007 cm [-0.2789, -0.9156, 0.2898] - : neutron [4,np] 487 MeV : -3.421 -3.098 -0.03007 cm [-0.7911, -0.5824, -0.1869] - : pi0 [7,opdp] 159.9 MeV : -3.421 -3.098 -0.03007 cm [-0.7667, -0.1335, 0.628] - : pi0 [5,opdp] 172.1 MeV : -3.421 -3.098 -0.03007 cm [-0.3168, -0.9157, 0.2474] - vc (l) : tp is not valid - vc (r) : tp is not valid - cal (l) : tp is not valid - cal (r) : tp is not valid - --- - angle between the eta decay products : 58.6355 deg - --- Triggered angular ranges: - 6 [ 0.0000, -0.2000) - --- Production model data: - Incident particle (LAB) : pi- 1.8754 -2.3649 734.3756 MeV -- 747.5269 MeV - (SCM) : pi- 1.1596 -1.4623 454.0855 MeV -- 475.0547 MeV - Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV - (SCM) : proton -1.1596 1.4623 -454.0855 MeV -- 1.0424 GeV - Output particle (LAB) : eta 114.7204 88.6663 269.4787 MeV -- 627.5301 MeV - (SCM) : eta 114.0212 89.5480 -4.3201 MeV -- 566.7373 MeV - Nucleus output particle (LAB) : neutron -112.8450 -91.0312 464.8969 MeV -- 1.0583 GeV - (SCM) : neutron -114.0212 -89.5480 4.3201 MeV -- 950.6952 MeV + 0 0 0 0 0.2916 0 + 0 0 0 0 71.98 12.8 + 0 0 0 0 10.83 41.37 + cal (r) : 59.8908 MeV + 0 0.9481 1.523 0.2739 2.166 0.5958 + 0 0 0 38.91 14.08 1.396 + 0 0 0 0 0 0 + 0 0 0 0 0 0 +Event 4950 --- Reconstructed data: -- entry points: - left: 4.52945 1.25857 -15 cm - right: -7.93654 0.0672892 -15 cm + left: 4.97899 5.49378 -15 cm + right: -9.49921 2.82993 -15 cm target: 0 0 0 fm - -- the angle: 141.834 deg - -- mass of the output particle: 168.614 MeV - -- mass of the nucleus output particle: 1.34463 GeV + -- the angle: 142.931 deg + -- mass of the output particle: 194.698 MeV + -- mass of the nucleus output particle: 1.30779 GeV -- production model data: Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta -1.0052 1.9716 58.2937 MeV -- 178.4200 MeV - (SCM) : eta -1.0052 1.9716 -21.2745 MeV -- 169.9652 MeV - Nucleus output particle (LAB) : neutron 1.0052 -1.9716 671.7063 MeV -- 1.5031 GeV - (SCM) : neutron 1.0052 -1.9716 21.2745 MeV -- 1.3448 GeV + Output particle (LAB) : eta 57.1233 16.1642 68.8233 MeV -- 214.8677 MeV + (SCM) : eta 57.1233 16.1642 -27.1510 MeV -- 205.3501 MeV + Nucleus output particle (LAB) : neutron -57.1233 -16.1642 661.1767 MeV -- 1.4666 GeV + (SCM) : neutron -57.1233 -16.1642 27.1510 MeV -- 1.3094 GeV -- triggered angular ranges: - 10 [-0.8000, -1.0000) + 8 [-0.4000, -0.6000) --- Energy Deposit - monitor : 449.677 keV + monitor : 945.693 keV vc (l) : 0 eV vc (r) : 0 eV - cal (l) : 89.5541 MeV - 0 0 0.8574 0.5567 0 0 - 14.05 1.305 21.2 5.714 0 0 - 0 0.3281 45.18 0.3664 0 0 + cal (l) : 139.057 MeV + 0 8.051 55.06 0 0 0 + 0 14.61 60.65 0 0 0 + 0 0.6816 0 0 0 0 0 0 0 0 0 0 - cal (r) : 88.8659 MeV - 0 0 0 2.627 0 0 - 0 0 0 0.5471 17.97 0 - 0 0 0 0.8103 66.74 0.1685 + cal (r) : 75.8108 MeV + 0 0 0 0 0 0.4661 + 0 0 0 0.3095 73.3 0.7115 + 0 0 0 0 1.026 0 0 0 0 0 0 0 -Event 3495 +Event 8381 --- Reconstructed data: -- entry points: - left: -9.59487 -3.08879 -15 cm - right: 4.48437 -3.66997 -15 cm + left: -10.4372 2.54034 -15 cm + right: 9.75569 1.33388 -15 cm target: 0 0 0 fm - -- the angle: 116.352 deg - -- mass of the output particle: 592.263 MeV - -- mass of the nucleus output particle: 901.307 MeV + -- the angle: 110.816 deg + -- mass of the output particle: 249.36 MeV + -- mass of the nucleus output particle: 1.25976 GeV -- production model data: Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta 89.8364 -38.8969 375.3520 MeV -- 707.9887 MeV - (SCM) : eta 89.8364 -38.8969 75.4706 MeV -- 605.0246 MeV - Nucleus output particle (LAB) : neutron -89.8364 38.8969 354.6480 MeV -- 973.5059 MeV - (SCM) : neutron -89.8364 38.8969 -75.4706 MeV -- 909.7441 MeV + Output particle (LAB) : eta -17.0938 9.4620 171.9668 MeV -- 303.5371 MeV + (SCM) : eta -17.0938 9.4620 44.6136 MeV -- 254.0719 MeV + Nucleus output particle (LAB) : neutron 17.0938 -9.4620 558.0332 MeV -- 1.3780 GeV + (SCM) : neutron 17.0938 -9.4620 -44.6136 MeV -- 1.2607 GeV -- triggered angular ranges: - 2 [ 0.8000, 0.6000) + 1 [ 1.0000, 0.8000) --- Energy Deposit - monitor : 354.869 keV + monitor : 511.265 keV vc (l) : 0 eV vc (r) : 0 eV - cal (l) : 415.985 MeV - 0 0 0 0.2053 1.161 0 - 0 0 0 0.2824 10.86 0.2055 - 0 0 1.229 13.04 300.4 59.74 - 0 0 0 0.2081 17 11.61 - cal (r) : 292.004 MeV - 0 0 0 0 0 0 - 0 1.095 0 0 0 0 - 0.9734 11.16 271.5 0.9794 0 0 - 0 3.862 1.959 0.468 0 0 -Event 9755 + cal (l) : 142.01 MeV + 0 0 0 0.3128 0.5454 10.77 + 0 0 0 0.392 117.2 3.693 + 0 0 0 0.413 6.242 1.41 + 0 0 0 0 0 1.037 + cal (r) : 161.527 MeV + 0 2.288 0 0 0 0 + 8.999 129.5 0.3639 0 0 0 + 2.087 16.81 0.7228 0 0 0 + 0 0.7328 0 0 0 0 +Event 10107 --- Track Points - monitor : pi- [1,bp] 733.9 MeV : 1.006 -9.716 -1.25 mm [0.006753, -0.006642, 1] - target : pi- [1,bp] 733.4 MeV : 3.44 3.628 -1.157 cm [-0.6376, -0.7703, -0.006314] - : eta [3,op] 173.4 MeV : 3.403 3.584 -1.157 cm [-0.1561, -0.984, -0.08568] - : neutron [4,np] 591.3 MeV : 3.403 3.584 -1.157 cm [-0.7451, -0.6667, 0.01726] - : pi0 [7,opdp] 109.8 MeV : 3.403 3.584 -1.157 cm [0.3656, -0.9035, 0.2235] - : pi0 [5,opdp] 168.7 MeV : 3.403 3.584 -1.157 cm [0.1221, -0.7298, -0.6727] - vc (l) : tp is not valid - vc (r) : tp is not valid - cal (l) : tp is not valid - cal (r) : tp is not valid + monitor : pi- [1,bp] 733.6 MeV : -7.991 -1.95 -1.25 mm [0.003873, 0.01546, 0.9999] + target : pi- [1,bp] 733.1 MeV : 2.62 4.259 0.2508 cm [-0.6403, -0.768, 0.01487] + : eta [4,op] 336.1 MeV : 0.202 1.358 0.307 cm [-0.877, -0.4582, -0.1447] + : neutron [5,np] 448.1 MeV : 0.202 1.358 0.307 cm [-0.387, -0.9126, 0.1321] + : gamma [7,opdp] 398.3 MeV : 0.202 1.358 0.307 cm [-0.9828, 0.1739, -0.06147] + : gamma [6,opdp] 244.5 MeV : 0.202 1.358 0.307 cm [0.3955, -0.9131, -0.09874] + vc (l) : gamma [6,opdp] 244.5 MeV : -0.8972 -5.638 -0.25 cm [-0.02747, -0.09874, 0.9947] + vc (r) : gamma [7,opdp] 398.3 MeV : 3.73 -3.315 -0.25 cm [0.08644, -0.06147, 0.9944] + cal (l) : gamma [6,opdp] 244.5 MeV : -0.9317 -5.762 -15 cm [-0.02747, -0.09874, 0.9947] + cal (r) : gamma [7,opdp] 398.3 MeV : 3.838 -3.393 -15 cm [0.08644, -0.06147, 0.9944] --- - angle between the eta decay products : 56.38 deg + angle between the eta decay products : 122.779 deg --- Triggered angular ranges: - 9 [-0.6000, -0.8000) + 4 [ 0.4000, 0.2000) --- Production model data: - Incident particle (LAB) : pi- 4.8358 -4.6556 733.3411 MeV -- 746.5347 MeV - (SCM) : pi- 2.9913 -2.8799 453.6293 MeV -- 474.6331 MeV + Incident particle (LAB) : pi- 3.2022 10.5615 732.1424 MeV -- 745.4087 MeV + (SCM) : pi- 1.9817 6.5361 453.0959 MeV -- 474.1543 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV - (SCM) : proton -2.9913 2.8799 -453.6293 MeV -- 1.0422 GeV - Output particle (LAB) : eta 88.9696 -14.8607 148.1422 MeV -- 574.6610 MeV - (SCM) : eta 87.2462 -13.2015 -113.2101 MeV -- 566.3528 MeV - Nucleus output particle (LAB) : neutron -84.1338 10.2051 585.1989 MeV -- 1.1101 GeV - (SCM) : neutron -87.2462 13.2015 113.2101 MeV -- 950.4661 MeV + (SCM) : proton -1.9817 -6.5361 -453.0959 MeV -- 1.0420 GeV + Output particle (LAB) : eta -126.8027 -48.6210 307.4257 MeV -- 642.7334 MeV + (SCM) : eta -128.0123 -52.6104 30.8763 MeV -- 565.9162 MeV + Nucleus output particle (LAB) : neutron 130.0049 59.1825 424.7167 MeV -- 1.0409 GeV + (SCM) : neutron 128.0123 52.6104 -30.8763 MeV -- 950.2060 MeV --- Reconstructed data: -- entry points: - left: 0.169863 4.93051 -15 cm - right: 4.35911 1.73392 -15 cm + left: -1.49727 -4.74838 -15 cm + right: 2.35665 -3.11711 -15 cm target: 0 0 0 fm - -- the angle: 125.683 deg - -- mass of the output particle: 214.064 MeV - -- mass of the nucleus output particle: 1.29393 GeV + -- the angle: 125.844 deg + -- mass of the output particle: 534.08 MeV + -- mass of the nucleus output particle: 938.507 MeV -- production model data: Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta 47.7943 14.9079 109.5273 MeV -- 245.6141 MeV - (SCM) : eta 47.7943 14.9079 3.2158 MeV -- 219.8645 MeV - Nucleus output particle (LAB) : neutron -47.7943 -14.9079 620.4727 MeV -- 1.4359 GeV - (SCM) : neutron -47.7943 -14.9079 -3.2158 MeV -- 1.2949 GeV + Output particle (LAB) : eta -166.1545 -38.5439 284.4929 MeV -- 628.7051 MeV + (SCM) : eta -166.1545 -38.5439 12.8195 MeV -- 560.8014 MeV + Nucleus output particle (LAB) : neutron 166.1545 38.5439 445.5071 MeV -- 1.0528 GeV + (SCM) : neutron 166.1545 38.5439 -12.8195 MeV -- 953.9672 MeV -- triggered angular ranges: 5 [ 0.2000, 0.0000) --- Energy Deposit - monitor : 404.656 keV + monitor : 414.641 keV vc (l) : 0 eV vc (r) : 0 eV - cal (l) : 147.52 MeV - 0 0 45.12 11.75 0 0 - 0 0 64.71 23.6 0.3436 0 - 0 0 0 1.557 0.4546 0 + cal (l) : 220.176 MeV 0 0 0 0 0 0 - cal (r) : 98.0942 MeV - 0 0 1.094 0 0 0 - 0.4559 4.51 85.98 2.109 0 0 - 0.4466 1.752 0.8888 0.188 0 0 - 0 0 0.6685 0 0 0 -Event 12915 + 0 0 0 0.7607 0.3838 8.485 + 0 1.851 46.55 70.16 0.1334 0.4509 + 0.3378 5.62 6.038 78.41 0.9987 0 + cal (r) : 408.53 MeV + 0 0 0 1.345 0 0 + 0.5601 0.9859 0.3559 1.21 2.304 0 + 0.8678 5.396 368.6 2.33 1.903 0 + 0 3.886 17.22 1.168 0.09601 0.2859 +Event 13596 + --- Track Points + monitor : pi- [1,bp] 727.8 MeV : 2.009 -1.072 -0.125 cm [-0.005181, 0.01788, 0.9998] + target : pi- [1,bp] 727.1 MeV : 4.378 2.416 -0.5062 cm [-0.6481, -0.7613, 0.01902] + : eta [4,op] 298.2 MeV : -0.8384 -3.712 -0.3531 cm [-0.2948, -0.924, 0.2435] + : neutron [5,np] 475.3 MeV : -0.8384 -3.712 -0.3531 cm [-0.8028, -0.5827, -0.1263] + : pi0 [8,opdp] 71.62 MeV : -0.8384 -3.712 -0.3531 cm [-0.127, -0.9919, -0.009463] + : pi0 [6,opdp] 189.1 MeV : -0.8384 -3.712 -0.3531 cm [-0.7526, -0.5111, -0.4152] + vc (l) : tp is not valid + vc (r) : tp is not valid + cal (l) : tp is not valid + cal (r) : tp is not valid + --- + angle between the eta decay products : 52.6678 deg + --- Triggered angular ranges: + 6 [ 0.0000, -0.2000) + --- Production model data: + Incident particle (LAB) : pi- -4.4988 12.5684 724.9829 MeV -- 738.4160 MeV + (SCM) : pi- -2.7921 7.8004 449.9513 MeV -- 471.1737 MeV + Nucleus particle (LAB) : proton -0.0000 0.0000 0.0000 eV -- 938.2720 MeV + (SCM) : proton 2.7921 -7.8004 -449.9513 MeV -- 1.0406 GeV + Output particle (LAB) : eta 109.7685 72.6117 267.5762 MeV -- 623.7559 MeV + (SCM) : eta 111.4432 67.9330 -2.3087 MeV -- 563.1985 MeV + Nucleus output particle (LAB) : neutron -114.2673 -60.0434 457.4067 MeV -- 1.0529 GeV + (SCM) : neutron -111.4432 -67.9330 2.3087 MeV -- 948.5899 MeV --- Reconstructed data: -- entry points: - left: -6.72508 2.95016 -15 cm - right: -2.56578 5.99506 -15 cm + left: -4.06202 0.899377 -15 cm + right: -8.34219 -5.40723 -15 cm target: 0 0 0 fm - -- the angle: 125.456 deg - -- mass of the output particle: 582.88 MeV - -- mass of the nucleus output particle: 911.043 MeV + -- the angle: 133.923 deg + -- mass of the output particle: 137.396 MeV + -- mass of the nucleus output particle: 1.37579 GeV -- production model data: Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta -110.6934 51.6642 292.2154 MeV -- 663.3706 MeV - (SCM) : eta -110.6934 51.6642 4.6859 MeV -- 595.5609 MeV - Nucleus output particle (LAB) : neutron 110.6934 -51.6642 437.7846 MeV -- 1.0181 GeV - (SCM) : neutron 110.6934 -51.6642 -4.6859 MeV -- 919.2078 MeV + Output particle (LAB) : eta 18.8449 -4.2096 61.3898 MeV -- 151.7209 MeV + (SCM) : eta 18.8449 -4.2096 -4.9708 MeV -- 138.8353 MeV + Nucleus output particle (LAB) : neutron -18.8449 4.2096 668.6102 MeV -- 1.5298 GeV + (SCM) : neutron -18.8449 4.2096 4.9708 MeV -- 1.3759 GeV -- triggered angular ranges: - 5 [ 0.2000, 0.0000) + 7 [-0.2000, -0.4000) --- Energy Deposit - monitor : 619.999 keV + monitor : 572.217 keV vc (l) : 0 eV vc (r) : 0 eV - cal (l) : 281.632 MeV - 0 0 0 6.047 4.104 0.7844 - 0 0 1.147 149.5 102.6 4.025 - 0 0 0 0.02175 12.18 0.9603 - 0 0 0 0.2767 0 0 - cal (r) : 381.739 MeV - 0 0 18.03 196.3 2.693 0 - 0 0 11.21 150.6 1.331 1.02 - 0 0 0 0.5264 0 0 + cal (l) : 89.3462 MeV + 0 0 0 0 0.4526 0 + 0 0 0.4401 64.19 4.873 0 + 0 0 0 17.9 0.7802 0 + 0 0 0 0.7146 0 0 + cal (r) : 62.3747 MeV + 0 0 0 0 0 0 0 0 0 0 0 0 -Event 14930 + 0 0 0 0.4921 43.41 0 + 0 0 0 0.401 18.07 0 +Event 15837 --- Track Points - monitor : pi- [1,bp] 729.2 MeV : -3.337 8.521 -1.25 mm [0.008179, 0.006785, 0.9999] - target : pi- [1,bp] 728.7 MeV : 3.14 3.891 1.047 cm [-0.6363, -0.7714, 0.007422] - : eta [3,op] 195.8 MeV : 2.801 3.479 1.051 cm [-0.3707, -0.8145, -0.4462] - : neutron [4,np] 568.9 MeV : 2.801 3.479 1.051 cm [-0.6881, -0.7072, 0.1627] - : pi0 [7,opdp] 112.7 MeV : 2.801 3.479 1.051 cm [-0.4727, -0.5865, -0.6577] - : pi0 [5,opdp] 173.1 MeV : 2.801 3.479 1.051 cm [0.5484, -0.7692, -0.3279] - vc (l) : tp is not valid - vc (r) : tp is not valid - cal (l) : tp is not valid - cal (r) : tp is not valid + monitor : pi- [1,bp] 730.3 MeV : -1.842 0.2747 -0.125 cm [0.0009769, 0.000948, 1] + target : pi- [1,bp] 729.7 MeV : 1.604 4.736 0.326 cm [-0.6422, -0.7665, 0.001999] + : eta [3,op] 356 MeV : -0.939 1.701 0.3339 cm [-0.856, -0.5052, 0.11] + : neutron [4,np] 414.5 MeV : -0.939 1.701 0.3339 cm [-0.3922, -0.9154, -0.09053] + : gamma [6,opdp] 249.6 MeV : -0.939 1.701 0.3339 cm [0.3798, -0.9242, 0.04113] + : gamma [5,opdp] 403.8 MeV : -0.939 1.701 0.3339 cm [-0.9895, 0.1259, 0.07154] + vc (l) : gamma [6,opdp] 249.6 MeV : -2.952 2.835 -0.25 cm [-0.04637, 0.04113, 0.9981] + vc (r) : gamma [5,opdp] 403.8 MeV : 6.412 4.489 -0.25 cm [0.1345, 0.07154, 0.9883] + cal (l) : gamma [6,opdp] 249.6 MeV : -3.01 2.886 -15 cm [-0.04637, 0.04113, 0.9981] + cal (r) : gamma [5,opdp] 403.8 MeV : 6.583 4.579 -15 cm [0.1345, 0.07154, 0.9883] --- - angle between the eta decay products : 65.9465 deg + angle between the eta decay products : 119.285 deg --- Triggered angular ranges: - 9 [-0.6000, -0.8000) + 3 [ 0.6000, 0.4000) --- Production model data: - Incident particle (LAB) : pi- 5.6408 5.2110 728.6039 MeV -- 741.8911 MeV - (SCM) : pi- 3.4959 3.2295 451.5548 MeV -- 472.6566 MeV + Incident particle (LAB) : pi- 1.5088 1.6285 728.7671 MeV -- 742.0150 MeV + (SCM) : pi- 0.9350 1.0092 451.6331 MeV -- 472.7094 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV - (SCM) : proton -3.4959 -3.2295 -451.5548 MeV -- 1.0413 GeV - Output particle (LAB) : eta 46.9048 -87.3718 168.8315 MeV -- 581.7996 MeV - (SCM) : eta 44.8804 -89.2420 -92.6610 MeV -- 564.5504 MeV - Nucleus output particle (LAB) : neutron -41.2640 92.5827 559.7723 MeV -- 1.0984 GeV - (SCM) : neutron -44.8804 89.2420 92.6610 MeV -- 949.3932 MeV + (SCM) : proton -0.9350 -1.0092 -451.6331 MeV -- 1.0413 GeV + Output particle (LAB) : eta -117.8472 39.1505 333.6450 MeV -- 653.3701 MeV + (SCM) : eta -118.4225 38.5296 55.7708 MeV -- 564.5986 MeV + Nucleus output particle (LAB) : neutron 119.3560 -37.5221 395.1221 MeV -- 1.0269 GeV + (SCM) : neutron 118.4225 -38.5296 -55.7708 MeV -- 949.4219 MeV --- Reconstructed data: -- entry points: - left: 0.398964 -2.64287 -15 cm - right: 5.24714 -1.11673 -15 cm + left: -2.90736 3.77938 -15 cm + right: 7.93037 4.1645 -15 cm target: 0 0 0 fm - -- the angle: 125.279 deg - -- mass of the output particle: 259.687 MeV - -- mass of the nucleus output particle: 1.25293 GeV + -- the angle: 119.272 deg + -- mass of the output particle: 549.905 MeV + -- mass of the nucleus output particle: 920.036 MeV -- production model data: Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta 28.1937 -9.4919 133.3695 MeV -- 293.4445 MeV - (SCM) : eta 28.1937 -9.4919 6.6317 MeV -- 261.4694 MeV - Nucleus output particle (LAB) : neutron -28.1937 9.4919 596.6305 MeV -- 1.3881 GeV - (SCM) : neutron -28.1937 9.4919 -6.6317 MeV -- 1.2533 GeV + Output particle (LAB) : eta -161.7137 44.5721 342.3563 MeV -- 669.1347 MeV + (SCM) : eta -161.7137 44.5721 57.5678 MeV -- 577.7954 MeV + Nucleus output particle (LAB) : neutron 161.7137 -44.5721 387.6437 MeV -- 1.0124 GeV + (SCM) : neutron 161.7137 -44.5721 -57.5678 MeV -- 936.9733 MeV -- triggered angular ranges: 4 [ 0.4000, 0.2000) --- Energy Deposit - monitor : 356.551 keV + monitor : 430.884 keV vc (l) : 0 eV vc (r) : 0 eV - cal (l) : 159.114 MeV + cal (l) : 232.641 MeV + 0 0 1.018 8.573 6.943 0.3295 + 0 0 9.655 198.7 1.483 0 + 0 0 1.774 4.216 0 0 0 0 0 0 0 0 - 0 0 5.086 3.255 0 0 - 0 0 81.65 66.7 0 0 - 0 0.3759 1.043 1.005 0 0 - cal (r) : 134.331 MeV - 0 0 0.4397 0 0 0 - 2.091 5.898 19.67 0 0 0 - 0 18.77 84.59 1.402 0 0 - 0 1.06 0.4169 0 0 0 -Event 14982 + cal (r) : 436.493 MeV + 1.37 75.09 2.646 0.6935 0 0 + 0 344.2 6.87 0 0 0 + 0 3.551 0.3791 0 0 0 + 0 0 1.645 0 0 0 +Event 19754 --- Reconstructed data: -- entry points: - left: 4.67233 4.13954 -15 cm - right: 1.63768 1.5362 -15 cm + left: -9.52235 2.50618 -15 cm + right: -2.19737 -3.02194 -15 cm target: 0 0 0 fm - -- the angle: 132.61 deg - -- mass of the output particle: 139.127 MeV - -- mass of the nucleus output particle: 1.37515 GeV + -- the angle: 123.142 deg + -- mass of the output particle: 518.58 MeV + -- mass of the nucleus output particle: 961.164 MeV -- production model data: Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta -6.9309 6.9403 61.2461 MeV -- 152.3271 MeV - (SCM) : eta -6.9309 6.9403 -5.4225 MeV -- 139.5775 MeV - Nucleus output particle (LAB) : neutron 6.9309 -6.9403 668.7539 MeV -- 1.5292 GeV - (SCM) : neutron 6.9309 -6.9403 5.4225 MeV -- 1.3752 GeV + Output particle (LAB) : eta 147.5731 6.4007 312.4486 MeV -- 623.1919 MeV + (SCM) : eta 147.5731 6.4007 46.5091 MeV -- 541.2089 MeV + Nucleus output particle (LAB) : neutron -147.5731 -6.4007 417.5514 MeV -- 1.0583 GeV + (SCM) : neutron -147.5731 -6.4007 -46.5091 MeV -- 973.5598 MeV -- triggered angular ranges: - 8 [-0.4000, -0.6000) + 4 [ 0.4000, 0.2000) --- Energy Deposit - monitor : 492.295 keV + monitor : 386.176 keV vc (l) : 0 eV vc (r) : 0 eV - cal (l) : 70.7052 MeV - 0 0 6.439 0 0 0 - 0 13.87 50.4 0 0 0 - 0 0 0 0 0 0 - 0 0 0 0 0 0 - cal (r) : 81.6219 MeV - 0 0.4962 0 0.5557 0 0 - 0.4878 0.7757 66.4 0.4352 0 0.584 - 0 0.2726 4.889 6.126 0.6016 0 - 0 0 0 0 0 0 -Event 15792 - --- Track Points - monitor : pi- [1,bp] 733 MeV : -0.2321 -1.422 -0.125 cm [0.001151, -0.005421, 1] - target : pi- [1,bp] 732.1 MeV : 3.06 3.955 -1.575 cm [-0.6417, -0.7669, -0.005904] - : eta [4,op] 247.8 MeV : -2.367 -2.526 -1.625 cm [-0.7237, -0.5088, -0.4663] - : neutron [5,np] 532.8 MeV : -2.367 -2.526 -1.625 cm [-0.5441, -0.8127, 0.2086] - : pi0 [8,opdp] 239.2 MeV : -2.367 -2.526 -1.625 cm [-0.577, -0.6963, -0.4269] - : pi0 [6,opdp] 110.1 MeV : -2.367 -2.526 -1.625 cm [-0.1619, 0.9738, -0.1595] - vc (l) : tp is not valid - vc (r) : tp is not valid - cal (l) : tp is not valid - cal (r) : tp is not valid - --- - angle between the eta decay products : 121.099 deg - --- Triggered angular ranges: - 7 [-0.2000, -0.4000) - --- Production model data: - Incident particle (LAB) : pi- -0.0991 -4.4024 729.9211 MeV -- 743.1582 MeV - (SCM) : pi- -0.0614 -2.7270 452.1368 MeV -- 473.1965 MeV - Nucleus particle (LAB) : proton 0.0000 -0.0000 0.0000 eV -- 938.2720 MeV - (SCM) : proton 0.0614 2.7270 -452.1368 MeV -- 1.0415 GeV - Output particle (LAB) : eta -56.3321 -115.5280 211.8334 MeV -- 601.2871 MeV - (SCM) : eta -56.2959 -113.9215 -54.5266 MeV -- 565.0427 MeV - Nucleus output particle (LAB) : neutron 56.2330 111.1257 518.0878 MeV -- 1.0801 GeV - (SCM) : neutron 56.2959 113.9215 54.5266 MeV -- 949.6860 MeV + cal (l) : 412.383 MeV + 0 0 0 8.451 5.122 2.276 + 0 0 0 9.66 350.8 13.6 + 0 0 0 0.2952 8.807 10.79 + 0 0 0 0 0 2.601 + cal (r) : 210.809 MeV + 0 0.4787 0 0 0 0 + 0 0 0.4325 0.9457 1.082 0.3012 + 0 0 6.359 189 2.073 0 + 0 0.5648 1.066 8.499 0 0 +Event 21353 --- Reconstructed data: -- entry points: - left: -6.46039 3.90836 -15 cm - right: -2.35493 -2.96707 -15 cm + left: -3.97511 -1.81356 -15 cm + right: -9.68529 1.71971 -15 cm target: 0 0 0 fm - -- the angle: 126.19 deg - -- mass of the output particle: 120.964 MeV - -- mass of the nucleus output particle: 1.39301 GeV + -- the angle: 135.399 deg + -- mass of the output particle: 536.264 MeV + -- mass of the nucleus output particle: 950.573 MeV -- production model data: Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta 12.5305 2.1458 63.0723 MeV -- 137.0107 MeV - (SCM) : eta 12.5305 2.1458 3.9860 MeV -- 121.6951 MeV - Nucleus output particle (LAB) : neutron -12.5305 -2.1458 666.9277 MeV -- 1.5445 GeV - (SCM) : neutron -12.5305 -2.1458 -3.9860 MeV -- 1.3931 GeV + Output particle (LAB) : eta 137.9945 -5.7785 247.2829 MeV -- 606.4683 MeV + (SCM) : eta 137.9945 -5.7785 -17.7697 MeV -- 554.0494 MeV + Nucleus output particle (LAB) : neutron -137.9945 5.7785 482.7171 MeV -- 1.0750 GeV + (SCM) : neutron -137.9945 5.7785 17.7697 MeV -- 960.7193 MeV -- triggered angular ranges: - 4 [ 0.4000, 0.2000) + 6 [ 0.0000, -0.2000) --- Energy Deposit - monitor : 399.85 keV + monitor : 383.815 keV vc (l) : 0 eV - vc (r) : 59.5951 keV - cal (l) : 78.1497 MeV - 0 0.5207 0.1395 4.026 0.7443 0 - 0 0 0 0.2412 70.93 0 - 0 0 0 0.6115 0.9366 0 - 0 0 0 0 0 0 - cal (r) : 58.861 MeV + vc (r) : 0 eV + cal (l) : 392.467 MeV + 0 4.831 0.8823 0.5972 0 0 + 0 0 0.4131 23.09 4.901 1.469 + 0 0 1.323 287.3 44.59 1.014 + 0 0 1.641 13.77 6.651 0 + cal (r) : 214.001 MeV + 0 0 0 0 0.5711 0.1386 + 0 0 0 0.6209 188.9 5.202 + 0 0 0 0.5472 15.35 2.7 0 0 0 0 0 0 - 0 0 0 0.558 0 0 - 0 0 1.175 56.26 0.394 0 - 0 0 0.4741 0 0 0 -Event 18947 - --- Track Points - monitor : pi- [1,bp] 741 MeV : -1.055 -1.774 -0.125 cm [-0.001491, -0.0014, 1] - target : pi- [1,bp] 740.5 MeV : 2.258 4.461 -1.765 cm [-0.6444, -0.7647, 0.0001788] - : eta [5,op] 139.9 MeV : -0.8874 0.7294 -1.764 cm [-0.8178, -0.4674, 0.3357] - : neutron [6,np] 619 MeV : -0.8874 0.7294 -1.764 cm [-0.5849, -0.8074, -0.07709] - : pi0 [9,opdp] 189.3 MeV : -0.8874 0.7294 -1.764 cm [-1, 0.008896, -0.003536] - : pi0 [7,opdp] 54.35 MeV : -0.8874 0.7294 -1.764 cm [-0.7575, -0.1827, 0.6268] - vc (l) : tp is not valid - vc (r) : tp is not valid - cal (l) : tp is not valid - cal (r) : tp is not valid - --- - angle between the eta decay products : 41.0953 deg - --- Triggered angular ranges: - 10 [-0.8000, -1.0000) - --- Production model data: - Incident particle (LAB) : pi- -1.7096 -0.7399 739.2455 MeV -- 752.3079 MeV - (SCM) : pi- -1.0550 -0.4566 456.2088 MeV -- 477.0824 MeV - Nucleus particle (LAB) : proton 0.0000 -0.0000 0.0000 eV -- 938.2720 MeV - (SCM) : proton 1.0550 0.4566 -456.2088 MeV -- 1.0433 GeV - Output particle (LAB) : eta -45.6261 46.9761 123.6809 MeV -- 565.4540 MeV - (SCM) : eta -45.0223 47.2374 -137.4040 MeV -- 568.5869 MeV - Nucleus output particle (LAB) : neutron 43.9165 -47.7160 615.5647 MeV -- 1.1251 GeV - (SCM) : neutron 45.0223 -47.2374 137.4040 MeV -- 951.7990 MeV +Event 26107 --- Reconstructed data: -- entry points: - left: -8.83898 -3.16419 -15 cm - right: 11.9118 1.62738 -15 cm + left: -4.18979 -4.00143 -15 cm + right: -10.1823 5.38089 -15 cm target: 0 0 0 fm - -- the angle: 110.439 deg - -- mass of the output particle: 215.69 MeV - -- mass of the nucleus output particle: 1.27976 GeV + -- the angle: 135.76 deg + -- mass of the output particle: 333.614 MeV + -- mass of the nucleus output particle: 1.16381 GeV -- production model data: Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta -73.5128 0.1525 161.0326 MeV -- 279.0304 MeV - (SCM) : eta -73.5128 0.1525 44.2861 MeV -- 232.1373 MeV - Nucleus output particle (LAB) : neutron 73.5128 -0.1525 568.9674 MeV -- 1.4025 GeV - (SCM) : neutron 73.5128 -0.1525 -44.2861 MeV -- 1.2826 GeV + Output particle (LAB) : eta -88.6558 10.1054 129.1442 MeV -- 368.6980 MeV + (SCM) : eta -88.6558 10.1054 -34.3249 MeV -- 347.0421 MeV + Nucleus output particle (LAB) : neutron 88.6558 -10.1054 600.8558 MeV -- 1.3128 GeV + (SCM) : neutron 88.6558 -10.1054 34.3249 MeV -- 1.1677 GeV -- triggered angular ranges: - 3 [ 0.6000, 0.4000) + 7 [-0.2000, -0.4000) --- Energy Deposit - monitor : 361.902 keV + monitor : 789.596 keV vc (l) : 0 eV vc (r) : 0 eV - cal (l) : 92.3568 MeV + cal (l) : 144.813 MeV 0 0 0 0 0 0 - 0 0 0 0 2.035 0 - 0 0 0.4466 0.7223 85.88 0 - 0 0 0 0 0 3.276 - cal (r) : 186.674 MeV - 1.413 0.4585 0 0 0 0 - 75.47 91.8 0.9041 0 0 0 - 13.03 2.36 0 0 0 0 - 0.8839 0.3551 0 0 0 0 -Event 19509 + 0 0 0 0.314 0 0 + 0 0 0 134.3 6.371 0 + 0 0 0.5915 2.412 0.5032 0.3372 + cal (r) : 223.885 MeV + 0 0 0 0 120.6 32.97 + 0 0 0.476 0.4588 50.34 13.4 + 0 0 0 3.986 0.4925 1.165 + 0 0 0 0 0 0 +Event 26204 --- Track Points - monitor : pi- [1,bp] 726.9 MeV : -2.704 0.09686 -0.125 cm [0.002582, -0.002955, 1] - target : pi- [1,bp] 726.4 MeV : 0.8586 4.926 0.02074 cm [-0.6374, -0.7705, -0.001842] - : eta [6,op] 277.9 MeV : -3.582 -0.4215 0.0125 cm [-0.9057, -0.4009, 0.1376] - : neutron [7,np] 494.9 MeV : -3.582 -0.4215 0.0125 cm [-0.4284, -0.9002, -0.0788] - : pi0 [10,opdp] 239.4 MeV : -3.582 -0.4215 0.0125 cm [-0.9026, -0.1699, -0.3956] - : pi0 [8,opdp] 59.37 MeV : -3.582 -0.4215 0.0125 cm [0.5158, 0.2378, 0.823] + monitor : pi- [1,bp] 730.8 MeV : 1.817 0.7512 -0.125 cm [-0.007649, -0.008062, 0.9999] + target : pi- [1,bp] 730.2 MeV : 4.237 2.654 0.5037 cm [-0.6496, -0.7602, -0.009019] + : eta [3,op] 402.9 MeV : 3.052 1.266 0.4872 cm [-0.6031, -0.7688, -0.2127] + : neutron [4,np] 346 MeV : 3.052 1.266 0.4872 cm [-0.667, -0.7093, 0.2283] + : pi0 [7,opdp] 62.58 MeV : 3.052 1.266 0.4872 cm [0.1699, -0.6306, 0.7573] + : pi0 [5,opdp] 116.7 MeV : 3.052 1.266 0.4872 cm [0.1132, -0.8181, -0.5638] vc (l) : tp is not valid vc (r) : tp is not valid cal (l) : tp is not valid cal (r) : tp is not valid --- - angle between the eta decay products : 146.257 deg + angle between the eta decay products : 83.7929 deg --- Triggered angular ranges: - 6 [ 0.0000, -0.2000) + 2 [ 0.8000, 0.6000) --- Production model data: - Incident particle (LAB) : pi- 2.7282 -0.7501 724.6440 MeV -- 737.9680 MeV - (SCM) : pi- 1.6936 -0.4656 449.8237 MeV -- 470.9822 MeV - Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV - (SCM) : proton -1.6936 0.4656 -449.8237 MeV -- 1.0405 GeV - Output particle (LAB) : eta -121.2183 38.2441 247.1355 MeV -- 614.3169 MeV - (SCM) : eta -122.2259 38.5211 -20.4993 MeV -- 563.0240 MeV - Nucleus output particle (LAB) : neutron 123.9465 -38.9942 477.5085 MeV -- 1.0619 GeV - (SCM) : neutron 122.2259 -38.5211 20.4993 MeV -- 948.4863 MeV + Incident particle (LAB) : pi- -6.0998 -6.7212 729.7174 MeV -- 743.0005 MeV + (SCM) : pi- -3.7787 -4.1636 452.0397 MeV -- 473.1293 MeV + Nucleus particle (LAB) : proton 0.0000 -0.0000 0.0000 eV -- 938.2720 MeV + (SCM) : proton 3.7787 4.1636 -452.0397 MeV -- 1.0415 GeV + Output particle (LAB) : eta 12.9395 -85.6911 393.4329 MeV -- 680.0387 MeV + (SCM) : eta 15.3158 -83.0728 109.1587 MeV -- 564.9815 MeV + Nucleus output particle (LAB) : neutron -19.0394 78.9700 336.2845 MeV -- 1.0012 GeV + (SCM) : neutron -15.3158 83.0728 -109.1587 MeV -- 949.6496 MeV --- Reconstructed data: -- entry points: - left: 9.27984 1.97493 -15 cm - right: 10.1765 -3.12963 -15 cm + left: -8.19809 1.51214 -15 cm + right: 8.85927 -0.260244 -15 cm target: 0 0 0 fm - -- the angle: 129.203 deg - -- mass of the output particle: 168.987 MeV - -- mass of the nucleus output particle: 1.32959 GeV + -- the angle: 113.819 deg + -- mass of the output particle: 117.488 MeV + -- mass of the nucleus output particle: 1.38958 GeV -- production model data: Incident particle (LAB) : pi- 0.0000 0.0000 730.0000 MeV -- 743.2226 MeV (SCM) : pi- 0.0000 0.0000 452.1737 MeV -- 473.2239 MeV Nucleus particle (LAB) : proton 0.0000 0.0000 0.0000 eV -- 938.2720 MeV (SCM) : proton 0.0000 0.0000 -452.1737 MeV -- 1.0415 GeV - Output particle (LAB) : eta -69.6043 -5.9315 102.2860 MeV -- 209.5209 MeV - (SCM) : eta -69.6043 -5.9315 12.5717 MeV -- 183.2883 MeV - Nucleus output particle (LAB) : neutron 69.6043 5.9315 627.7140 MeV -- 1.4720 GeV - (SCM) : neutron 69.6043 5.9315 -12.5717 MeV -- 1.3315 GeV + Output particle (LAB) : eta 37.2397 2.1620 80.0176 MeV -- 146.9613 MeV + (SCM) : eta 37.2397 2.1620 18.0011 MeV -- 124.5747 MeV + Nucleus output particle (LAB) : neutron -37.2397 -2.1620 649.9824 MeV -- 1.5345 GeV + (SCM) : neutron -37.2397 -2.1620 -18.0011 MeV -- 1.3902 GeV -- triggered angular ranges: - 5 [ 0.2000, 0.0000) + 3 [ 0.6000, 0.4000) --- Energy Deposit - monitor : 372.982 keV - vc (l) : 0 eV + monitor : 455.082 keV + vc (l) : 216.514 keV vc (r) : 0 eV - cal (l) : 57.5784 MeV - 0 0 0 0 0 0 - 0.1946 54.77 0 0 0 0 - 0 2.611 0 0 0 0 - 0 0 0 0 0 0 - cal (r) : 151.943 MeV + cal (l) : 95.4613 MeV + 0 0 0 0.2474 2.146 0 + 0 0 0 0.1509 75.96 0.4078 + 0 0 0 4.465 11.94 0 + 0 0 0 0 0.1495 0 + cal (r) : 51.5 MeV + 0 0 0.4997 0 0 0 + 0.2097 8.856 0 0 0 0 + 0 41.93 0 0 0 0 0 0 0 0 0 0 - 2.021 5.34 0 0 0 0 - 34.98 104.7 0 0 0 0 - 1.399 2.318 0 0.7369 0.4763 0 Run terminated. Run Summary - Number of events processed : 19510, effectively: 10 - User=14.320000s Real=14.449986s Sys=0.000000s + Number of events processed : 26205, effectively: 10 + User=15.830000s Real=15.948655s Sys=0.010000s --- Setup acceptances (range | real (trg / mon) | rec (trg / mon / all)): - 1 [ 1.0000, 0.8000) | 0.00000000 ( 0 / 528 ) | 0.00000000 ( 0 / 528 / 648 ) - 2 [ 0.8000, 0.6000) | 0.00000000 ( 0 / 580 ) | 0.00000000 ( 0 / 580 / 710 ) - 3 [ 0.6000, 0.4000) | 0.00000000 ( 0 / 563 ) | 0.00177620 ( 1 / 563 / 687 ) - 4 [ 0.4000, 0.2000) | 0.00000000 ( 0 / 517 ) | 0.00386847 ( 2 / 517 / 651 ) - 5 [ 0.2000, 0.0000) | 0.00000000 ( 0 / 567 ) | 0.00352734 ( 2 / 567 / 707 ) - 6 [ 0.0000, -0.2000) | 0.00362976 ( 2 / 551 ) | 0.00000000 ( 0 / 551 / 677 ) - 7 [-0.2000, -0.4000) | 0.00169779 ( 1 / 589 ) | 0.00000000 ( 0 / 589 / 721 ) - 8 [-0.4000, -0.6000) | 0.00000000 ( 0 / 503 ) | 0.00000000 ( 0 / 503 / 629 ) - 9 [-0.6000, -0.8000) | 0.00349650 ( 2 / 572 ) | 0.00000000 ( 0 / 572 / 691 ) - 10 [-0.8000, -1.0000) | 0.00184502 ( 1 / 542 ) | 0.00184502 ( 1 / 542 / 663 ) + 1 [ 1.0000, 0.8000) | 0.00000000 ( 0 / 744 ) | 0.00000000 ( 0 / 744 / 923 ) + 2 [ 0.8000, 0.6000) | 0.00136986 ( 1 / 730 ) | 0.00000000 ( 0 / 730 / 913 ) + 3 [ 0.6000, 0.4000) | 0.00131752 ( 1 / 759 ) | 0.00131752 ( 1 / 759 / 919 ) + 4 [ 0.4000, 0.2000) | 0.00132802 ( 1 / 753 ) | 0.00132802 ( 1 / 753 / 898 ) + 5 [ 0.2000, 0.0000) | 0.00000000 ( 0 / 762 ) | 0.00131234 ( 1 / 762 / 950 ) + 6 [ 0.0000, -0.2000) | 0.00134048 ( 1 / 746 ) | 0.00000000 ( 0 / 746 / 908 ) + 7 [-0.2000, -0.4000) | 0.00000000 ( 0 / 725 ) | 0.00137931 ( 1 / 725 / 881 ) + 8 [-0.4000, -0.6000) | 0.00000000 ( 0 / 687 ) | 0.00000000 ( 0 / 687 / 866 ) + 9 [-0.6000, -0.8000) | 0.00000000 ( 0 / 778 ) | 0.00000000 ( 0 / 778 / 951 ) + 10 [-0.8000, -1.0000) | 0.00000000 ( 0 / 738 ) | 0.00000000 ( 0 / 738 / 916 ) --- - False hits (edt | rec): 4 | 4 + False hits (edt | rec): 6 | 6 ================== Deleting memory pools =================== Number of memory pools allocated: 17; of which, static: 3 -Dynamic pools deleted: 14 / Total memory freed: 1.1 MB +Dynamic pools deleted: 14 / Total memory freed: 1 MB ============================================================ diff --git a/examples/advanced/HGCal_testbeam/testbeam_electron.out b/examples/advanced/HGCal_testbeam/testbeam_electron.out index 5d43aea6424..9bdd2b94a42 100644 --- a/examples/advanced/HGCal_testbeam/testbeam_electron.out +++ b/examples/advanced/HGCal_testbeam/testbeam_electron.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -1746,7 +1746,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -1778,7 +1778,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -1810,7 +1810,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1823,7 +1823,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -1869,7 +1868,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1901,7 +1900,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1933,7 +1932,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1965,7 +1964,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1997,7 +1996,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -2029,7 +2028,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -2061,7 +2060,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -2446,12 +2445,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/advanced/ICRP110_HumanPhantoms/CMakeLists.txt b/examples/advanced/ICRP110_HumanPhantoms/CMakeLists.txt index cce2582e269..7beac172f65 100644 --- a/examples/advanced/ICRP110_HumanPhantoms/CMakeLists.txt +++ b/examples/advanced/ICRP110_HumanPhantoms/CMakeLists.txt @@ -34,11 +34,14 @@ file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) # Add the executable, and link it to the Geant4 libraries # add_executable(ICRP110phantoms ICRP110phantoms.cc ${sources} ${headers}) +add_executable(ICRP110standalone ICRP110standalone.cc ${sources} ${headers}) target_link_libraries(ICRP110phantoms ${Geant4_LIBRARIES} ) +target_link_libraries(ICRP110standalone ${Geant4_LIBRARIES} ) # Depend on data for runtime add_dependencies(ICRP110phantoms ICRPdata) +add_dependencies(ICRP110standalone ICRPdata) #---------------------------------------------------------------------------- # Copy all scripts to the build directory, i.e. the directory in which we @@ -46,7 +49,7 @@ add_dependencies(ICRP110phantoms ICRPdata) # relies on these scripts being in the current working directory. # set(ICRPphantoms_SCRIPTS - female.in female_head.in female_trunk.in male.in male_head.in male_trunk.in vis.mac primary.mac ColourMap.dat openGLVis.mac g4views/g4_00.g4view g4views/g4_01.g4view + female.in female_head.in female_trunk.in male.in male_head.in male_trunk.in vis.mac primary.mac ColourMap.dat openGLVis.mac g4views/g4_00.g4view g4views/g4_01.g4view standalone.mac # ICRPdata/Data.dat # "ICRPdata/ICRP110_g4dat/AF/*.g4dat" # "ICRPdata/ICRP110_g4dat/AM/*.g4dat" @@ -82,9 +85,11 @@ ExternalProject_Add(ICRPdata # (this avoids the need of typing the program name after make) # add_custom_target(ICRPphantoms DEPENDS phantom) +add_custom_target(ICRPstandalone DEPENDS phantom) #---------------------------------------------------------------------------- # Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX # install(TARGETS ICRP110phantoms DESTINATION bin) +install(TARGETS ICRP110standalone DESTINATION bin) diff --git a/examples/advanced/ICRP110_HumanPhantoms/History b/examples/advanced/ICRP110_HumanPhantoms/History index 1656c709357..1d54578179f 100644 --- a/examples/advanced/ICRP110_HumanPhantoms/History +++ b/examples/advanced/ICRP110_HumanPhantoms/History @@ -4,6 +4,20 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-03-21 John Allison (ICRP110Phantoms-V11-01-01) +- standalone.mac: Disable auto refresh *before* creating scene. + - For auto-refresh viewers, without this change the viewer attempts + to draw the detector with the default view parameters, and in + the case of this phantom, it overwhelms the graphics system. + - This phantom should be displayed with special mesh rendering. + +## 2023-01-10 John Allison (ICRP110Phantoms-V11-01-00) +- Introduce ICRP110standalone. + - "make" builds two executables - ICRP110phantoms and ICRP110standalone. + - ICRP110standalone allows you to visualise the phantom without the + overhead of the run manager and initialising all the physics tables. + Of course, you cannot run or visualise trajectories. + ## 2022-06-02 Susanna Guatelli (ICRP110Phantoms-V11-00-01) - Error reading the first voxels (in x=0, y=0) corrected - Migration to features of C++11/14/17 diff --git a/examples/advanced/ICRP110_HumanPhantoms/ICRP110Phantoms.out b/examples/advanced/ICRP110_HumanPhantoms/ICRP110Phantoms.out index 76fa52de7da..68c010675ed 100644 --- a/examples/advanced/ICRP110_HumanPhantoms/ICRP110Phantoms.out +++ b/examples/advanced/ICRP110_HumanPhantoms/ICRP110Phantoms.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -300,7 +302,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -340,7 +342,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -372,7 +374,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -458,7 +460,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -490,7 +492,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -522,7 +524,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -554,7 +556,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -586,7 +588,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV NeutronHP: /Capture file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Capture/CrossSection/6_nat_Carbon @@ -604,6 +606,7 @@ NeutronHP: /Elastic file for Z = 6, A = 12 is not found and NeutronHP will use / ProduceFissionFragments ? 0 UseWendtFissionModel ? 0 UseNRESP71Model ? 0 + UseDBRC ? 0 ======================================================= @@@ G4ParticleHPInelastic instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic @@ -637,7 +640,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -669,7 +672,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV ====================================================================== @@ -1078,12 +1081,21 @@ Threshold for very long decay time at rest 3.171e+10 y ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1146,7 +1158,7 @@ Reading AM_organs.dat Reading OrganMasses.dat NOrganIDs: 142 Writing output to ICRP110.out -Total energy deposited over all Organs within the Phantom is 1.47643e-09 J -Total absorbed dose over all phantom organs is 3.47423e-09 Gy +Total energy deposited over all Organs within the Phantom is 1.4709e-09 J +Total absorbed dose over all phantom organs is 3.00768e-09 Gy Graphics systems deleted. Visualization Manager deleting... diff --git a/examples/advanced/ICRP110_HumanPhantoms/ICRP110standalone.cc b/examples/advanced/ICRP110_HumanPhantoms/ICRP110standalone.cc new file mode 100644 index 00000000000..1c05960b6df --- /dev/null +++ b/examples/advanced/ICRP110_HumanPhantoms/ICRP110standalone.cc @@ -0,0 +1,65 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file visualization/standalone/standalone.cc +/// \brief Main program of the visualization/standalone example +// +// +// +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include "globals.hh" +#include "G4VisExecutive.hh" +#include "G4VisExtent.hh" +#include "G4UImanager.hh" +#include "G4UIExecutive.hh" +#include "G4SystemOfUnits.hh" + +#include "ICRP110StandaloneVisAction.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +int main(int argc,char** argv) { + + G4UIExecutive* ui = new G4UIExecutive(argc, argv); + + G4VisManager* visManager = new G4VisExecutive; + visManager->RegisterRunDurationUserVisAction + ("ICRP110_HumanPhantoms standalone example", + new ICRP110StandaloneVisAction, + G4VisExtent(-1*m,1*m,-1*m,1*m,-1*m,1*m)); + visManager->Initialize (); + + G4UImanager::GetUIpointer()->ApplyCommand ("/control/execute standalone.mac"); + ui->SessionStart(); + + delete ui; + delete visManager; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + diff --git a/examples/advanced/ICRP110_HumanPhantoms/OrganDoses.out b/examples/advanced/ICRP110_HumanPhantoms/OrganDoses.out index 5d8071d004b..386c2576e44 100644 --- a/examples/advanced/ICRP110_HumanPhantoms/OrganDoses.out +++ b/examples/advanced/ICRP110_HumanPhantoms/OrganDoses.out @@ -2,37 +2,31 @@ -------------------------------- OrganID Edep (J) Dose (Gy) -------------------------------- - 4 | 2.83284e-12 9.97129e-11 - 9 | 3.24562e-13 3.81838e-10 - 26 | 3.64795e-10 6.48122e-10 - 27 | 2.54909e-10 5.65134e-10 - 40 | 2.88523e-15 3.90424e-14 - 47 | 5.95845e-12 5.7894e-11 - 48 | 2.25479e-12 3.06566e-11 - 61 | 5.45841e-10 3.76442e-10 - 69 | 3.38154e-20 4.61329e-18 - 102 | 1.872e-20 3.13043e-18 - 106 | 8.40322e-11 6.90027e-11 - 116 | 1.40393e-10 1.33897e-10 - 120 | 1.98869e-11 4.68036e-10 - 121 | 2.25296e-11 5.30234e-10 - 122 | 3.23132e-11 1.10912e-10 - 141 | 3.57028e-13 2.31386e-12 + 4 | 1.02241e-12 3.59875e-11 + 26 | 3.57659e-10 6.35443e-10 + 27 | 2.69866e-10 5.98293e-10 + 39 | 5.73388e-13 7.53269e-12 + 40 | 7.39457e-13 1.00062e-11 + 47 | 5.37409e-15 5.22162e-14 + 61 | 5.27772e-10 3.63981e-10 + 106 | 6.89286e-11 5.66005e-11 + 116 | 1.62874e-10 1.55339e-10 + 120 | 1.77526e-11 4.17807e-10 + 121 | 2.52684e-11 5.9469e-10 + 122 | 3.84415e-11 1.31947e-10 + 141 | 3.10958e-20 2.01528e-19 ---------------------------------------------------------------------------- -------------------------------ORGAN INFO----------------------------------- -----------------(of organs where edep/dose was recorded)------------------- ---------------------------------------------------------------------------- ID Organ Name Material ID Density (g/cm^3) 4 Posterior nasal passage down to larynx (ET2) 45 1.030 -9 Blood vessels, head 28 1.060 26 Cranium, cortical 2 1.920 27 Cranium, spongiosa 8 1.157 +39 Mandible, cortical 2 1.920 40 Mandible, spongiosa 13 1.228 47 Cervical spine, cortical 2 1.920 -48 Cervical spine, spongiosa 17 1.050 61 Brain 32 1.050 -69 Eye bulb, right 34 1.050 -102 Lymphatic nodes, head 47 1.030 106 Muscle, head 29 1.050 116 Residual tissue, head 49 0.950 120 Salivary glands, left 45 1.030 @@ -40,8 +34,8 @@ ID Organ Name Material ID Density (g/cm^3) 122 Skin, head 27 1.090 141 Phantom Top/Bottom Skin Layer -Total Edep over all organs = 1.47643e-09 J -Total dose absorbed over all organs = 3.47423e-09 Gy +Total Edep over all organs = 1.4709e-09 J +Total dose absorbed over all organs = 3.00768e-09 Gy ---------------------------------------------------------------------------- ----------------ORGAN ENERGY DEPOSITIONS AND ABSORBED DOSE------------------ @@ -50,16 +44,16 @@ Total dose absorbed over all organs = 3.47423e-09 Gy ---------------------------------------------------------------------------- OrganID Edep (J) Dose (Gy) ------------------------------- -0 | 1.57913e-11 0 +0 | 1.18105e-11 0 1 | 0 0 2 | 0 0 3 | 0 0 -4 | 2.83284e-12 9.97129e-11 +4 | 1.02241e-12 3.59875e-11 5 | 0 0 6 | 0 0 7 | 0 0 8 | 0 0 -9 | 3.24562e-13 3.81838e-10 +9 | 0 0 10 | 0 0 11 | 0 0 12 | 0 0 @@ -76,8 +70,8 @@ OrganID Edep (J) Dose (Gy) 23 | 0 0 24 | 0 0 25 | 0 0 -26 | 3.64795e-10 6.48122e-10 -27 | 2.54909e-10 5.65134e-10 +26 | 3.57659e-10 6.35443e-10 +27 | 2.69866e-10 5.98293e-10 28 | 0 0 29 | 0 0 30 | 0 0 @@ -89,16 +83,16 @@ OrganID Edep (J) Dose (Gy) 36 | 0 0 37 | 0 0 38 | 0 0 -39 | 0 0 -40 | 2.88523e-15 3.90424e-14 +39 | 5.73388e-13 7.53269e-12 +40 | 7.39457e-13 1.00062e-11 41 | 0 0 42 | 0 0 43 | 0 0 44 | 0 0 45 | 0 0 46 | 0 0 -47 | 5.95845e-12 5.7894e-11 -48 | 2.25479e-12 3.06566e-11 +47 | 5.37409e-15 5.22162e-14 +48 | 0 0 49 | 0 0 50 | 0 0 51 | 0 0 @@ -111,7 +105,7 @@ OrganID Edep (J) Dose (Gy) 58 | 0 0 59 | 0 0 60 | 0 0 -61 | 5.45841e-10 3.76442e-10 +61 | 5.27772e-10 3.63981e-10 62 | 0 0 63 | 0 0 64 | 0 0 @@ -119,7 +113,7 @@ OrganID Edep (J) Dose (Gy) 66 | 0 0 67 | 0 0 68 | 0 0 -69 | 3.38154e-20 4.61329e-18 +69 | 0 0 70 | 0 0 71 | 0 0 72 | 0 0 @@ -152,11 +146,11 @@ OrganID Edep (J) Dose (Gy) 99 | 0 0 100 | 0 0 101 | 0 0 -102 | 1.872e-20 3.13043e-18 +102 | 0 0 103 | 0 0 104 | 0 0 105 | 0 0 -106 | 8.40322e-11 6.90027e-11 +106 | 6.89286e-11 5.66005e-11 107 | 0 0 108 | 0 0 109 | 0 0 @@ -166,13 +160,13 @@ OrganID Edep (J) Dose (Gy) 113 | 0 0 114 | 0 0 115 | 0 0 -116 | 1.40393e-10 1.33897e-10 +116 | 1.62874e-10 1.55339e-10 117 | 0 0 118 | 0 0 119 | 0 0 -120 | 1.98869e-11 4.68036e-10 -121 | 2.25296e-11 5.30234e-10 -122 | 3.23132e-11 1.10912e-10 +120 | 1.77526e-11 4.17807e-10 +121 | 2.52684e-11 5.9469e-10 +122 | 3.84415e-11 1.31947e-10 123 | 0 0 124 | 0 0 125 | 0 0 @@ -190,7 +184,7 @@ OrganID Edep (J) Dose (Gy) 137 | 0 0 138 | 0 0 139 | 0 0 -140 | 2.72307e-14 1.36153e-10 -141 | 3.57028e-13 2.31386e-12 -Total energy depositied over all organs = 1.47643e-09 J -Total absorbed dose over all organs = 3.47423e-09 Gy +140 | 3.21175e-14 1.60588e-10 +141 | 3.10958e-20 2.01528e-19 +Total energy depositied over all organs = 1.4709e-09 J +Total absorbed dose over all organs = 3.00768e-09 Gy diff --git a/examples/advanced/ICRP110_HumanPhantoms/README b/examples/advanced/ICRP110_HumanPhantoms/README index 34794927710..472c78c718c 100644 --- a/examples/advanced/ICRP110_HumanPhantoms/README +++ b/examples/advanced/ICRP110_HumanPhantoms/README @@ -155,17 +155,23 @@ The AF human phantom is voxelised in x,y,z with 299 x 137 x 348 voxels with dime - Compile and link to generate the executable (in your CMAKE build directory): % make + This should make two executables - ICRP110phantoms and ICRP110standalone. - Execute the application in 'interactive' mode with visualization: % ./ICRP110phantoms +- Execute the "standalone" application in 'interactive' mode with visualization: + % ./ICRP110standalone + This allows you to visualise the phantom without the overhead of the run manager and initialising all the physics tables. + Of course, you cannot run or visualise trajectories. + - Execute the application in 'batch' mode from macro files: % ./ICRP110phantoms female_head.in ----------------------------- AVAILABLE MACRO FILES ----------------------------- -For the users convinience, macro files have been created which are designed to construct partial head +For the users convenience, macro files have been created which are designed to construct partial head and trunk phantoms for both the male and female models. These macro files can be called upon in batch mode when executing the application as specified above. If the user wishes to construct a completed/full male or female phantom, the macros male.in and female.in can be called upon, respectively. @@ -178,7 +184,7 @@ male or female phantom, the macros male.in and female.in can be called upon, res 'ICRPdata/FemaleData.dat' if the user wishes to create their own custom partial phantom section. - openGLVis.mac : macro for visualisation with openGL. - vis.mac (default) : Executed by default when the simulation is run in 'interactive' mode. - - primary.mac : Contains the definition of the primary radiation field. + - primary.mac : Contains the definition of the primary radiation field. At the very top of the various '.in' macro files (pre-initialization), there are a series of commands which define the sex and section of the phantom to create. These commands are listed below: diff --git a/examples/advanced/ICRP110_HumanPhantoms/include/ICRP110StandaloneVisAction.hh b/examples/advanced/ICRP110_HumanPhantoms/include/ICRP110StandaloneVisAction.hh new file mode 100644 index 00000000000..1823ca69ee2 --- /dev/null +++ b/examples/advanced/ICRP110_HumanPhantoms/include/ICRP110StandaloneVisAction.hh @@ -0,0 +1,47 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file visualization/standalone/include/ICRP110StandaloneVisAction.hh +/// \brief Definition of the ICRP110StandaloneVisAction class +// +// + +#ifndef ICRP110STANDALONEVISACTION_HH +#define ICRP110STANDALONEVISACTION_HH + +#include "G4VUserVisAction.hh" + +class ICRP110PhantomConstruction; + +class ICRP110StandaloneVisAction: public G4VUserVisAction { +public: + ICRP110StandaloneVisAction(); +private: + void Draw() override; + ICRP110PhantomConstruction* fICRP110PhantomConstruction = nullptr; +}; + +#endif + diff --git a/examples/advanced/ICRP110_HumanPhantoms/src/ICRP110StandaloneVisAction.cc b/examples/advanced/ICRP110_HumanPhantoms/src/ICRP110StandaloneVisAction.cc new file mode 100644 index 00000000000..87caae17c13 --- /dev/null +++ b/examples/advanced/ICRP110_HumanPhantoms/src/ICRP110StandaloneVisAction.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. * +// ******************************************************************** +// +/// \file visualization/standalone/src/StandaloneVisAction.cc +/// \brief Implementation of the StandaloneVisAction class +// +// + +#include "ICRP110StandaloneVisAction.hh" + +#include "ICRP110PhantomConstruction.hh" +#include "ICRP110PhantomMessenger.hh" +#include "G4VVisManager.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +ICRP110StandaloneVisAction::ICRP110StandaloneVisAction() +{ + fICRP110PhantomConstruction = new ICRP110PhantomConstruction; + new ICRP110PhantomMessenger(fICRP110PhantomConstruction); + // Don't instantiate the detector here - give time for /phantom/ commands. +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ICRP110StandaloneVisAction::Draw() { + // Instantiate the detector "just in time" *after* possible /phantom/ commands. + // Instantiatie as "static" so that it is instantiated only once. + static auto theWorld = fICRP110PhantomConstruction->Construct(); + G4VVisManager* pVisManager = G4VVisManager::GetConcreteInstance(); + if (pVisManager) { + pVisManager->DrawGeometry(theWorld); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/ICRP110_HumanPhantoms/standalone.mac b/examples/advanced/ICRP110_HumanPhantoms/standalone.mac new file mode 100644 index 00000000000..28cde285d04 --- /dev/null +++ b/examples/advanced/ICRP110_HumanPhantoms/standalone.mac @@ -0,0 +1,34 @@ +/control/verbose 2 +/phantom/setPhantomSection full + +/vis/open OGL + +# Disable auto refresh and quieten vis messages whilst scene and +# trajectories are established: +/vis/viewer/set/autoRefresh false +/vis/verbose errors + +# The above creates a scene handler and a viewer but needs a scene. +# (Normally this would be /vis/drawVolume but we need to specialise.) +/vis/scene/create +/vis/scene/add/userAction +/vis/scene/add/axes +/vis/scene/add/scale +/vis/sceneHandler/attach + +# View parameters +/vis/viewer/set/specialMeshRendering +/vis/viewer/set/hiddenMarker true +/vis/viewer/set/rotationStyle freeRotation +/vis/viewer/set/viewpointVector -0.47 -0.88 0.069 +/vis/viewer/set/upVector 0.83 -0.42 0.37 +/vis/viewer/zoomTo 3.4 + +# Re-establish auto refreshing and verbosity: +/vis/viewer/set/autoRefresh true +/vis/verbose warnings +# Try "/vis/viewer/interpolate g4views 1000 0", which runs a cutaway +# plane through the phantom. +# (See examples/extended/visualization/movies for how to create view +# files for interpolation.) + diff --git a/examples/advanced/ICRP110_HumanPhantoms/vis.mac b/examples/advanced/ICRP110_HumanPhantoms/vis.mac index 155d7d5e812..89a0fc922b2 100644 --- a/examples/advanced/ICRP110_HumanPhantoms/vis.mac +++ b/examples/advanced/ICRP110_HumanPhantoms/vis.mac @@ -99,7 +99,8 @@ # # For file-based drivers, use this to create an empty detector view: #/vis/viewer/flush -#Define the primary particles +# +# Define the primary particles /control/execute primary.mac # # Try "/vis/viewer/interpolate g4views 1000 0", which runs a cutaway diff --git a/examples/advanced/ICRP145_HumanPhantoms/CMakeLists.txt b/examples/advanced/ICRP145_HumanPhantoms/CMakeLists.txt index e78e93feeb7..032550e7de2 100644 --- a/examples/advanced/ICRP145_HumanPhantoms/CMakeLists.txt +++ b/examples/advanced/ICRP145_HumanPhantoms/CMakeLists.txt @@ -34,10 +34,14 @@ file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) # Add the executable, and link it to the Geant4 libraries # add_executable(ICRP145phantoms ICRP145phantoms.cc ${sources} ${headers}) +add_executable(ICRP145standalone ICRP145standalone.cc ${sources} ${headers}) + target_link_libraries(ICRP145phantoms ${Geant4_LIBRARIES}) +target_link_libraries(ICRP145standalone ${Geant4_LIBRARIES} ) # Depend on data for runtime add_dependencies(ICRP145phantoms ICRP145data) +add_dependencies(ICRP145standalone ICRP145data) #---------------------------------------------------------------------------- # Copy all scripts to the build directory. This is so that we can run the @@ -49,6 +53,7 @@ set(EXTERNAL_SCRIPTS init_vis.mac source.mac vis.mac + standalone.mac ) foreach(_script ${EXTERNAL_SCRIPTS}) @@ -73,3 +78,4 @@ ExternalProject_Add(ICRP145data # Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX # install(TARGETS ICRP145phantoms DESTINATION bin) +install(TARGETS ICRP145standalone DESTINATION bin) diff --git a/examples/advanced/ICRP145_HumanPhantoms/History b/examples/advanced/ICRP145_HumanPhantoms/History index 957a797e56c..ac2438be61e 100644 --- a/examples/advanced/ICRP145_HumanPhantoms/History +++ b/examples/advanced/ICRP145_HumanPhantoms/History @@ -5,6 +5,22 @@ which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-04-08 Susanna Guatelli (ICRP145Phantoms-V11-01-02) +- Code revision in the TETRun class + +## 2023-03-21 John Allison (ICRP145Phantoms-V11-01-01) +- standalone.mac: Disable auto refresh *before* creating scene. + - For auto-refresh viewers, without this change the viewer attempts + to draw the detector with the default view parameters, and in + the case of this phantom, it overwhelms the graphics system. + - This phantom should be displayed with special mesh rendering. + +## 2023-03-19 John Allison (ICRP145Phantoms-V11-01-00) +- Introduce ICRP145standalone. + - "make" builds two executables - ICRP145phantoms and ICRP145standalone. + - ICRP145standalone allows you to visualise the phantom without the + overhead of the run manager and physics tables and geometry + initialisation. Of course, you cannot run or visualise trajectories. ## 2022-10-04 Gabriele Cosmo (ICRP145Phantoms-V11-00-03) - Fixed compilation warnings on Intel-icx compiler for set but unused variable diff --git a/examples/advanced/ICRP145_HumanPhantoms/ICRP145Phantoms.out b/examples/advanced/ICRP145_HumanPhantoms/ICRP145Phantoms.out index ec1a4694157..103c2c802b2 100644 --- a/examples/advanced/ICRP145_HumanPhantoms/ICRP145Phantoms.out +++ b/examples/advanced/ICRP145_HumanPhantoms/ICRP145Phantoms.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -249,7 +249,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -436,7 +438,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100.000000 MeV to 100.000000 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin=100.000000 MeV Emax=100.000000 TeV @@ -476,7 +478,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100.000000 MeV to 100.000000 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin=100.000000 MeV Emax=100.000000 TeV @@ -508,7 +510,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100.000000 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin=0.000000 eV Emax=100.000000 TeV @@ -594,7 +596,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100.000000 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin=0.000000 eV Emax=100.000000 TeV @@ -626,7 +628,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100.000000 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin=0.000000 eV Emax=100.000000 TeV @@ -658,7 +660,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin=0.000000 eV Emax=100.000000 TeV @@ -690,7 +692,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100.000000 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin=0.000000 eV Emax=100.000000 TeV @@ -722,7 +724,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin=0.000000 eV Emax=100.000000 TeV NeutronHP: /Capture file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Capture/CrossSection/6_nat_Carbon @@ -740,6 +742,7 @@ NeutronHP: /Elastic file for Z = 6, A = 12 is not found and NeutronHP will use / ProduceFissionFragments ? 0 UseWendtFissionModel ? 0 UseNRESP71Model ? 0 + UseDBRC ? 0 ======================================================= @@@ G4ParticleHPInelastic instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic @@ -773,7 +776,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100.000000 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin=0.000000 eV Emax=100.000000 TeV @@ -805,7 +808,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin=0.000000 eV Emax=100.000000 TeV ====================================================================== @@ -1214,12 +1217,21 @@ Threshold for very long decay time at rest 31709791983.76459 y ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100.00000 keV Pre-compound excitation high energy 30.00000 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/advanced/ICRP145_HumanPhantoms/ICRP145standalone.cc b/examples/advanced/ICRP145_HumanPhantoms/ICRP145standalone.cc new file mode 100644 index 00000000000..6ffad3cbbb6 --- /dev/null +++ b/examples/advanced/ICRP145_HumanPhantoms/ICRP145standalone.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. * +// ******************************************************************** +// +/// \file visualization/standalone/standalone.cc +/// \brief Main program of the visualization/standalone example +// +// +// +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include "globals.hh" +#include "G4VisExecutive.hh" +#include "G4VisExtent.hh" +#include "G4UImanager.hh" +#include "G4UIExecutive.hh" +#include "G4SystemOfUnits.hh" + +#include "ICRP145StandaloneVisAction.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +int main(int argc,char** argv) { + + G4UIExecutive* ui = new G4UIExecutive(argc, argv); + + // sex: male/female: false/true + G4bool female = false; + + G4VisManager* visManager = new G4VisExecutive; + visManager->RegisterRunDurationUserVisAction + ("ICRP145_HumanPhantoms standalone example", + new ICRP145StandaloneVisAction(female,ui), + G4VisExtent(-1*m,1*m,-1*m,1*m,-1*m,1*m)); + visManager->Initialize (); + + G4UImanager::GetUIpointer()->ApplyCommand ("/control/execute standalone.mac"); + ui->SessionStart(); + + delete ui; + delete visManager; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + diff --git a/examples/advanced/ICRP145_HumanPhantoms/README b/examples/advanced/ICRP145_HumanPhantoms/README index 329666e1c5f..6617b6d11c2 100644 --- a/examples/advanced/ICRP145_HumanPhantoms/README +++ b/examples/advanced/ICRP145_HumanPhantoms/README @@ -40,6 +40,7 @@ e-mail inquiries to: haeginh@hanyang.ac.kr, susanna@uow.edu.au, MRCP.ICRP@gmail. % cd example_build % cmake .. % make + This should make two executables - ICRP145phantoms and ICRP145standalone. 2) How to run @@ -78,14 +79,25 @@ e-mail inquiries to: haeginh@hanyang.ac.kr, susanna@uow.edu.au, MRCP.ICRP@gmail. *** source organ can be defined by using -i option. *** source particle and the particle energy can be specified in source.mac file by using macro commands for G4ParticlGun (/gun/) - c) Notes + + c) To see the phantom alone: + + % ./ICRP145standalone + + This allows you to visualise the phantom without the overhead of + the run manager and physics tables and geometry initialisation. + Of course, you cannot run or visualise trajectories. + + d) Notes - Regarding the interactive mode with visualisation: * you can run the codes in interactive mode with visualisation by omitting -m option. - * the memory required for the visualisation is ~35 GB when the code is - run on a single thread. (it is less than 10 GB in batch mode) + * with "special mesh rendering" (see vis.mac) the memory required + for the visualisation about 1.5 GB (without, it's ~35 GB!). + * original data takes about 3 GB, physics tables and geometry + voxelisation consume about 5 GB, so a typical app is about 10 GB. * in interactive mode, user should start a run by using /run/beamOn command. (Idle> /run/beamOn [number of events]) diff --git a/examples/advanced/ICRP145_HumanPhantoms/include/ICRP145StandaloneVisAction.hh b/examples/advanced/ICRP145_HumanPhantoms/include/ICRP145StandaloneVisAction.hh new file mode 100644 index 00000000000..2b4dfb0f8f4 --- /dev/null +++ b/examples/advanced/ICRP145_HumanPhantoms/include/ICRP145StandaloneVisAction.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. * +// ******************************************************************** +// +/// \file visualization/standalone/include/ICRP145StandaloneVisAction.hh +/// \brief Definition of the ICRP145StandaloneVisAction class +// +// + +#ifndef ICRP145STANDALONEVISACTION_HH +#define ICRP145STANDALONEVISACTION_HH + +#include "G4VUserVisAction.hh" + +#include "globals.hh" + +class G4UIExecutive; +class TETDetectorConstruction; + +class ICRP145StandaloneVisAction: public G4VUserVisAction { +public: + // sex: male/female: false/true + ICRP145StandaloneVisAction(G4bool sex, G4UIExecutive* ui); +private: + void Draw() override; + TETDetectorConstruction* fTETDetectorConstruction = nullptr; +}; + +#endif + diff --git a/examples/advanced/ICRP145_HumanPhantoms/include/TETRun.hh b/examples/advanced/ICRP145_HumanPhantoms/include/TETRun.hh index 380a8135f8e..96ac68e4c59 100644 --- a/examples/advanced/ICRP145_HumanPhantoms/include/TETRun.hh +++ b/examples/advanced/ICRP145_HumanPhantoms/include/TETRun.hh @@ -64,5 +64,6 @@ public: private: EDEPMAP fEdepMap; + G4int fCollID; }; #endif diff --git a/examples/advanced/ICRP145_HumanPhantoms/src/ICRP145StandaloneVisAction.cc b/examples/advanced/ICRP145_HumanPhantoms/src/ICRP145StandaloneVisAction.cc new file mode 100644 index 00000000000..bf208845881 --- /dev/null +++ b/examples/advanced/ICRP145_HumanPhantoms/src/ICRP145StandaloneVisAction.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. * +// ******************************************************************** +// +/// \file visualization/standalone/src/StandaloneVisAction.cc +/// \brief Implementation of the StandaloneVisAction class +// +// + +#include "ICRP145StandaloneVisAction.hh" + +#include "TETDetectorConstruction.hh" +#include "TETModelImport.hh" +#include "G4VVisManager.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +ICRP145StandaloneVisAction::ICRP145StandaloneVisAction(G4bool sex, G4UIExecutive* ui) +{ + auto pTETModelImport = new TETModelImport(sex, ui); + fTETDetectorConstruction = new TETDetectorConstruction(pTETModelImport); + // Don't instantiate the detector here - give time for /phantom/ commands. +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ICRP145StandaloneVisAction::Draw() { + // Instantiate the detector "just in time" *after* possible /phantom/ commands. + // Instantiatie as "static" so that it is instantiated only once. + static auto theWorld = fTETDetectorConstruction->Construct(); + G4VVisManager* pVisManager = G4VVisManager::GetConcreteInstance(); + if (pVisManager) { + pVisManager->DrawGeometry(theWorld); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/ICRP145_HumanPhantoms/src/TETRun.cc b/examples/advanced/ICRP145_HumanPhantoms/src/TETRun.cc index 6866b94dd9b..9f993ed5436 100644 --- a/examples/advanced/ICRP145_HumanPhantoms/src/TETRun.cc +++ b/examples/advanced/ICRP145_HumanPhantoms/src/TETRun.cc @@ -33,7 +33,7 @@ #include "TETRun.hh" TETRun::TETRun() -:G4Run() +:G4Run(), fCollID(-1) {} TETRun::~TETRun() @@ -43,19 +43,17 @@ TETRun::~TETRun() void TETRun::RecordEvent(const G4Event* event) { - auto fCollID - = G4SDManager::GetSDMpointer()->GetCollectionID("PhantomSD/eDep"); + if(fCollID<0) + fCollID = G4SDManager::GetSDMpointer()->GetCollectionID("PhantomSD/eDep"); -// Hits collections -// -G4HCofThisEvent* HCE = event->GetHCofThisEvent(); -if(!HCE) return; - -//G4THitsMap* evtMap = -// static_cast*>(HCE->GetHC(fCollID)); -auto* evtMap = static_cast*>(HCE->GetHC(fCollID)); -// sum up the energy deposition and the square of it -for (auto itr : *evtMap->GetMap()) { + // Hits collections + // + G4HCofThisEvent* HCE = event->GetHCofThisEvent(); + if(!HCE) return; + + auto* evtMap = static_cast*>(HCE->GetHC(fCollID)); + // sum up the energy deposition and the square of it + for (auto itr : *evtMap->GetMap()) { fEdepMap[itr.first].first += *itr.second; //sum fEdepMap[itr.first].second += (*itr.second) * (*itr.second); //sum square } @@ -71,7 +69,7 @@ void TETRun::Merge(const G4Run* run) fEdepMap[itr.first].second += itr.second.second; } -G4Run::Merge(run); + G4Run::Merge(run); } diff --git a/examples/advanced/ICRP145_HumanPhantoms/standalone.mac b/examples/advanced/ICRP145_HumanPhantoms/standalone.mac new file mode 100644 index 00000000000..53aaa0bf789 --- /dev/null +++ b/examples/advanced/ICRP145_HumanPhantoms/standalone.mac @@ -0,0 +1,52 @@ +/control/verbose 2 + +/vis/open OGL + +# Disable auto refresh and quieten vis messages whilst scene and +# trajectories are established: +/vis/viewer/set/autoRefresh false +/vis/verbose errors + +# The above creates a scene handler and a viewer but needs a scene. +# (Normally this would be /vis/drawVolume but we need to specialise.) +/vis/scene/create +/vis/scene/add/userAction +/vis/sceneHandler/attach + +# Decorations +# Axes, scale, etc. +/vis/scene/add/scale # Simple scale line +/vis/scene/add/axes 50 0 -60 20 cm # Simple axes: x=red, y=green, z=blue. +/vis/scene/add/eventID # Drawn at end of event +/vis/scene/add/date # Date stamp +# +# Frame +/vis/set/colour red +/vis/set/lineWidth 2 +/vis/scene/add/frame # Simple frame around the view +#/vis/set/colour # Revert to default colour (white) +/vis/set/lineWidth # Revert to default line width (1.) + +# To get nice view +# Make the "World" box invisible +/vis/geometry/set/visibility worldLogical 0 false +/vis/geometry/set/visibility phantomLogical 0 false + +# View parameters +/vis/viewer/set/specialMeshRendering +/vis/viewer/set/specialMeshRenderingOption surfaces +/vis/viewer/set/style surface +/vis/viewer/set/hiddenMarker true +/vis/viewer/set/background 1 1 1 1 +# +# Specify view angle: +/vis/viewer/set/upVector 0 0 1 +/vis/viewer/set/lightsVector -1 0 0 +/vis/viewer/zoomTo 2 +#/vis/viewer/set/viewpointVector -0.5 -1 0.3 +/vis/viewer/set/viewpointVector 0 -1 0 +/vis/viewer/set/targetPoint 0 0 0 mm +# +# Re-establish auto refreshing and verbosity: +/vis/viewer/set/autoRefresh true +/vis/verbose warnings diff --git a/examples/advanced/STCyclotron/STCyclotron.out b/examples/advanced/STCyclotron/STCyclotron.out index c8f60db94d1..085329d422c 100644 --- a/examples/advanced/STCyclotron/STCyclotron.out +++ b/examples/advanced/STCyclotron/STCyclotron.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -539,10 +539,22 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics ... create file : SolidTargetCyclotron.root - done ... open analysis file : SolidTargetCyclotron.root - done ... open analysis file : SolidTargetCyclotron.root - done + +-------- WWWW ------- G4Exception-START -------- WWWW ------- +*** G4Exception : had012 + issued by : G4HadronicProcess:CheckResult() +Warning: Bad energy non-conservation detected, will re-sample the interaction + Process / Model: protonInelastic / ParticleHPInelastic + Primary: proton (2212), E= 949.004, target nucleus (78, 195) + E(initial - final) = -360327 MeV. + +*** This is just a warning message. *** +-------- WWWW -------- G4Exception-END --------- WWWW ------- + Run terminated. Run Summary Number of events processed : 10 - User=21.280000s Real=21.426749s Sys=0.000000s + User=20.430000s Real=20.615740s Sys=0.000000s ... write file : SolidTargetCyclotron.root - done ... close file : SolidTargetCyclotron.root - done G4 kernel has come to Quit state. @@ -558,24 +570,24 @@ G4SDManager deleted. EventManager deleted. Units table cleared. TransportationManager deleted. -Total navigation history collections cleaned: 11 +Total navigation history collections cleaned: 10 G4RNGHelper object is deleted. ================== Deleting memory pools =================== -Pool ID '20G4NavigationLevelRep', size : 0.0154 MB +Pool ID '20G4NavigationLevelRep', size : 0.0135 MB Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB -Pool ID '17G4DynamicParticle', size : 0.396 MB +Pool ID '17G4DynamicParticle', size : 0.484 MB Pool ID '16G4SmartVoxelNode', size : 0.00192 MB Pool ID '17G4SmartVoxelProxy', size : 0.000961 MB Pool ID '7G4Event', size : 0.000961 MB Pool ID '15G4PrimaryVertex', size : 0.000961 MB Pool ID '17G4PrimaryParticle', size : 0.258 MB -Pool ID '7G4Track', size : 0.792 MB +Pool ID '7G4Track', size : 0.968 MB Pool ID '18G4TouchableHistory', size : 0.000961 MB Pool ID '15G4CountedObjectIvE', size : 0.000961 MB Pool ID '17G4ReactionProduct', size : 0.00192 MB Pool ID '10G4Fragment', size : 0.000961 MB Number of memory pools allocated: 13 of which, static: 0 -Dynamic pools deleted: 13 / Total memory freed: 1.5 MB +Dynamic pools deleted: 13 / Total memory freed: 1.7 MB ============================================================ G4Allocator objects are deleted. UImanager deleted. diff --git a/examples/advanced/air_shower/air_shower.out b/examples/advanced/air_shower/air_shower.out index 3afbf57e20d..9523a1efaa7 100644 --- a/examples/advanced/air_shower/air_shower.out +++ b/examples/advanced/air_shower/air_shower.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -106,7 +106,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -311,7 +313,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -343,7 +345,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -375,7 +377,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -388,7 +390,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -434,7 +435,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -466,7 +467,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -498,7 +499,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -530,7 +531,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -562,7 +563,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -594,7 +595,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -626,7 +627,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -698,8 +699,8 @@ See commands in /vis/modeling/trajectories/ for other options. ooo Run 0 starts (global). --------- Ranlux engine status --------- - Initial seed = 1686681308 - float_seed_table[] = 0.24429 0.19203 0.930385 0.579489 0.677383 0.853754 0.255059 0.124678 0.0119871 0.792396 0.137899 0.0594917 0.697128 0.895791 0.221125 0.205631 0.122251 0.805305 0.524881 0.656697 0.105557 0.780275 0.101231 0.763505 + Initial seed = 1687915079 + float_seed_table[] = 0.813233 0.868755 0.525554 0.630249 0.949336 0.741437 0.0196044 0.551251 0.788266 0.679422 0.587881 0.560283 0.230776 0.328666 0.33805 0.853895 0.901859 0.0414808 0.955325 0.413566 0.61962 0.565286 0.371511 0.667219 i_lag = 23, j_lag = 9 carry = 0, count24 = 0 luxury = 3 nskip = 199 @@ -710,7 +711,7 @@ mu- Mono Plane Run terminated. Run Summary Number of events processed : 100 - User=2.430000s Real=2.438739s Sys=0.000000s + User=2.000000s Real=2.013808s Sys=0.010000s ### Run 0 (global) ended. Graphics systems deleted. Visualization Manager deleting... @@ -743,7 +744,7 @@ Pool ID '16G4HitsCollection', size : 0.000961 MB Pool ID '7G4Track', size : 0.05 MB Pool ID '18G4TouchableHistory', size : 0.000961 MB Pool ID '15G4CountedObjectIvE', size : 0.000961 MB -Pool ID '15UltraOpticalHit', size : 0.00385 MB +Pool ID '15UltraOpticalHit', size : 0.00481 MB Number of memory pools allocated: 14 of which, static: 0 Dynamic pools deleted: 14 / Total memory freed: 0.1 MB ============================================================ diff --git a/examples/advanced/amsEcal/run1.out b/examples/advanced/amsEcal/run1.out index 893262ff052..ac83bc34d96 100644 --- a/examples/advanced/amsEcal/run1.out +++ b/examples/advanced/amsEcal/run1.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -187,7 +187,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 10000 - User=6.530000s Real=6.580281s Sys=0.000000s + User=5.930000s Real=5.952257s Sys=0.000000s ------------------------------------------------------------- ---> The calorimeter is 9 Modules @@ -210,107 +210,107 @@ Run Summary total Energy (rms/mean) visible Energy (rms/mean) - layer 1: 1.5564 MeV +- 2.687 MeV (1.7e+02 %) 163.84 keV +- 930.6 keV (5.7e+02 %) - layer 2: 1.5443 MeV +- 2.8 MeV (1.8e+02 %) 152.71 keV +- 755.6 keV (4.9e+02 %) - layer 3: 1.5492 MeV +- 2.225 MeV (1.4e+02 %) 167.34 keV +- 838.8 keV (5e+02 %) - layer 4: 1.5271 MeV +- 2.22 MeV (1.5e+02 %) 157.91 keV +- 915.3 keV (5.8e+02 %) - layer 5: 1.5234 MeV +- 2.301 MeV (1.5e+02 %) 156.6 keV +- 495.6 keV (3.2e+02 %) - layer 6: 1.545 MeV +- 2.417 MeV (1.6e+02 %) 162.72 keV +- 823.1 keV (5.1e+02 %) - layer 7: 1.5432 MeV +- 2.461 MeV (1.6e+02 %) 177.09 keV +- 1.213 MeV (6.9e+02 %) - layer 8: 1.5418 MeV +- 2.494 MeV (1.6e+02 %) 148.02 keV +- 297.7 keV (2e+02 %) - layer 9: 1.511 MeV +- 2.303 MeV (1.5e+02 %) 161.26 keV +- 873.6 keV (5.4e+02 %) - layer 10: 1.5273 MeV +- 2.369 MeV (1.6e+02 %) 147.78 keV +- 350.7 keV (2.4e+02 %) - layer 11: 1.5422 MeV +- 2.68 MeV (1.7e+02 %) 169.53 keV +- 1.314 MeV (7.7e+02 %) - layer 12: 1.4978 MeV +- 2.098 MeV (1.4e+02 %) 151.89 keV +- 375.4 keV (2.5e+02 %) - layer 13: 1.5257 MeV +- 2.119 MeV (1.4e+02 %) 154.54 keV +- 423.2 keV (2.7e+02 %) - layer 14: 1.5421 MeV +- 2.546 MeV (1.7e+02 %) 162.65 keV +- 836.2 keV (5.1e+02 %) - layer 15: 1.5218 MeV +- 2.251 MeV (1.5e+02 %) 157.32 keV +- 637 keV (4e+02 %) - layer 16: 1.5749 MeV +- 2.783 MeV (1.8e+02 %) 173.21 keV +- 872.6 keV (5e+02 %) - layer 17: 1.5075 MeV +- 1.961 MeV (1.3e+02 %) 149.84 keV +- 390.3 keV (2.6e+02 %) - layer 18: 1.5331 MeV +- 2.316 MeV (1.5e+02 %) 155.99 keV +- 739 keV (4.7e+02 %) - layer 19: 1.5089 MeV +- 2.008 MeV (1.3e+02 %) 153.51 keV +- 396.3 keV (2.6e+02 %) - layer 20: 1.5616 MeV +- 3.018 MeV (1.9e+02 %) 171.76 keV +- 1.076 MeV (6.3e+02 %) - layer 21: 1.5773 MeV +- 2.614 MeV (1.7e+02 %) 165.16 keV +- 686.3 keV (4.2e+02 %) - layer 22: 1.5263 MeV +- 2.17 MeV (1.4e+02 %) 167.71 keV +- 1.023 MeV (6.1e+02 %) - layer 23: 1.5215 MeV +- 2.074 MeV (1.4e+02 %) 150.17 keV +- 473.5 keV (3.2e+02 %) - layer 24: 1.5383 MeV +- 2.354 MeV (1.5e+02 %) 154.41 keV +- 573.1 keV (3.7e+02 %) - layer 25: 1.5615 MeV +- 2.501 MeV (1.6e+02 %) 166.75 keV +- 646.6 keV (3.9e+02 %) - layer 26: 1.509 MeV +- 2.102 MeV (1.4e+02 %) 155.12 keV +- 660.7 keV (4.3e+02 %) - layer 27: 1.5357 MeV +- 2.234 MeV (1.5e+02 %) 165.36 keV +- 892.8 keV (5.4e+02 %) - layer 28: 1.5344 MeV +- 2.329 MeV (1.5e+02 %) 152.07 keV +- 542.1 keV (3.6e+02 %) - layer 29: 1.5279 MeV +- 2.407 MeV (1.6e+02 %) 153.89 keV +- 569.3 keV (3.7e+02 %) - layer 30: 1.5291 MeV +- 2.588 MeV (1.7e+02 %) 154.49 keV +- 663.9 keV (4.3e+02 %) - layer 31: 1.5185 MeV +- 1.911 MeV (1.3e+02 %) 158.18 keV +- 613.4 keV (3.9e+02 %) - layer 32: 1.5022 MeV +- 2.039 MeV (1.4e+02 %) 162.11 keV +- 690.5 keV (4.3e+02 %) - layer 33: 1.5823 MeV +- 2.58 MeV (1.6e+02 %) 159.91 keV +- 784.2 keV (4.9e+02 %) - layer 34: 1.4905 MeV +- 1.792 MeV (1.2e+02 %) 156.86 keV +- 613.6 keV (3.9e+02 %) - layer 35: 1.5419 MeV +- 2.407 MeV (1.6e+02 %) 155.66 keV +- 806.6 keV (5.2e+02 %) - layer 36: 1.5441 MeV +- 2.557 MeV (1.7e+02 %) 154.06 keV +- 590.2 keV (3.8e+02 %) - layer 37: 1.5469 MeV +- 2.208 MeV (1.4e+02 %) 151.97 keV +- 357.2 keV (2.4e+02 %) - layer 38: 1.5355 MeV +- 2.427 MeV (1.6e+02 %) 161.09 keV +- 770.4 keV (4.8e+02 %) - layer 39: 1.5334 MeV +- 2.172 MeV (1.4e+02 %) 155.14 keV +- 674 keV (4.3e+02 %) - layer 40: 1.5473 MeV +- 2.632 MeV (1.7e+02 %) 147.67 keV +- 340.2 keV (2.3e+02 %) - layer 41: 1.5009 MeV +- 2.02 MeV (1.3e+02 %) 157.6 keV +- 443.3 keV (2.8e+02 %) - layer 42: 1.5722 MeV +- 2.568 MeV (1.6e+02 %) 154.51 keV +- 592.4 keV (3.8e+02 %) - layer 43: 1.543 MeV +- 2.625 MeV (1.7e+02 %) 156.24 keV +- 544.3 keV (3.5e+02 %) - layer 44: 1.5021 MeV +- 2.005 MeV (1.3e+02 %) 162.06 keV +- 656.1 keV (4e+02 %) - layer 45: 1.5386 MeV +- 2.344 MeV (1.5e+02 %) 159.85 keV +- 687 keV (4.3e+02 %) - layer 46: 1.5002 MeV +- 1.917 MeV (1.3e+02 %) 153.97 keV +- 436.7 keV (2.8e+02 %) - layer 47: 1.5385 MeV +- 2.359 MeV (1.5e+02 %) 155.47 keV +- 701.9 keV (4.5e+02 %) - layer 48: 1.5417 MeV +- 2.495 MeV (1.6e+02 %) 156.37 keV +- 716.3 keV (4.6e+02 %) - layer 49: 1.561 MeV +- 2.553 MeV (1.6e+02 %) 170.44 keV +- 1.172 MeV (6.9e+02 %) - layer 50: 1.5134 MeV +- 2.148 MeV (1.4e+02 %) 159.65 keV +- 572.4 keV (3.6e+02 %) - layer 51: 1.5349 MeV +- 2.29 MeV (1.5e+02 %) 160.48 keV +- 739 keV (4.6e+02 %) - layer 52: 1.5131 MeV +- 2.053 MeV (1.4e+02 %) 168.28 keV +- 852.8 keV (5.1e+02 %) - layer 53: 1.5452 MeV +- 2.306 MeV (1.5e+02 %) 158.53 keV +- 699 keV (4.4e+02 %) - layer 54: 1.538 MeV +- 2.229 MeV (1.4e+02 %) 159.63 keV +- 872.6 keV (5.5e+02 %) - layer 55: 1.5369 MeV +- 2.331 MeV (1.5e+02 %) 166.32 keV +- 774.8 keV (4.7e+02 %) - layer 56: 1.5216 MeV +- 2.13 MeV (1.4e+02 %) 156.03 keV +- 613.4 keV (3.9e+02 %) - layer 57: 1.5137 MeV +- 2.071 MeV (1.4e+02 %) 153.85 keV +- 508.1 keV (3.3e+02 %) - layer 58: 1.4985 MeV +- 1.845 MeV (1.2e+02 %) 157.54 keV +- 468.8 keV (3e+02 %) - layer 59: 1.5389 MeV +- 2.42 MeV (1.6e+02 %) 156.89 keV +- 651.1 keV (4.1e+02 %) - layer 60: 1.4922 MeV +- 1.502 MeV (1e+02 %) 152.86 keV +- 417.8 keV (2.7e+02 %) - layer 61: 1.5428 MeV +- 2.652 MeV (1.7e+02 %) 182.94 keV +- 1.355 MeV (7.4e+02 %) - layer 62: 1.4924 MeV +- 1.548 MeV (1e+02 %) 154.1 keV +- 746.2 keV (4.8e+02 %) - layer 63: 1.519 MeV +- 2.166 MeV (1.4e+02 %) 164.21 keV +- 743.8 keV (4.5e+02 %) - layer 64: 1.5099 MeV +- 2.123 MeV (1.4e+02 %) 156.3 keV +- 588.3 keV (3.8e+02 %) - layer 65: 1.5154 MeV +- 2.029 MeV (1.3e+02 %) 147.12 keV +- 353 keV (2.4e+02 %) - layer 66: 1.4972 MeV +- 1.901 MeV (1.3e+02 %) 150.69 keV +- 430.6 keV (2.9e+02 %) - layer 67: 1.4917 MeV +- 1.704 MeV (1.1e+02 %) 154.84 keV +- 523.5 keV (3.4e+02 %) - layer 68: 1.4987 MeV +- 2.094 MeV (1.4e+02 %) 157.36 keV +- 556.4 keV (3.5e+02 %) - layer 69: 1.5532 MeV +- 2.44 MeV (1.6e+02 %) 161.36 keV +- 696.9 keV (4.3e+02 %) - layer 70: 1.4953 MeV +- 2.043 MeV (1.4e+02 %) 153.45 keV +- 611.9 keV (4e+02 %) - layer 71: 1.5088 MeV +- 2.101 MeV (1.4e+02 %) 155.44 keV +- 544.2 keV (3.5e+02 %) - layer 72: 1.5165 MeV +- 1.937 MeV (1.3e+02 %) 156.97 keV +- 641.3 keV (4.1e+02 %) - layer 73: 1.5281 MeV +- 2.218 MeV (1.5e+02 %) 149.81 keV +- 369.6 keV (2.5e+02 %) - layer 74: 1.5062 MeV +- 1.906 MeV (1.3e+02 %) 155.97 keV +- 685.6 keV (4.4e+02 %) - layer 75: 1.4923 MeV +- 2.044 MeV (1.4e+02 %) 150.88 keV +- 316.1 keV (2.1e+02 %) - layer 76: 1.5399 MeV +- 2.348 MeV (1.5e+02 %) 148.1 keV +- 384.6 keV (2.6e+02 %) - layer 77: 1.5244 MeV +- 2.32 MeV (1.5e+02 %) 152.48 keV +- 440.6 keV (2.9e+02 %) - layer 78: 1.5058 MeV +- 2.086 MeV (1.4e+02 %) 152.7 keV +- 424.5 keV (2.8e+02 %) - layer 79: 1.531 MeV +- 2.237 MeV (1.5e+02 %) 164.93 keV +- 1.004 MeV (6.1e+02 %) - layer 80: 1.5383 MeV +- 2.311 MeV (1.5e+02 %) 156.9 keV +- 700.3 keV (4.5e+02 %) - layer 81: 1.5499 MeV +- 2.58 MeV (1.7e+02 %) 166.2 keV +- 858.6 keV (5.2e+02 %) - layer 82: 1.5327 MeV +- 2.137 MeV (1.4e+02 %) 161.77 keV +- 870.5 keV (5.4e+02 %) - layer 83: 1.5235 MeV +- 2.038 MeV (1.3e+02 %) 152.2 keV +- 509.5 keV (3.3e+02 %) - layer 84: 1.4889 MeV +- 1.979 MeV (1.3e+02 %) 148.2 keV +- 455.6 keV (3.1e+02 %) - layer 85: 1.5257 MeV +- 2.292 MeV (1.5e+02 %) 157.55 keV +- 787.1 keV (5e+02 %) - layer 86: 1.5151 MeV +- 2.276 MeV (1.5e+02 %) 172.36 keV +- 1.04 MeV (6e+02 %) - layer 87: 1.5074 MeV +- 1.965 MeV (1.3e+02 %) 162.06 keV +- 707.1 keV (4.4e+02 %) - layer 88: 1.5178 MeV +- 1.913 MeV (1.3e+02 %) 151.38 keV +- 373.2 keV (2.5e+02 %) - layer 89: 1.5282 MeV +- 2.468 MeV (1.6e+02 %) 157.97 keV +- 659.8 keV (4.2e+02 %) - layer 90: 1.5307 MeV +- 2.362 MeV (1.5e+02 %) 161.53 keV +- 839.4 keV (5.2e+02 %) - - total calor : 149.93 MeV +- 22.15 MeV ( 15 %) 14.238 MeV +- 6.682 MeV ( 47 %) + layer 1: 1.5909 MeV +- 2.656 MeV (1.7e+02 %) 176.1 keV +- 1.128 MeV (6.4e+02 %) + layer 2: 1.5646 MeV +- 2.609 MeV (1.7e+02 %) 167.36 keV +- 788.6 keV (4.7e+02 %) + layer 3: 1.5176 MeV +- 2.029 MeV (1.3e+02 %) 174.78 keV +- 1.196 MeV (6.8e+02 %) + layer 4: 1.5127 MeV +- 2.063 MeV (1.4e+02 %) 173.22 keV +- 820.6 keV (4.7e+02 %) + layer 5: 1.5389 MeV +- 2.57 MeV (1.7e+02 %) 171.14 keV +- 903.5 keV (5.3e+02 %) + layer 6: 1.5521 MeV +- 2.746 MeV (1.8e+02 %) 170.26 keV +- 1.105 MeV (6.5e+02 %) + layer 7: 1.5055 MeV +- 2.023 MeV (1.3e+02 %) 177.05 keV +- 1.261 MeV (7.1e+02 %) + layer 8: 1.5098 MeV +- 2.372 MeV (1.6e+02 %) 156.45 keV +- 435.1 keV (2.8e+02 %) + layer 9: 1.5554 MeV +- 2.47 MeV (1.6e+02 %) 153.44 keV +- 611.2 keV (4e+02 %) + layer 10: 1.4966 MeV +- 2.051 MeV (1.4e+02 %) 151.04 keV +- 324.5 keV (2.1e+02 %) + layer 11: 1.5293 MeV +- 2.481 MeV (1.6e+02 %) 162.76 keV +- 809.1 keV (5e+02 %) + layer 12: 1.5518 MeV +- 2.481 MeV (1.6e+02 %) 150.9 keV +- 366.9 keV (2.4e+02 %) + layer 13: 1.5108 MeV +- 1.998 MeV (1.3e+02 %) 147.5 keV +- 335 keV (2.3e+02 %) + layer 14: 1.5573 MeV +- 2.665 MeV (1.7e+02 %) 165.67 keV +- 1.067 MeV (6.4e+02 %) + layer 15: 1.5478 MeV +- 2.612 MeV (1.7e+02 %) 156.37 keV +- 463.5 keV (3e+02 %) + layer 16: 1.5019 MeV +- 1.916 MeV (1.3e+02 %) 165.04 keV +- 1.057 MeV (6.4e+02 %) + layer 17: 1.4947 MeV +- 2.165 MeV (1.4e+02 %) 166.16 keV +- 991.1 keV (6e+02 %) + layer 18: 1.5238 MeV +- 1.956 MeV (1.3e+02 %) 165.19 keV +- 660.6 keV (4e+02 %) + layer 19: 1.5238 MeV +- 2.303 MeV (1.5e+02 %) 160.56 keV +- 858.8 keV (5.3e+02 %) + layer 20: 1.5623 MeV +- 2.44 MeV (1.6e+02 %) 155.17 keV +- 615.4 keV (4e+02 %) + layer 21: 1.5085 MeV +- 2.136 MeV (1.4e+02 %) 161.27 keV +- 806.5 keV (5e+02 %) + layer 22: 1.5755 MeV +- 3.019 MeV (1.9e+02 %) 163.21 keV +- 908.1 keV (5.6e+02 %) + layer 23: 1.5314 MeV +- 2.482 MeV (1.6e+02 %) 161.8 keV +- 850.8 keV (5.3e+02 %) + layer 24: 1.5619 MeV +- 2.659 MeV (1.7e+02 %) 166.95 keV +- 980.3 keV (5.9e+02 %) + layer 25: 1.5477 MeV +- 2.437 MeV (1.6e+02 %) 153.78 keV +- 399.4 keV (2.6e+02 %) + layer 26: 1.5152 MeV +- 1.939 MeV (1.3e+02 %) 163.47 keV +- 764.1 keV (4.7e+02 %) + layer 27: 1.519 MeV +- 2.235 MeV (1.5e+02 %) 155.25 keV +- 648.3 keV (4.2e+02 %) + layer 28: 1.5035 MeV +- 1.883 MeV (1.3e+02 %) 153.41 keV +- 711.6 keV (4.6e+02 %) + layer 29: 1.5254 MeV +- 2.339 MeV (1.5e+02 %) 157.19 keV +- 462.5 keV (2.9e+02 %) + layer 30: 1.5403 MeV +- 2.536 MeV (1.6e+02 %) 168.58 keV +- 1.041 MeV (6.2e+02 %) + layer 31: 1.5631 MeV +- 2.603 MeV (1.7e+02 %) 157.27 keV +- 510.4 keV (3.2e+02 %) + layer 32: 1.5193 MeV +- 2.302 MeV (1.5e+02 %) 160.17 keV +- 542.9 keV (3.4e+02 %) + layer 33: 1.5525 MeV +- 2.564 MeV (1.7e+02 %) 156.91 keV +- 795.2 keV (5.1e+02 %) + layer 34: 1.5031 MeV +- 1.848 MeV (1.2e+02 %) 156.29 keV +- 562.9 keV (3.6e+02 %) + layer 35: 1.5107 MeV +- 1.911 MeV (1.3e+02 %) 150.06 keV +- 443.7 keV (3e+02 %) + layer 36: 1.5369 MeV +- 2.297 MeV (1.5e+02 %) 169.74 keV +- 1.171 MeV (6.9e+02 %) + layer 37: 1.5271 MeV +- 2.287 MeV (1.5e+02 %) 148.86 keV +- 430.3 keV (2.9e+02 %) + layer 38: 1.5112 MeV +- 2.082 MeV (1.4e+02 %) 154.88 keV +- 455.5 keV (2.9e+02 %) + layer 39: 1.5265 MeV +- 2.063 MeV (1.4e+02 %) 149.43 keV +- 473 keV (3.2e+02 %) + layer 40: 1.4947 MeV +- 1.835 MeV (1.2e+02 %) 156.1 keV +- 475.8 keV (3e+02 %) + layer 41: 1.5366 MeV +- 2.447 MeV (1.6e+02 %) 154.02 keV +- 557.8 keV (3.6e+02 %) + layer 42: 1.5292 MeV +- 2.362 MeV (1.5e+02 %) 167.42 keV +- 1.206 MeV (7.2e+02 %) + layer 43: 1.5378 MeV +- 2.365 MeV (1.5e+02 %) 157.55 keV +- 726.4 keV (4.6e+02 %) + layer 44: 1.5618 MeV +- 2.524 MeV (1.6e+02 %) 159.78 keV +- 468.4 keV (2.9e+02 %) + layer 45: 1.5186 MeV +- 1.994 MeV (1.3e+02 %) 153.95 keV +- 480.5 keV (3.1e+02 %) + layer 46: 1.5297 MeV +- 2.2 MeV (1.4e+02 %) 167.08 keV +- 1.038 MeV (6.2e+02 %) + layer 47: 1.5651 MeV +- 2.479 MeV (1.6e+02 %) 164.36 keV +- 902.2 keV (5.5e+02 %) + layer 48: 1.5647 MeV +- 2.578 MeV (1.6e+02 %) 156.71 keV +- 812.1 keV (5.2e+02 %) + layer 49: 1.5125 MeV +- 2.149 MeV (1.4e+02 %) 153.18 keV +- 471 keV (3.1e+02 %) + layer 50: 1.5248 MeV +- 2.337 MeV (1.5e+02 %) 164.4 keV +- 921 keV (5.6e+02 %) + layer 51: 1.5294 MeV +- 2.455 MeV (1.6e+02 %) 155.96 keV +- 871.4 keV (5.6e+02 %) + layer 52: 1.554 MeV +- 2.581 MeV (1.7e+02 %) 175.23 keV +- 1.179 MeV (6.7e+02 %) + layer 53: 1.5471 MeV +- 2.396 MeV (1.5e+02 %) 145.65 keV +- 390 keV (2.7e+02 %) + layer 54: 1.5309 MeV +- 2.245 MeV (1.5e+02 %) 169.77 keV +- 1.125 MeV (6.6e+02 %) + layer 55: 1.513 MeV +- 2.207 MeV (1.5e+02 %) 153.39 keV +- 515.6 keV (3.4e+02 %) + layer 56: 1.5024 MeV +- 2.061 MeV (1.4e+02 %) 151.58 keV +- 358.3 keV (2.4e+02 %) + layer 57: 1.4889 MeV +- 1.827 MeV (1.2e+02 %) 150.51 keV +- 369.4 keV (2.5e+02 %) + layer 58: 1.5307 MeV +- 2.137 MeV (1.4e+02 %) 163.01 keV +- 556.1 keV (3.4e+02 %) + layer 59: 1.5119 MeV +- 1.844 MeV (1.2e+02 %) 154.55 keV +- 527.6 keV (3.4e+02 %) + layer 60: 1.5087 MeV +- 1.995 MeV (1.3e+02 %) 148.87 keV +- 362.6 keV (2.4e+02 %) + layer 61: 1.5339 MeV +- 2.292 MeV (1.5e+02 %) 155.7 keV +- 473.2 keV (3e+02 %) + layer 62: 1.5279 MeV +- 2.163 MeV (1.4e+02 %) 157.55 keV +- 522.5 keV (3.3e+02 %) + layer 63: 1.5441 MeV +- 2.33 MeV (1.5e+02 %) 155.87 keV +- 590.7 keV (3.8e+02 %) + layer 64: 1.5068 MeV +- 2.143 MeV (1.4e+02 %) 162.66 keV +- 766.8 keV (4.7e+02 %) + layer 65: 1.5261 MeV +- 2.138 MeV (1.4e+02 %) 165.78 keV +- 802.1 keV (4.8e+02 %) + layer 66: 1.4897 MeV +- 1.91 MeV (1.3e+02 %) 149.49 keV +- 491.9 keV (3.3e+02 %) + layer 67: 1.528 MeV +- 2.169 MeV (1.4e+02 %) 156.3 keV +- 460.9 keV (2.9e+02 %) + layer 68: 1.4954 MeV +- 1.944 MeV (1.3e+02 %) 155.74 keV +- 629.6 keV (4e+02 %) + layer 69: 1.5124 MeV +- 2.08 MeV (1.4e+02 %) 150.82 keV +- 537.6 keV (3.6e+02 %) + layer 70: 1.5192 MeV +- 2.235 MeV (1.5e+02 %) 155.17 keV +- 665.7 keV (4.3e+02 %) + layer 71: 1.5377 MeV +- 2.093 MeV (1.4e+02 %) 159.17 keV +- 828.7 keV (5.2e+02 %) + layer 72: 1.5137 MeV +- 2.072 MeV (1.4e+02 %) 154.74 keV +- 836.8 keV (5.4e+02 %) + layer 73: 1.5149 MeV +- 2.189 MeV (1.4e+02 %) 164.22 keV +- 890.1 keV (5.4e+02 %) + layer 74: 1.5431 MeV +- 2.198 MeV (1.4e+02 %) 169.28 keV +- 814.2 keV (4.8e+02 %) + layer 75: 1.5174 MeV +- 2.251 MeV (1.5e+02 %) 157.68 keV +- 525.8 keV (3.3e+02 %) + layer 76: 1.5371 MeV +- 2.381 MeV (1.5e+02 %) 161.66 keV +- 864.3 keV (5.3e+02 %) + layer 77: 1.5103 MeV +- 2.205 MeV (1.5e+02 %) 164.53 keV +- 912.2 keV (5.5e+02 %) + layer 78: 1.5301 MeV +- 2.307 MeV (1.5e+02 %) 154.44 keV +- 724.5 keV (4.7e+02 %) + layer 79: 1.5195 MeV +- 2.238 MeV (1.5e+02 %) 160.57 keV +- 708.9 keV (4.4e+02 %) + layer 80: 1.5318 MeV +- 2.363 MeV (1.5e+02 %) 156.93 keV +- 745.5 keV (4.8e+02 %) + layer 81: 1.5612 MeV +- 2.626 MeV (1.7e+02 %) 153.42 keV +- 504.2 keV (3.3e+02 %) + layer 82: 1.5079 MeV +- 1.888 MeV (1.3e+02 %) 166.81 keV +- 858.7 keV (5.1e+02 %) + layer 83: 1.5132 MeV +- 2.142 MeV (1.4e+02 %) 158.66 keV +- 883.3 keV (5.6e+02 %) + layer 84: 1.5269 MeV +- 2.358 MeV (1.5e+02 %) 162.22 keV +- 931.2 keV (5.7e+02 %) + layer 85: 1.5175 MeV +- 2.344 MeV (1.5e+02 %) 170.48 keV +- 1.022 MeV (6e+02 %) + layer 86: 1.5219 MeV +- 2.059 MeV (1.4e+02 %) 148.79 keV +- 248.4 keV (1.7e+02 %) + layer 87: 1.4942 MeV +- 1.902 MeV (1.3e+02 %) 154.76 keV +- 549.8 keV (3.6e+02 %) + layer 88: 1.5121 MeV +- 2.088 MeV (1.4e+02 %) 169.53 keV +- 979 keV (5.8e+02 %) + layer 89: 1.4943 MeV +- 1.835 MeV (1.2e+02 %) 147.05 keV +- 334.5 keV (2.3e+02 %) + layer 90: 1.5042 MeV +- 2.051 MeV (1.4e+02 %) 160.77 keV +- 689.5 keV (4.3e+02 %) + + total calor : 149.81 MeV +- 21.99 MeV ( 15 %) 14.359 MeV +- 7.173 MeV ( 50 %) ------------------------------------------------------------ - Leakage : 850.07 MeV +- 22.15 MeV - Eleak/Ebeam = 85 % ( forward = 85 % backward = 0 % lateral =0.00563 %) + Leakage : 850.19 MeV +- 21.99 MeV + Eleak/Ebeam = 85 % ( forward = 85 % backward =0.00609 % lateral = 0 %) ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={913785480964397581, 758708089138958951, 512837396174773248, 364019762387443911, 227981048687142520, 1793243795905947603, 1330771379932463971, 1882448914219819135, 2233873876355778306, 788041446220860046, 1952579403311736228, 1743856099635947558, 1985919791136845935, 193054626673977153, 1796668647638512857, 2246921724815697498, 55631510838562738} counter= 13sumtot= 27755911115619680 +N=17 V[N]={1822786039505024351, 451739014868820147, 1164805617051389993, 1988509177009954377, 1061872345902142530, 450944991230973789, 1368184653629848322, 803803675477224967, 1765281351029302180, 1941711124970290233, 1346266529720313019, 11507093520180130, 538993874075141425, 896937691016120703, 1951454627675545704, 2023874181048844542, 562197892581109933} counter= 9sumtot= 1704125806602674737 --------------------------------------- G4 kernel has come to Quit state. UserDetectorConstruction deleted. diff --git a/examples/advanced/brachytherapy/brachytherapy.out b/examples/advanced/brachytherapy/brachytherapy.out index 4e9f08f2428..88e0cb662c1 100644 --- a/examples/advanced/brachytherapy/brachytherapy.out +++ b/examples/advanced/brachytherapy/brachytherapy.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -387,7 +389,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -426,7 +428,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -459,7 +461,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -546,7 +548,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -579,7 +581,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -612,7 +614,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -645,7 +647,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -678,7 +680,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -711,7 +713,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -744,7 +746,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV ====================================================================== diff --git a/examples/advanced/composite_calorimeter/composite_calorimeter.out b/examples/advanced/composite_calorimeter/composite_calorimeter.out index b3d459af68b..8a211373632 100644 --- a/examples/advanced/composite_calorimeter/composite_calorimeter.out +++ b/examples/advanced/composite_calorimeter/composite_calorimeter.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -78,6 +78,7 @@ HcalTB96 is registered to the default region. * Magnetic Field is off * * * *************************** + G4ChordFinder: stepperDriverId: 2 ******************************************************* * * * Constructing a CCaloSD with name HadronCalorimeter @@ -216,7 +217,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -248,7 +249,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -280,7 +281,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -293,7 +294,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -339,7 +339,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -371,7 +371,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -403,7 +403,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -435,7 +435,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -467,7 +467,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -499,7 +499,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -531,7 +531,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -917,12 +917,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ### G4LevelReader: broken transition 0 from level 24 to 24 for isotope Z= 89 A= 219 - use ground level ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1084,7 +1093,7 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 20 - User=15.470000s Real=15.602755s Sys=0.010000s + User=13.680000s Real=13.774063s Sys=0.000000s ### Run 0 end. ... write file : ccal.root - done ... close file : ccal.root - done @@ -1102,12 +1111,12 @@ G4SDManager deleted. EventManager deleted. Units table cleared. TransportationManager deleted. -Total navigation history collections cleaned: 51 +Total navigation history collections cleaned: 47 G4RNGHelper object is deleted. ================== Deleting memory pools =================== -Pool ID '20G4NavigationLevelRep', size : 0.0731 MB +Pool ID '20G4NavigationLevelRep', size : 0.0692 MB Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB -Pool ID '17G4DynamicParticle', size : 0.0298 MB +Pool ID '17G4DynamicParticle', size : 0.0423 MB Pool ID '16G4SmartVoxelNode', size : 0.00769 MB Pool ID '17G4SmartVoxelProxy', size : 0.00385 MB Pool ID '7G4Event', size : 0.000961 MB @@ -1115,13 +1124,13 @@ Pool ID '15G4PrimaryVertex', size : 0.000961 MB Pool ID '17G4PrimaryParticle', size : 0.000961 MB Pool ID '15G4HCofThisEvent', size : 0.000961 MB Pool ID '16G4HitsCollection', size : 0.000961 MB -Pool ID '7G4Track', size : 0.0586 MB +Pool ID '7G4Track', size : 0.0836 MB Pool ID '18G4TouchableHistory', size : 0.00577 MB Pool ID '15G4CountedObjectIvE', size : 0.000961 MB -Pool ID '17G4ReactionProduct', size : 0.0163 MB +Pool ID '17G4ReactionProduct', size : 0.0135 MB Pool ID '10G4Fragment', size : 0.00577 MB Number of memory pools allocated: 15 of which, static: 0 -Dynamic pools deleted: 15 / Total memory freed: 0.21 MB +Dynamic pools deleted: 15 / Total memory freed: 0.24 MB ============================================================ G4Allocator objects are deleted. UImanager deleted. diff --git a/examples/advanced/doiPET/doiPET.out b/examples/advanced/doiPET/doiPET.out index 4bf276d9b1e..4253702a523 100644 --- a/examples/advanced/doiPET/doiPET.out +++ b/examples/advanced/doiPET/doiPET.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -817,14 +817,14 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Voxelisation: top CPU users: Percent Total CPU System CPU Memory Volume ------- ---------- ---------- -------- ---------- - 100.00 0.01 0.00 69k world_logicalV - 0.00 0.00 0.00 406k airBox_logicalV + 100.00 0.01 0.00 406k airBox_logicalV + 0.00 0.00 0.00 69k world_logicalV Voxelisation: top memory users: Percent Memory Heads Nodes Pointers Total CPU Volume ------- -------- ------ ------ -------- ---------- ---------- - 85.51 406k 931 5788 8898 0.00 airBox_logicalV - 14.49 68k 182 683 3080 0.01 world_logicalV + 85.51 406k 931 5788 8898 0.01 airBox_logicalV + 14.49 68k 182 683 3080 0.00 world_logicalV ### Run 0 starts. ### Begin of Run 0 start. @@ -866,7 +866,7 @@ N=17 V[N]={87900885656017340, 2136126672992718976, 110623987125446578, 176001763 Run terminated. Run Summary Number of events processed : 1000000 - User=123.620000s Real=126.554271s Sys=1.860000s + User=106.510000s Real=109.183284s Sys=1.390000s ### End of Run (1000000 events) G4 kernel has come to Quit state. @@ -882,19 +882,19 @@ G4SDManager deleted. EventManager deleted. Units table cleared. TransportationManager deleted. -Total navigation history collections cleaned: 14 +Total navigation history collections cleaned: 13 G4RNGHelper object is deleted. ================== Deleting memory pools =================== -Pool ID '20G4NavigationLevelRep', size : 0.0202 MB +Pool ID '20G4NavigationLevelRep', size : 0.0183 MB Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB -Pool ID '17G4DynamicParticle', size : 0.0125 MB +Pool ID '17G4DynamicParticle', size : 0.0115 MB Pool ID '16G4SmartVoxelNode', size : 0.201 MB Pool ID '17G4SmartVoxelProxy', size : 0.116 MB Pool ID '7G4Event', size : 0.000961 MB Pool ID '15G4PrimaryVertex', size : 0.000961 MB Pool ID '17G4PrimaryParticle', size : 0.000961 MB Pool ID '19G4ElectronOccupancy', size : 0.000961 MB -Pool ID '7G4Track', size : 0.024 MB +Pool ID '7G4Track', size : 0.0221 MB Pool ID '18G4TouchableHistory', size : 0.00192 MB Pool ID '15G4CountedObjectIvE', size : 0.000961 MB Number of memory pools allocated: 12 of which, static: 0 diff --git a/examples/advanced/eFLASH_radiotherapy/History b/examples/advanced/eFLASH_radiotherapy/History index 4cda35ce304..860bd201d3f 100644 --- a/examples/advanced/eFLASH_radiotherapy/History +++ b/examples/advanced/eFLASH_radiotherapy/History @@ -4,6 +4,9 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-06-19 G. Milluzzo (eFLASH_radiotherapy-V11-01-00) +- Removed visualization in batch mode + ## 2022-11-18 F. Romano (eFLASH_radiotherapy-V11-00-00) - Added the new advanced example eFLASH_radiotherapy diff --git a/examples/advanced/eFLASH_radiotherapy/eFLASH_radiotherapy.out b/examples/advanced/eFLASH_radiotherapy/eFLASH_radiotherapy.out index cd7cb178a5a..153c8b69a5c 100644 --- a/examples/advanced/eFLASH_radiotherapy/eFLASH_radiotherapy.out +++ b/examples/advanced/eFLASH_radiotherapy/eFLASH_radiotherapy.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -43,7 +43,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -349,7 +351,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -389,7 +391,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -421,7 +423,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -507,7 +509,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -539,7 +541,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -571,7 +573,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -603,7 +605,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -635,7 +637,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -667,7 +669,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -699,7 +701,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV ====================================================================== @@ -816,7 +818,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 500000 - User=1184.030000s Real=1200.808567s Sys=6.140000s + User=939.860000s Real=952.397755s Sys=5.140000s --------------------End of Global Run----------------------- The run was 500000 events /score/dumpQuantityToFile boxMesh_1 dose dose.out diff --git a/examples/advanced/eFLASH_radiotherapy/flash.cc b/examples/advanced/eFLASH_radiotherapy/flash.cc index 54b51e7adf4..68d3d7aafe5 100644 --- a/examples/advanced/eFLASH_radiotherapy/flash.cc +++ b/examples/advanced/eFLASH_radiotherapy/flash.cc @@ -46,10 +46,7 @@ int main(int argc, char **argv) { - G4UIExecutive *ui = 0; - if (argc == 1) { - ui = new G4UIExecutive(argc, argv); - } + // G4Random::setTheEngine(new CLHEP::MTwistEngine); @@ -72,18 +69,20 @@ int main(int argc, char **argv) { G4UImanager *UImanager = G4UImanager::GetUIpointer(); G4ScoringManager::GetScoringManager(); - - if (!ui) { - - G4String command = "/control/execute "; - G4String fileName = argv[1]; - UImanager->ApplyCommand(command + fileName); - } else { - +G4UIExecutive *ui = 0; + if (argc == 1) { + ui = new G4UIExecutive(argc, argv); UImanager->ApplyCommand("/control/execute init_vis.mac"); ui->SessionStart(); delete ui; } + else + { + G4String command = "/control/execute "; + G4String fileName = argv[1]; + UImanager->ApplyCommand(command + fileName); + + } delete visManager; delete runManager; diff --git a/examples/advanced/eRosita/eRosita.out b/examples/advanced/eRosita/eRosita.out index e1b399986cd..304a0a96732 100644 --- a/examples/advanced/eRosita/eRosita.out +++ b/examples/advanced/eRosita/eRosita.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -78,7 +78,7 @@ New sensitive detector is registered at /eRosita/ ======================================================================= ====== Electromagnetic Physics Parameters ======== ======================================================================= -LPM effect enabled 1 +LPM effect enabled 0 Enable creation and use of sampling tables 0 Apply cuts on all EM processes 0 Use combined TransportationWithMsc Disabled @@ -183,7 +183,7 @@ eIoni: for e- XStype:3 SubType=2 eBrem: for e- XStype:4 SubType=3 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000 + LPM flag: 0 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000 ===== EM models for the G4Region DefaultRegionForTheWorld ====== LowEnBrem : Emin= 0 eV Emax= 1 GeV AngularGen2BS eBremLPM : Emin= 1 GeV Emax= 100 TeV ModifiedTsai @@ -203,7 +203,7 @@ eIoni: for e+ XStype:3 SubType=2 eBrem: for e+ XStype:4 SubType=3 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 - LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000 + LPM flag: 0 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000 ===== EM models for the G4Region DefaultRegionForTheWorld ====== LowEnBrem : Emin= 0 eV Emax= 1 GeV AngularGen2BS eBremLPM : Emin= 1 GeV Emax= 100 TeV ModifiedTsai @@ -524,9 +524,9 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 1000 - User=3.830000s Real=3.855846s Sys=0.000000s + User=3.710000s Real=3.725513s Sys=0.010000s --- Run 0 (master) end. Total number of events: 1000. - User=3.840000s Real=3.856168s Sys=0.000000s + User=3.710000s Real=3.725783s Sys=0.010000s G4 kernel has come to Quit state. UserDetectorConstruction deleted. UserPhysicsList deleted. diff --git a/examples/advanced/fastAerosol/History b/examples/advanced/fastAerosol/History index f05c4d6c85e..2e9da63089d 100644 --- a/examples/advanced/fastAerosol/History +++ b/examples/advanced/fastAerosol/History @@ -4,6 +4,9 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-04-24 Susanna Guatelli (fastAerosol-V11-01-00) +- General cleaning of the code, including run-clang-tidy + ## 2022-09-09 Susanna Guatelli (fastAerosol-V11-00-01) - Ranecu engine removed, default engine used now diff --git a/examples/advanced/fastAerosol/fastAerosol.cc b/examples/advanced/fastAerosol/fastAerosol.cc index 5ad13ad2e61..0f2591114c8 100644 --- a/examples/advanced/fastAerosol/fastAerosol.cc +++ b/examples/advanced/fastAerosol/fastAerosol.cc @@ -51,68 +51,65 @@ int main(int argc,char** argv) G4int nThreads = 4; runManager->SetNumberOfThreads(nThreads); - // Detect interactive mode (if no arguments) and define UI session - // - G4UIExecutive* ui = 0; - if ( argc == 1 ) { - ui = new G4UIExecutive(argc, argv); - } - - // Set mandatory initialization classes - // - //G4ScoringManager* scoringManager = - G4ScoringManager::GetScoringManager(); - - // Detector construction initialization - runManager->SetUserInitialization(new DetectorConstruction()); - - // Physics list - G4VModularPhysicsList* physicsList = new QGSP_BIC; - physicsList->SetVerboseLevel(1); - - // Physics list - step limiter - G4StepLimiterPhysics* stepLimiter = new G4StepLimiterPhysics; - stepLimiter->SetApplyToAll(true); // apply step limit to all particles. Default we set limit to DBL_MAX - physicsList->RegisterPhysics(stepLimiter); - - // Physics list initialization - runManager->SetUserInitialization(physicsList); +// Set mandatory initialization classes +// +//G4ScoringManager* scoringManager = +G4ScoringManager::GetScoringManager(); + +// Detector construction initialization +runManager->SetUserInitialization(new DetectorConstruction()); + +// Physics list +G4VModularPhysicsList* physicsList = new QGSP_BIC; +physicsList->SetVerboseLevel(1); + +// Physics list - step limiter +auto* stepLimiter = new G4StepLimiterPhysics; +stepLimiter->SetApplyToAll(true); // apply step limit to all particles. Default we set limit to DBL_MAX + +physicsList->RegisterPhysics(stepLimiter); + +// Physics list initialization +runManager->SetUserInitialization(physicsList); - // User action initialization - runManager->SetUserInitialization(new ActionInitialization()); +// User action initialization +runManager->SetUserInitialization(new ActionInitialization()); - // Initialize visualization - // - G4VisManager* visManager = new G4VisExecutive; - // G4VisExecutive can take a verbosity argument - see /vis/verbose guidance. - // G4VisManager* visManager = new G4VisExecutive("Quiet"); - visManager->Initialize(); - - // Get the pointer to the User Interface manager - G4UImanager* UImanager = G4UImanager::GetUIpointer(); - - // Process macro or start UI session - // - if ( ! ui ) { - // batch mode - G4String command = "/control/execute "; - G4String fileName = argv[1]; - UImanager->ApplyCommand(command+fileName); - } - else { - // interactive mode - UImanager->ApplyCommand("/control/execute init_vis.mac"); - ui->SessionStart(); - delete ui; - } - - // Job termination - // Free the store: user actions, physics_list and detector_description are - // owned and deleted by the run manager, so they should not be deleted - // in the main() program ! +// Initialize visualization +// +auto* visManager = new G4VisExecutive; +visManager->Initialize(); + +// Get the pointer to the User Interface manager +auto* UImanager = G4UImanager::GetUIpointer(); +// Detect interactive mode (if no arguments) and define UI session +// +G4UIExecutive* ui = nullptr; +if ( argc == 1 ) ui = new G4UIExecutive(argc, argv); +// Process macro or start UI session +// +if ( ! ui ) + { + // batch mode + G4String command = "/control/execute "; + G4String fileName = argv[1]; + UImanager->ApplyCommand(command+fileName); + } + else + { + // interactive mode + UImanager->ApplyCommand("/control/execute init_vis.mac"); + ui->SessionStart(); + delete ui; + } + +// Job termination +// Free the store: user actions, physics_list and detector_description are +// owned and deleted by the run manager, so they should not be deleted +// in the main() program ! - delete visManager; - delete runManager; - //delete scoringManager; +delete visManager; +delete runManager; +return 0; } diff --git a/examples/advanced/fastAerosol/fastAerosol.out b/examples/advanced/fastAerosol/fastAerosol.out index debefb8ee72..1e8a8f482e6 100644 --- a/examples/advanced/fastAerosol/fastAerosol.out +++ b/examples/advanced/fastAerosol/fastAerosol.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -222,7 +224,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -254,7 +256,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -286,7 +288,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -299,7 +301,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -345,7 +346,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -377,7 +378,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -409,7 +410,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -441,7 +442,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -473,7 +474,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -505,7 +506,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -537,7 +538,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -910,12 +911,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -13863,7 +13873,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Run terminated. Run Summary Number of events processed : 10 - User=1.280000s Real=1.323262s Sys=0.030000s + User=1.180000s Real=1.271009s Sys=0.020000s --------------------End of Global Run----------------------- The run consists of 10 proton of 50 MeV diff --git a/examples/advanced/fastAerosol/include/FAActionInitialization.hh b/examples/advanced/fastAerosol/include/FAActionInitialization.hh index d16289c5f58..378efcb389e 100644 --- a/examples/advanced/fastAerosol/include/FAActionInitialization.hh +++ b/examples/advanced/fastAerosol/include/FAActionInitialization.hh @@ -23,7 +23,6 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // - // (copied from B1ActionInitialization) #ifndef ActionInitialization_h @@ -36,13 +35,12 @@ class ActionInitialization : public G4VUserActionInitialization { public: - ActionInitialization(); - virtual ~ActionInitialization(); + explicit ActionInitialization(); + virtual ~ActionInitialization()=default; - virtual void BuildForMaster() const; - virtual void Build() const; + virtual void BuildForMaster() const override; + virtual void Build() const override; }; - #endif diff --git a/examples/advanced/fastAerosol/include/FACloudParameterisation.hh b/examples/advanced/fastAerosol/include/FACloudParameterisation.hh index 1de7cca9f18..e268d8fc2ed 100644 --- a/examples/advanced/fastAerosol/include/FACloudParameterisation.hh +++ b/examples/advanced/fastAerosol/include/FACloudParameterisation.hh @@ -23,7 +23,6 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // - // (adapted from B2bChamberParameterisation) // Author: A.Knaian (ara@nklabs.com), N.MacFadden (natemacfadden@gmail.com) @@ -56,9 +55,9 @@ class CloudParameterisation : public G4VPVParameterisation { public: - CloudParameterisation(const std::vector& positions); + explicit CloudParameterisation(const std::vector& positions); - virtual ~CloudParameterisation(); + virtual ~CloudParameterisation()=default; void ComputeTransformation (const G4int copyNo, G4VPhysicalVolume* physVol) const; @@ -90,8 +89,6 @@ class CloudParameterisation : public G4VPVParameterisation void ComputeDimensions (G4Sphere&,const G4int, const G4VPhysicalVolume*) const {} private: - std::vector fPositions; }; - #endif diff --git a/examples/advanced/fastAerosol/include/FADetectorConstruction.hh b/examples/advanced/fastAerosol/include/FADetectorConstruction.hh index 06b5e80ab2d..88b08235429 100644 --- a/examples/advanced/fastAerosol/include/FADetectorConstruction.hh +++ b/examples/advanced/fastAerosol/include/FADetectorConstruction.hh @@ -45,47 +45,49 @@ class DetectorConstructionMessenger; class DetectorConstruction : public G4VUserDetectorConstruction { - public: - DetectorConstruction(); - virtual ~DetectorConstruction(); - - virtual G4VPhysicalVolume* Construct(); +public: + explicit DetectorConstruction(); + virtual ~DetectorConstruction(); + virtual G4VPhysicalVolume* Construct() override; - G4LogicalVolume* GetScoringVolume() const { return fScoringVolume; } + G4LogicalVolume* GetScoringVolume() const { return fScoringVolume; } - // Physics - G4double fStepLim = DBL_MAX; // global step limit - G4UserLimits* fStepLimits; // physics implementation of limit + // Physics + G4double fStepLim = DBL_MAX;// global step limit + G4UserLimits* fStepLimits;// physics implementation of limit - // Cloud build choice - G4bool fFastAerosolCloud = false; - G4bool fParameterisedCloud = false; - G4bool fSmoothCloud = false; + // Cloud build choice + G4bool fFastAerosolCloud = false; + G4bool fParameterisedCloud = false; + G4bool fSmoothCloud = false; - // Cloud droplet details - G4double fDropletR = 1; + // Cloud droplet details + G4double fDropletR = 1; - // FastAerosol cloud details - FastAerosol* fCloud = NULL; // the cloud bulk and droplet positions - G4bool fPrePopulate = false; // whether to pre-load droplet positions (true) or not (false) - G4double fDropletNumDens = 0; // number density of droplets - G4double fMinSpacing = 0.0; // minimum spacing between droplets - int fCloudSeed = 0; // random seed dictating droplet distribution + // FastAerosol cloud details + FastAerosol* fCloud = NULL; // the cloud bulk and droplet positions + + G4bool fPrePopulate = false; + // whether to pre-load droplet positions (true) or not (false) + G4double fDropletNumDens = 0; //number density of droplets + G4double fMinSpacing = 0.0;// minimum spacing between droplets + G4int fCloudSeed = 0; // random seed dictating droplet distribution - // parameterised cloud details - G4double fSmartless = 2.0; // control the 'fSmartless' property of parameterised solid. Roughly how many voxels the volume is split into for geometry optimization + // parameterised cloud details + G4double fSmartless = 2.0; + // control the 'fSmartless' property of parameterised solid. Roughly how many voxels the volume is split into for geometry optimization - G4String fCloudShapeStr = "box"; // cloud bulk shape - G4String fDropletShapeStr = "sphere"; // droplet shape + G4String fCloudShapeStr = "box"; // cloud bulk shape + G4String fDropletShapeStr = "sphere"; // droplet shape - G4VSolid* fCloudShape; // actual cloud bulk shape - G4VSolid* fDropletShape; // actual droplet solid + G4VSolid* fCloudShape; // actual cloud bulk shape + G4VSolid* fDropletShape;// actual droplet solid - protected: - G4LogicalVolume* fScoringVolume; +protected: + G4LogicalVolume* fScoringVolume; - private: - DetectorConstructionMessenger* fMessenger; +private: + DetectorConstructionMessenger* fMessenger; }; #endif diff --git a/examples/advanced/fastAerosol/include/FAEventAction.hh b/examples/advanced/fastAerosol/include/FAEventAction.hh index 444c95f5bac..e648eafd1a0 100644 --- a/examples/advanced/fastAerosol/include/FAEventAction.hh +++ b/examples/advanced/fastAerosol/include/FAEventAction.hh @@ -23,7 +23,6 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // - // (copied from B1EventAction) #ifndef EventAction_h @@ -39,20 +38,19 @@ class RunAction; class EventAction : public G4UserEventAction { - public: - EventAction(RunAction* runAction); - virtual ~EventAction(); +public: + explicit EventAction(RunAction* runAction); + virtual ~EventAction()=default; - virtual void BeginOfEventAction(const G4Event* event); - virtual void EndOfEventAction(const G4Event* event); + virtual void BeginOfEventAction(const G4Event* event) override; + virtual void EndOfEventAction(const G4Event* event) override; - void AddEdep(G4double edep) { fEdep += edep; } + void AddEdep(G4double edep) { fEdep += edep; } - private: - RunAction* fRunAction; - G4double fEdep; +private: + RunAction* fRunAction; + G4double fEdep; }; - #endif diff --git a/examples/advanced/fastAerosol/include/FAPrimaryGeneratorAction.hh b/examples/advanced/fastAerosol/include/FAPrimaryGeneratorAction.hh index abdf0ec11ff..fcf8fedfa8d 100644 --- a/examples/advanced/fastAerosol/include/FAPrimaryGeneratorAction.hh +++ b/examples/advanced/fastAerosol/include/FAPrimaryGeneratorAction.hh @@ -23,7 +23,6 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // - // (adapted from B1PrimaryGeneratorAction) // Author: A.Knaian (ara@nklabs.com), N.MacFadden (natemacfadden@gmail.com) @@ -40,19 +39,18 @@ class G4Box; class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { - public: - PrimaryGeneratorAction(); - virtual ~PrimaryGeneratorAction(); +public: + explicit PrimaryGeneratorAction(); + virtual ~PrimaryGeneratorAction(); - // method from the base class - virtual void GeneratePrimaries(G4Event*); +// method from the base class + virtual void GeneratePrimaries(G4Event*) override; - // method to access particle gun - const G4ParticleGun* GetParticleGun() const { return fParticleGun; } +// method to access particle gun + const G4ParticleGun* GetParticleGun() const { return fParticleGun; } - private: - G4ParticleGun* fParticleGun; - G4Box* fWorldBox; +private: + G4ParticleGun* fParticleGun; + G4Box* fWorldBox; }; - #endif diff --git a/examples/advanced/fastAerosol/include/FARunAction.hh b/examples/advanced/fastAerosol/include/FARunAction.hh index 8808430598f..6ff68ecf7ad 100644 --- a/examples/advanced/fastAerosol/include/FARunAction.hh +++ b/examples/advanced/fastAerosol/include/FARunAction.hh @@ -23,7 +23,6 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // - // (copied from B1RunAction) #ifndef RunAction_h @@ -43,20 +42,19 @@ class G4Run; class RunAction : public G4UserRunAction { - public: - RunAction(); - virtual ~RunAction(); +public: + explicit RunAction(); + virtual ~RunAction()=default; - // virtual G4Run* GenerateRun(); - virtual void BeginOfRunAction(const G4Run*); - virtual void EndOfRunAction(const G4Run*); + // virtual G4Run* GenerateRun(); + virtual void BeginOfRunAction(const G4Run*) override; + virtual void EndOfRunAction(const G4Run*) override; - void AddEdep (G4double edep); + void AddEdep (G4double edep); - private: - G4Accumulable fEdep; - G4Accumulable fEdep2; +private: + G4Accumulable fEdep; + G4Accumulable fEdep2; }; - #endif diff --git a/examples/advanced/fastAerosol/include/FASteppingAction.hh b/examples/advanced/fastAerosol/include/FASteppingAction.hh index d56bc5987f3..d06519b41ae 100644 --- a/examples/advanced/fastAerosol/include/FASteppingAction.hh +++ b/examples/advanced/fastAerosol/include/FASteppingAction.hh @@ -23,7 +23,6 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // - // (copied from B1SteppingAction) #ifndef SteppingAction_h @@ -41,16 +40,16 @@ class G4LogicalVolume; class SteppingAction : public G4UserSteppingAction { - public: - SteppingAction(EventAction* eventAction); - virtual ~SteppingAction(); +public: + explicit SteppingAction(EventAction* eventAction); + virtual ~SteppingAction()=default; - // method from the base class - virtual void UserSteppingAction(const G4Step*); + // method from the base class + virtual void UserSteppingAction(const G4Step*) override; - private: - EventAction* fEventAction; - G4LogicalVolume* fScoringVolume; +private: + EventAction* fEventAction; + G4LogicalVolume* fScoringVolume; }; #endif diff --git a/examples/advanced/fastAerosol/include/FastAerosol.hh b/examples/advanced/fastAerosol/include/FastAerosol.hh index a47f471eb56..e33c94907a4 100644 --- a/examples/advanced/fastAerosol/include/FastAerosol.hh +++ b/examples/advanced/fastAerosol/include/FastAerosol.hh @@ -54,183 +54,209 @@ //using namespace std; -class FastAerosol { - public: - // Constructor; creates a random cloud of droplets - FastAerosol(const G4String& pName, G4VSolid* pCloud, - G4double pR, G4double pMinD, G4double pAvgNumDens, G4double pdR, - std::function pNumDensDistribution); - - FastAerosol(const G4String& pName, G4VSolid* pCloud, - G4double pR, G4double pMinD, G4double pNumDens, G4double pdR); - - FastAerosol(const G4String& pName, G4VSolid* pCloud, - G4double pR, G4double pMinD, G4double pNumDens); +class FastAerosol +{ +public: + // Constructor; creates a random cloud of droplets + FastAerosol(const G4String& pName, G4VSolid* pCloud, + G4double pR, G4double pMinD, + G4double pAvgNumDens, G4double pdR, + std::function pNumDensDistribution); + +FastAerosol(const G4String& pName, G4VSolid* pCloud, + G4double pR, G4double pMinD, + G4double pNumDens, G4double pdR); + +FastAerosol(const G4String& pName, G4VSolid* pCloud, + G4double pR, G4double pMinD, G4double pNumDens); - // Destructor; frees memory - ~FastAerosol(); +~FastAerosol()=default; - // Populate all grids. Otherwise, they are populated on-the-fly - void PopulateAllGrids(); +// Populate all grids. Otherwise, they are populated on-the-fly +void PopulateAllGrids(); - // Save locations of droplets to a file for visualization/analysis purposes - void SaveToFile(const char *filename); +// Save locations of droplets to a file for visualization/analysis purposes +void SaveToFile(const char *filename); - // Get absolutely nearest droplet - must be public as FastAerosolSolid uses it - bool GetNearestDroplet(const G4ThreeVector &p, G4ThreeVector ¢er, G4double &closestDistance, G4double stepLim, G4VSolid* droplet, std::function rotation); +// Get absolutely nearest droplet - must be public as FastAerosolSolid uses it +bool GetNearestDroplet(const G4ThreeVector &p, G4ThreeVector ¢er, G4double &closestDistance, G4double stepLim, G4VSolid* droplet, std::function rotation); - // Get nearest droplet along a vector - must be public as FastAerosolSolid uses it - bool GetNearestDroplet(const G4ThreeVector &p, const G4ThreeVector &v, G4ThreeVector ¢er, G4double &closestDistance, G4double stepLim, G4VSolid* droplet, std::function rotation); +// Get nearest droplet along a vector - must be public as FastAerosolSolid uses it +bool GetNearestDroplet(const G4ThreeVector &p, const G4ThreeVector &v, G4ThreeVector ¢er, G4double &closestDistance, G4double stepLim, G4VSolid* droplet, std::function rotation); - // ====== - // Inline - // ====== - // Input quantities - inline G4String GetName() const; // aerosol name - inline G4VSolid* GetBulk() const; // bulk shape - inline G4double GetRadius() const; // droplet radius - inline G4double GetAvgNumDens() const; // droplet number density - //inline G4double GetPitch() const; // grid pitch +// ====== +// Inline +// ====== +// Input quantities +inline G4String GetName() const; //fasterosol name +inline G4VSolid* GetBulk() const; // bulk shape +inline G4double GetRadius() const; // droplet radius +inline G4double GetAvgNumDens() const; // droplet number density +//inline G4double GetPitch() const; // grid pitch - inline G4int GetNumDroplets() const; // in case the absolute number is more relevant than density +inline G4int GetNumDroplets() const; +// in case the absolute number is more relevant than density - // Bulk quantities - inline G4double GetXHalfLength() const; - inline G4double GetYHalfLength() const; - inline G4double GetZHalfLength() const; - inline void GetBoundingLimits(G4ThreeVector &pMin, G4ThreeVector &pMax) const; - inline G4double GetCubicVolume() const; +// Bulk quantities +inline G4double GetXHalfLength() const; +inline G4double GetYHalfLength() const; +inline G4double GetZHalfLength() const; +inline void GetBoundingLimits(G4ThreeVector &pMin, G4ThreeVector &pMax) const; +inline G4double GetCubicVolume() const; - inline G4double DistanceToCloud(const G4ThreeVector &p); - inline G4double DistanceToCloud(const G4ThreeVector &p, const G4ThreeVector &v); +inline G4double DistanceToCloud(const G4ThreeVector &p); +inline G4double DistanceToCloud(const G4ThreeVector &p, const G4ThreeVector &v); - // Misc getters and setters - inline long GetSeed(); - inline void SetSeed(long seed); +// Misc getters and setters +inline long GetSeed(); +inline void SetSeed(long seed); - inline G4int GetNumPlacementTries(); - inline void SetNumPlacementTries(G4int numTries); +inline G4int GetNumPlacementTries(); +inline void SetNumPlacementTries(G4int numTries); - inline G4int GetPreSphereR(); - inline void SetPreSphereR(G4int fPreSphereRIn); +inline G4int GetPreSphereR(); +inline void SetPreSphereR(G4int fPreSphereRIn); - inline std::function GetDistribution(); // the droplet number density distribution +inline std::function GetDistribution(); // the droplet number density distribution - inline G4double GetDropletsPerVoxel(); - inline void SetDropletsPerVoxel(G4double newDropletsPerVoxel); +inline G4double GetDropletsPerVoxel(); +inline void SetDropletsPerVoxel(G4double newDropletsPerVoxel); - // Printing diagnostic tool - inline void PrintPopulationReport(); +// Printing diagnostic tool +inline void PrintPopulationReport(); - private: - G4double kCarTolerance; +private: + G4double kCarTolerance; - // Parameters, set in constructor - G4String fName; +// Parameters, set in constructor + G4String fName; + G4VSolid* fCloud; // Solid volume of the cloud + G4double fDx, fDy, fDz; // Half widths + G4double fR; // Bounding radius of each droplet + G4double fR2; // Bounding radius squared of each droplet + G4double fdR; // Uncertainty in DistanceToIn droplet when just using knowledge of droplet center - G4VSolid* fCloud; // Solid volume of the cloud - G4double fDx, fDy, fDz; // Half widths +G4double fMinD; // Minimum distance allowed between faces of droplets when constructing random array of droplets - G4double fR; // Bounding radius of each droplet - G4double fR2; // Bounding radius squared of each droplet +std::function fDistribution; +G4double fAvgNumDens; // Average droplet number density - G4double fdR; // Uncertainty in DistanceToIn droplet when just using knowledge of droplet center +long int fNumDroplets = 0; +// Number of droplets that have been created - G4double fMinD; // Minimum distance allowed between faces of droplets when constructing random array of droplets +G4double fGridPitch; +// Pitch of collision detection grid. Must be greater than diameter of droplets for correctness of collision detection. - std::function fDistribution; - G4double fAvgNumDens; // Average droplet number density - long int fNumDroplets = 0; // Number of droplets that have been created +// Ramdom engine +CLHEP::HepJamesRandom fCloudEngine; +long fSeed = 0; // Global random seed - G4double fGridPitch; // Pitch of collision detection grid. Must be greater than diameter of droplets for correctness of collision detection. +G4double fDropletsPerVoxel = 4.0; +// Expected number of droplets per voxel - // Ramdom engine - CLHEP::HepJamesRandom fCloudEngine; - long fSeed = 0; // Global random seed +// How far the voxel center must be inside the bulk +//order for there to be no risk of placing a droplet outside +G4double fEdgeDistance; - G4double fDropletsPerVoxel = 4.0; // Expected number of droplets per voxel +// Grid variables +std::vector> fGrid; +// Grid of lists of inidices to grid points, +//used for fast collsion checking - // How far the voxel center must be inside the bulk order for there to be no risk of placing a droplet outside - G4double fEdgeDistance; +std::vector fGridMean; +// Array listing mean count for each voxel - // Grid variables - std::vector> fGrid;// Grid of lists of inidices to grid points, used for fast collsion checking - std::vector fGridMean; // Array listing mean count for each voxel - std::atomic *fGridValid; // Array listing validity of each grid. uses atomic variables +std::atomic *fGridValid; +// Array listing validity of each grid. uses atomic variables - G4int fNx, fNy, fNz; // Number of x, y, and z elements in fGrid - G4int fNxy; // Cached fNx*fNy - long int fNumGridCells; // Cached fNx*fNy*fNz +G4int fNx, fNy, fNz; // Number of x, y, and z elements in fGrid +G4int fNxy; // Cached fNx*fNy +long int fNumGridCells; // Cached fNx*fNy*fNz - G4double fCollisionLimit2; // Threshold distance squared when checking for collsion - G4int fNumNewPointTries = 100; // How many times we try to place droplets - G4double fMaxDropPercent = 1.0; // The maximal percentage of skipped droplets before crashing0 - G4int fMaxDropCount; // The maximal number of skipped droplets before crashing - G4int fNumDropped = 0; // Number of skipped droplets due to collisions/out of bulk placement +G4double fCollisionLimit2; +// Threshold distance squared when checking for collsion + +G4int fNumNewPointTries = 100; +// How many times we try to place droplets + +G4double fMaxDropPercent = 1.0; +// The maximal percentage of skipped droplets before crashing0 + +G4int fMaxDropCount; +// The maximal number of skipped droplets before crashing + +G4int fNumDropped = 0; +// Number of skipped droplets due to collisions/out of bulk placement - G4int fNumCollisions = 0; // How many collisions occured when attempting to place +G4int fNumCollisions = 0; +// How many collisions occured when attempting to place - // Droplet search variables - G4int fVectorSearchRadius; // maximum vector search radius +// Droplet search variables +G4int fVectorSearchRadius; +// maximum vector search radius - // Droplet placement functions - // =========================== - void InitializeGrid(); +// Droplet placement functions +// =========================== +void InitializeGrid(); - G4bool FindNewPoint(G4bool edgeVoxel, G4double dX, G4double dY, G4double dZ, G4double minX, G4double minY, G4double minZ, G4ThreeVector &foundVec); +G4bool FindNewPoint(G4bool edgeVoxel, G4double dX, G4double dY, G4double dZ, G4double minX, G4double minY, G4double minZ, G4ThreeVector &foundVec); - G4double VoxelOverlap(G4ThreeVector voxelCenter, G4int nStat, G4double epsilon); +G4double VoxelOverlap(G4ThreeVector voxelCenter, G4int nStat, G4double epsilon); - bool CheckCollision(G4double x, G4double y, G4double z); - bool CheckCollisionInsideGrid(G4double x, G4double y, G4double z, unsigned int xi, unsigned int yi, unsigned int zi); - bool CheckCollisionWithDroplet(G4double x, G4double y, G4double z, G4ThreeVector p); +bool CheckCollision(G4double x, G4double y, G4double z); +bool CheckCollisionInsideGrid(G4double x, G4double y, G4double z, unsigned int xi, unsigned int yi, unsigned int zi); +bool CheckCollisionWithDroplet(G4double x, G4double y, G4double z, G4ThreeVector p); - // Droplet distance functions - // ========================== - void SearchSphere(G4int searchRad, G4double &minDistance, std::vector &candidates, std::vector &distances2, G4int xGrid, G4int yGrid, G4int zGrid, const G4ThreeVector &p); - void GetNearestDropletInsideRegion(G4double &minDistance, G4ThreeVector ¢er, int xGrid, int yGrid, int zGrid, int xWidth, int yWidth, int zWidth, const G4ThreeVector &p, const G4ThreeVector &v, G4VSolid* droplet, std::function rotation); - void GetNearestDropletInsideGrid(G4double &minDistance, std::vector &candidates, std::vector &distances2, unsigned int xGrid, unsigned int yGrid, unsigned int zGrid, const G4ThreeVector &p); - void GetNearestDropletInsideGrid(G4double &minDistance, G4ThreeVector ¢er, unsigned int xGrid, unsigned int yGrid, unsigned int zGrid, const G4ThreeVector &p, const G4ThreeVector &v, G4VSolid* droplet, std::function rotation); +// Droplet distance functions +// ========================== +void SearchSphere(G4int searchRad, G4double &minDistance, std::vector &candidates, std::vector &distances2, G4int xGrid, G4int yGrid, G4int zGrid, const G4ThreeVector &p); - // Voxelized sphere methods - // ======================== - // a collection of points as in {{x1,y1},{x2,y2},...} - typedef std::vector> fCircleType; +void GetNearestDropletInsideRegion(G4double &minDistance, G4ThreeVector ¢er, int xGrid, int yGrid, int zGrid, int xWidth, int yWidth, int zWidth, const G4ThreeVector &p, const G4ThreeVector &v, G4VSolid* droplet, std::function rotation); - // a collection of points describing a spherical shell - // with points (x,y,z)=(i-R,j-R,sphere[i][j][k]) - // that is, first index gives x-position, second index - // gives y-position, and the value gives z-position - // - // this is done so that searching may be optimized: - // if searching some x=i-R that is outside the - // aerosol's bounding box, immediately increment i - // (similar for y). - typedef std::vector>> fSphereType; +void GetNearestDropletInsideGrid(G4double &minDistance, std::vector &candidates, std::vector &distances2, unsigned int xGrid, unsigned int yGrid, unsigned int zGrid, const G4ThreeVector &p); - G4int fMaxCircleR; - G4int fMaxSphereR; - G4int fPreSphereR = 20; - std::vector fCircleCollection; - std::vector fSphereCollection; - - fSphereType MakeSphere(G4int R); - fCircleType MakeCircle(G4int R); - fCircleType MakeHalfCircle(G4int R); +void GetNearestDropletInsideGrid(G4double &minDistance, G4ThreeVector ¢er, unsigned int xGrid, unsigned int yGrid, unsigned int zGrid, const G4ThreeVector &p, const G4ThreeVector &v, G4VSolid* droplet, std::function rotation); + +// Voxelized sphere methods +// ======================== +// a collection of points as in {{x1,y1},{x2,y2},...} +typedef std::vector> fCircleType; + +// a collection of points describing a spherical shell +// with points (x,y,z)=(i-R,j-R,sphere[i][j][k]) +// that is, first index gives x-position, second index +// gives y-position, and the value gives z-position +// +// this is done so that searching may be optimized: +// if searching some x=i-R that is outside the +// aerosol's bounding box, immediately increment i +// (similar for y). +typedef std::vector>> fSphereType; + +G4int fMaxCircleR; +G4int fMaxSphereR; +G4int fPreSphereR = 20; +std::vector fCircleCollection; +std::vector fSphereCollection; +fSphereType MakeSphere(G4int R); +fCircleType MakeCircle(G4int R); +fCircleType MakeHalfCircle(G4int R); + +void PopulateGrid(unsigned int xi, unsigned int yi, unsigned int zi, unsigned int& gi); + +// ====== +// Inline +// ====== +inline bool GetGrid(const G4ThreeVector &p, G4int &xGrid, G4int &yGrid, G4int &zGrid); - void PopulateGrid(unsigned int xi, unsigned int yi, unsigned int zi, unsigned int& gi); +inline bool AnyIndexOutOfBounds(G4int xGrid, G4int yGrid, G4int zGrid); - // ====== - // Inline - // ====== - inline bool GetGrid(const G4ThreeVector &p, G4int &xGrid, G4int &yGrid, G4int &zGrid); - inline bool AnyIndexOutOfBounds(G4int xGrid, G4int yGrid, G4int zGrid); +inline unsigned int GetGridIndex(unsigned int xi, unsigned int yi, unsigned int zi); - inline unsigned int GetGridIndex(unsigned int xi, unsigned int yi, unsigned int zi); - inline G4ThreeVector GetIndexCoord(G4int index); +inline G4ThreeVector GetIndexCoord(G4int index); - inline std::pair GetMinMaxSide(G4int index, G4int numGrids); +inline std::pair GetMinMaxSide(G4int index, G4int numGrids); }; #include "FastAerosol.icc" diff --git a/examples/advanced/fastAerosol/include/FastAerosolSolid.hh b/examples/advanced/fastAerosol/include/FastAerosolSolid.hh index a69c13cddb8..fb4eead3611 100644 --- a/examples/advanced/fastAerosol/include/FastAerosolSolid.hh +++ b/examples/advanced/fastAerosol/include/FastAerosolSolid.hh @@ -58,93 +58,94 @@ class FastAerosolSolid : public G4VSolid { - public: - FastAerosolSolid(const G4String& pName, - FastAerosol* pCloud, - G4VSolid* pDroplet, - std::function pRotation); - - FastAerosolSolid(const G4String& pName, - FastAerosol* pCloud, - G4VSolid* pDroplet); - ~FastAerosolSolid(); - - // Access functions - inline G4double GetCubicVolume(); - inline G4double GetSurfaceArea(); - - // Solid standard methods - G4bool CalculateExtent(const EAxis pAxis, - const G4VoxelLimits& pVoxelLimit, - const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax) const; - EInside Inside(const G4ThreeVector& p) const; - G4ThreeVector SurfaceNormal( const G4ThreeVector& p) const; - G4double DistanceToIn(const G4ThreeVector& p, - const G4ThreeVector& v) const; - G4double DistanceToIn(const G4ThreeVector& p) const; - G4double DistanceToOut(const G4ThreeVector& p, - const G4ThreeVector& v, - const G4bool calcNorm=G4bool(false), - G4bool *validNorm=0, - G4ThreeVector *n=0) const; - G4double DistanceToOut(const G4ThreeVector& p) const; - - G4GeometryType GetEntityType() const; - - G4VSolid* Clone() const; - - std::ostream& StreamInfo(std::ostream& os) const; - - G4ThreeVector GetPointOnSurface() const; - - G4Polyhedron* GetPolyhedron () const; - void DescribeYourselfTo(G4VGraphicsScene& scene) const; - G4VisExtent GetExtent() const; - G4Polyhedron* CreatePolyhedron() const; - - - public: // without description - - FastAerosolSolid(__void__&); - // - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. - - FastAerosolSolid(const FastAerosolSolid& rhs); - FastAerosolSolid& operator=(const FastAerosolSolid& rhs); - // Copy constructor and assignment operator. +public: + FastAerosolSolid(const G4String& pName, FastAerosol* pCloud, + G4VSolid* pDroplet, + std::function pRotation); + + FastAerosolSolid(const G4String& pName, FastAerosol* pCloud, + G4VSolid* pDroplet); + ~FastAerosolSolid()=default; + +// Access functions + inline G4double GetCubicVolume(); + inline G4double GetSurfaceArea(); + +// Solid standard methods + G4bool CalculateExtent(const EAxis pAxis, + const G4VoxelLimits& pVoxelLimit, + const G4AffineTransform& pTransform, + G4double& pmin, G4double& pmax) const; + + EInside Inside(const G4ThreeVector& p) const; + + G4ThreeVector SurfaceNormal(const G4ThreeVector& p) const; + + G4double DistanceToIn(const G4ThreeVector& p, + const G4ThreeVector& v) const; + + G4double DistanceToIn(const G4ThreeVector& p) const; + G4double DistanceToOut(const G4ThreeVector& p, + const G4ThreeVector& v, + const G4bool calcNorm=G4bool(false), + G4bool *validNorm=0, G4ThreeVector *n=0) const; + + G4double DistanceToOut(const G4ThreeVector& p) const; + + G4GeometryType GetEntityType() const; + + G4VSolid* Clone() const; + + std::ostream& StreamInfo(std::ostream& os) const; + + G4ThreeVector GetPointOnSurface() const; + + G4Polyhedron* GetPolyhedron () const; + void DescribeYourselfTo(G4VGraphicsScene& scene) const; + G4VisExtent GetExtent() const; + G4Polyhedron* CreatePolyhedron() const; + +public: // without description + FastAerosolSolid(__void__&); +// +// Fake default constructor for usage restricted to direct object +// persistency for clients requiring preallocation of memory for +// persistifiable objects. - inline void SetStepLim(G4double newLim); + FastAerosolSolid(const FastAerosolSolid& rhs); + FastAerosolSolid& operator=(const FastAerosolSolid& rhs); + // Copy constructor and assignment operator. - private: + inline void SetStepLim(G4double newLim); + + private: - inline void Initialize(); - // - // Reset relevant values to zero + inline void Initialize(); +// +// Reset relevant values to zero - G4double fStepLim = DBL_MAX; // Maximum step length. Allows speed up in droplet search + G4double fStepLim = DBL_MAX; // Maximum step length. Allows speed up in droplet search - FastAerosol* fCloud; // FastAerosol which handles brunt of work - G4VSolid* fDroplet; // Droplet shape - G4VSolid* fBulk; // Aerosol bulk + FastAerosol* fCloud; // FastAerosol which handles brunt of work + G4VSolid* fDroplet; // Droplet shape + G4VSolid* fBulk; // Aerosol bulk - G4double fR = 0.0; // Droplet bounding radius + G4double fR = 0.0; // Droplet bounding radius - G4double fVisDx, fVisDy, fVisDz; // Visual extent + G4double fVisDx, fVisDy, fVisDz; // Visual extent - G4double fCubicVolume = 0.0; // Cubic volume of all droplets - G4double fSurfaceArea = 0.0; // Surface area of all droplets + G4double fCubicVolume = 0.0; // Cubic volume of all droplets + G4double fSurfaceArea = 0.0; // Surface area of all droplets - G4double farFromCloudDist; + G4double farFromCloudDist; - std::function fRotation; // rotation function + std::function fRotation; + // rotation function - protected: // without description + protected: // without description - mutable G4bool fRebuildPolyhedron; - mutable G4Polyhedron* fpPolyhedron; + mutable G4bool fRebuildPolyhedron; + mutable G4Polyhedron* fpPolyhedron; }; #include "FastAerosolSolid.icc" diff --git a/examples/advanced/fastAerosol/src/FAActionInitialization.cc b/examples/advanced/fastAerosol/src/FAActionInitialization.cc index 97db4155d6c..450a287a23f 100644 --- a/examples/advanced/fastAerosol/src/FAActionInitialization.cc +++ b/examples/advanced/fastAerosol/src/FAActionInitialization.cc @@ -23,7 +23,6 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // - // (copied from B1ActionInitialization) #include "FAActionInitialization.hh" @@ -36,12 +35,9 @@ ActionInitialization::ActionInitialization() : G4VUserActionInitialization() {} -ActionInitialization::~ActionInitialization() -{} - void ActionInitialization::BuildForMaster() const { - RunAction* runAction = new RunAction; + auto* runAction = new RunAction; SetUserAction(runAction); } @@ -49,10 +45,10 @@ void ActionInitialization::Build() const { SetUserAction(new PrimaryGeneratorAction); - RunAction* runAction = new RunAction; + auto* runAction = new RunAction; SetUserAction(runAction); - EventAction* eventAction = new EventAction(runAction); + auto* eventAction = new EventAction(runAction); SetUserAction(eventAction); SetUserAction(new SteppingAction(eventAction)); diff --git a/examples/advanced/fastAerosol/src/FACloudParameterisation.cc b/examples/advanced/fastAerosol/src/FACloudParameterisation.cc index b9a8508316e..814f9202de4 100644 --- a/examples/advanced/fastAerosol/src/FACloudParameterisation.cc +++ b/examples/advanced/fastAerosol/src/FACloudParameterisation.cc @@ -23,7 +23,6 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // - // (adapted from B2bChamberParameterisation) // Author: A.Knaian (ara@nklabs.com), N.MacFadden (natemacfadden@gmail.com) @@ -38,14 +37,11 @@ CloudParameterisation::CloudParameterisation( const std::vector& positions) : G4VPVParameterisation() { - fPositions = positions; + fPositions = positions; } -CloudParameterisation::~CloudParameterisation() -{ } - void CloudParameterisation::ComputeTransformation (const G4int copyNo, G4VPhysicalVolume* physVol) const { physVol->SetTranslation(fPositions[copyNo]); -} \ No newline at end of file +} diff --git a/examples/advanced/fastAerosol/src/FADetectorConstruction.cc b/examples/advanced/fastAerosol/src/FADetectorConstruction.cc index 879b7c0426c..36b8fd2c409 100644 --- a/examples/advanced/fastAerosol/src/FADetectorConstruction.cc +++ b/examples/advanced/fastAerosol/src/FADetectorConstruction.cc @@ -63,499 +63,437 @@ // to save distribution #include -#include // for measuring FastAerosol droplet center population time - - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#include +// for measuring FastAerosol droplet center population time DetectorConstruction::DetectorConstruction() : G4VUserDetectorConstruction(), -fScoringVolume(0) +fScoringVolume(nullptr) { fMessenger = new DetectorConstructionMessenger(this); } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - DetectorConstruction::~DetectorConstruction() { - delete fMessenger; - - delete fStepLimits; - - delete fCloudShape; - delete fDropletShape; - - delete fCloud; + delete fMessenger; + delete fStepLimits; + delete fCloudShape; + delete fDropletShape; + delete fCloud; } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - G4VPhysicalVolume* DetectorConstruction::Construct() { - // - // Check cloud build settings - // - if (fFastAerosolCloud + fParameterisedCloud + fSmoothCloud > 1) - { - std::ostringstream message; - message << "Must select at most one build type! Selections:" << G4endl - << " fFastAerosolCloud = " << fFastAerosolCloud << G4endl - << " fParameterisedCloud = " << fParameterisedCloud << G4endl - << " fSmoothCloud = " << fSmoothCloud << G4endl; - G4Exception("DetectorConstruction::Construct()", "GeomSolids0002", + // + // Check cloud build settings + // + if (fFastAerosolCloud + fParameterisedCloud + fSmoothCloud > 1) + { + std::ostringstream message; + message << "Must select at most one build type! Selections:" << G4endl + << " fFastAerosolCloud = " << fFastAerosolCloud << G4endl + << " fParameterisedCloud = " << fParameterisedCloud << G4endl + << " fSmoothCloud = " << fSmoothCloud << G4endl; + G4Exception("DetectorConstruction::Construct()", "GeomSolids0002", FatalException, message); } - - - // - // Get nist material manager - // - G4NistManager* nist = G4NistManager::Instance(); - - - // - // Option to switch on/off checking of volumes overlaps - // - G4bool checkOverlaps = false; - - - // - // Large scale geometry dimensions - // - G4double cloud_sizeXY = 0.5*m; - G4double cloud_sizeZ = 5.0*m; - - G4double world_sizeXY = 1.1*(cloud_sizeXY); - G4double world_sizeZ= 1.1*(cloud_sizeZ); - - - // - // Cloud shape - // - if (fCloudShapeStr == "box") - { - G4cout << "Cloud shape = box" << G4endl; - fCloudShape = new G4Box("cloudShape", 0.5*cloud_sizeXY, 0.5*cloud_sizeXY, 0.5*cloud_sizeZ); - } - else if (fCloudShapeStr == "ellipsoid") - { - G4cout << "Cloud shape = ellipsoid" << G4endl; - fCloudShape = new G4Ellipsoid("cloudShape", 0.5*cloud_sizeXY, 0.5*cloud_sizeXY, 0.5*cloud_sizeZ, 0, 0); - } - else if (fCloudShapeStr == "cylinder") - { - G4cout << "Cloud shape = cylinder" << G4endl; - fCloudShape = new G4Tubs("cloudShape", 0.0, 0.5*cloud_sizeXY, 0.5*cloud_sizeZ, 0, 360*deg); - } - else if (fCloudShapeStr == "pipe") - { - G4cout << "Cloud shape = pipe" << G4endl; - fCloudShape = new G4Tubs("cloudShape", 0.25*cloud_sizeXY, 0.5*cloud_sizeXY, 0.5*cloud_sizeZ, 0, 360.*deg); + // + // Get nist material manager + // + G4NistManager* nist = G4NistManager::Instance(); + // + // Option to switch on/off checking of volumes overlaps + // + G4bool checkOverlaps = false; + // + // Large scale geometry dimensions + // + G4double cloud_sizeXY = 0.5*m; + G4double cloud_sizeZ = 5.0*m; + + G4double world_sizeXY = 1.1*(cloud_sizeXY); + G4double world_sizeZ= 1.1*(cloud_sizeZ); + // + // Cloud shape + // + if (fCloudShapeStr == "box") + { + G4cout << "Cloud shape = box" << G4endl; + fCloudShape = new G4Box("cloudShape", 0.5*cloud_sizeXY, 0.5*cloud_sizeXY, 0.5*cloud_sizeZ); + } + else if (fCloudShapeStr == "ellipsoid") + { + G4cout << "Cloud shape = ellipsoid" << G4endl; + fCloudShape = new G4Ellipsoid("cloudShape", 0.5*cloud_sizeXY, 0.5*cloud_sizeXY, 0.5*cloud_sizeZ, 0, 0); + } + else if (fCloudShapeStr == "cylinder") + { + G4cout << "Cloud shape = cylinder" << G4endl; + fCloudShape = new G4Tubs("cloudShape", 0.0, 0.5*cloud_sizeXY, 0.5*cloud_sizeZ, 0, 360*deg); } - else - { - std::ostringstream message; - message << "Invalid cloud shape = " << fCloudShapeStr << "!"; - G4Exception("DetectorConstruction::Construct()", "GeomSolids0002", - FatalException, message); + else if (fCloudShapeStr == "pipe") + { + G4cout << "Cloud shape = pipe" << G4endl; + fCloudShape = new G4Tubs("cloudShape", 0.25*cloud_sizeXY, 0.5*cloud_sizeXY, 0.5*cloud_sizeZ, 0, 360.*deg); + } + else + { + std::ostringstream message; + message << "Invalid cloud shape = " << fCloudShapeStr << "!"; + G4Exception("DetectorConstruction::Construct()", "GeomSolids0002", + FatalException, message); } - // - // Droplet Shape - // - - // The difference in radii of the maximal sphere (centered at the origin) contained in the droplet and the minimal sphere (centered at the origin) containing the droplet - G4double sphericalUncertainty = 0.0; - - if (fDropletShapeStr == "sphere") - { - G4cout << "Droplet shape = sphere" << G4endl; - fDropletShape = new G4Orb("dropletSV", fDropletR); - sphericalUncertainty = 0.0; - } - else if (fDropletShapeStr == "halfSphere") - { - G4cout << "Droplet shape = halfSphere" << G4endl; - fDropletShape = new G4Sphere("dropletSV", 0.0, fDropletR, - 0.0, 180.*deg, - 0.0, 180.*deg); - sphericalUncertainty = fDropletR; - } - else if (fDropletShapeStr == "cylinder") - { - G4cout << "Droplet shape = cylinder" << G4endl; - fDropletShape = new G4Tubs("dropletSV", 0, fDropletR/std::sqrt(3), fDropletR/std::sqrt(3), 0, 360.*deg); - sphericalUncertainty = fDropletR*(1-1/std::sqrt(3)); - } - else if (fDropletShapeStr == "box") - { - G4cout << "Droplet shape = box" << G4endl; - fDropletShape = new G4Box("dropletSV", fDropletR/std::sqrt(3), fDropletR/std::sqrt(3), fDropletR/std::sqrt(3)); - sphericalUncertainty = fDropletR*(1-1/std::sqrt(3)); - } - else - { - std::ostringstream message; - message << "Invalid droplet shape = " << fCloudShapeStr << "!"; + // + // Droplet Shape + // + +// The difference in radii of the maximal sphere (centered at the origin) contained in the droplet and the minimal sphere (centered at the origin) containing the droplet + G4double sphericalUncertainty = 0.0; + if (fDropletShapeStr == "sphere") + { + G4cout << "Droplet shape = sphere" << G4endl; + fDropletShape = new G4Orb("dropletSV", fDropletR); + sphericalUncertainty = 0.0; + } + else if (fDropletShapeStr == "halfSphere") + { + G4cout << "Droplet shape = halfSphere" << G4endl; + fDropletShape = new G4Sphere("dropletSV", 0.0, fDropletR, 0.0, 180.*deg, 0.0, 180.*deg); + sphericalUncertainty = fDropletR; + } + else if (fDropletShapeStr == "cylinder") + { + G4cout << "Droplet shape = cylinder" << G4endl; + fDropletShape = new G4Tubs("dropletSV", 0, fDropletR/std::sqrt(3), fDropletR/std::sqrt(3), 0, 360.*deg); + sphericalUncertainty = fDropletR*(1-1/std::sqrt(3)); + } + else if (fDropletShapeStr == "box") + { + G4cout << "Droplet shape = box" << G4endl; + fDropletShape = new G4Box("dropletSV", fDropletR/std::sqrt(3), fDropletR/std::sqrt(3), fDropletR/std::sqrt(3)); + sphericalUncertainty = fDropletR*(1-1/std::sqrt(3)); + } + else + { + std::ostringstream message; + message << "Invalid droplet shape = " << fCloudShapeStr << "!"; G4Exception("DetectorConstruction::Construct()", "GeomSolids0002", FatalException, message); } - - // - // Materials - // - - // Compute the density of air at 14 km using the Barometric formula - // see, e.g., https://en.wikipedia.org/wiki/Density_of_air - G4double h = 14.0*km; - G4double p0 = 101325*hep_pascal; - G4double T0 = 288.15*kelvin; - G4double grav = 9.80665*m/(s*s); - G4double La = 0.0065*kelvin/m; - G4double R = 8.31447*joule/(mole*kelvin); - G4double M = 0.0289644*kg/mole; - G4double T = T0 - La*h; - G4double p = p0*std::pow(1-La*h/T0,grav*M/(R*La)); - G4double air_density = p*M/(R*T); - - // make materials and set densities - G4Material* air_mat = nist->BuildMaterialWithNewDensity("Atmosphere","G4_AIR",air_density); - G4Material* water_mat = nist->FindOrBuildMaterial("G4_WATER"); - - G4double water_density = water_mat->GetDensity(); - G4double ice_density = 0.9168*g/cm3; +// +// Materials +// +// Compute the density of air at 14 km using the Barometric formula +// see, e.g., https://en.wikipedia.org/wiki/Density_of_air +G4double h = 14.0*km; +G4double p0 = 101325*hep_pascal; +G4double T0 = 288.15*kelvin; +G4double grav = 9.80665*m/(s*s); +G4double La = 0.0065*kelvin/m; +G4double R = 8.31447*joule/(mole*kelvin); +G4double M = 0.0289644*kg/mole; +G4double T = T0 - La*h; +G4double p = p0*std::pow(1-La*h/T0,grav*M/(R*La)); +G4double air_density = p*M/(R*T); + +// make materials and set densities +G4Material* air_mat = nist->BuildMaterialWithNewDensity("Atmosphere","G4_AIR",air_density); +G4Material* water_mat = nist->FindOrBuildMaterial("G4_WATER"); + +G4double water_density = water_mat->GetDensity(); +G4double ice_density = 0.9168*g/cm3; - G4Material* ice_mat = new G4Material("Water ice ", ice_density, 1, kStateSolid, T, p); - ice_mat->AddMaterial(water_mat, 1.); +G4Material* ice_mat = new G4Material("Water ice ", ice_density, 1, kStateSolid, T, p); +ice_mat->AddMaterial(water_mat, 1.); +// +// Droplets +// +G4double droplet_density = water_density; +G4Material* droplet_mat = water_mat; - // - // Droplets - // - G4double droplet_density = water_density; - G4Material* droplet_mat = water_mat; - - G4double droplet_count = fDropletNumDens*(fCloudShape->GetCubicVolume()); +G4double droplet_count = fDropletNumDens*(fCloudShape->GetCubicVolume()); - G4double droplet_volume = fDropletShape->GetCubicVolume(); - G4double droplet_total_volume = droplet_count*droplet_volume; +G4double droplet_volume = fDropletShape->GetCubicVolume(); +G4double droplet_total_volume = droplet_count*droplet_volume; - G4double droplet_total_mass = droplet_total_volume*droplet_density; +G4double droplet_total_mass = droplet_total_volume*droplet_density; +// +// Cloud macroscopic quantities +// +G4double cloud_volume = fCloudShape->GetCubicVolume(); +G4double cloud_air_volume = cloud_volume - droplet_total_volume; +G4double cloud_air_mass = air_density*cloud_air_volume; - // - // Cloud macroscopic quantities - // - G4double cloud_volume = fCloudShape->GetCubicVolume(); - G4double cloud_air_volume = cloud_volume - droplet_total_volume; - G4double cloud_air_mass = air_density*cloud_air_volume; +// +// Step limit +// +fStepLimits = new G4UserLimits(fStepLim); +// +// Build world +// +G4Box* solidWorld =new G4Box("World",//its name + 0.5*world_sizeXY,//half x-span + 0.5*world_sizeXY,//half y-span + 0.5*world_sizeZ);//half z-span - // - // Step limit - // - fStepLimits = new G4UserLimits(fStepLim); +G4LogicalVolume* logicWorld = + new G4LogicalVolume(solidWorld, //its solid + air_mat, //its material + "World");//its name +logicWorld->SetUserLimits(fStepLimits); + +G4VPhysicalVolume* physWorld = new G4PVPlacement(nullptr,//no rotation + G4ThreeVector(),//at (0,0,0) + logicWorld,//its logical volume + "World",//its name +nullptr,//its mothervolume +false,//no boolean operation +0, //copy number +checkOverlaps); //overlaps checking - // - // Build world - // - G4Box* solidWorld = - new G4Box("World", //its name - 0.5*world_sizeXY, //half x-span - 0.5*world_sizeXY, //half y-span - 0.5*world_sizeZ); //half z-span +// +// Build cloud +// +G4LogicalVolume* logicCloud; - G4LogicalVolume* logicWorld = - new G4LogicalVolume(solidWorld, //its solid - air_mat, //its material - "World"); //its name +// ********************************************************** +// +// Build the cloud using the FastAerosol geometry class +// +// *********************************************************** - logicWorld->SetUserLimits(fStepLimits); - - G4VPhysicalVolume* physWorld = - new G4PVPlacement(0, //no rotation - G4ThreeVector(), //at (0,0,0) - logicWorld, //its logical volume - "World", //its name - 0, //its mothervolume - false, //no boolean operation - 0, //copy number - checkOverlaps); //overlaps checking - - - // - // Build cloud - // - G4LogicalVolume* logicCloud; - - // ********************************************************** - // - // Build the cloud using the FastAerosol geometry class - // - // *********************************************************** - if (fFastAerosolCloud) { - G4cout << "\nFastAerosol geometry with n=" << fDropletNumDens*mm3 << "/mm3, r=" << fDropletR/mm << "mm spheres.\n" << G4endl; - - fCloud = new FastAerosol("cloud", - fCloudShape, //cloud shape - fDropletR, //bounding radius of droplets - fMinSpacing, //minimum spacing between droplets - fDropletNumDens, //approximate number of droplets in cloud - sphericalUncertainty); //uncertainty in distance to droplet surface from outside using just droplet's origin as info - fCloud->SetDropletsPerVoxel(4); +if (fFastAerosolCloud) +{ +G4cout << "\nFastAerosol geometry with n=" << fDropletNumDens*mm3 << "/mm3, r=" << fDropletR/mm << "mm spheres.\n" << G4endl; - /* - fCloud = new FastAerosol("fCloud", - fCloudShape, //cloud shape - fDropletR, //bounding radius of droplets - fMinSpacing, //minimum spacing between droplets - fDropletNumDens, //approximate number of droplets in cloud - sphericalUncertainty, //uncertainty in distance to droplet surface from outside using just droplet's origin as info - [](G4ThreeVector pos) {return pos.x();}); //number density distribution function - */ - - FastAerosolSolid* solidCloud = - new FastAerosolSolid("cloudSV", //its name - fCloud, //its shape - fDropletShape); //its droplets - - /* - FastAerosolSolid* solidCloud = - new FastAerosolSolid("cloudSV", //its name - fCloud, //its shape - fDropletShape, //its droplets - [](G4ThreeVector) {G4RotationMatrix rotm = G4RotationMatrix(); rotm.rotateY(90.0*deg); return rotm;}); //droplet rotation function - */ - - solidCloud->SetStepLim(fStepLim); //FastAerosol can use step limit to speed calculations - - logicCloud = - new G4LogicalVolume(solidCloud, //its solid - droplet_mat, //its material - "cloudLV"); //its name - logicCloud->SetUserLimits(fStepLimits); - logicCloud->SetVisAttributes(G4VisAttributes(G4Colour(0.0,0.0,1.0,0.4))); - - new G4PVPlacement(0, //no rotation - G4ThreeVector(), //at position - logicCloud, //its logical volume - "cloudPV", //its name - logicWorld, //its mother volume - false, //no boolean operation - 0, //copy number - checkOverlaps); //overlaps checking - - - fCloud->SetSeed(fCloudSeed); - - // fPrePopulate = whether to populate all voxels at the beginning or on the fly - if (fPrePopulate) { - // populate (proving it to the user by printing population reports) - clock_t t; - t = clock(); - - G4cout << "\nBefore populating" << G4endl; - G4cout << "=================" << G4endl; - fCloud->PrintPopulationReport(); - G4cout << "\nPopulating..." << G4endl; - fCloud->PopulateAllGrids(); - G4cout << "\nAfter populating" << G4endl; - G4cout << "================" << G4endl; - fCloud->PrintPopulationReport(); - G4cout << G4endl; - - t = clock() - t; - - G4cout << "\nThis took " << ((float)t)/CLOCKS_PER_SEC << "s\n" << G4endl; - - // make filename variables to save data - G4String rStr = std::to_string(fDropletR/mm); - rStr.erase ( rStr.find_last_not_of('0') + 1, std::string::npos ); // drop trailing 0 - replace( rStr.begin(), rStr.end(), '.', 'p'); - if (rStr.back() == 'p') { rStr.pop_back(); } // don't write "3p" for 3.0, just write "3" - - // want to represent the number density as 1E-ApB for some A, B - G4int order10 = (G4int) -round(10*std::log10(fDropletNumDens*mm3)); // gives 10x the exponent rounded to the int (10x so we get two decimals) - G4int leading = order10 / 10; // first number - G4int trailing = order10 % 10; // second number - G4String nStr = "1E-" + std::to_string(leading) + "p" + std::to_string(trailing); - - - // save population time - std::ofstream file; - file.open("popTime_r" + rStr + "mm_n" + nStr + "mm-3.csv"); - file << ((float)t)/CLOCKS_PER_SEC; - file.close(); - - - - // save distribution - G4String fName = "distribution_r" + rStr + "mm_n" + nStr + "mm-3.csv"; - fCloud->SaveToFile(fName); - } - } - // ********************************************************** - // - // (For comparision/benchmarking) Build the cloud using G4VParameterized (does not use FastAerosol) - // - // *********************************************************** - - // the droplet positions for this cloud are those saved in the "distribution" folder of our data - // this is to make comparable simulations between FastAerosol and parameterised clouds - // this requires that we first simulate FastAerosol (pre-populated) to generate the positions +fCloud = new FastAerosol("cloud", fCloudShape,//cloud shape +fDropletR, //bounding radius of droplets + fMinSpacing,//minimum spacing between droplets + fDropletNumDens, //approximate number of droplets in cloud + sphericalUncertainty); //uncertainty in distance to droplet surface from outside using just droplet's origin as info +fCloud->SetDropletsPerVoxel(4); + +FastAerosolSolid* solidCloud = new FastAerosolSolid("cloudSV",//its name +fCloud, //its shape +fDropletShape); //its droplets + +solidCloud->SetStepLim(fStepLim); +//FastAerosol can use step limit to speed calculations + +logicCloud = new G4LogicalVolume(solidCloud,//its solid + droplet_mat,//its material + "cloudLV");//its name +logicCloud->SetUserLimits(fStepLimits); +logicCloud->SetVisAttributes(G4VisAttributes(G4Colour(0.0,0.0,1.0,0.4))); + +new G4PVPlacement(nullptr, G4ThreeVector(), logicCloud, "cloudPV", //its name +logicWorld,//its mother volume +false, //no boolean operation +0,//copy number +checkOverlaps);//overlaps checking + +fCloud->SetSeed(fCloudSeed); + +// fPrePopulate = whether to populate all voxels at the beginning or on the fly +if (fPrePopulate) +{ + // populate (proving it to the user by printing population reports) + clock_t t; + t = clock(); + + G4cout << "\nBefore populating" << G4endl; + G4cout << "=================" << G4endl; + fCloud->PrintPopulationReport(); + G4cout << "\nPopulating..." << G4endl; + fCloud->PopulateAllGrids(); + G4cout << "\nAfter populating" << G4endl; + G4cout << "================" << G4endl; + fCloud->PrintPopulationReport(); + G4cout << G4endl; + + t = clock() - t; + + G4cout << "\nThis took " << ((float)t)/CLOCKS_PER_SEC << "s\n" << G4endl; + + // make filename variables to save data + G4String rStr = std::to_string(fDropletR/mm); + rStr.erase ( rStr.find_last_not_of('0') + 1, std::string::npos ); // drop trailing 0 + replace( rStr.begin(), rStr.end(), '.', 'p'); + if (rStr.back() == 'p') { rStr.pop_back(); } // don't write "3p" for 3.0, just write "3" + + // want to represent the number density as 1E-ApB for some A, B +G4int order10 = (G4int) -round(10*std::log10(fDropletNumDens*mm3)); // gives 10x the exponent rounded to the int (10x so we get two decimals) +G4int leading = order10 / 10; // first number +G4int trailing = order10 % 10; // second number +G4String nStr = "1E-" + std::to_string(leading) + "p" + std::to_string(trailing); + +// save population time +std::ofstream file; +file.open("popTime_r" + rStr + "mm_n" + nStr + "mm-3.csv"); +file << ((float)t)/CLOCKS_PER_SEC; +file.close(); + +// save distribution +G4String fName = "distribution_r" + rStr + "mm_n" + nStr + "mm-3.csv"; +fCloud->SaveToFile(fName); + } +} +// ********************************************************** +// +// (For comparision/benchmarking) Build the cloud using G4VParameterized (does not use FastAerosol) +// +// *********************************************************** +// the droplet positions for this cloud are those saved in the "distribution" folder of our data +// this is to make comparable simulations between FastAerosol and parameterised clouds +// this requires that we first simulate FastAerosol (pre-populated) to generate the positions - else if (fParameterisedCloud) - { - G4cout << "\nParameterised geometry with n=" << fDropletNumDens*mm3 << "/mm3 and r=" << fDropletR/mm << "mm spheres.\n" << G4endl; +else if (fParameterisedCloud) + { + G4cout << "\nParameterised geometry with n=" << fDropletNumDens*mm3 << "/mm3 and r=" << fDropletR/mm << "mm spheres.\n" << G4endl; std::vector positions; G4double x,y,z; - // load distribution file - G4String fName; - - G4String rStr = std::to_string(fDropletR/mm); + // load distribution file + G4String fName; + G4String rStr = std::to_string(fDropletR/mm); rStr.erase ( rStr.find_last_not_of('0') + 1, std::string::npos ); // drop trailing 0 replace( rStr.begin(), rStr.end(), '.', 'p'); if (rStr.back() == 'p') { rStr.pop_back(); } // don't write "3p" for 3.0, just write "3" - // want to represent the number density as 1E-ApB for some A, B - G4int order10 = (G4int) -round(10*std::log10(fDropletNumDens*mm3)); // gives 10x the exponent rounded to the int (10x so we get two decimals) - G4int leading = order10 / 10; // first number - G4int trailing = order10 % 10; // second number - G4String nStr = "1E-" + std::to_string(leading) + "p" + std::to_string(trailing); + // want to represent the number density as 1E-ApB for some A, B + G4int order10 = (G4int) -round(10*std::log10(fDropletNumDens*mm3)); // gives 10x the exponent rounded to the int (10x so we get two decimals) + G4int leading = order10 / 10; // first number + G4int trailing = order10 % 10; // second number + G4String nStr = "1E-" + std::to_string(leading) + "p" + std::to_string(trailing); - fName = "distribution_r" + rStr + "mm_n" + nStr + "mm-3.csv"; - - std::ifstream infile(fName); - std::string line; + fName = "distribution_r" + rStr + "mm_n" + nStr + "mm-3.csv"; + std::ifstream infile(fName); + std::string line; - while (getline(infile,line)) { - std::istringstream stream(line); - std::string field; - - getline(stream,field,','); x = stod(field)*mm; - getline(stream,field,','); y = stod(field)*mm; - getline(stream,field,','); z = stod(field)*mm; - - positions.push_back(G4ThreeVector(x,y,z)); + while (getline(infile,line)) { + std::istringstream stream(line); + std::string field; + getline(stream,field,','); x = stod(field)*mm; + getline(stream,field,','); y = stod(field)*mm; + getline(stream,field,','); z = stod(field)*mm; + + positions.push_back(G4ThreeVector(x,y,z)); } - G4VPVParameterisation* cloudParam = + G4VPVParameterisation* cloudParam = new CloudParameterisation(positions); - G4Box* cloudBounding = - new G4Box("cloudBounding", //its name - 0.5*cloud_sizeXY, //half x-span - 0.5*cloud_sizeXY, //half y-span - 0.5*cloud_sizeZ); //half z-span - - logicCloud = - new G4LogicalVolume(cloudBounding, //its solid - air_mat, //its material - "cloudLV"); //its name - - logicCloud->SetSmartless(fSmartless); - logicCloud->SetUserLimits(fStepLimits); - logicCloud->SetVisAttributes(G4VisAttributes(false)); - - new G4PVPlacement(0, //no rotation - G4ThreeVector(), //at position - logicCloud, //its logical volume - "cloudPV", //its name - logicWorld, //its mothervolume - false, //no boolean operation - 0, //copy number - checkOverlaps); //overlaps checking - - G4LogicalVolume* logicDroplet = - new G4LogicalVolume(fDropletShape, //its solid - droplet_mat, //its material - "dropletLV"); //its name - - logicDroplet->SetUserLimits(fStepLimits); - - /*G4PVParameterised* paramDroplet =*/ - new G4PVParameterised("droplets", //its name - logicDroplet, //droplet logical volume - logicCloud, //mother logical volume - kUndefined, //droplets placed along this axis - positions.size(), //number of droplets - cloudParam); //the parametrisation - } - // ********************************************************** - // - // (For comparision/benchmarking) Simulate the cloud by smearing droplets out into a single solid (does not use FastAerosol) - // - // *********************************************************** - else if (fSmoothCloud) - { - G4cout << "\nSmooth geometry based on a cloud of n=" << fDropletNumDens*mm3 << "/mm3 and r=" << fDropletR/mm << "mm spheres.\n" << G4endl; - // build cloud by smearing the droplets uniformly across the cloud volume, for comparison/benchmarking purposes (does not use FastAerosol) - G4Material* cloud_mat = new G4Material("Cloud", (droplet_total_mass+cloud_air_mass)/cloud_volume, 2); - cloud_mat->AddMaterial(droplet_mat, droplet_total_mass/(cloud_air_mass+droplet_total_mass)); - cloud_mat->AddMaterial(air_mat, cloud_air_mass/(cloud_air_mass+droplet_total_mass)); + G4Box* cloudBounding = new G4Box("cloudBounding",//its name + 0.5*cloud_sizeXY,//half x-span + 0.5*cloud_sizeXY, //half y-span + 0.5*cloud_sizeZ); //half z-span + + logicCloud = new G4LogicalVolume(cloudBounding, //its solid + air_mat,//its material + "cloudLV");//its name + + logicCloud->SetSmartless(fSmartless); + logicCloud->SetUserLimits(fStepLimits); + logicCloud->SetVisAttributes(G4VisAttributes(false)); + + new G4PVPlacement(nullptr,//no rotation + G4ThreeVector(),//at position + logicCloud,//its logical volume + "cloudPV",//its name + logicWorld, //its mothervolume + false, //no boolean operation + 0,//copy number + checkOverlaps);//overlaps checking + + G4LogicalVolume* logicDroplet = + new G4LogicalVolume(fDropletShape,//its solid + droplet_mat,//its material + "dropletLV");//its name + + logicDroplet->SetUserLimits(fStepLimits); + + new G4PVParameterised("droplets",//its name + logicDroplet,//droplet logical volume + logicCloud,//mother logical volume + kUndefined,//droplets placed along this axis + positions.size(),//number of droplets + cloudParam);//the parametrisation + } +// ********************************************************** +// +// (For comparision/benchmarking) Simulate the cloud by smearing droplets out into a single solid (does not use FastAerosol) +// +// *********************************************************** +else if (fSmoothCloud) + { + G4cout << "\nSmooth geometry based on a cloud of n=" << fDropletNumDens*mm3 << "/mm3 and r=" << fDropletR/mm << "mm spheres.\n" << G4endl; +// build cloud by smearing the droplets uniformly across the cloud volume, for comparison/benchmarking purposes (does not use FastAerosol) +G4Material* cloud_mat = new G4Material("Cloud", (droplet_total_mass+cloud_air_mass)/cloud_volume, 2); + +cloud_mat->AddMaterial(droplet_mat, droplet_total_mass/(cloud_air_mass+droplet_total_mass)); + +cloud_mat->AddMaterial(air_mat, cloud_air_mass/(cloud_air_mass+droplet_total_mass)); - logicCloud = - new G4LogicalVolume(fCloudShape, //its solid - cloud_mat, //its material - "cloudLV"); //its name - logicCloud->SetUserLimits(fStepLimits); - logicCloud->SetVisAttributes(G4VisAttributes(G4Colour(0.0,0.0,1.0,0.4))); + logicCloud = new G4LogicalVolume(fCloudShape, //its solid + cloud_mat, //its material + "cloudLV"); //its name + + logicCloud->SetUserLimits(fStepLimits); + logicCloud->SetVisAttributes(G4VisAttributes(G4Colour(0.0,0.0,1.0,0.4))); - new G4PVPlacement(0, //no rotation - G4ThreeVector(), //at position - logicCloud, //its logical volume - "cloudPV", //its name - logicWorld, //its mothervolume - false, //no boolean operation - 0, //copy number - checkOverlaps); //overlaps checking - } - else - { - G4cout << "\nNo cloud.\n" << G4endl; - } - - // - // Build detector - // - G4double detector_sizeXY = cloud_sizeXY; - G4double detector_sizeZ = 0.05*m; - G4Material* detector_mat = nist->FindOrBuildMaterial("G4_Al"); - G4ThreeVector detector_pos = G4ThreeVector(0, 0, 0.5*1.05*cloud_sizeZ); - - G4Box* soldDetector = - new G4Box("detectorSV", //its name - 0.5*detector_sizeXY, //half x-span - 0.5*detector_sizeXY, //half y-span - 0.5*detector_sizeZ); //half z-span + new G4PVPlacement(nullptr, //no rotation + G4ThreeVector(), //at position + logicCloud,//its logical volume + "cloudPV", //its name + logicWorld, //its mothervolume + false, //no boolean operation + 0,//copy number + checkOverlaps); //overlaps checking + } + else + { + G4cout << "\nNo cloud.\n" << G4endl; + } + + // + // Build detector + // + G4double detector_sizeXY = cloud_sizeXY; + G4double detector_sizeZ = 0.05*m; + G4Material* detector_mat = nist->FindOrBuildMaterial("G4_Al"); + G4ThreeVector detector_pos = G4ThreeVector(0, 0, 0.5*1.05*cloud_sizeZ); + + G4Box* soldDetector = new G4Box("detectorSV", //its name + 0.5*detector_sizeXY, //half x-span + 0.5*detector_sizeXY, //half y-span + 0.5*detector_sizeZ); //half z-span - G4LogicalVolume* logicDetector = + G4LogicalVolume* logicDetector = new G4LogicalVolume(soldDetector, //its solid - detector_mat, //its material - "detectorLV"); //its name + detector_mat, //its material + "detectorLV"); //its name - logicDetector->SetUserLimits(fStepLimits); + logicDetector->SetUserLimits(fStepLimits); - new G4PVPlacement(0, //no rotation - detector_pos, //at position - logicDetector, //its logical volume - "detectorPV", //its name - logicWorld, //its mothervolume - false, //no boolean operation - 0, //copy number - checkOverlaps); //overlaps checking - - - // - // Scoring Volume - // - fScoringVolume = logicDetector; - - return physWorld; + new G4PVPlacement(nullptr,//no rotation + detector_pos, //at position + logicDetector, //its logical volume + "detectorPV", //its name + logicWorld, //its mothervolume + false, //no boolean operation + 0, //copy number + checkOverlaps); //overlaps checking +// +// Scoring Volume +// +fScoringVolume = logicDetector; + +return physWorld; } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/fastAerosol/src/FAEventAction.cc b/examples/advanced/fastAerosol/src/FAEventAction.cc index de00f2e95a7..25a5c389941 100644 --- a/examples/advanced/fastAerosol/src/FAEventAction.cc +++ b/examples/advanced/fastAerosol/src/FAEventAction.cc @@ -23,7 +23,6 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // - // (copied from B1EventAction) #include "FAEventAction.hh" @@ -32,21 +31,16 @@ #include "G4RunManager.hh" EventAction::EventAction(RunAction* runAction) -: G4UserEventAction(), - fRunAction(runAction), - fEdep(0.) -{} - -EventAction::~EventAction() +: G4UserEventAction(), fRunAction(runAction), fEdep(0.) {} void EventAction::BeginOfEventAction(const G4Event*) { - fEdep = 0.; + fEdep = 0.; } void EventAction::EndOfEventAction(const G4Event*) { - // accumulate statistics in run action - fRunAction->AddEdep(fEdep); + // accumulate statistics in run action + fRunAction->AddEdep(fEdep); } diff --git a/examples/advanced/fastAerosol/src/FAPrimaryGeneratorAction.cc b/examples/advanced/fastAerosol/src/FAPrimaryGeneratorAction.cc index c781e75187e..feebd4868fd 100644 --- a/examples/advanced/fastAerosol/src/FAPrimaryGeneratorAction.cc +++ b/examples/advanced/fastAerosol/src/FAPrimaryGeneratorAction.cc @@ -23,7 +23,6 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // - // (adapted from B1PrimaryGeneratorAction) // Author: A.Knaian (ara@nklabs.com), N.MacFadden (natemacfadden@gmail.com) @@ -39,61 +38,59 @@ #include "Randomize.hh" PrimaryGeneratorAction::PrimaryGeneratorAction() -: G4VUserPrimaryGeneratorAction(), - fParticleGun(0), - fWorldBox(0) +: G4VUserPrimaryGeneratorAction(), fParticleGun(nullptr), fWorldBox(nullptr) { - G4int n_particle = 1; - fParticleGun = new G4ParticleGun(n_particle); + G4int n_particle = 1; + fParticleGun = new G4ParticleGun(n_particle); - // default particle kinematic - G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable(); - G4String particleName; - G4ParticleDefinition* particle + // default particle kinematic + G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable(); + G4String particleName; + G4ParticleDefinition* particle = particleTable->FindParticle(particleName="proton"); - fParticleGun->SetParticleDefinition(particle); - fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0.,0.,1.)); - fParticleGun->SetParticleEnergy(50.*MeV); + fParticleGun->SetParticleDefinition(particle); + fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0.,0.,1.)); + fParticleGun->SetParticleEnergy(50.*MeV); } PrimaryGeneratorAction::~PrimaryGeneratorAction() { - delete fParticleGun; + delete fParticleGun; } void PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) { - G4double worldSizeXY = 0; - G4double worldSizeZ = 0; - - if (!fWorldBox) - { - G4LogicalVolume* worldLV - = G4LogicalVolumeStore::GetInstance()->GetVolume("World"); - if ( worldLV ) fWorldBox = dynamic_cast(worldLV->GetSolid()); - } + G4double worldSizeXY = 0; + G4double worldSizeZ = 0; - if ( fWorldBox ) { - worldSizeXY = fWorldBox->GetXHalfLength()*2.; - worldSizeZ = fWorldBox->GetZHalfLength()*2.; - } - else { - G4ExceptionDescription msg; - msg << "World volume of box shape not found.\n"; - msg << "Perhaps you have changed geometry.\n"; - msg << "The gun will be place at the center."; - G4Exception("PrimaryGeneratorAction::GeneratePrimaries()", + if (!fWorldBox) + { + G4LogicalVolume* worldLV + = G4LogicalVolumeStore::GetInstance()->GetVolume("World"); + if ( worldLV ) fWorldBox = dynamic_cast(worldLV->GetSolid()); + } + if ( fWorldBox ) + { + worldSizeXY = fWorldBox->GetXHalfLength()*2.; + worldSizeZ = fWorldBox->GetZHalfLength()*2.; + } + else + { + G4ExceptionDescription msg; + msg << "World volume of box shape not found.\n"; + msg << "Perhaps you have changed geometry.\n"; + msg << "The gun will be place at the center."; + G4Exception("PrimaryGeneratorAction::GeneratePrimaries()", "MyCode0002",JustWarning,msg); - } + } - // shoot on XY disk centered on Z-axis behind the cloud - G4double sigma = worldSizeXY/10.0; // spread in x and y - G4double x0 = G4RandGauss::shoot(0,sigma); - G4double y0 = G4RandGauss::shoot(0,sigma); - G4double z0 = 0.95 * (-0.5) * worldSizeZ; + // shoot on XY disk centered on Z-axis behind the cloud + G4double sigma = worldSizeXY/10.0; // spread in x and y + G4double x0 = G4RandGauss::shoot(0,sigma); + G4double y0 = G4RandGauss::shoot(0,sigma); + G4double z0 = 0.95 * (-0.5) * worldSizeZ; - fParticleGun->SetParticlePosition(G4ThreeVector(x0,y0,z0)); - - fParticleGun->GeneratePrimaryVertex(anEvent); + fParticleGun->SetParticlePosition(G4ThreeVector(x0,y0,z0)); + fParticleGun->GeneratePrimaryVertex(anEvent); } diff --git a/examples/advanced/fastAerosol/src/FARunAction.cc b/examples/advanced/fastAerosol/src/FARunAction.cc index d1cda5941d9..3bab171416f 100644 --- a/examples/advanced/fastAerosol/src/FARunAction.cc +++ b/examples/advanced/fastAerosol/src/FARunAction.cc @@ -61,18 +61,14 @@ RunAction::RunAction() accumulableManager->RegisterAccumulable(fEdep2); } -RunAction::~RunAction() -{} - void RunAction::BeginOfRunAction(const G4Run*) { - // inform the runManager to save random number seed - G4RunManager::GetRunManager()->SetRandomNumberStore(false); - - // reset accumulables to their initial values - G4AccumulableManager* accumulableManager = G4AccumulableManager::Instance(); - accumulableManager->Reset(); + // inform the runManager to save random number seed + G4RunManager::GetRunManager()->SetRandomNumberStore(false); + // reset accumulables to their initial values + G4AccumulableManager* accumulableManager = G4AccumulableManager::Instance(); + accumulableManager->Reset(); } void RunAction::EndOfRunAction(const G4Run* run) @@ -92,7 +88,7 @@ void RunAction::EndOfRunAction(const G4Run* run) G4double rms = edep2 - edep*edep/nofEvents; if (rms > 0.) rms = std::sqrt(rms); else rms = 0.; - const DetectorConstruction* detectorConstruction + const auto* detectorConstruction = static_cast (G4RunManager::GetRunManager()->GetUserDetectorConstruction()); G4double mass = detectorConstruction->GetScoringVolume()->GetMass(); @@ -102,7 +98,7 @@ void RunAction::EndOfRunAction(const G4Run* run) // Run conditions // note: There is no primary generator action object for "master" // run manager for multi-threaded mode. - const PrimaryGeneratorAction* generatorAction + const auto* generatorAction = static_cast (G4RunManager::GetRunManager()->GetUserPrimaryGeneratorAction()); G4String runCondition; diff --git a/examples/advanced/fastAerosol/src/FASteppingAction.cc b/examples/advanced/fastAerosol/src/FASteppingAction.cc index 137cecaf3b7..12c4103d274 100644 --- a/examples/advanced/fastAerosol/src/FASteppingAction.cc +++ b/examples/advanced/fastAerosol/src/FASteppingAction.cc @@ -38,16 +38,13 @@ SteppingAction::SteppingAction(EventAction* eventAction) : G4UserSteppingAction(), fEventAction(eventAction), - fScoringVolume(0) -{} - -SteppingAction::~SteppingAction() + fScoringVolume(nullptr) {} void SteppingAction::UserSteppingAction(const G4Step* step) { if (!fScoringVolume) { - const DetectorConstruction* detectorConstruction + const auto* detectorConstruction = static_cast (G4RunManager::GetRunManager()->GetUserDetectorConstruction()); fScoringVolume = detectorConstruction->GetScoringVolume(); diff --git a/examples/advanced/fastAerosol/src/FastAerosol.cc b/examples/advanced/fastAerosol/src/FastAerosol.cc index c5b11c8ad91..de7e8b084b3 100644 --- a/examples/advanced/fastAerosol/src/FastAerosol.cc +++ b/examples/advanced/fastAerosol/src/FastAerosol.cc @@ -41,8 +41,8 @@ #include "G4AutoLock.hh" namespace { - G4Mutex gridMutex = G4MUTEX_INITIALIZER; - G4Mutex sphereMutex = G4MUTEX_INITIALIZER; + G4Mutex gridMutex = G4MUTEX_INITIALIZER; + G4Mutex sphereMutex = G4MUTEX_INITIALIZER; } /////////////////////////////////////////////////////////////////////////////// @@ -51,34 +51,31 @@ namespace // - initialize grid // - cache values // -FastAerosol::FastAerosol(const G4String& pName, - G4VSolid* pCloud, - G4double pR, - G4double pMinD, - G4double pAvgNumDens, - G4double pdR, - std::function pDistribution) +FastAerosol::FastAerosol(const G4String& pName, G4VSolid* pCloud, + G4double pR, G4double pMinD, G4double pAvgNumDens, + G4double pdR, + std::function pDistribution) : fName(pName), fCloud(pCloud), fMinD(pMinD), fDistribution(pDistribution) { - kCarTolerance = G4GeometryTolerance::GetInstance()->GetSurfaceTolerance(); + kCarTolerance = G4GeometryTolerance::GetInstance()->GetSurfaceTolerance(); + // get and set bounding box dimensions + G4ThreeVector minBounding, maxBounding; + fCloud->BoundingLimits(minBounding, maxBounding); + G4ThreeVector halfSizeVec = 0.5*(maxBounding - minBounding); - // get and set bounding box dimensions - G4ThreeVector minBounding, maxBounding; - fCloud->BoundingLimits(minBounding, maxBounding); - G4ThreeVector halfSizeVec = 0.5*(maxBounding - minBounding); + G4double pX = halfSizeVec[0]; + G4double pY = halfSizeVec[1]; + G4double pZ = halfSizeVec[2]; - G4double pX = halfSizeVec[0]; - G4double pY = halfSizeVec[1]; - G4double pZ = halfSizeVec[2]; - - if (pX < 2*kCarTolerance || - pY < 2*kCarTolerance || - pZ < 2*kCarTolerance) // limit to thickness of surfaces + if (pX < 2*kCarTolerance || + pY < 2*kCarTolerance || + pZ < 2*kCarTolerance) // limit to thickness of surfaces { - std::ostringstream message; - message << "Dimensions too small for cloud: " << GetName() << "!" << G4endl - << " fDx, fDy, fDz = " << pX << ", " << pY << ", " << pZ; + std::ostringstream message; + message << "Dimensions too small for cloud: " + << GetName() << "!" << G4endl + << " fDx, fDy, fDz = " << pX << ", " << pY << ", " << pZ; G4Exception("FastAerosol::FastAerosol()", "GeomSolids0002", FatalException, message); } @@ -163,12 +160,7 @@ FastAerosol::FastAerosol(const G4String& pName, // // Same as standard constructor except with a uniform droplet distribution // -FastAerosol::FastAerosol(const G4String& pName, - G4VSolid* pCloud, - G4double pR, - G4double pMinD, - G4double pNumDens, - G4double pdR): +FastAerosol::FastAerosol(const G4String& pName, G4VSolid* pCloud, G4double pR, G4double pMinD, G4double pNumDens, G4double pdR): FastAerosol(pName, pCloud, pR, pMinD, pNumDens, pdR, [](G4ThreeVector) {return 1.0;}) {} @@ -180,22 +172,9 @@ FastAerosol::FastAerosol(const G4String& pName, // Same as standard constructor except with a uniform droplet distribution and // assuming no uncertainty in sphericality // -FastAerosol::FastAerosol(const G4String& pName, - G4VSolid* pCloud, - G4double pR, - G4double pMinD, - G4double pNumDens): - FastAerosol(pName, pCloud, pR, pMinD, pNumDens, 0.0, - [](G4ThreeVector) {return 1.0;}) +FastAerosol::FastAerosol(const G4String& pName, G4VSolid* pCloud, G4double pR, G4double pMinD, G4double pNumDens): FastAerosol(pName, pCloud, pR, pMinD, pNumDens, 0.0,[](G4ThreeVector) {return 1.0;}) {} -/////////////////////////////////////////////////////////////////////////////// -// -// Destructor -// -FastAerosol::~FastAerosol() { -} - /////////////////////////////////////////////////////////////////////////////// // // Initialize grid @@ -203,81 +182,86 @@ FastAerosol::~FastAerosol() { // Sets grids to initial values and calculates expected number of droplets // for each voxel // -void FastAerosol::InitializeGrid() { - // set pitch so, on average, fDropletsPerVoxel droplets are in each voxel - fGridPitch = std::pow(fDropletsPerVoxel/fAvgNumDens,1.0/3.0); - - // if a voxel has center farther than this distance from the bulk outside, - // we know it is fully contained in the bulk - fEdgeDistance = fGridPitch*std::sqrt(3.0)/2.0 + fR; - - // set number of grid cells - fNx = (G4int)ceill(2*fDx / fGridPitch); - fNy = (G4int)ceill(2*fDy / fGridPitch); - fNz = (G4int)ceill(2*fDz / fGridPitch); - fNumGridCells = (long) fNx*fNy*fNz; - fNxy = fNx*fNy; - - // try... catch... because vectors can only be so long - // thus you can't set grid too fine - try - { - std::vector emptyVoxel{}; - fGrid.resize(fNumGridCells, emptyVoxel); - fGridMean.resize(fNumGridCells, 0); - fGridValid = new std::atomic[fNumGridCells]; - } - catch ( const std::bad_alloc&) - { - std::ostringstream message; - message << "Out of memory! Grid pitch too small for cloud: " << GetName() << "!" << G4endl - << " Asked for fNumGridCells = " << fNumGridCells << G4endl - << " each with element of size " << sizeof(std::vector) << G4endl - << " each with element of size " << sizeof(bool) << G4endl - << " but the max size is " << fGrid.max_size() << "!"; - G4Exception("FastAerosol::FastAerosol()", "GeomSolids0002", - FatalErrorInArgument, message); - } +void FastAerosol::InitializeGrid() +{ + // set pitch so, on average, fDropletsPerVoxel droplets are in each voxel + fGridPitch = std::pow(fDropletsPerVoxel/fAvgNumDens,1.0/3.0); + + // if a voxel has center farther than this distance from the bulk outside, + // we know it is fully contained in the bulk + fEdgeDistance = fGridPitch*std::sqrt(3.0)/2.0 + fR; + + // set number of grid cells + fNx = (G4int)ceill(2*fDx / fGridPitch); + fNy = (G4int)ceill(2*fDy / fGridPitch); + fNz = (G4int)ceill(2*fDz / fGridPitch); + fNumGridCells = (long) fNx*fNy*fNz; + fNxy = fNx*fNy; + + // try... catch... because vectors can only be so long + // thus you can't set grid too fine + try + { + std::vector emptyVoxel{}; + fGrid.resize(fNumGridCells, emptyVoxel); + fGridMean.resize(fNumGridCells, 0); + fGridValid = new std::atomic[fNumGridCells]; + } + catch ( const std::bad_alloc&) + { + std::ostringstream message; + message << "Out of memory! Grid pitch too small for cloud: " + << GetName() << "!" << G4endl + << " Asked for fNumGridCells = " + << fNumGridCells << G4endl + << " each with element of size " + << sizeof(std::vector) << G4endl + << " each with element of size " << sizeof(bool) + << G4endl + << " but the max size is " << fGrid.max_size() << "!"; + G4Exception("FastAerosol::FastAerosol()", "GeomSolids0002", + FatalErrorInArgument, message); } - // initialize grid cache - G4ThreeVector voxelCenter; - G4bool valid; - - for (int i=0; iInside(voxelCenter) != kInside && fCloud->DistanceToIn(voxelCenter) >= fEdgeDistance); + + if (valid) // will not populate the voxel + { + // have to store 'valid' in this way so that the value is atomic and respects multithreadedness + fGridValid[i].store(true, std::memory_order_release); + } + else // might need to populate the voxel + { + fGridValid[i].store(false, std::memory_order_release); + + // find the overlap of the voxel with the bulk + G4double volScaling=1.0; + G4bool edgeVoxel = ( kInside != fCloud->Inside(voxelCenter) || fCloud->DistanceToOut(voxelCenter) < fEdgeDistance ); + if (edgeVoxel) { - voxelCenter = fGridPitch*(GetIndexCoord(i)+G4ThreeVector(0.5,0.5,0.5)); // center of grid at index i with assuming minimum voxel is at [0,fGridPitch]x[0,fGridPitch]x[0,fGridPitch] - voxelCenter -= G4ThreeVector(fDx,fDy,fDz); // shift all voxels so that aerosol center is properly at the origin - - // whether or not the grid is 'finished' - // fGridValid[i] is true if we don't plan on populating more droplets in the voxel - // false if otherwise - valid = (fCloud->Inside(voxelCenter) != kInside && fCloud->DistanceToIn(voxelCenter) >= fEdgeDistance); - - if (valid) // will not populate the voxel - { - // have to store 'valid' in this way so that the value is atomic and respects multithreadedness - fGridValid[i].store(true, std::memory_order_release); - } - else // might need to populate the voxel - { - fGridValid[i].store(false, std::memory_order_release); - - // find the overlap of the voxel with the bulk - G4double volScaling=1.0; - G4bool edgeVoxel = ( kInside != fCloud->Inside(voxelCenter) || fCloud->DistanceToOut(voxelCenter) < fEdgeDistance ); - if (edgeVoxel) - { - volScaling = VoxelOverlap(voxelCenter, 100, 0.0); + volScaling = VoxelOverlap(voxelCenter, 100, 0.0); } - - // calculates number of droplets based off of voxel center - not ideal - fGridMean[i] = std::max(0.0, volScaling*fDistribution(voxelCenter)); + // calculates number of droplets based off of voxel center - not ideal + fGridMean[i] = std::max(0.0, volScaling*fDistribution(voxelCenter)); } } - // must scale fGridMean[i] so that the desired number densities are actualy achieved - // this is because no restrictions are applied to fDistribution - G4double tempScaling = (fCloud->GetCubicVolume())*fAvgNumDens/accumulate(fGridMean.begin(), fGridMean.end(), 0.0); +// must scale fGridMean[i] so that the desired number densities are actualy achieved +// this is because no restrictions are applied to fDistribution +G4double tempScaling = (fCloud->GetCubicVolume())*fAvgNumDens/accumulate(fGridMean.begin(), fGridMean.end(), 0.0); for (int i=0; i 0.01) epsilon = 0.01; - - for(G4int i = 0; i < nStat; i++ ) - { - px = cenX+(fGridPitch-epsilon)*(G4UniformRand()-0.5); - py = cenY+(fGridPitch-epsilon)*(G4UniformRand()-0.5); - pz = cenZ+(fGridPitch-epsilon)*(G4UniformRand()-0.5); - p = G4ThreeVector(px,py,pz); - in = (fCloud->Inside(p) == kInside) && (fCloud->DistanceToOut(p) >= fR); - if(in) iInside++; - } - - return (double)iInside/nStat; + G4int iInside=0; + G4double px,py,pz; + G4ThreeVector p; + G4bool in; + + if(nStat < 100) nStat = 100; + if(epsilon > 0.01) epsilon = 0.01; + + for(G4int i = 0; i < nStat; i++ ) + { + px = cenX+(fGridPitch-epsilon)*(G4UniformRand()-0.5); + py = cenY+(fGridPitch-epsilon)*(G4UniformRand()-0.5); + pz = cenZ+(fGridPitch-epsilon)*(G4UniformRand()-0.5); + p = G4ThreeVector(px,py,pz); + in = (fCloud->Inside(p) == kInside) && (fCloud->DistanceToOut(p) >= fR); + if(in) iInside++; + } + + return (double)iInside/nStat; } - /////////////////////////////////////////////////////////////////////////////// // // Populate all voxels // // Allows for partially populated clouds. // -void FastAerosol::PopulateAllGrids() { - unsigned int gi; +void FastAerosol::PopulateAllGrids() +{ + unsigned int gi; - for (int xi=0; xiInside(voxelCenter) || fCloud->DistanceToOut(voxelCenter) < fEdgeDistance ); + if (!tmpValid) // if true then either outside the bulk or in a voxel that is already populated + { + G4AutoLock lockGrid(&gridMutex); + // Check again now that we have the lock - in case grid became valid after first check and before lock + tmpValid = fGridValid[gi].load(std::memory_order_acquire); + + if (!tmpValid) + { +// uniquely set the seed to randomly place droplets +// changing global seed gaurantees a totally new batch of seeds + fCloudEngine.setSeed((long)gi + (long)fNumGridCells*(long)fSeed); + +// find if the voxel is near the bulk edge. In that case, we need to check whether a placed droplet is inside the bulk +// if not an edge voxel, we can place droplets by only considering interference between with other droplets + G4ThreeVector voxelCenter = fGridPitch*G4ThreeVector(xi+0.5,yi+0.5,zi+0.5)-G4ThreeVector(fDx,fDy,fDz); + G4bool edgeVoxel = ( kInside != fCloud->Inside(voxelCenter) || fCloud->DistanceToOut(voxelCenter) < fEdgeDistance ); - // number of droplets to place - unsigned int numDropletsToPlace = CLHEP::RandPoisson::shoot(&fCloudEngine, fGridMean[gi]); - - // actually add the points - G4ThreeVector point; - - while (numDropletsToPlace > 0) - { - // find a new point not overlapping with the others - if (FindNewPoint(edgeVoxel, fGridPitch, fGridPitch, fGridPitch, (G4double)xi*fGridPitch-fDx, (G4double)yi*fGridPitch-fDy, (G4double)zi*fGridPitch-fDz, point) ) - { - fGrid[gi].push_back(point); - fNumDroplets++; - } - - - numDropletsToPlace--; - } - - // Memory fence to ensure sequential consistency, - // because fGridValid is read without a lock - // Voxel data update must be complete before updating fGridValid + // number of droplets to place + unsigned int numDropletsToPlace = CLHEP::RandPoisson::shoot(&fCloudEngine, fGridMean[gi]); + + // actually add the points + G4ThreeVector point; + + while (numDropletsToPlace > 0) + { + // find a new point not overlapping with the others + if (FindNewPoint(edgeVoxel, fGridPitch, fGridPitch, fGridPitch, (G4double)xi*fGridPitch-fDx, (G4double)yi*fGridPitch-fDy, (G4double)zi*fGridPitch-fDz, point) ) + { + fGrid[gi].push_back(point); + fNumDroplets++; + } + numDropletsToPlace--; + } + +// Memory fence to ensure sequential consistency, +// because fGridValid is read without a lock +// Voxel data update must be complete before updating fGridValid std::atomic_thread_fence(std::memory_order_release); - fGridValid[gi].store(true, std::memory_order_release); // set the grid as populated - } +fGridValid[gi].store(true, std::memory_order_release); // set the grid as populated + } - lockGrid.unlock(); - } +lockGrid.unlock(); + } } - /////////////////////////////////////////////////////////////////////////////// // // Find a new droplet position in a box of full (not half) widths dX, dY, and dZ @@ -430,42 +413,49 @@ void FastAerosol::PopulateGrid(unsigned int xi, unsigned int yi, unsigned int zi // // 2) add -fDx to change range into [-fDx, fDx] // -G4bool FastAerosol::FindNewPoint(G4bool edgeVoxel, G4double dX, G4double dY, G4double dZ, G4double minX, G4double minY, G4double minZ, G4ThreeVector &foundPt) { - G4int tries = 0; // counter of tries. Give up after fNumNewPointTries (you likely asked for too dense in this case) - - G4double x, y, z; +G4bool FastAerosol::FindNewPoint(G4bool edgeVoxel, G4double dX, G4double dY, G4double dZ, G4double minX, G4double minY, G4double minZ, G4ThreeVector &foundPt) + { + G4int tries = 0; + // counter of tries. Give up after fNumNewPointTries (you likely asked for too dense in this case) - G4ThreeVector point; - G4bool placedOutside = false; // variable whether or not the point was placed outside. Used for edgeVoxel checking + G4double x, y, z; - // Generate a droplet and check if it overlaps with existing droplets - do { - tries++; - - if (tries > fNumNewPointTries) // skip if we tried more than fNumNewPointTries - { - fNumDropped++; - if (fNumDropped < fMaxDropCount) // return error if we skipped more than fMaxDropCount droplets - { - return false; - } + G4ThreeVector point; + G4bool placedOutside = false; + // variable whether or not the point was placed outside. Used for edgeVoxel checking - std::ostringstream message; - message << "Threw out too many droplets for cloud: " << GetName() << G4endl - << " Tried to place individual droplest " << fNumNewPointTries << " times." << G4endl - << " This failed for " << fMaxDropCount << " droplets."; - G4Exception("FastAerosol::FindNewPoint()", "GeomSolids0002", - FatalErrorInArgument, message); + // Generate a droplet and check if it overlaps with existing droplets + do { + tries++; + if (tries > fNumNewPointTries) + // skip if we tried more than fNumNewPointTries + { + fNumDropped++; + if (fNumDropped < fMaxDropCount) + // return error if we skipped more than fMaxDropCount droplets + { + return false; + } + + std::ostringstream message; + message << "Threw out too many droplets for cloud: " + << GetName() << G4endl + << " Tried to place individual droplest " + << fNumNewPointTries << " times." << G4endl + << " This failed for " << fMaxDropCount + << " droplets."; + G4Exception("FastAerosol::FindNewPoint()", "GeomSolids0002", + FatalErrorInArgument, message); } - x = minX + CLHEP::RandFlat::shoot(&fCloudEngine)*dX; - y = minY + CLHEP::RandFlat::shoot(&fCloudEngine)*dY; - z = minZ + CLHEP::RandFlat::shoot(&fCloudEngine)*dZ; + x = minX + CLHEP::RandFlat::shoot(&fCloudEngine)*dX; + y = minY + CLHEP::RandFlat::shoot(&fCloudEngine)*dY; + z = minZ + CLHEP::RandFlat::shoot(&fCloudEngine)*dZ; - if (edgeVoxel) - { - point = G4ThreeVector(x,y,z); - placedOutside = (fCloud->Inside(point) != kInside) || (fCloud->DistanceToOut(point) < fR); + if (edgeVoxel) + { + point = G4ThreeVector(x,y,z); + placedOutside = (fCloud->Inside(point) != kInside) || (fCloud->DistanceToOut(point) < fR); } } while (CheckCollision(x,y,z) || placedOutside); @@ -488,75 +478,70 @@ G4bool FastAerosol::FindNewPoint(G4bool edgeVoxel, G4double dX, G4double dY, G4d // bool FastAerosol::GetNearestDroplet(const G4ThreeVector &p, G4ThreeVector ¢er, G4double &minRealDistance, G4double maxSearch, G4VSolid* droplet, std::function rotation) { - G4double cloudDistance = fCloud->DistanceToIn(p); + G4double cloudDistance = fCloud->DistanceToIn(p); - // starting radius/diam of voxel layer - G4int searchRad = (G4int)floor(0.5+cloudDistance/fGridPitch); // no reason to search shells totally outside cloud + // starting radius/diam of voxel layer + G4int searchRad = (G4int)floor(0.5+cloudDistance/fGridPitch); // no reason to search shells totally outside cloud - // find the voxel containing p - int xGrid, yGrid, zGrid; - GetGrid(p, xGrid, yGrid, zGrid); // it is OK if the starting point is outside the volume + // find the voxel containing p + int xGrid, yGrid, zGrid; + GetGrid(p, xGrid, yGrid, zGrid); + // it is OK if the starting point is outside the volume - // initialize the containers for all candidate closest droplets and their respective distances - std::vector candidates; - std::vector distances; + // initialize the containers for all candidate closest droplets and their respective distances + std::vector candidates; + std::vector distances; + // initialize distances to indicate that no droplet has yet been found + G4double minDistance = kInfinity; + G4double maxCheckDistance = kInfinity; - // initialize distances to indicate that no droplet has yet been found - G4double minDistance = kInfinity; - G4double maxCheckDistance = kInfinity; + bool unsafe = true; - bool unsafe = true; - - - while (unsafe) - { - // limit maximum search radius - if (searchRad*fGridPitch > maxSearch+fGridPitch) { return false; } + while (unsafe) + { + // limit maximum search radius + if (searchRad*fGridPitch > maxSearch+fGridPitch) { return false; } - SearchSphere(searchRad, minDistance, candidates, distances, xGrid, yGrid, zGrid, p); - maxCheckDistance = minDistance+fdR; + SearchSphere(searchRad, minDistance, candidates, distances, xGrid, yGrid, zGrid, p); + maxCheckDistance = minDistance+fdR; - // theory says that, to safely have searched for centers up to some maxCheckDistance, we must search voxelized spheres at least up to ceil(0.25+maxCheckDistance/fGridPitch) + // theory says that, to safely have searched for centers up to some maxCheckDistance, we must search voxelized spheres at least up to ceil(0.25+maxCheckDistance/fGridPitch) // *** unsure if fully accurate. Calculations for 2D, not 3D... *** - unsafe = searchRad < std::ceil(0.25+maxCheckDistance/fGridPitch); - - searchRad++; - } - - - // delete any collected droplets that are too far out. Check all candidates to see what is closest - unsigned int index = 0; - - G4ThreeVector tempCenter; - G4double tempDistance; - - minRealDistance = kInfinity; - - - while (index < distances.size()) - { - - if (distances[index]>maxCheckDistance) - { - candidates.erase(candidates.begin()+index); - distances.erase(distances.begin()+index); - } - else - { - tempCenter = candidates[index]; - tempDistance = droplet->DistanceToIn( rotation(tempCenter).inverse()*(p - tempCenter) ); - - if (tempDistance < minRealDistance) - { - minRealDistance = tempDistance; - center = tempCenter; - } - - index++; // move onto next droplet - } - } - - return true; + unsafe = searchRad < std::ceil(0.25+maxCheckDistance/fGridPitch); + + searchRad++; + } + +// delete any collected droplets that are too far out. Check all candidates to see what is closest + unsigned int index = 0; + + G4ThreeVector tempCenter; + G4double tempDistance; + + minRealDistance = kInfinity; + + while (index < distances.size()) + { + if (distances[index]>maxCheckDistance) + { + candidates.erase(candidates.begin()+index); + distances.erase(distances.begin()+index); + } + else + { + tempCenter = candidates[index]; + tempDistance = droplet->DistanceToIn( rotation(tempCenter).inverse()*(p - tempCenter) ); + + if (tempDistance < minRealDistance) + { + minRealDistance = tempDistance; + center = tempCenter; + } + index++; // move onto next droplet + } + } + + return true; } /////////////////////////////////////////////////////////////////////////////// @@ -570,59 +555,58 @@ bool FastAerosol::GetNearestDroplet(const G4ThreeVector &p, G4ThreeVector ¢e // void FastAerosol::SearchSphere(G4int searchRad, G4double &minDistance, std::vector &candidates, std::vector &distances, G4int xGrid, G4int yGrid, G4int zGrid, const G4ThreeVector &p) { - // search variables - G4int xSearch, ySearch, zSearch; // x, y, and z coordinates of the currently searching voxel in the shell - - // voxel layer variables - fSphereType shell; // the shell that we are searching for droplets - - // we pre-calculate spheres up to radius fPreSphereR to speed up calculations - // any sphere smaller than that does not need to use locks - if (searchRad > fPreSphereR) + // search variables + G4int xSearch, ySearch, zSearch; + // x, y, and z coordinates of the currently searching voxel + // in the shell voxel layer variables + fSphereType shell; // the shell that we are searching for droplets + +// we pre-calculate spheres up to radius fPreSphereR to speed up calculations +// any sphere smaller than that does not need to use locks +if (searchRad > fPreSphereR) + { + // need to consider making a sphere + G4AutoLock lockSphere(&sphereMutex); + if (searchRad > fMaxSphereR) + { + // actually need to make a sphere + shell = MakeSphere(searchRad); + } +else + { + // we have previously made a sphere large enough + shell = fSphereCollection[searchRad]; + } + lockSphere.unlock(); + } + else + { + shell = fSphereCollection[searchRad]; + } + + // search spherical voxel layer + for (int i=0; i<(2*searchRad+1); i++) + { + xSearch = xGrid+i-searchRad; + if (0<=xSearch && xSearch fMaxSphereR) { - // actually need to make a sphere - shell = MakeSphere(searchRad); - } - else - { - // we have previously made a sphere large enough - shell = fSphereCollection[searchRad]; - } - - lockSphere.unlock(); + if (0<=zSearch && zSearch>> FastAerosol::MakeSphere(G4int R) { - // inductively make smaller spheres since fSphereCollection organizes by index - if (fMaxSphereR<(R-1)) { - MakeSphere(R-1); - } +// inductively make smaller spheres since fSphereCollection organizes by index +if (fMaxSphereR<(R-1)) { MakeSphere(R-1);} - std::vector z; // z-coordinates of voxels in (x,y) of sphere - std::vector> y(2*R+1, z); // plane YZ of sphere - fSphereType x(2*R+1, y); // entire sphere +std::vector z; +// z-coordinates of voxels in (x,y) of sphere - x[R][R].push_back(R); // add (0,0,R) - x[R][R].push_back(-R); // add (0,0,-R) +std::vector> y(2*R+1, z); +// plane YZ of sphere - fCircleType zr = MakeHalfCircle(R); // break sphere into a collection of circles centered at (0,0,z) for different -R<=z<=R +fSphereType x(2*R+1, y); // entire sphere - for (auto it1 = zr.begin(); it1 != zr.end(); ++it1) { - std::vector pt1 = *it1; - fCircleType circ = MakeCircle(pt1[1]); // make the circle +x[R][R].push_back(R);// add (0,0,R) +x[R][R].push_back(-R);// add (0,0,-R) +fCircleType zr = MakeHalfCircle(R); +// break sphere into a collection of circles centered at (0,0,z) for different -R<=z<=R - for (auto it2 = circ.begin(); it2 != circ.end(); ++it2) { - std::vector pt2 = *it2; - x[pt2[0]+R][pt2[1]+R].push_back(pt1[0]); - } - } +for (auto it1 = zr.begin(); it1 != zr.end(); ++it1) +{ + std::vector pt1 = *it1; + fCircleType circ = MakeCircle(pt1[1]); // make the circle + + for (auto it2 = circ.begin(); it2 != circ.end(); ++it2) + { + std::vector pt2 = *it2; + x[pt2[0]+R][pt2[1]+R].push_back(pt1[0]); + } +} - fSphereCollection.push_back(x); - fMaxSphereR = R; - return x; + fSphereCollection.push_back(x); + fMaxSphereR = R; + return x; } /////////////////////////////////////////////////////////////////////////////// @@ -676,28 +664,28 @@ std::vector>> FastAerosol::MakeSphere(G4int R) { // a half-circle, adding the points (R,0) and (0,R), and reflecting the half- // circle along the x-axis. // -std::vector> FastAerosol::MakeCircle(G4int R) { - // inductively make smaller circles since fCircleCollection organizes by index - if (fMaxCircleR pt = *it; - voxels.push_back(pt); - voxels.push_back({-pt[0], -pt[1]}); - } - - fCircleCollection.push_back(voxels); - fMaxCircleR++; - } +std::vector> FastAerosol::MakeCircle(G4int R) +{ +// inductively make smaller circles since fCircleCollection organizes by index + if (fMaxCircleR pt = *it; + voxels.push_back(pt); + voxels.push_back({-pt[0], -pt[1]}); + } + fCircleCollection.push_back(voxels); + fMaxCircleR++; + } - return fCircleCollection[R]; + return fCircleCollection[R]; } /////////////////////////////////////////////////////////////////////////////// @@ -710,73 +698,80 @@ std::vector> FastAerosol::MakeCircle(G4int R) { // voxelized marching spheres," Journal of Computational Physics, Vol. 241, // May 2013, pp. 76-94, https://doi.org/10.1016/j.jcp.2013.01.035 // -std::vector> FastAerosol::MakeHalfCircle(G4int R) { - // makes an octant of a voxelized circle in the 1st quadrant starting at y-axis - fCircleType voxels = {{0, R}}; // hard code inclusion of (0,R) - int x = 1; - int y = R; - - int dx = 4-R; // measure of whether (x+1,y) will be outside the sphere - int dxup = 1; // measure of whether (x+1,y+1) will be outside the sphere - while (xupper half plane - voxels.push_back({ x, y}); - voxels.push_back({ y, x}); - voxels.push_back({-x, y}); - voxels.push_back({-y, x}); - - // if next point outside the sphere, de-increment y - if (dx>0) { - // if dxup<=0, the layer above just moves to the right - // this would create a hole at (x+1,y) unless we add it - dxup = dx + 2*y -2*R-1; - if ((dxup<=0) && (x+1> FastAerosol::MakeHalfCircle(G4int R) + { +// makes an octant of a voxelized circle in the 1st quadrant starting at y-axis + fCircleType voxels = {{0, R}}; // hard code inclusion of (0,R) + int x = 1; + int y = R; + int dx = 4-R; + // measure of whether (x+1,y) will be outside the sphere + int dxup = 1; + // measure of whether (x+1,y+1) will be outside the sphere + while (xupper half plane + voxels.push_back({ x, y}); + voxels.push_back({ y, x}); + voxels.push_back({-x, y}); + voxels.push_back({-y, x}); + // if next point outside the sphere, de-increment y + if (dx>0) + { + // if dxup<=0, the layer above just moves to the right + // this would create a hole at (x+1,y) unless we add it + dxup = dx + 2*y -2*R-1; + if ((dxup<=0) && (x+1 &candidates, std::vector &distances, unsigned int xGrid, unsigned int yGrid, unsigned int zGrid, const G4ThreeVector &p) { - unsigned int gi; - PopulateGrid(xGrid, yGrid, zGrid, gi); +void FastAerosol::GetNearestDropletInsideGrid(G4double &minDistance, std::vector &candidates, std::vector &distances, unsigned int xGrid, unsigned int yGrid, unsigned int zGrid, const G4ThreeVector &p) +{ + unsigned int gi; + PopulateGrid(xGrid, yGrid, zGrid, gi); - // initialize values - G4double foundDistance; + // initialize values + G4double foundDistance; // std::vector::iterator bestPt; - // find closest droplet - for (auto it = fGrid[gi].begin(); it != fGrid[gi].end(); ++it) { - foundDistance = std::sqrt((p-*it).mag2()); - - if (foundDistance < minDistance+fdR) { - minDistance = std::min(minDistance, foundDistance); - - candidates.push_back(*it); - distances.push_back(foundDistance); - } + // find closest droplet + for (auto it = fGrid[gi].begin(); it != fGrid[gi].end(); ++it) + { + foundDistance = std::sqrt((p-*it).mag2()); + + if (foundDistance < minDistance+fdR) + { + minDistance = std::min(minDistance, foundDistance); + candidates.push_back(*it); + distances.push_back(foundDistance); } + } } /////////////////////////////////////////////////////////////////////////////// @@ -802,168 +797,139 @@ void FastAerosol::GetNearestDropletInsideGrid(G4double &minDistance, std::vector // bool FastAerosol::GetNearestDroplet(const G4ThreeVector &p, const G4ThreeVector &normalizedV, G4ThreeVector ¢er, G4double &minDistance, G4double maxSearch, G4VSolid* droplet, std::function rotation) { - // get the grid box this initial position is inside - int xGrid, yGrid, zGrid; - GetGrid(p, xGrid, yGrid, zGrid); - - // initialize some values - G4ThreeVector currentP = p; - G4double distanceAlongVector = 0.0; - G4double deltaDistanceAlongVector; - - int newXGrid = 0; int newYGrid = 0; int newZGrid = 0; - int deltaX = 0; int deltaY = 0; int deltaZ = 0; - int edgeX = 0 ; int edgeY = 0; int edgeZ = 0; - G4bool boxSearch = true; + // get the grid box this initial position is inside + int xGrid, yGrid, zGrid; + GetGrid(p, xGrid, yGrid, zGrid); + + // initialize some values + G4ThreeVector currentP = p; + G4double distanceAlongVector = 0.0; + G4double deltaDistanceAlongVector; + + int newXGrid = 0; int newYGrid = 0; int newZGrid = 0; + int deltaX = 0; int deltaY = 0; int deltaZ = 0; + int edgeX = 0 ; int edgeY = 0; int edgeZ = 0; + G4bool boxSearch = true; - G4double distanceToCloud; + G4double distanceToCloud; - minDistance = kInfinity; - - // actual search - while(true) { - deltaDistanceAlongVector = 0.0; - - // Jump gaps - distanceToCloud = DistanceToCloud(currentP,normalizedV); - if (distanceToCloud == kInfinity) - { - return(minDistance != kInfinity); - } - else if (distanceToCloud > fGridPitch) + minDistance = kInfinity; + + // actual search + while(true) + { + deltaDistanceAlongVector = 0.0; + // Jump gaps + distanceToCloud = DistanceToCloud(currentP,normalizedV); + if (distanceToCloud == kInfinity) + {return(minDistance != kInfinity);} + else if (distanceToCloud > fGridPitch) { - deltaDistanceAlongVector = distanceToCloud-fGridPitch; - distanceAlongVector += deltaDistanceAlongVector; - boxSearch = true; // if jumping gap, use box search - currentP += deltaDistanceAlongVector*normalizedV; // skip gaps + deltaDistanceAlongVector = distanceToCloud-fGridPitch; + distanceAlongVector += deltaDistanceAlongVector; + boxSearch = true;// if jumping gap, use box search + currentP += deltaDistanceAlongVector*normalizedV; + // skip gaps } - // Search for droplets - if (distanceAlongVector > maxSearch) // quit if will jump too far - { - return(minDistance != kInfinity); - } - else - { - if (boxSearch) // we jumped + // Search for droplets + if (distanceAlongVector > maxSearch)// quit if will jump too far + { + return(minDistance != kInfinity); + } + else + { + if (boxSearch) // we jumped { - GetGrid(currentP, xGrid, yGrid, zGrid); - GetNearestDropletInsideRegion(minDistance, center, - xGrid, yGrid, zGrid, - fVectorSearchRadius, fVectorSearchRadius, fVectorSearchRadius, - p, normalizedV, - droplet, rotation); + GetGrid(currentP, xGrid, yGrid, zGrid); + GetNearestDropletInsideRegion(minDistance, center, xGrid, yGrid, zGrid, + fVectorSearchRadius, fVectorSearchRadius, fVectorSearchRadius, p, normalizedV, droplet, rotation); } - else // didn't jump - { - // Searching endcaps - // ================= - if (deltaX != 0) - { - GetNearestDropletInsideRegion(minDistance, center, - edgeX, yGrid, zGrid, - 0, fVectorSearchRadius, fVectorSearchRadius, - p, normalizedV, - droplet, rotation); - } - - if (deltaY != 0) - { - GetNearestDropletInsideRegion(minDistance, center, - xGrid, edgeY, zGrid, - fVectorSearchRadius, 0, fVectorSearchRadius, - p, normalizedV, - droplet, rotation); - } - - if (deltaZ != 0) - { - GetNearestDropletInsideRegion(minDistance, center, - xGrid, yGrid, edgeZ, - fVectorSearchRadius, fVectorSearchRadius, 0, - p, normalizedV, - droplet, rotation); - } - - // Search bars - // =========== - // (a bar joins two endcaps) - if (deltaX != 0 && deltaY != 0) - { - GetNearestDropletInsideRegion(minDistance, center, - edgeX, edgeY, zGrid, - 0, 0, fVectorSearchRadius, - p, normalizedV, - droplet, rotation); + else // didn't jump + { + // Searching endcaps + // ================= + if (deltaX != 0) + { + GetNearestDropletInsideRegion(minDistance, center, + edgeX, yGrid, zGrid, 0, fVectorSearchRadius, fVectorSearchRadius, p, normalizedV, + droplet, rotation);} + + if (deltaY != 0) + { + GetNearestDropletInsideRegion(minDistance, center, + xGrid, edgeY, zGrid, fVectorSearchRadius, 0, fVectorSearchRadius, p, normalizedV, droplet, rotation); + } + + if (deltaZ != 0) + { + GetNearestDropletInsideRegion(minDistance, center, xGrid, yGrid, edgeZ, fVectorSearchRadius, fVectorSearchRadius, 0, p, normalizedV, droplet, rotation); + } + +// Search bars +// =========== +// (a bar joins two endcaps) +if (deltaX != 0 && deltaY != 0) +{ GetNearestDropletInsideRegion(minDistance, center, edgeX, edgeY, zGrid, + 0, 0, fVectorSearchRadius, p, normalizedV, + droplet, rotation); } - if (deltaX != 0 && deltaZ != 0) - { - GetNearestDropletInsideRegion(minDistance, center, - edgeX, yGrid, edgeZ, - 0, fVectorSearchRadius, 0, - p, normalizedV, - droplet, rotation); - } + if (deltaX != 0 && deltaZ != 0) + { GetNearestDropletInsideRegion(minDistance, center, edgeX, yGrid, edgeZ, 0, fVectorSearchRadius, 0, p, normalizedV, droplet, rotation);} - if (deltaY != 0 && deltaZ != 0) - { - GetNearestDropletInsideRegion(minDistance, center, - xGrid, edgeY, edgeZ, - fVectorSearchRadius, 0, 0, - p, normalizedV, - droplet, rotation); - } +if (deltaY != 0 && deltaZ != 0) + { + GetNearestDropletInsideRegion(minDistance, center, + xGrid, edgeY, edgeZ, + fVectorSearchRadius, 0, 0, + p, normalizedV,droplet, rotation); + } - // Search corner - // ============= - if (deltaX != 0 && deltaY != 0 && deltaZ != 0) - { - GetNearestDropletInsideRegion(minDistance, center, - edgeX, edgeY, edgeZ, - 0, 0, 0, - p, normalizedV, - droplet, rotation); - } +// Search corner +// ============= + if (deltaX != 0 && deltaY != 0 && deltaZ != 0) { GetNearestDropletInsideRegion(minDistance, center, edgeX, edgeY, edgeZ, 0, 0, 0, p, normalizedV, droplet, rotation);} - // Update position - // ================================ - xGrid = newXGrid; yGrid = newYGrid; zGrid = newZGrid; - } +// Update position +// ================================ +xGrid = newXGrid; yGrid = newYGrid; zGrid = newZGrid; +} - // Check if we are done - // ==================== - if (distanceAlongVector>minDistance+fdR) { - return(true); - } +// Check if we are done +// ==================== +if (distanceAlongVector>minDistance+fdR) {return(true);} - - // walk along the grid - // advance by 0.99 fGridPitch (0.99 rather than 1.0 to avoid issues caused by - // rounding errors for lines parallel to the grid and based on a grid boundary) - while (true) { - deltaDistanceAlongVector = fGridPitch*0.99; - distanceAlongVector += deltaDistanceAlongVector; - - // exit returning false if we have traveled more than MaxVectorFollowingDistance - if (distanceAlongVector > maxSearch) { return(false); } - - currentP += deltaDistanceAlongVector*normalizedV; - GetGrid(currentP, newXGrid, newYGrid, newZGrid); - - if ((newXGrid != xGrid) || (newYGrid != yGrid) || (newZGrid != zGrid)) { - deltaX = newXGrid - xGrid; edgeX = xGrid+deltaX*(1+fVectorSearchRadius); - deltaY = newYGrid - yGrid; edgeY = yGrid+deltaY*(1+fVectorSearchRadius); - deltaZ = newZGrid - zGrid; edgeZ = zGrid+deltaZ*(1+fVectorSearchRadius); - - break; - } - } - boxSearch = false; - } - } - - return false; +// walk along the grid +// advance by 0.99 fGridPitch (0.99 rather than 1.0 to avoid issues +//caused by rounding errors for lines parallel to the grid and based on a grid boundary) + +while (true) { + deltaDistanceAlongVector = fGridPitch*0.99; + distanceAlongVector += deltaDistanceAlongVector; + + // exit returning false if we have traveled more than MaxVectorFollowingDistance + if (distanceAlongVector > maxSearch) { return(false); } + + currentP += deltaDistanceAlongVector*normalizedV; + GetGrid(currentP, newXGrid, newYGrid, newZGrid); + + if ((newXGrid != xGrid) || (newYGrid != yGrid) || (newZGrid != zGrid)) + { + deltaX = newXGrid - xGrid; + edgeX = xGrid+deltaX*(1+fVectorSearchRadius); + deltaY = newYGrid - yGrid; + edgeY = yGrid+deltaY*(1+fVectorSearchRadius); + deltaZ = newZGrid - zGrid; + edgeZ = zGrid+deltaZ*(1+fVectorSearchRadius); + + break; + } + } + boxSearch = false; + } + } + +return false; } /////////////////////////////////////////////////////////////////////////////// @@ -973,26 +939,27 @@ bool FastAerosol::GetNearestDroplet(const G4ThreeVector &p, const G4ThreeVector // // This searches box-shaped regions. // -void FastAerosol::GetNearestDropletInsideRegion(G4double &minDistance, G4ThreeVector ¢er, int xGridCenter, int yGridCenter, int zGridCenter, int xWidth, int yWidth, int zWidth, const G4ThreeVector &p, const G4ThreeVector &normalizedV, G4VSolid* droplet, std::function rotation) { - for (int xGrid = (xGridCenter-xWidth); xGrid<=(xGridCenter+xWidth); xGrid++) +void FastAerosol::GetNearestDropletInsideRegion(G4double &minDistance, G4ThreeVector ¢er, int xGridCenter, int yGridCenter, int zGridCenter, int xWidth, int yWidth, int zWidth, const G4ThreeVector &p, const G4ThreeVector &normalizedV, G4VSolid* droplet, std::function rotation) +{ + for (int xGrid = (xGridCenter-xWidth); xGrid<=(xGridCenter+xWidth); xGrid++) + { + if (0<=xGrid && xGrid rotation) { - unsigned int gi; - PopulateGrid(xGrid, yGrid, zGrid, gi); +void FastAerosol::GetNearestDropletInsideGrid(G4double &minDistance, G4ThreeVector ¢er, unsigned int xGrid, unsigned int yGrid, unsigned int zGrid, const G4ThreeVector &p, const G4ThreeVector &normalizedV, G4VSolid* droplet, std::function rotation) +{ + unsigned int gi; + PopulateGrid(xGrid, yGrid, zGrid, gi); - G4double foundDistance; + G4double foundDistance; - // find closest droplet - for (auto it = fGrid[gi].begin(); it != fGrid[gi].end(); ++it) { - // could have the following check to see if the ray pierces the bounding sphere. Currently seems like unnecessary addition - /* - deltaP = *it-p; - foundDistance = normalizedV.dot(deltaP); - - if ((0<=foundDistance) && ((deltaP - normalizedV*foundDistance).mag2() < fR2)) { - - } - */ - - G4RotationMatrix irotm = rotation(*it).inverse(); - - G4ThreeVector relPos = irotm*(p - *it); - - if (droplet->Inside(relPos) == kInside) - { - minDistance = 0; - center = *it; - } - else - { - foundDistance = droplet->DistanceToIn( relPos , irotm*normalizedV); - - if (foundDistanceInside(relPos) == kInside) + { + minDistance = 0; + center = *it; + } + else + { + foundDistance = droplet->DistanceToIn( relPos , irotm*normalizedV); + + if (foundDistance minMaxXGrid, minMaxYGrid, minMaxZGrid; + std::pair minMaxXGrid, minMaxYGrid, minMaxZGrid; - int xGrid, yGrid, zGrid; - GetGrid(p, xGrid, yGrid, zGrid); + int xGrid, yGrid, zGrid; + GetGrid(p, xGrid, yGrid, zGrid); - minMaxXGrid = GetMinMaxSide(xGrid, fNx); - minMaxYGrid = GetMinMaxSide(yGrid, fNy); - minMaxZGrid = GetMinMaxSide(zGrid, fNz); + minMaxXGrid = GetMinMaxSide(xGrid, fNx); + minMaxYGrid = GetMinMaxSide(yGrid, fNy); + minMaxZGrid = GetMinMaxSide(zGrid, fNz); - for (int xi=minMaxXGrid.first; xi <= minMaxXGrid.second; xi++) { - for (int yi = minMaxYGrid.first; yi <= minMaxYGrid.second; yi++) { - for (int zi = minMaxZGrid.first; zi <= minMaxZGrid.second; zi++) { - if (CheckCollisionInsideGrid(x, y, z, (unsigned)xi, (unsigned)yi, (unsigned)zi)) { - fNumCollisions++; // log number of collisions for statistics print - return(true); - } - } + for (int xi=minMaxXGrid.first; xi <= minMaxXGrid.second; xi++) { + for (int yi = minMaxYGrid.first; yi <= minMaxYGrid.second; yi++) { + for (int zi = minMaxZGrid.first; zi <= minMaxZGrid.second; zi++) { + if (CheckCollisionInsideGrid(x, y, z, (unsigned)xi, (unsigned)yi, (unsigned)zi)) { + fNumCollisions++; // log number of collisions for statistics print + return(true); + } + } } } return(false); @@ -1080,51 +1048,56 @@ bool FastAerosol::CheckCollision(G4double x, G4double y, G4double z) { // Note that you don't need to lock the mutex since this is only called by code // that already has the mutex (always called by PopulateGrid). // -bool FastAerosol::CheckCollisionInsideGrid(G4double x, G4double y, G4double z, unsigned int xi, unsigned int yi, unsigned int zi) { - std::vector *thisGrid = &(fGrid[GetGridIndex(xi, yi, zi)]); - unsigned int numel = (unsigned int)thisGrid->size(); +bool FastAerosol::CheckCollisionInsideGrid(G4double x, G4double y, G4double z, unsigned int xi, unsigned int yi, unsigned int zi) +{ + std::vector *thisGrid = &(fGrid[GetGridIndex(xi, yi, zi)]); + unsigned int numel = (unsigned int)thisGrid->size(); - for (unsigned int i=0; i < numel; i++) { - if (CheckCollisionWithDroplet(x, y, z, (*thisGrid)[i])) - return(true); - } + for (unsigned int i=0; i < numel; i++) + { + if (CheckCollisionWithDroplet(x, y, z, (*thisGrid)[i])) + return(true); + } - return(false); + return(false); } /////////////////////////////////////////////////////////////////////////////// // // Check for collsion with a specific droplet // -bool FastAerosol::CheckCollisionWithDroplet(G4double x, G4double y, G4double z, G4ThreeVector p ) { - return( std::pow(x-p.x(), 2.0) + std::pow(y-p.y(), 2.0) + std::pow(z-p.z(), 2.0) < fCollisionLimit2 ); +bool FastAerosol::CheckCollisionWithDroplet(G4double x, G4double y, G4double z, G4ThreeVector p ) +{ +return( std::pow(x-p.x(), 2.0) + std::pow(y-p.y(), 2.0) + std::pow(z-p.z(), 2.0) < fCollisionLimit2 ); } /////////////////////////////////////////////////////////////////////////////// // // Save droplet positions to a file for visualization and analysis // -void FastAerosol::SaveToFile(const char* filename) { - G4cout << "Saving droplet positions to " << filename << "..." << G4endl; - std::ofstream file; - file.open(filename); +void FastAerosol::SaveToFile(const char* filename) +{ + G4cout << "Saving droplet positions to " << filename << "..." << G4endl; + std::ofstream file; + file.open(filename); - std::vector voxel; - G4ThreeVector pt; + std::vector voxel; + G4ThreeVector pt; - for (auto it1 = fGrid.begin(); it1 != fGrid.end(); ++it1) { - voxel = *it1; + for (auto it1 = fGrid.begin(); it1 != fGrid.end(); ++it1) + { + voxel = *it1; - for (auto it2 = voxel.begin(); it2 != voxel.end(); ++it2) { - pt = *it2; + for (auto it2 = voxel.begin(); it2 != voxel.end(); ++it2) + { + pt = *it2; - double x = pt.x(); - double y = pt.y(); - double z = pt.z(); - - file << std::setprecision(15) << x/mm << "," << y/mm << "," << z/mm << "\n"; + double x = pt.x(); + double y = pt.y(); + double z = pt.z(); + file << std::setprecision(15) << x/mm << "," + << y/mm << "," << z/mm << "\n"; } } - - file.close(); + file.close(); } diff --git a/examples/advanced/fastAerosol/src/FastAerosolSolid.cc b/examples/advanced/fastAerosol/src/FastAerosolSolid.cc index 4ea7c112987..e364ec8eff7 100644 --- a/examples/advanced/fastAerosol/src/FastAerosolSolid.cc +++ b/examples/advanced/fastAerosol/src/FastAerosolSolid.cc @@ -49,7 +49,7 @@ namespace { - G4Mutex polyhedronMutex = G4MUTEX_INITIALIZER; + G4Mutex polyhedronMutex = G4MUTEX_INITIALIZER; } @@ -57,11 +57,9 @@ namespace // // Constructor // -FastAerosolSolid::FastAerosolSolid(const G4String& pName, - FastAerosol* pCloud, - G4VSolid* pDroplet, +FastAerosolSolid::FastAerosolSolid(const G4String& pName, FastAerosol* pCloud, G4VSolid* pDroplet, std::function pRotation) - : G4VSolid(pName), fCloud(pCloud), fDroplet(pDroplet), fRotation(pRotation), fRebuildPolyhedron(false), fpPolyhedron(0) + : G4VSolid(pName), fCloud(pCloud), fDroplet(pDroplet), fRotation(pRotation), fRebuildPolyhedron(false), fpPolyhedron(nullptr) { // Get cloud size from fCloud G4ThreeVector cloudPMin, cloudPMax; @@ -105,17 +103,10 @@ FastAerosolSolid::FastAerosolSolid( __void__& a ) fCubicVolume(0.), fSurfaceArea(0.), farFromCloudDist(0.), fRotation([](G4ThreeVector) {return G4RotationMatrix();}), - fRebuildPolyhedron(false), fpPolyhedron(0) + fRebuildPolyhedron(false), fpPolyhedron(nullptr) { } -/////////////////////////////////////////////////////////////////////////////// -// -// Destructor -// -FastAerosolSolid::~FastAerosolSolid() { -} - /////////////////////////////////////////////////////////////////////////////// // // Copy constructor @@ -453,4 +444,4 @@ G4Polyhedron* FastAerosolSolid::GetPolyhedron () const l.unlock(); } return fpPolyhedron; -} \ No newline at end of file +} diff --git a/examples/advanced/gammaknife/gammaknife.out b/examples/advanced/gammaknife/gammaknife.out index 3dd13ad939a..d0329070cff 100644 --- a/examples/advanced/gammaknife/gammaknife.out +++ b/examples/advanced/gammaknife/gammaknife.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -610,8 +612,8 @@ Run 0 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.003390s Sys=0.010000s - User TOT = 0 Real TOT = 0.00375405 + User=0.000000s Real=0.002869s Sys=0.000000s + User TOT = 0 Real TOT = 0.00319249 Summary of Run 0 : /run/geometryModified @@ -680,8 +682,8 @@ Run 1 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002379s Sys=0.000000s - User TOT = 0 Real TOT = 0.00628111 + User=0.000000s Real=0.001901s Sys=0.000000s + User TOT = 0 Real TOT = 0.00524486 Summary of Run 1 : /run/geometryModified @@ -750,8 +752,8 @@ Run 2 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002330s Sys=0.000000s - User TOT = 0 Real TOT = 0.00875936 + User=0.000000s Real=0.003483s Sys=0.000000s + User TOT = 0 Real TOT = 0.00887878 Summary of Run 2 : /run/geometryModified @@ -820,8 +822,8 @@ Run 3 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002378s Sys=0.000000s - User TOT = 0 Real TOT = 0.0112985 + User=0.000000s Real=0.003017s Sys=0.000000s + User TOT = 0 Real TOT = 0.0120474 Summary of Run 3 : /run/geometryModified @@ -890,8 +892,8 @@ Run 4 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002110s Sys=0.000000s - User TOT = 0 Real TOT = 0.0135655 + User=0.000000s Real=0.003249s Sys=0.010000s + User TOT = 0 Real TOT = 0.0154395 Summary of Run 4 : /run/geometryModified @@ -960,8 +962,8 @@ Run 5 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.002091s Sys=0.000000s - User TOT = 0.01 Real TOT = 0.0158029 + User=0.000000s Real=0.002845s Sys=0.000000s + User TOT = 0 Real TOT = 0.0184298 Summary of Run 5 : /run/geometryModified @@ -1030,8 +1032,8 @@ Run 6 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002550s Sys=0.000000s - User TOT = 0.01 Real TOT = 0.0185143 + User=0.000000s Real=0.002008s Sys=0.000000s + User TOT = 0 Real TOT = 0.0205718 Summary of Run 6 : /run/geometryModified @@ -1100,8 +1102,8 @@ Run 7 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002013s Sys=0.000000s - User TOT = 0.01 Real TOT = 0.0206692 + User=0.000000s Real=0.002987s Sys=0.000000s + User TOT = 0 Real TOT = 0.0237065 Summary of Run 7 : /run/geometryModified @@ -1170,8 +1172,8 @@ Run 8 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002706s Sys=0.010000s - User TOT = 0.01 Real TOT = 0.0235317 + User=0.000000s Real=0.002565s Sys=0.000000s + User TOT = 0 Real TOT = 0.0264188 Summary of Run 8 : /run/geometryModified @@ -1240,8 +1242,8 @@ Run 9 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002387s Sys=0.000000s - User TOT = 0.01 Real TOT = 0.0260678 + User=0.000000s Real=0.001865s Sys=0.000000s + User TOT = 0 Real TOT = 0.0284158 Summary of Run 9 : /run/geometryModified @@ -1310,8 +1312,8 @@ Run 10 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002194s Sys=0.000000s - User TOT = 0.01 Real TOT = 0.0284103 + User=0.000000s Real=0.002070s Sys=0.000000s + User TOT = 0 Real TOT = 0.0306166 Summary of Run 10 : /run/geometryModified @@ -1380,8 +1382,8 @@ Run 11 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002567s Sys=0.000000s - User TOT = 0.01 Real TOT = 0.0311242 + User=0.010000s Real=0.002808s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0335635 Summary of Run 11 : /run/geometryModified @@ -1450,8 +1452,8 @@ Run 12 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002210s Sys=0.000000s - User TOT = 0.01 Real TOT = 0.0334903 + User=0.000000s Real=0.002518s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.036206 Summary of Run 12 : /run/geometryModified @@ -1520,8 +1522,8 @@ Run 13 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002130s Sys=0.000000s - User TOT = 0.01 Real TOT = 0.0357666 + User=0.000000s Real=0.008845s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.045187 Summary of Run 13 : /run/geometryModified @@ -1590,8 +1592,8 @@ Run 14 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002510s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.038434 + User=0.000000s Real=0.002116s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0474606 Summary of Run 14 : /run/geometryModified @@ -1660,8 +1662,8 @@ Run 15 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002106s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0406873 + User=0.000000s Real=0.002847s Sys=0.010000s + User TOT = 0.01 Real TOT = 0.0504655 Summary of Run 15 : /run/geometryModified @@ -1730,8 +1732,8 @@ Run 16 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002811s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0436685 + User=0.000000s Real=0.003391s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0539985 Summary of Run 16 : /run/geometryModified @@ -1800,8 +1802,8 @@ Run 17 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002219s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0460419 + User=0.000000s Real=0.003209s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0573433 Summary of Run 17 : /run/geometryModified @@ -1870,8 +1872,8 @@ Run 18 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002123s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0483111 + User=0.000000s Real=0.002505s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0599853 Summary of Run 18 : /run/geometryModified @@ -1940,8 +1942,8 @@ Run 19 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002522s Sys=0.010000s - User TOT = 0.02 Real TOT = 0.0509795 + User=0.000000s Real=0.002589s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0627156 Summary of Run 19 : /run/geometryModified @@ -2010,8 +2012,8 @@ Run 20 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002355s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0534808 + User=0.000000s Real=0.001864s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0647231 Summary of Run 20 : /run/geometryModified @@ -2080,8 +2082,8 @@ Run 21 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002167s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.055793 + User=0.000000s Real=0.002149s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0670128 Summary of Run 21 : /run/geometryModified @@ -2150,8 +2152,8 @@ Run 22 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002130s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0580818 + User=0.000000s Real=0.002688s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0698585 Summary of Run 22 : /run/geometryModified @@ -2220,8 +2222,8 @@ Run 23 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002766s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0610607 + User=0.000000s Real=0.003457s Sys=0.010000s + User TOT = 0.01 Real TOT = 0.0734605 Summary of Run 23 : /run/geometryModified @@ -2290,8 +2292,8 @@ Run 24 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002721s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0639276 + User=0.000000s Real=0.004026s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0776345 Summary of Run 24 : /run/geometryModified @@ -2360,8 +2362,8 @@ Run 25 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002387s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0664613 + User=0.000000s Real=0.001808s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0795838 Summary of Run 25 : /run/geometryModified @@ -2430,8 +2432,8 @@ Run 26 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002309s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0689162 + User=0.000000s Real=0.002723s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0824457 Summary of Run 26 : /run/geometryModified @@ -2500,8 +2502,8 @@ Run 27 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002564s Sys=0.010000s - User TOT = 0.02 Real TOT = 0.0716329 + User=0.000000s Real=0.002636s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0852146 Summary of Run 27 : /run/geometryModified @@ -2570,8 +2572,8 @@ Run 28 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002146s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0739244 + User=0.000000s Real=0.001789s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0871438 Summary of Run 28 : /run/geometryModified @@ -2640,8 +2642,8 @@ Run 29 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002049s Sys=0.000000s - User TOT = 0.02 Real TOT = 0.0761189 + User=0.000000s Real=0.001976s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0893292 Summary of Run 29 : /run/geometryModified @@ -2710,8 +2712,8 @@ Run 30 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.011712s Sys=0.000000s - User TOT = 0.03 Real TOT = 0.0880118 + User=0.000000s Real=0.002234s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0916972 Summary of Run 30 : /run/geometryModified @@ -2780,8 +2782,8 @@ Run 31 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002585s Sys=0.000000s - User TOT = 0.03 Real TOT = 0.0907691 + User=0.000000s Real=0.002317s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0941594 Summary of Run 31 : /run/geometryModified @@ -2850,8 +2852,8 @@ Run 32 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002135s Sys=0.000000s - User TOT = 0.03 Real TOT = 0.0930732 + User=0.000000s Real=0.001901s Sys=0.000000s + User TOT = 0.01 Real TOT = 0.0962072 Summary of Run 32 : /run/geometryModified @@ -2920,8 +2922,8 @@ Run 33 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002386s Sys=0.000000s - User TOT = 0.03 Real TOT = 0.0956061 + User=0.010000s Real=0.002931s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.0992836 Summary of Run 33 : /run/geometryModified @@ -2990,8 +2992,8 @@ Run 34 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.002305s Sys=0.000000s - User TOT = 0.04 Real TOT = 0.0980866 + User=0.000000s Real=0.002320s Sys=0.010000s + User TOT = 0.02 Real TOT = 0.101767 Summary of Run 34 : /run/geometryModified @@ -3060,8 +3062,8 @@ Run 35 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002481s Sys=0.000000s - User TOT = 0.04 Real TOT = 0.100726 + User=0.000000s Real=0.001772s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.103698 Summary of Run 35 : /run/geometryModified @@ -3130,8 +3132,8 @@ Run 36 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002862s Sys=0.000000s - User TOT = 0.04 Real TOT = 0.10376 + User=0.000000s Real=0.002996s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.106843 Summary of Run 36 : /run/geometryModified @@ -3200,8 +3202,8 @@ Run 37 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002931s Sys=0.000000s - User TOT = 0.04 Real TOT = 0.106868 + User=0.000000s Real=0.002951s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.109927 Summary of Run 37 : /run/geometryModified @@ -3270,8 +3272,8 @@ Run 38 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.002079s Sys=0.010000s - User TOT = 0.05 Real TOT = 0.109093 + User=0.000000s Real=0.002965s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.113033 Summary of Run 38 : /run/geometryModified @@ -3340,8 +3342,8 @@ Run 39 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002593s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.111832 + User=0.000000s Real=0.002756s Sys=0.000000s + User TOT = 0.02 Real TOT = 0.11592 Summary of Run 39 : /run/geometryModified @@ -3410,8 +3412,8 @@ Run 40 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002001s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.113998 + User=0.010000s Real=0.002067s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.118128 Summary of Run 40 : /run/geometryModified @@ -3480,8 +3482,8 @@ Run 41 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002593s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.116737 + User=0.000000s Real=0.001763s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.120031 Summary of Run 41 : /run/geometryModified @@ -3550,8 +3552,8 @@ Run 42 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002185s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.119085 + User=0.000000s Real=0.002855s Sys=0.010000s + User TOT = 0.03 Real TOT = 0.123028 Summary of Run 42 : /run/geometryModified @@ -3620,8 +3622,8 @@ Run 43 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002370s Sys=0.000000s - User TOT = 0.05 Real TOT = 0.121603 + User=0.000000s Real=0.001887s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.125036 Summary of Run 43 : /run/geometryModified @@ -3690,8 +3692,8 @@ Run 44 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.002683s Sys=0.000000s - User TOT = 0.06 Real TOT = 0.124439 + User=0.000000s Real=0.001571s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.126727 Summary of Run 44 : /run/geometryModified @@ -3760,8 +3762,8 @@ Run 45 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001986s Sys=0.010000s - User TOT = 0.06 Real TOT = 0.126598 + User=0.000000s Real=0.001623s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.128474 Summary of Run 45 : /run/geometryModified @@ -3830,8 +3832,8 @@ Run 46 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002587s Sys=0.000000s - User TOT = 0.06 Real TOT = 0.12933 + User=0.000000s Real=0.002826s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.131423 Summary of Run 46 : /run/geometryModified @@ -3900,8 +3902,8 @@ Run 47 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001984s Sys=0.000000s - User TOT = 0.06 Real TOT = 0.13147 + User=0.000000s Real=0.002928s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.134482 Summary of Run 47 : /run/geometryModified @@ -3970,8 +3972,8 @@ Run 48 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002302s Sys=0.000000s - User TOT = 0.06 Real TOT = 0.133935 + User=0.000000s Real=0.001986s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.136609 Summary of Run 48 : /run/geometryModified @@ -4040,8 +4042,8 @@ Run 49 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002300s Sys=0.000000s - User TOT = 0.06 Real TOT = 0.136379 + User=0.000000s Real=0.003333s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.140073 Summary of Run 49 : /run/geometryModified @@ -4110,8 +4112,8 @@ Run 50 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.002256s Sys=0.000000s - User TOT = 0.07 Real TOT = 0.138793 + User=0.000000s Real=0.004134s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.144363 Summary of Run 50 : /run/geometryModified @@ -4180,8 +4182,8 @@ Run 51 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002164s Sys=0.000000s - User TOT = 0.07 Real TOT = 0.141104 + User=0.000000s Real=0.002654s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.147957 Summary of Run 51 : /run/geometryModified @@ -4250,8 +4252,8 @@ Run 52 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002785s Sys=0.000000s - User TOT = 0.07 Real TOT = 0.144044 + User=0.000000s Real=0.002615s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.150716 Summary of Run 52 : /run/geometryModified @@ -4320,8 +4322,8 @@ Run 53 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002301s Sys=0.000000s - User TOT = 0.07 Real TOT = 0.146504 + User=0.000000s Real=0.003667s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.154506 Summary of Run 53 : /run/geometryModified @@ -4390,8 +4392,8 @@ Run 54 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002032s Sys=0.010000s - User TOT = 0.07 Real TOT = 0.148681 + User=0.000000s Real=0.002703s Sys=0.010000s + User TOT = 0.03 Real TOT = 0.15735 Summary of Run 54 : /run/geometryModified @@ -4460,8 +4462,8 @@ Run 55 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.002231s Sys=0.000000s - User TOT = 0.08 Real TOT = 0.151061 + User=0.000000s Real=0.003131s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.160621 Summary of Run 55 : /run/geometryModified @@ -4530,8 +4532,8 @@ Run 56 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002160s Sys=0.000000s - User TOT = 0.08 Real TOT = 0.153388 + User=0.000000s Real=0.005109s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.16587 Summary of Run 56 : /run/geometryModified @@ -4600,8 +4602,8 @@ Run 57 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002041s Sys=0.000000s - User TOT = 0.08 Real TOT = 0.155573 + User=0.000000s Real=0.001856s Sys=0.000000s + User TOT = 0.03 Real TOT = 0.167874 Summary of Run 57 : /run/geometryModified @@ -4670,8 +4672,8 @@ Run 58 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002339s Sys=0.000000s - User TOT = 0.08 Real TOT = 0.158072 + User=0.010000s Real=0.004270s Sys=0.010000s + User TOT = 0.04 Real TOT = 0.172296 Summary of Run 58 : /run/geometryModified @@ -4740,8 +4742,8 @@ Run 59 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.002469s Sys=0.000000s - User TOT = 0.09 Real TOT = 0.160687 + User=0.000000s Real=0.002967s Sys=0.000000s + User TOT = 0.04 Real TOT = 0.175406 Summary of Run 59 : /run/geometryModified @@ -4810,8 +4812,8 @@ Run 60 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002310s Sys=0.000000s - User TOT = 0.09 Real TOT = 0.163153 + User=0.000000s Real=0.004259s Sys=0.000000s + User TOT = 0.04 Real TOT = 0.179821 Summary of Run 60 : /run/geometryModified @@ -4880,8 +4882,8 @@ Run 61 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002355s Sys=0.000000s - User TOT = 0.09 Real TOT = 0.165654 + User=0.000000s Real=0.001457s Sys=0.000000s + User TOT = 0.04 Real TOT = 0.181406 Summary of Run 61 : /run/geometryModified @@ -4950,8 +4952,8 @@ Run 62 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002078s Sys=0.000000s - User TOT = 0.09 Real TOT = 0.167889 + User=0.000000s Real=0.003743s Sys=0.000000s + User TOT = 0.04 Real TOT = 0.185278 Summary of Run 62 : /run/geometryModified @@ -5020,8 +5022,8 @@ Run 63 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002461s Sys=0.010000s - User TOT = 0.09 Real TOT = 0.1705 + User=0.010000s Real=0.003066s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.18849 Summary of Run 63 : /run/geometryModified @@ -5090,8 +5092,8 @@ Run 64 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002794s Sys=0.000000s - User TOT = 0.09 Real TOT = 0.173439 + User=0.000000s Real=0.003241s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.191872 Summary of Run 64 : /run/geometryModified @@ -5160,8 +5162,8 @@ Run 65 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002846s Sys=0.000000s - User TOT = 0.09 Real TOT = 0.176442 + User=0.000000s Real=0.003604s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.19562 Summary of Run 65 : /run/geometryModified @@ -5230,8 +5232,8 @@ Run 66 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.002262s Sys=0.000000s - User TOT = 0.1 Real TOT = 0.178848 + User=0.000000s Real=0.002573s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.198334 Summary of Run 66 : /run/geometryModified @@ -5300,8 +5302,8 @@ Run 67 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002671s Sys=0.000000s - User TOT = 0.1 Real TOT = 0.181665 + User=0.000000s Real=0.002321s Sys=0.000000s + User TOT = 0.05 Real TOT = 0.20078 Summary of Run 67 : /run/geometryModified @@ -5370,8 +5372,8 @@ Run 68 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002558s Sys=0.000000s - User TOT = 0.1 Real TOT = 0.184368 + User=0.010000s Real=0.001787s Sys=0.000000s + User TOT = 0.06 Real TOT = 0.202696 Summary of Run 68 : /run/geometryModified @@ -5440,8 +5442,8 @@ Run 69 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002082s Sys=0.000000s - User TOT = 0.1 Real TOT = 0.186595 + User=0.000000s Real=0.001434s Sys=0.000000s + User TOT = 0.06 Real TOT = 0.204262 Summary of Run 69 : /run/geometryModified @@ -5510,8 +5512,8 @@ Run 70 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002175s Sys=0.000000s - User TOT = 0.1 Real TOT = 0.188917 + User=0.000000s Real=0.008808s Sys=0.000000s + User TOT = 0.06 Real TOT = 0.213201 Summary of Run 70 : /run/geometryModified @@ -5580,8 +5582,8 @@ Run 71 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002588s Sys=0.000000s - User TOT = 0.1 Real TOT = 0.191649 + User=0.000000s Real=0.003377s Sys=0.000000s + User TOT = 0.06 Real TOT = 0.216728 Summary of Run 71 : /run/geometryModified @@ -5650,8 +5652,8 @@ Run 72 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002348s Sys=0.000000s - User TOT = 0.1 Real TOT = 0.194142 + User=0.000000s Real=0.002391s Sys=0.010000s + User TOT = 0.06 Real TOT = 0.219261 Summary of Run 72 : /run/geometryModified @@ -5720,8 +5722,8 @@ Run 73 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002085s Sys=0.000000s - User TOT = 0.1 Real TOT = 0.196383 + User=0.010000s Real=0.002609s Sys=0.000000s + User TOT = 0.07 Real TOT = 0.221992 Summary of Run 73 : /run/geometryModified @@ -5790,8 +5792,8 @@ Run 74 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002313s Sys=0.000000s - User TOT = 0.1 Real TOT = 0.198844 + User=0.000000s Real=0.003313s Sys=0.000000s + User TOT = 0.07 Real TOT = 0.225428 Summary of Run 74 : /run/geometryModified @@ -5860,8 +5862,8 @@ Run 75 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002617s Sys=0.010000s - User TOT = 0.1 Real TOT = 0.201618 + User=0.000000s Real=0.002882s Sys=0.000000s + User TOT = 0.07 Real TOT = 0.228432 Summary of Run 75 : /run/geometryModified @@ -5930,8 +5932,8 @@ Run 76 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002156s Sys=0.000000s - User TOT = 0.1 Real TOT = 0.203923 + User=0.000000s Real=0.002509s Sys=0.000000s + User TOT = 0.07 Real TOT = 0.231094 Summary of Run 76 : /run/geometryModified @@ -6000,8 +6002,8 @@ Run 77 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002381s Sys=0.000000s - User TOT = 0.1 Real TOT = 0.20645 + User=0.010000s Real=0.002494s Sys=0.000000s + User TOT = 0.08 Real TOT = 0.233746 Summary of Run 77 : /run/geometryModified @@ -6070,8 +6072,8 @@ Run 78 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002003s Sys=0.000000s - User TOT = 0.1 Real TOT = 0.2086 + User=0.000000s Real=0.001612s Sys=0.000000s + User TOT = 0.08 Real TOT = 0.235492 Summary of Run 78 : /run/geometryModified @@ -6140,8 +6142,8 @@ Run 79 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002296s Sys=0.000000s - User TOT = 0.1 Real TOT = 0.211041 + User=0.000000s Real=0.001687s Sys=0.000000s + User TOT = 0.08 Real TOT = 0.237299 Summary of Run 79 : /run/geometryModified @@ -6210,8 +6212,8 @@ Run 80 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.002277s Sys=0.000000s - User TOT = 0.11 Real TOT = 0.213465 + User=0.000000s Real=0.003365s Sys=0.000000s + User TOT = 0.08 Real TOT = 0.240786 Summary of Run 80 : /run/geometryModified @@ -6280,8 +6282,8 @@ Run 81 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002376s Sys=0.000000s - User TOT = 0.11 Real TOT = 0.215992 + User=0.000000s Real=0.003195s Sys=0.000000s + User TOT = 0.08 Real TOT = 0.244106 Summary of Run 81 : /run/geometryModified @@ -6350,8 +6352,8 @@ Run 82 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002300s Sys=0.000000s - User TOT = 0.11 Real TOT = 0.218439 + User=0.000000s Real=0.003469s Sys=0.000000s + User TOT = 0.08 Real TOT = 0.247698 Summary of Run 82 : /run/geometryModified @@ -6420,8 +6422,8 @@ Run 83 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002549s Sys=0.010000s - User TOT = 0.11 Real TOT = 0.221139 + User=0.010000s Real=0.002401s Sys=0.010000s + User TOT = 0.09 Real TOT = 0.250241 Summary of Run 83 : /run/geometryModified @@ -6490,8 +6492,8 @@ Run 84 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002286s Sys=0.000000s - User TOT = 0.11 Real TOT = 0.223583 + User=0.000000s Real=0.003886s Sys=0.000000s + User TOT = 0.09 Real TOT = 0.254267 Summary of Run 84 : /run/geometryModified @@ -6560,8 +6562,8 @@ Run 85 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.002060s Sys=0.000000s - User TOT = 0.12 Real TOT = 0.225797 + User=0.000000s Real=0.002355s Sys=0.000000s + User TOT = 0.09 Real TOT = 0.256748 Summary of Run 85 : /run/geometryModified @@ -6630,8 +6632,8 @@ Run 86 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002379s Sys=0.000000s - User TOT = 0.12 Real TOT = 0.228338 + User=0.000000s Real=0.002258s Sys=0.000000s + User TOT = 0.09 Real TOT = 0.259135 Summary of Run 86 : /run/geometryModified @@ -6700,8 +6702,8 @@ Run 87 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002256s Sys=0.000000s - User TOT = 0.12 Real TOT = 0.230743 + User=0.010000s Real=0.002425s Sys=0.000000s + User TOT = 0.1 Real TOT = 0.261709 Summary of Run 87 : /run/geometryModified @@ -6770,8 +6772,8 @@ Run 88 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002151s Sys=0.000000s - User TOT = 0.12 Real TOT = 0.233041 + User=0.000000s Real=0.002409s Sys=0.000000s + User TOT = 0.1 Real TOT = 0.26424 Summary of Run 88 : /run/geometryModified @@ -6840,8 +6842,8 @@ Run 89 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.002222s Sys=0.000000s - User TOT = 0.13 Real TOT = 0.23541 + User=0.000000s Real=0.006188s Sys=0.000000s + User TOT = 0.1 Real TOT = 0.270562 Summary of Run 89 : /run/geometryModified @@ -6910,8 +6912,8 @@ Run 90 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002497s Sys=0.000000s - User TOT = 0.13 Real TOT = 0.238051 + User=0.000000s Real=0.008011s Sys=0.000000s + User TOT = 0.1 Real TOT = 0.278704 Summary of Run 90 : /run/geometryModified @@ -6980,8 +6982,8 @@ Run 91 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002144s Sys=0.000000s - User TOT = 0.13 Real TOT = 0.240345 + User=0.000000s Real=0.001900s Sys=0.000000s + User TOT = 0.1 Real TOT = 0.280747 Summary of Run 91 : /run/geometryModified @@ -7050,8 +7052,8 @@ Run 92 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002316s Sys=0.000000s - User TOT = 0.13 Real TOT = 0.242807 + User=0.000000s Real=0.003588s Sys=0.000000s + User TOT = 0.1 Real TOT = 0.284499 Summary of Run 92 : /run/geometryModified @@ -7120,8 +7122,8 @@ Run 93 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.003510s Sys=0.000000s - User TOT = 0.14 Real TOT = 0.246467 + User=0.000000s Real=0.003391s Sys=0.000000s + User TOT = 0.1 Real TOT = 0.288033 Summary of Run 93 : /run/geometryModified @@ -7190,8 +7192,8 @@ Run 94 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002415s Sys=0.000000s - User TOT = 0.14 Real TOT = 0.249041 + User=0.000000s Real=0.001626s Sys=0.000000s + User TOT = 0.1 Real TOT = 0.289782 Summary of Run 94 : /run/geometryModified @@ -7260,8 +7262,8 @@ Run 95 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002534s Sys=0.000000s - User TOT = 0.14 Real TOT = 0.251735 + User=0.000000s Real=0.003436s Sys=0.000000s + User TOT = 0.1 Real TOT = 0.293369 Summary of Run 95 : /run/geometryModified @@ -7330,8 +7332,8 @@ Run 96 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002322s Sys=0.000000s - User TOT = 0.14 Real TOT = 0.254202 + User=0.000000s Real=0.002025s Sys=0.000000s + User TOT = 0.1 Real TOT = 0.295517 Summary of Run 96 : /run/geometryModified @@ -7400,8 +7402,8 @@ Run 97 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002255s Sys=0.010000s - User TOT = 0.14 Real TOT = 0.256605 + User=0.000000s Real=0.001537s Sys=0.000000s + User TOT = 0.1 Real TOT = 0.297188 Summary of Run 97 : /run/geometryModified @@ -7470,8 +7472,8 @@ Run 98 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.002230s Sys=0.000000s - User TOT = 0.15 Real TOT = 0.258993 + User=0.000000s Real=0.001489s Sys=0.000000s + User TOT = 0.1 Real TOT = 0.298796 Summary of Run 98 : /run/geometryModified @@ -7540,8 +7542,8 @@ Run 99 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002355s Sys=0.000000s - User TOT = 0.15 Real TOT = 0.261511 + User=0.010000s Real=0.002816s Sys=0.000000s + User TOT = 0.11 Real TOT = 0.301732 Summary of Run 99 : /run/geometryModified @@ -7610,8 +7612,8 @@ Run 100 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002698s Sys=0.000000s - User TOT = 0.15 Real TOT = 0.264354 + User=0.000000s Real=0.001566s Sys=0.000000s + User TOT = 0.11 Real TOT = 0.303427 Summary of Run 100 : /run/geometryModified @@ -7680,8 +7682,8 @@ Run 101 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002531s Sys=0.000000s - User TOT = 0.15 Real TOT = 0.267043 + User=0.000000s Real=0.001736s Sys=0.000000s + User TOT = 0.11 Real TOT = 0.305281 Summary of Run 101 : /run/geometryModified @@ -7750,8 +7752,8 @@ Run 102 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002247s Sys=0.000000s - User TOT = 0.15 Real TOT = 0.269433 + User=0.000000s Real=0.001561s Sys=0.000000s + User TOT = 0.11 Real TOT = 0.306962 Summary of Run 102 : /run/geometryModified @@ -7820,8 +7822,8 @@ Run 103 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002114s Sys=0.000000s - User TOT = 0.15 Real TOT = 0.271706 + User=0.000000s Real=0.002553s Sys=0.000000s + User TOT = 0.11 Real TOT = 0.309636 Summary of Run 103 : /run/geometryModified @@ -7890,8 +7892,8 @@ Run 104 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002384s Sys=0.000000s - User TOT = 0.15 Real TOT = 0.274239 + User=0.000000s Real=0.001480s Sys=0.000000s + User TOT = 0.11 Real TOT = 0.311236 Summary of Run 104 : /run/geometryModified @@ -7960,8 +7962,8 @@ Run 105 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002244s Sys=0.000000s - User TOT = 0.15 Real TOT = 0.276641 + User=0.000000s Real=0.001658s Sys=0.000000s + User TOT = 0.11 Real TOT = 0.31302 Summary of Run 105 : /run/geometryModified @@ -8030,8 +8032,8 @@ Run 106 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.005293s Sys=0.000000s - User TOT = 0.15 Real TOT = 0.28208 + User=0.000000s Real=0.001429s Sys=0.000000s + User TOT = 0.11 Real TOT = 0.314569 Summary of Run 106 : /run/geometryModified @@ -8100,8 +8102,8 @@ Run 107 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.020480s Sys=0.000000s - User TOT = 0.16 Real TOT = 0.302718 + User=0.000000s Real=0.002589s Sys=0.000000s + User TOT = 0.11 Real TOT = 0.317278 Summary of Run 107 : /run/geometryModified @@ -8170,8 +8172,8 @@ Run 108 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021770s Sys=0.000000s - User TOT = 0.16 Real TOT = 0.324636 + User=0.000000s Real=0.002525s Sys=0.000000s + User TOT = 0.11 Real TOT = 0.319934 Summary of Run 108 : /run/geometryModified @@ -8240,8 +8242,8 @@ Run 109 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020570s Sys=0.000000s - User TOT = 0.16 Real TOT = 0.345355 + User=0.000000s Real=0.002504s Sys=0.000000s + User TOT = 0.11 Real TOT = 0.322559 Summary of Run 109 : /run/geometryModified @@ -8310,8 +8312,8 @@ Run 110 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021967s Sys=0.000000s - User TOT = 0.16 Real TOT = 0.367471 + User=0.000000s Real=0.023587s Sys=0.000000s + User TOT = 0.11 Real TOT = 0.346287 Summary of Run 110 : /run/geometryModified @@ -8380,8 +8382,8 @@ Run 111 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.021070s Sys=0.000000s - User TOT = 0.17 Real TOT = 0.388701 + User=0.010000s Real=0.020459s Sys=0.000000s + User TOT = 0.12 Real TOT = 0.366922 Summary of Run 111 : /run/geometryModified @@ -8450,8 +8452,8 @@ Run 112 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020644s Sys=0.000000s - User TOT = 0.17 Real TOT = 0.409493 + User=0.000000s Real=0.019868s Sys=0.000000s + User TOT = 0.12 Real TOT = 0.386938 Summary of Run 112 : /run/geometryModified @@ -8520,8 +8522,8 @@ Run 113 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021908s Sys=0.000000s - User TOT = 0.17 Real TOT = 0.431548 + User=0.000000s Real=0.018191s Sys=0.000000s + User TOT = 0.12 Real TOT = 0.405281 Summary of Run 113 : /run/geometryModified @@ -8590,8 +8592,8 @@ Run 114 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021071s Sys=0.000000s - User TOT = 0.17 Real TOT = 0.452765 + User=0.000000s Real=0.021511s Sys=0.000000s + User TOT = 0.12 Real TOT = 0.426935 Summary of Run 114 : /run/geometryModified @@ -8660,8 +8662,8 @@ Run 115 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020472s Sys=0.010000s - User TOT = 0.17 Real TOT = 0.473395 + User=0.000000s Real=0.020334s Sys=0.000000s + User TOT = 0.12 Real TOT = 0.447431 Summary of Run 115 : /run/geometryModified @@ -8730,8 +8732,8 @@ Run 116 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021949s Sys=0.000000s - User TOT = 0.17 Real TOT = 0.495491 + User=0.000000s Real=0.021902s Sys=0.010000s + User TOT = 0.12 Real TOT = 0.469488 Summary of Run 116 : /run/geometryModified @@ -8800,8 +8802,8 @@ Run 117 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020768s Sys=0.000000s - User TOT = 0.17 Real TOT = 0.516419 + User=0.000000s Real=0.020501s Sys=0.000000s + User TOT = 0.12 Real TOT = 0.490126 Summary of Run 117 : /run/geometryModified @@ -8870,8 +8872,8 @@ Run 118 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021060s Sys=0.000000s - User TOT = 0.17 Real TOT = 0.537627 + User=0.000000s Real=0.021702s Sys=0.000000s + User TOT = 0.12 Real TOT = 0.511995 Summary of Run 118 : /run/geometryModified @@ -8940,8 +8942,8 @@ Run 119 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021122s Sys=0.000000s - User TOT = 0.17 Real TOT = 0.558897 + User=0.000000s Real=0.020584s Sys=0.000000s + User TOT = 0.12 Real TOT = 0.532739 Summary of Run 119 : /run/geometryModified @@ -9010,8 +9012,8 @@ Run 120 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021713s Sys=0.000000s - User TOT = 0.17 Real TOT = 0.580757 + User=0.000000s Real=0.023364s Sys=0.000000s + User TOT = 0.12 Real TOT = 0.556263 Summary of Run 120 : /run/geometryModified @@ -9080,8 +9082,8 @@ Run 121 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.021309s Sys=0.000000s - User TOT = 0.18 Real TOT = 0.60222 + User=0.010000s Real=0.020903s Sys=0.000000s + User TOT = 0.13 Real TOT = 0.577342 Summary of Run 121 : /run/geometryModified @@ -9150,8 +9152,8 @@ Run 122 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020914s Sys=0.000000s - User TOT = 0.18 Real TOT = 0.623282 + User=0.000000s Real=0.021336s Sys=0.000000s + User TOT = 0.13 Real TOT = 0.598846 Summary of Run 122 : /run/geometryModified @@ -9220,8 +9222,8 @@ Run 123 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020879s Sys=0.010000s - User TOT = 0.18 Real TOT = 0.644337 + User=0.000000s Real=0.020825s Sys=0.000000s + User TOT = 0.13 Real TOT = 0.619825 Summary of Run 123 : /run/geometryModified @@ -9290,8 +9292,8 @@ Run 124 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021540s Sys=0.000000s - User TOT = 0.18 Real TOT = 0.666025 + User=0.000000s Real=0.033654s Sys=0.000000s + User TOT = 0.13 Real TOT = 0.653632 Summary of Run 124 : /run/geometryModified @@ -9360,8 +9362,8 @@ Run 125 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.020477s Sys=0.000000s - User TOT = 0.19 Real TOT = 0.686657 + User=0.000000s Real=0.007410s Sys=0.000000s + User TOT = 0.13 Real TOT = 0.661217 Summary of Run 125 : /run/geometryModified @@ -9430,8 +9432,8 @@ Run 126 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021688s Sys=0.000000s - User TOT = 0.19 Real TOT = 0.708498 + User=0.000000s Real=0.019886s Sys=0.000000s + User TOT = 0.13 Real TOT = 0.681248 Summary of Run 126 : /run/geometryModified @@ -9500,8 +9502,8 @@ Run 127 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021058s Sys=0.000000s - User TOT = 0.19 Real TOT = 0.729703 + User=0.000000s Real=0.020823s Sys=0.000000s + User TOT = 0.13 Real TOT = 0.702229 Summary of Run 127 : /run/geometryModified @@ -9570,8 +9572,8 @@ Run 128 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021422s Sys=0.000000s - User TOT = 0.19 Real TOT = 0.751285 + User=0.000000s Real=0.020793s Sys=0.000000s + User TOT = 0.13 Real TOT = 0.723173 Summary of Run 128 : /run/geometryModified @@ -9640,8 +9642,8 @@ Run 129 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021121s Sys=0.010000s - User TOT = 0.19 Real TOT = 0.77257 + User=0.010000s Real=0.021600s Sys=0.000000s + User TOT = 0.14 Real TOT = 0.744916 Summary of Run 129 : /run/geometryModified @@ -9710,8 +9712,8 @@ Run 130 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020779s Sys=0.000000s - User TOT = 0.19 Real TOT = 0.793496 + User=0.000000s Real=0.020582s Sys=0.000000s + User TOT = 0.14 Real TOT = 0.765674 Summary of Run 130 : /run/geometryModified @@ -9780,8 +9782,8 @@ Run 131 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021174s Sys=0.000000s - User TOT = 0.19 Real TOT = 0.814817 + User=0.000000s Real=0.021711s Sys=0.000000s + User TOT = 0.14 Real TOT = 0.787541 Summary of Run 131 : /run/geometryModified @@ -9850,8 +9852,8 @@ Run 132 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.021030s Sys=0.000000s - User TOT = 0.2 Real TOT = 0.835995 + User=0.000000s Real=0.018593s Sys=0.010000s + User TOT = 0.14 Real TOT = 0.806267 Summary of Run 132 : /run/geometryModified @@ -9920,8 +9922,8 @@ Run 133 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021923s Sys=0.000000s - User TOT = 0.2 Real TOT = 0.858065 + User=0.010000s Real=0.019308s Sys=0.000000s + User TOT = 0.15 Real TOT = 0.825713 Summary of Run 133 : /run/geometryModified @@ -9990,8 +9992,8 @@ Run 134 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020527s Sys=0.000000s - User TOT = 0.2 Real TOT = 0.878755 + User=0.000000s Real=0.020929s Sys=0.000000s + User TOT = 0.15 Real TOT = 0.846784 Summary of Run 134 : /run/geometryModified @@ -10060,8 +10062,8 @@ Run 135 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021448s Sys=0.010000s - User TOT = 0.2 Real TOT = 0.900349 + User=0.000000s Real=0.020761s Sys=0.000000s + User TOT = 0.15 Real TOT = 0.867688 Summary of Run 135 : /run/geometryModified @@ -10130,8 +10132,8 @@ Run 136 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021807s Sys=0.000000s - User TOT = 0.2 Real TOT = 0.922304 + User=0.000000s Real=0.021057s Sys=0.000000s + User TOT = 0.15 Real TOT = 0.88891 Summary of Run 136 : /run/geometryModified @@ -10200,8 +10202,8 @@ Run 137 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020446s Sys=0.000000s - User TOT = 0.2 Real TOT = 0.942908 + User=0.010000s Real=0.021218s Sys=0.000000s + User TOT = 0.16 Real TOT = 0.910289 Summary of Run 137 : /run/geometryModified @@ -10270,8 +10272,8 @@ Run 138 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021503s Sys=0.000000s - User TOT = 0.2 Real TOT = 0.964573 + User=0.000000s Real=0.021254s Sys=0.000000s + User TOT = 0.16 Real TOT = 0.9317 Summary of Run 138 : /run/geometryModified @@ -10340,8 +10342,8 @@ Run 139 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020636s Sys=0.010000s - User TOT = 0.2 Real TOT = 0.985358 + User=0.000000s Real=0.021296s Sys=0.000000s + User TOT = 0.16 Real TOT = 0.953151 Summary of Run 139 : /run/geometryModified @@ -10410,8 +10412,8 @@ Run 140 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.021394s Sys=0.000000s - User TOT = 0.21 Real TOT = 1.0069 + User=0.000000s Real=0.020974s Sys=0.000000s + User TOT = 0.16 Real TOT = 0.97431 Summary of Run 140 : /run/geometryModified @@ -10480,8 +10482,8 @@ Run 141 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020886s Sys=0.000000s - User TOT = 0.21 Real TOT = 1.02793 + User=0.000000s Real=0.021105s Sys=0.000000s + User TOT = 0.16 Real TOT = 0.99557 Summary of Run 141 : /run/geometryModified @@ -10550,8 +10552,8 @@ Run 142 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.022097s Sys=0.000000s - User TOT = 0.21 Real TOT = 1.05018 + User=0.010000s Real=0.020338s Sys=0.000000s + User TOT = 0.17 Real TOT = 1.01608 Summary of Run 142 : /run/geometryModified @@ -10620,8 +10622,8 @@ Run 143 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021205s Sys=0.000000s - User TOT = 0.21 Real TOT = 1.07154 + User=0.000000s Real=0.021172s Sys=0.000000s + User TOT = 0.17 Real TOT = 1.03741 Summary of Run 143 : /run/geometryModified @@ -10690,8 +10692,8 @@ Run 144 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.021399s Sys=0.000000s - User TOT = 0.22 Real TOT = 1.09309 + User=0.000000s Real=0.021294s Sys=0.000000s + User TOT = 0.17 Real TOT = 1.05887 Summary of Run 144 : /run/geometryModified @@ -10760,8 +10762,8 @@ Run 145 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020137s Sys=0.000000s - User TOT = 0.22 Real TOT = 1.11338 + User=0.000000s Real=0.021254s Sys=0.000000s + User TOT = 0.17 Real TOT = 1.08027 Summary of Run 145 : /run/geometryModified @@ -10830,8 +10832,8 @@ Run 146 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021502s Sys=0.000000s - User TOT = 0.22 Real TOT = 1.13503 + User=0.000000s Real=0.022480s Sys=0.000000s + User TOT = 0.17 Real TOT = 1.1029 Summary of Run 146 : /run/geometryModified @@ -10900,8 +10902,8 @@ Run 147 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021618s Sys=0.000000s - User TOT = 0.22 Real TOT = 1.15682 + User=0.010000s Real=0.027605s Sys=0.000000s + User TOT = 0.18 Real TOT = 1.13065 Summary of Run 147 : /run/geometryModified @@ -10970,8 +10972,8 @@ Run 148 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020366s Sys=0.000000s - User TOT = 0.22 Real TOT = 1.17735 + User=0.000000s Real=0.014161s Sys=0.000000s + User TOT = 0.18 Real TOT = 1.14496 Summary of Run 148 : /run/geometryModified @@ -11040,8 +11042,8 @@ Run 149 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021369s Sys=0.000000s - User TOT = 0.22 Real TOT = 1.19887 + User=0.000000s Real=0.020860s Sys=0.000000s + User TOT = 0.18 Real TOT = 1.16597 Summary of Run 149 : /run/geometryModified @@ -11110,8 +11112,8 @@ Run 150 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021182s Sys=0.010000s - User TOT = 0.22 Real TOT = 1.22021 + User=0.010000s Real=0.021392s Sys=0.000000s + User TOT = 0.19 Real TOT = 1.18753 Summary of Run 150 : /run/geometryModified @@ -11180,8 +11182,8 @@ Run 151 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021174s Sys=0.000000s - User TOT = 0.22 Real TOT = 1.24154 + User=0.000000s Real=0.020556s Sys=0.010000s + User TOT = 0.19 Real TOT = 1.20823 Summary of Run 151 : /run/geometryModified @@ -11250,8 +11252,8 @@ Run 152 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.020833s Sys=0.000000s - User TOT = 0.23 Real TOT = 1.26253 + User=0.000000s Real=0.021852s Sys=0.000000s + User TOT = 0.19 Real TOT = 1.23026 Summary of Run 152 : /run/geometryModified @@ -11320,8 +11322,8 @@ Run 153 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021596s Sys=0.000000s - User TOT = 0.23 Real TOT = 1.28428 + User=0.000000s Real=0.020690s Sys=0.000000s + User TOT = 0.19 Real TOT = 1.25109 Summary of Run 153 : /run/geometryModified @@ -11390,8 +11392,8 @@ Run 154 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020597s Sys=0.000000s - User TOT = 0.23 Real TOT = 1.30504 + User=0.000000s Real=0.025830s Sys=0.000000s + User TOT = 0.19 Real TOT = 1.27707 Summary of Run 154 : /run/geometryModified @@ -11460,8 +11462,8 @@ Run 155 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021723s Sys=0.000000s - User TOT = 0.23 Real TOT = 1.32691 + User=0.000000s Real=0.021956s Sys=0.000000s + User TOT = 0.19 Real TOT = 1.29917 Summary of Run 155 : /run/geometryModified @@ -11530,8 +11532,8 @@ Run 156 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021172s Sys=0.000000s - User TOT = 0.23 Real TOT = 1.34824 + User=0.000000s Real=0.012725s Sys=0.000000s + User TOT = 0.19 Real TOT = 1.31203 Summary of Run 156 : /run/geometryModified @@ -11600,8 +11602,8 @@ Run 157 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.020471s Sys=0.010000s - User TOT = 0.24 Real TOT = 1.36888 + User=0.000000s Real=0.021479s Sys=0.000000s + User TOT = 0.19 Real TOT = 1.33367 Summary of Run 157 : /run/geometryModified @@ -11670,8 +11672,8 @@ Run 158 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021407s Sys=0.000000s - User TOT = 0.24 Real TOT = 1.39044 + User=0.000000s Real=0.021417s Sys=0.000000s + User TOT = 0.19 Real TOT = 1.35524 Summary of Run 158 : /run/geometryModified @@ -11740,8 +11742,8 @@ Run 159 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021434s Sys=0.000000s - User TOT = 0.24 Real TOT = 1.41203 + User=0.000000s Real=0.022243s Sys=0.000000s + User TOT = 0.19 Real TOT = 1.37767 Summary of Run 159 : /run/geometryModified @@ -11810,8 +11812,8 @@ Run 160 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021369s Sys=0.000000s - User TOT = 0.24 Real TOT = 1.43355 + User=0.000000s Real=0.021378s Sys=0.010000s + User TOT = 0.19 Real TOT = 1.39919 Summary of Run 160 : /run/geometryModified @@ -11880,8 +11882,8 @@ Run 161 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021275s Sys=0.000000s - User TOT = 0.24 Real TOT = 1.45499 + User=0.000000s Real=0.021263s Sys=0.000000s + User TOT = 0.19 Real TOT = 1.4206 Summary of Run 161 : /run/geometryModified @@ -11950,8 +11952,8 @@ Run 162 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.021345s Sys=0.000000s - User TOT = 0.25 Real TOT = 1.47649 + User=0.000000s Real=0.020134s Sys=0.000000s + User TOT = 0.19 Real TOT = 1.44087 Summary of Run 162 : /run/geometryModified @@ -12020,8 +12022,8 @@ Run 163 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020376s Sys=0.000000s - User TOT = 0.25 Real TOT = 1.49702 + User=0.010000s Real=0.020607s Sys=0.000000s + User TOT = 0.2 Real TOT = 1.46166 Summary of Run 163 : /run/geometryModified @@ -12090,8 +12092,8 @@ Run 164 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021341s Sys=0.000000s - User TOT = 0.25 Real TOT = 1.51851 + User=0.000000s Real=0.021010s Sys=0.000000s + User TOT = 0.2 Real TOT = 1.48285 Summary of Run 164 : /run/geometryModified @@ -12160,8 +12162,8 @@ Run 165 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021587s Sys=0.000000s - User TOT = 0.25 Real TOT = 1.54025 + User=0.000000s Real=0.023660s Sys=0.000000s + User TOT = 0.2 Real TOT = 1.50665 Summary of Run 165 : /run/geometryModified @@ -12230,8 +12232,8 @@ Run 166 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.020431s Sys=0.010000s - User TOT = 0.26 Real TOT = 1.56083 + User=0.000000s Real=0.020222s Sys=0.000000s + User TOT = 0.2 Real TOT = 1.52704 Summary of Run 166 : /run/geometryModified @@ -12300,8 +12302,8 @@ Run 167 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021313s Sys=0.000000s - User TOT = 0.26 Real TOT = 1.5823 + User=0.000000s Real=0.021183s Sys=0.010000s + User TOT = 0.2 Real TOT = 1.5484 Summary of Run 167 : /run/geometryModified @@ -12370,8 +12372,8 @@ Run 168 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021268s Sys=0.000000s - User TOT = 0.26 Real TOT = 1.60372 + User=0.010000s Real=0.021502s Sys=0.000000s + User TOT = 0.21 Real TOT = 1.57004 Summary of Run 168 : /run/geometryModified @@ -12440,8 +12442,8 @@ Run 169 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021902s Sys=0.000000s - User TOT = 0.26 Real TOT = 1.62578 + User=0.000000s Real=0.021030s Sys=0.000000s + User TOT = 0.21 Real TOT = 1.59121 Summary of Run 169 : /run/geometryModified @@ -12510,8 +12512,8 @@ Run 170 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.020546s Sys=0.000000s - User TOT = 0.27 Real TOT = 1.64647 + User=0.000000s Real=0.020030s Sys=0.000000s + User TOT = 0.21 Real TOT = 1.61138 Summary of Run 170 : /run/geometryModified @@ -12580,8 +12582,8 @@ Run 171 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021567s Sys=0.000000s - User TOT = 0.27 Real TOT = 1.6682 + User=0.000000s Real=0.020669s Sys=0.000000s + User TOT = 0.21 Real TOT = 1.63219 Summary of Run 171 : /run/geometryModified @@ -12650,8 +12652,8 @@ Run 172 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020479s Sys=0.000000s - User TOT = 0.27 Real TOT = 1.68883 + User=0.010000s Real=0.020748s Sys=0.000000s + User TOT = 0.22 Real TOT = 1.65308 Summary of Run 172 : /run/geometryModified @@ -12720,8 +12722,8 @@ Run 173 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.021507s Sys=0.000000s - User TOT = 0.28 Real TOT = 1.71048 + User=0.000000s Real=0.021138s Sys=0.000000s + User TOT = 0.22 Real TOT = 1.67436 Summary of Run 173 : /run/geometryModified @@ -12790,8 +12792,8 @@ Run 174 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021661s Sys=0.000000s - User TOT = 0.28 Real TOT = 1.7323 + User=0.000000s Real=0.020958s Sys=0.000000s + User TOT = 0.22 Real TOT = 1.69546 Summary of Run 174 : /run/geometryModified @@ -12860,8 +12862,8 @@ Run 175 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020640s Sys=0.000000s - User TOT = 0.28 Real TOT = 1.7531 + User=0.000000s Real=0.021147s Sys=0.000000s + User TOT = 0.22 Real TOT = 1.71675 Summary of Run 175 : /run/geometryModified @@ -12930,8 +12932,8 @@ Run 176 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021716s Sys=0.000000s - User TOT = 0.28 Real TOT = 1.77497 + User=0.000000s Real=0.021695s Sys=0.000000s + User TOT = 0.22 Real TOT = 1.73859 Summary of Run 176 : /run/geometryModified @@ -13000,8 +13002,8 @@ Run 177 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020501s Sys=0.010000s - User TOT = 0.28 Real TOT = 1.79563 + User=0.000000s Real=0.020805s Sys=0.010000s + User TOT = 0.22 Real TOT = 1.75956 Summary of Run 177 : /run/geometryModified @@ -13070,8 +13072,8 @@ Run 178 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021574s Sys=0.000000s - User TOT = 0.28 Real TOT = 1.81737 + User=0.000000s Real=0.018813s Sys=0.000000s + User TOT = 0.22 Real TOT = 1.77854 Summary of Run 178 : /run/geometryModified @@ -13140,8 +13142,8 @@ Run 179 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020576s Sys=0.000000s - User TOT = 0.28 Real TOT = 1.83811 + User=0.010000s Real=0.020691s Sys=0.000000s + User TOT = 0.23 Real TOT = 1.79938 Summary of Run 179 : /run/geometryModified @@ -13210,8 +13212,8 @@ Run 180 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021301s Sys=0.000000s - User TOT = 0.28 Real TOT = 1.85956 + User=0.000000s Real=0.021271s Sys=0.000000s + User TOT = 0.23 Real TOT = 1.82081 Summary of Run 180 : /run/geometryModified @@ -13280,8 +13282,8 @@ Run 181 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021458s Sys=0.000000s - User TOT = 0.28 Real TOT = 1.88118 + User=0.000000s Real=0.019414s Sys=0.000000s + User TOT = 0.23 Real TOT = 1.84039 Summary of Run 181 : /run/geometryModified @@ -13350,8 +13352,8 @@ Run 182 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021624s Sys=0.000000s - User TOT = 0.28 Real TOT = 1.90296 + User=0.000000s Real=0.020719s Sys=0.000000s + User TOT = 0.23 Real TOT = 1.86125 Summary of Run 182 : /run/geometryModified @@ -13420,8 +13422,8 @@ Run 183 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.020456s Sys=0.000000s - User TOT = 0.29 Real TOT = 1.92358 + User=0.010000s Real=0.021198s Sys=0.000000s + User TOT = 0.24 Real TOT = 1.88259 Summary of Run 183 : /run/geometryModified @@ -13490,8 +13492,8 @@ Run 184 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021710s Sys=0.010000s - User TOT = 0.29 Real TOT = 1.94544 + User=0.000000s Real=0.021218s Sys=0.000000s + User TOT = 0.24 Real TOT = 1.90396 Summary of Run 184 : /run/geometryModified @@ -13560,8 +13562,8 @@ Run 185 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020734s Sys=0.000000s - User TOT = 0.29 Real TOT = 1.96633 + User=0.000000s Real=0.021538s Sys=0.000000s + User TOT = 0.24 Real TOT = 1.92565 Summary of Run 185 : /run/geometryModified @@ -13630,8 +13632,8 @@ Run 186 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021472s Sys=0.000000s - User TOT = 0.29 Real TOT = 1.98795 + User=0.010000s Real=0.021118s Sys=0.000000s + User TOT = 0.25 Real TOT = 1.94693 Summary of Run 186 : /run/geometryModified @@ -13700,8 +13702,8 @@ Run 187 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.021330s Sys=0.000000s - User TOT = 0.3 Real TOT = 2.00944 + User=0.000000s Real=0.020240s Sys=0.010000s + User TOT = 0.25 Real TOT = 1.96734 Summary of Run 187 : /run/geometryModified @@ -13770,8 +13772,8 @@ Run 188 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021411s Sys=0.000000s - User TOT = 0.3 Real TOT = 2.03102 + User=0.000000s Real=0.021178s Sys=0.000000s + User TOT = 0.25 Real TOT = 1.98867 Summary of Run 188 : /run/geometryModified @@ -13840,8 +13842,8 @@ Run 189 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021010s Sys=0.000000s - User TOT = 0.3 Real TOT = 2.05219 + User=0.000000s Real=0.020530s Sys=0.000000s + User TOT = 0.25 Real TOT = 2.00935 Summary of Run 189 : /run/geometryModified @@ -13910,8 +13912,8 @@ Run 190 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020623s Sys=0.000000s - User TOT = 0.3 Real TOT = 2.07297 + User=0.000000s Real=0.023583s Sys=0.000000s + User TOT = 0.25 Real TOT = 2.03307 Summary of Run 190 : /run/geometryModified @@ -13980,8 +13982,8 @@ Run 191 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021591s Sys=0.000000s - User TOT = 0.3 Real TOT = 2.09472 + User=0.000000s Real=0.020715s Sys=0.000000s + User TOT = 0.25 Real TOT = 2.05393 Summary of Run 191 : /run/geometryModified @@ -14050,8 +14052,8 @@ Run 192 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020722s Sys=0.010000s - User TOT = 0.3 Real TOT = 2.11561 + User=0.000000s Real=0.021486s Sys=0.010000s + User TOT = 0.26 Real TOT = 2.07557 Summary of Run 192 : /run/geometryModified @@ -14120,8 +14122,8 @@ Run 193 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021060s Sys=0.000000s - User TOT = 0.3 Real TOT = 2.13683 + User=0.000000s Real=0.021028s Sys=0.000000s + User TOT = 0.26 Real TOT = 2.09675 Summary of Run 193 : /run/geometryModified @@ -14190,8 +14192,8 @@ Run 194 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021770s Sys=0.000000s - User TOT = 0.3 Real TOT = 2.15876 + User=0.000000s Real=0.022547s Sys=0.000000s + User TOT = 0.26 Real TOT = 2.11943 Summary of Run 194 : /run/geometryModified @@ -14260,8 +14262,8 @@ Run 195 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020524s Sys=0.000000s - User TOT = 0.3 Real TOT = 2.17944 + User=0.000000s Real=0.020822s Sys=0.000000s + User TOT = 0.26 Real TOT = 2.14041 Summary of Run 195 : /run/geometryModified @@ -14330,8 +14332,8 @@ Run 196 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.021465s Sys=0.000000s - User TOT = 0.31 Real TOT = 2.20105 + User=0.000000s Real=0.022918s Sys=0.000000s + User TOT = 0.26 Real TOT = 2.16352 Summary of Run 196 : /run/geometryModified @@ -14400,8 +14402,8 @@ Run 197 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021617s Sys=0.000000s - User TOT = 0.31 Real TOT = 2.22282 + User=0.000000s Real=0.019300s Sys=0.000000s + User TOT = 0.26 Real TOT = 2.18298 Summary of Run 197 : /run/geometryModified @@ -14470,8 +14472,8 @@ Run 198 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.020299s Sys=0.000000s - User TOT = 0.31 Real TOT = 2.24328 + User=0.000000s Real=0.021460s Sys=0.000000s + User TOT = 0.26 Real TOT = 2.20459 Summary of Run 198 : /run/geometryModified @@ -14540,8 +14542,8 @@ Run 199 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021443s Sys=0.000000s - User TOT = 0.31 Real TOT = 2.26488 + User=0.000000s Real=0.020964s Sys=0.000000s + User TOT = 0.26 Real TOT = 2.2257 Summary of Run 199 : /run/geometryModified @@ -14610,13 +14612,13 @@ Run 200 starts ... Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.021484s Sys=0.000000s - User TOT = 0.31 Real TOT = 2.28651 + User=0.000000s Real=0.020963s Sys=0.010000s + User TOT = 0.26 Real TOT = 2.24683 Summary of Run 200 : /score/dumpQuantityToFile boxMesh_1 eDep eDep_scorer.out Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== Number of memory pools allocated: 12 of which, static: 0 -Dynamic pools deleted: 12 / Total memory freed: 0.047 MB +Dynamic pools deleted: 12 / Total memory freed: 0.05 MB ============================================================ diff --git a/examples/advanced/gammaray_telescope/gammaraytel.out b/examples/advanced/gammaray_telescope/gammaraytel.out index 924933217a8..10c8a69358c 100644 --- a/examples/advanced/gammaray_telescope/gammaraytel.out +++ b/examples/advanced/gammaray_telescope/gammaraytel.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -43,7 +43,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -368,7 +370,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -407,7 +409,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -440,7 +442,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -527,7 +529,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -560,7 +562,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -593,7 +595,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -626,7 +628,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -659,7 +661,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV NeutronHP: /Capture file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Capture/CrossSection/6_nat_Carbon @@ -677,6 +679,7 @@ NeutronHP: /Elastic file for Z = 6, A = 12 is not found and NeutronHP will use / ProduceFissionFragments ? 0 UseWendtFissionModel ? 0 UseNRESP71Model ? 0 + UseDBRC ? 0 ======================================================= @@@ G4ParticleHPInelastic instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic @@ -711,7 +714,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -744,7 +747,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV ====================================================================== @@ -1079,12 +1082,21 @@ Threshold for very long decay time at rest 3.171e+10 y ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1312,7 +1324,7 @@ Using G4ParticleGun... Particle energy: 3.56869 LIN Particle: proton Event: 5 -Number of tracker hits in this event: 28 +Number of tracker hits in this event: 27 5 90.9818 609 10 1 -58.1071 80.6338 95.55 5 126.295 1302 10 0 -58.107 80.6353 94.15 5 119.331 609 9 1 -58.1056 80.6669 65.55 @@ -1329,4087 +1341,4618 @@ Number of tracker hits in this event: 28 5 177.999 1304 4 0 -58.1162 80.9382 -85.85 5 99.7251 609 3 1 -58.0624 81.0392 -114.45 5 162.128 1304 3 0 -58.0613 81.0421 -115.85 - 5 213.999 610 2 1 -58.0371 81.0965 -144.45 + 5 182.349 610 2 1 -58.0371 81.0965 -144.45 5 145.348 1305 2 0 -58.0368 81.0999 -145.85 5 119.874 610 1 1 -58.0376 81.1722 -174.45 5 94.9898 1305 1 0 -58.0385 81.1772 -175.85 5 126.395 609 0 1 -58.0558 81.282 -204.45 5 124.993 1306 0 0 -58.056 81.2888 -205.85 - 5 5.74363 662 0 0 108.962 -47.45 -206.037 - 5 31.5293 1592 0 1 138.656 -44.5829 -204.657 - 5 0.0228434 631 9 1 -53.6987 -137.357 65.15 - 5 11.8906 611 2 1 -57.85 81.3161 -144.826 - 5 138.461 1311 2 0 -55.6578 82.307 -145.85 - 5 55.4669 1310 2 0 -55.7248 82.25 -146.177 -Number of digits in this event: 17 + 5 10.9972 611 2 1 -57.85 81.1932 -144.831 + 5 53.6933 1312 2 0 -56.7379 82.5324 -145.85 + 5 115.44 1313 2 0 -56.6446 82.6502 -145.872 + 5 220.366 1314 2 0 -56.6044 82.85 -145.982 + 5 202.584 1315 2 0 -56.7257 83.05 -146.2 +Number of digits in this event: 16 Using G4ParticleGun... -Particle energy: 6.94646 LIN +Particle energy: 6.59539 LIN Particle: proton Event: 6 -Number of tracker hits in this event: 31 - 6 139.189 781 11 1 -23.7071 59.7875 125.55 - 6 116.349 1198 11 0 -23.7079 59.7875 124.15 - 6 317.812 781 10 1 -23.7244 59.7876 95.55 - 6 97.8804 1198 10 0 -23.7248 59.789 94.15 - 6 102.786 781 9 1 -23.732 59.8229 65.55 - 6 100.478 1198 9 0 -23.7323 59.8242 64.15 - 6 145.925 781 8 1 -23.7366 59.8499 35.55 - 6 108.019 1199 8 0 -23.7372 59.8515 34.15 - 6 116.014 781 7 1 -23.7544 59.8802 5.55 - 6 116.133 1199 7 0 -23.7558 59.8806 4.15 - 6 110.803 781 6 1 -23.7838 59.8937 -24.45 - 6 120.928 1199 6 0 -23.7792 59.8937 -25.85 - 6 118.349 781 5 1 -23.6905 59.8956 -54.45 - 6 132.571 1199 5 0 -23.6854 59.8947 -55.85 - 6 201.418 782 4 1 -23.5811 59.876 -84.45 - 6 111.011 1199 4 0 -23.5757 59.8757 -85.85 - 6 132.039 782 3 1 -23.4709 59.8709 -114.45 - 6 173.83 1199 3 0 -23.4652 59.8695 -115.85 - 6 105.092 783 2 1 -23.3445 59.8391 -144.45 - 6 152.159 1198 2 0 -23.3391 59.8368 -145.85 - 6 111.518 784 1 1 -23.231 59.7876 -174.45 - 6 312.552 1198 1 0 -23.2257 59.7855 -175.85 - 6 120.041 784 0 1 -23.1204 59.7396 -204.45 - 6 114.742 1198 0 0 -23.1136 59.7362 -205.85 - 6 91.8164 1199 1 0 -23.1114 59.85 -176.225 - 6 65.3095 1195 4 0 -23.814 59.1597 -85.85 - 6 164.993 1194 4 0 -23.8628 59.05 -86.045 - 6 144.592 1146 4 0 -40.9618 49.2581 -86.25 - 6 18.7042 1147 4 0 -41.0167 49.45 -85.9229 - 6 65.0957 693 4 1 -41.3623 49.7611 -84.85 - 6 71.8105 692 4 1 -41.45 49.8389 -84.6437 -Number of digits in this event: 14 +Number of tracker hits in this event: 27 + 6 134.138 1166 11 1 53.3971 -8.64455 125.55 + 6 121.597 857 11 0 53.3963 -8.64423 124.15 + 6 99.8436 1166 10 1 53.3809 -8.64325 95.55 + 6 106.74 857 10 0 53.3797 -8.64373 94.15 + 6 121.309 1166 9 1 53.3527 -8.65585 65.55 + 6 138.158 856 9 0 53.3524 -8.65707 64.15 + 6 301.137 1166 8 1 53.3423 -8.6803 35.55 + 6 124.179 856 8 0 53.3429 -8.68069 34.15 + 6 110.865 1166 7 1 53.3515 -8.68957 5.55 + 6 164.179 856 7 0 53.3513 -8.69023 4.15 + 6 147.02 1166 6 1 53.3457 -8.70293 -24.45 + 6 122.306 856 6 0 53.3457 -8.70203 -25.85 + 6 116.214 1166 5 1 53.3445 -8.6858 -54.45 + 6 110.757 856 5 0 53.3447 -8.68592 -55.85 + 6 114.177 1166 4 1 53.346 -8.68837 -84.45 + 6 101.759 856 4 0 53.3465 -8.68843 -85.85 + 6 122.655 1166 3 1 53.3579 -8.68618 -114.45 + 6 102.954 856 3 0 53.3598 -8.68644 -115.85 + 6 96.6677 1166 2 1 53.4025 -8.69166 -144.45 + 6 98.0614 856 2 0 53.4045 -8.6922 -145.85 + 6 118.315 1166 1 1 53.4453 -8.70161 -174.45 + 6 107.393 856 1 0 53.4468 -8.70225 -175.85 + 6 123.89 1167 0 1 53.4773 -8.71491 -204.45 + 6 141.395 856 0 0 53.4791 -8.71491 -205.85 + 6 6.16639 664 1 0 43.9323 -47.05 -176.035 + 6 19.0814 35 13 1 -173.045 164.436 185.514 + 6 14.0488 95 0 1 -161.125 -121.959 -204.635 +Number of digits in this event: 16 Using G4ParticleGun... -Particle energy: 9.57105 LIN +Particle energy: 2.24544 LIN Particle: proton Event: 7 -Number of tracker hits in this event: 27 - 7 117.96 1077 10 1 35.4892 89.5204 95.55 - 7 182.637 1347 10 0 35.4893 89.5205 94.15 - 7 89.4151 1077 9 1 35.4912 89.5227 65.55 - 7 128.247 1347 9 0 35.4912 89.5234 64.15 - 7 105.404 1077 8 1 35.4914 89.5363 35.55 - 7 95.0148 1347 8 0 35.4921 89.537 34.15 - 7 116.059 1077 7 1 35.5096 89.5487 5.55 - 7 125.43 1347 7 0 35.511 89.549 4.15 - 7 158.221 1077 6 1 35.538 89.5594 -24.45 - 7 98.2971 1347 6 0 35.5386 89.56 -25.85 - 7 115.588 1077 5 1 35.5524 89.5738 -54.45 - 7 215.513 1347 5 0 35.5529 89.5741 -55.85 - 7 121.446 1077 4 1 35.5596 89.5822 -84.45 - 7 107.886 1347 4 0 35.5603 89.5834 -85.85 - 7 110.869 1077 3 1 35.5739 89.6037 -114.45 - 7 111.015 1347 3 0 35.5747 89.6048 -115.85 - 7 121.567 1077 2 1 35.5915 89.6273 -144.45 - 7 165.903 1347 2 0 35.5918 89.6288 -145.85 - 7 222.249 1077 1 1 35.5988 89.6596 -174.45 - 7 114.416 1348 1 0 35.5993 89.6606 -175.85 - 7 104.25 1077 0 1 35.6112 89.6829 -204.45 - 7 132.256 1348 0 0 35.6123 89.6852 -205.85 - 7 203.22 1688 1 1 157.884 12.07 -174.659 - 7 28.7069 1687 1 1 157.75 12.0788 -174.642 - 7 95.0133 1680 7 0 1.8635 156.27 3.75 - 7 19.4624 911 7 1 2.4276 156.337 5.15 - 7 94.4351 912 7 1 2.45 156.355 5.22322 -Number of digits in this event: 15 +Number of tracker hits in this event: 31 + 7 123.431 1162 11 1 52.5508 -19.3687 125.55 + 7 340.007 803 11 0 52.5505 -19.3686 124.15 + 7 176.005 1162 10 1 52.5422 -19.3765 95.55 + 7 138.951 803 10 0 52.5429 -19.3795 94.15 + 7 461.798 1162 9 1 52.5563 -19.4463 65.55 + 7 98.9452 802 9 0 52.5585 -19.4512 64.15 + 7 96.552 1162 8 1 52.6115 -19.5649 35.55 + 7 121.27 802 8 0 52.6112 -19.5707 34.15 + 7 162.161 1162 7 1 52.6164 -19.6968 5.55 + 7 147.288 801 7 0 52.6182 -19.7052 4.15 + 7 127.855 1163 6 1 52.6715 -19.8771 -24.45 + 7 107.467 800 6 0 52.6762 -19.8854 -25.85 + 7 199.701 1163 5 1 52.777 -20.0249 -54.45 + 7 102.506 800 5 0 52.7791 -20.0284 -55.85 + 7 207.715 1163 4 1 52.8259 -20.095 -84.45 + 7 122.096 799 4 0 52.8276 -20.0995 -85.85 + 7 107.432 1164 3 1 52.8608 -20.1909 -114.45 + 7 102.493 799 3 0 52.8606 -20.1979 -115.85 + 7 155.161 1164 2 1 52.8769 -20.3345 -144.45 + 7 111.947 798 2 0 52.8776 -20.3408 -145.85 + 7 102.863 1164 1 1 52.8908 -20.4691 -174.45 + 7 105.349 797 1 0 52.892 -20.4728 -175.85 + 7 100.21 1164 0 1 52.92 -20.5517 -204.45 + 7 115.12 797 0 0 52.9225 -20.557 -205.85 + 7 126.256 510 2 0 105.709 -77.9378 -146.25 + 7 203.762 509 2 0 105.629 -78.05 -146.022 + 7 120.015 508 2 0 105.397 -78.25 -146.025 + 7 160.595 1162 5 1 52.65 -19.879 -54.7663 + 7 348.872 1161 5 1 52.45 -19.5429 -54.6334 + 7 44.2118 1159 8 1 52.05 -20.3337 35.2469 + 7 2.08774 1161 9 1 52.45 -19.5583 65.3263 +Number of digits in this event: 19 Using G4ParticleGun... -Particle energy: 6.27533 LIN +Particle energy: 2.433 LIN Particle: proton Event: 8 -Number of tracker hits in this event: 22 - 8 105.87 622 10 1 -55.5211 73.4962 95.55 - 8 144.456 1267 10 0 -55.5214 73.497 94.15 - 8 114.729 622 9 1 -55.5271 73.5154 65.55 - 8 116.011 1267 9 0 -55.5268 73.5164 64.15 - 8 213.935 622 8 1 -55.5258 73.5364 35.55 - 8 133.22 1267 8 0 -55.5261 73.5376 34.15 - 8 99.353 622 7 1 -55.5329 73.5592 5.55 - 8 167.742 1267 7 0 -55.5322 73.5605 4.15 - 8 111.594 622 6 1 -55.519 73.5886 -24.45 - 8 113.702 1267 6 0 -55.5191 73.5904 -25.85 - 8 126.828 622 5 1 -55.5228 73.6287 -54.45 - 8 120.33 1267 5 0 -55.5223 73.63 -55.85 - 8 99.3265 622 4 1 -55.5078 73.6597 -84.45 - 8 113.565 1268 4 0 -55.5078 73.6624 -85.85 - 8 129.71 622 3 1 -55.5038 73.7232 -114.45 - 8 148.02 1268 3 0 -55.5024 73.726 -115.85 - 8 186.908 622 2 1 -55.4741 73.7818 -144.45 - 8 122.993 1268 2 0 -55.4734 73.7872 -145.85 - 8 132.916 622 1 1 -55.4594 73.8956 -174.45 - 8 140.597 1269 1 0 -55.4589 73.9014 -175.85 - 8 192.026 622 0 1 -55.4532 74.0182 -204.45 - 8 129.704 1269 0 0 -55.4528 74.0238 -205.85 -Number of digits in this event: 15 +Number of tracker hits in this event: 20 + 8 245.042 1044 9 1 29.0144 121.551 65.55 + 8 105.903 1507 9 0 29.0158 121.554 64.15 + 8 126.238 1044 8 1 29.0484 121.619 35.55 + 8 158.267 1507 8 0 29.0506 121.622 34.15 + 8 168 1045 7 1 29.0988 121.703 5.55 + 8 118.726 1507 7 0 29.1013 121.707 4.15 + 8 115.462 1045 6 1 29.1506 121.786 -24.45 + 8 131.809 1508 6 0 29.155 121.792 -25.85 + 8 117.602 1045 5 1 29.2352 121.894 -54.45 + 8 97.9185 1508 5 0 29.2385 121.894 -55.85 + 8 146.998 1046 4 1 29.3025 121.898 -84.45 + 8 129.613 1508 4 0 29.3054 121.899 -85.85 + 8 228.884 1046 3 1 29.3568 121.895 -114.45 + 8 113.267 1508 3 0 29.36 121.897 -115.85 + 8 112.218 1046 2 1 29.4261 121.949 -144.45 + 8 111.184 1508 2 0 29.4288 121.949 -145.85 + 8 120.219 1047 1 1 29.4909 121.952 -174.45 + 8 128.349 1508 1 0 29.4928 121.947 -175.85 + 8 109.414 1047 0 1 29.541 121.853 -204.45 + 8 113.889 1508 0 0 29.5447 121.847 -205.85 +Number of digits in this event: 11 Using G4ParticleGun... -Particle energy: 9.7159 LIN +Particle energy: 6.49465 LIN Particle: proton Event: 9 -Number of tracker hits in this event: 31 - 9 203.388 783 10 1 -23.4205 -89.6485 95.55 - 9 122.871 452 10 0 -23.421 -89.6484 94.15 - 9 118.513 783 9 1 -23.4308 -89.6447 65.55 - 9 105.546 452 9 0 -23.4301 -89.6441 64.15 - 9 125.22 783 8 1 -23.413 -89.6325 35.55 - 9 122.006 452 8 0 -23.4127 -89.6317 34.15 - 9 114.327 783 7 1 -23.4043 -89.616 5.55 - 9 110.592 452 7 0 -23.4034 -89.6152 4.15 - 9 293.368 783 6 1 -23.3855 -89.6036 -24.45 - 9 103.247 452 6 0 -23.3858 -89.6025 -25.85 - 9 100.257 783 5 1 -23.3952 -89.5823 -54.45 - 9 121.056 452 5 0 -23.3958 -89.5819 -55.85 - 9 105.379 783 4 1 -23.4109 -89.5711 -84.45 - 9 128.415 452 4 0 -23.4112 -89.5698 -85.85 - 9 102.023 783 3 1 -23.4141 -89.5407 -114.45 - 9 100.178 452 3 0 -23.4135 -89.539 -115.85 - 9 93.1785 783 2 1 -23.398 -89.5046 -144.45 - 9 126.062 452 2 0 -23.397 -89.5022 -145.85 - 9 89.5415 783 1 1 -23.3754 -89.4532 -174.45 - 9 125.861 452 1 0 -23.3746 -89.4526 -175.85 - 9 201.886 783 0 1 -23.3562 -89.4394 -204.45 - 9 241.469 453 0 0 -23.355 -89.4395 -205.85 - 9 86.6633 1048 3 0 -20.1125 29.65 -116.082 - 9 92.9882 803 3 1 -19.3476 29.3135 -114.85 - 9 78.8701 804 3 1 -19.25 29.3239 -114.649 - 9 60.6859 805 3 1 -19.0499 29.2939 -114.598 - 9 28.7945 1381 2 0 1.29428 96.5094 -145.969 - 9 107.451 459 0 0 -23.0284 -88.2498 -205.85 - 9 127.311 460 0 0 -22.9368 -88.05 -206.014 - 9 35.5715 750 0 0 -4.19047 -29.8938 -206.25 - 9 193.281 751 0 0 -4.17507 -29.85 -206.212 -Number of digits in this event: 16 -Using G4ParticleGun... -Particle energy: 9.95745 LIN +Number of tracker hits in this event: 62 + 9 105.392 618 11 1 -56.3267 25.7337 125.55 + 9 151.623 1028 11 0 -56.3265 25.7341 124.15 + 9 122.77 618 10 1 -56.3198 25.7476 95.55 + 9 130.766 1028 10 0 -56.3181 25.7481 94.15 + 9 135.387 618 9 1 -56.2828 25.7574 65.55 + 9 104.539 1028 9 0 -56.2823 25.7579 64.15 + 9 240.59 618 8 1 -56.272 25.771 35.55 + 9 108.617 1028 8 0 -56.2711 25.7727 34.15 + 9 102.899 619 7 1 -56.2469 25.8099 5.55 + 9 246.294 1028 7 0 -56.2455 25.8109 4.15 + 9 107.657 619 6 1 -56.2176 25.8321 -24.45 + 9 143.437 1028 6 0 -56.2167 25.8326 -25.85 + 9 84.4803 619 5 1 -56.1991 25.846 -54.45 + 9 86.0366 1028 5 0 -56.1978 25.8465 -55.85 + 9 130.132 619 4 1 -56.1728 25.8532 -84.45 + 9 102.314 1029 4 0 -56.1706 25.8532 -85.85 + 9 114.707 619 3 1 -56.1233 25.8547 -114.45 + 9 139.018 1029 3 0 -56.1211 25.8543 -115.85 + 9 110.795 619 2 1 -56.0782 25.8427 -144.45 + 9 118.682 1028 2 0 -56.0755 25.8418 -145.85 + 9 126.312 620 1 1 -56.0217 25.8216 -174.45 + 9 159.23 1028 1 0 -56.019 25.821 -175.85 + 9 215.516 620 0 1 -55.9661 25.8099 -204.45 + 9 128.93 1028 0 0 -55.9641 25.8084 -205.85 + 9 16.3746 1211 4 0 6.33433 62.2666 -86.0694 + 9 60.9987 790 7 0 -59.7434 -21.9484 3.75 + 9 139.78 791 7 0 -59.5386 -21.85 3.85283 + 9 92.7505 610 7 1 -58.0293 -21.3251 5.15 + 9 65.772 611 7 1 -57.85 -21.3051 5.28151 + 9 79.5788 612 7 1 -57.65 -21.2923 5.38701 + 9 64.7651 613 7 1 -57.45 -21.2313 5.48539 + 9 80.873 614 7 1 -57.25 -21.1131 5.46616 + 9 51.5233 615 7 1 -57.05 -20.9696 5.25239 + 9 68.2217 799 7 0 -56.1515 -20.1768 4.15 + 9 122.968 800 7 0 -56.011 -20.05 3.96304 + 9 87.0137 642 7 0 -121.535 -51.5411 3.75071 + 9 378.306 293 7 1 -121.512 -51.5414 5.15 + 9 144.484 292 7 1 -121.585 -51.5352 5.54995 + 9 88.5212 294 7 1 -121.35 -50.4506 5.28174 + 9 310.552 295 7 1 -121.15 -50.4665 5.18428 + 9 157.689 1433 13 0 55.6216 106.762 183.75 + 9 22.8845 1075 7 0 91.5751 35.25 4.01801 + 9 39.5536 1055 3 0 120.218 31.1751 -115.85 + 9 124.765 1074 7 0 91.4007 35.05 3.91675 + 9 14.1389 938 7 0 56.3601 7.82544 3.75017 + 9 258.307 939 7 0 56.3604 7.85014 3.78025 + 9 10.5033 845 2 0 -51.7153 -11.0486 -146.064 + 9 76.8045 638 0 1 -52.3744 -97.6597 -204.483 + 9 177.791 1595 13 1 139.153 94.3453 185.15 + 9 149.01 1148 1 1 49.65 118.606 -174.813 + 9 242.409 1149 1 1 49.8501 118.761 -174.618 + 9 13.6869 1150 1 1 50.05 118.911 -174.46 + 9 336.328 1491 1 0 49.2878 118.549 -175.85 + 9 19.3959 1382 1 0 -34.7017 96.5658 -176.25 + 9 83.3002 1381 1 0 -34.7134 96.55 -176.206 + 9 252.538 1380 1 0 -34.7517 96.35 -176.134 + 9 85.0384 1087 3 0 -34.7557 37.4758 -116.25 + 9 109.972 1041 8 0 -57.0219 28.2926 34.15 + 9 24.6019 626 8 1 -54.7311 26.8813 35.1501 + 9 11.5977 1040 8 0 -54.5707 28.1385 34.15 + 9 35.3949 637 8 1 -52.4524 28.7024 35.15 + 9 16.2089 619 8 1 -56.25 25.8276 35.3451 +Number of digits in this event: 30 +Using G4ParticleGun... +Particle energy: 8.29848 LIN Particle: proton Event: 10 -Number of tracker hits in this event: 23 - 10 122.514 430 10 1 -94.1479 -33.4587 95.55 - 10 132.614 732 10 0 -94.1474 -33.4584 94.15 - 10 120.405 430 9 1 -94.1355 -33.453 65.55 - 10 129.868 732 9 0 -94.1343 -33.4522 64.15 - 10 114.157 430 8 1 -94.1073 -33.4378 35.55 - 10 196.236 733 8 0 -94.1053 -33.4362 34.15 - 10 160.566 430 7 1 -94.0625 -33.4015 5.55 - 10 197.651 733 7 0 -94.0623 -33.3993 4.15 - 10 154.698 430 6 1 -94.0534 -33.3557 -24.45 - 10 127.921 733 6 0 -94.0535 -33.3547 -25.85 - 10 124.589 430 5 1 -94.0544 -33.3316 -54.45 - 10 106.355 733 5 0 -94.0547 -33.3305 -55.85 - 10 125.27 430 4 1 -94.0605 -33.3062 -84.45 - 10 99.8403 733 4 0 -94.0608 -33.306 -85.85 - 10 167.934 430 3 1 -94.0682 -33.3049 -114.45 - 10 100.804 733 3 0 -94.0695 -33.3042 -115.85 - 10 140.655 430 2 1 -94.0958 -33.2933 -144.45 - 10 145.564 733 2 0 -94.0972 -33.2928 -145.85 - 10 140.117 430 1 1 -94.1275 -33.2813 -174.45 - 10 100.922 733 1 0 -94.1298 -33.2808 -175.85 - 10 208.317 429 0 1 -94.1765 -33.2734 -204.45 - 10 111.084 733 0 0 -94.1777 -33.2726 -205.85 - 10 57.2021 644 7 0 -77.1054 -51.0918 3.75 -Number of digits in this event: 17 +Number of tracker hits in this event: 44 + 10 220.237 866 11 1 -6.6866 62.361 125.55 + 10 175.368 1211 11 0 -6.68598 62.3604 124.15 + 10 108.084 866 10 1 -6.68692 62.338 95.55 + 10 99.0663 1211 10 0 -6.68734 62.3366 94.15 + 10 109.408 866 9 1 -6.69547 62.3056 65.55 + 10 119.34 1211 9 0 -6.69475 62.3045 64.15 + 10 187.499 866 8 1 -6.67905 62.2836 35.55 + 10 109.122 1211 8 0 -6.67831 62.2835 34.15 + 10 112.834 866 7 1 -6.66522 62.2807 5.55 + 10 140.822 1211 7 0 -6.66523 62.2803 4.15 + 10 102.657 866 6 1 -6.66705 62.2727 -24.45 + 10 123.705 1211 6 0 -6.66751 62.2721 -25.85 + 10 183.492 866 5 1 -6.6747 62.2593 -54.45 + 10 189.77 1211 5 0 -6.6748 62.2583 -55.85 + 10 115.435 866 4 1 -6.678 62.2375 -84.45 + 10 164.729 1210 4 0 -6.67719 62.2366 -85.85 + 10 117.35 866 3 1 -6.65514 62.2197 -114.45 + 10 155.298 1210 3 0 -6.65459 62.2175 -115.85 + 10 126.992 867 2 1 -6.63996 62.1736 -144.45 + 10 89.5294 1210 2 0 -6.6392 62.1715 -145.85 + 10 226.303 867 1 1 -6.62176 62.129 -174.45 + 10 166.83 1210 1 0 -6.62018 62.1268 -175.85 + 10 115.863 867 0 1 -6.58825 62.0811 -204.45 + 10 167.232 1210 0 0 -6.58648 62.0783 -205.85 + 10 252.937 866 1 1 -6.66055 62.1681 -174.45 + 10 389.758 865 1 1 -6.85 62.38 -174.514 + 10 411.137 864 1 1 -7.05097 62.6817 -174.608 + 10 66.9531 863 1 1 -7.25 63.03 -174.697 + 10 11.3286 1338 1 0 -4.35749 87.7971 -175.85 + 10 42.8618 885 1 1 -2.86187 103.708 -174.85 + 10 58.093 886 1 1 -2.8499 103.809 -174.839 + 10 71.2172 1455 1 0 -0.244582 111.152 -175.85 + 10 53.796 1456 1 0 -0.170076 111.35 -175.854 + 10 52.7063 1457 1 0 -0.10951 111.55 -175.883 + 10 70.1851 1458 1 0 -0.0530068 111.75 -175.888 + 10 31.8585 1461 1 0 -0.0500856 112.437 -175.986 + 10 97.4834 1462 1 0 -0.0722752 112.55 -176.016 + 10 98.7081 1463 1 0 -0.0906593 112.75 -176.106 + 10 54.8432 1464 1 0 -0.10158 112.95 -176.234 + 10 231.605 900 1 1 0.234964 112.867 -174.85 + 10 125.258 901 1 1 0.250163 113.317 -174.548 + 10 134.992 902 1 1 0.45005 113.482 -174.545 + 10 109.746 903 1 1 0.650106 113.531 -174.569 + 10 42.303 1210 5 0 -6.86221 62.2416 -55.8502 +Number of digits in this event: 21 Using G4ParticleGun... -Particle energy: 2.67562 LIN +Particle energy: 8.64354 LIN Particle: proton Event: 11 -Number of tracker hits in this event: 22 - 11 131.193 352 10 1 -109.606 -18.8885 95.55 - 11 122.65 805 10 0 -109.606 -18.8897 94.15 - 11 111.571 352 9 1 -109.616 -18.9142 65.55 - 11 207.991 805 9 0 -109.615 -18.9149 64.15 - 11 126.839 352 8 1 -109.596 -18.9267 35.55 - 11 108.316 805 8 0 -109.595 -18.9285 34.15 - 11 124.541 352 7 1 -109.565 -18.9669 5.55 - 11 123.653 805 7 0 -109.563 -18.9692 4.15 - 11 94.1909 353 6 1 -109.519 -19.008 -24.45 - 11 100.212 805 6 0 -109.516 -19.0115 -25.85 - 11 150.575 353 5 1 -109.45 -19.0803 -54.45 - 11 117.428 804 5 0 -109.449 -19.0829 -55.85 - 11 111.1 353 4 1 -109.435 -19.1347 -84.45 - 11 166.144 804 4 0 -109.431 -19.1359 -85.85 - 11 217.092 353 3 1 -109.355 -19.1552 -114.45 - 11 166.718 804 3 0 -109.353 -19.1565 -115.85 - 11 114.35 354 2 1 -109.311 -19.1843 -144.45 - 11 116.024 804 2 0 -109.308 -19.1795 -145.85 - 11 225.569 354 1 1 -109.243 -19.0905 -174.45 - 11 193.59 804 1 0 -109.24 -19.0887 -175.85 - 11 176 354 0 1 -109.177 -19.0615 -204.45 - 11 114.503 804 0 0 -109.174 -19.0631 -205.85 -Number of digits in this event: 14 +Number of tracker hits in this event: 41 + 11 113.409 534 11 1 -73.074 -28.3755 125.55 + 11 132.095 758 11 0 -73.0737 -28.3751 124.15 + 11 238.54 534 10 1 -73.0639 -28.3677 95.55 + 11 106.338 758 10 0 -73.0631 -28.367 94.15 + 11 90.5909 535 9 1 -73.0484 -28.3485 65.55 + 11 125.732 758 9 0 -73.0472 -28.3477 64.15 + 11 121.116 535 8 1 -73.0237 -28.3293 35.55 + 11 97.7925 758 8 0 -73.0228 -28.3281 34.15 + 11 145.745 535 7 1 -73.0058 -28.2974 5.55 + 11 170.585 758 7 0 -73.0051 -28.2957 4.15 + 11 115.85 535 6 1 -72.9898 -28.2628 -24.45 + 11 99.6636 758 6 0 -72.9884 -28.2617 -25.85 + 11 127.458 535 5 1 -72.9614 -28.2372 -54.45 + 11 109.087 759 5 0 -72.96 -28.2363 -55.85 + 11 111.107 535 4 1 -72.9295 -28.2156 -84.45 + 11 105.157 759 4 0 -72.9279 -28.2151 -85.85 + 11 123.987 535 3 1 -72.894 -28.2026 -114.45 + 11 212.435 759 3 0 -72.8938 -28.201 -115.85 + 11 190.384 535 2 1 -72.8923 -28.1712 -144.45 + 11 114.707 759 2 0 -72.8928 -28.1696 -145.85 + 11 139.345 535 1 1 -72.8985 -28.1377 -174.45 + 11 106.477 759 1 0 -72.8986 -28.1361 -175.85 + 11 183.096 535 0 1 -72.9003 -28.1017 -204.45 + 11 113.428 759 0 0 -72.9006 -28.0987 -205.85 + 11 97.2641 536 1 1 -72.85 -28.1564 -174.534 + 11 4.12886 537 1 1 -72.65 -28.2245 -174.841 + 11 94.7843 757 1 0 -71.9609 -28.5654 -175.85 + 11 65.9968 756 1 0 -71.8215 -28.65 -176.065 + 11 53.3294 657 0 1 -48.6158 -40.7915 -204.45 + 11 83.1014 658 0 1 -48.45 -40.8116 -204.597 + 11 49.0621 659 0 1 -48.25 -40.8172 -204.766 + 11 366.069 695 0 0 -46.9038 -40.9368 -205.85 + 11 27.0606 694 0 0 -46.9484 -41.05 -206.185 + 11 419.579 760 3 0 -72.8436 -28.05 -116.164 + 11 36.4722 761 3 0 -72.718 -27.8497 -116.208 + 11 141.592 761 10 0 -73.596 -27.8485 94.15 + 11 140.204 464 9 1 -87.1603 -15.5973 65.55 + 11 137.338 465 9 1 -87.05 -15.2801 65.387 + 11 99.1912 830 9 0 -86.5559 -13.9428 64.1499 + 11 82.9852 831 9 0 -86.5266 -13.85 64.0589 + 11 54.2352 832 9 0 -86.4822 -13.65 63.8592 +Number of digits in this event: 18 Using G4ParticleGun... -Particle energy: 6.52125 LIN +Particle energy: 7.60512 LIN Particle: proton Event: 12 -Number of tracker hits in this event: 26 - 12 189.772 983 11 1 16.8205 -47.6209 125.55 - 12 120.095 662 11 0 16.8205 -47.6208 124.15 - 12 142.246 983 10 1 16.8199 -47.6135 95.55 - 12 179.782 662 10 0 16.8208 -47.6128 94.15 - 12 107.205 983 9 1 16.839 -47.6002 65.55 - 12 106.437 662 9 0 16.8396 -47.6003 64.15 - 12 120.86 984 8 1 16.8543 -47.6018 35.55 - 12 134.58 662 8 0 16.8549 -47.602 34.15 - 12 186.42 984 7 1 16.8604 -47.6027 5.55 - 12 259.965 662 7 0 16.8612 -47.6033 4.15 - 12 155.204 984 6 1 16.8741 -47.6155 -24.45 - 12 180.553 662 6 0 16.8751 -47.6167 -25.85 - 12 113.677 984 5 1 16.895 -47.6387 -54.45 - 12 111.266 662 5 0 16.8948 -47.6395 -55.85 - 12 139.169 984 4 1 16.8863 -47.6522 -84.45 - 12 111.521 661 4 0 16.8851 -47.6518 -85.85 - 12 304.16 984 3 1 16.861 -47.6438 -114.45 - 12 141.013 662 3 0 16.86 -47.6425 -115.85 - 12 93.3721 983 2 1 16.8431 -47.6184 -144.45 - 12 263.587 662 2 0 16.8428 -47.6165 -145.85 - 12 101.87 983 1 1 16.8389 -47.5782 -174.45 - 12 152.771 662 1 0 16.8374 -47.576 -175.85 - 12 87.526 983 0 1 16.8076 -47.5269 -204.45 - 12 160.98 662 0 0 16.806 -47.5256 -205.85 - 12 60.1071 983 7 1 16.8499 -47.651 5.31858 - 12 102.372 889 7 1 -2.05 -8.17508 5.25904 -Number of digits in this event: 17 +Number of tracker hits in this event: 22 + 12 131.165 811 10 1 -17.7377 102.508 95.55 + 12 101.153 1411 10 0 -17.7371 102.508 94.15 + 12 122.65 811 9 1 -17.7243 102.522 65.55 + 12 103.709 1411 9 0 -17.724 102.522 64.15 + 12 116.256 811 8 1 -17.7146 102.523 35.55 + 12 87.9805 1411 8 0 -17.713 102.523 34.15 + 12 129.208 811 7 1 -17.6813 102.511 5.55 + 12 124.644 1411 7 0 -17.6808 102.508 4.15 + 12 103.094 811 6 1 -17.6686 102.453 -24.45 + 12 114.86 1411 6 0 -17.669 102.45 -25.85 + 12 119.149 811 5 1 -17.6717 102.377 -54.45 + 12 194.79 1411 5 0 -17.6716 102.374 -55.85 + 12 103.494 811 4 1 -17.669 102.299 -84.45 + 12 134.121 1410 4 0 -17.6681 102.295 -85.85 + 12 182.665 812 3 1 -17.6483 102.218 -114.45 + 12 122.338 1410 3 0 -17.6467 102.214 -115.85 + 12 104.802 812 2 1 -17.6124 102.133 -144.45 + 12 120.316 1409 2 0 -17.6102 102.13 -145.85 + 12 123.643 812 1 1 -17.5664 102.06 -174.45 + 12 93.1425 1409 1 0 -17.5648 102.054 -175.85 + 12 93.9538 812 0 1 -17.5299 101.941 -204.45 + 12 122.269 1408 0 0 -17.5285 101.935 -205.85 +Number of digits in this event: 12 Using G4ParticleGun... -Particle energy: 7.62051 LIN +Particle energy: 1.02036 LIN Particle: proton Event: 13 -Number of tracker hits in this event: 50 - 13 139.336 1393 8 1 98.8044 -95.0474 35.55 - 13 96.0146 425 8 0 98.8047 -95.0476 34.15 - 13 109.301 1393 7 1 98.8116 -95.0533 5.55 - 13 124.827 425 7 0 98.8116 -95.0528 4.15 - 13 606.074 1393 6 1 98.8149 -95.0454 -24.45 - 13 106.766 425 6 0 98.8151 -95.0458 -25.85 - 13 128.54 1393 5 1 98.8157 -95.0567 -54.45 - 13 93.5966 425 5 0 98.8152 -95.0574 -55.85 - 13 105.726 1393 4 1 98.8009 -95.0724 -84.45 - 13 137.694 425 4 0 98.801 -95.0725 -85.85 - 13 153.705 1393 3 1 98.8024 -95.0732 -114.45 - 13 114.307 425 3 0 98.8015 -95.0735 -115.85 - 13 137.118 1393 2 1 98.7834 -95.0836 -144.45 - 13 122.454 425 2 0 98.7831 -95.0825 -145.85 - 13 120.092 1393 1 1 98.7811 -95.0614 -174.45 - 13 125.164 425 1 0 98.7802 -95.0601 -175.85 - 13 116.552 1393 0 1 98.7586 -95.0276 -204.45 - 13 554.312 425 0 0 98.7577 -95.0275 -205.85 - 13 113.19 645 4 0 -37.2503 -50.9151 -85.9307 - 13 124.381 51 0 0 99.0365 -169.925 -206.25 - 13 431.713 818 6 1 -16.3015 143.558 -24.85 - 13 28.5398 1708 7 0 -29.9633 161.905 3.75 - 13 280.396 1709 7 0 -29.994 161.95 3.80327 - 13 67.479 1710 7 0 -30.0736 162.15 3.85189 - 13 7.07447 562 0 0 157.661 -67.4521 -206.25 - 13 371.16 563 0 0 157.665 -67.45 -206.247 - 13 104.79 564 0 0 158.047 -67.25 -205.94 - 13 159.774 1696 0 1 159.402 -66.5408 -204.85 - 13 183.336 1697 0 1 159.55 -66.4633 -204.731 - 13 314.227 1698 0 1 159.75 -66.3578 -204.569 - 13 56.7889 1679 0 0 67.2188 155.998 -206.25 - 13 345.595 1680 0 0 67.3011 156.15 -206.057 - 13 339.347 1235 0 1 67.1307 156.787 -204.85 - 13 3.34054 1234 0 1 67.05 156.936 -204.703 - 13 24.3739 818 2 0 131.018 -16.3204 -146.25 - 13 82.0633 819 2 0 130.996 -16.25 -146.171 - 13 57.0234 820 2 0 130.877 -16.0497 -145.968 - 13 579.951 1551 2 1 130.371 -14.3664 -144.85 - 13 242.681 834 2 0 130.532 -13.1378 -145.85 - 13 177.905 849 2 0 112.978 -10.0921 -146.25 - 13 201.493 850 2 0 112.854 -10.05 -145.897 - 13 209.476 833 2 0 130.679 -13.25 -146.158 - 13 118.962 1550 2 1 130.35 -14.122 -144.706 - 13 1.8922 1065 11 1 33.25 97.3132 125.46 - 13 11.6041 1671 14 0 -53.2891 154.35 214.016 - 13 104.607 1670 14 0 -53.3271 154.35 214.054 - 13 30.8221 627 14 1 -54.6057 154.044 215.15 - 13 335.837 626 14 1 -54.65 154.025 215.212 - 13 26.6979 625 14 1 -54.85 153.982 215.312 - 13 25.2736 1372 6 0 111.164 94.55 -26.032 -Number of digits in this event: 29 -Using G4ParticleGun... -Particle energy: 7.65021 LIN +Number of tracker hits in this event: 26 + 13 111.532 992 11 1 18.6452 -71.6599 125.55 + 13 112.664 541 11 0 18.6421 -71.6608 124.15 + 13 431.905 992 10 1 18.5875 -71.6756 95.55 + 13 153.512 541 10 0 18.5888 -71.6741 94.15 + 13 133.537 992 9 1 18.595 -71.6409 65.55 + 13 217.333 542 9 0 18.5982 -71.64 64.15 + 13 131.952 993 8 1 18.6793 -71.6203 35.55 + 13 121.155 542 8 0 18.6807 -71.625 34.15 + 13 142.584 993 7 1 18.735 -71.7241 5.55 + 13 176.342 541 7 0 18.7329 -71.7301 4.15 + 13 133.951 993 6 1 18.705 -71.8289 -24.45 + 13 132.49 541 6 0 18.7087 -71.8371 -25.85 + 13 169.881 993 5 1 18.7771 -72.0113 -54.45 + 13 131.913 540 5 0 18.7841 -72.0166 -55.85 + 13 128.228 994 4 1 18.9173 -72.1415 -84.45 + 13 116.736 539 4 0 18.9251 -72.1467 -85.85 + 13 133.501 995 3 1 19.0982 -72.2706 -114.45 + 13 144.9 538 3 0 19.1012 -72.279 -115.85 + 13 137.118 995 2 1 19.175 -72.4472 -144.45 + 13 143.658 537 2 0 19.1798 -72.4572 -145.85 + 13 188.801 996 1 1 19.2767 -72.6678 -174.45 + 13 180.943 536 1 0 19.288 -72.6768 -175.85 + 13 164.499 997 0 1 19.4962 -72.8409 -204.45 + 13 132.125 535 0 0 19.5128 -72.8502 -205.85 + 13 117.642 542 10 0 18.6251 -71.65 93.9145 + 13 145.91 543 10 0 18.9265 -71.45 93.8307 +Number of digits in this event: 23 +Using G4ParticleGun... +Particle energy: 6.83167 LIN Particle: proton Event: 14 -Number of tracker hits in this event: 18 - 14 139.991 801 8 1 -19.7431 -135.94 35.55 - 14 133.591 221 8 0 -19.743 -135.941 34.15 - 14 101.49 801 7 1 -19.7423 -135.952 5.55 - 14 96.6826 220 7 0 -19.7432 -135.955 4.15 - 14 102.337 801 6 1 -19.7647 -136.018 -24.45 - 14 163.926 220 6 0 -19.765 -136.021 -25.85 - 14 108.716 801 5 1 -19.7727 -136.086 -54.45 - 14 120.147 220 5 0 -19.773 -136.089 -55.85 - 14 135.325 801 4 1 -19.7807 -136.143 -84.45 - 14 136.708 220 4 0 -19.7803 -136.146 -85.85 - 14 131.113 801 3 1 -19.7732 -136.21 -114.45 - 14 106.076 219 3 0 -19.773 -136.213 -115.85 - 14 140.207 801 2 1 -19.7701 -136.271 -144.45 - 14 120.476 219 2 0 -19.7707 -136.273 -145.85 - 14 137.394 801 1 1 -19.7892 -136.329 -174.45 - 14 133.408 219 1 0 -19.7898 -136.331 -175.85 - 14 111.945 801 0 1 -19.7991 -136.388 -204.45 - 14 110.474 218 0 0 -19.7999 -136.391 -205.85 -Number of digits in this event: 13 -Using G4ParticleGun... -Particle energy: 3.3195 LIN +Number of tracker hits in this event: 484 + 14 12491 411 10 1 -97.9355 51.9842 95.55 + 14 26387.4 410 10 1 -97.95 51.9842 95.3939 + 14 24247.3 409 10 1 -98.15 51.9834 95.5496 + 14 2129.14 1158 11 0 -136.483 51.7005 123.75 + 14 469.339 208 11 1 -138.428 51.6866 125.15 + 14 713.6 207 11 1 -138.55 51.6857 125.237 + 14 799.207 206 11 1 -138.75 51.6847 125.381 + 14 112.569 205 11 1 -138.95 51.6845 125.527 + 14 1350.76 1176 12 0 -174.291 55.4173 153.75 + 14 873.472 1177 12 0 -174.597 55.45 153.995 + 14 524.003 20 12 1 -176.037 55.602 155.15 + 14 1007.25 19 12 1 -176.15 55.6138 155.24 + 14 824.999 18 12 1 -176.35 55.634 155.4 + 14 1041.06 412 10 1 -97.75 51.7879 95.1781 + 14 2810.07 1153 10 0 -96.8316 50.7736 94.15 + 14 3645.19 1152 10 0 -96.7196 50.65 94.0246 + 14 1416.24 1151 10 0 -96.5378 50.45 93.823 + 14 1067.47 547 9 1 -70.6031 21.7632 65.55 + 14 1380.18 548 9 1 -70.45 21.6006 65.4017 + 14 350.588 549 9 1 -70.25 21.3842 65.2027 + 14 1076.3 1000 9 0 -69.2211 20.2148 64.15 + 14 1382.92 999 9 0 -69.0763 20.05 64.0017 + 14 495.637 998 9 0 -68.9032 19.85 63.8201 + 14 432.251 690 8 1 -41.8913 -11.7747 35.55 + 14 2422.16 691 8 1 -41.85 -11.8372 35.4859 + 14 116.682 692 8 1 -41.65 -12.1569 35.1631 + 14 897.127 834 8 0 -41.0128 -13.1485 34.15 + 14 1759.28 833 8 0 -40.9476 -13.25 34.0463 + 14 834.968 832 8 0 -40.8174 -13.45 33.8417 + 14 641.948 783 7 1 -23.2709 -39.9941 5.55 + 14 5769.56 784 7 1 -23.25 -40.0305 5.50507 + 14 4875.14 694 7 0 -22.6673 -41.0951 4.15 + 14 4183.32 693 7 0 -22.5747 -41.25 3.95681 + 14 4314.98 1159 10 0 -96.5076 52.0315 94.15 + 14 1854.51 1160 10 0 -96.1533 52.05 93.8458 + 14 344.213 1177 10 0 -98.1976 55.5396 94.15 + 14 541.044 1178 10 0 -98.2058 55.65 94.1118 + 14 592.34 1179 10 0 -98.2204 55.85 94.0429 + 14 488.412 1180 10 0 -98.2357 56.05 93.9737 + 14 455.418 1181 10 0 -98.2502 56.25 93.905 + 14 656.417 1182 10 0 -98.2653 56.45 93.8359 + 14 154.278 1183 10 0 -98.2803 56.65 93.767 + 14 1769.21 379 9 1 -104.285 139.35 65.55 + 14 2625.77 378 9 1 -104.35 139.943 65.3727 + 14 336.219 1620 9 0 -104.72 144.249 64.15 + 14 565.143 1621 9 0 -104.728 144.35 64.1215 + 14 618.288 1622 9 0 -104.745 144.55 64.0651 + 14 721.311 1623 9 0 -104.762 144.75 64.0079 + 14 705.062 1624 9 0 -104.779 144.95 63.9504 + 14 666.664 1625 9 0 -104.795 145.15 63.8914 + 14 652.784 1626 9 0 -104.81 145.35 63.8341 + 14 276.196 1627 9 0 -104.824 145.55 63.7772 + 14 489.654 1167 10 0 -98.488 53.5869 94.15 + 14 1881.78 1168 10 0 -98.51 53.65 94.1011 + 14 1960.8 1169 10 0 -98.5833 53.85 93.943 + 14 440.956 1170 10 0 -98.6529 54.05 93.7868 + 14 844.759 1196 11 0 -73.1269 59.3492 123.75 + 14 10.8667 1197 11 0 -72.7823 59.45 124.143 + 14 74.7707 540 11 1 -71.889 59.7248 125.15 + 14 490.958 541 11 1 -71.85 59.7368 125.194 + 14 210.801 542 11 1 -71.65 59.7987 125.419 + 14 748.307 1232 12 0 -50.4759 66.459 153.75 + 14 409.958 653 12 1 -49.4186 66.783 155.15 + 14 414.156 654 12 1 -49.25 66.8342 155.372 + 14 852.912 1262 13 0 -24.9921 72.5662 183.75 + 14 346.142 781 13 1 -23.8067 72.8542 185.15 + 14 448.396 782 13 1 -23.65 72.8928 185.336 + 14 850.085 1286 14 0 0.05 77.2949 213.789 + 14 149.785 905 14 1 1.19061 77.5013 215.15 + 14 497.036 906 14 1 1.25 77.512 215.221 + 14 230.3 907 14 1 1.45 77.5478 215.459 + 14 385.993 1150 10 0 -100.156 50.25 93.7849 + 14 599.782 203 9 1 -139.353 18.8258 65.55 + 14 757.328 202 9 1 -139.55 18.6712 65.411 + 14 593.854 201 9 1 -139.75 18.5157 65.271 + 14 203.313 986 9 0 -141.365 17.2844 64.15 + 14 827.776 985 9 0 -141.41 17.25 64.1187 + 14 972.729 984 9 0 -141.671 17.05 63.936 + 14 26.8362 983 9 0 -141.93 16.85 63.7555 + 14 34.5383 1154 10 0 -97.7364 50.853 94.15 + 14 2906.93 1162 10 0 -97.7221 52.5281 94.15 + 14 1309.2 1163 10 0 -97.674 52.65 93.8742 + 14 1440.94 437 9 1 -92.572 65.2557 65.55 + 14 2791.13 438 9 1 -92.55 65.3179 65.4182 + 14 2699.28 1229 9 0 -92.3392 65.9176 64.15 + 14 1104.35 1230 9 0 -92.2925 66.05 63.8702 + 14 1320.67 462 8 1 -87.4715 79.6904 35.55 + 14 3452.86 463 8 1 -87.45 79.7429 35.4399 + 14 2390.26 1301 8 0 -87.1958 80.3524 34.15 + 14 2100.55 1302 8 0 -87.1548 80.45 33.9425 + 14 4892.79 493 7 1 -81.3112 93.9228 5.55 + 14 1043.8 494 7 1 -81.25 94.1075 5.22311 + 14 688.633 1372 7 0 -81.0471 94.7239 4.15 + 14 5134.33 1373 7 0 -81.0385 94.75 4.10456 + 14 77.4841 1374 7 0 -80.9713 94.95 3.75594 + 14 1541.21 524 6 1 -75.0671 111.26 -24.45 + 14 6605.13 525 6 1 -75.05 111.31 -24.532 + 14 499.715 1459 6 0 -74.7606 112.135 -25.85 + 14 7409 1460 6 0 -74.7552 112.15 -25.8747 + 14 1373.38 1461 6 0 -74.6825 112.35 -26.1958 + 14 58.6331 404 9 1 -99.34 56.191 65.55 + 14 47.1686 403 9 1 -99.35 56.221 65.3412 + 14 104.962 1181 9 0 -99.4078 56.3919 64.15 + 14 120.284 396 8 1 -100.811 60.508 35.55 + 14 123.807 1203 8 0 -100.878 60.7145 34.15 + 14 127.012 389 7 1 -102.253 64.9395 5.55 + 14 164.399 1225 7 0 -102.319 65.1494 4.15 + 14 186.951 382 6 1 -103.66 69.4448 -24.45 + 14 113.179 1248 6 0 -103.729 69.6585 -25.85 + 14 71.0348 375 5 1 -105.138 74.0082 -54.45 + 14 81.7406 374 5 1 -105.15 74.0436 -54.6845 + 14 55.4128 1270 5 0 -105.21 74.2196 -55.85 + 14 63.2185 1271 5 0 -105.221 74.25 -56.0515 + 14 127.933 367 4 1 -106.685 78.5434 -84.45 + 14 115.835 1293 4 0 -106.757 78.7529 -85.85 + 14 127.848 359 3 1 -108.239 83.0429 -114.45 + 14 138.32 1316 3 0 -108.308 83.2553 -115.85 + 14 186.502 352 2 1 -109.701 87.5855 -144.45 + 14 172.045 1338 2 0 -109.769 87.7986 -145.85 + 14 20.1391 1339 2 0 -109.785 87.85 -146.187 + 14 41.7116 345 1 1 -111.143 92.1606 -174.45 + 14 171.643 344 1 1 -111.15 92.1834 -174.599 + 14 103.026 1361 1 0 -111.211 92.3748 -175.85 + 14 164.844 337 0 1 -112.624 96.7625 -204.45 + 14 333.632 1384 0 0 -112.693 96.9787 -205.85 + 14 77.6256 339 0 1 -112.19 95.879 -204.85 + 14 125.484 1356 1 0 -111.236 91.5448 -175.85 + 14 223.772 1161 10 0 -97.9571 52.25 94.0535 + 14 535.369 478 9 1 -84.4338 19.4736 65.55 + 14 43.4942 479 9 1 -84.25 19.0737 65.1858 + 14 12.419 989 9 0 -83.767 17.8631 64.15 + 14 212.187 988 9 0 -83.7617 17.85 64.1388 + 14 275.412 987 9 0 -83.6827 17.65 63.9689 + 14 84.3702 540 8 1 -71.8705 -14.4522 35.55 + 14 462.82 541 8 1 -71.85 -14.5119 35.4847 + 14 45.6421 821 8 0 -71.386 -15.8102 34.15 + 14 241.086 820 8 0 -71.3715 -15.85 34.1093 + 14 270.397 819 8 0 -71.2983 -16.05 33.9017 + 14 37.1667 599 7 1 -60.0586 -45.1889 5.55 + 14 644.276 600 7 1 -60.05 -45.2137 5.52295 + 14 249.463 667 7 0 -59.5921 -46.4922 4.15 + 14 355.975 666 7 0 -59.5353 -46.65 3.9821 + 14 36.4917 665 7 0 -59.4605 -46.85 3.77168 + 14 32.7838 659 6 1 -48.0685 -72.5438 -24.45 + 14 532.904 660 6 1 -48.05 -72.5622 -24.4666 + 14 509.964 661 6 1 -47.85 -72.7646 -24.6447 + 14 36.7401 662 6 1 -47.65 -72.9717 -24.8275 + 14 224.856 530 6 0 -46.6718 -73.9706 -25.85 + 14 553.769 529 6 0 -46.5941 -74.05 -25.9312 + 14 442.892 528 6 0 -46.4035 -74.25 -26.1171 + 14 1686.09 803 5 1 -19.4454 -104.51 -54.45 + 14 761.188 373 5 0 -19.2648 -105.454 -55.85 + 14 1504.78 372 5 0 -19.2514 -105.55 -56.0078 + 14 469.923 539 5 0 -41.3825 -72.1701 -56.25 + 14 1139.56 540 5 0 -41.4321 -72.05 -56.1886 + 14 1662.86 541 5 0 -41.5219 -71.85 -56.0966 + 14 0.819152 694 5 1 -41.0516 -72.9207 -54.85 + 14 198.004 695 5 1 -41.05 -72.9245 -54.8462 + 14 1.95192 696 5 1 -40.85 -73.3819 -54.4546 + 14 74.6954 493 6 0 -38.1211 -81.3798 -26.25 + 14 38.6758 492 6 0 -38.0968 -81.45 -25.989 + 14 102.689 710 6 1 -38.0156 -81.7992 -24.85 + 14 37.2427 711 6 1 -37.85 -81.8917 -24.5534 + 14 16.8838 354 7 0 -52.465 -109.299 3.7501 + 14 154.834 353 7 0 -52.4954 -109.35 3.80213 + 14 164.456 352 7 0 -52.5527 -109.55 3.97468 + 14 142.188 638 7 1 -52.4389 -110.729 5.15 + 14 41.4953 228 8 0 -81.1363 -134.487 33.7504 + 14 174.783 227 8 0 -81.2118 -134.55 33.8208 + 14 0.643723 226 8 0 -81.4164 -134.75 34.1473 + 14 137.684 490 8 1 -81.9165 -135.236 35.15 + 14 311.891 489 8 1 -82.05 -135.343 35.4132 + 14 151.696 244 9 0 -99.6509 -131.292 63.75 + 14 40.8527 393 9 1 -101.431 -130.935 65.1503 + 14 75.0849 392 9 1 -101.55 -130.892 65.2481 + 14 139.352 391 9 1 -101.75 -130.826 65.4204 + 14 74.4206 390 9 1 -101.95 -130.831 65.5028 + 14 80.7168 389 9 1 -102.15 -130.986 65.3925 + 14 82.2172 388 9 1 -102.35 -131.126 65.2718 + 14 21.3242 387 9 1 -102.55 -131.233 65.1771 + 14 113.189 238 9 0 -104.255 -132.358 64.15 + 14 95.2511 237 9 0 -104.582 -132.55 64.0372 + 14 88.4273 236 9 0 -104.895 -132.75 63.9688 + 14 69.4777 235 9 0 -105.105 -132.95 63.9106 + 14 42.4122 234 9 0 -105.232 -133.15 63.8574 + 14 64.3332 233 9 0 -105.271 -133.35 63.8111 + 14 15.8837 662 7 1 -47.5535 -101.266 5.15 + 14 1162.31 408 10 1 -98.35 51.7781 95.2756 + 14 1287.68 407 10 1 -98.55 51.6794 95.2245 + 14 401.489 406 10 1 -98.75 51.5768 95.1672 + 14 2614.13 1147 10 0 -102.656 49.6368 94.15 + 14 3282.55 1146 10 0 -103.018 49.45 94.0598 + 14 5460.27 1145 10 0 -103.402 49.25 93.9597 + 14 3971.11 1144 10 0 -103.841 49.05 93.853 + 14 128.564 377 9 1 -104.612 53.9214 65.55 + 14 128.073 1169 9 0 -104.931 54.0056 64.15 + 14 105.499 343 8 1 -111.453 55.7419 35.55 + 14 94.5524 1178 8 0 -111.767 55.8275 34.15 + 14 10.1896 1179 8 0 -111.849 55.85 33.7827 + 14 122.113 309 7 1 -118.211 57.5662 5.55 + 14 3.0398 1187 7 0 -118.525 57.6488 4.15 + 14 120.469 1188 7 0 -118.529 57.65 4.12988 + 14 10.1233 276 6 1 -124.945 59.3666 -24.45 + 14 161.76 275 6 1 -124.95 59.368 -24.4737 + 14 33.4914 1196 6 0 -125.259 59.4439 -25.85 + 14 78.975 1197 6 0 -125.284 59.45 -25.9609 + 14 102.965 242 5 1 -131.676 61.0122 -54.45 + 14 19.4407 241 5 1 -131.75 61.0311 -54.7913 + 14 276.703 1205 5 0 -131.979 61.089 -55.85 + 14 110.563 209 4 1 -138.219 62.6689 -84.45 + 14 118.105 1213 4 0 -138.516 62.748 -85.85 + 14 114.88 177 3 1 -144.627 64.3637 -114.45 + 14 74.7472 1221 3 0 -144.923 64.4383 -115.85 + 14 49.5913 1222 3 0 -144.969 64.45 -116.069 + 14 123.817 145 2 1 -151.009 65.9736 -144.45 + 14 29.7624 1229 2 0 -151.309 66.0452 -145.85 + 14 83.6281 1230 2 0 -151.329 66.05 -145.944 + 14 109.099 113 1 1 -157.474 67.5135 -174.45 + 14 12.4764 112 1 1 -157.55 67.5358 -174.807 + 14 223.58 1237 1 0 -157.771 67.6009 -175.85 + 14 94.7379 81 0 1 -163.826 69.3929 -204.45 + 14 119.577 1247 0 0 -164.119 69.4927 -205.85 + 14 441.181 405 9 1 -99.0902 28.522 65.55 + 14 5.4789 1037 9 0 -99.1277 27.4672 64.15 + 14 189.003 1036 9 0 -99.1283 27.45 64.1272 + 14 94.0676 1035 9 0 -99.1354 27.25 63.8616 + 14 205.37 401 8 1 -99.8437 5.396 35.5498 + 14 83.9686 920 8 0 -99.8767 4.19792 34.15 + 14 177.96 919 8 0 -99.8797 4.05 33.9779 + 14 122.626 391 7 1 -101.937 -20.4493 5.55 + 14 42.5745 792 7 0 -101.926 -21.5655 4.15 + 14 167.683 791 7 0 -101.925 -21.6501 4.04365 + 14 9.72968 790 7 0 -101.921 -21.85 3.79431 + 14 181.622 393 6 1 -101.398 -44.7154 -24.45 + 14 5.23366 671 6 0 -101.344 -45.8306 -25.8501 + 14 301.817 670 6 0 -101.343 -45.8505 -25.8752 + 14 48.7546 669 6 0 -101.336 -46.05 -26.127 + 14 153.976 397 5 1 -100.582 -68.3567 -54.45 + 14 5.77298 552 5 0 -100.547 -69.63 -55.85 + 14 84.0356 551 5 0 -100.546 -69.65 -55.8719 + 14 65.9341 550 5 0 -100.54 -69.85 -56.0946 + 14 163.453 400 4 1 -100.073 -95.2237 -84.45 + 14 109.934 419 4 0 -99.99 -96.2777 -85.8507 + 14 147.981 418 4 0 -99.9848 -96.35 -85.947 + 14 96.9961 417 4 0 -99.9713 -96.55 -86.2078 + 14 10.6933 406 3 1 -98.7548 -117.918 -114.45 + 14 120.465 407 3 1 -98.75 -117.94 -114.486 + 14 108.333 306 3 0 -98.5776 -118.789 -115.85 + 14 60.8186 305 3 0 -98.5455 -118.95 -116.109 + 14 243.564 424 2 1 -95.3392 -136.466 -144.45 + 14 68.8048 213 2 0 -95.3341 -137.44 -145.85 + 14 77.6168 212 2 0 -95.3344 -137.55 -146.006 + 14 271.866 422 1 1 -95.7454 -157.12 -174.45 + 14 141.198 108 1 0 -95.7029 -158.414 -175.85 + 14 196.295 107 1 0 -95.6977 -158.55 -175.998 + 14 18.2869 106 1 0 -95.6891 -158.75 -176.214 + 14 168.208 397 6 1 -100.576 -47.1448 -24.4501 + 14 17.7287 398 6 1 -100.55 -47.4272 -24.79 + 14 97.2557 658 6 0 -100.445 -48.2595 -25.8501 + 14 109.185 657 6 0 -100.423 -48.45 -26.0821 + 14 175.321 406 5 1 -98.7695 -71.8949 -54.4501 + 14 7.77828 534 5 0 -98.6652 -73.2236 -55.85 + 14 90.0045 533 5 0 -98.6629 -73.25 -55.8781 + 14 61.2408 532 5 0 -98.6487 -73.45 -56.0969 + 14 407.068 414 4 1 -97.3182 -100.169 -84.45 + 14 35.8775 393 4 0 -97.1633 -101.455 -85.85 + 14 120.346 392 4 0 -97.1529 -101.55 -85.9537 + 14 21.2848 391 4 0 -97.1344 -101.75 -86.1794 + 14 261.185 425 3 1 -95.0184 -126.224 -114.45 + 14 46.8369 262 3 0 -94.8555 -127.67 -115.85 + 14 105.519 261 3 0 -94.8468 -127.75 -115.926 + 14 59.2351 260 3 0 -94.8355 -127.95 -116.108 + 14 102.124 438 2 1 -92.4088 -159.329 -144.45 + 14 192.726 437 2 1 -92.5501 -159.596 -144.722 + 14 32.666 97 2 0 -93.1021 -160.656 -145.85 + 14 219.73 96 2 0 -93.1496 -160.75 -145.949 + 14 50.3323 95 2 0 -93.2536 -160.95 -146.162 + 14 13.3188 428 2 1 -94.5294 -151.083 -144.45 + 14 159.899 427 2 1 -94.5503 -151.136 -144.492 + 14 28.4465 426 2 1 -94.75 -151.44 -144.781 + 14 34.2726 140 2 0 -95.2872 -152.089 -145.851 + 14 129.566 139 2 0 -95.334 -152.15 -145.946 + 14 44.5042 723 4 1 -35.3194 -169.404 -84.45 + 14 262.864 431 2 1 -93.7973 -151.032 -144.45 + 14 72.913 432 2 1 -93.7498 -151.014 -144.668 + 14 117.452 146 2 0 -93.3308 -150.895 -145.85 + 14 132.326 202 2 0 -59.9875 -139.659 -146.25 + 14 198.555 605 2 1 -59.0046 -139.382 -144.85 + 14 85.0621 604 2 1 -59.05 -139.498 -144.581 + 14 64.358 603 2 1 -59.2501 -139.714 -144.692 + 14 159.532 199 2 0 -60.2949 -140.237 -145.85 + 14 79.9505 198 2 0 -60.4731 -140.35 -146.072 + 14 194.122 420 4 1 -96.0761 -96.8736 -84.45 + 14 0.443154 419 4 1 -96.15 -97.0449 -84.6667 + 14 133.908 415 4 0 -95.9604 -96.998 -85.85 + 14 7.56538 766 4 0 -33.5915 -26.6697 -86.25 + 14 63.1656 767 4 0 -33.5763 -26.65 -86.2413 + 14 114.057 768 4 0 -33.4486 -26.45 -86.1468 + 14 99.8618 769 4 0 -33.2596 -26.2499 -86.0203 + 14 0.0179962 747 4 1 -30.4504 -25.9422 -84.85 + 14 58.3869 748 4 1 -30.4491 -25.9421 -84.8494 + 14 103.816 749 4 1 -30.25 -25.9587 -84.7533 + 14 74.9609 750 4 1 -30.05 -25.9647 -84.7106 + 14 50.4952 751 4 1 -29.85 -25.9359 -84.7068 + 14 64.5855 752 4 1 -29.65 -25.9419 -84.7136 + 14 91.3732 753 4 1 -29.45 -25.9237 -84.756 + 14 261.896 754 4 1 -29.25 -25.8148 -84.7363 + 14 198.964 755 4 1 -28.9829 -25.4926 -84.45 + 14 183.091 771 4 0 -29.4398 -25.7477 -85.8503 + 14 68.6768 396 6 1 -100.75 -47.1766 -24.5394 + 14 78.2199 395 6 1 -100.95 -47.2482 -24.6917 + 14 255.848 662 6 0 -102.795 -47.5963 -25.85 + 14 38.8514 661 6 0 -103.153 -47.65 -26.0417 + 14 138.466 403 8 1 -99.5182 5.58389 35.55 + 14 29.4615 922 8 0 -99.5521 4.50357 34.15 + 14 120.267 921 8 0 -99.5538 4.45 34.0805 + 14 229.009 398 7 1 -100.419 -17.6265 5.55 + 14 79.1546 806 7 0 -100.408 -18.6958 4.15 + 14 65.2567 805 7 0 -100.406 -18.85 3.94801 + 14 145.835 399 6 1 -100.284 -40.3681 -24.45 + 14 11.4896 693 6 0 -100.218 -41.4244 -25.85 + 14 143.678 692 6 0 -100.216 -41.45 -25.884 + 14 32.027 691 6 0 -100.203 -41.65 -26.1501 + 14 133.065 407 5 1 -98.75 -63.1297 -54.4867 + 14 79.3942 579 5 0 -98.6409 -64.0835 -55.85 + 14 69.1051 578 5 0 -98.6219 -64.25 -56.0876 + 14 96.4751 417 4 1 -96.5692 -84.2241 -84.45 + 14 47.3997 418 4 1 -96.55 -84.4378 -84.7165 + 14 41.9538 473 4 0 -96.4812 -85.3581 -85.85 + 14 81.2873 472 4 0 -96.4745 -85.45 -85.9628 + 14 9.96992 471 4 0 -96.46 -85.65 -86.211 + 14 136.838 426 3 1 -94.8225 -108.51 -114.45 + 14 24.7574 352 3 0 -94.7227 -109.697 -115.85 + 14 153.782 351 3 0 -94.7182 -109.75 -115.913 + 14 42.5663 350 3 0 -94.7032 -109.95 -116.147 + 14 118.733 436 2 1 -92.8494 -134.046 -144.45 + 14 0.699185 225 2 0 -92.7554 -135.147 -145.85 + 14 83.8294 224 2 0 -92.7552 -135.15 -145.854 + 14 71.1564 223 2 0 -92.7375 -135.35 -146.107 + 14 166.487 446 1 1 -90.9128 -157.262 -174.45 + 14 7.92741 109 1 0 -90.8845 -158.338 -175.85 + 14 137.929 449 0 1 -90.3405 -179.852 -204.45 + 14 359.685 392 2 1 -101.738 -129.627 -144.45 + 14 246.15 391 2 1 -101.75 -129.72 -144.603 + 14 663.361 248 2 0 -101.841 -130.435 -145.85 + 14 222.698 247 2 0 -101.856 -130.55 -146.049 + 14 107.608 381 1 1 -103.9 -147.141 -174.45 + 14 10.3883 159 1 0 -104.034 -148.315 -175.85 + 14 133.34 158 1 0 -104.038 -148.35 -175.891 + 14 66.8277 157 1 0 -104.058 -148.55 -176.131 + 14 237.269 367 0 1 -106.653 -171.977 -204.45 + 14 45.6735 32 0 0 -106.576 -173.61 -205.85 + 14 71.6452 31 0 0 -106.568 -173.75 -205.969 + 14 55.0058 30 0 0 -106.554 -173.95 -206.129 + 14 109.219 563 3 0 -73.5413 -67.367 -116.25 + 14 56.9026 170 7 1 -146.108 32.7538 5.53162 + 14 249.899 169 7 1 -146.15 32.7376 5.45416 + 14 15.7352 1062 7 0 -146.854 32.4528 4.1485 + 14 241.475 1061 7 0 -146.861 32.45 4.13549 + 14 58.9717 87 6 1 -162.652 25.9233 -24.45 + 14 51.5273 86 6 1 -162.75 25.8826 -24.674 + 14 47.1998 1028 6 0 -163.266 25.6767 -25.85 + 14 81.7784 1027 6 0 -163.332 25.65 -26.0046 + 14 183.916 30 5 1 -173.965 20.5045 -54.4511 + 14 129.661 1001 5 0 -174.558 20.3742 -55.85 + 14 104.013 91 6 1 -161.822 26.3902 -24.4503 + 14 37.9498 90 6 1 -161.95 26.3316 -24.7153 + 14 76.8458 1030 6 0 -162.509 26.0786 -25.85 + 14 86.8035 1029 6 0 -162.573 26.05 -25.9781 + 14 5.27881 16 5 1 -176.939 19.655 -54.4503 + 14 115.067 15 5 1 -176.95 19.649 -54.4724 + 14 55.1501 996 5 0 -177.614 19.2765 -55.85 + 14 98.052 995 5 0 -177.662 19.25 -55.9482 + 14 131.557 1157 10 0 -97.8181 51.6239 94.15 + 14 106.319 425 9 1 -95.0789 43.2621 65.55 + 14 8.44969 1114 9 0 -94.9429 42.862 64.15 + 14 91.0865 1113 9 0 -94.9388 42.85 64.108 + 14 118.855 439 8 1 -92.1948 34.6976 35.55 + 14 44.359 1071 8 0 -92.0567 34.3007 34.15 + 14 44.3609 1070 8 0 -92.0391 34.25 33.9711 + 14 165.46 454 7 1 -89.2375 26.1807 5.55 + 14 123.651 1028 7 0 -89.1007 25.783 4.15 + 14 105.217 468 6 1 -86.3092 17.6737 -24.45 + 14 37.2298 986 6 0 -86.171 17.2777 -25.85 + 14 89.5225 985 6 0 -86.1613 17.25 -25.9481 + 14 143.097 483 5 1 -83.3417 9.1874 -54.45 + 14 115.189 943 5 0 -83.2057 8.79375 -55.85 + 14 99.4289 498 4 1 -80.4255 0.757779 -84.45 + 14 309.444 901 4 0 -80.2972 0.364054 -85.85 + 14 89.8296 511 3 1 -77.6793 -7.66465 -114.45 + 14 61.839 512 3 1 -77.65 -7.7532 -114.766 + 14 108.471 859 3 0 -77.5485 -8.05595 -115.85 + 14 157.333 525 2 1 -74.8948 -16.0174 -144.45 + 14 72.68 818 2 0 -74.7592 -16.4074 -145.85 + 14 81.124 817 2 0 -74.7444 -16.45 -146.003 + 14 242.803 540 1 1 -71.9831 -24.3755 -174.45 + 14 115.353 776 1 0 -71.8423 -24.7558 -175.85 + 14 9.65538 775 1 0 -71.8074 -24.85 -176.197 + 14 182.758 555 0 1 -68.9821 -32.531 -204.45 + 14 143.187 735 0 0 -68.8355 -32.9156 -205.85 + 14 226.377 416 10 1 -96.8934 54.3628 95.15 + 14 113.387 1662 13 0 9.24677 152.585 183.75 + 14 89.8292 1663 13 0 9.47355 152.75 183.999 + 14 6.39102 1664 13 0 9.63662 152.95 184.137 + 14 70.5668 957 13 1 11.5074 154.654 185.15 + 14 80.9646 958 13 1 11.65 154.71 185.254 + 14 96.6653 959 13 1 11.85 154.63 185.468 + 14 202.938 453 9 1 -89.3042 69.1511 65.5498 + 14 135.132 454 9 1 -89.25 69.2644 65.3302 + 14 152.818 1249 9 0 -88.9489 69.8762 64.1495 + 14 88.3678 1250 9 0 -88.8687 70.05 63.8208 + 14 48.3878 488 8 1 -82.286 85.847 35.5499 + 14 3.15124 1333 8 0 -81.8231 86.8437 34.15 + 14 125.201 1334 8 0 -81.8201 86.8501 34.141 + 14 42.7834 1335 8 0 -81.7254 87.0504 33.858 + 14 68.6813 542 7 1 -71.4913 107.131 5.55 + 14 134.177 543 7 1 -71.45 107.269 5.38763 + 14 22.3785 1440 7 0 -71.0905 108.302 4.15 + 14 113.898 1441 7 0 -71.0744 108.35 4.09196 + 14 36.3754 1442 7 0 -71.0142 108.55 3.84701 + 14 138.169 575 6 1 -64.8825 131.127 -24.4502 + 14 62.7066 1560 6 0 -65.1641 132.214 -25.8501 + 14 99.991 1561 6 0 -65.2026 132.35 -26.0207 + 14 178.413 552 5 1 -69.4892 155.971 -54.45 + 14 23.2802 1685 5 0 -69.6056 157.287 -55.8503 + 14 67.1242 1686 5 0 -69.6112 157.35 -55.9184 + 14 73.6495 1687 5 0 -69.6269 157.55 -56.0861 + 14 217.616 498 8 1 -80.3438 86.4203 35.5497 + 14 238.441 1336 8 0 -80.0147 87.25 34.1249 + 14 6.85982 1337 8 0 -79.9345 87.45 33.7798 + 14 125.125 534 7 1 -73.2032 103.889 5.55 + 14 51.2879 1423 7 0 -72.9892 104.844 4.1499 + 14 89.648 1424 7 0 -72.9652 104.95 3.99331 + 14 147.17 556 6 1 -68.7094 124.345 -24.45 + 14 45.8673 1524 6 0 -68.778 125.091 -25.8508 + 14 134.908 1525 6 0 -68.7838 125.15 -25.961 + 14 142.037 550 5 1 -69.9912 140.423 -54.45 + 14 7.92631 1605 5 0 -70.014 141.341 -55.85 + 14 137.577 1606 5 0 -70.0142 141.35 -55.8638 + 14 29.2606 1607 5 0 -70.0189 141.55 -56.1674 + 14 171.85 546 4 1 -70.7555 160.107 -84.45 + 14 0.98161 1704 4 0 -70.826 161.145 -85.8501 + 14 122.917 1705 4 0 -70.8264 161.15 -85.8568 + 14 103.669 1706 4 0 -70.8408 161.35 -86.1335 + 14 2.54011 1707 4 0 -70.8231 161.55 -86.2478 + 14 92.2451 653 3 1 -49.3746 173.742 -114.45 + 14 13.5063 654 3 1 -49.25 173.905 -114.799 + 14 126.962 1771 3 0 -48.8237 174.369 -115.85 + 14 285.063 317 9 1 -116.606 63.4737 65.55 + 14 138.309 316 9 1 -116.75 63.5593 65.3179 + 14 56.3129 1219 9 0 -117.476 63.9893 64.15 + 14 89.643 1220 9 0 -117.578 64.05 63.985 + 14 21.0554 224 8 1 -135.293 74.5724 35.55 + 14 101.184 223 8 1 -135.35 74.6078 35.4587 + 14 102.515 1275 8 0 -136.168 75.1164 34.15 + 14 16.6478 1276 8 0 -136.383 75.25 33.8065 + 14 45.1104 131 7 1 -153.869 86.1663 5.55 + 14 81.2672 130 7 1 -153.95 86.2161 5.42504 + 14 116.081 1333 7 0 -154.779 86.7356 4.15 + 14 37.9356 1334 7 0 -154.961 86.85 3.87083 + 14 16.3349 34 6 1 -173.31 98.4756 -24.45 + 14 118.307 33 6 1 -173.35 98.5011 -24.5118 + 14 10.7134 32 6 1 -173.55 98.6274 -24.8196 + 14 97.932 1394 6 0 -174.223 99.0469 -25.85 + 14 53.8603 1395 6 0 -174.389 99.15 -26.1034 + 14 14.4668 844 11 0 -116.279 -11.2151 123.75 + 14 88.8017 843 11 0 -116.289 -11.25 123.766 + 14 110.522 842 11 0 -116.348 -11.45 123.855 + 14 91.6373 841 11 0 -116.405 -11.65 123.945 + 14 150.683 840 11 0 -116.461 -11.85 124.034 + 14 21.9289 839 11 0 -116.519 -12.05 124.124 + 14 459.495 314 11 1 -117.154 -14.343 125.15 + 14 136.744 313 11 1 -117.35 -15.0573 125.46 + 14 51.1231 423 12 0 -138.914 -95.4316 153.75 + 14 82.8035 422 12 0 -138.946 -95.55 153.792 + 14 86.8416 421 12 0 -139 -95.75 153.862 + 14 107.448 420 12 0 -139.054 -95.95 153.933 + 14 80.7368 419 12 0 -139.11 -96.15 154.003 + 14 92.8989 418 12 0 -139.168 -96.35 154.072 + 14 8.55005 417 12 0 -139.225 -96.55 154.141 + 14 207.602 200 12 1 -140.066 -99.471 155.15 + 14 295.813 199 12 1 -140.15 -99.7614 155.25 + 14 76.4678 198 12 1 -140.35 -100.441 155.488 + 14 139.282 315 11 1 -117.15 -15.4557 125.486 +Number of digits in this event: 246 +Using G4ParticleGun... +Particle energy: 6.27682 LIN Particle: proton Event: 15 -Number of tracker hits in this event: 44 - 15 165.232 521 8 1 -75.8135 118.331 35.55 - 15 161.511 1490 8 0 -75.8183 118.332 34.15 - 15 122.238 520 7 1 -75.9164 118.348 5.55 - 15 133.687 1491 7 0 -75.9206 118.35 4.15 - 15 161.09 520 6 1 -75.9962 118.419 -24.45 - 15 270.631 1491 6 0 -75.9981 118.424 -25.85 - 15 111.689 520 5 1 -76.0357 118.516 -54.45 - 15 131.241 1491 5 0 -76.0359 118.52 -55.85 - 15 84.8116 520 4 1 -76.0452 118.6 -84.45 - 15 113.63 1492 4 0 -76.0444 118.605 -85.85 - 15 115.937 520 3 1 -76.0276 118.718 -114.45 - 15 167.108 1492 3 0 -76.0261 118.722 -115.85 - 15 100.178 520 2 1 -75.9965 118.782 -144.45 - 15 135.002 1493 2 0 -75.9938 118.791 -145.85 - 15 177.195 520 1 1 -75.9389 118.982 -174.45 - 15 181.196 1494 1 0 -75.9356 118.992 -175.85 - 15 111.09 520 0 1 -75.8584 119.189 -204.45 - 15 125.862 1495 0 0 -75.8556 119.199 -205.85 - 15 162.673 521 0 1 -75.8388 119.299 -204.45 - 15 14.6866 1502 0 0 -75.9397 120.71 -205.85 - 15 93.7536 1503 0 0 -75.9454 120.75 -205.892 - 15 170.292 1504 0 0 -75.9604 120.95 -206.103 - 15 85.4293 1548 0 0 -39.3137 129.886 -206.25 - 15 280.557 1547 0 0 -39.1049 129.75 -206.122 - 15 38.675 1546 0 0 -38.8537 129.55 -205.956 - 15 186.481 710 0 1 -38.0277 128.122 -204.85 - 15 88.555 711 0 1 -37.8499 127.743 -204.514 - 15 125.742 1492 1 0 -49.1947 118.732 -176.25 - 15 64.4782 1491 1 0 -49.3585 118.55 -175.94 - 15 218.677 651 1 1 -49.7411 117.399 -174.85 - 15 89.4344 650 1 1 -49.85 117.133 -174.63 - 15 66.6348 649 1 1 -50.0501 116.868 -174.465 - 15 66.449 648 1 1 -50.25 116.717 -174.527 - 15 62.7444 647 1 1 -50.4504 116.591 -174.516 - 15 77.1254 646 1 1 -50.65 116.442 -174.519 - 15 84.9444 645 1 1 -50.85 116.275 -174.534 - 15 69.2986 644 1 1 -51.05 116.13 -174.53 - 15 165.849 643 1 1 -51.25 115.948 -174.536 - 15 600.728 642 1 1 -51.45 115.559 -174.554 - 15 34.5573 1458 1 0 -50.3988 111.856 -175.85 - 15 63.4211 1457 1 0 -50.3457 111.75 -175.912 - 15 88.6171 1456 1 0 -50.2393 111.55 -176.019 - 15 174.374 1455 1 0 -50.0528 111.35 -176.092 - 15 0.664175 1454 1 0 -49.6706 111.15 -176.248 -Number of digits in this event: 22 +Number of tracker hits in this event: 23 + 15 115.369 566 10 1 -66.7911 85.5261 95.55 + 15 95.8146 1327 10 0 -66.7906 85.5268 94.15 + 15 102.487 566 9 1 -66.7834 85.5459 65.55 + 15 94.3079 1327 9 0 -66.7822 85.5461 64.15 + 15 180.411 566 8 1 -66.7595 85.5506 35.55 + 15 121.967 1327 8 0 -66.7582 85.5487 34.15 + 15 102.835 566 7 1 -66.7314 85.509 5.55 + 15 180.644 1327 7 0 -66.7302 85.5068 4.15 + 15 97.4687 566 6 1 -66.7012 85.4632 -24.45 + 15 149.071 1327 6 0 -66.7004 85.4614 -25.85 + 15 98.7603 566 5 1 -66.685 85.4248 -54.45 + 15 112.315 1326 5 0 -66.6829 85.4224 -55.85 + 15 206.935 567 4 1 -66.6448 85.3705 -84.45 + 15 92.4214 1326 4 0 -66.6436 85.3669 -85.85 + 15 112.95 567 3 1 -66.6182 85.2934 -114.45 + 15 130.609 1326 3 0 -66.6171 85.2903 -115.85 + 15 123.275 567 2 1 -66.5932 85.2276 -144.45 + 15 97.4112 1325 2 0 -66.5925 85.2238 -145.85 + 15 101.146 567 1 1 -66.5783 85.1466 -174.45 + 15 235.887 1325 1 0 -66.5782 85.1437 -175.85 + 15 105.292 567 0 1 -66.5777 85.0786 -204.45 + 15 135.877 1325 0 0 -66.577 85.0763 -205.85 + 15 88.1022 1324 1 0 -66.5618 85.05 -176.039 +Number of digits in this event: 10 Using G4ParticleGun... -Particle energy: 6.24239 LIN +Particle energy: 2.73948 LIN Particle: proton Event: 16 Number of tracker hits in this event: 23 - 16 98.3465 1062 9 1 32.6439 126.055 65.55 - 16 167.319 1529 9 0 32.6445 126.055 64.15 - 16 135.106 1063 8 1 32.6606 126.056 35.55 - 16 128.956 1529 8 0 32.6617 126.056 34.15 - 16 120.224 1063 7 1 32.6892 126.063 5.55 - 16 227.755 1529 7 0 32.6899 126.063 4.15 - 16 99.4241 1063 6 1 32.7037 126.052 -24.45 - 16 222.049 1529 6 0 32.704 126.051 -25.85 - 16 149.849 1063 5 1 32.709 126.043 -54.45 - 16 127.887 1529 5 0 32.7097 126.043 -55.85 - 16 195.888 1063 4 1 32.7237 126.026 -84.45 - 16 124.941 1529 4 0 32.7261 126.026 -85.85 - 16 220.161 1063 3 1 32.7778 126.022 -114.45 - 16 96.5055 1529 3 0 32.7807 126.022 -115.85 - 16 95.0207 1063 2 1 32.8408 126.023 -144.45 - 16 122.511 1529 2 0 32.8441 126.023 -145.85 - 16 245.712 1064 1 1 32.911 126.023 -174.45 - 16 94.9391 1529 1 0 32.9152 126.023 -175.85 - 16 95.6351 1064 0 1 33.0029 126.028 -204.45 - 16 149.821 1529 0 0 33.0078 126.028 -205.85 - 16 117.651 1065 1 1 33.0501 126.102 -174.584 - 16 157.689 1066 1 1 33.25 125.941 -174.605 - 16 221.469 1062 3 1 32.65 126.021 -114.763 -Number of digits in this event: 17 + 16 172.458 1346 10 1 89.367 34.4085 95.55 + 16 108.364 1071 10 0 89.3663 34.4088 94.15 + 16 184.485 1346 9 1 89.3504 34.4177 65.55 + 16 107.778 1071 9 0 89.3506 34.4165 64.15 + 16 132.36 1346 8 1 89.3522 34.3905 35.55 + 16 150.236 1071 8 0 89.3524 34.389 34.15 + 16 93.819 1346 7 1 89.3607 34.3482 5.55 + 16 124.156 1071 7 0 89.3613 34.3488 4.15 + 16 112.079 1346 6 1 89.3742 34.3689 -24.45 + 16 121.351 1071 6 0 89.3747 34.3689 -25.85 + 16 123.077 1346 5 1 89.3777 34.3601 -54.45 + 16 116.526 1071 5 0 89.3774 34.3581 -55.85 + 16 102.992 1346 4 1 89.3645 34.2922 -84.45 + 16 101.091 1071 4 0 89.3624 34.2903 -85.85 + 16 135.449 1346 3 1 89.3068 34.2619 -114.45 + 16 127.846 1071 3 0 89.3027 34.2616 -115.85 + 16 119.241 1345 2 1 89.211 34.2418 -144.45 + 16 116.667 1070 2 0 89.2052 34.2397 -145.85 + 16 115.41 1345 1 1 89.0846 34.1956 -174.45 + 16 97.072 1070 1 0 89.0763 34.1927 -175.85 + 16 114.532 1344 0 1 88.8985 34.131 -204.45 + 16 103.993 1070 0 0 88.8892 34.1274 -205.85 + 16 224.374 1092 3 0 69.6406 38.5633 -116.25 +Number of digits in this event: 11 Using G4ParticleGun... -Particle energy: 4.65927 LIN +Particle energy: 8.87874 LIN Particle: proton Event: 17 -Number of tracker hits in this event: 36 - 17 141.751 238 8 1 -132.352 -51.8722 35.55 - 17 462.337 640 8 0 -132.352 -51.8748 34.15 - 17 130.665 238 7 1 -132.521 -52.5462 5.55 - 17 95.5986 637 7 0 -132.531 -52.58 4.15 - 17 126.545 237 6 1 -132.721 -53.274 -24.45 - 17 95.1196 633 6 0 -132.729 -53.3066 -25.85 - 17 392.127 236 5 1 -132.901 -53.9699 -54.45 - 17 107.406 630 5 0 -132.909 -54.0016 -55.85 - 17 122.932 235 4 1 -133.08 -54.6517 -84.45 - 17 106.478 626 4 0 -133.087 -54.6842 -85.85 - 17 97.0555 234 3 1 -133.224 -55.347 -114.45 - 17 114.101 623 3 0 -133.231 -55.378 -115.85 - 17 85.7108 233 2 1 -133.372 -56.0115 -144.45 - 17 85.0606 620 2 0 -133.377 -56.0436 -145.85 - 17 99.4722 619 2 0 -133.377 -56.05 -146.126 - 17 114.833 233 1 1 -133.478 -56.7033 -174.45 - 17 148.425 616 1 0 -133.485 -56.7347 -175.85 - 17 100.667 232 0 1 -133.62 -57.3814 -204.45 - 17 105.171 613 0 0 -133.627 -57.4119 -205.85 - 17 104.317 235 5 1 -132.981 -53.8161 -54.45 - 17 4.46225 237 5 1 -132.75 -53.1193 -54.8381 - 17 4.4473 640 5 0 -132.053 -51.8617 -55.85 - 17 128.125 641 5 0 -132.047 -51.85 -55.8589 - 17 100.971 642 5 0 -131.922 -51.65 -56.0247 - 17 24.9578 643 5 0 -131.781 -51.45 -56.2045 - 17 271.068 371 4 1 -105.929 -11.3226 -84.4502 - 17 1.13366 835 4 0 -105.833 -13.0474 -85.8512 - 17 61.8093 834 4 0 -105.833 -13.0501 -85.8532 - 17 97.794 833 4 0 -105.848 -13.25 -86.0016 - 17 61.4256 832 4 0 -105.891 -13.45 -86.1295 - 17 124.274 516 4 0 -125.14 -76.6535 -86.2499 - 17 43.2476 515 4 0 -125.19 -76.85 -85.9881 - 17 207.389 271 4 1 -125.812 -77.815 -84.8497 - 17 359.132 270 4 1 -125.95 -78.0578 -84.6746 - 17 201.553 269 4 1 -126.15 -78.3042 -84.5603 - 17 163.109 507 4 0 -125.085 -78.5612 -85.85 -Number of digits in this event: 15 +Number of tracker hits in this event: 25 + 17 103.069 735 11 1 -32.8623 70.689 125.55 + 17 126.908 1253 11 0 -32.8623 70.69 124.15 + 17 133.318 735 10 1 -32.8677 70.7125 95.55 + 17 100.938 1253 10 0 -32.8683 70.7148 94.15 + 17 123.874 735 9 1 -32.8819 70.7603 65.55 + 17 133.798 1253 9 0 -32.8846 70.7624 64.15 + 17 132.21 735 8 1 -32.946 70.8022 35.55 + 17 139.749 1253 8 0 -32.949 70.8042 34.15 + 17 169.752 735 7 1 -33.0134 70.8451 5.55 + 17 101.669 1253 7 0 -33.0165 70.8471 4.15 + 17 156.094 734 6 1 -33.0841 70.8874 -24.45 + 17 127.576 1254 6 0 -33.0872 70.8896 -25.85 + 17 94.6591 734 5 1 -33.1524 70.9357 -54.45 + 17 201.095 1254 5 0 -33.1558 70.9372 -55.85 + 17 109.976 734 4 1 -33.2256 70.9684 -84.45 + 17 137.216 1254 4 0 -33.2285 70.9701 -85.85 + 17 143.746 733 3 1 -33.2876 71.0051 -114.45 + 17 321.046 1254 3 0 -33.2915 71.0068 -115.85 + 17 112.511 733 2 1 -33.3721 71.0412 -144.45 + 17 128.638 1254 2 0 -33.3758 71.0436 -145.85 + 17 193.224 732 1 1 -33.4523 71.095 -174.45 + 17 193.844 1255 1 0 -33.4559 71.0991 -175.85 + 17 114.324 732 0 1 -33.5305 71.1841 -204.45 + 17 132.081 1255 0 0 -33.5343 71.1881 -205.85 + 17 110.458 1253 3 0 -33.1699 70.8498 -116.013 +Number of digits in this event: 18 Using G4ParticleGun... -Particle energy: 8.64527 LIN +Particle energy: 7.17497 LIN Particle: proton Event: 18 -Number of tracker hits in this event: 49 - 18 233.358 1184 10 1 56.8809 -97.1781 95.55 - 18 183.686 414 10 0 56.8802 -97.1782 94.15 - 18 149.945 1184 9 1 56.8625 -97.1851 65.55 - 18 101.763 414 9 0 56.8619 -97.1855 64.15 - 18 121.005 1184 8 1 56.8504 -97.1939 35.55 - 18 120.404 414 8 0 56.8505 -97.194 34.15 - 18 102.274 1184 7 1 56.8501 -97.2006 5.55 - 18 105.453 414 7 0 56.8498 -97.2005 4.15 - 18 103.523 1183 6 1 56.8463 -97.1954 -24.45 - 18 81.8464 414 6 0 56.846 -97.1944 -25.85 - 18 141.554 1183 5 1 56.8407 -97.1742 -54.45 - 18 128.482 414 5 0 56.8399 -97.1734 -55.85 - 18 128.473 1183 4 1 56.8261 -97.1582 -84.45 - 18 104.074 414 4 0 56.8253 -97.1587 -85.85 - 18 107.926 1183 3 1 56.8075 -97.1712 -114.45 - 18 92.8022 414 3 0 56.8068 -97.1719 -115.85 - 18 119.125 1183 2 1 56.7908 -97.1884 -144.45 - 18 116.085 414 2 0 56.7907 -97.1891 -145.85 - 18 91.1413 1183 1 1 56.791 -97.2044 -174.45 - 18 204.442 414 1 0 56.7911 -97.2054 -175.85 - 18 138.008 1183 0 1 56.7903 -97.2247 -204.45 - 18 139.346 414 0 0 56.7912 -97.226 -205.85 - 18 87.3489 973 1 0 16.3974 14.85 -176.028 - 18 7.98564 1736 6 1 167.414 -5.58753 -24.85 - 18 56.7035 1216 10 0 106.059 63.2709 94.0005 - 18 10.0251 908 0 0 156.963 1.7399 -205.873 - 18 358.783 77 11 0 -148.865 -164.605 123.775 - 18 273.963 1545 3 1 129.165 58.7758 -114.45 - 18 28.6513 1190 3 0 128.571 58.0772 -115.85 - 18 144.63 1539 3 1 127.975 57.3247 -114.85 - 18 35.7251 116 2 0 129.004 -156.885 -146.25 - 18 197.261 115 2 0 128.971 -156.95 -146.19 - 18 250.733 1770 2 1 174.17 -39.7002 -144.45 - 18 37.0092 1771 2 1 174.35 -39.465 -144.731 - 18 133.781 700 2 0 173.705 -39.9394 -145.85 - 18 165.578 701 2 0 173.517 -39.85 -145.941 - 18 38.6783 1237 3 0 141.504 67.5666 -116.25 - 18 24.9977 1238 3 0 141.566 67.65 -116.245 - 18 503.526 351 3 0 -103.145 -109.777 -116.25 - 18 170.765 352 3 0 -104.209 -109.75 -116.08 - 18 315.475 1184 4 1 56.8505 -97.1517 -84.5999 - 18 5.57443 415 5 0 56.3445 -96.9584 -55.85 - 18 186.867 416 5 0 56.3324 -96.95 -55.8758 - 18 77.6559 425 5 0 87.2429 -95.04 -56.25 - 18 99.2393 426 5 0 87.4378 -94.95 -56.1097 - 18 51.8163 427 5 0 87.7032 -94.75 -55.9475 - 18 110.488 1345 5 1 89.2206 -94.5283 -54.85 - 18 239.277 1346 5 1 89.2502 -94.5184 -54.8021 - 18 439.905 1183 9 1 56.8499 -97.1695 65.4137 -Number of digits in this event: 28 +Number of tracker hits in this event: 39 + 18 115.331 262 9 1 -127.685 15.8206 65.55 + 18 109.384 978 9 0 -127.684 15.8211 64.15 + 18 137.076 262 8 1 -127.668 15.8296 35.55 + 18 105.014 978 8 0 -127.668 15.8296 34.15 + 18 199.692 262 7 1 -127.665 15.8303 5.55 + 18 110.021 978 7 0 -127.663 15.8286 4.15 + 18 107.247 262 6 1 -127.633 15.7927 -24.45 + 18 110.742 978 6 0 -127.63 15.7909 -25.85 + 18 161.272 262 5 1 -127.57 15.7535 -54.45 + 18 90.8125 978 5 0 -127.567 15.752 -55.85 + 18 106.114 263 4 1 -127.498 15.7194 -84.45 + 18 124.118 978 4 0 -127.495 15.7183 -85.85 + 18 118.779 263 3 1 -127.44 15.6978 -114.45 + 18 119.928 978 3 0 -127.436 15.6956 -115.85 + 18 282.791 263 2 1 -127.355 15.6518 -144.45 + 18 109.879 977 2 0 -127.351 15.6493 -145.85 + 18 127.53 264 1 1 -127.268 15.5981 -174.45 + 18 108.608 977 1 0 -127.264 15.5958 -175.85 + 18 99.5114 264 0 1 -127.187 15.5456 -204.45 + 18 108.746 977 0 0 -127.188 15.5483 -205.85 + 18 160.339 590 5 1 -62.05 171.504 -54.5816 + 18 10.1199 264 2 1 -127.325 15.6612 -144.45 + 18 85.8569 262 2 1 -127.55 15.9566 -144.609 + 18 196.351 261 2 1 -127.75 16.2334 -144.569 + 18 32.5798 987 2 0 -127.523 17.6124 -145.85 + 18 119.68 988 2 0 -127.492 17.65 -145.913 + 18 85.5398 989 2 0 -127.358 17.8506 -145.986 + 18 73.0626 990 2 0 -127.356 18.05 -146.041 + 18 44.6384 991 2 0 -127.328 18.2504 -145.912 + 18 110.32 266 2 1 -126.809 20.1832 -144.85 + 18 133.108 267 2 1 -126.75 20.4128 -144.644 + 18 180.543 261 7 1 -127.75 15.8128 5.37713 + 18 65.457 990 7 0 -127.908 18.0825 4.15 + 18 16.6186 991 7 0 -127.991 18.25 4.12946 + 18 18.6824 259 7 1 -128.307 18.0228 5.15003 + 18 12.4391 258 7 1 -128.35 18.012 5.17156 + 18 44.8858 992 7 0 -129.094 18.6232 4.15 + 18 96.7606 993 7 0 -129.133 18.6505 4.09095 + 18 224.14 255 7 1 -129.1 19.4058 5.15 +Number of digits in this event: 13 Using G4ParticleGun... -Particle energy: 3.64384 LIN +Particle energy: 6.62537 LIN Particle: proton Event: 19 -Number of tracker hits in this event: 22 - 19 99.6603 1001 10 1 20.4159 -93.6752 95.55 - 19 210.452 432 10 0 20.417 -93.6739 94.15 - 19 124.828 1001 9 1 20.44 -93.6466 65.55 - 19 101.784 432 9 0 20.4394 -93.6448 64.15 - 19 106.601 1001 8 1 20.4158 -93.6225 35.55 - 19 110.85 432 8 0 20.4145 -93.6213 34.15 - 19 138.633 1001 7 1 20.3809 -93.5987 5.55 - 19 182.749 432 7 0 20.3791 -93.598 4.15 - 19 120.071 1001 6 1 20.3406 -93.5806 -24.45 - 19 125.991 432 6 0 20.3391 -93.5791 -25.85 - 19 173.391 1001 5 1 20.2991 -93.5534 -54.45 - 19 117.256 432 5 0 20.2958 -93.5525 -55.85 - 19 117.586 1000 4 1 20.2299 -93.5246 -84.45 - 19 105.878 433 4 0 20.2256 -93.5236 -85.85 - 19 130.239 1000 3 1 20.1318 -93.4969 -114.45 - 19 127.788 433 3 0 20.128 -93.4962 -115.85 - 19 101.587 999 2 1 20.0431 -93.4727 -144.45 - 19 113.169 433 2 0 20.038 -93.4719 -145.85 - 19 106.383 999 1 1 19.9257 -93.4528 -174.45 - 19 118.842 433 1 0 19.9182 -93.4521 -175.85 - 19 150.932 998 0 1 19.7729 -93.434 -204.45 - 19 126.004 433 0 0 19.7662 -93.4302 -205.85 -Number of digits in this event: 12 +Number of tracker hits in this event: 105 + 19 125.738 950 11 1 10.182 36.2438 125.55 + 19 137.066 1080 11 0 10.1828 36.2429 124.15 + 19 286.422 950 10 1 10.2025 36.2193 95.55 + 19 116.193 1080 10 0 10.2046 36.2184 94.15 + 19 114.868 951 9 1 10.2534 36.199 65.55 + 19 136.369 1080 9 0 10.2556 36.1988 64.15 + 19 127.94 951 8 1 10.3026 36.1901 35.55 + 19 164.795 1080 8 0 10.305 36.1862 34.15 + 19 244.538 951 7 1 10.3527 36.1116 5.55 + 19 114.443 1080 7 0 10.3549 36.1079 4.15 + 19 112.577 951 6 1 10.3988 36.0322 -24.45 + 19 120.109 1079 6 0 10.402 36.0288 -25.85 + 19 170.063 952 5 1 10.468 35.9578 -54.45 + 19 114.522 1079 5 0 10.4703 35.955 -55.85 + 19 97.735 952 4 1 10.5138 35.9002 -84.45 + 19 108.878 1079 4 0 10.5149 35.8975 -85.85 + 19 96.0127 952 3 1 10.5406 35.8399 -114.45 + 19 97.6734 1078 3 0 10.5427 35.8378 -115.85 + 19 142.772 952 2 1 10.5905 35.7894 -144.45 + 19 110.21 1078 2 0 10.594 35.787 -145.85 + 19 109.225 953 1 1 10.6648 35.7396 -174.45 + 19 118.626 1078 1 0 10.668 35.7358 -175.85 + 19 124.955 953 0 1 10.7343 35.6545 -204.45 + 19 12835.8 1078 0 0 10.738 35.6518 -205.85 + 19 9171.74 1077 0 0 10.7398 35.65 -206.111 + 19 20.3491 347 3 1 -110.603 -149.729 -114.737 + 19 27.712 969 4 1 13.85 46.2157 -84.6102 + 19 16.8626 22 3 1 -175.55 62.3984 -114.688 + 19 43.0442 1461 4 0 -95.6809 112.387 -86.25 + 19 485.213 420 4 1 -95.9594 112.699 -84.85 + 19 546.5 1466 5 0 -117.519 113.504 -56.25 + 19 3.42142 307 5 1 -118.737 113.421 -54.85 + 19 83.9555 306 5 1 -118.75 113.42 -54.8351 + 19 59.1954 305 5 1 -118.95 113.382 -54.6371 + 19 18.95 304 5 1 -119.15 113.373 -54.5028 + 19 78.6857 303 5 1 -119.495 113.259 -54.45 + 19 114.952 302 5 1 -119.55 113.448 -54.5667 + 19 255.259 421 4 1 -95.9499 112.383 -84.6224 + 19 13.1312 1335 0 0 -55.4832 87.0845 -206.25 + 19 70.7069 1334 0 0 -55.4857 87.05 -206.222 + 19 67.0118 1333 0 0 -55.5133 86.85 -206.028 + 19 369.453 621 0 1 -55.7445 85.4784 -204.85 + 19 49.2673 1319 0 0 -55.5089 83.9676 -205.85 + 19 75.3839 1318 0 0 -55.4577 83.8499 -206.023 + 19 38.0995 1317 0 0 -55.3127 83.65 -206.178 + 19 38.1812 718 2 1 -36.3737 9.79302 -144.85 + 19 266.48 1185 0 0 97.8429 57.0888 -206.25 + 19 50.9905 1403 0 1 100.836 56.9746 -204.85 + 19 51.9939 1404 0 1 100.95 56.9716 -204.796 + 19 61.5346 1405 0 1 101.15 56.9717 -204.701 + 19 165.872 1406 0 1 101.35 56.9733 -204.607 + 19 57.7476 1407 0 1 101.55 56.9719 -204.516 + 19 257.157 1175 1 0 140.858 55.1359 -176.25 + 19 31.0451 1613 1 1 142.856 54.8792 -174.85 + 19 116.734 1614 1 1 142.95 54.8657 -174.784 + 19 56.7896 1615 1 1 143.15 54.8357 -174.644 + 19 28.6314 1616 1 1 143.35 54.8049 -174.502 + 19 298.962 1168 2 0 170.088 53.8345 -146.25 + 19 24.8958 1755 2 1 171.292 53.8351 -144.849 + 19 100.85 1756 2 1 171.35 53.8361 -144.782 + 19 29.6729 1757 2 1 171.55 53.8422 -144.539 + 19 8.51768 1169 2 0 170.4 53.85 -145.956 + 19 53.0816 1179 1 0 118.483 56.0066 -176.25 + 19 66.5732 1090 0 0 26.7949 38.2494 -206.25 + 19 53.9006 1091 0 0 26.7951 38.25 -206.249 + 19 61.4645 358 7 0 110.619 -108.362 3.75 + 19 240.751 985 1 0 -109.82 17.1232 -176.25 + 19 98.4259 986 1 0 -110.211 17.2502 -175.995 + 19 10.911 973 2 0 -28.7676 14.85 -146.061 + 19 0.897402 732 2 1 -33.6013 17.0647 -144.85 + 19 5.31684 1002 2 0 -40.1206 20.4741 -145.85 + 19 34.9577 690 2 1 -41.9749 19.3516 -144.85 + 19 24.2976 995 2 0 -41.9749 19.1877 -145.85 + 19 46.8713 927 0 1 5.50721 36.3956 -204.85 + 19 178.567 926 0 1 5.45 36.4038 -204.836 + 19 195.671 925 0 1 5.25 36.432 -204.785 + 19 200.104 924 0 1 5.05 36.4623 -204.735 + 19 173.802 923 0 1 4.85 36.4937 -204.689 + 19 195.736 922 0 1 4.65 36.527 -204.644 + 19 211.248 921 0 1 4.45 36.5574 -204.598 + 19 224.63 920 0 1 4.25 36.589 -204.553 + 19 190.093 919 0 1 4.05 36.6241 -204.509 + 19 89.4153 918 0 1 3.85 36.6597 -204.468 + 19 157.337 915 0 1 3.15501 36.7608 -204.45 + 19 286.422 914 0 1 3.05 36.769 -204.458 + 19 221.719 913 0 1 2.85 36.7835 -204.472 + 19 282.9 912 0 1 2.65 36.797 -204.489 + 19 337.552 911 0 1 2.45 36.8052 -204.507 + 19 335.758 910 0 1 2.25 36.8088 -204.53 + 19 335.797 909 0 1 2.05 36.8099 -204.552 + 19 255.527 908 0 1 1.85 36.8081 -204.573 + 19 256.241 907 0 1 1.65 36.8053 -204.593 + 19 298.589 906 0 1 1.45 36.7999 -204.612 + 19 251.453 905 0 1 1.25 36.79 -204.635 + 19 322.043 904 0 1 1.05 36.7789 -204.662 + 19 262.856 903 0 1 0.85 36.7675 -204.696 + 19 285.516 902 0 1 0.65 36.7529 -204.725 + 19 401.375 901 0 1 0.45 36.7397 -204.755 + 19 272.555 900 0 1 0.25 36.7247 -204.787 + 19 262.786 899 0 1 -0.05 36.7018 -204.834 + 19 768.222 1080 0 0 -5.81125 36.1076 -205.85 + 19 2432.26 1079 0 0 -6.28896 36.05 -205.922 + 19 79.2562 1075 2 0 9.95007 35.1718 -145.85 + 19 98.379 1074 2 0 9.86924 35.0498 -146.013 + 19 0.210874 1073 2 0 9.81996 34.85 -146.247 +Number of digits in this event: 53 Using G4ParticleGun... -Particle energy: 4.01653 LIN +Particle energy: 3.51978 LIN Particle: proton Event: 20 -Number of tracker hits in this event: 35 - 20 89.4208 607 11 1 -58.6102 52.1845 125.55 - 20 102.481 1160 11 0 -58.6098 52.1857 124.15 - 20 126.797 607 10 1 -58.6046 52.2086 95.55 - 20 112.011 1160 10 0 -58.604 52.2093 94.15 - 20 106.624 607 9 1 -58.5877 52.2235 65.55 - 20 151.599 1160 9 0 -58.5883 52.2255 64.15 - 20 111.256 607 8 1 -58.6079 52.2776 35.55 - 20 101.46 1161 8 0 -58.6081 52.278 34.15 - 20 104.658 607 7 1 -58.6136 52.2846 5.55 - 20 106.254 1161 7 0 -58.6135 52.2831 4.15 - 20 173.473 607 6 1 -58.6106 52.2484 -24.45 - 20 113.001 1161 6 0 -58.6163 52.251 -25.85 - 20 120.247 606 5 1 -58.7274 52.3057 -54.45 - 20 107.503 1161 5 0 -58.7342 52.3086 -55.85 - 20 125.955 605 4 1 -58.8666 52.3703 -84.45 - 20 110.991 1161 4 0 -58.8722 52.3729 -85.85 - 20 126.144 605 3 1 -58.9823 52.4272 -114.45 - 20 101.03 1161 3 0 -58.9859 52.43 -115.85 - 20 121.631 604 2 1 -59.0623 52.4832 -144.45 - 20 184.337 1162 2 0 -59.0649 52.4847 -145.85 - 20 131.308 604 1 1 -59.1203 52.5156 -174.45 - 20 100.085 1162 1 0 -59.1231 52.5182 -175.85 - 20 304.774 604 0 1 -59.1854 52.5661 -204.45 - 20 88.5753 1162 0 0 -59.1885 52.5682 -205.85 - 20 7.89059 1315 2 1 83.05 -62.9258 -144.489 - 20 8.15891 348 9 1 -110.45 15.9224 65.15 - 20 557.737 414 11 1 -97.198 -120.221 125.248 - 20 276.728 1170 3 0 -59.5032 54.0644 -115.85 - 20 156.175 1147 9 0 -67.1853 49.5737 63.75 - 20 3.5432 1146 9 0 -67.1556 49.45 64.1454 - 20 24.638 577 9 1 -64.5894 47.5281 65.15 - 20 18.1595 1128 9 0 -64.2665 45.7038 64.1497 - 20 87.3828 1127 9 0 -64.2522 45.65 64.1305 - 20 100.444 1126 9 0 -64.3505 45.45 64.0613 - 20 230.232 1125 9 0 -64.4138 45.2499 63.9991 -Number of digits in this event: 17 +Number of tracker hits in this event: 33 + 20 98.1954 991 11 1 18.3049 -12.9524 125.55 + 20 138.853 835 11 0 18.3048 -12.9525 124.15 + 20 110.531 991 10 1 18.2992 -12.9522 95.55 + 20 104.877 835 10 0 18.2995 -12.9514 94.15 + 20 119.563 991 9 1 18.3065 -12.931 65.55 + 20 115.788 835 9 0 18.3056 -12.9288 64.15 + 20 196.182 991 8 1 18.2925 -12.8773 35.55 + 20 164.602 835 8 0 18.2907 -12.8733 34.15 + 20 145.068 991 7 1 18.2567 -12.7928 5.55 + 20 121.156 836 7 0 18.2551 -12.7896 4.15 + 20 109.411 990 6 1 18.2197 -12.7245 -24.45 + 20 313.493 836 6 0 18.22 -12.7227 -25.85 + 20 112.447 990 5 1 18.2263 -12.6836 -54.45 + 20 100.892 836 5 0 18.2289 -12.6817 -55.85 + 20 172.96 991 4 1 18.2771 -12.6357 -84.45 + 20 108.162 837 4 0 18.2805 -12.6344 -85.85 + 20 94.3656 991 3 1 18.3463 -12.6082 -114.45 + 20 102.898 837 3 0 18.3527 -12.6077 -115.85 + 20 86.6147 992 2 1 18.4815 -12.5955 -144.45 + 20 117.392 837 2 0 18.4865 -12.5927 -145.85 + 20 113.08 992 1 1 18.5927 -12.5363 -174.45 + 20 94.1407 837 1 0 18.5972 -12.5311 -175.85 + 20 101.977 993 0 1 18.6985 -12.4244 -204.45 + 20 118.347 838 0 0 18.7028 -12.4192 -205.85 + 20 1.97868 70 6 1 -165.95 90.4838 -24.5762 + 20 115.065 902 8 0 -140.979 0.564063 33.75 + 20 62.6807 192 8 1 -141.614 0.287565 35.15 + 20 73.8327 191 8 1 -141.75 0.271214 35.3193 + 20 53.7337 190 8 1 -141.95 0.267215 35.45 + 20 90.2428 980 3 0 -89.7206 16.05 -116.09 + 20 163.431 840 4 0 18.0356 -12.0084 -85.85 + 20 23.5727 837 6 0 18.1505 -12.65 -25.9217 + 20 360.776 990 7 1 18.2371 -12.7937 5.55 +Number of digits in this event: 13 Using G4ParticleGun... -Particle energy: 7.18442 LIN +Particle energy: 6.24122 LIN Particle: proton Event: 21 -Number of tracker hits in this event: 30 - 21 291.301 862 11 1 -7.47673 -44.7651 125.55 - 21 114.632 676 11 0 -7.47601 -44.764 124.15 - 21 226.5 862 10 1 -7.46089 -44.7427 95.55 - 21 140.098 676 10 0 -7.45941 -44.7414 94.15 - 21 104.53 863 9 1 -7.42818 -44.7162 65.55 - 21 147.619 676 9 0 -7.42671 -44.7156 64.15 - 21 116.302 863 8 1 -7.39656 -44.7079 35.55 - 21 121.368 676 8 0 -7.39529 -44.7069 34.15 - 21 100.46 863 7 1 -7.36841 -44.6874 5.55 - 21 96.8996 676 7 0 -7.36743 -44.6862 4.15 - 21 126.435 863 6 1 -7.34464 -44.6652 -24.45 - 21 100.23 676 6 0 -7.34435 -44.6636 -25.85 - 21 115.037 863 5 1 -7.3433 -44.6316 -54.45 - 21 137.216 677 5 0 -7.3435 -44.6315 -55.85 - 21 201.846 863 4 1 -7.34528 -44.6291 -84.45 - 21 120.229 677 4 0 -7.34514 -44.6283 -85.85 - 21 110.751 863 3 1 -7.34564 -44.6105 -114.45 - 21 166.163 677 3 0 -7.34461 -44.6098 -115.85 - 21 112.483 863 2 1 -7.32128 -44.5973 -144.45 - 21 142.972 677 2 0 -7.31976 -44.5971 -145.85 - 21 151.825 863 1 1 -7.28996 -44.5918 -174.45 - 21 113.532 677 1 0 -7.28973 -44.591 -175.85 - 21 134.967 863 0 1 -7.28887 -44.5743 -204.45 - 21 102.487 677 0 0 -7.29036 -44.5731 -205.85 - 21 14.5024 315 8 0 111.679 -117.058 33.783 - 21 35.113 1092 0 1 38.5922 -13.4882 -204.566 - 21 65.1804 953 0 1 10.6861 175.276 -204.45 - 21 108.492 952 0 1 10.65 175.267 -204.5 - 21 128.851 864 1 1 -7.24983 -44.6295 -174.645 - 21 196.264 676 3 0 -7.33108 -44.6501 -116.193 -Number of digits in this event: 18 +Number of tracker hits in this event: 64 + 21 96.2041 701 11 1 -39.7117 -19.2025 125.55 + 21 187.844 804 11 0 -39.7124 -19.2014 124.15 + 21 195.568 701 10 1 -39.7312 -19.1694 95.55 + 21 122.595 804 10 0 -39.731 -19.1691 94.15 + 21 118.606 701 9 1 -39.7281 -19.1647 65.55 + 21 104.462 804 9 0 -39.7279 -19.1655 64.15 + 21 205.591 701 8 1 -39.7211 -19.1845 35.55 + 21 113.261 804 8 0 -39.7219 -19.1853 34.15 + 21 116.305 701 7 1 -39.7384 -19.2053 5.55 + 21 106.294 804 7 0 -39.7403 -19.2067 4.15 + 21 102.313 701 6 1 -39.7813 -19.2346 -24.45 + 21 98.7961 804 6 0 -39.7845 -19.2361 -25.85 + 21 133.201 700 5 1 -39.8523 -19.2652 -54.45 + 21 108.838 803 5 0 -39.8565 -19.2674 -55.85 + 21 127.201 700 4 1 -39.9476 -19.31 -84.45 + 21 112.462 803 4 0 -39.9525 -19.3131 -85.85 + 21 108.261 699 3 1 -40.059 -19.383 -114.45 + 21 138.521 803 3 0 -40.0631 -19.3862 -115.85 + 21 121.797 699 2 1 -40.1425 -19.4523 -144.45 + 21 111.706 802 2 0 -40.1468 -19.4554 -145.85 + 21 138.859 699 1 1 -40.238 -19.5173 -174.45 + 21 102.076 802 1 0 -40.2425 -19.5203 -175.85 + 21 151.699 698 0 1 -40.3387 -19.5806 -204.45 + 21 141.426 802 0 0 -40.3441 -19.5831 -205.85 + 21 258.347 796 0 0 -39.393 -20.7274 -205.85 + 21 154.526 797 0 0 -39.224 -20.6497 -206.134 + 21 123.7 716 10 1 -36.6514 -22.351 95.55 + 21 228.887 717 10 1 -36.65 -22.3509 95.5395 + 21 116.524 788 10 0 -36.4596 -22.3737 94.15 + 21 107.401 742 9 1 -31.5831 -24.0803 65.5499 + 21 171.193 778 9 0 -31.2433 -24.2766 64.1499 + 21 15.9058 784 8 1 -23.0856 -27.3325 35.55 + 21 124.454 785 8 1 -23.05 -27.3003 35.4942 + 21 256.719 766 8 0 -22.763 -26.7461 34.15 + 21 79.6617 767 8 0 -22.7261 -26.65 33.914 + 21 143.915 797 7 1 -20.51 -15.6343 5.55 + 21 16.6343 798 7 1 -20.45 -15.5782 5.22457 + 21 87.6731 823 7 0 -20.1111 -15.3452 4.15 + 21 33.2667 824 7 0 -19.9974 -15.25 3.84463 + 21 103.91 859 6 1 -8.13831 -3.96692 -24.45 + 21 104.581 878 6 0 -8.4748 -4.32751 -25.85 + 21 65.897 821 5 1 -15.7627 -4.14921 -54.45 + 21 213.54 822 5 1 -15.6497 -3.94027 -54.4977 + 21 208.019 823 5 1 -15.4499 -3.53023 -54.5217 + 21 475.571 824 5 1 -15.25 -2.77967 -54.5207 + 21 125.344 825 5 1 -14.9731 -1.51111 -54.4502 + 21 97.4218 890 5 0 -14.7605 -1.87809 -55.85 + 21 264.807 936 3 1 7.35298 96.6091 -114.45 + 21 361.753 937 3 1 7.45023 96.7853 -114.528 + 21 115.152 822 7 0 -20.6928 -15.4883 4.14953 + 21 115.675 750 6 1 -30.0069 -12.8515 -24.45 + 21 117.633 831 6 0 -29.8045 -13.6688 -25.85 + 21 27.5991 830 6 0 -29.7793 -13.85 -26.1547 + 21 56.9781 644 6 0 -18.5744 -51.1704 -26.25 + 21 130.175 643 6 0 -18.5337 -51.2502 -26.0822 + 21 129.819 808 6 1 -18.3463 -51.8836 -24.8499 + 21 55.1713 809 6 1 -18.0707 -51.8905 -24.45 + 21 58.0523 810 6 1 -18.05 -51.8604 -24.516 + 21 120.514 641 6 0 -18.5151 -51.7427 -25.85 + 21 8.6467 642 6 0 -18.6716 -51.65 -26.2354 + 21 466.569 765 8 0 -22.4206 -26.85 33.9323 + 21 233.711 779 9 0 -31.2149 -24.25 63.8596 + 21 224.547 681 9 0 -90.9001 -43.7457 63.7504 + 21 57.4735 682 9 0 -91.1244 -43.65 63.8097 +Number of digits in this event: 32 Using G4ParticleGun... -Particle energy: 7.32873 LIN +Particle energy: 4.64603 LIN Particle: proton Event: 22 -Number of tracker hits in this event: 27 - 22 100.68 727 11 1 -34.6035 -25.8501 125.55 - 22 110.871 771 11 0 -34.6039 -25.8483 124.15 - 22 133.321 727 10 1 -34.6094 -25.812 95.55 - 22 135.308 771 10 0 -34.6101 -25.8101 94.15 - 22 122.754 727 9 1 -34.6237 -25.7705 65.55 - 22 108.091 771 9 0 -34.6236 -25.7684 64.15 - 22 127.289 727 8 1 -34.6211 -25.7215 35.55 - 22 138.852 771 8 0 -34.6206 -25.7185 34.15 - 22 117.97 727 7 1 -34.6113 -25.6545 5.55 - 22 127.034 771 7 0 -34.6108 -25.6511 4.15 - 22 127.304 727 6 1 -34.6027 -25.5787 -24.45 - 22 151.293 772 6 0 -34.6019 -25.5752 -25.85 - 22 117.472 727 5 1 -34.586 -25.5053 -54.45 - 22 120.362 772 5 0 -34.5858 -25.5019 -55.85 - 22 171.863 727 4 1 -34.5802 -25.4347 -84.45 - 22 114.517 773 4 0 -34.5801 -25.4318 -85.85 - 22 367.826 727 3 1 -34.5818 -25.3766 -114.45 - 22 108.221 773 3 0 -34.5822 -25.3738 -115.85 - 22 118.326 727 2 1 -34.5894 -25.3182 -144.45 - 22 111.143 773 2 0 -34.5886 -25.315 -145.85 - 22 104.394 727 1 1 -34.5718 -25.2532 -174.45 - 22 87.6806 773 1 0 -34.5719 -25.2506 -175.85 - 22 34.4142 774 1 0 -34.572 -25.25 -176.148 - 22 139.457 727 0 1 -34.5759 -25.1909 -204.45 - 22 166.82 774 0 0 -34.5754 -25.188 -205.85 - 22 62.4662 773 0 0 -34.6002 -25.25 -205.938 - 22 80.9564 775 0 0 -32.8008 -24.9355 -205.85 -Number of digits in this event: 14 +Number of tracker hits in this event: 28 + 22 104.344 1336 10 1 87.4468 -68.0168 95.55 + 22 133.901 560 10 0 87.4476 -68.0159 94.15 + 22 118.331 1337 9 1 87.4663 -67.9966 65.55 + 22 128.306 560 9 0 87.4674 -67.9963 64.15 + 22 107.099 1337 8 1 87.49 -67.9836 35.55 + 22 108.07 560 8 0 87.4913 -67.9851 34.15 + 22 150.477 1337 7 1 87.5186 -68.0202 5.55 + 22 191.854 560 7 0 87.5193 -68.0246 4.15 + 22 106.994 1337 6 1 87.5352 -68.1082 -24.45 + 22 105.05 559 6 0 87.5365 -68.1126 -25.85 + 22 125.969 1337 5 1 87.5615 -68.2103 -54.45 + 22 133.457 559 5 0 87.5619 -68.215 -55.85 + 22 113.619 1337 4 1 87.5681 -68.3149 -84.45 + 22 107.783 558 4 0 87.5687 -68.3214 -85.85 + 22 103.148 1337 3 1 87.5803 -68.4538 -114.45 + 22 117.935 557 3 0 87.5817 -68.4601 -115.85 + 22 94.4522 1337 2 1 87.6073 -68.5839 -144.45 + 22 110.092 557 2 0 87.607 -68.5906 -145.85 + 22 90.5702 1337 1 1 87.6052 -68.7286 -174.45 + 22 160.658 556 1 0 87.6056 -68.7349 -175.85 + 22 123.049 1337 0 1 87.6106 -68.8672 -204.45 + 22 130.031 555 0 0 87.6115 -68.8718 -205.85 + 22 67.4244 556 0 0 87.5972 -68.85 -205.981 + 22 83.6001 557 0 0 87.6439 -68.65 -205.989 + 22 44.6737 1342 0 1 88.6014 -69.1218 -204.85 + 22 66.3864 1343 0 1 88.65 -69.1534 -204.804 + 22 103.539 1344 0 1 88.8501 -69.2134 -204.726 + 22 394.373 1345 0 1 89.05 -69.1876 -204.585 +Number of digits in this event: 13 Using G4ParticleGun... -Particle energy: 4.1079 LIN +Particle energy: 2.42228 LIN Particle: proton Event: 23 -Number of tracker hits in this event: 21 - 23 119.403 1306 7 1 81.2539 123.651 5.55 - 23 154.214 1517 7 0 81.2534 123.651 4.15 - 23 110.375 1305 6 1 81.246 123.656 -24.45 - 23 118.94 1517 6 0 81.2459 123.657 -25.85 - 23 109.867 1305 5 1 81.2398 123.672 -54.45 - 23 101.152 1517 5 0 81.239 123.672 -55.85 - 23 122.909 1305 4 1 81.2292 123.667 -84.45 - 23 143.546 1517 4 0 81.2304 123.667 -85.85 - 23 113.579 1306 3 1 81.2579 123.661 -114.45 - 23 107.987 1517 3 0 81.2589 123.659 -115.85 - 23 105.801 1306 2 1 81.287 123.625 -144.45 - 23 132.975 1517 2 0 81.2874 123.623 -145.85 - 23 139.382 1306 1 1 81.2968 123.567 -174.45 - 23 125.629 1517 1 0 81.2989 123.564 -175.85 - 23 94.4399 1306 0 1 81.338 123.48 -204.45 - 23 154.009 1516 0 0 81.3389 123.477 -205.85 - 23 6.87733 1284 4 0 -38.8767 76.85 -85.8987 - 23 81.3016 706 4 1 -38.7199 78.6084 -84.8498 - 23 127.349 707 4 1 -38.65 78.8407 -84.7731 - 23 130.294 708 4 1 -38.45 79.116 -84.662 - 23 213.488 1294 4 0 -37.6736 78.9835 -85.85 -Number of digits in this event: 13 +Number of tracker hits in this event: 54 + 23 116.553 724 11 1 -35.1989 -71.0852 125.55 + 23 325.59 544 11 0 -35.1994 -71.0857 124.15 + 23 84.1242 724 10 1 -35.2119 -71.1 95.55 + 23 150.754 544 10 0 -35.2133 -71.0992 94.15 + 23 129.213 724 9 1 -35.2444 -71.0972 65.55 + 23 405.762 544 9 0 -35.2484 -71.0966 64.15 + 23 239.386 723 8 1 -35.3369 -71.0824 35.55 + 23 169.333 544 8 0 -35.3393 -71.0817 34.15 + 23 180.111 723 7 1 -35.3875 -71.0706 5.55 + 23 139.632 544 7 0 -35.3899 -71.0711 4.15 + 23 207.386 723 6 1 -35.4317 -71.0849 -24.45 + 23 114.721 544 6 0 -35.4333 -71.0883 -25.85 + 23 111.773 722 5 1 -35.4706 -71.1579 -54.45 + 23 118.087 544 5 0 -35.4733 -71.1634 -55.85 + 23 167.804 722 4 1 -35.535 -71.2776 -84.45 + 23 115.39 543 4 0 -35.5401 -71.2832 -85.85 + 23 99.211 721 3 1 -35.6507 -71.4157 -114.45 + 23 138.393 543 3 0 -35.6566 -71.4208 -115.85 + 23 154.352 721 2 1 -35.774 -71.5253 -144.45 + 23 130.756 542 2 0 -35.7799 -71.5317 -145.85 + 23 103.504 720 1 1 -35.8971 -71.6589 -174.45 + 23 238.213 541 1 0 -35.9001 -71.6667 -175.85 + 23 104.374 720 0 1 -35.9643 -71.8294 -204.45 + 23 233.166 541 0 0 -35.9646 -71.8356 -205.85 + 23 85.6749 1622 7 0 -177.636 144.597 3.75513 + 23 136.57 431 0 0 -54.3819 -93.75 -206.122 + 23 22.8791 423 1 0 -28.9965 -95.3522 -176.25 + 23 94.8422 424 1 0 -28.6633 -95.3498 -175.895 + 23 102.349 762 1 1 -27.5782 -95.7008 -174.85 + 23 137.427 112 2 1 -157.601 -18.8777 -144.45 + 23 197.151 111 2 1 -157.75 -18.9935 -144.568 + 23 107.945 110 2 1 -157.95 -19.1634 -144.692 + 23 218.19 109 2 1 -158.15 -19.302 -144.581 + 23 30.7482 107 2 1 -158.55 -19.3906 -144.458 + 23 124.89 56 6 1 -168.859 -46.9384 -24.85 + 23 162.404 466 0 0 -80.3933 -86.6542 -206.25 + 23 142.333 467 0 0 -80.3947 -86.6498 -206.246 + 23 12.129 465 0 0 -80.1528 -86.8501 -205.953 + 23 38.2525 497 0 1 -80.6149 -86.9742 -204.85 + 23 75.591 496 0 1 -80.6501 -86.9733 -204.837 + 23 40.4719 249 0 0 -81.2697 -130.263 -206.25 + 23 88.7462 248 0 0 -81.3237 -130.35 -206.158 + 23 39.0073 247 0 0 -81.4601 -130.55 -205.938 + 23 195.667 489 0 1 -82.1001 -131.496 -204.85 + 23 60.9748 488 0 1 -82.25 -131.729 -204.582 + 23 4.97334 105 1 0 -116.821 -159.141 -176.25 + 23 129.876 104 1 0 -116.833 -159.15 -176.24 + 23 94.2278 103 1 0 -117.08 -159.35 -176.03 + 23 67.6922 308 1 1 -118.414 -160.459 -174.85 + 23 88.3073 307 1 1 -118.55 -160.569 -174.73 + 23 54.6858 306 1 1 -118.75 -160.728 -174.554 + 23 51.2562 540 0 0 -35.9157 -71.85 -205.984 + 23 115.72 544 4 0 -35.5429 -71.25 -85.9506 + 23 245.616 545 4 0 -35.5403 -71.05 -86.1228 +Number of digits in this event: 28 Using G4ParticleGun... -Particle energy: 9.8342 LIN +Particle energy: 9.92749 LIN Particle: proton Event: 24 -Number of tracker hits in this event: 24 - 24 136.998 782 11 1 -23.5321 7.56006 125.55 - 24 122.65 937 11 0 -23.5326 7.56001 124.15 - 24 98.0944 782 10 1 -23.5424 7.55793 95.55 - 24 108.017 937 10 0 -23.5433 7.55791 94.15 - 24 127.073 782 9 1 -23.5614 7.55881 65.55 - 24 112.844 937 9 0 -23.5632 7.55874 64.15 - 24 122.596 782 8 1 -23.5891 7.56732 35.55 - 24 93.9411 937 8 0 -23.59 7.56819 34.15 - 24 126.683 782 7 1 -23.6079 7.58771 5.55 - 24 109.081 937 7 0 -23.6085 7.58924 4.15 - 24 101.69 782 6 1 -23.6197 7.61787 -24.45 - 24 151.023 937 6 0 -23.6197 7.61948 -25.85 - 24 109.926 782 5 1 -23.6244 7.64788 -54.45 - 24 139.198 937 5 0 -23.6234 7.64929 -55.85 - 24 155.418 782 4 1 -23.6041 7.67802 -84.45 - 24 104.673 938 4 0 -23.6035 7.67912 -85.85 - 24 131.037 782 3 1 -23.5928 7.70347 -114.45 - 24 117.078 938 3 0 -23.5916 7.7044 -115.85 - 24 113.847 782 2 1 -23.568 7.72207 -144.45 - 24 136.964 938 2 0 -23.5674 7.72228 -145.85 - 24 137.766 782 1 1 -23.5545 7.72553 -174.45 - 24 117.871 938 1 0 -23.5545 7.72559 -175.85 - 24 118.997 782 0 1 -23.5544 7.72675 -204.45 - 24 113.236 938 0 0 -23.5552 7.72709 -205.85 -Number of digits in this event: 12 +Number of tracker hits in this event: 77 + 24 100.357 1310 11 0 -14.2251 82.1371 124.15 + 24 118.801 829 10 1 -14.2259 82.1359 95.55 + 24 100.523 1310 10 0 -14.226 82.1354 94.15 + 24 112.283 829 9 1 -14.2299 82.1272 65.55 + 24 144.239 1310 9 0 -14.23 82.1267 64.15 + 24 213.727 829 8 1 -14.2337 82.1179 35.55 + 24 180.46 1310 8 0 -14.2339 82.1178 34.15 + 24 137.41 829 7 1 -14.2405 82.1113 5.55 + 24 131.622 1310 7 0 -14.241 82.1105 4.15 + 24 160.358 828 6 1 -14.2513 82.0953 -24.45 + 24 122.133 1310 6 0 -14.2523 82.0941 -25.85 + 24 113.963 828 5 1 -14.2711 82.0711 -54.45 + 24 208.482 1310 5 0 -14.2723 82.0709 -55.85 + 24 140.33 828 4 1 -14.2979 82.0682 -84.45 + 24 252.316 1310 4 0 -14.2993 82.068 -85.85 + 24 110.196 828 3 1 -14.3272 82.066 -114.45 + 24 162.082 1310 3 0 -14.3282 82.0653 -115.85 + 24 103.719 828 2 1 -14.3511 82.0486 -144.45 + 24 185.658 1309 2 0 -14.3521 82.0475 -145.85 + 24 106.55 828 1 1 -14.3684 82.0242 -174.45 + 24 181.735 1309 1 0 -14.3684 82.0227 -175.85 + 24 123.437 828 0 1 -14.3725 81.9898 -204.45 + 24 121.54 1309 0 0 -14.3733 81.9884 -205.85 + 24 81.6069 1052 0 1 30.6485 95.5301 -204.54 + 24 673.168 1158 0 0 -15.436 51.775 -206.25 + 24 606.918 1157 0 0 -15.4403 51.65 -206.065 + 24 1336.75 822 0 1 -15.466 50.8268 -204.85 + 24 42.1309 1067 1 0 -15.3916 33.4574 -176.25 + 24 1206.38 1066 1 0 -15.3916 33.45 -176.238 + 24 220.445 1065 1 0 -15.3928 33.25 -175.906 + 24 1426.93 823 1 1 -15.3928 32.6025 -174.85 + 24 288.329 983 2 0 -12.9632 16.6862 -146.25 + 24 1526.24 982 2 0 -12.9576 16.65 -146.185 + 24 2125.8 836 2 1 -12.8124 15.9235 -144.85 + 24 573.957 916 3 0 -7.75646 3.28533 -116.25 + 24 2803.15 915 3 0 -7.74219 3.25 -116.17 + 24 4738.48 863 3 1 -7.40758 2.70533 -114.85 + 24 6.53911 1408 0 0 12.1014 101.939 -206.25 + 24 153.731 1409 0 0 12.1068 101.95 -206.23 + 24 2.39102 1410 0 0 12.2043 102.15 -205.863 + 24 367.014 962 0 1 12.476 102.732 -204.85 + 24 35.4943 1499 1 0 15.1886 120.069 -176.25 + 24 83.4084 1500 1 0 15.2013 120.15 -176.113 + 24 124.318 976 1 1 15.2934 120.8 -174.85 + 24 2.72856 1550 2 0 15.4362 130.347 -146.25 + 24 276.244 1551 2 0 15.4363 130.35 -146.24 + 24 168.119 976 2 1 15.4409 130.859 -144.85 + 24 178.508 1593 3 0 8.72853 138.847 -116.25 + 24 2.08386 1594 3 0 8.63402 138.95 -115.859 + 24 126.379 941 3 1 8.37466 139.201 -114.85 + 24 124.398 1608 4 0 -4.15032 141.886 -86.25 + 24 63.5768 876 4 1 -4.8011 142.003 -84.85 + 24 96.9033 875 4 1 -4.85 142.012 -84.7453 + 24 52.8421 1712 5 0 -21.4968 162.704 -56.2499 + 24 132.721 1713 5 0 -21.5325 162.75 -56.1875 + 24 71.2093 1714 5 0 -21.6792 162.95 -55.9413 + 24 5.2402 788 5 1 -22.4372 163.802 -54.85 + 24 116.733 787 5 1 -22.45 163.816 -54.8317 + 24 45.601 786 5 1 -22.65 164.04 -54.5406 + 24 176.334 979 2 1 16.0267 133.224 -144.45 + 24 48.8199 1301 1 0 -156.933 80.25 -176.107 + 24 14.5613 195 2 1 -141.15 86.6975 -144.76 + 24 498.993 108 1 1 -158.393 81.2325 -174.85 + 24 43.5131 107 1 1 -158.55 81.2378 -174.744 + 24 73.5395 1116 0 0 11.8035 43.3306 -206.25 + 24 139.083 431 5 1 -93.8976 -138.317 -54.45 + 24 120.051 212 5 0 -93.2267 -137.646 -55.85 + 24 40.3409 213 5 0 -93.0091 -137.55 -56.1399 + 24 81.6392 626 4 0 -57.4755 -54.8055 -86.25 + 24 56.4699 627 4 0 -57.5216 -54.65 -86.2183 + 24 59.1212 570 4 0 -63.5412 -65.9417 -86.25 + 24 61.8679 729 7 1 -34.1419 -104.127 5.43067 + 24 51.9942 1310 1 0 -14.3187 82.05 -176.215 + 24 93.7752 1484 1 0 -43.2292 117.024 -176.25 + 24 127.081 1485 1 0 -43.2899 117.15 -176.152 + 24 17.1535 1299 4 0 -14.623 79.8746 -85.8502 + 24 124.291 1298 4 0 -14.6287 79.85 -85.8663 +Number of digits in this event: 45 Using G4ParticleGun... -Particle energy: 2.32537 LIN +Particle energy: 6.65436 LIN Particle: proton Event: 25 -Number of tracker hits in this event: 26 - 25 120.555 688 11 1 -42.3906 -2.4801 125.55 - 25 106.875 887 11 0 -42.3886 -2.47799 124.15 - 25 136.785 688 10 1 -42.354 -2.43277 95.55 - 25 101.426 888 10 0 -42.353 -2.42646 94.15 - 25 125.321 688 9 1 -42.3364 -2.30473 65.55 - 25 131.707 888 9 0 -42.3353 -2.29869 64.15 - 25 130.939 688 8 1 -42.3075 -2.17384 35.55 - 25 234.791 889 8 0 -42.3037 -2.16533 34.15 - 25 135.676 689 7 1 -42.2346 -1.99678 5.55 - 25 127.474 890 7 0 -42.2309 -1.98887 4.15 - 25 140.141 689 6 1 -42.1529 -1.8223 -24.45 - 25 110.751 891 6 0 -42.1463 -1.81302 -25.85 - 25 123.76 690 5 1 -42.0209 -1.62771 -54.45 - 25 121.637 892 5 0 -42.014 -1.61657 -55.85 - 25 163.154 690 4 1 -41.8729 -1.39038 -84.45 - 25 170.969 893 4 0 -41.8638 -1.37904 -85.85 - 25 143.484 691 3 1 -41.6736 -1.14208 -114.45 - 25 115.055 894 3 0 -41.6677 -1.13119 -115.85 - 25 103.599 692 2 1 -41.5431 -0.898576 -144.45 - 25 124.302 895 2 0 -41.5405 -0.88773 -145.85 - 25 101.955 692 1 1 -41.4763 -0.666787 -174.45 - 25 112.057 896 1 0 -41.4759 -0.652671 -175.85 - 25 32.7922 897 1 0 -41.4758 -0.65 -176.11 - 25 116.248 692 0 1 -41.4582 -0.366225 -204.45 - 25 102.351 898 0 0 -41.4587 -0.349811 -205.85 - 25 214.722 691 4 1 -41.85 -1.37617 -84.4746 -Number of digits in this event: 17 +Number of tracker hits in this event: 48 + 25 92.8797 648 9 1 -50.3003 -110.006 65.55 + 25 117.869 350 9 0 -50.3007 -110.007 64.15 + 25 123.321 648 8 1 -50.3103 -110.011 35.55 + 25 94.6388 350 8 0 -50.3108 -110.012 34.15 + 25 174.688 648 7 1 -50.3187 -110.025 5.55 + 25 7701.04 350 7 0 -50.3181 -110.026 4.15 + 25 791.131 623 6 1 -55.3912 -121.591 -24.45 + 25 333.001 622 6 1 -55.45 -121.7 -24.7147 + 25 1128 289 6 0 -55.6997 -122.167 -25.85 + 25 612.381 593 5 1 -61.3908 -133.914 -54.45 + 25 717.12 592 5 1 -61.45 -134.015 -54.6501 + 25 901.288 227 5 0 -61.8152 -134.603 -55.85 + 25 275.01 226 5 0 -61.9065 -134.75 -56.1505 + 25 1240.33 547 4 1 -70.5622 -148.521 -84.45 + 25 78.9813 546 4 1 -70.65 -148.684 -84.8263 + 25 285.262 155 4 0 -70.877 -149.122 -85.85 + 25 1187.26 154 4 0 -70.8917 -149.15 -85.9164 + 25 1485.9 513 3 1 -77.4256 -161.793 -114.45 + 25 335.01 512 3 1 -77.45 -161.927 -114.785 + 25 1939.2 88 3 0 -77.5417 -162.358 -115.85 + 25 3660.6 503 2 1 -79.2724 -174.727 -144.45 + 25 1317.42 24 2 0 -79.3575 -175.305 -145.85 + 25 5908.26 23 2 0 -79.3647 -175.35 -145.957 + 25 4329.78 351 7 0 -50.3053 -109.95 3.91983 + 25 568.952 352 7 0 -50.2885 -109.75 3.92515 + 25 131.267 643 6 1 -51.4034 -110.945 -24.45 + 25 141.415 345 6 0 -51.4568 -110.991 -25.85 + 25 133.808 637 5 1 -52.5507 -111.943 -54.45 + 25 125.306 340 5 0 -52.6036 -111.989 -55.85 + 25 238.176 631 4 1 -53.6855 -112.935 -84.45 + 25 153.077 335 4 0 -53.7395 -112.982 -85.85 + 25 58.9558 626 3 1 -54.8442 -113.932 -114.45 + 25 72.3224 625 3 1 -54.85 -113.937 -114.601 + 25 130.975 330 3 0 -54.8975 -113.979 -115.85 + 25 137.69 620 2 1 -55.984 -114.937 -144.45 + 25 110.367 325 2 0 -56.0388 -114.983 -145.85 + 25 113.745 614 1 1 -57.1559 -115.918 -174.45 + 25 150.289 320 1 0 -57.2115 -115.962 -175.85 + 25 133.952 608 0 1 -58.3506 -116.874 -204.45 + 25 102.363 316 0 0 -58.4076 -116.919 -205.85 + 25 8.35806 339 4 0 -54.0724 -112.163 -85.85 + 25 89.1686 340 4 0 -54.0805 -112.15 -85.871 + 25 43.8433 341 4 0 -54.185 -111.95 -86.1397 + 25 9.08677 491 3 1 -81.6624 -77.9393 -114.45 + 25 143.683 492 3 1 -81.65 -77.9476 -114.476 + 25 47.1954 503 3 0 -81.1888 -79.3626 -115.85 + 25 195.287 502 3 0 -81.1562 -79.45 -115.957 + 25 59.0773 501 3 0 -81.129 -79.65 -116.249 +Number of digits in this event: 34 Using G4ParticleGun... -Particle energy: 8.00254 LIN +Particle energy: 3.22686 LIN Particle: proton Event: 26 -Number of tracker hits in this event: 31 - 26 132.863 979 11 1 15.9605 8.50466 125.55 - 26 109.663 942 11 0 15.9606 8.50483 124.15 - 26 126.075 979 10 1 15.9623 8.50499 95.55 - 26 150.063 942 10 0 15.9595 8.50549 94.15 - 26 212.202 979 9 1 15.8973 8.51824 65.55 - 26 116.576 942 9 0 15.8942 8.51907 64.15 - 26 133.498 978 8 1 15.8297 8.53995 35.55 - 26 123.962 942 8 0 15.8285 8.54105 34.15 - 26 214.221 978 7 1 15.8008 8.56269 5.55 - 26 159.897 942 7 0 15.7997 8.56385 4.15 - 26 172.815 978 6 1 15.7856 8.59054 -24.45 - 26 115.415 942 6 0 15.7843 8.59062 -25.85 - 26 102.733 978 5 1 15.7596 8.59304 -54.45 - 26 115.416 942 5 0 15.7591 8.59335 -55.85 - 26 128.906 978 4 1 15.7484 8.59931 -84.45 - 26 113.389 942 4 0 15.7472 8.59922 -85.85 - 26 121.604 978 3 1 15.7247 8.59659 -114.45 - 26 110.948 942 3 0 15.7243 8.59736 -115.85 - 26 108.576 978 2 1 15.7163 8.61212 -144.45 - 26 107.299 942 2 0 15.7148 8.61267 -145.85 - 26 97.2692 978 1 1 15.6836 8.62374 -174.45 - 26 93.8888 942 1 0 15.6825 8.62338 -175.85 - 26 121.075 978 0 1 15.6594 8.61148 -204.45 - 26 110.918 942 0 0 15.6575 8.61071 -205.85 - 26 110.412 979 6 1 15.85 8.60725 -24.5441 - 26 376.958 980 6 1 16.05 8.63542 -24.6705 - 26 80.5088 980 9 1 16.05 8.47469 65.3116 - 26 580.259 938 9 0 17.0005 7.8259 64.1499 - 26 87.341 939 9 0 16.7461 7.85008 63.9282 - 26 49.4198 974 9 1 14.968 8.35021 65.15 - 26 5.10041 973 9 1 14.85 8.30917 65.1596 -Number of digits in this event: 15 +Number of tracker hits in this event: 30 + 26 122.262 1061 11 1 32.3869 31.4892 125.55 + 26 116.23 1057 11 0 32.3863 31.4862 124.15 + 26 144.594 1061 10 1 32.3597 31.4264 95.55 + 26 115.06 1056 10 0 32.3592 31.4243 94.15 + 26 144.164 1061 9 1 32.3497 31.3761 65.55 + 26 112.097 1056 9 0 32.3499 31.3762 64.15 + 26 155.303 1061 8 1 32.3528 31.3758 35.55 + 26 127.187 1056 8 0 32.3535 31.3775 34.15 + 26 241.894 1061 7 1 32.3702 31.3978 5.55 + 26 132.321 1056 7 0 32.3697 31.3989 4.15 + 26 253.438 1061 6 1 32.3558 31.4186 -24.45 + 26 113.525 1056 6 0 32.3542 31.4205 -25.85 + 26 109.475 1061 5 1 32.3078 31.4601 -54.45 + 26 102.905 1057 5 0 32.306 31.462 -55.85 + 26 104.275 1061 4 1 32.2657 31.5071 -84.45 + 26 116.953 1057 4 0 32.2507 31.5124 -85.85 + 26 105.172 1059 3 1 31.9503 31.623 -114.45 + 26 113.685 1057 3 0 31.9381 31.6297 -115.85 + 26 117.843 1058 2 1 31.686 31.7642 -144.45 + 26 106.106 1058 2 0 31.6733 31.7714 -145.85 + 26 114.786 1056 1 1 31.4068 31.9157 -174.45 + 26 131.435 1059 1 0 31.3949 31.9229 -175.85 + 26 94.419 1055 0 1 31.1487 32.0672 -204.45 + 26 282.917 1060 0 0 31.1364 32.0737 -205.85 + 26 77.8765 1059 0 0 31.3224 32.05 -205.995 + 26 79.8262 1060 9 1 32.25 31.3854 65.4463 + 26 98.211 1059 9 1 32.05 31.4501 65.2065 + 26 67.2 1059 9 0 31.4305 31.9169 64.15 + 26 178.955 1060 9 0 31.2846 32.05 63.9757 + 26 9.94549 1061 9 0 31.1413 32.25 63.7755 +Number of digits in this event: 12 Using G4ParticleGun... -Particle energy: 8.65494 LIN +Particle energy: 6.76831 LIN Particle: proton Event: 27 -Number of tracker hits in this event: 24 - 27 93.2648 886 11 1 -2.8157 -28.9919 125.55 - 27 96.847 755 11 0 -2.81476 -28.992 124.15 - 27 109.887 886 10 1 -2.7972 -28.9923 95.55 - 27 116.404 755 10 0 -2.79644 -28.9927 94.15 - 27 359.225 886 9 1 -2.78068 -29.0017 65.55 - 27 133.092 755 9 0 -2.78042 -29.0019 64.15 - 27 113.277 886 8 1 -2.77697 -29.006 35.55 - 27 121.213 755 8 0 -2.77753 -29.0062 34.15 - 27 127.348 886 7 1 -2.78822 -29.0073 5.55 - 27 99.4704 755 7 0 -2.78881 -29.008 4.15 - 27 118.86 886 6 1 -2.8 -29.0261 -24.45 - 27 118.612 755 6 0 -2.80082 -29.028 -25.85 - 27 105.54 886 5 1 -2.81952 -29.0667 -54.45 - 27 106.768 754 5 0 -2.82071 -29.0688 -55.85 - 27 118.871 886 4 1 -2.84266 -29.1097 -84.45 - 27 95.1256 754 4 0 -2.84365 -29.1109 -85.85 - 27 99.1485 885 3 1 -2.8646 -29.1368 -114.45 - 27 102.884 754 3 0 -2.8658 -29.1368 -115.85 - 27 111.802 885 2 1 -2.89438 -29.1368 -144.45 - 27 140.07 754 2 0 -2.89508 -29.1373 -145.85 - 27 128.597 885 1 1 -2.91049 -29.1504 -174.45 - 27 115.808 754 1 0 -2.91155 -29.1503 -175.85 - 27 130.845 885 0 1 -2.93043 -29.1516 -204.45 - 27 133.994 754 0 0 -2.93133 -29.1522 -205.85 -Number of digits in this event: 9 -Using G4ParticleGun... -Particle energy: 3.52347 LIN +Number of tracker hits in this event: 288 + 27 111.721 1194 11 1 58.8672 -6.56254 125.55 + 27 122.776 867 11 0 58.8675 -6.56296 124.15 + 27 95.2054 1194 10 1 58.8743 -6.57597 95.55 + 27 98.6068 867 10 0 58.874 -6.57628 94.15 + 27 113.825 1194 9 1 58.8651 -6.58198 65.55 + 27 129.431 867 9 0 58.8647 -6.58321 64.15 + 27 116.724 1194 8 1 58.8607 -6.61026 35.55 + 27 114.933 867 8 0 58.8603 -6.61243 34.15 + 27 124.764 1194 7 1 58.8509 -6.65912 5.55 + 27 144.718 866 7 0 58.8502 -6.66176 4.15 + 27 100.204 1193 6 1 58.8332 -6.71301 -24.45 + 27 95.5621 866 6 0 58.8321 -6.71533 -25.85 + 27 171.475 1193 5 1 58.803 -6.76535 -54.45 + 27 95.604 866 5 0 58.8029 -6.76878 -55.85 + 27 139.976 1193 4 1 58.7982 -6.84088 -84.45 + 27 131.597 866 4 0 58.7986 -6.84487 -85.85 + 27 146.491 1151 2 1 50.3089 -19.09 -144.45 + 27 152.517 1150 2 1 50.25 -19.0411 -144.562 + 27 4.49439 807 2 0 49.8524 -18.4556 -145.85 + 27 234.491 808 2 0 49.8487 -18.4498 -145.863 + 27 143.55 801 2 0 49.2754 -19.7412 -145.85 + 27 43.3841 800 2 0 49.037 -19.85 -146.167 + 27 374.702 803 2 0 -4.65112 -19.4325 -146.25 + 27 14.4077 853 2 1 -9.39591 -19.4442 -144.85 + 27 75.9284 852 2 1 -9.45 -19.4426 -144.839 + 27 284.828 851 2 1 -9.65002 -19.3421 -144.741 + 27 89.5468 850 2 1 -9.85024 -18.7166 -144.557 + 27 296.765 804 2 0 -9.47667 -19.1137 -145.85 + 27 169.809 597 0 0 -37.7643 -60.45 -205.985 + 27 114.722 596 0 0 -37.9038 -60.65 -206.144 + 27 11.1384 595 0 0 -38.0034 -60.85 -206.226 + 27 171.712 629 0 0 -35.6526 -54.1628 -206.25 + 27 4.88431 630 0 0 -35.7062 -54.05 -206.19 + 27 10653.6 1193 3 1 58.8069 -6.92578 -114.45 + 27 1604.67 1194 3 1 58.9053 -6.94981 -114.45 + 27 2424.39 865 3 0 59.3867 -6.86005 -115.85 + 27 1609.59 866 3 0 59.4796 -6.85 -116.08 + 27 2406.77 1255 2 1 71.0889 -5.2669 -144.45 + 27 56.3513 1256 2 1 71.25 -5.31879 -144.845 + 27 2651.33 872 2 0 71.6624 -5.46229 -145.85 + 27 4733.58 799 4 0 142.13 -20.1132 -86.25 + 27 1521.11 798 4 0 143.002 -20.25 -85.9431 + 27 1237.93 1628 4 1 145.757 -20.7422 -84.85 + 27 1421.82 1629 4 1 145.95 -20.7771 -84.7734 + 27 1424.84 1630 4 1 146.15 -20.8217 -84.692 + 27 1764.16 1631 4 1 146.35 -20.8652 -84.6153 + 27 2137.46 1632 4 1 146.55 -20.917 -84.5425 + 27 263.716 1633 4 1 146.75 -20.9717 -84.4605 + 27 1839.43 1192 3 1 58.65 -6.9234 -114.583 + 27 1291.67 1191 3 1 58.45 -6.91879 -114.813 + 27 190.982 1060 2 1 32.0982 -6.85076 -144.45 + 27 803.893 1059 2 1 32.05 -6.85446 -144.51 + 27 327.217 1058 2 1 31.85 -6.87026 -144.758 + 27 1270.95 865 2 0 30.971 -6.95138 -145.85 + 27 2.47365 941 1 1 8.25121 -9.18456 -174.45 + 27 955.719 940 1 1 8.25 -9.18464 -174.451 + 27 626.187 939 1 1 8.05 -9.19891 -174.691 + 27 1697.67 854 1 0 7.08065 -9.23589 -175.85 + 27 1025.76 821 0 1 -15.655 -10.0301 -204.45 + 27 1101.17 820 0 1 -15.85 -10.0095 -204.657 + 27 2394.38 850 0 0 -17 -9.92386 -205.85 + 27 542.479 584 4 0 130.391 -63.0837 -86.25 + 27 620.847 583 4 0 130.603 -63.25 -86.1667 + 27 809.042 582 4 0 130.856 -63.45 -86.0681 + 27 608.02 581 4 0 131.109 -63.65 -85.9638 + 27 89.3209 580 4 0 131.36 -63.85 -85.8619 + 27 97.8996 1568 4 1 133.909 -65.8587 -84.85 + 27 527.888 1569 4 1 133.95 -65.891 -84.8337 + 27 539.132 1570 4 1 134.15 -66.0482 -84.7538 + 27 474.479 1571 4 1 134.35 -66.2041 -84.676 + 27 569.279 1572 4 1 134.55 -66.3613 -84.5968 + 27 440.452 1573 4 1 134.75 -66.5187 -84.5181 + 27 9.3193 867 3 0 58.5933 -6.65 -116.244 + 27 525.245 1176 2 1 55.4478 -2.27808 -144.45 + 27 342.691 889 2 0 55.2094 -2.08487 -145.85 + 27 329.721 890 2 0 55.1649 -2.05 -146.109 + 27 587.456 1150 1 1 50.1751 1.9525 -174.45 + 27 684.772 910 1 0 49.8903 2.1349 -175.85 + 27 263.483 1120 0 1 44.0818 5.73544 -204.45 + 27 343.159 1119 0 1 44.05 5.75937 -204.604 + 27 695.75 929 0 0 43.7834 5.95058 -205.85 + 27 81.2507 911 1 0 49.7897 2.25 -176.22 + 27 379.214 1195 3 1 59.05 -6.70586 -114.503 + 27 533.714 1196 3 1 59.25 -6.52583 -114.581 + 27 475.622 1197 3 1 59.45 -6.34533 -114.659 + 27 332.947 1198 3 1 59.65 -6.1648 -114.737 + 27 114.796 1199 3 1 59.85 -5.98364 -114.815 + 27 235.023 882 3 0 62.5012 -3.59747 -115.85 + 27 506.154 883 3 0 62.6651 -3.45 -115.914 + 27 407.524 884 3 0 62.8878 -3.25 -116.002 + 27 420.098 885 3 0 63.1108 -3.05 -116.089 + 27 227.834 886 3 0 63.3334 -2.85 -116.175 + 27 209.235 1578 2 1 135.851 63.1346 -144.45 + 27 234.936 1579 2 1 135.95 63.2134 -144.489 + 27 355.903 1580 2 1 136.15 63.3733 -144.568 + 27 599.148 1581 2 1 136.35 63.5331 -144.647 + 27 427.91 1582 2 1 136.55 63.6929 -144.727 + 27 205.192 1583 2 1 136.75 63.853 -144.808 + 27 314.235 1229 2 0 139.294 65.8972 -145.85 + 27 376.184 1230 2 0 139.484 66.05 -145.928 + 27 318.234 1231 2 0 139.733 66.25 -146.031 + 27 343.377 1232 2 0 139.983 66.45 -146.134 + 27 34.4319 1233 2 0 140.233 66.65 -146.238 + 27 420.563 887 3 0 58.3378 -2.62427 -115.85 + 27 437.979 888 3 0 58.3196 -2.45 -115.907 + 27 378.755 889 3 0 58.2989 -2.25 -115.974 + 27 446.839 890 3 0 58.2785 -2.05 -116.042 + 27 434.113 891 3 0 58.2583 -1.85 -116.111 + 27 560.025 892 3 0 58.2387 -1.65 -116.179 + 27 16.5113 893 3 0 58.2176 -1.45 -116.247 + 27 1055.32 1147 2 1 49.5224 79.4787 -144.45 + 27 2269.11 1146 2 1 49.45 79.8479 -144.584 + 27 170.488 1316 2 0 48.7414 83.3854 -145.85 + 27 642.375 1317 2 0 48.7284 83.45 -145.873 + 27 634.173 1318 2 0 48.6876 83.65 -145.944 + 27 618.708 1319 2 0 48.6476 83.85 -146.015 + 27 642.538 1320 2 0 48.6083 84.05 -146.084 + 27 724.557 1321 2 0 48.5681 84.25 -146.154 + 27 227.809 1322 2 0 48.5286 84.45 -146.226 + 27 806.955 1058 1 1 31.7125 166.991 -174.45 + 27 2725.27 1057 1 1 31.65 167.12 -174.499 + 27 3048.73 1056 1 1 31.45 167.548 -174.652 + 27 760.133 1055 1 1 31.25 167.971 -174.814 + 27 1396.78 1752 1 0 30.0355 170.588 -175.85 + 27 1863.04 1753 1 0 29.9609 170.75 -175.916 + 27 2387.38 1754 1 0 29.8691 170.95 -175.998 + 27 3577.35 1755 1 0 29.7795 171.15 -176.08 + 27 2855.31 1756 1 0 29.6856 171.35 -176.175 + 27 1070.55 1190 3 1 58.25 -7.02431 -114.721 + 27 37.4261 1189 3 1 58.05 -7.06058 -114.832 + 27 353.787 863 3 0 56.2102 -7.38441 -115.85 + 27 157.557 862 3 0 55.8374 -7.45 -116.056 + 27 80.5343 922 2 1 4.59959 -16.5791 -144.45 + 27 143.002 921 2 1 4.45 -16.6069 -144.536 + 27 82.4117 920 2 1 4.25 -16.6443 -144.65 + 27 48.2663 919 2 1 4.05 -16.6823 -144.764 + 27 9.15861 815 2 0 2.15373 -17.0455 -145.85 + 27 249.882 814 2 0 2.13026 -17.05 -145.863 + 27 37.7264 661 1 1 -47.7421 -26.6535 -174.45 + 27 68.8203 660 1 1 -47.85 -26.6765 -174.51 + 27 63.3778 659 1 1 -48.05 -26.7185 -174.622 + 27 87.19 658 1 1 -48.25 -26.7612 -174.732 + 27 2.16876 657 1 1 -48.45 -26.8046 -174.843 + 27 135.966 764 1 0 -50.2808 -27.1947 -175.85 + 27 230.455 763 1 0 -50.5405 -27.25 -175.993 + 27 63.2352 391 0 1 -101.813 -38.5093 -204.45 + 27 51.3988 390 0 1 -101.95 -38.5344 -204.525 + 27 80.7588 389 0 1 -102.15 -38.571 -204.635 + 27 103.116 388 0 1 -102.35 -38.6072 -204.747 + 27 191.87 705 0 0 -104.312 -38.9556 -205.85 + 27 103.546 704 0 0 -104.845 -39.05 -206.15 + 27 129.129 1166 2 1 53.3057 -14.5866 -144.45 + 27 34.5156 1165 2 1 53.25 -14.6658 -144.754 + 27 263.642 825 2 0 53.0497 -14.9517 -145.85 + 27 7.71354 824 2 0 52.9807 -15.05 -146.227 + 27 188.462 1138 1 1 47.8204 -22.3982 -174.45 + 27 118.894 786 1 0 47.5681 -22.7575 -175.85 + 27 14.4551 785 1 0 47.5032 -22.85 -176.211 + 27 124.196 1111 0 1 42.4355 -30.0776 -204.45 + 27 37.3332 748 0 0 42.1789 -30.4286 -205.85 + 27 125.225 747 0 0 42.1632 -30.45 -205.935 + 27 215.437 1451 1 1 110.431 -35.7997 -174.45 + 27 153.618 1450 1 1 110.35 -35.8572 -174.569 + 27 191.643 919 9 1 3.99959 -160.3 65.5495 + 27 275.536 513 0 0 49.0013 -77.3613 -206.25 + 27 408.04 512 0 0 49.0802 -77.45 -206.09 + 27 27.3278 1147 0 1 49.6431 -78.1413 -204.85 + 27 666.326 1148 0 1 49.65 -78.15 -204.835 + 27 160.493 367 1 0 60.8797 -106.684 -176.25 + 27 456.614 366 1 0 60.9052 -106.75 -176.185 + 27 418.57 365 1 0 60.9891 -106.95 -175.99 + 27 867.441 1207 1 1 61.5036 -108.208 -174.85 + 27 328.71 1208 1 1 61.65 -108.562 -174.558 + 27 56.662 125 2 0 132.511 -155.022 -146.25 + 27 102.206 124 2 0 132.708 -155.15 -146.176 + 27 127.61 123 2 0 133.015 -155.35 -146.069 + 27 88.0039 122 2 0 133.317 -155.55 -145.959 + 27 126.619 1584 2 1 136.95 -157.941 -144.534 + 27 8.60477 1585 2 1 137.15 -158.068 -144.462 + 27 49.8256 1385 2 1 97.2391 -8.30021 -144.45 + 27 101.258 1386 2 1 97.35 -8.30758 -144.529 + 27 72.0919 1387 2 1 97.55 -8.32047 -144.672 + 27 20.1907 1388 2 1 97.75 -8.33347 -144.815 + 27 175.528 858 2 0 99.197 -8.42538 -145.85 + 27 79.3 857 2 0 99.5847 -8.45 -146.127 + 27 7.08264 1596 1 1 139.533 -10.5485 -174.45 + 27 75.0528 1597 1 1 139.55 -10.5491 -174.462 + 27 90.096 1598 1 1 139.75 -10.5563 -174.608 + 27 45.345 1599 1 1 139.95 -10.5652 -174.755 + 27 145.754 847 1 0 141.441 -10.6345 -175.85 + 27 212.328 846 1 0 141.771 -10.65 -176.093 + 27 676.714 849 3 0 56.4065 -10.0906 -115.85 + 27 865.229 848 3 0 56.2878 -10.25 -115.922 + 27 906.493 847 3 0 56.1388 -10.45 -116.019 + 27 833.046 846 3 0 55.9907 -10.65 -116.116 + 27 332.858 845 3 0 55.8418 -10.85 -116.216 + 27 776.43 971 2 1 14.3352 -65.7011 -144.45 + 27 1744.54 970 2 1 14.25 -65.8112 -144.53 + 27 1500.48 969 2 1 14.05 -66.0859 -144.709 + 27 539.639 560 2 0 12.8232 -67.9739 -145.85 + 27 1493.43 559 2 0 12.774 -68.05 -145.895 + 27 1403.66 558 2 0 12.6589 -68.25 -146.013 + 27 1462.47 557 2 0 12.6017 -68.45 -146.12 + 27 447.563 556 2 0 12.5402 -68.65 -146.225 + 27 178.492 1221 2 1 64.2546 -11.7587 -144.45 + 27 120.933 1220 2 1 64.2497 -11.7648 -144.459 + 27 53.3833 1219 2 1 64.05 -12.0315 -144.783 + 27 47.3535 834 2 0 63.3387 -13.1169 -145.85 + 27 43.7579 833 2 0 63.2545 -13.25 -145.978 + 27 117.922 609 1 0 84.1413 -58.05 -175.919 + 27 113.119 549 0 0 56.026 -70.0554 -205.85 + 27 133.997 608 1 0 84.2554 -58.25 -176.029 + 27 62.2425 607 1 0 84.3434 -58.4505 -176.151 + 27 140.193 606 1 0 84.4409 -58.65 -176.2 + 27 128.976 605 1 0 84.5232 -58.8502 -176.177 + 27 261.68 1322 1 1 84.479 -59.2572 -174.849 + 27 188.239 1321 1 1 84.45 -59.1747 -174.693 + 27 120.577 840 2 0 64.5149 -11.8933 -145.85 + 27 146.204 1248 1 1 69.6957 -16.3041 -174.45 + 27 134.24 817 1 0 69.958 -16.5144 -175.85 + 27 152.859 1276 0 1 75.2971 -20.7841 -204.45 + 27 120.34 795 0 0 75.5402 -20.9781 -205.85 + 27 90.1327 471 0 0 83.9627 -85.65 -205.925 + 27 31.9993 470 0 0 84.0213 -85.85 -206.159 + 27 8.47645 852 3 0 58.2123 -9.62872 -115.85 + 27 79.0639 851 3 0 58.2077 -9.65 -115.861 + 27 72.5377 850 3 0 58.1639 -9.85 -115.968 + 27 6.72919 1132 2 1 46.4551 -63.3683 -144.45 + 27 269.006 1131 2 1 46.45 -63.3917 -144.462 + 27 59.4532 569 2 0 45.8736 -66.0712 -145.85 + 27 68.7534 568 2 0 45.8354 -66.25 -145.943 + 27 68.0717 567 2 0 45.7925 -66.45 -146.046 + 27 69.2914 566 2 0 45.7499 -66.65 -146.15 + 27 237.204 1069 1 1 34.0491 -121.505 -174.45 + 27 4.17721 280 1 0 33.4321 -124.134 -175.85 + 27 62.4263 279 1 0 33.4284 -124.15 -175.858 + 27 72.6137 278 1 0 33.3813 -124.35 -175.965 + 27 56.0634 277 1 0 33.3344 -124.55 -176.071 + 27 52.668 276 1 0 33.2876 -124.75 -176.178 + 27 231.343 1004 0 1 20.9633 -177.731 -204.45 + 27 174.777 1003 0 1 20.85 -178.288 -204.758 + 27 109.382 1186 2 1 57.2925 -3.53561 -144.45 + 27 102.969 883 2 0 57.2194 -3.38168 -145.85 + 27 101.582 1178 1 1 55.7238 -0.222894 -174.45 + 27 62.6867 899 1 0 55.6544 -0.0685222 -175.85 + 27 100.531 1170 0 1 54.2379 3.09389 -204.45 + 27 0.0231004 915 0 0 54.1688 3.2499 -205.85 + 27 118.755 916 0 0 54.1688 3.25 -205.851 + 27 61.905 961 4 0 26.4559 12.3785 -86.25 + 27 217.404 962 4 0 26.3359 12.45 -86.1457 + 27 2.95083 963 4 0 26.0018 12.65 -85.854 + 27 7.45074 1024 4 1 24.8638 13.3508 -84.85 + 27 108.505 1023 4 1 24.85 13.3593 -84.8379 + 27 136.604 1022 4 1 24.65 13.4823 -84.6618 + 27 309.373 1021 4 1 24.45 13.6044 -84.4877 + 27 168.966 1061 5 0 -5.69294 32.268 -56.25 + 27 225.865 1062 5 0 -5.98685 32.45 -55.9744 + 27 29.2789 864 5 1 -7.19213 33.1855 -54.85 + 27 143.956 863 5 1 -7.25 33.2207 -54.7961 + 27 99.6569 862 5 1 -7.45 33.3422 -54.6098 + 27 143.555 1152 6 0 -34.7959 50.4892 -26.25 + 27 66.6056 1153 6 0 -35.0521 50.65 -25.9837 + 27 56.8323 719 6 1 -36.1591 51.339 -24.85 + 27 162.461 718 6 1 -36.25 51.3956 -24.7571 + 27 66.9439 717 6 1 -36.45 51.5187 -24.5536 + 27 144.328 1229 7 0 -64.421 65.9923 3.75 + 27 205.016 1230 7 0 -64.5329 66.05 3.86317 + 27 19.3159 571 7 1 -65.8158 66.7065 5.15 + 27 139.588 570 7 1 -65.85 66.724 5.18428 + 27 110.402 569 7 1 -66.05 66.8266 5.38419 + 27 308.519 1307 8 0 -90.9606 81.4773 33.75 + 27 31.2287 1308 8 0 -91.2535 81.65 34.0843 + 27 102.42 439 8 1 -92.1966 82.199 35.15 + 27 146.234 438 8 1 -92.35 82.2884 35.3233 + 27 24.5827 1356 9 0 -119.376 91.532 63.75 + 27 289.745 1357 9 0 -119.429 91.55 63.806 + 27 20.3279 297 9 1 -120.717 91.9857 65.15 + 27 115.637 296 9 1 -120.75 91.9968 65.1841 + 27 83.5685 295 9 1 -120.95 92.0645 65.3928 + 27 226.034 1413 10 0 -144.472 102.81 93.75 + 27 19.9866 1414 10 0 -144.777 102.95 94.1195 + 27 79.8073 172 10 1 -145.622 103.349 95.15 + 27 180.429 171 10 1 -145.75 103.41 95.3061 + 27 68.8576 1470 11 0 -170.153 114.305 123.75 + 27 341.858 1471 11 0 -170.254 114.35 123.868 + 27 7.28731 44 11 1 -171.339 114.835 125.15 + 27 165.631 43 11 1 -171.35 114.839 125.163 + 27 161.908 42 11 1 -171.55 114.928 125.399 +Number of digits in this event: 183 +Using G4ParticleGun... +Particle energy: 1.25751 LIN Particle: proton Event: 28 -Number of tracker hits in this event: 28 - 28 103.493 674 11 1 -45.0745 -57.1941 125.55 - 28 96.7689 614 11 0 -45.0755 -57.194 124.15 - 28 94.2829 674 10 1 -45.0926 -57.1925 95.55 - 28 139.807 614 10 0 -45.0949 -57.1929 94.15 - 28 120.33 674 9 1 -45.1422 -57.1991 65.55 - 28 141.062 614 9 0 -45.1474 -57.2004 64.15 - 28 72.4927 674 8 1 -45.2491 -57.2255 35.55 - 28 44.4585 673 8 1 -45.25 -57.2252 35.3043 - 28 310.217 614 8 0 -45.2541 -57.2241 34.15 - 28 100.739 673 7 1 -45.358 -57.2014 5.55 - 28 237.312 614 7 0 -45.364 -57.2023 4.15 - 28 133.152 672 6 1 -45.4893 -57.2213 -24.45 - 28 91.4231 614 6 0 -45.4963 -57.2221 -25.85 - 28 114.084 672 5 1 -45.6416 -57.2358 -54.45 - 28 126.093 614 5 0 -45.6479 -57.2342 -55.85 - 28 145.267 671 4 1 -45.777 -57.2022 -84.45 - 28 280.231 614 4 0 -45.7867 -57.1942 -85.85 - 28 91.0402 670 3 1 -45.9867 -57.0245 -114.45 - 28 108.331 615 3 0 -45.9945 -57.0164 -115.85 - 28 99.3435 669 2 1 -46.1551 -56.8508 -144.45 - 28 162.085 616 2 0 -46.1635 -56.8437 -145.85 - 28 102.352 668 1 1 -46.3405 -56.6956 -174.45 - 28 107.441 616 1 0 -46.3499 -56.6902 -175.85 - 28 78.1472 667 0 1 -46.5417 -56.5785 -204.45 - 28 98.8488 617 0 0 -46.5488 -56.5726 -205.85 - 28 16.1747 424 4 0 -163.35 -95.3498 -86.25 - 28 150.652 423 4 0 -163.35 -95.35 -86.2496 - 28 166.659 615 8 0 -44.996 -57.0499 33.8829 -Number of digits in this event: 13 +Number of tracker hits in this event: 26 + 28 137.804 629 11 1 -54.1334 -52.6889 125.55 + 28 155.378 636 11 0 -54.1293 -52.6834 124.15 + 28 137.381 630 10 1 -54.0415 -52.5682 95.55 + 28 108.073 637 10 0 -54.0332 -52.5608 94.15 + 28 261.767 630 9 1 -53.8578 -52.424 65.55 + 28 171.977 638 9 0 -53.8538 -52.4233 64.15 + 28 137.544 631 8 1 -53.7781 -52.414 35.55 + 28 125.952 638 8 0 -53.7729 -52.4111 34.15 + 28 127.846 631 7 1 -53.6674 -52.3291 5.55 + 28 123.346 638 7 0 -53.6622 -52.322 4.15 + 28 101.628 632 6 1 -53.5756 -52.1648 -24.45 + 28 191.559 639 6 0 -53.5698 -52.1543 -25.85 + 28 147.568 632 5 1 -53.4553 -51.9607 -54.45 + 28 108.58 640 5 0 -53.4464 -51.9475 -55.85 + 28 109.905 633 4 1 -53.255 -51.6903 -84.45 + 28 157.012 641 4 0 -53.2487 -51.6747 -85.85 + 28 314.757 634 3 1 -53.1306 -51.349 -114.45 + 28 118.896 643 3 0 -53.1285 -51.33 -115.85 + 28 240.197 634 2 1 -53.0926 -50.9555 -144.45 + 28 123.805 645 2 0 -53.0892 -50.9401 -145.85 + 28 112.931 635 1 1 -53.008 -50.6261 -174.45 + 28 160.399 647 1 0 -53.0031 -50.6071 -175.85 + 28 116.469 635 0 1 -52.8987 -50.2223 -204.45 + 28 140.348 649 0 0 -52.8959 -50.2022 -205.85 + 28 47.7567 635 3 1 -53.05 -51.2993 -114.522 + 28 111.994 637 9 0 -53.861 -52.45 63.9827 +Number of digits in this event: 18 Using G4ParticleGun... -Particle energy: 9.84596 LIN +Particle energy: 2.8994 LIN Particle: proton Event: 29 -Number of tracker hits in this event: 178 - 29 98.2076 1183 9 1 56.6904 106.172 65.55 - 29 111.211 1430 9 0 56.6908 106.171 64.15 - 29 103.664 1183 8 1 56.6969 106.15 35.55 - 29 92.8681 1429 8 0 56.6975 106.148 34.15 - 29 160.835 1183 7 1 56.7085 106.12 5.55 - 29 111.372 1429 7 0 56.7079 106.118 4.15 - 29 163.255 1183 6 1 56.6958 106.093 -24.45 - 29 134.896 1429 6 0 56.6947 106.092 -25.85 - 29 149.839 1183 5 1 56.6733 106.066 -54.45 - 29 173.478 1429 5 0 56.6722 106.065 -55.85 - 29 118.226 1182 4 1 56.6486 106.044 -84.45 - 29 308.031 1429 4 0 56.6469 106.044 -85.85 - 29 116.624 1182 3 1 56.6093 106.029 -114.45 - 29 179.171 1429 3 0 56.6078 106.028 -115.85 - 29 130.44 1182 2 1 56.5743 105.993 -144.45 - 29 155.379 1429 2 0 56.5727 105.992 -145.85 - 29 128.77 1182 1 1 56.5405 105.959 -174.45 - 29 98.8718 1429 1 0 56.5391 105.957 -175.85 - 29 122.914 1182 0 1 56.5076 105.925 -204.45 - 29 182.879 1428 0 0 56.5054 105.923 -205.85 - 29 17.2235 1512 0 1 122.718 136.969 -204.707 - 29 118.967 1246 0 0 97.3622 69.4469 -206.25 - 29 40.4094 1245 0 0 97.6014 69.25 -205.962 - 29 8.35975 1391 0 1 98.5234 68.5009 -204.85 - 29 167.582 1392 0 1 98.55 68.4793 -204.818 - 29 121.771 1393 0 1 98.7505 68.3076 -204.57 - 29 71.0944 1182 1 0 110.52 56.5309 -176.25 - 29 75.8171 1181 1 0 110.601 56.4498 -176.055 - 29 37.0859 1454 1 1 111.098 55.9419 -174.85 - 29 81.4856 1455 1 1 111.15 55.8887 -174.724 - 29 2.07542 1109 2 0 122.915 41.8546 -146.25 - 29 144.771 1108 2 0 122.918 41.85 -146.241 - 29 53.5908 1516 2 1 123.484 41.1453 -144.85 - 29 83.0807 1517 2 1 123.55 41.0621 -144.687 - 29 23.4679 1028 3 0 134.776 25.6828 -116.249 - 29 108.831 1027 3 0 134.8 25.65 -116.189 - 29 25.7538 1575 3 1 135.328 24.9279 -114.85 - 29 118.472 1576 3 1 135.35 24.8979 -114.795 - 29 208.287 948 4 0 146.486 9.79893 -86.25 - 29 47.8035 947 4 0 146.597 9.64974 -85.9632 - 29 129.332 1634 4 1 147.021 9.06921 -84.8499 - 29 19.3609 1635 4 1 147.15 8.88933 -84.5161 - 29 137.334 863 5 0 159.299 -7.2655 -56.25 - 29 24.5487 862 5 0 159.437 -7.45 -55.926 - 29 83.6476 1698 5 1 159.897 -8.04195 -54.8499 - 29 79.3762 1699 5 1 159.95 -8.1097 -54.7257 - 29 102.644 779 6 0 173.828 -24.0981 -26.2498 - 29 40.4905 778 6 0 173.957 -24.2501 -25.9765 - 29 47.905 1771 6 1 174.484 -24.8703 -24.85 - 29 93.1773 1772 6 1 174.55 -24.9484 -24.7077 - 29 1.15168 1739 6 1 167.95 -10.0933 -24.4881 - 29 31.6936 1394 0 1 98.9501 68.2319 -204.512 - 29 91.7792 944 1 0 97.5776 9.00093 -176.25 - 29 91.7423 943 1 0 97.5784 8.85 -176.088 - 29 28.6829 942 1 0 97.6311 8.65 -175.91 - 29 247.031 1388 1 1 97.8623 7.50304 -174.85 - 29 8.69552 1389 1 1 97.95 7.22687 -174.551 - 29 182.32 1387 1 1 97.75 6.75988 -174.543 - 29 0.30557 1386 1 1 97.55 6.23328 -174.85 - 29 44.9987 926 1 0 96.8735 5.38067 -175.85 - 29 81.3395 925 1 0 96.7892 5.25 -175.994 - 29 25.3844 924 1 0 96.6876 5.05 -176.174 - 29 90.3069 1284 0 1 76.9141 -15.1004 -204.45 - 29 100.13 1285 0 1 77.05 -15.2026 -204.681 - 29 103.775 821 0 0 77.8193 -15.7406 -205.85 - 29 160.929 820 0 0 77.9334 -15.85 -205.998 - 29 233.533 819 0 0 78.0063 -16.05 -206.139 - 29 134.03 818 0 0 77.9326 -16.25 -206.118 - 29 30.9789 1479 0 1 115.95 82.343 -204.801 - 29 158.728 1378 0 1 95.9441 66.6439 -204.451 - 29 59.2258 599 3 1 -60.05 -24.0119 -114.612 - 29 86.9792 1151 2 0 92.4632 50.4147 -146.25 - 29 19.6195 1152 2 0 92.1914 50.45 -145.933 - 29 59.8627 1359 2 1 92.0111 50.9729 -144.85 - 29 76.427 1358 2 1 91.95 51.0683 -144.678 - 29 31.0659 446 1 0 150.624 -90.75 -176.191 - 29 59.4564 445 1 0 150.78 -90.9502 -176.12 - 29 65.6139 444 1 0 150.926 -91.15 -176.12 - 29 61.9463 443 1 0 150.978 -91.35 -176.132 - 29 55.465 442 1 0 150.961 -91.55 -176.165 - 29 141.757 441 1 0 150.871 -91.7501 -176.171 - 29 25.8973 1017 0 0 91.6675 23.5087 -206.25 - 29 74.0053 1016 0 0 91.6604 23.45 -206.201 - 29 56.8471 1015 0 0 91.6188 23.2495 -206.039 - 29 27.71 1014 0 0 91.5696 23.05 -205.89 - 29 93.2055 1356 0 1 91.3808 21.8718 -204.85 - 29 54.122 1355 0 1 91.35 21.6442 -204.608 - 29 54.1741 1354 1 0 68.0474 90.9784 -176.25 - 29 56.8759 1355 1 0 67.9983 91.15 -176.176 - 29 65.0003 1356 1 0 67.9779 91.3504 -176.057 - 29 43.976 1357 1 0 67.9597 91.55 -175.918 - 29 56.601 1225 1 1 65.1136 98.4374 -174.85 - 29 354.818 1224 1 1 65.0498 98.5868 -174.814 - 29 286.827 1223 1 1 64.8499 99.127 -174.471 - 29 14.5117 160 1 0 -25.5487 -147.968 -176.25 - 29 61.9822 161 1 0 -25.5364 -147.95 -176.216 - 29 102.939 1730 6 0 -103.889 166.15 -26.2332 - 29 30.1616 163 2 1 -147.35 -53.0388 -144.6 - 29 29.3214 162 2 1 -147.55 -53.1232 -144.717 - 29 82.7209 885 0 0 30.6066 -2.87441 -206.25 - 29 86.5182 884 0 0 30.7078 -3.05 -206.087 - 29 4.75182 883 0 0 30.8699 -3.2503 -205.866 - 29 118.346 1056 0 1 31.3087 -3.85006 -204.85 - 29 64.3486 1057 0 1 31.45 -4.03251 -204.548 - 29 87.5028 745 1 0 19.4898 -30.8755 -176.25 - 29 36.6783 744 1 0 19.4635 -31.05 -175.962 - 29 15.2904 998 1 1 19.8355 -32.063 -174.85 - 29 152.605 999 1 1 19.85 -32.0918 -174.812 - 29 149.808 1000 1 1 20.1724 -32.4107 -174.45 - 29 36.9383 1001 1 1 20.25 -32.487 -174.456 - 29 19.9766 735 1 0 19.6305 -33.0299 -175.85 - 29 116.92 734 1 0 19.5939 -33.0502 -175.917 - 29 95.1916 959 1 0 -23.1287 11.9294 -176.25 - 29 100.805 960 1 0 -23.2721 12.05 -176.101 - 29 223.413 961 1 0 -23.3295 12.25 -176.091 - 29 151.971 962 1 0 -23.3168 12.45 -175.963 - 29 17.8039 921 0 0 12.5624 4.27478 -206.25 - 29 146.649 920 0 0 12.5136 4.24998 -206.195 - 29 8.99326 919 0 0 12.1766 4.05 -205.873 - 29 133.473 955 0 1 11.2451 3.09618 -204.85 - 29 181.62 954 0 1 11.05 2.91772 -204.549 - 29 325.099 953 0 1 10.8498 2.824 -204.75 - 29 250.991 924 0 0 10.3866 4.88214 -205.85 - 29 408.958 610 4 0 21.3798 -57.9508 -86.25 - 29 50.4991 611 4 0 21.1936 -57.85 -86.1327 - 29 33.4003 996 4 1 19.3316 -58.0621 -84.85 - 29 278.749 995 4 1 19.25 -58.0868 -84.8088 - 29 64.8788 1773 0 1 174.81 -69.9264 -204.45 - 29 360.056 1774 0 1 174.95 -69.9868 -204.504 - 29 9.2763 666 8 0 -134.343 -46.7397 33.75 - 29 74.9134 658 8 0 -132.535 -48.25 33.8035 - 29 70.8635 224 8 1 -135.288 -47.2696 35.15 - 29 245.115 223 8 1 -135.35 -47.2803 35.2613 - 29 12.7232 761 7 0 41.0623 -27.6929 3.75 - 29 18.02 762 7 0 41.0605 -27.65 3.78601 - 29 20.9264 864 7 0 55.9143 -7.06781 3.75 - 29 54.1484 865 7 0 55.947 -7.05 3.7602 - 29 5.63423 486 4 0 43.1269 -82.6503 -86.25 - 29 148.011 487 4 0 43.1288 -82.65 -86.2308 - 29 116.402 488 4 0 43.1369 -82.4497 -86.1367 - 29 131.315 404 4 0 54.0671 -99.316 -86.2499 - 29 44.585 742 1 0 -0.43729 -31.5411 -176.25 - 29 83.7594 743 1 0 -0.448925 -31.45 -176.148 - 29 48.0037 897 1 1 -0.453893 -30.6047 -174.85 - 29 57.4991 898 1 1 -0.449958 -30.5636 -174.782 - 29 173.386 720 2 0 -27.1812 -35.8695 -146.25 - 29 0.642455 758 2 1 -28.4471 -36.0265 -144.85 - 29 112.661 757 2 1 -28.4502 -36.0268 -144.846 - 29 38.8224 756 2 1 -28.65 -36.0268 -144.59 - 29 259.326 1120 0 1 44.1676 -44.035 -204.85 - 29 66.569 590 4 0 82.0411 -61.9092 -86.25 - 29 72.1108 589 4 0 82.0364 -62.05 -86.1017 - 29 26.1702 588 4 0 82.0125 -62.25 -85.8987 - 29 107.222 1309 4 1 81.958 -63.0481 -84.8499 - 29 184.4 591 5 0 109.416 -61.8201 -56.25 - 29 23.3997 1452 5 1 110.689 -61.1582 -54.85 - 29 86.0305 1453 5 1 110.75 -61.1208 -54.7696 - 29 41.1013 1454 5 1 110.95 -61.0492 -54.5637 - 29 61.9931 618 9 0 164.512 -56.2531 63.75 - 29 140.576 617 9 0 164.495 -56.4501 63.8302 - 29 156.611 616 9 0 164.498 -56.65 63.9238 - 29 172.229 1723 9 1 164.823 -57.6791 65.15 - 29 303.73 1724 9 1 164.95 -57.7391 65.447 - 29 158.404 1725 9 1 165.15 -57.6672 65.4812 - 29 88.4494 823 4 0 84.3084 -15.3992 -86.2499 - 29 373.053 824 4 0 84.2871 -15.25 -86.1384 - 29 6.68268 912 4 0 -48.1581 2.6324 -86.25 - 29 161.194 911 4 0 -48.3439 2.44976 -85.9577 - 29 19.1107 649 4 1 -50.1876 0.90989 -84.8499 - 29 284.103 648 4 1 -50.2501 0.858804 -84.8126 - 29 322.763 647 4 1 -50.45 0.230962 -84.5185 - 29 31.4789 899 4 0 -50.4102 -0.0691222 -85.85 - 29 66.0536 900 4 0 -50.3562 0.0501174 -86.1352 - 29 12.6043 397 0 0 -21.7664 -100.55 -206.22 - 29 44.9823 735 1 1 -32.85 -106.568 -174.791 - 29 208.211 396 0 0 -21.8258 -100.751 -206.125 - 29 12.3504 395 0 0 -22.0347 -100.95 -206.241 - 29 69.5705 1429 0 0 56.5709 105.95 -206.177 -Number of digits in this event: 59 -Using G4ParticleGun... -Particle energy: 9.76025 LIN +Number of tracker hits in this event: 27 + 29 120.336 502 11 1 -79.4675 3.21965 125.55 + 29 90.5138 915 11 0 -79.4671 3.2203 124.15 + 29 248.151 502 10 1 -79.4533 3.22182 95.55 + 29 239.414 915 10 0 -79.4537 3.22252 94.15 + 29 120.904 502 9 1 -79.461 3.23465 65.55 + 29 231.219 915 9 0 -79.4616 3.23775 64.15 + 29 140.486 502 8 1 -79.4761 3.30301 35.55 + 29 110.001 916 8 0 -79.4769 3.30552 34.15 + 29 121.136 502 7 1 -79.4968 3.3646 5.55 + 29 163.857 916 7 0 -79.4963 3.36398 4.15 + 29 156.041 502 6 1 -79.4856 3.34953 -24.45 + 29 104.657 916 6 0 -79.486 3.34721 -25.85 + 29 124.338 502 5 1 -79.4952 3.29283 -54.45 + 29 142.03 916 5 0 -79.4953 3.28996 -55.85 + 29 115.821 502 4 1 -79.4993 3.23933 -84.45 + 29 121.393 915 4 0 -79.4994 3.23438 -85.85 + 29 276.606 502 3 1 -79.4994 3.12951 -114.45 + 29 124.154 915 3 0 -79.4993 3.12564 -115.85 + 29 117.751 502 2 1 -79.4988 3.04674 -144.45 + 29 87.6738 914 2 0 -79.499 3.03562 -145.85 + 29 87.3397 502 1 1 -79.5049 2.81301 -174.45 + 29 111.18 913 1 0 -79.5038 2.80285 -175.85 + 29 127.021 502 0 1 -79.4683 2.59317 -204.45 + 29 87.798 912 0 0 -79.4655 2.58354 -205.85 + 29 140.915 503 8 1 -79.45 3.36436 35.5054 + 29 24.7035 916 9 0 -79.4759 3.25 63.9058 + 29 0.338613 501 10 1 -79.65 3.26962 95.1514 +Number of digits in this event: 17 +Using G4ParticleGun... +Particle energy: 8.68803 LIN Particle: proton Event: 30 -Number of tracker hits in this event: 27 - 30 105.133 945 11 1 9.1629 29.6925 125.55 - 30 120.721 1048 11 0 9.16321 29.692 124.15 - 30 105.526 945 10 1 9.16913 29.6844 95.55 - 30 126.362 1048 10 0 9.16923 29.6844 94.15 - 30 274.442 945 9 1 9.17256 29.6841 65.55 - 30 106.126 1048 9 0 9.17295 29.6842 64.15 - 30 127.868 945 8 1 9.18189 29.6853 35.55 - 30 190.094 1048 8 0 9.18207 29.685 34.15 - 30 124.51 945 7 1 9.1834 29.6774 5.55 - 30 134.003 1048 7 0 9.1839 29.6764 4.15 - 30 158.588 945 6 1 9.19459 29.6569 -24.45 - 30 114.887 1048 6 0 9.19518 29.6558 -25.85 - 30 135.192 945 5 1 9.20677 29.6362 -54.45 - 30 103.708 1047 5 0 9.20829 29.6355 -55.85 - 30 100.921 945 4 1 9.23892 29.6214 -84.45 - 30 146.085 1047 4 0 9.24049 29.621 -85.85 - 30 192.719 946 3 1 9.27121 29.6094 -114.45 - 30 276.188 1047 3 0 9.27283 29.6092 -115.85 - 30 102.874 946 2 1 9.30633 29.6057 -144.45 - 30 126.316 1047 2 0 9.30808 29.6051 -145.85 - 30 116.797 946 1 1 9.3416 29.5944 -174.45 - 30 104.824 1047 1 0 9.34431 29.5954 -175.85 - 30 115.948 946 0 1 9.39883 29.6143 -204.45 - 30 107.003 1047 0 0 9.40152 29.6139 -205.85 - 30 352.919 1048 3 0 9.64748 29.6501 -116.144 - 30 332.67 946 5 1 9.25418 29.6524 -54.4502 - 30 102.835 947 5 1 9.45 29.7302 -54.785 -Number of digits in this event: 16 +Number of tracker hits in this event: 25 + 30 110.256 990 11 1 18.2227 18.8622 125.55 + 30 126.937 994 11 0 18.2234 18.8624 124.15 + 30 139.545 990 10 1 18.2387 18.8659 95.55 + 30 108.878 994 10 0 18.2401 18.8664 94.15 + 30 105.312 991 9 1 18.2713 18.8763 65.55 + 30 117.861 994 9 0 18.2725 18.8763 64.15 + 30 103.318 991 8 1 18.2944 18.8767 35.55 + 30 95.2864 994 8 0 18.2938 18.8766 34.15 + 30 167.477 991 7 1 18.2791 18.8765 5.55 + 30 103.017 994 7 0 18.2778 18.8766 4.15 + 30 134.781 991 6 1 18.2508 18.8774 -24.45 + 30 109.981 994 6 0 18.2505 18.8765 -25.85 + 30 138.291 990 5 1 18.2416 18.8665 -54.45 + 30 121.075 994 5 0 18.2414 18.8656 -55.85 + 30 128.436 990 4 1 18.2403 18.8513 -84.45 + 30 95.653 994 4 0 18.2379 18.8516 -85.85 + 30 97.9309 990 3 1 18.189 18.8578 -114.45 + 30 102.687 994 3 0 18.1885 18.8596 -115.85 + 30 151.334 990 2 1 18.1802 18.8923 -144.45 + 30 120.208 994 2 0 18.1799 18.8947 -145.85 + 30 115.758 990 1 1 18.1766 18.9439 -174.45 + 30 102.542 994 1 0 18.1768 18.9462 -175.85 + 30 104.826 990 0 1 18.1808 18.9904 -204.45 + 30 127.332 994 0 0 18.1813 18.9927 -205.85 + 30 112.086 990 7 1 18.25 18.8769 5.19764 +Number of digits in this event: 11 Using G4ParticleGun... -Particle energy: 4.72889 LIN +Particle energy: 9.31845 LIN Particle: proton Event: 31 -Number of tracker hits in this event: 376 - 31 130.716 940 11 1 8.07393 21.1536 125.55 - 31 124.873 1005 11 0 8.07414 21.1553 124.15 - 31 110.614 940 10 1 8.07614 21.1922 95.55 - 31 93.5206 1005 10 0 8.07473 21.1944 94.15 - 31 221.692 939 9 1 8.04704 21.2363 65.55 - 31 218.321 1005 9 0 8.04543 21.2381 64.15 - 31 105.511 939 8 1 8.00697 21.2773 35.55 - 31 116.164 1006 8 0 8.0038 21.2774 34.15 - 31 104.585 939 7 1 7.93855 21.277 5.55 - 31 116.289 1006 7 0 7.93405 21.2786 4.15 - 31 118.237 938 6 1 7.84068 21.3067 -24.45 - 31 91.3489 1006 6 0 7.83671 21.3091 -25.85 - 31 109.001 938 5 1 7.75319 21.3574 -54.45 - 31 127.053 1006 5 0 7.74904 21.3582 -55.85 - 31 117.525 938 4 1 7.66147 21.365 -84.45 - 31 160.055 1006 4 0 7.65555 21.363 -85.85 - 31 110.639 937 3 1 7.53109 21.3205 -114.45 - 31 158.518 1006 3 0 7.52752 21.3191 -115.85 - 31 42.2881 937 2 1 7.45053 21.2884 -144.45 - 31 69.8127 936 2 1 7.45 21.2883 -144.603 - 31 233.603 1006 2 0 7.44549 21.2875 -145.85 - 31 124.911 936 1 1 7.34306 21.2729 -174.45 - 31 105.951 1006 1 0 7.33847 21.2715 -175.85 - 31 153.282 935 0 1 7.247 21.2452 -204.45 - 31 112.388 1005 0 0 7.2432 21.244 -205.85 - 31 79.8464 575 2 0 -77.7956 -64.9714 -146.185 - 31 14.5559 1082 1 1 36.45 -0.939349 -174.761 - 31 58.5664 852 0 0 36.3485 -9.51589 -206.25 - 31 79.3142 851 0 0 36.4844 -9.65003 -206.157 - 31 86.5286 850 0 0 36.6858 -9.85 -206.023 - 31 23.2921 849 0 0 36.8771 -10.0501 -205.891 - 31 9.35316 1091 0 1 38.435 -11.7561 -204.85 - 31 86.3905 1092 0 1 38.45 -11.7726 -204.84 - 31 89.6041 1093 0 1 38.6505 -11.991 -204.706 - 31 82.109 1094 0 1 38.85 -12.2036 -204.568 - 31 70.1683 618 1 0 75.2986 -56.2599 -176.25 - 31 95.1454 617 1 0 75.458 -56.45 -176.134 - 31 66.8189 616 1 0 75.6856 -56.65 -176.001 - 31 47.8263 1286 1 1 77.2599 -57.2495 -174.85 - 31 81.7733 1287 1 1 77.45 -57.3328 -174.727 - 31 168.279 1288 1 1 77.6519 -57.39 -174.659 - 31 114.425 1289 1 1 77.85 -57.4452 -174.575 - 31 24.4659 1290 1 1 78.0509 -57.5043 -174.488 - 31 61.629 176 2 0 55.7168 -144.75 -146.132 - 31 71.384 175 2 0 55.7476 -144.95 -146.085 - 31 67.6113 174 2 0 55.7416 -145.15 -146.142 - 31 67.3639 173 2 0 55.8081 -145.35 -146.167 - 31 110.303 811 1 0 35.1553 -17.692 -176.25 - 31 166.199 1076 1 1 35.3317 -18.3531 -174.85 - 31 21.3924 445 2 0 90.3143 -91.1077 -146.25 - 31 120.121 444 2 0 90.3293 -91.15 -146.177 - 31 112.667 1352 2 1 90.5604 -91.8995 -144.85 - 31 131.611 458 3 0 70.891 -88.2939 -116.25 - 31 202.992 459 3 0 70.7623 -88.25 -116.064 - 31 80.3601 1249 3 1 69.9685 -87.8548 -114.85 - 31 119.414 1248 3 1 69.85 -87.7876 -114.67 - 31 207.859 559 4 0 63.6833 -68.203 -86.25 - 31 49.5019 560 4 0 63.6011 -68.05 -86.0241 - 31 127.789 1216 4 1 63.3626 -67.0762 -84.8497 - 31 234.776 555 4 0 77.708 -68.85 -85.9553 - 31 29.309 1247 3 1 69.6499 -87.7796 -114.505 - 31 44.0042 1341 2 1 88.45 -92.1852 -144.82 - 31 113.973 1324 3 1 84.9401 -114.432 -114.85 - 31 114.781 1323 3 1 84.8144 -115.089 -114.45 - 31 70.3436 1322 3 1 84.6499 -115.101 -114.527 - 31 279.184 1321 3 1 84.4498 -114.963 -114.461 - 31 426.543 430 2 0 41.0053 -94.0568 -146.25 - 31 58.0885 1089 2 1 38.0235 -94.3814 -144.85 - 31 422.013 1088 2 1 37.85 -94.4042 -144.735 - 31 97.8825 1087 2 1 37.65 -94.4606 -144.518 - 31 110.623 417 2 0 38.8925 -96.5514 -145.85 - 31 37.9995 416 2 0 38.902 -96.75 -146.129 - 31 129.847 431 2 0 40.8241 -93.95 -146.074 - 31 135.334 1107 2 1 41.5145 -93.7138 -144.85 - 31 64.5712 1258 2 0 -47.0871 71.6841 -146.25 - 31 40.9003 1259 2 0 -47.331 71.85 -145.943 - 31 21.3792 1703 1 1 160.798 -57.0698 -174.816 - 31 333.941 819 10 1 -16.1157 -165.303 95.55 - 31 41.5328 654 7 1 -49.225 -4.34858 5.4537 - 31 161.235 682 0 0 -16.9425 -43.4782 -206.25 - 31 173.905 681 0 0 -17.0037 -43.65 -206.193 - 31 176.114 680 0 0 -17.075 -43.85 -206.128 - 31 193.953 679 0 0 -17.1462 -44.05 -206.063 - 31 250.981 678 0 0 -17.218 -44.25 -205.998 - 31 189.534 677 0 0 -17.2903 -44.45 -205.932 - 31 60.0036 676 0 0 -17.3597 -44.65 -205.867 - 31 525.372 807 0 1 -18.4548 -47.7946 -204.85 - 31 703.128 806 0 1 -18.65 -48.355 -204.669 - 31 85.8977 805 0 1 -18.85 -48.9344 -204.482 - 31 144.303 222 1 0 -53.5016 -135.584 -176.25 - 31 303.991 221 1 0 -53.5682 -135.75 -176.196 - 31 166.944 220 1 0 -53.6482 -135.95 -176.13 - 31 161.874 219 1 0 -53.7281 -136.15 -176.066 - 31 172.633 218 1 0 -53.8076 -136.35 -176.001 - 31 176.031 217 1 0 -53.8871 -136.55 -175.936 - 31 55.6002 216 1 0 -53.9663 -136.75 -175.872 - 31 80.5805 624 1 1 -55.2211 -139.935 -174.85 - 31 543.586 623 1 1 -55.25 -140.008 -174.826 - 31 500.557 622 1 1 -55.45 -140.517 -174.663 - 31 133.972 621 1 1 -55.65 -141.027 -174.5 - 31 5.15273 1116 0 0 -6.97316 43.4373 -206.25 - 31 128.266 1117 0 0 -6.98398 43.4503 -206.236 - 31 91.7468 1118 0 0 -7.1191 43.6502 -206.022 - 31 76.363 860 0 1 -7.89212 44.6177 -204.85 - 31 72.3756 859 0 1 -8.05 44.8062 -204.65 - 31 218.203 858 0 1 -8.33574 45.3451 -204.45 - 31 129.486 857 0 1 -8.45007 45.5949 -204.665 - 31 61.4999 1134 0 0 -8.83414 46.8524 -205.85 - 31 65.9458 1135 0 0 -8.89919 47.05 -205.985 - 31 57.0901 1136 0 0 -8.9747 47.2502 -206.072 - 31 64.5708 1137 0 0 -9.02979 47.45 -206.116 - 31 84.6889 1138 0 0 -9.14781 47.6501 -206.173 - 31 5.24533 1139 0 0 -9.29288 47.85 -206.246 - 31 111.554 1460 0 0 -81.3272 112.346 -206.25 - 31 376.734 1461 0 0 -81.3344 112.35 -206.247 - 31 159.714 1459 0 0 -82.5727 112.15 -205.982 - 31 151.015 482 0 1 -83.5535 111.295 -204.85 - 31 440.695 481 0 1 -83.65 111.205 -204.764 - 31 55.652 483 0 1 -83.45 109.426 -204.553 - 31 71.6774 484 0 1 -83.25 109.306 -204.571 - 31 193.092 485 0 1 -83.05 109.1 -204.52 - 31 331.612 486 0 1 -82.85 108.698 -204.733 - 31 98.29 1443 0 0 -82.2897 108.849 -205.85 - 31 92.2916 1444 0 0 -82.2437 108.95 -206.056 - 31 274.252 1445 0 0 -82.2738 109.15 -206.117 - 31 53.7274 1159 0 0 -0.844141 51.9173 -206.25 - 31 84.5538 1160 0 0 -0.875112 52.05 -206.164 - 31 53.9876 1161 0 0 -0.921326 52.25 -206.035 - 31 32.3712 1162 0 0 -0.965986 52.4503 -205.907 - 31 174.454 894 0 1 -1.18019 54.047 -204.85 - 31 16.5444 893 0 1 -1.25 54.5911 -204.48 - 31 13.2783 1413 1 0 -14.0758 102.885 -176.25 - 31 64.2031 1414 1 0 -14.0928 102.95 -176.212 - 31 84.1023 1415 1 0 -14.1435 103.15 -176.099 - 31 112.915 1416 1 0 -14.1964 103.35 -175.986 - 31 9.7832 1417 1 0 -14.2461 103.55 -175.872 - 31 233.031 826 1 1 -14.6895 105.349 -174.85 - 31 16.7836 825 1 1 -14.8501 105.971 -174.483 - 31 149.186 1606 2 0 -19.0126 141.368 -146.25 - 31 82.736 1607 2 0 -19.037 141.55 -146.105 - 31 33.0609 1608 2 0 -19.0638 141.75 -145.946 - 31 97.6005 804 2 1 -19.2447 143.081 -144.85 - 31 171.123 803 2 1 -19.25 143.12 -144.818 - 31 74.1018 1721 3 0 -6.62141 164.382 -116.25 - 31 171.765 1722 3 0 -6.50457 164.55 -116.036 - 31 123.325 871 3 1 -5.80269 165.755 -114.85 - 31 62.0369 872 3 1 -5.65 166.036 -114.583 - 31 12.5076 222 8 1 -135.584 141.031 35.5497 - 31 19.02 1218 0 0 -7.73959 63.8021 -206.25 - 31 82.0904 1219 0 0 -7.76404 63.85 -206.203 - 31 68.5258 1220 0 0 -7.86036 64.05 -205.998 - 31 46.7066 1483 1 0 -28.7683 116.797 -176.25 - 31 80.2314 1484 1 0 -28.8488 116.95 -176.153 - 31 104.338 1485 1 0 -28.9854 117.15 -176.031 - 31 28.1251 1486 1 0 -29.136 117.35 -175.905 - 31 13.0971 748 1 1 -30.4168 118.897 -174.85 - 31 211.065 747 1 1 -30.45 118.937 -174.822 - 31 49.3732 746 1 1 -30.65 119.196 -174.64 - 31 6.90912 1501 1 0 -30.4124 120.531 -175.85 - 31 78.9838 1502 1 0 -30.409 120.55 -175.868 - 31 100.393 1503 1 0 -30.3603 120.75 -176.068 - 31 65.5637 798 0 1 -20.318 150.335 -204.45 - 31 305.658 799 0 1 -20.25 150.117 -204.579 - 31 36.0733 1638 0 0 -19.559 147.928 -205.85 - 31 53.8871 1637 0 0 -19.5511 147.75 -205.908 - 31 72.8664 1636 0 0 -19.5506 147.55 -205.944 - 31 84.8397 1635 0 0 -19.5399 147.35 -205.974 - 31 99.7562 1634 0 0 -19.5152 147.15 -205.997 - 31 164.581 1633 0 0 -19.4891 146.95 -206.033 - 31 54.3387 1632 0 0 -19.4823 146.75 -206.084 - 31 66.0376 1631 0 0 -19.4702 146.55 -206.144 - 31 52.6756 1630 0 0 -19.445 146.35 -206.196 - 31 103.044 1498 1 0 -29.4706 119.828 -175.85 - 31 93.3763 1499 1 0 -29.133 119.95 -176.124 - 31 157.117 959 4 0 55.0364 12.0005 -86.2495 - 31 146.919 1177 4 1 55.5426 11.8643 -84.85 - 31 49.61 1178 4 1 55.6501 11.8333 -84.5542 - 31 203.528 941 5 0 67.33 8.29363 -56.25 - 31 8.56416 940 5 0 67.479 8.25 -55.8901 - 31 100.673 1239 5 1 67.9097 8.13323 -54.85 - 31 39.0469 1240 5 1 68.05 8.09601 -54.5173 - 31 111.833 926 6 0 80.967 5.32708 -26.2498 - 31 30.014 1307 6 1 81.6099 5.20361 -24.85 - 31 103.453 1308 6 1 81.65 5.1959 -24.7622 - 31 123.952 918 7 0 99.8703 3.70685 3.75044 - 31 169.491 1403 7 1 100.756 3.66156 5.15003 - 31 80.8739 1404 7 1 100.95 3.65787 5.48297 - 31 162.414 947 8 0 122.332 9.56363 33.7503 - 31 42.812 1515 8 1 123.272 9.82941 35.1501 - 31 117.7 1516 8 1 123.35 9.85242 35.2716 - 31 59.4979 1089 9 0 144.508 37.9294 63.75 - 31 88.2575 1090 9 0 144.59 38.0503 63.8667 - 31 42.3456 1091 9 0 144.719 38.25 64.0522 - 31 42.2757 1626 9 1 145.495 39.4331 65.15 - 31 181.883 1627 9 1 145.55 39.5176 65.2279 - 31 18.0044 1628 9 1 145.75 39.8478 65.5154 - 31 255.946 1149 10 0 140.658 49.9311 93.75 - 31 76.6447 1150 10 0 140.616 50.0501 94.0769 - 31 231.708 1601 10 1 140.479 50.393 95.15 - 31 133.326 1213 11 0 121.124 62.6549 123.75 - 31 114.65 1500 11 1 120.305 63.3095 125.15 - 31 105.53 1499 11 1 120.15 63.4594 125.395 - 31 178.32 1272 12 0 82.841 74.5303 153.75 - 31 17.0099 1273 12 0 82.4577 74.65 154.125 - 31 45.8046 1307 12 1 81.5723 74.9388 155.15 - 31 84.4296 1306 12 1 81.45 74.9602 155.313 - 31 5.87541 1305 12 1 81.25 74.9767 155.536 - 31 19.7299 1369 13 0 86.7666 94.1087 183.75 - 31 124.612 1370 13 0 86.7816 94.15 183.808 - 31 1.22917 1371 13 0 86.824 94.35 184.145 - 31 240.416 1334 13 1 86.9062 95.086 185.15 - 31 108.311 1335 13 1 87.0501 95.6266 185.497 - 31 131.001 1336 13 1 87.25 95.9489 185.317 - 31 35.3185 1387 13 0 88.1667 97.6659 184.15 - 31 71.435 1388 13 0 88.2132 97.75 184.077 - 31 66.9684 1389 13 0 88.3267 97.95 183.931 - 31 58.0543 1390 13 0 88.4076 98.15 183.867 - 31 31.8487 1391 13 0 88.4327 98.35 183.792 - 31 73.6396 1600 10 1 140.35 50.6222 95.4748 - 31 84.9374 1599 10 1 140.15 50.7289 95.4442 - 31 74.7516 1598 10 1 139.95 50.8279 95.4084 - 31 77.5038 1597 10 1 139.75 50.8379 95.2939 - 31 328.85 1155 10 0 138.95 51.1363 94.15 - 31 64.6833 1573 9 1 134.75 29.1761 65.1979 - 31 285.847 895 12 0 165.269 -0.945651 153.75 - 31 262.887 1728 12 1 165.801 -0.933426 155.15 - 31 51.5298 806 13 0 177.168 -18.8196 183.75 - 31 119.246 805 13 0 177.186 -18.8502 183.799 - 31 187.238 1786 13 1 177.479 -19.655 185.15 - 31 22.9359 1787 13 1 177.55 -19.7994 185.469 - 31 103.001 807 14 0 177.311 -18.511 213.75 - 31 109.967 1786 14 1 177.444 -18.4624 215.15 - 31 161.016 911 12 0 166.237 2.32301 153.75 - 31 63.0587 1733 12 1 166.854 2.41001 155.15 - 31 61.1564 1734 12 1 166.95 2.42812 155.369 - 31 151.101 924 13 0 179.04 5.01831 183.75 - 31 82.4212 1797 13 1 179.624 5.05683 185.15 - 31 27.0298 1798 13 1 179.75 5.06691 185.448 - 31 103.845 957 4 0 54.8462 11.6275 -86.25 - 31 133.55 1176 4 1 55.2887 11.5113 -84.8499 - 31 230.955 951 5 0 64.2003 10.2799 -56.25 - 31 11.2675 1222 5 1 64.6353 10.2262 -54.8497 - 31 103.89 1223 5 1 64.6503 10.2241 -54.8014 - 31 169.047 949 6 0 78.3351 9.99512 -26.25 - 31 178.568 1295 6 1 79.0677 9.97425 -24.85 - 31 19.3363 1296 6 1 79.2501 9.97817 -24.4966 - 31 117.317 963 7 0 89.1893 12.7962 3.75 - 31 113.09 1348 7 1 89.659 12.9119 5.15003 - 31 85.4875 914 8 0 87.8271 2.96119 33.75 - 31 29.8298 913 8 0 87.8003 2.85 34.0517 - 31 195.339 1338 8 1 87.7157 2.4586 35.15 - 31 35.589 593 9 0 47.8613 -61.3048 63.75 - 31 85.2977 592 9 0 47.7647 -61.4501 63.8092 - 31 64.461 591 9 0 47.6295 -61.65 63.8922 - 31 79.8022 590 9 0 47.4898 -61.85 63.9619 - 31 70.2875 589 9 0 47.3512 -62.0503 64.0167 - 31 112.862 588 9 0 47.2335 -62.25 64.0593 - 31 78.8375 587 9 0 47.1178 -62.4501 64.1042 - 31 2.66473 586 9 0 47.0047 -62.65 64.1469 - 31 18.3578 1120 9 1 44.0836 -67.7706 65.15 - 31 111.022 1119 9 1 44.05 -67.8289 65.1608 - 31 118.961 1118 9 1 43.85 -68.1707 65.2406 - 31 414.567 1117 9 1 43.65 -68.5163 65.358 - 31 98.1545 1116 9 1 43.45 -68.8507 65.471 - 31 58.2825 351 10 0 20.4319 -109.756 93.75 - 31 89.6721 350 10 0 20.309 -109.95 93.8844 - 31 83.9785 349 10 0 20.1679 -110.15 94.0268 - 31 51.9764 994 10 1 18.9475 -111.577 95.15 - 31 102.163 993 10 1 18.85 -111.691 95.2373 - 31 94.1926 992 10 1 18.65 -111.956 95.449 - 31 131.465 333 11 0 11.3284 -113.447 123.75 - 31 102.042 955 11 1 11.1312 -113.458 125.15 - 31 62.7098 342 12 0 36.7725 -111.582 153.75 - 31 76.5842 343 12 0 36.8652 -111.55 153.884 - 31 51.1406 344 12 0 36.9008 -111.35 154.054 - 31 3.64989 1088 12 1 37.8432 -109.672 155.15 - 31 92.9473 1089 12 1 37.8501 -109.658 155.16 - 31 98.9267 1090 12 1 38.05 -109.299 155.25 - 31 99.491 1091 12 1 38.25 -108.983 155.27 - 31 127.153 1092 12 1 38.4501 -108.654 155.321 - 31 79.6062 509 13 0 42.3816 -78.1699 183.75 - 31 60.9504 510 13 0 42.3993 -78.05 183.969 - 31 168.168 1111 13 1 42.2874 -77.603 185.15 - 31 261.738 1110 13 1 42.25 -77.4396 185.483 - 31 1.76719 519 13 0 42.8188 -76.0563 184.15 - 31 75.2235 520 13 0 42.823 -76.05 184.143 - 31 61.5683 521 13 0 42.861 -75.85 184.014 - 31 96.7877 522 13 0 42.9361 -75.65 183.891 - 31 25.1299 532 12 0 128.45 -73.65 154.012 - 31 111.593 942 7 0 75.7899 8.54787 3.75003 - 31 108.693 1279 7 1 75.9572 8.35395 5.15 - 31 17.1629 1280 7 1 76.05 8.32515 5.47162 - 31 147.408 974 8 0 72.1892 14.9306 33.75 - 31 34.063 1260 8 1 72.239 15.277 35.15 - 31 257.408 1261 8 1 72.2501 15.3039 35.2395 - 31 125.264 1262 8 1 72.45 15.5761 35.4092 - 31 0.991918 1025 9 0 47.6508 25.2497 63.75 - 31 118.754 1026 9 0 47.65 25.25 63.7509 - 31 214.176 931 7 0 80.8433 6.41737 3.75 - 31 149.211 1306 7 1 81.3259 6.31551 5.15 - 31 15.9136 1307 7 1 81.4502 6.29057 5.50359 - 31 39.7392 897 8 0 94.1546 -0.601822 33.75 - 31 66.9342 896 8 0 94.2359 -0.65 33.9254 - 31 112.452 1373 8 1 94.759 -1.06094 35.15 - 31 123.978 895 9 0 101.252 -1.00669 63.7501 - 31 49.8525 1406 9 1 101.518 -1.0214 65.15 - 31 77.8352 1407 9 1 101.55 -1.02434 65.3128 - 31 213.239 876 10 0 100.526 -4.80224 93.75 - 31 12.2881 875 10 0 100.499 -4.85 94.0958 - 31 67.6476 1401 10 1 100.383 -4.98972 95.1502 - 31 31.3266 1400 10 1 100.35 -5.02868 95.4124 - 31 115.357 881 11 0 91.1886 -3.68626 123.75 - 31 18.5578 882 11 0 91.0748 -3.65 124.088 - 31 102.364 1352 11 1 90.6489 -3.54149 125.15 - 31 31.0937 1351 11 1 90.55 -3.49219 125.48 - 31 113.838 947 12 0 87.7703 9.46995 153.75 - 31 44.8759 1338 12 1 87.6613 10.0707 155.15 - 31 87.3229 1337 12 1 87.65 10.1248 155.269 - 31 60.2713 1026 13 0 83.1114 25.4201 183.75 - 31 163.531 1027 13 0 83.102 25.45 183.807 - 31 139.814 1313 13 1 82.8354 26.1848 185.15 - 31 132.77 1085 14 0 64.041 37.054 213.75 - 31 86.5077 1215 14 1 63.2149 37.4639 215.151 - 31 24.4318 1214 14 1 63.05 37.552 215.456 - 31 179.758 1315 13 1 83.163 25.5359 185.15 - 31 119.472 1316 13 1 83.25 25.3475 185.476 - 31 301.643 1317 13 1 83.45 25.3735 185.392 - 31 35.0938 877 10 0 100.562 -4.65 94.067 - 31 58.6382 1405 10 1 101.234 -4.40403 95.15 - 31 76.0187 1406 10 1 101.35 -4.36052 95.2757 - 31 189.218 881 10 0 101.561 -3.70607 94.1498 - 31 24.6226 992 10 0 110.351 18.6431 93.7503 - 31 165.557 993 10 0 110.35 18.65 93.7617 - 31 263.774 1572 10 0 -10.0096 134.613 93.7503 - 31 86.7622 1573 10 0 -10.055 134.75 94.1014 - 31 136.728 849 10 1 -10.1876 135.192 95.15 - 31 16.0231 1638 11 0 -14.4586 147.919 123.75 - 31 94.0934 1639 11 0 -14.469 147.95 123.82 - 31 137.529 826 11 1 -14.6604 148.551 125.15 - 31 89.5665 1768 12 0 -17.6476 173.788 153.75 - 31 127.554 1769 12 0 -17.6687 173.95 153.932 - 31 131.255 811 12 1 -17.8138 174.988 155.15 - 31 34.6711 810 12 1 -17.85 175.272 155.487 - 31 151.501 1564 10 0 -4.03701 133.021 93.75 - 31 65.3696 880 10 1 -3.87558 133.468 95.15 - 31 54.9974 881 10 1 -3.84999 133.537 95.3757 - 31 159.556 1616 11 0 4.85237 143.397 123.75 - 31 159.143 926 11 1 5.31451 143.887 125.15 - 31 133.824 1646 12 0 18.4831 149.415 153.75 - 31 87.5864 995 12 1 19.1312 149.69 155.15 - 31 38.7681 996 12 1 19.25 149.74 155.413 - 31 54.3304 1679 13 0 26.4973 156.105 183.75 - 31 59.0254 1680 13 0 26.5481 156.15 183.957 - 31 11.3771 1033 13 1 26.8403 156.399 185.15 - 31 140.068 1034 13 1 26.85 156.407 185.189 - 31 140.547 1727 14 0 37.2483 165.632 213.75 - 31 21.3776 1728 14 0 37.3766 165.75 214.09 - 31 4.78315 1088 14 1 37.8354 166.063 215.151 - 31 188.304 1089 14 1 37.85 166.073 215.185 - 31 6.73086 1169 0 0 17.1074 54.0322 -206.25 - 31 69.4949 1170 0 0 17.1128 54.05 -206.238 - 31 57.8435 1171 0 0 17.1734 54.25 -206.108 - 31 58.9499 1172 0 0 17.2338 54.45 -205.978 - 31 134.334 988 0 1 17.7496 56.1579 -204.85 - 31 87.0958 989 0 1 17.85 56.4904 -204.63 - 31 19.7099 1394 1 0 30.7128 99.083 -176.25 - 31 79.4842 1395 1 0 30.733 99.15 -176.205 - 31 63.4893 1396 1 0 30.7935 99.35 -176.072 - 31 43.8242 1397 1 0 30.8535 99.55 -175.939 - 31 150.301 1056 1 1 31.3412 101.183 -174.85 - 31 91.5031 1057 1 1 31.45 101.547 -174.607 - 31 57.6606 1614 2 0 43.1086 143.008 -146.25 - 31 75.7664 1615 2 0 43.1486 143.15 -146.153 - 31 83.625 1616 2 0 43.2054 143.35 -146.016 - 31 11.786 1617 2 0 43.2622 143.55 -145.879 - 31 323.649 1118 2 1 43.6832 145.045 -144.85 -Number of digits in this event: 123 -Using G4ParticleGun... -Particle energy: 2.52009 LIN +Number of tracker hits in this event: 22 + 31 434.198 643 10 0 -104.641 -51.3417 94.15 + 31 108.367 377 9 1 -104.643 -51.3417 65.55 + 31 236.833 643 9 0 -104.643 -51.341 64.15 + 31 114.344 377 8 1 -104.651 -51.3247 35.55 + 31 140.034 643 8 0 -104.651 -51.3252 34.15 + 31 98.0043 377 7 1 -104.66 -51.3344 5.55 + 31 104.59 643 7 0 -104.661 -51.3352 4.15 + 31 117.72 377 6 1 -104.681 -51.3515 -24.45 + 31 165.931 643 6 0 -104.682 -51.3523 -25.85 + 31 134.597 377 5 1 -104.705 -51.3676 -54.45 + 31 118.664 643 5 0 -104.706 -51.3694 -55.85 + 31 127.325 377 4 1 -104.724 -51.4057 -84.45 + 31 97.4252 643 4 0 -104.724 -51.4084 -85.85 + 31 114.05 377 3 1 -104.717 -51.4625 -114.45 + 31 131.119 642 3 0 -104.717 -51.4657 -115.85 + 31 127.497 377 2 1 -104.7 -51.5291 -144.45 + 31 109.136 642 2 0 -104.699 -51.5327 -145.85 + 31 107.422 377 1 1 -104.692 -51.606 -174.45 + 31 134.537 642 1 0 -104.692 -51.6099 -175.85 + 31 136.59 377 0 1 -104.694 -51.6902 -204.45 + 31 99.4857 641 0 0 -104.693 -51.6949 -205.85 + 31 90.7334 644 9 0 -104.653 -51.25 63.9764 +Number of digits in this event: 11 +Using G4ParticleGun... +Particle energy: 8.40237 LIN Particle: proton Event: 32 -Number of tracker hits in this event: 38 - 32 114.878 545 10 1 -70.8597 85.931 95.55 - 32 119.119 1329 10 0 -70.8555 85.9331 94.15 - 32 101.67 546 9 1 -70.7748 85.974 65.55 - 32 105.656 1329 9 0 -70.7701 85.9751 64.15 - 32 101.309 546 8 1 -70.6683 85.9908 35.55 - 32 113.746 1329 8 0 -70.662 85.991 34.15 - 32 115.87 547 7 1 -70.5339 85.9926 5.55 - 32 96.435 1329 7 0 -70.5288 85.9908 4.15 - 32 127.819 548 6 1 -70.4287 85.9595 -24.45 - 32 110.856 1329 6 0 -70.4224 85.9592 -25.85 - 32 245.096 548 5 1 -70.2983 85.9536 -54.45 - 32 113.122 1329 5 0 -70.2897 85.9527 -55.85 - 32 114.931 549 4 1 -70.1059 85.9399 -84.45 - 32 237.35 1329 4 0 -70.0981 85.9396 -85.85 - 32 136.123 550 3 1 -69.9342 85.9648 -114.45 - 32 203.187 1329 3 0 -69.9272 85.9669 -115.85 - 32 151.702 551 2 1 -69.7801 86.012 -144.45 - 32 109.947 1329 2 0 -69.7683 86.0135 -145.85 - 32 124.844 552 1 1 -69.5245 86.0597 -174.45 - 32 114.228 1330 1 0 -69.5153 86.0605 -175.85 - 32 432.3 553 0 1 -69.3333 86.079 -204.45 - 32 114.575 1330 0 0 -69.322 86.0805 -205.85 - 32 152.787 554 0 1 -69.25 86.05 -204.702 - 32 107.613 1323 0 0 -68.9414 84.785 -205.85 - 32 126.606 1322 0 0 -68.8913 84.6498 -205.986 - 32 62.3427 1182 0 0 -54.8076 56.5199 -206.25 - 32 40.4823 1321 0 0 -69.0011 84.3338 -205.85 - 32 89.6505 1320 0 0 -68.9636 84.2499 -205.924 - 32 60.2078 1319 0 0 -68.7668 84.05 -206.089 - 32 130.493 1385 3 0 -65.9005 97.2002 -116.25 - 32 4.71566 1386 3 0 -65.7686 97.35 -115.872 - 32 186.778 574 3 1 -65.2479 97.3317 -114.85 - 32 225.267 573 3 1 -65.25 97.3968 -114.54 - 32 44.7748 1399 3 0 -64.659 99.9785 -115.85 - 32 14.1814 1400 3 0 -64.6174 100.15 -115.865 - 32 55.694 593 3 1 -61.4055 101.741 -114.85 - 32 355.177 594 3 1 -61.2497 101.789 -114.815 - 32 28.489 549 5 1 -70.25 85.9114 -54.7549 +Number of tracker hits in this event: 30 + 32 128.913 212 8 1 -137.627 -1.03369 35.55 + 32 117.526 895 8 0 -137.627 -1.03325 34.15 + 32 92.6103 212 7 1 -137.608 -1.02584 5.55 + 32 191.425 895 7 0 -137.607 -1.02478 4.15 + 32 119.723 212 6 1 -137.579 -1.00098 -24.45 + 32 105.954 895 6 0 -137.577 -0.999328 -25.85 + 32 484.307 213 5 1 -137.538 -0.961758 -54.45 + 32 108.199 895 5 0 -137.536 -0.960659 -55.85 + 32 132.37 213 4 1 -137.478 -0.940197 -84.45 + 32 108.359 895 4 0 -137.475 -0.939487 -85.85 + 32 139.51 213 3 1 -137.41 -0.925427 -114.45 + 32 112.997 895 3 0 -137.406 -0.924463 -115.85 + 32 141.155 214 2 1 -137.324 -0.903614 -144.45 + 32 141.485 895 2 0 -137.32 -0.902222 -145.85 + 32 109.655 214 1 1 -137.243 -0.875087 -174.45 + 32 118.621 895 1 0 -137.239 -0.873433 -175.85 + 32 81.1444 1006 6 1 21.25 -161.111 -24.656 + 32 8464.13 279 2 0 22.0436 -124.211 -146.04 + 32 391.074 214 0 1 -137.219 -0.733384 -204.45 + 32 159.56 899 0 0 -137.614 -0.154132 -205.85 + 32 88.6148 895 0 0 -137.166 -0.991091 -205.85 + 32 65.322 213 0 1 -137.35 -1.24845 -204.719 + 32 65.009 889 0 0 -137.782 -2.13521 -205.85 + 32 100.959 888 0 0 -137.838 -2.25 -205.997 + 32 187.196 215 0 1 -137.129 -0.793603 -204.45 + 32 176.828 897 0 0 -137.013 -0.524777 -205.85 + 32 2.22283 898 0 0 -136.981 -0.45 -206.238 + 32 52.7021 216 0 1 -136.95 -0.578831 -204.72 + 32 86.0026 900 0 0 -136.479 0.05 -205.981 + 32 107.599 212 5 1 -137.554 -0.961714 -54.45 Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 1.79811 LIN +Particle energy: 8.82761 LIN Particle: proton Event: 33 -Number of tracker hits in this event: 20 - 33 103.757 471 8 1 -85.8009 105.399 35.55 - 33 103.147 1426 8 0 -85.8005 105.4 34.15 - 33 254.789 471 7 1 -85.7903 105.419 5.55 - 33 106.558 1426 7 0 -85.7904 105.422 4.15 - 33 125.947 471 6 1 -85.7806 105.488 -24.45 - 33 111.625 1426 6 0 -85.7796 105.493 -25.85 - 33 115.338 471 5 1 -85.7439 105.605 -54.45 - 33 127.994 1427 5 0 -85.7435 105.609 -55.85 - 33 158.302 471 4 1 -85.7376 105.684 -84.45 - 33 126.475 1427 4 0 -85.7364 105.688 -85.85 - 33 101.629 471 3 1 -85.7044 105.762 -114.45 - 33 115.669 1428 3 0 -85.7058 105.763 -115.85 - 33 114.421 471 2 1 -85.7447 105.795 -144.45 - 33 175.717 1428 2 0 -85.7489 105.798 -145.85 - 33 109.531 471 1 1 -85.8429 105.858 -174.45 - 33 110.934 1428 1 0 -85.8482 105.862 -175.85 - 33 270.964 470 0 1 -85.9631 105.932 -204.45 - 33 105.896 1428 0 0 -85.9698 105.935 -205.85 - 33 270.186 470 7 1 -85.8501 105.205 5.31525 - 33 125.941 469 7 1 -86.05 105.224 5.3 -Number of digits in this event: 10 +Number of tracker hits in this event: 25 + 33 104.523 743 11 1 -31.271 36.0099 125.55 + 33 109.444 1079 11 0 -31.2717 36.0109 124.15 + 33 90.8935 743 10 1 -31.2892 36.0346 95.55 + 33 120.264 1079 10 0 -31.29 36.0351 94.15 + 33 101.311 743 9 1 -31.3055 36.0448 65.55 + 33 111.459 1079 9 0 -31.3055 36.045 64.15 + 33 128.671 743 8 1 -31.3051 36.0508 35.55 + 33 109.437 1080 8 0 -31.3045 36.0516 34.15 + 33 223.744 743 7 1 -31.2969 36.0693 5.55 + 33 147.449 1080 7 0 -31.2959 36.0707 4.15 + 33 148.254 743 6 1 -31.2789 36.0989 -24.45 + 33 106.451 1080 6 0 -31.2792 36.1004 -25.85 + 33 111.26 743 5 1 -31.2863 36.1306 -54.45 + 33 247.529 1080 5 0 -31.2864 36.1318 -55.85 + 33 169.662 743 4 1 -31.2871 36.1563 -84.45 + 33 108.832 1080 4 0 -31.2866 36.157 -85.85 + 33 107.015 743 3 1 -31.2794 36.1692 -114.45 + 33 148.409 1080 3 0 -31.2792 36.1681 -115.85 + 33 98.8546 743 2 1 -31.2769 36.1476 -144.45 + 33 131.62 1080 2 0 -31.2775 36.1472 -145.85 + 33 115.881 743 1 1 -31.2914 36.1386 -174.45 + 33 100.292 1080 1 0 -31.2922 36.1386 -175.85 + 33 106.223 743 0 1 -31.3093 36.141 -204.45 + 33 152.371 1080 0 0 -31.309 36.1418 -205.85 + 33 89.5764 1309 0 1 81.85 151.33 -204.818 +Number of digits in this event: 12 Using G4ParticleGun... -Particle energy: 2.11463 LIN +Particle energy: 9.22595 LIN Particle: proton Event: 34 -Number of tracker hits in this event: 22 - 34 138.134 1474 9 1 115.057 -38.6913 65.55 - 34 166.612 706 9 0 115.054 -38.6894 64.15 - 34 114.53 1474 8 1 115 -38.656 35.55 - 34 105.181 706 8 0 114.993 -38.6575 34.15 - 34 105.216 1473 7 1 114.863 -38.6892 5.55 - 34 125.39 706 7 0 114.854 -38.6922 4.15 - 34 135.26 1472 6 1 114.656 -38.7494 -24.45 - 34 169.296 706 6 0 114.65 -38.7534 -25.85 - 34 118.056 1471 5 1 114.509 -38.8288 -54.45 - 34 105.893 706 5 0 114.503 -38.831 -55.85 - 34 128.329 1471 4 1 114.377 -38.8678 -84.45 - 34 148.374 705 4 0 114.372 -38.8724 -85.85 - 34 182.741 1470 3 1 114.274 -38.9614 -114.45 - 34 196.581 705 3 0 114.267 -38.9628 -115.85 - 34 137.722 1469 2 1 114.136 -38.9878 -144.45 - 34 232.622 705 2 0 114.129 -38.9865 -145.85 - 34 96.0192 1469 1 1 113.982 -38.9552 -174.45 - 34 120.086 705 1 0 113.973 -38.9571 -175.85 - 34 130.898 1468 0 1 113.801 -38.9976 -204.45 - 34 205.484 705 0 0 113.794 -38.9989 -205.85 - 34 44.0468 705 5 0 114.514 -38.8503 -56.1856 - 34 299.714 435 5 0 106.991 -93.0603 -56.25 -Number of digits in this event: 16 +Number of tracker hits in this event: 97 + 34 0.959014 594 10 0 -99.8746 -61.1166 93.754 + 34 238.436 401 9 1 -99.8743 -61.1168 65.55 + 34 123.393 594 9 0 -99.8756 -61.1168 64.15 + 34 165.068 401 8 1 -99.9065 -61.1068 35.55 + 34 125.566 594 8 0 -99.9078 -61.1058 34.15 + 34 146.7 401 7 1 -99.9298 -61.0856 5.55 + 34 98.7368 594 7 0 -99.9318 -61.0844 4.15 + 34 101.707 400 6 1 -99.9723 -61.0607 -24.45 + 34 169.041 594 6 0 -99.9741 -61.0592 -25.85 + 34 148.107 400 5 1 -100.006 -61.0324 -54.45 + 34 110.154 595 5 0 -100.007 -61.0311 -55.85 + 34 122.344 400 4 1 -100.045 -61.0004 -84.45 + 34 98.0858 595 4 0 -100.048 -60.9989 -85.85 + 34 99.3314 400 3 1 -100.093 -60.9692 -114.45 + 34 144.599 595 3 0 -100.095 -60.9679 -115.85 + 34 93.0119 400 2 1 -100.14 -60.9437 -144.45 + 34 146.092 595 2 0 -100.142 -60.9429 -145.85 + 34 107.648 399 1 1 -100.192 -60.925 -174.45 + 34 106.863 595 1 0 -100.196 -60.924 -175.85 + 34 323.893 399 0 1 -100.258 -60.9009 -204.45 + 34 101.93 595 0 0 -100.262 -60.8981 -205.85 + 34 57.0725 133 1 1 -153.35 -18.4571 -174.655 + 34 6.45482 723 0 0 -82.3065 -35.2637 -206.25 + 34 156.447 724 0 0 -82.2963 -35.25 -206.233 + 34 152.761 725 0 0 -82.1474 -35.05 -205.989 + 34 1.91667 492 0 1 -81.4538 -34.124 -204.85 + 34 185.188 493 0 1 -81.45 -34.119 -204.844 + 34 45.1125 494 0 1 -81.25 -33.8523 -204.515 + 34 5.18971 844 1 0 -63.4237 -11.0605 -176.25 + 34 170.151 845 1 0 -63.4155 -11.05 -176.237 + 34 54.587 846 1 0 -63.2586 -10.85 -175.989 + 34 69.6124 587 1 1 -62.5539 -9.95259 -174.85 + 34 101.359 588 1 1 -62.45 -9.82022 -174.682 + 34 15.3186 962 2 0 -45.3955 12.6243 -146.25 + 34 112.077 963 2 0 -45.376 12.65 -146.218 + 34 50.2334 964 2 0 -45.2252 12.85 -145.965 + 34 95.6924 677 2 1 -44.5596 13.7479 -144.85 + 34 210.401 678 2 1 -44.45 13.8958 -144.666 + 34 293.806 1080 3 0 -28.6844 36.2206 -116.25 + 34 210.036 1081 3 0 -28.6637 36.25 -116.213 + 34 53.4484 1082 3 0 -28.5234 36.45 -115.958 + 34 70.8274 760 3 1 -27.9127 37.3242 -114.85 + 34 201.4 761 3 1 -27.85 37.4139 -114.736 + 34 148.886 1200 4 0 -11.9054 60.0572 -86.25 + 34 66.3651 1201 4 0 -11.7696 60.25 -86.0075 + 34 76.6761 844 4 1 -11.1098 61.1656 -84.85 + 34 136.099 845 4 1 -11.05 61.2486 -84.7451 + 34 38.0808 1327 5 0 6.58484 85.5665 -56.25 + 34 129.758 1328 5 0 6.64535 85.65 -56.1524 + 34 32.8147 1329 5 0 6.78936 85.85 -55.92 + 34 239.021 937 5 1 7.45926 86.7712 -54.85 + 34 83.5396 938 5 1 7.65 87.0335 -54.5453 + 34 81.6149 1456 6 0 25.3277 111.411 -26.25 + 34 120.528 1457 6 0 25.4285 111.55 -26.0886 + 34 2.92798 1458 6 0 25.5731 111.75 -25.8563 + 34 57.5229 1030 6 1 26.1981 112.61 -24.85 + 34 155.656 1031 6 1 26.25 112.681 -24.7664 + 34 27.6388 1586 7 0 43.1492 137.52 3.75 + 34 106.065 1587 7 0 43.1698 137.55 3.78472 + 34 67.6672 1588 7 0 43.3054 137.75 4.01485 + 34 56.2536 1119 7 1 43.9844 138.724 5.15 + 34 140.546 1120 7 1 44.05 138.818 5.25959 + 34 10.1932 1710 8 0 62.1531 162.339 33.75 + 34 161.796 1711 8 0 62.1617 162.35 33.7635 + 34 77.7811 1712 8 0 62.3158 162.55 34.0058 + 34 9.39796 1214 8 1 63.0367 163.489 35.15 + 34 242.336 1215 8 1 63.05 163.506 35.1711 + 34 27.4596 1216 8 1 63.25 163.766 35.4878 + 34 88.336 1077 3 0 -15.3925 35.468 -116.25 + 34 237.149 483 0 1 -83.3206 -35.5725 -204.85 + 34 199.07 482 0 1 -83.45 -35.6319 -204.749 + 34 264.639 484 0 1 -83.25 -35.2468 -204.475 + 34 301.787 9 4 1 -178.152 -178.767 -84.5921 + 34 238.542 1093 1 1 38.7796 -76.9012 -174.705 + 34 372.938 604 0 0 -121.952 -59.1025 -206.25 + 34 340.834 286 0 1 -122.831 -58.9727 -204.85 + 34 211.472 285 0 1 -122.95 -58.9547 -204.66 + 34 274.299 604 1 0 -141.842 -59.1298 -176.25 + 34 138.689 186 1 1 -142.77 -59.1317 -174.85 + 34 50.5905 185 1 1 -142.95 -59.1314 -174.577 + 34 259.216 601 2 0 -162.203 -59.7052 -146.25 + 34 134.416 84 2 1 -163.162 -59.7251 -144.85 + 34 63.4506 83 2 1 -163.35 -59.7283 -144.575 + 34 221.826 593 0 0 -100.223 -61.3494 -205.851 + 34 11.8799 592 0 0 -100.216 -61.45 -206.19 + 34 108.67 637 6 0 -127.911 -52.5527 -26.25 + 34 210.215 638 6 0 -127.962 -52.45 -26.0827 + 34 4.32647 639 6 0 -127.657 -52.25 -25.8595 + 34 100.077 261 6 1 -127.782 -52.0318 -24.8499 + 34 57.0623 262 6 1 -127.75 -52.0308 -24.7894 + 34 79.9823 400 8 1 -99.9501 -61.0813 35.2693 + 34 151.654 595 8 0 -100.069 -60.8949 34.1499 + 34 0.822297 600 9 0 -100.507 -59.8514 64.15 + 34 25.4848 601 9 0 -100.508 -59.85 64.1489 + 34 0.575575 381 9 1 -103.88 -47.6281 65.15 + 34 32.4507 830 9 0 -113.28 -13.9045 64.15 + 34 135.857 831 9 0 -113.301 -13.85 64.1297 +Number of digits in this event: 47 Using G4ParticleGun... -Particle energy: 7.54146 LIN +Particle energy: 8.10226 LIN Particle: proton Event: 35 -Number of tracker hits in this event: 68 - 35 121.838 990 11 1 18.181 33.7337 125.55 - 35 100.513 1068 11 0 18.1802 33.7337 124.15 - 35 114.614 990 10 1 18.165 33.7336 95.55 - 35 108.497 1068 10 0 18.1645 33.733 94.15 - 35 94.9609 990 9 1 18.1517 33.7212 65.55 - 35 96.1758 1068 9 0 18.1515 33.7209 64.15 - 35 227.544 990 8 1 18.1468 33.7127 35.55 - 35 136.501 1068 8 0 18.1456 33.7118 34.15 - 35 103.626 990 7 1 18.1091 33.7067 5.55 - 35 102.064 1068 7 0 18.1059 33.7062 4.15 - 35 118.333 989 6 1 18.0395 33.6947 -24.45 - 35 103.987 1068 6 0 18.0363 33.6947 -25.85 - 35 117.097 989 5 1 17.9744 33.6942 -54.45 - 35 121.314 1068 5 0 17.9724 33.6935 -55.85 - 35 106.204 989 4 1 17.9327 33.6791 -84.45 - 35 101.354 1068 4 0 17.9317 33.6795 -85.85 - 35 127.594 989 3 1 17.9074 33.691 -114.45 - 35 130.63 1068 3 0 17.9067 33.6919 -115.85 - 35 322.562 989 2 1 17.8945 33.711 -144.45 - 35 221.287 1068 2 0 17.8925 33.7128 -145.85 - 35 121.926 989 1 1 17.8529 33.7526 -174.45 - 35 100.781 1068 1 0 17.8504 33.7536 -175.85 - 35 149.852 988 0 1 17.7989 33.7746 -204.45 - 35 107.449 1068 0 0 17.7947 33.776 -205.85 - 35 87.7361 610 0 0 19.64 -57.9886 -206.25 - 35 307.704 609 0 0 19.6398 -58.05 -206.185 - 35 233.967 608 0 0 19.6396 -58.25 -205.975 - 35 776.71 997 0 1 19.6414 -59.3189 -204.85 - 35 341.829 468 1 0 20.4562 -86.275 -176.25 - 35 347.606 467 1 0 20.4616 -86.45 -176.064 - 35 22.9664 466 1 0 20.4665 -86.65 -175.855 - 35 853.24 1002 1 1 20.4933 -87.6134 -174.85 - 35 6.66742 324 2 0 21.9882 -115.343 -146.25 - 35 333.877 323 2 0 21.9886 -115.35 -146.243 - 35 359.674 322 2 0 21.9996 -115.55 -146.037 - 35 667.559 1010 2 1 22.0516 -116.688 -144.85 - 35 252.786 183 3 0 22.0518 -143.441 -116.25 - 35 482.208 182 3 0 22.0517 -143.55 -116.133 - 35 116.157 181 3 0 22.0503 -143.75 -115.919 - 35 813.905 1009 3 1 22.0389 -144.738 -114.85 - 35 261.206 52 4 0 23.7498 -169.643 -86.25 - 35 369.398 51 4 0 23.7573 -169.75 -86.1272 - 35 118.546 50 4 0 23.7709 -169.95 -85.8945 - 35 309.996 1018 4 1 23.838 -170.843 -84.85 - 35 339.078 1019 4 1 23.85 -171.003 -84.6625 - 35 19.7998 998 0 1 19.6501 -59.5407 -204.599 - 35 27.1831 975 0 0 11.6113 15.2421 -206.25 - 35 13.2868 988 2 1 17.85 33.7943 -144.588 - 35 209.611 991 8 1 18.2501 33.7465 35.4986 - 35 187.525 992 8 1 18.45 33.815 35.2746 - 35 29.6702 1070 8 0 19.0291 34.2148 34.15 - 35 153.102 1071 8 0 19.0917 34.25 34.0729 - 35 112.569 1119 7 1 44.0385 49.7729 5.55 - 35 19.6338 1150 7 0 43.4769 50.2236 4.15 - 35 88.3529 1151 7 0 43.4446 50.25 4.06771 - 35 22.1889 1080 6 1 36.0819 60.0863 -24.45 - 35 266.872 1079 6 1 36.05 60.1083 -24.5285 - 35 93.1023 1204 6 0 35.898 60.873 -25.85 - 35 92.402 1205 6 0 35.762 61.05 -26.0858 - 35 94.8436 1206 6 0 35.7533 61.25 -26.1721 - 35 100.09 1207 6 0 35.7983 61.4502 -26.1866 - 35 111.728 1208 6 0 35.8404 61.65 -26.1584 - 35 76.3487 1209 6 0 35.7768 61.85 -26.1849 - 35 142.908 1210 6 0 35.5587 62.05 -26.1456 - 35 61.4223 1075 6 1 35.1964 62.5457 -24.85 - 35 105.654 1076 6 1 35.25 62.6547 -24.6483 - 35 187.691 1077 6 1 35.45 62.4275 -24.5123 - 35 177.438 1078 6 1 35.65 62.0689 -24.592 -Number of digits in this event: 37 +Number of tracker hits in this event: 33 + 35 388.407 1353 10 1 90.8318 -5.35501 95.55 + 35 98.507 873 10 0 90.8334 -5.35425 94.15 + 35 123.849 1353 9 1 90.8716 -5.34068 65.55 + 35 150.881 873 9 0 90.8745 -5.33929 64.15 + 35 223.42 1353 8 1 90.9349 -5.31147 35.55 + 35 101.778 873 8 0 90.9379 -5.31075 34.15 + 35 131.475 1354 7 1 91.0007 -5.29836 5.55 + 35 102.63 873 7 0 91.0042 -5.29763 4.15 + 35 94.9691 1354 6 1 91.072 -5.28359 -24.45 + 35 179.532 873 6 0 91.0753 -5.28197 -25.85 + 35 146.095 1354 5 1 91.141 -5.25016 -54.45 + 35 175.529 874 5 0 91.1443 -5.24875 -55.85 + 35 102.711 1355 4 1 91.2148 -5.21776 -84.45 + 35 114.271 874 4 0 91.2189 -5.21526 -85.85 + 35 222.831 1355 3 1 91.3004 -5.16009 -114.45 + 35 97.695 874 3 0 91.3041 -5.1574 -115.85 + 35 119.202 1356 2 1 91.3796 -5.10077 -144.45 + 35 99.2171 874 2 0 91.3836 -5.09761 -145.85 + 35 147.083 1356 1 1 91.4636 -5.0375 -174.45 + 35 109.179 875 1 0 91.4679 -5.03552 -175.85 + 35 105.676 1357 0 1 91.5589 -4.99423 -204.45 + 35 112.263 875 0 0 91.5634 -4.99273 -205.85 + 35 73.2817 1352 8 1 90.75 -5.48764 35.3423 + 35 42.6482 1351 8 1 90.5493 -5.59383 35.2033 + 35 2.23244 857 8 0 84.297 -8.64687 34.15 + 35 112.548 856 8 0 84.2908 -8.65 34.149 + 35 297.394 855 8 0 83.9814 -8.85 34.0605 + 35 212.339 576 8 0 8.23931 -64.6775 33.7502 + 35 216.61 575 8 0 8.34076 -64.85 33.9123 + 35 157.604 1319 8 1 83.8724 -10.6861 35.1501 + 35 39.3644 841 8 0 83.3935 -11.772 34.1498 + 35 119.374 840 8 0 83.3862 -11.8503 34.1327 + 35 45.622 1312 8 1 82.6437 -12.4302 35.15 +Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 9.30962 LIN +Particle energy: 1.1221 LIN Particle: proton Event: 36 -Number of tracker hits in this event: 25 - 36 156.214 715 10 1 -37.0486 -78.875 95.55 - 36 152.713 505 10 0 -37.0487 -78.8755 94.15 - 36 104.856 715 9 1 -37.0498 -78.8869 65.55 - 36 3.37507 714 9 1 -37.05 -78.8869 65.1636 - 36 119 505 9 0 -37.0504 -78.8871 64.15 - 36 114.169 714 8 1 -37.0621 -78.8896 35.55 - 36 89.6252 505 8 0 -37.0632 -78.8896 34.15 - 36 129.179 714 7 1 -37.0854 -78.8886 5.55 - 36 96.9373 505 7 0 -37.0865 -78.8882 4.15 - 36 131.414 714 6 1 -37.112 -78.8833 -24.45 - 36 123.67 505 6 0 -37.1127 -78.8826 -25.85 - 36 139.012 714 5 1 -37.1269 -78.8689 -54.45 - 36 135.752 505 5 0 -37.1282 -78.8686 -55.85 - 36 132.153 714 4 1 -37.1554 -78.8629 -84.45 - 36 131.923 505 4 0 -37.1572 -78.863 -85.85 - 36 111.197 714 3 1 -37.194 -78.8662 -114.45 - 36 163.171 505 3 0 -37.1958 -78.8669 -115.85 - 36 105.004 714 2 1 -37.2361 -78.8787 -144.45 - 36 232.406 505 2 0 -37.2383 -78.8795 -145.85 - 36 231.608 713 1 1 -37.2872 -78.8961 -174.45 - 36 130.293 505 1 0 -37.2893 -78.8971 -175.85 - 36 102.621 713 0 1 -37.3315 -78.916 -204.45 - 36 118.812 505 0 0 -37.3339 -78.9164 -205.85 - 36 349.705 715 6 1 -37.05 -78.9018 -24.5992 - 36 74.0209 716 6 1 -36.85 -78.9681 -24.5129 -Number of digits in this event: 15 +Number of tracker hits in this event: 24 + 36 109.915 768 11 1 -26.2909 15.0122 125.55 + 36 124.041 974 11 0 -26.2912 15.0117 124.15 + 36 128.724 768 10 1 -26.304 15.0116 95.55 + 36 228.934 974 10 0 -26.3133 15.0081 94.15 + 36 193.193 767 9 1 -26.4942 14.9359 65.55 + 36 154.475 974 9 0 -26.5035 14.9301 64.15 + 36 123.064 766 8 1 -26.6871 14.8027 35.55 + 36 137.941 973 8 0 -26.6941 14.7956 34.15 + 36 124.55 766 7 1 -26.83 14.6435 5.55 + 36 101.026 972 7 0 -26.8335 14.6394 4.15 + 36 141.09 765 6 1 -26.9082 14.5804 -24.45 + 36 148.227 972 6 0 -26.9167 14.5782 -25.85 + 36 99.4505 764 5 1 -27.0814 14.5188 -54.45 + 36 105.441 972 5 0 -27.0891 14.5138 -55.85 + 36 149.1 763 4 1 -27.2518 14.4029 -84.45 + 36 124.923 971 4 0 -27.262 14.398 -85.85 + 36 125.31 762 3 1 -27.4641 14.2854 -114.45 + 36 134.513 971 3 0 -27.4714 14.2796 -115.85 + 36 135.664 762 2 1 -27.6144 14.1866 -144.45 + 36 106.138 970 2 0 -27.6144 14.1812 -145.85 + 36 259.005 762 1 1 -27.6157 14.0741 -174.45 + 36 229.183 970 1 0 -27.6166 14.0714 -175.85 + 36 156.911 762 0 1 -27.621 14.0122 -204.45 + 36 120.219 969 0 0 -27.6188 14.0099 -205.85 +Number of digits in this event: 20 Using G4ParticleGun... -Particle energy: 9.8656 LIN +Particle energy: 2.5955 LIN Particle: proton Event: 37 -Number of tracker hits in this event: 29 - 37 165.551 1440 10 1 108.156 -6.10147 95.55 - 37 105.01 869 10 0 108.155 -6.10144 94.15 - 37 100.878 1439 9 1 108.14 -6.10117 65.55 - 37 111.031 869 9 0 108.14 -6.1021 64.15 - 37 94.4343 1439 8 1 108.143 -6.12237 35.55 - 37 97.3976 869 8 0 108.144 -6.12295 34.15 - 37 100.478 1440 7 1 108.15 -6.13582 5.55 - 37 89.3127 869 7 0 108.151 -6.13743 4.15 - 37 105.476 1440 6 1 108.155 -6.17109 -24.45 - 37 103.187 869 6 0 108.156 -6.17357 -25.85 - 37 90.7421 1440 5 1 108.159 -6.22247 -54.45 - 37 131.206 869 5 0 108.159 -6.22448 -55.85 - 37 101.777 1440 4 1 108.159 -6.26711 -84.45 - 37 153.275 868 4 0 108.159 -6.27017 -85.85 - 37 102.2 1440 3 1 108.152 -6.33514 -114.45 - 37 130.402 868 3 0 108.152 -6.33819 -115.85 - 37 110.322 1440 2 1 108.16 -6.40069 -144.45 - 37 120.777 868 2 0 108.16 -6.40439 -145.85 - 37 138.123 1440 1 1 108.17 -6.48031 -174.45 - 37 109.985 867 1 0 108.17 -6.48404 -175.85 - 37 105.07 1440 0 1 108.174 -6.56022 -204.45 - 37 122.778 867 0 0 108.174 -6.56382 -205.85 - 37 30.4843 1440 8 1 108.15 -6.13467 35.1839 - 37 19.7676 850 8 0 108.417 -9.96906 34.15 - 37 21.2968 849 8 0 108.437 -10.05 34.1387 - 37 186.579 1446 8 1 109.454 -14.1712 35.15 - 37 64.9335 823 8 0 109.852 -15.3477 34.15 - 37 266.156 822 8 0 109.864 -15.45 34.0731 - 37 34.6581 821 8 0 110.052 -15.65 33.9447 -Number of digits in this event: 10 +Number of tracker hits in this event: 25 + 37 90.6056 359 8 1 -108.336 92.6758 35.55 + 37 106.334 1362 8 0 -108.337 92.674 34.15 + 37 115.042 358 7 1 -108.368 92.6397 5.55 + 37 135.891 1362 7 0 -108.368 92.6407 4.15 + 37 112.42 358 6 1 -108.38 92.6593 -24.45 + 37 125.329 1362 6 0 -108.381 92.6569 -25.85 + 37 113.13 358 5 1 -108.403 92.6069 -54.45 + 37 102.888 1362 5 0 -108.407 92.6055 -55.85 + 37 125.826 358 4 1 -108.472 92.5795 -84.45 + 37 109.306 1362 4 0 -108.474 92.5755 -85.85 + 37 117.536 358 3 1 -108.515 92.4741 -114.45 + 37 100.027 1361 3 0 -108.522 92.4695 -115.85 + 37 110.434 357 2 1 -108.684 92.3887 -144.45 + 37 104.631 1361 2 0 -108.694 92.3855 -145.85 + 37 233.287 356 1 1 -108.884 92.3253 -174.45 + 37 130.503 1360 1 0 -108.893 92.3225 -175.85 + 37 98.3167 355 0 1 -109.079 92.2742 -204.45 + 37 106.328 1360 0 0 -109.082 92.2743 -205.85 + 37 67.5368 902 2 0 -124.381 0.642336 -146.25 + 37 106.189 903 2 0 -124.41 0.65 -146.097 + 37 46.0955 278 2 1 -124.401 1.44498 -144.85 + 37 114.894 279 2 1 -124.35 1.5219 -144.735 + 37 19.7211 280 2 1 -124.15 1.5547 -144.479 + 37 1.97965 277 2 1 -124.558 -0.273438 -144.85 + 37 35.1938 1361 1 0 -108.926 92.35 -176.227 +Number of digits in this event: 8 Using G4ParticleGun... -Particle energy: 8.03743 LIN +Particle energy: 7.20667 LIN Particle: proton Event: 38 -Number of tracker hits in this event: 18 - 38 131.064 387 8 1 -102.642 91.9935 35.55 - 38 140.908 1359 8 0 -102.642 91.9942 34.15 - 38 101.574 387 7 1 -102.663 92.0092 5.55 - 38 99.1706 1359 7 0 -102.664 92.0105 4.15 - 38 190.947 387 6 1 -102.677 92.0386 -24.45 - 38 165.93 1359 6 0 -102.679 92.0392 -25.85 - 38 203.085 387 5 1 -102.708 92.0606 -54.45 - 38 122.656 1359 5 0 -102.709 92.0614 -55.85 - 38 103.1 387 4 1 -102.746 92.076 -84.45 - 38 101.127 1359 4 0 -102.749 92.076 -85.85 - 38 107.425 386 3 1 -102.798 92.0757 -114.45 - 38 145.052 1359 3 0 -102.8 92.0764 -115.85 - 38 104.581 386 2 1 -102.849 92.0934 -144.45 - 38 112.208 1359 2 0 -102.852 92.0951 -145.85 - 38 163.457 386 1 1 -102.904 92.129 -174.45 - 38 106.704 1359 1 0 -102.907 92.1285 -175.85 - 38 130.808 385 0 1 -102.982 92.1155 -204.45 - 38 104.387 1359 0 0 -102.986 92.1106 -205.85 -Number of digits in this event: 10 +Number of tracker hits in this event: 45 + 38 231.089 458 10 1 -88.2517 -30.3447 95.55 + 38 109.811 748 10 0 -88.2533 -30.3446 94.15 + 38 119.622 458 9 1 -88.2886 -30.3464 65.55 + 38 134.865 748 9 0 -88.2916 -30.3471 64.15 + 38 90.7456 458 8 1 -88.3538 -30.3696 35.55 + 38 87.1625 748 8 0 -88.3562 -30.3702 34.15 + 38 168.417 458 7 1 -88.4067 -30.3859 5.55 + 38 137.492 748 7 0 -88.4096 -30.3867 4.15 + 38 103.447 457 6 1 -88.466 -30.4061 -24.45 + 38 117.473 748 6 0 -88.4687 -30.4082 -25.85 + 38 135.371 457 5 1 -88.5231 -30.4506 -54.45 + 38 125.109 747 5 0 -88.5256 -30.4517 -55.85 + 38 122.484 457 4 1 -88.5821 -30.4761 -84.45 + 38 128.883 747 4 0 -88.5845 -30.4767 -85.85 + 38 173.399 457 3 1 -88.6324 -30.486 -114.45 + 38 104.426 747 3 0 -88.6353 -30.4872 -115.85 + 38 129.725 456 2 1 -88.7026 -30.512 -144.45 + 38 141.316 747 2 0 -88.7062 -30.5131 -145.85 + 38 196.084 456 1 1 -88.7833 -30.539 -174.45 + 38 97.4203 747 1 0 -88.7872 -30.5404 -175.85 + 38 127.628 455 0 1 -88.8714 -30.546 -204.45 + 38 101.126 747 0 0 -88.8756 -30.5468 -205.85 + 38 369.489 864 4 0 -95.8665 -7.17707 -86.25 + 38 44.6067 865 4 0 -95.9367 -7.05 -85.9802 + 38 99.3493 837 3 0 -119.341 -12.5443 -116.245 + 38 58.116 1290 4 0 8.91968 78.25 -86.1638 + 38 39.9923 932 4 1 6.45392 81.2695 -84.45 + 38 121.407 931 4 1 6.45 81.2731 -84.4593 + 38 2.01701 1602 9 1 140.574 124.633 65.15 + 38 279.211 1603 9 1 140.75 124.771 65.4272 + 38 5366.5 283 2 0 45.245 -123.55 -146.049 + 38 9498.77 282 2 0 45.2454 -123.55 -146.049 + 38 1279.82 1148 2 1 49.758 -123.721 -144.85 + 38 4585.71 1149 2 1 49.85 -123.724 -144.825 + 38 30.9451 1734 4 1 167.084 -97.5909 -84.85 + 38 400.765 1735 4 1 167.15 -97.477 -84.7145 + 38 0.000487668 442 9 1 -91.5635 49.9963 65.15 + 38 35.1767 455 1 1 -88.8502 -30.4097 -174.712 + 38 186.287 749 1 0 -89.3484 -30.1441 -175.85 + 38 38.0256 750 1 0 -89.4777 -30.05 -176.113 + 38 104.338 614 1 0 -96.9632 -57.1846 -176.25 + 38 154.772 615 1 0 -97.1641 -57.05 -176.145 + 38 120.81 616 1 0 -97.4678 -56.8498 -176.056 + 38 116.115 527 1 0 -87.3916 -74.5471 -176.25 + 38 111.711 459 10 1 -88.25 -30.3355 95.5433 +Number of digits in this event: 28 Using G4ParticleGun... -Particle energy: 7.11834 LIN +Particle energy: 3.53487 LIN Particle: proton Event: 39 -Number of tracker hits in this event: 20 - 39 129.253 1286 9 1 77.4402 -96.6776 65.55 - 39 114.727 417 9 0 77.4404 -96.6769 64.15 - 39 155.609 1286 8 1 77.4448 -96.6589 35.55 - 39 102.868 417 8 0 77.4442 -96.6577 34.15 - 39 129.342 1286 7 1 77.4342 -96.635 5.55 - 39 123.767 417 7 0 77.4349 -96.6326 4.15 - 39 94.1791 1286 6 1 77.4458 -96.5828 -24.45 - 39 160.055 417 6 0 77.4457 -96.5805 -25.85 - 39 110.83 1286 5 1 77.4451 -96.5304 -54.45 - 39 99.2347 418 5 0 77.4456 -96.5283 -55.85 - 39 92.331 1287 4 1 77.4567 -96.4848 -84.45 - 39 111.448 418 4 0 77.4567 -96.4826 -85.85 - 39 102.532 1287 3 1 77.4622 -96.4348 -114.45 - 39 116.079 418 3 0 77.4628 -96.4323 -115.85 - 39 116.921 1287 2 1 77.4727 -96.3792 -144.45 - 39 120.65 418 2 0 77.4743 -96.3765 -145.85 - 39 107.035 1287 1 1 77.5079 -96.3228 -174.45 - 39 107.436 419 1 0 77.509 -96.3203 -175.85 - 39 113.876 1287 0 1 77.5338 -96.2739 -204.45 - 39 126.116 419 0 0 77.5345 -96.2718 -205.85 -Number of digits in this event: 8 +Number of tracker hits in this event: 43 + 39 666.834 788 11 1 -22.305 -31.3041 125.55 + 39 467.392 787 11 1 -22.45 -31.2582 125.282 + 39 377.52 786 11 1 -22.65 -31.2654 125.465 + 39 23.8746 785 11 1 -22.9221 -31.4243 125.55 + 39 140.02 746 11 0 -22.2942 -30.8319 124.15 + 39 123.899 790 10 1 -22.0011 -18.1798 95.55 + 39 80.1513 812 10 0 -21.9853 -17.5618 94.15 + 39 71.6719 813 10 0 -21.9824 -17.45 93.8965 + 39 104.86 792 9 1 -21.6497 -4.93404 65.55 + 39 204.526 878 9 0 -21.6317 -4.31252 64.15 + 39 118.674 879 9 0 -21.6298 -4.25 64.0092 + 39 110.439 793 8 1 -21.2631 8.39301 35.55 + 39 20.0671 944 8 0 -21.243 9.01472 34.15 + 39 96.335 945 8 0 -21.2419 9.05 34.0706 + 39 150.458 796 7 1 -20.842 21.7075 5.55 + 39 102.97 1011 7 0 -20.821 22.3252 4.15 + 39 35.6258 1012 7 0 -20.8168 22.45 3.86722 + 39 112.922 798 6 1 -20.3709 34.9185 -24.45 + 39 95.803 1077 6 0 -20.3495 35.5368 -25.85 + 39 41.5917 1078 6 0 -20.3456 35.65 -26.1064 + 39 134.221 800 5 1 -19.9057 48.1626 -54.45 + 39 48.8132 1143 5 0 -19.8771 48.7838 -55.85 + 39 311.883 1144 5 0 -19.8741 48.85 -55.9991 + 39 107.319 803 4 1 -19.3072 61.4897 -84.45 + 39 99.0837 1210 4 0 -19.2771 62.1116 -85.85 + 39 30.0061 1211 4 0 -19.2704 62.25 -86.1614 + 39 150.778 806 3 1 -18.6586 74.8289 -114.45 + 39 5.29814 807 3 1 -18.65 75.004 -114.844 + 39 196.201 1277 3 0 -18.628 75.4504 -115.85 + 39 98.9489 810 2 1 -18.0065 88.1533 -144.45 + 39 58.6132 1343 2 0 -17.9717 88.7742 -145.85 + 39 116.074 1344 2 0 -17.9674 88.85 -146.021 + 39 178.284 813 1 1 -17.2646 101.471 -174.45 + 39 35.3565 1409 1 0 -17.2339 102.094 -175.85 + 39 101.423 1410 1 0 -17.2312 102.15 -175.975 + 39 173.334 817 0 1 -16.6014 114.81 -204.45 + 39 152.96 1476 0 0 -16.57 115.433 -205.85 + 39 54.9705 1477 0 0 -16.564 115.55 -206.113 + 39 147.233 286 13 1 -122.805 -49.8837 185.15 + 39 37.8978 276 13 1 -124.854 171.097 185.15 + 39 48.2086 275 13 1 -124.95 171.072 185.446 + 39 4.59716 1661 3 0 -107.367 152.384 -116.25 + 39 235.914 1660 3 0 -107.437 152.35 -116.1 +Number of digits in this event: 19 Using G4ParticleGun... -Particle energy: 4.65531 LIN +Particle energy: 7.94398 LIN Particle: proton Event: 40 -Number of tracker hits in this event: 33 - 40 100.319 834 11 1 -13.2342 -39.8951 125.55 - 40 107.884 700 11 0 -13.236 -39.8943 124.15 - 40 94.1756 833 10 1 -13.2701 -39.87 95.55 - 40 180.719 700 10 0 -13.2724 -39.8688 94.15 - 40 109.451 833 9 1 -13.3128 -39.8397 65.55 - 40 109.056 701 9 0 -13.3149 -39.8407 64.15 - 40 127.551 833 8 1 -13.3588 -39.8648 35.55 - 40 134.048 700 8 0 -13.3602 -39.8667 34.15 - 40 304.587 833 7 1 -13.3904 -39.9032 5.55 - 40 124.909 700 7 0 -13.3917 -39.9052 4.15 - 40 97.2567 833 6 1 -13.4197 -39.9485 -24.45 - 40 109.597 700 6 0 -13.4201 -39.9494 -25.85 - 40 142.417 833 5 1 -13.4214 -39.9696 -54.45 - 40 98.2074 700 5 0 -13.4218 -39.9704 -55.85 - 40 139.58 833 4 1 -13.4297 -39.9854 -84.45 - 40 101.641 700 4 0 -13.4258 -39.9874 -85.85 - 40 108.324 833 3 1 -13.3494 -40.0356 -114.45 - 40 147.375 700 3 0 -13.3435 -40.0367 -115.85 - 40 95.062 834 2 1 -13.2223 -40.0606 -144.45 - 40 120.265 699 2 0 -13.2155 -40.062 -145.85 - 40 111.336 834 1 1 -13.0845 -40.0884 -174.45 - 40 117.641 699 1 0 -13.079 -40.0907 -175.85 - 40 133.606 835 0 1 -12.964 -40.1418 -204.45 - 40 94.6846 699 0 0 -12.9599 -40.1436 -205.85 - 40 3.35332 834 0 1 -13.05 -40.1782 -204.839 - 40 21.29 698 0 0 -14.2271 -40.43 -205.85 - 40 152.902 697 0 0 -14.2986 -40.45 -205.923 - 40 109.445 696 0 0 -14.6491 -40.6501 -206.131 - 40 210.706 695 0 0 -14.828 -40.85 -206.049 - 40 121.811 694 0 0 -15.2266 -41.05 -205.987 - 40 45.2282 693 0 0 -15.5152 -41.25 -205.926 - 40 10.2543 815 0 1 -17.0329 -41.2987 -204.85 - 40 370.042 814 0 1 -17.0501 -41.3013 -204.832 -Number of digits in this event: 15 -Using G4ParticleGun... -Particle energy: 8.7546 LIN +Number of tracker hits in this event: 118 + 40 99.3334 566 11 1 -66.8324 -20.1629 125.55 + 40 202.395 799 11 0 -66.8324 -20.1635 124.15 + 40 130.77 566 10 1 -66.8276 -20.1765 95.55 + 40 130.506 799 10 0 -66.8266 -20.1781 94.15 + 40 115.377 566 9 1 -66.8104 -20.2052 65.55 + 40 111.323 799 9 0 -66.8101 -20.206 64.15 + 40 120.084 566 8 1 -66.802 -20.22 35.55 + 40 96.6343 799 8 0 -66.8021 -20.2215 34.15 + 40 229.448 566 7 1 -66.8035 -20.2528 5.55 + 40 122.784 798 7 0 -66.8037 -20.2535 4.15 + 40 105.733 566 6 1 -66.8079 -20.2621 -24.45 + 40 120.419 798 6 0 -66.8087 -20.2615 -25.85 + 40 211.046 566 5 1 -66.8261 -20.2467 -54.45 + 40 197.166 799 5 0 -66.8279 -20.246 -55.85 + 40 117.677 565 4 1 -66.8656 -20.2362 -84.45 + 40 125.223 799 4 0 -66.8673 -20.2352 -85.85 + 40 239.466 565 3 1 -66.8989 -20.2137 -114.45 + 40 229.561 799 3 0 -66.9007 -20.2124 -115.85 + 40 105.642 565 2 1 -66.936 -20.1865 -144.45 + 40 127.442 799 2 0 -66.9382 -20.1862 -145.85 + 40 126.968 565 1 1 -66.9788 -20.1794 -174.45 + 40 326.257 799 1 0 -66.9809 -20.1791 -175.85 + 40 136.77 565 0 1 -67.0239 -20.1704 -204.45 + 40 199.553 799 0 0 -67.0272 -20.17 -205.85 + 40 83.8521 768 0 0 -95.2328 -26.2621 -206.25 + 40 6.73808 743 1 0 -107.305 -31.3123 -176.25 + 40 20.947 1151 3 1 50.45 24.8877 -114.802 + 40 61.948 1150 3 1 50.25 24.97 -114.783 + 40 68.3212 1149 3 1 50.05 25.0306 -114.764 + 40 53.3484 1148 3 1 49.8497 25.0904 -114.763 + 40 56.0361 1147 3 1 49.65 25.1596 -114.735 + 40 70.8015 1146 3 1 49.4499 25.2733 -114.662 + 40 14.1643 1145 3 1 49.25 25.4205 -114.491 + 40 88.1632 1003 13 0 -143.94 20.7792 183.75 + 40 276.119 1002 13 0 -144.153 20.65 183.833 + 40 976.252 807 0 0 -71.6992 -18.5034 -206.25 + 40 1088.63 539 0 1 -72.0894 -18.3594 -204.85 + 40 1068.03 821 1 0 -79.8874 -15.8324 -176.25 + 40 997.33 498 1 1 -80.273 -15.7076 -174.85 + 40 1413.01 835 2 0 -87.9543 -13.0236 -146.25 + 40 1258.15 458 2 1 -88.3235 -12.8877 -144.85 + 40 1341 847 3 0 -95.8539 -10.5328 -116.25 + 40 1226.99 419 3 1 -96.2229 -10.4211 -114.85 + 40 1421.49 859 4 0 -104.372 -8.10642 -86.25 + 40 1427.12 376 4 1 -104.773 -7.9921 -84.85 + 40 1028.67 869 5 0 -111.628 -6.0663 -56.25 + 40 603.239 870 5 0 -111.686 -6.05 -56.0068 + 40 1624.9 340 5 1 -111.954 -5.9629 -54.85 + 40 1956.38 882 6 0 -119.11 -3.50463 -26.25 + 40 1847.15 303 6 1 -119.463 -3.40236 -24.85 + 40 246.249 302 6 1 -119.55 -3.37881 -24.5039 + 40 950.104 903 7 0 -124.954 0.828196 3.75 + 40 1726.53 904 7 0 -124.982 0.85 3.8962 + 40 3041.09 274 7 1 -125.23 1.05533 5.15 + 40 3640.16 963 8 0 -131.97 12.7752 33.75 + 40 4466.96 964 8 0 -132.007 12.85 33.9177 + 40 81.0143 830 0 0 -77.9821 -13.8729 -206.25 + 40 176.716 829 0 0 -77.8885 -14.05 -206.116 + 40 73.3406 828 0 0 -77.7858 -14.25 -205.964 + 40 188.131 515 0 1 -77.0329 -15.7655 -204.85 + 40 48.8607 516 0 1 -76.85 -16.1361 -204.57 + 40 43.0574 576 1 0 -67.0607 -64.7377 -176.25 + 40 63.8409 575 1 0 -67.038 -64.85 -176.185 + 40 58.0623 574 1 0 -66.9988 -65.0503 -176.072 + 40 146.632 573 1 0 -66.9584 -65.25 -175.958 + 40 235.274 567 1 1 -66.5715 -67.2643 -174.85 + 40 21.3796 568 1 1 -66.45 -67.8927 -174.49 + 40 26.4566 238 2 0 -67.359 -132.485 -146.25 + 40 48.6041 237 2 0 -67.3593 -132.55 -146.222 + 40 75.2473 236 2 0 -67.3587 -132.75 -146.139 + 40 57.3483 235 2 0 -67.3579 -132.95 -146.056 + 40 97.6123 234 2 0 -67.3562 -133.15 -145.972 + 40 32.6865 233 2 0 -67.3574 -133.35 -145.887 + 40 353.061 563 2 1 -67.3917 -135.737 -144.85 + 40 67.6567 81 3 0 -59.761 -163.795 -116.25 + 40 100.697 80 3 0 -59.7262 -163.95 -116.088 + 40 20.2009 79 3 0 -59.6913 -164.15 -115.892 + 40 189.173 602 3 1 -59.5328 -165.335 -114.85 + 40 68.6955 292 3 0 -80.0728 -121.557 -116.25 + 40 13.7981 293 3 0 -80.077 -121.55 -116.24 + 40 65.4423 430 3 0 -111.127 -94.083 -116.25 + 40 588.236 647 0 0 -139.938 -50.5972 -206.25 + 40 2352.38 646 0 0 -140.064 -50.65 -206.218 + 40 2655.18 645 0 0 -140.543 -50.85 -206.101 + 40 2862 644 0 0 -141.007 -51.05 -206.001 + 40 683.617 643 0 0 -141.488 -51.25 -205.877 + 40 97.8032 171 0 1 -145.942 -53.0112 -204.85 + 40 1445.31 170 0 1 -145.95 -53.0144 -204.848 + 40 1783.88 169 0 1 -146.15 -53.0957 -204.804 + 40 1870.77 168 0 1 -146.35 -53.1842 -204.758 + 40 2355.48 167 0 1 -146.55 -53.2862 -204.715 + 40 3351.56 166 0 1 -146.75 -53.386 -204.667 + 40 2980.4 165 0 1 -146.95 -53.4858 -204.63 + 40 19404 406 1 1 -98.7937 101.799 -174.81 + 40 35.5059 1016 2 0 -154.305 23.3865 -146.25 + 40 118.816 1017 2 0 -154.23 23.45 -146.128 + 40 36.0792 131 2 1 -153.765 24.5995 -144.85 + 40 180.996 132 2 1 -153.75 24.6677 -144.782 + 40 1.87204 800 6 1 -20.05 31.9877 -24.7339 + 40 2399.96 407 1 1 -98.75 101.823 -174.835 + 40 931.514 1411 1 0 -97.1549 102.465 -175.85 + 40 1500.08 408 1 1 -98.55 101.686 -174.697 + 40 1673.46 409 1 1 -98.35 101.583 -174.601 + 40 949.118 410 1 1 -98.15 101.474 -174.503 + 40 114.702 457 1 1 -88.4875 121.036 -174.477 + 40 160.277 937 0 1 7.45438 46.0457 -204.85 + 40 67.587 1377 8 0 -110.802 95.6326 34.0572 + 40 71.5031 135 1 1 -153.15 -170.78 -174.693 + 40 54.6086 134 1 1 -153.15 -171.064 -174.728 + 40 11.8438 42 1 0 -153.394 -171.721 -175.85 + 40 172.835 41 1 0 -153.407 -171.75 -175.888 + 40 231.281 40 1 0 -153.268 -171.95 -176.139 + 40 25.7142 39 1 0 -153.275 -172.15 -176.206 + 40 2.47657 590 0 0 -53.5544 -62.0421 -206.25 + 40 150.748 589 0 0 -53.5536 -62.05 -206.248 + 40 128.47 874 1 0 -53.2918 -5.23514 -176.25 + 40 233.349 873 1 0 -53.345 -5.25 -176.047 + 40 181.908 565 5 1 -66.8502 -20.2365 -54.485 +Number of digits in this event: 73 +Using G4ParticleGun... +Particle energy: 6.12452 LIN Particle: proton Event: 41 -Number of tracker hits in this event: 25 - 41 99.1721 756 11 1 -28.7329 26.6022 125.55 - 41 160.968 1032 11 0 -28.7323 26.6023 124.15 - 41 100.627 756 10 1 -28.7195 26.6028 95.55 - 41 144.956 1032 10 0 -28.719 26.6032 94.15 - 41 149.344 756 9 1 -28.7104 26.6147 65.55 - 41 99.6615 1032 9 0 -28.7102 26.6144 64.15 - 41 114.792 756 8 1 -28.708 26.6101 35.55 - 41 106.29 1032 8 0 -28.7077 26.6101 34.15 - 41 113.433 756 7 1 -28.7009 26.6119 5.55 - 41 109.768 1032 7 0 -28.7004 26.6136 4.15 - 41 106.305 756 6 1 -28.6933 26.6491 -24.45 - 41 97.3051 1033 6 0 -28.6935 26.6503 -25.85 - 41 105.41 756 5 1 -28.6925 26.6733 -54.45 - 41 120.799 1033 5 0 -28.6919 26.6745 -55.85 - 41 127.491 756 4 1 -28.6782 26.6988 -84.45 - 41 94.651 1033 4 0 -28.678 26.7003 -85.85 - 41 102.317 756 3 1 -28.6746 26.7336 -114.45 - 41 158.163 1033 3 0 -28.6744 26.7339 -115.85 - 41 306.412 756 2 1 -28.6701 26.741 -144.45 - 41 90.0531 1033 2 0 -28.6691 26.7413 -145.85 - 41 135.89 757 1 1 -28.6464 26.7467 -174.45 - 41 90.8958 1033 1 0 -28.6453 26.7458 -175.85 - 41 114.965 757 0 1 -28.6175 26.7251 -204.45 - 41 100.381 1033 0 0 -28.6161 26.7244 -205.85 - 41 125.163 755 2 1 -28.85 26.657 -144.527 -Number of digits in this event: 10 +Number of tracker hits in this event: 29 + 41 132.071 485 9 1 -82.8876 96.5016 65.55 + 41 148.936 1381 9 0 -82.8878 96.5011 64.15 + 41 121.624 485 8 1 -82.8879 96.4869 35.55 + 41 95.7603 1381 8 0 -82.8881 96.4861 34.15 + 41 163.023 485 7 1 -82.8954 96.4697 5.55 + 41 191.712 1381 7 0 -82.8965 96.4698 4.15 + 41 99.0753 485 6 1 -82.917 96.471 -24.45 + 41 120.913 1381 6 0 -82.9175 96.4703 -25.85 + 41 155.973 485 5 1 -82.9312 96.4473 -54.45 + 41 129.13 1381 5 0 -82.9327 96.4474 -55.85 + 41 151.169 485 4 1 -82.968 96.4498 -84.45 + 41 100.734 1381 4 0 -82.9698 96.4501 -85.85 + 41 186.877 485 3 1 -83.0054 96.4479 -114.45 + 41 93.9909 1381 3 0 -83.0066 96.4481 -115.85 + 41 102.592 485 2 1 -83.0321 96.451 -144.45 + 41 172.054 1381 2 0 -83.0342 96.4512 -145.85 + 41 113.326 484 1 1 -83.0784 96.4601 -174.45 + 41 148.903 1381 1 0 -83.0816 96.4595 -175.85 + 41 237.541 484 0 1 -83.1423 96.4502 -204.45 + 41 115.159 1381 0 0 -83.145 96.4498 -205.85 + 41 1.96146 1380 2 0 -83.1206 96.35 -146.244 + 41 77.3612 1403 2 0 -124.691 100.897 -146.25 + 41 110.723 1404 2 0 -124.702 100.95 -146.191 + 41 257.303 1405 2 0 -124.757 101.15 -146.086 + 41 423.515 1385 4 0 -83.8065 97.215 -85.85 + 41 113.796 1426 10 0 -77.0705 105.451 93.75 + 41 128.853 521 10 1 -75.7961 106.61 95.15 + 41 209.553 1487 11 0 -81.4391 117.605 123.75 + 41 154.595 492 11 1 -81.5443 117.701 125.15 +Number of digits in this event: 19 Using G4ParticleGun... -Particle energy: 5.35328 LIN +Particle energy: 4.52835 LIN Particle: proton Event: 42 -Number of tracker hits in this event: 28 - 42 100.159 1104 9 1 40.9235 -124.952 65.55 - 42 109.524 275 9 0 40.9244 -124.953 64.15 - 42 92.2975 1104 8 1 40.9421 -124.954 35.55 - 42 189.755 275 8 0 40.9426 -124.954 34.15 - 42 135.96 1104 7 1 40.9533 -124.951 5.55 - 42 162.511 275 7 0 40.9547 -124.951 4.15 - 42 126.028 1104 6 1 40.9807 -124.957 -24.45 - 42 118.567 275 6 0 40.9819 -124.957 -25.85 - 42 107.411 1104 5 1 41.0089 -124.956 -54.45 - 42 99.9679 275 5 0 41.0105 -124.956 -55.85 - 42 184.027 1104 4 1 41.0402 -124.96 -84.45 - 42 210.559 275 4 0 41.0424 -124.961 -85.85 - 42 255.721 1105 3 1 41.0851 -124.97 -114.45 - 42 96.7322 275 3 0 41.087 -124.972 -115.85 - 42 161.734 1105 2 1 41.1243 -125.013 -144.45 - 42 98.2249 275 2 0 41.126 -125.013 -145.85 - 42 206.924 1105 1 1 41.1605 -125.025 -174.45 - 42 128.714 275 1 0 41.1626 -125.025 -175.85 - 42 113.041 1105 0 1 41.2088 -125.037 -204.45 - 42 124.479 275 0 0 41.2136 -125.037 -205.85 - 42 98.1147 276 1 0 41.0235 -124.819 -175.85 - 42 14.8487 277 1 0 40.9824 -124.75 -176.18 - 42 46.3317 1084 0 1 37.0241 -119.349 -204.45 - 42 71.6174 1085 0 1 37.05 -119.334 -204.598 - 42 133.336 304 0 0 37.3226 -119.204 -205.85 - 42 8.49558 118 4 0 66.8236 -156.49 -86.25 - 42 145.86 439 4 0 93.071 -92.3467 -86.25 - 42 14.837 438 4 0 93.0493 -92.35 -86.2407 +Number of tracker hits in this event: 40 + 42 114.826 510 11 1 -78.0211 2.38527 125.55 + 42 107.916 911 11 0 -78.0203 2.3834 124.15 + 42 119.328 510 10 1 -77.9972 2.33673 95.55 + 42 169.909 911 10 0 -77.9946 2.33557 94.15 + 42 113.358 510 9 1 -77.9434 2.31223 65.55 + 42 114.946 911 9 0 -77.9422 2.3112 64.15 + 42 109.807 510 8 1 -77.9169 2.28966 35.55 + 42 189.048 911 8 0 -77.9158 2.2903 34.15 + 42 196.089 510 7 1 -77.9011 2.30481 5.55 + 42 133.534 911 7 0 -77.8982 2.30547 4.15 + 42 145.22 511 6 1 -77.8344 2.32189 -24.45 + 42 144.28 911 6 0 -77.8323 2.32255 -25.85 + 42 110.315 511 5 1 -77.7883 2.33074 -54.45 + 42 105.039 911 5 0 -77.7861 2.33179 -55.85 + 42 153.852 511 4 1 -77.7345 2.35443 -84.45 + 42 120.327 911 4 0 -77.732 2.35638 -85.85 + 42 110.838 511 3 1 -77.6815 2.39489 -114.45 + 42 104.847 911 3 0 -77.68 2.39449 -115.85 + 42 126.577 512 2 1 -77.6478 2.38782 -144.45 + 42 107.433 911 2 0 -77.6467 2.38641 -145.85 + 42 115.81 512 1 1 -77.6216 2.36042 -174.45 + 42 95.011 911 1 0 -77.6183 2.36154 -175.85 + 42 205.867 512 0 1 -77.5482 2.38692 -204.45 + 42 118.24 911 0 0 -77.5463 2.38882 -205.85 + 42 156.692 511 0 1 -77.65 2.28493 -204.639 + 42 50.2533 905 0 0 -78.2612 1.17376 -205.85 + 42 111.32 904 0 0 -78.3445 1.05 -205.973 + 42 61.2227 903 0 0 -78.4589 0.84888 -206.085 + 42 66.9297 902 0 0 -78.531 0.65 -206.11 + 42 68.8589 901 0 0 -78.5799 0.45 -206.143 + 42 54.5192 900 0 0 -78.5599 0.25 -206.112 + 42 66.5561 899 0 0 -78.5558 -0.0502244 -206.149 + 42 119.901 898 0 0 -78.5352 -0.25 -206.196 + 42 49.9927 897 0 0 -78.4884 -0.45 -206.241 + 42 175.569 896 0 0 -78.4415 -0.650112 -206.24 + 42 61.3222 895 0 0 -78.4092 -0.85 -206.185 + 42 80.8286 894 0 0 -78.4513 -1.05032 -206.11 + 42 111.743 893 0 0 -78.4294 -1.25 -206.104 + 42 78.7655 910 10 0 -78.0423 2.25 93.9847 + 42 228.655 909 10 0 -78.0973 2.04982 94.0362 Number of digits in this event: 14 Using G4ParticleGun... -Particle energy: 1.78909 LIN +Particle energy: 6.51579 LIN Particle: proton Event: 43 -Number of tracker hits in this event: 24 - 43 192.083 466 9 1 -86.6626 93.4749 65.55 - 43 123.802 1366 9 0 -86.6626 93.4736 64.15 - 43 199.291 466 8 1 -86.6609 93.4524 35.55 - 43 105.434 1366 8 0 -86.6598 93.4532 34.15 - 43 111.421 467 7 1 -86.6322 93.4726 5.55 - 43 130.012 1366 7 0 -86.6279 93.476 4.15 - 43 514.033 467 6 1 -86.5437 93.543 -24.45 - 43 167.878 1367 6 0 -86.5394 93.5501 -25.85 - 43 114.311 468 5 1 -86.4491 93.6905 -54.45 - 43 158.19 1367 5 0 -86.4463 93.698 -55.85 - 43 136.365 468 4 1 -86.3944 93.8692 -84.45 - 43 167.984 1368 4 0 -86.3952 93.8746 -85.85 - 43 128.408 468 3 1 -86.4112 93.9833 -114.45 - 43 124.55 1369 3 0 -86.4114 93.986 -115.85 - 43 103.739 468 2 1 -86.4203 94.0324 -144.45 - 43 112.625 1369 2 0 -86.4185 94.0325 -145.85 - 43 125.802 468 1 1 -86.3815 94.026 -174.45 - 43 99.7654 1369 1 0 -86.3786 94.0271 -175.85 - 43 114.345 468 0 1 -86.3119 94.0413 -204.45 - 43 100.52 1369 0 0 -86.3114 94.0406 -205.85 - 43 119.352 1370 6 0 -86.7664 94.1501 -25.85 - 43 107.778 504 5 1 -79.1809 95.772 -54.4502 - 43 98.5962 1380 5 0 -79.3107 96.2976 -55.85 - 43 51.0325 1381 5 0 -79.3398 96.35 -56.0827 -Number of digits in this event: 13 +Number of tracker hits in this event: 28 + 43 128.408 1273 11 1 74.699 -6.90593 125.55 + 43 144.681 865 11 0 74.6995 -6.9051 124.15 + 43 122.078 1273 10 1 74.7097 -6.88641 95.55 + 43 148.909 865 10 0 74.7105 -6.88417 94.15 + 43 168.457 1273 9 1 74.7223 -6.83663 65.55 + 43 130.344 866 9 0 74.7241 -6.83476 64.15 + 43 143.973 1273 8 1 74.7648 -6.8014 35.55 + 43 97.4193 866 8 0 74.7681 -6.80003 34.15 + 43 104.216 1273 7 1 74.838 -6.77031 5.55 + 43 107.197 866 7 0 74.8412 -6.76915 4.15 + 43 111.179 1274 6 1 74.9084 -6.74404 -24.45 + 43 125.434 866 6 0 74.9124 -6.74304 -25.85 + 43 173.747 1274 5 1 74.996 -6.72097 -54.45 + 43 104.641 866 5 0 74.9992 -6.72199 -55.85 + 43 94.6162 1275 4 1 75.068 -6.74145 -84.45 + 43 147.468 866 4 0 75.0719 -6.74233 -85.85 + 43 138.405 1275 3 1 75.1449 -6.75988 -114.45 + 43 112.563 866 3 0 75.1481 -6.76055 -115.85 + 43 103.44 1275 2 1 75.2134 -6.77344 -144.45 + 43 100.627 866 2 0 75.2158 -6.77329 -145.85 + 43 155.954 1276 1 1 75.2607 -6.77778 -174.45 + 43 131.826 866 1 0 75.2629 -6.77803 -175.85 + 43 112.934 1276 0 1 75.3067 -6.78219 -204.45 + 43 244.467 866 0 0 75.3097 -6.78306 -205.85 + 43 95.2304 784 0 0 -17.3349 -23.2046 -206.25 + 43 259.14 785 0 0 -17.3153 -23.05 -205.87 + 43 34.7563 738 7 0 161.5 -32.411 3.97445 + 43 38.165 725 12 0 -8.56606 -34.9846 153.831 +Number of digits in this event: 19 Using G4ParticleGun... -Particle energy: 2.29533 LIN +Particle energy: 2.65235 LIN Particle: proton Event: 44 -Number of tracker hits in this event: 26 - 44 177.384 1303 10 1 80.7448 -37.5568 95.55 - 44 121.133 712 10 0 80.7424 -37.5557 94.15 - 44 99.042 1303 9 1 80.6852 -37.5357 65.55 - 44 102.913 712 9 0 80.6812 -37.5368 64.15 - 44 237.636 1302 8 1 80.5994 -37.5625 35.55 - 44 279.704 712 8 0 80.595 -37.565 34.15 - 44 101.092 1302 7 1 80.5055 -37.6067 5.55 - 44 217.928 712 7 0 80.4998 -37.6119 4.15 - 44 100.689 1301 6 1 80.3827 -37.722 -24.45 - 44 228.847 711 6 0 80.3754 -37.731 -25.85 - 44 125.45 1300 5 1 80.2146 -37.9122 -54.45 - 44 104.254 710 5 0 80.203 -37.9145 -55.85 - 44 112.828 1299 4 1 79.9541 -37.9639 -84.45 - 44 137.704 710 4 0 79.9442 -37.9659 -85.85 - 44 92.4809 1298 3 1 79.7374 -38.0076 -114.45 - 44 118.297 710 3 0 79.7291 -38.0107 -115.85 - 44 144.151 1297 2 1 79.5589 -38.077 -144.45 - 44 139.074 709 2 0 79.5499 -38.0802 -145.85 - 44 108.384 1296 1 1 79.3677 -38.1381 -174.45 - 44 191.202 709 1 0 79.3606 -38.1417 -175.85 - 44 220.635 1295 0 1 79.2261 -38.2148 -204.45 - 44 112.306 709 0 0 79.2182 -38.2179 -205.85 - 44 166.887 711 7 0 80.4473 -37.65 3.79149 - 44 37.431 615 8 0 77.9721 -57.0212 33.7501 - 44 105.835 614 8 0 78.0082 -57.05 33.7821 - 44 94.1907 1293 8 1 78.7876 -38.4122 35.15 -Number of digits in this event: 14 +Number of tracker hits in this event: 23 + 44 141.334 1366 10 1 93.3605 44.629 95.55 + 44 122.238 1122 10 0 93.361 44.6304 94.15 + 44 250.677 1366 9 1 93.3727 44.6563 65.55 + 44 110.13 1123 9 0 93.3723 44.6564 64.15 + 44 97.2143 1366 8 1 93.361 44.6645 35.55 + 44 110.706 1123 8 0 93.3582 44.6664 34.15 + 44 91.1587 1365 7 1 93.3176 44.7127 5.55 + 44 538.533 1123 7 0 93.3169 44.7155 4.15 + 44 213.999 1365 6 1 93.3055 44.767 -24.45 + 44 104.344 1123 6 0 93.3031 44.7687 -25.85 + 44 161.804 1365 5 1 93.244 44.8023 -54.45 + 44 111.016 1123 5 0 93.2423 44.805 -55.85 + 44 119.367 1365 4 1 93.205 44.8485 -84.45 + 44 94.8999 1123 4 0 93.2032 44.8493 -85.85 + 44 214.504 1365 3 1 93.1671 44.8688 -114.45 + 44 233.678 1124 3 0 93.1659 44.8678 -115.85 + 44 155.08 1364 2 1 93.1355 44.8491 -144.45 + 44 113.457 1123 2 0 93.1357 44.8471 -145.85 + 44 112.021 1364 1 1 93.1322 44.8003 -174.45 + 44 114.347 1123 1 0 93.132 44.7949 -175.85 + 44 169.135 1364 0 1 93.0974 44.6776 -204.45 + 44 118.665 1123 0 0 93.0988 44.6726 -205.85 + 44 24.5785 1123 3 0 93.2356 44.8499 -116.224 +Number of digits in this event: 11 Using G4ParticleGun... -Particle energy: 1.68159 LIN +Particle energy: 2.252 LIN Particle: proton Event: 45 -Number of tracker hits in this event: 21 - 45 115.342 1102 9 1 40.6351 113.257 65.55 - 45 113.706 1465 9 0 40.6292 113.258 64.15 - 45 249.673 1102 8 1 40.5123 113.286 35.55 - 45 107.432 1465 8 0 40.5041 113.291 34.15 - 45 119.831 1101 7 1 40.3347 113.393 5.55 - 45 127.546 1466 7 0 40.3251 113.403 4.15 - 45 127.502 1100 6 1 40.1347 113.602 -24.45 - 45 115.891 1467 6 0 40.1271 113.61 -25.85 - 45 116.931 1099 5 1 39.9756 113.776 -54.45 - 45 115.509 1468 5 0 39.9721 113.783 -55.85 - 45 128.721 1099 4 1 39.9108 113.932 -84.45 - 45 100.058 1468 4 0 39.9066 113.941 -85.85 - 45 122.064 1098 3 1 39.8259 114.114 -114.45 - 45 117.657 1469 3 0 39.8207 114.125 -115.85 - 45 186.986 1098 2 1 39.7026 114.373 -144.45 - 45 126.715 1471 2 0 39.6944 114.383 -145.85 - 45 144.097 1097 1 1 39.5262 114.581 -174.45 - 45 118.653 1472 1 0 39.5182 114.59 -175.85 - 45 131.15 1096 0 1 39.3548 114.78 -204.45 - 45 120.914 1473 0 0 39.3453 114.791 -205.85 - 45 217.707 1097 2 1 39.65 114.344 -144.738 -Number of digits in this event: 12 -Using G4ParticleGun... -Particle energy: 2.74351 LIN +Number of tracker hits in this event: 81 + 45 137.987 739 11 1 -32.1963 -45.212 125.55 + 45 117.119 674 11 0 -32.199 -45.2116 124.15 + 45 121.337 738 10 1 -32.2534 -45.2013 95.55 + 45 227.432 674 10 0 -32.2554 -45.1999 94.15 + 45 119.341 738 9 1 -32.2969 -45.1853 65.55 + 45 121.56 674 9 0 -32.2971 -45.1866 64.15 + 45 125.59 738 8 1 -32.3072 -45.2243 35.55 + 45 119.921 674 8 0 -32.3092 -45.23 34.15 + 45 104.946 738 7 1 -32.3315 -45.3578 5.55 + 45 107.242 673 7 0 -32.3328 -45.3668 4.15 + 45 497.319 738 6 1 -32.3508 -45.5381 -24.45 + 45 145.733 672 6 0 -32.352 -45.5478 -25.85 + 45 119.242 738 5 1 -32.3878 -45.7528 -54.45 + 45 103.894 671 5 0 -32.389 -45.7613 -55.85 + 45 141.617 738 4 1 -32.3978 -45.9277 -84.45 + 45 144.816 670 4 0 -32.4033 -45.9344 -85.85 + 45 148.921 737 3 1 -32.5101 -46.0728 -114.45 + 45 125.94 669 3 0 -32.5181 -46.0781 -115.85 + 45 119.059 736 2 1 -32.6672 -46.1733 -144.45 + 45 132.976 669 2 0 -32.6735 -46.176 -145.85 + 45 224.162 736 1 1 -32.8163 -46.2298 -174.45 + 45 133.662 669 1 0 -32.8264 -46.2369 -175.85 + 45 73.2076 735 0 1 -33.0482 -46.4038 -204.45 + 45 74.8483 734 0 1 -33.05 -46.4048 -204.628 + 45 126.276 668 0 0 -33.0624 -46.4111 -205.85 + 45 59.0931 803 8 0 170.3 -19.3319 33.75 + 45 99.3344 955 9 0 84.8177 11.05 63.9261 + 45 36.4043 804 8 0 170.47 -19.2498 33.838 + 45 313.461 726 0 0 -89.009 -34.8153 -206.135 + 45 166.396 624 0 0 -30.2526 -55.1436 -206.25 + 45 73.5714 623 0 0 -30.1966 -55.25 -205.946 + 45 275.919 750 0 1 -29.9867 -55.6433 -204.85 + 45 151.041 558 1 0 -21.2054 -68.3383 -176.25 + 45 115.934 557 1 0 -21.1278 -68.45 -175.999 + 45 262.682 796 1 1 -20.7635 -68.9463 -174.85 + 45 30.3151 797 1 1 -20.65 -69.1004 -174.492 + 45 153.49 499 2 0 -13.2768 -80.1562 -146.25 + 45 94.7816 498 2 0 -13.2142 -80.25 -146.01 + 45 118.116 835 2 1 -12.9061 -80.6933 -144.85 + 45 196.677 836 2 1 -12.85 -80.7732 -144.64 + 45 175.716 439 3 0 -3.46255 -92.2415 -116.25 + 45 80.5701 438 3 0 -3.37348 -92.35 -115.982 + 45 365.317 885 3 1 -2.99907 -92.8189 -114.85 + 45 161.909 363 4 0 4.10332 -107.436 -86.25 + 45 129.355 362 4 0 4.15809 -107.55 -86.0278 + 45 5.51908 921 4 1 4.44808 -108.145 -84.85 + 45 353.111 922 4 1 4.45 -108.149 -84.8421 + 45 116.989 288 5 0 14.9384 -122.465 -56.25 + 45 326.659 287 5 0 15.0009 -122.55 -56.0816 + 45 376.883 977 5 1 15.4847 -123.169 -54.85 + 45 228.205 214 6 0 21.612 -137.222 -26.25 + 45 104.452 213 6 0 21.667 -137.35 -25.9886 + 45 370.948 1009 6 1 21.9155 -137.921 -24.85 + 45 82.2863 59 7 0 22.0325 -168.28 3.75 + 45 291.718 58 7 0 22.0324 -168.35 3.81512 + 45 230.598 57 7 0 22.0318 -168.55 3.99603 + 45 497.068 1010 7 1 22.0553 -169.816 5.15 + 45 112.211 406 0 0 -32.396 -98.9245 -206.25 + 45 114.756 405 0 0 -32.3948 -98.95 -206.235 + 45 136.236 404 0 0 -32.3845 -99.15 -206.119 + 45 134.568 403 0 0 -32.3728 -99.35 -206.002 + 45 38.8168 402 0 0 -32.3626 -99.55 -205.885 + 45 381.102 738 0 1 -32.2788 -101.299 -204.85 + 45 52.837 739 0 1 -32.25 -101.9 -204.495 + 45 67.7443 125 1 0 -26.8499 -155.056 -176.25 + 45 155.392 124 1 0 -26.8403 -155.15 -176.2 + 45 116.538 123 1 0 -26.82 -155.35 -176.095 + 45 118.912 122 1 0 -26.8004 -155.55 -175.989 + 45 73.5279 121 1 0 -26.7857 -155.75 -175.883 + 45 459.759 766 1 1 -26.6818 -157.664 -174.85 + 45 89.8485 767 1 1 -26.65 -158.251 -174.533 + 45 288.341 765 1 1 -26.9556 -156.94 -174.85 + 45 73.2127 739 6 1 -32.1394 -45.4661 -24.45 + 45 138.35 737 6 1 -32.45 -44.9505 -24.7957 + 45 190.625 738 11 1 -32.4021 -45.51 125.55 + 45 11.8443 675 11 0 -32.0141 -44.8694 124.15 + 45 125.824 676 11 0 -31.999 -44.85 124.107 + 45 13.8852 677 11 0 -32.0681 -44.65 123.777 + 45 3.53407 1461 11 0 -45.7988 112.536 123.75 + 45 145.529 1462 11 0 -45.7971 112.55 123.754 + 45 162.726 1303 11 0 -47.8808 80.7482 123.75 +Number of digits in this event: 49 +Using G4ParticleGun... +Particle energy: 7.36691 LIN Particle: proton Event: 46 -Number of tracker hits in this event: 19 - 46 150.721 450 9 1 -89.9785 92.9828 65.55 - 46 137.299 1364 9 0 -89.9811 92.9809 64.15 - 46 106.053 450 8 1 -90.0305 92.9512 35.55 - 46 131.08 1364 8 0 -90.0312 92.9518 34.15 - 46 108.754 450 3 1 -89.9936 92.7794 -114.45 - 46 108.247 1363 3 0 -89.9905 92.777 -115.85 - 46 110.054 450 2 1 -89.9233 92.729 -144.45 - 46 162.96 1362 2 0 -89.9203 92.7256 -145.85 - 46 138.989 450 1 1 -89.8648 92.664 -174.45 - 46 125.302 1362 1 0 -89.86 92.6615 -175.85 - 46 112.724 451 0 1 -89.7526 92.5964 -204.45 - 46 145.11 1362 0 0 -89.7472 92.592 -205.85 - 46 214.191 398 0 1 -100.443 81.0615 -204.85 - 46 24.2789 495 9 0 76.7109 -80.9424 63.75 - 46 62.0461 496 9 0 76.7148 -80.85 63.8022 - 46 64.033 497 9 0 76.7661 -80.65 63.9778 - 46 21.4618 1284 9 1 77.0395 -80.1659 65.15 - 46 94.549 1285 9 1 77.05 -80.151 65.192 - 46 73.7772 643 3 1 -51.4321 -21.7273 -114.85 -Number of digits in this event: 11 +Number of tracker hits in this event: 24 + 46 138.308 984 11 1 16.9271 -16.1268 125.55 + 46 135.198 819 11 0 16.9267 -16.1259 124.15 + 46 116.604 984 10 1 16.9223 -16.1075 95.55 + 46 160.762 819 10 0 16.9218 -16.1065 94.15 + 46 142.968 984 9 1 16.9112 -16.086 65.55 + 46 153.44 819 9 0 16.9113 -16.0858 64.15 + 46 200.338 984 8 1 16.9141 -16.0829 35.55 + 46 105.874 819 8 0 16.9147 -16.0832 34.15 + 46 121.365 984 7 1 16.9246 -16.0888 5.55 + 46 112.798 819 7 0 16.9255 -16.0897 4.15 + 46 109.968 984 6 1 16.9433 -16.1086 -24.45 + 46 134.178 819 6 0 16.9445 -16.1088 -25.85 + 46 117.147 984 5 1 16.967 -16.1126 -54.45 + 46 93.7181 819 5 0 16.9684 -16.1128 -55.85 + 46 148.251 984 4 1 16.9979 -16.1121 -84.45 + 46 84.7363 819 4 0 16.9987 -16.112 -85.85 + 46 300.505 984 3 1 17.0198 -16.113 -114.45 + 46 114.844 819 3 0 17.0214 -16.1132 -115.85 + 46 107.908 985 2 1 17.0539 -16.1217 -144.45 + 46 116.259 819 2 0 17.0544 -16.1206 -145.85 + 46 110.326 985 1 1 17.066 -16.1008 -174.45 + 46 99.0736 819 1 0 17.0676 -16.0994 -175.85 + 46 129.163 985 0 1 17.0989 -16.0741 -204.45 + 46 123.569 819 0 0 17.1002 -16.0727 -205.85 +Number of digits in this event: 13 Using G4ParticleGun... -Particle energy: 7.23964 LIN +Particle energy: 6.63418 LIN Particle: proton Event: 47 -Number of tracker hits in this event: 25 - 47 111.548 838 11 1 -12.2877 26.8341 125.55 - 47 112.061 1033 11 0 -12.2883 26.8343 124.15 - 47 93.865 838 10 1 -12.2991 26.8366 95.55 - 47 328.428 1033 10 0 -12.2996 26.838 94.15 - 47 98.5451 838 9 1 -12.3119 26.8676 65.55 - 47 247.94 1034 9 0 -12.3134 26.8685 64.15 - 47 148.446 838 8 1 -12.3404 26.886 35.55 - 47 270.632 1034 8 0 -12.3417 26.8853 34.15 - 47 92.5246 838 7 1 -12.3664 26.8659 5.55 - 47 131.185 1034 7 0 -12.3679 26.8649 4.15 - 47 138.911 838 6 1 -12.3972 26.8417 -24.45 - 47 129.45 1033 6 0 -12.3979 26.8407 -25.85 - 47 102.741 838 5 1 -12.412 26.8203 -54.45 - 47 128.732 1033 5 0 -12.4138 26.8195 -55.85 - 47 137.043 837 4 1 -12.4515 26.8032 -84.45 - 47 108.624 1033 4 0 -12.4539 26.8013 -85.85 - 47 265.463 837 3 1 -12.5011 26.7641 -114.45 - 47 112.686 1033 3 0 -12.5031 26.7615 -115.85 - 47 163.295 837 2 1 -12.5453 26.7074 -144.45 - 47 140.153 1033 2 0 -12.5486 26.7047 -145.85 - 47 215.777 837 1 1 -12.6183 26.6478 -174.45 - 47 164.773 1032 1 0 -12.6225 26.6438 -175.85 - 47 119.501 836 0 1 -12.7074 26.5628 -204.45 - 47 114.01 1032 0 0 -12.7121 26.558 -205.85 - 47 66.5406 1263 2 0 54.4877 72.7597 -146.25 -Number of digits in this event: 16 +Number of tracker hits in this event: 17 + 47 119.06 1648 7 0 5.85246 149.799 4.15 + 47 111.397 929 6 1 5.85392 149.796 -24.45 + 47 234.419 1648 6 0 5.85498 149.796 -25.85 + 47 197.181 929 5 1 5.87719 149.803 -54.45 + 47 111.893 1648 5 0 5.87832 149.803 -55.85 + 47 104.754 929 4 1 5.90245 149.808 -84.45 + 47 236.845 1648 4 0 5.90402 149.808 -85.85 + 47 93.7744 929 3 1 5.93812 149.808 -114.45 + 47 104.295 1648 3 0 5.93964 149.807 -115.85 + 47 201.674 929 2 1 5.96889 149.788 -144.45 + 47 117.286 1648 2 0 5.96917 149.788 -145.85 + 47 123.451 929 1 1 5.97172 149.787 -174.45 + 47 103.963 1648 1 0 5.97248 149.787 -175.85 + 47 142.137 929 0 1 5.98722 149.775 -204.45 + 47 124.604 1648 0 0 5.98706 149.774 -205.85 + 47 420.562 928 1 1 5.85 149.839 -174.518 + 47 156.793 1650 1 0 3.1251 150.227 -175.85 +Number of digits in this event: 10 Using G4ParticleGun... -Particle energy: 1.74578 LIN +Particle energy: 2.47991 LIN Particle: proton Event: 48 -Number of tracker hits in this event: 23 - 48 181.535 1261 10 1 72.3679 -81.1213 95.55 - 48 114.136 494 10 0 72.3673 -81.1209 94.15 - 48 142.163 1261 9 1 72.3642 -81.1056 65.55 - 48 175.058 494 9 0 72.3682 -81.1113 64.15 - 48 112.847 1261 8 1 72.447 -81.2301 35.55 - 48 105.856 494 8 0 72.4503 -81.2342 34.15 - 48 198.17 1262 7 1 72.5294 -81.3209 5.55 - 48 156.195 493 7 0 72.5312 -81.3256 4.15 - 48 124.851 1262 6 1 72.5671 -81.4325 -24.45 - 48 124.948 493 6 0 72.5711 -81.439 -25.85 - 48 191.699 1262 5 1 72.6459 -81.575 -54.45 - 48 101.701 492 5 0 72.6483 -81.5848 -55.85 - 48 129.879 1263 4 1 72.6596 -81.7674 -84.45 - 48 194.931 491 4 0 72.6617 -81.7764 -85.85 - 48 128.314 1263 3 1 72.7007 -81.9641 -114.45 - 48 114.206 490 3 0 72.7055 -81.9754 -115.85 - 48 100.272 1263 2 1 72.7918 -82.2056 -144.45 - 48 130.138 489 2 0 72.8056 -82.2255 -145.85 - 48 98.9665 1265 1 1 73.0859 -82.6261 -174.45 - 48 266.009 487 1 0 73.0983 -82.6446 -175.85 - 48 356.643 1266 0 1 73.3674 -83.019 -204.45 - 48 126.674 485 0 0 73.3744 -83.034 -205.85 - 48 104.932 1267 0 1 73.45 -83.1905 -204.468 -Number of digits in this event: 16 +Number of tracker hits in this event: 29 + 48 51.9765 241 9 1 -131.76 29.4082 65.3796 + 48 106.478 1046 9 0 -131.76 29.4082 64.15 + 48 156.34 241 8 1 -131.758 29.414 35.55 + 48 123.114 1046 8 0 -131.758 29.4129 34.15 + 48 115.848 241 7 1 -131.755 29.3824 5.55 + 48 104.005 1046 7 0 -131.755 29.3797 4.15 + 48 147.483 241 6 1 -131.764 29.3284 -24.45 + 48 102.534 1046 6 0 -131.765 29.324 -25.85 + 48 108.558 241 5 1 -131.784 29.2364 -54.45 + 48 130.162 1045 5 0 -131.785 29.232 -55.85 + 48 113.885 241 4 1 -131.794 29.1358 -84.45 + 48 98.7491 1045 4 0 -131.794 29.1307 -85.85 + 48 134.836 241 3 1 -131.798 29.0216 -114.45 + 48 159.06 1044 3 0 -131.796 29.0115 -115.85 + 48 100.49 241 2 1 -131.757 28.8044 -144.45 + 48 116.89 1043 2 0 -131.759 28.7924 -145.85 + 48 109.51 241 1 1 -131.803 28.5081 -174.45 + 48 125.273 1042 1 0 -131.806 28.4967 -175.85 + 48 158.83 241 0 1 -131.857 28.2674 -204.45 + 48 185.466 1041 0 0 -131.861 28.255 -205.85 + 48 74.2943 1084 0 0 -151.331 36.9131 -206.25 + 48 96.1406 1085 0 0 -151.53 37.05 -206.14 + 48 81.1653 1086 0 0 -151.721 37.25 -206.162 + 48 70.7554 1087 0 0 -151.887 37.45 -206.156 + 48 74.2198 1088 0 0 -151.944 37.6501 -206.092 + 48 109.111 139 0 1 -152.222 37.9841 -204.85 + 48 10.6028 138 0 1 -152.35 37.9385 -204.489 + 48 113.388 242 2 1 -131.75 28.8087 -144.476 + 48 180.84 242 8 1 -131.75 29.4213 35.4027 +Number of digits in this event: 11 Using G4ParticleGun... -Particle energy: 6.97478 LIN +Particle energy: 3.90385 LIN Particle: proton Event: 49 -Number of tracker hits in this event: 22 - 49 228.901 735 10 1 -33.0126 -89.519 95.55 - 49 132.27 452 10 0 -33.0128 -89.519 94.15 - 49 255.905 735 9 1 -33.02 -89.5204 65.55 - 49 109.149 452 9 0 -33.0187 -89.5198 64.15 - 49 138.608 735 8 1 -32.9933 -89.5097 35.55 - 49 207.761 452 8 0 -32.9934 -89.5102 34.15 - 49 124.054 735 7 1 -32.9955 -89.5237 5.55 - 49 127.235 452 7 0 -32.9951 -89.5238 4.15 - 49 90.0601 735 6 1 -32.9888 -89.5204 -24.45 - 49 102.716 452 6 0 -32.988 -89.5204 -25.85 - 49 126.927 735 5 1 -32.9694 -89.5158 -54.45 - 49 107.753 452 5 0 -32.9681 -89.5153 -55.85 - 49 176.24 735 4 1 -32.9432 -89.5046 -84.45 - 49 106.561 452 4 0 -32.9423 -89.5048 -85.85 - 49 109.936 735 3 1 -32.919 -89.5078 -114.45 - 49 98.6503 452 3 0 -32.9176 -89.5077 -115.85 - 49 104.983 735 2 1 -32.8833 -89.5018 -144.45 - 49 99.728 452 2 0 -32.8813 -89.5028 -145.85 - 49 117.432 736 1 1 -32.8417 -89.5239 -174.45 - 49 96.9492 452 1 0 -32.839 -89.5237 -175.85 - 49 118.794 736 0 1 -32.7841 -89.5212 -204.45 - 49 209.821 452 0 0 -32.7809 -89.5213 -205.85 -Number of digits in this event: 11 +Number of tracker hits in this event: 28 + 49 146.213 1115 11 1 43.2472 9.78793 125.55 + 49 145.698 948 11 0 43.2457 9.78891 124.15 + 49 95.3544 1115 10 1 43.2142 9.81341 95.55 + 49 120.146 948 10 0 43.2128 9.81533 94.15 + 49 101.581 1115 9 1 43.191 9.84449 65.55 + 49 233.005 948 9 0 43.189 9.84662 64.15 + 49 424.641 1115 8 1 43.1485 9.88589 35.55 + 49 97.2472 949 8 0 43.146 9.88807 34.15 + 49 119.136 1115 7 1 43.0947 9.9359 5.55 + 49 116.975 949 7 0 43.0932 9.939 4.15 + 49 138.492 1115 6 1 43.0589 10.0053 -24.45 + 49 122.959 949 6 0 43.0579 10.0081 -25.85 + 49 146.018 1114 5 1 43.0329 10.0679 -54.45 + 49 97.8908 950 5 0 43.0308 10.0706 -55.85 + 49 128.538 1114 4 1 42.9841 10.1292 -84.45 + 49 108.419 950 4 0 42.9829 10.1315 -85.85 + 49 104.732 1114 3 1 42.9684 10.1736 -114.45 + 49 118.994 950 3 0 42.9682 10.1743 -115.85 + 49 146.359 1114 2 1 42.9686 10.1914 -144.45 + 49 113.503 950 2 0 42.9684 10.192 -145.85 + 49 114.701 1114 1 1 42.9632 10.2074 -174.45 + 49 102.194 950 1 0 42.9624 10.2064 -175.85 + 49 101.315 1114 0 1 42.9426 10.1822 -204.45 + 49 136.93 950 0 0 42.9428 10.1784 -205.85 + 49 168.073 1114 8 1 43.05 10.1259 35.3043 + 49 173.066 1116 11 1 43.2502 9.85049 125.334 + 49 255.805 1117 11 1 43.45 10.0249 125.27 + 49 98.1933 947 11 0 43.9205 9.65 124.027 +Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 4.801 LIN +Particle energy: 5.45176 LIN Particle: proton Event: 50 -Number of tracker hits in this event: 23 - 50 113.185 1286 10 1 77.3967 76.7115 95.55 - 50 116.473 1283 10 0 77.3965 76.7106 94.15 - 50 135.733 1286 9 1 77.4011 76.6871 65.55 - 50 152.748 1283 9 0 77.4015 76.687 64.15 - 50 219.914 1286 8 1 77.409 76.6862 35.55 - 50 264.021 1283 8 0 77.4088 76.6855 34.15 - 50 99.8192 1286 7 1 77.4014 76.6718 5.55 - 50 131.293 1283 7 0 77.4009 76.6717 4.15 - 50 109.635 1286 6 1 77.3891 76.666 -24.45 - 50 305.19 1283 6 0 77.3887 76.6647 -25.85 - 50 120.45 1286 5 1 77.3835 76.6383 -54.45 - 50 121.236 1282 5 0 77.3827 76.6368 -55.85 - 50 85.3563 1286 4 1 77.3659 76.6028 -84.45 - 50 106.485 1282 4 0 77.365 76.5996 -85.85 - 50 193.121 1286 3 1 77.3482 76.5287 -114.45 - 50 116.087 1282 3 0 77.3479 76.5259 -115.85 - 50 104.316 1286 2 1 77.3404 76.4676 -144.45 - 50 148.046 1282 2 0 77.338 76.4639 -145.85 - 50 125.854 1286 1 1 77.286 76.3825 -174.45 - 50 166.797 1281 1 0 77.2819 76.38 -175.85 - 50 127.324 1285 0 1 77.1984 76.3256 -204.45 - 50 120.337 1281 0 0 77.1929 76.3235 -205.85 - 50 312.607 1282 1 0 77.3597 76.45 -176.077 -Number of digits in this event: 16 +Number of tracker hits in this event: 31 + 50 119.15 1262 10 1 72.5996 -74.42 95.55 + 50 92.1683 528 10 0 72.6006 -74.4191 94.15 + 50 220.214 1262 9 1 72.6198 -74.3988 65.55 + 50 102.844 528 9 0 72.6216 -74.3982 64.15 + 50 153.786 1263 8 1 72.6607 -74.387 35.55 + 50 135.635 528 8 0 72.662 -74.3869 34.15 + 50 166.126 1263 7 1 72.692 -74.3806 5.55 + 50 91.4478 528 7 0 72.6936 -74.3808 4.15 + 50 102.608 1263 6 1 72.7257 -74.3807 -24.45 + 50 120.056 528 6 0 72.7255 -74.3797 -25.85 + 50 190.916 1263 5 1 72.729 -74.3633 -54.45 + 50 129.632 528 5 0 72.7275 -74.3614 -55.85 + 50 115.315 1263 4 1 72.7054 -74.3192 -84.45 + 50 109.685 528 4 0 72.7041 -74.3163 -85.85 + 50 141.165 1263 3 1 72.6809 -74.2547 -114.45 + 50 183.632 529 3 0 72.6786 -74.2493 -115.85 + 50 91.8319 1262 2 1 72.6324 -74.1358 -144.45 + 50 104.14 529 2 0 72.6302 -74.1303 -145.85 + 50 295.509 1262 1 1 72.5854 -74.0176 -174.45 + 50 88.6889 530 1 0 72.5838 -74.0122 -175.85 + 50 132.95 1262 0 1 72.5507 -73.8999 -204.45 + 50 120.386 530 0 0 72.5481 -73.8953 -205.85 + 50 71.0513 532 1 0 72.6536 -73.5006 -175.85 + 50 76.1261 533 1 0 72.6831 -73.4496 -175.965 + 50 51.9611 534 1 0 72.6386 -73.25 -176.144 + 50 26.3283 565 1 0 60.1133 -67.0285 -176.25 + 50 80.0455 564 1 0 60.1738 -67.05 -176.226 + 50 1.70014 258 1 0 66.3299 -128.362 -176.25 + 50 11.0405 633 1 0 -35.7646 -53.2625 -176.25 + 50 203.357 528 3 0 72.6628 -74.25 -116.012 + 50 90.3484 527 8 0 72.678 -74.45 33.8257 +Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 6.30109 LIN +Particle energy: 7.69629 LIN Particle: proton Event: 51 -Number of tracker hits in this event: 22 - 51 208.036 1076 10 1 35.4497 -79.1488 95.55 - 51 112.617 504 10 0 35.4502 -79.1488 94.15 - 51 91.8454 1077 9 1 35.4578 -79.1479 65.55 - 51 108.953 504 9 0 35.4588 -79.1494 64.15 - 51 106.875 1077 8 1 35.4756 -79.1813 35.55 - 51 104.559 504 8 0 35.4769 -79.1817 34.15 - 51 100.386 1077 7 1 35.5029 -79.1894 5.55 - 51 102.227 504 7 0 35.5042 -79.19 4.15 - 51 171.675 1077 6 1 35.5283 -79.1983 -24.45 - 51 132.655 504 6 0 35.53 -79.1983 -25.85 - 51 98.4633 1077 5 1 35.5642 -79.1986 -54.45 - 51 88.4833 504 5 0 35.5664 -79.1986 -55.85 - 51 239.866 1077 4 1 35.6126 -79.1981 -84.45 - 51 121.158 504 4 0 35.6146 -79.1986 -85.85 - 51 180.097 1078 3 1 35.6524 -79.2124 -114.45 - 51 120.922 504 3 0 35.6545 -79.2123 -115.85 - 51 152.876 1078 2 1 35.6942 -79.2104 -144.45 - 51 129.437 504 2 0 35.6962 -79.2103 -145.85 - 51 117.856 1078 1 1 35.7362 -79.2089 -174.45 - 51 110.458 504 1 0 35.7375 -79.2089 -175.85 - 51 102.32 1078 0 1 35.763 -79.2076 -204.45 - 51 154.981 504 0 0 35.7633 -79.2074 -205.85 +Number of tracker hits in this event: 24 + 51 127.994 716 10 1 -36.7484 -79.5377 95.55 + 51 238.565 502 10 0 -36.7486 -79.5368 94.15 + 51 96.7186 716 9 1 -36.7546 -79.5191 65.55 + 51 114.621 502 9 0 -36.7546 -79.5178 64.15 + 51 141.169 716 8 1 -36.7529 -79.4892 35.55 + 51 99.5578 502 8 0 -36.7532 -79.4879 34.15 + 51 119.447 716 7 1 -36.7631 -79.463 5.55 + 51 122.024 502 7 0 -36.7638 -79.4614 4.15 + 51 101.396 716 6 1 -36.7808 -79.4305 -24.45 + 51 116.175 503 6 0 -36.784 -79.4277 -25.85 + 51 105.524 716 5 1 -36.8467 -79.3689 -54.45 + 51 183.36 503 5 0 -36.8495 -79.3658 -55.85 + 51 99.4437 715 4 1 -36.9077 -79.3019 -84.45 + 51 97.2382 503 4 0 -36.9107 -79.2991 -85.85 + 51 108.54 715 3 1 -36.9715 -79.239 -114.45 + 51 125.097 504 3 0 -36.9747 -79.2379 -115.85 + 51 115.389 715 2 1 -37.0395 -79.2115 -144.45 + 51 130.001 504 2 0 -37.0432 -79.2099 -145.85 + 51 91.269 714 1 1 -37.125 -79.1712 -174.45 + 51 121.597 504 1 0 -37.1288 -79.1703 -175.85 + 51 109.418 714 0 1 -37.2057 -79.1516 -204.45 + 51 188.028 504 0 0 -37.209 -79.151 -205.85 + 51 88.1984 505 0 0 -37.0981 -79.0498 -206.12 + 51 218.09 506 0 0 -37.1176 -78.8499 -206.137 Number of digits in this event: 11 Using G4ParticleGun... -Particle energy: 9.72881 LIN +Particle energy: 2.14759 LIN Particle: proton Event: 52 -Number of tracker hits in this event: 27 - 52 107.129 1613 7 1 142.828 32.1587 5.55 - 52 108.826 1060 7 0 142.828 32.1589 4.15 - 52 96.5827 1613 6 1 142.825 32.1666 -24.45 - 52 107.825 1060 6 0 142.824 32.1668 -25.85 - 52 217.592 1613 5 1 142.805 32.1705 -54.45 - 52 109.859 1060 5 0 142.804 32.171 -55.85 - 52 90.5559 1613 4 1 142.8 32.179 -84.45 - 52 112.55 1060 4 0 142.8 32.1795 -85.85 - 52 105.89 1613 3 1 142.797 32.1889 -114.45 - 52 118.976 1060 3 0 142.797 32.189 -115.85 - 52 228.992 1613 2 1 142.795 32.1874 -144.45 - 52 90.8964 1060 2 0 142.796 32.1877 -145.85 - 52 206.221 1613 1 1 142.813 32.1942 -174.45 - 52 97.5247 1060 1 0 142.812 32.1952 -175.85 - 52 172.416 1613 0 1 142.804 32.215 -204.45 - 52 142.958 1060 0 0 142.804 32.2161 -205.85 - 52 38.8216 1058 1 0 142.998 31.6978 -175.85 - 52 74.2062 1057 1 0 143.018 31.65 -175.961 - 52 55.2486 969 1 0 130.019 14.0386 -176.25 - 52 62.9307 970 1 0 129.928 14.0501 -176.053 - 52 259.729 1545 1 1 129.297 14.6551 -174.85 - 52 73.5269 1612 2 1 142.67 32.0691 -144.45 - 52 42.4835 1614 2 1 142.95 32.5348 -144.828 - 52 9.06646 1098 2 0 144.671 39.8207 -145.85 - 52 57.3106 1099 2 0 144.677 39.85 -145.855 - 52 85.5286 1621 2 1 144.549 42.9852 -144.85 - 52 133.649 1622 2 1 144.55 43.0624 -144.834 -Number of digits in this event: 8 +Number of tracker hits in this event: 22 + 52 113.539 351 10 1 -109.935 0.647381 95.55 + 52 129.395 902 10 0 -109.939 0.646853 94.15 + 52 84.3545 350 9 1 -110.032 0.632549 65.55 + 52 117.315 902 9 0 -110.036 0.633929 64.15 + 52 137.147 350 8 1 -110.118 0.6603 35.55 + 52 108.078 903 8 0 -110.12 0.663186 34.15 + 52 118.7 350 7 1 -110.148 0.721229 5.55 + 52 114.319 903 7 0 -110.148 0.724663 4.15 + 52 116.853 350 6 1 -110.122 0.793844 -24.45 + 52 121.379 903 6 0 -110.125 0.797734 -25.85 + 52 229.974 349 5 1 -110.155 0.882257 -54.45 + 52 121.806 904 5 0 -110.154 0.884543 -55.85 + 52 128.738 350 4 1 -110.144 0.935603 -84.45 + 52 149.959 904 4 0 -110.146 0.93906 -85.85 + 52 171.437 349 3 1 -110.203 1.01914 -114.45 + 52 137.955 904 3 0 -110.204 1.02467 -115.85 + 52 125.316 349 2 1 -110.209 1.1382 -144.45 + 52 93.5232 905 2 0 -110.21 1.14249 -145.85 + 52 108.577 349 1 1 -110.234 1.23107 -174.45 + 52 184.965 905 1 0 -110.233 1.233 -175.85 + 52 188.178 349 0 1 -110.212 1.27705 -204.45 + 52 121.195 906 0 0 -110.213 1.28018 -205.85 +Number of digits in this event: 16 Using G4ParticleGun... -Particle energy: 5.36383 LIN +Particle energy: 1.22324 LIN Particle: proton Event: 53 -Number of tracker hits in this event: 34 - 53 266.077 940 11 1 8.14656 -54.9405 125.55 - 53 118.714 625 11 0 8.14581 -54.9408 124.15 - 53 87.4955 940 10 1 8.13343 -54.9451 95.55 - 53 141.658 625 10 0 8.13157 -54.9429 94.15 - 53 232.811 940 9 1 8.09208 -54.9036 65.55 - 53 121.404 625 9 0 8.0906 -54.9014 64.15 - 53 156.048 940 8 1 8.05899 -54.8583 35.55 - 53 162.407 625 8 0 8.05697 -54.855 34.15 - 53 282.962 939 7 1 8.01633 -54.7863 5.55 - 53 122.648 626 7 0 8.01392 -54.7833 4.15 - 53 97.1807 939 6 1 7.96889 -54.7224 -24.45 - 53 127.123 626 6 0 7.96878 -54.719 -25.85 - 53 112.171 939 5 1 7.96777 -54.6456 -54.45 - 53 98.4501 627 5 0 7.96763 -54.6421 -55.85 - 53 91.2776 939 4 1 7.96174 -54.5717 -84.45 - 53 108.812 627 4 0 7.96164 -54.5676 -85.85 - 53 132.952 939 3 1 7.95539 -54.4824 -114.45 - 53 96.9862 627 3 0 7.9564 -54.4777 -115.85 - 53 142.124 939 2 1 7.97625 -54.3857 -144.45 - 53 108.142 628 2 0 7.97776 -54.3811 -145.85 - 53 142.074 939 1 1 8.01173 -54.2868 -174.45 - 53 130.006 628 1 0 8.01605 -54.2833 -175.85 - 53 89.9766 940 0 1 8.10224 -54.2118 -204.45 - 53 154.179 629 0 0 8.10619 -54.2081 -205.85 - 53 217.532 629 1 0 8.05059 -54.25 -176.112 - 53 45.201 628 7 0 7.56042 -54.2793 4.15 - 53 75.7644 629 7 0 7.50898 -54.2499 4.01644 - 53 2.80217 906 6 1 1.44553 -58.6059 -24.4504 - 53 131.205 907 6 1 1.45 -58.5983 -24.4645 - 53 82.1831 613 6 0 1.57698 -57.4258 -25.85 - 53 59.8734 614 6 0 1.59178 -57.25 -26.078 - 53 60.6127 349 6 1 -110.15 101.959 -24.67 - 53 194.859 348 6 1 -110.35 102.107 -24.6577 - 53 27.294 939 9 1 8.05 -54.9379 65.222 -Number of digits in this event: 18 +Number of tracker hits in this event: 16 + 53 280.689 655 7 1 -48.9707 -137.955 5.55 + 53 93.0821 210 7 0 -48.9649 -137.952 4.15 + 53 114.664 656 6 1 -48.8384 -137.881 -24.45 + 53 155.272 211 6 0 -48.8326 -137.878 -25.85 + 53 102.729 656 5 1 -48.7102 -137.798 -54.45 + 53 128.474 211 5 0 -48.7022 -137.796 -55.85 + 53 143.436 657 4 1 -48.5457 -137.784 -84.45 + 53 112.625 211 4 0 -48.5377 -137.784 -85.85 + 53 157.738 658 3 1 -48.4022 -137.755 -114.45 + 53 348.938 211 3 0 -48.3927 -137.752 -115.85 + 53 123.894 659 2 1 -48.2161 -137.698 -144.45 + 53 121.953 212 2 0 -48.2108 -137.69 -145.85 + 53 131.318 659 1 1 -48.1196 -137.536 -174.45 + 53 124.929 213 1 0 -48.115 -137.527 -175.85 + 53 99.6829 660 0 1 -48.0281 -137.323 -204.45 + 53 110.152 214 0 0 -48.0249 -137.311 -205.85 +Number of digits in this event: 11 Using G4ParticleGun... -Particle energy: 4.93473 LIN +Particle energy: 4.80578 LIN Particle: proton Event: 54 -Number of tracker hits in this event: 28 - 54 110.088 837 11 1 -12.5424 -72.2414 125.55 - 54 94.7984 539 11 0 -12.5427 -72.2405 124.15 - 54 97.0169 837 10 1 -12.5489 -72.2236 95.55 - 54 114.751 539 10 0 -12.5493 -72.2213 94.15 - 54 213.798 837 9 1 -12.5619 -72.169 65.55 - 54 130.768 539 9 0 -12.5628 -72.1678 64.15 - 54 124.978 837 8 1 -12.5798 -72.1461 35.55 - 54 133.678 539 8 0 -12.5802 -72.1448 34.15 - 54 187.515 837 7 1 -12.5939 -72.1225 5.55 - 54 148.795 539 7 0 -12.596 -72.1227 4.15 - 54 148.51 837 6 1 -12.6434 -72.1252 -24.45 - 54 151.343 539 6 0 -12.6463 -72.1252 -25.85 - 54 101.274 836 5 1 -12.7084 -72.1245 -54.45 - 54 219.606 539 5 0 -12.7106 -72.1263 -55.85 - 54 119.73 836 4 1 -12.7571 -72.1671 -84.45 - 54 167.615 539 4 0 -12.7587 -72.1686 -85.85 - 54 150.27 836 3 1 -12.7921 -72.2059 -114.45 - 54 104.167 539 3 0 -12.7937 -72.2064 -115.85 - 54 110.116 836 2 1 -12.8265 -72.2185 -144.45 - 54 151.812 539 2 0 -12.8279 -72.2208 -145.85 - 54 117.253 835 1 1 -12.8545 -72.2697 -174.45 - 54 107.126 538 1 0 -12.8554 -72.2716 -175.85 - 54 98.0903 835 0 1 -12.8788 -72.3117 -204.45 - 54 128.991 538 0 0 -12.8804 -72.3151 -205.85 - 54 21.8398 538 5 0 -12.6445 -72.2504 -56.2311 - 54 64.3861 838 7 1 -12.45 -72.1694 5.30454 - 54 144.554 536 7 0 -11.8936 -72.6999 4.15 - 54 13.8467 535 7 0 -11.6064 -72.85 3.78769 +Number of tracker hits in this event: 25 + 54 93.1503 834 11 1 -13.1267 3.96247 125.55 + 54 123.486 919 11 0 -13.1276 3.96458 124.15 + 54 138.595 834 10 1 -13.1505 4.00625 95.55 + 54 92.6476 919 10 0 -13.1532 4.00667 94.15 + 54 96.2293 834 9 1 -13.2072 4.02986 65.55 + 54 99.5114 919 9 0 -13.2103 4.0314 64.15 + 54 124.966 833 8 1 -13.2794 4.06461 35.55 + 54 127.772 920 8 0 -13.2836 4.06562 34.15 + 54 112.665 833 7 1 -13.3669 4.08221 5.55 + 54 169.296 920 7 0 -13.3705 4.08255 4.15 + 54 121.174 833 6 1 -13.4477 4.0752 -24.45 + 54 92.3914 920 6 0 -13.4535 4.07562 -25.85 + 54 104.33 832 5 1 -13.5717 4.0919 -54.45 + 54 128.986 920 5 0 -13.5762 4.09308 -55.85 + 54 117.604 831 4 1 -13.665 4.11267 -84.45 + 54 152.486 920 4 0 -13.6703 4.11208 -85.85 + 54 128.233 831 3 1 -13.781 4.09016 -114.45 + 54 122.087 920 3 0 -13.7872 4.09046 -115.85 + 54 114.128 830 2 1 -13.9158 4.09885 -144.45 + 54 121.469 920 2 0 -13.9234 4.09894 -145.85 + 54 146.912 829 1 1 -14.0783 4.09563 -174.45 + 54 106.114 920 1 0 -14.0857 4.09672 -175.85 + 54 86.6302 829 0 1 -14.2355 4.11725 -204.45 + 54 103.545 920 0 0 -14.2452 4.11109 -205.85 + 54 173.005 505 6 0 177.208 -79.0211 -25.8908 Number of digits in this event: 16 Using G4ParticleGun... -Particle energy: 9.05328 LIN +Particle energy: 2.52141 LIN Particle: proton Event: 55 -Number of tracker hits in this event: 21 - 55 118.106 196 8 1 -140.821 -14.5246 35.55 - 55 102.139 827 8 0 -140.821 -14.5253 34.15 - 55 137.338 196 7 1 -140.832 -14.5388 5.55 - 55 104.918 827 7 0 -140.832 -14.5399 4.15 - 55 104.657 196 6 1 -140.84 -14.5639 -24.45 - 55 105.366 827 6 0 -140.84 -14.5655 -25.85 - 55 122.852 196 5 1 -140.849 -14.5993 -54.45 - 55 109.569 827 5 0 -140.849 -14.6014 -55.85 - 55 117.142 196 4 1 -140.844 -14.6465 -84.45 - 55 135.581 827 4 0 -140.844 -14.6486 -85.85 - 55 253.312 196 3 1 -140.848 -14.6903 -114.45 - 55 122.526 826 3 0 -140.848 -14.6924 -115.85 - 55 91.0905 196 2 1 -140.843 -14.7355 -144.45 - 55 130.473 826 2 0 -140.843 -14.7374 -145.85 - 55 108.308 196 1 1 -140.84 -14.7765 -174.45 - 55 117.524 826 1 0 -140.839 -14.7779 -175.85 - 55 161.824 196 0 1 -140.833 -14.8055 -204.45 - 55 112.794 826 0 0 -140.832 -14.806 -205.85 - 55 22.1178 273 2 0 -141.154 -125.528 -146.201 - 55 66.9176 1286 1 0 10.0043 77.2919 -176.23 - 55 69.0124 132 4 0 -4.18234 -153.748 -85.8883 -Number of digits in this event: 11 +Number of tracker hits in this event: 26 + 55 177.111 640 9 1 -51.9187 -116.937 65.55 + 55 144.477 316 9 0 -51.9165 -116.935 64.15 + 55 114.632 640 8 1 -51.8683 -116.895 35.55 + 55 125.532 316 8 0 -51.8647 -116.894 34.15 + 55 162.108 641 7 1 -51.7881 -116.868 5.55 + 55 141.311 316 7 0 -51.7866 -116.865 4.15 + 55 85.756 641 6 1 -51.7446 -116.805 -24.45 + 55 99.348 316 6 0 -51.7405 -116.802 -25.85 + 55 103.476 642 5 1 -51.6362 -116.735 -54.45 + 55 128.975 317 5 0 -51.6298 -116.734 -55.85 + 55 132.427 642 4 1 -51.4994 -116.694 -84.45 + 55 144.774 317 4 0 -51.4925 -116.69 -85.85 + 55 114.827 643 3 1 -51.352 -116.61 -114.45 + 55 167.906 317 3 0 -51.3446 -116.607 -115.85 + 55 91.8512 644 2 1 -51.183 -116.543 -144.45 + 55 94.0153 318 2 0 -51.1778 -116.538 -145.85 + 55 173.412 644 1 1 -51.0703 -116.447 -174.45 + 55 99.7379 318 1 0 -51.0658 -116.442 -175.85 + 55 230.183 645 0 1 -50.9819 -116.324 -204.45 + 55 127.828 319 0 0 -50.9741 -116.319 -205.85 + 55 78.3883 639 9 1 -52.05 -117.043 65.4961 + 55 97.7303 638 9 1 -52.2502 -117.259 65.4549 + 55 102.464 637 9 1 -52.4502 -117.523 65.4853 + 55 81.3622 636 9 1 -52.65 -117.837 65.4728 + 55 153.068 635 9 1 -52.8502 -118.084 65.4139 + 55 103.309 304 9 0 -53.1724 -119.205 64.15 +Number of digits in this event: 14 Using G4ParticleGun... -Particle energy: 5.48687 LIN +Particle energy: 3.33579 LIN Particle: proton Event: 56 -Number of tracker hits in this event: 23 - 56 150.952 825 11 0 81.7086 -15.0305 124.15 - 56 91.6464 1308 10 1 81.7077 -15.0222 95.55 - 56 91.2291 825 10 0 81.7074 -15.0217 94.15 - 56 94.5283 1308 9 1 81.7002 -15.0103 65.55 - 56 106.191 825 9 0 81.7007 -15.0084 64.15 - 56 125.941 1308 8 1 81.715 -14.9715 35.55 - 56 93.1812 825 8 0 81.7161 -14.9698 34.15 - 56 105.35 1308 7 1 81.7434 -14.9319 5.55 - 56 108.681 825 7 0 81.7454 -14.9295 4.15 - 56 179.039 1308 6 1 81.7847 -14.8837 -24.45 - 56 117.568 825 6 0 81.7861 -14.8815 -25.85 - 56 107.245 1308 5 1 81.8174 -14.8362 -54.45 - 56 132.58 826 5 0 81.8192 -14.8347 -55.85 - 56 115.638 1309 4 1 81.8606 -14.8047 -84.45 - 56 140.722 826 4 0 81.8622 -14.804 -85.85 - 56 102.81 1309 3 1 81.894 -14.79 -114.45 - 56 107.18 826 3 0 81.8962 -14.7886 -115.85 - 56 120.026 1309 2 1 81.9375 -14.7598 -144.45 - 56 121.614 826 2 0 81.9378 -14.7587 -145.85 - 56 289.995 1309 1 1 81.9411 -14.7361 -174.45 - 56 118.615 826 1 0 81.942 -14.7352 -175.85 - 56 120.632 1309 0 1 81.9583 -14.716 -204.45 - 56 103.855 826 0 0 81.9591 -14.7145 -205.85 -Number of digits in this event: 11 +Number of tracker hits in this event: 27 + 56 132.616 542 10 1 -71.6482 60.7882 95.55 + 56 97.5339 1203 10 0 -71.6487 60.7864 94.15 + 56 158.278 541 9 1 -71.6645 60.7571 65.55 + 56 117.223 1203 9 0 -71.6667 60.7587 64.15 + 56 84.2602 541 8 1 -71.7149 60.7956 35.55 + 56 102.333 1203 8 0 -71.714 60.8017 34.15 + 56 107.444 541 7 1 -71.6909 60.9226 5.55 + 56 118.575 1204 7 0 -71.6893 60.9316 4.15 + 56 226.825 541 6 1 -71.6616 61.1109 -24.45 + 56 270.496 1205 6 0 -71.6587 61.119 -25.85 + 56 118.087 542 5 1 -71.5985 61.2867 -54.45 + 56 108.562 1206 5 0 -71.5977 61.2936 -55.85 + 56 193.432 542 4 1 -71.5806 61.431 -84.45 + 56 143.876 1206 4 0 -71.5796 61.4377 -85.85 + 56 130.624 542 3 1 -71.5618 61.5771 -114.45 + 56 156.572 1207 3 0 -71.5606 61.5831 -115.85 + 56 105.697 542 2 1 -71.5299 61.7073 -144.45 + 56 132.898 1208 2 0 -71.5249 61.7139 -145.85 + 56 195.717 543 1 1 -71.4243 61.8488 -174.45 + 56 335.324 1209 1 0 -71.4176 61.8565 -175.85 + 56 118.452 543 0 1 -71.2758 62.0116 -204.45 + 56 132.876 1209 0 0 -71.2677 62.0185 -205.85 + 56 65.335 1205 3 0 -72.47 61.1338 -115.85 + 56 240.752 1204 3 0 -72.5611 61.05 -116.026 + 56 214.297 1203 3 0 -72.9632 60.85 -115.967 + 56 203.938 1202 3 0 -73.2552 60.65 -115.971 + 56 198.921 542 6 1 -71.6499 61.2295 -24.7097 +Number of digits in this event: 17 Using G4ParticleGun... -Particle energy: 8.50813 LIN +Particle energy: 7.91848 LIN Particle: proton Event: 57 -Number of tracker hits in this event: 28 - 57 118.161 648 11 1 -50.3608 7.68191 125.55 - 57 97.8759 938 11 0 -50.3603 7.68209 124.15 - 57 129.748 648 10 1 -50.3472 7.6858 95.55 - 57 115.822 938 10 0 -50.3475 7.68587 94.15 - 57 89.6935 648 9 1 -50.3484 7.68632 65.55 - 57 106.812 938 9 0 -50.3481 7.68649 64.15 - 57 106.655 648 8 1 -50.3415 7.69059 35.55 - 57 159.294 938 8 0 -50.3415 7.69053 34.15 - 57 143.222 648 7 1 -50.3407 7.68711 5.55 - 57 262.77 938 7 0 -50.3413 7.68621 4.15 - 57 147.251 648 6 1 -50.3533 7.66791 -24.45 - 57 104.005 938 6 0 -50.3534 7.66767 -25.85 - 57 101.597 648 5 1 -50.3587 7.66177 -54.45 - 57 101.901 938 5 0 -50.359 7.66144 -55.85 - 57 264.201 648 4 1 -50.3661 7.65029 -84.45 - 57 116.009 937 4 0 -50.3667 7.64888 -85.85 - 57 258.38 648 3 1 -50.3794 7.61892 -114.45 - 57 114.312 937 3 0 -50.3793 7.6177 -115.85 - 57 151.602 648 2 1 -50.3797 7.59058 -144.45 - 57 92.5571 937 2 0 -50.3792 7.58904 -145.85 - 57 126.396 648 1 1 -50.3686 7.55469 -174.45 - 57 239.896 937 1 0 -50.3691 7.5528 -175.85 - 57 127.85 648 0 1 -50.3773 7.51574 -204.45 - 57 136.281 937 0 0 -50.3784 7.5144 -205.85 - 57 188.726 935 3 0 -50.3439 7.19233 -115.85 - 57 5.39102 935 6 0 -51.7495 7.05496 -25.85 - 57 188.963 934 6 0 -51.7608 7.05 -25.8554 - 57 237.229 937 8 0 -50.4854 7.64987 33.8818 -Number of digits in this event: 16 +Number of tracker hits in this event: 20 + 57 387.374 1146 9 1 49.3107 -118.728 65.55 + 57 106.291 307 9 0 49.3103 -118.729 64.15 + 57 107.75 1146 8 1 49.3006 -118.752 35.55 + 57 128.46 306 8 0 49.3012 -118.754 34.15 + 57 114.59 1146 7 1 49.2971 -118.773 5.55 + 57 101.076 306 7 0 49.2963 -118.774 4.15 + 57 118.164 1146 6 1 49.2781 -118.795 -24.45 + 57 124.797 306 6 0 49.2771 -118.796 -25.85 + 57 110.238 1146 5 1 49.2594 -118.802 -54.45 + 57 131.967 306 5 0 49.2587 -118.802 -55.85 + 57 136.496 1145 4 1 49.2418 -118.792 -84.45 + 57 104.616 306 4 0 49.2406 -118.791 -85.85 + 57 111.139 1145 3 1 49.217 -118.776 -114.45 + 57 126.123 306 3 0 49.2172 -118.775 -115.85 + 57 128.637 1145 2 1 49.2197 -118.758 -144.45 + 57 106.488 306 2 0 49.2196 -118.758 -145.85 + 57 265.565 1145 1 1 49.2154 -118.742 -174.45 + 57 93.2772 307 1 0 49.2156 -118.741 -175.85 + 57 228.017 1145 0 1 49.2211 -118.724 -204.45 + 57 125.242 307 0 0 49.221 -118.724 -205.85 +Number of digits in this event: 11 Using G4ParticleGun... -Particle energy: 6.23697 LIN +Particle energy: 1.082 LIN Particle: proton Event: 58 -Number of tracker hits in this event: 29 - 58 32.1614 550 11 0 47.4426 -70.0492 123.864 - 58 124.48 1136 10 1 47.4432 -70.0485 95.55 - 58 103.888 550 10 0 47.4436 -70.048 94.15 - 58 112.767 1137 9 1 47.4539 -70.0448 65.55 - 58 88.9991 550 9 0 47.4543 -70.045 64.15 - 58 112.341 1137 8 1 47.4655 -70.0445 35.55 - 58 116.066 550 8 0 47.4673 -70.0442 34.15 - 58 114.454 1137 7 1 47.5015 -70.0387 5.55 - 58 229.44 550 7 0 47.5033 -70.0378 4.15 - 58 80.4934 1137 6 1 47.545 -70.0171 -24.45 - 58 134.362 550 6 0 47.5462 -70.0161 -25.85 - 58 103.119 1137 5 1 47.5672 -69.9911 -54.45 - 58 120.953 550 5 0 47.5692 -69.9905 -55.85 - 58 94.9195 1137 4 1 47.6105 -69.977 -84.45 - 58 164.622 550 4 0 47.6123 -69.9754 -85.85 - 58 91.8191 1137 3 1 47.6485 -69.9395 -114.45 - 58 115.914 550 3 0 47.6507 -69.939 -115.85 - 58 140.393 1138 2 1 47.6946 -69.9251 -144.45 - 58 111.659 550 2 0 47.6965 -69.925 -145.85 - 58 129.663 1138 1 1 47.7415 -69.9246 -174.45 - 58 117.089 550 1 0 47.7433 -69.9237 -175.85 - 58 264.578 1138 0 1 47.7772 -69.8988 -204.45 - 58 96.9104 550 0 0 47.7776 -69.8993 -205.85 - 58 41.453 1137 0 1 47.65 -69.9186 -204.76 - 58 126.18 548 0 0 47.5099 -70.3417 -205.85 - 58 261.913 547 0 0 47.3089 -70.45 -206.003 - 58 63.4676 549 4 0 47.6443 -70.0503 -85.8953 - 58 124.931 1136 4 1 47.4453 -72.3331 -84.85 - 58 312.524 1135 4 1 47.25 -72.3849 -84.7753 +Number of tracker hits in this event: 22 + 58 128.013 623 10 1 -55.2715 -71.1622 95.55 + 58 232.995 544 10 0 -55.2695 -71.1593 94.15 + 58 119.012 624 9 1 -55.2351 -71.1058 65.55 + 58 123.609 544 9 0 -55.235 -71.1008 64.15 + 58 131.353 624 8 1 -55.2265 -71.0247 35.55 + 58 120.519 545 8 0 -55.2302 -71.0267 34.15 + 58 111.957 623 7 1 -55.3007 -71.0468 5.55 + 58 126.55 544 7 0 -55.3039 -71.0519 4.15 + 58 119.802 623 6 1 -55.3764 -71.1358 -24.45 + 58 217.338 544 6 0 -55.3724 -71.1449 -25.85 + 58 133.126 623 5 1 -55.2617 -71.3218 -54.45 + 58 115.481 543 5 0 -55.2575 -71.3265 -55.85 + 58 176.862 624 4 1 -55.1801 -71.4308 -84.45 + 58 115.34 543 4 0 -55.1721 -71.4355 -85.85 + 58 115.119 625 3 1 -55.0228 -71.53 -114.45 + 58 136.805 542 3 0 -55.0131 -71.5314 -115.85 + 58 121.601 626 2 1 -54.8141 -71.5691 -144.45 + 58 116.623 542 2 0 -54.804 -71.5717 -145.85 + 58 148.718 627 1 1 -54.5858 -71.6217 -174.45 + 58 133.592 542 1 0 -54.5775 -71.6214 -175.85 + 58 124.795 628 0 1 -54.4269 -71.623 -204.45 + 58 148.034 542 0 0 -54.4194 -71.6228 -205.85 Number of digits in this event: 16 Using G4ParticleGun... -Particle energy: 7.45269 LIN +Particle energy: 7.08949 LIN Particle: proton Event: 59 -Number of tracker hits in this event: 25 - 59 121.115 333 9 1 -113.426 62.4283 65.55 - 59 109.807 1211 9 0 -113.427 62.428 64.15 - 59 153.235 333 8 1 -113.45 62.4203 35.55 - 59 103.461 1211 8 0 -113.451 62.4196 34.15 - 59 88.7797 333 7 1 -113.473 62.4012 5.55 - 59 113.274 1211 7 0 -113.475 62.4001 4.15 - 59 215.342 333 6 1 -113.516 62.3785 -24.45 - 59 338.724 1211 6 0 -113.518 62.377 -25.85 - 59 93.648 333 5 1 -113.545 62.3444 -54.45 - 59 148.743 1211 5 0 -113.547 62.343 -55.85 - 59 125.794 332 4 1 -113.586 62.3092 -84.45 - 59 376.368 1211 4 0 -113.589 62.3065 -85.85 - 59 141.448 332 3 1 -113.638 62.2537 -114.45 - 59 122.822 1211 3 0 -113.641 62.2524 -115.85 - 59 137.021 332 2 1 -113.701 62.2283 -144.45 - 59 244.816 1210 2 0 -113.702 62.2264 -145.85 - 59 96.4006 332 1 1 -113.74 62.1905 -174.45 - 59 125.331 1210 1 0 -113.741 62.1877 -175.85 - 59 143.43 331 0 1 -113.754 62.1283 -204.45 - 59 157.249 1210 0 0 -113.754 62.125 -205.85 - 59 80.8642 1148 2 0 -99.6733 49.8336 -146.25 - 59 176.393 1147 2 0 -99.6877 49.6498 -146.169 - 59 175.051 400 2 1 -100.032 49.1735 -144.85 - 59 107.613 1210 4 0 -113.69 62.25 -86.0054 - 59 260.323 332 6 1 -113.55 62.3861 -24.563 -Number of digits in this event: 18 -Using G4ParticleGun... -Particle energy: 2.71447 LIN +Number of tracker hits in this event: 326 + 59 157.049 1184 10 1 56.8693 -80.0033 95.55 + 59 217.374 500 10 0 56.8691 -80.0049 94.15 + 59 126.59 1184 9 1 56.8695 -80.0324 65.55 + 59 148.938 500 9 0 56.8701 -80.0339 64.15 + 59 121.784 1184 8 1 56.885 -80.0648 35.55 + 59 177.059 499 8 0 56.8849 -80.067 34.15 + 59 119.611 1184 7 1 56.885 -80.1112 5.55 + 59 100.857 499 7 0 56.8863 -80.1126 4.15 + 59 132.546 934 4 1 7.0047 -50.7687 -84.7346 + 59 2010.03 617 7 0 68.5711 -56.6077 3.75 + 59 2381.09 618 7 0 68.646 -56.45 3.93502 + 59 6411.04 1245 7 1 69.1046 -55.4454 5.15 + 59 2220.19 1246 7 1 69.25 -55.1251 5.51643 + 59 1.55988 1312 7 1 82.4554 -88.6516 5.55 + 59 80.8679 1311 7 1 82.45 -88.6491 5.54532 + 59 80.9587 1310 7 1 82.25 -88.5599 5.36198 + 59 13.9443 1309 7 1 82.05 -88.4787 5.17502 + 59 140.264 459 7 0 80.9422 -88.1208 4.14987 + 59 56.427 460 7 0 80.6396 -88.05 3.878 + 59 129.863 1121 6 1 44.2511 -88.9781 -24.4515 + 59 454.1 452 6 0 44.2591 -89.5465 -25.85 + 59 38.3496 1143 5 1 48.6804 -96.4384 -54.45 + 59 90.3471 1142 5 1 48.65 -96.4247 -54.5481 + 59 91.7366 421 5 0 49.0474 -95.8763 -55.85 + 59 92.4989 422 5 0 49.2161 -95.75 -56.12 + 59 65.3852 241 5 0 37.3384 -131.802 -56.25 + 59 48.1355 240 5 0 37.2771 -131.95 -56.1962 + 59 100.17 239 5 0 37.2359 -132.15 -56.161 + 59 115.313 238 5 0 37.0893 -132.351 -56.197 + 59 79.1103 237 5 0 36.7865 -132.55 -56.1935 + 59 8.0372 108 5 0 -12.6589 -158.538 -56.25 + 59 199.802 107 5 0 -12.6619 -158.55 -56.2422 + 59 56.7731 106 5 0 -12.9164 -158.75 -55.8921 + 59 76.3298 838 5 1 -12.4198 -158.605 -54.85 + 59 260.452 839 5 1 -12.25 -158.585 -54.7094 + 59 1374.9 6 4 0 107.511 -178.855 -85.8521 + 59 33.0208 7 4 0 107.41 -178.75 -86.1873 + 59 21.7015 372 4 0 71.9736 -105.655 -86.25 + 59 2063.51 1416 4 1 103.47 -176.21 -84.85 + 59 3516.56 1415 4 1 103.35 -176.139 -84.8237 + 59 3074.58 1183 6 1 56.6718 -79.9658 -24.45 + 59 4759.81 1182 6 1 56.65 -79.951 -24.4614 + 59 5121.94 1181 6 1 56.45 -79.8125 -24.5663 + 59 5443.23 1180 6 1 56.25 -79.6727 -24.668 + 59 5072.5 1179 6 1 56.05 -79.5295 -24.7727 + 59 3918.74 510 6 0 53.9166 -77.9524 -25.85 + 59 6448.6 511 6 0 53.775 -77.85 -25.9211 + 59 2728.91 494 7 0 68.6061 -81.2195 3.75 + 59 9892.13 470 8 0 85.552 -85.9796 33.75 + 59 7369.95 1184 6 1 56.9323 -80.2316 -24.45 + 59 3709.47 494 6 0 57.2085 -81.162 -25.85 + 59 3375.42 493 6 0 57.2343 -81.25 -25.9812 + 59 6244.54 518 7 0 -9.47849 -76.404 3.75 + 59 1777.24 837 7 1 -12.462 -76.0621 5.15 + 59 2234.73 836 7 1 -12.65 -76.0391 5.24407 + 59 3007.84 835 7 1 -12.85 -76.0082 5.34616 + 59 3396.12 834 7 1 -13.05 -75.9843 5.43401 + 59 1034.62 1185 6 1 57.05 -80.1091 -24.7298 + 59 2644.84 500 6 0 57.4229 -80.0339 -25.85 + 59 1161.76 559 7 0 45.2669 -68.2334 3.75 + 59 256.153 1123 7 1 44.6793 -67.628 5.15 + 59 1007.58 1122 7 1 44.65 -67.5978 5.21946 + 59 1183.57 614 8 0 35.5765 -57.2296 33.75 + 59 856.639 1075 8 1 35.1324 -56.7414 35.15 + 59 467.905 1074 8 1 35.05 -56.6522 35.4095 + 59 1766.15 647 9 0 25.1477 -50.6319 63.75 + 59 375.671 1023 9 1 24.6764 -50.3622 65.15 + 59 1619.73 1022 9 1 24.65 -50.3474 65.2298 + 59 2935.63 706 10 0 17.9056 -38.8235 93.75 + 59 3496.7 987 10 1 17.6379 -38.3128 95.15 + 59 2705.72 495 6 0 54.0849 -81.0448 -25.85 + 59 1296.05 1178 6 1 55.85 -81.0041 -24.6621 + 59 1454.07 1177 6 1 55.65 -81.1532 -24.7219 + 59 1399.57 1176 6 1 55.45 -81.3048 -24.7809 + 59 190.002 1175 6 1 55.25 -81.4552 -24.8429 + 59 805.625 480 6 0 51.9029 -83.9653 -25.85 + 59 1870.28 479 6 0 51.79 -84.05 -25.884 + 59 1917.03 478 6 0 51.5246 -84.25 -25.9653 + 59 2205.94 477 6 0 51.2599 -84.45 -26.0467 + 59 2377.18 476 6 0 51.0055 -84.65 -26.1245 + 59 1708.47 475 6 0 50.749 -84.85 -26.199 + 59 13.9047 43 8 0 -78.9088 -171.35 33.9954 + 59 63.7947 168 8 0 -101.599 -146.55 34.1122 + 59 103.955 42 8 0 -78.8106 -171.55 33.9453 + 59 1110.1 498 6 0 56.8522 -80.27 -25.85 + 59 887.692 1178 5 1 55.7411 -82.685 -54.45 + 59 844.146 485 5 0 55.5767 -82.8637 -55.85 + 59 831.331 1160 4 1 52.244 -86.3679 -84.45 + 59 1073.77 467 4 0 52.118 -86.5721 -85.85 + 59 1158.06 1148 3 1 49.7174 -90.3478 -114.45 + 59 930.747 448 3 0 49.5355 -90.5125 -115.85 + 59 220.325 447 3 0 49.4909 -90.55 -116.182 + 59 1127.4 1126 2 1 45.3349 -93.8091 -144.45 + 59 1177.67 430 2 0 45.2063 -93.9758 -145.85 + 59 341.174 1111 1 1 42.2553 -97.4454 -174.45 + 59 1317.46 1110 1 1 42.25 -97.4483 -174.522 + 59 1763.45 413 1 0 42.1396 -97.5078 -175.85 + 59 2191.26 1100 0 1 40.0811 -98.2709 -204.45 + 59 2616.29 408 0 0 40.0773 -98.3934 -205.85 + 59 21.3283 1358 5 0 -51.478 91.9133 -55.9582 + 59 66.0577 224 0 0 -10.8832 -135.238 -206.238 + 59 634.361 496 6 0 57.189 -80.8178 -25.85 + 59 4690.36 1211 5 1 62.3364 -92.7813 -54.45 + 59 840.255 1135 5 1 47.1519 -93.5745 -54.45 + 59 310.068 1134 5 1 47.05 -93.6833 -54.7339 + 59 398.261 430 5 0 46.6364 -94.1072 -55.85 + 59 792.838 429 5 0 46.5944 -94.15 -55.9629 + 59 401.591 1078 4 1 35.698 -104.607 -84.45 + 59 810.408 1077 4 1 35.65 -104.656 -84.5837 + 59 99.8944 375 4 0 35.2179 -105.134 -85.85 + 59 1245.37 374 4 0 35.2038 -105.15 -85.8915 + 59 773.266 1027 3 1 25.5011 -115.837 -114.45 + 59 844.912 1026 3 1 25.45 -115.907 -114.633 + 59 1805.81 318 3 0 25.1116 -116.388 -115.85 + 59 2255.56 986 2 1 17.3132 -127.72 -144.45 + 59 170.9 260 2 0 17.1885 -128.143 -145.85 + 59 2531.04 259 2 0 17.1866 -128.15 -145.874 + 59 513.776 492 6 0 55.1113 -81.45 -26.1127 + 59 126.714 1036 5 1 27.2839 -101.087 -54.45 + 59 699.575 1035 5 1 27.25 -101.114 -54.4866 + 59 469.903 1034 5 1 27.05 -101.274 -54.7034 + 59 173.129 390 5 0 25.9824 -102.117 -55.85 + 59 998.424 389 5 0 25.9401 -102.15 -55.8954 + 59 241.4 388 5 0 25.6847 -102.35 -56.1682 + 59 836.746 899 4 1 -0.05 -122.18 -84.5051 + 59 860.711 898 4 1 -0.25 -122.329 -84.6814 + 59 263.034 284 4 0 -1.52041 -123.299 -85.85 + 59 1103.2 283 4 0 -1.5874 -123.35 -85.9119 + 59 418.83 282 4 0 -1.84954 -123.55 -86.1525 + 59 109.492 732 3 1 -33.629 -147.759 -114.45 + 59 951.246 731 3 1 -33.65 -147.774 -114.466 + 59 906.524 730 3 1 -33.85 -147.919 -114.618 + 59 521.114 729 3 1 -34.05 -148.057 -114.769 + 59 686.971 155 3 0 -35.4354 -149.059 -115.85 + 59 1516.71 154 3 0 -35.5608 -149.15 -115.948 + 59 627.636 153 3 0 -35.8343 -149.35 -116.166 + 59 478.877 546 2 1 -70.7946 -174.702 -144.45 + 59 1938.49 545 2 1 -70.85 -174.729 -144.5 + 59 1873.1 544 2 1 -71.05 -174.831 -144.69 + 59 2755.53 23 2 0 -72.2981 -175.441 -145.85 + 59 3860.45 22 2 0 -72.5311 -175.55 -146.055 + 59 1489.33 497 6 0 56.0577 -80.4797 -25.85 + 59 1200.3 1098 5 1 39.8462 -86.7603 -54.45 + 59 435.636 1097 5 1 39.65 -86.8314 -54.7632 + 59 1661.6 464 5 0 38.9473 -87.0643 -55.85 + 59 36.1356 1002 4 1 20.4519 -94.2644 -84.45 + 59 2111.26 1001 4 1 20.45 -94.2655 -84.4541 + 59 785.354 427 4 0 19.8242 -94.7034 -85.85 + 59 1556.43 426 4 0 19.7594 -94.75 -85.9957 + 59 148.023 573 7 0 80.1501 -65.43 3.75 + 59 26.8238 574 7 0 80.434 -65.25 4.09292 + 59 66.5633 1306 7 1 81.3238 -64.7036 5.15 + 59 117.856 1307 7 1 81.45 -64.626 5.29994 + 59 4.01704 1308 7 1 81.65 -64.5044 5.53773 + 59 145.216 652 8 0 104.797 -49.5511 33.75 + 59 115.52 653 8 0 104.953 -49.45 33.9406 + 59 2.23626 1428 8 1 105.945 -48.8119 35.15 + 59 143.212 1429 8 1 105.95 -48.8086 35.1563 + 59 60.0048 1430 8 1 106.15 -48.6813 35.3999 + 59 122.201 725 9 0 128.354 -34.9796 63.75 + 59 62.3209 726 9 0 128.564 -34.85 64.0186 + 59 64.1386 1546 9 1 129.445 -34.3059 65.15 + 59 121.298 1547 9 1 129.55 -34.2414 65.2843 + 59 2.44591 1548 9 1 129.75 -34.1186 65.5425 + 59 176.221 795 10 0 150.575 -21.0171 93.75 + 59 45.6391 796 10 0 150.841 -20.85 94.1098 + 59 80.9171 1657 10 1 151.612 -20.3598 95.15 + 59 100.129 1658 10 1 151.75 -20.2721 95.336 + 59 95.9578 857 11 0 173.278 -8.54129 123.75 + 59 93.4405 858 11 0 173.446 -8.45 123.972 + 59 0.672528 1770 11 1 174.349 -7.95994 125.15 + 59 159.809 1771 11 1 174.35 -7.95923 125.152 + 59 267.435 1772 11 1 174.55 -7.85072 125.413 + 59 230.965 541 9 1 -71.65 -21.0466 65.3681 + 59 27299 502 6 0 57.152 -79.5895 -26.067 + 59 667.626 1192 6 1 58.5725 -79.5652 -24.85 + 59 2180.1 1193 6 1 58.65 -79.5637 -24.7837 + 59 2642.07 1194 6 1 58.85 -79.5661 -24.613 + 59 104.945 1195 6 1 59.05 -79.5728 -24.455 + 59 4138.57 503 6 0 57.0793 -79.45 -26.0274 + 59 1470.26 504 6 0 56.9784 -79.25 -25.9662 + 59 27.5781 1140 5 1 48.0553 -59.52 -54.45 + 59 1243.48 1139 5 1 48.05 -59.5092 -54.4659 + 59 611.994 607 5 0 47.598 -58.5658 -55.85 + 59 657.32 608 5 0 47.543 -58.45 -56.0195 + 59 766.98 1093 4 1 38.7151 -39.2764 -84.45 + 59 482.011 1092 4 1 38.65 -39.0964 -84.6676 + 59 288.25 709 4 0 38.2987 -38.1277 -85.85 + 59 803.868 710 4 0 38.2705 -38.05 -85.9452 + 59 150.179 711 4 0 38.1984 -37.85 -86.1902 + 59 784.254 1047 3 1 29.4975 -14.5753 -114.45 + 59 1073.42 1046 3 1 29.45 -14.4739 -114.569 + 59 570.193 833 3 0 28.913 -13.3791 -115.85 + 59 1132.58 834 3 0 28.849 -13.25 -116.001 + 59 48.1098 835 3 0 28.7488 -13.05 -116.234 + 59 693.361 983 2 1 16.7349 11.5004 -144.45 + 59 1263.52 982 2 1 16.65 11.6173 -144.585 + 59 940.96 963 2 0 15.8833 12.6827 -145.85 + 59 842.532 964 2 0 15.7635 12.85 -146.049 + 59 381.241 890 1 1 -2.00532 35.8172 -174.45 + 59 1825.37 889 1 1 -2.05 35.8637 -174.507 + 59 719.285 888 1 1 -2.25 36.0655 -174.762 + 59 1122.18 1084 1 0 -3.09268 36.9312 -175.85 + 59 2184.48 1085 1 0 -3.20814 37.05 -175.999 + 59 242.811 839 7 0 14.1253 -12.1428 3.75 + 59 619.705 840 7 0 14.0669 -12.05 3.78826 + 59 659.6 841 7 0 13.9405 -11.85 3.87211 + 59 612.068 842 7 0 13.8136 -11.65 3.9577 + 59 676.968 843 7 0 13.6881 -11.45 4.04322 + 59 180.153 844 7 0 13.5634 -11.25 4.12888 + 59 209.97 960 7 1 12.0817 -8.89393 5.15 + 59 1071.51 959 7 1 12.05 -8.84359 5.17181 + 59 1115.58 958 7 1 11.85 -8.5239 5.30995 + 59 928.535 957 7 1 11.65 -8.20228 5.44754 + 59 1124.8 1121 8 0 -55.7396 44.2904 33.75 + 59 1435.12 1122 8 0 -55.9461 44.45 33.8363 + 59 1502.4 1123 8 0 -56.2066 44.65 33.9432 + 59 1344.99 1124 8 0 -56.4689 44.85 34.0549 + 59 395.416 604 8 1 -59.1888 46.9373 35.15 + 59 1299.34 603 8 1 -59.25 46.9843 35.1746 + 59 1323.1 602 8 1 -59.45 47.1288 35.2592 + 59 1442.1 601 8 1 -59.65 47.2734 35.3456 + 59 1450.94 600 8 1 -59.85 47.4224 35.4287 + 59 1027.19 599 8 1 -60.05 47.5659 35.5062 + 59 241.935 312 7 0 68.2967 -117.578 3.75 + 59 414.674 311 7 0 68.3488 -117.75 3.8787 + 59 241.072 310 7 0 68.4104 -117.95 4.02794 + 59 769.592 1244 7 1 68.8866 -119.46 5.15 + 59 93.7794 85 8 0 80.9612 -163.093 33.75 + 59 330.976 84 8 0 80.9768 -163.15 33.7871 + 59 540.234 83 8 0 81.0319 -163.35 33.9177 + 59 256.414 82 8 0 81.0863 -163.55 34.0478 + 59 643.618 1307 8 1 81.5429 -165.263 35.15 + 59 254.645 1308 8 1 81.65 -165.664 35.4082 + 59 145.198 1193 5 1 58.6627 -91.4136 -54.45 + 59 19.1531 441 5 0 58.7729 -91.9278 -55.85 + 59 109.864 440 5 0 58.7777 -91.95 -55.9103 + 59 146.367 1205 4 1 61.1107 -102.452 -84.45 + 59 170.577 385 4 0 61.2575 -102.993 -85.85 + 59 142.67 1221 3 1 64.314 -114.247 -114.45 + 59 115.989 326 3 0 64.4562 -114.811 -115.85 + 59 18.0186 325 3 0 64.4916 -114.95 -116.195 + 59 120.378 1236 2 1 67.3491 -126.472 -144.45 + 59 134.359 265 2 0 67.5037 -126.998 -145.85 + 59 127.229 1253 1 1 70.6675 -137.733 -174.45 + 59 122.931 209 1 0 70.8233 -138.244 -175.85 + 59 44.0769 208 1 0 70.8557 -138.35 -176.143 + 59 162.447 1269 0 1 73.9914 -148.536 -204.45 + 59 140.705 155 0 0 74.1628 -149.015 -205.85 + 59 0.880257 154 0 0 74.2113 -149.15 -206.246 + 59 362.043 395 4 0 67.2474 -101.113 -86.25 + 59 57.0945 491 6 0 56.3766 -81.65 -26.1535 + 59 38.8917 371 5 0 47.6134 -105.917 -55.85 + 59 122.949 370 5 0 47.6015 -105.95 -55.8894 + 59 98.6587 369 5 0 47.5298 -106.15 -56.1272 + 59 256.933 1094 4 1 38.8981 -129.978 -84.45 + 59 136.39 244 4 0 38.4678 -131.172 -85.85 + 59 118.12 243 4 0 38.4035 -131.35 -86.0595 + 59 26.4111 1048 3 1 29.6645 -155.552 -114.45 + 59 135.463 116 3 0 29.2213 -156.753 -115.85 + 59 103.536 115 3 0 29.1488 -156.95 -116.079 + 59 420.414 1186 6 1 57.25 -80.1563 -24.5512 + 59 456.488 1187 6 1 57.45 -80.1611 -24.6928 + 59 38.9911 1188 6 1 57.65 -80.166 -24.8342 + 59 1277.92 499 6 0 59.0895 -80.1944 -25.85 + 59 235.483 1398 5 1 99.8505 -80.8596 -54.45 + 59 545.737 1399 5 1 99.95 -80.86 -54.5228 + 59 594.446 1400 5 1 100.15 -80.8639 -54.6752 + 59 60.1887 1401 5 1 100.35 -80.8696 -54.8284 + 59 1443.3 495 5 0 101.665 -80.9103 -55.85 + 59 185.146 1589 4 1 138.077 -82.1596 -84.45 + 59 603.39 1590 4 1 138.15 -82.1642 -84.515 + 59 567.855 1591 4 1 138.35 -82.1772 -84.6921 + 59 1482.83 488 4 0 139.713 -82.2581 -85.85 + 59 145.099 1766 3 1 173.504 -83.959 -114.45 + 59 756.573 1767 3 1 173.55 -83.9567 -114.488 + 59 717.516 1768 3 1 173.75 -83.9447 -114.652 + 59 166.917 1769 3 1 173.95 -83.9341 -114.817 + 59 1924.23 480 3 0 175.223 -83.8756 -115.85 + 59 71.6347 1097 7 0 -47.3786 39.4704 3.75 + 59 70.987 1098 7 0 -47.5353 39.65 3.79222 + 59 76.9425 1099 7 0 -47.7103 39.85 3.83988 + 59 79.8862 1100 7 0 -47.8852 40.05 3.88731 + 59 169.07 1101 7 0 -48.0608 40.25 3.93467 + 59 77.9564 1102 7 0 -48.2365 40.45 3.98162 + 59 76.2475 1103 7 0 -48.4127 40.65 4.02821 + 59 81.9548 1104 7 0 -48.5879 40.85 4.0739 + 59 53.7495 1105 7 0 -48.764 41.05 4.11987 + 59 59.008 636 7 1 -52.744 45.6003 5.15 + 59 96.5834 635 7 1 -52.85 45.7215 5.17744 + 59 96.8301 634 7 1 -53.05 45.951 5.22973 + 59 116.971 633 7 1 -53.25 46.1792 5.28101 + 59 97.5768 632 7 1 -53.45 46.4069 5.33278 + 59 112.07 631 7 1 -53.65 46.6342 5.38533 + 59 89.011 630 7 1 -53.85 46.8613 5.43768 + 59 86.5564 629 7 1 -54.05 47.0895 5.48978 + 59 111.881 628 7 1 -54.25 47.3181 5.54194 + 59 53.7257 654 7 1 -49.1603 42.7559 5.15011 + 59 58.679 1110 7 0 -50.5043 42.1162 4.14994 + 59 111.31 1109 7 0 -50.5165 42.05 4.11651 + 59 432.369 1228 5 1 65.6534 -82.5256 -54.45 + 59 87.456 487 5 0 66.0638 -82.6362 -55.85 + 59 216.444 486 5 0 66.1151 -82.65 -56.0249 + 59 34.5571 1271 4 1 74.432 -84.8936 -84.45 + 59 169.264 1272 4 1 74.45 -84.8988 -84.5101 + 59 190.316 475 4 0 74.852 -85.0156 -85.85 + 59 0.960059 474 4 0 74.9708 -85.05 -86.246 + 59 3.73644 1316 3 1 83.4462 -87.4987 -114.45 + 59 170.943 1317 3 1 83.45 -87.4997 -114.462 + 59 191.38 462 3 0 83.8821 -87.6158 -115.85 + 59 159.004 1363 2 1 92.7776 -90.022 -144.45 + 59 253.275 449 2 0 93.2209 -90.15 -145.88 + 59 62.2845 1409 1 1 102.101 -92.6892 -174.45 + 59 109.147 1410 1 1 102.15 -92.7035 -174.606 + 59 194.834 436 1 0 102.538 -92.8187 -175.85 + 59 145.921 1456 0 1 111.438 -95.4446 -204.45 + 59 16.6112 1457 0 1 111.55 -95.4788 -204.81 + 59 207.27 422 0 0 111.872 -95.5785 -205.85 + 59 106.625 1377 8 0 75.0921 95.5557 33.75 + 59 238.447 1270 8 1 74.2456 95.5219 35.1503 + 59 33.8932 1271 8 1 74.25 95.3788 35.2271 + 59 28.5242 503 13 1 -79.3942 -34.7893 185.424 + 59 79.5935 1022 0 0 95.2185 24.45 -206.1 + 59 41.1582 1080 1 0 86.246 36.216 -176.25 + 59 183.727 1081 1 0 86.1655 36.2501 -176.131 + 59 171.368 581 6 0 39.6336 -63.8395 -26.25 +Number of digits in this event: 234 +Using G4ParticleGun... +Particle energy: 9.26795 LIN Particle: proton Event: 60 -Number of tracker hits in this event: 25 - 60 103.036 240 8 1 -132.05 -44.1389 35.55 - 60 476.649 679 8 0 -132.048 -44.1388 34.15 - 60 123.903 240 7 1 -132.035 -44.1521 5.55 - 60 116.875 679 7 0 -132.036 -44.1536 4.15 - 60 107.963 240 6 1 -132.042 -44.1865 -24.45 - 60 99.1072 679 6 0 -132.043 -44.1879 -25.85 - 60 120.326 240 5 1 -132.074 -44.2159 -54.45 - 60 131.301 679 5 0 -132.075 -44.2174 -55.85 - 60 100.291 240 4 1 -132.095 -44.2479 -84.45 - 60 112.891 678 4 0 -132.099 -44.2514 -85.85 - 60 123.238 239 3 1 -132.163 -44.327 -114.45 - 60 141.012 678 3 0 -132.166 -44.331 -115.85 - 60 183.529 239 2 1 -132.219 -44.4051 -144.45 - 60 167.345 678 2 0 -132.223 -44.4115 -145.85 - 60 159.313 239 1 1 -132.304 -44.5345 -174.45 - 60 206.883 677 1 0 -132.309 -44.5385 -175.85 - 60 107.642 238 0 1 -132.515 -44.7006 -204.45 - 60 158.051 676 0 0 -132.526 -44.7063 -205.85 - 60 73.7695 238 3 1 -132.35 -44.3289 -114.5 - 60 155.334 237 3 1 -132.55 -44.3433 -114.657 - 60 30.4321 236 3 1 -132.75 -44.3774 -114.796 - 60 15.8709 676 3 0 -134.194 -44.8325 -115.85 - 60 268.052 675 3 0 -134.235 -44.85 -115.887 - 60 94.615 674 3 0 -134.493 -45.05 -115.955 - 60 103.471 673 3 0 -134.714 -45.25 -116.026 -Number of digits in this event: 16 +Number of tracker hits in this event: 23 + 60 148.05 1423 9 1 104.787 -76.2949 65.55 + 60 122.663 518 9 0 104.787 -76.2943 64.15 + 60 108.62 1423 8 1 104.78 -76.2834 35.55 + 60 92.3427 518 8 0 104.78 -76.2831 34.15 + 60 96.984 1423 7 1 104.765 -76.2788 5.55 + 60 125.095 518 7 0 104.764 -76.2779 4.15 + 60 132.438 1422 6 1 104.74 -76.265 -24.45 + 60 104.008 518 6 0 104.739 -76.2645 -25.85 + 60 100.81 1422 5 1 104.705 -76.2534 -54.45 + 60 133.205 518 5 0 104.704 -76.253 -55.85 + 60 143.052 1422 4 1 104.671 -76.2458 -84.45 + 60 95.0613 519 4 0 104.67 -76.2452 -85.85 + 60 178.164 1422 3 1 104.645 -76.2357 -114.45 + 60 113.823 519 3 0 104.644 -76.2352 -115.85 + 60 116.068 1422 2 1 104.616 -76.2244 -144.45 + 60 111.426 519 2 0 104.613 -76.2248 -145.85 + 60 238.924 1421 1 1 104.548 -76.2321 -174.45 + 60 105.178 519 1 0 104.543 -76.2325 -175.85 + 60 111.225 1421 0 1 104.439 -76.2415 -204.45 + 60 123.083 519 0 0 104.434 -76.2421 -205.85 + 60 128.4 1422 1 1 104.55 -76.2296 -174.61 + 60 7.27516 516 1 0 104.347 -76.8389 -175.85 + 60 239.022 515 1 0 104.343 -76.8502 -175.865 +Number of digits in this event: 12 Using G4ParticleGun... -Particle energy: 8.44362 LIN +Particle energy: 2.66591 LIN Particle: proton Event: 61 -Number of tracker hits in this event: 26 - 61 133.835 1368 10 1 93.8157 36.5272 95.55 - 61 98.0746 1082 10 0 93.8159 36.5274 94.15 - 61 98.2058 1368 9 1 93.8408 36.5405 65.55 - 61 107.856 1082 9 0 93.8427 36.54 64.15 - 61 134.634 1368 8 1 93.8814 36.5297 35.55 - 61 83.6346 1082 8 0 93.8828 36.5289 34.15 - 61 115.111 1368 7 1 93.9111 36.5133 5.55 - 61 126.91 1082 7 0 93.9127 36.513 4.15 - 61 275.423 1368 6 1 93.9427 36.5095 -24.45 - 61 116.937 1082 6 0 93.9441 36.5086 -25.85 - 61 103.613 1369 5 1 93.9719 36.4872 -54.45 - 61 115.793 1082 5 0 93.9721 36.4881 -55.85 - 61 102.056 1369 4 1 93.9726 36.5004 -84.45 - 61 140.246 1082 4 0 93.9722 36.5012 -85.85 - 61 131.574 1369 3 1 93.9612 36.514 -114.45 - 61 162.267 1082 3 0 93.9611 36.5149 -115.85 - 61 145.925 1369 2 1 93.959 36.5329 -144.45 - 61 124.317 1082 2 0 93.9582 36.5338 -145.85 - 61 122.436 1368 1 1 93.9403 36.5482 -174.45 - 61 221.046 1082 1 0 93.9399 36.5488 -175.85 - 61 106.612 1368 0 1 93.9281 36.5564 -204.45 - 61 141.629 1082 0 0 93.9275 36.5572 -205.85 - 61 13.741 908 1 0 52.394 1.66857 -176.25 - 61 147.093 907 1 0 52.3628 1.64998 -176.236 - 61 90.6376 906 1 0 52.2267 1.44994 -176.088 - 61 248.414 905 1 0 52.2597 1.25 -176.069 -Number of digits in this event: 15 +Number of tracker hits in this event: 21 + 61 114.108 1560 9 1 132.257 25.1313 65.55 + 61 92.0214 1025 9 0 132.256 25.1305 64.15 + 61 133.765 1560 8 1 132.238 25.1163 35.55 + 61 114.869 1025 8 0 132.239 25.1139 34.15 + 61 109.275 1560 7 1 132.275 25.0576 5.55 + 61 100.889 1025 7 0 132.277 25.0546 4.15 + 61 119.117 1560 6 1 132.31 24.9851 -24.45 + 61 102.923 1024 6 0 132.316 24.978 -25.85 + 61 169.247 1561 5 1 132.449 24.8294 -54.45 + 61 166.006 1023 5 0 132.457 24.8225 -55.85 + 61 155.37 1562 4 1 132.618 24.6768 -84.45 + 61 139.137 1023 4 0 132.623 24.6688 -85.85 + 61 151.911 1562 3 1 132.709 24.5114 -114.45 + 61 105.683 1022 3 0 132.713 24.503 -115.85 + 61 416.811 1563 2 1 132.79 24.3234 -144.45 + 61 181.939 1021 2 0 132.794 24.3128 -145.85 + 61 173.459 1563 1 1 132.863 24.0965 -174.45 + 61 94.9254 1020 1 0 132.868 24.0896 -175.85 + 61 124.572 1564 0 1 132.953 23.9455 -204.45 + 61 137.282 1019 0 0 132.957 23.9375 -205.85 + 61 71.6037 1562 2 1 132.75 24.4604 -144.537 +Number of digits in this event: 12 Using G4ParticleGun... -Particle energy: 4.76787 LIN +Particle energy: 9.7018 LIN Particle: proton Event: 62 -Number of tracker hits in this event: 24 - 62 221.247 813 11 1 -17.4318 66.5999 125.55 - 62 170.995 1232 11 0 -17.4303 66.6001 124.15 - 62 103.055 813 10 1 -17.3993 66.5966 95.55 - 62 124.899 1232 10 0 -17.3988 66.5974 94.15 - 62 127.875 813 9 1 -17.4003 66.6219 65.55 - 62 145.085 1232 9 0 -17.4002 66.6235 64.15 - 62 150.919 813 8 1 -17.3997 66.6562 35.55 - 62 134.157 1233 8 0 -17.4 66.6551 34.15 - 62 106.78 813 7 1 -17.4053 66.6322 5.55 - 62 97.3346 1232 7 0 -17.4097 66.6331 4.15 - 62 240.771 812 6 1 -17.5037 66.6548 -24.45 - 62 97.9136 1233 6 0 -17.5092 66.6562 -25.85 - 62 126.768 812 5 1 -17.6215 66.6796 -54.45 - 62 108.601 1233 5 0 -17.626 66.6813 -55.85 - 62 113.544 811 4 1 -17.7155 66.719 -84.45 - 62 102.128 1233 4 0 -17.721 66.7198 -85.85 - 62 110.354 811 3 1 -17.8252 66.7427 -114.45 - 62 158.608 1233 3 0 -17.8298 66.7434 -115.85 - 62 95.1508 810 2 1 -17.9255 66.7566 -144.45 - 62 115.211 1233 2 0 -17.928 66.7571 -145.85 - 62 130.27 810 1 1 -17.9774 66.7627 -174.45 - 62 163.084 1233 1 0 -17.9804 66.7647 -175.85 - 62 119.577 810 0 1 -18.0431 66.8051 -204.45 - 62 122.397 1233 0 0 -18.0463 66.8068 -205.85 -Number of digits in this event: 14 +Number of tracker hits in this event: 26 + 62 107.828 692 11 1 -41.5718 -12.8763 125.55 + 62 104.638 835 11 0 -41.5718 -12.8768 124.15 + 62 94.1825 692 10 1 -41.571 -12.8847 95.55 + 62 113.562 835 10 0 -41.5709 -12.8864 94.15 + 62 136.738 692 9 1 -41.5678 -12.9202 65.55 + 62 161.468 835 9 0 -41.5678 -12.9221 64.15 + 62 240.433 692 8 1 -41.5687 -12.9598 35.55 + 62 119.171 835 8 0 -41.5682 -12.9618 34.15 + 62 154.875 692 7 1 -41.5574 -13.0015 5.55 + 62 121.804 835 7 0 -41.5578 -13.0039 4.15 + 62 102.877 692 6 1 -41.5526 -13.0605 -24.45 + 62 105.509 834 6 0 -41.5528 -13.0631 -25.85 + 62 94.8544 692 5 1 -41.5558 -13.1167 -54.45 + 62 102.243 834 5 0 -41.5562 -13.1194 -55.85 + 62 150.42 692 4 1 -41.5646 -13.1736 -84.45 + 62 107.873 834 4 0 -41.5657 -13.1763 -85.85 + 62 129.454 692 3 1 -41.5931 -13.235 -114.45 + 62 107.232 834 3 0 -41.5945 -13.2375 -115.85 + 62 106.986 692 2 1 -41.6234 -13.29 -144.45 + 62 124.531 833 2 0 -41.6246 -13.2928 -145.85 + 62 109.994 692 1 1 -41.6496 -13.3512 -174.45 + 62 117.041 833 1 0 -41.6508 -13.3535 -175.85 + 62 158.191 691 0 1 -41.6735 -13.4028 -204.45 + 62 101.243 833 0 0 -41.6739 -13.4058 -205.85 + 62 165.323 842 8 0 -40.8922 -11.6098 34.1496 + 62 234.929 841 8 0 -40.723 -11.65 33.8796 +Number of digits in this event: 12 Using G4ParticleGun... -Particle energy: 3.0454 LIN +Particle energy: 3.43469 LIN Particle: proton Event: 63 Number of tracker hits in this event: 22 - 63 131.376 1423 10 1 104.886 3.45626 95.55 - 63 117.231 917 10 0 104.887 3.45721 94.15 - 63 109.916 1423 9 1 104.898 3.47831 65.55 - 63 161.705 917 9 0 104.9 3.47956 64.15 - 63 128.925 1423 8 1 104.933 3.50306 35.55 - 63 109.114 917 8 0 104.936 3.50493 34.15 - 63 237.34 1424 7 1 104.996 3.54703 5.55 - 63 205.411 917 7 0 105.003 3.55035 4.15 - 63 111.4 1425 6 1 105.166 3.6193 -24.45 - 63 210.921 917 6 0 105.177 3.62518 -25.85 - 63 110.227 1426 5 1 105.381 3.75265 -54.45 - 63 113.666 918 5 0 105.392 3.75862 -55.85 - 63 100.711 1427 4 1 105.618 3.87082 -84.45 - 63 102.595 919 4 0 105.629 3.87573 -85.85 - 63 131.518 1428 3 1 105.841 3.97766 -114.45 - 63 124.345 919 3 0 105.849 3.98219 -115.85 - 63 99.292 1429 2 1 106.029 4.0888 -144.45 - 63 128.185 920 2 0 106.041 4.1001 -145.85 - 63 108.235 1430 1 1 106.288 4.33643 -174.45 - 63 113.897 921 1 0 106.297 4.34995 -175.85 - 63 89.8141 1431 0 1 106.488 4.61931 -204.45 - 63 103.013 922 0 0 106.499 4.63279 -205.85 -Number of digits in this event: 10 + 63 111.517 1553 9 1 130.934 2.39185 65.55 + 63 156.22 911 9 0 130.934 2.39315 64.15 + 63 181.766 1553 8 1 130.928 2.42282 35.55 + 63 98.0673 911 8 0 130.928 2.4276 34.15 + 63 180.379 1553 7 1 130.936 2.52809 5.55 + 63 122.194 912 7 0 130.935 2.53255 4.15 + 63 148.582 1553 6 1 130.916 2.62271 -24.45 + 63 92.7516 912 6 0 130.916 2.62793 -25.85 + 63 121.095 1553 5 1 130.908 2.73876 -54.45 + 63 110.836 913 5 0 130.905 2.74257 -55.85 + 63 414.882 1553 4 1 130.854 2.81942 -84.45 + 63 184.552 913 4 0 130.849 2.82233 -85.85 + 63 216.927 1553 3 1 130.76 2.88527 -114.45 + 63 121.155 914 3 0 130.756 2.88744 -115.85 + 63 100.025 1552 2 1 130.677 2.9356 -144.45 + 63 109.006 914 2 0 130.675 2.93875 -145.85 + 63 102.665 1552 1 1 130.635 3.01695 -174.45 + 63 275.507 914 1 0 130.635 3.02086 -175.85 + 63 126.058 1552 0 1 130.637 3.09264 -204.45 + 63 119.158 915 0 0 130.637 3.09507 -205.85 + 63 28.6914 915 1 0 130.594 3.05 -176.024 + 63 229.658 1554 6 1 130.95 2.69089 -24.5417 +Number of digits in this event: 16 Using G4ParticleGun... -Particle energy: 8.45146 LIN +Particle energy: 5.88042 LIN Particle: proton Event: 64 -Number of tracker hits in this event: 24 - 64 118.507 1127 11 1 45.5272 44.2639 125.55 - 64 132.643 1121 11 0 45.5263 44.2637 124.15 - 64 116.959 1127 10 1 45.5077 44.2628 95.55 - 64 105.578 1121 10 0 45.5068 44.2629 94.15 - 64 127.764 1127 9 1 45.488 44.2634 65.55 - 64 118.134 1121 9 0 45.4873 44.2638 64.15 - 64 119.307 1127 8 1 45.4731 44.2713 35.55 - 64 254.13 1121 8 0 45.4724 44.2706 34.15 - 64 140.446 1127 7 1 45.4573 44.2586 5.55 - 64 112.476 1121 7 0 45.4562 44.2586 4.15 - 64 119.515 1126 6 1 45.4327 44.2535 -24.45 - 64 102.718 1121 6 0 45.4311 44.2537 -25.85 - 64 117.202 1126 5 1 45.3995 44.26 -54.45 - 64 158.587 1121 5 0 45.3971 44.2607 -55.85 - 64 123.765 1126 4 1 45.3485 44.2801 -84.45 - 64 121.723 1121 4 0 45.3464 44.2812 -85.85 - 64 96.0903 1126 3 1 45.3014 44.3071 -114.45 - 64 175.948 1121 3 0 45.299 44.3075 -115.85 - 64 123.323 1125 2 1 45.2497 44.321 -144.45 - 64 149.483 1121 2 0 45.2464 44.3208 -145.85 - 64 112.288 1125 1 1 45.1736 44.3138 -174.45 - 64 101.959 1121 1 0 45.1695 44.3141 -175.85 - 64 135.52 1125 0 1 45.0873 44.3255 -204.45 - 64 120.02 1121 0 0 45.0832 44.3266 -205.85 -Number of digits in this event: 16 +Number of tracker hits in this event: 16 + 64 106.5 1609 7 1 142.148 36.0585 5.55 + 64 106.207 1080 7 0 142.148 36.0577 4.15 + 64 177.121 1610 6 1 142.153 36.0522 -24.45 + 64 126.471 1079 6 0 142.151 36.0499 -25.85 + 64 108.877 1609 5 1 142.11 36.0048 -54.45 + 64 124.907 1079 5 0 142.107 36.0034 -55.85 + 64 174.555 1609 4 1 142.043 35.9745 -84.45 + 64 166.235 1079 4 0 142.037 35.9744 -85.85 + 64 100.319 1608 3 1 141.907 35.9725 -114.45 + 64 117.653 1079 3 0 141.899 35.973 -115.85 + 64 102.604 1607 2 1 141.736 35.9843 -144.45 + 64 114.295 1079 2 0 141.728 35.9842 -145.85 + 64 106.298 1607 1 1 141.576 35.9791 -174.45 + 64 160.022 1079 1 0 141.57 35.9769 -175.85 + 64 113.92 1606 0 1 141.444 35.9275 -204.45 + 64 97.3866 1079 0 0 141.439 35.9244 -205.85 +Number of digits in this event: 7 Using G4ParticleGun... -Particle energy: 3.46322 LIN +Particle energy: 6.97883 LIN Particle: proton Event: 65 -Number of tracker hits in this event: 76 - 65 111.65 1472 9 1 114.591 37.6869 65.55 - 65 110.058 1088 9 0 114.593 37.6857 64.15 - 65 126.313 1472 8 1 114.621 37.6567 35.55 - 65 146.696 1088 8 0 114.623 37.6557 34.15 - 65 91.9258 1472 7 1 114.653 37.633 5.55 - 65 110.434 1087 7 0 114.655 37.6332 4.15 - 65 124.655 1472 6 1 114.678 37.6359 -24.45 - 65 119.241 1087 6 0 114.679 37.6349 -25.85 - 65 140.4 1472 5 1 114.702 37.6158 -54.45 - 65 109.081 1087 5 0 114.703 37.6143 -55.85 - 65 401.079 1472 4 1 114.714 37.5794 -84.45 - 65 112.351 1087 4 0 114.714 37.5791 -85.85 - 65 115.004 1472 3 1 114.734 37.5751 -114.45 - 65 135.181 1087 3 0 114.734 37.5741 -115.85 - 65 121.999 1472 2 1 114.733 37.5533 -144.45 - 65 96.1263 1087 2 0 114.733 37.5524 -145.85 - 65 135.913 1472 1 1 114.729 37.5322 -174.45 - 65 94.2619 1087 1 0 114.729 37.5317 -175.85 - 65 107.769 1472 0 1 114.716 37.5293 -204.45 - 65 122.905 1087 0 0 114.715 37.5304 -205.85 - 65 92.6728 1240 1 0 -61.2175 68.0899 -176.25 - 65 76.4853 1241 1 0 -61.317 68.2502 -175.984 - 65 127.746 591 1 1 -61.7329 68.9534 -174.85 - 65 34.2665 590 1 1 -61.85 69.1601 -174.518 - 65 136.634 1252 2 0 -71.4402 70.5566 -146.249 - 65 101.775 541 2 1 -71.7 70.3512 -144.85 - 65 202.307 1308 3 0 -81.013 81.6829 -116.25 - 65 0.154984 1309 3 0 -81.1138 81.85 -115.851 - 65 130.727 494 3 1 -81.1712 82.1981 -114.85 - 65 48.5309 1404 4 0 -62.629 101.068 -86.25 - 65 100.166 1405 4 0 -62.5484 101.15 -86.1325 - 65 41.5484 1406 4 0 -62.4116 101.35 -85.9358 - 65 252.898 592 4 1 -61.6497 102.599 -84.85 - 65 129.402 593 4 1 -61.4497 102.91 -84.6161 - 65 34.892 594 4 1 -61.2498 103.253 -84.4918 - 65 60.9063 1497 5 0 -70.0584 119.646 -56.25 - 65 82.8959 1498 5 0 -70.1224 119.75 -56.0864 - 65 32.217 546 5 1 -70.7926 120.584 -54.85 - 65 154.821 545 5 1 -70.8502 120.658 -54.7487 - 65 84.0956 1378 6 0 -91.4721 95.9119 -26.25 - 65 102.184 1377 6 0 -91.6267 95.75 -26.0542 - 65 51.6961 436 6 1 -92.8458 94.8981 -24.85 - 65 79.4091 435 6 1 -92.95 94.8359 -24.74 - 65 5.53548 434 6 1 -93.15 94.7352 -24.4645 - 65 75.2507 432 6 1 -93.5635 94.8151 -24.4505 - 65 96.2144 431 6 1 -93.7505 94.9223 -24.5965 - 65 39.7463 430 6 1 -93.95 95.0894 -24.7463 - 65 41.7629 1381 6 0 -95.0849 96.4549 -25.85 - 65 96.6054 1382 6 0 -95.1703 96.55 -25.9369 - 65 107.054 1383 6 0 -95.3926 96.75 -26.1026 - 65 3.39061 1384 6 0 -95.6455 96.9502 -26.2479 - 65 102.639 1612 6 0 -163.485 142.667 -26.25 - 65 106.584 1613 6 0 -163.592 142.75 -26.1224 - 65 146.8 79 6 1 -164.16 143.114 -24.85 - 65 97.5926 334 10 1 -113.283 13.3327 95.5497 - 65 18.324 1362 4 0 -73.121 92.5738 -86.25 - 65 236.82 1167 1 0 -93.7482 53.4633 -176.25 - 65 69.2321 419 1 1 -96.2164 53.5773 -174.85 - 65 58.7786 418 1 1 -96.3502 53.5801 -174.783 - 65 110.676 417 1 1 -96.55 53.5867 -174.691 - 65 48.2399 416 1 1 -96.75 53.5897 -174.591 - 65 24.6594 415 1 1 -96.9503 53.5878 -174.496 - 65 34.5328 1015 2 0 -115.611 23.1345 -146.25 - 65 133.293 1014 2 0 -115.667 23.0499 -146.165 - 65 31.1993 1013 2 0 -115.808 22.85 -145.932 - 65 198.943 319 2 1 -116.325 22.1622 -144.85 - 65 174.923 318 2 1 -116.35 22.1292 -144.8 - 65 58.6705 973 3 0 -131.395 14.6717 -116.25 - 65 136.423 972 3 0 -131.443 14.65 -116.155 - 65 65.0531 239 3 1 -132.222 14.4364 -114.85 - 65 59.3413 238 3 1 -132.35 14.4043 -114.623 - 65 162.027 948 2 0 146.184 9.79593 -146.25 - 65 31.5024 1473 2 1 114.75 37.5297 -144.834 - 65 147.307 1076 2 0 116.643 35.4246 -145.85 - 65 134.654 1075 2 0 116.679 35.25 -145.947 - 65 70.5731 1471 4 1 114.55 37.7017 -84.5068 -Number of digits in this event: 29 +Number of tracker hits in this event: 37 + 65 169.782 815 11 1 -16.9386 -49.6473 125.55 + 65 152.566 652 11 0 -16.9376 -49.6478 124.15 + 65 111.503 815 10 1 -16.914 -49.6554 95.55 + 65 126.464 651 10 0 -16.9122 -49.6562 94.15 + 65 115.025 815 9 1 -16.879 -49.6682 65.55 + 65 138.529 651 9 0 -16.8773 -49.6693 64.15 + 65 124.554 816 8 1 -16.8427 -49.6915 35.55 + 65 104.422 651 8 0 -16.8415 -49.6927 34.15 + 65 100.651 816 7 1 -16.8179 -49.7126 5.55 + 65 109.005 651 7 0 -16.816 -49.7131 4.15 + 65 106.032 816 6 1 -16.7767 -49.7275 -24.45 + 65 112.646 651 6 0 -16.7734 -49.7281 -25.85 + 65 120.036 816 5 1 -16.7066 -49.7391 -54.45 + 65 168.828 651 5 0 -16.7033 -49.739 -55.85 + 65 183.069 817 4 1 -16.6339 -49.7386 -84.45 + 65 145.887 651 4 0 -16.6304 -49.7383 -85.85 + 65 149.768 817 3 1 -16.563 -49.7343 -114.45 + 65 120.028 651 3 0 -16.5592 -49.7327 -115.85 + 65 131.702 817 2 1 -16.4885 -49.7031 -144.45 + 65 117.645 651 2 0 -16.4861 -49.7017 -145.85 + 65 107.693 818 1 1 -16.4372 -49.6702 -174.45 + 65 93.9198 651 1 0 -16.4352 -49.6679 -175.85 + 65 97.5064 818 0 1 -16.3891 -49.617 -204.45 + 65 87.2121 652 0 0 -16.3864 -49.6139 -205.85 + 65 9.56006 1323 3 1 84.65 -117.699 -114.58 + 65 8.80025 784 0 1 -23.05 -96.1826 -204.812 + 65 165.415 1035 4 1 27.0748 -38.2697 -84.85 + 65 1.98658 538 12 0 -136.292 -72.25 153.803 + 65 63.9382 215 12 1 -136.966 -71.4735 155.15 + 65 60.8555 536 12 0 -138.805 -72.7096 154.15 + 65 2732.71 148 4 1 -150.419 95.5478 -84.7656 + 65 438.239 149 4 1 -150.35 95.5935 -84.8152 + 65 869.72 1381 4 0 -148.894 96.4913 -85.85 + 65 3152.08 1382 4 0 -148.799 96.55 -85.9178 + 65 1623.26 1383 4 0 -148.474 96.75 -86.1488 + 65 18.2421 1314 6 0 87.7764 82.8563 -26.0528 + 65 182.729 14 2 1 -177.195 -148.778 -144.781 +Number of digits in this event: 22 Using G4ParticleGun... -Particle energy: 2.17916 LIN +Particle energy: 6.87002 LIN Particle: proton Event: 66 -Number of tracker hits in this event: 58 - 66 131.599 678 11 1 -44.384 -51.1437 125.55 - 66 116.09 644 11 0 -44.3855 -51.1459 124.15 - 66 130.608 678 10 1 -44.4138 -51.186 95.55 - 66 301.721 644 10 0 -44.4171 -51.1852 94.15 - 66 105.352 677 9 1 -44.4885 -51.1658 65.55 - 66 118.245 644 9 0 -44.4958 -51.1648 64.15 - 66 100.608 677 8 1 -44.6434 -51.1514 35.55 - 66 90.844 644 8 0 -44.6505 -51.1497 34.15 - 66 125.06 676 7 1 -44.8014 -51.1103 5.55 - 66 122.525 644 7 0 -44.811 -51.1116 4.15 - 66 102.85 675 6 1 -44.9958 -51.1322 -24.45 - 66 132.33 644 6 0 -45.0056 -51.1322 -25.85 - 66 117.442 674 5 1 -45.1992 -51.1441 -54.45 - 66 140.557 644 5 0 -45.2041 -51.1453 -55.85 - 66 129.034 673 4 1 -45.308 -51.1786 -84.45 - 66 148.649 644 4 0 -45.3122 -51.1818 -85.85 - 66 95.8556 673 3 1 -45.3921 -51.2546 -114.45 - 66 132.089 643 3 0 -45.3968 -51.2585 -115.85 - 66 124.73 672 2 1 -45.49 -51.3402 -144.45 - 66 149.48 643 2 0 -45.495 -51.3471 -145.85 - 66 138.993 672 1 1 -45.5933 -51.4967 -174.45 - 66 106.813 642 1 0 -45.6005 -51.4998 -175.85 - 66 22776.5 671 0 1 -45.7397 -51.5723 -204.45 - 66 69.3551 851 2 1 -9.85 25.5537 -144.718 - 66 177.652 850 2 1 -9.85 25.8599 -144.488 - 66 193.869 849 2 1 -10.05 26.2615 -144.589 - 66 248.044 1035 2 0 -7.94844 27.05 -145.85 - 66 11.9772 1034 2 0 -7.9251 27.05 -145.864 - 66 99.3549 1036 2 0 -7.86229 27.25 -146.028 - 66 4893.58 672 0 1 -45.65 -51.6222 -204.524 - 66 567.974 673 0 1 -45.45 -51.7384 -204.606 - 66 63.7778 624 0 0 -41.2648 -55.2304 -205.868 - 66 176.993 642 0 0 -45.399 -51.5996 -205.85 - 66 550.395 643 0 0 -45.7851 -51.4412 -205.85 - 66 109.306 520 13 1 -75.85 -145.43 185.353 - 66 174.557 519 13 1 -76.0502 -145.514 185.47 - 66 70.5681 499 0 0 -165.019 -80.0921 -206.04 - 66 7.44847 298 4 0 -149.933 -120.35 -86.1912 - 66 106.626 151 4 1 -149.918 -120.604 -84.85 - 66 43.201 150 4 1 -149.95 -120.605 -84.8018 - 66 2746.57 636 0 0 -45.5639 -52.6677 -205.85 - 66 2816.98 635 0 0 -45.5384 -52.85 -206.076 - 66 430.166 706 1 0 -94.7785 -38.8224 -176.25 - 66 27.8385 707 1 0 -95.4419 -38.65 -175.868 - 66 57.4983 414 1 1 -97.251 -38.1524 -174.85 - 66 137.28 413 1 1 -97.35 -38.1252 -174.794 - 66 101.761 412 1 1 -97.55 -38.0699 -174.682 - 66 152.472 411 1 1 -97.75 -38.0123 -174.568 - 66 5.61133 410 1 1 -97.95 -37.9539 -174.455 - 66 609.989 786 2 0 -154.11 -22.7843 -146.25 - 66 248.011 787 2 0 -154.616 -22.65 -145.996 - 66 174.709 115 2 1 -156.999 -22.0484 -144.85 - 66 117.043 114 2 1 -157.15 -22.0102 -144.777 - 66 259.292 113 2 1 -157.35 -21.9603 -144.68 - 66 186.488 112 2 1 -157.55 -21.9103 -144.583 - 66 41.2408 111 2 1 -157.75 -21.8617 -144.485 - 66 201.698 670 0 1 -45.85 -51.5515 -204.605 - 66 23.3331 669 0 1 -46.05 -51.5139 -204.817 -Number of digits in this event: 37 +Number of tracker hits in this event: 23 + 66 106.951 1031 10 1 26.2971 -82.6548 95.55 + 66 144.647 486 10 0 26.2966 -82.6546 94.15 + 66 181.429 1031 9 1 26.2838 -82.6488 65.55 + 66 150.857 487 9 0 26.2837 -82.6474 64.15 + 66 113.922 1031 8 1 26.2856 -82.6193 35.55 + 66 390.47 487 8 0 26.2854 -82.6169 34.15 + 66 144.098 1031 7 1 26.2787 -82.5678 5.55 + 66 131.677 487 7 0 26.2778 -82.5666 4.15 + 66 121.181 1031 6 1 26.2586 -82.5426 -24.45 + 66 116.078 487 6 0 26.2578 -82.541 -25.85 + 66 108.008 1030 5 1 26.2394 -82.5068 -54.45 + 66 120.725 487 5 0 26.2384 -82.5055 -55.85 + 66 106.927 1030 4 1 26.2157 -82.4761 -84.45 + 66 245.99 487 4 0 26.2161 -82.4737 -85.85 + 66 80.9882 1030 3 1 26.2188 -82.4282 -114.45 + 66 113.806 488 3 0 26.2187 -82.4268 -115.85 + 66 185.095 1030 2 1 26.2167 -82.4001 -144.45 + 66 132.439 488 2 0 26.2176 -82.3988 -145.85 + 66 112.166 1030 1 1 26.2375 -82.3744 -174.45 + 66 122.403 488 1 0 26.2395 -82.3735 -175.85 + 66 112.892 1031 0 1 26.2757 -82.3542 -204.45 + 66 153.109 488 0 0 26.2772 -82.3526 -205.85 + 66 123.143 1031 5 1 26.25 -82.4864 -54.6163 +Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 3.92468 LIN +Particle energy: 5.81581 LIN Particle: proton Event: 67 -Number of tracker hits in this event: 85 - 67 24214.2 892 10 1 -1.53255 -114.989 95.55 - 67 1776.05 893 10 1 -1.45 -114.952 95.4633 - 67 2038.32 894 10 1 -1.25 -114.864 95.4469 - 67 2869.5 895 10 1 -1.05 -114.775 95.4246 - 67 4148.06 896 10 1 -0.85 -114.688 95.3976 - 67 96.5569 331 10 0 -1.92802 -113.852 94.15 - 67 120.707 332 10 0 -1.96365 -113.75 94.0307 - 67 24.2657 333 10 0 -2.03312 -113.55 93.7979 - 67 206.91 847 9 1 -10.4864 -89.2705 65.55 - 67 2.46715 459 9 0 -10.8948 -88.055 64.15 - 67 116.59 460 9 0 -10.8965 -88.05 64.1442 - 67 99.0803 461 9 0 -10.9637 -87.85 63.914 - 67 13.8355 804 8 1 -19.2417 -63.2419 35.55 - 67 191.932 803 8 1 -19.25 -63.2179 35.5228 - 67 91.0413 590 8 0 -19.6682 -62.0066 34.15 - 67 106.437 591 8 0 -19.7223 -61.85 33.9725 - 67 83.1819 758 7 1 -28.4155 -36.7507 5.55 - 67 162.101 757 7 1 -28.45 -36.6519 5.43757 - 67 40.2828 722 7 0 -28.844 -35.5193 4.15 - 67 247.078 723 7 0 -28.8681 -35.45 4.07123 - 67 133.039 724 7 0 -28.9377 -35.25 3.84342 - 67 135.721 712 6 1 -37.5662 -10.429 -24.45 - 67 73.1879 711 6 1 -37.65 -10.1917 -24.7155 - 67 82.879 854 6 0 -38.0054 -9.17638 -25.85 - 67 154.408 855 6 0 -38.0497 -9.05 -25.9912 - 67 32.2542 856 6 0 -38.1197 -8.85 -26.2147 - 67 62.4282 665 5 1 -47.012 16.4004 -54.45 - 67 171.542 664 5 1 -47.05 16.5072 -54.57 - 67 3.26781 987 5 0 -47.4546 17.644 -55.85 - 67 160.066 988 5 0 -47.4567 17.65 -55.8567 - 67 85.8834 989 5 0 -47.5279 17.85 -56.0819 - 67 232.058 617 4 1 -56.4783 42.9834 -84.45 - 67 8.68066 1120 4 0 -56.9031 44.2345 -85.85 - 67 116.107 1121 4 0 -56.9083 44.25 -85.8673 - 67 113.439 1122 4 0 -56.9762 44.45 -86.091 - 67 281.324 572 3 1 -65.5023 69.7986 -114.45 - 67 7.45538 1254 3 0 -65.9156 71.0365 -115.85 - 67 142.001 1255 3 0 -65.9202 71.05 -115.865 - 67 104.085 1256 3 0 -65.987 71.25 -116.091 - 67 181.942 528 2 1 -74.3598 96.343 -144.45 - 67 57.8321 527 2 1 -74.45 96.6108 -144.755 - 67 107.961 1387 2 0 -74.7758 97.5685 -145.85 - 67 138.776 1388 2 0 -74.8376 97.75 -146.058 - 67 240.988 483 1 1 -83.2916 122.493 -174.45 - 67 37.3483 1517 1 0 -83.7176 123.698 -175.85 - 67 132.962 1518 1 0 -83.7359 123.75 -175.91 - 67 45.5649 1519 1 0 -83.8067 123.95 -176.142 - 67 251.653 438 0 1 -92.3908 148.343 -204.45 - 67 118.397 1647 0 0 -92.8166 149.564 -205.85 - 67 102.902 1648 0 0 -92.8813 149.75 -206.063 - 67 11.2742 1240 5 0 -44.3442 68.224 -56.25 - 67 137.111 1241 5 0 -44.3325 68.2509 -56.2227 - 67 40.4643 1242 5 0 -44.3325 68.4504 -55.9577 - 67 246.78 682 5 1 -43.5869 68.8048 -54.85 - 67 85.9985 725 7 0 -29.1097 -35.0495 3.89623 - 67 38.313 726 7 0 -29.2589 -34.8498 3.79181 - 67 110.829 1056 7 0 -45.6237 31.3504 3.75 - 67 149.478 1055 7 0 -45.7226 31.25 3.84039 - 67 51.1809 1022 12 1 24.5623 -139.381 155.479 - 67 59.7231 145 13 0 36.2568 -151.105 183.75 - 67 209.863 144 13 0 36.3019 -151.15 183.86 - 67 123.226 1084 13 1 36.8534 -151.664 185.15 - 67 22.1515 97 14 0 47.5094 -160.72 213.75 - 67 92.3171 96 14 0 47.5451 -160.75 213.845 - 67 36.746 1139 14 1 48.029 -161.163 215.15 - 67 132.97 1140 14 1 48.05 -161.181 215.206 - 67 82.1628 67 14 0 39.1572 -166.62 213.75 - 67 39.6263 66 14 0 39.1705 -166.75 214.011 - 67 152.003 1096 14 1 39.2989 -167.254 215.15 - 67 124.077 1078 13 1 35.7978 -151.787 185.15 - 67 24.01 139 13 0 34.3242 -152.311 183.751 - 67 92.7558 138 13 0 34.3537 -152.35 183.835 - 67 31.3142 1073 13 1 34.8184 -152.956 185.15 - 67 102.342 1074 13 1 34.85 -152.997 185.239 - 67 257.48 72 14 0 43.7383 -165.621 213.75 - 67 46.6284 71 14 0 43.8342 -165.75 214.035 - 67 19.8505 1120 14 1 44.2288 -166.279 215.15 - 67 390.483 1121 14 1 44.25 -166.306 215.209 - 67 132.323 73 14 0 49.9122 -165.36 213.75 - 67 31.9998 1152 14 1 50.6094 -166.04 215.15 - 67 142.577 1153 14 1 50.65 -166.082 215.237 - 67 135.668 1154 14 1 50.85 -166.212 215.519 - 67 61.238 1155 14 1 51.0504 -166.218 215.439 - 67 350.414 1156 14 1 51.2501 -166.273 215.454 - 67 49.7588 1157 14 1 51.45 -166.246 215.473 -Number of digits in this event: 41 +Number of tracker hits in this event: 56 + 67 211.707 776 11 1 -24.7937 34.293 125.55 + 67 320.807 1071 11 0 -24.7931 34.2915 124.15 + 67 114.74 776 10 1 -24.7843 34.2608 95.55 + 67 95.5409 1071 10 0 -24.7839 34.259 94.15 + 67 103.321 776 9 1 -24.7746 34.2173 65.55 + 67 105.263 1070 9 0 -24.7755 34.215 64.15 + 67 201.828 776 8 1 -24.7964 34.1607 35.55 + 67 210.797 1070 8 0 -24.7986 34.1591 34.15 + 67 131.324 776 7 1 -24.8425 34.1282 5.55 + 67 96.4202 1070 7 0 -24.8444 34.1261 4.15 + 67 111.207 775 6 1 -24.8828 34.0806 -24.45 + 67 155.282 1070 6 0 -24.8849 34.0789 -25.85 + 67 247.385 775 5 1 -24.928 34.0409 -54.45 + 67 143.681 1069 5 0 -24.9289 34.0385 -55.85 + 67 84.3341 775 4 1 -24.9482 33.9903 -84.45 + 67 94.8811 1069 4 0 -24.9493 33.9895 -85.85 + 67 117.123 775 3 1 -24.9662 33.9689 -114.45 + 67 116.033 1069 3 0 -24.9655 33.9549 -115.85 + 67 113.957 775 2 1 -24.9519 33.6721 -144.45 + 67 102.032 1068 2 0 -24.9519 33.6559 -145.85 + 67 100.734 775 1 1 -24.949 33.328 -174.45 + 67 121.512 1066 1 0 -24.9489 33.3133 -175.85 + 67 112.79 775 0 1 -24.9391 33.0115 -204.45 + 67 184.484 1064 0 0 -24.9402 32.9964 -205.85 + 67 34.6042 1066 5 0 -24.4565 33.3068 -55.85 + 67 186.41 1065 5 0 -24.4141 33.25 -55.9402 + 67 30.8266 775 8 1 -24.85 34.1625 35.218 + 67 15.2425 1071 8 0 -25.119 34.25 33.8164 + 67 43.4828 743 7 1 -31.3846 36.4025 5.5498 + 67 97.2747 742 7 1 -31.45 36.4166 5.43061 + 67 130.753 1083 7 0 -32.2718 36.6657 4.15 + 67 189.284 630 6 1 -54.0044 56.8008 -24.45 + 67 112.05 1189 6 0 -54.0479 58.0416 -25.85 + 67 67.8111 1190 6 0 -54.0484 58.05 -25.8596 + 67 67.7167 1191 6 0 -54.0452 58.25 -26.0583 + 67 5.59951 1192 6 0 -54.0331 58.45 -26.2406 + 67 38.4385 646 5 1 -50.7239 87.7159 -54.45 + 67 125.995 647 5 1 -50.6499 87.7345 -54.5594 + 67 19.1983 648 5 1 -50.4499 87.7828 -54.7976 + 67 115.646 1339 5 0 -49.561 87.986 -55.8505 + 67 70.1155 1340 5 0 -49.3563 88.05 -56.1021 + 67 32.0782 768 4 1 -26.2777 94.6542 -84.45 + 67 96.9026 769 4 1 -26.25 94.688 -84.517 + 67 28.5095 1374 4 0 -25.7969 95.1173 -85.85 + 67 96.5742 1375 4 0 -25.7625 95.15 -85.9579 + 67 148.052 823 3 1 -15.4295 102.152 -114.45 + 67 77.0827 1409 3 0 -15.2128 101.958 -115.85 + 67 39.2972 1408 3 0 -15.1994 101.95 -115.948 + 67 2.94419 823 2 1 -15.4463 107.905 -144.45 + 67 101.722 822 2 1 -15.45 107.903 -144.463 + 67 129.684 1437 2 0 -15.6892 107.691 -145.85 + 67 8.93066 1386 2 0 -18.9303 97.3588 -146.25 + 67 95.4537 1385 2 0 -18.9196 97.35 -146.221 + 67 125.819 1384 2 0 -18.8926 97.15 -146.02 + 67 138.01 1249 2 0 14.0759 69.9119 -146.25 + 67 132.645 1252 2 0 -84.5858 70.5704 -146.25 +Number of digits in this event: 20 Using G4ParticleGun... -Particle energy: 5.94217 LIN +Particle energy: 9.26733 LIN Particle: proton Event: 68 Number of tracker hits in this event: 20 - 68 71.0999 292 9 1 -121.574 -58.6754 65.3981 - 68 107.583 606 9 0 -121.574 -58.6755 64.15 - 68 117.826 292 8 1 -121.563 -58.7267 35.55 - 68 158.924 606 8 0 -121.562 -58.729 34.15 - 68 296.685 292 7 1 -121.56 -58.7836 5.55 - 68 119.819 606 7 0 -121.559 -58.787 4.15 - 68 98.3015 293 6 1 -121.544 -58.8572 -24.45 - 68 121.024 605 6 0 -121.543 -58.8598 -25.85 - 68 122.048 293 5 1 -121.486 -58.9186 -54.45 - 68 93.7823 605 5 0 -121.483 -58.9209 -55.85 - 68 112.41 293 4 1 -121.433 -58.9692 -84.45 - 68 96.3379 605 4 0 -121.431 -58.9717 -85.85 - 68 106.352 293 3 1 -121.38 -59.0224 -114.45 - 68 101.759 605 3 0 -121.378 -59.0254 -115.85 - 68 178.492 294 2 1 -121.334 -59.0947 -144.45 - 68 114.377 604 2 0 -121.331 -59.0979 -145.85 - 68 101.745 294 1 1 -121.27 -59.1673 -174.45 - 68 101.55 604 1 0 -121.267 -59.1693 -175.85 - 68 103.278 294 0 1 -121.224 -59.2092 -204.45 - 68 121.052 604 0 0 -121.222 -59.2107 -205.85 -Number of digits in this event: 7 + 68 126.428 975 9 1 15.1565 -125.431 65.55 + 68 112.958 273 9 0 15.1559 -125.431 64.15 + 68 132.577 975 8 1 15.1422 -125.439 35.55 + 68 102.089 273 8 0 15.1417 -125.44 34.15 + 68 104.578 975 7 1 15.1335 -125.447 5.55 + 68 117.949 273 7 0 15.1336 -125.447 4.15 + 68 131.325 975 6 1 15.1353 -125.459 -24.45 + 68 107.224 273 6 0 15.1354 -125.46 -25.85 + 68 85.1886 975 5 1 15.134 -125.473 -54.45 + 68 113.124 273 5 0 15.1338 -125.473 -55.85 + 68 107.654 975 4 1 15.1271 -125.481 -84.45 + 68 108.558 273 4 0 15.1264 -125.481 -85.85 + 68 106.374 975 3 1 15.1088 -125.497 -114.45 + 68 109.852 273 3 0 15.1075 -125.498 -115.85 + 68 119.51 975 2 1 15.0818 -125.503 -144.45 + 68 337.441 273 2 0 15.081 -125.503 -145.85 + 68 104.629 975 1 1 15.0638 -125.505 -174.45 + 68 286.194 273 1 0 15.0604 -125.502 -175.85 + 68 131.519 974 0 1 14.9932 -125.429 -204.45 + 68 137.098 273 0 0 14.9906 -125.425 -205.85 +Number of digits in this event: 8 Using G4ParticleGun... -Particle energy: 6.48186 LIN +Particle energy: 4.82113 LIN Particle: proton Event: 69 Number of tracker hits in this event: 25 - 69 96.4552 457 10 1 -88.6453 -8.26544 95.55 - 69 130.182 858 10 0 -88.6449 -8.26418 94.15 - 69 121.982 457 9 1 -88.632 -8.2428 65.55 - 69 103.693 859 9 0 -88.6316 -8.24025 64.15 - 69 121.06 457 8 1 -88.6238 -8.18957 35.55 - 69 130.812 859 8 0 -88.6223 -8.18726 34.15 - 69 130.426 457 7 1 -88.5874 -8.14489 5.55 - 69 114.745 859 7 0 -88.5856 -8.14218 4.15 - 69 120.31 457 6 1 -88.5511 -8.08638 -24.45 - 69 110.602 859 6 0 -88.5495 -8.08408 -25.85 - 69 124.8 457 5 1 -88.5163 -8.036 -54.45 - 69 99.3169 860 5 0 -88.5141 -8.03361 -55.85 - 69 115.173 457 4 1 -88.4661 -7.98839 -84.45 - 69 119.321 860 4 0 -88.4649 -7.98555 -85.85 - 69 136.048 458 3 1 -88.4336 -7.92508 -114.45 - 69 91.6791 860 3 0 -88.4322 -7.9226 -115.85 - 69 127.001 458 2 1 -88.4054 -7.8722 -144.45 - 69 88.3956 860 2 0 -88.4031 -7.87101 -145.85 - 69 111.433 458 1 1 -88.3602 -7.85146 -174.45 - 69 135.738 861 1 0 -88.361 -7.8496 -175.85 - 69 194.716 458 0 1 -88.3807 -7.8107 -204.45 - 69 109.579 861 0 0 -88.3805 -7.80933 -205.85 - 69 152.882 826 0 0 37.0487 -14.65 -206.093 - 69 35.7165 288 2 1 -122.466 61.6509 -144.848 - 69 159.572 456 9 1 -88.65 -8.23492 65.3622 -Number of digits in this event: 17 + 69 133.289 993 11 1 18.8298 24.2725 125.55 + 69 103.326 1021 11 0 18.8296 24.2733 124.15 + 69 129.751 993 10 1 18.8224 24.2931 95.55 + 69 114.766 1021 10 0 18.8226 24.2924 94.15 + 69 117.934 993 9 1 18.8258 24.2822 65.55 + 69 86.953 1021 9 0 18.8266 24.2815 64.15 + 69 121.629 993 8 1 18.8478 24.2702 35.55 + 69 84.9809 1021 8 0 18.8492 24.2682 34.15 + 69 107.316 994 7 1 18.8775 24.2285 5.55 + 69 124.885 1020 7 0 18.8795 24.2268 4.15 + 69 147.547 994 6 1 18.9194 24.1957 -24.45 + 69 133.838 1020 6 0 18.9216 24.1931 -25.85 + 69 107.843 994 5 1 18.9616 24.1461 -54.45 + 69 113.449 1020 5 0 18.9625 24.1424 -55.85 + 69 113.35 994 4 1 18.9761 24.0683 -84.45 + 69 113.132 1020 4 0 18.9767 24.0649 -85.85 + 69 141.111 994 3 1 18.9907 23.9962 -114.45 + 69 122.765 1019 3 0 18.9919 23.9923 -115.85 + 69 96.8852 994 2 1 19.015 23.9099 -144.45 + 69 117.245 1019 2 0 19.0153 23.9048 -145.85 + 69 120.549 994 1 1 19.0238 23.799 -174.45 + 69 137.969 1018 1 0 19.0246 23.7937 -175.85 + 69 113.565 994 0 1 19.04 23.682 -204.45 + 69 169.653 1018 0 0 19.0419 23.6774 -205.85 + 69 13.6314 1170 0 0 28.8648 54.123 -206.218 +Number of digits in this event: 14 Using G4ParticleGun... -Particle energy: 3.10541 LIN +Particle energy: 8.09258 LIN Particle: proton Event: 70 -Number of tracker hits in this event: 32 - 70 114.341 896 11 1 -0.824074 -72.6728 125.55 - 70 145.258 536 11 0 -0.825064 -72.673 124.15 - 70 103.784 895 10 1 -0.853911 -72.6708 95.55 - 70 108.865 536 10 0 -0.856242 -72.6726 94.15 - 70 101.12 895 9 1 -0.906483 -72.7126 65.55 - 70 153.491 536 9 0 -0.905498 -72.7158 64.15 - 70 107.285 895 8 1 -0.874497 -72.7711 35.55 - 70 92.8407 536 8 0 -0.872303 -72.7748 34.15 - 70 139.923 896 7 1 -0.802141 -72.8512 5.55 - 70 137.566 535 7 0 -0.802136 -72.8527 4.15 - 70 158.602 896 6 1 -0.80593 -72.8768 -24.45 - 70 127.857 535 6 0 -0.805005 -72.8798 -25.85 - 70 131.333 896 5 1 -0.781544 -72.9361 -54.45 - 70 109.174 535 5 0 -0.779357 -72.937 -55.85 - 70 101.612 896 4 1 -0.732469 -72.9576 -84.45 - 70 154.434 535 4 0 -0.730935 -72.9593 -85.85 - 70 101.405 896 3 1 -0.70211 -72.9889 -114.45 - 70 113.144 535 3 0 -0.699703 -72.9898 -115.85 - 70 115.971 897 2 1 -0.64938 -73.0109 -144.45 - 70 104.943 535 2 0 -0.646923 -73.0115 -145.85 - 70 100.346 897 1 1 -0.600006 -73.0174 -174.45 - 70 134.672 535 1 0 -0.597183 -73.0187 -175.85 - 70 278.488 897 0 1 -0.533751 -73.051 -204.45 - 70 109.761 534 0 0 -0.501912 -73.055 -205.85 - 70 98.5496 862 8 1 -7.56441 -75.2374 35.55 - 70 176.111 525 8 0 -7.70007 -74.9699 34.15 - 70 7.40042 526 8 0 -7.79749 -74.85 33.7682 - 70 77.4135 803 7 1 -19.3307 -60.8112 5.55 - 70 102.995 804 7 1 -19.25 -60.6687 5.36936 - 70 274.189 599 7 0 -18.9578 -60.1092 4.15 - 70 776.014 600 7 0 -18.9019 -60.0499 4.00074 - 70 61.9591 601 7 0 -18.984 -59.85 4.10693 -Number of digits in this event: 14 +Number of tracker hits in this event: 18 + 70 96.3487 1590 7 1 138.252 -47.4684 5.55 + 70 126.033 662 7 0 138.251 -47.4683 4.15 + 70 122.784 1590 6 1 138.234 -47.4629 -24.45 + 70 104.872 662 6 0 138.233 -47.4626 -25.85 + 70 114.435 1590 5 1 138.198 -47.4555 -54.45 + 70 166.122 662 5 0 138.196 -47.4553 -55.85 + 70 138.034 1589 4 1 138.147 -47.4404 -84.45 + 70 128.198 663 4 0 138.144 -47.4394 -85.85 + 70 174.256 1589 3 1 138.09 -47.4182 -114.45 + 70 133.934 663 3 0 138.086 -47.4168 -115.85 + 70 121.335 1589 2 1 138.013 -47.39 -144.45 + 70 147.725 663 2 0 138.01 -47.3888 -145.85 + 70 174.258 1588 1 1 137.937 -47.3609 -174.45 + 70 121.387 663 1 0 137.933 -47.36 -175.85 + 70 109.624 1588 0 1 137.852 -47.3431 -204.45 + 70 100.246 663 0 0 137.848 -47.3429 -205.85 + 70 139.528 588 5 0 107.49 -62.2865 -56.25 + 70 80.3107 663 5 0 138.131 -47.4497 -56.2161 +Number of digits in this event: 13 Using G4ParticleGun... -Particle energy: 7.86571 LIN +Particle energy: 3.44892 LIN Particle: proton Event: 71 -Number of tracker hits in this event: 22 - 71 120.122 830 10 1 -13.9739 107.916 95.55 - 71 113.683 1438 10 0 -13.974 107.917 94.15 - 71 251.398 830 9 1 -13.9744 107.935 65.55 - 71 120.584 1438 9 0 -13.9742 107.936 64.15 - 71 267.927 830 8 1 -13.9703 107.95 35.55 - 71 110.373 1439 8 0 -13.9706 107.951 34.15 - 71 154.128 830 7 1 -13.9781 107.972 5.55 - 71 121.31 1439 7 0 -13.9787 107.974 4.15 - 71 198.758 830 6 1 -13.9911 108.004 -24.45 - 71 98.5306 1439 6 0 -13.9919 108.005 -25.85 - 71 104.321 830 5 1 -14.0033 108.042 -54.45 - 71 103.72 1439 5 0 -14.0047 108.044 -55.85 - 71 121.093 830 4 1 -14.0358 108.089 -84.45 - 71 81.7288 1439 4 0 -14.0381 108.09 -85.85 - 71 177.412 829 3 1 -14.0879 108.105 -114.45 - 71 131.695 1439 3 0 -14.09 108.106 -115.85 - 71 235.506 829 2 1 -14.1335 108.143 -144.45 - 71 160.876 1439 2 0 -14.1351 108.143 -145.85 - 71 93.4281 829 1 1 -14.1662 108.139 -174.45 - 71 164.424 1439 1 0 -14.1674 108.14 -175.85 - 71 119.846 829 0 1 -14.1927 108.142 -204.45 - 71 112.104 1439 0 0 -14.1938 108.141 -205.85 -Number of digits in this event: 14 +Number of tracker hits in this event: 21 + 71 101.545 912 9 1 2.59604 -119.782 65.55 + 71 203.511 301 9 0 2.59343 -119.783 64.15 + 71 103.884 912 8 1 2.53194 -119.803 35.55 + 71 84.982 301 8 0 2.52944 -119.804 34.15 + 71 117.599 912 7 1 2.47766 -119.815 5.55 + 71 115.735 301 7 0 2.47542 -119.818 4.15 + 71 99.5155 911 6 1 2.42841 -119.878 -24.45 + 71 103.552 301 6 0 2.42632 -119.883 -25.85 + 71 182.943 911 5 1 2.37737 -119.984 -54.45 + 71 96.3955 300 5 0 2.37389 -119.991 -55.85 + 71 122.986 911 4 1 2.30106 -120.125 -84.45 + 71 100.295 300 4 0 2.29725 -120.132 -85.85 + 71 100.501 910 3 1 2.2202 -120.256 -114.45 + 71 125.081 299 3 0 2.21511 -120.26 -115.85 + 71 194.575 910 2 1 2.1028 -120.347 -144.45 + 71 118.054 299 2 0 2.09752 -120.349 -145.85 + 71 9.75742 298 2 0 2.09612 -120.35 -146.223 + 71 101.068 909 1 1 1.98718 -120.403 -174.45 + 71 112.579 298 1 0 1.98118 -120.404 -175.85 + 71 123.94 909 0 1 1.85402 -120.427 -204.45 + 71 125.505 298 0 0 1.84642 -120.43 -205.85 +Number of digits in this event: 8 Using G4ParticleGun... -Particle energy: 2.9801 LIN +Particle energy: 1.07975 LIN Particle: proton Event: 72 -Number of tracker hits in this event: 28 - 72 359.24 822 11 1 -15.585 -61.6612 125.55 - 72 112.936 591 11 0 -15.5821 -61.6641 124.15 - 72 90.6461 822 10 1 -15.53 -61.6961 95.55 - 72 107.136 591 10 0 -15.5299 -61.6958 94.15 - 72 101.745 822 9 1 -15.5239 -61.697 65.55 - 72 100.665 591 9 0 -15.5214 -61.6967 64.15 - 72 297.596 822 8 1 -15.4755 -61.6892 35.55 - 72 104.877 591 8 0 -15.4728 -61.6868 34.15 - 72 110.531 823 7 1 -15.4202 -61.6391 5.55 - 72 90.4504 592 7 0 -15.4192 -61.6384 4.15 - 72 126.085 823 6 1 -15.3994 -61.6301 -24.45 - 72 127.235 592 6 0 -15.3971 -61.6285 -25.85 - 72 93.8358 823 5 1 -15.3447 -61.591 -54.45 - 72 197.57 592 5 0 -15.3429 -61.59 -55.85 - 72 119.031 823 4 1 -15.3079 -61.5748 -84.45 - 72 101.102 592 4 0 -15.3058 -61.5758 -85.85 - 72 138.934 823 3 1 -15.2608 -61.596 -114.45 - 72 185.119 592 3 0 -15.259 -61.596 -115.85 - 72 286.1 824 2 1 -15.217 -61.5964 -144.45 - 72 183.432 592 2 0 -15.2157 -61.5956 -145.85 - 72 102.709 824 1 1 -15.1928 -61.5812 -174.45 - 72 130.954 592 1 0 -15.1896 -61.5803 -175.85 - 72 118.075 824 0 1 -15.1222 -61.5583 -204.45 - 72 120.475 592 0 0 -15.1175 -61.5551 -205.85 - 72 1.46437 825 2 1 -15.0499 -61.6667 -144.819 - 72 36.322 593 2 0 -15.2497 -61.4499 -145.858 - 72 28.8258 822 2 1 -15.4682 -61.6938 -144.85 - 72 59.6657 590 2 0 -14.6228 -61.9088 -145.85 -Number of digits in this event: 12 +Number of tracker hits in this event: 20 + 72 267.789 346 9 1 -110.804 68.1541 65.55 + 72 211.699 1240 9 0 -110.807 68.1519 64.15 + 72 119.647 346 8 1 -110.841 68.1024 35.55 + 72 161.564 1240 8 0 -110.843 68.0989 34.15 + 72 109.472 346 7 1 -110.882 68.0245 5.55 + 72 152.33 1239 7 0 -110.886 68.0251 4.15 + 72 217.156 345 6 1 -110.964 68.0417 -24.45 + 72 143.887 1239 6 0 -110.971 68.0426 -25.85 + 72 172.038 345 5 1 -111.096 68.0582 -54.45 + 72 115.74 1240 5 0 -111.101 68.0614 -55.85 + 72 190.192 344 4 1 -111.206 68.1222 -84.45 + 72 152.755 1240 4 0 -111.209 68.1216 -85.85 + 72 139.042 344 3 1 -111.239 68.0953 -114.45 + 72 116.7 1240 3 0 -111.236 68.0918 -115.85 + 72 131.921 344 2 1 -111.183 68.0293 -144.45 + 72 193.151 1239 2 0 -111.175 68.0232 -145.85 + 72 221.821 345 1 1 -111.018 67.8886 -174.45 + 72 174.939 1239 1 0 -111.014 67.888 -175.85 + 72 214.939 346 0 1 -110.937 67.8689 -204.45 + 72 134.938 1239 0 0 -110.932 67.8725 -205.85 +Number of digits in this event: 17 Using G4ParticleGun... -Particle energy: 3.4915 LIN +Particle energy: 4.49342 LIN Particle: proton Event: 73 -Number of tracker hits in this event: 33 - 73 123.982 1080 11 1 36.19 14.0121 125.55 - 73 101.03 969 11 0 36.1899 14.0125 124.15 - 73 102.712 1080 10 1 36.1864 14.0198 95.55 - 73 312.168 969 10 0 36.1861 14.0191 94.15 - 73 241.122 1080 9 1 36.1758 14.0115 65.55 - 73 122.757 969 9 0 36.1774 14.0082 64.15 - 73 129.719 1080 8 1 36.2092 13.9394 35.55 - 73 172.522 969 8 0 36.2101 13.9341 34.15 - 73 238.61 1080 7 1 36.2224 13.8118 5.55 - 73 119.361 968 7 0 36.2226 13.8052 4.15 - 73 120.635 1080 6 1 36.2342 13.6758 -24.45 - 73 132.456 968 6 0 36.234 13.6702 -25.85 - 73 102.402 1080 5 1 36.2271 13.5575 -54.45 - 73 112.24 967 5 0 36.2266 13.5518 -55.85 - 73 113.04 1080 4 1 36.2126 13.4364 -84.45 - 73 283.985 966 4 0 36.2106 13.4304 -85.85 - 73 99.264 1080 3 1 36.1694 13.3211 -114.45 - 73 119.536 966 3 0 36.1671 13.3164 -115.85 - 73 98.0498 1080 2 1 36.1216 13.2244 -144.45 - 73 95.3168 965 2 0 36.1178 13.22 -145.85 - 73 95.9736 1079 1 1 36.0402 13.1278 -174.45 - 73 114.091 965 1 0 36.0373 13.1226 -175.85 - 73 114.307 1079 0 1 35.975 13.0181 -204.45 - 73 121.564 964 0 0 35.9744 13.0144 -205.85 - 73 139.692 967 4 0 36.1424 13.4501 -86.043 - 73 63.3252 970 7 0 35.4036 14.2274 4.15 - 73 86.5015 971 7 0 35.3563 14.25 4.07829 - 73 214.281 731 8 0 51.0482 -33.685 33.75 - 73 142.549 732 8 0 51.4122 -33.65 34.1019 - 73 156.478 733 8 0 51.5691 -33.45 33.9864 - 73 174.11 734 8 0 51.5691 -33.25 33.9523 - 73 104.281 735 8 0 51.4188 -33.05 34.032 - 73 218.279 736 8 0 51.3894 -32.8498 33.9229 -Number of digits in this event: 18 +Number of tracker hits in this event: 23 + 73 126.197 764 10 1 -27.1107 -102.701 95.55 + 73 136.709 387 10 0 -27.1106 -102.701 94.15 + 73 118.057 764 9 1 -27.1097 -102.698 65.55 + 73 132.929 387 9 0 -27.11 -102.698 64.15 + 73 129.052 764 8 1 -27.1178 -102.706 35.55 + 73 99.5102 387 8 0 -27.1189 -102.706 34.15 + 73 148.16 764 7 1 -27.1272 -102.689 5.55 + 73 110.757 387 7 0 -27.1271 -102.687 4.15 + 73 203.723 764 6 1 -27.1236 -102.625 -24.45 + 73 112.974 387 6 0 -27.124 -102.62 -25.85 + 73 101.301 764 5 1 -27.1274 -102.519 -54.45 + 73 104.928 388 5 0 -27.1272 -102.518 -55.85 + 73 120.356 764 4 1 -27.1156 -102.551 -84.45 + 73 113.626 387 4 0 -27.1153 -102.554 -85.85 + 73 109.66 764 3 1 -27.1028 -102.608 -114.45 + 73 126.496 387 3 0 -27.1013 -102.612 -115.85 + 73 161.844 764 2 1 -27.0736 -102.675 -144.45 + 73 105.825 387 2 0 -27.0716 -102.677 -145.85 + 73 109.885 765 1 1 -27.0351 -102.716 -174.45 + 73 119.198 387 1 0 -27.0328 -102.719 -175.85 + 73 102.564 765 0 1 -26.9812 -102.769 -204.45 + 73 193.228 386 0 0 -26.9789 -102.771 -205.85 + 73 90.3847 348 0 0 -1.10308 -110.545 -206.25 +Number of digits in this event: 11 Using G4ParticleGun... -Particle energy: 4.81476 LIN +Particle energy: 8.23484 LIN Particle: proton Event: 74 -Number of tracker hits in this event: 22 - 74 104.122 775 10 1 -24.9753 -99.9475 95.55 - 74 183.205 401 10 0 -24.9748 -99.9488 94.15 - 74 116.97 775 9 1 -24.9626 -99.9774 65.55 - 74 107.918 400 9 0 -24.9625 -99.9792 64.15 - 74 96.3702 775 8 1 -24.9609 -100.019 35.55 - 74 102.995 400 8 0 -24.9611 -100.022 34.15 - 74 117.533 775 7 1 -24.9572 -100.098 5.55 - 74 116.926 400 7 0 -24.958 -100.101 4.15 - 74 96.1834 775 6 1 -24.9729 -100.172 -24.45 - 74 118.558 399 6 0 -24.9732 -100.176 -25.85 - 74 125.151 775 5 1 -24.9806 -100.275 -54.45 - 74 109.412 399 5 0 -24.9816 -100.28 -55.85 - 74 89.6223 775 4 1 -24.9999 -100.37 -84.45 - 74 81.6739 398 4 0 -25.0002 -100.375 -85.85 - 74 100.85 775 3 1 -25.0046 -100.46 -114.45 - 74 116.954 398 3 0 -25.0052 -100.463 -115.85 - 74 98.6377 775 2 1 -25.0239 -100.55 -144.45 - 74 149.069 397 2 0 -25.025 -100.555 -145.85 - 74 120.017 775 1 1 -25.0426 -100.648 -174.45 - 74 106.328 397 1 0 -25.0456 -100.653 -175.85 - 74 178.55 774 0 1 -25.0948 -100.749 -204.45 - 74 105.82 396 0 0 -25.0991 -100.754 -205.85 -Number of digits in this event: 6 -Using G4ParticleGun... -Particle energy: 5.42585 LIN -Particle: proton -Event: 75 -Number of tracker hits in this event: 22 - 75 153.961 1198 10 1 59.8334 70.2108 95.55 - 75 126.328 1250 10 0 59.8329 70.2105 94.15 - 75 103.396 1198 9 1 59.8237 70.204 65.55 - 75 104.98 1250 9 0 59.8231 70.2045 64.15 - 75 192.642 1198 8 1 59.8143 70.2141 35.55 - 75 112.307 1250 8 0 59.8141 70.213 34.15 - 75 100.787 1198 7 1 59.8029 70.1846 5.55 - 75 128.347 1250 7 0 59.8025 70.1837 4.15 - 75 120.069 1198 6 1 59.79 70.1644 -24.45 - 75 112.785 1250 6 0 59.7897 70.1633 -25.85 - 75 124.478 1198 5 1 59.785 70.14 -54.45 - 75 123.69 1250 5 0 59.7839 70.139 -55.85 - 75 96.6147 1198 4 1 59.7584 70.1126 -84.45 - 75 93.2063 1250 4 0 59.7559 70.1113 -85.85 - 75 111.606 1198 3 1 59.7137 70.09 -114.45 - 75 159.938 1250 3 0 59.7118 70.0887 -115.85 - 75 105.662 1198 2 1 59.6747 70.0612 -144.45 - 75 109.78 1250 2 0 59.6729 70.0602 -145.85 - 75 112.778 1197 1 1 59.6375 70.0399 -174.45 - 75 98.6394 1249 1 0 59.6357 70.0403 -175.85 - 75 126.439 1197 0 1 59.6027 70.0507 -204.45 - 75 86.8333 1250 0 0 59.6022 70.0514 -205.85 +Number of tracker hits in this event: 16 + 74 146.968 521 7 1 -75.7577 -126.662 5.55 + 74 162.392 267 7 0 -75.7579 -126.662 4.15 + 74 125.799 521 6 1 -75.7627 -126.649 -24.45 + 74 141.853 267 6 0 -75.763 -126.648 -25.85 + 74 114.12 521 5 1 -75.7709 -126.633 -54.45 + 74 144.082 267 5 0 -75.7717 -126.632 -55.85 + 74 115.9 521 4 1 -75.7882 -126.61 -84.45 + 74 93.7585 267 4 0 -75.7882 -126.609 -85.85 + 74 144.86 521 3 1 -75.7875 -126.604 -114.45 + 74 95.7369 267 3 0 -75.7866 -126.602 -115.85 + 74 97.4146 521 2 1 -75.7682 -126.575 -144.45 + 74 88.9803 267 2 0 -75.7669 -126.574 -145.85 + 74 165.31 521 1 1 -75.741 -126.547 -174.45 + 74 144.308 268 1 0 -75.7392 -126.545 -175.85 + 74 173.718 521 0 1 -75.7014 -126.503 -204.45 + 74 90.7754 268 0 0 -75.6999 -126.501 -205.85 Number of digits in this event: 10 Using G4ParticleGun... -Particle energy: 2.15645 LIN +Particle energy: 8.97025 LIN +Particle: proton +Event: 75 +Number of tracker hits in this event: 22 + 75 96.3095 1225 10 1 65.1256 63.1669 95.55 + 75 125.323 1215 10 0 65.1263 63.1671 94.15 + 75 94.6252 1225 9 1 65.1426 63.168 65.55 + 75 102.424 1215 9 0 65.1432 63.1683 64.15 + 75 151.957 1225 8 1 65.1591 63.171 35.55 + 75 196.728 1215 8 0 65.1595 63.1703 34.15 + 75 130.033 1225 7 1 65.1682 63.1568 5.55 + 75 124.925 1215 7 0 65.1679 63.1556 4.15 + 75 109.047 1225 6 1 65.1611 63.1309 -24.45 + 75 111.091 1215 6 0 65.1607 63.1301 -25.85 + 75 115.458 1225 5 1 65.1543 63.1111 -54.45 + 75 119.123 1215 5 0 65.1533 63.11 -55.85 + 75 108.644 1225 4 1 65.1338 63.0888 -84.45 + 75 107.336 1215 4 0 65.1327 63.0874 -85.85 + 75 181.101 1225 3 1 65.1069 63.0568 -114.45 + 75 114.911 1215 3 0 65.1057 63.0555 -115.85 + 75 109.854 1225 2 1 65.0809 63.0286 -144.45 + 75 96.2993 1214 2 0 65.0802 63.0275 -145.85 + 75 110.869 1225 1 1 65.0643 63.0033 -174.45 + 75 139.961 1214 1 0 65.0639 63.0026 -175.85 + 75 99.9843 1225 0 1 65.0538 62.9901 -204.45 + 75 98.9472 1214 0 0 65.0538 62.9898 -205.85 +Number of digits in this event: 8 +Using G4ParticleGun... +Particle energy: 8.23265 LIN Particle: proton Event: 76 -Number of tracker hits in this event: 27 - 76 142.886 403 10 1 -99.4422 29.1786 95.55 - 76 109.62 1045 10 0 -99.4425 29.1783 94.15 - 76 113.021 403 9 1 -99.4483 29.182 65.55 - 76 171.147 1045 9 0 -99.4504 29.1852 64.15 - 76 102.938 403 8 1 -99.5013 29.2485 35.55 - 76 201.932 1046 8 0 -99.5053 29.252 34.15 - 76 129.863 402 7 1 -99.5777 29.3215 5.55 - 76 128.413 1046 7 0 -99.5805 29.322 4.15 - 76 91.994 402 6 1 -99.6366 29.3183 -24.45 - 76 110.326 1046 6 0 -99.641 29.3155 -25.85 - 76 122.449 402 5 1 -99.733 29.243 -54.45 - 76 143.401 1045 5 0 -99.7379 29.2415 -55.85 - 76 144.154 401 4 1 -99.8325 29.2025 -84.45 - 76 119.471 1045 4 0 -99.8373 29.1996 -85.85 - 76 143.741 401 3 1 -99.9289 29.1316 -114.45 - 76 125.573 1045 3 0 -99.9351 29.1291 -115.85 - 76 412.279 400 2 1 -100.113 29.0937 -144.45 - 76 110.109 1045 2 0 -100.123 29.0898 -145.85 - 76 132.333 399 1 1 -100.328 29.0282 -174.45 - 76 112.475 1044 1 0 -100.336 29.0262 -175.85 - 76 125.86 398 0 1 -100.499 28.9752 -204.45 - 76 145.786 1044 0 0 -100.508 28.9709 -205.85 - 76 25.237 401 2 1 -99.95 29.6067 -144.535 - 76 75.4807 401 5 1 -99.75 29.2678 -54.5822 - 76 18.6443 1046 5 0 -99.733 29.4313 -55.85 - 76 109.235 1047 5 0 -99.7156 29.45 -55.9023 - 76 54.3826 1048 5 0 -99.7397 29.65 -56.0979 +Number of tracker hits in this event: 25 + 76 118.593 1238 10 1 67.6942 80.3681 95.55 + 76 126.247 1301 10 0 67.6943 80.3681 94.15 + 76 188.521 1238 9 1 67.693 80.3676 65.55 + 76 113.54 1301 9 0 67.6934 80.3676 64.15 + 76 89.6446 1238 8 1 67.7018 80.367 35.55 + 76 169.263 1301 8 0 67.7023 80.3676 34.15 + 76 126.765 1238 7 1 67.7099 80.3789 5.55 + 76 117.86 1301 7 0 67.7097 80.3793 4.15 + 76 143.643 1238 6 1 67.7129 80.3844 -24.45 + 76 116.475 1301 6 0 67.7118 80.3839 -25.85 + 76 116.774 1238 5 1 67.685 80.3736 -54.45 + 76 150.557 1301 5 0 67.684 80.3733 -55.85 + 76 147.711 1238 4 1 67.6637 80.3645 -84.45 + 76 102.17 1301 4 0 67.6622 80.3635 -85.85 + 76 101.016 1237 3 1 67.6337 80.3432 -114.45 + 76 128.064 1301 3 0 67.6326 80.3432 -115.85 + 76 157.049 1237 2 1 67.6107 80.3449 -144.45 + 76 146.946 1301 2 0 67.6089 80.3446 -145.85 + 76 130.476 1237 1 1 67.5765 80.3364 -174.45 + 76 119.456 1301 1 0 67.5749 80.3355 -175.85 + 76 105.622 1237 0 1 67.5403 80.3129 -204.45 + 76 130.825 1301 0 0 67.5387 80.3122 -205.85 + 76 58.116 950 2 0 31.1794 10.05 -146.214 + 76 2.82062 1493 10 0 -69.2824 118.95 93.9883 + 76 15.8921 1510 13 0 -49.6874 122.16 183.975 Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 1.96747 LIN +Particle energy: 7.82115 LIN Particle: proton Event: 77 -Number of tracker hits in this event: 29 - 77 147.266 876 8 1 -4.8403 -139.056 35.55 - 77 118.903 205 8 0 -4.84041 -139.055 34.15 - 77 168.537 875 7 1 -4.85691 -139.037 5.55 - 77 148.293 205 7 0 -4.85534 -139.035 4.15 - 77 109.069 876 6 1 -4.81099 -139.015 -24.45 - 77 135.729 205 6 0 -4.80818 -139.013 -25.85 - 77 141.796 876 5 1 -4.77233 -138.95 -54.45 - 77 116.335 206 5 0 -4.77144 -138.948 -55.85 - 77 190.021 876 4 1 -4.76134 -138.911 -84.45 - 77 201.328 206 4 0 -4.76091 -138.91 -85.85 - 77 90.0504 876 3 1 -4.76146 -138.875 -114.45 - 77 153.672 206 3 0 -4.75849 -138.873 -115.85 - 77 145.618 876 2 1 -4.70709 -138.832 -144.45 - 77 123.378 206 2 0 -4.70851 -138.826 -145.85 - 77 161.219 876 1 1 -4.73341 -138.729 -174.45 - 77 306.26 207 1 0 -4.73799 -138.725 -175.85 - 77 122.488 876 0 1 -4.82837 -138.655 -204.45 - 77 129.197 207 0 0 -4.83462 -138.651 -205.85 - 77 32.5644 877 4 1 -4.64994 -139.059 -84.7568 - 77 212.279 200 4 0 -3.75175 -140.004 -85.85 - 77 49.7061 199 4 0 -3.4122 -140.15 -86.1888 - 77 381.137 323 4 0 173.404 -115.446 -86.25 - 77 267.803 324 4 0 173.573 -115.35 -86.2199 - 77 115.266 1785 4 1 177.202 -115.03 -84.8499 - 77 98.4123 1786 4 1 177.35 -114.919 -84.7837 - 77 67.7948 1787 4 1 177.55 -114.779 -84.751 - 77 137.926 1788 4 1 177.75 -114.701 -84.7504 - 77 260.072 1789 4 1 177.95 -114.671 -84.737 - 77 105.404 1790 4 1 178.151 -114.225 -84.6373 -Number of digits in this event: 20 +Number of tracker hits in this event: 48 + 77 99.4326 1271 10 1 74.4067 80.5964 95.55 + 77 136.974 1302 10 0 74.4064 80.5954 94.15 + 77 298.21 1271 9 1 74.4003 80.5771 65.55 + 77 210.092 1302 9 0 74.4002 80.5766 64.15 + 77 124.328 1271 8 1 74.3969 80.5631 35.55 + 77 123.808 1302 8 0 74.3948 80.5633 34.15 + 77 133.885 1271 7 1 74.3542 80.5674 5.55 + 77 118.845 1302 7 0 74.3523 80.5674 4.15 + 77 101.263 1271 6 1 74.3122 80.5657 -24.45 + 77 148.197 1302 6 0 74.3107 80.5646 -25.85 + 77 99.753 1271 5 1 74.28 80.5401 -54.45 + 77 132.231 1302 5 0 74.2786 80.5386 -55.85 + 77 157.01 1270 4 1 74.2491 80.5062 -84.45 + 77 101.207 1302 4 0 74.2463 80.5042 -85.85 + 77 96.0976 1270 3 1 74.1913 80.4629 -114.45 + 77 98.7372 1302 3 0 74.1889 80.4613 -115.85 + 77 103.3 1270 2 1 74.1447 80.4301 -144.45 + 77 133.717 1301 2 0 74.1421 80.4271 -145.85 + 77 136.263 1270 1 1 74.0885 80.3715 -174.45 + 77 110.57 1301 1 0 74.0857 80.3689 -175.85 + 77 113.575 1269 0 1 74.0283 80.3152 -204.45 + 77 124.567 1301 0 0 74.026 80.3126 -205.85 + 77 91.5854 545 8 1 -71.0402 -58.9806 35.1986 + 77 45.4398 393 5 0 -60.4395 -101.35 -55.9786 + 77 50.4481 392 5 0 -60.5253 -101.55 -55.9333 + 77 41.5034 595 5 1 -60.9892 -103.201 -54.85 + 77 88.3446 594 5 1 -61.05 -103.359 -54.7497 + 77 73.7943 593 5 1 -61.25 -103.535 -54.5809 + 77 62.1226 592 5 1 -61.45 -103.614 -54.458 + 77 62.5383 591 5 1 -61.65 -103.704 -54.4616 + 77 94.1729 590 5 1 -61.85 -103.827 -54.4744 + 77 274.266 589 5 1 -62.0501 -104.012 -54.5655 + 77 266.957 588 5 1 -62.25 -104.24 -54.4958 + 77 70.8757 1565 7 0 103.31 133.221 3.75 + 77 27.661 1564 7 0 103.259 133.15 3.78594 + 77 136.448 1764 7 0 123.841 173.031 3.75 + 77 78.9686 1765 7 0 123.91 173.15 3.80426 + 77 117.533 1040 7 0 102.327 28.1947 3.75 + 77 24.9123 768 5 1 -26.2943 -9.5281 -54.85 + 77 191.324 769 5 1 -26.2499 -9.53212 -54.7658 + 77 49.8704 1530 2 0 94.346 126.193 -146.25 + 77 96.3442 1531 2 0 94.3423 126.35 -146.16 + 77 295.09 1532 2 0 94.2129 126.55 -146.033 + 77 65.7241 1533 2 0 94.1277 126.75 -146.024 + 77 77.1691 1272 9 1 74.4601 80.5471 65.5499 + 77 31.5348 1306 9 0 74.6435 81.4054 64.15 + 77 204.061 1307 9 0 74.6582 81.45 64.076 + 77 3.22051 1393 8 0 84.6913 98.7878 34.15 +Number of digits in this event: 22 Using G4ParticleGun... -Particle energy: 4.76735 LIN +Particle energy: 6.0274 LIN Particle: proton Event: 78 -Number of tracker hits in this event: 22 - 78 97.8546 1283 10 1 76.8174 64.4562 95.55 - 78 122.473 1222 10 0 76.8168 64.4558 94.15 - 78 104.628 1283 9 1 76.802 64.4576 65.55 - 78 122.422 1222 9 0 76.8021 64.456 64.15 - 78 234.055 1283 8 1 76.7994 64.4279 35.55 - 78 162.001 1221 8 0 76.7993 64.426 34.15 - 78 139.815 1283 7 1 76.7939 64.3865 5.55 - 78 126.699 1221 7 0 76.7938 64.3853 4.15 - 78 94.8974 1283 6 1 76.7844 64.3589 -24.45 - 78 115.549 1221 6 0 76.7852 64.3584 -25.85 - 78 95.46 1283 5 1 76.8016 64.3502 -54.45 - 78 92.5426 1221 5 0 76.8022 64.3491 -55.85 - 78 113.246 1283 4 1 76.814 64.3159 -84.45 - 78 114.958 1221 4 0 76.8155 64.315 -85.85 - 78 112.707 1283 3 1 76.8462 64.2988 -114.45 - 78 120.083 1221 3 0 76.8479 64.2976 -115.85 - 78 114.166 1284 2 1 76.8855 64.2725 -144.45 - 78 130.657 1221 2 0 76.8892 64.2718 -145.85 - 78 152.525 1284 1 1 76.9621 64.2556 -174.45 - 78 116.642 1221 1 0 76.9669 64.2551 -175.85 - 78 125.512 1285 0 1 77.058 64.2465 -204.45 - 78 176.383 1220 0 0 77.0625 64.2474 -205.85 -Number of digits in this event: 12 +Number of tracker hits in this event: 23 + 78 117.126 791 10 1 -21.7912 -111.78 95.55 + 78 91.8054 341 10 0 -21.7911 -111.78 94.15 + 78 99.4641 791 9 1 -21.79 -111.768 65.55 + 78 144.824 341 9 0 -21.7896 -111.768 64.15 + 78 351.676 791 8 1 -21.7852 -111.751 35.55 + 78 158.289 342 8 0 -21.7852 -111.75 34.15 + 78 98.567 791 7 1 -21.781 -111.727 5.55 + 78 106.003 342 7 0 -21.7808 -111.725 4.15 + 78 115.552 791 6 1 -21.7763 -111.682 -24.45 + 78 96.787 342 6 0 -21.7768 -111.681 -25.85 + 78 114.071 791 5 1 -21.7882 -111.654 -54.45 + 78 97.6789 342 5 0 -21.7885 -111.653 -55.85 + 78 104.687 791 4 1 -21.7958 -111.631 -84.45 + 78 119.999 342 4 0 -21.797 -111.629 -85.85 + 78 127.018 791 3 1 -21.8197 -111.59 -114.45 + 78 100.033 342 3 0 -21.82 -111.588 -115.85 + 78 139.414 791 2 1 -21.8303 -111.563 -144.45 + 78 141.3 342 2 0 -21.8324 -111.562 -145.85 + 78 95.6192 790 1 1 -21.8744 -111.54 -174.45 + 78 105.011 343 1 0 -21.8778 -111.538 -175.85 + 78 107.484 790 0 1 -21.9495 -111.499 -204.45 + 78 120.135 343 0 0 -21.954 -111.497 -205.85 + 78 21.3964 792 8 1 -21.65 -111.828 35.5313 +Number of digits in this event: 9 Using G4ParticleGun... -Particle energy: 3.52584 LIN +Particle energy: 3.11478 LIN Particle: proton Event: 79 -Number of tracker hits in this event: 32 - 79 111.605 394 9 1 -101.323 59.9999 65.55 - 79 151.573 1199 9 0 -101.322 59.9982 64.15 - 79 167.797 394 8 1 -101.323 59.9731 35.55 - 79 108.662 1199 8 0 -101.324 59.9696 34.15 - 79 93.4625 394 7 1 -101.34 59.8926 5.55 - 79 212.56 1199 7 0 -101.343 59.888 4.15 - 79 190.601 393 6 1 -101.397 59.7933 -24.45 - 79 147.875 1198 6 0 -101.398 59.7896 -25.85 - 79 121.88 393 5 1 -101.424 59.7151 -54.45 - 79 121.125 1198 5 0 -101.425 59.7107 -55.85 - 79 105.279 393 4 1 -101.437 59.6252 -84.45 - 79 103.155 1197 4 0 -101.438 59.6204 -85.85 - 79 125.956 393 3 1 -101.473 59.5211 -114.45 - 79 94.3496 1197 3 0 -101.473 59.5105 -115.85 - 79 117.384 393 2 1 -101.466 59.288 -144.45 - 79 114.916 1196 2 0 -101.468 59.2737 -145.85 - 79 95.2228 393 1 1 -101.518 58.9855 -174.45 - 79 149.19 1194 1 0 -101.521 58.9719 -175.85 - 79 123.332 392 0 1 -101.577 58.6916 -204.45 - 79 109.603 1193 0 0 -101.581 58.6792 -205.85 - 79 42.9356 1196 6 0 -101.14 59.3128 -25.8509 - 79 70.1768 1195 6 0 -101.099 59.25 -26.0265 - 79 129.853 402 5 1 -99.6388 41.3829 -54.45 - 79 31.1685 403 5 1 -99.55 41.4518 -54.7569 - 79 137.28 1107 5 0 -99.4115 41.6009 -55.85 - 79 19.4491 1108 5 0 -99.3895 41.65 -56.1626 - 79 76.1876 1157 5 0 -125.453 51.6313 -56.25 - 79 37.3084 1158 5 0 -125.539 51.6507 -56.1584 - 79 218.852 1440 5 0 -109.893 108.176 -56.25 - 79 195.931 351 5 1 -109.899 109.081 -54.8499 - 79 222.028 1294 4 0 -71.5275 78.85 -85.9899 - 79 104.953 393 8 1 -101.35 59.9911 35.4787 -Number of digits in this event: 16 +Number of tracker hits in this event: 22 + 79 115.767 1326 8 1 85.3134 114.483 35.55 + 79 118.257 1471 8 0 85.3107 114.475 34.15 + 79 150.31 1326 7 1 85.2516 114.317 5.55 + 79 139.011 1470 7 0 85.2483 114.307 4.15 + 79 125.569 1325 6 1 85.172 114.087 -24.45 + 79 103.326 1469 6 0 85.169 114.072 -25.85 + 79 108.526 1325 5 1 85.1093 113.761 -54.45 + 79 102.095 1467 5 0 85.1054 113.748 -55.85 + 79 149.272 1324 4 1 85.0268 113.486 -84.45 + 79 123.891 1466 4 0 85.0226 113.474 -85.85 + 79 117.147 1324 3 1 84.9381 113.211 -114.45 + 79 131.161 1465 3 0 84.9338 113.198 -115.85 + 79 247.838 1323 2 1 84.834 112.932 -144.45 + 79 126.654 1463 2 0 84.8291 112.918 -145.85 + 79 143.662 1323 1 1 84.733 112.632 -174.45 + 79 120.286 1462 1 0 84.7275 112.617 -175.85 + 79 110.366 1322 0 1 84.6266 112.311 -204.45 + 79 120.119 1460 0 0 84.6215 112.295 -205.85 + 79 179.932 1464 2 0 83.6169 113.056 -145.85 + 79 85.8113 1314 2 1 82.9102 112.585 -144.85 + 79 208.894 1313 2 1 82.85 112.537 -144.761 + 79 177.186 1459 2 0 82.6194 112.034 -145.85 +Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 4.56361 LIN +Particle energy: 5.43164 LIN Particle: proton Event: 80 -Number of tracker hits in this event: 21 - 80 125.668 439 9 1 -92.237 83.5543 65.55 - 80 113.051 1317 9 0 -92.2353 83.5538 64.15 - 80 87.1334 439 8 1 -92.1936 83.5451 35.55 - 80 109.37 1317 8 0 -92.1903 83.5454 34.15 - 80 124.657 440 7 1 -92.1187 83.5552 5.55 - 80 102.332 1317 7 0 -92.1161 83.5564 4.15 - 80 146.98 440 6 1 -92.0626 83.5789 -24.45 - 80 113.027 1317 6 0 -92.0577 83.5799 -25.85 - 80 102.765 440 5 1 -91.9601 83.5907 -54.45 - 80 108.248 1317 5 0 -91.9549 83.5915 -55.85 - 80 269.202 441 4 1 -91.8476 83.6009 -84.45 - 80 131.526 1317 4 0 -91.8421 83.6021 -85.85 - 80 158.431 442 3 1 -91.7318 83.6305 -114.45 - 80 122.892 1317 3 0 -91.7249 83.6306 -115.85 - 80 173.195 442 2 1 -91.5913 83.6354 -144.45 - 80 135.666 1317 2 0 -91.5845 83.634 -145.85 - 80 111.641 443 1 1 -91.4327 83.6107 -174.45 - 80 94.0174 1317 1 0 -91.4256 83.6091 -175.85 - 80 170.896 444 0 1 -91.2806 83.58 -204.45 - 80 112.5 1317 0 0 -91.2748 83.5783 -205.85 - 80 106.877 1318 2 0 -91.5786 83.6501 -145.968 -Number of digits in this event: 11 +Number of tracker hits in this event: 27 + 80 181.945 1253 11 1 70.6868 -6.21153 125.55 + 80 180.458 869 11 0 70.6872 -6.21168 124.15 + 80 133.583 1253 10 1 70.6995 -6.21721 95.55 + 80 153.383 869 10 0 70.7002 -6.21814 94.15 + 80 139.123 1253 9 1 70.7123 -6.23608 65.55 + 80 100.756 869 9 0 70.7117 -6.23606 64.15 + 80 113.09 1253 8 1 70.6966 -6.23768 35.55 + 80 108.158 869 8 0 70.6975 -6.23806 34.15 + 80 133.413 1253 7 1 70.7148 -6.24189 5.55 + 80 92.5203 869 7 0 70.7158 -6.24091 4.15 + 80 112.863 1253 6 1 70.7365 -6.21673 -24.45 + 80 180.803 869 6 0 70.7384 -6.21568 -25.85 + 80 113.605 1253 5 1 70.7693 -6.20073 -54.45 + 80 159.697 869 5 0 70.7706 -6.20014 -55.85 + 80 182.988 1253 4 1 70.7981 -6.19051 -84.45 + 80 319.606 869 4 0 70.7994 -6.18953 -85.85 + 80 97.3906 1253 3 1 70.8384 -6.16823 -114.45 + 80 124.961 869 3 0 70.84 -6.16761 -115.85 + 80 126.202 1254 2 1 70.8694 -6.15773 -144.45 + 80 116.933 869 2 0 70.8697 -6.15654 -145.85 + 80 120.731 1254 1 1 70.8718 -6.1324 -174.45 + 80 95.0262 869 1 0 70.8737 -6.1304 -175.85 + 80 111.603 1254 0 1 70.9149 -6.08692 -204.45 + 80 112.802 869 0 0 70.9168 -6.08511 -205.85 + 80 194.943 868 4 0 70.6129 -6.25 -86.0621 + 80 119.195 870 4 0 70.657 -6.04998 -85.9706 + 80 197.459 870 6 0 70.6923 -6.05 -26.0522 +Number of digits in this event: 16 Using G4ParticleGun... -Particle energy: 7.611 LIN +Particle energy: 3.71178 LIN Particle: proton Event: 81 -Number of tracker hits in this event: 23 - 81 3.10269 550 11 0 47.8446 -69.9563 123.762 - 81 138.25 1138 10 1 47.8449 -69.956 95.55 - 81 112.336 550 10 0 47.8451 -69.9556 94.15 - 81 122.194 1138 9 1 47.8494 -69.9515 65.55 - 81 97.4434 550 9 0 47.8498 -69.9507 64.15 - 81 119.718 1139 8 1 47.855 -69.9342 35.55 - 81 111.432 550 8 0 47.8553 -69.9344 34.15 - 81 115.582 1139 7 1 47.8623 -69.9356 5.55 - 81 119.485 550 7 0 47.862 -69.9356 4.15 - 81 142.139 1139 6 1 47.854 -69.9345 -24.45 - 81 129.171 550 6 0 47.8527 -69.9341 -25.85 - 81 104.301 1138 5 1 47.8238 -69.9308 -54.45 - 81 106.426 550 5 0 47.8218 -69.9307 -55.85 - 81 113.286 1138 4 1 47.7838 -69.9291 -84.45 - 81 98.4251 550 4 0 47.782 -69.9282 -85.85 - 81 143.077 1138 3 1 47.7436 -69.9061 -114.45 - 81 118.637 550 3 0 47.7415 -69.9061 -115.85 - 81 105.247 1138 2 1 47.6987 -69.911 -144.45 - 81 128.52 550 2 0 47.6958 -69.9112 -145.85 - 81 99.5773 1137 1 1 47.6347 -69.913 -174.45 - 81 113.42 550 1 0 47.631 -69.9101 -175.85 - 81 146.936 1137 0 1 47.5577 -69.8523 -204.45 - 81 101.251 550 0 0 47.5543 -69.8508 -205.85 -Number of digits in this event: 9 +Number of tracker hits in this event: 37 + 81 150.75 529 11 1 -74.1051 31.405 125.55 + 81 123.587 1056 11 0 -74.1059 31.4039 124.15 + 81 116.492 529 10 1 -74.1298 31.3888 95.55 + 81 116.221 1056 10 0 -74.1317 31.3868 94.15 + 81 257.654 529 9 1 -74.1719 31.3489 65.55 + 81 123.386 1056 9 0 -74.1727 31.3482 64.15 + 81 128.451 529 8 1 -74.1886 31.3325 35.55 + 81 112.529 1056 8 0 -74.1889 31.3339 34.15 + 81 102.138 529 7 1 -74.1891 31.3681 5.55 + 81 114.83 1056 7 0 -74.1909 31.3715 4.15 + 81 107.84 529 6 1 -74.237 31.4352 -24.45 + 81 106.479 1056 6 0 -74.2376 31.4382 -25.85 + 81 100.04 528 5 1 -74.2557 31.4997 -54.45 + 81 105.973 1057 5 0 -74.2575 31.5032 -55.85 + 81 106.667 528 4 1 -74.2924 31.5752 -84.45 + 81 131.53 1057 4 0 -74.2946 31.5801 -85.85 + 81 107.778 528 3 1 -74.3419 31.6708 -114.45 + 81 106.147 1058 3 0 -74.3439 31.6767 -115.85 + 81 111.998 528 2 1 -74.3825 31.7926 -144.45 + 81 102.624 1058 2 0 -74.3858 31.7992 -145.85 + 81 113.188 527 1 1 -74.4614 31.9314 -174.45 + 81 130.92 1059 1 0 -74.4655 31.9386 -175.85 + 81 225.345 527 0 1 -74.5467 32.088 -204.45 + 81 167.606 1060 0 0 -74.5499 32.0943 -205.85 + 81 14.0024 1270 6 0 -20.2204 74.0802 -26.25 + 81 77.6478 1269 6 0 -20.2512 74.0497 -26.2043 + 81 55.5028 1268 6 0 -20.3777 73.8499 -25.9998 + 81 86.3636 1267 6 0 -20.4737 73.65 -25.923 + 81 58.9294 1266 6 0 -20.5773 73.45 -25.8861 + 81 53.5127 1265 6 0 -20.6393 73.2492 -25.8896 + 81 120.13 796 6 1 -20.7392 70.5688 -24.85 + 81 172.234 795 6 1 -20.8501 70.1984 -24.6674 + 81 252.289 794 6 1 -21.05 69.7995 -24.6727 + 81 38.6252 793 6 1 -21.25 69.5175 -24.5212 + 81 60.9963 1181 1 0 -160.223 56.4438 -176.25 + 81 1.88141 1022 1 0 -114.063 24.4517 -176.25 + 81 205.769 1021 1 0 -114.058 24.4499 -176.248 +Number of digits in this event: 16 Using G4ParticleGun... -Particle energy: 5.15953 LIN +Particle energy: 9.11876 LIN Particle: proton Event: 82 -Number of tracker hits in this event: 26 - 82 125.774 696 11 1 -40.6565 -41.496 125.55 - 82 148.481 692 11 0 -40.6561 -41.4958 124.15 - 82 104.933 697 10 1 -40.6495 -41.4893 95.55 - 82 105.337 692 10 0 -40.6488 -41.4896 94.15 - 82 146.718 697 9 1 -40.6451 -41.4981 65.55 - 82 183.477 692 9 0 -40.6452 -41.4997 64.15 - 82 112.47 696 8 1 -40.652 -41.5313 35.55 - 82 141.156 692 8 0 -40.6532 -41.5338 34.15 - 82 93.5024 696 7 1 -40.676 -41.5861 5.55 - 82 227.949 692 7 0 -40.6758 -41.5918 4.15 - 82 96.1283 696 6 1 -40.669 -41.7077 -24.45 - 82 104.946 691 6 0 -40.6689 -41.715 -25.85 - 82 113.305 696 5 1 -40.6697 -41.861 -54.45 - 82 108.159 690 5 0 -40.6701 -41.8671 -55.85 - 82 228.174 696 4 1 -40.6839 -41.9969 -84.45 - 82 107.181 690 4 0 -40.6839 -42.003 -85.85 - 82 93.9151 696 3 1 -40.6792 -42.1285 -114.45 - 82 127.976 689 3 0 -40.6777 -42.1337 -115.85 - 82 93.1863 697 2 1 -40.6498 -42.2445 -144.45 - 82 144.225 689 2 0 -40.6495 -42.2489 -145.85 - 82 6.89907 688 2 0 -40.6494 -42.25 -146.212 - 82 105.533 697 1 1 -40.6393 -42.3368 -174.45 - 82 99.622 688 1 0 -40.6394 -42.3403 -175.85 - 82 122.956 697 0 1 -40.646 -42.4101 -204.45 - 82 108.882 688 0 0 -40.6465 -42.4119 -205.85 - 82 2.84932 1108 2 1 41.65 -28.3699 -144.826 -Number of digits in this event: 12 +Number of tracker hits in this event: 31 + 82 99.5969 553 10 1 -69.2867 67.7052 95.55 + 82 93.1517 1238 10 0 -69.2869 67.7057 94.15 + 82 183.514 553 9 1 -69.2909 67.7163 65.55 + 82 102.978 1238 9 0 -69.2909 67.7168 64.15 + 82 112.465 553 8 1 -69.2904 67.7275 35.55 + 82 120.662 1238 8 0 -69.2911 67.7278 34.15 + 82 135.818 553 7 1 -69.3051 67.7316 5.55 + 82 101.093 1238 7 0 -69.3051 67.732 4.15 + 82 111.744 553 6 1 -69.3045 67.7386 -24.45 + 82 107.467 1238 6 0 -69.3034 67.7393 -25.85 + 82 133.167 553 5 1 -69.2786 67.7502 -54.45 + 82 98.1123 1238 5 0 -69.2774 67.7507 -55.85 + 82 125.424 553 4 1 -69.2525 67.7608 -84.45 + 82 122.49 1238 4 0 -69.2519 67.7626 -85.85 + 82 106.453 554 3 1 -69.2384 67.7992 -114.45 + 82 194.226 1238 3 0 -69.2373 67.8006 -115.85 + 82 102.793 554 2 1 -69.2154 67.8236 -144.45 + 82 129.268 1238 2 0 -69.2151 67.8244 -145.85 + 82 124.983 554 1 1 -69.2067 67.8457 -174.45 + 82 119.695 1238 1 0 -69.2055 67.8474 -175.85 + 82 114.225 554 0 1 -69.1837 67.8822 -204.45 + 82 128.345 1239 0 0 -69.1827 67.8843 -205.85 + 82 7.99603 1239 3 0 -69.1968 67.85 -116.225 + 82 242.994 600 2 1 -59.9784 80.5753 -144.45 + 82 28.1089 1299 2 0 -59.7386 79.8873 -145.85 + 82 96.5239 1298 2 0 -59.7263 79.85 -145.933 + 82 163.07 594 1 1 -61.1275 63.0058 -174.45 + 82 219.637 595 1 1 -61.05 62.5423 -174.571 + 82 188.318 1208 1 0 -60.9541 61.6689 -175.85 + 82 38.8861 1207 1 0 -60.9628 61.65 -175.993 + 82 209.544 554 7 1 -69.2499 67.6908 5.34104 +Number of digits in this event: 18 Using G4ParticleGun... -Particle energy: 2.49048 LIN +Particle energy: 6.47715 LIN Particle: proton Event: 83 -Number of tracker hits in this event: 26 - 83 106.729 469 10 1 -86.149 62.2253 95.55 - 83 99.8838 1210 10 0 -86.1479 62.2228 94.15 - 83 138.924 469 9 1 -86.1201 62.1749 65.55 - 83 157.776 1210 9 0 -86.1203 62.1713 64.15 - 83 157.576 469 8 1 -86.1348 62.103 35.55 - 83 96.8155 1210 8 0 -86.1334 62.1012 34.15 - 83 300.201 469 7 1 -86.1067 62.0613 5.55 - 83 143.804 1210 7 0 -86.1033 62.0591 4.15 - 83 104.319 470 6 1 -86.0318 62.0176 -24.45 - 83 169.76 1209 6 0 -86.0277 62.0162 -25.85 - 83 113.777 470 5 1 -85.9478 61.9928 -54.45 - 83 95.8567 1209 5 0 -85.9451 61.9976 -55.85 - 83 231.335 470 4 1 -85.8916 62.0981 -84.45 - 83 98.8341 1210 4 0 -85.89 62.1017 -85.85 - 83 110.079 470 3 1 -85.8536 62.1632 -114.45 - 83 160.79 1210 3 0 -85.8523 62.1659 -115.85 - 83 117.57 471 2 1 -85.8317 62.2212 -144.45 - 83 100.145 1210 2 0 -85.8276 62.2224 -145.85 - 83 287.521 471 1 1 -85.7457 62.2576 -174.45 - 83 109.701 1211 1 0 -85.7417 62.2563 -175.85 - 83 105.548 471 0 1 -85.664 62.2208 -204.45 - 83 97.2382 1210 0 0 -85.6603 62.2197 -205.85 - 83 153.048 1265 0 0 -88.5864 73.0926 -206.115 - 83 218.801 470 7 1 -86.05 62.0043 5.16689 - 83 109.239 1207 7 0 -85.7587 61.6427 4.15 - 83 92.9599 1206 7 0 -85.6813 61.45 3.90419 -Number of digits in this event: 13 +Number of tracker hits in this event: 20 + 83 127.246 749 8 1 -30.076 -132.832 35.55 + 83 90.6912 236 8 0 -30.0761 -132.83 34.15 + 83 89.6249 749 7 1 -30.0728 -132.797 5.55 + 83 129.294 236 7 0 -30.0731 -132.794 4.15 + 83 107.513 749 6 1 -30.0833 -132.727 -24.45 + 83 120.587 237 6 0 -30.0834 -132.723 -25.85 + 83 104.362 749 5 1 -30.0873 -132.625 -54.45 + 83 100.287 237 5 0 -30.0878 -132.62 -55.85 + 83 103.413 749 4 1 -30.0986 -132.537 -84.45 + 83 150.851 238 4 0 -30.0991 -132.533 -85.85 + 83 93.6895 749 3 1 -30.1116 -132.459 -114.45 + 83 111.184 238 3 0 -30.1126 -132.457 -115.85 + 83 103.195 749 2 1 -30.1358 -132.408 -144.45 + 83 115.97 238 2 0 -30.138 -132.405 -145.85 + 83 172.334 749 1 1 -30.1826 -132.341 -174.45 + 83 156.6 239 1 0 -30.1875 -132.337 -175.85 + 83 101.524 748 0 1 -30.2889 -132.262 -204.45 + 83 201.969 239 0 0 -30.2938 -132.258 -205.85 + 83 133.08 29 5 0 4.31945 -174.197 -56.25 + 83 16.3389 28 5 0 4.50867 -174.35 -56.2358 +Number of digits in this event: 10 Using G4ParticleGun... -Particle energy: 5.95353 LIN +Particle energy: 9.75079 LIN Particle: proton Event: 84 -Number of tracker hits in this event: 29 - 84 104.857 386 10 1 -102.752 -52.3801 95.55 - 84 232.14 638 10 0 -102.752 -52.3807 94.15 - 84 144.37 387 9 1 -102.744 -52.3913 65.55 - 84 198.258 638 9 0 -102.744 -52.3914 64.15 - 84 175.018 387 8 1 -102.746 -52.3948 35.55 - 84 129.351 638 8 0 -102.745 -52.3949 34.15 - 84 170.723 387 7 1 -102.715 -52.3968 5.55 - 84 347.009 638 7 0 -102.715 -52.3977 4.15 - 84 124.544 387 6 1 -102.701 -52.4199 -24.45 - 84 131.701 638 6 0 -102.7 -52.4198 -25.85 - 84 113.279 387 5 1 -102.667 -52.419 -54.45 - 84 98.6584 638 5 0 -102.665 -52.4207 -55.85 - 84 117.267 387 4 1 -102.616 -52.459 -84.45 - 84 117.809 637 4 0 -102.614 -52.4608 -85.85 - 84 142.853 387 3 1 -102.569 -52.4982 -114.45 - 84 129.876 637 3 0 -102.565 -52.5002 -115.85 - 84 110.889 388 2 1 -102.495 -52.544 -144.45 - 84 161.799 637 2 0 -102.492 -52.5453 -145.85 - 84 132.956 388 1 1 -102.417 -52.5695 -174.45 - 84 161.857 637 1 0 -102.413 -52.5719 -175.85 - 84 156.671 389 0 1 -102.333 -52.6206 -204.45 - 84 117.103 637 0 0 -102.33 -52.6222 -205.85 - 84 152.885 386 6 1 -102.839 -52.4376 -24.45 - 84 64.9952 659 6 0 -99.7672 -48.1108 -25.8501 - 84 141.048 660 6 0 -99.7059 -48.05 -25.9107 - 84 80.7088 661 6 0 -99.3258 -47.85 -25.9107 - 84 117.271 662 6 0 -99.2221 -47.6499 -25.9043 - 84 434.666 404 6 1 -99.1748 -47.0369 -24.85 - 84 38.5422 405 6 1 -99.15 -46.9037 -24.6398 -Number of digits in this event: 19 +Number of tracker hits in this event: 26 + 84 138.34 1067 11 1 33.6131 65.4596 125.55 + 84 113.562 1227 11 0 33.613 65.4596 124.15 + 84 105.934 1067 10 1 33.6126 65.4572 95.55 + 84 120.917 1227 10 0 33.6131 65.4571 94.15 + 84 127.951 1067 9 1 33.6204 65.4533 65.55 + 84 103.083 1227 9 0 33.6208 65.4533 64.15 + 84 109.414 1067 8 1 33.6298 65.4498 35.55 + 84 103.609 1227 8 0 33.6306 65.4502 34.15 + 84 190.867 1067 7 1 33.6437 65.4555 5.55 + 84 132.707 1227 7 0 33.645 65.4561 4.15 + 84 200.417 1068 6 1 33.6727 65.467 -24.45 + 84 107.931 1227 6 0 33.6745 65.4682 -25.85 + 84 264.871 1068 5 1 33.7101 65.4964 -54.45 + 84 112.411 1227 5 0 33.7118 65.4982 -55.85 + 84 194.5 1068 4 1 33.7442 65.5356 -84.45 + 84 134.238 1227 4 0 33.7456 65.5373 -85.85 + 84 111.307 1068 3 1 33.7718 65.5734 -114.45 + 84 124.853 1227 3 0 33.7738 65.5757 -115.85 + 84 271.538 1068 2 1 33.8132 65.6238 -144.45 + 84 100.949 1227 2 0 33.8151 65.6266 -145.85 + 84 119.36 1069 1 1 33.8553 65.6856 -174.45 + 84 126.406 1228 1 0 33.858 65.6885 -175.85 + 84 145.479 1069 0 1 33.9141 65.7498 -204.45 + 84 104.623 1228 0 0 33.9166 65.7524 -205.85 + 84 152.721 1068 1 1 33.85 65.6732 -174.567 + 84 118.2 1232 3 0 33.427 66.5104 -115.85 +Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 8.57665 LIN +Particle energy: 9.58695 LIN Particle: proton Event: 85 -Number of tracker hits in this event: 280 - 85 112.561 1179 11 1 55.9985 35.4718 125.55 - 85 119.095 1077 11 0 55.9978 35.4727 124.15 - 85 109.057 1179 10 1 55.983 35.4937 95.55 - 85 393.515 1077 10 0 55.9823 35.4954 94.15 - 85 196.642 1179 9 1 55.9689 35.5285 65.55 - 85 136.588 1077 9 0 55.9688 35.5296 64.15 - 85 117.111 1179 8 1 55.9655 35.5526 35.55 - 85 275.697 1077 8 0 55.965 35.5541 34.15 - 85 129.377 1179 7 1 55.9538 35.5852 5.55 - 85 159.245 1077 7 0 55.9531 35.5869 4.15 - 85 132.382 1179 6 1 55.9363 35.6208 -24.45 - 85 235.467 1077 6 0 55.9353 35.6223 -25.85 - 85 18690.6 1179 5 1 55.9148 35.6546 -54.45 - 85 366.605 1076 5 0 56.544 35.2758 -55.85 - 85 1021.93 1075 5 0 56.587 35.25 -55.9289 - 85 314.52 1262 4 1 72.5952 25.9632 -84.45 - 85 987.066 1263 4 1 72.65 25.9487 -84.5393 - 85 1630.54 1028 4 0 73.4583 25.7325 -85.85 - 85 1473.21 1359 3 1 91.964 21.4683 -114.45 - 85 416.734 1360 3 1 92.15 21.4048 -114.751 - 85 1976.02 1005 3 0 92.801 21.2026 -115.85 - 85 2147.03 1451 2 1 110.42 14.8078 -144.45 - 85 1370.71 1452 2 1 110.55 14.7379 -144.703 - 85 5005.7 971 2 0 111.086 14.416 -145.85 - 85 242.146 1141 6 0 62.6925 48.3694 -26.25 - 85 196.335 1142 6 0 62.7354 48.45 -26.0696 - 85 141.081 1214 6 1 63.0236 48.9984 -24.85 - 85 270.349 1215 6 1 63.05 49.0487 -24.7383 - 85 330.138 1208 7 0 69.8944 61.6929 3.75 - 85 37.833 1209 7 0 69.9795 61.85 4.10394 - 85 102.681 1250 7 1 70.2247 62.3134 5.15 - 85 300.673 1251 7 1 70.25 62.3612 5.25788 - 85 312.515 1274 8 0 77.1403 74.9737 33.75 - 85 215.104 1275 8 0 77.1819 75.05 33.9223 - 85 789.763 1287 8 1 77.4794 75.5931 35.15 - 85 391.187 1338 9 0 85.1625 87.6867 63.75 - 85 10.6442 1339 9 0 85.2666 87.85 64.1365 - 85 501.663 1327 9 1 85.5411 88.2793 65.15 - 85 527.368 1404 10 0 93.1006 101.015 93.75 - 85 93.8382 1405 10 0 93.1806 101.15 94.0522 - 85 309.906 1366 10 1 93.4746 101.634 95.15 - 85 150.075 1367 10 1 93.55 101.759 95.4318 - 85 354.557 1472 11 0 101.294 114.613 123.75 - 85 96.939 1473 11 0 101.376 114.75 124.051 - 85 363.319 1407 11 1 101.675 115.254 125.15 - 85 143.95 1408 11 1 101.75 115.381 125.428 - 85 1.94881 1541 12 0 109.769 128.549 153.75 - 85 467.442 1542 12 0 109.77 128.55 153.752 - 85 454.704 1450 12 1 110.169 129.2 155.15 - 85 182.763 1614 13 0 118.451 143.071 183.75 - 85 274.165 1615 13 0 118.498 143.15 183.913 - 85 394.794 1493 13 1 118.861 143.751 185.15 - 85 108.55 1494 13 1 118.95 143.898 185.453 - 85 151.69 1689 14 0 127.535 158.111 213.75 - 85 423.52 1690 14 0 127.558 158.15 213.828 - 85 523.547 1539 14 1 127.96 158.817 215.15 - 85 811.221 1080 5 0 56.3884 36.1141 -55.85 - 85 139.876 1081 5 0 56.5285 36.25 -56.1922 - 85 665.607 1239 4 1 67.9533 46.946 -84.45 - 85 479.815 1240 4 1 68.05 47.0326 -84.7043 - 85 172.363 1136 4 0 68.481 47.4251 -85.85 - 85 816.807 1137 4 0 68.5083 47.45 -85.9228 - 85 1150.94 1296 3 1 79.2607 57.3552 -114.45 - 85 732.089 1188 3 0 79.8149 57.7692 -115.85 - 85 325.888 1189 3 0 79.9231 57.85 -116.122 - 85 1031.12 1353 2 1 90.8023 65.9378 -144.45 - 85 302.554 1354 2 1 90.95 65.9996 -144.759 - 85 968.335 1230 2 0 91.4738 66.199 -145.85 - 85 392.292 1231 2 0 91.6078 66.25 -146.129 - 85 1775.41 1427 1 1 105.581 71.4498 -174.45 - 85 1541.91 1258 1 0 106.166 71.7739 -175.85 - 85 345.712 1259 1 0 106.301 71.85 -176.175 - 85 2194.88 1495 0 1 119.17 77.9856 -204.45 - 85 559.233 1496 0 1 119.35 78.0649 -204.776 - 85 3229.73 1291 0 0 119.924 78.3081 -205.85 - 85 667.675 1070 5 0 55.8182 34.0877 -55.85 - 85 5714.03 1069 5 0 55.8158 34.05 -55.8778 - 85 7908.03 1068 5 0 55.8027 33.85 -56.0329 - 85 3282.39 1067 5 0 55.8913 33.65 -56.0606 - 85 1519.24 1066 5 0 55.8917 33.45 -56.1957 - 85 551.53 1083 5 0 55.6255 36.7886 -55.85 - 85 1741.26 1084 5 0 55.6098 36.85 -55.9127 - 85 1174.76 1085 5 0 55.5588 37.05 -56.1165 - 85 4405.77 1142 4 1 48.4891 64.9106 -84.45 - 85 359.368 1141 4 1 48.45 65.2466 -84.8234 - 85 1224.72 1230 4 0 48.3372 66.1622 -85.85 - 85 2959.59 1231 4 0 48.3263 66.25 -85.9485 - 85 1043.23 1232 4 0 48.307 66.45 -86.1786 - 85 4185.86 1077 5 0 56.2785 35.5891 -55.85 - 85 4346.45 1227 4 1 65.4769 34.0544 -84.45 - 85 4833.88 1069 4 0 65.965 33.979 -85.85 - 85 280.047 1278 3 1 75.8412 33.03 -114.45 - 85 5553.91 1279 3 1 75.85 33.0298 -114.474 - 85 6071.85 1064 3 0 76.34 33.0212 -115.85 - 85 3388.08 1329 2 1 85.9897 32.7213 -144.45 - 85 5451.7 1330 2 1 86.05 32.7348 -144.6 - 85 1325.02 1063 2 0 86.5317 32.8453 -145.85 - 85 9285.22 1064 2 0 86.552 32.85 -145.903 - 85 15.103 1152 4 1 50.4612 34.7153 -84.45 - 85 105.516 1151 4 1 50.45 34.7133 -84.5118 - 85 162.148 1073 4 0 50.2066 34.6708 -85.85 - 85 293.171 1124 3 1 45.0019 33.7477 -114.45 - 85 127.542 1068 3 0 44.7491 33.7101 -115.85 - 85 154.854 1097 2 1 39.5852 32.922 -144.45 - 85 88.8147 1070 1 1 34.1064 32.1511 -174.45 - 85 21.5833 1069 1 1 34.05 32.144 -174.761 - 85 157.045 1060 1 0 33.8526 32.1202 -175.85 - 85 73.9304 1043 0 1 28.6953 31.5043 -204.45 - 85 77.6344 1042 0 1 28.65 31.4992 -204.699 - 85 129.966 1057 0 0 28.4404 31.4757 -205.85 - 85 109.828 1065 5 0 56.4626 33.25 -55.8866 - 85 186.551 1064 5 0 56.5077 33.05 -55.985 - 85 73.0582 1063 5 0 56.5545 32.85 -56.0842 - 85 55.7934 1062 5 0 56.6007 32.65 -56.1834 - 85 534.118 1249 4 1 69.8948 -24.6121 -84.45 - 85 107.027 1250 4 1 70.05 -25.5115 -84.8261 - 85 60.7324 760 4 0 70.4309 -27.9303 -85.85 - 85 104.586 759 4 0 70.4498 -28.05 -85.9007 - 85 83.7695 758 4 0 70.4804 -28.25 -85.9856 - 85 70.5821 757 4 0 70.5106 -28.45 -86.0693 - 85 71.1997 756 4 0 70.5398 -28.65 -86.1537 - 85 7.4325 755 4 0 70.5699 -28.85 -86.2394 - 85 462.565 1300 3 1 80.1691 -95.5817 -114.45 - 85 141.234 1301 3 1 80.25 -96.3046 -114.728 - 85 44.5557 404 3 0 80.5561 -99.2537 -115.85 - 85 79.9827 403 3 0 80.5661 -99.35 -115.887 - 85 146.543 402 3 0 80.587 -99.55 -115.963 - 85 220.124 401 3 0 80.6089 -99.75 -116.04 - 85 311.179 400 3 0 80.6305 -99.95 -116.116 - 85 62.4317 399 3 0 80.6517 -100.15 -116.193 - 85 305.415 1339 2 1 88.0024 -171.372 -144.45 - 85 695.758 1340 2 1 88.05 -171.671 -144.552 - 85 70.0344 23 2 0 88.6419 -175.421 -145.85 - 85 134.265 22 2 0 88.6621 -175.55 -145.895 - 85 78.2043 21 2 0 88.6933 -175.75 -145.965 - 85 85.9233 20 2 0 88.7234 -175.95 -146.036 - 85 88.0582 19 2 0 88.7527 -176.15 -146.108 - 85 77.9447 18 2 0 88.7825 -176.35 -146.18 - 85 19.6365 1341 2 1 88.25 -172.349 -144.785 - 85 309.548 883 6 0 60.1076 -3.28816 -26.25 - 85 392.264 882 6 0 60.125 -3.45 -26.1321 - 85 296.321 881 6 0 60.1464 -3.65 -25.9859 - 85 936.725 1201 6 1 60.3126 -5.20228 -24.85 - 85 263.014 643 7 0 61.5988 -51.292 3.75 - 85 450.69 642 7 0 61.6029 -51.45 3.84771 - 85 403.644 641 7 0 61.6079 -51.65 3.97158 - 85 167.911 640 7 0 61.6124 -51.85 4.09474 - 85 1283.76 1208 7 1 61.6548 -53.6024 5.15 - 85 120.168 377 8 0 62.4728 -104.677 33.75 - 85 389.207 376 8 0 62.4739 -104.75 33.7906 - 85 425.036 375 8 0 62.4763 -104.95 33.902 - 85 397.116 374 8 0 62.4794 -105.15 34.0157 - 85 84.5701 373 8 0 62.4828 -105.35 34.129 - 85 1268.91 1212 8 1 62.5048 -107.141 35.15 - 85 101.094 111 9 0 65.9912 -157.899 63.75 - 85 468.588 110 9 0 65.9947 -157.95 63.7786 - 85 482.095 109 9 0 66.0092 -158.15 63.8915 - 85 585.718 108 9 0 66.0224 -158.35 64.0044 - 85 146.961 107 9 0 66.0354 -158.55 64.1168 - 85 1475.4 1230 9 1 66.1522 -160.389 65.15 - 85 73.2054 1264 6 0 55.8196 72.9814 -26.25 - 85 252.432 1265 6 0 55.8194 73.05 -26.1977 - 85 225.048 1266 6 0 55.819 73.25 -26.046 - 85 63.6343 1267 6 0 55.8184 73.45 -25.8948 - 85 680.039 1178 6 1 55.8202 74.8383 -24.85 - 85 158.456 1459 7 0 56.0679 112.036 3.75 - 85 230.999 1460 7 0 56.0686 112.15 3.83767 - 85 226.012 1461 7 0 56.07 112.35 3.99146 - 85 37.4876 1462 7 0 56.0715 112.55 4.14437 - 85 586.731 1180 7 1 56.0778 113.867 5.15 - 85 34.3662 1654 8 0 56.8678 151.106 33.75 - 85 201.838 1655 8 0 56.8688 151.15 33.7839 - 85 225.302 1656 8 0 56.8733 151.35 33.938 - 85 73.1163 1657 8 0 56.8778 151.55 34.0919 - 85 706.194 1184 8 1 56.9067 152.922 35.15 - 85 196.726 1180 5 1 56.05 35.4563 -54.5087 - 85 755.475 950 6 0 71.3281 10.1909 -26.25 - 85 1072.89 949 6 0 71.4132 10.05 -26.0923 - 85 143.936 948 6 0 71.5305 9.85 -25.8818 - 85 1233.67 1260 6 1 72.107 8.89506 -24.85 - 85 624.352 1261 6 1 72.25 8.6581 -24.5939 - 85 494.68 816 7 0 88.9025 -16.7765 3.75 - 85 1470.28 815 7 0 88.9507 -16.85 3.83192 - 85 587.864 814 7 0 89.0794 -17.05 4.05673 - 85 2127.71 1348 7 1 89.6834 -18.0154 5.15 - 85 843.323 1349 7 1 89.85 -18.2874 5.44539 - 85 2721.49 736 8 0 98.7466 -32.7244 33.75 - 85 113.556 1079 5 0 56.168 35.9721 -55.85 - 85 114.055 1212 4 1 62.4511 43.8062 -84.45 - 85 67.5927 1120 4 0 62.7703 44.1891 -85.85 - 85 77.9989 1121 4 0 62.8212 44.25 -86.073 - 85 195.974 1246 3 1 69.2905 52.0302 -114.45 - 85 34.8345 1161 3 0 69.6129 52.4117 -115.85 - 85 79.1398 1162 3 0 69.6453 52.45 -115.99 - 85 68.4863 1280 2 1 76.187 60.2464 -144.45 - 85 32.2361 1281 2 1 76.25 60.3203 -144.719 - 85 14.4398 1202 2 0 76.5145 60.6317 -145.85 - 85 125.43 1203 2 0 76.5301 60.65 -145.916 - 85 96.901 1315 1 1 83.196 68.4973 -174.45 - 85 50.762 1316 1 1 83.25 68.5601 -174.676 - 85 115.744 1244 1 0 83.5304 68.8852 -175.85 - 85 204.215 1351 0 1 90.3795 76.8238 -204.45 - 85 40.2469 1285 0 0 90.7004 77.212 -205.85 - 85 67.9635 1286 0 0 90.7318 77.25 -205.987 - 85 116.057 1324 0 1 85.0212 122.9 -204.723 - 85 26.8005 1769 1 0 46.8007 173.95 -176.21 - 85 212.99 1770 1 0 46.9088 174.15 -176.071 - 85 109.753 1078 5 0 56.3301 35.7917 -55.85 - 85 18.4654 1232 4 1 66.6319 39.2236 -84.45 - 85 82.3699 1233 4 1 66.65 39.2303 -84.4999 - 85 68.8419 1096 4 0 67.1378 39.414 -85.85 - 85 40.0876 1097 4 0 67.2333 39.45 -86.1145 - 85 118.647 1286 3 1 77.319 43.2528 -114.45 - 85 9.10523 1287 3 1 77.45 43.2969 -114.818 - 85 60.6432 1116 3 0 77.8148 43.4254 -115.85 - 85 77.7348 1117 3 0 77.8846 43.45 -116.047 - 85 136.813 1135 2 0 88.4288 47.186 -145.85 - 85 80.663 1392 1 1 98.6424 51.2138 -174.45 - 85 28.0019 1393 1 1 98.75 51.2574 -174.744 - 85 50.6318 1156 1 0 99.1564 51.4231 -175.85 - 85 87.2573 1157 1 0 99.2224 51.45 -176.03 - 85 124.24 1448 0 1 109.783 55.7543 -204.45 - 85 120.105 1179 0 0 110.297 55.9625 -205.85 - 85 64.0695 1226 3 1 65.4054 89.8313 -114.707 - 85 207.931 1262 0 0 97.1699 72.467 -206.25 - 85 42.5441 1263 0 0 96.8569 72.65 -205.935 - 85 51.0342 1378 0 1 95.8132 73.2602 -204.85 - 85 126.712 1377 0 1 95.75 73.2972 -204.784 - 85 203.074 1376 0 1 95.55 73.4146 -204.576 - 85 219.88 1351 1 0 67.0989 90.4252 -176.25 - 85 200.544 1352 1 0 66.8902 90.55 -176.042 - 85 65.587 1228 1 1 65.718 91.2718 -174.85 - 85 130.13 1227 1 1 65.65 91.3138 -174.781 - 85 91.6953 1226 1 1 65.45 91.4372 -174.577 - 85 56.028 1431 2 0 41.4048 106.507 -146.25 - 85 195.206 1432 2 0 41.336 106.55 -146.169 - 85 153.291 1100 2 1 40.2401 107.241 -144.85 - 85 307.415 1099 2 1 40.05 107.361 -144.62 - 85 260.196 1508 3 0 17.7488 121.896 -116.25 - 85 168.39 1509 3 0 17.666 121.95 -116.145 - 85 7.81714 983 3 1 16.6604 122.602 -114.85 - 85 179.71 982 3 1 16.65 122.608 -114.837 - 85 282.852 981 3 1 16.45 122.737 -114.579 - 85 30.3925 1579 4 0 -4.2341 136.133 -86.25 - 85 267.081 1580 4 0 -4.26082 136.15 -86.2134 - 85 155.893 873 4 1 -5.26161 136.789 -84.85 - 85 79.098 872 4 1 -5.45 136.908 -84.5939 - 85 333.873 1638 5 0 -28.5328 147.785 -56.25 - 85 21.2457 752 5 1 -29.6348 148.296 -54.85 - 85 159.97 751 5 1 -29.65 148.303 -54.8304 - 85 100.807 750 5 1 -29.85 148.395 -54.5735 - 85 13.0802 1697 6 0 -53.2385 159.739 -26.25 - 85 340.979 1698 6 0 -53.2602 159.75 -26.2237 - 85 28.9845 628 6 1 -54.4121 160.302 -24.85 - 85 139.239 627 6 1 -54.45 160.32 -24.8051 - 85 74.5022 626 6 1 -54.65 160.416 -24.5702 - 85 223.494 1745 7 0 -74.872 169.158 3.75 - 85 133.588 520 7 1 -75.8798 169.6 5.15 - 85 275.959 519 7 1 -76.05 169.675 5.38562 - 85 287.156 1785 8 0 -97.2393 177.232 33.75 - 85 62.5546 409 8 1 -98.2865 177.593 35.15 - 85 273.085 408 8 1 -98.35 177.614 35.2349 - 85 63.1724 407 8 1 -98.55 177.681 35.5038 - 85 83.8756 1375 0 1 95.35 73.514 -204.485 - 85 138.54 1159 4 1 52.0476 30.1333 -84.45 - 85 27.8185 1049 4 0 51.8673 29.8716 -85.85 - 85 136.953 1048 4 0 51.8524 29.85 -85.9656 - 85 193.248 1140 3 1 48.1735 24.5088 -114.45 - 85 124.467 1020 3 0 47.9922 24.2401 -115.85 - 85 11.9814 1121 2 1 44.2542 18.744 -144.45 - 85 108.966 1120 2 1 44.25 18.7379 -144.482 - 85 38.9849 992 2 0 44.0722 18.4743 -145.85 - 85 96.7892 991 2 0 44.0559 18.45 -145.976 - 85 109.357 1101 1 1 40.3369 12.9651 -174.45 - 85 87.1897 963 1 0 40.1522 12.6987 -175.85 - 85 40.8522 962 1 0 40.1184 12.65 -176.106 - 85 119.404 1081 0 1 36.3835 7.26739 -204.45 - 85 126.207 934 0 0 36.2008 7.00275 -205.85 - 85 151.599 1141 3 1 48.25 24.5616 -114.536 - 85 18.7837 1076 10 0 55.9654 35.4499 93.8683 -Number of digits in this event: 185 -Using G4ParticleGun... -Particle energy: 1.19591 LIN +Number of tracker hits in this event: 26 + 85 196.004 1228 11 1 65.8281 12.2994 125.55 + 85 106.156 961 11 0 65.8288 12.2995 124.15 + 85 133.173 1228 10 1 65.8429 12.3018 95.55 + 85 189.315 961 10 0 65.8439 12.3026 94.15 + 85 209.665 1229 9 1 65.8635 12.3187 65.55 + 85 244.826 961 9 0 65.8646 12.3208 64.15 + 85 134.592 1229 8 1 65.8849 12.3629 35.55 + 85 149.607 961 8 0 65.8851 12.3649 34.15 + 85 119.506 1229 7 1 65.8846 12.4021 5.55 + 85 183.841 961 7 0 65.8847 12.4042 4.15 + 85 110.121 1229 6 1 65.8844 12.4529 -24.45 + 85 129.074 962 6 0 65.8839 12.4556 -25.85 + 85 102.991 1229 5 1 65.8734 12.5093 -54.45 + 85 91.2203 962 5 0 65.8728 12.5118 -55.85 + 85 119.944 1229 4 1 65.861 12.5625 -84.45 + 85 130.253 962 4 0 65.8597 12.5656 -85.85 + 85 135.298 1228 3 1 65.8374 12.6296 -114.45 + 85 490.336 962 3 0 65.8365 12.6332 -115.85 + 85 143.934 1228 2 1 65.8179 12.7063 -144.45 + 85 98.4755 963 2 0 65.8172 12.7091 -145.85 + 85 116.086 1228 1 1 65.801 12.7654 -174.45 + 85 95.1112 963 1 0 65.7998 12.7678 -175.85 + 85 116.248 1228 0 1 65.7725 12.8171 -204.45 + 85 167.954 963 0 0 65.7707 12.8199 -205.85 + 85 27.6807 960 1 1 12.1453 -44.6491 -174.677 + 85 152.5 1228 9 1 65.85 12.3058 65.2857 +Number of digits in this event: 18 +Using G4ParticleGun... +Particle energy: 5.99764 LIN Particle: proton Event: 86 -Number of tracker hits in this event: 29 - 86 108.224 1377 10 1 95.6249 -17.3214 95.55 - 86 129.353 813 10 0 95.629 -17.3228 94.15 - 86 117.332 1377 9 1 95.7362 -17.3547 65.55 - 86 357.775 813 9 0 95.7362 -17.3516 64.15 - 86 138.262 1377 8 1 95.7185 -17.2667 35.55 - 86 172.151 813 8 0 95.7154 -17.2593 34.15 - 86 126.298 1377 7 1 95.6226 -17.1051 5.55 - 86 159.901 814 7 0 95.6153 -17.0976 4.15 - 86 155.837 1376 6 1 95.4717 -16.9714 -24.45 - 86 249.255 815 6 0 95.4609 -16.9625 -25.85 - 86 170.051 1375 5 1 95.1912 -16.8052 -54.45 - 86 110.154 816 5 0 95.1783 -16.7939 -55.85 - 86 200.708 1373 4 1 94.9145 -16.5719 -84.45 - 86 111.822 817 4 0 94.9005 -16.562 -85.85 - 86 118.837 1372 3 1 94.6103 -16.3751 -114.45 - 86 110.432 818 3 0 94.5956 -16.3669 -115.85 - 86 122.116 1370 2 1 94.3111 -16.2007 -144.45 - 86 135.14 819 2 0 94.2997 -16.1946 -145.85 - 86 151.289 1369 1 1 94.0548 -16.0794 -174.45 - 86 289.705 819 1 0 94.0426 -16.0754 -175.85 - 86 114.986 1368 0 1 93.8004 -15.9875 -204.45 - 86 158.377 820 0 0 93.7856 -15.9803 -205.85 - 86 35.9774 1374 5 1 95.15 -16.8383 -54.8386 - 86 2.2636 808 5 0 95.4679 -18.2789 -55.85 - 86 140.703 1373 5 1 94.8385 -21.2547 -54.85 - 86 132.559 812 9 0 96.1169 -17.45 63.938 - 86 58.2166 1384 9 1 97.0149 -16.597 65.15 - 86 80.7016 1383 9 1 96.95 -16.4996 65.3033 - 86 131.101 1382 9 1 96.75 -16.4115 65.4581 -Number of digits in this event: 19 +Number of tracker hits in this event: 18 + 86 114.886 303 8 1 -119.543 64.6027 35.55 + 86 97.7506 1222 8 0 -119.541 64.6042 34.15 + 86 107.361 303 7 1 -119.505 64.6319 5.55 + 86 117.67 1222 7 0 -119.504 64.6332 4.15 + 86 94.6631 303 6 1 -119.489 64.6687 -24.45 + 86 103.674 1223 6 0 -119.488 64.6699 -25.85 + 86 124.578 303 5 1 -119.474 64.6957 -54.45 + 86 159.505 1223 5 0 -119.474 64.697 -55.85 + 86 113.722 303 4 1 -119.463 64.7194 -84.45 + 86 116.858 1223 4 0 -119.463 64.7214 -85.85 + 86 106.849 303 3 1 -119.447 64.7621 -114.45 + 86 277.628 1223 3 0 -119.447 64.7657 -115.85 + 86 95.3113 303 2 1 -119.448 64.8391 -144.45 + 86 142.121 1223 2 0 -119.449 64.8436 -145.85 + 86 158.235 303 1 1 -119.475 64.9397 -174.45 + 86 108.489 1224 1 0 -119.475 64.944 -175.85 + 86 213.271 303 0 1 -119.476 65.0286 -204.45 + 86 163.982 1224 0 0 -119.476 65.0329 -205.85 +Number of digits in this event: 8 Using G4ParticleGun... -Particle energy: 5.67717 LIN +Particle energy: 7.26003 LIN Particle: proton Event: 87 -Number of tracker hits in this event: 22 - 87 109.82 1257 10 0 92.1219 71.6336 94.15 - 87 98.2912 1359 9 1 92.1209 71.6353 65.55 - 87 146.742 1257 9 0 92.1206 71.6357 64.15 - 87 113.35 1359 8 1 92.1143 71.6423 35.55 - 87 99.0983 1257 8 0 92.1145 71.6426 34.15 - 87 102.118 1359 7 1 92.1203 71.6518 5.55 - 87 147.129 1258 7 0 92.1226 71.652 4.15 - 87 120.433 1360 6 1 92.1675 71.6613 -24.45 - 87 96.4663 1258 6 0 92.1706 71.6615 -25.85 - 87 86.713 1360 5 1 92.2325 71.6628 -54.45 - 87 106.287 1258 5 0 92.2353 71.6625 -55.85 - 87 107.487 1360 4 1 92.2884 71.6515 -84.45 - 87 152.157 1258 4 0 92.2914 71.6508 -85.85 - 87 96.9689 1361 3 1 92.3504 71.6351 -114.45 - 87 127.306 1257 3 0 92.3533 71.6337 -115.85 - 87 165.641 1361 2 1 92.4158 71.6044 -144.45 - 87 107.977 1257 2 0 92.4199 71.6041 -145.85 - 87 152.166 1361 1 1 92.506 71.5995 -174.45 - 87 115.785 1257 1 0 92.5083 71.6004 -175.85 - 87 112.931 1362 0 1 92.5564 71.6165 -204.45 - 87 118.8 1257 0 0 92.5569 71.6168 -205.85 - 87 192.964 1360 2 1 92.35 71.6904 -144.646 -Number of digits in this event: 9 +Number of tracker hits in this event: 21 + 87 120.374 1352 9 1 90.6913 88.0242 65.55 + 87 116.279 1339 9 0 90.6906 88.0249 64.15 + 87 144.317 1352 8 1 90.6777 88.0391 35.55 + 87 111.3 1339 8 0 90.676 88.0405 34.15 + 87 188.673 1352 7 1 90.6425 88.0675 5.55 + 87 111.083 1340 7 0 90.6408 88.0692 4.15 + 87 112.424 1352 6 1 90.6025 88.103 -24.45 + 87 102.914 1340 6 0 90.6002 88.1058 -25.85 + 87 115.193 1352 5 1 90.552 88.1614 -54.45 + 87 128.445 1340 5 0 90.5489 88.1637 -55.85 + 87 140.838 1351 4 1 90.481 88.2071 -84.45 + 87 80.3683 1340 4 0 90.4797 88.2075 -85.85 + 87 122.509 1351 3 1 90.4552 88.2159 -114.45 + 87 368.762 1340 3 0 90.4536 88.2162 -115.85 + 87 125.709 1351 2 1 90.4199 88.2243 -144.45 + 87 109.113 1340 2 0 90.4172 88.2238 -145.85 + 87 90.261 1351 1 1 90.3659 88.2091 -174.45 + 87 138.362 1340 1 0 90.3638 88.2091 -175.85 + 87 121.614 1350 0 1 90.3212 88.2091 -204.45 + 87 114.676 1340 0 0 90.3194 88.2082 -205.85 + 87 213.164 1353 8 1 90.75 88.0497 35.3756 +Number of digits in this event: 12 Using G4ParticleGun... -Particle energy: 2.81509 LIN +Particle energy: 4.7387 LIN Particle: proton Event: 88 -Number of tracker hits in this event: 21 - 88 18.3511 1360 10 0 72.1196 92.1931 93.8041 - 88 107.629 1260 9 1 72.1247 92.1957 65.55 - 88 112.408 1360 9 0 72.1238 92.1973 64.15 - 88 93.7173 1260 8 1 72.105 92.2336 35.55 - 88 141.644 1360 8 0 72.1066 92.2376 34.15 - 88 106.817 1260 7 1 72.1428 92.3283 5.55 - 88 117.822 1360 7 0 72.1458 92.3291 4.15 - 88 104.743 1260 6 1 72.2103 92.3467 -24.45 - 88 91.1611 1360 6 0 72.2123 92.349 -25.85 - 88 109.624 1261 5 1 72.2536 92.3973 -54.45 - 88 109.554 1361 5 0 72.2539 92.4002 -55.85 - 88 198.531 1261 4 1 72.2625 92.448 -84.45 - 88 105.09 1361 4 0 72.2642 92.4491 -85.85 - 88 116.979 1261 3 1 72.2967 92.4762 -114.45 - 88 96.5886 1361 3 0 72.3023 92.4785 -115.85 - 88 119.691 1261 2 1 72.4166 92.5252 -144.45 - 88 114.767 1361 2 0 72.425 92.5283 -145.85 - 88 129.721 1262 1 1 72.6012 92.5864 -174.45 - 88 124.022 1362 1 0 72.6118 92.5877 -175.85 - 88 117.401 1263 0 1 72.834 92.6079 -204.45 - 88 124.058 1362 0 0 72.8417 92.6088 -205.85 -Number of digits in this event: 6 -Using G4ParticleGun... -Particle energy: 2.33811 LIN +Number of tracker hits in this event: 33 + 88 123.866 542 11 1 -71.5911 -2.31796 125.55 + 88 103.736 888 11 0 -71.5919 -2.31832 124.15 + 88 109.509 542 10 1 -71.6073 -2.32803 95.55 + 88 160.159 888 10 0 -71.6079 -2.3292 94.15 + 88 112.047 542 9 1 -71.6223 -2.35081 65.55 + 88 101.389 888 9 0 -71.6236 -2.35108 64.15 + 88 121.254 542 8 1 -71.6453 -2.35277 35.55 + 88 110.046 888 8 0 -71.6473 -2.35294 34.15 + 88 100.024 541 7 1 -71.6854 -2.35606 5.55 + 88 100.61 888 7 0 -71.6875 -2.35506 4.15 + 88 125.045 541 6 1 -71.7289 -2.32997 -24.45 + 88 109.783 888 6 0 -71.7313 -2.32723 -25.85 + 88 109.283 541 5 1 -71.7801 -2.26285 -54.45 + 88 112.319 888 5 0 -71.7831 -2.25975 -55.85 + 88 118.199 541 4 1 -71.8462 -2.19536 -84.45 + 88 114.914 889 4 0 -71.8486 -2.19198 -85.85 + 88 92.9021 540 3 1 -71.8986 -2.12653 -114.45 + 88 116.693 889 3 0 -71.901 -2.12374 -115.85 + 88 119.218 540 2 1 -71.9495 -2.07323 -144.45 + 88 137.887 889 2 0 -71.9519 -2.07061 -145.85 + 88 105.189 540 1 1 -72.0015 -2.02105 -174.45 + 88 98.5831 890 1 0 -72.0029 -2.01937 -175.85 + 88 117.936 540 0 1 -72.0329 -1.98316 -204.45 + 88 101.328 890 0 0 -72.0344 -1.98267 -205.85 + 88 141.812 652 1 0 -51.1576 -49.5117 -176.25 + 88 68.5004 1292 6 1 78.45 -144.667 -24.585 + 88 6.98759 811 6 0 -72.3746 -17.8405 -26.25 + 88 114.191 810 6 0 -72.3815 -17.85 -26.1905 + 88 274.658 523 6 1 -75.2577 -19.2643 -24.8499 + 88 137.504 522 6 1 -75.45 -19.4429 -24.7048 + 88 76.1148 1069 1 0 109.895 33.8522 -176.032 + 88 40.359 381 14 0 92.3164 -103.834 214.074 + 88 15.6321 1680 11 1 156.15 67.0419 125.425 +Number of digits in this event: 12 +Using G4ParticleGun... +Particle energy: 1.7809 LIN Particle: proton Event: 89 -Number of tracker hits in this event: 28 - 89 276.624 1390 10 1 98.3348 -7.5215 95.55 - 89 170.79 862 10 0 98.3354 -7.5204 94.15 - 89 145.295 1390 9 1 98.349 -7.5051 65.55 - 89 11.6871 1391 9 1 98.35 -7.50526 65.2036 - 89 305.293 862 9 0 98.3533 -7.50535 64.15 - 89 236.155 1391 8 1 98.451 -7.509 35.55 - 89 143.342 862 8 0 98.4523 -7.50956 34.15 - 89 224.8 1391 7 1 98.4919 -7.53444 5.55 - 89 174.476 862 7 0 98.4939 -7.53682 4.15 - 89 114.001 1391 6 1 98.532 -7.60437 -24.45 - 89 110.069 862 6 0 98.5342 -7.60636 -25.85 - 89 164.339 1392 5 1 98.5735 -7.64602 -54.45 - 89 26.515 862 5 0 98.5753 -7.64987 -55.85 - 89 95.6474 861 5 0 98.5754 -7.65 -55.8965 - 89 116.899 1392 4 1 98.6198 -7.72191 -84.45 - 89 114.41 861 4 0 98.6211 -7.72898 -85.85 - 89 103.059 1392 3 1 98.6446 -7.88418 -114.45 - 89 138.931 860 3 0 98.6468 -7.89236 -115.85 - 89 124.376 1392 2 1 98.6959 -8.07736 -144.45 - 89 123.953 859 2 0 98.7008 -8.0845 -145.85 - 89 109.598 1393 1 1 98.8066 -8.2324 -174.45 - 89 138.858 859 1 0 98.813 -8.2415 -175.85 - 89 158.492 1393 0 1 98.9399 -8.42748 -204.45 - 89 111.228 858 0 0 98.9485 -8.4394 -205.85 - 89 167.272 863 9 0 98.0631 -7.44972 63.8655 - 89 5.25378 1391 10 1 98.35 -7.61615 95.2772 - 89 106.439 859 10 0 98.1593 -8.15145 94.1499 - 89 173.018 860 10 0 98.0986 -8.05 94.0199 -Number of digits in this event: 17 +Number of tracker hits in this event: 25 + 89 403.01 261 8 1 -127.87 65.2534 35.55 + 89 116.945 1226 8 0 -127.872 65.2532 34.15 + 89 120.197 261 7 1 -127.901 65.2566 5.55 + 89 104.094 1226 7 0 -127.899 65.2586 4.15 + 89 121.238 261 6 1 -127.856 65.2858 -24.45 + 89 97.0705 1226 6 0 -127.855 65.2813 -25.85 + 89 127.348 261 5 1 -127.833 65.1859 -54.45 + 89 160.199 1225 5 0 -127.833 65.1826 -55.85 + 89 139.759 261 4 1 -127.844 65.1105 -84.45 + 89 140.309 1225 4 0 -127.849 65.1014 -85.85 + 89 134.407 260 3 1 -127.951 64.9179 -114.45 + 89 126.479 1224 3 0 -127.952 64.9084 -115.85 + 89 133.949 260 2 1 -127.974 64.7166 -144.45 + 89 98.1486 1223 2 0 -127.972 64.7085 -145.85 + 89 115.609 261 1 1 -127.921 64.5638 -174.45 + 89 295.645 1222 1 0 -127.914 64.5572 -175.85 + 89 33.6044 261 0 1 -127.751 64.4232 -204.45 + 89 117.303 262 0 1 -127.75 64.4228 -204.575 + 89 170.549 1221 0 0 -127.742 64.4191 -205.85 + 89 36.0343 1205 1 0 -164.876 61.0911 -176.25 + 89 1.08816 1329 1 0 -128.253 86.0162 -176.25 + 89 3.91716 688 1 0 100.933 -42.2502 -176.25 + 89 7.26684 647 1 0 169.077 -50.5786 -176.25 + 89 129.756 1428 1 0 -120.593 105.921 -176.25 + 89 6.92983 1429 1 0 -120.575 105.95 -176.229 +Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 1.41304 LIN +Particle energy: 1.77312 LIN Particle: proton Event: 90 -Number of tracker hits in this event: 22 - 90 158.212 1155 10 1 51.1891 -67.9814 95.55 - 90 109.898 560 10 0 51.1906 -67.9816 94.15 - 90 140.828 1155 9 1 51.2169 -67.977 65.55 - 90 134.408 560 9 0 51.2204 -67.9764 64.15 - 90 146.95 1156 8 1 51.2778 -67.9777 35.55 - 90 119.412 560 8 0 51.2807 -67.9754 34.15 - 90 125.897 1156 7 1 51.3417 -67.9498 5.55 - 90 115.668 560 7 0 51.342 -67.9475 4.15 - 90 218.479 1156 6 1 51.3501 -67.8972 -24.45 - 90 110.646 560 6 0 51.3479 -67.892 -25.85 - 90 142.844 1156 5 1 51.3032 -67.7953 -54.45 - 90 141.969 561 5 0 51.2998 -67.7923 -55.85 - 90 236.879 1155 4 1 51.2026 -67.7269 -84.45 - 90 348.309 561 4 0 51.1971 -67.7241 -85.85 - 90 154.648 1155 3 1 51.0919 -67.6671 -114.45 - 90 105.269 561 3 0 51.0885 -67.6631 -115.85 - 90 99.6085 1154 2 1 51.0022 -67.5978 -144.45 - 90 124.945 562 2 0 50.9981 -67.5948 -145.85 - 90 209.637 1154 1 1 50.9105 -67.5407 -174.45 - 90 113.051 562 1 0 50.9082 -67.538 -175.85 - 90 117.284 1154 0 1 50.8539 -67.4834 -204.45 - 90 140.804 562 0 0 50.8478 -67.4804 -205.85 -Number of digits in this event: 15 +Number of tracker hits in this event: 48 + 90 195.907 1379 10 1 96.0841 -28.7021 95.55 + 90 127.252 756 10 0 96.0869 -28.7043 94.15 + 90 438.682 1380 9 1 96.1533 -28.7904 65.55 + 90 175.705 756 9 0 96.1522 -28.7941 64.15 + 90 157.765 1379 8 1 96.1354 -28.8622 35.55 + 90 136.98 755 8 0 96.1345 -28.8687 34.15 + 90 88.6296 1379 7 1 96.1146 -28.9973 5.55 + 90 115.706 755 7 0 96.1168 -29.0047 4.15 + 90 124.125 1380 6 1 96.1615 -29.1688 -24.45 + 90 128.767 754 6 0 96.1664 -29.1746 -25.85 + 90 200.386 1380 5 1 96.2602 -29.3157 -54.45 + 90 122.3 753 5 0 96.2646 -29.3255 -55.85 + 90 113.07 1381 4 1 96.3682 -29.522 -84.45 + 90 174.543 752 4 0 96.3729 -29.5341 -85.85 + 90 232.245 1381 3 1 96.478 -29.7874 -114.45 + 90 121.828 751 3 0 96.4826 -29.8021 -115.85 + 90 178.804 1382 2 1 96.5745 -30.1281 -144.45 + 90 114.643 749 2 0 96.5752 -30.1437 -145.85 + 90 104.011 1382 1 1 96.5839 -30.4475 -174.45 + 90 131.804 747 1 0 96.5802 -30.4592 -175.85 + 90 129.263 1381 0 1 96.513 -30.7013 -204.45 + 90 106.326 746 0 0 96.5085 -30.7133 -205.85 + 90 66.0618 1365 3 1 93.1777 -104.913 -114.45 + 90 128.769 1364 3 1 93.15 -104.912 -114.46 + 90 48.3532 531 14 0 121.468 -73.7425 213.75 + 90 131.217 532 14 0 121.518 -73.65 213.923 + 90 146.023 1506 14 1 121.436 -72.9706 215.15 + 90 90.8312 1505 14 1 121.35 -72.603 215.485 + 90 236.892 1504 14 1 121.15 -72.5614 215.527 + 90 79.1538 1503 14 1 120.95 -72.8821 215.385 + 90 137.804 1502 14 1 120.75 -72.9812 215.282 + 90 235.29 1501 14 1 120.55 -72.945 215.261 + 90 234.626 437 14 0 113.977 -92.563 213.75 + 90 145.021 1469 14 1 114.134 -93.2301 215.15 + 90 106.224 1470 14 1 114.15 -93.3063 215.272 + 90 36.3979 438 14 0 113.975 -92.5499 213.81 + 90 148.145 1075 3 1 35.25 -46.531 -114.791 + 90 132.061 116 4 0 152.594 -156.76 -86.2498 + 90 34.2196 1687 4 1 157.55 -163.274 -84.845 + 90 168.64 748 1 0 96.5843 -30.45 -175.974 + 90 58.5894 1380 3 1 96.35 -30.1344 -114.765 + 90 33.1842 734 3 0 95.2654 -33.1361 -115.85 + 90 89.5633 733 3 0 95.2256 -33.2506 -115.886 + 90 62.7851 732 3 0 95.189 -33.4502 -115.991 + 90 47.6047 731 3 0 95.2209 -33.65 -116.137 + 90 3.74645 1405 2 1 101.342 -51.5175 -144.45 + 90 349.039 1406 2 1 101.35 -51.5197 -144.459 + 90 80.1119 1407 2 1 101.55 -51.676 -144.592 +Number of digits in this event: 32 Using G4ParticleGun... -Particle energy: 5.03751 LIN +Particle energy: 2.82283 LIN Particle: proton Event: 91 Number of tracker hits in this event: 25 - 91 108.134 1195 11 1 59.1718 15.2774 125.55 - 91 104.442 976 11 0 59.1724 15.2772 124.15 - 91 124.957 1195 10 1 59.1884 15.2694 95.55 - 91 103.516 976 10 0 59.1903 15.2688 94.15 - 91 167.785 1195 9 1 59.2269 15.2632 65.55 - 91 102.26 976 9 0 59.2277 15.2629 64.15 - 91 147.308 1195 8 1 59.2355 15.2559 35.55 - 91 188.246 976 8 0 59.2365 15.2567 34.15 - 91 102.866 1196 7 1 59.2619 15.2752 5.55 - 91 156.36 976 7 0 59.2631 15.2755 4.15 - 91 96.6241 1196 6 1 59.2891 15.2826 -24.45 - 91 137.141 976 6 0 59.2892 15.2812 -25.85 - 91 128.074 1196 5 1 59.2948 15.2563 -54.45 - 91 125.747 976 5 0 59.2946 15.2546 -55.85 - 91 106.286 1196 4 1 59.2909 15.2165 -84.45 - 91 106.313 975 4 0 59.2917 15.2148 -85.85 - 91 230.55 1196 3 1 59.3136 15.1762 -114.45 - 91 110.904 975 3 0 59.3156 15.1723 -115.85 - 91 95.4172 1196 2 1 59.3528 15.0932 -144.45 - 91 137.262 975 2 0 59.3551 15.0896 -145.85 - 91 115.204 1196 1 1 59.4007 15.0188 -174.45 - 91 144.898 974 1 0 59.3978 15.0135 -175.85 - 91 105.672 1196 0 1 59.3382 14.9055 -204.45 - 91 131.923 974 0 0 59.3346 14.9001 -205.85 - 91 165.211 1195 3 1 59.25 15.1167 -114.689 -Number of digits in this event: 14 + 91 131.872 763 11 1 -27.264 42.7562 125.55 + 91 215.037 1113 11 0 -27.2633 42.7545 124.15 + 91 135.57 764 10 1 -27.2498 42.7125 95.55 + 91 127.392 1113 10 0 -27.2408 42.7126 94.15 + 91 97.2782 765 9 1 -27.0458 42.7174 65.55 + 91 110.891 1113 9 0 -27.0322 42.7169 64.15 + 91 99.6167 766 8 1 -26.7468 42.7024 35.55 + 91 124.996 1113 8 0 -26.7347 42.6999 34.15 + 91 118.781 767 7 1 -26.4775 42.6543 5.55 + 91 110.229 1113 7 0 -26.4625 42.6522 4.15 + 91 145.982 769 6 1 -26.1426 42.6004 -24.45 + 91 126.854 1112 6 0 -26.1281 42.5968 -25.85 + 91 172.562 771 5 1 -25.8203 42.5261 -54.45 + 91 126.415 1112 5 0 -25.7981 42.5211 -55.85 + 91 128.67 773 4 1 -25.3416 42.425 -84.45 + 91 188.725 1111 4 0 -25.3178 42.4202 -85.85 + 91 164.56 776 3 1 -24.8272 42.3357 -114.45 + 91 106.582 1111 3 0 -24.8048 42.3299 -115.85 + 91 157.691 778 2 1 -24.3567 42.229 -144.45 + 91 109.456 1110 2 0 -24.3335 42.2249 -145.85 + 91 110.258 780 1 1 -23.8574 42.1334 -174.45 + 91 150.032 1110 1 0 -23.8325 42.1284 -175.85 + 91 171.806 783 0 1 -23.3329 42.0355 -204.45 + 91 139.174 1109 0 0 -23.3086 42.031 -205.85 + 91 177.851 770 5 1 -25.85 42.4952 -54.5804 +Number of digits in this event: 18 Using G4ParticleGun... -Particle energy: 5.15048 LIN +Particle energy: 2.54416 LIN Particle: proton Event: 92 -Number of tracker hits in this event: 106 - 92 120.312 1136 9 1 47.3498 114.726 65.55 - 92 111.709 1472 9 0 47.3497 114.725 64.15 - 92 119.652 1136 8 1 47.3438 114.709 35.55 - 92 124.459 1472 8 0 47.3455 114.707 34.15 - 92 203.704 1136 7 1 47.383 114.667 5.55 - 92 98.2783 1472 7 0 47.3843 114.664 4.15 - 92 120.61 1136 6 1 47.4073 114.591 -24.45 - 92 107.245 1472 6 0 47.4085 114.589 -25.85 - 92 14407.5 1136 5 1 47.4309 114.54 -54.45 - 92 4177.51 1465 5 0 46.8381 113.225 -55.85 - 92 848.715 1464 5 0 46.8041 113.15 -55.9093 - 92 934.664 1463 5 0 46.7156 112.95 -56.0649 - 92 182.127 1462 5 0 46.6311 112.75 -56.2191 - 92 1742.29 1055 4 1 31.1672 72.1865 -84.45 - 92 1364.9 1054 4 1 31.05 71.8945 -84.6758 - 92 742.971 1251 4 0 30.4514 70.3773 -85.85 - 92 1340.25 1250 4 0 30.4011 70.25 -85.9484 - 92 1457.53 1249 4 0 30.3201 70.05 -86.0964 - 92 65.0577 1248 4 0 30.2416 69.85 -86.241 - 92 4173.03 1135 5 1 47.25 114.657 -54.5754 - 92 755.646 1472 5 0 46.7238 114.745 -55.85 - 92 26349.4 1473 5 0 46.7066 114.75 -55.8752 - 92 2430.43 1467 5 0 47.0777 113.624 -55.85 - 92 8166.34 1466 5 0 47.0491 113.55 -55.9337 - 92 988.37 1086 4 1 37.3299 88.5511 -84.45 - 92 469.459 1085 4 1 37.25 88.329 -84.7177 - 92 579.074 1336 4 0 36.8935 87.3831 -85.85 - 92 941.267 1335 4 0 36.8434 87.25 -86.0094 - 92 461.995 1043 3 1 28.6885 63.9138 -114.45 - 92 1767.96 1042 3 1 28.65 63.8328 -114.535 - 92 772.291 1212 3 0 28.0514 62.5763 -115.85 - 92 1304.85 1211 3 0 27.9915 62.45 -115.981 - 92 372.201 1210 3 0 27.8955 62.25 -116.194 - 92 3182.13 970 2 1 14.2307 35.0111 -144.45 - 92 3038.99 969 2 1 14.05 34.8278 -144.692 - 92 3840.88 1069 2 0 13.2495 34.0363 -145.85 - 92 5532.61 1471 5 0 47.2408 114.44 -55.85 - 92 6142.67 1137 5 1 47.45 114.541 -54.8217 - 92 434.16 1138 5 1 47.65 115.318 -54.5447 - 92 137.493 1141 4 1 48.424 118.214 -84.45 - 92 132.393 1491 4 0 48.471 118.396 -85.85 - 92 97.6331 1146 3 1 49.4244 122.101 -114.45 - 92 149.563 1510 3 0 49.4727 122.281 -115.85 - 92 118.949 1152 2 1 50.4741 125.941 -144.45 - 92 73.7836 1529 2 0 50.5181 126.117 -145.85 - 92 45.4541 1530 2 0 50.5265 126.15 -146.115 - 92 139.774 1156 1 1 51.4111 129.72 -174.45 - 92 126.663 1548 1 0 51.4549 129.892 -175.85 - 92 122.062 1161 0 1 52.3523 133.389 -204.45 - 92 131.076 1567 0 0 52.4006 133.562 -205.85 - 92 122.472 1474 5 0 47.5257 114.95 -55.8575 - 92 117.802 1150 4 1 50.1435 126.219 -84.45 - 92 147.93 1533 4 0 50.2742 126.777 -85.85 - 92 112.504 1164 3 1 52.9402 138.23 -114.45 - 92 150.83 1593 3 0 53.0724 138.788 -115.85 - 92 176.379 1178 2 1 55.8089 150.2 -144.45 - 92 158.972 1653 2 0 55.9393 150.752 -145.85 - 92 221.273 1192 1 1 58.5845 162.037 -174.45 - 92 214.489 1712 1 0 58.7159 162.592 -175.85 - 92 0.0372169 1713 1 0 58.7532 162.75 -176.25 - 92 269.49 1206 0 1 61.3735 173.897 -204.45 - 92 79.0871 1771 0 0 61.5102 174.455 -205.85 - 92 45.4153 1772 0 0 61.5335 174.55 -206.089 - 92 9.21451 1769 0 0 59.4193 174.038 -205.85 - 92 165.462 1197 1 1 59.6193 162.042 -174.85 - 92 104.677 1198 1 1 59.65 162.013 -174.836 - 92 131.368 1198 2 1 59.7485 150.666 -144.85 - 92 4.61597 1651 2 0 60.5201 150.519 -145.85 - 92 15.7447 1203 2 1 60.6968 152.242 -144.85 - 92 8.79282 1660 2 0 60.6317 152.322 -145.85 - 92 11464.8 1470 5 0 49.5953 114.35 -56.2105 - 92 25.413 1103 6 0 43.3931 40.6771 -26.25 - 92 174.975 1102 6 0 43.3916 40.65 -26.2395 - 92 186.612 1101 6 0 43.3805 40.45 -26.162 - 92 289.852 1100 6 0 43.3691 40.25 -26.0849 - 92 434.135 1099 6 0 43.3576 40.05 -26.0075 - 92 188.926 1098 6 0 43.3453 39.85 -25.9302 - 92 3.75755 1097 6 0 43.3335 39.65 -25.8529 - 92 1145.82 1115 6 1 43.1824 37.0613 -24.85 - 92 184.969 678 7 0 40.1038 -44.295 3.75 - 92 282.171 677 7 0 40.098 -44.45 3.80438 - 92 225.417 676 7 0 40.0903 -44.65 3.87413 - 92 153.645 675 7 0 40.0822 -44.85 3.94364 - 92 177.33 674 7 0 40.0735 -45.05 4.01285 - 92 202.922 673 7 0 40.0651 -45.25 4.08171 - 92 1959.02 1099 7 1 39.9467 -48.3827 5.15 - 92 13.2385 166 8 0 38.0624 -146.931 33.75 - 92 182.301 165 8 0 38.0621 -146.95 33.7554 - 92 170.125 164 8 0 38.0583 -147.15 33.8135 - 92 162.871 163 8 0 38.055 -147.35 33.8725 - 92 202.696 162 8 0 38.0521 -147.55 33.9318 - 92 231.701 161 8 0 38.0486 -147.75 33.9915 - 92 193.795 160 8 0 38.0451 -147.95 34.0516 - 92 147.595 159 8 0 38.042 -148.15 34.1109 - 92 1428.86 1089 8 1 37.9816 -151.642 35.15 - 92 110.825 1090 8 1 38.05 -152.061 35.2466 - 92 102.768 1135 4 1 47.1413 114.131 -84.45 - 92 91.1947 1469 4 0 47.1389 114.111 -85.85 - 92 98.8671 1135 3 1 47.102 113.663 -114.45 - 92 105.594 1467 3 0 47.1036 113.645 -115.85 - 92 106.662 1135 2 1 47.1193 113.292 -144.45 - 92 101.627 1465 2 0 47.114 113.275 -145.85 - 92 96.0874 1134 1 1 47.007 112.959 -174.45 - 92 109.592 1463 1 0 46.9919 112.944 -175.85 - 92 129.609 1132 0 1 46.6357 112.598 -204.45 - 92 142.756 1462 0 0 46.6188 112.579 -205.85 -Number of digits in this event: 79 -Using G4ParticleGun... -Particle energy: 2.54479 LIN +Number of tracker hits in this event: 19 + 92 143.854 1523 8 1 124.895 60.7897 35.55 + 92 159.492 1203 8 0 124.895 60.7875 34.15 + 92 129.978 1523 7 1 124.879 60.7525 5.55 + 92 142.973 1203 7 0 124.876 60.7493 4.15 + 92 130.131 1523 6 1 124.826 60.6795 -24.45 + 92 130.64 1203 6 0 124.821 60.6762 -25.85 + 92 116.18 1522 5 1 124.725 60.6093 -54.45 + 92 103.441 1202 5 0 124.72 60.6062 -55.85 + 92 108.843 1522 4 1 124.616 60.5392 -84.45 + 92 151.368 1202 4 0 124.611 60.5367 -85.85 + 92 133.193 1521 3 1 124.491 60.4802 -114.45 + 92 162.427 1202 3 0 124.485 60.4755 -115.85 + 92 90.0879 1521 2 1 124.374 60.3826 -144.45 + 92 119.227 1201 2 0 124.368 60.3776 -145.85 + 92 125.425 1520 1 1 124.241 60.2767 -174.45 + 92 130.719 1201 1 0 124.235 60.2705 -175.85 + 92 233.58 1519 0 1 124.106 60.1414 -204.45 + 92 173.263 1200 0 0 124.101 60.1362 -205.85 + 92 417.974 1518 0 1 123.95 60.2454 -204.73 +Number of digits in this event: 15 +Using G4ParticleGun... +Particle energy: 6.86189 LIN Particle: proton Event: 93 -Number of tracker hits in this event: 30 - 93 117.579 1533 8 1 126.918 57.5066 35.55 - 93 99.9902 1187 8 0 126.916 57.507 34.15 - 93 102.873 1533 7 1 126.864 57.512 5.55 - 93 110.653 1187 7 0 126.859 57.5124 4.15 - 93 150.916 1533 6 1 126.758 57.52 -24.45 - 93 150.061 1187 6 0 126.752 57.5232 -25.85 - 93 350.864 1532 5 1 126.625 57.5821 -54.45 - 93 181.237 1187 5 0 126.618 57.5834 -55.85 - 93 147.527 1531 4 1 126.487 57.6016 -84.45 - 93 120.243 1187 4 0 126.479 57.6002 -85.85 - 93 109.504 1530 3 1 126.322 57.5731 -114.45 - 93 157.255 1187 3 0 126.318 57.5715 -115.85 - 93 141.38 1530 2 1 126.228 57.5251 -144.45 - 93 113.455 1187 2 0 126.223 57.5204 -145.85 - 93 136.03 1529 1 1 126.118 57.4299 -174.45 - 93 111.705 1186 1 0 126.115 57.4282 -175.85 - 93 119.686 1529 0 1 126.07 57.3887 -204.45 - 93 101.729 1186 0 0 126.066 57.3878 -205.85 - 93 81.1639 1531 5 1 126.55 57.599 -54.6977 - 93 186.33 1188 5 0 126.26 57.7242 -55.85 - 93 19.2023 1461 4 1 112.398 67.9411 -84.45 - 93 79.2569 1460 4 1 112.35 67.9504 -84.4741 - 93 154.205 1459 4 1 112.15 67.9393 -84.5414 - 93 197.03 1458 4 1 111.95 67.8471 -84.5351 - 93 55.6378 1457 4 1 111.75 67.7635 -84.5117 - 93 78.8616 1238 4 0 113.558 67.8371 -85.85 - 93 93.2532 1469 4 1 113.974 64.9126 -84.85 - 93 147.265 1198 4 0 113.791 59.8349 -85.85 - 93 138.772 1466 4 1 113.54 58.9832 -84.85 - 93 103.082 1212 4 0 110.404 62.65 -85.9041 -Number of digits in this event: 15 +Number of tracker hits in this event: 26 + 93 118.738 787 11 1 -22.6255 -24.9083 125.55 + 93 212.034 775 11 0 -22.6257 -24.9083 124.15 + 93 102.005 787 10 1 -22.6296 -24.9089 95.55 + 93 108.412 775 10 0 -22.6307 -24.9079 94.15 + 93 119.306 786 9 1 -22.6535 -24.8909 65.55 + 93 122.252 775 9 0 -22.6541 -24.8895 64.15 + 93 115.603 786 8 1 -22.6645 -24.8609 35.55 + 93 170.725 775 8 0 -22.6641 -24.8588 34.15 + 93 130.523 786 7 1 -22.6548 -24.818 5.55 + 93 96.7681 776 7 0 -22.6551 -24.8155 4.15 + 93 121.082 786 6 1 -22.6615 -24.7591 -24.45 + 93 111.986 776 6 0 -22.6617 -24.7564 -25.85 + 93 122.909 786 5 1 -22.6655 -24.7033 -54.45 + 93 117.906 776 5 0 -22.6663 -24.7002 -55.85 + 93 140.74 786 4 1 -22.6833 -24.6379 -84.45 + 93 97.9019 777 4 0 -22.6838 -24.6337 -85.85 + 93 269.359 786 3 1 -22.6944 -24.5467 -114.45 + 93 106.413 777 3 0 -22.6943 -24.5425 -115.85 + 93 111.69 786 2 1 -22.6933 -24.4546 -144.45 + 93 100.768 777 2 0 -22.6927 -24.451 -145.85 + 93 8.30309 778 2 0 -22.6925 -24.45 -146.221 + 93 119.101 786 1 1 -22.6826 -24.3787 -174.45 + 93 140.601 778 1 0 -22.681 -24.3748 -175.85 + 93 108.144 787 0 1 -22.6381 -24.3086 -204.45 + 93 148.46 778 0 0 -22.636 -24.3055 -205.85 + 93 180.474 776 8 0 -22.6762 -24.85 34.065 +Number of digits in this event: 12 Using G4ParticleGun... -Particle energy: 5.19646 LIN +Particle energy: 9.17282 LIN Particle: proton Event: 94 -Number of tracker hits in this event: 24 - 94 99.2102 1085 11 1 37.0679 49.9252 125.55 - 94 148.918 1149 11 0 37.0676 49.9257 124.15 - 94 118.512 1085 10 1 37.0582 49.9404 95.55 - 94 125.81 1149 10 0 37.0538 49.9457 94.15 - 94 207.198 1084 9 1 36.9631 50.055 65.55 - 94 123.896 1150 9 0 36.9574 50.0602 64.15 - 94 93.1109 1083 8 1 36.8335 50.1688 35.55 - 94 113.675 1150 8 0 36.8264 50.1731 34.15 - 94 119.841 1083 7 1 36.6812 50.257 5.55 - 94 149.72 1151 7 0 36.6733 50.2611 4.15 - 94 111.203 1082 6 1 36.514 50.348 -24.45 - 94 123.864 1151 6 0 36.5053 50.3515 -25.85 - 94 114.112 1081 5 1 36.3259 50.4267 -54.45 - 94 109.063 1151 5 0 36.3161 50.4298 -55.85 - 94 109.541 1080 4 1 36.1125 50.4969 -84.45 - 94 123.915 1152 4 0 36.103 50.5017 -85.85 - 94 124.903 1079 3 1 35.907 50.5986 -114.45 - 94 99.2817 1152 3 0 35.8966 50.6034 -115.85 - 94 103.65 1078 2 1 35.6834 50.6984 -144.45 - 94 91.7132 1153 2 0 35.6732 50.7025 -145.85 - 94 142.394 1077 1 1 35.4587 50.7894 -174.45 - 94 150.839 1153 1 0 35.4491 50.7941 -175.85 - 94 97.1705 1075 0 1 35.249 50.8906 -204.45 - 94 121.814 1154 0 0 35.2378 50.8936 -205.85 -Number of digits in this event: 12 +Number of tracker hits in this event: 56 + 94 112.434 462 9 1 -87.4603 93.6387 65.55 + 94 115.676 1367 9 0 -87.4594 93.6394 64.15 + 94 104.151 463 8 1 -87.4454 93.6507 35.55 + 94 117.296 1367 8 0 -87.4453 93.6503 34.15 + 94 132.651 463 7 1 -87.4414 93.6413 5.55 + 94 94.0212 1367 7 0 -87.4413 93.6408 4.15 + 94 147.441 463 6 1 -87.4396 93.631 -24.45 + 94 111.479 1367 6 0 -87.4404 93.6305 -25.85 + 94 107.054 462 5 1 -87.4579 93.618 -54.45 + 94 139.486 1367 5 0 -87.4594 93.6164 -55.85 + 94 94.1047 462 4 1 -87.4943 93.582 -84.45 + 94 187.688 1367 4 0 -87.4951 93.5801 -85.85 + 94 121.745 462 3 1 -87.5142 93.5415 -114.45 + 94 112.964 1366 3 0 -87.5149 93.5392 -115.85 + 94 105.468 462 2 1 -87.5287 93.4916 -144.45 + 94 132.489 1366 2 0 -87.5301 93.4889 -145.85 + 94 493.635 462 1 1 -87.5562 93.4345 -174.45 + 94 108.538 1366 1 0 -87.5581 93.4321 -175.85 + 94 239.991 462 0 1 -87.5963 93.3847 -204.45 + 94 169.057 1366 0 0 -87.5991 93.3831 -205.85 + 94 131.583 490 8 1 -81.9601 -155.972 35.15 + 94 111.186 1212 0 0 -43.7588 62.5766 -206.25 + 94 64.0285 1211 0 0 -43.7287 62.45 -206.157 + 94 76.8323 1210 0 0 -43.6837 62.25 -206.009 + 94 9.10784 1209 0 0 -43.637 62.0498 -205.87 + 94 101.244 683 0 1 -43.2916 60.5423 -204.85 + 94 184.557 684 0 1 -43.2499 60.3715 -204.733 + 94 95.0524 1063 1 0 -39.0502 32.8288 -176.249 + 94 94.6338 1062 1 0 -39.0212 32.65 -176.061 + 94 9.54929 1061 1 0 -38.9848 32.45 -175.875 + 94 166.85 706 1 1 -38.7687 31.2882 -174.85 + 94 76.6881 705 1 1 -38.85 29.6814 -174.5 + 94 79.0473 704 1 1 -39.05 29.6105 -174.691 + 94 220.358 1047 1 0 -39.8545 29.5113 -175.85 + 94 196.327 619 0 1 -56.098 23.7459 -204.45 + 94 142.864 1016 0 0 -55.9761 23.4034 -205.85 + 94 331.966 560 1 0 -119.301 -67.85 -176.206 + 94 37.709 1102 1 1 40.5054 87.6236 -174.45 + 94 194.635 1101 1 1 40.45 87.6348 -174.497 + 94 226.358 576 1 1 -64.7001 -168.642 -174.816 + 94 31.4593 1716 2 0 23.6675 163.419 -145.954 + 94 1166.24 1315 0 0 -109.227 83.0903 -206.25 + 94 2337.87 1314 0 0 -109.3 83.05 -206.105 + 94 2270.28 351 0 1 -109.858 82.743 -204.85 + 94 2751.38 350 0 1 -109.95 82.6876 -204.636 + 94 22.5296 1452 1 0 -109.073 110.578 -176.25 + 94 211.709 354 3 1 -109.232 29.115 -114.45 + 94 16.4364 355 3 1 -109.15 29.1733 -114.574 + 94 12.239 1453 1 0 -109.062 110.75 -175.861 + 94 273.208 362 1 1 -107.713 111.498 -174.85 + 94 41.7854 461 0 1 -87.65 93.2867 -204.768 + 94 10.5562 1362 0 0 -88.3299 92.723 -205.85 + 94 114.243 451 0 1 -89.6955 94.2516 -204.85 + 94 214.316 450 0 1 -89.85 94.4807 -204.684 + 94 14.2846 1408 2 1 101.767 73.6371 -144.85 + 94 68.7789 1409 2 1 101.95 73.6245 -144.79 +Number of digits in this event: 29 Using G4ParticleGun... -Particle energy: 3.77373 LIN +Particle energy: 8.49175 LIN Particle: proton Event: 95 -Number of tracker hits in this event: 47 - 95 103.62 711 11 1 -37.666 -3.15578 125.55 - 95 131.094 884 11 0 -37.6658 -3.15462 124.15 - 95 114.837 711 10 1 -37.6824 -3.12596 95.55 - 95 137.607 884 10 0 -37.6837 -3.12385 94.15 - 95 122.332 711 9 1 -37.7055 -3.08327 65.55 - 95 90.8636 884 9 0 -37.7067 -3.08042 64.15 - 95 199.921 711 8 1 -37.7258 -3.0241 35.55 - 95 99.613 885 8 0 -37.7274 -3.02062 34.15 - 95 115.867 711 7 1 -37.7613 -2.9481 5.55 - 95 135.555 885 7 0 -37.7637 -2.94513 4.15 - 95 111.471 711 6 1 -37.8106 -2.88366 -24.45 - 95 149.316 885 6 0 -37.8137 -2.87934 -25.85 - 95 109.414 710 5 1 -37.8615 -2.79265 -54.45 - 95 135.993 886 5 0 -37.8638 -2.78823 -55.85 - 95 107.278 710 4 1 -37.9195 -2.70373 -84.45 - 95 205.088 886 4 0 -37.9223 -2.70022 -85.85 - 95 112.696 710 3 1 -37.9837 -2.62953 -114.45 - 95 102.236 887 3 0 -37.9854 -2.62759 -115.85 - 95 120.141 710 2 1 -38.0094 -2.59021 -144.45 - 95 104.418 887 2 0 -38.0113 -2.58763 -145.85 - 95 120.17 710 1 1 -38.0471 -2.53701 -174.45 - 95 146.757 887 1 0 -38.0486 -2.53388 -175.85 - 95 113.023 709 0 1 -38.0777 -2.46796 -204.45 - 95 110.456 887 0 0 -38.08 -2.46386 -205.85 - 95 8.93476 1408 4 0 -49.6782 101.75 -86.1116 - 95 118.273 1491 2 0 -94.8717 118.445 -146.25 - 95 103.461 423 2 1 -95.4245 118.581 -144.849 - 95 81.5369 422 2 1 -95.55 118.559 -144.651 - 95 399.188 855 0 0 -27.1608 -8.92483 -206.25 - 95 45.9236 854 0 0 -26.9599 -9.05 -205.911 - 95 147.932 768 0 1 -26.3381 -9.45489 -204.85 - 95 268.046 769 0 1 -26.25 -9.51228 -204.7 - 95 568.613 839 1 0 -11.5456 -12.0629 -176.25 - 95 10.7752 845 1 1 -10.8554 -12.1532 -174.85 - 95 365.499 846 1 1 -10.85 -12.1538 -174.839 - 95 545.703 837 2 0 0.05 -12.497 -146.109 - 95 385.658 902 2 1 0.524192 -12.4863 -144.85 - 95 57.9136 903 2 1 0.65 -12.4821 -144.514 - 95 173.246 470 3 1 -85.8704 -32.3142 -114.45 - 95 224.635 735 3 0 -85.4656 -32.8968 -115.85 - 95 22.2796 897 2 1 -0.542289 -12.7763 -144.85 - 95 38.106 974 1 1 14.9302 97.9902 -174.733 - 95 22.3923 1402 6 0 -5.69825 100.701 -26.25 - 95 0.785562 1403 6 0 -5.70325 100.75 -26.2495 - 95 0.196114 628 11 1 -54.4129 -80.5399 125.15 - 95 26.3098 294 1 1 -121.231 100.581 -174.45 - 95 3891.28 524 2 0 -116.547 -75.2165 -146.199 -Number of digits in this event: 24 +Number of tracker hits in this event: 23 + 95 121.625 1151 8 1 50.4334 131.039 35.55 + 95 115.54 1554 8 0 50.4346 131.038 34.15 + 95 121.759 1152 7 1 50.46 131.03 5.55 + 95 107.218 1554 7 0 50.4608 131.03 4.15 + 95 135.457 1152 6 1 50.4765 131.013 -24.45 + 95 117.348 1554 6 0 50.4778 131.011 -25.85 + 95 122.997 1152 5 1 50.5009 130.977 -54.45 + 95 114.959 1554 5 0 50.5018 130.974 -55.85 + 95 125.977 1152 4 1 50.5204 130.911 -84.45 + 95 147.19 1553 4 0 50.522 130.908 -85.85 + 95 164.379 1152 3 1 50.5558 130.847 -114.45 + 95 117.881 1553 3 0 50.5576 130.844 -115.85 + 95 87.4909 1152 2 1 50.5922 130.791 -144.45 + 95 123.31 1553 2 0 50.5945 130.788 -145.85 + 95 136.208 1152 1 1 50.6384 130.74 -174.45 + 95 146.23 1552 1 0 50.6405 130.738 -175.85 + 95 181.036 1153 0 1 50.6887 130.703 -204.45 + 95 110.011 1552 0 0 50.6916 130.7 -205.85 + 95 12.2353 985 5 0 -141.681 17.1959 -55.85 + 95 203.537 986 5 0 -141.708 17.25 -55.8825 + 95 41.1866 987 5 0 -141.654 17.45 -55.8974 + 95 113.917 1342 9 1 88.65 -156.387 65.3838 + 95 79.0602 1343 9 1 88.65 -156.405 65.4921 +Number of digits in this event: 16 Using G4ParticleGun... -Particle energy: 8.82243 LIN +Particle energy: 6.58757 LIN Particle: proton Event: 96 -Number of tracker hits in this event: 16 - 96 123.965 1373 7 1 94.8234 113.676 5.55 - 96 100.04 1467 7 0 94.8231 113.676 4.15 - 96 110.946 1373 6 1 94.8166 113.672 -24.45 - 96 99.0037 1467 6 0 94.8155 113.672 -25.85 - 96 107.143 1373 5 1 94.7925 113.691 -54.45 - 96 105.638 1467 5 0 94.7912 113.693 -55.85 - 96 111.574 1373 4 1 94.7618 113.727 -84.45 - 96 96.5785 1467 4 0 94.7612 113.729 -85.85 - 96 116.695 1372 3 1 94.7485 113.77 -114.45 - 96 113.025 1468 3 0 94.7473 113.772 -115.85 - 96 99.322 1372 2 1 94.7209 113.82 -144.45 - 96 142.58 1468 2 0 94.7199 113.822 -145.85 - 96 121.081 1372 1 1 94.6962 113.862 -174.45 - 96 207.094 1468 1 0 94.6946 113.864 -175.85 - 96 164.993 1372 0 1 94.6636 113.909 -204.45 - 96 245.963 1468 0 0 94.6629 113.91 -205.85 -Number of digits in this event: 7 +Number of tracker hits in this event: 26 + 96 131.546 418 10 1 -96.3932 -1.78623 95.55 + 96 117.122 891 10 0 -96.3933 -1.7873 94.15 + 96 95.6915 418 9 1 -96.3966 -1.81145 65.55 + 96 103 891 9 0 -96.3971 -1.81232 64.15 + 96 94.8931 418 8 1 -96.4082 -1.83038 35.55 + 96 128.663 891 8 0 -96.4078 -1.83176 34.15 + 96 121.825 418 7 1 -96.3965 -1.85804 5.55 + 96 161.118 890 7 0 -96.3959 -1.85984 4.15 + 96 97.1616 418 6 1 -96.3898 -1.8974 -24.45 + 96 89.8983 890 6 0 -96.3888 -1.89809 -25.85 + 96 101.745 418 5 1 -96.3682 -1.91114 -54.45 + 96 234.887 890 5 0 -96.3675 -1.91193 -55.85 + 96 112 419 4 1 -96.3489 -1.9234 -84.45 + 96 163.985 890 4 0 -96.3488 -1.92671 -85.85 + 96 112.448 419 3 1 -96.3486 -1.99375 -114.45 + 96 151.119 890 3 0 -96.3492 -1.99767 -115.85 + 96 138.221 418 2 1 -96.3617 -2.07848 -144.45 + 96 120.966 889 2 0 -96.3613 -2.08334 -145.85 + 96 156.212 418 1 1 -96.3515 -2.1845 -174.45 + 96 140.482 889 1 0 -96.3509 -2.18879 -175.85 + 96 194.01 419 0 1 -96.3349 -2.27755 -204.45 + 96 143.665 888 0 0 -96.3338 -2.28158 -205.85 + 96 144.012 418 0 1 -96.35 -2.26912 -204.59 + 96 5.15825 884 0 0 -97.5478 -3.06974 -205.85 + 96 91.1259 405 0 1 -99.1156 -3.77634 -204.85 + 96 25.1285 404 0 1 -99.15 -3.76537 -204.821 +Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 9.74517 LIN +Particle energy: 1.44138 LIN Particle: proton Event: 97 -Number of tracker hits in this event: 16 - 97 140.358 548 7 1 -70.2511 -131.41 5.55 - 97 117.587 243 7 0 -70.2514 -131.411 4.15 - 97 117.734 548 6 1 -70.2567 -131.422 -24.45 - 97 192.663 243 6 0 -70.2569 -131.424 -25.85 - 97 97.8171 548 5 1 -70.2631 -131.451 -54.45 - 97 93.5684 243 5 0 -70.2642 -131.45 -55.85 - 97 215.824 548 4 1 -70.2842 -131.439 -84.45 - 97 103.119 243 4 0 -70.2848 -131.438 -85.85 - 97 99.6653 548 3 1 -70.2954 -131.413 -114.45 - 97 137.009 243 3 0 -70.2958 -131.412 -115.85 - 97 117.947 548 2 1 -70.3039 -131.391 -144.45 - 97 297.865 243 2 0 -70.3041 -131.39 -145.85 - 97 111.189 548 1 1 -70.3116 -131.367 -174.45 - 97 168.902 243 1 0 -70.3105 -131.365 -175.85 - 97 119.882 548 0 1 -70.2866 -131.321 -204.45 - 97 153.16 244 0 0 -70.2858 -131.319 -205.85 -Number of digits in this event: 8 +Number of tracker hits in this event: 20 + 97 120.959 1497 9 1 119.584 48.0577 65.55 + 97 101.869 1140 9 0 119.582 48.0524 64.15 + 97 101.988 1496 8 1 119.541 47.9636 35.55 + 97 143.403 1139 8 0 119.54 47.9616 34.15 + 97 101.777 1496 7 1 119.51 47.9336 5.55 + 97 114.756 1139 7 0 119.511 47.9345 4.15 + 97 112.956 1497 6 1 119.565 47.9224 -24.45 + 97 134.892 1139 6 0 119.569 47.919 -25.85 + 97 111.6 1497 5 1 119.655 47.8363 -54.45 + 97 97.0677 1138 5 0 119.661 47.83 -55.85 + 97 241.573 1498 4 1 119.764 47.6853 -84.45 + 97 110.63 1138 4 0 119.77 47.6796 -85.85 + 97 160.584 1498 3 1 119.891 47.5607 -114.45 + 97 151.411 1137 3 0 119.893 47.5541 -115.85 + 97 154.152 1498 2 1 119.929 47.4282 -144.45 + 97 139.752 1136 2 0 119.934 47.4244 -145.85 + 97 135.609 1499 1 1 120.055 47.3604 -174.45 + 97 111.813 1136 1 0 120.063 47.3565 -175.85 + 97 124.683 1500 0 1 120.214 47.2616 -204.45 + 97 111.538 1136 0 0 120.22 47.2555 -205.85 +Number of digits in this event: 11 Using G4ParticleGun... -Particle energy: 5.40059 LIN +Particle energy: 2.5159 LIN Particle: proton Event: 98 -Number of tracker hits in this event: 31 - 98 192.445 840 11 1 -11.9882 -33.8025 125.55 - 98 111.826 731 11 0 -11.9884 -33.803 124.15 - 98 129.747 840 10 1 -11.9914 -33.8145 95.55 - 98 171.737 731 10 0 -11.9921 -33.8145 94.15 - 98 108.782 840 9 1 -12.0062 -33.8177 65.55 - 98 124.4 731 9 0 -12.0078 -33.8175 64.15 - 98 180.323 840 8 1 -12.0425 -33.8123 35.55 - 98 104.976 731 8 0 -12.0439 -33.813 34.15 - 98 103.859 839 7 1 -12.0664 -33.8312 5.55 - 98 139.266 731 7 0 -12.0663 -33.8323 4.15 - 98 99.9202 839 6 1 -12.0606 -33.8536 -24.45 - 98 115.815 730 6 0 -12.0603 -33.8554 -25.85 - 98 119.121 839 5 1 -12.0523 -33.8943 -54.45 - 98 118.406 730 5 0 -12.0525 -33.8958 -55.85 - 98 98.5056 839 4 1 -12.0588 -33.9256 -84.45 - 98 102.717 730 4 0 -12.0587 -33.9282 -85.85 - 98 104.701 839 3 1 -12.0545 -33.9811 -114.45 - 98 116.914 730 3 0 -12.0541 -33.9838 -115.85 - 98 95.1951 840 2 1 -12.0436 -34.0398 -144.45 - 98 149.015 730 2 0 -12.0428 -34.043 -145.85 - 98 139.384 840 1 1 -12.0226 -34.1091 -174.45 - 98 233.136 729 1 0 -12.0227 -34.1124 -175.85 - 98 111.717 840 0 1 -12.0195 -34.1842 -204.45 - 98 119.512 729 0 0 -12.0185 -34.186 -205.85 - 98 14.3054 678 0 0 -6.16271 -44.4129 -206.25 - 98 110.043 677 0 0 -6.15391 -44.45 -206.198 - 98 32.4485 676 0 0 -6.23832 -44.6501 -205.907 - 98 86.6587 863 0 1 -7.4159 -45.6184 -204.85 - 98 223.526 862 0 1 -7.45007 -45.6547 -204.807 - 98 38.8711 861 0 1 -7.65002 -45.9852 -204.517 - 98 120.587 864 0 1 -7.24994 -46.3131 -204.718 -Number of digits in this event: 12 +Number of tracker hits in this event: 16 + 98 95.0592 779 7 1 -24.0512 -146.845 5.55 + 98 92.8597 166 7 0 -24.0504 -146.846 4.15 + 98 212.833 780 6 1 -24.02 -146.849 -24.45 + 98 105.679 166 6 0 -24.0181 -146.849 -25.85 + 98 129.338 780 5 1 -23.9721 -146.849 -54.45 + 98 102.504 166 5 0 -23.9714 -146.849 -55.85 + 98 139.619 780 4 1 -23.9581 -146.838 -84.45 + 98 128.42 166 4 0 -23.9591 -146.837 -85.85 + 98 159.2 780 3 1 -23.9736 -146.815 -114.45 + 98 163.589 166 3 0 -23.9757 -146.813 -115.85 + 98 127.639 780 2 1 -24.0101 -146.768 -144.45 + 98 126.457 166 2 0 -24.014 -146.767 -145.85 + 98 131.071 779 1 1 -24.0864 -146.733 -174.45 + 98 115.509 167 1 0 -24.0888 -146.731 -175.85 + 98 98.8994 779 0 1 -24.1337 -146.682 -204.45 + 98 127.292 167 0 0 -24.1332 -146.679 -205.85 +Number of digits in this event: 11 Using G4ParticleGun... -Particle energy: 8.34609 LIN +Particle energy: 9.56775 LIN Particle: proton Event: 99 -Number of tracker hits in this event: 27 - 99 180.944 1258 10 1 71.668 -83.2498 95.55 - 99 112.123 483 10 0 71.6674 -83.2505 94.15 - 99 165.939 1258 9 1 71.6575 -83.268 65.55 - 99 98.7808 483 9 0 71.657 -83.2699 64.15 - 99 114.766 1257 8 1 71.6452 -83.3105 35.55 - 99 143.032 483 8 0 71.6441 -83.314 34.15 - 99 263.839 1257 7 1 71.6255 -83.3829 5.55 - 99 117.051 483 7 0 71.6249 -83.3858 4.15 - 99 130.787 1257 6 1 71.6138 -83.4464 -24.45 - 99 122.38 482 6 0 71.6135 -83.4507 -25.85 - 99 111.34 1257 5 1 71.6112 -83.5376 -54.45 - 99 109.612 482 5 0 71.6112 -83.5417 -55.85 - 99 152.963 1257 4 1 71.6158 -83.6227 -84.45 - 99 118.726 482 4 0 71.6153 -83.6269 -85.85 - 99 122.707 1257 3 1 71.605 -83.7153 -114.45 - 99 269.095 481 3 0 71.6037 -83.7194 -115.85 - 99 106.422 1257 2 1 71.5782 -83.8043 -144.45 - 99 105.57 481 2 0 71.5768 -83.8085 -145.85 - 99 104.341 1257 1 1 71.5429 -83.8941 -174.45 - 99 104.705 480 1 0 71.5431 -83.8979 -175.85 - 99 105.01 1257 0 1 71.5455 -83.9722 -204.45 - 99 118.365 480 0 0 71.5455 -83.976 -205.85 - 99 127.499 215 4 0 52.2272 -137.003 -86.2499 - 99 5.46219 214 4 0 52.0021 -137.15 -86.2422 - 99 246.669 1258 7 1 71.65 -83.3873 5.46969 - 99 60.4619 484 7 0 72.084 -83.0666 4.15 - 99 105.049 485 7 0 72.1211 -83.05 4.04301 -Number of digits in this event: 13 +Number of tracker hits in this event: 30 + 99 160.205 647 11 1 -50.5666 37.1547 125.55 + 99 104.657 1085 11 0 -50.5663 37.1559 124.15 + 99 153.391 647 10 1 -50.5617 37.181 95.55 + 99 109.611 1085 10 0 -50.5615 37.1821 94.15 + 99 114.802 647 9 1 -50.5581 37.2054 65.55 + 99 112.595 1085 9 0 -50.5579 37.2068 64.15 + 99 112.14 647 8 1 -50.5561 37.2357 35.55 + 99 104.037 1085 8 0 -50.5562 37.238 34.15 + 99 119.841 647 7 1 -50.557 37.285 5.55 + 99 110.67 1086 7 0 -50.5574 37.2881 4.15 + 99 103.816 647 6 1 -50.5632 37.3553 -24.45 + 99 142.372 1086 6 0 -50.5635 37.3589 -25.85 + 99 134.007 647 5 1 -50.5757 37.4294 -54.45 + 99 151.044 1086 5 0 -50.576 37.4327 -55.85 + 99 105.33 647 4 1 -50.5796 37.5017 -84.45 + 99 108.083 1087 4 0 -50.5799 37.5049 -85.85 + 99 99.7827 647 3 1 -50.584 37.5685 -114.45 + 99 124.504 1087 3 0 -50.5841 37.5713 -115.85 + 99 162.862 647 2 1 -50.5923 37.6283 -144.45 + 99 92.4277 1087 2 0 -50.5935 37.6308 -145.85 + 99 107.469 647 1 1 -50.6199 37.6808 -174.45 + 99 103.881 1088 1 0 -50.6207 37.6831 -175.85 + 99 122.912 647 0 1 -50.6385 37.7289 -204.45 + 99 105.558 1088 0 0 -50.639 37.73 -205.85 + 99 160.336 996 10 0 -35.2236 19.3304 93.7501 + 99 74.1595 725 10 1 -34.8508 19.8836 95.15 + 99 283.811 726 10 1 -34.85 19.8849 95.1527 + 99 284.215 724 10 1 -35.05 20.3408 95.403 + 99 132.45 648 10 1 -50.4498 37.1999 95.2639 + 99 221.419 1091 10 0 -50.6356 38.3018 94.15 +Number of digits in this event: 14 Run terminated. Run Summary Number of events processed : 100 - User=3.000000s Real=3.120585s Sys=0.040000s + User=3.850000s Real=4.200835s Sys=0.050000s End of Run 0 There are 2 h1 histograms 0 with 0 entries: Deposited energy in the last X plane (keV) @@ -5486,3465 +6029,3735 @@ Cannot set FirstId as its value was already used. done Using G4ParticleGun... -Particle energy: 8.66755 LIN +Particle energy: 2.25928 LIN Particle: gamma Event: 0 -Number of tracker hits in this event: 13 - 0 340.725 1138 1 1 47.7447 -53.1021 -174.45 - 0 202.431 634 1 0 47.7594 -53.0818 -175.85 - 0 191.884 1140 0 1 48.1417 -52.7946 -204.45 - 0 193.717 636 0 0 48.1536 -52.7506 -205.85 - 0 104.423 550 6 1 -69.9421 -56.7836 -24.85 - 0 113.083 1138 0 1 47.7324 -53.1013 -204.45 - 0 109.56 634 0 0 47.7318 -53.1014 -205.85 - 0 95.1146 407 2 0 42.9007 -98.5971 -146.25 - 0 413.424 406 2 0 42.9047 -98.75 -146.059 - 0 210.128 405 2 0 43.2299 -98.95 -146.045 - 0 186.039 404 2 0 43.4054 -99.1501 -146.211 - 0 26.8146 1142 7 1 48.536 -103.418 5.15 - 0 177.903 1137 1 1 47.6498 -53.0148 -174.584 -Number of digits in this event: 10 +Number of tracker hits in this event: 8 + 0 258.879 1164 2 1 52.9429 -69.4332 -144.45 + 0 230.373 553 2 0 52.9425 -69.4369 -145.85 + 0 376.237 1164 1 1 52.9332 -69.5129 -174.45 + 0 117.644 552 1 0 52.9316 -69.5207 -175.85 + 0 252.956 1164 0 1 52.8789 -69.6817 -204.45 + 0 111.298 551 0 0 52.8808 -69.6949 -205.85 + 0 111.865 553 1 0 52.9333 -69.4213 -175.85 + 0 109.604 552 0 0 53.0454 -69.4665 -205.85 +Number of digits in this event: 5 Using G4ParticleGun... -Particle energy: 3.02618 LIN +Particle energy: 3.37097 LIN Particle: gamma Event: 1 -Number of tracker hits in this event: 2 - 1 15.9155 1013 2 0 -36.1335 22.85 -146.139 - 1 337.524 344 10 0 88.8327 -111.15 93.7774 -Number of digits in this event: 3 +Number of tracker hits in this event: 0 +Number of digits in this event: 1 Using G4ParticleGun... -Particle energy: 8.05632 LIN +Particle energy: 3.89584 LIN Particle: gamma Event: 2 -Number of tracker hits in this event: 277 - 2 240.149 889 9 1 -2.12514 120.742 65.55 - 2 249.325 1502 9 0 -2.12574 120.741 64.15 - 2 158.321 889 8 1 -2.14515 120.725 35.55 - 2 135.728 1502 8 0 -2.14622 120.725 34.15 - 2 322.732 889 7 1 -2.1696 120.714 5.55 - 2 136.589 1502 7 0 -2.17073 120.714 4.15 - 2 110.899 889 6 1 -2.19897 120.721 -24.45 - 2 164.079 1502 6 0 -2.19968 120.722 -25.85 - 2 458.918 889 5 1 -2.21769 120.725 -54.45 - 2 441.498 1502 5 0 -2.21842 120.726 -55.85 - 2 438.288 889 4 1 -2.2319 120.734 -84.45 - 2 134.604 1502 4 0 -2.23345 120.736 -85.85 - 2 246.751 888 3 1 -2.26686 120.77 -114.45 - 2 152.885 1503 3 0 -2.2677 120.772 -115.85 - 2 96.3838 888 2 1 -2.28386 120.815 -144.45 - 2 103.529 1503 2 0 -2.28485 120.816 -145.85 - 2 87.7147 888 1 1 -2.3006 120.857 -174.45 - 2 104.669 1503 1 0 -2.30066 120.86 -175.85 - 2 288.661 888 0 1 -2.31453 120.925 -204.45 - 2 103.521 1503 0 0 -2.31678 120.927 -205.85 - 2 207.022 1651 2 0 45.1973 150.415 -146.25 - 2 22.6473 1438 0 0 -56.2677 107.95 -206.236 - 2 106.67 1455 0 0 -57.8032 111.15 -206.139 - 2 50.1237 1437 0 0 -56.8809 107.75 -205.938 - 2 191.66 616 0 1 -56.8459 109.075 -204.85 - 2 93.8375 890 7 1 -2.05 120.982 5.37417 - 2 16.3259 1507 7 0 -1.34965 121.711 4.1498 - 2 84.7296 1508 7 0 -1.3319 121.75 4.11053 - 2 30.0854 1509 7 0 -1.30966 121.95 3.8658 - 2 127.169 913 4 1 2.75721 119.947 -84.45 - 2 113.681 1498 4 0 3.04131 119.826 -85.85 - 2 53.3649 942 3 1 8.55451 116.267 -114.451 - 2 86.9759 943 3 1 8.65 116.186 -114.581 - 2 63.7063 1476 3 0 9.57758 115.441 -115.85 - 2 84.559 1475 3 0 9.69484 115.35 -116.01 - 2 316.663 1048 2 1 29.6762 99.6294 -144.45 - 2 117.921 1049 2 1 29.85 99.5002 -144.608 - 2 27.5915 1050 2 1 30.05 99.3487 -144.787 - 2 43.5753 1391 2 0 31.2499 98.4357 -145.85 - 2 130.538 1390 2 0 31.3605 98.3499 -145.947 - 2 59.4163 1389 2 0 31.6053 98.15 -146.165 - 2 32.3433 1221 1 1 64.3818 70.4695 -174.45 - 2 88.0035 1222 1 1 64.4503 70.4046 -174.512 - 2 86.8147 1223 1 1 64.6505 70.207 -174.695 - 2 56.0056 1244 1 0 65.8851 68.9727 -175.85 - 2 108.21 1243 1 0 66.0066 68.85 -175.963 - 2 46.524 1242 1 0 66.2086 68.65 -176.15 - 2 183.17 1377 0 1 95.5801 38.3503 -204.45 - 2 21.8794 1084 0 0 96.1679 36.8974 -205.85 - 2 110.502 1083 0 0 96.189 36.85 -205.897 - 2 90.1415 1082 0 0 96.2832 36.6493 -206.106 - 2 146.095 776 9 0 69.2424 -24.7667 63.75 - 2 246.171 775 9 0 69.09 -24.85 63.9019 - 2 185.915 888 4 1 -2.25085 121.277 -84.45 - 2 223.441 1505 4 0 -2.24935 121.237 -85.85 - 2 112.866 1501 3 0 -2.32378 120.429 -115.85 - 2 196.947 885 2 1 -2.90349 122.482 -144.45 - 2 148.591 1511 2 0 -3.09601 122.482 -145.85 - 2 132.47 867 1 1 -6.48149 122.749 -174.45 - 2 67.8244 1513 1 0 -6.75315 122.919 -175.85 - 2 46.3146 1514 1 0 -6.79672 122.95 -176.076 - 2 12.0274 838 0 1 -12.435 127.2 -204.45 - 2 83.8527 837 0 1 -12.45 127.207 -204.467 - 2 54.5466 836 0 1 -12.65 127.298 -204.683 - 2 151.482 1538 0 0 -13.7305 127.791 -205.85 - 2 1.74518 1539 0 0 -14.0947 127.95 -206.241 - 2 43.2624 1749 0 0 -52.3819 170.031 -206.25 - 2 88.4585 1750 0 0 -52.3211 170.15 -206.132 - 2 34.7974 1751 0 0 -52.1319 170.35 -205.931 - 2 65.5625 642 0 1 -51.591 170.954 -204.85 - 2 49.8293 643 0 1 -51.45 171.036 -204.732 - 2 104.13 644 0 1 -51.2497 171.09 -204.689 - 2 105.237 645 0 1 -51.05 171.287 -204.698 - 2 33.6508 1773 0 0 -52.3304 174.867 -205.85 - 2 97.9174 1774 0 0 -52.3351 174.95 -205.913 - 2 272.021 637 0 1 -52.5315 174.993 -204.85 - 2 162.339 870 0 1 -6.00859 127.465 -204.45 - 2 301.243 869 0 1 -6.05 127.455 -204.46 - 2 13.7685 1521 0 0 -4.62882 124.38 -205.85 - 2 84.0409 1520 0 0 -4.60916 124.35 -205.859 - 2 192.1 889 0 1 -2.25 122.423 -204.74 - 2 70.7659 868 0 1 -6.2502 127.082 -204.819 - 2 97.1965 1536 0 0 -5.88398 127.516 -205.85 - 2 205.403 1537 0 0 -5.72994 127.55 -205.972 - 2 205.887 884 1 1 -3.09881 119.375 -174.45 - 2 295.949 1495 1 0 -3.16967 119.286 -175.85 - 2 119.179 875 0 1 -4.90602 117.209 -204.45 - 2 104.379 1485 0 0 -5.03904 117.178 -205.85 - 2 17.4313 818 0 1 -16.2976 133.393 -204.85 - 2 361.437 813 0 1 -17.3342 118.823 -204.45 - 2 107.974 812 0 1 -17.45 118.577 -204.557 - 2 74.9548 811 0 1 -17.65 118.203 -204.757 - 2 29.5509 1481 0 0 -18.4611 116.457 -205.85 - 2 104.264 1480 0 0 -18.5129 116.35 -205.917 - 2 83.6367 1479 0 0 -18.6128 116.15 -206.041 - 2 39.7525 1478 0 0 -18.7063 115.95 -206.174 - 2 105.154 890 2 1 -2.00275 121.744 -144.45 - 2 73.5834 1509 2 0 -1.94243 122.123 -145.85 - 2 43.9619 1510 2 0 -1.93147 122.15 -146.054 - 2 85.7264 893 1 1 -1.28828 119.78 -174.45 - 2 35.492 892 1 1 -1.45 119.772 -174.683 - 2 125.81 1499 1 0 -2.33458 120.127 -175.85 - 2 3.64314 1500 1 0 -2.43715 120.15 -175.989 - 2 139.337 1290 1 0 -41.6272 78.2047 -176.25 - 2 68.1221 1289 1 0 -41.6784 78.05 -176.155 - 2 84.8704 1288 1 0 -41.67 77.85 -175.99 - 2 150.653 1287 1 0 -41.6525 77.65 -175.909 - 2 20.1675 1286 1 0 -41.5208 77.45 -175.87 - 2 279.252 699 1 1 -40.2201 74.9729 -174.85 - 2 152.794 700 1 1 -40.05 74.3588 -174.681 - 2 75.4156 1274 1 0 -39.1831 74.9276 -175.85 - 2 93.7984 1275 1 0 -39.0118 75.05 -176.019 - 2 105.086 1276 1 0 -38.8076 75.25 -176.104 - 2 108.041 704 1 1 -39.0677 75.0875 -174.85 - 2 56.5974 703 1 1 -39.2501 74.9447 -174.596 - 2 105.496 1264 1 0 -40.5963 72.9213 -175.85 - 2 61.4775 888 8 1 -2.25 120.733 35.3952 - 2 97.763 1503 8 0 -2.26436 120.751 34.15 - 2 124.576 887 7 1 -2.57959 121.191 5.55 - 2 231.397 1505 7 0 -2.59718 121.208 4.15 - 2 622.031 885 6 1 -2.91363 121.519 -24.45 - 2 167.767 1506 6 0 -2.93562 121.547 -25.85 - 2 214.309 1507 6 0 -2.93838 121.55 -26.0266 - 2 111.653 883 5 1 -3.39698 122.047 -54.45 - 2 195.069 1509 5 0 -3.41019 122.074 -55.85 - 2 141.853 882 4 1 -3.59035 122.699 -84.45 - 2 252.468 1513 4 0 -3.59995 122.769 -85.85 - 2 121.1 881 3 1 -3.73273 124.167 -114.45 - 2 115.247 1520 3 0 -3.71929 124.238 -115.85 - 2 117.396 882 2 1 -3.54574 125.558 -144.45 - 2 170.182 1527 2 0 -3.55006 125.601 -145.85 - 2 98.582 882 1 1 -3.60879 126.349 -174.45 - 2 124.204 1531 1 0 -3.59064 126.37 -175.85 - 2 117.474 885 0 1 -3.00522 126.732 -204.45 - 2 131.949 1533 0 0 -3.00442 126.782 -205.85 - 2 203.387 881 4 1 -3.80303 122.765 -84.45 - 2 52.7409 1514 4 0 -3.64908 122.95 -86.1191 - 2 88.1275 893 3 1 -1.39465 127.746 -114.45 - 2 57.6579 892 3 1 -1.45 127.821 -114.698 - 2 33.3039 1539 3 0 -1.76059 128.122 -115.85 - 2 89.9306 1540 3 0 -1.78897 128.15 -115.96 - 2 114.044 862 2 1 -7.50441 137.341 -144.45 - 2 44.6253 861 2 1 -7.65 137.453 -144.723 - 2 20.735 1589 2 0 -8.16852 138.11 -145.85 - 2 65.5484 1590 2 0 -8.19503 138.15 -145.905 - 2 84.4654 1591 2 0 -8.27635 138.35 -146.051 - 2 63.7884 1592 2 0 -8.37923 138.55 -146.121 - 2 68.5878 1593 2 0 -8.47194 138.75 -146.158 - 2 116.288 1594 2 0 -8.54956 138.95 -146.198 - 2 43.591 1595 2 0 -8.59167 139.15 -146.209 - 2 66.4755 1596 2 0 -8.65053 139.35 -146.216 - 2 62.8814 1597 2 0 -8.73388 139.55 -146.241 - 2 72.4954 1598 2 0 -8.79015 139.75 -146.241 - 2 75.0902 1599 2 0 -8.91152 139.95 -146.243 - 2 58.4189 1600 2 0 -9.01225 140.15 -146.23 - 2 77.0414 1601 2 0 -9.1002 140.351 -146.217 - 2 9.42667 1602 2 0 -9.09951 140.55 -146.235 - 2 192.143 779 1 1 -24.0665 148.112 -174.45 - 2 92.5329 778 1 1 -24.25 148.149 -174.84 - 2 120.955 1640 1 0 -24.7376 148.234 -175.85 - 2 34.4211 724 0 1 -35.2014 152.061 -204.45 - 2 106.342 723 0 1 -35.25 152.072 -204.507 - 2 45.3519 722 0 1 -35.45 152.13 -204.775 - 2 130.33 1661 0 0 -36.2151 152.362 -205.85 - 2 101.942 777 1 1 -24.45 148.299 -174.591 - 2 51.4472 776 1 1 -24.65 148.381 -174.637 - 2 50.1832 775 1 1 -24.85 148.466 -174.678 - 2 83.4178 774 1 1 -25.05 148.561 -174.709 - 2 64.3368 773 1 1 -25.2502 148.666 -174.733 - 2 51.5221 772 1 1 -25.4502 148.751 -174.75 - 2 53.6516 771 1 1 -25.65 148.829 -174.762 - 2 50.1082 770 1 1 -25.85 148.921 -174.788 - 2 66.0214 769 1 1 -26.05 148.98 -174.806 - 2 53.1275 768 1 1 -26.25 149.008 -174.833 - 2 22.3043 767 1 1 -26.4501 149.025 -174.845 - 2 184.418 1646 1 0 -35.3343 149.442 -175.85 - 2 24.9083 662 1 1 -47.5505 149.703 -174.85 - 2 54.7898 661 1 1 -47.65 149.707 -174.835 - 2 95.4229 660 1 1 -47.85 149.688 -174.8 - 2 58.2669 659 1 1 -48.05 149.636 -174.781 - 2 233.94 658 1 1 -48.25 149.592 -174.78 - 2 65.5357 657 1 1 -48.45 149.549 -174.787 - 2 49.4972 656 1 1 -48.6501 149.532 -174.764 - 2 60.7081 655 1 1 -48.8502 149.536 -174.729 - 2 59.4408 654 1 1 -49.0503 149.544 -174.742 - 2 61.3435 653 1 1 -49.25 149.582 -174.729 - 2 74.8494 652 1 1 -49.4502 149.622 -174.662 - 2 127.063 651 1 1 -49.6503 149.68 -174.569 - 2 65.2702 650 1 1 -49.85 149.773 -174.488 - 2 92.8392 649 1 1 -50.05 149.914 -174.539 - 2 57.484 648 1 1 -50.25 149.983 -174.652 - 2 66.8869 647 1 1 -50.4504 150.034 -174.745 - 2 61.0085 1649 1 0 -51.9513 149.992 -175.85 - 2 101.875 1648 1 0 -52.1033 149.95 -175.988 - 2 5.85528 880 4 1 -3.85 122.686 -84.8328 - 2 117.067 1511 4 0 -3.91051 122.499 -85.85 - 2 105.354 874 3 1 -5.12606 118.475 -114.45 - 2 36.3447 1490 3 0 -5.34343 118.18 -115.85 - 2 59.5762 1489 3 0 -5.3634 118.15 -115.994 - 2 51.83 856 2 1 -8.81367 112.442 -144.45 - 2 54.2996 855 2 1 -8.85 112.451 -144.644 - 2 233.576 1462 2 0 -9.07456 112.55 -145.85 - 2 111.021 828 1 1 -14.3158 115.596 -174.45 - 2 153.067 1478 1 0 -14.4338 115.76 -175.85 - 2 112.137 1491 0 0 -17.5057 118.395 -205.85 - 2 308.319 1510 4 0 -3.63891 122.322 -86.0661 - 2 89.5338 870 3 1 -5.97243 122.351 -114.45 - 2 52.3108 871 3 1 -5.85 122.392 -114.722 - 2 117.66 1511 3 0 -5.31235 122.523 -115.85 - 2 130.298 920 2 1 4.11827 125.435 -144.45 - 2 179.595 1525 2 0 4.20678 125.254 -145.85 - 2 29.7938 927 1 1 5.61289 129.783 -174.45 - 2 129.647 928 1 1 5.65017 129.782 -174.49 - 2 67.7274 929 1 1 5.85 129.766 -174.689 - 2 157.43 1548 1 0 7.04096 129.785 -175.85 - 2 128.763 1113 0 1 42.6905 133.708 -204.45 - 2 4.67645 1114 0 1 42.85 133.814 -204.82 - 2 129.958 1568 0 0 43.2626 133.931 -205.85 - 2 278.824 918 2 1 3.77158 124.6 -144.85 - 2 97.7414 880 3 1 -3.89297 122.512 -114.45 - 2 180.551 1512 3 0 -3.91468 122.558 -115.85 - 2 192.479 877 2 1 -4.45676 124.164 -144.45 - 2 102.576 1520 2 0 -4.4705 124.236 -145.85 - 2 10.4677 875 1 1 -4.85717 126.36 -174.45 - 2 142.045 876 1 1 -4.85 126.369 -174.491 - 2 212.942 1532 1 0 -4.61733 126.66 -175.851 - 2 165.56 898 0 1 -0.379022 132.395 -204.45 - 2 0.0434265 1565 0 0 0.0500129 133.349 -205.963 - 2 158.808 1566 0 0 0.0502906 133.35 -205.964 - 2 14.1093 1510 1 0 -5.31518 122.243 -175.85 - 2 58.8699 1267 1 0 -23.464 73.6141 -176.25 - 2 70.8091 1266 1 0 -23.4787 73.45 -176.121 - 2 48.9343 1265 1 0 -23.4282 73.25 -176.034 - 2 136.76 787 1 1 -22.5193 72.3197 -174.849 - 2 381.216 788 1 1 -22.4496 72.2475 -174.765 - 2 6.80007 786 1 1 -22.65 71.6086 -174.467 - 2 137.335 893 5 1 -1.34739 122.304 -54.45 - 2 112.991 1511 5 0 -1.39539 122.381 -55.8501 - 2 29.9466 1520 4 0 -2.33491 124.286 -85.85 - 2 134.735 1521 4 0 -2.35211 124.35 -85.9508 - 2 12.634 1522 4 0 -2.39286 124.55 -86.2245 - 2 88.7612 867 3 1 -6.52457 145.771 -114.45 - 2 79.0747 866 3 1 -6.65 145.802 -114.679 - 2 139.92 1629 3 0 -7.292 146.049 -115.85 - 2 148.109 798 2 1 -20.352 156.28 -144.45 - 2 23.0537 1686 2 0 -20.3016 157.51 -145.85 - 2 96.4919 1687 2 0 -20.3002 157.55 -145.902 - 2 2.72032 1688 2 0 -20.3108 157.75 -146.236 - 2 60.5389 887 4 1 -2.4501 124.038 -84.7268 - 2 59.6716 1526 4 0 -3.24685 125.356 -85.85 - 2 58.1554 1527 4 0 -3.34397 125.55 -85.9862 - 2 82.234 1528 4 0 -3.41086 125.75 -86.0927 - 2 4.25267 1529 4 0 -3.47105 125.95 -86.235 - 2 94.782 813 3 1 -17.3671 167.478 -114.45 - 2 118.269 1736 3 0 -17.2267 167.511 -115.85 - 2 210.494 1697 3 0 30.5014 159.633 -116.25 - 2 4.38501 1696 3 0 30.7226 159.55 -115.863 - 2 93.9832 1057 3 1 31.4682 159.444 -114.85 - 2 113.47 1058 3 1 31.65 159.556 -114.674 - 2 261.491 1690 3 0 31.7162 158.343 -115.85 - 2 196.749 1689 3 0 31.5363 158.15 -116.003 - 2 248.794 785 3 1 -22.85 176.043 -114.516 - 2 95.1502 784 3 1 -23.05 176.247 -114.466 - 2 313.435 902 5 1 0.499492 122.333 -54.45 - 2 85.6806 1515 5 0 0.619071 123.194 -55.85 - 2 58.0476 1516 5 0 0.641846 123.35 -56.1159 - 2 121.918 911 4 1 2.42645 137.328 -84.45 - 2 3.56443 1587 4 0 2.4796 137.746 -85.85 - 2 95.6935 1588 4 0 2.48034 137.75 -85.8644 - 2 117.03 924 3 1 4.97023 146.951 -114.45 - 2 121.909 1633 3 0 4.99615 146.911 -115.85 - 2 146.041 923 2 1 4.84002 145.983 -144.45 - 2 10.395 1622 2 0 4.70164 144.585 -145.85 - 2 131.176 1621 2 0 4.69717 144.55 -145.884 - 2 90.0283 1620 2 0 4.65937 144.35 -146.081 - 2 28.6095 1592 0 0 9.45041 138.572 -206.25 - 2 58.116 1449 9 0 -8.04385 110.121 63.75 -Number of digits in this event: 95 -Using G4ParticleGun... -Particle energy: 5.65088 LIN +Number of tracker hits in this event: 0 +Number of digits in this event: 1 +Using G4ParticleGun... +Particle energy: 1.12384 LIN Particle: gamma Event: 3 -Number of tracker hits in this event: 1 - 3 19.8413 600 0 0 3.01764 -60.0137 -206.25 -Number of digits in this event: 4 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 7.68183 LIN +Particle energy: 5.59018 LIN Particle: gamma Event: 4 -Number of tracker hits in this event: 135 - 4 216.265 778 9 1 -24.3662 18.3089 65.55 - 4 231.884 991 9 0 -24.3662 18.3101 64.15 - 4 239.885 778 8 1 -24.3681 18.3373 35.55 - 4 147.519 991 8 0 -24.3688 18.3388 34.15 - 4 688.177 778 7 1 -24.3782 18.3714 5.55 - 4 448.326 991 7 0 -24.379 18.3737 4.15 - 4 257.005 778 6 1 -24.3918 18.4161 -24.45 - 4 408.503 991 6 0 -24.3944 18.4196 -25.85 - 4 281.867 778 5 1 -24.4433 18.4986 -54.45 - 4 133.632 992 5 0 -24.4465 18.5039 -55.85 - 4 116.234 777 4 1 -24.5084 18.6076 -84.45 - 4 256.599 992 4 0 -24.5127 18.6106 -85.85 - 4 113.466 777 3 1 -24.6049 18.6746 -114.45 - 4 136.746 993 3 0 -24.6076 18.6795 -115.85 - 4 118.318 776 2 1 -24.6621 18.7787 -144.45 - 4 150.517 993 2 0 -24.6734 18.7841 -145.85 - 4 148.182 775 1 1 -24.9118 18.876 -174.45 - 4 101.866 994 1 0 -24.9247 18.8777 -175.85 - 4 117.794 774 0 1 -25.1928 18.9059 -204.45 - 4 143.301 994 0 0 -25.2051 18.9094 -205.85 - 4 2.1535 942 0 0 -40.5589 8.65 -206.243 - 4 116.442 1231 6 1 66.45 93.4047 -24.6447 - 4 62.2952 777 5 1 -24.45 18.5808 -54.8009 - 4 63.1499 1002 5 0 -25.3287 20.5684 -55.8502 - 4 277.959 1003 5 0 -25.3241 20.65 -55.9236 - 4 51.6795 1004 5 0 -25.2851 20.85 -56.0123 - 4 13.4045 777 7 1 -24.45 18.6199 5.20738 - 4 85.9088 996 7 0 -24.5449 19.3029 4.15 - 4 84.7922 997 7 0 -24.5693 19.45 3.96365 - 4 70.5491 744 6 1 -31.0786 39.8108 -24.45 - 4 30.1771 745 6 1 -31.05 39.8715 -24.742 - 4 58.3476 1100 6 0 -30.9049 40.2157 -25.85 - 4 65.0903 1101 6 0 -30.89 40.2501 -26.0081 - 4 132.325 729 5 1 -34.0954 46.1847 -54.45 - 4 49.4284 1122 5 0 -34.0225 44.5944 -55.85 - 4 55.7957 1121 5 0 -34.0198 44.45 -55.9658 - 4 49.8799 1120 5 0 -34.0154 44.25 -56.0571 - 4 60.9311 1119 5 0 -34.049 44.0499 -56.109 - 4 67.1094 1118 5 0 -34.1121 43.85 -56.1524 - 4 38.387 743 5 0 -64.0637 -31.3523 -56.25 - 4 62.2284 742 5 0 -64.0903 -31.45 -56.1781 - 4 72.9476 741 5 0 -64.1303 -31.65 -56.0957 - 4 61.8826 740 5 0 -64.2387 -31.8508 -56.0022 - 4 72.0917 739 5 0 -64.3515 -32.0501 -55.9337 - 4 87.9964 738 5 0 -64.4487 -32.2502 -55.8878 - 4 49.1666 737 5 0 -64.4649 -32.4507 -55.9045 - 4 59.6493 736 5 0 -64.4251 -32.65 -55.9224 - 4 58.6203 735 5 0 -64.3807 -32.85 -55.9276 - 4 53.5972 734 5 0 -64.3546 -33.0502 -55.9379 - 4 167.17 733 5 0 -64.2477 -33.2505 -55.9174 - 4 81.4837 732 5 0 -63.8961 -33.4501 -55.9801 - 4 96.2035 597 5 1 -60.6408 -34.511 -54.85 - 4 4.26933 687 5 0 -56.5884 -42.6317 -55.85 - 4 29.6164 686 5 0 -56.5803 -42.65 -55.8514 - 4 336.534 623 5 1 -55.3855 -48.7109 -54.85 - 4 72.7406 624 5 1 -55.25 -49.1878 -54.6284 - 4 158.34 651 5 0 -56.1448 -49.7107 -55.85 - 4 98.9128 619 5 1 -56.1279 -49.6075 -54.85 - 4 79.9158 779 7 1 -24.25 18.3774 5.44946 - 4 38.2524 780 7 1 -24.0499 18.3452 5.25743 - 4 279.629 990 7 0 -23.1725 18.2258 4.15 - 4 101.476 854 6 1 -9.20812 15.1214 -24.4503 - 4 107.424 855 6 1 -9.04983 14.8094 -24.5132 - 4 70.0629 856 6 1 -8.85 14.7748 -24.6353 - 4 12.5698 857 6 1 -8.65 14.7292 -24.8145 - 4 130.166 970 6 0 -7.95734 14.2416 -25.85 - 4 49.0026 969 6 0 -7.77162 14.05 -26.1449 - 4 118.722 824 6 0 17.1416 -15.0755 -26.25 - 4 39.4479 988 6 1 17.7388 -15.0114 -24.8499 - 4 74.4631 989 6 1 17.85 -14.9872 -24.7643 - 4 92.5026 990 6 1 18.05 -14.9061 -24.6088 - 4 18.4121 991 6 1 18.25 -14.9108 -24.489 - 4 175.257 777 6 1 -24.4808 18.3693 -24.45 - 4 137.454 776 5 1 -24.6883 18.4318 -54.45 - 4 172.852 991 5 0 -24.7075 18.4257 -55.85 - 4 115.799 774 4 1 -25.1075 18.3057 -84.45 - 4 212.132 991 4 0 -25.1214 18.2931 -85.85 - 4 113.338 773 3 1 -25.4378 18.0017 -114.45 - 4 264.921 989 3 0 -25.46 17.993 -115.85 - 4 269.786 770 2 1 -25.9023 17.8318 -144.45 - 4 299.437 988 2 0 -25.9114 17.8233 -145.85 - 4 123.479 769 1 1 -26.1428 17.6619 -174.45 - 4 246.406 987 1 0 -26.1558 17.6444 -175.85 - 4 145.597 768 0 1 -26.4192 17.2742 -204.45 - 4 54.3777 986 0 0 -26.4336 17.2517 -205.85 - 4 136.544 985 0 0 -26.4346 17.25 -205.956 - 4 72.1511 1372 3 1 94.5872 -57.1211 -114.85 - 4 146.589 783 6 1 -23.36 18.428 -24.4507 - 4 139.589 791 5 1 -21.7805 17.9117 -54.45 - 4 281.319 989 5 0 -21.7242 17.8629 -55.85 - 4 203.223 794 4 1 -21.2292 17.0859 -84.45 - 4 176.633 984 4 0 -21.0867 16.9379 -85.85 - 4 0.793625 810 3 1 -17.8506 13.9311 -114.45 - 4 120.465 811 3 1 -17.85 13.9308 -114.454 - 4 131.874 968 3 0 -17.6195 13.8443 -115.85 - 4 201.858 837 2 1 -12.6105 11.4569 -144.45 - 4 133.94 956 2 0 -12.3292 11.3197 -145.85 - 4 94.5566 867 1 1 -6.48912 8.46379 -174.45 - 4 85.104 868 1 1 -6.44998 8.46088 -174.699 - 4 92.8594 941 1 0 -6.27843 8.44599 -175.85 - 4 32.8941 895 0 1 -0.865212 8.58912 -204.45 - 4 76.1264 896 0 1 -0.85 8.59719 -204.545 - 4 147.893 943 0 0 -0.644271 8.71912 -205.85 - 4 2.29789 827 2 1 -14.6199 12.1337 -144.45 - 4 89.4253 961 2 0 -14.4011 12.3077 -145.85 - 4 92.3334 960 2 0 -14.2586 12.25 -146.034 - 4 137.558 990 8 0 -24.3346 18.2453 34.15 - 4 318.768 990 6 0 -24.3115 18.1126 -25.85 - 4 166.875 778 4 1 -24.3188 17.9844 -84.45 - 4 123.303 989 4 0 -24.3169 17.9795 -85.85 - 4 113.915 778 3 1 -24.2843 17.881 -114.45 - 4 121.443 779 2 1 -24.1959 17.7063 -144.45 - 4 194.34 778 1 1 -24.3187 17.6172 -174.45 - 4 104.779 779 0 1 -24.1703 17.7348 -204.45 - 4 119.905 988 0 0 -24.1559 17.7355 -205.85 - 4 10.1949 974 7 0 -163.133 14.8967 3.75 - 4 71.6168 779 1 1 -24.25 17.6139 -174.621 - 4 174.122 527 0 1 -74.6271 9.5937 -204.85 - 4 54.4867 989 6 0 -24.2994 18.05 -26.0792 - 4 104.464 799 5 1 -20.1798 7.31298 -54.45 - 4 94.2353 935 5 0 -20.0742 7.09814 -55.85 - 4 84.2303 934 5 0 -20.0651 7.05 -56.1164 - 4 109.411 795 4 1 -21.0499 1.15581 -84.6385 - 4 20.2619 912 4 0 -20.0298 2.58603 -85.85 - 4 90.9028 913 4 0 -19.9839 2.65 -85.9095 - 4 52.3085 914 4 0 -19.8114 2.85 -86.1152 - 4 131.903 956 3 1 11.3657 23.4814 -114.45 - 4 13.3348 1018 3 0 11.9794 23.8383 -115.85 - 4 213.153 1019 3 0 12.0129 23.85 -115.896 - 4 75.4432 779 6 1 -24.2499 18.1036 -24.4596 - 4 81.3513 780 6 1 -24.05 18.078 -24.6864 - 4 411.072 1016 7 0 12.8976 23.3183 3.75 - 4 132.577 1017 7 0 13.2252 23.45 4.01737 - 4 173.258 951 7 1 10.3351 23.0093 5.15002 - 4 42.7216 1015 7 0 13.0802 23.25 3.90346 -Number of digits in this event: 58 -Using G4ParticleGun... -Particle energy: 1.94775 LIN +Number of tracker hits in this event: 196 + 4 259.15 876 11 1 -4.78225 10.1742 125.55 + 4 226.115 950 11 0 -4.78137 10.1736 124.15 + 4 484.371 876 10 1 -4.75495 10.159 95.55 + 4 388.685 950 10 0 -4.75356 10.1579 94.15 + 4 237.108 876 9 1 -4.72529 10.1379 65.55 + 4 294.984 950 9 0 -4.7213 10.1365 64.15 + 4 123.208 877 8 1 -4.64382 10.1146 35.55 + 4 128.069 950 8 0 -4.64138 10.1145 34.15 + 4 333.072 877 7 1 -4.59179 10.1088 5.55 + 4 147.217 950 7 0 -4.59023 10.1076 4.15 + 4 109.886 877 6 1 -4.55754 10.0774 -24.45 + 4 99.147 950 6 0 -4.55438 10.0756 -25.85 + 4 109.187 877 5 1 -4.49526 10.0352 -54.45 + 4 141.556 949 5 0 -4.49222 10.0333 -55.85 + 4 127.238 878 4 1 -4.4374 10.0148 -84.45 + 4 185.397 949 4 0 -4.43475 10.0137 -85.85 + 4 202.08 878 3 1 -4.38306 9.9989 -114.45 + 4 510.497 949 3 0 -4.38055 9.99886 -115.85 + 4 366.61 878 2 1 -4.33355 9.99543 -144.45 + 4 297.569 949 2 0 -4.3307 9.99474 -145.85 + 4 151.414 878 1 1 -4.27647 9.97111 -174.45 + 4 102.841 949 1 0 -4.27277 9.9693 -175.85 + 4 249.415 879 0 1 -4.20257 9.93524 -204.45 + 4 379.45 949 0 0 -4.19886 9.93401 -205.85 + 4 125.915 1459 2 1 112.112 -6.64478 -144.85 + 4 59.0859 646 0 0 -31.7513 -50.65 -205.925 + 4 4.56212 607 1 1 -58.6307 -86.2943 -174.85 + 4 388.307 877 3 1 -4.4795 9.97509 -114.45 + 4 51.1841 877 2 1 -4.63933 10.1875 -144.45 + 4 451.706 876 2 1 -4.65005 10.1824 -144.568 + 4 120.671 950 2 0 -4.76835 10.1338 -145.85 + 4 176.189 862 1 1 -7.54749 9.28964 -174.45 + 4 139.768 946 1 0 -7.76914 9.28397 -175.85 + 4 131.787 840 0 1 -11.9447 9.05394 -204.45 + 4 126.498 944 0 0 -12.0391 9.01603 -205.85 + 4 27.2436 1127 1 0 36.9939 45.4755 -176.25 + 4 128.493 1171 1 0 70.1868 54.4248 -176.25 + 4 117.878 873 2 1 -5.40887 10.0747 -144.45 + 4 111.721 872 1 1 -5.49129 6.33167 -174.45 + 4 128.284 930 1 0 -5.70246 6.15062 -175.85 + 4 75.744 851 0 1 -9.80268 2.87479 -204.45 + 4 32.0913 850 0 1 -9.85008 2.87247 -204.717 + 4 234.962 914 0 0 -10.0467 2.85582 -205.85 + 4 42.0406 878 0 1 -4.36624 9.98578 -204.45 + 4 241.231 877 0 1 -4.45076 9.9982 -204.538 + 4 111.493 876 0 1 -4.65 10.0591 -204.755 + 4 112.087 951 0 0 -5.5022 10.282 -205.85 + 4 16.6845 957 0 0 -22.9694 11.6234 -206.25 + 4 151.684 958 0 0 -23.0149 11.65 -206.206 + 4 124.142 959 0 0 -23.3978 11.85 -205.917 + 4 157.462 775 0 1 -24.882 12.611 -204.85 + 4 214.047 774 0 1 -25.0501 12.7964 -204.631 + 4 463.097 936 0 0 -5.91699 7.42345 -205.85 + 4 176.973 1272 9 0 8.2097 74.5575 63.75 + 4 131.074 868 9 1 -6.3462 9.52164 65.55 + 4 178.181 947 9 0 -6.53895 9.52584 64.15 + 4 289.213 849 8 1 -10.1494 9.6759 35.5495 + 4 127.419 947 8 0 -10.3461 9.61705 34.15 + 4 151.132 824 7 1 -15.1157 7.85643 5.55 + 4 105.941 938 7 0 -15.1975 7.81064 4.15 + 4 130.412 814 6 1 -17.125 7.08865 -24.4506 + 4 161.223 934 6 0 -17.2897 7.03228 -25.8504 + 4 90.9565 797 5 1 -20.5777 5.85066 -54.45 + 4 162.209 929 5 0 -20.6499 5.94229 -55.8501 + 4 147.957 792 4 1 -21.5104 7.61732 -84.45 + 4 92.879 938 4 0 -21.4988 7.69518 -85.85 + 4 150.048 791 3 1 -21.6928 8.5757 -114.45 + 4 78.915 942 3 0 -21.7113 8.64018 -115.85 + 4 68.6186 943 3 0 -21.7142 8.65001 -116.097 + 4 136.925 790 2 1 -21.9894 9.81251 -144.45 + 4 94.3547 948 2 0 -21.9731 9.7686 -145.85 + 4 268.005 790 1 1 -22.026 8.95981 -174.45 + 4 48.6672 789 1 1 -22.05 8.94321 -174.763 + 4 237.757 944 1 0 -22.1342 8.91602 -175.85 + 4 36.4156 776 0 1 -24.8166 7.80325 -204.45 + 4 118.319 938 0 0 -25.0986 7.68922 -205.851 + 4 248.662 939 1 0 -22.1873 7.98269 -175.85 + 4 136.544 940 1 0 -22.1088 8.05002 -176.224 + 4 56.4082 938 1 0 -22.0989 7.84997 -176.201 + 4 133.48 848 8 1 -10.2502 9.30169 35.4234 + 4 80.1383 938 8 0 -10.4057 7.7989 34.15 + 4 86.1368 937 8 0 -10.4595 7.65 34.0103 + 4 172.943 936 8 0 -10.6358 7.45 33.8967 + 4 221.901 935 8 0 -10.9565 7.24982 34.105 + 4 75.6423 1016 9 0 10.6516 23.4362 63.75 + 4 24.4873 846 5 1 -10.8406 5.45156 -54.4502 + 4 133.516 845 5 1 -10.8501 5.45665 -54.4619 + 4 27.7552 844 5 1 -11.05 5.62449 -54.7702 + 4 131.246 931 5 0 -11.4949 6.25077 -55.85 + 4 38.4867 932 5 0 -11.7246 6.45 -56.1637 + 4 232.581 1109 5 0 -41.8034 41.8909 -56.2498 + 4 78.0234 689 5 1 -42.2193 41.9842 -54.85 + 4 24.351 688 5 1 -42.2501 42.029 -54.5479 + 4 78.9953 877 10 1 -4.64998 10.2638 95.3987 + 4 9.33805 952 10 0 -4.11175 10.64 94.15 + 4 138.175 953 10 0 -4.09722 10.6501 94.1169 + 4 133.834 948 9 1 9.69564 19.5459 65.5495 + 4 71.5964 949 9 1 9.85 19.7671 65.298 + 4 17.6904 1004 9 0 10.6143 21.0208 64.15 + 4 86.2237 1005 9 0 10.6325 21.05 64.1231 + 4 88.8325 1006 9 0 10.7465 21.25 63.9333 + 4 4.29861 1007 9 0 10.8474 21.45 63.7602 + 4 93.5228 1033 8 1 26.738 56.0868 35.55 + 4 61.3058 1034 8 1 26.8501 56.0889 35.5025 + 4 61.1328 1035 8 1 27.0501 56.0855 35.4183 + 4 71.676 1036 8 1 27.2501 56.0845 35.3266 + 4 41.0631 1037 8 1 27.45 56.0873 35.2283 + 4 185.206 1179 8 0 29.5247 56.042 34.1499 + 4 63.1258 1180 8 0 30.0202 56.05 33.8399 + 4 441.968 1248 8 0 132.117 69.6555 33.75 + 4 183.546 1249 8 0 133.443 69.85 34.0701 + 4 115.986 1250 8 0 134.07 70.05 34.1215 + 4 101.102 1251 8 0 134.434 70.25 34.1343 + 4 145.106 1252 8 0 134.716 70.45 34.1304 + 4 63.723 1253 8 0 134.982 70.65 34.1381 + 4 54.9945 1616 8 1 143.411 77.9798 35.15 + 4 95.0688 1617 8 1 143.55 78.1445 35.1636 + 4 83.0795 1618 8 1 143.75 78.4233 35.1923 + 4 117.06 1619 8 1 143.95 78.7098 35.171 + 4 9.78119 1620 8 1 144.15 79.0081 35.151 + 4 39.6849 1543 8 0 179.644 128.822 34.15 + 4 76.8706 1544 8 0 179.742 128.95 34.1445 + 4 63.6711 1545 8 0 179.917 129.15 34.1261 + 4 40.8068 1546 8 0 180.053 129.35 34.1134 + 4 180.845 876 8 1 -4.67989 10.0306 35.55 + 4 113.75 949 8 0 -4.67685 10.0204 34.15 + 4 415.916 948 7 0 -4.58585 9.75042 4.15 + 4 117.246 878 6 1 -4.30701 9.53926 -24.45 + 4 135.282 947 6 0 -4.30309 9.52991 -25.85 + 4 219.309 878 5 1 -4.26888 9.34664 -54.45 + 4 212.327 946 5 0 -4.26151 9.34543 -55.85 + 4 103.893 879 4 1 -4.1091 9.34641 -84.45 + 4 107.02 946 4 0 -4.08708 9.33303 -85.85 + 4 107.17 881 3 1 -3.68706 9.06839 -114.45 + 4 125.42 945 3 0 -3.65627 9.0648 -115.85 + 4 117.164 885 2 1 -2.99909 8.98107 -144.45 + 4 323.64 944 2 0 -2.97578 8.98828 -145.85 + 4 127.992 887 1 1 -2.59629 8.99835 -174.45 + 4 113.581 888 0 1 -2.32351 9.22798 -204.45 + 4 153.5 946 0 0 -2.32634 9.26189 -205.85 + 4 137.57 945 5 0 -4.66327 9.14931 -55.8503 + 4 1.03027 944 5 0 -4.77774 9.04984 -56.245 + 4 65.27 796 4 1 -20.7762 -1.13942 -84.45 + 4 90.173 797 4 1 -20.65 -1.03176 -84.5258 + 4 141.402 798 4 1 -20.45 -0.847201 -84.6523 + 4 88.5391 799 4 1 -20.25 -0.699504 -84.7991 + 4 78.7305 906 4 0 -17.9236 1.268 -85.8501 + 4 124.435 907 4 0 -17.7219 1.45012 -85.9217 + 4 64.2694 908 4 0 -17.5426 1.65 -85.9718 + 4 71.3834 909 4 0 -17.362 1.85 -86.0121 + 4 65.3102 910 4 0 -17.1908 2.05 -86.0679 + 4 77.6457 911 4 0 -17.0441 2.25003 -86.1265 + 4 289.657 876 6 1 -4.80688 9.89143 -24.45 + 4 229.583 949 6 0 -4.82347 9.92417 -25.85 + 4 104.979 872 5 1 -5.48948 10.5471 -54.45 + 4 154.553 952 5 0 -5.49714 10.5831 -55.85 + 4 101.641 872 4 1 -5.56343 11.2624 -84.45 + 4 103.252 956 4 0 -5.51621 11.2913 -85.85 + 4 148.709 959 3 0 -4.57833 11.9773 -115.85 + 4 263.08 874 2 1 -5.07817 15.438 -144.45 + 4 14.4021 977 2 0 -5.09099 15.6368 -145.85 + 4 94.9401 978 2 0 -5.09149 15.65 -145.942 + 4 103.42 874 1 1 -5.15461 19.6412 -174.45 + 4 3.74498 998 1 0 -5.26188 19.8482 -175.85 + 4 127.762 999 1 0 -5.26278 19.85 -175.862 + 4 194.479 865 0 1 -6.88736 23.6251 -204.45 + 4 140.199 1019 0 0 -6.94693 23.8729 -205.85 + 4 109.278 920 5 0 174.715 4.05 -56.1768 + 4 143.807 876 5 1 -4.78635 9.57773 -54.45 + 4 185.464 947 5 0 -4.82078 9.6116 -55.85 + 4 126.926 873 4 1 -5.34482 10.2125 -84.45 + 4 133.711 950 4 0 -5.36476 10.2042 -85.85 + 4 280.812 870 3 1 -5.88246 9.91501 -114.45 + 4 104.328 951 2 0 -5.13467 10.3635 -145.85 + 4 483.264 877 1 1 -4.60536 10.6263 -174.45 + 4 135.869 952 1 0 -4.60144 10.5702 -175.85 + 4 95.529 948 0 0 -4.59172 9.6506 -205.85 + 4 313.448 947 0 0 -4.59229 9.65 -205.864 + 4 31.4506 867 0 1 -6.55749 10.4821 -204.45 + 4 97.9767 866 0 1 -6.65 10.4957 -204.541 + 4 1.58162 864 0 1 -7.05 10.425 -204.846 + 4 32.6178 946 2 0 -4.42982 9.25479 -145.85 + 4 102.391 945 2 0 -4.43605 9.25 -145.951 + 4 104.83 871 1 1 -5.69822 7.86738 -174.45 + 4 113.531 882 0 1 -3.51865 14.3002 -204.45 + 4 46.4547 971 0 0 -3.27084 14.4308 -205.85 + 4 76.7271 972 0 0 -3.22734 14.45 -206.06 + 4 84.5707 1071 2 0 -135.474 34.2912 -146.25 + 4 76.6436 610 9 0 -66.8083 -57.9291 63.75 + 4 142.456 1070 2 0 -135.652 34.2499 -146.174 + 4 167.788 879 2 1 -4.24982 9.37722 -144.476 + 4 96.391 880 2 1 -4.04997 9.18985 -144.684 + 4 200.077 943 2 0 -3.19234 8.6714 -145.85 + 4 51.7777 882 2 1 -3.56289 8.94399 -144.85 + 4 121.611 881 2 1 -3.65 8.96451 -144.819 + 4 211.515 578 3 0 174.894 -64.3394 -116.25 +Number of digits in this event: 102 +Using G4ParticleGun... +Particle energy: 5.13247 LIN Particle: gamma Event: 5 -Number of tracker hits in this event: 23 - 5 265.08 606 3 1 -58.7213 63.1295 -114.45 - 5 223.978 1215 3 0 -58.785 63.1719 -115.85 - 5 115.469 598 2 1 -60.346 64.0444 -144.45 - 5 123.735 1220 2 0 -60.4534 64.0978 -145.85 - 5 146.674 588 1 1 -62.4049 65.4271 -174.45 - 5 156.197 1227 1 0 -62.5121 65.5104 -175.85 - 5 12.7843 577 0 1 -64.6475 67.4823 -204.45 - 5 221.303 576 0 1 -64.65 67.4856 -204.494 - 5 151.907 1237 0 0 -64.7215 67.5985 -205.85 - 5 157.916 1238 0 0 -65.1286 67.6776 -205.85 - 5 113.709 1419 0 0 -76.6923 103.98 -206.25 - 5 11.9162 1420 0 0 -76.985 104.15 -206.232 - 5 219.53 1431 0 0 -100.878 106.442 -206.25 - 5 24.1726 1430 0 0 -100.882 106.35 -205.982 - 5 22.2515 392 0 1 -101.72 105.461 -204.85 - 5 338.865 391 0 1 -101.75 105.43 -204.804 - 5 29.0881 390 0 1 -101.95 105.363 -204.674 - 5 119.792 606 2 1 -58.666 63.0862 -144.45 - 5 116.893 1215 2 0 -58.6673 63.0887 -145.85 - 5 109.025 606 1 1 -58.6903 63.1497 -174.45 - 5 110.331 1215 1 0 -58.6949 63.148 -175.85 - 5 118.34 606 0 1 -58.7718 63.1685 -204.45 - 5 120.102 1215 0 0 -58.7776 63.1835 -205.85 -Number of digits in this event: 12 +Number of tracker hits in this event: 31 + 5 239.322 655 4 1 -49.009 -33.5558 -84.45 + 5 239.815 732 4 0 -49.0119 -33.5571 -85.85 + 5 114.702 654 3 1 -49.1269 -33.4306 -114.45 + 5 133.367 733 3 0 -49.1442 -33.4334 -115.85 + 5 110.042 652 2 1 -49.4683 -33.4846 -144.45 + 5 293.094 732 2 0 -49.4859 -33.498 -145.85 + 5 128.573 650 1 1 -50.0329 -33.3662 -174.45 + 5 111.351 732 1 0 -50.017 -33.5233 -175.85 + 5 126.392 652 0 1 -49.6065 -36.9546 -204.45 + 5 112.091 714 0 0 -49.6416 -37.1891 -205.85 + 5 10.7835 713 0 0 -49.6526 -37.25 -206.208 + 5 206.817 649 1 1 -50.05 -33.4209 -174.761 + 5 30.783 736 1 0 -50.7822 -32.7808 -175.85 + 5 188.047 644 1 1 -51.1836 -32.6131 -174.85 + 5 6.97822 643 1 1 -51.25 -32.5634 -174.807 + 5 146.796 655 3 1 -48.9981 -33.5878 -114.45 + 5 112.608 732 3 0 -48.9979 -33.5899 -115.85 + 5 141.309 655 2 1 -48.991 -33.6382 -144.45 + 5 229.104 655 1 1 -48.9614 -33.7182 -174.45 + 5 124.296 731 1 0 -48.9621 -33.7208 -175.85 + 5 708.549 655 0 1 -48.9746 -33.7562 -204.45 + 5 359.331 731 0 0 -48.9735 -33.7582 -205.85 + 5 156.506 816 3 0 -131.279 -16.7541 -116.25 + 5 91.4921 817 3 0 -131.365 -16.65 -116.022 + 5 121.396 406 1 0 -141.971 -98.8505 -176.25 + 5 149.998 405 1 0 -141.942 -98.95 -176.13 + 5 83.6303 473 4 1 -85.25 -77.5802 -84.5662 + 5 49.7255 1091 4 0 112.082 38.25 -86.0658 + 5 25.7701 1461 4 1 112.385 38.5692 -84.85 + 5 95.0116 1460 4 1 112.35 38.5765 -84.7841 + 5 365.547 1459 4 1 112.15 38.4231 -84.7607 +Number of digits in this event: 22 Using G4ParticleGun... -Particle energy: 3.23566 LIN +Particle energy: 2.09303 LIN Particle: gamma Event: 6 -Number of tracker hits in this event: 1 - 6 4.32139 271 5 1 -125.75 147.494 -54.6343 -Number of digits in this event: 1 +Number of tracker hits in this event: 38 + 6 350.284 484 4 1 -83.2023 66.8351 -84.45 + 6 246.868 1233 4 0 -83.2075 66.8398 -85.85 + 6 113.581 484 3 1 -83.2365 66.8668 -114.45 + 6 107.046 1234 3 0 -83.2433 66.8674 -115.85 + 6 94.7523 483 2 1 -83.3881 66.9201 -144.45 + 6 213.252 1234 2 0 -83.3987 66.909 -145.85 + 6 135.576 482 1 1 -83.6232 66.6577 -174.45 + 6 163.239 1232 1 0 -83.6353 66.6446 -175.85 + 6 173.988 480 0 1 -83.8766 66.3651 -204.45 + 6 114.446 1231 0 0 -83.8745 66.3682 -205.85 + 6 321.632 481 1 1 -83.6502 66.6426 -174.478 + 6 505.677 480 1 1 -83.85 66.6314 -174.55 + 6 239.066 482 0 1 -83.4684 67.261 -204.45 + 6 222.487 1236 0 0 -83.4776 67.2703 -205.85 + 6 237.091 1106 0 0 -69.3709 41.45 -206.233 + 6 24.1083 1107 0 0 -69.2796 41.45 -206.023 + 6 188.084 532 3 1 -73.5351 158.04 -114.45 + 6 119.171 533 3 1 -73.4499 157.86 -114.662 + 6 174.479 481 0 1 -83.65 67.06 -204.454 + 6 92.8312 1230 0 0 -83.6238 66.2185 -205.85 + 6 285.025 1229 0 0 -83.556 66.05 -206.049 + 6 243.409 483 1 1 -83.2591 66.8337 -174.45 + 6 185.368 1233 1 0 -83.2618 66.8315 -175.85 + 6 269.907 484 0 1 -83.1182 66.7809 -204.45 + 6 242.066 1233 0 0 -83.1095 66.7964 -205.85 + 6 167.911 1234 1 0 -83.2491 66.9109 -175.85 + 6 96.5381 1239 0 0 -83.1181 68.0442 -205.85 + 6 68.4627 1240 0 0 -83.1036 68.05 -206.058 + 6 117.657 483 3 1 -83.2599 66.7942 -114.45 + 6 132.72 1233 3 0 -83.2758 66.7885 -115.85 + 6 117.944 482 2 1 -83.6133 66.6546 -144.45 + 6 127.963 1232 2 0 -83.6294 66.6459 -145.85 + 6 128.176 1231 1 0 -83.9464 66.4485 -175.85 + 6 145.956 479 0 1 -84.1582 66.0458 -204.45 + 6 79.639 489 0 1 -82.1101 71.6222 -204.451 + 6 50.108 490 0 1 -82.05 71.757 -204.69 + 6 69.2218 1261 0 0 -81.6895 72.3497 -205.85 + 6 71.1183 1262 0 0 -81.6279 72.45 -206.043 +Number of digits in this event: 26 Using G4ParticleGun... -Particle energy: 6.58332 LIN +Particle energy: 6.67956 LIN Particle: gamma Event: 7 -Number of tracker hits in this event: 5 - 7 59.917 95 0 0 -62.183 -161.014 -206.25 - 7 63.2027 94 0 0 -62.0507 -161.15 -206.228 - 7 94.5687 93 0 0 -62.0261 -161.35 -206.227 - 7 231.888 92 0 0 -62.1544 -161.55 -206.201 - 7 144.747 91 0 0 -62.3331 -161.75 -205.978 -Number of digits in this event: 4 +Number of tracker hits in this event: 2 + 7 185.445 696 11 0 104.28 -40.6708 123.75 + 7 103.308 697 11 0 104.304 -40.65 123.787 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 9.00556 LIN +Particle energy: 8.78893 LIN Particle: gamma Event: 8 -Number of tracker hits in this event: 8 - 8 226.767 1313 0 1 82.7255 110.305 -204.45 - 8 362.461 1450 0 0 82.7278 110.307 -205.85 - 8 39.783 609 1 0 95.608 -58.05 -176.237 - 8 108.683 248 10 1 -130.41 150.234 95.15 - 8 139.842 1091 0 1 38.45 114.464 -204.75 - 8 27.1969 1772 5 0 -30.9284 174.594 -56.25 - 8 39.975 1148 2 1 49.85 75.0839 -144.663 - 8 147.988 1451 0 0 82.6904 110.35 -206.022 -Number of digits in this event: 7 +Number of tracker hits in this event: 16 + 8 274.437 376 2 1 -104.906 85.513 -144.45 + 8 281.723 1327 2 0 -104.906 85.5128 -145.85 + 8 300.598 376 1 1 -104.91 85.5165 -174.45 + 8 303.895 1327 1 0 -104.911 85.5154 -175.85 + 8 113.223 375 0 1 -104.993 85.5487 -204.45 + 8 228.437 1327 0 0 -104.993 85.5523 -205.85 + 8 116.533 376 0 1 -104.903 85.4968 -204.45 + 8 41.0373 1010 5 0 -54.0632 22.25 -56.1804 + 8 103.89 399 0 1 -100.35 51.478 -204.711 + 8 349.554 224 5 1 -135.282 -46.3048 -54.7476 + 8 121.069 223 5 1 -135.35 -46.4279 -54.5335 + 8 105.658 222 5 1 -135.55 -46.4547 -54.4968 + 8 12.7585 221 5 1 -135.75 -46.3737 -54.8209 + 8 123.834 667 5 0 -136.568 -46.5079 -55.85 + 8 21.4622 666 5 0 -136.762 -46.65 -56.1709 + 8 294.588 225 5 1 -135.15 -46.6683 -54.7705 +Number of digits in this event: 11 Using G4ParticleGun... -Particle energy: 1.64341 LIN +Particle energy: 4.38144 LIN Particle: gamma Event: 9 -Number of tracker hits in this event: 26 - 9 253.867 1421 2 1 104.412 83.718 -144.45 - 9 674.845 1318 2 0 104.413 83.7195 -145.85 - 9 243.418 1421 1 1 104.43 83.7351 -174.45 - 9 121.353 1318 1 0 104.435 83.7367 -175.85 - 9 110.442 1421 0 1 104.537 83.7681 -204.45 - 9 109.095 1318 0 0 104.538 83.7655 -205.85 - 9 119.866 1317 1 0 104.459 83.6191 -175.85 - 9 159.344 1422 0 1 104.601 84.0799 -204.45 - 9 216.694 1320 0 0 104.643 84.1326 -205.85 - 9 28.2135 544 13 0 46.215 -71.1648 183.75 - 9 110.787 543 13 0 46.2057 -71.25 183.908 - 9 0.610811 1133 13 1 46.849 -72.0055 185.15 - 9 179.243 1134 13 1 46.85 -72.0067 185.152 - 9 65.6974 1135 13 1 47.05 -71.8653 185.191 - 9 81.3778 539 13 0 47.1259 -72.137 184.15 - 9 72.4571 1423 0 1 104.75 84.1499 -204.519 - 9 50.2839 1424 0 1 104.95 84.1461 -204.589 - 9 69.5784 1425 0 1 105.15 84.085 -204.637 - 9 60.6835 1426 0 1 105.35 84.0092 -204.704 - 9 52.8573 1427 0 1 105.55 83.8971 -204.713 - 9 59.5316 1428 0 1 105.75 83.8472 -204.684 - 9 64.8603 1429 0 1 105.95 83.8742 -204.712 - 9 11.1382 1430 0 1 106.15 83.9391 -204.825 - 9 288.599 1322 0 0 107.379 84.5648 -205.85 - 9 65.333 1323 0 0 107.628 84.65 -205.954 - 9 30.6218 1284 0 0 126.972 76.9686 -206.25 -Number of digits in this event: 10 +Number of tracker hits in this event: 28 + 9 326.926 1180 6 1 56.1671 -98.2937 -24.45 + 9 232.246 409 6 0 56.17 -98.2985 -25.85 + 9 227.691 1180 5 1 56.2429 -98.3899 -54.45 + 9 132.804 408 5 0 56.2527 -98.3954 -55.85 + 9 123.524 1182 4 1 56.4654 -98.5135 -84.45 + 9 136.686 408 4 0 56.4757 -98.5168 -85.85 + 9 167.242 1183 3 1 56.6829 -98.598 -114.45 + 9 104 407 3 0 56.6969 -98.5942 -115.85 + 9 124.042 1184 2 1 56.9971 -98.5203 -144.45 + 9 142.298 408 2 0 57.011 -98.5212 -145.85 + 9 109.891 1186 1 1 57.2724 -98.5512 -174.45 + 9 123.119 407 1 0 57.2866 -98.5528 -175.85 + 9 106.952 1187 0 1 57.5744 -98.6008 -204.45 + 9 126.998 407 0 0 57.5917 -98.6062 -205.85 + 9 148.799 409 5 0 56.16 -98.2874 -55.85 + 9 241.726 1180 4 1 56.1888 -98.2744 -84.45 + 9 120.112 409 4 0 56.1851 -98.27 -85.85 + 9 104.588 1180 3 1 56.106 -98.1766 -114.45 + 9 144.019 409 3 0 56.104 -98.1722 -115.85 + 9 148.048 1180 2 1 56.0602 -98.0793 -144.45 + 9 191.699 410 2 0 56.0589 -98.0739 -145.85 + 9 156.496 1179 1 1 56.0465 -97.9535 -174.45 + 9 112.2 411 1 0 56.0435 -97.9461 -175.85 + 9 150.012 1179 0 1 55.9858 -97.8032 -204.45 + 9 114.556 411 0 0 55.9813 -97.7998 -205.85 + 9 67.1127 490 2 0 87.9875 -82.0175 -146.25 + 9 11.797 1341 2 1 88.4431 -81.7502 -144.85 + 9 221.565 1342 2 1 88.4501 -81.7489 -144.82 +Number of digits in this event: 22 Using G4ParticleGun... -Particle energy: 4.9485 LIN +Particle energy: 7.1487 LIN Particle: gamma Event: 10 -Number of tracker hits in this event: 3 - 10 138.493 1289 9 0 111.918 78.0176 63.75 - 10 23.0616 323 14 1 -115.482 -0.18787 215.15 - 10 27.68 322 14 1 -115.55 -0.206078 215.467 -Number of digits in this event: 3 +Number of tracker hits in this event: 43 + 10 211.414 568 7 1 -66.3342 34.5565 5.55 + 10 259.935 1072 7 0 -66.3335 34.5559 4.15 + 10 268.465 568 6 1 -66.3148 34.5505 -24.45 + 10 308.292 1072 6 0 -66.313 34.5521 -25.85 + 10 257.176 568 5 1 -66.269 34.5835 -54.45 + 10 105.986 1072 5 0 -66.2679 34.587 -55.85 + 10 196.655 569 4 1 -66.2462 34.6601 -84.45 + 10 128.538 1073 4 0 -66.2448 34.6644 -85.85 + 10 277.487 569 3 1 -66.2186 34.7571 -114.45 + 10 117.921 1073 3 0 -66.2182 34.7633 -115.85 + 10 204.246 569 2 1 -66.2095 34.8878 -144.45 + 10 122.778 1074 2 0 -66.2096 34.8953 -145.85 + 10 112.876 569 1 1 -66.2136 35.047 -174.45 + 10 101.544 1075 1 0 -66.2145 35.0528 -175.85 + 10 535.359 569 0 1 -66.233 35.1718 -204.45 + 10 418.518 1075 0 0 -66.2359 35.1776 -205.85 + 10 24.7589 1106 2 1 41.25 112.126 -144.646 + 10 92.232 1251 7 0 -117.593 70.3341 3.75 + 10 40.314 1252 7 0 -117.664 70.45 4.09011 + 10 37.9281 669 1 1 -46.1807 46.9491 -174.85 + 10 197.858 670 1 1 -46.05 46.9413 -174.464 + 10 35.6264 671 1 1 -45.85 46.9396 -174.479 + 10 49.8798 532 7 0 -85.5394 -73.45 3.75384 + 10 476.177 570 0 1 -66.05 35.2607 -204.81 + 10 70.1782 1077 0 0 -66.4524 35.6467 -205.85 + 10 124.021 1078 0 0 -66.4647 35.65 -205.866 + 10 115.343 1073 5 0 -66.3612 34.7738 -55.85 + 10 159.472 568 4 1 -66.2998 34.9453 -84.45 + 10 162.989 1074 4 0 -66.2931 34.9575 -85.85 + 10 92.7193 1075 3 0 -66.1786 35.2022 -115.85 + 10 123.056 1077 2 0 -66.1041 35.613 -145.85 + 10 108.63 570 1 1 -65.8785 36.141 -174.45 + 10 127.594 1080 1 0 -65.8808 36.1215 -175.85 + 10 120.311 570 4 1 -66.05 35.0827 -84.5464 + 10 187.305 571 4 1 -65.85 34.9177 -84.6783 + 10 17.5956 1066 4 0 -69.3273 33.2966 -85.85 + 10 148.768 1081 0 0 -65.9735 36.313 -205.85 + 10 108.218 1079 0 0 -65.6741 35.9327 -205.85 + 10 143.487 567 0 1 -66.6367 34.3793 -204.45 + 10 225.701 566 0 1 -66.65 34.3939 -204.492 + 10 13.322 1073 0 0 -67.2428 34.8334 -205.85 + 10 126.129 1074 0 0 -67.2669 34.85 -205.898 + 10 195.989 1071 0 0 -67.0489 34.3982 -205.85 +Number of digits in this event: 29 Using G4ParticleGun... -Particle energy: 2.43824 LIN +Particle energy: 1.51866 LIN Particle: gamma Event: 11 -Number of tracker hits in this event: 20 - 11 153.802 751 3 1 -29.6567 -107.781 -114.45 - 11 199.668 361 3 0 -29.6567 -107.777 -115.85 - 11 128.731 752 2 1 -29.6474 -107.705 -144.45 - 11 122.691 362 2 0 -29.6461 -107.702 -145.85 - 11 115.617 752 1 1 -29.6009 -107.654 -174.45 - 11 131.176 362 1 0 -29.6004 -107.661 -175.85 - 11 101.353 752 0 1 -29.6077 -107.768 -204.45 - 11 166.642 361 0 0 -29.602 -107.766 -205.85 - 11 167.82 586 1 1 -62.65 -106.236 -174.819 - 11 385.022 585 1 1 -62.8504 -106.3 -174.599 - 11 232.378 584 1 1 -63.0501 -106.339 -174.468 - 11 14.7342 386 1 0 -62.2994 -102.782 -175.85 - 11 64.5718 387 1 0 -62.2974 -102.75 -175.861 - 11 127.171 752 3 1 -29.65 -107.781 -114.507 - 11 125.34 757 2 1 -28.6238 -108.106 -144.45 - 11 251.86 360 2 0 -28.584 -108.076 -145.85 - 11 129.542 759 1 1 -28.1147 -107.495 -174.45 - 11 106.987 363 1 0 -28.139 -107.399 -175.85 - 11 118.022 757 0 1 -28.5363 -105.272 -204.45 - 11 121.686 374 0 0 -28.6511 -105.218 -205.851 -Number of digits in this event: 16 +Number of tracker hits in this event: 10 + 11 292.85 1343 2 1 88.7559 50.4799 -144.45 + 11 153.082 1151 2 0 88.7555 50.4473 -145.85 + 11 237.201 1343 1 1 88.6936 49.7424 -174.45 + 11 142.675 1148 1 0 88.7054 49.7272 -175.85 + 11 116.019 1344 0 1 88.8644 49.3128 -204.45 + 11 112.008 1146 0 0 88.8691 49.3205 -205.85 + 11 114.902 1152 2 0 88.7557 50.4861 -145.85 + 11 108.207 1152 1 0 88.7102 50.6262 -175.85 + 11 101.734 1342 0 1 88.6248 50.7396 -204.45 + 11 141.525 1153 0 0 88.624 50.74 -205.85 +Number of digits in this event: 7 Using G4ParticleGun... -Particle energy: 3.85646 LIN +Particle energy: 6.82539 LIN Particle: gamma Event: 12 -Number of tracker hits in this event: 1 - 12 57.9649 984 1 0 169.594 17.0283 -176.25 +Number of tracker hits in this event: 0 Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 8.22648 LIN +Particle energy: 6.325 LIN Particle: gamma Event: 13 -Number of tracker hits in this event: 0 -Number of digits in this event: 1 +Number of tracker hits in this event: 9 + 13 135.997 1042 1 1 28.6416 89.3949 -174.613 + 13 285.236 1346 1 0 28.642 89.3949 -175.85 + 13 157.557 1043 0 1 28.6512 89.3877 -204.45 + 13 227.733 1346 0 0 28.6513 89.3861 -205.85 + 13 143.759 1042 0 1 28.6467 89.4048 -204.45 + 13 299.976 1331 2 1 86.3164 11.914 -144.85 + 13 165.909 953 2 0 86.783 10.8106 -145.85 + 13 60.5817 1338 2 1 87.7758 11.2748 -144.85 + 13 144.212 1339 2 1 87.85 11.3219 -144.815 +Number of digits in this event: 10 Using G4ParticleGun... -Particle energy: 1.75217 LIN +Particle energy: 6.41719 LIN Particle: gamma Event: 14 -Number of tracker hits in this event: 63 - 14 437.462 483 9 1 -83.3191 56.4144 65.55 - 14 235.328 1181 9 0 -83.3151 56.4186 64.15 - 14 139.331 484 8 1 -83.2182 56.4999 35.55 - 14 128.191 1182 8 0 -83.2085 56.504 34.15 - 14 3.62726 484 7 1 -83.0503 56.6157 5.55 - 14 90.2491 485 7 1 -83.05 56.6157 5.52693 - 14 130.245 1182 7 0 -83.0322 56.6173 4.15 - 14 164.797 486 6 1 -82.6943 56.7267 -24.45 - 14 122.955 1183 6 0 -82.6892 56.7227 -25.85 - 14 245.301 487 5 1 -82.6061 56.6775 -54.45 - 14 123.399 1183 5 0 -82.6309 56.6862 -55.85 - 14 135.805 483 4 1 -83.2981 56.8551 -84.45 - 14 114.113 1184 4 0 -83.3344 56.8712 -85.85 - 14 124.583 479 3 1 -84.0799 57.2105 -114.45 - 14 132.569 1185 3 0 -84.1214 57.2317 -115.85 - 14 265.684 475 2 1 -84.8727 57.7131 -144.45 - 14 107.328 1188 2 0 -84.9075 57.7064 -145.85 - 14 244.265 470 1 1 -85.9234 57.8432 -174.45 - 14 134.091 1189 1 0 -86.0156 57.9438 -175.85 - 14 78.3043 460 0 1 -88.0262 59.9745 -204.45 - 14 41.3645 459 0 1 -88.05 59.9698 -204.696 - 14 146.833 1199 0 0 -88.1516 59.9508 -205.85 - 14 264.809 481 4 1 -83.659 56.3584 -84.45 - 14 252.493 1181 4 0 -83.659 56.3363 -85.85 - 14 110.108 482 3 1 -83.6278 55.8958 -114.45 - 14 148.604 1179 3 0 -83.6158 55.8687 -115.85 - 14 260.16 483 2 1 -83.4082 55.343 -144.45 - 14 9.71077 1176 2 0 -83.4365 55.2532 -145.85 - 14 107.662 1175 2 0 -83.4377 55.25 -145.898 - 14 169.397 479 1 1 -84.0719 53.0268 -174.45 - 14 128.695 1164 1 0 -84.0822 52.9063 -175.85 - 14 148.015 480 0 1 -84.0486 50.1131 -204.45 - 14 122.437 1149 0 0 -84.0504 49.9693 -205.85 - 14 96.21 224 0 1 -135.15 23.0408 -204.722 - 14 39.0247 223 0 1 -135.35 23.0409 -204.526 - 14 239.975 479 0 1 -84.05 50.065 -204.636 - 14 103.893 481 3 1 -83.7596 56.2169 -114.45 - 14 140.961 1180 3 0 -83.756 56.2029 -115.85 - 14 130.622 1179 2 0 -83.3433 55.9758 -145.85 - 14 133.329 485 1 1 -82.9806 55.2939 -174.45 - 14 175.222 1176 1 0 -82.9225 55.2992 -175.85 - 14 106.036 492 0 1 -81.6137 55.4654 -204.45 - 14 162.973 1177 0 0 -81.5499 55.4694 -205.85 - 14 104.063 482 8 1 -83.4775 56.8886 35.55 - 14 166.544 1184 8 0 -83.5022 56.9195 34.15 - 14 124.685 480 7 1 -84.0147 57.4997 5.55 - 14 250.607 1187 7 0 -84.0343 57.5264 4.15 - 14 106.704 477 6 1 -84.5124 58.1095 -24.45 - 14 206.202 1190 6 0 -84.5308 58.1279 -25.85 - 14 135.915 475 5 1 -84.8928 58.4963 -54.45 - 14 303.631 1192 5 0 -84.9215 58.5345 -55.85 - 14 115.962 472 4 1 -85.5107 59.348 -84.45 - 14 106.681 1196 4 0 -85.5444 59.3727 -85.85 - 14 134.051 469 3 1 -86.2218 59.7938 -114.45 - 14 163.382 1198 3 0 -86.2168 59.8134 -115.85 - 14 206.825 469 2 1 -86.16 60.3139 -144.45 - 14 94.3373 1201 2 0 -86.1555 60.3347 -145.85 - 14 156.523 1203 1 0 -86.0456 60.7613 -175.85 - 14 133.762 470 0 1 -86.0416 61.1011 -204.45 - 14 221.042 1205 0 0 -86.0453 61.1242 -205.85 - 14 182.613 1204 0 0 -86.1659 61.05 -206.16 - 14 110.42 606 1 1 -58.8232 82.0405 -174.85 - 14 291.087 484 9 1 -83.25 56.3977 65.256 -Number of digits in this event: 46 -Using G4ParticleGun... -Particle energy: 9.01624 LIN +Number of tracker hits in this event: 104 + 14 229.97 710 10 1 -37.9479 64.2903 95.55 + 14 302.413 1221 10 0 -37.9522 64.2895 94.15 + 14 254.766 710 9 1 -38.041 64.2344 65.55 + 14 140.927 1220 9 0 -38.039 64.2416 64.15 + 14 334.193 710 8 1 -37.9711 64.4208 35.55 + 14 200.117 1221 8 0 -37.9627 64.4291 34.15 + 14 121.211 711 7 1 -37.8084 64.631 5.55 + 14 110.577 1222 7 0 -37.8065 64.6265 4.15 + 14 128.479 711 6 1 -37.7591 64.5701 -24.45 + 14 131.276 1222 6 0 -37.75 64.5726 -25.85 + 14 172.691 712 5 1 -37.5876 64.5958 -54.45 + 14 131.875 1222 5 0 -37.5882 64.5966 -55.85 + 14 123.187 712 4 1 -37.6174 64.5928 -84.45 + 14 107.136 1222 4 0 -37.664 64.6153 -85.85 + 14 121.603 707 3 1 -38.6365 65.1062 -114.45 + 14 108.207 1225 3 0 -38.6446 65.1041 -115.85 + 14 275.197 706 2 1 -38.7616 64.9295 -144.45 + 14 153.7 1224 2 0 -38.7415 64.8922 -145.85 + 14 196.674 709 1 1 -38.2225 64.0579 -174.45 + 14 355.309 1219 1 0 -38.1986 63.9998 -175.85 + 14 248.38 712 0 1 -37.6399 62.744 -204.45 + 14 109.001 1213 0 0 -37.6145 62.7202 -205.85 + 14 50.5858 705 2 1 -38.8502 64.676 -144.708 + 14 195.469 1223 2 0 -39.3441 64.6561 -145.85 + 14 166.209 1222 2 0 -39.4524 64.65 -146.119 + 14 17.1203 649 1 1 -50.2085 64.3354 -174.45 + 14 95.1943 648 1 1 -50.2501 64.3104 -174.542 + 14 402.075 1218 1 0 -50.9757 63.85 -176.102 + 14 295.404 711 1 1 -37.7567 65.2437 -174.45 + 14 370.693 710 1 1 -37.85 65.1634 -174.668 + 14 212.39 1223 1 0 -38.3007 64.7409 -175.85 + 14 139.834 1222 1 0 -38.4067 64.65 -176.124 + 14 197.956 648 0 1 -50.2931 55.6105 -204.45 + 14 60.7157 649 0 1 -50.25 55.4229 -204.745 + 14 128.661 1173 0 0 -50.117 54.7076 -205.85 + 14 211.298 1172 0 0 -50.1081 54.65 -205.94 + 14 135.331 710 2 1 -37.9249 65.3423 -144.45 + 14 101.328 1226 2 0 -37.8876 65.3187 -145.85 + 14 139.144 713 1 1 -37.35 64.5784 -174.45 + 14 132.152 719 0 1 -36.2208 64.3036 -204.45 + 14 325.422 1220 0 0 -36.0897 64.1225 -205.85 + 14 211.139 1221 9 0 -37.9647 64.3097 64.15 + 14 107.079 710 7 1 -37.9837 64.3445 5.55 + 14 99.9346 1221 7 0 -37.9843 64.3425 4.15 + 14 148.908 710 6 1 -37.9998 64.2966 -24.45 + 14 262.989 1221 6 0 -37.9976 64.297 -25.85 + 14 120.032 710 5 1 -37.9519 64.3085 -54.45 + 14 155.202 1221 5 0 -37.9509 64.305 -55.85 + 14 105.959 710 4 1 -37.9308 64.2301 -84.45 + 14 169.015 1220 4 0 -37.9303 64.2247 -85.85 + 14 129.768 710 3 1 -37.9184 64.1169 -114.45 + 14 148.019 1220 3 0 -37.9125 64.1083 -115.85 + 14 98.2693 711 2 1 -37.7819 63.9311 -144.45 + 14 258.581 1219 2 0 -37.7763 63.9203 -145.85 + 14 98.3128 1216 0 0 -37.4894 63.3751 -205.85 + 14 91.1634 968 2 0 -3.27936 13.7073 -146.25 + 14 182.755 967 2 0 -3.14087 13.6498 -146.141 + 14 281.746 1220 1 0 -37.637 64.237 -175.85 + 14 118.624 1221 1 0 -37.6356 64.25 -175.887 + 14 126.664 725 0 1 -34.9632 73.9952 -204.45 + 14 15.8243 1272 0 0 -34.952 74.6215 -205.85 + 14 106.023 1273 0 0 -34.9516 74.65 -205.912 + 14 67.7918 692 0 1 -41.561 63.007 -204.45 + 14 137.411 1217 1 0 -38.1109 63.65 -176.213 + 14 44.9946 682 0 1 -43.5887 57.4376 -204.45 + 14 75.4721 683 0 1 -43.4498 57.3309 -204.534 + 14 94.6441 684 0 1 -43.2498 57.1461 -204.672 + 14 65.0514 685 0 1 -43.05 56.912 -204.774 + 14 84.7497 1171 0 0 -41.1566 54.4499 -206.049 + 14 46.4638 1170 0 0 -41.0062 54.25 -206.171 + 14 87.1764 705 0 0 78.2192 -38.9215 -206.25 + 14 275.516 704 0 0 78.4903 -39.05 -206.118 + 14 11.554 1298 0 1 79.812 -39.469 -204.85 + 14 104.759 1299 0 1 79.85 -39.4764 -204.808 + 14 98.7752 1300 0 1 80.0503 -39.516 -204.605 + 14 136.801 1301 0 1 80.2908 -39.5134 -204.45 + 14 137.952 701 0 0 80.3641 -39.7108 -205.85 + 14 231.096 700 0 0 80.5365 -39.85 -206.198 + 14 100.526 708 1 1 -38.25 64.466 -174.561 + 14 381.617 707 1 1 -38.45 64.6825 -174.536 + 14 250.081 706 1 1 -38.65 64.8151 -174.495 + 14 67.209 705 1 1 -38.8501 64.8028 -174.483 + 14 89.6758 1131 1 0 -31.9463 46.3888 -176.25 + 14 128.649 1130 1 0 -32.0973 46.25 -176.109 + 14 166.635 741 1 1 -31.7211 45.5663 -174.85 + 14 69.575 742 1 1 -31.65 45.4562 -174.717 + 14 261.425 711 3 1 -37.8383 64.3343 -114.45 + 14 234.885 1221 3 0 -37.8201 64.3407 -115.85 + 14 199.511 713 2 1 -37.3113 64.5337 -144.45 + 14 129.877 719 1 1 -36.1073 64.0118 -174.45 + 14 95.4312 726 0 1 -34.8076 64.0405 -204.45 + 14 21.7207 1505 3 1 121.292 111.418 -114.85 + 14 100.041 709 2 1 -38.0896 64.0743 -144.45 + 14 119.81 1220 2 0 -38.0935 64.0952 -145.85 + 14 111.653 705 0 1 -38.8774 65.4062 -204.45 + 14 162.784 1227 0 0 -38.9316 65.4511 -205.85 + 14 2.28673 1224 1 0 -39.0065 64.912 -175.85 + 14 105.238 701 1 1 -39.6833 64.4612 -174.85 + 14 165.831 700 1 1 -39.85 64.332 -174.604 + 14 79.99 1238 3 0 -33.586 67.6951 -115.85 + 14 15.3073 1240 4 0 -17.6027 68.2422 -86.25 + 14 88.3884 1241 4 0 -17.5776 68.25 -86.2204 + 14 53.3379 378 4 0 9.03044 -104.46 -86.25 + 14 5.7504 377 4 0 9.05506 -104.55 -86.2471 +Number of digits in this event: 61 +Using G4ParticleGun... +Particle energy: 1.47258 LIN Particle: gamma Event: 15 -Number of tracker hits in this event: 7 - 15 216.679 226 1 1 -134.87 95.1331 -174.45 - 15 61.4934 1372 1 0 -134.385 94.6532 -175.85 - 15 83.1946 1371 1 0 -134.303 94.5495 -176.072 - 15 330.126 1370 1 0 -134.156 94.35 -176.225 - 15 72.7662 1369 1 0 -133.812 94.15 -176.073 - 15 78.4818 233 1 1 -133.353 93.2756 -174.85 - 15 91.2296 234 1 1 -133.35 93.2564 -174.831 -Number of digits in this event: 4 +Number of tracker hits in this event: 58 + 15 248.651 934 7 1 6.90495 16.0386 5.55 + 15 235.032 979 7 0 6.86142 15.9909 4.15 + 15 158.681 931 6 1 6.32616 14.648 -24.45 + 15 141.566 972 6 0 6.36734 14.6279 -25.85 + 15 309.383 934 5 1 6.89386 14.1538 -54.45 + 15 123.282 970 5 0 6.9373 14.1252 -55.85 + 15 142.779 938 4 1 7.71735 13.9313 -84.4502 + 15 310.286 969 4 0 7.81 13.8712 -85.8504 + 15 127.661 946 3 1 9.32593 12.4649 -114.45 + 15 215.612 961 3 0 9.38167 12.3859 -115.85 + 15 134.768 953 2 1 10.7345 10.6192 -144.45 + 15 151.696 952 2 0 10.8626 10.5879 -145.85 + 15 124.194 968 1 1 13.6645 9.93662 -174.45 + 15 114.953 949 1 0 13.8126 9.94596 -175.85 + 15 22.5354 982 0 1 16.6385 10.6055 -204.45 + 15 98.4143 983 0 1 16.65 10.6101 -204.545 + 15 106.316 953 0 0 16.8173 10.6836 -205.85 + 15 49.4271 1154 2 0 -26.1607 50.85 -146.076 + 15 111.877 770 2 1 -25.8799 50.7501 -144.85 + 15 139.245 771 2 1 -25.85 50.7581 -144.765 + 15 81.114 968 4 0 7.81032 13.8498 -85.9974 + 15 150.179 972 4 0 8.68615 14.5004 -85.8505 + 15 38.8539 973 4 0 8.89619 14.65 -86.164 + 15 15.6378 1479 4 0 62.412 115.95 -86.2078 + 15 20.2274 938 2 1 7.79796 11.6582 -144.45 + 15 116.57 939 2 1 7.85 11.7267 -144.466 + 15 116.57 940 2 1 8.05009 12.0957 -144.534 + 15 250.381 941 2 1 8.25 12.4683 -144.64 + 15 54.483 942 2 1 8.45 12.9103 -144.782 + 15 49.5485 977 2 0 9.38449 15.5463 -145.85 + 15 49.528 978 2 0 9.42272 15.65 -145.889 + 15 53.7538 979 2 0 9.48273 15.8502 -145.932 + 15 65.9811 980 2 0 9.5633 16.05 -145.968 + 15 51.4255 981 2 0 9.6572 16.2504 -145.976 + 15 192.009 982 2 0 9.73555 16.4501 -145.994 + 15 54.8209 983 2 0 9.77423 16.65 -146 + 15 111.288 984 2 0 9.79848 16.8504 -146.009 + 15 72.4892 985 2 0 9.77919 17.05 -146.07 + 15 40.0295 986 2 0 9.73675 17.2501 -146.171 + 15 25.6686 1428 2 0 79.9234 105.919 -146.25 + 15 231.266 1429 2 0 80.0482 105.95 -146.204 + 15 62.2063 1307 2 1 81.569 106.35 -144.85 + 15 220.826 1308 2 1 81.65 106.369 -144.766 + 15 44.0366 1309 2 1 81.8504 106.406 -144.471 + 15 123.556 934 6 1 6.94502 16.1177 -24.45 + 15 198.024 980 6 0 6.94386 16.1215 -25.85 + 15 149.752 980 5 0 6.93481 16.197 -55.85 + 15 133.414 934 4 1 6.93475 16.3214 -84.45 + 15 97.3505 981 4 0 6.9325 16.3302 -85.85 + 15 127.461 934 3 1 6.87917 16.5102 -114.45 + 15 122.552 982 3 0 6.88339 16.5159 -115.85 + 15 112.643 934 2 1 6.95511 16.6343 -144.45 + 15 119.829 934 1 1 6.88488 16.8441 -174.45 + 15 177.391 984 1 0 6.88589 16.8517 -175.85 + 15 324.477 934 0 1 6.94909 16.9628 -204.45 + 15 118.971 984 0 0 6.95387 16.9719 -205.85 + 15 37.8466 492 11 0 8.91969 -81.45 124.038 + 15 46.1686 92 1 0 -99.015 -161.55 -176.162 +Number of digits in this event: 28 Using G4ParticleGun... -Particle energy: 3.21501 LIN +Particle energy: 8.67858 LIN Particle: gamma Event: 16 -Number of tracker hits in this event: 2 - 16 173.172 920 2 0 57.0294 4.05 -146.224 - 16 42.6731 921 2 0 57.2491 4.25012 -145.973 -Number of digits in this event: 4 -Using G4ParticleGun... -Particle energy: 1.32774 LIN +Number of tracker hits in this event: 148 + 16 267.493 924 7 1 4.88004 -83.8022 5.55 + 16 232.001 481 7 0 4.87924 -83.8016 4.15 + 16 283.212 924 6 1 4.86655 -83.7908 -24.45 + 16 546.462 481 6 0 4.866 -83.7882 -25.85 + 16 479.393 924 5 1 4.85873 -83.7455 -54.45 + 16 397.27 481 5 0 4.86107 -83.7463 -55.85 + 16 115.28 924 4 1 4.91672 -83.7744 -84.45 + 16 256.354 481 4 0 4.91788 -83.7758 -85.85 + 16 151.422 924 3 1 4.94672 -83.7974 -114.45 + 16 116.378 481 3 0 4.94847 -83.7986 -115.85 + 16 514.736 924 2 1 4.98237 -83.829 -144.45 + 16 523.212 481 2 0 4.98631 -83.8266 -145.85 + 16 174.315 925 1 1 5.08077 -83.7841 -174.45 + 16 154.159 481 1 0 5.0862 -83.7805 -175.85 + 16 134.577 925 0 1 5.19358 -83.7014 -204.45 + 16 400.999 481 0 0 5.20194 -83.7011 -205.85 + 16 82.7324 482 0 0 -22.4564 -83.5601 -206.25 + 16 275.404 483 0 0 -22.6061 -83.45 -206.138 + 16 173.963 484 0 0 -22.7858 -83.2496 -205.981 + 16 122.374 787 0 1 -22.5293 -83.4821 -204.85 + 16 27.9686 788 0 1 -22.45 -83.4575 -204.827 + 16 33.1311 494 0 0 -22.9873 -81.1807 -205.85 + 16 29.1608 775 0 1 -24.907 -81.0276 -204.85 + 16 18.1594 473 0 0 -24.8149 -85.2611 -205.85 + 16 38.7549 768 0 1 -26.3002 -88.216 -204.85 + 16 67.4285 476 1 0 5.30853 -84.7868 -175.85 + 16 291.182 475 1 0 5.31739 -84.8501 -175.934 + 16 23.8643 356 0 0 -11.0756 -108.902 -206.25 + 16 91.8994 355 0 0 -11.1246 -108.95 -206.208 + 16 76.6651 354 0 0 -11.3192 -109.15 -206.046 + 16 39.815 353 0 0 -11.5103 -109.35 -205.893 + 16 56.4376 833 0 1 -13.3105 -111.457 -204.85 + 16 81.638 832 0 1 -13.45 -111.606 -204.774 + 16 137.207 831 0 1 -13.65 -111.836 -204.665 + 16 175.015 830 0 1 -13.8503 -112.032 -204.568 + 16 94.5417 829 0 1 -14.05 -112.236 -204.483 + 16 51.3511 273 1 0 -27.0208 -125.464 -176.25 + 16 151.276 272 1 0 -27.085 -125.55 -176.089 + 16 111.689 762 1 1 -27.5169 -126.06 -174.85 + 16 30.4354 761 1 1 -27.65 -126.182 -174.516 + 16 45.1394 760 1 1 -27.9019 -126.308 -174.45 + 16 129.339 759 1 1 -28.05 -126.278 -174.603 + 16 154.403 758 1 1 -28.25 -126.173 -174.763 + 16 101.554 274 1 0 -29.3613 -125.338 -175.85 + 16 132.22 275 1 0 -29.5441 -125.15 -176.07 + 16 38.8951 276 1 0 -29.747 -124.95 -176.15 + 16 269.71 479 1 0 -50.2996 -84.18 -176.25 + 16 253.513 647 1 1 -50.5931 -84.3956 -174.85 + 16 191.987 646 1 1 -50.65 -84.414 -174.687 + 16 22.4023 745 1 1 -30.8939 -123.549 -174.85 + 16 200.554 879 1 1 -4.09854 -82.0061 -174.45 + 16 0.971757 878 1 1 -4.25 -82.1419 -174.845 + 16 16.3963 488 1 0 -4.58232 -82.4393 -175.85 + 16 138.061 487 1 0 -4.59446 -82.45 -175.888 + 16 251.286 440 0 0 -15.1268 -92.0361 -205.851 + 16 128.852 439 0 0 -15.3466 -92.1501 -206.064 + 16 6.21766 1024 1 1 24.85 -67.5628 -174.718 + 16 291.395 480 2 0 4.90689 -83.8537 -145.85 + 16 232.763 921 1 1 4.43587 -84.2759 -174.45 + 16 114.513 478 1 0 4.40893 -84.3258 -175.85 + 16 36.3307 920 0 1 4.05248 -85.153 -204.45 + 16 64.7881 919 0 1 4.05 -85.1603 -204.589 + 16 202.016 474 0 0 4.0272 -85.2314 -205.85 + 16 7.83898 249 0 0 -42.3099 -130.167 -206.25 + 16 279.731 923 5 1 4.83076 -83.7415 -54.4509 + 16 123.503 480 5 0 4.6575 -83.8818 -55.85 + 16 120.98 906 4 1 1.39813 -87.201 -84.45 + 16 274.863 463 4 0 1.21621 -87.39 -85.85 + 16 133.563 885 3 1 -2.93437 -91.7919 -114.45 + 16 36.5991 884 3 1 -3.05014 -91.7651 -114.753 + 16 113.117 442 3 0 -3.46109 -91.6787 -115.85 + 16 132.176 834 2 1 -13.056 -88.8825 -144.45 + 16 131.664 458 2 0 -13.4436 -88.3078 -145.85 + 16 73.632 459 2 0 -13.483 -88.25 -145.988 + 16 31.8296 791 1 1 -21.818 -74.427 -174.45 + 16 168.846 790 1 1 -21.85 -74.3775 -174.544 + 16 126.627 531 1 0 -22.3101 -73.716 -175.85 + 16 79.6787 532 1 0 -22.3566 -73.65 -175.981 + 16 99.5732 741 0 1 -31.8228 -60.6649 -204.45 + 16 156.419 740 0 1 -31.85 -60.61 -204.621 + 16 0.783995 598 0 0 -32.0153 -60.2512 -205.851 + 16 101.409 599 0 0 -32.0159 -60.25 -205.855 + 16 105.185 922 5 1 4.61139 -82.9465 -54.4505 + 16 126.116 484 5 0 4.61856 -83.1148 -55.85 + 16 182.157 933 4 1 6.77288 -86.679 -84.4502 + 16 1.39327 459 4 0 7.05835 -88.245 -85.8501 + 16 82.575 458 4 0 7.05931 -88.2501 -85.8544 + 16 68.2225 457 4 0 7.10746 -88.4509 -86.0343 + 16 4.20596 456 4 0 7.15551 -88.65 -86.2372 + 16 171.351 970 3 1 14.099 -119.617 -114.45 + 16 72.3094 969 3 1 14.0494 -119.622 -114.48 + 16 67.0538 968 3 1 13.85 -119.626 -114.603 + 16 63.3086 967 3 1 13.65 -119.638 -114.725 + 16 6.35126 966 3 1 13.45 -119.64 -114.837 + 16 433.045 301 3 0 11.5584 -119.824 -115.85 + 16 168.272 300 3 0 10.2045 -119.95 -116.189 + 16 116.648 299 3 0 9.78635 -120.15 -116.106 + 16 112.534 298 3 0 9.50925 -120.35 -116.017 + 16 35.2959 297 3 0 9.16187 -120.55 -115.872 + 16 48.2585 913 3 1 2.77156 -125.842 -114.85 + 16 96.3254 912 3 1 2.65 -125.938 -114.829 + 16 119.161 911 3 1 2.45 -126.148 -114.808 + 16 107.757 910 3 1 2.25 -126.449 -114.783 + 16 103.802 909 3 1 2.05 -126.759 -114.775 + 16 75.0503 908 3 1 1.85 -126.99 -114.76 + 16 128.081 907 3 1 1.65 -127.259 -114.756 + 16 123.451 906 3 1 1.44997 -127.681 -114.717 + 16 128.182 905 3 1 1.25 -128.041 -114.763 + 16 108.526 904 3 1 1.04988 -128.296 -114.736 + 16 70.6726 903 3 1 0.85 -128.507 -114.714 + 16 77.4643 902 3 1 0.649949 -128.713 -114.657 + 16 74.9318 901 3 1 0.449899 -128.98 -114.538 + 16 29.6226 900 3 1 0.095784 -129.306 -114.45 + 16 27.721 251 3 0 -0.0826617 -129.916 -115.85 + 16 102.704 250 3 0 -0.0862024 -129.95 -115.927 + 16 161.164 923 6 1 4.82768 -83.7892 -24.45 + 16 139.157 922 4 1 4.64705 -83.662 -84.45 + 16 175.162 922 3 1 4.58273 -83.6276 -114.45 + 16 158.263 482 3 0 4.57899 -83.6244 -115.85 + 16 438.273 922 2 1 4.49402 -83.5576 -144.45 + 16 294.708 482 2 0 4.49045 -83.5549 -145.85 + 16 168.471 482 1 0 4.42532 -83.4954 -175.85 + 16 120.34 921 0 1 4.3275 -83.4429 -204.45 + 16 152.869 1257 3 1 71.45 -54.1251 -114.809 + 16 174.983 345 4 0 93.0999 -110.984 -86.25 + 16 164.56 1256 3 1 71.4498 -54.0887 -114.472 + 16 97.9641 327 9 0 44.0009 -114.562 63.75 + 16 108.224 544 4 0 24.7966 -71.1988 -86.25 + 16 76.6716 546 4 0 24.929 -70.85 -86.1109 + 16 78.8495 983 6 0 13.3055 16.6949 -26.25 + 16 82.9427 984 6 0 13.1534 16.85 -25.9002 + 16 148.566 963 6 1 12.6809 16.9023 -24.85 + 16 10.5722 962 6 1 12.65 16.8802 -24.7861 + 16 142.755 964 6 1 12.85 17.0043 -24.6346 + 16 25.3976 608 11 1 -58.2649 -35.6509 125.55 + 16 73.5869 609 11 1 -58.25 -35.6327 125.492 + 16 3.50813 940 1 1 8.24902 -90.3272 -174.45 + 16 199.52 941 1 1 8.25002 -90.3283 -174.473 + 16 136.139 448 1 0 8.30492 -90.3965 -175.85 + 16 121.254 945 0 1 9.08361 -91.7044 -204.45 + 16 25.2066 927 1 1 5.63994 -83.8768 -174.45 + 16 151.221 928 1 1 5.65003 -83.8759 -174.499 + 16 329.896 480 1 0 5.87616 -83.871 -175.85 + 16 53.2073 951 0 1 10.4221 -84.897 -204.45 + 16 58.4949 952 0 1 10.45 -84.9226 -204.656 + 16 155.857 825 1 0 -9.2646 -15.0153 -176.25 + 16 79.1133 826 1 0 -9.32141 -14.85 -176.155 + 16 148.483 1 12 0 136.721 -179.904 153.75 +Number of digits in this event: 75 +Using G4ParticleGun... +Particle energy: 4.02219 LIN Particle: gamma Event: 17 -Number of tracker hits in this event: 17 - 17 259.015 555 3 1 -68.8836 122.192 -114.45 - 17 357.947 1510 3 0 -68.8789 122.188 -115.85 - 17 133.254 556 2 1 -68.7742 122.086 -144.45 - 17 149.539 1509 2 0 -68.7573 122.091 -145.85 - 17 128.47 558 1 1 -68.3289 122.206 -174.45 - 17 113.562 1510 1 0 -68.2928 122.221 -175.85 - 17 116.927 562 0 1 -67.5128 122.516 -204.45 - 17 204.003 1511 0 0 -67.472 122.53 -205.85 - 17 105.853 557 2 1 -68.6195 122.498 -144.45 - 17 137.925 1511 2 0 -68.5949 122.501 -145.85 - 17 127.75 560 1 1 -68.0447 122.586 -174.45 - 17 157.802 1512 1 0 -68.028 122.605 -175.85 - 17 208.698 561 0 1 -67.6766 123.014 -204.45 - 17 329.67 1514 0 0 -67.6625 123.058 -205.85 - 17 13.5357 1405 0 0 -171.205 101.23 -206.25 - 17 53.7458 1340 0 0 -178.631 88.2017 -206.25 - 17 187.824 560 0 1 -67.85 122.995 -204.556 -Number of digits in this event: 15 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 5.85663 LIN +Particle energy: 4.89443 LIN Particle: gamma Event: 18 -Number of tracker hits in this event: 17 - 18 269.176 790 2 1 -22.0109 17.2971 -144.45 - 18 251.797 986 2 0 -22.0104 17.2957 -145.85 - 18 138.046 790 1 1 -22.0002 17.2676 -174.45 - 18 289.081 986 1 0 -21.9998 17.2651 -175.85 - 18 116.981 790 0 1 -21.9815 17.2125 -204.45 - 18 127.302 985 0 0 -21.9796 17.2091 -205.85 - 18 20.5644 1028 1 1 25.65 -18.9872 -174.735 - 18 38.9186 1029 1 1 25.85 -19.0227 -174.546 - 18 35.5498 1038 4 1 27.65 -70.0921 -84.7965 - 18 273.948 1037 4 1 27.6497 -70.2146 -84.4767 - 18 380.971 545 4 0 27.483 -70.8711 -85.85 - 18 91.8933 546 4 0 27.5252 -70.85 -85.9954 - 18 82.3412 176 7 0 114.161 -144.75 3.77299 - 18 137.542 177 7 0 114.259 -144.75 3.92612 - 18 99.593 789 1 1 -22.0745 17.3582 -174.45 - 18 108.458 789 0 1 -22.1996 17.296 -204.45 - 18 105.866 986 0 0 -22.2024 17.2867 -205.85 -Number of digits in this event: 9 +Number of tracker hits in this event: 74 + 18 303.276 1324 7 1 85.0116 -62.9752 5.55 + 18 268.209 585 7 0 85.0117 -62.976 4.15 + 18 118.089 1324 6 1 85.0097 -62.9935 -24.45 + 18 115.091 585 6 0 85.0089 -62.9937 -25.85 + 18 438.949 1324 5 1 85.0089 -62.9957 -54.45 + 18 367.394 585 5 0 85.0103 -62.997 -55.85 + 18 107.094 1324 4 1 85.0363 -63.0218 -84.45 + 18 120.31 585 4 0 85.0355 -63.0205 -85.85 + 18 130.855 1324 3 1 85.0258 -62.9951 -114.45 + 18 99.0842 584 3 0 85.0596 -63.0581 -115.85 + 18 10.8784 1332 2 1 86.4719 -61.9646 -144.45 + 18 169.769 1331 2 1 86.45 -61.9594 -144.487 + 18 11.2533 1330 2 1 86.25 -61.9203 -144.809 + 18 98.6203 591 2 0 85.6257 -61.8151 -145.85 + 18 53.0842 1248 1 1 69.7414 -58.2563 -174.45 + 18 80.5213 1247 1 1 69.65 -58.1869 -174.658 + 18 84.0771 611 1 0 69.1119 -57.7605 -175.85 + 18 49.2454 612 1 0 68.9714 -57.65 -176.125 + 18 37.082 1168 0 1 53.7199 -43.4147 -204.45 + 18 68.5832 1167 0 1 53.6499 -43.3922 -204.601 + 18 145.787 684 0 0 53.0827 -43.2404 -205.85 + 18 137.627 604 1 0 69.201 -59.1992 -175.85 + 18 291.019 1325 3 1 85.05 -62.9601 -114.743 + 18 25.588 339 1 0 78.3242 -112.231 -176.25 + 18 58.5232 344 9 0 -66.2091 -111.154 63.75 + 18 74.613 345 9 0 -66.1864 -111.15 63.7933 + 18 124.677 1326 4 1 85.2984 -63.3011 -84.45 + 18 276.184 583 4 0 85.3134 -63.3313 -85.85 + 18 237.403 1327 3 1 85.6038 -64.209 -114.451 + 18 135.872 579 3 0 85.6294 -64.1984 -115.85 + 18 116.638 1333 2 1 86.8429 -64.5831 -144.45 + 18 117.412 577 2 0 86.8566 -64.6219 -145.85 + 18 221.963 1334 1 1 87.0175 -66.4349 -174.45 + 18 115.757 567 1 0 87.0903 -66.531 -175.85 + 18 160.256 1346 0 1 89.3562 -68.1359 -204.45 + 18 116.125 558 0 0 89.4419 -68.3037 -205.851 + 18 90.0802 639 2 0 109.588 -52.1148 -146.25 + 18 121.392 1323 4 1 84.7874 -63.2595 -84.45 + 18 177.136 1321 3 1 84.3222 -63.3437 -114.45 + 18 148.702 583 3 0 84.3251 -63.3415 -115.85 + 18 136.365 1321 2 1 84.3861 -63.3433 -144.45 + 18 96.6785 583 2 0 84.3828 -63.3173 -145.85 + 18 69.798 1321 1 1 84.2549 -62.7021 -174.45 + 18 32.3604 1320 1 1 84.25 -62.6868 -174.724 + 18 159.223 587 1 0 84.2339 -62.6279 -175.85 + 18 127.886 1318 0 1 83.6949 -61.0876 -204.45 + 18 170.843 595 0 0 83.7031 -60.9732 -205.85 + 18 106.973 359 2 0 148.619 -108.235 -146.25 + 18 55.1585 614 6 0 44.7723 -57.25 -25.9804 + 18 160.315 596 0 0 83.6395 -60.85 -206.217 + 18 96.0228 748 0 0 34.7772 -30.3996 -206.25 + 18 139.418 1323 5 1 84.85 -63.0291 -54.6604 + 18 179.426 1322 5 1 84.65 -62.8649 -54.4553 + 18 14.0698 1321 5 1 84.45 -62.5699 -54.8229 + 18 45.0805 593 5 0 82.667 -61.4409 -55.85 + 18 84.9565 1308 5 1 81.713 -59.4254 -54.85 + 18 13.4565 610 5 0 81.03 -57.8775 -55.8501 + 18 270.864 611 5 0 81.0167 -57.85 -55.8543 + 18 154.294 1325 6 1 85.1044 -62.6475 -24.45 + 18 185.823 587 6 0 85.1092 -62.602 -25.85 + 18 113.411 1325 5 1 85.1914 -61.7284 -54.45 + 18 172.897 591 5 0 85.1924 -61.721 -55.85 + 18 105.253 1325 4 1 85.2061 -61.5721 -84.45 + 18 121.859 592 4 0 85.2246 -61.5655 -85.85 + 18 114.848 593 3 0 85.5173 -61.4447 -115.85 + 18 76.8618 1327 2 1 85.4551 -61.3066 -144.45 + 18 17.7188 1326 2 1 85.45 -61.3019 -144.77 + 18 177.941 593 2 0 85.4326 -61.2843 -145.85 + 18 100.599 1324 1 1 84.9772 -60.7254 -174.45 + 18 391.031 596 1 0 84.9316 -60.6997 -175.85 + 18 119.963 1319 0 1 83.9008 -60.1909 -204.45 + 18 224.536 599 0 0 83.8572 -60.142 -205.85 + 18 309.841 597 1 0 84.897 -60.65 -176.14 + 18 150.252 592 3 0 85.2366 -61.6074 -115.85 +Number of digits in this event: 39 Using G4ParticleGun... -Particle energy: 7.05225 LIN +Particle energy: 5.78396 LIN Particle: gamma Event: 19 Number of tracker hits in this event: 0 Number of digits in this event: 1 Using G4ParticleGun... -Particle energy: 2.77864 LIN +Particle energy: 3.75289 LIN Particle: gamma Event: 20 -Number of tracker hits in this event: 3 - 20 191.746 668 3 1 -46.2691 60.9454 -114.85 - 20 265.784 906 9 1 1.25 -1.35992 65.2138 - 20 137.749 907 9 1 1.45017 -1.2793 65.4746 -Number of digits in this event: 4 +Number of tracker hits in this event: 54 + 20 222.058 627 8 1 -54.4592 -119.82 35.55 + 20 258.126 301 8 0 -54.458 -119.822 34.15 + 20 107.933 628 7 1 -54.4365 -119.856 5.55 + 20 116.305 301 7 0 -54.4331 -119.856 4.15 + 20 244.054 628 6 1 -54.3637 -119.852 -24.45 + 20 115.098 301 6 0 -54.363 -119.851 -25.85 + 20 110.531 628 5 1 -54.3459 -119.832 -54.45 + 20 131.127 301 5 0 -54.345 -119.833 -55.85 + 20 107.627 628 4 1 -54.3299 -119.841 -84.45 + 20 172.693 301 4 0 -54.3284 -119.839 -85.85 + 20 122.831 628 3 1 -54.3043 -119.81 -114.45 + 20 136.95 301 3 0 -54.3029 -119.806 -115.85 + 20 176.236 628 2 1 -54.2813 -119.736 -144.45 + 20 104.419 302 2 0 -54.2809 -119.733 -145.85 + 20 314.944 628 1 1 -54.2804 -119.672 -174.45 + 20 267.769 302 1 0 -54.2812 -119.669 -175.85 + 20 112.439 628 0 1 -54.2943 -119.609 -204.45 + 20 127.372 302 0 0 -54.2938 -119.606 -205.85 + 20 56.6063 1284 13 0 20.0695 76.8927 183.75 + 20 61.096 1004 13 1 20.9496 76.8116 185.15 + 20 181.52 1005 13 1 21.05 76.8565 185.208 + 20 78.7897 1226 11 0 48.4332 65.3364 124.15 + 20 157.211 627 1 1 -54.45 -119.654 -174.681 + 20 271.643 303 1 0 -55.0938 -119.505 -175.85 + 20 145.318 567 0 1 -66.6144 -111.647 -204.45 + 20 49.6551 568 0 1 -66.45 -111.335 -204.755 + 20 53.4743 350 0 0 -66.0155 -110.082 -205.85 + 20 61.605 351 0 0 -65.963 -109.95 -205.946 + 20 46.6343 352 0 0 -65.9085 -109.75 -206.059 + 20 62.6119 353 0 0 -65.8686 -109.55 -206.135 + 20 24.283 354 0 0 -65.854 -109.35 -206.213 + 20 23.3109 617 0 1 -56.6353 -120.931 -204.451 + 20 90.8385 616 0 1 -56.65 -120.933 -204.549 + 20 118.229 295 0 0 -56.8403 -120.958 -205.85 + 20 9.5092 722 1 1 -35.5392 -148.873 -174.45 + 20 151.436 627 7 1 -54.4678 -119.75 5.55 + 20 151.621 302 7 0 -54.4566 -119.734 4.15 + 20 13.6862 303 6 0 -54.2652 -119.351 -25.85 + 20 133.489 304 6 0 -54.2648 -119.35 -25.9192 + 20 121.34 630 5 1 -54.0067 -118.806 -54.45 + 20 134.837 307 5 0 -53.9891 -118.739 -55.85 + 20 154.309 632 4 1 -53.5754 -117.326 -84.45 + 20 290.189 314 4 0 -53.5853 -117.214 -85.85 + 20 118.023 631 3 1 -53.8388 -114.848 -114.45 + 20 114.728 327 3 0 -53.8453 -114.722 -115.85 + 20 104.334 630 2 1 -53.9404 -112.203 -144.45 + 20 302.41 340 2 0 -53.9642 -112.092 -145.85 + 20 144.705 350 1 0 -54.5764 -109.991 -175.85 + 20 40.9081 626 0 1 -54.8472 -108.305 -204.45 + 20 61.4748 625 0 1 -54.85 -108.295 -204.615 + 20 115.6 359 0 0 -54.8619 -108.22 -205.85 + 20 39.0302 339 2 0 -53.9087 -112.15 -146.031 + 20 65.9906 776 8 1 -24.767 -125.297 35.15 + 20 146.002 777 8 1 -24.65 -125.305 35.5374 +Number of digits in this event: 27 Using G4ParticleGun... -Particle energy: 2.85158 LIN +Particle energy: 7.13677 LIN Particle: gamma Event: 21 -Number of tracker hits in this event: 2 - 21 234.386 448 0 1 -90.4127 -57.0634 -204.45 - 21 240.693 614 0 0 -90.4131 -57.0631 -205.85 -Number of digits in this event: 3 +Number of tracker hits in this event: 5 + 21 41.6237 1191 11 1 58.45 168.973 125.2 + 21 285.728 315 12 0 -48.5049 -117.077 153.75 + 21 77.432 538 10 1 -72.2963 -86.8151 95.15 + 21 14.4248 1403 9 0 -28.4889 100.95 64.0937 + 21 193.41 537 10 1 -72.45 -86.8686 95.4427 +Number of digits in this event: 4 Using G4ParticleGun... -Particle energy: 8.16354 LIN +Particle energy: 3.27138 LIN Particle: gamma Event: 22 -Number of tracker hits in this event: 6 - 22 231.986 842 0 1 -11.5695 -45.1524 -204.45 - 22 245.803 674 0 0 -11.5682 -45.1539 -205.85 - 22 21.4387 1122 1 1 44.5954 127.236 -174.85 - 22 216.712 700 0 0 -1.14387 -39.9221 -206.249 - 22 415.975 699 0 0 -1.16424 -40.05 -206.164 - 22 168.864 698 0 0 -1.06914 -40.25 -206.207 -Number of digits in this event: 7 +Number of tracker hits in this event: 27 + 22 471.447 908 3 1 1.66566 -95.4881 -114.45 + 22 587.983 423 3 0 1.66501 -95.4899 -115.85 + 22 533.934 908 2 1 1.66672 -95.531 -144.45 + 22 229.68 423 2 0 1.66796 -95.5269 -145.85 + 22 121.042 908 1 1 1.68625 -95.4346 -174.45 + 22 158.442 423 1 0 1.68987 -95.4337 -175.85 + 22 153.734 908 0 1 1.7776 -95.4057 -204.45 + 22 118.057 423 0 0 1.78234 -95.4073 -205.85 + 22 227.71 907 1 1 1.65 -95.3874 -174.786 + 22 59.1764 428 1 0 1.56374 -94.4028 -175.85 + 22 103.124 429 1 0 1.52246 -94.35 -175.922 + 22 98.0952 903 1 1 0.650754 -94.8685 -174.85 + 22 165.97 902 1 1 0.65 -94.8692 -174.849 + 22 7.89071 427 2 0 2.13147 -94.5752 -145.85 + 22 186.069 428 2 0 2.14608 -94.55 -145.882 + 22 68.1506 429 2 0 2.35789 -94.35 -146.076 + 22 83.9205 917 2 1 3.46789 -93.7851 -144.85 + 22 412.283 918 2 1 3.6501 -93.681 -144.604 + 22 95.3228 919 2 1 3.85006 -93.5455 -144.525 + 22 90.3312 421 1 0 1.59754 -95.8116 -175.85 + 22 120.228 906 0 1 1.4363 -95.9078 -204.45 + 22 219.097 421 0 0 1.43791 -95.9151 -205.85 + 22 13.1272 914 2 1 2.85 -96.5719 -144.641 + 22 160.704 459 0 0 76.7458 -88.2036 -206.25 + 22 422.874 1289 0 1 77.9103 -88.3148 -204.85 + 22 239.153 1290 0 1 78.0501 -88.3383 -204.715 + 22 107.889 1291 0 1 78.25 -88.3465 -204.532 +Number of digits in this event: 18 Using G4ParticleGun... -Particle energy: 2.77105 LIN +Particle energy: 8.17197 LIN Particle: gamma Event: 23 -Number of tracker hits in this event: 74 - 23 249.695 1004 11 1 20.9509 -20.9962 125.55 - 23 336.967 795 11 0 20.9514 -20.9958 124.15 - 23 340.088 1004 10 1 20.9505 -20.9986 95.55 - 23 218.331 795 10 0 20.9518 -20.999 94.15 - 23 284.259 1004 9 1 20.9674 -21.0135 65.55 - 23 219.652 795 9 0 20.9711 -21.0162 64.15 - 23 109.974 1004 8 1 21.0417 -21.0535 35.55 - 23 139.327 794 8 0 21.046 -21.0536 34.15 - 23 124.238 1005 7 1 21.1121 -21.0774 5.55 - 23 124.629 794 7 0 21.1154 -21.0731 4.15 - 23 169.154 1005 6 1 21.1947 -20.9837 -24.45 - 23 121.66 795 6 0 21.2033 -20.9718 -25.85 - 23 131.197 1006 5 1 21.362 -20.7389 -54.45 - 23 161.498 796 5 0 21.3698 -20.7278 -55.85 - 23 128.391 1007 4 1 21.5293 -20.4919 -84.45 - 23 115.284 797 4 0 21.5372 -20.4812 -85.85 - 23 171.92 1008 3 1 21.6876 -20.2546 -114.45 - 23 131.837 799 3 0 21.7031 -20.2421 -115.85 - 23 119.074 1009 2 1 22.0208 -19.9946 -144.45 - 23 150.29 800 2 0 22.0412 -19.9792 -145.85 - 23 132.217 1012 1 1 22.4511 -19.6811 -174.45 - 23 131.644 801 1 0 22.4689 -19.6677 -175.85 - 23 323.47 1013 0 1 22.8114 -19.4094 -204.45 - 23 91.4618 803 0 0 22.8271 -19.3929 -205.85 - 23 673.247 1089 1 0 28.1678 37.9891 -176.25 - 23 325.557 1090 1 0 28.8261 38.05 -175.93 - 23 74.0696 1012 0 1 22.65 -19.3627 -204.756 - 23 241.66 1011 0 1 22.45 -19.2411 -204.769 - 23 106.103 1010 0 1 22.25 -19.2342 -204.711 - 23 128.636 1006 6 1 21.25 -20.9281 -24.5788 - 23 8.3898 113 1 0 133.381 -157.425 -176.25 - 23 17.9608 387 1 0 108.77 -102.696 -176.25 - 23 299.142 1003 8 1 20.7555 -20.8571 35.55 - 23 98.6408 795 8 0 20.7502 -20.8514 34.15 - 23 11.2933 796 8 0 20.7489 -20.85 33.7907 - 23 114.727 1002 7 1 20.6481 -20.7441 5.55 - 23 99.723 796 7 0 20.6404 -20.7344 4.15 - 23 108.26 1002 6 1 20.48 -20.5116 -24.45 - 23 145.539 797 6 0 20.478 -20.498 -25.85 - 23 138.822 1001 5 1 20.4472 -20.2483 -54.45 - 23 110.064 799 5 0 20.4434 -20.2337 -55.85 - 23 112.41 1001 4 1 20.3557 -19.9429 -84.45 - 23 163.102 801 4 0 20.2354 -19.8301 -85.8501 - 23 105.951 987 3 1 17.4806 -17.6048 -114.45 - 23 77.3295 812 3 0 17.4584 -17.4741 -115.85 - 23 122.233 813 3 0 17.4537 -17.45 -116.104 - 23 111.35 983 2 1 16.7775 -14.8425 -144.45 - 23 130.631 825 2 0 16.6714 -14.913 -145.85 - 23 197.261 971 1 1 14.3422 -15.9159 -174.45 - 23 187.043 820 1 0 14.1865 -16.0095 -175.85 - 23 212.432 953 0 1 10.841 -17.7793 -204.45 - 23 138.686 814 0 0 10.2454 -17.248 -205.85 - 23 197.087 800 4 0 20.2342 -19.85 -86.1109 - 23 241.307 1000 3 1 20.2094 -19.5949 -114.45 - 23 274.951 802 3 0 20.2032 -19.5791 -115.85 - 23 125.995 999 2 1 20.0053 -19.2865 -144.45 - 23 101.116 803 2 0 20.0091 -19.2628 -145.85 - 23 265.788 1000 1 1 20.0776 -18.8103 -174.45 - 23 121.936 806 1 0 20.0838 -18.7933 -175.85 - 23 136.955 1002 0 1 20.6143 -18.5495 -204.45 - 23 141.828 807 0 0 20.667 -18.5336 -205.85 - 23 9.24495 752 3 0 -140.319 -29.65 -116.026 - 23 148.354 1001 0 1 20.45 -18.7046 -204.473 - 23 172.619 1000 2 1 20.1828 -19.1621 -144.45 - 23 102.464 804 2 0 20.183 -19.155 -145.85 - 23 262.351 805 1 0 20.2068 -19.0415 -175.85 - 23 268.779 804 0 0 20.2846 -19.2422 -205.85 - 23 147.049 143 3 1 -151.482 75.23 -114.45 - 23 100.781 142 3 1 -151.55 75.2976 -114.528 - 23 110.252 144 3 1 -151.35 75.5559 -114.622 - 23 139.65 145 3 1 -151.15 75.5404 -114.67 - 23 27.2249 1003 10 1 20.85 -20.9385 95.2121 - 23 21.863 799 10 0 19.5466 -20.0813 94.15 - 23 245.314 800 10 0 19.5083 -20.05 94.1152 -Number of digits in this event: 51 +Number of tracker hits in this event: 0 +Number of digits in this event: 1 Using G4ParticleGun... -Particle energy: 1.47226 LIN +Particle energy: 1.42266 LIN Particle: gamma Event: 24 -Number of tracker hits in this event: 37 - 24 258.587 1023 7 1 24.7437 71.5674 5.55 - 24 237.371 1257 7 0 24.7269 71.5711 4.15 - 24 119.608 1020 6 1 24.2434 71.6821 -24.45 - 24 440.975 1257 6 0 24.2225 71.6478 -25.85 - 24 122.356 1018 5 1 23.8145 70.6476 -54.45 - 24 127.938 1252 5 0 23.8068 70.6103 -55.85 - 24 128.204 1014 4 1 23.0405 69.9914 -84.45 - 24 126.083 1250 4 0 22.9783 70.0549 -85.85 - 24 113.606 1009 3 1 21.9045 71.4468 -114.45 - 24 133.91 1257 3 0 21.8426 71.4848 -115.85 - 24 157.577 1002 2 1 20.5825 72.1257 -144.45 - 24 186.276 1260 2 0 20.5246 72.1372 -145.85 - 24 86.0521 997 1 1 19.4955 71.8334 -174.45 - 24 8.54897 996 1 1 19.45 71.8375 -174.81 - 24 239.033 1259 1 0 19.3013 71.8893 -175.85 - 24 48.736 972 0 1 14.5338 73.8064 -204.45 - 24 86.7969 971 0 1 14.45 73.868 -204.617 - 24 133.809 1271 0 0 13.8793 74.2957 -205.85 - 24 221.174 1171 0 0 -35.1711 54.45 -206.159 - 24 0.459549 1023 6 1 24.85 71.5835 -24.45 - 24 188.866 1024 6 1 24.85 71.5835 -24.4521 - 24 149.318 1024 5 1 24.9882 71.5951 -54.45 - 24 113.558 1257 5 0 24.9962 71.59 -55.85 - 24 168.218 1025 4 1 25.171 71.4864 -84.45 - 24 103.663 1257 4 0 25.1849 71.4782 -85.85 - 24 48.3177 1026 3 1 25.4488 71.3199 -114.45 - 24 81.9832 1027 3 1 25.45 71.3191 -114.583 - 24 123.011 1256 3 0 25.4621 71.312 -115.85 - 24 120.759 1028 2 1 25.7235 71.1416 -144.45 - 24 107.918 1255 2 0 25.727 71.1316 -145.85 - 24 110.825 1028 1 1 25.7578 70.955 -174.45 - 24 106.108 1254 1 0 25.7575 70.9515 -175.85 - 24 128.057 1028 0 1 25.7148 70.9565 -204.45 - 24 112.119 1254 0 0 25.7153 70.9669 -205.85 - 24 34.8219 1190 10 1 58.05 -95.2772 95.3494 - 24 6.99565 1742 9 1 168.689 61.2355 65.15 - 24 320.708 1092 1 1 38.4908 -3.61293 -174.85 -Number of digits in this event: 22 +Number of tracker hits in this event: 1 + 24 59.483 573 0 0 -124.292 -65.25 -206.037 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 9.52949 LIN +Particle energy: 2.51385 LIN Particle: gamma Event: 25 -Number of tracker hits in this event: 3 - 25 212.482 373 0 1 -105.35 27.8183 -204.787 - 25 160.166 374 0 1 -105.35 27.4922 -204.46 - 25 123.045 204 2 1 -139.15 -171.75 -144.778 -Number of digits in this event: 4 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 1.46801 LIN +Particle energy: 5.68092 LIN Particle: gamma Event: 26 -Number of tracker hits in this event: 32 - 26 279.189 506 7 1 -78.7378 -31.7086 5.55 - 26 235.182 741 7 0 -78.7315 -31.7111 4.15 - 26 91.0985 507 6 1 -78.6137 -31.7793 -24.45 - 26 122.79 741 6 0 -78.5959 -31.7781 -25.85 - 26 105.294 509 5 1 -78.2426 -31.7182 -54.45 - 26 284.182 741 5 0 -78.2254 -31.7099 -55.85 - 26 121.799 510 4 1 -77.8724 -31.532 -84.45 - 26 106.73 742 4 0 -77.8614 -31.5178 -85.85 - 26 129.521 512 3 1 -77.565 -31.1585 -114.45 - 26 104.111 744 3 0 -77.5516 -31.1372 -115.85 - 26 129.222 513 2 1 -77.2951 -30.6891 -144.45 - 26 119.818 746 2 0 -77.2808 -30.6609 -145.85 - 26 135.044 515 1 1 -77.0093 -30.08 -174.45 - 26 84.2359 749 1 0 -76.9896 -30.055 -175.85 - 26 43.1159 750 1 0 -76.9856 -30.05 -176.126 - 26 113.523 517 0 1 -76.5924 -29.5079 -204.45 - 26 116.439 752 0 0 -76.5803 -29.4663 -205.85 - 26 169.913 506 6 1 -78.7318 -31.5266 -24.45 - 26 242.638 742 6 0 -78.7431 -31.5323 -25.85 - 26 223.896 505 5 1 -78.9942 -31.655 -54.45 - 26 571.412 503 4 1 -79.3316 -32.124 -84.45 - 26 172.724 739 4 0 -79.336 -32.1604 -85.85 - 26 154.231 503 3 1 -79.4098 -32.9822 -114.45 - 26 121.099 735 3 0 -79.4527 -32.9782 -115.85 - 26 127.226 498 2 1 -80.3191 -32.8684 -144.45 - 26 127.998 735 2 0 -80.3848 -32.8538 -145.85 - 26 5.62594 736 2 0 -80.4023 -32.85 -146.215 - 26 110.359 491 1 1 -81.7468 -32.6222 -174.45 - 26 116.202 737 1 0 -81.8451 -32.6134 -175.85 - 26 151.561 480 0 1 -83.9808 -32.5681 -204.45 - 26 148.744 737 0 0 -84.0638 -32.5835 -205.85 - 26 57.3425 504 4 1 -79.25 -31.9807 -84.7526 -Number of digits in this event: 20 +Number of tracker hits in this event: 19 + 26 548.688 1154 0 1 50.9785 -67.2411 -204.45 + 26 224.407 564 0 0 50.9794 -67.2402 -205.85 + 26 129.652 1405 2 1 101.15 -17.8096 -144.81 + 26 44.0236 676 1 0 2.00922 -44.8226 -176.25 + 26 85.4523 675 1 0 1.92917 -44.85 -176.147 + 26 67.3771 908 1 1 1.8229 -44.6976 -174.85 + 26 47.8117 909 1 1 1.85 -44.6242 -174.564 + 26 1.03081 116 3 0 54.4534 -156.873 -116.25 + 26 151.606 115 3 0 54.4761 -156.95 -116.081 + 26 277.29 114 3 0 54.6313 -157.15 -115.861 + 26 28.1779 1174 3 1 54.9799 -156.722 -114.85 + 26 136.075 105 3 0 55.8913 -159.023 -115.85 + 26 17.4928 856 5 0 8.03628 -8.69644 -56.25 + 26 312.082 857 5 0 8.03107 -8.64992 -56.1214 + 26 66.5504 943 5 1 8.75693 -8.40499 -54.8494 + 26 145.265 944 5 1 8.85 -8.34565 -54.6916 + 26 102.073 945 5 1 9.05 -8.24742 -54.5017 + 26 247.124 946 5 1 9.25 -8.14425 -54.5201 + 26 277.442 1009 11 0 83.2426 22.0094 123.75 +Number of digits in this event: 11 Using G4ParticleGun... -Particle energy: 5.199 LIN +Particle energy: 2.03024 LIN Particle: gamma Event: 27 Number of tracker hits in this event: 0 -Number of digits in this event: 1 +Number of digits in this event: 3 Using G4ParticleGun... -Particle energy: 7.97096 LIN +Particle energy: 3.74335 LIN Particle: gamma Event: 28 -Number of tracker hits in this event: 79 - 28 258.705 766 8 1 -26.6909 5.11374 35.55 - 28 241.432 925 8 0 -26.6898 5.11323 34.15 - 28 117.565 766 7 1 -26.6627 5.09804 5.55 - 28 346.857 925 7 0 -26.661 5.0972 4.15 - 28 304.067 767 6 1 -26.6193 5.15629 -24.45 - 28 214.128 925 6 0 -26.6163 5.15858 -25.85 - 28 130.567 767 5 1 -26.5563 5.20171 -54.45 - 28 182.98 925 5 0 -26.5549 5.20423 -55.85 - 28 503.578 767 4 1 -26.5306 5.25778 -84.45 - 28 110.631 926 4 0 -26.5303 5.26054 -85.85 - 28 102.232 767 3 1 -26.5339 5.30737 -114.45 - 28 120.2 926 3 0 -26.5345 5.3083 -115.85 - 28 101.696 767 2 1 -26.5482 5.32521 -144.45 - 28 129.199 926 2 0 -26.546 5.32558 -145.85 - 28 543.042 767 1 1 -26.5064 5.33753 -174.45 - 28 483.567 926 1 0 -26.5042 5.33731 -175.85 - 28 241.85 767 0 1 -26.4595 5.33879 -204.45 - 28 135.524 926 0 0 -26.4573 5.33841 -205.85 - 28 223.342 924 4 0 -26.5351 5.04045 -85.85 - 28 63.9991 771 3 1 -25.6643 5.95347 -114.45 - 28 119.052 766 3 1 -26.7255 4.0214 -114.45 - 28 77.1388 919 3 0 -26.5641 3.87907 -115.85 - 28 115.558 918 3 0 -26.5342 3.85 -116.128 - 28 149.938 780 2 1 -24.016 0.67714 -144.45 - 28 128.238 902 2 0 -23.7994 0.504562 -145.85 - 28 2.82883 901 2 0 -23.7425 0.45 -146.236 - 28 98.6482 801 1 1 -19.7238 -4.01956 -174.45 - 28 182.413 876 1 0 -19.948 -4.65741 -175.85 - 28 124.647 777 0 1 -24.594 -16.7599 -204.45 - 28 1.69524 812 0 0 -24.7576 -17.6458 -205.85 - 28 117.889 811 0 0 -24.7585 -17.6508 -205.858 - 28 24.9328 810 0 0 -24.7996 -17.85 -206.166 - 28 92.6095 766 6 1 -26.7676 5.05301 -24.45 - 28 96.8174 765 6 1 -26.85 5.22601 -24.6453 - 28 83.0297 928 6 0 -27.0746 5.81023 -25.85 - 28 92.4494 929 6 0 -27.0838 5.85 -25.9339 - 28 1.4973 705 5 1 -39.0456 26.454 -54.45 - 28 69.0243 704 5 1 -39.05 26.4519 -54.4541 - 28 44.6748 703 5 1 -39.25 26.3498 -54.6221 - 28 65.3006 702 5 1 -39.45 26.2783 -54.67 - 28 74.6353 701 5 1 -39.6513 26.2237 -54.7209 - 28 53.3812 1029 5 0 -40.8069 26.0356 -55.85 - 28 115.436 1030 5 0 -40.9117 26.05 -56.0105 - 28 31.577 1389 5 0 -88.2555 98.0679 -56.25 - 28 60.6834 1390 5 0 -88.21 98.1501 -56.1654 - 28 48.3282 1391 5 0 -88.2009 98.35 -56.0291 - 28 45.9558 1392 5 0 -88.1864 98.5503 -55.9293 - 28 132.471 463 5 1 -87.4477 100.304 -54.85 - 28 21.1918 462 5 1 -87.45 100.565 -54.6441 - 28 66.6616 768 6 1 -26.45 5.0783 -24.5271 - 28 64.0497 769 6 1 -26.25 5.05422 -24.5662 - 28 61.8361 770 6 1 -26.05 4.99331 -24.6981 - 28 46.2695 919 6 0 -25.0854 3.91622 -25.8503 - 28 168.189 918 6 0 -25.0252 3.85 -25.9226 - 28 64.9294 917 6 0 -24.9147 3.65 -26.1211 - 28 227.924 766 2 1 -26.7074 5.10971 -144.45 - 28 451.59 925 2 0 -26.7038 5.12543 -145.85 - 28 325.62 927 0 0 -26.4985 5.53934 -205.85 - 28 127.183 927 1 0 -26.7048 5.45 -175.933 - 28 309.279 768 1 1 -26.45 5.272 -174.69 - 28 130.624 765 1 1 -26.8745 5.73059 -174.45 - 28 113.36 928 1 0 -26.8293 5.75428 -175.85 - 28 122.092 770 0 1 -25.94 6.26989 -204.45 - 28 135.745 931 0 0 -25.875 6.32735 -205.85 - 28 104.016 767 7 1 -26.642 5.23877 5.55 - 28 156.574 926 6 0 -26.5518 5.38908 -25.85 - 28 191.131 766 5 1 -26.7215 5.5505 -54.45 - 28 123.682 927 5 0 -26.7103 5.57985 -55.85 - 28 26.1053 768 4 1 -26.45 6.19998 -84.7694 - 28 83.1846 930 4 0 -26.4371 6.2394 -85.85 - 28 26.8256 931 4 0 -26.4337 6.25 -86.1409 - 28 142.087 769 3 1 -26.0854 7.25229 -114.45 - 28 129.899 936 3 0 -26.0389 7.2927 -115.85 - 28 126.224 774 2 1 -25.0939 8.21081 -144.45 - 28 138.881 941 2 0 -25.0382 8.25401 -145.85 - 28 104.804 780 1 1 -23.8886 9.12643 -174.45 - 28 109.585 945 1 0 -23.8242 9.16517 -175.85 - 28 132.687 787 0 1 -22.4763 9.94887 -204.45 - 28 122.453 949 0 0 -22.4321 9.97306 -205.85 -Number of digits in this event: 40 +Number of tracker hits in this event: 71 + 28 258.498 1183 10 1 56.7547 48.8702 95.55 + 28 279.667 1144 10 0 56.7564 48.8698 94.15 + 28 290.985 1183 9 1 56.8181 48.8859 65.55 + 28 332.06 1144 9 0 56.8185 48.8787 64.15 + 28 119.981 1184 8 1 56.8609 48.728 35.55 + 28 126.492 1143 8 0 56.864 48.7183 34.15 + 28 129.705 1184 7 1 56.9016 48.5227 5.55 + 28 134.253 1142 7 0 56.9026 48.5224 4.15 + 28 347.209 1184 6 1 56.8966 48.5011 -24.45 + 28 146.539 1142 6 0 56.9062 48.486 -25.85 + 28 111.73 1185 5 1 57.1194 48.1194 -54.45 + 28 120.578 1140 5 0 57.1459 48.0973 -55.85 + 28 96.7374 1188 4 1 57.7196 47.5384 -84.45 + 28 155.702 1137 4 0 57.7235 47.5156 -85.85 + 28 245.818 1188 3 1 57.8007 46.9869 -114.45 + 28 124.066 1134 3 0 57.7992 46.9667 -115.85 + 28 225.819 1188 2 1 57.7387 46.4706 -144.45 + 28 104.918 1132 2 0 57.7401 46.4608 -145.85 + 28 120.222 1189 1 1 57.8669 46.1868 -174.45 + 28 318.865 1130 1 0 57.8858 46.1365 -175.85 + 28 140.092 1191 0 1 58.3284 45.2002 -204.45 + 28 115.954 1125 0 0 58.3714 45.1546 -205.85 + 28 76.6856 445 14 1 -91.0234 88.395 215.15 + 28 99.0217 444 14 1 -91.15 88.4529 215.277 + 28 73.0105 1187 2 1 57.65 46.4682 -144.663 + 28 38.9757 1183 6 1 56.85 48.319 -24.6567 + 28 30.9859 1310 1 1 82.05 81.6598 -174.798 + 28 117.916 1182 8 1 56.6419 48.9168 35.55 + 28 93.5389 1144 8 0 56.6364 48.9137 34.15 + 28 154.582 1182 7 1 56.5154 48.8489 5.55 + 28 138.489 1143 7 0 56.5058 48.846 4.15 + 28 117.65 1181 6 1 56.3026 48.7688 -24.45 + 28 185.579 1143 6 0 56.2974 48.7647 -25.85 + 28 123.817 1180 5 1 56.1985 48.6853 -54.45 + 28 161.559 1143 5 0 56.1974 48.6773 -55.85 + 28 131.261 1180 4 1 56.1688 48.5239 -84.45 + 28 190.353 1142 4 0 56.168 48.5129 -85.85 + 28 430.812 1180 3 1 56.1444 48.2939 -114.45 + 28 113.221 1141 3 0 56.1444 48.2862 -115.85 + 28 222.465 1180 2 1 56.1372 48.1046 -144.45 + 28 105.746 1139 2 0 56.2001 47.9712 -145.85 + 28 110.79 1185 1 1 57.223 46.1908 -174.45 + 28 6.48983 1186 1 1 57.25 46.1709 -174.824 + 28 115.008 1198 0 1 59.6543 44.7532 -204.45 + 28 130.242 1123 0 0 59.7999 44.7367 -205.85 + 28 249.054 1142 3 0 56.1404 48.5011 -115.85 + 28 125.583 1181 2 1 56.2719 48.675 -144.45 + 28 297.706 1143 2 0 56.328 48.7422 -145.85 + 28 166.427 1187 1 1 57.4865 50.3436 -174.45 + 28 171.111 1151 1 0 57.5187 50.3381 -175.85 + 28 108.04 1188 0 1 57.7719 50.3316 -204.45 + 28 100.829 1151 0 0 57.8561 50.3011 -205.85 + 28 154.135 1181 1 1 56.3223 48.3426 -174.45 + 28 108.022 1141 1 0 56.3163 48.3446 -175.85 + 28 132.037 1180 0 1 56.1761 48.3906 -204.45 + 28 111.526 1141 0 0 56.1881 48.3811 -205.85 + 28 288.499 1669 3 1 153.95 -101.143 -114.62 + 28 28.3065 1182 0 1 56.45 40.161 -204.657 + 28 75.0652 1179 3 1 56.0498 48.2499 -114.552 + 28 91.4766 1178 3 1 55.85 48.0653 -114.686 + 28 8.81745 1177 3 1 55.65 47.9249 -114.806 + 28 213.004 1138 3 0 54.3786 47.7331 -115.851 + 28 74.4725 906 3 0 25.2201 1.43373 -116.25 + 28 74.9898 905 3 0 25.1614 1.25 -116.133 + 28 43.2747 904 3 0 25.1259 1.05 -115.989 + 28 21.8965 1023 3 1 24.6807 0.118063 -114.85 + 28 325.669 1022 3 1 24.6386 -0.05 -114.743 + 28 87.7578 1021 3 1 24.4498 -0.63276 -114.532 + 28 183.818 1076 6 0 33.9202 35.434 -26.25 + 28 91.1452 1066 6 1 33.3383 36.2761 -24.85 + 28 220.672 1065 6 1 33.25 36.4259 -24.7935 +Number of digits in this event: 41 Using G4ParticleGun... -Particle energy: 2.32131 LIN +Particle energy: 2.66873 LIN Particle: gamma Event: 29 -Number of tracker hits in this event: 69 - 29 262.258 1600 7 1 140.349 22.7557 5.55 - 29 241.458 1013 7 0 140.349 22.7404 4.15 - 29 107.029 1601 6 1 140.354 22.4689 -24.45 - 29 125.41 1012 6 0 140.357 22.4612 -25.85 - 29 126.142 1601 5 1 140.406 22.3075 -54.45 - 29 112.509 1011 5 0 140.409 22.2982 -55.85 - 29 197.008 1602 4 1 140.685 22.0424 -84.45 - 29 114.933 1009 4 0 140.701 22.0208 -85.85 - 29 167.691 1605 3 1 141.159 21.4635 -114.45 - 29 263.44 1007 3 0 141.196 21.4578 -115.85 - 29 104.321 1609 2 1 141.966 21.3056 -144.45 - 29 113.485 1006 2 0 141.993 21.2798 -145.85 - 29 121.035 1611 1 1 142.451 20.7509 -174.45 - 29 227.231 1003 1 0 142.469 20.7094 -175.85 - 29 170.446 1613 0 1 142.857 19.9454 -204.45 - 29 187.085 999 0 0 142.879 19.9071 -205.85 - 29 180.025 1398 0 1 99.8466 33.1607 -204.85 - 29 329.679 997 0 0 143.454 19.6471 -205.85 - 29 151.366 1600 6 1 140.327 22.6792 -24.45 - 29 99.134 1013 6 0 140.364 22.6645 -25.85 - 29 252.064 1605 5 1 141.249 22.0977 -54.45 - 29 218.753 1009 5 0 141.322 22.0397 -55.85 - 29 93.6545 1612 4 1 142.732 20.9135 -84.45 - 29 8.92803 1613 4 1 142.75 20.9162 -84.8109 - 29 166.277 1004 4 0 142.805 20.9195 -85.85 - 29 411.586 1621 3 1 144.433 20.9674 -114.45 - 29 275.973 1004 3 0 144.499 20.9518 -115.85 - 29 102.049 1630 2 1 146.164 21.0822 -144.45 - 29 121.4 1004 2 0 146.171 20.9669 -145.85 - 29 111.31 1630 1 1 146.325 18.0624 -174.45 - 29 183.121 988 1 0 146.181 17.8355 -175.85 - 29 129.675 1614 0 1 143.028 12.496 -204.45 - 29 212.128 961 0 0 142.842 12.3703 -205.85 - 29 46.8926 1002 3 0 144.289 20.4986 -115.85 - 29 131.46 1001 3 0 144.266 20.45 -116.013 - 29 118.724 1605 2 1 141.18 9.43639 -144.45 - 29 6.19538 947 2 0 141.26 9.64462 -145.85 - 29 107.201 948 2 0 141.262 9.65022 -145.885 - 29 54.2348 1612 1 1 142.616 16.4455 -174.45 - 29 66.3403 1613 1 1 142.75 16.5391 -174.563 - 29 66.0826 1614 1 1 142.95 16.6699 -174.67 - 29 56.913 1615 1 1 143.15 16.7773 -174.772 - 29 31.7972 989 1 0 145.291 17.9909 -175.85 - 29 149.138 990 1 0 145.397 18.05 -175.9 - 29 156.541 991 1 0 145.808 18.25 -176.068 - 29 309.616 992 1 0 146.254 18.45 -176.144 - 29 113.353 993 1 0 146.375 18.65 -175.957 - 29 115.462 1632 2 1 146.562 20.2217 -144.45 - 29 108.014 1000 2 0 146.645 20.2212 -145.85 - 29 147.074 1639 1 1 148.143 20.1041 -174.451 - 29 44.5061 1640 1 1 148.15 20.0995 -174.642 - 29 105.328 1000 1 0 148.19 20.0703 -175.85 - 29 189.019 1644 0 1 148.952 19.3958 -204.451 - 29 76.5422 1638 1 1 147.949 19.9369 -174.534 - 29 247.345 1637 1 1 147.75 19.925 -174.543 - 29 244.447 1636 1 1 147.55 20.0216 -174.73 - 29 117.687 1002 1 0 146.93 20.65 -175.924 - 29 76.8649 1001 1 0 146.749 20.45 -175.891 - 29 13.3464 1593 4 1 138.938 16.0355 -84.45 - 29 103.908 1594 4 1 138.95 16.0325 -84.5006 - 29 103.552 979 4 0 139.214 15.8883 -85.8501 - 29 43.7923 1631 3 1 146.482 15.2416 -114.45 - 29 154.717 1632 3 1 146.55 15.2456 -114.555 - 29 180.519 975 3 0 147.372 15.1429 -115.85 - 29 136.197 1010 4 0 141.769 22.1164 -85.85 - 29 4.26252 1628 4 1 145.75 20.2981 -84.7224 - 29 54.1668 1627 4 1 145.75 20.2944 -84.718 - 29 69.6875 1300 0 0 161.25 80.05 -206.118 - 29 191.742 1301 0 0 161.269 80.2501 -205.944 -Number of digits in this event: 37 +Number of tracker hits in this event: 92 + 29 252.038 945 6 1 9.10055 -87.9935 -24.45 + 29 233.293 460 6 0 9.10342 -87.9954 -25.85 + 29 113.131 945 5 1 9.16284 -88.0057 -54.45 + 29 225.805 460 5 0 9.2118 -87.9531 -55.8502 + 29 126.435 952 4 1 10.4838 -86.8366 -84.45 + 29 125.468 466 4 0 10.4715 -86.7598 -85.8505 + 29 129.287 949 3 1 9.90079 -85.083 -114.45 + 29 112.308 475 3 0 9.78899 -84.9927 -115.85 + 29 116.961 937 2 1 7.52779 -83.5819 -144.451 + 29 104.108 482 2 0 7.379 -83.4992 -145.85 + 29 128.802 920 1 1 4.23844 -82.5672 -174.45 + 29 355.377 487 1 0 3.78859 -82.4836 -175.85 + 29 78.0862 874 0 1 -5.10255 -81.8781 -204.45 + 29 77.6271 873 0 1 -5.25 -82.0371 -204.664 + 29 42.1515 485 0 0 -6.13338 -82.9615 -205.85 + 29 107.764 484 0 0 -6.21352 -83.05 -205.969 + 29 1.71756 483 0 0 -6.38068 -83.25 -206.243 + 29 50.6744 488 1 0 3.76083 -82.4499 -175.92 + 29 9.86833 489 1 0 3.58927 -82.0803 -175.85 + 29 254.604 900 0 1 0.181756 -80.8062 -204.45 + 29 146.35 496 0 0 -0.10037 -80.7291 -205.85 + 29 120.175 493 0 0 0.187623 -81.276 -205.85 + 29 549.076 946 3 1 9.38832 -87.9782 -114.45 + 29 293.298 460 3 0 9.39166 -87.9779 -115.85 + 29 463.655 947 2 1 9.45273 -87.9537 -144.45 + 29 109.074 460 2 0 9.45143 -87.9586 -145.85 + 29 88.0984 946 1 1 9.39608 -88.0562 -174.45 + 29 232.724 459 1 0 9.38683 -88.0579 -175.85 + 29 230.656 945 0 1 9.18549 -88.1149 -204.45 + 29 334.892 459 0 0 9.17759 -88.1161 -205.85 + 29 231.549 946 2 1 9.32326 -87.7731 -144.45 + 29 150.488 461 2 0 9.31319 -87.7409 -145.85 + 29 499.111 945 1 1 9.09429 -87.1516 -174.45 + 29 328.731 464 1 0 9.07944 -87.1412 -175.85 + 29 130.493 943 0 1 8.76389 -87.0063 -204.45 + 29 127.467 465 0 0 8.75064 -86.995 -205.85 + 29 221.27 947 0 1 9.62923 -87.8759 -204.451 + 29 52.5685 948 0 1 9.65009 -87.8968 -204.662 + 29 366.733 460 0 0 9.77923 -88.0291 -205.85 + 29 0.747362 455 0 0 10.5313 -89.0465 -205.85 + 29 123.851 454 0 0 10.5338 -89.05 -205.853 + 29 54.49 453 0 0 10.5989 -89.25 -206.109 + 29 118.814 946 5 1 9.28544 -87.9832 -54.45 + 29 204.441 945 4 1 9.22675 -88.1769 -84.45 + 29 117.31 459 4 0 9.23019 -88.1873 -85.85 + 29 127.978 458 3 0 9.32929 -88.3997 -115.85 + 29 93.2292 457 2 0 9.28562 -88.4577 -145.85 + 29 154.424 458 1 0 9.23993 -88.4287 -175.85 + 29 335.844 944 0 1 8.97585 -88.6072 -204.45 + 29 212.467 457 0 0 8.95997 -88.6359 -205.85 + 29 9.35999 377 0 0 16.5779 -104.721 -205.85 + 29 70.2877 376 0 0 16.5932 -104.75 -205.854 + 29 107.263 375 0 0 16.7856 -104.95 -205.864 + 29 63.28 374 0 0 16.8891 -105.15 -205.887 + 29 96.541 373 0 0 17.0536 -105.35 -205.982 + 29 173.279 389 0 0 13.0486 -102.196 -206.25 + 29 73.172 390 0 0 12.5752 -102.15 -206.206 + 29 257.161 341 0 0 11.6961 -111.772 -206.25 + 29 82.6543 461 3 0 9.00824 -87.7783 -115.85 + 29 99.8343 462 3 0 8.93225 -87.65 -116.133 + 29 113.998 932 2 1 6.59946 -70.9798 -144.45 + 29 75.9848 931 2 1 6.45 -70.852 -144.501 + 29 193.848 930 2 1 6.24963 -70.6509 -144.662 + 29 10.0933 929 2 1 6.05 -70.5151 -144.83 + 29 54.2951 553 2 0 4.12144 -69.3805 -145.85 + 29 109.023 554 2 0 3.94529 -69.25 -145.941 + 29 237.829 555 2 0 3.70984 -69.05 -146.047 + 29 48.7192 824 2 0 -64.3659 -15.2153 -146.25 + 29 60.6448 825 2 0 -64.4773 -15.05 -146.168 + 29 86.2603 826 2 0 -64.5803 -14.85 -146.109 + 29 34.998 827 2 0 -64.7051 -14.65 -145.937 + 29 96.262 572 2 1 -65.4947 -13.6478 -144.85 + 29 81.2364 571 2 1 -65.6505 -13.419 -144.642 + 29 75.1536 570 2 1 -65.8501 -13.2394 -144.5 + 29 37.3159 569 2 1 -66.05 -13.0697 -144.477 + 29 89.3791 463 3 0 10.0344 -87.45 -116.017 + 29 70.675 464 3 0 9.95791 -87.2499 -116.102 + 29 72.6369 465 3 0 9.8679 -87.0498 -116.129 + 29 104.974 466 3 0 9.75854 -86.85 -116.213 + 29 138.127 500 4 0 32.9169 -79.9682 -86.25 + 29 391.266 1065 4 1 33.1795 -80.0755 -84.85 + 29 71.651 1066 4 1 33.25 -80.3127 -84.6934 + 29 43.5527 495 4 0 33.5016 -80.9805 -85.85 + 29 135.082 494 4 0 33.5596 -81.05 -85.8939 + 29 107.444 1067 4 1 33.537 -81.4885 -84.85 + 29 8.78692 1064 4 1 33.05 -80.0867 -84.7741 + 29 287.579 462 2 0 9.50037 -87.5921 -145.85 + 29 137.12 947 1 1 9.61907 -87.3737 -174.45 + 29 116.282 463 1 0 9.60672 -87.4 -175.85 + 29 121.378 940 0 1 8.05812 -86.5026 -204.45 + 29 64.9641 467 0 0 8.08495 -86.4529 -205.85 + 29 125.682 468 0 0 8.08634 -86.45 -205.933 +Number of digits in this event: 44 Using G4ParticleGun... -Particle energy: 9.7255 LIN +Particle energy: 5.30545 LIN Particle: gamma Event: 30 -Number of tracker hits in this event: 3 - 30 17.8327 1357 1 1 91.7141 -73.8883 -174.45 - 30 184.518 1358 1 1 91.75 -73.9046 -174.462 - 30 39.8189 812 2 0 99.6972 -17.5964 -146.25 -Number of digits in this event: 3 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 2.91338 LIN +Particle energy: 1.80895 LIN Particle: gamma Event: 31 -Number of tracker hits in this event: 15 - 31 223.399 1309 3 1 81.9959 36.9254 -114.45 - 31 257.192 1084 3 0 81.9889 36.9272 -115.85 - 31 104.722 1308 2 1 81.8177 36.931 -144.45 - 31 241.623 1084 2 0 81.8002 36.9125 -145.85 - 31 120.507 1306 1 1 81.3994 36.5336 -174.45 - 31 213.184 1082 1 0 81.3912 36.5261 -175.85 - 31 104.537 1306 0 1 81.273 36.4097 -204.45 - 31 185.34 1081 0 0 81.2786 36.4106 -205.85 - 31 137.233 1309 2 1 82.0147 36.9283 -144.45 - 31 117.459 1309 1 1 81.9914 36.8804 -174.45 - 31 136.667 1084 1 0 81.99 36.8812 -175.85 - 31 129.099 1309 0 1 81.9535 36.8841 -204.45 - 31 102.38 1084 0 0 81.9513 36.8848 -205.85 - 31 165.987 684 3 1 -43.05 169.423 -114.653 - 31 184.244 1268 0 1 73.85 63.2417 -204.665 -Number of digits in this event: 12 +Number of tracker hits in this event: 2 + 31 229.587 1620 0 1 144.317 -34.3766 -204.45 + 31 240.485 728 0 0 144.313 -34.3743 -205.85 +Number of digits in this event: 4 Using G4ParticleGun... -Particle energy: 4.59248 LIN +Particle energy: 3.39837 LIN Particle: gamma Event: 32 -Number of tracker hits in this event: 45 - 32 262.452 1578 7 1 135.843 -54.3785 5.55 - 32 237.825 628 7 0 135.842 -54.3785 4.15 - 32 243.325 1578 6 1 135.832 -54.3763 -24.45 - 32 91.4985 628 6 0 135.831 -54.377 -25.85 - 32 112.605 1578 5 1 135.813 -54.4097 -54.45 - 32 133.839 628 5 0 135.81 -54.413 -55.85 - 32 261.908 1577 4 1 135.747 -54.4812 -84.45 - 32 112.602 627 4 0 135.745 -54.4837 -85.85 - 32 118.607 1577 3 1 135.705 -54.5383 -114.45 - 32 212.713 627 3 0 135.704 -54.5409 -115.85 - 32 144.982 1577 2 1 135.709 -54.6026 -144.45 - 32 252.164 627 2 0 135.707 -54.6047 -145.85 - 32 140.771 1577 1 1 135.677 -54.6491 -174.45 - 32 276.525 626 1 0 135.673 -54.6581 -175.85 - 32 128.88 1577 0 1 135.581 -54.8396 -204.45 - 32 233.423 626 0 0 135.576 -54.8461 -205.85 - 32 78.3902 703 7 1 -39.3743 -106.72 5.39664 - 32 273.594 702 7 1 -39.4829 -106.607 5.55 - 32 101.93 369 7 0 -39.8928 -106.257 4.15 - 32 252.696 370 7 0 -40.0599 -106.15 3.94432 - 32 104.956 371 7 0 -40.2013 -105.95 3.91538 - 32 28.3697 246 7 0 11.9536 -130.905 3.75 - 32 127.845 245 7 0 11.9971 -130.95 3.83666 - 32 265.903 957 7 1 11.5978 -131.403 5.15 - 32 84.6083 701 7 1 -39.65 -106.592 5.46323 - 32 84.9177 700 7 1 -39.85 -106.424 5.46877 - 32 73.9726 699 7 1 -40.05 -106.319 5.42545 - 32 141.132 698 7 1 -40.25 -106.198 5.46825 - 32 74.0998 697 7 1 -40.4503 -106.078 5.46759 - 32 120.292 696 7 1 -40.65 -105.942 5.37847 - 32 68.4695 695 7 1 -40.8502 -105.666 5.2539 - 32 78.0383 694 7 1 -41.05 -105.69 5.35307 - 32 331.606 693 7 1 -41.2501 -105.698 5.36456 - 32 33.1859 1578 4 1 135.75 -54.422 -84.5996 - 32 135.282 627 6 0 135.85 -54.4866 -25.85 - 32 122.49 1577 5 1 135.642 -54.615 -54.45 - 32 109.516 627 5 0 135.62 -54.6164 -55.85 - 32 126.717 1575 4 1 135.186 -54.661 -84.45 - 32 223.641 626 4 0 135.172 -54.6608 -85.85 - 32 113.879 1573 3 1 134.87 -54.623 -114.45 - 32 130.438 1570 2 1 134.293 -54.517 -144.45 - 32 126.995 1566 1 1 133.488 -54.1952 -174.45 - 32 110.771 629 1 0 133.45 -54.189 -175.85 - 32 108.504 1562 0 1 132.604 -54.0968 -204.45 - 32 109.101 629 0 0 132.555 -54.1028 -205.85 -Number of digits in this event: 27 +Number of tracker hits in this event: 3 + 32 29.1857 743 0 1 -31.25 -79.6801 -204.54 + 32 209.663 551 0 0 9.30236 -69.8146 -206.25 + 32 178.197 552 0 0 9.36174 -69.65 -206.056 +Number of digits in this event: 3 Using G4ParticleGun... -Particle energy: 6.58577 LIN +Particle energy: 3.74416 LIN Particle: gamma Event: 33 -Number of tracker hits in this event: 36 - 33 248.941 1250 7 1 70.1512 48.8302 5.55 - 33 306.967 1143 7 0 70.1498 48.8279 4.15 - 33 135.002 1250 6 1 70.1244 48.7749 -24.45 - 33 220.879 1143 6 0 70.1249 48.7721 -25.85 - 33 108.945 1250 5 1 70.1312 48.7147 -54.45 - 33 331.012 1143 5 0 70.1279 48.7111 -55.85 - 33 117.692 1249 4 1 70.0429 48.6427 -84.45 - 33 164.666 1142 4 0 70.0357 48.6385 -85.85 - 33 132.337 1249 3 1 69.8865 48.5555 -114.45 - 33 149.019 1142 3 0 69.8822 48.5522 -115.85 - 33 133.357 1248 2 1 69.7974 48.4959 -144.45 - 33 189.057 1142 2 0 69.7927 48.4948 -145.85 - 33 148.834 1248 1 1 69.6964 48.4699 -174.45 - 33 232.031 1142 1 0 69.6909 48.4679 -175.85 - 33 100.924 1247 0 1 69.5751 48.4326 -204.45 - 33 97.6112 1141 0 0 69.5696 48.4311 -205.85 - 33 132.649 1138 3 0 70.9066 47.7022 -115.85 - 33 137.265 1249 6 1 70.0086 48.7957 -24.45 - 33 1.1329 1249 5 1 69.85 48.694 -54.45 - 33 143.989 1248 5 1 69.85 48.694 -54.4538 - 33 126.581 1247 4 1 69.5099 48.6917 -84.45 - 33 126.634 1143 4 0 69.4836 48.6881 -85.85 - 33 130.085 1246 3 1 69.3371 48.2897 -114.45 - 33 182.484 1141 3 0 69.3394 48.2862 -115.85 - 33 120.711 1246 2 1 69.439 48.1988 -144.45 - 33 136.221 1140 2 0 69.3957 48.1859 -145.85 - 33 111.119 1241 1 1 68.3989 47.9328 -174.45 - 33 121.068 1139 1 0 68.381 47.9023 -175.85 - 33 152.961 1239 0 1 68.0306 47.2776 -204.45 - 33 138.793 1135 0 0 67.9983 47.2337 -205.85 - 33 557.919 1242 1 1 68.4725 48.6609 -174.45 - 33 150.476 1143 1 0 68.4562 48.6617 -175.85 - 33 185.926 1240 0 1 68.1292 48.6601 -204.45 - 33 120.664 1143 0 0 68.1079 48.6595 -205.85 - 33 157.42 1243 0 1 68.8269 47.7455 -204.45 - 33 153.372 1139 0 0 68.8609 47.9317 -205.85 -Number of digits in this event: 32 +Number of tracker hits in this event: 0 +Number of digits in this event: 1 Using G4ParticleGun... -Particle energy: 6.61905 LIN +Particle energy: 3.79992 LIN Particle: gamma Event: 34 -Number of tracker hits in this event: 6 - 34 72.8969 1264 13 0 -145.708 72.9937 183.75 - 34 103.615 1058 7 0 24.8956 31.7588 3.75 - 34 88.73 1059 7 0 24.6441 31.85 3.82717 - 34 40.1327 1354 7 0 -31.6586 91.0322 3.75 - 34 97.378 1355 7 0 -31.6646 91.1504 3.83436 - 34 89.6452 1356 7 0 -31.7434 91.35 3.80683 +Number of tracker hits in this event: 2 + 34 175.052 1250 0 1 70.05 -11.745 -204.684 + 34 88.3437 1251 0 1 70.2501 -11.7369 -204.668 Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 7.98334 LIN +Particle energy: 4.03868 LIN Particle: gamma Event: 35 -Number of tracker hits in this event: 0 -Number of digits in this event: 2 +Number of tracker hits in this event: 112 + 35 333.468 578 11 1 -64.2994 9.74211 125.55 + 35 215.723 948 11 0 -64.2984 9.74483 124.15 + 35 234.861 578 10 1 -64.2824 9.79149 95.55 + 35 96.9603 948 10 0 -64.2822 9.79456 94.15 + 35 197.559 578 9 1 -64.2774 9.85207 65.55 + 35 128.78 949 9 0 -64.2768 9.854 64.15 + 35 125.263 578 8 1 -64.2686 9.89663 35.55 + 35 175.612 949 8 0 -64.2655 9.9009 34.15 + 35 143.015 579 7 1 -64.1878 9.97492 5.55 + 35 113.903 949 7 0 -64.1829 9.98119 4.15 + 35 126.338 579 6 1 -64.0739 10.1181 -24.45 + 35 179.67 950 6 0 -64.0696 10.1253 -25.85 + 35 178.068 580 5 1 -63.9785 10.2763 -54.45 + 35 109.638 951 5 0 -63.9726 10.2795 -55.85 + 35 54.3648 580 4 1 -63.8508 10.3485 -84.45 + 35 58.6549 581 4 1 -63.85 10.3493 -84.6501 + 35 134.591 951 4 0 -63.8455 10.3541 -85.85 + 35 230.265 581 3 1 -63.7339 10.4668 -114.45 + 35 124.777 952 3 0 -63.7274 10.4753 -115.85 + 35 276.607 582 2 1 -63.5941 10.6424 -144.45 + 35 132.444 953 2 0 -63.5866 10.6517 -145.85 + 35 169.145 583 1 1 -63.4293 10.8324 -174.45 + 35 217.377 953 1 0 -63.4202 10.84 -175.85 + 35 148.523 584 0 1 -63.2191 10.9993 -204.45 + 35 129.573 954 0 0 -63.2057 11.0092 -205.85 + 35 79.9381 1139 9 0 -106.422 47.9542 63.7502 + 35 92.7344 1140 9 0 -106.24 48.05 63.915 + 35 97.8858 1141 9 0 -106.138 48.2502 64.0874 + 35 242.614 1142 9 0 -106.09 48.45 64.1066 + 35 16.3792 1363 9 0 -71.6487 92.7856 63.75 + 35 174.583 1362 9 0 -71.6257 92.75 63.7606 + 35 95.467 583 2 1 -63.45 10.6255 -144.561 + 35 72.5283 584 2 1 -63.2497 10.827 -144.749 + 35 454.601 585 2 1 -63.05 10.7957 -144.839 + 35 127.602 579 5 1 -64.0501 10.2854 -54.5991 + 35 1.06445 950 5 0 -65.2154 10.0679 -55.8501 + 35 178.823 570 5 1 -65.96 9.96177 -54.85 + 35 140.499 443 0 1 -91.3566 32.6731 -204.45 + 35 38.7157 442 0 1 -91.55 32.6879 -204.839 + 35 156.663 1061 0 0 -92.316 32.4368 -205.85 + 35 59.3819 1060 0 0 -92.5534 32.25 -206.101 + 35 157.621 947 10 0 -64.3996 9.45792 94.15 + 35 103.482 577 9 1 -64.5778 9.04917 65.55 + 35 139.474 944 9 0 -64.5789 9.03293 64.15 + 35 147.331 577 8 1 -64.6192 8.712 35.55 + 35 112.46 943 8 0 -64.6289 8.70187 34.15 + 35 234.972 576 7 1 -64.7598 8.45156 5.55 + 35 143.955 941 7 0 -64.7607 8.44776 4.15 + 35 127.775 576 6 1 -64.7841 8.37372 -24.45 + 35 185.864 941 6 0 -64.7901 8.37603 -25.85 + 35 126.611 575 5 1 -64.9103 8.42911 -54.45 + 35 105.279 941 5 0 -64.9164 8.43344 -55.85 + 35 120.679 574 4 1 -65.0524 8.52772 -84.45 + 35 107.196 942 4 0 -65.0432 8.54394 -85.85 + 35 147.865 575 3 1 -64.9061 8.8831 -114.45 + 35 167.535 944 3 0 -64.8826 8.90977 -115.85 + 35 119.608 578 2 1 -64.4312 9.42162 -144.45 + 35 122.585 946 2 0 -64.3989 9.4336 -145.85 + 35 104.841 581 1 1 -63.809 9.60421 -174.45 + 35 155.469 947 1 0 -63.7609 9.61033 -175.85 + 35 180.916 586 0 1 -62.7454 9.80632 -204.45 + 35 110.68 948 0 0 -62.6883 9.82333 -205.85 + 35 35.3976 902 3 1 0.65 119.876 -114.75 + 35 13.7909 1005 3 1 21.05 104.038 -114.519 + 35 13.9076 1192 3 0 -96.0327 58.45 -116.026 + 35 72.9543 415 3 1 -97.0371 59.2418 -114.85 + 35 87.4359 414 3 1 -97.15 59.3201 -114.696 + 35 316.401 413 3 1 -97.35 59.3771 -114.555 + 35 313.019 575 2 1 -64.8502 7.78118 -144.45 + 35 314.581 940 2 0 -65.2515 8.0839 -145.85 + 35 183.103 506 1 1 -78.6534 13.7402 -174.451 + 35 93.0964 962 1 0 -78.7181 12.6355 -175.85 + 35 91.6279 961 1 0 -78.7489 12.45 -176.089 + 35 5.15424 464 0 1 -87.056 -5.13536 -204.45 + 35 93.0639 465 0 1 -87.0499 -5.1334 -204.457 + 35 49.9437 466 0 1 -86.85 -5.05951 -204.677 + 35 146.041 877 0 0 -85.9058 -4.58373 -205.85 + 35 68.2371 530 1 1 -73.9581 13.5158 -174.45 + 35 170.232 529 1 1 -74.05 13.6165 -174.652 + 35 31.6058 971 1 0 -74.74 14.3911 -175.85 + 35 192.27 972 1 0 -74.7998 14.4501 -175.944 + 35 330.442 574 3 1 -65.2028 6.43245 -114.451 + 35 116.459 932 3 0 -65.3014 6.47564 -115.85 + 35 300.999 571 2 1 -65.7467 9.88437 -144.451 + 35 77.6726 942 2 0 -65.9357 8.59882 -145.85 + 35 80.7877 941 2 0 -65.9675 8.44972 -146.012 + 35 54.7564 813 2 0 -60.3703 -17.2779 -146.25 + 35 68.5768 814 2 0 -60.2025 -17.25 -146.047 + 35 33.0647 607 2 1 -58.5645 -17.2738 -144.85 + 35 71.4733 608 2 1 -58.4498 -17.2814 -144.76 + 35 56.7459 609 2 1 -58.25 -17.2728 -144.603 + 35 41.6575 610 2 1 -58.0499 -17.2437 -144.505 + 35 55.4367 612 2 1 -57.4881 -17.09 -144.45 + 35 252.889 613 2 1 -57.45 -17.1774 -144.501 + 35 116.923 931 3 0 -65.2319 6.38884 -115.85 + 35 121.136 576 2 1 -64.746 6.90569 -144.451 + 35 151.369 933 2 0 -64.5019 6.75043 -145.851 + 35 29.0408 599 1 1 -60.073 2.86226 -174.45 + 35 127.203 600 1 1 -60.05 2.89656 -174.521 + 35 226.089 918 1 0 -59.8 3.71229 -175.85 + 35 37.7539 919 1 0 -59.7629 3.85003 -176.089 + 35 142.265 612 0 1 -57.4852 18.241 -204.45 + 35 86.5898 993 0 0 -57.9606 18.7614 -205.85 + 35 42.4337 994 0 0 -58.0668 18.85 -206.139 + 35 8.3249 227 3 1 -134.711 95.9264 -114.45 + 35 76.1512 575 7 1 -64.9339 8.16893 5.55 + 35 59.0568 942 7 0 -64.4863 8.57788 4.15 + 35 68.2334 943 7 0 -64.4364 8.65 3.95683 + 35 168.775 1203 7 0 -98.4073 60.7842 3.75 + 35 50.0344 402 7 1 -99.6313 60.5569 5.15 + 35 135.333 401 7 1 -99.75 60.5163 5.28155 + 35 11.1283 400 7 1 -99.9502 60.5036 5.51393 +Number of digits in this event: 60 Using G4ParticleGun... -Particle energy: 7.3185 LIN +Particle energy: 6.57681 LIN Particle: gamma Event: 36 -Number of tracker hits in this event: 1 - 36 66.2518 1386 8 1 97.35 -9.64583 35.1801 -Number of digits in this event: 1 -Using G4ParticleGun... -Particle energy: 5.6711 LIN +Number of tracker hits in this event: 43 + 36 229.696 586 4 1 -62.7815 11.6096 -84.45 + 36 223.696 957 4 0 -62.7812 11.6099 -85.85 + 36 238.541 586 3 1 -62.7618 11.6273 -114.45 + 36 277.499 957 3 0 -62.7603 11.6268 -115.85 + 36 229.028 586 2 1 -62.7314 11.6098 -144.45 + 36 277.088 957 2 0 -62.7319 11.6149 -145.85 + 36 210.108 586 1 1 -62.7453 11.7069 -174.45 + 36 230.867 958 1 0 -62.7449 11.7138 -175.85 + 36 109.41 586 0 1 -62.7364 11.8613 -204.45 + 36 111.422 959 0 0 -62.7358 11.8678 -205.85 + 36 0.600694 1176 2 0 -35.6892 55.25 -145.978 + 36 276.357 612 0 0 -14.2272 -57.45 -206.25 + 36 104.741 585 0 1 -62.889 11.6244 -204.45 + 36 108.005 957 0 0 -62.8944 11.6203 -205.85 + 36 51.5056 1518 9 0 -3.5881 123.75 63.8098 + 36 123.2 870 9 1 -5.85 133.251 65.3654 + 36 33.0018 882 9 1 -3.63244 123.735 65.15 + 36 124.43 881 9 1 -3.65 123.793 65.2927 + 36 61.1294 880 9 1 -3.85039 123.937 65.5204 + 36 308.197 879 9 1 -4.05002 123.939 65.4562 + 36 98.6422 985 0 0 -52.3647 17.1289 -206.25 + 36 33.1149 986 0 0 -52.2309 17.25 -205.941 + 36 63.7035 638 0 1 -52.2738 18.6867 -204.85 + 36 19.5846 637 0 1 -52.4502 18.7177 -204.822 + 36 98.9966 989 0 0 -55.3061 17.97 -205.85 + 36 50.1198 618 0 1 -56.4124 18.4783 -204.85 + 36 243.427 617 0 1 -56.45 18.4485 -204.779 + 36 122.302 1446 3 0 -51.4045 109.35 -115.976 + 36 22.9259 958 2 0 -62.8 11.65 -146.187 + 36 101.881 1028 2 0 -114.642 25.7982 -146.249 + 36 170.512 1027 2 0 -114.951 25.65 -146.081 + 36 405.456 1026 2 0 -115.222 25.45 -146.067 + 36 47.8271 1496 2 0 -61.2146 119.403 -146.25 + 36 1.46348 1495 2 0 -61.1559 119.35 -146.248 + 36 24.0146 1515 2 0 -80.5082 123.315 -146.25 + 36 177.193 1516 2 0 -80.502 123.35 -146.24 + 36 20.9117 1124 0 1 45.0266 -36.7228 -204.45 + 36 110.482 1125 0 1 45.05 -36.7477 -204.532 + 36 259.363 714 0 0 45.4204 -37.1576 -205.85 + 36 24.107 852 0 0 97.8974 -9.51663 -206.25 + 36 89.7418 853 0 0 97.9508 -9.45 -206.201 + 36 298.222 1390 0 1 98.2051 -9.04968 -204.85 + 36 264.348 1391 0 1 98.35 -8.88745 -204.588 +Number of digits in this event: 23 +Using G4ParticleGun... +Particle energy: 9.85002 LIN Particle: gamma Event: 37 -Number of tracker hits in this event: 46 - 37 350.062 800 6 1 -19.9687 -105.415 -24.45 - 37 374.481 373 6 0 -19.9703 -105.416 -25.85 - 37 323.883 800 5 1 -20.0106 -105.426 -54.45 - 37 338.669 373 5 0 -20.0162 -105.427 -55.85 - 37 658.763 799 4 1 -20.139 -105.441 -84.45 - 37 88.7409 373 4 0 -20.1437 -105.443 -85.85 - 37 123.871 799 3 1 -20.2271 -105.464 -114.45 - 37 235.734 373 3 0 -20.2308 -105.465 -115.85 - 37 231.988 798 2 1 -20.3078 -105.489 -144.45 - 37 205.949 373 2 0 -20.3097 -105.492 -145.85 - 37 213.629 798 1 1 -20.3417 -105.558 -174.45 - 37 241.603 372 1 0 -20.341 -105.561 -175.85 - 37 109.455 798 0 1 -20.3436 -105.603 -204.45 - 37 236.954 372 0 0 -20.3408 -105.609 -205.85 - 37 171.137 797 1 1 -20.45 -105.511 -174.559 - 37 94.6299 1089 7 1 37.8877 64.3291 5.15 - 37 23.7811 1088 7 1 37.85 64.3813 5.52514 - 37 77.7736 371 6 0 -20.0389 -105.827 -25.8501 - 37 185.824 372 6 0 -20.0605 -105.75 -25.9725 - 37 0.208352 788 6 1 -22.25 -107.338 -24.7246 - 37 91.1246 369 6 0 -19.684 -106.153 -25.85 - 37 30.2188 368 6 0 -19.6365 -106.35 -26.1724 - 37 107.184 374 4 0 -20.1072 -105.343 -85.85 - 37 206.097 798 3 1 -20.2631 -105.359 -114.45 - 37 124.588 797 0 1 -20.5629 -105.625 -204.45 - 37 238.814 798 4 1 -20.25 -105.886 -84.7539 - 37 98.5947 801 5 1 -19.7996 -105.562 -54.4502 - 37 68.8128 369 5 0 -19.4763 -106.233 -55.8511 - 37 83.499 368 5 0 -19.3998 -106.35 -56.0693 - 37 6.69346 367 5 0 -19.3446 -106.55 -56.2331 - 37 54.391 358 5 0 -49.7902 -108.485 -56.2495 - 37 60.0164 359 5 0 -49.9212 -108.35 -56.1458 - 37 67.1089 360 5 0 -49.9998 -108.15 -56.0596 - 37 60.8401 361 5 0 -50.0971 -107.95 -56.0132 - 37 43.0229 362 5 0 -50.1709 -107.75 -55.9423 - 37 41.6287 363 5 0 -50.2096 -107.55 -55.8963 - 37 18.9628 645 5 1 -51.0331 -105.782 -54.8498 - 37 265.033 644 5 1 -51.05 -105.74 -54.8254 - 37 111.189 643 5 1 -51.25 -105.163 -54.5952 - 37 60.5354 642 5 1 -51.45 -104.919 -54.4535 - 37 81.8416 641 5 1 -51.65 -104.823 -54.532 - 37 77.0407 640 5 1 -51.85 -104.677 -54.6631 - 37 73.8799 639 5 1 -52.05 -104.624 -54.7611 - 37 75.362 390 5 0 -54.3352 -102.073 -55.8501 - 37 79.2559 391 5 0 -54.4551 -101.95 -55.8996 - 37 293.316 622 5 1 -55.4756 -101.773 -54.8496 -Number of digits in this event: 21 +Number of tracker hits in this event: 0 +Number of digits in this event: 1 Using G4ParticleGun... -Particle energy: 9.95431 LIN +Particle energy: 9.32026 LIN Particle: gamma Event: 38 -Number of tracker hits in this event: 1 - 38 129.142 588 4 1 -62.4437 19.6341 -84.45 -Number of digits in this event: 3 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 1.69756 LIN +Particle energy: 5.82671 LIN Particle: gamma Event: 39 -Number of tracker hits in this event: 44 - 39 343.371 863 4 1 -7.28288 -114.382 -84.45 - 39 296.253 328 4 0 -7.27728 -114.38 -85.85 - 39 140.167 864 3 1 -7.17009 -114.358 -114.45 - 39 374.498 328 3 0 -7.14923 -114.367 -115.85 - 39 112.157 866 2 1 -6.7175 -114.571 -144.45 - 39 335.278 327 2 0 -6.7003 -114.589 -145.85 - 39 122.567 868 1 1 -6.363 -114.898 -174.45 - 39 402.754 326 1 0 -6.34538 -114.912 -175.85 - 39 201.829 870 0 1 -5.987 -115.175 -204.45 - 39 103.016 324 0 0 -5.95637 -115.185 -205.85 - 39 162.437 744 0 1 -31.2452 -104.897 -204.45 - 39 120.85 743 0 1 -31.25 -104.901 -204.454 - 39 3.09416 87 3 0 1.70159 -162.55 -116.234 - 39 118.845 861 3 1 -7.7245 -114.435 -114.45 - 39 107.347 858 2 1 -8.34932 -114.635 -144.45 - 39 116.494 854 1 1 -9.24313 -115.131 -174.45 - 39 2.39578 853 1 1 -9.25 -115.146 -174.842 - 39 136.981 324 1 0 -9.26252 -115.185 -175.85 - 39 224.691 852 0 1 -9.60228 -116.181 -204.45 - 39 127.282 319 0 0 -9.62079 -116.21 -205.85 - 39 71.9615 851 0 1 -9.65 -116.19 -204.825 - 39 125.818 325 1 0 -9.2428 -115.15 -175.897 - 39 213.294 863 3 1 -7.31964 -114.384 -114.45 - 39 173.67 329 3 0 -7.44654 -114.314 -115.85 - 39 117.505 852 2 1 -9.55102 -112.885 -144.45 - 39 165.472 336 2 0 -9.56525 -112.806 -145.85 - 39 239.346 851 1 1 -9.8173 -111.042 -174.45 - 39 143.192 345 1 0 -9.77453 -110.956 -175.851 - 39 158.685 346 1 0 -9.771 -110.95 -175.958 - 39 103.594 854 0 1 -9.10003 -109.252 -204.45 - 39 129.798 354 0 0 -9.05292 -109.306 -205.85 - 39 147.277 863 2 1 -7.35596 -114.31 -144.45 - 39 151.967 328 2 0 -7.17713 -114.418 -145.85 - 39 142.449 881 1 1 -3.84191 -115.593 -174.45 - 39 80.1379 320 1 0 -3.71477 -116.061 -175.85 - 39 51.4698 319 1 0 -3.69474 -116.15 -176.085 - 39 140.594 891 0 1 -1.6578 -126.202 -204.451 - 39 18.2175 264 0 0 -1.87138 -127.315 -205.85 - 39 231.657 263 0 0 -1.87769 -127.35 -205.895 - 39 117.674 262 0 0 -1.91379 -127.55 -206.167 - 39 44.1123 892 0 1 -1.6499 -126.432 -204.728 - 39 35.836 261 0 0 -0.840216 -127.75 -206.165 - 39 59.2821 95 0 0 -4.04574 -161.109 -206.25 - 39 122.267 94 0 0 -4.12213 -161.15 -206.234 -Number of digits in this event: 29 +Number of tracker hits in this event: 1 + 39 114.713 770 4 1 -26.05 15.3109 -84.8208 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 8.92991 LIN +Particle energy: 2.16725 LIN Particle: gamma Event: 40 -Number of tracker hits in this event: 2 - 40 178.453 1657 14 1 151.703 49.3501 215.15 - 40 47.9997 1658 14 1 151.75 49.3737 215.345 -Number of digits in this event: 3 +Number of tracker hits in this event: 33 + 40 351.644 360 4 1 -108.007 -20.8104 -84.45 + 40 341.753 796 4 0 -108.011 -20.812 -85.85 + 40 294.55 360 3 1 -108.07 -20.8283 -114.45 + 40 243.606 796 3 0 -108.113 -20.8121 -115.85 + 40 105.27 356 2 1 -108.935 -20.4942 -144.45 + 40 31.6041 355 2 1 -108.95 -20.4885 -144.757 + 40 110.821 797 2 0 -109 -20.4715 -145.85 + 40 146.572 349 1 1 -110.303 -20.1482 -174.45 + 40 101.567 799 1 0 -110.365 -20.159 -175.85 + 40 119.008 342 0 1 -111.663 -20.3299 -204.45 + 40 158.992 798 0 0 -111.71 -20.3831 -205.85 + 40 123.684 474 0 1 -85.05 146.944 -204.643 + 40 175.674 88 0 1 -162.491 -43.4974 -204.45 + 40 174.464 798 2 0 -109.029 -20.45 -146.018 + 40 287.05 345 2 1 -111.008 -18.6525 -144.85 + 40 128.117 795 3 0 -108.011 -20.9093 -115.85 + 40 122.431 366 2 1 -106.871 -22.1499 -144.45 + 40 107.884 788 2 0 -107.137 -22.394 -145.85 + 40 18.1754 787 2 0 -107.198 -22.45 -146.17 + 40 288.952 338 1 1 -112.401 -27.3286 -174.45 + 40 198.036 761 1 0 -112.66 -27.6535 -175.85 + 40 130.256 311 0 1 -117.858 -34.1216 -204.45 + 40 106.571 728 0 0 -118.079 -34.3281 -205.85 + 40 117.882 361 3 1 -107.942 -20.8015 -114.45 + 40 134.585 360 2 1 -108.018 -20.7796 -144.45 + 40 104.497 796 2 0 -108.023 -20.7714 -145.85 + 40 117.063 359 1 1 -108.161 -20.5959 -174.45 + 40 111.966 797 1 0 -108.176 -20.5777 -175.85 + 40 123.779 358 0 1 -108.482 -20.1513 -204.45 + 40 115.81 799 0 0 -108.498 -20.1362 -205.85 + 40 23.7402 800 2 0 -109.182 -19.8892 -145.85 + 40 136.802 801 2 0 -109.237 -19.8498 -145.903 + 40 314.26 844 2 0 -78.4591 -11.0813 -146.25 +Number of digits in this event: 20 Using G4ParticleGun... -Particle energy: 5.92099 LIN +Particle energy: 9.47266 LIN Particle: gamma Event: 41 -Number of tracker hits in this event: 14 - 41 287.232 458 3 1 -88.3935 -21.9859 -114.45 - 41 261.735 790 3 0 -88.3943 -21.975 -115.85 - 41 231.548 458 2 1 -88.3358 -21.7484 -144.45 - 41 143.647 791 2 0 -88.3248 -21.7498 -145.85 - 41 100.218 459 1 1 -88.1132 -21.8545 -174.45 - 41 362.688 790 1 0 -88.1194 -21.8603 -175.85 - 41 242.765 458 0 1 -88.3726 -21.8879 -204.45 - 41 174.336 790 0 0 -88.3688 -21.8825 -205.85 - 41 111.332 790 2 0 -88.3929 -21.9915 -145.85 - 41 114.682 458 1 1 -88.3693 -22.0143 -174.45 - 41 133.07 789 0 0 -88.3736 -22.0596 -205.85 - 41 53.0041 1081 0 0 -88.6119 36.3514 -206.25 - 41 10.5539 959 1 0 -73.3865 11.85 -175.922 - 41 185.207 975 6 0 -171.77 15.0899 -26.25 -Number of digits in this event: 12 +Number of tracker hits in this event: 54 + 41 240.17 1295 5 1 79.1078 -68.9611 -54.45 + 41 282.924 555 5 0 79.1046 -68.9573 -55.85 + 41 129.818 1294 4 1 79.0279 -68.8657 -84.45 + 41 411.853 555 4 0 79.0239 -68.8562 -85.85 + 41 244.469 1294 3 1 78.9486 -68.6663 -114.45 + 41 154.974 556 3 0 78.9471 -68.6583 -115.85 + 41 113.681 1294 2 1 78.9079 -68.5042 -144.45 + 41 118.291 557 2 0 78.9016 -68.4982 -145.85 + 41 132.926 1293 1 1 78.7864 -68.3733 -174.45 + 41 118.11 558 1 0 78.7816 -68.3619 -175.85 + 41 205.912 1293 0 1 78.6843 -68.1357 -204.45 + 41 109.529 559 0 0 78.6792 -68.1208 -205.85 + 41 379.189 1295 3 1 79.1193 -68.9873 -114.45 + 41 265.67 555 3 0 79.1757 -69.016 -115.85 + 41 195.927 1303 2 1 80.7612 -70.0732 -144.45 + 41 109.263 549 2 0 80.8447 -70.1936 -145.85 + 41 125.514 1315 1 1 83.0695 -72.8723 -174.45 + 41 103.049 535 1 0 83.1469 -73.0172 -175.85 + 41 18.901 534 1 0 83.1653 -73.05 -176.178 + 41 108.723 1324 0 1 84.9498 -75.888 -204.45 + 41 2.67053 520 0 0 84.8902 -76.0485 -205.85 + 41 154.694 519 0 0 84.8896 -76.0501 -205.864 + 41 240.057 557 3 0 78.9863 -68.5398 -115.85 + 41 134.544 558 3 0 78.9657 -68.45 -116.133 + 41 188.199 1289 3 1 77.8985 -67.5352 -114.85 + 41 61.8655 1288 3 1 77.8499 -67.4925 -114.753 + 41 115.397 1295 4 1 79.1049 -68.9628 -84.45 + 41 361.517 1295 2 1 79.1239 -68.9971 -144.45 + 41 541.348 555 2 0 79.1246 -68.9971 -145.85 + 41 353.806 1295 1 1 79.1355 -68.9958 -174.45 + 41 123.323 555 1 0 79.1348 -68.9953 -175.85 + 41 156.061 1295 0 1 79.1252 -68.984 -204.45 + 41 109.063 555 0 0 79.1257 -68.9832 -205.85 + 41 6.48239 1682 8 0 123.345 156.55 34.0081 + 41 369.089 1519 8 1 123.988 157.247 35.15 + 41 519.707 1520 8 1 124.15 157.329 35.3568 + 41 119.336 553 1 0 79.1941 -69.2867 -175.85 + 41 226.939 1303 0 1 80.7223 -73.1049 -204.45 + 41 3.51112 532 0 0 81.0125 -73.6481 -205.85 + 41 174.655 531 0 0 81.0137 -73.6502 -205.856 + 41 308.562 514 0 0 56.492 -77.116 -206.25 + 41 21.4153 1183 0 1 56.8228 -76.3729 -204.85 + 41 297.592 1184 0 1 56.85 -76.3445 -204.816 + 41 137.132 1185 0 1 57.05 -76.0102 -204.491 + 41 265.039 1186 0 1 57.25 -75.867 -204.572 + 41 12.9854 1296 2 1 79.25 -68.924 -144.457 + 41 217.846 554 1 0 79.1393 -69.091 -175.85 + 41 105.569 1294 0 1 78.8552 -69.6991 -204.45 + 41 111.969 551 0 0 78.8346 -69.7222 -205.85 + 41 107.865 554 2 0 79.1159 -69.0535 -145.85 + 41 141.573 1300 1 1 80.0889 -71.3952 -174.45 + 41 120.881 542 1 0 80.4961 -71.4961 -175.85 + 41 127.396 1345 0 1 89.089 -73.3481 -204.45 + 41 133.697 533 0 0 89.4522 -73.3859 -205.85 +Number of digits in this event: 37 Using G4ParticleGun... -Particle energy: 3.81331 LIN +Particle energy: 9.91878 LIN Particle: gamma Event: 42 -Number of tracker hits in this event: 27 - 42 282.955 1106 6 1 41.381 -117.605 -24.45 - 42 217.118 312 6 0 41.3823 -117.605 -25.85 - 42 323.982 1106 5 1 41.4196 -117.605 -54.45 - 42 242.404 312 5 0 41.4204 -117.604 -55.85 - 42 284.586 1106 4 1 41.4312 -117.608 -84.45 - 42 241.578 312 4 0 41.4354 -117.587 -85.85 - 42 233.819 1106 3 1 41.436 -117.149 -114.45 - 42 124.666 315 3 0 41.4454 -117.125 -115.85 - 42 163.056 1108 2 1 41.6937 -116.603 -144.45 - 42 179.238 317 2 0 41.7703 -116.584 -145.85 - 42 99.4742 1116 1 1 43.3674 -116.159 -174.45 - 42 118.315 319 1 0 43.4509 -116.153 -175.85 - 42 174.894 1126 0 1 45.3351 -115.999 -204.45 - 42 165.045 320 0 0 45.4292 -116.003 -205.85 - 42 201.923 256 0 0 64.513 -128.75 -205.912 - 42 150.238 312 3 0 41.4442 -117.729 -115.85 - 42 156.928 1107 2 1 41.5148 -117.696 -144.45 - 42 126.057 312 2 0 41.5201 -117.695 -145.85 - 42 106.825 1107 1 1 41.6467 -117.668 -174.45 - 42 4.8634 1108 1 1 41.65 -117.669 -174.831 - 42 138.321 312 1 0 41.6584 -117.672 -175.85 - 42 125.78 1109 0 1 41.8692 -117.731 -204.45 - 42 107.015 312 0 0 41.883 -117.727 -205.85 - 42 100.055 991 2 1 18.3536 -149.532 -144.45 - 42 52.8324 930 0 1 6.2108 -131.249 -204.85 - 42 85.5036 1105 5 1 41.2498 -117.686 -54.655 - 42 120.051 310 5 0 41.0098 -117.959 -55.85 -Number of digits in this event: 22 +Number of tracker hits in this event: 28 + 42 206.314 947 5 1 9.4632 30.3545 -54.45 + 42 254.381 1051 5 0 9.46268 30.3529 -55.85 + 42 208.548 947 4 1 9.46055 30.3202 -84.45 + 42 205.05 1051 4 0 9.45976 30.3205 -85.85 + 42 104.894 946 3 1 9.44237 30.3234 -114.45 + 42 225.774 1051 3 0 9.44188 30.3248 -115.85 + 42 136.912 946 2 1 9.43283 30.3543 -144.45 + 42 331.973 1051 2 0 9.43199 30.3563 -145.85 + 42 122.148 946 1 1 9.41226 30.4063 -174.45 + 42 128.423 1051 1 0 9.41217 30.4047 -175.85 + 42 281.863 946 0 1 9.41771 30.3733 -204.45 + 42 114.19 1051 0 0 9.42281 30.3688 -205.85 + 42 55.4813 1029 0 0 -28.3328 25.9105 -206.25 + 42 116.789 1028 0 0 -28.5012 25.85 -206.005 + 42 3.74169 752 0 1 -29.6362 25.8934 -204.85 + 42 74.592 751 0 1 -29.65 25.8941 -204.838 + 42 95.4476 750 0 1 -29.85 25.8028 -204.83 + 42 229.033 749 0 1 -30.05 25.7429 -204.772 + 42 36.6399 461 7 0 -58.6675 -87.65 4.10814 + 42 46.3152 535 2 0 95.0677 -73.0233 -146.25 + 42 260.874 534 2 0 95.0708 -73.05 -146.151 + 42 233.677 947 3 1 9.60595 30.4052 -114.45 + 42 119.849 947 2 1 9.63932 30.4433 -144.45 + 42 313.684 947 1 1 9.58761 30.523 -174.45 + 42 134.713 1052 1 0 9.57958 30.5319 -175.85 + 42 140.837 1053 0 0 9.38763 30.7336 -205.85 + 42 55.9967 1160 0 0 0.459443 52.1309 -206.25 + 42 32.7203 1161 0 0 0.445307 52.25 -205.953 +Number of digits in this event: 19 Using G4ParticleGun... -Particle energy: 1.59052 LIN +Particle energy: 8.20719 LIN Particle: gamma Event: 43 -Number of tracker hits in this event: 20 - 43 266.47 680 2 1 -43.8603 -122.177 -144.45 - 43 133.175 289 2 0 -43.8587 -122.178 -145.85 - 43 190.588 681 1 1 -43.8237 -122.174 -174.45 - 43 127.998 289 1 0 -43.8211 -122.175 -175.85 - 43 213.588 681 0 1 -43.7507 -122.173 -204.45 - 43 390.624 289 0 0 -43.7484 -122.177 -205.85 - 43 38.8621 527 4 0 -96.9365 -74.65 -86.2213 - 43 5.08095 467 2 0 -76.1239 -86.6095 -146.25 - 43 38.4221 537 4 0 -59.7104 -72.5333 -86.2495 - 43 93.827 538 4 0 -59.67 -72.45 -86.1229 - 43 126.201 539 4 0 -59.5076 -72.25 -86.1175 - 43 272.892 540 4 0 -59.3042 -72.0499 -86.1272 - 43 5.36786 468 2 0 -76.2749 -86.45 -145.861 - 43 376.658 519 2 1 -76.226 -84.9503 -144.85 - 43 116.868 681 2 1 -43.8405 -122.177 -144.45 - 43 164.074 290 2 0 -43.6557 -122.15 -145.908 - 43 156.786 702 1 1 -39.4753 -122.069 -174.451 - 43 143.537 290 1 0 -39.5074 -121.974 -175.85 - 43 165.057 697 0 1 -40.54 -120.709 -204.45 - 43 148.673 297 0 0 -40.9059 -120.595 -205.85 -Number of digits in this event: 15 -Using G4ParticleGun... -Particle energy: 2.86465 LIN +Number of tracker hits in this event: 103 + 43 319.722 249 8 1 -130.335 47.5845 35.55 + 43 264.121 1137 8 0 -130.333 47.5838 34.15 + 43 263.482 249 7 1 -130.292 47.5642 5.55 + 43 347.273 1137 7 0 -130.29 47.5631 4.15 + 43 282.634 249 6 1 -130.329 47.4372 -24.45 + 43 142.843 1136 6 0 -130.332 47.4236 -25.85 + 43 272.252 248 5 1 -130.358 47.1516 -54.45 + 43 187.859 1135 5 0 -130.36 47.1294 -55.85 + 43 706.331 248 4 1 -130.397 46.6543 -84.45 + 43 135.381 1132 4 0 -130.393 46.6313 -85.85 + 43 304.166 249 3 1 -130.309 46.1516 -114.45 + 43 127.405 1130 3 0 -130.308 46.1224 -115.85 + 43 103.098 249 2 1 -130.242 45.5002 -144.45 + 43 127.354 1127 2 0 -130.239 45.471 -145.85 + 43 401.406 249 1 1 -130.186 44.8811 -174.45 + 43 236.719 1124 1 0 -130.177 44.86 -175.85 + 43 137.985 250 0 1 -129.987 44.3873 -204.45 + 43 334.135 1121 0 0 -129.975 44.364 -205.85 + 43 244.95 249 0 1 -130.308 44.6452 -204.45 + 43 150.49 1122 0 0 -130.343 44.6314 -205.85 + 43 107.419 1123 0 0 -130.194 44.6955 -205.85 + 43 231.049 247 1 1 -130.623 44.9425 -174.45 + 43 310.16 213 0 1 -137.48 44.3961 -204.45 + 43 146.655 1123 1 0 -130.78 44.7572 -175.85 + 43 6.07447 228 0 1 -134.549 40.8628 -204.45 + 43 122.537 227 0 1 -134.55 40.8585 -204.472 + 43 271.427 1102 0 0 -134.54 40.648 -205.85 + 43 142.884 226 0 1 -134.75 40.9898 -204.482 + 43 68.5562 225 0 1 -134.95 41.026 -204.56 + 43 58.73 224 0 1 -135.15 41.0711 -204.577 + 43 67.405 223 0 1 -135.35 41.1341 -204.598 + 43 46.0427 222 0 1 -135.55 41.1599 -204.649 + 43 87.3531 221 0 1 -135.75 41.1848 -204.659 + 43 70.9317 220 0 1 -135.95 41.2 -204.713 + 43 49.7193 219 0 1 -136.15 41.1586 -204.734 + 43 72.7116 218 0 1 -136.35 41.1309 -204.672 + 43 70.5256 217 0 1 -136.55 41.1423 -204.631 + 43 57.3271 216 0 1 -136.75 41.1378 -204.628 + 43 55.8932 215 0 1 -136.95 41.0851 -204.587 + 43 18.5962 214 0 1 -137.15 41.0105 -204.478 + 43 21.6745 244 5 1 -131.301 48.9967 -54.85 + 43 20.2075 243 5 1 -131.35 49.0072 -54.8368 + 43 54.3061 1147 5 0 -131.961 49.6332 -55.8501 + 43 142.095 1148 5 0 -131.983 49.65 -55.8563 + 43 414.288 1137 1 0 -130.314 47.53 -175.85 + 43 164.72 242 0 1 -131.684 48.5776 -204.45 + 43 97.5286 1142 0 0 -131.786 48.57 -205.85 + 43 95.0785 212 0 1 -137.55 47.7037 -204.602 + 43 342.959 1137 0 0 -137.971 47.6185 -205.85 + 43 134.647 175 3 1 -145.085 -64.9582 -114.45 + 43 24.9958 1136 0 0 -137.998 47.45 -206.002 + 43 266.824 1138 0 0 -137.92 47.65 -205.967 + 43 18.1726 208 0 1 -138.523 48.2428 -204.85 + 43 95.09 207 0 1 -138.55 48.2451 -204.809 + 43 231.983 206 0 1 -138.75 48.2895 -204.83 + 43 115.801 1137 6 0 -130.326 47.5782 -25.85 + 43 490.143 1137 5 0 -130.37 47.5488 -55.85 + 43 96.0854 1137 4 0 -130.402 47.5098 -85.85 + 43 321.249 248 3 1 -130.413 47.483 -114.45 + 43 150.265 1137 3 0 -130.414 47.48 -115.85 + 43 152.888 248 2 1 -130.434 47.4195 -144.45 + 43 243.318 1136 2 0 -130.436 47.4156 -145.85 + 43 123.686 248 1 1 -130.483 47.3269 -174.45 + 43 90.6443 1136 1 0 -130.485 47.322 -175.85 + 43 123.885 248 0 1 -130.527 47.2271 -204.45 + 43 151.892 1135 0 0 -130.529 47.2243 -205.85 + 43 58.767 1137 2 0 -130.367 47.45 -145.968 + 43 210.738 195 0 1 -141.088 66.6305 -204.45 + 43 358.513 249 5 1 -130.327 47.4778 -54.45 + 43 285.098 1136 4 0 -130.401 47.4098 -85.85 + 43 132.731 1136 3 0 -130.301 47.3348 -115.85 + 43 109.739 250 2 1 -130.037 47.1916 -144.45 + 43 227.435 1135 2 0 -130.026 47.191 -145.85 + 43 276.541 251 1 1 -129.81 47.1614 -174.45 + 43 293.055 1135 1 0 -129.8 47.153 -175.85 + 43 587.08 252 0 1 -129.588 46.9241 -204.45 + 43 390.298 1134 0 0 -129.588 46.9136 -205.85 + 43 64.5712 1139 0 0 -130.092 47.85 -206.068 + 43 192.982 1131 0 0 -129.855 46.4116 -205.85 + 43 242.382 1133 1 0 -129.94 46.7734 -175.85 + 43 1.14731 1132 1 0 -129.998 46.65 -176.245 + 43 24.676 1188 1 0 -149.467 57.7953 -176.25 + 43 124.582 1189 1 0 -149.47 57.85 -176.202 + 43 77.5046 1190 1 0 -149.566 58.05 -176.074 + 43 31.1325 1191 1 0 -149.535 58.2503 -175.91 + 43 143.037 155 1 1 -149.075 59.0503 -174.85 + 43 16.2462 1240 1 0 -151.373 68.1028 -175.85 + 43 118.979 125 1 1 -154.97 73.1845 -174.85 + 43 267.259 124 1 1 -155.15 73.3869 -174.748 + 43 4.31301 1254 1 0 -155.626 70.8529 -175.85 + 43 193.394 1253 1 0 -155.627 70.85 -175.851 + 43 120.206 1135 3 0 -130.518 47.1158 -115.85 + 43 42.1887 246 2 1 -130.948 47.0469 -144.45 + 43 72.166 245 2 1 -130.95 47.0474 -144.575 + 43 72.9017 244 1 1 -131.343 47.068 -174.45 + 43 53.0667 243 1 1 -131.35 47.0661 -174.673 + 43 138.551 239 0 1 -132.315 46.8081 -204.45 + 43 124.705 1133 0 0 -132.353 46.7925 -205.85 + 43 34.5074 474 8 1 -85.1463 -67.1048 35.15 + 43 201.233 475 8 1 -85.0496 -67.2368 35.4035 + 43 79.1624 248 8 1 -130.35 47.5925 35.4317 + 43 110.431 1141 8 0 -129.57 48.2719 34.15 + 43 47.5598 251 8 1 -129.813 47.0035 35.15 +Number of digits in this event: 62 +Using G4ParticleGun... +Particle energy: 2.93453 LIN Particle: gamma Event: 44 -Number of tracker hits in this event: 0 -Number of digits in this event: 2 -Using G4ParticleGun... -Particle energy: 8.79542 LIN +Number of tracker hits in this event: 188 + 44 252.217 1303 11 1 80.6738 12.4761 125.55 + 44 249.244 962 11 0 80.6725 12.4731 124.15 + 44 121.314 1303 10 1 80.6555 12.4118 95.55 + 44 275.497 961 10 0 80.6568 12.4016 94.15 + 44 114.393 1303 9 1 80.6977 12.1777 65.55 + 44 106.397 960 9 0 80.7027 12.1642 64.15 + 44 105.409 1303 8 1 80.7947 11.8925 35.55 + 44 149.401 959 8 0 80.7938 11.8761 34.15 + 44 169.451 1303 7 1 80.7728 11.5477 5.55 + 44 106.074 957 7 0 80.769 11.5327 4.15 + 44 177.99 1303 6 1 80.6931 11.2205 -24.45 + 44 147.592 955 6 0 80.6918 11.204 -25.85 + 44 173.603 1303 5 1 80.6616 10.8577 -54.45 + 44 134.891 953 5 0 80.6585 10.845 -55.85 + 44 136.57 1302 4 1 80.5735 10.57 -84.45 + 44 107.748 952 4 0 80.5683 10.5568 -85.85 + 44 149.559 1302 3 1 80.4579 10.2701 -114.45 + 44 80.889 951 3 0 80.4553 10.2534 -115.85 + 44 27.6844 950 3 0 80.4548 10.25 -116.135 + 44 108.303 1301 2 1 80.409 9.89221 -144.45 + 44 104.076 949 2 0 80.4079 9.87587 -145.85 + 44 235.296 1301 1 1 80.3826 9.55157 -174.45 + 44 102.264 947 1 0 80.3871 9.53991 -175.85 + 44 143.731 1302 0 1 80.4658 9.31335 -204.45 + 44 136.409 946 0 0 80.4686 9.3063 -205.85 + 44 27.2652 268 4 0 -155.92 -126.35 -86.2478 + 44 491.57 954 5 0 80.6615 10.85 -55.8699 + 44 447.397 1302 2 1 80.4883 9.84994 -144.45 + 44 309.518 948 2 0 80.4773 9.83383 -145.85 + 44 97.3172 1300 1 1 80.0963 9.47658 -174.45 + 44 133.621 946 1 0 80.0886 9.43307 -175.85 + 44 129.032 1299 0 1 79.9081 8.70058 -204.45 + 44 112.269 942 0 0 79.9083 8.64014 -205.85 + 44 172.457 1328 1 1 85.6741 8.23588 -174.451 + 44 27.0976 1327 1 1 85.65 8.2724 -174.747 + 44 95.6383 941 1 0 85.5439 8.4128 -175.85 + 44 10.8578 942 1 0 85.5125 8.45 -176.188 + 44 441.269 1315 0 1 83.1067 11.0516 -204.45 + 44 483.521 1314 0 1 83.05 11.1353 -204.723 + 44 122.205 957 0 0 82.8064 11.5236 -205.85 + 44 12.926 958 0 0 82.7284 11.65 -206.214 + 44 210.047 1036 0 0 78.1159 27.2663 -206.25 + 44 119.868 1313 0 1 82.8499 10.7422 -204.653 + 44 282.69 1302 5 1 80.5917 10.9119 -54.4502 + 44 5.52488 1301 5 1 80.45 10.7278 -54.8348 + 44 87.9861 949 5 0 79.7319 10.0053 -55.8501 + 44 121.975 948 5 0 79.5924 9.85 -56.0228 + 44 276.118 1187 4 1 57.45 -12.9845 -84.6435 + 44 113.109 1288 4 1 77.6861 11.957 -84.45 + 44 129.308 960 4 0 77.6398 12.1559 -85.85 + 44 130.804 1286 3 1 77.3909 16.9623 -114.45 + 44 8.561 1287 3 1 77.45 16.9167 -114.823 + 44 126.14 983 3 0 77.6281 16.7606 -115.85 + 44 137.927 1310 2 1 82.1858 9.20294 -144.45 + 44 2.20056 1311 2 1 82.25 8.98356 -144.846 + 44 18.4022 942 2 0 82.5038 8.482 -145.85 + 44 101.653 941 2 0 82.5202 8.44997 -145.915 + 44 58.4721 1339 1 1 87.9514 -1.21921 -174.45 + 44 79.4766 1338 1 1 87.85 -1.20945 -174.623 + 44 367.742 894 1 0 87.0404 -1.13911 -175.85 + 44 82.2946 1229 0 1 65.8601 -0.416742 -204.45 + 44 85.1334 1230 0 1 66.0502 -0.28696 -204.61 + 44 47.2685 1231 0 1 66.25 -0.201554 -204.716 + 44 55.5454 902 0 0 66.7751 0.617056 -205.85 + 44 165.486 903 0 0 66.7959 0.65 -205.885 + 44 43.0638 904 0 0 66.717 0.85 -206.138 + 44 105.283 679 5 0 59.3661 -44.22 -56.25 + 44 8.7996 1302 11 1 80.65 12.5063 125.182 + 44 47.1616 964 11 0 80.3943 12.9858 124.15 + 44 76.89 965 11 0 80.3596 13.05 124.006 + 44 16.9402 1056 11 0 55.5623 31.4242 123.75 + 44 85.5483 1057 11 0 55.5236 31.4503 123.818 + 44 40.6328 1175 11 1 55.0746 31.776 125.15 + 44 275.887 1174 11 1 55.05 31.7884 125.219 + 44 33.9709 1064 11 0 55.1431 32.9572 124.149 + 44 73.6644 1065 11 0 55.1654 33.05 124.053 + 44 78.4431 1066 11 0 55.1852 33.25 123.929 + 44 46.738 1067 11 0 55.2925 33.4503 123.833 + 44 157.344 1084 11 0 58.7829 36.937 123.75 + 44 204.222 1085 11 0 58.4399 37.05 124.016 + 44 37.2709 1086 11 0 58.1366 37.2501 124.083 + 44 54.4206 1190 11 1 58.1047 37.1543 125.15 + 44 121.136 1081 11 0 56.1639 36.3794 124.15 + 44 107.401 1302 10 1 80.5485 12.5854 95.55 + 44 128.8 962 10 0 80.5419 12.5948 94.15 + 44 151.477 1301 9 1 80.3972 12.7737 65.55 + 44 98.7909 963 9 0 80.3941 12.7765 64.15 + 44 132.915 1301 8 1 80.3521 12.8038 35.55 + 44 123.774 963 8 0 80.3422 12.8 34.15 + 44 481.513 1300 7 1 80.1132 12.7099 5.55 + 44 247.938 963 7 0 80.0987 12.7161 4.15 + 44 126.073 1298 6 1 79.723 12.8257 -24.45 + 44 68.801 963 6 0 79.7153 12.8457 -25.85 + 44 78.6852 964 6 0 79.7148 12.85 -26.1072 + 44 112.608 1298 5 1 79.6982 13.3537 -54.45 + 44 127.757 966 5 0 79.6909 13.3914 -55.85 + 44 152.56 1297 4 1 79.5592 14.2165 -84.45 + 44 55.9587 970 4 0 79.5298 14.246 -85.85 + 44 53.2707 971 4 0 79.5258 14.25 -86.0359 + 44 140.903 1294 3 1 78.9349 14.8993 -114.45 + 44 113.354 974 3 0 78.9026 14.9456 -115.85 + 44 128.746 1290 2 1 78.2366 15.9268 -144.45 + 44 181.143 979 2 0 78.2108 15.9704 -145.85 + 44 123.233 1288 1 1 77.6877 16.916 -174.45 + 44 166.456 984 1 0 77.6967 16.9608 -175.85 + 44 95.0153 1288 0 1 77.8211 17.9731 -204.45 + 44 98.7509 989 0 0 77.8541 18.0225 -205.85 + 44 319.151 1296 4 1 79.45 14.1724 -84.5428 + 44 56.3365 972 4 0 80.2634 14.6467 -85.85 + 44 75.0467 973 4 0 80.2681 14.6501 -85.8569 + 44 3.68647 1309 4 1 81.979 11.83 -84.85 + 44 64.8497 946 4 0 83.2374 9.44264 -85.85 + 44 57.0632 1316 4 1 83.3882 8.76867 -84.85 + 44 283.276 968 2 0 79.2204 13.7711 -145.85 + 44 147.706 967 2 0 79.1014 13.65 -146.184 + 44 122.623 960 7 0 80.2943 12.2451 4.14807 + 44 24.2222 959 7 0 80.3235 12.05 3.84167 + 44 129.786 827 7 0 87.9905 -14.5739 3.75 + 44 62.1018 1337 7 1 87.5531 -14.8987 5.15 + 44 59.3038 1336 7 1 87.45 -14.8482 5.34852 + 44 145.518 1300 6 1 80.1651 12.7325 -24.45 + 44 146.276 961 6 0 80.3624 12.4155 -25.85 + 44 112.104 1318 5 1 83.6946 6.31569 -54.45 + 44 152.08 930 5 0 83.8847 6.16776 -55.8503 + 44 112.738 1355 4 1 91.1502 1.39054 -84.4501 + 44 222.844 905 4 0 91.4067 1.2454 -85.85 + 44 135.678 1369 3 1 94.0118 0.649797 -114.45 + 44 168.222 901 3 0 94.2171 0.381939 -115.85 + 44 127.199 1375 2 1 95.2634 -5.71687 -144.45 + 44 104.553 871 2 0 94.9223 -5.68523 -145.85 + 44 20.6883 872 2 0 94.8234 -5.64997 -146.177 + 44 98.5301 900 1 0 85.7256 0.147731 -175.85 + 44 295.678 1337 0 1 87.6105 0.582108 -204.45 + 44 160.22 1336 0 1 87.45 1.23773 -204.528 + 44 69.633 1335 0 1 87.25 1.69669 -204.725 + 44 97.5399 917 0 0 86.5565 3.47625 -205.85 + 44 87.343 918 0 0 86.457 3.65063 -205.998 + 44 7.12877 919 0 0 86.3362 3.85 -206.227 + 44 32.5596 1037 0 0 59.9762 27.5689 -206.25 + 44 143.912 1038 0 0 59.8862 27.65 -206.185 + 44 54.6417 1039 0 0 59.645 27.8501 -205.983 + 44 84.3113 1189 0 1 58.0076 29.0594 -204.85 + 44 105.97 1188 0 1 57.85 29.2289 -204.706 + 44 68.6436 1187 0 1 57.6497 29.4867 -204.591 + 44 67.8568 1186 0 1 57.4499 29.7083 -204.565 + 44 122.726 1185 0 1 57.25 29.8617 -204.605 + 44 184.899 1184 0 1 57.05 30.1788 -204.541 + 44 60.9488 1052 0 0 56.6838 30.601 -205.85 + 44 96.6165 1053 0 0 56.6604 30.6501 -206.025 + 44 419.264 1150 0 0 22.0418 50.0523 -206.25 + 44 148.727 1151 0 0 21.815 50.25 -205.941 + 44 3.43449 1149 0 0 20.8737 50.0497 -206.237 + 44 26.6933 1037 4 0 102.192 27.4743 -86.25 + 44 46.4551 984 4 0 99.372 17.0199 -86.25 + 44 3.387 1045 4 0 -143.736 29.1878 -86.25 + 44 239.432 1304 2 1 80.9001 12.946 -144.45 + 44 223.648 965 2 0 81.1407 13.1454 -145.85 + 44 19.1849 1324 1 1 84.8863 20.6089 -174.45 + 44 113.382 1323 1 1 84.85 20.639 -174.514 + 44 91.7208 1006 1 0 84.1842 21.3009 -175.85 + 44 57.5499 1007 1 0 84.0371 21.4501 -176.168 + 44 23.526 1258 0 1 71.6745 30.6204 -204.45 + 44 134.97 1257 0 1 71.65 30.6086 -204.512 + 44 120.048 1051 0 0 70.9859 30.3422 -205.85 + 44 3.10348 1050 0 0 70.7857 30.2499 -206.235 + 44 21.5276 1064 0 0 68.5041 33.0072 -206.249 + 44 110.677 1065 0 0 68.5413 33.05 -206.197 + 44 56.1711 1066 0 0 68.6999 33.25 -205.988 + 44 203.012 1247 0 1 69.4923 35.3745 -204.85 + 44 423.65 1248 0 1 69.65 35.7833 -204.653 + 44 78.3828 1249 0 1 69.85 36.7635 -204.726 + 44 33.2755 1085 0 0 70.8043 37.2005 -205.85 + 44 88.9928 1086 0 0 70.8817 37.2501 -205.932 + 44 63.5835 1087 0 0 71.0046 37.4501 -206.157 + 44 36.7226 1088 0 0 71.0863 37.65 -206.216 + 44 36.184 1323 0 0 90.8568 84.776 -206.25 + 44 147.516 1324 0 0 90.9107 84.85 -206.19 + 44 129.98 1358 0 1 91.89 85.1419 -204.85 + 44 96.2798 1359 0 1 91.95 85.4016 -204.632 + 44 62.4328 1360 0 1 92.15 85.5534 -204.692 + 44 130.499 1361 0 1 92.35 85.5485 -204.687 + 44 81.0368 1303 2 1 80.8491 12.928 -144.48 + 44 438.81 964 2 0 80.8729 12.9443 -145.85 + 44 150.719 966 1 0 80.2005 13.3784 -175.85 + 44 102.648 1278 0 1 75.813 13.9229 -204.45 + 44 127.732 969 0 0 75.6324 13.9836 -205.85 + 44 208.92 1224 1 1 65.0376 109.46 -174.85 + 44 138.603 1225 1 1 65.0503 109.615 -174.775 +Number of digits in this event: 88 +Using G4ParticleGun... +Particle energy: 5.31133 LIN Particle: gamma Event: 45 -Number of tracker hits in this event: 81 - 45 237.942 586 10 1 -62.7053 76.538 95.55 - 45 299.265 1282 10 0 -62.7049 76.5373 94.15 - 45 151.058 586 9 1 -62.6931 76.5223 65.55 - 45 341.727 1282 9 0 -62.693 76.5196 64.15 - 45 256.305 586 8 1 -62.6926 76.4723 35.55 - 45 123.974 1282 8 0 -62.6944 76.4709 34.15 - 45 210.184 586 7 1 -62.7286 76.4416 5.55 - 45 259.205 1281 7 0 -62.729 76.4406 4.15 - 45 412.091 586 6 1 -62.7262 76.4195 -24.45 - 45 227.288 1281 6 0 -62.7258 76.4182 -25.85 - 45 178.974 586 5 1 -62.7064 76.3946 -54.45 - 45 153.234 1281 5 0 -62.7064 76.3934 -55.85 - 45 123.635 586 4 1 -62.708 76.3696 -84.45 - 45 122.623 1281 4 0 -62.709 76.3696 -85.85 - 45 244.965 586 3 1 -62.7209 76.3685 -114.45 - 45 159.869 1281 3 0 -62.722 76.3661 -115.85 - 45 120.492 586 2 1 -62.7465 76.319 -144.45 - 45 127.993 1281 2 0 -62.7478 76.3179 -145.85 - 45 124.961 586 1 1 -62.7742 76.2964 -174.45 - 45 215.107 1281 1 0 -62.7748 76.2946 -175.85 - 45 127.294 586 0 1 -62.7778 76.2612 -204.45 - 45 126.007 1281 0 0 -62.7778 76.2588 -205.85 - 45 210.664 321 1 1 -115.776 7.13674 -174.45 - 45 145.742 575 5 1 -64.934 74.3401 -54.45 - 45 24.8602 1270 5 0 -65.1224 74.0691 -55.85 - 45 100.69 1269 5 0 -65.1334 74.05 -55.9399 - 45 56.5756 552 4 1 -69.5668 68.461 -84.45 - 45 70.6145 551 4 1 -69.65 68.4217 -84.629 - 45 177.385 1240 4 0 -70.2287 68.136 -85.85 - 45 44.379 1239 4 0 -70.3913 68.05 -86.2026 - 45 44.5141 479 3 1 -84.1987 61.1105 -114.451 - 45 92.6723 478 3 1 -84.25 61.0728 -114.57 - 45 269.306 1202 3 0 -84.9674 60.6359 -115.85 - 45 145.879 374 2 1 -105.205 52.3705 -144.45 - 45 50.8549 1156 2 0 -105.62 51.3756 -145.85 - 45 73.2817 1155 2 0 -105.677 51.2499 -146.015 - 45 197.609 331 1 1 -113.77 30.3946 -174.45 - 45 144.673 1049 1 0 -114.016 29.9146 -175.85 - 45 42.7503 1048 1 0 -114.059 29.8499 -176.074 - 45 101.926 301 0 1 -119.863 21.8702 -204.45 - 45 48.1247 300 0 1 -119.95 21.7553 -204.685 - 45 75.3631 1005 0 0 -120.392 21.1698 -205.85 - 45 39.4391 1004 0 0 -120.49 21.05 -206.122 - 45 63.8874 1201 3 0 -85.0461 60.45 -115.946 - 45 151.772 477 3 1 -84.6366 60.7692 -114.85 - 45 59.7832 476 3 1 -84.65 60.7997 -114.808 - 45 117.42 1282 6 0 -62.5507 76.4735 -25.85 - 45 122.418 605 5 1 -58.8958 77.2877 -54.4503 - 45 111.533 1286 5 0 -58.7455 77.2691 -55.85 - 45 122.289 615 4 1 -56.9684 75.723 -84.45 - 45 144.758 1278 4 0 -56.705 75.6948 -85.85 - 45 115.969 646 3 1 -50.8208 74.8439 -114.45 - 45 151.771 1273 3 0 -50.6585 74.8166 -115.85 - 45 109.895 661 2 1 -47.6928 73.9258 -144.45 - 45 117.008 1269 2 0 -47.5986 73.9064 -145.85 - 45 315.489 668 1 1 -46.3285 73.0196 -174.45 - 45 109.763 1265 1 0 -46.2232 73.1799 -175.85 - 45 120.02 681 0 1 -43.7061 76.7328 -204.45 - 45 103.379 1283 0 0 -43.5089 76.8226 -205.85 - 45 8.73998 1284 0 0 -43.4538 76.85 -206.208 - 45 133.362 667 1 1 -46.45 73.0687 -174.619 - 45 287.861 1262 1 0 -47.6036 72.5983 -175.85 - 45 14.2072 666 1 1 -46.7854 73.6827 -174.85 - 45 118.353 1269 10 0 -62.2653 73.9894 94.1499 - 45 113.835 587 9 1 -62.6441 76.5105 65.55 - 45 137.502 1281 8 0 -62.6709 76.4225 34.15 - 45 139.694 587 6 1 -62.6169 76.2151 -24.45 - 45 176.865 1280 6 0 -62.6168 76.2079 -25.85 - 45 115.455 587 5 1 -62.6217 76.0714 -54.45 - 45 107.858 1280 5 0 -62.6201 76.0634 -55.85 - 45 231.148 587 4 1 -62.5886 75.8985 -84.45 - 45 114.585 1279 4 0 -62.5854 75.8872 -85.85 - 45 130.115 587 3 1 -62.508 75.6461 -114.45 - 45 118.966 1277 3 0 -62.5058 75.6352 -115.85 - 45 106.369 588 2 1 -62.4377 75.3879 -144.45 - 45 187.731 1276 2 0 -62.4311 75.375 -145.85 - 45 264.444 588 1 1 -62.2668 75.1188 -174.45 - 45 165.283 1275 1 0 -62.252 75.1271 -175.85 - 45 150.417 590 0 1 -61.9662 75.2797 -204.45 - 45 117.147 1276 0 0 -61.9593 75.2963 -205.85 - 45 164.759 589 1 1 -62.25 75.0405 -174.531 -Number of digits in this event: 50 +Number of tracker hits in this event: 39 + 45 212.685 1012 6 1 22.4997 146.276 -24.45 + 45 248.32 1630 6 0 22.5019 146.277 -25.85 + 45 348.598 1012 5 1 22.5619 146.28 -54.45 + 45 226.34 1630 5 0 22.5753 146.281 -55.85 + 45 141.344 1014 4 1 22.8776 146.313 -84.45 + 45 273.599 1630 4 0 22.9026 146.318 -85.85 + 45 106.897 1016 3 1 23.4079 146.608 -114.45 + 45 120.988 1632 3 0 23.4375 146.594 -115.85 + 45 99.981 1019 2 1 24.0157 146.202 -144.45 + 45 115.724 1630 2 0 24.044 146.206 -145.85 + 45 112.154 1023 1 1 24.651 146.316 -174.45 + 45 136.695 1630 1 0 24.6874 146.31 -175.85 + 45 161.43 1027 0 1 25.4526 146.185 -204.45 + 45 98.6441 1630 0 0 25.5011 146.191 -205.85 + 45 192.011 1011 5 1 22.45 146.365 -54.6065 + 45 120.885 1012 4 1 22.4807 146.337 -84.45 + 45 270.145 1012 3 1 22.5709 146.437 -114.45 + 45 131.773 1631 3 0 22.5621 146.437 -115.85 + 45 117.023 1011 2 1 22.3981 146.475 -144.45 + 45 128.045 1631 2 0 22.3933 146.507 -145.85 + 45 162.261 1009 1 1 21.9437 146.977 -174.45 + 45 177.18 1634 1 0 21.885 147.083 -175.85 + 45 129.646 1002 0 1 20.62 149.349 -204.45 + 45 139.263 1646 0 0 20.5653 149.444 -205.85 + 45 63.3384 109 8 0 155.886 -158.225 33.75 + 45 318.013 108 8 0 155.902 -158.35 33.844 + 45 179.268 107 8 0 155.781 -158.55 34.0404 + 45 73.3527 119 8 0 145.03 -156.167 33.75 + 45 105.329 118 8 0 145.076 -156.35 33.866 + 45 33.5057 1631 8 1 146.492 -157.324 35.15 + 45 70.1343 1632 8 1 146.55 -157.4 35.2202 + 45 96.747 102 8 0 146.568 -159.574 34.15 + 45 149.091 101 8 0 146.599 -159.75 34.0766 + 45 103.634 1010 1 1 22.0502 146.906 -174.654 + 45 183.068 1636 1 0 22.5409 147.375 -175.85 + 45 25.2979 1449 1 0 6.00973 110.014 -176.25 + 45 176.858 1446 1 0 -93.4502 109.437 -176.25 + 45 2.93138 1075 0 1 35.131 95.4513 -204.85 + 45 191.839 775 1 0 41.6746 -24.9777 -176.25 +Number of digits in this event: 26 Using G4ParticleGun... -Particle energy: 3.89873 LIN +Particle energy: 5.00718 LIN Particle: gamma Event: 46 -Number of tracker hits in this event: 1 - 46 152.46 953 1 1 10.7063 138.357 -174.85 -Number of digits in this event: 2 +Number of tracker hits in this event: 0 +Number of digits in this event: 1 Using G4ParticleGun... -Particle energy: 3.62438 LIN +Particle energy: 9.84281 LIN Particle: gamma Event: 47 -Number of tracker hits in this event: 1 - 47 89.408 899 1 0 -82.5061 -0.172202 -176.25 -Number of digits in this event: 1 +Number of tracker hits in this event: 8 + 47 21.1399 1666 14 0 150.394 153.35 213.867 + 47 140.827 492 0 0 -142.39 -81.45 -206.142 + 47 301.947 1235 2 1 67.152 -9.94345 -144.45 + 47 53.2086 38 0 0 -121.494 -172.35 -206.128 + 47 112.003 37 0 0 -121.533 -172.55 -206.054 + 47 23.0193 36 0 0 -121.449 -172.75 -205.875 + 47 244.885 294 0 1 -121.265 -173.823 -204.85 + 47 59.2915 293 0 1 -121.35 -173.964 -204.764 +Number of digits in this event: 5 Using G4ParticleGun... -Particle energy: 3.45867 LIN +Particle energy: 4.27291 LIN Particle: gamma Event: 48 -Number of tracker hits in this event: 39 - 48 211.826 1031 5 1 26.4059 86.4727 -54.45 - 48 277.178 1332 5 0 26.3946 86.5202 -55.85 - 48 310.35 1030 4 1 26.1273 87.4253 -84.45 - 48 356.627 1337 4 0 26.1104 87.6005 -85.85 - 48 130.98 1028 3 1 25.7824 90.7471 -114.45 - 48 102.505 1354 3 0 25.6685 90.9929 -115.85 - 48 143.141 1017 2 1 23.6033 96.0141 -144.451 - 48 107.169 1380 2 0 23.4322 96.1659 -145.85 - 48 74.5251 997 1 1 19.4703 99.8388 -174.45 - 48 33.9987 996 1 1 19.45 99.8713 -174.711 - 48 133.912 1399 1 0 19.3642 100.009 -175.85 - 48 111.507 988 0 1 17.7189 103.438 -204.45 - 48 144.905 1417 0 0 17.6507 103.559 -205.85 - 48 79.6567 1336 4 0 26.225 87.404 -85.85 - 48 20.058 1107 4 0 25.7439 41.53 -86.2499 - 48 86.6748 1106 4 0 25.7324 41.45 -86.2008 - 48 91.5541 1105 4 0 25.7087 41.25 -86.043 - 48 1.49026 1104 4 0 25.6859 41.0497 -85.8519 - 48 196.592 1026 4 1 25.391 40.0377 -84.8499 - 48 49.0455 1027 4 1 25.45 39.6986 -84.5921 - 48 337.354 1021 0 1 24.3166 93.9416 -204.45 - 48 239.477 1370 0 0 24.2722 94.18 -205.85 - 48 112.723 1368 0 0 24.2803 93.8254 -205.851 - 48 94.7376 1031 4 1 26.4389 86.4817 -84.45 - 48 113.73 1332 4 0 26.4372 86.4842 -85.85 - 48 139.993 1031 3 1 26.3987 86.5511 -114.45 - 48 111.182 1332 3 0 26.3985 86.5538 -115.85 - 48 101.042 1031 2 1 26.3954 86.6136 -144.45 - 48 120.867 1332 2 0 26.3968 86.6155 -145.85 - 48 140.783 1031 1 1 26.437 86.6516 -174.45 - 48 106.885 1333 1 0 26.4413 86.6547 -175.85 - 48 143.817 1032 0 1 26.5202 86.7312 -204.45 - 48 109.981 1333 0 0 26.5187 86.7325 -205.85 - 48 124.679 761 2 1 -27.65 8.78841 -144.807 - 48 4.16067 346 4 1 -110.825 85.6001 -84.85 - 48 54.8428 417 0 0 -1.15559 -96.55 -205.949 - 48 346.875 895 0 1 -0.95151 -96.7717 -204.85 - 48 80.2246 416 0 0 -1.18145 -96.75 -205.931 - 48 194.784 898 0 1 -0.395904 -96.9494 -204.85 -Number of digits in this event: 19 +Number of tracker hits in this event: 19 + 48 233.061 430 1 1 -93.9742 -114.738 -174.45 + 48 256.462 327 1 0 -93.9751 -114.738 -175.85 + 48 311.514 430 0 1 -93.9935 -114.74 -204.45 + 48 133.323 327 0 0 -93.9951 -114.739 -205.85 + 48 86.9716 1073 6 1 34.736 -158.665 -24.85 + 48 260.529 1072 6 1 34.6497 -158.724 -24.6078 + 48 127.183 326 0 0 -94.0549 -114.925 -205.85 + 48 116.264 624 5 0 2.71754 -55.1823 -56.25 + 48 110.045 8 1 0 -55.057 -178.477 -176.25 + 48 166.036 7 1 0 -55.2378 -178.55 -176.124 + 48 13.9816 319 0 0 -94.2612 -116.309 -205.85 + 48 148.208 318 0 0 -94.2754 -116.35 -205.865 + 48 163.914 317 0 0 -94.351 -116.55 -205.951 + 48 127.841 316 0 0 -94.3442 -116.751 -205.997 + 48 46.6071 315 0 0 -94.3862 -116.95 -206.21 + 48 6.89774 139 0 0 -103.584 -152.328 -206.25 + 48 122.867 138 0 0 -103.582 -152.35 -206.225 + 48 212.344 379 0 1 -104.211 -152.712 -204.85 + 48 286.98 378 0 1 -104.35 -152.721 -204.456 +Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 7.05861 LIN +Particle energy: 3.97464 LIN Particle: gamma Event: 49 -Number of tracker hits in this event: 27 - 49 224.506 321 3 1 -115.809 -2.33537 -114.45 - 49 273.428 888 3 0 -115.81 -2.33551 -115.85 - 49 266.12 321 2 1 -115.843 -2.33662 -144.45 - 49 280.895 888 2 0 -115.844 -2.33723 -145.85 - 49 241.197 321 1 1 -115.862 -2.35554 -174.45 - 49 255.77 888 1 0 -115.862 -2.35355 -175.85 - 49 236.144 321 0 1 -115.869 -2.31491 -204.45 - 49 240.204 888 0 0 -115.868 -2.3128 -205.85 - 49 283.322 1040 10 0 -126.467 28.1434 93.7506 - 49 14.7251 264 10 1 -127.343 27.6433 95.15 - 49 206.249 1012 10 0 -126.474 22.6342 94.15 - 49 224.508 889 1 0 -115.849 -2.2189 -175.85 - 49 65.2069 897 0 0 -115.772 -0.631099 -205.85 - 49 39.213 896 0 0 -115.752 -0.650012 -206.091 - 49 90.4237 890 1 0 -115.717 -2.05 -176.137 - 49 23.3547 1069 1 0 -149.959 34.0168 -176.25 - 49 124.605 1070 1 0 -149.971 34.05 -176.227 - 49 165.251 322 1 1 -115.666 -2.33747 -174.45 - 49 114.18 322 0 1 -115.572 -2.36862 -204.45 - 49 36.0223 377 3 0 -150.175 -104.55 -116.022 - 49 1.47954 148 3 1 -150.548 -103.928 -114.85 - 49 78.1585 147 3 1 -150.55 -103.925 -114.847 - 49 4.42984 379 3 0 -151.04 -104.323 -115.85 - 49 6.75542 144 3 1 -151.221 -106.513 -114.85 - 49 9.34965 373 3 0 -151.127 -105.444 -115.85 - 49 1.66439 140 3 1 -152.015 -103.56 -114.85 - 49 23.2104 395 3 0 -149.506 -101.059 -115.85 -Number of digits in this event: 15 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 4.73055 LIN +Particle energy: 7.85414 LIN Particle: gamma Event: 50 -Number of tracker hits in this event: 1 - 50 59.483 1088 10 0 -4.005 37.85 93.9752 -Number of digits in this event: 1 +Number of tracker hits in this event: 6 + 50 220.728 326 0 1 -114.785 -74.533 -204.45 + 50 268.568 527 0 0 -114.787 -74.5337 -205.85 + 50 2.44996 641 6 0 -8.81309 -51.65 -26.0784 + 50 58.1489 584 2 0 -9.78539 -63.243 -146.25 + 50 21.1217 857 2 1 -8.65 -62.217 -144.84 + 50 136.012 29 1 1 -174.15 -63.6225 -174.524 +Number of digits in this event: 5 Using G4ParticleGun... -Particle energy: 9.49641 LIN +Particle energy: 4.12069 LIN Particle: gamma Event: 51 -Number of tracker hits in this event: 3 - 51 373.806 921 0 1 4.44164 45.9599 -204.45 - 51 330.653 1129 0 0 4.44122 45.9601 -205.85 - 51 105.144 1749 4 0 -25.178 170.066 -86.25 -Number of digits in this event: 4 +Number of tracker hits in this event: 85 + 51 242.574 518 8 1 -76.3493 100.271 35.55 + 51 262.31 1400 8 0 -76.347 100.271 34.15 + 51 242.074 518 7 1 -76.2997 100.251 5.55 + 51 216.109 1400 7 0 -76.2967 100.249 4.15 + 51 121.354 519 6 1 -76.2264 100.223 -24.45 + 51 266.596 1400 6 0 -76.2247 100.224 -25.85 + 51 134.419 519 5 1 -76.1963 100.249 -54.45 + 51 124.864 1400 5 0 -76.1983 100.253 -55.85 + 51 207.02 519 4 1 -76.2324 100.33 -84.45 + 51 117.787 1400 4 0 -76.2305 100.331 -85.85 + 51 322.117 519 3 1 -76.2023 100.337 -114.45 + 51 288.418 1400 3 0 -76.2029 100.338 -115.85 + 51 180.435 519 2 1 -76.2043 100.346 -144.45 + 51 255.078 1400 2 0 -76.2063 100.346 -145.85 + 51 113.671 518 1 1 -76.2563 100.345 -174.45 + 51 107.507 1400 1 0 -76.2621 100.347 -175.85 + 51 113.62 518 0 1 -76.381 100.395 -204.45 + 51 286.525 1401 0 0 -76.3856 100.401 -205.85 + 51 159.35 1399 3 0 -76.2181 99.9864 -115.85 + 51 115.557 1398 3 0 -76.2201 99.95 -115.946 + 51 13.2905 1397 3 0 -76.222 99.75 -116.218 + 51 119.542 518 3 1 -76.25 100.268 -114.665 + 51 46.9212 497 2 1 -80.5726 98.7358 -144.45 + 51 86.2892 496 2 1 -80.6501 98.7169 -144.537 + 51 20.4223 495 2 1 -80.85 98.639 -144.79 + 51 176.565 1390 2 0 -81.8058 98.3362 -145.85 + 51 119.596 1353 2 0 -104.762 90.7596 -146.25 + 51 137.364 1337 0 0 -88.0826 87.5681 -206.25 + 51 114.08 518 4 1 -76.2502 100.334 -84.7096 + 51 210.445 518 2 1 -76.2912 100.465 -144.45 + 51 313.979 1401 2 0 -76.2346 100.398 -145.85 + 51 87.1046 515 1 1 -77.0276 102.476 -174.45 + 51 184.835 516 1 1 -76.8499 102.524 -174.69 + 51 169.471 1413 1 0 -75.5651 102.766 -175.85 + 51 12.2016 1414 1 0 -75.0892 102.95 -176.226 + 51 345.369 1282 1 0 -27.7805 76.5823 -176.25 + 51 185.945 1281 1 0 -27.6011 76.45 -176.094 + 51 82.5911 1399 2 0 -75.8865 100.028 -145.85 + 51 81.2843 1398 2 0 -75.7325 99.95 -146.076 + 51 34.1628 1584 2 0 -49.7201 136.998 -146.25 + 51 281.163 1585 2 0 -49.7249 137.15 -146.184 + 51 89.4929 1586 2 0 -49.7374 137.35 -146.097 + 51 17.1234 648 2 1 -50.4354 137.167 -144.85 + 51 183.189 647 2 1 -50.45 137.156 -144.813 + 51 123.061 646 2 1 -50.65 137.169 -144.457 + 51 215.403 645 2 1 -50.8502 137.107 -144.557 + 51 59.4382 652 2 1 -49.4641 136.523 -144.85 + 51 133.927 517 6 1 -76.5614 100.336 -24.45 + 51 182.816 516 5 1 -76.6954 100.401 -54.45 + 51 113.21 1401 5 0 -76.6981 100.412 -55.85 + 51 264.051 516 4 1 -76.7793 100.665 -84.45 + 51 111.678 1402 4 0 -76.7799 100.677 -85.85 + 51 127.715 516 3 1 -76.7969 100.937 -114.45 + 51 115.702 1404 3 0 -76.7955 100.955 -115.85 + 51 102.633 516 2 1 -76.7535 101.314 -144.45 + 51 173.299 1405 2 0 -76.7539 101.334 -145.85 + 51 244.683 1407 1 0 -76.7925 101.733 -175.85 + 51 98.2971 516 0 1 -76.7571 102.035 -204.45 + 51 101.268 1409 0 0 -76.7645 102.059 -205.85 + 51 234.426 514 2 1 -77.1864 100.505 -144.45 + 51 82.1937 530 1 1 -73.8525 96.2647 -174.45 + 51 54.2734 529 1 1 -74.05 96.2289 -174.485 + 51 93.7967 528 1 1 -74.25 96.191 -174.5 + 51 56.3745 527 1 1 -74.45 96.1447 -174.58 + 51 56.7851 526 1 1 -74.6501 96.1078 -174.696 + 51 49.7647 525 1 1 -74.85 96.0897 -174.793 + 51 25.692 1377 1 0 -76.7877 95.58 -175.85 + 51 134.392 1376 1 0 -76.9012 95.5499 -175.907 + 51 47.5825 1375 1 0 -77.2569 95.35 -176.136 + 51 11.2342 1568 1 0 -136.564 133.92 -176.25 + 51 70.6513 1569 1 0 -136.595 133.95 -176.239 + 51 107.857 1570 1 0 -136.783 134.15 -176.116 + 51 152.15 1571 1 0 -137.082 134.35 -175.917 + 51 165.055 205 1 1 -138.95 135.907 -174.85 + 51 90.7805 206 1 1 -138.95 135.93 -174.45 + 51 89.3018 1488 0 0 -166.636 117.95 -206.043 + 51 98.95 1380 0 0 -170.061 96.3279 -206.25 + 51 129.986 517 1 1 -76.621 100.862 -174.45 + 51 216.238 1403 1 0 -76.7357 100.846 -175.85 + 51 404.84 504 0 1 -79.1748 100.502 -204.45 + 51 192.289 1402 0 0 -79.266 100.61 -205.85 + 51 17.7611 503 0 1 -79.25 100.587 -204.816 + 51 151.16 1400 0 0 -80.3303 100.303 -205.85 + 51 195.358 1402 7 0 -76.6646 100.743 4.15 + 51 202.599 1403 7 0 -76.6636 100.75 4.11284 +Number of digits in this event: 47 Using G4ParticleGun... -Particle energy: 6.48901 LIN +Particle energy: 9.97149 LIN Particle: gamma Event: 52 -Number of tracker hits in this event: 16 - 52 377.933 1216 5 1 63.2731 107.858 -54.45 - 52 301.448 1438 5 0 63.2732 107.859 -55.85 - 52 281.238 1216 4 1 63.2671 107.878 -84.45 - 52 204.042 1438 4 0 63.2684 107.88 -85.85 - 52 236.402 1216 3 1 63.2914 107.93 -114.45 - 52 211.634 1438 3 0 63.2925 107.93 -115.85 - 52 313.288 1216 2 1 63.3166 107.933 -144.45 - 52 270.382 1438 2 0 63.3178 107.936 -145.85 - 52 271.337 1216 1 1 63.3494 107.985 -174.45 - 52 108.993 1439 1 0 63.3477 107.989 -175.85 - 52 368 1216 0 1 63.3174 108.073 -204.45 - 52 126.074 1439 0 0 63.3193 108.079 -205.85 - 52 190.28 1438 1 0 63.2601 107.859 -175.85 - 52 112.264 1215 0 1 63.1782 107.809 -204.45 - 52 191.027 1438 0 0 63.1768 107.808 -205.85 - 52 142.323 1251 0 1 70.45 4.7031 -204.788 -Number of digits in this event: 16 +Number of tracker hits in this event: 58 + 52 249.471 1606 5 1 141.517 1.24408 -54.45 + 52 242.621 906 5 0 141.52 1.25477 -55.85 + 52 115.954 1607 4 1 141.569 1.44777 -84.45 + 52 113.189 906 4 0 141.574 1.44321 -85.85 + 52 131.094 1607 3 1 141.694 1.36815 -114.45 + 52 144.211 906 3 0 141.684 1.37718 -115.85 + 52 633.73 1606 2 1 141.468 1.56328 -144.45 + 52 300.371 907 2 0 141.455 1.57424 -145.85 + 52 105.729 1604 1 1 141.146 1.78294 -174.45 + 52 156.608 908 1 0 141.128 1.80209 -175.85 + 52 144.713 1602 0 1 140.747 2.12797 -204.45 + 52 123.936 910 0 0 140.729 2.13813 -205.85 + 52 234.047 1603 0 1 140.764 2.12142 -204.45 + 52 286.462 1604 0 1 140.95 1.5905 -204.576 + 52 134.404 1605 0 1 141.15 1.55249 -204.621 + 52 51.3702 1386 0 1 97.55 -1.90753 -204.716 + 52 10.2931 620 8 0 -48.468 -55.8641 33.75 + 52 149.411 659 8 1 -48.1342 -56.0772 35.15 + 52 608.076 1607 2 1 141.607 1.49946 -144.45 + 52 122.686 906 2 0 141.497 1.4377 -145.85 + 52 198.806 1594 1 1 139.113 -2.1951 -174.45 + 52 94.3049 887 1 0 139.098 -2.56765 -175.85 + 52 13.9279 886 1 0 139.098 -2.65 -176.199 + 52 128.503 1597 0 1 139.588 -8.34496 -204.45 + 52 121.002 856 0 0 139.855 -8.73118 -205.85 + 52 179.885 1613 1 1 142.771 3.00837 -174.451 + 52 153.114 912 1 0 143.325 2.64121 -175.85 + 52 70.038 1677 0 1 155.672 -4.3876 -204.45 + 52 35.5406 1678 0 1 155.75 -4.41274 -204.706 + 52 134.233 877 0 0 156.036 -4.54246 -205.85 + 52 63.7196 1655 0 1 151.15 -1.60785 -204.654 + 52 243.498 891 0 0 151.35 -1.83445 -205.85 + 52 118.487 1612 1 1 142.75 2.98161 -174.474 + 52 124.99 905 5 0 141.517 1.24388 -55.85 + 52 172.246 1606 4 1 141.509 1.24618 -84.45 + 52 106.178 905 4 0 141.509 1.24524 -85.85 + 52 332.029 1606 3 1 141.506 1.2165 -114.45 + 52 370.006 905 3 0 141.505 1.21755 -115.85 + 52 399.9 905 2 0 141.484 1.24664 -145.85 + 52 611.836 1606 1 1 141.451 1.293 -174.45 + 52 371.03 906 1 0 141.446 1.29582 -175.85 + 52 125.735 906 0 0 141.339 1.36602 -205.85 + 52 20.0259 1667 0 1 153.55 41.7042 -204.77 + 52 29.1176 1451 1 1 110.438 -135.476 -174.85 + 52 143.495 1450 1 1 110.35 -135.864 -174.694 + 52 114.095 1596 0 1 139.475 3.27815 -204.45 + 52 126.832 915 0 0 139.473 3.24532 -205.85 + 52 487.68 1606 0 1 141.444 3.37976 -204.45 + 52 118.277 916 0 0 141.472 3.41755 -205.85 + 52 104.535 1604 2 1 141.049 1.12809 -144.45 + 52 111.439 1602 1 1 140.641 1.54512 -174.45 + 52 137.549 907 1 0 140.621 1.57094 -175.85 + 52 6.38831 1600 0 1 140.152 1.81123 -204.45 + 52 173.233 1599 0 1 140.15 1.8117 -204.479 + 52 129.354 908 0 0 140.069 1.83154 -205.85 + 52 115.453 905 1 0 141.436 1.2211 -175.85 + 52 356.4 905 0 0 141.411 1.22765 -205.85 + 52 5.40236 1650 4 1 150.316 102.385 -84.85 +Number of digits in this event: 41 Using G4ParticleGun... -Particle energy: 7.62454 LIN +Particle energy: 4.33679 LIN Particle: gamma Event: 53 -Number of tracker hits in this event: 38 - 53 326.577 1151 4 1 50.3034 -54.8531 -84.45 - 53 288.886 625 4 0 50.3033 -54.8526 -85.85 - 53 261.017 1151 3 1 50.2972 -54.8384 -114.45 - 53 121.251 626 3 0 50.2963 -54.8403 -115.85 - 53 361.676 1151 2 1 50.2827 -54.8805 -144.45 - 53 521.193 625 2 0 50.2763 -54.8932 -145.85 - 53 203.469 1150 1 1 50.0672 -55.1417 -174.45 - 53 156.131 624 1 0 50.0702 -55.1434 -175.85 - 53 251.301 1150 0 1 50.2401 -55.2523 -204.45 - 53 153.814 1151 0 1 50.25 -55.2538 -204.742 - 53 312.514 623 0 0 50.2925 -55.2694 -205.85 - 53 118.157 1151 1 1 50.2725 -54.9618 -174.45 - 53 459.804 625 1 0 50.2728 -54.9655 -175.85 - 53 118.098 625 0 0 50.2787 -55.0412 -205.85 - 53 66.2269 1097 0 1 39.5221 38.4726 -204.85 - 53 55.8799 465 0 0 13.6987 -86.85 -206.182 - 53 52.6841 968 0 1 13.6719 -86.7504 -204.85 - 53 223.661 967 0 1 13.65 -86.7547 -204.777 - 53 249.346 1062 3 1 32.5398 99.9198 -114.85 - 53 249.433 624 2 0 50.1568 -55.0501 -145.893 - 53 127.871 624 0 0 50.1267 -55.1034 -205.85 - 53 99.9408 1283 8 1 76.7307 -57.8393 35.15 - 53 163.999 613 1 0 33.1616 -57.4379 -176.25 - 53 30.7114 654 1 1 -49.1289 -5.41184 -174.45 - 53 347.18 625 3 0 50.3955 -54.8819 -115.85 - 53 127.874 1152 2 1 50.5857 -54.8387 -144.45 - 53 121.775 626 2 0 50.5959 -54.8417 -145.85 - 53 97.4776 1153 1 1 50.844 -54.9114 -174.45 - 53 222.933 1155 0 1 51.2023 -54.8407 -204.45 - 53 339.223 626 0 0 51.2147 -54.8362 -205.85 - 53 66.2293 1617 3 0 9.68332 143.659 -116.25 - 53 126.781 1618 3 0 9.71233 143.75 -116.171 - 53 144.792 608 0 0 62.538 -58.3724 -206.25 - 53 57.1347 1215 0 1 63.0708 -58.3518 -204.85 - 53 158.77 1214 0 1 63.0499 -58.2978 -204.687 - 53 244.658 1213 0 1 62.85 -58.2007 -204.468 - 53 82.0903 1212 0 1 62.6499 -58.3035 -204.534 - 53 146.109 1154 0 1 51.0437 -54.7815 -204.45 -Number of digits in this event: 29 +Number of tracker hits in this event: 55 + 53 228.858 1404 6 1 100.951 -104.992 -24.45 + 53 249.773 375 6 0 100.949 -104.993 -25.85 + 53 371.644 1403 5 1 100.916 -105.01 -54.45 + 53 216.479 375 5 0 100.913 -105.004 -55.85 + 53 241.501 1403 4 1 100.887 -104.886 -84.45 + 53 108.599 376 4 0 100.886 -104.885 -85.85 + 53 273.235 1403 3 1 100.873 -104.841 -114.45 + 53 232.636 376 3 0 100.844 -104.838 -115.85 + 53 114.163 1400 2 1 100.229 -104.77 -144.45 + 53 109.279 376 2 0 100.199 -104.771 -145.85 + 53 123.805 1397 1 1 99.5881 -104.799 -174.45 + 53 359.323 376 1 0 99.5565 -104.798 -175.85 + 53 158.198 1393 0 1 98.904 -104.798 -204.45 + 53 109.925 376 0 0 98.8686 -104.796 -205.85 + 53 130.159 375 4 0 100.905 -104.983 -85.85 + 53 223.683 375 3 0 100.897 -105.025 -115.85 + 53 107.595 1403 2 1 100.871 -105.1 -144.45 + 53 140.22 375 2 0 100.869 -105.103 -145.85 + 53 187.74 1403 1 1 100.806 -105.173 -174.45 + 53 130.119 374 1 0 100.802 -105.179 -175.85 + 53 113.019 1402 0 1 100.715 -105.316 -204.45 + 53 108.521 374 0 0 100.702 -105.317 -205.85 + 53 14.5405 63 6 1 -167.35 -144.254 -24.6323 + 53 51.6179 64 6 1 -167.35 -144.246 -24.6348 + 53 67.4779 416 2 0 158.7 -96.8029 -146.25 + 53 211.938 417 2 0 158.834 -96.75 -146.075 + 53 603.49 1695 2 1 159.157 -97.1156 -144.85 + 53 132.125 1403 0 1 100.857 -105.083 -204.641 + 53 235.822 375 0 0 100.868 -105.074 -205.85 + 53 21.699 281 0 0 103.865 -123.898 -206.25 + 53 86.5213 280 0 0 103.837 -123.95 -206.211 + 53 55.2303 279 0 0 103.706 -124.15 -206.114 + 53 134.988 278 0 0 103.6 -124.35 -206.046 + 53 70.1822 277 0 0 103.496 -124.55 -205.999 + 53 60.8952 276 0 0 103.337 -124.75 -205.958 + 53 96.1471 275 0 0 103.193 -124.951 -205.904 + 53 61.9859 274 0 0 103.073 -125.15 -205.868 + 53 71.9792 1394 0 1 99.1357 -128.875 -204.85 + 53 6.27648 241 0 0 93.5499 -131.936 -205.85 + 53 138.057 240 0 0 93.5267 -131.95 -205.853 + 53 94.3623 239 0 0 93.1655 -132.15 -205.986 + 53 50.8245 238 0 0 93.0587 -132.35 -206.065 + 53 86.803 237 0 0 93.0068 -132.55 -206.068 + 53 66.254 236 0 0 92.9842 -132.75 -206.092 + 53 65.7373 235 0 0 92.8617 -132.95 -206.136 + 53 126.825 134 0 0 89.6538 -153.24 -206.25 + 53 9.97618 1343 0 1 88.6709 -153.293 -204.85 + 53 157.729 1342 0 1 88.6497 -153.294 -204.831 + 53 110.198 1341 0 1 88.45 -153.268 -204.513 + 53 97.6947 1340 0 1 88.25 -153.043 -204.622 + 53 37.5341 1339 0 1 88.05 -153.02 -204.765 + 53 24.5187 128 0 0 87.2305 -154.37 -205.85 + 53 82.6726 1334 0 1 86.9517 -156.706 -204.85 + 53 103.459 1333 0 1 86.8498 -156.784 -204.727 + 53 175.013 118 0 0 87.1277 -156.544 -205.85 +Number of digits in this event: 27 Using G4ParticleGun... -Particle energy: 9.83187 LIN +Particle energy: 8.24845 LIN Particle: gamma Event: 54 -Number of tracker hits in this event: 4 - 54 176.886 1334 4 1 86.9992 77.2903 -84.85 - 54 63.4623 1286 4 0 88.7921 77.3238 -85.85 - 54 144.93 852 1 1 -9.54625 43.1894 -174.85 - 54 31.964 527 1 1 -74.45 56.2952 -174.759 -Number of digits in this event: 4 +Number of tracker hits in this event: 91 + 54 211.49 1497 9 1 119.644 -60.5332 65.55 + 54 306.252 597 9 0 119.643 -60.5333 64.15 + 54 114.121 1497 8 1 119.625 -60.5345 35.55 + 54 111.498 597 8 0 119.624 -60.5344 34.15 + 54 123.59 1497 7 1 119.613 -60.5226 5.55 + 54 113.989 597 7 0 119.638 -60.525 4.15 + 54 123.323 1499 6 1 120.091 -60.5991 -24.45 + 54 123.207 597 6 0 120.112 -60.5962 -25.85 + 54 125.611 1501 5 1 120.535 -60.6158 -54.45 + 54 103.047 597 5 0 120.528 -60.6196 -55.85 + 54 165.891 1501 4 1 120.412 -60.6986 -84.45 + 54 115.522 596 4 0 120.406 -60.7098 -85.85 + 54 144.538 1500 3 1 120.313 -60.9484 -114.45 + 54 130.243 595 3 0 120.31 -60.9766 -115.85 + 54 218.321 1500 2 1 120.169 -61.622 -144.45 + 54 110.006 591 2 0 120.18 -61.6672 -145.85 + 54 109.189 1501 1 1 120.361 -62.5589 -174.45 + 54 168.088 587 1 0 120.38 -62.5965 -175.85 + 54 100.387 1503 0 1 120.791 -63.3406 -204.45 + 54 131.5 583 0 0 120.804 -63.3695 -205.85 + 54 209.629 1499 2 1 120.15 -61.6583 -144.529 + 54 65.5292 586 2 0 119.31 -62.6939 -145.85 + 54 95.5599 585 2 0 119.216 -62.8501 -146.015 + 54 139.57 1496 7 1 119.55 -60.481 5.53868 + 54 92.2744 1495 7 1 119.35 -60.1987 5.29994 + 54 73.7042 606 7 0 118.297 -58.7883 4.14985 + 54 71.767 607 7 0 118.199 -58.65 4.04276 + 54 122.478 608 7 0 118.071 -58.45 3.89202 + 54 1.71068 609 7 0 117.978 -58.25 3.75456 + 54 51.2488 984 7 0 91.0185 16.9076 3.75004 + 54 94.1307 985 7 0 90.9584 17.05 3.89687 + 54 82.8137 986 7 0 90.8734 17.25 4.07623 + 54 227.284 1351 7 1 90.5044 18.2559 5.15 + 54 202.41 1030 8 0 96.4503 26.1295 33.75 + 54 150.529 1382 8 1 96.5956 26.3432 35.1503 + 54 162.08 1090 9 0 124.287 38.0979 63.75 + 54 49.7153 1091 9 0 124.623 38.2501 64.0473 + 54 5.03073 1528 9 1 125.937 38.9818 65.15 + 54 55.2874 1529 9 1 125.95 38.9892 65.1606 + 54 71.8151 1530 9 1 126.15 39.0903 65.3361 + 54 44.6996 1531 9 1 126.35 39.2171 65.5097 + 54 66.2568 1026 10 0 154.431 25.3653 93.75 + 54 111.397 1025 10 0 154.546 25.25 93.8813 + 54 55.3994 1676 10 1 155.452 24.9479 95.1511 + 54 84.1818 1677 10 1 155.55 24.9105 95.2996 + 54 75.597 1678 10 1 155.751 24.8164 95.3957 + 54 75.0135 1679 10 1 155.95 24.704 95.4497 + 54 6.535 1236 9 0 86.1957 67.25 63.9613 + 54 92.5692 987 7 0 90.8429 17.45 4.07472 + 54 318.951 988 7 0 90.9897 17.6503 4.02534 + 54 0.972833 432 8 0 105.135 -93.7455 33.7503 + 54 41.3078 431 8 0 105.133 -93.7501 33.7543 + 54 137.733 735 10 1 -32.85 130.656 95.423 + 54 11.2356 393 13 0 4.98254 -101.35 184.034 + 54 91.5904 392 13 0 4.93334 -101.55 183.874 + 54 211.382 391 13 0 4.92459 -101.75 183.801 + 54 219.204 1457 3 1 111.747 -144.29 -114.85 + 54 48.4471 1458 3 1 111.75 -144.454 -114.562 + 54 0.420394 1519 8 1 124.149 -60.0462 35.55 + 54 166.543 1520 8 1 124.15 -60.0459 35.5477 + 54 201.157 601 8 0 124.775 -59.8461 34.1491 + 54 149.597 1590 7 1 138.262 -56.2079 5.55 + 54 30.4006 1591 7 1 138.35 -56.2166 5.25975 + 54 135.997 618 7 0 138.672 -56.2585 4.15 + 54 111.409 1638 6 1 147.78 -56.5061 -24.45 + 54 206.183 617 6 0 147.946 -56.6019 -25.85 + 54 72.0784 1652 5 1 150.631 -58.9158 -54.45 + 54 47.4127 1651 5 1 150.55 -58.9891 -54.6868 + 54 192.342 603 5 0 150.092 -59.2803 -55.85 + 54 108.301 1572 4 1 134.625 -63.8426 -84.45 + 54 16.1088 1571 4 1 134.55 -63.8384 -84.787 + 54 128.671 581 4 0 134.286 -63.8162 -85.8503 + 54 147.297 1531 3 1 126.508 -61.5325 -114.45 + 54 14.617 596 3 0 126.171 -60.6763 -115.85 + 54 105.105 597 3 0 126.161 -60.65 -115.889 + 54 37.9328 598 3 0 126.084 -60.45 -116.173 + 54 55.6219 1509 2 1 121.989 -42.4963 -144.45 + 54 135.719 1510 2 1 122.15 -42.369 -144.55 + 54 79.9541 1511 2 1 122.35 -42.1363 -144.708 + 54 55.3583 695 2 0 123.921 -40.9262 -145.85 + 54 116.333 696 2 0 124.041 -40.8499 -145.932 + 54 89.182 697 2 0 124.404 -40.65 -146.136 + 54 184.775 1520 6 1 124.327 -61.9744 -24.4501 + 54 104.885 1521 6 1 124.35 -61.9437 -24.4731 + 54 123.229 1522 6 1 124.55 -61.6973 -24.6406 + 54 101.923 598 6 0 125.162 -60.45 -25.8841 + 54 157.639 599 6 0 125.327 -60.2499 -26.0177 + 54 58.0588 600 6 0 125.689 -60.0499 -26.1331 + 54 33.4179 602 6 0 138.975 -59.5773 -26.25 + 54 111.553 601 6 0 138.896 -59.6508 -26.1934 + 54 219.97 589 6 0 123.89 -62.1467 -25.8502 +Number of digits in this event: 40 Using G4ParticleGun... -Particle energy: 3.54328 LIN +Particle energy: 7.17799 LIN Particle: gamma Event: 55 -Number of tracker hits in this event: 5 - 55 53.7582 1746 0 1 169.424 86.02 -204.45 - 55 98.5448 1747 0 1 169.55 86.0069 -204.622 - 55 132.069 1748 0 1 169.75 85.9501 -204.761 - 55 24.1593 1749 0 1 169.95 85.6531 -204.834 - 55 6.70152 1322 0 0 173.49 84.5271 -205.85 -Number of digits in this event: 4 +Number of tracker hits in this event: 0 +Number of digits in this event: 3 Using G4ParticleGun... -Particle energy: 9.45165 LIN +Particle energy: 7.69752 LIN Particle: gamma Event: 56 -Number of tracker hits in this event: 212 - 56 256.705 797 11 1 -20.5536 56.9111 125.55 - 56 349.769 1184 11 0 -20.554 56.9118 124.15 - 56 388.76 797 10 1 -20.567 56.9263 95.55 - 56 334.718 1184 10 0 -20.5671 56.9279 94.15 - 56 520.795 797 9 1 -20.5632 56.9569 65.55 - 56 363.775 1184 9 0 -20.5628 56.959 64.15 - 56 484.364 797 8 1 -20.5463 57.0011 35.55 - 56 576.338 1184 8 0 -20.5466 57.0045 34.15 - 56 351.207 797 7 1 -20.5496 57.0839 5.55 - 56 399.17 1185 7 0 -20.5501 57.0867 4.15 - 56 841.35 797 6 1 -20.5499 57.1286 -24.45 - 56 505.323 1185 6 0 -20.5523 57.1303 -25.85 - 56 352.25 797 5 1 -20.586 57.1798 -54.45 - 56 469.499 1185 5 0 -20.5857 57.1854 -55.85 - 56 663.187 797 4 1 -20.5832 57.3085 -84.45 - 56 650.774 1186 4 0 -20.5854 57.3179 -85.85 - 56 226.323 797 3 1 -20.6165 57.5288 -114.45 - 56 239.222 1187 3 0 -20.6158 57.5395 -115.85 - 56 128.579 797 2 1 -20.6083 57.7626 -144.45 - 56 313.2 1188 2 0 -20.6088 57.7737 -145.85 - 56 154.016 797 1 1 -20.6187 58.0138 -174.45 - 56 166.999 1189 1 0 -20.6142 58.0281 -175.85 - 56 335.365 797 0 1 -20.5269 58.306 -204.45 - 56 115.253 1191 0 0 -20.5225 58.3198 -205.85 - 56 76.7729 796 1 1 -20.6839 57.7904 -174.45 - 56 84.0558 795 1 1 -20.85 57.8546 -174.665 - 56 263.698 1191 1 0 -21.8496 58.3032 -175.85 - 56 55.4476 1192 1 0 -22.1348 58.45 -176.145 - 56 6.55985 667 0 1 -46.6258 71.2727 -204.45 - 56 79.0214 666 0 1 -46.65 71.2663 -204.48 - 56 76.0617 665 0 1 -46.8507 71.1997 -204.657 - 56 195.7 1254 0 0 -47.7681 71.039 -205.85 - 56 225.686 1189 6 0 -20.339 57.9636 -25.8503 - 56 4.19851 801 7 1 -19.6607 55.128 5.5498 - 56 120.829 802 7 1 -19.65 55.1195 5.53332 - 56 54.2157 803 7 1 -19.45 54.9711 5.24934 - 56 147.135 1171 7 0 -18.6299 54.4162 4.15 - 56 32.8809 925 6 1 5.13928 44.6393 -24.45 - 56 57.6313 926 6 1 5.25 44.6478 -24.5014 - 56 65.5114 927 6 1 5.45 44.6738 -24.5939 - 56 115.426 928 6 1 5.65021 44.6992 -24.6738 - 56 70.9844 929 6 1 5.85 44.7212 -24.7488 - 56 28.3976 930 6 1 6.05 44.7366 -24.8152 - 56 535.281 1123 6 0 8.63633 44.8253 -25.85 - 56 949.716 1124 6 0 9.80099 44.85 -26.0987 - 56 215.676 903 6 0 156.077 0.763017 -26.25 - 56 136.883 902 6 0 156.357 0.65 -26.1357 - 56 109.742 901 6 0 156.761 0.449979 -25.9511 - 56 33.65 1702 6 1 160.686 -0.69656 -24.85 - 56 61.861 1703 6 1 160.75 -0.715234 -24.8322 - 56 49.699 1704 6 1 160.95 -0.761442 -24.7678 - 56 53.5124 1705 6 1 161.15 -0.801204 -24.7098 - 56 68.1663 1706 6 1 161.35 -0.855738 -24.6401 - 56 68.7897 1707 6 1 161.55 -0.908215 -24.5726 - 56 58.6714 1708 6 1 161.75 -0.971686 -24.5182 - 56 20.3524 1709 6 1 161.95 -1.03982 -24.4693 - 56 60.5008 766 6 0 113.716 -26.6878 -26.25 - 56 106.237 796 7 1 -20.6876 56.8871 5.55 - 56 136.671 1184 7 0 -20.683 56.8904 4.15 - 56 14.7093 1184 6 0 -20.5852 57.0483 -25.85 - 56 149.531 800 5 1 -20.0164 57.9728 -54.45 - 56 225.945 1189 5 0 -19.9746 57.966 -55.85 - 56 109.839 805 4 1 -18.9514 57.6398 -84.45 - 56 328.407 1187 4 0 -18.9019 57.5841 -85.85 - 56 251.499 812 3 1 -17.602 56.3938 -114.45 - 56 106.768 1181 3 0 -17.5067 56.3023 -115.85 - 56 162.867 823 2 1 -15.2652 54.3846 -144.45 - 56 124.374 1171 2 0 -15.2101 54.2736 -145.85 - 56 37.9437 1170 2 0 -15.1952 54.25 -146.181 - 56 375.451 834 1 1 -13.1916 52.394 -174.45 - 56 111.164 1162 1 0 -13.1377 52.4862 -175.85 - 56 58.0896 836 0 1 -12.661 54.9347 -204.45 - 56 62.8262 837 0 1 -12.65 54.9518 -204.612 - 56 180.656 1175 0 0 -12.5917 55.0891 -205.851 - 56 228.274 1169 2 0 -15.5759 54.05 -145.96 - 56 159.957 771 1 1 -25.8045 42.7857 -174.45 - 56 104.485 1111 1 0 -25.9496 42.3931 -175.85 - 56 199.813 741 0 1 -31.7431 31.8844 -204.45 - 56 147.351 740 0 1 -31.8501 31.5623 -204.617 - 56 166.283 1046 0 0 -32.3294 29.4064 -205.85 - 56 95.8785 1045 0 0 -32.3584 29.2498 -205.937 - 56 63.0135 1044 0 0 -32.4142 29.05 -206.051 - 56 49.792 1043 0 0 -32.4977 28.85 -206.161 - 56 190.58 770 1 1 -25.85 42.7797 -174.511 - 56 216.887 769 1 1 -26.0501 42.6316 -174.67 - 56 158.418 796 6 1 -20.8054 57.0804 -24.45 - 56 201.959 795 5 1 -20.8569 57.0409 -54.45 - 56 286.92 1184 5 0 -20.8624 57.0287 -55.85 - 56 227.09 795 4 1 -20.9644 56.779 -84.45 - 56 222.959 1183 4 0 -20.9754 56.7721 -85.85 - 56 260.027 794 3 1 -21.2121 56.6657 -114.451 - 56 136.848 1182 3 0 -21.2476 56.6322 -115.85 - 56 111.705 791 2 1 -21.8209 55.9105 -144.45 - 56 116.068 1179 2 0 -21.8351 55.878 -145.85 - 56 132.436 787 1 1 -22.5229 55.3965 -174.45 - 56 77.3405 1176 1 0 -22.4928 55.4407 -175.85 - 56 14.362 1177 1 0 -22.486 55.45 -176.188 - 56 108.077 790 0 1 -21.9364 56.1236 -204.45 - 56 159.013 1179 0 0 -21.9374 55.9903 -205.85 - 56 161.404 790 2 1 -21.8504 55.9287 -144.518 - 56 307.604 796 5 1 -20.8499 56.9045 -54.6018 - 56 14.6402 1180 5 0 -18.1988 56.0646 -55.85 - 56 9.73258 1179 5 0 -18.1681 56.05 -55.8508 - 56 15.1506 824 5 1 -15.0899 54.0159 -54.8497 - 56 3.75224 825 5 1 -15.05 53.9942 -54.8415 - 56 23.582 1166 5 0 -13.8984 53.2816 -55.8502 - 56 262.251 1165 5 0 -13.8668 53.25 -55.8642 - 56 339.156 1186 3 0 -20.5817 57.3737 -115.85 - 56 224.125 799 2 1 -20.0669 58.742 -144.45 - 56 114.257 1193 2 0 -20.0459 58.7215 -145.85 - 56 99.3701 801 1 1 -19.8297 58.7523 -174.45 - 56 139.134 1193 1 0 -19.7805 58.6782 -175.85 - 56 98.5949 805 0 1 -18.9817 56.9045 -204.45 - 56 127.794 1183 0 0 -19.0097 56.8294 -205.851 - 56 155.112 1153 3 0 -39.9158 50.7805 -116.25 - 56 108.227 800 3 1 -20.0148 57.4994 -114.45 - 56 111.467 806 2 1 -18.6725 57.8083 -144.45 - 56 194.142 1189 2 0 -18.638 57.8534 -145.85 - 56 108.395 811 1 1 -17.8484 58.7641 -174.45 - 56 127.65 1194 1 0 -17.7486 58.8549 -175.851 - 56 43.6599 825 0 1 -14.9215 61.3428 -204.45 - 56 86.6911 826 0 1 -14.85 61.3847 -204.576 - 56 25.7272 1208 0 0 -14.1267 61.8202 -205.85 - 56 119.631 1209 0 0 -14.0785 61.85 -205.935 - 56 12.142 1405 1 0 -22.9956 101.35 -175.867 - 56 104.832 794 4 1 -21.0511 57.2499 -84.45 - 56 262.848 792 2 1 -21.5018 57.3442 -144.45 - 56 233.264 1186 2 0 -21.5153 57.3498 -145.85 - 56 142.394 791 1 1 -21.7906 57.4469 -174.45 - 56 117.918 1187 1 0 -21.8071 57.4544 -175.85 - 56 154.357 789 0 1 -22.1553 57.5916 -204.45 - 56 516.315 1187 0 0 -22.178 57.5942 -205.85 - 56 132.746 541 5 0 -77.5578 -71.7103 -56.25 - 56 146.782 540 5 0 -77.5403 -71.85 -56.2018 - 56 130.267 793 2 1 -21.3966 57.2748 -144.45 - 56 97.1859 780 1 1 -23.8588 55.538 -174.45 - 56 45.448 779 1 1 -24.05 55.3899 -174.709 - 56 138.619 1174 1 0 -24.7824 54.9269 -175.85 - 56 56.0178 1173 1 0 -24.9167 54.85 -176.06 - 56 118.222 1167 0 0 -31.5643 53.508 -205.85 - 56 91.6731 1181 2 0 -21.6325 56.429 -145.85 - 56 41.9267 1180 2 0 -21.6555 56.25 -146.136 - 56 264.683 999 2 0 -12.4859 20.0181 -146.25 - 56 149.961 835 2 1 -12.8861 20.0316 -144.85 - 56 108.706 834 2 1 -13.05 19.9993 -144.462 - 56 87.5931 833 2 1 -13.25 19.7185 -144.595 - 56 107.257 832 2 1 -13.45 19.5038 -144.666 - 56 105.499 831 2 1 -13.65 19.293 -144.669 - 56 91.4851 830 2 1 -13.85 19.2671 -144.612 - 56 141.387 1186 6 0 -20.4634 57.2631 -25.8503 - 56 28.2476 807 5 1 -18.454 57.9169 -54.4501 - 56 109.684 808 5 1 -18.45 57.9188 -54.5048 - 56 117.328 815 4 1 -16.9081 58.6773 -84.45 - 56 112.486 1194 4 0 -16.8273 58.8693 -85.85 - 56 144.454 825 3 1 -14.9285 62.585 -114.45 - 56 104.413 1213 3 0 -14.7792 62.7272 -115.85 - 56 126.756 843 2 1 -11.3478 65.5699 -144.45 - 56 164.838 1228 2 0 -11.2392 65.7867 -145.85 - 56 188.507 854 1 1 -9.16845 69.8912 -174.45 - 56 130.283 1250 1 0 -9.10264 70.0544 -175.85 - 56 27.1298 861 0 1 -7.66236 73.2518 -204.45 - 56 141.266 862 0 1 -7.65 73.252 -204.537 - 56 138.836 1265 0 0 -7.46242 73.2396 -205.85 - 56 13.3123 1286 6 0 61.3319 77.3046 -26.25 - 56 200.369 1186 5 0 -20.597 57.2759 -55.8506 - 56 88.7272 801 3 1 -19.6613 58.8893 -114.45 - 56 74.5696 802 3 1 -19.65 58.893 -114.576 - 56 113.985 1194 3 0 -19.5331 58.9065 -115.85 - 56 113.943 816 2 1 -16.8162 59.7692 -144.45 - 56 109.182 1198 2 0 -16.3982 59.7459 -145.85 - 56 114.527 873 1 1 -5.39347 59.6971 -174.45 - 56 96.6742 1198 1 0 -5.39403 59.6721 -175.85 - 56 113.128 898 0 1 -0.393298 59.7309 -204.45 - 56 110.781 1198 0 0 0.117264 59.7706 -205.85 - 56 125.368 806 4 1 -18.7579 57.0224 -84.4502 - 56 148.17 835 3 1 -12.931 52.559 -114.45 - 56 286.692 1161 3 0 -12.7598 52.3171 -115.85 - 56 119.237 852 2 1 -9.65 48.2865 -144.45 - 56 24.1025 1141 2 0 -9.61644 48.2528 -145.851 - 56 140.896 1140 2 0 -9.61388 48.25 -145.94 - 56 32.3869 860 1 1 -7.89658 47.7339 -174.45 - 56 94.5976 861 1 1 -7.84995 47.7241 -174.545 - 56 121.305 1137 1 0 -7.15946 47.5514 -175.85 - 56 4.17168 936 0 1 7.44486 42.2648 -204.45 - 56 127.934 937 0 1 7.45 42.2624 -204.46 - 56 14.3663 938 0 1 7.65 42.1666 -204.829 - 56 106.323 1109 0 0 8.20473 41.9218 -205.85 - 56 43.1795 1108 0 0 8.34874 41.8498 -206.121 - 56 12.7435 699 8 1 -40.1995 67.8279 35.55 - 56 125.705 798 7 1 -20.4196 56.8402 5.55 - 56 145.404 1183 7 0 -20.4244 56.8353 4.15 - 56 114.124 1183 6 0 -20.507 56.7682 -25.85 - 56 108.53 793 5 1 -21.2776 57.0754 -54.45 - 56 123.771 790 4 1 -21.9849 56.3885 -84.45 - 56 150.653 1181 4 0 -22.0042 56.3467 -85.85 - 56 128.847 788 3 1 -22.3964 55.3867 -114.45 - 56 214.399 1176 3 0 -22.4014 55.3246 -115.85 - 56 118.192 787 2 1 -22.5012 54.0762 -144.45 - 56 637.593 784 1 1 -23.1486 52.2177 -174.45 - 56 215.11 1160 1 0 -23.1796 52.1197 -175.85 - 56 111.387 780 0 1 -23.8725 50.0626 -204.45 - 56 213.511 1149 0 0 -23.9337 49.9404 -205.85 - 56 116.361 794 0 1 -21.2404 50.2213 -204.45 - 56 21.5803 793 0 1 -21.25 50.1585 -204.776 - 56 122.024 1157 1 0 -23.3452 51.6448 -175.85 - 56 150.512 756 0 1 -28.7552 36.1398 -204.45 - 56 14.94 1075 0 0 -28.784 35.0847 -205.85 - 56 92.2845 1074 0 0 -28.784 35.05 -205.897 - 56 17.509 1073 0 0 -28.7805 34.85 -206.184 - 56 74.9463 1177 3 0 -22.458 55.45 -116.085 - 56 24.0336 1178 3 0 -22.5149 55.65 -116.233 - 56 58.2373 1087 0 1 37.45 48.2395 -204.628 -Number of digits in this event: 107 -Using G4ParticleGun... -Particle energy: 4.07248 LIN +Number of tracker hits in this event: 0 +Number of digits in this event: 3 +Using G4ParticleGun... +Particle energy: 4.26634 LIN Particle: gamma Event: 57 -Number of tracker hits in this event: 91 - 57 271.596 734 10 1 -33.2233 96.6077 95.55 - 57 324.1 1382 10 0 -33.2268 96.604 94.15 - 57 100.516 733 9 1 -33.3184 96.545 65.55 - 57 140.347 1381 9 0 -33.3247 96.5322 64.15 - 57 225.522 733 8 1 -33.4159 96.2387 35.55 - 57 155.269 1380 8 0 -33.4209 96.2216 34.15 - 57 186.314 732 7 1 -33.5444 95.8575 5.55 - 57 134.624 1378 7 0 -33.5538 95.8417 4.15 - 57 132.9 731 6 1 -33.7337 95.5137 -24.45 - 57 193.919 1376 6 0 -33.7486 95.5059 -25.85 - 57 129.062 729 5 1 -34.0546 95.3826 -54.45 - 57 405.456 1376 5 0 -34.0725 95.3766 -55.85 - 57 122.269 728 4 1 -34.3639 95.2646 -84.45 - 57 114.33 1375 4 0 -34.3555 95.2766 -85.85 - 57 110.489 729 3 1 -34.0953 95.4832 -114.45 - 57 111.078 1376 3 0 -34.0817 95.5309 -115.85 - 57 116.425 731 2 1 -33.8078 96.4747 -144.45 - 57 132.077 1381 2 0 -33.7854 96.4707 -145.85 - 57 128.898 732 1 1 -33.5196 96.3581 -174.45 - 57 180.61 1380 1 0 -33.5057 96.3444 -175.85 - 57 129.4 735 0 1 -32.9223 96.1078 -204.45 - 57 227.768 1379 0 0 -32.8504 96.0764 -205.85 - 57 34.0064 728 5 1 -34.441 95.5846 -54.85 - 57 81.0464 727 5 1 -34.4502 95.5858 -54.7663 - 57 118.243 726 5 1 -34.65 95.6275 -54.5823 - 57 248.794 722 1 1 -35.5535 94.843 -174.45 - 57 322.678 1373 1 0 -35.4275 94.851 -175.85 - 57 31.5071 762 0 1 -27.5084 88.4679 -204.45 - 57 109.281 763 0 1 -27.45 88.4489 -204.54 - 57 140.536 1340 0 0 -26.6531 88.1627 -205.85 - 57 1.05165 1327 0 0 -14.035 85.6253 -206.25 - 57 308.111 1328 0 0 -14.0182 85.65 -206.14 - 57 34.2917 1250 1 0 59.3348 70.07 -176.25 - 57 36.7305 1196 1 0 34.0668 59.293 -176.25 - 57 38.1923 723 1 1 -35.45 94.6591 -174.753 - 57 53.6854 1368 1 0 -34.7025 93.8742 -175.85 - 57 103.667 1367 1 0 -34.5843 93.75 -176.015 - 57 193.718 1246 1 0 -37.9436 69.3595 -176.25 - 57 98.9182 707 1 1 -38.5674 69.3736 -174.85 - 57 153.98 706 1 1 -38.65 69.3534 -174.666 - 57 29.1538 705 1 1 -38.9258 69.2076 -174.45 - 57 89.1697 1242 1 0 -38.3809 68.6409 -175.85 - 57 49.5008 1241 1 0 -38.3115 68.45 -176.141 - 57 114.02 1330 1 0 22.2882 86.2025 -176.25 - 57 142.287 1331 1 0 22.5592 86.2502 -176.09 - 57 99.1753 1012 1 1 22.537 86.0156 -174.85 - 57 37.4343 1011 1 1 22.45 85.977 -174.802 - 57 111.936 1332 1 0 20.9582 86.5781 -175.85 - 57 228.779 1333 1 0 20.8811 86.65 -175.928 - 57 171.295 1386 10 0 -33.0354 97.4047 94.15 - 57 109.643 734 9 1 -33.1841 96.6345 65.55 - 57 132.582 1382 9 0 -33.181 96.6363 64.15 - 57 123.042 734 8 1 -33.1225 96.6653 35.55 - 57 136.359 1382 8 0 -33.1232 96.6651 34.15 - 57 123.252 734 7 1 -33.1388 96.6476 5.55 - 57 109.838 1382 7 0 -33.1382 96.6441 4.15 - 57 308.481 734 6 1 -33.1076 96.5626 -24.45 - 57 101.424 1382 6 0 -33.1023 96.5598 -25.85 - 57 196.347 735 5 1 -32.9954 96.5036 -54.45 - 57 125.117 1381 5 0 -32.9857 96.4974 -55.85 - 57 144.346 736 4 1 -32.7873 96.3794 -84.45 - 57 180.99 1381 4 0 -32.7838 96.3706 -85.85 - 57 133.424 736 3 1 -32.715 96.2066 -114.45 - 57 167.498 1380 3 0 -32.7041 96.192 -115.85 - 57 137.969 737 2 1 -32.5208 95.8574 -144.45 - 57 248.968 1378 2 0 -32.5116 95.8396 -145.85 - 57 114.212 738 1 1 -32.3402 95.5403 -174.45 - 57 112.626 1376 1 0 -32.3217 95.5206 -175.85 - 57 133.874 740 0 1 -31.9389 95.1198 -204.45 - 57 133.887 1374 0 0 -31.9139 95.0998 -205.85 - 57 226.717 1128 0 0 -1.98529 45.8098 -206.25 - 57 55.1192 1042 1 0 -89.8533 28.65 -176.048 - 57 111.748 1043 1 0 -89.8851 28.6501 -175.984 - 57 175.378 55 2 1 -169.013 2.18501 -144.85 - 57 178.301 905 2 0 -168.72 1.19657 -145.85 - 57 2.89203 904 2 0 -168.812 1.05 -146.234 - 57 61.9092 761 2 0 -177.177 -27.7536 -146.249 - 57 317.186 760 2 0 -177.152 -27.85 -146.155 - 57 202.606 733 6 1 -33.25 96.5896 -24.5462 - 57 130.348 733 1 1 -33.3161 96.5407 -174.45 - 57 134.232 1382 1 0 -33.1218 96.6212 -175.85 - 57 101.816 750 0 1 -29.9842 97.0101 -204.45 - 57 122.667 1383 0 0 -30.0974 96.7905 -205.85 - 57 55.6916 1382 0 0 -30.1199 96.75 -206.109 - 57 52.2168 734 1 1 -33.2298 96.5063 -174.451 - 57 64.6791 735 1 1 -33.0496 96.4376 -174.575 - 57 70.7638 736 1 1 -32.85 96.3561 -174.694 - 57 52.1773 737 1 1 -32.6496 96.3026 -174.788 - 57 94.0023 1366 1 0 -28.5644 93.5211 -175.85 - 57 213.856 1365 1 0 -28.3123 93.3499 -175.925 - 57 127.394 1381 10 0 -33.1936 96.55 93.7788 -Number of digits in this event: 54 -Using G4ParticleGun... -Particle energy: 1.812 LIN +Number of tracker hits in this event: 0 +Number of digits in this event: 2 +Using G4ParticleGun... +Particle energy: 9.65077 LIN Particle: gamma Event: 58 -Number of tracker hits in this event: 31 - 58 232.108 404 6 1 -99.2466 -91.5083 -24.45 - 58 237.658 443 6 0 -99.2404 -91.5087 -25.85 - 58 280.997 405 5 1 -99.0912 -91.4953 -54.45 - 58 240.132 443 5 0 -99.0858 -91.5016 -55.85 - 58 168.298 405 4 1 -98.9808 -91.6372 -84.45 - 58 121.952 442 4 0 -98.9786 -91.6397 -85.85 - 58 232.308 406 3 1 -98.8986 -91.697 -114.45 - 58 124.158 442 3 0 -98.8951 -91.7068 -115.85 - 58 105.649 406 2 1 -98.7693 -91.8887 -144.45 - 58 107.568 441 2 0 -98.7567 -91.8995 -145.85 - 58 137.004 408 1 1 -98.4917 -92.1085 -174.45 - 58 119.347 440 1 0 -98.4758 -92.1238 -175.85 - 58 37.1282 409 0 1 -98.1509 -92.4014 -204.45 - 58 74.258 410 0 1 -98.15 -92.4022 -204.537 - 58 113.843 438 0 0 -98.1388 -92.4138 -205.85 - 58 85.0766 406 5 1 -98.9499 -91.6507 -54.7736 - 58 14.002 441 5 0 -97.8338 -91.9474 -55.8501 - 58 143.752 440 5 0 -97.8233 -91.95 -55.858 - 58 27.3417 414 5 1 -97.1697 -91.2193 -54.85 - 58 42.449 415 5 1 -97.15 -91.2206 -54.8362 - 58 103.898 404 5 1 -99.2692 -91.498 -54.45 - 58 138.424 404 4 1 -99.258 -91.0811 -84.45 - 58 161.941 445 4 0 -99.24 -91.0535 -85.85 - 58 74.7509 448 3 0 -98.7465 -90.3602 -115.85 - 58 60.0553 449 3 0 -98.7391 -90.35 -116.12 - 58 182.467 411 2 1 -97.9391 -89.3834 -144.45 - 58 114.584 453 2 0 -97.8766 -89.342 -145.85 - 58 122.834 418 1 1 -96.5382 -88.4271 -174.45 - 58 118.285 458 1 0 -96.4991 -88.3605 -175.85 - 58 114.656 422 0 1 -95.7124 -87.1493 -204.45 - 58 239.467 464 0 0 -95.6926 -87.0828 -205.85 -Number of digits in this event: 17 +Number of tracker hits in this event: 1 + 58 10.0657 1327 2 1 85.5798 32.7156 -144.85 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 7.78098 LIN +Particle energy: 7.14455 LIN Particle: gamma Event: 59 -Number of tracker hits in this event: 23 - 59 64.236 990 1 0 33.1807 18.2195 -176.25 - 59 31.4257 195 3 1 -140.95 17.8734 -114.789 - 59 33.2023 194 3 1 -141.15 17.9288 -114.549 - 59 57.451 193 3 1 -141.391 17.9869 -114.45 - 59 145.384 192 3 1 -141.55 18.1855 -114.49 - 59 114.341 191 3 1 -141.75 18.5358 -114.515 - 59 99.6254 190 3 1 -141.95 18.7545 -114.554 - 59 74.7773 189 3 1 -142.15 18.9736 -114.69 - 59 134.389 188 3 1 -142.35 19.1371 -114.785 - 59 70.9084 1009 3 0 -143.609 21.8596 -115.85 - 59 115.139 1010 3 0 -143.744 22.0504 -115.917 - 59 99.4074 1011 3 0 -144.012 22.2503 -115.98 - 59 45.3711 1012 3 0 -144.35 22.45 -115.939 - 59 91.5541 174 3 1 -145.341 23.3045 -114.85 - 59 178.735 173 3 1 -145.35 23.3124 -114.84 - 59 127.388 172 3 1 -145.55 23.4533 -114.628 - 59 224.333 175 3 1 -145.15 23.7716 -114.567 - 59 186.358 176 3 1 -144.95 24.0659 -114.563 - 59 71.4263 929 12 1 5.933 72.8014 155.15 - 59 180.129 928 12 1 5.84994 72.697 155.411 - 59 98.6544 458 1 0 -41.4658 -88.3122 -176.25 - 59 89.0764 691 1 1 -41.7568 -88.2852 -174.85 - 59 59.925 690 1 1 -41.85 -88.3104 -174.619 -Number of digits in this event: 10 +Number of tracker hits in this event: 2 + 59 137.018 1121 0 0 7.30535 44.3587 -206.25 + 59 252.929 1120 0 0 7.32144 44.25 -206.052 +Number of digits in this event: 5 Using G4ParticleGun... -Particle energy: 1.20867 LIN +Particle energy: 6.81481 LIN Particle: gamma Event: 60 -Number of tracker hits in this event: 42 - 60 249.503 1354 8 1 90.9948 8.57972 35.55 - 60 249.336 942 8 0 90.9983 8.57338 34.15 - 60 299.632 1354 7 1 91.1155 8.44007 5.55 - 60 107.075 941 7 0 91.1205 8.42671 4.15 - 60 121.851 1355 6 1 91.2481 8.11198 -24.45 - 60 120.122 940 6 0 91.2556 8.10267 -25.85 - 60 143.297 1356 5 1 91.4021 7.92049 -54.45 - 60 164.186 939 5 0 91.4542 7.92223 -55.85 - 60 237.677 1361 4 1 92.4655 7.87785 -84.45 - 60 202.576 939 4 0 92.5322 7.88014 -85.85 - 60 104.052 1369 3 1 93.9945 7.63806 -114.45 - 60 118.943 937 3 0 94.0481 7.62268 -115.85 - 60 2.27221 1376 2 1 95.5488 7.37452 -144.45 - 60 125.038 1377 2 1 95.55 7.37433 -144.459 - 60 229.287 936 2 0 95.7327 7.34814 -145.85 - 60 137.499 1385 1 1 97.3394 5.68091 -174.45 - 60 122.104 927 1 0 97.3335 5.5918 -175.85 - 60 200.019 1385 0 1 97.2278 3.84721 -204.45 - 60 132.854 918 0 0 97.2443 3.8253 -205.85 - 60 67.1212 1382 0 1 96.75 4.10524 -204.645 - 60 124.597 943 7 0 90.956 8.66912 4.15 - 60 123.114 1354 6 1 90.9694 8.77919 -24.45 - 60 311.009 943 6 0 90.9845 8.77911 -25.85 - 60 195.873 1355 5 1 91.305 8.8171 -54.45 - 60 120.144 943 5 0 91.316 8.82357 -55.85 - 60 108.326 1357 4 1 91.5842 8.94004 -84.45 - 60 106.802 943 4 0 91.7383 8.77407 -85.85 - 60 121.601 1373 3 1 94.8688 5.2689 -114.45 - 60 22.0537 925 3 0 94.9974 5.06044 -115.85 - 60 125.19 924 3 0 95.004 5.05 -115.919 - 60 14.5204 1389 2 1 98.1432 0.233749 -144.45 - 60 156.066 1390 2 1 98.1501 0.226089 -144.487 - 60 72.144 899 2 0 98.4019 -0.05 -145.971 - 60 153.171 1416 1 1 103.381 -5.1583 -174.45 - 60 47.6172 873 1 0 103.573 -5.41555 -175.85 - 60 116.528 872 1 0 103.599 -5.45 -176.037 - 60 150.677 1437 0 1 107.551 -10.9997 -204.45 - 60 18.5612 843 0 0 107.773 -11.4286 -205.85 - 60 232.789 842 0 0 107.783 -11.45 -205.92 - 60 263.452 841 0 0 107.855 -11.6501 -206.083 - 60 1.35654 916 6 0 120.668 3.36398 -26.25 - 60 8.57932 963 6 0 130.65 12.661 -26.25 -Number of digits in this event: 29 +Number of tracker hits in this event: 19 + 60 225.331 758 1 1 -28.3013 136.454 -174.45 + 60 215.403 1581 1 0 -28.3004 136.461 -175.85 + 60 168.22 759 0 1 -28.1408 136.535 -204.45 + 60 128.529 1582 0 0 -28.1823 136.56 -205.85 + 60 213.309 758 0 1 -28.2908 136.44 -204.45 + 60 113.311 1581 0 0 -28.29 136.444 -205.85 + 60 40.9433 676 5 1 -44.807 -53.4824 -54.85 + 60 27.5075 16 8 1 -176.758 -24.6664 35.15 + 60 119.684 1290 6 0 64.5546 78.25 -26.1843 + 60 13.7486 1786 6 0 -107.06 177.515 -26.2494 + 60 172.542 1787 6 0 -107.08 177.55 -26.1989 + 60 356.787 360 6 1 -108.033 177.991 -24.85 + 60 12.0326 359 6 1 -108.179 178.148 -24.45 + 60 190.525 1792 6 0 -107.231 178.61 -25.85 + 60 74.1831 1793 6 0 -107.138 178.75 -26.0662 + 60 435.629 361 6 1 -107.811 178.661 -24.85 + 60 59.483 292 6 1 -121.623 179.326 -24.85 + 60 121.349 1000 3 0 -8.86821 20.2302 -116.25 + 60 182.466 1001 3 0 -8.95233 20.25 -116.095 +Number of digits in this event: 14 Using G4ParticleGun... -Particle energy: 5.30167 LIN +Particle energy: 2.46187 LIN Particle: gamma Event: 61 -Number of tracker hits in this event: 14 - 61 211.023 453 2 1 -89.4448 98.5085 -144.45 - 61 219.487 1391 2 0 -89.4482 98.5111 -145.85 - 61 141.138 452 1 1 -89.5443 98.5539 -174.45 - 61 155.679 1392 1 0 -89.5534 98.5537 -175.85 - 61 121.394 451 0 1 -89.7286 98.5895 -204.45 - 61 125.136 1392 0 0 -89.7318 98.5819 -205.85 - 61 99.5059 453 1 1 -89.4487 98.5205 -174.45 - 61 147.162 1391 1 0 -89.449 98.5205 -175.85 - 61 187.874 452 0 1 -89.4635 98.5254 -204.45 - 61 169.119 1391 0 0 -89.4609 98.5251 -205.85 - 61 194.703 1447 1 0 -171.372 109.66 -176.25 - 61 144.318 35 1 1 -172.991 109.12 -174.85 - 61 261.325 1444 1 0 -172.32 108.996 -175.85 - 61 71.6068 453 0 1 -89.45 98.5297 -204.489 -Number of digits in this event: 15 +Number of tracker hits in this event: 0 +Number of digits in this event: 1 Using G4ParticleGun... -Particle energy: 4.49995 LIN +Particle energy: 6.5354 LIN Particle: gamma Event: 62 -Number of tracker hits in this event: 0 -Number of digits in this event: 2 +Number of tracker hits in this event: 62 + 62 232.517 671 5 1 -45.7902 6.21841 -54.45 + 62 399.97 930 5 0 -45.7836 6.22001 -55.85 + 62 227.29 671 4 1 -45.652 6.25313 -84.45 + 62 5.14226 672 4 1 -45.65 6.2584 -84.8245 + 62 235.624 931 4 0 -45.6435 6.27289 -85.85 + 62 220.555 672 3 1 -45.634 6.51694 -114.45 + 62 149.489 932 3 0 -45.6485 6.54696 -115.85 + 62 251.864 670 2 1 -45.8972 7.15073 -144.45 + 62 108.204 935 2 0 -45.8986 7.19555 -145.85 + 62 107.483 670 1 1 -45.9107 8.0448 -174.45 + 62 96.6238 940 1 0 -45.9008 8.0888 -175.85 + 62 310.752 671 0 1 -45.7231 9.03508 -204.45 + 62 216.799 945 0 0 -45.7033 9.08575 -205.85 + 62 17.4092 940 0 0 -45.4906 8.07799 -205.85 + 62 57.1776 939 0 0 -45.4834 8.05 -205.886 + 62 61.0772 938 0 0 -45.5068 7.85 -206.025 + 62 57.5224 937 0 0 -45.5032 7.64996 -206.087 + 62 74.141 936 0 0 -45.4571 7.45 -206.113 + 62 103.515 935 0 0 -45.2913 7.24986 -206.095 + 62 40.2765 934 0 0 -45.1415 7.05 -206.183 + 62 58.2836 738 0 0 18.8422 -32.3649 -206.25 + 62 126.235 737 0 0 18.9809 -32.45 -206.206 + 62 56.757 736 0 0 19.1441 -32.6501 -205.997 + 62 106.849 1013 0 1 22.7707 -39.6692 -204.85 + 62 178.328 1014 0 1 22.85 -39.9299 -204.784 + 62 103.352 1015 0 1 23.0501 -40.1404 -204.675 + 62 140.785 1016 0 1 23.2501 -40.2283 -204.698 + 62 73.4398 1017 0 1 23.45 -40.2183 -204.794 + 62 267.302 701 0 0 24.3644 -39.7731 -205.85 + 62 186.659 695 0 1 -40.8635 -17.1196 -204.45 + 62 68.1019 698 1 0 -6.06054 -40.25 -176.043 + 62 135.369 671 2 1 -45.8497 7.15127 -144.497 + 62 77.6184 783 12 1 -23.3872 147.881 155.15 + 62 239.839 784 12 1 -23.25 148.132 155.513 + 62 139.442 564 0 1 -67.25 -24.4994 -204.677 + 62 407.177 671 3 1 -45.8076 6.24016 -114.45 + 62 134.403 930 3 0 -45.903 6.09672 -115.85 + 62 112.271 664 2 1 -47.0938 2.8365 -144.45 + 62 119.707 912 2 0 -47.2012 2.59475 -145.851 + 62 73.7713 651 1 1 -49.8033 -2.57528 -174.45 + 62 73.9412 650 1 1 -49.85 -2.62667 -174.742 + 62 101.621 886 1 0 -50.0297 -2.82073 -175.85 + 62 282.907 885 1 0 -50.057 -2.85 -176.016 + 62 120.058 626 0 1 -54.6889 -7.90953 -204.45 + 62 43.5933 859 0 0 -54.865 -8.22566 -205.85 + 62 84.2623 858 0 0 -54.8787 -8.25 -205.96 + 62 19.1657 490 3 0 -82.7101 -81.8953 -116.25 + 62 189.76 491 3 0 -82.7057 -81.8497 -116.241 + 62 6.50015 806 4 0 66.5518 -18.7859 -86.25 + 62 268.515 931 3 0 -45.8488 6.2533 -115.85 + 62 495.438 666 2 1 -46.6623 6.53982 -144.45 + 62 157.933 932 2 0 -46.6411 6.54342 -145.85 + 62 101.119 669 1 1 -46.2362 6.41778 -174.45 + 62 102.495 931 1 0 -46.2346 6.39061 -175.85 + 62 135.031 669 0 1 -46.1471 5.81626 -204.45 + 62 132.722 928 0 0 -46.2057 5.78409 -205.85 + 62 139.691 931 2 0 -45.7004 6.38198 -145.85 + 62 121.424 671 1 1 -45.67 6.45432 -174.45 + 62 189.055 932 1 0 -45.6739 6.45166 -175.85 + 62 124.599 931 0 0 -45.7573 6.39747 -205.85 + 62 46.8429 623 11 0 10.2521 -55.4111 123.75 + 62 144.4 622 11 0 10.1956 -55.4502 123.845 +Number of digits in this event: 35 Using G4ParticleGun... -Particle energy: 3.98065 LIN +Particle energy: 2.31276 LIN Particle: gamma Event: 63 -Number of tracker hits in this event: 9 - 63 345.546 503 2 1 -79.4461 -58.4134 -144.45 - 63 275.442 608 2 0 -79.4464 -58.4132 -145.85 - 63 126.351 503 1 1 -79.4478 -58.4162 -174.45 - 63 101.011 608 1 0 -79.4451 -58.4226 -175.85 - 63 126.261 503 0 1 -79.3753 -58.5564 -204.45 - 63 292.638 607 0 0 -79.373 -58.5608 -205.85 - 63 142.328 502 1 1 -79.5005 -58.4666 -174.45 - 63 146.259 607 1 0 -79.5039 -58.473 -175.85 - 63 182.865 502 0 1 -79.5696 -58.6278 -204.45 -Number of digits in this event: 10 +Number of tracker hits in this event: 0 +Number of digits in this event: 1 Using G4ParticleGun... -Particle energy: 8.37277 LIN +Particle energy: 6.62109 LIN Particle: gamma Event: 64 -Number of tracker hits in this event: 3 - 64 54.6565 266 2 0 11.4819 -126.95 -146.244 - 64 280.678 47 3 0 -53.5457 -170.677 -116.25 - 64 2.10774 46 3 0 -53.4514 -170.75 -116.075 -Number of digits in this event: 4 +Number of tracker hits in this event: 14 + 64 253.514 1488 2 1 117.935 -38.7459 -144.45 + 64 216.235 706 2 0 117.936 -38.7457 -145.85 + 64 138.378 1489 1 1 117.973 -38.6158 -174.45 + 64 115.801 707 1 0 117.974 -38.6115 -175.85 + 64 231.647 1489 0 1 117.988 -38.5322 -204.45 + 64 118.838 707 0 0 117.988 -38.5311 -205.85 + 64 108.634 543 1 0 118.336 -71.2605 -176.25 + 64 169.516 544 1 0 118.262 -71.25 -176.085 + 64 250.128 1488 0 1 117.908 -38.7132 -204.45 + 64 246.56 706 0 0 117.571 -38.7049 -205.85 + 64 15.4513 709 0 0 118.222 -38.0607 -205.85 + 64 140.049 710 0 0 118.228 -38.05 -205.882 + 64 232.656 1488 1 1 117.935 -38.7025 -174.45 + 64 107.182 706 1 0 117.935 -38.7029 -175.85 +Number of digits in this event: 12 Using G4ParticleGun... -Particle energy: 2.25022 LIN +Particle energy: 2.10459 LIN Particle: gamma Event: 65 Number of tracker hits in this event: 0 -Number of digits in this event: 0 +Number of digits in this event: 1 Using G4ParticleGun... -Particle energy: 5.43714 LIN +Particle energy: 1.56981 LIN Particle: gamma Event: 66 -Number of tracker hits in this event: 34 - 66 270.344 1331 5 1 86.3627 99.0492 -54.45 - 66 281.52 1394 5 0 86.3624 99.0482 -55.85 - 66 105.991 1331 4 1 86.3444 99.0296 -84.45 - 66 96.5463 1394 4 0 86.3454 99.0313 -85.85 - 66 183.422 1331 3 1 86.3427 99.0677 -114.45 - 66 137.606 1394 3 0 86.3394 99.0699 -115.85 - 66 97.5013 1331 2 1 86.28 99.1141 -144.45 - 66 117.222 1394 2 0 86.2788 99.1151 -145.85 - 66 119.781 1331 1 1 86.2635 99.1377 -174.45 - 66 99.9012 1394 1 0 86.2645 99.1339 -175.85 - 66 144.028 1331 0 1 86.2804 99.0694 -204.45 - 66 614.054 1394 0 0 86.2863 99.0694 -205.85 - 66 89.3582 502 4 0 -102.752 -79.45 -86.0595 - 66 87.9375 1395 0 0 86.3013 99.15 -206.065 - 66 21.8523 1234 0 0 109.488 66.9301 -206.25 - 66 101.204 1328 4 1 85.8421 98.8752 -84.45 - 66 43.3392 1329 4 1 85.85 98.8626 -84.7562 - 66 102.011 1393 4 0 85.8785 98.8199 -85.85 - 66 150.926 1332 3 1 86.6424 97.732 -114.45 - 66 39.531 1333 3 1 86.65 97.719 -114.688 - 66 123.509 1387 3 0 86.6868 97.6524 -115.85 - 66 121.56 1337 2 1 87.489 96.0393 -144.45 - 66 59.7488 1379 2 0 87.5463 95.9619 -145.85 - 66 50.477 1378 2 0 87.5552 95.95 -146.065 - 66 135.94 1342 1 1 88.6058 94.4444 -174.45 - 66 123.597 1370 1 0 88.6783 94.3393 -175.85 - 66 47.5908 1350 0 1 90.3365 92.3315 -204.45 - 66 67.9949 1351 0 1 90.35 92.3208 -204.574 - 66 106.193 1360 0 0 90.4852 92.2123 -205.85 - 66 242.673 1333 0 1 86.6613 99.0383 -204.45 - 66 148.98 1583 0 0 37.349 136.919 -206.25 - 66 210.86 1582 0 0 37.3784 136.75 -206.113 - 66 30.964 164 6 1 -147.15 26.4236 -24.7867 - 66 168.671 163 6 1 -147.35 26.3366 -24.5803 -Number of digits in this event: 18 +Number of tracker hits in this event: 4 + 66 239.683 1250 1 1 70.1539 -61.4966 -174.45 + 66 284.536 592 1 0 70.1546 -61.4969 -175.85 + 66 271.403 1250 0 1 70.1751 -61.4887 -204.45 + 66 260.65 592 0 0 70.1785 -61.4861 -205.85 +Number of digits in this event: 5 Using G4ParticleGun... -Particle energy: 3.37697 LIN +Particle energy: 5.28106 LIN Particle: gamma Event: 67 -Number of tracker hits in this event: 16 - 67 323.972 957 4 1 11.602 -118.628 -84.45 - 67 189.021 307 4 0 11.604 -118.623 -85.85 - 67 228.253 957 3 1 11.6316 -118.542 -114.45 - 67 142.683 308 3 0 11.6244 -118.542 -115.85 - 67 228.76 957 2 1 11.4833 -118.563 -144.45 - 67 109.462 307 2 0 11.4545 -118.586 -145.85 - 67 108.618 954 1 1 10.9115 -119.103 -174.45 - 67 163.397 305 1 0 10.8793 -119.114 -175.85 - 67 209.425 951 0 1 10.2815 -119.21 -204.45 - 67 133.171 304 0 0 10.2435 -119.211 -205.85 - 67 128.696 307 3 0 11.5019 -118.679 -115.85 - 67 127.027 306 2 0 11.4607 -118.777 -145.85 - 67 211.43 956 1 1 11.4387 -118.861 -174.45 - 67 130.422 306 1 0 11.4405 -118.867 -175.85 - 67 138.011 957 0 1 11.4834 -118.99 -204.45 - 67 132.27 305 0 0 11.4877 -118.999 -205.85 -Number of digits in this event: 17 +Number of tracker hits in this event: 7 + 67 32.1467 1614 6 1 142.95 70.2412 -24.6877 + 67 273.979 1576 7 1 135.482 103.056 5.55 + 67 404.082 1615 6 1 143.15 70.238 -24.5071 + 67 134.349 573 0 1 -65.2935 29.2441 -204.85 + 67 224.98 1040 5 0 -92.9057 28.1877 -56.25 + 67 10.5435 604 4 1 -59.2235 -107.169 -84.85 + 67 167.309 33 4 0 -47.4549 -173.424 -86.25 +Number of digits in this event: 7 Using G4ParticleGun... -Particle energy: 5.35137 LIN +Particle energy: 4.33159 LIN Particle: gamma Event: 68 -Number of tracker hits in this event: 6 - 68 42.9684 650 1 0 118.9 -49.8951 -176.25 - 68 93.4714 651 1 0 118.869 -49.85 -176.113 - 68 203.63 1488 1 1 117.931 -49.2153 -174.85 - 68 56.1772 1487 1 1 117.75 -49.0699 -174.728 - 68 109.011 668 1 0 119.057 -46.4345 -175.85 - 68 272.275 669 1 0 119.132 -46.25 -176.059 -Number of digits in this event: 5 +Number of tracker hits in this event: 35 + 68 332.372 678 6 1 -44.3089 -20.9009 -24.45 + 68 329.326 795 6 0 -44.3057 -20.9017 -25.85 + 68 142.638 679 5 1 -44.2427 -20.855 -54.45 + 68 260.773 796 5 0 -44.2441 -20.8359 -55.85 + 68 274.945 678 4 1 -44.289 -20.4775 -84.45 + 68 120.507 797 4 0 -44.2756 -20.4667 -85.85 + 68 113.891 680 3 1 -44.0124 -20.2677 -114.45 + 68 110.132 799 3 0 -43.999 -20.2481 -115.85 + 68 110.356 681 2 1 -43.7445 -19.7916 -144.45 + 68 123.409 801 2 0 -43.7352 -19.7638 -145.85 + 68 131.671 682 1 1 -43.5237 -19.213 -174.45 + 68 123.118 804 1 0 -43.506 -19.1982 -175.85 + 68 185.817 684 0 1 -43.118 -18.9242 -204.45 + 68 125.925 805 0 0 -43.0942 -18.8977 -205.85 + 68 120.011 287 0 0 -72.728 -122.651 -206.25 + 68 140.767 286 0 0 -72.7716 -122.75 -206.129 + 68 112.704 285 0 0 -72.865 -122.951 -205.933 + 68 274.722 284 0 0 -72.9368 -123.15 -205.873 + 68 45.6506 439 1 1 -92.2264 130.14 -174.85 + 68 138.724 678 5 1 -44.25 -20.8462 -54.8039 + 68 44.9526 797 5 0 -44.7844 -20.5259 -55.8503 + 68 55.4723 681 5 1 -43.826 -21.757 -54.85 + 68 3.31814 786 5 0 -43.6325 -22.8412 -55.85 + 68 315.72 785 5 0 -43.6317 -22.8504 -55.8597 + 68 1.2097 784 5 0 -43.7011 -23.05 -55.8998 + 68 341.223 796 4 0 -44.369 -20.7997 -85.85 + 68 120.807 678 3 1 -44.4384 -20.7745 -114.45 + 68 119.942 796 3 0 -44.4465 -20.7735 -115.85 + 68 152.535 677 2 1 -44.618 -20.7471 -144.45 + 68 135.598 796 2 0 -44.6216 -20.7492 -145.85 + 68 96.9858 676 1 1 -44.6862 -20.8169 -174.45 + 68 122.082 796 1 0 -44.6855 -20.8222 -175.85 + 68 105.891 676 0 1 -44.6583 -20.9415 -204.45 + 68 235.469 795 0 0 -44.6589 -20.9458 -205.85 + 68 190.938 795 4 0 -44.3635 -20.8506 -85.9483 +Number of digits in this event: 24 Using G4ParticleGun... -Particle energy: 2.18285 LIN +Particle energy: 5.54396 LIN Particle: gamma Event: 69 -Number of tracker hits in this event: 27 - 69 244.25 1084 7 1 36.9353 138.793 5.55 - 69 236.993 1593 7 0 36.934 138.792 4.15 - 69 111.209 1084 6 1 36.9147 138.789 -24.45 - 69 209 1593 6 0 36.9109 138.789 -25.85 - 69 111.405 1083 5 1 36.8385 138.808 -54.45 - 69 313.634 1593 5 0 36.8343 138.81 -55.85 - 69 121.068 1083 4 1 36.7546 138.843 -84.45 - 69 117.733 1593 4 0 36.7521 138.847 -85.85 - 69 126.224 1083 3 1 36.6975 138.947 -114.45 - 69 111.912 1594 3 0 36.694 138.951 -115.85 - 69 145.911 1082 2 1 36.6232 139.029 -144.45 - 69 102.837 1594 2 0 36.6278 139.032 -145.85 - 69 128.184 1083 1 1 36.7035 139.082 -174.45 - 69 139.482 1594 1 0 36.7062 139.089 -175.85 - 69 124.238 1083 0 1 36.7593 139.223 -204.45 - 69 121.375 1595 0 0 36.7602 139.232 -205.85 - 69 119.217 1102 6 1 40.5779 139.12 -24.45 - 69 33.2207 1095 5 1 39.2017 136.861 -54.45 - 69 200.656 1096 5 1 39.2501 136.878 -54.5206 - 69 81.6476 1097 5 1 39.45 136.92 -54.7717 - 69 30.0416 1588 5 0 40.9466 137.909 -55.85 - 69 157.874 1589 5 0 41.0132 137.95 -55.8941 - 69 135.197 1590 5 0 41.4087 138.15 -56.0856 - 69 105.198 1591 5 0 41.8421 138.35 -55.9534 - 69 192.149 1592 5 0 41.9872 138.55 -55.8725 - 69 10.0154 1723 5 0 79.5708 164.941 -56.25 - 69 192.097 1724 5 0 79.5845 164.95 -56.2397 -Number of digits in this event: 18 -Using G4ParticleGun... -Particle energy: 6.27365 LIN +Number of tracker hits in this event: 106 + 69 252.944 1491 9 1 118.39 19.4753 65.55 + 69 355.97 997 9 0 118.391 19.4746 64.15 + 69 280.822 1491 8 1 118.407 19.4658 35.55 + 69 240.883 997 8 0 118.407 19.4658 34.15 + 69 306.028 1491 7 1 118.401 19.4571 5.55 + 69 466.172 997 7 0 118.399 19.4563 4.15 + 69 107.774 1491 6 1 118.363 19.4434 -24.45 + 69 155.993 996 6 0 118.361 19.4407 -25.85 + 69 116.063 1490 5 1 118.321 19.3945 -54.45 + 69 118.638 996 5 0 118.318 19.3919 -55.85 + 69 120.617 1490 4 1 118.277 19.3521 -84.45 + 69 98.8422 996 4 0 118.273 19.3507 -85.85 + 69 164.804 1490 3 1 118.18 19.3151 -114.45 + 69 124.48 996 3 0 118.175 19.311 -115.85 + 69 389.533 1489 2 1 118.088 19.2291 -144.45 + 69 119.168 995 2 0 118.087 19.2268 -145.85 + 69 375.811 1489 1 1 118.062 19.1846 -174.45 + 69 257.047 995 1 0 118.068 19.1834 -175.85 + 69 349.019 1490 0 1 118.187 19.1435 -204.45 + 69 161.604 995 0 0 118.193 19.141 -205.85 + 69 19.1988 1199 1 0 16.1518 59.9833 -176.25 + 69 129.047 1200 1 0 16.0077 60.05 -176.138 + 69 63.8084 1201 1 0 15.638 60.25 -176.055 + 69 85.6626 1202 1 0 15.5026 60.45 -176.089 + 69 58.3562 1203 1 0 15.5238 60.6503 -176.087 + 69 100.761 1204 1 0 15.5777 60.85 -176.025 + 69 173.36 1205 1 0 15.6104 61.0503 -176.016 + 69 163.217 1206 1 0 15.5102 61.2501 -176.145 + 69 117.083 993 0 0 118.471 18.8034 -205.85 + 69 130.265 996 1 0 117.928 19.3017 -175.85 + 69 123.639 1481 0 1 116.371 21.416 -204.45 + 69 317.521 1007 0 0 116.336 21.4833 -205.85 + 69 31.2728 1006 0 0 116.28 21.4498 -206.015 + 69 236.496 996 2 0 118.123 19.3677 -145.85 + 69 113.331 1491 1 1 118.388 20.6353 -174.45 + 69 127.507 1002 1 0 118.338 20.6044 -175.85 + 69 209.301 1485 0 1 117.183 19.8603 -204.45 + 69 65.5547 1484 0 1 117.15 19.8547 -204.621 + 69 260.375 998 0 0 116.916 19.8 -205.85 + 69 13.8192 1471 1 1 114.46 -15.5714 -174.85 + 69 133.01 1486 1 1 117.527 18.9407 -174.45 + 69 129.598 994 1 0 117.518 18.8931 -175.85 + 69 156.872 990 0 0 117.246 18.0703 -205.85 + 69 152.541 996 7 0 118.44 19.3615 4.15 + 69 169.573 1495 6 1 119.263 17.6791 -24.45 + 69 94.6911 987 6 0 119.341 17.6388 -25.8509 + 69 150.776 1507 5 1 121.59 16.9346 -54.45 + 69 141.476 983 5 0 121.594 16.7643 -55.85 + 69 167.775 1508 4 1 121.784 12.8464 -84.45 + 69 32.0771 963 4 0 121.828 12.6638 -85.85 + 69 88.5008 962 4 0 121.832 12.65 -85.9556 + 69 114.689 1511 3 1 122.451 8.66804 -114.45 + 69 169.119 941 3 0 122.574 8.40349 -115.85 + 69 239.802 1524 2 1 124.97 2.81538 -144.45 + 69 348.934 912 2 0 125.006 2.60895 -145.85 + 69 111.573 1525 1 1 125.256 -1.72282 -174.45 + 69 129.158 890 1 0 125.234 -1.93505 -175.85 + 69 132.773 1523 0 1 124.917 -6.35616 -204.45 + 69 261.906 866 0 0 124.957 -6.69928 -205.85 + 69 79.8702 911 2 0 125.116 2.45 -146.173 + 69 112.778 910 2 0 125.213 2.25 -146.169 + 69 341.684 909 2 0 125.037 2.05 -146.202 + 69 98.4794 1486 6 1 117.462 19.6133 -24.45 + 69 143.395 998 6 0 117.361 19.6501 -25.85 + 69 152.08 1476 5 1 115.547 20.3065 -54.45 + 69 133.461 1001 5 0 115.493 20.3092 -55.85 + 69 139.6 1470 4 1 114.311 20.267 -84.45 + 69 166.502 1001 4 0 114.253 20.3469 -85.85 + 69 107.074 1464 3 1 112.984 22.18 -114.45 + 69 56.8435 1010 3 0 112.872 22.2409 -115.85 + 69 71.1687 1011 3 0 112.855 22.25 -116.067 + 69 212.05 1453 2 1 110.886 23.7149 -144.45 + 69 104.355 1018 2 0 110.775 23.7459 -145.85 + 69 439.445 1439 1 1 108.043 24.9924 -174.45 + 69 149.152 1025 1 0 107.845 25.1498 -175.85 + 69 132.924 1416 0 1 103.439 28.4533 -204.45 + 69 111.597 1042 0 0 103.244 28.565 -205.85 + 69 86.2463 1024 1 0 108.521 24.8938 -175.85 + 69 22.2037 1023 1 0 108.607 24.85 -176.152 + 69 39.4051 931 1 0 107.494 6.32289 -176.25 + 69 89.7858 930 1 0 107.468 6.25 -176.151 + 69 20.1014 1435 1 1 107.166 6.0542 -174.85 + 69 132.612 1434 1 1 107.15 6.04428 -174.773 + 69 15.4104 1433 1 1 106.95 6.05807 -174.512 + 69 5.70826 1047 6 0 123.845 29.6437 -26.25 + 69 304.454 1492 7 1 118.66 19.4998 5.55 + 69 131.161 1493 6 1 118.773 19.54 -24.45 + 69 150.913 997 6 0 118.782 19.5412 -25.85 + 69 347.546 1494 5 1 118.965 19.5711 -54.45 + 69 106.383 997 5 0 118.978 19.5697 -55.85 + 69 139.537 1495 4 1 119.224 19.5453 -84.45 + 69 116.775 997 4 0 119.236 19.5477 -85.85 + 69 112.922 1496 3 1 119.492 19.5918 -114.45 + 69 118.183 997 3 0 119.506 19.5954 -115.85 + 69 132.628 1498 2 1 119.809 19.6784 -144.45 + 69 142.258 998 2 0 119.826 19.686 -145.85 + 69 118.104 1500 1 1 120.186 19.8591 -174.45 + 69 189.635 999 1 0 120.207 19.8654 -175.85 + 69 189.547 1502 0 1 120.644 19.9984 -204.45 + 69 91.5632 999 0 0 120.666 20.0038 -205.85 + 69 240.844 1496 1 1 119.391 19.7214 -174.45 + 69 128.579 998 1 0 119.394 19.7276 -175.85 + 69 124.184 1496 0 1 119.429 19.7507 -204.451 + 69 110.598 997 1 0 119.47 19.5848 -175.85 + 69 153.12 1510 0 1 122.31 16.6013 -204.45 + 69 121.545 983 0 0 122.433 16.7249 -205.85 +Number of digits in this event: 68 +Using G4ParticleGun... +Particle energy: 3.96079 LIN Particle: gamma Event: 70 -Number of tracker hits in this event: 48 - 70 255.868 852 5 1 -9.46043 22.5439 -54.45 - 70 280.529 1012 5 0 -9.46144 22.5448 -55.85 - 70 128.636 852 4 1 -9.48416 22.5602 -84.45 - 70 119.737 1012 4 0 -9.48602 22.562 -85.85 - 70 120.557 852 3 1 -9.53217 22.6016 -114.45 - 70 127.796 1012 3 0 -9.53229 22.6038 -115.85 - 70 112.641 852 2 1 -9.53108 22.6485 -144.45 - 70 115.007 1013 2 0 -9.53107 22.6518 -145.85 - 70 93.2849 852 1 1 -9.5249 22.722 -174.45 - 70 273.933 1013 1 0 -9.52417 22.7249 -175.85 - 70 102.068 852 0 1 -9.50591 22.7864 -204.45 - 70 92.1468 1013 0 0 -9.50332 22.79 -205.85 - 70 34.9659 1010 0 0 -29.439 22.2206 -206.25 - 70 51.3423 976 0 1 15.25 -79.4283 -204.715 - 70 106.305 850 4 1 -9.88163 22.3741 -84.45 - 70 69.6153 1011 4 0 -10.3374 22.2676 -85.85 - 70 56.981 1010 4 0 -10.4127 22.25 -86.0825 - 70 128.144 801 3 1 -19.6979 20.0818 -114.45 - 70 122.035 999 3 0 -20.1452 19.9598 -115.85 - 70 41.9253 754 2 1 -29.218 17.4492 -144.45 - 70 79.8028 753 2 1 -29.25 17.4357 -144.555 - 70 34.901 986 2 0 -29.647 17.2689 -145.85 - 70 76.1372 985 2 0 -29.6919 17.25 -145.996 - 70 284.456 707 1 1 -38.4883 13.4922 -174.45 - 70 216.532 966 1 0 -38.9068 13.3493 -175.85 - 70 119.775 662 0 1 -47.5061 10.3473 -204.45 - 70 324.816 950 0 0 -47.9662 10.1258 -205.85 - 70 124.745 951 0 0 -48.1545 10.25 -206.079 - 70 221.925 708 1 1 -38.2535 13.7506 -174.466 - 70 263.681 968 1 0 -38.4743 13.7631 -175.85 - 70 51.9763 650 0 1 -49.9109 17.9124 -204.45 - 70 104.645 651 0 1 -49.85 17.9425 -204.547 - 70 48.9428 992 0 0 -49.2613 18.5649 -205.85 - 70 94.4351 993 0 0 -49.1857 18.65 -206.003 - 70 152.343 701 1 1 -39.7994 14.427 -174.45 - 70 44.8745 700 1 1 -39.85 14.6622 -174.767 - 70 116.177 967 1 0 -39.9057 13.611 -175.85 - 70 211.699 969 1 0 -39.7514 13.85 -175.931 - 70 54.7177 522 5 1 -75.4556 154.16 -54.45 - 70 132.768 851 3 1 -9.65258 23.1333 -114.45 - 70 60.9428 850 3 1 -9.85 23.4743 -114.703 - 70 33.8199 849 3 1 -10.05 23.5302 -114.801 - 70 363.087 1016 3 0 -12.4846 23.4226 -115.85 - 70 19.007 1017 3 0 -13.1453 23.45 -116.115 - 70 193.226 1015 3 0 -13.6695 23.25 -116.19 - 70 182.349 1014 3 0 -14.06 23.05 -116.208 - 70 299.026 827 3 1 -14.4923 22.6782 -114.85 - 70 307.752 826 3 1 -14.65 22.6792 -114.595 -Number of digits in this event: 24 +Number of tracker hits in this event: 97 + 70 329.198 669 9 1 -46.1729 7.40336 65.55 + 70 297.98 936 9 0 -46.1734 7.40371 64.15 + 70 119.257 669 8 1 -46.1865 7.41713 35.55 + 70 123.763 936 8 0 -46.187 7.41759 34.15 + 70 120.517 669 7 1 -46.2052 7.4251 5.55 + 70 98.3606 936 7 0 -46.206 7.42525 4.15 + 70 135.934 669 6 1 -46.2254 7.42146 -24.45 + 70 135.354 936 6 0 -46.2284 7.42107 -25.85 + 70 171.667 668 5 1 -46.2837 7.41911 -54.45 + 70 104.824 937 5 0 -46.2515 7.49234 -55.85 + 70 113.828 673 4 1 -45.3171 8.97833 -84.4504 + 70 249.768 945 4 0 -45.2826 9.05963 -85.85 + 70 95.1669 671 3 1 -45.7131 11.9104 -114.45 + 70 72.9475 959 3 0 -45.6076 12.0278 -115.85 + 70 33.7865 960 3 0 -45.5909 12.05 -116.108 + 70 1.8898 677 2 1 -44.4513 14.718 -144.45 + 70 245.566 678 2 1 -44.45 14.7179 -144.463 + 70 344.798 973 2 0 -44.3346 14.6847 -145.85 + 70 125.87 683 1 1 -43.2985 14.1968 -174.45 + 70 39.3853 969 1 0 -43.184 13.8798 -175.85 + 70 77.9542 968 1 0 -43.1751 13.8499 -175.988 + 70 128.499 694 0 1 -41.0619 7.82576 -204.451 + 70 131.801 935 0 0 -41.0414 7.2453 -205.85 + 70 34.086 1113 14 0 34.1131 42.85 214.099 + 70 89.3948 974 2 0 -44.2145 14.8505 -146.156 + 70 67.208 1061 2 0 -80.9056 32.3089 -146.25 + 70 1.10949 979 2 0 -45.8429 15.85 -146.234 + 70 46.4731 944 4 0 -45.2947 9.05 -86.13 + 70 354.47 600 3 0 62.9962 -59.881 -116.25 + 70 495.567 854 3 0 -58.8428 -9.05135 -116.25 + 70 34.3844 602 3 1 -59.597 -8.68251 -114.85 + 70 74.843 601 3 1 -59.6501 -8.62527 -114.75 + 70 68.3822 600 3 1 -59.85 -8.56575 -114.597 + 70 325.249 599 3 1 -60.05 -8.44383 -114.534 + 70 106.015 598 3 1 -60.25 -8.38312 -114.518 + 70 82.4349 597 3 1 -60.45 -8.49698 -114.638 + 70 7.95509 1310 3 0 -86.7763 82.2266 -116.25 + 70 308.224 1311 3 0 -86.782 82.25 -116.243 + 70 127.086 668 8 1 -46.3918 7.64813 35.55 + 70 133.897 938 8 0 -46.4 7.66174 34.15 + 70 135.43 667 7 1 -46.5934 7.89641 5.55 + 70 121.968 939 7 0 -46.6054 7.9169 4.15 + 70 141.309 665 6 1 -46.9103 8.35039 -24.45 + 70 113.337 941 6 0 -46.922 8.36214 -25.85 + 70 100.648 664 5 1 -47.1314 8.61312 -54.45 + 70 124.442 942 5 0 -47.1428 8.62889 -55.85 + 70 204.177 663 4 1 -47.388 8.84438 -84.4502 + 70 152.169 943 4 0 -47.3864 8.79262 -85.8502 + 70 150.706 659 3 1 -48.1355 7.33393 -114.45 + 70 57.9658 936 3 0 -48.205 7.43425 -115.85 + 70 54.3456 937 3 0 -48.2161 7.45 -116.061 + 70 120.485 652 2 1 -49.6172 10.1663 -144.451 + 70 121.353 950 2 0 -49.7052 10.1779 -145.85 + 70 117.919 639 1 1 -52.1898 10.5611 -174.45 + 70 61.7458 953 1 0 -52.123 10.8122 -175.85 + 70 48.8833 954 1 0 -52.1108 10.85 -176.066 + 70 111.944 645 0 1 -50.9862 15.9485 -204.45 + 70 67.9227 980 0 0 -50.9288 16.2058 -205.85 + 70 81.265 981 0 0 -50.9229 16.2501 -206.089 + 70 176.521 908 0 0 -63.8621 1.74953 -206.25 + 70 21.1017 860 0 0 -27.4053 -7.96986 -206.25 + 70 201.938 859 0 0 -27.3819 -8.05013 -206.081 + 70 230.452 662 4 1 -47.4678 8.8099 -84.45 + 70 77.3864 946 4 0 -47.3847 9.3334 -85.85 + 70 33.5965 947 4 0 -47.3663 9.45006 -86.1502 + 70 112.713 673 3 1 -45.3931 20.2125 -114.45 + 70 266.101 1003 3 0 -45.0584 20.7053 -115.85 + 70 11.4661 713 2 1 -37.2625 30.4661 -144.45 + 70 96.9174 714 2 1 -37.25 30.4909 -144.501 + 70 86.3908 1055 2 0 -36.9641 31.1263 -145.85 + 70 63.3551 1056 2 0 -36.9165 31.25 -146.12 + 70 134.685 731 1 1 -33.786 43.4934 -174.45 + 70 167.653 1116 1 0 -33.8355 43.2991 -175.85 + 70 131.655 726 0 1 -34.7102 41.9165 -204.45 + 70 117.025 1111 0 0 -34.9105 42.3041 -205.85 + 70 24.6354 1120 1 0 -34.0805 44.0931 -176.199 + 70 170.083 1491 1 0 -42.0016 118.394 -176.25 + 70 108.384 1492 1 0 -42.0531 118.55 -176.173 + 70 361.595 1493 1 0 -42.2822 118.75 -176.025 + 70 636.717 1494 1 0 -42.4874 118.95 -175.959 + 70 40.9407 1019 1 0 -7.63443 23.9565 -176.25 + 70 120.259 1018 1 0 -7.53404 23.85 -176.136 + 70 51.8936 865 1 1 -6.90293 24.357 -174.85 + 70 67.051 866 1 1 -6.85 24.3983 -174.651 + 70 105.196 941 4 0 -47.5205 8.36251 -85.85 + 70 26.0477 940 4 0 -47.5189 8.24969 -86.14 + 70 19.2902 677 3 1 -44.589 0.05 -114.783 + 70 134.641 901 3 0 -44.454 0.35544 -115.85 + 70 33.5965 902 3 0 -44.397 0.45 -116.15 + 70 147.308 965 3 0 -22.8399 13.212 -116.25 + 70 14.5268 789 3 1 -22.0761 12.7936 -114.85 + 70 103.115 790 3 1 -22.05 12.7784 -114.8 + 70 5.51629 769 6 1 -26.25 41.4692 -24.7649 + 70 65.9999 646 3 1 -50.7328 11.448 -114.45 + 70 309.584 647 3 1 -50.6499 11.4788 -114.584 + 70 37.6165 1303 3 0 -14.0071 80.7916 -116.25 + 70 164.536 937 9 0 -46.13 7.45 63.7999 +Number of digits in this event: 45 Using G4ParticleGun... -Particle energy: 8.80195 LIN +Particle energy: 6.90762 LIN Particle: gamma Event: 71 -Number of tracker hits in this event: 1 - 71 210.854 1007 1 0 -71.5234 21.6148 -176.25 -Number of digits in this event: 3 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 4.82087 LIN +Particle energy: 7.37692 LIN Particle: gamma Event: 72 -Number of tracker hits in this event: 31 - 72 317.88 716 7 1 -36.7658 -121.746 5.55 - 72 300.556 292 7 0 -36.7654 -121.746 4.15 - 72 269.308 716 6 1 -36.7536 -121.749 -24.45 - 72 142.704 291 6 0 -36.7526 -121.753 -25.85 - 72 242.318 716 5 1 -36.7243 -121.831 -54.45 - 72 172.189 291 5 0 -36.7219 -121.839 -55.85 - 72 143.118 716 4 1 -36.6633 -122.004 -84.45 - 72 108.713 290 4 0 -36.6602 -122.015 -85.85 - 72 244.049 717 3 1 -36.6125 -122.233 -114.45 - 72 138.262 289 3 0 -36.6073 -122.24 -115.85 - 72 231.296 717 2 1 -36.5146 -122.372 -144.45 - 72 339.351 288 2 0 -36.5083 -122.382 -145.85 - 72 136.103 718 1 1 -36.3817 -122.571 -174.45 - 72 384.948 287 1 0 -36.3761 -122.579 -175.85 - 72 104.984 718 0 1 -36.2643 -122.751 -204.45 - 72 105.768 286 0 0 -36.259 -122.762 -205.85 - 72 120.714 292 6 0 -36.7739 -121.721 -25.85 - 72 106.246 292 5 0 -36.8393 -121.671 -55.85 - 72 195.212 715 4 1 -36.8819 -121.685 -84.45 - 72 313.118 292 4 0 -36.8869 -121.694 -85.85 - 72 169.236 715 3 1 -36.998 -121.907 -114.45 - 72 111.842 291 3 0 -37.0049 -121.924 -115.85 - 72 117.651 714 2 1 -37.1445 -122.274 -144.45 - 72 142.199 289 2 0 -37.1507 -122.288 -145.85 - 72 233.415 713 1 1 -37.2733 -122.598 -174.45 - 72 118.447 711 0 1 -37.7273 -122.97 -204.45 - 72 153.689 285 0 0 -37.7628 -123.016 -205.85 - 72 121.222 198 5 0 -22.1026 -140.35 -56.0051 - 72 60.9944 715 5 1 -36.8824 -121.709 -54.4501 - 72 233.093 714 5 1 -37.05 -121.668 -54.497 - 72 131.501 295 5 0 -37.2774 -121.005 -55.85 -Number of digits in this event: 25 +Number of tracker hits in this event: 5 + 72 94.5998 841 10 0 -178.555 -11.65 94.1014 + 72 63.0971 1722 8 0 146.811 164.691 33.75 + 72 132.73 693 3 1 -41.361 176.954 -114.85 + 72 97.0836 1498 0 0 -113.396 119.787 -206.25 + 72 93.2324 1499 0 0 -113.78 119.95 -205.993 +Number of digits in this event: 4 Using G4ParticleGun... -Particle energy: 8.67077 LIN +Particle energy: 8.36796 LIN Particle: gamma Event: 73 -Number of tracker hits in this event: 11 - 73 231.161 884 2 1 -3.2017 -45.7033 -144.45 - 73 313.375 671 2 0 -3.2019 -45.7039 -145.85 - 73 268.611 884 1 1 -3.19112 -45.7091 -174.45 - 73 263.871 671 1 0 -3.18799 -45.7041 -175.85 - 73 318.37 884 0 1 -3.13348 -45.5964 -204.45 - 73 112.022 672 0 0 -3.12893 -45.5918 -205.85 - 73 349.805 1519 7 0 -3.76983 123.95 3.87186 - 73 165.524 1067 10 1 33.45 92.601 95.1881 - 73 6.47793 1520 7 0 -3.63502 124.15 3.98382 - 73 62.8074 462 9 1 -87.5444 -142.215 65.15 - 73 153.923 671 0 0 -3.19156 -45.6526 -205.85 -Number of digits in this event: 12 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 4.09138 LIN +Particle energy: 8.70687 LIN Particle: gamma Event: 74 -Number of tracker hits in this event: 18 - 74 274.112 1325 3 1 85.115 110.064 -114.45 - 74 255.863 1449 3 0 85.1142 110.067 -115.85 - 74 252.621 1325 2 1 85.1082 110.147 -144.45 - 74 105.285 1449 2 0 85.1092 110.15 -145.85 - 74 111.541 1450 2 0 85.1092 110.15 -145.859 - 74 262.212 1325 1 1 85.1324 110.202 -174.45 - 74 107.01 1450 1 0 85.1318 110.203 -175.85 - 74 221.569 1325 0 1 85.1414 110.214 -204.45 - 74 155.148 1450 0 0 85.1449 110.217 -205.85 - 74 4.23473 898 5 0 -66.829 -0.25 -56.2307 - 74 0.117154 740 8 1 -32.0356 -164.009 35.55 - 74 86.7484 558 5 1 -68.3472 0.0500907 -54.8445 - 74 120.269 1448 1 0 85.149 109.867 -175.85 - 74 124.012 1447 0 0 85.2379 109.747 -205.85 - 74 39.9299 1511 7 0 -26.6961 122.447 3.75 - 74 116.993 768 7 1 -26.4236 122.758 5.15036 - 74 103.739 1512 7 0 -26.7952 122.626 4.15 - 74 91.5668 1410 0 0 88.5939 102.183 -206.25 -Number of digits in this event: 10 +Number of tracker hits in this event: 3 + 74 21.7457 772 8 0 163.917 -25.6408 33.75 + 74 54.8952 771 8 0 163.917 -25.65 33.7762 + 74 7.15437 1291 8 1 78.2791 9.61461 35.15 +Number of digits in this event: 1 Using G4ParticleGun... -Particle energy: 5.05041 LIN +Particle energy: 6.64902 LIN Particle: gamma Event: 75 -Number of tracker hits in this event: 13 - 75 286.422 1162 2 1 52.5599 -66.7612 -144.45 - 75 325.264 566 2 0 52.5612 -66.7579 -145.85 - 75 227.316 1162 1 1 52.6245 -66.6801 -174.45 - 75 226.658 566 1 0 52.6261 -66.6763 -175.85 - 75 293.89 1162 0 1 52.6401 -66.6506 -204.45 - 75 137.803 567 0 0 52.6514 -66.6427 -205.85 - 75 28.6095 529 0 0 37.3692 -74.097 -206.25 - 75 72.1431 567 1 0 52.6342 -66.65 -176.037 - 75 57.0581 567 2 0 52.4511 -66.65 -146.134 - 75 116.233 566 0 0 52.5637 -66.7264 -205.85 - 75 83.61 398 1 0 39.5603 -100.36 -176.25 - 75 20.2741 124 1 0 62.8985 -155.328 -176.25 - 75 18.816 186 1 0 124.379 -142.784 -176.25 -Number of digits in this event: 9 +Number of tracker hits in this event: 1 + 75 126.52 441 4 1 -91.75 55.0233 -84.7331 +Number of digits in this event: 3 Using G4ParticleGun... -Particle energy: 4.86567 LIN +Particle energy: 6.66901 LIN Particle: gamma Event: 76 -Number of tracker hits in this event: 46 - 76 231.955 1072 6 1 34.6215 99.7016 -24.45 - 76 229.076 1397 6 0 34.6217 99.7022 -25.85 - 76 363.32 1072 5 1 34.6125 99.7052 -54.45 - 76 220.4 1397 5 0 34.612 99.7082 -55.85 - 76 258.684 1072 4 1 34.5907 99.7709 -84.45 - 76 124.532 1398 4 0 34.5901 99.772 -85.85 - 76 124.169 1072 3 1 34.5675 99.7951 -114.45 - 76 186.264 1398 3 0 34.5719 99.7906 -115.85 - 76 108.376 1073 2 1 34.7041 99.6685 -144.45 - 76 236.16 1397 2 0 34.7119 99.6625 -145.85 - 76 126.002 1074 1 1 34.8755 99.5295 -174.45 - 76 278.393 1396 1 0 34.8848 99.5242 -175.85 - 76 146.205 1075 0 1 35.0924 99.4164 -204.45 - 76 241.053 1396 0 0 35.105 99.4081 -205.85 - 76 5.53819 1165 1 0 22.6187 53.0689 -176.25 - 76 71.4967 1164 1 0 22.6201 53.05 -176.235 - 76 140.036 1163 1 0 22.605 52.8498 -176.112 - 76 0.895794 1162 1 0 22.621 52.65 -175.852 - 76 141.213 1012 1 1 22.5903 52.0238 -174.85 - 76 358.985 1011 1 1 22.4499 51.7756 -174.586 - 76 42.1444 1399 3 0 34.5932 99.95 -116.16 - 76 31.8546 1528 3 0 -0.245907 125.861 -116.25 - 76 141.593 1397 4 0 34.4799 99.695 -85.85 - 76 102.2 1071 3 1 34.3077 99.6832 -114.45 - 76 122.63 1397 3 0 34.2974 99.6822 -115.85 - 76 105.072 1070 2 1 34.1232 99.6589 -144.45 - 76 393.339 1069 1 1 33.9757 99.5396 -174.45 - 76 156.379 1068 0 1 33.8311 99.4125 -204.45 - 76 93.012 1398 1 0 34.0809 99.8998 -175.85 - 76 39.8556 1399 1 0 34.133 99.95 -176.201 - 76 222.379 1092 0 1 38.4642 104.688 -204.45 - 76 55.0453 1422 0 0 38.8033 104.559 -205.85 - 76 200.075 1421 0 0 38.83 104.55 -205.959 - 76 126.039 1400 1 0 33.8369 100.202 -175.85 - 76 19.2217 1401 1 0 33.8353 100.35 -176.196 - 76 154.526 1083 0 1 36.8428 115.024 -204.45 - 76 23.0384 1082 0 1 36.6499 115.22 -204.798 - 76 84.3667 1478 0 0 36.2724 115.787 -205.85 - 76 56.8399 1479 0 0 36.2024 115.95 -206.089 - 76 45.8037 1585 0 0 25.1498 137.263 -206.25 - 76 57.6584 1586 0 0 25.1268 137.35 -206.069 - 76 240.654 1024 0 1 24.9821 137.743 -204.85 - 76 107.12 1023 0 1 24.85 137.562 -204.63 - 76 114.593 1022 0 1 24.65 137.229 -204.743 - 76 132.815 1021 0 1 24.45 136.835 -204.784 - 76 145.304 1020 0 1 24.2497 136.371 -204.619 -Number of digits in this event: 29 +Number of tracker hits in this event: 9 + 76 44.0098 745 14 1 -30.8553 8.42349 215.15 + 76 57.0644 744 14 1 -31.05 8.26365 215.468 + 76 27.9249 1158 8 1 51.7935 110.449 35.55 + 76 156.895 1159 8 1 51.85 110.411 35.4852 + 76 233.937 1160 8 1 52.05 110.202 35.3749 + 76 11.1258 952 11 1 10.4682 59.2164 125.55 + 76 326.799 951 11 1 10.45 59.2222 125.544 + 76 20.1441 950 11 1 10.25 59.1194 125.453 + 76 1.09816 1357 1 1 91.75 129.414 -174.57 +Number of digits in this event: 5 Using G4ParticleGun... -Particle energy: 6.24062 LIN +Particle energy: 4.50361 LIN Particle: gamma Event: 77 -Number of tracker hits in this event: 0 -Number of digits in this event: 1 +Number of tracker hits in this event: 62 + 77 173.531 996 10 1 19.33 42.1323 95.4219 + 77 276.036 1110 10 0 19.3334 42.1397 94.15 + 77 255.511 996 9 1 19.3894 42.3031 65.55 + 77 146.987 1111 9 0 19.3984 42.3275 64.15 + 77 98.6874 998 8 1 19.6602 42.903 35.55 + 77 195.757 1114 8 0 19.6816 42.9425 34.15 + 77 211.828 1000 7 1 20.1447 43.7925 5.55 + 77 32.0727 1118 7 0 20.2003 43.844 4.15 + 77 103.732 1119 7 0 20.2069 43.85 3.98625 + 77 94.1721 1006 6 1 21.4025 44.8974 -24.45 + 77 162.581 1124 6 0 21.4582 44.9464 -25.85 + 77 118.066 1012 5 1 22.4704 45.8456 -54.45 + 77 129.521 1129 5 0 22.493 45.9245 -55.85 + 77 125.712 1014 4 1 22.8541 47.4608 -84.45 + 77 125.396 1137 4 0 22.8784 47.4905 -85.85 + 77 218.11 1016 3 1 23.3806 47.9795 -114.45 + 77 162.185 1139 3 0 23.4182 47.9774 -115.85 + 77 128.821 1021 2 1 24.2659 47.8309 -144.45 + 77 158.259 1138 2 0 24.2945 47.8109 -145.85 + 77 103.645 1023 1 1 24.822 47.415 -174.45 + 77 131.865 1136 1 0 24.8491 47.3715 -175.85 + 77 94.9797 1026 0 1 25.3831 46.5501 -204.45 + 77 116.024 1132 0 0 25.4234 46.4857 -205.85 + 77 248.639 1160 0 0 28.4174 52.1996 -205.85 + 77 185.88 1010 4 1 22.0926 47.4279 -84.45 + 77 135.357 1110 9 0 19.327 42.1239 64.15 + 77 175.435 996 8 1 19.312 42.1354 35.55 + 77 133.45 1110 8 0 19.3098 42.1352 34.15 + 77 168.575 996 7 1 19.2589 42.1267 5.55 + 77 137.298 1110 7 0 19.2553 42.127 4.15 + 77 173.488 995 6 1 19.1727 42.1278 -24.45 + 77 117.573 1110 6 0 19.1654 42.1266 -25.85 + 77 130.057 994 5 1 19.0232 42.107 -54.45 + 77 168.578 1110 5 0 19.0187 42.1078 -55.85 + 77 120.088 994 4 1 18.9274 42.1217 -84.45 + 77 103.564 1110 4 0 18.9241 42.1237 -85.85 + 77 131.092 994 3 1 18.8571 42.168 -114.45 + 77 112.53 1110 3 0 18.854 42.1707 -115.85 + 77 401.777 993 2 1 18.7872 42.2407 -144.45 + 77 282.784 1110 2 0 18.7826 42.2417 -145.85 + 77 104.482 993 1 1 18.6858 42.2656 -174.45 + 77 136.988 1111 1 0 18.6837 42.2654 -175.85 + 77 124.968 992 0 1 18.6415 42.2583 -204.45 + 77 328.2 1111 0 0 18.6403 42.2579 -205.85 + 77 97.5854 844 1 1 -11.05 56.9503 -174.784 + 77 35.1025 1596 4 1 139.43 -50.984 -84.85 + 77 21.4973 770 5 0 80.7276 -26.0297 -56.25 + 77 165.618 769 5 0 80.7315 -26.05 -56.1915 + 77 36.4871 1303 5 1 80.8208 -27.4044 -54.8499 + 77 147.939 1304 5 1 80.85 -27.4499 -54.8162 + 77 163.32 991 1 1 18.3509 42.091 -174.45 + 77 147.176 1110 1 0 18.3044 42.0912 -175.85 + 77 8.81176 987 0 1 17.4507 42.392 -204.45 + 77 163.807 986 0 1 17.45 42.3921 -204.466 + 77 130.49 1351 1 1 90.35 75.1198 -174.491 + 77 4.49077 1350 1 1 90.3499 75.0976 -174.451 + 77 0.260885 101 10 1 -159.75 31.3796 95.401 + 77 112.631 1109 2 0 18.7915 42.0455 -145.85 + 77 266.75 994 1 1 18.8718 41.6689 -174.45 + 77 241.534 1108 1 0 18.9584 41.7774 -175.851 + 77 112.947 1002 0 1 20.5378 43.8848 -204.451 + 77 94.2633 1119 0 0 20.6373 43.9685 -205.85 +Number of digits in this event: 42 Using G4ParticleGun... -Particle energy: 1.12556 LIN +Particle energy: 8.97719 LIN Particle: gamma Event: 78 -Number of tracker hits in this event: 0 -Number of digits in this event: 2 +Number of tracker hits in this event: 23 + 78 278.047 1253 1 1 70.664 -54.5189 -174.45 + 78 239.068 627 1 0 70.6641 -54.5186 -175.85 + 78 144.273 1253 0 1 70.6676 -54.5101 -204.45 + 78 109.605 627 0 0 70.6671 -54.51 -205.85 + 78 1.18466 429 1 0 41.8606 -94.1506 -176.25 + 78 159.78 430 1 0 41.8595 -94.15 -176.248 + 78 123.102 1106 1 1 41.4092 -93.9534 -174.85 + 78 110.578 1107 1 1 41.4501 -93.8166 -174.745 + 78 314.233 437 1 0 42.8038 -92.6481 -175.85 + 78 94.3424 438 1 0 42.9332 -92.55 -175.891 + 78 21.892 724 3 0 -143.544 -35.0976 -116.25 + 78 7.24691 1265 11 0 179.448 73.05 123.817 + 78 8.18564 1266 11 0 179.645 73.25 124.007 + 78 102.404 386 2 0 118.195 -102.79 -146.25 + 78 191.054 385 2 0 118.199 -102.95 -146.174 + 78 101.573 623 0 0 70.4562 -55.2712 -205.85 + 78 6.1848 1250 0 1 70.0561 -56.1412 -204.85 + 78 165.031 1249 0 1 70.05 -56.1536 -204.836 + 78 34.035 612 0 0 70.045 -57.5132 -205.85 + 78 64.1941 1245 0 1 69.2367 -59.4436 -204.85 + 78 165.951 1248 0 1 69.7256 -53.9663 -204.45 + 78 352.73 631 0 0 69.6049 -53.7634 -205.851 + 78 3.61271 630 0 0 69.5584 -53.85 -205.924 +Number of digits in this event: 13 Using G4ParticleGun... -Particle energy: 1.76559 LIN +Particle energy: 2.22983 LIN Particle: gamma Event: 79 -Number of tracker hits in this event: 2 - 79 88.439 1141 4 0 79.6953 48.45 -86.0096 - 79 134.398 532 0 1 -73.5099 -106.566 -204.85 -Number of digits in this event: 4 +Number of tracker hits in this event: 93 + 79 261.983 1377 9 1 95.6562 -0.355925 65.55 + 79 249.853 898 9 0 95.5977 -0.31117 64.15 + 79 125.494 1370 8 1 94.2842 0.967394 35.55 + 79 130.973 904 8 0 94.2179 0.978838 34.15 + 79 160.727 1362 7 1 92.697 1.57667 5.54974 + 79 116.746 907 7 0 92.6734 1.54626 4.15 + 79 125.194 1359 6 1 92.0244 0.734059 -24.45 + 79 120.355 903 6 0 92.0108 0.731233 -25.8504 + 79 104.071 1357 5 1 91.7307 0.510041 -54.4504 + 79 122.333 902 5 0 91.6503 0.494064 -55.85 + 79 136.669 899 4 0 88.9516 -0.051406 -85.85 + 79 166.444 1320 3 1 84.1643 -1.75895 -114.45 + 79 213.028 890 3 0 84.0002 -1.88755 -115.85 + 79 408.832 1303 2 1 80.812 -4.76503 -144.45 + 79 101.215 876 2 0 80.6653 -4.78712 -145.85 + 79 138.201 1289 1 1 78.0116 -4.72849 -174.45 + 79 151.221 876 1 0 77.9387 -4.71102 -175.85 + 79 79.2041 1284 0 1 76.8688 -4.13475 -204.45 + 79 29.1371 1283 0 1 76.85 -4.14439 -204.745 + 79 103.311 879 0 0 76.7807 -4.18147 -205.85 + 79 87.0659 884 2 0 80.8249 -3.24549 -145.85 + 79 98.9781 885 2 0 80.8522 -3.05 -146.003 + 79 5.14343 886 2 0 80.9592 -2.84983 -146.243 + 79 23.8499 1372 1 1 94.6351 17.074 -174.45 + 79 198.404 1371 1 1 94.55 17.0516 -174.513 + 79 204.001 1370 1 1 94.35 17.0036 -174.588 + 79 71.7179 1369 1 1 94.15 16.9704 -174.679 + 79 60.4118 1368 1 1 93.95 16.8732 -174.756 + 79 4.53522 1367 1 1 93.7499 16.8222 -174.842 + 79 71.944 982 1 0 91.6255 16.4859 -175.85 + 79 1.11962 981 1 0 91.3904 16.45 -175.851 + 79 56.4088 1330 1 1 86.1657 14.0733 -174.85 + 79 121.519 1329 1 1 86.05 14.0221 -174.813 + 79 56.386 1328 1 1 85.85 13.9756 -174.795 + 79 54.5026 1327 1 1 85.65 13.9912 -174.774 + 79 73.8698 1326 1 1 85.4499 14.0258 -174.816 + 79 65.4676 1325 1 1 85.25 14.0431 -174.768 + 79 91.242 1324 1 1 85.05 14.0168 -174.721 + 79 177.413 1323 1 1 84.8499 13.9209 -174.646 + 79 104.172 1322 1 1 84.6498 13.7555 -174.486 + 79 162.072 1321 1 1 84.45 13.7593 -174.466 + 79 260.09 889 3 0 104.906 -2.15506 -116.25 + 79 74.9041 1426 3 1 105.473 -2.14807 -114.85 + 79 81.8149 1427 3 1 105.55 -2.1121 -114.691 + 79 178.483 1428 3 1 105.75 -2.04898 -114.496 + 79 4.01383 887 3 0 105.525 -2.64341 -115.85 + 79 141.599 886 3 0 105.519 -2.65 -115.865 + 79 99.9969 960 3 0 78.2046 12.0977 -116.25 + 79 105.592 961 3 0 77.9313 12.25 -116.12 + 79 111.286 962 3 0 77.6788 12.45 -116.006 + 79 53.0959 963 3 0 77.4366 12.65 -115.942 + 79 251.434 1285 3 1 77.1635 13.0265 -114.85 + 79 150.532 1284 3 1 77.05 13.151 -114.716 + 79 85.0807 1429 3 1 105.95 -2.1396 -114.725 + 79 120.866 938 7 0 98.2297 7.79296 3.75 + 79 20.1029 1390 7 1 98.1634 7.33427 5.15 + 79 137.713 1389 7 1 98.1499 7.3013 5.21246 + 79 287.9 1377 2 1 95.5655 -0.316432 -144.45 + 79 236.923 898 2 0 95.5145 -0.275313 -145.85 + 79 123.202 902 1 0 94.2794 0.62959 -175.85 + 79 107.792 1359 0 1 91.9875 1.95484 -204.45 + 79 147.895 909 0 0 91.9564 1.91596 -205.85 + 79 138.02 1377 1 1 95.5846 -0.251181 -174.45 + 79 126.965 899 1 0 95.5839 -0.243444 -175.85 + 79 247.191 1377 0 1 95.5755 -0.0881425 -204.45 + 79 151.082 899 0 0 95.573 -0.0785215 -205.85 + 79 22.0743 1376 0 1 95.55 -0.12928 -204.831 + 79 1.26571 900 0 0 92.8936 0.128184 -205.85 + 79 8.94266 1354 0 1 90.9611 0.105954 -204.85 + 79 11.2615 895 0 0 89.9451 -1.01583 -205.85 + 79 115.212 1376 8 1 95.3987 -0.527288 35.55 + 79 130.214 897 8 0 95.3854 -0.540065 34.15 + 79 352.568 1374 7 1 95.1064 -0.820846 5.55 + 79 134.185 896 7 0 95.1014 -0.839509 4.15 + 79 107.328 1374 6 1 94.9964 -1.22447 -24.45 + 79 65.866 894 6 0 94.9835 -1.24621 -25.85 + 79 57.8163 893 6 0 94.9814 -1.25 -26.0893 + 79 39.846 1373 5 1 94.7529 -1.71987 -54.45 + 79 89.5563 1372 5 1 94.75 -1.72063 -54.5866 + 79 135.96 891 5 0 94.7221 -1.72845 -55.85 + 79 146.113 1369 4 1 94.0664 -1.89198 -84.45 + 79 131.098 890 4 0 94.0337 -1.89123 -85.85 + 79 282.761 1366 3 1 93.4545 -1.87469 -114.45 + 79 18.7031 1363 2 1 92.752 -1.64818 -144.45 + 79 119.712 1362 2 1 92.75 -1.64756 -144.511 + 79 110.064 892 2 0 92.7066 -1.63567 -145.85 + 79 108.493 1357 1 1 91.6267 -1.28949 -174.45 + 79 133.069 893 1 0 91.5723 -1.25921 -175.85 + 79 145.52 1351 0 1 90.4302 -0.620265 -204.45 + 79 133.346 897 0 0 90.3664 -0.594441 -205.85 + 79 29.7801 971 1 0 135.146 14.4298 -176.25 + 79 282.218 972 1 0 135.178 14.45 -176.222 + 79 105.497 973 1 0 135.241 14.6505 -176.059 +Number of digits in this event: 48 Using G4ParticleGun... -Particle energy: 5.98395 LIN +Particle energy: 3.52855 LIN Particle: gamma Event: 80 -Number of tracker hits in this event: 3 - 80 364.771 1426 0 1 105.503 78.0461 -204.45 - 80 219.548 1289 0 0 105.496 78.0477 -205.85 - 80 29.6477 1190 2 1 58.1765 154.703 -144.85 -Number of digits in this event: 4 +Number of tracker hits in this event: 46 + 80 294.192 708 5 1 -38.2907 45.7098 -54.45 + 80 252.289 1128 5 0 -38.291 45.71 -55.85 + 80 123.604 708 4 1 -38.2992 45.7214 -84.45 + 80 284.395 1128 4 0 -38.2976 45.7226 -85.85 + 80 231.402 708 3 1 -38.261 45.7356 -114.45 + 80 273.223 1128 3 0 -38.2609 45.7376 -115.85 + 80 104.042 708 2 1 -38.2579 45.7654 -144.45 + 80 132.414 1128 2 0 -38.2576 45.7634 -145.85 + 80 117.391 708 1 1 -38.2709 45.7225 -174.45 + 80 112.611 1128 1 0 -38.2719 45.7181 -175.85 + 80 170.43 708 0 1 -38.2984 45.6248 -204.45 + 80 143.903 1127 0 0 -38.2978 45.6217 -205.85 + 80 313.875 234 2 1 -133.175 151.986 -144.45 + 80 203.612 235 2 1 -133.15 151.96 -144.545 + 80 9.88321 416 6 1 -96.75 12.8694 -24.8186 + 80 173.008 1007 7 0 -105.092 21.4756 3.75 + 80 31.0715 1238 0 0 -71.2487 67.7763 -206.25 + 80 103.478 1239 0 0 -71.1823 67.85 -206.205 + 80 61.3851 1240 0 0 -70.9824 68.05 -206.114 + 80 90.7124 1241 0 0 -70.7922 68.25 -205.997 + 80 1.79416 1242 0 0 -70.6175 68.45 -205.853 + 80 24.6974 553 0 1 -69.3261 69.5294 -204.85 + 80 89.8936 554 0 1 -69.25 69.5847 -204.8 + 80 56.4552 555 0 1 -69.05 69.7563 -204.667 + 80 85.4791 556 0 1 -68.85 69.8644 -204.627 + 80 144.414 557 0 1 -68.65 70.0121 -204.608 + 80 63.231 558 0 1 -68.45 70.1422 -204.586 + 80 33.2047 559 0 1 -68.25 70.2113 -204.513 + 80 115.771 1134 0 0 -102.778 47.0083 -206.25 + 80 8.48511 1133 0 0 -103.009 46.85 -205.884 + 80 33.0044 383 0 1 -103.507 46.4919 -204.85 + 80 118.563 382 0 1 -103.55 46.4634 -204.753 + 80 127.168 709 4 1 -38.2163 45.7716 -84.45 + 80 132.762 707 2 1 -38.4549 45.1888 -144.45 + 80 298.673 1125 2 0 -38.4732 45.1582 -145.85 + 80 113.76 706 1 1 -38.7554 44.5287 -174.45 + 80 157.154 1122 1 0 -38.7699 44.4755 -175.85 + 80 123.144 705 0 1 -39.0028 43.352 -204.45 + 80 135.502 1116 0 0 -38.9988 43.2973 -205.85 + 80 3.35614 1357 3 0 32.3302 91.75 -116.067 + 80 112.168 223 6 0 33.9729 -135.35 -26.1872 + 80 122.809 852 1 1 -9.49688 60.3268 -174.85 + 80 29.4895 1126 2 0 -38.6933 45.2503 -146.164 + 80 42.4494 1586 1 0 -141.605 137.503 -176.25 + 80 136.449 1587 1 0 -141.64 137.55 -176.216 + 80 3.51149 1146 1 1 49.25 -81.0536 -174.676 +Number of digits in this event: 22 Using G4ParticleGun... -Particle energy: 1.59251 LIN +Particle energy: 9.98261 LIN Particle: gamma Event: 81 -Number of tracker hits in this event: 4 - 81 15.3017 1520 0 0 18.5625 124.332 -206.25 - 81 230.499 994 0 1 18.9513 124.351 -204.85 - 81 136.123 995 0 1 19.051 124.354 -204.63 - 81 15.8293 996 0 1 19.25 124.218 -204.491 -Number of digits in this event: 5 +Number of tracker hits in this event: 77 + 81 218.874 541 9 1 -71.777 -91.753 65.55 + 81 272.222 441 9 0 -71.7787 -91.7552 64.15 + 81 257.935 541 8 1 -71.8283 -91.7852 35.55 + 81 393.129 441 8 0 -71.8267 -91.7903 34.15 + 81 266.522 541 7 1 -71.7636 -91.901 5.55 + 81 360.334 441 7 0 -71.7438 -91.9184 4.15 + 81 110.634 543 6 1 -71.3616 -92.2624 -24.45 + 81 107.598 439 6 0 -71.3515 -92.2905 -25.85 + 81 160.891 544 5 1 -71.0957 -92.8451 -54.45 + 81 132.452 436 5 0 -71.0939 -92.8658 -55.85 + 81 121.391 545 4 1 -71.0175 -93.2807 -84.45 + 81 225.037 434 4 0 -71.0034 -93.3107 -85.85 + 81 110.739 547 3 1 -70.586 -93.8715 -114.45 + 81 113.746 431 3 0 -70.5749 -93.9034 -115.85 + 81 177.62 548 2 1 -70.4133 -94.5094 -144.45 + 81 127.98 428 2 0 -70.4251 -94.5391 -145.85 + 81 206.43 546 1 1 -70.6819 -95.1321 -174.45 + 81 261.522 424 1 0 -70.7043 -95.1775 -175.85 + 81 100.945 544 0 1 -71.1119 -96.1686 -204.45 + 81 110.127 419 0 0 -71.1209 -96.2232 -205.85 + 81 116.354 421 1 0 -70.5881 -95.8262 -175.85 + 81 154.462 420 1 0 -70.4872 -95.9501 -175.94 + 81 57.4443 409 1 0 -62.4464 -98.15 -176.124 + 81 75.9314 549 1 1 -70.1278 -95.4472 -174.45 + 81 68.4642 550 1 1 -70.05 -95.4255 -174.671 + 81 90.9261 423 1 0 -69.3454 -95.35 -176.086 + 81 426.96 542 4 1 -71.5719 -92.1841 -84.45 + 81 276.05 439 4 0 -71.4884 -92.2392 -85.8506 + 81 139.53 554 3 1 -69.23 -93.1879 -114.45 + 81 116.083 435 3 0 -68.9846 -93.0874 -115.85 + 81 128.71 581 2 1 -63.7459 -90.7324 -144.451 + 81 205.27 447 2 0 -63.5332 -90.5752 -145.85 + 81 108.692 603 1 1 -59.4326 -90.7422 -174.45 + 81 36.9134 448 1 0 -59.1299 -90.3851 -175.85 + 81 66.3411 449 1 0 -59.0987 -90.35 -175.995 + 81 37.6033 642 0 1 -51.4802 -84.026 -204.45 + 81 107.699 643 0 1 -51.45 -83.9967 -204.537 + 81 74.2487 482 0 0 -51.0387 -83.5323 -205.851 + 81 72.4582 483 0 0 -50.9648 -83.4499 -206.083 + 81 97.312 429 1 0 -65.49 -94.1959 -175.85 + 81 233.434 568 3 1 -66.444 -93.8302 -114.45 + 81 106.711 430 3 0 -66.2461 -93.9891 -115.85 + 81 123.611 591 2 1 -61.8119 -97.2593 -144.45 + 81 74.4854 414 2 0 -61.7142 -97.3376 -145.85 + 81 60.3678 413 2 0 -61.6998 -97.35 -146.094 + 81 112.446 598 1 1 -60.2773 -98.9187 -174.45 + 81 111.884 405 1 0 -60.367 -99.0554 -175.85 + 81 126.808 585 0 1 -62.8553 -101.618 -204.451 + 81 121.367 392 0 0 -62.8486 -101.681 -205.85 + 81 223.819 541 6 1 -71.7692 -91.8099 -24.45 + 81 417.712 441 6 0 -71.7697 -91.8113 -25.85 + 81 128.105 541 5 1 -71.7827 -91.8395 -54.45 + 81 383.405 441 5 0 -71.7838 -91.8411 -55.85 + 81 119.96 541 4 1 -71.8076 -91.8695 -84.45 + 81 109.485 441 4 0 -71.8092 -91.8707 -85.85 + 81 104.458 541 3 1 -71.8416 -91.8967 -114.45 + 81 142.667 441 3 0 -71.8435 -91.8991 -115.85 + 81 143.726 540 2 1 -71.8829 -91.9427 -144.45 + 81 152.597 441 2 0 -71.8849 -91.9439 -145.85 + 81 109.989 540 1 1 -71.9224 -91.9689 -174.45 + 81 140.882 440 1 0 -71.9242 -91.9703 -175.85 + 81 104.437 540 0 1 -71.9602 -91.9997 -204.45 + 81 114.297 440 0 0 -71.9622 -92.0017 -205.85 + 81 108.589 542 5 1 -71.6347 -92.1193 -54.45 + 81 264.669 440 5 0 -71.6394 -92.1 -55.85 + 81 126.629 443 4 0 -71.5856 -91.3639 -85.85 + 81 541.293 543 3 1 -71.4417 -91.417 -114.45 + 81 121.897 443 3 0 -71.449 -91.4525 -115.85 + 81 148.989 541 2 1 -71.6982 -92.1108 -144.45 + 81 97.8008 440 2 0 -71.7614 -92.1242 -145.85 + 81 127.675 535 1 1 -72.9548 -92.6336 -174.45 + 81 285.24 437 1 0 -73.0147 -92.6535 -175.85 + 81 119.292 528 0 1 -74.4036 -93.0739 -204.45 + 81 96.2627 435 0 0 -74.5151 -93.0512 -205.85 + 81 125.668 389 1 0 -45.4945 -102.264 -176.25 + 81 57.9979 388 1 0 -45.5148 -102.35 -176.198 + 81 5.11022 542 3 1 -71.4602 -91.3994 -114.45 +Number of digits in this event: 42 Using G4ParticleGun... -Particle energy: 6.08891 LIN +Particle energy: 8.6081 LIN Particle: gamma Event: 82 -Number of tracker hits in this event: 15 - 82 297.102 1431 2 1 106.497 6.14411 -144.45 - 82 269.369 930 2 0 106.495 6.14301 -145.85 - 82 217.906 1431 1 1 106.451 6.12758 -174.45 - 82 237.005 930 1 0 106.448 6.12834 -175.85 - 82 119.618 1431 0 1 106.374 6.14642 -204.45 - 82 408.538 930 0 0 106.37 6.14795 -205.85 - 82 127.615 1230 0 1 66.25 14.9733 -204.787 - 82 12.7466 1229 0 1 66.0499 14.9837 -204.599 - 82 181.907 1502 3 1 120.55 -31.6458 -114.496 - 82 24.9525 1501 3 1 120.519 -31.6661 -114.45 - 82 113.028 1432 0 1 106.57 6.23273 -204.45 - 82 132.111 931 0 0 106.772 6.25 -206.165 - 82 139.175 932 0 0 106.919 6.45 -206.064 - 82 286.741 933 0 0 106.849 6.65 -205.976 - 82 25.8597 1357 0 1 91.75 4.63275 -204.833 -Number of digits in this event: 13 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 8.00382 LIN +Particle energy: 5.2353 LIN Particle: gamma Event: 83 -Number of tracker hits in this event: 7 - 83 234.728 1253 1 1 70.7414 -85.2885 -174.45 - 83 218.313 473 1 0 70.7459 -85.2919 -175.85 - 83 219.698 1253 0 1 70.7698 -85.7333 -204.45 - 83 125.766 471 0 0 70.7054 -85.6679 -205.85 - 83 107.164 473 0 0 70.7634 -85.2833 -205.85 - 83 9.93819 1093 0 1 38.824 -41.3193 -204.85 - 83 274.364 909 3 1 1.98394 -21.7676 -114.45 -Number of digits in this event: 7 +Number of tracker hits in this event: 0 +Number of digits in this event: 1 Using G4ParticleGun... -Particle energy: 9.26315 LIN +Particle energy: 6.65318 LIN Particle: gamma Event: 84 -Number of tracker hits in this event: 51 - 84 330.023 847 4 1 -10.4704 121.352 -84.45 - 84 281.915 1506 4 0 -10.4703 121.352 -85.85 - 84 291.491 847 3 1 -10.4694 121.353 -114.45 - 84 129.969 1506 3 0 -10.4691 121.355 -115.85 - 84 118.676 847 2 1 -10.468 121.378 -144.45 - 84 335.686 1506 2 0 -10.4691 121.378 -145.85 - 84 106.302 847 1 1 -10.4898 121.394 -174.45 - 84 247.969 1506 1 0 -10.4914 121.395 -175.85 - 84 631.268 847 0 1 -10.5354 121.396 -204.45 - 84 327.995 1506 0 0 -10.5367 121.397 -205.85 - 84 14.7637 1769 4 0 117.358 173.957 -86.2496 - 84 107.69 1768 4 0 117.385 173.95 -86.2008 - 84 23.1666 1491 4 1 118.471 173.872 -84.85 - 84 138.91 1492 4 1 118.55 173.894 -84.7633 - 84 8.93201 1493 4 1 118.75 174.024 -84.4814 - 84 50.6782 1012 3 0 -0.414782 22.6018 -116.25 - 84 32.6339 193 1 1 -141.35 12.2697 -174.472 - 84 91.6327 1011 3 0 -0.346835 22.45 -116.006 - 84 209.661 899 3 1 -0.05 22.6858 -114.682 - 84 114.096 1505 2 0 -10.3975 121.35 -145.983 - 84 127.287 1749 2 0 0.0891934 170.147 -146.25 - 84 5.18957 1750 2 0 0.0891389 170.15 -146.234 - 84 30.3928 905 2 1 1.21598 170.685 -144.85 - 84 142.692 906 2 1 1.25005 170.72 -144.793 - 84 266.365 848 0 1 -10.4075 121.402 -204.45 - 84 125.873 1505 3 0 -10.4611 121.328 -115.85 - 84 131.519 848 2 1 -10.3673 121.404 -144.45 - 84 363.968 849 1 1 -10.151 121.569 -174.45 - 84 107.629 1507 1 0 -10.1433 121.577 -175.85 - 84 89.6671 850 0 1 -10.0011 121.749 -204.45 - 84 158.725 1508 0 0 -9.994 121.756 -205.85 - 84 138.926 849 0 1 -10.0846 121.776 -204.45 - 84 218.033 1509 0 0 -10.6986 121.95 -205.914 - 84 52.9859 850 1 1 -10.05 121.361 -174.669 - 84 74.8752 1504 1 0 -9.84409 121.033 -175.85 - 84 34.5104 1503 1 0 -9.77756 120.95 -176.163 - 84 92.9716 884 0 1 -3.23327 113.251 -204.45 - 84 7.07752 883 0 1 -3.25 113.345 -204.823 - 84 118.306 1467 0 0 -3.31066 113.564 -205.85 - 84 367.294 1503 0 0 -11.2078 120.827 -205.85 - 84 388.922 1504 0 0 -11.7412 120.95 -206.008 - 84 168.386 833 0 1 -13.4225 120.674 -204.85 - 84 214.719 832 0 1 -13.45 120.672 -204.834 - 84 158.918 831 0 1 -13.65 120.571 -204.547 - 84 143.799 834 0 1 -13.25 120.009 -204.727 - 84 207.068 846 0 1 -10.6501 120.85 -204.618 - 84 8.87832 845 0 1 -10.85 120.392 -204.82 - 84 40.8752 1497 0 0 -11.1868 119.643 -205.85 - 84 122.145 1496 0 0 -11.2142 119.55 -205.981 - 84 0.227697 1495 0 0 -11.2279 119.35 -206.25 - 84 123.338 1505 4 0 -10.4716 121.35 -85.9337 -Number of digits in this event: 31 +Number of tracker hits in this event: 2 + 84 3.56814 773 4 1 -25.3028 66.0734 -84.85 + 84 17.9715 330 3 1 -114.15 -157.801 -114.727 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 1.72611 LIN +Particle energy: 1.80697 LIN Particle: gamma Event: 85 -Number of tracker hits in this event: 55 - 85 244.033 1226 8 1 65.3964 59.6744 35.55 - 85 236.949 1198 8 0 65.3954 59.6728 34.15 - 85 171.964 1226 7 1 65.3808 59.6543 5.55 - 85 178.332 1197 7 0 65.3756 59.647 4.15 - 85 120.983 1226 6 1 65.2846 59.4818 -24.45 - 85 103.572 1197 6 0 65.2782 59.475 -25.85 - 85 146.072 1225 5 1 65.1259 59.3286 -54.45 - 85 104.743 1196 5 0 65.1119 59.3239 -55.85 - 85 542.204 1223 4 1 64.8198 59.2179 -84.45 - 85 118.875 1195 4 0 64.8098 59.2115 -85.85 - 85 108.796 1222 3 1 64.6199 59.0473 -114.45 - 85 190.071 1194 3 0 64.6051 59.0315 -115.85 - 85 483.177 1221 2 1 64.3437 58.7014 -144.45 - 85 236.642 1193 2 0 64.3312 58.6915 -145.85 - 85 93.6624 1220 1 1 64.0999 58.4791 -174.45 - 85 109.991 1192 1 0 64.0944 58.47 -175.85 - 85 172.028 1219 0 1 64.0017 58.3214 -204.45 - 85 150.312 1191 0 0 63.999 58.3109 -205.85 - 85 122.016 1223 3 1 64.7717 58.9449 -114.45 - 85 20.4648 1196 3 0 64.7131 59.4098 -115.85 - 85 105.466 1197 3 0 64.7243 59.45 -115.948 - 85 121.543 1232 1 1 66.508 57.8492 -174.45 - 85 179.381 1190 1 0 66.3509 58.1289 -175.85 - 85 189.076 1224 0 1 65.0488 61.6688 -204.45 - 85 9.91045 1214 0 0 64.4887 63.021 -205.85 - 85 94.9236 1215 0 0 64.4774 63.05 -205.881 - 85 52.7821 1216 0 0 64.3185 63.25 -206.125 - 85 181.019 1258 0 0 50.1094 71.7755 -206.25 - 85 37.0221 1257 0 0 50.0438 71.65 -205.977 - 85 144.071 1149 0 1 49.995 71.3807 -204.85 - 85 126.836 1197 2 0 64.5111 59.5502 -145.85 - 85 14.0697 1198 2 0 64.8465 59.6502 -146.217 - 85 428.263 1249 2 0 141.483 69.9998 -146.25 - 85 68.0849 1250 2 0 142.513 70.0501 -145.887 - 85 44.6202 1618 2 1 143.933 71.3907 -144.85 - 85 531.961 1619 2 1 143.95 71.4065 -144.835 - 85 67.4178 1116 5 1 43.4116 94.7232 -54.85 - 85 11.2993 1504 1 1 120.95 -12.246 -174.694 - 85 244.492 1198 7 0 65.376 59.65 4.06933 - 85 110.107 1229 7 1 65.9963 59.7521 5.55 - 85 165.411 1232 6 1 66.4702 59.7492 -24.45 - 85 134.163 1198 6 0 66.4413 59.7152 -25.85 - 85 109.851 1230 5 1 66.1481 59.0373 -54.45 - 85 121.417 1194 5 0 66.1455 58.9955 -55.85 - 85 112.401 1230 4 1 66.1414 58.1084 -84.45 - 85 131.424 1189 4 0 66.1357 58.043 -85.85 - 85 19.782 1228 3 1 65.8431 56.8344 -114.45 - 85 71.0972 1229 3 1 65.85 56.8306 -114.534 - 85 132.395 1183 3 0 65.959 56.7666 -115.85 - 85 176.141 1241 2 1 68.3841 55.3525 -144.45 - 85 117.334 1176 2 0 68.495 55.3585 -145.85 - 85 127.87 1254 1 1 70.859 55.6747 -174.45 - 85 110.787 1178 1 0 71.028 55.6627 -175.85 - 85 406.645 1272 0 1 74.5333 55.4912 -204.45 - 85 138.306 1177 0 0 74.6689 55.4648 -205.85 -Number of digits in this event: 32 +Number of tracker hits in this event: 49 + 85 210.745 328 4 1 -114.353 85.1971 -84.45 + 85 94.1853 329 4 1 -114.35 85.2011 -84.5902 + 85 290.381 1325 4 0 -114.326 85.2379 -85.85 + 85 101.355 331 3 1 -113.872 86.0188 -114.45 + 85 115.046 1330 3 0 -113.937 86.1531 -115.85 + 85 194.748 323 2 1 -115.47 88.6467 -144.45 + 85 94.4843 1343 2 0 -115.559 88.7975 -145.85 + 85 14.8558 314 1 1 -117.343 92.0781 -174.45 + 85 108.382 313 1 1 -117.35 92.0861 -174.515 + 85 202.29 1360 1 0 -117.5 92.244 -175.85 + 85 126.946 296 0 1 -120.83 95.8233 -204.45 + 85 114.107 1379 0 0 -120.94 96.0825 -205.85 + 85 17.9666 1380 0 0 -120.968 96.15 -206.207 + 85 59.483 538 3 1 -72.3988 28.2256 -114.85 + 85 138.256 1611 4 0 -20.2034 142.426 -86.25 + 85 285.84 329 2 1 -114.287 85.2003 -144.45 + 85 174.111 328 2 1 -114.35 85.1958 -144.697 + 85 280.587 1325 2 0 -114.483 85.1591 -145.85 + 85 150.062 294 1 1 -121.318 80.6474 -174.45 + 85 68.3653 1300 1 0 -121.332 80.1285 -175.85 + 85 52.0878 1299 1 0 -121.313 80.05 -176.092 + 85 64.7554 301 0 1 -119.809 72.4998 -204.45 + 85 62.8653 302 0 1 -119.75 72.5032 -204.746 + 85 56.2395 1266 0 0 -119.793 73.3463 -205.85 + 85 80.0514 1267 0 0 -119.8 73.4502 -206.022 + 85 162.241 1299 0 0 -135.606 79.9824 -206.25 + 85 108.639 218 0 1 -136.442 80.1075 -204.85 + 85 73.4414 219 0 1 -136.35 79.9975 -204.542 + 85 67.918 220 0 1 -136.15 79.9003 -204.461 + 85 128.417 221 0 1 -135.95 79.8976 -204.556 + 85 410.382 1300 0 0 -135.928 80.2423 -205.85 + 85 27.9927 1301 0 0 -135.892 80.25 -205.977 + 85 132.169 329 1 1 -114.155 85.6494 -174.45 + 85 193.57 1328 1 0 -114.235 85.6924 -175.85 + 85 193.306 322 0 1 -115.603 86.8583 -204.45 + 85 104.633 1334 0 0 -115.619 86.8983 -205.85 + 85 247.305 328 3 1 -114.407 85.3088 -114.45 + 85 148.145 1326 3 0 -114.413 85.312 -115.85 + 85 202.485 1326 2 0 -114.536 85.3713 -145.85 + 85 145.175 327 1 1 -114.59 85.3216 -174.45 + 85 102.565 1326 1 0 -114.598 85.3208 -175.85 + 85 114.425 326 0 1 -114.751 85.2808 -204.45 + 85 203.334 1326 0 0 -114.749 85.2785 -205.85 + 85 2.48602 716 11 0 143.601 -36.65 123.788 + 85 131.523 715 11 0 143.533 -36.85 123.875 + 85 204.834 714 11 0 143.423 -37.05 123.824 + 85 131.32 1795 4 1 179.15 -88.6974 -84.7909 + 85 157.5 1796 4 1 179.35 -88.8513 -84.7418 + 85 42.1978 1036 3 0 76.1954 27.3156 -116.25 +Number of digits in this event: 28 Using G4ParticleGun... -Particle energy: 8.32481 LIN +Particle energy: 1.12596 LIN Particle: gamma Event: 86 -Number of tracker hits in this event: 4 - 86 24.5542 451 5 0 17.3991 -89.85 -56.193 - 86 43.5152 452 5 0 18.3725 -89.65 -55.9852 - 86 189.681 503 2 0 164.008 -79.3563 -146.25 - 86 143.761 1075 0 0 -127.547 35.1402 -206.25 -Number of digits in this event: 4 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 6.18875 LIN +Particle energy: 7.5912 LIN Particle: gamma Event: 87 -Number of tracker hits in this event: 9 - 87 238.847 240 1 1 -132.101 41.4112 -174.45 - 87 260.814 1106 1 0 -132.1 41.411 -175.85 - 87 150.499 240 0 1 -132.088 41.4013 -204.45 - 87 254.219 1106 0 0 -132.088 41.3992 -205.85 - 87 163.544 932 0 1 6.45 143.42 -204.749 - 87 156.678 714 0 0 -110.59 -37.05 -206.122 - 87 131.179 239 0 1 -132.154 41.3655 -204.45 - 87 50.5281 662 2 0 -136.186 -47.45 -146.063 - 87 87.0328 661 2 0 -136.226 -47.65 -145.88 -Number of digits in this event: 10 +Number of tracker hits in this event: 4 + 87 102.746 1287 4 0 -70.5006 77.4914 -86.25 + 87 102.969 122 3 1 -155.55 -43.9924 -114.827 + 87 105.864 1304 1 0 -64.5981 80.8963 -176.25 + 87 13.1959 948 1 0 -86.3662 9.85 -176.232 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 7.71661 LIN +Particle energy: 3.81649 LIN Particle: gamma Event: 88 -Number of tracker hits in this event: 128 - 88 358.72 1280 7 1 76.1814 105.771 5.55 - 88 489.288 1428 7 0 76.1801 105.77 4.15 - 88 248.161 1280 6 1 76.1436 105.737 -24.45 - 88 156.212 1427 6 0 76.1408 105.737 -25.85 - 88 405.546 1280 5 1 76.0748 105.732 -54.45 - 88 391.895 1427 5 0 76.0703 105.733 -55.85 - 88 89.0831 1279 4 1 75.9638 105.742 -84.45 - 88 343.203 1427 4 0 75.9564 105.742 -85.85 - 88 192.004 1278 3 1 75.7986 105.737 -114.45 - 88 240.901 1427 3 0 75.7873 105.736 -115.85 - 88 105.016 1277 2 1 75.5606 105.727 -144.45 - 88 223.88 1427 2 0 75.5457 105.725 -145.85 - 88 138.375 1275 1 1 75.223 105.697 -174.45 - 88 108.05 1427 1 0 75.2103 105.695 -175.85 - 88 118.192 1274 0 1 74.952 105.666 -204.45 - 88 118.471 1427 0 0 74.936 105.666 -205.85 - 88 168.824 1697 4 0 136.366 159.716 -86.25 - 88 124.438 1597 4 1 139.55 158.582 -84.5056 - 88 453.096 1428 4 0 75.9653 105.75 -86.0697 - 88 284.532 1278 2 1 75.7804 105.798 -144.45 - 88 258.286 1428 2 0 75.781 105.781 -145.85 - 88 266.247 1278 1 1 75.7821 105.443 -174.45 - 88 238.844 1426 1 0 75.7718 105.399 -175.85 - 88 227.863 1277 0 1 75.582 104.234 -204.45 - 88 102.477 1420 0 0 75.5833 104.205 -205.85 - 88 151.817 1429 1 0 75.7302 106.053 -175.85 - 88 105.609 1430 0 0 75.5759 106.154 -205.85 - 88 138.275 1533 0 0 97.6514 126.785 -206.25 - 88 141.733 1532 0 0 97.7048 126.75 -206.096 - 88 100.174 403 10 1 -99.4838 116.609 95.15 - 88 253.834 402 10 1 -99.5505 116.608 95.2824 - 88 379.584 1280 4 1 76.1378 105.687 -84.45 - 88 86.1871 1281 4 1 76.25 105.652 -84.5601 - 88 78.412 1282 4 1 76.45 105.602 -84.697 - 88 13.303 1283 4 1 76.6508 105.578 -84.8155 - 88 121.879 1501 4 0 126.504 120.362 -86.25 - 88 60.4227 1528 4 1 125.829 120.444 -84.85 - 88 55.1412 1527 4 1 125.75 120.476 -84.7256 - 88 67.8629 1526 4 1 125.55 120.464 -84.6146 - 88 23.0539 1525 4 1 125.35 120.568 -84.4994 - 88 122.38 1428 6 0 76.1647 105.763 -25.85 - 88 118.052 1280 3 1 76.111 105.575 -114.45 - 88 132.44 1279 2 1 76.017 105.571 -144.45 - 88 108.886 1279 1 1 75.8954 105.514 -174.45 - 88 112.691 1278 0 1 75.8473 105.399 -204.45 - 88 147.353 1426 0 0 75.8405 105.393 -205.85 - 88 26.0421 1314 3 1 83.0151 102.532 -114.451 - 88 73.1142 1315 3 1 83.05 102.518 -114.56 - 88 119.017 1411 3 0 83.3006 102.402 -115.85 - 88 107.214 1338 2 1 87.7244 100.708 -144.45 - 88 122.273 1339 2 1 87.85 100.411 -144.667 - 88 4.99457 1393 2 0 88.5933 98.7735 -145.85 - 88 111.238 1392 2 0 88.6037 98.75 -145.867 - 88 138.221 1391 2 0 88.6857 98.55 -146.023 - 88 191.157 1390 2 0 88.7542 98.3498 -146.177 - 88 26.4738 1403 1 1 100.868 61.687 -174.45 - 88 56.5273 1404 1 1 100.95 61.6819 -174.52 - 88 197.574 1405 1 1 101.15 61.6683 -174.683 - 88 182.267 1207 1 0 102.32 61.4965 -175.85 - 88 118.061 1425 4 0 76.1136 105.328 -85.8501 - 88 28.7567 1279 3 1 75.8781 98.885 -114.45 - 88 131.625 1392 3 0 75.5692 98.6533 -115.85 - 88 57.5154 1245 2 1 69.0585 94.4449 -144.45 - 88 64.6091 1244 2 1 69.05 94.4244 -144.654 - 88 128.496 1370 2 0 69.0008 94.3435 -145.85 - 88 140.979 1237 1 1 67.6239 93.3603 -174.451 - 88 96.9791 1366 1 0 67.3444 93.4601 -175.85 - 88 120.214 1213 0 1 62.7964 95.47 -204.45 - 88 182.038 1376 0 0 62.4804 95.395 -205.85 - 88 182.657 1249 2 1 69.8919 102.61 -144.45 - 88 36.8166 1248 2 1 69.85 102.558 -144.711 - 88 273.291 1410 2 0 69.7636 102.305 -145.85 - 88 174.355 1261 1 1 72.2741 95.3318 -174.451 - 88 79.6194 1374 1 0 72.682 95.0289 -175.85 - 88 30.476 1373 1 0 72.7281 94.95 -176.155 - 88 238.998 1302 0 1 80.5296 84.6904 -204.45 - 88 0.00989803 1303 0 1 80.65 84.361 -204.85 - 88 114.23 1318 0 0 81.49 83.7453 -205.85 - 88 67.0297 1317 0 0 81.7655 83.65 -206.054 - 88 122.54 1411 2 0 69.7776 102.534 -145.85 - 88 184.513 1232 1 1 66.6454 101.018 -174.451 - 88 125.913 1398 1 0 66.3104 99.9426 -175.851 - 88 58.2878 1397 1 0 66.2449 99.75 -176.091 - 88 13.5163 1192 0 1 58.4612 92.8535 -204.45 - 88 110.843 1191 0 1 58.45 92.8346 -204.493 - 88 20.9047 1360 0 0 58.0831 92.1887 -205.85 - 88 115.072 1359 0 0 58.0605 92.15 -205.929 - 88 52.0315 1281 5 1 76.25 105.789 -54.6362 - 88 120.425 1429 5 0 76.2007 106.028 -55.85 - 88 24.2375 1262 4 1 72.516 104.57 -84.45 - 88 61.5987 1261 4 1 72.45 104.614 -84.5038 - 88 71.6749 1260 4 1 72.25 104.655 -84.6457 - 88 56.9823 1259 4 1 72.05 104.627 -84.7843 - 88 283.357 1421 4 0 69.8783 104.516 -85.85 - 88 12.8671 1267 4 1 73.4694 105.715 -84.45 - 88 152.839 1266 4 1 73.45 105.734 -84.4978 - 88 29.6569 1430 4 0 72.8021 106.31 -85.85 - 88 108.087 1431 4 0 72.7568 106.35 -85.9417 - 88 97.9898 1197 3 1 59.5711 117.785 -114.45 - 88 117.965 1488 3 0 59.3502 117.908 -115.85 - 88 66.5537 1171 2 1 54.4082 118.514 -144.45 - 88 93.8717 1172 2 1 54.4501 118.339 -144.621 - 88 51.4992 1484 2 0 54.7269 117.071 -145.85 - 88 76.576 1483 2 0 54.7546 116.95 -145.968 - 88 23.1238 1482 2 0 54.8106 116.75 -146.182 - 88 44.6372 1206 1 1 61.3359 93.9675 -174.451 - 88 128.575 1205 1 1 61.25 93.8415 -174.58 - 88 8.17712 1363 1 0 60.2781 92.7718 -175.85 - 88 104.846 1362 1 0 60.2556 92.75 -175.874 - 88 103.889 1361 1 0 60.0087 92.55 -176.064 - 88 6.25209 1360 1 0 59.8058 92.35 -176.237 - 88 152.382 1024 0 1 25.0438 57.2175 -204.45 - 88 322.038 1023 0 1 24.85 56.696 -204.702 - 88 57.9552 1171 0 0 24.2666 54.4142 -205.85 - 88 82.1644 1170 0 0 24.222 54.25 -205.935 - 88 126.593 1169 0 0 24.1661 54.05 -206.039 - 88 69.1356 1168 0 0 24.1048 53.85 -206.137 - 88 12.6537 1167 0 0 24.0447 53.6498 -206.231 - 88 273.49 1486 3 0 60.1084 117.527 -115.85 - 88 271.297 1279 7 1 76.05 105.812 5.47553 - 88 48.7031 1278 7 1 75.8496 105.783 5.27544 - 88 130.726 1193 7 0 -13.5473 58.695 3.7503 - 88 97.634 1194 7 0 -13.8306 58.8502 4.12053 - 88 93.1291 1195 7 0 -14.1026 59.05 4.08362 - 88 54.8607 1196 7 0 -14.1418 59.25 4.02782 - 88 79.9648 1197 7 0 -14.1748 59.4507 4.0011 - 88 131.245 1198 7 0 -14.2091 59.65 4.01707 - 88 25.2958 1199 7 0 -14.0624 59.85 3.83569 -Number of digits in this event: 59 -Using G4ParticleGun... -Particle energy: 4.48849 LIN +Number of tracker hits in this event: 1 + 88 27.5522 36 0 0 64.8832 -172.861 -206.25 +Number of digits in this event: 3 +Using G4ParticleGun... +Particle energy: 4.79328 LIN Particle: gamma Event: 89 -Number of tracker hits in this event: 105 - 89 310.054 1068 11 1 33.755 -51.5539 125.55 - 89 298.733 642 11 0 33.7547 -51.5538 124.15 - 89 374.508 1068 10 1 33.7447 -51.5543 95.55 - 89 249.191 642 10 0 33.7455 -51.5537 94.15 - 89 235.839 1068 9 1 33.7696 -51.557 65.55 - 89 291.262 642 9 0 33.7713 -51.5588 64.15 - 89 206.334 1068 8 1 33.8055 -51.5828 35.55 - 89 121.57 642 8 0 33.8096 -51.5855 34.15 - 89 117.702 1069 7 1 33.8904 -51.6442 5.55 - 89 274.166 642 7 0 33.8961 -51.6468 4.15 - 89 103.667 1069 6 1 34.0285 -51.7075 -24.45 - 89 121.807 641 6 0 34.0341 -51.7098 -25.85 - 89 119.664 1070 5 1 34.1404 -51.7603 -54.45 - 89 104.818 641 5 0 34.1456 -51.7637 -55.85 - 89 154.156 1071 4 1 34.2627 -51.8283 -84.45 - 89 201.131 641 4 0 34.2677 -51.8197 -85.85 - 89 117.178 1071 3 1 34.3485 -51.6239 -114.45 - 89 94.7601 642 3 0 34.3606 -51.6254 -115.85 - 89 107.52 1072 2 1 34.6328 -51.7304 -144.45 - 89 136.236 641 2 0 34.6464 -51.7385 -145.85 - 89 140.681 1074 1 1 34.9245 -51.8544 -174.45 - 89 111.036 640 1 0 34.9277 -51.8605 -175.85 - 89 166.319 1074 0 1 34.9601 -52.002 -204.45 - 89 108.926 640 0 0 34.9649 -52.0043 -205.85 - 89 29.3601 641 7 0 33.8813 -51.65 4.03831 - 89 43.3748 1063 7 1 32.8472 -51.2715 5.15 - 89 13.3479 1064 7 1 32.8501 -51.2685 5.16618 - 89 112.345 643 8 0 33.8 -51.444 34.15 - 89 234.835 1068 7 1 33.8051 -51.3773 5.55 - 89 160.087 643 7 0 33.8013 -51.37 4.15 - 89 149.48 1068 6 1 33.7401 -51.197 -24.45 - 89 306.419 644 6 0 33.7379 -51.1875 -25.85 - 89 105.25 1068 5 1 33.7197 -51.0606 -54.45 - 89 130.424 644 5 0 33.7158 -51.062 -55.85 - 89 219.473 1067 4 1 33.6393 -51.0837 -84.45 - 89 160.435 644 4 0 33.6327 -51.0853 -85.85 - 89 405.624 1067 3 1 33.4824 -51.0935 -114.45 - 89 299.281 644 3 0 33.4732 -51.0977 -115.85 - 89 166.466 1066 2 1 33.2817 -51.1927 -144.45 - 89 122.517 644 2 0 33.2745 -51.2018 -145.85 - 89 104.559 1065 1 1 33.1248 -51.3946 -174.45 - 89 113.031 643 1 0 33.1212 -51.4018 -175.85 - 89 108.048 1064 0 1 33.0419 -51.5431 -204.45 - 89 124.771 642 0 0 33.0425 -51.551 -205.85 - 89 56.8125 851 0 1 -9.73753 -60.4409 -204.85 - 89 70.4945 599 0 0 -9.9569 -60.0672 -205.85 - 89 163.072 1439 1 1 107.95 -40.0842 -174.797 - 89 14.8569 1519 0 1 123.95 -154.119 -204.483 - 89 134.264 1440 1 1 108.15 -39.9216 -174.534 - 89 24.1336 643 4 0 33.33 -51.4293 -85.85 - 89 336.4 642 4 0 33.3115 -51.45 -85.9446 - 89 41.7563 1054 3 1 30.9692 -52.7307 -114.45 - 89 77.7031 1053 3 1 30.85 -52.7401 -114.474 - 89 51.9871 1052 3 1 30.65 -52.7307 -114.518 - 89 65.771 1051 3 1 30.4499 -52.7367 -114.538 - 89 57.9465 1050 3 1 30.25 -52.7623 -114.527 - 89 68.6618 1049 3 1 30.05 -52.7984 -114.485 - 89 154.364 687 4 0 19.2058 -42.6322 -86.25 - 89 127.106 990 4 1 18.2268 -42.601 -84.85 - 89 105.262 989 4 1 18.0498 -42.7986 -84.6555 - 89 67.9126 988 4 1 17.8496 -43.0713 -84.5576 - 89 97.5101 987 4 1 17.65 -43.1754 -84.5829 - 89 71.5529 986 4 1 17.45 -43.3068 -84.5798 - 89 143.369 985 4 1 17.25 -43.4393 -84.6056 - 89 475.89 984 4 1 17.05 -43.5875 -84.7147 - 89 228.011 983 4 1 16.85 -43.7979 -84.7856 - 89 230.04 982 4 1 16.65 -43.9279 -84.7738 - 89 87.8612 1034 5 1 26.9969 -40.5276 -54.45 - 89 127.608 1033 5 1 26.8497 -40.4483 -54.6736 - 89 156.589 700 5 0 25.9036 -39.9792 -55.85 - 89 12.536 701 5 0 25.6499 -39.85 -56.2188 - 89 478.896 998 4 1 19.8427 -29.2102 -84.45 - 89 21.9 999 4 1 19.85 -28.4691 -84.8031 - 89 53.6131 763 4 0 20.444 -27.3546 -85.85 - 89 81.9332 764 4 0 20.491 -27.25 -85.9372 - 89 113.776 765 4 0 20.5597 -27.05 -86.0236 - 89 108.523 766 4 0 20.6578 -26.85 -86.1207 - 89 4.58417 767 4 0 20.7308 -26.6499 -86.2363 - 89 74.6842 1032 5 1 26.6499 -40.4717 -54.6567 - 89 109.2 698 5 0 25.9518 -40.3524 -55.8503 - 89 10.2221 697 5 0 25.8197 -40.45 -56.2372 - 89 281.021 1069 4 1 33.9461 -51.5686 -84.45 - 89 185.382 640 3 0 33.5978 -52.0322 -115.85 - 89 93.1854 1067 2 1 33.45 -52.9478 -144.608 - 89 39.0508 635 2 0 33.5227 -53.0389 -145.85 - 89 136.422 634 2 0 33.5314 -53.05 -146.005 - 89 214.045 1075 1 1 35.2137 -54.7845 -174.45 - 89 104.703 625 1 0 35.1571 -54.9238 -175.85 - 89 166.029 1069 0 1 34.0466 -58.5018 -204.45 - 89 114.99 606 0 0 33.8824 -58.6728 -205.85 - 89 127.051 1075 3 1 35.0671 -51.3277 -114.45 - 89 12.0315 1087 2 1 37.643 -48.9798 -144.45 - 89 111.384 1088 2 1 37.65 -48.9771 -144.491 - 89 99.5912 655 2 0 37.8797 -48.8891 -145.85 - 89 127.991 1115 1 1 43.1303 -47.3779 -174.45 - 89 134.032 662 1 0 43.3234 -47.4782 -175.85 - 89 43.8317 1137 0 1 47.6 -48.7381 -204.45 - 89 100.828 1138 0 1 47.6501 -48.7348 -204.612 - 89 176.35 656 0 0 48.0269 -48.7116 -205.85 - 89 53.7642 643 11 0 33.9698 -51.45 123.822 - 89 12.1442 644 11 0 34.106 -51.2499 123.78 - 89 77.389 836 11 0 74.0646 -12.7402 123.75 - 89 27.156 837 11 0 74.0699 -12.65 124.043 - 89 218.857 1268 11 1 73.7894 -12.1181 125.15 - 89 136.92 1267 11 1 73.6498 -12.0472 125.295 -Number of digits in this event: 53 +Number of tracker hits in this event: 2 + 89 269.931 845 0 1 -10.9926 -71.5099 -204.45 + 89 371.129 542 0 0 -10.9939 -71.51 -205.85 +Number of digits in this event: 4 Using G4ParticleGun... -Particle energy: 4.89633 LIN +Particle energy: 5.87463 LIN Particle: gamma Event: 90 -Number of tracker hits in this event: 15 - 90 111.68 1069 2 0 -82.1043 34.0099 -146.081 - 90 335.183 489 1 1 -82.1167 33.9874 -174.45 - 90 305.859 1069 1 0 -82.1091 34.0137 -175.85 - 90 162.286 490 0 1 -81.9638 34.5628 -204.45 - 90 134.831 1072 0 0 -81.9549 34.5969 -205.85 - 90 97.0883 489 0 1 -82.1097 34.0376 -204.45 - 90 106.543 1069 0 0 -82.1089 34.0397 -205.85 - 90 119.605 344 1 1 -111.15 -47.7604 -174.615 - 90 190.658 345 1 1 -111.15 -48.0216 -174.484 - 90 201.066 1067 1 0 -73.1373 33.5723 -176.25 - 90 50.5199 1068 1 0 -73.2011 33.65 -176.158 - 90 38.2584 1356 1 0 -25.1188 91.4481 -176.25 - 90 67.7618 1132 1 0 -127.939 46.5358 -176.25 - 90 100.579 1645 14 0 122.903 149.277 213.75 - 90 71.8173 1552 14 0 172.812 130.722 213.75 -Number of digits in this event: 9 +Number of tracker hits in this event: 0 +Number of digits in this event: 2 Using G4ParticleGun... -Particle energy: 3.2437 LIN +Particle energy: 6.74845 LIN Particle: gamma Event: 91 -Number of tracker hits in this event: 72 - 91 228.33 375 7 1 -105.056 -34.0296 5.55 - 91 282.717 730 7 0 -105.059 -34.0257 4.15 - 91 631.737 375 6 1 -105.118 -33.9342 -24.45 - 91 511.024 730 6 0 -105.123 -33.9376 -25.85 - 91 270.436 374 5 1 -105.191 -34.0189 -54.45 - 91 507.187 730 5 0 -105.197 -34.0093 -55.85 - 91 260.331 374 4 1 -105.307 -33.817 -84.45 - 91 254.463 731 4 0 -105.322 -33.8103 -85.85 - 91 116.353 372 3 1 -105.652 -33.6543 -114.45 - 91 133.079 731 3 0 -105.676 -33.6521 -115.85 - 91 205.024 369 2 1 -106.165 -33.4868 -144.45 - 91 288.759 732 2 0 -106.176 -33.4938 -145.85 - 91 259.121 368 1 1 -106.419 -33.6224 -174.45 - 91 133.608 732 1 0 -106.448 -33.6451 -175.85 - 91 244.63 731 1 0 -106.455 -33.65 -176.154 - 91 159.047 365 0 1 -107.06 -34.0832 -204.45 - 91 113.547 729 0 0 -107.097 -34.0986 -205.85 - 91 116.01 737 1 0 -105.786 -32.6493 -175.85 - 91 112.234 364 0 1 -107.15 -35.7546 -204.561 - 91 46.3865 718 0 0 -107.243 -36.3933 -205.85 - 91 87.1753 717 0 0 -107.251 -36.45 -205.973 - 91 81.5477 399 0 1 -100.257 -30.3809 -204.45 - 91 84.6847 400 0 1 -100.15 -30.1596 -204.703 - 91 97.1235 755 0 0 -99.4957 -28.9807 -205.85 - 91 111.1 756 0 0 -99.4175 -28.8498 -205.986 - 91 82.1853 757 0 0 -99.2835 -28.65 -206.134 - 91 3.27531 758 0 0 -99.1261 -28.45 -206.244 - 91 113.334 375 5 1 -105.023 -33.9204 -54.45 - 91 129.233 376 4 1 -104.918 -33.8089 -84.45 - 91 159.912 377 3 1 -104.736 -33.6479 -114.45 - 91 114.766 732 3 0 -104.725 -33.6385 -115.85 - 91 133.824 378 2 1 -104.529 -33.45 -144.45 - 91 52.8087 377 2 1 -104.55 -33.4651 -144.738 - 91 136.037 366 1 1 -106.8 -34.9737 -174.45 - 91 103.442 724 1 0 -106.963 -35.0968 -175.85 - 91 111.594 349 0 1 -110.159 -37.2336 -204.45 - 91 111.515 713 0 0 -110.394 -37.275 -205.85 - 91 14.6756 358 0 0 31.2971 -108.531 -206.25 - 91 82.2386 357 0 0 31.2603 -108.55 -206.221 - 91 34.2576 1275 1 0 -143.325 75.1695 -176.25 - 91 278.707 1276 1 0 -143.32 75.25 -176.149 - 91 82.4143 182 1 1 -143.573 73.9336 -174.85 - 91 73.2815 1270 1 0 -143.734 74.1255 -175.85 - 91 167.081 379 5 1 -104.305 -33.5206 -54.45 - 91 119.708 732 5 0 -104.208 -33.4977 -55.85 - 91 191.028 390 4 1 -102.035 -32.7348 -84.45 - 91 180.398 736 4 0 -101.935 -32.6713 -85.85 - 91 122.633 401 3 1 -99.8046 -31.8698 -114.45 - 91 195.549 741 3 0 -99.6813 -31.7179 -115.85 - 91 154.059 416 2 1 -96.9283 -28.4229 -144.45 - 91 116.916 759 2 0 -96.8403 -28.1413 -145.85 - 91 126.291 424 1 1 -95.2395 -22.488 -174.45 - 91 131.635 788 1 0 -95.202 -22.3788 -175.85 - 91 234.486 431 0 1 -93.9463 -20.2055 -204.45 - 91 27.7445 430 0 1 -93.95 -20.193 -204.695 - 91 115.582 799 0 0 -93.9473 -20.1203 -205.85 - 91 126.388 735 4 0 -102.537 -32.949 -85.8501 - 91 213.951 734 4 0 -102.459 -33.05 -86.1225 - 91 120.33 733 4 0 -105.336 -33.428 -85.85 - 91 129.12 373 3 1 -105.424 -32.7067 -114.45 - 91 87.2131 736 3 0 -105.43 -32.6598 -115.85 - 91 32.6765 737 3 0 -105.431 -32.65 -116.141 - 91 156.307 373 2 1 -105.542 -31.7183 -144.45 - 91 132.981 741 2 0 -105.533 -31.6847 -145.85 - 91 132.777 374 1 1 -105.301 -30.9364 -174.45 - 91 164.841 745 1 0 -105.314 -30.8979 -175.85 - 91 140.011 374 0 1 -105.338 -30.4109 -204.45 - 91 130.92 748 0 0 -105.342 -30.4061 -205.85 - 91 142.643 373 4 1 -105.35 -33.453 -84.5923 - 91 57.523 372 4 1 -105.55 -33.4213 -84.5763 - 91 41.1172 729 6 0 -104.651 -34.197 -25.85 - 91 167.782 728 6 0 -104.602 -34.25 -25.9966 -Number of digits in this event: 44 +Number of tracker hits in this event: 29 + 91 223.896 462 4 1 -87.4726 -30.1424 -84.45 + 91 271.829 749 4 0 -87.4728 -30.1432 -85.85 + 91 230.81 462 3 1 -87.489 -30.1824 -114.45 + 91 245.332 749 3 0 -87.4771 -30.1756 -115.85 + 91 109.311 464 2 1 -87.2318 -30.0999 -144.45 + 91 385.835 749 2 0 -87.1973 -30.1133 -145.85 + 91 135.393 468 1 1 -86.3749 -30.3069 -174.45 + 91 126.724 748 1 0 -86.3284 -30.3151 -175.85 + 91 130.341 473 0 1 -85.3348 -30.472 -204.45 + 91 150.437 747 0 0 -85.308 -30.5011 -205.85 + 91 452.536 462 2 1 -87.4859 -30.0967 -144.45 + 91 118.786 462 1 1 -87.4665 -30.0618 -174.45 + 91 116.588 749 1 0 -87.4641 -30.0621 -175.85 + 91 142.621 463 0 1 -87.4295 -30.0735 -204.45 + 91 282.041 749 0 0 -87.4247 -30.0712 -205.85 + 91 83.6111 783 1 0 -134.919 -23.3521 -176.25 + 91 54.3028 838 0 0 -156.41 -12.3353 -206.25 + 91 81.5565 706 1 0 -30.3487 -38.7367 -176.25 + 91 127.455 460 1 1 -87.899 -29.6005 -174.45 + 91 117.423 752 1 0 -88.0288 -29.5647 -175.85 + 91 147.072 445 0 1 -90.9844 -29.0723 -204.45 + 91 139.259 754 0 0 -91.1064 -29.0856 -205.85 + 91 5.81076 750 2 0 -87.5054 -29.8553 -145.85 + 91 120.71 751 2 0 -87.5055 -29.85 -145.877 + 91 126.876 483 1 1 -83.4263 -25.1707 -174.45 + 91 165.247 774 1 0 -83.1265 -25.2457 -175.85 + 91 120.104 507 0 1 -78.4534 -26.5799 -204.45 + 91 97.5622 770 0 0 -78.6853 -26.0061 -205.85 + 91 3.10442 771 0 0 -78.8273 -25.85 -206.243 +Number of digits in this event: 21 Using G4ParticleGun... -Particle energy: 4.01796 LIN +Particle energy: 7.7553 LIN Particle: gamma Event: 92 -Number of tracker hits in this event: 0 -Number of digits in this event: 3 +Number of tracker hits in this event: 131 + 92 288.161 857 7 1 -8.45088 31.1275 5.55 + 92 299.268 1055 7 0 -8.45101 31.1287 4.15 + 92 262.405 858 6 1 -8.44977 31.1567 -24.45 + 92 412.791 1055 6 0 -8.44924 31.1577 -25.85 + 92 109.833 857 5 1 -8.48448 31.1665 -54.45 + 92 501.857 1055 5 0 -8.48755 31.164 -55.85 + 92 218.287 857 4 1 -8.54634 31.098 -84.45 + 92 323.696 1055 4 0 -8.54879 31.0945 -85.85 + 92 390.772 857 3 1 -8.60386 31.0262 -114.45 + 92 750.126 1054 3 0 -8.60366 31.025 -115.85 + 92 123.411 857 2 1 -8.59993 31.0042 -144.45 + 92 383 1054 2 0 -8.60085 31.0077 -145.85 + 92 116.757 857 1 1 -8.61666 31.0771 -174.45 + 92 154.209 1055 1 0 -8.61719 31.0831 -175.85 + 92 114.645 856 0 1 -8.66066 31.2111 -204.45 + 92 229.891 1055 0 0 -8.6619 31.2105 -205.85 + 92 62.6515 687 1 1 -42.4925 100.495 -174.85 + 92 130.549 686 1 1 -42.65 100.701 -174.49 + 92 282.679 685 1 1 -42.85 100.907 -174.643 + 92 4.38214 1343 1 0 9.84626 88.85 -175.908 + 92 379.525 807 5 1 -18.45 54.8722 -54.7326 + 92 238.992 856 2 1 -8.74302 30.7878 -144.45 + 92 220.311 1053 2 0 -8.71814 30.7967 -145.85 + 92 104.05 858 1 1 -8.25933 30.9854 -174.45 + 92 877.893 1054 1 0 -8.27613 31.0325 -175.85 + 92 137.499 857 0 1 -8.58138 32.0618 -204.45 + 92 257.298 1060 0 0 -8.62699 32.0789 -205.85 + 92 115.754 1050 2 0 -8.64198 30.2359 -145.85 + 92 101.571 860 1 1 -7.99036 30.1264 -174.45 + 92 109.758 1050 1 0 -7.95698 30.1122 -175.85 + 92 244.67 863 0 1 -7.32007 29.6706 -204.45 + 92 117.267 1047 0 0 -7.31688 29.6468 -205.85 + 92 153.918 1328 4 1 85.7354 -51.8353 -84.85 + 92 340.716 858 5 1 -8.37894 31.0649 -54.45 + 92 215.393 858 4 1 -8.31662 31.0289 -84.45 + 92 192.255 1054 4 0 -8.31509 31.0261 -85.85 + 92 288.581 858 3 1 -8.29369 30.9697 -114.45 + 92 112.256 859 2 1 -8.21936 30.9231 -144.45 + 92 565.697 859 1 1 -8.21965 30.8873 -174.45 + 92 287.379 859 0 1 -8.22577 30.837 -204.45 + 92 324.084 1053 0 0 -8.22206 30.8374 -205.85 + 92 292.074 858 0 1 -8.31504 30.876 -204.45 + 92 63.4331 1253 9 0 -48.6273 70.685 63.75 + 92 122.093 660 12 1 -47.9069 -29.8506 155.15 + 92 273.398 855 0 1 -8.86907 32.0769 -204.45 + 92 71.1831 1053 3 0 -8.30181 30.85 -115.993 + 92 42.3133 1052 3 0 -8.28277 30.65 -116.115 + 92 40.0066 1078 3 0 20.1029 35.7737 -116.25 + 92 151.197 1079 3 0 20.1869 35.85 -116.166 + 92 183.526 1190 3 0 64.8783 58.2233 -116.25 + 92 204.469 852 0 1 -9.61533 30.9812 -204.45 + 92 217.281 1054 0 0 -9.67478 30.884 -205.85 + 92 154.763 812 1 0 -15.4572 -17.515 -176.25 + 92 97.9004 860 0 1 -8.04879 30.956 -204.45 + 92 112.498 863 4 1 -7.34848 32.6846 -84.45 + 92 137.431 1063 4 0 -7.28468 32.8459 -85.85 + 92 220.412 1064 4 0 -7.28286 32.8501 -85.8869 + 92 141.794 871 3 1 -5.78812 35.8568 -114.45 + 92 135.802 1080 3 0 -5.74926 36.0969 -115.85 + 92 124.088 876 2 1 -4.84702 40.9649 -144.45 + 92 73.7164 1106 2 0 -4.66325 41.3858 -145.85 + 92 92.05 1107 2 0 -4.63566 41.45 -146.065 + 92 132.235 895 1 1 -0.99815 49.7125 -174.45 + 92 114.639 1150 1 0 -0.841828 50.0577 -175.85 + 92 113.046 909 0 1 1.85661 57.2868 -204.45 + 92 145.714 1191 0 0 2.18167 58.3078 -205.85 + 92 72.4595 1192 0 0 2.2453 58.45 -206.031 + 92 17.8562 1193 0 0 2.33474 58.6502 -206.232 + 92 214.13 859 4 1 -8.12541 31.213 -84.45 + 92 99.8354 860 3 1 -7.97117 31.3624 -114.45 + 92 247.258 1056 3 0 -7.95553 31.3497 -115.85 + 92 173.04 862 2 1 -7.50186 30.9263 -144.45 + 92 101.7 869 1 1 -6.08427 29.6088 -174.45 + 92 113.039 1047 1 0 -6.10376 29.5743 -175.85 + 92 99.2042 866 0 1 -6.70253 28.6483 -204.451 + 92 240.008 1042 0 0 -6.7441 28.5828 -205.851 + 92 68.8534 1523 7 0 -90.4405 124.75 3.8374 + 92 11.7892 1524 7 0 -90.5013 124.95 4.00891 + 92 8.21699 1058 1 1 31.65 -4.81715 -174.498 + 92 37.2543 960 1 0 -71.9506 12.0608 -176.25 + 92 118.722 959 1 0 -71.9301 12.05 -176.211 + 92 72.2118 856 4 1 -8.65009 31.7653 -84.8147 + 92 2.23551 855 4 1 -8.85084 31.9363 -84.8456 + 92 103.682 859 3 1 -8.24978 30.9935 -114.558 + 92 52.3218 1055 3 0 -7.50931 31.0501 -116.165 + 92 142.191 934 2 1 6.91414 34.739 -144.45 + 92 483.96 933 2 1 6.85 34.5718 -144.54 + 92 8.28993 1041 2 0 7.18187 28.2849 -145.85 + 92 50.5142 1040 2 0 7.18543 28.25 -145.857 + 92 64.0361 1039 2 0 7.20811 28.0496 -145.879 + 92 54.1747 1038 2 0 7.22017 27.85 -145.892 + 92 64.4623 1037 2 0 7.22606 27.6498 -145.89 + 92 16.4611 1036 2 0 7.2311 27.45 -145.862 + 92 509.732 935 2 1 7.07269 17.9614 -144.85 + 92 89.1563 932 2 1 6.64972 15.8085 -144.64 + 92 20.0092 931 2 1 6.44989 15.7272 -144.798 + 92 75.2417 976 2 0 5.54424 15.3314 -145.85 + 92 70.8626 975 2 0 5.37754 15.25 -146.055 + 92 47.3357 866 3 1 -6.70937 30.2169 -114.85 + 92 98.1996 867 3 1 -6.65 30.2022 -114.823 + 92 100.284 854 2 1 -9.0627 38.5518 -144.45 + 92 44.6574 1093 2 0 -9.30114 38.8175 -145.85 + 92 52.8192 1094 2 0 -9.33533 38.85 -146.046 + 92 141.743 827 1 1 -14.6176 42.4217 -174.45 + 92 111.692 1115 1 0 -14.651 43.0692 -175.85 + 92 1.64489 1116 1 0 -14.6691 43.25 -176.241 + 92 146.884 821 0 1 -15.7528 57.1051 -204.45 + 92 3.94207 822 0 1 -15.65 57.3682 -204.832 + 92 72.5016 1190 0 0 -15.4234 58.0854 -205.85 + 92 59.483 1109 2 0 -18.6946 41.8652 -145.85 + 92 34.7895 1046 0 0 -8.66812 29.3558 -205.85 + 92 71.861 1045 0 0 -8.70509 29.25 -205.947 + 92 168.287 1044 0 0 -8.7493 29.05 -206.068 + 92 98.647 1043 0 0 -8.77397 28.85 -206.117 + 92 82.5128 1041 0 0 -8.84012 28.4494 -206.152 + 92 42.5684 1040 0 0 -8.87649 28.2495 -206.183 + 92 66.6105 1039 0 0 -8.86709 28.05 -206.233 + 92 78.9249 1038 0 0 -8.78705 27.85 -206.204 + 92 69.9029 1037 0 0 -8.59499 27.65 -206.125 + 92 81.2297 1036 0 0 -8.39111 27.45 -206.102 + 92 74.1875 1035 0 0 -8.27037 27.25 -206.067 + 92 78.2061 1034 0 0 -8.17456 27.0499 -206.006 + 92 60.9908 1033 0 0 -8.0866 26.8492 -205.972 + 92 57.8157 1032 0 0 -7.97059 26.6494 -205.96 + 92 52.6275 1031 0 0 -7.91386 26.4499 -206.019 + 92 34.9867 1030 0 0 -7.88355 26.25 -206.166 + 92 58.5683 768 0 0 0.859006 -26.3436 -206.25 + 92 125.753 767 0 0 0.885497 -26.4503 -206.219 + 92 96.0674 766 0 0 0.968097 -26.65 -206.114 + 92 7.54714 765 0 0 1.08802 -26.8502 -205.884 + 92 260.236 907 0 1 1.49418 -27.5019 -204.85 +Number of digits in this event: 60 Using G4ParticleGun... -Particle energy: 3.38451 LIN +Particle energy: 7.6159 LIN Particle: gamma Event: 93 -Number of tracker hits in this event: 0 -Number of digits in this event: 1 +Number of tracker hits in this event: 36 + 93 372.801 1148 3 1 49.8087 -37.3686 -114.45 + 93 242.708 713 3 0 49.8088 -37.3697 -115.85 + 93 111.694 1148 2 1 49.8121 -37.3962 -144.45 + 93 220.056 713 2 0 49.8133 -37.3972 -145.85 + 93 149.544 1148 1 1 49.8365 -37.4155 -174.45 + 93 121.43 713 1 0 49.8378 -37.4162 -175.85 + 93 350.12 1149 0 1 49.8742 -37.4235 -204.45 + 93 522.665 713 0 0 49.8757 -37.4239 -205.85 + 93 33.9409 686 14 0 82.2533 -42.7466 213.75 + 93 191.765 1328 0 0 166.613 85.6635 -206.25 + 93 65.2184 1327 0 0 166.608 85.6499 -206.233 + 93 45.0091 1739 0 1 168.009 85.9255 -204.85 + 93 86.4518 1740 0 1 168.15 85.9549 -204.788 + 93 108.561 1741 0 1 168.35 86.0248 -204.618 + 93 79.0982 1742 0 1 168.55 86.0679 -204.562 + 93 110.768 1743 0 1 168.75 86.0198 -204.575 + 93 68.0261 1631 6 1 146.397 -52.2423 -24.85 + 93 145.934 1612 5 1 142.57 -107.635 -54.45 + 93 172.905 317 1 0 17.7735 -116.618 -176.25 + 93 145.395 783 1 0 35.4454 -23.25 -176.055 + 93 285.569 714 1 0 49.1466 -37.1852 -175.85 + 93 57.0193 715 1 0 48.9738 -37.05 -176.126 + 93 70.8315 878 1 0 68.627 -4.29206 -176.25 + 93 123.55 879 1 0 68.7389 -4.24979 -176.14 + 93 43.0027 1247 1 1 69.581 -3.70315 -174.85 + 93 258.266 1248 1 1 69.65 -3.66574 -174.721 + 93 314.3 1150 2 1 50.1663 -37.3151 -144.45 + 93 100.453 1153 1 1 50.6772 -37.174 -174.45 + 93 184.378 1156 0 1 51.3562 -36.7516 -204.45 + 93 193.988 716 0 0 51.3804 -36.7359 -205.85 + 93 5.12249 717 2 0 50.313 -36.4631 -145.85 + 93 103.752 718 2 0 50.3154 -36.45 -145.866 + 93 70.6736 719 2 0 50.3077 -36.25 -146.066 + 93 15.5341 939 2 0 72.8123 8.01609 -146.25 + 93 119.014 940 2 0 72.8366 8.05005 -146.221 + 93 66.6941 941 2 0 72.7874 8.25011 -146.132 +Number of digits in this event: 20 Using G4ParticleGun... -Particle energy: 4.16089 LIN +Particle energy: 8.5553 LIN Particle: gamma Event: 94 -Number of tracker hits in this event: 87 - 94 296.946 725 9 1 -34.8845 17.7149 65.55 - 94 243.191 988 9 0 -34.8856 17.7117 64.15 - 94 246.777 725 8 1 -34.8977 17.6447 35.55 - 94 147.24 987 8 0 -34.9007 17.6391 34.15 - 94 271.273 725 7 1 -34.9889 17.5817 5.55 - 94 116.468 987 7 0 -34.9908 17.5759 4.15 - 94 267.832 725 6 1 -35.0294 17.4525 -24.45 - 94 147.445 986 6 0 -35.0297 17.4456 -25.85 - 94 245.578 725 5 1 -35.0308 17.3134 -54.45 - 94 106.441 986 5 0 -35.0503 17.3125 -55.85 - 94 173.774 722 4 1 -35.4709 17.3171 -84.45 - 94 125.863 986 4 0 -35.4943 17.3133 -85.85 - 94 250.741 720 3 1 -35.9569 17.2749 -114.45 - 94 442.228 986 3 0 -35.9796 17.2704 -115.85 - 94 76.6516 718 2 1 -36.4463 17.1739 -144.45 - 94 54.2562 717 2 1 -36.45 17.1724 -144.655 - 94 185.785 985 2 0 -36.4742 17.1611 -145.85 - 94 298.874 714 1 1 -37.1144 16.9471 -174.45 - 94 283.144 984 1 0 -37.1189 16.9398 -175.85 - 94 118.953 713 0 1 -37.2706 16.8879 -204.45 - 94 294.063 984 0 0 -37.2735 16.8655 -205.85 - 94 46.4779 1538 10 0 -36.0587 127.858 93.75 - 94 113.364 1539 10 0 -36.0975 127.95 93.8882 - 94 350.946 720 10 1 -35.9419 128.984 95.15 - 94 86.0992 719 10 1 -36.0501 129.824 95.4979 - 94 119 718 10 1 -36.25 129.861 95.4736 - 94 242.095 717 10 1 -36.45 129.859 95.2916 - 94 109.745 715 1 1 -37.05 16.8056 -174.774 - 94 444.953 714 0 1 -37.1131 16.9549 -204.45 - 94 50.7041 985 0 0 -37.1812 17.05 -206.091 - 94 122.952 986 0 0 -36.9488 17.2606 -205.85 - 94 76.6389 719 3 1 -36.0505 17.375 -114.529 - 94 52.8848 718 3 1 -36.25 17.4002 -114.741 - 94 21.7924 985 3 0 -37.9485 17.25 -116.187 - 94 127.752 987 3 0 -35.9408 17.5539 -115.85 - 94 117.417 719 2 1 -36.1708 22.8656 -144.45 - 94 14.5888 1015 2 0 -36.379 23.2359 -145.85 - 94 244.6 1016 2 0 -36.3873 23.25 -145.903 - 94 113.317 699 1 1 -40.132 31.1332 -174.45 - 94 104.808 1055 1 0 -40.0382 31.1926 -175.85 - 94 109.844 715 0 1 -37.05 32.2984 -204.555 - 94 167.782 1059 0 0 -36.743 32.0479 -205.85 - 94 59.483 598 3 0 -35.7244 -60.267 -115.85 - 94 65.8305 560 0 0 34.0214 -67.85 -205.958 - 94 231.826 561 0 0 34.179 -67.85 -205.943 - 94 59.483 721 3 1 -35.65 17.6817 -114.611 - 94 147.265 726 4 1 -34.7891 17.3225 -84.45 - 94 88.7099 989 4 0 -34.6917 17.9164 -85.85 - 94 15.272 990 4 0 -34.6467 18.0505 -86.2119 - 94 12.0377 1167 5 0 -74.2878 53.6064 -56.25 - 94 238.451 1168 5 0 -74.3511 53.65 -56.1783 - 94 20.9148 1169 5 0 -74.3624 53.85 -56.1099 - 94 95.2271 1237 3 0 -38.4768 67.506 -116.25 - 94 41.2521 1238 3 0 -38.3454 67.65 -115.864 - 94 200.561 712 3 1 -37.6176 68.6526 -114.85 - 94 102.091 988 8 0 -34.934 17.8066 34.15 - 94 120.504 989 7 0 -34.962 17.8794 4.15 - 94 132 990 6 0 -34.9572 18.0578 -25.85 - 94 109.399 990 5 0 -34.9591 18.2306 -55.85 - 94 150.387 725 4 1 -34.9565 18.4272 -84.45 - 94 117.518 991 4 0 -34.9552 18.4354 -85.85 - 94 150.464 725 3 1 -34.9145 18.6099 -114.45 - 94 127.797 992 3 0 -34.9172 18.6194 -115.85 - 94 111.741 725 2 1 -34.9925 18.7872 -144.45 - 94 112.381 993 2 0 -34.9955 18.793 -145.85 - 94 177.175 724 1 1 -35.0684 18.9207 -174.45 - 94 136.757 994 1 0 -35.0724 18.9268 -175.85 - 94 514.498 724 0 1 -35.1657 19.0524 -204.45 - 94 144.155 995 0 0 -35.1696 19.0595 -205.85 - 94 267.44 994 0 0 -35.1715 19.0497 -205.85 - 94 129.756 701 6 0 106.823 -39.65 -26.183 - 94 102.428 993 3 0 -34.918 18.65 -115.92 - 94 110.289 659 3 0 -119.462 -48.0883 -116.25 - 94 142.916 658 3 0 -119.672 -48.25 -116.195 - 94 274.078 657 3 0 -120.075 -48.4505 -116.096 - 94 39.1426 656 3 0 -120.414 -48.65 -115.909 - 94 81.6862 294 3 1 -121.205 -49.1336 -114.85 - 94 83.0416 293 3 1 -121.35 -49.2232 -114.645 - 94 149.089 292 3 1 -121.569 -49.4304 -114.45 - 94 29.0441 291 3 1 -121.75 -49.3601 -114.789 - 94 155.984 1271 4 0 -117.542 74.3154 -86.25 - 94 62.6064 726 9 1 -34.85 17.7099 65.3071 - 94 92.0077 727 9 1 -34.65 17.7475 65.2414 - 94 74.7355 728 9 1 -34.45 17.9767 65.2548 - 94 84.8851 729 9 1 -34.25 18.0214 65.2419 - 94 338.773 982 9 0 -34.5722 16.5248 64.15 - 94 47.9518 983 9 0 -34.6979 16.65 63.9276 -Number of digits in this event: 46 +Number of tracker hits in this event: 26 + 94 241.149 296 5 1 -120.782 -50.8853 -54.45 + 94 295.668 645 5 0 -120.782 -50.8849 -55.85 + 94 117.213 296 4 1 -120.77 -50.878 -84.45 + 94 148.09 645 4 0 -120.77 -50.8774 -85.85 + 94 117.708 296 3 1 -120.752 -50.8707 -114.45 + 94 107.133 645 3 0 -120.752 -50.8711 -115.85 + 94 215.907 297 2 1 -120.741 -50.8759 -144.45 + 94 127.474 645 2 0 -120.74 -50.8771 -145.85 + 94 114.843 297 1 1 -120.715 -50.8995 -174.45 + 94 125.271 645 1 0 -120.713 -50.9017 -175.85 + 94 125.883 297 0 1 -120.68 -50.9498 -204.45 + 94 109.22 645 0 0 -120.679 -50.9554 -205.85 + 94 25.0104 1602 6 1 140.55 -124.969 -24.8308 + 94 148.349 682 1 1 -43.65 -119.384 -174.836 + 94 53.3815 826 2 0 -78.8957 -14.7997 -146.25 + 94 198.514 827 2 0 -78.6825 -14.65 -145.891 + 94 124.103 297 4 1 -120.618 -50.793 -84.45 + 94 117.02 646 4 0 -120.62 -50.7964 -85.85 + 94 178.913 297 3 1 -120.721 -50.7991 -114.45 + 94 240.041 646 3 0 -120.724 -50.7978 -115.85 + 94 144.264 646 2 0 -120.603 -50.7101 -145.85 + 94 119.913 300 1 1 -120.021 -50.422 -174.45 + 94 118.922 648 1 0 -119.982 -50.4124 -175.85 + 94 152.292 305 0 1 -119.036 -50.1298 -204.45 + 94 115.236 649 0 0 -118.974 -50.0793 -205.85 + 94 286.501 261 1 1 -127.863 -78.8742 -174.85 +Number of digits in this event: 18 Using G4ParticleGun... -Particle energy: 3.09038 LIN +Particle energy: 9.31174 LIN Particle: gamma Event: 95 -Number of tracker hits in this event: 105 - 95 320.471 1026 7 1 25.2858 -3.44605 5.55 - 95 268.555 883 7 0 25.2838 -3.44602 4.15 - 95 96.6314 1025 6 1 25.2473 -3.44936 -24.45 - 95 143.76 882 6 0 25.2469 -3.45087 -25.85 - 95 235.361 1026 5 1 25.2523 -3.47784 -54.45 - 95 171.495 882 5 0 25.252 -3.47849 -55.85 - 95 134.202 1025 4 1 25.2301 -3.50315 -84.45 - 95 114.701 882 4 0 25.2291 -3.50248 -85.85 - 95 164.826 1025 3 1 25.2014 -3.48781 -114.45 - 95 288.052 882 3 0 25.2022 -3.48775 -115.85 - 95 154.235 1025 2 1 25.2343 -3.49388 -144.45 - 95 245.298 882 2 0 25.2365 -3.4895 -145.85 - 95 130.514 1026 1 1 25.3002 -3.4 -174.45 - 95 128.952 883 1 0 25.3012 -3.39509 -175.85 - 95 251.423 1026 0 1 25.3161 -3.28939 -204.45 - 95 110.105 883 0 0 25.316 -3.2895 -205.85 - 95 134.367 1027 0 1 25.45 -3.17696 -204.516 - 95 209.124 1028 0 1 25.65 -3.30564 -204.554 - 95 320.016 1029 0 1 25.8502 -3.46872 -204.623 - 95 73.0578 1025 0 1 25.25 -4.32267 -204.603 - 95 72.6393 1024 0 1 25.05 -4.39469 -204.597 - 95 81.7742 1023 0 1 24.85 -4.48047 -204.689 - 95 22.039 1022 0 1 24.6498 -4.52575 -204.812 - 95 33.2565 876 0 0 22.6581 -4.6847 -205.85 - 95 142.928 877 0 0 22.548 -4.64981 -205.954 - 95 89.4975 878 0 0 22.4541 -4.45 -205.984 - 95 121.528 879 0 0 22.2714 -4.2495 -205.92 - 95 34.131 880 0 0 22.1132 -4.04982 -205.931 - 95 110.101 1012 0 1 22.545 -3.96585 -204.85 - 95 221.773 1013 0 1 22.6503 -3.94891 -204.756 - 95 111.602 767 5 1 -26.65 82.9832 -54.4756 - 95 139.136 766 5 1 -26.6502 82.9808 -54.5552 - 95 298.459 883 5 0 25.2581 -3.44972 -55.8915 - 95 104.544 1024 2 1 24.9176 -3.39855 -144.45 - 95 210.518 1023 2 1 24.85 -3.41204 -144.545 - 95 74.5339 1022 2 1 24.65 -3.44464 -144.806 - 95 3.78931 881 2 0 23.6639 -3.65 -146.235 - 95 134.873 906 1 1 1.31492 -8.35478 -174.45 - 95 124.973 856 1 0 1.18982 -8.73184 -175.85 - 95 101.724 911 0 1 2.40894 -14.4557 -204.45 - 95 139.036 827 0 0 2.25 -14.5381 -205.85 - 95 133.497 1026 6 1 25.359 -3.34114 -24.45 - 95 254.401 883 6 0 25.3627 -3.33514 -25.85 - 95 111.917 884 5 0 25.4306 -3.23466 -55.85 - 95 256.198 1027 4 1 25.464 -3.05203 -84.45 - 95 153.478 885 4 0 25.4688 -3.04323 -85.85 - 95 125.045 1027 3 1 25.5871 -2.86117 -114.45 - 95 111.547 885 3 0 25.5991 -2.8676 -115.85 - 95 126.378 1029 2 1 25.8651 -3.03922 -144.45 - 95 6.95705 885 2 0 25.8776 -3.04979 -145.85 - 95 99.1018 884 2 0 25.8779 -3.05 -145.88 - 95 126.856 1030 1 1 26.2155 -3.2294 -174.45 - 95 147.014 884 1 0 26.24 -3.23852 -175.85 - 95 108.334 1033 0 1 26.6904 -3.47115 -204.45 - 95 117.931 882 0 0 26.7118 -3.47344 -205.85 - 95 22.9137 479 0 0 103.002 -84.05 -205.984 - 95 138.199 884 4 0 25.5662 -3.08474 -85.85 - 95 129.631 1039 3 1 27.9025 -3.61958 -114.45 - 95 132.05 1050 2 1 30.1207 -1.53726 -144.45 - 95 7.67029 892 2 0 30.2108 -1.45223 -145.85 - 95 120.111 893 2 0 30.213 -1.44998 -145.884 - 95 111.176 1060 1 1 32.0905 0.633334 -174.45 - 95 162.4 902 1 0 31.9874 0.618113 -175.85 - 95 129.741 1045 0 1 29.2298 0.33633 -204.451 - 95 119.284 900 0 0 29.049 0.186303 -205.85 - 95 144.224 881 3 0 27.9951 -3.66066 -115.85 - 95 57.7552 917 2 1 3.65 4.96554 -144.503 - 95 58.7442 916 2 1 3.45 4.99036 -144.688 - 95 371.785 911 2 0 1.03871 2.29897 -145.85 - 95 153.04 910 2 0 0.976935 2.25 -145.878 - 95 472.429 777 3 0 82.3412 -24.4714 -116.25 - 95 370.018 778 3 0 82.5369 -24.45 -116.107 - 95 31.992 883 2 0 25.8536 -3.36893 -145.85 - 95 18.536 597 2 0 12.9523 -60.5826 -146.25 - 95 153.936 596 2 0 12.9459 -60.6501 -146.22 - 95 53.0611 595 2 0 12.9483 -60.85 -146.179 - 95 78.5671 594 2 0 12.9329 -61.05 -146.112 - 95 98.8633 593 2 0 12.9959 -61.25 -145.985 - 95 15.2865 592 2 0 13.1179 -61.45 -145.885 - 95 69.8811 969 2 1 13.9684 -63.4473 -144.85 - 95 251.692 970 2 1 14.05 -63.6337 -144.777 - 95 56.1742 971 2 1 14.2501 -64.0071 -144.564 - 95 434.297 972 2 1 14.45 -63.9838 -144.472 - 95 126.588 1026 4 1 25.4498 -3.06839 -84.461 - 95 158.552 886 4 0 24.9693 -2.85 -85.9264 - 95 28.721 953 3 1 10.7172 1.44876 -114.45 - 95 297.113 952 3 1 10.6498 1.47234 -114.571 - 95 365.801 909 3 0 9.89375 1.85183 -115.85 - 95 94.5717 792 3 0 -29.9009 -21.4701 -116.249 - 95 88.5699 791 3 0 -29.9923 -21.65 -116.118 - 95 34.7974 790 3 0 -30.0577 -21.8501 -115.949 - 95 71.2377 748 3 1 -30.398 -23.0287 -114.85 - 95 130.532 747 3 1 -30.45 -23.1843 -114.716 - 95 30.9283 752 4 0 -14.531 -29.6251 -86.2492 - 95 103.866 751 4 0 -14.4623 -29.6501 -86.1418 - 95 106.876 831 4 1 -13.7155 -29.8835 -84.85 - 95 336.483 832 4 1 -13.6499 -29.913 -84.6863 - 95 199.492 606 11 1 -58.65 -4.34098 125.155 - 95 62.3834 605 11 1 -58.85 -3.78649 125.252 - 95 31.2714 884 11 0 -58.5839 -3.07874 124.15 - 95 120.185 885 11 0 -58.5668 -3.04995 124.112 - 95 59.142 886 11 0 -58.471 -2.84984 124.068 - 95 32.3823 615 11 1 -56.8918 -0.111673 125.15 - 95 188.046 895 11 0 -56.0061 -0.877733 124.15 - 95 135.228 698 4 0 74.1177 -40.2929 -86.25 -Number of digits in this event: 59 -Using G4ParticleGun... -Particle energy: 9.60408 LIN +Number of tracker hits in this event: 2 + 95 14.9481 542 1 1 -71.4735 46.6188 -174.85 + 95 81.1771 543 1 1 -71.45 46.6532 -174.702 +Number of digits in this event: 2 +Using G4ParticleGun... +Particle energy: 6.70807 LIN Particle: gamma Event: 96 -Number of tracker hits in this event: 88 - 96 244.338 1027 10 1 25.6155 -1.81802 95.55 - 96 420.301 891 10 0 25.617 -1.80754 94.15 - 96 116.4 1028 9 1 25.6813 -1.61681 65.55 - 96 162.774 892 9 0 25.6888 -1.60014 64.15 - 96 134.727 1029 8 1 25.8521 -1.24852 35.55 - 96 145.086 894 8 0 25.8606 -1.22828 34.15 - 96 132.29 1030 7 1 26.069 -0.789375 5.55 - 96 115.891 896 7 0 26.0729 -0.766639 4.15 - 96 116.038 1030 6 1 26.1368 -0.316637 -24.45 - 96 120.699 898 6 0 26.1351 -0.291794 -25.85 - 96 101.485 1030 5 1 26.0605 0.23552 -54.45 - 96 129.618 901 5 0 26.0559 0.256588 -55.85 - 96 106.588 1029 4 1 25.938 0.678429 -84.45 - 96 163.45 903 4 0 25.9365 0.699434 -85.85 - 96 218.507 1028 3 1 25.8491 1.14235 -114.45 - 96 111.871 905 3 0 25.8528 1.16881 -115.85 - 96 114.056 1029 2 1 25.8843 1.6901 -144.45 - 96 118.054 908 2 0 25.886 1.71909 -145.85 - 96 118.729 1029 1 1 25.8959 2.25817 -174.45 - 96 129.58 911 1 0 25.8923 2.27429 -175.85 - 96 120.407 1028 0 1 25.8254 2.61058 -204.45 - 96 119.521 912 0 0 25.8249 2.61641 -205.85 - 96 350.08 1027 9 1 25.6041 -1.80969 65.55 - 96 134.652 891 9 0 25.6012 -1.80877 64.15 - 96 113.204 1027 8 1 25.5389 -1.78831 35.55 - 96 132.55 891 8 0 25.5362 -1.78747 34.15 - 96 144.022 1027 7 1 25.478 -1.76567 5.55 - 96 114.809 891 7 0 25.4752 -1.76484 4.15 - 96 105.326 1026 6 1 25.42 -1.7512 -24.45 - 96 127.459 891 6 0 25.4183 -1.75269 -25.85 - 96 383.921 1026 5 1 25.3836 -1.78367 -54.45 - 96 343.075 891 5 0 25.3825 -1.78654 -55.85 - 96 202.277 1026 4 1 25.3642 -1.84097 -84.45 - 96 443.767 891 4 0 25.3645 -1.84032 -85.85 - 96 134.709 1026 3 1 25.3832 -1.8178 -114.45 - 96 335.333 891 3 0 25.3851 -1.81652 -115.85 - 96 152.373 1026 2 1 25.4342 -1.79754 -144.45 - 96 239.095 891 2 0 25.4359 -1.79398 -145.85 - 96 120.195 1027 1 1 25.4832 -1.71814 -174.45 - 96 298.591 891 1 0 25.4864 -1.71183 -175.85 - 96 205.069 1027 0 1 25.5513 -1.57578 -204.45 - 96 106.772 892 0 0 25.5522 -1.57008 -205.85 - 96 30.0776 426 1 0 -33.6569 -94.9115 -176.25 - 96 102.1 425 1 0 -33.6571 -94.95 -176.164 - 96 17.7915 424 1 0 -33.6672 -95.15 -175.893 - 96 24.4616 726 1 1 -34.7905 -95.9538 -174.85 - 96 78.641 725 1 1 -34.85 -95.9835 -174.834 - 96 41.9708 724 1 1 -35.05 -96.1777 -174.784 - 96 23.7937 409 1 0 -35.9055 -98.2756 -175.85 - 96 116.639 408 1 0 -35.9652 -98.3502 -175.9 - 96 94.6845 717 1 1 -36.6056 -98.1128 -174.85 - 96 51.2576 716 1 1 -36.65 -98.1363 -174.757 - 96 75.8792 890 4 0 25.372 -1.85018 -85.897 - 96 236.818 1026 1 1 25.3222 -1.9888 -174.45 - 96 188.393 890 1 0 25.2463 -1.87241 -175.85 - 96 120.677 1013 0 1 22.8299 0.194916 -204.45 - 96 117.141 903 0 0 22.5257 0.688731 -205.85 - 96 176.698 885 0 0 25.5432 -2.94728 -205.85 - 96 136.956 1027 4 1 25.6444 -1.73856 -84.45 - 96 264.687 1027 3 1 25.6201 -1.43407 -114.45 - 96 115.58 893 3 0 25.5643 -1.4084 -115.85 - 96 117.862 1021 2 1 24.402 -1.00056 -144.45 - 96 132.575 895 2 0 24.3732 -0.956666 -145.85 - 96 134.501 1018 1 1 23.6775 0.0928237 -174.45 - 96 175.596 1023 0 1 24.6585 -1.16259 -204.45 - 96 105.451 894 0 0 24.7588 -1.19068 -205.85 - 96 27.5726 890 3 0 25.3168 -1.85 -116.169 - 96 233.109 997 2 1 19.5105 -7.58946 -144.45 - 96 10.38 858 2 0 19.8124 -8.42927 -145.85 - 96 97.8822 857 2 0 19.8201 -8.45 -145.885 - 96 8.86137 856 2 0 19.8767 -8.65 -146.217 - 96 68.0083 1023 1 1 24.8086 -25.0532 -174.45 - 96 86.9944 1022 1 1 24.65 -25.0779 -174.619 - 96 12.6145 1021 1 1 24.45 -25.091 -174.81 - 96 264.248 775 1 0 23.3086 -25.0458 -175.85 - 96 42.3513 827 0 1 -14.5419 -19.3332 -204.45 - 96 158.382 826 0 1 -14.65 -19.3288 -204.549 - 96 49.1283 825 0 1 -14.8503 -19.3279 -204.722 - 96 187.622 804 0 0 -16.4282 -19.1737 -205.85 - 96 9.68971 1109 1 1 41.9876 -1.80922 -174.85 - 96 79.8216 1025 4 1 25.25 -1.75913 -84.6371 - 96 126.978 1025 3 1 25.1276 -1.78788 -114.45 - 96 145.354 1025 2 1 25.0604 -1.79886 -144.45 - 96 118.694 1024 1 1 25.0054 -1.74366 -174.45 - 96 121.601 1024 0 1 24.9546 -1.65407 -204.45 - 96 109.538 891 0 0 24.954 -1.65432 -205.85 - 96 15.288 1025 5 1 25.25 -1.78488 -54.8194 - 96 279.804 888 5 0 24.911 -2.32102 -55.85 -Number of digits in this event: 48 +Number of tracker hits in this event: 7 + 96 34.9979 666 1 0 18.1947 -46.65 -176.047 + 96 255.629 112 3 1 -157.55 -79.3346 -114.794 + 96 75.893 111 3 1 -157.75 -79.3828 -114.775 + 96 356.034 990 1 1 18.1819 -46.0838 -174.85 + 96 13.0953 991 1 1 18.25 -46.0243 -174.623 + 96 59.5651 1487 1 1 117.55 -38.5567 -174.821 + 96 97.7988 1486 1 1 117.55 -38.586 -174.701 +Number of digits in this event: 4 Using G4ParticleGun... -Particle energy: 5.02692 LIN +Particle energy: 6.88013 LIN Particle: gamma Event: 97 -Number of tracker hits in this event: 0 -Number of digits in this event: 2 -Using G4ParticleGun... -Particle energy: 8.47966 LIN +Number of tracker hits in this event: 132 + 97 259.514 339 10 0 -0.901995 -112.315 94.092 + 97 418.762 895 9 1 -0.908789 -112.317 65.55 + 97 486.716 339 9 0 -0.907149 -112.316 64.15 + 97 616.927 895 8 1 -0.889943 -112.324 35.55 + 97 349.967 339 8 0 -0.888735 -112.327 34.15 + 97 361.653 895 7 1 -0.878343 -112.392 5.55 + 97 258.908 338 7 0 -0.878755 -112.394 4.15 + 97 111.735 895 6 1 -0.877759 -112.435 -24.45 + 97 309.224 338 6 0 -0.878515 -112.434 -25.85 + 97 138.387 895 5 1 -0.884195 -112.438 -54.45 + 97 177.107 338 5 0 -0.886452 -112.445 -55.85 + 97 185.816 895 4 1 -0.9382 -112.586 -84.45 + 97 269.525 337 4 0 -0.935707 -112.588 -85.85 + 97 173.632 895 3 1 -0.891159 -112.637 -114.45 + 97 125.273 337 3 0 -0.887222 -112.643 -115.85 + 97 107.522 896 2 1 -0.785041 -112.771 -144.45 + 97 231.473 336 2 0 -0.776539 -112.78 -145.85 + 97 207.335 897 1 1 -0.61079 -112.952 -174.45 + 97 136.02 335 1 0 -0.602332 -112.973 -175.85 + 97 119.906 898 0 1 -0.432808 -113.379 -204.45 + 97 121.485 333 0 0 -0.427323 -113.398 -205.85 + 97 125.209 315 0 0 -15.901 -117.084 -206.25 + 97 63.238 363 2 1 -107.35 -56.5901 -144.53 + 97 88.3989 61 8 0 -159.195 -167.803 33.75 + 97 260.019 896 3 1 -0.849718 -112.651 -114.782 + 97 155.948 360 4 0 -2.26401 -108.15 -86.1566 + 97 86.0013 336 4 0 -0.685276 -112.75 -86.1326 + 97 100.978 28 4 0 14.8703 -174.367 -86.2498 + 97 373.571 27 4 0 14.7885 -174.55 -86.1699 + 97 91.6155 26 4 0 15.4845 -174.75 -85.9728 + 97 239.847 339 7 0 -0.864488 -112.258 4.15 + 97 129.694 896 6 1 -0.802278 -112.191 -24.45 + 97 175.518 339 6 0 -0.802467 -112.185 -25.85 + 97 111.933 896 5 1 -0.830204 -112.174 -54.45 + 97 138.807 339 5 0 -0.813096 -112.182 -55.85 + 97 162.602 896 4 1 -0.654112 -112.133 -84.45 + 97 60.1234 897 4 1 -0.65 -112.132 -84.6733 + 97 126.506 340 4 0 -0.629954 -112.129 -85.85 + 97 127.611 899 3 1 -0.145752 -112.081 -114.45 + 97 140.528 340 3 0 -0.0939514 -112.085 -115.85 + 97 128.049 905 2 1 1.05206 -112.205 -144.45 + 97 229.009 339 2 0 1.11936 -112.261 -145.85 + 97 297.83 912 1 1 2.51845 -113.335 -174.45 + 97 95.8286 334 1 0 2.5895 -113.327 -175.85 + 97 124.474 919 0 1 3.99065 -113.272 -204.45 + 97 128.753 334 0 0 4.04998 -113.266 -205.85 + 97 133.649 1234 0 1 66.85 -81.0873 -204.583 + 97 91.2431 340 6 0 -0.778162 -112.15 -26.0012 + 97 11.4904 894 8 1 -1.05 -112.322 35.1908 + 97 120.436 892 7 1 -1.57176 -112.184 5.55 + 97 109.469 891 6 1 -1.66178 -112.661 -24.45 + 97 109.241 337 6 0 -1.67969 -112.661 -25.85 + 97 144.613 890 5 1 -1.98016 -112.726 -54.45 + 97 118.341 337 5 0 -2.00075 -112.707 -55.85 + 97 112.08 888 4 1 -2.3666 -112.312 -84.45 + 97 114.959 339 4 0 -2.38176 -112.288 -85.85 + 97 3.9459 887 3 1 -2.64947 -111.802 -114.45 + 97 127.957 886 3 1 -2.65 -111.802 -114.465 + 97 189.137 341 3 0 -2.69781 -111.815 -115.85 + 97 204.371 881 2 1 -3.75677 -112.161 -144.45 + 97 154.811 873 1 1 -5.41444 -112.428 -174.45 + 97 4.72483 872 1 1 -5.45 -112.434 -174.836 + 97 121.423 338 1 0 -5.54355 -112.443 -175.85 + 97 114.509 859 0 1 -8.17555 -112.742 -204.45 + 97 4.7802 336 0 0 -8.34523 -112.948 -205.85 + 97 127.158 335 0 0 -8.34723 -112.95 -205.866 + 97 147.662 333 2 0 -4.64648 -113.468 -145.85 + 97 110.842 521 4 0 -4.59824 -75.8133 -86.25 + 97 57.2421 522 4 0 -4.5176 -75.6499 -86.0212 + 97 118.619 878 4 1 -4.4382 -76.3449 -84.85 + 97 349.098 879 4 1 -4.24989 -76.4152 -84.7557 + 97 109.192 338 8 0 -0.9025 -112.463 34.15 + 97 209.816 337 7 0 -1.01169 -112.665 4.15 + 97 145.089 894 6 1 -1.10132 -112.879 -24.45 + 97 117.912 336 6 0 -1.10255 -112.892 -25.85 + 97 311.534 894 5 1 -1.13358 -113.149 -54.45 + 97 253.076 334 5 0 -1.13082 -113.162 -55.85 + 97 298.437 894 4 1 -1.06589 -113.407 -84.45 + 97 108.201 333 4 0 -1.06754 -113.421 -85.85 + 97 129.622 894 3 1 -1.11773 -113.723 -114.45 + 97 112.84 332 3 0 -1.1193 -113.743 -115.85 + 97 129.803 894 2 1 -1.1323 -114.159 -144.45 + 97 123.084 329 2 0 -1.13451 -114.182 -145.85 + 97 293.373 894 1 1 -1.15946 -114.681 -174.45 + 97 280.71 327 1 0 -1.16491 -114.711 -175.85 + 97 110.698 893 0 1 -1.28758 -115.347 -204.45 + 97 166.262 323 0 0 -1.29329 -115.378 -205.85 + 97 17.3493 752 2 0 27.2223 -29.508 -146.25 + 97 354.56 328 1 0 -0.923528 -114.432 -175.85 + 97 83.102 914 0 1 2.96343 -110.024 -204.45 + 97 63.4668 915 0 1 3.05 -109.958 -204.696 + 97 108.829 352 0 0 3.52607 -109.651 -205.85 + 97 62.5048 326 1 0 -0.360933 -114.75 -176.224 + 97 58.8623 325 1 0 -0.308777 -114.95 -176.193 + 97 64.7306 324 1 0 -0.208162 -115.15 -176.155 + 97 65.3935 323 1 0 -0.0770882 -115.35 -176.061 + 97 78.6374 322 1 0 -0.0599909 -115.55 -176.04 + 97 34.1602 321 1 0 -0.0500372 -115.871 -175.899 + 97 4.74037 888 1 1 -2.4398 -118.077 -174.85 + 97 226.762 887 1 1 -2.45 -118.089 -174.846 + 97 123.718 335 5 0 -1.24278 -113.132 -55.85 + 97 133.296 892 4 1 -1.45051 -113.742 -84.45 + 97 105.718 331 4 0 -1.47075 -113.776 -85.85 + 97 97.8261 890 3 1 -1.91569 -114.48 -114.45 + 97 188.991 327 3 0 -1.90362 -114.568 -115.85 + 97 144.228 891 2 1 -1.6982 -116.22 -144.45 + 97 112.751 319 2 0 -1.65108 -116.304 -145.85 + 97 15.3059 310 1 0 -0.516948 -118.146 -175.85 + 97 149.237 309 1 0 -0.51168 -118.15 -175.927 + 97 145.999 907 0 1 1.58179 -119.926 -204.45 + 97 103.981 300 0 0 1.65973 -119.978 -205.85 + 97 38.1381 893 5 1 -1.25 -113.126 -54.7265 + 97 255.941 327 4 0 -3.83725 -114.749 -85.85 + 97 94.9469 920 3 1 4.14457 -111.848 -114.45 + 97 42.9701 921 3 1 4.25006 -111.829 -114.743 + 97 91.2752 342 3 0 4.75365 -111.75 -116.016 + 97 112.96 979 2 1 15.9044 -109.543 -144.45 + 97 48.4587 980 2 1 16.05 -109.549 -144.707 + 97 155.849 352 2 0 16.7038 -109.584 -145.85 + 97 134.789 1068 1 1 33.7121 -108.907 -174.45 + 97 64.7621 1069 1 1 33.8506 -108.888 -174.69 + 97 171.635 356 1 0 34.541 -108.808 -175.85 + 97 50.2758 1158 0 1 51.8041 -105.702 -204.45 + 97 615.416 1159 0 1 51.8503 -105.678 -204.511 + 97 29.7329 1160 0 1 52.0501 -105.583 -204.763 + 97 4.08764 374 0 0 52.9045 -105.155 -205.85 + 97 216.52 375 0 0 52.9144 -105.15 -205.863 + 97 199.532 377 0 0 52.2424 -104.691 -205.85 + 97 27.6007 378 0 0 52.2631 -104.55 -206.177 + 97 16.4446 338 3 0 2.76931 -112.36 -115.85 + 97 224.368 339 3 0 2.7362 -112.35 -115.87 + 97 14.2154 328 4 0 -3.83811 -114.55 -86.2175 +Number of digits in this event: 76 +Using G4ParticleGun... +Particle energy: 5.1629 LIN Particle: gamma Event: 98 -Number of tracker hits in this event: 24 - 98 221.683 510 6 1 -78.0405 -75.5621 -24.45 - 98 240.619 522 6 0 -78.0404 -75.5599 -25.85 - 98 227.74 510 5 1 -78.0366 -75.5183 -54.45 - 98 298.983 522 5 0 -78.0335 -75.5091 -55.85 - 98 709.446 510 4 1 -77.9753 -75.321 -84.45 - 98 88.6814 523 4 0 -77.9684 -75.3195 -85.85 - 98 336.525 510 3 1 -77.8573 -75.2858 -114.45 - 98 141.905 523 3 0 -77.8503 -75.28 -115.85 - 98 103.152 511 2 1 -77.7048 -75.1568 -144.45 - 98 118.92 524 2 0 -77.7004 -75.1473 -145.85 - 98 110.265 512 1 1 -77.6116 -74.9679 -174.45 - 98 211.166 525 1 0 -77.6089 -74.9586 -175.85 - 98 123.887 512 0 1 -77.5647 -74.772 -204.45 - 98 111.72 526 0 0 -77.5562 -74.7651 -205.85 - 98 52.0486 88 13 1 -162.55 -71.9373 185.284 - 98 106.209 521 4 0 -78.0205 -75.6698 -85.85 - 98 248.914 521 3 0 -78.0069 -75.7263 -115.85 - 98 119.689 510 2 1 -77.9624 -75.7924 -144.45 - 98 123.644 521 2 0 -77.9594 -75.7955 -145.85 - 98 142.221 510 1 1 -77.9049 -75.8591 -174.45 - 98 115.956 520 1 0 -77.9019 -75.8608 -175.85 - 98 139.412 511 0 1 -77.8419 -75.8887 -204.45 - 98 222.441 520 0 0 -77.8385 -75.8881 -205.85 - 98 138.415 502 0 1 -79.4881 -30.8266 -204.85 -Number of digits in this event: 17 +Number of tracker hits in this event: 29 + 98 463.721 613 5 1 -57.3811 -107.778 -54.45 + 98 418.744 361 5 0 -57.3809 -107.772 -55.85 + 98 269.321 613 4 1 -57.3696 -107.649 -84.45 + 98 101.746 362 4 0 -57.3688 -107.643 -85.85 + 98 163.074 613 3 1 -57.3505 -107.517 -114.45 + 98 139.597 363 3 0 -57.3476 -107.508 -115.85 + 98 148.635 613 2 1 -57.2961 -107.337 -144.45 + 98 141.649 364 2 0 -57.299 -107.326 -145.85 + 98 407.771 613 1 1 -57.3583 -107.099 -174.45 + 98 405.277 365 1 0 -57.3646 -107.088 -175.85 + 98 100.893 612 0 1 -57.4848 -106.869 -204.45 + 98 311.463 366 0 0 -57.4882 -106.857 -205.85 + 98 302.102 484 7 1 -83.1224 24.6389 5.15 + 98 122.728 611 0 1 -57.7957 -107.021 -204.45 + 98 258.078 365 0 0 -57.8394 -106.978 -205.85 + 98 107.209 615 0 1 -56.969 -106.28 -204.45 + 98 105.083 369 0 0 -56.935 -106.295 -205.85 + 98 111.509 361 4 0 -57.2854 -107.848 -85.85 + 98 114.896 615 3 1 -57.0051 -108.05 -114.45 + 98 139.56 360 3 0 -56.9961 -108.051 -115.85 + 98 102.83 616 2 1 -56.8232 -108.045 -144.45 + 98 174.355 360 2 0 -56.8609 -108.043 -145.85 + 98 101.585 612 1 1 -57.5636 -108.047 -174.45 + 98 116.938 360 1 0 -57.591 -108.015 -175.85 + 98 128.41 609 0 1 -58.1773 -107.221 -204.45 + 98 17.9635 364 0 0 -58.1854 -107.152 -205.85 + 98 65.1676 346 3 1 -110.9 -154.804 -114.85 + 98 24.7068 345 3 1 -110.95 -154.786 -114.784 + 98 97.0223 614 5 1 -57.2129 -107.783 -54.45 +Number of digits in this event: 18 Using G4ParticleGun... -Particle energy: 9.76975 LIN +Particle energy: 3.0995 LIN Particle: gamma Event: 99 -Number of tracker hits in this event: 4 - 99 229.956 735 1 1 -33.0267 -46.9229 -174.45 - 99 258.611 665 1 0 -33.0256 -46.9228 -175.85 - 99 237.35 735 0 1 -33.0034 -46.9269 -204.45 - 99 203.07 665 0 0 -33.0021 -46.927 -205.85 -Number of digits in this event: 6 +Number of tracker hits in this event: 46 + 99 226.231 1053 7 1 30.7088 -127.373 5.55 + 99 295.232 263 7 0 30.6954 -127.37 4.15 + 99 131.349 1050 6 1 30.2328 -127.36 -24.45 + 99 255.507 263 6 0 30.2392 -127.356 -25.85 + 99 164.724 1051 5 1 30.4055 -127.339 -54.45 + 99 271.786 264 5 0 30.4229 -127.333 -55.85 + 99 213.242 1053 4 1 30.6598 -127.271 -84.45 + 99 264.148 264 4 0 30.7074 -127.25 -85.85 + 99 31.8448 1058 3 1 31.8479 -126.818 -114.45 + 99 93.2239 1059 3 1 31.85 -126.819 -114.572 + 99 122.39 266 3 0 31.8763 -126.822 -115.85 + 99 317.918 1048 4 1 29.735 -127.853 -84.4507 + 99 112.604 262 4 0 29.8832 -127.64 -85.8502 + 99 204.73 1060 3 1 32.0653 -124.045 -114.45 + 99 79.1171 281 3 0 32.1376 -123.799 -115.85 + 99 205.145 282 3 0 32.145 -123.75 -116.119 + 99 111.653 1067 2 1 33.5933 -119.532 -144.45 + 99 90.0488 302 2 0 33.375 -119.572 -145.85 + 99 168.636 1035 1 1 27.1655 -122.084 -174.45 + 99 75.3059 294 1 0 27.3141 -121.287 -175.85 + 99 123.056 295 1 0 27.3409 -121.15 -176.1 + 99 143.296 1042 0 1 28.5403 -109.69 -204.45 + 99 22.2781 351 0 0 28.1591 -109.942 -205.85 + 99 128.236 350 0 0 28.1438 -109.95 -205.9 + 99 8.8714 1047 4 1 29.65 -128.008 -84.8185 + 99 140.352 258 4 0 29.3362 -128.413 -85.85 + 99 142.049 1021 3 1 24.3506 -136.091 -114.45 + 99 32.4919 1020 3 1 24.25 -135.92 -114.794 + 99 110.336 224 3 0 23.9112 -135.344 -115.85 + 99 22.0065 225 3 0 23.8421 -135.15 -116.192 + 99 1.13063 1013 2 1 22.6527 -119.029 -144.45 + 99 172.446 1012 2 1 22.6498 -119.028 -144.452 + 99 12.388 309 2 0 22.4168 -118.173 -145.85 + 99 124.417 310 2 0 22.4114 -118.15 -145.882 + 99 105.232 311 2 0 22.3434 -117.95 -146.125 + 99 137.499 1053 6 1 30.745 -127.358 -24.45 + 99 121.19 1053 5 1 30.7653 -127.264 -54.45 + 99 109.825 1054 3 1 30.8501 -127.166 -114.45 + 99 109.096 264 3 0 30.8559 -127.16 -115.85 + 99 105.611 1054 2 1 30.9791 -127.016 -144.45 + 99 149.788 265 2 0 30.9853 -127.008 -145.85 + 99 115.774 1055 1 1 31.0907 -126.844 -174.45 + 99 236.635 266 1 0 31.1003 -126.834 -175.85 + 99 108.403 1056 0 1 31.2969 -126.629 -204.45 + 99 131.955 267 0 0 31.3007 -126.613 -205.85 + 99 132.012 265 1 0 31.0792 -126.95 -176.036 +Number of digits in this event: 27 Run terminated. Run Summary Number of events processed : 100 - User=38.560000s Real=38.860333s Sys=0.010000s + User=34.530000s Real=34.726698s Sys=0.000000s End of Run 1 There are 4 h1 histograms 0 with 0 entries: Deposited energy in the last X plane (keV) @@ -9025,7751 +9838,7965 @@ Cannot set FirstId as its value was already used. done Using G4ParticleGun... -Particle energy: 7.17476 LIN +Particle energy: 2.88581 LIN Particle: e- Event: 0 -Number of tracker hits in this event: 26 - 0 117.917 1523 8 1 124.863 -63.003 35.55 - 0 131.657 585 8 0 124.863 -63.0013 34.15 - 0 108.09 1523 7 1 124.854 -62.9769 5.55 - 0 157.585 585 7 0 124.857 -62.9757 4.15 - 0 107.815 1523 6 1 124.896 -62.9528 -24.45 - 0 164.249 585 6 0 124.897 -62.9512 -25.85 - 0 133.505 1523 5 1 124.928 -62.9153 -54.45 - 0 112.298 585 5 0 124.927 -62.9149 -55.85 - 0 105.432 1523 4 1 124.91 -62.9003 -84.45 - 0 95.797 585 4 0 124.909 -62.9023 -85.85 - 0 439.488 1523 3 1 124.902 -62.9406 -114.45 - 0 379.002 585 3 0 124.9 -62.9471 -115.85 - 0 344.11 1523 2 1 124.861 -63.0838 -144.45 - 0 154.99 584 2 0 124.859 -63.0927 -145.85 - 0 260.333 1523 1 1 124.814 -63.2766 -174.45 - 0 116.111 583 1 0 124.814 -63.2863 -175.85 - 0 119.202 1523 0 1 124.787 -63.4727 -204.45 - 0 118.895 582 0 0 124.787 -63.4848 -205.85 - 0 344.895 585 2 0 124.853 -62.9876 -145.85 - 0 227.904 585 1 0 124.835 -63.0279 -175.85 - 0 152.47 1522 0 1 124.612 -63.1084 -204.45 - 0 137.521 584 0 0 124.597 -63.108 -205.85 - 0 32.2368 307 0 0 162.548 -118.55 -206.181 - 0 130.03 1524 1 1 124.983 -62.9247 -174.45 - 0 137.658 1524 0 1 125.083 -62.8869 -204.45 - 0 102.72 585 0 0 125.086 -62.8827 -205.85 -Number of digits in this event: 18 +Number of tracker hits in this event: 65 + 0 118.408 746 9 1 -30.7959 -115.016 65.55 + 0 181.485 325 9 0 -30.7975 -115.017 64.15 + 0 94.6116 746 8 1 -30.8453 -115.044 35.55 + 0 129.82 325 8 0 -30.8471 -115.046 34.15 + 0 176.552 745 7 1 -30.9067 -115.104 5.55 + 0 203.642 325 7 0 -30.9127 -115.106 4.15 + 0 302.764 745 6 1 -31.023 -115.155 -24.45 + 0 116.751 324 6 0 -31.0274 -115.165 -25.85 + 0 440.638 744 5 1 -31.0975 -115.373 -54.45 + 0 114.677 323 5 0 -31.1059 -115.379 -55.85 + 0 289.337 743 4 1 -31.2544 -115.528 -84.45 + 0 126.311 323 4 0 -31.2678 -115.538 -85.85 + 0 118.458 742 3 1 -31.5401 -115.752 -114.45 + 0 132.332 321 3 0 -31.5525 -115.761 -115.85 + 0 150.67 741 2 1 -31.7845 -115.961 -144.45 + 0 121.281 320 2 0 -31.8005 -115.972 -145.85 + 0 137.597 739 1 1 -32.1415 -116.197 -174.45 + 0 128.411 319 1 0 -32.1587 -116.214 -175.85 + 0 110.877 737 0 1 -32.5176 -116.539 -204.45 + 0 157.272 317 0 0 -32.5387 -116.558 -205.85 + 0 255.019 324 5 0 -31.1319 -115.237 -55.85 + 0 175.233 326 4 0 -31.3125 -114.79 -85.85 + 0 206.437 750 3 1 -29.8822 -114.019 -114.45 + 0 188.278 331 3 0 -29.7997 -113.92 -115.85 + 0 103.495 762 2 1 -27.6425 -110.329 -144.45 + 0 133.473 350 2 0 -27.4601 -110.071 -145.85 + 0 167.576 782 1 1 -23.6164 -104.914 -174.45 + 0 138.135 377 1 0 -23.3899 -104.676 -175.85 + 0 104.006 808 0 1 -18.3338 -99.988 -204.45 + 0 81.9729 401 0 0 -18.2321 -99.7748 -205.85 + 0 69.7958 402 0 0 -18.2202 -99.75 -206.012 + 0 263.108 330 3 0 -29.8582 -113.95 -116.016 + 0 15.226 329 3 0 -28.8069 -114.15 -115.893 + 0 19.6835 223 5 0 -20.7197 -135.369 -56.2496 + 0 201.213 224 5 0 -20.7232 -135.35 -56.1915 + 0 69.2324 797 5 1 -20.5741 -134.402 -54.85 + 0 73.2251 796 5 1 -20.65 -134.373 -54.741 + 0 56.6912 228 5 0 -20.9911 -134.361 -55.85 + 0 141.06 798 5 1 -20.3145 -134.431 -54.85 + 0 6.06049 799 5 1 -20.25 -134.451 -54.8118 + 0 107.371 744 4 1 -31.1071 -115.308 -84.45 + 0 110.079 324 4 0 -31.113 -115.298 -85.85 + 0 122.464 744 3 1 -31.177 -115.067 -114.45 + 0 104.633 325 3 0 -31.1744 -115.058 -115.85 + 0 140.253 745 2 1 -30.9631 -114.814 -144.45 + 0 116.843 326 2 0 -30.9413 -114.789 -145.85 + 0 190.333 747 1 1 -30.5259 -114.448 -174.45 + 0 159.385 328 1 0 -30.4933 -114.421 -175.85 + 0 93.7756 751 0 1 -29.8178 -113.926 -204.45 + 0 119.041 331 0 0 -29.7637 -113.883 -205.85 + 0 97.2895 245 2 0 -25.3822 -131.043 -146.25 + 0 76.1092 244 2 0 -25.3188 -131.15 -146.077 + 0 158.101 776 2 1 -24.7467 -130.819 -144.85 + 0 231.594 777 2 1 -24.65 -130.796 -144.612 + 0 91.5722 778 2 1 -24.45 -131.158 -144.714 + 0 114.99 246 2 0 -24.2446 -130.95 -145.915 + 0 173.453 247 2 0 -24.2582 -130.75 -146.114 + 0 78.7762 248 2 0 -24.3724 -130.55 -146.119 + 0 127.745 744 1 1 -31.227 -115.592 -174.45 + 0 99.2535 322 1 0 -31.2912 -115.605 -175.851 + 0 136.157 740 0 1 -31.9506 -114.686 -204.45 + 0 33.9762 328 0 0 -31.8324 -114.377 -205.85 + 0 88.0315 329 0 0 -31.8228 -114.35 -205.974 + 0 11.6075 687 1 1 -42.45 -89.9602 -174.629 + 0 162.343 326 9 0 -30.7688 -114.95 64.1236 +Number of digits in this event: 36 Using G4ParticleGun... -Particle energy: 2.70393 LIN +Particle energy: 8.54824 LIN Particle: e- Event: 1 -Number of tracker hits in this event: 117 - 1 129.977 397 10 1 -100.597 48.6918 95.55 - 1 97.4952 1143 10 0 -100.597 48.6963 94.15 - 1 130.569 397 9 1 -100.6 48.7839 65.55 - 1 135.41 1143 9 0 -100.601 48.7885 64.15 - 1 129.578 397 8 1 -100.612 48.8821 35.55 - 1 123.653 1144 8 0 -100.614 48.8888 34.15 - 1 271.465 397 7 1 -100.648 49.0292 5.55 - 1 289.762 1144 7 0 -100.649 49.0355 4.15 - 1 116.44 397 6 1 -100.674 49.175 -24.45 - 1 149.294 1145 6 0 -100.675 49.1825 -25.85 - 1 790.614 397 5 1 -100.686 49.3258 -54.45 - 1 694.938 1146 5 0 -100.677 49.2924 -55.85 - 1 121.39 399 4 1 -100.266 48.9118 -84.45 - 1 95.9729 1144 4 0 -100.217 48.8612 -85.85 - 1 33.9579 1143 4 0 -100.206 48.85 -86.1515 - 1 216.705 405 3 1 -98.9584 47.7127 -114.45 - 1 95.8385 1138 3 0 -98.9367 47.6972 -115.85 - 1 147.691 409 2 1 -98.1686 47.1845 -144.45 - 1 142.675 1135 2 0 -98.1171 47.1205 -145.85 - 1 144.962 415 1 1 -97.0188 45.6964 -174.45 - 1 112.891 1128 1 0 -96.9983 45.6743 -175.85 - 1 132.543 418 0 1 -96.3612 45.2018 -204.45 - 1 81.599 1125 0 0 -96.3356 45.2424 -205.85 - 1 37.866 1126 0 0 -96.3299 45.25 -206.104 - 1 134.656 398 1 1 -100.395 50.2334 -174.45 - 1 109.536 1150 1 0 -100.389 50.239 -175.85 - 1 157.852 400 0 1 -100.039 50.5578 -204.45 - 1 125.233 1152 0 0 -100.066 50.5847 -205.85 - 1 55.0474 263 0 1 -127.35 35.1457 -204.537 - 1 128.771 396 4 1 -100.808 49.4672 -84.45 - 1 220.148 1147 4 0 -100.81 49.471 -85.85 - 1 285.95 396 3 1 -100.881 49.5314 -114.45 - 1 112.298 1147 3 0 -100.88 49.531 -115.85 - 1 497.492 396 2 1 -100.848 49.5241 -144.45 - 1 296.313 1147 2 0 -100.851 49.5293 -145.85 - 1 245.477 396 1 1 -100.906 49.6372 -174.45 - 1 99.2922 1147 1 0 -100.908 49.6421 -175.85 - 1 181.571 396 0 1 -100.929 49.7535 -204.45 - 1 107.243 1148 0 0 -100.921 49.7687 -205.85 - 1 140.202 1364 10 0 72.0692 93.131 93.75 - 1 105.833 395 4 1 -101.01 49.1426 -84.45 - 1 109.897 1145 4 0 -101.031 49.1304 -85.85 - 1 218.02 393 3 1 -101.526 48.8723 -114.45 - 1 132.59 1144 3 0 -101.548 48.8626 -115.85 - 1 157.894 391 2 1 -101.944 48.6362 -144.45 - 1 131.993 1142 2 0 -101.96 48.6218 -145.85 - 1 27.7513 389 1 1 -102.348 48.2553 -174.45 - 1 74.2944 388 1 1 -102.35 48.2546 -174.573 - 1 120.908 1140 1 0 -102.372 48.2477 -175.85 - 1 191.501 386 0 1 -102.879 48.0683 -204.45 - 1 132.894 1140 0 0 -102.902 48.0542 -205.85 - 1 17.4317 387 0 1 -102.75 48.1762 -204.769 - 1 39.1005 1141 0 0 -102.267 48.4118 -205.85 - 1 99.0634 1142 0 0 -102.208 48.4501 -205.984 - 1 146.565 1143 3 0 -101.786 48.8127 -115.85 - 1 93.7678 343 2 1 -111.428 50.6715 -144.45 - 1 438.777 1153 2 0 -111.637 50.6903 -145.85 - 1 102.067 324 1 1 -115.166 51.4429 -174.45 - 1 52.9735 325 1 1 -115.15 51.3212 -174.734 - 1 178.101 1153 1 0 -114.981 50.8472 -175.85 - 1 24.7228 345 0 1 -110.972 40.2407 -204.45 - 1 84.7278 346 0 1 -110.95 40.1881 -204.549 - 1 0.710603 1098 0 0 -110.625 39.6521 -205.85 - 1 150.648 1097 0 0 -110.624 39.65 -205.855 - 1 280.689 397 4 1 -100.617 49.3837 -84.45 - 1 101.257 1170 3 0 -99.1738 54.1901 -115.85 - 1 15.8966 1171 3 0 -99.1937 54.25 -116.205 - 1 146.92 1194 2 0 -101.033 58.9968 -145.85 - 1 63.9607 374 1 1 -105.327 62.6719 -174.45 - 1 54.0842 373 1 1 -105.35 62.6788 -174.675 - 1 130.17 1213 1 0 -105.452 62.6989 -175.85 - 1 121.15 365 0 1 -106.971 63.7207 -204.45 - 1 141.426 1218 0 0 -106.99 63.6886 -205.85 - 1 59.483 417 7 1 -96.7495 -176.013 5.15 - 1 203.523 397 2 1 -100.75 58.4129 -144.544 - 1 241.065 398 2 1 -100.537 58.2805 -144.45 - 1 58.2656 1183 2 0 -100.134 56.7734 -145.85 - 1 12.4281 382 2 1 -103.585 54.0965 -144.85 - 1 28.4867 1167 2 0 -104.623 53.4857 -145.85 - 1 1.66398 1166 2 0 -104.683 53.45 -145.855 - 1 245.79 376 2 1 -104.849 52.935 -144.85 - 1 127.913 1148 4 0 -100.668 49.8145 -85.85 - 1 122.378 1152 3 0 -100.939 50.5508 -115.85 - 1 49.3243 1156 2 0 -100.891 51.4433 -145.85 - 1 68.8463 1157 2 0 -100.89 51.45 -146.005 - 1 104.055 1163 1 0 -100.84 52.7751 -175.85 - 1 124.612 389 0 1 -102.285 55.4761 -204.45 - 1 113.426 1177 0 0 -102.306 55.5942 -205.85 - 1 18.8649 1178 0 0 -102.303 55.65 -206.243 - 1 25.4695 1347 0 0 -132.205 89.6381 -206.25 - 1 315.115 394 0 1 -101.345 54.7524 -204.45 - 1 10.3588 393 0 1 -101.35 54.756 -204.502 - 1 11.4651 507 2 1 -78.45 99.5744 -144.725 - 1 107.234 387 6 1 -102.558 47.0671 -24.45 - 1 147.387 1134 6 0 -102.842 46.9387 -25.8504 - 1 337.927 353 5 1 -109.391 44.6053 -54.45 - 1 133.067 1123 5 0 -109.546 44.6915 -55.85 - 1 383.277 340 4 1 -112.01 45.3307 -84.4501 - 1 114.948 1126 4 0 -111.908 45.4298 -85.85 - 1 125.307 351 3 1 -109.751 46.2214 -114.45 - 1 150.346 1131 3 0 -109.903 46.364 -115.85 - 1 120.213 339 2 1 -112.292 49.1487 -144.45 - 1 36.9675 1146 2 0 -112.304 49.4286 -145.85 - 1 159.805 337 1 1 -112.724 55.4911 -174.451 - 1 0.739503 1177 1 0 -112.163 55.6498 -175.85 - 1 141.727 1178 1 0 -112.162 55.65 -175.852 - 1 92.8841 397 0 1 -100.75 58.4066 -204.643 - 1 153.623 1193 0 0 -99.7048 58.7622 -205.85 - 1 68.7831 1194 0 0 -99.5103 58.8503 -206.07 - 1 79.3083 352 5 1 -109.55 44.3838 -54.7067 - 1 188.116 1118 5 0 -110.02 43.8323 -55.85 - 1 146.241 1117 5 0 -110.177 43.65 -56.1459 - 1 94.4937 277 4 1 -124.692 22.6502 -84.45 - 1 112.767 1013 4 0 -124.987 22.7015 -85.85 - 1 345.369 224 3 1 -135.331 21.2068 -114.45 - 1 94.3217 1011 3 0 -134.59 22.3231 -115.85 - 1 47.0002 1012 3 0 -134.494 22.45 -116.079 -Number of digits in this event: 67 -Using G4ParticleGun... -Particle energy: 4.2443 LIN +Number of tracker hits in this event: 102 + 1 124.511 1013 11 1 22.823 50.142 125.55 + 1 147.712 1150 11 0 22.8229 50.1421 124.15 + 1 289.516 1013 10 1 22.8245 50.1408 95.55 + 1 116.546 1150 10 0 22.8234 50.1411 94.15 + 1 154.727 1013 9 1 22.8037 50.147 65.55 + 1 101.779 1150 9 0 22.8028 50.1469 64.15 + 1 106.775 1013 8 1 22.7853 50.1411 35.55 + 1 147.7 1150 8 0 22.7854 50.1407 34.15 + 1 127.278 1013 7 1 22.7886 50.1338 5.55 + 1 154.679 1150 7 0 22.7887 50.1333 4.15 + 1 350.655 1013 6 1 22.797 50.1229 -24.45 + 1 286.039 1150 6 0 22.7962 50.1227 -25.85 + 1 124.239 1013 5 1 22.7776 50.1163 -54.45 + 1 105.181 1150 5 0 22.7762 50.1155 -55.85 + 1 370.643 1013 4 1 22.7544 50.0983 -84.45 + 1 347.847 1150 4 0 22.7523 50.0968 -85.85 + 1 239.959 1013 3 1 22.7114 50.0638 -114.45 + 1 496.98 1150 3 0 22.7096 50.0624 -115.85 + 1 547.855 1013 2 1 22.6728 50.033 -144.45 + 1 131.121 1149 2 0 22.6722 50.0307 -145.85 + 1 471.475 1013 1 1 22.6626 49.9788 -174.45 + 1 309.981 1149 1 0 22.6629 49.9764 -175.85 + 1 107.072 1013 0 1 22.6686 49.9248 -204.45 + 1 171.707 1149 0 0 22.6699 49.9227 -205.85 + 1 96.3134 1012 2 1 22.65 50.0804 -144.794 + 1 136.483 1014 3 1 23.0049 49.9907 -114.45 + 1 123.479 1149 3 0 22.9987 49.9685 -115.85 + 1 114.775 1146 2 0 22.801 49.4068 -145.85 + 1 136.278 1139 1 0 22.8047 47.8833 -175.85 + 1 104.851 1011 0 1 22.2641 46.356 -204.45 + 1 120.838 1131 0 0 22.2305 46.3322 -205.85 + 1 118.434 1150 2 0 22.6985 50.1064 -145.85 + 1 105.698 1012 1 1 22.6043 50.3263 -174.45 + 1 177.28 1151 1 0 22.5986 50.3351 -175.85 + 1 99.0356 1012 0 1 22.4713 50.511 -204.45 + 1 110.939 1152 0 0 22.4716 50.5237 -205.85 + 1 108.848 1152 1 0 22.6917 50.4843 -175.85 + 1 248.452 1016 0 1 23.2862 64.125 -204.45 + 1 235.748 1015 0 1 23.25 64.1584 -204.58 + 1 116.517 1223 0 0 23.3262 64.6625 -205.85 + 1 71.9505 1252 0 0 33.9043 70.5857 -206.25 + 1 366.881 1253 0 0 33.8149 70.65 -206.056 + 1 179.15 1150 0 0 23.0923 50.058 -205.85 + 1 65.786 1224 1 0 94.7091 64.9 -176.25 + 1 95.893 1151 0 0 22.8884 50.2757 -206.11 + 1 55.8982 1089 0 0 29.8065 37.9541 -206.25 + 1 80.2969 1088 0 0 29.8242 37.85 -206.147 + 1 92.8119 1087 0 0 29.725 37.65 -206.095 + 1 22.3252 748 0 0 0.0904476 -30.2923 -206.25 + 1 26.456 747 0 0 -0.05 -30.4916 -205.969 + 1 287.199 898 0 1 -0.295262 -30.568 -204.85 + 1 194.93 897 0 1 -0.450013 -30.7297 -204.499 + 1 99.4002 896 0 1 -0.65 -30.9575 -204.471 + 1 14.2971 1200 2 0 96.8404 60.05 -145.86 + 1 89.9329 1393 2 1 98.9153 60.1407 -144.85 + 1 70.4483 1394 2 1 98.95 60.1163 -144.829 + 1 3.79732 928 0 0 18.9283 5.67279 -206.25 + 1 79.917 927 0 0 18.9268 5.65 -206.242 + 1 55.7934 926 0 0 18.9406 5.45 -206.118 + 1 64.0554 925 0 0 18.9527 5.25 -206.003 + 1 181.315 924 0 0 18.9613 5.05 -205.88 + 1 200.297 995 0 1 19.1013 3.86476 -204.85 + 1 6.00233 1134 1 0 24.5889 46.9291 -175.85 + 1 102.585 1025 1 1 25.2093 46.6049 -174.85 + 1 138.443 1026 1 1 25.25 46.4477 -174.796 + 1 132.273 1012 6 1 22.65 50.4464 -24.6406 + 1 9.14016 1166 6 0 21.6393 53.4098 -25.85 + 1 67.7842 1167 6 0 21.6254 53.45 -25.866 + 1 75.5585 1168 6 0 21.5211 53.65 -25.9647 + 1 76.1007 1169 6 0 21.4085 53.8503 -26.076 + 1 56.565 1170 6 0 21.2985 54.0501 -26.1765 + 1 10.5538 1171 6 0 21.2212 54.25 -26.2367 + 1 92.1256 811 5 1 -17.8095 135.071 -54.45 + 1 95.6756 812 5 1 -17.65 135.266 -54.5798 + 1 62.0662 813 5 1 -17.45 135.469 -54.7437 + 1 71.3447 1584 5 0 -16.0851 136.983 -55.85 + 1 83.0645 1585 5 0 -15.9296 137.15 -55.9724 + 1 73.7043 1586 5 0 -15.7637 137.35 -56.1046 + 1 61.5462 1587 5 0 -15.5928 137.55 -56.1945 + 1 116.098 1010 5 1 22.2213 49.5778 -54.45 + 1 118.93 1147 5 0 22.3128 49.4962 -55.8502 + 1 106.898 1019 4 1 24.032 47.6662 -84.45 + 1 129.354 1138 4 0 23.8741 47.7253 -85.85 + 1 7.9428 1009 3 1 21.8519 49.5468 -114.45 + 1 105.389 1008 3 1 21.85 49.5554 -114.471 + 1 36.6643 1151 3 0 21.6647 50.25 -116.153 + 1 58.6655 993 2 1 18.6892 61.2858 -144.45 + 1 85.0755 992 2 1 18.65 61.4022 -144.625 + 1 18.0437 1210 2 0 18.3966 62.2109 -145.85 + 1 108.488 1211 2 0 18.3845 62.25 -145.91 + 1 71.4647 1212 2 0 18.3255 62.45 -146.189 + 1 86.0453 963 1 1 12.7462 84.4991 -174.451 + 1 32.5915 962 1 1 12.65 84.7221 -174.741 + 1 22.6383 1327 1 0 12.2683 85.6021 -175.85 + 1 111.007 1328 1 0 12.2472 85.6504 -175.911 + 1 29.9587 1329 1 0 12.1596 85.8502 -176.153 + 1 212.188 907 0 1 1.58388 110.816 -204.45 + 1 12.7161 906 0 1 1.45 111.172 -204.814 + 1 0.46389 1459 0 0 1.08989 112.148 -205.85 + 1 142.283 1460 0 0 1.08909 112.15 -205.852 + 1 86.4883 1461 0 0 1.00907 112.35 -206.065 + 1 65.1724 1014 11 1 22.85 50.116 125.54 +Number of digits in this event: 40 +Using G4ParticleGun... +Particle energy: 8.60575 LIN Particle: e- Event: 2 -Number of tracker hits in this event: 65 - 2 116.542 714 8 1 -37.0658 -132.925 35.55 - 2 131.187 236 8 0 -37.0656 -132.926 34.15 - 2 142.563 714 7 1 -37.0578 -132.961 5.55 - 2 350.23 235 7 0 -37.0594 -132.965 4.14996 - 2 116.594 714 6 1 -37.1052 -133.037 -24.45 - 2 88.216 235 6 0 -37.1047 -133.04 -25.85 - 2 117.449 714 5 1 -37.101 -133.111 -54.45 - 2 112.721 235 5 0 -37.1007 -133.116 -55.85 - 2 181.906 714 4 1 -37.0942 -133.228 -84.45 - 2 145.282 234 4 0 -37.0935 -133.233 -85.85 - 2 114.672 714 3 1 -37.0844 -133.34 -114.45 - 2 102.92 234 3 0 -37.0853 -133.347 -115.85 - 2 134.052 714 2 1 -37.1087 -133.486 -144.45 - 2 123.042 233 2 0 -37.1089 -133.494 -145.85 - 2 139.961 714 1 1 -37.1234 -133.628 -174.45 - 2 97.8629 232 1 0 -37.123 -133.635 -175.85 - 2 172.742 714 0 1 -37.1127 -133.779 -204.45 - 2 116.633 231 0 0 -37.114 -133.789 -205.85 - 2 902.211 715 2 1 -37.0498 -133.494 -144.611 - 2 300.526 715 4 1 -37.05 -133.116 -84.5382 - 2 83.4654 234 7 0 -36.6922 -133.15 3.98693 - 2 81.0588 233 7 0 -36.4173 -133.35 3.97899 - 2 91.9358 232 7 0 -36.2785 -133.55 4.01603 - 2 346.417 727 7 1 -34.6146 -135.035 5.15 - 2 181.963 726 7 1 -34.65 -135.515 5.38124 - 2 84.8935 728 7 1 -34.4498 -135.825 5.38365 - 2 121.787 235 2 0 -36.9884 -133.118 -145.85 - 2 183.902 719 1 1 -36.2158 -132.923 -174.45 - 2 125.608 236 1 0 -36.1471 -132.944 -175.85 - 2 182.884 725 0 1 -35.0488 -133.245 -204.45 - 2 111.157 233 0 0 -34.8945 -133.362 -205.85 - 2 94.6606 236 2 0 -36.6327 -132.82 -145.85 - 2 18.2096 237 2 0 -36.5483 -132.75 -146.157 - 2 178.744 754 1 1 -29.0905 -125.1 -174.45 - 2 172.972 276 1 0 -29.4733 -124.893 -175.85 - 2 156.822 726 0 1 -34.7335 -119.912 -204.45 - 2 127.826 303 0 0 -35.5514 -119.502 -205.85 - 2 106.65 210 0 0 -26.7204 -137.983 -206.25 - 2 84.5926 209 0 0 -26.5031 -138.15 -206.126 - 2 56.978 208 0 0 -26.2892 -138.35 -205.952 - 2 367.432 777 0 1 -24.5573 -140.193 -204.85 - 2 371.663 778 0 1 -24.45 -140.341 -204.751 - 2 67.347 779 0 1 -24.2499 -140.937 -204.699 - 2 51.7396 780 0 1 -24.0492 -141.09 -204.725 - 2 52.9842 781 0 1 -23.8498 -141.112 -204.693 - 2 55.2654 782 0 1 -23.6497 -141.066 -204.607 - 2 94.2033 783 0 1 -23.45 -140.976 -204.501 - 2 62.3076 784 0 1 -23.25 -140.718 -204.517 - 2 139.1 785 0 1 -23.0499 -140.617 -204.604 - 2 67.1153 786 0 1 -22.85 -140.616 -204.625 - 2 79.2889 787 0 1 -22.65 -140.599 -204.683 - 2 266.386 197 0 0 -21.1678 -140.722 -205.851 - 2 105.543 285 0 0 6.34114 -123.075 -206.25 - 2 75.4925 284 0 0 6.34275 -123.15 -206.038 - 2 318.979 283 0 0 6.30758 -123.35 -206.017 - 2 252.077 776 0 1 -24.6504 -141.574 -204.733 - 2 91.8733 181 0 0 -23.2068 -143.863 -205.85 - 2 265.213 180 0 0 -23.048 -143.95 -205.916 - 2 56.8894 179 0 0 -22.7586 -144.15 -206.207 - 2 136.531 126 0 0 -33.0237 -154.903 -206.25 - 2 257.143 187 0 0 -24.0064 -142.659 -205.85 - 2 55.7046 275 1 0 -29.5063 -124.95 -175.867 - 2 6.34453 756 1 1 -28.6533 -124.251 -174.85 - 2 81.1353 757 1 1 -28.65 -124.243 -174.842 - 2 65.9928 716 2 1 -36.85 -133.198 -144.656 -Number of digits in this event: 32 +Number of tracker hits in this event: 49 + 2 122.559 533 10 1 -73.4333 -49.4831 95.55 + 2 112.616 652 10 0 -73.4331 -49.4819 94.15 + 2 101.6 533 9 1 -73.4326 -49.4591 65.55 + 2 137.914 652 9 0 -73.4317 -49.4587 64.15 + 2 123.807 533 8 1 -73.4101 -49.4542 35.55 + 2 111.275 652 8 0 -73.4079 -49.4556 34.15 + 2 110.151 533 7 1 -73.3605 -49.4839 5.55 + 2 108.081 652 7 0 -73.358 -49.486 4.15 + 2 121.393 533 6 1 -73.3091 -49.5302 -24.45 + 2 105.695 652 6 0 -73.3055 -49.533 -25.85 + 2 128.768 534 5 1 -73.233 -49.585 -54.45 + 2 123.219 652 5 0 -73.2294 -49.5875 -55.85 + 2 230.544 534 4 1 -73.1536 -49.6355 -84.45 + 2 283.085 652 4 0 -73.1503 -49.6391 -85.85 + 2 122.771 534 3 1 -73.0823 -49.7174 -114.45 + 2 106.491 651 3 0 -73.0777 -49.7224 -115.85 + 2 117.035 535 2 1 -72.985 -49.8229 -144.45 + 2 118.83 651 2 0 -72.9814 -49.8272 -145.85 + 2 132.349 535 1 1 -72.9056 -49.9177 -174.45 + 2 120.078 650 1 0 -72.9019 -49.9226 -175.85 + 2 176.427 536 0 1 -72.8255 -50.0278 -204.45 + 2 184.379 650 0 0 -72.8221 -50.0333 -205.85 + 2 225.291 613 8 1 -57.3518 28.1061 35.15 + 2 229.097 533 4 1 -73.2701 -49.4695 -84.45 + 2 35.6233 553 3 1 -69.422 -49.8793 -114.45 + 2 73.3793 552 3 1 -69.45 -49.9072 -114.588 + 2 35.907 649 3 0 -69.7968 -50.2069 -115.85 + 2 74.5388 648 3 0 -69.8268 -50.25 -115.983 + 2 508.177 527 2 1 -74.5722 -61.4153 -144.45 + 2 318.659 526 2 1 -74.6501 -61.5558 -144.503 + 2 28.5622 568 2 0 -74.2853 -66.3875 -145.85 + 2 60.7088 567 2 0 -74.2807 -66.4509 -145.875 + 2 211.444 566 2 0 -74.2109 -66.6505 -145.992 + 2 178.186 565 2 0 -74.0533 -66.85 -146.091 + 2 282.412 564 2 0 -73.7341 -67.05 -146.123 + 2 89.3775 563 2 0 -73.416 -67.25 -146.093 + 2 166.645 538 2 1 -72.4012 -66.5607 -144.85 + 2 72.8027 537 2 1 -72.45 -66.5259 -144.722 + 2 78.1687 528 2 1 -74.45 -62.5668 -144.736 + 2 138.225 653 4 0 -73.3506 -49.4318 -85.85 + 2 184.68 526 3 1 -74.6661 -48.7306 -114.45 + 2 119.653 656 3 0 -74.6966 -48.7091 -115.85 + 2 87.5647 524 2 1 -75.1824 -48.3835 -144.45 + 2 107.322 658 2 0 -75.1644 -48.3476 -145.85 + 2 124.468 527 1 1 -74.5425 -47.3559 -174.45 + 2 114.68 663 1 0 -74.4389 -47.3202 -175.85 + 2 64.0802 539 0 1 -72.0697 -46.7824 -204.45 + 2 88.5376 540 0 1 -72.0498 -46.7734 -204.626 + 2 182.853 666 0 0 -71.8982 -46.7006 -205.85 +Number of digits in this event: 27 Using G4ParticleGun... -Particle energy: 2.67462 LIN +Particle energy: 9.62881 LIN Particle: e- Event: 3 -Number of tracker hits in this event: 21 - 3 126.436 1253 9 1 70.6584 98.3933 65.55 - 3 226.346 1391 9 0 70.6605 98.3918 64.15 - 3 169.153 1253 8 1 70.7037 98.3474 35.55 - 3 133.339 1390 8 0 70.7072 98.3445 34.15 - 3 106.799 1253 7 1 70.7631 98.2938 5.55 - 3 117.758 1390 7 0 70.766 98.2952 4.15 - 3 122.707 1253 6 1 70.8242 98.33 -24.45 - 3 168.404 1390 6 0 70.829 98.3341 -25.85 - 3 140.811 1254 5 1 70.9364 98.4122 -54.45 - 3 124.747 1391 5 0 70.9383 98.4119 -55.85 - 3 148.262 1254 4 1 70.9879 98.4013 -84.45 - 3 106.778 1391 4 0 70.9873 98.3963 -85.85 - 3 152.042 1254 3 1 70.9514 98.2866 -114.45 - 3 130.4 1390 3 0 70.9502 98.2772 -115.85 - 3 138.074 1254 2 1 70.9299 98.0912 -144.45 - 3 237.121 1389 2 0 70.9372 98.078 -145.85 - 3 148.842 1255 1 1 71.0957 97.8198 -174.45 - 3 170.369 1388 1 0 71.1048 97.8107 -175.85 - 3 120.369 1256 0 1 71.2895 97.6261 -204.45 - 3 209.573 1387 0 0 71.2968 97.6162 -205.85 - 3 43.0457 1739 2 1 167.95 26.2518 -144.665 -Number of digits in this event: 19 +Number of tracker hits in this event: 72 + 3 100.902 1079 9 1 35.9631 126.822 65.55 + 3 253.794 1533 9 0 35.9635 126.822 64.15 + 3 187.506 1079 8 1 35.9722 126.828 35.55 + 3 236.192 1533 8 0 35.9735 126.83 34.15 + 3 127.412 1079 7 1 36.042 126.896 5.55 + 3 105.997 1533 7 0 36.05 126.906 4.15 + 3 267.822 1080 6 1 36.1726 127.137 -24.45 + 3 80.6603 1534 6 0 36.1764 127.148 -25.85 + 3 19.5853 1535 6 0 36.1772 127.15 -26.1621 + 3 115.48 1081 5 1 36.2727 127.375 -54.45 + 3 111.438 1536 5 0 36.2814 127.381 -55.85 + 3 112.102 1082 4 1 36.4648 127.553 -84.45 + 3 110.369 1537 4 0 36.5097 127.566 -85.85 + 3 135.992 1087 3 1 37.4792 127.846 -114.45 + 3 159.861 1538 3 0 37.5209 127.824 -115.85 + 3 123.217 1090 2 1 38.1746 127.241 -144.45 + 3 167.242 1535 2 0 38.1493 127.185 -145.85 + 3 108.965 1087 1 1 37.5328 126.003 -174.45 + 3 135.847 1528 1 0 37.5532 125.939 -175.85 + 3 93.6153 1089 0 1 37.9428 124.609 -204.45 + 3 268.31 1521 0 0 37.9235 124.52 -205.85 + 3 541.129 1084 1 1 36.9962 128.24 -174.45 + 3 375.646 1540 1 0 36.9881 128.252 -175.85 + 3 256.161 1084 0 1 37.001 128.143 -204.45 + 3 298.251 1539 0 0 37.0094 128.129 -205.85 + 3 219.958 1083 0 1 36.85 128.082 -204.797 + 3 178.692 1082 0 1 36.65 128.196 -204.834 + 3 14.4946 1541 1 0 37.0216 128.35 -176.196 + 3 448.96 1695 1 0 69.0758 159.168 -176.25 + 3 86.3499 1696 1 0 69.4725 159.35 -176.057 + 3 140.271 1085 0 1 37.2191 128.966 -204.45 + 3 99.8277 1544 0 0 37.1889 129.016 -205.85 + 3 112.925 1083 1 1 36.8499 128.175 -174.563 + 3 240.025 1082 1 1 36.6499 128.186 -174.493 + 3 155.063 1527 1 0 35.971 125.75 -176.114 + 3 86.3993 1545 1 0 37.2281 129.212 -175.85 + 3 58.6375 1546 1 0 37.2751 129.35 -176.088 + 3 165.073 1124 0 1 45.045 145.043 -204.45 + 3 63.1456 1620 0 0 44.3842 144.258 -205.85 + 3 69.4269 1619 0 0 44.285 144.15 -206.047 + 3 29.334 1625 0 0 45.2172 145.303 -206.25 + 3 84.6986 1626 0 0 45.2628 145.35 -206.149 + 3 156.813 1128 0 1 45.7549 145.833 -204.85 + 3 115.374 1129 0 1 45.85 145.947 -204.6 + 3 74.8181 1604 1 0 73.7051 140.966 -176.25 + 3 111.031 1603 1 0 73.8043 140.95 -176.116 + 3 164.382 1273 1 1 74.7856 140.234 -174.85 + 3 212.177 1274 1 1 74.85 140.192 -174.771 + 3 12.1826 1275 1 1 75.05 140.031 -174.494 + 3 127.332 1597 1 0 74.1536 139.613 -175.85 + 3 3.18731 1596 1 0 74.0665 139.55 -175.992 + 3 60.0975 1047 6 1 29.65 134.665 -24.5711 + 3 256.181 1079 0 1 36.0445 126.923 -204.45 + 3 542.567 1533 0 0 36.046 126.924 -205.85 + 3 238.556 1080 0 1 36.05 126.929 -204.769 + 3 230.011 1537 0 0 36.8011 127.609 -205.85 + 3 118.076 1538 0 0 36.937 127.75 -206.117 + 3 324.392 1162 0 1 52.4906 126.285 -204.85 + 3 49.5742 1161 0 1 52.45 126.138 -204.746 + 3 96.1971 1163 0 1 52.65 125.362 -204.611 + 3 61.354 1518 0 0 53.0894 123.853 -205.85 + 3 102.112 1517 0 0 53.0722 123.75 -205.94 + 3 89.7025 1516 0 0 52.8944 123.55 -205.975 + 3 68.8223 1515 0 0 52.7939 123.35 -205.89 + 3 259.29 1164 0 1 53.0414 122.446 -204.85 + 3 18.3863 1692 0 0 71.9451 158.594 -206.25 + 3 72.7604 1743 1 0 160.652 168.853 -176.25 + 3 25.2149 1467 0 0 41.6708 113.575 -206.25 + 3 32.9305 1466 0 0 41.69 113.55 -206.226 + 3 107.642 1271 0 0 71.2538 74.4324 -206.25 + 3 136.104 1761 6 0 54.9126 172.35 -26.2093 + 3 109.076 1760 6 0 54.8603 172.35 -26.0211 +Number of digits in this event: 35 Using G4ParticleGun... -Particle energy: 4.80998 LIN +Particle energy: 2.41632 LIN Particle: e- Event: 4 -Number of tracker hits in this event: 88 - 4 143.501 648 11 1 -50.3468 62.3656 125.55 - 4 178.578 1211 11 0 -50.3463 62.3674 124.15 - 4 124.769 648 10 1 -50.3322 62.4064 95.55 - 4 99.3601 1211 10 0 -50.3309 62.4075 94.15 - 4 107.234 648 9 1 -50.2978 62.427 65.55 - 4 107.857 1211 9 0 -50.2958 62.428 64.15 - 4 248.799 648 8 1 -50.2509 62.4463 35.55 - 4 132.124 1211 8 0 -50.2482 62.4489 34.15 - 4 139.465 649 7 1 -50.2011 62.5088 5.55 - 4 222.136 1212 7 0 -50.1981 62.5116 4.15 - 4 127.272 649 6 1 -50.1379 62.5728 -24.45 - 4 177.111 1212 6 0 -50.1308 62.5746 -25.85 - 4 116.669 650 5 1 -49.9844 62.6069 -54.45 - 4 122.594 1212 5 0 -49.978 62.6091 -55.85 - 4 423.131 650 4 1 -49.8526 62.6453 -84.45 - 4 8.18419 651 4 1 -49.85 62.6455 -84.8302 - 4 275.873 1212 4 0 -49.8428 62.6464 -85.85 - 4 211.852 652 3 1 -49.6388 62.6727 -114.45 - 4 202.551 1213 3 0 -49.6271 62.6728 -115.85 - 4 114.974 653 2 1 -49.3936 62.6893 -144.45 - 4 96.6937 1213 2 0 -49.3852 62.6917 -145.85 - 4 122.457 654 1 1 -49.22 62.7565 -174.45 - 4 106.885 1213 1 0 -49.2137 62.7583 -175.85 - 4 111.446 654 0 1 -49.0902 62.7972 -204.45 - 4 113.948 1213 0 0 -49.0947 62.7982 -205.85 - 4 125.881 951 4 0 4.46063 10.2533 -86.25 - 4 26.875 950 4 0 4.46136 10.2498 -86.233 - 4 129.009 952 4 0 4.3004 10.45 -85.9827 - 4 196.322 916 4 1 3.42834 10.8487 -84.8499 - 4 63.0753 1128 1 0 136.919 45.715 -176.25 - 4 219.622 1590 1 1 138.151 45.5923 -174.85 - 4 140.847 1589 1 1 138.15 45.8436 -174.465 - 4 81.5856 810 1 0 -95.4729 -17.85 -176.025 - 4 144.106 809 1 0 -95.48 -18.05 -175.928 - 4 247.113 651 3 1 -49.65 62.6438 -114.625 - 4 101.41 584 3 1 -63.0582 68.4118 -114.45 - 4 62.5944 583 3 1 -63.25 68.5065 -114.541 - 4 59.5549 582 3 1 -63.4501 68.5787 -114.608 - 4 98.4891 581 3 1 -63.6504 68.6492 -114.683 - 4 62.8374 580 3 1 -63.8503 68.715 -114.735 - 4 45.1989 579 3 1 -64.05 68.7812 -114.774 - 4 41.6192 578 3 1 -64.2504 68.8386 -114.819 - 4 127.179 1247 3 0 -69.448 69.5613 -115.85 - 4 188.362 1248 3 0 -69.8482 69.65 -115.934 - 4 161.137 1249 3 0 -70.4483 69.8501 -116.089 - 4 51.0247 1250 3 0 -70.8925 70.0502 -116.215 - 4 120.603 1497 3 0 -159.738 119.683 -116.25 - 4 188.913 101 3 1 -159.795 119.603 -114.85 - 4 108.981 100 3 1 -159.95 120.11 -114.614 - 4 68.0004 99 3 1 -160.15 120.359 -114.667 - 4 139.388 98 3 1 -160.35 120.454 -114.684 - 4 389.855 97 3 1 -160.55 120.578 -114.667 - 4 300.227 96 3 1 -160.75 120.754 -114.602 - 4 135.154 1213 4 0 -49.9699 62.7967 -85.85 - 4 273.955 641 3 1 -51.7703 65.1884 -114.45 - 4 121.945 1227 3 0 -51.7924 65.4959 -115.85 - 4 137.001 637 2 1 -52.5214 73.9164 -144.45 - 4 25.3837 1270 2 0 -52.4961 74.2327 -145.85 - 4 103.293 1271 2 0 -52.496 74.25 -145.925 - 4 0.534621 639 1 1 -52.2497 79.3946 -174.45 - 4 104.61 638 1 1 -52.25 79.395 -174.453 - 4 154.181 1298 1 0 -52.3984 79.7366 -175.85 - 4 267.064 623 0 1 -55.3764 86.0588 -204.45 - 4 116.104 1331 0 0 -55.2419 86.3443 -205.85 - 4 36.4501 69 4 1 -166.15 -38.716 -84.4951 - 4 71.6115 624 0 1 -55.25 86.1127 -204.659 - 4 145.191 640 3 1 -51.85 65.2754 -114.519 - 4 83.4309 648 7 1 -50.25 62.4687 5.47391 - 4 118.585 1214 7 0 -50.6215 62.9736 4.15 - 4 69.2536 1215 7 0 -50.687 63.05 3.94156 - 4 437.14 1374 7 0 -30.6793 95.047 3.75 - 4 203.264 1373 7 0 -29.7872 94.95 3.93595 - 4 19.9303 1071 7 0 14.287 34.3339 3.7501 - 4 53.3836 810 7 0 -44.5213 -18.0386 3.75 - 4 226.561 1132 7 0 -47.0552 46.6135 3.75017 - 4 179.61 1375 7 0 -30.5907 95.15 3.80902 - 4 184.361 1244 7 0 -87.6211 68.9479 3.75 - 4 1.77162 457 7 1 -88.646 68.9449 5.15 - 4 88.4798 456 7 1 -88.6505 68.9447 5.15516 - 4 83.6164 455 7 1 -88.85 68.95 5.33342 - 4 85.7056 454 7 1 -89.05 69.1093 5.38638 - 4 109.697 453 7 1 -89.25 69.2098 5.32584 - 4 11.5566 452 7 1 -89.45 69.1466 5.17952 - 4 232.583 1243 7 0 -90.2063 68.8497 4.0957 - 4 118.667 1329 7 0 -62.4568 86.0194 3.75002 - 4 145.304 1330 7 0 -62.262 86.05 3.8768 - 4 10.1386 1368 7 0 -77.3162 93.9411 3.75012 - 4 228.941 1369 7 0 -77.332 93.95 3.75527 -Number of digits in this event: 48 +Number of tracker hits in this event: 121 + 4 134.714 1158 11 1 51.6812 35.1941 125.55 + 4 126.014 1075 11 0 51.6812 35.1937 124.15 + 4 131.32 1158 10 1 51.6777 35.1866 95.55 + 4 156.503 1075 10 0 51.6805 35.1888 94.15 + 4 230.994 1158 9 1 51.7405 35.2511 65.55 + 4 132.497 1076 9 0 51.744 35.2525 64.15 + 4 150.295 1158 8 1 51.8171 35.2883 35.55 + 4 160.645 1076 8 0 51.8245 35.291 34.15 + 4 128.787 1159 7 1 51.9838 35.335 5.55 + 4 104.121 1076 7 0 51.9941 35.3381 4.15 + 4 129.354 1160 6 1 52.2252 35.3831 -24.45 + 4 91.5448 1076 6 0 52.2399 35.3868 -25.85 + 4 132.75 1162 5 1 52.5402 35.4549 -54.45 + 4 113.389 1077 5 0 52.5597 35.4608 -55.85 + 4 107.067 1164 4 1 52.9624 35.5963 -84.45 + 4 124.359 1077 4 0 52.9865 35.6061 -85.85 + 4 168.417 1167 3 1 53.4782 35.7751 -114.45 + 4 208.575 1078 3 0 53.5021 35.7823 -115.85 + 4 322.536 1169 2 1 53.9926 35.9289 -144.45 + 4 252.589 1079 2 0 54.0089 35.9338 -145.85 + 4 128.102 1171 1 1 54.3539 36.0583 -174.45 + 4 225.997 1080 1 0 54.3707 36.0596 -175.85 + 4 117.398 1173 0 1 54.7284 36.0946 -204.45 + 4 135.459 1080 0 0 54.7422 36.0933 -205.85 + 4 109.511 1173 1 1 54.7718 35.1491 -174.45 + 4 105.296 1075 1 0 54.8125 35.0967 -175.85 + 4 104.509 1178 0 1 55.6594 34.0414 -204.45 + 4 118.795 1069 0 0 55.6927 33.9403 -205.85 + 4 83.8883 1170 2 1 54.05 35.6493 -144.666 + 4 69.6594 1070 2 0 54.5899 34.1964 -145.85 + 4 98.3934 1069 2 0 54.6421 34.0499 -145.966 + 4 58.7485 1068 2 0 54.7156 33.85 -146.142 + 4 130.78 1221 1 1 64.3545 7.19134 -174.45 + 4 52.1976 1222 1 1 64.45 7.05564 -174.725 + 4 22.7952 932 1 0 64.8104 6.48422 -175.85 + 4 219.341 931 1 0 64.8328 6.45 -175.919 + 4 1.64316 1265 0 1 73.2477 -8.33941 -204.45 + 4 189.293 1266 0 1 73.25 -8.34185 -204.452 + 4 96.9861 1267 0 1 73.45 -8.58062 -204.684 + 4 9.45983 853 0 0 74.4295 -9.43278 -205.85 + 4 127.106 852 0 0 74.4495 -9.45 -205.874 + 4 35.5368 851 0 0 74.6634 -9.65005 -206.191 + 4 91.6408 782 0 0 102.075 -23.5517 -206.25 + 4 46.645 859 0 0 78.9108 -8.20913 -206.25 + 4 273.623 1147 8 0 127.254 49.4754 33.75 + 4 163.401 1535 8 1 127.343 49.2265 35.15 + 4 154.673 1160 4 1 52.1898 35.4527 -84.45 + 4 131.489 1075 4 0 52.3691 35.1871 -85.85 + 4 2.35503 1168 3 1 53.8463 29.2377 -114.45 + 4 165.251 1169 3 1 53.85 29.2275 -114.46 + 4 107.076 1041 3 0 54.1988 28.4049 -115.85 + 4 21.3261 1040 3 0 54.303 28.25 -116.183 + 4 253.461 979 3 0 37.2192 15.9426 -116.25 + 4 77.0768 1078 3 1 35.8435 16.0398 -114.85 + 4 72.691 1077 3 1 35.65 16.0795 -114.63 + 4 110.593 1019 8 0 -34.2902 24.05 34.077 + 4 39.6873 1030 8 0 -34.6123 26.05 34.1207 + 4 242.518 1158 7 1 51.7751 35.3298 5.54991 + 4 114.907 1077 7 0 51.8492 35.4524 4.14995 + 4 131.93 1167 6 1 53.4714 38.0714 -24.4502 + 4 135.922 1090 6 0 53.7275 38.2038 -25.8502 + 4 154.745 1195 5 1 59.0739 40.815 -54.4513 + 4 126.61 1104 5 0 59.2255 40.8656 -55.85 + 4 148.217 1210 4 1 62.1027 42.0568 -84.45 + 4 140.922 1110 4 0 62.2553 42.1854 -85.85 + 4 77.5574 1231 3 1 66.3941 44.2953 -114.45 + 4 52.0231 1232 3 1 66.45 44.3274 -114.698 + 4 116.895 1122 3 0 66.6974 44.4853 -115.85 + 4 167.52 1266 2 1 73.2587 48.6556 -144.45 + 4 149.674 1144 2 0 73.7422 48.8866 -145.85 + 4 61.6159 1315 1 1 83.2214 53.7939 -174.45 + 4 110.311 1316 1 1 83.25 53.8128 -174.53 + 4 120.064 1170 1 0 83.6587 54.1449 -175.85 + 4 0.889376 1171 1 0 83.7799 54.25 -176.246 + 4 56.1888 1363 0 1 92.864 62.0602 -204.45 + 4 89.0625 1364 0 1 92.95 62.1069 -204.615 + 4 129.899 1212 0 0 93.5584 62.4621 -205.85 + 4 380.714 1075 7 0 51.9451 35.2236 4.15 + 4 193.092 1176 6 1 55.3039 33.4964 -24.4502 + 4 128.265 1066 6 0 55.3486 33.3467 -25.85 + 4 70.4448 1181 5 1 56.2864 30.8238 -54.45 + 4 69.6779 1182 5 1 56.45 30.7563 -54.5802 + 4 48.7828 1183 5 1 56.6502 30.6744 -54.7398 + 4 53.684 1050 5 0 58.0278 30.0985 -55.8507 + 4 139.87 1049 5 0 58.1437 30.05 -55.9424 + 4 55.3485 1374 4 1 95.0068 13.4913 -84.4501 + 4 62.2779 1375 4 1 95.15 13.4196 -84.5227 + 4 77.7834 1376 4 1 95.35 13.3108 -84.6262 + 4 74.3062 1377 4 1 95.5502 13.1937 -84.736 + 4 13.6689 1378 4 1 95.7507 13.0708 -84.8384 + 4 111.712 959 4 0 97.5695 12.0156 -85.85 + 4 206.647 958 4 0 97.8529 11.8498 -86.0134 + 4 15.6204 957 4 0 98.199 11.65 -86.2201 + 4 96.9926 1613 3 1 142.777 -14.3811 -114.45 + 4 65.6617 1614 3 1 142.95 -14.4925 -114.7 + 4 77.6567 825 3 0 143.782 -14.96 -115.85 + 4 77.474 824 3 0 143.947 -15.05 -116.074 + 4 249.225 1729 2 1 166.047 -28.2539 -144.45 + 4 65.5302 776 2 0 166.327 -24.8474 -145.85 + 4 65.731 777 2 0 166.384 -24.65 -145.888 + 4 68.3705 778 2 0 166.486 -24.45 -145.925 + 4 57.7248 779 2 0 166.585 -24.25 -145.973 + 4 65.889 780 2 0 166.674 -24.0494 -145.997 + 4 62.3496 781 2 0 166.752 -23.8495 -146.008 + 4 68.3828 782 2 0 166.825 -23.6494 -145.973 + 4 70.5793 783 2 0 166.89 -23.45 -145.93 + 4 26.3289 784 2 0 166.963 -23.25 -145.877 + 4 258.18 1743 2 1 168.846 -18.9479 -144.85 + 4 431.474 1744 2 1 168.95 -18.5921 -144.775 + 4 105.888 820 2 0 168.394 -16.0451 -145.85 + 4 55.9203 821 2 0 168.313 -15.85 -146.124 + 4 403.413 911 2 0 141.454 2.38839 -146.25 + 4 106.367 1604 2 1 141.047 2.09203 -144.849 + 4 325.724 1603 2 1 140.919 2.09592 -144.45 + 4 116.036 1602 2 1 140.75 2.05725 -144.675 + 4 290.986 909 2 0 141.111 1.86338 -145.85 + 4 127.373 908 2 0 140.957 1.85 -146.111 + 4 92.313 910 2 0 130.838 2.25 -145.999 + 4 431.401 1549 2 1 130.031 1.36823 -144.85 + 4 137.281 1074 7 0 51.8645 35.05 3.97053 + 4 169.205 1073 7 0 51.9521 34.85 3.98559 +Number of digits in this event: 57 Using G4ParticleGun... -Particle energy: 5.90718 LIN +Particle energy: 5.9999 LIN Particle: e- Event: 5 -Number of tracker hits in this event: 34 - 5 119.632 1367 10 1 93.5705 28.418 95.55 - 5 143.682 1041 10 0 93.5722 28.4166 94.15 - 5 131.411 1367 9 1 93.606 28.395 65.55 - 5 90.968 1041 9 0 93.608 28.3938 64.15 - 5 244.572 1367 8 1 93.6446 28.3724 35.55 - 5 471.059 1041 8 0 93.6474 28.3707 34.15 - 5 118.385 1367 7 1 93.7084 28.3392 5.55 - 5 251.577 1041 7 0 93.7128 28.3378 4.15 - 5 147.412 1368 6 1 93.801 28.3102 -24.45 - 5 120.857 1041 6 0 93.8047 28.3104 -25.85 - 5 191.597 1368 5 1 93.8868 28.3116 -54.45 - 5 120.163 1041 5 0 93.8914 28.311 -55.85 - 5 109.723 1369 4 1 93.9855 28.2972 -84.45 - 5 236.624 1041 4 0 93.9894 28.2956 -85.85 - 5 98.8748 1369 3 1 94.0668 28.2655 -114.45 - 5 126.973 1041 3 0 94.0699 28.2638 -115.85 - 5 118.249 1369 2 1 94.1282 28.2302 -144.45 - 5 108.962 1040 2 0 94.1332 28.2281 -145.85 - 5 150.929 1370 1 1 94.2223 28.1772 -174.45 - 5 151.903 1040 1 0 94.226 28.1732 -175.85 - 5 381.888 1370 0 1 94.311 28.1064 -204.45 - 5 531.713 1040 0 0 94.3073 28.0998 -205.85 - 5 123.105 1041 0 0 94.3576 28.2914 -205.85 - 5 187.639 1039 0 0 94.6046 28.05 -206.114 - 5 22.9455 1042 8 0 93.4988 28.45 33.8606 - 5 101.838 1040 8 0 92.7857 28.25 34.0867 - 5 127.967 1066 8 0 66.6185 33.2813 33.75 - 5 13.0458 1067 8 0 66.3424 33.45 34.1174 - 5 96.8259 1228 8 1 65.792 34.018 35.15 - 5 83.1191 1227 8 1 65.65 34.1523 35.3343 - 5 43.2955 1226 8 1 65.45 34.1795 35.4957 - 5 249.129 1225 8 1 65.2008 34.2621 35.55 - 5 17.7609 1056 8 0 65.0881 31.3056 34.15 - 5 290.685 1055 8 0 65.1093 31.25 34.104 -Number of digits in this event: 22 +Number of tracker hits in this event: 92 + 5 187.788 431 10 1 -93.9369 24.0259 95.55 + 5 133.696 1019 10 0 -93.9369 24.025 94.15 + 5 102.263 431 9 1 -93.9391 24.0002 65.55 + 5 90.7305 1019 9 0 -93.9393 23.9985 64.15 + 5 246.842 431 8 1 -93.9442 23.9632 35.55 + 5 145.751 1019 8 0 -93.9444 23.9618 34.15 + 5 121.331 430 7 1 -93.9501 23.9367 5.55 + 5 119.489 1019 7 0 -93.9512 23.9346 4.15 + 5 127.271 430 6 1 -93.9832 23.8988 -24.45 + 5 111.469 1019 6 0 -93.9861 23.8977 -25.85 + 5 105.829 430 5 1 -94.0262 23.8668 -54.45 + 5 228.396 1019 5 0 -94.0274 23.8678 -55.85 + 5 348.768 430 4 1 -94.0256 23.8543 -84.45 + 5 160.343 1019 4 0 -94.0192 23.8618 -85.85 + 5 215.476 431 3 1 -93.8614 24.0812 -114.45 + 5 97.8428 1020 3 0 -93.8632 24.0871 -115.85 + 5 216.241 431 2 1 -93.9244 24.1855 -144.45 + 5 196.699 1020 2 0 -93.9116 24.189 -145.85 + 5 236.02 432 1 1 -93.6441 24.2634 -174.45 + 5 142.26 1021 1 0 -93.6109 24.2769 -175.85 + 5 102.611 435 0 1 -92.982 24.5533 -204.45 + 5 126.112 1022 0 0 -92.9499 24.5486 -205.85 + 5 251.774 917 5 0 -96.5731 3.48784 -56.25 + 5 111.228 918 5 0 -96.8563 3.65 -56.1183 + 5 371.953 1019 2 0 -93.9087 24.05 -146.145 + 5 50.7092 844 2 1 -11.1971 104.225 -144.45 + 5 126.879 843 2 1 -11.25 104.237 -144.47 + 5 191.614 432 3 1 -93.7002 23.7548 -114.624 + 5 433.183 1018 3 0 -93.69 23.7519 -115.85 + 5 266.024 432 2 1 -93.6472 23.5649 -144.45 + 5 114.916 1017 2 0 -93.5883 23.6081 -145.85 + 5 149.396 438 1 1 -92.3974 24.6868 -174.45 + 5 285.883 1023 1 0 -92.3804 24.7081 -175.85 + 5 162.747 441 0 1 -91.8408 24.9406 -204.45 + 5 111.433 1024 0 0 -91.8509 24.9814 -205.851 + 5 118.417 433 2 1 -93.4875 23.6681 -144.45 + 5 203.05 1018 2 0 -93.4849 23.6711 -145.85 + 5 116.516 1017 1 0 -93.5659 23.6413 -175.85 + 5 106.283 434 0 1 -93.2684 23.8432 -204.45 + 5 494.461 1019 0 0 -93.2523 23.8845 -205.85 + 5 138.688 428 0 1 -94.3519 23.8332 -204.45 + 5 178.351 429 0 1 -94.35 23.8349 -204.462 + 5 9.2361 1020 0 0 -94.0424 24.05 -206.204 + 5 202.569 1018 0 0 -94.8904 23.7094 -205.85 + 5 84.6871 1017 0 0 -95.0629 23.65 -206.082 + 5 114.657 1003 0 0 -105.016 20.8191 -206.25 + 5 41.511 1004 0 0 -105.03 20.8501 -205.977 + 5 99.088 376 0 1 -104.904 21.3232 -204.849 + 5 169.404 377 0 1 -104.75 21.3311 -204.516 + 5 169.731 1008 0 0 -104.374 21.723 -205.85 + 5 28.1467 1007 0 0 -104.136 21.6497 -206.213 + 5 150.343 1244 2 0 -115.602 68.9288 -146.25 + 5 131.941 1018 4 0 -94.0084 23.7701 -85.85 + 5 516.816 430 3 1 -94.052 23.7153 -114.45 + 5 107.239 430 2 1 -94.0529 23.8326 -144.45 + 5 115.048 430 1 1 -94.087 23.7948 -174.45 + 5 170.432 1018 1 0 -94.0831 23.8018 -175.85 + 5 153.748 430 0 1 -94.0349 23.9498 -204.45 + 5 123.883 145 2 1 -150.95 81.7012 -144.665 + 5 33.0834 973 1 0 -87.8669 14.85 -176.196 + 5 6.91949 431 4 1 -93.95 23.7087 -84.8242 + 5 122.567 1017 4 0 -93.8068 23.5366 -85.8502 + 5 187.949 454 3 1 -89.0965 17.9373 -114.45 + 5 180.212 987 3 0 -89.1382 17.635 -115.85 + 5 126.45 451 2 1 -89.7664 11.7626 -144.45 + 5 160.612 958 2 0 -89.3703 11.7437 -145.85 + 5 228.964 492 1 1 -81.6245 11.7617 -174.45 + 5 28.2333 957 1 0 -81.5368 11.4757 -175.85 + 5 82.805 956 1 0 -81.5269 11.45 -175.979 + 5 11.0187 519 0 1 -76.0682 8.75555 -204.45 + 5 112.222 520 0 1 -76.05 8.7599 -204.493 + 5 228.762 944 0 0 -75.6304 8.8994 -205.85 + 5 49.0119 293 3 1 -121.514 97.7115 -114.85 + 5 462.44 1021 3 0 -94.0347 24.3747 -115.85 + 5 82.3845 1022 3 0 -94.0468 24.45 -116.157 + 5 110.233 1050 2 0 -93.4304 30.2051 -145.85 + 5 19.3004 1051 2 0 -93.3541 30.25 -146.16 + 5 103.591 466 1 1 -86.7167 32.6143 -174.45 + 5 203.266 1061 1 0 -86.6411 32.4444 -175.85 + 5 139.298 484 0 1 -83.2065 32.4107 -204.451 + 5 66.2974 1062 0 0 -82.7977 32.6143 -205.85 + 5 126.959 1063 0 0 -82.7364 32.65 -206.011 + 5 126.242 1054 2 0 -94.5199 30.9237 -145.85 + 5 57.4888 1055 2 0 -94.6349 31.05 -146.109 + 5 35.0028 1201 2 0 -111.488 60.4089 -146.25 + 5 68.2779 1202 2 0 -111.478 60.45 -146.189 + 5 74.3047 1203 2 0 -111.395 60.6503 -146.043 + 5 88.7122 1204 2 0 -111.321 60.85 -145.955 + 5 52.0708 1205 2 0 -111.233 61.05 -146.065 + 5 67.7636 1206 2 0 -111.175 61.2501 -146.167 + 5 2.06502 1207 2 0 -111.157 61.4503 -146.248 + 5 115.468 1350 3 0 -146.988 90.15 -116.243 +Number of digits in this event: 52 Using G4ParticleGun... -Particle energy: 3.66164 LIN +Particle energy: 2.6027 LIN Particle: e- Event: 6 -Number of tracker hits in this event: 17 - 6 90.4447 1584 7 1 137.094 54.7247 5.55 - 6 192.728 1173 7 0 137.095 54.7222 4.15 - 6 115.545 1584 6 1 137.112 54.6792 -24.45 - 6 117.416 1173 6 0 137.115 54.6781 -25.85 - 6 120.361 1585 5 1 137.184 54.6533 -54.45 - 6 186.452 1172 5 0 137.191 54.6495 -55.85 - 6 105.544 1585 4 1 137.342 54.5617 -84.45 - 6 95.0787 1172 4 0 137.348 54.556 -85.85 - 6 123.971 1586 3 1 137.46 54.4471 -114.45 - 6 109.082 1171 3 0 137.464 54.443 -115.85 - 6 264.32 1587 2 1 137.55 54.3561 -144.45 - 6 178.76 1171 2 0 137.554 54.3496 -145.85 - 6 115.432 1587 1 1 137.625 54.2123 -174.45 - 6 131.847 1170 1 0 137.627 54.2032 -175.85 - 6 168.998 1587 0 1 137.67 54.0214 -204.45 - 6 217.661 1169 0 0 137.673 54.0143 -205.85 - 6 13.0333 1586 2 1 137.55 54.3429 -144.519 -Number of digits in this event: 11 +Number of tracker hits in this event: 24 + 6 104.309 288 9 1 -122.522 26.3305 65.55 + 6 109.765 1031 9 0 -122.519 26.328 64.15 + 6 142.046 288 8 1 -122.456 26.2843 35.55 + 6 150.739 1031 8 0 -122.453 26.2795 34.15 + 6 159.526 288 7 1 -122.42 26.1768 5.55 + 6 117.575 1030 7 0 -122.422 26.1725 4.15 + 6 96.7449 288 6 1 -122.445 26.0846 -24.45 + 6 115.483 1030 6 0 -122.447 26.0815 -25.85 + 6 114.911 288 5 1 -122.509 26.0199 -54.45 + 6 118.081 1029 5 0 -122.506 26.0185 -55.85 + 6 139.754 288 4 1 -122.431 26.0013 -84.45 + 6 104.519 1029 4 0 -122.422 25.9974 -85.85 + 6 108.389 289 3 1 -122.239 25.9311 -114.45 + 6 113.841 1029 3 0 -122.229 25.9282 -115.85 + 6 145.383 290 2 1 -122.026 25.8807 -144.45 + 6 112.233 1029 2 0 -122.015 25.8819 -145.85 + 6 184.839 291 1 1 -121.787 25.9134 -174.45 + 6 124.351 1029 1 0 -121.78 25.9132 -175.85 + 6 122.881 292 0 1 -121.621 25.9191 -204.45 + 6 166.544 1029 0 0 -121.616 25.9188 -205.85 + 6 92.5173 1729 5 1 165.95 -37.5367 -54.5964 + 6 57.1962 1166 3 0 -18.7194 53.3355 -116.25 + 6 311.061 1028 0 0 -121.63 25.85 -206.011 + 6 1.84463 1027 0 0 -121.404 25.65 -205.907 +Number of digits in this event: 13 Using G4ParticleGun... -Particle energy: 6.64268 LIN +Particle energy: 8.13932 LIN Particle: e- Event: 7 -Number of tracker hits in this event: 152 - 7 137.683 423 10 0 -67.0299 -95.4626 94.15 - 7 220.827 565 9 1 -67.0169 -95.4592 65.55 - 7 107.328 423 9 0 -67.0156 -95.4595 64.15 - 7 397.72 565 8 1 -67.0452 -95.5051 35.55 - 7 407.968 423 8 0 -67.051 -95.5162 34.15 - 7 122.455 564 7 1 -67.1635 -95.7199 5.55 - 7 86.3653 422 7 0 -67.1661 -95.736 4.15 - 7 407.563 564 6 1 -67.2063 -96.0518 -24.45 - 7 355.755 420 6 0 -67.214 -96.0593 -25.85 - 7 126.502 563 5 1 -67.3288 -96.2206 -54.45 - 7 98.2305 419 5 0 -67.3359 -96.2274 -55.85 - 7 166.365 562 4 1 -67.4943 -96.2974 -84.45 - 7 104.852 419 4 0 -67.496 -96.2901 -85.85 - 7 141.894 562 3 1 -67.5306 -96.1811 -114.45 - 7 123.668 419 3 0 -67.5312 -96.1729 -115.85 - 7 215.007 562 2 1 -67.5273 -95.9713 -144.45 - 7 7.43949 420 2 0 -67.5339 -95.9502 -145.85 - 7 107.601 421 2 0 -67.5339 -95.95 -145.863 - 7 205.645 561 1 1 -67.7357 -95.4664 -174.45 - 7 102.149 423 1 0 -67.7465 -95.4637 -175.85 - 7 309.422 560 0 1 -68.0343 -95.4669 -204.45 - 7 184.631 423 0 0 -67.9472 -95.4256 -205.85 - 7 133.247 561 0 1 -67.821 -95.258 -204.45 - 7 64.3985 559 0 1 -68.0501 -95.2768 -204.632 - 7 65.8148 563 3 1 -67.45 -96.2183 -114.626 - 7 67.7103 564 3 1 -67.2499 -96.2645 -114.617 - 7 24.8453 565 3 1 -67.05 -96.2313 -114.496 - 7 96.6316 563 0 1 -67.3407 -98.2606 -204.451 - 7 32.574 408 0 0 -67.4837 -98.5228 -205.852 - 7 576.753 407 0 0 -67.495 -98.55 -205.998 - 7 146.491 557 5 1 -68.6138 -97.2103 -54.4503 - 7 114.456 415 5 0 -68.7125 -97.0163 -55.85 - 7 232.901 558 4 1 -68.4007 -93.5245 -84.45 - 7 8.42053 557 4 1 -68.45 -93.3911 -84.8227 - 7 41.2834 435 4 0 -68.5894 -93.0066 -85.8503 - 7 82.1098 436 4 0 -68.608 -92.95 -86.001 - 7 113.467 542 3 1 -71.6362 -82.585 -114.45 - 7 30.3812 543 3 1 -71.45 -82.4584 -114.763 - 7 56.0657 489 3 0 -70.6649 -82.0836 -115.85 - 7 157.463 490 3 0 -70.5884 -82.0499 -115.955 - 7 87.9142 677 2 1 -44.5406 -79.6242 -144.45 - 7 102.196 678 2 1 -44.45 -79.5494 -144.559 - 7 50.7058 679 2 1 -44.2498 -79.4538 -144.754 - 7 210.254 504 2 0 -43.0814 -79.19 -145.85 - 7 164.634 329 2 0 13.4475 -114.187 -146.25 - 7 107.89 328 2 0 13.5138 -114.35 -146.144 - 7 129.59 327 2 0 13.59 -114.55 -145.993 - 7 6.63976 326 2 0 13.6507 -114.75 -145.864 - 7 30.7804 969 2 1 14.0367 -116.86 -144.85 - 7 170.599 970 2 1 14.05 -116.937 -144.81 - 7 14.1851 971 2 1 14.4075 -117.324 -144.45 - 7 111.871 972 2 1 14.45 -117.305 -144.486 - 7 55.1121 973 2 1 14.65 -117.091 -144.732 - 7 43.8076 321 2 0 14.9288 -115.862 -145.85 - 7 114.241 322 2 0 14.9431 -115.75 -145.972 - 7 35.0444 323 2 0 15.0257 -115.55 -146.166 - 7 53.7624 457 1 0 31.5772 -88.45 -176.1 - 7 136.433 561 5 1 -67.6987 -95.6077 -54.45 - 7 116.201 422 5 0 -67.7321 -95.7113 -55.85 - 7 109.876 410 4 0 -68.3476 -98.1141 -85.85 - 7 5.34525 409 4 0 -68.3635 -98.15 -86.2278 - 7 127.212 551 3 1 -69.6579 -100.918 -114.45 - 7 105.686 395 3 0 -69.6909 -101.067 -115.85 - 7 116.656 548 2 1 -70.3323 -104.237 -144.45 - 7 101.834 378 2 0 -70.4274 -104.375 -145.85 - 7 145.814 542 1 1 -71.5719 -109.279 -174.45 - 7 136.835 353 1 0 -71.6071 -109.456 -175.85 - 7 157.197 537 0 1 -72.5831 -113.137 -204.45 - 7 103.465 333 0 0 -72.7133 -113.376 -205.85 - 7 1.29526 451 0 0 -85.8359 -89.8087 -206.25 - 7 0.988358 452 0 0 -86.1952 -89.65 -205.852 - 7 17.4848 465 0 1 -87.0325 -89.2976 -204.85 - 7 162.831 464 0 1 -87.05 -89.2876 -204.83 - 7 54.2341 456 0 0 -88.1247 -88.6695 -205.85 - 7 21.4224 457 0 0 -88.1622 -88.65 -205.876 - 7 75.8643 461 0 1 -87.7365 -88.1803 -204.85 - 7 35.2259 564 9 1 -67.1481 -95.4128 65.55 - 7 110.773 563 9 1 -67.25 -95.3199 65.5025 - 7 185.706 562 9 1 -67.45 -95.0277 65.4248 - 7 102.965 561 9 1 -67.6511 -94.8082 65.394 - 7 124.595 560 9 1 -67.8501 -94.5911 65.3116 - 7 103.04 431 9 0 -68.5148 -93.8968 64.15 - 7 108.396 432 9 0 -68.5713 -93.75 63.9176 - 7 43.4236 649 9 0 -103.121 -50.0958 63.75 - 7 107.863 650 9 0 -103.222 -50.05 63.8722 - 7 125.708 651 9 0 -103.479 -49.85 64.0691 - 7 38.9895 652 9 0 -103.667 -49.6495 64.1271 - 7 81.6643 372 9 1 -105.693 -46.5247 65.1502 - 7 91.881 371 9 1 -105.75 -46.3832 65.2107 - 7 98.2692 370 9 1 -105.95 -46.2196 65.3403 - 7 50.8452 369 9 1 -106.15 -45.9725 65.3593 - 7 79.7174 368 9 1 -106.35 -45.9407 65.3647 - 7 67.3347 367 9 1 -106.55 -46.0165 65.2566 - 7 61.406 666 9 0 -106.529 -46.6648 64.15 - 7 309.977 667 9 0 -106.553 -46.6499 64.0251 - 7 151.451 569 7 1 -66.2447 -95.0078 5.55 - 7 128.145 428 7 0 -65.6385 -94.5173 4.15 - 7 117.062 627 6 1 -54.455 -85.5356 -24.45 - 7 6.70546 626 6 1 -54.6502 -85.4855 -24.8317 - 7 144.671 473 6 0 -55.1424 -85.3765 -25.8502 - 7 132.775 556 5 1 -68.6835 -83.7357 -54.45 - 7 114.94 481 5 0 -68.8934 -83.7083 -55.85 - 7 83.5122 541 4 1 -71.8409 -82.6202 -84.45 - 7 18.8758 540 4 1 -71.85 -82.6015 -84.7795 - 7 110.698 487 4 0 -71.9064 -82.5331 -85.8502 - 7 113.599 547 3 1 -70.584 -78.6282 -114.45 - 7 33.7659 548 3 1 -70.4499 -78.632 -114.777 - 7 170.803 507 3 0 -70.007 -78.6163 -115.85 - 7 65.9658 596 2 1 -60.7767 -78.1961 -144.45 - 7 86.1829 597 2 1 -60.65 -78.1591 -144.627 - 7 119.144 510 2 0 -59.7229 -77.986 -145.85 - 7 69.1711 705 1 1 -39.0219 -72.7729 -174.45 - 7 90.9377 706 1 1 -38.85 -72.641 -174.624 - 7 89.2246 541 1 0 -37.7937 -71.8005 -175.85 - 7 93.869 542 1 0 -37.6171 -71.65 -176.053 - 7 29.7233 864 0 1 -7.08544 -44.8072 -204.45 - 7 92.6836 865 0 1 -7.05 -44.8508 -204.543 - 7 14.747 672 0 0 -6.79387 -45.6262 -205.85 - 7 124.506 671 0 0 -6.78611 -45.6504 -205.89 - 7 15.7142 670 0 0 -6.72354 -45.8501 -206.197 - 7 114.08 568 7 1 -66.2636 -95.7484 5.54907 - 7 136.616 421 7 0 -66.2891 -95.8257 4.15 - 7 142.339 565 6 1 -67.0425 -97.3859 -24.4502 - 7 115.909 413 6 0 -67.0193 -97.4571 -25.85 - 7 120.694 567 5 1 -66.608 -98.4707 -54.45 - 7 118.818 408 5 0 -66.5064 -98.527 -55.85 - 7 204.207 577 4 1 -64.5891 -99.7687 -84.45 - 7 57.3503 401 4 0 -64.4434 -99.9265 -85.85 - 7 88.2387 400 4 0 -64.4206 -99.95 -86.0586 - 7 77.7398 594 3 1 -61.1023 -102.969 -114.45 - 7 26.1519 595 3 1 -61.0499 -102.987 -114.722 - 7 114.708 385 3 0 -60.8198 -103.058 -115.85 - 7 72.21 625 2 1 -54.8814 -104.665 -144.45 - 7 276.757 626 2 1 -54.85 -104.674 -144.694 - 7 120.82 377 2 0 -54.6845 -104.733 -145.85 - 7 219.994 646 1 1 -50.7332 -105.758 -174.45 - 7 212.736 372 1 0 -50.5106 -105.74 -175.85 - 7 105.746 671 0 1 -45.7958 -105.324 -204.45 - 7 168.425 374 0 0 -45.5898 -105.337 -205.85 - 7 265.689 645 1 1 -50.85 -106.001 -174.813 - 7 358.663 644 1 1 -51.05 -106.133 -174.756 - 7 41.2925 360 2 0 -54.7037 -107.998 -145.85 - 7 91.4191 359 2 0 -54.6999 -108.15 -145.979 - 7 62.442 358 2 0 -54.6888 -108.35 -146.093 - 7 59.3316 357 2 0 -54.6221 -108.55 -146.181 - 7 10.9889 356 2 0 -54.5717 -108.75 -146.244 - 7 87.7669 584 0 1 -63.0871 -93.2793 -204.45 - 7 113.412 585 0 1 -63.05 -93.1985 -204.731 - 7 118.258 435 0 0 -62.8031 -93.0187 -205.85 - 7 86.5662 586 0 1 -62.85 -93.29 -204.557 - 7 145.5 433 0 0 -62.0826 -93.4493 -205.85 - 7 0.678355 432 0 0 -61.8351 -93.55 -206.248 -Number of digits in this event: 54 -Using G4ParticleGun... -Particle energy: 2.57861 LIN +Number of tracker hits in this event: 140 + 7 131.314 872 11 1 -5.49096 66.5168 125.55 + 7 141.614 1232 11 0 -5.49168 66.5165 124.15 + 7 113.839 872 10 1 -5.50909 66.5128 95.55 + 7 108.627 1232 10 0 -5.50964 66.5124 94.15 + 7 119.231 872 9 1 -5.52126 66.5081 65.55 + 7 154.329 1232 9 0 -5.52128 66.507 64.15 + 7 444.428 872 8 1 -5.52613 66.4815 35.55 + 7 431.152 1232 8 0 -5.52727 66.4797 34.15 + 7 103.912 872 7 1 -5.55521 66.4441 5.55 + 7 225.801 1231 7 0 -5.55695 66.4429 4.15 + 7 245.788 872 6 1 -5.5944 66.4181 -24.45 + 7 284.095 1231 6 0 -5.59672 66.4181 -25.85 + 7 173.724 872 5 1 -5.64121 66.4204 -54.45 + 7 533.706 1231 5 0 -5.64443 66.4185 -55.85 + 7 226.885 871 4 1 -5.71261 66.38 -84.45 + 7 313.353 1231 4 0 -5.71688 66.3786 -85.85 + 7 108.501 871 3 1 -5.80759 66.3445 -114.45 + 7 107.402 1231 3 0 -5.81335 66.3426 -115.85 + 7 125.033 870 2 1 -5.93217 66.3018 -144.45 + 7 510.436 1231 2 0 -5.93794 66.2998 -145.85 + 7 98.5645 869 1 1 -6.06274 66.2594 -174.45 + 7 142.05 1231 1 0 -6.06833 66.258 -175.85 + 7 161.743 869 0 1 -6.17832 66.2412 -204.45 + 7 224.897 1230 0 0 -6.18501 66.237 -205.85 + 7 62.2848 737 0 1 -32.6174 60.5027 -204.85 + 7 97.1132 736 0 1 -32.65 60.6081 -204.671 + 7 169.593 1232 0 0 -5.76304 66.5543 -205.85 + 7 120.884 1658 2 0 -40.4815 151.854 -146.25 + 7 124.925 1675 6 0 -164.343 155.306 -26.25 + 7 173.491 1232 5 0 -5.67122 66.45 -55.9044 + 7 74.5761 1235 2 0 -5.32587 67.05 -146.166 + 7 31.4835 1050 2 0 10.9757 30.1493 -146.25 + 7 1.95999 870 4 1 -5.85 66.3459 -84.8448 + 7 122.864 851 3 1 -9.69847 67.0509 -114.45 + 7 142.754 1235 3 0 -9.88939 67.2006 -115.85 + 7 102.074 834 2 1 -13.1688 70.1424 -144.45 + 7 135.838 1251 2 0 -13.3142 70.2528 -145.85 + 7 128.698 819 1 1 -16.0838 72.4457 -174.45 + 7 135.531 1263 1 0 -16.3757 72.6774 -175.85 + 7 64.7457 792 0 1 -21.5787 77.4185 -204.45 + 7 70.2292 791 0 1 -21.65 77.4107 -204.63 + 7 132.57 1286 0 0 -22.1711 77.3547 -205.851 + 7 12.933 867 4 1 -6.46372 67.9879 -84.45 + 7 145.522 868 4 1 -6.44997 67.9846 -84.4858 + 7 171.238 1239 4 0 -5.89341 67.8891 -85.8507 + 7 5.23626 927 3 1 5.45263 66.9206 -114.45 + 7 117.436 926 3 1 5.45 66.921 -114.476 + 7 71.2163 1233 3 0 5.1149 66.6953 -115.85 + 7 40.5928 1232 3 0 5.0488 66.65 -116.094 + 7 189.933 877 2 1 -4.48578 59.6047 -144.45 + 7 110.269 1196 2 0 -4.83524 59.433 -145.85 + 7 120.059 849 1 1 -10.1811 57.1782 -174.45 + 7 14.2168 848 1 1 -10.25 56.9897 -174.818 + 7 14.6479 1182 1 0 -10.5415 56.468 -175.85 + 7 258.886 1181 1 0 -10.5527 56.4499 -175.887 + 7 0.0266863 1180 1 0 -10.6934 56.25 -176.249 + 7 44.7853 786 0 1 -22.7507 38.5036 -204.45 + 7 116.364 787 0 1 -22.65 38.419 -204.58 + 7 12.2452 788 0 1 -22.4498 38.2834 -204.842 + 7 42.09 1089 0 0 -21.6565 37.9035 -205.85 + 7 108.253 1088 0 0 -21.5508 37.85 -205.973 + 7 194.272 1099 0 0 -11.3376 39.9785 -206.25 + 7 105.439 1100 0 0 -11.3596 40.05 -206.146 + 7 266.704 841 0 1 -11.7934 40.7023 -204.85 + 7 231.842 1220 7 0 7.42353 64.2218 3.75 + 7 87.9943 1221 7 0 7.6979 64.25 3.82769 + 7 366.422 871 2 1 -5.6908 66.3082 -144.45 + 7 59.6713 830 1 1 -13.9924 67.236 -174.45 + 7 53.2234 829 1 1 -14.0501 67.2517 -174.634 + 7 334.788 1236 1 0 -14.3112 67.2981 -175.85 + 7 222.889 789 0 1 -22.1268 67.5713 -204.451 + 7 138.567 1229 0 0 -22.7901 66.05 -206.045 + 7 5.95651 1228 0 0 -22.8883 65.85 -206.241 + 7 37.7593 998 0 0 -23.947 19.7573 -206.25 + 7 94.6821 997 0 0 -23.9178 19.6493 -206.137 + 7 81.737 996 0 0 -23.8149 19.4498 -205.908 + 7 197.528 784 0 1 -23.1629 16.672 -204.85 + 7 142.407 979 0 0 -23.1641 15.8681 -205.85 + 7 75.258 978 0 0 -23.1783 15.85 -205.918 + 7 66.7422 995 0 0 -4.80707 19.0836 -206.25 + 7 230.364 872 2 1 -5.49487 66.3105 -144.45 + 7 91.6495 868 1 1 -6.37463 67.3367 -174.45 + 7 144.66 859 0 1 -8.10486 67.1196 -204.45 + 7 212.72 1235 0 0 -8.20172 67.1169 -205.85 + 7 125.705 872 1 1 -5.5022 65.6032 -174.45 + 7 186.952 1227 1 0 -5.515 65.5809 -175.85 + 7 307.996 872 0 1 -5.63897 65.1787 -204.45 + 7 119.638 1225 0 0 -5.62868 65.1859 -205.85 + 7 296.665 871 0 1 -5.65 66.3357 -204.762 + 7 131.884 1224 0 0 -6.98558 65.0038 -205.85 + 7 129.594 1223 0 0 -7.05421 64.85 -205.992 + 7 211.387 871 7 1 -5.68183 66.3243 5.55 + 7 263.171 873 6 1 -5.33935 66.2557 -24.45 + 7 185.699 879 5 1 -4.12846 68.3894 -54.45 + 7 120.169 1242 5 0 -4.06355 68.5476 -55.85 + 7 285.886 886 4 1 -2.6843 71.4826 -84.45 + 7 110.12 1257 4 0 -2.6295 71.5971 -85.8506 + 7 171.441 892 3 1 -1.54153 74.3403 -114.45 + 7 110.111 1272 3 0 -1.64915 74.5657 -115.85 + 7 129.092 879 2 1 -4.08455 79.2357 -144.45 + 7 140.56 1297 2 0 -4.21709 79.4893 -145.85 + 7 138.949 864 1 1 -7.15833 84.2498 -174.45 + 7 95.714 1321 1 0 -7.19759 84.3052 -175.85 + 7 38.673 858 0 1 -8.43838 85.4681 -204.451 + 7 67.6388 857 0 1 -8.45012 85.4696 -204.586 + 7 115.357 1327 0 0 -8.55606 85.483 -205.85 + 7 128.841 1232 7 0 -5.73703 66.6325 4.15 + 7 2.87699 1233 7 0 -5.73652 66.65 3.76098 + 7 119.961 871 6 1 -5.8251 67.9419 -24.4502 + 7 119.764 1239 6 0 -5.89583 67.9777 -25.85 + 7 162.47 862 5 1 -7.58144 68.4191 -54.45 + 7 149.428 1241 5 0 -7.73101 68.435 -55.85 + 7 127.712 844 4 1 -11.1688 68.9536 -84.45 + 7 5.53331 843 4 1 -11.25 68.9492 -84.8226 + 7 112.207 1244 4 0 -11.4738 68.9224 -85.85 + 7 218.183 812 3 1 -17.5383 68.0921 -114.45 + 7 112.915 1240 3 0 -17.8548 68.1689 -115.851 + 7 93.8428 780 2 1 -23.9675 69.239 -144.45 + 7 123.76 779 2 1 -24.05 69.2425 -144.774 + 7 118.726 1246 2 0 -24.3103 69.2901 -145.85 + 7 94.2342 748 1 1 -30.3523 71.1942 -174.45 + 7 122.332 1256 1 0 -30.7166 71.3858 -175.85 + 7 98.9979 708 0 1 -38.3757 75.4999 -204.45 + 7 23.4881 707 0 1 -38.45 75.5473 -204.744 + 7 111.669 1278 0 0 -38.7312 75.7277 -205.85 + 7 155.226 778 2 1 -24.25 69.2713 -144.797 + 7 102.422 1239 2 0 -5.84459 67.9299 -145.85 + 7 108.104 870 1 1 -5.9038 68.3999 -174.45 + 7 252.759 1241 1 0 -5.89072 68.4141 -175.85 + 7 246.268 1243 0 0 -5.66374 68.7027 -205.85 + 7 152.296 1236 2 0 -5.75786 67.3698 -145.85 + 7 147.119 871 1 1 -5.76051 56.5303 -174.45 + 7 23.33 1178 1 0 -5.80662 55.7018 -175.85 + 7 125.709 1177 1 0 -5.80735 55.65 -175.936 + 7 25.9232 1176 1 0 -5.83219 55.4498 -176.195 + 7 21.4645 637 1 0 -16.8631 -52.5719 -176.25 + 7 78.211 636 1 0 -16.8576 -52.65 -176.204 + 7 67.9687 635 1 0 -16.9556 -52.85 -176.036 + 7 108.74 814 1 1 -17.1127 -53.7843 -174.85 + 7 30.8175 813 1 1 -17.25 -54.0366 -174.553 +Number of digits in this event: 74 +Using G4ParticleGun... +Particle energy: 7.3806 LIN Particle: e- Event: 8 -Number of tracker hits in this event: 56 - 8 164.85 922 11 1 4.51508 -33.2622 125.55 - 8 173.144 733 11 0 4.51491 -33.2641 124.15 - 8 201.795 922 10 1 4.53436 -33.3067 95.55 - 8 131.029 733 10 0 4.54133 -33.311 94.15 - 8 135.609 923 9 1 4.66497 -33.4044 65.55 - 8 150.119 733 9 0 4.67212 -33.413 64.15 - 8 132.494 923 8 1 4.822 -33.584 35.55 - 8 109.207 732 8 0 4.82777 -33.5926 34.15 - 8 135.042 924 7 1 4.9366 -33.7664 5.55 - 8 150.698 731 7 0 4.93649 -33.7741 4.15 - 8 157.527 924 6 1 4.93695 -33.9322 -24.45 - 8 98.003 730 6 0 4.9394 -33.941 -25.85 - 8 126.598 924 5 1 4.9993 -34.1276 -54.45 - 8 142.293 729 5 0 5.00645 -34.1347 -55.85 - 8 120.303 925 4 1 5.11514 -34.2896 -84.45 - 8 139.292 728 4 0 5.11737 -34.2986 -85.85 - 8 206.902 925 3 1 5.17396 -34.4702 -114.45 - 8 163.124 727 3 0 5.18185 -34.4752 -115.85 - 8 214.597 926 2 1 5.37424 -34.5602 -144.45 - 8 171.655 727 2 0 5.38393 -34.5643 -145.85 - 8 119.874 927 1 1 5.59787 -34.6342 -174.45 - 8 118.161 727 1 0 5.60364 -34.6445 -175.85 - 8 136.276 928 0 1 5.69929 -34.88 -204.45 - 8 122.424 725 0 0 5.70774 -34.8926 -205.85 - 8 78.7474 924 3 1 4.9055 -34.4798 -114.704 - 8 118.807 728 3 0 4.91248 -34.45 -115.952 - 8 2.43133 944 2 1 9.04677 -26.0121 -144.451 - 8 136.004 945 2 1 9.05045 -26.0086 -144.459 - 8 151.046 774 2 0 9.80362 -25.233 -145.85 - 8 20.228 775 2 0 9.98472 -25.05 -146.19 - 8 104.127 1027 1 1 25.4854 -11.2243 -174.45 - 8 58.9363 1028 1 1 25.6504 -11.227 -174.679 - 8 307.595 844 1 0 26.4882 -11.2237 -175.85 - 8 25.8091 1134 0 1 46.9924 -14.7708 -204.45 - 8 145.293 1135 0 1 47.05 -14.8148 -204.512 - 8 54.6478 1136 0 1 47.25 -14.9585 -204.713 - 8 9.49888 822 0 0 48.2972 -15.6374 -205.85 - 8 152.445 821 0 0 48.317 -15.65 -205.872 - 8 9.84146 820 0 0 48.6082 -15.8502 -206.221 - 8 115.291 729 3 0 4.8338 -34.2125 -115.85 - 8 134.777 916 2 1 3.29687 -29.7489 -144.45 - 8 112.483 753 2 0 3.16655 -29.3494 -145.85 - 8 9.34313 754 2 0 3.12631 -29.25 -146.208 - 8 145.776 897 1 1 -0.475515 -21.4588 -174.45 - 8 136.587 793 1 0 -0.887382 -21.3225 -175.85 - 8 119.951 852 0 1 -9.48502 -18.0654 -204.45 - 8 109.187 810 0 0 -9.60206 -17.9013 -205.85 - 8 19.8478 811 0 0 -9.63155 -17.85 -206.172 - 8 26.5746 925 5 1 5.24196 -34.1529 -54.45 - 8 101.014 926 5 1 5.25 -34.0689 -54.5278 - 8 25.3093 927 5 1 5.4508 -33.9013 -54.805 - 8 148.973 732 5 0 6.82203 -33.5783 -55.8505 - 8 108.458 704 6 0 35.1629 -39.0993 -26.2498 - 8 277.032 703 6 0 35.4566 -39.25 -26.1642 - 8 291.522 702 6 0 36.3649 -39.45 -25.882 - 8 287.072 701 6 0 36.6205 -39.65 -26.1326 -Number of digits in this event: 33 +Number of tracker hits in this event: 41 + 8 128.747 419 9 1 -96.2043 71.4127 65.55 + 8 110.052 1256 9 0 -96.2039 71.4128 64.15 + 8 118.949 419 8 1 -96.1974 71.4143 35.55 + 8 123.03 1256 8 0 -96.1973 71.4136 34.15 + 8 133.116 419 7 1 -96.1947 71.3985 5.55 + 8 133.901 1256 7 0 -96.1933 71.3977 4.15 + 8 153.952 419 6 1 -96.1625 71.3851 -24.45 + 8 109.85 1256 6 0 -96.162 71.3852 -25.85 + 8 105.646 419 5 1 -96.1553 71.3915 -54.45 + 8 127.921 1256 5 0 -96.1536 71.3924 -55.85 + 8 106.17 420 4 1 -96.1146 71.4163 -84.45 + 8 172.654 1256 4 0 -96.1129 71.4176 -85.85 + 8 127.936 420 3 1 -96.0711 71.4432 -114.45 + 8 115.762 1256 3 0 -96.0687 71.4464 -115.85 + 8 331.354 420 2 1 -95.9906 71.4913 -144.45 + 8 118.916 1257 2 0 -95.9811 71.4891 -145.85 + 8 102.916 421 1 1 -95.8005 71.4258 -174.45 + 8 131.266 1256 1 0 -95.7905 71.4145 -175.85 + 8 161.517 422 0 1 -95.5786 71.1613 -204.45 + 8 141.933 1255 0 0 -95.5667 71.1463 -205.85 + 8 15.3968 419 2 1 -96.1659 71.5381 -144.45 + 8 385.729 421 2 1 -95.95 71.1643 -144.623 + 8 72.7707 1254 2 0 -95.3227 70.9305 -145.85 + 8 70.6968 1253 2 0 -95.2205 70.8498 -146.057 + 8 57.9367 512 1 1 -77.5897 63.086 -174.45 + 8 108.191 513 1 1 -77.45 63.1307 -174.572 + 8 27.6943 514 1 1 -77.25 63.2067 -174.754 + 8 248.942 1218 1 0 -76.1538 63.6591 -175.85 + 8 219.236 650 0 1 -50.0366 71.4181 -204.451 + 8 73.499 1259 0 0 -49.5203 71.9109 -205.85 + 8 162.675 1260 0 0 -49.4125 72.05 -206.131 + 8 93.6334 651 0 1 -49.8496 71.4443 -204.713 + 8 155.433 649 0 1 -50.05 71.427 -204.465 + 8 281.22 420 0 1 -96.0514 71.4581 -204.45 + 8 262.117 1257 0 0 -96.0668 71.4648 -205.85 + 8 32.619 1256 0 0 -96.0654 71.45 -206.146 + 8 2.36685 528 0 1 -74.3739 11.2272 -204.85 + 8 197.267 1051 5 1 30.3114 -143.439 -54.4505 + 8 4.99048 636 7 0 -128.119 -52.8024 3.75 + 8 333.525 635 7 0 -128.133 -52.85 3.84284 + 8 3.9165 925 3 0 -125.499 5.25 -116.004 +Number of digits in this event: 24 Using G4ParticleGun... -Particle energy: 1.76885 LIN +Particle energy: 5.03127 LIN Particle: e- Event: 9 -Number of tracker hits in this event: 55 - 9 141.402 891 9 1 -1.7821 -134.221 65.55 - 9 126.487 229 9 0 -1.77793 -134.217 64.15 - 9 169.24 891 8 1 -1.69955 -134.145 35.55 - 9 206.898 230 8 0 -1.69127 -134.146 34.15 - 9 201.368 892 7 1 -1.51281 -134.18 5.55 - 9 117.95 229 7 0 -1.50314 -134.184 4.15 - 9 110.446 893 6 1 -1.2799 -134.277 -24.45 - 9 134.605 229 6 0 -1.2776 -134.285 -25.85 - 9 113.276 894 5 1 -1.22707 -134.403 -54.45 - 9 162.743 228 5 0 -1.24221 -134.42 -55.85 - 9 280.882 892 4 1 -1.53747 -134.744 -84.45 - 9 209.031 226 4 0 -1.53629 -134.777 -85.85 - 9 294.377 892 3 1 -1.51213 -135.439 -114.45 - 9 315.397 223 3 0 -1.53111 -135.472 -115.85 - 9 265.183 890 2 1 -1.93228 -136.17 -144.45 - 9 214.321 219 2 0 -1.95129 -136.185 -145.85 - 9 169.472 888 1 1 -2.32333 -136.438 -174.45 - 9 118.132 218 1 0 -2.31784 -136.445 -175.85 - 9 161.894 889 0 1 -2.17072 -136.53 -204.45 - 9 126.489 218 0 0 -2.17498 -136.503 -205.85 - 9 53.3337 72 3 0 13.3201 -165.664 -116.25 - 9 105.673 71 3 0 13.3226 -165.75 -116.08 - 9 35.3211 968 3 1 13.788 -166.669 -114.85 - 9 136.751 969 3 1 13.85 -166.773 -114.763 - 9 82.2441 970 3 1 14.0601 -167.072 -114.45 - 9 66.1394 971 3 1 14.25 -166.96 -114.563 - 9 78.8226 972 3 1 14.45 -166.863 -114.549 - 9 55.2184 973 3 1 14.6501 -166.854 -114.537 - 9 111.759 974 3 1 14.85 -166.852 -114.586 - 9 213.081 69 3 0 14.9937 -166.28 -115.85 - 9 316.785 218 2 0 -1.82257 -136.493 -145.85 - 9 258.686 897 1 1 -0.478573 -138.95 -174.45 - 9 138.236 205 1 0 -0.511465 -139.083 -175.85 - 9 113.263 894 0 1 -1.19262 -141.898 -204.45 - 9 154.266 190 0 0 -1.21184 -142.07 -205.85 - 9 10.7234 893 4 1 -1.44999 -134.68 -84.6058 - 9 345.157 895 4 1 -0.970998 -134.564 -84.45 - 9 285.586 227 4 0 -0.960915 -134.561 -85.85 - 9 316.403 896 3 1 -0.796597 -134.564 -114.45 - 9 142.99 227 3 0 -0.797175 -134.565 -115.85 - 9 111.079 896 2 1 -0.823218 -134.632 -144.45 - 9 120.157 227 2 0 -0.819124 -134.651 -145.85 - 9 124.547 896 1 1 -0.719333 -135.027 -174.45 - 9 121.758 225 1 0 -0.707882 -135.047 -175.85 - 9 117.378 897 0 1 -0.459569 -135.457 -204.45 - 9 237.864 223 0 0 -0.447608 -135.47 -205.85 - 9 14.4889 719 9 1 -36.05 -93.1248 65.4816 - 9 140.144 894 3 1 -1.18262 -134.886 -114.45 - 9 120.595 226 3 0 -1.19353 -134.905 -115.85 - 9 114.232 893 2 1 -1.35888 -135.255 -144.45 - 9 98.1172 224 2 0 -1.384 -135.266 -145.85 - 9 215.023 890 1 1 -1.8884 -135.435 -174.45 - 9 291.012 223 1 0 -1.91244 -135.44 -175.85 - 9 123.641 888 0 1 -2.37309 -135.507 -204.45 - 9 114.003 228 8 0 -2.10364 -134.38 34.15 +Number of tracker hits in this event: 77 + 9 149.723 486 10 1 -82.6835 73.3663 95.55 + 9 98.3235 1266 10 0 -82.6839 73.3672 94.15 + 9 121.473 486 9 1 -82.6986 73.3854 65.55 + 9 164.433 1266 9 0 -82.7006 73.3856 64.15 + 9 239.774 486 8 1 -82.736 73.3964 35.55 + 9 106.86 1266 8 0 -82.7352 73.3975 34.15 + 9 118.986 486 7 1 -82.6974 73.4125 5.55 + 9 186.186 1266 7 0 -82.6972 73.4126 4.15 + 9 221.942 486 6 1 -82.6982 73.4167 -24.45 + 9 111.602 1266 6 0 -82.6979 73.416 -25.85 + 9 111.767 486 5 1 -82.6897 73.3987 -54.45 + 9 186.097 1266 5 0 -82.6902 73.3973 -55.85 + 9 109.722 486 4 1 -82.6998 73.379 -84.45 + 9 117.77 1266 4 0 -82.6993 73.3757 -85.85 + 9 127.106 486 3 1 -82.6787 73.2989 -114.45 + 9 209.314 1266 3 0 -82.6761 73.2949 -115.85 + 9 438.987 487 2 1 -82.6211 73.2128 -144.45 + 9 120.653 1265 2 0 -82.6156 73.2086 -145.85 + 9 482.272 487 1 1 -82.503 73.1203 -174.45 + 9 127.831 1265 1 0 -82.4956 73.1157 -175.85 + 9 108.972 488 0 1 -82.3555 73.0208 -204.45 + 9 130.226 1264 0 0 -82.3477 73.0141 -205.85 + 9 121.175 488 1 1 -82.4498 73.3623 -174.487 + 9 29.5895 1091 7 0 87.176 38.276 3.75 + 9 161.214 1090 7 0 87.2034 38.25 3.79029 + 9 31.6607 864 7 0 105.879 -7.1624 3.75 + 9 260.158 932 2 0 -82.1798 6.65 -146.21 + 9 26.4923 931 2 0 -82.192 6.45 -146.082 + 9 96.1439 7 0 0 -8.29365 -178.666 -205.85 + 9 41.3184 6 0 0 -8.21361 -178.75 -205.867 + 9 143.915 1265 6 0 -82.684 73.1825 -25.85 + 9 30.8892 1264 6 0 -82.6786 73.0499 -26.1779 + 9 65.8739 1039 6 0 -86.1787 27.9654 -26.2499 + 9 147.091 1038 6 0 -86.2827 27.85 -26.0997 + 9 163.059 463 6 1 -87.289 27.3496 -24.85 + 9 89.759 462 6 1 -87.45 27.1087 -24.6072 + 9 231.02 1268 2 0 -82.4103 73.7695 -145.85 + 9 146.585 501 1 1 -79.7734 75.9855 -174.45 + 9 152.707 1283 1 0 -79.5765 76.6732 -175.85 + 9 8.39675 1284 1 0 -79.5368 76.8501 -176.219 + 9 92.2326 514 0 1 -77.1701 89.5901 -204.45 + 9 65.8967 513 0 1 -77.25 89.833 -204.719 + 9 55.8712 1353 0 0 -77.5336 90.8169 -205.85 + 9 85.8755 1354 0 0 -77.576 90.95 -205.997 + 9 32.3506 1355 0 0 -77.6582 91.15 -206.21 + 9 352.56 1508 0 0 -90.4623 121.834 -206.25 + 9 167.322 1509 0 0 -90.5386 121.95 -205.982 + 9 77.5906 446 0 1 -90.923 122.212 -204.85 + 9 151.611 445 0 1 -90.95 122.233 -204.782 + 9 50.0367 447 0 1 -90.7498 122.058 -204.583 + 9 52.8634 448 0 1 -90.55 122.091 -204.621 + 9 60.0509 449 0 1 -90.35 122.134 -204.66 + 9 58.7275 450 0 1 -90.05 122.226 -204.772 + 9 6.11477 451 0 1 -89.8496 122.29 -204.844 + 9 357.439 1511 0 0 -86.83 122.382 -205.85 + 9 117.036 1510 0 0 -85.6093 122.35 -205.996 + 9 109.375 482 0 1 -83.6434 120.255 -204.85 + 9 47.7449 483 0 1 -83.45 120.088 -204.749 + 9 70.3939 484 0 1 -83.2491 120.006 -204.767 + 9 72.5678 1487 0 0 -79.8812 117.712 -205.85 + 9 63.0907 1486 0 0 -79.6723 117.55 -205.91 + 9 73.7629 1485 0 0 -79.5026 117.35 -205.976 + 9 114.867 1484 0 0 -79.3195 117.15 -206.127 + 9 153.53 1483 0 0 -79.2096 116.95 -206.2 + 9 59.359 1219 0 0 -40.5369 63.9678 -206.25 + 9 172.236 1218 0 0 -40.4549 63.85 -206.111 + 9 106.656 700 0 1 -39.9495 63.4631 -204.85 + 9 33.1246 701 0 1 -39.85 63.4514 -204.582 + 9 179.401 488 2 1 -82.45 73.577 -144.839 + 9 132.418 1266 2 0 -82.1579 73.438 -145.85 + 9 138.646 528 1 1 -74.4081 70.1632 -174.45 + 9 114.188 1251 1 0 -74.1911 70.2861 -175.85 + 9 82.4738 555 0 1 -68.9241 72.9408 -204.45 + 9 44.6724 556 0 1 -68.85 72.9147 -204.718 + 9 110.363 1263 0 0 -68.5114 72.7538 -205.85 + 9 136.043 1674 4 0 -70.8679 155.047 -86.2497 + 9 262.921 774 2 1 -25.1445 79.4215 -144.85 Number of digits in this event: 37 Using G4ParticleGun... -Particle energy: 3.21506 LIN +Particle energy: 2.83662 LIN Particle: e- Event: 10 -Number of tracker hits in this event: 168 - 10 107.554 1218 11 1 63.725 -43.6344 125.55 - 10 109.878 682 11 0 63.7259 -43.6335 124.15 - 10 114.155 1218 10 1 63.7541 -43.6238 95.55 - 10 137.903 682 10 0 63.7558 -43.6214 94.15 - 10 156.78 1218 9 1 63.7842 -43.5701 65.55 - 10 480.124 682 9 0 63.7874 -43.5661 64.15 - 10 125.092 1219 8 1 63.8506 -43.4908 35.55 - 10 271.219 682 8 0 63.8512 -43.4867 34.15 - 10 353.179 1219 7 1 63.8617 -43.4066 5.55 - 10 317.669 683 7 0 63.8598 -43.4023 4.15 - 10 145.457 1218 6 1 63.8245 -43.3168 -24.45 - 10 93.2854 683 6 0 63.8199 -43.3153 -25.85 - 10 228.053 1218 5 1 63.7236 -43.2863 -54.45 - 10 137.063 683 5 0 63.7185 -43.2863 -55.85 - 10 142.021 1217 4 1 63.6146 -43.2991 -84.45 - 10 138.636 683 4 0 63.6096 -43.2962 -85.85 - 10 116.24 1217 3 1 63.4966 -43.2465 -114.45 - 10 137.907 684 3 0 63.4925 -43.2426 -115.85 - 10 485.805 1216 2 1 63.4149 -43.1553 -144.45 - 10 364.328 684 2 0 63.4235 -43.1542 -145.85 - 10 124.416 1217 1 1 63.5821 -43.1618 -174.45 - 10 467.649 684 1 0 63.5793 -43.1583 -175.85 - 10 109.106 1217 0 1 63.5397 -43.0763 -204.45 - 10 91.412 684 0 0 63.5521 -43.0804 -205.85 - 10 265.913 1215 1 1 63.1187 -43.209 -174.45 - 10 611.524 1214 0 1 62.8985 -43.5953 -204.45 - 10 136.478 682 0 0 62.9796 -43.5806 -205.85 - 10 242.622 683 0 0 62.9951 -43.3687 -205.85 - 10 122.458 687 0 0 62.3218 -42.6402 -205.85 - 10 0.186399 686 0 0 62.3109 -42.65 -205.887 - 10 117.172 1216 1 1 63.2838 -43.0989 -174.45 - 10 120.171 1215 0 1 63.0874 -43.0126 -204.45 - 10 105.307 685 0 0 63.0748 -43.0134 -205.85 - 10 55.8734 681 2 0 63.6807 -43.7112 -145.85 - 10 85.5614 680 2 0 63.6849 -43.8501 -145.907 - 10 243.292 1218 2 1 63.7128 -44.1969 -144.85 - 10 127.201 1222 6 1 64.464 -42.9218 -24.45 - 10 177.014 685 6 0 64.4474 -42.9477 -25.85 - 10 134.543 685 5 0 63.8651 -42.8865 -55.8504 - 10 148.792 1225 4 1 65.0893 -42.5462 -84.45 - 10 118.953 687 4 0 65.1391 -42.4733 -85.85 - 10 221.524 1231 3 1 66.2525 -40.7805 -114.45 - 10 152.3 696 3 0 66.8004 -40.8202 -115.85 - 10 64.4466 1290 2 1 78.1651 -40.6892 -144.45 - 10 151.757 1291 2 1 78.25 -40.6712 -144.692 - 10 174.937 697 2 0 78.6722 -40.6024 -145.85 - 10 2.77637 1347 1 1 89.6456 -38.2645 -174.45 - 10 107.545 1348 1 1 89.65 -38.2644 -174.463 - 10 77.019 708 1 0 90.15 -38.2622 -175.948 - 10 130.1 1397 0 1 99.6345 -38.1692 -204.451 - 10 1.17633 1398 0 1 99.75 -38.1862 -204.846 - 10 24.8355 709 0 0 100.055 -38.2451 -205.85 - 10 141.135 708 0 0 100.081 -38.25 -205.936 - 10 6.69676 1230 3 1 66.2458 -40.7875 -114.45 - 10 54.4506 695 3 0 66.609 -40.85 -116.023 - 10 191.286 1263 2 1 72.8113 -43.5952 -144.45 - 10 25.4815 676 2 0 72.2477 -44.7949 -145.85 - 10 119.696 675 2 0 72.2236 -44.85 -145.913 - 10 93.4049 674 2 0 72.1558 -45.05 -146.127 - 10 909.246 1222 1 1 64.5989 -71.1606 -174.45 - 10 156.958 1221 1 1 64.4499 -73.7683 -174.65 - 10 49.9556 649 2 0 115.782 -50.1174 -146.25 - 10 75.0092 650 2 0 115.892 -50.0497 -146.204 - 10 102.595 1219 6 1 63.8921 -43.4537 -24.45 - 10 108.857 682 6 0 63.8593 -43.5347 -25.85 - 10 179.886 1215 5 1 63.1026 -45.1389 -54.45 - 10 133.186 675 5 0 62.9457 -44.8878 -55.85 - 10 46.2627 676 5 0 62.9212 -44.85 -56.0635 - 10 202.207 1197 4 1 59.6358 -39.911 -84.45 - 10 224.06 701 4 0 59.6312 -39.7846 -85.85 - 10 109.359 1198 3 1 59.7806 -37.2232 -114.45 - 10 157.046 715 3 0 59.6651 -37.0364 -115.85 - 10 114.045 1189 2 1 58.0102 -32.8067 -144.45 - 10 38.243 736 2 0 57.7993 -32.6627 -145.85 - 10 141.707 737 2 0 57.7811 -32.65 -145.97 - 10 125.978 1168 1 1 53.8486 -30.0202 -174.45 - 10 114.617 750 1 0 53.5447 -29.8954 -175.85 - 10 65.0176 1132 0 1 46.5113 -26.7829 -204.45 - 10 59.0241 1131 0 1 46.4499 -26.7536 -204.652 - 10 104.531 767 0 0 46.1016 -26.5977 -205.85 - 10 336.715 1193 0 1 58.8036 -31.0223 -204.45 - 10 105.34 1194 0 1 58.85 -30.7447 -204.632 - 10 27.0033 1195 0 1 59.05 -30.7057 -204.781 - 10 82.6264 746 0 0 59.8287 -30.7867 -205.85 - 10 66.2401 745 0 0 60.013 -30.85 -206.01 - 10 62.4836 744 0 0 60.111 -31.05 -206.106 - 10 72.0594 743 0 0 60.1814 -31.25 -206 - 10 243.505 1201 0 1 60.3042 -32.1269 -204.85 - 10 78.1308 1202 0 1 60.4502 -32.3199 -204.674 - 10 70.4659 1203 0 1 60.65 -32.4682 -204.633 - 10 74.9766 1204 0 1 60.8502 -32.6719 -204.602 - 10 148.424 1205 0 1 61.0505 -32.7597 -204.641 - 10 60.865 726 0 0 61.0979 -34.7174 -205.85 - 10 2.18119 727 0 0 61.0203 -34.65 -205.854 - 10 15.5329 303 2 0 108.155 -119.35 -146.238 - 10 1.71983 304 2 0 108.161 -119.35 -146.243 - 10 247.575 1218 8 1 63.8278 -43.6478 35.55 - 10 132.054 1220 7 1 64.1282 -42.806 5.55 - 10 121.24 686 7 0 64.1019 -42.7641 4.15 - 10 123.253 1217 6 1 63.4893 -42.0377 -24.45 - 10 229.044 690 6 0 63.4702 -41.9563 -25.85 - 10 41.4217 1214 5 1 63.05 -40.2651 -54.7356 - 10 164.93 699 5 0 62.9742 -40.1797 -55.85 - 10 121.089 1205 4 1 61.0751 -37.8683 -84.45 - 10 116.324 711 4 0 61.1301 -37.7392 -85.85 - 10 311.787 1212 3 1 62.5958 -34.7279 -114.45 - 10 293.92 727 3 0 62.6526 -34.5983 -115.85 - 10 24.1335 1217 2 1 63.65 -31.5732 -144.749 - 10 107.717 743 2 0 63.5386 -31.3443 -145.85 - 10 119.676 1203 1 1 60.7504 -25.3108 -174.45 - 10 123.034 775 1 0 60.6059 -25.0415 -175.85 - 10 21.3607 1187 0 1 57.4608 -19.401 -204.45 - 10 89.7763 1186 0 1 57.45 -19.3868 -204.545 - 10 131.306 804 0 0 57.301 -19.1784 -205.85 - 10 66.2082 1213 3 1 62.65 -34.7164 -114.635 - 10 89.5611 1243 2 1 68.6756 -29.5407 -144.45 - 10 75.6481 1244 2 1 68.85 -29.4254 -144.65 - 10 20.4596 756 2 0 69.9798 -28.6865 -145.85 - 10 132.009 757 2 0 70.0333 -28.65 -145.906 - 10 16.9018 758 2 0 70.3502 -28.45 -146.226 - 10 160.285 1403 1 1 100.818 -11.2002 -174.45 - 10 24.5026 1404 1 1 100.95 -10.8503 -174.788 - 10 84.7668 852 1 0 101.411 -9.62703 -175.85 - 10 66.7362 853 1 0 101.49 -9.45 -175.998 - 10 54.2709 854 1 0 101.558 -9.24986 -176.141 - 10 61.8565 1440 0 1 108.194 30.8413 -204.451 - 10 122.313 1439 0 1 108.15 30.9277 -204.56 - 10 64.7355 1059 0 0 107.417 31.9187 -205.85 - 10 81.0783 1060 0 0 107.32 32.05 -206.021 - 10 97.3697 1061 0 0 107.16 32.25 -206.188 - 10 15.2652 1211 3 1 62.45 -34.9418 -114.802 - 10 10.5979 723 3 0 62.1421 -35.4271 -115.85 - 10 106.664 722 3 0 62.1291 -35.45 -115.896 - 10 117.79 1183 2 1 56.7348 -53.1071 -144.45 - 10 43.7589 635 2 0 56.6576 -53.0402 -145.85 - 10 86.2578 634 2 0 56.6498 -53.05 -146.076 - 10 78.6235 1174 1 1 55.0168 -54.2799 -174.45 - 10 42.3091 1173 1 1 54.85 -54.1575 -174.719 - 10 42.0173 631 1 0 54.1338 -53.6954 -175.85 - 10 94.2606 632 1 0 54.0605 -53.6499 -175.958 - 10 31.114 690 1 0 41.1285 -41.8537 -176.25 - 10 83.9147 691 1 0 41.1559 -41.85 -176.174 - 10 22.4749 1106 1 1 41.2641 -41.4 -174.849 - 10 119.518 1105 1 1 41.25 -41.3714 -174.765 - 10 91.9426 1104 1 1 41.0497 -41.3271 -174.554 - 10 121.307 1103 1 1 40.8485 -41.5952 -174.45 - 10 116.977 1217 8 1 63.65 -43.7609 35.447 - 10 24.8899 681 8 0 63.6287 -43.8473 34.15 - 10 110.992 680 8 0 63.6281 -43.85 34.1097 - 10 145.49 1215 7 1 63.1712 -45.6203 5.55 - 10 106.866 671 7 0 63.1574 -45.6681 4.15 - 10 117.62 1213 6 1 62.8147 -46.6926 -24.45 - 10 114.39 666 6 0 62.7506 -46.8147 -25.85 - 10 121.811 1206 5 1 61.3862 -49.0548 -54.45 - 10 183.689 654 5 0 61.3136 -49.1723 -55.85 - 10 142.989 1200 4 1 60.1546 -51.4161 -84.45 - 10 124.818 642 4 0 60.0173 -51.5507 -85.8501 - 10 23.3626 1183 3 1 56.6666 -54.2742 -114.45 - 10 79.8727 1182 3 1 56.65 -54.278 -114.537 - 10 101.583 628 3 0 56.3799 -54.337 -115.85 - 10 12.6869 1154 2 1 50.8624 -55.712 -144.45 - 10 116.608 1153 2 1 50.8499 -55.7153 -144.501 - 10 106.508 621 2 0 50.5254 -55.8112 -145.85 - 10 116.577 1116 1 1 43.3924 -57.9722 -174.45 - 10 114.743 609 1 0 43.2783 -58.104 -175.85 - 10 85.6898 1105 0 1 41.0776 -60.407 -204.45 - 10 45.7043 1104 0 1 41.05 -60.4395 -204.718 - 10 117.021 597 0 0 40.9432 -60.5461 -205.85 -Number of digits in this event: 70 +Number of tracker hits in this event: 86 + 10 109.94 1108 11 1 41.7491 44.5733 125.55 + 10 141.076 1122 11 0 41.7507 44.5748 124.15 + 10 140.706 1108 10 1 41.7831 44.615 95.55 + 10 104.527 1122 10 0 41.7837 44.6159 94.15 + 10 124.836 1108 9 1 41.7995 44.6273 65.55 + 10 133.274 1122 9 0 41.7982 44.6259 64.15 + 10 124.895 1108 8 1 41.7787 44.596 35.55 + 10 133.241 1122 8 0 41.7751 44.5945 34.15 + 10 105.712 1108 7 1 41.698 44.5731 5.55 + 10 109.182 1122 7 0 41.6956 44.5718 4.15 + 10 134.661 1107 6 1 41.6462 44.5541 -24.45 + 10 112.261 1122 6 0 41.6429 44.5513 -25.85 + 10 316.281 1107 5 1 41.5774 44.4895 -54.45 + 10 107.383 1122 5 0 41.5773 44.4866 -55.85 + 10 132.397 1107 4 1 41.573 44.4201 -84.45 + 10 128.515 1121 4 0 41.5768 44.4167 -85.85 + 10 447.873 1108 3 1 41.6559 44.3591 -114.45 + 10 118.109 1121 3 0 41.6594 44.36 -115.85 + 10 115.789 1108 2 1 41.7187 44.378 -144.45 + 10 111.659 1121 2 0 41.721 44.3814 -145.85 + 10 135.81 1108 1 1 41.776 44.4506 -174.45 + 10 186.239 1122 1 0 41.7795 44.4528 -175.85 + 10 111.365 1109 0 1 41.8567 44.4905 -204.45 + 10 316.685 1122 0 0 41.86 44.4908 -205.85 + 10 58.8521 888 4 1 -2.34548 3.94484 -84.85 + 10 67.4178 920 1 0 85.9815 4.05 -176.004 + 10 31.5754 1108 5 1 41.6501 44.6108 -54.7469 + 10 90.6704 1124 5 0 41.9024 44.8808 -55.85 + 10 252.946 1106 4 1 41.45 44.5289 -84.5173 + 10 25.917 1114 4 0 41.4524 42.9474 -85.8503 + 10 64.6285 1113 4 0 41.4536 42.85 -85.9201 + 10 68.6281 1112 4 0 41.4499 42.65 -86.0691 + 10 10.3953 1111 4 0 41.4459 42.45 -86.2221 + 10 6.78883 1109 3 1 41.8524 6.50784 -114.45 + 10 14.5557 1107 3 1 41.6499 6.09022 -114.8 + 10 204.737 924 3 0 41.0599 4.93787 -115.85 + 10 95.2 923 3 0 41.0167 4.85 -115.928 + 10 47.9635 922 3 0 40.9249 4.65 -116.127 + 10 3.92544 1013 2 1 22.6617 -22.4752 -144.45 + 10 111.95 1012 2 1 22.65 -22.4806 -144.464 + 10 187.52 1011 2 1 22.4499 -22.5653 -144.683 + 10 183.76 784 2 0 21.3325 -23.056 -145.85 + 10 126.992 836 1 1 -12.8197 -36.3254 -174.45 + 10 64.8758 837 1 1 -12.65 -36.5285 -174.707 + 10 86.4299 713 1 0 -12.0273 -37.3099 -175.85 + 10 84.6584 712 1 0 -11.917 -37.45 -176.09 + 10 87.9203 1120 4 0 41.2143 44.25 -85.907 + 10 98.8021 1086 3 1 37.4058 34.6484 -114.45 + 10 49.8253 1085 3 1 37.25 34.481 -114.731 + 10 105.786 1068 3 0 36.6314 33.7918 -115.85 + 10 65.7353 1067 3 0 36.5033 33.65 -116.077 + 10 40.6523 1006 2 1 21.3184 15.1325 -144.45 + 10 113.639 1005 2 1 21.25 15.093 -144.542 + 10 20.4734 1004 2 1 21.05 14.9858 -144.805 + 10 118.937 972 2 0 20.2525 14.564 -145.85 + 10 80.5607 971 2 0 20.0435 14.45 -146.131 + 10 34.8666 1038 2 0 -118.103 27.85 -146.057 + 10 1.58434 834 2 0 -24.4765 -13.25 -145.857 + 10 417.329 1106 2 1 41.4325 44.5709 -144.45 + 10 2.01631 1131 2 0 41.1034 46.4412 -145.85 + 10 79.8646 1132 2 0 41.1021 46.45 -145.858 + 10 76.3241 1133 2 0 41.0191 46.65 -146.036 + 10 4.08187 1134 2 0 40.8954 46.85 -146.24 + 10 28.4103 1410 2 0 22.8238 102.263 -146.25 + 10 77.7811 1411 2 0 22.8143 102.35 -146.177 + 10 17.6626 1412 2 0 22.7524 102.55 -145.914 + 10 18.8099 1452 3 0 44.456 110.726 -116.25 + 10 121.042 1453 3 0 44.52 110.75 -116.176 + 10 123.801 1126 3 1 45.4174 111.982 -114.85 + 10 223.16 1127 3 1 45.45 112.04 -114.797 + 10 88.2464 1125 3 1 45.25 112.268 -114.472 + 10 91.6412 1124 3 1 45.0499 112.32 -114.514 + 10 134.429 1123 3 1 44.85 112.26 -114.472 + 10 163.686 1122 3 1 44.6496 112.149 -114.685 + 10 69.9575 1121 3 1 44.4499 112.113 -114.739 + 10 56.1534 1734 7 1 167.072 -109.883 5.15 + 10 34.1822 1105 2 1 41.25 44.2856 -144.732 + 10 65.5689 1118 2 0 40.8682 43.7469 -145.85 + 10 56.0696 1117 2 0 40.8129 43.6499 -146.04 + 10 209.861 987 2 0 30.7026 17.5872 -146.25 + 10 314.051 1050 2 1 30.2333 17.2362 -144.85 + 10 57.6579 1049 2 1 30.0163 17.1216 -144.45 + 10 59.4303 978 2 0 30.4431 15.8142 -145.85 + 10 68.5224 977 2 0 30.4647 15.65 -145.967 + 10 73.7869 976 2 0 30.4379 15.4498 -146.072 + 10 3.79081 975 2 0 30.3806 15.25 -146.229 +Number of digits in this event: 29 Using G4ParticleGun... -Particle energy: 3.66222 LIN +Particle energy: 2.11127 LIN Particle: e- Event: 11 -Number of tracker hits in this event: 61 - 11 43.1009 1398 10 0 60.7999 99.8904 93.9429 - 11 173.198 1203 9 1 60.8008 99.8851 65.55 - 11 113.339 1398 9 0 60.8011 99.8846 64.15 - 11 105.271 1203 8 1 60.7964 99.8751 35.55 - 11 130.419 1398 8 0 60.7975 99.8768 34.15 - 11 247.921 1203 7 1 60.8088 99.951 5.55 - 11 161.209 1399 7 0 60.8085 99.9742 4.15 - 11 392.363 1203 6 1 60.7875 100.46 -24.45 - 11 213.377 1401 6 0 60.7794 100.488 -25.85 - 11 120.78 1202 5 1 60.6295 101.076 -54.45 - 11 131.786 1404 5 0 60.6171 101.093 -55.85 - 11 248.433 1201 4 1 60.3914 101.474 -84.45 - 11 175.85 1406 4 0 60.3794 101.504 -85.85 - 11 133.901 1200 3 1 60.1606 102.115 -114.45 - 11 94.8186 1409 3 0 60.1445 102.143 -115.85 - 11 31.9458 1410 3 0 60.1408 102.15 -116.171 - 11 137.07 1198 2 1 59.8169 102.693 -144.45 - 11 139.215 1412 2 0 59.8075 102.715 -145.85 - 11 105.835 1197 1 1 59.6201 103.177 -174.45 - 11 157.719 1415 1 0 59.6122 103.194 -175.85 - 11 119.144 1196 0 1 59.3779 103.527 -204.45 - 11 101.686 1416 0 0 59.3704 103.538 -205.85 - 11 20.8546 1710 0 0 64.3413 162.283 -206.25 - 11 121.088 1711 0 0 64.3618 162.35 -206.231 - 11 14.1578 1712 0 0 64.352 162.55 -206.223 - 11 129.231 1071 2 1 34.4371 102.022 -144.85 - 11 126.304 1200 4 1 60.25 101.522 -84.5772 - 11 31.0017 1202 6 1 60.6499 100.9 -24.779 - 11 83.9578 1409 6 0 60.0408 101.963 -25.85 - 11 149.763 1410 6 0 59.9265 102.15 -26.0469 - 11 3.57103 1411 6 0 59.7954 102.35 -26.2409 - 11 195.349 1497 6 0 45.9226 119.616 -26.2495 - 11 81.4554 1496 6 0 45.9533 119.55 -26.0977 - 11 184.174 1495 6 0 46.0717 119.349 -26.0241 - 11 77.2973 635 6 0 81.0831 -52.9156 -26.25 - 11 47.28 634 6 0 81.0826 -53.05 -26.2119 - 11 104.842 1123 5 1 44.7764 131.553 -54.4501 - 11 169.919 1124 5 1 44.85 131.27 -54.5812 - 11 259.65 1204 3 1 60.9223 99.7482 -114.45 - 11 138.611 1398 3 0 60.9351 99.751 -115.85 - 11 109.253 1205 2 1 61.149 99.7376 -144.45 - 11 226.917 1397 2 0 61.1596 99.7313 -145.85 - 11 138.316 1207 1 1 61.4878 99.6541 -174.45 - 11 252.886 1397 1 0 61.5251 99.685 -175.85 - 11 200.573 1211 0 1 62.2726 100.523 -204.45 - 11 120.198 1402 0 0 62.2718 100.625 -205.85 - 11 34.5675 952 0 1 10.4524 48.388 -204.45 - 11 99.5284 1404 0 0 62.9783 101.051 -205.85 - 11 143.663 1397 3 0 60.924 99.7473 -115.85 - 11 139.46 1204 2 1 60.9432 99.7397 -144.45 - 11 132.296 1204 1 1 60.9643 99.7502 -174.45 - 11 148.561 1205 0 1 61.0569 99.6958 -204.45 - 11 136.714 1397 0 0 61.0605 99.6993 -205.85 - 11 124.392 1442 9 0 84.2539 108.638 63.75 - 11 60.6981 1643 0 0 104.671 148.75 -206.077 - 11 131.002 1427 0 1 105.649 147.936 -204.85 - 11 19.8864 1633 0 0 105.705 146.916 -205.85 - 11 8.04962 1432 0 1 106.741 148.027 -204.85 - 11 16.7788 1433 0 1 106.75 148.036 -204.845 - 11 92.205 1639 0 0 107.734 148.093 -205.85 - 11 163.607 1398 1 0 60.9659 99.7501 -176.061 -Number of digits in this event: 39 +Number of tracker hits in this event: 100 + 11 125.685 1485 9 1 117.258 -65.9339 65.55 + 11 112.26 570 9 0 117.255 -65.9352 64.15 + 11 211.785 1485 8 1 117.179 -65.9539 35.55 + 11 134.074 570 8 0 117.172 -65.9485 34.15 + 11 334.073 1484 7 1 117.034 -65.8343 5.55 + 11 99.9324 571 7 0 117.027 -65.8299 4.15 + 11 124.605 1483 6 1 116.863 -65.7313 -24.45 + 11 115.197 571 6 0 116.865 -65.7242 -25.85 + 11 113.279 1483 5 1 116.883 -65.6012 -54.45 + 11 113.119 572 5 0 116.883 -65.6079 -55.85 + 11 127.804 1483 4 1 116.932 -65.7597 -84.45 + 11 112.869 571 4 0 116.937 -65.7684 -85.85 + 11 126.986 1484 3 1 117.055 -65.9498 -114.45 + 11 106.637 570 3 0 117.06 -65.9586 -115.85 + 11 119.446 1485 2 1 117.161 -66.1161 -144.45 + 11 214.821 569 2 0 117.163 -66.1292 -145.85 + 11 96.8645 1485 1 1 117.17 -66.4441 -174.45 + 11 173.489 567 1 0 117.166 -66.4623 -175.85 + 11 121.843 1484 0 1 117.06 -66.8518 -204.45 + 11 113.586 565 0 0 117.048 -66.872 -205.85 + 11 143.585 1484 4 1 116.952 -65.727 -84.45 + 11 265.21 570 4 0 117.587 -65.9035 -85.8505 + 11 193.528 569 4 0 117.334 -66.0509 -86.2419 + 11 225.447 568 4 0 117.019 -66.25 -86.0164 + 11 102.603 1483 7 1 116.95 -65.7535 5.40396 + 11 410.429 1481 3 1 116.363 -65.3081 -114.45 + 11 422.032 1480 3 1 116.35 -65.2883 -114.697 + 11 128.309 574 3 0 116.282 -65.2004 -115.85 + 11 154.723 1474 2 1 114.952 -63.3592 -144.45 + 11 175.019 1473 2 1 114.95 -63.3634 -144.477 + 11 110.727 582 2 0 114.839 -63.5879 -145.85 + 11 167.039 1459 1 1 112.082 -67.6828 -174.45 + 11 221.29 560 1 0 111.91 -67.9433 -175.85 + 11 108.939 1439 0 1 108.019 -72.6191 -204.45 + 11 52.8282 535 0 0 107.847 -72.9951 -205.85 + 11 59.1724 534 0 0 107.83 -73.05 -206.056 + 11 24.5527 597 2 0 116.161 -60.5879 -145.85 + 11 147.628 1486 2 1 117.526 -58.602 -144.85 + 11 254.732 1487 2 1 117.55 -58.5791 -144.824 + 11 195.968 572 3 0 116.295 -65.5224 -115.85 + 11 12.582 1498 2 1 119.936 -64.8433 -144.45 + 11 135.335 1499 2 1 119.95 -64.8734 -144.488 + 11 279.789 570 2 0 120.384 -66.0355 -145.85 + 11 212.329 568 2 0 120.452 -66.25 -146.089 + 11 16.3065 1563 1 1 132.922 -95.7859 -174.45 + 11 125.285 1564 1 1 132.95 -95.8618 -174.486 + 11 150.4 1565 1 1 133.15 -96.2677 -174.701 + 11 53.4093 410 1 0 134.522 -97.9924 -175.85 + 11 128.335 409 1 0 134.66 -98.15 -175.964 + 11 62.657 408 1 0 134.832 -98.35 -176.125 + 11 55.3766 1715 0 1 163.197 -133.572 -204.45 + 11 102.889 1716 0 1 163.35 -133.67 -204.568 + 11 89.491 1717 0 1 163.55 -133.809 -204.751 + 11 31.6791 227 0 0 165.257 -134.706 -205.85 + 11 150.556 226 0 0 165.342 -134.75 -205.908 + 11 10.469 225 0 0 165.831 -134.95 -206.221 + 11 187.389 1718 0 1 163.75 -133.953 -204.825 + 11 104.542 573 3 0 115.922 -65.2941 -115.85 + 11 106.168 1433 2 1 106.86 -65.5499 -144.45 + 11 28.6279 1434 2 1 106.95 -65.6318 -144.761 + 11 142.546 1500 1 1 120.16 -68.5751 -174.45 + 11 57.6108 552 1 0 120.473 -69.5444 -175.85 + 11 68.0892 551 1 0 120.501 -69.6501 -175.994 + 11 1.99848 575 3 0 116.137 -64.8539 -115.85 + 11 241.067 576 3 0 116.135 -64.85 -115.86 + 11 3.88948 708 3 0 132.572 -38.2601 -116.25 + 11 154.549 709 3 0 132.573 -38.2499 -116.238 + 11 459.34 1559 3 1 132.141 -38.3656 -114.85 + 11 59.6537 1560 3 1 132.15 -38.4176 -114.755 + 11 264.44 1483 3 1 116.833 -66.4712 -114.45 + 11 125.901 567 3 0 116.807 -66.4687 -115.85 + 11 139.885 1481 2 1 116.389 -66.311 -144.45 + 11 116.969 1477 1 1 115.654 -65.7475 -174.45 + 11 142.741 572 1 0 115.648 -65.6015 -175.85 + 11 129.932 1476 0 1 115.431 -62.6562 -204.45 + 11 132.132 587 0 0 115.45 -62.5202 -205.85 + 11 105.319 568 3 0 116.859 -66.4371 -115.85 + 11 145.112 1489 1 1 118.047 -65.0221 -174.45 + 11 175.426 575 1 0 118.056 -65.0186 -175.85 + 11 252.905 1491 0 1 118.509 -64.7692 -204.45 + 11 107.206 576 0 0 118.566 -64.7828 -205.85 + 11 201.865 1490 1 1 118.15 -65.0447 -174.534 + 11 348.094 1491 1 1 118.35 -65.2043 -174.582 + 11 12.2916 1497 1 1 119.736 -66.1567 -174.45 + 11 110.238 1498 1 1 119.75 -66.1797 -174.476 + 11 44.7723 1499 1 1 119.95 -66.4117 -174.756 + 11 60.5673 562 1 0 120.699 -67.5038 -175.85 + 11 73.943 561 1 0 120.8 -67.65 -175.981 + 11 85.6745 1588 0 1 137.906 -89.7329 -204.45 + 11 39.3832 1589 0 1 137.95 -89.9444 -204.675 + 11 79.0453 445 0 0 138.39 -90.9624 -205.85 + 11 78.8503 444 0 0 138.472 -91.1501 -206.057 + 11 53.2226 432 0 0 164.768 -93.6932 -206.249 + 11 93.2994 433 0 0 164.885 -93.55 -206.123 + 11 60.7524 434 0 0 165.036 -93.35 -205.906 + 11 92.8381 435 0 0 165.165 -93.15 -205.881 + 11 148.872 436 0 0 165.372 -92.95 -205.942 + 11 113.668 437 0 0 165.468 -92.75 -205.944 + 11 59.0683 1725 0 1 165.229 -91.3246 -204.85 + 11 103.628 1724 0 1 165.15 -91.2166 -204.706 +Number of digits in this event: 50 Using G4ParticleGun... -Particle energy: 4.3055 LIN +Particle energy: 5.80774 LIN Particle: e- Event: 12 -Number of tracker hits in this event: 236 - 12 127.751 1408 10 1 101.78 42.7336 95.55 - 12 108.58 1113 10 0 101.78 42.7342 94.15 - 12 137.371 1408 9 1 101.774 42.7453 65.55 - 12 130.044 1113 9 0 101.774 42.7477 64.15 - 12 393.818 1408 8 1 101.785 42.7992 35.55 - 12 356.319 1113 8 0 101.785 42.8015 34.15 - 12 174.052 1408 7 1 101.793 42.8669 5.55 - 12 97.0465 1114 7 0 101.8 42.8731 4.15 - 12 372.522 1408 6 1 101.944 43.0074 -24.45 - 12 237.101 1114 6 0 101.951 43.0241 -25.85 - 12 459.518 1409 5 1 102.091 43.3619 -54.45 - 12 368.734 1116 5 0 102.104 43.3674 -55.85 - 12 138.093 1411 4 1 102.401 43.4867 -84.45 - 12 359.861 1117 4 0 102.415 43.493 -85.85 - 12 103.906 1412 3 1 102.704 43.6548 -114.45 - 12 306.902 1118 3 0 102.722 43.6589 -115.85 - 12 140.184 1414 2 1 103.117 43.7338 -144.45 - 12 210.854 1118 2 0 103.132 43.7471 -145.85 - 12 119.539 1416 1 1 103.407 44.0184 -174.45 - 12 109.895 1119 1 0 103.435 44.0404 -175.85 - 12 130.814 1419 0 1 104.02 44.4828 -204.45 - 12 117.032 1122 0 0 104.051 44.5107 -205.85 - 12 77.8385 1117 3 0 102.71 43.65 -116.007 - 12 236.595 1410 4 1 102.231 43.6059 -84.45 - 12 135.293 1410 3 1 102.305 43.7784 -114.45 - 12 104.928 1410 2 1 102.299 43.3944 -144.45 - 12 115.422 1116 2 0 102.301 43.3792 -145.85 - 12 107.7 1411 1 1 102.355 43.0902 -174.45 - 12 234.141 1115 1 0 102.353 43.0754 -175.85 - 12 149.679 1410 0 1 102.295 42.7909 -204.45 - 12 124.44 1113 0 0 102.293 42.7649 -205.85 - 12 38.9365 1116 4 0 102.209 43.45 -86.1633 - 12 103.081 1411 3 1 102.524 29.9619 -114.45 - 12 99.8427 1052 3 0 101.605 30.6016 -115.851 - 12 134.596 1053 3 0 101.523 30.65 -115.965 - 12 89.3649 826 3 0 -52.01 -14.7291 -116.25 - 12 96.6821 825 3 0 -52.1484 -14.85 -116.027 - 12 127.763 637 3 1 -52.5038 -15.6952 -114.85 - 12 181.29 757 4 0 14.2518 -28.5184 -86.25 - 12 63.6376 756 4 0 14.6077 -28.65 -86.017 - 12 65.0686 755 4 0 14.6233 -28.85 -85.9127 - 12 93.8914 754 4 0 14.5253 -29.05 -86.015 - 12 348.49 753 4 0 14.5138 -29.25 -86.1379 - 12 60.7207 970 4 1 14.0619 -29.5681 -84.85 - 12 101.633 1110 4 0 102.348 42.07 -85.85 - 12 12.8352 1109 4 0 102.369 42.05 -86.2334 - 12 112.169 1420 3 1 104.27 40.2923 -114.45 - 12 124.495 1101 3 0 104.307 40.2977 -115.85 - 12 145.586 1424 2 1 105.074 39.8879 -144.45 - 12 35.0299 1100 2 0 105.053 40.216 -145.85 - 12 100.442 1101 2 0 105.053 40.25 -145.997 - 12 115.473 1428 1 1 105.895 47.7205 -174.45 - 12 112.667 1139 1 0 105.857 47.9193 -175.85 - 12 104.727 1424 0 1 105.025 52.2174 -204.45 - 12 200.862 1161 0 0 105.098 52.3179 -205.85 - 12 98.4781 1119 5 0 102.027 43.9298 -55.8501 - 12 146.512 1120 5 0 102.047 44.0504 -56.0893 - 12 127.617 1451 4 1 110.419 72.7084 -84.4501 - 12 257.876 1262 4 0 110.584 72.6291 -85.85 - 12 148.741 1263 4 0 104.026 72.7255 -86.2496 - 12 27.3286 1261 4 0 103.68 72.45 -85.8774 - 12 238.623 1421 4 1 104.371 67.8841 -84.85 - 12 51.0019 1420 4 1 104.35 67.7877 -84.8038 - 12 122.065 1221 4 0 104.511 64.3163 -85.85 - 12 27.8177 1220 4 0 104.57 64.25 -85.8673 - 12 126.347 1410 5 1 102.15 43.6963 -54.5384 - 12 73.1278 1411 5 1 102.35 43.9624 -54.7392 - 12 206.103 1125 5 0 103.849 45.2338 -55.8501 - 12 291.846 1126 5 0 103.868 45.25 -55.8648 - 12 154.559 1424 5 1 104.974 44.9459 -54.85 - 12 77.0685 1127 5 0 106.739 45.45 -56.0765 - 12 64.135 1394 7 1 98.9886 42.5541 5.55 - 12 67.3087 1393 7 1 98.9497 42.5613 5.37241 - 12 143.452 1112 7 0 98.6892 42.6294 4.15 - 12 32.9438 1362 6 1 92.5854 44.326 -24.45 - 12 80.3287 1361 6 1 92.55 44.3425 -24.5791 - 12 112.045 1122 6 0 92.215 44.4959 -25.85 - 12 4.36879 1320 5 1 84.0558 46.9469 -54.45 - 12 144.159 1319 5 1 84.05 46.9496 -54.4685 - 12 316.907 1135 5 0 83.6311 47.1476 -55.85 - 12 8.31022 1279 4 1 75.8685 52.0228 -84.4501 - 12 124.913 1278 4 1 75.8499 52.0456 -84.4891 - 12 132.034 1163 4 0 75.1904 52.7239 -85.85 - 12 76.1348 1164 4 0 75.0762 52.85 -86.0888 - 12 208.491 1207 3 1 61.5846 69.7673 -114.45 - 12 25.5475 1257 3 0 61.3388 71.5659 -115.85 - 12 71.3789 1258 3 0 61.3276 71.65 -115.917 - 12 70.6362 1259 3 0 61.3032 71.85 -116.075 - 12 6.95222 1260 3 0 61.2899 72.0502 -116.227 - 12 157.123 1201 2 1 60.4227 107.414 -144.45 - 12 78.4051 1202 2 1 60.45 107.38 -144.589 - 12 80.1812 1436 2 0 60.9532 107.375 -145.85 - 12 30.8973 1435 2 0 61.1098 107.35 -146.134 - 12 24.5114 1216 2 0 39.5058 63.3066 -146.25 - 12 80.6776 1215 2 0 39.4532 63.25 -146.209 - 12 89.0863 1214 2 0 39.2164 63.05 -146.017 - 12 71.7472 1086 2 1 37.3815 61.2954 -144.85 - 12 91.5416 1085 2 1 37.25 61.1139 -144.737 - 12 15.9194 1084 2 1 37.05 60.8583 -144.509 - 12 84.6288 1344 3 0 32.9024 88.8935 -116.249 - 12 82.8745 1345 3 0 32.8941 89.05 -116.158 - 12 234.67 1346 3 0 32.9554 89.2501 -116.028 - 12 220.382 1347 3 0 33.1298 89.45 -116.035 - 12 63.5054 959 6 1 12.05 -52.0239 -24.8409 - 12 154.194 1200 2 1 60.25 107.303 -144.628 - 12 291.747 1227 3 1 65.5693 56.8775 -114.45 - 12 220.514 1185 3 0 65.4111 57.1116 -115.85 - 12 153.796 1210 2 1 62.0828 58.7743 -144.45 - 12 165.132 1193 2 0 62.6057 58.7507 -145.85 - 12 208.996 1270 1 1 74.1581 59.6896 -174.45 - 12 108.442 1194 1 0 74.3222 59.0492 -175.85 - 12 115.628 1089 1 0 80.7414 37.9975 -176.25 - 12 77.3435 1305 1 1 81.174 37.8208 -174.85 - 12 128.188 1306 1 1 81.25 37.7991 -174.689 - 12 29.6694 914 2 0 89.3481 2.94465 -146.25 - 12 75.6857 913 2 0 89.3522 2.84967 -146.198 - 12 67.9091 912 2 0 89.3153 2.65 -146.16 - 12 205.901 911 2 0 89.1943 2.45 -146.103 - 12 342.292 910 2 0 88.8441 2.24962 -146.083 - 12 241.504 1335 2 1 87.2149 2.20805 -144.85 - 12 58.3928 1334 2 1 87.0499 2.38232 -144.505 - 12 136.946 909 2 0 87.2018 2.05 -146.015 - 12 172.702 1650 2 0 -47.557 150.195 -146.25 - 12 138.434 1651 2 0 -47.8179 150.35 -146.152 - 12 10.618 932 5 0 -14.6359 6.65 -56.1476 - 12 52.519 1269 1 1 74.05 59.5294 -174.723 - 12 14.6987 1187 1 0 72.0811 57.4839 -175.85 - 12 116.486 1186 1 0 72.0401 57.45 -175.892 - 12 95.6104 1185 1 0 71.867 57.25 -176.113 - 12 172.647 1226 3 1 65.4498 56.894 -114.643 - 12 133.77 1184 3 0 64.7798 57.0045 -115.85 - 12 126.493 1139 2 1 47.9609 60.6978 -144.45 - 12 18.2565 1138 2 1 47.85 60.6733 -144.771 - 12 250.917 1202 2 0 47.4923 60.6218 -145.85 - 12 118.867 1094 1 1 38.9615 59.1748 -174.45 - 12 175.325 1196 1 0 38.6964 59.2699 -175.85 - 12 47.324 1125 0 1 45.1066 53.2302 -204.45 - 12 73.721 1126 0 1 45.25 53.1308 -204.508 - 12 67.7182 1127 0 1 45.451 53.0002 -204.594 - 12 58.2849 1128 0 1 45.65 52.9847 -204.674 - 12 61.7465 1129 0 1 45.8501 53.0295 -204.737 - 12 155.873 1166 0 0 47.038 53.2645 -205.85 - 12 104.575 1114 8 0 101.777 42.85 34.0992 - 12 159.026 1409 7 1 101.95 44.1128 5.50891 - 12 110.235 1120 7 0 102.097 44.2229 4.15 - 12 19.4131 1121 7 0 102.143 44.25 3.77068 - 12 82.0072 1425 6 1 105.252 46.6149 -24.45 - 12 19.4322 1426 6 1 105.35 46.6174 -24.7607 - 12 122.422 1132 6 0 105.689 46.6284 -25.85 - 12 132.367 1473 5 1 114.83 47.0612 -54.45 - 12 250.955 1485 4 1 117.33 49.7129 -84.45 - 12 160.38 1486 4 1 117.35 49.7136 -84.4946 - 12 3.47283 1487 4 1 117.55 49.711 -84.8386 - 12 133.275 1148 4 0 118.226 49.692 -85.8501 - 12 166.378 1594 3 1 139.147 48.2139 -114.45 - 12 13.7895 1593 3 1 138.95 48.6143 -114.809 - 12 38.7093 1147 3 0 138.419 49.5457 -115.85 - 12 98.1484 1148 3 0 138.356 49.65 -115.946 - 12 81.9616 1149 3 0 138.183 49.85 -116.104 - 12 5.18141 1150 3 0 138.019 50.05 -116.238 - 12 114.322 596 3 0 30.5577 -60.6765 -116.25 - 12 23.6307 83 3 0 -31.4472 -163.474 -116.25 - 12 271.076 82 3 0 -31.4455 -163.55 -116.218 - 12 84.1296 81 3 0 -31.3989 -163.75 -116.163 - 12 116.09 746 3 1 -30.7429 -163.491 -114.85 - 12 71.572 1111 6 0 101.672 42.3502 -25.85 - 12 43.1195 1110 6 0 101.654 42.25 -26.0814 - 12 33.0535 1388 5 1 97.916 29.9074 -54.45 - 12 96.0887 1389 5 1 97.9502 29.8509 -54.5329 - 12 167.634 1047 5 0 98.3306 29.5436 -55.85 - 12 14.5912 1046 5 0 98.4179 29.45 -56.1939 - 12 108.894 1115 6 0 101.894 43.0547 -25.85 - 12 107.681 1414 5 1 103.045 46.1195 -54.45 - 12 178.23 1130 5 0 103.043 46.0681 -55.8502 - 12 138.405 1405 4 1 101.292 45.532 -84.45 - 12 116.999 1127 4 0 100.927 45.5509 -85.8509 - 12 65.3306 1369 3 1 93.9829 45.1307 -114.45 - 12 44.4753 1368 3 1 93.95 45.0812 -114.652 - 12 47.8864 1123 3 0 93.7035 44.7125 -115.85 - 12 87.4302 1122 3 0 93.6653 44.65 -116.051 - 12 200.828 1033 3 0 173.554 26.7634 -116.25 - 12 116.981 1032 3 0 173.678 26.6498 -116.079 - 12 55.0693 921 1 1 4.45 11.4174 -174.75 - 12 193.269 1408 2 1 101.908 43.0496 -144.45 - 12 178.701 1115 2 0 101.889 43.088 -145.85 - 12 117.436 1407 1 1 101.58 43.6136 -174.45 - 12 49.4822 1117 1 0 101.59 43.6459 -175.85 - 12 49.8789 1118 1 0 101.591 43.65 -176.033 - 12 242.417 1408 0 1 101.791 44.3301 -204.45 - 12 129.817 1121 0 0 101.805 44.3532 -205.85 - 12 26.4586 970 2 0 133.391 14.0925 -146.25 - 12 62.7736 969 2 0 133.419 14.0494 -146.212 - 12 118.696 968 2 0 133.427 13.85 -146.121 - 12 66.2707 967 2 0 133.32 13.65 -146.159 - 12 220.857 1040 2 0 102.456 28.1558 -146.25 - 12 189.966 1114 2 0 101.911 43.0466 -145.85 - 12 114.153 1408 1 1 101.896 43.074 -174.45 - 12 110.693 1115 0 0 101.91 43.172 -205.85 - 12 254.495 1407 5 1 101.64 42.6765 -54.45 - 12 27.4374 1406 5 1 101.55 42.6746 -54.7683 - 12 250.062 1113 5 0 101.188 42.6784 -55.85 - 12 20.0338 1364 4 1 92.9752 44.7103 -84.45 - 12 75.6379 1363 4 1 92.95 44.6981 -84.4777 - 12 53.2497 1362 4 1 92.75 44.5914 -84.7036 - 12 3.67002 1120 4 0 91.8044 44.055 -85.8502 - 12 155.571 1119 4 0 91.7955 44.05 -85.8609 - 12 275.175 1225 3 1 65.25 33.6288 -114.609 - 12 10.9552 1224 3 1 65.05 33.2728 -114.828 - 12 37.4358 1057 3 0 63.8715 31.5725 -115.85 - 12 76.2079 1056 3 0 63.7957 31.45 -115.912 - 12 139.974 1055 3 0 63.7011 31.2495 -116.004 - 12 86.9143 1054 3 0 63.6067 31.0498 -116.099 - 12 10.9418 1143 2 1 48.6667 -5.14211 -144.45 - 12 103.016 1142 2 1 48.65 -5.13993 -144.495 - 12 147.423 875 2 0 48.1787 -5.01283 -145.85 - 12 56.2745 1103 1 1 40.7892 2.12608 -174.45 - 12 102.559 1102 1 1 40.6494 2.13789 -174.603 - 12 69.3452 909 1 0 39.6026 2.03765 -175.85 - 12 93.4403 910 1 0 39.4365 2.05 -176.041 - 12 84.7344 979 0 1 16.0038 12.7492 -204.45 - 12 117.632 978 0 1 15.85 12.5788 -204.651 - 12 54.1306 956 0 0 14.8505 11.3578 -205.85 - 12 90.2924 955 0 0 14.75 11.25 -205.967 - 12 49.3231 954 0 0 14.5944 11.05 -206.151 - 12 130.971 1425 4 1 105.189 42.5546 -84.45 - 12 132.364 1112 4 0 105.362 42.5601 -85.85 - 12 123.425 1442 3 1 108.66 42.7614 -114.45 - 12 143.069 1114 3 0 108.88 42.8582 -115.85 - 12 57.2786 1466 2 1 113.526 43.8802 -144.45 - 12 54.3722 1467 2 1 113.55 43.8955 -144.657 - 12 137.529 1119 2 0 113.708 43.99 -145.85 - 12 143.101 1486 1 1 117.473 45.57 -174.45 - 12 311.13 1128 1 0 117.264 45.7253 -175.85 - 12 171.25 1465 0 1 113.333 49.1391 -204.45 - 12 112.311 1148 0 0 112.943 49.7036 -205.85 - 12 14.0482 1149 0 0 112.838 49.85 -206.209 -Number of digits in this event: 100 -Using G4ParticleGun... -Particle energy: 8.55397 LIN +Number of tracker hits in this event: 127 + 12 112.406 741 11 1 -31.6731 -70.9202 125.55 + 12 102.71 545 11 0 -31.6735 -70.9194 124.15 + 12 206.313 741 10 1 -31.6787 -70.8965 95.55 + 12 124.98 545 10 0 -31.6794 -70.895 94.15 + 12 142.404 741 9 1 -31.6923 -70.8659 65.55 + 12 113.128 545 9 0 -31.6933 -70.865 64.15 + 12 116.238 741 8 1 -31.7107 -70.8491 35.55 + 12 166.478 546 8 0 -31.7103 -70.8479 34.15 + 12 356.852 741 7 1 -31.6979 -70.8164 5.55 + 12 464.187 546 7 0 -31.6981 -70.8146 4.15 + 12 122.46 741 6 1 -31.7035 -70.7783 -24.45 + 12 115.913 546 6 0 -31.7022 -70.7773 -25.85 + 12 168.3 741 5 1 -31.6807 -70.7563 -54.45 + 12 111.251 546 5 0 -31.679 -70.7545 -55.85 + 12 134.49 742 4 1 -31.6368 -70.718 -84.45 + 12 159.464 546 4 0 -31.6334 -70.7158 -85.85 + 12 166.363 742 3 1 -31.5584 -70.6641 -114.45 + 12 114.783 546 3 0 -31.5535 -70.6626 -115.85 + 12 102.119 743 2 1 -31.449 -70.6284 -144.45 + 12 156.949 547 2 0 -31.4432 -70.6282 -145.85 + 12 123.756 743 1 1 -31.318 -70.6423 -174.45 + 12 101.236 547 1 0 -31.3116 -70.6446 -175.85 + 12 156.457 744 0 1 -31.1884 -70.6875 -204.45 + 12 102.35 546 0 0 -31.1848 -70.6886 -205.85 + 12 190.945 262 0 0 -6.79385 -127.55 -206.09 + 12 37.6295 261 0 0 -6.71853 -127.75 -205.86 + 12 57.451 504 0 0 -10.9788 -79.1394 -206.25 + 12 10.5317 238 2 0 17.1767 -132.35 -146.192 + 12 55.8985 738 4 1 -32.3145 -70.5986 -84.45 + 12 68.857 737 4 1 -32.45 -70.5711 -84.5024 + 12 65.3946 736 4 1 -32.65 -70.4796 -84.6497 + 12 70.8036 735 4 1 -32.85 -70.3455 -84.7924 + 12 409.671 734 4 1 -33.0501 -70.1735 -84.8387 + 12 272.05 733 4 1 -33.25 -70.0672 -84.7529 + 12 157.31 732 4 1 -33.45 -69.9751 -84.5907 + 12 313.789 554 4 0 -32.5573 -69.0895 -85.85 + 12 56.1728 747 4 1 -30.5843 -67.7384 -84.85 + 12 2.29494 553 4 0 -28.384 -69.25 -85.8925 + 12 158.899 741 3 1 -31.7112 -70.6923 -114.45 + 12 110.685 547 3 0 -31.7168 -70.6366 -115.85 + 12 136.588 741 2 1 -31.7916 -69.6397 -144.45 + 12 151.806 551 2 0 -31.8684 -69.6966 -145.85 + 12 107.61 733 1 1 -33.3214 -71.0873 -174.45 + 12 76.2043 544 1 0 -33.3331 -71.2217 -175.85 + 12 35.4393 543 1 0 -33.3354 -71.25 -176.124 + 12 108.634 734 0 1 -33.211 -74.3051 -204.45 + 12 103.69 528 0 0 -33.1947 -74.4186 -205.85 + 12 121.467 544 3 0 -31.1743 -71.1353 -115.85 + 12 34.7693 543 3 0 -31.0267 -71.25 -116.214 + 12 82.2284 815 2 1 -16.9454 -84.4562 -144.45 + 12 77.4723 816 2 1 -16.85 -84.4521 -144.583 + 12 32.1047 817 2 1 -16.65 -84.6163 -144.744 + 12 8.62332 473 2 0 -16.5528 -85.4405 -145.85 + 12 103.261 472 2 0 -16.5524 -85.45 -145.862 + 12 46.8176 471 2 0 -16.4772 -85.65 -145.947 + 12 95.2949 819 2 1 -16.1348 -86.681 -144.85 + 12 316.104 820 2 1 -16.05 -86.9015 -144.778 + 12 18.5633 421 3 0 -32.0156 -95.8983 -116.25 + 12 319.917 420 3 0 -32.0408 -95.9504 -116.213 + 12 204.547 419 3 0 -32.1735 -96.15 -116.137 + 12 113.787 738 6 1 -32.3638 -71.2844 -24.45 + 12 109.504 543 6 0 -32.3261 -71.3271 -25.85 + 12 111.631 743 5 1 -31.4234 -72.4518 -54.45 + 12 5.95668 742 5 1 -31.45 -72.4968 -54.823 + 12 65.3699 537 5 0 -31.527 -72.6264 -55.85 + 12 64.5444 536 5 0 -31.5417 -72.65 -56.0393 + 12 107.932 731 4 1 -33.817 -76.0882 -84.45 + 12 28.5928 730 4 1 -33.85 -76.1461 -84.7912 + 12 177.66 518 4 0 -33.9626 -76.3199 -85.8508 + 12 155.16 716 3 1 -36.7928 -81.5551 -114.45 + 12 126.016 715 3 1 -36.85 -81.6266 -114.842 + 12 260.582 491 3 0 -36.9968 -81.8045 -115.85 + 12 31.1949 490 3 0 -37.033 -81.85 -116.118 + 12 140.518 697 2 1 -40.5059 -86.368 -144.45 + 12 96.8783 467 2 0 -40.6056 -86.6038 -145.85 + 12 42.2597 466 2 0 -40.6244 -86.65 -146.119 + 12 134.394 688 1 1 -42.3324 -91.35 -174.451 + 12 198.353 442 1 0 -42.3128 -91.6546 -175.85 + 12 370.49 687 0 1 -42.5391 -97.4271 -204.45 + 12 217.766 412 0 0 -42.5828 -97.6021 -205.85 + 12 132.618 486 0 0 -38.8145 -82.7054 -206.25 + 12 261.035 688 0 1 -42.2684 -98.6733 -204.45 + 12 162.53 405 0 0 -42.3245 -99.0294 -205.85 + 12 15.5175 1517 0 1 123.55 121.697 -204.757 + 12 72.9226 1518 0 1 123.75 121.965 -204.737 + 12 123.946 1519 0 1 123.95 122.166 -204.742 + 12 53.9315 1520 0 1 124.15 122.304 -204.757 + 12 51.3472 1521 0 1 124.35 122.386 -204.779 + 12 135.577 1522 0 1 124.55 122.454 -204.794 + 12 19.4283 1521 0 0 124.772 124.507 -205.851 + 12 459.834 1522 0 0 124.775 124.55 -205.876 + 12 59.4104 1514 0 0 166.834 123.091 -206.25 + 12 91.5072 1515 0 0 166.974 123.15 -206.114 + 12 91.9581 1516 0 0 167.152 123.35 -206.052 + 12 329.975 1517 0 0 167.256 123.55 -206.056 + 12 83.4265 1523 0 0 124.618 124.75 -205.929 + 12 16.8701 689 0 1 -42.2037 -98.6544 -204.45 + 12 1.95693 686 0 1 -42.65 -99.0597 -204.843 + 12 135.347 401 0 0 -43.6371 -99.7868 -205.85 + 12 103.732 400 0 0 -43.8672 -99.95 -206.112 + 12 1.63097 156 0 0 -84.0843 -148.944 -206.25 + 12 51.9775 155 0 0 -84.0873 -148.95 -206.248 + 12 63.4133 154 0 0 -84.1185 -149.15 -206.228 + 12 139.684 422 0 0 -83.9013 -95.7402 -206.25 + 12 56.4558 423 0 0 -84.2246 -95.55 -205.975 + 12 20.7831 473 0 1 -85.4103 -94.4667 -204.85 + 12 139.678 472 0 1 -85.45 -94.4343 -204.813 + 12 178.068 471 0 1 -85.7134 -94.1377 -204.45 + 12 59.532 470 0 1 -85.85 -94.1242 -204.604 + 12 93.6764 469 0 1 -86.0501 -94.1843 -204.712 + 12 172.661 468 0 1 -86.25 -94.3309 -204.775 + 12 59.7687 467 0 1 -86.45 -94.4403 -204.742 + 12 187.472 431 0 0 -86.3526 -93.9136 -205.85 + 12 68.9612 466 0 1 -86.7939 -93.0119 -204.85 + 12 150.567 426 0 0 -87.5299 -94.7793 -205.85 + 12 100.874 427 0 0 -87.7537 -94.7499 -205.986 + 12 212.742 432 0 0 -86.1967 -93.75 -205.912 + 12 177.432 680 0 1 -43.8908 -100.833 -204.85 + 12 193.947 679 0 1 -44.05 -101.223 -204.667 + 12 34.0224 678 0 1 -44.2501 -101.189 -204.506 + 12 150.011 714 3 1 -37.05 -81.7876 -114.786 + 12 0.502458 496 3 0 -38.6075 -80.6512 -115.85 + 12 174.95 497 3 0 -38.6088 -80.65 -115.851 + 12 87.9978 444 1 0 -44.0268 -91.2003 -175.85 + 12 361.65 755 6 1 -28.9878 -70.8107 -24.4501 + 12 40.1985 756 6 1 -28.8453 -70.728 -24.4502 + 12 48.5126 742 10 1 -31.65 -70.8993 95.4122 +Number of digits in this event: 58 +Using G4ParticleGun... +Particle energy: 4.81264 LIN Particle: e- Event: 13 -Number of tracker hits in this event: 40 - 13 118.849 560 9 1 -67.8945 -112.223 65.55 - 13 194.292 339 9 0 -67.8944 -112.223 64.15 - 13 109.515 560 8 1 -67.892 -112.218 35.55 - 13 153.332 339 8 0 -67.8905 -112.217 34.15 - 13 146 560 7 1 -67.8626 -112.198 5.55 - 13 143.562 339 7 0 -67.8617 -112.197 4.15 - 13 106.829 561 6 1 -67.845 -112.179 -24.45 - 13 139.048 339 6 0 -67.8452 -112.178 -25.85 - 13 223.698 561 5 1 -67.8473 -112.161 -54.45 - 13 227.696 339 5 0 -67.8482 -112.16 -55.85 - 13 152.717 560 4 1 -67.8638 -112.144 -84.45 - 13 173.021 340 4 0 -67.865 -112.143 -85.85 - 13 106.185 560 3 1 -67.8847 -112.113 -114.45 - 13 136.148 340 3 0 -67.8871 -112.112 -115.85 - 13 363.433 560 2 1 -67.9449 -112.074 -144.45 - 13 396.924 340 2 0 -67.948 -112.072 -145.85 - 13 385.375 560 1 1 -68.0131 -112.021 -174.45 - 13 279.449 340 1 0 -68.015 -112.018 -175.85 - 13 343.127 559 0 1 -68.0569 -111.966 -204.45 - 13 118.58 340 0 0 -68.059 -111.963 -205.85 - 13 13.0094 1006 0 1 21.25 -80.9018 -204.498 - 13 212.348 561 4 1 -67.85 -112.151 -84.4705 - 13 282.595 339 0 0 -68.107 -112.183 -205.85 - 13 36.7079 598 0 1 -60.4489 -57.3669 -204.85 - 13 95.4454 1093 11 0 -2.68503 38.6697 123.75 - 13 153.139 1094 11 0 -2.7839 38.85 123.9 - 13 66.1079 1095 11 0 -3.10501 39.0502 123.808 - 13 79.8361 1096 11 0 -3.19414 39.25 123.832 - 13 182.005 1097 11 0 -3.32593 39.45 123.946 - 13 135.574 1098 11 0 -3.16588 39.65 123.803 - 13 252.136 597 0 1 -60.45 -57.1347 -204.725 - 13 49.5726 559 1 1 -68.0501 -112.152 -174.521 - 13 115.684 562 1 1 -67.5595 -111.788 -174.45 - 13 139.826 341 1 0 -67.4767 -111.813 -175.85 - 13 129.609 572 0 1 -65.6471 -112.297 -204.45 - 13 86.2716 1730 2 1 166.15 -131.642 -144.567 - 13 55.5972 560 5 1 -67.888 -112.205 -54.4504 - 13 113.66 340 5 0 -67.0522 -112.15 -56.0144 - 13 230.389 475 5 0 -34.7272 -84.8666 -56.2496 - 13 127.938 474 5 0 -34.5672 -85.05 -56.0875 -Number of digits in this event: 28 -Using G4ParticleGun... -Particle energy: 2.22309 LIN +Number of tracker hits in this event: 157 + 13 128.388 823 11 1 -15.3515 -22.7775 125.55 + 13 144.489 786 11 0 -15.3509 -22.7798 124.15 + 13 104.814 823 10 1 -15.3396 -22.817 95.55 + 13 142.809 786 10 0 -15.3399 -22.819 94.15 + 13 619.374 823 9 1 -15.3411 -22.8583 65.55 + 13 437.019 785 9 0 -15.3388 -22.861 64.15 + 13 145.79 823 8 1 -15.302 -22.9132 35.55 + 13 410.822 785 8 0 -15.3 -22.9168 34.15 + 13 121.836 823 7 1 -15.2657 -22.9953 5.55 + 13 366.354 785 7 0 -15.267 -23.0008 4.15 + 13 129.364 823 6 1 -15.3095 -23.1291 -24.45 + 13 347.455 784 6 0 -15.3111 -23.1389 -25.85 + 13 97.7422 823 5 1 -15.3421 -23.3349 -54.45 + 13 236.943 783 5 0 -15.3422 -23.3457 -55.85 + 13 294.531 823 4 1 -15.3309 -23.5457 -84.45 + 13 522.426 782 4 0 -15.328 -23.5551 -85.85 + 13 109.52 823 3 1 -15.2802 -23.742 -114.45 + 13 144.641 781 3 0 -15.2811 -23.7517 -115.85 + 13 120.851 823 2 1 -15.3054 -23.9572 -144.45 + 13 148.602 780 2 0 -15.3096 -23.9669 -145.85 + 13 159.027 823 1 1 -15.4056 -24.1624 -174.45 + 13 149.43 779 1 0 -15.4115 -24.1729 -175.85 + 13 110.319 822 0 1 -15.5084 -24.3799 -204.45 + 13 125.276 778 0 0 -15.5112 -24.3873 -205.85 + 13 5.01629 808 0 1 -18.25 -63.5026 -204.555 + 13 122.751 824 5 1 -15.1899 -23.2957 -54.45 + 13 115.24 782 5 0 -15.3465 -23.5589 -55.8502 + 13 353.134 824 4 1 -15.1435 -23.1651 -84.45 + 13 175.431 802 3 1 -19.584 -30.0915 -114.45 + 13 68.7999 801 3 1 -19.65 -30.1702 -114.654 + 13 83.1214 746 3 0 -20.0887 -30.7087 -115.851 + 13 29.5605 745 3 0 -20.1874 -30.85 -116.18 + 13 158.964 758 2 1 -28.3039 -42.5086 -144.45 + 13 2.48859 757 2 1 -28.4501 -42.5795 -144.84 + 13 158.376 686 2 0 -28.7858 -42.756 -145.851 + 13 134.636 704 1 1 -39.16 -46.3694 -174.45 + 13 109.197 668 1 0 -39.3114 -46.3846 -175.85 + 13 148.439 697 0 1 -40.508 -46.4831 -204.45 + 13 109.189 669 0 0 -40.4559 -46.1793 -205.85 + 13 114.438 785 4 0 -15.2985 -22.9833 -85.85 + 13 47.762 815 3 1 -17.0253 -19.802 -114.45 + 13 88.7722 814 3 1 -17.05 -19.7782 -114.624 + 13 316.201 802 3 0 -17.2217 -19.621 -115.85 + 13 134.444 788 2 1 -22.2554 -16.6616 -144.45 + 13 134.445 817 2 0 -22.6274 -16.5988 -145.85 + 13 134.223 747 1 1 -30.5698 -15.364 -174.45 + 13 2.38698 746 1 1 -30.65 -15.376 -174.838 + 13 151.675 823 1 0 -30.9211 -15.384 -175.851 + 13 7.46281 712 0 1 -37.6465 -16.0841 -204.45 + 13 95.9672 711 0 1 -37.65 -16.078 -204.493 + 13 115.406 820 0 0 -37.7715 -15.9245 -205.85 + 13 269.692 824 8 1 -15.1346 -22.8591 35.55 + 13 199.372 825 7 1 -15.0046 -22.8725 5.55 + 13 400.543 826 6 1 -14.7891 -23.1214 -24.45 + 13 244.101 828 5 1 -14.4145 -23.4318 -54.45 + 13 142.198 829 4 1 -14.1826 -23.5244 -84.45 + 13 96.7453 830 3 1 -14.0018 -23.5822 -114.45 + 13 230.459 782 3 0 -13.983 -23.583 -115.85 + 13 178.85 832 2 1 -13.5847 -23.5957 -144.45 + 13 134.763 782 2 0 -13.5836 -23.637 -145.85 + 13 142.124 832 1 1 -13.5422 -24.4549 -174.45 + 13 166.208 777 1 0 -13.5408 -24.4972 -175.85 + 13 123.394 832 0 1 -13.5327 -25.4872 -204.45 + 13 98.3247 772 0 0 -13.5205 -25.5259 -205.85 + 13 127.946 631 1 0 -7.43047 -53.8033 -176.25 + 13 188.02 630 1 0 -7.4325 -53.8502 -176.166 + 13 8.40556 459 5 0 55.6293 -88.2445 -56.25 + 13 128.07 458 5 0 55.628 -88.2501 -56.2341 + 13 72.1057 1176 5 1 55.4194 -88.4251 -54.85 + 13 83.9569 1177 5 1 55.45 -88.4197 -54.6588 + 13 69.0973 998 4 0 -50.2579 19.6622 -86.25 + 13 266.689 997 4 0 -50.2738 19.65 -86.1044 + 13 36.3838 840 6 1 -11.942 -26.3447 -24.45 + 13 112.047 841 6 1 -11.85 -26.3618 -24.5818 + 13 3.92095 842 6 1 -11.6499 -26.348 -24.825 + 13 3.79728 767 6 0 -10.956 -26.6459 -25.85 + 13 150.927 766 6 0 -10.9464 -26.65 -25.8641 + 13 55.1943 470 6 0 23.0533 -85.8716 -26.25 + 13 61.5746 469 6 0 23.1055 -86.05 -26.1578 + 13 77.1494 468 6 0 23.1762 -86.25 -26.0418 + 13 51.1863 467 6 0 23.2556 -86.45 -25.9264 + 13 46.9127 1021 6 1 24.361 -88.2717 -24.8499 + 13 232.36 1022 6 1 24.45 -88.4198 -24.7524 + 13 156.248 1023 6 1 24.65 -88.8712 -24.4998 + 13 32.8705 575 7 0 47.6051 -64.9274 3.75 + 13 12.2637 576 7 0 47.5969 -64.85 3.76278 + 13 12.4723 1740 7 0 -62.4155 168.327 3.75 + 13 14.5863 1741 7 0 -62.4223 168.35 3.7525 + 13 273.33 827 6 1 -14.6474 -22.8423 -24.4503 + 13 209.334 785 6 0 -14.6345 -22.912 -25.85 + 13 146.313 777 5 0 -14.2823 -24.4872 -55.85 + 13 147.987 834 4 1 -13.243 -26.0515 -84.45 + 13 147.805 769 4 0 -13.1582 -26.1693 -85.85 + 13 112.791 842 3 1 -11.587 -28.6094 -114.45 + 13 212.926 756 3 0 -11.4772 -28.6645 -115.85 + 13 113.315 851 2 1 -9.69861 -30.2185 -144.45 + 13 112.595 748 2 0 -9.57651 -30.2837 -145.85 + 13 128.212 865 1 1 -6.87444 -31.4819 -174.45 + 13 134.565 742 1 0 -6.8698 -31.5189 -175.85 + 13 107.108 866 0 1 -6.71699 -32.265 -204.45 + 13 141.102 738 0 0 -6.62763 -32.3073 -205.85 + 13 92.0336 866 1 1 -6.84998 -31.478 -174.563 + 13 124.57 743 1 0 -6.13075 -31.3777 -175.85 + 13 122.744 757 3 0 -11.4712 -28.65 -116.167 + 13 43.2721 814 6 0 -27.1173 -17.0995 -26.25 + 13 190.334 809 5 1 -18.1695 -24.1127 -54.4501 + 13 83.477 778 5 0 -18.3893 -24.3954 -55.85 + 13 153.44 792 4 1 -21.6318 -31.9435 -84.4501 + 13 253.942 738 4 0 -21.554 -32.258 -85.85 + 13 16.941 703 3 0 -19.6707 -39.4362 -115.85 + 13 127.494 702 3 0 -19.6805 -39.45 -115.925 + 13 6.55572 781 2 1 -23.8491 -43.8697 -144.45 + 13 130.154 780 2 1 -23.85 -43.8694 -144.466 + 13 116.01 681 2 0 -23.9654 -43.8303 -145.85 + 13 110.927 768 1 1 -26.3588 -42.7017 -174.45 + 13 66.2302 687 1 0 -26.2423 -42.4857 -175.85 + 13 50.6307 688 1 0 -26.2218 -42.45 -176.074 + 13 85.8479 785 0 1 -22.9227 -36.5661 -204.45 + 13 153.146 786 0 1 -22.8499 -36.6302 -204.561 + 13 125.334 713 0 0 -22.0331 -37.355 -205.85 + 13 65.2396 712 0 0 -21.9202 -37.45 -206.026 + 13 73.3805 808 5 1 -18.25 -24.1545 -54.7002 + 13 129.492 826 7 1 -14.8306 -23.0912 5.55 + 13 127.26 784 7 0 -14.8276 -23.0868 4.15 + 13 117.883 825 5 1 -14.8589 -23.072 -54.45 + 13 147.413 784 5 0 -14.8849 -23.0908 -55.85 + 13 129.51 783 4 0 -15.4207 -23.41 -85.85 + 13 132.241 820 3 1 -15.9536 -23.455 -114.45 + 13 102.199 818 2 1 -16.4431 -24.1191 -144.45 + 13 147.122 779 2 0 -16.4383 -24.1773 -145.85 + 13 107.292 818 1 1 -16.3643 -25.3099 -174.45 + 13 109.825 773 1 0 -16.3799 -25.3626 -175.85 + 13 126.424 817 0 1 -16.6076 -26.3288 -204.45 + 13 149.481 768 0 0 -16.6153 -26.3744 -205.85 + 13 79.3168 767 0 0 -16.5867 -26.45 -205.978 + 13 170.481 740 0 0 -21.2619 -32.0272 -206.25 + 13 255.861 794 0 1 -21.1663 -31.4591 -204.85 + 13 34.5728 817 2 1 -16.5253 -24.025 -144.45 + 13 56.4508 781 4 0 -15.3694 -23.65 -86.1497 + 13 66.9192 825 2 1 -15.0233 -23.7747 -144.45 + 13 142.225 826 2 1 -14.85 -23.8996 -144.543 + 13 255.067 827 2 1 -14.65 -24.0935 -144.677 + 13 83.9262 776 2 0 -15.2523 -24.7435 -145.85 + 13 70.3904 775 2 0 -15.3766 -24.8501 -146.049 + 13 364.512 907 2 0 -12.8983 1.503 -146.25 + 13 57.4339 908 2 0 -12.6796 1.65 -146.101 + 13 417.482 788 2 0 -14.6097 -22.445 -145.85 + 13 140.379 826 1 1 -14.8358 -21.3952 -174.45 + 13 157.92 791 1 0 -14.7022 -21.691 -175.85 + 13 103.736 841 0 1 -11.8054 -26.8884 -204.45 + 13 125.709 765 0 0 -11.5944 -26.9881 -205.85 + 13 184.383 831 1 1 -13.728 -21.8948 -174.45 + 13 261.097 790 1 0 -13.9805 -21.9187 -175.85 + 13 68.6766 793 0 1 -21.25 -21.5817 -204.539 + 13 189.772 792 0 1 -21.4503 -21.5418 -204.702 + 13 169.299 794 0 0 -22.5739 -21.112 -205.85 + 13 335.136 795 0 0 -22.7281 -21.0496 -206 +Number of digits in this event: 93 +Using G4ParticleGun... +Particle energy: 9.37152 LIN Particle: e- Event: 14 -Number of tracker hits in this event: 36 - 14 110.238 935 10 1 7.10505 -102.72 95.55 - 14 93.3294 387 10 0 7.10923 -102.723 94.15 - 14 124.718 935 9 1 7.21869 -102.797 65.55 - 14 99.446 386 9 0 7.22091 -102.802 64.15 - 14 106.314 936 8 1 7.26486 -102.887 35.55 - 14 174.759 386 8 0 7.26983 -102.895 34.15 - 14 159.086 936 7 1 7.35069 -103.04 5.55 - 14 123.586 385 7 0 7.35299 -103.047 4.15 - 14 192.62 936 6 1 7.39035 -103.198 -24.45 - 14 100.547 384 6 0 7.39315 -103.203 -25.85 - 14 217.726 937 5 1 7.46333 -103.307 -54.45 - 14 226.888 384 5 0 7.47131 -103.311 -55.85 - 14 117.101 937 4 1 7.64117 -103.403 -84.45 - 14 128.92 383 4 0 7.64739 -103.408 -85.85 - 14 175.753 938 3 1 7.77296 -103.507 -114.45 - 14 189.78 383 3 0 7.78011 -103.511 -115.85 - 14 99.1511 939 2 1 7.93546 -103.579 -144.45 - 14 121.446 382 2 0 7.94251 -103.584 -145.85 - 14 145.332 940 1 1 8.07276 -103.704 -174.45 - 14 148.118 382 1 0 8.07897 -103.712 -175.85 - 14 148.523 940 0 1 8.21125 -103.879 -204.45 - 14 127.72 381 0 0 8.21908 -103.886 -205.85 - 14 53.2014 167 4 1 -146.594 -139.601 -84.85 - 14 141.698 935 6 1 7.25 -103.351 -24.494 - 14 117.208 934 6 1 7.04991 -103.644 -24.6443 - 14 6.04079 933 6 1 6.84974 -103.943 -24.847 - 14 89.9768 374 6 0 6.00477 -105.159 -25.85 - 14 182.812 373 6 0 5.8607 -105.35 -26.0136 - 14 7.32622 372 6 0 5.65591 -105.55 -26.2373 - 14 17.3389 816 5 1 -16.8049 -127.97 -54.4505 - 14 117.565 815 5 1 -16.85 -127.997 -54.4899 - 14 30.7643 814 5 1 -17.05 -128.137 -54.7442 - 14 66.5022 259 5 0 -17.7439 -128.313 -55.85 - 14 72.6412 258 5 0 -17.8577 -128.35 -56.0414 - 14 39.1197 343 5 0 -77.3182 -111.416 -56.25 - 14 79.6818 928 6 1 5.69879 -105.761 -24.85 -Number of digits in this event: 19 +Number of tracker hits in this event: 52 + 14 133.178 1224 9 1 64.8625 -107.27 65.55 + 14 125.177 364 9 0 64.8622 -107.271 64.15 + 14 210.727 1224 8 1 64.855 -107.28 35.55 + 14 125.37 364 8 0 64.8551 -107.281 34.15 + 14 109.261 1224 7 1 64.861 -107.298 5.55 + 14 115.177 364 7 0 64.8612 -107.298 4.15 + 14 112.66 1224 6 1 64.8624 -107.315 -24.45 + 14 184.62 364 6 0 64.8616 -107.316 -25.85 + 14 93.92 1223 5 1 64.848 -107.341 -54.45 + 14 141.876 364 5 0 64.8477 -107.343 -55.85 + 14 134.768 1223 4 1 64.8352 -107.377 -84.45 + 14 278.912 363 4 0 64.8342 -107.379 -85.85 + 14 163.42 1223 3 1 64.8116 -107.427 -114.45 + 14 110.022 363 3 0 64.811 -107.428 -115.85 + 14 125.232 1223 2 1 64.8011 -107.452 -144.45 + 14 198.858 363 2 0 64.8007 -107.454 -145.85 + 14 150.533 1223 1 1 64.7913 -107.484 -174.45 + 14 126.282 363 1 0 64.7902 -107.485 -175.85 + 14 118.337 1223 0 1 64.7689 -107.51 -204.45 + 14 130.93 363 0 0 64.7677 -107.512 -205.85 + 14 22.6303 1224 1 1 64.8503 -107.533 -174.817 + 14 120.863 361 1 0 65.1591 -107.79 -175.85 + 14 64.7661 360 1 0 65.2024 -107.95 -176.106 + 14 118.806 352 1 0 134.286 -109.747 -176.25 + 14 101.986 351 1 0 134.334 -109.75 -176.238 + 14 271.077 350 1 0 134.428 -109.95 -176.013 + 14 85.9232 1224 4 1 64.85 -107.371 -84.5095 + 14 195.416 1229 3 1 65.9321 -107.611 -114.451 + 14 143.521 361 3 0 65.9059 -107.76 -115.85 + 14 114.189 1225 2 1 65.2247 -111.301 -144.45 + 14 116.419 344 2 0 65.2325 -111.292 -145.85 + 14 283.85 1225 1 1 65.2 -110.648 -174.45 + 14 110.039 347 1 0 65.2552 -110.682 -175.85 + 14 115.388 1234 0 1 67.0189 -111.242 -204.45 + 14 266.179 344 0 0 67.1109 -111.207 -205.85 + 14 239.452 1237 2 1 67.5058 -108.569 -144.45 + 14 97.1344 357 2 0 67.8626 -108.558 -145.85 + 14 24.5188 358 2 0 67.9329 -108.55 -146.137 + 14 14.1062 1274 1 1 75.0425 -107.865 -174.45 + 14 231.368 1275 1 1 75.05 -107.903 -174.489 + 14 1.26688 355 1 0 75.2224 -109.146 -175.85 + 14 141.74 354 1 0 75.2229 -109.15 -175.854 + 14 96.5027 353 1 0 75.2836 -109.35 -176.042 + 14 121.948 1297 0 1 79.6471 -120.491 -204.45 + 14 69.657 299 0 0 79.5299 -120.205 -205.85 + 14 52.4487 300 0 0 79.4942 -120.15 -206.084 + 14 111.572 356 2 0 67.9085 -108.765 -145.85 + 14 113.734 1279 1 1 75.978 -113.826 -174.45 + 14 127.486 332 1 0 76.1813 -113.711 -175.851 + 14 115.9 1304 0 1 80.8779 -111.396 -204.45 + 14 207.554 1670 3 0 86.2559 154.326 -116.25 + 14 89.5732 1699 3 0 89.1674 160.127 -116.25 +Number of digits in this event: 28 Using G4ParticleGun... -Particle energy: 1.13931 LIN +Particle energy: 1.6783 LIN Particle: e- Event: 15 -Number of tracker hits in this event: 50 - 15 183.572 646 10 1 -50.7024 97.2124 95.55 - 15 164.607 1385 10 0 -50.7052 97.2106 94.15 - 15 108.758 646 9 1 -50.7781 97.1752 65.55 - 15 107.498 1385 9 0 -50.777 97.1682 64.15 - 15 115.176 646 8 1 -50.7604 97.025 35.55 - 15 96.0764 1384 8 0 -50.7595 97.0148 34.15 - 15 135.058 646 7 1 -50.6649 96.7729 5.55 - 15 142.207 1382 7 0 -50.6556 96.742 4.15 - 15 118.846 648 6 1 -50.4204 96.0427 -24.45 - 15 130.05 1379 6 0 -50.4098 96.0089 -25.85 - 15 113.441 649 5 1 -50.1894 95.3596 -54.45 - 15 112.258 1375 5 0 -50.1883 95.3349 -55.85 - 15 159.103 649 4 1 -50.1433 94.8088 -84.45 - 15 109.069 1373 4 0 -50.1381 94.7871 -85.85 - 15 121.708 650 3 1 -50.0361 94.293 -114.45 - 15 215.355 1370 3 0 -50.0359 94.2698 -115.85 - 15 129.589 650 2 1 -50.0003 93.7977 -144.45 - 15 121.231 1368 2 0 -49.994 93.7714 -145.85 - 15 144.522 650 1 1 -49.8621 93.1795 -174.45 - 15 129.011 1364 1 0 -49.8677 93.1381 -175.85 - 15 140.308 650 0 1 -49.9696 92.2548 -204.45 - 15 234.224 1360 0 0 -49.9927 92.2268 -205.85 - 15 1.7788 1434 1 0 -65.2457 107.15 -176.1 - 15 221.872 649 1 1 -50.121 93.221 -174.45 - 15 256.239 1365 1 0 -49.9848 93.1755 -175.85 - 15 171.308 665 0 1 -47.045 92.2234 -204.45 - 15 241.855 1358 0 0 -47.0229 91.8622 -205.85 - 15 129.2 651 0 1 -49.8141 92.3889 -204.45 - 15 223.545 501 0 1 -79.65 67.5545 -204.758 - 15 265.347 644 2 1 -51.1163 97.0736 -144.45 - 15 219.066 1384 2 0 -50.9933 97.1235 -145.85 - 15 119.83 657 1 1 -48.646 97.9232 -174.45 - 15 112.491 1388 1 0 -48.1455 97.806 -175.85 - 15 4.88999 1387 1 0 -47.9778 97.75 -176.227 - 15 24.8868 726 0 1 -34.6829 92.418 -204.45 - 15 354.184 727 0 1 -34.65 92.3996 -204.512 - 15 19.4368 1359 0 0 -33.8303 91.9621 -205.85 - 15 46.7437 728 0 1 -34.45 92.3829 -204.729 - 15 45.554 1385 2 0 -51.4183 97.3128 -145.85 - 15 61.5707 1386 2 0 -51.4589 97.35 -146.031 - 15 38.4893 600 1 1 -59.9404 103.024 -174.45 - 15 76.91 599 1 1 -60.05 103.028 -174.547 - 15 67.1478 598 1 1 -60.2507 103.04 -174.731 - 15 176.544 1414 1 0 -61.6114 103.076 -175.85 - 15 72.9454 366 0 1 -106.776 90.4326 -204.45 - 15 76.2798 365 0 1 -106.95 90.4886 -204.666 - 15 111.541 1353 0 0 -107.936 90.8627 -205.85 - 15 70.4959 1354 0 0 -108.176 90.9501 -206.095 - 15 270.851 1416 1 0 -60.5978 103.431 -175.85 - 15 0.911894 1417 1 0 -61.0556 103.55 -176.247 -Number of digits in this event: 26 +Number of tracker hits in this event: 116 + 15 165.268 1174 11 1 54.871 25.6936 125.55 + 15 106.174 1028 11 0 54.8688 25.6904 124.15 + 15 96.8599 1173 10 1 54.8053 25.619 95.55 + 15 94.5443 1027 10 0 54.8001 25.6113 94.15 + 15 130.276 1173 9 1 54.6896 25.4662 65.55 + 15 174.819 1027 9 0 54.6811 25.4581 64.15 + 15 96.5256 1172 8 1 54.5181 25.3054 35.55 + 15 199.889 1026 8 0 54.5137 25.301 34.15 + 15 114.49 1172 7 1 54.4507 25.2326 5.55 + 15 224.187 1025 7 0 54.4505 25.225 4.15 + 15 113.83 1172 6 1 54.4675 25.07 -24.45 + 15 102.317 1025 6 0 54.4697 25.0631 -25.85 + 15 188.4 1172 5 1 54.4958 24.9228 -54.45 + 15 114.685 1024 5 0 54.4933 24.9117 -55.85 + 15 146.375 1172 4 1 54.452 24.6944 -84.45 + 15 132.989 1023 4 0 54.4489 24.6813 -85.85 + 15 101.76 1171 3 1 54.3851 24.4025 -114.45 + 15 136.535 1021 3 0 54.3781 24.3891 -115.85 + 15 108.084 1170 2 1 54.2345 24.1165 -144.45 + 15 133.811 1020 2 0 54.2252 24.0987 -145.85 + 15 110.31 1170 1 1 54.0521 23.7408 -174.45 + 15 14.2925 1169 1 1 54.05 23.7359 -174.774 + 15 221.979 1018 1 0 54.0431 23.7196 -175.85 + 15 258.832 1169 0 1 53.8561 23.2312 -204.45 + 15 105.955 1015 0 0 53.8441 23.2015 -205.85 + 15 113.921 1235 1 0 110.071 67.1076 -176.25 + 15 190.301 1234 1 0 110.242 67.0499 -176.082 + 15 55.6977 1599 4 0 101.855 139.95 -86.0759 + 15 28.3057 1405 4 1 101.205 139.973 -84.8498 + 15 110.833 1404 4 1 101.15 139.97 -84.781 + 15 7.56537 1584 4 0 100.374 137.023 -85.85 + 15 65.1201 1395 4 1 99.1639 135.646 -84.85 + 15 194.203 1562 4 0 100.296 132.71 -85.85 + 15 69.3119 1171 2 1 54.2972 24.1771 -144.45 + 15 247.744 1172 2 1 54.4502 24.0594 -144.544 + 15 101.987 1173 2 1 54.65 23.8972 -144.68 + 15 63.9249 1174 2 1 54.85 23.6856 -144.78 + 15 47.752 1175 2 1 55.05 23.5391 -144.823 + 15 22.2521 1001 2 0 58.1593 20.3179 -145.85 + 15 67.3932 1000 2 0 58.2237 20.2498 -145.88 + 15 74.7179 999 2 0 58.3748 20.05 -145.982 + 15 138.098 998 2 0 58.5218 19.85 -146.041 + 15 90.7576 997 2 0 58.724 19.6496 -146.088 + 15 122.737 996 2 0 58.9861 19.4499 -146.055 + 15 59.7796 995 2 0 59.3096 19.2496 -145.943 + 15 192.181 1202 2 1 60.4516 18.0137 -144.85 + 15 152.384 1203 2 1 60.65 17.7122 -144.487 + 15 49.2951 987 2 0 60.2488 17.5714 -145.85 + 15 89.8568 988 2 0 60.2611 17.65 -145.962 + 15 295.806 989 2 0 60.1365 17.85 -146.008 + 15 77.753 990 2 0 60.0716 18.05 -146.042 + 15 130.247 1019 2 0 55.2694 24.025 -145.85 + 15 53.9225 1234 1 1 66.97 23.8251 -174.45 + 15 102.811 1235 1 1 67.0501 23.7841 -174.545 + 15 12.6944 1236 1 1 67.25 23.6744 -174.804 + 15 73.8109 1016 1 0 68.1398 23.2953 -175.85 + 15 155.358 1015 1 0 68.2388 23.2499 -175.958 + 15 0.898295 817 1 0 109.199 -16.6477 -176.249 + 15 88.8293 816 1 0 109.202 -16.6501 -176.246 + 15 87.8942 815 1 0 109.388 -16.8501 -176.062 + 15 26.6933 814 1 0 109.579 -17.05 -175.898 + 15 5.935 1453 1 1 110.935 -18.4922 -174.85 + 15 76.814 1454 1 1 110.95 -18.5079 -174.839 + 15 85.1551 1455 1 1 111.15 -18.7043 -174.719 + 15 103.35 1456 1 1 111.35 -18.9321 -174.583 + 15 230.967 1457 1 1 111.55 -19.2087 -174.474 + 15 89.0283 801 1 0 111.869 -19.7492 -175.85 + 15 143.549 800 1 0 111.9 -19.85 -176.106 + 15 33.7253 1012 1 0 73.0064 22.5571 -176.25 + 15 98.5423 1013 1 0 72.9664 22.65 -176.221 + 15 228.242 1384 1 0 54.1455 96.9557 -176.25 + 15 25.4595 1385 1 0 54.0126 97.15 -175.934 + 15 266.739 1160 1 1 52.193 97.3299 -174.85 + 15 294.811 1171 5 1 54.45 24.9359 -54.7696 + 15 17.1067 1025 8 0 54.399 25.25 33.8072 + 15 37.7892 1126 8 0 24.2188 45.3851 33.7502 + 15 174.877 1127 8 0 24.185 45.45 33.8187 + 15 18.4304 1128 8 0 24.1022 45.65 34.0967 + 15 108.097 1018 8 1 23.8183 45.8768 35.15 + 15 138.053 1170 6 1 54.2436 24.9874 -24.45 + 15 116.51 1024 6 0 54.2292 24.906 -25.8501 + 15 107.14 1169 5 1 54.0081 23.3492 -54.4507 + 15 96.0399 1016 5 0 54.0172 23.3715 -55.85 + 15 168.06 1170 4 1 54.2317 23.6958 -84.4507 + 15 122.085 1018 4 0 54.2439 23.6717 -85.8505 + 15 130.665 1172 3 1 54.4797 23.0358 -114.45 + 15 115.702 1015 3 0 54.3844 23.0825 -115.85 + 15 109.084 1164 2 1 52.8653 24.2526 -144.45 + 15 137.976 1021 2 0 52.9325 24.279 -145.85 + 15 112.421 1168 1 1 53.7616 24.4097 -174.45 + 15 107.651 1021 1 0 53.7788 24.2832 -175.85 + 15 14.8994 1020 1 0 53.7851 24.25 -176.205 + 15 102.496 1171 0 1 54.4371 21.4896 -204.45 + 15 126.228 1006 0 0 54.3534 21.3732 -205.85 + 15 169.684 1171 6 1 54.2583 25.0313 -24.45 + 15 134.895 1027 6 0 54.2387 25.462 -25.8504 + 15 120.509 1074 5 0 54.1833 34.9062 -55.8503 + 15 170.17 1148 4 1 49.7428 39.2671 -84.45 + 15 7.86879 1149 4 1 49.85 39.3522 -84.7996 + 15 133.368 1096 4 0 50.1911 39.3648 -85.85 + 15 128.912 1225 3 1 65.0952 32.2941 -114.45 + 15 293.851 1226 3 1 65.25 32.6974 -114.65 + 15 71.1544 1227 3 1 65.45 33.005 -114.719 + 15 92.2862 1228 3 1 65.65 33.1595 -114.741 + 15 122.624 1229 3 1 65.8507 33.259 -114.78 + 15 80.1649 1230 3 1 66.0501 33.4168 -114.84 + 15 82.3556 1231 3 1 66.25 33.5861 -114.833 + 15 63.1614 1232 3 1 66.45 33.7558 -114.823 + 15 16.0642 1080 3 0 69.4036 36.2063 -115.85 + 15 108.904 1081 3 0 69.4717 36.25 -115.88 + 15 205.61 1082 3 0 69.728 36.45 -115.974 + 15 99.0488 1083 3 0 70.2796 36.65 -116.03 + 15 46.824 1040 3 0 91.9957 28.0758 -116.25 + 15 80.7183 1039 3 0 91.9953 28.05 -116.114 + 15 176.159 1363 3 1 92.8242 28.5914 -114.85 + 15 134.31 1364 3 1 92.95 28.6175 -114.654 +Number of digits in this event: 47 Using G4ParticleGun... -Particle energy: 7.70578 LIN +Particle energy: 7.6199 LIN Particle: e- Event: 16 -Number of tracker hits in this event: 142 - 16 106.276 885 11 1 -2.98297 -2.74905 125.55 - 16 179.537 886 11 0 -2.98292 -2.74969 124.15 - 16 166.327 885 10 1 -2.98062 -2.76242 95.55 - 16 118.814 886 10 0 -2.97897 -2.76293 94.15 - 16 384.322 885 9 1 -2.9398 -2.77172 65.55 - 16 327.771 886 9 0 -2.93798 -2.77223 64.15 - 16 344.186 885 8 1 -2.90061 -2.78234 35.55 - 16 405.285 886 8 0 -2.89877 -2.78234 34.15 - 16 344.083 885 7 1 -2.85908 -2.78757 5.55 - 16 217.603 886 7 0 -2.85852 -2.78825 4.15 - 16 223.961 885 6 1 -2.85347 -2.80174 -24.45 - 16 266.042 886 6 0 -2.85395 -2.80352 -25.85 - 16 719.425 885 5 1 -2.85906 -2.84042 -54.45 - 16 255.056 886 5 0 -2.85793 -2.84151 -55.85 - 16 109.907 886 4 1 -2.83346 -2.86465 -84.45 - 16 111.929 885 4 0 -2.83178 -2.86466 -85.85 - 16 118.468 886 3 1 -2.80096 -2.86467 -114.45 - 16 137.438 885 3 0 -2.7996 -2.86361 -115.85 - 16 119.573 886 2 1 -2.77201 -2.83977 -144.45 - 16 111.438 886 2 0 -2.76936 -2.83957 -145.85 - 16 427.648 886 1 1 -2.72712 -2.83706 -174.45 - 16 262.962 886 1 0 -2.72532 -2.83628 -175.85 - 16 112.46 886 0 1 -2.69038 -2.81074 -204.45 - 16 121.578 886 0 0 -2.68886 -2.80904 -205.85 - 16 229.971 886 6 1 -2.85 -2.80347 -24.4946 - 16 29.275 885 1 1 -2.85 -2.79221 -174.742 - 16 121.995 885 1 0 -2.9822 -2.91773 -175.851 - 16 119.596 871 0 1 -5.66981 -12.1278 -204.45 - 16 91.7991 840 0 0 -5.80945 -11.9435 -205.85 - 16 68.2367 841 0 0 -6.0014 -11.85 -206.074 - 16 72.509 842 0 0 -5.97749 -11.65 -206.14 - 16 49.9282 843 0 0 -6.06559 -11.45 -206.147 - 16 214.902 887 0 1 -2.55508 -1.7767 -204.45 - 16 82.4703 892 0 0 -2.63105 -1.50827 -205.85 - 16 143.051 893 0 0 -2.64726 -1.44995 -206.147 - 16 220.01 890 0 0 -1.67651 -1.97891 -205.85 - 16 1.97682 889 0 0 -1.48227 -2.05 -206.237 - 16 165.042 894 0 0 19.5873 -1.22655 -206.25 - 16 245.243 932 0 0 6.79668 6.62456 -206.25 - 16 69.5615 933 0 0 6.76337 6.65 -206.198 - 16 67.3664 931 0 0 6.69302 6.45 -206.243 - 16 10.5727 811 6 0 -10.7427 -17.65 -26.2369 - 16 263.871 888 5 0 -2.87974 -2.26524 -55.85 - 16 101.793 887 4 1 -2.61656 -2.04009 -84.45 - 16 165.068 890 4 0 -2.61775 -2.01742 -85.85 - 16 103.078 884 3 1 -3.13016 -1.47796 -114.45 - 16 132.499 892 3 0 -3.19515 -1.49969 -115.85 - 16 125.627 877 2 1 -4.50923 -2.38348 -144.45 - 16 113.318 887 2 0 -4.39129 -2.48003 -145.85 - 16 155.89 889 1 1 -2.10232 -4.99025 -174.45 - 16 115.019 876 1 0 -2.18202 -4.76938 -175.85 - 16 178.736 898 0 1 -0.449576 -1.47761 -204.45 - 16 20.1042 1288 12 0 15.4966 77.7721 153.75 - 16 16.8633 1289 12 0 15.5134 77.8504 154.144 - 16 21.9961 977 12 1 15.4755 78.3615 155.15 - 16 84.3166 976 12 1 15.45 78.3798 155.238 - 16 53.5934 975 12 1 15.2499 78.4559 155.32 - 16 79.5445 974 12 1 15.0495 78.4218 155.326 - 16 79.316 973 12 1 14.85 78.4121 155.378 - 16 56.5535 972 12 1 14.65 78.4657 155.5 - 16 121.309 874 1 0 -2.01043 -5.18092 -175.85 - 16 41.4771 873 1 0 -2.06257 -5.25 -176.172 - 16 109.941 466 5 0 -68.8183 -86.772 -56.25 - 16 22.12 886 5 1 -2.85 -2.30406 -54.8343 - 16 4.07286 877 5 1 -4.57981 -3.50566 -54.85 - 16 41.5781 881 5 0 -5.16304 -3.83575 -55.85 - 16 101.519 888 7 0 -2.87696 -2.41733 4.15 - 16 149.554 891 6 0 -2.88645 -1.75181 -25.85 - 16 145.729 891 5 0 -3.03324 -1.83726 -55.85 - 16 218.769 884 4 1 -3.18837 -2.25909 -84.45 - 16 146.737 888 4 0 -3.17798 -2.26022 -85.85 - 16 144.567 885 3 1 -2.93236 -2.03704 -114.45 - 16 203.553 889 3 0 -2.87326 -2.14625 -115.85 - 16 125.638 894 2 1 -1.20699 -4.63517 -144.45 - 16 134.202 876 2 0 -1.1625 -4.78652 -145.85 - 16 115.128 897 1 1 -0.462096 -8.1038 -174.45 - 16 39.7222 898 1 1 -0.449998 -8.14641 -174.731 - 16 116.041 858 1 0 -0.411021 -8.32342 -175.85 - 16 41.427 903 0 1 0.658217 -13.2047 -204.45 - 16 98.536 902 0 1 0.649996 -13.2273 -204.588 - 16 14.6963 833 0 0 0.579065 -13.4394 -205.85 - 16 100.757 832 0 0 0.575456 -13.45 -205.912 - 16 133.192 887 9 0 -2.98628 -2.59855 64.15 - 16 53.1495 893 8 1 -1.37881 0.05 35.3737 - 16 8.36234 902 8 0 -1.13738 0.641636 34.15 - 16 133.076 903 8 0 -1.134 0.650076 34.1326 - 16 156.233 918 7 1 3.75349 13.997 5.54976 - 16 55.1898 971 7 0 3.95553 14.3967 4.15 - 16 60.453 972 7 0 3.98113 14.45 3.96507 - 16 99.4042 935 6 1 7.14637 23.1269 -24.45 - 16 28.662 936 6 1 7.25 23.2629 -24.7576 - 16 78.4921 1018 6 0 7.64501 23.7367 -25.85 - 16 43.3928 1019 6 0 7.74078 23.85 -26.114 - 16 130.952 988 5 1 17.6841 36.0769 -54.4503 - 16 0.0392169 989 5 1 17.85 36.3382 -54.8495 - 16 68.5188 1084 5 0 18.2517 36.9549 -55.85 - 16 76.9141 1085 5 0 18.3142 37.05 -56.0065 - 16 96.0756 1049 4 1 29.9351 54.5307 -84.4502 - 16 89.8052 1050 4 1 30.05 54.6447 -84.6633 - 16 46.2131 1175 4 0 30.6705 55.2368 -85.85 - 16 135.008 1176 4 0 30.6844 55.2501 -85.8769 - 16 115.178 1130 3 1 46.1366 70.2376 -114.45 - 16 16.1211 1131 3 1 46.2501 70.4242 -114.795 - 16 41.7437 1254 3 0 46.5994 70.9852 -115.85 - 16 104.499 1255 3 0 46.6406 71.05 -115.974 - 16 82.2637 1177 2 1 55.6147 87.2836 -144.45 - 16 65.2298 1178 2 1 55.65 87.4566 -144.693 - 16 5.92201 1340 2 0 55.7676 88.2358 -145.85 - 16 113.639 1341 2 0 55.7697 88.25 -145.871 - 16 16.3168 1342 2 0 55.7969 88.45 -146.183 - 16 17.1305 1297 3 0 44.6 79.45 -116.015 - 16 44.7388 900 5 0 -4.45935 0.104582 -55.85 - 16 153.674 886 8 1 -2.69944 -1.70247 35.55 - 16 127.468 891 8 0 -2.61431 -1.68268 34.15 - 16 101.328 895 7 1 -0.972406 -1.34831 5.55 - 16 115.244 893 7 0 -0.903417 -1.34927 4.15 - 16 148.636 903 6 1 0.722617 -1.22388 -24.45 - 16 121.02 894 6 0 0.820616 -1.15306 -25.85 - 16 110.903 912 5 1 2.59107 0.322253 -54.4509 - 16 165.682 901 5 0 2.61138 0.364245 -55.85 - 16 100.336 916 4 1 3.33574 0.838536 -84.45 - 16 109.969 904 4 0 3.21055 0.985929 -85.85 - 16 187.462 900 3 1 0.191096 3.45583 -114.45 - 16 41.3437 920 3 0 -0.0500896 4.17937 -116.071 - 16 21.5311 921 3 0 -0.0779687 4.25 -116.197 - 16 197.895 868 2 1 -6.44084 20.7987 -144.45 - 16 214.162 867 2 1 -6.45 21.2639 -144.609 - 16 24.1971 1027 2 0 -5.68697 25.5255 -145.85 - 16 57.4189 1028 2 0 -5.65957 25.65 -145.887 - 16 54.5428 1029 2 0 -5.6288 25.85 -145.955 - 16 57.881 1030 2 0 -5.60231 26.05 -146.043 - 16 47.5502 1031 2 0 -5.57506 26.25 -146.114 - 16 58.6889 1032 2 0 -5.55218 26.45 -146.166 - 16 36.6693 1033 2 0 -5.53025 26.65 -146.213 - 16 48.0562 880 1 1 -3.9912 142.262 -174.45 - 16 110.251 881 1 1 -3.84975 142.377 -174.489 - 16 79.2282 882 1 1 -3.65 142.498 -174.531 - 16 74.013 1615 1 0 -4.16442 143.253 -175.85 - 16 75.8752 1616 1 0 -4.24526 143.35 -176.019 - 16 112.109 914 3 1 2.97941 3.98161 -114.45 - 16 92.9538 738 4 0 31.0109 -32.25 -86.2067 - 16 110.903 913 3 1 2.85 3.96289 -114.496 -Number of digits in this event: 54 -Using G4ParticleGun... -Particle energy: 1.86008 LIN +Number of tracker hits in this event: 59 + 16 170.645 1534 9 1 126.997 40.7896 65.55 + 16 128.083 1103 9 0 126.996 40.7894 64.15 + 16 117.588 1534 8 1 126.985 40.7823 35.55 + 16 236.132 1103 8 0 126.985 40.7817 34.15 + 16 108.676 1534 7 1 126.987 40.7714 5.55 + 16 119.151 1103 7 0 126.987 40.7706 4.15 + 16 116.576 1534 6 1 126.992 40.7592 -24.45 + 16 121.174 1103 6 0 126.993 40.7593 -25.85 + 16 108.676 1534 5 1 127.015 40.7542 -54.45 + 16 131.454 1103 5 0 127.018 40.7543 -55.85 + 16 560.367 1534 4 1 127.084 40.7513 -84.45 + 16 542.112 1103 4 0 127.089 40.7509 -85.85 + 16 133.842 1535 3 1 127.193 40.7399 -114.45 + 16 407.265 1103 3 0 127.208 40.7473 -115.85 + 16 108.712 1537 2 1 127.591 40.8141 -144.45 + 16 330.238 1103 2 0 127.611 40.8182 -145.85 + 16 197.009 1538 1 1 127.829 41.0076 -174.45 + 16 127.017 1105 1 0 127.834 41.0577 -175.85 + 16 123.213 1538 0 1 127.929 42.1096 -204.45 + 16 164.972 1110 0 0 127.95 42.1691 -205.85 + 16 54.4704 1077 0 0 127.354 35.5562 -206.25 + 16 67.9062 1191 0 0 133.785 58.3246 -206.25 + 16 62.4691 1558 0 1 131.805 61.5635 -204.85 + 16 193.969 1557 0 1 131.75 61.7793 -204.636 + 16 566.076 1536 0 1 127.504 40.8243 -204.45 + 16 421.116 1103 0 0 127.507 40.8247 -205.85 + 16 314.615 1534 3 1 127.071 40.7638 -114.45 + 16 218.01 1535 2 1 127.201 40.7427 -144.45 + 16 129.934 1535 1 1 127.295 40.6111 -174.45 + 16 138.525 1102 1 0 127.3 40.6109 -175.85 + 16 81.5025 1427 1 0 32.0451 105.575 -176.25 + 16 79.8459 1426 1 0 32.0393 105.55 -176.208 + 16 45.0819 1106 4 0 126.829 41.3903 -85.8503 + 16 68.3196 1107 4 0 126.823 41.45 -86.0434 + 16 193.512 1534 2 1 127.13 40.7807 -144.45 + 16 105.189 1534 1 1 127.139 40.8631 -174.45 + 16 129.486 1104 1 0 127.103 40.878 -175.85 + 16 124.937 1530 0 1 126.282 41.2076 -204.45 + 16 117.074 1105 0 0 126.239 41.2186 -205.85 + 16 159.709 1103 1 0 127.181 40.6978 -176.011 + 16 375.151 1546 0 1 129.5 44.4846 -204.45 + 16 19.6539 1125 0 0 129.565 45.2008 -205.85 + 16 103.049 1126 0 0 129.575 45.25 -205.95 + 16 19.1818 1324 0 0 150.066 85.0011 -206.25 + 16 88.862 1325 0 0 150.11 85.05 -206.202 + 16 66.3534 1326 0 0 150.287 85.25 -206.03 + 16 236.967 1327 0 0 150.389 85.45 -205.987 + 16 256.508 1328 0 0 150.6 85.65 -205.971 + 16 90.4329 1329 0 0 150.789 85.85 -205.99 + 16 182.409 1330 0 0 150.813 86.0501 -205.942 + 16 110.377 1667 0 1 153.56 85.4419 -204.85 + 16 23.1795 1666 0 1 153.55 85.3819 -204.816 + 16 139.615 1545 0 1 129.35 44.9197 -204.705 + 16 135.669 1532 0 1 126.678 40.2819 -204.45 + 16 54.8385 1101 0 0 126.446 40.4297 -205.85 + 16 57.5051 1102 0 0 126.421 40.4501 -206.022 + 16 141.699 1084 1 0 135.258 36.9542 -176.25 + 16 457.073 1104 4 0 127.187 40.8501 -86.1102 + 16 365.94 1105 4 0 127.321 41.05 -86.2426 +Number of digits in this event: 36 +Using G4ParticleGun... +Particle energy: 7.12412 LIN Particle: e- Event: 17 -Number of tracker hits in this event: 37 - 17 141.295 1383 10 1 96.9204 40.6144 95.55 - 17 108.822 1102 10 0 96.9205 40.6155 94.15 - 17 111.491 1383 9 1 96.9303 40.63 65.55 - 17 249.404 1102 9 0 96.9371 40.6314 64.15 - 17 152.568 1384 8 1 97.0904 40.6707 35.55 - 17 155.661 1103 8 0 97.1032 40.6659 34.15 - 17 107.711 1386 7 1 97.3654 40.5763 5.55 - 17 175.163 1102 7 0 97.3755 40.5687 4.15 - 17 115.118 1387 6 1 97.5792 40.4112 -24.45 - 17 143.209 1101 6 0 97.5903 40.4095 -25.85 - 17 102.994 1388 5 1 97.8247 40.378 -54.45 - 17 251.615 1101 5 0 97.8381 40.3678 -55.85 - 17 132.524 1389 4 1 98.0981 40.1724 -84.45 - 17 120.828 1100 4 0 98.1075 40.162 -85.85 - 17 149.036 1390 3 1 98.28 39.9618 -114.45 - 17 107.62 1099 3 0 98.2915 39.9513 -115.85 - 17 117.362 1391 2 1 98.5058 39.6876 -144.45 - 17 99.429 1098 2 0 98.5163 39.6708 -145.85 - 17 187.915 1392 1 1 98.7415 39.326 -174.45 - 17 151.43 1096 1 0 98.7467 39.3112 -175.85 - 17 110.705 1393 0 1 98.8546 39.0036 -204.45 - 17 121.968 1094 0 0 98.8608 38.983 -205.85 - 17 174.737 246 14 1 -130.775 97.3324 215.55 - 17 112.79 1103 9 0 96.815 40.65 63.9805 - 17 191.834 1386 1 1 97.3841 40.4015 -174.45 - 17 116.838 1101 1 0 97.3675 40.4105 -175.85 - 17 155.673 1384 0 1 97.026 40.3204 -204.45 - 17 139.512 1101 0 0 96.982 40.2759 -205.85 - 17 60.2084 1385 1 1 97.3498 40.4791 -174.633 - 17 13.7832 1104 1 0 97.1071 41.0308 -175.85 - 17 116.626 1105 1 0 97.099 41.05 -175.891 - 17 116.391 1373 0 1 94.8841 51.0165 -204.45 - 17 104.65 1374 0 1 94.95 50.9917 -204.565 - 17 128.285 1153 0 0 95.5787 50.7617 -205.85 - 17 57.6803 1372 0 1 94.75 50.9592 -204.667 - 17 182.277 1158 0 0 93.8459 51.6789 -205.85 - 17 42.0404 1159 0 0 93.5096 51.85 -206.168 -Number of digits in this event: 21 +Number of tracker hits in this event: 60 + 17 183.834 606 11 1 -58.8382 -28.2927 125.55 + 17 244.652 758 11 0 -58.8385 -28.2929 124.15 + 17 127.236 606 10 1 -58.8441 -28.2984 95.55 + 17 159.276 758 10 0 -58.8449 -28.3003 94.15 + 17 113.484 605 9 1 -58.861 -28.3405 65.55 + 17 108.117 758 9 0 -58.8625 -28.3433 64.15 + 17 149.895 605 8 1 -58.9197 -28.3918 35.55 + 17 144.849 758 8 0 -58.9231 -28.3946 34.15 + 17 121.843 605 7 1 -58.992 -28.4536 5.55 + 17 130.538 757 7 0 -58.9963 -28.4559 4.15 + 17 401.935 604 6 1 -59.0879 -28.5044 -24.45 + 17 402.613 757 6 0 -59.0919 -28.5079 -25.85 + 17 460.583 604 5 1 -59.1768 -28.585 -54.45 + 17 352.61 757 5 0 -59.1792 -28.5899 -55.85 + 17 150.824 604 4 1 -59.2298 -28.6919 -84.45 + 17 126.844 756 4 0 -59.2347 -28.6978 -85.85 + 17 139.592 603 3 1 -59.3399 -28.8159 -114.45 + 17 243.196 756 3 0 -59.3459 -28.8228 -115.85 + 17 123.862 602 2 1 -59.4662 -28.9659 -144.45 + 17 279.492 755 2 0 -59.4736 -28.974 -145.85 + 17 424.415 602 1 1 -59.6386 -29.1468 -174.45 + 17 188.45 754 1 0 -59.6444 -29.158 -175.85 + 17 97.651 601 0 1 -59.7688 -29.3857 -204.45 + 17 118.378 753 0 0 -59.7726 -29.3952 -205.85 + 17 94.828 758 5 0 -59.0758 -28.4471 -55.85 + 17 151.431 606 4 1 -58.8297 -28.5038 -84.45 + 17 146.718 757 4 0 -58.8231 -28.5178 -85.85 + 17 200.279 606 3 1 -58.6505 -28.816 -114.45 + 17 105.095 607 3 1 -58.65 -28.8164 -114.483 + 17 106.06 609 2 1 -58.1592 -29.133 -144.45 + 17 121.706 754 2 0 -58.1236 -29.1586 -145.85 + 17 153.182 612 1 1 -57.4721 -29.7022 -174.45 + 17 126.054 751 1 0 -57.4375 -29.7346 -175.85 + 17 126.208 616 0 1 -56.7706 -30.4231 -204.45 + 17 118.403 747 0 0 -56.7295 -30.454 -205.85 + 17 59.7831 743 4 0 -104.517 -31.3763 -86.25 + 17 28.5001 246 4 0 -93.3842 -130.75 -85.9514 + 17 200.61 744 4 0 -104.573 -31.25 -86.065 + 17 24.9108 756 5 0 -59.0657 -28.65 -56.183 + 17 115.749 603 4 1 -59.2769 -28.4642 -84.45 + 17 90.8386 758 4 0 -59.258 -28.45 -85.9923 + 17 193.541 605 3 1 -58.965 -28.3654 -114.45 + 17 121.441 758 3 0 -58.9525 -28.3818 -115.85 + 17 156.449 606 2 1 -58.7334 -28.6216 -144.45 + 17 212.068 756 2 0 -58.7534 -28.6566 -145.85 + 17 110.372 604 1 1 -59.1876 -29.3614 -174.45 + 17 115.122 753 1 0 -59.2588 -29.4255 -175.85 + 17 171.376 596 0 1 -60.6678 -30.7159 -204.45 + 17 122.125 746 0 0 -60.7414 -30.7585 -205.85 + 17 28.3065 826 0 0 -42.4697 -14.85 -206.236 + 17 84.6165 758 1 0 -59.6032 -28.4153 -175.85 + 17 84.7391 759 1 0 -59.5809 -28.2499 -176.129 + 17 37.6608 603 1 1 -59.45 -28.7117 -174.732 + 17 228.446 757 1 0 -59.427 -28.5967 -175.85 + 17 41.3453 903 0 1 0.716871 -39.3227 -204.45 + 17 209.199 902 0 1 0.65 -39.4232 -204.506 + 17 208.337 901 0 1 0.449894 -39.6298 -204.561 + 17 110.05 696 0 0 0.31777 -40.6674 -205.85 + 17 15.7795 697 0 0 0.358229 -40.65 -206.191 + 17 19.1265 188 2 0 21.3492 -142.35 -145.95 +Number of digits in this event: 39 Using G4ParticleGun... -Particle energy: 4.59249 LIN +Particle energy: 3.04044 LIN Particle: e- Event: 18 -Number of tracker hits in this event: 28 - 18 142.927 1495 9 1 119.214 -27.4234 65.55 - 18 157.526 763 9 0 119.216 -27.4239 64.15 - 18 152.855 1495 8 1 119.251 -27.4313 35.55 - 18 141.163 763 8 0 119.255 -27.4326 34.15 - 18 124.528 1495 7 1 119.322 -27.4584 5.55 - 18 340.245 762 7 0 119.322 -27.4612 4.15 - 18 202.047 1495 6 1 119.307 -27.5185 -24.45 - 18 117.636 762 6 0 119.313 -27.5196 -25.85 - 18 86.2993 1496 5 1 119.434 -27.5474 -54.45 - 18 121.354 762 5 0 119.44 -27.5496 -55.85 - 18 113.347 1497 4 1 119.552 -27.5938 -84.45 - 18 170.628 762 4 0 119.558 -27.5984 -85.85 - 18 123.223 1497 3 1 119.654 -27.6731 -114.45 - 18 147.13 761 3 0 119.651 -27.6852 -115.85 - 18 111.559 1497 2 1 119.593 -27.9082 -144.45 - 18 98.3723 760 2 0 119.598 -27.9231 -145.85 - 18 124.602 1498 1 1 119.784 -28.2231 -174.45 - 18 169.965 759 1 0 119.798 -28.2408 -175.85 - 18 132.729 1499 0 1 120.067 -28.5688 -204.45 - 18 231.606 757 0 0 120.082 -28.5821 -205.85 - 18 128.075 758 0 0 120.287 -28.45 -206.029 - 18 11.6599 865 0 0 165.456 -6.87441 -206.25 - 18 177.827 866 0 0 165.488 -6.85 -206.239 - 18 373.884 867 0 0 165.946 -6.64972 -206.105 - 18 157.808 758 1 0 119.8 -28.25 -176.224 - 18 56.6099 1431 0 1 106.479 -40.4578 -204.85 - 18 127.604 1782 3 1 176.553 7.82082 -114.85 - 18 253.72 761 8 0 118.864 -27.6508 34.15 -Number of digits in this event: 24 +Number of tracker hits in this event: 63 + 18 131.644 729 10 1 -34.2438 -98.7488 95.55 + 18 83.1897 407 10 0 -34.2431 -98.7498 94.15 + 18 26.5314 406 10 0 -34.243 -98.75 93.8567 + 18 126.453 729 9 1 -34.2285 -98.7697 65.55 + 18 147.427 406 9 0 -34.228 -98.772 64.15 + 18 142.838 729 8 1 -34.2163 -98.8259 35.55 + 18 93.9543 406 8 0 -34.2126 -98.8363 34.15 + 18 105.588 729 7 1 -34.0716 -99.0532 5.55 + 18 195.31 405 7 0 -34.0599 -99.0842 4.15 + 18 116.606 731 6 1 -33.7852 -99.7957 -24.45 + 18 111.955 401 6 0 -33.7844 -99.7971 -25.85 + 18 121.04 730 5 1 -33.8523 -99.8825 -54.45 + 18 11.2895 731 5 1 -33.85 -99.8885 -54.8368 + 18 145.592 401 5 0 -33.8384 -99.9053 -55.85 + 18 108.769 733 4 1 -33.3849 -100.163 -84.45 + 18 125.896 399 4 0 -33.3579 -100.23 -85.85 + 18 113.325 736 3 1 -32.7328 -101.718 -114.45 + 18 189.83 391 3 0 -32.6761 -101.757 -115.85 + 18 89.259 742 2 1 -31.469 -102.417 -144.45 + 18 35.7364 743 2 1 -31.45 -102.417 -144.743 + 18 91.81 388 2 0 -31.3795 -102.423 -145.85 + 18 110.984 752 1 1 -29.5461 -102.579 -174.45 + 18 87.0106 387 1 0 -29.4442 -102.587 -175.85 + 18 99.3183 763 0 1 -27.376 -102.886 -204.45 + 18 118.66 386 0 0 -27.2633 -102.878 -205.85 + 18 391.136 730 4 1 -33.8749 -100.091 -84.45 + 18 263.691 400 4 0 -33.8576 -100.076 -85.85 + 18 155.483 732 3 1 -33.4723 -99.699 -114.45 + 18 210.785 402 3 0 -33.4449 -99.6709 -115.85 + 18 105.213 735 2 1 -32.8544 -98.9279 -144.45 + 18 130.97 406 2 0 -32.8476 -98.9086 -145.85 + 18 139.856 736 1 1 -32.7344 -98.3031 -174.45 + 18 312.799 409 1 0 -32.761 -98.292 -175.85 + 18 128.344 733 0 1 -33.4293 -98.276 -204.45 + 18 204.302 409 0 0 -33.5105 -98.2899 -205.85 + 18 123.588 400 3 0 -33.1355 -99.9937 -115.85 + 18 117.625 773 2 1 -25.3508 -112.022 -144.45 + 18 57.4757 342 2 0 -25.0519 -111.597 -145.85 + 18 79.9568 343 2 0 -25.0245 -111.55 -145.969 + 18 277.357 820 1 1 -15.9563 -95.4538 -174.45 + 18 50.7453 412 1 0 -16.8755 -97.5957 -175.85 + 18 93.6963 411 1 0 -16.9516 -97.75 -175.944 + 18 73.7007 410 1 0 -17.0052 -97.95 -176.021 + 18 240.752 731 4 1 -33.8499 -100.191 -84.8078 + 18 199.8 729 3 1 -34.2314 -100.554 -114.45 + 18 91.2276 397 3 0 -34.2372 -100.559 -115.85 + 18 96.6266 729 2 1 -34.206 -100.645 -144.45 + 18 211.366 397 2 0 -34.1876 -100.679 -145.85 + 18 119.384 731 1 1 -33.837 -101.419 -174.45 + 18 113.146 393 1 0 -33.8135 -101.461 -175.85 + 18 168.989 732 0 1 -33.493 -102.442 -204.45 + 18 102.949 388 0 0 -33.513 -102.472 -205.85 + 18 9.29203 727 3 1 -34.4549 -100.528 -114.45 + 18 56.1638 415 3 0 -38.9687 -97.15 -116.157 + 18 75.0303 396 3 0 -33.9172 -100.864 -115.85 + 18 31.7469 728 3 1 -34.25 -100.553 -114.758 + 18 84.0977 401 3 0 -34.6773 -99.9499 -115.917 + 18 4.15769 403 3 0 -34.8919 -99.55 -116.239 + 18 152.192 634 3 0 -42.238 -53.162 -116.25 + 18 36.45 635 3 0 -42.3837 -53.0498 -115.96 + 18 23.4681 688 3 1 -42.427 -52.5984 -114.849 + 18 292.25 687 3 1 -42.45 -52.5658 -114.8 + 18 43.1394 686 3 1 -42.65 -52.5238 -114.592 +Number of digits in this event: 29 Using G4ParticleGun... -Particle energy: 2.57834 LIN +Particle energy: 9.66692 LIN Particle: e- Event: 19 -Number of tracker hits in this event: 69 - 19 189.061 708 11 1 -38.268 65.6982 125.55 - 19 115.252 1228 11 0 -38.269 65.6991 124.15 - 19 118.653 708 10 1 -38.2806 65.7356 95.55 - 19 133.942 1228 10 0 -38.2816 65.7383 94.15 - 19 153.611 708 9 1 -38.293 65.7831 65.55 - 19 106.594 1228 9 0 -38.2915 65.7814 64.15 - 19 102.785 708 8 1 -38.2586 65.7528 35.55 - 19 202.276 1228 8 0 -38.261 65.7518 34.15 - 19 167.465 708 7 1 -38.3093 65.7349 5.55 - 19 109.302 1228 7 0 -38.3071 65.7358 4.15 - 19 112.335 708 6 1 -38.2634 65.7238 -24.45 - 19 120.4 1228 6 0 -38.2587 65.7232 -25.85 - 19 147.07 709 5 1 -38.1552 65.7164 -54.45 - 19 165.224 1228 5 0 -38.1502 65.7167 -55.85 - 19 124.474 709 4 1 -38.0536 65.7178 -84.45 - 19 135.799 1228 4 0 -38.0443 65.7181 -85.85 - 19 393.578 710 3 1 -37.8609 65.7305 -114.45 - 19 181.987 1228 3 0 -37.8536 65.7244 -115.85 - 19 137.18 711 2 1 -37.6933 65.6061 -144.45 - 19 147.618 1227 2 0 -37.6823 65.6012 -145.85 - 19 118.662 712 1 1 -37.4714 65.5051 -174.45 - 19 115.707 1227 1 0 -37.463 65.502 -175.85 - 19 112.612 713 0 1 -37.283 65.4363 -204.45 - 19 217.975 1226 0 0 -37.2774 65.4313 -205.85 - 19 5.09107 1521 7 0 170.694 124.35 3.96189 - 19 236.655 714 0 1 -37.2499 65.4122 -204.502 - 19 51.4488 715 0 1 -37.0496 65.2338 -204.752 - 19 97.8259 1221 0 0 -35.9506 64.4032 -205.85 - 19 41.6726 1220 0 0 -35.7331 64.25 -206.126 - 19 62.2146 1056 0 0 -30.2189 31.4026 -206.25 - 19 88.3785 1055 0 0 -30.2565 31.2498 -206.137 - 19 28.5944 1054 0 0 -30.375 31.05 -205.912 - 19 39.3191 744 0 1 -31.1782 30.5467 -204.85 - 19 197.851 743 0 1 -31.25 30.4741 -204.721 - 19 76.9502 742 0 1 -31.45 30.0198 -204.554 - 19 68.3257 741 0 1 -31.65 29.957 -204.701 - 19 86.4398 740 0 1 -31.8504 29.9242 -204.756 - 19 242.35 739 0 1 -32.05 29.8629 -204.74 - 19 49.2059 1045 0 0 -32.1682 29.0741 -205.85 - 19 26.4317 738 0 1 -32.424 28.4315 -204.85 - 19 55.136 1035 0 0 -32.3773 27.1837 -205.85 - 19 32.1206 1229 3 0 -37.2821 65.85 -115.909 - 19 94.3429 716 3 1 -36.7373 67.292 -114.85 - 19 237.859 715 3 1 -36.85 67.4011 -114.77 - 19 312.678 711 1 1 -37.6781 65.8106 -174.45 - 19 377.226 1228 1 0 -37.6532 65.7551 -175.85 - 19 164.138 717 0 1 -36.52 64.6616 -204.45 - 19 122.527 1222 0 0 -36.4312 64.5669 -205.85 - 19 18.1101 709 8 1 -38.108 65.808 35.55 - 19 57.9573 710 8 1 -38.05 65.8081 35.5048 - 19 71.3726 711 8 1 -37.85 65.8012 35.342 - 19 9.90911 712 8 1 -37.65 65.7863 35.1744 - 19 97.0446 1227 8 0 -36.1744 65.6498 33.9743 - 19 30.8074 752 8 0 5.07642 -29.5003 33.75 - 19 61.1363 751 8 0 5.10639 -29.65 33.8041 - 19 60.4566 750 8 0 5.15869 -29.8502 33.8802 - 19 51.0928 749 8 0 5.21232 -30.05 33.9677 - 19 110.002 748 8 0 5.27882 -30.2505 34.0539 - 19 4.48015 747 8 0 5.36227 -30.45 34.1403 - 19 51.5808 930 8 1 6.19183 -32.5409 35.15 - 19 267.484 931 8 1 6.25 -32.6936 35.2194 - 19 0.250972 932 8 1 6.45 -33.1878 35.5483 - 19 112.585 844 9 0 -16.7776 -11.2229 63.7503 - 19 152.566 845 9 0 -17.0512 -11.05 63.8916 - 19 47.7702 846 9 0 -17.5655 -10.8498 64.0932 - 19 39.4709 779 9 1 -24.162 -5.18783 65.15 - 19 103.658 778 9 1 -24.25 -5.10542 65.1697 - 19 106.038 777 9 1 -24.4502 -4.91579 65.3154 - 19 15.0988 776 9 1 -24.6501 -4.75004 65.5009 -Number of digits in this event: 27 +Number of tracker hits in this event: 66 + 19 108.836 733 8 1 -33.4034 138.956 35.55 + 19 239.316 1594 8 0 -33.4038 138.956 34.15 + 19 131.067 733 7 1 -33.4091 138.949 5.55 + 19 129.998 1593 7 0 -33.4098 138.949 4.15 + 19 96.5358 733 6 1 -33.4232 138.934 -24.45 + 19 117.358 1593 6 0 -33.4234 138.934 -25.85 + 19 98.6432 733 5 1 -33.4263 138.928 -54.45 + 19 254.105 1593 5 0 -33.4266 138.929 -55.85 + 19 216.655 733 4 1 -33.4261 138.952 -84.45 + 19 172.121 1594 4 0 -33.4264 138.952 -85.85 + 19 106.417 733 3 1 -33.4355 138.965 -114.45 + 19 262.409 1594 3 0 -33.4357 138.966 -115.85 + 19 175.456 733 2 1 -33.4388 138.977 -144.45 + 19 203.535 1594 2 0 -33.4391 138.978 -145.85 + 19 113.78 733 1 1 -33.4468 138.998 -174.45 + 19 111.404 1594 1 0 -33.4475 138.999 -175.85 + 19 187.848 732 0 1 -33.4645 139.031 -204.45 + 19 119.651 1594 0 0 -33.4634 139.033 -205.85 + 19 303.096 1763 1 0 83.4215 172.823 -176.25 + 19 167.12 1762 1 0 83.6525 172.75 -175.963 + 19 18.0656 104 1 0 93.8684 -159.15 -176.042 + 19 264.532 103 1 0 93.8956 -159.35 -176.068 + 19 75.894 102 1 0 94.0521 -159.55 -176.055 + 19 257.736 1593 2 0 -33.4195 138.95 -146.147 + 19 178.147 1593 3 0 -33.3976 138.95 -116.175 + 19 11.8306 1307 3 0 -12.2793 81.4869 -116.249 + 19 158.354 1306 3 0 -12.2617 81.45 -116.22 + 19 20.5488 829 3 1 -14.1882 81.0777 -114.85 + 19 131.554 828 3 1 -14.2502 81.0821 -114.808 + 19 24.7251 1301 3 0 -14.7977 80.2662 -115.85 + 19 44.3487 1300 3 0 -14.8102 80.25 -115.892 + 19 48.3066 820 3 1 -15.8895 80.5028 -114.85 + 19 166.219 1299 3 0 -17.2601 79.8663 -115.85 + 19 5.08778 1298 3 0 -17.2731 79.85 -115.894 + 19 0.511407 1351 2 0 -9.0406 90.4803 -145.85 + 19 157.313 1592 5 0 -33.4376 138.75 -56.0244 + 19 154.405 1720 5 0 41.9165 164.164 -56.25 + 19 227.75 1601 6 0 -40.6993 140.429 -26.2492 + 19 48.4294 693 6 1 -41.3851 140.774 -24.85 + 19 78.9643 692 6 1 -41.45 140.806 -24.7176 + 19 310.713 732 4 1 -33.4576 138.905 -84.45 + 19 239.055 1593 4 0 -33.4513 138.892 -85.85 + 19 115.006 734 3 1 -33.2136 138.587 -114.45 + 19 107.831 1591 3 0 -33.1915 138.547 -115.85 + 19 220.778 736 2 1 -32.7918 137.849 -144.45 + 19 105.171 1588 2 0 -32.7912 137.818 -145.85 + 19 123.238 736 1 1 -32.8386 137.254 -174.45 + 19 167.867 1585 1 0 -32.8105 137.22 -175.85 + 19 283.225 739 0 1 -32.2162 136.388 -204.45 + 19 97.1107 1581 0 0 -32.1902 136.371 -205.85 + 19 347.114 731 3 1 -33.7861 138.825 -114.45 + 19 86.1419 729 2 1 -34.2443 138.837 -144.45 + 19 57.2971 728 2 1 -34.25 138.837 -144.677 + 19 137.112 723 1 1 -35.2667 138.787 -174.45 + 19 121.097 1593 1 0 -35.3181 138.802 -175.85 + 19 119.616 718 0 1 -36.3954 139.172 -204.45 + 19 114.792 1595 0 0 -36.4283 139.182 -205.85 + 19 197.174 1595 3 0 -33.7067 139.158 -115.85 + 19 105.852 742 2 1 -31.519 147.642 -144.45 + 19 112.982 1639 2 0 -31.6444 148.011 -145.85 + 19 112.535 735 1 1 -32.9656 153.704 -174.45 + 19 142.046 1668 1 0 -32.8764 153.837 -175.85 + 19 337.543 744 0 1 -31.165 157.677 -204.45 + 19 3.26683 1686 0 0 -31.166 157.353 -205.85 + 19 239.113 1685 0 0 -31.1661 157.35 -205.863 + 19 180.37 1595 8 0 -33.398 139.15 33.9856 +Number of digits in this event: 39 Using G4ParticleGun... -Particle energy: 5.62735 LIN +Particle energy: 3.61018 LIN Particle: e- Event: 20 -Number of tracker hits in this event: 30 - 20 108.507 1527 8 1 125.657 -69.1502 35.55 - 20 130.356 554 8 0 125.658 -69.15 34.15 - 20 100.951 1527 7 1 125.685 -69.1415 5.55 - 20 128.822 554 7 0 125.686 -69.1408 4.15 - 20 109.239 1527 6 1 125.705 -69.1292 -24.45 - 20 116.819 554 6 0 125.704 -69.1248 -25.85 - 20 115.311 1527 5 1 125.712 -69.0416 -54.45 - 20 110.432 555 5 0 125.711 -69.0365 -55.85 - 20 127.115 1527 4 1 125.689 -68.9425 -84.45 - 20 90.4074 555 4 0 125.693 -68.9339 -85.85 - 20 129.164 1528 3 1 125.768 -68.7675 -114.45 - 20 106.518 556 3 0 125.767 -68.7611 -115.85 - 20 521.339 1528 2 1 125.753 -68.6265 -144.45 - 20 166.723 557 2 0 125.755 -68.6225 -145.85 - 20 516.549 1528 1 1 125.78 -68.5407 -174.45 - 20 110.977 557 1 0 125.784 -68.5385 -175.85 - 20 321.92 1528 0 1 125.879 -68.4734 -204.45 - 20 177.86 557 0 0 125.882 -68.4642 -205.85 - 20 63.4981 266 0 0 156.14 -126.75 -205.997 - 20 256.705 556 2 0 125.81 -68.65 -145.972 - 20 314.082 1527 2 1 125.75 -68.627 -144.613 - 20 313.312 555 2 0 125.785 -68.9839 -145.85 - 20 243.851 555 1 0 125.765 -68.9764 -175.85 - 20 110.385 1527 0 1 125.654 -68.8063 -204.45 - 20 109.837 556 0 0 125.646 -68.8008 -205.85 - 20 118.59 555 0 0 125.948 -68.9912 -205.85 - 20 47.1606 1529 2 1 125.95 -69.0698 -144.73 - 20 170.107 554 2 0 127.235 -69.1952 -145.85 - 20 196.192 593 2 0 116.706 -61.2902 -146.25 - 20 152.547 592 2 0 116.563 -61.45 -146.134 -Number of digits in this event: 18 -Using G4ParticleGun... -Particle energy: 8.22844 LIN +Number of tracker hits in this event: 205 + 20 228.05 1232 11 1 66.5518 44.106 125.55 + 20 115.005 1120 11 0 66.5537 44.1164 124.15 + 20 180.883 1232 10 1 66.5999 44.3313 95.55 + 20 116.585 1121 10 0 66.5989 44.34 94.15 + 20 147.721 1232 9 1 66.5783 44.5119 65.55 + 20 132.573 1122 9 0 66.5735 44.5206 64.15 + 20 173.459 1232 8 1 66.4732 44.6944 35.55 + 20 131.548 1123 8 0 66.4692 44.7004 34.15 + 20 378.193 1231 7 1 66.3824 44.8177 5.55 + 20 106.21 1123 7 0 66.3746 44.826 4.15 + 20 163.649 1230 6 1 66.2236 44.988 -24.45 + 20 106.557 1124 6 0 66.2151 44.9937 -25.85 + 20 283.761 1229 5 1 66.0346 45.1226 -54.45 + 20 499.819 1125 5 0 66.0245 45.1357 -55.85 + 20 233.349 1228 4 1 65.8183 45.4132 -84.45 + 20 127.209 1126 4 0 65.8097 45.4271 -85.85 + 20 9.40448 1227 3 1 65.6419 45.715 -114.45 + 20 117.442 1228 3 1 65.65 45.7123 -114.488 + 20 121.46 1127 3 0 65.9121 45.6117 -115.85 + 20 119.498 1254 2 1 70.9208 42.2055 -144.45 + 20 74.634 1110 2 0 70.9576 42.0718 -145.85 + 20 124.948 1109 2 0 70.9678 42.05 -146.084 + 20 105.727 1265 1 1 73.1624 39.2176 -174.45 + 20 9.49935 1095 1 0 73.24 39.055 -175.85 + 20 108.064 1094 1 0 73.242 39.05 -175.891 + 20 90.8343 1270 0 1 74.1975 35.7592 -204.45 + 20 98.56 1269 0 1 74.0499 35.8855 -204.681 + 20 14.8642 1081 0 0 73.3145 36.4363 -205.85 + 20 157.147 1082 0 0 73.2965 36.4502 -205.878 + 20 372.245 1227 0 1 65.4865 46.1416 -204.45 + 20 263.36 1130 0 0 65.4661 46.1426 -205.85 + 20 2.84159 1226 0 1 65.45 46.1335 -204.846 + 20 33.456 503 9 0 113.604 -79.4018 63.7502 + 20 226.75 502 9 0 113.646 -79.45 63.7699 + 20 594.216 1124 7 0 66.4385 44.8628 4.15 + 20 117.461 1231 6 1 66.3324 45.0624 -24.45 + 20 128.915 1125 6 0 66.3364 45.0845 -25.85 + 20 145.073 1231 5 1 66.3945 45.5409 -54.45 + 20 140.039 1127 5 0 66.4115 45.5572 -55.85 + 20 252.131 1233 4 1 66.753 45.871 -84.45 + 20 310.613 1129 4 0 66.7739 45.8823 -85.85 + 20 175.954 1235 3 1 67.195 46.0756 -114.45 + 20 118.716 1130 3 0 67.2228 46.0691 -115.85 + 20 2.78062 1238 2 1 67.8495 45.7146 -144.45 + 20 94.7176 1239 2 1 67.85 45.7145 -144.468 + 20 120.238 1128 2 0 67.8903 45.7075 -145.85 + 20 105.245 1243 1 1 68.8264 45.6634 -174.45 + 20 163.548 1128 1 0 68.8661 45.6548 -175.85 + 20 148.755 1248 0 1 69.6884 45.4462 -204.45 + 20 146.561 1126 0 0 69.7291 45.4452 -205.85 + 20 9.22114 1234 3 1 66.9564 45.7321 -114.45 + 20 58.5054 1294 3 1 78.9254 22.2548 -114.45 + 20 324.99 1293 3 1 78.8499 22.2819 -114.556 + 20 108.197 1128 3 0 66.9144 45.8096 -115.85 + 20 171.777 1082 3 0 80.8478 36.6159 -116.25 + 20 110.322 1081 3 0 81.2701 36.45 -115.938 + 20 236.666 1310 3 1 82.1343 34.0534 -114.85 + 20 8.78925 1311 3 1 82.25 33.5342 -114.473 + 20 137.26 1231 4 1 66.3475 45.8239 -84.45 + 20 67.807 1232 4 1 66.4501 45.7642 -84.5248 + 20 74.0561 1123 4 0 67.9705 44.7737 -85.8503 + 20 103.162 1122 4 0 68.1538 44.65 -86.0311 + 20 183.803 1359 3 1 92.061 29.97 -114.45 + 20 40.002 1360 3 1 92.15 29.9252 -114.702 + 20 49.3651 1048 3 0 92.4779 29.6587 -115.85 + 20 102.358 1047 3 0 92.4885 29.6499 -115.888 + 20 76.5458 1430 2 1 106.258 19.7575 -144.45 + 20 47.2824 1429 2 1 106.15 19.802 -144.715 + 20 102.947 998 2 0 105.652 19.7235 -145.85 + 20 19.9522 1363 1 1 92.9225 18.8775 -174.45 + 20 111.26 1364 1 1 92.9504 18.8896 -174.483 + 20 82.5895 1365 1 1 93.15 18.9821 -174.692 + 20 44.7037 997 1 0 94.2939 19.5791 -175.85 + 20 126.661 998 1 0 94.4149 19.65 -175.981 + 20 21.86 939 1 0 114.36 7.92099 -176.25 + 20 128.404 938 1 0 114.359 7.85 -176.166 + 20 12.5268 937 1 0 114.371 7.65 -175.884 + 20 1.51717 1470 1 1 114.153 7.29195 -174.85 + 20 168.829 1469 1 1 114.15 7.28626 -174.839 + 20 11.7762 1468 1 1 113.95 7.16335 -174.465 + 20 80.4134 945 2 0 111.749 9.12237 -146.25 + 20 41.9278 944 2 0 111.774 9.05 -145.954 + 20 136.4 1460 2 1 112.245 8.44554 -144.85 + 20 63.5153 1461 2 1 112.35 8.22227 -144.514 + 20 82.1932 1462 2 1 112.55 8.14919 -144.475 + 20 45.0931 1463 2 1 112.75 8.13771 -144.529 + 20 100.363 1464 2 1 112.95 8.12012 -144.58 + 20 99.7577 1465 2 1 113.15 8.01149 -144.638 + 20 55.5374 1466 2 1 113.35 7.93248 -144.684 + 20 58.5966 1467 2 1 113.55 7.98941 -144.679 + 20 49.0112 1468 2 1 113.75 7.98033 -144.775 + 20 55.5145 938 2 0 114.155 7.73635 -145.85 + 20 151.977 937 2 0 114.226 7.65 -145.941 + 20 148.066 936 2 0 114.201 7.45 -146.156 + 20 253.104 1233 3 1 66.7083 47.4892 -114.451 + 20 122.683 1138 3 0 66.8873 47.7234 -115.851 + 20 34.5045 1252 2 1 70.6195 52.601 -144.45 + 20 112.187 1253 2 1 70.65 52.6162 -144.557 + 20 113.917 1163 2 0 71.0017 52.8031 -145.85 + 20 32.4335 1164 2 0 71.0908 52.85 -146.182 + 20 109.975 1293 1 1 78.6987 57.1936 -174.45 + 20 124.291 1187 1 0 79.0906 57.573 -175.85 + 20 30.9137 1188 1 0 79.1672 57.65 -176.141 + 20 231.428 1332 0 1 86.4709 65.0827 -204.45 + 20 206.146 1227 0 0 87.0021 65.4741 -205.85 + 20 59.7042 1229 2 1 65.8908 46.2135 -144.45 + 20 88.3151 1230 2 1 66.05 46.1107 -144.558 + 20 72.5195 1231 2 1 66.25 45.9662 -144.697 + 20 362.061 1232 2 1 66.4501 45.8358 -144.787 + 20 20.1667 1233 2 1 66.65 45.5693 -144.833 + 20 91.7081 1108 2 0 69.4072 41.85 -145.945 + 20 39.1551 1107 2 0 69.5232 41.65 -146.163 + 20 90.5441 1326 1 1 85.4069 25.9056 -174.45 + 20 26.4686 1327 1 1 85.45 25.7189 -174.744 + 20 59.3391 1026 1 0 85.9171 25.32 -175.85 + 20 69.2941 1025 1 0 86.0363 25.2499 -176.044 + 20 10.6723 1227 6 1 65.4513 44.6479 -24.45 + 20 105.635 1226 6 1 65.45 44.6478 -24.4828 + 20 144.213 1123 6 0 65.3901 44.6531 -25.85 + 20 151.029 1226 5 1 65.3505 45.0837 -54.4509 + 20 235.561 1227 4 1 65.4557 46.5344 -84.45 + 20 128.79 1132 4 0 65.5213 46.6208 -85.85 + 20 129.315 1140 3 0 66.8072 48.164 -115.85 + 20 4.25416 1117 2 0 66.3778 43.4543 -145.85 + 20 107.223 1116 2 0 66.3756 43.45 -145.869 + 20 113.027 1216 1 1 63.3904 37.0496 -174.45 + 20 95.4958 1083 1 0 63.2156 36.7258 -175.85 + 20 27.6483 1082 1 0 63.1735 36.65 -176.186 + 20 152.542 1196 0 1 59.3897 30.5847 -204.45 + 20 135.742 1051 0 0 59.2191 30.3607 -205.85 + 20 470.507 1233 7 1 66.7167 44.9742 5.55 + 20 103.381 1240 6 1 68.1532 45.5716 -24.45 + 20 122.447 1128 6 0 68.3643 45.6666 -25.85 + 20 157.192 1262 5 1 72.4501 47.3455 -54.45 + 20 46.7933 1135 5 0 72.6569 47.0729 -55.85 + 20 87.2876 1134 5 0 72.6748 47.05 -55.9613 + 20 171.278 1273 4 1 74.6588 40.9892 -84.4503 + 20 45.1753 1104 4 0 75.0236 40.8653 -85.85 + 20 99.6596 1103 4 0 75.0571 40.85 -85.9671 + 20 125.121 1324 3 1 85.0107 32.9556 -114.45 + 20 55.2404 1059 3 0 85.131 31.9992 -115.85 + 20 68.601 1058 3 0 85.1702 31.8499 -116.055 + 20 107.45 909 3 0 88.2404 2.01788 -116.25 + 20 204.132 1339 3 1 88.0355 1.67425 -114.85 + 20 200.092 1340 3 1 88.0807 1.09593 -114.45 + 20 169.633 1338 3 1 87.8496 1.1119 -114.592 + 20 20.4829 914 3 0 87.8641 2.97443 -115.85 + 20 70.7487 915 3 0 87.8697 3.05013 -115.903 + 20 232.172 916 3 0 87.8618 3.25 -116.045 + 20 366.159 818 3 0 51.1503 -16.2608 -116.25 + 20 95.9113 1337 3 1 87.65 1.20725 -114.712 + 20 86.6934 1336 3 1 87.45 1.2897 -114.563 + 20 78.6824 1335 3 1 87.25 1.21807 -114.463 + 20 150.297 1341 3 1 88.25 1.79274 -114.607 + 20 191.602 1342 3 1 88.45 1.92854 -114.562 + 20 131.807 1255 6 1 71.1097 46.4883 -24.45 + 20 148.622 1134 6 0 71.0656 46.9097 -25.8502 + 20 167.909 1250 5 1 70.1993 55.0938 -54.4505 + 20 69.5997 1178 5 0 69.9679 55.7576 -55.85 + 20 69.8387 1179 5 0 69.941 55.85 -56.0279 + 20 133.653 1257 4 0 65.2922 71.4751 -85.851 + 20 28.763 1195 3 1 59.0825 83.2348 -114.45 + 20 105.268 1194 3 1 59.05 83.2794 -114.545 + 20 162.737 1319 3 0 58.5984 83.8563 -115.85 + 20 297.122 1130 2 1 46.2353 98.3565 -144.45 + 20 21.8157 1393 2 0 45.8896 98.9256 -145.851 + 20 97.6491 1394 2 0 45.8738 98.95 -145.919 + 20 6.53344 1215 2 0 33.2701 63.0785 -146.25 + 20 59.1795 1214 2 0 33.2658 63.05 -146.232 + 20 84.1166 1213 2 0 33.2469 62.85 -146.08 + 20 20.426 1212 2 0 33.236 62.65 -145.905 + 20 184.404 1065 2 1 33.2253 61.5594 -144.85 + 20 54.1426 1066 2 1 33.25 61.2339 -144.519 + 20 44.0505 1064 2 1 32.8866 60.2704 -144.45 + 20 123.214 1195 2 0 34.2387 59.2363 -145.85 + 20 121.422 1194 2 0 34.504 59.05 -146.008 + 20 90.9147 1193 2 0 34.801 58.85 -146.107 + 20 46.0573 1192 2 0 35.1154 58.6498 -146.211 + 20 212.004 1131 2 0 169.951 46.2988 -146.25 + 20 108.867 1132 2 0 170.569 46.45 -145.92 + 20 47.9991 1759 2 1 172.055 47.8717 -144.85 + 20 78.0022 1760 2 1 172.15 47.9705 -144.786 + 20 75.3664 1761 2 1 172.35 48.1289 -144.694 + 20 302.09 1762 2 1 172.55 48.2983 -144.604 + 20 46.182 1764 2 1 172.976 48.3898 -144.45 + 20 82.87 1765 2 1 173.15 48.4759 -144.533 + 20 159.184 1766 2 1 173.35 48.5888 -144.616 + 20 34.0753 1151 2 0 174.085 50.3482 -145.85 + 20 130.772 1152 2 0 174.137 50.45 -145.927 + 20 75.9679 1153 2 0 174.267 50.65 -146.049 + 20 93.4332 1154 2 0 174.445 50.85 -146.101 + 20 60.7933 1155 2 0 174.498 51.05 -146.176 + 20 140.199 1763 2 1 172.917 48.4154 -144.45 + 20 62.837 1129 2 1 46.0499 98.8528 -144.769 + 20 47.3619 1402 2 0 45.8167 100.589 -145.85 + 20 51.2003 1403 2 0 45.7907 100.75 -145.947 + 20 61.8579 1404 2 0 45.7613 100.95 -146.09 + 20 7.37994 1405 2 0 45.744 101.15 -146.233 + 20 121.207 1124 1 1 44.9308 140.785 -174.45 + 20 28.4862 1601 1 0 45.174 140.375 -175.85 + 20 81.0994 1600 1 0 45.2044 140.35 -175.967 + 20 93.9512 1136 5 1 47.45 35.8002 -54.4698 + 20 57.7432 1135 5 1 47.2495 35.5974 -54.5114 + 20 145.132 1134 5 1 47.05 35.5384 -54.6039 + 20 271.373 1133 5 1 46.8499 35.4883 -54.624 +Number of digits in this event: 85 +Using G4ParticleGun... +Particle energy: 9.6684 LIN Particle: e- Event: 21 -Number of tracker hits in this event: 84 - 21 127.186 578 11 1 -64.3656 49.3148 125.55 - 21 127.689 1146 11 0 -64.3655 49.3151 124.15 - 21 155.387 578 10 1 -64.362 49.3238 95.55 - 21 125.255 1146 10 0 -64.3617 49.3253 94.15 - 21 175.424 578 9 1 -64.3599 49.3518 65.55 - 21 130.647 1146 9 0 -64.3603 49.3525 64.15 - 21 125.069 578 8 1 -64.3674 49.3655 35.55 - 21 116.649 1146 8 0 -64.3689 49.3663 34.15 - 21 145.091 578 7 1 -64.4048 49.3844 5.55 - 21 140.617 1146 7 0 -64.4076 49.3849 4.15 - 21 118.108 577 6 1 -64.4672 49.3909 -24.45 - 21 118.322 1146 6 0 -64.4696 49.3922 -25.85 - 21 297.858 577 5 1 -64.5193 49.4202 -54.45 - 21 107.249 1146 5 0 -64.5213 49.4205 -55.85 - 21 140.531 577 4 1 -64.5582 49.4272 -84.45 - 21 115.782 1146 4 0 -64.5604 49.4289 -85.85 - 21 100.261 577 3 1 -64.6077 49.4635 -114.45 - 21 113.4 1147 3 0 -64.6105 49.4656 -115.85 - 21 315.297 576 2 1 -64.6641 49.5107 -144.45 - 21 150.393 1147 2 0 -64.6679 49.5132 -145.85 - 21 335.4 576 1 1 -64.7484 49.5742 -174.45 - 21 122.687 1147 1 0 -64.7515 49.5776 -175.85 - 21 124.822 576 0 1 -64.8148 49.6472 -204.45 - 21 135.098 1148 0 0 -64.818 49.6511 -205.85 - 21 47.9194 117 7 0 -49.4585 -156.603 3.75 - 21 62.8552 233 8 0 -28.0698 -133.442 33.75 - 21 199.864 234 8 0 -28.0441 -133.35 33.778 - 21 113.455 116 7 0 -49.428 -156.75 3.89904 - 21 7.81779 1189 1 1 57.9984 179.784 -174.85 - 21 213.046 1190 1 1 58.0501 179.835 -174.709 - 21 96.324 1191 1 1 58.25 179.826 -174.587 - 21 106.358 1397 3 1 99.55 82.7461 -114.675 - 21 110.339 1034 0 0 -54.2965 26.947 -206.25 - 21 152.314 627 0 1 -54.4944 27.0097 -204.85 - 21 84.9178 628 0 1 -54.45 26.9396 -204.496 - 21 467.914 578 5 1 -64.45 49.545 -54.727 - 21 59.483 520 3 1 -75.85 -92.2905 -114.735 - 21 114.992 576 3 1 -64.6927 49.5058 -114.45 - 21 98.5848 1149 3 0 -64.9177 49.9308 -115.85 - 21 16.9296 1150 3 0 -64.9482 50.0501 -116.173 - 21 123.708 562 2 1 -67.6098 58.9269 -144.45 - 21 88.6221 1199 2 0 -67.6525 59.8711 -145.85 - 21 75.8063 1200 2 0 -67.6498 60.0501 -146.051 - 21 4.38073 1201 2 0 -67.6435 60.2502 -146.243 - 21 161.257 567 1 1 -66.5557 91.4436 -174.45 - 21 55.4712 566 1 1 -66.65 91.5698 -174.689 - 21 1.10124 1359 1 0 -67.0576 92.1488 -175.85 - 21 100.801 1360 1 0 -67.0585 92.15 -175.852 - 21 59.961 1571 1 0 -88.5295 134.385 -176.25 - 21 121.935 1572 1 0 -88.6537 134.55 -176.09 - 21 39.8915 1573 1 0 -88.9614 134.75 -175.908 - 21 98.1047 449 1 1 -90.15 135.711 -174.797 - 21 100.426 448 1 1 -90.3501 135.868 -174.641 - 21 396.654 447 1 1 -90.55 136.076 -174.537 - 21 94.1798 1580 1 0 -90.9076 136.264 -175.85 - 21 28.6831 1579 1 0 -91.0373 136.15 -176.162 - 21 322.569 1147 5 0 -64.4572 49.4953 -55.85 - 21 129.466 571 4 1 -65.6995 48.6502 -84.45 - 21 236.48 1142 4 0 -65.749 48.5659 -85.85 - 21 129.33 566 3 1 -66.6567 46.7324 -114.45 - 21 133.986 1132 3 0 -66.7104 46.6418 -115.85 - 21 205.707 560 2 1 -68.0234 44.7732 -144.45 - 21 4.96548 1123 2 0 -67.9706 44.8483 -145.85 - 21 105.106 1124 2 0 -67.9696 44.85 -145.88 - 21 129.118 573 1 1 -65.324 47.3073 -174.45 - 21 186.204 1134 1 0 -65.1325 46.8895 -175.85 - 21 106.87 1133 1 0 -65.1168 46.85 -175.967 - 21 73.0633 598 0 1 -60.3623 37.1953 -204.45 - 21 88.6254 599 0 1 -60.25 37.3722 -204.624 - 21 193.633 1089 0 0 -59.8829 37.867 -205.85 - 21 16.135 1088 0 0 -59.8043 37.85 -206.205 - 21 134.411 550 1 1 -69.9545 47.3288 -174.45 - 21 3.13516 549 1 1 -70.05 47.1332 -174.838 - 21 16.8603 1135 1 0 -70.6268 47.0549 -175.85 - 21 346.903 958 1 0 -87.7985 11.8023 -176.25 - 21 111.773 581 4 1 -63.7858 48.6891 -84.45 - 21 118.333 582 3 1 -63.4559 45.0878 -114.451 - 21 294.349 1124 3 0 -63.4743 45.0213 -115.851 - 21 111.27 1119 2 0 -64.9209 44.036 -145.85 - 21 28.4398 563 1 1 -67.4418 42.9087 -174.45 - 21 155.872 562 1 1 -67.4501 42.9036 -174.543 - 21 92.7912 1113 1 0 -67.5626 42.812 -175.85 - 21 111.764 547 0 1 -70.5093 40.6289 -204.451 - 21 242.622 1102 0 0 -70.8243 40.5156 -205.85 -Number of digits in this event: 42 +Number of tracker hits in this event: 74 + 21 126.334 1429 10 1 106.106 13.3438 95.55 + 21 120.475 966 10 0 106.106 13.3438 94.15 + 21 122.405 1429 9 1 106.095 13.3422 65.55 + 21 102.98 966 9 0 106.094 13.3405 64.15 + 21 223.42 1429 8 1 106.073 13.3058 35.55 + 21 111.407 966 8 0 106.073 13.3037 34.15 + 21 454.36 1429 7 1 106.07 13.2619 5.55 + 21 408.401 966 7 0 106.071 13.2605 4.15 + 21 302.402 1429 6 1 106.076 13.2308 -24.45 + 21 128.804 965 6 0 106.076 13.2294 -25.85 + 21 320.086 1429 5 1 106.062 13.197 -54.45 + 21 133.213 965 5 0 106.061 13.1941 -55.85 + 21 291.605 1429 4 1 106.045 13.132 -84.45 + 21 173.581 965 4 0 106.043 13.1279 -85.85 + 21 240.606 1429 3 1 106.013 13.0395 -114.45 + 21 176.523 964 3 0 106.012 13.0355 -115.85 + 21 93.6043 1429 2 1 105.983 12.9512 -144.45 + 21 153.974 964 2 0 105.981 12.9473 -145.85 + 21 92.7015 1429 1 1 105.955 12.8685 -174.45 + 21 159.475 964 1 0 105.953 12.8651 -175.85 + 21 450.995 1428 0 1 105.923 12.7911 -204.45 + 21 459.297 963 0 0 105.921 12.7871 -205.85 + 21 117.935 1539 5 1 128.075 113.573 -54.85 + 21 107.946 762 2 1 -27.45 35.052 -144.612 + 21 279.933 761 2 1 -27.65 35.1682 -144.521 + 21 53.2206 760 2 1 -27.85 35.4239 -144.56 + 21 224.322 1430 4 1 106.15 13.1714 -84.5106 + 21 237.378 1429 0 1 105.972 12.7141 -204.45 + 21 10.9391 965 0 0 105.9 13.1209 -205.85 + 21 69.1757 1423 0 1 104.785 11.9239 -204.85 + 21 331.83 966 6 0 106.06 13.3599 -25.85 + 21 196.887 966 5 0 105.947 13.4432 -55.85 + 21 330.823 1428 4 1 105.811 13.4415 -84.45 + 21 128.864 966 4 0 105.807 13.4419 -85.85 + 21 199.619 1427 3 1 105.701 13.4528 -114.45 + 21 190.333 966 3 0 105.698 13.4436 -115.85 + 21 102.71 1427 2 1 105.66 13.2739 -144.45 + 21 101.953 966 2 0 105.664 13.2657 -145.85 + 21 199.111 1428 1 1 105.753 13.0832 -174.45 + 21 117.683 965 1 0 105.757 13.0713 -175.85 + 21 100.13 967 3 0 105.643 13.45 -116.184 + 21 532.576 967 4 0 105.838 13.5485 -85.8503 + 21 135.05 976 3 0 106.054 15.3728 -115.85 + 21 14.3048 977 3 0 106.075 15.45 -116.211 + 21 111.84 1437 2 1 107.657 21.7947 -144.45 + 21 24.2606 1010 2 0 107.644 22.2288 -145.85 + 21 118.991 1011 2 0 107.643 22.25 -145.919 + 21 145.307 1436 1 1 107.468 30.7149 -174.45 + 21 71.6366 1055 1 0 107.466 31.1808 -175.85 + 21 59.049 1056 1 0 107.465 31.25 -176.058 + 21 105.702 1435 0 1 107.175 40.263 -204.45 + 21 32.3216 1434 0 1 107.15 40.3142 -204.727 + 21 287.504 1102 0 0 107.044 40.5101 -205.85 + 21 70.7828 1427 4 1 105.75 13.2363 -84.6459 + 21 29.1265 961 4 0 105.098 12.339 -85.85 + 21 90.1027 960 4 0 105.064 12.25 -85.9606 + 21 11.1822 959 4 0 105.015 12.05 -86.2134 + 21 219.471 1426 0 1 105.522 13.8622 -204.45 + 21 131.262 968 0 0 105.523 13.8456 -205.85 + 21 97.597 967 0 0 105.552 13.65 -205.971 + 21 131.776 1428 6 1 105.795 13.3728 -24.45 + 21 111.244 1439 5 1 107.98 13.5643 -54.45 + 21 103.833 967 5 0 108.181 13.5631 -55.85 + 21 122.448 1461 4 1 112.43 13.5169 -84.45 + 21 110.682 1472 3 1 114.57 14.0131 -114.45 + 21 103.277 969 3 0 114.675 14.0344 -115.85 + 21 151.055 1483 2 1 116.856 14.7671 -144.451 + 21 144.1 974 2 0 116.983 14.8662 -145.85 + 21 59.8727 1496 1 1 119.511 17.6316 -174.45 + 21 41.8942 1497 1 1 119.55 17.6475 -174.688 + 21 100.486 988 1 0 119.732 17.7231 -175.851 + 21 105.233 1521 0 1 124.486 19.546 -204.45 + 21 52.8274 1522 0 1 124.55 19.5595 -204.766 + 21 95.3313 997 0 0 124.769 19.6027 -205.851 +Number of digits in this event: 41 Using G4ParticleGun... -Particle energy: 6.65469 LIN +Particle energy: 3.32234 LIN Particle: e- Event: 22 -Number of tracker hits in this event: 73 - 22 110.537 1111 11 1 42.2962 64.1632 125.55 - 22 140.32 1220 11 0 42.2959 64.1641 124.15 - 22 142.849 1111 10 1 42.2859 64.1787 95.55 - 22 338.613 1220 10 0 42.2842 64.1804 94.15 - 22 1.41527 1111 9 1 42.25 64.2261 65.55 - 22 100.557 1110 9 1 42.25 64.2261 65.5455 - 22 146.553 1220 9 0 42.2461 64.2248 64.15 - 22 167.927 1110 8 1 42.1396 64.1712 35.55 - 22 120.712 1220 8 0 42.1385 64.1684 34.15 - 22 104.084 1110 7 1 42.1322 64.107 5.55 - 22 119.39 1220 7 0 42.1216 64.0995 4.15 - 22 116.885 1109 6 1 41.8856 63.9507 -24.45 - 22 206.166 1219 6 0 41.8686 63.9403 -25.85 - 22 197.965 1107 5 1 41.5138 63.7458 -54.45 - 22 238.614 1218 5 0 41.4933 63.7414 -55.85 - 22 145.878 1105 4 1 41.0583 63.6455 -84.45 - 22 194.063 1217 4 0 41.0328 63.6424 -85.85 - 22 192.436 1102 3 1 40.5015 63.628 -114.45 - 22 109.573 1217 3 0 40.4646 63.6175 -115.85 - 22 111.745 1098 2 1 39.7487 63.4119 -144.45 - 22 176.749 1216 2 0 39.7075 63.4051 -145.85 - 22 119.425 1094 1 1 38.865 63.3261 -174.45 - 22 111.712 1216 1 0 38.8188 63.3096 -175.85 - 22 257.474 1089 0 1 37.8531 63.0187 -204.45 - 22 111.7 1088 0 1 37.85 63.0183 -204.544 - 22 110.601 1214 0 0 37.8076 63.0144 -205.85 - 22 96.5612 1215 0 0 37.9089 63.1591 -205.85 - 22 15.1964 1216 0 0 37.8695 63.25 -206.182 - 22 75.5686 1090 0 1 38.05 62.8578 -204.672 - 22 207.663 1212 0 0 38.4743 62.6038 -205.85 - 22 33.2866 1216 4 0 40.9095 63.45 -86.1652 - 22 42.4459 1103 4 0 21.0201 40.7833 -86.25 - 22 72.6376 1104 4 0 20.9501 40.85 -86.1558 - 22 122.812 1105 4 0 20.7894 41.0503 -86.1367 - 22 22.0144 1106 4 0 20.4933 41.25 -86.2419 - 22 137.951 1354 4 0 -130.426 91.0514 -86.25 - 22 18.792 1353 4 0 -130.496 90.9492 -86.2278 - 22 191.893 1209 4 0 -167.152 61.9188 -86.25 - 22 166.973 1208 4 0 -167.172 61.8498 -86.1552 - 22 246.159 1108 5 1 41.65 63.6601 -54.5585 - 22 27.8394 1080 2 0 46.9149 36.0986 -146.25 - 22 97.1476 1079 2 0 46.9364 36.05 -146.172 - 22 5.0066 1078 2 0 47.0226 35.85 -145.863 - 22 313.667 1135 2 1 47.1229 34.765 -144.85 - 22 90.4329 1136 2 1 47.2501 34.027 -144.644 - 22 106.904 1137 2 1 47.45 33.9514 -144.714 - 22 9.58466 1066 2 0 47.9648 33.2685 -145.85 - 22 219.99 1065 2 0 47.9748 33.25 -145.874 - 22 59.6076 1064 2 0 48.1533 33.05 -146.184 - 22 167.559 711 2 0 13.294 -37.7232 -146.25 - 22 225.039 1110 2 1 42.2164 64.2948 -144.45 - 22 271.479 1221 2 0 41.9491 64.4162 -145.852 - 22 122.914 1083 1 1 36.7714 66.6352 -174.45 - 22 121.779 1232 1 0 36.5942 66.5637 -175.85 - 22 53.9488 1059 0 1 32.0088 64.9508 -204.45 - 22 70.7574 1060 0 1 32.05 65.0083 -204.635 - 22 220.164 1226 0 0 32.3153 65.3664 -205.85 - 22 39.74 1227 0 0 32.3746 65.45 -206.133 - 22 103.59 1112 1 1 42.4884 65.163 -174.45 - 22 254.34 1225 1 0 42.4436 65.1814 -175.85 - 22 381.31 1106 0 1 41.3641 65.4851 -204.45 - 22 11.6582 1078 3 0 -69.9246 35.6547 -116.25 - 22 94.2607 1093 3 0 -107.943 38.8222 -116.25 - 22 226.414 1105 0 1 41.25 65.2791 -204.455 - 22 96.5682 1238 0 0 42.5104 67.6765 -205.851 - 22 127.651 1239 0 0 42.8264 67.85 -206.019 - 22 5.11992 962 7 1 12.58 31.5765 5.15 - 22 456.154 987 8 0 -38.4105 17.617 33.7501 - 22 16.2374 986 8 0 -39.3236 17.45 34.1075 - 22 48.9592 695 8 1 -40.9193 17.2916 35.15 - 22 58.6826 694 8 1 -41.0501 17.2593 35.236 - 22 73.9661 693 8 1 -41.2501 17.1984 35.3345 - 22 43.6151 692 8 1 -41.45 17.1381 35.4176 -Number of digits in this event: 35 +Number of tracker hits in this event: 38 + 22 173.218 1295 11 0 27.4493 79.0847 124.15 + 22 173.432 1036 10 1 27.4429 79.0906 95.55 + 22 98.1306 1295 10 0 27.4405 79.0896 94.15 + 22 132.181 1036 9 1 27.396 79.072 65.55 + 22 122.034 1295 9 0 27.3954 79.0695 64.15 + 22 120.21 1036 8 1 27.3842 79.0219 35.55 + 22 170.398 1294 8 0 27.3792 79.0171 34.15 + 22 112.266 1036 7 1 27.2716 78.9189 5.55 + 22 267.112 1294 7 0 27.2678 78.9128 4.15 + 22 143.711 1035 6 1 27.1962 78.782 -24.45 + 22 118.457 1293 6 0 27.193 78.7729 -25.85 + 22 89.9732 1035 5 1 27.1324 78.5839 -54.45 + 22 136.047 1292 5 0 27.1287 78.5759 -55.85 + 22 123.361 1035 4 1 27.0558 78.4158 -84.45 + 22 103.531 1291 4 0 27.0516 78.4058 -85.85 + 22 253.388 1034 3 1 26.9657 78.1952 -114.45 + 22 117.313 1290 3 0 26.9631 78.1844 -115.85 + 22 139.993 1034 2 1 26.9051 77.9694 -144.45 + 22 123.527 1289 2 0 26.902 77.9589 -145.85 + 22 128.07 1033 1 1 26.8384 77.7477 -174.45 + 22 223.984 1288 1 0 26.8331 77.7381 -175.85 + 22 184.701 1033 0 1 26.7054 77.5454 -204.45 + 22 327.318 1287 0 0 26.6986 77.5382 -205.85 + 22 26.9474 961 0 1 12.45 130.317 -204.824 + 22 0.455317 1545 0 0 15.3492 129.35 -206.049 + 22 47.709 962 0 1 12.45 130.341 -204.802 + 22 79.755 1288 0 0 26.6222 77.65 -206.052 + 22 211.856 1289 0 0 26.5785 77.85 -206.226 + 22 31.5789 1571 0 0 41.3487 134.429 -206.25 + 22 74.6319 1572 0 0 41.4125 134.55 -206.198 + 22 52.4399 1573 0 0 41.5616 134.75 -206.043 + 22 18.344 1574 0 0 41.6035 134.95 -205.9 + 22 327.165 1110 0 1 42.1094 136.354 -204.85 + 22 100.082 1111 0 1 42.25 136.855 -204.535 + 22 124.858 1583 0 0 42.4684 136.881 -205.85 + 22 17.2501 1569 0 0 37.906 133.964 -206.25 + 22 78.4884 1568 0 0 37.8945 133.95 -206.222 + 22 219.648 1032 0 1 26.4559 77.9001 -204.45 +Number of digits in this event: 24 Using G4ParticleGun... -Particle energy: 5.67743 LIN +Particle energy: 6.58468 LIN Particle: e- Event: 23 -Number of tracker hits in this event: 43 - 23 125.905 769 11 1 -26.1585 -38.4915 125.55 - 23 121.081 707 11 0 -26.1586 -38.4913 124.15 - 23 197.58 769 10 1 -26.165 -38.4825 95.55 - 23 140.563 707 10 0 -26.1645 -38.4822 94.15 - 23 150.572 769 9 1 -26.1514 -38.4822 65.55 - 23 286.792 707 9 0 -26.1509 -38.4823 64.15 - 23 116.842 769 8 1 -26.1507 -38.4844 35.55 - 23 108.751 707 8 0 -26.1504 -38.485 34.15 - 23 149.741 769 7 1 -26.1508 -38.4656 5.55 - 23 208.291 707 7 0 -26.149 -38.4641 4.15 - 23 137.706 769 6 1 -26.1138 -38.4402 -24.45 - 23 104.46 708 6 0 -26.1107 -38.4439 -25.85 - 23 126.53 769 5 1 -26.0515 -38.5083 -54.45 - 23 135.579 707 5 0 -26.0528 -38.5143 -55.85 - 23 141.742 769 4 1 -26.088 -38.6312 -84.45 - 23 113.076 707 4 0 -26.092 -38.6357 -85.85 - 23 112.737 769 3 1 -26.1753 -38.726 -114.45 - 23 136.976 706 3 0 -26.1794 -38.7307 -115.85 - 23 109.563 768 2 1 -26.2769 -38.8261 -144.45 - 23 232.542 706 2 0 -26.2791 -38.8247 -145.85 - 23 115.606 768 1 1 -26.3424 -38.7857 -174.45 - 23 120.705 706 1 0 -26.3413 -38.7851 -175.85 - 23 163.53 768 0 1 -26.3206 -38.7779 -204.45 - 23 139.998 706 0 0 -26.3307 -38.7738 -205.85 - 23 188.591 760 0 1 -27.9664 -81.5272 -204.85 - 23 118.368 627 2 0 0.595177 -54.6076 -146.25 - 23 159.019 628 2 0 0.806065 -54.45 -146.041 - 23 132.568 906 2 1 1.25783 -54.0622 -144.85 - 23 10.7533 905 2 1 1.24996 -54.1081 -144.496 - 23 5.05829 555 0 0 -10.668 -69.0313 -206.25 - 23 77.9538 554 0 0 -10.6576 -69.0502 -206.24 - 23 99.8778 553 0 0 -10.5587 -69.25 -206.076 - 23 348.562 849 0 1 -10.2023 -70.3219 -204.85 - 23 27.6689 850 0 1 -10.05 -70.641 -204.626 - 23 100.997 848 0 1 -10.25 -71.3221 -204.521 - 23 106.076 770 9 1 -26.05 -38.5171 65.5197 - 23 40.7689 771 9 1 -25.85 -38.5669 65.2034 - 23 198.116 702 9 0 -23.8233 -39.4525 64.15 - 23 174.69 701 9 0 -23.3444 -39.65 63.981 - 23 131.755 700 9 0 -23.0516 -39.85 64.0309 - 23 187.6 783 9 1 -23.4035 -39.7409 65.15 - 23 27.6531 782 9 1 -23.45 -39.739 65.2009 - 23 55.4578 772 9 1 -25.4854 -38.6541 65.1502 -Number of digits in this event: 26 +Number of tracker hits in this event: 76 + 23 128.54 728 11 1 -34.3492 37.518 125.55 + 23 111.895 1087 11 0 -34.3495 37.5188 124.15 + 23 128.914 728 10 1 -34.3535 37.5385 95.55 + 23 127.604 1087 10 0 -34.354 37.5389 94.15 + 23 138.57 728 9 1 -34.3649 37.5481 65.55 + 23 106.555 1087 9 0 -34.3648 37.5493 64.15 + 23 104.991 728 8 1 -34.3644 37.5719 35.55 + 23 151.392 1087 8 0 -34.3642 37.5726 34.15 + 23 193.676 729 7 1 -34.23 37.9863 5.55 + 23 110.823 1089 7 0 -34.2242 38.0127 4.14971 + 23 124.978 727 6 1 -34.4876 38.178 -24.4502 + 23 39.1922 1090 6 0 -34.6366 38.0624 -25.85 + 23 75.6273 1089 6 0 -34.6537 38.05 -26.0086 + 23 104.573 710 5 1 -37.9962 35.8022 -54.4502 + 23 107.779 1078 5 0 -38.0445 35.7482 -55.85 + 23 97.185 703 4 1 -39.3419 35.3039 -84.45 + 23 166.958 1076 4 0 -39.417 35.3158 -85.8504 + 23 113.872 695 3 1 -40.8799 35.433 -114.45 + 23 200.798 1076 3 0 -41.1614 35.4199 -115.85 + 23 362.878 682 2 1 -43.5107 35.882 -144.45 + 23 164.914 1078 2 0 -43.8118 35.7535 -145.85 + 23 16.0346 650 1 1 -50.0312 32.3032 -174.45 + 23 137.85 649 1 1 -50.0501 32.3021 -174.501 + 23 24.5734 1061 1 0 -50.5195 32.252 -175.85 + 23 114.674 1060 1 0 -50.5403 32.25 -175.912 + 23 43.6992 601 0 1 -59.768 31.4564 -204.45 + 23 90.1479 600 0 1 -59.85 31.4026 -204.573 + 23 26.6619 1054 0 0 -60.6322 30.8913 -205.85 + 23 134.013 1053 0 0 -60.6966 30.85 -205.955 + 23 420.736 1079 2 0 -43.9789 35.85 -146.194 + 23 149.28 681 2 1 -43.65 36.3215 -144.679 + 23 342.649 680 2 1 -43.8502 36.5274 -144.453 + 23 242.945 728 6 1 -34.3661 37.5875 -24.45 + 23 328.08 1087 6 0 -34.3658 37.5889 -25.85 + 23 245.39 728 5 1 -34.3595 37.6223 -54.45 + 23 259.477 1087 5 0 -34.3605 37.6237 -55.85 + 23 126.423 728 4 1 -34.3804 37.6543 -84.45 + 23 113.493 1088 4 0 -34.3821 37.6565 -85.85 + 23 108.083 728 3 1 -34.4204 37.703 -114.45 + 23 138.15 1088 3 0 -34.4227 37.7049 -115.85 + 23 101.791 727 2 1 -34.4693 37.7416 -144.45 + 23 116.469 1088 2 0 -34.4726 37.7437 -145.85 + 23 144.005 727 1 1 -34.5388 37.781 -174.45 + 23 98.2388 1088 1 0 -34.5438 37.7834 -175.85 + 23 96.4866 727 0 1 -34.6463 37.8328 -204.45 + 23 113.843 1088 0 0 -34.6515 37.8355 -205.85 + 23 257.187 674 0 1 -45.05 -34.866 -204.814 + 23 68.4283 857 1 0 149.855 -8.51633 -176.25 + 23 465.91 858 1 0 149.878 -8.44984 -176.156 + 23 110.473 880 4 1 -3.94875 -27.9476 -84.85 + 23 114.925 1073 5 0 81.0638 34.8047 -56.25 + 23 138.401 727 4 1 -34.6269 36.9735 -84.45 + 23 116.072 1084 4 0 -34.641 36.9499 -85.85 + 23 99.2281 725 3 1 -34.9661 36.4407 -114.45 + 23 150.394 1081 3 0 -34.9756 36.4129 -115.85 + 23 234.918 724 2 1 -35.1355 35.8801 -144.45 + 23 145.671 722 1 1 -35.5873 35.4866 -174.45 + 23 105.934 1077 1 0 -35.6031 35.4747 -175.85 + 23 108.017 720 0 1 -35.8919 35.2203 -204.45 + 23 143.315 1075 0 0 -35.9116 35.2037 -205.85 + 23 105.929 1253 0 0 -136.725 70.65 -206.076 + 23 22.6631 211 0 1 -137.881 71.1295 -204.85 + 23 243.17 210 0 1 -137.95 71.172 -204.789 + 23 9.40102 209 0 1 -138.15 71.7142 -204.844 + 23 47.1267 1275 0 0 -140.035 75.0993 -205.85 + 23 64.6187 1276 0 0 -140.061 75.25 -205.885 + 23 125.715 197 0 1 -140.702 75.6728 -204.85 + 23 397.372 196 0 1 -140.75 75.7489 -204.562 + 23 37.6016 480 5 0 -109.378 -83.8639 -56.25 + 23 0.872201 1395 11 1 99.15 27.391 125.272 + 23 79.8892 729 11 1 -34.2487 37.5114 125.55 + 23 63.1386 730 11 1 -34.0499 37.4324 125.454 + 23 57.1827 731 11 1 -33.85 37.4006 125.366 + 23 127.693 732 11 1 -33.65 37.3738 125.305 + 23 75.2558 1076 11 0 -32.625 35.3877 124.15 + 23 82.1369 1075 11 0 -32.5171 35.25 123.992 +Number of digits in this event: 37 Using G4ParticleGun... -Particle energy: 5.83908 LIN +Particle energy: 4.45355 LIN Particle: e- Event: 24 -Number of tracker hits in this event: 47 - 24 119.882 967 11 1 13.6269 -10.8715 125.55 - 24 169.637 845 11 0 13.6266 -10.8728 124.15 - 24 161.09 967 10 1 13.6258 -10.9031 95.55 - 24 119.292 845 10 0 13.6257 -10.9036 94.15 - 24 117.179 967 9 1 13.6246 -10.9155 65.55 - 24 119.373 845 9 0 13.6246 -10.9162 64.15 - 24 152.343 967 8 1 13.6273 -10.9362 35.55 - 24 121.627 845 8 0 13.63 -10.9381 34.15 - 24 223.783 968 7 1 13.6915 -10.9799 5.55 - 24 128.141 845 7 0 13.6952 -10.9824 4.15 - 24 127.857 968 6 1 13.7651 -11.0331 -24.45 - 24 109.198 845 6 0 13.7692 -11.0364 -25.85 - 24 173.865 969 5 1 13.8587 -11.1045 -54.45 - 24 111.929 844 5 0 13.8643 -11.1073 -55.85 - 24 127.15 969 4 1 13.9756 -11.1548 -84.45 - 24 107.261 844 4 0 13.9739 -11.1522 -85.85 - 24 117.766 969 3 1 13.9371 -11.0761 -114.45 - 24 126.776 844 3 0 13.9378 -11.0724 -115.85 - 24 125.111 969 2 1 13.9633 -11.0438 -144.45 - 24 114.205 845 2 0 13.9676 -11.0404 -145.85 - 24 194.181 970 1 1 14.0844 -10.9779 -174.45 - 24 118.128 845 1 0 14.0855 -10.9688 -175.85 - 24 153.577 970 0 1 14.0944 -10.7796 -204.45 - 24 106.17 846 0 0 14.0982 -10.7691 -205.85 - 24 109.515 969 0 1 14.05 -10.7338 -204.503 - 24 3.75539 968 0 1 13.85 -10.5831 -204.834 - 24 108.622 848 0 0 12.8103 -10.3393 -205.85 - 24 172.035 849 0 0 12.4282 -10.25 -206.181 - 24 277.355 911 0 0 -23.2 2.36898 -206.25 - 24 103.664 912 0 0 -23.3828 2.4501 -206.05 - 24 336.583 777 0 1 -24.4791 2.2857 -204.85 - 24 95.8745 776 0 1 -24.6501 2.36774 -204.768 - 24 329.389 970 2 1 14.2344 -11.2567 -144.45 - 24 235.879 843 2 0 14.2406 -11.2565 -145.85 - 24 172.358 971 1 1 14.3755 -11.2579 -174.45 - 24 100.371 843 1 0 14.3806 -11.261 -175.85 - 24 314.863 972 0 1 14.4662 -11.3284 -204.45 - 24 142.438 843 0 0 14.4732 -11.3277 -205.85 - 24 91.9209 1757 9 1 171.571 9.82044 65.5499 - 24 215.293 1756 9 1 171.55 10.0024 65.49 - 24 107.671 844 0 0 14.3645 -11.1972 -205.85 - 24 120.187 969 1 1 14.0179 -11.1197 -174.45 - 24 176.264 844 1 0 13.9796 -11.078 -175.85 - 24 101.686 966 0 1 13.3854 -10.197 -204.45 - 24 140.478 975 1 1 15.1169 -10.9886 -174.85 - 24 124.319 843 5 0 13.9478 -11.3339 -55.8502 - 24 54.1441 879 5 0 50.7551 -4.24956 -56.2499 -Number of digits in this event: 29 +Number of tracker hits in this event: 100 + 24 161.662 730 11 1 -34.0242 38.8 125.55 + 24 136.715 1093 11 0 -34.0247 38.7971 124.15 + 24 113.942 730 10 1 -34.0332 38.7435 95.55 + 24 100.636 1093 10 0 -34.0334 38.7409 94.15 + 24 113.997 730 9 1 -34.0351 38.6872 65.55 + 24 108.618 1093 9 0 -34.0364 38.6853 64.15 + 24 116.605 729 8 1 -34.0655 38.6367 35.55 + 24 115.33 1092 8 0 -34.0668 38.634 34.15 + 24 396.628 729 7 1 -34.0938 38.5788 5.55 + 24 383.364 1092 7 0 -34.0948 38.5711 4.15 + 24 147.97 729 6 1 -34.1155 38.4098 -24.45 + 24 421.994 1091 6 0 -34.1167 38.4012 -25.85 + 24 118.776 729 5 1 -34.1335 38.2182 -54.45 + 24 154.033 1090 5 0 -34.1347 38.2109 -55.85 + 24 109.721 729 4 1 -34.1582 38.0662 -84.45 + 24 137.454 1090 4 0 -34.1591 38.0613 -85.85 + 24 241.009 729 3 1 -34.1844 37.9493 -114.45 + 24 123.426 1089 3 0 -34.181 37.9462 -115.85 + 24 118.77 729 2 1 -34.1233 37.89 -144.45 + 24 225.372 1089 2 0 -34.1186 37.8889 -145.85 + 24 131.771 730 1 1 -34.0237 37.8634 -174.45 + 24 95.2078 1089 1 0 -34.017 37.8617 -175.85 + 24 196.064 730 0 1 -33.8865 37.8184 -204.45 + 24 149.319 1088 0 0 -33.8829 37.8165 -205.85 + 24 244.073 730 5 1 -33.9648 38.9398 -54.45 + 24 296.531 1094 5 0 -33.9404 38.9557 -55.85 + 24 135.787 733 4 1 -33.4186 39.3233 -84.45 + 24 252.985 1096 4 0 -33.3775 39.3462 -85.85 + 24 131.056 737 3 1 -32.6136 39.8438 -114.45 + 24 126.49 1099 3 0 -32.575 39.8694 -115.85 + 24 103.401 740 2 1 -31.8685 40.3443 -144.45 + 24 273.666 1101 2 0 -31.8175 40.3773 -145.85 + 24 109.943 746 1 1 -30.7446 41.109 -174.45 + 24 270.034 1105 1 0 -30.6965 41.1548 -175.85 + 24 207.335 751 0 1 -29.708 42.0543 -204.45 + 24 132.419 1110 0 0 -29.6602 42.0814 -205.85 + 24 305.539 750 0 1 -29.8503 41.8426 -204.582 + 24 109.201 730 4 1 -33.9689 39.3018 -84.45 + 24 122.361 1098 3 0 -34.187 39.8096 -115.85 + 24 150.06 726 2 1 -34.7887 40.4003 -144.45 + 24 112.162 722 1 1 -35.4829 41.0598 -174.45 + 24 418.266 721 0 1 -35.7527 41.4252 -204.45 + 24 129.298 1106 0 0 -35.768 41.4386 -205.85 + 24 222.651 1285 8 1 77.1576 2.12482 35.55 + 24 224.203 913 8 0 77.1338 2.71654 34.1494 + 24 125.052 1284 8 1 77.0351 2.02707 35.1502 + 24 102.816 1105 0 0 -35.8204 41.25 -205.926 + 24 301.236 833 2 1 -13.3339 69.4553 -144.85 + 24 111.323 1107 0 0 -35.626 41.4917 -205.85 + 24 110.958 727 6 1 -34.4738 38.1809 -24.45 + 24 141.71 1090 6 0 -34.6171 38.1734 -25.85 + 24 82.346 714 5 1 -37.1369 38.0357 -54.45 + 24 76.946 713 5 1 -37.25 37.9881 -54.6936 + 24 82.2546 1089 5 0 -37.7029 37.8885 -55.85 + 24 33.9375 1088 5 0 -37.7864 37.8498 -56.1167 + 24 195.584 655 4 1 -48.8851 34.2448 -84.4507 + 24 19.8283 1055 4 0 -48.8783 31.1208 -85.85 + 24 53.1065 1054 4 0 -48.8749 31.05 -85.8708 + 24 49.1626 1053 4 0 -48.8456 30.85 -85.9107 + 24 60.9814 1052 4 0 -48.8152 30.65 -85.9449 + 24 50.7988 1051 4 0 -48.7693 30.45 -85.9773 + 24 73.3294 1050 4 0 -48.7101 30.25 -86.005 + 24 78.3869 1049 4 0 -48.5849 30.05 -86.0509 + 24 69.1416 1048 4 0 -48.4338 29.8498 -86.1 + 24 245.265 805 3 1 -18.9712 6.71837 -114.45 + 24 117.206 806 3 1 -18.85 6.61256 -114.754 + 24 251.143 725 6 1 -35.0074 38.2807 -24.45 + 24 120.325 716 5 1 -36.8035 39.1846 -54.45 + 24 242.132 1095 5 0 -36.8895 39.2073 -55.85 + 24 197.135 707 4 1 -38.5242 39.5445 -84.45 + 24 101.326 1097 4 0 -38.6193 39.574 -85.85 + 24 134.096 697 3 1 -40.6173 40.2822 -114.45 + 24 22.1977 696 3 1 -40.65 40.288 -114.763 + 24 123.225 1101 3 0 -40.7625 40.3131 -115.85 + 24 140.782 682 2 1 -43.5898 41.1033 -144.45 + 24 105.95 1105 2 0 -43.6734 41.1855 -145.85 + 24 107.683 676 1 1 -44.8269 42.386 -174.45 + 24 141.329 1112 1 0 -44.8354 42.4684 -175.85 + 24 105.197 674 0 1 -45.0988 44.6535 -204.45 + 24 15.9417 1123 0 0 -45.1983 44.843 -205.85 + 24 123.665 1124 0 0 -45.2023 44.85 -205.901 + 24 37.1301 768 5 1 -26.344 40.204 -54.45 + 24 93.4529 769 5 1 -26.25 40.1489 -54.5502 + 24 40.1685 770 5 1 -26.05 40.0195 -54.7609 + 24 74.6684 1096 5 0 -25.1207 39.4146 -55.85 + 24 159.024 868 4 1 -6.32822 12.9858 -84.45 + 24 49.7528 867 4 1 -6.45 13.0116 -84.5034 + 24 52.0337 866 4 1 -6.65 13.0497 -84.5363 + 24 52.0644 865 4 1 -6.85 13.0822 -84.5434 + 24 125.532 864 4 1 -7.05 13.112 -84.5311 + 24 52.1094 863 4 1 -7.25035 13.1603 -84.5197 + 24 52.3699 862 4 1 -7.45075 13.2048 -84.5378 + 24 68.0221 861 4 1 -7.65011 13.2201 -84.5891 + 24 73.1995 860 4 1 -7.85 13.2328 -84.6707 + 24 19.0272 859 4 1 -8.05 13.2543 -84.7922 + 24 226.422 965 4 0 -9.62046 13.1275 -85.8502 + 24 79.5621 966 4 0 -10.3142 13.2501 -86.1252 + 24 92.9373 1003 4 0 -17.5505 20.8214 -86.25 + 24 274.727 1002 4 0 -17.3968 20.6498 -86.0907 + 24 45.0514 775 7 1 -24.8579 -26.4932 5.15 +Number of digits in this event: 51 Using G4ParticleGun... -Particle energy: 5.43361 LIN +Particle energy: 5.532 LIN Particle: e- Event: 25 -Number of tracker hits in this event: 31 - 25 117.749 399 9 1 -100.235 75.7116 65.55 - 25 145.263 1278 9 0 -100.235 75.7115 64.15 - 25 161.781 399 8 1 -100.211 75.7035 35.55 - 25 125.145 1278 8 0 -100.208 75.7026 34.15 - 25 108.38 399 7 1 -100.157 75.6891 5.55 - 25 95.8241 1278 7 0 -100.155 75.6904 4.15 - 25 113.388 400 6 1 -100.115 75.7223 -24.45 - 25 141.006 1278 6 0 -100.108 75.7243 -25.85 - 25 126.823 400 5 1 -99.9667 75.7641 -54.45 - 25 128.985 1278 5 0 -99.959 75.7664 -55.85 - 25 131.278 401 4 1 -99.8064 75.8081 -84.45 - 25 136.427 1278 4 0 -99.8003 75.809 -85.85 - 25 177.503 402 3 1 -99.6732 75.8321 -114.45 - 25 125.336 1278 3 0 -99.6545 75.8384 -115.85 - 25 142.489 404 2 1 -99.2467 75.9993 -144.45 - 25 136.871 1279 2 0 -99.2451 76.0118 -145.85 - 25 179.579 404 1 1 -99.1773 76.1619 -174.45 - 25 247.242 1280 1 0 -99.1327 76.1738 -175.85 - 25 143.475 410 0 1 -98.072 76.291 -204.45 - 25 154.614 1281 0 0 -98.0265 76.3522 -205.85 - 25 302.268 766 1 1 -26.7943 55.7884 -174.85 - 25 495.494 401 1 1 -99.9112 75.8978 -174.45 - 25 4.30598 1279 1 0 -100.024 76.0474 -175.85 - 25 171.578 386 0 1 -102.813 78.3423 -204.45 - 25 261.955 1292 0 0 -103.07 78.6246 -205.85 - 25 178.753 1293 0 0 -103.093 78.65 -205.988 - 25 96.5498 1446 1 0 -54.2153 109.35 -176.126 - 25 42.4873 400 1 1 -99.9502 75.7775 -174.708 - 25 107.349 1278 1 0 -99.9159 75.8476 -175.85 - 25 154.501 399 0 1 -100.27 75.0551 -204.45 - 25 192.17 1275 0 0 -100.125 75.1284 -205.85 -Number of digits in this event: 26 -Using G4ParticleGun... -Particle energy: 1.51116 LIN +Number of tracker hits in this event: 69 + 25 149.749 892 11 1 -1.52154 -65.5696 125.55 + 25 115.915 572 11 0 -1.52232 -65.569 124.15 + 25 144.275 892 10 1 -1.5421 -65.5564 95.55 + 25 123.15 572 10 0 -1.54174 -65.5558 94.15 + 25 128.005 892 9 1 -1.53262 -65.541 65.55 + 25 109.893 572 9 0 -1.53189 -65.5404 64.15 + 25 111.223 892 8 1 -1.52146 -65.5307 35.55 + 25 161.498 572 8 0 -1.52189 -65.5293 34.15 + 25 321.939 892 7 1 -1.52708 -65.5014 5.55 + 25 113.474 572 7 0 -1.52798 -65.5004 4.15 + 25 107.955 892 6 1 -1.55023 -65.4742 -24.45 + 25 166.408 572 6 0 -1.55027 -65.4729 -25.85 + 25 291.171 892 5 1 -1.5562 -65.4384 -54.45 + 25 153.194 573 5 0 -1.55518 -65.4347 -55.85 + 25 127.098 892 4 1 -1.53985 -65.3509 -84.45 + 25 120.529 573 4 0 -1.53784 -65.3449 -85.85 + 25 415.752 892 3 1 -1.49569 -65.2248 -114.45 + 25 114.553 574 3 0 -1.4944 -65.2142 -115.85 + 25 116.487 892 2 1 -1.46776 -64.9907 -144.45 + 25 114.627 575 2 0 -1.4665 -64.9739 -145.85 + 25 105.706 893 1 1 -1.43896 -64.621 -174.45 + 25 219.736 577 1 0 -1.43958 -64.6067 -175.85 + 25 107.908 892 0 1 -1.45199 -64.3128 -204.45 + 25 114.526 578 0 0 -1.4558 -64.3012 -205.85 + 25 88.5537 517 11 1 -76.45 124.272 125.353 + 25 83.7694 518 11 1 -76.45 124.362 125.51 + 25 116.007 151 3 0 51.2071 -149.801 -116.25 + 25 0.438869 1161 3 1 52.3727 -150.141 -114.85 + 25 51.8205 147 3 0 52.4592 -150.672 -115.85 + 25 110.898 1164 3 1 53.0141 -151.303 -114.85 + 25 265.049 572 5 0 -1.53953 -65.4501 -55.9377 + 25 41.5997 891 5 1 -1.65008 -65.4989 -54.598 + 25 173.206 894 4 1 -1.20972 -67.4892 -84.4504 + 25 74.182 559 4 0 -1.19758 -68.0989 -85.8504 + 25 42.5509 558 4 0 -1.19618 -68.25 -86.1663 + 25 55.2386 893 3 1 -1.37167 -77.8386 -114.45 + 25 85.7276 514 3 0 -2.00195 -77.211 -115.851 + 25 32.6744 515 3 0 -2.16897 -77.05 -116.14 + 25 92.92 829 2 1 -14.1046 -68.5877 -144.45 + 25 59.0693 828 2 1 -14.25 -68.6295 -144.631 + 25 75.4119 827 2 1 -14.45 -68.6783 -144.689 + 25 54.5244 826 2 1 -14.65 -68.7278 -144.78 + 25 33.8223 557 2 0 -16.3058 -68.46 -145.85 + 25 511.845 558 2 0 -16.4101 -68.45 -145.908 + 25 64.972 559 2 0 -16.7735 -68.25 -145.942 + 25 33.9426 326 1 1 -114.75 -116.003 -174.788 + 25 19.7659 311 1 0 -115.521 -117.907 -175.85 + 25 44.4467 310 1 0 -115.537 -117.95 -175.879 + 25 47.3492 309 1 0 -115.557 -118.151 -175.887 + 25 20.0294 308 1 0 -115.537 -118.35 -175.894 + 25 101.645 321 1 1 -115.894 -119.564 -174.85 + 25 232.646 320 1 1 -115.95 -119.574 -174.758 + 25 82.9788 319 1 1 -116.15 -119.36 -174.637 + 25 146.279 322 1 1 -115.75 -119.105 -174.795 + 25 168.87 323 1 1 -115.55 -119.163 -174.777 + 25 128.212 897 4 1 -0.622384 -61.5113 -84.45 + 25 68.4196 591 4 0 -0.131821 -61.6629 -85.8502 + 25 29.5391 976 3 1 15.3903 -63.5945 -114.45 + 25 137.368 977 3 1 15.4501 -63.6029 -114.529 + 25 10.8444 978 3 1 15.6501 -63.6029 -114.814 + 25 127.422 583 3 0 16.4027 -63.4405 -115.85 + 25 136.274 1083 2 1 36.7585 -54.9575 -144.451 + 25 129.64 625 2 0 36.7509 -55.0262 -145.85 + 25 348.753 624 2 0 36.7029 -55.05 -146.227 + 25 163.652 1093 2 1 38.8122 -55.8298 -144.85 + 25 84.793 1107 2 1 41.5771 -56.1337 -144.85 + 25 124.429 573 6 0 -1.55211 -65.45 -26.0002 + 25 99.8467 891 10 1 -1.65 -65.5321 95.3852 + 25 231.814 890 10 1 -1.85017 -65.5159 95.3623 +Number of digits in this event: 30 +Using G4ParticleGun... +Particle energy: 2.5877 LIN Particle: e- Event: 26 -Number of tracker hits in this event: 29 - 26 123.304 605 11 1 -59.0425 -12.9812 125.55 - 26 152.475 835 11 0 -59.042 -12.9789 124.15 - 26 105.837 605 10 1 -59.0452 -12.923 95.55 - 26 138.282 835 10 0 -59.0444 -12.9167 94.15 - 26 155.976 605 9 1 -59.0018 -12.7791 65.55 - 26 222.626 836 9 0 -59.0009 -12.7771 64.15 - 26 104.773 605 8 1 -58.9947 -12.7275 35.55 - 26 125.497 836 8 0 -58.9921 -12.7265 34.15 - 26 126.643 605 7 1 -58.9734 -12.6827 5.55 - 26 120.498 836 7 0 -58.9675 -12.6818 4.15 - 26 133.976 606 6 1 -58.8315 -12.654 -24.45 - 26 125.336 836 6 0 -58.8204 -12.6542 -25.85 - 26 113.512 607 5 1 -58.5765 -12.6267 -54.45 - 26 171.412 837 5 0 -58.5588 -12.6244 -55.85 - 26 168.263 609 4 1 -58.173 -12.5637 -84.45 - 26 117.266 837 4 0 -58.1527 -12.57 -85.85 - 26 113.059 611 3 1 -57.73 -12.6846 -114.45 - 26 134.537 836 3 0 -57.7041 -12.6929 -115.85 - 26 138.23 614 2 1 -57.1758 -12.8753 -144.45 - 26 97.3767 835 2 0 -57.1479 -12.8757 -145.85 - 26 124.241 617 1 1 -56.5904 -12.829 -174.45 - 26 192.153 836 1 0 -56.5742 -12.8331 -175.85 - 26 149.339 619 0 1 -56.2369 -12.8634 -204.45 - 26 132.19 835 0 0 -56.227 -12.8696 -205.85 - 26 83.3469 744 2 0 -80.6802 -31.1493 -146.25 - 26 10.9345 1043 5 0 -130.629 28.7609 -56.25 - 26 57.9089 30 12 1 -174.049 163.571 155.55 - 26 310.903 797 11 0 -55.0204 -20.6329 123.75 - 26 10.5222 796 11 0 -55.0033 -20.65 123.815 -Number of digits in this event: 21 +Number of tracker hits in this event: 34 + 26 118.285 1524 8 1 125.002 -53.836 35.55 + 26 104.712 631 8 0 125 -53.8343 34.15 + 26 164.916 1523 7 1 124.943 -53.8109 5.55 + 26 129.026 631 7 0 124.936 -53.8089 4.15 + 26 174.414 1523 6 1 124.77 -53.7696 -24.45 + 26 162.401 631 6 0 124.76 -53.7614 -25.85 + 26 112.165 1522 5 1 124.561 -53.5602 -54.45 + 26 152.445 632 5 0 124.558 -53.551 -55.85 + 26 148.367 1521 4 1 124.495 -53.3524 -84.45 + 26 250.91 633 4 0 124.492 -53.3485 -85.85 + 26 212.478 1521 3 1 124.435 -53.2838 -114.45 + 26 123.945 633 3 0 124.433 -53.2868 -115.85 + 26 136.244 1521 2 1 124.417 -53.3578 -144.45 + 26 104.245 633 2 0 124.415 -53.3621 -145.85 + 26 95.7207 1521 1 1 124.359 -53.4425 -174.45 + 26 230.347 632 1 0 124.354 -53.4519 -175.85 + 26 124.904 1520 0 1 124.237 -53.6593 -204.45 + 26 112.394 631 0 0 124.229 -53.6706 -205.85 + 26 96.0057 838 1 1 -12.3997 25.9536 -174.45 + 26 17.4767 633 1 0 124.352 -53.4482 -175.85 + 26 251.539 1517 1 1 123.716 -52.6571 -174.45 + 26 45.2889 638 1 0 123.819 -52.2816 -175.85 + 26 59.616 639 1 0 123.825 -52.25 -176.025 + 26 18.9478 1541 0 1 128.52 -48.4782 -204.45 + 26 88.0582 1542 0 1 128.55 -48.4489 -204.498 + 26 38.588 1543 0 1 128.75 -48.3034 -204.744 + 26 127.44 661 0 0 129.736 -47.8079 -205.85 + 26 71.1178 662 0 0 130.065 -47.6496 -206.187 + 26 15.3311 660 0 0 129.355 -47.9298 -205.85 + 26 153.933 636 1 0 123.664 -52.7609 -175.85 + 26 110.268 1510 0 1 122.248 -54.5509 -204.45 + 26 113.25 626 0 0 122.317 -54.7701 -205.85 + 26 15.0054 599 2 1 -60.1576 -106.208 -144.85 + 26 237.106 598 2 1 -60.2501 -106.23 -144.767 +Number of digits in this event: 19 Using G4ParticleGun... -Particle energy: 6.44225 LIN +Particle energy: 2.51005 LIN Particle: e- Event: 27 -Number of tracker hits in this event: 50 - 27 90.9525 357 10 1 -108.75 -18.0353 95.55 - 27 119.56 810 10 0 -108.749 -18.0364 94.15 - 27 112.398 357 9 1 -108.722 -18.0617 65.55 - 27 166.792 809 9 0 -108.721 -18.063 64.15 - 27 110.117 357 8 1 -108.702 -18.0915 35.55 - 27 129.024 809 8 0 -108.699 -18.0905 34.15 - 27 168.745 357 7 1 -108.645 -18.0657 5.55 - 27 319.144 809 7 0 -108.642 -18.0672 4.15 - 27 140.849 357 6 1 -108.58 -18.0993 -24.45 - 27 132.673 809 6 0 -108.577 -18.099 -25.85 - 27 123.277 358 5 1 -108.512 -18.0977 -54.45 - 27 128.675 809 5 0 -108.509 -18.1003 -55.85 - 27 114.097 358 4 1 -108.446 -18.1621 -84.45 - 27 331.559 809 4 0 -108.442 -18.1668 -85.85 - 27 153.668 358 3 1 -108.358 -18.2617 -114.45 - 27 192.911 808 3 0 -108.355 -18.2681 -115.85 - 27 137.814 359 2 1 -108.296 -18.4299 -144.45 - 27 126.16 808 2 0 -108.297 -18.4383 -145.85 - 27 216.558 358 1 1 -108.367 -18.6045 -174.45 - 27 304.045 807 1 0 -108.359 -18.6247 -175.85 - 27 130.497 359 0 1 -108.179 -19.0834 -204.45 - 27 108.121 804 0 0 -108.172 -19.0884 -205.85 - 27 9.69285 1173 12 0 168.188 54.6718 153.75 - 27 218.646 1743 12 1 168.871 54.1223 155.15 - 27 23.5112 1744 12 1 168.95 54.0755 155.253 - 27 197.847 357 4 1 -108.717 -18.1991 -84.45 - 27 61.4251 356 4 1 -108.75 -18.2135 -84.6615 - 27 61.4102 810 4 0 -108.448 -18.05 -86.0791 - 27 214.613 376 3 1 -104.934 -5.77371 -114.45 - 27 22.6149 868 3 0 -104.689 -6.42159 -115.85 - 27 111.354 867 3 0 -104.672 -6.45 -115.908 - 27 114.1 370 2 1 -106.09 -7.54986 -144.45 - 27 132.72 857 2 0 -105.148 -8.55072 -145.85 - 27 73.5467 856 2 0 -105.03 -8.65 -145.971 - 27 69.1629 855 2 0 -104.917 -8.85 -146.094 - 27 19.0468 854 2 0 -104.916 -9.05 -146.19 - 27 14.8565 387 0 1 -102.589 -100.249 -204.45 - 27 91.9114 808 4 0 -108.46 -18.3367 -85.85 - 27 53.2022 384 3 1 -103.189 -20.6427 -114.45 - 27 45.3188 385 3 1 -103.15 -20.6403 -114.699 - 27 120.513 797 3 0 -102.964 -20.6238 -115.85 - 27 13.973 418 2 1 -96.3625 -19.9531 -144.45 - 27 116.953 419 2 1 -96.35 -19.9518 -144.482 - 27 9.85235 800 2 0 -95.7615 -19.8534 -145.85 - 27 122.274 801 2 0 -95.7421 -19.85 -145.895 - 27 147.876 484 1 1 -83.2132 -18.642 -174.45 - 27 1.47785 521 0 1 -75.8481 -17.5672 -204.451 - 27 181.799 520 0 1 -75.85 -17.567 -204.456 - 27 162.082 812 0 0 -76.3479 -17.5378 -205.85 - 27 8.3249 285 0 1 -123.073 29.3992 -204.45 -Number of digits in this event: 29 +Number of tracker hits in this event: 57 + 27 118.165 414 10 1 -97.3404 -48.5315 95.55 + 27 153.238 657 10 0 -97.3406 -48.5302 94.15 + 27 154.471 413 9 1 -97.3519 -48.5176 65.55 + 27 126.736 657 9 0 -97.3517 -48.5179 64.15 + 27 128.234 413 8 1 -97.3586 -48.5251 35.55 + 27 119.555 657 8 0 -97.3579 -48.5247 34.15 + 27 114.304 414 7 1 -97.3368 -48.5141 5.55 + 27 155.251 657 7 0 -97.3312 -48.518 4.15 + 27 166.619 414 6 1 -97.2221 -48.5922 -24.45 + 27 91.7095 657 6 0 -97.2126 -48.5906 -25.85 + 27 142.416 415 5 1 -97.0226 -48.5795 -54.45 + 27 97.2162 657 5 0 -97.0145 -48.5821 -55.85 + 27 120.392 416 4 1 -96.8308 -48.6155 -84.45 + 27 90.3095 657 4 0 -96.8251 -48.6163 -85.85 + 27 213.737 417 3 1 -96.6928 -48.6505 -114.45 + 27 108.91 656 3 0 -96.679 -48.6544 -115.85 + 27 368.42 418 2 1 -96.418 -48.7116 -144.45 + 27 238.252 656 2 0 -96.398 -48.7086 -145.85 + 27 296.754 420 1 1 -95.9831 -48.68 -174.45 + 27 290.871 656 1 0 -95.9615 -48.6777 -175.85 + 27 145.535 423 0 1 -95.4857 -48.6278 -204.45 + 27 135.597 657 0 0 -95.4641 -48.6137 -205.85 + 27 54.4745 353 0 1 -109.386 -120.387 -204.85 + 27 120.692 354 0 1 -109.35 -120.463 -204.63 + 27 102.727 419 1 1 -96.2218 -48.933 -174.45 + 27 124.689 416 0 1 -96.9224 -46.7536 -204.45 + 27 172.8 666 0 0 -96.9569 -46.7376 -205.85 + 27 117.209 658 2 0 -96.4426 -48.3933 -145.85 + 27 111.165 409 1 1 -98.3327 -41.0733 -174.45 + 27 140.531 694 1 0 -97.7838 -41.1248 -175.85 + 27 19.6414 923 1 0 -58.3258 4.78414 -176.25 + 27 63.2866 924 1 0 -58.2965 4.85 -176.211 + 27 130.462 925 1 0 -58.1972 5.05 -176.07 + 27 14.4427 926 1 0 -58.0729 5.25011 -175.88 + 27 47.8843 614 1 1 -57.1153 6.46662 -174.85 + 27 121.418 615 1 1 -57.0499 6.54863 -174.774 + 27 39.4807 616 1 1 -56.8496 6.75043 -174.548 + 27 26.1523 865 2 0 -54.2127 -6.99903 -146.25 + 27 130.642 864 2 0 -54.2042 -7.05012 -146.141 + 27 216.852 630 2 1 -54.0062 -7.73262 -144.85 + 27 243.18 415 0 1 -97.0951 -48.333 -204.45 + 27 346.211 658 0 0 -97.1089 -48.339 -205.85 + 27 123.915 414 3 1 -97.3103 -48.5147 -114.45 + 27 139.591 659 3 0 -97.182 -48.1946 -115.85 + 27 104.025 421 2 1 -95.8336 -42.9537 -144.45 + 27 38.5003 422 2 1 -95.75 -42.9259 -144.717 + 27 112.168 686 2 0 -95.3098 -42.792 -145.85 + 27 51.2906 468 1 1 -86.3144 -38.7151 -174.45 + 27 99.1747 469 1 1 -86.25 -38.6808 -174.543 + 27 12.0984 470 1 1 -86.05 -38.5766 -174.811 + 27 182.599 709 1 0 -85.3013 -38.1441 -175.85 + 27 133.158 710 1 0 -85.138 -38.05 -176.078 + 27 10.923 579 0 1 -64.2312 -28.636 -204.45 + 27 101.69 578 0 1 -64.2504 -28.6589 -204.494 + 27 97.9974 753 0 0 -65.0968 -29.3418 -205.85 + 27 69.1407 752 0 0 -65.2554 -29.45 -206.071 + 27 170.417 413 0 1 -97.4016 -48.4463 -204.45 +Number of digits in this event: 32 Using G4ParticleGun... -Particle energy: 4.14595 LIN +Particle energy: 1.14524 LIN Particle: e- Event: 28 -Number of tracker hits in this event: 118 - 28 318.452 716 11 1 -36.8167 9.19063 125.55 - 28 316.492 945 11 0 -36.8179 9.19057 124.15 - 28 121.529 716 10 1 -36.8452 9.19337 95.55 - 28 112.107 945 10 0 -36.8454 9.19283 94.15 - 28 180.138 716 9 1 -36.844 9.17814 65.55 - 28 141.089 945 9 0 -36.8453 9.17734 64.15 - 28 111.147 715 8 1 -36.8607 9.16208 35.55 - 28 134.713 945 8 0 -36.8596 9.15863 34.15 - 28 195.44 716 7 1 -36.8344 9.09713 5.55 - 28 99.8209 945 7 0 -36.8319 9.09546 4.15 - 28 121.457 716 6 1 -36.7836 9.05672 -24.45 - 28 153.815 945 6 0 -36.7815 9.05954 -25.85 - 28 98.1149 716 5 1 -36.7252 9.12737 -54.45 - 28 113.984 945 5 0 -36.7229 9.12822 -55.85 - 28 153.548 716 4 1 -36.6829 9.14244 -84.45 - 28 159.104 945 4 0 -36.6811 9.14361 -85.85 - 28 176.758 716 3 1 -36.6594 9.16809 -114.45 - 28 108.501 945 3 0 -36.6592 9.16713 -115.85 - 28 132.444 716 2 1 -36.6578 9.13718 -144.45 - 28 194.092 945 2 0 -36.6577 9.13531 -145.85 - 28 115.12 716 1 1 -36.6645 9.10035 -174.45 - 28 125.01 945 1 0 -36.6679 9.09535 -175.85 - 28 111.036 716 0 1 -36.7293 8.98478 -204.45 - 28 279.923 944 0 0 -36.7337 8.97944 -205.85 - 28 95.1117 200 10 0 10.8955 -139.996 93.75 - 28 84.2563 199 10 0 11.0027 -140.15 93.9363 - 28 80.2213 198 10 0 11.2158 -140.35 93.9921 - 28 60.6683 197 10 0 11.3312 -140.55 94.0379 - 28 50.6017 196 10 0 11.4321 -140.75 94.1306 - 28 87.3872 195 10 0 11.4947 -140.95 94.1071 - 28 2.10617 194 10 0 11.6271 -141.15 94.1461 - 28 57.3238 965 10 1 13.0542 -141.604 95.15 - 28 80.9623 966 10 1 13.2501 -141.636 95.2466 - 28 141.722 967 10 1 13.45 -141.562 95.2439 - 28 281.904 968 10 1 13.65 -141.472 95.2223 - 28 118.515 193 10 0 13.0384 -141.485 94.1499 - 28 102.189 340 1 1 -111.95 -20.7716 -174.729 - 28 169.178 946 4 0 -36.6894 9.2501 -86.0296 - 28 98.2349 947 4 0 -36.6123 9.45 -86.0533 - 28 103.205 948 4 0 -36.5708 9.65 -85.9828 - 28 75.3059 719 4 1 -36.2454 9.57101 -84.85 - 28 42.0346 718 4 1 -36.25 9.56151 -84.8362 - 28 142.855 944 4 0 -36.7282 8.95628 -85.85 - 28 121.298 717 3 1 -36.5443 8.99759 -114.45 - 28 123.318 944 3 0 -36.5308 9.01361 -115.85 - 28 161.918 717 2 1 -36.5221 9.30832 -144.45 - 28 175.381 946 2 0 -36.6122 9.35682 -145.85 - 28 100.098 706 1 1 -38.7416 10.5688 -174.45 - 28 115.373 952 1 0 -38.8738 10.5826 -175.85 - 28 121.006 693 0 1 -41.3432 10.7778 -204.45 - 28 36.1666 692 0 1 -41.4501 10.7604 -204.818 - 28 250.069 953 0 0 -41.7182 10.7328 -205.85 - 28 63.8932 715 3 1 -36.8501 8.85077 -114.511 - 28 92.9276 714 3 1 -37.05 8.80848 -114.565 - 28 95.8958 713 3 1 -37.25 8.77024 -114.618 - 28 52.1544 712 3 1 -37.45 8.73559 -114.659 - 28 95.332 711 3 1 -37.65 8.71114 -114.703 - 28 51.8628 710 3 1 -37.85 8.69659 -114.763 - 28 21.4768 709 3 1 -38.05 8.67169 -114.827 - 28 89.7329 939 3 0 -40.6465 7.9297 -115.85 - 28 224.343 938 3 0 -40.935 7.85 -116.004 - 28 125.284 401 2 1 -99.7759 -4.35578 -144.45 - 28 98.4332 400 2 1 -99.95 -4.42021 -144.71 - 28 126.981 874 2 0 -101.077 -5.15759 -145.85 - 28 92.6991 873 2 0 -101.249 -5.25 -146.027 - 28 189.784 200 1 1 -140.014 -17.0521 -174.45 - 28 49.477 809 1 0 -139.866 -18.1458 -175.85 - 28 123.747 808 1 0 -139.84 -18.2503 -176.019 - 28 297.408 737 1 0 -93.4442 -32.5993 -176.25 - 28 39.6801 444 1 1 -91.2672 -32.3482 -174.85 - 28 82.774 445 1 1 -91.15 -32.3146 -174.771 - 28 94.4252 446 1 1 -90.95 -32.3392 -174.688 - 28 32.1995 447 1 1 -90.75 -32.402 -174.533 - 28 137.061 715 0 1 -37.0016 8.9341 -204.45 - 28 135.437 714 0 1 -37.05 9.00115 -204.608 - 28 123.372 947 0 0 -37.4455 9.49097 -205.85 - 28 11.2348 948 0 0 -37.6178 9.65 -206.228 - 28 197.288 712 10 1 -37.5637 9.88374 95.55 - 28 234.723 950 10 0 -37.6107 10.1766 94.1498 - 28 18.3653 951 10 0 -37.6243 10.25 93.8133 - 28 129.231 706 9 1 -38.7452 16.7863 65.5494 - 28 426.958 985 9 0 -38.7467 17.1014 64.15 - 28 116.639 709 8 1 -38.2214 24.2743 35.55 - 28 325.457 1022 8 0 -38.149 24.5076 34.15 - 28 170.411 721 7 1 -35.8447 28.9017 5.55 - 28 124.95 1046 7 0 -35.7634 29.3201 4.15 - 28 281.197 720 6 1 -35.9694 37.4553 -24.4503 - 28 1.03619 1088 6 0 -35.95 37.849 -25.85 - 28 160.979 1089 6 0 -35.95 37.85 -25.8534 - 28 125.081 722 5 1 -35.4851 45.6927 -54.45 - 28 84.1025 1133 5 0 -35.7008 46.6729 -55.85 - 28 67.2046 1134 5 0 -35.7359 46.85 -56.0956 - 28 115.19 705 4 1 -38.9842 67.0594 -84.45 - 28 116.062 1238 4 0 -38.9088 67.666 -85.8504 - 28 125.263 692 3 1 -41.5381 77.4967 -114.45 - 28 142.873 1289 3 0 -41.3745 77.8507 -115.85 - 28 122.331 718 2 1 -36.3305 84.3689 -144.45 - 28 152.74 1322 2 0 -36.0886 84.5564 -145.85 - 28 57.4706 740 1 1 -31.8914 87.5524 -174.45 - 28 46.2181 741 1 1 -31.85 87.5392 -174.661 - 28 125.831 1336 1 0 -31.5744 87.3154 -175.85 - 28 44.2585 1335 1 0 -31.4965 87.25 -176.174 - 28 102.773 772 0 1 -25.5748 80.1845 -204.451 - 28 108.103 1300 0 0 -25.5052 80.15 -205.85 - 28 125.255 949 10 0 -38.4395 10.0499 94.0866 - 28 74.3367 715 2 1 -37.0135 9.13022 -144.45 - 28 151.743 714 2 1 -37.05 9.13161 -144.64 - 28 257.288 711 1 1 -37.8076 12.4908 -174.45 - 28 288.459 712 1 1 -37.6494 12.4064 -174.779 - 28 126.842 959 1 0 -36.2659 11.9128 -175.85 - 28 37.7377 713 2 1 -37.25 9.10859 -144.764 - 28 40.5536 940 2 0 -38.8039 8.1162 -145.85 - 28 333.176 939 2 0 -38.9446 8.04982 -145.95 - 28 124.135 938 2 0 -39.1463 7.85 -146.174 - 28 104.227 641 1 1 -51.651 -14.2204 -174.45 - 28 48.3699 833 1 0 -51.8768 -13.3702 -175.85 - 28 79.1848 834 1 0 -51.9089 -13.25 -176.013 - 28 215.828 937 2 0 -39.6408 7.65 -146.155 -Number of digits in this event: 60 +Number of tracker hits in this event: 95 + 28 294.106 1122 11 1 44.4938 -37.2724 125.55 + 28 102.437 713 11 0 44.5018 -37.2754 124.15 + 28 127.214 1123 10 1 44.7067 -37.3518 95.55 + 28 288.445 713 10 0 44.7166 -37.3521 94.15 + 28 133.44 1124 9 1 44.8957 -37.327 65.55 + 28 104.137 713 9 0 44.91 -37.3321 64.15 + 28 120.749 1125 8 1 45.2228 -37.4423 35.55 + 28 106.115 712 8 0 45.2354 -37.4503 34.15 + 28 134.821 1127 7 1 45.5089 -37.5867 5.55 + 28 113.017 712 7 0 45.5272 -37.59 4.15 + 28 111.436 1129 6 1 45.8821 -37.6334 -24.45 + 28 112.346 712 6 0 45.897 -37.642 -25.85 + 28 101.941 1130 5 1 46.1992 -37.8117 -54.45 + 28 284.368 711 5 0 46.2055 -37.8221 -55.85 + 28 117.163 1131 4 1 46.3257 -38.0139 -84.45 + 28 116.901 710 4 0 46.3331 -38.0171 -85.85 + 28 115.761 1132 3 1 46.482 -38.0504 -114.45 + 28 113.354 710 3 0 46.4954 -38.0498 -115.85 + 28 146.381 1133 2 1 46.7587 -38.0411 -144.45 + 28 227.774 710 2 0 46.7642 -38.0438 -145.85 + 28 123.129 1134 1 1 46.8963 -38.0869 -174.45 + 28 130.961 709 1 0 46.9051 -38.102 -175.85 + 28 139.369 1135 0 1 47.0505 -38.4184 -204.45 + 28 174.779 708 0 0 47.059 -38.4277 -205.85 + 28 109.677 1132 0 1 46.6125 -36.9949 -204.45 + 28 253.26 1129 4 1 45.9943 -37.6379 -84.4505 + 28 121.583 711 4 0 46.0298 -37.6558 -85.8504 + 28 104.568 1130 3 1 46.117 -38.086 -114.45 + 28 90.5693 708 3 0 46.1176 -38.3265 -115.85 + 28 15.2665 707 3 0 46.1421 -38.45 -116.218 + 28 171.621 1142 2 1 48.4547 -50.5929 -144.45 + 28 300.139 1141 2 1 48.45 -50.6572 -144.546 + 28 89.2144 641 2 0 48.409 -51.6897 -145.85 + 28 69.785 640 2 0 48.4017 -51.85 -146.054 + 28 112.681 1135 2 1 47.2295 -40.8035 -144.45 + 28 102.735 694 2 0 47.266 -41.074 -145.85 + 28 51.2098 1141 1 1 48.3672 -49.7981 -174.45 + 28 67.9659 1142 1 1 48.4502 -49.8533 -174.64 + 28 38.1996 649 1 0 48.9499 -50.2198 -175.85 + 28 101.039 648 1 0 48.9924 -50.25 -175.953 + 28 22.9947 1217 0 1 63.6313 -59.8804 -204.45 + 28 93.1312 1218 0 1 63.65 -59.9153 -204.538 + 28 49.0266 598 0 0 64.0603 -60.384 -205.85 + 28 100.35 597 0 0 64.1195 -60.4501 -206.034 + 28 124.627 711 2 0 48.9039 -37.7311 -145.85 + 28 115.166 1187 1 1 57.5533 -33.2387 -174.45 + 28 188.195 733 1 0 57.4245 -33.3805 -175.85 + 28 16.2661 732 1 0 57.3724 -33.45 -176.22 + 28 29.6429 1176 0 1 55.3128 -39.3139 -204.45 + 28 115.115 1175 0 1 55.25 -39.3785 -204.516 + 28 89.0855 1174 0 1 55.0499 -39.5679 -204.677 + 28 33.4321 1173 0 1 54.8499 -39.7389 -204.815 + 28 69.0962 695 0 0 53.4025 -40.9327 -205.85 + 28 215.034 694 0 0 53.2279 -41.0502 -205.983 + 28 68.6292 371 4 0 8.19332 -105.781 -86.25 + 28 133.623 372 4 0 8.21247 -105.75 -86.0727 + 28 116.775 373 4 0 8.27721 -105.55 -86.067 + 28 119.741 1129 1 1 46.0182 -36.122 -174.45 + 28 30.1696 1128 1 1 45.85 -36.3151 -174.763 + 28 36.9865 716 1 0 45.424 -36.7981 -175.851 + 28 97.6504 715 1 0 45.3964 -36.85 -175.945 + 28 32.6105 1150 0 1 50.1334 -57.0246 -204.45 + 28 75.1821 1149 0 1 50.0498 -57.0179 -204.543 + 28 166.025 1148 0 1 49.85 -56.9972 -204.589 + 28 427.737 1147 0 1 49.65 -57.0664 -204.793 + 28 107.906 712 4 0 45.8176 -37.6152 -85.85 + 28 227.562 1110 3 1 42.1744 -37.4411 -114.45 + 28 134.549 712 3 0 41.9661 -37.4514 -115.85 + 28 14.0125 1090 2 1 38.099 -38.669 -144.451 + 28 59.0618 1089 2 1 38.05 -38.6622 -144.483 + 28 61.7145 1088 2 1 37.8499 -38.6252 -144.609 + 28 43.6305 1087 2 1 37.6498 -38.5883 -144.745 + 28 205.96 708 2 0 36.1314 -38.4311 -145.85 + 28 138.102 759 2 0 42.428 -28.1719 -146.25 + 28 31.0445 760 2 0 42.7868 -28.05 -145.932 + 28 58.2296 1118 2 1 43.7188 -27.6029 -144.85 + 28 89.1703 1119 2 1 43.85 -27.5265 -144.701 + 28 47.9731 1120 2 1 44.05 -27.3791 -144.466 + 28 102.514 1121 2 1 44.2503 -27.3935 -144.555 + 28 18.6554 1122 2 1 44.45 -27.4427 -144.794 + 28 235.713 761 2 0 45.417 -27.6526 -145.85 + 28 40.437 713 5 0 45.7202 -37.2997 -55.85 + 28 10.2166 1115 4 1 43.2299 -33.2231 -84.4517 + 28 125.39 1116 4 1 43.2502 -33.2164 -84.4788 + 28 57.189 1117 4 1 43.45 -33.1614 -84.738 + 28 59.1453 735 4 0 44.3044 -32.8946 -85.85 + 28 104.686 736 4 0 44.4279 -32.85 -86.005 + 28 97.0276 1222 3 1 64.4584 -23.0592 -114.45 + 28 17.0079 1223 3 1 64.65 -22.9839 -114.796 + 28 68.2621 786 3 0 65.1415 -22.7239 -115.85 + 28 50.9998 787 3 0 65.2347 -22.6499 -116.089 + 28 25.2565 1248 2 1 69.798 -13.6087 -144.45 + 28 105.238 1249 2 1 69.8501 -13.59 -144.557 + 28 280.238 833 2 0 70.5789 -13.3874 -145.85 + 28 214.506 1289 3 0 -82.9214 77.8673 -116.25 +Number of digits in this event: 34 Using G4ParticleGun... -Particle energy: 5.97257 LIN +Particle energy: 4.03285 LIN Particle: e- Event: 29 -Number of tracker hits in this event: 73 - 29 175.408 894 11 1 -1.09584 -42.0052 125.55 - 29 175.298 690 11 0 -1.09669 -42.0057 124.15 - 29 108.331 894 10 1 -1.11614 -42.0128 95.55 - 29 104.865 690 10 0 -1.11787 -42.0122 94.15 - 29 112.798 894 9 1 -1.14642 -41.9945 65.55 - 29 141.344 690 9 0 -1.14636 -41.9924 64.15 - 29 125.493 894 8 1 -1.1428 -41.9549 35.55 - 29 136.193 690 8 0 -1.14214 -41.9527 34.15 - 29 155.359 894 7 1 -1.13272 -41.9046 5.55 - 29 144.993 690 7 0 -1.13235 -41.9018 4.15 - 29 481.119 894 6 1 -1.13064 -41.845 -24.45 - 29 134.405 691 6 0 -1.13064 -41.8412 -25.85 - 29 244.898 894 5 1 -1.13497 -41.7582 -54.45 - 29 294.196 691 5 0 -1.13779 -41.7552 -55.85 - 29 125.707 894 4 1 -1.19496 -41.6824 -84.45 - 29 132.755 691 4 0 -1.19941 -41.6776 -85.85 - 29 103.245 893 3 1 -1.29907 -41.5922 -114.45 - 29 142.738 692 3 0 -1.30563 -41.5899 -115.85 - 29 36.0596 893 2 1 -1.44873 -41.5451 -144.45 - 29 74.6865 892 2 1 -1.45 -41.5446 -144.599 - 29 220.961 692 2 0 -1.4605 -41.5395 -145.85 - 29 187.342 891 1 1 -1.70302 -41.4229 -174.45 - 29 167.944 693 1 0 -1.71372 -41.4155 -175.85 - 29 195.314 890 0 1 -1.93811 -41.2817 -204.45 - 29 93.0205 693 0 0 -1.9482 -41.2754 -205.85 - 29 83.2783 167 0 0 38.1201 -146.708 -206.25 - 29 122.306 166 0 0 38.0298 -146.75 -206.094 - 29 232.543 165 0 0 37.969 -146.95 -206.213 - 29 34.6897 164 0 0 37.8028 -147.15 -206.156 - 29 54.2142 585 1 0 8.68362 -63.05 -176.001 - 29 95.8362 690 0 0 -1.39303 -41.8698 -205.85 - 29 40.3573 689 0 0 -1.23238 -42.05 -206.151 - 29 106.323 619 0 0 17.8897 -56.2356 -206.25 - 29 35.4087 988 0 1 17.8271 -55.9112 -204.85 - 29 82.7962 989 0 1 17.8504 -55.8726 -204.693 - 29 8.36634 990 0 1 18.05 -55.8874 -204.476 - 29 4.21604 768 0 0 -41.9291 -26.4109 -206.25 - 29 0.649146 454 0 0 -31.3652 -89.055 -206.25 - 29 2.08442 713 0 0 -91.7737 -37.407 -206.25 - 29 3.19206 639 0 0 -103.771 -52.1873 -206.25 - 29 1.83008 770 0 0 -37.2715 -26.0476 -206.25 - 29 9.53026 291 3 1 -121.75 117.119 -114.804 - 29 245.98 690 6 0 -0.959406 -41.9534 -25.8501 - 29 46.5048 1221 6 0 -71.2291 64.3156 -26.25 - 29 148.693 1222 6 0 -71.3362 64.45 -26.234 - 29 1.76236 1223 6 0 -71.4694 64.65 -26.2489 - 29 123.26 700 6 0 -2.35888 -40.0127 -25.85 - 29 232.99 701 6 0 -2.48641 -39.85 -25.9685 - 29 232.107 702 6 0 -2.48026 -39.65 -25.9559 - 29 291.201 896 5 1 -0.829914 -41.827 -54.45 - 29 177.8 898 4 1 -0.412013 -42.1054 -84.45 - 29 185.784 689 4 0 -0.403836 -42.1205 -85.85 - 29 96.0229 898 3 1 -0.300989 -42.5765 -114.45 - 29 146.055 687 3 0 -0.306526 -42.6031 -115.85 - 29 227.494 897 2 1 -0.587228 -43.216 -144.45 - 29 118.09 684 2 0 -0.720589 -43.2226 -145.85 - 29 209.569 882 1 1 -3.52624 -43.5851 -174.45 - 29 130.657 682 1 0 -3.62601 -43.616 -175.85 - 29 143.321 870 0 1 -5.87899 -44.1709 -204.45 - 29 144.015 679 0 0 -6.0245 -44.1922 -205.85 - 29 456.109 881 1 1 -3.65017 -43.7931 -174.617 - 29 135.132 880 1 1 -3.85 -44.4733 -174.451 - 29 70.9943 879 1 1 -4.05 -44.5375 -174.575 - 29 100.588 878 1 1 -4.25 -44.5834 -174.693 - 29 193.815 674 1 0 -4.79994 -45.1405 -175.85 - 29 8.80565 655 1 0 12.6094 -49.0443 -176.249 - 29 280.672 654 1 0 12.614 -49.0502 -176.23 - 29 64.6324 692 5 0 -0.749422 -41.65 -56.0067 - 29 77.5565 693 5 0 -0.704392 -41.4499 -56.0004 - 29 64.355 694 5 0 -0.719293 -41.25 -55.9701 - 29 1.63659 695 5 0 -0.738213 -41.05 -55.8562 - 29 21.7151 694 0 0 0.402365 -41.2496 -205.85 - 29 153.414 895 6 1 -1.05 -41.7604 -24.5329 -Number of digits in this event: 42 +Number of tracker hits in this event: 108 + 29 124.257 829 11 1 -14.2036 38.1251 125.55 + 29 107.61 1090 11 0 -14.2032 38.126 124.15 + 29 101.657 829 10 1 -14.2055 38.1754 95.55 + 29 104.154 1090 10 0 -14.2062 38.181 94.15 + 29 112.725 829 9 1 -14.2191 38.3039 65.55 + 29 155.381 1091 9 0 -14.2186 38.3109 64.15 + 29 117.797 829 8 1 -14.1987 38.4584 35.55 + 29 143.492 1092 8 0 -14.1987 38.4685 34.15 + 29 370.492 829 7 1 -14.1924 38.6551 5.55 + 29 131.496 1093 7 0 -14.1914 38.6612 4.15 + 29 172.944 829 6 1 -14.1673 38.7853 -24.45 + 29 155.61 1093 6 0 -14.1665 38.7917 -25.85 + 29 122.682 829 5 1 -14.1518 38.9284 -54.45 + 29 137.892 1094 5 0 -14.1497 38.9359 -55.85 + 29 110.894 829 4 1 -14.1157 39.1017 -84.45 + 29 132.095 1095 4 0 -14.1093 39.1059 -85.85 + 29 219.251 830 3 1 -13.9787 39.2039 -114.45 + 29 455.214 1095 3 0 -13.9762 39.2057 -115.85 + 29 353.822 830 2 1 -13.9385 39.248 -144.45 + 29 514.496 1096 2 0 -13.9367 39.2528 -145.85 + 29 521.846 830 1 1 -13.9072 39.3424 -174.45 + 29 300.522 1096 1 0 -13.9089 39.3511 -175.85 + 29 208.443 830 0 1 -13.9133 39.5392 -204.45 + 29 117.325 1097 0 0 -13.9115 39.5491 -205.85 + 29 124.032 828 4 1 -14.2538 39.2603 -84.45 + 29 53.716 827 4 1 -14.4503 39.3171 -84.4694 + 29 54.4442 826 4 1 -14.65 39.398 -84.4568 + 29 94.5071 825 4 1 -14.85 39.5111 -84.4502 + 29 180.445 824 4 1 -15.05 39.7534 -84.4786 + 29 76.5148 823 4 1 -15.2501 39.995 -84.5811 + 29 84.9316 822 4 1 -15.45 40.2127 -84.6832 + 29 99.814 821 4 1 -15.65 40.3837 -84.7973 + 29 96.0698 820 4 1 -15.85 40.5855 -84.7662 + 29 82.7477 819 4 1 -16.05 40.8181 -84.7182 + 29 6.07079 818 4 1 -16.2501 40.8364 -84.8411 + 29 9.46931 1102 4 0 -17.5437 40.4555 -85.85 + 29 171.677 1101 4 0 -17.5617 40.45 -85.8636 + 29 55.5146 1201 4 0 -75.6339 60.2941 -86.25 + 29 57.4028 1202 4 0 -75.6154 60.45 -86.1067 + 29 65.6979 1203 4 0 -75.5959 60.65 -85.9957 + 29 198.765 525 4 1 -74.9429 62.5958 -84.8499 + 29 141.239 526 4 1 -74.8499 62.8385 -84.6989 + 29 65.049 524 4 1 -75.05 63.1606 -84.625 + 29 59.7045 523 4 1 -75.25 63.1329 -84.6637 + 29 69.1876 522 4 1 -75.4501 63.0952 -84.7571 + 29 6.00912 521 4 1 -75.65 63.1634 -84.8283 + 29 77.3339 1220 4 0 -76.6753 64.1061 -85.8502 + 29 453.512 1221 4 0 -76.8525 64.2503 -85.9282 + 29 26.1898 1418 4 0 -102.261 103.76 -86.25 + 29 560.5 829 3 1 -14.1598 39.2512 -114.45 + 29 357.901 1096 3 0 -14.1536 39.2609 -115.85 + 29 423.275 1097 2 0 -13.9863 39.5205 -145.85 + 29 95.5081 833 1 1 -13.3914 39.4003 -174.45 + 29 215.253 1095 1 0 -13.0665 39.25 -175.881 + 29 14.8001 866 0 1 -6.68176 34.1985 -204.45 + 29 81.562 867 0 1 -6.65 34.1786 -204.489 + 29 66.6263 868 0 1 -6.44978 34.1084 -204.635 + 29 390.242 1068 0 0 -5.56002 33.7835 -205.85 + 29 139.563 1110 0 0 1.85175 42.194 -206.25 + 29 150.581 1111 0 0 1.87394 42.2501 -206.179 + 29 110.453 914 0 1 2.94404 42.7189 -204.85 + 29 132.514 915 0 1 3.05 42.9427 -204.791 + 29 184.01 916 0 1 3.25 43.0565 -204.747 + 29 21.8839 1216 3 0 -2.15356 63.2657 -116.25 + 29 245.848 829 2 1 -14.2114 39.3594 -144.45 + 29 106.804 829 0 1 -14.0536 38.9492 -204.45 + 29 115.372 1094 0 0 -14.0624 38.9245 -205.85 + 29 150.336 826 1 1 -14.7763 41.5108 -174.45 + 29 148.126 1107 1 0 -14.7786 41.5824 -175.85 + 29 118.33 825 0 1 -14.9214 42.9679 -204.45 + 29 70.9578 1114 0 0 -14.8664 43.0362 -205.85 + 29 47.2336 1115 0 0 -14.8548 43.05 -206.128 + 29 238.253 1107 3 0 -18.7417 41.521 -116.25 + 29 38.6806 831 3 1 -13.85 39.4199 -114.786 + 29 80.3744 1098 3 0 -12.599 39.8172 -115.85 + 29 388.332 1099 3 0 -12.4339 39.85 -115.961 + 29 32.0261 845 3 1 -10.8903 40.209 -114.85 + 29 105.948 846 3 1 -10.85 40.2278 -114.794 + 29 89.8622 847 3 1 -10.6499 40.3635 -114.642 + 29 69.7895 848 3 1 -10.45 40.5477 -114.599 + 29 97.9427 842 2 1 -11.6132 36.8978 -144.451 + 29 65.2711 841 2 1 -11.65 36.9522 -144.676 + 29 0.669174 1087 2 0 -12.1941 37.6483 -145.85 + 29 85.1599 1088 2 0 -12.1954 37.6501 -145.853 + 29 59.9418 1089 2 0 -12.3201 37.85 -146.082 + 29 161.679 785 1 1 -22.9189 62.8417 -174.45 + 29 5.54223 786 1 1 -22.85 63.0094 -174.828 + 29 75.0389 1217 1 0 -22.6149 63.5012 -175.85 + 29 38.6385 1218 1 0 -22.5845 63.65 -176.104 + 29 330.636 1395 1 0 -37.1946 99.2181 -176.25 + 29 74.9176 1396 1 0 -37.3089 99.3501 -175.943 + 29 47.2878 1397 1 0 -37.2788 99.55 -175.866 + 29 24.0814 1398 1 0 -37.2963 99.75 -175.882 + 29 43.1569 712 1 1 -37.6223 101.268 -174.85 + 29 271.191 711 1 1 -37.65 101.327 -174.733 + 29 25.8394 1394 1 0 -37.7826 99.1055 -175.85 + 29 1.50288 1075 2 0 -10.771 35.25 -146.038 + 29 2.57634 1074 2 0 -10.6767 35.05 -146.244 + 29 158.858 862 2 0 -45.2863 -7.48179 -146.25 + 29 213.985 863 2 0 -45.389 -7.44995 -146.165 + 29 99.6743 861 2 0 -45.6177 -7.65 -145.984 + 29 117.807 833 0 1 -13.3262 38.2834 -204.45 + 29 100.448 1091 0 0 -13.2949 38.2974 -205.85 + 29 172.236 1097 1 0 -14.053 39.5514 -175.85 + 29 115.923 826 0 1 -14.7283 42.2385 -204.45 + 29 259.391 1098 1 0 -14.1381 39.65 -176.11 + 29 283.363 1099 1 0 -14.1157 39.85 -176.129 + 29 92.2825 828 7 1 -14.25 38.6116 5.39055 +Number of digits in this event: 47 Using G4ParticleGun... -Particle energy: 5.7041 LIN +Particle energy: 2.86315 LIN Particle: e- Event: 30 -Number of tracker hits in this event: 175 - 30 96.3346 428 10 0 68.4966 -94.4156 94.15 - 30 109.963 1242 9 1 68.4965 -94.4147 65.55 - 30 105.558 428 9 0 68.4962 -94.4139 64.15 - 30 126.231 1242 8 1 68.4901 -94.4013 35.55 - 30 99.5096 428 8 0 68.4889 -94.4002 34.15 - 30 110.357 1242 7 1 68.4643 -94.3812 5.55 - 30 96.242 428 7 0 68.464 -94.3793 4.15 - 30 383.555 1242 6 1 68.4581 -94.3355 -24.45 - 30 283.798 429 6 0 68.4574 -94.3332 -25.85 - 30 200.162 1241 5 1 68.4371 -94.2836 -54.45 - 30 112.775 429 5 0 68.4351 -94.2826 -55.85 - 30 247.931 1241 4 1 68.3925 -94.2538 -84.45 - 30 120.644 429 4 0 68.3898 -94.2518 -85.85 - 30 264.327 1241 3 1 68.3338 -94.2069 -114.45 - 30 216.21 429 3 0 68.3225 -94.2065 -115.85 - 30 121.911 1240 2 1 68.0917 -94.1997 -144.45 - 30 121.275 429 2 0 68.0916 -94.2209 -145.85 - 30 111.479 1240 1 1 68.0992 -94.6886 -174.45 - 30 120.76 427 1 0 68.0915 -94.724 -175.85 - 30 103.258 1239 0 1 67.9239 -95.4884 -204.45 - 30 130.505 423 0 0 67.9319 -95.5281 -205.85 - 30 90.9086 523 1 0 107.894 -75.45 -176.22 - 30 20.4678 1334 2 1 87.05 -30.559 -144.645 - 30 201.432 524 1 0 108.248 -75.2498 -176.112 - 30 121.257 422 0 0 67.9296 -95.55 -206.236 - 30 111.611 1242 4 1 68.4579 -94.1985 -84.45 - 30 136.114 431 4 0 68.6931 -93.89 -85.85 - 30 121.656 1264 3 1 72.9116 -88.1009 -114.45 - 30 33.8067 461 3 0 72.8089 -87.6853 -115.85 - 30 82.1663 462 3 0 72.8003 -87.65 -115.98 - 30 117.245 1260 2 1 72.1386 -80.6611 -144.45 - 30 47.4407 1261 2 1 72.25 -80.5622 -144.699 - 30 91.0207 500 2 0 72.7233 -80.0111 -145.85 - 30 63.3849 501 2 0 72.8317 -79.85 -146.113 - 30 67.2819 1337 1 1 87.6442 -59.6727 -174.451 - 30 65.5476 1338 1 1 87.65 -59.8096 -174.689 - 30 49.9771 598 1 0 87.7779 -60.3851 -175.85 - 30 75.6658 597 1 0 87.7988 -60.45 -175.998 - 30 98.8719 338 8 0 111.28 -112.459 33.75 - 30 120.008 1240 4 1 68.2497 -93.9893 -84.647 - 30 86.713 436 4 0 67.2791 -92.8912 -85.85 - 30 115.78 437 4 0 67.1745 -92.75 -86.0017 - 30 5.65586 438 4 0 67.0477 -92.55 -86.2348 - 30 11.3068 505 4 0 29.5028 -79.04 -86.25 - 30 208.503 504 4 0 29.4638 -79.0501 -86.2092 - 30 53.4632 1037 4 1 27.5862 -79.7712 -84.85 - 30 60.1405 1036 4 1 27.45 -79.8111 -84.7507 - 30 94.9417 1035 4 1 27.25 -79.8235 -84.6358 - 30 66.0162 1034 4 1 27.05 -79.7906 -84.538 - 30 56.2448 1033 4 1 26.85 -79.7422 -84.479 - 30 159.257 1032 4 1 26.65 -79.6918 -84.4527 - 30 207.008 1031 4 1 26.4492 -79.6332 -84.4707 - 30 229.791 1030 4 1 26.25 -79.4155 -84.6061 - 30 37.9886 515 4 0 26.0374 -76.9622 -85.85 - 30 71.6433 516 4 0 26.0323 -76.8499 -85.9045 - 30 66.1885 517 4 0 25.992 -76.65 -86.0364 - 30 28.6855 518 4 0 25.9754 -76.45 -86.1706 - 30 73.034 953 4 0 29.5403 10.6862 -86.25 - 30 74.3831 954 4 0 29.5454 10.8506 -86.1706 - 30 55.982 955 4 0 29.544 11.05 -86.0473 - 30 72.4035 956 4 0 29.5432 11.2505 -85.968 - 30 57.7659 957 4 0 29.5913 11.45 -85.9373 - 30 76.7915 958 4 0 29.586 11.6504 -85.8935 - 30 18.3586 959 4 0 29.4548 11.85 -85.8681 - 30 83.5498 1026 4 1 25.4353 14.8207 -84.8498 - 30 90.8096 1025 4 1 25.25 14.8782 -84.8429 - 30 40.5095 1024 4 1 25.05 14.8834 -84.8303 - 30 45.2399 976 4 0 22.4132 15.3709 -85.85 - 30 112.727 998 4 1 19.7803 16.0469 -84.85 - 30 123.943 997 4 1 19.6499 16.0692 -84.7751 - 30 117.167 996 4 1 19.4498 16.197 -84.6825 - 30 126.263 995 4 1 19.25 16.2371 -84.7085 - 30 115.784 428 3 0 68.4888 -94.3651 -115.85 - 30 104.068 1244 2 1 69.0188 -94.7934 -144.45 - 30 61.0967 1245 2 1 69.05 -95.0821 -144.71 - 30 81.4571 417 2 0 69.4676 -96.5763 -145.85 - 30 98.8877 416 2 0 69.5651 -96.7503 -145.988 - 30 68.3053 415 2 0 69.6599 -96.9501 -146.168 - 30 25.0202 414 2 0 69.7595 -97.1503 -146.228 - 30 123.479 1250 2 1 70.1502 -90.8152 -144.45 - 30 50.1113 445 2 0 70.4607 -91.1222 -145.85 - 30 100.018 444 2 0 70.4862 -91.15 -145.968 - 30 104.684 1276 1 1 75.2838 -100.556 -174.45 - 30 98.4379 1277 1 1 75.45 -100.768 -174.723 - 30 58.026 389 1 0 76.7751 -102.221 -175.85 - 30 92.7769 388 1 0 76.9058 -102.35 -175.945 - 30 95.9096 387 1 0 77.1805 -102.55 -176.093 - 30 34.801 386 1 0 77.4709 -102.75 -176.222 - 30 31.8961 1564 0 1 133.072 -142.774 -204.45 - 30 98.8615 1565 0 1 133.15 -142.741 -204.496 - 30 80.2173 1566 0 1 133.35 -142.654 -204.6 - 30 64.0388 1567 0 1 133.55 -142.557 -204.698 - 30 18.0559 1568 0 1 133.75 -142.458 -204.824 - 30 114.374 192 0 0 135.57 -141.664 -205.85 - 30 604.267 193 0 0 135.91 -141.55 -205.99 - 30 32.2945 194 0 0 137.151 -141.35 -206.215 - 30 125.485 1328 5 1 85.7 -90.663 -54.45 - 30 50.0712 450 5 0 86.1207 -89.9236 -55.85 - 30 69.5451 451 5 0 86.168 -89.85 -55.9948 - 30 97.8488 1373 4 1 94.836 -73.4384 -84.4502 - 30 105.873 534 4 0 94.83 -73.2382 -85.85 - 30 89.5913 1361 3 1 92.4602 -69.4684 -114.45 - 30 85.0958 1360 3 1 92.35 -69.4723 -114.616 - 30 157.814 552 3 0 91.459 -69.4925 -115.851 - 30 117.678 410 3 0 56.7886 -97.9564 -116.25 - 30 16.1834 409 3 0 56.7054 -98.15 -115.906 - 30 34.3969 1182 3 1 56.4682 -98.5811 -114.85 - 30 173.154 1181 3 1 56.45 -98.6106 -114.774 - 30 105.354 393 4 0 46.4828 -101.387 -86.25 - 30 79.0757 1129 4 1 45.945 -101.324 -84.85 - 30 191.214 1128 4 1 45.85 -101.306 -84.6165 - 30 27.3204 499 5 0 30.1301 -80.111 -56.25 - 30 72.7546 500 5 0 30.0901 -80.05 -56.1772 - 30 40.8157 501 5 0 29.9367 -79.85 -55.9609 - 30 51.1434 1046 5 1 29.3167 -78.8546 -54.85 - 30 242.486 1045 5 1 29.25 -78.7457 -54.7083 - 30 227.214 1044 5 1 29.05 -78.4491 -54.6766 - 30 8.64482 507 5 0 29.2102 -78.644 -55.85 - 30 142.68 506 5 0 29.2162 -78.65 -55.8788 - 30 103.175 509 5 0 28.8893 -78.1439 -55.85 - 30 307.41 508 5 0 29.0696 -78.2503 -56.0753 - 30 4.91549 988 5 0 91.4966 17.8183 -56.25 - 30 95.2615 428 6 0 68.4534 -94.3901 -25.85 - 30 330.621 1244 5 1 68.8541 -94.8521 -54.4505 - 30 119.867 426 5 0 69.0569 -94.9315 -55.85 - 30 4.37987 425 5 0 69.116 -94.95 -56.234 - 30 108.452 1266 4 1 73.3326 -96.0812 -84.45 - 30 105.161 421 4 0 73.4331 -95.8066 -85.8502 - 30 28.1066 422 4 0 73.4561 -95.7499 -86.1427 - 30 129.372 1280 3 1 76.1524 -89.9599 -114.45 - 30 91.4016 451 3 0 76.1934 -89.7174 -115.85 - 30 20.8174 452 3 0 76.2079 -89.65 -116.176 - 30 105.421 1293 2 1 78.7544 -83.0741 -144.45 - 30 157.309 485 2 0 78.8978 -82.9306 -145.85 - 30 9.83712 1305 1 1 81.2277 -80.3493 -174.45 - 30 252.2 1306 1 1 81.25 -80.3255 -174.477 - 30 34.047 1307 1 1 81.45 -80.1252 -174.754 - 30 74.4387 503 1 0 82.2891 -79.3573 -175.85 - 30 78.3171 504 1 0 82.4041 -79.25 -176.007 - 30 26.0764 1393 0 1 98.9104 -59.645 -204.45 - 30 182.356 1394 0 1 98.9502 -59.5722 -204.508 - 30 49.3872 610 0 0 99.6222 -57.9763 -205.85 - 30 79.4865 611 0 0 99.6701 -57.85 -205.961 - 30 45.1562 612 0 0 99.7543 -57.6497 -206.142 - 30 52.9154 825 0 0 101.359 -15.0112 -206.25 - 30 68.914 826 0 0 101.322 -14.8493 -206.149 - 30 163.902 827 0 0 101.273 -14.65 -206.004 - 30 11.9296 828 0 0 101.203 -14.45 -205.855 - 30 16.9282 1403 0 1 100.771 -13.1072 -204.85 - 30 184.395 1402 0 1 100.75 -13.0497 -204.806 - 30 1.06135 1401 0 1 100.55 -12.559 -204.453 - 30 4.17916 886 1 0 97.6657 -2.65628 -176.25 - 30 194.48 887 1 0 97.6636 -2.64959 -176.23 - 30 203.75 1387 1 1 97.5862 -2.19634 -174.85 - 30 24.2691 1386 1 1 97.55 -2.10107 -174.52 - 30 170.086 836 2 0 82.2047 -12.709 -146.25 - 30 128.643 1305 2 1 81.2233 -12.8353 -144.85 - 30 147.917 841 3 0 48.4509 -11.8459 -116.25 - 30 38.7579 1140 3 1 48.0868 -11.3459 -114.85 - 30 297.713 1139 3 1 48.0499 -11.2514 -114.717 - 30 22.9855 1524 6 0 -10.1949 125.074 -26.25 - 30 93.9663 1525 6 0 -10.1905 125.15 -26.1793 - 30 46.7278 1526 6 0 -10.1749 125.35 -25.9732 - 30 157.223 851 6 1 -9.84432 126.35 -24.85 - 30 127.722 852 6 1 -9.65 126.648 -24.5968 - 30 129.211 1534 6 0 -9.93629 127.016 -25.85 - 30 20.4871 1533 6 0 -9.98948 126.95 -26.2013 - 30 90.1784 1554 6 0 -42.2043 130.959 -26.25 - 30 84.7933 1555 6 0 -42.356 131.15 -26.0811 - 30 49.8384 1556 6 0 -42.5208 131.35 -25.9373 - 30 97.3175 1557 6 0 -42.5939 131.55 -25.9558 - 30 64.05 1558 6 0 -42.7858 131.75 -26.0731 - 30 1.54637 1537 6 0 -72.0083 127.555 -26.25 - 30 169.776 1536 6 0 -72.0125 127.55 -26.2427 - 30 3.19921 1535 6 0 -72.1186 127.35 -26.2415 -Number of digits in this event: 53 -Using G4ParticleGun... -Particle energy: 2.54526 LIN +Number of tracker hits in this event: 42 + 30 127.621 240 9 1 -131.996 -17.2555 65.55 + 30 120.956 813 9 0 -131.999 -17.2593 64.15 + 30 106.092 240 8 1 -132.056 -17.3285 35.55 + 30 110.439 813 8 0 -132.061 -17.3315 34.15 + 30 125.918 239 7 1 -132.165 -17.3982 5.55 + 30 134.391 813 7 0 -132.169 -17.3999 4.15 + 30 136.152 239 6 1 -132.223 -17.4347 -24.45 + 30 137.164 813 6 0 -132.226 -17.4393 -25.85 + 30 393.466 239 5 1 -132.304 -17.5449 -54.45 + 30 373.917 812 5 0 -132.307 -17.5441 -55.85 + 30 273.095 238 4 1 -132.419 -17.5132 -84.45 + 30 289.977 812 4 0 -132.434 -17.5168 -85.85 + 30 263.71 236 3 1 -132.782 -17.6065 -114.45 + 30 307.414 812 3 0 -132.804 -17.6014 -115.85 + 30 269.406 234 2 1 -133.242 -17.4748 -144.45 + 30 387.571 812 2 0 -133.256 -17.4616 -145.85 + 30 115.694 232 1 1 -133.557 -17.168 -174.45 + 30 131.126 814 1 0 -133.574 -17.1597 -175.85 + 30 137.373 231 0 1 -133.929 -16.9981 -204.45 + 30 120.878 815 0 0 -133.939 -16.9994 -205.85 + 30 452.496 236 1 1 -132.829 -17.7402 -174.45 + 30 28.3836 237 1 1 -132.75 -17.7702 -174.825 + 30 5.76665 801 1 0 -129.907 -19.8224 -175.85 + 30 64.4312 262 1 1 -127.627 -20.9718 -174.85 + 30 99.4916 796 1 0 -125.84 -20.7339 -175.85 + 30 133.789 239 4 1 -132.274 -17.5448 -84.45 + 30 133.921 238 3 1 -132.543 -17.6197 -114.45 + 30 242.617 236 2 1 -132.886 -17.5956 -144.45 + 30 114.054 812 1 0 -132.882 -17.6475 -175.85 + 30 237.838 236 0 1 -132.803 -17.4144 -204.45 + 30 117.755 813 0 0 -132.804 -17.3854 -205.85 + 30 100.832 813 4 0 -132.555 -17.3328 -85.85 + 30 164.984 813 3 0 -132.758 -17.31 -115.85 + 30 107.183 814 2 0 -132.909 -17.2347 -145.85 + 30 121.13 810 1 0 -132.919 -17.8511 -175.85 + 30 137.793 807 0 0 -132.839 -18.6344 -205.85 + 30 82.086 795 0 0 -136.49 -20.9357 -206.25 + 30 58.116 258 3 1 -128.55 -145.544 -114.619 + 30 83.1107 238 1 1 -132.492 -17.8879 -174.45 + 30 148.989 808 1 0 -131.215 -18.3578 -175.85 + 30 122.03 809 1 0 -133.313 -18.25 -175.921 + 30 150.753 230 1 1 -133.999 -18.5825 -174.85 +Number of digits in this event: 30 +Using G4ParticleGun... +Particle energy: 1.86977 LIN Particle: e- Event: 31 -Number of tracker hits in this event: 63 - 31 125.394 1474 9 1 115.063 -45.6324 65.55 - 31 100.851 672 9 0 115.062 -45.634 64.15 - 31 619.742 1474 8 1 115.029 -45.6736 35.55 - 31 113.949 671 8 0 115.019 -45.6763 34.15 - 31 125.815 1473 7 1 114.809 -45.7426 5.55 - 31 132.625 671 7 0 114.798 -45.7473 4.15 - 31 135.12 1472 6 1 114.58 -45.8295 -24.45 - 31 134.81 671 6 0 114.567 -45.8311 -25.85 - 31 125.259 1470 5 1 114.315 -45.8525 -54.45 - 31 102.783 670 5 0 114.306 -45.8507 -55.85 - 31 97.5283 1469 4 1 114.116 -45.8136 -84.45 - 31 171.605 671 4 0 114.104 -45.8073 -85.85 - 31 604.134 1468 3 1 113.846 -45.691 -114.45 - 31 219.228 671 3 0 113.831 -45.6824 -115.85 - 31 179.114 1467 2 1 113.557 -45.4964 -144.45 - 31 108.747 672 2 0 113.544 -45.4912 -145.85 - 31 105.299 1465 1 1 113.273 -45.3859 -174.45 - 31 104.457 673 1 0 113.258 -45.382 -175.85 - 31 115.295 1464 0 1 112.978 -45.3111 -204.45 - 31 121.24 673 0 0 112.965 -45.308 -205.85 - 31 126.398 670 3 0 113.718 -45.9019 -115.85 - 31 143.693 1462 2 1 112.687 -45.5886 -144.45 - 31 118.19 673 2 0 112.56 -45.4471 -145.85 - 31 112.197 1451 1 1 110.398 -42.5883 -174.45 - 31 146.075 687 1 0 110.475 -42.5742 -175.85 - 31 126.05 1458 0 1 111.847 -40.855 -204.45 - 31 168.781 696 0 0 111.962 -40.8397 -205.851 - 31 45.8208 1460 7 0 36.9974 112.15 4.07001 - 31 68.3317 1459 7 0 37.0079 112.15 4.12413 - 31 130.713 1461 2 1 112.438 -44.2652 -144.45 - 31 167.079 680 2 0 112.294 -43.967 -145.85 - 31 127.97 1447 1 1 109.588 -37.1526 -174.45 - 31 11.78 1446 1 1 109.55 -37.0533 -174.818 - 31 107.831 716 1 0 109.428 -36.7703 -175.85 - 31 107.444 1431 0 1 106.436 -28.7108 -204.45 - 31 7.67133 758 0 0 106.316 -28.2587 -205.851 - 31 118.56 759 0 0 106.314 -28.25 -205.878 - 31 113.393 681 2 0 112.257 -43.85 -146.109 - 31 46.5903 680 8 0 114.148 -43.9502 34.1497 - 31 424.914 1468 8 1 113.903 -43.2729 35.15 - 31 63.3912 1469 8 1 113.95 -43.0805 35.3772 - 31 136.568 1475 8 1 115.15 -45.5828 35.2218 - 31 12.9257 1473 8 1 114.95 -45.3458 35.2077 - 31 201.022 677 8 0 114.792 -44.6226 34.15 - 31 106.962 678 8 0 114.737 -44.45 33.8691 - 31 125.463 1443 7 1 108.914 -26.5529 5.54983 - 31 104.145 767 7 0 108.665 -26.4736 4.15 - 31 14.2491 768 7 0 108.61 -26.45 3.80356 - 31 79.484 1405 6 1 101.29 -16.642 -24.4503 - 31 30.4187 1406 6 1 101.35 -16.6063 -24.7011 - 31 114.509 818 6 0 101.552 -16.3471 -25.85 - 31 13.5526 819 6 0 101.59 -16.25 -26.187 - 31 105.602 1406 5 1 101.45 -10.362 -54.45 - 31 79.9252 1407 5 1 101.55 -10.2037 -54.6268 - 31 120.48 849 5 0 102.088 -10.1653 -55.8502 - 31 180.754 935 5 0 143.095 7.08504 -56.25 - 31 16.0216 1616 5 1 143.525 7.06718 -54.85 - 31 84.6702 1617 5 1 143.55 7.08617 -54.7967 - 31 176.528 1618 5 1 143.75 7.15736 -54.689 - 31 91.8769 1619 5 1 143.95 7.12791 -54.6894 - 31 4.7868 977 5 0 153.208 15.45 -55.9846 - 31 24.3975 675 8 0 114.986 -44.85 34.0051 - 31 131.725 668 8 0 114.986 -46.2679 34.15 -Number of digits in this event: 29 +Number of tracker hits in this event: 69 + 31 128.417 776 11 0 80.1555 -24.7042 124.15 + 31 100.09 1300 10 1 80.1805 -24.7018 95.55 + 31 118.635 776 10 0 80.1844 -24.7042 94.15 + 31 118.462 1300 9 1 80.2345 -24.7567 65.55 + 31 264.243 776 9 0 80.2352 -24.7553 64.15 + 31 125.126 1301 8 1 80.2703 -24.7095 35.55 + 31 220.565 776 8 0 80.2704 -24.7056 34.15 + 31 108.508 1301 7 1 80.2759 -24.6199 5.55 + 31 117.095 777 7 0 80.2772 -24.6181 4.15 + 31 343.486 1301 6 1 80.3297 -24.579 -24.45 + 31 150.482 777 6 0 80.3279 -24.5791 -25.85 + 31 147.933 1301 5 1 80.2752 -24.6083 -54.45 + 31 291.792 777 5 0 80.272 -24.6154 -55.85 + 31 127.542 1300 4 1 80.2088 -24.775 -84.45 + 31 118.581 776 4 0 80.1977 -24.7903 -85.85 + 31 94.5311 1299 3 1 79.9871 -25.1457 -114.45 + 31 112.251 774 3 0 79.9716 -25.1609 -115.85 + 31 121.475 1298 2 1 79.6855 -25.4789 -144.45 + 31 151.714 772 2 0 79.6554 -25.4863 -145.85 + 31 140.472 1294 1 1 79.0435 -25.611 -174.45 + 31 132.658 772 1 0 79.0068 -25.6223 -175.85 + 31 99.4913 1290 0 1 78.1948 -25.7922 -204.45 + 31 161.809 771 0 0 78.1084 -25.828 -205.85 + 31 127.4 933 13 1 6.67818 89.834 185.549 + 31 6.03516 932 13 1 6.64998 90.0449 185.346 + 31 110.35 931 13 1 6.42315 90.05 185.211 + 31 131.483 1351 2 1 90.4002 -22.5038 -144.45 + 31 96.8458 1350 2 1 90.35 -22.5224 -144.574 + 31 168.768 788 2 0 90.05 -22.3599 -145.998 + 31 97.994 1390 14 0 156.412 98.3233 213.75 + 31 153.962 1391 14 0 156.487 98.35 213.895 + 31 72.7267 786 2 0 90.1836 -22.6944 -145.85 + 31 128.965 1321 1 1 84.3445 -26.026 -174.45 + 31 200.844 769 1 0 84.3102 -26.0569 -175.85 + 31 122.522 1313 0 1 82.7047 -27.477 -204.45 + 31 110.772 763 0 0 82.6203 -27.4213 -205.85 + 31 30.8552 1203 1 1 60.85 89.9134 -174.574 + 31 342.837 775 6 0 80.3736 -24.9584 -25.85 + 31 129.705 1303 5 1 80.7544 -25.2721 -54.45 + 31 135.504 773 5 0 80.7757 -25.3087 -55.85 + 31 104.697 1305 4 1 81.1633 -26.1751 -84.45 + 31 125.352 769 4 0 81.1782 -26.2117 -85.85 + 31 149.866 1307 3 1 81.5669 -26.9939 -114.45 + 31 101.876 765 3 0 81.6012 -27.0097 -115.85 + 31 150.457 1311 2 1 82.3929 -27.1995 -144.45 + 31 119.608 764 2 0 82.4703 -27.2234 -145.85 + 31 152.509 1319 1 1 83.977 -27.7162 -174.45 + 31 147.13 761 1 0 84.0106 -27.7498 -175.85 + 31 156.098 1323 0 1 84.6683 -28.4446 -204.45 + 31 225.588 757 0 0 84.6503 -28.4982 -205.85 + 31 178.582 1326 0 1 85.3113 -28.2233 -204.451 + 31 101.564 1325 0 1 85.25 -28.3107 -204.652 + 31 56.269 756 0 0 85.038 -28.7589 -205.85 + 31 51.9448 755 0 0 84.9962 -28.85 -206.073 + 31 96.3152 759 0 0 85.5894 -28.2122 -205.85 + 31 256.285 1320 0 1 84.1518 -27.6246 -204.45 + 31 242.87 761 0 0 84.145 -27.6576 -205.85 + 31 116.832 1302 5 1 80.5572 -24.5374 -54.45 + 31 220.38 1304 4 1 80.9223 -23.4424 -84.45 + 31 112.189 783 4 0 80.9179 -23.4481 -85.85 + 31 25.5543 782 4 0 80.9165 -23.45 -86.189 + 31 115.062 1304 3 1 80.9442 -23.5334 -114.45 + 31 86.6958 782 3 0 80.9676 -23.5814 -115.85 + 31 134.86 1307 2 1 81.5627 -24.577 -144.45 + 31 105.537 777 2 0 81.5166 -24.5963 -145.85 + 31 135.509 1303 1 1 80.756 -25.1101 -174.451 + 31 147.788 774 1 0 80.728 -25.1503 -175.85 + 31 109.584 1299 0 1 79.9681 -25.6092 -204.45 + 31 117.392 772 0 0 79.9402 -25.5648 -205.85 +Number of digits in this event: 41 Using G4ParticleGun... -Particle energy: 6.52326 LIN +Particle energy: 8.35358 LIN Particle: e- Event: 32 -Number of tracker hits in this event: 125 - 32 142.791 1038 10 1 27.7582 -111.02 95.55 - 32 103.403 345 10 0 27.7574 -111.02 94.15 - 32 194.693 1038 9 1 27.7481 -111.017 65.55 - 32 112.058 345 9 0 27.7465 -111.016 64.15 - 32 366.717 1038 8 1 27.7157 -110.995 35.55 - 32 135.581 345 8 0 27.7129 -110.994 34.15 - 32 118.121 1038 7 1 27.6615 -110.974 5.55 - 32 117.655 345 7 0 27.6596 -110.973 4.15 - 32 122.706 1037 6 1 27.6396 -110.967 -24.45 - 32 134.465 345 6 0 27.6402 -110.968 -25.85 - 32 595.283 1037 5 1 27.6473 -110.982 -54.45 - 32 368.965 345 5 0 27.6492 -110.981 -55.85 - 32 283.095 1038 4 1 27.7015 -110.979 -84.45 - 32 301.287 345 4 0 27.707 -110.978 -85.85 - 32 394.869 1038 3 1 27.8123 -110.96 -114.45 - 32 167.322 345 3 0 27.8195 -110.957 -115.85 - 32 446.002 1039 2 1 27.974 -110.899 -144.45 - 32 132.447 346 2 0 27.9789 -110.897 -145.85 - 32 149.342 1040 1 1 28.075 -110.861 -174.45 - 32 124.727 346 1 0 28.0782 -110.86 -175.85 - 32 133.066 1040 0 1 28.1331 -110.834 -204.45 - 32 234.152 346 0 0 28.1358 -110.83 -205.85 - 32 16.0271 541 2 1 -71.65 -129.564 -144.653 - 32 8.3898 354 7 1 -109.222 4.29864 5.55 - 32 238.89 1039 0 1 27.91 -110.751 -204.45 - 32 237.857 347 0 0 27.2174 -110.607 -205.85 - 32 33.6595 348 0 0 27.0819 -110.55 -206.15 - 32 250.179 1038 2 1 27.7638 -110.986 -144.45 - 32 605.972 345 2 0 27.7615 -110.985 -145.85 - 32 227.901 1039 1 1 27.8532 -110.624 -174.45 - 32 114.195 347 1 0 27.8545 -110.602 -175.85 - 32 413.561 1038 0 1 27.8275 -110.037 -204.45 - 32 100.612 350 0 0 27.8005 -110.005 -205.85 - 32 13.807 382 0 0 38.1226 -103.691 -206.25 - 32 51.5379 512 0 0 40.0727 -77.4882 -206.25 - 32 234.876 352 0 0 28.8372 -109.685 -205.85 - 32 99.0808 1052 1 1 30.5009 -104.068 -174.45 - 32 56.1604 1053 1 1 30.65 -103.89 -174.715 - 32 55.173 385 1 0 31.2851 -103.059 -175.85 - 32 81.9202 386 1 0 31.3681 -102.95 -175.996 - 32 55.7009 1115 0 1 43.1675 -92.1682 -204.45 - 32 68.1903 1116 0 1 43.25 -92.1397 -204.647 - 32 52.7723 440 0 0 43.7047 -91.9687 -205.85 - 32 75.7403 441 0 0 43.7615 -91.95 -206.004 - 32 9.76374 1039 3 1 27.85 -111.216 -114.813 - 32 36.945 343 3 0 28.2294 -111.533 -115.85 - 32 117.547 342 3 0 28.2458 -111.55 -115.896 - 32 114.144 1099 2 1 39.9959 -121.407 -144.45 - 32 4.58103 1100 2 1 40.0501 -121.486 -144.83 - 32 88.2873 292 2 0 40.1393 -121.693 -145.85 - 32 27.903 291 2 0 40.1456 -121.75 -146.153 - 32 110.259 346 3 0 27.7927 -110.835 -115.85 - 32 102.3 1025 2 1 25.0775 -110.484 -144.45 - 32 95.0676 348 2 0 25.1003 -110.482 -145.85 - 32 3.64159 347 2 0 25.1051 -110.55 -146.233 - 32 297.793 905 0 1 1.25 -68.1707 -204.479 - 32 96.9602 1022 1 1 24.5563 -100.409 -174.45 - 32 100.026 1021 1 1 24.45 -100.644 -174.679 - 32 56.0686 392 1 0 23.6528 -101.602 -175.85 - 32 92.3845 391 1 0 23.5844 -101.75 -176.001 - 32 321.744 1037 2 1 27.5933 -111.013 -144.45 - 32 137.966 1036 1 1 27.305 -110.416 -174.45 - 32 103.105 349 1 0 27.4427 -110.319 -175.85 - 32 133.656 1049 0 1 29.9928 -108.689 -204.45 - 32 107.577 358 0 0 30.0049 -108.539 -205.851 - 32 102.888 1195 2 1 59.1136 -115.025 -144.85 - 32 5.7123 361 1 0 30.214 -107.95 -175.885 - 32 395.254 344 1 0 28.047 -111.295 -175.85 - 32 149.101 1042 0 1 28.543 -111.737 -204.45 - 32 115.827 341 0 0 28.5605 -111.757 -205.85 - 32 141.469 446 1 0 27.8109 -90.9252 -176.25 - 32 249.529 1037 4 1 27.6269 -111.261 -84.45 - 32 114.331 344 4 0 27.6596 -111.181 -85.8501 - 32 105.572 1042 3 1 28.5224 -109.769 -114.45 - 32 156.346 352 3 0 28.4828 -109.607 -115.85 - 32 38.9974 1036 2 1 27.45 -106.257 -144.699 - 32 134.41 370 2 0 27.4094 -106.142 -145.85 - 32 125.193 1033 1 1 26.7048 -103.633 -174.45 - 32 124.396 383 1 0 26.5977 -103.48 -175.85 - 32 107.318 1023 0 1 24.689 -100.542 -204.45 - 32 115.507 398 0 0 24.5877 -100.462 -205.85 - 32 133.81 1040 3 1 28.1222 -112.048 -114.45 - 32 129.898 340 3 0 28.1089 -112.055 -115.85 - 32 99.3139 340 2 0 27.9223 -112.107 -145.85 - 32 163.172 1034 1 1 27.0492 -111.377 -174.45 - 32 182.663 1028 0 1 25.8365 -110.727 -204.45 - 32 207.09 1035 1 1 27.05 -111.382 -174.592 - 32 88.2018 342 1 0 27.0675 -111.691 -175.851 - 32 208.657 341 1 0 27.1418 -111.75 -175.915 - 32 16.3413 343 2 0 27.6465 -111.366 -145.85 - 32 91.9746 344 2 0 27.641 -111.35 -145.87 - 32 7.99397 537 2 0 -20.5994 -72.4661 -146.25 - 32 129.82 538 2 0 -20.627 -72.45 -146.231 - 32 4.43056 539 2 0 -20.9395 -72.25 -145.862 - 32 46.9167 790 2 1 -21.9332 -71.5284 -144.85 - 32 61.1927 789 2 1 -22.05 -71.4543 -144.764 - 32 87.9904 788 2 1 -22.2503 -71.3956 -144.678 - 32 74.3846 787 2 1 -22.45 -71.3896 -144.564 - 32 179.401 786 2 1 -22.6861 -71.3694 -144.45 - 32 3.08627 551 2 0 -22.6018 -69.6615 -145.85 - 32 99.2629 552 2 0 -22.6006 -69.65 -145.863 - 32 61.9475 553 2 0 -22.5361 -69.45 -146.121 - 32 7.59542 373 2 0 -57.7157 -105.35 -146.231 - 32 50.8252 535 3 0 73.8663 -72.9414 -116.25 - 32 97.054 536 3 0 73.9656 -72.85 -116.15 - 32 61.2579 537 3 0 74.1645 -72.65 -116.045 - 32 126.381 538 3 0 74.2779 -72.4497 -115.982 - 32 89.5848 539 3 0 74.5989 -72.25 -115.92 - 32 39.0967 1297 3 1 79.5894 -74.3111 -114.85 - 32 68.8081 1298 3 1 79.65 -74.3495 -114.815 - 32 70.8807 1299 3 1 79.85 -74.4063 -114.735 - 32 78.8537 1300 3 1 80.05 -74.4163 -114.673 - 32 348.893 1301 3 1 80.2506 -74.3675 -114.607 - 32 0.0956997 1302 3 1 80.45 -74.1701 -114.451 - 32 16.4951 1016 4 1 23.2634 -112.012 -84.85 - 32 69.7286 1015 4 1 23.25 -112.024 -84.831 - 32 237.624 1037 0 1 27.6036 -110.994 -204.45 - 32 420.26 345 0 0 27.4542 -111.011 -205.851 - 32 9.58432 1349 5 0 101.162 89.85 -56.05 - 32 58.2076 1607 7 1 141.55 131.488 5.43384 - 32 57.0756 1401 5 1 100.391 91.5043 -54.8499 - 32 120.83 1400 5 1 100.35 91.5912 -54.758 - 32 7.20878 1399 5 1 100.15 91.7166 -54.4685 - 32 10.5663 1441 4 1 108.528 -66.9186 -84.4504 - 32 102.217 1442 4 1 108.55 -66.9104 -84.4788 -Number of digits in this event: 53 -Using G4ParticleGun... -Particle energy: 7.93474 LIN +Number of tracker hits in this event: 140 + 32 141.422 1214 11 1 62.9777 -14.3568 125.55 + 32 118.763 828 11 0 62.9775 -14.3565 124.15 + 32 180.262 1214 10 1 62.9755 -14.3498 95.55 + 32 119.113 828 10 0 62.9751 -14.3476 94.15 + 32 114.287 1214 9 1 62.9753 -14.3101 65.55 + 32 108.037 828 9 0 62.9745 -14.3083 64.15 + 32 122.074 1214 8 1 62.95 -14.2736 35.55 + 32 123.783 828 8 0 62.949 -14.2714 34.15 + 32 597.132 1214 7 1 62.9283 -14.2236 5.55 + 32 338.096 829 7 0 62.9297 -14.2226 4.15 + 32 539.899 1214 6 1 62.9552 -14.2014 -24.45 + 32 481.844 829 6 0 62.9536 -14.2002 -25.85 + 32 399.653 1214 5 1 62.9113 -14.1627 -54.45 + 32 194.645 829 5 0 62.9121 -14.1605 -55.85 + 32 97.5598 1214 4 1 62.9273 -14.0855 -84.45 + 32 224.328 829 4 0 62.9289 -14.0792 -85.85 + 32 119.435 1214 3 1 62.9895 -13.9288 -114.45 + 32 98.7343 830 3 0 62.9914 -13.9229 -115.85 + 32 99.7361 1214 2 1 63.0335 -13.8072 -144.45 + 32 102.674 831 2 0 63.0372 -13.8016 -145.85 + 32 213.593 1215 1 1 63.102 -13.696 -174.45 + 32 125.491 831 1 0 63.1077 -13.6929 -175.85 + 32 518.081 1215 0 1 63.2276 -13.6383 -204.45 + 32 249.447 832 0 0 63.2349 -13.6328 -205.85 + 32 129.376 831 0 0 63.1827 -13.6562 -205.851 + 32 7.56055 544 3 1 -71.05 -119.243 -114.55 + 32 111.576 850 0 0 59.6364 -9.99017 -206.25 + 32 53.4038 1194 0 1 58.9252 -10.1529 -204.85 + 32 67.1506 1193 0 1 58.85 -10.1853 -204.686 + 32 33.6422 317 1 0 -7.87929 -116.55 -176.246 + 32 153.915 851 1 1 -9.6531 -110.075 -174.85 + 32 61.8346 316 1 0 -8.00706 -116.75 -176.143 + 32 61.5833 315 1 0 -8.08769 -116.95 -176.101 + 32 81.7226 314 1 0 -8.19723 -117.15 -176.175 + 32 66.9085 313 1 0 -8.42759 -117.35 -176.214 + 32 9.10536 312 1 0 -8.57642 -117.55 -176.245 + 32 30.9789 843 0 0 43.981 -11.3852 -206.25 + 32 98.8897 830 7 0 63.0378 -14.0284 4.15 + 32 119.921 1225 6 1 65.1784 -10.2871 -24.45 + 32 123.175 849 6 0 65.0007 -10.126 -25.85 + 32 58.9213 1206 5 1 61.2604 -6.88957 -54.4506 + 32 52.7313 1205 5 1 61.25 -6.89667 -54.6948 + 32 127.739 865 5 0 61.1972 -6.92051 -55.85 + 32 116.091 1199 4 1 60.0035 -7.50217 -84.45 + 32 164.198 863 4 0 59.7319 -7.35316 -85.8503 + 32 115.711 1170 3 1 54.1941 -4.64512 -114.45 + 32 174.913 878 3 0 53.841 -4.37548 -115.85 + 32 203.193 1126 2 1 45.4203 1.29355 -144.451 + 32 109.829 909 2 0 44.9732 1.91126 -145.85 + 32 46.301 910 2 0 44.8635 2.05 -146.159 + 32 141.999 1073 1 1 34.7165 14.8384 -174.451 + 32 130.912 978 1 0 34.5931 15.6797 -175.85 + 32 51.1464 979 1 0 34.56 15.85 -176.128 + 32 203.747 1052 0 1 30.5362 36.191 -204.45 + 32 11.2898 1084 0 0 30.5046 37.0297 -205.85 + 32 135.374 1085 0 0 30.504 37.0502 -205.885 + 32 11.6978 1086 0 0 30.5184 37.25 -206.223 + 32 5.50971 1007 0 1 21.5687 22.79 -204.45 + 32 29.2052 1006 0 1 21.45 22.8988 -204.747 + 32 124.33 1015 0 0 21.0203 23.0605 -205.85 + 32 27.2111 1117 0 0 30.3092 43.6051 -206.25 + 32 129.476 1118 0 0 30.3879 43.6501 -206.19 + 32 205.696 1054 0 1 30.9669 43.7633 -204.85 + 32 112.544 1213 4 1 62.8472 -14.0634 -84.45 + 32 115.124 1213 3 1 62.8365 -14.0672 -114.45 + 32 96.2644 829 3 0 62.8345 -14.0677 -115.85 + 32 123.87 1213 2 1 62.7974 -14.076 -144.45 + 32 128.054 829 2 0 62.7971 -14.0756 -145.85 + 32 116.652 1213 1 1 62.7887 -14.0644 -174.45 + 32 91.5313 829 1 0 62.7882 -14.0646 -175.85 + 32 96.7566 1213 0 1 62.7736 -14.0652 -204.45 + 32 96.4296 829 0 0 62.775 -14.064 -205.85 + 32 13.8614 907 0 0 93.102 1.61814 -206.25 + 32 73.6845 908 0 0 93.0951 1.65 -206.236 + 32 48.4548 909 0 0 93.0678 1.85 -206.185 + 32 57.0192 910 0 0 93.0313 2.05 -206.154 + 32 52.9686 911 0 0 92.98 2.25023 -206.17 + 32 40.6491 912 0 0 92.9688 2.45112 -206.227 + 32 271.318 1582 0 0 120.031 136.663 -206.25 + 32 42.8693 1583 0 0 120.025 136.75 -206.218 + 32 93.2993 1584 0 0 119.995 136.95 -206.21 + 32 56.101 1585 0 0 119.959 137.15 -206.221 + 32 36.6964 1586 0 0 119.909 137.35 -206.226 + 32 358.37 1573 0 0 139.484 134.9 -206.25 + 32 91.5378 835 5 0 63.5473 -12.966 -55.8503 + 32 124.87 836 5 0 63.6137 -12.85 -55.9637 + 32 129.433 828 5 0 62.9168 -14.3031 -55.85 + 32 98.9911 1216 4 1 63.4167 -14.9501 -84.45 + 32 138.352 825 4 0 63.4582 -14.9926 -85.85 + 32 165.979 1222 3 1 64.469 -16.0114 -114.45 + 32 27.298 820 3 0 64.5399 -16.0472 -115.85 + 32 79.5857 819 3 0 64.5454 -16.05 -115.953 + 32 167.277 1229 2 1 65.8546 -16.9727 -144.45 + 32 263.095 814 2 0 65.9344 -17.0733 -145.85 + 32 189.842 1237 1 1 67.5535 -18.9638 -174.45 + 32 118.412 804 1 0 67.6965 -19.0615 -175.85 + 32 132.066 1253 0 1 70.6715 -20.9542 -204.45 + 32 146.76 795 0 0 70.8415 -21.0275 -205.85 + 32 3.00724 794 0 0 70.8908 -21.05 -206.24 + 32 177.461 1477 14 0 10.8315 115.587 213.75 + 32 198.452 1216 5 1 63.2612 -13.8071 -54.45 + 32 167.376 831 5 0 63.2703 -13.8119 -55.8503 + 32 100.306 1218 4 1 63.7585 -13.7094 -84.45 + 32 149.275 831 4 0 63.7219 -13.7116 -85.8502 + 32 128.412 1216 3 1 63.277 -13.7292 -114.45 + 32 117.713 831 3 0 63.2155 -13.7158 -115.85 + 32 92.8471 1207 2 1 61.6389 -13.3154 -144.45 + 32 150.865 833 2 0 61.5426 -13.2997 -145.85 + 32 217.133 1197 1 1 59.5304 -13.5259 -174.45 + 32 291.58 832 1 0 59.5066 -13.5612 -175.85 + 32 113.263 1195 0 1 59.0693 -14.5109 -204.451 + 32 127.078 827 0 0 59.0772 -14.601 -205.85 + 32 40.7522 1196 1 1 59.4499 -13.5277 -174.721 + 32 171.019 1167 0 1 53.5667 -14.4236 -204.45 + 32 93.117 1166 0 1 53.45 -14.5557 -204.712 + 32 37.8503 821 0 0 53.0322 -15.7206 -205.85 + 32 59.8675 820 0 0 52.9755 -15.8504 -205.976 + 32 102.791 819 0 0 52.8986 -16.0501 -206.154 + 32 16.8141 621 0 0 46.3958 -55.7829 -206.25 + 32 56.2612 620 0 0 46.3917 -55.85 -206.202 + 32 66.3566 619 0 0 46.4008 -56.05 -206.067 + 32 27.4363 618 0 0 46.4296 -56.2504 -205.904 + 32 189.107 1134 0 1 46.9632 -57.107 -204.85 + 32 246.249 1135 0 1 47.05 -57.5882 -204.563 + 32 101.778 1136 0 1 47.25 -57.7662 -204.73 + 32 56.0341 607 0 0 48.3928 -58.5137 -205.85 + 32 246.693 606 0 0 48.5648 -58.6503 -205.913 + 32 130.587 605 0 0 48.8302 -58.85 -205.941 + 32 11.1611 604 0 0 49.18 -59.05 -205.862 + 32 8.82611 1160 0 1 52.2199 -59.8451 -204.85 + 32 53.2337 1161 0 1 52.2503 -59.8524 -204.841 + 32 81.4366 1162 0 1 52.45 -59.9201 -204.796 + 32 79.9933 1163 0 1 52.6501 -60.0111 -204.756 + 32 45.6392 1164 0 1 52.85 -60.0435 -204.708 + 32 71.3669 1165 0 1 53.05 -60.0404 -204.674 + 32 62.9916 1168 0 1 53.6504 -59.9943 -204.682 + 32 30.123 1169 0 1 53.8503 -60.0306 -204.514 + 32 157.832 1148 0 1 49.7637 -56.2045 -204.85 + 32 66.6617 811 7 0 66.1345 -17.8019 4.15 + 32 99.953 810 7 0 66.2058 -17.85 4.09032 +Number of digits in this event: 61 +Using G4ParticleGun... +Particle energy: 9.3746 LIN Particle: e- Event: 33 -Number of tracker hits in this event: 142 - 33 92.7935 258 9 1 -128.466 -3.30923 65.55 - 33 117.228 883 9 0 -128.466 -3.30941 64.15 - 33 112.399 258 8 1 -128.468 -3.30778 35.55 - 33 110.856 883 8 0 -128.468 -3.30795 34.15 - 33 273.171 258 7 1 -128.488 -3.31658 5.55 - 33 187.119 883 7 0 -128.49 -3.31853 4.15 - 33 103.109 258 6 1 -128.537 -3.34638 -24.45 - 33 156.756 883 6 0 -128.539 -3.34904 -25.85 - 33 222.167 257 5 1 -128.588 -3.40831 -54.45 - 33 352.081 883 5 0 -128.592 -3.41121 -55.85 - 33 122.174 257 4 1 -128.666 -3.47201 -84.45 - 33 116.784 882 4 0 -128.669 -3.47634 -85.85 - 33 102.642 257 3 1 -128.727 -3.55659 -114.45 - 33 117.837 882 3 0 -128.731 -3.56193 -115.85 - 33 116.464 256 2 1 -128.808 -3.6739 -144.45 - 33 103.433 881 2 0 -128.813 -3.67688 -145.85 - 33 389.599 256 1 1 -128.887 -3.73741 -174.45 - 33 169.606 881 1 0 -128.89 -3.74134 -175.85 - 33 115.751 255 0 1 -128.967 -3.81737 -204.45 - 33 266.604 881 0 0 -128.969 -3.81731 -205.85 - 33 76.3689 882 7 0 -128.551 -3.45 3.99867 - 33 177.109 881 7 0 -128.687 -3.65038 3.85962 - 33 98.8911 880 7 0 -128.828 -3.85 3.88371 - 33 117.487 257 7 1 -128.735 -3.44535 5.15 - 33 222.756 259 7 1 -128.35 -3.21551 5.42605 - 33 142.248 256 5 1 -128.751 -3.35553 -54.5786 - 33 17.2527 255 5 1 -128.95 -3.27278 -54.8087 - 33 25.1917 884 5 0 -130.387 -3.06338 -55.85 - 33 156.59 885 5 0 -130.45 -3.05 -55.898 - 33 43.1659 1069 5 0 -6.19814 34.0051 -56.25 - 33 28.3746 1070 5 0 -6.09442 34.05 -56.2148 - 33 292.538 882 1 0 -128.857 -3.57907 -175.85 - 33 165.391 256 0 1 -128.799 -3.68027 -204.45 - 33 49.8222 876 1 0 -129.081 -4.70715 -175.85 - 33 66.267 875 1 0 -129.117 -4.85024 -176.032 - 33 151.357 765 1 0 -157.303 -26.8698 -176.25 - 33 9.64832 764 1 0 -157.646 -27.0501 -175.883 - 33 86.7931 107 1 1 -158.593 -27.5496 -174.85 - 33 80.7627 106 1 1 -158.75 -27.6693 -174.664 - 33 142.357 863 2 0 -134.456 -7.43935 -146.25 - 33 143.059 864 2 0 -134.172 -7.25 -145.99 - 33 4.54816 238 2 1 -132.363 -6.36937 -144.85 - 33 55.9538 239 2 1 -132.35 -6.36281 -144.842 - 33 75.0287 240 2 1 -132.15 -6.25824 -144.743 - 33 57.8033 241 2 1 -131.95 -6.13304 -144.679 - 33 56.0597 242 2 1 -131.75 -6.01262 -144.653 - 33 60.1394 243 2 1 -131.55 -5.88991 -144.642 - 33 59.3198 244 2 1 -131.35 -5.77717 -144.609 - 33 81.0184 245 2 1 -131.15 -5.63814 -144.577 - 33 70.6106 246 2 1 -130.949 -5.48245 -144.533 - 33 71.0227 247 2 1 -130.75 -5.33508 -144.501 - 33 3.28634 248 2 1 -130.55 -5.16633 -144.45 - 33 179.822 881 3 0 -110.138 -3.81706 -116.25 - 33 246.503 355 3 1 -109.086 -3.80487 -114.85 - 33 85.1323 356 3 1 -108.95 -3.82066 -114.631 - 33 113.231 354 3 1 -109.15 -4.4975 -114.561 - 33 236.743 353 3 1 -109.35 -4.84844 -114.588 - 33 6.12653 352 3 1 -109.55 -5.51705 -114.456 - 33 255.115 258 5 1 -128.463 -3.31865 -54.45 - 33 142.567 258 4 1 -128.482 -3.34142 -84.45 - 33 114.454 883 4 0 -128.482 -3.34109 -85.85 - 33 394.724 258 3 1 -128.486 -3.34927 -114.45 - 33 115.001 883 3 0 -128.488 -3.34848 -115.85 - 33 224.172 258 2 1 -128.52 -3.33371 -144.45 - 33 178.595 883 2 0 -128.52 -3.33133 -145.85 - 33 266.044 258 1 1 -128.534 -3.28697 -174.45 - 33 125.911 883 1 0 -128.534 -3.28499 -175.85 - 33 169.822 258 0 1 -128.537 -3.23625 -204.45 - 33 171.329 884 0 0 -128.541 -3.23946 -205.85 - 33 136.248 572 2 0 68.5375 -65.45 -146.013 - 33 139.334 573 2 0 68.5857 -65.45 -145.999 - 33 179.325 750 1 0 -54.4546 -29.9623 -176.25 - 33 3.69587 201 0 0 -178.899 -139.899 -206.25 - 33 85.7436 203 0 1 -139.35 10.9685 -204.737 - 33 173.551 253 4 1 -129.458 -2.68747 -84.45 - 33 115.839 887 4 0 -129.562 -2.59757 -85.85 - 33 118.341 240 3 1 -131.965 -0.300451 -114.45 - 33 222.05 899 3 0 -132.139 -0.110741 -115.85 - 33 137.055 224 2 1 -135.278 4.14483 -144.451 - 33 158.308 921 2 0 -135.493 4.28799 -145.85 - 33 153.559 205 1 1 -139.105 9.1935 -174.45 - 33 2.81084 946 1 0 -139.151 9.44743 -175.85 - 33 144.171 947 1 0 -139.152 9.45 -175.865 - 33 96.9929 202 0 1 -139.568 13.6702 -204.45 - 33 157.002 969 0 0 -139.726 13.8592 -205.85 - 33 80.0199 156 1 1 -148.848 2.81757 -174.45 - 33 50.2373 155 1 1 -148.95 2.78053 -174.736 - 33 121.338 913 1 0 -149.281 2.71724 -175.85 - 33 129.563 122 0 1 -155.643 2.41573 -204.451 - 33 118.063 911 0 0 -155.909 2.34829 -205.85 - 33 206.127 922 0 0 -160.689 4.47817 -206.25 - 33 143.952 98 0 1 -160.546 4.98966 -204.849 - 33 72.8546 96 0 1 -160.807 4.98277 -204.45 - 33 99.8475 95 0 1 -160.95 4.86483 -204.656 - 33 4.8943 94 0 1 -161.15 4.71124 -204.841 - 33 132.75 919 0 0 -162.795 3.91397 -205.85 - 33 181.291 918 0 0 -162.926 3.84999 -205.961 - 33 92.407 882 2 0 -128.425 -3.45 -145.948 - 33 47.9671 296 1 1 -120.944 -3.20155 -174.45 - 33 61.7001 297 1 1 -120.75 -3.13306 -174.531 - 33 59.4504 298 1 1 -120.55 -3.04954 -174.619 - 33 86.8704 299 1 1 -120.349 -2.9731 -174.715 - 33 61.6888 300 1 1 -120.15 -2.89141 -174.795 - 33 41.1699 893 1 0 -116.405 -1.30216 -175.85 - 33 245.081 894 1 0 -116.274 -1.25 -175.895 - 33 136.013 895 1 0 -115.754 -1.05 -176.031 - 33 143.997 896 1 0 -115.316 -0.85 -176.166 - 33 35.47 1329 1 0 48.8217 85.9997 -176.25 - 33 204.294 1330 1 0 48.9107 86.05 -176.216 - 33 187.484 1331 1 0 49.4966 86.25 -176.031 - 33 514.336 1332 1 0 50.0002 86.45 -175.963 - 33 284.152 1333 1 0 51.7582 86.6501 -175.996 - 33 351.201 1334 1 0 52.7478 86.85 -175.996 - 33 9.91784 257 2 1 -128.55 -3.30828 -144.801 - 33 97.8194 884 2 0 -128.723 -3.22889 -145.851 - 33 6.05006 241 1 1 -131.761 1.904 -174.45 - 33 103.021 242 1 1 -131.75 1.89906 -174.466 - 33 13.2866 243 1 1 -131.55 1.82275 -174.814 - 33 108.045 909 1 0 -130.965 1.86299 -175.85 - 33 180.279 908 1 0 -130.746 1.84998 -176.215 - 33 392.777 332 0 1 -113.551 -1.91391 -204.45 - 33 43.9945 880 0 0 -113.781 -3.91439 -205.85 - 33 70.6474 879 0 0 -113.785 -4.05 -205.964 - 33 41.923 878 0 0 -113.802 -4.25 -206.135 - 33 176.393 763 0 0 -122.177 -27.2692 -206.25 - 33 100.198 285 0 1 -123.025 -27.3381 -204.85 - 33 49.6146 284 0 1 -123.15 -27.3217 -204.578 - 33 61.5497 283 0 1 -123.35 -27.3627 -204.458 - 33 58.6772 282 0 1 -123.55 -27.3442 -204.519 - 33 131.69 281 0 1 -123.75 -27.4261 -204.562 - 33 72.0567 280 0 1 -123.951 -27.6407 -204.524 - 33 82.7552 279 0 1 -124.15 -27.7399 -204.482 - 33 77.682 278 0 1 -124.35 -27.7905 -204.487 - 33 319.175 277 0 1 -124.55 -27.7225 -204.608 - 33 187.039 276 0 1 -124.75 -27.7413 -204.599 - 33 93.2321 275 0 1 -124.95 -27.7597 -204.678 - 33 101.081 636 0 0 -117.5 -52.761 -206.25 - 33 38.4273 576 0 0 -120.218 -64.7819 -206.25 - 33 20.7806 326 0 0 -155.838 -114.842 -206.25 - 33 77.957 257 1 1 -128.75 1.27704 -174.702 - 33 69.7446 259 1 1 -128.35 1.50637 -174.695 - 33 321.253 907 1 0 -127.87 1.52075 -175.85 -Number of digits in this event: 64 -Using G4ParticleGun... -Particle energy: 8.98468 LIN +Number of tracker hits in this event: 18 + 33 122.915 318 7 1 -116.502 -92.9812 5.55 + 33 109.813 435 7 0 -116.501 -92.9806 4.15 + 33 147.262 318 6 1 -116.477 -92.969 -24.45 + 33 115.776 435 6 0 -116.477 -92.9684 -25.85 + 33 111.3 318 5 1 -116.469 -92.9608 -54.45 + 33 113.358 435 5 0 -116.469 -92.9597 -55.85 + 33 113.034 318 4 1 -116.464 -92.935 -84.45 + 33 286.282 436 4 0 -116.464 -92.9335 -85.85 + 33 101.08 318 3 1 -116.46 -92.9007 -114.45 + 33 259.569 436 3 0 -116.459 -92.8989 -115.85 + 33 117.725 318 2 1 -116.447 -92.8671 -144.45 + 33 145.075 436 2 0 -116.447 -92.8659 -145.85 + 33 193.341 318 1 1 -116.443 -92.843 -174.45 + 33 105.083 436 1 0 -116.443 -92.8422 -175.85 + 33 388.871 318 0 1 -116.432 -92.8213 -204.45 + 33 418.495 436 0 0 -116.431 -92.8194 -205.85 + 33 43.7712 1603 11 0 -91.5054 140.822 123.75 + 33 55.5239 757 3 0 -54.2475 -28.5846 -116.25 +Number of digits in this event: 10 +Using G4ParticleGun... +Particle energy: 4.29163 LIN Particle: e- Event: 34 -Number of tracker hits in this event: 22 - 34 114.488 772 9 1 -25.5983 -130.804 65.55 - 34 157.105 246 9 0 -25.5984 -130.804 64.15 - 34 196.458 772 8 1 -25.5965 -130.799 35.55 - 34 272.563 246 8 0 -25.5971 -130.798 34.15 - 34 117.203 772 7 1 -25.6066 -130.779 5.55 - 34 105.719 246 7 0 -25.6076 -130.778 4.15 - 34 119.754 772 6 1 -25.6283 -130.748 -24.45 - 34 120.874 247 6 0 -25.6286 -130.745 -25.85 - 34 99.0822 772 5 1 -25.6344 -130.693 -54.45 - 34 593.141 247 5 0 -25.6344 -130.69 -55.85 - 34 140.05 772 4 1 -25.6351 -130.642 -84.45 - 34 133.254 247 4 0 -25.6345 -130.64 -85.85 - 34 108.787 772 3 1 -25.6189 -130.594 -114.45 - 34 120.105 247 3 0 -25.6191 -130.592 -115.85 - 34 130.847 772 2 1 -25.627 -130.548 -144.45 - 34 181.25 248 2 0 -25.6272 -130.546 -145.85 - 34 143.882 772 1 1 -25.6315 -130.506 -174.45 - 34 120.777 248 1 0 -25.6297 -130.505 -175.85 - 34 138.2 772 0 1 -25.5911 -130.483 -204.45 - 34 123.944 248 0 0 -25.5894 -130.48 -205.85 - 34 93.5466 156 6 1 -148.92 -64.4401 -24.85 - 34 121.043 155 6 1 -148.95 -64.3564 -24.6995 -Number of digits in this event: 17 +Number of tracker hits in this event: 105 + 34 510.693 1113 11 1 42.7954 -2.93983 125.55 + 34 97.785 885 11 0 42.7957 -2.94051 124.15 + 34 118.748 1113 10 1 42.7986 -2.95408 95.55 + 34 170.896 885 10 0 42.8008 -2.95378 94.15 + 34 125.31 1113 9 1 42.8455 -2.94392 65.55 + 34 191.373 885 9 0 42.8487 -2.94512 64.15 + 34 108.764 1114 8 1 42.916 -2.96884 35.55 + 34 134.348 885 8 0 42.9178 -2.97123 34.15 + 34 140.32 1114 7 1 42.9558 -3.02597 5.55 + 34 391.229 885 7 0 42.9571 -3.02949 4.15 + 34 204.076 1114 6 1 42.9759 -3.10543 -24.45 + 34 130.349 884 6 0 42.9733 -3.10937 -25.85 + 34 313.767 1114 5 1 42.9217 -3.18824 -54.45 + 34 94.1771 884 5 0 42.9166 -3.19192 -55.85 + 34 170.141 1113 4 1 42.824 -3.2701 -84.45 + 34 211.728 883 4 0 42.8192 -3.27626 -85.85 + 34 118.186 1113 3 1 42.7217 -3.39406 -114.45 + 34 174.344 883 3 0 42.7104 -3.38653 -115.85 + 34 123.13 1112 2 1 42.4796 -3.26874 -144.45 + 34 115.908 883 2 0 42.4586 -3.26213 -145.85 + 34 136.343 1109 1 1 42.0177 -3.11228 -174.45 + 34 136.531 884 1 0 41.9988 -3.10306 -175.85 + 34 128.31 1107 0 1 41.6259 -2.91921 -204.45 + 34 146.218 885 0 0 41.6009 -2.91395 -205.85 + 34 28.6095 624 0 0 -7.671 -55.05 -206.235 + 34 3.28558 793 0 0 64.7434 -21.4092 -206.25 + 34 20.5199 658 0 0 94.1811 -48.3738 -206.25 + 34 304.954 1106 0 1 41.45 -2.76015 -204.489 + 34 49.2852 898 0 0 40.7838 -0.423758 -205.85 + 34 82.2636 899 0 0 40.762 -0.25 -205.915 + 34 80.9432 900 0 0 40.6945 0.05 -206.088 + 34 42.2569 1142 0 0 32.6905 48.5114 -206.25 + 34 138.713 1113 2 1 42.6614 -3.2763 -144.45 + 34 69.7218 1114 2 1 42.85 -3.31961 -144.528 + 34 96.7893 1115 2 1 43.05 -3.30481 -144.654 + 34 4.81868 878 2 0 43.6026 -4.43705 -145.85 + 34 110.225 877 2 0 43.6065 -4.45 -145.865 + 34 80.6793 876 2 0 43.7282 -4.65 -146.074 + 34 65.1982 875 2 0 43.8157 -4.85 -146.213 + 34 0.0535322 353 2 0 147.216 -109.35 -146.25 + 34 45.0829 354 2 0 147.216 -109.35 -146.25 + 34 96.8351 1115 5 1 43.05 -3.27549 -54.5905 + 34 212.998 1116 5 1 43.25 -3.28439 -54.6889 + 34 231.175 885 6 0 42.3347 -2.85146 -25.8502 + 34 140.923 886 6 0 42.3305 -2.85 -25.8571 + 34 1.3886 1211 6 0 -7.07233 62.4446 -26.2499 + 34 57.6948 1212 6 0 -7.07481 62.45 -26.2481 + 34 49.1654 1213 6 0 -7.15764 62.65 -26.2026 + 34 62.6913 1214 6 0 -7.22756 62.8505 -26.1412 + 34 77.9483 1215 6 0 -7.35261 63.05 -26.1236 + 34 64.1011 1216 6 0 -7.43497 63.25 -26.1123 + 34 65.8316 1217 6 0 -7.52709 63.45 -26.1087 + 34 65.3266 1218 6 0 -7.52186 63.6502 -26.169 + 34 38.9141 1219 6 0 -7.37716 63.85 -26.2102 + 34 227.63 1113 7 1 42.7519 -2.96526 5.55 + 34 388.767 1113 6 1 42.8092 -3.01646 -24.45 + 34 209.518 1112 5 1 42.6297 -2.72936 -54.45 + 34 128.049 886 5 0 42.6127 -2.76828 -55.85 + 34 120.672 1110 4 1 42.0676 -3.4309 -84.45 + 34 125.157 1108 3 1 41.7895 -3.17787 -114.45 + 34 211.807 884 3 0 41.7905 -3.18942 -115.85 + 34 129.05 1108 2 1 41.7354 -3.6315 -144.45 + 34 160.564 881 2 0 41.7361 -3.68416 -145.85 + 34 283.849 1108 1 1 41.8186 -4.5259 -174.45 + 34 190.969 878 1 0 41.7254 -4.42107 -175.85 + 34 451.781 1099 0 1 40.0339 -2.07783 -204.45 + 34 174.387 890 0 0 39.8633 -1.90488 -205.85 + 34 125.41 1021 0 1 24.4196 5.09053 -204.85 + 34 223.743 925 0 0 25.0574 5.17351 -205.85 + 34 138.297 891 0 0 39.8465 -1.85 -205.995 + 34 1.07694 892 0 0 39.7933 -1.65 -205.855 + 34 10.2192 1100 0 1 40.0591 -1.4748 -204.85 + 34 182.148 885 5 0 42.8749 -2.98766 -55.85 + 34 59.9786 1114 4 1 42.8518 -2.91351 -84.45 + 34 116.751 885 4 0 42.8395 -2.90729 -85.85 + 34 102.695 1112 3 1 42.5787 -2.76811 -114.45 + 34 116.907 886 3 0 42.5607 -2.75899 -115.85 + 34 321.176 1110 2 1 42.1939 -2.62183 -144.45 + 34 112.683 887 2 0 42.1758 -2.61733 -145.85 + 34 125.587 887 1 0 41.7958 -2.55402 -175.85 + 34 108.223 1105 0 1 41.192 -2.42859 -204.45 + 34 109.189 888 0 0 41.136 -2.38192 -205.85 + 34 159.756 773 1 1 -25.25 67.0352 -174.712 + 34 240.147 1309 3 0 -176.788 81.9615 -116.25 + 34 92.131 1310 3 0 -177.239 82.05 -116.17 + 34 81.8244 1112 11 1 42.65 -3.07377 125.459 + 34 12.2149 1104 8 1 41.0434 -5.05971 35.55 + 34 149.663 1105 8 1 41.05 -5.09589 35.5146 + 34 45.8264 870 8 0 41.2109 -5.95398 34.15 + 34 63.8873 869 8 0 41.2116 -6.05 33.9711 + 34 25.543 1028 8 0 47.013 25.7599 33.75 + 34 64.5378 1029 8 0 47.0241 25.85 33.7992 + 34 58.8069 1030 8 0 47.0076 26.05 33.8915 + 34 51.4545 1031 8 0 46.9496 26.25 33.9505 + 34 53.9816 1032 8 0 46.8916 26.45 34.0183 + 34 49.3887 1033 8 0 46.8463 26.6501 34.0727 + 34 23.0815 1034 8 0 46.7954 26.8504 34.1235 + 34 137.53 1123 8 1 44.8202 31.4304 35.15 + 34 170.739 1124 8 1 44.85 31.902 35.2396 + 34 760.699 1125 8 1 45.05 32.3731 35.257 + 34 107.906 1126 8 1 45.25 34.398 35.3029 + 34 16.3351 1079 8 0 44.4131 36.0193 34.15 + 34 84.4975 1080 8 0 44.4057 36.0503 34.1358 + 34 68.3943 1081 8 0 44.4548 36.25 34.0532 + 34 185.154 1084 8 0 43.8736 36.9031 34.15 +Number of digits in this event: 52 Using G4ParticleGun... -Particle energy: 7.58701 LIN +Particle energy: 1.78474 LIN Particle: e- Event: 35 -Number of tracker hits in this event: 126 - 35 144.54 1361 10 1 92.4865 -24.1743 95.55 - 35 301.495 779 10 0 92.4867 -24.1735 94.15 - 35 148.378 1361 9 1 92.4951 -24.1582 65.55 - 35 103.48 779 9 0 92.4963 -24.1578 64.15 - 35 116.138 1361 8 1 92.5253 -24.1498 35.55 - 35 147.702 779 8 0 92.5269 -24.1494 34.15 - 35 143.082 1362 7 1 92.5585 -24.1395 5.55 - 35 136.78 779 7 0 92.561 -24.1396 4.15 - 35 149.148 1362 6 1 92.6134 -24.1425 -24.45 - 35 116.454 779 6 0 92.6185 -24.1431 -25.85 - 35 156.274 1362 5 1 92.7156 -24.1496 -54.45 - 35 109.849 779 5 0 92.7179 -24.148 -55.85 - 35 116.215 1363 4 1 92.7641 -24.1083 -84.45 - 35 354.449 779 4 0 92.7653 -24.1069 -85.85 - 35 800.322 1363 3 1 92.7896 -24.0917 -114.45 - 35 233.983 779 3 0 92.788 -24.0897 -115.85 - 35 245.709 1363 2 1 92.7519 -24.0552 -144.45 - 35 135.394 1362 2 1 92.75 -24.054 -144.826 - 35 155.187 779 2 0 92.7445 -24.0532 -145.85 - 35 102.328 1362 1 1 92.5924 -24.0344 -174.45 - 35 112.216 780 1 0 92.5848 -24.0264 -175.85 - 35 348.223 1360 0 1 92.3469 -23.8977 -204.45 - 35 73.5358 780 0 0 92.3156 -23.8573 -205.85 - 35 75.9093 781 0 0 92.3101 -23.85 -206.095 - 35 105.585 780 3 0 92.8252 -24.0342 -115.85 - 35 139.409 782 2 0 92.8521 -23.5636 -145.85 - 35 193.494 1367 1 1 93.6742 -22.7254 -174.45 - 35 122.867 786 1 0 93.7311 -22.6939 -175.85 - 35 126.413 1374 0 1 94.9828 -22.096 -204.45 - 35 273.486 789 0 0 95.0071 -22.0703 -205.85 - 35 863.076 1363 0 1 92.9201 -22.4521 -204.45 - 35 114.91 788 0 0 92.9187 -22.4254 -205.85 - 35 29.4849 1364 0 1 92.95 -22.4613 -204.765 - 35 176.509 787 0 0 93.0486 -22.4678 -205.85 - 35 53.8406 775 0 0 91.9915 -24.9497 -205.85 - 35 105.709 774 0 0 91.9383 -25.05 -205.904 - 35 51.2544 773 0 0 91.8289 -25.25 -206.043 - 35 52.3634 772 0 0 91.7463 -25.4505 -206.074 - 35 91.0726 771 0 0 91.6633 -25.65 -206.106 - 35 124.13 770 0 0 91.6475 -25.85 -206.115 - 35 54.4611 769 0 0 91.5858 -26.05 -206.165 - 35 54.7419 768 0 0 91.5123 -26.25 -206.217 - 35 87.3204 767 0 0 91.5404 -26.4501 -206.168 - 35 124.292 766 0 0 91.6968 -26.6501 -206.095 - 35 85.9363 765 0 0 92.027 -26.85 -206.025 - 35 36.0947 764 0 0 92.1527 -27.05 -205.904 - 35 98.1664 1359 0 1 92.15 -29.3922 -204.62 - 35 9.92576 790 0 0 93.703 -21.867 -205.85 - 35 14.1418 791 0 0 93.7058 -21.85 -205.854 - 35 79.5676 806 0 0 92.0839 -18.8189 -205.85 - 35 163.571 1364 3 1 92.95 -24.0858 -114.655 - 35 243.305 778 3 0 93.6245 -24.2617 -115.85 - 35 20.0351 1453 2 1 110.879 -29.0313 -144.45 - 35 107.448 1454 2 1 110.95 -28.9755 -144.47 - 35 89.4369 1455 2 1 111.15 -28.7915 -144.505 - 35 80.3518 1456 2 1 111.35 -28.6401 -144.524 - 35 73.1804 1457 2 1 111.551 -28.4643 -144.536 - 35 98.1946 1458 2 1 111.75 -28.2738 -144.567 - 35 82.151 1459 2 1 111.95 -28.0764 -144.607 - 35 162.863 1460 2 1 112.15 -27.8753 -144.645 - 35 72.5726 1461 2 1 112.35 -27.6606 -144.663 - 35 68.3125 1462 2 1 112.55 -27.5037 -144.715 - 35 49.302 1463 2 1 112.75 -27.3813 -144.809 - 35 12.2578 770 2 0 115.228 -25.862 -145.85 - 35 134.86 771 2 0 115.247 -25.85 -145.858 - 35 408.846 772 2 0 115.655 -25.65 -145.987 - 35 805.898 773 2 0 116.641 -25.45 -146.049 - 35 398.852 1364 1 1 92.9832 -23.9878 -174.45 - 35 212.862 783 1 0 93.3331 -23.4248 -175.85 - 35 19.719 1403 0 1 100.937 -10.9899 -204.45 - 35 194.512 1404 0 1 100.95 -10.9689 -204.518 - 35 25.2902 847 0 0 101.169 -10.4812 -205.85 - 35 145.711 848 0 0 101.182 -10.4499 -205.936 - 35 134.864 778 1 0 93.4557 -24.3113 -175.85 - 35 104.761 1415 0 1 103.165 -29.1838 -204.45 - 35 70.9573 1414 0 1 103.15 -29.1786 -204.657 - 35 136.838 755 0 0 103.113 -29.0335 -205.85 - 35 215.27 1364 2 1 93.0627 -24.7417 -144.45 - 35 132.37 776 2 0 93.0403 -24.7234 -145.85 - 35 137.914 777 1 0 92.9237 -24.5823 -175.85 - 35 117.598 1341 0 1 88.3537 -24.4771 -204.451 - 35 176.599 776 0 0 88.1673 -24.7122 -205.85 - 35 201.57 1362 3 1 92.75 -24.3055 -114.61 - 35 319.245 1361 2 1 92.3942 -22.5618 -144.45 - 35 234.372 787 2 0 92.3827 -22.4704 -145.85 - 35 8.29986 788 2 0 92.3774 -22.45 -146.216 - 35 126.112 1360 1 1 92.1734 -20.9111 -174.45 - 35 105.096 795 1 0 92.0994 -20.8952 -175.85 - 35 125.523 798 0 0 90.0134 -20.4479 -205.85 - 35 250.393 779 0 0 92.8842 -24.1257 -205.85 - 35 133.438 1396 4 1 99.4734 -6.27925 -84.4502 - 35 129.07 1395 4 1 99.3499 -6.12457 -84.483 - 35 238.157 1362 4 1 92.6787 -24.1167 -84.45 - 35 99.7876 780 4 0 92.7134 -24.05 -85.9162 - 35 115.244 1361 3 1 92.4226 -21.5833 -114.45 - 35 104.62 790 3 0 92.6749 -21.9532 -115.85 - 35 23.8851 789 3 0 92.7399 -22.05 -116.18 - 35 94.119 1391 2 1 98.4215 -29.6666 -144.45 - 35 110.305 751 2 0 98.1929 -29.7424 -145.85 - 35 102.073 1359 1 1 91.9817 -31.3798 -174.45 - 35 81.0701 745 1 0 91.9199 -30.9389 -175.85 - 35 30.1277 746 1 0 91.9151 -30.85 -176.139 - 35 135.843 1357 0 1 91.6058 -21.0577 -204.45 - 35 252.508 799 0 0 91.814 -20.25 -205.888 - 35 11.1892 800 0 0 91.8827 -20.0499 -206.225 - 35 44.5778 714 0 0 88.5318 -37.05 -206.039 - 35 50.5447 1332 0 1 86.5221 -35.2222 -204.85 - 35 230.006 1331 0 1 86.45 -35.1606 -204.782 - 35 247.55 1389 1 1 98.0571 -25.1218 -174.45 - 35 210.068 774 1 0 98.2692 -25.1017 -175.85 - 35 197.636 1418 0 1 103.92 -25.6018 -204.45 - 35 29.955 999 3 0 94.7458 19.9751 -116.25 - 35 166.841 1000 3 0 94.7692 20.0501 -116.207 - 35 290.243 1375 3 1 95.1644 20.2235 -114.85 - 35 182.918 1376 3 1 95.35 20.0149 -114.662 - 35 163.284 781 3 0 92.6958 -23.7703 -115.85 - 35 191.165 1365 2 1 93.2443 -23.4073 -144.45 - 35 158.945 783 2 0 93.3077 -23.3982 -145.85 - 35 107.375 1374 1 1 95.0245 -23.5142 -174.45 - 35 79.6084 782 1 0 95.0716 -23.4592 -175.85 - 35 107.133 1378 0 1 95.8764 -22.4238 -204.45 - 35 35.5103 1640 1 1 148.15 -18.8671 -174.793 - 35 214.993 1367 0 1 93.6158 -23.1844 -204.45 - 35 117.433 783 0 0 93.61 -23.3564 -205.851 - 35 151.935 782 0 0 93.6972 -23.5203 -205.85 - 35 122.493 1373 10 1 94.8628 -24.211 95.15 -Number of digits in this event: 67 -Using G4ParticleGun... -Particle energy: 2.33676 LIN +Number of tracker hits in this event: 28 + 35 108.172 1389 10 1 98.0743 -21.1165 95.55 + 35 96.9274 794 10 0 98.0716 -21.1172 94.15 + 35 109.468 1389 9 1 98.0502 -21.1465 65.55 + 35 139.345 794 9 0 98.0512 -21.1428 64.15 + 35 306.599 1389 8 1 98.0681 -21.0712 35.55 + 35 128.288 794 8 0 98.0683 -21.067 34.15 + 35 126.87 1389 7 1 98.0773 -20.9749 5.55 + 35 135.696 795 7 0 98.0758 -20.9664 4.15 + 35 123.11 1389 6 1 98.05 -20.8267 -24.45 + 35 102.856 796 6 0 98.0496 -20.825 -25.85 + 35 93.8487 1389 5 1 98.034 -20.7851 -54.45 + 35 131.884 796 5 0 98.0358 -20.7768 -55.85 + 35 137.393 1389 4 1 98.0825 -20.603 -84.45 + 35 141.609 797 4 0 98.0923 -20.5929 -85.85 + 35 141.383 1390 3 1 98.2551 -20.3625 -114.45 + 35 138.51 798 3 0 98.2623 -20.3482 -115.85 + 35 175.738 1391 2 1 98.4058 -20.0651 -144.45 + 35 189.765 800 2 0 98.4134 -20.0456 -145.85 + 35 96.0883 1391 1 1 98.536 -19.6276 -174.45 + 35 166.636 802 1 0 98.5501 -19.6035 -175.85 + 35 113.516 1393 0 1 98.8506 -19.1179 -204.45 + 35 279.373 804 0 0 98.8666 -19.0973 -205.85 + 35 142.161 1733 0 1 166.75 -21.7889 -204.816 + 35 80.9918 1051 1 0 26.9928 30.2569 -176.25 + 35 46.2597 927 1 0 25.02 5.64222 -176.25 + 35 218.77 804 2 0 100.236 -19.1737 -145.85 + 35 74.9456 1403 2 1 100.772 -19.7332 -144.85 + 35 56.141 1402 2 1 100.75 -19.7032 -144.821 +Number of digits in this event: 18 +Using G4ParticleGun... +Particle energy: 1.26034 LIN Particle: e- Event: 36 -Number of tracker hits in this event: 98 - 36 108.254 1465 10 1 113.165 22.727 95.55 - 36 121.64 1013 10 0 113.162 22.7322 94.15 - 36 168.262 1464 9 1 113.113 22.7796 65.55 - 36 150.188 1013 9 0 113.111 22.764 64.15 - 36 133.044 1464 8 1 113.114 22.3991 35.55 - 36 123.592 1011 8 0 113.102 22.3801 34.15 - 36 105.152 1463 7 1 112.813 21.9766 5.55 - 36 115.262 1009 7 0 112.806 21.9657 4.15 - 36 147.557 1462 6 1 112.646 21.7452 -24.45 - 36 100.927 1008 6 0 112.652 21.7207 -25.85 - 36 116.553 1463 5 1 112.752 21.3053 -54.45 - 36 191.584 1005 5 0 112.768 21.2409 -55.85 - 36 120.752 1465 4 1 113.193 19.9083 -84.45 - 36 106.358 998 4 0 113.227 19.8417 -85.85 - 36 116.469 1469 3 1 113.951 18.5063 -114.45 - 36 133.324 992 3 0 113.99 18.4631 -115.85 - 36 218.601 1473 2 1 114.813 17.5945 -144.45 - 36 98.8244 987 2 0 114.842 17.5357 -145.85 - 36 139.245 1477 1 1 115.556 16.4844 -174.45 - 36 195.122 981 1 0 115.544 16.4273 -175.85 - 36 120.22 1474 0 1 115.095 15.3913 -204.45 - 36 92.1242 976 0 0 115.064 15.3497 -205.85 - 36 37.1287 1003 0 0 92.4106 20.6951 -206.25 - 36 242.642 1002 0 0 92.4226 20.65 -206.211 - 36 237.579 1477 0 1 115.591 14.247 -204.45 - 36 377.326 970 0 0 115.703 14.1937 -205.85 - 36 31.7534 931 0 0 144.19 6.27642 -206.25 - 36 86.7005 933 0 0 131.896 6.73643 -206.25 - 36 269.063 992 0 0 139.03 18.4727 -206.25 - 36 95.5844 1603 0 1 140.775 18.604 -204.85 - 36 69.1546 1604 0 1 140.95 18.6098 -204.706 - 36 59.547 1605 0 1 141.15 18.6064 -204.583 - 36 0.576016 1606 0 1 141.35 18.5922 -204.452 - 36 101.776 1607 0 1 141.599 18.568 -204.45 - 36 23.45 1608 0 1 141.75 18.6941 -204.755 - 36 43.833 994 0 0 142.176 19.0015 -205.85 - 36 179.202 995 0 0 142.261 19.05 -205.992 - 36 155.061 996 0 0 142.767 19.2503 -206.093 - 36 61.4512 997 0 0 142.531 19.45 -206.176 - 36 157.016 1198 2 1 59.6996 -51.8623 -144.45 - 36 106.366 1197 2 1 59.65 -52.0328 -144.464 - 36 322.743 1462 5 1 112.598 21.353 -54.4503 - 36 64.446 1461 5 1 112.55 21.3759 -54.6381 - 36 115.351 1007 5 0 112.264 21.4837 -55.85 - 36 111.984 1420 4 1 104.268 21.5838 -84.45 - 36 142.976 1005 4 0 104.127 21.1605 -85.85 - 36 19.3607 1004 4 0 104.08 21.05 -86.1972 - 36 288.107 1401 3 1 100.44 10.8542 -114.45 - 36 88.676 951 3 0 100.318 10.3628 -115.851 - 36 28.0878 950 3 0 100.278 10.2496 -116.148 - 36 98.7775 1380 2 1 96.1561 -1.33006 -144.45 - 36 207.743 1381 2 1 96.35 -1.56514 -144.704 - 36 38.1435 885 2 0 97.6591 -2.95043 -145.85 - 36 105.18 884 2 0 97.7602 -3.05 -145.942 - 36 31.728 883 2 0 98.0127 -3.25 -146.157 - 36 22.1117 1567 1 1 133.707 -23.6714 -174.451 - 36 104.831 1568 1 1 133.75 -23.6641 -174.487 - 36 138.855 1569 1 1 133.95 -23.6316 -174.672 - 36 188.254 1570 1 1 134.15 -23.6046 -174.811 - 36 142.735 710 2 0 125.912 -37.8763 -146.25 - 36 84.4195 1522 2 1 124.741 -38.221 -144.85 - 36 51.0984 1521 2 1 124.55 -38.3043 -144.653 - 36 9.36782 1199 2 1 59.85 -57.0586 -144.715 - 36 66.0568 1402 3 1 100.55 10.741 -114.599 - 36 45.2904 1014 5 0 113.012 22.9557 -55.85 - 36 76.3239 1015 5 0 113.041 23.05 -55.9332 - 36 43.5894 1016 5 0 113.104 23.25 -56.1417 - 36 30.8212 1509 4 1 122.118 52.2409 -84.45 - 36 121.704 1510 4 1 122.15 52.1834 -84.5521 - 36 62.7442 1158 4 0 122.598 51.7349 -85.8501 - 36 56.4953 1157 4 0 122.697 51.65 -86.0717 - 36 152.586 1463 4 1 112.75 20.6585 -84.45 - 36 147.721 1002 4 0 112.791 20.6347 -85.85 - 36 299.434 1467 3 1 113.68 20.2058 -114.45 - 36 121.672 1000 3 0 113.732 20.1719 -115.85 - 36 126.162 997 2 0 114.909 19.5852 -145.85 - 36 97.8698 1469 1 1 114.01 18.4158 -174.45 - 36 119.189 991 1 0 113.962 18.358 -175.85 - 36 354.063 1463 0 1 112.833 17.2037 -204.45 - 36 118.443 987 0 0 112.936 17.5269 -205.85 - 36 59.5818 1307 2 0 100.514 81.4873 -146.25 - 36 128.288 1306 2 0 100.498 81.45 -146.185 - 36 44.0249 1468 3 1 113.75 19.7412 -114.572 - 36 62.6128 1462 4 1 112.749 20.6579 -84.45 - 36 120.148 1003 4 0 112.756 20.6659 -85.85 - 36 98.2483 1459 3 1 112.078 20.8575 -114.45 - 36 116.661 1004 3 0 111.881 20.8678 -115.85 - 36 48.9227 1440 2 1 108.166 20.7879 -144.45 - 36 64.4006 1439 2 1 108.15 20.7924 -144.595 - 36 138.993 1003 2 0 108.011 20.8416 -145.85 - 36 57.6426 1004 2 0 107.986 20.85 -146.085 - 36 111.839 1423 1 1 104.869 21.4894 -174.45 - 36 105.856 1007 1 0 104.822 21.5204 -175.85 - 36 151.861 1417 0 1 103.669 22.3466 -204.45 - 36 53.1564 1011 0 0 103.624 22.2637 -205.85 - 36 137.014 1010 0 0 103.617 22.25 -206.055 - 36 246.517 1015 0 0 112.818 23.1056 -205.85 - 36 246.638 1599 1 1 140.017 86.4926 -174.85 -Number of digits in this event: 43 +Number of tracker hits in this event: 20 + 36 98.8216 604 9 1 -59.2088 -112.007 65.55 + 36 157.639 340 9 0 -59.2138 -112.009 64.15 + 36 122.944 603 8 1 -59.3551 -112.049 35.55 + 36 190.46 340 8 0 -59.3654 -112.053 34.15 + 36 125.595 602 7 1 -59.5968 -112.096 5.55 + 36 111.451 340 7 0 -59.6068 -112.104 4.15 + 36 107.036 601 6 1 -59.8175 -112.271 -24.45 + 36 143.388 339 6 0 -59.8226 -112.281 -25.85 + 36 119.482 600 5 1 -59.9215 -112.498 -54.45 + 36 134.251 338 5 0 -59.9277 -112.512 -55.85 + 36 114.749 600 4 1 -60.0178 -112.814 -84.45 + 36 120.215 336 4 0 -60.0215 -112.829 -85.85 + 36 148.684 599 3 1 -60.0938 -113.169 -114.45 + 36 123.63 335 3 0 -60.1203 -113.147 -115.85 + 36 150.723 596 2 1 -60.7227 -112.678 -144.45 + 36 115.698 337 2 0 -60.7626 -112.708 -145.85 + 36 131.763 594 1 1 -61.1909 -113.252 -174.45 + 36 114.433 334 1 0 -61.2575 -113.294 -175.85 + 36 107.108 587 0 1 -62.5058 -114.385 -204.45 + 36 121.609 328 0 0 -62.7119 -114.511 -205.851 +Number of digits in this event: 14 Using G4ParticleGun... -Particle energy: 9.67125 LIN +Particle energy: 8.35065 LIN Particle: e- Event: 37 -Number of tracker hits in this event: 24 - 37 223.834 874 10 1 -5.06348 -98.6766 95.55 - 37 116.885 407 10 0 -5.06269 -98.6763 94.15 - 37 106.768 875 9 1 -5.04458 -98.6672 65.55 - 37 112.844 407 9 0 -5.04382 -98.667 64.15 - 37 207.76 875 8 1 -5.02724 -98.6629 35.55 - 37 95.2945 407 8 0 -5.02645 -98.6626 34.15 - 37 118.389 875 7 1 -5.01291 -98.6548 5.55 - 37 108.069 407 7 0 -5.01238 -98.655 4.15 - 37 111.216 875 6 1 -5.00271 -98.6596 -24.45 - 37 145.684 407 6 0 -5.00259 -98.6598 -25.85 - 37 143.578 875 5 1 -4.99851 -98.6603 -54.45 - 37 320.114 407 5 0 -4.99915 -98.6598 -55.85 - 37 176.646 875 4 1 -5.02105 -98.6568 -84.45 - 37 117.584 407 4 0 -5.0231 -98.6561 -85.85 - 37 395.315 874 3 1 -5.06265 -98.6444 -114.45 - 37 106.462 407 3 0 -5.06458 -98.6438 -115.85 - 37 132.23 874 2 1 -5.10526 -98.6314 -144.45 - 37 131.484 407 2 0 -5.10806 -98.6302 -145.85 - 37 128.772 874 1 1 -5.16673 -98.6093 -174.45 - 37 134.045 407 1 0 -5.16924 -98.6085 -175.85 - 37 128.477 874 0 1 -5.21655 -98.5904 -204.45 - 37 174.654 407 0 0 -5.2191 -98.5879 -205.85 - 37 67.4178 1079 3 0 -69.9 36.05 -116.044 - 37 54.3049 654 4 1 -49.1754 -128.144 -84.85 -Number of digits in this event: 16 +Number of tracker hits in this event: 68 + 37 136.195 1357 10 1 91.6398 -69.797 95.55 + 37 168.268 551 10 0 91.6399 -69.7963 94.15 + 37 121.11 1357 9 1 91.6417 -69.7819 65.55 + 37 131.488 551 9 0 91.643 -69.7827 64.15 + 37 253.545 1357 8 1 91.6667 -69.7961 35.55 + 37 206.321 551 8 0 91.669 -69.7971 34.15 + 37 125.036 1357 7 1 91.7216 -69.8159 5.55 + 37 147.812 551 7 0 91.7227 -69.8164 4.15 + 37 127.33 1357 6 1 91.7462 -69.8253 -24.45 + 37 110.86 551 6 0 91.7478 -69.8255 -25.85 + 37 137.593 1358 5 1 91.7793 -69.8307 -54.45 + 37 150.322 551 5 0 91.7809 -69.8312 -55.85 + 37 436.436 1358 4 1 91.8207 -69.8309 -84.45 + 37 230.834 551 4 0 91.8227 -69.8308 -85.85 + 37 121.491 1358 3 1 91.865 -69.8253 -114.45 + 37 139.147 551 3 0 91.8668 -69.8269 -115.85 + 37 159.057 1358 2 1 91.9105 -69.8651 -144.45 + 37 130.531 550 2 0 91.9164 -69.8657 -145.85 + 37 389.807 1359 1 1 92.0317 -69.8766 -174.45 + 37 131.937 550 1 0 92.034 -69.8758 -175.85 + 37 230.688 1359 0 1 92.0679 -69.8738 -204.45 + 37 195.488 550 0 0 92.0704 -69.8728 -205.85 + 37 10.2859 991 1 0 74.4204 18.25 -176.149 + 37 206.966 1031 10 1 26.4465 -103.562 95.15 + 37 59.483 382 10 0 23.1535 -103.577 94.15 + 37 101.754 1364 3 1 93.0137 -68.8342 -114.45 + 37 101.735 556 3 0 93.021 -68.747 -115.85 + 37 113.523 1365 2 1 93.244 -66.7386 -144.45 + 37 103.797 567 2 0 93.3048 -66.6477 -145.851 + 37 96.4784 1372 1 1 94.5636 -65.0799 -174.45 + 37 11.0129 1371 1 1 94.55 -65.0461 -174.818 + 37 113.443 575 1 0 94.4954 -64.9327 -175.85 + 37 153.487 1362 0 1 92.6437 -62.3089 -204.45 + 37 171 589 0 0 92.4499 -62.183 -205.85 + 37 104.449 550 4 0 91.5808 -70.0034 -85.85 + 37 9.34253 549 4 0 91.5164 -70.05 -86.213 + 37 309.976 1329 3 1 86.0383 -74.2155 -114.45 + 37 172.985 532 3 0 85.5393 -73.6044 -115.85 + 37 42.6597 533 3 0 85.4194 -73.45 -116.135 + 37 150.664 1262 2 1 72.5286 -56.4368 -144.45 + 37 79.7569 1261 2 1 72.45 -56.2151 -144.66 + 37 119.284 627 2 0 72.0927 -54.6356 -145.85 + 37 59.3838 628 2 0 72.0518 -54.45 -145.995 + 37 46.363 629 2 0 71.9982 -54.25 -146.151 + 37 453.239 1213 1 1 62.8426 -18.2502 -174.45 + 37 5.27307 783 1 0 62.2423 -23.4288 -175.85 + 37 54.9557 782 1 0 62.2404 -23.4501 -175.855 + 37 73.6949 781 1 0 62.2352 -23.6501 -175.919 + 37 146.499 780 1 0 62.2349 -23.85 -176.003 + 37 67.2582 779 1 0 62.2447 -24.0502 -176.088 + 37 33.3562 778 1 0 62.3053 -24.2505 -176.204 + 37 2.25278 1325 0 1 85.1192 -90.15 -204.836 + 37 119.015 448 0 0 85.3891 -90.3722 -205.85 + 37 65.4552 546 5 0 91.0141 -70.7992 -55.85 + 37 40.9686 545 5 0 90.9613 -70.8504 -55.8991 + 37 46.98 1350 5 1 90.2464 -71.6165 -54.8499 + 37 129.521 1349 5 1 90.0497 -71.7028 -54.6424 + 37 198.894 1348 5 1 89.8499 -71.8825 -54.4957 + 37 218.271 551 1 0 92.064 -69.7876 -175.85 + 37 139.451 552 0 0 92.1205 -69.5106 -205.85 + 37 1.85213 525 0 0 90.3146 -75.0472 -206.25 + 37 192.562 524 0 0 90.3131 -75.05 -206.244 + 37 56.3836 523 0 0 90.2534 -75.25 -205.971 + 37 9.65825 1351 0 1 90.5373 -76.4599 -204.85 + 37 339.34 1352 0 1 90.55 -76.4923 -204.815 + 37 28.0613 1353 0 1 90.7501 -76.6838 -204.519 + 37 110.231 1360 0 1 92.2025 -69.8417 -204.45 + 37 131.406 551 0 0 92.2126 -69.8443 -205.85 +Number of digits in this event: 39 Using G4ParticleGun... -Particle energy: 7.11842 LIN +Particle energy: 6.39394 LIN Particle: e- Event: 38 -Number of tracker hits in this event: 144 - 38 119.185 1247 10 1 69.458 91.497 95.55 - 38 132.173 1356 10 0 69.458 91.4969 94.15 - 38 119.57 1246 9 1 69.4497 91.5044 65.55 - 38 111.595 1356 9 0 69.4495 91.505 64.15 - 38 201.592 1246 8 1 69.4455 91.517 35.55 - 38 143.67 1356 8 0 69.4454 91.5161 34.15 - 38 130.847 1246 7 1 69.4464 91.491 5.55 - 38 107.417 1356 7 0 69.4468 91.4893 4.15 - 38 173.382 1247 6 1 69.4577 91.4521 -24.45 - 38 252.706 1356 6 0 69.4594 91.4509 -25.85 - 38 128.898 1247 5 1 69.4894 91.4339 -54.45 - 38 236.572 1356 5 0 69.4903 91.4362 -55.85 - 38 102.052 1247 4 1 69.4996 91.4846 -84.45 - 38 105.7 1356 4 0 69.4996 91.4877 -85.85 - 38 130.205 1247 3 1 69.4934 91.55 -114.45 - 38 103.315 1357 3 0 69.4933 91.5526 -115.85 - 38 138.783 1247 2 1 69.4883 91.5972 -144.45 - 38 106.252 1357 2 0 69.4893 91.5972 -145.85 - 38 144.136 1247 1 1 69.5163 91.6073 -174.45 - 38 101.791 1357 1 0 69.5165 91.6104 -175.85 - 38 137.48 1247 0 1 69.5386 91.6821 -204.45 - 38 121.566 1357 0 0 69.5385 91.687 -205.85 - 38 147.501 1365 2 0 66.5699 93.3437 -146.25 - 38 200.698 1230 2 1 66.2155 93.2048 -144.85 - 38 153.785 1229 2 1 66.05 93.3765 -144.798 - 38 13.3709 1364 2 0 66.3424 92.9661 -145.85 - 38 40.9071 1363 2 0 66.3488 92.9498 -145.867 - 38 55.0365 1238 2 1 67.7216 93.2841 -144.85 - 38 77.2673 1373 2 0 67.9058 94.7948 -145.85 - 38 68.2913 1201 1 1 60.3046 87.2598 -174.85 - 38 193.861 1246 5 1 69.45 91.486 -54.5379 - 38 132.29 1357 5 0 69.4353 91.6463 -55.8502 - 38 123.34 1258 4 1 71.7691 96.8464 -84.45 - 38 259.844 1386 4 0 71.5664 97.4248 -85.85 - 38 137.582 1387 4 0 71.5354 97.55 -86.2147 - 38 96.5009 1249 3 1 69.9411 106.837 -114.45 - 38 333.247 1248 3 1 69.85 106.676 -114.671 - 38 67.0731 1427 3 0 69.4848 105.693 -115.85 - 38 87.8846 1426 3 0 69.4318 105.55 -116.011 - 38 203.726 1192 2 1 58.6305 84.1418 -144.45 - 38 72.6135 1191 2 1 58.45 84.0077 -144.711 - 38 94.532 1316 2 0 57.7121 83.3772 -145.85 - 38 51.0298 1315 2 0 57.5848 83.25 -146.07 - 38 116.319 1107 1 1 41.5608 64.6481 -174.45 - 38 3.57627 1106 1 1 41.45 64.4807 -174.834 - 38 92.0912 1219 1 0 41.1969 64.0187 -175.85 - 38 14.0991 1218 1 0 41.1208 63.85 -176.187 - 38 33.1311 1086 0 1 37.3976 52.4207 -204.45 - 38 164.158 1087 0 1 37.45 52.3817 -204.53 - 38 35.2406 1147 0 0 38.2528 49.5695 -205.85 - 38 63.9463 1146 0 0 38.282 49.45 -205.894 - 38 63.5356 1145 0 0 38.3376 49.25 -205.979 - 38 86.9358 1144 0 0 38.3958 49.05 -206.058 - 38 69.0865 1143 0 0 38.4366 48.85 -206.114 - 38 120.257 1243 4 1 68.809 90.8477 -84.4501 - 38 183.474 1352 4 0 68.5265 90.6485 -85.8507 - 38 206.865 1212 3 1 62.5944 87.801 -114.45 - 38 122.625 1337 3 0 62.4002 87.5458 -115.85 - 38 131.928 1309 2 0 58.5204 81.947 -145.85 - 38 7.14379 1308 2 0 58.5018 81.8499 -146.217 - 38 146.171 1186 1 1 57.3622 73.6715 -174.45 - 38 164.688 1265 1 0 57.3733 73.2246 -175.85 - 38 83.8862 1168 0 1 53.8456 61.3568 -204.45 - 38 166.711 1169 0 1 53.85 61.3291 -204.541 - 38 123.315 1204 0 0 53.8932 60.9691 -205.85 - 38 202.75 1246 6 1 69.4273 91.5013 -24.45 - 38 144.982 1245 5 1 69.192 92.0592 -54.45 - 38 125.918 1359 5 0 69.1893 92.1071 -55.85 - 38 103.803 1245 4 1 69.0702 92.9748 -84.45 - 38 176.23 1364 4 0 69.0996 93.0363 -85.85 - 38 96.5336 1370 3 0 69.8353 94.3414 -115.85 - 38 15.1458 1371 3 0 69.8563 94.35 -116.192 - 38 105.188 1257 2 1 71.5538 94.9811 -144.45 - 38 108.857 1375 2 0 71.5779 95.2322 -145.85 - 38 137.95 1262 1 1 72.504 100.468 -174.45 - 38 115.064 1402 1 0 72.6623 100.615 -175.85 - 38 106.706 1279 0 1 75.9605 103.698 -204.451 - 38 49.0734 1420 0 0 75.9617 104.272 -205.85 - 38 52.8426 1421 0 0 75.965 104.35 -206.039 - 38 127.235 1243 0 1 68.7232 94.4032 -204.45 - 38 100.316 1372 0 0 69.1213 94.6375 -205.85 - 38 153.614 1242 0 1 68.6338 94.4637 -204.45 - 38 134.841 1375 0 0 68.0146 95.1635 -205.85 - 38 124.237 1357 6 0 69.482 91.7014 -25.85 - 38 5.98976 1358 6 0 69.4902 91.75 -26.225 - 38 129.098 1252 5 1 70.4801 95.4065 -54.4504 - 38 146.441 1376 5 0 70.3683 95.4955 -55.8507 - 38 120.331 1240 4 1 68.0993 97.3052 -84.45 - 38 123.44 1265 3 1 73.0964 99.1836 -114.45 - 38 102.123 1395 3 0 73.6244 99.274 -115.85 - 38 58.1551 1324 2 1 84.9431 100.383 -144.45 - 38 69.6504 1325 2 1 85.05 100.399 -144.664 - 38 99.065 1401 2 0 85.7033 100.523 -145.85 - 38 89.9246 1402 2 0 85.8699 100.55 -146.141 - 38 80.507 1411 1 1 102.396 103.08 -174.45 - 38 71.0679 1412 1 1 102.55 103.092 -174.651 - 38 146.134 1414 1 0 103.486 103.13 -175.85 - 38 301.352 1540 0 1 128.196 103.334 -204.45 - 38 61.4908 1541 0 1 128.35 103.369 -204.709 - 38 227.71 1417 0 0 129.108 103.568 -205.85 - 38 183.188 1227 4 1 65.5901 86.835 -84.4627 - 38 107.994 1333 4 0 65.4734 86.7365 -85.8506 - 38 9.15168 1213 3 1 62.6717 84.6354 -114.45 - 38 33.6909 1211 3 1 62.45 84.6846 -114.767 - 38 130.888 1323 3 0 61.6965 84.8001 -115.85 - 38 306.166 1104 2 1 41.0114 88.3045 -144.45 - 38 39.9704 1103 2 1 40.85 88.5594 -144.724 - 38 20.2467 1347 2 0 40.3568 89.5857 -145.85 - 38 117.944 1348 2 0 40.324 89.65 -145.918 - 38 70.4857 1349 2 0 40.2265 89.8508 -146.118 - 38 5.8086 1033 1 1 26.8435 118.113 -174.45 - 38 206.174 1034 1 1 26.8501 118.132 -174.463 - 38 155.477 1035 1 1 27.05 118.738 -174.812 - 38 39.4746 1503 1 0 27.6226 120.835 -175.85 - 38 61.5918 1504 1 0 27.6595 120.95 -175.912 - 38 69.1796 1505 1 0 27.7276 121.15 -176.004 - 38 69.0073 1506 1 0 27.7958 121.35 -176.099 - 38 32.3715 1507 1 0 27.8786 121.55 -176.196 - 38 18.3435 1105 2 1 41.0502 88.2813 -144.481 - 38 240.673 845 0 1 -10.897 127.387 -204.45 - 38 22.1893 1544 0 0 -11.0435 129.075 -205.85 - 38 69.5671 1545 0 0 -11.0454 129.15 -205.913 - 38 64.1072 1546 0 0 -11.0126 129.35 -206.094 - 38 41.8587 1650 0 0 -23.9692 150.324 -206.25 - 38 109.123 1651 0 0 -24.1146 150.35 -206.144 - 38 85.9508 1652 0 0 -24.4581 150.55 -206.069 - 38 72.9374 1653 0 0 -24.6644 150.75 -206.129 - 38 88.4946 1654 0 0 -24.8266 150.95 -206.197 - 38 101.112 1655 0 0 -24.9346 151.15 -206.24 - 38 0.30452 1656 0 0 -25.1196 151.35 -206.25 - 38 104.798 1332 4 0 65.4554 86.5091 -85.85 - 38 37.9058 1331 4 0 65.421 86.45 -86.123 - 38 99.9209 1293 4 1 78.7375 98.3164 -84.8499 - 38 79.059 1294 4 1 78.85 98.3977 -84.7142 - 38 61.9109 1295 4 1 79.0504 98.5339 -84.522 - 38 116.812 1397 5 0 89.7631 99.6339 -56.25 - 38 202.237 1351 5 1 90.4241 99.7844 -54.85 - 38 21.8898 1352 5 1 90.55 99.8437 -54.4946 - 38 41.9791 1515 6 0 68.2486 123.253 -26.25 - 38 79.1723 1516 6 0 68.1947 123.35 -26.1661 - 38 71.6565 1517 6 0 68.1315 123.55 -26.0288 - 38 19.3873 1518 6 0 68.0597 123.75 -25.8937 - 38 141.711 1237 6 1 67.6225 124.992 -24.8497 - 38 48.3789 1236 6 1 67.45 125.332 -24.5719 -Number of digits in this event: 60 +Number of tracker hits in this event: 106 + 38 175.675 707 10 1 -38.52 94.1956 95.55 + 38 116.484 1370 10 0 -38.5201 94.1956 94.15 + 38 173.82 707 9 1 -38.5208 94.1923 65.55 + 38 107.208 1370 9 0 -38.5218 94.1926 64.15 + 38 130.312 707 8 1 -38.5466 94.2011 35.55 + 38 156.791 1370 8 0 -38.549 94.2012 34.15 + 38 231.015 707 7 1 -38.6038 94.2039 5.55 + 38 135.387 1370 7 0 -38.6067 94.2031 4.15 + 38 144.158 706 6 1 -38.6676 94.1852 -24.45 + 38 156.196 1370 6 0 -38.6721 94.1846 -25.85 + 38 110.445 706 5 1 -38.7638 94.1724 -54.45 + 38 158.032 1370 5 0 -38.7682 94.1719 -55.85 + 38 111.804 705 4 1 -38.8563 94.1607 -84.45 + 38 116.871 1370 4 0 -38.8608 94.1606 -85.85 + 38 425.514 705 3 1 -38.9493 94.1554 -114.45 + 38 223.755 1370 3 0 -38.9533 94.1554 -115.85 + 38 101.919 705 2 1 -39.0378 94.1529 -144.45 + 38 300.03 1370 2 0 -39.0415 94.1527 -145.85 + 38 106.57 704 1 1 -39.1224 94.1451 -174.45 + 38 99.6877 1369 1 0 -39.1264 94.1455 -175.85 + 38 273.214 704 0 1 -39.2042 94.1565 -204.45 + 38 161.819 1370 0 0 -39.2073 94.1573 -205.85 + 38 252.847 1044 5 0 -46.4881 28.854 -56.25 + 38 54.1336 1043 5 0 -46.4903 28.85 -56.2389 + 38 69.2694 727 1 0 -33.0671 -34.65 -175.982 + 38 175.662 584 2 1 -63.2217 38.8317 -144.45 + 38 96.9323 583 2 1 -63.2501 38.8129 -144.456 + 38 247.07 706 3 1 -38.85 94.2074 -114.467 + 38 75.6084 1372 3 0 -38.8267 94.657 -115.85 + 38 81.0109 1373 3 0 -38.837 94.75 -116.106 + 38 2.08763 686 2 1 -42.8445 106.483 -144.45 + 38 388.601 685 2 1 -42.8501 106.494 -144.457 + 38 140.185 684 2 1 -43.05 106.867 -144.695 + 38 64.7448 1445 2 0 -44.4962 109.167 -145.85 + 38 50.7002 1446 2 0 -44.5935 109.35 -145.922 + 38 70.8738 1447 2 0 -44.675 109.55 -146.015 + 38 59.4395 1448 2 0 -44.7776 109.75 -146.158 + 38 150.123 592 1 1 -61.5874 151.661 -174.45 + 38 117.453 1657 1 0 -61.4195 151.644 -175.85 + 38 70.3585 608 0 1 -58.4486 150.464 -204.45 + 38 80.5126 609 0 1 -58.25 150.545 -204.65 + 38 2.6395 610 0 1 -58.05 150.642 -204.844 + 38 60.5573 1655 0 0 -56.8808 151.248 -205.851 + 38 143.605 1656 0 0 -56.7216 151.35 -206.012 + 38 7.18192 1657 0 0 -56.4389 151.55 -206.158 + 38 101.969 704 2 1 -39.1482 94.1768 -144.45 + 38 110.432 703 1 1 -39.3303 93.8882 -174.45 + 38 122.941 1368 1 0 -39.3434 93.8831 -175.85 + 38 507.907 701 0 1 -39.6726 93.7128 -204.45 + 38 114.607 1367 0 0 -39.6877 93.7072 -205.85 + 38 60.2747 1282 0 0 -33.7596 76.584 -206.25 + 38 106.257 650 2 1 -49.9659 -13.056 -144.85 + 38 58.116 841 2 0 -51.1535 -11.85 -146.172 + 38 114.764 1368 0 0 -39.713 93.75 -205.904 + 38 17.6573 1144 0 0 -10.8556 48.8811 -206.25 + 38 69.1358 1143 0 0 -10.8364 48.8498 -206.244 + 38 181.03 1142 0 0 -10.7412 48.65 -206.171 + 38 5.20178 858 0 1 -8.2638 46.4741 -204.85 + 38 98.7913 859 0 1 -8.25 46.4648 -204.845 + 38 90.2868 860 0 1 -8.05 46.4814 -204.775 + 38 154.989 1132 0 0 -7.77171 46.6188 -205.85 + 38 19.4956 1133 0 0 -7.75384 46.65 -205.943 + 38 312.637 703 0 1 -39.2501 94.0471 -204.49 + 38 193.348 702 0 1 -39.45 93.6775 -204.527 + 38 25.9445 705 0 1 -39.05 91.8082 -204.493 + 38 130.834 1367 3 0 -38.4884 93.7137 -115.85 + 38 112.275 756 2 1 -28.726 82.8898 -144.45 + 38 48.0399 755 2 1 -28.8501 82.791 -144.686 + 38 71.9263 1311 2 0 -29.4608 82.3023 -145.85 + 38 85.4621 1310 2 0 -29.517 82.2499 -145.969 + 38 167.407 702 1 1 -39.5552 69.0329 -174.45 + 38 61.6796 1240 1 0 -39.2852 68.1496 -175.85 + 38 84.1236 1239 1 0 -39.25 68.05 -175.998 + 38 1.0051 1238 1 0 -39.1876 67.85 -176.244 + 38 123.346 736 0 1 -32.7704 44.5646 -204.45 + 38 270.748 735 0 1 -32.85 44.773 -204.825 + 38 63.6713 1127 0 0 -33.5507 45.5572 -205.85 + 38 80.2067 1128 0 0 -33.6307 45.65 -205.985 + 38 185.323 1219 0 0 -35.3438 64.0487 -206.25 + 38 166.919 1220 0 0 -35.3441 64.05 -206.248 + 38 52.1978 1369 3 0 -39.1206 93.9743 -115.85 + 38 66.9371 1368 3 0 -39.1525 93.95 -116.066 + 38 125.841 1351 2 0 -42.7682 90.5406 -145.85 + 38 101.159 711 1 1 -37.7482 89.688 -174.45 + 38 111.261 1347 1 0 -37.5132 89.6217 -175.85 + 38 108.11 737 0 1 -32.5044 88.6954 -204.45 + 38 29.6995 738 0 1 -32.45 88.7563 -204.746 + 38 35.5139 1344 0 0 -32.2493 89.0218 -205.85 + 38 75.5902 1345 0 0 -32.2274 89.05 -205.982 + 38 24.9367 1350 0 0 -33.5083 90.3136 -205.851 + 38 61.1847 1351 0 0 -33.5184 90.35 -205.873 + 38 84.8524 1352 0 0 -33.5751 90.55 -205.968 + 38 65.6878 1353 0 0 -33.6674 90.7505 -206.034 + 38 82.2699 1354 0 0 -33.7814 90.95 -206.068 + 38 62.9579 1355 0 0 -33.8859 91.15 -206.087 + 38 136.438 1356 0 0 -34.0011 91.35 -206.001 + 38 44.989 1357 0 0 -34.429 91.55 -205.885 + 38 260.627 719 0 1 -36.1085 93.9039 -204.85 + 38 136.762 718 0 1 -36.25 94.7967 -204.684 + 38 183.915 1377 0 0 -36.4111 95.6092 -205.851 + 38 224.338 1365 0 0 -43.6109 93.1857 -206.25 + 38 317.821 672 0 1 -45.5185 93.3548 -204.85 + 38 294.552 1284 9 0 -22.9397 77.023 63.7501 + 38 196.626 1285 9 0 -23.6303 77.05 64.0563 + 38 85.8907 1286 9 0 -23.6793 77.25 63.9875 + 38 134.18 708 10 1 -38.45 94.2774 95.3979 +Number of digits in this event: 46 Using G4ParticleGun... -Particle energy: 7.54142 LIN +Particle energy: 3.31117 LIN Particle: e- Event: 39 -Number of tracker hits in this event: 68 - 39 109.411 1037 11 1 27.4984 -28.8556 125.55 - 39 111.241 755 11 0 27.4989 -28.8562 124.15 - 39 131.047 1037 10 1 27.5111 -28.863 95.55 - 39 136.587 755 10 0 27.5132 -28.8627 94.15 - 39 132.325 1037 9 1 27.5608 -28.8585 65.55 - 39 115.11 755 9 0 27.563 -28.8584 64.15 - 39 162.721 1037 8 1 27.6052 -28.8588 35.55 - 39 132.764 755 8 0 27.6064 -28.8586 34.15 - 39 112.258 1037 7 1 27.6284 -28.8542 5.55 - 39 172.716 755 7 0 27.6283 -28.8538 4.15 - 39 147.317 1037 6 1 27.6209 -28.8489 -24.45 - 39 138.452 756 6 0 27.623 -28.8479 -25.85 - 39 102.147 1038 5 1 27.6506 -28.8296 -54.45 - 39 113.449 756 5 0 27.6553 -28.8309 -55.85 - 39 105.666 1038 4 1 27.7483 -28.8705 -84.45 - 39 113.945 755 4 0 27.7521 -28.875 -85.85 - 39 115.194 1038 3 1 27.8275 -28.9652 -114.45 - 39 232.562 755 3 0 27.8334 -28.9701 -115.85 - 39 120.317 1039 2 1 27.9539 -29.0792 -144.45 - 39 107.225 754 2 0 27.9615 -29.0839 -145.85 - 39 265.123 1040 1 1 28.1279 -29.1727 -174.45 - 39 117.912 754 1 0 28.1366 -29.1798 -175.85 - 39 126.104 1041 0 1 28.3223 -29.355 -204.45 - 39 128.17 753 0 0 28.3319 -29.3638 -205.85 - 39 58.116 636 2 0 54.6703 -52.85 -146.121 - 39 261.962 310 1 0 63.1356 -118.016 -176.25 - 39 134.483 311 1 0 63.3586 -117.95 -176.068 - 39 101.231 757 1 0 27.9476 -28.6049 -175.85 - 39 32.8667 758 1 0 27.9027 -28.45 -176.132 - 39 111.263 1018 0 1 23.6922 -7.16302 -204.45 - 39 105.636 1019 0 1 23.8505 -6.89576 -204.631 - 39 37.5443 874 0 0 24.6375 -5.14208 -205.85 - 39 114.559 875 0 0 24.6771 -5.0498 -205.918 - 39 35.757 876 0 0 24.7153 -4.85 -206.016 - 39 85.1449 1029 0 1 25.8591 -4.92234 -204.85 - 39 132.877 1030 0 1 26.0501 -4.97017 -204.62 - 39 46.8965 1031 0 1 26.25 -5.01342 -204.515 - 39 118.457 1032 0 1 26.4718 -5.12602 -204.45 - 39 264.89 1037 2 1 27.6142 -28.8386 -144.521 - 39 174.927 756 2 0 27.472 -28.8267 -145.85 - 39 18.5567 755 2 0 27.4176 -28.85 -146.182 - 39 66.3882 1009 1 1 21.9834 -30.7261 -174.45 - 39 105.213 1008 1 1 21.85 -30.8912 -174.534 - 39 165.579 1007 1 1 21.65 -31.1293 -174.652 - 39 88.866 1006 1 1 21.45 -31.3775 -174.737 - 39 0.295206 735 1 0 20.3635 -33.0492 -175.85 - 39 68.6633 734 1 0 20.363 -33.05 -175.851 - 39 79.512 733 1 0 20.1976 -33.2501 -175.96 - 39 108.449 732 1 0 20.019 -33.4501 -176.031 - 39 21.4017 731 1 0 19.8222 -33.65 -176.184 - 39 129.312 704 1 0 -9.70893 -39.1948 -176.25 - 39 116.617 853 1 1 -9.41485 -38.9698 -174.85 - 39 161.745 854 1 1 -9.24993 -38.8722 -174.503 - 39 54.6361 855 1 1 -9.04995 -38.8363 -174.755 - 39 708.788 701 1 0 -7.47228 -39.7092 -175.85 - 39 74.438 700 1 0 -7.22753 -39.85 -175.929 - 39 21.7146 702 1 0 -5.96953 -39.65 -176.216 - 39 53.6882 1044 1 1 29.0211 -26.9857 -174.45 - 39 62.3658 1045 1 1 29.05 -26.9781 -174.632 - 39 127.149 765 1 0 29.2328 -26.9099 -175.85 - 39 12.7742 1058 0 1 31.8234 -27.2231 -204.45 - 39 122.215 1059 0 1 31.85 -27.2146 -204.492 - 39 12.3212 1060 0 1 32.05 -27.1375 -204.815 - 39 110.891 765 0 0 32.6933 -26.8905 -205.85 - 39 88.0967 766 0 0 32.7826 -26.85 -206.001 - 39 17.1045 11 14 0 40.809 -177.835 213.75 - 39 24.6272 1102 14 1 40.6082 -136.401 215.15 - 39 205.148 10 14 0 40.8303 -177.95 214.051 -Number of digits in this event: 28 +Number of tracker hits in this event: 37 + 39 108.525 759 10 1 -28.0768 109.779 95.55 + 39 102.024 1448 10 0 -28.0771 109.78 94.15 + 39 232.174 759 9 1 -28.079 109.807 65.55 + 39 112.455 1448 9 0 -28.0752 109.81 64.15 + 39 109.539 760 8 1 -27.986 109.865 35.55 + 39 132.269 1448 8 0 -27.9812 109.869 34.15 + 39 99.3871 760 7 1 -27.9213 109.92 5.55 + 39 97.5394 1448 7 0 -27.9166 109.923 4.15 + 39 126.629 761 6 1 -27.8196 110 -24.45 + 39 115.501 1449 6 0 -27.8175 110.003 -25.85 + 39 110.974 761 5 1 -27.7774 110.073 -54.45 + 39 115.54 1449 5 0 -27.7704 110.08 -55.85 + 39 109.276 762 4 1 -27.618 110.234 -84.45 + 39 136.073 1450 4 0 -27.6099 110.244 -85.85 + 39 135.252 763 3 1 -27.4468 110.454 -114.45 + 39 104.752 1451 3 0 -27.4402 110.468 -115.85 + 39 120.758 763 2 1 -27.3263 110.746 -144.45 + 39 127.285 1453 2 0 -27.3236 110.76 -145.85 + 39 123.539 763 1 1 -27.3746 110.933 -174.45 + 39 99.0777 1453 1 0 -27.3935 110.905 -175.85 + 39 159.831 760 0 1 -27.8551 110.208 -204.45 + 39 185.781 1449 0 0 -27.8767 110.133 -205.85 + 39 166.439 1015 2 1 23.0926 158.246 -144.45 + 39 215.943 1014 2 1 23.05 158.202 -144.683 + 39 372.571 762 3 1 -27.45 110.455 -114.459 + 39 60.0211 764 0 1 -27.05 111.37 -204.513 + 39 54.8374 1450 0 0 -26.9173 110.329 -205.851 + 39 31.171 781 0 1 -23.7465 108.626 -204.85 + 39 61.947 782 0 1 -23.65 108.576 -204.813 + 39 122.553 783 0 1 -23.45 108.52 -204.773 + 39 449.733 784 0 1 -23.25 108.378 -204.705 + 39 70.8252 1443 0 0 -22.1648 108.858 -205.85 + 39 27.0526 766 0 1 -26.8433 111.39 -204.45 + 39 107.063 765 0 1 -26.85 111.421 -204.554 + 39 93.4803 1448 0 0 -26.9469 109.95 -205.921 + 39 138.322 768 0 1 -26.3392 109.586 -204.85 + 39 164.594 767 0 1 -26.4501 109.691 -204.694 +Number of digits in this event: 19 Using G4ParticleGun... -Particle energy: 5.23607 LIN +Particle energy: 4.08542 LIN Particle: e- Event: 40 -Number of tracker hits in this event: 25 - 40 99.7103 350 8 1 -110.098 88.6012 35.55 - 40 130.643 1342 8 0 -110.098 88.6027 34.15 - 40 117.458 350 7 1 -110.084 88.634 5.55 - 40 346.3 1342 7 0 -110.084 88.6361 4.15 - 40 124.171 350 6 1 -110.066 88.6804 -24.45 - 40 123.992 1343 6 0 -110.066 88.681 -25.85 - 40 123.441 350 5 1 -110.078 88.6839 -54.45 - 40 127.062 1343 5 0 -110.078 88.6819 -55.85 - 40 200.07 350 4 1 -110.053 88.639 -84.45 - 40 140.798 1342 4 0 -110.049 88.6391 -85.85 - 40 125.283 350 3 1 -109.969 88.6401 -114.45 - 40 135.638 1342 3 0 -109.967 88.6408 -115.85 - 40 101.75 351 2 1 -109.934 88.6603 -144.45 - 40 107.797 1343 2 0 -109.932 88.6571 -145.85 - 40 251.84 351 1 1 -109.898 88.6109 -174.45 - 40 142.345 1342 1 0 -109.897 88.6032 -175.85 - 40 163.965 351 0 1 -109.87 88.4638 -204.45 - 40 106.989 1342 0 0 -109.869 88.4568 -205.85 - 40 155.84 350 1 1 -109.996 87.4715 -174.85 - 40 177.308 1352 1 0 -100.169 90.5822 -175.85 - 40 251.491 1353 1 0 -99.7712 90.7501 -175.936 - 40 120.51 1354 1 0 -99.7609 90.95 -175.91 - 40 597.361 499 6 0 -8.0598 -80.05 -26.1327 - 40 7.13488 498 6 0 -7.97215 -80.25 -25.8656 - 40 356.964 860 6 1 -8.01512 -80.8711 -24.85 -Number of digits in this event: 22 +Number of tracker hits in this event: 58 + 40 117.92 1060 10 1 32.0765 -86.7944 95.55 + 40 123.21 466 10 0 32.0779 -86.7965 94.15 + 40 102.957 1059 9 1 32.0366 -86.9 65.55 + 40 214.232 465 9 0 32.0247 -86.9165 64.15 + 40 137.99 1058 8 1 31.7418 -87.2044 35.55 + 40 152.738 464 8 0 31.7381 -87.1882 34.15 + 40 175.847 1057 7 1 31.6419 -86.8928 5.55 + 40 171.877 466 7 0 31.6048 -86.8368 4.15 + 40 18.3905 1054 6 1 30.8536 -85.5865 -24.45 + 40 94.0384 1053 6 1 30.85 -85.5838 -24.5183 + 40 119.987 472 6 0 30.7781 -85.5314 -25.85 + 40 104.143 1045 5 1 29.2275 -84.3698 -54.45 + 40 133.781 478 5 0 29.1498 -84.3015 -55.85 + 40 118.56 1037 4 1 27.5689 -82.8744 -84.45 + 40 122.688 486 4 0 27.5263 -82.8143 -85.85 + 40 147.189 1032 3 1 26.6088 -81.5482 -114.45 + 40 132.091 492 3 0 26.5902 -81.4887 -115.85 + 40 177.181 1031 2 1 26.349 -80.2651 -144.45 + 40 267.448 499 2 0 26.3655 -80.1988 -145.85 + 40 127.823 1033 1 1 26.8006 -79.0026 -174.45 + 40 268.224 505 1 0 26.8215 -78.9262 -175.85 + 40 116.015 1036 0 1 27.2697 -77.4756 -204.45 + 40 163.964 513 0 0 27.3043 -77.3244 -205.85 + 40 129.172 1034 1 1 26.85 -78.9985 -174.838 + 40 32.6541 500 1 0 25.9506 -79.9424 -175.85 + 40 110.77 1026 1 1 25.2858 -81.4391 -174.85 + 40 190.079 500 2 0 26.076 -80.0499 -146.143 + 40 283.625 1028 1 1 25.8113 -78.9166 -174.45 + 40 26.0124 507 1 0 25.785 -78.4809 -175.85 + 40 147.113 508 1 0 25.7835 -78.45 -175.945 + 40 200.779 1025 0 1 25.0762 -69.7146 -204.45 + 40 124.54 553 0 0 25.2996 -69.4298 -205.85 + 40 6.80361 1024 0 1 25.0485 -78.5742 -204.45 + 40 194.443 507 0 0 25.1022 -78.5623 -205.85 + 40 255.245 508 0 0 25.096 -78.45 -206.024 + 40 435.413 1060 4 1 32.2093 -86.9037 -84.45 + 40 259.417 465 4 0 32.2018 -86.9091 -85.85 + 40 332.44 1060 3 1 32.0605 -87.0302 -114.45 + 40 244.319 465 3 0 32.0503 -87.0317 -115.85 + 40 113.632 1058 2 1 31.811 -87.0459 -144.45 + 40 205.941 465 2 0 31.8009 -87.0494 -145.85 + 40 80.912 464 2 0 31.7991 -87.05 -146.1 + 40 107.024 1057 1 1 31.5983 -87.1235 -174.45 + 40 126.262 464 1 0 31.5981 -87.1273 -175.85 + 40 121.603 1057 0 1 31.6021 -87.2233 -204.45 + 40 277.193 464 0 0 31.5979 -87.2353 -205.85 + 40 27.1652 1401 3 1 100.437 12.3439 -114.85 + 40 20.8256 1358 13 0 96.3104 91.75 183.773 + 40 75.5288 1379 13 1 95.991 92.0498 185.15 + 40 72.6122 1361 13 0 95.8377 92.4055 184.15 + 40 126.269 774 5 1 -25.0751 106.296 -54.85 + 40 47.5715 775 5 1 -25.05 106.343 -54.7905 + 40 115.214 1060 2 1 32.1332 -86.9253 -144.45 + 40 106.489 1060 1 1 32.1098 -86.9752 -174.45 + 40 119.125 465 1 0 32.1059 -86.979 -175.85 + 40 166.465 1059 0 1 32.0073 -87.0642 -204.45 + 40 71.6553 1425 0 0 68.0273 105.15 -206.031 + 40 101.33 1426 0 0 68.0608 105.35 -205.978 +Number of digits in this event: 35 Using G4ParticleGun... -Particle energy: 1.89587 LIN +Particle energy: 2.73309 LIN Particle: e- Event: 41 -Number of tracker hits in this event: 97 - 41 110.367 1080 10 1 36.1363 105.866 95.55 - 41 129.06 1428 10 0 36.1347 105.867 94.15 - 41 132.378 1080 9 1 36.1137 105.909 65.55 - 41 116.776 1428 9 0 36.1135 105.909 64.15 - 41 255.165 1080 8 1 36.1044 105.921 35.55 - 41 262.845 1428 8 0 36.1047 105.923 34.15 - 41 124.541 1080 7 1 36.1383 105.962 5.55 - 41 114.899 1429 7 0 36.1395 105.961 4.15 - 41 401.633 1080 6 1 36.1561 105.919 -24.45 - 41 471.091 1428 6 0 36.1489 105.916 -25.85 - 41 107.127 1079 5 1 35.9902 105.83 -54.45 - 41 130.5 1428 5 0 35.9692 105.83 -55.85 - 41 122.207 1077 4 1 35.5559 105.871 -84.45 - 41 187.252 1428 4 0 35.5214 105.854 -85.85 - 41 119.168 1073 3 1 34.8189 105.484 -114.45 - 41 127.155 1426 3 0 34.7866 105.49 -115.85 - 41 109.286 1070 2 1 34.2469 105.637 -144.45 - 41 229.695 1427 2 0 34.2232 105.642 -145.85 - 41 115.369 1068 1 1 33.8289 106.007 -174.45 - 41 120.641 1429 1 0 33.8164 106.041 -175.85 - 41 121.188 1068 0 1 33.6582 106.684 -204.45 - 41 123.566 1432 0 0 33.6599 106.667 -205.85 - 41 12.5806 1144 8 1 49.0226 59.7401 35.15 - 41 253.038 1132 8 1 46.5219 52.7571 35.55 - 41 101.42 1145 8 1 49.0815 59.7171 35.5499 - 41 66.9585 1146 8 1 49.25 59.6987 35.3119 - 41 71.1644 1201 8 0 49.2781 60.3308 34.1496 - 41 80.0585 1202 8 0 49.3257 60.4503 33.9609 - 41 94.3113 1203 8 0 49.3911 60.65 33.901 - 41 188.031 841 9 0 -31.4705 -11.65 63.9436 - 41 72.9961 845 2 0 107.996 -10.8992 -146.25 - 41 153.802 819 2 0 90.3507 -16.1399 -146.25 - 41 107.645 1094 7 1 38.8515 106.971 5.55 - 41 119.261 1434 7 0 38.9105 106.956 4.15 - 41 115.758 1096 6 1 39.3535 108.192 -24.45 - 41 2.34207 1097 6 1 39.45 108.215 -24.8368 - 41 113.234 1440 6 0 39.6493 108.276 -25.85 - 41 510.838 1523 6 0 23.2145 124.863 -26.25 - 41 342.357 1524 6 0 23.0565 124.95 -26.0181 - 41 16.2092 1011 6 1 22.2835 125.439 -24.85 - 41 139.187 1010 6 1 22.2499 125.457 -24.8022 - 41 64.3427 1009 6 1 22.0491 125.54 -24.5847 - 41 36.4198 1007 6 1 21.5519 125.581 -24.45 - 41 130.121 1006 6 1 21.4499 125.547 -24.5426 - 41 61.1036 1005 6 1 21.2498 125.477 -24.7383 - 41 77.0159 1429 8 0 36.316 105.95 33.8126 - 41 238.949 1443 9 0 18.98 108.936 63.7504 - 41 1.33694 1442 9 0 18.6044 108.75 64.1472 - 41 329.557 981 9 1 16.3633 106.874 65.15 - 41 330.364 982 9 1 16.45 106.496 65.4425 - 41 167.725 1049 5 1 29.9878 108.121 -54.45 - 41 350.455 1442 5 0 29.9657 108.558 -55.85 - 41 115.3 1049 4 1 29.9673 116.98 -84.45 - 41 220.441 1485 4 0 29.7731 117.246 -85.85 - 41 152.711 1021 3 1 24.4142 124.058 -114.45 - 41 68.3891 1521 3 0 24.1681 124.495 -115.85 - 41 88.5468 1522 3 0 24.1367 124.55 -116.028 - 41 123.885 993 2 1 18.8045 133.669 -144.45 - 41 72.3047 1569 2 0 18.8293 134.084 -145.85 - 41 69.5848 1570 2 0 18.8301 134.15 -146.072 - 41 175.726 997 1 1 19.4982 143.39 -174.45 - 41 122.671 1615 1 0 19.5957 143.333 -175.85 - 41 93.4486 1006 0 1 21.4442 142.433 -204.45 - 41 237.531 1612 0 0 21.3274 142.693 -205.85 - 41 34.6145 1613 0 0 21.3075 142.75 -206.141 - 41 132.931 1094 5 1 39.0101 105.26 -54.45 - 41 101.221 1425 5 0 38.9846 105.248 -55.8502 - 41 132.795 1089 4 1 38.0031 104.938 -84.45 - 41 117.55 1424 4 0 37.8085 105.001 -85.8503 - 41 118.752 1065 3 1 33.1848 106.239 -114.45 - 41 309.363 1430 3 0 32.9363 106.194 -115.85 - 41 137.027 1040 2 1 28.1996 105.01 -144.45 - 41 179.276 1424 2 0 27.7966 104.996 -145.85 - 41 187.593 998 1 1 19.8452 104.749 -174.45 - 41 135.51 1422 1 0 19.6054 104.605 -175.85 - 41 49.6983 973 0 1 14.7598 102.496 -204.45 - 41 54.0517 972 0 1 14.6499 102.49 -204.658 - 41 351.394 1411 0 0 14.0488 102.494 -205.85 - 41 183.021 1410 0 0 13.7721 102.35 -206.042 - 41 89.1252 1079 3 1 35.9574 105.774 -114.45 - 41 53.9295 1078 3 1 35.85 105.824 -114.654 - 41 296.254 1792 3 0 37.4814 178.645 -116.25 - 41 155.786 1793 3 0 37.5093 178.75 -116.215 - 41 89.712 1794 3 0 37.5579 178.95 -116.17 - 41 86.2288 1795 3 0 37.614 179.15 -116.125 - 41 88.8481 1796 3 0 37.681 179.35 -116.089 - 41 54.2912 1797 3 0 37.7347 179.55 -116.055 - 41 61.2013 1798 3 0 37.7869 179.75 -116.016 - 41 48.7991 1799 3 0 37.8676 179.95 -115.978 - 41 145.915 1080 3 1 36.05 105.771 -114.476 - 41 255.514 1081 3 1 36.2505 105.776 -114.528 - 41 71.3805 1082 3 1 36.4511 105.797 -114.524 - 41 63.0526 1083 3 1 36.6501 105.726 -114.48 - 41 93.724 1084 3 1 36.85 105.667 -114.478 - 41 421.596 1085 3 1 37.0502 105.766 -114.452 - 41 101.53 1086 3 1 37.25 105.548 -114.686 - 41 10.5274 1421 3 0 36.9141 104.538 -115.85 -Number of digits in this event: 50 -Using G4ParticleGun... -Particle energy: 5.21568 LIN +Number of tracker hits in this event: 94 + 41 139.065 674 8 1 -45.1882 136.867 35.55 + 41 129.991 1583 8 0 -45.1894 136.868 34.15 + 41 117.722 674 7 1 -45.2306 136.887 5.55 + 41 141.724 1583 7 0 -45.2381 136.889 4.15 + 41 211.75 673 6 1 -45.4107 136.923 -24.45 + 41 91.4783 1583 6 0 -45.4178 136.928 -25.85 + 41 644.64 672 5 1 -45.5685 137.019 -54.45 + 41 571.821 1584 5 0 -45.58 137.021 -55.85 + 41 238.163 671 4 1 -45.8104 137.066 -84.45 + 41 128.876 1584 4 0 -45.8208 137.068 -85.85 + 41 107.171 669 3 1 -46.0557 137.142 -114.45 + 41 110.377 1584 3 0 -46.0636 137.146 -115.85 + 41 153.831 669 2 1 -46.2162 137.215 -144.45 + 41 129.317 1585 2 0 -46.2224 137.219 -145.85 + 41 173.153 668 1 1 -46.3598 137.307 -174.45 + 41 117.409 1585 1 0 -46.3678 137.309 -175.85 + 41 156.522 667 0 1 -46.535 137.362 -204.45 + 41 119.652 1586 0 0 -46.5482 137.361 -205.85 + 41 126.389 668 2 1 -46.25 137.235 -144.76 + 41 142.635 670 3 1 -46.05 137.14 -114.592 + 41 65.7299 1722 0 0 -71.4891 164.625 -206.25 + 41 98.6598 524 0 1 -75.05 166.696 -204.642 + 41 2.14586 523 0 1 -75.2501 166.641 -204.663 + 41 73.6003 1723 0 0 -71.5188 164.751 -205.903 + 41 66.3562 1724 0 0 -71.3663 164.95 -205.898 + 41 88.7048 1725 0 0 -71.313 165.15 -205.949 + 41 97.5089 1726 0 0 -71.2406 165.35 -205.979 + 41 172.609 1727 0 0 -71.1699 165.55 -205.887 + 41 145.807 539 0 1 -72.16 165.696 -204.85 + 41 50.3511 670 4 1 -45.8652 138.248 -84.45 + 41 174.464 1591 4 0 -45.761 138.54 -85.85 + 41 117.451 1592 4 0 -45.7576 138.55 -85.8973 + 41 123.906 684 3 1 -43.196 144.223 -114.45 + 41 165.377 1622 3 0 -42.866 144.564 -115.85 + 41 287.958 723 2 1 -35.3471 151.598 -144.45 + 41 236.024 1657 2 0 -35.0549 151.719 -145.85 + 41 6.43229 1658 2 0 -34.9817 151.75 -146.225 + 41 169.204 753 1 1 -29.3804 153.987 -174.45 + 41 101.382 1669 1 0 -29.1739 154.04 -175.85 + 41 106.1 775 0 1 -24.8916 155.211 -204.45 + 41 227.278 1675 0 0 -24.7673 155.229 -205.85 + 41 162.696 769 10 1 -26.1459 42.6813 95.15 + 41 222.938 1092 3 1 38.5426 176.81 -114.45 + 41 290.086 1091 3 1 38.45 176.586 -114.644 + 41 33.2276 932 2 1 6.53792 161.924 -144.85 + 41 26.3976 1683 0 0 -19.1453 156.899 -205.85 + 41 18.5485 1583 5 0 -45.7046 136.95 -56.1766 + 41 201.014 651 4 1 -49.7586 135.289 -84.45 + 41 10.9053 650 4 1 -49.85 135.242 -84.7851 + 41 141.266 1574 4 0 -50.0169 135.109 -85.85 + 41 38.6341 1448 4 0 -47.9616 109.857 -86.25 + 41 173.984 1447 4 0 -47.9628 109.75 -86.1276 + 41 37.5251 1446 4 0 -48.0407 109.55 -85.9759 + 41 64.3684 657 4 1 -48.5015 108.939 -84.8498 + 41 153.172 656 4 1 -48.65 108.855 -84.664 + 41 262.143 655 4 1 -48.85 108.56 -84.5093 + 41 581.544 654 4 1 -49.05 108.038 -84.5596 + 41 13.0762 653 4 1 -49.25 107.98 -84.5921 + 41 132.132 668 4 1 -46.3834 139.301 -84.45 + 41 15.1638 667 4 1 -46.4501 139.415 -84.8023 + 41 6.4653 1597 4 0 -46.6735 139.743 -85.85 + 41 109.53 1598 4 0 -46.6786 139.75 -85.8741 + 41 136.309 635 3 1 -52.8738 147.132 -114.45 + 41 60.3366 1638 3 0 -53.447 147.847 -115.85 + 41 77.0983 1639 3 0 -53.5264 147.95 -116.051 + 41 108.426 576 2 1 -64.7355 162.603 -144.45 + 41 31.3229 575 2 1 -64.85 162.765 -144.741 + 41 110.8 1716 2 0 -65.3085 163.394 -145.85 + 41 141.259 1717 2 0 -65.4285 163.55 -146.13 + 41 150.931 511 1 1 -77.6546 179.312 -174.45 + 41 2.68213 510 1 1 -77.8502 179.517 -174.847 + 41 354.453 1799 1 0 -78.3223 180.027 -175.85 + 41 91.9983 1647 1 0 -95.686 149.726 -176.25 + 41 88.102 1646 1 0 -95.5756 149.55 -176.059 + 41 94.3505 427 1 1 -94.6872 148.477 -174.85 + 41 173.229 428 1 1 -94.55 148.29 -174.799 + 41 195.17 1630 1 0 -93.8444 146.21 -175.85 + 41 147.75 1629 1 0 -93.8314 146.15 -175.864 + 41 16.8668 678 4 1 -44.2551 138.364 -84.45 + 41 100.311 679 4 1 -44.25 138.366 -84.5123 + 41 5.21051 692 3 1 -41.4518 139.359 -114.45 + 41 202.66 693 3 1 -41.45 139.358 -114.461 + 41 144.505 1595 3 0 -41.2178 139.256 -115.85 + 41 399.944 1586 2 0 -35.1814 137.445 -145.85 + 41 119.858 746 1 1 -30.7171 134.918 -174.45 + 41 171.174 1573 1 0 -30.7806 134.82 -175.851 + 41 137.025 737 0 1 -32.5916 133.253 -204.45 + 41 155.188 1564 0 0 -32.5048 133.075 -205.85 + 41 50.1614 1017 0 1 23.65 121.567 -204.451 + 41 313.83 1018 0 1 23.8357 121.473 -204.45 + 41 4.00624 682 3 1 -43.4746 140.11 -114.45 + 41 100.426 673 8 1 -45.25 136.83 35.3634 + 41 84.359 672 8 1 -45.45 136.697 35.3233 + 41 51.5079 671 8 1 -45.65 136.552 35.4268 +Number of digits in this event: 49 +Using G4ParticleGun... +Particle energy: 5.43809 LIN Particle: e- Event: 42 -Number of tracker hits in this event: 25 - 42 126.146 782 9 0 133.51 -23.4774 64.15 - 42 157.993 1566 8 1 133.512 -23.4728 35.55 - 42 107.893 782 8 0 133.512 -23.473 34.15 - 42 131.136 1566 7 1 133.52 -23.4833 5.55 - 42 235.223 782 7 0 133.521 -23.4828 4.15 - 42 115.506 1567 6 1 133.553 -23.4784 -24.45 - 42 117.967 782 6 0 133.557 -23.4782 -25.85 - 42 91.1773 1567 5 1 133.638 -23.4733 -54.45 - 42 136.342 782 5 0 133.643 -23.4739 -55.85 - 42 100.775 1567 4 1 133.746 -23.4841 -84.45 - 42 128.568 782 4 0 133.752 -23.4845 -85.85 - 42 241.6 1568 3 1 133.891 -23.4915 -114.45 - 42 249.954 782 3 0 133.899 -23.4912 -115.85 - 42 113.2 1569 2 1 134.068 -23.492 -144.45 - 42 120.433 782 2 0 134.075 -23.4912 -145.85 - 42 313.957 1570 1 1 134.21 -23.4646 -174.45 - 42 138.898 782 1 0 134.216 -23.4636 -175.85 - 42 131.539 1570 0 1 134.314 -23.4572 -204.45 - 42 138.302 782 0 0 134.319 -23.4582 -205.85 - 42 143.11 828 2 0 16.912 -14.363 -146.25 - 42 124.991 827 2 0 16.4812 -14.45 -145.926 - 42 122.722 781 3 0 133.83 -23.65 -116.12 - 42 109.825 535 7 1 -72.85 78.0121 5.41096 - 42 24.4484 735 0 0 166.158 -32.9581 -206.25 - 42 45.0488 1727 0 1 165.599 -32.6413 -204.85 -Number of digits in this event: 19 +Number of tracker hits in this event: 68 + 42 121.84 365 10 0 46.891 -106.966 94.1245 + 42 131.09 1134 9 1 46.8889 -106.972 65.55 + 42 139.505 365 9 0 46.8882 -106.973 64.15 + 42 124.5 1134 8 1 46.8732 -106.984 35.55 + 42 129.562 365 8 0 46.8703 -106.984 34.15 + 42 119.012 1133 7 1 46.8195 -106.983 5.55 + 42 138.5 365 7 0 46.8175 -106.982 4.15 + 42 252.256 1133 6 1 46.7789 -106.951 -24.45 + 42 171.688 366 6 0 46.7776 -106.95 -25.85 + 42 485.725 1133 5 1 46.7468 -106.929 -54.45 + 42 127.201 366 5 0 46.7445 -106.929 -55.85 + 42 135.531 1133 4 1 46.704 -106.934 -84.45 + 42 131.204 366 4 0 46.7013 -106.936 -85.85 + 42 107.996 1132 3 1 46.6429 -106.978 -114.45 + 42 124.626 365 3 0 46.6409 -106.98 -115.85 + 42 187.893 1132 2 1 46.5977 -107.034 -144.45 + 42 136.403 365 2 0 46.5955 -107.037 -145.85 + 42 158.792 1132 1 1 46.5527 -107.113 -174.45 + 42 112.21 365 1 0 46.5525 -107.117 -175.85 + 42 182.357 1132 0 1 46.5465 -107.205 -204.45 + 42 260.266 364 0 0 46.548 -107.207 -205.85 + 42 95.7557 903 5 0 120.773 0.814136 -56.2496 + 42 298.652 902 5 0 120.745 0.65 -56.0148 + 42 139.697 1131 0 1 46.45 -107.124 -204.722 + 42 48.6336 802 2 0 49.7019 -19.4543 -146.25 + 42 65.3775 803 2 0 49.7134 -19.45 -146.142 + 42 134.313 1145 2 1 49.2492 -19.4917 -144.85 + 42 130.89 1144 2 1 49.0497 -19.5923 -144.715 + 42 77.7823 794 2 0 46.6218 -21.2204 -145.85 + 42 165.933 793 2 0 46.52 -21.2501 -145.886 + 42 69.1105 1134 6 1 46.85 -106.91 -24.6832 + 42 12.6922 367 5 0 46.7472 -106.564 -55.85 + 42 168.034 368 5 0 46.7472 -106.55 -55.9034 + 42 106.868 1129 4 1 45.9493 -98.9052 -84.45 + 42 3.29368 407 4 0 46.0061 -98.5544 -85.85 + 42 139.043 408 4 0 46.0069 -98.55 -85.8673 + 42 110.828 1133 3 1 46.8386 -93.0273 -114.45 + 42 109.234 436 3 0 46.8244 -92.9075 -115.85 + 42 19.6352 1122 2 1 44.6182 -94.6662 -144.45 + 42 113.511 1123 2 1 44.65 -94.7014 -144.521 + 42 147.503 424 2 0 45.1408 -95.1782 -145.85 + 42 28.6483 1175 1 1 55.0939 -106.928 -174.45 + 42 88.9727 1174 1 1 55.05 -106.95 -174.548 + 42 154.001 364 1 0 54.4685 -107.213 -175.85 + 42 131.129 1122 0 1 44.4536 -109.802 -204.45 + 42 7.80827 1123 0 1 44.65 -109.621 -204.82 + 42 313.562 354 0 0 45.3844 -109.29 -205.85 + 42 153.473 355 0 0 45.7123 -109.15 -206.153 + 42 60.26 209 0 0 26.6054 -138.17 -206.25 + 42 124.149 365 5 0 46.6476 -106.951 -55.85 + 42 134.973 1124 4 1 45.0037 -107.487 -84.45 + 42 138.265 363 4 0 45.0042 -107.479 -85.85 + 42 219.425 1126 3 1 45.3792 -107.149 -114.45 + 42 123.917 364 3 0 45.5105 -107.226 -115.85 + 42 135.194 1141 2 1 48.308 -109.062 -144.45 + 42 306.5 354 2 0 48.5147 -109.202 -145.85 + 42 103.474 1165 1 1 53.2237 -112.473 -174.45 + 42 15.3079 1166 1 1 53.25 -112.543 -174.797 + 42 151.099 336 1 0 53.3152 -112.764 -175.85 + 42 199.946 1174 0 1 54.9208 -118.946 -204.451 + 42 143.807 303 0 0 54.9064 -119.364 -205.85 + 42 75.7742 1175 0 1 55.0502 -119.078 -204.774 + 42 182.707 1176 0 1 55.25 -118.954 -204.745 + 42 7.58853 1177 0 1 55.45 -118.672 -204.841 + 42 65.5635 307 0 0 56.1175 -118.666 -205.85 + 42 121.285 306 0 0 56.1681 -118.75 -205.903 + 42 4.83482 842 8 0 0.108297 -11.6391 33.75 + 42 296.837 366 10 0 46.9347 -106.95 93.9827 +Number of digits in this event: 45 Using G4ParticleGun... -Particle energy: 4.05017 LIN +Particle energy: 4.34986 LIN Particle: e- Event: 43 -Number of tracker hits in this event: 78 - 43 117.754 1249 11 1 69.8621 -29.9089 125.55 - 43 117.211 750 11 0 69.8622 -29.9086 124.15 - 43 292.135 1249 10 1 69.8678 -29.897 95.55 - 43 94.3965 750 10 0 69.8686 -29.8983 94.15 - 43 124.217 1249 9 1 69.8797 -29.9378 65.55 - 43 107.284 750 9 0 69.8755 -29.9401 64.15 - 43 102.3 1248 8 1 69.7819 -29.9959 35.55 - 43 111.269 750 8 0 69.7794 -30.0018 34.15 - 43 122.556 1248 7 1 69.7365 -30.1328 5.55 - 43 120.102 749 7 0 69.7339 -30.1366 4.15 - 43 118.129 1248 6 1 69.6809 -30.215 -24.45 - 43 126.855 749 6 0 69.6763 -30.2189 -25.85 - 43 138.298 1247 5 1 69.5879 -30.2557 -54.45 - 43 196.703 748 5 0 69.5815 -30.2558 -55.85 - 43 344.214 1246 4 1 69.448 -30.257 -84.45 - 43 457.073 748 4 0 69.44 -30.2555 -85.85 - 43 281.282 1246 3 1 69.295 -30.2309 -114.45 - 43 131.343 749 3 0 69.2913 -30.2296 -115.85 - 43 586.984 1245 2 1 69.2066 -30.1854 -144.45 - 43 286.226 749 2 0 69.2004 -30.175 -145.85 - 43 349.875 1245 1 1 69.0826 -29.9762 -174.45 - 43 461.316 750 1 0 69.0776 -29.9645 -175.85 - 43 271.506 1244 0 1 68.9838 -29.7432 -204.45 - 43 120.272 751 0 0 68.9736 -29.7095 -205.85 - 43 255.01 1747 8 0 85.4208 169.602 33.7501 - 43 180.069 1746 8 0 85.3677 169.55 33.9287 - 43 57.7033 1612 2 1 142.55 118.207 -144.836 - 43 73.6582 1489 2 0 141.252 117.956 -145.85 - 43 1.06961 1488 2 0 141.237 117.95 -145.88 - 43 530.194 749 1 0 69.3195 -30.2283 -175.85 - 43 46.7751 1266 0 1 73.4053 -28.0207 -204.45 - 43 57.8313 1265 0 1 73.25 -27.9552 -204.555 - 43 72.1369 1264 0 1 73.05 -27.8869 -204.676 - 43 25.12 1263 0 1 72.85 -27.8133 -204.803 - 43 40.1119 763 0 0 71.1654 -27.2893 -205.85 - 43 167.762 764 0 0 71.0422 -27.25 -205.93 - 43 19.812 672 0 0 65.8776 -45.5929 -206.25 - 43 145.614 629 0 0 86.8802 -54.0649 -206.25 - 43 39.8018 630 0 0 86.8807 -54.05 -206.166 - 43 146.697 1234 0 1 67.046 -27.2227 -204.45 - 43 107.017 765 0 0 66.9453 -26.9111 -205.85 - 43 62.1093 766 0 0 66.9239 -26.85 -206.127 - 43 138.265 1245 3 1 69.2392 -30.2991 -114.45 - 43 287.647 748 3 0 69.2314 -30.293 -115.85 - 43 245.933 1244 1 1 68.8832 -30.1729 -174.45 - 43 302.546 750 0 0 68.8672 -29.9718 -205.85 - 43 119.962 1585 6 1 137.306 -4.44085 -24.4501 - 43 87.4486 1584 6 1 137.15 -4.49324 -24.7338 - 43 29.0147 1583 6 1 136.95 -4.49911 -24.8012 - 43 189.084 883 6 0 135.944 -3.33454 -25.8502 - 43 158.809 882 6 0 135.945 -3.45004 -26.1041 - 43 195.395 1244 2 1 69.0499 -30.2641 -144.57 - 43 105 748 2 0 69.1886 -30.3352 -145.85 - 43 195.941 1243 0 1 68.8183 -30.0095 -204.45 - 43 19.4965 756 0 0 69.6773 -28.6937 -205.85 - 43 56.883 757 0 0 69.6992 -28.65 -205.868 - 43 177.821 1250 0 1 70.0697 -27.0321 -204.85 - 43 224.719 1249 0 1 70.05 -26.917 -204.806 - 43 102.302 773 0 0 70.0496 -25.3877 -205.85 - 43 159.541 774 0 0 70.1195 -25.2499 -206.038 - 43 161.64 736 0 0 58.9167 -32.788 -206.25 - 43 1.85755 1583 0 0 -2.71139 136.921 -206.25 - 43 38.4427 1691 0 0 -24.5677 158.376 -206.25 - 43 119.382 749 5 0 69.5841 -30.25 -56.1895 - 43 323.768 1249 2 1 69.9028 -29.7671 -144.45 - 43 220.724 751 2 0 69.9123 -29.7501 -145.85 - 43 115.115 1250 1 1 70.1238 -29.8541 -174.45 - 43 166.906 1252 0 1 70.4694 -30.1751 -204.45 - 43 279.897 749 0 0 70.4796 -30.1664 -205.85 - 43 11.5547 1529 0 1 126.15 167.179 -204.602 - 43 153.671 1248 0 1 69.85 -29.79 -204.655 - 43 374.332 1247 0 1 69.6499 -30.1108 -204.823 - 43 107.989 755 0 0 70.3479 -28.9807 -205.85 - 43 116.47 737 0 0 78.8443 -32.5062 -206.25 - 43 52.0594 1300 0 1 80.1539 -32.5413 -204.85 - 43 76.2162 1301 0 1 80.25 -32.5259 -204.747 - 43 50.4155 1302 0 1 80.45 -32.4348 -204.576 - 43 125.768 1249 1 1 69.9213 -29.9369 -174.45 -Number of digits in this event: 45 +Number of tracker hits in this event: 31 + 43 124.658 380 10 1 -104.041 4.23977 95.55 + 43 90.622 920 10 0 -104.041 4.24118 94.15 + 43 96.7351 380 9 1 -104.035 4.26993 65.55 + 43 125.696 921 9 0 -104.035 4.27072 64.15 + 43 140.868 380 8 1 -104.05 4.29049 35.55 + 43 127.196 921 8 0 -104.053 4.28816 34.15 + 43 159.992 380 7 1 -104.121 4.24829 5.55 + 43 156.428 920 7 0 -104.123 4.24651 4.15 + 43 210.587 379 6 1 -104.171 4.21299 -24.45 + 43 106.541 920 6 0 -104.173 4.21034 -25.85 + 43 182.632 379 5 1 -104.242 4.16139 -54.45 + 43 132.915 920 5 0 -104.245 4.16046 -55.85 + 43 162.832 379 4 1 -104.318 4.13959 -84.45 + 43 137.466 920 4 0 -104.323 4.13547 -85.85 + 43 172.004 378 3 1 -104.429 4.05283 -114.45 + 43 167.638 919 3 0 -104.437 4.04697 -115.85 + 43 120.892 377 2 1 -104.61 3.91313 -144.45 + 43 122.7 919 2 0 -104.614 3.90397 -145.85 + 43 146.176 377 1 1 -104.744 3.7224 -174.45 + 43 125.087 918 1 0 -104.748 3.71444 -175.85 + 43 100.563 376 0 1 -104.842 3.55483 -204.45 + 43 114.393 917 0 0 -104.848 3.54593 -205.85 + 43 46.3742 883 9 0 -56.4171 -3.28959 63.7501 + 43 179.753 884 9 0 -56.4084 -3.24997 63.8137 + 43 34.5768 629 9 1 -54.0743 -2.26686 65.15 + 43 132.449 630 9 1 -54.05 -2.23622 65.1709 + 43 20.2162 862 0 0 -118.049 -7.45 -206.016 + 43 64.2747 919 1 0 -104.721 3.9013 -175.85 + 43 218.809 702 0 0 -83.5776 -39.5012 -206.25 + 43 243.705 379 0 1 -104.235 4.18533 -204.501 + 43 231.531 920 0 0 -104.23 4.1871 -205.85 +Number of digits in this event: 24 Using G4ParticleGun... -Particle energy: 2.58475 LIN +Particle energy: 7.66533 LIN Particle: e- Event: 44 -Number of tracker hits in this event: 85 - 44 112.106 1197 11 1 59.4625 -27.5731 125.55 - 44 200.062 762 11 0 59.4601 -27.57 124.15 - 44 128.128 1196 10 1 59.4139 -27.4999 95.55 - 44 207.232 762 10 0 59.412 -27.4896 94.15 - 44 106.222 1196 9 1 59.3646 -27.2785 65.55 - 44 141.247 763 9 0 59.3638 -27.2658 64.15 - 44 139.188 1196 8 1 59.3475 -27.0216 35.55 - 44 111.952 765 8 0 59.3453 -27.0122 34.15 - 44 129.621 1196 7 1 59.3053 -26.821 5.55 - 44 115.451 766 7 0 59.3043 -26.8128 4.15 - 44 125.708 1196 6 1 59.2681 -26.6371 -24.45 - 44 111.701 767 6 0 59.266 -26.6301 -25.85 - 44 204.368 1195 5 1 59.2273 -26.4923 -54.45 - 44 135.037 767 5 0 59.2231 -26.485 -55.85 - 44 119.04 1195 4 1 59.1351 -26.3396 -84.45 - 44 116.467 768 4 0 59.1315 -26.3341 -85.85 - 44 396.303 1195 3 1 59.0609 -26.2242 -114.45 - 44 217.034 769 3 0 59.06 -26.2211 -115.85 - 44 140.923 1194 2 1 59.0321 -26.1386 -144.45 - 44 258.3 769 2 0 59.0326 -26.1329 -145.85 - 44 166.436 1194 1 1 59.0265 -26.0205 -174.45 - 44 93.6428 770 1 0 59.0261 -26.0117 -175.85 - 44 243.916 1194 0 1 58.9797 -25.8115 -204.45 - 44 134.44 771 0 0 58.9798 -25.8026 -205.85 - 44 230.587 1670 1 1 154.15 -13.8613 -174.564 - 44 90.6518 1075 3 0 -86.7904 35.05 -116.003 - 44 67.1212 585 9 1 -63.05 37.8 65.3052 - 44 94.2852 541 6 1 -71.6681 115.989 -24.45 - 44 34.744 540 6 1 -71.85 115.971 -24.5134 - 44 474.888 770 0 0 58.9406 -26.0021 -205.85 - 44 25.2085 769 0 0 58.9807 -26.0501 -206.194 - 44 92.2428 794 0 0 88.2439 -21.1402 -206.25 - 44 140.171 795 0 0 88.3252 -21.05 -206.087 - 44 146.172 1345 0 1 89.072 -21.4333 -204.85 - 44 14.953 1344 0 1 89.0499 -21.5111 -204.836 - 44 146.105 1193 0 1 58.8176 -25.9187 -204.45 - 44 186.483 763 0 0 58.2278 -27.4008 -205.85 - 44 49.7953 762 0 0 58.2085 -27.45 -205.889 - 44 63.5882 761 0 0 58.1648 -27.65 -206.014 - 44 51.8165 760 0 0 58.1304 -27.85 -206.078 - 44 51.0234 759 0 0 58.1312 -28.05 -206.181 - 44 41.932 1156 1 1 51.45 38.4321 -174.698 - 44 182.521 1157 1 1 51.45 38.7209 -174.526 - 44 84.9402 1200 0 1 60.2208 -25.384 -204.45 - 44 95.0992 1199 0 1 60.05 -25.6333 -204.613 - 44 13.0757 1198 0 1 59.85 -25.8805 -204.821 - 44 53.7423 764 0 0 58.6441 -27.1252 -205.85 - 44 205.71 770 3 0 58.9623 -25.9116 -115.85 - 44 37.5297 771 3 0 58.9247 -25.85 -116.12 - 44 18.0302 1184 2 1 56.8616 -17.9364 -144.45 - 44 190.091 1183 2 1 56.85 -17.8781 -144.493 - 44 33.9816 822 2 0 56.2721 -15.5834 -145.85 - 44 53.4309 823 2 0 56.249 -15.4498 -145.923 - 44 69.1132 824 2 0 56.223 -15.25 -146.028 - 44 97.3331 825 2 0 56.2099 -15.0499 -146.138 - 44 1.98626 826 2 0 56.2068 -14.85 -146.245 - 44 96.6705 1169 1 1 53.8855 34.621 -174.45 - 44 182.962 1168 1 1 53.85 34.6974 -174.53 - 44 27.7332 1081 1 0 53.2261 36.3802 -175.85 - 44 115.402 1082 1 0 53.2041 36.4502 -175.902 - 44 73.9922 1083 1 0 53.1568 36.65 -176.078 - 44 5.45823 1084 1 0 53.1031 36.85 -176.229 - 44 77.6478 1110 0 1 42.2005 67.187 -204.45 - 44 268.198 1111 0 1 42.2501 67.2861 -204.508 - 44 58.5058 1112 0 1 42.4501 67.47 -204.615 - 44 73.7345 1113 0 1 42.65 67.5846 -204.643 - 44 51.8102 1114 0 1 42.8503 67.6671 -204.632 - 44 55.0794 1115 0 1 43.0501 67.6921 -204.596 - 44 58.4439 1116 0 1 43.25 67.7182 -204.599 - 44 54.4858 1117 0 1 43.4503 67.7418 -204.684 - 44 262.769 1239 0 0 43.9664 67.9259 -205.85 - 44 81.5469 1193 2 1 58.7822 -23.6892 -144.451 - 44 39.0329 1192 2 1 58.65 -23.6315 -144.702 - 44 108.119 783 2 0 58.1105 -23.3239 -145.85 - 44 27.6764 784 2 0 57.9609 -23.25 -146.153 - 44 118.051 1114 1 1 42.8824 -19.5377 -174.451 - 44 5.36021 1113 1 1 42.85 -19.3444 -174.835 - 44 107.916 805 1 0 42.8095 -18.8624 -175.85 - 44 97.3141 806 1 0 42.8084 -18.85 -175.876 - 44 8.39328 807 1 0 42.8034 -18.65 -176.226 - 44 163.24 889 0 0 41.8275 -2.23635 -205.85 - 44 11.5669 1115 1 1 43.1044 -17.9943 -174.85 - 44 20.5067 814 1 0 45.4328 -17.1266 -175.85 - 44 45.3943 764 9 0 59.43 -27.25 63.7715 - 44 82.9198 856 9 0 18.4721 -8.72106 63.75 -Number of digits in this event: 31 +Number of tracker hits in this event: 21 + 44 164.71 1199 8 0 -133.167 59.8577 34.15 + 44 133.023 234 7 1 -133.164 59.8588 5.55 + 44 118.919 1199 7 0 -133.165 59.8595 4.15 + 44 106.218 234 6 1 -133.179 59.8765 -24.45 + 44 116.233 1199 6 0 -133.179 59.8776 -25.85 + 44 130.468 234 5 1 -133.191 59.8983 -54.45 + 44 115.396 1199 5 0 -133.191 59.8992 -55.85 + 44 112.148 234 4 1 -133.183 59.9199 -84.45 + 44 114.641 1199 4 0 -133.181 59.9215 -85.85 + 44 166.022 234 3 1 -133.157 59.957 -114.45 + 44 238.27 1199 3 0 -133.156 59.9589 -115.85 + 44 159.542 235 2 1 -133.148 59.9977 -144.45 + 44 134.543 1199 2 0 -133.149 59.9988 -145.85 + 44 131.234 234 1 1 -133.161 60.0219 -174.45 + 44 137.613 1199 1 0 -133.163 60.0222 -175.85 + 44 110.075 234 0 1 -133.204 60.0257 -204.45 + 44 102.915 1199 0 0 -133.205 60.023 -205.85 + 44 157.257 234 2 1 -133.15 59.9757 -144.473 + 44 109.954 1194 2 0 -133.524 58.9755 -145.85 + 44 169.055 1193 2 0 -133.58 58.85 -146.018 + 44 79.0514 314 0 1 -117.339 100.186 -204.85 +Number of digits in this event: 14 Using G4ParticleGun... -Particle energy: 9.65577 LIN +Particle energy: 3.08726 LIN Particle: e- Event: 45 -Number of tracker hits in this event: 52 - 45 115.284 1182 11 0 -62.5588 56.4624 124.09 - 45 165.475 587 10 1 -62.5595 56.4606 95.55 - 45 115.162 1182 10 0 -62.5601 56.4598 94.15 - 45 138.287 587 9 1 -62.5715 56.4472 65.55 - 45 127.211 1181 9 0 -62.5712 56.4466 64.15 - 45 118.953 587 8 1 -62.5633 56.4304 35.55 - 45 119.448 1181 8 0 -62.5625 56.4291 34.15 - 45 104.956 587 7 1 -62.5455 56.4035 5.55 - 45 111.343 1181 7 0 -62.5444 56.4021 4.15 - 45 143.915 587 6 1 -62.5225 56.376 -24.45 - 45 162.166 1181 6 0 -62.5209 56.3742 -25.85 - 45 204.352 587 5 1 -62.4886 56.3397 -54.45 - 45 117.247 1181 5 0 -62.4859 56.3379 -55.85 - 45 151.759 588 4 1 -62.4304 56.301 -84.45 - 45 123.278 1181 4 0 -62.4266 56.3 -85.85 - 45 137.559 588 3 1 -62.3489 56.2731 -114.45 - 45 148.285 1181 3 0 -62.3457 56.2698 -115.85 - 45 264.206 588 2 1 -62.3098 56.1243 -144.45 - 45 145.811 1180 2 0 -62.3185 56.1047 -145.85 - 45 97.1491 587 1 1 -62.501 55.6134 -174.45 - 45 99.198 1177 1 0 -62.497 55.5837 -175.85 - 45 106.419 588 0 1 -62.3688 54.9551 -204.45 - 45 157.289 1174 0 0 -62.3716 54.9179 -205.85 - 45 62.9317 588 1 1 -62.3598 55.8474 -174.45 - 45 209.764 590 0 1 -62.0217 56.1765 -204.45 - 45 250.28 1180 0 0 -62.0103 56.1733 -205.85 - 45 0.175258 588 5 1 -62.45 56.332 -54.8498 - 45 199.023 1157 5 0 -57.1608 51.5091 -55.85 - 45 32.1028 1304 3 0 -68.3571 80.9627 -116.25 - 45 41.8247 1305 3 0 -68.3376 81.0501 -116.193 - 45 87.2387 1175 2 0 -62.4468 55.0944 -145.85 - 45 210.869 1174 2 0 -62.4543 55.0497 -145.915 - 45 17.1676 1173 2 0 -62.4992 54.85 -146.181 - 45 38.9757 907 2 0 -61.2764 1.58813 -146.25 - 45 173.42 906 2 0 -61.2383 1.44986 -146.166 - 45 245.2 905 2 0 -61.1778 1.25 -146.027 - 45 336.735 596 2 1 -60.7484 0.398445 -144.85 - 45 6.69609 595 2 1 -60.85 0.0535743 -144.83 - 45 174.788 899 2 0 -63.049 -0.0502519 -146.061 - 45 11.7476 898 2 0 -63.0225 -0.25 -146.244 - 45 103.242 587 3 1 -62.5337 56.2862 -114.45 - 45 105.044 1180 3 0 -61.9878 56.2017 -115.85 - 45 116.835 642 2 1 -51.4746 55.8666 -144.45 - 45 143.158 1040 2 0 -37.9044 28.1842 -146.25 - 45 122.885 717 2 1 -36.6329 28.0862 -144.85 - 45 69.3181 718 2 1 -36.45 28.0845 -144.596 - 45 58.7605 719 2 1 -36.2303 28.0932 -144.45 - 45 121.657 720 2 1 -36.05 28.1291 -144.624 - 45 180.199 1039 2 0 -35.7941 27.9536 -145.85 - 45 46.0235 1038 2 0 -35.6097 27.85 -146.13 - 45 51.7099 88 0 0 -125.067 -162.35 -206.223 - 45 85.1849 87 0 0 -125.033 -162.55 -206.233 +Number of tracker hits in this event: 47 + 45 136.223 1393 9 1 98.8774 -72.4546 65.55 + 45 209.188 538 9 0 98.8771 -72.4486 64.15 + 45 100.127 1393 8 1 98.8718 -72.3294 35.55 + 45 115.963 538 8 0 98.8711 -72.3251 34.15 + 45 213.688 1393 7 1 98.8291 -72.2412 5.55 + 45 111.819 539 7 0 98.8249 -72.2323 4.15 + 45 184.895 1393 6 1 98.7707 -72.0243 -24.45 + 45 151.671 540 6 0 98.7676 -72.0076 -25.85 + 45 124.888 1392 5 1 98.6968 -71.6743 -54.45 + 45 172.111 541 5 0 98.6957 -71.6582 -55.85 + 45 132.924 1392 4 1 98.6648 -71.3428 -84.45 + 45 138.976 543 4 0 98.6648 -71.3239 -85.85 + 45 113.998 1392 3 1 98.6751 -70.9511 -114.45 + 45 224.601 545 3 0 98.6676 -70.9375 -115.85 + 45 109.434 1391 2 1 98.4265 -70.6261 -144.45 + 45 114.83 547 2 0 98.4127 -70.5987 -145.85 + 45 162.91 1389 1 1 98.0903 -70.0119 -174.45 + 45 162.174 550 1 0 98.0764 -69.97 -175.85 + 45 161.069 1388 0 1 97.8401 -69.1272 -204.45 + 45 152.735 554 0 0 97.8409 -69.08 -205.85 + 45 131.414 1446 2 1 109.411 -75.3725 -144.45 + 45 161.71 525 2 0 109.163 -74.9064 -145.85 + 45 217.576 526 2 0 109.111 -74.85 -145.971 + 45 39.8833 1391 1 1 98.4901 -65.808 -174.45 + 45 94.7919 1392 1 1 98.5501 -65.8419 -174.625 + 45 22.165 567 1 0 99.0816 -66.6079 -175.85 + 45 108.673 566 1 0 99.1046 -66.65 -175.914 + 45 389.348 565 1 0 99.3907 -66.85 -176.047 + 45 10.2907 564 1 0 99.7922 -67.05 -176.245 + 45 10.3059 749 1 0 152.626 -30.0904 -176.25 + 45 74.7801 750 1 0 152.643 -30.05 -176.23 + 45 62.755 751 1 0 152.72 -29.8497 -176.043 + 45 96.6098 1664 1 1 153.026 -28.3613 -174.85 + 45 89.1101 1665 1 1 153.15 -28.2091 -174.624 + 45 143.212 1666 1 1 153.35 -28.1268 -174.471 + 45 122.625 1667 1 1 153.55 -28.1716 -174.54 + 45 155.698 384 2 0 19.2601 -103.207 -146.25 + 45 5.57453 539 9 0 98.9154 -72.25 63.766 + 45 127.881 1450 8 1 110.196 -49.4503 35.5499 + 45 112.539 1451 8 1 110.35 -49.145 35.4345 + 45 54.575 656 8 0 110.985 -48.8175 34.15 + 45 64.0539 657 8 0 111.072 -48.65 34.0816 + 45 66.7469 658 8 0 111.02 -48.4496 34.1165 + 45 215.363 1453 8 1 110.89 -46.902 35.1506 + 45 136.624 673 8 0 111.079 -45.4206 34.15 + 45 52.9194 672 8 0 110.774 -45.45 34.1002 + 45 148.572 1452 8 1 110.75 -46.39 35.2472 Number of digits in this event: 27 Using G4ParticleGun... -Particle energy: 3.27327 LIN +Particle energy: 3.51178 LIN Particle: e- Event: 46 -Number of tracker hits in this event: 21 - 46 117.792 1622 8 1 144.68 -6.26142 35.55 - 46 139.346 868 8 0 144.677 -6.26309 34.15 - 46 206.21 1622 7 1 144.608 -6.29615 5.55 - 46 99.6492 868 7 0 144.609 -6.294 4.15 - 46 113.02 1622 6 1 144.622 -6.23667 -24.45 - 46 219.825 869 6 0 144.623 -6.23573 -25.85 - 46 117.233 1622 5 1 144.654 -6.20143 -54.45 - 46 122.48 869 5 0 144.653 -6.19726 -55.85 - 46 117.941 1622 4 1 144.637 -6.07676 -84.45 - 46 124.132 869 4 0 144.64 -6.069 -85.85 - 46 167.241 1622 3 1 144.697 -5.90486 -114.45 - 46 102.147 870 3 0 144.72 -5.91376 -115.85 - 46 112.601 1625 2 1 145.187 -6.14207 -144.45 - 46 108.206 869 2 0 145.204 -6.12303 -145.85 - 46 261.887 1627 1 1 145.56 -5.77576 -174.45 - 46 122.295 871 1 0 145.573 -5.74654 -175.85 - 46 256.939 1629 0 1 146.035 -4.92244 -204.45 - 46 106.663 875 0 0 146.073 -4.88466 -205.85 - 46 176.011 868 6 0 144.622 -6.2504 -25.9391 - 46 247.556 1621 7 1 144.55 -6.4241 5.37077 - 46 28.6095 1026 0 1 25.3077 82.4553 -204.85 -Number of digits in this event: 13 +Number of tracker hits in this event: 64 + 46 491.674 252 7 1 -129.606 -70.3053 5.55 + 46 463.797 548 7 0 -129.607 -70.3085 4.15 + 46 381.68 252 6 1 -129.646 -70.3849 -24.45 + 46 466.145 548 6 0 -129.649 -70.3832 -25.85 + 46 93.9259 252 5 1 -129.738 -70.3307 -54.45 + 46 325.219 548 5 0 -129.748 -70.3246 -55.85 + 46 120.94 251 4 1 -129.934 -70.1993 -84.45 + 46 126.273 549 4 0 -129.95 -70.187 -85.85 + 46 138.284 249 3 1 -130.294 -69.9369 -114.45 + 46 194.945 550 3 0 -130.307 -69.9204 -115.85 + 46 132.686 247 2 1 -130.588 -69.5875 -144.45 + 46 123.797 552 2 0 -130.607 -69.5703 -145.85 + 46 124.321 245 1 1 -130.961 -69.2038 -174.45 + 46 145.774 554 1 0 -130.982 -69.1865 -175.85 + 46 234.838 243 0 1 -131.42 -68.8281 -204.45 + 46 117.93 556 0 0 -131.443 -68.8132 -205.85 + 46 47.3086 547 6 0 -129.472 -70.45 -25.9449 + 46 99.5731 245 6 1 -130.959 -73.3598 -24.45 + 46 191.79 532 6 0 -131.145 -73.5266 -25.8505 + 46 119.738 225 5 1 -135.07 -76.956 -54.45 + 46 64.7049 514 5 0 -135.215 -77.2029 -55.8502 + 46 38.3219 513 5 0 -135.241 -77.25 -56.0973 + 46 120.729 209 4 1 -138.284 -83.1291 -84.45 + 46 116.136 483 4 0 -138.474 -83.3525 -85.85 + 46 165.58 188 3 1 -142.478 -87.7779 -114.45 + 46 141.539 460 3 0 -142.568 -87.8776 -115.85 + 46 162.491 174 2 1 -145.21 -89.1597 -144.451 + 46 90.7109 452 2 0 -145.271 -89.5709 -145.85 + 46 38.7981 451 2 0 -145.285 -89.6501 -146.114 + 46 218.882 166 1 1 -146.842 -98.1804 -174.45 + 46 0.259848 408 1 0 -146.684 -98.5492 -175.85 + 46 122.893 407 1 0 -146.684 -98.55 -175.853 + 46 3.22389 186 0 1 -142.755 -106.278 -204.45 + 46 139.039 187 0 1 -142.75 -106.281 -204.465 + 46 106.815 368 0 0 -142.378 -106.466 -205.85 + 46 194.098 167 1 1 -146.75 -98.3064 -174.522 + 46 229.2 709 6 0 -156.158 -38.1403 -26.25 + 46 139.952 708 6 0 -156.037 -38.25 -26.1557 + 46 107.713 251 5 1 -129.829 -70.3069 -54.45 + 46 124.06 249 4 1 -130.312 -70.3995 -84.45 + 46 104.205 548 4 0 -130.336 -70.4069 -85.85 + 46 120.562 246 3 1 -130.809 -70.5728 -114.45 + 46 177.695 547 3 0 -130.872 -70.5888 -115.85 + 46 123.877 240 2 1 -132.09 -70.8178 -144.45 + 46 107.537 546 2 0 -132.146 -70.8042 -145.85 + 46 55.5511 233 1 1 -133.545 -70.6564 -174.45 + 46 75.8341 232 1 1 -133.55 -70.6524 -174.553 + 46 98.0781 547 1 0 -133.626 -70.5868 -175.85 + 46 109.578 223 0 1 -135.489 -68.9095 -204.45 + 46 111.048 555 0 0 -135.566 -68.93 -205.85 + 46 16.1039 467 6 0 -154.29 -86.6202 -26.2498 + 46 191.23 466 6 0 -154.329 -86.6503 -26.2043 + 46 7.79893 465 6 0 -154.605 -86.8502 -25.8671 + 46 164.302 124 6 1 -155.18 -87.8042 -24.8499 + 46 44.776 123 6 1 -155.35 -87.7759 -24.7805 + 46 105.511 474 6 0 -152.518 -85.1297 -25.85 + 46 62.1549 251 6 1 -129.75 -70.5987 -24.6826 + 46 58.0334 250 6 1 -129.95 -70.7011 -24.7171 + 46 56.436 249 6 1 -130.15 -70.7234 -24.7696 + 46 11.1537 248 6 1 -130.35 -70.7486 -24.8371 + 46 176.714 544 6 0 -133.301 -71.0641 -25.85 + 46 258.951 545 6 0 -133.474 -71.0499 -25.9104 + 46 552.074 543 6 0 -134.708 -71.25 -26.0012 + 46 59.3488 542 6 0 -135.765 -71.4501 -25.8944 +Number of digits in this event: 36 Using G4ParticleGun... -Particle energy: 8.82884 LIN +Particle energy: 1.42418 LIN Particle: e- Event: 47 -Number of tracker hits in this event: 61 - 47 254.7 222 7 1 -135.552 -61.6778 5.55 - 47 183.863 591 7 0 -135.548 -61.6752 4.15 - 47 112.971 223 6 1 -135.483 -61.625 -24.45 - 47 199.315 592 6 0 -135.482 -61.6207 -25.85 - 47 118.148 223 5 1 -135.458 -61.5365 -54.45 - 47 95.6634 592 5 0 -135.457 -61.5358 -55.85 - 47 163.209 223 4 1 -135.437 -61.5208 -84.45 - 47 394.044 592 4 0 -135.446 -61.5178 -85.85 - 47 119.195 222 3 1 -135.616 -61.4639 -114.45 - 47 332.69 592 3 0 -135.62 -61.4556 -115.85 - 47 117.021 222 2 1 -135.705 -61.3003 -144.45 - 47 122.237 593 2 0 -135.706 -61.291 -145.85 - 47 120.931 222 1 1 -135.747 -61.0905 -174.45 - 47 268.105 594 1 0 -135.749 -61.0739 -175.85 - 47 111.61 222 0 1 -135.747 -60.7481 -204.45 - 47 139.504 596 0 0 -135.747 -60.7427 -205.85 - 47 275.215 223 1 1 -135.492 -61.2244 -174.45 - 47 106.434 249 0 1 -130.246 -59.1144 -204.45 - 47 172.46 606 0 0 -130.274 -58.8354 -205.85 - 47 35.4496 598 1 0 -136.146 -60.3336 -175.85 - 47 140.559 599 1 0 -136.206 -60.2499 -175.928 - 47 40.64 600 1 0 -136.439 -60.05 -176.213 - 47 78.8117 595 1 0 -135.505 -61.05 -175.985 - 47 180.025 188 0 1 -142.544 -44.6425 -204.451 - 47 76.6208 681 0 0 -141.728 -43.7323 -205.85 - 47 95.0058 682 0 0 -141.598 -43.65 -206.027 - 47 124.273 1317 1 0 -89.9453 83.5541 -176.25 - 47 13.676 1318 1 0 -89.8816 83.6502 -175.861 - 47 122.487 449 1 1 -90.1922 84.6889 -174.85 - 47 111.165 733 0 0 -130.012 -33.4391 -206.25 - 47 115.274 732 0 0 -130.043 -33.45 -206.231 - 47 18.694 671 0 0 -100.823 -45.65 -206.021 - 47 233.816 224 0 1 -135.31 -61.1142 -204.451 - 47 120.256 595 0 0 -135.219 -61.0458 -205.851 - 47 163.389 594 0 0 -135.294 -61.0669 -205.85 - 47 238.804 224 4 1 -135.325 -61.528 -84.45 - 47 199.127 210 3 1 -138.079 -61.8211 -114.45 - 47 228.261 196 2 1 -140.814 -56.5983 -144.45 - 47 128.817 618 2 0 -140.934 -56.3579 -145.85 - 47 92.389 181 1 1 -143.867 -51.1903 -174.45 - 47 41.0868 180 1 1 -143.95 -51.1211 -174.718 - 47 151.787 646 1 0 -144.282 -50.846 -175.85 - 47 128.517 136 0 1 -152.781 -43.3186 -204.45 - 47 114.584 683 0 0 -153.136 -43.3653 -205.85 - 47 187.97 840 0 0 -168.871 -12.0206 -206.25 - 47 114.499 225 3 1 -135.089 -61.2774 -114.45 - 47 103.071 593 3 0 -135.083 -61.2907 -115.85 - 47 104.493 225 2 1 -134.976 -61.5349 -144.45 - 47 131.194 592 2 0 -134.958 -61.5416 -145.85 - 47 174.283 227 1 1 -134.618 -61.6893 -174.45 - 47 108.176 591 1 0 -134.606 -61.6917 -175.85 - 47 124.932 229 0 1 -134.34 -61.7749 -204.45 - 47 136.205 591 0 0 -134.319 -61.7806 -205.85 - 47 0.648499 440 1 1 -92.15 5.44808 -174.613 - 47 89.1973 956 2 0 -83.3821 11.25 -146.19 - 47 144.345 226 1 1 -134.75 -61.7765 -174.57 - 47 119.929 225 1 1 -134.95 -61.8222 -174.663 - 47 78.685 221 7 1 -135.75 -62.1288 5.5221 - 47 112.375 220 7 1 -135.95 -62.3378 5.51287 - 47 25.9351 169 6 1 -146.15 -47.3961 -24.5401 - 47 9.56476 1738 6 1 167.75 -62.0339 -24.6871 -Number of digits in this event: 34 -Using G4ParticleGun... -Particle energy: 1.46514 LIN +Number of tracker hits in this event: 129 + 47 131.217 1289 10 1 77.9531 75.8462 95.55 + 47 120.931 1278 10 0 77.9513 75.8486 94.15 + 47 206.453 1289 9 1 77.8997 75.8744 65.55 + 47 119.901 1279 9 0 77.8984 75.8745 64.15 + 47 95.0375 1289 8 1 77.8517 75.8612 35.55 + 47 182.152 1279 8 0 77.8525 75.8716 34.15 + 47 158.966 1289 7 1 77.8937 76.0374 5.55 + 47 15.183 1279 7 0 77.8944 76.0495 4.15 + 47 226.339 1280 7 0 77.8944 76.05 4.09075 + 47 120.414 1289 6 1 77.891 76.3153 -24.45 + 47 240.399 1281 6 0 77.8869 76.3306 -25.85 + 47 112.122 1288 5 1 77.846 76.6538 -54.45 + 47 232.238 1283 5 0 77.8441 76.6698 -55.85 + 47 139.573 1288 4 1 77.7969 76.9844 -84.45 + 47 108.819 1284 4 0 77.7921 77.0048 -85.85 + 47 103.463 1288 3 1 77.6855 77.4417 -114.45 + 47 108.78 1287 3 0 77.6776 77.4595 -115.85 + 47 143.854 1287 2 1 77.5327 77.8282 -144.45 + 47 127.535 1289 2 0 77.5198 77.8506 -145.85 + 47 205.324 1285 1 1 77.2211 78.2932 -174.45 + 47 109.194 1291 1 0 77.2082 78.31 -175.85 + 47 97.9007 1284 0 1 76.9586 78.6233 -204.45 + 47 115.974 1292 0 0 76.9479 78.6392 -205.85 + 47 224.77 245 8 0 6.44041 -131.098 33.7502 + 47 28.1577 244 8 0 6.49269 -131.15 33.8036 + 47 143.708 1290 7 1 78.1222 76.0515 5.55 + 47 104.97 1301 6 1 80.4212 76.3664 -24.4502 + 47 87.5463 1312 5 1 82.4626 75.0496 -54.45 + 47 135.83 1274 5 0 82.4974 74.9205 -55.8501 + 47 131.393 1318 4 1 83.7977 71.8809 -84.45 + 47 263.442 1258 4 0 83.8704 71.7266 -85.85 + 47 148.661 1327 3 1 85.4655 68.2808 -114.45 + 47 116.994 1240 3 0 85.5721 68.1051 -115.85 + 47 90.9056 1337 2 1 87.4539 64.6492 -144.45 + 47 23.0471 1336 2 1 87.45 64.6179 -144.759 + 47 186.635 1222 2 0 87.4404 64.5107 -145.85 + 47 137.49 1332 1 1 86.5351 61.6041 -174.45 + 47 105.475 1206 1 0 86.583 61.3647 -175.85 + 47 125.194 1339 0 1 87.8793 56.2699 -204.45 + 47 159.397 1180 0 0 88.0262 56.0996 -205.85 + 47 137.096 257 9 0 27.5249 -128.668 63.75 + 47 74.3026 1162 1 0 62.433 52.4587 -176.25 + 47 106.099 1221 2 0 87.6554 64.45 -146.038 + 47 115.918 1220 2 0 87.7694 64.25 -145.985 + 47 226.078 1219 2 0 87.7651 64.05 -146.054 + 47 223.229 860 5 0 56.2772 -7.98867 -56.2497 + 47 98.9125 859 5 0 56.2596 -8.05004 -56.1376 + 47 223.665 1311 4 1 82.3425 75.312 -84.45 + 47 99.5795 1272 4 0 82.0153 74.6473 -85.85 + 47 18.7014 1271 4 0 81.9308 74.45 -86.1909 + 47 98.7371 1263 3 1 72.8169 54.2752 -114.45 + 47 202.839 1262 3 1 72.6499 54.1161 -114.69 + 47 130.843 1170 3 0 72.1077 54.2358 -115.85 + 47 147.532 1019 3 0 52.7468 24.0428 -116.25 + 47 73.7839 1018 3 0 52.6286 23.85 -116.076 + 47 33.9705 1017 3 0 52.519 23.65 -115.929 + 47 109.506 1160 3 1 52.2099 22.1089 -114.85 + 47 66.439 1159 3 1 52.05 21.8127 -114.615 + 47 2.50846 1158 3 1 51.85 21.7 -114.456 + 47 13.0915 1312 4 1 82.45 75.3575 -84.7843 + 47 107.694 1276 4 0 82.6992 75.3098 -85.8508 + 47 19.1261 1358 3 1 91.9314 75.4327 -114.45 + 47 110.291 1359 3 1 91.95 75.461 -114.533 + 47 185.813 1279 3 0 92.2654 75.8844 -115.85 + 47 34.3016 1405 2 1 101.289 85.4624 -144.45 + 47 111.543 1406 2 1 101.35 85.5387 -144.573 + 47 101.579 1331 2 0 102.006 86.2708 -145.85 + 47 48.4812 1332 2 0 102.171 86.45 -146.146 + 47 471.333 1505 1 1 121.196 103.09 -174.45 + 47 168.273 1506 1 1 121.35 104.563 -174.772 + 47 33.6736 1442 1 0 122.375 108.674 -175.85 + 47 77.7603 1443 1 0 122.393 108.75 -175.869 + 47 60.6859 1444 1 0 122.441 108.95 -175.936 + 47 248.552 1445 1 0 122.521 109.15 -176.001 + 47 50.98 1446 1 0 122.585 109.35 -176.071 + 47 69.5136 1447 1 0 122.639 109.55 -176.135 + 47 42.8118 1448 1 0 122.699 109.75 -176.199 + 47 15.8244 1233 1 1 66.85 177.971 -174.811 + 47 20.4686 1280 4 0 80.3588 76.0937 -85.85 + 47 42.469 1023 0 1 24.7553 138.018 -204.45 + 47 84.1932 1288 7 1 77.85 75.9864 5.54149 + 47 86.5596 1287 7 1 77.65 75.9418 5.35073 + 47 6.03772 1286 7 1 77.45 75.8971 5.16088 + 47 10.6178 1278 7 0 76.3784 75.6583 4.15 + 47 154.203 1277 7 0 76.341 75.65 4.11466 + 47 78.2719 1131 6 1 46.3678 69.571 -24.45 + 47 73.943 1130 6 1 46.25 69.5562 -24.5668 + 47 34.8599 1129 6 1 46.05 69.5321 -24.766 + 47 246.759 1246 6 0 44.9371 69.3879 -25.85 + 47 27.5427 980 5 1 16.1063 65.3615 -54.45 + 47 151.015 979 5 1 16.05 65.3571 -54.5048 + 47 70.9364 978 5 1 15.85 65.3411 -54.6985 + 47 16.0432 1226 5 0 14.648 65.2526 -55.85 + 47 273.033 1225 5 0 14.6125 65.25 -55.884 + 47 75.9135 818 4 1 -16.2558 63.2332 -84.45 + 47 151.861 817 4 1 -16.4501 63.2455 -84.6569 + 47 174.681 1216 4 0 -17.5719 63.3086 -85.85 + 47 77.5998 676 3 1 -44.6719 65.0098 -114.45 + 47 93.8356 675 3 1 -44.85 65.025 -114.628 + 47 18.5956 674 3 1 -45.05 65.0424 -114.829 + 47 172.419 1225 3 0 -46.0661 65.1332 -115.85 + 47 26.5497 525 2 1 -74.9582 67.5508 -144.45 + 47 77.0531 524 2 1 -75.0502 67.5639 -144.537 + 47 66.6454 523 2 1 -75.25 67.5936 -144.728 + 47 149.127 1238 2 0 -76.4364 67.7668 -145.85 + 47 16.1036 368 1 1 -106.497 72.206 -174.45 + 47 123.806 367 1 1 -106.55 72.2086 -174.497 + 47 109.63 366 1 1 -106.75 72.2186 -174.671 + 47 1.39219 365 1 1 -106.95 72.2298 -174.847 + 47 195.08 1261 1 0 -108.073 72.2935 -175.85 + 47 12.6384 196 0 1 -140.904 74.277 -204.45 + 47 105.714 195 0 1 -140.95 74.2836 -204.482 + 47 159.636 194 0 1 -141.15 74.3123 -204.62 + 47 297.527 193 0 1 -141.35 74.3416 -204.761 + 47 330.551 1272 0 0 -142.886 74.5593 -205.85 + 47 1.02782 800 4 1 -20.0473 63.0786 -84.85 + 47 46.8199 799 4 1 -20.05 63.0783 -84.8488 + 47 299.197 1213 4 0 -21.2726 62.7165 -85.85 + 47 93.81 1383 5 0 58.5948 96.8957 -56.25 + 47 151.326 1211 6 0 8.82207 62.3583 -26.25 + 47 80.3842 941 6 1 8.34389 62.2594 -24.85 + 47 58.7462 940 6 1 8.25 62.2391 -24.6218 + 47 25.0821 1051 7 0 60.6873 30.2751 3.75 + 47 252.68 1050 7 0 60.7252 30.2499 3.77107 + 47 62.5925 855 7 0 164.465 -8.86085 3.75 + 47 122.354 856 7 0 164.348 -8.84995 3.89285 + 47 55.5706 1717 7 1 163.675 -8.73011 5.15 + 47 123.776 1716 7 1 163.55 -8.69013 5.21521 + 47 270.426 1715 7 1 163.35 -8.55617 5.29352 +Number of digits in this event: 56 +Using G4ParticleGun... +Particle energy: 1.79893 LIN Particle: e- Event: 48 -Number of tracker hits in this event: 58 - 48 112.869 950 7 1 10.2254 148.087 5.55 - 48 90.363 1639 7 0 10.2208 148.089 4.15 - 48 462.05 950 6 1 10.1442 148.116 -24.45 - 48 125.43 1639 6 0 10.1418 148.11 -25.85 - 48 132.303 950 5 1 10.1361 148.039 -54.45 - 48 118.175 1639 5 0 10.1362 148.029 -55.85 - 48 111.417 950 4 1 10.1101 147.809 -84.45 - 48 111.632 1638 4 0 10.1139 147.797 -85.85 - 48 120.528 951 3 1 10.2572 147.511 -114.45 - 48 179.858 1636 3 0 10.2829 147.505 -115.85 - 48 133.158 953 2 1 10.8075 147.345 -144.45 - 48 230.251 1635 2 0 10.825 147.33 -145.85 - 48 131.375 955 1 1 11.1498 146.987 -174.45 - 48 135.229 1634 1 0 11.1729 146.967 -175.85 - 48 118.522 958 0 1 11.7165 146.581 -204.45 - 48 136.139 1632 0 0 11.7694 146.574 -205.85 - 48 221.319 1640 6 0 10.1659 148.164 -25.85 - 48 125.876 952 5 1 10.6321 148.682 -54.45 - 48 118.697 1643 5 0 10.628 148.79 -55.85 - 48 230.379 951 4 1 10.4348 150.924 -84.45 - 48 119.75 1654 4 0 10.3957 151.001 -85.85 - 48 217.325 946 3 1 9.29407 152.52 -114.45 - 48 153.393 1662 3 0 9.28308 152.583 -115.85 - 48 106.631 946 2 1 9.31568 153.717 -144.45 - 48 260.35 1668 2 0 9.31103 153.815 -145.85 - 48 101.793 945 1 1 9.1221 155.692 -174.45 - 48 306.835 1678 1 0 9.05424 155.85 -175.85 - 48 118.159 939 0 1 7.99357 158.774 -204.45 - 48 6.79921 1693 0 0 7.96546 158.947 -205.85 - 48 137.76 1694 0 0 7.96493 158.95 -205.878 - 48 266.928 952 4 1 10.45 150.932 -84.6758 - 48 280.235 1657 4 0 10.7824 151.632 -85.85 - 48 8.53019 1656 4 0 10.713 151.55 -86.0073 - 48 127.978 954 5 1 10.9007 149.307 -54.45 - 48 118.289 1646 5 0 10.8777 149.438 -55.85 - 48 150.589 1658 4 0 10.5382 151.9 -85.8508 - 48 172.66 945 3 1 9.20574 152.733 -114.45 - 48 111.761 1663 3 0 9.04043 152.775 -115.85 - 48 76.2869 927 2 1 5.487 153.631 -144.45 - 48 34.3218 926 2 1 5.44999 153.658 -144.738 - 48 56.1822 902 1 1 0.481961 156.44 -174.45 - 48 134.757 901 1 1 0.45 156.443 -174.59 - 48 105.136 1681 1 0 0.159041 156.471 -175.85 - 48 157.191 866 0 1 -6.7148 157.875 -204.45 - 48 120.134 1688 0 0 -7.11108 157.932 -205.85 - 48 49.4225 944 3 1 9.05 152.652 -114.791 - 48 65.3429 1659 3 0 8.38341 152.033 -115.85 - 48 123.054 1658 3 0 8.24139 151.95 -115.995 - 48 140.362 1657 3 0 7.92553 151.75 -115.949 - 48 22.3727 1656 3 0 7.82553 151.55 -115.868 - 48 110.76 935 3 1 7.2043 151.134 -114.85 - 48 65.3434 934 3 1 7.05 151.215 -114.753 - 48 288.415 1652 3 0 6.79822 150.697 -115.85 - 48 612.909 944 0 1 8.85449 170.186 -204.45 - 48 208.664 1751 0 0 8.87374 170.364 -205.85 - 48 252.042 1750 0 0 8.77135 170.253 -205.85 - 48 86.3659 1749 0 0 8.65188 170.15 -206.104 - 48 66.4626 943 0 1 8.84999 170.065 -204.642 -Number of digits in this event: 34 +Number of tracker hits in this event: 43 + 48 147.302 1499 9 1 120.052 52.4499 65.55 + 48 145.912 1161 9 0 120.054 52.4459 64.15 + 48 263.422 1499 8 1 120.098 52.3729 35.55 + 48 138.119 1161 8 0 120.097 52.3685 34.15 + 48 118.756 1499 7 1 120.103 52.2734 5.55 + 48 148.786 1161 7 0 120.102 52.2676 4.15 + 48 86.0664 1499 6 1 120.089 52.1423 -24.45 + 48 141.995 1160 6 0 120.089 52.1378 -25.85 + 48 122.813 1499 5 1 120.094 52.036 -54.45 + 48 155.267 1159 5 0 120.098 52.0301 -55.85 + 48 121.012 1500 4 1 120.19 51.9249 -84.45 + 48 130.238 1159 4 0 120.201 51.9287 -85.85 + 48 101.704 1501 3 1 120.415 51.9943 -114.45 + 48 134.343 1159 3 0 120.431 51.9998 -115.85 + 48 144.989 1502 2 1 120.719 52.1304 -144.45 + 48 322.271 1160 2 0 120.734 52.1395 -145.85 + 48 528.082 1504 1 1 121.038 52.3038 -174.45 + 48 367.567 1161 1 0 121.05 52.3089 -175.85 + 48 108.691 1505 0 1 121.268 52.3965 -204.45 + 48 305.674 1161 0 0 121.273 52.3981 -205.85 + 48 180.786 1160 1 0 121.063 52.2498 -176.085 + 48 118.794 1511 0 1 122.391 52.3481 -204.45 + 48 30.5758 1509 0 1 122.143 51.9492 -204.45 + 48 103.152 1510 0 1 122.15 51.9465 -204.559 + 48 132.736 1159 0 0 122.241 51.9097 -205.85 + 48 127.92 1498 0 1 119.937 51.6549 -204.45 + 48 104.608 1157 0 0 119.938 51.6338 -205.85 + 48 121.676 1499 0 1 119.95 51.6666 -204.564 + 48 114.822 1158 0 0 120.043 51.7236 -205.85 + 48 89.5643 1498 8 1 119.95 52.2501 35.3988 + 48 41.4961 1497 8 1 119.75 52.0361 35.2345 + 48 76.2634 1152 8 0 119.019 50.6425 34.15 + 48 83.5239 1151 8 0 118.903 50.45 33.9622 + 48 24.9616 1150 8 0 118.761 50.25 33.789 + 48 265.895 669 8 0 53.5824 -46.0888 33.75 + 48 108.488 668 8 0 53.5166 -46.25 33.8163 + 48 6.69851 667 8 0 53.4922 -46.4503 33.7595 + 48 15.4671 498 8 0 71.7573 -80.2927 33.75 + 48 86.2543 499 8 0 71.7832 -80.2495 33.7961 + 48 121.689 500 8 0 71.782 -80.05 33.9401 + 48 223.672 501 8 0 71.9968 -79.85 33.9662 + 48 101.147 483 8 0 64.6893 -83.3988 33.7502 + 48 250.072 670 8 0 53.8079 -46.05 33.8288 +Number of digits in this event: 27 Using G4ParticleGun... -Particle energy: 1.5614 LIN +Particle energy: 7.29728 LIN Particle: e- Event: 49 -Number of tracker hits in this event: 39 - 49 96.6148 1002 11 0 -81.721 20.6212 124.082 - 49 134.565 491 10 1 -81.7207 20.6131 95.55 - 49 142.525 1002 10 0 -81.7204 20.6124 94.15 - 49 132.6 491 9 1 -81.7051 20.5738 65.55 - 49 121.928 1002 9 0 -81.7094 20.5717 64.15 - 49 107.079 491 8 1 -81.8005 20.5056 35.55 - 49 97.2859 1002 8 0 -81.8233 20.5003 34.15 - 49 93.485 488 7 1 -82.2982 20.3578 5.55 - 49 127.476 1001 7 0 -82.3167 20.3519 4.15 - 49 139.181 486 6 1 -82.7111 20.2397 -24.45 - 49 131.182 1000 6 0 -82.7387 20.2299 -25.85 - 49 320.921 483 5 1 -83.2965 20.0346 -54.45 - 49 154.843 999 5 0 -83.3221 20.0349 -55.85 - 49 108.432 480 4 1 -83.8503 20.0585 -84.45 - 49 108.569 1000 4 0 -83.8649 20.0604 -85.85 - 49 299.375 479 3 1 -84.1634 20.0996 -114.45 - 49 272.609 1000 3 0 -84.1754 20.1123 -115.85 - 49 173.878 478 2 1 -84.422 20.3504 -144.45 - 49 231.54 1001 2 0 -84.4435 20.347 -145.85 - 49 104.871 475 1 1 -84.9014 20.301 -174.45 - 49 133.529 1001 1 0 -84.9255 20.3022 -175.85 - 49 124.352 473 0 1 -85.4304 20.3342 -204.45 - 49 121.724 1001 0 0 -85.4686 20.3421 -205.85 - 49 139.498 484 2 1 -83.214 20.4184 -144.45 - 49 183.584 492 1 1 -81.5854 20.6155 -174.45 - 49 106.386 1002 1 0 -81.5543 20.6114 -175.85 - 49 148.98 496 0 1 -80.6928 20.5818 -204.45 - 49 125.215 1004 0 0 -80.6521 20.888 -205.85 - 49 25.7319 478 3 1 -84.25 20.0704 -114.744 - 49 91.9841 999 3 0 -84.6671 19.8935 -115.85 - 49 48.5023 998 3 0 -84.7394 19.85 -116.077 - 49 123.098 438 2 1 -92.5339 9.70998 -144.45 - 49 130.19 946 2 0 -92.5713 9.3841 -145.85 - 49 111.762 433 1 1 -93.5351 5.8608 -174.45 - 49 128.779 928 1 0 -93.4209 5.78787 -175.85 - 49 191.942 582 4 1 -63.5254 8.74092 -84.85 - 49 91.8842 583 4 1 -63.45 8.72494 -84.7326 - 49 131.332 677 9 1 -44.6191 148.022 65.15 - 49 59.6315 676 9 1 -44.65 148.044 65.3811 -Number of digits in this event: 27 +Number of tracker hits in this event: 26 + 49 112.234 1547 9 1 129.571 -10.2814 65.55 + 49 102.567 848 9 0 129.571 -10.2813 64.15 + 49 215.527 1547 8 1 129.564 -10.277 35.55 + 49 105.962 848 8 0 129.564 -10.2756 34.15 + 49 129.083 1547 7 1 129.554 -10.2473 5.55 + 49 112.015 849 7 0 129.553 -10.2453 4.15 + 49 178.327 1546 6 1 129.543 -10.2059 -24.45 + 49 135.451 849 6 0 129.543 -10.2037 -25.85 + 49 111.356 1546 5 1 129.528 -10.1612 -54.45 + 49 207.068 849 5 0 129.527 -10.16 -55.85 + 49 137.188 1546 4 1 129.515 -10.1378 -84.45 + 49 106.562 849 4 0 129.513 -10.1377 -85.85 + 49 113.527 1546 3 1 129.487 -10.137 -114.45 + 49 98.5546 849 3 0 129.486 -10.1385 -115.85 + 49 105.861 1546 2 1 129.473 -10.1645 -144.45 + 49 140.643 849 2 0 129.473 -10.1662 -145.85 + 49 145.151 1546 1 1 129.467 -10.203 -174.45 + 49 117.27 849 1 0 129.466 -10.2033 -175.85 + 49 105.013 1546 0 1 129.458 -10.2054 -204.45 + 49 123.013 849 0 0 129.456 -10.2042 -205.85 + 49 4.1361 1701 10 1 160.35 -5.63177 95.4827 + 49 89.2136 742 9 0 8.24806 -31.45 63.8561 + 49 23.7153 1548 8 1 129.75 -10.2355 35.2046 + 49 134.112 849 8 0 130.512 -10.1481 34.15 + 49 158.791 781 8 0 119.245 -23.7401 33.75 + 49 143.263 780 8 0 119.243 -23.8501 34.0031 +Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 8.97479 LIN +Particle energy: 6.4912 LIN Particle: e- Event: 50 -Number of tracker hits in this event: 48 - 50 130.691 619 9 1 -56.1851 -109.921 65.55 - 50 119.759 351 9 0 -56.186 -109.921 64.15 - 50 146.155 619 8 1 -56.2031 -109.917 35.55 - 50 125.722 351 8 0 -56.2035 -109.919 34.15 - 50 129.582 619 7 1 -56.2142 -109.964 5.55 - 50 115.054 350 7 0 -56.2157 -109.966 4.15 - 50 112.387 619 6 1 -56.2486 -110.009 -24.45 - 50 116.953 350 6 0 -56.2488 -110.012 -25.85 - 50 133.749 618 5 1 -56.2584 -110.068 -54.45 - 50 116.798 350 5 0 -56.2588 -110.071 -55.85 - 50 122.785 618 4 1 -56.2667 -110.125 -84.45 - 50 96.9586 350 4 0 -56.2669 -110.126 -85.85 - 50 124.344 618 3 1 -56.2745 -110.162 -114.45 - 50 167.567 349 3 0 -56.2742 -110.163 -115.85 - 50 624.642 618 2 1 -56.2716 -110.182 -144.45 - 50 361.136 349 2 0 -56.2701 -110.183 -145.85 - 50 125.917 619 1 1 -56.2394 -110.214 -174.45 - 50 132.748 349 1 0 -56.2374 -110.214 -175.85 - 50 165.95 619 0 1 -56.1987 -110.205 -204.45 - 50 111.434 349 0 0 -56.1998 -110.208 -205.85 - 50 134.77 1778 4 0 118.456 175.75 -86.0572 - 50 4.32134 1777 4 0 118.877 175.75 -85.86 - 50 289.131 1491 4 1 118.498 174.646 -84.85 - 50 253.136 619 2 1 -56.25 -110.292 -144.657 - 50 110.122 348 2 0 -56.0812 -110.546 -145.85 - 50 156.452 347 2 0 -56.0783 -110.55 -145.871 - 50 73.6121 648 1 1 -50.3044 -116.613 -174.45 - 50 97.486 649 1 1 -50.25 -116.696 -174.611 - 50 127.208 313 1 0 -48.8641 -117.354 -175.85 - 50 63.5699 312 1 0 -48.5937 -117.55 -176.181 - 50 124.733 613 1 1 -57.3085 -112.45 -174.45 - 50 142.81 335 1 0 -57.1442 -112.971 -175.85 - 50 25.4714 625 0 1 -54.8781 -125.413 -204.45 - 50 86.0806 626 0 1 -54.85 -125.405 -204.53 - 50 109.541 273 0 0 -54.6849 -125.436 -205.85 - 50 92.3994 614 1 1 -57.0867 -108.862 -174.45 - 50 51.3819 615 1 1 -57.05 -109.028 -174.698 - 50 27.9536 351 1 0 -56.8232 -109.87 -175.85 - 50 83.0372 350 1 0 -56.8007 -109.95 -175.955 - 50 60.7877 636 0 1 -52.6761 -134.653 -204.45 - 50 169.671 635 0 1 -52.85 -134.789 -204.604 - 50 194.679 219 0 0 -53.3985 -136.26 -205.85 - 50 313.271 218 0 0 -53.4374 -136.35 -205.934 - 50 110.063 217 0 0 -53.5126 -136.55 -206.068 - 50 32.332 216 0 0 -53.7158 -136.75 -206.182 - 50 294.758 361 3 0 -106.024 -107.75 -116.241 - 50 59.3671 1392 11 1 98.6276 -180.088 125.15 - 50 60.7666 1610 13 1 142.15 -158.958 185.194 -Number of digits in this event: 26 -Using G4ParticleGun... -Particle energy: 8.26581 LIN +Number of tracker hits in this event: 168 + 50 135.724 1282 10 1 76.5514 -74.2626 95.55 + 50 136.369 528 10 0 76.5505 -74.2645 94.15 + 50 136.151 1282 9 1 76.5272 -74.3019 65.55 + 50 146.653 528 9 0 76.5259 -74.3033 64.15 + 50 109.043 1282 8 1 76.5008 -74.3301 35.55 + 50 109.141 528 8 0 76.4994 -74.3306 34.15 + 50 172.397 1282 7 1 76.468 -74.3367 5.55 + 50 127.175 528 7 0 76.4661 -74.3366 4.15 + 50 117.811 1281 6 1 76.4258 -74.3334 -24.45 + 50 114.828 528 6 0 76.4246 -74.3331 -25.85 + 50 344.548 1281 5 1 76.4011 -74.3246 -54.45 + 50 388.604 528 5 0 76.3996 -74.3253 -55.85 + 50 829.075 1281 4 1 76.3672 -74.3422 -84.45 + 50 228.673 528 4 0 76.3644 -74.3437 -85.85 + 50 134.215 1281 3 1 76.3057 -74.3707 -114.45 + 50 225.24 528 3 0 76.3023 -74.3724 -115.85 + 50 102.833 1280 2 1 76.2288 -74.4107 -144.45 + 50 362.449 528 2 0 76.225 -74.4135 -145.85 + 50 132.099 1280 1 1 76.1406 -74.4775 -174.45 + 50 107.712 527 1 0 76.1367 -74.4815 -175.85 + 50 313.553 1280 0 1 76.0593 -74.549 -204.45 + 50 254.152 527 0 0 76.0558 -74.5516 -205.85 + 50 32.5917 641 1 1 -51.6766 -157.504 -174.85 + 50 80.5396 1513 6 0 -41.1381 122.787 -26.25 + 50 258.004 1482 0 1 116.553 18.6382 -204.85 + 50 124.229 970 14 1 14.1737 -107.824 215.15 + 50 281.778 1281 2 1 76.2801 -74.3285 -144.45 + 50 120.274 1281 1 1 76.3967 -74.4165 -174.45 + 50 120.162 528 1 0 76.4108 -74.4279 -175.85 + 50 118.394 1283 0 1 76.6815 -74.7012 -204.45 + 50 115.142 526 0 0 76.6798 -74.7094 -205.85 + 50 163.984 245 10 0 143.65 -130.95 94.0572 + 50 306.911 1282 0 1 76.5064 -74.5149 -204.45 + 50 98.6192 520 0 0 76.3203 -75.851 -205.85 + 50 127.73 519 0 0 76.2743 -76.0501 -206.053 + 50 43.0699 518 0 0 76.2497 -76.2507 -206.204 + 50 42.4651 376 0 0 68.4167 -104.817 -206.249 + 50 78.8209 375 0 0 68.3982 -104.95 -206.14 + 50 23.8377 374 0 0 68.2744 -105.15 -205.915 + 50 80.6455 1237 0 1 67.505 -105.989 -204.85 + 50 106.721 1236 0 1 67.45 -106.063 -204.776 + 50 70.7028 1263 1 1 72.6646 -74.4697 -174.45 + 50 185.911 1262 1 1 72.65 -74.4929 -174.525 + 50 20.87 526 1 0 72.2953 -74.8318 -175.85 + 50 94.0955 525 1 0 72.2755 -74.85 -175.922 + 50 112.231 1225 0 1 65.2001 -82.6013 -204.45 + 50 73.2858 485 0 0 65.2697 -82.9903 -205.85 + 50 46.9108 484 0 0 65.2863 -83.05 -206.106 + 50 133.754 529 4 0 76.2578 -74.2343 -85.85 + 50 281.269 1272 3 1 74.4973 -72.5436 -114.45 + 50 162.162 536 3 0 74.8859 -72.6559 -115.85 + 50 5.02865 1314 2 1 83.0374 -74.9457 -144.45 + 50 120.093 1315 2 1 83.05 -74.9507 -144.465 + 50 59.5969 1316 2 1 83.25 -75.0322 -144.699 + 50 172.661 522 2 0 84.22 -75.4522 -145.85 + 50 68.3575 1436 1 1 107.427 -85.8549 -174.451 + 50 64.7606 1437 1 1 107.55 -85.9259 -174.65 + 50 89.4326 468 1 0 108.312 -86.365 -175.85 + 50 60.9702 467 1 0 108.458 -86.4501 -176.085 + 50 76.0587 1524 0 1 125.061 -96.5254 -204.45 + 50 276.512 1525 0 1 125.15 -96.5887 -204.589 + 50 185.642 414 0 0 125.983 -97.1592 -205.85 + 50 28.6095 133 0 0 84.5761 -153.35 -206.176 + 50 49.688 6 3 0 107.482 -178.84 -115.85 + 50 78.0826 1281 7 1 76.4499 -74.3476 5.4661 + 50 63.6092 1280 7 1 76.2498 -74.4023 5.30046 + 50 41.2164 1279 7 1 76.05 -74.3512 5.18634 + 50 57.0653 533 7 0 74.2238 -73.334 4.1499 + 50 109.337 534 7 0 74.1094 -73.2498 4.06337 + 50 113.17 535 7 0 73.8413 -73.05 3.94988 + 50 162.691 536 7 0 73.4675 -72.8497 3.87763 + 50 94.3168 537 7 0 73.0142 -72.6498 3.80906 + 50 61.4595 1582 7 0 -111.93 136.591 3.75 + 50 46.9831 1583 7 0 -112.005 136.75 3.79477 + 50 58.5133 1584 7 0 -112.076 136.95 3.84826 + 50 77.5253 1585 7 0 -112.162 137.15 3.86239 + 50 75.7351 1586 7 0 -112.281 137.35 3.87337 + 50 55.5665 1587 7 0 -112.373 137.55 3.83366 + 50 68.4727 1588 7 0 -112.451 137.75 3.82296 + 50 289.807 1589 7 0 -112.422 137.95 3.82549 + 50 217.884 1590 7 0 -112.123 138.15 3.95308 + 50 57.0637 348 7 1 -110.492 139.034 5.15 + 50 61.532 349 7 1 -110.35 139.143 5.28354 + 50 86.5897 350 7 1 -110.15 139.15 5.42713 + 50 86.2442 351 7 1 -109.95 139.073 5.39422 + 50 65.4473 352 7 1 -109.75 139.088 5.2742 + 50 25.0446 370 7 1 -106.018 138.557 5.15006 + 50 382.408 371 7 1 -105.95 138.585 5.19951 + 50 209.259 1591 7 0 -108.059 138.35 3.96434 + 50 116.657 527 4 0 76.3571 -74.4821 -85.85 + 50 121.711 1282 3 1 76.5479 -74.9495 -114.45 + 50 208.758 524 3 0 76.6565 -75.0511 -115.85 + 50 6.62402 1294 2 1 79.0448 -76.9527 -144.451 + 50 229.564 1295 2 1 79.05 -76.9552 -144.48 + 50 115.887 514 2 0 79.313 -77.0781 -145.85 + 50 384.953 1325 1 1 85.1019 -79.5022 -174.45 + 50 227.678 501 1 0 85.2314 -79.6545 -175.85 + 50 122.32 1341 0 1 88.2799 -83.2132 -204.45 + 50 73.6941 482 0 0 88.3017 -83.565 -205.85 + 50 25.7334 481 0 0 88.3052 -83.65 -206.165 + 50 124.706 1326 1 1 85.2501 -79.595 -174.62 + 50 67.0116 1327 1 1 85.4509 -79.7733 -174.74 + 50 57.7642 1328 1 1 85.65 -79.9112 -174.703 + 50 194.529 1329 1 1 85.85 -80.0012 -174.674 + 50 90.6338 1330 1 1 86.05 -80.1568 -174.64 + 50 84.8013 1331 1 1 86.25 -80.4183 -174.621 + 50 79.5484 1332 1 1 86.4501 -80.6108 -174.591 + 50 536.914 1333 1 1 86.65 -80.7902 -174.534 + 50 143.935 1334 1 1 86.85 -80.923 -174.467 + 50 8.41716 492 1 0 85.5944 -81.6396 -175.85 + 50 306.785 491 1 0 85.5714 -81.65 -175.872 + 50 298.957 448 1 0 83.0154 -90.4989 -176.25 + 50 181.992 447 1 0 83.057 -90.55 -176.191 + 50 46.692 1450 1 1 110.164 -129.787 -174.45 + 50 33.1327 502 1 0 85.4054 -79.6151 -175.85 + 50 89.2443 500 1 0 85.4111 -79.8502 -176.063 + 50 53.3739 499 1 0 85.3868 -80.051 -176.133 + 50 20.085 498 1 0 85.3378 -80.2504 -176.224 + 50 60.8301 49 1 0 8.25304 -170.256 -176.25 + 50 98.9792 48 1 0 8.15828 -170.35 -176.202 + 50 63.6427 47 1 0 8.22569 -170.55 -175.986 + 50 18.7654 46 1 0 8.28771 -170.75 -175.891 + 50 114.797 942 1 1 8.58998 -172.013 -174.85 + 50 210.289 943 1 1 8.65 -172.343 -174.664 + 50 117.014 944 1 1 8.85001 -172.971 -174.473 + 50 187.095 945 1 1 9.05007 -173.207 -174.504 + 50 90.0585 946 1 1 9.25 -173.34 -174.649 + 50 3.4725 30 1 0 9.4647 -174.138 -175.85 + 50 272.957 29 1 0 9.46711 -174.15 -175.867 + 50 84.7684 414 2 0 82.9632 -97.3454 -146.25 + 50 108.163 526 4 0 76.2182 -74.8155 -85.85 + 50 258.39 525 4 0 76.2069 -74.85 -85.9818 + 50 153.271 1273 3 1 74.7461 -77.0935 -114.45 + 50 68.8378 1271 3 1 74.45 -77.0118 -114.661 + 50 0.0941279 1270 3 1 74.25 -77.0149 -114.849 + 50 17.6155 514 3 0 73.0904 -77.2419 -115.85 + 50 174.554 513 3 0 73.0316 -77.25 -115.905 + 50 276.218 585 3 0 119.885 -63.0292 -116.25 + 50 44.1704 586 3 0 120.53 -62.85 -116.172 + 50 327.179 1282 5 1 76.532 -74.4238 -54.45 + 50 18.4885 1292 4 1 78.6376 -75.6086 -84.45 + 50 107.917 1293 4 1 78.6502 -75.608 -84.501 + 50 143.876 522 4 0 78.9309 -75.5981 -85.85 + 50 130.336 1325 3 1 85.0982 -74.8089 -114.45 + 50 4.68784 527 3 0 85.3324 -74.4554 -115.85 + 50 139.752 1349 2 1 90.05 -66.4783 -144.627 + 50 40.5306 572 2 0 89.8348 -65.5458 -145.85 + 50 91.6897 573 2 0 89.816 -65.45 -145.975 + 50 6.48398 574 2 0 89.7779 -65.25 -146.232 + 50 67.5094 695 1 0 86.3596 -40.9575 -175.851 + 50 84.0343 696 1 0 86.4171 -40.85 -176.031 + 50 122.499 1370 0 1 94.1585 -24.5795 -204.45 + 50 1.02889 778 0 0 94.5895 -24.2509 -205.85 + 50 132.525 779 0 0 94.5908 -24.25 -205.854 + 50 311.685 533 5 0 76.2113 -73.3906 -55.85 + 50 15.3895 529 5 0 75.8013 -74.0621 -55.85 + 50 231.237 530 5 0 75.7811 -74.05 -55.8791 + 50 98.873 1284 4 1 77.0021 -74.8957 -84.4501 + 50 127.34 537 3 0 74.8274 -72.5643 -115.85 + 50 108.863 1291 2 1 78.4105 -69.9289 -144.45 + 50 11.2267 1292 2 1 78.45 -69.9013 -144.794 + 50 114.274 551 2 0 78.5576 -69.8153 -145.85 + 50 124.022 1306 1 1 81.3877 -66.807 -174.45 + 50 112.372 565 1 0 81.5251 -66.9314 -175.85 + 50 113.28 1320 0 1 84.0726 -69.6325 -204.45 + 50 122.544 552 0 0 84.2469 -69.6108 -205.85 + 50 300.763 1484 7 1 116.986 -150.792 5.15 + 50 2.81739 1430 5 1 106.279 -129.565 -54.45 +Number of digits in this event: 72 +Using G4ParticleGun... +Particle energy: 1.91507 LIN Particle: e- Event: 51 -Number of tracker hits in this event: 40 - 51 116.885 780 11 1 -23.8737 -66.534 125.55 - 51 123.437 567 11 0 -23.8739 -66.5346 124.15 - 51 161.363 780 10 1 -23.8772 -66.5476 95.55 - 51 202.894 567 10 0 -23.8782 -66.548 94.15 - 51 156.904 780 9 1 -23.8993 -66.5474 65.55 - 51 224.303 567 9 0 -23.9 -66.5465 64.15 - 51 154.995 780 8 1 -23.9222 -66.5272 35.55 - 51 133.573 567 8 0 -23.9215 -66.528 34.15 - 51 168.905 780 7 1 -23.9185 -66.5431 5.55 - 51 189.286 567 7 0 -23.9166 -66.5454 4.15 - 51 104.921 780 6 1 -23.8735 -66.5918 -24.45 - 51 134.728 567 6 0 -23.8666 -66.5926 -25.85 - 51 118.744 781 5 1 -23.718 -66.6205 -54.45 - 51 108.937 567 5 0 -23.7092 -66.6183 -55.85 - 51 103.212 782 4 1 -23.5342 -66.5821 -84.45 - 51 166.277 567 4 0 -23.5283 -66.5795 -85.85 - 51 141.415 783 3 1 -23.3932 -66.5558 -114.45 - 51 547.612 567 3 0 -23.3834 -66.5499 -115.85 - 51 129.191 784 2 1 -23.1992 -66.4193 -144.45 - 51 107.309 568 2 0 -23.195 -66.4152 -145.85 - 51 133.641 784 1 1 -23.1016 -66.328 -174.45 - 51 128.986 568 1 0 -23.0983 -66.3238 -175.85 - 51 125.574 785 0 1 -23.0229 -66.2381 -204.45 - 51 135.014 569 0 0 -23.0168 -66.2361 -205.85 - 51 67.598 633 5 0 -29.9444 -53.3904 -56.25 - 51 50.7388 634 5 0 -29.95 -53.2499 -56.1891 - 51 239.72 785 5 0 -61.6943 -22.9828 -56.2499 - 51 495.1 780 3 1 -23.8968 -66.6246 -114.45 - 51 113.369 779 2 1 -24.1301 -66.6898 -144.45 - 51 109.182 566 2 0 -24.1364 -66.6993 -145.85 - 51 116.181 778 1 1 -24.2741 -66.8861 -174.45 - 51 123.601 565 1 0 -24.2858 -66.8943 -175.85 - 51 139.059 777 0 1 -24.5213 -67.0548 -204.45 - 51 128.361 564 0 0 -24.5338 -67.0684 -205.85 - 51 310.468 780 2 1 -24.0202 -66.608 -144.45 - 51 104.418 567 2 0 -24.0197 -66.6108 -145.85 - 51 121.333 780 1 1 -24.0219 -66.6725 -174.45 - 51 93.0515 566 1 0 -24.0194 -66.6688 -175.85 - 51 100.927 780 0 1 -23.9493 -66.5781 -204.45 - 51 103.82 567 0 0 -23.9447 -66.5718 -205.85 -Number of digits in this event: 28 +Number of tracker hits in this event: 32 + 51 189.359 269 9 1 -126.311 -1.12544 65.55 + 51 139.577 894 9 0 -126.306 -1.1251 64.15 + 51 129.262 269 8 1 -126.219 -1.10984 35.55 + 51 125.484 894 8 0 -126.209 -1.10549 34.15 + 51 270.412 270 7 1 -125.995 -1.00589 5.55 + 51 117.804 895 7 0 -125.987 -1.00448 4.15 + 51 149.782 271 6 1 -125.817 -0.962542 -24.45 + 51 96.0649 895 6 0 -125.809 -0.961526 -25.85 + 51 128.246 272 5 1 -125.623 -0.928065 -54.45 + 51 160.24 895 5 0 -125.614 -0.924291 -55.85 + 51 164.944 273 4 1 -125.47 -0.83485 -84.45 + 51 125.549 896 4 0 -125.465 -0.830788 -85.85 + 51 186.153 274 3 1 -125.31 -0.733202 -114.45 + 51 303.567 896 3 0 -124.83 -0.780073 -115.85 + 51 280.523 331 2 1 -113.837 -3.3485 -144.45 + 51 154.299 879 2 0 -113.767 -4.05644 -145.85 + 51 13.6604 878 2 0 -113.746 -4.25 -146.228 + 51 101.016 338 1 1 -112.425 -18.4782 -174.45 + 51 1.36247 339 1 1 -112.35 -18.5657 -174.838 + 51 72.3831 806 1 0 -112.138 -18.7792 -175.85 + 51 24.7684 805 1 0 -112.09 -18.85 -176.173 + 51 140.217 334 0 1 -113.252 -28.5392 -204.45 + 51 128.222 755 0 0 -113.33 -28.9542 -205.85 + 51 12.6874 754 0 0 -113.364 -29.05 -206.197 + 51 377.042 269 7 1 -126.15 -1.03228 5.15191 + 51 48.1148 271 7 1 -125.95 -1.06234 5.52423 + 51 50.4849 272 7 1 -125.75 -1.04914 5.4648 + 51 73.3171 273 7 1 -125.55 -1.03341 5.39423 + 51 47.669 274 7 1 -125.35 -1.05461 5.24771 + 51 18.2294 892 7 0 -125.008 -1.62399 4.14944 + 51 124.12 891 7 0 -124.995 -1.65007 4.09547 + 51 32.2942 806 0 0 -114.846 -18.65 -205.997 +Number of digits in this event: 20 Using G4ParticleGun... -Particle energy: 6.32058 LIN +Particle energy: 6.9634 LIN Particle: e- Event: 52 -Number of tracker hits in this event: 96 - 52 131.204 1195 10 1 59.1187 70.1386 95.55 - 52 129.956 1250 10 0 59.118 70.1395 94.15 - 52 114.319 1195 9 1 59.1074 70.163 65.55 - 52 149.943 1250 9 0 59.1065 70.1645 64.15 - 52 112.996 1195 8 1 59.0863 70.1968 35.55 - 52 111.893 1250 8 0 59.0861 70.1992 34.15 - 52 365.352 1195 7 1 59.0765 70.242 5.55 - 52 349.708 1250 7 0 59.0755 70.2434 4.15 - 52 118.595 1194 6 1 59.0447 70.2696 -24.45 - 52 233.246 1251 6 0 59.0419 70.2708 -25.85 - 52 124.831 1194 5 1 58.9782 70.2915 -54.45 - 52 222.133 1251 5 0 58.9769 70.2944 -55.85 - 52 144.324 1194 4 1 58.9308 70.3274 -84.45 - 52 115.443 1251 4 0 58.9134 70.2902 -85.85 - 52 106.587 1194 3 1 58.9119 70.406 -114.45 - 52 109.436 1251 3 0 59.0452 70.3737 -115.85 - 52 104.585 1205 2 1 61.125 69.674 -144.45 - 52 29.4627 1206 2 1 61.2501 69.5481 -144.78 - 52 132.621 1245 2 0 61.6864 69.1637 -145.85 - 52 34.4811 1244 2 0 61.8094 69.05 -146.144 - 52 144.909 1267 1 1 73.5239 57.432 -174.45 - 52 92.2832 1182 1 0 73.6728 56.5687 -175.85 - 52 67.6605 1181 1 0 73.6898 56.45 -176.033 - 52 170.942 1273 0 1 74.7733 36.7258 -204.45 - 52 94.4157 1272 0 1 74.6498 36.4768 -204.777 - 52 65.6305 1077 0 0 74.1582 35.5837 -205.85 - 52 86.1646 1076 0 0 74.0933 35.45 -205.994 - 52 11.7768 1075 0 0 74.0161 35.25 -206.223 - 52 76.263 1271 0 1 74.45 36.8237 -204.611 - 52 59.3367 1270 0 1 74.2499 36.8538 -204.676 - 52 79.763 1269 0 1 74.05 36.8582 -204.717 - 52 61.7586 1268 0 1 73.85 36.7599 -204.673 - 52 64.0087 1267 0 1 73.65 36.5721 -204.645 - 52 102.57 1266 0 1 73.4496 36.4465 -204.666 - 52 3.29764 1265 0 1 73.25 36.2305 -204.842 - 52 33.7092 1073 0 0 71.3276 34.6952 -205.85 - 52 99.171 1072 0 0 71.2487 34.65 -205.871 - 52 64.258 1071 0 0 71.1561 34.45 -206.043 - 52 284.883 1194 2 1 58.935 70.3981 -144.45 - 52 294.475 1251 2 0 58.9363 70.3983 -145.85 - 52 243.274 1194 1 1 58.9699 70.4387 -174.45 - 52 250.5 1251 1 0 58.9791 70.4328 -175.85 - 52 134.632 1195 0 1 59.124 70.3159 -204.45 - 52 117.896 1251 0 0 59.1328 70.3103 -205.85 - 52 31.6333 1670 4 0 165.032 154.165 -86.25 - 52 140.661 1669 4 0 165 154.15 -86.1756 - 52 135.234 1194 0 1 58.9739 70.4861 -204.45 - 52 139.404 1252 0 0 58.9757 70.4889 -205.85 - 52 183.885 1256 0 0 112.697 71.2754 -206.25 - 52 13.1051 1728 1 0 64.1788 165.95 -176.25 - 52 29.0914 1788 1 0 93.1112 177.791 -176.25 - 52 90.7979 1252 1 0 58.8939 70.5017 -175.85 - 52 200.542 1195 6 1 59.092 70.2908 -24.45 - 52 163.629 1195 5 1 59.106 70.3123 -54.45 - 52 316.659 1195 4 1 59.1055 70.1942 -84.45 - 52 96.1883 1250 4 0 59.1077 70.1857 -85.85 - 52 129.072 1195 3 1 59.1542 70.021 -114.45 - 52 130.716 1249 3 0 59.157 70.0152 -115.85 - 52 138.026 1195 2 1 59.2216 69.8829 -144.45 - 52 111.362 1249 2 0 59.2299 69.8819 -145.85 - 52 207.464 1196 1 1 59.4437 69.8677 -174.45 - 52 125.304 1249 1 0 59.4523 69.8646 -175.85 - 52 172.237 1197 0 1 59.6297 69.8368 -204.45 - 52 125.389 1248 0 0 59.6353 69.8302 -205.85 - 52 148.198 1031 0 0 112.687 26.45 -206.241 - 52 0.217537 32 5 0 -55.6654 -173.55 -55.9418 - 52 169.312 228 7 0 -75.8837 -134.499 3.75053 - 52 296.474 518 7 1 -76.299 -134.541 5.15004 - 52 88.6603 1723 3 0 -70.5461 164.75 -116.24 - 52 110.822 1193 6 1 58.7762 69.2833 -24.45 - 52 125.241 1243 6 0 58.9498 68.7883 -25.85 - 52 8.85952 1242 6 0 58.9959 68.65 -26.2203 - 52 128.296 1207 5 1 61.5542 58.5903 -54.45 - 52 32.9748 1206 5 1 61.45 58.5866 -54.7223 - 52 116.384 1192 5 0 61.0448 58.5543 -55.8502 - 52 111.235 1161 4 1 52.2587 58.2593 -84.4501 - 52 32.1655 1162 4 1 52.45 58.4332 -84.7806 - 52 244.933 1193 4 0 53.5216 58.789 -85.85 - 52 188.953 1194 4 0 53.7023 58.8502 -86.0488 - 52 136.168 1289 4 0 97.6376 77.9137 -86.25 - 52 64.2684 1290 4 0 97.712 78.05 -85.9217 - 52 23.0759 1291 4 0 97.7463 78.25 -85.8652 - 52 355.263 1391 4 1 98.534 82.3332 -84.8497 - 52 41.826 1392 4 1 98.55 82.4052 -84.8377 - 52 188.494 1413 0 0 34.2039 102.862 -205.909 - 52 30.0665 1412 0 0 34.217 102.75 -206.045 - 52 127.312 1696 10 0 -95.4659 159.456 93.75 - 52 145.459 1414 0 0 34.153 102.95 -205.979 - 52 82.512 1415 0 0 33.7861 103.15 -206.049 - 52 98.4096 1416 0 0 33.6315 103.35 -206.111 - 52 46.9987 1516 0 0 48.3836 123.396 -206.25 - 52 78.9185 441 0 1 -91.75 30.1431 -204.661 - 52 232.816 1199 0 1 59.9655 47.1375 -204.45 - 52 105.493 1134 0 0 60.1831 46.938 -205.85 - 52 15.7394 1133 0 0 60.0133 46.6695 -205.85 - 52 131.545 1132 0 0 60.0122 46.65 -205.9 -Number of digits in this event: 48 +Number of tracker hits in this event: 45 + 52 236.157 1039 10 1 27.9748 -106.858 95.55 + 52 233.554 366 10 0 27.9745 -106.857 94.15 + 52 181.466 1039 9 1 27.9668 -106.848 65.55 + 52 137.513 366 9 0 27.9656 -106.846 64.15 + 52 110.225 1039 8 1 27.9397 -106.816 35.55 + 52 143.322 366 8 0 27.9386 -106.816 34.15 + 52 153.993 1039 7 1 27.9141 -106.826 5.55 + 52 103.954 366 7 0 27.9142 -106.826 4.15 + 52 105.347 1039 6 1 27.9203 -106.831 -24.45 + 52 122.146 366 6 0 27.9197 -106.835 -25.85 + 52 119.043 1039 5 1 27.9122 -106.921 -54.45 + 52 124.477 366 5 0 27.9151 -106.927 -55.85 + 52 113.825 1039 4 1 27.9785 -107.032 -84.45 + 52 139.172 365 4 0 27.9819 -107.038 -85.85 + 52 111.691 1040 3 1 28.0521 -107.15 -114.45 + 52 188.503 364 3 0 28.0561 -107.154 -115.85 + 52 143.466 1040 2 1 28.1436 -107.235 -144.45 + 52 115.746 364 2 0 28.1407 -107.242 -145.85 + 52 126.024 1040 1 1 28.0745 -107.424 -174.45 + 52 195.265 363 1 0 28.0778 -107.432 -175.85 + 52 187.426 1040 0 1 28.1611 -107.598 -204.45 + 52 113.892 362 0 0 28.1606 -107.601 -205.85 + 52 230.967 328 4 0 76.6228 -114.484 -86.25 + 52 17.4482 329 4 0 76.6183 -114.35 -85.8934 + 52 240.16 358 1 0 26.8708 -108.453 -175.85 + 52 27.1944 1034 1 1 26.8576 -108.472 -174.85 + 52 173.866 1038 1 1 27.658 -106.909 -174.85 + 52 69.5078 1246 1 1 69.25 -111.472 -174.822 + 52 128.482 1325 0 1 85.05 -92.1413 -204.651 + 52 358.917 1038 2 1 27.8257 -106.839 -144.45 + 52 253.485 366 2 0 27.8209 -106.828 -145.85 + 52 327.631 1039 1 1 27.8856 -106.643 -174.45 + 52 192.712 367 1 0 27.9008 -106.624 -175.85 + 52 358.158 1041 0 1 28.2656 -106.21 -204.45 + 52 132.164 369 0 0 28.275 -106.218 -205.85 + 52 91.9378 1037 2 1 27.65 -106.789 -144.78 + 52 216.119 1036 2 1 27.45 -106.786 -144.76 + 52 289.161 1035 2 1 27.25 -106.737 -144.595 + 52 103.782 366 1 0 27.9372 -106.825 -175.85 + 52 129.351 365 0 0 28.2724 -107.006 -205.85 + 52 130.528 926 0 1 5.37187 -47.5254 -204.45 + 52 238.198 925 0 1 5.25 -47.6434 -204.464 + 52 6.86485 370 0 0 29.0978 -106.15 -205.852 + 52 43.8362 1037 0 1 27.4601 -104.198 -204.85 + 52 73.3097 1036 0 1 27.45 -104.17 -204.813 +Number of digits in this event: 31 Using G4ParticleGun... -Particle energy: 9.51442 LIN +Particle energy: 6.23527 LIN Particle: e- Event: 53 -Number of tracker hits in this event: 55 - 53 108.79 1115 11 1 43.0611 -8.40182 125.55 - 53 196.884 858 11 0 43.0615 -8.40201 124.15 - 53 115.239 1115 10 1 43.0704 -8.40743 95.55 - 53 95.0173 858 10 0 43.0702 -8.40706 94.15 - 53 126.577 1115 9 1 43.063 -8.40022 65.55 - 53 133.787 858 9 0 43.063 -8.39965 64.15 - 53 134.989 1115 8 1 43.0607 -8.38251 35.55 - 53 138.204 858 8 0 43.0619 -8.38041 34.15 - 53 129.086 1115 7 1 43.0885 -8.33585 5.55 - 53 137.959 858 7 0 43.0895 -8.33384 4.15 - 53 222.827 1115 6 1 43.1131 -8.29534 -24.45 - 53 103.869 858 6 0 43.1145 -8.29317 -25.85 - 53 114.872 1115 5 1 43.1485 -8.25312 -54.45 - 53 134.398 858 5 0 43.1505 -8.25272 -55.85 - 53 120.714 1115 4 1 43.1984 -8.24624 -84.45 - 53 106.405 859 4 0 43.1996 -8.24664 -85.85 - 53 102.455 1115 3 1 43.2251 -8.25348 -114.45 - 53 116.437 858 3 0 43.2273 -8.25328 -115.85 - 53 535.506 1116 2 1 43.2744 -8.25364 -144.45 - 53 238.683 858 2 0 43.275 -8.25541 -145.85 - 53 110.333 1116 1 1 43.2901 -8.29537 -174.45 - 53 187.367 858 1 0 43.2908 -8.29752 -175.85 - 53 252.595 1116 0 1 43.2885 -8.33863 -204.45 - 53 170.406 858 0 0 43.2915 -8.34103 -205.85 - 53 129.988 1181 6 0 -51.018 56.2809 -26.25 - 53 7.92435 1515 5 1 123.176 39.1461 -54.85 - 53 159.902 857 2 0 43.246 -8.50464 -145.85 - 53 148.227 1106 1 1 41.3382 -13.7521 -174.45 - 53 122.113 829 1 0 41.2066 -14.1474 -175.85 - 53 12.9779 828 1 0 41.1735 -14.2501 -176.22 - 53 163.803 1090 0 1 38.0871 -22.1651 -204.45 - 53 110.423 786 0 0 37.9764 -22.7157 -205.85 - 53 6.484 785 0 0 37.9537 -22.85 -206.22 - 53 114.042 1117 1 1 43.4641 -8.6744 -174.45 - 53 155.961 856 1 0 43.4584 -8.68753 -175.85 - 53 129.851 855 0 0 43.2874 -8.86659 -205.85 - 53 4.53775 858 4 0 43.1809 -8.25 -86.2397 - 53 155.848 974 4 0 -98.5099 15.0082 -86.25 - 53 1.42716 627 4 0 -137.501 -54.546 -86.25 - 53 24.1849 697 4 0 -172.055 -40.6388 -86.2499 - 53 196.959 401 5 0 92.6618 -99.7879 -56.25 - 53 299.914 1115 1 1 43.1653 -8.46887 -174.45 - 53 239.049 857 1 0 43.186 -8.47011 -175.85 - 53 124.691 1117 0 1 43.6194 -8.4826 -204.45 - 53 122.704 857 0 0 43.6445 -8.48275 -205.85 - 53 78.3225 888 0 0 113.005 -2.41181 -206.25 - 53 247.692 1707 13 1 161.55 36.5516 185.262 - 53 81.7121 663 0 0 84.1582 -47.3995 -206.25 - 53 24.4525 1130 0 1 46.2382 -8.32749 -204.45 - 53 78.1605 1131 0 1 46.25 -8.31486 -204.561 - 53 92.979 859 0 0 46.3308 -8.21366 -205.85 - 53 125.845 1296 4 1 79.45 -25.3712 -84.8154 - 53 63.6869 1114 11 1 43.05 -8.40583 125.244 - 53 90.4444 857 11 0 42.3055 -8.45 124.048 - 53 362.242 856 11 0 42.2464 -8.65 123.902 -Number of digits in this event: 33 +Number of tracker hits in this event: 49 + 53 105.237 718 11 1 -36.2853 69.4225 125.55 + 53 106.223 1246 11 0 -36.2858 69.4234 124.15 + 53 131.038 718 10 1 -36.2956 69.4401 95.55 + 53 119.333 1246 10 0 -36.2971 69.4428 94.15 + 53 116.596 718 9 1 -36.3325 69.4954 65.55 + 53 141.106 1247 9 0 -36.3342 69.4961 64.15 + 53 107.714 718 8 1 -36.3699 69.5175 35.55 + 53 152.843 1247 8 0 -36.3719 69.5178 34.15 + 53 235.758 718 7 1 -36.4163 69.5238 5.55 + 53 125.709 1247 7 0 -36.4182 69.5234 4.15 + 53 103.853 717 6 1 -36.4622 69.5123 -24.45 + 53 106.436 1247 6 0 -36.4646 69.5124 -25.85 + 53 123.027 717 5 1 -36.5103 69.5157 -54.45 + 53 113.428 1247 5 0 -36.5133 69.5135 -55.85 + 53 286.252 717 4 1 -36.5739 69.4663 -84.45 + 53 114.945 1247 4 0 -36.5772 69.4643 -85.85 + 53 130.181 717 3 1 -36.6458 69.4244 -114.45 + 53 108.673 1246 3 0 -36.6508 69.4224 -115.85 + 53 134.422 716 2 1 -36.7485 69.3803 -144.45 + 53 118.939 1246 2 0 -36.7533 69.3782 -145.85 + 53 221.092 715 1 1 -36.8514 69.332 -174.45 + 53 154.743 1246 1 0 -36.8565 69.3299 -175.85 + 53 301.027 715 0 1 -36.9647 69.2868 -204.45 + 53 120.173 1246 0 0 -36.9714 69.2863 -205.85 + 53 37.136 1415 12 0 120.44 103.329 153.75 + 53 120.272 1416 12 0 120.516 103.35 153.83 + 53 56.0389 1417 12 0 120.806 103.55 153.94 + 53 86.5588 1418 12 0 120.863 103.75 153.955 + 53 142.749 1419 12 0 120.815 103.95 154.021 + 53 180.497 1420 12 0 120.499 104.15 153.88 + 53 136.527 1497 12 1 119.707 103.274 155.15 + 53 306.22 1498 12 1 119.75 103.203 155.319 + 53 146.339 714 0 1 -37.05 69.3043 -204.714 + 53 76.2673 716 1 1 -36.7995 69.3535 -174.45 + 53 145.635 1247 1 0 -37.344 69.5885 -175.85 + 53 27.8918 1248 1 0 -37.4898 69.65 -176.18 + 53 158.1 656 0 1 -48.8267 74.8641 -204.45 + 53 52.6925 1276 0 0 -48.5686 75.4258 -205.85 + 53 98.6349 1277 0 0 -48.559 75.45 -205.912 + 53 70.3837 717 1 1 -36.65 69.3457 -174.579 + 53 156.563 718 1 1 -36.45 69.3373 -174.746 + 53 247.261 1243 1 0 -35.4023 68.7954 -175.85 + 53 99.6269 1242 1 0 -35.2478 68.65 -176.045 + 53 38.2593 1241 1 0 -35.1798 68.45 -176.189 + 53 69.3982 1244 1 0 -35.2738 68.85 -176.234 + 53 222.98 719 1 1 -36.25 69.4243 -174.695 + 53 155.083 716 0 1 -36.7477 69.5654 -204.45 + 53 110.892 1248 0 0 -36.8085 69.7145 -205.85 + 53 128.072 718 4 1 -36.3819 69.5 -84.45 +Number of digits in this event: 29 Using G4ParticleGun... -Particle energy: 5.37973 LIN +Particle energy: 4.47256 LIN Particle: e- Event: 54 -Number of tracker hits in this event: 61 - 54 183.369 495 10 1 -80.8828 45.5056 95.55 - 54 183.181 1127 10 0 -80.8829 45.5078 94.15 - 54 128.664 495 9 1 -80.8883 45.5531 65.55 - 54 123.818 1127 9 0 -80.8888 45.5564 64.15 - 54 131.055 495 8 1 -80.8972 45.6294 35.55 - 54 124.887 1127 8 0 -80.8969 45.6339 34.15 - 54 103.126 495 7 1 -80.8896 45.721 5.55 - 54 134.342 1128 7 0 -80.89 45.7262 4.15 - 54 113.941 495 6 1 -80.901 45.8264 -24.45 - 54 118.99 1128 6 0 -80.9003 45.8319 -25.85 - 54 424.076 495 5 1 -80.8917 45.9438 -54.45 - 54 362.24 1129 5 0 -80.8901 45.9492 -55.85 - 54 109.033 495 4 1 -80.8571 46.0595 -84.45 - 54 317.978 1130 4 0 -80.8563 46.0667 -85.85 - 54 110.066 496 3 1 -80.8442 46.2185 -114.45 - 54 130.293 1130 3 0 -80.8454 46.2265 -115.85 - 54 113.411 495 2 1 -80.8764 46.3992 -144.45 - 54 120.249 1131 2 0 -80.8792 46.4055 -145.85 - 54 442.698 495 1 1 -80.9332 46.5446 -174.45 - 54 138.39 1132 1 0 -80.9166 46.5776 -175.85 - 54 236.081 496 0 1 -80.8379 46.9946 -204.45 - 54 52.3962 495 0 1 -80.85 46.9916 -204.68 - 54 98.1765 1134 0 0 -80.9028 46.9794 -205.85 - 54 258.284 494 1 1 -81.0501 46.5855 -174.54 - 54 27.2338 1276 11 0 -98.7146 75.305 123.75 - 54 24.6901 663 4 0 -7.33804 -47.25 -86.0893 - 54 155.009 862 4 1 -7.59716 -47.793 -84.8494 - 54 60.9527 863 4 1 -7.45 -48.0353 -84.7658 - 54 47.9712 657 4 0 -7.02999 -48.6034 -85.85 - 54 141.881 656 4 0 -7.00122 -48.65 -85.9352 - 54 176.683 655 4 0 -6.93024 -48.85 -86.0652 - 54 30.6918 1501 0 0 -106.613 120.413 -206.25 - 54 121.531 491 4 1 -81.7869 46.1526 -84.45 - 54 119.04 487 3 1 -82.4782 46.7428 -114.45 - 54 186.942 1133 3 0 -82.5148 46.791 -115.85 - 54 109.883 483 2 1 -83.2612 47.654 -144.45 - 54 129.761 1138 2 0 -83.293 47.6925 -145.85 - 54 137.438 480 1 1 -83.9745 48.3718 -174.45 - 54 110.832 1141 1 0 -84.0207 48.3857 -175.85 - 54 154.327 475 0 1 -84.943 48.6435 -204.45 - 54 119.148 1143 0 0 -84.9864 48.6703 -205.85 - 54 109.098 480 4 1 -84.0223 51.8035 -84.45 - 54 1.09945 1159 4 0 -84.0182 52.0491 -85.85 - 54 146.103 1160 4 0 -84.0182 52.05 -85.8553 - 54 55.2599 481 3 1 -83.6636 56.0289 -114.45 - 54 66.4814 482 3 1 -83.65 56.0847 -114.636 - 54 25.4571 1181 3 0 -83.5603 56.4265 -115.85 - 54 97.657 1182 3 0 -83.5541 56.45 -115.936 - 54 177.805 493 2 1 -81.4396 65.1312 -144.45 - 54 130.104 1227 2 0 -81.3706 65.4538 -145.85 - 54 125.95 501 1 1 -79.734 71.8403 -174.45 - 54 14.5932 502 1 1 -79.65 71.9356 -174.799 - 54 8.17228 1260 1 0 -79.3965 72.2394 -175.85 - 54 109.473 1261 1 0 -79.3879 72.25 -175.886 - 54 179.828 538 0 1 -72.3774 80.7204 -204.45 - 54 192.473 1304 0 0 -71.9629 80.9538 -205.85 - 54 308.294 1129 1 0 -80.8704 45.8834 -175.85 - 54 94.6117 497 0 1 -80.6428 45.8309 -204.45 - 54 100.719 1128 0 0 -80.6806 45.8463 -205.85 - 54 14.3426 1129 0 0 -80.6898 45.85 -206.189 - 54 96.9345 1130 0 0 -80.7707 46.0861 -205.85 -Number of digits in this event: 34 -Using G4ParticleGun... -Particle energy: 2.59684 LIN +Number of tracker hits in this event: 166 + 54 548.555 998 11 1 19.7241 -70.2506 125.55 + 54 573.348 548 11 0 19.7227 -70.2521 124.15 + 54 136.736 998 10 1 19.6931 -70.2819 95.55 + 54 94.8438 548 10 0 19.6924 -70.2833 94.15 + 54 122.131 998 9 1 19.6764 -70.3101 65.55 + 54 146.624 548 9 0 19.6752 -70.3124 64.15 + 54 40.0026 998 8 1 19.6503 -70.3599 35.55 + 54 98.9174 997 8 1 19.65 -70.3601 35.4175 + 54 210.432 548 8 0 19.6475 -70.362 34.15 + 54 111.129 997 7 1 19.5781 -70.4216 5.55 + 54 110.056 548 7 0 19.5731 -70.4236 4.15 + 54 347.631 997 6 1 19.4619 -70.4637 -24.45 + 54 377.459 547 6 0 19.4213 -70.4658 -25.85 + 54 131.426 992 5 1 18.5963 -70.4274 -54.45 + 54 111.532 548 5 0 18.5171 -70.4499 -55.85 + 54 225.551 547 5 0 18.5167 -70.45 -55.8557 + 54 133.308 983 4 1 16.8127 -70.8888 -84.45 + 54 110.755 545 4 0 16.7043 -70.9126 -85.85 + 54 161.329 972 3 1 14.4959 -71.4662 -114.45 + 54 115.145 542 3 0 14.3844 -71.4759 -115.85 + 54 90.3822 960 2 1 12.2479 -71.6621 -144.45 + 54 111.46 541 2 0 12.1624 -71.6573 -145.85 + 54 177.849 951 1 1 10.3345 -71.4908 -174.45 + 54 141.551 542 1 0 10.2181 -71.4644 -175.85 + 54 93.8126 939 0 1 7.868 -70.7142 -204.45 + 54 15.8211 938 0 1 7.85 -70.7045 -204.811 + 54 129.486 546 0 0 7.80079 -70.6796 -205.85 + 54 250.919 996 5 1 19.4029 -70.5505 -54.45 + 54 134.652 996 4 1 19.3826 -70.657 -84.45 + 54 136.035 546 4 0 19.3827 -70.6601 -85.85 + 54 412.473 996 3 1 19.3855 -70.7228 -114.45 + 54 382.933 546 3 0 19.387 -70.7286 -115.85 + 54 132.061 996 2 1 19.4054 -70.8462 -144.45 + 54 256.018 546 2 0 19.4075 -70.8473 -145.85 + 54 116.256 997 1 1 19.4778 -70.9179 -174.45 + 54 128.38 545 1 0 19.4844 -70.9253 -175.85 + 54 178.432 997 0 1 19.6345 -71.0913 -204.45 + 54 152.128 544 0 0 19.6395 -71.1032 -205.85 + 54 107.662 995 4 1 19.1327 -70.101 -84.45 + 54 105.95 549 4 0 19.1266 -70.1042 -85.85 + 54 112.572 995 3 1 19.1242 -70.1706 -114.45 + 54 109.212 549 3 0 19.0974 -70.1938 -115.85 + 54 169.358 991 2 1 18.4094 -70.5637 -144.45 + 54 404.496 547 2 0 18.33 -70.5545 -145.85 + 54 105.006 983 1 1 16.8298 -70.4757 -174.45 + 54 303.594 547 1 0 16.7975 -70.486 -175.85 + 54 153.012 981 0 1 16.2605 -70.4943 -204.45 + 54 286.914 547 0 0 16.252 -70.4717 -205.85 + 54 11.7538 1688 7 1 157.872 165.403 5.15 + 54 42.505 1605 8 1 141.314 175.168 35.55 + 54 363.183 1606 8 1 141.35 175.099 35.4751 + 54 101.62 1689 7 1 157.95 165.487 5.25869 + 54 309.4 1690 7 1 158.15 165.464 5.22339 + 54 109.239 1025 10 1 25.0841 -72.5919 95.15 + 54 140.96 533 10 0 24.2027 -73.3046 94.15 + 54 58.116 1339 5 1 88.05 -8.80225 -54.6098 + 54 11.7138 554 0 0 19.0674 -69.1751 -206.229 + 54 23.5566 870 2 0 -60.9156 -6.05 -146.012 + 54 114.01 847 11 1 -10.5985 -14.4914 125.15 + 54 165.512 593 2 1 -61.3333 -6.39948 -144.85 + 54 371.301 995 2 1 19.1012 -70.9905 -144.45 + 54 104.23 545 2 0 19.1028 -71.0185 -145.85 + 54 118.917 995 1 1 19.121 -71.63 -174.45 + 54 161.316 541 1 0 19.1385 -71.6576 -175.85 + 54 226.752 996 0 1 19.4298 -72.1196 -204.45 + 54 118.273 539 0 0 19.4573 -72.1544 -205.85 + 54 383.076 994 2 1 19.05 -70.7813 -144.815 + 54 69.2694 923 3 1 4.77947 -58.0721 -114.85 + 54 159.846 994 1 1 18.957 -70.5793 -174.45 + 54 192.844 994 0 1 18.8656 -70.9948 -204.45 + 54 135.518 545 0 0 18.8616 -71.0194 -205.85 + 54 52.6631 1523 3 1 124.854 133.027 -114.85 + 54 133.204 547 3 0 19.2829 -70.65 -115.903 + 54 94.2954 1093 1 0 38.6163 38.65 -176.094 + 54 11.782 1047 10 1 29.6433 -74.5909 95.5486 + 54 133.366 1048 10 1 29.65 -74.5988 95.519 + 54 141.443 525 10 0 29.9625 -74.9262 94.15 + 54 134.958 1082 9 1 36.4745 -82.8828 65.55 + 54 172.28 1081 9 1 36.45 -82.9167 65.4867 + 54 18.1961 481 9 0 35.9133 -83.8182 64.15 + 54 106.649 480 9 0 35.8953 -83.85 64.1038 + 54 29.551 479 9 0 35.7962 -84.05 63.825 + 54 86.9789 1015 8 1 23.1258 -107.004 35.5499 + 54 88.3815 1014 8 1 23.0498 -107.073 35.421 + 54 70.2944 362 8 0 22.356 -107.65 34.15 + 54 69.4883 361 8 0 22.2368 -107.75 33.9538 + 54 151.279 936 7 1 7.43194 -117.976 5.54988 + 54 8.22808 935 7 1 7.25 -118.044 5.1789 + 54 111.258 309 7 0 6.82791 -118.302 4.14915 + 54 65.4588 308 7 0 6.74909 -118.35 3.92334 + 54 4.88214 882 6 1 -3.64221 -120.572 -24.4506 + 54 168.815 881 6 1 -3.65 -120.574 -24.4826 + 54 113.033 298 6 0 -3.87548 -120.462 -25.85 + 54 136.969 873 5 1 -5.31396 -116.089 -54.45 + 54 93.4001 321 5 0 -5.85684 -115.81 -55.85 + 54 64.2958 322 5 0 -5.97862 -115.75 -56.1181 + 54 22.7645 621 5 0 -140.906 -55.6713 -56.25 + 54 96.0215 622 5 0 -140.974 -55.65 -56.2301 + 54 150.877 623 5 0 -141.182 -55.45 -56.107 + 54 76.5281 624 5 0 -141.326 -55.25 -55.9403 + 54 60.7703 625 5 0 -141.431 -55.0498 -55.9075 + 54 52.6029 626 5 0 -141.486 -54.85 -55.9693 + 54 52.7714 627 5 0 -141.522 -54.6499 -56.0247 + 54 75.3871 628 5 0 -141.562 -54.45 -56.0397 + 54 88.2656 629 5 0 -141.566 -54.25 -55.9761 + 54 88.7325 192 5 1 -141.615 -53.1839 -54.85 + 54 146.91 193 5 1 -141.55 -53.1139 -54.7172 + 54 106.058 190 5 1 -141.966 -56.3116 -54.85 + 54 148.966 1083 9 1 36.65 -83.0301 65.4517 + 54 108.476 1000 10 1 20.1087 -69.5656 95.55 + 54 114.519 552 10 0 20.2395 -69.5992 94.15 + 54 160.052 1010 9 1 22.1953 -71.5429 65.55 + 54 112.592 542 9 0 22.2513 -71.62 64.1498 + 54 201.923 1024 8 1 25.0176 -72.3358 35.55 + 54 73.9308 533 8 0 24.7392 -73.3189 34.15 + 54 72.6472 532 8 0 24.7075 -73.45 33.9745 + 54 129.959 1027 7 1 25.5441 -98.7577 5.54985 + 54 23.1132 409 7 0 25.776 -98.1811 4.15 + 54 86.9494 410 7 0 25.7854 -98.15 4.08 + 54 86.2325 525 7 0 -11.0661 -74.9286 3.75014 + 54 172.215 526 7 0 -11.3158 -74.8499 3.98706 + 54 8.17164 527 7 0 -11.4942 -74.65 4.13869 + 54 156.365 836 7 1 -12.7172 -72.7847 5.1502 + 54 138.479 835 7 1 -12.85 -72.323 5.42597 + 54 68.2907 834 7 1 -13.05 -72.1503 5.38915 + 54 42.2556 833 7 1 -13.25 -72.0282 5.25588 + 54 279.178 538 7 0 -13.4996 -72.3249 4.15 + 54 481.676 561 7 0 -34.7353 -67.7641 3.75 + 54 56.8381 1100 4 1 40.165 -50.8122 -84.4503 + 54 85.3747 1101 4 1 40.2504 -50.8303 -84.5965 + 54 175.222 645 4 0 41.315 -50.993 -85.85 + 54 275.581 1331 3 1 86.4009 -49.3432 -114.45 + 54 32.982 665 3 0 86.4533 -46.9741 -115.85 + 54 56.5263 666 3 0 86.4435 -46.85 -115.908 + 54 67.4649 667 3 0 86.4417 -46.6497 -115.974 + 54 59.3893 668 3 0 86.4767 -46.45 -116.026 + 54 72.9677 669 3 0 86.5722 -46.25 -116.07 + 54 62.7537 670 3 0 86.6848 -46.05 -116.1 + 54 74.3081 671 3 0 86.806 -45.85 -116.119 + 54 71.7976 672 3 0 86.9804 -45.65 -116.133 + 54 71.4203 673 3 0 87.1311 -45.4498 -116.111 + 54 93.3972 674 3 0 87.2372 -45.2498 -116.074 + 54 55.5961 675 3 0 87.3652 -45.05 -116.016 + 54 70.6339 676 3 0 87.4976 -44.8499 -115.946 + 54 96.3403 1344 3 1 88.872 -43.3698 -114.85 + 54 95.73 1345 3 1 89.0502 -43.1852 -114.721 + 54 81.8124 1346 3 1 89.25 -42.9904 -114.58 + 54 47.0351 1347 3 1 89.4502 -42.8311 -114.493 + 54 64.9818 767 4 0 45.1897 -26.5495 -86.25 + 54 88.8798 768 4 0 45.019 -26.4499 -86.1332 + 54 73.4174 769 4 0 44.7945 -26.25 -86.0678 + 54 203.746 770 4 0 44.576 -26.0499 -86.041 + 54 59.6528 771 4 0 44.3462 -25.85 -85.9588 + 54 119.117 1118 4 1 43.7854 -24.6785 -84.85 + 54 52.4555 1117 4 1 43.65 -24.4741 -84.6034 + 54 307.806 837 7 0 37.4594 -12.6156 3.75016 + 54 162.648 836 7 0 37.4666 -12.65 3.83373 + 54 59.7113 838 7 0 37.9266 -12.45 4.07154 + 54 92.9584 929 6 1 5.97418 -88.9038 -24.45 + 54 62.9804 930 6 1 6.05038 -88.7606 -24.697 + 54 94.9217 455 6 0 6.78493 -89.0032 -25.8507 + 54 46.002 454 6 0 7.05161 -89.0502 -26.1195 + 54 277.535 998 1 1 19.6758 -70.3401 -174.45 + 54 231.114 548 1 0 19.883 -70.2712 -175.851 + 54 115.023 1020 0 1 24.1604 -69.78 -204.45 + 54 130.142 552 0 0 24.0625 -69.645 -205.85 +Number of digits in this event: 71 +Using G4ParticleGun... +Particle energy: 1.74606 LIN Particle: e- Event: 55 -Number of tracker hits in this event: 23 - 55 120.012 346 10 1 -110.77 3.29146 95.55 - 55 177.474 916 10 0 -110.768 3.29186 94.15 - 55 128.547 347 9 1 -110.709 3.28211 65.55 - 55 126.827 916 9 0 -110.705 3.27905 64.15 - 55 111.104 347 8 1 -110.642 3.20051 35.55 - 55 152.044 915 8 0 -110.64 3.19548 34.15 - 55 132.71 347 7 1 -110.582 3.12731 5.55 - 55 110.867 915 7 0 -110.582 3.12958 4.15 - 55 176.851 347 6 1 -110.596 3.17297 -24.45 - 55 176.072 915 6 0 -110.597 3.17638 -25.85 - 55 130.934 347 5 1 -110.634 3.25325 -54.45 - 55 92.3421 916 5 0 -110.636 3.26022 -55.85 - 55 120.832 347 4 1 -110.68 3.40474 -84.45 - 55 108.193 916 4 0 -110.68 3.41317 -85.85 - 55 143.923 347 3 1 -110.662 3.56813 -114.45 - 55 126.734 917 3 0 -110.658 3.58528 -115.85 - 55 156.01 347 2 1 -110.561 3.88397 -144.45 - 55 147.738 919 2 0 -110.583 3.92014 -145.85 - 55 119.046 345 1 1 -110.99 4.6222 -174.45 - 55 110.357 922 1 0 -111.004 4.64219 -175.85 - 55 238.808 344 0 1 -111.31 4.98752 -204.45 - 55 121.885 924 0 0 -111.311 4.99495 -205.85 - 55 110.045 679 1 1 -44.25 144.541 -174.648 -Number of digits in this event: 19 +Number of tracker hits in this event: 48 + 55 134.706 1301 10 1 80.3335 45.6704 95.55 + 55 182.091 1128 10 0 80.3357 45.6686 94.15 + 55 172.901 1301 9 1 80.3962 45.6517 65.55 + 55 110.613 1128 9 0 80.3972 45.6541 64.15 + 55 139.323 1301 8 1 80.4293 45.7092 35.55 + 55 185.552 1128 8 0 80.4306 45.7106 34.15 + 55 177.637 1302 7 1 80.4608 45.7456 5.55 + 55 111.133 1128 7 0 80.4626 45.7507 4.15 + 55 99.4187 1302 6 1 80.5727 45.8861 -24.45 + 55 278.145 1129 6 0 80.5837 45.8951 -25.85 + 55 128.024 1303 5 1 80.8107 46.0773 -54.45 + 55 139.796 1130 5 0 80.8269 46.0828 -55.85 + 55 140.829 1305 4 1 81.119 46.212 -84.45 + 55 179.16 1130 4 0 81.1399 46.214 -85.85 + 55 148.407 1307 3 1 81.5499 46.2206 -114.45 + 55 148.855 1130 3 0 81.5745 46.2192 -115.85 + 55 123.366 1310 2 1 82.0769 46.2203 -144.45 + 55 254.979 1130 2 0 82.0923 46.2137 -145.85 + 55 126.024 1311 1 1 82.4075 46.0509 -174.45 + 55 93.9156 1129 1 0 82.4225 46.0461 -175.85 + 55 118.078 1313 0 1 82.7472 45.943 -204.45 + 55 176.26 1129 0 0 82.7745 45.9407 -205.85 + 55 248.614 1306 3 1 81.4294 46.316 -114.45 + 55 229.892 1131 3 0 81.4627 46.3186 -115.85 + 55 115.351 1308 2 1 81.8479 46.3994 -144.45 + 55 162.039 1131 2 0 81.842 46.3912 -145.85 + 55 313.796 1307 1 1 81.5414 46.2464 -174.45 + 55 137.615 1130 1 0 81.5392 46.1716 -175.85 + 55 419.643 1305 0 1 81.2353 44.6726 -204.451 + 55 211.288 1123 0 0 81.1927 44.6677 -205.85 + 55 110.321 1122 0 0 81.1982 44.5441 -205.85 + 55 136.775 1313 2 1 82.7364 46.2084 -144.45 + 55 26.1744 1320 1 1 84.2397 44.9962 -174.45 + 55 122.064 1321 1 1 84.25 44.9892 -174.54 + 55 156.513 1124 1 0 84.4187 44.9049 -175.85 + 55 248.636 1339 0 1 87.8839 43.3205 -204.45 + 55 115.821 1114 0 0 88.1498 43.032 -205.85 + 55 101.575 1128 6 0 80.4333 45.8499 -26.0599 + 55 5.26767 1312 6 0 63.3364 82.6385 -26.25 + 55 185.573 1313 6 0 63.3363 82.65 -26.2383 + 55 95.0812 1314 6 0 63.1623 82.8502 -25.9789 + 55 184.74 1212 6 1 62.5315 83.362 -24.8494 + 55 287.034 1171 6 0 64.858 54.3558 -26.25 + 55 9.61612 1172 6 0 64.8373 54.45 -26.0108 + 55 203.757 1126 9 0 78.712 45.344 64.15 + 55 100.017 1125 9 0 78.2902 45.2498 63.9086 + 55 266.256 1124 9 0 78.2614 45.0499 64.0591 + 55 53.0649 1043 7 0 74.2217 28.7713 3.75 +Number of digits in this event: 34 Using G4ParticleGun... -Particle energy: 9.96299 LIN +Particle energy: 7.25011 LIN Particle: e- Event: 56 -Number of tracker hits in this event: 35 - 56 114.459 300 8 1 -120.068 65.8766 35.55 - 56 106.462 1229 8 0 -120.067 65.8765 34.15 - 56 309.214 300 7 1 -120.061 65.8718 5.55 - 56 115.47 1229 7 0 -120.061 65.8722 4.15 - 56 163.281 300 6 1 -120.053 65.8785 -24.45 - 56 139.293 1229 6 0 -120.054 65.8782 -25.85 - 56 110.544 300 5 1 -120.064 65.8747 -54.45 - 56 118.958 1229 5 0 -120.064 65.8744 -55.85 - 56 150.356 300 4 1 -120.074 65.8665 -84.45 - 56 139.91 1229 4 0 -120.074 65.8652 -85.85 - 56 219.204 300 3 1 -120.091 65.8382 -114.45 - 56 140.213 1228 3 0 -120.091 65.8371 -115.85 - 56 244.202 300 2 1 -120.109 65.8158 -144.45 - 56 309.597 1228 2 0 -120.112 65.8143 -145.85 - 56 119.402 299 1 1 -120.158 65.7859 -174.45 - 56 98.9433 1228 1 0 -120.16 65.7848 -175.85 - 56 129.045 299 0 1 -120.217 65.766 -204.45 - 56 150.694 1228 0 0 -120.22 65.7659 -205.85 - 56 97.6687 301 2 1 -119.95 65.7764 -144.634 - 56 83.5642 302 2 1 -119.75 65.549 -144.761 - 56 61.8174 303 2 1 -119.55 65.3715 -144.798 - 56 108.077 304 2 1 -119.35 65.3357 -144.809 - 56 65.5697 305 2 1 -119.15 65.2085 -144.618 - 56 288.301 306 2 1 -118.95 65.1628 -144.596 - 56 242.611 1234 3 0 -120.412 66.8826 -115.85 - 56 86.9031 1228 6 0 -120.086 65.8499 -26.2139 - 56 46.1485 1169 6 0 -142.051 53.8982 -26.25 - 56 11.6688 1052 6 0 -52.023 30.5184 -26.25 - 56 63.7268 1635 3 0 -106.215 147.15 -116.063 - 56 31.9477 299 7 1 -120.15 65.5781 5.23169 - 56 24.5126 1223 7 0 -121.589 64.6977 4.15 - 56 65.1711 1222 7 0 -121.666 64.65 4.12494 - 56 38.3466 259 7 1 -128.176 61.8517 5.15 - 56 343.844 1204 7 0 -131.479 60.9552 4.15 - 56 316.629 1205 7 0 -131.986 61.05 3.92392 -Number of digits in this event: 17 +Number of tracker hits in this event: 41 + 56 142.519 1483 9 1 116.832 42.5261 65.55 + 56 131.441 1112 9 0 116.832 42.5262 64.15 + 56 129.951 1483 8 1 116.837 42.5311 35.55 + 56 140.702 1112 8 0 116.835 42.531 34.15 + 56 124.775 1483 7 1 116.805 42.5204 5.55 + 56 100.583 1112 7 0 116.806 42.5212 4.15 + 56 117.933 1483 6 1 116.812 42.5425 -24.45 + 56 158.765 1112 6 0 116.814 42.5437 -25.85 + 56 109.655 1483 5 1 116.855 42.5593 -54.45 + 56 173.692 1112 5 0 116.859 42.5587 -55.85 + 56 229.496 1483 4 1 116.934 42.5388 -84.45 + 56 159.871 1112 4 0 116.938 42.5388 -85.85 + 56 138.585 1484 3 1 117.028 42.5384 -114.45 + 56 161.408 1112 3 0 117.035 42.5388 -115.85 + 56 1052.77 1485 2 1 117.171 42.5473 -144.45 + 56 399.764 1112 2 0 117.176 42.5465 -145.85 + 56 575.007 1485 1 1 117.281 42.523 -174.45 + 56 750.352 1112 1 0 117.285 42.5229 -175.85 + 56 236.093 1486 0 1 117.388 42.5133 -204.45 + 56 278.818 1112 0 0 117.393 42.5143 -205.85 + 56 142.345 1005 1 0 117.625 21.155 -176.25 + 56 245.934 1137 1 0 150.297 47.5064 -176.25 + 56 138.874 1486 1 1 117.431 42.2619 -174.45 + 56 279.219 1111 1 0 117.471 42.2537 -175.85 + 56 117.662 1490 0 1 118.321 42.0712 -204.45 + 56 139.504 1110 0 0 118.343 42.0989 -205.85 + 56 91.3221 1056 1 1 31.45 79.0275 -174.603 + 56 22.1508 1486 2 1 117.35 42.5301 -144.761 + 56 56.9927 1113 2 0 117.659 42.8092 -145.85 + 56 58.9806 1114 2 0 117.618 42.85 -146.044 + 56 139.691 1485 0 1 117.326 42.5306 -204.45 + 56 3.51499 758 2 0 51.9224 -28.4398 -146.25 + 56 42.6668 961 2 0 -109.525 12.4412 -146.25 + 56 43.2254 1487 0 1 117.566 44.516 -204.45 + 56 44.7179 1122 0 0 117.3 44.6345 -205.85 + 56 68.3298 1123 0 0 117.267 44.65 -206.013 + 56 58.6982 1113 1 0 117.216 42.65 -176.05 + 56 152.223 1479 0 1 116.078 44.7758 -204.45 + 56 140.023 1124 0 0 115.949 44.9449 -205.85 + 56 14.7097 1693 0 0 96.8808 158.95 -206.062 + 56 119.603 870 1 0 106.675 -5.97388 -176.25 +Number of digits in this event: 27 Using G4ParticleGun... -Particle energy: 1.19738 LIN +Particle energy: 1.78372 LIN Particle: e- Event: 57 -Number of tracker hits in this event: 96 - 57 234.407 1280 10 0 87.6291 76.1548 94.15 - 57 104.376 1338 9 1 87.6525 76.1725 65.55 - 57 105.455 1280 9 0 87.6549 76.1755 64.15 - 57 113.598 1338 8 1 87.721 76.2259 35.55 - 57 130.675 1280 8 0 87.7223 76.2155 34.15 - 57 267.827 1338 7 1 87.7609 76.0051 5.55 - 57 124.724 1279 7 0 87.7595 75.9855 4.15 - 57 422.32 1338 6 1 87.7441 75.5796 -24.45 - 57 146.966 1277 6 0 87.7373 75.5448 -25.85 - 57 164.266 1337 5 1 87.6195 74.7663 -54.45 - 57 127.86 1273 5 0 87.6166 74.7336 -55.85 - 57 216.41 1337 4 1 87.5505 74.0911 -84.45 - 57 135.869 1270 4 0 87.5451 74.0628 -85.85 - 57 113.354 1336 3 1 87.4339 73.4905 -114.45 - 57 126.061 1266 3 0 87.4302 73.4467 -115.85 - 57 144.407 1336 2 1 87.3546 72.5683 -144.45 - 57 132.017 1262 2 0 87.3553 72.5437 -145.85 - 57 134.865 1336 1 1 87.3851 72.0186 -174.45 - 57 244.576 1259 1 0 87.4032 72.0036 -175.85 - 57 162.236 1338 0 1 87.7649 71.6958 -204.45 - 57 95.3081 1258 0 0 87.7786 71.6806 -205.85 - 57 28.6095 1267 0 0 99.8292 73.5012 -206.25 - 57 93.6854 1488 6 0 -111.049 117.886 -26.25 - 57 88.1411 1255 0 0 87.4686 71.115 -205.85 - 57 55.684 1134 0 0 91.6803 46.9835 -206.25 - 57 39.9518 1133 0 0 91.6176 46.85 -206.206 - 57 127.574 926 0 0 -74.9928 5.32307 -206.25 - 57 76.3066 925 0 0 -75.1861 5.24996 -206.225 - 57 103.922 787 0 0 -106.994 -22.6031 -206.25 - 57 129.715 786 0 0 -106.982 -22.65 -206.178 - 57 59.2905 1338 4 1 87.6502 74.2078 -84.7148 - 57 92.1668 1273 4 0 87.9514 74.6688 -85.85 - 57 71.9344 1382 4 0 77.9014 96.6052 -86.25 - 57 71.3633 1383 4 0 77.9164 96.75 -86.1564 - 57 56.631 1384 4 0 77.924 96.95 -86.0118 - 57 508.843 1287 4 1 77.4948 98.2724 -84.8499 - 57 287.51 1286 4 1 77.45 98.7847 -84.4941 - 57 29.7935 1404 4 0 77.0813 101.074 -85.85 - 57 22.2618 1405 4 0 77.0664 101.15 -85.8789 - 57 23.3659 1290 4 1 78.2093 102.659 -84.8497 - 57 26.2689 1291 4 1 78.25 102.694 -84.8366 - 57 8.61862 1421 4 0 79.123 104.538 -85.85 - 57 59.2654 1422 4 0 79.127 104.55 -85.8574 - 57 59.7947 1323 4 1 84.7994 112.254 -84.85 - 57 309.94 1324 4 1 84.85 112.301 -84.83 - 57 12.2003 1325 4 1 85.05 112.291 -84.6404 - 57 48.1408 1338 5 1 87.6668 74.9777 -54.45 - 57 81.2249 1270 5 0 87.2095 74.1554 -55.8501 - 57 103.492 1269 5 0 87.133 74.05 -56.0789 - 57 175.271 1278 6 0 87.588 75.7377 -25.85 - 57 140.49 1332 5 1 86.5352 75.6718 -54.45 - 57 124.585 1331 5 1 86.45 75.8304 -54.6381 - 57 49.3343 1283 5 0 86.0188 76.7525 -55.85 - 57 125.842 1284 5 0 85.9652 76.85 -55.987 - 57 86.8022 1258 4 1 71.7579 95.1505 -84.45 - 57 144.166 1257 4 1 71.65 95.2406 -84.6388 - 57 48.4534 1378 4 0 71.2031 95.8716 -85.8503 - 57 79.4538 1379 4 0 71.1668 95.95 -85.9899 - 57 128.452 1216 3 1 63.3104 112.323 -114.45 - 57 115.113 1460 3 0 63.6934 112.324 -115.85 - 57 3.98719 1461 3 0 63.7881 112.35 -116.233 - 57 8.83453 1241 2 1 68.2648 115.452 -144.45 - 57 63.7903 1240 2 1 68.25 115.451 -144.46 - 57 74.3927 1239 2 1 68.05 115.434 -144.578 - 57 115.725 1238 2 1 67.8498 115.421 -144.702 - 57 39.8668 1237 2 1 67.65 115.406 -144.78 - 57 154.976 1475 2 0 64.8396 115.184 -145.85 - 57 153.44 1474 2 0 64.5881 115.15 -145.935 - 57 112.753 1384 2 0 42.267 97.0617 -146.25 - 57 173.976 1109 2 1 41.9854 97.0186 -144.85 - 57 156.023 1110 2 1 42.05 97.4971 -144.562 - 57 17.9513 1111 2 1 42.25 97.7432 -144.82 - 57 93.5526 1381 2 0 46.147 96.5435 -145.85 - 57 44.6901 1142 2 1 48.5248 96.1668 -144.85 - 57 63.6383 1143 2 1 48.65 96.1279 -144.827 - 57 72.5417 1144 2 1 48.85 96.0823 -144.796 - 57 88.4774 1145 2 1 49.05 96.1364 -144.739 - 57 64.3326 1146 2 1 49.25 96.2886 -144.565 - 57 56.3344 1279 6 0 87.9439 75.85 -26.0516 - 57 199.72 1359 5 1 92.0435 79.3613 -54.4502 - 57 219.089 1296 5 0 92.4268 79.4153 -55.85 - 57 135.989 1408 4 1 101.845 81.5918 -84.4502 - 57 100.749 1307 4 0 102.07 81.6355 -85.85 - 57 8.12223 1308 4 0 102.128 81.65 -86.22 - 57 130.406 1430 3 1 106.264 83.4512 -114.45 - 57 118.42 1317 3 0 106.53 83.5454 -115.85 - 57 130.602 1462 2 1 112.687 84.0945 -144.45 - 57 109.264 1319 2 0 112.785 83.996 -145.85 - 57 125.793 1478 1 1 115.756 84.174 -174.45 - 57 98.2321 1320 1 0 115.995 84.0643 -175.85 - 57 58.7646 1319 1 0 116.032 84.05 -176.063 - 57 94.2608 1499 0 1 120.11 82.1541 -204.45 - 57 28.1602 1500 0 1 120.15 82.0838 -204.749 - 57 131.109 1308 0 0 120.308 81.8217 -205.85 - 57 45.9577 1358 5 1 91.9363 78.9854 -54.85 - 57 122.62 1297 5 0 92.0039 79.5007 -55.85 -Number of digits in this event: 41 -Using G4ParticleGun... -Particle energy: 7.75315 LIN +Number of tracker hits in this event: 74 + 57 112.164 1262 10 1 72.4668 -86.1464 95.55 + 57 179.309 469 10 0 72.4703 -86.1456 94.15 + 57 108.742 1262 9 1 72.5469 -86.136 65.55 + 57 102.712 469 9 0 72.548 -86.1304 64.15 + 57 138.676 1262 8 1 72.5795 -85.9961 35.55 + 57 140.1 470 8 0 72.5774 -85.9891 34.15 + 57 174.379 1262 7 1 72.5467 -85.8419 5.55 + 57 115.317 471 7 0 72.5512 -85.837 4.15 + 57 131.549 1262 6 1 72.6462 -85.7326 -24.45 + 57 228.434 471 6 0 72.6445 -85.7274 -25.85 + 57 223.078 1262 5 1 72.5462 -85.6087 -54.45 + 57 493.031 472 5 0 72.5415 -85.6148 -55.85 + 57 182.797 1261 4 1 72.4206 -85.7654 -84.45 + 57 114.072 471 4 0 72.4069 -85.7755 -85.85 + 57 111.707 1260 3 1 72.1328 -85.8823 -114.45 + 57 172.468 470 3 0 72.1186 -85.8726 -115.85 + 57 117.219 1259 2 1 72.001 -85.5471 -144.45 + 57 110.75 472 2 0 72.0091 -85.5363 -145.85 + 57 315.416 1260 1 1 72.2257 -85.2794 -174.45 + 57 109.211 473 1 0 72.2372 -85.2625 -175.85 + 57 285.365 1262 0 1 72.5275 -84.9079 -204.45 + 57 119.609 475 0 0 72.5312 -84.8912 -205.85 + 57 68.0951 1226 2 1 65.2817 -90.15 -144.568 + 57 16.6331 1225 2 1 65.25 -90.2232 -144.781 + 57 110.541 447 2 0 65.0331 -90.6576 -145.85 + 57 61.8145 446 2 0 64.9848 -90.75 -146.076 + 57 128.881 1187 1 1 57.604 -99.245 -174.45 + 57 113.067 404 1 0 57.4606 -99.3279 -175.85 + 57 40.8017 1166 0 1 53.3302 -101.985 -204.45 + 57 89.1329 1165 0 1 53.2498 -101.958 -204.619 + 57 207.441 392 0 0 52.6863 -101.702 -205.85 + 57 258.03 1263 5 1 72.7634 -85.6238 -54.4503 + 57 137.999 1254 4 1 70.9325 -84.5512 -84.4502 + 57 98.2683 477 4 0 71.0034 -84.6307 -85.85 + 57 15.7349 476 4 0 71.0222 -84.65 -86.1862 + 57 114.278 1261 3 1 72.4365 -86.1319 -114.45 + 57 109.822 1262 3 1 72.45 -86.1332 -114.551 + 57 107.929 469 3 0 72.6272 -86.1377 -115.851 + 57 138.734 1285 2 1 77.1284 -87.4339 -144.45 + 57 68.1876 462 2 0 77.1811 -87.6194 -145.85 + 57 36.6798 461 2 0 77.1868 -87.65 -146.085 + 57 116.244 1285 1 1 77.1263 -91.7771 -174.45 + 57 123.313 441 1 0 77.2883 -91.8952 -175.85 + 57 116.407 1295 0 1 79.1429 -93.7475 -204.45 + 57 115.063 432 0 0 79.311 -93.7109 -205.85 + 57 102.58 1263 4 1 72.7748 -84.9544 -84.45 + 57 132.328 475 4 0 72.7763 -84.9318 -85.85 + 57 111.927 1263 3 1 72.8235 -84.3971 -114.45 + 57 149.032 478 3 0 72.8327 -84.3835 -115.85 + 57 124.971 1264 2 1 72.9241 -84.1569 -144.45 + 57 115.207 479 2 0 72.8901 -84.1622 -145.85 + 57 88.1151 479 1 0 72.1907 -84.135 -175.85 + 57 274.927 1255 0 1 71.1458 -83.2561 -204.45 + 57 111.567 484 0 0 71.1087 -83.1718 -205.85 + 57 130.272 480 1 0 72.1212 -83.9712 -175.85 + 57 5.18562 1263 0 1 72.65 -84.9019 -204.834 + 57 148.83 477 0 0 72.8901 -84.6152 -205.85 + 57 89.8625 1259 1 1 72.05 -83.9443 -174.614 + 57 21.7584 1258 1 1 71.85 -83.9358 -174.778 + 57 58.3736 483 1 0 71.1996 -83.3699 -175.85 + 57 170.892 484 1 0 71.1249 -83.25 -176.007 + 57 28.1402 730 1 0 64.9527 -33.8909 -176.25 + 57 68.7205 731 1 0 64.952 -33.85 -176.21 + 57 59.1683 732 1 0 64.82 -33.65 -176.117 + 57 57.1172 733 1 0 64.6821 -33.45 -176.106 + 57 62.3957 734 1 0 64.686 -33.25 -176.128 + 57 107.988 735 1 0 64.7054 -33.0498 -176.155 + 57 64.7071 736 1 0 64.7658 -32.8496 -176.125 + 57 72.8315 737 1 0 64.8714 -32.65 -175.995 + 57 110.601 738 1 0 64.9038 -32.45 -175.888 + 57 174.721 739 1 0 65.176 -32.25 -175.927 + 57 131.784 740 1 0 65.6156 -32.05 -176.03 + 57 79.4795 741 1 0 65.9035 -31.85 -176.042 + 57 326.227 742 1 0 65.8673 -31.65 -176.134 +Number of digits in this event: 30 +Using G4ParticleGun... +Particle energy: 7.22797 LIN Particle: e- Event: 58 -Number of tracker hits in this event: 38 - 58 112.158 1393 10 1 98.7504 50.8041 95.55 - 58 139.035 1153 10 0 98.7503 50.805 94.15 - 58 221.27 1392 9 1 98.7484 50.8209 65.55 - 58 114.069 1153 9 0 98.7489 50.8204 64.15 - 58 125.385 1393 8 1 98.7598 50.8129 35.55 - 58 137.23 1153 8 0 98.76 50.8123 34.15 - 58 149.134 1393 7 1 98.7638 50.801 5.55 - 58 116.437 1153 7 0 98.764 50.8009 4.15 - 58 112.978 1393 6 1 98.7685 50.7943 -24.45 - 58 111.865 1153 6 0 98.7691 50.7947 -25.85 - 58 119.213 1393 5 1 98.7807 50.8039 -54.45 - 58 115.838 1153 5 0 98.7812 50.8041 -55.85 - 58 124.332 1393 4 1 98.7933 50.8103 -84.45 - 58 96.1453 1153 4 0 98.7931 50.8106 -85.85 - 58 137.817 1393 3 1 98.7858 50.813 -114.45 - 58 111.471 1153 3 0 98.7856 50.8133 -115.85 - 58 116.903 1393 2 1 98.7829 50.8169 -144.45 - 58 113.859 1153 2 0 98.7824 50.8183 -145.85 - 58 244.5 1393 1 1 98.7765 50.8464 -174.45 - 58 130.926 1153 1 0 98.7762 50.8485 -175.85 - 58 174.263 1393 0 1 98.7686 50.8946 -204.45 - 58 216.705 1154 0 0 98.7682 50.8973 -205.85 - 58 87.5613 1155 0 0 98.5381 51.05 -206.01 - 58 95.725 1156 0 0 98.4205 51.25 -205.978 - 58 206.485 1157 0 0 98.5139 51.4501 -205.932 - 58 62.1968 1390 0 1 98.2826 52.3341 -204.85 - 58 238.92 1432 0 0 97.8924 106.55 -205.998 - 58 28.6203 1433 0 0 97.9604 106.75 -206.049 - 58 58.5697 1394 3 1 98.9503 50.727 -114.456 - 58 68.7751 1395 3 1 99.15 50.7486 -114.53 - 58 66.3117 1396 3 1 99.35 50.7815 -114.672 - 58 106.195 1152 3 0 99.8561 50.632 -115.85 - 58 29.2566 1151 3 0 99.9383 50.45 -116.176 - 58 49.4677 970 3 0 81.2165 14.1427 -116.25 - 58 158.153 969 3 0 81.1265 14.05 -116.197 - 58 148.137 968 3 0 80.8906 13.85 -116.017 - 58 86.3417 1308 3 1 81.8282 12.5228 -114.85 - 58 39.7272 1309 3 1 81.85 12.4968 -114.843 -Number of digits in this event: 17 +Number of tracker hits in this event: 83 + 58 94.3346 1346 10 1 89.3227 67.9111 95.55 + 58 138.549 1239 10 0 89.3224 67.9106 94.15 + 58 119.557 1346 9 1 89.3159 67.8985 65.55 + 58 252.953 1239 9 0 89.3147 67.8976 64.15 + 58 116.679 1346 8 1 89.2896 67.8794 35.55 + 58 132.381 1239 8 0 89.2865 67.8778 34.15 + 58 184.917 1345 7 1 89.2218 67.8422 5.55 + 58 112.047 1238 7 0 89.2192 67.8411 4.15 + 58 406.786 1345 6 1 89.1692 67.8186 -24.45 + 58 347.28 1238 6 0 89.167 67.8175 -25.85 + 58 122.076 1345 5 1 89.1184 67.7968 -54.45 + 58 130.636 1238 5 0 89.1157 67.7962 -55.85 + 58 223.682 1345 4 1 89.0595 67.7829 -84.45 + 58 103.229 1238 4 0 89.0566 67.7827 -85.85 + 58 296.85 1344 3 1 88.9993 67.7792 -114.45 + 58 328.81 1238 3 0 88.9955 67.7801 -115.85 + 58 148.996 1344 2 1 88.9139 67.8029 -144.45 + 58 124.463 1238 2 0 88.9098 67.8047 -145.85 + 58 118.167 1343 1 1 88.8284 67.8441 -174.45 + 58 363.664 1238 1 0 88.8236 67.8455 -175.85 + 58 418.798 1343 0 1 88.7221 67.8707 -204.45 + 58 161.116 1239 0 0 88.7177 67.8718 -205.85 + 58 96.453 1320 2 0 48.1825 84.1171 -146.25 + 58 90.2323 1301 1 1 80.3278 97.1198 -174.85 + 58 220.861 1344 1 1 88.8612 67.7678 -174.45 + 58 138.803 1237 0 0 88.7371 67.6294 -205.85 + 58 118.586 1238 0 0 88.7189 67.6825 -205.85 + 58 74.5512 1345 3 1 89.1342 67.7366 -114.45 + 58 76.6776 1346 3 1 89.25 67.7576 -114.651 + 58 115.695 1423 2 1 104.903 67.7679 -144.45 + 58 46.2745 1424 2 1 104.95 67.701 -144.677 + 58 57.3516 1235 2 0 105.297 67.1616 -145.85 + 58 58.3077 1234 2 0 105.363 67.05 -146.062 + 58 111.886 1468 1 1 113.769 49.7323 -174.45 + 58 277.772 1469 1 1 113.95 49.4023 -174.675 + 58 73.3719 1138 1 0 114.837 47.8173 -175.85 + 58 92.9074 1137 1 0 114.934 47.65 -175.965 + 58 66.2524 1136 1 0 115.058 47.4498 -176.083 + 58 22.1826 1135 1 0 115.159 47.2497 -176.199 + 58 25.5375 728 1 0 158.627 -34.3902 -176.25 + 58 75.9085 727 1 0 158.659 -34.45 -176.194 + 58 83.2494 726 1 0 158.735 -34.65 -176.004 + 58 46.4055 1695 1 1 159.287 -35.9654 -174.85 + 58 125.714 1696 1 1 159.35 -36.0973 -174.734 + 58 153.737 1348 2 1 89.697 69.2296 -144.45 + 58 119.914 1246 2 0 89.7643 69.3582 -145.85 + 58 206.17 1355 1 1 91.2479 72.5204 -174.45 + 58 110.448 1263 1 0 91.3881 72.8215 -175.85 + 58 77.1114 1264 1 0 91.4006 72.85 -175.982 + 58 115.014 1367 0 1 93.5595 79.1656 -204.45 + 58 105.032 1295 0 0 93.5286 79.186 -205.85 + 58 40.0415 1325 1 1 85.25 78.4036 -174.495 + 58 339.293 1346 7 1 89.25 67.819 5.51593 + 58 3.64109 1347 7 1 89.4501 67.678 5.35835 + 58 174.688 1344 5 1 89.0421 68.4788 -54.45 + 58 117.851 1242 5 0 88.8655 68.5803 -55.85 + 58 113.824 1320 4 1 84.0543 69.62 -84.45 + 58 243.129 1247 4 0 84.0474 69.5858 -85.85 + 58 112.779 1317 3 1 83.613 68.5917 -114.45 + 58 78.3296 1242 3 0 83.6829 68.4668 -115.85 + 58 55.298 1241 3 0 83.6942 68.45 -116.051 + 58 116.204 1322 2 1 84.6114 66.0815 -144.45 + 58 127.098 1231 2 0 84.627 66.2527 -145.85 + 58 115.693 1321 1 1 84.4386 69.8914 -174.451 + 58 102.269 1248 1 0 84.3526 69.7703 -175.85 + 58 7.85413 1265 6 0 83.4935 73.0642 -26.25 + 58 324.569 1264 6 0 83.4782 73.0499 -26.2299 + 58 58.1234 1239 6 0 89.2192 67.85 -26.0642 + 58 121.626 1349 5 1 89.8909 69.361 -54.45 + 58 110.231 1246 5 0 89.8338 69.3975 -55.85 + 58 112.629 1342 4 1 88.6423 70.4244 -84.4506 + 58 118.968 1253 4 0 88.4394 70.667 -85.85 + 58 135.772 1320 3 1 84.1423 75.4402 -114.45 + 58 144.972 1278 3 0 83.8217 75.6888 -115.85 + 58 196.826 1281 2 1 76.4481 81.0843 -144.45 + 58 128.11 1306 2 0 76.1714 81.2938 -145.85 + 58 95.0613 1253 1 1 70.7047 85.4739 -174.45 + 58 14.8424 1252 1 1 70.6499 85.5363 -174.784 + 58 267.149 1328 1 0 70.4719 85.713 -175.85 + 58 141.825 1228 0 1 65.8034 90.554 -204.45 + 58 162.878 1354 0 0 65.7654 91.0183 -205.85 + 58 330.385 1280 2 1 76.25 81.0788 -144.606 + 58 241.919 1277 3 0 83.7926 75.65 -115.991 +Number of digits in this event: 40 Using G4ParticleGun... -Particle energy: 2.12845 LIN +Particle energy: 7.48829 LIN Particle: e- Event: 59 -Number of tracker hits in this event: 26 - 59 112.785 1023 11 1 24.6546 32.3851 125.55 - 59 168.821 1061 11 0 24.6526 32.3894 124.15 - 59 134.056 1022 10 1 24.6121 32.4752 95.55 - 59 211.69 1062 10 0 24.6009 32.4819 94.15 - 59 128.594 1021 9 1 24.3902 32.6363 65.55 - 59 121.52 1062 9 0 24.3825 32.6384 64.15 - 59 111.161 1020 8 1 24.2156 32.6663 35.55 - 59 113.528 1063 8 0 24.2051 32.6713 34.15 - 59 115.18 1019 7 1 23.9963 32.788 5.55 - 59 94.5763 1063 7 0 23.9838 32.8 4.15 - 59 158.056 1018 6 1 23.7129 33.0595 -24.45 - 59 115.349 1065 6 0 23.6992 33.0695 -25.85 - 59 126.867 1016 5 1 23.4339 33.2868 -54.45 - 59 165.144 1066 5 0 23.4225 33.2962 -55.85 - 59 185.115 1015 4 1 23.1727 33.5432 -84.45 - 59 168.015 1067 4 0 23.1607 33.5534 -85.85 - 59 134.391 1014 3 1 22.9052 33.7606 -114.45 - 59 151.196 1068 3 0 22.8917 33.7659 -115.85 - 59 116.673 1012 2 1 22.6398 33.8844 -144.45 - 59 226.083 1069 2 0 22.621 33.895 -145.85 - 59 116.024 1010 1 1 22.2283 34.1141 -174.45 - 59 137.601 1070 1 0 22.2082 34.1166 -175.85 - 59 126.331 1008 0 1 21.744 34.2024 -204.45 - 59 111.948 1070 0 0 21.7281 34.1994 -205.85 - 59 28.6095 1329 0 1 85.9364 61.3549 -204.85 - 59 20.4998 1065 5 0 23.4221 33.25 -56.1976 -Number of digits in this event: 16 -Using G4ParticleGun... -Particle energy: 7.82521 LIN +Number of tracker hits in this event: 58 + 59 114.891 1547 7 1 129.62 -73.0156 5.55 + 59 97.8214 535 7 0 129.621 -73.0155 4.15 + 59 120.442 1547 6 1 129.624 -73.0129 -24.45 + 59 120.958 535 6 0 129.624 -73.0119 -25.85 + 59 434.673 1547 5 1 129.64 -72.9947 -54.45 + 59 395.993 535 5 0 129.641 -72.9947 -55.85 + 59 180.008 1547 4 1 129.678 -73 -84.45 + 59 124.272 535 4 0 129.68 -72.999 -85.85 + 59 115.702 1547 3 1 129.727 -72.975 -114.45 + 59 132.464 535 3 0 129.728 -72.9731 -115.85 + 59 174.618 1548 2 1 129.768 -72.9349 -144.45 + 59 272.002 535 2 0 129.769 -72.9324 -145.85 + 59 455.638 1548 1 1 129.792 -72.8819 -174.45 + 59 494.68 535 1 0 129.795 -72.8796 -175.85 + 59 252.361 1548 0 1 129.836 -72.8308 -204.45 + 59 260.722 536 0 0 129.837 -72.8289 -205.85 + 59 55.6195 791 2 0 -42.3524 -21.7592 -146.25 + 59 111.02 1550 0 1 130.315 -72.7969 -204.451 + 59 119.494 1549 0 1 130.096 -72.8846 -204.45 + 59 144.174 535 0 0 130.115 -72.9164 -205.85 + 59 116.575 1545 4 1 129.17 -72.2704 -84.45 + 59 120.383 538 4 0 129.157 -72.2678 -85.85 + 59 133.874 1543 3 1 128.878 -72.3948 -114.45 + 59 130.743 538 3 0 128.838 -72.4301 -115.85 + 59 422.176 1540 2 1 128.156 -73.0644 -144.45 + 59 171.416 1559 1 1 132.04 -72.2951 -174.451 + 59 117.102 540 1 0 132.106 -71.9359 -175.85 + 59 10.4551 541 1 0 132.128 -71.85 -176.22 + 59 112.13 1569 0 1 134.057 -66.0285 -204.45 + 59 50.2151 1568 0 1 133.95 -65.9217 -204.699 + 59 80.7399 572 0 0 133.464 -65.5325 -205.85 + 59 58.7503 573 0 0 133.356 -65.4499 -206.098 + 59 36.3403 538 2 0 127.872 -72.3488 -145.85 + 59 84.1682 539 2 0 127.833 -72.25 -145.966 + 59 218.779 1546 5 1 129.55 -73.104 -54.4953 + 59 110.827 1557 4 1 131.677 -71.1195 -84.45 + 59 121.607 545 4 0 131.757 -70.9228 -85.8512 + 59 170.725 1565 3 1 133.268 -66.5597 -114.45 + 59 102.791 569 3 0 132.989 -66.1691 -115.85 + 59 21.7471 570 3 0 132.917 -66.05 -116.175 + 59 106.889 1529 2 1 125.957 -55.1502 -144.45 + 59 133.467 624 2 0 126.001 -55.0611 -145.85 + 59 75.4692 1527 1 1 125.647 -57.9634 -174.45 + 59 86.9513 1528 1 1 125.75 -57.9183 -174.65 + 59 120.699 612 1 0 126.397 -57.5507 -175.85 + 59 31.9679 613 1 0 126.541 -57.45 -176.147 + 59 52.4641 794 1 0 172.538 -21.1657 -176.25 + 59 128.531 795 1 0 172.724 -21.05 -176.132 + 59 95.2499 796 1 0 173.099 -20.85 -176 + 59 32.2505 797 1 0 173.332 -20.65 -175.892 + 59 33.8078 1774 1 1 175.038 -19.5158 -174.85 + 59 56.556 1775 1 1 175.15 -19.4463 -174.79 + 59 192.548 1776 1 1 175.35 -19.3111 -174.761 + 59 67.2887 1777 1 1 175.55 -19.0762 -174.736 + 59 335.589 1778 1 1 175.75 -18.8707 -174.747 + 59 85.0981 1779 1 1 175.95 -18.7992 -174.782 + 59 30.7761 1780 1 1 176.15 -18.7448 -174.817 + 59 401.813 809 1 0 179.043 -18.2008 -175.85 +Number of digits in this event: 30 +Using G4ParticleGun... +Particle energy: 1.81555 LIN Particle: e- Event: 60 -Number of tracker hits in this event: 60 - 60 134.251 273 9 1 -125.518 12.1006 65.55 - 60 114.769 960 9 0 -125.52 12.1005 64.15 - 60 133.076 272 8 1 -125.55 12.1004 35.55 - 60 135.285 960 8 0 -125.55 12.0979 34.15 - 60 204.664 273 7 1 -125.541 12.0463 5.55 - 60 111.921 959 7 0 -125.538 12.0466 4.15 - 60 107.483 273 6 1 -125.471 12.0619 -24.45 - 60 175.377 960 6 0 -125.475 12.0608 -25.85 - 60 415.58 273 5 1 -125.535 12.0341 -54.45 - 60 225.622 959 5 0 -125.537 12.0258 -55.85 - 60 122.238 272 4 1 -125.575 11.863 -84.45 - 60 120.512 959 4 0 -125.577 11.8531 -85.85 - 60 171.348 272 3 1 -125.614 11.6823 -114.45 - 60 112.187 958 3 0 -125.622 11.6735 -115.85 - 60 136.147 271 2 1 -125.818 11.4911 -144.45 - 60 131.93 957 2 0 -125.83 11.4824 -145.85 - 60 188.933 270 1 1 -126.115 11.3035 -174.45 - 60 105.104 956 1 0 -126.132 11.3083 -175.85 - 60 104.931 268 0 1 -126.507 11.4226 -204.45 - 60 118.85 956 0 0 -126.523 11.4309 -205.85 - 60 97.9855 431 1 1 -93.9035 32.1647 -174.85 - 60 110.965 272 5 1 -125.55 12.0447 -54.4558 - 60 70.2067 271 5 1 -125.75 12.2661 -54.5425 - 60 133.939 960 5 0 -125.543 12.0706 -55.85 - 60 90.2803 273 4 1 -125.398 12.3169 -84.4502 - 60 91.8336 961 4 0 -125.43 12.3332 -85.85 - 60 206.475 269 3 1 -126.171 12.6533 -114.45 - 60 131.006 963 3 0 -126.349 12.7878 -115.85 - 60 143.389 251 2 1 -129.899 15.7855 -144.45 - 60 143.845 979 2 0 -129.944 15.9776 -145.851 - 60 178.201 246 1 1 -130.889 20.0807 -174.45 - 60 111.469 1001 1 0 -130.914 20.3079 -175.85 - 60 129.571 243 0 1 -131.469 24.7934 -204.45 - 60 102.784 1024 0 0 -131.444 25.0259 -205.85 - 60 56.4003 1025 0 0 -131.442 25.05 -205.997 - 60 112.503 276 4 1 -124.843 11.6808 -84.45 - 60 100.832 957 4 0 -124.746 11.639 -85.85 - 60 98.8852 288 3 1 -122.494 10.3068 -114.45 - 60 129.217 951 3 0 -122.373 10.3016 -115.85 - 60 105.84 302 2 1 -119.706 9.97052 -144.45 - 60 134.542 949 2 0 -119.517 9.97952 -145.85 - 60 187.963 322 1 1 -115.672 9.91666 -174.45 - 60 96.7486 949 1 0 -115.473 9.92386 -175.85 - 60 114.97 345 0 1 -111.147 9.97974 -204.45 - 60 105.212 949 0 0 -110.861 9.92653 -205.85 - 60 19.9219 1772 0 0 -61.5706 174.693 -206.25 - 60 61.9274 1773 0 0 -61.5316 174.75 -206.188 - 60 228.36 1774 0 0 -61.4605 174.95 -206.101 - 60 375.845 1775 0 0 -61.4658 175.15 -205.962 - 60 29.9721 582 0 1 -63.5255 175.757 -204.85 - 60 22.5796 900 1 0 -10.6446 0.213452 -176.25 - 60 20.9558 850 1 1 -9.87427 0.305188 -174.85 - 60 273.82 851 1 1 -9.84976 0.31603 -174.798 - 60 88.3823 852 1 1 -9.65 0.388244 -174.582 - 60 174.714 853 1 1 -9.45 0.365495 -174.453 - 60 99.677 854 1 1 -9.24976 0.48109 -174.659 - 60 78.6257 855 1 1 -9.04943 0.587907 -174.663 - 60 129.749 856 1 1 -8.84995 0.629344 -174.648 - 60 65.535 857 1 1 -8.64997 0.76733 -174.783 - 60 230.833 906 1 0 -9.06826 1.28006 -175.85 -Number of digits in this event: 31 +Number of tracker hits in this event: 75 + 60 147.522 1504 9 1 120.988 37.0381 65.55 + 60 168.018 1084 9 0 120.989 37.0356 64.15 + 60 107.459 1504 8 1 121.009 36.9828 35.55 + 60 95.9453 1084 8 0 121.01 36.9811 34.15 + 60 107.024 1504 7 1 121.019 36.9722 5.55 + 60 187.372 1084 7 0 121.006 36.9782 4.15 + 60 130.277 1502 6 1 120.713 37.0931 -24.45 + 60 97.2352 1085 6 0 120.696 37.0938 -25.85 + 60 108.592 1500 5 1 120.34 37.1035 -54.45 + 60 97.5036 1085 5 0 120.328 37.0967 -55.85 + 60 357.918 1499 4 1 120.081 36.9291 -84.45 + 60 140.649 1084 4 0 120.077 36.93 -85.85 + 60 216.28 1499 3 1 119.963 36.973 -114.45 + 60 162.03 1084 3 0 119.97 36.968 -115.85 + 60 122.59 1499 2 1 120.11 36.853 -144.45 + 60 342.46 1084 2 0 120.115 36.8825 -145.85 + 60 288.004 1500 1 1 120.241 37.4229 -174.45 + 60 65.0179 1086 1 0 120.262 37.4457 -175.85 + 60 46.3427 1087 1 0 120.266 37.45 -176.109 + 60 95.3107 1502 0 1 120.711 37.8972 -204.45 + 60 136.333 1089 0 0 120.738 37.9231 -205.85 + 60 276.555 1500 0 1 120.324 36.6036 -204.45 + 60 94.6545 1082 0 0 120.159 36.5009 -205.85 + 60 58.9569 1499 0 1 120.15 36.6793 -204.677 + 60 146.46 1085 0 0 119.255 37.1418 -205.85 + 60 191.989 1086 0 0 119.085 37.25 -206.084 + 60 137.146 1495 2 1 119.277 36.6612 -144.45 + 60 131.196 1490 1 1 118.24 40.4318 -174.45 + 60 220.237 1102 1 0 118.006 40.5687 -175.85 + 60 292.453 1473 0 1 114.906 42.9142 -204.45 + 60 43.0105 1113 0 0 114.764 42.6701 -205.85 + 60 84.7249 1112 0 0 114.754 42.6499 -205.975 + 60 78.0614 1101 1 0 117.829 40.4498 -175.914 + 60 166.377 1100 1 0 117.637 40.25 -175.987 + 60 135.269 1205 1 0 140.417 61.0546 -176.25 + 60 361.735 1206 1 0 140.374 61.25 -176.064 + 60 32.7275 1496 2 1 119.489 36.6091 -144.45 + 60 111.983 1497 2 1 119.55 36.6026 -144.56 + 60 160.992 1082 2 0 120.321 36.5663 -145.85 + 60 110.83 980 2 0 165.325 16.1702 -146.25 + 60 61.7673 979 2 0 165.605 16.0499 -145.979 + 60 50.4284 1734 2 1 167.021 15.2311 -144.85 + 60 59.4325 1735 2 1 167.15 15.1677 -144.764 + 60 63.8808 1736 2 1 167.35 15.0953 -144.645 + 60 52.4311 1737 2 1 167.55 15.0319 -144.519 + 60 96.0612 1738 2 1 167.809 14.9795 -144.45 + 60 77.5457 1739 2 1 167.95 14.9124 -144.509 + 60 112.154 1740 2 1 168.15 14.7423 -144.626 + 60 64.8145 968 2 0 168.898 13.7859 -145.85 + 60 97.0902 967 2 0 169.032 13.65 -146.011 + 60 15.5552 966 2 0 169.157 13.45 -146.21 + 60 10.2355 830 1 0 172.652 -13.85 -176.038 + 60 88.4369 829 1 0 172.814 -14.0504 -176.044 + 60 100.029 828 1 0 172.922 -14.25 -176.069 + 60 238.24 827 1 0 173.017 -14.45 -176.038 + 60 45.9364 1500 4 1 120.15 37.1633 -84.681 + 60 36.2683 1091 4 0 119.842 38.3892 -85.8501 + 60 107.316 1092 4 0 119.845 38.45 -85.9555 + 60 25.7955 1498 4 1 119.95 37.1126 -84.7139 + 60 53.7352 1087 4 0 120.36 37.5823 -85.85 + 60 192.775 1088 4 0 120.416 37.65 -85.9482 + 60 212.838 1504 1 1 121.134 36.7578 -174.45 + 60 266.237 1083 1 0 121.059 36.7366 -175.85 + 60 131.031 1490 0 1 118.317 37.4022 -204.45 + 60 6.17792 1172 4 0 174.265 54.6255 -86.25 + 60 288.294 1505 0 1 121.305 35.7249 -204.45 + 60 21.3753 1078 0 0 121.28 35.6539 -205.85 + 60 88.1308 1077 0 0 121.278 35.65 -205.926 + 60 71.3523 1504 0 1 120.992 35.848 -204.45 + 60 97.8374 1503 0 1 120.95 35.8633 -204.522 + 60 232.64 1079 0 0 120.18 35.9445 -205.85 + 60 7.3883 1080 0 0 119.92 36.0501 -206.235 + 60 5.40994 643 2 0 25.3055 -51.4326 -146.25 + 60 7.25218 642 2 0 25.3045 -51.45 -146.247 + 60 78.7483 1084 0 0 121.884 36.9214 -205.85 +Number of digits in this event: 33 Using G4ParticleGun... -Particle energy: 1.43247 LIN +Particle energy: 1.95839 LIN Particle: e- Event: 61 -Number of tracker hits in this event: 69 - 61 104.594 1010 11 1 22.1029 54.1057 125.55 - 61 261.464 1170 11 0 22.1153 54.1085 124.15 - 61 136.324 1011 10 1 22.3635 54.1967 95.55 - 61 391.305 1170 10 0 22.3748 54.2031 94.15 - 61 108.998 1012 9 1 22.6031 54.3343 65.55 - 61 103.663 1171 9 0 22.6216 54.3358 64.15 - 61 120.448 1014 8 1 23.0102 54.3647 35.55 - 61 128.05 1171 8 0 23.0383 54.3857 34.15 - 61 110.408 1017 7 1 23.5704 54.7661 5.55 - 61 95.8491 1173 7 0 23.6007 54.7852 4.15 - 61 105.619 1020 6 1 24.2294 55.1257 -24.45 - 61 117.322 1175 6 0 24.2589 55.1358 -25.85 - 61 422.065 1024 5 1 24.8663 55.3812 -54.45 - 61 220.439 1176 5 0 24.8942 55.3897 -55.85 - 61 147.905 1027 4 1 25.5039 55.5394 -84.45 - 61 242.876 1177 4 0 25.5442 55.5486 -85.85 - 61 95.0764 1031 3 1 26.4109 55.6887 -114.45 - 61 130.082 1178 3 0 26.4702 55.6981 -115.85 - 61 179.561 1038 2 1 27.6839 55.9013 -144.45 - 61 139.136 1179 2 0 27.7389 55.9117 -145.85 - 61 68.2448 1043 1 1 28.8394 56.085 -174.45 - 61 41.7601 1044 1 1 28.85 56.0843 -174.689 - 61 129.554 1180 1 0 28.8992 56.0787 -175.85 - 61 146.202 1050 0 1 30.0524 55.9728 -204.45 - 61 120.544 1179 0 0 30.1195 55.975 -205.85 - 61 189.802 168 3 0 37.0084 -146.441 -116.25 - 61 46.885 1087 3 1 37.4599 -146.441 -114.85 - 61 154.131 1086 3 1 37.45 -146.422 -114.78 - 61 118.603 1023 5 1 24.84 55.4775 -54.45 - 61 132.292 1050 4 1 30.0573 50.624 -84.45 - 61 162.611 1148 4 0 30.3335 49.8115 -85.85 - 61 7.82071 1147 4 0 30.4257 49.65 -86.2206 - 61 37.0166 1061 4 0 32.358 32.3011 -86.25 - 61 127.705 1060 4 0 32.3434 32.25 -86.1409 - 61 3.68349 1060 4 1 32.0539 31.6415 -84.85 - 61 162.952 1059 4 1 32.05 31.635 -84.8368 - 61 33.8186 770 5 0 27.336 -25.9213 -56.25 - 61 171.827 769 5 0 27.3202 -26.0501 -56.1879 - 61 199.145 1037 5 1 27.5507 -26.8563 -54.8495 - 61 89.1107 1036 5 1 27.45 -27.143 -54.5358 - 61 89.1002 1038 5 1 27.65 -27.2724 -54.5325 - 61 118.087 1039 5 1 27.85 -27.1876 -54.638 - 61 237.454 1040 5 1 28.05 -27.07 -54.5904 - 61 112.882 1178 5 0 24.4977 55.6913 -55.85 - 61 142.04 1014 4 1 23.019 56.4003 -84.45 - 61 64.9955 1013 4 1 22.8499 56.7392 -84.7109 - 61 98.4475 1188 4 0 22.2152 57.6581 -85.85 - 61 109.94 1189 4 0 22.1339 57.8501 -86.0354 - 61 13.4513 1190 4 0 22.0545 58.05 -86.2176 - 61 51.0404 1220 4 0 -2.14476 64.1857 -86.2498 - 61 119.272 1219 4 0 -2.23951 64.0496 -86.1407 - 61 93.4197 889 4 1 -2.14279 63.6455 -84.8498 - 61 36.9651 890 4 1 -2.05 63.5644 -84.5193 - 61 8.82763 463 7 0 134.384 -87.25 3.79359 - 61 21.6933 1706 2 1 161.35 67.3766 -144.736 - 61 62.0123 1171 7 0 23.4344 54.4019 4.15 - 61 3.72897 1012 10 1 22.6446 54.0888 95.5499 - 61 174.37 1013 10 1 22.65 54.0806 95.5403 - 61 78.7339 1014 10 1 22.8501 53.7518 95.2708 - 61 64.5939 1161 10 0 24.1954 52.3961 94.15 - 61 112.918 1160 10 0 24.3328 52.2498 94.0043 - 61 15.1743 1159 10 0 24.6217 52.05 93.7896 - 61 45.0489 1139 9 1 47.9717 26.2977 65.55 - 61 80.965 1138 9 1 47.85 26.2466 65.5237 - 61 69.9255 1137 9 1 47.6499 26.2674 65.3968 - 61 84.2754 1136 9 1 47.45 26.3654 65.3558 - 61 60.3085 1028 9 0 47.1555 25.7182 64.15 - 61 347.123 1027 9 0 47.1434 25.6498 64.0855 - 61 12.2384 1166 10 0 22.3268 53.45 94.1122 -Number of digits in this event: 29 -Using G4ParticleGun... -Particle energy: 3.54287 LIN +Number of tracker hits in this event: 150 + 61 145.792 1209 11 1 62.0077 14.1733 125.55 + 61 147.923 970 11 0 62.0066 14.1738 124.15 + 61 132.665 1209 10 1 61.9856 14.1807 95.55 + 61 142.929 970 10 0 61.9876 14.173 94.15 + 61 118.711 1210 9 1 62.054 13.9936 65.55 + 61 219.954 969 9 0 62.0598 13.9925 64.15 + 61 112.654 1210 8 1 62.1923 13.9671 35.55 + 61 243.355 969 8 0 62.196 13.9621 34.15 + 61 387.129 1211 7 1 62.2796 13.8387 5.55 + 61 138.245 968 7 0 62.2765 13.8313 4.15 + 61 216.065 1210 6 1 62.2118 13.7051 -24.45 + 61 350.09 968 6 0 62.2051 13.6961 -25.85 + 61 192.303 1209 5 1 62.0365 13.5092 -54.45 + 61 114.709 967 5 0 62.0238 13.4989 -55.85 + 61 114.246 1208 4 1 61.8184 13.2949 -84.45 + 61 366.874 966 4 0 61.8083 13.2879 -85.85 + 61 110.806 1207 3 1 61.6284 13.127 -114.45 + 61 124.688 965 3 0 61.6255 13.1201 -115.85 + 61 146.765 1207 2 1 61.5824 12.9489 -144.45 + 61 123.436 964 2 0 61.575 12.9392 -145.85 + 61 113.699 1206 1 1 61.4113 12.7172 -174.45 + 61 177.288 963 1 0 61.4054 12.7064 -175.85 + 61 219.265 1206 0 1 61.2623 12.496 -204.45 + 61 125.731 962 0 0 61.2566 12.4854 -205.85 + 61 158.544 965 1 0 60.9764 13.1226 -175.85 + 61 6.18797 1341 1 1 88.25 1.5769 -174.796 + 61 521.822 1209 4 1 61.899 13.3487 -84.4502 + 61 107.686 1210 3 1 62.2314 13.9297 -114.45 + 61 126.999 969 3 0 62.1729 13.9151 -115.85 + 61 136.16 1205 2 1 61.0507 13.3022 -144.45 + 61 134.429 1206 2 1 61.25 13.0837 -144.823 + 61 189.609 962 2 0 61.8061 12.5465 -145.85 + 61 202.685 961 2 0 61.8943 12.45 -146.031 + 61 112.464 1255 1 1 71.1139 -2.75512 -174.45 + 61 24.809 1256 1 1 71.25 -2.7445 -174.771 + 61 42.611 886 1 0 71.716 -2.667 -175.851 + 61 120.773 887 1 0 71.7929 -2.64984 -175.991 + 61 218.71 1416 0 1 103.421 7.71707 -204.45 + 61 129.526 937 0 0 103.47 7.61534 -205.851 + 61 6.17584 682 2 0 117.769 -43.65 -146.197 + 61 113.436 1206 3 1 61.2858 12.7619 -114.45 + 61 158.336 963 3 0 61.2754 12.7527 -115.85 + 61 144.517 1205 1 1 61.2066 10.8812 -174.45 + 61 125.245 953 1 0 61.2078 10.8444 -175.85 + 61 393.45 1205 0 1 61.1485 10.0884 -204.45 + 61 154.386 948 0 0 61.0177 9.77992 -205.85 + 61 166.045 1092 0 0 69.3577 38.4738 -206.25 + 61 110.707 1093 0 0 69.3888 38.6504 -206.173 + 61 21.1572 1241 0 1 68.313 38.7343 -204.85 + 61 411.884 1240 0 1 68.25 38.7474 -204.777 + 61 299.347 949 0 0 61.1553 9.96487 -205.851 + 61 209.107 969 7 0 62.245 13.9561 4.15 + 61 127.127 1210 5 1 62.1065 13.3668 -54.45 + 61 106.371 966 5 0 62.0991 13.359 -55.85 + 61 143.071 965 4 0 61.915 13.2042 -85.85 + 61 190.059 1209 3 1 62.0053 12.9995 -114.45 + 61 146.519 964 3 0 62.0151 12.9758 -115.85 + 61 124.123 1210 2 1 62.112 12.5152 -144.45 + 61 118.258 1212 1 1 62.5628 12.461 -174.45 + 61 175.249 962 1 0 62.5983 12.5074 -175.85 + 61 104.617 1216 0 1 63.3711 13.4603 -204.45 + 61 109.223 967 0 0 63.4702 13.539 -205.85 + 61 170.511 1214 0 1 62.9048 12.4675 -204.45 + 61 142.597 961 0 0 62.8624 12.3766 -205.85 + 61 104.458 612 1 0 50.9198 -57.4628 -176.25 + 61 7.60097 611 1 0 50.8965 -57.65 -175.873 + 61 153.962 1154 1 1 50.8671 -58.2194 -174.85 + 61 112.075 541 2 0 86.6016 -71.6937 -146.25 + 61 89.8105 540 2 0 86.8962 -71.8502 -146.072 + 61 42.6079 539 2 0 87.0775 -72.0502 -145.91 + 61 26.5838 1340 2 1 88.2081 -73.5137 -144.85 + 61 132.504 1341 2 1 88.25 -73.5734 -144.778 + 61 96.4765 1213 0 1 62.85 12.5987 -204.608 + 61 42.2142 968 0 0 62.6099 13.7343 -205.85 + 61 67.7932 969 0 0 62.5882 13.85 -205.971 + 61 36.0222 970 0 0 62.5375 14.05 -206.174 + 61 4.91253 1141 3 1 48.2831 11.3723 -114.45 + 61 309.573 1211 6 1 62.4129 14.1855 -24.45 + 61 217.343 970 6 0 62.4357 14.1941 -25.85 + 61 105.267 1214 5 1 62.9622 14.4367 -54.45 + 61 115.621 972 5 0 63.1104 14.4521 -55.85 + 61 233.857 1231 4 1 66.363 14.7205 -84.45 + 61 148.398 973 4 0 66.4185 14.6751 -85.85 + 61 140.183 1237 3 1 67.4861 13.5715 -114.45 + 61 144.736 967 3 0 67.5288 13.6025 -115.85 + 61 114.195 1239 2 1 67.8997 14.7021 -144.45 + 61 15.1282 1238 2 1 67.85 14.7008 -144.813 + 61 118.226 973 2 0 67.6991 14.6954 -145.85 + 61 118.515 1218 1 1 63.7571 15.0952 -174.45 + 61 120.012 975 1 0 63.5909 15.1259 -175.85 + 61 33.9711 1199 0 1 59.8659 15.9747 -204.451 + 61 74.8199 1198 0 1 59.85 15.9738 -204.557 + 61 157.067 979 0 0 59.6329 15.9649 -205.85 + 61 50.2733 971 2 0 68.5039 14.3504 -145.85 + 61 248.95 970 2 0 68.5237 14.2498 -145.99 + 61 188.489 969 2 0 68.1985 14.0499 -146.118 + 61 231.127 971 5 0 63.143 14.4497 -56.1601 + 61 2.60446 975 5 0 60.3007 15.05 -56.0303 + 61 56.8785 1073 5 1 34.85 16.0615 -54.6298 + 61 38.5781 1302 0 1 80.45 -28.6518 -204.728 + 61 119.913 969 6 0 62.1537 14.0038 -25.8501 + 61 152.277 1177 5 1 55.5898 17.3784 -54.45 + 61 66.9875 987 5 0 55.2885 17.623 -55.85 + 61 80.9761 988 5 0 55.2571 17.65 -55.9993 + 61 143.182 1147 4 1 49.5377 22.9929 -84.45 + 61 164.586 1016 4 0 49.7332 23.3194 -85.85 + 61 155.133 1164 3 1 52.8661 28.9662 -114.45 + 61 117.889 1046 3 0 53.1734 29.2592 -115.85 + 61 229.85 1191 2 1 58.3856 34.9257 -144.45 + 61 30.5128 1076 2 0 58.4033 35.4269 -145.85 + 61 196.985 1077 2 0 58.4039 35.45 -145.914 + 61 92.3372 1200 1 1 60.1563 44.9582 -174.45 + 61 46.0755 1201 1 1 60.25 45.1977 -174.709 + 61 23.8341 1130 1 0 60.6772 46.1898 -175.85 + 61 109.609 1131 1 0 60.7028 46.25 -175.914 + 61 62.4552 1132 1 0 60.7977 46.45 -176.11 + 61 65.7847 1280 0 1 76.1564 73.1985 -204.45 + 61 277.028 1281 0 1 76.25 73.3706 -204.623 + 61 89.5373 1278 0 0 77.1173 75.8056 -205.85 + 61 134.849 1279 0 0 77.1316 75.8502 -205.87 + 61 80.7328 1280 0 0 77.1611 76.0501 -206.006 + 61 25.2324 1281 0 0 77.1655 76.25 -206.19 + 61 122.614 1277 0 0 72.0565 75.6499 -206.01 + 61 36.8143 1249 0 1 69.9773 74 -204.85 + 61 64.2566 1248 0 1 69.85 73.9195 -204.777 + 61 88.8902 1247 0 1 69.65 73.8146 -204.761 + 61 64.7957 1246 0 1 69.45 73.7264 -204.664 + 61 123.795 1245 0 1 69.25 73.686 -204.592 + 61 44.1375 1717 0 0 100.526 163.552 -206.25 + 61 434.61 1008 0 1 21.85 40.2245 -204.637 + 61 67.5328 1212 6 1 62.45 13.942 -24.6237 + 61 102.378 973 6 0 62.7001 14.6718 -25.85 + 61 38.7655 974 6 0 62.7676 14.85 -26.1387 + 61 156.497 1241 5 1 68.4131 36.4158 -54.45 + 61 56.3044 1242 5 1 68.45 36.813 -54.7704 + 61 61.9064 1090 5 0 68.7257 38.0644 -55.8501 + 61 339.331 1091 5 0 68.75 38.25 -56.02 + 61 267.763 1092 5 0 68.7524 38.4502 -56.191 + 61 69.1369 1674 5 0 65.2958 154.979 -56.25 + 61 53.9135 1675 5 0 65.2854 155.15 -56.1883 + 61 129.855 1676 5 0 65.2653 155.35 -56.1516 + 61 67.463 1677 5 0 65.2081 155.55 -56.0861 + 61 53.7119 1678 5 0 65.1234 155.75 -56.0042 + 61 45.9948 1679 5 0 65.0532 155.95 -55.9303 + 61 26.9275 1222 5 1 64.4575 157.589 -54.8497 + 61 361.534 1221 5 1 64.45 157.61 -54.8349 + 61 77.8224 1220 5 1 64.2499 158.06 -54.5232 + 61 66.4609 1219 5 1 64.05 158.072 -54.6497 + 61 8.91431 1218 5 1 63.85 158.066 -54.83 + 61 215.256 1689 5 0 62.8837 158.066 -55.85 +Number of digits in this event: 78 +Using G4ParticleGun... +Particle energy: 8.41892 LIN Particle: e- Event: 62 -Number of tracker hits in this event: 68 - 62 204.645 737 11 1 -32.6156 -8.01105 125.55 - 62 94.0933 860 11 0 -32.6135 -8.01061 124.15 - 62 128.809 737 10 1 -32.5775 -8.01375 95.55 - 62 98.1189 860 10 0 -32.5752 -8.01381 94.15 - 62 180.786 737 9 1 -32.526 -8.01249 65.55 - 62 103.084 860 9 0 -32.5246 -8.01081 64.15 - 62 305.62 737 8 1 -32.4983 -7.98217 35.55 - 62 140.272 860 8 0 -32.4958 -7.98026 34.15 - 62 111.72 738 7 1 -32.4426 -7.94672 5.55 - 62 195.972 860 7 0 -32.4382 -7.94369 4.15 - 62 110.94 738 6 1 -32.3639 -7.8904 -24.45 - 62 122.409 860 6 0 -32.3613 -7.88953 -25.85 - 62 120.373 738 5 1 -32.2953 -7.8684 -54.45 - 62 95.4946 860 5 0 -32.2957 -7.86918 -55.85 - 62 125.658 738 4 1 -32.2964 -7.87998 -84.45 - 62 158.123 860 4 0 -32.2922 -7.87915 -85.85 - 62 120.325 739 3 1 -32.2116 -7.87584 -114.45 - 62 115.628 860 3 0 -32.2032 -7.87564 -115.85 - 62 128.309 740 2 1 -32.0189 -7.88323 -144.45 - 62 129.129 860 2 0 -32.0103 -7.8784 -145.85 - 62 442.051 741 1 1 -31.8135 -7.78265 -174.45 - 62 481.04 861 1 0 -31.807 -7.77613 -175.85 - 62 109.966 741 0 1 -31.6714 -7.63613 -204.45 - 62 87.7459 862 0 0 -31.6635 -7.63286 -205.85 - 62 36.8835 1639 14 0 -12.954 148.13 213.75 - 62 91.1173 1640 14 0 -12.9588 148.15 213.762 - 62 162.449 1565 14 0 6.94625 133.217 213.75 - 62 74.7459 931 14 1 6.42699 133.382 215.15 - 62 319.427 930 14 1 6.25 133.433 215.283 - 62 237.22 929 14 1 6.04964 133.577 215.276 - 62 144.75 471 0 1 -85.65 -39.1673 -204.659 - 62 139.162 516 1 0 -110.262 -76.6731 -176.25 - 62 128.936 470 0 1 -85.85 -38.9712 -204.547 - 62 172.489 469 0 1 -86.05 -38.8973 -204.481 - 62 195.66 715 0 1 -36.8798 -22.6335 -204.85 - 62 176.767 810 1 0 20.8702 -17.9223 -176.25 - 62 127.395 742 1 1 -31.6499 -7.37207 -174.665 - 62 55.6137 743 1 1 -31.45 -7.0799 -174.76 - 62 7.37799 872 1 0 -30.7424 -5.47687 -175.85 - 62 74.058 873 1 0 -30.7323 -5.4499 -175.867 - 62 75.467 874 1 0 -30.7016 -5.24985 -176.021 - 62 5.88943 875 1 0 -30.713 -5.05 -176.233 - 62 7.48421 736 0 1 -32.844 19.1801 -204.45 - 62 108.315 735 0 1 -32.85 19.1793 -204.478 - 62 187.636 734 0 1 -33.05 19.1894 -204.779 - 62 161.347 733 0 1 -33.2501 19.1766 -204.781 - 62 89.4138 755 0 1 -29.05 33.3686 -204.666 - 62 25.6161 756 0 1 -28.85 33.8293 -204.817 - 62 197.198 1070 0 0 -28.5686 34.1123 -205.85 - 62 119.97 748 0 1 -30.3327 -7.14683 -204.45 - 62 115.689 864 0 0 -30.1873 -7.22875 -205.85 - 62 239.772 740 1 1 -31.9891 -7.75512 -174.45 - 62 103.319 866 1 0 -32.0704 -6.70353 -175.85 - 62 203.958 867 1 0 -32.0702 -6.65 -175.923 - 62 29.5496 868 1 0 -32.0644 -6.45 -176.184 - 62 67.0571 1073 1 0 -36.5991 34.6755 -176.25 - 62 55.3344 1074 1 0 -36.6395 34.85 -176.033 - 62 171.707 715 1 1 -36.9099 35.4647 -174.85 - 62 19.1965 714 1 1 -37.05 35.6325 -174.5 - 62 83.3868 1099 2 0 -33.6903 39.9173 -146.25 - 62 50.4773 1100 2 0 -33.6618 40.0504 -145.98 - 62 102.088 736 2 1 -32.8082 39.8051 -144.85 - 62 63.0546 737 2 1 -32.6495 39.849 -144.611 - 62 111.609 1049 1 1 29.85 -38.0627 -174.672 - 62 59.952 739 1 1 -32.05 -7.77874 -174.671 - 62 154.125 706 0 1 -38.833 -6.98941 -204.45 - 62 139.929 867 0 0 -38.3338 -6.59773 -205.85 - 62 106.904 1618 1 0 -62.5843 143.771 -176.25 -Number of digits in this event: 35 +Number of tracker hits in this event: 61 + 62 109.786 617 7 1 -56.6265 136.714 5.55 + 62 110.935 1582 7 0 -56.6265 136.713 4.15 + 62 128.353 617 6 1 -56.6292 136.697 -24.45 + 62 148.104 1582 6 0 -56.6294 136.696 -25.85 + 62 177.66 617 5 1 -56.6313 136.681 -54.45 + 62 108.361 1582 5 0 -56.6312 136.68 -55.85 + 62 105.063 617 4 1 -56.6227 136.667 -84.45 + 62 114.579 1582 4 0 -56.6227 136.667 -85.85 + 62 133.633 617 3 1 -56.6214 136.646 -114.45 + 62 379.747 1582 3 0 -56.6202 136.644 -115.85 + 62 459.091 617 2 1 -56.5914 136.585 -144.45 + 62 125.583 1582 2 0 -56.5882 136.581 -145.85 + 62 548.629 617 1 1 -56.52 136.486 -174.45 + 62 198.415 1581 1 0 -56.5158 136.483 -175.85 + 62 122.16 618 0 1 -56.4322 136.431 -204.45 + 62 161.099 1581 0 0 -56.4277 136.427 -205.85 + 62 15.0513 770 4 1 -26.05 135.862 -84.6845 + 62 28.7261 766 4 1 -26.6939 135.284 -84.45 + 62 150.495 767 4 1 -26.6499 135.241 -84.4511 + 62 89.438 546 7 0 -140.978 -70.6612 3.75 + 62 259.583 1581 2 0 -56.7307 136.431 -145.85 + 62 304.361 620 1 1 -55.9391 134.916 -174.45 + 62 114.728 1572 1 0 -55.7141 134.667 -175.85 + 62 19.4856 1626 1 0 -29.855 145.497 -176.25 + 62 86.7314 1627 1 0 -29.8172 145.55 -176.191 + 62 42.9363 1628 1 0 -29.6796 145.75 -175.99 + 62 193.898 753 1 1 -29.2938 146.796 -174.85 + 62 158.749 619 1 1 -56.0505 134.678 -174.701 + 62 172.469 618 1 1 -56.25 134.612 -174.638 + 62 57.7841 616 1 1 -56.65 134.7 -174.805 + 62 514.427 1582 1 0 -58.1885 136.659 -175.85 + 62 9.07623 1583 1 0 -59.5789 136.75 -176.237 + 62 64.6809 1551 1 0 -131.347 130.483 -176.25 + 62 78.0311 1550 1 0 -131.358 130.35 -176.078 + 62 10.2735 245 1 1 -130.961 129.676 -174.849 + 62 191.534 246 1 1 -130.95 129.658 -174.818 + 62 5.96008 247 1 1 -130.75 129.674 -174.467 + 62 74.4106 1580 1 0 -58.473 136.35 -176.127 + 62 18.104 1579 1 0 -58.6177 136.15 -176.238 + 62 41.8586 1224 4 0 -90.7666 65.05 -86.2031 + 62 189.942 450 4 1 -90.0268 64.1144 -84.85 + 62 37.5639 610 2 1 -58.0266 137.051 -144.45 + 62 66.9813 609 2 1 -58.05 137.058 -144.578 + 62 303.739 1585 2 0 -58.3003 137.229 -145.85 + 62 191.748 581 1 1 -63.7022 143.643 -174.45 + 62 11.3829 1618 1 0 -63.9122 143.938 -175.85 + 62 126.513 1619 1 0 -63.9212 143.95 -175.907 + 62 86.3765 563 0 1 -67.3833 148.845 -204.45 + 62 32.6985 562 0 1 -67.45 148.919 -204.762 + 62 107.145 1645 0 0 -67.6816 149.151 -205.85 + 62 115.5 627 2 1 -54.5865 137.598 -144.45 + 62 16.3071 626 2 1 -54.65 137.522 -144.77 + 62 53.1182 1584 2 0 -54.9725 137.15 -146.072 + 62 113.869 579 1 1 -64.0721 131.398 -174.45 + 62 119.613 1555 1 0 -64.5849 131.216 -175.85 + 62 13.4809 552 0 1 -69.6219 132.673 -204.45 + 62 186.293 551 0 1 -69.6503 132.716 -204.484 + 62 83.5528 550 0 1 -69.85 133.034 -204.686 + 62 71.2541 1572 0 0 -70.35 134.606 -205.85 + 62 82.0547 1573 0 0 -70.3982 134.75 -205.975 + 62 25.9113 1574 0 0 -70.436 134.95 -206.163 +Number of digits in this event: 27 Using G4ParticleGun... -Particle energy: 9.28727 LIN +Particle energy: 7.21016 LIN Particle: e- Event: 63 -Number of tracker hits in this event: 29 - 63 126.044 1088 7 1 37.7063 142.974 5.55 - 63 171.517 1614 7 0 37.7069 142.974 4.15 - 63 176.199 1088 6 1 37.7251 142.973 -24.45 - 63 140.028 1614 6 0 37.7238 142.973 -25.85 - 63 140.939 1088 5 1 37.6868 142.97 -54.45 - 63 254.174 1614 5 0 37.6832 142.97 -55.85 - 63 147.448 1087 4 1 37.6006 142.982 -84.45 - 63 128.352 1614 4 0 37.598 142.981 -85.85 - 63 147.358 1087 3 1 37.5633 142.957 -114.45 - 63 123.249 1614 3 0 37.5569 142.961 -115.85 - 63 120.777 1086 2 1 37.4438 143.051 -144.45 - 63 111.336 1614 2 0 37.4367 143.057 -145.85 - 63 119.905 1086 1 1 37.2935 143.177 -174.45 - 63 127.846 1615 1 0 37.2867 143.177 -175.85 - 63 211.841 1085 0 1 37.1473 143.191 -204.45 - 63 124.554 1615 0 0 37.1413 143.19 -205.85 - 63 238.295 368 3 1 -106.35 38.4496 -114.576 - 63 5.22759 1751 14 1 170.536 -178.088 215.55 - 63 72.0955 1752 14 1 170.55 -178.088 215.538 - 63 74.4569 1753 14 1 170.75 -178.126 215.422 - 63 297.488 310 7 0 108.018 -118.067 4.15 - 63 28.5718 306 7 0 108.959 -118.75 4.06902 - 63 128.447 1611 0 0 37.1156 142.41 -205.85 - 63 97.2675 1087 5 1 37.65 142.917 -54.7057 - 63 81.7072 1086 5 1 37.4499 142.722 -54.6152 - 63 116.184 1085 5 1 37.25 142.614 -54.5614 - 63 127.92 1084 5 1 37.05 142.403 -54.6181 - 63 78.2355 1083 5 1 36.85 142.201 -54.6779 - 63 152.139 1608 5 0 37.0265 141.914 -55.85 -Number of digits in this event: 21 -Using G4ParticleGun... -Particle energy: 4.99243 LIN +Number of tracker hits in this event: 132 + 63 146.546 396 10 1 -100.806 -37.1779 95.55 + 63 135.102 714 10 0 -100.808 -37.1775 94.15 + 63 397.475 396 9 1 -100.84 -37.1702 65.55 + 63 358.806 714 9 0 -100.84 -37.1675 64.15 + 63 642.674 396 8 1 -100.847 -37.1154 35.55 + 63 353.086 714 8 0 -100.849 -37.1117 34.15 + 63 400.71 396 7 1 -100.884 -37.0306 5.55 + 63 244.372 715 7 0 -100.885 -37.0278 4.15 + 63 358.47 396 6 1 -100.902 -36.9691 -24.45 + 63 109.647 715 6 0 -100.901 -36.9671 -25.85 + 63 245.397 396 5 1 -100.883 -36.9207 -54.45 + 63 102.074 715 5 0 -100.883 -36.9203 -55.85 + 63 363.714 396 4 1 -100.88 -36.9211 -84.45 + 63 394.916 715 4 0 -100.88 -36.9223 -85.85 + 63 577.414 396 3 1 -100.876 -36.943 -114.45 + 63 270.975 715 3 0 -100.874 -36.9442 -115.85 + 63 192.606 396 2 1 -100.832 -36.9781 -144.45 + 63 351.881 715 2 0 -100.83 -36.9815 -145.85 + 63 138.399 396 1 1 -100.792 -37.0524 -174.45 + 63 129.854 714 1 0 -100.792 -37.0518 -175.85 + 63 122.323 396 0 1 -100.793 -37.0466 -204.45 + 63 128.445 715 0 0 -100.794 -37.0453 -205.85 + 63 43.5507 395 2 1 -100.95 -36.9645 -144.718 + 63 168.469 641 2 0 -131.004 -51.7359 -146.249 + 63 146.806 245 2 1 -131.124 -52.0825 -144.85 + 63 371.317 244 2 1 -131.15 -52.1286 -144.66 + 63 199.98 397 6 1 -100.75 -36.8864 -24.5822 + 63 1.01754 719 6 0 -100.714 -36.0529 -25.85 + 63 81.0454 720 6 0 -100.715 -36.05 -25.854 + 63 54.766 721 6 0 -100.722 -35.8499 -26.0934 + 63 83.5869 722 6 0 -100.704 -35.6495 -26.1485 + 63 49.4912 723 6 0 -100.686 -35.4499 -26.1937 + 63 51.9333 432 5 1 -93.6699 42.7704 -54.45 + 63 172.249 431 5 1 -93.75 42.7681 -54.6404 + 63 102.412 1112 5 0 -93.9238 42.5826 -55.85 + 63 90.6111 430 5 1 -93.95 42.6777 -54.8431 + 63 49.2932 1116 5 0 -96.785 43.4121 -55.85 + 63 92.8795 410 5 1 -98.0134 44.4178 -54.85 + 63 121.754 392 3 1 -101.69 -37.2948 -114.45 + 63 121.976 712 3 0 -101.327 -37.4605 -115.85 + 63 118.34 425 2 1 -95.0418 -42.4842 -144.45 + 63 30.0979 426 2 1 -94.95 -42.5421 -144.74 + 63 146.671 686 2 0 -94.7116 -42.6899 -145.85 + 63 84.0867 471 1 1 -85.6933 -45.3372 -174.45 + 63 154.107 472 1 1 -85.65 -45.3369 -174.484 + 63 145.385 473 1 1 -85.45 -45.3034 -174.635 + 63 39.1337 474 1 1 -85.2496 -45.3036 -174.754 + 63 143.03 670 1 0 -83.4327 -45.8543 -175.85 + 63 76.1638 669 1 0 -83.086 -46.05 -175.927 + 63 161.946 486 1 1 -82.7476 -45.0928 -174.85 + 63 68.2456 485 1 1 -82.85 -44.7417 -174.489 + 63 59.0124 484 1 1 -83.05 -44.6473 -174.504 + 63 113.559 483 1 1 -83.25 -44.6916 -174.5 + 63 211.939 482 1 1 -83.45 -44.8332 -174.469 + 63 310.393 738 3 1 -32.45 -123.7 -114.647 + 63 48.9438 470 1 1 -85.85 -45.6166 -174.755 + 63 52.8203 674 1 0 -86.7708 -45.1355 -175.85 + 63 95.3439 675 1 0 -86.8222 -45.0499 -175.99 + 63 3.2553 676 1 0 -86.7239 -44.85 -176.238 + 63 121.825 394 2 1 -101.224 -37.121 -144.45 + 63 122.556 714 2 0 -101.219 -37.1136 -145.85 + 63 129.155 394 1 1 -101.222 -36.85 -174.45 + 63 120.095 716 1 0 -101.229 -36.8358 -175.85 + 63 119.608 394 0 1 -101.334 -36.5978 -204.45 + 63 118.196 717 0 0 -101.307 -36.5445 -205.85 + 63 144.962 641 2 1 -51.7417 1.82826 -144.85 + 63 266.498 395 4 1 -100.95 -37.0118 -84.6487 + 63 103.243 714 7 0 -100.807 -37.1598 4.15 + 63 99.2873 714 6 0 -100.64 -37.1753 -25.85 + 63 112.402 398 5 1 -100.507 -37.2919 -54.45 + 63 162.151 713 5 0 -100.499 -37.2971 -55.85 + 63 104.673 398 4 1 -100.362 -37.3976 -84.45 + 63 123.764 713 4 0 -100.36 -37.4102 -85.85 + 63 116.481 399 3 1 -100.314 -37.6589 -114.45 + 63 96.6741 711 3 0 -100.313 -37.6716 -115.85 + 63 126.869 399 2 1 -100.274 -37.9447 -144.45 + 63 134.808 710 2 0 -100.268 -37.9576 -145.85 + 63 108.871 400 1 1 -100.142 -38.2328 -174.45 + 63 259.542 709 1 0 -100.136 -38.2446 -175.85 + 63 120.018 400 0 1 -100.015 -38.4805 -204.45 + 63 235.073 707 0 0 -100.008 -38.4979 -205.85 + 63 325.722 661 0 0 -101.431 -47.7108 -206.25 + 63 240.406 154 1 1 -149.337 -142.202 -174.85 + 63 210.351 153 1 1 -149.35 -142.233 -174.832 + 63 17.1554 155 1 1 -149.15 -143.265 -174.532 + 63 149.232 182 1 0 -149.06 -143.628 -175.85 + 63 1.28384 181 1 0 -149.048 -143.75 -176.245 + 63 156.712 132 1 0 -113.802 -153.603 -176.25 + 63 153.191 131 1 0 -113.533 -153.75 -176.062 + 63 64.709 331 1 1 -113.836 -154.597 -174.85 + 63 460.755 330 1 1 -113.95 -154.695 -174.695 + 63 3.43618 329 1 1 -114.15 -154.918 -174.682 + 63 18.544 112 1 0 -114.789 -157.576 -175.85 + 63 137.692 323 1 1 -115.452 -156.768 -174.85 + 63 105.36 717 6 0 -100.891 -36.597 -25.85 + 63 159.186 720 5 0 -100.772 -35.9641 -55.85 + 63 118.888 397 4 1 -100.638 -35.6472 -84.45 + 63 105.059 721 4 0 -100.646 -35.6504 -85.85 + 63 147.159 721 3 0 -100.866 -35.8074 -115.85 + 63 105.537 393 2 1 -101.536 -36.485 -144.45 + 63 130.9 717 2 0 -101.569 -36.5274 -145.85 + 63 269.253 389 1 1 -102.286 -37.4939 -174.45 + 63 114.458 712 1 0 -102.321 -37.5407 -175.85 + 63 99.2823 385 0 1 -103.035 -38.4822 -204.45 + 63 2.51923 710 1 0 -102.378 -38.0436 -175.85 + 63 148.192 571 1 0 -90.2571 -65.6535 -176.25 + 63 2.22301 570 1 0 -90.1541 -65.8502 -175.931 + 63 138.038 451 1 1 -89.7588 -66.3709 -174.85 + 63 23.8808 487 2 0 -107.453 -82.5936 -146.25 + 63 86.1179 486 2 0 -107.508 -82.65 -146.171 + 63 51.7631 485 2 0 -107.637 -82.85 -145.952 + 63 12.4872 360 2 1 -108.142 -84.2765 -144.85 + 63 245.06 359 2 1 -108.15 -84.2978 -144.833 + 63 52.3134 358 2 1 -108.35 -84.9613 -144.529 + 63 31.8618 356 2 1 -108.847 -85.1017 -144.45 + 63 170.749 355 2 1 -108.95 -85.1297 -144.486 + 63 167.848 354 2 1 -109.15 -85.1882 -144.597 + 63 48.4722 353 2 1 -109.35 -85.2786 -144.746 + 63 270.883 472 2 0 -110.245 -85.467 -145.85 + 63 114.503 537 2 0 -84.8817 -72.6105 -146.25 + 63 99.3887 473 2 1 -85.3522 -72.0617 -144.85 + 63 56.1185 472 2 1 -85.45 -72.0484 -144.595 + 63 14.0107 1720 0 0 -133.313 164.15 -206.034 + 63 54.1057 1721 0 0 -133.345 164.35 -206.003 + 63 59.2357 1722 0 0 -133.404 164.55 -206.018 + 63 149.327 1723 0 0 -133.493 164.75 -206.064 + 63 99.8538 1724 0 0 -133.53 164.95 -206.163 + 63 19.565 1725 0 0 -133.6 165.15 -206.243 + 63 3.33079 706 6 0 -34.629 -38.85 -26.0035 + 63 135.689 397 10 1 -100.75 -37.181 95.3973 + 63 52.2663 742 10 0 -97.2244 -31.561 94.15 + 63 211.384 743 10 0 -97.1941 -31.45 94.1251 +Number of digits in this event: 71 +Using G4ParticleGun... +Particle energy: 5.36846 LIN Particle: e- Event: 64 -Number of tracker hits in this event: 45 - 64 154.476 1514 8 1 122.989 -58.0224 35.55 - 64 189.002 610 8 0 122.99 -58.0233 34.15 - 64 160.919 1514 7 1 123.007 -58.0445 5.55 - 64 112.747 610 7 0 123.008 -58.0456 4.15 - 64 102.615 1514 6 1 123.041 -58.075 -24.45 - 64 171.915 609 6 0 123.04 -58.077 -25.85 - 64 285.573 1514 5 1 123.016 -58.1153 -54.45 - 64 139.526 609 5 0 123.017 -58.1178 -55.85 - 64 188.235 1514 4 1 123.034 -58.1648 -84.45 - 64 117.424 609 4 0 123.036 -58.1669 -85.85 - 64 295.65 1514 3 1 123.091 -58.2082 -114.45 - 64 111.434 609 3 0 123.097 -58.2101 -115.85 - 64 461.125 1515 2 1 123.196 -58.2637 -144.45 - 64 320.696 608 2 0 123.205 -58.2643 -145.85 - 64 113.421 1516 1 1 123.352 -58.2888 -174.45 - 64 157.16 608 1 0 123.36 -58.29 -175.85 - 64 236.821 1516 0 1 123.503 -58.2926 -204.45 - 64 114.545 608 0 0 123.512 -58.2877 -205.85 - 64 9.47046 1002 1 1 20.65 -79.6668 -174.628 - 64 130.935 1512 1 1 122.74 -58.8499 -174.45 - 64 134.783 605 1 0 122.698 -58.8604 -175.85 - 64 126.833 1509 0 1 121.991 -59.3738 -204.45 - 64 136.531 603 0 0 122.132 -59.316 -205.85 - 64 172.921 604 0 0 122.148 -59.25 -206.159 - 64 128.209 609 2 0 123.202 -58.2402 -145.85 - 64 319.429 1515 1 1 123.35 -58.3025 -174.451 - 64 62.5313 599 1 0 122.611 -60.1018 -175.85 - 64 104.767 598 1 0 122.554 -60.2501 -175.967 - 64 49.0214 597 1 0 122.484 -60.45 -176.125 - 64 230.292 1453 0 1 110.904 -99.022 -204.45 - 64 9.67862 402 0 0 110.748 -99.7333 -205.85 - 64 199.921 401 0 0 110.744 -99.75 -205.883 - 64 123.86 1513 2 1 122.897 -58.5561 -144.45 - 64 19.7872 606 2 0 122.967 -58.8371 -145.85 - 64 103.706 605 2 0 122.971 -58.85 -145.912 - 64 42.0093 1526 1 1 125.393 -66.5665 -174.45 - 64 93.4535 1525 1 1 125.35 -66.6566 -174.591 - 64 99.9114 563 1 0 124.676 -67.3675 -175.85 - 64 99.5335 562 1 0 124.588 -67.45 -176.011 - 64 149.05 1432 0 1 106.66 -84.4134 -204.45 - 64 56.6158 472 0 0 106.508 -85.5181 -205.85 - 64 73.6956 471 0 0 106.495 -85.65 -206.029 - 64 0.382106 470 0 0 106.499 -85.85 -206.248 - 64 203.648 1513 8 1 122.95 -58.0124 35.4681 - 64 70.8675 1512 8 1 122.75 -57.9716 35.3678 -Number of digits in this event: 26 +Number of tracker hits in this event: 25 + 64 42.3739 356 10 0 42.5249 -108.94 93.9351 + 64 110.255 1112 9 1 42.5274 -108.941 65.55 + 64 132.196 356 9 0 42.5276 -108.941 64.15 + 64 123.048 1112 8 1 42.5316 -108.957 35.55 + 64 144.225 355 8 0 42.5291 -108.96 34.15 + 64 249.508 1112 7 1 42.4786 -109.006 5.55 + 64 111.452 355 7 0 42.4752 -109.01 4.15 + 64 129.27 1111 6 1 42.4035 -109.103 -24.45 + 64 155.049 355 6 0 42.3996 -109.106 -25.85 + 64 119.15 1111 5 1 42.3317 -109.16 -54.45 + 64 161.509 354 5 0 42.3281 -109.165 -55.85 + 64 116.141 1110 4 1 42.2426 -109.252 -84.45 + 64 138.597 354 4 0 42.2329 -109.252 -85.85 + 64 180.263 1109 3 1 42.0431 -109.264 -114.45 + 64 111.666 354 3 0 42.0363 -109.262 -115.85 + 64 284.132 1109 2 1 41.919 -109.259 -144.45 + 64 124.989 354 2 0 41.9168 -109.259 -145.85 + 64 127.99 1109 1 1 41.9107 -109.233 -174.45 + 64 135.497 354 1 0 41.9217 -109.234 -175.85 + 64 158.036 1110 0 1 42.1486 -109.29 -204.45 + 64 101.457 354 0 0 42.1638 -109.3 -205.85 + 64 52.6683 1110 2 1 42.05 -109.285 -144.735 + 64 225.217 1108 0 1 41.8391 -109.558 -204.45 + 64 328.761 352 0 0 41.8378 -109.563 -205.85 + 64 94.4642 1111 7 1 42.45 -109.048 5.44205 +Number of digits in this event: 18 Using G4ParticleGun... -Particle energy: 6.96345 LIN +Particle energy: 8.33984 LIN Particle: e- Event: 65 -Number of tracker hits in this event: 31 - 65 117.738 1183 11 1 56.808 48.9509 125.55 - 65 144.346 1144 11 0 56.8074 48.9501 124.15 - 65 133.354 1183 10 1 56.8341 48.9494 95.55 - 65 116.897 1144 10 0 56.8349 48.9499 94.15 - 65 175.87 1183 9 1 56.8473 48.9629 65.55 - 65 98.1966 1144 9 0 56.8457 48.96 64.15 - 65 134.739 1183 8 1 56.8099 48.9144 35.55 - 65 102.828 1144 8 0 56.81 48.9142 34.15 - 65 126.436 1183 7 1 56.828 48.9211 5.55 - 65 128.031 1144 7 0 56.8317 48.9218 4.15 - 65 125.441 1184 6 1 56.9267 48.95 -24.45 - 65 102.148 1144 6 0 56.9362 48.9512 -25.85 - 65 141.512 1185 5 1 57.1494 48.9854 -54.45 - 65 127.196 1144 5 0 57.1522 48.9908 -55.85 - 65 97.8084 1185 4 1 57.2121 49.1029 -84.45 - 65 114.162 1145 4 0 57.2248 49.1159 -85.85 - 65 117.257 1187 3 1 57.5239 49.4034 -114.45 - 65 115.411 1146 3 0 57.5409 49.4265 -115.85 - 65 156.017 1189 2 1 57.8834 49.8864 -144.45 - 65 134.274 1149 2 0 57.9051 49.9135 -145.85 - 65 177.848 1191 1 1 58.3432 50.4649 -174.45 - 65 150.132 1152 1 0 58.3625 50.4934 -175.85 - 65 123.341 1193 0 1 58.7654 51.0641 -204.45 - 65 284.929 1155 0 0 58.7874 51.0831 -205.85 - 65 142.011 1192 0 1 58.4998 50.3742 -204.45 - 65 94.109 1191 0 1 58.45 50.4204 -204.564 - 65 177.272 1150 0 0 58.255 50.1755 -205.85 - 65 100.586 1566 5 1 133.45 2.47151 -54.85 - 65 55.9241 1567 5 1 133.55 2.42383 -54.7999 - 65 15.3493 910 5 0 133.685 2.06346 -55.85 - 65 124.676 909 5 0 133.682 2.05 -55.867 -Number of digits in this event: 21 +Number of tracker hits in this event: 41 + 65 118.834 433 10 1 -93.4581 -27.571 95.55 + 65 111.711 762 10 0 -93.4586 -27.5719 94.15 + 65 122.402 433 9 1 -93.4693 -27.5944 65.55 + 65 128.77 762 9 0 -93.4694 -27.5952 64.15 + 65 117.836 433 8 1 -93.4728 -27.6118 35.55 + 65 111.379 762 8 0 -93.4727 -27.6117 34.15 + 65 273.621 433 7 1 -93.4714 -27.6065 5.55 + 65 103.982 762 7 0 -93.4722 -27.6067 4.15 + 65 114.221 433 6 1 -93.4847 -27.6138 -24.45 + 65 103.455 762 6 0 -93.4848 -27.6141 -25.85 + 65 122.592 433 5 1 -93.4851 -27.6163 -54.45 + 65 138.679 762 5 0 -93.4862 -27.6156 -55.85 + 65 228.598 433 4 1 -93.507 -27.6079 -84.45 + 65 135.073 762 4 0 -93.5093 -27.6085 -85.85 + 65 95.1365 432 3 1 -93.5606 -27.6248 -114.45 + 65 105.082 762 3 0 -93.5633 -27.6263 -115.85 + 65 96.1972 432 2 1 -93.6181 -27.6583 -144.45 + 65 112.535 761 2 0 -93.6256 -27.654 -145.85 + 65 110.274 432 1 1 -93.6306 -27.6699 -174.45 + 65 231.446 761 1 0 -93.6364 -27.6761 -175.85 + 65 119.165 431 0 1 -93.7845 -27.7999 -204.45 + 65 129.514 761 0 0 -93.8023 -27.8119 -205.85 + 65 113.243 712 1 1 -37.4835 -4.23039 -174.85 + 65 100.138 713 1 1 -37.4492 -4.22485 -174.737 + 65 32.8559 890 1 0 -36.2845 -2.04025 -175.85 + 65 27.4858 706 1 1 -38.691 3.67204 -174.85 + 65 3.6041 931 1 0 -40.1504 6.3641 -175.85 + 65 0.740941 621 1 1 -55.8083 31.8587 -174.85 + 65 217.414 1074 1 0 -59.8635 34.9009 -175.85 + 65 85.6225 1073 1 0 -59.7391 34.85 -175.965 + 65 91.7538 735 0 0 -54.9044 -32.853 -206.25 + 65 222.833 736 0 0 -54.7806 -32.85 -206.077 + 65 66.0709 648 2 0 -30.1124 -50.4172 -146.25 + 65 136.973 55 9 0 -10.1845 -168.969 63.75 + 65 36.6468 88 2 0 -120.344 -162.35 -146.065 + 65 265.733 433 1 1 -93.4059 -27.6801 -174.45 + 65 168.249 762 1 0 -93.3756 -27.5863 -175.85 + 65 150.431 442 0 1 -91.6818 -25.2331 -204.45 + 65 109.078 773 0 0 -91.6299 -25.3656 -205.85 + 65 169.836 435 0 1 -92.9919 -27.5326 -204.45 + 65 107.454 763 0 0 -92.9607 -27.4424 -205.85 +Number of digits in this event: 18 Using G4ParticleGun... -Particle energy: 2.25605 LIN +Particle energy: 6.92516 LIN Particle: e- Event: 66 -Number of tracker hits in this event: 56 - 66 103.267 1050 10 1 30.0976 84.8889 95.55 - 66 133.592 1324 10 0 30.0953 84.8934 94.15 - 66 109.902 1049 9 1 30.0301 84.9985 65.55 - 66 117.654 1324 9 0 30.0305 85.0026 64.15 - 66 201.647 1049 8 1 30.0493 85.0867 35.55 - 66 162.692 1325 8 0 30.044 85.0853 34.15 - 66 99.2702 1049 7 1 29.9426 85.0789 5.55 - 66 127.361 1325 7 0 29.9368 85.0811 4.15 - 66 245.641 1048 6 1 29.829 85.0973 -24.45 - 66 379.069 1325 6 0 29.8267 85.0972 -25.85 - 66 116.097 1048 5 1 29.7564 85.0974 -54.45 - 66 227.88 1325 5 0 29.7461 85.1045 -55.85 - 66 117.397 1047 4 1 29.5307 85.2756 -84.45 - 66 112.639 1326 4 0 29.5313 85.2853 -85.85 - 66 200.778 1047 3 1 29.547 85.499 -114.45 - 66 306.106 1327 3 0 29.5521 85.5159 -115.85 - 66 100.993 1048 2 1 29.7732 86.08 -144.45 - 66 193.352 1330 2 0 29.7861 86.1 -145.85 - 66 138.631 1049 1 1 30.0444 86.5296 -174.45 - 66 210.26 1332 1 0 30.0604 86.5574 -175.85 - 66 237.783 1051 0 1 30.398 87.1192 -204.45 - 66 227.579 1335 0 0 30.4137 87.1569 -205.85 - 66 117.47 1385 7 0 -179.336 97.2167 3.75004 - 66 21.1426 1050 0 1 30.25 87.1082 -204.765 - 66 131.896 1047 5 1 29.6009 85.069 -54.45 - 66 247.406 1324 5 0 29.5852 85.0443 -55.85 - 66 116.571 1046 4 1 29.3115 84.5292 -84.45 - 66 249.72 1322 4 0 29.3239 84.5143 -85.85 - 66 109.937 1321 3 0 29.5592 84.2969 -115.85 - 66 131.366 1047 2 1 29.638 84.0752 -144.45 - 66 171.267 1320 2 0 29.6292 84.0576 -145.85 - 66 116.979 1046 1 1 29.4389 83.7343 -174.45 - 66 141.149 1318 1 0 29.4091 83.7212 -175.85 - 66 126.72 1043 0 1 28.8426 83.3865 -204.45 - 66 165.301 1316 0 0 28.8056 83.331 -205.85 - 66 152.513 1315 0 0 28.7917 83.25 -206.058 - 66 54.3656 1314 0 0 28.4727 83.05 -206.161 - 66 307.523 82 11 1 -163.55 -35.4348 125.367 - 66 169.859 1050 5 1 30.1859 85.1161 -54.45 - 66 198.86 1053 4 1 30.7622 85.5562 -84.45 - 66 105.305 1328 4 0 30.7637 85.6926 -85.85 - 66 205.842 1055 3 1 31.0882 88.3783 -114.45 - 66 159.638 1342 3 0 31.1362 88.5644 -115.85 - 66 117.844 1059 2 1 31.9946 92.3323 -144.45 - 66 117.116 1361 2 0 32.0307 92.4799 -145.85 - 66 191.38 1063 1 1 32.7888 95.6172 -174.45 - 66 129.034 1378 1 0 32.8641 95.7618 -175.85 - 66 26.2715 1073 0 1 34.8428 98.6306 -204.45 - 66 117.387 1074 0 1 34.85 98.6396 -204.544 - 66 117.822 1393 0 0 34.9468 98.7714 -205.85 - 66 46.3227 448 2 1 -90.4497 116.23 -144.85 - 66 176.295 447 2 1 -90.55 116.185 -144.791 - 66 146.852 1345 11 0 92.7665 89.1877 123.75 - 66 192.223 1346 11 0 93.0087 89.25 123.78 - 66 64.7142 1347 11 0 93.3129 89.4502 123.874 - 66 76.6703 895 11 0 83.9605 -0.860395 123.75 -Number of digits in this event: 36 -Using G4ParticleGun... -Particle energy: 7.96566 LIN +Number of tracker hits in this event: 210 + 66 124.603 662 11 1 -47.494 57.9096 125.55 + 66 113.674 1189 11 0 -47.4938 57.9086 124.15 + 66 162.189 662 10 1 -47.4892 57.888 95.55 + 66 121.32 1189 10 0 -47.4908 57.887 94.15 + 66 273.526 662 9 1 -47.5237 57.8685 65.55 + 66 124.734 1189 9 0 -47.525 57.869 64.15 + 66 146.265 662 8 1 -47.5602 57.8877 35.55 + 66 205.836 1189 8 0 -47.5631 57.8875 34.15 + 66 126.379 662 7 1 -47.6225 57.889 5.55 + 66 106.328 1189 7 0 -47.6275 57.8905 4.15 + 66 146.989 661 6 1 -47.7198 57.9156 -24.45 + 66 107.984 1189 6 0 -47.7245 57.9145 -25.85 + 66 217.981 661 5 1 -47.8327 57.8938 -54.45 + 66 261.721 1189 5 0 -47.8496 57.8794 -55.85 + 66 113.973 659 4 1 -48.1713 57.5722 -84.45 + 66 119.586 1187 4 0 -48.1887 57.5598 -85.85 + 66 119.721 657 3 1 -48.5426 57.2917 -114.45 + 66 110.469 1186 3 0 -48.556 57.2774 -115.85 + 66 112.555 656 2 1 -48.8254 56.9806 -144.45 + 66 377.938 1184 2 0 -48.835 56.9769 -145.85 + 66 192.561 654 1 1 -49.0543 56.911 -174.45 + 66 208.976 1184 1 0 -49.0658 56.9043 -175.85 + 66 125.233 653 0 1 -49.2949 56.7542 -204.45 + 66 346.503 1183 0 0 -49.3151 56.7322 -205.85 + 66 60.8802 1182 0 0 -48.8452 56.65 -206.176 + 66 166.922 1054 0 0 -66.1071 30.9717 -206.25 + 66 62.7925 657 2 1 -48.6364 56.8769 -144.45 + 66 106.789 658 2 1 -48.45 56.8551 -144.529 + 66 54.7222 659 2 1 -48.2481 56.8356 -144.601 + 66 189.275 660 2 1 -48.05 56.8095 -144.675 + 66 43.2451 661 2 1 -47.85 56.7815 -144.767 + 66 195.125 1181 2 0 -45.5655 56.3736 -145.85 + 66 45.4713 1180 2 0 -44.9154 56.25 -146.18 + 66 121.555 903 1 1 0.734771 42.0723 -174.45 + 66 38.4163 1107 1 0 0.824348 41.4982 -175.851 + 66 189.386 1106 1 0 0.838338 41.45 -175.984 + 66 251.292 1016 1 0 37.3915 23.4282 -176.25 + 66 62.8798 1015 1 0 38.0136 23.25 -175.901 + 66 27.7075 1109 1 1 41.9582 21.3842 -174.85 + 66 66.6601 1110 1 1 42.05 21.3429 -174.824 + 66 57.5694 1111 1 1 42.2504 21.2595 -174.758 + 66 57.0518 1112 1 1 42.45 21.1837 -174.69 + 66 90.6945 1113 1 1 42.6503 21.0951 -174.637 + 66 62.9036 1114 1 1 42.8501 20.977 -174.614 + 66 58.4033 1115 1 1 43.05 20.834 -174.587 + 66 75.6319 1116 1 1 43.25 20.7097 -174.549 + 66 20.6228 1117 1 1 43.4502 20.6321 -174.489 + 66 65.2305 899 2 0 39.3172 -0.0602122 -146.25 + 66 91.2115 898 2 0 39.2491 -0.25 -146.054 + 66 25.7856 897 2 0 39.2272 -0.45005 -145.909 + 66 53.7839 1098 2 1 39.7557 -1.58417 -144.85 + 66 113.357 1099 2 1 39.85 -1.6776 -144.748 + 66 107.231 655 2 1 -48.8937 56.9679 -144.451 + 66 58.4281 1183 2 0 -49.0393 56.85 -146.045 + 66 38.9703 656 1 1 -48.7908 53.3375 -174.45 + 66 63.9994 655 1 1 -48.8502 53.2928 -174.486 + 66 97.6797 653 1 1 -49.2502 53.0348 -174.688 + 66 8.46943 652 1 1 -49.4502 52.8169 -174.831 + 66 55.3607 1157 1 0 -50.7994 51.5813 -175.85 + 66 114.04 1156 1 0 -50.9428 51.45 -175.948 + 66 96.0507 1155 1 0 -51.1359 51.25 -176.056 + 66 101.686 1154 1 0 -51.3396 51.05 -176.171 + 66 153.445 336 0 1 -112.843 7.65398 -204.45 + 66 167.481 938 0 0 -112.547 7.69244 -205.85 + 66 133.497 928 0 0 -94.1652 5.72235 -206.25 + 66 104.653 435 0 1 -93.0702 5.30224 -204.85 + 66 87.5932 436 0 1 -92.95 5.22107 -204.69 + 66 13.7929 437 0 1 -92.7499 5.10892 -204.49 + 66 13.3653 1576 1 0 -171.82 135.514 -176.25 + 66 73.3798 1577 1 0 -171.847 135.55 -176.238 + 66 68.7837 1578 1 0 -171.933 135.75 -176.158 + 66 80.9951 1579 1 0 -171.835 135.95 -176.101 + 66 150.373 1580 1 0 -171.695 136.15 -176.061 + 66 27.7416 704 1 0 -27.7781 -39.1736 -176.25 + 66 81.604 703 1 0 -27.7786 -39.2502 -176.201 + 66 400.804 702 1 0 -27.7657 -39.45 -176.197 + 66 132.996 658 1 1 -48.4065 53.5082 -174.45 + 66 105.075 657 1 1 -48.45 53.4847 -174.51 + 66 111.731 1165 1 0 -49.5598 53.1549 -175.85 + 66 35.43 1164 1 0 -49.8859 53.05 -176.159 + 66 63.526 554 0 1 -69.0992 46.5616 -204.45 + 66 43.6019 553 0 1 -69.25 46.5988 -204.691 + 66 166.058 1133 0 0 -70.0448 46.8072 -205.85 + 66 53.4228 1134 0 0 -70.2349 46.85 -206.154 + 66 18.1799 652 0 1 -49.6064 56.5917 -204.45 + 66 187.831 1189 4 0 -48.0159 57.8703 -86.0101 + 66 137.638 611 3 1 -57.7243 53.5713 -114.45 + 66 33.3407 612 3 1 -57.6498 53.662 -114.778 + 66 6.75996 1167 3 0 -56.4845 53.4515 -115.85 + 66 192.059 1166 3 0 -56.4791 53.45 -115.855 + 66 24.399 1165 3 0 -56.4758 53.25 -115.866 + 66 130.365 617 3 1 -56.5289 52.5328 -114.85 + 66 254.406 1143 2 1 48.7115 9.00798 -144.45 + 66 61.4147 1142 2 1 48.65 9.04617 -144.598 + 66 125.198 662 3 1 -47.4984 58.1819 -114.45 + 66 345.52 1191 3 0 -47.6349 58.2631 -115.85 + 66 294.752 626 2 1 -54.7025 70.0193 -144.45 + 66 125.455 1249 2 0 -54.5966 69.8864 -145.85 + 66 140.915 641 1 1 -51.7586 68.3533 -174.45 + 66 80.775 1242 1 0 -51.7333 68.6021 -175.85 + 66 33.5639 1243 1 0 -51.7293 68.65 -176.119 + 66 144.007 649 0 1 -50.0919 75.9149 -204.45 + 66 82.8898 648 0 1 -50.2501 76.1779 -204.697 + 66 10.0696 1285 0 0 -51.0279 77.2382 -205.85 + 66 130.8 1286 0 0 -51.0369 77.25 -205.863 + 66 63.6058 1287 0 0 -51.1893 77.45 -206.116 + 66 20.1034 1238 1 0 -103.323 67.6569 -176.25 + 66 27.5569 1237 1 0 -103.324 67.65 -176.237 + 66 275.642 659 3 1 -48.0607 57.8883 -114.45 + 66 450.952 1188 3 0 -48.0576 57.8482 -115.85 + 66 149.133 662 0 1 -47.467 59.4131 -204.45 + 66 112.354 1197 0 0 -47.4599 59.4876 -205.85 + 66 50.4458 627 2 1 -54.6179 54.1857 -144.45 + 66 96.9544 1170 2 0 -54.9423 54.0811 -145.85 + 66 60.3421 594 1 1 -61.1649 52.667 -174.45 + 66 114.559 593 1 1 -61.25 52.8151 -174.61 + 66 184.156 1169 1 0 -61.8779 53.9444 -175.85 + 66 96.9062 1170 1 0 -61.9364 54.05 -175.966 + 66 23.166 1171 1 0 -62.0553 54.2501 -176.185 + 66 506.734 517 0 1 -76.4911 77.5066 -204.451 + 66 38.7738 1299 0 0 -76.5907 79.9062 -205.85 + 66 68.322 1300 0 0 -76.5997 80.05 -205.932 + 66 80.2549 1301 0 0 -76.6045 80.25 -206.03 + 66 60.6427 1302 0 0 -76.6091 80.4502 -206.128 + 66 5.52144 1303 0 0 -76.5999 80.65 -206.242 + 66 15.4477 1293 0 0 -76.3233 78.7844 -205.85 + 66 63.6591 1294 0 0 -76.3135 78.85 -205.914 + 66 63.1545 1295 0 0 -76.3011 79.05 -206.073 + 66 29.4128 1296 0 0 -76.3029 79.2502 -206.222 + 66 65.9317 1472 0 0 -75.3553 114.574 -206.25 + 66 75.8645 1473 0 0 -75.3384 114.75 -206.061 + 66 0.923925 1474 0 0 -75.3522 114.95 -205.852 + 66 96.3396 522 0 1 -75.5695 116.159 -204.85 + 66 129.483 521 0 1 -75.6502 116.424 -204.627 + 66 54.1489 520 0 1 -75.85 116.636 -204.463 + 66 115.945 519 0 1 -76.05 116.613 -204.595 + 66 36.7317 1478 0 0 -76.4191 115.812 -205.85 + 66 324.365 1477 0 0 -76.4677 115.75 -205.954 + 66 173.137 417 0 1 -96.55 129.161 -204.633 + 66 14.2619 1187 3 0 -48.506 57.65 -116.248 + 66 229.038 660 1 1 -47.9424 57.9317 -174.45 + 66 234.455 1189 1 0 -47.944 57.9305 -175.85 + 66 117.89 660 0 1 -47.9857 57.9012 -204.45 + 66 147.265 1189 0 0 -47.9897 57.8935 -205.85 + 66 9.32126 1635 0 0 23.1121 147.168 -206.25 + 66 115.566 1634 0 0 23.1308 147.15 -206.207 + 66 64.5778 1020 0 1 24.1611 146.66 -204.85 + 66 86.1433 1021 0 1 24.25 146.617 -204.732 + 66 21.9206 1649 1 0 20.883 150.143 -176.249 + 66 103.299 1650 1 0 20.8787 150.15 -176.202 + 66 152.416 1005 1 1 21.1071 150.113 -174.85 + 66 113.954 1006 1 1 21.2501 150.143 -174.474 + 66 101.351 1007 1 1 21.4506 150.127 -174.591 + 66 54.3617 1008 1 1 21.6529 150.158 -174.672 + 66 55.1642 1009 1 1 21.8506 150.274 -174.735 + 66 33.3307 1656 1 0 22.5524 151.44 -175.85 + 66 60.3456 1657 1 0 22.6058 151.55 -175.936 + 66 152.357 1658 1 0 22.5496 151.75 -176.147 + 66 69.6576 1586 0 0 40.189 137.432 -206.25 + 66 58.116 1587 0 0 44.7298 137.75 -206.044 + 66 124.96 1146 0 0 -77.7383 49.3068 -205.85 + 66 55.3916 319 3 0 -65.3607 -116.221 -116.25 + 66 149.391 670 0 1 -46.0336 59.1913 -204.451 + 66 31.2485 669 0 1 -46.05 59.2207 -204.724 + 66 129.314 1196 0 0 -46.1161 59.3446 -205.85 + 66 116.095 1190 5 0 -47.3353 58.1919 -55.85 + 66 130.692 718 4 1 -36.4367 59.5471 -84.45 + 66 104.796 719 4 1 -36.25 59.284 -84.5826 + 66 31.9462 720 4 1 -36.05 59.1986 -84.76 + 66 37.9349 1193 4 0 -35.77 58.6933 -85.85 + 66 23.095 1192 4 0 -35.7381 58.6499 -85.9046 + 66 76.4024 729 4 1 -34.1643 56.9017 -84.85 + 66 84.2181 730 4 1 -34.05 56.811 -84.7472 + 66 87.0047 731 4 1 -33.85 56.8186 -84.7487 + 66 63.6693 1182 4 0 -33.1914 56.5606 -85.85 + 66 183.674 740 4 1 -31.9775 56.019 -84.8499 + 66 150.63 1136 6 0 -34.821 47.4135 -26.25 + 66 103.159 1137 6 0 -35.0304 47.45 -26.1198 + 66 118.29 1408 6 0 -38.8449 101.917 -26.25 + 66 19.4516 649 4 1 -50.1611 58.5935 -84.45 + 66 55.417 648 4 1 -50.25 58.5773 -84.4964 + 66 140.156 647 4 1 -50.45 58.5395 -84.6083 + 66 73.8949 646 4 1 -50.65 58.5167 -84.7154 + 66 25.1349 645 4 1 -50.85 58.5285 -84.8382 + 66 164.669 1194 4 0 -52.438 58.8683 -85.85 + 66 8.23227 1195 4 0 -52.9189 59.0503 -86.2308 + 66 21.5456 503 3 1 -79.3736 72.8079 -114.45 + 66 169.799 502 3 1 -79.45 72.8192 -114.509 + 66 268.692 501 3 1 -79.6501 72.9457 -114.672 + 66 67.0135 500 3 1 -79.85 73.0679 -114.795 + 66 43.508 1271 3 0 -81.3057 74.3887 -115.85 + 66 95.0243 1272 3 0 -81.3668 74.4504 -115.899 + 66 110.312 1273 3 0 -81.5035 74.65 -116.031 + 66 0.606675 1274 3 0 -81.7126 74.8501 -116.249 + 66 87.8835 1454 3 0 -117.598 111.137 -116.25 + 66 13.6351 1455 3 0 -117.539 111.15 -115.903 + 66 150.69 314 3 1 -117.158 111.706 -114.85 + 66 194.296 315 3 1 -117.15 111.72 -114.829 + 66 32.6652 1466 3 0 -117.478 113.483 -115.85 + 66 112.411 1467 3 0 -117.461 113.55 -115.924 + 66 166.176 1468 3 0 -117.309 113.75 -116.191 + 66 37.5528 1264 3 0 -79.1398 72.8506 -115.85 + 66 2.99341 1263 3 0 -79.0894 72.8499 -115.855 + 66 112.065 504 3 1 -79.1236 72.8465 -114.85 + 66 329.609 1215 3 0 -62.2625 63.1954 -116.25 + 66 289.397 663 0 1 -47.3892 57.6382 -204.45 + 66 125.446 1187 0 0 -47.3473 57.6276 -205.85 + 66 128.08 1188 0 0 -47.3314 57.6724 -205.852 + 66 101.993 1172 0 0 -28.1344 54.5798 -206.25 + 66 129.454 1173 0 0 -28.0211 54.65 -206.205 +Number of digits in this event: 75 +Using G4ParticleGun... +Particle energy: 8.91357 LIN Particle: e- Event: 67 -Number of tracker hits in this event: 81 - 67 119.33 1463 9 1 112.85 57.8707 65.55 - 67 97.7802 1189 9 0 112.85 57.8699 64.15 - 67 124.834 1463 8 1 112.849 57.858 35.55 - 67 110.416 1189 8 0 112.848 57.8572 34.15 - 67 152.47 1463 7 1 112.81 57.8396 5.55 - 67 212.051 1188 7 0 112.807 57.8383 4.15 - 67 178.045 1463 6 1 112.754 57.8186 -24.45 - 67 110.542 1188 6 0 112.751 57.8179 -25.85 - 67 119.126 1462 5 1 112.707 57.8007 -54.45 - 67 332.099 1188 5 0 112.706 57.8 -55.85 - 67 243.886 1462 4 1 112.688 57.7842 -84.45 - 67 499.373 1188 4 0 112.686 57.7843 -85.85 - 67 565.37 1462 3 1 112.654 57.787 -114.45 - 67 366.29 1188 3 0 112.652 57.7885 -115.85 - 67 105.104 1462 2 1 112.594 57.8127 -144.45 - 67 347.252 1188 2 0 112.592 57.8137 -145.85 - 67 481.468 1461 1 1 112.537 57.8342 -174.45 - 67 119.515 1188 1 0 112.534 57.8333 -175.85 - 67 186.094 1461 0 1 112.466 57.8086 -204.45 - 67 113.891 1188 0 0 112.463 57.8081 -205.85 - 67 84.0531 1119 2 1 43.9513 115.803 -144.585 - 67 70.6032 1361 3 0 32.5149 92.513 -116.25 - 67 66.867 1360 3 0 32.4463 92.35 -116.02 - 67 154.243 1061 3 1 32.2708 91.5569 -114.85 - 67 2.63769 1391 4 0 43.7337 98.5472 -86.25 - 67 113.399 1392 4 0 43.7384 98.55 -86.2383 - 67 91.7531 1123 4 1 44.6633 98.9521 -84.85 - 67 33.9247 1124 4 1 44.85 99.0678 -84.5536 - 67 157.343 1396 5 0 41.2455 99.4709 -56.25 - 67 112.325 1106 5 1 41.3309 99.3624 -54.8484 - 67 67.7661 1284 6 0 53.4843 77.0236 -26.2497 - 67 71.9233 1283 6 0 53.5227 76.8499 -26.0926 - 67 59.0649 1282 6 0 53.5203 76.65 -25.9461 - 67 3.61749 1180 6 1 56.0877 76.4645 -24.85 - 67 155.443 1267 6 0 59.7238 73.4796 -25.85 - 67 0.0738354 1266 6 0 59.7567 73.4499 -25.8622 - 67 46.7992 943 3 1 8.773 105.3 -114.45 - 67 23.3708 1118 2 1 43.85 115.726 -144.51 - 67 46.4135 374 4 0 113.779 -105.15 -85.9574 - 67 1.21636 467 10 0 158.635 -86.4975 94.15 - 67 130.748 1462 0 1 112.55 57.8012 -204.541 - 67 138.124 1189 2 0 112.581 57.8501 -145.951 - 67 274.027 1189 3 0 112.703 57.9181 -115.851 - 67 108.988 1468 2 1 113.817 60.6683 -144.45 - 67 81.1869 1203 2 0 113.712 60.8238 -145.85 - 67 68.5917 1204 2 0 113.691 60.85 -146.07 - 67 128.318 1451 1 1 110.473 64.4365 -174.45 - 67 311.346 1222 1 0 110.237 64.6018 -175.85 - 67 0.504011 1223 1 0 110.174 64.65 -176.246 - 67 10.3074 1428 0 1 105.76 68.5617 -204.45 - 67 125.012 1427 0 1 105.75 68.5725 -204.501 - 67 133.613 1244 0 0 105.477 68.866 -205.85 - 67 125.061 1463 2 1 112.752 57.8267 -144.45 - 67 130.596 1464 1 1 112.976 57.8929 -174.45 - 67 127.021 1189 1 0 112.984 57.8971 -175.85 - 67 167.441 1464 0 1 113.126 57.9899 -204.45 - 67 109.566 1189 0 0 113.134 57.9936 -205.85 - 67 103.576 1381 0 0 134.742 96.387 -206.25 - 67 149.017 1382 0 0 134.719 96.5502 -205.962 - 67 41.5148 1185 3 0 112.698 57.1341 -115.85 - 67 102.939 1184 3 0 112.707 57.0499 -115.985 - 67 55.4225 1015 3 0 107.397 23.1474 -116.25 - 67 73.7125 1014 3 0 107.387 23.05 -116.2 - 67 27.294 1052 7 0 96.3359 30.4979 3.75 - 67 143.745 1463 4 1 112.761 57.8161 -84.45 - 67 186.867 1463 3 1 112.814 58.0277 -114.45 - 67 116.158 1465 2 1 113.174 58.1497 -144.45 - 67 436.499 1190 2 0 113.197 58.1695 -145.85 - 67 142.753 1467 1 1 113.647 58.5626 -174.45 - 67 160.399 1192 1 0 113.68 58.5926 -175.85 - 67 174.848 1470 0 1 114.306 59.1882 -204.45 - 67 116.871 1195 0 0 114.336 59.2232 -205.85 - 67 123.817 1461 2 1 112.518 58.1975 -144.45 - 67 11.9023 1191 2 0 112.519 58.25 -146.188 - 67 112.478 1195 1 0 112.527 59.0863 -175.85 - 67 42.3137 1468 0 1 113.946 60.1647 -204.45 - 67 95.7198 1469 0 1 113.95 60.1689 -204.531 - 67 67.5919 1200 0 0 114.025 60.237 -205.85 - 67 38.8964 1201 0 0 114.039 60.25 -206.103 - 67 145.788 1460 1 1 112.35 58.9951 -174.696 - 67 60.3699 1194 1 0 111.671 58.9283 -175.85 -Number of digits in this event: 37 +Number of tracker hits in this event: 94 + 67 128.719 845 11 1 -10.9894 9.36194 125.55 + 67 92.0982 946 11 0 -10.9891 9.36218 124.15 + 67 165.35 845 10 1 -10.9825 9.36929 95.55 + 67 104.24 946 10 0 -10.982 9.37003 94.15 + 67 139.94 845 9 1 -10.9723 9.38615 65.55 + 67 142.809 946 9 0 -10.9727 9.38812 64.15 + 67 141.856 845 8 1 -10.9833 9.42561 35.55 + 67 111.438 946 8 0 -10.9826 9.42731 34.15 + 67 201.389 845 7 1 -10.9675 9.46088 5.55 + 67 110.583 947 7 0 -10.9662 9.46305 4.15 + 67 120.493 845 6 1 -10.9405 9.50901 -24.45 + 67 113.5 947 6 0 -10.9397 9.51253 -25.85 + 67 355.222 845 5 1 -10.9279 9.58448 -54.45 + 67 138.345 947 5 0 -10.9269 9.58722 -55.85 + 67 385.265 845 4 1 -10.9081 9.64254 -84.45 + 67 380.225 947 4 0 -10.9077 9.64451 -85.85 + 67 124.234 845 3 1 -10.904 9.68523 -114.45 + 67 378.815 948 3 0 -10.9046 9.68776 -115.85 + 67 139.874 845 2 1 -10.9124 9.73519 -144.45 + 67 113.225 948 2 0 -10.914 9.7375 -145.85 + 67 104.035 845 1 1 -10.947 9.78461 -174.45 + 67 126.959 948 1 0 -10.9489 9.78811 -175.85 + 67 129.742 845 0 1 -10.9894 9.85971 -204.45 + 67 107.456 949 0 0 -10.9913 9.86374 -205.85 + 67 116.728 440 0 1 -91.95 55.0012 -204.581 + 67 52.6264 1064 2 0 -104.206 32.9697 -146.25 + 67 134.144 847 0 1 -10.5729 9.50569 -204.45 + 67 39.3323 943 0 0 -10.4647 8.71308 -205.85 + 67 86.2891 942 0 0 -10.4557 8.65 -205.959 + 67 171.189 841 0 1 -11.8328 10.3965 -204.45 + 67 108.4 952 0 0 -11.8476 10.5136 -205.85 + 67 59.483 733 0 1 -33.25 56.6461 -204.772 + 67 41.0721 846 5 1 -10.85 9.78494 -54.7552 + 67 64.9709 952 5 0 -10.6029 10.5302 -55.8505 + 67 73.9483 953 5 0 -10.5617 10.65 -56.0331 + 67 118.196 874 4 1 -5.14729 28.6626 -84.45 + 67 64.8465 875 4 1 -5.05 28.9096 -84.7061 + 67 16.879 1050 4 0 -4.6045 30.2143 -85.85 + 67 78.9414 1051 4 0 -4.59313 30.25 -85.8814 + 67 78.0409 1052 4 0 -4.53547 30.45 -86.0502 + 67 20.2951 1053 4 0 -4.47814 30.65 -86.2096 + 67 188.354 930 3 1 6.24653 67.0095 -114.45 + 67 87.2345 1242 3 0 5.88197 68.4812 -115.85 + 67 72.2485 1243 3 0 5.84041 68.65 -116.013 + 67 14.3822 1244 3 0 5.77659 68.85 -116.207 + 67 167.014 875 2 1 -4.92886 98.3834 -144.45 + 67 70.6054 1397 2 0 -5.24286 99.6224 -145.85 + 67 88.5713 1398 2 0 -5.27257 99.75 -146.006 + 67 0.673363 1399 2 0 -5.32712 99.9501 -146.248 + 67 125.36 841 1 1 -11.6621 122.634 -174.45 + 67 6.20814 840 1 1 -11.85 122.695 -174.823 + 67 145.161 1513 1 0 -12.3888 122.846 -175.85 + 67 50.5724 764 0 1 -27.1794 127.719 -204.45 + 67 98.7123 763 0 1 -27.25 127.749 -204.601 + 67 49.0641 1538 0 0 -27.8708 127.933 -205.85 + 67 112.524 1539 0 0 -27.928 127.95 -205.965 + 67 208.018 948 5 0 -10.8478 9.73495 -55.85 + 67 126.466 854 4 1 -9.1737 13.37 -84.45 + 67 154.658 967 4 0 -9.18098 13.5001 -85.85 + 67 42.1806 854 3 1 -9.23754 16.1608 -114.451 + 67 96.023 853 3 1 -9.25 16.1814 -114.53 + 67 89.5022 982 3 0 -9.50757 16.5582 -115.85 + 67 19.714 983 3 0 -9.57533 16.65 -116.174 + 67 147.773 823 2 1 -15.2508 24.8215 -144.45 + 67 46.6824 1026 2 0 -15.7162 25.3798 -145.85 + 67 80.5814 1027 2 0 -15.777 25.45 -146.026 + 67 121.008 770 1 1 -25.9206 36.4072 -174.45 + 67 151.37 1084 1 0 -26.0548 36.918 -175.85 + 67 14.9037 1085 1 0 -26.0845 37.05 -176.201 + 67 14.5793 756 0 1 -28.6655 48.6788 -204.45 + 67 97.077 757 0 1 -28.65 48.6968 -204.488 + 67 214.398 1146 0 0 -28.1364 49.3088 -205.85 + 67 39.4953 1147 0 0 -28.0072 49.4503 -206.134 + 67 125.08 1250 4 0 -75.1966 70.0555 -86.25 + 67 134.189 1251 4 0 -75.2638 70.25 -86.0652 + 67 197.059 1252 4 0 -75.0504 70.45 -85.9926 + 67 189.279 839 5 1 -12.0649 10.4039 -54.85 + 67 365.927 938 7 0 -10.3645 7.7992 4.14984 + 67 41.947 937 7 0 -10.2291 7.65 4.00578 + 67 118.406 844 3 1 -11.1161 9.66485 -114.45 + 67 120.995 843 2 1 -11.2937 9.98184 -144.45 + 67 115.47 949 2 0 -11.2954 10.0032 -145.85 + 67 103.448 843 1 1 -11.3263 10.4273 -174.45 + 67 106.663 952 1 0 -11.3317 10.4576 -175.85 + 67 151.828 842 0 1 -11.4575 11.0132 -204.45 + 67 119.074 955 0 0 -11.4754 11.0523 -205.85 + 67 128.609 841 3 1 -11.8026 10.0817 -114.45 + 67 129.614 950 3 0 -11.8182 10.162 -115.85 + 67 122.749 841 2 1 -11.7926 11.6726 -144.45 + 67 147.61 958 2 0 -11.9077 11.7473 -145.85 + 67 108.805 830 1 1 -13.9575 13.2881 -174.45 + 67 126.496 966 1 0 -14.1127 13.3988 -175.85 + 67 137.239 814 0 1 -17.142 15.8001 -204.45 + 67 129.023 979 0 0 -17.3195 15.9518 -205.85 +Number of digits in this event: 44 Using G4ParticleGun... -Particle energy: 9.36795 LIN +Particle energy: 3.08815 LIN Particle: e- Event: 68 -Number of tracker hits in this event: 98 - 68 95.4766 1401 10 1 100.541 -39.0533 95.55 - 68 107.977 704 10 0 100.541 -39.0534 94.15 - 68 198.194 1401 9 1 100.539 -39.055 65.55 - 68 138.463 704 9 0 100.539 -39.0557 64.15 - 68 123.169 1401 8 1 100.524 -39.074 35.55 - 68 115.468 704 8 0 100.523 -39.0737 34.15 - 68 381.623 1401 7 1 100.492 -39.0665 5.55 - 68 408.512 704 7 0 100.491 -39.0664 4.15 - 68 237.648 1401 6 1 100.465 -39.0682 -24.45 - 68 462.999 704 6 0 100.463 -39.0676 -25.85 - 68 124.531 1401 5 1 100.414 -39.0537 -54.45 - 68 239.664 704 5 0 100.41 -39.0537 -55.85 - 68 151.468 1400 4 1 100.331 -39.0564 -84.45 - 68 125.01 704 4 0 100.327 -39.0583 -85.85 - 68 211.229 1400 3 1 100.247 -39.0999 -114.45 - 68 262.147 704 3 0 100.243 -39.1011 -115.85 - 68 143.183 1400 2 1 100.168 -39.1322 -144.45 - 68 116.079 704 2 0 100.163 -39.1342 -145.85 - 68 239.955 1399 1 1 100.073 -39.1733 -174.45 - 68 295.255 704 1 0 100.068 -39.1747 -175.85 - 68 498.677 1399 0 1 99.9774 -39.1991 -204.45 - 68 228.119 704 0 0 99.9731 -39.1995 -205.85 - 68 82.4838 1398 0 1 99.95 -39.2419 -204.475 - 68 21.8679 1391 1 1 98.55 -40.3787 -174.67 - 68 89.7435 763 6 0 147.389 -27.3946 -26.25 - 68 73.5274 764 6 0 147.36 -27.25 -26.0213 - 68 20.0368 765 6 0 147.356 -27.05 -25.8533 - 68 140.297 1635 6 1 147.348 -26.3139 -24.85 - 68 28.5574 1636 6 1 147.35 -26.442 -24.6796 - 68 103.36 1642 6 1 148.685 -26.7686 -24.8499 - 68 112.485 1400 5 1 100.283 -39.0757 -54.45 - 68 122.709 1399 4 1 100.007 -39.013 -84.45 - 68 114.107 705 4 0 99.9973 -39.0176 -85.85 - 68 103.091 1398 3 1 99.8056 -39.0975 -114.45 - 68 123.496 1396 2 1 99.5355 -39.3046 -144.45 - 68 107.491 703 2 0 99.5214 -39.3157 -145.85 - 68 124.054 1395 1 1 99.2391 -39.6102 -174.45 - 68 122.405 702 1 0 99.2264 -39.6311 -175.85 - 68 176.46 1394 0 1 98.9624 -40.053 -204.45 - 68 94.0697 699 0 0 98.9488 -40.0704 -205.85 - 68 55.1452 263 4 0 135.319 -127.35 -86.0038 - 68 64.458 1279 0 0 108.039 76.05 -205.872 - 68 58.116 1160 1 0 126.962 52.0569 -175.85 - 68 114.318 1400 6 1 100.217 -39.089 -24.45 - 68 127.79 1396 5 1 99.5464 -38.799 -54.45 - 68 251.354 706 5 0 99.5066 -38.8004 -55.85 - 68 104.024 1392 4 1 98.6468 -38.7118 -84.45 - 68 112.488 706 4 0 98.5935 -38.6979 -85.85 - 68 219.328 1386 3 1 97.4777 -38.4098 -114.45 - 68 149.774 708 3 0 97.4214 -38.3768 -115.85 - 68 335.774 1380 2 1 96.261 -37.7253 -144.45 - 68 116.393 711 2 0 96.1929 -37.7165 -145.85 - 68 182.476 1374 1 1 95.078 -37.421 -174.45 - 68 511.153 713 1 0 95.0175 -37.423 -175.85 - 68 128.651 1368 0 1 93.7889 -37.4832 -204.45 - 68 100.43 712 0 0 93.7926 -37.4733 -205.85 - 68 101.886 1375 1 1 95.15 -37.3939 -174.524 - 68 55.308 592 1 0 128.582 -61.5774 -176.25 - 68 184.264 591 1 0 128.662 -61.65 -176.14 - 68 107.758 1546 1 1 129.403 -61.7211 -174.85 - 68 16.2531 1547 1 1 129.55 -61.7506 -174.503 - 68 371.352 1401 1 1 100.5 -39.0622 -174.45 - 68 119.564 705 1 0 100.498 -39.0397 -175.85 - 68 247.97 1401 0 1 100.546 -38.5255 -204.45 - 68 232.075 1402 0 1 100.55 -38.5232 -204.623 - 68 116.537 707 0 0 100.582 -38.5065 -205.85 - 68 86.2401 1403 0 1 100.75 -39.4505 -204.711 - 68 12.1438 694 0 0 100.597 -41.1998 -205.85 - 68 56.0959 693 0 0 100.593 -41.2508 -205.881 - 68 122.129 692 0 0 100.581 -41.4501 -205.974 - 68 55.0006 691 0 0 100.531 -41.65 -206.058 - 68 38.264 690 0 0 100.473 -41.85 -206.168 - 68 152.308 571 0 0 116.451 -65.6655 -206.25 - 68 114.48 1483 0 1 116.824 -65.9588 -204.85 - 68 175.215 1402 3 1 100.561 -39.0605 -114.45 - 68 49.9148 1401 3 1 100.55 -39.0423 -114.632 - 68 109.216 705 3 0 100.397 -39.0266 -115.85 - 68 51.281 727 2 0 96.434 -34.5717 -145.85 - 68 57.9436 728 2 0 96.4507 -34.45 -145.957 - 68 48.0854 729 2 0 96.4866 -34.25 -146.117 - 68 61.6909 1423 1 1 104.85 -3.69956 -174.45 - 68 140.942 1424 1 1 104.95 -3.63406 -174.613 - 68 67.1537 884 1 0 105.735 -3.13049 -175.85 - 68 92.9837 885 1 0 105.864 -3.04995 -176.047 - 68 12.3875 1517 0 1 123.724 8.71989 -204.45 - 68 89.0983 1518 0 1 123.75 8.70797 -204.483 - 68 58.9156 1519 0 1 123.95 8.59792 -204.733 - 68 194.338 940 0 0 124.905 8.19508 -205.85 - 68 22.5935 939 0 0 125.135 8.05 -206.195 - 68 284.194 1516 0 1 123.55 8.68798 -204.527 - 68 104.574 703 3 0 100.609 -39.373 -115.851 - 68 20.2219 702 3 0 100.611 -39.45 -116.187 - 68 139.68 1405 2 1 101.211 -46.0521 -144.45 - 68 110.818 669 2 0 101.192 -46.2054 -145.85 - 68 4.08273 668 2 0 101.177 -46.25 -146.235 - 68 127.831 649 1 0 100.382 -50.1082 -175.85 - 68 33.4166 646 0 0 99.8351 -50.6677 -205.85 - 68 83.331 647 0 0 99.8216 -50.65 -205.937 -Number of digits in this event: 47 +Number of tracker hits in this event: 34 + 68 118.833 1527 8 1 125.592 -56.2038 35.55 + 68 197.413 619 8 0 125.59 -56.2069 34.15 + 68 143.965 1526 7 1 125.543 -56.2701 5.55 + 68 130.681 618 7 0 125.541 -56.2722 4.15 + 68 136.537 1526 6 1 125.518 -56.3082 -24.45 + 68 93.2689 618 6 0 125.516 -56.312 -25.85 + 68 112.526 1526 5 1 125.469 -56.4002 -54.45 + 68 99.5751 618 5 0 125.456 -56.4002 -55.85 + 68 213.887 1525 4 1 125.192 -56.3811 -84.45 + 68 155.241 618 4 0 125.172 -56.3784 -85.85 + 68 92.7537 1523 3 1 124.771 -56.3246 -114.45 + 68 123.091 618 3 0 124.738 -56.3241 -115.85 + 68 121.17 1519 2 1 124.014 -56.2813 -144.45 + 68 117.018 618 2 0 123.991 -56.2792 -145.85 + 68 120.633 1516 1 1 123.476 -56.2426 -174.45 + 68 114.323 619 1 0 123.454 -56.2356 -175.85 + 68 120.198 1514 0 1 123.028 -56.1308 -204.45 + 68 96.6783 619 0 0 123.027 -56.1107 -205.85 + 68 255.892 1513 0 1 122.878 -56.1359 -204.451 + 68 158.207 618 0 0 122.939 -56.2895 -205.85 + 68 81.157 617 0 0 122.962 -56.45 -205.95 + 68 38.8048 1354 2 1 91.15 -156.282 -144.541 + 68 296.476 1355 2 1 91.15 -156.434 -144.594 + 68 139.759 617 4 0 125.184 -56.5898 -85.85 + 68 92.2717 430 4 0 84.6901 -93.969 -86.2491 + 68 63.3954 429 4 0 84.5169 -94.15 -86.1451 + 68 61.5961 428 4 0 84.3514 -94.35 -86.0235 + 68 104.986 1320 4 1 84.1051 -94.911 -84.85 + 68 40.9803 276 4 0 129.811 -124.785 -86.25 + 68 86.1627 275 4 0 129.827 -124.95 -86.2083 + 68 52.9025 274 4 0 129.902 -125.15 -86.1837 + 68 96.2894 1180 2 0 -14.4477 56.05 -146.07 + 68 215.622 1456 6 0 -129.841 111.536 -26.25 + 68 119.336 1455 6 0 -130.324 111.35 -25.9186 +Number of digits in this event: 17 Using G4ParticleGun... -Particle energy: 8.86573 LIN +Particle energy: 3.44564 LIN Particle: e- Event: 69 -Number of tracker hits in this event: 167 - 69 131.136 875 11 1 -4.91303 38.3679 125.55 - 69 97.795 1091 11 0 -4.91363 38.3683 124.15 - 69 116.387 875 10 1 -4.92755 38.3759 95.55 - 69 131.549 1091 10 0 -4.92882 38.3764 94.15 - 69 148.461 875 9 1 -4.95097 38.3798 65.55 - 69 103.083 1091 9 0 -4.9528 38.3791 64.15 - 69 117.085 875 8 1 -4.98479 38.3695 35.55 - 69 135.087 1091 8 0 -4.98705 38.3681 34.15 - 69 109.405 875 7 1 -5.03377 38.3306 5.55 - 69 140.21 1091 7 0 -5.03319 38.3251 4.15 - 69 345.442 875 6 1 -5.02696 38.2018 -24.45 - 69 114.276 1090 6 0 -5.02923 38.1965 -25.85 - 69 468.429 874 5 1 -5.06313 38.0951 -54.45 - 69 375.376 1090 5 0 -5.06349 38.0921 -55.85 - 69 108.394 874 4 1 -5.06811 38.0368 -84.45 - 69 109.595 1089 4 0 -5.07173 38.0321 -85.85 - 69 574.485 874 3 1 -5.14695 37.9399 -114.45 - 69 144.736 1089 3 0 -5.14951 37.9344 -115.85 - 69 491.603 874 2 1 -5.20339 37.8367 -144.45 - 69 117.891 1088 2 0 -5.20556 37.8323 -145.85 - 69 374.42 874 1 1 -5.24877 37.7566 -174.45 - 69 225.722 873 1 1 -5.25 37.7554 -174.78 - 69 493.875 1088 1 0 -5.25414 37.7515 -175.85 - 69 155.053 873 0 1 -5.36293 37.6419 -204.45 - 69 106.827 1087 0 0 -5.36961 37.6385 -205.85 - 69 1.27172 618 7 1 -56.25 -34.9785 5.35703 - 69 19.7063 1089 1 0 -5.28653 37.8503 -176.215 - 69 273.086 1089 2 0 -5.20485 37.9396 -145.85 - 69 122.108 870 1 1 -5.95256 40.1166 -174.451 - 69 106.31 1101 1 0 -5.99435 40.3864 -175.85 - 69 13.1004 1102 1 0 -6.00318 40.45 -176.203 - 69 83.6478 867 0 1 -6.502 45.1615 -204.451 - 69 360.803 868 0 1 -6.45 45.2233 -204.542 - 69 40.6331 1130 0 0 -5.63093 46.1936 -205.85 - 69 132.517 1131 0 0 -5.58282 46.25 -205.925 - 69 25.0287 1132 0 0 -5.40781 46.45 -206.188 - 69 52.5271 1251 0 0 -23.1966 70.3713 -206.25 - 69 121.714 1252 0 0 -23.3537 70.45 -206.113 - 69 60.9577 775 0 1 -24.9675 71.5388 -204.85 - 69 96.3925 774 0 1 -25.05 71.5947 -204.783 - 69 94.4782 773 0 1 -25.2502 71.7163 -204.647 - 69 40.8946 772 0 1 -25.45 71.8107 -204.511 - 69 234.484 1283 1 0 -58.2325 76.7434 -176.25 - 69 12.427 602 1 1 -59.6384 76.9183 -174.85 - 69 63.5492 601 1 1 -59.6502 76.92 -174.838 - 69 69.6742 600 1 1 -59.85 76.9721 -174.692 - 69 165.209 599 1 1 -60.0501 77.0765 -174.569 - 69 69.8768 1422 2 0 -140.984 104.671 -146.25 - 69 311.03 1423 2 0 -141.181 104.75 -146.177 - 69 7.2103 177 2 1 -144.735 104.181 -144.85 - 69 73.3484 176 2 1 -144.75 104.177 -144.843 - 69 79.7982 175 2 1 -144.95 104.172 -144.646 - 69 3.98104 1119 0 0 -7.61876 43.8554 -205.85 - 69 167.835 1118 0 0 -7.62414 43.85 -205.854 - 69 294.135 1117 0 0 -7.94551 43.6497 -205.959 - 69 114.702 869 0 1 -6.05243 38.2791 -204.45 - 69 120.971 1091 0 0 -6.1221 38.2836 -205.85 - 69 69.179 1092 1 0 -3.4591 38.5648 -175.85 - 69 162.224 886 1 1 -2.7844 39.4698 -174.85 - 69 51.0107 887 1 1 -2.65 39.4369 -174.79 - 69 288.734 1091 3 0 -5.058 38.4277 -115.85 - 69 47.9212 1092 3 0 -5.03724 38.45 -116.097 - 69 84.881 882 2 1 -3.60404 41.0007 -144.45 - 69 51.7629 881 2 1 -3.65 41.1166 -144.705 - 69 62.0312 1108 2 0 -3.97091 41.7441 -145.85 - 69 103.853 1109 2 0 -4.02615 41.8501 -146.042 - 69 161.252 839 1 1 -12.1907 52.2755 -174.45 - 69 57.4123 1164 1 0 -11.6957 53.0033 -175.851 - 69 114.815 1165 1 0 -11.6642 53.05 -175.943 - 69 91.1388 892 0 1 -1.48709 69.3419 -204.45 - 69 107.521 893 0 1 -1.45 69.5368 -204.604 - 69 18.7226 1253 0 0 -1.24799 70.7995 -205.85 - 69 70.9132 1254 0 0 -1.2401 70.85 -205.899 - 69 75.7388 1255 0 0 -1.2003 71.0502 -206.079 - 69 1.59947 1256 0 0 -1.16942 71.25 -206.245 - 69 127.039 851 2 1 -9.71815 38.6836 -144.45 - 69 139.534 1093 2 0 -9.71669 38.7467 -145.85 - 69 160.806 853 1 1 -9.44139 39.7018 -174.45 - 69 160.361 1098 1 0 -9.43877 39.7461 -175.85 - 69 119.921 854 0 1 -9.09663 40.865 -204.45 - 69 107.181 1105 0 0 -9.20175 41.0899 -205.851 - 69 81.8262 1089 5 0 -4.98113 38.05 -55.9283 - 69 111.311 881 4 1 -3.71406 33.4424 -84.45 - 69 125.296 1064 4 0 -3.7892 33.0203 -85.85 - 69 149.015 861 3 1 -7.67044 26.0442 -114.45 - 69 42.9679 1025 3 0 -8.05101 25.1207 -115.85 - 69 130.019 1024 3 0 -8.0735 25.0499 -115.97 - 69 106.604 858 2 1 -8.42988 9.87536 -144.45 - 69 42.7429 859 2 1 -8.25 9.75157 -144.729 - 69 46.8748 944 2 0 -7.35908 8.93791 -145.85 - 69 157.853 943 2 0 -7.26178 8.85 -145.969 - 69 2.56708 942 2 0 -7.06446 8.65 -146.247 - 69 24.712 953 1 1 10.8187 -11.9534 -174.45 - 69 191.94 954 1 1 10.85 -11.9678 -174.547 - 69 166.288 839 1 0 11.2787 -12.0772 -175.85 - 69 167.023 999 0 1 19.8527 -16.3773 -204.45 - 69 34.2072 813 0 0 20.2256 -17.3958 -205.85 - 69 68.9229 812 0 0 20.2428 -17.45 -205.924 - 69 19.9899 811 0 0 20.2789 -17.65 -206.168 - 69 68.6737 955 1 1 11.05 -12.1251 -174.824 - 69 34.4117 841 1 0 13.2733 -11.7784 -175.85 - 69 51.0962 965 1 1 13.2426 -11.9474 -174.85 - 69 73.3378 918 3 1 3.7078 34.529 -114.45 - 69 179.602 869 4 1 -6.10029 37.6244 -84.45 - 69 104.823 1087 4 0 -6.22002 37.5395 -85.85 - 69 433.304 857 3 1 -8.56332 35.9572 -114.45 - 69 0.286025 1082 3 0 -8.56443 36.6492 -115.851 - 69 107.798 1083 3 0 -8.56441 36.65 -115.852 - 69 26.49 1084 3 0 -8.56119 36.85 -116.187 - 69 495.434 856 2 1 -8.67689 53.783 -144.45 - 69 65.9933 1174 2 0 -9.1524 54.9225 -145.85 - 69 94.2862 1175 2 0 -9.20605 55.05 -146.008 - 69 49.1011 800 1 1 -19.9995 77.5925 -174.45 - 69 89.0765 799 1 1 -20.0501 77.6968 -174.599 - 69 88.4691 1293 1 0 -20.4777 78.6565 -175.85 - 69 58.7088 1294 1 0 -20.5591 78.8501 -176.116 - 69 63.8446 765 0 1 -26.9342 98.7351 -204.45 - 69 250.013 764 0 1 -27.05 98.7936 -204.617 - 69 176.551 1394 0 0 -27.9365 99.0453 -205.85 - 69 203.676 1395 0 0 -28.0237 99.15 -206.057 - 69 75.8689 1396 0 0 -22.1186 99.35 -205.922 - 69 9.12566 784 0 1 -23.2264 101.298 -204.85 - 69 98.6964 783 0 1 -23.25 101.318 -204.83 - 69 311.683 782 0 1 -23.4503 101.466 -204.679 - 69 130.638 781 0 1 -23.65 101.584 -204.504 - 69 38.2828 1413 0 0 -23.1995 102.827 -205.85 - 69 116.063 780 0 1 -24.0324 103.345 -204.85 - 69 53.2024 857 2 1 -8.50125 53.677 -144.45 - 69 62.7046 855 2 1 -8.85 53.5816 -144.625 - 69 89.0934 854 2 1 -9.05 53.5573 -144.715 - 69 27.2369 1163 2 0 -9.37717 52.694 -145.85 - 69 838.127 1162 2 0 -9.38309 52.65 -145.943 - 69 57.1643 1161 2 0 -10.7907 52.45 -146.024 - 69 143.46 1046 2 0 -30.213 29.4056 -146.25 - 69 386.492 1091 6 0 -4.97504 38.3876 -25.85 - 69 119.946 875 5 1 -5.00752 38.3986 -54.45 - 69 117.392 1091 5 0 -5.00928 38.3999 -55.85 - 69 217.433 875 4 1 -5.04345 38.4261 -84.45 - 69 101.048 1091 4 0 -5.04604 38.426 -85.85 - 69 115.833 1091 2 0 -5.0876 38.3526 -145.85 - 69 103.093 1091 1 0 -5.06066 38.2772 -175.85 - 69 160.412 874 0 1 -5.05602 38.2291 -204.45 - 69 116.59 1090 0 0 -5.05393 38.2271 -205.85 - 69 118.282 845 5 0 -118.408 -10.8593 -56.25 - 69 190.297 1541 5 1 128.35 44.3528 -54.5288 - 69 120.681 1542 5 1 128.55 44.1786 -54.6966 - 69 9.84015 1116 5 0 129.43 43.2598 -55.85 - 69 233.252 1115 5 0 129.449 43.25 -55.8627 - 69 187.968 868 5 1 -6.36994 39.1111 -54.45 - 69 128.364 1095 5 0 -6.44123 39.1664 -55.85 - 69 101.386 861 4 1 -7.71266 40.2646 -84.45 - 69 118.335 1100 4 0 -7.77483 40.2323 -85.85 - 69 109.652 853 3 1 -9.27545 39.8824 -114.45 - 69 70.5208 1099 3 0 -9.3944 40.017 -115.85 - 69 35.5642 1100 3 0 -9.41724 40.05 -116.102 - 69 10.6994 844 2 1 -11.2363 45.276 -144.45 - 69 105.816 843 2 1 -11.25 45.27 -144.491 - 69 228.053 1125 2 0 -11.7358 45.1553 -145.85 - 69 72.1498 779 1 1 -24.1054 43.2065 -174.45 - 69 54.7678 778 1 1 -24.25 43.0462 -174.695 - 69 64.12 1111 1 0 -24.9315 42.3479 -175.85 - 69 85.4168 1110 1 0 -25.0206 42.25 -176.011 - 69 202.987 705 0 1 -38.8834 23.6873 -204.45 - 69 48.7269 1009 0 0 -39.0894 21.9978 -205.85 - 69 74.1427 1008 0 0 -39.1068 21.85 -205.973 - 69 55.1643 1007 0 0 -39.1276 21.65 -206.144 - 69 235.418 963 0 0 -32.2971 12.7108 -206.25 -Number of digits in this event: 64 -Using G4ParticleGun... -Particle energy: 7.53849 LIN +Number of tracker hits in this event: 49 + 69 115.674 869 11 1 -6.07914 6.01886 125.55 + 69 122.325 929 11 0 -6.07933 6.01661 124.15 + 69 114.598 869 10 1 -6.08644 5.97562 95.55 + 69 125.879 929 10 0 -6.08924 5.97469 94.15 + 69 364.027 869 9 1 -6.15428 5.96318 65.55 + 69 176.218 929 9 0 -6.15645 5.96161 64.15 + 69 128.294 869 8 1 -6.17964 5.91414 35.55 + 69 150.795 929 8 0 -6.18061 5.91141 34.15 + 69 118.201 869 7 1 -6.1977 5.86255 5.55 + 69 145.293 929 7 0 -6.19821 5.85658 4.15 + 69 158.084 869 6 1 -6.19609 5.72812 -24.45 + 69 135.307 928 6 0 -6.19624 5.72059 -25.85 + 69 132.973 869 5 1 -6.19941 5.58345 -54.45 + 69 91.9855 927 5 0 -6.20027 5.57963 -55.85 + 69 200.519 869 4 1 -6.22124 5.50495 -84.45 + 69 261.274 927 4 0 -6.21934 5.50174 -85.85 + 69 106.092 869 3 1 -6.18492 5.43349 -114.45 + 69 223.179 926 3 0 -6.18272 5.43172 -115.85 + 69 151.453 869 2 1 -6.13698 5.39685 -144.45 + 69 156.342 926 2 0 -6.13493 5.39716 -145.85 + 69 105.078 869 1 1 -6.09 5.40772 -174.45 + 69 221.603 926 1 0 -6.08525 5.40761 -175.85 + 69 114.608 870 0 1 -5.99367 5.41298 -204.45 + 69 207.146 926 0 0 -6.00049 5.41796 -205.85 + 69 224.489 1021 4 0 -62.3319 24.334 -86.25 + 69 171.362 378 8 1 -104.416 -101.455 35.15 + 69 166.216 377 8 1 -104.55 -101.467 35.3553 + 69 121.417 868 6 1 -6.25007 5.69791 -24.7629 + 69 203.594 868 4 1 -6.25 5.64706 -84.5964 + 69 299.736 868 3 1 -6.35041 3.71869 -114.45 + 69 73.9353 867 3 1 -6.45 3.72003 -114.678 + 69 119.667 918 3 0 -6.97971 3.77976 -115.85 + 69 36.6106 810 2 1 -18.0003 5.95727 -144.45 + 69 89.3256 809 2 1 -18.05 5.92453 -144.585 + 69 162.449 927 2 0 -18.5504 5.61195 -145.85 + 69 46.0635 751 1 1 -29.7672 -2.0971 -174.45 + 69 106.321 750 1 1 -29.85 -2.06826 -174.587 + 69 28.7332 890 1 0 -30.4316 -1.86796 -175.85 + 69 158.999 891 1 0 -30.4872 -1.85 -175.971 + 69 46.7949 668 0 1 -46.364 0.288346 -204.45 + 69 85.277 667 0 1 -46.45 0.293586 -204.58 + 69 70.8307 666 0 1 -46.65 0.321573 -204.815 + 69 140.421 902 0 0 -47.6893 0.491164 -205.851 + 69 141.676 929 4 0 -6.27948 5.90343 -85.85 + 69 221.156 923 4 0 -27.2515 4.84935 -86.25 + 69 242.731 922 4 0 -27.6231 4.64998 -86.0556 + 69 190.138 921 4 0 -27.8654 4.45 -85.9295 + 69 3.15718 771 4 1 -25.659 3.48577 -84.85 + 69 302.2 772 4 1 -25.65 3.48131 -84.8447 +Number of digits in this event: 33 +Using G4ParticleGun... +Particle energy: 6.40084 LIN Particle: e- Event: 70 -Number of tracker hits in this event: 194 - 70 201.508 935 11 1 7.08794 45.6941 125.55 - 70 127.318 1128 11 0 7.08571 45.6939 124.15 - 70 119.755 934 10 1 7.04212 45.6873 95.55 - 70 123.807 1128 10 0 7.0394 45.6864 94.15 - 70 108.613 934 9 1 6.98315 45.6701 65.55 - 70 116.32 1128 9 0 6.98087 45.6691 64.15 - 70 351.043 934 8 1 6.92959 45.6455 35.55 - 70 350.974 1127 8 0 6.92609 45.6446 34.15 - 70 13.8875 934 7 1 6.85019 45.625 5.55 - 70 88.7842 933 7 1 6.85 45.625 5.48151 - 70 140.173 1127 7 0 6.84614 45.6235 4.15 - 70 122.196 933 6 1 6.76366 45.596 -24.45 - 70 198.119 1127 6 0 6.75853 45.5946 -25.85 - 70 134.682 933 5 1 6.65408 45.565 -54.45 - 70 140.695 1127 5 0 6.64909 45.5644 -55.85 - 70 225.022 932 4 1 6.54439 45.5486 -84.45 - 70 279.916 1127 4 0 6.54039 45.5479 -85.85 - 70 426.243 932 3 1 6.45227 45.5373 -114.45 - 70 677.55 1127 3 0 6.449 45.5378 -115.85 - 70 240.648 931 2 1 6.37763 45.5489 -144.45 - 70 116.626 1127 2 0 6.37344 45.5538 -145.85 - 70 321.043 931 1 1 6.28727 45.65 -174.45 - 70 507.34 1128 1 0 6.28129 45.6548 -175.85 - 70 169.748 930 0 1 6.15124 45.7609 -204.45 - 70 122.841 1128 0 0 6.14618 45.766 -205.85 - 70 97.0854 1753 9 1 170.912 -56.6064 65.55 - 70 76.5729 120 4 0 33.108 -155.971 -86.25 - 70 187.089 121 4 0 33.1493 -155.95 -86.078 - 70 97.5265 1066 4 1 33.3165 -155.817 -84.8499 - 70 200.073 780 5 0 6.52476 -24.0439 -56.2496 - 70 188.153 926 5 1 5.43839 -23.8397 -54.8498 - 70 66.8251 925 5 1 5.25 -23.8287 -54.6469 - 70 23.0235 927 5 1 5.45028 -23.4341 -54.7898 - 70 270.878 783 5 0 6.31273 -23.4309 -55.85 - 70 33.01 784 5 0 7.18553 -23.25 -56.2083 - 70 44.4158 558 5 0 144.805 -68.2728 -56.25 - 70 86.2117 557 5 0 144.888 -68.4501 -56.1652 - 70 78.738 556 5 0 144.98 -68.6503 -56.1187 - 70 55.5608 555 5 0 145.088 -68.85 -56.0557 - 70 51.6937 554 5 0 145.15 -69.05 -55.9647 - 70 54.7358 553 5 0 145.217 -69.25 -55.9056 - 70 33.7707 552 5 0 145.268 -69.45 -55.8649 - 70 84.4053 1625 5 1 145.31 -72.3696 -54.85 - 70 6.87734 1626 5 1 145.35 -72.6166 -54.843 - 70 14.9546 513 5 0 146.857 -77.3991 -55.85 - 70 67.6222 512 5 0 146.871 -77.4505 -55.8631 - 70 172.999 511 5 0 146.854 -77.65 -55.9082 - 70 44.825 510 5 0 146.835 -77.85 -55.957 - 70 102.187 509 5 0 146.8 -78.05 -55.9842 - 70 204.343 508 5 0 146.85 -78.25 -56.1144 - 70 45.5157 507 5 0 146.585 -78.45 -56.2459 - 70 216.338 1237 5 1 67.5408 46.7937 -54.45 - 70 206.89 1238 5 1 67.65 47.2042 -54.5261 - 70 63.3228 1236 5 1 67.45 47.6198 -54.7129 - 70 62.956 1235 5 1 67.25 47.6887 -54.7644 - 70 47.3979 1143 5 0 66.097 48.7421 -55.85 - 70 36.661 1144 5 0 66.039 48.85 -55.8733 - 70 63.2405 1229 5 1 65.9072 50.9807 -54.8499 - 70 65.0178 1228 5 1 65.85 51.0445 -54.8248 - 70 55.2528 1160 5 0 65.8755 52.1474 -55.85 - 70 104.232 1230 5 1 66.05 52.3334 -54.8293 - 70 132.048 935 2 1 7.1496 46.17 -144.451 - 70 178.309 1130 2 0 7.17838 46.1073 -145.851 - 70 264.163 939 1 1 7.85804 44.6533 -174.45 - 70 190.279 1122 1 0 7.85829 44.5586 -175.851 - 70 172.097 937 0 1 7.63919 42.4852 -204.45 - 70 122.896 1111 0 0 7.63704 42.3893 -205.85 - 70 56.1765 938 1 1 7.77786 44.6463 -174.451 - 70 96.3159 1121 1 0 8.42617 44.45 -175.932 - 70 9.7668 1130 1 0 -26.8436 46.0775 -176.25 - 70 114.203 1129 1 0 -26.8429 46.0498 -176.206 - 70 174.279 933 2 1 6.69221 45.9486 -144.45 - 70 252.274 1129 2 0 6.72861 46.0124 -145.85 - 70 108.922 937 1 1 7.48996 47.4362 -174.45 - 70 161.986 1137 1 0 7.50185 47.5288 -175.85 - 70 142.873 938 0 1 7.75085 49.3468 -204.45 - 70 143.335 1147 0 0 7.73747 49.4762 -205.85 - 70 476.026 931 3 1 6.44925 45.546 -114.646 - 70 165.995 1126 3 0 5.5273 45.405 -115.85 - 70 73.5387 1208 3 0 -16.3707 61.72 -116.25 - 70 62.644 1209 3 0 -16.339 61.85 -116.108 - 70 55.0943 1210 3 0 -16.2812 62.05 -115.964 - 70 62.8425 823 3 1 -15.3362 63.9117 -114.85 - 70 94.8961 824 3 1 -15.2496 64.121 -114.775 - 70 138.978 825 3 1 -15.05 64.2871 -114.699 - 70 156.505 826 3 1 -14.85 64.4666 -114.547 - 70 2.80618 1218 3 0 -14.3618 63.6579 -115.85 - 70 200.672 1217 3 0 -14.3579 63.65 -115.86 - 70 145.35 930 2 1 6.24833 45.8476 -144.45 - 70 106.665 1131 1 0 6.29806 46.42 -175.85 - 70 133.715 931 0 1 6.29599 46.9474 -204.45 - 70 122.925 1134 0 0 6.31703 46.9775 -205.85 - 70 112.652 930 3 1 6.24995 44.9853 -114.705 - 70 10.3626 1120 3 0 5.33174 44.0711 -115.85 - 70 204.73 1119 3 0 5.31146 44.05 -115.877 - 70 0.156742 1118 3 0 5.0686 43.85 -116.248 - 70 169.721 1125 2 0 6.26081 45.1989 -145.85 - 70 172.731 927 1 1 5.56445 44.2072 -174.45 - 70 151.437 1120 1 0 5.57103 44.1162 -175.85 - 70 112.595 928 0 1 5.81103 42.1596 -204.45 - 70 54.397 1110 0 0 5.79045 42.0625 -205.85 - 70 70.2381 1109 0 0 5.78809 42.05 -206.032 - 70 111.405 160 2 1 -148.11 35.6938 -144.45 - 70 71.3399 159 2 1 -148.15 35.647 -144.503 - 70 155.416 926 7 1 5.43978 46.1542 5.55 - 70 132.492 1131 7 0 5.26646 46.283 4.15 - 70 136.471 908 6 1 1.82202 48.1621 -24.4504 - 70 119.325 1139 6 0 1.68663 48.034 -25.8501 - 70 226.312 897 5 1 -0.511272 44.8522 -54.45 - 70 172.828 1123 5 0 -0.590194 44.7264 -55.85 - 70 158.339 884 4 1 -3.07532 41.79 -84.45 - 70 123.558 1106 4 0 -3.3548 41.4239 -85.85 - 70 236.637 854 3 1 -9.21179 33.8641 -114.45 - 70 33.3073 1067 3 0 -9.0376 33.4709 -115.85 - 70 88.9721 1066 3 0 -9.02973 33.4499 -115.916 - 70 64.5505 898 2 1 -0.302231 18.2795 -144.45 - 70 83.0307 899 2 1 -0.249976 18.4313 -144.584 - 70 18.2297 999 2 0 0.05 19.9459 -146.196 - 70 79.3127 1220 2 0 -17.7714 64.1364 -146.25 - 70 285.126 1221 2 0 -17.9849 64.25 -146.13 - 70 128.277 1222 2 0 -18.7908 64.45 -146.051 - 70 32.4979 801 2 1 -19.7862 64.7832 -144.85 - 70 96.6048 800 2 1 -19.85 64.7861 -144.762 - 70 16.8129 799 2 1 -20.05 64.7929 -144.508 - 70 146.588 1223 2 0 -8.04454 64.7498 -145.85 - 70 96.5889 853 3 1 -9.25 33.8838 -114.652 - 70 23.4922 1069 3 0 -9.4892 34.037 -115.85 - 70 136.126 1070 3 0 -9.50835 34.05 -115.941 - 70 80.1783 816 2 1 -16.6615 40.2034 -144.45 - 70 100.04 815 2 1 -16.8503 40.3873 -144.567 - 70 102.984 814 2 1 -17.05 40.5872 -144.69 - 70 8.47232 813 2 1 -17.25 40.7844 -144.828 - 70 9.04143 1110 2 0 -18.87 42.2209 -145.85 - 70 96.2514 1111 2 0 -18.9024 42.25 -145.87 - 70 117.139 1112 2 0 -19.137 42.451 -146.046 - 70 165.356 1113 2 0 -19.3661 42.6501 -146.229 - 70 88.8768 1095 2 0 -119.172 39.1805 -146.25 - 70 193.09 1094 2 0 -119.417 39.05 -146.138 - 70 153.727 1093 2 0 -119.797 38.85 -145.974 - 70 5.03117 278 2 1 -124.536 36.8209 -144.85 - 70 48.2062 277 2 1 -124.55 36.8149 -144.847 - 70 127.15 276 2 1 -124.75 36.734 -144.815 - 70 87.3118 275 2 1 -124.95 36.6487 -144.791 - 70 78.0731 274 2 1 -125.15 36.5819 -144.772 - 70 63.5366 273 2 1 -125.35 36.5087 -144.757 - 70 49.9779 272 2 1 -125.55 36.4258 -144.75 - 70 50.5848 271 2 1 -125.75 36.3446 -144.752 - 70 65.7531 270 2 1 -125.95 36.2674 -144.761 - 70 91.6373 269 2 1 -126.15 36.1753 -144.78 - 70 64.2211 268 2 1 -126.35 36.0866 -144.793 - 70 73.1419 267 2 1 -126.55 36.0113 -144.79 - 70 63.6085 266 2 1 -126.75 35.9317 -144.777 - 70 67.6308 265 2 1 -126.95 35.834 -144.77 - 70 54.6059 264 2 1 -127.15 35.7259 -144.761 - 70 161.15 263 2 1 -127.35 35.6227 -144.766 - 70 58.7824 262 2 1 -127.55 35.5153 -144.767 - 70 90.605 261 2 1 -127.75 35.4032 -144.787 - 70 100.158 260 2 1 -127.95 35.2824 -144.831 - 70 89.2145 259 2 1 -128.15 35.161 -144.835 - 70 69.7285 258 2 1 -128.35 35.0574 -144.813 - 70 62.5688 257 2 1 -128.55 34.9366 -144.738 - 70 73.0665 256 2 1 -128.75 34.8276 -144.616 - 70 42.0647 255 2 1 -128.95 34.7168 -144.508 - 70 28.0907 254 2 1 -129.306 34.1516 -144.45 - 70 83.506 253 2 1 -129.35 34.1341 -144.555 - 70 125.26 1070 2 0 -129.895 34.171 -145.85 - 70 49.8748 183 1 1 -143.483 28.0049 -174.45 - 70 135.607 182 1 1 -143.55 27.853 -174.539 - 70 23.5555 181 1 1 -143.75 27.5204 -174.813 - 70 46.9507 1029 1 0 -144.393 25.9861 -175.85 - 70 64.3706 1028 1 0 -144.428 25.8499 -175.936 - 70 53.1005 1027 1 0 -144.472 25.65 -176.01 - 70 160.427 1026 1 0 -144.492 25.45 -176.036 - 70 136.472 1025 1 0 -144.459 25.2496 -176.106 - 70 116.678 937 7 1 7.63064 45.8124 5.54973 - 70 101.739 1128 7 0 7.67045 45.7561 4.15 - 70 74.2673 940 6 1 8.23747 44.2655 -24.45 - 70 32.8103 941 6 1 8.25 44.2613 -24.7279 - 70 246.009 1120 6 0 8.29534 44.2471 -25.85 - 70 99.093 948 5 1 9.79759 43.4577 -54.45 - 70 137.953 1117 5 0 9.90887 43.4828 -55.85 - 70 137.988 961 4 1 12.3997 44.1483 -84.4501 - 70 210.122 1120 4 0 12.496 44.1426 -85.85 - 70 150.282 972 3 1 14.5988 44.5356 -114.45 - 70 209.818 1121 3 0 14.7565 44.3999 -115.85 - 70 64.845 988 2 1 17.8139 42.0477 -144.45 - 70 45.2564 989 2 1 17.85 42.0452 -144.661 - 70 152.606 1109 2 0 18.0652 42.0322 -145.85 - 70 105.027 1015 1 1 23.1695 42.0449 -174.45 - 70 15.8403 1016 1 1 23.25 42.0545 -174.817 - 70 125.945 1110 1 0 23.4467 42.1083 -175.85 - 70 70.7346 1044 0 1 29.0012 43.6477 -204.45 - 70 66.3928 1045 0 1 29.05 43.6605 -204.608 - 70 138.529 1118 0 0 29.452 43.7733 -205.85 -Number of digits in this event: 81 +Number of tracker hits in this event: 27 + 70 140.546 1035 9 1 27.0727 130.99 65.55 + 70 115.206 1554 9 0 27.0737 130.987 64.15 + 70 109.916 1035 8 1 27.0887 130.932 35.55 + 70 209.132 1553 8 0 27.0898 130.93 34.15 + 70 149.805 1035 7 1 27.1074 130.897 5.55 + 70 127.659 1553 7 0 27.1083 130.896 4.15 + 70 117.948 1035 6 1 27.1247 130.87 -24.45 + 70 114.526 1553 6 0 27.1246 130.87 -25.85 + 70 105.085 1035 5 1 27.1255 130.853 -54.45 + 70 104.235 1553 5 0 27.126 130.852 -55.85 + 70 89.5608 1035 4 1 27.14 130.846 -84.45 + 70 163.397 1553 4 0 27.1422 130.847 -85.85 + 70 103.128 1035 3 1 27.1856 130.852 -114.45 + 70 191.279 1553 3 0 27.1867 130.852 -115.85 + 70 117.249 1035 2 1 27.2134 130.846 -144.45 + 70 114.422 1553 2 0 27.2158 130.845 -145.85 + 70 108.089 1036 1 1 27.264 130.832 -174.45 + 70 154.724 1553 1 0 27.2624 130.831 -175.85 + 70 119.884 1035 0 1 27.2218 130.801 -204.45 + 70 115.763 1553 0 0 27.2208 130.804 -205.85 + 70 70.1482 1101 1 1 40.3659 105.938 -174.85 + 70 77.8119 515 2 1 -76.9752 94.251 -144.45 + 70 85.6581 514 2 1 -77.05 94.3594 -144.453 + 70 12.9131 901 2 0 30.7135 0.45 -145.923 + 70 34.1095 1050 2 1 30.215 -0.731692 -144.85 + 70 4.82026 1051 2 1 30.25 -0.7731 -144.839 + 70 195.896 892 2 0 30.3634 -1.49353 -145.85 +Number of digits in this event: 10 Using G4ParticleGun... -Particle energy: 1.58247 LIN +Particle energy: 8.75506 LIN Particle: e- Event: 71 -Number of tracker hits in this event: 39 - 71 112.428 494 9 1 -81.0804 102.375 65.55 - 71 121.765 1411 9 0 -81.0814 102.377 64.15 - 71 133.986 494 8 1 -81.1262 102.418 35.55 - 71 124.518 1411 8 0 -81.1257 102.416 34.15 - 71 104.202 494 7 1 -81.1092 102.361 5.55 - 71 113.401 1410 7 0 -81.086 102.308 4.15 - 71 143.349 496 6 1 -80.7698 100.903 -24.45 - 71 106.071 1403 6 0 -80.7451 100.822 -25.85 - 71 180.471 498 5 1 -80.3061 98.8784 -54.45 - 71 126.883 1392 5 0 -80.2583 98.7017 -55.85 - 71 127.235 503 4 1 -79.3634 94.973 -84.45 - 71 130.014 1373 4 0 -79.2742 94.8311 -85.85 - 71 114.913 513 3 1 -77.3377 91.6184 -114.45 - 71 117.811 1356 3 0 -77.2476 91.5326 -115.85 - 71 122.238 523 2 1 -75.3141 89.6033 -144.45 - 71 107.199 1347 2 0 -75.2018 89.4913 -145.85 - 71 103.956 536 1 1 -72.8422 86.8978 -174.45 - 71 133.606 1333 1 0 -72.757 86.7747 -175.85 - 71 171.302 544 0 1 -71.1933 84.2399 -204.45 - 71 95.9549 1320 0 0 -71.1277 84.1878 -205.85 - 71 81.9437 495 7 1 -80.9808 102.43 5.54979 - 71 131.371 496 7 1 -80.85 102.597 5.38927 - 71 80.6354 497 7 1 -80.6497 102.764 5.25521 - 71 53.2667 498 7 1 -80.4499 102.822 5.21485 - 71 98.716 499 7 1 -80.25 102.729 5.20038 - 71 45.2118 500 7 1 -80.05 102.465 5.18069 - 71 31.7131 1402 7 0 -78.7776 100.646 4.15 - 71 83.9384 1401 7 0 -78.7271 100.55 4.09093 - 71 80.4569 1400 7 0 -78.6765 100.35 3.92451 - 71 31.8816 1399 7 0 -78.7517 100.15 3.79946 - 71 241.099 495 1 1 -81.0357 102.068 -174.45 - 71 346.482 1409 1 0 -81.0342 102.064 -175.85 - 71 273.947 495 0 1 -80.9479 102.019 -204.45 - 71 221.282 1409 0 0 -80.9501 102.009 -205.85 - 71 28.0441 1787 1 0 -35.7887 177.55 -176.213 - 71 5.4767 1606 0 0 -18.2782 141.549 -206.25 - 71 191.6 1607 0 0 -18.2778 141.55 -206.25 - 71 126.824 599 0 1 -60.2074 117.559 -204.85 - 71 136.385 600 0 1 -60.05 116.868 -204.613 -Number of digits in this event: 21 +Number of tracker hits in this event: 22 + 71 115.478 393 7 1 -101.432 -105.548 5.55 + 71 462.251 373 7 0 -101.43 -105.549 4.15 + 71 109.272 393 6 1 -101.404 -105.566 -24.45 + 71 118.717 372 6 0 -101.402 -105.567 -25.85 + 71 154.924 393 5 1 -101.367 -105.593 -54.45 + 71 191.566 372 5 0 -101.365 -105.594 -55.85 + 71 119.674 394 4 1 -101.315 -105.612 -84.45 + 71 162.02 372 4 0 -101.313 -105.613 -85.85 + 71 118.752 394 3 1 -101.274 -105.633 -114.45 + 71 127.039 372 3 0 -101.272 -105.634 -115.85 + 71 100.604 394 2 1 -101.227 -105.656 -144.45 + 71 130.465 372 2 0 -101.226 -105.657 -145.85 + 71 194.742 394 1 1 -101.21 -105.682 -174.45 + 71 239.504 372 1 0 -101.209 -105.683 -175.85 + 71 108.466 394 0 1 -101.178 -105.701 -204.45 + 71 121.251 372 0 0 -101.176 -105.703 -205.85 + 71 6.02003 229 0 1 -134.205 -96.7684 -204.85 + 71 125.716 702 0 0 -110.096 -39.65 -206.181 + 71 255.365 228 0 1 -134.35 -96.7406 -204.611 + 71 32.5604 1149 1 0 57.2341 50.05 -176.08 + 71 92.5792 369 1 0 -101.911 -106.304 -175.85 + 71 28.6817 372 7 0 -101.667 -105.55 3.87012 +Number of digits in this event: 14 Using G4ParticleGun... -Particle energy: 7.08243 LIN +Particle energy: 4.42972 LIN Particle: e- Event: 72 -Number of tracker hits in this event: 112 - 72 126.131 1337 10 1 87.4588 53.1997 95.55 - 72 134.183 1165 10 0 87.4593 53.2 94.15 - 72 113.084 1337 9 1 87.4698 53.2043 65.55 - 72 131.188 1165 9 0 87.4699 53.2037 64.15 - 72 422.232 1337 8 1 87.4732 53.1884 35.55 - 72 389.103 1165 8 0 87.4749 53.1893 34.15 - 72 208.572 1337 7 1 87.5088 53.2092 5.55 - 72 125.183 1165 7 0 87.5112 53.2101 4.15 - 72 113.25 1337 6 1 87.5558 53.2287 -24.45 - 72 172.533 1165 6 0 87.5588 53.2256 -25.85 - 72 328.385 1337 5 1 87.6268 53.1539 -54.45 - 72 388.048 1165 5 0 87.6275 53.1513 -55.85 - 72 116.006 1337 4 1 87.6487 53.0953 -84.45 - 72 284.36 1165 4 0 87.6494 53.0934 -85.85 - 72 306.694 1338 3 1 87.6727 53.059 -114.45 - 72 179.868 1165 3 0 87.6765 53.0544 -115.85 - 72 359.583 1338 2 1 87.7593 52.9799 -144.45 - 72 156.835 1164 2 0 87.7652 52.9781 -145.85 - 72 345.96 1339 1 1 87.8973 52.9312 -174.45 - 72 127.378 1164 1 0 87.9021 52.9342 -175.85 - 72 234.636 1339 0 1 87.9869 52.9919 -204.45 - 72 105.437 1164 0 0 87.9906 52.9958 -205.85 - 72 126.685 855 3 0 130.103 -9.02995 -116.25 - 72 14.1853 854 3 0 130.181 -9.05 -116.197 - 72 25.9785 975 0 0 83.7831 15.1069 -206.25 - 72 68.0975 974 0 0 83.7177 15.05 -206.193 - 72 168.379 973 0 0 83.7195 14.8494 -206.114 - 72 149.912 1318 0 1 83.8008 14.6297 -204.85 - 72 237.435 1319 0 1 83.85 14.6056 -204.622 - 72 23.2916 1624 2 1 145.015 8.72945 -144.85 - 72 45.9752 1565 3 1 133.33 -16.8621 -114.85 - 72 59.0799 1165 1 0 87.8958 53.1134 -175.85 - 72 359.263 1166 1 0 87.8912 53.2504 -176.061 - 72 127.86 1336 4 1 87.4419 52.9997 -84.45 - 72 98.8176 1164 4 0 87.4313 52.9964 -85.85 - 72 106.532 1335 3 1 87.0951 52.8833 -114.45 - 72 122.943 1164 3 0 87.074 52.8722 -115.85 - 72 115.251 1331 2 1 86.4429 52.6469 -144.45 - 72 102.84 1162 2 0 86.419 52.5746 -145.85 - 72 160.512 1330 1 1 86.125 51.0272 -174.45 - 72 136.774 1154 1 0 86.1558 50.9257 -175.85 - 72 118.3 1334 0 1 86.8832 48.7275 -204.45 - 72 102.919 1142 0 0 86.821 48.5843 -205.85 - 72 113.615 1338 4 1 87.667 53.2065 -84.45 - 72 107.569 1166 3 0 87.7295 53.265 -115.85 - 72 130.782 1166 2 0 87.8109 53.2993 -145.85 - 72 136.705 1166 0 0 87.977 53.277 -205.85 - 72 88.9426 1167 2 0 87.6684 53.4502 -145.868 - 72 94.4167 1078 2 0 104.072 35.7908 -146.25 - 72 69.4032 1077 2 0 104.171 35.6499 -146.097 - 72 63.5193 1076 2 0 104.285 35.45 -145.956 - 72 61.8887 1075 2 0 104.419 35.2498 -145.917 - 72 30.3601 1074 2 0 104.57 35.0498 -145.888 - 72 53.7544 1432 2 1 106.621 33.0615 -144.85 - 72 72.5358 1433 2 1 106.75 32.9659 -144.79 - 72 60.1967 1434 2 1 106.95 32.8219 -144.729 - 72 101.887 1435 2 1 107.15 32.6746 -144.674 - 72 31.144 1436 2 1 107.35 32.3984 -144.521 - 72 242.454 1336 7 1 87.4348 52.4914 5.55 - 72 125.889 1161 7 0 87.4477 52.4267 4.15 - 72 127.909 1338 6 1 87.8259 50.9536 -24.45 - 72 150.214 1154 6 0 87.8231 50.866 -25.85 - 72 47.952 1153 6 0 87.8221 50.85 -26.1094 - 72 252.762 1338 5 1 87.8048 49.2265 -54.45 - 72 106.33 1145 5 0 87.7819 49.1408 -55.85 - 72 190.417 1335 4 1 87.2131 47.2696 -84.45 - 72 109.25 1135 4 0 87.1761 47.2014 -85.85 - 72 100.038 1332 3 1 86.4726 45.7539 -114.45 - 72 141.439 1128 3 0 86.5081 45.6876 -115.85 - 72 108.477 1337 2 1 87.4947 44.3577 -144.45 - 72 110.404 1121 2 0 87.5196 44.3115 -145.85 - 72 87.691 1340 1 1 88.1154 43.4547 -174.45 - 72 113.353 1116 1 0 88.1301 43.4076 -175.85 - 72 114.569 1341 0 1 88.2889 42.3686 -204.45 - 72 113.721 1111 0 0 88.279 42.3006 -205.85 - 72 94.5318 1129 4 0 84.6083 46.0377 -85.8502 - 72 197.271 1128 4 0 84.582 45.85 -85.9755 - 72 6.501 1123 4 0 168.454 44.7947 -86.25 - 72 82.9352 1141 5 0 88.2548 48.4256 -55.85 - 72 110.049 1140 5 0 88.4009 48.25 -56.1154 - 72 52.2477 1087 5 0 73.3068 37.4891 -56.25 - 72 137.011 1086 5 0 73.1855 37.45 -56.1183 - 72 55.7674 1262 5 1 72.5135 37.2392 -54.8497 - 72 127.119 1261 5 1 72.45 37.2164 -54.7113 - 72 237.736 1260 5 1 72.2499 37.347 -54.4763 - 72 207.103 1259 5 1 72.05 37.5296 -54.4682 - 72 230.65 1325 0 1 85.1087 48.3086 -204.45 - 72 112.435 1140 0 0 85.1916 48.2366 -205.85 - 72 26.5137 1326 0 1 85.25 48.2263 -204.796 - 72 152.921 1139 0 0 85.6791 47.9954 -205.85 - 72 120.694 1162 7 0 87.392 52.475 4.15 - 72 143.11 1339 6 1 87.9758 52.3875 -24.45 - 72 103.436 1161 6 0 87.973 52.3789 -25.85 - 72 225.938 1339 5 1 88.0054 52.2246 -54.45 - 72 353.848 1160 5 0 87.994 52.2311 -55.85 - 72 132.32 1339 4 1 87.9645 52.3764 -84.45 - 72 106.538 1161 4 0 87.9623 52.3579 -85.85 - 72 115.939 1340 3 1 88.0531 51.7976 -114.45 - 72 123.031 1158 3 0 88.0722 51.7843 -115.85 - 72 125.262 1342 2 1 88.6087 51.6858 -144.45 - 72 2.50821 1158 2 0 88.6438 51.6503 -145.85 - 72 113.486 1157 2 0 88.6442 51.65 -145.864 - 72 141.787 1348 1 1 89.7077 51.191 -174.45 - 72 145.379 1155 1 0 89.7571 51.1643 -175.85 - 72 113.82 1353 0 1 90.8221 50.6571 -204.45 - 72 110.911 1152 0 0 90.8442 50.6259 -205.85 - 72 48.1004 1583 0 1 136.75 10.2749 -204.638 - 72 80.6086 1340 5 1 88.05 52.1738 -54.6518 - 72 36.5654 1341 5 1 88.25 52.1977 -54.7504 - 72 35.9454 1161 5 0 88.8367 52.25 -55.966 - 72 206.53 1078 5 0 127.168 35.746 -56.2499 - 72 153.096 1158 8 0 86.9938 51.8358 34.15 -Number of digits in this event: 57 -Using G4ParticleGun... -Particle energy: 7.19988 LIN +Number of tracker hits in this event: 107 + 72 184.299 1051 11 1 30.3073 60.5582 125.55 + 72 102.077 1202 11 0 30.306 60.558 124.15 + 72 122.344 1051 10 1 30.2807 60.5511 95.55 + 72 225.518 1202 10 0 30.2924 60.5566 94.15 + 72 123.607 1052 9 1 30.5415 60.6616 65.55 + 72 293.846 1203 9 0 30.5533 60.6661 64.15 + 72 194.23 1053 8 1 30.7891 60.7522 35.55 + 72 115.767 1203 8 0 30.7987 60.7547 34.15 + 72 150.16 1054 7 1 30.9818 60.821 5.55 + 72 142.089 1203 7 0 30.9867 60.8236 4.15 + 72 517.267 1055 6 1 31.0956 60.8863 -24.45 + 72 371.622 1204 6 0 31.1014 60.8856 -25.85 + 72 107.489 1055 5 1 31.2263 60.8963 -54.45 + 72 241.282 1204 5 0 31.2344 60.8991 -55.85 + 72 374.732 1056 4 1 31.4034 60.9506 -84.45 + 72 122.133 1204 4 0 31.4096 60.9505 -85.85 + 72 119.157 1057 3 1 31.5282 60.9664 -114.45 + 72 142.187 1204 3 0 31.5353 60.9664 -115.85 + 72 130.668 1058 2 1 31.6587 60.9494 -144.45 + 72 111.375 1204 2 0 31.6631 60.9459 -145.85 + 72 132.149 1058 1 1 31.7505 60.8373 -174.45 + 72 102.844 1203 1 0 31.7544 60.831 -175.85 + 72 121.167 1058 0 1 31.8285 60.7059 -204.45 + 72 463.399 1203 0 0 31.8377 60.698 -205.85 + 72 250.783 1057 0 1 31.5378 61.2954 -204.45 + 72 34.6138 1056 0 1 31.45 61.145 -204.526 + 72 115.528 1055 7 1 31.0501 60.8148 5.32057 + 72 100.371 1055 0 1 31.0817 60.5179 -204.85 + 72 29.36 1054 0 1 31.05 60.4619 -204.568 + 72 79.0107 1202 0 0 31.4947 60.65 -205.913 + 72 4.38189 1067 0 1 33.5344 62.0655 -204.85 + 72 53.9115 1216 0 0 35.2655 63.3938 -205.85 + 72 109.2 1217 0 0 35.3715 63.4501 -205.88 + 72 79.4535 1084 0 1 36.9274 65.203 -204.85 + 72 111.231 1056 5 1 31.3649 60.9792 -54.45 + 72 103.416 1057 4 1 31.5769 61.3662 -84.45 + 72 115.326 1206 4 0 31.5893 61.3876 -85.85 + 72 61.5269 1060 3 1 32.1327 61.6186 -114.45 + 72 103.406 1061 3 1 32.25 61.4936 -114.546 + 72 104.135 1062 3 1 32.45 61.2843 -114.696 + 72 22.4262 1063 3 1 32.65 61.1042 -114.819 + 72 48.2732 1198 3 0 34.1295 59.7475 -115.85 + 72 106.953 1197 3 0 34.2393 59.6499 -115.926 + 72 93.7314 1196 3 0 34.4722 59.4497 -116.089 + 72 4.95923 1195 3 0 34.7143 59.25 -116.24 + 72 33.2062 1292 2 1 78.5455 21.4986 -144.45 + 72 146.982 1293 2 1 78.6501 21.4805 -144.549 + 72 27.0695 1294 2 1 78.85 21.4254 -144.76 + 72 189.762 1005 2 0 79.8196 21.1827 -145.85 + 72 85.3072 885 2 0 167.192 -2.96454 -146.25 + 72 290.789 884 2 0 167.443 -3.05018 -146.117 + 72 4.65319 1749 2 1 170.13 -4.04389 -144.85 + 72 61.3013 1750 2 1 170.15 -4.0512 -144.841 + 72 61.358 1751 2 1 170.35 -4.12672 -144.746 + 72 65.1845 1752 2 1 170.55 -4.21683 -144.636 + 72 105.055 1753 2 1 170.75 -4.31996 -144.516 + 72 85.1448 1059 3 1 31.9009 61.7434 -114.45 + 72 96.8953 884 1 0 76.8662 -3.05 -176.03 + 72 195.345 1208 3 0 31.9542 61.8158 -115.85 + 72 298.178 1047 2 1 29.5399 65.1487 -144.45 + 72 68.9213 1218 2 0 29.1563 63.8452 -145.851 + 72 120.545 1217 2 0 29.0988 63.65 -146.005 + 72 10.2774 1216 2 0 28.979 63.45 -146.233 + 72 5.94198 998 2 0 -5.92644 19.661 -146.25 + 72 136.084 997 2 0 -5.93877 19.65 -146.233 + 72 0.00338316 996 2 0 -6.09455 19.45 -145.851 + 72 83.6842 869 2 1 -6.10105 18.912 -144.85 + 72 322.649 870 2 1 -6.05 18.764 -144.665 + 72 156.065 1226 2 0 29.1864 65.3391 -145.85 + 72 80.1974 1225 2 0 29.0916 65.25 -146.017 + 72 61.3495 1058 3 1 31.85 61.7645 -114.771 + 72 149.029 1211 3 0 31.0782 62.2589 -115.85 + 72 100.283 1212 3 0 30.8942 62.4501 -115.891 + 72 188.496 1052 3 1 30.6419 62.8054 -114.85 + 72 116.005 1054 5 1 31.0324 60.666 -54.45 + 72 148.054 1203 5 0 31.0263 60.6692 -55.85 + 72 98.793 1054 4 1 30.8742 60.7438 -84.45 + 72 124.778 1203 4 0 30.8757 60.7756 -85.85 + 72 120.475 1054 3 1 30.9449 61.3817 -114.45 + 72 112.416 1206 3 0 30.9295 61.4123 -115.85 + 72 138.429 1052 2 1 30.5022 61.947 -144.45 + 72 120.398 1209 2 0 30.4753 61.9572 -145.85 + 72 97.2459 1049 1 1 29.9056 62.1821 -174.45 + 72 106.41 1210 1 0 29.869 62.1676 -175.85 + 72 151.427 1043 0 1 28.8153 61.6238 -204.45 + 72 299.35 1207 0 0 28.7436 61.576 -205.85 + 72 170.69 1208 0 0 51.7549 61.799 -206.25 + 72 99.1697 1159 0 1 51.928 62.3565 -204.85 + 72 31.3125 1160 0 1 52.05 62.565 -204.785 + 72 265.906 1210 0 0 52.8527 62.1438 -205.851 + 72 85.2201 1051 2 1 30.45 61.8334 -144.499 + 72 41.3575 1050 2 1 30.25 61.7377 -144.729 + 72 163.817 1206 2 0 29.2343 61.4315 -145.85 + 72 57.2321 1205 2 0 28.8309 61.25 -146.179 + 72 25.4235 1069 2 0 -29.7315 33.8835 -146.25 + 72 78.0034 1068 2 0 -29.7669 33.85 -146.195 + 72 49.0867 1067 2 0 -29.9636 33.65 -146.003 + 72 232.804 749 2 1 -30.1034 32.3503 -144.85 + 72 115.066 748 2 1 -30.2503 31.8684 -144.58 + 72 259.601 747 2 1 -30.45 31.4727 -144.595 + 72 188.641 1124 7 0 38.5155 44.9723 3.75 + 72 41.8111 1123 7 0 38.5379 44.85 3.7967 + 72 304.544 1063 0 1 32.6961 61.5402 -204.45 + 72 117.95 1206 0 0 32.6229 61.4405 -205.85 + 72 124.807 1214 0 0 43.7552 63.0038 -206.25 + 72 261.646 1213 0 0 43.8082 62.85 -206.097 + 72 40.9326 1686 2 0 -130.774 157.359 -146.25 +Number of digits in this event: 49 +Using G4ParticleGun... +Particle energy: 3.73469 LIN Particle: e- Event: 73 -Number of tracker hits in this event: 187 - 73 149.573 908 10 1 1.80515 84.9488 95.55 - 73 125.965 1324 10 0 1.80499 84.9476 94.15 - 73 379.998 908 9 1 1.804 84.9289 65.55 - 73 227.711 1324 9 0 1.80355 84.9282 64.15 - 73 138.248 908 8 1 1.79724 84.9106 35.55 - 73 264.197 1324 8 0 1.79717 84.9101 34.15 - 73 171.306 908 7 1 1.79933 84.8972 5.55 - 73 241.659 1324 7 0 1.79937 84.8994 4.15 - 73 147.318 908 6 1 1.79823 84.954 -24.45 - 73 232.58 1324 6 0 1.7994 84.9589 -25.85 - 73 129.566 908 5 1 1.84267 85.055 -54.45 - 73 100.313 1325 5 0 1.84729 85.0587 -55.85 - 73 107.928 909 4 1 1.94803 85.1403 -84.45 - 73 415.187 1325 4 0 1.95218 85.1434 -85.85 - 73 361.212 909 3 1 2.03236 85.2117 -114.45 - 73 344.818 1325 3 0 2.03339 85.2089 -115.85 - 73 235.532 910 2 1 2.05779 85.1509 -144.45 - 73 103.092 1325 2 0 2.05748 85.1508 -145.85 - 73 433.487 910 1 1 2.05071 85.127 -174.45 - 73 144.327 1325 1 0 2.04919 85.1271 -175.85 - 73 341.628 909 0 1 2.02238 85.1122 -204.45 - 73 105.386 1325 0 0 2.02279 85.1054 -205.85 - 73 290.432 908 4 1 1.80197 85.1172 -84.45 - 73 210.227 909 2 1 1.99127 85.5943 -144.45 - 73 158.168 1327 2 0 1.99464 85.6217 -145.85 - 73 123.476 1330 1 0 2.0591 86.1982 -175.85 - 73 116.023 1333 0 0 1.87622 86.6602 -205.85 - 73 369.731 908 0 1 1.85 86.6522 -204.512 - 73 10.2481 907 0 1 1.65 86.7691 -204.822 - 73 142.379 1335 0 0 0.368129 87.077 -205.85 - 73 153.599 1336 0 0 -0.161468 87.25 -206.186 - 73 97.6595 1337 0 0 -0.602224 87.45 -206.23 - 73 67.813 1516 0 0 -58.915 123.513 -206.25 - 73 227.089 1517 0 0 -58.9801 123.55 -206.217 - 73 123.657 599 0 1 -60.0676 123.861 -204.85 - 73 7.60368 598 0 1 -60.2501 123.903 -204.466 - 73 141.067 1326 2 0 2.09698 85.3015 -145.85 - 73 133.844 911 1 1 2.31635 85.5333 -174.45 - 73 110.941 1327 1 0 2.32964 85.5372 -175.85 - 73 123.491 912 0 1 2.56798 85.5818 -204.45 - 73 100.508 1327 0 0 2.56157 85.6028 -205.85 - 73 104.463 1363 0 0 -35.4999 92.8683 -206.25 - 73 267.182 1326 4 0 -34.2116 85.3337 -86.25 - 73 728.702 908 3 1 1.84974 85.3285 -114.461 - 73 119.218 907 3 1 1.65 85.3733 -114.52 - 73 49.0126 906 3 1 1.45 85.3697 -114.562 - 73 64.393 905 3 1 1.25 85.3591 -114.612 - 73 442.297 904 3 1 1.05 85.3503 -114.607 - 73 146.804 903 3 1 0.849606 85.3435 -114.612 - 73 61.6909 902 3 1 0.65 85.3545 -114.577 - 73 326.582 901 3 1 0.45 85.3674 -114.552 - 73 108.861 900 3 1 0.25 85.4416 -114.569 - 73 3.97928 899 3 1 -0.0500558 85.6636 -114.847 - 73 319.776 1332 3 0 -2.26159 86.4779 -115.85 - 73 364.345 1324 0 0 1.71699 84.9254 -205.851 - 73 277.493 1323 3 0 1.71438 84.8474 -115.85 - 73 99.4146 908 2 1 1.75788 84.9257 -144.45 - 73 102.259 1324 2 0 1.77046 84.9226 -145.85 - 73 116.485 909 1 1 1.94651 84.8249 -174.45 - 73 116.821 1323 1 0 1.963 84.8325 -175.85 - 73 109.406 911 0 1 2.34199 85.0049 -204.45 - 73 83.4346 905 2 1 1.11224 83.3608 -144.45 - 73 30.1174 904 2 1 1.05 83.2905 -144.743 - 73 116.417 1314 2 0 0.80288 83.0227 -145.85 - 73 212.689 875 1 1 -4.93418 75.1538 -174.45 - 73 191.531 1275 1 0 -5.42677 75.1395 -175.85 - 73 110.172 829 0 1 -14.079 76.1811 -204.45 - 73 52.411 828 0 1 -14.25 76.2216 -204.696 - 73 6.06346 1281 0 0 -15.0467 76.4446 -205.85 - 73 161.542 1282 0 0 -15.0661 76.45 -205.878 - 73 21.9215 876 1 1 -4.84977 75.1231 -174.804 - 73 82.8424 1274 1 0 -3.19816 75.05 -176.025 - 73 55.4153 1273 1 0 -3.1444 74.85 -176.125 - 73 4.82359 1272 1 0 -3.13436 74.6495 -176.236 - 73 41.0583 1044 1 0 -1.66179 28.9481 -176.25 - 73 181.781 1043 1 0 -1.65973 28.8496 -176.144 - 73 132.334 1042 1 0 -1.58514 28.65 -175.915 - 73 40.3854 880 1 1 -3.86097 26.8686 -174.85 - 73 82.1241 1036 1 0 -4.4078 27.364 -175.85 - 73 166.806 907 8 1 1.52191 84.0367 35.55 - 73 100.942 1319 8 0 1.52913 83.9063 34.15 - 73 145.112 907 7 1 1.49371 81.2611 5.54977 - 73 119.949 1305 7 0 1.52216 81.1681 4.15 - 73 111.289 910 6 1 2.21066 79.7298 -24.4502 - 73 122.834 1297 6 0 2.27339 79.6251 -25.85 - 73 134.14 917 5 1 3.54633 77.0907 -54.4501 - 73 155.043 1285 5 0 3.53201 77.093 -55.85 - 73 21.4564 916 4 1 3.25274 77.0948 -84.45 - 73 189.975 915 4 1 3.25 77.0821 -84.5117 - 73 103.801 1283 4 0 3.19377 76.8149 -85.85 - 73 76.7388 1249 3 0 1.05305 69.982 -115.85 - 73 55.3742 1250 3 0 1.0788 70.05 -116.068 - 73 123.845 907 2 1 1.49355 92.7638 -144.45 - 73 213.299 1362 2 0 1.72807 92.7044 -145.85 - 73 97.502 1345 2 0 -5.4029 89.0875 -146.25 - 73 128.516 1346 2 0 -5.40383 89.25 -146.085 - 73 37.7154 1347 2 0 -5.36866 89.45 -145.905 - 73 242.963 873 2 1 -5.31034 90.05 -144.728 - 73 7.63136 1228 2 1 65.85 79.2929 -144.668 - 73 7.78647 1226 2 1 65.45 79.8613 -144.517 - 73 64.1867 1252 3 0 0.730716 70.5033 -115.85 - 73 71.4572 1251 3 0 0.698847 70.4499 -116.018 - 73 252.954 875 2 1 -5.03375 61.4391 -144.451 - 73 136.126 874 2 1 -5.05 61.4113 -144.532 - 73 116.721 1204 2 0 -5.30847 60.9597 -145.85 - 73 38.9581 1203 2 0 -5.37033 60.85 -146.167 - 73 148.429 841 1 1 -11.6774 51.1321 -174.45 - 73 151.388 1152 1 0 -11.9691 50.6236 -175.85 - 73 130.31 811 0 1 -17.7325 40.1323 -204.45 - 73 15.3137 810 0 1 -17.85 39.9939 -204.797 - 73 81.8096 1097 0 0 -18.2251 39.5648 -205.85 - 73 58.3211 1096 0 0 -18.3202 39.4499 -206.123 - 73 193.369 1277 4 0 2.17569 75.6349 -85.8502 - 73 131.358 1276 4 0 2.02331 75.45 -86.1319 - 73 227.375 1316 4 0 32.4821 83.3886 -86.2497 - 73 169.287 1322 9 0 1.25656 84.6074 64.15 - 73 9.31592 773 8 1 -25.2725 83.9219 35.55 - 73 102.27 774 8 1 -25.25 83.8994 35.5378 - 73 121.521 775 8 1 -25.0498 83.706 35.4468 - 73 50.4313 776 8 1 -24.85 83.5485 35.2912 - 73 105.069 1312 8 0 -23.6572 82.5837 34.15 - 73 119.546 1311 8 0 -23.3777 82.45 33.9978 - 73 88.1676 1310 8 0 -23.1191 82.25 33.8793 - 73 392.766 1309 8 0 -22.9161 82.0498 33.8438 - 73 58.5039 1308 8 0 -22.3862 81.85 33.7848 - 73 179.639 906 7 1 1.28965 85.8793 5.54976 - 73 64.0734 1339 7 0 1.28581 87.8714 4.15 - 73 59.65 1340 7 0 1.28404 88.05 4.03303 - 73 81.3264 1341 7 0 1.28535 88.2502 3.90726 - 73 13.1098 1342 7 0 1.29697 88.45 3.77744 - 73 118.593 923 6 1 4.75721 132.215 -24.4501 - 73 113.427 922 6 1 4.65 132.519 -24.6999 - 73 41.2547 1569 6 0 4.14637 134.027 -25.85 - 73 116.356 1570 6 0 4.10665 134.15 -25.9503 - 73 87.3766 1571 6 0 4.05033 134.35 -26.111 - 73 76.5671 882 5 1 -3.51046 170.657 -54.45 - 73 208.265 881 5 1 -3.65004 170.74 -54.6782 - 73 270.227 1754 5 0 -4.28327 171.083 -55.85 - 73 60.7831 1755 5 0 -4.40626 171.15 -56.0611 - 73 36.9471 790 4 1 -22.0177 177.869 -84.45 - 73 170.269 789 4 1 -22.05 177.791 -84.5674 - 73 26.4432 1783 4 0 -22.7281 176.811 -85.85 - 73 133.306 1782 4 0 -22.7757 176.75 -85.9302 - 73 17.4673 1781 4 0 -22.9427 176.55 -86.2104 - 73 121.385 671 3 1 -45.6608 156.793 -114.45 - 73 57.3342 670 3 1 -45.8504 156.759 -114.672 - 73 243.323 1682 3 0 -46.7412 156.716 -115.85 - 73 176.422 1490 3 0 -69.5495 118.261 -116.25 - 73 124.396 1491 3 0 -69.6383 118.35 -116.145 - 73 157.242 910 7 1 2.14397 84.9717 5.55 - 73 122.199 921 6 1 4.27286 84.6762 -24.45 - 73 41.7315 1323 6 0 4.45048 84.8322 -25.851 - 73 118.796 940 5 1 8.08617 88.2881 -54.4507 - 73 112.256 1341 5 0 7.97913 88.3104 -55.8502 - 73 107.602 923 4 1 4.77038 88.926 -84.45 - 73 100.047 1344 4 0 4.52503 88.987 -85.85 - 73 183.22 897 3 1 -0.605277 91.0841 -114.45 - 73 184.785 1356 3 0 -0.672663 91.4095 -115.85 - 73 137.416 888 2 1 -2.27532 98.3262 -144.45 - 73 122.886 1393 2 0 -2.44223 98.8212 -145.85 - 73 13.6638 1394 2 0 -2.4862 98.9501 -146.208 - 73 333.545 863 1 1 -7.26551 109.118 -174.45 - 73 32.536 862 1 1 -7.45 109.238 -174.759 - 73 67.4123 1447 1 0 -8.07067 109.668 -175.85 - 73 60.5364 1448 1 0 -8.19386 109.75 -176.07 - 73 128.635 784 0 1 -23.1468 119.708 -204.45 - 73 153.167 783 0 1 -23.25 119.935 -204.661 - 73 62.3839 1505 0 0 -23.8762 121.22 -205.85 - 73 66.6647 1506 0 0 -23.9388 121.35 -205.969 - 73 42.2746 1507 0 0 -24.0314 121.55 -206.147 - 73 81.6232 1338 5 0 8.20356 87.7829 -55.85 - 73 28.5268 1337 5 0 8.24527 87.65 -56.1368 - 73 10.6636 957 4 1 11.6256 74.9739 -84.45 - 73 202.081 958 4 1 11.6506 74.9898 -84.4894 - 73 73.8623 994 3 1 18.8986 89.7558 -114.45 - 73 73.2554 995 3 1 19.0507 89.8595 -114.663 - 73 38.8423 1351 3 0 19.955 90.4757 -115.85 - 73 70.0572 1352 3 0 20.0163 90.5501 -115.932 - 73 81.8748 1353 3 0 20.0654 90.7503 -116.093 - 73 54.7148 1354 3 0 20.0339 90.95 -116.144 - 73 121.996 1355 3 0 19.9838 91.15 -116.136 - 73 65.7414 1357 3 0 19.7266 91.55 -116.038 - 73 69.3894 1358 3 0 19.6244 91.75 -115.968 - 73 11.6371 1359 3 0 19.5282 91.95 -115.87 - 73 173.571 997 3 1 19.5336 94.8109 -114.85 - 73 267.919 998 3 1 19.65 95.3516 -114.563 - 73 191.57 1377 3 0 19.8977 95.5946 -115.85 -Number of digits in this event: 89 -Using G4ParticleGun... -Particle energy: 6.12268 LIN +Number of tracker hits in this event: 137 + 73 104.729 283 9 1 -123.534 -4.55279 65.55 + 73 121.164 877 9 0 -123.532 -4.55428 64.15 + 73 125.629 283 8 1 -123.493 -4.58883 35.55 + 73 184.971 877 8 0 -123.492 -4.58739 34.15 + 73 407.948 283 7 1 -123.479 -4.56473 5.55 + 73 414.595 877 7 0 -123.475 -4.56003 4.15 + 73 704.068 283 6 1 -123.452 -4.5284 -24.45 + 73 693.816 877 6 0 -123.446 -4.56444 -25.85 + 73 323.512 284 5 1 -123.246 -5.41017 -54.45 + 73 48.1839 873 5 0 -123.249 -5.44531 -55.85 + 73 49.1397 872 5 0 -123.25 -5.45 -56.0345 + 73 246.106 284 4 1 -123.294 -6.14777 -84.45 + 73 126.6 869 4 0 -123.285 -6.20196 -85.85 + 73 140.627 284 3 1 -123.217 -7.3037 -114.45 + 73 110.4 863 3 0 -123.248 -7.40342 -115.85 + 73 193.144 281 2 1 -123.855 -9.26832 -144.45 + 73 104.037 853 2 0 -123.883 -9.37365 -145.85 + 73 447.796 278 1 1 -124.502 -11.5655 -174.45 + 73 98.1645 841 1 0 -124.512 -11.6739 -175.85 + 73 108.263 277 0 1 -124.715 -13.8633 -204.45 + 73 160.175 830 0 0 -124.7 -14.0068 -205.85 + 73 239.293 1068 6 0 -154.719 33.7115 -26.25 + 73 104.365 1067 6 0 -154.874 33.65 -25.8975 + 73 241.117 277 1 1 -124.647 -10.609 -174.45 + 73 496.371 279 1 1 -124.35 -10.6829 -174.728 + 73 136.553 283 0 1 -123.364 -10.3928 -204.45 + 73 118.133 284 0 1 -123.35 -10.3911 -204.495 + 73 216.279 848 0 0 -122.844 -10.35 -205.85 + 73 220.656 847 0 0 -123.396 -10.4592 -205.85 + 73 114.947 868 5 0 -123.315 -6.36822 -55.85 + 73 197.805 282 4 1 -123.69 -8.90056 -84.45 + 73 105.381 855 4 0 -123.765 -8.9754 -85.85 + 73 99.8969 270 3 1 -126.004 -10.8394 -114.45 + 73 120.274 845 3 0 -126.122 -10.9345 -115.85 + 73 113.809 257 2 1 -128.612 -12.6831 -144.45 + 73 169.167 836 2 0 -128.697 -12.7389 -145.85 + 73 116.91 248 1 1 -130.482 -13.6137 -174.45 + 73 126.857 831 1 0 -130.633 -13.6879 -175.85 + 73 113.715 232 0 1 -133.675 -15.5161 -204.45 + 73 103.347 822 0 0 -133.697 -15.6022 -205.85 + 73 156.516 887 1 0 -124.323 -2.53955 -175.85 + 73 44.3953 1193 1 0 -98.4551 58.7534 -176.25 + 73 119.507 1194 1 0 -98.3885 58.8506 -176.201 + 73 35.1994 1195 1 0 -98.2585 59.05 -175.972 + 73 299.047 413 1 1 -97.4906 60.0885 -174.85 + 73 278.979 414 1 1 -97.35 60.7179 -174.75 + 73 116.503 276 1 1 -124.75 -2.90912 -174.713 + 73 192.029 275 1 1 -124.954 -3.05117 -174.45 + 73 37.4292 274 1 1 -125.15 -3.38392 -174.522 + 73 127.668 283 5 1 -123.367 -4.69156 -54.45 + 73 157.716 876 5 0 -123.366 -4.7083 -55.85 + 73 118.535 874 4 0 -123.17 -5.0996 -85.85 + 73 437.31 286 3 1 -122.836 -5.35765 -114.45 + 73 105.358 873 3 0 -122.808 -5.3763 -115.85 + 73 136.619 289 2 1 -122.235 -5.74768 -144.45 + 73 332.001 871 2 0 -122.211 -5.77127 -145.85 + 73 143.746 292 1 1 -121.74 -6.24594 -174.45 + 73 349.96 868 1 0 -121.712 -6.27211 -175.85 + 73 99.0144 295 0 1 -121.094 -6.65689 -204.45 + 73 200.433 866 0 0 -121.067 -6.68081 -205.85 + 73 49.4177 561 0 0 -11.4834 -67.65 -206.229 + 73 173.426 291 1 1 -121.75 -6.24739 -174.549 + 73 102.092 869 1 0 -121.856 -6.23469 -175.85 + 73 108.529 280 0 1 -124.081 -5.85281 -204.45 + 73 140.526 870 0 0 -124.151 -5.88926 -205.85 + 73 129.223 17 8 1 -176.558 138.445 35.15 + 73 219.358 290 1 1 -121.95 -6.25975 -174.678 + 73 216.896 867 1 0 -123.081 -6.56791 -175.85 + 73 61.2309 866 1 0 -123.325 -6.65021 -176.073 + 73 14.8034 127 0 1 -154.71 -17.667 -204.45 + 73 131.501 126 0 1 -154.75 -17.6852 -204.479 + 73 55.3335 125 0 1 -154.95 -17.7825 -204.625 + 73 86.2653 124 0 1 -155.15 -17.8569 -204.697 + 73 85.3951 123 0 1 -155.35 -18.0984 -204.767 + 73 56.487 122 0 1 -155.55 -18.2996 -204.713 + 73 72.2677 121 0 1 -155.751 -18.3941 -204.691 + 73 51.9819 120 0 1 -155.95 -18.4232 -204.686 + 73 57.116 119 0 1 -156.15 -18.4541 -204.702 + 73 73.8002 118 0 1 -156.351 -18.4962 -204.684 + 73 53.2737 117 0 1 -156.55 -18.5201 -204.63 + 73 46.0371 116 0 1 -156.75 -18.5154 -204.574 + 73 57.2727 115 0 1 -156.95 -18.5353 -204.529 + 73 95.3162 114 0 1 -157.158 -18.4671 -204.45 + 73 274.791 113 0 1 -157.35 -18.2278 -204.475 + 73 179.317 112 0 1 -157.55 -18.0691 -204.534 + 73 292.246 810 0 0 -157.482 -17.9093 -205.85 + 73 101.406 811 0 0 -157.507 -17.85 -205.977 + 73 55.0533 809 0 0 -157.782 -18.05 -206.143 + 73 230.157 282 2 1 -123.699 -5.66951 -144.45 + 73 140.178 338 0 1 -112.535 -2.78135 -204.45 + 73 84.4872 888 0 0 -111.964 -2.32597 -205.85 + 73 46.398 889 0 0 -111.866 -2.25 -206.092 + 73 139.226 279 0 1 -124.245 -7.05113 -204.451 + 73 107.796 864 0 0 -124.332 -7.16042 -205.85 + 73 112.115 824 0 0 -139.473 -15.0621 -206.25 + 73 138.898 204 0 1 -139.227 -15.2024 -204.85 + 73 327.574 666 0 1 -46.7006 112.456 -204.45 + 73 168.08 290 5 1 -122.012 -5.17191 -54.45 + 73 169.306 874 5 0 -122.006 -5.08227 -55.8503 + 73 340.958 292 4 1 -121.698 -3.38547 -84.45 + 73 293.017 883 4 0 -121.674 -3.36942 -85.85 + 73 114.366 297 3 1 -120.738 -3.05791 -114.451 + 73 107.679 885 3 0 -120.747 -2.95715 -115.85 + 73 121.432 298 2 1 -120.466 -0.575023 -144.45 + 73 109.005 897 2 0 -120.485 -0.48596 -145.851 + 73 126.387 295 1 1 -121.094 1.08739 -174.45 + 73 117.152 905 1 0 -121.204 1.12697 -175.85 + 73 126.945 287 0 1 -122.583 2.02486 -204.45 + 73 188.202 909 0 0 -122.556 1.98555 -205.85 + 73 180.216 875 5 0 -122.017 -5.0499 -56.1197 + 73 114.999 285 5 1 -123.116 -4.7821 -54.45 + 73 116.462 877 5 0 -123.024 -4.65 -56.0247 + 73 128.975 294 4 1 -121.3 -1.66735 -84.45 + 73 122.771 892 4 0 -121.371 -1.57291 -85.85 + 73 24.6642 282 3 1 -123.569 -0.264424 -114.45 + 73 75.5441 283 3 1 -123.55 -0.246894 -114.528 + 73 106.353 900 3 0 -123.255 0.0878789 -115.85 + 73 147.248 318 2 1 -116.451 5.91893 -144.45 + 73 126.292 930 2 0 -116.663 6.16708 -145.85 + 73 130.813 298 1 1 -120.51 9.09955 -174.45 + 73 146.341 946 1 0 -120.163 9.35884 -175.85 + 73 10.1392 332 0 1 -113.743 11.5281 -204.45 + 73 122.56 331 0 1 -113.75 11.5331 -204.485 + 73 127.001 957 0 0 -114.053 11.5933 -205.85 + 73 295.945 283 2 1 -123.498 -4.7717 -144.45 + 73 194.77 876 2 0 -123.5 -4.84056 -145.85 + 73 121.46 284 1 1 -123.176 -4.03471 -174.45 + 73 147.852 879 1 0 -123.259 -4.08053 -175.85 + 73 196.017 281 0 1 -123.799 -5.27579 -204.45 + 73 153.638 875 0 0 -123.711 -5.03203 -205.85 + 73 289.857 875 2 0 -123.509 -4.85006 -145.948 + 73 2.23518 874 2 0 -123.536 -5.05003 -146.24 + 73 129.4 899 2 0 -138.132 -0.112694 -146.25 + 73 177.022 281 1 1 -123.946 -4.99269 -174.45 + 73 111.329 875 1 0 -123.929 -5.0209 -175.85 + 73 128.19 282 0 1 -123.607 -5.56766 -204.45 + 73 127.588 872 0 0 -123.59 -5.57974 -205.85 +Number of digits in this event: 81 +Using G4ParticleGun... +Particle energy: 5.3529 LIN Particle: e- Event: 74 -Number of tracker hits in this event: 35 - 74 129.878 182 8 1 -143.557 -13.4216 35.55 - 74 101.533 833 8 0 -143.557 -13.4217 34.15 - 74 115.873 182 7 1 -143.563 -13.4255 5.55 - 74 154.341 833 7 0 -143.565 -13.4249 4.15 - 74 261.917 182 6 1 -143.6 -13.4134 -24.45 - 74 127.034 833 6 0 -143.602 -13.4136 -25.85 - 74 121.233 182 5 1 -143.652 -13.417 -54.45 - 74 133.322 833 5 0 -143.655 -13.4181 -55.85 - 74 136.79 182 4 1 -143.718 -13.4427 -84.45 - 74 132.463 833 4 0 -143.721 -13.443 -85.85 - 74 487.092 181 3 1 -143.783 -13.4537 -114.45 - 74 379.898 832 3 0 -143.785 -13.4539 -115.85 - 74 330.964 181 2 1 -143.823 -13.4565 -144.45 - 74 229.903 832 2 0 -143.827 -13.4571 -145.85 - 74 126.189 181 1 1 -143.912 -13.4719 -174.45 - 74 121.74 832 1 0 -143.916 -13.4736 -175.85 - 74 114.728 180 0 1 -143.993 -13.5133 -204.45 - 74 111.016 832 0 0 -143.997 -13.5165 -205.85 - 74 5.28737 1300 7 0 -10.2867 80.2365 3.75003 - 74 167.861 1301 7 0 -10.2827 80.25 3.75993 - 74 245.938 1302 7 0 -10.1314 80.45 3.94553 - 74 557.032 182 2 1 -143.573 -13.5408 -144.45 - 74 133.374 184 1 1 -143.332 -14.295 -174.45 - 74 147.025 828 1 0 -143.321 -14.3928 -175.85 - 74 246.344 185 0 1 -143.127 -16.1962 -204.45 - 74 145.961 818 0 0 -143.105 -16.2834 -205.85 - 74 63.7108 184 0 1 -143.15 -16.2916 -204.494 - 74 181.944 833 2 0 -143.53 -13.439 -145.85 - 74 101.765 202 1 1 -139.681 -10.7291 -174.451 - 74 172.278 847 1 0 -139.374 -10.5295 -175.85 - 74 54.4213 234 0 1 -133.183 -7.40241 -204.45 - 74 49.5185 235 0 1 -133.15 -7.40414 -204.66 - 74 46.9331 863 0 0 -132.996 -7.44319 -205.85 - 74 68.3861 862 0 0 -132.977 -7.45 -206.026 - 74 48.4894 834 2 0 -143.502 -13.2499 -145.979 -Number of digits in this event: 26 +Number of tracker hits in this event: 23 + 74 135.323 485 7 1 -83.0222 124.451 5.55 + 74 140.114 1521 7 0 -83.0232 124.451 4.15 + 74 106.354 485 6 1 -83.0436 124.448 -24.45 + 74 103.663 1521 6 0 -83.0454 124.447 -25.85 + 74 109.095 484 5 1 -83.0804 124.43 -54.45 + 74 109.96 1521 5 0 -83.0815 124.428 -55.85 + 74 113.278 484 4 1 -83.0974 124.378 -84.45 + 74 458.846 1521 4 0 -83.0905 124.375 -85.85 + 74 115.47 485 3 1 -82.954 124.321 -114.45 + 74 115.733 1520 3 0 -82.9538 124.321 -115.85 + 74 130.432 485 2 1 -82.951 124.317 -144.45 + 74 120.113 1520 2 0 -82.9456 124.308 -145.85 + 74 281.281 486 1 1 -82.822 124.146 -174.45 + 74 272.54 1519 1 0 -82.8194 124.135 -175.85 + 74 109.762 486 0 1 -82.7523 123.906 -204.45 + 74 95.4769 1518 0 0 -82.7474 123.893 -205.85 + 74 392.75 485 1 1 -82.8534 124.131 -174.45 + 74 165.904 494 0 1 -81.2362 123.508 -204.45 + 74 68.8326 493 0 1 -81.25 123.531 -204.81 + 74 130.209 1517 0 0 -81.3032 123.569 -205.85 + 74 122.626 1515 0 0 -81.442 123.298 -205.85 + 74 80.8273 1520 4 0 -83.0497 124.35 -85.9565 + 74 28.6095 421 0 1 -95.7902 121.797 -204.85 +Number of digits in this event: 15 Using G4ParticleGun... -Particle energy: 5.73095 LIN +Particle energy: 1.57595 LIN Particle: e- Event: 75 -Number of tracker hits in this event: 28 - 75 109.744 373 9 1 -105.511 -65.5418 65.55 - 75 120.207 572 9 0 -105.508 -65.5383 64.15 - 75 104.8 373 8 1 -105.447 -65.4208 35.55 - 75 126.828 573 8 0 -105.443 -65.4232 34.15 - 75 100.479 373 7 1 -105.375 -65.447 5.55 - 75 229.739 572 7 0 -105.372 -65.4549 4.15 - 75 123.361 374 6 1 -105.322 -65.6519 -24.45 - 75 112.406 571 6 0 -105.296 -65.6733 -25.85 - 75 125.861 376 5 1 -104.771 -66.1296 -54.45 - 75 138.338 569 5 0 -104.752 -66.1506 -55.85 - 75 123.504 379 4 1 -104.321 -66.5815 -84.45 - 75 234.292 567 4 0 -104.296 -66.6044 -85.85 - 75 101.559 382 3 1 -103.618 -67.3247 -114.45 - 75 96.3724 563 3 0 -103.567 -67.3609 -115.85 - 75 106.451 388 2 1 -102.526 -68.1309 -144.45 - 75 115.36 559 2 0 -102.489 -68.173 -145.85 - 75 117.631 392 1 1 -101.67 -69.0285 -174.45 - 75 122.522 554 1 0 -101.625 -69.0695 -175.85 - 75 97.6745 397 0 1 -100.722 -69.9123 -204.45 - 75 144.929 550 0 0 -100.704 -69.9576 -205.85 - 75 121.506 394 0 1 -101.18 -70.0824 -204.45 - 75 98.7407 547 0 0 -101.881 -70.5442 -205.85 - 75 65.8697 546 0 0 -102.044 -70.65 -206.109 - 75 97.9109 395 0 1 -101.136 -70.0483 -204.45 - 75 76.3195 551 0 0 -101.122 -69.85 -205.956 - 75 262.443 569 4 0 -105.886 -66.1042 -85.85 - 75 26.6129 568 4 0 -106.051 -66.25 -85.934 - 75 135.304 573 7 0 -105.374 -65.45 3.86654 -Number of digits in this event: 15 +Number of tracker hits in this event: 38 + 75 212.073 1487 9 1 117.695 52.0789 65.55 + 75 123.845 1160 9 0 117.694 52.0756 64.15 + 75 109.479 1487 8 1 117.648 52.0087 35.55 + 75 153.449 1159 8 0 117.643 52.007 34.15 + 75 131.077 1486 7 1 117.537 51.9646 5.55 + 75 127.459 1159 7 0 117.533 51.9637 4.15 + 75 139.566 1486 6 1 117.427 51.919 -24.45 + 75 125.456 1159 6 0 117.428 51.9192 -25.85 + 75 111.599 1486 5 1 117.447 51.9243 -54.45 + 75 160.835 1159 5 0 117.444 51.9227 -55.85 + 75 189.44 1486 4 1 117.397 51.9164 -84.45 + 75 164.583 1159 4 0 117.396 51.9183 -85.85 + 75 111.677 1486 3 1 117.362 51.9373 -114.45 + 75 126.662 1159 3 0 117.364 51.9365 -115.85 + 75 267.735 1486 2 1 117.383 51.9223 -144.45 + 75 103.95 1159 2 0 117.384 51.9281 -145.85 + 75 108.006 1486 1 1 117.427 52.0544 -174.45 + 75 166.668 1160 1 0 117.432 52.0617 -175.85 + 75 220.027 1486 0 1 117.512 52.224 -204.45 + 75 154.841 1160 0 0 117.515 52.2383 -205.85 + 75 108.762 1694 4 0 124.532 158.984 -86.25 + 75 98.8074 1695 4 0 124.105 159.15 -86.0359 + 75 71.2981 1693 4 0 124.592 158.95 -86.1255 + 75 29.2826 1386 2 1 97.5188 73.1167 -144.85 + 75 178.016 1487 0 1 117.588 52.6607 -204.45 + 75 23.3272 1488 0 1 117.75 52.55 -204.795 + 75 113.323 1161 0 0 118.546 52.4412 -205.85 + 75 131.466 1518 1 0 144.3 123.75 -176.242 + 75 89.7673 1485 2 1 117.332 51.8576 -144.45 + 75 84.0647 1157 2 0 118.144 51.5146 -145.85 + 75 41.0816 1156 2 0 118.307 51.4499 -146.128 + 75 107.614 1484 2 1 117.15 52.1829 -144.59 + 75 40.5984 1165 2 0 116.8 53.2399 -145.851 + 75 97.8969 1166 2 0 116.797 53.25 -145.862 + 75 37.2902 1167 2 0 116.765 53.45 -146.152 + 75 160.733 1471 1 1 114.547 87.5279 -174.45 + 75 130.085 1333 1 0 115.025 86.7477 -175.85 + 75 48.3881 1334 1 0 115.242 86.85 -176.169 +Number of digits in this event: 22 Using G4ParticleGun... -Particle energy: 8.37127 LIN +Particle energy: 8.75639 LIN Particle: e- Event: 76 -Number of tracker hits in this event: 134 - 76 132.353 727 11 0 76.134 -34.5419 124.15 - 76 124.927 1280 10 1 76.1334 -34.5392 95.55 - 76 98.3688 727 10 0 76.1327 -34.5393 94.15 - 76 135.133 1280 9 1 76.1173 -34.5443 65.55 - 76 103.43 727 9 0 76.1159 -34.5439 64.15 - 76 313.094 1280 8 1 76.0861 -34.5382 35.55 - 76 130.248 727 8 0 76.0854 -34.5373 34.15 - 76 107.471 1280 7 1 76.0678 -34.5203 5.55 - 76 373.708 727 7 0 76.0682 -34.5203 4.15 - 76 115.947 1280 6 1 76.0767 -34.52 -24.45 - 76 163.575 727 6 0 76.0785 -34.5185 -25.85 - 76 132.764 1280 5 1 76.1162 -34.4886 -54.45 - 76 107.283 727 5 0 76.1181 -34.4877 -55.85 - 76 163.758 1280 4 1 76.1625 -34.4668 -84.45 - 76 106.058 727 4 0 76.1662 -34.4652 -85.85 - 76 131.4 1280 3 1 76.2374 -34.4261 -114.45 - 76 128.297 728 3 0 76.2392 -34.424 -115.85 - 76 124.874 1281 2 1 76.2784 -34.3823 -144.45 - 76 113.799 728 2 0 76.2801 -34.3812 -145.85 - 76 150.863 1281 1 1 76.3135 -34.3508 -174.45 - 76 134.207 728 1 0 76.3156 -34.349 -175.85 - 76 117.419 1281 0 1 76.3568 -34.3108 -204.45 - 76 107.572 728 0 0 76.3592 -34.3103 -205.85 - 76 9.92028 546 0 1 -70.65 28.9123 -204.753 - 76 112.815 1615 6 0 19.645 143.341 -26.25 - 76 285.311 728 8 0 76.2689 -34.2592 34.1498 - 76 164.224 729 8 0 76.2752 -34.25 34.1049 - 76 43.2697 1307 7 1 81.6252 -28.2266 5.54947 - 76 186.573 1308 7 1 81.65 -28.1467 5.45886 - 76 163.821 767 7 0 82.0289 -26.5813 4.15 - 76 78.115 768 7 0 82.064 -26.45 4.04414 - 76 73.7693 769 7 0 82.1069 -26.2494 3.87685 - 76 97.4683 1333 6 1 86.8164 5.25524 -24.45 - 76 131.696 1332 6 1 86.6497 5.59189 -24.5417 - 76 160.461 1331 6 1 86.45 6.04784 -24.7085 - 76 1.85349 1330 6 1 86.25 6.5107 -24.8485 - 76 16.6096 962 6 0 83.4578 12.5907 -25.85 - 76 49.2426 963 6 0 83.4294 12.65 -25.8589 - 76 69.728 964 6 0 83.3245 12.8501 -25.8947 - 76 69.2355 965 6 0 83.2054 13.0503 -25.9455 - 76 87.2702 966 6 0 83.0799 13.25 -26.0001 - 76 71.4928 967 6 0 82.9505 13.45 -26.0378 - 76 94.0711 968 6 0 82.8121 13.65 -26.0713 - 76 222.944 969 6 0 82.7273 13.85 -26.0541 - 76 182.443 970 6 0 82.6396 14.05 -26.0449 - 76 63.2148 971 6 0 82.54 14.2509 -26.0714 - 76 79.1723 972 6 0 82.4163 14.45 -26.1211 - 76 94.0432 973 6 0 82.2554 14.65 -26.1614 - 76 64.3477 974 6 0 82.1019 14.85 -26.1966 - 76 5.19508 975 6 0 81.9527 15.0502 -26.2435 - 76 151.396 1551 6 0 -20.4015 130.353 -26.25 - 76 26.5669 1552 6 0 -20.8496 130.55 -25.9149 - 76 60.4962 790 6 1 -21.8699 131.076 -24.85 - 76 75.6839 789 6 1 -22.05 131.139 -24.6851 - 76 40.112 788 6 1 -22.25 131.195 -24.5332 - 76 41.3363 1329 6 1 86.05 6.45957 -24.6614 - 76 99.0674 1283 7 1 76.6708 -34.4296 5.55 - 76 124.74 1282 7 1 76.65 -34.4198 5.50533 - 76 196.378 728 7 0 75.9264 -34.2999 4.15 - 76 238.626 1197 6 1 59.6126 -34.9891 -24.45 - 76 80.9578 1196 6 1 59.45 -35.0474 -24.711 - 76 224.976 723 6 0 58.2885 -35.3443 -25.85 - 76 28.6256 722 6 0 58.0466 -35.45 -26.1542 - 76 46.5702 1094 5 1 38.9938 -47.4161 -54.45 - 76 83.9538 1095 5 1 39.05 -47.5354 -54.6109 - 76 95.6613 658 5 0 39.3762 -48.2613 -55.85 - 76 50.9155 657 5 0 39.4546 -48.45 -56.0565 - 76 119.316 1079 4 1 35.8686 -64.8004 -84.45 - 76 141.21 1080 4 1 36.0503 -64.5703 -84.5817 - 76 97.2383 1081 4 1 36.25 -64.21 -84.7037 - 76 80.6815 1082 4 1 36.45 -63.9948 -84.7641 - 76 26.1874 1083 4 1 36.65 -63.8355 -84.8311 - 76 83.5728 592 4 0 39.439 -61.6022 -85.85 - 76 300.205 593 4 0 39.6073 -61.45 -86.0438 - 76 32.3424 594 4 0 39.805 -61.2499 -86.1629 - 76 121.971 1100 4 1 40.1683 -61.6654 -84.8493 - 76 304.409 1101 4 1 40.25 -61.8491 -84.6467 - 76 105.249 729 7 0 76.4429 -34.2499 4.07392 - 76 85.6277 1250 6 1 70.21 -31.7855 -24.4501 - 76 137.836 1251 6 1 70.2501 -31.6042 -24.6615 - 76 62.3657 747 6 0 70.3996 -30.5813 -25.8502 - 76 96.2852 748 6 0 70.4155 -30.45 -26.0009 - 76 115.626 1260 5 1 72.0976 -9.75923 -54.45 - 76 142.065 855 5 0 72.3545 -9.01929 -55.85 - 76 33.0382 856 5 0 72.4107 -8.84983 -56.1527 - 76 136.263 1285 4 1 77.1762 8.19112 -84.45 - 76 106.806 943 4 0 77.2614 8.6977 -85.8504 - 76 51.3383 1299 3 1 80.0134 17.5177 -114.45 - 76 127.918 1300 3 1 80.05 17.5533 -114.534 - 76 104.346 990 3 0 80.5883 18.1075 -115.851 - 76 31.2493 991 3 0 80.6977 18.2501 -116.146 - 76 63.5725 1060 2 0 90.1911 32.1741 -145.85 - 76 55.7323 1061 2 0 90.2044 32.2502 -146.031 - 76 29.96 1359 1 1 91.9817 45.7688 -174.45 - 76 78.1931 1358 1 1 91.9499 45.8019 -174.549 - 76 20.09 1130 1 0 91.4657 46.2294 -175.85 - 76 131.408 1131 1 0 91.4429 46.25 -175.911 - 76 80.2309 1304 0 1 80.9101 53.162 -204.45 - 76 74.7288 1305 0 1 81.05 53.3004 -204.583 - 76 55.1012 1306 0 1 81.2502 53.462 -204.757 - 76 128.355 1171 0 0 82.4819 54.3604 -205.85 - 76 178.549 1172 0 0 82.5999 54.45 -205.952 - 76 69.9404 1173 0 0 82.9652 54.65 -206.155 - 76 8.63491 1545 0 0 149.545 129.335 -206.25 - 76 53.9424 1546 0 0 149.554 129.35 -206.246 - 76 91.8472 1547 0 0 149.652 129.55 -206.181 - 76 89.9724 1548 0 0 149.749 129.75 -206.099 - 76 134.394 1549 0 0 149.91 129.95 -206.015 - 76 77.2447 1550 0 0 150.171 130.15 -205.976 - 76 72.2084 1551 0 0 150.375 130.35 -205.945 - 76 22.3723 1552 0 0 150.568 130.55 -205.878 - 76 25.7206 1663 0 1 152.89 133.083 -204.85 - 76 96.6209 1664 0 1 152.95 133.149 -204.824 - 76 90.3589 1665 0 1 153.15 133.426 -204.679 - 76 72.6731 1666 0 1 153.35 133.661 -204.55 - 76 88.3255 1263 0 0 114.787 72.7063 -206.25 - 76 94.9014 1262 0 0 114.72 72.65 -205.975 - 76 163.921 1467 0 1 113.705 72.0111 -204.85 - 76 0.704845 1466 0 1 113.55 71.8718 -204.452 - 76 106.198 1279 8 1 76.0498 -34.5418 35.5352 - 76 47.196 1278 8 1 75.85 -34.4784 35.2743 - 76 32.3361 888 8 0 79.5859 -2.34105 33.75 - 76 73.2292 889 8 0 79.6332 -2.25 33.8023 - 76 82.9117 890 8 0 79.7325 -2.05 33.8868 - 76 53.3294 891 8 0 79.8466 -1.84969 34.0084 - 76 42.184 892 8 0 79.9131 -1.64978 34.0987 - 76 149.995 1304 8 1 80.8586 0.767199 35.15 - 76 206.421 1305 8 1 81.05 1.30234 35.2547 - 76 137.061 1306 8 1 81.25 2.09133 35.1742 - 76 95.4066 1307 8 1 81.45 2.43959 35.29 - 76 252.8 1308 8 1 81.688 2.64587 35.55 - 76 110.944 1309 8 1 81.85 2.43291 35.312 - 76 30.9032 906 8 0 80.384 1.44766 34.1499 - 76 215.179 907 8 0 80.3468 1.45 34.1162 -Number of digits in this event: 48 +Number of tracker hits in this event: 45 + 76 111.669 669 11 1 -46.0701 -56.7762 125.55 + 76 114.767 616 11 0 -46.0694 -56.7759 124.15 + 76 128.784 669 10 1 -46.0553 -56.7702 95.55 + 76 109.603 616 10 0 -46.054 -56.7706 94.15 + 76 130.822 670 9 1 -46.0267 -56.7805 65.55 + 76 108.436 616 9 0 -46.0257 -56.781 64.15 + 76 124.68 670 8 1 -46.0028 -56.79 35.55 + 76 111.882 616 8 0 -46.0017 -56.7908 34.15 + 76 104.783 670 7 1 -45.9784 -56.8114 5.55 + 76 123.41 616 7 0 -45.9768 -56.813 4.15 + 76 131.776 670 6 1 -45.9393 -56.8465 -24.45 + 76 121.819 616 6 0 -45.938 -56.8476 -25.85 + 76 106.567 670 5 1 -45.9127 -56.8676 -54.45 + 76 166.186 615 5 0 -45.9119 -56.8698 -55.85 + 76 114.013 670 4 1 -45.8959 -56.9107 -84.45 + 76 139.114 615 4 0 -45.8947 -56.9125 -85.85 + 76 246.833 670 3 1 -45.8692 -56.9508 -114.45 + 76 192.518 615 3 0 -45.8679 -56.9531 -115.85 + 76 133.803 671 2 1 -45.8411 -56.9977 -144.45 + 76 122.815 615 2 0 -45.84 -57.0003 -145.85 + 76 1183.91 671 1 1 -45.8198 -57.052 -174.45 + 76 132.448 614 1 0 -45.82 -57.0535 -175.85 + 76 199.241 671 0 1 -45.8221 -57.086 -204.45 + 76 118.917 614 0 0 -45.8214 -57.0883 -205.85 + 76 58.676 977 4 0 -21.3398 15.6044 -86.25 + 76 115.772 978 4 0 -21.4191 15.6501 -86.1896 + 76 3.40206 785 4 0 -2.67778 -23.0442 -86.2499 + 76 143.809 784 4 0 -2.67724 -23.05 -86.2443 + 76 148.898 1453 5 0 -94.4855 110.75 -56.2039 + 76 136.115 1454 5 0 -94.5673 110.95 -55.8769 + 76 173.667 699 9 0 40.9575 -40.0925 63.7502 + 76 150.451 670 2 1 -45.85 -56.9992 -144.73 + 76 265.375 615 1 0 -45.7144 -56.9088 -175.85 + 76 19.9619 675 0 1 -44.8513 -54.7693 -204.45 + 76 80.822 676 0 1 -44.85 -54.7661 -204.517 + 76 194.218 626 0 0 -44.8274 -54.716 -205.85 + 76 21.0801 751 5 0 -139.347 -29.8478 -56.25 + 76 3.77667 468 4 1 -86.3187 -50.1369 -84.45 + 76 301.16 200 5 1 -139.953 -29.7641 -54.8499 + 76 336.009 672 1 1 -45.65 -57.1463 -174.718 + 76 27.2981 616 1 0 -45.7251 -56.85 -176.113 + 76 109.319 673 0 1 -45.3889 -55.0023 -204.45 + 76 122.544 625 0 0 -45.3167 -55.0363 -205.85 + 76 16.9667 528 1 1 -74.3859 -22.6527 -174.85 + 76 138.566 527 1 1 -74.45 -22.4419 -174.611 +Number of digits in this event: 29 Using G4ParticleGun... -Particle energy: 9.92951 LIN +Particle energy: 1.71079 LIN Particle: e- Event: 77 -Number of tracker hits in this event: 64 - 77 170.565 709 10 1 -38.1579 104.725 95.55 - 77 157.39 1422 10 0 -38.1578 104.725 94.15 - 77 119.69 709 9 1 -38.1562 104.733 65.55 - 77 185.483 1422 9 0 -38.1557 104.733 64.15 - 77 122.014 709 8 1 -38.1433 104.7 35.55 - 77 157.563 1422 8 0 -38.1425 104.698 34.15 - 77 107.82 709 7 1 -38.1245 104.663 5.55 - 77 182.377 1422 7 0 -38.1238 104.662 4.15 - 77 320.772 709 6 1 -38.1081 104.639 -24.45 - 77 260.07 1422 6 0 -38.1078 104.638 -25.85 - 77 177.812 709 5 1 -38.1001 104.616 -54.45 - 77 99.0616 1422 5 0 -38.1009 104.616 -55.85 - 77 119.464 709 4 1 -38.1172 104.608 -84.45 - 77 102.124 1422 4 0 -38.1174 104.609 -85.85 - 77 147.64 709 3 1 -38.123 104.646 -114.45 - 77 152.825 1422 3 0 -38.1212 104.648 -115.85 - 77 244.727 709 2 1 -38.0895 104.679 -144.45 - 77 231.489 1422 2 0 -38.089 104.681 -145.85 - 77 123.92 709 1 1 -38.0831 104.731 -174.45 - 77 114.201 1422 1 0 -38.0841 104.733 -175.85 - 77 136.374 709 0 1 -38.0962 104.798 -204.45 - 77 126.964 1423 0 0 -38.0956 104.803 -205.85 - 77 15.623 561 7 0 -54.5296 -67.6802 3.75 - 77 144.596 560 7 0 -54.5323 -67.85 4.05368 - 77 32.3757 559 7 0 -54.6303 -68.05 4.13946 - 77 149.534 618 7 1 -56.3513 -68.9726 5.15 - 77 21.737 617 7 1 -56.4501 -68.9887 5.19747 - 77 120.488 1303 7 1 80.771 83.7207 5.15 - 77 8.34318 1304 7 1 80.8501 83.697 5.29134 - 77 29.2051 1095 10 0 135.907 39.25 93.8119 - 77 122.036 1421 2 0 -38.0732 104.55 -146.005 - 77 250.86 732 2 1 -33.519 55.8745 -144.45 - 77 132.077 733 2 1 -33.45 55.7962 -144.618 - 77 134.175 713 5 1 -37.4264 105.142 -54.45 - 77 93.6317 1425 5 0 -37.4961 105.224 -55.8506 - 77 254.447 705 4 1 -38.9405 107.003 -84.45 - 77 125.415 1434 4 0 -38.9363 107.036 -85.85 - 77 114.427 707 3 1 -38.5564 107.719 -114.45 - 77 130.968 1438 3 0 -38.6318 107.773 -115.85 - 77 245.156 698 2 1 -40.3724 108.81 -144.45 - 77 136.023 1443 2 0 -40.4069 108.822 -145.85 - 77 207.111 694 1 1 -41.0719 109.136 -174.45 - 77 120.907 1443 1 0 -41.019 108.873 -175.85 - 77 125.434 700 0 1 -39.9956 103.667 -204.45 - 77 157.451 1413 0 0 -39.8814 102.899 -205.85 - 77 73.18 1412 0 0 -39.8594 102.75 -206.123 - 77 42.6411 710 6 1 -38.05 104.85 -24.7347 - 77 118.885 1425 6 0 -37.6318 105.174 -25.8503 - 77 37.803 763 5 1 -27.3323 114.235 -54.45 - 77 97.7276 764 5 1 -27.25 114.352 -54.5659 - 77 41.0122 765 5 1 -27.0497 114.485 -54.7477 - 77 132.709 1476 5 0 -25.9135 115.35 -55.85 - 77 65.7169 1477 5 0 -25.7063 115.55 -56.0006 - 77 61.8057 1478 5 0 -25.5761 115.75 -56.1159 - 77 47.73 1479 5 0 -25.5151 115.95 -56.1985 - 77 169.986 1480 5 0 -25.487 116.15 -56.2364 - 77 56.9765 1481 5 0 -25.482 116.35 -56.2077 - 77 51.3624 1482 5 0 -25.4779 116.55 -56.1862 - 77 75.7979 1483 5 0 -25.4871 116.75 -56.2149 - 77 179.31 1272 5 0 -156.378 74.473 -56.2498 - 77 154.688 116 5 1 -156.806 74.9665 -54.85 - 77 297.938 1672 0 0 -6.22106 154.581 -206.25 - 77 124.943 1673 0 0 -5.37012 154.75 -205.94 - 77 64.7689 1635 0 0 -2.33738 147.205 -206.25 -Number of digits in this event: 40 +Number of tracker hits in this event: 99 + 77 117.5 505 10 1 -78.9306 83.6488 95.55 + 77 117.473 1317 10 0 -78.9293 83.6469 94.15 + 77 122.029 505 9 1 -78.895 83.6115 65.55 + 77 101.739 1317 9 0 -78.8914 83.6079 64.15 + 77 124.757 506 8 1 -78.8026 83.5355 35.55 + 77 139.777 1317 8 0 -78.8002 83.5278 34.15 + 77 128.048 506 7 1 -78.74 83.3545 5.55 + 77 156.445 1316 7 0 -78.7405 83.3446 4.15 + 77 113.126 506 6 1 -78.7613 83.1432 -24.45 + 77 135 1315 6 0 -78.7621 83.1236 -25.85 + 77 100.089 506 5 1 -78.7614 82.7211 -54.45 + 77 133.047 1313 5 0 -78.7609 82.7006 -55.85 + 77 85.3891 506 4 1 -78.7523 82.2686 -84.45 + 77 188.399 1310 4 0 -78.7544 82.242 -85.85 + 77 124.818 506 3 1 -78.8032 81.708 -114.45 + 77 136.553 1308 3 0 -78.7935 81.6744 -115.85 + 77 246.919 507 2 1 -78.58 80.9692 -144.45 + 77 106.802 1304 2 0 -78.5702 80.9317 -145.85 + 77 149.229 508 1 1 -78.3665 80.1676 -174.45 + 77 134.018 1300 1 0 -78.3552 80.1341 -175.85 + 77 100.667 509 0 1 -78.0814 79.5006 -204.45 + 77 322.626 1297 0 0 -78.0688 79.4796 -205.85 + 77 27.6037 1296 0 0 -78.0078 79.45 -206.131 + 77 100.48 518 0 1 -76.4467 78.926 -204.85 + 77 170.459 517 0 1 -76.45 78.9894 -204.781 + 77 16.376 1275 0 0 -79.0198 75.25 -205.937 + 77 340.04 1317 7 0 -78.6977 83.45 3.90275 + 77 87.7073 1318 7 0 -78.7228 83.6501 3.92207 + 77 265.306 1319 7 0 -78.6968 83.85 3.91297 + 77 10.8415 1314 3 0 -78.8598 83.0468 -115.85 + 77 60.1615 1178 3 0 -79.4824 55.6569 -116.25 + 77 468.316 1177 3 0 -79.4872 55.65 -116.242 + 77 174.033 503 3 1 -79.2627 57.1957 -114.85 + 77 135.916 502 3 1 -79.45 57.3817 -114.667 + 77 111.528 508 0 1 -78.3711 82.371 -204.45 + 77 76.7208 1312 0 0 -78.6425 82.6192 -205.85 + 77 21.2074 1313 0 0 -78.6931 82.65 -206.145 + 77 129.563 507 0 1 -78.4528 82.3507 -204.45 + 77 41.4366 506 0 1 -78.65 82.0961 -204.739 + 77 77.9428 1306 0 0 -79.305 81.3935 -205.85 + 77 52.5546 1305 0 0 -79.4085 81.25 -206.075 + 77 128.279 1193 0 0 -96.6328 58.8407 -206.25 + 77 55.4447 412 0 1 -97.6388 58.8205 -204.85 + 77 138.598 411 0 1 -97.75 58.8587 -204.699 + 77 96.69 511 6 1 -77.7094 82.7615 -24.45 + 77 126.543 1313 6 0 -77.7207 82.6801 -25.85 + 77 75.0024 469 5 1 -86.1356 84.3284 -54.45 + 77 80.9738 468 5 1 -86.2501 84.3627 -54.6273 + 77 258.912 1321 5 0 -86.7787 84.3445 -55.85 + 77 22.4379 424 4 1 -95.3118 84.1856 -84.45 + 77 157.01 423 4 1 -95.3501 84.1787 -84.5094 + 77 126.191 1320 4 0 -95.9806 84.1499 -85.85 + 77 279.246 505 6 1 -78.966 83.4591 -24.4501 + 77 108.208 1317 6 0 -78.9859 83.4924 -25.8501 + 77 130.49 503 5 1 -79.4126 84.0066 -54.45 + 77 26.1887 1318 5 0 -79.3234 83.6703 -55.8504 + 77 85.8567 1317 5 0 -79.318 83.65 -55.9346 + 77 117.611 512 4 1 -77.548 76.5246 -84.45 + 77 101.39 1280 4 0 -77.4325 76.1417 -85.8502 + 77 20.8823 1279 4 0 -77.4071 76.05 -86.1855 + 77 114.827 525 3 1 -75.0309 68.0739 -114.45 + 77 13.6732 1238 3 0 -74.8492 67.6665 -115.85 + 77 87.5204 1237 3 0 -74.8418 67.65 -115.907 + 77 123.863 543 2 1 -71.3483 59.4707 -144.45 + 77 132.265 1194 2 0 -71.1414 59.0304 -145.85 + 77 141.915 566 1 1 -66.7177 49.4377 -174.45 + 77 105.574 1144 1 0 -66.4917 49.0429 -175.85 + 77 304.715 592 0 1 -61.5774 40.9151 -204.45 + 77 18.6681 1103 0 0 -61.3915 40.6631 -205.85 + 77 101.128 1102 0 0 -61.3818 40.65 -205.924 + 77 291.22 593 0 1 -61.4498 40.7051 -204.734 + 77 24.1074 504 6 1 -79.0501 83.4683 -24.8036 + 77 102.54 1318 6 0 -80.7554 83.7855 -25.85 + 77 24.4917 483 6 1 -83.3775 85.3101 -24.85 + 77 237.819 482 6 1 -83.45 85.3364 -24.807 + 77 125.77 1315 2 0 -79.0424 83.1887 -145.85 + 77 113.026 445 1 1 -91.0681 84.3604 -174.45 + 77 128.53 1323 1 0 -91.0664 84.6545 -175.85 + 77 13.6211 1324 1 0 -91.0591 84.85 -176.218 + 77 81.9432 1429 1 0 -114.39 106.112 -176.25 + 77 82.5371 1430 1 0 -114.466 106.15 -176.146 + 77 46.7533 319 1 1 -116.191 106.056 -174.85 + 77 66.156 318 1 1 -116.35 106.015 -174.786 + 77 107.537 317 1 1 -116.55 105.898 -174.691 + 77 83.9027 316 1 1 -116.75 105.689 -174.719 + 77 51.1246 315 1 1 -116.95 105.531 -174.749 + 77 63.7342 314 1 1 -117.15 105.443 -174.768 + 77 44.2325 313 1 1 -117.35 105.408 -174.734 + 77 55.3437 312 1 1 -117.55 105.395 -174.687 + 77 58.176 311 1 1 -117.75 105.453 -174.678 + 77 55.4056 310 1 1 -117.951 105.483 -174.663 + 77 70.3817 309 1 1 -118.15 105.533 -174.705 + 77 85.265 308 1 1 -118.35 105.618 -174.607 + 77 148.652 1426 1 0 -119.291 105.462 -175.85 + 77 20.8595 1322 2 0 -78.0801 84.5568 -145.85 + 77 14.9974 510 2 1 -77.9572 86.366 -144.85 + 77 8.56012 1337 2 0 -77.4673 87.583 -145.85 + 77 33.2704 509 2 1 -78.0848 89.565 -144.85 + 77 51.1331 1349 2 0 -77.604 89.9865 -145.85 +Number of digits in this event: 39 Using G4ParticleGun... -Particle energy: 4.64124 LIN +Particle energy: 3.75681 LIN Particle: e- Event: 78 -Number of tracker hits in this event: 88 - 78 123.915 879 11 1 -4.11409 59.7464 125.55 - 78 128.837 1198 11 0 -4.11525 59.7472 124.15 - 78 117.481 879 10 1 -4.13009 59.7656 95.55 - 78 102.627 1198 10 0 -4.13124 59.7687 94.15 - 78 114.866 879 9 1 -4.1533 59.8415 65.55 - 78 130.716 1198 9 0 -4.15667 59.8427 64.15 - 78 109.351 879 8 1 -4.22882 59.8659 35.55 - 78 123.671 1199 8 0 -4.23184 59.8673 34.15 - 78 430.332 878 7 1 -4.29779 59.8999 5.55 - 78 113.434 1199 7 0 -4.29947 59.9013 4.15 - 78 122.714 878 6 1 -4.33962 59.9271 -24.45 - 78 110.834 1199 6 0 -4.33979 59.9314 -25.85 - 78 149.074 878 5 1 -4.34614 60.0199 -54.45 - 78 91.2036 1199 5 0 -4.34596 60.0235 -55.85 - 78 112.659 878 4 1 -4.34706 60.0803 -84.45 - 78 126.359 1200 4 0 -4.34598 60.0822 -85.85 - 78 102.543 878 3 1 -4.3289 60.1254 -114.45 - 78 105.533 1200 3 0 -4.32883 60.1284 -115.85 - 78 354.781 878 2 1 -4.32529 60.1987 -144.45 - 78 365.949 1200 2 0 -4.32634 60.1993 -145.85 - 78 636.059 878 1 1 -4.35767 60.2094 -174.45 - 78 146.688 1200 1 0 -4.35762 60.2102 -175.85 - 78 134.813 878 0 1 -4.35622 60.2243 -204.45 - 78 245.336 1200 0 0 -4.35551 60.224 -205.85 - 78 15.6945 1068 1 0 -119.641 33.85 -176.247 - 78 467.933 876 1 1 -4.65799 57.5294 -174.45 - 78 83.5631 1186 1 0 -4.65428 57.2958 -175.85 - 78 72.0102 1185 1 0 -4.65515 57.25 -176.128 - 78 118.162 875 0 1 -4.90628 52.5533 -204.45 - 78 115.153 1160 0 0 -4.93502 52.2177 -205.85 - 78 92.6169 826 1 0 111.215 -14.6825 -176.25 - 78 42.6106 1273 0 0 -31.7713 74.65 -206.106 - 78 63.7445 1272 0 0 -31.7697 74.65 -206.074 - 78 20.0642 877 1 1 -4.65 57.6821 -174.638 - 78 374.96 1194 1 0 -4.88097 58.9261 -175.85 - 78 98.8855 1195 1 0 -4.92107 59.05 -175.974 - 78 553.294 1201 1 0 -4.38705 60.2849 -175.85 - 78 139.18 879 0 1 -4.21433 60.2892 -204.45 - 78 108.286 1201 0 0 -4.2041 60.287 -205.85 - 78 105.359 1199 0 0 -4.58209 59.9778 -205.85 - 78 204.001 1198 0 0 -4.57043 59.85 -205.941 - 78 179.789 1205 1 0 -4.97267 61.0503 -175.85 - 78 135.66 1202 1 0 -4.54835 60.45 -176.184 - 78 96.8473 867 0 1 -6.61949 66.099 -204.45 - 78 8.70645 868 0 1 -6.45 66.1787 -204.813 - 78 279.176 1232 0 0 -5.93483 66.4759 -205.851 - 78 141.154 885 0 1 -2.87544 66.0048 -204.45 - 78 1.18933 884 0 1 -3.05 66.1193 -204.843 - 78 4.27748 1180 6 0 -10.651 56.2472 -26.25 - 78 221.936 1181 6 0 -10.6539 56.25 -26.242 - 78 73.1596 1182 6 0 -10.7186 56.45 -26.1561 - 78 240.958 1204 5 1 60.9564 -112.666 -54.4508 - 78 159.737 877 6 1 -4.47235 59.8712 -24.45 - 78 105.217 1193 6 0 -4.75798 58.775 -25.85 - 78 188.325 1192 6 0 -4.80603 58.65 -25.9769 - 78 74.8742 1191 6 0 -4.92515 58.4499 -26.1055 - 78 110.814 1195 7 0 -4.26393 59.2479 3.75 - 78 245.708 883 7 1 -3.4483 58.559 5.1501 - 78 125.225 1185 7 0 -2.21343 57.0831 4.15 - 78 275.566 1184 7 0 -2.19005 57.05 4.08117 - 78 91.5969 1321 7 0 -13.0455 84.3242 3.75 - 78 121.854 1198 7 0 -4.41959 59.8483 4.15 - 78 111.613 864 6 1 -7.11774 58.858 -24.4501 - 78 94.5685 1195 6 0 -7.23436 59.1809 -25.85 - 78 25.7698 1196 6 0 -7.26304 59.25 -26.1283 - 78 6.72569 846 5 1 -10.8464 66.3741 -54.45 - 78 185.322 845 5 1 -10.85 66.377 -54.4702 - 78 96.2099 1233 5 0 -11.0634 66.6719 -55.85 - 78 272.211 826 4 1 -14.761 70.2941 -84.45 - 78 218.441 1253 4 0 -14.74 70.6604 -85.85 - 78 9.658 341 4 1 -111.817 69.9742 -84.85 - 78 239.984 340 4 1 -111.95 69.9692 -84.7991 - 78 354.959 339 4 1 -112.15 70.2249 -84.5932 - 78 101.475 832 3 1 -13.6212 78.0963 -114.45 - 78 122.614 1289 3 0 -13.6135 78.0169 -115.85 - 78 77.2048 843 2 1 -11.4111 74.1237 -144.45 - 78 84.4401 842 2 1 -11.45 74.0177 -144.708 - 78 61.1147 1267 2 0 -11.5983 73.523 -145.85 - 78 99.6035 1266 2 0 -11.6226 73.4498 -146.017 - 78 42.063 798 1 1 -20.3561 59.9764 -174.45 - 78 120.478 797 1 1 -20.4501 59.9293 -174.537 - 78 64.3341 796 1 1 -20.65 59.831 -174.708 - 78 98.0587 1196 1 0 -21.9342 59.316 -175.85 - 78 181.038 604 0 1 -59.1574 27.2836 -204.451 - 78 102.62 1031 0 0 -59.1677 26.4288 -205.85 - 78 30.2854 1030 0 0 -59.1479 26.25 -206.159 - 78 215.956 877 7 1 -4.45 59.9216 5.32501 - 78 74.4685 876 7 1 -4.65002 59.8448 5.23781 -Number of digits in this event: 42 +Number of tracker hits in this event: 46 + 78 113.012 1270 10 1 74.1915 -72.0436 95.55 + 78 112.47 540 10 0 74.1922 -72.0426 94.15 + 78 126.92 1270 9 1 74.2113 -72.0007 65.55 + 78 129.085 540 9 0 74.2097 -71.9995 64.15 + 78 148.352 1270 8 1 74.1744 -71.9742 35.55 + 78 159.534 540 8 0 74.1727 -71.9706 34.15 + 78 111.207 1270 7 1 74.1408 -71.8977 5.55 + 78 107.342 540 7 0 74.138 -71.8942 4.15 + 78 121.49 1270 6 1 74.0874 -71.8317 -24.45 + 78 98.4748 541 6 0 74.0893 -71.8322 -25.85 + 78 152.783 1270 5 1 74.1355 -71.8456 -54.45 + 78 110.696 541 5 0 74.1382 -71.8469 -55.85 + 78 119.056 1270 4 1 74.1993 -71.8674 -84.45 + 78 128.36 540 4 0 74.202 -71.8687 -85.85 + 78 127.435 1271 3 1 74.2508 -71.8879 -114.45 + 78 248.739 540 3 0 74.254 -71.8929 -115.85 + 78 431.878 1271 2 1 74.326 -71.9984 -144.45 + 78 432.847 540 2 0 74.329 -72.0028 -145.85 + 78 372.909 1271 1 1 74.3922 -72.0794 -174.45 + 78 110.706 539 1 0 74.3922 -72.0835 -175.85 + 78 106.969 1271 0 1 74.3937 -72.1847 -204.45 + 78 157.754 539 0 0 74.3968 -72.1973 -205.85 + 78 94.0535 1270 1 1 74.25 -72.0102 -174.492 + 78 108.173 537 1 0 73.7197 -72.4868 -175.85 + 78 25.8186 536 1 0 73.5377 -72.65 -176.181 + 78 213.979 1164 0 1 52.9928 -92.5179 -204.45 + 78 17.4901 1163 0 1 52.85 -92.5236 -204.812 + 78 147.553 433 0 0 52.8903 -93.4345 -205.85 + 78 282.107 432 0 0 52.7816 -93.55 -206.13 + 78 127.96 1148 7 1 49.8471 -122.376 5.15 + 78 147.865 224 9 0 81.8544 -135.219 63.75 + 78 342.596 540 1 0 74.3153 -72.0207 -175.85 + 78 579.924 1277 0 1 75.5985 -72.0481 -204.45 + 78 256.537 540 0 0 75.5978 -71.9523 -205.85 + 78 137.804 1278 0 1 75.6502 -72.4098 -204.57 + 78 108.977 1273 1 1 74.6993 -71.8926 -174.45 + 78 117.754 1284 0 1 77.0259 -74.0633 -204.45 + 78 51.842 1285 0 1 77.05 -74.0906 -204.657 + 78 18.6176 529 0 0 77.1841 -74.2385 -205.85 + 78 90.9811 528 0 0 77.1942 -74.25 -205.94 + 78 15.1469 1240 4 1 68.2204 -1.42105 -84.85 + 78 131.212 1273 0 1 74.7479 -71.9646 -204.45 + 78 59.3824 1392 3 0 124.571 98.55 -116.035 + 78 63.606 1525 3 1 125.242 99.267 -114.85 + 78 56.5803 1526 3 1 125.35 99.3435 -114.646 + 78 167.081 1269 3 1 73.9266 -71.6215 -114.45 +Number of digits in this event: 25 Using G4ParticleGun... -Particle energy: 9.51899 LIN +Particle energy: 7.52834 LIN Particle: e- Event: 79 -Number of tracker hits in this event: 37 - 79 128.934 682 9 1 -43.5552 120.551 65.55 - 79 181.555 1502 9 0 -43.5551 120.551 64.15 - 79 121.81 682 8 1 -43.5551 120.56 35.55 - 79 109.376 1502 8 0 -43.5564 120.56 34.15 - 79 395.233 682 7 1 -43.5838 120.579 5.55 - 79 233.468 1502 7 0 -43.5854 120.58 4.15 - 79 163.682 682 6 1 -43.6258 120.589 -24.45 - 79 100.877 1502 6 0 -43.6266 120.588 -25.85 - 79 136.504 682 5 1 -43.6405 120.556 -54.45 - 79 37.5394 1502 5 0 -43.6434 120.551 -55.85 - 79 59.9745 1501 5 0 -43.6436 120.55 -55.9686 - 79 118.12 681 4 1 -43.7097 120.436 -84.45 - 79 184.837 1501 4 0 -43.7115 120.434 -85.85 - 79 222.657 681 3 1 -43.7396 120.38 -114.45 - 79 131.746 1501 3 0 -43.7432 120.38 -115.85 - 79 137.772 681 2 1 -43.8134 120.372 -144.45 - 79 141.936 1501 2 0 -43.8353 120.369 -145.85 - 79 260.601 678 1 1 -44.2911 120.327 -174.45 - 79 141.373 1500 1 0 -44.3105 120.328 -175.85 - 79 141.163 676 0 1 -44.7145 120.369 -204.45 - 79 122.145 1501 0 0 -44.7404 120.372 -205.85 - 79 204.72 823 2 1 -15.3125 34.0309 -144.45 - 79 117.399 1071 2 0 -14.9111 34.291 -145.85 - 79 247.908 993 2 0 7.06295 18.8483 -146.25 - 79 36.296 992 2 0 6.72207 18.6494 -146.162 - 79 3.91959 977 2 0 63.5149 15.5472 -146.25 - 79 308.001 81 6 1 -163.778 -85.3285 -24.85 - 79 77.4428 835 6 0 -155.313 -13.05 -25.9127 - 79 40.2158 80 6 1 -163.986 -20.1092 -24.45 - 79 161.058 680 0 1 -43.8983 120.343 -204.536 - 79 4.63716 1503 0 0 -43.7243 120.941 -205.85 - 79 177.24 1504 0 0 -43.7191 120.95 -205.874 - 79 272.977 1500 0 0 -43.8446 120.299 -205.85 - 79 139.778 682 3 1 -43.65 120.492 -114.72 - 79 376.946 1507 3 0 -42.7847 121.574 -115.85 - 79 26.0152 681 7 1 -43.65 120.58 5.2711 - 79 5.52653 1501 7 0 -43.9309 120.549 4.14973 -Number of digits in this event: 27 +Number of tracker hits in this event: 99 + 79 118.497 1331 10 1 86.3807 -32.5418 95.55 + 79 116.932 737 10 0 86.3816 -32.543 94.15 + 79 113.6 1331 9 1 86.3994 -32.5658 65.55 + 79 129.283 737 9 0 86.4004 -32.5664 64.15 + 79 164.26 1331 8 1 86.4256 -32.5851 35.55 + 79 117.726 737 8 0 86.4261 -32.5869 34.15 + 79 120.317 1331 7 1 86.4305 -32.6278 5.55 + 79 143.82 737 7 0 86.4315 -32.6312 4.15 + 79 125.652 1332 6 1 86.452 -32.7039 -24.45 + 79 133.491 736 6 0 86.4527 -32.7078 -25.85 + 79 154.334 1332 5 1 86.4747 -32.7838 -54.45 + 79 120.922 736 5 0 86.4756 -32.789 -55.85 + 79 283.132 1332 4 1 86.5007 -32.8948 -84.45 + 79 178.321 735 4 0 86.5013 -32.9006 -85.85 + 79 637.688 1332 3 1 86.5117 -33.0199 -114.45 + 79 263.438 735 3 0 86.5106 -33.0293 -115.85 + 79 233.689 1332 2 1 86.4916 -33.2232 -144.45 + 79 172.117 734 2 0 86.4895 -33.233 -145.85 + 79 255.741 1331 1 1 86.4395 -33.4256 -174.45 + 79 125.576 733 1 0 86.4378 -33.4349 -175.85 + 79 113.457 1331 0 1 86.4007 -33.6349 -204.45 + 79 158.013 732 0 0 86.3969 -33.6415 -205.85 + 79 104.704 819 0 0 81.3913 -16.2083 -206.25 + 79 212.255 820 0 0 81.4255 -16.05 -206.029 + 79 170.526 711 4 1 -37.65 48.7623 -84.7881 + 79 126.541 1344 2 1 88.9412 -30.8873 -144.45 + 79 130.898 747 2 0 89.0641 -30.5219 -145.85 + 79 65.9144 748 2 0 89.0997 -30.45 -146.156 + 79 115.241 1363 1 1 92.7947 -24.4833 -174.45 + 79 18.6263 1362 1 1 92.75 -24.2934 -174.806 + 79 63.1109 781 1 0 92.6351 -23.7519 -175.85 + 79 116.87 782 1 0 92.6139 -23.65 -176.031 + 79 138.249 1338 0 1 87.7855 -5.30229 -204.45 + 79 137.894 874 0 0 87.5176 -5.22229 -205.85 + 79 61.3891 1276 1 1 75.4126 -27.2137 -174.45 + 79 102.437 1275 1 1 75.25 -27.2188 -174.604 + 79 8.53966 762 1 0 75.1026 -27.6416 -175.85 + 79 122.202 761 1 0 75.1016 -27.6501 -175.88 + 79 180.569 813 1 0 24.4138 -17.3515 -176.25 + 79 124.03 812 1 0 24.0425 -17.4502 -176.183 + 79 95.0649 811 1 0 23.7994 -17.65 -176.066 + 79 197.224 810 1 0 23.7423 -17.85 -176.028 + 79 236.179 809 1 0 23.8039 -18.05 -175.963 + 79 270.294 734 3 0 86.4752 -33.0791 -115.85 + 79 198.507 1343 2 1 88.7013 -31.5382 -144.45 + 79 94.8459 742 2 0 88.7486 -31.4694 -145.85 + 79 32.6815 743 2 0 88.7775 -31.45 -146.143 + 79 44.778 1359 1 1 92.1358 -28.9541 -174.45 + 79 74.43 1360 1 1 92.15 -28.9096 -174.582 + 79 67.2381 757 1 0 92.2759 -28.5149 -175.85 + 79 52.8626 758 1 0 92.3001 -28.45 -176.063 + 79 19.2104 1382 0 1 96.604 -18.9257 -204.45 + 79 97.2316 1381 0 1 96.55 -18.9034 -204.462 + 79 61.7084 1380 0 1 96.35 -18.8138 -204.516 + 79 81.4871 1379 0 1 96.15 -18.7145 -204.58 + 79 69.686 1378 0 1 95.95 -18.6151 -204.649 + 79 113.737 1377 0 1 95.75 -18.5094 -204.707 + 79 54.5971 1376 0 1 95.5493 -18.4107 -204.776 + 79 117.409 812 0 0 93.1545 -17.5485 -205.85 + 79 211.133 813 0 0 92.823 -17.45 -205.979 + 79 36.0899 733 3 0 86.5291 -33.25 -116.177 + 79 217.257 737 4 0 86.5949 -32.5923 -85.85 + 79 102.384 1347 3 1 89.5512 -30.9082 -114.45 + 79 219.172 747 3 0 89.3643 -30.6341 -115.85 + 79 128.024 1311 2 1 82.4283 -27.0368 -144.45 + 79 92.8427 762 2 0 82.0051 -27.5353 -145.851 + 79 31.4586 761 2 0 81.9282 -27.65 -146.155 + 79 98.2908 1267 1 1 73.501 -38.6588 -174.45 + 79 54.9635 1266 1 1 73.45 -38.7273 -174.661 + 79 2.54568 704 1 0 73.098 -39.2474 -175.85 + 79 183.321 703 1 0 73.0961 -39.25 -175.856 + 79 43.2658 1208 0 1 61.6787 -45.0423 -204.45 + 79 256.868 1207 0 1 61.6499 -45.1176 -204.515 + 79 19.2941 665 0 0 60.9297 -46.9981 -205.85 + 79 125.51 664 0 0 60.9107 -47.05 -205.885 + 79 82.3864 663 0 0 60.8507 -47.2502 -206.062 + 79 124.817 1340 3 1 88.1831 -30.3662 -114.85 + 79 4.85965 736 4 0 86.6048 -32.6508 -85.85 + 79 156.157 1353 3 1 90.9159 -33.0168 -114.45 + 79 11.4996 1354 3 1 90.95 -33.049 -114.799 + 79 70.1518 1369 2 1 94.0575 -37.7122 -144.45 + 79 146.482 1370 2 1 94.15 -37.778 -144.667 + 79 145.057 709 2 0 94.715 -38.0852 -145.85 + 79 111.254 724 2 0 118.23 -35.1418 -146.25 + 79 39.8061 725 2 0 118.154 -35.0495 -145.972 + 79 137.668 1488 2 1 117.859 -34.6351 -144.849 + 79 32.6973 1487 2 1 117.638 -34.3851 -144.45 + 79 253.863 1486 2 1 117.55 -34.3159 -144.522 + 79 94.1264 1485 2 1 117.35 -34.0945 -144.555 + 79 86.8622 1484 2 1 117.15 -33.8001 -144.524 + 79 446.978 1483 2 1 116.95 -33.6056 -144.475 + 79 65.0582 699 2 0 115.37 -40.0877 -145.85 + 79 122.234 698 2 0 115.366 -40.25 -145.938 + 79 20.6002 697 2 0 115.415 -40.45 -146.187 + 79 68.6925 683 2 0 130.605 -43.4365 -146.25 + 79 106.854 682 2 0 130.558 -43.45 -146.108 + 79 287.106 1332 0 1 86.5353 -32.7866 -204.45 + 79 246.489 736 0 0 86.5379 -32.7824 -205.85 + 79 6.12886 1217 1 0 119.474 63.4579 -175.85 +Number of digits in this event: 50 Using G4ParticleGun... -Particle energy: 8.22036 LIN +Particle energy: 1.50391 LIN Particle: e- Event: 80 -Number of tracker hits in this event: 27 - 80 140.194 306 9 1 -118.948 -43.2738 65.55 - 80 203.911 683 9 0 -118.947 -43.2735 64.15 - 80 109.268 306 8 1 -118.939 -43.2684 35.55 - 80 175.998 683 8 0 -118.938 -43.2677 34.15 - 80 103.448 306 7 1 -118.919 -43.2524 5.55 - 80 116.457 683 7 0 -118.918 -43.2512 4.15 - 80 141.515 306 6 1 -118.906 -43.2263 -24.45 - 80 174.692 684 6 0 -118.905 -43.2257 -25.85 - 80 155.298 306 5 1 -118.878 -43.2149 -54.45 - 80 235.255 684 5 0 -118.88 -43.2155 -55.85 - 80 120.491 305 4 1 -118.969 -43.3022 -84.45 - 80 112.794 683 4 0 -118.973 -43.3082 -85.85 - 80 133.058 305 3 1 -119.118 -43.4461 -114.45 - 80 128.366 682 3 0 -119.106 -43.4581 -115.85 - 80 109.858 306 2 1 -118.79 -43.7479 -144.45 - 80 151.041 681 2 0 -118.777 -43.7784 -145.85 - 80 116.538 308 1 1 -118.508 -44.3797 -174.45 - 80 101.099 678 1 0 -118.494 -44.42 -175.85 - 80 106.55 309 0 1 -118.184 -45.2566 -204.45 - 80 208.756 673 0 0 -118.159 -45.2972 -205.85 - 80 2.90868 940 1 0 -115.813 8.15778 -176.25 - 80 4.2479 323 1 1 -115.471 8.6093 -174.85 - 80 37.8639 943 1 0 -114.334 8.78502 -175.85 - 80 47.1626 296 1 1 -120.772 8.94076 -174.85 - 80 127.57 683 3 0 -119.111 -43.45 -115.862 - 80 100.075 1035 3 1 27.05 -165.012 -114.781 - 80 222.951 1036 3 1 27.2501 -165.091 -114.655 -Number of digits in this event: 16 +Number of tracker hits in this event: 58 + 80 114.849 1228 10 1 65.8002 64.4386 95.55 + 80 124.252 1221 10 0 65.8031 64.4367 94.15 + 80 424.939 1229 9 1 65.8689 64.4032 65.55 + 80 149.45 1221 9 0 65.865 64.3908 64.15 + 80 133.57 1228 8 1 65.7747 64.1399 35.55 + 80 115.88 1220 8 0 65.7759 64.1312 34.15 + 80 118.663 1228 7 1 65.8147 63.9262 5.55 + 80 102.276 1219 7 0 65.8233 63.9198 4.15 + 80 103.966 1228 6 1 65.8381 63.503 -24.45 + 80 148.688 1217 6 0 65.8353 63.4813 -25.85 + 80 200.654 1228 5 1 65.7799 63.0089 -54.45 + 80 241.263 1214 5 0 65.776 62.9865 -55.85 + 80 223.599 1228 4 1 65.6528 62.5438 -84.45 + 80 111.004 1212 4 0 65.6469 62.5281 -85.85 + 80 108.662 1227 3 1 65.5207 62.2127 -114.45 + 80 137.763 1210 3 0 65.5248 62.1957 -115.85 + 80 83.2215 1227 2 1 65.6198 61.8126 -144.45 + 80 131.392 1208 2 0 65.6245 61.7808 -145.85 + 80 107.943 1228 1 1 65.6929 61.0551 -174.45 + 80 109.805 1204 1 0 65.6961 61.0175 -175.85 + 80 152.287 1228 0 1 65.7361 60.2082 -204.45 + 80 125.157 1200 0 0 65.7402 60.178 -205.85 + 80 59.483 1232 7 1 66.45 63.3054 5.43236 + 80 149.199 1229 8 1 65.9684 64.2204 35.55 + 80 141.882 1230 8 1 66.05 64.2652 35.2401 + 80 120.387 1222 8 0 66.2851 64.4931 34.15 + 80 14.0545 1286 7 1 77.4211 73.385 5.55 + 80 165.504 1287 7 1 77.45 73.3719 5.51013 + 80 60.9791 1288 7 1 77.65 73.3157 5.22806 + 80 124.301 1266 7 0 78.54 73.3886 4.14993 + 80 0.0516935 1320 6 1 84.2487 68.2842 -24.45 + 80 65.5095 1321 6 1 84.25 68.2839 -24.4509 + 80 203.899 1322 6 1 84.45 68.2318 -24.5906 + 80 32.1965 1323 6 1 84.6501 68.1588 -24.7698 + 80 165.537 1238 6 0 85.8385 67.7812 -25.8502 + 80 52.9876 1237 6 0 86.2148 67.6499 -26.1475 + 80 85.9607 1241 6 0 91.5238 68.3463 -26.2499 + 80 99.0647 1242 6 0 91.303 68.45 -26.017 + 80 19.099 1347 6 1 89.4953 69.4997 -24.85 + 80 131.357 1346 6 1 89.45 69.5274 -24.8212 + 80 132.612 1345 6 1 89.25 69.7089 -24.689 + 80 24.0658 1344 6 1 89.05 69.9491 -24.4844 + 80 111.221 1221 8 0 66.2051 64.3453 34.15 + 80 19.2707 1269 7 1 73.8872 69.9696 5.55 + 80 153.991 1268 7 1 73.8499 69.9708 5.47614 + 80 128.52 1250 7 0 73.5428 70.1859 4.14947 + 80 27.0533 1251 7 0 73.5299 70.2501 3.83162 + 80 65.5332 1299 6 1 79.9351 75.6108 -24.45 + 80 79.4261 1298 6 1 79.85 75.683 -24.6799 + 80 39.1734 1280 6 0 79.4187 76.1839 -25.8507 + 80 117.884 1281 6 0 79.3562 76.25 -25.9888 + 80 404.103 1383 6 0 73.5339 96.9391 -26.2494 + 80 5.03426 1384 6 0 73.5428 96.95 -26.1881 + 80 50.3006 1267 7 1 73.65 69.8842 5.24064 + 80 0.394136 1242 7 0 72.1847 68.4524 4.15 + 80 120.118 1241 7 0 72.1819 68.4496 4.14797 + 80 453.415 1240 7 0 71.9817 68.2499 3.94252 + 80 160.133 1239 7 0 71.769 68.05 3.8779 +Number of digits in this event: 29 Using G4ParticleGun... -Particle energy: 8.19756 LIN +Particle energy: 2.42843 LIN Particle: e- Event: 81 -Number of tracker hits in this event: 81 - 81 199.797 1590 8 1 138.15 9.39306 35.55 - 81 15.0601 1589 8 1 138.15 9.39304 35.2112 - 81 110.981 946 8 0 138.15 9.39298 34.15 - 81 151.228 1589 7 1 138.135 9.38988 5.55 - 81 124.127 946 7 0 138.135 9.3901 4.15 - 81 212.535 1589 6 1 138.126 9.39058 -24.45 - 81 158.566 946 6 0 138.125 9.39017 -25.85 - 81 122.368 1589 5 1 138.115 9.38522 -54.45 - 81 167.434 946 5 0 138.116 9.38528 -55.85 - 81 122.296 1589 4 1 138.124 9.38584 -84.45 - 81 116.774 946 4 0 138.123 9.38629 -85.85 - 81 131.718 1589 3 1 138.113 9.40199 -114.45 - 81 192.129 946 3 0 138.112 9.4024 -115.85 - 81 494.241 1589 2 1 138.101 9.41059 -144.45 - 81 211.215 946 2 0 138.1 9.41137 -145.85 - 81 145.369 1589 1 1 138.099 9.42622 -174.45 - 81 130.748 946 1 0 138.103 9.42598 -175.85 - 81 382.116 1590 0 1 138.178 9.45884 -204.45 - 81 386.585 947 0 0 138.179 9.45637 -205.85 - 81 63.6807 1095 1 0 52.2975 39.25 -175.911 - 81 35.434 511 3 0 -17.2981 -77.7952 -116.25 - 81 105.133 510 3 0 -17.3676 -77.85 -116.152 - 81 94.0898 808 3 1 -18.2504 -77.7353 -114.85 - 81 79.0647 807 3 1 -18.4504 -77.6516 -114.613 - 81 16.2883 806 3 1 -18.65 -77.5303 -114.461 - 81 180.593 1588 6 1 137.95 9.4061 -24.5734 - 81 77.3127 1148 8 0 127.674 49.7917 33.75 - 81 256.838 1147 8 0 127.669 49.65 33.9888 - 81 130.284 1648 0 1 149.762 25.3547 -204.85 - 81 104.222 1591 1 1 138.356 9.05493 -174.45 - 81 287.706 945 1 0 138.384 9.07047 -175.85 - 81 147.089 1592 0 1 138.57 9.52225 -204.45 - 81 45.732 848 2 0 150.583 -10.377 -146.25 - 81 507.212 847 2 0 150.632 -10.45 -146.2 - 81 291.72 947 2 0 137.879 9.5823 -145.85 - 81 13.3486 1557 1 1 131.575 12.8092 -174.451 - 81 109.292 1556 1 1 131.55 12.8208 -174.502 - 81 0.155604 1555 1 1 131.35 12.8996 -174.85 - 81 151.114 965 1 0 130.769 13.1704 -175.85 - 81 71.2032 1493 0 1 118.909 15.141 -204.45 - 81 106.961 1492 0 1 118.75 15.0988 -204.654 - 81 138.669 973 0 0 117.875 14.8449 -205.85 - 81 127.62 966 1 0 130.589 13.2504 -176.074 - 81 42.5336 1375 0 1 95.25 19.7772 -204.451 - 81 69.0677 1376 0 1 95.35 19.7905 -204.59 - 81 18.5558 1377 0 1 95.55 19.7956 -204.792 - 81 15.1612 998 0 0 97.5125 19.6533 -205.85 - 81 355.707 997 0 0 97.5805 19.65 -205.885 - 81 86.4609 996 0 0 98.3309 19.45 -206.037 - 81 55.2037 995 0 0 98.5361 19.25 -205.995 - 81 76.5359 994 0 0 98.7239 19.05 -205.974 - 81 79.2719 993 0 0 98.8978 18.8497 -206 - 81 154.437 992 0 0 99.1325 18.6497 -206.083 - 81 62.1426 991 0 0 99.3252 18.45 -206.189 - 81 16.9518 607 0 0 144.74 -58.5889 -206.25 - 81 82.0896 606 0 0 144.726 -58.65 -206.229 - 81 65.2116 605 0 0 144.722 -58.85 -206.162 - 81 55.1479 604 0 0 144.735 -59.05 -206.104 - 81 64.4633 603 0 0 144.753 -59.2503 -206.026 - 81 53.54 602 0 0 144.734 -59.45 -205.916 - 81 225.291 1620 0 1 144.332 -61.0795 -204.85 - 81 130.743 1621 0 1 144.35 -61.8162 -204.541 - 81 28.5013 1622 0 1 144.55 -62.0429 -204.807 - 81 46.2185 581 0 0 146.13 -63.8296 -205.85 - 81 87.4251 580 0 0 146.146 -63.85 -205.864 - 81 72.1196 579 0 0 146.269 -64.05 -206.057 - 81 107.29 578 0 0 146.353 -64.25 -206.201 - 81 66.282 468 0 0 148.863 -86.2713 -206.25 - 81 224.284 469 0 0 148.794 -86.2499 -206.063 - 81 3.54355 470 0 0 148.762 -86.0499 -205.853 - 81 6.57808 1634 0 1 146.964 -83.4193 -204.85 - 81 12.8853 1633 0 1 146.95 -83.4047 -204.844 - 81 16.154 503 0 0 143.612 -79.2658 -205.85 - 81 357.246 504 0 0 143.601 -79.2497 -205.852 - 81 1.16099 1625 0 1 145.151 -66.1356 -204.85 - 81 148.239 1624 0 1 145.15 -66.1386 -204.849 - 81 1.45417 948 2 0 137.957 9.65036 -146.244 - 81 169.325 899 2 0 142.579 -0.115719 -146.25 - 81 5.24075 1615 2 1 143.338 0.307968 -144.85 - 81 340.482 1616 2 1 143.35 0.312712 -144.839 - 81 113.3 945 0 0 138.115 9.21248 -205.85 -Number of digits in this event: 38 -Using G4ParticleGun... -Particle energy: 1.2769 LIN +Number of tracker hits in this event: 37 + 81 210.32 676 9 1 -44.7344 -114.89 65.55 + 81 273.242 326 9 0 -44.7351 -114.888 64.15 + 81 189.519 676 8 1 -44.7695 -114.892 35.55 + 81 127.327 326 8 0 -44.7698 -114.893 34.15 + 81 162.796 676 7 1 -44.7799 -114.923 5.55 + 81 131.272 326 7 0 -44.7805 -114.927 4.15 + 81 97.1018 676 6 1 -44.7955 -115.015 -24.45 + 81 130.078 325 6 0 -44.7896 -115.02 -25.85 + 81 151.17 676 5 1 -44.658 -115.115 -54.45 + 81 149.347 325 5 0 -44.6519 -115.116 -55.85 + 81 138.805 677 4 1 -44.5261 -115.127 -84.45 + 81 145.567 325 4 0 -44.4611 -115.128 -85.85 + 81 119.589 683 3 1 -43.2938 -115.135 -114.45 + 81 129.963 325 3 0 -43.2295 -115.136 -115.85 + 81 126.665 692 2 1 -41.5252 -115.147 -144.45 + 81 122.314 325 2 0 -41.4578 -115.141 -145.85 + 81 112.328 699 1 1 -40.2196 -115.234 -174.45 + 81 120.873 324 1 0 -40.1903 -115.278 -175.85 + 81 105.79 699 0 1 -40.1029 -115.729 -204.45 + 81 110.453 322 0 0 -40.095 -115.598 -205.85 + 81 2.05297 407 0 0 -40.4448 -98.569 -206.25 + 81 116.426 324 4 0 -44.7732 -115.199 -85.85 + 81 84.5734 677 7 1 -44.65 -114.937 5.38036 + 81 84.5334 325 7 0 -44.6199 -114.957 4.15 + 81 238.119 675 0 1 -44.9976 -115.237 -204.45 + 81 69.3334 676 0 1 -44.85 -114.991 -204.69 + 81 123.574 330 0 0 -44.0658 -114.062 -205.85 + 81 45.1889 249 0 0 -39.6104 -130.243 -206.25 + 81 64.4875 248 0 0 -39.5312 -130.35 -206.152 + 81 66.7437 247 0 0 -39.3907 -130.55 -206.079 + 81 59.8462 246 0 0 -39.227 -130.75 -206.015 + 81 68.2663 245 0 0 -39.1396 -130.95 -206.036 + 81 73.4579 244 0 0 -39.0633 -131.15 -206.114 + 81 138.708 263 0 0 -31.2449 -127.406 -206.25 + 81 188.793 301 0 0 -24.3159 -119.869 -206.25 + 81 113.874 324 0 0 -44.8854 -115.279 -205.85 + 81 55.5529 495 0 0 -34.1124 -80.9902 -206.25 +Number of digits in this event: 22 +Using G4ParticleGun... +Particle energy: 5.57619 LIN Particle: e- Event: 82 -Number of tracker hits in this event: 43 - 82 115.813 1199 11 1 59.8797 -46.1123 125.55 - 82 87.8844 669 11 0 59.8767 -46.0919 124.15 - 82 117.129 1198 10 1 59.8363 -45.6761 95.55 - 82 120.158 672 10 0 59.8421 -45.6494 94.15 - 82 181.603 1199 9 1 60.0052 -45.0858 65.55 - 82 114.684 674 9 0 60.0168 -45.0664 64.15 - 82 203.88 1201 8 1 60.2533 -44.663 35.55 - 82 103.868 677 8 0 60.2606 -44.6391 34.15 - 82 131.941 1201 7 1 60.3875 -44.1512 5.55 - 82 211.796 679 7 0 60.3945 -44.1273 4.15 - 82 85.0142 1202 6 1 60.5475 -43.67 -24.45 - 82 16.0923 681 6 0 60.5585 -43.6508 -25.85 - 82 197.187 682 6 0 60.5589 -43.65 -25.9095 - 82 266.939 1203 5 1 60.8192 -43.2713 -54.4501 - 82 127.912 683 5 0 60.8997 -43.4023 -55.8509 - 82 139.834 1207 4 1 61.5868 -45.7572 -84.45 - 82 141.582 670 4 0 61.4056 -45.9209 -85.85 - 82 185.757 1189 3 1 58.016 -50.0577 -114.45 - 82 20.3796 646 3 0 57.7871 -50.8187 -115.85 - 82 108.065 645 3 0 57.7774 -50.85 -115.907 - 82 122.225 1166 2 1 53.4265 -65.7609 -144.45 - 82 27.4025 569 2 0 52.9988 -66.2146 -145.85 - 82 89.9664 568 2 0 52.9642 -66.25 -145.958 - 82 127.669 1123 1 1 44.7615 -76.5989 -174.45 - 82 61.0801 511 1 0 44.6873 -77.7262 -175.85 - 82 165.245 510 1 0 44.6803 -77.85 -176.005 - 82 131.05 1116 0 1 43.3712 -100.777 -204.45 - 82 111.126 1117 0 1 43.45 -100.985 -204.617 - 82 74.1325 388 0 0 44.0444 -102.475 -205.85 - 82 86.2095 387 0 0 44.0753 -102.55 -205.912 - 82 150.181 386 0 0 44.1621 -102.751 -206.078 - 82 3.08289 385 0 0 44.2494 -102.95 -206.242 - 82 321.287 1188 3 1 57.85 -50.1307 -114.488 - 82 103.59 641 3 0 58.0457 -51.8297 -115.85 - 82 175.889 1204 5 1 60.85 -43.283 -54.7295 - 82 11.6472 1069 14 0 122.97 33.85 213.781 - 82 69.2336 110 3 0 120.245 -157.95 -116.163 - 82 92.0899 180 3 0 81.376 -144.15 -116.16 - 82 18.5122 516 3 0 146.686 -76.85 -116.128 - 82 92.3059 109 3 0 120.402 -158.15 -116.018 - 82 59.4373 108 3 0 120.403 -158.35 -115.941 - 82 107.513 1501 3 1 120.47 -158.632 -114.85 - 82 225.881 1500 3 1 120.35 -158.669 -114.663 -Number of digits in this event: 21 +Number of tracker hits in this event: 93 + 82 132.206 862 11 1 -7.58318 36.0108 125.55 + 82 104.907 1079 11 0 -7.58432 36.0107 124.15 + 82 125.848 862 10 1 -7.60624 36.0076 95.55 + 82 124.305 1079 10 0 -7.60687 36.0089 94.15 + 82 345.065 862 9 1 -7.61999 36.0378 65.55 + 82 412.886 1079 9 0 -7.61929 36.0388 64.15 + 82 268.336 862 8 1 -7.6027 36.0671 35.55 + 82 301.456 1080 8 0 -7.60121 36.0689 34.15 + 82 247.555 862 7 1 -7.57919 36.104 5.55 + 82 259.96 1080 7 0 -7.57964 36.1051 4.15 + 82 216.064 862 6 1 -7.58443 36.1274 -24.45 + 82 103.835 1080 6 0 -7.58792 36.1255 -25.85 + 82 115.881 861 5 1 -7.66927 36.0927 -54.45 + 82 128.744 1080 5 0 -7.67231 36.0932 -55.85 + 82 124.167 861 4 1 -7.73512 36.1005 -84.45 + 82 335.248 1080 4 0 -7.73857 36.0963 -85.85 + 82 133.912 861 3 1 -7.82289 36.0086 -114.45 + 82 123.432 1079 3 0 -7.82877 36.0044 -115.85 + 82 256.203 860 2 1 -7.94604 35.9097 -144.45 + 82 112.285 1079 2 0 -7.95433 35.9054 -145.85 + 82 389.683 859 1 1 -8.10251 35.7898 -174.45 + 82 223.804 1078 1 0 -8.11068 35.7847 -175.85 + 82 231.525 858 0 1 -8.28217 35.7266 -204.45 + 82 209.355 1078 0 0 -8.2895 35.7191 -205.85 + 82 126.559 1158 0 0 37.3531 51.7622 -206.25 + 82 22.1848 1157 0 0 37.6223 51.65 -205.911 + 82 92.0942 1093 0 1 38.7352 51.1117 -204.849 + 82 134.728 1094 0 1 38.85 50.9745 -204.646 + 82 63.4893 1095 0 1 39.05 50.9103 -204.563 + 82 183.051 1096 0 1 39.25 50.9356 -204.483 + 82 81.0323 1097 0 1 39.4503 50.7304 -204.538 + 82 215.244 1086 1 0 26.2334 37.4265 -176.25 + 82 82.6751 1085 1 0 26.3976 37.25 -176.202 + 82 333.804 858 1 1 -8.25 35.5182 -174.548 + 82 238.242 860 1 1 -7.98916 36.0558 -174.45 + 82 126.053 1080 1 0 -8.00908 36.0703 -175.85 + 82 140.891 1081 0 0 -8.4669 36.3936 -205.85 + 82 117.502 1079 1 0 -7.986 36.0341 -175.85 + 82 116.732 861 0 1 -7.77162 35.6803 -204.45 + 82 118.169 1079 8 0 -7.64964 36.0049 34.15 + 82 119.118 1079 7 0 -7.62778 35.9386 4.15 + 82 126.101 1078 6 0 -7.53826 35.7424 -25.85 + 82 300.475 862 5 1 -7.46867 35.576 -54.45 + 82 113.412 1077 5 0 -7.46853 35.5686 -55.85 + 82 120.811 862 4 1 -7.45098 35.4753 -84.45 + 82 115.783 1077 4 0 -7.45065 35.4627 -85.85 + 82 120.536 862 3 1 -7.45264 35.2006 -114.45 + 82 112.885 1075 3 0 -7.45787 35.1856 -115.85 + 82 103.201 862 2 1 -7.60321 34.8746 -144.45 + 82 199.697 1074 2 0 -7.60991 34.8557 -145.85 + 82 132.725 861 1 1 -7.76772 34.464 -174.45 + 82 108.81 1071 1 0 -7.77622 34.439 -175.85 + 82 119.448 860 0 1 -7.92416 33.9214 -204.45 + 82 360.108 1069 0 0 -7.92747 33.8963 -205.85 + 82 114.278 1595 11 0 52.224 139.15 123.954 + 82 143.069 1163 11 1 52.7536 138.781 125.15 + 82 19.9477 1166 11 1 53.25 139.116 125.216 + 82 0.862573 1068 0 0 -7.91325 33.8498 -206.248 + 82 133.03 863 3 1 -7.44999 35.2048 -114.704 + 82 231.481 861 7 1 -7.71027 36.0019 5.54994 + 82 77.906 860 7 1 -7.85039 35.8356 5.39918 + 82 48.7208 859 7 1 -8.05004 35.6472 5.2509 + 82 64.2656 1073 7 0 -9.28728 34.7642 4.15 + 82 123.218 1072 7 0 -9.43962 34.65 4.00258 + 82 11.6451 685 6 1 -43.0415 16.7811 -24.45 + 82 104.308 684 6 1 -43.0502 16.7816 -24.4983 + 82 91.9746 984 6 0 -43.2832 16.9981 -25.85 + 82 25.9897 985 6 0 -43.3126 17.05 -26.1529 + 82 130.665 1026 6 0 -45.9393 25.3815 -26.2499 + 82 3.33661 1027 6 0 -45.9071 25.45 -25.8663 + 82 217.291 671 6 1 -45.8384 25.6564 -24.85 + 82 15.2377 670 6 1 -45.8626 25.614 -24.45 + 82 331.567 1033 6 0 -43.7917 26.6989 -25.85 + 82 137.625 958 6 0 -16.0768 11.7094 -26.25 + 82 91.1049 959 6 0 -16.1785 11.85 -26.0718 + 82 86.3656 817 6 1 -16.6218 11.7039 -24.85 + 82 260.93 816 6 1 -16.65 11.6831 -24.7863 + 82 126.022 861 8 1 -7.7282 36.0935 35.55 + 82 110.519 861 6 1 -7.65655 36.2976 -24.45 + 82 146.296 1081 6 0 -7.64144 36.2976 -25.85 + 82 106.473 863 5 1 -7.36151 36.2995 -54.45 + 82 146.412 1081 5 0 -7.34246 36.2955 -55.85 + 82 160.323 865 4 1 -6.9207 36.2335 -84.45 + 82 119.722 868 3 1 -6.37357 36.3199 -114.45 + 82 119.513 1081 3 0 -6.34485 36.3314 -115.85 + 82 127.186 871 2 1 -5.73525 36.5186 -144.45 + 82 113.687 1082 2 0 -5.70711 36.5356 -145.85 + 82 159.966 874 1 1 -5.15792 36.8432 -174.45 + 82 169.294 1084 1 0 -5.13474 36.8699 -175.85 + 82 118.765 876 0 1 -4.69001 37.4094 -204.45 + 82 56.1064 1086 0 0 -4.67074 37.4455 -205.85 + 82 66.8312 1087 0 0 -4.66837 37.45 -206.022 + 82 61.5186 785 1 1 -23.0035 51.5514 -174.45 +Number of digits in this event: 52 Using G4ParticleGun... -Particle energy: 2.86416 LIN +Particle energy: 9.36779 LIN Particle: e- Event: 83 -Number of tracker hits in this event: 38 - 83 121.099 460 8 1 -87.8949 -110.028 35.55 - 83 99.913 350 8 0 -87.8954 -110.032 34.15 - 83 126.763 460 7 1 -87.9126 -110.099 5.55 - 83 157.23 350 7 0 -87.9129 -110.101 4.15 - 83 118.842 460 6 1 -87.9157 -110.141 -24.45 - 83 113.573 350 6 0 -87.9153 -110.144 -25.85 - 83 114.422 460 5 1 -87.8979 -110.196 -54.45 - 83 160.783 349 5 0 -87.8974 -110.196 -55.85 - 83 113.82 460 4 1 -87.8771 -110.199 -84.45 - 83 103.787 349 4 0 -87.8752 -110.196 -85.85 - 83 121.462 461 3 1 -87.8374 -110.153 -114.45 - 83 104.968 350 3 0 -87.8324 -110.149 -115.85 - 83 294.745 461 2 1 -87.7261 -110.088 -144.45 - 83 109.019 350 2 0 -87.7207 -110.085 -145.85 - 83 133.466 462 1 1 -87.6269 -110.03 -174.45 - 83 118.953 350 1 0 -87.6263 -110.027 -175.85 - 83 129.474 462 0 1 -87.6058 -109.972 -204.45 - 83 109.105 350 0 0 -87.6001 -109.969 -205.85 - 83 51.2992 1300 9 0 -123.947 80.05 63.785 - 83 73.8992 620 8 1 -55.9231 75.9786 35.15 - 83 122.939 460 3 1 -87.9741 -110.247 -114.45 - 83 153.591 353 3 0 -87.9968 -109.45 -115.85 - 83 67.049 220 4 0 -76.451 -135.987 -86.2498 - 83 63.5823 219 4 0 -76.3573 -136.15 -86.1001 - 83 65.0632 218 4 0 -76.2853 -136.35 -85.9733 - 83 61.4741 217 4 0 -76.2229 -136.55 -85.8989 - 83 48.0323 216 4 0 -76.1643 -136.75 -85.8922 - 83 59.4852 215 4 0 -76.1093 -136.951 -85.9261 - 83 66.4459 214 4 0 -76.0831 -137.15 -85.98 - 83 85.5692 213 4 0 -76.0448 -137.35 -86.0612 - 83 122.211 212 4 0 -75.9691 -137.55 -86.0179 - 83 190.025 211 4 0 -75.8829 -137.75 -85.9527 - 83 234.469 210 4 0 -75.6956 -137.95 -85.9575 - 83 80.2015 209 4 0 -75.5233 -138.15 -85.9502 - 83 227.036 208 4 0 -75.4157 -138.35 -85.9908 - 83 17.0977 526 4 1 -74.6945 -138.54 -84.85 - 83 86.618 527 4 1 -74.65 -138.527 -84.7929 - 83 379.972 528 4 1 -74.45 -138.465 -84.6364 -Number of digits in this event: 17 -Using G4ParticleGun... -Particle energy: 6.81489 LIN +Number of tracker hits in this event: 143 + 83 151.391 997 11 1 19.5192 60.9095 125.55 + 83 144.653 1204 11 0 19.5183 60.9106 124.15 + 83 228.767 997 10 1 19.4985 60.9347 95.55 + 83 176.238 1204 10 0 19.4983 60.9369 94.15 + 83 328.16 997 9 1 19.491 60.9846 65.55 + 83 117.67 1204 9 0 19.4919 60.988 64.15 + 83 97.3324 997 8 1 19.5074 61.0501 35.55 + 83 107.557 1205 8 0 19.5066 61.0539 34.15 + 83 83.4197 997 7 1 19.4873 61.1329 5.55 + 83 107.764 1205 7 0 19.4871 61.1366 4.15 + 83 318.533 997 6 1 19.4834 61.2092 -24.45 + 83 331.44 1205 6 0 19.4832 61.2122 -25.85 + 83 357.074 997 5 1 19.4816 61.2722 -54.45 + 83 166.658 1206 5 0 19.4833 61.2752 -55.85 + 83 576.324 997 4 1 19.5117 61.3337 -84.45 + 83 335.439 1206 4 0 19.5121 61.3369 -85.85 + 83 210.369 997 3 1 19.5142 61.4037 -114.45 + 83 310.859 1206 3 0 19.5132 61.4074 -115.85 + 83 505.02 997 2 1 19.4943 61.4814 -144.45 + 83 114.148 1207 2 0 19.4926 61.4846 -145.85 + 83 408.435 997 1 1 19.4591 61.5482 -174.45 + 83 117.421 1207 1 0 19.4562 61.5509 -175.85 + 83 110.42 996 0 1 19.3987 61.6086 -204.45 + 83 389.797 1207 0 0 19.3961 61.6096 -205.85 + 83 30.7884 1210 1 0 19.537 62.2106 -175.85 + 83 108.935 1211 1 0 19.5384 62.25 -175.922 + 83 50.8982 974 0 1 14.8895 70.7084 -204.45 + 83 140.642 973 0 1 14.85 70.7019 -204.497 + 83 111.058 972 0 1 14.6499 70.662 -204.693 + 83 16.7576 971 0 1 14.45 70.5256 -204.829 + 83 54.1397 1254 0 0 12.2424 70.9829 -205.85 + 83 257.846 960 0 1 12.1471 72.3333 -204.85 + 83 109.796 996 1 1 19.45 61.5484 -174.513 + 83 199.911 1206 1 0 19.2787 61.3079 -175.85 + 83 209.203 1205 1 0 19.2491 61.25 -176.113 + 83 27.8617 961 0 1 12.2709 47.5344 -204.451 + 83 93.9239 1134 0 0 11.8496 46.9877 -205.85 + 83 64.225 995 1 0 -5.63347 19.2213 -176.25 + 83 140.364 994 1 0 -5.70435 19.0485 -176.086 + 83 59.8695 993 1 0 -5.94741 18.85 -175.923 + 83 48.3417 835 1 1 -12.8521 17.6051 -174.85 + 83 65.9786 834 1 1 -13.05 17.515 -174.826 + 83 54.572 833 1 1 -13.25 17.3143 -174.797 + 83 7.20292 832 1 1 -13.45 17.3399 -174.832 + 83 399.076 988 1 0 -14.8019 17.7408 -175.85 + 83 56.629 989 1 0 -15.2575 17.8501 -176.111 + 83 8.74205 996 5 1 19.45 61.4448 -54.8268 + 83 103.752 1210 5 0 19.2978 62.0804 -55.85 + 83 59.0517 1211 5 0 19.2413 62.2507 -56.0682 + 83 74.1661 944 4 1 8.99074 91.5002 -84.45 + 83 80.0499 943 4 1 8.84981 91.6322 -84.5405 + 83 95.5093 942 4 1 8.64985 91.8452 -84.6871 + 83 177.983 1366 4 0 7.40988 93.4249 -85.85 + 83 71.7261 1367 4 0 7.31941 93.5503 -85.9477 + 83 68.2013 1368 4 0 7.18276 93.75 -86.1055 + 83 14.884 1369 4 0 7.0477 93.9505 -86.2411 + 83 141.528 803 3 1 -19.2787 135.608 -114.45 + 83 130.669 1579 3 0 -19.4178 135.987 -115.85 + 83 103.858 793 2 1 -21.2814 143.634 -144.45 + 83 150.68 1619 2 0 -21.7802 144.039 -145.85 + 83 10.0478 1620 2 0 -21.9051 144.15 -146.209 + 83 76.647 747 1 1 -30.5321 150.164 -174.45 + 83 74.3503 746 1 1 -30.65 150.088 -174.663 + 83 83.3645 1647 1 0 -31.4234 149.661 -175.85 + 83 33.2985 1646 1 0 -31.5994 149.55 -176.146 + 83 109.482 675 0 1 -44.9594 135.133 -204.45 + 83 62.9762 1574 0 0 -44.9125 135.125 -205.85 + 83 42.8495 1575 0 0 -44.8883 135.15 -206.07 + 83 3.29562 1204 5 0 19.4895 60.8537 -55.85 + 83 318.019 1203 5 0 19.4895 60.8499 -55.8622 + 83 88.1626 986 4 1 17.2715 52.21 -84.45 + 83 75.637 985 4 1 17.25 52.2158 -84.4602 + 83 76.7767 984 4 1 17.05 52.2813 -84.5638 + 83 36.8517 983 4 1 16.85 52.3823 -84.7322 + 83 166.362 1162 4 0 15.9603 52.5335 -85.85 + 83 54.9107 754 4 0 -45.9172 -29.1007 -86.25 + 83 55.375 753 4 0 -45.9727 -29.25 -86.2019 + 83 68.0024 752 4 0 -46.0618 -29.45 -86.123 + 83 56.823 751 4 0 -46.1454 -29.6507 -86.0288 + 83 13.2381 750 4 0 -46.1991 -29.8508 -85.8928 + 83 125.169 668 4 1 -46.3009 -30.8842 -84.85 + 83 99.8361 1206 2 0 19.5129 61.4222 -145.85 + 83 115.466 997 0 1 19.5397 61.1095 -204.45 + 83 250.481 1205 0 0 19.5347 61.0957 -205.85 + 83 26.4481 1159 2 1 51.85 43.2144 -144.653 + 83 246.416 998 4 1 19.6502 61.0662 -84.5261 + 83 154.647 995 3 1 19.0639 62.1815 -114.45 + 83 116.835 1210 3 0 19.0235 62.1728 -115.85 + 83 139.529 991 2 1 18.4043 61.9669 -144.45 + 83 134.717 1209 2 0 18.405 61.9329 -145.85 + 83 94.112 992 1 1 18.4987 61.1816 -174.45 + 83 126.529 991 0 1 18.3597 61.0473 -204.45 + 83 53.688 1207 6 0 19.6268 61.5982 -25.85 + 83 55.8381 1208 6 0 19.6376 61.65 -26.0421 + 83 151.895 1017 5 1 23.5085 73.0438 -54.4507 + 83 94.3774 1266 5 0 23.6926 73.349 -55.8501 + 83 28.2785 1267 5 0 23.725 73.45 -56.1336 + 83 108.444 1020 4 1 24.2144 81.8224 -84.45 + 83 60.1529 1311 4 0 24.2039 82.3567 -85.8504 + 83 61.2657 1312 4 0 24.1849 82.45 -86.0679 + 83 34.0393 984 3 1 16.8721 94.2333 -114.45 + 83 101 983 3 1 16.85 94.2733 -114.546 + 83 110.295 1373 3 0 16.7002 94.8006 -115.85 + 83 18.9255 1374 3 0 16.6799 94.95 -116.187 + 83 54.0107 984 2 1 16.9868 109.822 -144.45 + 83 109.873 985 2 1 17.0501 109.927 -144.547 + 83 25.8062 986 2 1 17.25 110.192 -144.785 + 83 65.3741 1455 2 0 18.3097 111.329 -145.85 + 83 193.302 1456 2 0 18.3576 111.35 -145.881 + 83 5.08031 1013 5 1 22.655 58.5322 -54.45 + 83 123.203 1012 5 1 22.65 58.5372 -54.4704 + 83 87.3744 1193 5 0 22.3493 58.8096 -55.85 + 83 62.6887 1194 5 0 22.304 58.85 -56.0435 + 83 89.5086 987 4 1 17.45 66.2529 -84.6444 + 83 7.8494 988 4 1 17.6504 66.3923 -84.8319 + 83 160.574 1235 4 0 18.7787 67.0682 -85.8502 + 83 43.6463 1236 4 0 19.1064 67.25 -86.1522 + 83 11.7912 1180 3 1 56.2233 85.9731 -114.45 + 83 155.256 1181 3 1 56.25 85.9521 -114.47 + 83 88.2479 1182 3 1 56.4503 85.7949 -114.636 + 83 14.0536 1183 3 1 56.65 85.6388 -114.819 + 83 122.374 1323 3 0 57.7524 84.7745 -115.85 + 83 92.2834 1322 3 0 57.9116 84.6499 -116.008 + 83 53.7506 1329 2 1 85.8949 67.0217 -144.45 + 83 70.5328 1330 2 1 86.05 67.0118 -144.596 + 83 34.6407 1331 2 1 86.2501 66.9692 -144.77 + 83 38.0683 1232 2 0 87.5703 66.5008 -145.85 + 83 138.992 1231 2 0 87.7144 66.45 -145.969 + 83 213.574 1184 2 0 160.112 56.9703 -146.25 + 83 1.73282 1185 2 0 160.529 57.05 -145.856 + 83 10.107 1704 2 1 161.132 57.2447 -144.85 + 83 184.251 1705 2 1 161.15 57.2499 -144.822 + 83 169.646 1706 2 1 161.35 57.2553 -144.458 + 83 118.101 955 3 1 11.1474 84.3354 -114.45 + 83 59.7043 998 9 1 19.6501 61.0949 65.4438 + 83 9.85363 996 10 1 19.4499 61.0215 95.1918 + 83 67.5035 1206 10 0 19.2644 61.3589 94.15 + 83 45.0809 1207 10 0 19.2519 61.45 93.889 + 83 107.144 1223 10 0 42.3817 64.7258 93.7501 + 83 83.6979 1222 10 0 42.5522 64.65 93.9581 + 83 45.9842 1117 10 1 43.5907 62.6769 95.15 + 83 143.417 1118 10 1 43.65 62.558 95.2165 + 83 17.9436 1119 10 1 43.85 62.1058 95.4806 +Number of digits in this event: 49 +Using G4ParticleGun... +Particle energy: 9.87752 LIN Particle: e- Event: 84 -Number of tracker hits in this event: 64 - 84 123.947 562 9 1 -67.4696 112.982 65.55 - 84 133.315 1464 9 0 -67.4696 112.983 64.15 - 84 125.441 562 8 1 -67.4651 112.99 35.55 - 84 156.245 1464 8 0 -67.4616 112.99 34.15 - 84 144.795 563 7 1 -67.385 112.996 5.55 - 84 137.531 1464 7 0 -67.3794 112.996 4.15 - 84 117.342 563 6 1 -67.2609 112.988 -24.45 - 84 140.531 1464 6 0 -67.2566 112.989 -25.85 - 84 109.337 564 5 1 -67.1746 113.005 -54.45 - 84 252.936 1464 5 0 -67.1725 113.005 -55.85 - 84 128.854 564 4 1 -67.1244 113.008 -84.45 - 84 123.521 1464 4 0 -67.1535 113.013 -85.85 - 84 117.011 562 3 1 -67.5362 112.998 -114.45 - 84 118.917 1464 3 0 -67.557 113.02 -115.85 - 84 124.317 561 2 1 -67.7595 113.322 -144.45 - 84 134.94 1465 2 0 -67.7215 113.341 -145.85 - 84 235.557 565 1 1 -66.9205 113.628 -174.45 - 84 107.925 1467 1 0 -66.989 113.633 -175.85 - 84 129.372 559 0 1 -68.2193 113.726 -204.45 - 84 101.575 1467 0 0 -68.2881 113.721 -205.85 - 84 26.8276 566 1 1 -66.85 113.868 -174.777 - 84 87.7524 1472 1 0 -66.6867 114.627 -175.85 - 84 91.8569 1473 1 0 -66.663 114.75 -176.13 - 84 56.3511 546 0 1 -70.6558 127.751 -204.45 - 84 258.067 547 0 1 -70.6499 127.597 -204.488 - 84 234.011 565 0 1 -66.8762 112.969 -204.45 - 84 288.368 1464 0 0 -66.8725 112.969 -205.85 - 84 0.567763 1068 5 0 -25.5247 33.85 -56.1098 - 84 130.231 1529 1 0 -69.6292 125.966 -176.25 - 84 219.934 550 1 1 -69.9591 126.401 -174.85 - 84 281.084 563 5 1 -67.4218 112.991 -54.45 - 84 119.258 572 4 1 -65.6016 112.54 -84.45 - 84 124.803 1461 4 0 -65.4501 112.513 -85.851 - 84 140.341 589 3 1 -62.1369 112.549 -114.45 - 84 132.251 1462 3 0 -62.014 112.647 -115.85 - 84 130.748 600 2 1 -59.9958 114.94 -144.45 - 84 127.167 1474 2 0 -59.9844 115.027 -145.85 - 84 171.985 599 1 1 -60.0619 117.018 -174.45 - 84 96.4282 1485 1 0 -60.1218 117.303 -175.85 - 84 60.1371 1486 1 0 -60.1309 117.35 -176.064 - 84 104.219 593 0 1 -61.316 123.521 -204.45 - 84 136.7 1517 0 0 -61.413 123.697 -205.85 - 84 270.466 1442 1 0 -82.144 108.653 -176.25 - 84 111.632 493 1 1 -81.4286 105.387 -174.85 - 84 99.7346 494 1 1 -81.25 105.323 -174.779 - 84 181.648 495 1 1 -81.05 105.354 -174.747 - 84 110.168 1462 5 0 -67.2364 112.728 -55.8505 - 84 221.803 588 4 1 -62.3781 105.589 -84.4503 - 84 113.955 1425 4 0 -62.4248 105.275 -85.85 - 84 115.571 598 3 1 -60.439 98.3802 -114.45 - 84 226.447 1392 3 0 -60.4466 98.62 -115.851 - 84 290.124 608 2 1 -58.4188 105.24 -144.45 - 84 126.616 1422 2 0 -57.9367 104.744 -145.85 - 84 7.27943 663 1 1 -47.4441 87.9315 -174.45 - 84 126.177 662 1 1 -47.45 87.9397 -174.472 - 84 51.1058 1342 1 0 -47.8346 88.5768 -175.85 - 84 80.789 1343 1 0 -47.8762 88.6501 -176.022 - 84 186.392 639 0 1 -52.1916 99.8135 -204.45 - 84 89.7642 1392 0 0 -52.6275 98.718 -205.85 - 84 158.616 1391 0 0 -52.6784 98.55 -206.07 - 84 246.206 607 2 1 -58.45 105.283 -144.5 - 84 6.38787 606 2 1 -58.65 105.555 -144.831 - 84 274.893 1426 2 0 -58.9662 105.479 -145.85 - 84 7.04464 1689 11 0 -144.211 157.95 123.792 -Number of digits in this event: 40 +Number of tracker hits in this event: 61 + 84 145.443 897 9 1 -0.597631 -130.249 65.55 + 84 111.73 249 9 0 -0.596827 -130.25 64.15 + 84 195.519 897 8 1 -0.585006 -130.262 35.55 + 84 117.816 249 8 0 -0.582628 -130.264 34.15 + 84 106.092 897 7 1 -0.553414 -130.327 5.55 + 84 139.321 249 7 0 -0.547791 -130.336 4.15 + 84 128.852 898 6 1 -0.407217 -130.535 -24.45 + 84 123.163 247 6 0 -0.391888 -130.555 -25.85 + 84 73.3977 899 5 1 -0.0596568 -130.887 -54.4504 + 84 191.129 907 4 1 1.56102 -127.64 -84.4503 + 84 190.038 266 4 0 1.46042 -126.801 -85.8501 + 84 135.247 267 4 0 1.45519 -126.75 -85.9331 + 84 7.55114 268 4 0 1.44585 -126.55 -86.2169 + 84 15.1407 900 3 1 0.219187 -105.062 -114.45 + 84 90.5258 901 3 1 0.25 -105.041 -114.483 + 84 57.255 902 3 1 0.450151 -104.928 -114.694 + 84 14.9952 378 3 0 1.51939 -104.367 -115.85 + 84 203.609 379 3 0 1.55268 -104.35 -115.885 + 84 58.329 1069 2 1 33.9025 -88.6627 -144.45 + 84 53.6078 1070 2 1 34.05 -88.5893 -144.509 + 84 81.6011 1071 2 1 34.25 -88.4992 -144.578 + 84 64.3833 1072 2 1 34.45 -88.4027 -144.649 + 84 70.0196 1073 2 1 34.65 -88.2961 -144.728 + 84 34.0722 1074 2 1 34.8501 -88.1858 -144.812 + 84 235.268 465 2 0 37.0567 -86.9568 -145.85 + 84 164.2 466 2 0 37.2658 -86.85 -145.942 + 84 142.831 467 2 0 37.6006 -86.65 -146.079 + 84 8.49948 468 2 0 37.9489 -86.4498 -146.233 + 84 28.288 1424 1 1 105.114 -46.6414 -174.45 + 84 63.7852 1425 1 1 105.15 -46.6097 -174.567 + 84 67.3981 668 1 0 105.496 -46.2985 -175.85 + 84 90.9717 669 1 0 105.561 -46.25 -176.027 + 84 6.17693 1504 0 1 121.125 -37.2899 -204.45 + 84 79.8411 1505 0 1 121.15 -37.2709 -204.467 + 84 130.258 1506 0 1 121.35 -37.1203 -204.605 + 84 9.95129 1507 0 1 121.55 -36.8932 -204.831 + 84 117.44 720 0 0 122.138 -36.021 -205.85 + 84 31.5204 721 0 0 122.247 -35.85 -206.158 + 84 79.0799 877 0 0 144.352 -4.63644 -206.25 + 84 74.6858 878 0 0 144.534 -4.45 -206.113 + 84 127.955 879 0 0 144.711 -4.25 -205.978 + 84 59.9169 880 0 0 144.872 -4.05 -205.931 + 84 68.0237 881 0 0 145.035 -3.85 -205.888 + 84 247.552 882 0 0 145.19 -3.65 -205.867 + 84 73.9967 883 0 0 145.416 -3.45 -205.893 + 84 82.6512 884 0 0 145.631 -3.25 -205.996 + 84 30.4931 885 0 0 145.752 -3.05 -206.188 + 84 33.0733 1511 2 0 179.788 122.433 -146.25 + 84 111.412 1512 2 0 179.734 122.55 -146.226 + 84 249.113 897 2 1 -0.48796 -130.378 -144.45 + 84 258.871 248 2 0 -0.485872 -130.373 -145.85 + 84 662.944 897 1 1 -0.466631 -130.275 -174.45 + 84 420.629 249 1 0 -0.464402 -130.27 -175.85 + 84 370.85 898 0 1 -0.427604 -130.207 -204.45 + 84 235.32 249 0 0 -0.4259 -130.194 -205.85 + 84 158.94 897 0 1 -0.450133 -130.23 -204.818 + 84 117.183 903 0 1 0.650713 -129.183 -204.45 + 84 68.4601 255 0 0 0.805581 -128.989 -205.85 + 84 35.9383 256 0 0 0.841004 -128.95 -206.147 + 84 119.514 247 0 0 -0.250338 -130.595 -205.85 + 84 119.505 248 1 0 -0.483566 -130.364 -175.85 +Number of digits in this event: 25 Using G4ParticleGun... -Particle energy: 6.55691 LIN +Particle energy: 3.80804 LIN Particle: e- Event: 85 -Number of tracker hits in this event: 44 - 85 180.277 1515 9 0 55.6071 123.296 64.15 - 85 135.767 1177 8 1 55.6134 123.297 35.55 - 85 122.676 1515 8 0 55.6132 123.299 34.15 - 85 139.861 1177 7 1 55.6072 123.326 5.55 - 85 118.91 1515 7 0 55.608 123.329 4.15 - 85 335.975 1177 6 1 55.6214 123.384 -24.45 - 85 110.955 1516 6 0 55.623 123.387 -25.85 - 85 195.837 1178 5 1 55.658 123.44 -54.45 - 85 122.652 1516 5 0 55.6602 123.443 -55.85 - 85 448.142 1178 4 1 55.703 123.485 -84.45 - 85 370.085 1516 4 0 55.7062 123.487 -85.85 - 85 221.492 1178 3 1 55.7799 123.522 -114.45 - 85 449.307 1516 3 0 55.7858 123.524 -115.85 - 85 397.915 1179 2 1 55.9017 123.575 -144.45 - 85 915.942 1517 2 0 55.9076 123.578 -145.85 - 85 253.126 1179 1 1 56.0296 123.622 -174.45 - 85 571.192 1517 1 0 56.0355 123.627 -175.85 - 85 261.161 1180 0 1 56.1527 123.73 -204.45 - 85 243.908 1517 0 0 56.157 123.733 -205.85 - 85 128.878 1180 1 1 56.0537 123.663 -174.45 - 85 125.888 1181 0 1 56.3963 123.72 -204.45 - 85 19.8012 1789 4 0 -174.862 178.01 -86.25 - 85 119.974 1790 4 0 -174.988 178.15 -86.0168 - 85 206.309 1791 4 0 -175.143 178.35 -86.0955 - 85 111.955 1083 2 0 122.99 36.8049 -146.25 - 85 120.778 1516 0 0 56.3348 123.485 -205.85 - 85 84.9361 1178 2 1 55.6512 123.207 -144.45 - 85 48.4318 1177 2 1 55.65 123.207 -144.738 - 85 105.77 1515 2 0 55.6445 123.203 -145.85 - 85 107.036 1177 1 1 55.49 123.111 -174.45 - 85 115.979 1514 1 0 55.4657 123.099 -175.85 - 85 110.281 1174 0 1 54.9491 122.82 -204.45 - 85 105.061 1513 0 0 54.9229 122.804 -205.85 - 85 90.4185 1582 3 0 60.2791 136.686 -116.25 - 85 243.818 1583 3 0 60.336 136.75 -116.11 - 85 100.23 1179 3 1 55.9267 123.499 -114.45 - 85 197.927 1180 2 1 56.0717 123.586 -144.45 - 85 105.016 1181 1 1 56.436 123.234 -174.45 - 85 115.64 1515 1 0 56.4457 123.223 -175.85 - 85 141.035 1183 0 1 56.6584 122.983 -204.45 - 85 107.921 1514 0 0 56.6665 122.96 -205.85 - 85 281.263 1178 0 1 55.6975 123.781 -204.45 - 85 254.89 1518 0 0 55.7005 123.784 -205.85 - 85 118.17 1514 6 0 55.1507 123.118 -25.8502 -Number of digits in this event: 29 +Number of tracker hits in this event: 138 + 85 243.098 667 11 1 -46.4575 20.793 125.55 + 85 140.454 1003 11 0 -46.4573 20.793 124.15 + 85 106.817 668 10 1 -46.4447 20.7886 95.55 + 85 137.758 1003 10 0 -46.4438 20.7887 94.15 + 85 107.371 668 9 1 -46.4223 20.797 65.55 + 85 99.3859 1003 9 0 -46.4224 20.7982 64.15 + 85 178.231 668 8 1 -46.4245 20.8179 35.55 + 85 141.303 1003 8 0 -46.4316 20.8155 34.15 + 85 133.251 667 7 1 -46.4639 20.6993 5.55 + 85 115.592 1003 7 0 -46.4754 20.6959 4.15 + 85 149.037 666 6 1 -46.781 20.5912 -24.45 + 85 121.418 1002 6 0 -46.8028 20.5852 -25.85 + 85 122.718 663 5 1 -47.2942 20.4995 -54.45 + 85 148.022 1002 5 0 -47.2922 20.4811 -55.85 + 85 118.353 663 4 1 -47.2986 20.1353 -84.45 + 85 183.333 1000 4 0 -47.2948 20.1125 -85.85 + 85 147.021 664 3 1 -47.1505 19.6576 -114.45 + 85 124.49 998 3 0 -47.1355 19.6577 -115.85 + 85 135.592 665 2 1 -46.8769 19.708 -144.45 + 85 271.46 998 2 0 -46.8644 19.7167 -145.85 + 85 152.818 667 1 1 -46.5844 19.8982 -174.45 + 85 178.684 999 1 0 -46.6705 19.919 -175.85 + 85 117.457 657 0 1 -48.4504 20.1767 -204.45 + 85 126.081 1000 0 0 -48.5489 20.1851 -205.85 + 85 91.2694 757 0 1 -28.6061 26.7087 -204.85 + 85 111.127 1033 0 0 -28.0058 26.7143 -205.85 + 85 102.032 1146 5 0 53.6512 49.25 -56.1221 + 85 529.485 668 4 1 -46.3265 19.603 -84.4501 + 85 206.628 996 4 0 -46.6032 19.439 -85.85 + 85 109.674 631 3 1 -53.7156 15.1736 -114.45 + 85 133.073 973 3 0 -53.7229 14.8458 -115.85 + 85 58.9632 625 2 1 -54.9879 8.62819 -144.45 + 85 72.0496 624 2 1 -55.0501 8.53756 -144.655 + 85 61.8353 939 2 0 -55.3767 7.9559 -145.85 + 85 104.561 938 2 0 -55.4312 7.84996 -146.058 + 85 179.011 594 1 1 -61.1029 -7.30566 -174.45 + 85 88.5379 856 1 0 -61.1397 -8.65204 -175.85 + 85 89.1007 855 1 0 -61.1548 -8.8502 -176.052 + 85 8.15358 577 0 1 -64.6371 -36.2564 -204.45 + 85 121.471 576 0 1 -64.65 -36.2757 -204.488 + 85 15.5256 716 0 0 -64.9691 -36.8317 -205.85 + 85 102.979 715 0 0 -64.9799 -36.85 -205.896 + 85 51.2217 984 4 0 -46.4755 17.0245 -85.85 + 85 63.0187 983 4 0 -46.4796 16.85 -85.9421 + 85 57.4801 982 4 0 -46.5061 16.65 -86.0357 + 85 86.2696 981 4 0 -46.5268 16.45 -86.129 + 85 5.88702 980 4 0 -46.5525 16.2493 -86.236 + 85 152.638 610 3 1 -57.9339 -31.9153 -114.45 + 85 15.839 611 3 1 -57.8499 -32.2571 -114.799 + 85 21.2781 734 3 0 -57.7292 -33.2116 -115.85 + 85 94.4612 733 3 0 -57.7235 -33.25 -115.894 + 85 37.1232 732 3 0 -57.6926 -33.4501 -116.147 + 85 261.725 682 3 0 -14.7352 -43.5905 -116.25 + 85 206.412 683 3 0 -14.0456 -43.45 -116.078 + 85 159.293 684 3 0 -13.4941 -43.25 -116.046 + 85 28.9425 685 3 0 -12.9133 -43.05 -115.877 + 85 55.2778 853 3 1 -9.4157 -41.5761 -114.85 + 85 66.8135 854 3 1 -9.25 -41.5061 -114.797 + 85 59.0407 855 3 1 -9.05 -41.4878 -114.694 + 85 68.0227 856 3 1 -8.85 -41.509 -114.579 + 85 100.215 857 3 1 -8.65 -41.4907 -114.487 + 85 99.3528 858 3 1 -8.44976 -41.261 -114.629 + 85 6.70342 859 3 1 -8.25 -41.0036 -114.83 + 85 757.462 697 3 0 -7.2656 -40.5849 -115.85 + 85 119.224 696 3 0 -6.40314 -40.65 -115.93 + 85 200.654 872 3 1 -5.61211 -40.7288 -114.85 + 85 98.4845 1004 8 0 -46.4948 20.8501 34.0625 + 85 44.6773 569 8 0 -56.9928 -66.1091 33.75 + 85 206.21 568 8 0 -56.9095 -66.2504 33.8002 + 85 78.8049 567 8 0 -56.3885 -66.4501 33.8126 + 85 33.9634 566 8 0 -56.3537 -66.65 33.8332 + 85 253.857 718 8 0 -6.21018 -36.3703 33.75 + 85 289.228 667 6 1 -46.5778 20.7876 -24.45 + 85 352.41 1003 6 0 -46.5821 20.7909 -25.85 + 85 113.804 666 5 1 -46.6648 20.8509 -54.45 + 85 115.159 1003 5 0 -46.6892 20.8341 -55.85 + 85 126.885 664 4 1 -47.2274 20.5165 -84.45 + 85 148.514 1002 4 0 -47.2484 20.5021 -85.85 + 85 109.432 662 3 1 -47.5982 20.1559 -114.45 + 85 110.971 1000 3 0 -47.6198 20.1401 -115.85 + 85 114.739 659 2 1 -48.0955 19.8036 -144.45 + 85 152.667 657 1 1 -48.5619 19.4646 -174.45 + 85 278.212 996 1 0 -48.5797 19.4486 -175.85 + 85 135.214 655 0 1 -48.9255 19.1603 -204.45 + 85 128.73 995 0 0 -48.9345 19.1417 -205.85 + 85 237.514 335 4 1 -112.95 35.5025 -84.7872 + 85 109.489 59 2 1 -168.215 -150.318 -144.85 + 85 59.0609 60 2 1 -168.15 -150.475 -144.776 + 85 26.6779 956 4 0 -26.5602 11.2759 -86.2498 + 85 53.3702 955 4 0 -26.5284 11.2494 -86.1991 + 85 51.0992 689 4 0 -0.342297 -42.0619 -86.2498 + 85 90.5236 690 4 0 -0.310196 -42.05 -86.2318 + 85 139.149 667 5 1 -46.562 20.8866 -54.45 + 85 117.266 1004 5 0 -46.5515 20.8996 -55.85 + 85 101.592 1005 4 0 -46.3266 21.1814 -85.85 + 85 328.91 668 3 1 -46.2623 21.5826 -114.45 + 85 112.106 1007 3 0 -46.2677 21.6011 -115.85 + 85 175.061 668 2 1 -46.4199 21.9284 -144.45 + 85 223.804 1009 2 0 -46.4112 21.9069 -145.85 + 85 344.145 669 1 1 -46.1344 21.4545 -174.45 + 85 99.4754 1006 1 0 -46.0885 21.4448 -175.85 + 85 120.596 675 0 1 -44.9441 20.9897 -204.45 + 85 124.213 1004 0 0 -44.8374 20.9792 -205.85 + 85 23.9642 575 0 0 -67.7853 -64.9653 -206.25 + 85 81.1805 574 0 0 -67.7805 -65.0501 -206.202 + 85 75.0028 573 0 0 -67.7663 -65.25 -206.102 + 85 53.4252 572 0 0 -67.7504 -65.45 -205.986 + 85 296.171 562 0 1 -67.6422 -66.9596 -204.85 + 85 142.653 587 1 0 -76.8128 -62.5231 -176.25 + 85 151.077 588 1 0 -76.9678 -62.45 -175.927 + 85 123.259 513 1 1 -77.2995 -62.2141 -174.85 + 85 113.084 512 1 1 -77.45 -62.1241 -174.477 + 85 167.838 511 1 1 -77.6571 -62.1514 -174.45 + 85 148.155 582 1 0 -78.2118 -63.4793 -175.85 + 85 39.0569 581 1 0 -78.1765 -63.6502 -176.161 + 85 115.976 438 0 1 -92.3518 -53.6612 -204.45 + 85 205.673 439 0 1 -92.35 -53.699 -204.604 + 85 133.588 694 0 0 -63.9082 -41.1282 -206.25 + 85 167.963 581 0 1 -63.7934 -41.634 -204.85 + 85 116.755 582 0 1 -63.65 -41.6125 -204.625 + 85 522.681 687 0 0 -63.2628 -42.4894 -205.85 + 85 135.216 669 3 1 -46.25 21.575 -114.598 + 85 428.991 670 3 1 -46.0499 21.5921 -114.606 + 85 28.1354 945 13 0 -170.56 9.05391 183.75 + 85 130.223 944 13 0 -170.685 9.05 184.135 + 85 196.269 1005 3 0 -46.3223 21.1798 -115.85 + 85 101.275 670 2 1 -45.9236 20.4997 -144.45 + 85 127.133 1001 2 0 -45.9485 20.4449 -145.85 + 85 108.534 668 1 1 -46.4005 19.3939 -174.45 + 85 54.2056 667 0 1 -46.4537 18.4603 -204.45 + 85 51.5674 668 0 1 -46.45 18.4526 -204.653 + 85 104.261 991 0 0 -46.4268 18.4147 -205.85 + 85 102.558 1006 3 0 -46.3547 21.2609 -115.85 + 85 135.102 667 2 1 -46.5815 21.8912 -144.45 + 85 178.227 665 1 1 -46.9732 21.8228 -174.45 + 85 150.348 1008 1 0 -46.9685 21.8333 -175.85 + 85 110.387 664 0 1 -47.1225 22.0053 -204.45 + 85 204.715 1009 0 0 -47.1721 21.9701 -205.85 +Number of digits in this event: 70 Using G4ParticleGun... -Particle energy: 3.52934 LIN +Particle energy: 1.30071 LIN Particle: e- Event: 86 -Number of tracker hits in this event: 156 - 86 132.549 915 11 1 3.0645 22.3369 125.55 - 86 125.488 1011 11 0 3.0658 22.3367 124.15 - 86 126.109 915 10 1 3.08379 22.3253 95.55 - 86 384.374 1011 10 0 3.08562 22.3268 94.15 - 86 266.015 915 9 1 3.11014 22.3417 65.55 - 86 233.76 1011 9 0 3.11123 22.3449 64.15 - 86 375.099 915 8 1 3.136 22.415 35.55 - 86 478.692 1011 8 0 3.13837 22.4199 34.15 - 86 227.835 915 7 1 3.19192 22.5151 5.55 - 86 373.951 1012 7 0 3.19918 22.5279 4.15 - 86 518.311 916 6 1 3.36749 22.7719 -24.45 - 86 124.163 1013 6 0 3.37528 22.7862 -25.85 - 86 164.453 917 5 1 3.53329 23.0871 -54.45 - 86 140.654 1015 5 0 3.53878 23.1023 -55.85 - 86 263.789 918 4 1 3.66146 23.4347 -84.45 - 86 125.417 1016 4 0 3.66836 23.4462 -85.85 - 86 109.656 918 3 1 3.81403 23.6678 -114.45 - 86 115.196 1018 3 0 3.82267 23.6748 -115.85 - 86 247.816 919 2 1 3.96641 23.8319 -144.45 - 86 125.282 1018 2 0 3.95016 23.8063 -145.85 - 86 127.594 917 1 1 3.55939 23.2815 -174.45 - 86 103.905 1016 1 0 3.54575 23.2678 -175.85 - 86 441.773 916 0 1 3.26387 23.014 -204.45 - 86 295.739 1014 0 0 3.23521 22.9868 -205.85 - 86 417.02 920 1 1 4.22921 24.0686 -174.45 - 86 231.444 1020 1 0 4.25394 24.1063 -175.85 - 86 187.362 923 0 1 4.81953 24.7493 -204.45 - 86 117.454 1023 0 0 4.83943 24.8121 -205.85 - 86 464.274 922 0 1 4.52936 24.5738 -204.45 - 86 145.488 1022 0 0 4.53934 24.5792 -205.85 - 86 217.134 981 0 1 16.25 38.7403 -204.838 - 86 36.4712 1085 0 0 17.0341 37.111 -205.85 - 86 67.2839 990 0 1 18.1905 36.1816 -204.85 - 86 71.3509 1022 1 0 4.15189 24.6286 -175.85 - 86 153.673 1149 1 0 -13.9084 50.0236 -176.25 - 86 209.153 1013 0 0 3.28727 22.8461 -205.85 - 86 69.0387 931 4 0 -7.44438 6.41993 -86.25 - 86 144.642 916 7 1 3.33446 22.5289 5.55 - 86 115.357 1014 6 0 3.46001 22.9957 -25.85 - 86 168.533 920 5 1 4.19286 23.9423 -54.45 - 86 135.985 1019 5 0 4.23374 23.9865 -55.85 - 86 146.067 925 4 1 5.07683 24.9253 -84.45 - 86 120.472 1024 4 0 5.12397 24.9854 -85.85 - 86 137.004 930 3 1 6.1396 26.131 -114.45 - 86 120.855 1030 3 0 6.16841 26.1888 -115.85 - 86 120.34 933 2 1 6.78098 27.3304 -144.45 - 86 183.002 1036 2 0 6.80963 27.3844 -145.85 - 86 123.253 935 1 1 7.12358 28.7494 -174.45 - 86 100.826 1043 1 0 7.13034 28.816 -175.85 - 86 109.424 936 0 1 7.26046 30.1437 -204.45 - 86 126.456 1050 0 0 7.2694 30.2331 -205.85 - 86 32.2867 1051 0 0 7.27099 30.25 -206.115 - 86 106.653 934 1 1 7.02879 28.808 -174.45 - 86 11.0456 933 1 1 6.85 28.735 -174.811 - 86 105.424 1044 1 0 6.64771 28.9316 -175.85 - 86 159.131 1045 1 0 6.5786 29.05 -176.176 - 86 47.3397 931 2 1 6.44066 28.3278 -144.85 - 86 106.314 932 2 1 6.45 28.351 -144.824 - 86 180.332 924 4 1 5.04984 24.9219 -84.7021 - 86 74.4464 921 5 1 4.25 23.9364 -54.4858 - 86 137.688 922 5 1 4.45021 23.8099 -54.6412 - 86 153.643 923 5 1 4.65 23.6979 -54.7781 - 86 201.83 1011 5 0 5.91592 22.4346 -55.85 - 86 83.9804 1010 5 0 5.99898 22.25 -55.9956 - 86 113.426 1009 5 0 6.19865 22.0497 -56.0506 - 86 97.8792 1008 5 0 6.55435 21.85 -55.9962 - 86 182.915 1007 5 0 6.78607 21.65 -55.9303 - 86 370.245 1006 5 0 6.55678 21.45 -56.1486 - 86 180.068 915 4 1 3.07998 23.2146 -84.4501 - 86 104.389 1011 7 0 3.2538 22.4469 4.15 - 86 116.315 1011 6 0 3.38619 22.3663 -25.85 - 86 94.3682 918 5 1 3.69073 22.3177 -54.45 - 86 103.171 1011 4 0 3.84226 22.4267 -85.85 - 86 134.052 919 3 1 3.96667 22.4056 -114.45 - 86 108.042 1011 3 0 3.97086 22.4033 -115.85 - 86 115.312 1011 2 0 4.01533 22.3571 -145.85 - 86 205.708 919 1 1 4.00409 22.429 -174.45 - 86 94.6937 1011 1 0 4.01177 22.4376 -175.85 - 86 186.223 920 0 1 4.11738 22.5941 -204.45 - 86 155.714 1012 0 0 4.10673 22.5986 -205.85 - 86 121.907 515 4 0 127.524 -76.9054 -86.25 - 86 14.2213 514 4 0 127.569 -77.05 -86.0549 - 86 163.685 921 0 1 4.25 21.7953 -204.46 - 86 101.635 924 0 1 4.85 21.1953 -204.755 - 86 25.1912 925 0 1 5.05008 21.0045 -204.83 - 86 77.4587 992 0 0 7.26996 18.5154 -205.85 - 86 80.4982 991 0 0 7.33204 18.45 -205.879 - 86 79.9455 990 0 0 7.54023 18.25 -205.971 - 86 199.587 989 0 0 7.74546 18.05 -206.046 - 86 74.6 988 0 0 7.95734 17.85 -206.121 - 86 63.924 987 0 0 8.16737 17.65 -206.195 - 86 215.54 933 4 0 19.3073 6.81454 -86.25 - 86 12.8187 934 4 0 19.3083 6.85003 -86.0796 - 86 60.7279 683 1 0 -116.531 -43.3049 -176.25 - 86 70.1867 682 1 0 -116.727 -43.45 -176.174 - 86 75.2294 681 1 0 -116.952 -43.6503 -176.074 - 86 70.3526 680 1 0 -117.148 -43.85 -175.997 - 86 79.4762 679 1 0 -117.345 -44.0501 -175.94 - 86 19.3092 678 1 0 -117.555 -44.25 -175.864 - 86 72.6767 302 1 1 -119.583 -46.2663 -174.85 - 86 129.323 301 1 1 -119.75 -46.411 -174.771 - 86 55.2079 300 1 1 -119.951 -46.5578 -174.698 - 86 76.2594 299 1 1 -120.15 -46.6876 -174.621 - 86 42.0586 298 1 1 -120.35 -46.7949 -174.536 - 86 156.054 715 2 0 -136.943 -36.9062 -146.25 - 86 72.7269 211 2 1 -137.824 -37.108 -144.849 - 86 70.5813 210 2 1 -137.951 -37.1412 -144.666 - 86 134.738 209 2 1 -138.15 -37.197 -144.514 - 86 26.8875 208 2 1 -138.35 -37.3559 -144.779 - 86 18.5432 712 2 0 -138.902 -37.4569 -145.85 - 86 89.878 713 2 0 -138.928 -37.45 -145.919 - 86 292.253 920 2 1 4.12721 22.6441 -144.45 - 86 124.101 1013 2 0 4.43304 22.7492 -145.85 - 86 52.0744 954 1 1 10.9109 28.925 -174.45 - 86 95.9873 953 1 1 10.8499 28.9789 -174.615 - 86 249.67 889 0 1 -2.21614 31.4069 -204.45 - 86 75.8291 890 0 1 -2.04922 31.0954 -204.622 - 86 116.253 1049 0 0 -1.58786 30.05 -205.978 - 86 30.7065 1048 0 0 -1.3936 29.85 -206.191 - 86 18.166 1007 2 0 3.58219 21.4807 -145.85 - 86 153.05 1006 2 0 3.56485 21.45 -145.885 - 86 77.0973 1005 2 0 3.45327 21.25 -146.093 - 86 48.3343 824 1 1 -15.105 -11.0197 -174.45 - 86 64.34 823 1 1 -15.25 -11.01 -174.51 - 86 58.7869 822 1 1 -15.4501 -10.9898 -174.586 - 86 191.298 821 1 1 -15.65 -10.972 -174.659 - 86 82.0481 820 1 1 -15.85 -10.9574 -174.711 - 86 63.1829 819 1 1 -16.0501 -10.9393 -174.75 - 86 49.7849 818 1 1 -16.25 -10.9242 -174.79 - 86 71.5379 817 1 1 -16.45 -10.926 -174.815 - 86 46.2928 816 1 1 -16.65 -10.9337 -174.836 - 86 465.255 841 1 0 -23.9111 -11.6585 -175.85 - 86 110.267 840 1 0 -25.1772 -11.85 -176.131 - 86 159.886 1006 0 0 4.37124 21.2727 -205.85 - 86 109.222 906 9 1 1.3258 23.4254 65.55 - 86 104.5 1018 9 0 1.24762 23.6876 64.15 - 86 2.53255 1273 9 0 46.1085 74.8405 63.75 - 86 13.447 1274 9 0 46.117 74.8501 63.7543 - 86 112.784 920 8 1 4.10872 22.2631 35.5494 - 86 103.865 1010 8 0 4.18066 22.1959 34.15 - 86 145.135 927 7 1 5.59466 21.0604 5.54996 - 86 109.364 1004 7 0 5.58246 20.9009 4.14969 - 86 157.959 927 6 1 5.51732 17.6305 -24.45 - 86 117.085 986 6 0 5.50803 17.383 -25.85 - 86 118.999 955 5 0 4.75076 11.1383 -55.85 - 86 139.142 924 4 0 3.22631 5.00639 -85.85 - 86 224.636 899 3 0 4.51069 -0.182157 -115.85 - 86 140.962 916 2 1 3.29069 -4.27128 -144.45 - 86 9.53145 878 2 0 3.21238 -4.44526 -145.85 - 86 135.492 877 2 0 3.21019 -4.45 -145.888 - 86 149.771 906 1 1 1.36774 -8.04501 -174.45 - 86 149.025 859 1 0 1.26101 -8.18336 -175.85 - 86 138.903 894 0 1 -1.0541 -11.3295 -204.45 - 86 283.727 842 0 0 -1.14395 -11.5766 -205.85 - 86 4.62272 841 0 0 -1.16983 -11.65 -206.235 - 86 30.9789 439 0 1 -92.15 -38.8915 -204.839 -Number of digits in this event: 79 -Using G4ParticleGun... -Particle energy: 2.48811 LIN +Number of tracker hits in this event: 24 + 86 108.933 835 9 1 -12.9484 121.409 65.55 + 86 260.165 1506 9 0 -12.9411 121.406 64.15 + 86 119.977 836 8 1 -12.797 121.317 35.55 + 86 157.515 1505 8 0 -12.7869 121.306 34.15 + 86 197.117 837 7 1 -12.5804 121.066 5.55 + 86 130.705 1504 7 0 -12.58 121.058 4.15 + 86 156.248 837 6 1 -12.5691 120.882 -24.45 + 86 193.699 1503 6 0 -12.5671 120.868 -25.85 + 86 124.641 837 5 1 -12.488 120.56 -54.45 + 86 125.026 1502 5 0 -12.4805 120.552 -55.85 + 86 189.335 1501 5 0 -12.4783 120.55 -56.241 + 86 123.696 838 4 1 -12.3167 120.392 -84.45 + 86 116.925 1501 4 0 -12.3084 120.386 -85.85 + 86 109.564 839 3 1 -12.1389 120.261 -114.45 + 86 173.954 1500 3 0 -12.1273 120.253 -115.85 + 86 126.157 840 2 1 -11.904 120.08 -144.45 + 86 115.184 1499 2 0 -11.8939 120.071 -145.85 + 86 99.3342 841 1 1 -11.6693 119.858 -174.45 + 86 173.945 1498 1 0 -11.6669 119.843 -175.85 + 86 115.84 841 0 1 -11.6659 119.55 -204.45 + 86 232.968 1496 0 0 -11.676 119.53 -205.85 + 86 75.8024 1500 5 0 -12.6254 120.35 -56.1928 + 86 172.174 1459 5 0 19.2434 112.089 -56.2499 + 86 75.9729 1547 7 0 -25.2915 129.651 3.75016 +Number of digits in this event: 17 +Using G4ParticleGun... +Particle energy: 3.81136 LIN Particle: e- Event: 87 -Number of tracker hits in this event: 105 - 87 273.511 646 11 1 -50.792 -4.67663 125.55 - 87 132.534 876 11 0 -50.7915 -4.67786 124.15 - 87 131.573 646 10 1 -50.7933 -4.70128 95.55 - 87 153.894 876 10 0 -50.7838 -4.70768 94.15 - 87 120.597 647 9 1 -50.5828 -4.86563 65.55 - 87 152.081 875 9 0 -50.5697 -4.87737 64.15 - 87 133.956 648 8 1 -50.3047 -5.12902 35.55 - 87 107.49 874 8 0 -50.2903 -5.14534 34.15 - 87 115.182 650 7 1 -49.9988 -5.48445 5.55 - 87 129.422 872 7 0 -49.9845 -5.50043 4.15 - 87 100.999 651 6 1 -49.7078 -5.7968 -24.45 - 87 117.464 871 6 0 -49.6896 -5.81234 -25.85 - 87 123.193 653 5 1 -49.3142 -6.13381 -54.45 - 87 115.412 869 5 0 -49.2974 -6.15103 -55.85 - 87 232.808 655 4 1 -48.9652 -6.51725 -84.45 - 87 123.763 867 4 0 -48.9464 -6.54009 -85.85 - 87 200.994 657 3 1 -48.5652 -7.00243 -114.45 - 87 122.976 865 3 0 -48.5469 -7.02818 -115.85 - 87 115.82 659 2 1 -48.1531 -7.56904 -144.45 - 87 101.272 862 2 0 -48.1371 -7.59261 -145.85 - 87 117.955 661 1 1 -47.8253 -8.08307 -174.45 - 87 143.025 859 1 0 -47.7878 -8.12263 -175.85 - 87 393.863 665 0 1 -46.9695 -8.90266 -204.45 - 87 127.469 855 0 0 -46.94 -8.94666 -205.85 - 87 186.879 666 0 1 -46.85 -8.871 -204.653 - 87 11.7647 664 0 1 -47.05 -8.92978 -204.642 - 87 25.8996 1010 0 0 -91.1865 22.2053 -206.25 - 87 89.824 1011 0 0 -91.2542 22.2503 -206.234 - 87 261.928 860 0 0 -48.1481 -7.93073 -205.85 - 87 124.854 617 7 0 12.2099 -56.5149 3.75 - 87 121.081 618 7 0 12.0344 -56.4496 4.01956 - 87 91.4382 619 7 0 11.7661 -56.25 4.06612 - 87 281.556 620 7 0 11.5894 -56.05 4.09315 - 87 168.142 621 7 0 11.2884 -55.85 4.04568 - 87 26.3239 866 3 0 -48.7849 -6.83603 -116.198 - 87 151.774 661 2 1 -47.8065 -5.1398 -144.45 - 87 197.426 873 2 0 -47.9266 -5.33913 -145.85 - 87 357.582 641 1 1 -51.7589 -3.78423 -174.45 - 87 13.9211 896 1 0 -50.6625 -0.687447 -175.85 - 87 48.1936 897 1 0 -50.6428 -0.649922 -175.866 - 87 63.6167 898 1 0 -50.5574 -0.45 -175.918 - 87 65.9784 899 1 0 -50.4685 -0.25 -175.933 - 87 105.874 900 1 0 -50.3165 0.05 -176.014 - 87 47.4765 901 1 0 -50.2381 0.250544 -176.146 - 87 100.765 1095 1 0 8.23538 39.1058 -176.25 - 87 123.335 941 1 1 8.34166 39.4064 -174.85 - 87 151.319 662 2 1 -47.6494 -5.11787 -144.546 - 87 124.581 875 2 0 -47.3622 -4.98321 -145.85 - 87 107.536 713 1 1 -37.3834 3.6416 -174.45 - 87 57.4518 712 1 1 -37.45 3.36899 -174.738 - 87 80.0213 911 1 0 -38.1334 2.43225 -175.85 - 87 95.3491 910 1 0 -38.2905 2.25 -176.017 - 87 77.1859 597 1 0 -88.7798 -60.4731 -176.25 - 87 70.7297 596 1 0 -88.7656 -60.65 -176.006 - 87 14.4369 465 1 1 -86.8926 -61.3473 -174.85 - 87 473.601 466 1 1 -86.85 -61.3531 -174.821 - 87 249.825 467 1 1 -86.65 -61.3925 -174.802 - 87 62.9517 892 8 0 -57.2436 -1.65 33.9638 - 87 295.643 893 8 0 -57.5729 -1.44994 33.888 - 87 203.571 894 8 0 -57.4327 -1.25 33.9455 - 87 231.32 646 5 1 -50.8336 -4.72086 -54.45 - 87 248.923 876 5 0 -50.8247 -4.73516 -55.85 - 87 245.538 646 4 1 -50.6717 -5.02356 -84.45 - 87 103.512 875 4 0 -50.6762 -4.96716 -85.85 - 87 136.328 645 3 1 -50.8588 -3.88803 -114.45 - 87 142.195 880 3 0 -50.911 -3.87291 -115.85 - 87 256.636 640 2 1 -51.9688 -3.67905 -144.45 - 87 132.637 882 2 0 -52.0397 -3.58989 -145.85 - 87 142.854 632 1 1 -53.4739 -1.86092 -174.45 - 87 482.083 891 1 0 -53.5484 -1.74978 -175.85 - 87 110.483 625 0 1 -55.0373 0.415614 -204.45 - 87 142.472 902 0 0 -55.0782 0.535829 -205.85 - 87 614.821 643 2 1 -51.2724 -2.96754 -144.45 - 87 880.223 642 2 1 -51.4504 -2.83001 -144.488 - 87 138.952 641 2 1 -51.65 -2.74811 -144.515 - 87 67.896 647 4 1 -50.5428 -4.86911 -84.45 - 87 117.428 648 4 1 -50.45 -4.70732 -84.6352 - 87 16.7038 649 4 1 -50.25 -4.4693 -84.8208 - 87 111.727 882 4 0 -48.8416 -3.5874 -85.85 - 87 70.6363 883 4 0 -48.5303 -3.45 -86.1017 - 87 42.6025 1203 4 0 5.55378 60.6754 -86.2498 - 87 61.3613 1204 4 0 5.62777 60.85 -86.1847 - 87 172.495 1205 4 0 5.71574 61.0501 -86.1496 - 87 75.3269 1206 4 0 5.8166 61.25 -86.0037 - 87 26.3313 1207 4 0 5.90203 61.45 -85.9113 - 87 29.6438 932 4 1 6.56521 62.192 -84.85 - 87 93.945 933 4 1 6.65 62.2589 -84.7828 - 87 66.9785 934 4 1 6.85 62.5215 -84.7897 - 87 11.0233 1226 4 0 7.5724 65.4082 -85.8504 - 87 83.824 1227 4 0 7.57912 65.4502 -85.8754 - 87 166.224 1228 4 0 7.70761 65.65 -85.9824 - 87 71.8842 1229 4 0 7.9026 65.85 -86.0646 - 87 65.1573 1230 4 0 8.02787 66.05 -86.113 - 87 59.1142 1231 4 0 8.20372 66.25 -86.1441 - 87 189.017 1233 4 0 37.252 66.6882 -86.2497 - 87 36.99 1232 4 0 37.154 66.65 -85.9355 - 87 112.96 1089 4 1 37.9396 66.1103 -84.8497 - 87 265.3 1088 4 1 37.85 66.061 -84.6676 - 87 96.9241 877 4 0 -50.7748 -4.63338 -85.85 - 87 136.334 644 3 1 -51.0789 -4.60055 -114.45 - 87 173.643 877 3 0 -51.1062 -4.54955 -115.85 - 87 153.309 883 2 0 -51.6599 -3.43266 -145.85 - 87 125.014 638 1 1 -52.4385 -1.76618 -174.45 - 87 213.366 636 0 1 -52.6674 0.184776 -204.45 - 87 122.433 901 0 0 -52.7234 0.261796 -205.85 -Number of digits in this event: 58 +Number of tracker hits in this event: 30 + 87 115.899 931 11 1 6.27035 4.17012 125.55 + 87 169.794 920 11 0 6.27185 4.17176 124.15 + 87 126.253 931 10 1 6.31321 4.20633 95.55 + 87 132.364 920 10 0 6.31453 4.20675 94.15 + 87 104.19 931 9 1 6.34224 4.20862 65.55 + 87 176.601 920 9 0 6.34527 4.20906 64.15 + 87 124.211 931 8 1 6.41011 4.21878 35.55 + 87 141.014 920 8 0 6.41172 4.21987 34.15 + 87 97.8306 932 7 1 6.4552 4.24004 5.55 + 87 113.068 920 7 0 6.45818 4.24076 4.15 + 87 123.806 932 6 1 6.51825 4.25865 -24.45 + 87 106.214 921 6 0 6.52042 4.25847 -25.85 + 87 127.18 932 5 1 6.55627 4.26104 -54.45 + 87 136.073 921 5 0 6.55648 4.26212 -55.85 + 87 147.464 932 4 1 6.56205 4.28231 -84.45 + 87 108.037 921 4 0 6.56255 4.28643 -85.85 + 87 117.08 932 3 1 6.57605 4.36925 -114.45 + 87 117.603 921 3 0 6.57607 4.37313 -115.85 + 87 123.34 932 2 1 6.58305 4.45186 -144.45 + 87 102.351 922 2 0 6.58612 4.45585 -145.85 + 87 626.725 932 1 1 6.64103 4.54311 -174.45 + 87 241.08 922 1 0 6.64671 4.54625 -175.85 + 87 124.329 933 0 1 6.74183 4.60514 -204.45 + 87 340.464 922 0 0 6.74868 4.60771 -205.85 + 87 250.942 921 1 0 6.57998 4.40002 -175.85 + 87 93.3801 932 0 1 6.61671 4.4744 -204.45 + 87 105.386 934 0 1 6.89275 4.65838 -204.45 + 87 224.065 923 0 0 6.8919 4.65318 -205.85 + 87 116.353 917 1 0 6.8031 3.57702 -175.85 + 87 41.766 918 1 0 6.83287 3.65003 -176.099 +Number of digits in this event: 18 Using G4ParticleGun... -Particle energy: 2.70265 LIN +Particle energy: 6.27636 LIN Particle: e- Event: 88 -Number of tracker hits in this event: 44 - 88 110.16 1391 10 1 98.4234 14.2776 95.55 - 88 108.32 971 10 0 98.4252 14.2782 94.15 - 88 111.401 1391 9 1 98.4514 14.2862 65.55 - 88 170.602 971 9 0 98.4537 14.2832 64.15 - 88 98.9139 1391 8 1 98.505 14.225 35.55 - 88 185.818 970 8 0 98.5043 14.2258 34.15 - 88 213.373 1391 7 1 98.4883 14.2391 5.55 - 88 137.732 970 7 0 98.4955 14.2427 4.15 - 88 501.574 1392 6 1 98.6559 14.3481 -24.45 - 88 137.75 971 6 0 98.6721 14.3563 -25.85 - 88 234.5 1394 5 1 99.0228 14.5574 -54.45 - 88 162.745 972 5 0 99.0529 14.5639 -55.85 - 88 151.533 1397 4 1 99.6656 14.7256 -84.45 - 88 145.906 973 4 0 99.7047 14.7303 -85.85 - 88 132.195 1401 3 1 100.519 14.8207 -114.45 - 88 134.528 973 3 0 100.548 14.8277 -115.85 - 88 120.083 1405 2 1 101.162 14.9816 -144.45 - 88 109.608 974 2 0 101.195 14.9964 -145.85 - 88 130.148 1408 1 1 101.88 15.2823 -174.45 - 88 125.488 976 1 0 101.918 15.2939 -175.85 - 88 176.332 1413 0 1 102.753 15.3036 -204.45 - 88 151.253 976 0 0 102.799 15.3016 -205.85 - 88 97.0695 632 0 0 154.752 -53.4847 -206.25 - 88 248.192 631 0 0 154.982 -53.65 -206.22 - 88 154.119 1677 0 1 155.689 -53.0445 -204.85 - 88 224.158 1676 0 1 155.55 -52.8731 -204.629 - 88 222.535 1394 0 1 99.0775 15.0034 -204.45 - 88 84.7776 1395 0 1 99.1501 14.9956 -204.578 - 88 92.2475 974 0 0 99.7621 14.9362 -205.85 - 88 91.7439 521 0 1 -75.65 -69.6868 -204.692 - 88 146.372 110 3 1 -157.95 -111.971 -114.678 - 88 63.4303 967 0 0 99.1143 13.6277 -205.85 - 88 69.1073 966 0 0 99.1175 13.4499 -206.061 - 88 99.7543 978 6 0 98.4925 15.8257 -25.85 - 88 68.6986 979 6 0 98.4891 15.85 -25.8742 - 88 76.157 980 6 0 98.4636 16.05 -26.0924 - 88 198.066 1369 5 1 94.0185 34.9547 -54.45 - 88 57.5814 1084 5 0 94.0788 36.8842 -55.8503 - 88 169.788 1085 5 0 94.0827 37.05 -55.9736 - 88 3.08442 1086 5 0 93.9609 37.25 -56.2328 - 88 122.591 1191 5 0 80.2456 58.3835 -56.25 - 88 171.054 1301 5 1 80.3085 58.1415 -54.85 - 88 27.1563 1307 5 1 81.45 58.1944 -54.6038 - 88 19.8601 1083 5 0 93.8796 36.65 -55.8832 -Number of digits in this event: 28 +Number of tracker hits in this event: 56 + 88 162.106 1399 9 1 100.055 -72.2355 65.55 + 88 114.051 539 9 0 100.053 -72.2353 64.15 + 88 163.073 1399 8 1 100.006 -72.2274 35.55 + 88 109.17 539 8 0 100.004 -72.2273 34.15 + 88 213.653 1399 7 1 99.9598 -72.2213 5.55 + 88 152.421 539 7 0 99.9576 -72.2195 4.15 + 88 249.933 1398 6 1 99.9145 -72.1843 -24.45 + 88 140.469 539 6 0 99.9109 -72.1817 -25.85 + 88 247.574 1398 5 1 99.8315 -72.1262 -54.45 + 88 117.766 539 5 0 99.8287 -72.1247 -55.85 + 88 373.719 1398 4 1 99.7667 -72.0963 -84.45 + 88 290.813 539 4 0 99.7626 -72.0952 -85.85 + 88 132.983 1397 3 1 99.6734 -72.0715 -114.45 + 88 128.02 539 3 0 99.6686 -72.071 -115.85 + 88 121.376 1397 2 1 99.5626 -72.0582 -144.45 + 88 132.244 539 2 0 99.557 -72.0564 -145.85 + 88 89.9713 1396 1 1 99.4315 -72.0128 -174.45 + 88 84.9781 540 1 0 99.4251 -72.012 -175.85 + 88 104.834 1395 0 1 99.2565 -72.0324 -204.45 + 88 242.222 540 0 0 99.2433 -72.0393 -205.85 + 88 72.0585 931 0 0 78.2472 6.3566 -206.25 + 88 74.0088 932 0 0 78.184 6.45 -206.169 + 88 194.927 660 1 0 -32.3714 -47.9259 -176.25 + 88 115.564 1399 3 1 99.9839 -72.3526 -114.45 + 88 143.113 538 3 0 99.9933 -72.3578 -115.85 + 88 110.512 1400 2 1 100.234 -72.4811 -144.45 + 88 139.947 537 2 0 100.242 -72.4658 -145.85 + 88 106.382 1401 1 1 100.512 -72.1464 -174.45 + 88 163.575 539 1 0 100.542 -72.1492 -175.85 + 88 142.506 1404 0 1 100.961 -72.1421 -204.45 + 88 170.722 539 0 0 100.953 -72.1375 -205.85 + 88 150.715 538 4 0 99.8051 -72.2663 -85.8503 + 88 82.0198 1393 3 1 98.9138 -74.0153 -114.45 + 88 30.5783 1394 3 1 98.95 -74.0715 -114.73 + 88 151.781 528 3 0 99.094 -74.291 -115.851 + 88 137.968 1413 2 1 102.823 -80.0531 -144.452 + 88 157.272 498 2 0 103.125 -80.2956 -145.85 + 88 144.283 1444 1 1 109.032 -85.7077 -174.45 + 88 126.067 469 1 0 109.188 -86.0746 -175.85 + 88 117.24 1460 0 1 112.191 -93.4986 -204.451 + 88 154.463 431 0 0 112.368 -93.8114 -205.85 + 88 96.7874 1400 8 1 100.15 -72.0655 35.51 + 88 62.1572 1401 8 1 100.35 -71.956 35.3624 + 88 91.7607 1402 8 1 100.55 -71.8671 35.3078 + 88 189.64 1403 8 1 100.75 -71.8219 35.3148 + 88 209.851 1404 8 1 100.95 -71.6799 35.3324 + 88 34.711 541 8 0 101.078 -71.6536 34.15 + 88 194.029 542 8 0 101.082 -71.6498 34.0918 + 88 8.77421 1399 6 1 99.9555 -72.2172 -24.4503 + 88 101.4 540 6 0 99.8804 -72.0207 -25.85 + 88 189.6 1392 5 1 98.7352 -64.6939 -54.45 + 88 193.704 1391 5 1 98.5497 -64.4839 -54.6136 + 88 493.356 1390 5 1 98.3498 -64.3428 -54.7782 + 88 64.7685 586 5 0 98.1064 -62.8217 -55.85 + 88 53.7142 587 5 0 98.0995 -62.65 -55.9174 + 88 78.8496 601 5 0 97.2117 -59.8032 -55.85 +Number of digits in this event: 36 Using G4ParticleGun... -Particle energy: 7.92888 LIN +Particle energy: 5.24321 LIN Particle: e- Event: 89 -Number of tracker hits in this event: 181 - 89 270.891 1281 10 1 76.3419 58.1527 95.55 - 89 158.017 1190 10 0 76.3406 58.1522 94.15 - 89 127.825 1281 9 1 76.3115 58.1417 65.55 - 89 128.315 1190 9 0 76.3115 58.1406 64.15 - 89 300.976 1281 8 1 76.3117 58.1133 35.55 - 89 132.562 1190 8 0 76.3122 58.1104 34.15 - 89 137.722 1281 7 1 76.3248 58.0482 5.55 - 89 112.031 1189 7 0 76.3275 58.0441 4.15 - 89 413.469 1281 6 1 76.3824 57.9594 -24.45 - 89 112.23 1189 6 0 76.3856 57.9542 -25.85 - 89 157.576 1282 5 1 76.4506 57.8409 -54.45 - 89 100.293 1188 5 0 76.4547 57.8371 -55.85 - 89 463.065 1282 4 1 76.5407 57.7784 -84.45 - 89 391.371 1188 4 0 76.5429 57.7716 -85.85 - 89 464.964 1282 3 1 76.6085 57.6279 -114.45 - 89 145.569 1187 3 0 76.6151 57.6248 -115.85 - 89 477.344 1283 2 1 76.7234 57.5385 -144.45 - 89 210.562 1187 2 0 76.7258 57.5328 -145.85 - 89 312.671 1283 1 1 76.7624 57.4038 -174.45 - 89 107.42 1186 1 0 76.7613 57.3986 -175.85 - 89 175.451 1283 0 1 76.7368 57.3082 -204.45 - 89 273.056 1186 0 0 76.7405 57.3105 -205.85 - 89 94.0573 823 0 0 82.7754 -15.2943 -206.25 - 89 410.171 1188 3 0 76.6524 57.7206 -115.85 - 89 480.501 1188 2 0 76.8131 57.6625 -145.85 - 89 102.001 1285 1 1 77.1245 57.4998 -174.45 - 89 198.219 1187 1 0 77.1372 57.4924 -175.85 - 89 124.249 1286 0 1 77.3873 57.3522 -204.45 - 89 53.1386 463 6 1 -87.2774 73.5704 -24.85 - 89 99.4659 1289 1 1 77.8632 58.7881 -174.45 - 89 131.01 1194 1 0 78.0399 58.947 -175.85 - 89 32.8688 1306 0 1 81.3728 63.1398 -204.45 - 89 132.633 1307 0 1 81.45 63.1463 -204.559 - 89 7.44291 1308 0 1 81.6501 63.0794 -204.815 - 89 78.0068 1212 0 0 82.4079 62.534 -205.85 - 89 109.693 1211 0 0 82.5008 62.45 -205.995 - 89 13.6803 1210 0 0 82.7248 62.25 -206.226 - 89 116.013 1135 0 0 103.578 47.1597 -206.25 - 89 74.2857 1421 0 1 104.416 46.8329 -204.85 - 89 48.2808 1422 0 1 104.55 46.8841 -204.631 - 89 368.244 1284 2 1 76.85 57.7342 -144.515 - 89 211.922 1188 1 0 76.6584 57.6513 -175.85 - 89 106.426 1282 0 1 76.5748 57.7576 -204.45 - 89 117.04 1188 0 0 76.5796 57.774 -205.85 - 89 76.1741 1327 2 1 85.4799 92.294 -144.85 - 89 77.9138 1279 3 1 75.9821 57.4257 -114.45 - 89 164.019 1280 3 1 76.05 57.4403 -114.647 - 89 152.943 1186 3 0 76.5037 57.4303 -115.85 - 89 29.7586 1330 2 1 86.226 58.7115 -144.45 - 89 160.762 1331 2 1 86.25 58.7099 -144.501 - 89 149.966 1193 2 0 86.8676 58.8195 -145.85 - 89 38.3121 1409 1 1 102.051 59.7741 -174.45 - 89 139.231 1408 1 1 101.95 59.7641 -174.573 - 89 8.94627 1407 1 1 101.75 59.7436 -174.821 - 89 142.246 1198 1 0 100.896 59.7566 -175.85 - 89 59.3633 1285 0 1 77.2233 62.0152 -204.45 - 89 85.0055 1284 0 1 77.0499 61.9644 -204.612 - 89 16.767 1208 0 0 75.7441 61.6609 -205.85 - 89 191.257 1207 0 0 75.701 61.65 -205.892 - 89 159.434 1347 4 0 13.4504 89.5186 -86.25 - 89 97.759 1346 4 0 13.4363 89.45 -86.1856 - 89 27.0944 1381 4 0 3.97975 96.523 -86.25 - 89 145.786 1382 4 0 4.01022 96.5506 -86.2406 - 89 149.319 1275 3 0 39.7025 75.1056 -116.25 - 89 94.2914 1276 3 0 39.411 75.25 -115.981 - 89 30.3731 1090 3 1 38.1193 75.7485 -114.85 - 89 87.0968 1089 3 1 38.05 75.7759 -114.789 - 89 83.4135 1088 3 1 37.8494 75.8244 -114.608 - 89 12.934 1087 3 1 37.65 75.8857 -114.451 - 89 148.306 1086 3 1 37.4498 76.0047 -114.501 - 89 300.939 1284 3 0 36.7464 76.8746 -115.85 - 89 4.80163 1285 3 0 36.5182 77.0502 -116.229 - 89 103.991 1382 3 0 -19.9045 96.5531 -116.25 - 89 110.096 1383 3 0 -20.2699 96.75 -116.011 - 89 10.5763 789 3 1 -22.2401 97.2948 -114.85 - 89 497.836 788 3 1 -22.2503 97.2975 -114.844 - 89 275.064 787 3 1 -22.45 97.2941 -114.704 - 89 90.4518 786 3 1 -22.65 97.3186 -114.563 - 89 94.9959 1487 2 0 2.95669 117.55 -146.035 - 89 206.695 1486 2 0 3.13364 117.55 -146.222 - 89 108.026 1287 4 0 35.4634 77.4565 -86.25 - 89 143.178 1290 2 1 78.1129 57.5701 -144.45 - 89 19.3776 1186 2 0 78.312 57.45 -146.181 - 89 148.864 1306 1 1 81.4181 55.2264 -174.45 - 89 127.53 1176 1 0 81.4685 55.2555 -175.85 - 89 288.888 1313 0 1 82.7616 55.9043 -204.451 - 89 181.233 1180 0 0 82.6428 56.1961 -205.85 - 89 139.348 1181 0 0 82.6207 56.25 -206.142 - 89 25.2933 1220 1 1 64.0665 59.5021 -174.85 - 89 20.0605 1201 1 0 62.3266 60.4447 -175.85 - 89 234.853 1312 0 1 82.65 56.0056 -204.645 - 89 102.402 1311 0 1 82.45 55.9619 -204.48 - 89 5.67962 1310 0 1 82.25 55.9434 -204.457 - 89 5.58229 1309 2 1 82.05 57.6165 -144.798 - 89 61.8615 390 5 0 -103.03 -101.95 -56.1846 - 89 93.5968 406 5 0 -144.131 -98.95 -56.1032 - 89 115.664 471 5 0 -148.538 -85.85 -55.9584 - 89 69.9294 1314 0 1 82.85 55.8873 -204.595 - 89 144.718 1307 1 1 81.45 55.1152 -174.507 - 89 96.7006 1169 1 0 81.8755 54.0461 -175.85 - 89 39.1268 1168 1 0 81.9477 53.85 -176.155 - 89 37.1491 1368 0 1 93.7918 34.8588 -204.45 - 89 96.6492 1192 6 0 76.5353 58.5962 -25.85 - 89 149.531 1193 6 0 76.5513 58.6502 -25.9705 - 89 121.33 1290 5 1 78.0638 73.4329 -54.4509 - 89 82.474 1269 5 0 78.1478 73.9691 -55.85 - 89 64.7857 1270 5 0 78.1621 74.05 -56.0504 - 89 74.2711 1305 4 1 81.0727 86.1186 -84.45 - 89 28.7213 1306 4 1 81.25 86.1633 -84.74 - 89 43.8579 1331 4 0 81.857 86.413 -85.85 - 89 147.192 1332 4 0 81.9314 86.45 -85.9943 - 89 206.461 1404 3 1 101.102 98.4384 -114.45 - 89 102.865 1405 3 1 101.15 98.4432 -114.506 - 89 63.696 1406 3 1 101.35 98.4692 -114.728 - 89 302.906 1394 3 0 103.164 98.9636 -115.85 - 89 131.962 1190 6 0 76.4486 58.1385 -25.85 - 89 14.8806 1294 5 1 78.863 61.3391 -54.45 - 89 112.294 1293 5 1 78.85 61.3414 -54.4768 - 89 152.886 1207 5 0 78.1022 61.4751 -55.8502 - 89 117.965 1215 4 1 63.0815 65.1797 -84.4501 - 89 178.219 1214 4 1 63.05 65.2189 -84.5534 - 89 126.276 1228 4 0 62.5914 65.7228 -85.85 - 89 19.9 1229 4 0 62.4723 65.85 -86.183 - 89 104.052 1165 3 1 53.22 75.818 -114.45 - 89 171.241 1281 3 0 53.0392 76.4217 -115.85 - 89 96.7022 1282 3 0 53.0307 76.45 -115.916 - 89 94.8483 1144 2 1 48.9373 89.0117 -144.45 - 89 49.9266 1143 2 1 48.85 89.1507 -144.747 - 89 22.1543 1347 2 0 48.5442 89.6287 -145.85 - 89 117.418 1348 2 0 48.5303 89.6503 -145.9 - 89 75.0168 1099 1 1 39.9055 101.765 -174.45 - 89 169.259 1098 1 1 39.85 101.879 -174.579 - 89 29.9235 1414 1 0 39.5667 103.096 -175.85 - 89 93.8135 1415 1 0 39.5548 103.15 -175.908 - 89 43.5738 1416 1 0 39.512 103.351 -176.119 - 89 84.9627 1071 0 1 34.3391 129.174 -204.45 - 89 81.8662 1072 0 1 34.45 129.397 -204.665 - 89 25.6669 1551 0 0 35.0991 130.493 -205.85 - 89 108.247 1552 0 0 35.134 130.55 -205.914 - 89 24.0746 1553 0 0 35.2786 130.75 -206.16 - 89 211.329 1278 3 0 45.8925 75.6678 -116.25 - 89 32.7047 1225 4 0 63.2827 65.0792 -85.85 - 89 98.1861 1224 4 0 63.2877 65.05 -85.8819 - 89 301.419 1223 4 0 63.2817 64.8499 -85.9973 - 89 285.6 1206 5 0 77.9736 61.45 -56.0195 - 89 42.6992 1291 8 1 78.302 58.3937 35.15 - 89 18.6219 1193 8 0 79.0985 58.837 34.15 - 89 251.217 1281 5 1 76.306 58.0468 -54.45 - 89 109.622 1189 5 0 76.301 58.0482 -55.85 - 89 252.225 1280 4 1 76.2215 58.0996 -84.45 - 89 232.877 1190 4 0 76.2196 58.1012 -85.85 - 89 122.704 1190 3 0 76.2087 58.1322 -115.85 - 89 123.098 1280 2 1 76.2275 58.1368 -144.45 - 89 134.341 1190 2 0 76.2195 58.1345 -145.85 - 89 130.615 1272 1 1 74.6267 56.6547 -174.45 - 89 18.3655 1180 1 0 74.3537 56.0664 -175.85 - 89 136.536 1179 1 0 74.3457 56.05 -175.888 - 89 137.164 1233 0 1 66.8378 43.265 -204.45 - 89 9.25946 1110 0 0 66.5633 42.0743 -205.85 - 89 140.634 1109 0 0 66.558 42.0497 -205.88 - 89 43.4272 1108 0 0 66.5223 41.85 -206.116 - 89 228.952 1279 0 1 75.9861 58.2432 -204.45 - 89 353.588 1190 0 0 75.9779 58.246 -205.85 - 89 61.3749 1056 0 0 98.824 31.3059 -206.25 - 89 43.1497 1191 0 0 75.9994 58.25 -206.026 - 89 134.431 1190 5 0 76.3007 58.0514 -55.85 - 89 116.965 1281 3 1 76.3609 57.9174 -114.45 - 89 102.139 1189 3 0 76.3636 57.8792 -115.85 - 89 100.446 1281 2 1 76.4332 57.0798 -144.45 - 89 21.4632 1185 2 0 76.4266 57.0518 -145.85 - 89 108.885 1184 2 0 76.4262 57.05 -145.939 - 89 163.461 1280 1 1 76.164 56.4072 -174.45 - 89 107.984 1181 1 0 76.1228 56.387 -175.85 - 89 41.1807 1276 0 1 75.2545 56.0246 -204.45 - 89 71.2222 1275 0 1 75.25 56.0221 -204.61 - 89 130.051 1179 0 0 75.214 56.0039 -205.85 - 89 37.2267 1282 10 1 76.45 58.2111 95.2487 - 89 22.7244 1195 10 0 77.4389 59.1284 94.15 - 89 38.21 1296 10 1 79.3251 58.7287 95.1501 - 89 74.7124 1297 10 1 79.45 58.7057 95.2359 - 89 78.1884 1298 10 1 79.6502 58.6992 95.3569 -Number of digits in this event: 80 -Using G4ParticleGun... -Particle energy: 2.04524 LIN +Number of tracker hits in this event: 44 + 89 227.711 820 11 1 -15.8867 54.8915 125.55 + 89 221.493 1174 11 0 -15.8899 54.8912 124.15 + 89 113.001 820 10 1 -15.9463 54.9147 95.55 + 89 161.654 1174 10 0 -15.9445 54.915 94.15 + 89 184.951 820 9 1 -15.9347 54.9203 65.55 + 89 98.1195 1174 9 0 -15.9351 54.9195 64.15 + 89 92.6629 820 8 1 -15.9498 54.902 35.55 + 89 133.183 1174 8 0 -15.9474 54.9005 34.15 + 89 117.512 820 7 1 -15.9396 54.8935 5.55 + 89 114.907 1174 7 0 -15.9432 54.8784 4.15 + 89 109.998 820 6 1 -16.0064 54.5967 -24.45 + 89 95.068 1172 6 0 -16.0091 54.5989 -25.85 + 89 197.988 819 5 1 -16.1321 54.7393 -54.45 + 89 121.705 1173 5 0 -16.1398 54.742 -55.85 + 89 301.52 818 4 1 -16.3017 54.8143 -84.45 + 89 138.471 1173 4 0 -16.3154 54.8235 -85.85 + 89 140.021 817 3 1 -16.6106 54.9826 -114.45 + 89 143.226 1174 3 0 -16.6264 54.9955 -115.85 + 89 130.077 815 2 1 -16.9423 55.2717 -144.45 + 89 117.617 1176 2 0 -16.9427 55.2777 -145.85 + 89 179.887 815 1 1 -16.9421 55.4016 -174.45 + 89 109.93 1176 1 0 -16.9323 55.3975 -175.85 + 89 124.49 816 0 1 -16.6689 55.3751 -204.45 + 89 113.214 1176 0 0 -16.6419 55.33 -205.85 + 89 27.8513 1543 12 0 30.1018 128.923 153.75 + 89 131.408 1469 14 0 35.9472 114.148 213.75 + 89 23.5817 1153 14 0 43.7997 50.6682 213.75 + 89 51.2345 1152 14 0 43.7925 50.6499 213.784 + 89 85.9427 814 1 1 -17.05 55.3055 -174.748 + 89 263.732 813 1 1 -17.25 55.2665 -174.647 + 89 118.55 812 1 1 -17.45 55.1999 -174.713 + 89 5.44444 293 12 0 96.2586 -121.421 153.75 + 89 2.02653 383 12 0 67.3899 -103.354 153.75 + 89 122.834 818 1 1 -16.446 54.8925 -174.45 + 89 125.882 817 1 1 -16.4501 54.8918 -174.459 + 89 0.54152 816 1 1 -16.65 54.8384 -174.847 + 89 126.002 1172 1 0 -17.1548 54.6093 -175.85 + 89 161.61 627 0 0 -3.10579 -54.45 -205.933 + 89 134.778 1174 1 0 -16.2924 54.9508 -175.85 + 89 122.761 831 0 1 -13.7879 55.3879 -204.45 + 89 9.98335 1178 0 0 -13.542 55.8351 -205.85 + 89 268.12 1179 0 0 -13.5339 55.8504 -205.896 + 89 75.0486 1180 0 0 -13.5229 56.05 -206.163 + 89 28.6095 1202 0 0 -20.4408 60.45 -206.183 +Number of digits in this event: 25 +Using G4ParticleGun... +Particle energy: 2.06254 LIN Particle: e- Event: 90 -Number of tracker hits in this event: 83 - 90 116.813 941 11 1 8.38588 58.1298 125.55 - 90 106.926 1190 11 0 8.38361 58.1316 124.15 - 90 115.991 941 10 1 8.32574 58.2555 95.55 - 90 97.9749 1191 10 0 8.322 58.2565 94.15 - 90 124.78 940 9 1 8.23716 58.2564 65.55 - 90 148.606 1191 9 0 8.22789 58.257 64.15 - 90 220.829 939 8 1 8.04755 58.263 35.55 - 90 102.877 1191 8 0 8.04001 58.2676 34.15 - 90 137.18 939 7 1 7.87837 58.3532 5.55 - 90 102.232 1191 7 0 7.87442 58.3568 4.15 - 90 285.549 938 6 1 7.8049 58.4225 -24.45 - 90 103.552 1191 6 0 7.79707 58.4195 -25.85 - 90 383.647 937 5 1 7.60774 58.3661 -54.45 - 90 248.52 1191 5 0 7.59912 58.3618 -55.85 - 90 235.146 936 4 1 7.4026 58.2614 -84.45 - 90 288.012 1191 4 0 7.39558 58.2589 -85.85 - 90 497.651 936 3 1 7.26508 58.2032 -114.45 - 90 156.598 1190 3 0 7.26537 58.2035 -115.85 - 90 309.432 936 2 1 7.27809 58.1763 -144.45 - 90 111.647 1190 2 0 7.28365 58.1743 -145.85 - 90 125.101 936 1 1 7.39999 58.1133 -174.45 - 90 229.671 1190 1 0 7.4023 58.1119 -175.85 - 90 277.07 937 0 1 7.48543 58.0861 -204.45 - 90 119.458 1190 0 0 7.4879 58.0884 -205.85 - 90 110.794 1281 4 0 33.9389 76.2933 -86.25 - 90 35.738 1280 4 0 34.1246 76.25 -85.9002 - 90 211.953 1070 4 1 34.2286 75.7923 -84.8499 - 90 249.614 1069 4 1 34.0498 75.7509 -84.6661 - 90 184.437 1071 4 1 34.2501 75.8095 -84.5863 - 90 298.421 636 5 0 129.089 -52.65 -56.0263 - 90 62.6196 935 3 1 7.25 58.3196 -114.655 - 90 140.736 1192 3 0 6.41171 58.5327 -115.85 - 90 82.0236 819 2 1 -16.1368 65.944 -144.45 - 90 40.8197 818 2 1 -16.25 65.8144 -144.728 - 90 104.985 1226 2 0 -16.7492 65.2663 -145.85 - 90 192.653 1225 2 0 -16.7644 65.25 -145.882 - 90 3.6726 1224 2 0 -16.9497 65.05 -146.236 - 90 7.25079 727 1 1 -34.6159 46.0967 -174.45 - 90 121.218 726 1 1 -34.6504 46.1025 -174.483 - 90 40.6754 725 1 1 -34.85 46.1568 -174.715 - 90 85.4509 1132 1 0 -35.8525 46.5504 -175.85 - 90 74.1538 1133 1 0 -36.0593 46.65 -176.095 - 90 119.238 1209 1 0 -66.0125 62.0211 -176.25 - 90 277.185 569 1 1 -66.1764 60.9336 -174.85 - 90 119.137 1195 1 0 7.03272 59.1075 -175.85 - 90 28.6556 915 0 1 3.16139 61.0181 -204.45 - 90 56.222 914 0 1 3.05 61.0137 -204.518 - 90 55.4227 913 0 1 2.85 60.9768 -204.615 - 90 75.7234 912 0 1 2.64865 61.0026 -204.715 - 90 0.745506 911 0 1 2.45 61.0668 -204.848 - 90 19.3626 1206 0 0 1.03879 61.4376 -205.85 - 90 222.736 1207 0 0 1.00192 61.45 -205.876 - 90 38.4946 1208 0 0 0.592931 61.65 -206.159 - 90 73.1251 1198 0 0 2.49627 59.7661 -206.25 - 90 97.5611 1199 0 0 2.62021 59.85 -206.082 - 90 129.35 1200 0 0 2.65825 60.05 -206.062 - 90 288.895 910 0 1 2.1798 59.9909 -204.85 - 90 189.233 1192 5 0 7.60025 58.4782 -55.85 - 90 322.602 1191 3 0 7.53357 58.2807 -115.85 - 90 126.535 948 2 1 9.80971 56.6052 -144.45 - 90 118.318 1182 2 0 9.91677 56.4769 -145.85 - 90 59.8375 1181 2 0 9.93991 56.45 -146.142 - 90 96.0249 961 1 1 12.3533 54.069 -174.451 - 90 27.9334 962 1 1 12.4504 54.0765 -174.758 - 90 157.496 1170 1 0 12.8085 54.0971 -175.85 - 90 122.262 1010 0 1 22.0842 55.1428 -204.45 - 90 147.772 1175 0 0 22.5087 55.1118 -205.85 - 90 250.849 935 4 1 7.19769 57.5275 -84.45 - 90 195.542 1187 4 0 7.21913 57.5526 -85.85 - 90 182.35 932 2 1 6.48331 60.9046 -144.45 - 90 118.63 1204 2 0 6.52055 60.9767 -145.851 - 90 194.116 934 1 1 6.89201 61.6368 -174.45 - 90 105.971 1208 1 0 6.96804 61.7367 -175.85 - 90 149.418 941 0 1 8.3755 63.8866 -204.45 - 90 253.017 1219 0 0 8.42486 64.0121 -205.85 - 90 2.67916 1220 0 0 8.45326 64.05 -206.237 - 90 171.084 1006 1 0 17.3915 21.4077 -176.25 - 90 159.438 1005 1 0 17.371 21.2496 -176.096 - 90 331.831 1004 1 0 17.4158 21.05 -175.924 - 90 36.4364 984 1 1 16.8811 20.9158 -174.85 - 90 68.5272 983 1 1 16.85 20.9074 -174.842 - 90 136.918 938 4 1 7.76634 58.4149 -84.45 - 90 126.656 937 4 1 7.64986 58.4122 -84.7154 -Number of digits in this event: 44 +Number of tracker hits in this event: 81 + 90 177.295 463 8 1 -87.3236 110.115 35.55 + 90 99.142 1449 8 0 -87.3235 110.117 34.15 + 90 298.15 463 7 1 -87.2857 110.158 5.55 + 90 94.4857 1450 7 0 -87.2775 110.161 4.15 + 90 114.046 465 6 1 -87.0415 110.46 -24.45 + 90 127.646 1451 6 0 -87.0456 110.464 -25.85 + 90 353.105 464 5 1 -87.1377 110.493 -54.45 + 90 116.586 1451 5 0 -87.1619 110.515 -55.85 + 90 427.545 462 4 1 -87.5839 110.886 -84.45 + 90 352.918 1453 4 0 -87.6539 110.883 -85.85 + 90 103.217 453 3 1 -89.2929 110.905 -114.45 + 90 126.5 1453 3 0 -89.3913 110.912 -115.85 + 90 128.661 443 2 1 -91.4066 111.252 -144.45 + 90 329.311 1455 2 0 -91.5395 111.243 -145.85 + 90 126.121 428 1 1 -94.4414 111.084 -174.45 + 90 243.645 1454 1 0 -94.5657 111.116 -175.85 + 90 133.442 414 0 1 -97.1972 111.67 -204.45 + 90 178.462 1457 0 0 -97.3224 111.685 -205.85 + 90 20.6295 1370 2 0 -118.574 94.1817 -146.25 + 90 98.3298 1369 2 0 -118.565 94.15 -146.194 + 90 161.09 429 1 1 -94.3498 111.11 -174.477 + 90 14.5816 430 1 1 -94.15 111.317 -174.795 + 90 218.378 1458 1 0 -93.5619 111.897 -175.85 + 90 144.564 1459 1 0 -93.5059 111.95 -175.933 + 90 117.377 553 0 1 -69.3403 123.254 -204.45 + 90 104.754 1516 0 0 -69.2329 123.496 -205.85 + 90 288.567 1515 0 0 -68.964 123.35 -205.957 + 90 327.729 562 0 1 -67.5295 123.736 -204.85 + 90 27.8198 563 0 1 -67.45 124.039 -204.507 + 90 137.388 444 2 1 -91.2615 111.261 -144.45 + 90 42.173 425 1 1 -95.0912 114.323 -174.45 + 90 122.395 424 1 1 -95.15 114.299 -174.59 + 90 166.326 1470 1 0 -95.6458 114.21 -175.85 + 90 169.696 1528 1 0 -75.2658 125.855 -176.25 + 90 117.289 523 1 1 -75.3435 125.662 -174.85 + 90 131.162 457 3 1 -88.5479 111.421 -114.45 + 90 129.009 1456 3 0 -88.5562 111.475 -115.85 + 90 188.77 456 2 1 -88.7415 112.767 -144.45 + 90 109.031 1462 2 0 -88.6829 112.731 -145.85 + 90 118.307 462 1 1 -87.494 111.983 -174.45 + 90 148.811 469 0 1 -86.1345 110.804 -204.45 + 90 149.597 1453 0 0 -86.0501 110.763 -205.85 + 90 80.2394 463 1 1 -87.45 111.997 -174.826 + 90 147.023 1464 1 0 -84.163 112.967 -175.85 + 90 107.75 1463 1 0 -84.0352 112.95 -175.932 + 90 84.9386 488 1 1 -82.348 112.04 -174.85 + 90 135.089 1454 4 0 -87.4299 110.95 -86.2435 + 90 121.898 476 3 1 -84.7018 112.048 -114.45 + 90 81.2465 477 3 1 -84.65 112.062 -114.74 + 90 129.126 1459 3 0 -84.4372 112.128 -115.85 + 90 8.45352 1460 3 0 -84.372 112.15 -116.206 + 90 56.8379 503 2 1 -79.2977 113.884 -144.45 + 90 119.284 504 2 1 -79.2499 113.9 -144.595 + 90 180.55 1469 2 0 -78.8274 114.029 -145.85 + 90 18.5075 556 1 1 -68.6812 117.803 -174.45 + 90 105.02 557 1 1 -68.65 117.815 -174.51 + 90 106.689 1489 1 0 -67.9261 118.085 -175.85 + 90 13.2202 1490 1 0 -67.7393 118.15 -176.189 + 90 104.593 639 0 1 -52.221 124.554 -204.45 + 90 21.2969 640 0 1 -52.0499 124.698 -204.791 + 90 118.872 1525 0 0 -51.5341 125.191 -205.85 + 90 4.00798 1526 0 0 -51.3102 125.35 -206.237 + 90 127.554 463 5 1 -87.2501 109.752 -54.4543 + 90 118.199 1443 5 0 -86.7838 108.873 -55.85 + 90 350.787 1454 5 0 -87.6686 111.091 -55.85 + 90 77.8267 1455 5 0 -87.6691 111.15 -56.1247 + 90 140.61 1449 5 0 -86.7304 109.993 -55.85 + 90 231.62 536 4 1 -72.8142 111.002 -84.45 + 90 42.408 1455 4 0 -72.2623 111.15 -86.1146 + 90 38.6809 573 3 1 -65.3009 116.658 -114.45 + 90 93.6715 574 3 1 -65.2499 116.684 -114.509 + 90 64.0129 575 3 1 -65.05 116.778 -114.702 + 90 62.4562 1486 3 0 -63.671 117.486 -115.85 + 90 126.084 1487 3 0 -63.5359 117.55 -115.967 + 90 229.707 1577 3 0 -2.16311 135.652 -116.25 + 90 153.319 1576 3 0 -1.95536 135.55 -116.056 + 90 78.2807 925 0 1 5.24875 134.963 -204.45 + 90 41.4618 535 4 1 -72.85 110.979 -84.6095 + 90 59.7501 528 7 0 -113.458 -74.29 3.75 + 90 117.71 527 7 0 -113.442 -74.45 3.8396 + 90 294.749 526 7 0 -113.382 -74.65 3.93475 +Number of digits in this event: 43 Using G4ParticleGun... -Particle energy: 3.35615 LIN +Particle energy: 4.78329 LIN Particle: e- Event: 91 -Number of tracker hits in this event: 34 - 91 120.975 1268 10 1 73.8489 80.1758 95.55 - 91 128.627 1300 10 0 73.8473 80.1781 94.15 - 91 133.495 1268 9 1 73.8167 80.2386 65.55 - 91 143.975 1300 9 0 73.808 80.2396 64.15 - 91 104.334 1267 8 1 73.62 80.2668 35.55 - 91 110.198 1301 8 0 73.6118 80.2669 34.15 - 91 109.01 1266 7 1 73.4478 80.2724 5.55 - 91 147.561 1301 7 0 73.4439 80.2726 4.15 - 91 122.065 1266 6 1 73.3577 80.2799 -24.45 - 91 117.887 1301 6 0 73.3531 80.2779 -25.85 - 91 154.115 1266 5 1 73.2564 80.24 -54.45 - 91 111.166 1300 5 0 73.2501 80.2389 -55.85 - 91 118.101 1265 4 1 73.1109 80.2151 -84.45 - 91 140.266 1300 4 0 73.1052 80.2168 -85.85 - 91 234.646 1264 3 1 73.0046 80.2562 -114.45 - 91 115.657 1301 3 0 73.0005 80.2568 -115.85 - 91 111.734 1264 2 1 72.9122 80.2749 -144.45 - 91 227.764 1301 2 0 72.9064 80.2751 -145.85 - 91 108.738 1263 1 1 72.7774 80.2893 -174.45 - 91 265.533 1301 1 0 72.7726 80.2908 -175.85 - 91 145.898 1263 0 1 72.691 80.3314 -204.45 - 91 120.568 1301 0 0 72.6904 80.3298 -205.85 - 91 264.244 1263 2 1 72.7862 80.3034 -144.45 - 91 113.173 1300 2 0 72.812 80.2459 -145.85 - 91 115.164 1266 1 1 73.4025 79.0019 -174.45 - 91 101.224 1294 1 0 73.3971 78.9639 -175.85 - 91 223.75 1266 0 1 73.2667 78.1037 -204.45 - 91 192.021 1290 0 0 73.3471 78.129 -205.85 - 91 111.006 1267 1 1 73.6432 80.4428 -174.45 - 91 129.164 1298 0 0 73.3452 79.7774 -205.85 - 91 60.7517 1301 9 0 73.8165 80.2501 63.9164 - 91 210.606 1455 9 0 73.4178 111.164 63.75 - 91 309.77 1237 9 1 67.5639 110.536 65.1501 - 91 246.5 1269 10 1 73.85 80.1752 95.4548 -Number of digits in this event: 22 +Number of tracker hits in this event: 53 + 91 190.318 1472 9 1 114.602 -46.9043 65.55 + 91 121.307 665 9 0 114.603 -46.9048 64.15 + 91 129.463 1472 8 1 114.611 -46.9165 35.55 + 91 161.103 665 8 0 114.613 -46.9179 34.15 + 91 99.631 1472 7 1 114.669 -46.948 5.55 + 91 219.607 665 7 0 114.671 -46.9489 4.15 + 91 148.149 1472 6 1 114.7 -46.969 -24.45 + 91 109.51 665 6 0 114.701 -46.9713 -25.85 + 91 119.68 1472 5 1 114.701 -47.018 -54.45 + 91 121.005 665 5 0 114.703 -47.0193 -55.85 + 91 120.957 1472 4 1 114.741 -47.0409 -84.45 + 91 125.992 665 4 0 114.741 -47.0424 -85.85 + 91 137.334 1473 3 1 114.763 -47.0699 -114.45 + 91 132.274 664 3 0 114.763 -47.0709 -115.85 + 91 389.969 1473 2 1 114.772 -47.0915 -144.45 + 91 449.629 664 2 0 114.773 -47.0933 -145.85 + 91 99.9133 1473 1 1 114.784 -47.1311 -174.45 + 91 116.821 664 1 0 114.785 -47.1336 -175.85 + 91 128.712 1473 0 1 114.809 -47.1874 -204.45 + 91 113.711 664 0 0 114.809 -47.1883 -205.85 + 91 73.2932 579 0 0 96.3647 -64.05 -206.007 + 91 63.1148 1058 2 1 31.732 -46.2176 -144.45 + 91 55.1065 1057 2 1 31.65 -46.2601 -144.522 + 91 242.069 778 2 0 28.1799 -24.3603 -146.25 + 91 123.146 750 2 0 76.0517 -29.9004 -146.25 + 91 32.2991 1052 2 0 81.7458 30.5972 -146.25 + 91 61.3524 1283 2 0 107.263 76.6935 -146.25 + 91 55.1623 988 4 1 17.8184 75.2084 -84.85 + 91 120.967 664 6 0 115.531 -47.146 -25.85 + 91 142.74 1472 2 1 114.75 -47.1045 -144.621 + 91 148.161 1385 1 1 97.3289 -47.6263 -174.45 + 91 78.754 1384 1 1 97.15 -48.0493 -174.757 + 91 56.9365 652 1 0 95.9081 -49.6074 -175.85 + 91 80.428 651 1 0 95.8715 -49.6502 -175.881 + 91 69.237 650 1 0 95.7134 -49.85 -176.009 + 91 79.9509 649 1 0 95.5688 -50.05 -176.124 + 91 0.97823 648 1 0 95.4171 -50.25 -176.248 + 91 22.982 73 1 0 71.2261 -165.456 -176.25 + 91 53.7585 72 1 0 71.2492 -165.55 -176.209 + 91 59.2084 71 1 0 71.2855 -165.75 -176.123 + 91 57.137 70 1 0 71.312 -165.95 -176.055 + 91 68.1944 69 1 0 71.3341 -166.151 -175.974 + 91 67.7763 68 1 0 71.3503 -166.35 -175.91 + 91 32.5838 1259 1 1 72.0258 -170.247 -174.85 + 91 183.54 1260 1 1 72.0503 -170.362 -174.813 + 91 82.381 1261 1 1 72.25 -170.931 -174.576 + 91 72.6756 1469 1 1 114.076 -48.1234 -174.45 + 91 84.7949 1468 1 1 113.95 -48.1589 -174.651 + 91 111.617 658 1 0 113.237 -48.3589 -175.85 + 91 155.003 1376 0 1 95.4466 -53.5677 -204.451 + 91 17.3975 1375 0 1 95.35 -53.7176 -204.79 + 91 72.1875 629 0 0 95.0199 -54.1599 -205.85 + 91 40.7317 628 0 0 94.9523 -54.25 -206.062 +Number of digits in this event: 24 Using G4ParticleGun... -Particle energy: 7.30955 LIN +Particle energy: 5.19562 LIN Particle: e- Event: 92 -Number of tracker hits in this event: 62 - 92 115.347 1084 10 1 36.9873 78.0095 95.55 - 92 160.432 1289 10 0 36.988 78.0096 94.15 - 92 127.195 1084 9 1 36.9986 78.0109 65.55 - 92 148.525 1289 9 0 36.9984 78.0104 64.15 - 92 114.046 1084 8 1 36.9933 78.0001 35.55 - 92 144.444 1289 8 0 36.9928 77.9998 34.15 - 92 130.212 1084 7 1 36.9854 77.9964 5.55 - 92 125.757 1289 7 0 36.9874 77.9962 4.15 - 92 128.018 1084 6 1 37.0148 78.0051 -24.45 - 92 204.602 1289 6 0 37.0155 78.0058 -25.85 - 92 346.928 1084 5 1 37.0296 78.0199 -54.45 - 92 320.91 1289 5 0 37.0311 78.0205 -55.85 - 92 176.924 1085 4 1 37.0645 78.035 -84.45 - 92 123.2 1289 4 0 37.0671 78.0351 -85.85 - 92 104.359 1085 3 1 37.1218 78.0296 -114.45 - 92 112.438 1289 3 0 37.1238 78.0279 -115.85 - 92 138.075 1085 2 1 37.1688 78.0019 -144.45 - 92 131.708 1289 2 0 37.171 77.9988 -145.85 - 92 129.349 1085 1 1 37.2216 77.9299 -174.45 - 92 151.286 1289 1 0 37.2251 77.9282 -175.85 - 92 162.657 1086 0 1 37.3053 77.8952 -204.45 - 92 122.067 1289 0 0 37.3077 77.8955 -205.85 - 92 44.2471 881 8 1 -3.65 42.6836 35.3884 - 92 77.149 1290 5 0 37.0272 78.0503 -55.8642 - 92 39.0523 1011 0 0 112.104 22.25 -206.035 - 92 175.326 1461 0 1 112.46 23.001 -204.85 - 92 116.72 1288 5 0 37.0582 77.8151 -55.8508 - 92 100.717 1092 4 1 38.4667 68.1406 -84.4512 - 92 13.957 1093 4 1 38.6501 68.2276 -84.8019 - 92 38.1058 1242 4 0 39.2126 68.6062 -85.8503 - 92 177.468 1243 4 0 39.2776 68.65 -85.9722 - 92 125.201 1127 3 1 45.623 78.6836 -114.45 - 92 160.635 1292 3 0 45.5622 78.5463 -115.85 - 92 9.78607 1105 2 1 41.0534 69.261 -144.45 - 92 135.094 1104 2 1 41.0499 69.2615 -144.458 - 92 128.241 1246 2 0 40.5609 69.3459 -145.85 - 92 151.619 1315 2 0 -25.9073 83.2182 -146.25 - 92 177.032 1316 2 0 -25.9517 83.2501 -146.219 - 92 162.002 1379 2 0 -32.9961 95.979 -146.25 - 92 104.637 1378 2 0 -32.9737 95.95 -146.015 - 92 39.3172 1085 5 1 37.05 78.2421 -54.7154 - 92 104.556 1291 5 0 37.1343 78.3106 -55.85 - 92 109.829 1096 4 1 39.2896 77.7481 -84.45 - 92 127.702 1285 4 0 39.168 77.1807 -85.85 - 92 14.0066 1284 4 0 39.1248 77.05 -86.1835 - 92 27.4817 1069 3 1 33.9802 64.8719 -114.45 - 92 79.7486 1070 3 1 34.05 64.8386 -114.531 - 92 42.0344 1071 3 1 34.2501 64.7431 -114.756 - 92 79.4828 1221 3 0 35.3199 64.3446 -115.85 - 92 95.4296 1220 3 0 35.5295 64.25 -116.055 - 92 8.84118 1208 2 1 61.8192 55.1296 -144.45 - 92 65.0346 1209 2 1 61.85 55.1353 -144.468 - 92 72.6366 1210 2 1 62.0503 55.1714 -144.566 - 92 54.4377 1211 2 1 62.25 55.1958 -144.673 - 92 32.6154 1212 2 1 62.45 55.2283 -144.777 - 92 237.335 1178 2 0 64.3245 55.6529 -145.85 - 92 123.029 1440 1 1 108.227 59.8015 -174.45 - 92 35.1129 1439 1 1 108.15 59.7437 -174.712 - 92 86.9894 1197 1 0 107.982 59.5796 -175.85 - 92 101.211 1068 3 1 33.803 64.9467 -114.45 - 92 62.3814 1067 3 1 33.6499 65.0327 -114.651 - 92 130.611 1224 3 0 33.1535 65.011 -115.85 -Number of digits in this event: 35 +Number of tracker hits in this event: 37 + 92 123.005 1186 10 1 57.4419 72.3424 95.55 + 92 127.265 1261 10 0 57.4431 72.3428 94.15 + 92 120.056 1187 9 1 57.4689 72.3457 65.55 + 92 108.212 1261 9 0 57.4701 72.3456 64.15 + 92 129.293 1187 8 1 57.5003 72.3518 35.55 + 92 146.425 1261 8 0 57.5019 72.3516 34.15 + 92 122.244 1187 7 1 57.5411 72.3485 5.55 + 92 106.426 1261 7 0 57.5421 72.3481 4.15 + 92 106.809 1187 6 1 57.5652 72.3429 -24.45 + 92 157.225 1261 6 0 57.5664 72.3437 -25.85 + 92 120.921 1187 5 1 57.5902 72.3627 -54.45 + 92 130.315 1261 5 0 57.5918 72.3621 -55.85 + 92 213.252 1187 4 1 57.6264 72.3471 -84.45 + 92 357.638 1261 4 0 57.6268 72.3459 -85.85 + 92 139.333 1187 3 1 57.6368 72.3275 -114.45 + 92 131.442 1261 3 0 57.6379 72.325 -115.85 + 92 117.552 1188 2 1 57.6547 72.279 -144.45 + 92 124.283 1261 2 0 57.6558 72.276 -145.85 + 92 106.308 1188 1 1 57.6745 72.2116 -174.45 + 92 145.578 1260 1 0 57.6745 72.2082 -175.85 + 92 181.037 1188 0 1 57.6785 72.1385 -204.45 + 92 107.476 1260 0 0 57.6789 72.1369 -205.85 + 92 158.016 1183 3 1 56.7896 71.4592 -114.451 + 92 195.237 1259 3 0 56.3289 71.9017 -115.85 + 92 80.3455 1134 2 1 46.9536 81.3429 -144.45 + 92 23.1029 1133 2 1 46.85 81.4379 -144.757 + 92 81.6595 1308 2 0 46.4777 81.7773 -145.85 + 92 49.8467 1309 2 0 46.399 81.85 -146.085 + 92 82.5236 1086 1 1 37.3762 90.026 -174.45 + 92 142.435 1350 1 0 36.8415 90.2062 -175.85 + 92 18.3947 1028 0 1 25.6727 94.1946 -204.45 + 92 204.279 1027 0 1 25.6499 94.187 -204.513 + 92 182.002 1369 0 0 25.1728 94.0303 -205.85 + 92 82.2148 1270 4 0 58.6469 74.1834 -86.25 + 92 33.2793 1271 4 0 58.6286 74.25 -85.9677 + 92 111.545 1192 4 1 58.4932 74.8033 -84.8496 + 92 64.5046 1191 4 1 58.4499 74.9274 -84.6141 +Number of digits in this event: 22 Using G4ParticleGun... -Particle energy: 1.98036 LIN +Particle energy: 9.84326 LIN Particle: e- Event: 93 -Number of tracker hits in this event: 27 - 93 112.87 531 9 1 -73.7529 107.408 65.55 - 93 98.8399 1436 9 0 -73.7497 107.41 64.15 - 93 240.816 531 8 1 -73.7082 107.452 35.55 - 93 138.245 1436 8 0 -73.7097 107.455 34.15 - 93 123.19 531 7 1 -73.7395 107.512 5.55 - 93 157.137 1436 7 0 -73.739 107.513 4.15 - 93 132.512 531 6 1 -73.728 107.529 -24.45 - 93 250.589 1436 6 0 -73.7233 107.528 -25.85 - 93 127.102 532 5 1 -73.641 107.502 -54.45 - 93 219.943 1436 5 0 -73.639 107.503 -55.85 - 93 122.14 532 4 1 -73.6054 107.536 -84.45 - 93 132.099 1436 4 0 -73.6038 107.534 -85.85 - 93 165.472 532 3 1 -73.5565 107.494 -114.45 - 93 121.307 1436 3 0 -73.5526 107.494 -115.85 - 93 110.331 532 2 1 -73.4907 107.572 -144.45 - 93 97.5741 1437 2 0 -73.496 107.583 -145.85 - 93 113.144 532 1 1 -73.5959 107.761 -174.45 - 93 131.204 1438 1 0 -73.5952 107.772 -175.85 - 93 130.695 532 0 1 -73.6053 107.953 -204.45 - 93 121.029 1439 0 0 -73.6095 107.954 -205.85 - 93 14.3217 1643 2 0 -133.625 148.75 -145.983 - 93 129.795 227 2 1 -134.725 149.444 -144.85 - 93 156.858 226 2 1 -134.75 149.615 -144.675 - 93 73.1389 525 0 1 -74.887 124.21 -204.85 - 93 62.4178 526 0 1 -74.85 124.114 -204.757 - 93 39.3994 531 5 1 -73.7842 107.511 -54.45 - 93 59.8909 1435 5 0 -74.0026 107.35 -56.0322 -Number of digits in this event: 19 +Number of tracker hits in this event: 86 + 93 204.139 663 11 1 -47.2513 48.7013 125.55 + 93 100.019 1143 11 0 -47.2518 48.7019 124.15 + 93 110.95 663 10 1 -47.2627 48.7136 95.55 + 93 199.22 1143 10 0 -47.2631 48.7145 94.15 + 93 118.171 663 9 1 -47.2589 48.7362 65.55 + 93 104.036 1143 9 0 -47.2536 48.7362 64.15 + 93 122.515 664 8 1 -47.1219 48.7367 35.55 + 93 128.871 1143 8 0 -47.118 48.7371 34.15 + 93 120.241 665 7 1 -47.0251 48.7376 5.55 + 93 91.877 1143 7 0 -47.0362 48.7398 4.15 + 93 135.21 663 6 1 -47.2545 48.7707 -24.45 + 93 106.087 1143 6 0 -47.2644 48.7783 -25.85 + 93 163.763 663 5 1 -47.4467 48.9357 -54.45 + 93 130.223 1144 5 0 -47.4588 48.9037 -55.85 + 93 240.807 661 4 1 -47.6703 48.1615 -84.45 + 93 129.038 1140 4 0 -47.8155 48.1784 -85.85 + 93 128.253 646 3 1 -50.6779 48.3509 -114.45 + 93 110.891 1141 3 0 -50.8825 48.2731 -115.85 + 93 156.587 623 2 1 -55.2669 46.8072 -144.45 + 93 149.766 1133 2 0 -55.4696 46.7531 -145.85 + 93 116.797 602 1 1 -59.5232 45.8933 -174.45 + 93 104.17 1128 1 0 -59.7351 45.8223 -175.85 + 93 180.039 579 0 1 -64.0599 44.5766 -204.45 + 93 96.2703 1122 0 0 -64.2416 44.4544 -205.85 + 93 87.253 1121 0 0 -64.2483 44.45 -205.901 + 93 523.893 667 3 1 -46.58 44.4946 -114.45 + 93 228.208 1121 3 0 -46.6614 44.3226 -115.85 + 93 37.1223 660 2 1 -47.8982 40.9626 -144.45 + 93 233.371 661 2 1 -47.85 41.0474 -144.54 + 93 27.6269 1112 2 0 -47.2339 42.5567 -145.85 + 93 67.6037 1113 2 0 -47.1899 42.65 -145.925 + 93 78.2335 1114 2 0 -47.0706 42.85 -146.064 + 93 46.9886 1115 2 0 -46.9523 43.05 -146.211 + 93 2.86982 680 2 1 -43.968 44.8281 -144.85 + 93 157.896 1121 2 0 -43.6129 44.3103 -145.85 + 93 47.0174 662 2 1 -47.65 41.1711 -144.757 + 93 105.147 1107 2 0 -45.6412 41.5904 -145.85 + 93 151.308 1108 2 0 -45.5258 41.65 -145.892 + 93 107.71 1027 2 0 -17.5118 25.6294 -146.25 + 93 52.2475 1028 2 0 -17.7117 25.65 -145.974 + 93 65.0076 806 2 1 -18.7971 25.7996 -144.85 + 93 93.1495 805 2 1 -18.85 25.8049 -144.817 + 93 178.601 1021 2 0 -20.6625 24.2753 -145.85 + 93 58.4598 1020 2 0 -20.7017 24.25 -145.86 + 93 32.1517 796 2 1 -20.6746 23.8781 -144.85 + 93 125.241 665 2 1 -46.8777 40.6528 -144.45 + 93 92.9102 1102 2 0 -46.9232 40.4887 -145.85 + 93 21.6575 1101 2 0 -46.937 40.45 -146.182 + 93 137.49 657 1 1 -48.5402 36.9347 -174.45 + 93 396.119 1083 1 0 -48.6139 36.7588 -175.85 + 93 224.693 651 0 1 -49.6737 33.4719 -204.45 + 93 136.024 1066 0 0 -49.7798 33.4093 -205.85 + 93 326.689 1082 1 0 -48.7498 36.65 -176.109 + 93 282.133 659 0 1 -48.2095 49.5096 -204.45 + 93 151.992 1146 0 0 -48.2793 49.3157 -205.85 + 93 196.577 1147 0 0 -48.1994 49.5319 -205.85 + 93 168.207 662 4 1 -47.6497 49.0861 -84.45 + 93 263.401 1145 4 0 -47.604 49.2009 -85.85 + 93 99.248 1157 3 0 -46.5031 51.6216 -115.85 + 93 22.1551 1158 3 0 -46.4923 51.65 -116.156 + 93 167.248 673 2 1 -45.2914 54.5015 -144.45 + 93 148.342 1173 2 0 -45.2682 54.6997 -145.85 + 93 117.457 677 1 1 -44.5639 58.9289 -174.45 + 93 129.648 1196 1 0 -44.5931 59.3073 -175.85 + 93 119.978 670 0 1 -45.8738 67.3731 -204.45 + 93 104.102 1238 0 0 -45.995 67.6679 -205.85 + 93 207.015 660 3 1 -48.0263 49.4113 -114.45 + 93 141.013 1146 3 0 -48.0449 49.4307 -115.85 + 93 111.644 658 2 1 -48.4254 49.8945 -144.45 + 93 112.345 1149 2 0 -48.4449 49.9021 -145.85 + 93 303.209 655 1 1 -48.9133 49.9939 -174.45 + 93 109.385 1149 1 0 -48.9513 49.9954 -175.85 + 93 124.248 1150 0 0 -49.8375 50.0574 -205.85 + 93 35.5572 1185 0 0 -40.449 57.2225 -206.25 + 93 133.025 1186 0 0 -40.4171 57.25 -206.191 + 93 5.93795 701 0 1 -39.659 57.6468 -204.85 + 93 160.556 702 0 1 -39.65 57.6519 -204.834 + 93 38.4698 703 0 1 -39.45 57.8188 -204.513 + 93 169.606 1078 1 0 -28.1801 35.8044 -176.25 + 93 79.9248 1077 1 0 -28.1278 35.65 -176.079 + 93 69.7733 761 1 1 -27.7466 34.907 -174.849 + 93 31.7937 762 1 1 -27.65 34.7987 -174.789 + 93 143.821 1073 1 0 -26.7751 34.7397 -175.85 + 93 38.4824 1017 1 0 -19.9905 23.5161 -176.25 + 93 253.017 1016 1 0 -19.9892 23.45 -176.194 + 93 57.8628 1018 1 0 -17.1063 23.65 -176.178 +Number of digits in this event: 45 Using G4ParticleGun... -Particle energy: 1.19547 LIN +Particle energy: 5.14088 LIN Particle: e- Event: 94 -Number of tracker hits in this event: 164 - 94 169.536 1396 10 1 99.4867 -35.4273 95.55 - 94 121.518 723 10 0 99.4841 -35.4276 94.15 - 94 135.244 1396 9 1 99.4346 -35.484 65.55 - 94 110.027 722 9 0 99.4289 -35.4884 64.15 - 94 135.184 1395 8 1 99.3129 -35.5581 35.55 - 94 113.826 722 8 0 99.3128 -35.5674 34.15 - 94 134.838 1396 7 1 99.3631 -35.7207 5.55 - 94 167.759 721 7 0 99.364 -35.7386 4.15 - 94 123.158 1395 6 1 99.3392 -36.0897 -24.45 - 94 108.996 719 6 0 99.3373 -36.1089 -25.85 - 94 182.727 1395 5 1 99.2343 -36.4716 -54.45 - 94 97.8536 717 5 0 99.2613 -36.4623 -55.85 - 94 62.498 1398 4 1 99.9376 -36.5147 -84.45 - 94 51.6156 1399 4 1 99.95 -36.5107 -84.6568 - 94 215.047 717 4 0 100.022 -36.4824 -85.85 - 94 218.735 1409 3 1 101.959 -35.745 -114.45 - 94 137.478 721 3 0 102.035 -35.7299 -115.85 - 94 100.493 1416 2 1 103.529 -35.2719 -144.45 - 94 30.8576 1417 2 1 103.55 -35.2594 -144.74 - 94 117.296 724 2 0 103.639 -35.2126 -145.85 - 94 82.1488 1428 1 1 105.925 -34.0224 -174.45 - 94 55.4564 1429 1 1 105.95 -34.0191 -174.695 - 94 105.595 730 1 0 106.064 -34.0044 -175.85 - 94 93.641 1443 0 1 108.938 -33.6842 -204.45 - 94 116.805 732 0 0 108.909 -33.5834 -205.85 - 94 32.8262 1408 3 1 101.95 -35.7183 -114.773 - 94 307.324 719 3 0 101.227 -36.0772 -115.85 - 94 49.2211 718 3 0 100.998 -36.25 -116.118 - 94 221.19 1395 4 1 99.3051 -36.5943 -84.45 - 94 9.3674 716 4 0 99.3687 -36.8435 -85.85 - 94 105.617 715 4 0 99.3707 -36.85 -85.8835 - 94 136.767 1375 3 1 95.2714 -41.9085 -114.45 - 94 80.6209 1374 3 1 95.15 -42.0293 -114.603 - 94 8.92651 1373 3 1 94.95 -42.2145 -114.827 - 94 44.9284 684 3 0 94.0675 -43.1949 -115.85 - 94 106.226 683 3 0 94.0124 -43.25 -115.927 - 94 22.4102 682 3 0 93.8255 -43.45 -116.192 - 94 168.322 1263 2 1 72.7426 -65.7223 -144.45 - 94 7.08384 561 2 0 72.4377 -67.8284 -145.85 - 94 70.4555 560 2 0 72.4316 -67.85 -145.863 - 94 102.873 559 2 0 72.378 -68.05 -145.977 - 94 66.936 558 2 0 72.2961 -68.25 -146.102 - 94 116.772 1161 1 1 52.3993 -98.9863 -174.45 - 94 78.2268 409 1 0 52.1058 -98.2426 -175.85 - 94 94.043 410 1 0 52.0909 -98.15 -176.016 - 94 41.5141 1122 0 1 44.5071 -77.8445 -204.45 - 94 153.241 1123 0 1 44.6501 -77.8525 -204.546 - 94 103.404 509 0 0 45.0693 -78.0557 -205.85 - 94 285.238 1392 3 1 98.5908 -37.4347 -114.45 - 94 288.985 713 3 0 99.0728 -37.3172 -115.85 - 94 143.139 1396 2 1 99.3994 -33.0099 -144.45 - 94 69.4133 1395 2 1 99.35 -33.1003 -144.641 - 94 108.03 731 2 0 99.0157 -33.6893 -145.851 - 94 17.4284 730 2 0 98.9414 -33.85 -146.176 - 94 49.7171 1356 1 1 91.464 -48.082 -174.45 - 94 86.733 1357 1 1 91.55 -48.2016 -174.609 - 94 35.3097 655 1 0 92.1558 -48.9945 -175.85 - 94 130.131 654 1 0 92.1953 -49.05 -175.943 - 94 61.1854 1393 0 1 98.8083 -64.0243 -204.45 - 94 80.5918 1394 0 1 98.95 -64.0421 -204.637 - 94 191.452 577 0 0 100.215 -64.5596 -205.85 - 94 73.9697 576 0 0 100.443 -64.65 -206.103 - 94 110.389 566 0 0 118.671 -66.8127 -206.25 - 94 90.723 567 0 0 118.665 -66.65 -206.052 - 94 6.70233 568 0 0 118.642 -66.4499 -205.872 - 94 264.044 1493 0 1 118.768 -65.5141 -204.85 - 94 263.935 1394 3 1 99.0618 -37.3487 -114.45 - 94 29.3018 1393 3 1 98.95 -37.449 -114.747 - 94 117.211 711 3 0 98.3955 -37.6741 -115.85 - 94 14.4671 1327 2 1 85.4789 -46.2136 -144.45 - 94 187.445 1326 2 1 85.45 -46.2685 -144.467 - 94 93.672 1325 2 1 85.2499 -46.6482 -144.641 - 94 23.9692 1324 2 1 85.0495 -46.9708 -144.811 - 94 32.2818 655 2 0 83.5104 -48.968 -145.85 - 94 81.8403 654 2 0 83.4446 -49.05 -145.895 - 94 172.096 653 2 0 83.2598 -49.25 -146.001 - 94 81.5761 652 2 0 83.0744 -49.45 -146.119 - 94 175.023 1111 1 1 42.4443 -83.7279 -174.45 - 94 58.8687 475 1 0 42.2631 -84.8856 -175.85 - 94 90.2655 474 1 0 42.2529 -85.05 -176.03 - 94 7.04284 473 1 0 42.2509 -85.2501 -176.232 - 94 70.0093 368 1 0 35.4262 -106.42 -176.25 - 94 97.5128 369 1 0 35.3856 -106.35 -176.061 - 94 15.3661 1090 1 1 38.1993 -106.779 -174.85 - 94 108.998 1091 1 1 38.25 -106.794 -174.833 - 94 143.704 1092 1 1 38.45 -106.893 -174.754 - 94 50.0237 1093 1 1 38.65 -107.146 -174.77 - 94 247.502 366 1 0 38.1645 -106.948 -175.85 - 94 59.8923 471 1 0 42.5722 -85.65 -176.105 - 94 180.442 1394 2 1 98.9553 -37.7762 -144.45 - 94 123.304 711 2 0 98.9454 -37.7877 -145.85 - 94 113.614 1393 1 1 98.8145 -38.0211 -174.45 - 94 139.244 710 1 0 98.7922 -38.0182 -175.85 - 94 197.007 1390 0 1 98.3277 -37.9268 -204.45 - 94 150.989 710 0 0 98.3008 -37.9234 -205.85 - 94 5.00354 279 8 0 47.9352 -124.15 33.776 - 94 141.443 720 7 0 99.4013 -35.85 3.92136 - 94 69.238 719 7 0 99.3962 -36.05 4.01965 - 94 300.577 1397 0 1 99.6306 -37.5833 -204.45 - 94 325.532 712 0 0 99.6997 -37.5284 -205.85 - 94 12.9783 1134 0 1 47.05 32.5359 -204.591 - 94 61.4998 1133 0 1 46.8495 32.7957 -204.517 - 94 60.1141 1132 0 1 46.65 32.9234 -204.511 - 94 156.084 1131 0 1 46.4499 32.9813 -204.46 - 94 149.237 1130 0 1 46.25 32.9487 -204.523 - 94 90.4825 1129 0 1 46.05 32.8796 -204.572 - 94 69.7887 1128 0 1 45.85 32.7717 -204.541 - 94 377.167 1127 0 1 45.65 32.7525 -204.544 - 94 11.2918 699 0 0 98.3721 -40.1225 -205.85 - 94 68.73 1391 0 1 98.4437 -40.8521 -204.85 - 94 228.647 1389 0 1 98.15 -40.9618 -204.77 - 94 168.148 1393 4 1 98.7798 -35.8985 -84.45 - 94 73.9769 1392 4 1 98.75 -35.8511 -84.6163 - 94 81.7439 722 4 0 98.5698 -35.5103 -85.85 - 94 69.2855 723 4 0 98.5352 -35.45 -86.0615 - 94 135.439 1362 3 1 92.6433 -28.8054 -114.45 - 94 148.147 759 3 0 92.3444 -28.2098 -115.85 - 94 7.88402 760 3 0 92.2677 -28.0499 -116.208 - 94 59.1104 1329 2 1 85.9197 -15.4214 -144.45 - 94 74.4434 1328 2 1 85.85 -15.4039 -144.62 - 94 9.48861 823 2 0 85.3576 -15.2539 -145.85 - 94 127.755 824 2 0 85.3453 -15.25 -145.882 - 94 114.979 1273 1 1 74.7423 -10.4194 -174.45 - 94 25.6325 1274 1 1 74.85 -10.4098 -174.822 - 94 69.5478 848 1 0 75.1871 -10.447 -175.85 - 94 42.1837 847 1 0 75.2158 -10.45 -175.927 - 94 207.139 1359 0 1 92.0083 -12.2352 -204.45 - 94 26.1897 853 0 0 93.2577 -9.37186 -205.85 - 94 309.237 1376 0 1 95.3575 -8.88733 -204.85 - 94 17.4855 1377 0 1 95.55 -12.3921 -204.712 - 94 91.9654 1365 3 1 93.1536 -27.9106 -114.85 - 94 228.532 747 0 0 96.5771 -30.508 -205.85 - 94 127.995 720 4 0 98.7014 -35.924 -85.85 - 94 110.644 1383 3 1 96.8687 -35.9313 -114.45 - 94 192.283 720 3 0 96.8398 -35.8806 -115.85 - 94 142.534 1378 2 1 95.9288 -34.9419 -144.45 - 94 257.237 725 2 0 95.9093 -34.9445 -145.851 - 94 111.156 1377 1 1 95.6425 -34.7324 -174.45 - 94 115.147 726 1 0 95.5939 -34.6971 -175.85 - 94 358.331 1372 0 1 94.6102 -33.9747 -204.45 - 94 98.985 730 0 0 94.6101 -33.9595 -205.85 - 94 110.459 728 0 0 94.4866 -34.2673 -205.851 - 94 70.5691 671 0 0 85.4113 -45.7107 -206.25 - 94 48.2922 670 0 0 85.3138 -45.85 -206.015 - 94 64.6763 1323 0 1 84.7481 -46.7668 -204.85 - 94 61.8121 1322 0 1 84.65 -46.9097 -204.64 - 94 11.3603 532 1 0 75.947 -73.6166 -176.25 - 94 248.743 531 1 0 75.9389 -73.65 -176.217 - 94 65.6598 530 1 0 75.895 -73.8504 -176.037 - 94 11.1311 529 1 0 75.8085 -74.05 -175.874 - 94 143.615 1275 1 1 75.1537 -75.4611 -174.85 - 94 500.978 242 2 0 -134.038 -131.55 -146.25 - 94 15.477 243 2 0 -135.21 -131.55 -145.877 - 94 88.4261 213 2 1 -137.444 -130.259 -144.85 - 94 170.572 212 2 1 -137.55 -130.195 -144.803 - 94 40.8219 211 2 1 -137.75 -130.097 -144.609 - 94 53.2915 214 2 1 -137.35 -130.088 -144.74 - 94 60.8059 247 2 0 -136.512 -130.666 -145.85 - 94 80.1573 246 2 0 -136.42 -130.75 -145.993 - 94 85.4987 245 2 0 -136.339 -130.95 -146.048 - 94 158.875 244 2 0 -136.334 -131.15 -145.981 - 94 10.6929 342 2 0 -98.7787 -111.658 -146.25 - 94 26.2614 227 2 0 -112.551 -134.613 -146.25 - 94 95.9958 733 0 0 95.0746 -33.4214 -205.85 -Number of digits in this event: 59 -Using G4ParticleGun... -Particle energy: 7.42717 LIN +Number of tracker hits in this event: 54 + 94 122.06 1473 10 0 -18.6895 114.875 94.15 + 94 116.804 806 9 1 -18.6844 114.876 65.55 + 94 149.926 1473 9 0 -18.6842 114.877 64.15 + 94 122.117 806 8 1 -18.6759 114.897 35.55 + 94 107.403 1473 8 0 -18.6738 114.898 34.15 + 94 110.087 807 7 1 -18.6284 114.925 5.55 + 94 120.924 1473 7 0 -18.6239 114.927 4.15 + 94 124.797 807 6 1 -18.5383 114.968 -24.45 + 94 164.566 1474 6 0 -18.5337 114.967 -25.85 + 94 129.475 808 5 1 -18.4359 114.939 -54.45 + 94 120.817 1473 5 0 -18.4214 114.919 -55.85 + 94 110.563 809 4 1 -18.0881 114.508 -84.45 + 94 183.572 1471 4 0 -18.0673 114.49 -85.85 + 94 140.676 812 3 1 -17.6294 114.134 -114.45 + 94 269.949 1469 3 0 -17.6122 114.113 -115.85 + 94 168.069 813 2 1 -17.2789 113.638 -144.45 + 94 119.924 1467 2 0 -17.2628 113.621 -145.85 + 94 104.573 815 1 1 -16.981 113.282 -174.45 + 94 239.369 1465 1 0 -16.9693 113.27 -175.85 + 94 114.887 816 0 1 -16.7155 112.993 -204.45 + 94 141.401 1464 0 0 -16.7015 112.975 -205.85 + 94 357.287 809 2 1 -18.1819 115.138 -144.45 + 94 133.037 1474 2 0 -18.2411 115.053 -145.85 + 94 107.625 801 1 1 -19.7272 113.196 -174.45 + 94 106.534 788 0 1 -22.376 112.772 -204.45 + 94 163.51 1463 0 0 -22.3864 112.803 -205.85 + 94 72.4689 1214 8 0 126.177 63.0173 33.75 + 94 104.481 1475 2 0 -18.194 115.302 -145.85 + 94 149.889 1476 2 0 -18.2039 115.35 -146.232 + 94 115.356 804 1 1 -19.1635 118.769 -174.45 + 94 124.748 1494 1 0 -19.1646 118.992 -175.85 + 94 273.993 802 0 1 -19.4572 123.167 -204.45 + 94 119.063 803 0 1 -19.45 123.172 -204.493 + 94 28.135 1515 0 0 -19.2231 123.336 -205.85 + 94 87.0397 1516 0 0 -19.205 123.35 -205.961 + 94 127.851 1512 0 0 -20.0214 122.6 -205.85 + 94 203.984 808 4 1 -18.3163 115.048 -84.45 + 94 251.91 1474 4 0 -18.2992 115.039 -85.85 + 94 114.603 810 3 1 -17.9596 114.759 -114.45 + 94 143.34 1472 3 0 -17.9211 114.73 -115.85 + 94 148.958 814 2 1 -17.1871 114.136 -144.45 + 94 107.539 1469 2 0 -17.149 114.114 -145.85 + 94 117.5 818 1 1 -16.2647 113.747 -174.45 + 94 188.374 1468 1 0 -16.2261 113.76 -175.85 + 94 96.2141 822 0 1 -15.5549 114.109 -204.45 + 94 459.821 1469 0 0 -15.5111 114.115 -205.85 + 94 113.737 809 3 1 -18.1394 115.056 -114.45 + 94 145.482 1474 3 0 -18.0849 115.067 -115.85 + 94 229.506 816 2 1 -16.8088 115.404 -144.45 + 94 137.551 823 1 1 -15.3129 115.192 -174.45 + 94 109.433 1475 1 0 -15.3057 115.16 -175.85 + 94 152.751 824 0 1 -15.2174 114.563 -204.45 + 94 142.069 1471 0 0 -15.2108 114.495 -205.85 + 94 36.688 815 2 1 -16.8501 115.357 -144.627 +Number of digits in this event: 34 +Using G4ParticleGun... +Particle energy: 5.70345 LIN Particle: e- Event: 95 -Number of tracker hits in this event: 82 - 95 156.655 1170 11 1 54.2088 -39.87 125.55 - 95 135.44 700 11 0 54.2083 -39.8698 124.15 - 95 105.392 1170 10 1 54.198 -39.8694 95.55 - 95 132.769 700 10 0 54.1974 -39.867 94.15 - 95 231.571 1170 9 1 54.1885 -39.8205 65.55 - 95 116.354 701 9 0 54.188 -39.819 64.15 - 95 113.938 1170 8 1 54.1807 -39.7855 35.55 - 95 106.733 701 8 0 54.1815 -39.7835 34.15 - 95 351.222 1170 7 1 54.1988 -39.7515 5.55 - 95 500.018 701 7 0 54.1966 -39.7509 4.15 - 95 262.691 1170 6 1 54.1459 -39.7461 -24.45 - 95 372.681 701 6 0 54.1431 -39.7474 -25.85 - 95 285.422 1170 5 1 54.0789 -39.779 -54.45 - 95 338.076 701 5 0 54.0736 -39.7811 -55.85 - 95 215.428 1169 4 1 53.9646 -39.8242 -84.45 - 95 419.212 701 4 0 53.9573 -39.8279 -85.85 - 95 111.531 1168 3 1 53.8158 -39.9049 -114.45 - 95 258.229 700 3 0 53.8089 -39.9076 -115.85 - 95 209.436 1168 2 1 53.6572 -39.9714 -144.45 - 95 134.895 700 2 0 53.6554 -39.9796 -145.85 - 95 142.087 1167 1 1 53.6231 -40.1521 -174.45 - 95 119.659 699 1 0 53.6191 -40.1542 -175.85 - 95 246.556 1167 0 1 53.5504 -40.1843 -204.45 - 95 131.335 699 0 0 53.5394 -40.1769 -205.85 - 95 84.2267 20 2 0 138.223 -175.95 -146.181 - 95 183.714 19 2 0 138.313 -176.15 -146.069 - 95 162.528 720 1 0 55.0518 -36.05 -176.227 - 95 39.408 1189 1 1 57.9746 -35.2266 -174.85 - 95 200.779 729 1 0 59.1984 -34.1514 -175.85 - 95 39.6438 728 1 0 59.233 -34.2501 -175.88 - 95 181.388 1194 1 1 58.9972 -34.6746 -174.85 - 95 285.604 1169 1 1 53.8676 -39.6897 -174.451 - 95 124.06 700 1 0 53.8532 -39.8697 -175.85 - 95 32.9824 1172 0 1 54.4644 -43.9155 -204.45 - 95 84.8545 1171 0 1 54.45 -43.9491 -204.597 - 95 50.8343 679 0 0 54.3088 -44.2135 -205.85 - 95 57.6285 678 0 0 54.2881 -44.25 -206.018 - 95 474.67 702 1 0 54.011 -39.606 -175.85 - 95 176.109 1179 0 1 55.927 -37.5808 -204.451 - 95 143.343 713 0 0 56.1031 -37.4376 -205.85 - 95 146.667 1171 6 1 54.2686 -39.7378 -24.45 - 95 112.603 1171 5 1 54.3509 -39.7727 -54.45 - 95 186.884 1171 4 1 54.3664 -39.7694 -84.45 - 95 352.647 1171 3 1 54.4065 -39.8955 -114.45 - 95 260.663 1172 2 1 54.5875 -40.0852 -144.45 - 95 111.615 699 2 0 54.5917 -40.1038 -145.85 - 95 210.517 1172 1 1 54.6318 -40.5102 -174.45 - 95 107.853 697 1 0 54.6414 -40.5263 -175.85 - 95 142.272 1173 0 1 54.8293 -40.8882 -204.45 - 95 149.312 695 0 0 54.831 -40.9 -205.85 - 95 6.57095 596 0 0 84.3026 -60.65 -206.044 - 95 73.3199 641 0 0 66.6396 -51.85 -205.914 - 95 50.8709 1331 0 1 86.3203 -61.6633 -204.85 - 95 153.342 1332 0 1 86.45 -61.7592 -204.802 - 95 365.746 1333 0 1 86.65 -62.1705 -204.812 - 95 429.301 701 3 0 54.44 -39.8187 -115.85 - 95 148.526 701 2 0 54.651 -39.6789 -145.85 - 95 143.566 1173 1 1 54.844 -39.6434 -174.45 - 95 336.735 1174 0 1 54.9842 -39.3967 -204.45 - 95 164.873 703 0 0 54.9931 -39.3764 -205.85 - 95 108.487 1165 2 1 53.1605 -36.5496 -144.45 - 95 161.794 717 2 0 53.185 -36.4976 -145.85 - 95 138.031 1164 1 1 53.0344 -34.4214 -174.45 - 95 349.738 1153 0 1 50.8262 -31.13 -204.45 - 95 117.634 745 0 0 50.6174 -30.9658 -205.85 - 95 118.775 1165 1 1 53.0502 -34.3702 -174.778 - 95 138.273 786 6 0 54.8305 -22.8192 -26.25 - 95 198.576 1169 3 1 53.9792 -39.6808 -114.45 - 95 106.576 702 2 0 53.843 -39.5682 -145.85 - 95 98.9637 1168 1 1 53.7463 -39.6168 -174.45 - 95 228.25 701 0 0 53.6183 -39.706 -205.85 - 95 58.71 622 1 0 105.542 -55.5335 -176.25 - 95 87.9528 702 0 0 53.6447 -39.6499 -206.028 - 95 7.63319 701 1 0 53.7623 -39.65 -176.217 - 95 105.916 551 1 0 77.933 -69.6831 -176.25 - 95 126.606 1169 5 1 54.05 -39.7671 -54.5045 - 95 31.252 703 5 0 53.7789 -39.2949 -55.85 - 95 90.9173 704 5 0 53.7651 -39.25 -55.9105 - 95 21.8789 705 5 0 53.7107 -39.05 -56.1775 - 95 181.145 1165 0 1 53.2223 -40.1348 -204.45 - 95 282.073 697 0 0 52.913 -40.5344 -205.85 - 95 93.8165 696 0 0 52.8605 -40.65 -206.024 -Number of digits in this event: 52 +Number of tracker hits in this event: 95 + 95 123.077 962 11 1 12.4827 40.2956 125.55 + 95 163.603 1101 11 0 12.4831 40.2952 124.15 + 95 143.259 962 10 1 12.4914 40.286 95.55 + 95 122.011 1101 10 0 12.4908 40.2862 94.15 + 95 105.87 962 9 1 12.4787 40.2891 65.55 + 95 102.211 1101 9 0 12.4788 40.2904 64.15 + 95 111.56 962 8 1 12.4721 40.3061 35.55 + 95 129.512 1101 8 0 12.4709 40.3064 34.15 + 95 397.681 961 7 1 12.4424 40.3109 5.55 + 95 272.531 1101 7 0 12.4383 40.3111 4.15 + 95 271.728 961 6 1 12.3536 40.3206 -24.45 + 95 222.969 1101 6 0 12.3491 40.3202 -25.85 + 95 163.013 961 5 1 12.2663 40.3168 -54.45 + 95 139.153 1101 5 0 12.2624 40.3156 -55.85 + 95 155.223 960 4 1 12.1757 40.2854 -84.45 + 95 136.42 1101 4 0 12.167 40.2848 -85.85 + 95 95.2846 959 3 1 11.982 40.2692 -114.45 + 95 423.135 1101 3 0 11.9711 40.2688 -115.85 + 95 111.806 958 2 1 11.7443 40.2601 -144.45 + 95 109.847 1101 2 0 11.7329 40.2608 -145.85 + 95 181.748 957 1 1 11.504 40.2742 -174.45 + 95 116.721 1101 1 0 11.4965 40.2744 -175.85 + 95 110.38 956 0 1 11.3487 40.2799 -204.45 + 95 118.497 1101 0 0 11.3415 40.2836 -205.85 + 95 7.96251 1102 3 0 11.8925 40.45 -115.901 + 95 34.5312 866 5 0 -152.689 -6.65 -56.2307 + 95 268.975 959 2 1 11.9939 40.2421 -144.451 + 95 95.6413 1102 2 0 12.0546 40.5582 -145.85 + 95 53.1107 1103 2 0 12.0495 40.6501 -146.158 + 95 34.2915 954 1 1 11.0041 48.8489 -174.45 + 95 71.132 955 1 1 11.0504 48.8552 -174.475 + 95 131.555 956 1 1 11.25 48.8529 -174.564 + 95 56.3415 958 1 1 11.65 48.917 -174.751 + 95 187.205 1144 1 0 13.958 48.9651 -175.85 + 95 429.093 1049 1 0 98.8545 29.9984 -176.25 + 95 480.066 1397 1 1 99.6778 30.3891 -174.85 + 95 75.2443 1398 1 1 99.75 30.4137 -174.716 + 95 63.0566 1399 1 1 99.95 30.3981 -174.663 + 95 126.463 1400 1 1 100.15 30.5126 -174.592 + 95 110.866 1401 1 1 100.35 30.6481 -174.563 + 95 181.38 1402 1 1 100.55 30.702 -174.504 + 95 95.7763 1100 2 0 12.1243 40.1261 -145.85 + 95 15.4286 1099 2 0 12.1331 40.05 -146.174 + 95 33.7346 965 1 1 13.1026 30.9468 -174.45 + 95 123.154 964 1 1 13.0498 30.8761 -174.501 + 95 16.1895 1048 1 0 12.5865 29.6815 -175.85 + 95 91.2568 1047 1 0 12.573 29.65 -175.883 + 95 68.014 1046 1 0 12.4714 29.45 -176.064 + 95 237.808 1100 7 0 12.315 40.1238 4.15 + 95 121.846 955 6 1 11.1996 35.0575 -24.4501 + 95 45.7323 1075 6 0 11.183 35.2356 -25.85 + 95 138.815 1076 6 0 11.1835 35.25 -25.9526 + 95 125.213 947 5 1 9.5941 36.9385 -54.45 + 95 64.3534 948 5 1 9.65 36.7634 -54.7052 + 95 23.3288 1078 5 0 10.1721 35.6952 -55.85 + 95 111.106 1077 5 0 10.1956 35.6499 -55.8981 + 95 92.1436 1076 5 0 10.3079 35.45 -56.1205 + 95 144.995 1020 4 1 24.2464 12.2766 -84.4505 + 95 41.3348 958 4 0 24.0801 11.7064 -85.85 + 95 74.2381 957 4 0 24.0604 11.6499 -86.0001 + 95 36.6825 1007 3 1 21.5647 1.08456 -114.45 + 95 84.2961 1008 3 1 21.65 1.06731 -114.564 + 95 4.48718 1009 3 1 21.85 1.08469 -114.837 + 95 152.118 905 3 0 22.7508 1.13274 -115.85 + 95 179.819 1151 2 1 50.2875 -2.18501 -144.45 + 95 66.3515 1152 2 1 50.45 -2.33425 -144.669 + 95 25.8569 1153 2 1 50.65 -2.25667 -144.784 + 95 148.718 888 2 0 52.357 -2.38736 -145.85 + 95 81.6865 889 2 0 52.7422 -2.25 -146.097 + 95 28.6095 1593 0 1 138.95 -16.6474 -204.796 + 95 275.55 1150 2 1 50.25 -2.6281 -144.639 + 95 113.444 1149 2 1 50.05 -2.77257 -144.473 + 95 90.698 893 2 0 50.2675 -1.38041 -145.85 + 95 141.099 894 2 0 50.2667 -1.25 -146.069 + 95 16.4818 895 2 0 50.1773 -1.05 -146.224 + 95 357.108 885 2 0 66.387 -2.98506 -146.25 + 95 117.645 884 2 0 66.3613 -3.05 -146.183 + 95 213.584 962 7 1 12.45 40.2645 5.18861 + 95 129.611 960 5 1 12.1037 40.4621 -54.45 + 95 138.129 1102 5 0 12.091 40.4658 -55.85 + 95 114.392 958 4 1 11.8407 40.5348 -84.45 + 95 117.24 1102 4 0 11.8261 40.5439 -85.85 + 95 167.614 957 3 1 11.521 40.724 -114.45 + 95 124.933 1103 3 0 11.5076 40.7309 -115.85 + 95 112.324 955 2 1 11.2175 40.8703 -144.45 + 95 226.55 1104 2 0 11.1995 40.8756 -145.85 + 95 85.5814 953 1 1 10.85 40.971 -174.505 + 95 116.816 1104 1 0 10.8342 40.9713 -175.85 + 95 15.0201 952 0 1 10.4511 40.9822 -204.45 + 95 98.0434 951 0 1 10.45 40.9825 -204.507 + 95 201.538 1104 0 0 10.4234 40.9875 -205.85 + 95 35.9014 1095 7 0 12.7659 39.1128 4.15 + 95 205.519 1094 7 0 12.7783 39.05 4.11023 + 95 501.884 1194 7 0 -8.32156 58.899 3.75 + 95 62.6233 1193 7 0 -8.342 58.85 3.90496 +Number of digits in this event: 45 Using G4ParticleGun... -Particle energy: 4.13984 LIN +Particle energy: 4.9576 LIN Particle: e- Event: 96 -Number of tracker hits in this event: 28 - 96 124.687 1289 10 1 78.0136 -44.6933 95.55 - 96 102.265 676 10 0 78.0129 -44.6924 94.15 - 96 96.989 1289 9 1 77.9938 -44.6785 65.55 - 96 156.242 676 9 0 77.9924 -44.6766 64.15 - 96 120.081 1289 8 1 77.9574 -44.6349 35.55 - 96 128.142 677 8 0 77.9549 -44.6343 34.15 - 96 131.119 1289 7 1 77.8914 -44.635 5.55 - 96 102.912 677 7 0 77.8894 -44.6343 4.15 - 96 137.113 1289 6 1 77.853 -44.62 -24.45 - 96 134.175 677 6 0 77.8511 -44.617 -25.85 - 96 110.873 1288 5 1 77.8115 -44.5561 -54.45 - 96 123.355 677 5 0 77.8141 -44.5544 -55.85 - 96 112.529 1289 4 1 77.8774 -44.5119 -84.45 - 96 108.011 677 4 0 77.8807 -44.5092 -85.85 - 96 141.033 1289 3 1 77.9563 -44.4614 -114.45 - 96 203.685 677 3 0 77.9572 -44.4631 -115.85 - 96 124.155 1289 2 1 77.9839 -44.4967 -144.45 - 96 144.29 677 2 0 77.9908 -44.4974 -145.85 - 96 148.787 1290 1 1 78.1775 -44.5145 -174.45 - 96 97.8861 677 1 0 78.2522 -44.5042 -175.85 - 96 126.672 1298 0 1 79.788 -44.2669 -204.45 - 96 105.692 679 0 0 79.8907 -44.1921 -205.85 - 96 8.70936 1528 4 1 125.95 66.3746 -84.7056 - 96 260.119 1527 4 1 125.75 66.7608 -84.5272 - 96 199.006 955 4 0 155.977 11.2024 -86.2498 - 96 109.26 956 4 0 155.949 11.25 -86.1839 - 96 248.554 1678 4 1 155.906 11.5073 -84.85 - 96 7.37815 1035 5 0 150.813 27.05 -56.22 -Number of digits in this event: 20 +Number of tracker hits in this event: 57 + 96 123.158 292 9 1 -121.74 13.2046 65.55 + 96 268.235 965 9 0 -121.74 13.2036 64.15 + 96 134.966 291 8 1 -121.756 13.1863 35.55 + 96 111.511 965 8 0 -121.754 13.1859 34.15 + 96 109.08 292 7 1 -121.725 13.1804 5.55 + 96 223.634 965 7 0 -121.722 13.1792 4.15 + 96 149.553 292 6 1 -121.654 13.1636 -24.45 + 96 125.417 965 6 0 -121.651 13.1627 -25.85 + 96 425.681 292 5 1 -121.585 13.1509 -54.45 + 96 303.602 965 5 0 -121.574 13.1545 -55.85 + 96 114.273 294 4 1 -121.345 13.2313 -84.45 + 96 137.419 965 4 0 -121.335 13.2365 -85.85 + 96 112.608 295 3 1 -121.137 13.3443 -114.45 + 96 124.234 966 3 0 -121.128 13.3504 -115.85 + 96 111.724 296 2 1 -120.942 13.4683 -144.45 + 96 132.242 967 2 0 -120.932 13.4733 -145.85 + 96 144.893 297 1 1 -120.732 13.5677 -174.45 + 96 130.383 967 1 0 -120.725 13.5714 -175.85 + 96 112.608 297 0 1 -120.571 13.6466 -204.45 + 96 177.106 968 0 0 -120.565 13.652 -205.85 + 96 191.846 388 4 0 -64.8777 -102.35 -86.1621 + 96 123.997 1491 2 1 118.35 -173.611 -144.777 + 96 200.135 1492 2 1 118.55 -173.825 -144.579 + 96 56.7724 1493 2 1 118.86 -174.322 -144.45 + 96 65.4241 22 2 0 118.035 -175.616 -145.85 + 96 65.5345 21 2 0 117.964 -175.75 -146.053 + 96 3.09859 288 4 1 -122.352 12.3692 -84.45 + 96 123.088 289 4 1 -122.35 12.3689 -84.4589 + 96 151.047 961 4 0 -121.984 12.3169 -85.8501 + 96 49.3123 325 3 1 -114.98 11.1161 -114.45 + 96 99.981 326 3 1 -114.95 11.124 -114.618 + 96 109.649 955 3 0 -114.73 11.1752 -115.85 + 96 165.59 351 2 1 -109.912 12.3452 -144.45 + 96 86.5864 961 2 0 -109.767 12.4309 -145.85 + 96 118.372 962 2 0 -109.73 12.45 -146.154 + 96 98.6099 369 1 1 -106.205 14.6789 -174.45 + 96 5.28574 370 1 1 -106.15 14.6807 -174.829 + 96 140.582 973 1 0 -106.01 14.681 -175.85 + 96 168.956 384 0 1 -103.264 14.4294 -204.45 + 96 152.899 972 0 0 -103.031 14.5139 -205.85 + 96 143.487 350 2 1 -109.95 12.3803 -144.809 + 96 143.734 964 5 0 -121.654 13.0267 -55.85 + 96 224.402 293 4 1 -121.541 9.81232 -84.4501 + 96 126.866 946 4 0 -121.562 9.44441 -85.85 + 96 114.974 292 3 1 -121.587 2.79786 -114.45 + 96 190.477 913 3 0 -121.95 2.689 -115.85 + 96 47.3235 247 2 1 -130.713 0.163389 -144.45 + 96 91.238 246 2 1 -130.75 0.0851795 -144.532 + 96 64.5312 895 2 0 -130.93 -0.900315 -145.85 + 96 72.7911 894 2 0 -130.944 -1.05003 -146.042 + 96 115.969 801 2 0 -120.242 -19.8068 -146.25 + 96 9.45247 302 2 1 -119.572 -20.0354 -144.85 + 96 214.558 303 2 1 -119.55 -20.0466 -144.809 + 96 216.269 304 2 1 -119.35 -20.1469 -144.553 + 96 99.8623 798 2 0 -120.04 -20.3899 -145.85 + 96 22.0315 799 2 0 -120.11 -20.25 -146.156 + 96 23.7879 249 4 1 -130.216 141.808 -84.85 +Number of digits in this event: 33 Using G4ParticleGun... -Particle energy: 7.48732 LIN +Particle energy: 4.43511 LIN Particle: e- Event: 97 -Number of tracker hits in this event: 57 - 97 120.124 486 9 1 -82.6921 88.4547 65.55 - 97 115.046 1342 9 0 -82.6922 88.4566 64.15 - 97 123.006 486 8 1 -82.6947 88.4926 35.55 - 97 172.131 1342 8 0 -82.6946 88.4948 34.15 - 97 160.202 486 7 1 -82.691 88.5379 5.55 - 97 132.528 1342 7 0 -82.6897 88.5403 4.15 - 97 122.135 486 6 1 -82.659 88.5908 -24.45 - 97 264.069 1342 6 0 -82.6582 88.5931 -25.85 - 97 116.233 487 5 1 -82.6401 88.637 -54.45 - 97 103.133 1342 5 0 -82.6392 88.6394 -55.85 - 97 300.726 487 4 1 -82.6161 88.6881 -84.45 - 97 114.208 1343 4 0 -82.611 88.6867 -85.85 - 97 108.549 487 3 1 -82.5096 88.66 -114.45 - 97 157.453 1343 3 0 -82.5027 88.6584 -115.85 - 97 314.289 488 2 1 -82.3695 88.6305 -144.45 - 97 266.233 1342 2 0 -82.3625 88.6283 -145.85 - 97 105.51 489 1 1 -82.2224 88.5856 -174.45 - 97 135.677 1342 1 0 -82.2156 88.5839 -175.85 - 97 132.655 489 0 1 -82.0798 88.5484 -204.45 - 97 168.228 1342 0 0 -82.0712 88.5472 -205.85 - 97 49.7907 141 1 1 -151.882 116.732 -174.45 - 97 60.8687 140 1 1 -151.95 116.728 -174.503 - 97 80.2017 139 1 1 -152.15 116.72 -174.605 - 97 55.2592 138 1 1 -152.351 116.715 -174.67 - 97 55.3208 137 1 1 -152.55 116.677 -174.781 - 97 235.964 1479 1 0 -155.651 116.126 -175.85 - 97 2.49599 108 1 1 -158.541 116.72 -174.85 - 97 54.407 107 1 1 -158.55 116.724 -174.845 - 97 61.0309 106 1 1 -158.75 116.81 -174.761 - 97 70.143 105 1 1 -158.95 116.798 -174.622 - 97 183.907 638 1 0 -147.805 -52.374 -176.25 - 97 180.271 487 2 1 -82.45 88.2035 -144.753 - 97 123.951 1341 2 0 -83.9575 88.45 -146.02 - 97 85.4188 1340 2 0 -84.0824 88.25 -146.128 - 97 69.1241 1339 2 0 -84.071 88.0499 -146.188 - 97 13.3955 1714 2 0 -17.4095 163.111 -146.25 - 97 46.1364 488 4 1 -82.45 88.6372 -84.5394 - 97 200.91 486 2 1 -82.6603 88.7019 -144.45 - 97 126.048 1344 2 0 -83.0925 88.9176 -145.85 - 97 2.70757 459 1 1 -88.2396 89.7108 -174.45 - 97 179.602 458 1 1 -88.25 89.705 -174.461 - 97 49.2973 457 1 1 -88.4506 89.5633 -174.554 - 97 61.3753 456 1 1 -88.6501 89.474 -174.569 - 97 70.2904 455 1 1 -88.8501 89.347 -174.604 - 97 55.7965 454 1 1 -89.05 89.255 -174.669 - 97 87.0396 453 1 1 -89.2504 89.1791 -174.73 - 97 11.2248 452 1 1 -89.45 89.0508 -174.829 - 97 16.6025 1337 1 0 -91.1835 87.4768 -175.85 - 97 161.272 1336 1 0 -91.2156 87.45 -175.87 - 97 27.3202 1335 1 0 -91.4033 87.25 -176.174 - 97 116.716 1341 1 0 -89.4635 88.3789 -175.85 - 97 161.904 1340 1 0 -89.4384 88.25 -175.974 - 97 55.0847 1345 2 0 -82.1984 89.1884 -145.85 - 97 73.6785 1346 2 0 -82.1484 89.25 -146.002 - 97 180.167 1437 2 0 -83.901 107.56 -146.25 - 97 21.6515 1436 2 0 -83.8762 107.55 -145.919 - 97 114.608 481 2 1 -83.7085 107.351 -144.85 -Number of digits in this event: 26 +Number of tracker hits in this event: 95 + 97 226.405 890 11 1 -1.87753 -8.91744 125.55 + 97 294.382 855 11 0 -1.87571 -8.91694 124.15 + 97 111.92 891 10 1 -1.83296 -8.91223 95.55 + 97 131.098 855 10 0 -1.83178 -8.91249 94.15 + 97 120.522 891 9 1 -1.81148 -8.9244 65.55 + 97 140.36 855 9 0 -1.8094 -8.92431 64.15 + 97 214.89 891 8 1 -1.766 -8.92083 35.55 + 97 114.762 855 8 0 -1.76525 -8.92102 34.15 + 97 99.7587 891 7 1 -1.73721 -8.92783 5.55 + 97 123.526 855 7 0 -1.73848 -8.92824 4.15 + 97 109.9 891 6 1 -1.76371 -8.92974 -24.45 + 97 349.27 855 6 0 -1.76344 -8.93074 -25.85 + 97 140.979 891 5 1 -1.76061 -8.95486 -54.45 + 97 168.742 855 5 0 -1.76035 -8.96055 -55.85 + 97 126.452 890 4 1 -1.90368 -9.05812 -84.45 + 97 165.58 854 4 0 -1.92215 -9.06618 -85.85 + 97 220.205 888 3 1 -2.44768 -9.05492 -114.45 + 97 141.949 855 3 0 -2.4489 -8.9633 -115.85 + 97 321.144 888 2 1 -2.39129 -7.06331 -144.45 + 97 419.706 865 2 0 -2.43124 -6.97329 -145.85 + 97 168.724 884 1 1 -3.0978 -5.27814 -174.45 + 97 181.269 874 1 0 -3.17928 -5.1627 -175.85 + 97 136.645 875 0 1 -4.92577 -2.89425 -204.45 + 97 140.001 886 0 0 -5.04054 -2.79405 -205.85 + 97 46.1836 872 1 0 -2.70502 -5.60916 -175.85 + 97 76.1351 871 1 0 -2.64533 -5.65002 -176.01 + 97 91.7055 929 0 1 6.02081 -11.7988 -204.45 + 97 44.9442 928 0 1 5.85 -11.8005 -204.745 + 97 157.799 841 0 0 5.28207 -11.7644 -205.851 + 97 66.9511 940 2 0 83.9188 8.12783 -146.25 + 97 326.668 889 3 1 -2.05704 -9.12894 -114.45 + 97 218.305 854 3 0 -2.08937 -9.11344 -115.85 + 97 143.504 885 2 1 -2.93514 -8.7448 -144.45 + 97 171.603 884 2 1 -3.05 -8.17537 -144.561 + 97 27.5295 883 2 1 -3.25 -7.60863 -144.802 + 97 5.6347 871 2 0 -4.47484 -5.66758 -145.85 + 97 76.6931 872 2 0 -4.48535 -5.6499 -145.86 + 97 83.1557 873 2 0 -4.59195 -5.45 -145.97 + 97 83.6817 874 2 0 -4.69428 -5.24995 -146.092 + 97 171.79 988 2 0 -51.9933 17.6585 -146.25 + 97 57.9123 580 2 1 -63.9081 11.4106 -144.85 + 97 49.8416 579 2 1 -64.05 11.3406 -144.83 + 97 63.7077 578 2 1 -64.2501 11.2409 -144.807 + 97 64.4898 577 2 1 -64.4502 11.105 -144.772 + 97 71.3277 576 2 1 -64.65 10.9575 -144.768 + 97 98.8198 575 2 1 -64.85 10.8032 -144.806 + 97 87.7768 574 2 1 -65.05 10.6858 -144.835 + 97 63.8612 573 2 1 -65.2508 10.5971 -144.734 + 97 58.1931 572 2 1 -65.4502 10.5003 -144.617 + 97 22.5161 571 2 1 -65.65 10.4303 -144.514 + 97 85.8211 637 2 1 -52.4733 17.5613 -144.85 + 97 143.16 638 2 1 -52.45 17.537 -144.755 + 97 155.817 889 2 1 -2.24978 -8.96947 -144.468 + 97 277.41 852 2 0 -1.51291 -9.50154 -145.85 + 97 96.8298 851 2 0 -1.32308 -9.65 -146.16 + 97 154.006 729 2 0 14.1811 -34.1881 -146.25 + 97 140.98 970 2 1 14.112 -33.3664 -144.85 + 97 70.0804 887 2 1 -2.45 -8.86836 -144.763 + 97 81.165 857 2 0 -3.22199 -8.55014 -145.85 + 97 83.7665 858 2 0 -3.25437 -8.44958 -146.028 + 97 51.8559 859 2 0 -3.14073 -8.25 -146.16 + 97 73.3391 860 2 0 -3.07963 -8.04936 -146.201 + 97 284.276 861 2 0 -2.99133 -7.84998 -146.241 + 97 135.572 862 2 0 -2.54526 -7.6499 -146.102 + 97 5.50496 895 2 1 -0.869421 -7.31742 -144.85 + 97 20.8971 896 2 1 -0.849109 -7.31365 -144.836 + 97 208.183 853 2 0 1.76267 -9.29616 -145.85 + 97 106.702 886 2 1 -2.72909 -9.59724 -144.45 + 97 146.699 885 1 1 -2.87046 -10.2725 -174.45 + 97 95.974 848 1 0 -2.87572 -10.3219 -175.85 + 97 104.566 885 0 1 -2.90785 -11.52 -204.45 + 97 151.47 842 0 0 -2.91102 -11.5573 -205.85 + 97 102.673 785 0 0 52.2251 -22.8581 -206.25 + 97 14.8467 1174 0 1 54.9858 -22.8612 -204.85 + 97 77.3019 1175 0 1 55.05 -22.86 -204.819 + 97 81.2035 1176 0 1 55.2501 -22.8505 -204.687 + 97 121.325 690 1 0 -7.12516 -41.85 -176.212 + 97 213.814 866 1 1 -6.70531 -42.264 -174.85 + 97 21.8325 865 0 0 -33.1486 -6.97507 -206.25 + 97 263.106 890 2 1 -1.94754 -9.23469 -144.451 + 97 152.564 854 2 0 -2.03034 -9.18538 -145.85 + 97 219.358 883 1 1 -3.39502 -7.80186 -174.45 + 97 116.413 861 1 0 -3.43979 -7.83152 -175.85 + 97 4.16255 880 0 1 -4.04786 -8.53417 -204.45 + 97 101.618 879 0 1 -4.05 -8.53516 -204.467 + 97 131.655 857 0 0 -4.21223 -8.62266 -205.85 + 97 104.323 889 1 1 -2.18665 -9.92315 -174.45 + 97 131.617 850 1 0 -2.16668 -9.95596 -175.85 + 97 160.282 890 0 1 -1.85465 -10.8928 -204.45 + 97 151.656 845 0 0 -1.86284 -10.9428 -205.85 + 97 85.3571 856 0 0 -1.52885 -8.81249 -205.85 + 97 76.7775 890 8 1 -1.85 -8.86579 35.2627 + 97 0.330515 1323 0 0 -19.6502 84.691 -206.25 + 97 93.4536 889 11 1 -2.05013 -8.85727 125.443 + 97 211.709 854 11 0 -1.58296 -9.05003 123.879 +Number of digits in this event: 48 Using G4ParticleGun... -Particle energy: 5.64952 LIN +Particle energy: 8.9651 LIN Particle: e- Event: 98 -Number of tracker hits in this event: 30 - 98 135.254 1189 9 1 57.8949 -119.138 65.55 - 98 160.725 305 9 0 57.8993 -119.132 64.15 - 98 236.364 1189 8 1 57.9771 -118.993 35.55 - 98 137.693 305 8 0 57.9883 -119.001 34.15 - 98 144.17 1191 7 1 58.2537 -119.199 5.55 - 98 151.42 304 7 0 58.267 -119.224 4.15 - 98 167.244 1192 6 1 58.5517 -119.737 -24.45 - 98 121.784 301 6 0 58.5441 -119.778 -25.85 - 98 26.9287 1191 5 1 58.4122 -120.651 -54.45 - 98 109.209 1192 5 1 58.45 -120.666 -54.5504 - 98 193.417 296 5 0 58.9455 -120.864 -55.85 - 98 123.69 1249 4 1 69.8865 -125.108 -84.45 - 98 0.621321 1250 4 1 70.05 -125.186 -84.8442 - 98 148.839 273 4 0 70.4608 -125.387 -85.85 - 98 153.422 1310 3 1 82.0753 -131.042 -114.45 - 98 104.782 244 3 0 82.6891 -131.286 -115.85 - 98 7.67774 243 3 0 82.852 -131.35 -116.22 - 98 85.3662 1376 2 1 95.4315 -136.648 -144.45 - 98 43.9066 1377 2 1 95.55 -136.705 -144.747 - 98 62.8166 216 2 0 95.9929 -136.912 -145.85 - 98 124.727 215 2 0 96.0748 -136.95 -146.054 - 98 40.0601 1436 1 1 107.508 -142.018 -174.45 - 98 115.605 1437 1 1 107.55 -142.039 -174.542 - 98 19.702 189 1 0 108.158 -142.332 -175.85 - 98 393.128 188 1 0 108.195 -142.35 -175.93 - 98 42.9116 1507 0 1 121.698 -148.981 -204.45 - 98 96.3655 1508 0 1 121.75 -148.999 -204.578 - 98 190.752 154 0 0 122.248 -149.171 -205.85 - 98 29.469 1441 1 1 108.35 -142.067 -174.709 - 98 247.243 187 1 0 107.9 -142.55 -175.926 -Number of digits in this event: 20 +Number of tracker hits in this event: 27 + 98 122.4 839 10 1 -12.1868 -93.3438 95.55 + 98 170.269 434 10 0 -12.1866 -93.3432 94.15 + 98 127.737 839 9 1 -12.1815 -93.328 65.55 + 98 109.296 434 9 0 -12.1804 -93.3276 64.15 + 98 105.899 839 8 1 -12.1557 -93.3175 35.55 + 98 117.578 434 8 0 -12.1542 -93.3158 34.15 + 98 242.142 839 7 1 -12.1232 -93.2836 5.55 + 98 110.969 434 7 0 -12.122 -93.2813 4.15 + 98 127.015 839 6 1 -12.1013 -93.2377 -24.45 + 98 101.923 434 6 0 -12.0993 -93.2364 -25.85 + 98 124.535 839 5 1 -12.0551 -93.2119 -54.45 + 98 92.1192 434 5 0 -12.0538 -93.2114 -55.85 + 98 124.068 840 4 1 -12.0275 -93.2005 -84.45 + 98 139.793 434 4 0 -12.0272 -93.2003 -85.85 + 98 109.451 840 3 1 -12.0229 -93.1969 -114.45 + 98 125.862 434 3 0 -12.0224 -93.1959 -115.85 + 98 128.504 840 2 1 -12.0109 -93.1777 -144.45 + 98 153.21 434 2 0 -12.0091 -93.1784 -145.85 + 98 123.765 840 1 1 -11.9673 -93.1948 -174.45 + 98 159.462 434 1 0 -11.9651 -93.1953 -175.85 + 98 132.229 840 0 1 -11.9175 -93.2066 -204.45 + 98 97.1919 434 0 0 -11.9142 -93.207 -205.85 + 98 212.915 97 1 0 -23.8869 -160.582 -176.25 + 98 124.359 440 9 1 -91.9669 -47.4974 65.15 + 98 63.7888 758 4 1 -28.25 -72.1458 -84.6887 + 98 6.39265 277 10 0 44.8062 -124.694 93.75 + 98 99.119 759 4 1 -28.25 -72.2447 -84.6828 +Number of digits in this event: 19 Using G4ParticleGun... -Particle energy: 1.43513 LIN +Particle energy: 2.13628 LIN Particle: e- Event: 99 -Number of tracker hits in this event: 48 - 99 409.9 1324 10 1 84.9371 48.4438 95.55 - 99 123.962 1141 10 0 84.9373 48.4465 94.15 - 99 114.319 1324 9 1 84.9378 48.51 65.55 - 99 113.173 1142 9 0 84.9379 48.5157 64.15 - 99 114.708 1324 8 1 84.8912 48.4798 35.55 - 99 127.621 1142 8 0 84.8985 48.5591 34.15 - 99 143.218 1325 7 1 85.1617 50.1175 5.54944 - 99 178.544 1150 7 0 85.3026 50.1146 4.15 - 99 167.483 1339 6 1 87.9976 50.0624 -24.45 - 99 175.964 1149 6 0 88.1239 50.0247 -25.85 - 99 115.036 1352 5 1 90.6543 49.1448 -54.4501 - 99 112.224 1144 5 0 90.8498 49.0286 -55.85 - 99 170.359 1371 4 1 94.4967 46.7083 -84.45 - 99 26.8401 1372 4 1 94.5501 46.7042 -84.7359 - 99 112.511 1133 4 0 94.7695 46.6912 -85.85 - 99 138.139 1401 3 1 100.364 46.7583 -114.45 - 99 230.4 1133 3 0 100.618 46.8055 -115.851 - 99 3.59711 1426 2 1 105.548 48.0161 -144.45 - 99 136.642 1427 2 1 105.55 48.0168 -144.465 - 99 230.563 1140 2 0 105.75 48.0663 -145.85 - 99 63.9686 1447 1 1 109.716 49.0625 -174.45 - 99 68.3284 1448 1 1 109.75 49.057 -174.643 - 99 120.462 1144 1 0 109.978 49.0286 -175.85 - 99 117.871 1476 0 1 115.355 47.885 -204.45 - 99 98.1072 1138 0 0 115.528 47.6974 -205.85 - 99 20.6794 1137 0 0 115.569 47.65 -206.195 - 99 122.779 1150 6 0 88.0654 50.0501 -26.2199 - 99 240.365 1421 0 1 104.36 80.0767 -204.85 - 99 234.135 1325 2 1 85.1521 49.0835 -144.45 - 99 350.282 1145 2 0 85.1442 49.09 -145.85 - 99 114.275 1324 1 1 84.9537 49.255 -174.45 - 99 275.85 1145 1 0 84.9364 49.2464 -175.85 - 99 140.566 1322 0 1 84.5565 49.159 -204.45 - 99 132.366 1145 0 0 84.5435 49.1456 -205.85 - 99 183.545 826 0 1 -14.65 38.7161 -204.606 - 99 56.4462 1182 0 0 0.372532 56.45 -206.017 - 99 135.277 1325 1 1 85.1705 49.0826 -174.45 - 99 0.091777 1326 0 1 85.25 48.9154 -204.45 - 99 135.203 1325 0 1 85.25 48.9154 -204.453 - 99 322.296 1144 0 0 85.2394 48.9103 -205.85 - 99 91.3876 1359 8 1 92.1146 157.181 35.15 - 99 52.7362 1125 10 0 86.3667 45.1416 94.15 - 99 347.574 1124 10 0 86.4017 45.0497 94.1094 - 99 5.03995 1123 10 0 86.6601 44.85 94.1364 - 99 246.321 1332 10 1 86.4544 43.9918 95.1503 - 99 143.164 1333 10 1 86.65 43.6062 95.2412 - 99 47.1567 1146 10 0 84.8608 49.285 94.15 - 99 330.934 1145 10 0 84.909 49.25 94.0662 +Number of tracker hits in this event: 70 + 99 167.885 398 8 1 -100.443 -102.772 35.55 + 99 96.9789 386 8 0 -100.441 -102.773 34.15 + 99 159.99 398 7 1 -100.362 -102.789 5.55 + 99 144.808 386 7 0 -100.36 -102.788 4.15 + 99 106.685 399 6 1 -100.346 -102.773 -24.45 + 99 120.493 386 6 0 -100.343 -102.774 -25.85 + 99 127.499 399 5 1 -100.246 -102.766 -54.45 + 99 115.753 386 5 0 -100.24 -102.769 -55.85 + 99 293.079 400 4 1 -100.14 -102.859 -84.45 + 99 153.38 386 4 0 -100.137 -102.875 -85.85 + 99 139.989 400 3 1 -100.095 -103.214 -114.45 + 99 117.917 384 3 0 -100.087 -103.235 -115.85 + 99 110.76 401 2 1 -99.9297 -103.69 -144.45 + 99 159.155 382 2 0 -99.9254 -103.718 -145.85 + 99 100.485 401 1 1 -99.8206 -104.307 -174.45 + 99 201.121 379 1 0 -99.8099 -104.338 -175.85 + 99 215.076 402 0 1 -99.5657 -104.947 -204.45 + 99 133.866 375 0 0 -99.5568 -104.982 -205.85 + 99 142.512 1777 4 1 175.574 -89.1024 -84.45 + 99 245.104 1778 4 1 175.75 -89.2632 -84.678 + 99 118.553 399 4 1 -100.15 -102.912 -84.6064 + 99 1.32255 384 4 0 -100.653 -103.347 -85.85 + 99 94.4855 383 4 0 -100.657 -103.35 -85.8584 + 99 30.4947 382 4 0 -100.91 -103.55 -86.1688 + 99 11.1544 328 3 1 -114.507 -128.664 -114.45 + 99 49.3909 327 3 1 -114.55 -128.683 -114.465 + 99 62.9095 326 3 1 -114.75 -128.778 -114.507 + 99 8.89415 325 3 1 -114.95 -128.8 -114.467 + 99 4.17778 244 3 0 -120.678 -131.15 -116.096 + 99 120.153 388 4 0 -100.647 -102.494 -85.85 + 99 42.5721 471 4 0 -122.422 -85.6956 -86.25 + 99 89.9378 472 4 0 -122.455 -85.65 -86.1091 + 99 148.234 287 4 1 -122.607 -85.0146 -84.8499 + 99 63.5253 564 5 0 -134.525 -67.1776 -56.25 + 99 78.1137 565 5 0 -134.615 -67.0499 -56.0342 + 99 66.0628 224 5 1 -135.232 -65.4813 -54.8499 + 99 133.079 223 5 1 -135.35 -65.2859 -54.6941 + 99 72.0967 222 5 1 -135.55 -64.9906 -54.5103 + 99 56.8387 221 5 1 -135.75 -64.953 -54.4689 + 99 57.9664 220 5 1 -135.95 -65.0263 -54.4515 + 99 46.9553 219 5 1 -136.15 -65.1207 -54.4658 + 99 81.1033 218 5 1 -136.35 -65.2321 -54.4811 + 99 115.856 217 5 1 -136.55 -65.4133 -54.635 + 99 117.16 567 5 0 -137.108 -66.4927 -55.85 + 99 74.4977 566 5 0 -137.228 -66.65 -56.0916 + 99 248.9 454 4 0 -115.52 -89.082 -86.25 + 99 84.3806 453 4 0 -115.357 -89.25 -86.0792 + 99 224.932 399 3 1 -100.255 -102.798 -114.45 + 99 106.687 386 3 0 -100.494 -102.834 -115.85 + 99 48.7046 374 2 1 -105.254 -105.511 -144.45 + 99 79.4222 373 2 1 -105.35 -105.574 -144.611 + 99 129.505 370 2 0 -105.984 -105.961 -145.85 + 99 3.14772 289 1 1 -122.343 -113.136 -174.45 + 99 142.254 288 1 1 -122.35 -113.136 -174.458 + 99 64.6783 287 1 1 -122.55 -113.127 -174.686 + 99 168.003 336 1 0 -123.621 -112.871 -175.85 + 99 96.223 146 0 1 -150.809 -104.956 -204.45 + 99 73.064 145 0 1 -150.95 -104.802 -204.664 + 99 77.356 381 0 0 -151.852 -103.882 -205.85 + 99 222.619 382 0 0 -152.011 -103.75 -206.031 + 99 169.334 387 3 0 -100.314 -102.734 -115.85 + 99 172.578 384 2 1 -103.219 -100.988 -144.45 + 99 113.502 395 2 0 -103.432 -101.099 -145.85 + 99 98.6047 376 1 1 -104.834 -102.782 -174.45 + 99 126.086 386 1 0 -104.649 -102.801 -175.85 + 99 18.2338 388 0 1 -102.372 -103.548 -204.45 + 99 126.744 389 0 1 -102.35 -103.551 -204.495 + 99 260.179 399 0 1 -100.192 -102.765 -204.45 + 99 94.1472 387 0 0 -100.209 -102.747 -205.85 + 99 122.01 386 0 0 -100.198 -102.761 -205.85 Number of digits in this event: 31 Run terminated. Run Summary Number of events processed : 100 - User=44.600000s Real=44.953509s Sys=0.030000s + User=37.160000s Real=37.380651s Sys=0.020000s End of Run 2 There are 6 h1 histograms There are 6 h2 histograms diff --git a/examples/advanced/gorad/gorad.out b/examples/advanced/gorad/gorad.out index 2378ce13e4e..a9efc8a24ae 100644 --- a/examples/advanced/gorad/gorad.out +++ b/examples/advanced/gorad/gorad.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -222,19 +222,19 @@ Index : 3 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100000 - User=156.380000s Real=157.658563s Sys=0.010000s + User=126.920000s Real=127.924804s Sys=0.000000s /control/doifBatch /score/dumpAllQuantitiesToFile Probes Probes.csv /score/dumpAllQuantitiesToFile Probes Probes.csv # Mesh or volume name: Probes -- # Primitive scorer name: dose - bin 0,0,0 : statistical error 38.3446(%) - to reduce the statistical error below 10%, increase number of events approximately 14.7031 times. + bin 0,0,0 : statistical error 24.7746(%) + to reduce the statistical error below 10%, increase number of events approximately 6.13782 times. # Mesh or volume name: Probes -- # Primitive scorer name: protonFlux - bin 0,0,0 : statistical error 30.7962(%) - to reduce the statistical error below 10%, increase number of events approximately 9.48408 times. + bin 0,0,0 : statistical error 21.2599(%) + to reduce the statistical error below 10%, increase number of events approximately 4.51983 times. # Mesh or volume name: Probes -- # Primitive scorer name: volFlx - bin 0,0,0 : statistical error 27.6707(%) - to reduce the statistical error below 10%, increase number of events approximately 7.65669 times. + bin 0,0,0 : statistical error 19.3005(%) + to reduce the statistical error below 10%, increase number of events approximately 3.72508 times. ================== Deleting memory pools =================== Number of memory pools allocated: 12 of which, static: 0 -Dynamic pools deleted: 12 / Total memory freed: 1.5 MB +Dynamic pools deleted: 12 / Total memory freed: 1.2 MB ============================================================ diff --git a/examples/advanced/hadrontherapy/hadrontherapy.out b/examples/advanced/hadrontherapy/hadrontherapy.out index 671a05da1ee..297b5e8d60a 100644 --- a/examples/advanced/hadrontherapy/hadrontherapy.out +++ b/examples/advanced/hadrontherapy/hadrontherapy.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -269,7 +271,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -309,7 +311,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -341,7 +343,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -410,7 +412,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -442,7 +444,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -474,7 +476,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -506,7 +508,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -538,7 +540,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -570,7 +572,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -602,7 +604,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -688,12 +690,12 @@ Run 0 starts ... Run terminated. Run Summary Number of events processed : 500 - User=5.220000s Real=5.314105s Sys=0.050000s + User=4.800000s Real=4.979722s Sys=0.050000s Graphics systems deleted. Visualization Manager deleting... -The simulation took: 8.36214 s to run (real time) +The simulation took: 8.03673 s to run (real time) Dose is being written to Dose.out i j k Dose(Gy)================== Deleting memory pools =================== Number of memory pools allocated: 14 of which, static: 0 -Dynamic pools deleted: 14 / Total memory freed: 0.46 MB +Dynamic pools deleted: 14 / Total memory freed: 0.57 MB ============================================================ diff --git a/examples/advanced/human_phantom/human_phantom.out b/examples/advanced/human_phantom/human_phantom.out index 0a414b51076..148df3a1b56 100644 --- a/examples/advanced/human_phantom/human_phantom.out +++ b/examples/advanced/human_phantom/human_phantom.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -43,7 +43,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -538,7 +540,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -578,7 +580,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -611,7 +613,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -681,7 +683,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -714,7 +716,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -747,7 +749,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -780,7 +782,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -813,7 +815,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -846,7 +848,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -879,7 +881,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV diff --git a/examples/advanced/iort_therapy/iort_therapy.out b/examples/advanced/iort_therapy/iort_therapy.out index 1fb1dd0ad1b..d2398f54c72 100644 --- a/examples/advanced/iort_therapy/iort_therapy.out +++ b/examples/advanced/iort_therapy/iort_therapy.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -42,7 +42,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -590,7 +592,7 @@ Run 0 starts ... Run terminated. Run Summary Number of events processed : 2000 - User=9.460000s Real=9.814651s Sys=0.260000s + User=9.450000s Real=10.013765s Sys=0.200000s /score/dumpQuantityToFile boxMesh_1 dose dose.out Graphics systems deleted. Visualization Manager deleting... diff --git a/examples/advanced/lAr_calorimeter/lAr_calorimeter.out b/examples/advanced/lAr_calorimeter/lAr_calorimeter.out index 7c5eaf050b4..b9172704bb0 100644 --- a/examples/advanced/lAr_calorimeter/lAr_calorimeter.out +++ b/examples/advanced/lAr_calorimeter/lAr_calorimeter.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -50,7 +50,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -214,7 +216,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -246,7 +248,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -278,7 +280,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -291,7 +293,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -337,7 +338,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -369,7 +370,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -401,7 +402,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -433,7 +434,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -465,7 +466,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -497,7 +498,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -529,7 +530,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -915,12 +916,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ### G4LevelReader: broken transition 0 from level 24 to 24 for isotope Z= 89 A= 219 - use ground level ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1050,13 +1060,13 @@ Start closing geometry. G4GeometryManager::ReportVoxelStats -- Voxel Statistics Total memory consumed for geometry optimisation: 395 kByte - Total CPU time elapsed for geometry optimisation: 0.32 seconds + Total CPU time elapsed for geometry optimisation: 0.26 seconds Voxelisation: top CPU users: Percent Total CPU System CPU Memory Volume ------- ---------- ---------- -------- ---------- - 50.00 0.16 0.00 152k EmModuleLogical - 50.00 0.16 0.00 238k HadModuleLogical + 50.00 0.13 0.00 152k EmModuleLogical + 50.00 0.13 0.00 238k HadModuleLogical 0.00 0.00 0.00 4k Mother 0.00 0.00 0.00 0k CryostatLogical 0.00 0.00 0.00 0k LArgLogical @@ -1067,8 +1077,8 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Voxelisation: top memory users: Percent Memory Heads Nodes Pointers Total CPU Volume ------- -------- ------ ------ -------- ---------- ---------- - 60.17 238k 1385 2370 3792 0.16 HadModuleLogical - 38.50 152k 1129 1152 2426 0.16 EmModuleLogical + 60.17 238k 1385 2370 3792 0.13 HadModuleLogical + 38.50 152k 1129 1152 2426 0.13 EmModuleLogical 0.93 3k 8 42 146 0.00 Mother 0.12 0k 1 7 8 0.00 SolidWLogical 0.12 0k 1 7 8 0.00 CuPlateLogical @@ -1086,352 +1096,352 @@ Read 2001 events from file data-tracks/tracks-20GeV.dat ---> Begin of event: 1 **** Primary : 1 Vertex : (5.55552,7.16569,32740) -Number of F1 Tiles with Positive energy : 55 +Number of F1 Tiles with Positive energy : 59 Number of F2 tiles with Positive energy : 0 Visisble Energy in S1 , S2 , S3 in (MeV) -1.71231 2.98995 3.52679 +1.71231 2.9493 3.44161 Visible Energy in Hole Counter (MeV) -0 59.2601 +0 32.0741 Visible Energy in Upstream Dead Materials -1744.46 +1372.65 Visible Energy in Tail Catcher Scintillator 0 0 0 0 0 0 0 Visible Energy in Tail Catcher Absorber 0 0 0 0 0 0 -N Tracks out of world 51 +N Tracks out of world 61 N Secondaries 86 -EmEdep is=17318.5 MeV -HadEdep is=0 MeV -Edep in FCAL1 FCAl2 : 17318.5 0 +EmEdep is=17610.5 MeV +HadEdep is=13.7131 MeV +Edep in FCAL1 FCAl2 : 17610.5 13.7131 **** Primary : 2 Vertex : (-3.76032,10.9751,32740) -Number of F1 Tiles with Positive energy : 49 +Number of F1 Tiles with Positive energy : 55 Number of F2 tiles with Positive energy : 0 Visisble Energy in S1 , S2 , S3 in (MeV) -1.87162 1.92888 1.72147 +1.52701 1.90627 1.52244 Visible Energy in Hole Counter (MeV) -0 114.393 +0 137.097 Visible Energy in Upstream Dead Materials -2341.52 +1303.18 Visible Energy in Tail Catcher Scintillator 0 0 0 0 0 0 0 Visible Energy in Tail Catcher Absorber 0 0 0 0 0 0 -N Tracks out of world 95 -N Secondaries 113 -EmEdep is=16041 MeV -HadEdep is=0 MeV -Edep in FCAL1 FCAl2 : 16041 0 +N Tracks out of world 58 +N Secondaries 128 +EmEdep is=17359.5 MeV +HadEdep is=0.770403 MeV +Edep in FCAL1 FCAl2 : 17359.5 0.770403 **** Primary : 3 Vertex : (13.1951,2.677,32740) -Number of F1 Tiles with Positive energy : 47 +Number of F1 Tiles with Positive energy : 43 Number of F2 tiles with Positive energy : 0 Visisble Energy in S1 , S2 , S3 in (MeV) -1.82234 1.64612 1.57421 +1.85161 1.72217 1.54485 Visible Energy in Hole Counter (MeV) 0 0 Visible Energy in Upstream Dead Materials -30.6329 +7.78697 Visible Energy in Tail Catcher Scintillator 0 0 0 0 0 0 0 Visible Energy in Tail Catcher Absorber 0 0 0 0 0 0 -N Tracks out of world 5 -N Secondaries 287 -EmEdep is=19697.6 MeV -HadEdep is=6.17895 MeV -Edep in FCAL1 FCAl2 : 19697.6 6.17895 +N Tracks out of world 1 +N Secondaries 209 +EmEdep is=19900 MeV +HadEdep is=1.8511 MeV +Edep in FCAL1 FCAl2 : 19900 1.8511 **** Primary : 4 Vertex : (-8.66148,-8.80731,32740) -Number of F1 Tiles with Positive energy : 48 +Number of F1 Tiles with Positive energy : 44 Number of F2 tiles with Positive energy : 0 Visisble Energy in S1 , S2 , S3 in (MeV) -2.24023 1.5691 1.99345 +1.74477 1.72368 1.57059 Visible Energy in Hole Counter (MeV) 0 0 Visible Energy in Upstream Dead Materials -6.62809 +6.52953 Visible Energy in Tail Catcher Scintillator 0 0 0 0 0 0 0 Visible Energy in Tail Catcher Absorber 0 0 0 0 0 0 -N Tracks out of world 6 -N Secondaries 298 -EmEdep is=19854.6 MeV -HadEdep is=2.18466 MeV -Edep in FCAL1 FCAl2 : 19854.6 2.18466 +N Tracks out of world 2 +N Secondaries 203 +EmEdep is=19703 MeV +HadEdep is=0 MeV +Edep in FCAL1 FCAl2 : 19703 0 **** Primary : 5 Vertex : (4.75859,7.01622,32740) -Number of F1 Tiles with Positive energy : 44 +Number of F1 Tiles with Positive energy : 54 Number of F2 tiles with Positive energy : 0 Visisble Energy in S1 , S2 , S3 in (MeV) -1.71216 1.57322 1.81781 +1.55138 4.94933 1.7509 Visible Energy in Hole Counter (MeV) -0 0 +0 73.5589 Visible Energy in Upstream Dead Materials -7.393 +821.666 Visible Energy in Tail Catcher Scintillator 0 0 0 0 0 0 0 Visible Energy in Tail Catcher Absorber 0 0 0 0 0 0 -N Tracks out of world 3 -N Secondaries 193 -EmEdep is=19779.2 MeV -HadEdep is=7.92109 MeV -Edep in FCAL1 FCAl2 : 19779.2 7.92109 +N Tracks out of world 34 +N Secondaries 73 +EmEdep is=17927.8 MeV +HadEdep is=0 MeV +Edep in FCAL1 FCAl2 : 17927.8 0 **** Primary : 6 Vertex : (1.94335,14.9228,32740) -Number of F1 Tiles with Positive energy : 40 +Number of F1 Tiles with Positive energy : 57 Number of F2 tiles with Positive energy : 0 Visisble Energy in S1 , S2 , S3 in (MeV) -2.80826 1.83647 1.71984 +1.54202 2.68524 1.85422 Visible Energy in Hole Counter (MeV) -0 56.4375 +0 144.546 Visible Energy in Upstream Dead Materials -591.166 +1011.66 Visible Energy in Tail Catcher Scintillator 0 0 0 0 0 0 0 Visible Energy in Tail Catcher Absorber 0 0 0 0 0 0 -N Tracks out of world 24 -N Secondaries 216 -EmEdep is=18665.4 MeV -HadEdep is=2.03402 MeV -Edep in FCAL1 FCAl2 : 18665.4 2.03402 +N Tracks out of world 65 +N Secondaries 133 +EmEdep is=17463.2 MeV +HadEdep is=6.00078 MeV +Edep in FCAL1 FCAl2 : 17463.2 6.00078 **** Primary : 7 Vertex : (-10.9878,-6.7949,32740) -Number of F1 Tiles with Positive energy : 42 +Number of F1 Tiles with Positive energy : 75 Number of F2 tiles with Positive energy : 0 Visisble Energy in S1 , S2 , S3 in (MeV) -1.5804 1.96594 1.88546 +1.90567 3.40503 2.48706 Visible Energy in Hole Counter (MeV) -0 0 +0 139.211 Visible Energy in Upstream Dead Materials -8.46772 +5765.37 Visible Energy in Tail Catcher Scintillator 0 0 0 0 0 0 0 Visible Energy in Tail Catcher Absorber 0 0 0 0 0 0 -N Tracks out of world 5 -N Secondaries 128 -EmEdep is=19800.9 MeV +N Tracks out of world 184 +N Secondaries 251 +EmEdep is=11968 MeV HadEdep is=0 MeV -Edep in FCAL1 FCAl2 : 19800.9 0 +Edep in FCAL1 FCAl2 : 11968 0 **** Primary : 8 Vertex : (10.9757,-1.49585,32740) -Number of F1 Tiles with Positive energy : 44 +Number of F1 Tiles with Positive energy : 47 Number of F2 tiles with Positive energy : 0 Visisble Energy in S1 , S2 , S3 in (MeV) -1.57833 1.6999 1.67647 +1.66122 2.81189 3.22355 Visible Energy in Hole Counter (MeV) 0 0 Visible Energy in Upstream Dead Materials -3.29726 +3.07205 Visible Energy in Tail Catcher Scintillator 0 0 0 0 0 0 0 Visible Energy in Tail Catcher Absorber 0 0 0 0 0 0 -N Tracks out of world 2 -N Secondaries 298 -EmEdep is=19874.7 MeV -HadEdep is=0 MeV -Edep in FCAL1 FCAl2 : 19874.7 0 +N Tracks out of world 1 +N Secondaries 294 +EmEdep is=19819 MeV +HadEdep is=8.67455 MeV +Edep in FCAL1 FCAl2 : 19819 8.67455 **** Primary : 9 Vertex : (-27.7734,3.36444,32740) -Number of F1 Tiles with Positive energy : 59 +Number of F1 Tiles with Positive energy : 67 Number of F2 tiles with Positive energy : 0 Visisble Energy in S1 , S2 , S3 in (MeV) -1.93688 2.49148 1.68114 +1.52472 2.44428 1.84001 Visible Energy in Hole Counter (MeV) -0 69.3636 +0 129.115 Visible Energy in Upstream Dead Materials -7002.76 +8699.4 Visible Energy in Tail Catcher Scintillator 0 0 0 0 0 0 0 Visible Energy in Tail Catcher Absorber 0 0 0 0 0 0 -N Tracks out of world 191 -N Secondaries 152 -EmEdep is=10752.3 MeV -HadEdep is=0.652787 MeV -Edep in FCAL1 FCAl2 : 10752.3 0.652787 +N Tracks out of world 251 +N Secondaries 320 +EmEdep is=8992.89 MeV +HadEdep is=2.55865 MeV +Edep in FCAL1 FCAl2 : 8992.89 2.55865 **** Primary : 10 Vertex : (-22.5474,4.1006,32740) -Number of F1 Tiles with Positive energy : 51 +Number of F1 Tiles with Positive energy : 42 Number of F2 tiles with Positive energy : 0 Visisble Energy in S1 , S2 , S3 in (MeV) -1.67064 2.37068 4.58452 +1.56407 1.53001 1.82565 Visible Energy in Hole Counter (MeV) 0 0 Visible Energy in Upstream Dead Materials -4.37874 +4.49519 Visible Energy in Tail Catcher Scintillator -0.0548004 0 0 0 0 0 0 +0 0 0 0 0 0 0 Visible Energy in Tail Catcher Absorber -0.00228468 0 0 0 0 0 -N Tracks out of world 7 -N Secondaries 268 -EmEdep is=19709.1 MeV -HadEdep is=2.32481 MeV -Edep in FCAL1 FCAl2 : 19709.1 2.32481 +0 0 0 0 0 0 +N Tracks out of world 0 +N Secondaries 195 +EmEdep is=19800.3 MeV +HadEdep is=0 MeV +Edep in FCAL1 FCAl2 : 19800.3 0 ---> Begin of event: 11 **** Primary : 11 Vertex : (-6.31939,21.5056,32740) -Number of F1 Tiles with Positive energy : 76 +Number of F1 Tiles with Positive energy : 71 Number of F2 tiles with Positive energy : 0 Visisble Energy in S1 , S2 , S3 in (MeV) -1.81065 1.66862 1.8954 +1.54164 1.71126 1.59721 Visible Energy in Hole Counter (MeV) -0 96.6734 +0 176.532 Visible Energy in Upstream Dead Materials -6898.98 +6686.54 Visible Energy in Tail Catcher Scintillator 0 0 0 0 0 0 0 Visible Energy in Tail Catcher Absorber -0 0 0 0 0 0 -N Tracks out of world 169 -N Secondaries 72 -EmEdep is=10591.5 MeV -HadEdep is=1.08337 MeV -Edep in FCAL1 FCAl2 : 10591.5 1.08337 +0.118848 0 0 0 0 0 +N Tracks out of world 242 +N Secondaries 113 +EmEdep is=10533.2 MeV +HadEdep is=0 MeV +Edep in FCAL1 FCAl2 : 10533.2 0 **** Primary : 12 Vertex : (17.1015,6.30557,32740) -Number of F1 Tiles with Positive energy : 53 +Number of F1 Tiles with Positive energy : 45 Number of F2 tiles with Positive energy : 0 Visisble Energy in S1 , S2 , S3 in (MeV) -1.63468 1.58395 1.68024 +1.48206 1.52776 1.68422 Visible Energy in Hole Counter (MeV) 0 0 Visible Energy in Upstream Dead Materials -7.32858 +3.81244 Visible Energy in Tail Catcher Scintillator 0 0 0 0 0 0 0 Visible Energy in Tail Catcher Absorber 0 0 0 0 0 0 -N Tracks out of world 5 -N Secondaries 210 -EmEdep is=19821.1 MeV -HadEdep is=0.715842 MeV -Edep in FCAL1 FCAl2 : 19821.1 0.715842 +N Tracks out of world 2 +N Secondaries 159 +EmEdep is=19848.9 MeV +HadEdep is=0.219479 MeV +Edep in FCAL1 FCAl2 : 19848.9 0.219479 **** Primary : 13 Vertex : (-24.9484,11.8659,32740) -Number of F1 Tiles with Positive energy : 6 +Number of F1 Tiles with Positive energy : 58 Number of F2 tiles with Positive energy : 0 Visisble Energy in S1 , S2 , S3 in (MeV) -1.57473 2.597 2.02058 +2.44751 1.90267 1.66902 Visible Energy in Hole Counter (MeV) -0 41.2781 +0 178.901 Visible Energy in Upstream Dead Materials -19234.2 +8717.33 Visible Energy in Tail Catcher Scintillator 0 0 0 0 0 0 0 Visible Energy in Tail Catcher Absorber 0 0 0 0 0 0 -N Tracks out of world 156 -N Secondaries 270 -EmEdep is=154.305 MeV -HadEdep is=0.74704 MeV -Edep in FCAL1 FCAl2 : 154.305 0.74704 +N Tracks out of world 212 +N Secondaries 76 +EmEdep is=9371.29 MeV +HadEdep is=1.80074 MeV +Edep in FCAL1 FCAl2 : 9371.29 1.80074 **** Primary : 14 Vertex : (-0.133696,18.3151,32740) -Number of F1 Tiles with Positive energy : 46 -Number of F2 tiles with Positive energy : 0 +Number of F1 Tiles with Positive energy : 44 +Number of F2 tiles with Positive energy : 1 Visisble Energy in S1 , S2 , S3 in (MeV) -2.28961 3.49663 2.25446 +2.66622 1.59886 1.54882 Visible Energy in Hole Counter (MeV) 0 0 Visible Energy in Upstream Dead Materials -21.9865 +11.1094 Visible Energy in Tail Catcher Scintillator 0 0 0 0 0 0 0 Visible Energy in Tail Catcher Absorber 0 0 0 0 0 0 N Tracks out of world 3 -N Secondaries 202 -EmEdep is=19696.6 MeV -HadEdep is=15.3392 MeV -Edep in FCAL1 FCAl2 : 19696.6 15.3392 +N Secondaries 170 +EmEdep is=19724.8 MeV +HadEdep is=12.2943 MeV +Edep in FCAL1 FCAl2 : 19724.8 12.2943 **** Primary : 15 Vertex : (17.3196,17.6617,32740) -Number of F1 Tiles with Positive energy : 48 +Number of F1 Tiles with Positive energy : 47 Number of F2 tiles with Positive energy : 0 Visisble Energy in S1 , S2 , S3 in (MeV) -2.78029 2.20745 1.84498 +1.55148 1.77448 1.57078 Visible Energy in Hole Counter (MeV) 0 0 Visible Energy in Upstream Dead Materials -4.84631 +10.0732 Visible Energy in Tail Catcher Scintillator 0 0 0 0 0 0 0 Visible Energy in Tail Catcher Absorber 0 0 0 0 0 0 -N Tracks out of world 2 -N Secondaries 196 -EmEdep is=19832.6 MeV -HadEdep is=0 MeV -Edep in FCAL1 FCAl2 : 19832.6 0 +N Tracks out of world 7 +N Secondaries 220 +EmEdep is=19809.2 MeV +HadEdep is=0.799317 MeV +Edep in FCAL1 FCAl2 : 19809.2 0.799317 **** Primary : 16 Vertex : (-20.8489,10.8988,32740) -Number of F1 Tiles with Positive energy : 49 +Number of F1 Tiles with Positive energy : 70 Number of F2 tiles with Positive energy : 0 Visisble Energy in S1 , S2 , S3 in (MeV) -1.90825 1.84779 1.53285 +1.49907 1.65655 1.60126 Visible Energy in Hole Counter (MeV) -0 42.9954 +0 104.195 Visible Energy in Upstream Dead Materials -765.322 +4855.68 Visible Energy in Tail Catcher Scintillator 0 0 0 0 0 0 0 Visible Energy in Tail Catcher Absorber 0 0 0 0 0 0 -N Tracks out of world 37 -N Secondaries 165 -EmEdep is=18342.9 MeV -HadEdep is=4.41746 MeV -Edep in FCAL1 FCAl2 : 18342.9 4.41746 +N Tracks out of world 149 +N Secondaries 224 +EmEdep is=12949.8 MeV +HadEdep is=0.927821 MeV +Edep in FCAL1 FCAl2 : 12949.8 0.927821 **** Primary : 17 Vertex : (-9.96316,-9.33478,32740) -Number of F1 Tiles with Positive energy : 40 +Number of F1 Tiles with Positive energy : 37 Number of F2 tiles with Positive energy : 0 Visisble Energy in S1 , S2 , S3 in (MeV) -1.64259 1.91545 1.68632 +1.53181 1.74553 1.50282 Visible Energy in Hole Counter (MeV) -0 13.568 +0 0 Visible Energy in Upstream Dead Materials -124.717 +13.3302 Visible Energy in Tail Catcher Scintillator 0 0 0 0 0 0 0 Visible Energy in Tail Catcher Absorber 0 0 0 0 0 0 -N Tracks out of world 5 -N Secondaries 222 -EmEdep is=19688.5 MeV -HadEdep is=0 MeV -Edep in FCAL1 FCAl2 : 19688.5 0 +N Tracks out of world 2 +N Secondaries 135 +EmEdep is=19856.1 MeV +HadEdep is=4.95649 MeV +Edep in FCAL1 FCAl2 : 19856.1 4.95649 **** Primary : 18 Vertex : (-9.96316,-9.33478,32740) -Number of F1 Tiles with Positive energy : 63 +Number of F1 Tiles with Positive energy : 45 Number of F2 tiles with Positive energy : 0 Visisble Energy in S1 , S2 , S3 in (MeV) -1.58896 2.0655 2.17158 +2.45427 1.57577 2.00021 Visible Energy in Hole Counter (MeV) -0 122.447 +0 0.546005 Visible Energy in Upstream Dead Materials -3752.91 +5.05385 Visible Energy in Tail Catcher Scintillator 0 0 0 0 0 0 0 Visible Energy in Tail Catcher Absorber 0 0 0 0 0 0 -N Tracks out of world 140 -N Secondaries 234 -EmEdep is=14452.3 MeV -HadEdep is=0 MeV -Edep in FCAL1 FCAl2 : 14452.3 0 +N Tracks out of world 8 +N Secondaries 102 +EmEdep is=19752.8 MeV +HadEdep is=38.8907 MeV +Edep in FCAL1 FCAl2 : 19752.8 38.8907 Run terminated. Run Summary Number of events processed : 18 - User=7.310000s Real=7.367683s Sys=0.010000s + User=6.520000s Real=6.567476s Sys=0.010000s There are 4 h1 histograms 0 with 0 entries: Number of Out Of World 1 with 0 entries: Number of Secondaries @@ -1454,25 +1464,25 @@ G4SDManager deleted. EventManager deleted. Units table cleared. TransportationManager deleted. -Total navigation history collections cleaned: 44 +Total navigation history collections cleaned: 42 G4RNGHelper object is deleted. ================== Deleting memory pools =================== -Pool ID '20G4NavigationLevelRep', size : 0.0615 MB +Pool ID '20G4NavigationLevelRep', size : 0.0606 MB Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB -Pool ID '17G4DynamicParticle', size : 0.103 MB +Pool ID '17G4DynamicParticle', size : 0.0856 MB Pool ID '16G4SmartVoxelNode', size : 0.112 MB Pool ID '17G4SmartVoxelProxy', size : 0.0942 MB Pool ID '7G4Event', size : 0.000961 MB Pool ID '15G4PrimaryVertex', size : 0.000961 MB Pool ID '17G4PrimaryParticle', size : 0.000961 MB Pool ID '15G4HCofThisEvent', size : 0.000961 MB -Pool ID '7G4Track', size : 0.206 MB -Pool ID '18G4TouchableHistory', size : 0.00577 MB +Pool ID '7G4Track', size : 0.17 MB +Pool ID '18G4TouchableHistory', size : 0.00481 MB Pool ID '15G4CountedObjectIvE', size : 0.000961 MB Pool ID '10G4Fragment', size : 0.00192 MB Pool ID '17G4ReactionProduct', size : 0.00192 MB Number of memory pools allocated: 14 of which, static: 0 -Dynamic pools deleted: 14 / Total memory freed: 0.59 MB +Dynamic pools deleted: 14 / Total memory freed: 0.54 MB ============================================================ G4Allocator objects are deleted. UImanager deleted. diff --git a/examples/advanced/medical_linac/medical_linac.out b/examples/advanced/medical_linac/medical_linac.out index c4e45c89fa8..86331707a69 100644 --- a/examples/advanced/medical_linac/medical_linac.out +++ b/examples/advanced/medical_linac/medical_linac.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -393,7 +393,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -432,7 +432,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -464,7 +464,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -533,7 +533,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -565,7 +565,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -597,7 +597,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -629,7 +629,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -661,7 +661,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -693,7 +693,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -725,7 +725,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -973,10 +973,10 @@ Launched 50000 random primary particles Run terminated. Run Summary Number of events processed : 50000 - User=17.640000s Real=17.789949s Sys=0.000000s + User=14.340000s Real=14.424118s Sys=0.000000s PrimitiveScorer RUN PhantomSD,TotalDose Number of entries 144 -loop elapsed time [s] : 17.68 +loop elapsed time [s] : 14.39 Region -- -- appears in world volume @@ -1200,10 +1200,10 @@ Launched 50000 random primary particles Run terminated. Run Summary Number of events processed : 50000 - User=17.110000s Real=17.247989s Sys=0.000000s + User=14.440000s Real=14.522564s Sys=0.000000s PrimitiveScorer RUN PhantomSD,TotalDose Number of entries 181 -loop elapsed time [s] : 17.14 +loop elapsed time [s] : 14.48 ################ END NEW GEOMETRY ######################## /run/geometryModified @@ -1497,10 +1497,10 @@ Launched 50000 random primary particles Run terminated. Run Summary Number of events processed : 50000 - User=17.440000s Real=17.590274s Sys=0.000000s + User=14.330000s Real=14.403898s Sys=0.000000s PrimitiveScorer RUN PhantomSD,TotalDose Number of entries 166 -loop elapsed time [s] : 17.48 +loop elapsed time [s] : 14.37 Region -- -- appears in world volume @@ -1724,13 +1724,13 @@ Launched 50000 random primary particles Run terminated. Run Summary Number of events processed : 50000 - User=17.310000s Real=17.454879s Sys=0.010000s + User=14.370000s Real=14.445436s Sys=0.000000s PrimitiveScorer RUN PhantomSD,TotalDose Number of entries 154 -loop elapsed time [s] : 17.35 +loop elapsed time [s] : 14.41 ################ END NEW GEOMETRY ######################## -loop elapsed time [s] : 73.15 +loop elapsed time [s] : 60.76 G4 kernel has come to Quit state. UserDetectorConstruction deleted. diff --git a/examples/advanced/microbeam/microbeam.out b/examples/advanced/microbeam/microbeam.out index c0f61c27d60..37911e77125 100644 --- a/examples/advanced/microbeam/microbeam.out +++ b/examples/advanced/microbeam/microbeam.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -468,7 +468,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV UserMaxStep: SubType= 401 Step limit(mm)= 1 @@ -508,7 +508,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -540,7 +540,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -609,7 +609,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -641,7 +641,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -673,7 +673,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -705,7 +705,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -737,7 +737,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -769,7 +769,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -801,10 +801,10 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV -##### Create analysis manager 0xf4f0a0 +##### Create analysis manager 0x171ee70 Using analysis manager All Ntuples have been created -> Event # 1 generated diff --git a/examples/advanced/microelectronics/microelectronics.out b/examples/advanced/microelectronics/microelectronics.out index 65881192678..cd3911ab6c1 100644 --- a/examples/advanced/microelectronics/microelectronics.out +++ b/examples/advanced/microelectronics/microelectronics.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -47,7 +47,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -263,7 +265,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 meV to 10 TeV in 280 bins Lambda tables from threshold to 10 TeV, 20 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV deltaVI BetheBloch : Emin= 2 MeV Emax= 10 TeV deltaVI @@ -338,7 +339,7 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics G4VisManager: Using G4TrajectoryDrawByCharge as fallback trajectory model. See commands in /vis/modeling/trajectories/ for other options. ### Run 0 starts. -##### Create analysis manager 0x22f6c30 +##### Create analysis manager 0x2817030 Using analysis manager ... set ntuple merging row mode : row-wise - done ... create file : microelectronics.root - done @@ -350,24 +351,25 @@ Si Reading TCS file Elastic Total Cross file : Elastic/elsepa_elastic_cross_e_Si loaddata : Elastic/elsepa_elastic_cross_e_Si -Elastic Cumulated Diff Cross : /cvmfs/geant4.cern.ch/share/data/G4EMLOW8.2/microelec/Elastic/elsepa_elastic_cumulated_diffcross_e_Si.dat +Elastic Cumulated Diff Cross : /cvmfs/geant4.cern.ch/share/data/G4EMLOW8.4/microelec/Elastic/elsepa_elastic_cumulated_diffcross_e_Si.dat MicroElasticModel, Material 2 / 2 : G4_Si Si Reading TCS file Elastic Total Cross file : Elastic/elsepa_elastic_cross_e_Si loaddata : Elastic/elsepa_elastic_cross_e_Si -Elastic Cumulated Diff Cross : /cvmfs/geant4.cern.ch/share/data/G4EMLOW8.2/microelec/Elastic/elsepa_elastic_cumulated_diffcross_e_Si.dat +Elastic Cumulated Diff Cross : /cvmfs/geant4.cern.ch/share/data/G4EMLOW8.4/microelec/Elastic/elsepa_elastic_cumulated_diffcross_e_Si.dat Run terminated. Run Summary Number of events processed : 10 - User=0.330000s Real=0.345914s Sys=0.010000s + User=0.330000s Real=0.373924s Sys=0.020000s ... write file : microelectronics.root - done ... close file : microelectronics.root - done ... clear all data - done Number and type of particles created outside region "Target" : +N e- : 1 _______________________ Number and type of particles created in region "Target" : -N e- : 2432 +N e- : 6212 Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. @@ -391,12 +393,12 @@ Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB Pool ID '7G4Event', size : 0.000961 MB Pool ID '15G4PrimaryVertex', size : 0.000961 MB Pool ID '17G4PrimaryParticle', size : 0.000961 MB -Pool ID '17G4DynamicParticle', size : 0.0115 MB -Pool ID '7G4Track', size : 0.0221 MB +Pool ID '17G4DynamicParticle', size : 0.0221 MB +Pool ID '7G4Track', size : 0.0433 MB Pool ID '18G4TouchableHistory', size : 0.000961 MB Pool ID '15G4CountedObjectIvE', size : 0.000961 MB Number of memory pools allocated: 9 of which, static: 0 -Dynamic pools deleted: 9 / Total memory freed: 0.047 MB +Dynamic pools deleted: 9 / Total memory freed: 0.079 MB ============================================================ G4Allocator objects are deleted. UImanager deleted. diff --git a/examples/advanced/nanobeam/OM50.grid b/examples/advanced/nanobeam/OM50.grid old mode 100755 new mode 100644 diff --git a/examples/advanced/nanobeam/nanobeam.out b/examples/advanced/nanobeam/nanobeam.out index 4e3bd4d1600..faebb9f0906 100644 --- a/examples/advanced/nanobeam/nanobeam.out +++ b/examples/advanced/nanobeam/nanobeam.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -43,6 +43,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo G2 (T/m) = 16.4947 G3 (T/m) = 9.86677 G4 (T/m) = -6.24449 + G4ChordFinder: stepperDriverId: 2 PhysicsList::SetCuts:CutLength : 1 um -------- WWWW ------- G4Exception-START -------- WWWW ------- @@ -98,6 +99,7 @@ G4Material WARNING: duplicate name of material Vacuum G2 (T/m) = 16.4953 G3 (T/m) = 9.86726 G4 (T/m) = -6.2448 + G4ChordFinder: stepperDriverId: 2 ======================================================================= ====== Electromagnetic Physics Parameters ======== ======================================================================= @@ -264,7 +266,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -293,7 +294,7 @@ Index : 0 used in the geometry : Yes ================================================================== -##### Create analysis manager 0x1e7ab50 +##### Create analysis manager 0x13c4a00 Using analysis manager Ntuple-1 created Ntuple-2 created diff --git a/examples/advanced/purging_magnet/purging_magnet.out b/examples/advanced/purging_magnet/purging_magnet.out index 81d713621dc..b79b92eeaa7 100644 --- a/examples/advanced/purging_magnet/purging_magnet.out +++ b/examples/advanced/purging_magnet/purging_magnet.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -43,7 +43,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -229,6 +231,7 @@ After reordering if neccesary ---> Dif values x,y,z (range): 10 22 36 cm in z ----------------------------------------------------------- DeltaStep 0.01mm + G4ChordFinder: stepperDriverId: 2 PurgMagPhysicsList::SetCuts:CutLength : 1 um -------- WWWW ------- G4Exception-START -------- WWWW ------- @@ -382,7 +385,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -422,7 +425,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -454,7 +457,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -523,7 +526,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -555,7 +558,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -587,7 +590,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -619,7 +622,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -651,7 +654,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -683,7 +686,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -715,7 +718,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -774,7 +777,7 @@ Total number of event = 100000 ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={178715393884003041, 1924215168640207574, 195555616801611567, 53107534660245820, 1825856043083475140, 1792951263768582503, 438669518415037562, 2246688480621702590, 2057578841139869913, 2169294347317174467, 1861954794404699023, 55325311607728307, 849425583492111153, 1865477072846557918, 2097575288325327119, 667094300280606690, 274384931326759230} counter= 13sumtot= 2107125416906148009 +N=17 V[N]={77748014430414613, 1916023684659400533, 1170895291302529645, 1308717968961542533, 617576989286624977, 4159304169773412, 1773860259953165952, 1170460085642752549, 1346723549001032558, 2164775407857314692, 1400227920416410176, 1742052209028641158, 51329690927869269, 1772437326104352635, 406661536190202989, 1018565785029837114, 1261036022485472146} counter= 10sumtot= 756506971737785343 --------------------------------------- Graphics systems deleted. Visualization Manager deleting... diff --git a/examples/advanced/radioprotection/radioprotection.out b/examples/advanced/radioprotection/radioprotection.out index af26f960fdc..2045eba9dcb 100644 --- a/examples/advanced/radioprotection/radioprotection.out +++ b/examples/advanced/radioprotection/radioprotection.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -43,7 +43,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -241,7 +243,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -280,7 +282,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -314,7 +316,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -404,7 +406,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -438,7 +440,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -472,7 +474,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -506,7 +508,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -540,7 +542,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV NeutronHP: /Capture file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Capture/CrossSection/6_nat_Carbon @@ -562,6 +564,7 @@ NeutronHP: /Elastic file for Z = 6, A = 12 is not found and NeutronHP will use / ProduceFissionFragments ? 0 UseWendtFissionModel ? 0 UseNRESP71Model ? 0 + UseDBRC ? 0 ======================================================= @@@ G4ParticleHPInelastic instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic @@ -598,7 +601,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -632,7 +635,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV ====================================================================== @@ -967,12 +970,21 @@ Threshold for very long decay time at rest 3.171e+10 y ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/advanced/stim_pixe_tomography/CMakeLists.txt b/examples/advanced/stim_pixe_tomography/CMakeLists.txt new file mode 100644 index 00000000000..502cdbfe74d --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/CMakeLists.txt @@ -0,0 +1,64 @@ +#---------------------------------------------------------------------------- +# Setup the project +cmake_minimum_required(VERSION 3.16...3.21) +project(stim_pixe_tomography) + +#---------------------------------------------------------------------------- +# Find Geant4 package, activating all available UI and Vis drivers by default +# You can set WITH_GEANT4_UIVIS to OFF via the command line or ccmake/cmake-gui +# to build a batch mode only executable +# +option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON) +if (WITH_GEANT4_UIVIS) + find_package(Geant4 REQUIRED ui_all vis_all) +else () + find_package(Geant4 REQUIRED) +endif () + +#---------------------------------------------------------------------------- +# Setup Geant4 include directories and compile definitions +# +include(${Geant4_USE_FILE}) + +#---------------------------------------------------------------------------- +# Locate sources and headers for this project +# +include_directories(${PROJECT_SOURCE_DIR}/include + ${Geant4_INCLUDE_DIR}) +file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) +file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) + +#---------------------------------------------------------------------------- +# Add the executable, and link it to the Geant4 libraries +# +add_executable(stim_pixe_tomography stim_pixe_tomography.cc ${sources} ${headers}) +target_link_libraries(stim_pixe_tomography ${Geant4_LIBRARIES}) + +#---------------------------------------------------------------------------- +# Copy all scripts to the build directory, i.e. the directory in which we +# build stim_pixe_tomography. This is so that we can run the executable directly because it +# relies on these scripts being in the current working directory. +# +set(stim_pixe_tomography_SCRIPTS + pixe3d.mac + pixe3d_stim.mac + pixe3d_initial.mac + GPSPointLoop.C + test.in + vis.mac + init_vis.mac + ) + +foreach (_script ${stim_pixe_tomography_SCRIPTS}) + configure_file( + ${PROJECT_SOURCE_DIR}/${_script} + ${PROJECT_BINARY_DIR}/${_script} + COPYONLY + ) +endforeach () + +#---------------------------------------------------------------------------- +# Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX +# +install(TARGETS stim_pixe_tomography DESTINATION bin) + diff --git a/examples/advanced/stim_pixe_tomography/GPSPointLoop.C b/examples/advanced/stim_pixe_tomography/GPSPointLoop.C new file mode 100644 index 00000000000..b7449611273 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/GPSPointLoop.C @@ -0,0 +1,126 @@ +//*********************************************************************************************************** +// GPSPointLoop.C +// Root command file +// Type: root GPSPointLoop.C +// +// It generates a macro file to run the simulation. +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +// include +// include +// include +// include +// include +// using namespace std; + +void GPSPointLoop() +{ + gSystem->CopyFile("pixe3d_initial.mac", "pixe3d.mac", true); + FILE* pfile = fopen("pixe3d.mac", "a+"); + + // gSystem->CopyFile("pixe3d_initial.mac", "pixe3d_stim.mac", true); + // FILE* pfile = fopen("pixe3d_stim.mac", "a+"); + + //*********************************************** + //***(begin)** Define scan parameters************ + //*********************************************** + //*********************************************** + int NumberOfProjections = 10; // Define the number of Projections from zero to TotalAngleSpan + // (last value "TotalAngleSpan" is excluded) + int NumberOfSlices = 1; // Define the number of Slices + int NumberOfPixels = 20; // Define the number of Pixels for square YZ Scan + double TotalAngleSpan = 180; // scan angular range in degrees + double ScanSize = 40 * 1.8; // unit um, scan size for cube of 40 um + // double ScanSize = 42.48*1.8; // unit um, scan size for C.elegans + // double ScanSize = 500; // unit um, scan size for GDP + double ScanHeight = ScanSize; // Height of the scan, it depends on the need + // double ScanHeight = 201.127; //Height of the scan for STIM-T simulatio of C. elegans, for 128 + // slices + int NbParticles = 1000000; + double energy = 1.5; // MeV + char typeParticle[10] = "proton"; + + double PixelWidth = 1. * ScanSize / NumberOfPixels; // Width of each pixel + double SliceHeight = 1. * ScanHeight / NumberOfSlices; // Height of each + // slice + double AngleStep = + 1. * TotalAngleSpan / NumberOfProjections; // angular increment (in degrees) + // between two consecutive projections + // + // The beam position is at the center of each pixel + // Starting position of the beam = StartScan + 0.5 x PixelWidth + // The scan starts from the bottom left of the square + // + double StartScanXY = -0.5 * ScanSize; + double StartScanZ = -0.5 * ScanHeight; + // double StartScanZ = 0; + + bool isInterrupted = false; + int P_interrupt = 0; // the start of projection index to resume a simulation + + //*********************************************** + //***(end)** Define scan parameters************** + //*********************************************** + + //************************************ + //***(begin)** SCAN IMPLEMENTATION *** + //************************************ + fprintf(pfile, "/tomography/run/scanParameters %d %d %d\n", NumberOfProjections, NumberOfSlices, + NumberOfPixels); + fprintf(pfile, "#\n"); + + if (isInterrupted) { + fprintf(pfile, "/tomography/run/resumeSimulation true\n"); + fprintf(pfile, "/tomography/run/resumeProjectionIndex %d\n", P_interrupt); + fprintf(pfile, "#\n"); + } + fprintf(pfile, "/run/initialize\n"); + fprintf(pfile, "#\n"); + fprintf(pfile, "/run/printProgress 500000\n"); + fprintf(pfile, "#\n"); + fprintf(pfile, "# Source definition : energy, type\n"); + fprintf(pfile, "#\n"); + fprintf(pfile, "/gps/energy %.2f MeV\n", energy); + fprintf(pfile, "/gps/particle %s\n", typeParticle); + fprintf(pfile, "#\n"); + fprintf(pfile, "# SOURCE POSITION AND DIRECTION\n"); + fprintf(pfile, "#\n"); + for (int projectionIndex = 0; projectionIndex < NumberOfProjections; + ++projectionIndex) // projections + { + if (isInterrupted) { + if (projectionIndex < P_interrupt) continue; + } + + for (int sliceIndex = 0; sliceIndex < NumberOfSlices; ++sliceIndex) // slices + { + // if(sliceIndex<15) continue; + for (int pixelIndex = 0; pixelIndex < NumberOfPixels; ++pixelIndex) // pixels + { + double px = cos(projectionIndex * AngleStep * TMath::DegToRad()); // beam direction + double py = sin(projectionIndex * AngleStep * TMath::DegToRad()); + double pz = 0.0; + double x = + StartScanXY * px - (StartScanXY + (pixelIndex + 0.5) * PixelWidth) * py; // beam position + double y = StartScanXY * py + (StartScanXY + (pixelIndex + 0.5) * PixelWidth) * px; + double z = StartScanZ + (sliceIndex + 0.5) * SliceHeight; + // z = 18.07; //if z is fixed + // z = z + 1.953125; + // z = z + 3.90625; + fprintf(pfile, "/gps/direction %f %f %f\n", px, py, pz); + // fprintf(pfile, "/gps/pos/centre %.6f %.6f %.6f um\n",x, y, z ); + fprintf(pfile, "/gps/pos/centre %f %f %f um\n", x, y, z); + fprintf(pfile, "/run/beamOn %d\n", NbParticles); + fprintf(pfile, "#\n"); + } + } + } + fclose(pfile); + + //************************************ + //***(end)** SCAN IMPLEMENTATION *** + //************************************ +} diff --git a/examples/advanced/stim_pixe_tomography/History b/examples/advanced/stim_pixe_tomography/History new file mode 100644 index 00000000000..276c3e160ec --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/History @@ -0,0 +1,8 @@ +# Example stim_pixe_tomography History + +See `CONTRIBUTING.rst` for details of **required** info/format for each entry, +which **must** added in reverse chronological order (newest at the top). It must **not** +be used as a substitute for writing good git commit messages! + +## 2023-03-15 Z.Li (stim_pixe_tomography-V11-01-00) +- Added first version of stim_pixe_tomography example diff --git a/examples/advanced/stim_pixe_tomography/README b/examples/advanced/stim_pixe_tomography/README new file mode 100644 index 00000000000..6b677888d37 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/README @@ -0,0 +1,178 @@ +stim_pixe_tomography advanced example + +The stim_pixe_tomography advanced example is developed to simulate three dimensional STIM or +PIXE tomography experiments. The simulation results are written in a binary file and can be easily accessed using the +provided scripts. + + Publications: + + [1] Li Z, Incerti S, Beasley D, Shen H, Wang S, Seznec H, et al. Accuracy of three-dimensional proton imaging of an + inertial confinement fusion target assessed by Geant4 simulation. Nucl Instrum Methods Phys Res B. 2023; + 536:38-44. https://doi.org/10.1016/j.nimb.2022.12.026. + + [2] Michelet C, Li Z, Jalenques H, Incerti S, Barberet P, Devs G, et al. A Geant4 simulation of X-ray emission + for three-dimensional proton imaging of microscopic samples. Phys Med. 2022;94:85-93. https://doi.org/10.1016/j.ejmp.2021.12.002. + + [3] Michelet C, Li Z, Yang W, Incerti S, Desbarats P, Giovannelli J-F, et al. A Geant4 simulation for + three-dimensional proton imaging of microscopic samples. Phys Med. 2019;65:172-80. https://doi.org/10.1016/j.ejmp.2019.08.022. + + Contact: + + michelet@lp2ib.in2p3.fr (Claire Michelet) + + zhuxin.li@outlook.com (Zhuxin Li) + + +More information and a detailed UserGuide are available: http://geant4.in2p3.fr (Documentation section) + + 1 - GEOMETRY DEFINITION + + Three phantoms are available, users can build up new phantoms or choose the following + three phantoms by setting the "phantom_type": + + 1) A simple cube (see publication [2-3]), phantom_type = 1 + + The absorber is a box made of a given material. + + 2) Upper part of Caenorhabditis elegans (C.elegans) worm (see publication [2-3]) , phantom_type = 2 + + C.elegans phantom is composed of 6 ellipsoids. The size and shape of ellipsoids are based on the + nanotoxicology studies carried-out at LP2I Bordeaux laboratory . + + 3) Inertial confinement fusion (ICF) target (see publication [1]), phantom_type = 3 + + ICF target is sphere shell, made of Ge-doped glow discharge polymer (GDP) + + +2 - PHYSICS LIST + + Physics lists are based on modular design. Several modules are instantiated: + + 1) Transportation + 2) EM physics + 3) Decay physics + 4) Hadron physics, optional + + EM physics builders can be local or from G4 kernel physics_lists subdirectory. + + - "emlivermore" default low-energy EM physics using Livermore data + - "local" local physics builders, options are explicit in PhysListEmStandard + - "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. + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + + Decay and StepMax processes are added to each list. + + Optional components can be added: + + - "elastic" elastic scattering of hadrons + - "binary" QBBC configuration of hadron inelastic models + - "binary_ion" Binary ion inelastic models + + Physics lists and options can be (re)set with UI commands. + + +3 - HOW TO RUN + + To run a PIXE tomography simulation in 'batch' mode using a pixe3d.mac file: + + ./stim_pixe_tomography -p pixe3d.mac + + or if you want to specify the number of threads: + + ./stim_pixe_tomography -p pixe3d.mac N + + N is the number of threads + + An example of pixe3d.mac is provided. + It is designed for the PIXE-T simulation of the cube phantom of 40 um. + It is defined for 10 projections 1 slice 20 pixels. 1000000 protons are used for each beam. + + + To run a STIM tomography simulation: + + ./stim_pixe_tomography -s pixe3d_stim.mac + + or if you want to specify the number of threads: + + ./stim_pixe_tomography -s pixe3d_stim.mac N + + N is the number of threads + + An example of pixe3d_stim.mac (arbitrarily name, you may rename it pixe3d.mac if you wish) is provided. + It is designed for the STIM-T simulation of the cube phantom of 40 um. + It is defined for 10 projections 1 slice 20 pixels. 100 protons are used for each beam. + +4 - VISUALISATION +To visualize the phantoms, run: + + ./stim_pixe_tomography + +5 - OUTPUT FILES + + If a PIXE tomography simulation is made, two files are going to be generated: + + 1) GammaAtCreation.dat, which keeps the info of secondary photons at creation + 2) GammaAtExit.dat, which keeps the info of secondary photons at exit of the phantom + + If a STIM tomography simulation is made, ProtonAtExit.dat is generated, in which the info of primary protons is kept + + +6 - LIST OF MACROS AND SCRIPTS + +Once you build the example, the following macros and script will be copied to your build directory: + + pixe3d.mac: an example macro to run a PIXE-T simulation for cube of 40 um + pixe3d_stim.mac: an example macro to run a STIM-T simulation for cube of 40 um + pixe3d_initial.mac: it contains the information of physics processes + init_vis.mac and vis.mac: for the visualization + GPSPointLoop.C: it generates a macro file to run the simulation by reading pixe3d_initial.mac + +In the Scripts folder, you will find other scripts for different uses. + +To obtain the reconstruction data: + + BinToStd_ProtonAtExit.C: it reads the STIM-T simulation results and generates the data file for STIM-T reconstruction using selection with particle momentum. + BinToStd_GammaAtCreation.C: it reads the PIXE-T simulation results for X-rays at creation and generates the data file for PIXE-T reconstruction using selection with particle momentum. + BinToStd_GammaAtExit.C: it reads the PIXE-T simulation results for X-rays at exit and generates the data file for PIXE-T reconstruction using selection with particle momentum. + BinToStd_proton_position.C: it reads the STIM-T simulation results and generates the data file for STIM-T reconstruction using selection with particle position and momentum + BinToStd_gamma_position.C: it reads the PIXE-T simulation results for X-rays and generates the data file for PIXE-T reconstruction using selection with particle position and momentum + +To locate the interruption if an interruption of simulation occurs: + + LocateInterruption_ProtonAtExit.C: in case of interruption, it locates the projection position of interruption for STIM-T simulation. + LocateInterruption_GammaAtExit.C: in case of interruption, it locates the projection position of interruption for PIXE-T simulation. +To obtain the reconstruction data in case of an interruption of simulation:*** + + Concatenate_BinToStd_ProtonAtExit.C: in case of one interruption, it reads STIM-T simulation results and generates the data file for STIM-T reconstruction. + Concatenate_BinToStd_GammaAtCreation.C: in case of one interruption, it reads PIXE-T simulation results for X-rays at creation and generates the data file for PIXE-T reconstruction. + Concatenate_BinToStd_GammaAtExit.C: in case of one interruption, it reads PIXE-T simulation results for X-rays at exit and generates the data file for PIXE-T reconstruction. +To visualize the spectrum: + + Spectrum_proton.C: it visualizes the spectrum of protons and plots a histogram by reading simulation result ProtonAtExit.dat. + Spectrum_gamma.C: it visualizes the spectrum of X-rays and plots a histogram by reading simulation result GammaAtCreation.dat or GammaAtExit.dat. + TomoSpectrum_HIST_proton.C: it visualizes the spectrum of protons and plots a histogram by reading StimEvent data. It also writes the spectrum data in a txt file. + TomoSpectrum.C: it visualizes the spectrum of X-rays and plots a graph by reading PixeEvent data. It also writes the spectrum data in a txt file. + TomoSpectrum_HIST.C: it visualizes the spectrum of X-rays and plots a histogram by reading PixeEvent data. It also writes the spectrum data in a txt file. +Scripts for specific use: + + Extract_Projection.C: it extracts 50 projections from a PixeEvent data file for tomographic reconstruction, which contains 100 projections. In fact, it extracts the projection 0, 2, 4, 6, 898 from projections 0-99. It eventually generates a new file with new index number of projections 0-49. + Check_PixeEventFile.C: it checks if the index of projections of a PixeEvent data file for tomographic reconstruction is correct. For example, if the user extract 50 projections from a data file composed 100 projections, it is necessary to make sure in the new data file, the index of projection starts from 0 and ends at 49. + Extract_Slice.C: it extracts a certain number of slice(s) from a PixeEvent data file for tomographic reconstruction. Users need to specify the first and the last slice to be extracted. Note that when writing a new data file, the index of slices will be initiated from 0. + Concatenate_BinToStd_GammaAtCreation_fabricate.C: if users make a PIXE-T simulation on a symmetrical object with only one projection, this script can be used to fabricate the other 99 projection data for X-rays at creation with same energy. + Concatenate_BinToStd_GammaAtExit_fabricate.C: if users make a PIXE-T simulation on a symmetrical object with only one projection, this script can be used to fabricate the other 99 projection data for X-rays at exit with same energy +Scripts to generate voxelized phantoms:*** + +In order to compare the reconstructed tomographic images with original +phantoms, it may be necessary to use a voxelized phantom. + + generate_voxelized_sphere_phantom.py: it generates a voxelized phantom of an inertial confinement fusion target. + generate_voxelized_worm_phantom.py: it generates a voxelized phantom of the upper part of C. elegans. +More information can be found in the UserGuide. diff --git a/examples/advanced/stim_pixe_tomography/README.md b/examples/advanced/stim_pixe_tomography/README.md new file mode 100644 index 00000000000..3020972dfd0 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/README.md @@ -0,0 +1,179 @@ +# stim_pixe_tomography advanced example + +The stim_pixe_tomography advanced example is developed to simulate three dimensional STIM or +PIXE tomography experiments. The simulation results are written in a binary file and can be easily accessed using the +provided scripts. + + Publications: + + [1] Li Z, Incerti S, Beasley D, Shen H, Wang S, Seznec H, et al. Accuracy of three-dimensional proton imaging of an + inertial confinement fusion target assessed by Geant4 simulation. Nucl Instrum Methods Phys Res B. 2023; + 536:38-44. https://doi.org/10.1016/j.nimb.2022.12.026. + + [2] Michelet C, Li Z, Jalenques H, Incerti S, Barberet P, Devs G, et al. A Geant4 simulation of X-ray emission + for three-dimensional proton imaging of microscopic samples. Phys Med. 2022;94:85-93. https://doi.org/10.1016/j.ejmp.2021.12.002. + + [3] Michelet C, Li Z, Yang W, Incerti S, Desbarats P, Giovannelli J-F, et al. A Geant4 simulation for + three-dimensional proton imaging of microscopic samples. Phys Med. 2019;65:172-80. https://doi.org/10.1016/j.ejmp.2019.08.022. + + Contact: + + michelet@lp2ib.in2p3.fr (Claire Michelet) + + zhuxin.li@outlook.com (Zhuxin Li) + + + More information and a detailed UserGuide are available: +http://geant4.in2p3.fr (Documentation section) + +## 1 - GEOMETRY DEFINITION + + Three phantoms are available, users can build up new phantoms or choose the following + three phantoms by setting the "phantom_type": + + 1) A simple cube (see publication [2-3]), phantom_type = 1 + + The absorber is a box made of a given material. + + 2) Upper part of Caenorhabditis elegans (C.elegans) worm (see publication [2-3]) , phantom_type = 2 + + C.elegans phantom is composed of 6 ellipsoids. The size and shape of ellipsoids are based on the + nanotoxicology studies carried-out at LP2I Bordeaux laboratory . + + 3) Inertial confinement fusion (ICF) target (see publication [1]), phantom_type = 3 + + ICF target is sphere shell, made of Ge-doped glow discharge polymer (GDP) + + + ##2 - PHYSICS LIST + + Physics lists are based on modular design. Several modules are instantiated: + + 1) Transportation + 2) EM physics + 3) Decay physics + 4) Hadron physics, optional + + EM physics builders can be local or from G4 kernel physics_lists subdirectory. + + - "emlivermore" default low-energy EM physics using Livermore data + - "local" local physics builders, options are explicit in PhysListEmStandard + - "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. + - "empenelope" low-energy EM physics implementing Penelope models + - "emlowenergy" low-energy EM physics implementing experimental + + Decay and StepMax processes are added to each list. + + Optional components can be added: + + - "elastic" elastic scattering of hadrons + - "binary" QBBC configuration of hadron inelastic models + - "binary_ion" Binary ion inelastic models + + Physics lists and options can be (re)set with UI commands. + + + ##3 - HOW TO RUN + + To run a PIXE tomography simulation in 'batch' mode using a pixe3d.mac file: + + ./stim_pixe_tomography -p pixe3d.mac + + or if you want to specify the number of threads: + + ./stim_pixe_tomography -p pixe3d.mac N + + N is the number of threads + + An example of pixe3d.mac is provided. + It is designed for the PIXE-T simulation of the cube phantom of 40 um. + It is defined for 10 projections 1 slice 20 pixels. 1000000 protons are used for each beam. + + + To run a STIM tomography simulation: + + ./stim_pixe_tomography -s pixe3d_stim.mac + + or if you want to specify the number of threads: + + ./stim_pixe_tomography -s pixe3d_stim.mac N + + N is the number of threads + + An example of pixe3d_stim.mac (arbitrarily name, you may rename it pixe3d.mac if you wish) is provided. + It is designed for the STIM-T simulation of the cube phantom of 40 um. + It is defined for 10 projections 1 slice 20 pixels. 100 protons are used for each beam. + + ##4 - VISUALISATION +To visualize the phantoms, run: + + ./stim_pixe_tomography + + ##5 - OUTPUT FILES + + If a PIXE tomography simulation is made, two files are going to be generated: + + 1) GammaAtCreation.dat, which keeps the info of secondary photons at creation + 2) GammaAtExit.dat, which keeps the info of secondary photons at exit of the phantom + + If a STIM tomography simulation is made, ProtonAtExit.dat is generated, in which the info of primary protons is kept + + + ##6 - LIST OF MACROS AND SCRIPTS + +Once you build the example, the following macros and script will be copied to your build directory: + + pixe3d.mac: an example macro to run a PIXE-T simulation for cube of 40 um + pixe3d_stim.mac: an example macro to run a STIM-T simulation for cube of 40 um + pixe3d_initial.mac: it contains the information of physics processes + init_vis.mac and vis.mac: for the visualization + GPSPointLoop.C: it generates a macro file to run the simulation by reading pixe3d_initial.mac + +In the **Scripts** folder, you will find other scripts for different uses. + +***To obtain the reconstruction data:*** + + BinToStd_ProtonAtExit.C: it reads the STIM-T simulation results and generates the data file for STIM-T reconstruction using selection with particle momentum. + BinToStd_GammaAtCreation.C: it reads the PIXE-T simulation results for X-rays at creation and generates the data file for PIXE-T reconstruction using selection with particle momentum. + BinToStd_GammaAtExit.C: it reads the PIXE-T simulation results for X-rays at exit and generates the data file for PIXE-T reconstruction using selection with particle momentum. + BinToStd_proton_position.C: it reads the STIM-T simulation results and generates the data file for STIM-T reconstruction using selection with particle position and momentum + BinToStd_gamma_position.C: it reads the PIXE-T simulation results for X-rays and generates the data file for PIXE-T reconstruction using selection with particle position and momentum + + ***To locate the interruption if an interruption of simulation occurs:*** + + LocateInterruption_ProtonAtExit.C: in case of interruption, it locates the projection position of interruption for STIM-T simulation. + LocateInterruption_GammaAtExit.C: in case of interruption, it locates the projection position of interruption for PIXE-T simulation. +***To obtain the reconstruction data in case of an interruption of simulation:*** + + Concatenate_BinToStd_ProtonAtExit.C: in case of one interruption, it reads STIM-T simulation results and generates the data file for STIM-T reconstruction. + Concatenate_BinToStd_GammaAtCreation.C: in case of one interruption, it reads PIXE-T simulation results for X-rays at creation and generates the data file for PIXE-T reconstruction. + Concatenate_BinToStd_GammaAtExit.C: in case of one interruption, it reads PIXE-T simulation results for X-rays at exit and generates the data file for PIXE-T reconstruction. +***To visualize the spectrum:*** + + Spectrum_proton.C: it visualizes the spectrum of protons and plots a histogram by reading simulation result ProtonAtExit.dat. + Spectrum_gamma.C: it visualizes the spectrum of X-rays and plots a histogram by reading simulation result GammaAtCreation.dat or GammaAtExit.dat. + TomoSpectrum_HIST_proton.C: it visualizes the spectrum of protons and plots a histogram by reading StimEvent data. It also writes the spectrum data in a txt file. + TomoSpectrum.C: it visualizes the spectrum of X-rays and plots a graph by reading PixeEvent data. It also writes the spectrum data in a txt file. + TomoSpectrum_HIST.C: it visualizes the spectrum of X-rays and plots a histogram by reading PixeEvent data. It also writes the spectrum data in a txt file. +***Scripts for specific use:*** + + Extract_Projection.C: it extracts 50 projections from a PixeEvent data file for tomographic reconstruction, which contains 100 projections. In fact, it extracts the projection 0, 2, 4, 6, 898 from projections 0-99. It eventually generates a new file with new index number of projections 0-49. + Check_PixeEventFile.C: it checks if the index of projections of a PixeEvent data file for tomographic reconstruction is correct. For example, if the user extract 50 projections from a data file composed 100 projections, it is necessary to make sure in the new data file, the index of projection starts from 0 and ends at 49. + Extract_Slice.C: it extracts a certain number of slice(s) from a PixeEvent data file for tomographic reconstruction. Users need to specify the first and the last slice to be extracted. Note that when writing a new data file, the index of slices will be initiated from 0. + Concatenate_BinToStd_GammaAtCreation_fabricate.C: if users make a PIXE-T simulation on a symmetrical object with only one projection, this script can be used to fabricate the other 99 projection data for X-rays at creation with same energy. + Concatenate_BinToStd_GammaAtExit_fabricate.C: if users make a PIXE-T simulation on a symmetrical object with only one projection, this script can be used to fabricate the other 99 projection data for X-rays at exit with same energy +***Scripts to generate voxelized phantoms:*** + +In order to compare the reconstructed tomographic images with original +phantoms, it may be necessary to use a voxelized phantom. + + generate_voxelized_sphere_phantom.py: it generates a voxelized phantom of an inertial confinement fusion target. + generate_voxelized_worm_phantom.py: it generates a voxelized phantom of the upper part of C. elegans. +More information can be found in the UserGuide. \ No newline at end of file diff --git a/examples/advanced/stim_pixe_tomography/Scripts/BinToStd_GammaAtCreation.C b/examples/advanced/stim_pixe_tomography/Scripts/BinToStd_GammaAtCreation.C new file mode 100644 index 00000000000..251de73eef8 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/BinToStd_GammaAtCreation.C @@ -0,0 +1,199 @@ +//****************************************************************************************** +// BinToStd_GammaAtCreation.C +// Root command file +// Type: root BinToStd_GammaAtCreation.C +// +// Read the output file GammaAtCreation.dat that is generated by Geant4 +// tomography simulation It read all the gamma at creation information, and +// rewrite the events in a binary file PixeEvent_std_AtCreation.DAT +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//******************************************************************************************* + +#include +#include +#include +#include + +#include +// using namespace std; + +// Define a structure to read and write each event in the required binary format +struct PixeEvent +{ + uint16_t energy_10eV; + uint16_t pixelIndex; + uint16_t sliceIndex; + uint8_t projectionIndex; +}; +struct ParticleInfo +{ + float energy_keV; + float mx; + float my; + float mz; +}; + +struct RunInfo +{ + // uint_16t + uint8_t projectionIndex; // 1 byte + uint16_t sliceIndex; // + uint16_t pixelIndex; + uint32_t nbParticle; // 4 bytes int +}; +struct Point +{ + double m_x; + double m_y; + double m_z; +}; + +// double DegreeToRadian(double degree) { return (PI * degree / 180.); } + +bool IsDetected(Point poi1, Point poi2, double theta) +{ + double a = (poi1.m_x * poi2.m_x + poi1.m_y * poi2.m_y + poi1.m_z * poi2.m_z) + / sqrt(poi1.m_x * poi1.m_x + poi1.m_y * poi1.m_y + poi1.m_z * poi1.m_z) + / sqrt(poi2.m_x * poi2.m_x + poi2.m_y * poi2.m_y + poi2.m_z * poi2.m_z); + if (a > 1.0) a = 1; + if (a < -1.0) a = -1; + double r = acos(a); + if (r > theta) + return false; + else + return true; +} +void BinToStd_GammaAtCreation() +{ + //*********************************************************************** + //**************************Detection parameters (begin)***************** + //*********************************************************************** + + const int nbProjection = 10; + const int nbSlice = 1; + const int nbPixel = 20; + double totalAngleSpan = 180.; // in degree + + double angleOfDetector = 135.; // angle of detector relative to the incident + // direction of the primary protons // + double distanceObjectDetector = 22.; // 22 mm + double radiusOfDetector = 5.; // 5 mm + // double theta = atan(radiusOfDetector/distanceObjectDetector); //half apex + // angle of the right circular cone in radian + double theta = 70 * TMath::DegToRad(); // in radian + + //*********************************************************************** + //**************************Detection parameters (end)******************* + //*********************************************************************** + + FILE* input = fopen("../build/GammaAtCreation.dat", "rb"); + FILE* out = fopen("../build/PixeEvent_std_AtCreation.DAT", "wb"); + + if (input == NULL) { + printf("error for opening the input GammaAtCreation.dat file\n"); + return; + } + + RunInfo runInfo; + PixeEvent pixeEvent; + Point centerOfDetector; + Point gammaMomentum; + long long count = 0; + int runID = -1; // index of simulations, namely runID, starting from 0 + + // while(!feof(input)) //if not the end, read + while (fread(&runInfo, sizeof(RunInfo), 1, input)) { + runID++; + // if(runID==5) continue; + int nbParticle = runInfo.nbParticle; + + //(begin)***************************************************************** + // the following codes are used only when in the simulation + // the index of projection, slice and pixel is not + // correctly configured + runInfo.projectionIndex = runID / (nbSlice * nbPixel); + int remain = runID % (nbSlice * nbPixel); + runInfo.sliceIndex = remain / nbPixel; + runInfo.pixelIndex = remain % nbPixel; + //(end)****************************************************************** + + //*********************************************************************** + //**************************Print information (begin)******************** + //*********************************************************************** + + printf( + "---------RunID=%d:\nProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d," + "nbParticle = %d\n", + runID, runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, nbParticle); + + //*********************************************************************** + //**************************Print information (end)********************** + //*********************************************************************** + + if (!nbParticle) continue; + std::vector gammaAtCreation(nbParticle); + fread(&gammaAtCreation[0], sizeof(ParticleInfo), nbParticle, input); + + // angleOfDetector+totalAngleSpan/nbProjection*runInfo.projectionIndex means + // the angle between source direction and detector, which should be constant + // when source is rotating + double ra = TMath::DegToRad() + * (angleOfDetector + totalAngleSpan / nbProjection * runInfo.projectionIndex); + centerOfDetector.m_x = distanceObjectDetector * cos(ra); + centerOfDetector.m_y = distanceObjectDetector * sin(ra); + centerOfDetector.m_z = 0; + + for (int i = 0; i < nbParticle; ++i) { + // gamma selection: energy should be lower than 4095*10eV = 49.45 keV + if (gammaAtCreation[i].energy_keV >= 40.95 || gammaAtCreation[i].energy_keV <= 0.9) + continue; // gamma selection + + gammaMomentum.m_x = gammaAtCreation[i].mx; + gammaMomentum.m_y = gammaAtCreation[i].my; + gammaMomentum.m_z = gammaAtCreation[i].mz; + + if (!IsDetected(centerOfDetector, gammaMomentum, theta)) + continue; + else { + pixeEvent.energy_10eV = floor(100 * gammaAtCreation[i].energy_keV + 0.5); + pixeEvent.projectionIndex = runInfo.projectionIndex; + pixeEvent.sliceIndex = runInfo.sliceIndex; + pixeEvent.pixelIndex = runInfo.pixelIndex; + fwrite(&pixeEvent, 7, 1, out); + count++; + + //*********************************************************************** + //**************************Print information (begin)******************** + //*********************************************************************** + + // printf("momentum: (%f, %f, %f), energy: %f keV %d 10eV\n", + // gammaAtCreation[i].mx, gammaAtCreation[i].my, gammaAtCreation[i].mz, + // gammaAtCreation[i].energy_keV, pixeEvent.energy_10eV); + + //*********************************************************************** + //**************************Print information (end)********************** + //*********************************************************************** + } + } + } + printf( + "---------------Number of PixeEvent in total: " + "%lld------------------------\n", + count); + fclose(input); + fclose(out); + + // Recheck the output file in case + // FILE* input2 = fopen("PixeEvent_std_AtCreation.DAT","rb"); + // PixeEvent p; + // while(fread(&p, 7, 1, input2)) + // { + // printf("__ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, + // Energy_10eV=%d\n", p.projectionIndex, p.sliceIndex, p.pixelIndex, + // p.energy_10eV); + + // } + // fclose(input2); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/BinToStd_GammaAtExit.C b/examples/advanced/stim_pixe_tomography/Scripts/BinToStd_GammaAtExit.C new file mode 100644 index 00000000000..0ceff0b4dc4 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/BinToStd_GammaAtExit.C @@ -0,0 +1,196 @@ +//*********************************************************************************************************** +// BinToStd_GammaAtExit.C +// Root command file +// Type: root BinToStd_GammaAtExit.C +// +// Read the output file ProtonAtExit.dat that is generated by Geant4 tomography +// simulation It read all the gamma at exit information, and rewrite the events +// in a binary file PixeEvent_std_AtExit.DAT +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include +// using namespace std; + +// Define a structure to read and write each event in the required binary format +struct PixeEvent +{ + uint16_t energy_10eV; + uint16_t pixelIndex; + uint16_t sliceIndex; + uint8_t projectionIndex; +}; + +struct ParticleInfo +{ + float energy_keV; + float mx; + float my; + float mz; +}; + +struct RunInfo +{ + // uint_16t + uint8_t projectionIndex; // 1 byte + uint16_t sliceIndex; // + uint16_t pixelIndex; + uint32_t nbParticle; // 4 bytes int +}; +struct Point +{ + double m_x; + double m_y; + double m_z; +}; + +bool IsDetected(Point poi1, Point poi2, double theta) +{ + double a = (poi1.m_x * poi2.m_x + poi1.m_y * poi2.m_y + poi1.m_z * poi2.m_z) + / sqrt(poi1.m_x * poi1.m_x + poi1.m_y * poi1.m_y + poi1.m_z * poi1.m_z) + / sqrt(poi2.m_x * poi2.m_x + poi2.m_y * poi2.m_y + poi2.m_z * poi2.m_z); + if (a > 1.0) a = 1; + if (a < -1.0) a = -1; + double r = acos(a); + if (r > theta) + return false; + else + return true; +} +void BinToStd_GammaAtExit() +{ + //*********************************************************************** + //**************************Detection parameters (begin)***************** + //*********************************************************************** + + const int nbProjection = 10; + const int nbSlice = 1; + const int nbPixel = 20; + double totalAngleSpan = 180.; // in degree + + double angleOfDetector = 135.; // angle of detector relative to the incident + // direction of the primary protons // + double distanceObjectDetector = 22.; // 22 mm + double radiusOfDetector = 5.; // 5 mm + // double theta = atan(radiusOfDetector/distanceObjectDetector); //half apex + // angle of the right circular cone in radian + double theta = 70 * TMath::DegToRad(); // in radian + + //*********************************************************************** + //**************************Detection parameters (end)******************* + //*********************************************************************** + + FILE* input = fopen("../build/GammaAtExit.dat", "rb"); + FILE* out = fopen("../build/PixeEvent_std_AtExit.DAT", "wb"); + + if (input == NULL) { + printf("error for opening the input GammaAtExit.dat file\n"); + return; + } + + RunInfo runInfo; + PixeEvent pixeEvent; + Point centerOfDetector; + Point gammaMomentum; + long long count = 0; + int runID = -1; // index of simulations, namely runID, starting from 0 + + // while(!feof(input)) //if not the end, read + while (fread(&runInfo, sizeof(RunInfo), 1, input)) { + runID++; + int nbParticle = runInfo.nbParticle; + + // the following codes are used only when in the simulation + // ************(begin) the index of projection, slice and pixel is not + // correctly configured + runInfo.projectionIndex = runID / (nbSlice * nbPixel); + int remain = runID % (nbSlice * nbPixel); + runInfo.sliceIndex = remain / nbPixel; + runInfo.pixelIndex = remain % nbPixel; + //************************************************************************(end) + + //*********************************************************************** + //**************************Print information (begin)******************** + //*********************************************************************** + + printf( + "---------RunID=%d:\nProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d," + "nbParticle = %d\n", + runID, runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, nbParticle); + + //*********************************************************************** + //**************************Print information (end)********************** + //*********************************************************************** + + if (!nbParticle) continue; + std::vector gammaAtExit(nbParticle); + fread(&gammaAtExit[0], sizeof(ParticleInfo), nbParticle, input); + + // angleOfDetector+totalAngleSpan/nbProjection*runInfo.projectionIndex means + // the angle between source direction and detector, which should be constant + // when source is rotating + double ra = TMath::DegToRad() + * (angleOfDetector + totalAngleSpan / nbProjection * runInfo.projectionIndex); + centerOfDetector.m_x = distanceObjectDetector * cos(ra); + centerOfDetector.m_y = distanceObjectDetector * sin(ra); + centerOfDetector.m_z = 0; + + for (int i = 0; i < nbParticle; ++i) { + // gamma selection: energy should be lower than 4095*10eV = 49.45 keV + if (gammaAtExit[i].energy_keV >= 40.95 || gammaAtExit[i].energy_keV <= 0.9) continue; + + gammaMomentum.m_x = gammaAtExit[i].mx; + gammaMomentum.m_y = gammaAtExit[i].my; + gammaMomentum.m_z = gammaAtExit[i].mz; + + if (!IsDetected(centerOfDetector, gammaMomentum, theta)) + continue; + else { + pixeEvent.energy_10eV = floor(100 * gammaAtExit[i].energy_keV + 0.5); + pixeEvent.projectionIndex = runInfo.projectionIndex; + pixeEvent.sliceIndex = runInfo.sliceIndex; + pixeEvent.pixelIndex = runInfo.pixelIndex; + fwrite(&pixeEvent, 7, 1, out); + count++; + + //*********************************************************************** + //**************************Print information (begin)******************** + //*********************************************************************** + + // printf("momentum: (%f, %f, %f), energy: %f keV %d 10eV\n", + // gammaAtExit[i].mx, gammaAtExit[i].my, gammaAtExit[i].mz, + // gammaAtExit[i].energy_keV, pixeEvent.energy_10eV); + + //*********************************************************************** + //**************************Print information (end)********************** + //*********************************************************************** + } + } + } + printf( + "\n---------------Number of PixeEvent in total: " + "%lld------------------------\n", + count); + fclose(input); + fclose(out); + + // Recheck the output file in case + // FILE* input2; + // input2 = fopen("PixeEvent_std_AtExit.DAT","rb"); + // PixeEvent p; + // while(fread(&p, 7, 1, input2)) + // { + // printf("__ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, + // Energy_10eV=%d\n", p.projectionIndex, p.sliceIndex, p.pixelIndex, + // p.energy_10eV); + + // } + // fclose(input2); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/BinToStd_ProtonAtExit.C b/examples/advanced/stim_pixe_tomography/Scripts/BinToStd_ProtonAtExit.C new file mode 100644 index 00000000000..cd608a251e4 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/BinToStd_ProtonAtExit.C @@ -0,0 +1,184 @@ +//*********************************************************************************************************** +// BinToStd_ProtonAtExit.C +// Root command file +// Type: root BinToStd_ProtonAtExit.C +// +// Read the output file ProtonAtExit.dat that is generated by Geant4 tomography simulation +// It reads proton at exit information, and rewrite the events in a binary file StimEvent_std.DAT +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include +// using namespace std; + +// Define a structure to read and write each event in the required binary format +struct StimEvent +{ + uint16_t energy_keV; // different from Pixe Event, it is in keV + uint16_t pixelIndex; + uint16_t sliceIndex; + uint8_t projectionIndex; +}; + +struct ParticleInfo +{ + float energy_keV; + float mx; + float my; + float mz; +}; +struct RunInfo +{ + // uint_16t + uint8_t projectionIndex; // 1 byte + uint16_t sliceIndex; // + uint16_t pixelIndex; + uint32_t nbParticle; // 4 bytes int +}; +struct Point +{ + double m_x; + double m_y; + double m_z; +}; + +bool IsDetected(Point poi1, Point poi2, double theta) +{ + double a = (poi1.m_x * poi2.m_x + poi1.m_y * poi2.m_y + poi1.m_z * poi2.m_z) + / sqrt(poi1.m_x * poi1.m_x + poi1.m_y * poi1.m_y + poi1.m_z * poi1.m_z) + / sqrt(poi2.m_x * poi2.m_x + poi2.m_y * poi2.m_y + poi2.m_z * poi2.m_z); + if (a > 1.0) a = 1; + if (a < -1.0) a = -1; + double r = acos(a); + if (r > theta) + return false; + else + return true; +} +void BinToStd_ProtonAtExit() +{ + //*********************************************************************** + //**************************Detection parameters (begin)**************** + //*********************************************************************** + + const int nbProjection = 10; + const int nbSlice = 1; + const int nbPixel = 20; + double totalAngleSpan = 180.; // in degree + + // angle of detector relative to the incident direction of the primary protons at first projection + // for proton, it is fixed to 0 degree, namely opposite to the source + double angleOfDetector = 0.; + double distanceObjectDetector = 22.; // 22 mm + double radiusOfDetector = 5.; // 5 mm + // double theta = atan(radiusOfDetector/distanceObjectDetector); //half apex angle of the right + // circular cone in radian + double theta = 10.2 * TMath::DegToRad(); // in radian + + //*********************************************************************** + //**************************Detection parameters (end)******************* + //*********************************************************************** + + FILE* input = fopen("../build/ProtonAtExit.dat", "rb"); + FILE* out = fopen("../build/StimEvent_std.DAT", "wb"); + + if (input == NULL) { + printf("error for opening the input ProtonAtExit.dat file\n"); + return; + } + + RunInfo runInfo; + StimEvent stimEvent; + Point centerOfDetector; + Point protonMomentum; + long long count = 0; + int runID = -1; + + // while(!feof(input)) //if not the end, read + while (fread(&runInfo, sizeof(RunInfo), 1, input)) { + runID++; + int nbParticle = runInfo.nbParticle; + + //(begin)*************************************************************** + // the following codes are used only when in the simulation + // the index of projection, slice and pixel is not + // correctly configured + runInfo.projectionIndex = runID / (nbSlice * nbPixel); + int remain = runID % (nbSlice * nbPixel); + runInfo.sliceIndex = remain / nbPixel; + runInfo.pixelIndex = remain % nbPixel; + //(end)****************************************************************** + + //*********************************************************************** + //**************************Print information (begin)******************** + //*********************************************************************** + + printf("---------RunID=%d: ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, nbParticle = %d\n", + runID, runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, nbParticle); + + //*********************************************************************** + //**************************Print information (end)********************** + //*********************************************************************** + + if (!nbParticle) continue; + std::vector protonAtExit(nbParticle); + fread(&protonAtExit[0], sizeof(ParticleInfo), nbParticle, input); + + // angleOfDetector+totalAngleSpan/nbProjection*runInfo.projectionIndex means the angle between + // source direction and detector, which should be constant when source is rotating + double ra = TMath::DegToRad() + * (angleOfDetector + totalAngleSpan / nbProjection * runInfo.projectionIndex); + centerOfDetector.m_x = distanceObjectDetector * cos(ra); + centerOfDetector.m_y = distanceObjectDetector * sin(ra); + centerOfDetector.m_z = 0; + + for (int i = 0; i < nbParticle; ++i) { + // proton selection: energy should be lower than 4095 keV + if (protonAtExit[i].energy_keV >= 4095) continue; // proton selection + + protonMomentum.m_x = protonAtExit[i].mx; + protonMomentum.m_y = protonAtExit[i].my; + protonMomentum.m_z = protonAtExit[i].mz; + + if (!IsDetected(centerOfDetector, protonMomentum, theta)) + continue; + else { + stimEvent.energy_keV = floor(protonAtExit[i].energy_keV + 0.5); + stimEvent.projectionIndex = runInfo.projectionIndex; + stimEvent.sliceIndex = runInfo.sliceIndex; + stimEvent.pixelIndex = runInfo.pixelIndex; + fwrite(&stimEvent, 7, 1, out); + count++; + // printf("energy=%f keV\n",protonAtExit[i].energy_keV); + } + } + } + printf("---------------Number of StimEvent in total: %lld------------------------\n", count); + fclose(input); + fclose(out); + + // FILE* input2; + // input2 = fopen("StimEvent_std.DAT","rb"); + // StimEvent p; + // double eventId = -1; + // while(fread(&p, 7, 1, input2)) + // { + + // if(p.projectionIndex == 8 &&p.sliceIndex ==64 && p.pixelIndex==64) + // { + // eventId++; + // printf("StimEvent_%.0f ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, Energy_keV=%d keV\n", + // eventId, p.projectionIndex, p.sliceIndex, p.pixelIndex, p.energy_keV); + + // } + + // } + // fclose(input2); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/BinToStd_gamma_position.C b/examples/advanced/stim_pixe_tomography/Scripts/BinToStd_gamma_position.C new file mode 100644 index 00000000000..1471601741a --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/BinToStd_gamma_position.C @@ -0,0 +1,296 @@ +//*********************************************************************************************************** +// BinToStd_gamma_position.C +// Root command file +// Type: root BinToStd_gamma_position.C +// +// Read the X-ray output file that is generated by Geant4 tomography +// simulation. It reads gamma information, either at creation, or at exit, and rewrite the events +// in a binary file PixeEvent_std.DAT +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include +// using namespace std; + +bool IsEqual(double a, double b, double eps, double releps) +{ + if (a == b) { + return true; + } + + if (fabs(a - b) <= releps * fabs(b)) { + return true; + } + + if (fabs(a - b) < eps) { + return true; + } + + return false; +} +double eps = 1e-20; // absolut difference +double releps = 1e-10; // relative difference + +// Define a structure to read and write each event in the required binary format +struct PixeEvent +{ + uint16_t energy_10eV; + uint16_t pixelIndex; + uint16_t sliceIndex; + uint8_t projectionIndex; +}; +struct ParticleInfo +{ + float energy_keV; + float mx; + float my; + float mz; + float x; + float y; + float z; +}; +struct RunInfo +{ + // uint_16t + uint8_t projectionIndex; // 1 byte + uint16_t sliceIndex; // + uint16_t pixelIndex; + uint32_t nbParticle; // 4 bytes int +}; +struct Point +{ + double m_x; + double m_y; + double m_z; +}; + +bool IsDetected(Point poi1, Point poi2, double theta) +{ + double a = (poi1.m_x * poi2.m_x + poi1.m_y * poi2.m_y + poi1.m_z * poi2.m_z) + / sqrt(poi1.m_x * poi1.m_x + poi1.m_y * poi1.m_y + poi1.m_z * poi1.m_z) + / sqrt(poi2.m_x * poi2.m_x + poi2.m_y * poi2.m_y + poi2.m_z * poi2.m_z); + if (a > 1.0) a = 1; + if (a < -1.0) a = -1; + double r = acos(a); + if (r > theta) + return false; + else { + // printf(" acos: %f, radius: %f\n", r, theta); + return true; + } +} + +bool IsDetected_position(Point poi1, Point poi2, double r) +{ + double a = sqrt((poi1.m_x - poi2.m_x) * (poi1.m_x - poi2.m_x) + + (poi1.m_y - poi2.m_y) * (poi1.m_y - poi2.m_y) + + (poi1.m_z - poi2.m_z) * (poi1.m_z - poi2.m_z)); + + // if(a <= r) return true; + if (a > r) + return false; + + else { + // printf(" distance of two points: %f, radius: %f\n", a, r); + return true; + } +} + +void BinToStd_gamma_position() +{ + //*********************************************************************** + //**************************Detection parameters (begin)***************** + //*********************************************************************** + + const int nbProjection = 1; + const int nbSlice = 1; + const int nbPixel = 1; + double totalAngleSpan = 180.; // in degree + + double angleOfDetector = 135.; // angle of detector relative to the incident + + double distanceObjectDetector = 22000.; // um + + // double theta = atan(radiusOfDetector/distanceObjectDetector); //half apex + // angle of the right circular cone in radian + double theta = 14.726 * TMath::DegToRad(); // in radian + double radiusOfDetector = distanceObjectDetector * tan(theta); + bool usePosition = true; + + //*********************************************************************** + //**************************Detection parameters (end)******************* + //*********************************************************************** + + FILE* input = fopen("../build/GammaAtExit.dat", "rb"); + FILE* out = fopen("../build/PixeEvent_std_AtExit.DAT", "wb"); + + if (input == NULL) { + printf("error for opening the input file\n"); + return; + } + + RunInfo runInfo; + PixeEvent pixeEvent; + Point centerOfDetector; + Point gammaMomentum; + Point gammaPosition; + Point intersectionPoint; + long long count = 0; + int runID = -1; // index of simulations, namely runID, starting from 0 + + // while(!feof(input)) //if not the end, read + while (fread(&runInfo, sizeof(RunInfo), 1, input)) { + runID++; + int nbParticle = runInfo.nbParticle; + + //(begin)**************************************************************** + // the following codes are used only when in the simulation + // the index of projection, slice and pixel is not + // correctly configured + runInfo.projectionIndex = runID / (nbSlice * nbPixel); + int remain = runID % (nbSlice * nbPixel); + runInfo.sliceIndex = remain / nbPixel; + runInfo.pixelIndex = remain % nbPixel; + + //(end)****************************************************************** + + //*********************************************************************** + //**************************Print information (begin)******************** + //*********************************************************************** + + printf( + "---------RunID=%d:\nProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d," + "nbParticle = %d\n", + runID, runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, nbParticle); + + //*********************************************************************** + //**************************Print information (end)********************** + //*********************************************************************** + + if (!nbParticle) continue; + std::vector gammaAtExit(nbParticle); + fread(&gammaAtExit[0], sizeof(ParticleInfo), nbParticle, input); + + // angleOfDetector+totalAngleSpan/nbProjection*runInfo.projectionIndex means + // the angle between source direction and detector, which should be constant + // when source is rotating + double ra = TMath::DegToRad() + * (angleOfDetector + totalAngleSpan / nbProjection * runInfo.projectionIndex); + centerOfDetector.m_x = distanceObjectDetector * cos(ra); + centerOfDetector.m_y = distanceObjectDetector * sin(ra); + centerOfDetector.m_z = 0; + + for (int i = 0; i < nbParticle; ++i) { + // gamma selection: energy should be lower than 4095*10eV = 49.45 keV + if (gammaAtExit[i].energy_keV >= 40.95 || gammaAtExit[i].energy_keV <= 0.9) continue; + + gammaMomentum.m_x = gammaAtExit[i].mx; + gammaMomentum.m_y = gammaAtExit[i].my; + gammaMomentum.m_z = gammaAtExit[i].mz; + + if (!usePosition) { + if (!IsDetected(centerOfDetector, gammaMomentum, theta)) continue; + } + else { + double c = + distanceObjectDetector * (gammaMomentum.m_x * cos(ra) + gammaMomentum.m_y * sin(ra)); + if (IsEqual(0, c, eps, releps)) continue; // parallel + + gammaPosition.m_x = gammaAtExit[i].x; + gammaPosition.m_y = gammaAtExit[i].y; + gammaPosition.m_z = gammaAtExit[i].z; + + double t = (distanceObjectDetector * distanceObjectDetector + - gammaPosition.m_x * distanceObjectDetector * cos(ra) + - gammaPosition.m_y * distanceObjectDetector * sin(ra)) + / c; + + intersectionPoint.m_x = gammaPosition.m_x + gammaMomentum.m_x * t; + intersectionPoint.m_y = gammaPosition.m_y + gammaMomentum.m_y * t; + intersectionPoint.m_z = gammaPosition.m_z + gammaMomentum.m_z * t; + + if (!IsDetected_position(centerOfDetector, intersectionPoint, radiusOfDetector)) continue; + + // printf(" t = %f, intersection point: (%f, %f, %f) centor of detector: (%f, %f, %f) + // 111=%f, 222=%f \n", t, intersectionPoint.m_x,intersectionPoint.m_y,intersectionPoint.m_z, + // centerOfDetector.m_x,centerOfDetector.m_y,centerOfDetector.m_z, + // (distanceObjectDetector*distanceObjectDetector-gammaPosition.m_x*distanceObjectDetector*cos(ra) + // -gammaPosition.m_y*distanceObjectDetector*sin(ra)), c); + + // printf(" distanceObjectDetector = %f, gammaPosition.m_x=%f, + // distanceObjectDetector*cos(ra)=%f, gammaPosition.m_y=%f, + // distanceObjectDetector*sin(ra)=%f\n", distanceObjectDetector, gammaPosition.m_x, + // distanceObjectDetector*cos(ra), + // gammaPosition.m_y, + // distanceObjectDetector*sin(ra)); + + double tt = (intersectionPoint.m_x - gammaPosition.m_x) * gammaMomentum.m_x + + (intersectionPoint.m_y - gammaPosition.m_y) * gammaMomentum.m_y + + (intersectionPoint.m_z - gammaPosition.m_z) * gammaMomentum.m_z; + if (tt < 0) continue; + } + + pixeEvent.energy_10eV = floor(100 * gammaAtExit[i].energy_keV + 0.5); + pixeEvent.projectionIndex = runInfo.projectionIndex; + pixeEvent.sliceIndex = runInfo.sliceIndex; + pixeEvent.pixelIndex = runInfo.pixelIndex; + fwrite(&pixeEvent, 7, 1, out); + count++; + + //*********************************************************************** + //**************************Print information (begin)******************** + //*********************************************************************** + + if (!usePosition) { + printf( + "---------id = %d, RunID=%d ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, momentum: " + "(%f, %f, %f), energy: %f keV\n", + i, runID, runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, + gammaAtExit[i].mx, gammaAtExit[i].my, gammaAtExit[i].mz, gammaAtExit[i].energy_keV); + } + else { + // printf("---------id = %d, RunID=%d ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, + // momentum: (%f, %f, %f), energy: %f keV, position: (%f, %f, %f)\n", i, runID, + // runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, gammaAtExit[i].mx, + // gammaAtExit[i].my, gammaAtExit[i].mz, gammaAtExit[i].energy_keV, gammaAtExit[i].x, + // gammaAtExit[i].y, gammaAtExit[i].z); + + printf( + "---------id = %d, RunID=%d ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, momentum: " + "(%f, %f, %f), energy: %f keV\n", + i, runID, runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, + gammaAtExit[i].mx, gammaAtExit[i].my, gammaAtExit[i].mz, gammaAtExit[i].energy_keV); + } + + //*********************************************************************** + //**************************Print information (end)********************** + //*********************************************************************** + } + } + printf( + "\n---------------Number of PixeEvent in total: " + "%lld------------------------\n", + count); + fclose(input); + fclose(out); + + // Recheck the output file in case + // FILE* input2; + // input2 = fopen("PixeEvent_std_AtExit.DAT","rb"); + // PixeEvent p; + // while(fread(&p, 7, 1, input2)) + // { + // printf("__ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, + // Energy_10eV=%d\n", p.projectionIndex, p.sliceIndex, p.pixelIndex, + // p.energy_10eV); + + // } + // fclose(input2); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/BinToStd_proton_position.C b/examples/advanced/stim_pixe_tomography/Scripts/BinToStd_proton_position.C new file mode 100644 index 00000000000..456708d5c12 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/BinToStd_proton_position.C @@ -0,0 +1,305 @@ +//*********************************************************************************************************** +// BinToStd_proton_position.C +// Root command file +// Type: root BinToStd_proton_position.C +// +// Read the X-ray output file that is generated by Geant4 tomography +// simulation. It reads gamma information, either at creation, or at exit, and rewrite the events +// in a binary file StimEvent_std.DAT +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include +// using namespace std; + +bool IsEqual(double a, double b, double eps, double releps) +{ + if (a == b) { + return true; + } + + if (fabs(a - b) <= releps * fabs(b)) { + return true; + } + + if (fabs(a - b) < eps) { + return true; + } + + return false; +} +double eps = 1e-20; // absolut difference +double releps = 1e-10; // relative difference + +// Define a structure to read and write each event in the required binary format +struct StimEvent +{ + uint16_t energy_keV; // different from Pixe Event, it is in keV + uint16_t pixelIndex; + uint16_t sliceIndex; + uint8_t projectionIndex; +}; +struct ParticleInfo +{ + float energy_keV; + float mx; + float my; + float mz; + float x; + float y; + float z; +}; +struct RunInfo +{ + // uint_16t + uint8_t projectionIndex; // 1 byte + uint16_t sliceIndex; // + uint16_t pixelIndex; + uint32_t nbParticle; // 4 bytes int +}; +struct Point +{ + double m_x; + double m_y; + double m_z; +}; + +bool IsDetected(Point poi1, Point poi2, double theta) +{ + double a = (poi1.m_x * poi2.m_x + poi1.m_y * poi2.m_y + poi1.m_z * poi2.m_z) + / sqrt(poi1.m_x * poi1.m_x + poi1.m_y * poi1.m_y + poi1.m_z * poi1.m_z) + / sqrt(poi2.m_x * poi2.m_x + poi2.m_y * poi2.m_y + poi2.m_z * poi2.m_z); + if (a > 1.0) a = 1; + if (a < -1.0) a = -1; + double r = acos(a); + if (r > theta) + return false; + else { + // printf(" acos: %f, radius: %f\n", r, theta); + return true; + } +} + +bool IsDetected_position(Point poi1, Point poi2, double r) +{ + double a = sqrt((poi1.m_x - poi2.m_x) * (poi1.m_x - poi2.m_x) + + (poi1.m_y - poi2.m_y) * (poi1.m_y - poi2.m_y) + + (poi1.m_z - poi2.m_z) * (poi1.m_z - poi2.m_z)); + + // if(a <= r) return true; + if (a > r) + return false; + + else { + // printf(" distance of two points: %f, radius: %f\n", a, r); + return true; + } +} + +void BinToStd_proton_position() +{ + // printf("%f %f %f\n", acos(1), acos(-1), acos(0)); + // return; + + //*********************************************************************** + //**************************Detection parameters (begin)***************** + //*********************************************************************** + + const int nbProjection = 1; + const int nbSlice = 1; + const int nbPixel = 1; + double totalAngleSpan = 180.; // in degree + + double angleOfDetector = 0.; // angle of detector relative to the incident + + double distanceObjectDetector = 22000.; // um + + // double theta = atan(radiusOfDetector/distanceObjectDetector); //half apex + // angle of the right circular cone in radian + double theta = 10.2 * TMath::DegToRad(); // in radian + double radiusOfDetector = distanceObjectDetector * tan(theta); + bool usePosition = true; + + //*********************************************************************** + //**************************Detection parameters (end)******************* + //*********************************************************************** + + FILE* input = fopen("../build/ProtonAtExit.dat", "rb"); + FILE* out = fopen("../build/StimEvent_std", "wb"); + + if (input == NULL) { + printf("error for opening the input file\n"); + return; + } + + RunInfo runInfo; + StimEvent stimEvent; + Point centerOfDetector; + Point protonMomentum; + Point protonPosition; + Point intersectionPoint; + long long count = 0; + int runID = -1; // index of simulations, namely runID, starting from 0 + + // while(!feof(input)) //if not the end, read + while (fread(&runInfo, sizeof(RunInfo), 1, input)) { + runID++; + int nbParticle = runInfo.nbParticle; + + //(begin)**************************************************************** + // the following codes are used only when in the simulation + // the index of projection, slice and pixel is not + // correctly configured + runInfo.projectionIndex = runID / (nbSlice * nbPixel); + int remain = runID % (nbSlice * nbPixel); + runInfo.sliceIndex = remain / nbPixel; + runInfo.pixelIndex = remain % nbPixel; + + //(end)******************************************************************* + + //*********************************************************************** + //**************************Print information (begin)******************** + //*********************************************************************** + + printf( + "---------RunID=%d:\nProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d," + "nbParticle = %d\n", + runID, runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, nbParticle); + + //*********************************************************************** + //**************************Print information (end)********************** + //*********************************************************************** + + if (!nbParticle) continue; + std::vector protonAtExit(nbParticle); + fread(&protonAtExit[0], sizeof(ParticleInfo), nbParticle, input); + + // angleOfDetector+totalAngleSpan/nbProjection*runInfo.projectionIndex means + // the angle between source direction and detector, which should be constant + // when source is rotating + double ra = TMath::DegToRad() + * (angleOfDetector + totalAngleSpan / nbProjection * runInfo.projectionIndex); + centerOfDetector.m_x = distanceObjectDetector * cos(ra); + centerOfDetector.m_y = distanceObjectDetector * sin(ra); + centerOfDetector.m_z = 0; + + for (int i = 0; i < nbParticle; ++i) { + // proton selection: energy should be lower than 4095 keV + if (protonAtExit[i].energy_keV >= 4095) continue; + + protonMomentum.m_x = protonAtExit[i].mx; + protonMomentum.m_y = protonAtExit[i].my; + protonMomentum.m_z = protonAtExit[i].mz; + + if (!usePosition) { + if (!IsDetected(centerOfDetector, protonMomentum, theta)) continue; + } + else { + double c = + distanceObjectDetector * (protonMomentum.m_x * cos(ra) + protonMomentum.m_y * sin(ra)); + if (IsEqual(0, c, eps, releps)) continue; // parallel + + protonPosition.m_x = protonAtExit[i].x; + protonPosition.m_y = protonAtExit[i].y; + protonPosition.m_z = protonAtExit[i].z; + + double t = (distanceObjectDetector * distanceObjectDetector + - protonPosition.m_x * distanceObjectDetector * cos(ra) + - protonPosition.m_y * distanceObjectDetector * sin(ra)) + / c; + + intersectionPoint.m_x = protonPosition.m_x + protonMomentum.m_x * t; + intersectionPoint.m_y = protonPosition.m_y + protonMomentum.m_y * t; + intersectionPoint.m_z = protonPosition.m_z + protonMomentum.m_z * t; + + if (!IsDetected_position(centerOfDetector, intersectionPoint, radiusOfDetector)) continue; + + // printf(" t = %f, intersection point: (%f, %f, %f) centor of detector: (%f, %f, %f) + // 111=%f, 222=%f \n", t, intersectionPoint.m_x,intersectionPoint.m_y,intersectionPoint.m_z, + // centerOfDetector.m_x,centerOfDetector.m_y,centerOfDetector.m_z, + // (distanceObjectDetector*distanceObjectDetector-protonPosition.m_x*distanceObjectDetector*cos(ra) + // -protonPosition.m_y*distanceObjectDetector*sin(ra)), c); + + // printf(" distanceObjectDetector = %f, protonPosition.m_x=%f, + // distanceObjectDetector*cos(ra)=%f, protonPosition.m_y=%f, + // distanceObjectDetector*sin(ra)=%f\n", distanceObjectDetector, protonPosition.m_x, + // distanceObjectDetector*cos(ra), + // protonPosition.m_y, + // distanceObjectDetector*sin(ra)); + + double tt = (intersectionPoint.m_x - protonPosition.m_x) * protonMomentum.m_x + + (intersectionPoint.m_y - protonPosition.m_y) * protonMomentum.m_y + + (intersectionPoint.m_z - protonPosition.m_z) * protonMomentum.m_z; + if (tt < 0) continue; + } + + stimEvent.energy_10eV = floor(100 * protonAtExit[i].energy_keV + 0.5); + stimEvent.projectionIndex = runInfo.projectionIndex; + stimEvent.sliceIndex = runInfo.sliceIndex; + stimEvent.pixelIndex = runInfo.pixelIndex; + fwrite(&stimEvent, 7, 1, out); + count++; + + //*********************************************************************** + //**************************Print information + //(begin)******************** + //*********************************************************************** + + if (!usePosition) { + printf( + "---------id = %d, RunID=%d ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, momentum: " + "(%f, %f, %f), energy: %f keV\n", + i, runID, runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, + protonAtExit[i].mx, protonAtExit[i].my, protonAtExit[i].mz, protonAtExit[i].energy_keV); + } + else { + // printf("---------id = %d, RunID=%d ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, + // momentum: (%f, %f, %f), energy: %f keV, position: (%f, %f, %f)\n", i, runID, + // runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, protonAtExit[i].mx, + // protonAtExit[i].my, protonAtExit[i].mz, protonAtExit[i].energy_keV, protonAtExit[i].x, + // protonAtExit[i].y, protonAtExit[i].z); + + printf( + "---------id = %d, RunID=%d ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, momentum: " + "(%f, %f, %f), energy: %f keV\n", + i, runID, runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, + protonAtExit[i].mx, protonAtExit[i].my, protonAtExit[i].mz, protonAtExit[i].energy_keV); + } + + //*********************************************************************** + //**************************Print information (end)********************** + //*********************************************************************** + } + } + printf( + "\n---------------Number of StimEvent in total: " + "%lld------------------------\n", + count); + fclose(input); + fclose(out); + + // FILE* input2; + // input2 = fopen("StimEvent_std.DAT","rb"); + // StimEvent p; + // double eventId = -1; + // while(fread(&p, 7, 1, input2)) + // { + + // if(p.projectionIndex == 8 &&p.sliceIndex ==64 && p.pixelIndex==64) + // { + // eventId++; + // printf("StimEvent_%.0f ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, Energy_keV=%d keV\n", + // eventId, p.projectionIndex, p.sliceIndex, p.pixelIndex, p.energy_keV); + + // } + + // } + // fclose(input2); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/Check_PixeEventFile.C b/examples/advanced/stim_pixe_tomography/Scripts/Check_PixeEventFile.C new file mode 100644 index 00000000000..5a48bb79e70 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/Check_PixeEventFile.C @@ -0,0 +1,85 @@ +//*********************************************************************************************************** +// Check_PixeEventFile.C +// Root command file +// Use it by typing in the command line of Root terminal: root Check_PixeEventFile.C +// +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include +// using namespace std; + +#define PI 3.14159265f + +// Define a structure to read and write each event in the required binary format +struct PixeEvent +{ + uint16_t energy_10eV; + uint16_t pixelIndex; + uint16_t sliceIndex; + uint8_t projectionIndex; +}; +struct ParticleInfo +{ + float energy_keV; + float mx; + float my; + float mz; +}; +struct RunInfo +{ + // uint_16t + uint8_t projectionIndex; // 1 byte + uint16_t sliceIndex; // + uint16_t pixelIndex; + uint32_t nbParticle; // 4 bytes int +}; + +double DegreeToRadian(double degree) +{ + return (PI * degree / 180.); +} + +struct Point +{ + double m_x; + double m_y; + double m_z; +}; +bool IsDetected(Point poi1, Point poi2, double theta) +{ + double a = (poi1.m_x * poi2.m_x + poi1.m_y * poi2.m_y + poi1.m_z * poi2.m_z) + / sqrt(poi1.m_x * poi1.m_x + poi1.m_y * poi1.m_y + poi1.m_z * poi1.m_z) + / sqrt(poi2.m_x * poi2.m_x + poi2.m_y * poi2.m_y + poi2.m_z * poi2.m_z); + if (a > 1.0) a = 1; + if (a < -1.0) a = -1; + double r = acos(a); + if (r > theta) + return false; + else + return true; +} + +void Check_PixeEventFile() +{ + FILE* input2 = + fopen("../build/PixeEvent_std_AtExit_Detector135_Aperture70_50Projections.DAT", "rb"); + PixeEvent ppp; + int proj = -1; + while (fread(&ppp, 7, 1, input2)) { + if (ppp.projectionIndex != proj) { + printf("__ProjectionIndex=%d\n", ppp.projectionIndex); + proj = ppp.projectionIndex; + } + // printf("__ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, Energy_10eV=%d\n", + // ppp.projectionIndex, ppp.sliceIndex, ppp.pixelIndex, ppp.energy_10eV); + } + fclose(input2); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_GammaAtCreation.C b/examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_GammaAtCreation.C new file mode 100644 index 00000000000..df8017e5f6c --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_GammaAtCreation.C @@ -0,0 +1,279 @@ +//*********************************************************************************************************** +// Concatenate_BinToStd_GammaAtCreation.C +// Root command file +// Type: root Concatenate_BinToStd_GammaAtCreation.C +// +// It is used in case of interruption +// Read 2 output files GammaAtCreation_1.dat and GammaAtCreation_2.dat that are generated by Geant4 +// tomography simulation. It reads all the gamma at creation information, and rewrite the events in +// a binary file PixeEvent_std_AtCreation.DAT +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include +// using namespace std; + +// Define a structure to read and write each event in the required binary format +struct PixeEvent +{ + uint16_t energy_10eV; + uint16_t pixelIndex; + uint16_t sliceIndex; + uint8_t projectionIndex; +}; +struct ParticleInfo +{ + float energy_keV; + float mx; + float my; + float mz; +}; +struct RunInfo +{ + // uint_16t + uint8_t projectionIndex; // 1 byte + uint16_t sliceIndex; // + uint16_t pixelIndex; + uint32_t nbParticle; // 4 bytes int +}; + +struct Point +{ + double m_x; + double m_y; + double m_z; +}; +bool IsDetected(Point poi1, Point poi2, double theta) +{ + double a = (poi1.m_x * poi2.m_x + poi1.m_y * poi2.m_y + poi1.m_z * poi2.m_z) + / sqrt(poi1.m_x * poi1.m_x + poi1.m_y * poi1.m_y + poi1.m_z * poi1.m_z) + / sqrt(poi2.m_x * poi2.m_x + poi2.m_y * poi2.m_y + poi2.m_z * poi2.m_z); + if (a > 1.0) a = 1; + if (a < -1.0) a = -1; + double r = acos(a); + if (r > theta) + return false; + else + return true; +} +void Concatenate_BinToStd_GammaAtCreation() +{ + //*********************************************************************** + //**************************Detection parameters (begin)***************** + //*********************************************************************** + + const int nbProjection = 10; + const int nbSlice = 1; + const int nbPixel = 20; + double totalAngleSpan = 180.; // in degree + + double angleOfDetector = + 135.; // angle of detector relative to the incident direction of the primary protons // + double distanceObjectDetector = 22.; // 22 mm + double radiusOfDetector = 5.; // 5 mm + // double theta = atan(radiusOfDetector/distanceObjectDetector); //half apex angle of the right + // circular cone in radian + double theta = 70 * TMath::DegToRad(); // in radian + + int P_interrupt = 6; // Projection of interruption + + //*********************************************************************** + //**************************Detection parameters (end)******************* + //*********************************************************************** + + // assuming there is one interruption + FILE* input1 = fopen("../build/GammaAtCreation_1.dat", "rb"); + FILE* input2 = fopen("../build/GammaAtCreation_2.dat", "rb"); + FILE* out = fopen("../build/PixeEvent_std_AtCreation.DAT", "wb"); + + if (input1 == NULL) { + printf("error for opening the input GammaAtCreation_1.dat file\n"); + return; + } + if (input2 == NULL) { + printf("error for opening the input GammaAtCreation_2.dat file\n"); + return; + } + + RunInfo runInfo; + PixeEvent pixeEvent; + Point centerOfDetector; + Point gammaMomentum; + long long count1 = 0; + long long count2 = 0; + int runID = -1; // index of simulations, namely runID, starting from 0 + + // ************************************************************(begin) + // **********************READ FIRST FILE*********************** + // ************************************************************ + while (fread(&runInfo, sizeof(RunInfo), 1, input1)) { + runID++; + + //(begin)*************************************************************** + // the following codes are used only when in the simulation + // the index of projection, slice and pixel is not + // correctly configured + runInfo.projectionIndex = runID / (nbSlice * nbPixel); + int remain = runID % (nbSlice * nbPixel); + runInfo.sliceIndex = remain / nbPixel; + runInfo.pixelIndex = remain % nbPixel; + //(end)****************************************************************** + + if (runInfo.projectionIndex == P_interrupt) { + runID--; + break; + } + + int nbParticle = runInfo.nbParticle; + + std::vector gammaAtCreation(nbParticle); + fread(&gammaAtCreation[0], sizeof(ParticleInfo), nbParticle, input1); + + // if(runInfo.sliceIndex!=1) continue; + // if(runInfo.sliceIndex!=31&&runInfo.sliceIndex!=32) continue; + // if(runInfo.sliceIndex!=31) continue; + + //*********************************************************************** + //**************************Print information (begin)******************** + //*********************************************************************** + + printf("-1--runId %d, ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, nbParticle = %d\n", + runID, runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, nbParticle); + + //*********************************************************************** + //**************************Print information (end)********************** + //*********************************************************************** + + // angleOfDetector+totalAngleSpan/nbProjection*runInfo.projectionIndex means the angle between + // source direction and detector, which should be constant when source is rotating + double ra = TMath::DegToRad() + * (angleOfDetector + totalAngleSpan / nbProjection * runInfo.projectionIndex); + centerOfDetector.m_x = distanceObjectDetector * cos(ra); + centerOfDetector.m_y = distanceObjectDetector * sin(ra); + centerOfDetector.m_z = 0; + + for (int i = 0; i < nbParticle; ++i) { + // gamma selection: energy should be lower than 4095*10eV = 49.45 keV + if (gammaAtCreation[i].energy_keV >= 40.95 || gammaAtCreation[i].energy_keV <= 0.9) + continue; // gamma selection + + gammaMomentum.m_x = gammaAtCreation[i].mx; + gammaMomentum.m_y = gammaAtCreation[i].my; + gammaMomentum.m_z = gammaAtCreation[i].mz; + + if (!IsDetected(centerOfDetector, gammaMomentum, theta)) + continue; + else { + pixeEvent.energy_10eV = floor(100 * gammaAtCreation[i].energy_keV + 0.5); + pixeEvent.projectionIndex = runInfo.projectionIndex; + pixeEvent.sliceIndex = runInfo.sliceIndex; + pixeEvent.pixelIndex = runInfo.pixelIndex; + fwrite(&pixeEvent, 7, 1, out); + count1++; + } + } + } + printf("---------------Number of PixeEvent in the first file: %lld------------------------\n", + count1); + fclose(input1); + + // ************************************************************ + // **********************READ FIRST FILE (end)***************** + // ************************************************************ + + // ************************************************************ + // **********************READ SECOND FILE (begin)************** + // ************************************************************ + while (fread(&runInfo, sizeof(RunInfo), 1, input2)) { + runID++; + + //(begin)*************************************************************** + // the following codes are used only when in the simulation + // the index of projection, slice and pixel is not + // correctly configured + runInfo.projectionIndex = runID / (nbSlice * nbPixel); + int remain = runID % (nbSlice * nbPixel); + runInfo.sliceIndex = remain / nbPixel; + runInfo.pixelIndex = remain % nbPixel; + //(end)****************************************************************** + + int nbParticle = runInfo.nbParticle; + + //*********************************************************************** + //**************************Print information (begin)******************** + //*********************************************************************** + + printf("-2--runId %d, ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, nbParticle = %d\n", + runID, runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, nbParticle); + + //*********************************************************************** + //**************************Print information (end)********************** + //*********************************************************************** + + if (!nbParticle) continue; + std::vector gammaAtCreation(nbParticle); + fread(&gammaAtCreation[0], sizeof(ParticleInfo), nbParticle, input2); + + // if(runInfo.sliceIndex!=1) continue; + // if(runInfo.sliceIndex!=31) continue; + // if(runInfo.sliceIndex!=31&&runInfo.sliceIndex!=32) continue; + + // angleOfDetector+totalAngleSpan/nbProjection*runInfo.projectionIndex means the angle between + // source direction and detector, which should be constant when source is rotating + double ra = TMath::DegToRad() + * (angleOfDetector + totalAngleSpan / nbProjection * runInfo.projectionIndex); + centerOfDetector.m_x = distanceObjectDetector * cos(ra); + centerOfDetector.m_y = distanceObjectDetector * sin(ra); + centerOfDetector.m_z = 0; + + for (int i = 0; i < nbParticle; ++i) { + // gamma selection: energy should be lower than 4095*10eV = 49.45 keV + if (gammaAtCreation[i].energy_keV >= 40.95 || gammaAtCreation[i].energy_keV <= 0.9) + continue; // gamma selection + + gammaMomentum.m_x = gammaAtCreation[i].mx; + gammaMomentum.m_y = gammaAtCreation[i].my; + gammaMomentum.m_z = gammaAtCreation[i].mz; + + if (!IsDetected(centerOfDetector, gammaMomentum, theta)) + continue; + else { + pixeEvent.energy_10eV = floor(100 * gammaAtCreation[i].energy_keV + 0.5); + pixeEvent.projectionIndex = runInfo.projectionIndex; + pixeEvent.sliceIndex = runInfo.sliceIndex; + pixeEvent.pixelIndex = runInfo.pixelIndex; + fwrite(&pixeEvent, 7, 1, out); + count2++; + } + } + } + printf("---------------Number of PixeEvent in in the second file: %lld------------------------\n", + count2); + + // ************************************************************ + // **********************READ SECOND FILE (end)**************** + // ************************************************************ + + printf("---------------Number of PixeEvent in total: %lld------------------------\n", + count1 + count2); + fclose(input2); + fclose(out); + + // Recheck the output file in case + // FILE* input2 = fopen("PixeEvent_std_AtCreation.DAT","rb"); + // PixeEvent p; + // while(fread(&p, 7, 1, input2)) + // { + // printf("__ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, Energy_10eV=%d\n", + // p.projectionIndex, p.sliceIndex, p.pixelIndex, p.energy_10eV); + + // } + // fclose(input2); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_GammaAtCreation_fabricate.C b/examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_GammaAtCreation_fabricate.C new file mode 100644 index 00000000000..830e20a91a9 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_GammaAtCreation_fabricate.C @@ -0,0 +1,226 @@ +//*********************************************************************************************************** +// Concatenate_BinToStd_GammaAtCreation_fabricate.C +// Root command file +// Use it by typing in the command line of Root terminal: root +// Concatenate_BinToStd_GammaAtCreation_fabricate.C +// +// +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include +// using namespace std; + +#define PI 3.14159265f + +// Define a structure to read and write each event in the required binary format +struct PixeEvent +{ + uint16_t energy_10eV; + uint16_t pixelIndex; + uint16_t sliceIndex; + uint8_t projectionIndex; +}; +struct ParticleInfo +{ + float energy_keV; + float mx; + float my; + float mz; +}; +struct RunInfo +{ + // uint_16t + uint8_t projectionIndex; // 1 byte + uint16_t sliceIndex; // + uint16_t pixelIndex; + uint32_t nbParticle; // 4 bytes int +}; + +double DegreeToRadian(double degree) +{ + return (PI * degree / 180.); +} + +struct Point +{ + double m_x; + double m_y; + double m_z; +}; +bool IsDetected(Point poi1, Point poi2, double theta) +{ + double a = (poi1.m_x * poi2.m_x + poi1.m_y * poi2.m_y + poi1.m_z * poi2.m_z) + / sqrt(poi1.m_x * poi1.m_x + poi1.m_y * poi1.m_y + poi1.m_z * poi1.m_z) + / sqrt(poi2.m_x * poi2.m_x + poi2.m_y * poi2.m_y + poi2.m_z * poi2.m_z); + if (a > 1.0) a = 1; + if (a < -1.0) a = -1; + double r = acos(a); + if (r > theta) + return false; + else + return true; +} + +void Concatenate_BinToStd_GammaAtCreation_fabricate() +{ + //*********************************************************************** + //**************************Detection parameters (begin)***************** + //*********************************************************************** + + const int nbProjection = 100; + const int nbSlice = 1; + const int nbPixel = 128; + double totalAngleSpan = 180.; // in degree + + double angleOfDetector = + 135.; // angle of detector relative to the incident direction of the primary protons // + double distanceObjectDetector = 22.; // 22 mm + double radiusOfDetector = 5.; // 5 mm + // double theta = atan(radiusOfDetector/distanceObjectDetector); //half apex angle of the right + // circular cone in radian double theta = 14.726*TMath::DegToRad(); // in radian + double theta = 70 * TMath::DegToRad(); // in radian + // double theta = 70*TMath::DegToRad(); // in radian + // double theta = DegreeToRadian(70); + + int P_interrupt = 1; // Projection of interruption + + //*********************************************************************** + //**************************Detection parameters (end)******************* + //*********************************************************************** + + // assuming there is one interruption + FILE* input1 = fopen("../RT7_GDP_1Projs_1Slice_128Pixels_2000000_4MeV/GammaAtCreation.dat", "rb"); + FILE* out = + fopen("../RT7_GDP_1Projs_1Slice_128Pixels_2000000_4MeV/PixeEvent_std_AtCreation.DAT", "wb"); + // FILE* temp; + // temp =fopen("temp.DAT","wb"); + + if (input1 == NULL) { + printf("error for opening the input GammaAtCreation.dat file\n"); + return; + } + + RunInfo runInfo; + PixeEvent pixeEvent; + Point centerOfDetector; + Point gammaMomentum; + long long count1 = 0; + long long count2 = 0; + int runID = -1; // index of simulations, namely runID, starting from 0 + std::vector eventVec; + + // ************************************************************(begin) + // **********************READ FIRST FILE*********************** + // ************************************************************ + while (fread(&runInfo, sizeof(RunInfo), 1, input1)) { + runID++; + runInfo.projectionIndex = runID / (nbSlice * nbPixel); + int remain = runID % (nbSlice * nbPixel); + runInfo.sliceIndex = remain / nbPixel; + runInfo.pixelIndex = remain % nbPixel; + if (runInfo.projectionIndex == P_interrupt) { + runID--; + break; + } + + int nbParticle = runInfo.nbParticle; + + std::vector gammaAtCreation(nbParticle); + fread(&gammaAtCreation[0], sizeof(ParticleInfo), nbParticle, input1); + + //*********************************************************************** + //**************************Print information (begin)******************** + //*********************************************************************** + + // printf("-1--runId %d, ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, nbParticle = + // %d\n",runID, runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, nbParticle); + + //*********************************************************************** + //**************************Print information (end)********************** + //*********************************************************************** + + // angleOfDetector+totalAngleSpan/nbProjection*runInfo.projectionIndex means the angle between + // source direction and detector, which should be constant when source is rotating + double ra = + DegreeToRadian(angleOfDetector + totalAngleSpan / nbProjection * runInfo.projectionIndex); + centerOfDetector.m_x = distanceObjectDetector * cos(ra); + centerOfDetector.m_y = distanceObjectDetector * sin(ra); + centerOfDetector.m_z = 0; + + for (int i = 0; i < nbParticle; ++i) { + // gamma selection: energy should be lower than 4095*10eV = 49.45 keV + if (gammaAtCreation[i].energy_keV >= 40.95 || gammaAtCreation[i].energy_keV <= 0.9) + continue; // gamma selection + + gammaMomentum.m_x = gammaAtCreation[i].mx; + gammaMomentum.m_y = gammaAtCreation[i].my; + gammaMomentum.m_z = gammaAtCreation[i].mz; + + if (!IsDetected(centerOfDetector, gammaMomentum, theta)) + continue; + else { + pixeEvent.energy_10eV = floor(100 * gammaAtCreation[i].energy_keV + 0.5); + pixeEvent.projectionIndex = runInfo.projectionIndex; + pixeEvent.sliceIndex = runInfo.sliceIndex; + pixeEvent.pixelIndex = runInfo.pixelIndex; + + eventVec.push_back(pixeEvent); + // fwrite(&pixeEvent, 7, 1, temp); + // fwrite(&pixeEvent, 7, 1, out); + count1++; + } + } + } + printf("---------------Number of PixeEvent in the first file: %lld------------------------\n", + count1); + fclose(input1); + // fclose(temp); + + // ************************************************************(end) + // **********************READ FIRST FILE*********************** + // ************************************************************ + + PixeEvent pp; + PixeEvent p; + + for (int i = 0; i < nbProjection; ++i) { + int size = eventVec.size(); + for (int j = 0; j < size; ++j) { + p = eventVec[j]; + pp.energy_10eV = p.energy_10eV; + pp.projectionIndex = p.projectionIndex + i; + pp.sliceIndex = p.sliceIndex; // index of slices should be reset, starting from 0 + pp.pixelIndex = p.pixelIndex; + pp.pixelIndex = p.pixelIndex; + // printf("__ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, Energy_10eV=%d\n", + // pp.projectionIndex, pp.sliceIndex, pp.pixelIndex, pp.energy_10eV); + fwrite(&pp, 7, 1, out); + } + } + + // fclose(temp); + fclose(out); + + // Recheck the output file in case + FILE* input2 = + fopen("../RT7_GDP_1Projs_1Slice_128Pixels_2000000_4MeV/PixeEvent_std_AtCreation.DAT", "rb"); + PixeEvent ppp; + int proj = -1; + while (fread(&ppp, 7, 1, input2)) { + if (ppp.projectionIndex != proj) { + printf("__ProjectionIndex=%d\n", ppp.projectionIndex); + proj = ppp.projectionIndex; + } + // printf("__ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, Energy_10eV=%d\n", + // ppp.projectionIndex, ppp.sliceIndex, ppp.pixelIndex, ppp.energy_10eV); + } + fclose(input2); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_GammaAtExit.C b/examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_GammaAtExit.C new file mode 100644 index 00000000000..6d84a817ca9 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_GammaAtExit.C @@ -0,0 +1,270 @@ +//*********************************************************************************************************** +// Concatenate_BinToStd_GammaAtExit.C +// Root command file +// Type: root Concatenate_BinToStd_GammaAtExit.C +// +// It is used in case of one interruption +// Read 2 output files GammaAtExit_1.dat and GammaAtExit_2.dat that are generated by Geant4 +// tomography simulation It reads gamma at exit information, and rewrite the events in a binary file +// PixeEvent_std_AtExit.DAT +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include +// using namespace std; + +// Define a structure to read and write each event in the required binary format +struct PixeEvent +{ + uint16_t energy_10eV; + uint16_t pixelIndex; + uint16_t sliceIndex; + uint8_t projectionIndex; +}; +struct ParticleInfo +{ + float energy_keV; + float mx; + float my; + float mz; +}; +struct RunInfo +{ + // uint_16t + uint8_t projectionIndex; // 1 byte + uint16_t sliceIndex; // + uint16_t pixelIndex; + uint32_t nbParticle; // 4 bytes int +}; + +struct Point +{ + double m_x; + double m_y; + double m_z; +}; +bool IsDetected(Point poi1, Point poi2, double theta) +{ + double a = (poi1.m_x * poi2.m_x + poi1.m_y * poi2.m_y + poi1.m_z * poi2.m_z) + / sqrt(poi1.m_x * poi1.m_x + poi1.m_y * poi1.m_y + poi1.m_z * poi1.m_z) + / sqrt(poi2.m_x * poi2.m_x + poi2.m_y * poi2.m_y + poi2.m_z * poi2.m_z); + if (a > 1.0) a = 1; + if (a < -1.0) a = -1; + double r = acos(a); + if (r > theta) + return false; + else + return true; +} +void Concatenate_BinToStd_GammaAtExit() +{ + //*********************************************************************** + //**************************Detection parameters (begin)***************** + //*********************************************************************** + + const int nbProjection = 10; + const int nbSlice = 1; + const int nbPixel = 20; + double totalAngleSpan = 180.; // in degree + + double angleOfDetector = + 135.; // angle of detector relative to the incident direction of the primary protons // + double distanceObjectDetector = 22.; // 22 mm + double radiusOfDetector = 5.; // 5 mm + // double theta = atan(radiusOfDetector/distanceObjectDetector); //half apex angle of the right + // circular cone in radian + double theta = 70 * TMath::DegToRad(); // in radian + + int P_interrupt = 6; // Projection of interruption + + //*********************************************************************** + //**************************Detection parameters (end)******************* + //*********************************************************************** + + // assuming there is one interruption + FILE* input1 = fopen("../build/GammaAtExit_1.dat", "rb"); + FILE* input2 = fopen("../build/GammaAtExit_2.dat", "rb"); + FILE* out = fopen("../build/PixeEvent_std_AtExit.DAT", "wb"); + + if (input1 == NULL) { + printf("error for opening the input GammaAtExit_1.dat file\n"); + return; + } + if (input2 == NULL) { + printf("error for opening the input GammaAtExit_2.dat file\n"); + return; + } + + RunInfo runInfo; + PixeEvent pixeEvent; + Point centerOfDetector; + Point gammaMomentum; + long long count1 = 0; + long long count2 = 0; + int runID = -1; // index of simulations, namely runID, starting from 0 + + // ************************************************************ + // **********************READ FIRST FILE (begin)*************** + // ************************************************************ + while (fread(&runInfo, sizeof(RunInfo), 1, input1)) { + runID++; + + runInfo.projectionIndex = runID / (nbSlice * nbPixel); + int remain = runID % (nbSlice * nbPixel); + runInfo.sliceIndex = remain / nbPixel; + runInfo.pixelIndex = remain % nbPixel; + + if (runInfo.projectionIndex == P_interrupt) { + runID--; + break; + } + int nbParticle = runInfo.nbParticle; + + //*********************************************************************** + //**************************Print information (begin)******************** + //*********************************************************************** + + printf("-1--runId %d, ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, nbParticle = %d\n", + runID, runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, nbParticle); + + //*********************************************************************** + //**************************Print information (end)********************** + //*********************************************************************** + + if (!nbParticle) continue; + + std::vector gammaAtExit(nbParticle); + fread(&gammaAtExit[0], sizeof(ParticleInfo), nbParticle, input1); + + // if(runInfo.sliceIndex!=1) continue; + // if(runInfo.sliceIndex!=31&&runInfo.sliceIndex!=32) continue; + // if(runInfo.sliceIndex!=31) continue; + + // angleOfDetector+totalAngleSpan/nbProjection*runInfo.projectionIndex means the angle between + // source direction and detector, which should be constant when source is rotating + double ra = TMath::DegToRad() + * (angleOfDetector + totalAngleSpan / nbProjection * runInfo.projectionIndex); + centerOfDetector.m_x = distanceObjectDetector * cos(ra); + centerOfDetector.m_y = distanceObjectDetector * sin(ra); + centerOfDetector.m_z = 0; + + for (int i = 0; i < nbParticle; ++i) { + // gamma selection: energy should be lower than 4095*10eV = 49.45 keV + if (gammaAtExit[i].energy_keV >= 40.95 || gammaAtExit[i].energy_keV <= 0.9) + continue; // gamma selection + + gammaMomentum.m_x = gammaAtExit[i].mx; + gammaMomentum.m_y = gammaAtExit[i].my; + gammaMomentum.m_z = gammaAtExit[i].mz; + + if (!IsDetected(centerOfDetector, gammaMomentum, theta)) + continue; + else { + pixeEvent.energy_10eV = floor(100 * gammaAtExit[i].energy_keV + 0.5); + pixeEvent.projectionIndex = runInfo.projectionIndex; + pixeEvent.sliceIndex = runInfo.sliceIndex; + pixeEvent.pixelIndex = runInfo.pixelIndex; + fwrite(&pixeEvent, 7, 1, out); + count1++; + } + } + } + printf("---------------Number of PixeEvent in the first file: %lld------------------------\n", + count1); + fclose(input1); + + // ************************************************************ + // **********************READ FIRST FILE (end)***************** + // ************************************************************ + + // ************************************************************ + // **********************READ SECOND FILE (begin)************** + // ************************************************************ + while (fread(&runInfo, sizeof(RunInfo), 1, input2)) { + runID++; + + runInfo.projectionIndex = runID / (nbSlice * nbPixel); + int remain = runID % (nbSlice * nbPixel); + runInfo.sliceIndex = remain / nbPixel; + runInfo.pixelIndex = remain % nbPixel; + + int nbParticle = runInfo.nbParticle; + + //*********************************************************************** + //**************************Print information (begin)******************** + //*********************************************************************** + + printf("-2--runId %d, ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, nbParticle = %d\n", + runID, runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, nbParticle); + + //*********************************************************************** + //**************************Print information (end)********************** + //*********************************************************************** + + if (!nbParticle) continue; + std::vector gammaAtExit(nbParticle); + fread(&gammaAtExit[0], sizeof(ParticleInfo), nbParticle, input2); + + // if(runInfo.sliceIndex!=1) continue; + // if(runInfo.sliceIndex!=31&&runInfo.sliceIndex!=32) continue; + // if(runInfo.sliceIndex!=31) continue; + + // angleOfDetector+totalAngleSpan/nbProjection*runInfo.projectionIndex means the angle between + // source direction and detector, which should be constant when source is rotating + double ra = TMath::DegToRad() + * (angleOfDetector + totalAngleSpan / nbProjection * runInfo.projectionIndex); + centerOfDetector.m_x = distanceObjectDetector * cos(ra); + centerOfDetector.m_y = distanceObjectDetector * sin(ra); + centerOfDetector.m_z = 0; + + for (int i = 0; i < nbParticle; ++i) { + // gamma selection: energy should be lower than 4095*10eV = 49.45 keV + if (gammaAtExit[i].energy_keV >= 40.95 || gammaAtExit[i].energy_keV <= 0.9) + continue; // gamma selection + + gammaMomentum.m_x = gammaAtExit[i].mx; + gammaMomentum.m_y = gammaAtExit[i].my; + gammaMomentum.m_z = gammaAtExit[i].mz; + + if (!IsDetected(centerOfDetector, gammaMomentum, theta)) + continue; + else { + pixeEvent.energy_10eV = floor(100 * gammaAtExit[i].energy_keV + 0.5); + pixeEvent.projectionIndex = runInfo.projectionIndex; + pixeEvent.sliceIndex = runInfo.sliceIndex; + pixeEvent.pixelIndex = runInfo.pixelIndex; + fwrite(&pixeEvent, 7, 1, out); + count2++; + } + } + } + printf("---------------Number of PixeEvent in in the second file: %lld------------------------\n", + count2); + + // ************************************************************ + // **********************READ SECOND FILE (end)**************** + // ************************************************************ + + printf("---------------Number of PixeEvent in total: %lld------------------------\n", + count1 + count2); + fclose(input2); + fclose(out); + + // Recheck the output file in case + // FILE* input2 = fopen("PixeEvent_std_AtExit.DAT","rb"); + // PixeEvent p; + // while(fread(&p, 7, 1, input2)) + // { + // printf("__ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, Energy_10eV=%d\n", + // p.projectionIndex, p.sliceIndex, p.pixelIndex, p.energy_10eV); + + // } + // fclose(input2); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_GammaAtExit_fabricate.C b/examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_GammaAtExit_fabricate.C new file mode 100644 index 00000000000..f70efdd327d --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_GammaAtExit_fabricate.C @@ -0,0 +1,232 @@ +//*********************************************************************************************************** +// Concatenate_BinToStd_GammaAtExit_fabricate.C +// Root command file +// Use it by typing in the command line of Root terminal: root +// Concatenate_BinToStd_GammaAtExit_fabricate.C +// +// +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include +// using namespace std; + +#define PI 3.14159265f + +// Define a structure to read and write each event in the required binary format +struct PixeEvent +{ + uint16_t energy_10eV; + uint16_t pixelIndex; + uint16_t sliceIndex; + uint8_t projectionIndex; +}; +struct ParticleInfo +{ + float energy_keV; + float mx; + float my; + float mz; +}; +struct RunInfo +{ + // uint_16t + uint8_t projectionIndex; // 1 byte + uint16_t sliceIndex; // + uint16_t pixelIndex; + uint32_t nbParticle; // 4 bytes int +}; + +double DegreeToRadian(double degree) +{ + return (PI * degree / 180.); +} + +struct Point +{ + double m_x; + double m_y; + double m_z; +}; +bool IsDetected(Point poi1, Point poi2, double theta) +{ + double a = (poi1.m_x * poi2.m_x + poi1.m_y * poi2.m_y + poi1.m_z * poi2.m_z) + / sqrt(poi1.m_x * poi1.m_x + poi1.m_y * poi1.m_y + poi1.m_z * poi1.m_z) + / sqrt(poi2.m_x * poi2.m_x + poi2.m_y * poi2.m_y + poi2.m_z * poi2.m_z); + if (a > 1.0) a = 1; + if (a < -1.0) a = -1; + double r = acos(a); + if (r > theta) + return false; + else + return true; +} + +void Concatenate_BinToStd_GammaAtExit_fabricate() +{ + //*********************************************************************** + //**************************Detection parameters (begin)***************** + //*********************************************************************** + + const int nbProjection = 100; + const int nbSlice = 1; + const int nbPixel = 128; + double totalAngleSpan = 180.; // in degree + + double angleOfDetector = + 135.; // angle of detector relative to the incident direction of the primary protons // + double distanceObjectDetector = 22.; // 22 mm + double radiusOfDetector = 5.; // 5 mm + // double theta = atan(radiusOfDetector/distanceObjectDetector); //half apex angle of the right + // circular cone in radian double theta = 14.726*TMath::DegToRad(); // in radian + double theta = 70 * TMath::DegToRad(); // in radian + // double theta = 70*TMath::DegToRad(); // in radian + // double theta = DegreeToRadian(70); + + int P_interrupt = 1; // Projection of interruption + + //*********************************************************************** + //**************************Detection parameters (end)******************* + //*********************************************************************** + + // assuming there is one interruption + FILE* input1 = fopen("../RT7_GDP_1Projs_1Slice_128Pixels_2000000_4MeV/GammaAtExit.dat", "rb"); + FILE* out = + fopen("../RT7_GDP_1Projs_1Slice_128Pixels_2000000_4MeV/PixeEvent_std_AtExit.DAT", "wb"); + // FILE* temp; + // temp =fopen("temp.DAT","wb"); + + if (input1 == NULL) { + printf("error for opening the input GammaAtExit.dat file\n"); + return; + } + + RunInfo runInfo; + PixeEvent pixeEvent; + Point centerOfDetector; + Point gammaMomentum; + long long count1 = 0; + long long count2 = 0; + int runID = -1; // index of simulations, namely runID, starting from 0 + std::vector eventVec; + + // ************************************************************(begin) + // **********************READ FIRST FILE*********************** + // ************************************************************ + while (fread(&runInfo, sizeof(RunInfo), 1, input1)) { + runID++; + runInfo.projectionIndex = runID / (nbSlice * nbPixel); + int remain = runID % (nbSlice * nbPixel); + runInfo.sliceIndex = remain / nbPixel; + runInfo.pixelIndex = remain % nbPixel; + if (runInfo.projectionIndex == P_interrupt) { + runID--; + break; + } + + int nbParticle = runInfo.nbParticle; + + std::vector gammaAtExit(nbParticle); + fread(&gammaAtExit[0], sizeof(ParticleInfo), nbParticle, input1); + + //*********************************************************************** + //**************************Print information (begin)******************** + //*********************************************************************** + + printf("-1--runId %d, ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, nbParticle = %d\n", + runID, runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, nbParticle); + + //*********************************************************************** + //**************************Print information (end)********************** + //*********************************************************************** + + // angleOfDetector+totalAngleSpan/nbProjection*runInfo.projectionIndex means the angle between + // source direction and detector, which should be constant when source is rotating + double ra = + DegreeToRadian(angleOfDetector + totalAngleSpan / nbProjection * runInfo.projectionIndex); + centerOfDetector.m_x = distanceObjectDetector * cos(ra); + centerOfDetector.m_y = distanceObjectDetector * sin(ra); + centerOfDetector.m_z = 0; + + for (int i = 0; i < nbParticle; ++i) { + // gamma selection: energy should be lower than 4095*10eV = 49.45 keV + if (gammaAtExit[i].energy_keV >= 40.95 || gammaAtExit[i].energy_keV <= 0.9) + continue; // gamma selection + + gammaMomentum.m_x = gammaAtExit[i].mx; + gammaMomentum.m_y = gammaAtExit[i].my; + gammaMomentum.m_z = gammaAtExit[i].mz; + + if (!IsDetected(centerOfDetector, gammaMomentum, theta)) + continue; + else { + pixeEvent.energy_10eV = floor(100 * gammaAtExit[i].energy_keV + 0.5); + pixeEvent.projectionIndex = runInfo.projectionIndex; + pixeEvent.sliceIndex = runInfo.sliceIndex; + pixeEvent.pixelIndex = runInfo.pixelIndex; + + eventVec.push_back(pixeEvent); + count1++; + } + } + } + printf("---------------Number of PixeEvent in the first file: %lld------------------------\n", + count1); + fclose(input1); + // fclose(temp); + + // ************************************************************(end) + // **********************READ FIRST FILE*********************** + // ************************************************************ + + // ************************************************************(begin) + // **********************READ SECOND FILE********************** + // ************************************************************ + // temp =fopen("temp.DAT","rb"); + + PixeEvent pp; + PixeEvent p; + + for (int i = 0; i < nbProjection; ++i) { + int size = eventVec.size(); + for (int j = 0; j < size; ++j) { + p = eventVec[j]; + pp.energy_10eV = p.energy_10eV; + pp.projectionIndex = p.projectionIndex + i; + pp.sliceIndex = p.sliceIndex; // index of slices should be reset, starting from 0 + pp.pixelIndex = p.pixelIndex; + // printf("__ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, Energy_10eV=%d\n", + // pp.projectionIndex, pp.sliceIndex, pp.pixelIndex, pp.energy_10eV); + fwrite(&pp, 7, 1, out); + } + } + + // ************************************************************(end) + // **********************READ SECOND FILE********************** + // ************************************************************ + + // fclose(temp); + fclose(out); + + // Recheck the output file in case + FILE* input2 = + fopen("../RT7_GDP_1Projs_1Slice_128Pixels_2000000_4MeV/PixeEvent_std_AtExit.DAT", "rb"); + PixeEvent ppp; + int proj = -1; + while (fread(&ppp, 7, 1, input2)) { + if (ppp.projectionIndex != proj) { + printf("__ProjectionIndex=%d\n", ppp.projectionIndex); + proj = ppp.projectionIndex; + } + // if(proj<20) printf("__ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, Energy_10eV=%d\n", + // ppp.projectionIndex, ppp.sliceIndex, ppp.pixelIndex, ppp.energy_10eV); + } + fclose(input2); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_ProtonAtExit.C b/examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_ProtonAtExit.C new file mode 100644 index 00000000000..3a3d54e381d --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/Concatenate_BinToStd_ProtonAtExit.C @@ -0,0 +1,276 @@ +//*********************************************************************************************************** +// Concatenate_BinToStd_ProtonAtExit.C +// Root command file +// Type: root Concatenate_BinToStd_ProtonAtExit.C +// +// It is used in case of interruption +// Read 2 output files ProtonAtExit_1.dat and ProtonAtExit_2.dat that are generated by Geant4 +// tomography simulation It reads protons at exit information, and rewrite the events in a binary +// file StimEvent_std.DAT +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include +// using namespace std; + +// Define a structure to read and write each event in the required binary format +struct StimEvent +{ + uint16_t energy_keV; // different from Pixe Event, it is in keV + uint16_t pixelIndex; + uint16_t sliceIndex; + uint8_t projectionIndex; +}; +struct ParticleInfo +{ + float energy_keV; + float mx; + float my; + float mz; +}; +struct RunInfo +{ + // uint_16t + uint8_t projectionIndex; // 1 byte + uint16_t sliceIndex; // + uint16_t pixelIndex; + uint32_t nbParticle; // 4 bytes int +}; + +struct Point +{ + double m_x; + double m_y; + double m_z; +}; +bool IsDetected(Point poi1, Point poi2, double theta) +{ + double a = (poi1.m_x * poi2.m_x + poi1.m_y * poi2.m_y + poi1.m_z * poi2.m_z) + / sqrt(poi1.m_x * poi1.m_x + poi1.m_y * poi1.m_y + poi1.m_z * poi1.m_z) + / sqrt(poi2.m_x * poi2.m_x + poi2.m_y * poi2.m_y + poi2.m_z * poi2.m_z); + if (a > 1.0) a = 1; + if (a < -1.0) a = -1; + double r = acos(a); + if (r > theta) + return false; + else + return true; +} + +void Recheck() +{ + // Recheck the output file in case + FILE* input3 = fopen("../build/StimEvent_std_Detector0_Aperture10.2.DAT", "rb"); + StimEvent p; + double eventId = -1; + while (fread(&p, 7, 1, input3)) { + if (p.projectionIndex == 8 && p.sliceIndex == 64 && p.pixelIndex == 10) { + eventId++; + printf("StimEvent_%.0f ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, Energy_keV=%d keV\n", + eventId, p.projectionIndex, p.sliceIndex, p.pixelIndex, p.energy_keV); + } + } + fclose(input3); +} +void Concatenate_BinToStd_ProtonAtExit() +{ + // Recheck(); + // return; + + //*********************************************************************** + //**************************Detection parameters (begin)***************** + //*********************************************************************** + + const int nbProjection = 10; + const int nbSlice = 128; + const int nbPixel = 20; + double totalAngleSpan = 180.; // in degree + + // angle of detector relative to the incident direction of the primary protons at first projection + // for proton, it is fixed to 0 degree, namely opposite to the source + double angleOfDetector = 0.; + double distanceObjectDetector = 22.; // 22 mm + double radiusOfDetector = 5.; // 5 mm + // double theta = atan(radiusOfDetector/distanceObjectDetector); //half apex angle of the right + // circular cone in radian + double theta = 10.2 * TMath::DegToRad(); // in radian + + int P_interrupt = 2; // Projection of interruption + + //*********************************************************************** + //**************************Detection parameters (end)******************* + //*********************************************************************** + + // assuming there is one interruption + FILE* input1 = fopen("../build/ProtonAtExit_1.dat", "rb"); + FILE* input2 = fopen("../build/ProtonAtExit_2.dat", "rb"); + FILE* out = fopen("../build/StimEvent_std.DAT", "wb"); + + if (input1 == NULL) { + printf("error for opening the input ProtonAtExit_1.dat file\n"); + return; + } + if (input2 == NULL) { + printf("error for opening the input ProtonAtExit_2.dat file\n"); + return; + } + + RunInfo runInfo; + StimEvent stimEvent; + Point centerOfDetector; + Point protonMomentum; + + long long count1 = 0; + long long count2 = 0; + int runID = -1; // index of simulations, namely runID, starting from 0 + + // ************************************************************(begin) + // **********************READ FIRST FILE*********************** + // ************************************************************ + while (fread(&runInfo, sizeof(RunInfo), 1, input1)) { + runID++; + runInfo.projectionIndex = runID / (nbSlice * nbPixel); + int remain = runID % (nbSlice * nbPixel); + runInfo.sliceIndex = remain / nbPixel; + runInfo.pixelIndex = remain % nbPixel; + if (runInfo.projectionIndex == P_interrupt) { + runID--; + break; + } + + int nbParticle = runInfo.nbParticle; + + //*********************************************************************** + //**************************Print information (begin)******************** + //*********************************************************************** + + printf("-1--runId %d, ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, nbParticle = %d\n", + runID, runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, nbParticle); + + //*********************************************************************** + //**************************Print information (end)********************** + //*********************************************************************** + + if (!nbParticle) continue; + std::vector protonAtExit(nbParticle); + fread(&protonAtExit[0], sizeof(ParticleInfo), nbParticle, input1); + + // if(runInfo.sliceIndex!=1) continue; + // if(runInfo.sliceIndex!=31&&runInfo.sliceIndex!=32) continue; + // if(runInfo.sliceIndex!=31) continue; + + // angleOfDetector+totalAngleSpan/nbProjection*runInfo.projectionIndex means the angle between + // source direction and detector, which should be constant when source is rotating + double ra = TMath::DegToRad() + * (angleOfDetector + totalAngleSpan / nbProjection * runInfo.projectionIndex); + centerOfDetector.m_x = distanceObjectDetector * cos(ra); + centerOfDetector.m_y = distanceObjectDetector * sin(ra); + centerOfDetector.m_z = 0; + + for (int i = 0; i < nbParticle; ++i) { + // proton selection: energy should be lower than 4095 keV + if (protonAtExit[i].energy_keV >= 4095) continue; // proton selection + + protonMomentum.m_x = protonAtExit[i].mx; + protonMomentum.m_y = protonAtExit[i].my; + protonMomentum.m_z = protonAtExit[i].mz; + + if (!IsDetected(centerOfDetector, protonMomentum, theta)) + continue; + else { + stimEvent.energy_keV = floor(protonAtExit[i].energy_keV + 0.5); + stimEvent.projectionIndex = runInfo.projectionIndex; + stimEvent.sliceIndex = runInfo.sliceIndex; + stimEvent.pixelIndex = runInfo.pixelIndex; + fwrite(&stimEvent, 7, 1, out); + count1++; + } + } + } + printf("---------------Number of StimEvent in the first file: %lld------------------------\n", + count1); + fclose(input1); + + // ************************************************************ + // **********************READ FIRST FILE (end)***************** + // ************************************************************ + + // ************************************************************ + // **********************READ SECOND FILE (begin)************** + // ************************************************************ + while (fread(&runInfo, sizeof(RunInfo), 1, input2)) { + runID++; + runInfo.projectionIndex = runID / (nbSlice * nbPixel); + int remain = runID % (nbSlice * nbPixel); + runInfo.sliceIndex = remain / nbPixel; + runInfo.pixelIndex = remain % nbPixel; + + int nbParticle = runInfo.nbParticle; + + //*********************************************************************** + //**************************Print information (begin)******************** + //*********************************************************************** + + printf("-2--runId %d, ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, nbParticle = %d\n", + runID, runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, nbParticle); + + //*********************************************************************** + //**************************Print information (end)********************** + //*********************************************************************** + + if (!nbParticle) continue; + + std::vector protonAtExit(nbParticle); + fread(&protonAtExit[0], sizeof(ParticleInfo), nbParticle, input2); + + // if(runInfo.sliceIndex!=1) continue; + // if(runInfo.sliceIndex!=31) continue; + // if(runInfo.sliceIndex!=31&&runInfo.sliceIndex!=32) continue; + + // angleOfDetector+totalAngleSpan/nbProjection*runInfo.projectionIndex means the angle between + // source direction and detector, which should be constant when source is rotating + double ra = TMath::DegToRad() + * (angleOfDetector + totalAngleSpan / nbProjection * runInfo.projectionIndex); + centerOfDetector.m_x = distanceObjectDetector * cos(ra); + centerOfDetector.m_y = distanceObjectDetector * sin(ra); + centerOfDetector.m_z = 0; + + for (int i = 0; i < nbParticle; ++i) { + // proton selection: energy should be lower than 4095 keV + if (protonAtExit[i].energy_keV >= 4095) continue; // proton selection + + protonMomentum.m_x = protonAtExit[i].mx; + protonMomentum.m_y = protonAtExit[i].my; + protonMomentum.m_z = protonAtExit[i].mz; + + if (!IsDetected(centerOfDetector, protonMomentum, theta)) + continue; + else { + stimEvent.energy_keV = floor(protonAtExit[i].energy_keV + 0.5); + stimEvent.projectionIndex = runInfo.projectionIndex; + stimEvent.sliceIndex = runInfo.sliceIndex; + stimEvent.pixelIndex = runInfo.pixelIndex; + fwrite(&stimEvent, 7, 1, out); + count2++; + } + } + } + printf("---------------Number of StimEvent in in the second file: %lld------------------------\n", + count2); + + // ************************************************************ + // **********************READ SECOND FILE (end)**************** + // ************************************************************ + + printf("---------------Number of StimEvent in total: %lld------------------------\n", + count1 + count2); + fclose(input2); + fclose(out); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/Extract_Projection.C b/examples/advanced/stim_pixe_tomography/Scripts/Extract_Projection.C new file mode 100644 index 00000000000..4d89e68b86c --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/Extract_Projection.C @@ -0,0 +1,70 @@ +//*********************************************************************************************************** +// Extract_Slice.C +// Root command file +// Use it by typing in the command line of Root terminal: root Extract_Slice.C +// +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include +// using namespace std; + +#define PI 3.14159265f + +// Define a structure to read and write each event in the required binary format +struct PixeEvent +{ + uint16_t energy_10eV; + uint16_t pixelIndex; + uint16_t sliceIndex; + uint8_t projectionIndex; +}; + +// to extract a certain slice or slices + +void Extract_Projection() +{ + // FILE *in =fopen("PixeEvent_std_AtCreation.DAT","rb"); + FILE* in = fopen("../build/PixeEvent_std_AtExit_Detector135_Aperture70.DAT", "rb"); + + // FILE* out = fopen("PixeEvent_std_AtCreation_50Projections.DAT","wb"); + FILE* out = fopen("../build/PixeEvent_std_AtExit_Detector135_Aperture70_50Projections.DAT", "wb"); + + if (in == NULL) { + printf("error for opening the intput file\n"); + return; + } + + PixeEvent p; + PixeEvent pp; + vector valid_projections; + for (int i = 0; i < 50; ++i) { + int p = 2 * i; + valid_projections.push_back(p); + } + + while (fread(&p, 7, 1, in)) { + int key = p.projectionIndex; + + if (std::find(valid_projections.begin(), valid_projections.end(), key) + != valid_projections.end()) { + pp.energy_10eV = p.energy_10eV; + pp.projectionIndex = p.projectionIndex / 2; + pp.sliceIndex = p.sliceIndex; // index of slices should be reset, starting from 0 + pp.pixelIndex = p.pixelIndex; + pp.pixelIndex = p.pixelIndex; + // printf("__ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, Energy_10eV=%d\n", + // pp.projectionIndex, pp.sliceIndex, pp.pixelIndex, pp.energy_10eV); + fwrite(&pp, 7, 1, out); + } + } + fclose(in); + fclose(out); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/Extract_Slice.C b/examples/advanced/stim_pixe_tomography/Scripts/Extract_Slice.C new file mode 100644 index 00000000000..9f38d348c64 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/Extract_Slice.C @@ -0,0 +1,66 @@ +//*********************************************************************************************************** +// Extract_Slice.C +// Root command file +// Use it by typing in the command line of Root terminal: root Extract_Slice.C +// +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include +// using namespace std; + +#define PI 3.14159265f + +// Define a structure to read and write each event in the required binary format +struct PixeEvent +{ + uint16_t energy_10eV; + uint16_t pixelIndex; + uint16_t sliceIndex; + uint8_t projectionIndex; +}; + +// to extract a certain slice or slices + +void Extract_Slice() +{ + int start_slice = 0; // start_slice: the first slice you would like to select + int end_slice = 0; // end_slice: the last slice you would like to select + + FILE* in = fopen("../build/PixeEvent_std_AtCreation.DAT", "rb"); + // FILE *in =fopen("PixeEvent_std_AtExit.DAT.DAT","rb"); + + FILE* out = fopen("../build/PixeEvent_std_AtCreation_slice.DAT", "wb"); + // FILE* out = fopen("PixeEvent_std_AtExit_slice.DAT","wb"); + + if (in == NULL) { + printf("error for opening the intput file\n"); + return; + } + + PixeEvent p; + PixeEvent pp; + + while (fread(&p, 7, 1, in)) { + if (p.sliceIndex >= start_slice && p.sliceIndex <= end_slice) { + pp.energy_10eV = p.energy_10eV; + pp.projectionIndex = p.projectionIndex; + pp.sliceIndex = + p.sliceIndex - start_slice; // index of slices should be reset, starting from 0 + pp.pixelIndex = p.pixelIndex; + pp.pixelIndex = p.pixelIndex; + // printf("__ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, Energy_10eV=%d\n", + // pp.projectionIndex, pp.sliceIndex, pp.pixelIndex, pp.energy_10eV); + fwrite(&pp, 7, 1, out); + } + } + fclose(in); + fclose(out); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/LocateInterruption_GammaAtExit.C b/examples/advanced/stim_pixe_tomography/Scripts/LocateInterruption_GammaAtExit.C new file mode 100644 index 00000000000..09f88dbe9ae --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/LocateInterruption_GammaAtExit.C @@ -0,0 +1,93 @@ +//*********************************************************************************************************** +// LocateInterruption_GammaAtExit.C +// Root command file +// Type: root LocateInterruption_GammaAtExit.C +// +// It is used by reading GammaAtExit.dat file to locate at which projection the interruption happens +// +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include + +struct ParticleInfo +{ + float energy_keV; + float mx; + float my; + float mz; +}; + +// struct ParticleInfo +// { +// float energy_keV; +// float mx; +// float my; +// float mz; +// float x; +// float y; +// float z; +// }; + +struct RunInfo +{ + // uint_16t + uint8_t projectionIndex; // 1 byte + uint16_t sliceIndex; // + uint16_t pixelIndex; + uint32_t nbParticle; // 4 bytes int +}; + +void LocateInterruption_GammaAtExit() +{ + FILE* input = fopen("../build/GammaAtExit_1.dat", "rb"); + if (input == NULL) { + printf("error for opening the input file\n"); + return; + } + + RunInfo runInfo; + int projection = 0; // the projection when interruption occurs + + //*********************************************************************** + //**************************Detection parameters (begin)***************** + //*********************************************************************** + + const int nbProjection = 10; + const int nbSlice = 1; + const int nbPixel = 20; + + //*********************************************************************** + //**************************Detection parameters (end)******************* + //*********************************************************************** + + int runID = -1; + while (fread(&runInfo, sizeof(RunInfo), 1, input)) { + runID++; + + runInfo.projectionIndex = runID / (nbSlice * nbPixel); + int remain = runID % (nbSlice * nbPixel); + runInfo.sliceIndex = remain / nbPixel; + runInfo.pixelIndex = remain % nbPixel; + + int nbParticle = runInfo.nbParticle; + std::vector gammaAtExit(nbParticle); + fread(&gammaAtExit[0], sizeof(ParticleInfo), nbParticle, input); + + printf("---------ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, nbParticle = %d\n", + runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, nbParticle); + + projection = runInfo.projectionIndex; + } + + printf("-----------------------It is interrupted at ProjectionIndex = %d--------------------\n", + projection); + fclose(input); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/LocateInterruption_ProtonAtExit.C b/examples/advanced/stim_pixe_tomography/Scripts/LocateInterruption_ProtonAtExit.C new file mode 100644 index 00000000000..85cdf305722 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/LocateInterruption_ProtonAtExit.C @@ -0,0 +1,93 @@ +//*********************************************************************************************************** +// LocateInterruption_ProtonAtExit.C +// Root command file +// Type: root LocateInterruption_ProtonAtExit.C +// +// It is used by reading ProtonAtExit.dat file to locate at which projection the interruption is +// +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include + +struct ParticleInfo +{ + float energy_keV; + float mx; + float my; + float mz; +}; + +// struct ParticleInfo +// { +// float energy_keV; +// float mx; +// float my; +// float mz; +// float x; +// float y; +// float z; +// }; + +struct RunInfo +{ + // uint_16t + uint8_t projectionIndex; // 1 byte + uint16_t sliceIndex; // + uint16_t pixelIndex; + uint32_t nbParticle; // 4 bytes int +}; + +void LocateInterruption_ProtonAtExit() +{ + FILE* input = fopen("../build/ProtonAtExit_1.dat", "rb"); + if (input == NULL) { + printf("error for opening the input file\n"); + return; + } + + RunInfo runInfo; + int projection = 0; // the projection when interruption occurs + + //*********************************************************************** + //**************************Detection parameters (begin)***************** + //*********************************************************************** + + const int nbProjection = 10; + const int nbSlice = 128; + const int nbPixel = 20; + + //*********************************************************************** + //**************************Detection parameters (end)******************* + //*********************************************************************** + + int runID = -1; + while (fread(&runInfo, sizeof(RunInfo), 1, input)) { + runID++; + + runInfo.projectionIndex = runID / (nbSlice * nbPixel); + int remain = runID % (nbSlice * nbPixel); + runInfo.sliceIndex = remain / nbPixel; + runInfo.pixelIndex = remain % nbPixel; + + int nbParticle = runInfo.nbParticle; + std::vector protonAtExit(nbParticle); + fread(&protonAtExit[0], sizeof(ParticleInfo), nbParticle, input); + + printf("---------ProjectionIndex=%d, SliceIndex=%d, PixelIndex=%d, nbParticle = %d\n", + runInfo.projectionIndex, runInfo.sliceIndex, runInfo.pixelIndex, nbParticle); + + projection = runInfo.projectionIndex; + } + + printf("-----------------------It is interrupted at ProjectionIndex = %d--------------------\n", + projection); + fclose(input); +} \ No newline at end of file diff --git a/examples/advanced/stim_pixe_tomography/Scripts/Spectrum_gamma.C b/examples/advanced/stim_pixe_tomography/Scripts/Spectrum_gamma.C new file mode 100644 index 00000000000..c0e25d74f72 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/Spectrum_gamma.C @@ -0,0 +1,143 @@ +//*********************************************************************************************************** +// Spectrum_gamma.C +// Root command file +// Type: root Spectrum_gamma.C +// +// It visualizes the spectrum of X-rays and plots a histogram by reading +// simulation result GammaAtCreation.dat or GammaAtExit.dat +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include +// using namespace std; + +// Define a structure to read and write each event in the required binary format +struct RunInfo +{ + // uint_16t + uint8_t projectionIndex; // 1 byte + uint16_t sliceIndex; // + uint16_t pixelIndex; + uint32_t nbParticle; // 4 bytes int +}; + +struct ParticleInfo +{ + float energy_keV; + float mx; + float my; + float mz; +}; + +// struct ParticleInfo +//{ +// float energy_keV; +// float mx; +// float my; +// float mz; +// float x; +// float y; +// float z; +//}; + +void Plot(vector& energies, int bin, double eMin, double eMax) +{ + auto mycanvas = new TCanvas("canvas", "canvas", 800, 50, 600, 600); + gPad->SetLeftMargin(0.15); + + // unit is in keV + auto hist = new TH1D("hist (keV)", "Spectrum of photons", bin, eMin, eMax); + + for (int i = 0; i < energies.size(); ++i) { + hist->Fill(energies[i]); + } + + hist->Draw(); + hist->GetXaxis()->SetTitle("Energy (keV)"); + hist->GetYaxis()->SetTitle("Counts"); + hist->GetXaxis()->CenterTitle(); + hist->GetYaxis()->CenterTitle(); + + mycanvas->Print("spectrum_gamma.png"); +} + +void Spectrum_gamma() +{ + FILE* input = fopen("../build/GammaAtExit.dat", "rb"); + + if (input == NULL) { + printf("error for opening the input file\n"); + return; + } + + //*********************************************************************** + //**************************Selection parameters (begin)***************** + //*********************************************************************** + + const int nbProjection = 10; + const int nbSlice = 1; + const int nbPixel = 20; + + int projection_index_begin = 0; // starter of the projection selected + int projection_index_end = 0; // end of the projection selected + + int slice_index_begin = 0; // starter of the slice selected + int slice_index_end = 0; // end of the slice selected + + //********************Parameters for spectrum*************************** + int bin = 100; + double eMin = 0; // keV + double eMax = 0; // keV + + //*********************************************************************** + //**************************Selection parameters (end)******************* + //*********************************************************************** + + RunInfo runInfo; + vector energies; + int runID = -1; // index of simulations, namely runID, starting from 0 + // while(!feof(input)) //if not the end, read + while (fread(&runInfo, sizeof(RunInfo), 1, input)) { + runID++; + int nbParticle = runInfo.nbParticle; + + // ***********the following codes are used + // if**************************************(begin) + // ***********the index of projection, slice and pixel is not correctly + // configured in the simulation + runInfo.projectionIndex = runID / (nbSlice * nbPixel); + int remain = runID % (nbSlice * nbPixel); + runInfo.sliceIndex = remain / nbPixel; + runInfo.pixelIndex = remain % nbPixel; + //************************************************************************(end) + + if (!nbParticle) continue; + std::vector particles(nbParticle); + fread(&particles[0], sizeof(ParticleInfo), nbParticle, input); + + if (runInfo.projectionIndex >= projection_index_begin + && runInfo.projectionIndex <= projection_index_end) + { + if (runInfo.sliceIndex >= slice_index_begin && runInfo.sliceIndex <= slice_index_end) { + for (int i = 0; i < nbParticle; ++i) { + // printf("--%d, %.9e\n", i, particles[i].energy_keV); + + energies.push_back(particles[i].energy_keV); + if (particles[i].energy_keV > eMax) eMax = particles[i].energy_keV; + } + } + } + else + break; + } + + fclose(input); + Plot(energies, bin, eMin, eMax + 10); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/Spectrum_proton.C b/examples/advanced/stim_pixe_tomography/Scripts/Spectrum_proton.C new file mode 100644 index 00000000000..220bbe69d4d --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/Spectrum_proton.C @@ -0,0 +1,129 @@ +//*********************************************************************************************************** +// Spectrum_proton.C +// Root command file +// Type: root Spectrum_proton.C +// +// It visualizes the spectrum of protons and plots a histogram by reading +// simulation result ProtonAtExit.dat +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include +// using namespace std; + +// Define a structure to read and write each event in the required binary format +struct RunInfo +{ + // uint_16t + uint8_t projectionIndex; // 1 byte + uint16_t sliceIndex; // + uint16_t pixelIndex; + uint32_t nbParticle; // 4 bytes int +}; + +struct ParticleInfo +{ + float energy_keV; + float mx; + float my; + float mz; +}; + +void Plot(vector& energies, int bin, double eMin, double eMax) +{ + auto mycanvas = new TCanvas("canvas", "canvas", 800, 50, 600, 600); + gPad->SetLeftMargin(0.15); + + // unit is in keV + auto hist = new TH1D("hist (keV)", "Spectrum of protons", bin, eMin, eMax); + + for (int i = 0; i < energies.size(); ++i) { + hist->Fill(energies[i]); + } + + hist->Draw(); + hist->GetXaxis()->SetTitle("Energy (keV)"); + hist->GetYaxis()->SetTitle("Counts"); + hist->GetXaxis()->CenterTitle(); + hist->GetYaxis()->CenterTitle(); + + mycanvas->Print("spectrum_proton.png"); +} + +void Spectrum_proton() +{ + FILE* input = fopen("../build/ProtonAtExit.dat", "rb"); + if (input == NULL) { + printf("error for opening the input file\n"); + return; + } + + //*********************************************************************** + //**************************Selection parameters (begin)***************** + //*********************************************************************** + + const int nbProjection = 10; + const int nbSlice = 128; + const int nbPixel = 20; + + int projection_index_begin = 0; // starter of the projection selected + int projection_index_end = 0; // end of the projection selected + + int slice_index_begin = 64; // starter of the slice selected + int slice_index_end = 64; // end of the slice selected + + //********************Parameters for spectrum*************************** + int bin = 100; + double eMin = 0; // keV + double eMax = 0; // keV + + //*********************************************************************** + //**************************Selection parameters (end)******************* + //*********************************************************************** + + RunInfo runInfo; + vector energies; + int runID = -1; // index of simulations, namely runID, starting from 0 + // while(!feof(input)) //if not the end, read + while (fread(&runInfo, sizeof(RunInfo), 1, input)) { + runID++; + int nbParticle = runInfo.nbParticle; + + // ***********the following codes are used + // if**************************************(begin) + // ***********the index of projection, slice and pixel is not correctly + // configured in the simulation + runInfo.projectionIndex = runID / (nbSlice * nbPixel); + int remain = runID % (nbSlice * nbPixel); + runInfo.sliceIndex = remain / nbPixel; + runInfo.pixelIndex = remain % nbPixel; + //******************************************************************************************(end) + + if (!nbParticle) continue; + std::vector proton(nbParticle); + fread(&proton[0], sizeof(ParticleInfo), nbParticle, input); + + if (runInfo.projectionIndex >= projection_index_begin + && runInfo.projectionIndex <= projection_index_end) + { + if (runInfo.sliceIndex >= slice_index_begin && runInfo.sliceIndex <= slice_index_end) { + for (int i = 0; i < nbParticle; ++i) { + energies.push_back(proton[i].energy_keV); + if (proton[i].energy_keV > eMax) eMax = proton[i].energy_keV; + } + } + } + else + break; + } + + fclose(input); + Plot(energies, bin, eMin, eMax + 10); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/TomoSpectrum.C b/examples/advanced/stim_pixe_tomography/Scripts/TomoSpectrum.C new file mode 100644 index 00000000000..df672a8c6e0 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/TomoSpectrum.C @@ -0,0 +1,103 @@ +//*********************************************************************************************************** +// TomoSpectrum.C +// Root command file +// Type: root TomoSpectrum.C +// +// It visualizes the spectrum of X-rays and plots a graph by reading PixeEvent data. +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include +// using namespace std; + +struct PixeEvent +{ + uint16_t energy_10eV; + uint16_t pixelIndex; + uint16_t sliceIndex; + uint8_t projectionIndex; +}; + +void Plot(int nbChannels, vector& X, vector& Y) +{ + gROOT->Reset(); + + auto mycanvas = new TCanvas("canvas", "canvas", 800, 50, 600, 600); + mycanvas->ToggleEventStatus(); + + gPad->SetLeftMargin(0.15); + + auto graph = new TGraph(nbChannels, X.data(), Y.data()); + graph->SetLineColor(8); + + graph->Draw("AL"); + + graph->SetLineColor(8); + graph->SetTitle("TOMO Energy Spectrum"); + graph->GetXaxis()->SetTitle("ADC channels"); + graph->GetYaxis()->SetTitle("Nb events"); + graph->GetXaxis()->CenterTitle(); + graph->GetYaxis()->CenterTitle(); + + mycanvas->Print("TomoSpectrum.png"); +} + +void TomoSpectrum() +{ + FILE* input = fopen("../build/PixeEvent_std_AtExit_Detector135_Aperture70.DAT", "rb"); + + if (input == NULL) { + printf("----------error for opening the input file--------------\n"); + return; + } + + //*********************************************************************** + //**************************Selection parameters (begin)***************** + //*********************************************************************** + const int nbProjection = 10; + const int nbSlice = 1; + const int nbPixel = 20; + + int projection_index_begin = 0; // starter of the projection selected + int projection_index_end = 0; // end of the projection selected + + int slice_index_begin = 0; // starter of the slice selected + int slice_index_end = 0; // end of the slice selected + + //*********************************************************************** + //**************************Selection parameters (end)******************* + //*********************************************************************** + + int nbChannels = 4096; + vector X(nbChannels); // save channels 1-4096, index X: 0-4095 + vector Y(nbChannels); // save event counts for channel 1-4096, index Y: 0-4095 + PixeEvent p; + + while (fread(&p, 7, 1, input)) { + if (p.projectionIndex >= projection_index_begin && p.projectionIndex <= projection_index_end) { + if (p.sliceIndex >= slice_index_begin && p.sliceIndex <= slice_index_end) { + // printf("%d %d %d\n",p.projectionIndex, p.sliceIndex, p.energy_10eV); + Y[p.energy_10eV - 1] = Y[p.energy_10eV - 1] + 1; + } + } + } + fclose(input); + for (int i = 0; i < nbChannels; ++i) { + X[i] = 1 + i; + } + + FILE* out = fopen("Spectrum.txt", "wb"); + for (int i = 0; i < nbChannels; ++i) { + fprintf(out, "%d\t%d\n", X[i], Y[i]); + } + + fclose(out); + Plot(nbChannels, X, Y); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/TomoSpectrum_HIST.C b/examples/advanced/stim_pixe_tomography/Scripts/TomoSpectrum_HIST.C new file mode 100644 index 00000000000..6c430b89394 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/TomoSpectrum_HIST.C @@ -0,0 +1,120 @@ +//*********************************************************************************************************** +// TomoSpectrum_HIST.C +// Root command file +// Type: root TomoSpectrum_HIST.C +// +// It visualizes the spectrum of X-rays and plots a histogram by reading PixeEvent data +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include +// using namespace std; + +struct PixeEvent +{ + uint16_t energy_10eV; + uint16_t pixelIndex; + uint16_t sliceIndex; + uint8_t projectionIndex; +}; + +void Plot(vector& energies, int bin, double eMin, double eMax) +{ + gROOT->Reset(); + + auto mycanvas = new TCanvas("canvas", "canvas", 800, 50, 600, 600); + mycanvas->ToggleEventStatus(); + + gPad->SetLeftMargin(0.15); + + auto hist = new TH1D("HIST", "Spectrum", bin, eMin, eMax); + + for (int i = 0; i < energies.size(); ++i) { + hist->Fill(energies[i]); + } + + hist->Draw(); + hist->SetTitle("TOMO Energy Spectrum"); + hist->GetXaxis()->SetTitle("ADC channels"); + hist->GetYaxis()->SetTitle("Nb events"); + + hist->GetXaxis()->CenterTitle(); + hist->GetYaxis()->CenterTitle(); + + // hist->GetYaxis()->SetTitleOffset(2); + + mycanvas->Print("TomoSpectrum_hist.png"); +} + +void TomoSpectrum_HIST() +{ + FILE* input = fopen("../build/PixeEvent_std_AtExit_Detector135_Aperture70.DAT", "rb"); + + if (input == NULL) { + printf("----------error for opening the input file--------------\n"); + return; + } + + //*********************************************************************** + //**************************Selection parameters (begin)***************** + //*********************************************************************** + const int nbProjection = 10; + const int nbSlice = 1; + const int nbPixel = 20; + + int projection_index_begin = 0; // starter of the projection selected + int projection_index_end = 0; // end of the projection selected + + int slice_index_begin = 0; // starter of the slice selected + int slice_index_end = 0; // end of the slice selected + + //********************Parameters for spectrum*************************** + int nbChannels = 4096; + double eMin = 0; // initialization + double eMax = 0; // + + //*********************************************************************** + //**************************Selection parameters (end)******************* + //*********************************************************************** + + vector energies; + PixeEvent p; + while (fread(&p, 7, 1, input)) { + if (p.projectionIndex >= projection_index_begin && p.projectionIndex <= projection_index_end) { + if (p.sliceIndex >= slice_index_begin && p.sliceIndex <= slice_index_end) { + energies.push_back(p.energy_10eV); + if (p.energy_10eV > eMax) eMax = p.energy_10eV; + } + } + } + + fclose(input); + + long int size = energies.size(); + vector X(nbChannels); // save channels 1-4096 + vector Y(nbChannels); + for (long int i = 0; i < size; ++i) { + int energy = energies[i]; + Y[energy - 1] = Y[energy - 1] + 1; + } + for (int i = 0; i < nbChannels; ++i) { + X[i] = 1 + i; + } + + FILE* out = fopen("Spectrum_hist.txt", "wb"); + + for (int i = 0; i < nbChannels; ++i) { + fprintf(out, "%d\t%d\n", X[i], Y[i]); + } + + fclose(out); + + Plot(energies, nbChannels, 0, nbChannels); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/TomoSpectrum_HIST_proton.C b/examples/advanced/stim_pixe_tomography/Scripts/TomoSpectrum_HIST_proton.C new file mode 100644 index 00000000000..28c91cdc228 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/TomoSpectrum_HIST_proton.C @@ -0,0 +1,122 @@ +//*********************************************************************************************************** +// TomoSpectrum_HIST_proton.C +// Root command file +// Type: root TomoSpectrum_HIST_proton.C +// +// It visualizes the spectrum of protons and plots a histogram by reading StimEvent data +// +// More information is available in UserGuide +// Created by Z.LI LP2i Bordeaux 2022 +//*********************************************************************************************************** + +#include +#include +#include +#include + +#include +// using namespace std; + +struct StimEvent +{ + uint16_t energy_keV; // different from Pixe Event, it is in keV + uint16_t pixelIndex; + uint16_t sliceIndex; + uint8_t projectionIndex; +}; + +void Plot(vector& energies, int bin, double eMin, double eMax) +{ + gROOT->Reset(); + + auto mycanvas = new TCanvas("canvas", "canvas", 800, 50, 600, 600); + mycanvas->ToggleEventStatus(); + + gPad->SetLeftMargin(0.15); + + auto hist = new TH1D("HIST", "Spectrum", bin, eMin, eMax); + + for (int i = 0; i < energies.size(); ++i) { + hist->Fill(energies[i]); + } + + hist->Draw(); + hist->SetTitle("TOMO Energy Spectrum"); + hist->GetXaxis()->SetTitle("ADC channels"); + hist->GetYaxis()->SetTitle("Nb events"); + + hist->GetXaxis()->CenterTitle(); + hist->GetYaxis()->CenterTitle(); + + // hist->GetYaxis()->SetTitleOffset(2); + + mycanvas->Print("TomoSpectrum_hist_proton.png"); +} + +void TomoSpectrum_HIST_proton() +{ + FILE* input = fopen("../build/StimEvent_std_Detector0_Aperture10.2.DAT", "rb"); + + if (input == NULL) { + printf("----------error for opening the input file--------------\n"); + return; + } + + //*********************************************************************** + //**************************Selection parameters (begin)***************** + //*********************************************************************** + const int nbProjection = 10; + const int nbSlice = 128; + const int nbPixel = 20; + + int projection_index_begin = 0; // starter of the projection selected + int projection_index_end = 0; // end of the projection selected + + int slice_index_begin = 64; // starter of the slice selected + int slice_index_end = 64; // end of the slice selected + + //********************Parameters for spectrum*************************** + int nbChannels = 4096; + double eMin = 0; // initialization + double eMax = 0; // + + //*********************************************************************** + //**************************Selection parameters (end)******************* + //*********************************************************************** + + vector energies; + StimEvent s; + while (fread(&s, 7, 1, input)) { + if (s.projectionIndex >= projection_index_begin && s.projectionIndex <= projection_index_end) { + if (s.sliceIndex >= slice_index_begin && s.sliceIndex <= slice_index_end) { + energies.push_back(s.energy_keV); + if (s.energy_keV > eMax) eMax = s.energy_keV; + } + } + } + + fclose(input); + + if (eMax > 4096) printf("---error in data----\n"); + long int size = energies.size(); + vector X(nbChannels); // save channels 1-4096 + vector Y(nbChannels); + + for (long int i = 0; i < size; ++i) { + int energy = energies[i]; + Y[energy - 1] = Y[energy - 1] + 1; + } + for (int i = 0; i < nbChannels; ++i) { + X[i] = 1 + i; + } + + FILE* out = fopen("Spectrum_hist_proton.txt", "wb"); + + for (int i = 0; i < nbChannels; ++i) { + fprintf(out, "%d\t%d\n", X[i], Y[i]); + } + + fclose(out); + + Plot(energies, nbChannels, 0, nbChannels); +} diff --git a/examples/advanced/stim_pixe_tomography/Scripts/generate_voxelized_sphere_phantom.py b/examples/advanced/stim_pixe_tomography/Scripts/generate_voxelized_sphere_phantom.py new file mode 100755 index 00000000000..f326e33b8af --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/Scripts/generate_voxelized_sphere_phantom.py @@ -0,0 +1,180 @@ +import sys +import struct +import math +import numpy as np + +# lists for super resolution (vol_work) and regular resolution (vol_result) +vol_work = [] +vol_result = [] + +############################################################################ +# size image 128x128 -> 500 microm -> resol x,y : 3.90625 microm # +# nb slices 128 -> 500 microm -> resol z : 3.90625 microm # +############################################################################ + +sizex = 128 +sizey = 128 +sizez = 128 +resolx = 3.90625 +resoly = 3.90625 +resolz = 3.90625 +superres = 8 # factor of super resolution + +# sphere 1 (radius) - outer sphere +r1 = 196 + +# sphere 2 (radius) - inner sphere +r2 = 171 + +# density values for sphere 1 and sphere 2 +type = 2 # type for constructing a STIM or PIXE phantom +# type = 1, STIM phantom, density value for STIM in 0.01 g/cm3 +# type =2, PIXE phantom, density value for PIXE in 0.000001 g/cm3, namely microgram/cm3 +value1 = 0 +value2 = 0 + +if type == 1: + value1 = 108 + value2 = 0 +elif type == 2: + value1 = 54000 + value2 = 0 + +# center of two spheres +x0 = 0.0 +y0 = 0.0 +z0 = -1.953125 + +# size in super resolution by voxel +super_sizex = sizex * superres +super_sizey = sizey * superres +super_sizez = sizez * superres +center_shift = sizex / 2 # translation of half scan + + +def make_sphere_center(r, x, y, z, value): + rsample = (r / resolx) * superres # radius in super resolution by voxel + xsample = (x / resolx) * superres + ysample = (y / resoly) * superres + zsample = (z / resolz) * superres + center_shift_sample = center_shift * superres # translation of the center for x (i) and y (j) axis + + print(rsample, xsample, ysample, zsample) + number = 0 + + for k in range(0, super_sizez): + for j in range(0, super_sizey): + for i in range(0, super_sizex): + ii = i + 0.5 + jj = j + 0.5 + kk = k + 0.5 + res = pow((ii - xsample - center_shift_sample), 2) / (rsample * rsample) + \ + pow((jj - ysample - center_shift_sample), 2) / (rsample * rsample) + \ + pow((kk - zsample - center_shift_sample), 2) / (rsample * rsample) # z-axis correction done + # if the point (ii, jj, kk) is in the sphere, we attribute the voxel (i,j, k) value + if (res <= 1.0): + vol_work[i + j * super_sizex + k * super_sizex * super_sizey] = value + number += 1 + + print(number) + + +# initialisation for two tables vol_result (128*128*128), vol_work (128*superres)*(128*superres)*(128*superres) +def initialize(): + for k in range(0, sizez): + for j in range(0, sizey): + for i in range(0, sizex): + vol_result.append(0.0) + for k in range(0, super_sizez): + for j in range(0, super_sizey): + for i in range(0, super_sizex): + vol_work.append(0.0) + + +# Calculate the vol_result based on vol_work +def undersample(): + x = 0 + y = 0 + z = 0 + for k in range(0, super_sizez, superres): + for j in range(0, super_sizey, superres): + for i in range(0, super_sizex, superres): + # print ("***",i,j,k) + total = 0 + for kk in range(0, superres): + for jj in range(0, superres): + for ii in range(0, superres): + total = total + vol_work[ + i + ii + (j + jj) * super_sizex + (k + kk) * (super_sizex * super_sizey)] + vol_result[x + y * sizex + z * (sizex * sizey)] = total / (superres * superres * superres) + # print ("###",vol_result[x+y*sizex+z*(sizex*sizey)]) + x += 1 + y += 1 + x = 0 + z += 1 + y = 0 + + +# save the total volume of super resolution +def save_whole_work(file): + fd = open(file, "wb") + for i in range(0, len(vol_work)): + fd.write(struct.pack("f", vol_work[i])) + fd.close() + + +# save one slice in super resolution vol_work +# 0<=slice 76.464 microm -> resol x,y : 0,597375 microm # +# nb slices 128 -> 201,217 microm -> resol z : 1,57200781 microm # +# slice of interest : 11 -> 18,07 microm # +############################################################################ + +sizex = 128 +sizey = 128 +sizez = 128 +double_sizez = 256 # for computation only +resolx = 0.597375 +resoly = 0.597375 +resolz = 1.57200781 +superres = 8 + +slice = 11 + +# ellipsoide 1 (semi-axes, center, rotation z, value) - skin +a1 = 20.61 +b1 = 21.42 +c1 = 187.82 +x1 = 0.0 +y1 = 0.0 +z1 = 0.0 +rz1 = 0.0 +value1 = 49.73 + +# ellipsoide 2 (semi-axes, center, rotation z, value) - body +a2 = 18.61 +b2 = 19.01 +c2 = 186.64 +x2 = -0.39 +y2 = 0.0 +z2 = 0.0 +rz2 = 0.0 +value2 = 40.85 + +# ellipsoide 3 (semi-axes, center, rotation z, value) - core 1 +a3 = 1.95 +b3 = 3.23 +c3 = 4.32 +x3 = 1.97 +y3 = -7.09 +z3 = 18.07 +rz3 = 0.0 +value3 = 66.26 + +# ellipsoide 4 (semi-axes, center, rotation z, value) - core 2 +a4 = 2.08 +b4 = 2.46 +c4 = 4.32 +x4 = 8.27 +y4 = -3.15 +z4 = 18.07 +rz4 = 0.0 +value4 = 60.23 + +# ellipsoide 5 (semi-axes, center, rotation z, value) - intestine +a5 = 3.67 +b5 = 16.48 +c5 = 28.68 +x5 = 1.25 +y5 = 0.61 +z5 = 0 +rz5 = -58.99 +value5 = 54.06 + +# ellipsoide 6 ((emi-axes, center, rotation z, value) - region titane +a6 = 1.62 +b6 = 1.95 +c6 = 1.62 +x6 = 6.25 +y6 = 3.61 +z6 = 18.07 +rz6 = 0.0 +value6 = 75.14 + +# size in super resolution by voxel +super_sizex = sizex * superres +super_sizey = sizey * superres +super_sizez = double_sizez * superres # we will save only half of the z +center_shift = sizex / 2 # for x and y axis +center_shift_z = double_sizez / 2 + + +def make_ellipse_center(a, b, c, x, y, z, rz, value): + asample = (a / resolx) * superres + bsample = (b / resoly) * superres + csample = (c / resolz) * superres + # if (rz != 0.0): + rzsample = math.radians(rz) # angle in radians + xsample = (x / resolx) * superres + ysample = (y / resoly) * superres + zsample = (z / resolz) * superres + center_shift_sample = center_shift * superres # translation of center for x and y axis + center_shift_z_sample = center_shift_z * superres # translation of center for z axis + + print(asample, bsample, csample, xsample, ysample, zsample) + number = 0 ## debug + + # a loop in axes of voxels + for k in range(0, super_sizez): + for j in range(0, super_sizey): + for i in range(0, super_sizex): + ii = i + 0.5 + jj = j + 0.5 + kk = k + 0.5 + res = pow(((ii - xsample - center_shift_sample) * math.cos(rzsample) + ( + jj - ysample - center_shift_sample) * math.sin(rzsample)), 2) / (asample * asample) + \ + pow(((ii - xsample - center_shift_sample) * math.sin(rzsample) - ( + jj - ysample - center_shift_sample) * math.cos(rzsample)), 2) / (bsample * bsample) + \ + ((kk - zsample - center_shift_z_sample) * (kk - zsample - center_shift_z_sample)) / ( + csample * csample) # z-axis correction done + # print(res) + # if the voxel belongs to the ellipsoide, set the value + if (res <= 1.0): + vol_work[i + j * super_sizex + k * super_sizex * super_sizey] = value + number += 1 + + print(number) + + +# initialisation +def initialize(): + for k in range(0, double_sizez): + for j in range(0, sizey): + for i in range(0, sizex): + vol_result.append(0.0) + for k in range(0, super_sizez): + for j in range(0, super_sizey): + for i in range(0, super_sizex): + vol_work.append(0.0) + + +# Calculate the vol_result based on vol_work +def undersample(): + x = 0 + y = 0 + z = 0 + for k in range(0, super_sizez, superres): + for j in range(0, super_sizey, superres): + for i in range(0, super_sizex, superres): + # on se place sur v1 et on recupere les valeurs de densite des 8 voxels du voisinage qui vont correspondre a 1 voxel de l'image finale + # v1 = vol_work[i+j*super_sizex+k*(super_sizex*super_sizey)] + # v2 = vol_work[i+j*super_sizex+k*(super_sizex*super_sizey) + 1] + # v3 = vol_work[i+j*super_sizex+k*(super_sizex*super_sizey) + super_sizex] + # v4 = vol_work[i+j*super_sizex+k*(super_sizex*super_sizey) + super_sizex + 1] + # v5 = vol_work[i+j*super_sizex+k*(super_sizex*super_sizey) + super_sizex*super_sizey] + # v6 = vol_work[i+j*super_sizex+k*(super_sizex*super_sizey) + 1 + super_sizex*super_sizey] + # v7 = vol_work[i+j*super_sizex+k*(super_sizex*super_sizey) + super_sizex + super_sizex*super_sizey] + # v8 = vol_work[i+j*super_sizex+k*(super_sizex*super_sizey) + super_sizex + 1 + super_sizex*super_sizey] + # vol_result[x+y*sizex+z*(sizex*sizey)] = (v1+v2+v3+v4+v5+v6+v7+v8)/8.0 + # print ("***",i,j,k) + total = 0 + for kk in range(0, superres): + for jj in range(0, superres): + for ii in range(0, superres): + total = total + vol_work[ + i + ii + (j + jj) * super_sizex + (k + kk) * (super_sizex * super_sizey)] + vol_result[x + y * sizex + z * (sizex * sizey)] = total / (superres * superres * superres) + # print ("###",vol_result[x+y*sizex+z*(sizex*sizey)]) + x += 1 + y += 1 + x = 0 + z += 1 + y = 0 + + +# Save the total volume (including the negative parts of the ellipsoids) +def save_whole_work(file): + fd = open(file, "wb") + for i in range(0, len(vol_work)): + fd.write(struct.pack("f", vol_work[i])) + + +# Save half the volume (including only the positive parts of the ellipsoids) +def save_half_work(file): + fd = open(file, "wb") + for i in range(int(len(vol_work) / 2), len(vol_work)): + fd.write(struct.pack("f", vol_work[i])) + + +# save one slice in super resolution vol_work +# 0<=slice +#include "G4VUserActionInitialization.hh" + +/// Action initialization class. +/// + +class ActionInitialization : public G4VUserActionInitialization +{ + public: + ActionInitialization(G4bool isP); + ~ActionInitialization() override; + + void BuildForMaster() const override; + void Build() const override; + + private: + G4bool isPIXE; +}; + +#endif diff --git a/examples/advanced/stim_pixe_tomography/include/DetectorConstruction.hh b/examples/advanced/stim_pixe_tomography/include/DetectorConstruction.hh new file mode 100644 index 00000000000..5eb54440308 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/include/DetectorConstruction.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. * +// ******************************************************************** +// +// +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#ifndef DetectorConstruction_h +#define DetectorConstruction_h 1 + +#include "G4Cache.hh" +#include "G4LogicalVolume.hh" +#include "G4VUserDetectorConstruction.hh" +#include "globals.hh" + +class G4Box; +class G4Ellipsoid; +class G4Sphere; +class G4VPhysicalVolume; +class G4Material; +class DetectorMessenger; +class G4GlobalMagFieldMessenger; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class DetectorConstruction : public G4VUserDetectorConstruction +{ +public: + DetectorConstruction(); + ~DetectorConstruction() override; + + void SetAbsorberMaterial(const G4String&); + void SetAbsorberThickness(G4double); + void SetAbsorberSizeYZ(G4double); + + void SetAbsorberXpos(G4double); + + void SetWorldMaterial(const G4String&); + void SetWorldSizeX(G4double); + void SetWorldSizeYZ(G4double); + void SetPhantomType(G4int value); + + G4VPhysicalVolume* Construct() override; + void ConstructSDandField() override; + + void PrintGeomParameters(); + +private: + void DefineMaterials(); + void ComputeGeomParameters(); + void ChangeGeometry(); + void Construct_Phantom1(); + void Construct_Phantom2(); + void Construct_Phantom3(); + + G4int phantom_type; + + G4Material* fAbsorberMaterial; + G4double fAbsorberThickness; + G4double fAbsorberSizeYZ; + + G4double fXposAbs; + G4double fXstartAbs, fXendAbs; + + G4Material* fWorldMaterial; + G4double fWorldSizeX; + G4double fWorldSizeYZ; + + G4Box* fSolidWorld; + G4LogicalVolume* fLogicWorld; + G4VPhysicalVolume* fPhysiWorld; + + G4Box* fSolidAbsorber; + G4LogicalVolume* fLogicAbsorber; + G4VPhysicalVolume* fPhysiAbsorber; + + G4Material* material1; + G4Material* material2; + G4Material* material3; + G4Material* material4; + G4Material* material5; + G4Material* material6; + G4Material* material_GDP; + + G4Ellipsoid* ellipse1; + G4LogicalVolume* logicEllipse1; + G4VPhysicalVolume* physiEllipse1; + + G4Ellipsoid* ellipse2; + G4LogicalVolume* logicEllipse2; + G4VPhysicalVolume* physiEllipse2; + + G4Ellipsoid* ellipse3; + G4LogicalVolume* logicEllipse3; + G4VPhysicalVolume* physiEllipse3; + + G4Ellipsoid* ellipse4; + G4LogicalVolume* logicEllipse4; + G4VPhysicalVolume* physiEllipse4; + + G4Ellipsoid* ellipse5; + G4LogicalVolume* logicEllipse5; + G4VPhysicalVolume* physiEllipse5; + + G4Ellipsoid* ellipse6; + G4LogicalVolume* logicEllipse6; + G4VPhysicalVolume* physiEllipse6; + + // Ge-doped glow discharge polymer (GDP) + G4Sphere* solid_GDP; + G4LogicalVolume* logic_GDP; + G4VPhysicalVolume* physi_GDP; + + DetectorMessenger* fDetectorMessenger; + G4Cache fFieldMessenger; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/stim_pixe_tomography/include/DetectorMessenger.hh b/examples/advanced/stim_pixe_tomography/include/DetectorMessenger.hh new file mode 100644 index 00000000000..909fdccd11d --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/include/DetectorMessenger.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 DetectorMessenger_h +#define DetectorMessenger_h 1 + +#include "G4UImessenger.hh" +#include "globals.hh" + +class DetectorConstruction; +class G4UIdirectory; +class G4UIcmdWithAString; +class G4UIcmdWithAnInteger; +class G4UIcmdWithADoubleAndUnit; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class DetectorMessenger : public G4UImessenger +{ + public: + DetectorMessenger(DetectorConstruction*); + ~DetectorMessenger() override; + + void SetNewValue(G4UIcommand*, G4String) override; + + private: + DetectorConstruction* fDetector; + + G4UIdirectory* fTomoDir; + G4UIdirectory* fDetDir; + + G4UIcmdWithAString* fAbsMaterCmd; + G4UIcmdWithADoubleAndUnit* fAbsThickCmd; + G4UIcmdWithADoubleAndUnit* fAbsSizYZCmd; + + G4UIcmdWithADoubleAndUnit* fAbsXposCmd; + + G4UIcmdWithAString* fWorldMaterCmd; + G4UIcmdWithADoubleAndUnit* fWorldXCmd; + G4UIcmdWithADoubleAndUnit* fWorldYZCmd; + + G4UIcmdWithAnInteger* fPhantomType; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/stim_pixe_tomography/include/PhysListEmStandard.hh b/examples/advanced/stim_pixe_tomography/include/PhysListEmStandard.hh new file mode 100644 index 00000000000..ecb2b64e038 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/include/PhysListEmStandard.hh @@ -0,0 +1,57 @@ +// +// ******************************************************************** +// * 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 PhysListEmStandard_h +#define PhysListEmStandard_h 1 + +#include "G4VPhysicsConstructor.hh" +#include "globals.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class PhysListEmStandard : public G4VPhysicsConstructor +{ + public: + PhysListEmStandard(const G4String& name = "local"); + ~PhysListEmStandard() override; + + public: + // This method is dummy for physics + void ConstructParticle() override{}; + + // This method will be invoked in the Construct() method. + // each physics process will be instantiated and + // registered to the process manager of each particle type + void ConstructProcess() override; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/stim_pixe_tomography/include/PhysicsList.hh b/examples/advanced/stim_pixe_tomography/include/PhysicsList.hh new file mode 100644 index 00000000000..56f6622240e --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/include/PhysicsList.hh @@ -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. * +// ******************************************************************** +// +// +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#ifndef PhysicsList_h +#define PhysicsList_h 1 + +#include "G4VModularPhysicsList.hh" +#include "globals.hh" + +class G4VPhysicsConstructor; +class PhysicsListMessenger; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class PhysicsList : public G4VModularPhysicsList +{ + public: + PhysicsList(); + ~PhysicsList() override; + + void ConstructParticle() override; + + void AddPhysicsList(const G4String& name); + + void ConstructProcess() override; + void AddStepMax(); + + private: + + G4bool fHelIsRegisted; + G4bool fBicIsRegisted; + G4bool fBiciIsRegisted; + + PhysicsListMessenger* fMessenger; + + + G4String fEmName; + G4VPhysicsConstructor* fEmPhysics; + G4VPhysicsConstructor* fDecayPhysics; + std::vector fHadronPhysics; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/stim_pixe_tomography/include/PhysicsListMessenger.hh b/examples/advanced/stim_pixe_tomography/include/PhysicsListMessenger.hh new file mode 100644 index 00000000000..52a19ff9cfd --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/include/PhysicsListMessenger.hh @@ -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. * +// ******************************************************************** +// +// +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#ifndef PhysicsListMessenger_h +#define PhysicsListMessenger_h 1 + +#include "G4UImessenger.hh" +#include "globals.hh" + +class PhysicsList; +class G4UIdirectory; +class G4UIcmdWithAString; +class G4UIcmdWithADoubleAndUnit; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class PhysicsListMessenger : public G4UImessenger +{ + public: + PhysicsListMessenger(PhysicsList*); + ~PhysicsListMessenger() override; + + void SetNewValue(G4UIcommand*, G4String) override; + + private: + PhysicsList* fPhysicsList; + + G4UIdirectory* fPhysDir; + G4UIcmdWithAString* fListCmd; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/stim_pixe_tomography/include/PrimaryGeneratorAction.hh b/examples/advanced/stim_pixe_tomography/include/PrimaryGeneratorAction.hh new file mode 100644 index 00000000000..5509663163a --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/include/PrimaryGeneratorAction.hh @@ -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. * +// ******************************************************************** +// +// +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#ifndef PrimaryGeneratorAction_h +#define PrimaryGeneratorAction_h 1 + +#include "G4VUserPrimaryGeneratorAction.hh" +#include "G4GeneralParticleSource.hh" +#include "globals.hh" + +class G4Event; +class DetectorConstruction; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction +{ + public: + PrimaryGeneratorAction(); + ~PrimaryGeneratorAction() override; + + public: + void GeneratePrimaries(G4Event*) override; + + private: + G4GeneralParticleSource* fParticleGun; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/stim_pixe_tomography/include/Run.hh b/examples/advanced/stim_pixe_tomography/include/Run.hh new file mode 100644 index 00000000000..d98f6d88569 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/include/Run.hh @@ -0,0 +1,128 @@ +// +// ******************************************************************** +// * 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 Run_h +#define Run_h 1 + +#include "G4Electron.hh" +#include "G4Gamma.hh" +#include "G4Positron.hh" +#include "G4Run.hh" +#include "globals.hh" + +#include + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +// +//// struct for keeping particle information +// energy + momentum +// +struct ParticleInfo +{ + G4float energy; + G4float mx; + G4float my; + G4float mz; + ParticleInfo(G4float e, G4float vx, G4float vy, G4float vz) : energy(e), mx(vx), my(vy), mz(vz) {} +}; + +// struct ParticleInfo +// { +// G4float energy; +// G4float mx; +// G4float my; +// G4float mz; +// G4float x; +// G4float y; +// G4float z; +// ParticleInfo(G4float e, G4float vx, G4float vy, G4float vz, +// G4float x0, G4float y0, G4float z0) +// : energy(e) +// , mx(vx) +// , my(vy) +// , mz(vz) +// , x(x0) +// , y(y0) +// , z(z0) +// {} +// }; + +struct RunInfo +{ + uint8_t projectionIndex; // 1 byte + uint16_t sliceIndex; // + uint16_t pixelIndex; + uint32_t nbParticle; // 4 bytes + RunInfo(uint8_t proI, uint16_t sI, uint16_t pI, uint32_t nb = 0) + : projectionIndex(proI), sliceIndex(sI), pixelIndex(pI), nbParticle(nb) + {} +}; + +class Run : public G4Run +{ +public: + Run(G4bool isP, G4int nbProjs, G4int nbSlices, G4int nbPixels, G4int resumeProjectionIndex); + ~Run() override; + +public: + void Merge(const G4Run*) override; + void EndOfRun(); + + G4bool GetIsPIXE(); + G4int GetCurrentProjection(); + G4int GetCurrentSlice(); + G4int GetCurrentPixel(); + + void FillGammaAtExit(ParticleInfo gammaInfo); + void FillGammaAtCreation(ParticleInfo gammaInfo); + void FillProtonAtExit(ParticleInfo protonInfo); + + void ClearVecs(); + void WriteFile(const std::string fName, RunInfo& runInfo, std::vector& vec); + +private: + G4bool isPIXE; + std::vector gammaAtExit; // gamma at exit for a run + std::vector gammaAtCreation; // gamma at creation for a run + std::vector protonAtExit; // proton at exit for a run + + G4int fProjectionIndex; + G4int fSliceIndex; + G4int fPixelIndex; + + G4int fNbProjections; + G4int fNbSlices; + G4int fNbPixels; + G4int fResumeProjIndex; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/stim_pixe_tomography/include/RunAction.hh b/examples/advanced/stim_pixe_tomography/include/RunAction.hh new file mode 100644 index 00000000000..c0a835a862d --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/include/RunAction.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. * +// ******************************************************************** +// +// +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#ifndef RunAction_h +#define RunAction_h 1 + +#include "G4UserRunAction.hh" +#include "globals.hh" + +#include "vector" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class Run; +class RunActionMessenger; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class RunAction : public G4UserRunAction +{ +public: + RunAction(G4bool isP); + ~RunAction() override; + + G4Run* GenerateRun() override; + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; + void SetScanParameters(G4int, G4int, G4int); + void SetInterruptionFlag(G4bool); + void SetResumeProjectionIndex(G4int proj); + +private: + Run* fRun; + G4bool isPIXE; + G4int fNbProjections; + G4int fNbSlices; + G4int fNbPixels; + G4bool fInterFlag; + G4int fInterruptedProjectionIndex; + + RunActionMessenger* fRunMessenger; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/source/processes/electromagnetic/dna/utils/include/G4DNACPA100WaterIonisationStructure.hh b/examples/advanced/stim_pixe_tomography/include/RunActionMessenger.hh similarity index 62% rename from source/processes/electromagnetic/dna/utils/include/G4DNACPA100WaterIonisationStructure.hh rename to examples/advanced/stim_pixe_tomography/include/RunActionMessenger.hh index 06be5398b8f..bbd23c3f8dc 100644 --- a/source/processes/electromagnetic/dna/utils/include/G4DNACPA100WaterIonisationStructure.hh +++ b/examples/advanced/stim_pixe_tomography/include/RunActionMessenger.hh @@ -23,50 +23,45 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// Based on the work of M. Terrissol and M. C. Bordage +/// \file electromagnetic/TestEm2/include/RunActionMessenger.hh +/// \brief Definition of the RunActionMessenger class // -// Users are requested to cite the following papers: -// - M. Terrissol, A. Baudre, Radiat. Prot. Dosim. 31 (1990) 175-177 -// - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries, -// M. Bardies, N. Lampe, S. Incerti, Phys. Med. 32 (2016) 1833-1840 -// -// Authors of this class: -// M.C. Bordage, M. Terrissol, S. Edel, J. Bordes, S. Incerti -// -// 15.01.2014: creation // +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#ifndef RunActionMessenger_h +#define RunActionMessenger_h 1 -#ifndef G4DNACPA100WaterIonisationStructure_hh -#define G4DNACPA100WaterIonisationStructure_hh 1 - +#include "G4UImessenger.hh" #include "globals.hh" -#include - -class G4DNACPA100WaterIonisationStructure +class RunAction; +class G4UIdirectory; +class G4UIcmdWithAString; +class G4UIcmdWithAnInteger; +class G4UIcmdWithABool; +class G4UIcmdWithAnInteger; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class RunActionMessenger : public G4UImessenger { public: - - G4DNACPA100WaterIonisationStructure(); - - virtual ~G4DNACPA100WaterIonisationStructure(); - - G4double IonisationEnergy(G4int level); + RunActionMessenger(RunAction*); + ~RunActionMessenger() override; - G4double UEnergy(G4int level); + void SetNewValue(G4UIcommand*, G4String) override; - G4int NumberOfLevels() { return nLevels; } - - // Copy constructor and assignment operator to be added here - private: - - // Number of Ionisation levels of the water molecule - G4int nLevels; + RunAction* fRunAction; - std::vector energyConstant; - std::vector UConstant; - + G4UIdirectory* fRunDir; + G4UIcommand* fScanParamsCmd; + G4UIcmdWithABool* resumeCmd; + G4UIcmdWithAnInteger* resumeProjectionIndexCmd; }; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + #endif diff --git a/examples/advanced/stim_pixe_tomography/include/StackingAction.hh b/examples/advanced/stim_pixe_tomography/include/StackingAction.hh new file mode 100644 index 00000000000..aa5549238bd --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/include/StackingAction.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. * +// ******************************************************************** +// +// +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#ifndef StackingAction_h +#define StackingAction_h 1 + +#include "G4UserStackingAction.hh" +#include "globals.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class StackingAction : public G4UserStackingAction +{ +public: + StackingAction(); + ~StackingAction() override; + + G4ClassificationOfNewTrack ClassifyNewTrack(const G4Track*) override; + +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/stim_pixe_tomography/include/TrackingAction.hh b/examples/advanced/stim_pixe_tomography/include/TrackingAction.hh new file mode 100644 index 00000000000..3272595344e --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/include/TrackingAction.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. * +// ******************************************************************** +// +// +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#ifndef TrackingAction_h +#define TrackingAction_h 1 + +#include "G4UserTrackingAction.hh" +#include "globals.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class TrackingAction : public G4UserTrackingAction +{ +public: + TrackingAction(); + ~TrackingAction() override; + + void PostUserTrackingAction(const G4Track*) override; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/stim_pixe_tomography/init_vis.mac b/examples/advanced/stim_pixe_tomography/init_vis.mac new file mode 100644 index 00000000000..5f208121a6e --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/init_vis.mac @@ -0,0 +1,17 @@ +# Macro file for the initialization +# in interactive session +# +# Set some default verbose +# +/control/verbose 2 +/control/saveHistory +/run/verbose 2 +# +# Change the default number of threads (in multi-threaded mode) +#/run/numberOfThreads 4 +# +# Initialize kernel +/run/initialize +# +# Visualization setting +/control/execute vis.mac diff --git a/examples/advanced/stim_pixe_tomography/pixe3d.mac b/examples/advanced/stim_pixe_tomography/pixe3d.mac new file mode 100644 index 00000000000..aebbf17f3cf --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/pixe3d.mac @@ -0,0 +1,852 @@ +# +# macro file pixe3d.mac +# +/control/verbose 1 +/run/verbose 1 +#/tracking/verbose 2 +# +#/tomography/det/setPhantomType 1 +# +# material and size of simple cube object +# comment out if the object is not a cubic shape +#/tomography/det/setAbsMat Gold +#/tomography/det/setAbsMat G4_P +#/tomography/det/setAbsThick 50 um +#/tomography/det/setAbsYZ 50 um +#/tomography/det/setAbsThick 5 um +#/tomography/det/setAbsYZ 5 um +# +#Physics lists +#/tomography/phys/addPhysics local +/tomography/phys/addPhysics elastic +/tomography/phys/addPhysics binary +/tomography/phys/addPhysics binary_ion +# +#Production cuts +#/run/setCut 0.01 mm +#/run/setCutForAGivenParticle gamma 0.5 um +/run/setCut 1 nm +/cuts/setLowEdge 900 eV +# +#/process/em/deexcitationIgnoreCut true +#/process/em/deexcitation world true false true +/process/em/applyCuts true +/process/em/fluo true +/process/em/fluoBearden true +/process/em/pixe true +/process/em/auger true +/process/em/augerCascade true +# +/tomography/run/scanParameters 10 1 20 +# +/run/initialize +# +/run/printProgress 500000 +# +# Source definition : energy, type +# +/gps/energy 1.50 MeV +/gps/particle proton +# +# SOURCE POSITION AND DIRECTION +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -34.200000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -30.600000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -27.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -23.400000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -19.800000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -16.200000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -12.600000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -9.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -5.400000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -1.800000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 1.800000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 5.400000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 9.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 12.600000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 16.200000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 19.800000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 23.400000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 27.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 30.600000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 34.200000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -23.669653 -43.650745 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -24.782115 -40.226941 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -25.894576 -36.803138 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -27.007037 -33.379334 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -28.119498 -29.955531 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -29.231959 -26.531727 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -30.344420 -23.107924 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -31.456882 -19.684120 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -32.569343 -16.260317 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -33.681804 -12.836514 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -34.794265 -9.412710 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -35.906726 -5.988907 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -37.019188 -2.565103 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -38.131649 0.858700 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -39.244110 4.282504 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -40.356571 7.706307 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -41.469032 11.130111 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -42.581493 14.553914 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -43.693955 17.977718 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -44.806416 21.401521 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -9.022356 -48.828650 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -11.138383 -45.916189 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -13.254410 -43.003728 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -15.370437 -40.091267 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -17.486464 -37.178806 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -19.602491 -34.266344 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -21.718518 -31.353883 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -23.834545 -28.441422 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -25.950571 -25.528961 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -28.066598 -22.616500 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -30.182625 -19.704038 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -32.298652 -16.791577 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -34.414679 -13.879116 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -36.530706 -10.966655 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -38.646733 -8.054194 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -40.762760 -5.141733 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -42.878787 -2.229271 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -44.994814 0.683190 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -47.110841 3.595651 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -49.226867 6.508112 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre 6.508112 -49.226867 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre 3.595651 -47.110841 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre 0.683190 -44.994814 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -2.229271 -42.878787 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -5.141733 -40.762760 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -8.054194 -38.646733 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -10.966655 -36.530706 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -13.879116 -34.414679 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -16.791577 -32.298652 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -19.704038 -30.182625 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -22.616500 -28.066598 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -25.528961 -25.950571 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -28.441422 -23.834545 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -31.353883 -21.718518 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -34.266344 -19.602491 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -37.178806 -17.486464 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -40.091267 -15.370437 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -43.003728 -13.254410 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -45.916189 -11.138383 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -48.828650 -9.022356 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre 21.401521 -44.806416 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre 17.977718 -43.693955 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre 14.553914 -42.581493 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre 11.130111 -41.469032 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre 7.706307 -40.356571 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre 4.282504 -39.244110 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre 0.858700 -38.131649 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -2.565103 -37.019188 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -5.988907 -35.906726 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -9.412710 -34.794265 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -12.836514 -33.681804 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -16.260317 -32.569343 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -19.684120 -31.456882 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -23.107924 -30.344420 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -26.531727 -29.231959 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -29.955531 -28.119498 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -33.379334 -27.007037 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -36.803138 -25.894576 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -40.226941 -24.782115 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -43.650745 -23.669653 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 34.200000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 30.600000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 27.000000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 23.400000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 19.800000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 16.200000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 12.600000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 9.000000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 5.400000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 1.800000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -1.800000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -5.400000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -9.000000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -12.600000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -16.200000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -19.800000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -23.400000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -27.000000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -30.600000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -34.200000 -36.000000 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 43.650745 -23.669653 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 40.226941 -24.782115 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 36.803138 -25.894576 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 33.379334 -27.007037 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 29.955531 -28.119498 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 26.531727 -29.231959 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 23.107924 -30.344420 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 19.684120 -31.456882 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 16.260317 -32.569343 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 12.836514 -33.681804 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 9.412710 -34.794265 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 5.988907 -35.906726 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 2.565103 -37.019188 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre -0.858700 -38.131649 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre -4.282504 -39.244110 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre -7.706307 -40.356571 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre -11.130111 -41.469032 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre -14.553914 -42.581493 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre -17.977718 -43.693955 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre -21.401521 -44.806416 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 48.828650 -9.022356 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 45.916189 -11.138383 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 43.003728 -13.254410 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 40.091267 -15.370437 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 37.178806 -17.486464 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 34.266344 -19.602491 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 31.353883 -21.718518 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 28.441422 -23.834545 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 25.528961 -25.950571 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 22.616500 -28.066598 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 19.704038 -30.182625 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 16.791577 -32.298652 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 13.879116 -34.414679 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 10.966655 -36.530706 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 8.054194 -38.646733 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 5.141733 -40.762760 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 2.229271 -42.878787 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre -0.683190 -44.994814 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre -3.595651 -47.110841 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre -6.508112 -49.226867 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 49.226867 6.508112 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 47.110841 3.595651 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 44.994814 0.683190 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 42.878787 -2.229271 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 40.762760 -5.141733 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 38.646733 -8.054194 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 36.530706 -10.966655 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 34.414679 -13.879116 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 32.298652 -16.791577 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 30.182625 -19.704038 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 28.066598 -22.616500 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 25.950571 -25.528961 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 23.834545 -28.441422 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 21.718518 -31.353883 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 19.602491 -34.266344 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 17.486464 -37.178806 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 15.370437 -40.091267 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 13.254410 -43.003728 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 11.138383 -45.916189 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 9.022356 -48.828650 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 44.806416 21.401521 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 43.693955 17.977718 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 42.581493 14.553914 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 41.469032 11.130111 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 40.356571 7.706307 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 39.244110 4.282504 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 38.131649 0.858700 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 37.019188 -2.565103 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 35.906726 -5.988907 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 34.794265 -9.412710 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 33.681804 -12.836514 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 32.569343 -16.260317 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 31.456882 -19.684120 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 30.344420 -23.107924 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 29.231959 -26.531727 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 28.119498 -29.955531 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 27.007037 -33.379334 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 25.894576 -36.803138 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 24.782115 -40.226941 0.000000 um +/run/beamOn 1000000 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 23.669653 -43.650745 0.000000 um +/run/beamOn 1000000 +# diff --git a/examples/advanced/stim_pixe_tomography/pixe3d_initial.mac b/examples/advanced/stim_pixe_tomography/pixe3d_initial.mac new file mode 100644 index 00000000000..88585fbf14e --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/pixe3d_initial.mac @@ -0,0 +1,39 @@ +# +# macro file pixe3d.mac +# +/control/verbose 1 +/run/verbose 1 +#/tracking/verbose 2 +# +#/tomography/det/setPhantomType 1 +# +# material and size of simple cube object +# comment out if the object is not a cubic shape +#/tomography/det/setAbsMat Gold +#/tomography/det/setAbsMat G4_P +#/tomography/det/setAbsThick 50 um +#/tomography/det/setAbsYZ 50 um +#/tomography/det/setAbsThick 5 um +#/tomography/det/setAbsYZ 5 um +# +#Physics lists +#/tomography/phys/addPhysics local +/tomography/phys/addPhysics elastic +/tomography/phys/addPhysics binary +/tomography/phys/addPhysics binary_ion +# +#Production cuts +#/run/setCut 0.01 mm +#/run/setCutForAGivenParticle gamma 0.5 um +/run/setCut 1 nm +/cuts/setLowEdge 900 eV +# +#/process/em/deexcitationIgnoreCut true +#/process/em/deexcitation world true false true +/process/em/applyCuts true +/process/em/fluo true +/process/em/fluoBearden true +/process/em/pixe true +/process/em/auger true +/process/em/augerCascade true +# diff --git a/examples/advanced/stim_pixe_tomography/pixe3d_stim.mac b/examples/advanced/stim_pixe_tomography/pixe3d_stim.mac new file mode 100644 index 00000000000..33c5c815f9f --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/pixe3d_stim.mac @@ -0,0 +1,852 @@ +# +# macro file pixe3d.mac +# +/control/verbose 1 +/run/verbose 1 +#/tracking/verbose 2 +# +#/tomography/det/setPhantomType 1 +# +# material and size of simple cube object +# comment out if the object is not a cubic shape +#/tomography/det/setAbsMat Gold +#/tomography/det/setAbsMat G4_P +#/tomography/det/setAbsThick 50 um +#/tomography/det/setAbsYZ 50 um +#/tomography/det/setAbsThick 5 um +#/tomography/det/setAbsYZ 5 um +# +#Physics lists +#/tomography/phys/addPhysics local +/tomography/phys/addPhysics elastic +/tomography/phys/addPhysics binary +/tomography/phys/addPhysics binary_ion +# +#Production cuts +#/run/setCut 0.01 mm +#/run/setCutForAGivenParticle gamma 0.5 um +/run/setCut 1 nm +/cuts/setLowEdge 900 eV +# +#/process/em/deexcitationIgnoreCut true +#/process/em/deexcitation world true false true +/process/em/applyCuts true +/process/em/fluo true +/process/em/fluoBearden true +/process/em/pixe true +/process/em/auger true +/process/em/augerCascade true +# +/tomography/run/scanParameters 10 1 20 +# +/run/initialize +# +/run/printProgress 500000 +# +# Source definition : energy, type +# +/gps/energy 1.50 MeV +/gps/particle proton +# +# SOURCE POSITION AND DIRECTION +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -34.200000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -30.600000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -27.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -23.400000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -19.800000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -16.200000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -12.600000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -9.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -5.400000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -1.800000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 1.800000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 5.400000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 9.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 12.600000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 16.200000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 19.800000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 23.400000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 27.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 30.600000 0.000000 um +/run/beamOn 100 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 34.200000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -23.669653 -43.650745 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -24.782115 -40.226941 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -25.894576 -36.803138 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -27.007037 -33.379334 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -28.119498 -29.955531 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -29.231959 -26.531727 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -30.344420 -23.107924 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -31.456882 -19.684120 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -32.569343 -16.260317 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -33.681804 -12.836514 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -34.794265 -9.412710 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -35.906726 -5.988907 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -37.019188 -2.565103 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -38.131649 0.858700 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -39.244110 4.282504 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -40.356571 7.706307 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -41.469032 11.130111 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -42.581493 14.553914 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -43.693955 17.977718 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.951057 0.309017 0.000000 +/gps/pos/centre -44.806416 21.401521 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -9.022356 -48.828650 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -11.138383 -45.916189 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -13.254410 -43.003728 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -15.370437 -40.091267 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -17.486464 -37.178806 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -19.602491 -34.266344 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -21.718518 -31.353883 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -23.834545 -28.441422 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -25.950571 -25.528961 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -28.066598 -22.616500 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -30.182625 -19.704038 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -32.298652 -16.791577 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -34.414679 -13.879116 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -36.530706 -10.966655 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -38.646733 -8.054194 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -40.762760 -5.141733 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -42.878787 -2.229271 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -44.994814 0.683190 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -47.110841 3.595651 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -49.226867 6.508112 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre 6.508112 -49.226867 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre 3.595651 -47.110841 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre 0.683190 -44.994814 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -2.229271 -42.878787 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -5.141733 -40.762760 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -8.054194 -38.646733 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -10.966655 -36.530706 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -13.879116 -34.414679 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -16.791577 -32.298652 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -19.704038 -30.182625 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -22.616500 -28.066598 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -25.528961 -25.950571 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -28.441422 -23.834545 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -31.353883 -21.718518 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -34.266344 -19.602491 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -37.178806 -17.486464 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -40.091267 -15.370437 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -43.003728 -13.254410 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -45.916189 -11.138383 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.587785 0.809017 0.000000 +/gps/pos/centre -48.828650 -9.022356 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre 21.401521 -44.806416 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre 17.977718 -43.693955 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre 14.553914 -42.581493 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre 11.130111 -41.469032 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre 7.706307 -40.356571 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre 4.282504 -39.244110 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre 0.858700 -38.131649 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -2.565103 -37.019188 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -5.988907 -35.906726 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -9.412710 -34.794265 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -12.836514 -33.681804 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -16.260317 -32.569343 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -19.684120 -31.456882 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -23.107924 -30.344420 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -26.531727 -29.231959 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -29.955531 -28.119498 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -33.379334 -27.007037 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -36.803138 -25.894576 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -40.226941 -24.782115 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -43.650745 -23.669653 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 34.200000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 30.600000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 27.000000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 23.400000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 19.800000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 16.200000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 12.600000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 9.000000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 5.400000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre 1.800000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -1.800000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -5.400000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -9.000000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -12.600000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -16.200000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -19.800000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -23.400000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -27.000000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -30.600000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction 0.000000 1.000000 0.000000 +/gps/pos/centre -34.200000 -36.000000 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 43.650745 -23.669653 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 40.226941 -24.782115 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 36.803138 -25.894576 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 33.379334 -27.007037 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 29.955531 -28.119498 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 26.531727 -29.231959 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 23.107924 -30.344420 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 19.684120 -31.456882 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 16.260317 -32.569343 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 12.836514 -33.681804 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 9.412710 -34.794265 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 5.988907 -35.906726 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 2.565103 -37.019188 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre -0.858700 -38.131649 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre -4.282504 -39.244110 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre -7.706307 -40.356571 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre -11.130111 -41.469032 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre -14.553914 -42.581493 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre -17.977718 -43.693955 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre -21.401521 -44.806416 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 48.828650 -9.022356 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 45.916189 -11.138383 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 43.003728 -13.254410 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 40.091267 -15.370437 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 37.178806 -17.486464 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 34.266344 -19.602491 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 31.353883 -21.718518 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 28.441422 -23.834545 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 25.528961 -25.950571 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 22.616500 -28.066598 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 19.704038 -30.182625 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 16.791577 -32.298652 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 13.879116 -34.414679 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 10.966655 -36.530706 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 8.054194 -38.646733 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 5.141733 -40.762760 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre 2.229271 -42.878787 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre -0.683190 -44.994814 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre -3.595651 -47.110841 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.587785 0.809017 0.000000 +/gps/pos/centre -6.508112 -49.226867 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 49.226867 6.508112 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 47.110841 3.595651 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 44.994814 0.683190 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 42.878787 -2.229271 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 40.762760 -5.141733 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 38.646733 -8.054194 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 36.530706 -10.966655 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 34.414679 -13.879116 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 32.298652 -16.791577 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 30.182625 -19.704038 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 28.066598 -22.616500 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 25.950571 -25.528961 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 23.834545 -28.441422 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 21.718518 -31.353883 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 19.602491 -34.266344 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 17.486464 -37.178806 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 15.370437 -40.091267 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 13.254410 -43.003728 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 11.138383 -45.916189 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 9.022356 -48.828650 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 44.806416 21.401521 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 43.693955 17.977718 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 42.581493 14.553914 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 41.469032 11.130111 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 40.356571 7.706307 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 39.244110 4.282504 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 38.131649 0.858700 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 37.019188 -2.565103 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 35.906726 -5.988907 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 34.794265 -9.412710 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 33.681804 -12.836514 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 32.569343 -16.260317 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 31.456882 -19.684120 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 30.344420 -23.107924 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 29.231959 -26.531727 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 28.119498 -29.955531 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 27.007037 -33.379334 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 25.894576 -36.803138 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 24.782115 -40.226941 0.000000 um +/run/beamOn 100 +# +/gps/direction -0.951057 0.309017 0.000000 +/gps/pos/centre 23.669653 -43.650745 0.000000 um +/run/beamOn 100 +# diff --git a/examples/advanced/stim_pixe_tomography/src/ActionInitialization.cc b/examples/advanced/stim_pixe_tomography/src/ActionInitialization.cc new file mode 100644 index 00000000000..5cff55a5217 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/src/ActionInitialization.cc @@ -0,0 +1,64 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +#include "ActionInitialization.hh" + +#include "PrimaryGeneratorAction.hh" +#include "RunAction.hh" +#include "StackingAction.hh" +#include "TrackingAction.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +ActionInitialization::ActionInitialization(G4bool isP) : G4VUserActionInitialization(), isPIXE(isP) +{} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +ActionInitialization::~ActionInitialization() = default; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ActionInitialization::BuildForMaster() const +{ + SetUserAction(new RunAction(isPIXE)); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ActionInitialization::Build() const +{ + SetUserAction(new PrimaryGeneratorAction()); + + auto runaction = new RunAction(isPIXE); + SetUserAction(runaction); + + SetUserAction(new TrackingAction()); + + SetUserAction(new StackingAction()); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/stim_pixe_tomography/src/DetectorConstruction.cc b/examples/advanced/stim_pixe_tomography/src/DetectorConstruction.cc new file mode 100644 index 00000000000..a518890660b --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/src/DetectorConstruction.cc @@ -0,0 +1,847 @@ +// +// ******************************************************************** +// * 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 "DetectorConstruction.hh" + +#include "G4AutoDelete.hh" +#include "G4Box.hh" +#include "G4Colour.hh" +#include "G4Ellipsoid.hh" +#include "G4GeometryManager.hh" +#include "G4GlobalMagFieldMessenger.hh" +#include "G4LogicalVolume.hh" +#include "G4Material.hh" +#include "G4NistManager.hh" +#include "G4PVPlacement.hh" +#include "G4PhysicalConstants.hh" +#include "G4PhysicalVolumeStore.hh" +#include "G4RunManager.hh" +#include "G4Sphere.hh" +#include "G4SystemOfUnits.hh" +#include "G4UniformMagField.hh" +#include "G4UnitsTable.hh" +#include "G4UserLimits.hh" +#include "G4VisAttributes.hh" + +#include "DetectorMessenger.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +DetectorConstruction::DetectorConstruction() + : G4VUserDetectorConstruction(), + fAbsorberMaterial(nullptr), + fWorldMaterial(nullptr), + fSolidWorld(nullptr), + fLogicWorld(nullptr), + fPhysiWorld(nullptr), + fSolidAbsorber(nullptr), + fLogicAbsorber(nullptr), + fPhysiAbsorber(nullptr), + material1(nullptr), + material2(nullptr), + material3(nullptr), + material4(nullptr), + material5(nullptr), + material6(nullptr), + material_GDP(nullptr), + ellipse1(nullptr), + logicEllipse1(nullptr), + physiEllipse1(nullptr), + ellipse2(nullptr), + logicEllipse2(nullptr), + physiEllipse2(nullptr), + ellipse3(nullptr), + logicEllipse3(nullptr), + physiEllipse3(nullptr), + ellipse4(nullptr), + logicEllipse4(nullptr), + physiEllipse4(nullptr), + ellipse5(nullptr), + logicEllipse5(nullptr), + physiEllipse5(nullptr), + ellipse6(nullptr), + logicEllipse6(nullptr), + physiEllipse6(nullptr), + solid_GDP(nullptr), + logic_GDP(nullptr), + physi_GDP(nullptr), + fDetectorMessenger(nullptr) +{ + phantom_type = 1; + + DefineMaterials(); + + if (phantom_type == 1) { + // default parameter values of the box + fAbsorberThickness = 40. * um; + fAbsorberSizeYZ = 40. * um; + + // SetAbsorberMaterial("G4_Cu"); + SetAbsorberMaterial("Body_10times"); + // SetAbsorberMaterial("Body_real"); + } + fXposAbs = 0. * cm; + ComputeGeomParameters(); + + // materials + SetWorldMaterial("G4_Galactic"); + + // create commands for interactive definition of the box + fDetectorMessenger = new DetectorMessenger(this); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +DetectorConstruction::~DetectorConstruction() +{ + delete fDetectorMessenger; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DetectorConstruction::DefineMaterials() +{ + // + // define Elements + // + auto H = new G4Element("Hydrogen", "H", 1, 1.01 * g / mole); + auto C = new G4Element("Carbon", "C", 6, 12.01 * g / mole); + auto N = new G4Element("Nitrogen", "N", 7, 14.01 * g / mole); + auto O = new G4Element("Oxygen", "O", 8, 16.00 * g / mole); + auto P = new G4Element("Phosphorus", "P", 15, 30.97 * g / mole); + auto S = new G4Element("Sulphur", "S", 16, 32.07 * g / mole); + auto Cl = new G4Element("Chlorine", "Cl", 17, 35.45 * g / mole); + auto K = new G4Element("Potassium", "K", 19, 39.10 * g / mole); + auto Ca = new G4Element("Calcium", "Ca", 20, 40.08 * g / mole); + auto Ti = new G4Element("Titanium", "Ti", 22, 47.87 * g / mole); + auto Ge = new G4Element("Germanium", "Ge", 32., 72.59 * g / mole); + + // + // define biological materials + // + auto BioMaterial = new G4Material("C10H17O3N2", 1.218 * g / cm3, 4); + BioMaterial->AddElement(C, 10); + BioMaterial->AddElement(H, 17); + BioMaterial->AddElement(O, 3); + BioMaterial->AddElement(N, 2); + + // FIRST ELLIPSOID : external surface of the worm ("skin") + // Original (real) composition in dry mass (the worm is dehydrated by + // lyophilization) Each element content is defined by its mass fraction (must + // be normalised to 1) + auto Skin_real = new G4Material("Skin_real", 0.49729 * g / cm3, 5); + Skin_real->AddElement(P, 0.47 * perCent); + Skin_real->AddElement(S, 0.21 * perCent); + Skin_real->AddElement(Cl, 0.05 * perCent); + Skin_real->AddElement(K, 0.48 * perCent); + Skin_real->AddMaterial(BioMaterial, 98.79 * perCent); + + // Skin1: mass fractions of mineral elements 1O times more than original + // (real) mass fractions + auto Skin_10times = new G4Material("Skin_10times", 0.49729 * g / cm3, 5); + Skin_10times->AddElement(P, 4.71 * perCent); + Skin_10times->AddElement(S, 2.10 * perCent); + Skin_10times->AddElement(Cl, 0.46 * perCent); + Skin_10times->AddElement(K, 4.77 * perCent); + Skin_10times->AddMaterial(BioMaterial, 87.96 * perCent); + + // SECOND ELLIPSOID : "body" of the worm, limited by the internal surface of + // the "skin" Original (real) composition in dry mass (the worm is dehydrated + // by lyophilization) Each element content is defined by its mass fraction + // (must be normalised to 1) + auto Body_real = new G4Material("Body_real", 0.40853 * g / cm3, 2); + Body_real->AddElement(P, 0.72 * perCent); + Body_real->AddMaterial(BioMaterial, 99.28 * perCent); + + // Body_10times: mass fractions of mineral elements 1O times more than + // original (real) mass fractions + auto Body_10times = new G4Material("Body_10times", 0.40853 * g / cm3, 2); + Body_10times->AddElement(P, 7.23 * perCent); + Body_10times->AddMaterial(BioMaterial, 92.77 * perCent); + + // THIRD ELLIPSOID : Nucleus of cell 1 (contained inside ellipsoid 2) + // Original (real) composition in dry mass (the worm is dehydrated by + // lyophilization) Each element content is defined by its mass fraction (must + // be normalised to 1) + auto Cell1_real = new G4Material("Cell1_real", 0.66262 * g / cm3, 3); + Cell1_real->AddElement(P, 0.57 * perCent); + Cell1_real->AddElement(Ca, 1.55 * perCent); + Cell1_real->AddMaterial(BioMaterial, 97.88 * perCent); + + // Cell1_10times: mass fractions of mineral elements 1O times more than + // original (real) mass fractions + auto Cell1_10times = new G4Material("Cell1_10times", 0.66262 * g / cm3, 3); + Cell1_10times->AddElement(P, 5.66 * perCent); + Cell1_10times->AddElement(Ca, 15.49 * perCent); + Cell1_10times->AddMaterial(BioMaterial, 78.85 * perCent); + + // FOURTH ELLIPSOID : Nucleus of cell 2 (contained inside ellipsoid 2) + // Original (real) composition in dry mass (the worm is dehydrated by + // lyophilization) Each element content is defined by its mass fraction (must + // be normalised to 1) + auto Cell2_real = new G4Material("Cell2_real", 0.60227 * g / cm3, 3); + Cell2_real->AddElement(P, 0.61 * perCent); + Cell2_real->AddElement(Ca, 1.44 * perCent); + Cell2_real->AddMaterial(BioMaterial, 97.95 * perCent); + + // Cell2_10times: mass fractions of mineral elements 1O times more than + // original (real) mass fractions + auto Cell2_10times = new G4Material("Cell2_10times", 0.60227 * g / cm3, 3); + Cell2_10times->AddElement(P, 6.10 * perCent); + Cell2_10times->AddElement(Ca, 14.45 * perCent); + Cell2_10times->AddMaterial(BioMaterial, 79.45 * perCent); + + // FIFTH ELLIPSOID: intestine of the worm + // Original (real) composition in dry mass (the worm is dehydrated by + // lyophilization) Each element content is defined by its mass fraction (must + // be normalised to 1) + auto Intestine_real = new G4Material("Intestine_real", 0.54058 * g / cm3, 4); + Intestine_real->AddElement(S, 0.12 * perCent); + Intestine_real->AddElement(Cl, 0.02 * perCent); + Intestine_real->AddElement(K, 0.20 * perCent); + Intestine_real->AddMaterial(BioMaterial, 99.66 * perCent); + + // Intestine_10times: mass fractions of mineral elements 1O times more than + // original (real) mass fractions + auto Intestine_10times = new G4Material("Intestine_10times", 0.54058 * g / cm3, 4); + Intestine_10times->AddElement(S, 1.17 * perCent); + Intestine_10times->AddElement(Cl, 0.23 * perCent); + Intestine_10times->AddElement(K, 1.99 * perCent); + Intestine_10times->AddMaterial(BioMaterial, 96.61 * perCent); + + // SIXTH ELLIPSOID: Nucleus of cell Ti (contained inside ellipsoid 5) + // Original (real) composition in dry mass (the worm is dehydrated by + // lyophilization) Each element content is defined by its mass fraction (must + // be normalised to 1) + auto CellTi_real = new G4Material("CellTi_real", 0.75138 * g / cm3, 5); + CellTi_real->AddElement(S, 0.11 * perCent); + CellTi_real->AddElement(Cl, 0.02 * perCent); + CellTi_real->AddElement(K, 0.18 * perCent); + CellTi_real->AddElement(Ti, 0.05 * perCent); + CellTi_real->AddMaterial(BioMaterial, 99.64 * perCent); + + // CellTi_200times: mass fractions of mineral elements 1O times more than + // original (real) mass fractions except for Ti which is multiplied by 200 + // times + auto CellTi_200times = new G4Material("CellTi_200times", 0.75138 * g / cm3, 5); + CellTi_200times->AddElement(S, 1.05 * perCent); + CellTi_200times->AddElement(Cl, 0.22 * perCent); + CellTi_200times->AddElement(K, 1.79 * perCent); + CellTi_200times->AddElement(Ti, 10.89 * perCent); // Ti density 200 times + CellTi_200times->AddMaterial(BioMaterial, 86.05 * perCent); + + // CellTi_1000times: mass fractions of mineral elements 10 times more than + // original (real) mass fractions except for Ti which is multiplied by 1000 + // times + auto CellTi_1000times = new G4Material("CellTi_1000times", 0.75138 * g / cm3, 5); + CellTi_1000times->AddElement(S, 1.05 * perCent); + CellTi_1000times->AddElement(Cl, 0.22 * perCent); + CellTi_1000times->AddElement(K, 1.79 * perCent); + CellTi_1000times->AddElement(Ti, 54.47 * perCent); // Ti density 1000 times + CellTi_1000times->AddMaterial(BioMaterial, 42.47 * perCent); + + // + // define simple materials Cl-doped polystyrene capsules (PS) + // + // Polystyrene + auto Cl_Polystyrene = new G4Material("Cl-doped Polystyrene", 1.18425 * g / cm3, 3); + Cl_Polystyrene->AddElement(C, 97); + Cl_Polystyrene->AddElement(H, 97); + Cl_Polystyrene->AddElement(Cl, 6); + + // Ge-doped glow discharge polymer (GDP) + auto GDP = new G4Material("GDP", 1.08 * g / cm3, 3); + GDP->AddElement(C, 76430); + GDP->AddElement(H, 107002); + GDP->AddElement(Ge, 744); + + // + // define a material from elements. + // + auto H2O = new G4Material("Water", 1.000 * g / cm3, 2); + H2O->AddElement(H, 2); + H2O->AddElement(O, 1); + H2O->GetIonisation()->SetMeanExcitationEnergy(78 * eV); + + auto Air = new G4Material("Air", 1.290 * mg / cm3, 2); + Air->AddElement(N, 0.7); + Air->AddElement(O, 0.3); + + // + // example of vacuum + // + G4double density = universe_mean_density; // from PhysicalConstants.h + G4double pressure = 3.e-18 * pascal; + G4double temperature = 2.73 * kelvin; + new G4Material("Galactic", 1, 1.01 * g / mole, density, kStateGas, temperature, pressure); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DetectorConstruction::ComputeGeomParameters() +{ + if (phantom_type == 1) { + // Compute derived parameters of the box + fXstartAbs = fXposAbs - 0.5 * fAbsorberThickness; + fXendAbs = fXposAbs + 0.5 * fAbsorberThickness; + + G4double xmax = std::max(std::abs(fXstartAbs), std::abs(fXendAbs)); + fWorldSizeX = 4 * xmax; + fWorldSizeYZ = 2 * fAbsorberSizeYZ; + + if (nullptr != fPhysiWorld) { + ChangeGeometry(); + } + } + else if (phantom_type == 2) { + fWorldSizeX = 1 * mm; + fWorldSizeYZ = 1 * mm; + } + else if (phantom_type == 3) { + fWorldSizeX = 1.5 * mm; + fWorldSizeYZ = 1.5 * mm; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4VPhysicalVolume* DetectorConstruction::Construct() +{ + if (nullptr != fPhysiWorld) { + return fPhysiWorld; + } + // World + // + fSolidWorld = new G4Box("World", // its name + fWorldSizeX / 2, fWorldSizeYZ / 2, fWorldSizeYZ / 2); // its size + + fLogicWorld = new G4LogicalVolume(fSolidWorld, // its solid + fWorldMaterial, // its material + "World"); // its name + + fPhysiWorld = new G4PVPlacement(nullptr, // no rotation + G4ThreeVector(0., 0., 0.), // at (0,0,0) + fLogicWorld, // its logical volume + "World", // its name + nullptr, // its mother volume + false, // no boolean operation + 0); // copy number + if (phantom_type == 1) { + Construct_Phantom1(); + } + else if (phantom_type == 2) { + Construct_Phantom2(); + } + else if (phantom_type == 3) { + Construct_Phantom3(); + } + + // fLogicWorld->SetVisAttributes (G4VisAttributes::GetInvisible()); + + // always return the physical World + // + return fPhysiWorld; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DetectorConstruction::PrintGeomParameters() +{ + if (phantom_type == 1) { + G4cout << "\n" << fWorldMaterial << G4endl; + G4cout << "\n" << fAbsorberMaterial << G4endl; + + G4cout << "\n The WORLD is made of " << G4BestUnit(fWorldSizeX, "Length") << " of " + << fWorldMaterial->GetName(); + G4cout << ". The transverse size (YZ) of the world is " << G4BestUnit(fWorldSizeYZ, "Length") + << G4endl; + G4cout << " The ABSORBER is made of " << G4BestUnit(fAbsorberThickness, "Length") << " of " + << fAbsorberMaterial->GetName(); + G4cout << ". The transverse size (YZ) is " << G4BestUnit(fAbsorberSizeYZ, "Length") << G4endl; + G4cout << " X position of the middle of the absorber " << G4BestUnit(fXposAbs, "Length"); + G4cout << G4endl; + } + else if (phantom_type == 2) { + G4cout << "The upper part of C.elegans is made of 6 ellipsoids" << G4endl; + } + else if (phantom_type == 3) { + G4cout << "A microsphere inertial confinement fusion target is contructed, made of: " << G4endl; + G4cout << "\n" << material_GDP << G4endl; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DetectorConstruction::SetAbsorberMaterial(const G4String& materialChoice) +{ + // search the material by its name + G4Material* pttoMaterial = G4NistManager::Instance()->FindOrBuildMaterial(materialChoice); + + if (pttoMaterial && fAbsorberMaterial != pttoMaterial) { + fAbsorberMaterial = pttoMaterial; + if (fLogicAbsorber) { + fLogicAbsorber->SetMaterial(fAbsorberMaterial); + } + G4RunManager::GetRunManager()->PhysicsHasBeenModified(); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DetectorConstruction::SetWorldMaterial(const G4String& materialChoice) +{ + // search the material by its name + G4Material* pttoMaterial = G4NistManager::Instance()->FindOrBuildMaterial(materialChoice); + + if (pttoMaterial && fWorldMaterial != pttoMaterial) { + fWorldMaterial = pttoMaterial; + if (fLogicWorld) { + fLogicWorld->SetMaterial(fWorldMaterial); + } + G4RunManager::GetRunManager()->PhysicsHasBeenModified(); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DetectorConstruction::SetAbsorberThickness(G4double val) +{ + fAbsorberThickness = val; + ComputeGeomParameters(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DetectorConstruction::SetAbsorberSizeYZ(G4double val) +{ + fAbsorberSizeYZ = val; + ComputeGeomParameters(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DetectorConstruction::SetWorldSizeX(G4double val) +{ + fWorldSizeX = val; + ComputeGeomParameters(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DetectorConstruction::SetWorldSizeYZ(G4double val) +{ + fWorldSizeYZ = val; + ComputeGeomParameters(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DetectorConstruction::SetAbsorberXpos(G4double val) +{ + fXposAbs = val; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void DetectorConstruction::ConstructSDandField() +{ + if (fFieldMessenger.Get() == nullptr) { + // Create global magnetic field messenger. + // Uniform magnetic field is then created automatically if + // the field value is not zero. + G4ThreeVector fieldValue = G4ThreeVector(); + auto msg = new G4GlobalMagFieldMessenger(fieldValue); + // msg->SetVerboseLevel(1); + G4AutoDelete::Register(msg); + fFieldMessenger.Put(msg); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DetectorConstruction::ChangeGeometry() +{ + if (phantom_type == 1) { + fSolidWorld->SetXHalfLength(fWorldSizeX * 0.5); + fSolidWorld->SetYHalfLength(fWorldSizeYZ * 0.5); + fSolidWorld->SetZHalfLength(fWorldSizeYZ * 0.5); + + fSolidAbsorber->SetXHalfLength(fAbsorberThickness * 0.5); + fSolidAbsorber->SetYHalfLength(fAbsorberSizeYZ * 0.5); + fSolidAbsorber->SetZHalfLength(fAbsorberSizeYZ * 0.5); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void DetectorConstruction::SetPhantomType(G4int value) +{ + phantom_type = value; + ComputeGeomParameters(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void DetectorConstruction::Construct_Phantom1() +{ + fSolidAbsorber = + new G4Box("Absorber", fAbsorberThickness / 2, fAbsorberSizeYZ / 2, fAbsorberSizeYZ / 2); + + fLogicAbsorber = new G4LogicalVolume(fSolidAbsorber, // its solid + fAbsorberMaterial, // its material + "Absorber"); // its name + + G4RotationMatrix rm; + G4double angle = 0 * deg; + rm.rotateZ(angle); + + fPhysiAbsorber = new G4PVPlacement(G4Transform3D(rm, G4ThreeVector(fXposAbs * um, 0., 0.)), + fLogicAbsorber, // its logical volume + "Absorber", // its name + fLogicWorld, // its mother + false, // no boolean operation + 0); // copy number + + auto logVisAtt = new G4VisAttributes(G4Colour(0.670588, 0.333333, 0.862745)); + logVisAtt->SetForceSolid(true); + fLogicAbsorber->SetVisAttributes(logVisAtt); + + PrintGeomParameters(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void DetectorConstruction::Construct_Phantom2() +{ + G4NistManager* nist = G4NistManager::Instance(); + // PHANTOM 3: C. ELEGANS WORM ********************************** + // made of 6 ellipsoids + + // FIRST ELLIPSOID : external surface of the worm ("skin") + + material1 = nist->FindOrBuildMaterial("Skin_10times"); + G4ThreeVector center1 = + G4ThreeVector(fXposAbs, 0, + 0); // position of the center of the first ellipsoid is (fXposAbs,0,0) + // if we change fXposAbs, all the phantom will be translated along X axis + // as the position of the center of all other ellipsoids is defined according + // to fXposAbs + G4double halfx1 = 20.61 * um; // Semiaxis in X + G4double halfy1 = 21.42 * um; // Semiaxis in Y + G4double halfz1 = 187.82 * um; // Semiaxis in Z + G4double pzTopCut1 = 187.82 * um; // here the top of the ellipsoid is not cut away + G4double pzBottomCut1 = 0 * um; // here the bottom of the ellipsoid is cut + // away below z = 0 (original configuration) + // G4double pzBottomCut1 = 18.07*um; // test with position of the slice of + // interest for vis.mac visualisation of the slice z = 18.07 µm + + ellipse1 = new G4Ellipsoid("Ellipse1", halfx1, halfy1, halfz1, pzBottomCut1, + pzTopCut1); // cut ellipsoid (original configuration) + + logicEllipse1 = new G4LogicalVolume(ellipse1, // its solid + material1, // its material + "Ellipse1"); // its name + + physiEllipse1 = new G4PVPlacement(nullptr, // no rotation + center1, // its position + logicEllipse1, // its logical volume + "Ellipse1", // its name + fLogicWorld, // its mother + false, // no boolean operation + 0); // copy number + + // SECOND ELLIPSOID : "body" of the worm, limited by the internal surface of + // the "skin" + material2 = nist->FindOrBuildMaterial("Body_10times"); + G4ThreeVector center2 = G4ThreeVector(-0.39 * um, 0, 0); // position according to ellipsoid 1 + G4double halfx2 = 18.61 * um; // Semiaxis in X + G4double halfy2 = 19.01 * um; // Semiaxis in Y + G4double halfz2 = 186.64 * um; // Semiaxis in Z + + G4double pzTopCut2 = 186.64 * um; // here the top of the ellipsoid is not cut away + G4double pzBottomCut2 = 0 * um; // here the bottom of the ellipsoid is cut + // away below z = 0 (original configuration) + // G4double pzBottomCut2 = 18.07*um; // test with position of the slice of + // interest for vis.mac visualisation of the slice z = 18.07 µm + + // Ellipse2 = new G4Ellipsoid("Ellipse2",halfx2,halfy2,halfz2); // test with + // entire ellipsoid + ellipse2 = new G4Ellipsoid("Ellipse2", halfx2, halfy2, halfz2, pzBottomCut2, + pzTopCut2); // cut ellipsoid + + logicEllipse2 = new G4LogicalVolume(ellipse2, // its solid + material2, // its material + "Ellipse2"); // its name + + physiEllipse2 = new G4PVPlacement(nullptr, // no rotation + center2, // its position + logicEllipse2, // its logical volume + "Ellipse2", // its name + logicEllipse1, // its mother + false, // no boolean operation + 0); // copy number + + // THIRD ELLIPSOID : Nucleus of cell 1 (contained inside ellipsoid 2) + material3 = nist->FindOrBuildMaterial("Cell1_10times"); + G4ThreeVector center3 = + G4ThreeVector(2.36 * um, -7.09 * um, 18.07 * um); // position according to ellipsoid 2 + G4double halfx3 = 1.95 * um; // Semiaxis in X + G4double halfy3 = 3.23 * um; // Semiaxis in Y + G4double halfz3 = 4.32 * um; // Semiaxis in Z + + // if we want to visualize slice at z = 18.07 µm using vis.mac, + // we should cut all the ellipsoids (cut away all parts below 18.07 µm) + // Visualization test: the lower part of ellipse 3 is cut off + // G4double pzTopCut3 =4.32 *um; // Visualization test + // G4double pzBottomCut3 = 0*um; // Visualization test: cut at zero before + // moving ellipsoid 3 + // // to position defined just above => it will be cut at 18.07 µm after + // moving + + ellipse3 = new G4Ellipsoid("Ellipse3", halfx3, halfy3, halfz3); // entire ellipsoid + // ellipse3 = new + // G4Ellipsoid("Ellipse3",halfx3,halfy3,halfz3,pzBottomCut3,pzTopCut3); // + // Visualization test + + logicEllipse3 = new G4LogicalVolume(ellipse3, // its solid + material3, // its material + "Ellipse3"); // its name + + physiEllipse3 = new G4PVPlacement(nullptr, // no rotation + center3, // its position + logicEllipse3, // its logical volume + "Ellipse3", // its name + logicEllipse2, // its mother + false, // no boolean operation + 0); // copy number + + // FOURTH ELLIPSOID : Nucleus of cell 2 (contained inside ellipsoid 2) + material4 = nist->FindOrBuildMaterial("Cell2_10times"); + G4ThreeVector center4 = + G4ThreeVector(8.66 * um, -3.15 * um, 18.07 * um); // position according to ellipsoid 2 + G4double halfx4 = 2.08 * um; // Semiaxis in X + G4double halfy4 = 2.46 * um; // Semiaxis in Y + G4double halfz4 = 4.32 * um; // Semiaxis in Z + + // means the lower part of ellipse 4 was cut off + // G4double pzTopCut4 = 4.32*um; + // G4double pzBottomCut4 = 0*um;// Visualization test: cut at zero before + // moving ellipsoid 4 + // // to position defined just above => it will be cut at 18.07 µm after + // moving + + ellipse4 = new G4Ellipsoid("Ellipse4", halfx4, halfy4, halfz4); // entire ellipsoid + // Ellipse4 = new + // G4Ellipsoid("Ellipse4",halfx4,halfy4,halfz4,pzBottomCut4,pzTopCut4); // + // Visualization test + + logicEllipse4 = new G4LogicalVolume(ellipse4, // its solid + material4, // its material + "Ellipse4"); // its name + + physiEllipse4 = new G4PVPlacement(nullptr, // no rotation + center4, // its position + logicEllipse4, // its logical volume + "Ellipse4", // its name + logicEllipse2, // its mother + false, // no boolean operation + 0); // copy number + + // FIFTH ELLIPSOID: intestine of the worm + // Original (real) composition in dry mass (the worm is dehydrated by + // lyophilization) Each element content is defined by its mass fraction (must + // be normalised to 1) + material5 = nist->FindOrBuildMaterial("Intestine_10times"); + G4ThreeVector center5 = + G4ThreeVector(1.64 * um, 0.61 * um, 0 * um); // position according to ellipsoid 2 + G4RotationMatrix rm5; + G4double angle5 = -58.986 * deg; // ellipse 5 is rotated around z axis + // (rotation defined according to ellipse 2) + // G4double angle5=0*deg; + rm5.rotateZ(angle5); + + G4double halfx5 = 3.67 * um; // Semiaxis in X + G4double halfy5 = 16.48 * um; // Semiaxis in Y + G4double halfz5 = 28.68 * um; // Semiaxis in Z + + G4double pzTopCut5 = 28.68 * um; // here the top of the ellipsoid is not cut away + G4double pzBottomCut5 = 0 * um; // here the bottom of the ellipsoid is cut + // away below z = 0 // original configuration + // G4double pzBottomCut5 =18.07*um; // position of the slice of interest // + // Visualization test + + // ellipse5 = new G4Ellipsoid("Ellipse5",halfx5,halfy5,halfz5); // entire + // ellipsoid // Visualization test + ellipse5 = new G4Ellipsoid("Ellipse5", halfx5, halfy5, halfz5, pzBottomCut5, + pzTopCut5); // original configuration + + logicEllipse5 = new G4LogicalVolume(ellipse5, // its solid + material5, // its material + "Ellipse5"); // its name + + physiEllipse5 = new G4PVPlacement(G4Transform3D(rm5, center5), // rotation + logicEllipse5, // its logical volume + "Ellipse5", // its name + logicEllipse2, // its mother + false, // no boolean operation + 0); // copy number + + // SIXTH ELLIPSOID: Nucleus of cell Ti (contained inside ellipsoid 5) + // Original (real) composition in dry mass (the worm is dehydrated by + // lyophilization) Each element content is defined by its mass fraction (must + // be normalised to 1) + + material6 = nist->FindOrBuildMaterial("CellTi_1000times"); + G4ThreeVector center6 = + G4ThreeVector(0.005 * um, 5.83 * um, 18.07 * um); // position according to ellipsoid 5 + G4double halfx6 = 1.62 * um; // Semiaxis in X + G4double halfy6 = 1.95 * um; // Semiaxis in Y + G4double halfz6 = 1.62 * um; // Semiaxis in Z + + // means the lower part of ellipse 6 was cut off + // G4double pzTopCut6 = 1.62*um; + // G4double pzBottomCut6 = 0*um; // Visualization test: cut at zero before + // moving ellipsoid 6 + // // to position defined just above => it will be cut at 18.07 µm after + // moving. As ellipsoid 6 is contained in ellipsoid 5, it has been rotated at + // the same time as ellipsoid 5. We want to counterbalance this rotation and + // put ellipsoid 6 in the right direction (not rotated at all). So we must + // rotate ellipsoid 6 of the opposite angle as ellipsoid 5 + G4RotationMatrix rm6; + G4double angle6 = 58.986 * deg; // ellipsoid 6 is rotated around z axis + // (rotation defined according to ellipse 5) + // G4double angle6= 0*deg; + rm6.rotateZ(angle6); + ellipse6 = new G4Ellipsoid("Ellipse6", halfx6, halfy6, halfz6); // entire ellipsoid + // ellipse6 = new + // G4Ellipsoid("Ellipse6",halfx6,halfy6,halfz6,pzBottomCut6,pzTopCut6); // + // Visualization test + logicEllipse6 = new G4LogicalVolume(ellipse6, // its solid + material6, // its material + "Ellipse6"); // its name + + physiEllipse6 = + new G4PVPlacement(G4Transform3D(rm6, center6), // So now ellipsoid 6 is vertical again + // (appears not rotated at all) + logicEllipse6, // its logical volume + "Ellipse6", // its name + logicEllipse5, // its mother + false, // no boolean operation + 0); // copy number + + /* logicEllipse1->SetUserLimits(new G4UserLimits(0.5*um,DBL_MAX,DBL_MAX,0)); + + logicEllipse2->SetUserLimits(new G4UserLimits(0.5*um,DBL_MAX,DBL_MAX,0)); */ + + // As the material composing the C. elegans worm is very transparent to + // photons, the default steps in Geant4 (distance between pre-step and + // post-step point) are too long. To perform a more precise simulation, + // maximal values are defined for step length in each volume, according to its + // size and configuration. + + logicEllipse1->SetUserLimits(new G4UserLimits(0.2 * um)); + logicEllipse2->SetUserLimits(new G4UserLimits(0.3 * um)); + logicEllipse3->SetUserLimits(new G4UserLimits(0.4 * um)); + logicEllipse4->SetUserLimits(new G4UserLimits(0.4 * um)); + logicEllipse5->SetUserLimits(new G4UserLimits(0.7 * um)); + logicEllipse6->SetUserLimits(new G4UserLimits(0.3 * um)); + // fLogicWorld->SetUserLimits(new G4UserLimits(1*um)); // world does not have + // to be simulated as precisely + + // fLogicWorld ->SetVisAttributes(new + // G4VisAttributes(G4Colour(1.0,1.0,1.0))); + logicEllipse1->SetVisAttributes(new G4VisAttributes(G4Colour(1.0, 0.8, 1.0, 0.5))); + logicEllipse2->SetVisAttributes(new G4VisAttributes(G4Colour(1.0, 0.5, 1.0, 0.5))); + // logicEllipse3 ->SetVisAttributes(new + // G4VisAttributes(G4Colour(0.0,1.0,1.0))); logicEllipse4 + // ->SetVisAttributes(new G4VisAttributes(G4Colour(0.5,0.3,0.5))); + logicEllipse5->SetVisAttributes(new G4VisAttributes(G4Colour(0.5, 0.5, 1.0, 0.5))); + // logicEllipse6 ->SetVisAttributes(new + // G4VisAttributes(G4Colour(0.5,0.8,0.2))); + + auto logVisAtt3 = new G4VisAttributes(G4Colour(0.0, 1.0, 1.0)); + logVisAtt3->SetForceSolid(true); + logicEllipse3->SetVisAttributes(logVisAtt3); + + auto logVisAtt4 = new G4VisAttributes(G4Colour(0.5, 0.3, 0.5)); + logVisAtt4->SetForceSolid(true); + logicEllipse4->SetVisAttributes(logVisAtt4); + + auto logVisAtt6 = new G4VisAttributes(G4Colour(0.5, 0.8, 0.2)); + logVisAtt6->SetForceSolid(true); + logicEllipse6->SetVisAttributes(logVisAtt6); + + PrintGeomParameters(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void DetectorConstruction::Construct_Phantom3() +{ + G4NistManager* nist = G4NistManager::Instance(); + material_GDP = nist->FindOrBuildMaterial("GDP"); + + G4double pRmin = 171 * um; // thickness = 25 um + G4double pRmax = 196 * um; + + // G4double pRmin = 146.8*um; // thickness = 10 um + // G4double pRmax = 156.8*um; + + // G4double pRmin = 293.6*um; // thickness = 20 um + // G4double pRmax = 313.6*um; + + solid_GDP = new G4Sphere("GDP", // name + pRmin, pRmax, 0., 2 * pi, 0., pi); + + logic_GDP = new G4LogicalVolume(solid_GDP, // its solid + material_GDP, // its material + "GDP"); // its name + + physi_GDP = new G4PVPlacement(nullptr, // no rotation + G4ThreeVector(fXposAbs, 0., 0.), // its position + logic_GDP, // its logical volume + "GDP", // its name + fLogicWorld, // its mother + false, // no boolean operation + 0); // copy number + + logic_GDP->SetUserLimits(new G4UserLimits(1 * um)); + + auto logVisAtt = new G4VisAttributes(G4Colour(0.670588, 0.333333, 0.862745, 0.5)); + // new G4VisAttributes(G4Colour(0.670588, 0.333333, 0.862745)); + logVisAtt->SetForceSolid(true); + // logVisAtt->SetVisibility(true); + + logic_GDP->SetVisAttributes(logVisAtt); + + PrintGeomParameters(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/stim_pixe_tomography/src/DetectorMessenger.cc b/examples/advanced/stim_pixe_tomography/src/DetectorMessenger.cc new file mode 100644 index 00000000000..b82bba66e26 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/src/DetectorMessenger.cc @@ -0,0 +1,173 @@ +// +// ******************************************************************** +// * 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 "DetectorMessenger.hh" + +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcmdWithAString.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIdirectory.hh" + +#include "DetectorConstruction.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +DetectorMessenger::DetectorMessenger(DetectorConstruction* Det) + : G4UImessenger(), + fDetector(Det), + fTomoDir(nullptr), + fDetDir(nullptr), + fAbsMaterCmd(nullptr), + fAbsThickCmd(nullptr), + fAbsSizYZCmd(nullptr), + fAbsXposCmd(nullptr), + fWorldMaterCmd(nullptr), + fWorldXCmd(nullptr), + fWorldYZCmd(nullptr), + fPhantomType(nullptr) +{ + fTomoDir = new G4UIdirectory("/tomography/"); + fTomoDir->SetGuidance("UI commands specific to this example."); + + fDetDir = new G4UIdirectory("/tomography/det/"); + fDetDir->SetGuidance("detector construction commands"); + + fAbsMaterCmd = new G4UIcmdWithAString("/tomography/det/setAbsMat", this); + fAbsMaterCmd->SetGuidance("Select Material of the Absorber."); + fAbsMaterCmd->SetParameterName("choice", false); + fAbsMaterCmd->AvailableForStates(G4State_PreInit, G4State_Idle); + fAbsMaterCmd->SetToBeBroadcasted(false); + + fWorldMaterCmd = new G4UIcmdWithAString("/tomography/det/setWorldMat", this); + fWorldMaterCmd->SetGuidance("Select Material of the World."); + fWorldMaterCmd->SetParameterName("wchoice", false); + fWorldMaterCmd->AvailableForStates(G4State_PreInit, G4State_Idle); + fWorldMaterCmd->SetToBeBroadcasted(false); + + fAbsThickCmd = new G4UIcmdWithADoubleAndUnit("/tomography/det/setAbsThick", this); + fAbsThickCmd->SetGuidance("Set Thickness of the Absorber"); + fAbsThickCmd->SetParameterName("SizeZ", false); + fAbsThickCmd->SetRange("SizeZ>0."); + fAbsThickCmd->SetUnitCategory("Length"); + fAbsThickCmd->AvailableForStates(G4State_PreInit, G4State_Idle); + fAbsThickCmd->SetToBeBroadcasted(false); + + fAbsSizYZCmd = new G4UIcmdWithADoubleAndUnit("/tomography/det/setAbsYZ", this); + fAbsSizYZCmd->SetGuidance("Set sizeYZ of the Absorber"); + fAbsSizYZCmd->SetParameterName("SizeYZ", false); + fAbsSizYZCmd->SetRange("SizeYZ>0."); + fAbsSizYZCmd->SetUnitCategory("Length"); + fAbsSizYZCmd->AvailableForStates(G4State_PreInit, G4State_Idle); + fAbsSizYZCmd->SetToBeBroadcasted(false); + + fAbsXposCmd = new G4UIcmdWithADoubleAndUnit("/tomography/det/setAbsXpos", this); + fAbsXposCmd->SetGuidance("Set X pos. of the Absorber"); + fAbsXposCmd->SetParameterName("Xpos", false); + fAbsXposCmd->SetUnitCategory("Length"); + fAbsXposCmd->AvailableForStates(G4State_PreInit); + fAbsXposCmd->SetToBeBroadcasted(false); + + fWorldXCmd = new G4UIcmdWithADoubleAndUnit("/tomography/det/setWorldX", this); + fWorldXCmd->SetGuidance("Set X size of the World"); + fWorldXCmd->SetParameterName("WSizeX", false); + fWorldXCmd->SetRange("WSizeX>0."); + fWorldXCmd->SetUnitCategory("Length"); + fWorldXCmd->AvailableForStates(G4State_PreInit, G4State_Idle); + fWorldXCmd->SetToBeBroadcasted(false); + + fWorldYZCmd = new G4UIcmdWithADoubleAndUnit("/tomography/det/setWorldYZ", this); + fWorldYZCmd->SetGuidance("Set sizeYZ of the World"); + fWorldYZCmd->SetParameterName("WSizeYZ", false); + fWorldYZCmd->SetRange("WSizeYZ>0."); + fWorldYZCmd->SetUnitCategory("Length"); + fWorldYZCmd->AvailableForStates(G4State_PreInit, G4State_Idle); + fWorldYZCmd->SetToBeBroadcasted(false); + + fPhantomType = new G4UIcmdWithAnInteger("/tomography/det/setPhantomType", this); + fPhantomType->SetGuidance("Select the type of target object."); + fPhantomType->SetParameterName("choice", false); + fPhantomType->AvailableForStates(G4State_PreInit, G4State_Idle); + fPhantomType->SetToBeBroadcasted(false); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +DetectorMessenger::~DetectorMessenger() +{ + delete fAbsMaterCmd; + delete fAbsThickCmd; + delete fAbsSizYZCmd; + delete fAbsXposCmd; + delete fWorldMaterCmd; + delete fWorldXCmd; + delete fWorldYZCmd; + delete fDetDir; + delete fTomoDir; + delete fPhantomType; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DetectorMessenger::SetNewValue(G4UIcommand* command, G4String newValue) +{ + if (command == fAbsMaterCmd) { + fDetector->SetAbsorberMaterial(newValue); + } + + if (command == fWorldMaterCmd) { + fDetector->SetWorldMaterial(newValue); + } + + if (command == fAbsThickCmd) { + fDetector->SetAbsorberThickness(fAbsThickCmd->GetNewDoubleValue(newValue)); + } + + if (command == fAbsSizYZCmd) { + fDetector->SetAbsorberSizeYZ(fAbsSizYZCmd->GetNewDoubleValue(newValue)); + } + + if (command == fAbsXposCmd) { + fDetector->SetAbsorberXpos(fAbsXposCmd->GetNewDoubleValue(newValue)); + } + + if (command == fWorldXCmd) { + fDetector->SetWorldSizeX(fWorldXCmd->GetNewDoubleValue(newValue)); + } + + if (command == fWorldYZCmd) { + fDetector->SetWorldSizeYZ(fWorldYZCmd->GetNewDoubleValue(newValue)); + } + + if (command == fPhantomType) { + fDetector->SetPhantomType(fPhantomType->GetNewIntValue(newValue)); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/stim_pixe_tomography/src/PhysListEmStandard.cc b/examples/advanced/stim_pixe_tomography/src/PhysListEmStandard.cc new file mode 100644 index 00000000000..d906af55b69 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/src/PhysListEmStandard.cc @@ -0,0 +1,173 @@ +// +// ******************************************************************** +// * 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 "PhysListEmStandard.hh" + +#include "G4BraggIonModel.hh" +#include "G4BuilderType.hh" +#include "G4ComptonScattering.hh" +#include "G4GammaConversion.hh" +#include "G4IonParametrisedLossModel.hh" +#include "G4KleinNishinaModel.hh" +#include "G4LivermorePhotoElectricModel.hh" +#include "G4LossTableManager.hh" +#include "G4MuBremsstrahlung.hh" +#include "G4MuIonisation.hh" +#include "G4MuMultipleScattering.hh" +#include "G4MuPairProduction.hh" +#include "G4NuclearStopping.hh" +#include "G4ParticleDefinition.hh" +#include "G4PhotoElectricEffect.hh" +#include "G4PhysicsListHelper.hh" +#include "G4ProcessManager.hh" +#include "G4RayleighScattering.hh" +#include "G4SystemOfUnits.hh" +#include "G4UAtomicDeexcitation.hh" +#include "G4eBremsstrahlung.hh" +#include "G4eIonisation.hh" +#include "G4eMultipleScattering.hh" +#include "G4eplusAnnihilation.hh" +#include "G4hBremsstrahlung.hh" +#include "G4hIonisation.hh" +#include "G4hMultipleScattering.hh" +#include "G4hPairProduction.hh" +#include "G4ionIonisation.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PhysListEmStandard::PhysListEmStandard(const G4String& name) : G4VPhysicsConstructor(name) +{ + G4EmParameters* param = G4EmParameters::Instance(); + param->SetDefaults(); + param->SetVerbose(1); + param->SetMinEnergy(10 * eV); + param->SetMaxEnergy(10 * TeV); + param->SetLowestElectronEnergy(100 * eV); + param->SetNumberOfBinsPerDecade(20); + param->ActivateAngularGeneratorForIonisation(true); + param->SetUseMottCorrection(true); + param->SetStepFunction(0.2, 100 * CLHEP::um); + param->SetStepFunctionMuHad(0.2, 50 * CLHEP::um); + param->SetStepFunctionLightIons(0.1, 20 * CLHEP::um); + param->SetStepFunctionIons(0.1, 1 * CLHEP::um); + param->SetMscRangeFactor(0.03); + param->SetLateralDisplacementAlg96(true); + param->SetMscStepLimitType(fUseDistanceToBoundary); + param->SetMuHadLateralDisplacement(true); + param->SetFluctuationType(fUrbanFluctuation); + param->SetFluo(true); + SetPhysicsType(bElectromagnetic); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PhysListEmStandard::~PhysListEmStandard() = default; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PhysListEmStandard::ConstructProcess() +{ + G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); + + // Add standard EM Processes + // + auto particleIterator = GetParticleIterator(); + particleIterator->reset(); + while ((*particleIterator)()) { + G4ParticleDefinition* particle = particleIterator->value(); + G4String particleName = particle->GetParticleName(); + + if (particleName == "gamma") { + ph->RegisterProcess(new G4PhotoElectricEffect, particle); + auto cs = new G4ComptonScattering; + cs->SetEmModel(new G4KleinNishinaModel()); + ph->RegisterProcess(cs, particle); + ph->RegisterProcess(new G4GammaConversion, particle); + ph->RegisterProcess(new G4RayleighScattering, particle); + } + else if (particleName == "e-") { + ph->RegisterProcess(new G4eMultipleScattering(), particle); + // + auto eIoni = new G4eIonisation(); + ph->RegisterProcess(eIoni, particle); + // + ph->RegisterProcess(new G4eBremsstrahlung(), particle); + } + else if (particleName == "e+") { + ph->RegisterProcess(new G4eMultipleScattering(), particle); + // + auto eIoni = new G4eIonisation(); + ph->RegisterProcess(eIoni, particle); + // + ph->RegisterProcess(new G4eBremsstrahlung(), particle); + // + ph->RegisterProcess(new G4eplusAnnihilation(), particle); + } + else if (particleName == "mu+" || particleName == "mu-") { + ph->RegisterProcess(new G4MuMultipleScattering(), particle); + auto muIoni = new G4MuIonisation(); + ph->RegisterProcess(muIoni, particle); + ph->RegisterProcess(new G4MuBremsstrahlung(), particle); + ph->RegisterProcess(new G4MuPairProduction(), particle); + } + else if (particleName == "proton" || particleName == "pi-" || particleName == "pi+") { + ph->RegisterProcess(new G4hMultipleScattering(), particle); + auto hIoni = new G4hIonisation(); + ph->RegisterProcess(hIoni, particle); + ph->RegisterProcess(new G4hBremsstrahlung(), particle); + ph->RegisterProcess(new G4hPairProduction(), particle); + } + else if (particleName == "alpha" || particleName == "He3") { + ph->RegisterProcess(new G4hMultipleScattering(), particle); + auto ionIoni = new G4ionIonisation(); + ph->RegisterProcess(ionIoni, particle); + ph->RegisterProcess(new G4NuclearStopping(), particle); + } + else if (particleName == "GenericIon") { + ph->RegisterProcess(new G4hMultipleScattering(), particle); + auto ionIoni = new G4ionIonisation(); + ionIoni->SetEmModel(new G4IonParametrisedLossModel()); + ph->RegisterProcess(ionIoni, particle); + ph->RegisterProcess(new G4NuclearStopping(), particle); + } + else if ((!particle->IsShortLived()) && (particle->GetPDGCharge() != 0.0) + && (particle->GetParticleName() != "chargedgeantino")) + { + // all others charged particles except geantino + ph->RegisterProcess(new G4hMultipleScattering(), particle); + ph->RegisterProcess(new G4hIonisation(), particle); + } + } + + // Deexcitation + // + G4VAtomDeexcitation* de = new G4UAtomicDeexcitation(); + G4LossTableManager::Instance()->SetAtomDeexcitation(de); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/stim_pixe_tomography/src/PhysicsList.cc b/examples/advanced/stim_pixe_tomography/src/PhysicsList.cc new file mode 100644 index 00000000000..3c2fdcb0289 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/src/PhysicsList.cc @@ -0,0 +1,243 @@ +// +// ******************************************************************** +// * 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 "PhysicsList.hh" + +#include "G4DecayPhysics.hh" +#include "G4EmLivermorePhysics.hh" +#include "G4EmLowEPPhysics.hh" +#include "G4EmPenelopePhysics.hh" +#include "G4EmStandardPhysics.hh" +#include "G4EmStandardPhysicsGS.hh" +#include "G4EmStandardPhysicsSS.hh" +#include "G4EmStandardPhysicsWVI.hh" +#include "G4EmStandardPhysics_option1.hh" +#include "G4EmStandardPhysics_option2.hh" +#include "G4EmStandardPhysics_option3.hh" +#include "G4EmStandardPhysics_option4.hh" +#include "G4HadronDElasticPhysics.hh" +#include "G4HadronElasticPhysics.hh" +#include "G4HadronHElasticPhysics.hh" +#include "G4HadronInelasticQBBC.hh" +#include "G4IonPhysics.hh" +#include "G4ParticleDefinition.hh" +#include "G4ProcessManager.hh" +#include "G4StepLimiter.hh" +#include "G4SystemOfUnits.hh" + +#include "PhysListEmStandard.hh" +#include "PhysicsListMessenger.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PhysicsList::PhysicsList() : G4VModularPhysicsList() +{ + fHelIsRegisted = false; + fBicIsRegisted = false; + fBiciIsRegisted = false; + + fMessenger = new PhysicsListMessenger(this); + SetVerboseLevel(1); + + // EM physics + fEmName = G4String("emlivermore"); + fEmPhysics = new G4EmLivermorePhysics(); + // fEmPhysicsList = new PhysListEmStandard(); + // fEmName = G4String("local"); + + // Decay physics + fDecayPhysics = new G4DecayPhysics(1); + + // SetDefaultCutValue(1*mm); + SetDefaultCutValue(0.01 * um); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PhysicsList::~PhysicsList() +{ + delete fMessenger; + delete fEmPhysics; + delete fDecayPhysics; + for (size_t i = 0; i < fHadronPhysics.size(); i++) { + delete fHadronPhysics[i]; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PhysicsList::ConstructParticle() +{ + fDecayPhysics->ConstructParticle(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PhysicsList::ConstructProcess() +{ + // transportation + // + AddTransportation(); + + // electromagnetic physics + // + fEmPhysics->ConstructProcess(); + + // decay physics + // + fDecayPhysics->ConstructProcess(); + + // hadronic physics + for (size_t i = 0; i < fHadronPhysics.size(); i++) { + fHadronPhysics[i]->ConstructProcess(); + } + + // step limitation (as a full process) + // + AddStepMax(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PhysicsList::AddStepMax() +{ + auto fStepMaxProcess = new G4StepLimiter(); + + auto particleIterator = GetParticleIterator(); + + particleIterator->reset(); + + while ((*particleIterator)()) { + G4ParticleDefinition* particle = particleIterator->value(); + G4ProcessManager* pmanager = particle->GetProcessManager(); + + if (fStepMaxProcess->IsApplicable(*particle)) { + pmanager->AddDiscreteProcess(fStepMaxProcess); + } + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PhysicsList::AddPhysicsList(const G4String& name) +{ + if (verboseLevel > -1) { + G4cout << "PhysicsList::AddPhysicsList: <" << name << ">" << G4endl; + } + + if (name == fEmName) return; + + if (name == "local") { + fEmName = name; + delete fEmPhysics; + fEmPhysics = new PhysListEmStandard(name); + } + else if (name == "emstandard_opt0") { + fEmName = name; + delete fEmPhysics; + fEmPhysics = new G4EmStandardPhysics(); + } + else if (name == "emstandard_opt1") { + fEmName = name; + delete fEmPhysics; + fEmPhysics = new G4EmStandardPhysics_option1(); + } + else if (name == "emstandard_opt2") { + fEmName = name; + delete fEmPhysics; + fEmPhysics = new G4EmStandardPhysics_option2(); + } + else if (name == "emstandard_opt3") { + fEmName = name; + delete fEmPhysics; + fEmPhysics = new G4EmStandardPhysics_option3(); + } + else if (name == "emstandard_opt4") { + fEmName = name; + delete fEmPhysics; + fEmPhysics = new G4EmStandardPhysics_option4(); + } + else if (name == "emstandardSS") { + fEmName = name; + delete fEmPhysics; + fEmPhysics = new G4EmStandardPhysicsSS(); + } + else if (name == "emstandardWVI") { + fEmName = name; + delete fEmPhysics; + fEmPhysics = new G4EmStandardPhysicsWVI(); + } + else if (name == "emstandardGS") { + fEmName = name; + delete fEmPhysics; + fEmPhysics = new G4EmStandardPhysicsGS(verboseLevel); + } + else if (name == "empenelope") { + fEmName = name; + delete fEmPhysics; + fEmPhysics = new G4EmPenelopePhysics(); + } + else if (name == "emlowenergy") { + fEmName = name; + delete fEmPhysics; + fEmPhysics = new G4EmLowEPPhysics(); + } + else if (name == "emlivermore") { + fEmName = name; + delete fEmPhysics; + fEmPhysics = new G4EmLivermorePhysics(); + } + else if (name == "elastic" && !fHelIsRegisted) { + fHadronPhysics.push_back(new G4HadronElasticPhysics(verboseLevel)); + fHelIsRegisted = true; + } + else if (name == "DElastic" && !fHelIsRegisted) { + fHadronPhysics.push_back(new G4HadronDElasticPhysics(verboseLevel)); + fHelIsRegisted = true; + } + else if (name == "HElastic" && !fHelIsRegisted) { + fHadronPhysics.push_back(new G4HadronHElasticPhysics(verboseLevel)); + fHelIsRegisted = true; + } + else if (name == "binary" && !fBicIsRegisted) { + fHadronPhysics.push_back(new G4HadronInelasticQBBC(verboseLevel)); + fBicIsRegisted = true; + } + else if (name == "binary_ion" && !fBiciIsRegisted) { + fHadronPhysics.push_back(new G4IonPhysics(verboseLevel)); + fBiciIsRegisted = true; + } + else { + G4cout << "PhysicsList::AddPhysicsList: <" << name << ">" + << " is not defined" << G4endl; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/stim_pixe_tomography/src/PhysicsListMessenger.cc b/examples/advanced/stim_pixe_tomography/src/PhysicsListMessenger.cc new file mode 100644 index 00000000000..1a7cf921f99 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/src/PhysicsListMessenger.cc @@ -0,0 +1,70 @@ +// +// ******************************************************************** +// * 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 "PhysicsListMessenger.hh" + +#include "PhysicsList.hh" +#include "G4UIcmdWithAString.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PhysicsListMessenger::PhysicsListMessenger(PhysicsList* pPhys) + : G4UImessenger() + , fPhysicsList(pPhys) +{ + fPhysDir = new G4UIdirectory("/tomography/phys/"); + fPhysDir->SetGuidance("physics list commands"); + + fListCmd = new G4UIcmdWithAString("/tomography/phys/addPhysics", this); + fListCmd->SetGuidance("Add modular physics list."); + fListCmd->SetParameterName("PList", false); + fListCmd->AvailableForStates(G4State_PreInit); + fListCmd->SetToBeBroadcasted(false); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PhysicsListMessenger::~PhysicsListMessenger() +{ + delete fListCmd; + delete fPhysDir; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PhysicsListMessenger::SetNewValue(G4UIcommand* command, G4String newValue) +{ + if(command == fListCmd) + { + fPhysicsList->AddPhysicsList(newValue); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/materials/src/G4AtomicBond.cc b/examples/advanced/stim_pixe_tomography/src/PrimaryGeneratorAction.cc similarity index 80% rename from source/materials/src/G4AtomicBond.cc rename to examples/advanced/stim_pixe_tomography/src/PrimaryGeneratorAction.cc index 23791ee9742..24e1ab595c5 100644 --- a/source/materials/src/G4AtomicBond.cc +++ b/examples/advanced/stim_pixe_tomography/src/PrimaryGeneratorAction.cc @@ -24,32 +24,33 @@ // ******************************************************************** // // - +// //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include "PrimaryGeneratorAction.hh" -// 21-04-16, created by E.Bagli +#include "G4Event.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -#include "G4AtomicBond.hh" +PrimaryGeneratorAction::PrimaryGeneratorAction() : G4VUserPrimaryGeneratorAction() +{ + fParticleGun = new G4GeneralParticleSource(); +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4AtomicBond::G4AtomicBond(theBondType aType, G4Element* firstAtomKind, - G4int firstAtomNumber, G4Element* secondAtomKind, - G4int secondAtomNumber) - : theFirstAtomKind(firstAtomKind) - , theFirstAtomNumber(firstAtomNumber) - , theSecondAtomKind(secondAtomKind) - , theSecondAtomNumber(secondAtomNumber) - , theType(aType) - , theAromaticity(false) +PrimaryGeneratorAction::~PrimaryGeneratorAction() { - ; + delete fParticleGun; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4AtomicBond::~G4AtomicBond(){;} +void PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) +{ + fParticleGun->GeneratePrimaryVertex(anEvent); +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/stim_pixe_tomography/src/Run.cc b/examples/advanced/stim_pixe_tomography/src/Run.cc new file mode 100644 index 00000000000..02353aa6a35 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/src/Run.cc @@ -0,0 +1,177 @@ +// +// ******************************************************************** +// * 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 "Run.hh" + +#include "PrimaryGeneratorAction.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +Run::Run(G4bool isP, G4int nbProjs, G4int nbS, G4int nbP, G4int resumeProjIndex) + : G4Run(), + isPIXE(isP), + fProjectionIndex(0), + fSliceIndex(0), + fPixelIndex(0), + fNbProjections(nbProjs), + fNbSlices(nbS), + fNbPixels(nbP), + fResumeProjIndex(resumeProjIndex) +{} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +Run::~Run() = default; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void Run::Merge(const G4Run* run) +{ + G4cout << "--------------Merge is called---------------" << G4endl; + const Run* localRun = static_cast(run); + + for (size_t i = 0; i != localRun->gammaAtExit.size(); i++) { + gammaAtExit.push_back(localRun->gammaAtExit[i]); + } + for (size_t i = 0; i != localRun->gammaAtCreation.size(); i++) { + gammaAtCreation.push_back(localRun->gammaAtCreation[i]); + } + + for (size_t i = 0; i != localRun->protonAtExit.size(); i++) { + protonAtExit.push_back(localRun->protonAtExit[i]); + } + + G4Run::Merge(run); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void Run::EndOfRun() +{ + // Write X-ray data or proton data into files + // G4int runID = GetRunID(); + fProjectionIndex = GetCurrentProjection(); + fSliceIndex = GetCurrentSlice(); + fPixelIndex = GetCurrentPixel(); + + RunInfo runInfo((uint8_t)fProjectionIndex, (uint16_t)fSliceIndex, (uint16_t)fPixelIndex); + + if (isPIXE) { + runInfo.nbParticle = (uint32_t)gammaAtCreation.size(); + WriteFile("GammaAtCreation.dat", runInfo, gammaAtCreation); + + runInfo.nbParticle = (uint32_t)gammaAtExit.size(); + WriteFile("GammaAtExit.dat", runInfo, gammaAtExit); + } + else { + runInfo.nbParticle = (uint32_t)protonAtExit.size(); + WriteFile("ProtonAtExit.dat", runInfo, protonAtExit); + } + + ClearVecs(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4bool Run::GetIsPIXE() +{ + return isPIXE; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void Run::FillGammaAtExit(ParticleInfo gammaInfo) +{ + gammaAtExit.push_back(gammaInfo); +} + +void Run::FillGammaAtCreation(ParticleInfo gammaInfo) +{ + gammaAtCreation.push_back(gammaInfo); +} + +void Run::FillProtonAtExit(ParticleInfo protonInfo) +{ + protonAtExit.push_back(protonInfo); +} + +void Run::ClearVecs() +{ + if (gammaAtExit.size()) { + gammaAtExit.clear(); + } + if (gammaAtCreation.size()) { + gammaAtCreation.clear(); + } + if (protonAtExit.size()) { + protonAtExit.clear(); + } +} + +void Run::WriteFile(const std::string fName, RunInfo& runInfo, std::vector& vec) +{ + std::ofstream ofs; + if (runID) { + ofs.open(fName.c_str(), + std::ios::out | std::ios::app | std::ios::binary); // appendix + } + else { + // if runId ==0, delete the existing file and create a new file + ofs.open(fName.c_str(), std::ios::out | std::ios::trunc | std::ios::binary); + } + ofs.write((const char*)&runInfo, sizeof(RunInfo)); + if (vec.size()) { + ofs.write((const char*)vec.data(), sizeof(ParticleInfo) * vec.size()); + } + + ofs.close(); +} +G4int Run::GetCurrentProjection() +{ + if (fResumeProjIndex > fNbProjections - 1) { + G4Exception("fResumeProjIndex", "Run::GetCurrentProjection()", FatalException, + "To resume a simulation, the start of index of projection must be lower than the " + "maximal index"); + } + G4int projIndex = fResumeProjIndex + runID / (fNbSlices * fNbPixels); + return projIndex; +} +G4int Run::GetCurrentSlice() +{ + G4int remain = runID % (fNbSlices * fNbPixels); + return remain / fNbPixels; +} + +G4int Run::GetCurrentPixel() +{ + G4int remain = runID % (fNbSlices * fNbPixels); + return remain % fNbPixels; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/stim_pixe_tomography/src/RunAction.cc b/examples/advanced/stim_pixe_tomography/src/RunAction.cc new file mode 100644 index 00000000000..225e49d7a63 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/src/RunAction.cc @@ -0,0 +1,112 @@ +// +// ******************************************************************** +// * 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 "RunAction.hh" + +#include "G4EmCalculator.hh" +#include "G4Run.hh" + +#include "Run.hh" +#include "RunActionMessenger.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +RunAction::RunAction(G4bool isP) + : G4UserRunAction(), + fRun(nullptr), + isPIXE(isP), + fNbProjections(1), + fNbSlices(1), + fNbPixels(1), + fInterFlag(false), + fInterruptedProjectionIndex(0) + +{ + fRunMessenger = new RunActionMessenger(this); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +RunAction::~RunAction() +{ + delete fRunMessenger; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4Run* RunAction::GenerateRun() +{ + fRun = new Run(isPIXE, fNbProjections, fNbSlices, fNbPixels, fInterruptedProjectionIndex); + return fRun; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void RunAction::BeginOfRunAction(const G4Run*) +{ + if (IsMaster()) { + if (fInterFlag) { + G4cout << "####Resume simulation####" << G4endl; + } + + G4cout << "Scan information: " << G4endl << "Projection_index " << fRun->GetCurrentProjection() + << "; Slice_index " << fRun->GetCurrentSlice() << "; Pixel_index " + << fRun->GetCurrentPixel() << G4endl; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void RunAction::EndOfRunAction(const G4Run*) +{ + if (isMaster) fRun->EndOfRun(); +} +void RunAction::SetScanParameters(G4int nbProjections, G4int nbSlices, G4int nbPixels) +{ + fNbProjections = nbProjections; + fNbSlices = nbSlices; + fNbPixels = nbPixels; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void RunAction::SetInterruptionFlag(G4bool inter) +{ + fInterFlag = inter; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void RunAction::SetResumeProjectionIndex(G4int proj) +{ + if (fInterFlag) fInterruptedProjectionIndex = proj; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/stim_pixe_tomography/src/RunActionMessenger.cc b/examples/advanced/stim_pixe_tomography/src/RunActionMessenger.cc new file mode 100644 index 00000000000..c69e7ed15dd --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/src/RunActionMessenger.cc @@ -0,0 +1,111 @@ +// +// ******************************************************************** +// * 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 "RunActionMessenger.hh" + +#include "G4Tokenizer.hh" +#include "G4UIcmdWithABool.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIdirectory.hh" + +#include "RunAction.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +RunActionMessenger::RunActionMessenger(RunAction* runAction) + : G4UImessenger(), fRunAction(runAction), fRunDir(nullptr), fScanParamsCmd(nullptr) +{ + fRunDir = new G4UIdirectory("/tomography/run/"); + fRunDir->SetGuidance("run control"); + + fScanParamsCmd = new G4UIcommand("/tomography/run/scanParameters", this); + fScanParamsCmd->SetGuidance("Set scan parameters: number of projections, slices and pixels"); + + auto nbProjections = new G4UIparameter("NbProjections", 'i', false); + nbProjections->SetGuidance("number of scan projections"); + nbProjections->SetParameterRange("NbProjections>=1"); + fScanParamsCmd->SetParameter(nbProjections); + // + auto nbSlices = new G4UIparameter("NbSlices", 'i', false); + nbSlices->SetGuidance("number of scan slices"); + nbSlices->SetParameterRange("NbSlices>=1"); + fScanParamsCmd->SetParameter(nbSlices); + // + auto nbPixels = new G4UIparameter("NbPixels", 'i', false); + nbPixels->SetGuidance("number of scan pixels"); + nbPixels->SetParameterRange("NbPixels>=1"); + fScanParamsCmd->SetParameter(nbPixels); + fScanParamsCmd->AvailableForStates(G4State_PreInit, G4State_Idle); + + resumeCmd = new G4UIcmdWithABool("/tomography/run/resumeSimulation", this); + resumeCmd->SetGuidance("Resume the simulation after an interruption"); + resumeCmd->SetParameterName("interruptionFlag", true); + resumeCmd->SetDefaultValue(false); + resumeCmd->AvailableForStates(G4State_PreInit, G4State_Idle); + + resumeProjectionIndexCmd = + new G4UIcmdWithAnInteger("/tomography/run/resumeProjectionIndex", this); + resumeProjectionIndexCmd->SetGuidance("Set the index of projection to resume the simulation"); + resumeProjectionIndexCmd->SetParameterName("ProjectionIndex", true); + resumeProjectionIndexCmd->SetDefaultValue(0); + resumeProjectionIndexCmd->SetRange("ProjectionIndex >=0"); + resumeProjectionIndexCmd->AvailableForStates(G4State_PreInit, G4State_Idle); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +RunActionMessenger::~RunActionMessenger() +{ + delete fRunDir; + delete fScanParamsCmd; + delete resumeCmd; + delete resumeProjectionIndexCmd; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void RunActionMessenger::SetNewValue(G4UIcommand* command, G4String newValue) +{ + if (command == fScanParamsCmd) { + G4Tokenizer next(newValue); + G4int nbProjections = StoI(next()); + G4int nbSlices = StoI(next()); + G4int nbPixels = StoI(next()); + fRunAction->SetScanParameters(nbProjections, nbSlices, nbPixels); + } + else if (command == resumeCmd) { + fRunAction->SetInterruptionFlag(resumeCmd->GetNewBoolValue(newValue)); + } + else if (command == resumeProjectionIndexCmd) { + fRunAction->SetResumeProjectionIndex(resumeProjectionIndexCmd->GetNewIntValue(newValue)); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/stim_pixe_tomography/src/StackingAction.cc b/examples/advanced/stim_pixe_tomography/src/StackingAction.cc new file mode 100644 index 00000000000..be548269907 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/src/StackingAction.cc @@ -0,0 +1,82 @@ +// +// ******************************************************************** +// * 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 "StackingAction.hh" + +#include "G4RunManager.hh" +#include "G4SystemOfUnits.hh" + +#include "Run.hh" +#include "RunAction.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +StackingAction::StackingAction() : G4UserStackingAction(){} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +StackingAction::~StackingAction() = default; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4ClassificationOfNewTrack StackingAction::ClassifyNewTrack(const G4Track* aTrack) +{ + // keep primary particle + // count secondary particles + Run* run = static_cast(G4RunManager::GetRunManager()->GetNonConstCurrentRun()); + + auto energy_keV = (G4float)(aTrack->GetKineticEnergy() / keV); + if (run->GetIsPIXE()) { + const G4double threshold = 0.9; //*keV; + // const G4double threshold = 0.0; //*keV; + if (aTrack->GetParentID() > 0 && energy_keV > threshold + && aTrack->GetDefinition() == G4Gamma::Gamma()) + { + auto mx = (G4float)aTrack->GetMomentumDirection().x(); + auto my = (G4float)aTrack->GetMomentumDirection().y(); + auto mz = (G4float)aTrack->GetMomentumDirection().z(); + + // G4cout << std::setprecision(6) << energy_keV << G4endl; + // auto x = (G4float)(aTrack->GetPosition().x() / um); + // auto y = (G4float)(aTrack->GetPosition().y() / um); + // auto z = (G4float)(aTrack->GetPosition().z() / um); + + ParticleInfo gammaInfo(energy_keV, mx, my, mz); + // ParticleInfo gammaInfo(energy_keV, mx, my, mz, x, y, z); + run->FillGammaAtCreation(gammaInfo); + } + } + + // stack or delete secondaries + G4ClassificationOfNewTrack status = fUrgent; + return status; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/stim_pixe_tomography/src/TrackingAction.cc b/examples/advanced/stim_pixe_tomography/src/TrackingAction.cc new file mode 100644 index 00000000000..ffedaa3f49b --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/src/TrackingAction.cc @@ -0,0 +1,99 @@ +// +// ******************************************************************** +// * 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 "TrackingAction.hh" + +#include "G4Proton.hh" +#include "G4RunManager.hh" +#include "G4SystemOfUnits.hh" + +#include "Run.hh" +#include "RunAction.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +TrackingAction::TrackingAction() : G4UserTrackingAction() {} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +TrackingAction::~TrackingAction() = default; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void TrackingAction::PostUserTrackingAction(const G4Track* aTrack) +{ + Run* run = static_cast(G4RunManager::GetRunManager()->GetNonConstCurrentRun()); + auto energy_keV = (G4float)(aTrack->GetKineticEnergy() / keV); + if (run->GetIsPIXE()) { + // gammas getting out of object + // parentID > 0 => secondary + const G4double threshold = 0.9; //* keV; + if (energy_keV > threshold && aTrack->GetDefinition() == G4Gamma::Gamma() + && aTrack->GetParentID() > 0) + { + auto mx = (G4float)aTrack->GetMomentumDirection().x(); + auto my = (G4float)aTrack->GetMomentumDirection().y(); + auto mz = (G4float)aTrack->GetMomentumDirection().z(); + // + // auto x = (G4float)(aTrack->GetPosition().x() / um); + // auto y = (G4float)(aTrack->GetPosition().y() / um); + // auto z = (G4float)(aTrack->GetPosition().z() / um); + + // ParticleInfo gammaInfo(energy_keV, mx, my, mz, x, y, z); + ParticleInfo gammaInfo(energy_keV, mx, my, mz); + run->FillGammaAtExit(gammaInfo); + } + } + else { + // + // primary protons (getting out of object) + // parentID > 0 => secondary; parentID = 0 => primary + if (energy_keV > 0.0 && aTrack->GetDefinition() == G4Proton::Proton() + && aTrack->GetParentID() == 0) { + auto mx = (G4float)aTrack->GetMomentumDirection().x(); + auto my = (G4float)aTrack->GetMomentumDirection().y(); + auto mz = (G4float)aTrack->GetMomentumDirection().z(); + + // auto x = (G4float)(aTrack->GetPosition().x() / um); + // auto y = (G4float)(aTrack->GetPosition().y() / um); + // auto z = (G4float)(aTrack->GetPosition().z() / um); + + // G4cout << std::setprecision(6) << x << " " << y << " " << z + // << G4endl; + + // ParticleInfo protonInfo(energy_keV, mx, my, mz, x, y, z); + ParticleInfo protonInfo(energy_keV, mx, my, mz); + run->FillProtonAtExit(protonInfo); + } + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/stim_pixe_tomography/stim_pixe_tomography.cc b/examples/advanced/stim_pixe_tomography/stim_pixe_tomography.cc new file mode 100644 index 00000000000..48492f5471f --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/stim_pixe_tomography.cc @@ -0,0 +1,111 @@ +// +// ******************************************************************** +// * 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 "G4RunManagerFactory.hh" +#include "G4SteppingVerbose.hh" +#include "G4Types.hh" +#include "G4UIExecutive.hh" +#include "G4UImanager.hh" +#include "G4VisExecutive.hh" + +#include "ActionInitialization.hh" +#include "DetectorConstruction.hh" +#include "PhysicsList.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +int main(int argc, char** argv) +{ + // detect interactive mode (if no arguments) and define UI session + G4UIExecutive* ui = nullptr; + if (argc == 1) ui = new G4UIExecutive(argc, argv); + + // Use SteppingVerbose with Unit + G4int precision = 4; + G4SteppingVerbose::UseBestUnit(precision); + + if (argc == 2) { + G4Exception("argument", "Fatal error in Argument", FatalErrorInArgument, + "Type of simulation must be precised: either ./stim_pixe_tomography -p " + "pixe3d.mac or ./stim_pixe_tomography -s pixe3d.mac"); + } + G4bool isPIXE = false; + if (argc > 2) { + G4String s; + s = argv[1]; + if (s == "-p") + isPIXE = true; + else if (s == "-s") + isPIXE = false; + else { + G4Exception("argument", "Fatal error in Argument", FatalErrorInArgument, + "Type of simulation must be precised: /stim_pixe_tomography -p " + "pixe3d.mac or ./stim_pixe_tomography -s pixe3d.mac"); + } + } + G4int nThreads = 4; + if (argc == 4) nThreads = G4UIcommand::ConvertToInt(argv[3]); + auto* runManager = G4RunManagerFactory::CreateRunManager(); + runManager->SetNumberOfThreads(nThreads); + + // UserInitialization classes - mandatory + runManager->SetUserInitialization(new DetectorConstruction()); + runManager->SetUserInitialization(new PhysicsList()); + runManager->SetUserInitialization(new ActionInitialization(isPIXE)); + + // initialize visualization + auto visManager = new G4VisExecutive; + visManager->Initialize(); + + // get the pointer to the User Interface manager + auto UImanager = G4UImanager::GetUIpointer(); + + // User interactions + // Define (G)UI for interactive mode + if (ui) { + UImanager->ApplyCommand("/control/execute init_vis.mac"); + ui->SessionStart(); + delete ui; + } + else { + G4String command; + command = "/control/execute "; + G4String fileName; + fileName = argv[2]; + UImanager->ApplyCommand(command + fileName); + } + + // job termination + delete visManager; + delete runManager; + return 0; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/stim_pixe_tomography/stim_pixe_tomography.out b/examples/advanced/stim_pixe_tomography/stim_pixe_tomography.out new file mode 100644 index 00000000000..c67dff14f49 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/stim_pixe_tomography.out @@ -0,0 +1,1736 @@ +Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Forcing G4RunManager type... + + ############################################ + !!! WARNING - FPE detection is activated !!! + ############################################ + + + ################################ + !!! G4Backtrace is activated !!! + ################################ + + +************************************************************** + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) + Copyright : Geant4 Collaboration + References : NIM A 506 (2003), 250-303 + : IEEE-TNS 53 (2006), 270-278 + : NIM A 835 (2016), 186-225 + WWW : http://geant4.org/ +************************************************************** + +Visualization Manager instantiating with verbosity "warnings (3)"... +Visualization Manager initialising... +Registering graphics systems... + +You have successfully registered the following graphics systems. +Registered graphics systems are: + ASCIITree (ATree) + DAWNFILE (DAWNFILE) + G4HepRepFile (HepRepFile) + RayTracer (RayTracer) + VRML2FILE (VRML2FILE) + gMocrenFile (gMocrenFile) + TOOLSSG_OFFSCREEN (TSG_OFFSCREEN) + TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE) + OpenGLImmediateQt (OGLIQt, OGLI) + OpenGLStoredQt (OGLSQt, OGL, OGLS) + OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK) + OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK) + OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK) + OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK) + RayTracerX (RayTracerX) + Qt3D (Qt3D) + TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) + TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) + TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) + +Registering model factories... + +You have successfully registered the following model factories. +Registered model factories: + generic + drawByAttribute + drawByCharge + drawByOriginVolume + drawByParticleID + drawByEncounteredVolume + +Registered models: + None + +Registered filter factories: + attributeFilter + chargeFilter + originVolumeFilter + particleFilter + encounteredVolumeFilter + +Registered filters: + None + +You have successfully registered the following user vis actions. +Run Duration User Vis Actions: none +End of Event User Vis Actions: none +End of Run User Vis Actions: none + +Some /vis commands (optionally) take a string to specify colour. +"/vis/list" to see available colours. +/run/verbose 1 +/tomography/phys/addPhysics elastic +PhysicsList::AddPhysicsList: +/tomography/phys/addPhysics binary +PhysicsList::AddPhysicsList: +/tomography/phys/addPhysics binary_ion +PhysicsList::AddPhysicsList: +/run/setCut 1 nm +/cuts/setLowEdge 900 eV +/process/em/applyCuts true +/run/physicsModified +/process/em/fluo true +/run/physicsModified +/process/em/fluoBearden true +/run/physicsModified +/process/em/pixe true +/run/physicsModified +/process/em/auger true +/run/physicsModified +/process/em/augerCascade true +/run/physicsModified +/tomography/run/scanParameters 5 1 5 +/run/initialize + + Material: G4_Galactic density: 0.000 mg/cm3 RadL: 204310098.490 pc Nucl.Int.Length: 113427284.261 pc + Imean: 21.800 eV temperature: 2.73 K pressure: 0.00 atm + + ---> Element: H (H) Z = 1.0 N = 1 A = 1.008 g/mole + ---> Isotope: H1 Z = 1 N = 1 A = 1.01 g/mole abundance: 99.989 % + ---> Isotope: H2 Z = 1 N = 2 A = 2.01 g/mole abundance: 0.011 % + ElmMassFraction: 100.00 % ElmAbundance 100.00 % + + + Material: Body_10times density: 408.530 mg/cm3 RadL: 93.670 cm Nucl.Int.Length: 1.866 m + Imean: 70.761 eV temperature: 293.15 K pressure: 1.00 atm + + ---> Element: Phosphorus (P) Z = 15.0 N = 31 A = 30.970 g/mole + ---> Isotope: P31 Z = 15 N = 31 A = 30.97 g/mole abundance: 100.000 % + ElmMassFraction: 7.23 % ElmAbundance 1.65 % + + ---> Element: Carbon (C) Z = 6.0 N = 12 A = 12.010 g/mole + ---> Isotope: C12 Z = 6 N = 12 A = 12.00 g/mole abundance: 98.930 % + ---> Isotope: C13 Z = 6 N = 13 A = 13.00 g/mole abundance: 1.070 % + ElmMassFraction: 52.24 % ElmAbundance 30.73 % + + ---> Element: Hydrogen (H) Z = 1.0 N = 1 A = 1.010 g/mole + ---> Isotope: H1 Z = 1 N = 1 A = 1.01 g/mole abundance: 99.989 % + ---> Isotope: H2 Z = 1 N = 2 A = 2.01 g/mole abundance: 0.011 % + ElmMassFraction: 7.47 % ElmAbundance 52.25 % + + ---> Element: Oxygen (O) Z = 8.0 N = 16 A = 16.000 g/mole + ---> Isotope: O16 Z = 8 N = 16 A = 15.99 g/mole abundance: 99.757 % + ---> Isotope: O17 Z = 8 N = 17 A = 17.00 g/mole abundance: 0.038 % + ---> Isotope: O18 Z = 8 N = 18 A = 18.00 g/mole abundance: 0.205 % + ElmMassFraction: 20.88 % ElmAbundance 9.22 % + + ---> Element: Nitrogen (N) Z = 7.0 N = 14 A = 14.010 g/mole + ---> Isotope: N14 Z = 7 N = 14 A = 14.00 g/mole abundance: 99.632 % + ---> Isotope: N15 Z = 7 N = 15 A = 15.00 g/mole abundance: 0.368 % + ElmMassFraction: 12.19 % ElmAbundance 6.15 % + + + The WORLD is made of 80 um of G4_Galactic. The transverse size (YZ) of the world is 80 um + The ABSORBER is made of 40 um of Body_10times. The transverse size (YZ) is 40 um + X position of the middle of the absorber 0 fm +### HadronInelasticQBBC Construct Process: + Emin(FTFP)= 3 GeV Emax(FTFP)= 100000 GeV + Emin(BERT)= 1 GeV Emax(BERT)= 6 GeV Emax(BERTpions)= 12 GeV + Emin(BIC) = 0 GeV Emax(BIC)= 1.5 GeV. +/run/printProgress 500000 +/gps/energy 1.50 MeV +/gps/particle proton +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -28.800000 0.000000 um +/run/beamOn 20 +======================================================================= +====== Electromagnetic Physics Parameters ======== +======================================================================= +LPM effect enabled 1 +Enable creation and use of sampling tables 0 +Apply cuts on all EM processes 1 +Use combined TransportationWithMsc Disabled +Use general process 0 +Enable linear polarisation for gamma 0 +Enable photoeffect sampling below K-shell 1 +Enable sampling of quantum entanglement 0 +X-section factor for integral approach 0.8 +Min kinetic energy for tables 100 eV +Max kinetic energy for tables 100 TeV +Number of bins per decade of a table 20 +Verbose level 1 +Verbose level for worker thread 0 +Bremsstrahlung energy threshold above which + primary e+- is added to the list of secondary 100 TeV +Bremsstrahlung energy threshold above which primary + muon/hadron is added to the list of secondary 100 TeV +Lowest triplet kinetic energy 1 MeV +Enable sampling of gamma linear polarisation 0 +5D gamma conversion model type 0 +5D gamma conversion model on isolated ion 0 +Livermore data directory epics_2017 +======================================================================= +====== Ionisation Parameters ======== +======================================================================= +Step function for e+- (0.2, 0.01 mm) +Step function for muons/hadrons (0.1, 0.05 mm) +Step function for light ions (0.1, 0.02 mm) +Step function for general ions (0.1, 0.001 mm) +Lowest e+e- kinetic energy 100 eV +Lowest muon/hadron kinetic energy 1 keV +Use ICRU90 data 1 +Fluctuations of dE/dx are enabled 1 +Type of fluctuation model for leptons and hadrons Urban +Use built-in Birks satuaration 0 +Build CSDA range enabled 0 +Use cut as a final range enabled 0 +Enable angular generator interface 1 +Max kinetic energy for CSDA tables 1 GeV +Max kinetic energy for NIEL computation 1 MeV +Linear loss limit 0.01 +Read data from file for e+e- pair production by mu 0 +======================================================================= +====== Multiple Scattering Parameters ======== +======================================================================= +Type of msc step limit algorithm for e+- 2 +Type of msc step limit algorithm for muons/hadrons 0 +Msc lateral displacement for e+- enabled 1 +Msc lateral displacement for muons and hadrons 1 +Urban msc model lateral displacement alg96 1 +Range factor for msc step limit for e+- 0.08 +Range factor for msc step limit for muons/hadrons 0.2 +Geometry factor for msc step limitation of e+- 2.5 +Safety factor for msc step limit for e+- 0.6 +Skin parameter for msc step limitation of e+- 3 +Lambda limit for msc step limit for e+- 1 mm +Use Mott correction for e- scattering 1 +Factor used for dynamic computation of angular + limit between single and multiple scattering 1 +Fixed angular limit between single + and multiple scattering 3.1416 rad +Upper energy limit for e+- multiple scattering 100 MeV +Type of electron single scattering model 0 +Type of nuclear form-factor 1 +Screening factor 1 +======================================================================= +====== Atomic Deexcitation Parameters ======== +======================================================================= +Fluorescence enabled 1 +Directory in G4LEDATA for fluorescence data files fluor_Bearden +Auger electron cascade enabled 1 +PIXE atomic de-excitation enabled 1 +De-excitation module ignores cuts 0 +Type of PIXE cross section for hadrons Empirical +Type of PIXE cross section for e+- Livermore +======================================================================= + +### === Deexcitation model UAtomDeexcitation is activated for 1 region: + DefaultRegionForTheWorld 1 1 1 + +### === G4UAtomicDeexcitation::InitialiseForNewRun() +### === Auger flag: 1 +### === Ignore cuts flag: 0 +### === PIXE model for hadrons: Empirical +### === PIXE model for e+-: Livermore + +phot: for gamma applyCuts:1 SubType=12 BuildTable=0 + LambdaPrime table from 200 keV to 100 TeV in 174 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermorePhElectric : Emin= 0 eV Emax= 100 TeV SauterGavrila Fluo + +compt: for gamma applyCuts:1 SubType=13 BuildTable=1 + Lambda table from 100 eV to 1 MeV, 20 bins/decade, spline: 1 + LambdaPrime table from 1 MeV to 100 TeV in 160 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermoreCompton : Emin= 0 eV Emax= 1 GeV Fluo + KleinNishina : Emin= 1 GeV Emax= 100 TeV Fluo + +conv: for gamma applyCuts:1 SubType=14 BuildTable=1 + Lambda table from 1.022 MeV to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +Livermore5DConversion : Emin= 0 eV Emax= 100 TeV ModifiedTsai + +Rayl: for gamma applyCuts:1 SubType=11 BuildTable=1 + Lambda table from 100 eV to 150 keV, 20 bins/decade, spline: 0 + LambdaPrime table from 150 keV to 100 TeV in 176 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermoreRayleigh : Emin= 0 eV Emax= 100 TeV CullenGenerator + +msc: for e- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + GoudsmitSaunderson : Emin= 0 eV Emax= 100 MeV Nbins=120 100 eV - 100 MeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=120 100 MeV - 100 TeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +eIoni: for e- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.2, 0.01 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LowEnergyIoni : Emin= 0 eV Emax= 100 keV deltaVI + MollerBhabha : Emin= 100 keV Emax= 100 TeV deltaVI + +eBrem: for e- XStype:4 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eBremSB : Emin= 0 eV Emax= 1 GeV AngularGen2BS + eBremLPM : Emin= 1 GeV Emax= 100 TeV AngularGen2BS + +ePairProd: for e- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 25x1001 from 0.1 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ePairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for e- XStype:1 applyCuts:1 SubType=1 BuildTable=1 + Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 100 MeV Emax= 100 TeV + +msc: for e+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + GoudsmitSaunderson : Emin= 0 eV Emax= 100 MeV Nbins=120 100 eV - 100 MeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=120 100 MeV - 100 TeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +eIoni: for e+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.2, 0.01 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MollerBhabha : Emin= 0 eV Emax= 100 TeV deltaVI + +eBrem: for e+ XStype:4 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eBremSB : Emin= 0 eV Emax= 1 GeV AngularGen2BS + eBremLPM : Emin= 1 GeV Emax= 100 TeV AngularGen2BS + +ePairProd: for e+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 25x1001 from 0.1 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ePairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +annihil: for e+ XStype:2 applyCuts:1 SubType=5 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eplus2gg : Emin= 0 eV Emax= 100 TeV + +CoulombScat: for e+ XStype:1 applyCuts:1 SubType=1 BuildTable=1 + Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 100 MeV Emax= 100 TeV + +msc: for proton SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +hIoni: for proton XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax= 2 MeV deltaVI + BetheBloch : Emin= 2 MeV Emax= 100 TeV deltaVI + +hBrems: for proton XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for proton XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 17x1001 from 7.50618 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for proton XStype:1 applyCuts:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +nuclearStopping: for proton applyCuts:1 SubType=8 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV + +msc: for GenericIon SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + UrbanMsc : Emin= 0 eV Emax= 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +ionIoni: for GenericIon XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.001 mm), integ: 3, fluct: 1, linLossLim= 0.02 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LindhardSorensen : Emin= 0 eV Emax= 100 TeV deltaVI + +nuclearStopping: for GenericIon applyCuts:1 SubType=8 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV + +msc: for alpha SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + UrbanMsc : Emin= 0 eV Emax= 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +ionIoni: for alpha XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.02 mm), integ: 3, fluct: 1, linLossLim= 0.02 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + BraggIon : Emin= 0 eV Emax=7.9452 MeV deltaVI + BetheBloch : Emin=7.9452 MeV Emax= 100 TeV deltaVI + +nuclearStopping: for alpha applyCuts:1 SubType=8 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV + +msc: for anti_proton SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +hIoni: for anti_proton XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax= 2 MeV deltaVI + BetheBloch : Emin= 2 MeV Emax= 100 TeV deltaVI + +hBrems: for anti_proton XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for anti_proton XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 17x1001 from 7.50618 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for anti_proton XStype:1 applyCuts:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for kaon+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +hIoni: for kaon+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=1.05231 MeV deltaVI + BetheBloch : Emin=1.05231 MeV Emax= 100 TeV deltaVI + +hBrems: for kaon+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for kaon+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 18x1001 from 3.94942 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for kaon+ XStype:1 applyCuts:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for kaon- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +hIoni: for kaon- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=1.05231 MeV deltaVI + BetheBloch : Emin=1.05231 MeV Emax= 100 TeV deltaVI + +hBrems: for kaon- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for kaon- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 18x1001 from 3.94942 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for kaon- XStype:1 applyCuts:1 SubType=1 BuildTable=1 + Used Lambda table of kaon+ + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for mu+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +muIoni: for mu+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax= 200 keV deltaVI + MuBetheBloch : Emin= 200 keV Emax= 100 TeV deltaVI + +muBrems: for mu+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +muPairProd: for mu+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 21x1001 from 0.85 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for mu+ XStype:1 applyCuts:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for mu- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +muIoni: for mu- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax= 200 keV deltaVI + MuBetheBloch : Emin= 200 keV Emax= 100 TeV deltaVI + +muBrems: for mu- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +muPairProd: for mu- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 21x1001 from 0.85 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for mu- XStype:1 applyCuts:1 SubType=1 BuildTable=1 + Used Lambda table of mu+ + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for pi+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +hIoni: for pi+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=297.505 keV deltaVI + BetheBloch : Emin=297.505 keV Emax= 100 TeV deltaVI + +hBrems: for pi+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for pi+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 20x1001 from 1.11656 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for pi+ XStype:1 applyCuts:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for pi- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +hIoni: for pi- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=297.505 keV deltaVI + BetheBloch : Emin=297.505 keV Emax= 100 TeV deltaVI + +hBrems: for pi- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for pi- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 20x1001 from 1.11656 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for pi- XStype:1 applyCuts:1 SubType=1 BuildTable=1 + Used Lambda table of pi+ + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +==================================================================== + HADRONIC PROCESSES SUMMARY (verbose level 1) + +--------------------------------------------------- + Hadronic Processes for B- + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: B-Inelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for D- + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: D-Inelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for GenericIon + + Process: ionInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for He3 + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + + Process: He3Inelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for alpha + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + + Process: alphaInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for anti_He3 + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_He3Inelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for anti_alpha + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_alphaInelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for anti_deuteron + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_deuteronInelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for anti_lambda + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: anti_lambdaInelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for anti_neutron + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100.1 MeV + Model: AntiAElastic: 100 MeV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_neutronInelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for anti_proton + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100.1 MeV + Model: AntiAElastic: 100 MeV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_protonInelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for anti_triton + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_tritonInelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for deuteron + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + + Process: dInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for kaon+ + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: kaon+Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for kaon- + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: kaon-Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for lambda + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: lambdaInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for neutron + + Process: hadElastic + Model: hElasticCHIPS: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV + + + Process: neutronInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 6 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV + + + Process: nCapture + Model: nRadCapture: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for pi+ + + Process: hadElastic + Model: hElasticGlauber: 0 eV ---> 100 TeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + + Process: pi+Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 12 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for pi- + + Process: hadElastic + Model: hElasticGlauber: 0 eV ---> 100 TeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + + Process: pi-Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 12 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for proton + + Process: hadElastic + Model: hElasticCHIPS: 0 eV ---> 100 TeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + + Process: protonInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 6 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: G4ParticleInelasticXS: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for sigma- + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: sigma-Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for triton + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + + Process: tInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +================================================================ +======================================================================= +====== Geant4 Native Pre-compound Model Parameters ======== +======================================================================= +Type of pre-compound inverse x-section 3 +Pre-compound model active 1 +Pre-compound excitation low energy 100 keV +Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= +Type of de-excitation inverse x-section 3 +Type of de-excitation factory Evaporation+GEM +Number of de-excitation channels 68 +Min excitation energy 10 eV +Min energy per nucleon for multifragmentation 200 GeV +Limit excitation energy for Fermi BreakUp 20 MeV +Level density (1/MeV) 0.075 +Use simple level density model 1 +Use discrete excitation energy of the residual 1 +Time limit for long lived isomeres 1 ns +Isomer production flag 1 +Internal e- conversion flag 1 +Store e- internal conversion data 0 +Correlated gamma emission flag 0 +Max 2J for sampling of angular correlations 10 +======================================================================= + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +G4VisManager: Using G4TrajectoryDrawByCharge as fallback trajectory model. +See commands in /vis/modeling/trajectories/ for other options. +### Run 0 starts. +Scan information: +Projection_index 0 Slice_index 0 Pixel_index 0 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.000000s Real=0.000431s Sys=0.000000s +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -14.400000 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 1 starts. +Scan information: +Projection_index 0 Slice_index 0 Pixel_index 1 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.000000s Real=0.007208s Sys=0.000000s +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 0.000000 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 2 starts. +Scan information: +Projection_index 0 Slice_index 0 Pixel_index 2 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.010000s Real=0.008043s Sys=0.000000s +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 14.400000 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 3 starts. +Scan information: +Projection_index 0 Slice_index 0 Pixel_index 3 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.010000s Real=0.007332s Sys=0.000000s +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 28.800000 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 4 starts. +Scan information: +Projection_index 0 Slice_index 0 Pixel_index 4 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.000000s Real=0.000125s Sys=0.000000s +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -12.196397 -44.459959 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 5 starts. +Scan information: +Projection_index 1 Slice_index 0 Pixel_index 0 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.000000s Real=0.000099s Sys=0.000000s +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -20.660504 -32.810114 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 6 starts. +Scan information: +Projection_index 1 Slice_index 0 Pixel_index 1 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.010000s Real=0.005642s Sys=0.000000s +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -29.124612 -21.160269 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 7 starts. +Scan information: +Projection_index 1 Slice_index 0 Pixel_index 2 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.010000s Real=0.009517s Sys=0.000000s +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -37.588719 -9.510424 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 8 starts. +Scan information: +Projection_index 1 Slice_index 0 Pixel_index 3 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.000000s Real=0.004821s Sys=0.000000s +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -46.052827 2.139420 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 9 starts. +Scan information: +Projection_index 1 Slice_index 0 Pixel_index 4 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.000000s Real=0.000118s Sys=0.000000s +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre 16.265816 -43.137724 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 10 starts. +Scan information: +Projection_index 2 Slice_index 0 Pixel_index 0 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.000000s Real=0.000112s Sys=0.000000s +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre 2.570602 -38.687879 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 11 starts. +Scan information: +Projection_index 2 Slice_index 0 Pixel_index 1 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.010000s Real=0.006375s Sys=0.000000s +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -11.124612 -34.238035 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 12 starts. +Scan information: +Projection_index 2 Slice_index 0 Pixel_index 2 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.010000s Real=0.006880s Sys=0.000000s +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -24.819826 -29.788190 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 13 starts. +Scan information: +Projection_index 2 Slice_index 0 Pixel_index 3 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.000000s Real=0.007056s Sys=0.000000s +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -38.515039 -25.338345 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 14 starts. +Scan information: +Projection_index 2 Slice_index 0 Pixel_index 4 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.000000s Real=0.000111s Sys=0.000000s +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 38.515039 -25.338345 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 15 starts. +Scan information: +Projection_index 3 Slice_index 0 Pixel_index 0 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.000000s Real=0.000121s Sys=0.000000s +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 24.819826 -29.788190 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 16 starts. +Scan information: +Projection_index 3 Slice_index 0 Pixel_index 1 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.010000s Real=0.006820s Sys=0.000000s +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 11.124612 -34.238035 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 17 starts. +Scan information: +Projection_index 3 Slice_index 0 Pixel_index 2 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.010000s Real=0.007795s Sys=0.000000s +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre -2.570602 -38.687879 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 18 starts. +Scan information: +Projection_index 3 Slice_index 0 Pixel_index 3 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.010000s Real=0.007729s Sys=0.000000s +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre -16.265816 -43.137724 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 19 starts. +Scan information: +Projection_index 3 Slice_index 0 Pixel_index 4 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.000000s Real=0.000106s Sys=0.000000s +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 46.052827 2.139420 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 20 starts. +Scan information: +Projection_index 4 Slice_index 0 Pixel_index 0 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.000000s Real=0.000117s Sys=0.000000s +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 37.588719 -9.510424 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 21 starts. +Scan information: +Projection_index 4 Slice_index 0 Pixel_index 1 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.000000s Real=0.005271s Sys=0.000000s +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 29.124612 -21.160269 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 22 starts. +Scan information: +Projection_index 4 Slice_index 0 Pixel_index 2 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.010000s Real=0.008720s Sys=0.000000s +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 20.660504 -32.810114 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 23 starts. +Scan information: +Projection_index 4 Slice_index 0 Pixel_index 3 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.010000s Real=0.005050s Sys=0.000000s +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 12.196397 -44.459959 0.000000 um +/run/beamOn 20 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Body_10times + Range cuts : gamma 10 Ang e- 10 Ang e+ 10 Ang proton 10 Ang + Energy thresholds : gamma 900 eV e- 900 eV e+ 900 eV proton 100 meV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 24 starts. +Scan information: +Projection_index 4 Slice_index 0 Pixel_index 4 +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.000000s Real=0.000106s Sys=0.000000s +Graphics systems deleted. +Visualization Manager deleting... +================== Deleting memory pools =================== +Number of memory pools allocated: 9 of which, static: 0 +Dynamic pools deleted: 9 / Total memory freed: 0.048 MB +============================================================ diff --git a/examples/advanced/stim_pixe_tomography/test.in b/examples/advanced/stim_pixe_tomography/test.in new file mode 100644 index 00000000000..605a2ce2969 --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/test.in @@ -0,0 +1,152 @@ +# +# macro file pixe3d.mac +# +/control/verbose 1 +/run/verbose 1 +#/tracking/verbose 2 +# +#/tomography/det/setPhantomType 1 +# +# material and size of simple cube object +# comment out if the object is not a cubic shape +#/tomography/det/setAbsMat Gold +#/tomography/det/setAbsMat G4_P +#/tomography/det/setAbsThick 50 um +#/tomography/det/setAbsYZ 50 um +#/tomography/det/setAbsThick 5 um +#/tomography/det/setAbsYZ 5 um +# +#Physics lists +#/tomography/phys/addPhysics local +/tomography/phys/addPhysics elastic +/tomography/phys/addPhysics binary +/tomography/phys/addPhysics binary_ion +# +#Production cuts +#/run/setCut 0.01 mm +#/run/setCutForAGivenParticle gamma 0.5 um +/run/setCut 1 nm +/cuts/setLowEdge 900 eV +# +#/process/em/deexcitationIgnoreCut true +#/process/em/deexcitation world true false true +/process/em/applyCuts true +/process/em/fluo true +/process/em/fluoBearden true +/process/em/pixe true +/process/em/auger true +/process/em/augerCascade true +# +/tomography/run/scanParameters 5 1 5 +# +/run/initialize +# +/run/printProgress 500000 +# +# Source definition : energy, type +# +/gps/energy 1.50 MeV +/gps/particle proton +# +# SOURCE POSITION AND DIRECTION +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -28.800000 0.000000 um +/run/beamOn 20 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 -14.400000 0.000000 um +/run/beamOn 20 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 0.000000 0.000000 um +/run/beamOn 20 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 14.400000 0.000000 um +/run/beamOn 20 +# +/gps/direction 1.000000 0.000000 0.000000 +/gps/pos/centre -36.000000 28.800000 0.000000 um +/run/beamOn 20 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -12.196397 -44.459959 0.000000 um +/run/beamOn 20 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -20.660504 -32.810114 0.000000 um +/run/beamOn 20 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -29.124612 -21.160269 0.000000 um +/run/beamOn 20 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -37.588719 -9.510424 0.000000 um +/run/beamOn 20 +# +/gps/direction 0.809017 0.587785 0.000000 +/gps/pos/centre -46.052827 2.139420 0.000000 um +/run/beamOn 20 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre 16.265816 -43.137724 0.000000 um +/run/beamOn 20 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre 2.570602 -38.687879 0.000000 um +/run/beamOn 20 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -11.124612 -34.238035 0.000000 um +/run/beamOn 20 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -24.819826 -29.788190 0.000000 um +/run/beamOn 20 +# +/gps/direction 0.309017 0.951057 0.000000 +/gps/pos/centre -38.515039 -25.338345 0.000000 um +/run/beamOn 20 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 38.515039 -25.338345 0.000000 um +/run/beamOn 20 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 24.819826 -29.788190 0.000000 um +/run/beamOn 20 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre 11.124612 -34.238035 0.000000 um +/run/beamOn 20 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre -2.570602 -38.687879 0.000000 um +/run/beamOn 20 +# +/gps/direction -0.309017 0.951057 0.000000 +/gps/pos/centre -16.265816 -43.137724 0.000000 um +/run/beamOn 20 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 46.052827 2.139420 0.000000 um +/run/beamOn 20 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 37.588719 -9.510424 0.000000 um +/run/beamOn 20 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 29.124612 -21.160269 0.000000 um +/run/beamOn 20 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 20.660504 -32.810114 0.000000 um +/run/beamOn 20 +# +/gps/direction -0.809017 0.587785 0.000000 +/gps/pos/centre 12.196397 -44.459959 0.000000 um +/run/beamOn 20 +# diff --git a/examples/advanced/stim_pixe_tomography/vis.mac b/examples/advanced/stim_pixe_tomography/vis.mac new file mode 100644 index 00000000000..8a2a8ea9b1e --- /dev/null +++ b/examples/advanced/stim_pixe_tomography/vis.mac @@ -0,0 +1,106 @@ +# Macro file for the visualization setting for the initialization phase +# + +# Use these open statements to open selected visualization +# +# Use this open statement to create an OpenGL view: +/vis/open OGL 600x600-0+0 +# +# Use this open statement to create an OpenInventor view: +#/vis/open OIX +# +# Use this open statement to create a .prim file suitable for +# viewing in DAWN: +#/vis/open DAWNFILE +# +# Use this open statement to create a .heprep file suitable for +# viewing in HepRApp: +#/vis/open HepRepFile +# +# Use this open statement to create a .wrl file suitable for +# viewing in a VRML viewer: +#/vis/open VRML2FILE +# +# Disable auto refresh and quieten vis messages whilst scene and +# trajectories are established: +/vis/viewer/set/autoRefresh false +/vis/verbose errors +# +# Draw geometry: +/vis/drawVolume +# +# Specify view angle: +#/vis/viewer/set/viewpointThetaPhi 90. 180. +/vis/viewer/set/viewpointVector 0 -1 0 +/vis/viewer/set/upVector 0 0 1 +# +# Specify zoom value: +/vis/viewer/zoom 1.2 +# +# Specify style (surface, wireframe, auxiliary edges,...) +/vis/viewer/set/style wireframe +#/vis/viewer/set/style surface +#/vis/viewer/set/auxiliaryEdge true +#/vis/viewer/set/lineSegmentsPerCircle 100 +# +# Draw coordinate axes: +/vis/scene/add/axes 0 0 0 100 um +# +# Draw smooth trajectories at end of event, showing trajectory points +# as markers 2 pixels wide: +/vis/scene/add/trajectories smooth +/vis/modeling/trajectories/create/drawByCharge +# set the green for e- particles +#/vis/modeling/trajectories/drawByCharge-0/set -1 green +################################################################################## +#/vis/modeling/trajectories/drawByCharge-0/default/setDrawStepPts true +#/vis/modeling/trajectories/drawByCharge-0/default/setStepPtsSize 5 +#/vis/modeling/trajectories/drawByCharge-0/default/setDrawAuxPts true +#/vis/modeling/trajectories/drawByCharge-0/default/setAuxPtsSize 5 +#/vis/modeling/trajectories/drawByCharge-0/default/setTimeSliceInterval 0.1 ns +#/vis/modeling/trajectories/list +#################################################################################### +#/vis/modeling/trajectories/drawByCharge-0/default/setDrawStepPts true +#/vis/modeling/trajectories/drawByCharge-0/default/setStepPtsSize 2 +# (if too many tracks cause core dump => /tracking/storeTrajectory 0) +# +# Draw hits at end of event: +/vis/scene/add/hits +# +# To draw only gammas: +#/vis/filtering/trajectories/create/particleFilter +#/vis/filtering/trajectories/particleFilter-0/add gamma +# +# To invert the above, drawing all particles except gammas, +# keep the above two lines but also add: +#/vis/filtering/trajectories/particleFilter-0/invert true +# +# Many other options are available with /vis/modeling and /vis/filtering. +# For example, to select colour by particle ID: +#/vis/modeling/trajectories/create/drawByParticleID +#/vis/modeling/trajectories/drawByParticleID-0/default/setDrawStepPts true +# To select or override default colours (note: e+ is blue by default): +#/vis/modeling/trajectories/list +#/vis/modeling/trajectories/create/drawByParticleID +#/vis/modeling/trajectories/drawByParticleID-0/set gamma yellow +# +# To superimpose all of the events from a given run: +/vis/scene/endOfEventAction accumulate +# +# Re-establish auto refreshing and verbosity: +/vis/viewer/set/autoRefresh true +/vis/verbose warnings +# +# set the color of background +#/vis/viewer/set/background white +# set the color of background grey +#/vis/viewer/set/background 0.5 0.5 0.5 1.0 +# +# For file-based drivers, use this to create an empty detector view: +#/vis/viewer/flush +# if one wants to visualize the particles, uncomment the following lines: +/gps/energy 3 MeV +/gps/particle proton +/gps/direction 1.0 0.0 0 +/gps/pos/centre -50 0 0 um +/run/beamOn 50 diff --git a/examples/advanced/underground_physics/underground_physics.out b/examples/advanced/underground_physics/underground_physics.out index 7ee92abab9e..91b17fc0de6 100644 --- a/examples/advanced/underground_physics/underground_physics.out +++ b/examples/advanced/underground_physics/underground_physics.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -43,7 +43,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -429,6 +431,7 @@ NeutronHP: /Elastic file for Z = 6, A = 12 is not found and NeutronHP will use / ProduceFissionFragments ? 0 UseWendtFissionModel ? 0 UseNRESP71Model ? 0 + UseDBRC ? 0 ======================================================= @@@ G4ParticleHPInelastic instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic diff --git a/examples/advanced/xray_SiliconPoreOptics/CMakeLists.txt b/examples/advanced/xray_SiliconPoreOptics/CMakeLists.txt new file mode 100644 index 00000000000..50955511770 --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/CMakeLists.txt @@ -0,0 +1,58 @@ +#---------------------------------------------------------------------------- +# Setup the project +cmake_minimum_required(VERSION 3.16...3.21) +project(XraySiliconPoreOptics) + +#---------------------------------------------------------------------------- +# Find Geant4 package, activating all available UI and Vis drivers by default +# You can set WITH_GEANT4_UIVIS to OFF via the command line or ccmake/cmake-gui +# to build a batch mode only executable +# +option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON) +if(WITH_GEANT4_UIVIS) + find_package(Geant4 REQUIRED ui_all vis_all) +else() + find_package(Geant4 REQUIRED) +endif() + +#---------------------------------------------------------------------------- +# Setup Geant4 include directories and compile definitions +# +include(${Geant4_USE_FILE}) + +#---------------------------------------------------------------------------- +# Locate sources and headers for this project +# +include_directories(${PROJECT_SOURCE_DIR}/include + ${Geant4_INCLUDE_DIR}) +file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) +file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) + +#---------------------------------------------------------------------------- +# Add the executable, and link it to the Geant4 libraries +# +add_executable(XraySiliconPoreOptics Xray_SiliconPoreOptics.cc ${sources} ${headers}) +target_link_libraries(XraySiliconPoreOptics ${Geant4_LIBRARIES}) + +#---------------------------------------------------------------------------- +# Copy all scripts to the build directory, i.e. the directory in which we +# build XraySiliconPoreOptics. This is so that we can run the executable directly because it +# relies on these scripts being in the current working directory. +# +set(XraySiliconPoreOptics_SCRIPTS + pores.gdml run01.mac init_vis.mac vis.mac + ) + +foreach(_script ${XraySiliconPoreOptics_SCRIPTS}) + configure_file( + ${PROJECT_SOURCE_DIR}/${_script} + ${PROJECT_BINARY_DIR}/${_script} + COPYONLY + ) +endforeach() + +#---------------------------------------------------------------------------- +# Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX +# +install(TARGETS XraySiliconPoreOptics DESTINATION bin) + diff --git a/examples/advanced/xray_SiliconPoreOptics/GNUmakefile b/examples/advanced/xray_SiliconPoreOptics/GNUmakefile new file mode 100644 index 00000000000..5d5c1f43bbb --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/GNUmakefile @@ -0,0 +1,15 @@ +name := XRAYoptics +G4TARGET := $(name) +G4EXLIB := true + +ifndef G4INSTALL + G4INSTALL = ../../../.. +endif + +.PHONY: all +all: lib bin + +include $(G4INSTALL)/config/architecture.gmk + +include $(G4INSTALL)/config/binmake.gmk + diff --git a/examples/advanced/xray_SiliconPoreOptics/History b/examples/advanced/xray_SiliconPoreOptics/History new file mode 100644 index 00000000000..60c403e20c7 --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/History @@ -0,0 +1,8 @@ +# Example Xray_SiliconPoreOptics History + +See `CONTRIBUTING.rst` for details of **required** info/format for each entry, +which **must** added in reverse chronological order (newest at the top). It must **not** +be used as a substitute for writing good git commit messages! + +## 2023-04-07 R.Stanzani (xraysiliconporeoptics-V11-01-00) +- First commit for the example diff --git a/examples/advanced/xray_SiliconPoreOptics/README.txt b/examples/advanced/xray_SiliconPoreOptics/README.txt new file mode 100644 index 00000000000..042c310386a --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/README.txt @@ -0,0 +1,135 @@ +-------------------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Xray_SiliconPoreOptics + ------------------ + P.Dondero (1), R.Stanzani (1) + Apr 2023 + + 1. Swhard S.r.l, Genoa (GE), Italy. + +-------------------------------------------------------------------------------- + + Contacts: paolo.dondero@cern.ch, ronny.stanzani@cern.ch + +-------------------------------------------------------------------------------- + Acknowledgements: example developed within the ESA AREMBES Project, Contract n. + 4000116655/16/NL/BW. Valentina Fioretti provided the simplified mass model, as + described in [1]. +-------------------------------------------------------------------------------- + + Xray_SiliconPoreOptics is an example of the application of Geant4 in a space + environment. + The geometry used in this example represents a single reflective pore used to + simulate on a smaller scale the effect of the millions of pores forming the + mirror of the ATHENA Silicon Pore Optics (SPO), as described in [1]. + The main purpose of the simulation is the estimation of the induced residual + background at the pore exit caused by proton scattering at grazing angles + (<1deg). + Reflection steps inside the pore and relevant information are saved on a .root + file for subsequent analysis [2]. For execution time optimization purposes, only + particle steps respecting specific conditions (e.g. reflection length and volume + name) are stored. + An example of ROOT-based analysis of the output file is included + ("./analysis/analysis.C") and can be used to obtain basic data representations. + Xray_SiliconPoreOptics implements a physics list dedicated to space radiation + interactions, developed within the ESA AREMBES Project for the ATHENA mission, + called Space Physics List (SPL). + The example shows a way to optimize the simulation's execution time + and output size by selectively saving data based on specific combined conditions + (e.g. position, eventID and process name). + NOTE: in a multiple-run session, the last run always overrides the root file. + +1 - GEOMETRY + + The geometry is given in the GDML format, and consists of a single Silicon pore + aligned to the ideal optics symmetry axis of the SPO [1], i.e., the Z-axis of + the Geant4 reference system. The pore has the following parameters: + - length: ~203.0 mm + - pore entrance size: ~0.83x0.61 mm + - pore thickness: 0.17 mm + Three volumes (DummyEntrance, DummyExit and DummySphere) are used to save the + state of the particles as they pass. + +2 - INPUT FLUX + + 100keV protons are emitted with a Cosine-law distribution from a planar surface + (same dimensions of the pore) at 1mm above the entrance, within a cone of +-1 deg + aperture, as described in [1]. + +3 - PHYSICS LIST + + This example implements a dedicated physics list called "Space Physics List", + developed within the ESA AREMBES Project. This physics list has been designed + focusing on the ATHENA physics processes, but contains high precision + models that can be used in a more general space application. + In details, this physics list provides a custom electromagnetic part combined + with the QBBC hadronic physics list. + In addition, the G4EmStandardSS Physics List is used to simulate the single + scattering inside the pore, as it is associated to a specific region + from the macro file. + In general, the use of SS only in selected regions allows the simulation to + reduce CPU consumption in the majority of the volumes and be very accurate in + the desired ones. + The default production cuts are selected for all volumes, i.e. 1mm. + +4 - HOW TO RUN THE EXAMPLE + + Compile code and execute Xray_SiliconPoreOptics in 'batch' mode from the macro + file: + ./XraySiliconPoreOptics run01.mac + For this example, the multi-thread (MT) capability of Geant4 is enabled by + default. + To specify the desired number of threads, the user can use the command + "/run/numberOfThreads" in "run01.mac". To show the output from a single thread + in the terminal, the user can use the "/control/cout/ignoreThreadsExcept + {THREADNUM}" command. + +5 - STEPPING + + Within the "SteppingAction" class relevant information about the particle's + state are stored in Tuples [2], defined in the "HistoManager" class. + The tuples contain the following information: + 1. event ID + 2. volume name + 3. track ID + 4. coordinates (x,y,z) + 5. angles (theta, phi) + 6. process name + 7. parent ID + 8. the number of internal reflections whenever the particle reaches one of the + dummy volumes defined above. + +6 - ANALYSIS + + Xray_SiliconPoreOptics provides an analysis macro example (analysis.C) to + visualize data in the following representations: + - a histogram for the normalized efficiency for Theta and Phi; + - a pie chart for the number of reflections inside the pore. + The normalized efficiency serves to observe the angular distribution of the + exiting protons, normalized over the total entering particles. A proton is + selected if it enters the first volume (pore entrance), exits from the second + empty volume (pore exit) and enters the sphere at the detector side (the + hemisphere below the pore). No pore interaction is required. + The pie chart reports the number of reflections with the highest probability. + +7 - VISUALISATION + + The visualisation manager is set via the G4VisExecutive class in the main() + function in xray_SiliconPoreOptics.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. + +-------------------------------------------------------------------------------- + +References + + [1] Fioretti V et al. "The Geant4 mass model of the ATHENA Silicon Pore Optics + and its effect on soft proton scattering", Space Telescopes and Instrumentation + 2018: Ultraviolet to Gamma Ray. Vol. 10699. SPIE, 2018. + [2] BRUN, René, et al. "The ROOT Users Guide". CERN, http://root.cern.ch, 2003. + diff --git a/examples/advanced/xray_SiliconPoreOptics/SiliconPoreOptics.out b/examples/advanced/xray_SiliconPoreOptics/SiliconPoreOptics.out new file mode 100644 index 00000000000..2f7a9081c89 --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/SiliconPoreOptics.out @@ -0,0 +1,870 @@ +Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Forcing G4RunManager type... + + ############################################ + !!! WARNING - FPE detection is activated !!! + ############################################ + + + ################################ + !!! G4Backtrace is activated !!! + ################################ + + +************************************************************** + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) + Copyright : Geant4 Collaboration + References : NIM A 506 (2003), 250-303 + : IEEE-TNS 53 (2006), 270-278 + : NIM A 835 (2016), 186-225 + WWW : http://geant4.org/ +************************************************************** + +Visualization Manager instantiating with verbosity "warnings (3)"... +Visualization Manager initialising... +Registering graphics systems... + +You have successfully registered the following graphics systems. +Registered graphics systems are: + ASCIITree (ATree) + DAWNFILE (DAWNFILE) + G4HepRepFile (HepRepFile) + RayTracer (RayTracer) + VRML2FILE (VRML2FILE) + gMocrenFile (gMocrenFile) + TOOLSSG_OFFSCREEN (TSG_OFFSCREEN) + TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE) + OpenGLImmediateQt (OGLIQt, OGLI) + OpenGLStoredQt (OGLSQt, OGL, OGLS) + OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK) + OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK) + OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK) + OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK) + RayTracerX (RayTracerX) + Qt3D (Qt3D) + TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) + TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) + TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) + +Registering model factories... + +You have successfully registered the following model factories. +Registered model factories: + generic + drawByAttribute + drawByCharge + drawByOriginVolume + drawByParticleID + drawByEncounteredVolume + +Registered models: + None + +Registered filter factories: + attributeFilter + chargeFilter + originVolumeFilter + particleFilter + encounteredVolumeFilter + +Registered filters: + None + +You have successfully registered the following user vis actions. +Run Duration User Vis Actions: none +End of Event User Vis Actions: none +End of Run User Vis Actions: none + +Some /vis commands (optionally) take a string to specify colour. +"/vis/list" to see available colours. +PhysicsList::AddPhysicsList: +X - Defining SpacePhysics, no hadronic part +---> Using G4EmStandard_SpacePhysics v. 11.03 +Build geometry from GDML file: pores.gdml +G4GDML: Reading 'pores.gdml'... +G4GDML: Reading definitions... +G4GDML: Reading materials... +G4Material WARNING: duplicate name of material Galactic +G4GDML: Reading solids... +G4GDML: Reading structure... +G4GDML: Reading setup... +G4GDML: Reading 'pores.gdml' done! +Stripping off GDML names of materials, solids and volumes ... +Adding volumes to the InnerRegion +======================================================================= +====== Electromagnetic Physics Parameters ======== +======================================================================= +LPM effect enabled 1 +Enable creation and use of sampling tables 0 +Apply cuts on all EM processes 0 +Use combined TransportationWithMsc Disabled +Use general process 0 +Enable linear polarisation for gamma 0 +Enable photoeffect sampling below K-shell 1 +Enable sampling of quantum entanglement 0 +X-section factor for integral approach 0.8 +Min kinetic energy for tables 100 eV +Max kinetic energy for tables 100 TeV +Number of bins per decade of a table 20 +Verbose level 1 +Verbose level for worker thread 0 +Bremsstrahlung energy threshold above which + primary e+- is added to the list of secondary 100 TeV +Bremsstrahlung energy threshold above which primary + muon/hadron is added to the list of secondary 100 TeV +Lowest triplet kinetic energy 1 MeV +Enable sampling of gamma linear polarisation 0 +5D gamma conversion model type 0 +5D gamma conversion model on isolated ion 0 +Livermore data directory epics_2017 +======================================================================= +====== Ionisation Parameters ======== +======================================================================= +Step function for e+- (0.2, 0.01 mm) +Step function for muons/hadrons (0.05, 1e-05 mm) +Step function for light ions (0.1, 0.02 mm) +Step function for general ions (0.1, 0.001 mm) +Lowest e+e- kinetic energy 50 eV +Lowest muon/hadron kinetic energy 1 keV +Use ICRU90 data 1 +Fluctuations of dE/dx are enabled 1 +Type of fluctuation model for leptons and hadrons Universal +Use built-in Birks satuaration 0 +Build CSDA range enabled 1 +Use cut as a final range enabled 0 +Enable angular generator interface 1 +Max kinetic energy for CSDA tables 1 GeV +Max kinetic energy for NIEL computation 1 MeV +Linear loss limit 0.01 +Read data from file for e+e- pair production by mu 0 +======================================================================= +====== Multiple Scattering Parameters ======== +======================================================================= +Type of msc step limit algorithm for e+- 2 +Type of msc step limit algorithm for muons/hadrons 0 +Msc lateral displacement for e+- enabled 1 +Msc lateral displacement for muons and hadrons 1 +Urban msc model lateral displacement alg96 1 +Range factor for msc step limit for e+- 0.08 +Range factor for msc step limit for muons/hadrons 0.2 +Geometry factor for msc step limitation of e+- 2.5 +Safety factor for msc step limit for e+- 0.6 +Skin parameter for msc step limitation of e+- 3 +Lambda limit for msc step limit for e+- 1 mm +Use Mott correction for e- scattering 1 +Factor used for dynamic computation of angular + limit between single and multiple scattering 1 +Fixed angular limit between single + and multiple scattering 0 rad +Upper energy limit for e+- multiple scattering 100 MeV +Type of electron single scattering model 0 +Type of nuclear form-factor 1 +Screening factor 1 +======================================================================= +====== Atomic Deexcitation Parameters ======== +======================================================================= +Fluorescence enabled 1 +Directory in G4LEDATA for fluorescence data files fluor +Auger electron cascade enabled 0 +PIXE atomic de-excitation enabled 0 +De-excitation module ignores cuts 0 +Type of PIXE cross section for hadrons Empirical +Type of PIXE cross section for e+- Livermore +======================================================================= + +### === Deexcitation model UAtomDeexcitation is activated for 2 regions: + DefaultRegionForTheWorld 0 0 0 + InnerRegion 1 1 1 +### === Ignore cuts flag: 0 + +phot: for gamma SubType=12 BuildTable=0 + LambdaPrime table from 200 keV to 100 TeV in 174 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermorePhElectric : Emin= 0 eV Emax= 100 TeV SauterGavrila Fluo + +compt: for gamma SubType=13 BuildTable=1 + Lambda table from 100 eV to 1 MeV, 20 bins/decade, spline: 1 + LambdaPrime table from 1 MeV to 100 TeV in 160 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LowEPComptonModel : Emin= 0 eV Emax= 20 MeV Fluo + KleinNishina : Emin= 20 MeV Emax= 100 TeV Fluo + +conv: for gamma SubType=14 BuildTable=1 + Lambda table from 1.022 MeV to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + BetheHeitler5D : Emin= 0 eV Emax= 100 TeV ModifiedTsai + +Rayl: for gamma SubType=11 BuildTable=1 + Lambda table from 100 eV to 150 keV, 20 bins/decade, spline: 0 + LambdaPrime table from 150 keV to 100 TeV in 176 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermoreRayleigh : Emin= 0 eV Emax= 100 TeV CullenGenerator + +msc: for e- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + GoudsmitSaunderson : Emin= 0 eV Emax= 100 MeV Nbins=120 100 eV - 100 MeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=120 100 MeV - 100 TeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +eIoni: for e- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.2, 0.01 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LowEnergyIoni : Emin= 0 eV Emax= 100 keV deltaVI + MollerBhabha : Emin= 100 keV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +eBrem: for e- XStype:4 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eBremSB : Emin= 0 eV Emax= 1 GeV AngularGen2BS + eBremLPM : Emin= 1 GeV Emax= 100 TeV AngularGen2BS + +ePairProd: for e- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 25x1001 from 0.1 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ePairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for e- XStype:3 SubType=1 BuildTable=1 + Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 100 MeV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for e- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for e+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + GoudsmitSaunderson : Emin= 0 eV Emax= 100 MeV Nbins=120 100 eV - 100 MeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=120 100 MeV - 100 TeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +eIoni: for e+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.2, 0.01 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + PenIoni : Emin= 0 eV Emax= 100 keV + MollerBhabha : Emin= 100 keV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +eBrem: for e+ XStype:4 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eBremSB : Emin= 0 eV Emax= 1 GeV AngularGen2BS + eBremLPM : Emin= 1 GeV Emax= 100 TeV AngularGen2BS + +ePairProd: for e+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 25x1001 from 0.1 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ePairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +annihil: for e+ XStype:2 SubType=5 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eplus2gg : Emin= 0 eV Emax= 100 TeV + +CoulombScat: for e+ XStype:3 SubType=1 BuildTable=1 + Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 100 MeV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for e+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for proton SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for proton XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax= 2 MeV deltaVI + BetheBloch : Emin= 2 MeV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +hBrems: for proton XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for proton XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 17x1001 from 7.50618 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for proton XStype:3 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +nuclearStopping: for proton SubType=8 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV + +SingleCoulombScat: for proton XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for GenericIon SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + UrbanMsc : Emin= 0 eV Emax= 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +ionIoni: for GenericIon XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.001 mm), integ: 3, fluct: 1, linLossLim= 0.02 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ParamICRU73 : Emin= 0 eV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +nuclearStopping: for GenericIon SubType=8 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV + +SingleCoulombScat: for GenericIon XStype:2 SubType=1 BuildTable=0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== +IonCoulombScattering : Emin= 0 eV Emax= 100 TeV +====================================================================== +====== Radioactive Decay Physics Parameters ======= +====================================================================== +min MeanLife (from G4NuclideTable) 1 ns +Max life time (from G4DeexPrecoParameters) 1 ns +Internal e- conversion flag 1 +Stored internal conversion coefficients 0 +Enabled atomic relaxation mode 1 +Enable correlated gamma emission 0 +Max 2J for sampling of angular correlations 10 +Atomic de-excitation enabled 1 +Auger electron emission enabled 0 +Check EM cuts disabled for atomic de-excitation 0 +Use Bearden atomic level energies 0 +Use ANSTO fluorescence model 0 +Threshold for very long decay time at rest 3.171e+10 y +====================================================================== + +msc: for alpha SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + UrbanMsc : Emin= 0 eV Emax= 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +ionIoni: for alpha XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.02 mm), integ: 3, fluct: 1, linLossLim= 0.02 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + BraggIon : Emin= 0 eV Emax=7.9452 MeV deltaVI + BetheBloch : Emin=7.9452 MeV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +nuclearStopping: for alpha SubType=8 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV + +SingleCoulombScat: for alpha XStype:2 SubType=1 BuildTable=0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== +IonCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for anti_proton SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for anti_proton XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax= 2 MeV deltaVI + BetheBloch : Emin= 2 MeV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +hBrems: for anti_proton XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for anti_proton XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 17x1001 from 7.50618 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for anti_proton XStype:3 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for anti_proton XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for kaon+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for kaon+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=1.05231 MeV deltaVI + BetheBloch : Emin=1.05231 MeV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +hBrems: for kaon+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for kaon+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 18x1001 from 3.94942 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for kaon+ XStype:3 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for kaon+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for kaon- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for kaon- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=1.05231 MeV deltaVI + BetheBloch : Emin=1.05231 MeV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +hBrems: for kaon- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for kaon- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 18x1001 from 3.94942 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for kaon- XStype:3 SubType=1 BuildTable=1 + Used Lambda table of kaon+ + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for kaon- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for mu+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +muIoni: for mu+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax= 200 keV deltaVI + MuBetheBloch : Emin= 200 keV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +muBrems: for mu+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +muPairProd: for mu+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 21x1001 from 0.85 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for mu+ XStype:3 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for mu+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for mu- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +muIoni: for mu- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax= 200 keV deltaVI + MuBetheBloch : Emin= 200 keV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +muBrems: for mu- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +muPairProd: for mu- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 21x1001 from 0.85 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for mu- XStype:3 SubType=1 BuildTable=1 + Used Lambda table of mu+ + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for mu- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for pi+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for pi+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=297.505 keV deltaVI + BetheBloch : Emin=297.505 keV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +hBrems: for pi+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for pi+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 20x1001 from 1.11656 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for pi+ XStype:3 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for pi+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for pi- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for pi- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=297.505 keV deltaVI + BetheBloch : Emin=297.505 keV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +hBrems: for pi- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for pi- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 20x1001 from 1.11656 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for pi- XStype:3 SubType=1 BuildTable=1 + Used Lambda table of pi+ + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for pi- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : Galactic + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : galactic_vacuum + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 2 used in the geometry : Yes + Material : silicon_metal + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 6.93672 keV e- 546.311 keV e+ 525.593 keV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +G4VisManager: Using G4TrajectoryDrawByCharge as fallback trajectory model. +See commands in /vis/modeling/trajectories/ for other options. +### Run 0 starts. + +-------- WWWW ------- G4Exception-START -------- WWWW ------- +*** G4Exception : Analysis_W001 + issued by : G4RootNtupleFileManager::SetNtupleMergingMode +Merging ntuples is not applicable in sequential application. +Setting was ignored. +*** This is just a warning message. *** +-------- WWWW -------- G4Exception-END --------- WWWW ------- + +... set ntuple merging row mode : row-wise - done +... create file : output.root - done +... open analysis file : output.root - done +... open analysis file : output.root - done +--> Event 0 starts. +--> Event 100 starts. +--> Event 200 starts. +--> Event 300 starts. +--> Event 400 starts. +--> Event 500 starts. +--> Event 600 starts. +--> Event 700 starts. +--> Event 800 starts. +--> Event 900 starts. +--> Event 1000 starts. +--> Event 1100 starts. +--> Event 1200 starts. +--> Event 1300 starts. +--> Event 1400 starts. +--> Event 1500 starts. +--> Event 1600 starts. +--> Event 1700 starts. +--> Event 1800 starts. +--> Event 1900 starts. +--> Event 2000 starts. +--> Event 2100 starts. +--> Event 2200 starts. +--> Event 2300 starts. +--> Event 2400 starts. +--> Event 2500 starts. +--> Event 2600 starts. +--> Event 2700 starts. +--> Event 2800 starts. +--> Event 2900 starts. +--> Event 3000 starts. +--> Event 3100 starts. +--> Event 3200 starts. +--> Event 3300 starts. +--> Event 3400 starts. +--> Event 3500 starts. +--> Event 3600 starts. +--> Event 3700 starts. +--> Event 3800 starts. +--> Event 3900 starts. +--> Event 4000 starts. +--> Event 4100 starts. +--> Event 4200 starts. +--> Event 4300 starts. +--> Event 4400 starts. +--> Event 4500 starts. +--> Event 4600 starts. +--> Event 4700 starts. +--> Event 4800 starts. +--> Event 4900 starts. + Run terminated. +Run Summary + Number of events processed : 5000 + User=26.670000s Real=26.827406s Sys=0.010000s +... write file : output.root - done +... close file : output.root - done +Graphics systems deleted. +Visualization Manager deleting... +================== Deleting memory pools =================== +Number of memory pools allocated: 11 of which, static: 0 +Dynamic pools deleted: 11 / Total memory freed: 0.019 MB +============================================================ diff --git a/examples/advanced/xray_SiliconPoreOptics/Xray_SiliconPoreOptics.cc b/examples/advanced/xray_SiliconPoreOptics/Xray_SiliconPoreOptics.cc new file mode 100644 index 00000000000..a3e867d07f2 --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/Xray_SiliconPoreOptics.cc @@ -0,0 +1,97 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file Xray_SiliconPoreOptics.cc +/// \brief Main program of the Xray_SiliconPoreOptics example +// +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include "G4Types.hh" + +#include "G4RunManagerFactory.hh" +#include "G4UImanager.hh" +#include "G4SteppingVerbose.hh" +#include "Randomize.hh" +#include "G4VisExecutive.hh" + +#include "XraySPODetectorConstruction.hh" +#include "XraySPOPhysicsList.hh" +#include "XraySPOActionInitialization.hh" + +#include "G4UIExecutive.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +int main(int argc,char** argv) { + + //detect interactive mode (if no arguments) and define UI session + G4UIExecutive* ui = nullptr; + if (argc == 1) ui = new G4UIExecutive(argc,argv); + + //Creating run manager + auto runManager = G4RunManagerFactory::CreateRunManager(); + runManager->SetNumberOfThreads(8); + + //set mandatory initialization classes + runManager->SetUserInitialization(new XraySPODetectorConstruction); + + auto *phys = new XraySPOPhysicsList; + runManager->SetUserInitialization(phys); + + runManager->SetUserInitialization(new XraySPOActionInitialization()); + + // Visualization manager construction + auto visManager = new G4VisExecutive; + visManager->Initialize(); + + // Get the pointer to the User Interface manager + G4UImanager* UImanager = G4UImanager::GetUIpointer(); + + if(!ui) + { + // batch mode + G4String command = "/control/execute "; + G4String fileName = argv[1]; + UImanager->ApplyCommand(command+fileName); + } + else + { + // interactive mode + UImanager->ApplyCommand("/control/execute init_vis.mac"); + ui->SessionStart(); + delete ui; + } + + + //job termination + delete visManager; + delete runManager; + + return 0; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/xray_SiliconPoreOptics/Xray_SiliconPoreOptics.out b/examples/advanced/xray_SiliconPoreOptics/Xray_SiliconPoreOptics.out new file mode 100644 index 00000000000..87a5901cca6 --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/Xray_SiliconPoreOptics.out @@ -0,0 +1,882 @@ + +************************************************************** + Geant4 version Name: geant4-11-01-ref-03 [MT] (31-March-2023) + << in Multi-threaded mode >> + Copyright : Geant4 Collaboration + References : NIM A 506 (2003), 250-303 + : IEEE-TNS 53 (2006), 270-278 + : NIM A 835 (2016), 186-225 + WWW : http://geant4.org/ +************************************************************** + +Visualization Manager instantiating with verbosity "warnings (3)"... +Visualization Manager initialising... +Registering graphics systems... + +You have successfully registered the following graphics systems. +Registered graphics systems are: + ASCIITree (ATree) + DAWNFILE (DAWNFILE) + G4HepRepFile (HepRepFile) + RayTracer (RayTracer) + VRML2FILE (VRML2FILE) + gMocrenFile (gMocrenFile) + TOOLSSG_OFFSCREEN (TSG_OFFSCREEN) + TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE) + OpenGLImmediateQt (OGLIQt, OGLI) + OpenGLStoredQt (OGLSQt, OGL, OGLS) + OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK) + OpenGLStoredX (OGLSX, OGLSQt_FALLBACK) + TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_QT_GLES_FALLBACK) + TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + +Registering model factories... + +You have successfully registered the following model factories. +Registered model factories: + generic + drawByAttribute + drawByCharge + drawByOriginVolume + drawByParticleID + drawByEncounteredVolume + +Registered models: + None + +Registered filter factories: + attributeFilter + chargeFilter + originVolumeFilter + particleFilter + encounteredVolumeFilter + +Registered filters: + None + +You have successfully registered the following user vis actions. +Run Duration User Vis Actions: none +End of Event User Vis Actions: none +End of Run User Vis Actions: none + +Some /vis commands (optionally) take a string to specify colour. +"/vis/list" to see available colours. +/run/verbose 1 +#/tracking/verbose 1 +# Read the detector +/xrayopt/det/readGDML pores.gdml +# Define the physics list +/testem/phys/addPhysics SpacePhysics +PhysicsList::AddPhysicsList: +X - Defining SpacePhysics, no hadronic part +---> Using G4EmStandard_SpacePhysics v. 11.03 +/process/em/AddEmRegion InnerRegion G4EmStandardSS +# +/run/initialize + +========================================================================================== +G4TaskRunManager :: Using G4ThreadPool... +========================================================================================== + + - Building geometry from gdml file: pores.gdml +G4GDML: Reading 'pores.gdml'... +G4GDML: Reading definitions... +G4GDML: Reading materials... +G4Material WARNING: duplicate name of material Galactic +G4GDML: Reading solids... +G4GDML: Reading structure... +G4GDML: Reading setup... +G4GDML: Reading 'pores.gdml' done! +Stripping off GDML names of materials, solids and volumes ... +Volumes imported in the PhysicalVolumeStore: +Added: logPlate +Volume 0: logPlate +Volume 1: pBigMotherSPO +Volume 2: pDummySphere +Volume 3: pDummyEntrance +Volume 4: pDummyExit +Volume 5: World_PV +/run/physicsModified +======================================================================= +====== Electromagnetic Physics Parameters ======== +======================================================================= +LPM effect enabled 1 +Enable creation and use of sampling tables 0 +Apply cuts on all EM processes 0 +Use combined TransportationWithMsc Disabled +Use general process 0 +Enable linear polarisation for gamma 0 +Enable photoeffect sampling below K-shell 1 +Enable sampling of quantum entanglement 0 +X-section factor for integral approach 0.8 +Min kinetic energy for tables 100 eV +Max kinetic energy for tables 100 TeV +Number of bins per decade of a table 20 +Verbose level 1 +Verbose level for worker thread 0 +Bremsstrahlung energy threshold above which + primary e+- is added to the list of secondary 100 TeV +Bremsstrahlung energy threshold above which primary + muon/hadron is added to the list of secondary 100 TeV +Lowest triplet kinetic energy 1 MeV +Enable sampling of gamma linear polarisation 0 +5D gamma conversion model type 0 +5D gamma conversion model on isolated ion 0 +Livermore data directory epics_2017 +======================================================================= +====== Ionisation Parameters ======== +======================================================================= +Step function for e+- (0.2, 0.01 mm) +Step function for muons/hadrons (0.05, 1e-05 mm) +Step function for light ions (0.1, 0.02 mm) +Step function for general ions (0.1, 0.001 mm) +Lowest e+e- kinetic energy 50 eV +Lowest muon/hadron kinetic energy 1 keV +Use ICRU90 data 1 +Fluctuations of dE/dx are enabled 1 +Type of fluctuation model for leptons and hadrons Universal +Use built-in Birks satuaration 0 +Build CSDA range enabled 1 +Use cut as a final range enabled 0 +Enable angular generator interface 1 +Max kinetic energy for CSDA tables 1 GeV +Max kinetic energy for NIEL computation 1 MeV +Linear loss limit 0.01 +Read data from file for e+e- pair production by mu 0 +======================================================================= +====== Multiple Scattering Parameters ======== +======================================================================= +Type of msc step limit algorithm for e+- 2 +Type of msc step limit algorithm for muons/hadrons 0 +Msc lateral displacement for e+- enabled 1 +Msc lateral displacement for muons and hadrons 1 +Urban msc model lateral displacement alg96 1 +Range factor for msc step limit for e+- 0.08 +Range factor for msc step limit for muons/hadrons 0.2 +Geometry factor for msc step limitation of e+- 2.5 +Safety factor for msc step limit for e+- 0.6 +Skin parameter for msc step limitation of e+- 3 +Lambda limit for msc step limit for e+- 1 mm +Use Mott correction for e- scattering 1 +Factor used for dynamic computation of angular + limit between single and multiple scattering 1 +Fixed angular limit between single + and multiple scattering 0 rad +Upper energy limit for e+- multiple scattering 100 MeV +Type of electron single scattering model 0 +Type of nuclear form-factor 1 +Screening factor 1 +======================================================================= +====== Atomic Deexcitation Parameters ======== +======================================================================= +Fluorescence enabled 1 +Directory in G4LEDATA for fluorescence data files fluor +Auger electron cascade enabled 0 +PIXE atomic de-excitation enabled 0 +De-excitation module ignores cuts 0 +Type of PIXE cross section for hadrons Empirical +Type of PIXE cross section for e+- Livermore +======================================================================= + +### === Deexcitation model UAtomDeexcitation is activated for 2 regions: + DefaultRegionForTheWorld 0 0 0 + InnerRegion 1 1 1 +### === Ignore cuts flag: 0 + +phot: for gamma SubType=12 BuildTable=0 + LambdaPrime table from 200 keV to 100 TeV in 174 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermorePhElectric : Emin= 0 eV Emax= 100 TeV SauterGavrila Fluo + +compt: for gamma SubType=13 BuildTable=1 + Lambda table from 100 eV to 1 MeV, 20 bins/decade, spline: 1 + LambdaPrime table from 1 MeV to 100 TeV in 160 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LowEPComptonModel : Emin= 0 eV Emax= 20 MeV Fluo + KleinNishina : Emin= 20 MeV Emax= 100 TeV Fluo + +conv: for gamma SubType=14 BuildTable=1 + Lambda table from 1.022 MeV to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + BetheHeitler5D : Emin= 0 eV Emax= 100 TeV ModifiedTsai + +Rayl: for gamma SubType=11 BuildTable=1 + Lambda table from 100 eV to 150 keV, 20 bins/decade, spline: 0 + LambdaPrime table from 150 keV to 100 TeV in 176 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermoreRayleigh : Emin= 0 eV Emax= 100 TeV CullenGenerator + +msc: for e- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + GoudsmitSaunderson : Emin= 0 eV Emax= 100 MeV Nbins=120 100 eV - 100 MeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=120 100 MeV - 100 TeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +eIoni: for e- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.2, 0.01 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LowEnergyIoni : Emin= 0 eV Emax= 100 keV deltaVI + MollerBhabha : Emin= 100 keV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +eBrem: for e- XStype:4 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eBremSB : Emin= 0 eV Emax= 1 GeV AngularGen2BS + eBremLPM : Emin= 1 GeV Emax= 100 TeV AngularGen2BS + +ePairProd: for e- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 25x1001; from 0.1 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ePairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for e- XStype:3 SubType=1 BuildTable=1 + Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 100 MeV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for e- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for e+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + GoudsmitSaunderson : Emin= 0 eV Emax= 100 MeV Nbins=120 100 eV - 100 MeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=120 100 MeV - 100 TeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +eIoni: for e+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.2, 0.01 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + PenIoni : Emin= 0 eV Emax= 100 keV + MollerBhabha : Emin= 100 keV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +eBrem: for e+ XStype:4 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eBremSB : Emin= 0 eV Emax= 1 GeV AngularGen2BS + eBremLPM : Emin= 1 GeV Emax= 100 TeV AngularGen2BS + +ePairProd: for e+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 25x1001; from 0.1 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ePairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +annihil: for e+ XStype:2 SubType=5 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eplus2gg : Emin= 0 eV Emax= 100 TeV + +CoulombScat: for e+ XStype:3 SubType=1 BuildTable=1 + Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 100 MeV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for e+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for proton SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for proton XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax= 2 MeV deltaVI + BetheBloch : Emin= 2 MeV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +hBrems: for proton XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for proton XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 17x1001; from 7.50618 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for proton XStype:3 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +nuclearStopping: for proton SubType=8 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV + +SingleCoulombScat: for proton XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for GenericIon SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + UrbanMsc : Emin= 0 eV Emax= 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +ionIoni: for GenericIon XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.001 mm), integ: 3, fluct: 1, linLossLim= 0.02 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ParamICRU73 : Emin= 0 eV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +nuclearStopping: for GenericIon SubType=8 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV + +SingleCoulombScat: for GenericIon XStype:2 SubType=1 BuildTable=0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== +IonCoulombScattering : Emin= 0 eV Emax= 100 TeV +====================================================================== +====== Radioactive Decay Physics Parameters ======= +====================================================================== +min MeanLife (from G4NuclideTable) 1 ns +Max life time (from G4DeexPrecoParameters) 1 ns +Internal e- conversion flag 1 +Stored internal conversion coefficients 0 +Enabled atomic relaxation mode 1 +Enable correlated gamma emission 0 +Max 2J for sampling of angular correlations 10 +Atomic de-excitation enabled 1 +Auger electron emission enabled 0 +Check EM cuts disabled for atomic de-excitation 0 +Use Bearden atomic level energies 0 +Use ANSTO fluorescence model 0 +Threshold for very long decay time at rest 3.171e+10 y +====================================================================== + +msc: for alpha SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + UrbanMsc : Emin= 0 eV Emax= 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +ionIoni: for alpha XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.02 mm), integ: 3, fluct: 1, linLossLim= 0.02 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + BraggIon : Emin= 0 eV Emax=7.9452 MeV deltaVI + BetheBloch : Emin=7.9452 MeV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +nuclearStopping: for alpha SubType=8 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV + +SingleCoulombScat: for alpha XStype:2 SubType=1 BuildTable=0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== +IonCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for anti_proton SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for anti_proton XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax= 2 MeV deltaVI + BetheBloch : Emin= 2 MeV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +hBrems: for anti_proton XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for anti_proton XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 17x1001; from 7.50618 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for anti_proton XStype:3 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for anti_proton XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for kaon+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for kaon+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=1.05231 MeV deltaVI + BetheBloch : Emin=1.05231 MeV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +hBrems: for kaon+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for kaon+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 18x1001; from 3.94942 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for kaon+ XStype:3 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for kaon+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for kaon- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for kaon- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=1.05231 MeV deltaVI + BetheBloch : Emin=1.05231 MeV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +hBrems: for kaon- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for kaon- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 18x1001; from 3.94942 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for kaon- XStype:3 SubType=1 BuildTable=1 + Used Lambda table of kaon+ + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for kaon- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for mu+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +muIoni: for mu+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax= 200 keV deltaVI + MuBetheBloch : Emin= 200 keV Emax= 100 TeV + CSDA range table up to 1 GeV in 140 bins + +muBrems: for mu+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +muPairProd: for mu+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 21x1001; from 0.85 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for mu+ XStype:3 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for mu+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for mu- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +muIoni: for mu- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax= 200 keV deltaVI + MuBetheBloch : Emin= 200 keV Emax= 100 TeV + CSDA range table up to 1 GeV in 140 bins + +muBrems: for mu- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +muPairProd: for mu- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 21x1001; from 0.85 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for mu- XStype:3 SubType=1 BuildTable=1 + Used Lambda table of mu+ + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for mu- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for pi+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for pi+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=297.505 keV deltaVI + BetheBloch : Emin=297.505 keV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +hBrems: for pi+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for pi+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 20x1001; from 1.11656 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for pi+ XStype:3 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for pi+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for pi- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for pi- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=297.505 keV deltaVI + BetheBloch : Emin=297.505 keV Emax= 100 TeV deltaVI + CSDA range table up to 1 GeV in 140 bins + +hBrems: for pi- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for pi- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 20x1001; from 1.11656 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for pi- XStype:3 SubType=1 BuildTable=1 + Used Lambda table of pi+ + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for pi- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +========================================================================= +--> G4TaskRunManager::CreateAndStartWorkers() --> Initializing workers... +========================================================================= + +G4WT0 > /run/verbose 1 +G4WT0 > /xrayopt/det/readGDML pores.gdml +G4WT0 > /run/initialize +G4WT0 > /run/physicsModified +G4WT0 > /control/verbose 2 +G4WT0 > /run/verbose 1 +G4WT0 > /xrayopt/det/readGDML pores.gdml +G4WT0 > /run/initialize +G4WT0 > /run/physicsModified +# Define the particle gun +/gps/particle proton +/gps/pos/type Plane +/gps/pos/shape Square +/gps/pos/centre 25.8491 0.0585 10.1514 cm +/gps/pos/halfx 0.0303 cm +/gps/pos/halfy 0.0415 cm +/gps/ang/type cos +/gps/ang/mintheta 0 deg +/gps/ang/maxtheta 1 deg +/gps/energy 100.0 keV +# Define the analys file name +/analysis/setFileName output.root +/run/printProgress 100 +/run/beamOn 1000 + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : Galactic + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : galactic_vacuum + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 2 used in the geometry : Yes + Material : silicon_metal + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 6.93672 keV e- 546.311 keV e+ 525.593 keV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + InnerRegion + +================================================================== + +G4VisManager: Using G4TrajectoryDrawByCharge as fallback trajectory model. +See commands in /vis/modeling/trajectories/ for other options. +### Run 0 starts. +... set ntuple merging row mode : row-wise - done +... create file : output.root - done +... open analysis file : output.root - done +... open main analysis file : output.root - done +G4WT0 > /analysis/setFileName output.root +G4WT0 > /run/printProgress 100 + +========================================================================================== +--> G4TaskRunManager::CreateAndStartWorkers() --> Creating 32 tasks with 31 events/task... +========================================================================================== + +G4WT0 > ### Run 0 starts on worker thread 0. +G4WT0 > ... set ntuple merging row mode : row-wise - done +G4WT0 > --> Event 0 starts with initial seeds (15470735,58711377). +G4WT0 > --> Event 100 starts with initial seeds (94651619,77817948). +G4WT0 > --> Event 200 starts with initial seeds (54325673,23191597). +G4WT0 > --> Event 300 starts with initial seeds (61861915,89974803). +G4WT0 > --> Event 400 starts with initial seeds (54454752,3743942). +G4WT0 > --> Event 500 starts with initial seeds (11481005,71149785). +G4WT0 > --> Event 600 starts with initial seeds (37844090,80676144). +G4WT0 > --> Event 700 starts with initial seeds (53737979,40459558). +G4WT0 > --> Event 800 starts with initial seeds (17870526,37945701). +G4WT0 > --> Event 900 starts with initial seeds (46299214,3661534). +G4WT0 > [thread 0] Thread-local run terminated. +G4WT0 > [thread 0] Run Summary +G4WT0 > [thread 0] Number of events processed : 1000 +G4WT0 > [thread 0] User=0.000000s Real=0.000078s Sys=0.000000s [Cpu=0.0%] +G4WT0 > ... merge all h1 - done +G4WT0 > ... merge all h2 - done +G4WT0 > ... merge all h3 - done +G4WT0 > ... merge all p1 - done +G4WT0 > ... merge all p2 - done +G4WT0 > ... merge slave ntuples - done + Run terminated. +Run Summary + Number of events processed : 1000 + User=4.010000s Real=4.022311s Sys=0.010000s [Cpu=99.9%] +... merge main ntuples - done +... write file : output.root - done +... close file : output.root - done +Graphics systems deleted. +Visualization Manager deleting... +G4WT0 > /analysis/h1/getVector +G4WT0 > /analysis/h2/getVector +G4WT0 > ================== Deleting memory pools =================== +G4WT0 > Number of memory pools allocated: 9; of which, static: 0 +G4WT0 > Dynamic pools deleted: 9 / Total memory freed: 0.014 MB +G4WT0 > ============================================================ +================== Deleting memory pools =================== +Number of memory pools allocated: 5; of which, static: 0 +Dynamic pools deleted: 5 / Total memory freed: 0.0077 MB +============================================================ diff --git a/examples/advanced/xray_SiliconPoreOptics/analysis/README.txt b/examples/advanced/xray_SiliconPoreOptics/analysis/README.txt new file mode 100644 index 00000000000..1c5b588ca1d --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/analysis/README.txt @@ -0,0 +1,4 @@ +1. Compile with: + make +2. launch with: + ./analysis ../filename.root diff --git a/examples/advanced/xray_SiliconPoreOptics/analysis/analysis.C b/examples/advanced/xray_SiliconPoreOptics/analysis/analysis.C new file mode 100644 index 00000000000..0f4c1ead9ed --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/analysis/analysis.C @@ -0,0 +1,233 @@ +#include "TROOT.h" +#include "TTree.h" +#include "TCanvas.h" +#include "TBranch.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "TLegend.h" +#include "TApplication.h" +#include "TString.h" +#include +#include "TPie.h" + +using namespace std; +TApplication myapp("app",NULL,NULL); + +const double pi = 3.14159; +double to_deg(double angle) +{ + return angle * 180 / pi; +} + +////////////////////////////////////////////////////// + +int main(int argc, char *argv[]){ + // input = ASCII data filename + string ifilename = ""; + + if(argc == 1) + { + cout << "No input file selected. Please use: ./read_tree_spectrum [input_file.root]" << endl; + return 0; + } + else + { + ifilename = argv[1]; + } + TString ifilenameforroot = ifilename; + + // create the file, the Tree and a few branches + TFile *f = new TFile(ifilenameforroot, "READ"); + TTree *mytree = (TTree*)f->Get("XraySPO"); // name of the ntuple in the rootfile + + // create variables to store column values + int eventID = 0; + int trackID = 0; + double x = 0; + double y = 0; + double z = 0; + double theta = 0; + double phi = 0; + int parentID = 0; + char vol_name[500]; + char proc_name[500]; + int num_reflections = 0; + + mytree->SetBranchAddress("eventID", &eventID); + mytree->SetBranchAddress("vol_name", &vol_name); + mytree->SetBranchAddress("trackID", &trackID); + mytree->SetBranchAddress("x", &x); + mytree->SetBranchAddress("y", &y); + mytree->SetBranchAddress("z", &z); + mytree->SetBranchAddress("theta", &theta); + mytree->SetBranchAddress("phi", &phi); + mytree->SetBranchAddress("proc_name", &proc_name); + mytree->SetBranchAddress("parentID", &parentID); + mytree->SetBranchAddress("num_reflections", &num_reflections); + + int bin_theta = 50; + int bin_phi = 100; + + int min_val_theta = 0; + int max_val_theta = 5; + int min_val_phi = -100; + int max_val_phi = 100; + + double bin_width_theta = (max_val_theta-min_val_theta)/(double)bin_theta; + double bin_width_phi = (max_val_phi-min_val_phi)/(double)bin_phi; + + TH1D *angle_theta = new TH1D ("theta", "Efficiency - theta [deg]", bin_theta, min_val_theta, max_val_theta); + TH1D *angle_phi = new TH1D ("phi", "Efficiency - phi [deg]", bin_phi, min_val_phi, max_val_phi); + + TH1I *reflections = new TH1I ("reflections", "Number of reflections", 8, -1.5, 6.5); + + // Read all entries and fill the histograms + Long64_t nentries = mytree->GetEntries(); + cout << "Reading " << nentries << " from the TTree." << endl; + + int trackID_old = 0; + + bool passed_entrance = false; + bool passed_exit = false; + int eventID_old = 0; + + int check = -999; + + int count_enter = 0; + int count_exit = 0; + + double theta_exit = 0 ; + double phi_exit = 0; + + // std::string new_particle_event = ""; + for (Long64_t i=0; iGetEntry(i); + if (eventID != eventID_old || eventID == 0) + { + passed_entrance = false; + passed_exit = false; + + if ((string)vol_name == "pDummyEntrance") + { + passed_entrance = true; + passed_exit = false; + count_enter += 1; + } + } + else + { + if ((string)vol_name == "pDummyExit" && passed_entrance == true) + { + // Plot the angle at the + theta_exit = theta; + phi_exit = phi; + passed_exit = true; + } + + if (passed_exit) + { + if ((string)vol_name == "pDummySphere") + { + passed_entrance = false; + passed_exit = false; + + if (num_reflections < 1) num_reflections = -1; + reflections->Fill(num_reflections); + + // Check if the eventID has not already been counted before + if (eventID == check) cout << "Evento uguale! " << endl; + + theta_exit = pi-theta_exit; + if (phi_exit <= 0) phi_exit = -pi-phi_exit; + else phi_exit = pi-phi_exit; + + if (theta_exit >= min_val_theta && theta_exit <= max_val_theta) + { + if (phi_exit >= min_val_phi && phi_exit <= max_val_phi) + { + count_exit+=1; + angle_theta->Fill(to_deg(theta_exit)); + angle_phi->Fill(to_deg(phi_exit)); + } + } + check = eventID; + } + } + } + eventID_old = eventID; + } + + // pie chart + Float_t val0 = reflections->GetBinContent(1); // number of entries with 0 reflections + Float_t val2 = reflections->GetBinContent(3); // number of entries with 1 reflection + Float_t val3 = reflections->GetBinContent(4); + Float_t val4 = reflections->GetBinContent(5); + Float_t val5 = reflections->GetBinContent(6) + reflections->GetBinContent(7); // value for 4+ reflections + cout << "Values are: " << val0 << " " << val2 << " " << val3 << " " << val4 << " " << val5 << " " << endl; + + + Float_t vals[] = {val0,val2,val3,val4,val5}; + Int_t colors[] = {0,1,2,3,4}; + Int_t nvals = sizeof(vals)/sizeof(vals[0]); + + TCanvas *cpie = new TCanvas("cpie", "cpie", 0, 0, 900, 900); + TPie *pie1 = new TPie("pie1", "100 keV, 1deg., SS model",nvals,vals,colors); + pie1->SetLabelsOffset(.01); + pie1->SetRadius(.2); + + pie1->SetEntryLabel(0, "0"); + pie1->SetEntryLabel(1, "1"); + pie1->SetEntryLabel(2, "2"); + pie1->SetEntryLabel(3, "3"); + pie1->SetEntryLabel(4, ">3"); + pie1->SetLabelFormat("%txt (%perc)"); + pie1->Draw(); + + // Normalization + cout << "Count particle: " << endl; + angle_theta->Scale(1.0/((double)count_enter)); + angle_phi->Scale(1.0/((double)count_enter)); + angle_theta->Scale(1.0/(bin_width_theta)); + angle_phi->Scale(1.0/(bin_width_phi)); + + TCanvas *c1 = new TCanvas("c1", "c1", 0, 50, 900, 900); + int c1_id = c1->GetCanvasID(); + cout << "The first canvas ID is: " << c1_id << endl; + c1->SetLogy(); + angle_theta->SetFillColor(kBlack); + angle_theta->SetMarkerColor(kBlack); + angle_theta->Draw(""); + angle_theta->GetXaxis()->SetTitle("Theta [deg]"); + angle_theta->GetYaxis()->SetTitle("Normalized efficiency [deg^-1]"); + angle_theta->GetXaxis()->SetTitleSize(0.03); + angle_theta->GetYaxis()->SetTitleSize(0.03); + cout << "integral of angle_theta from histo:" << angle_theta->Integral() << " and from fraction: " << count_exit/count_enter << endl; + + TCanvas *c2 = new TCanvas("c2", "c2", 0, 100, 900, 900); + int c2_id = c2->GetCanvasID(); + cout << "The second canvas ID is: " << c2_id << endl; + c2->SetLogy(); + angle_phi->SetFillColor(kBlack); + angle_phi->SetMarkerColor(kBlack); + angle_phi->Draw(""); + angle_phi->GetXaxis()->SetTitle("Phi [deg]"); + angle_phi->GetYaxis()->SetTitle("Normalized efficiency [deg^-1]"); + angle_phi->GetXaxis()->SetTitleSize(0.03); + angle_phi->GetYaxis()->SetTitleSize(0.03); + cout << "integral of angle_phi is:" << angle_theta->Integral() << " and from fraction: " << count_exit/count_enter << endl; + + myapp.Run(true); + + f->Close(); + return 0; +} diff --git a/examples/advanced/xray_SiliconPoreOptics/include/G4EmStandardPhysics_SpacePhysics.hh b/examples/advanced/xray_SiliconPoreOptics/include/G4EmStandardPhysics_SpacePhysics.hh new file mode 100644 index 00000000000..423ac9d35ca --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/include/G4EmStandardPhysics_SpacePhysics.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. * +// ******************************************************************** +// +// ClassName: G4EmStandardPhysics_SpacePhysics +// +// This class provides construction of EM physics using the best models +// of standard and low-energy packages and set of +// the most adavced options allowing precise simulation at low +// and intermediate energies +// +// Authors: P.Dondero (paolo.dondero@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef G4EmStandardPhysics_SpacePhysics_h +#define G4EmStandardPhysics_SpacePhysics_h 1 + +#include "G4VPhysicsConstructor.hh" +#include "globals.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class G4EmStandardPhysics_SpacePhysics : public G4VPhysicsConstructor +{ + public: + + G4EmStandardPhysics_SpacePhysics(G4int ver=1, const G4String& name=""); + ~G4EmStandardPhysics_SpacePhysics() override = default; + void ConstructParticle() override; + void ConstructProcess() override; + + private: + + G4int fVerbose; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/xray_SiliconPoreOptics/include/XraySPOActionInitialization.hh b/examples/advanced/xray_SiliconPoreOptics/include/XraySPOActionInitialization.hh new file mode 100644 index 00000000000..af89cfab997 --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/include/XraySPOActionInitialization.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. * +// ******************************************************************** +// +// +/// \file XraySPOActionInitialization.hh +/// \brief Definition of the ActionInitialization class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XraySPOActionInitialization_h +#define XraySPOActionInitialization_h 1 + +#include "G4VUserActionInitialization.hh" + +class XraySPOActionInitialization : public G4VUserActionInitialization +{ + + public: + + XraySPOActionInitialization() = default; + ~XraySPOActionInitialization() override = default; + void BuildForMaster() const override; + void Build() const override; + +}; + +#endif diff --git a/examples/advanced/xray_SiliconPoreOptics/include/XraySPODetectorConstruction.hh b/examples/advanced/xray_SiliconPoreOptics/include/XraySPODetectorConstruction.hh new file mode 100644 index 00000000000..33e832a627e --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/include/XraySPODetectorConstruction.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. * +// ******************************************************************** +// +/// \file XraySPODetectorConstruction.hh +/// \brief Definition of the DetectorConstruction class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XraySPODetectorConstruction_h +#define XraySPODetectorConstruction_h 1 + +#include "G4VUserDetectorConstruction.hh" +#include "globals.hh" +#include "G4Cache.hh" +#include "G4GDMLParser.hh" + +class G4LogicalVolume; +class G4VPhysicalVolume; +class G4Material; +class XraySPODetectorMessenger; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class XraySPODetectorConstruction : public G4VUserDetectorConstruction +{ + public: + + explicit XraySPODetectorConstruction(); + ~XraySPODetectorConstruction() override = default; + G4VPhysicalVolume* Construct() override; + G4VPhysicalVolume* ConstructDetector(); + void SetReadFile(G4String &); + G4VPhysicalVolume* ConstructVolumes(); + void DefineMaterials(); + + private: + + G4GDMLParser fParser; + G4String fReadFile; + G4VPhysicalVolume* fPhysiWorld; + G4Material* fDefaultMaterial; + XraySPODetectorMessenger* fDetectorMessenger; + G4LogicalVolume* fWorld_log; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/xray_SiliconPoreOptics/include/XraySPODetectorMessenger.hh b/examples/advanced/xray_SiliconPoreOptics/include/XraySPODetectorMessenger.hh new file mode 100644 index 00000000000..6a323d58a4e --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/include/XraySPODetectorMessenger.hh @@ -0,0 +1,65 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XraySPODetectorMessenger.hh +/// \brief Definition of the DetectorMessenger class +// +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XraySPODetectorMessenger_h +#define XraySPODetectorMessenger_h 1 + +#include "globals.hh" +#include "G4UImessenger.hh" + +class XraySPODetectorConstruction; +class G4UIcommand; +class G4UIcmdWithAString; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class XraySPODetectorMessenger: public G4UImessenger +{ + public: + + explicit XraySPODetectorMessenger(XraySPODetectorConstruction*); + ~XraySPODetectorMessenger() override = default; + void SetNewValue(G4UIcommand*, G4String) override; + + private: + + XraySPODetectorConstruction* fDetector; + G4UIcmdWithAString* fTheReadCommand; + +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/xray_SiliconPoreOptics/include/XraySPOHistoManager.hh b/examples/advanced/xray_SiliconPoreOptics/include/XraySPOHistoManager.hh new file mode 100644 index 00000000000..bf4aec5be1b --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/include/XraySPOHistoManager.hh @@ -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. * +// ******************************************************************** +// +/// \file XraySPOHistoManager.hh +/// \brief Definition of the HistoManager class +// +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XraySPOHistoManager_h +#define XraySPOHistoManager_h 1 + +#include "globals.hh" + +#include "G4AnalysisManager.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class XraySPOHistoManager +{ + public: + + explicit XraySPOHistoManager(); + ~XraySPOHistoManager() = default; + + private: + + void Book(); + +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/xray_SiliconPoreOptics/include/XraySPOPhysicsList.hh b/examples/advanced/xray_SiliconPoreOptics/include/XraySPOPhysicsList.hh new file mode 100644 index 00000000000..e11c5391ef3 --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/include/XraySPOPhysicsList.hh @@ -0,0 +1,67 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XraySPOPhysicsList.hh +/// \brief Definition of the PhysicsList class +// +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XraySPOPhysicsList_h +#define XraySPOPhysicsList_h 1 + +#include "G4VModularPhysicsList.hh" +#include "globals.hh" + +class XraySPOPhysicsListMessenger; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class XraySPOPhysicsList: public G4VModularPhysicsList +{ + public: + + explicit XraySPOPhysicsList(); + ~XraySPOPhysicsList() override = default; + void ConstructParticle() override; + void ConstructProcess() override; + void AddPhysicsList(const G4String& name); + void AddDecay(); + void AddRadioactiveDecay(); + + private: + + XraySPOPhysicsListMessenger* fMessenger; + G4String fEmName; + G4VPhysicsConstructor* fEmPhysicsList; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/xray_SiliconPoreOptics/include/XraySPOPhysicsListMessenger.hh b/examples/advanced/xray_SiliconPoreOptics/include/XraySPOPhysicsListMessenger.hh new file mode 100644 index 00000000000..a6f5a9108a7 --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/include/XraySPOPhysicsListMessenger.hh @@ -0,0 +1,65 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XraySPOPhysicsListMessenger.hh +/// \brief Definition of the PhysicsListMessenger class +// +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XraySPOPhysicsListMessenger_h +#define XraySPOPhysicsListMessenger_h 1 + +#include "globals.hh" +#include "G4UImessenger.hh" + +class XraySPOPhysicsList; +class G4UIdirectory; +class G4UIcmdWithAString; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class XraySPOPhysicsListMessenger: public G4UImessenger +{ + public: + + explicit XraySPOPhysicsListMessenger(XraySPOPhysicsList*); + ~XraySPOPhysicsListMessenger() override = default; + void SetNewValue(G4UIcommand*, G4String) override; + + private: + + XraySPOPhysicsList* fPhysicsList; + G4UIdirectory* fPhysDir; + G4UIcmdWithAString* fListCmd; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/xray_SiliconPoreOptics/include/XraySPOPrimaryGeneratorAction.hh b/examples/advanced/xray_SiliconPoreOptics/include/XraySPOPrimaryGeneratorAction.hh new file mode 100644 index 00000000000..9b611730912 --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/include/XraySPOPrimaryGeneratorAction.hh @@ -0,0 +1,64 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XraySPOPrimaryGeneratorAction.hh +/// \brief Definition of the PrimaryGeneratorAction class +// +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XraySPOPrimaryGeneratorAction_h +#define XraySPOPrimaryGeneratorAction_h 1 + +#include "G4VUserPrimaryGeneratorAction.hh" +#include "G4ParticleGun.hh" +#include "globals.hh" + +class G4Event; +class G4GeneralParticleSource; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class XraySPOPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction +{ + public: + + explicit XraySPOPrimaryGeneratorAction(); + ~XraySPOPrimaryGeneratorAction() override = default; + void GeneratePrimaries(G4Event*) override; + G4GeneralParticleSource* GetParticleGun() {return fParticleGun;}; + + private: + + G4GeneralParticleSource* fParticleGun; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/xray_SiliconPoreOptics/include/XraySPORunAction.hh b/examples/advanced/xray_SiliconPoreOptics/include/XraySPORunAction.hh new file mode 100644 index 00000000000..ec364d2878c --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/include/XraySPORunAction.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. * +// ******************************************************************** +// +/// \file XraySPORunAction.hh +/// \brief Definition of the RunAction class +// +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XraySPORunAction_h +#define XraySPORunAction_h 1 + +#include "G4UserRunAction.hh" +#include "globals.hh" +#include "G4AnalysisManager.hh" + +class XraySPOHistoManager; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +class XraySPORunAction : public G4UserRunAction +{ + public: + + explicit XraySPORunAction(); + ~XraySPORunAction() override = default; + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; + + private: + + XraySPOHistoManager* fHistoManager = nullptr; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/xray_SiliconPoreOptics/include/XraySPOSteppingAction.hh b/examples/advanced/xray_SiliconPoreOptics/include/XraySPOSteppingAction.hh new file mode 100644 index 00000000000..0528e2965b1 --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/include/XraySPOSteppingAction.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. * +// ******************************************************************** +// +/// \file XraySPOSteppingAction.hh +/// \brief Definition of the SteppingAction class +// +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XraySPOSteppingAction_h +#define XraySPOSteppingAction_h 1 + +#include "globals.hh" +#include "G4UserSteppingAction.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class XraySPOSteppingAction : public G4UserSteppingAction +{ + public: + + explicit XraySPOSteppingAction() = default; + ~XraySPOSteppingAction() = default; + void UserSteppingAction(const G4Step*) override; + + private: + + G4int fNumReflections = 0; + G4int fPrevEventID = 0; + G4double fPrevx = 0; + G4double fPrevy = 0; + G4double fPrevz = 0; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/xray_SiliconPoreOptics/init_vis.mac b/examples/advanced/xray_SiliconPoreOptics/init_vis.mac new file mode 100644 index 00000000000..97f1467fa00 --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/init_vis.mac @@ -0,0 +1,17 @@ +# Macro file for the initialization of example Xray_SiliconPoreOptics +# in interactive session +# +# Set some default verbose +/control/verbose 2 +/control/saveHistory +/run/verbose 1 + +# Read the detector +/xrayopt/det/readGDML pores.gdml + +# +# Initialize kernel +/run/initialize +# +# Visualization setting +/control/execute vis.mac diff --git a/examples/advanced/xray_SiliconPoreOptics/pores.gdml b/examples/advanced/xray_SiliconPoreOptics/pores.gdml new file mode 100644 index 00000000000..3124f4b5399 --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/pores.gdml @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/advanced/xray_SiliconPoreOptics/run01.mac b/examples/advanced/xray_SiliconPoreOptics/run01.mac new file mode 100644 index 00000000000..84253cb3fa6 --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/run01.mac @@ -0,0 +1,33 @@ +#/control/cout/ignoreThreadsExcept 0 +#/run/numberOfThreads 1 +#/control/verbose 2 +/run/verbose 1 +#/tracking/verbose 1 + +# Read the detector +/xrayopt/det/readGDML pores.gdml + +# Define the physics list +/testem/phys/addPhysics SpacePhysics +/process/em/AddEmRegion InnerRegion G4EmStandardSS + +# +/run/initialize + +# Define the particle gun +/gps/particle proton +/gps/pos/type Plane +/gps/pos/shape Square +/gps/pos/centre 25.8491 0.0585 10.1514 cm +/gps/pos/halfx 0.0303 cm +/gps/pos/halfy 0.0415 cm +/gps/ang/type cos +/gps/ang/mintheta 0 deg +/gps/ang/maxtheta 1 deg +/gps/energy 100.0 keV + +# Define the analys file name +/analysis/setFileName output.root + +/run/printProgress 100 +/run/beamOn 5000 diff --git a/examples/advanced/xray_SiliconPoreOptics/src/G4EmStandardPhysics_SpacePhysics.cc b/examples/advanced/xray_SiliconPoreOptics/src/G4EmStandardPhysics_SpacePhysics.cc new file mode 100644 index 00000000000..e2b84f44ba9 --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/src/G4EmStandardPhysics_SpacePhysics.cc @@ -0,0 +1,326 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// ClassName: G4EmStandardPhysics_SpacePhysics +// +// Authors: P.Dondero (paolo.dondero@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "G4EmStandardPhysics_SpacePhysics.hh" + +#include "G4SystemOfUnits.hh" +#include "G4ParticleDefinition.hh" +#include "G4LossTableManager.hh" +#include "G4EmParameters.hh" +#include "G4EmBuilder.hh" + +#include "G4ComptonScattering.hh" +#include "G4GammaConversion.hh" +#include "G4PhotoElectricEffect.hh" +#include "G4RayleighScattering.hh" +#include "G4PEEffectFluoModel.hh" +#include "G4KleinNishinaModel.hh" +#include "G4BetheHeitler5DModel.hh" +#include "G4LivermorePhotoElectricModel.hh" +#include "G4LivermorePolarizedRayleighModel.hh" +#include "G4PhotoElectricAngularGeneratorPolarized.hh" +#include "G4LowEPComptonModel.hh" +#include "G4LowEPPolarizedComptonModel.hh" + +#include "G4eMultipleScattering.hh" +#include "G4hMultipleScattering.hh" +#include "G4MscStepLimitType.hh" +#include "G4UrbanMscModel.hh" +#include "G4GoudsmitSaundersonMscModel.hh" +#include "G4DummyModel.hh" +#include "G4WentzelVIModel.hh" +#include "G4CoulombScattering.hh" +#include "G4eCoulombScatteringModel.hh" + +#include "G4eIonisation.hh" +#include "G4eBremsstrahlung.hh" +#include "G4Generator2BS.hh" +#include "G4Generator2BN.hh" +#include "G4SeltzerBergerModel.hh" +#include "G4ePairProduction.hh" +#include "G4LivermoreIonisationModel.hh" +#include "G4PenelopeIonisationModel.hh" +#include "G4UniversalFluctuation.hh" +#include "G4UrbanFluctuation.hh" + +#include "G4eplusAnnihilation.hh" +#include "G4hIonisation.hh" +#include "G4ionIonisation.hh" +#include "G4IonParametrisedLossModel.hh" +#include "G4NuclearStopping.hh" +#include "G4Gamma.hh" +#include "G4Electron.hh" +#include "G4Positron.hh" +#include "G4GenericIon.hh" +#include "G4PhysicsListHelper.hh" +#include "G4BuilderType.hh" +#include "G4EmModelActivator.hh" +#include "G4GammaGeneralProcess.hh" + +// factory +#include "G4PhysicsConstructorFactory.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4EmStandardPhysics_SpacePhysics::G4EmStandardPhysics_SpacePhysics(G4int ver, const G4String&) + : G4VPhysicsConstructor("G4EmStandard_SpacePhysics"), fVerbose(ver) +{ + G4cout << "---> Using G4EmStandard_SpacePhysics v. 11.03 " << G4endl; + G4EmParameters* param = G4EmParameters::Instance(); + param->SetDefaults(); + param->SetVerbose(ver); + param->SetMinEnergy(100*CLHEP::eV); + param->SetLowestElectronEnergy(50*CLHEP::eV); + param->SetNumberOfBinsPerDecade(20); + param->ActivateAngularGeneratorForIonisation(true); + param->SetStepFunction(0.2, 10*CLHEP::um); + param->SetStepFunctionMuHad(0.05, 0.01*CLHEP::um); + param->SetStepFunctionLightIons(0.1, 20*CLHEP::um); + param->SetStepFunctionIons(0.1, 1*CLHEP::um); + param->SetUseMottCorrection(true); // use Mott-correction for e-/e+ msc gs + param->SetMscStepLimitType(fUseSafetyPlus); // for e-/e+ msc gs + param->SetMscSkin(3); // error-free stepping for e-/e+ msc gs + param->SetMscRangeFactor(0.08); // error-free stepping for e-/e+ msc gs + param->SetMuHadLateralDisplacement(true); + param->SetFluo(true); + param->SetUseICRU90Data(true); + param->SetMaxNIELEnergy(1*CLHEP::MeV); + SetPhysicsType(bElectromagnetic); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4EmStandardPhysics_SpacePhysics::ConstructParticle() +{ + // minimal set of particles for EM physics + G4EmBuilder::ConstructMinimalEmSet(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4EmStandardPhysics_SpacePhysics::ConstructProcess() +{ + if(fVerbose > 1) + { + G4cout << "### " << GetPhysicsName() << " Construct Space Physics Processes " << G4endl; + } + G4EmBuilder::PrepareEMPhysics(); + + G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); + G4EmParameters* param = G4EmParameters::Instance(); + + // processes used by several particles + G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc"); + + // nuclear stopping is enabled if the energy limit above zero + G4double nielEnergyLimit = param->MaxNIELEnergy(); + G4NuclearStopping* pnuc = nullptr; + if(nielEnergyLimit > 0.0) + { + pnuc = new G4NuclearStopping(); + pnuc->SetMaxKinEnergy(nielEnergyLimit); + } + + // high energy limit for e+- scattering models and bremsstrahlung + G4double highEnergyLimit = param->MscEnergyLimit(); + + // Add gamma EM Processes + G4ParticleDefinition* particle = G4Gamma::Gamma(); + G4bool polar = param->EnablePolarisation(); + + // Photoelectric + G4PhotoElectricEffect* pe = new G4PhotoElectricEffect(); + G4VEmModel* peModel = new G4LivermorePhotoElectricModel(); + pe->SetEmModel(peModel); + if(polar) + { + peModel->SetAngularDistribution(new G4PhotoElectricAngularGeneratorPolarized()); + } + + // Compton scattering + G4ComptonScattering* cs = new G4ComptonScattering; + cs->SetEmModel(new G4KleinNishinaModel()); + G4VEmModel* cModel = nullptr; + if(polar) + { + cModel = new G4LowEPPolarizedComptonModel(); + } + else + { + cModel = new G4LowEPComptonModel(); + } + cModel->SetHighEnergyLimit(20*CLHEP::MeV); + cs->AddEmModel(0, cModel); + + // Gamma conversion + G4GammaConversion* gc = new G4GammaConversion(); + G4VEmModel* conv = new G4BetheHeitler5DModel(); + gc->SetEmModel(conv); + + // default Rayleigh scattering is Livermore + G4RayleighScattering* rl = new G4RayleighScattering(); + if(polar) + { + rl->SetEmModel(new G4LivermorePolarizedRayleighModel()); + } + + if(param->GeneralProcessActive()) + { + G4GammaGeneralProcess* sp = new G4GammaGeneralProcess(); + sp->AddEmProcess(pe); + sp->AddEmProcess(cs); + sp->AddEmProcess(gc); + sp->AddEmProcess(rl); + G4LossTableManager::Instance()->SetGammaGeneralProcess(sp); + ph->RegisterProcess(sp, particle); + } + else + { + ph->RegisterProcess(pe, particle); + ph->RegisterProcess(cs, particle); + ph->RegisterProcess(gc, particle); + ph->RegisterProcess(rl, particle); + } + + // e- + particle = G4Electron::Electron(); + + // multiple scattering + G4eMultipleScattering* msc = new G4eMultipleScattering(); + // e-/e+ msc gs with Mott-correction + // (Mott-correction is set through G4EmParameters) + G4GoudsmitSaundersonMscModel* msc1 = new G4GoudsmitSaundersonMscModel(); + G4WentzelVIModel* msc2 = new G4WentzelVIModel(); + msc1->SetHighEnergyLimit(highEnergyLimit); + msc2->SetLowEnergyLimit(highEnergyLimit); + msc->SetEmModel(msc1); + msc->SetEmModel(msc2); + + auto *ssm = new G4eCoulombScatteringModel(); + G4CoulombScattering* ss = new G4CoulombScattering(); + ss->SetEmModel(ssm); + ss->SetMinKinEnergy(highEnergyLimit); + ssm->SetLowEnergyLimit(highEnergyLimit); + ssm->SetActivationLowEnergyLimit(highEnergyLimit); + + // ionisation + G4eIonisation* eioni = new G4eIonisation(); + G4VEmModel* theIoniLiv = new G4LivermoreIonisationModel(); + eioni->SetFluctModel(new G4UrbanFluctuation()); + theIoniLiv->SetHighEnergyLimit(0.1*CLHEP::MeV); + eioni->AddEmModel(0, theIoniLiv, new G4UniversalFluctuation() ); + + // bremsstrahlung + G4eBremsstrahlung* brem = new G4eBremsstrahlung(); + G4SeltzerBergerModel* br1 = new G4SeltzerBergerModel(); + G4eBremsstrahlungRelModel* br2 = new G4eBremsstrahlungRelModel(); + br1->SetAngularDistribution(new G4Generator2BS()); + br2->SetAngularDistribution(new G4Generator2BS()); + brem->SetEmModel(br1); + brem->SetEmModel(br2); + br1->SetHighEnergyLimit(CLHEP::GeV); + + G4ePairProduction* ee = new G4ePairProduction(); + + // register processes + ph->RegisterProcess(msc, particle); + ph->RegisterProcess(eioni, particle); + ph->RegisterProcess(brem, particle); + ph->RegisterProcess(ee, particle); + ph->RegisterProcess(ss, particle); + + // e+ + particle = G4Positron::Positron(); + + // multiple scattering + msc = new G4eMultipleScattering(); + // e-/e+ msc gs with Mott-correction + // (Mott-correction is set through G4EmParameters) + msc1 = new G4GoudsmitSaundersonMscModel(); + msc2 = new G4WentzelVIModel(); + msc1->SetHighEnergyLimit(highEnergyLimit); + msc2->SetLowEnergyLimit(highEnergyLimit); + msc->SetEmModel(msc1); + msc->SetEmModel(msc2); + + ssm = new G4eCoulombScatteringModel(); + ss = new G4CoulombScattering(); + ss->SetEmModel(ssm); + ss->SetMinKinEnergy(highEnergyLimit); + ssm->SetLowEnergyLimit(highEnergyLimit); + ssm->SetActivationLowEnergyLimit(highEnergyLimit); + + // ionisation + eioni = new G4eIonisation(); + eioni->SetFluctModel(new G4UrbanFluctuation()); + G4VEmModel* pen = new G4PenelopeIonisationModel(); + pen->SetHighEnergyLimit(0.1*CLHEP::MeV); + eioni->AddEmModel(0, pen, new G4UniversalFluctuation()); + + // bremsstrahlung + brem = new G4eBremsstrahlung(); + br1 = new G4SeltzerBergerModel(); + br2 = new G4eBremsstrahlungRelModel(); + br1->SetAngularDistribution(new G4Generator2BS()); + br2->SetAngularDistribution(new G4Generator2BS()); + brem->SetEmModel(br1); + brem->SetEmModel(br2); + br1->SetHighEnergyLimit(CLHEP::GeV); + + // register processes + ph->RegisterProcess(msc, particle); + ph->RegisterProcess(eioni, particle); + ph->RegisterProcess(brem, particle); + ph->RegisterProcess(ee, particle); + ph->RegisterProcess(new G4eplusAnnihilation(), particle); + ph->RegisterProcess(ss, particle); + + // generic ion + particle = G4GenericIon::GenericIon(); + G4ionIonisation* ionIoni = new G4ionIonisation(); + ionIoni->SetEmModel(new G4IonParametrisedLossModel()); + ph->RegisterProcess(hmsc, particle); + ph->RegisterProcess(ionIoni, particle); + if(nullptr != pnuc) + { + ph->RegisterProcess(pnuc, particle); + } + + // muons, hadrons, ions + G4EmBuilder::ConstructCharged(hmsc, pnuc); + + // extra configuration + G4EmModelActivator mact(GetPhysicsName()); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/xray_SiliconPoreOptics/src/XraySPOActionInitialization.cc b/examples/advanced/xray_SiliconPoreOptics/src/XraySPOActionInitialization.cc new file mode 100644 index 00000000000..a088360c17f --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/src/XraySPOActionInitialization.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. * +// ******************************************************************** +// +// +/// \file XraySPOActionInitialization.cc +/// \brief Implementation of the ActionInitialization class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "XraySPOActionInitialization.hh" +#include "XraySPOPrimaryGeneratorAction.hh" +#include "XraySPORunAction.hh" +#include "XraySPOSteppingAction.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XraySPOActionInitialization::BuildForMaster() const +{ + auto *runAction = new XraySPORunAction(); + SetUserAction(runAction); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XraySPOActionInitialization::Build() const +{ + auto *kinematics = new XraySPOPrimaryGeneratorAction(); + SetUserAction(kinematics); + SetUserAction(new XraySPORunAction()); + SetUserAction(new XraySPOSteppingAction()); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + diff --git a/examples/advanced/xray_SiliconPoreOptics/src/XraySPODetectorConstruction.cc b/examples/advanced/xray_SiliconPoreOptics/src/XraySPODetectorConstruction.cc new file mode 100644 index 00000000000..4ddfc72c4d3 --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/src/XraySPODetectorConstruction.cc @@ -0,0 +1,152 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XraySPODetectorConstruction.cc +/// \brief Implementation of the DetectorConstruction class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "XraySPODetectorConstruction.hh" +#include "XraySPODetectorMessenger.hh" +#include "G4NistManager.hh" +#include "G4Material.hh" +#include "G4LogicalVolume.hh" + +#include "G4PhysicalVolumeStore.hh" + +#include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" +#include + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +XraySPODetectorConstruction::XraySPODetectorConstruction() +: fDetectorMessenger(nullptr) +{ + // materials + DefineMaterials(); + fReadFile = ""; + + // create commands for interactive definition of the calorimeter + fDetectorMessenger = new XraySPODetectorMessenger(this); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4VPhysicalVolume* XraySPODetectorConstruction::Construct() +{ + return ConstructDetector(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XraySPODetectorConstruction::DefineMaterials() +{ + G4NistManager* man = G4NistManager::Instance(); + + man->FindOrBuildMaterial("G4_Al"); + man->FindOrBuildMaterial("G4_Si"); + man->FindOrBuildMaterial("G4_Fe"); + man->FindOrBuildMaterial("G4_Cu"); + man->FindOrBuildMaterial("G4_Ge"); + man->FindOrBuildMaterial("G4_Mo"); + man->FindOrBuildMaterial("G4_Ta"); + man->FindOrBuildMaterial("G4_W"); + man->FindOrBuildMaterial("G4_Au"); + man->FindOrBuildMaterial("G4_Pb"); + man->FindOrBuildMaterial("G4_PbWO4"); + man->FindOrBuildMaterial("G4_SODIUM_IODIDE"); + man->FindOrBuildMaterial("G4_AIR"); + man->FindOrBuildMaterial("G4_WATER"); + + G4Element* H = man->FindOrBuildElement("H"); + G4Element* O = man->FindOrBuildElement("O"); + + G4Material* H2O = new G4Material("Water", 1.000*g/cm3, 2); + H2O->AddElement(H, 2); + H2O->AddElement(O, 1); + H2O->GetIonisation()->SetMeanExcitationEnergy(78.0*eV); + + G4double density = universe_mean_density; //from PhysicalConstants.h + G4double pressure = 3.e-18*pascal; + G4double temperature = 2.73*kelvin; + G4Material* Galactic = new G4Material("Galactic", 1., 1.008*g/mole, density, kStateGas, temperature, pressure); + + fDefaultMaterial = Galactic; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +void XraySPODetectorConstruction::SetReadFile(G4String &input_geometry) +{ + fReadFile = std::move(input_geometry); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4VPhysicalVolume* XraySPODetectorConstruction::ConstructDetector() +{ + if (fReadFile == "") + { + G4cout << "No geometry selected!" << G4endl; + } + else + { + auto *InnerRegion = new G4Region("InnerRegion"); + G4cout << "Build geometry from GDML file: " << fReadFile << G4endl; + G4VPhysicalVolume* fWorldPhysVol; + fParser.Read(fReadFile); + fWorldPhysVol = fParser.GetWorldVolume(); + fWorld_log = fWorldPhysVol->GetLogicalVolume(); + G4int num_volumes = 9; + auto *inner_volumes = new G4String[num_volumes]; + inner_volumes[0] = "cone_1"; inner_volumes[1] = "cone_2"; inner_volumes[2] = "cone_3"; inner_volumes[3] = "cone_4"; + inner_volumes[4] = "cone_5"; inner_volumes[5] = "cone_6"; inner_volumes[6] = "cone_7"; inner_volumes[7] = "cone_8"; + + G4cout << "Adding volumes to the InnerRegion" << G4endl; + // Add volumes to the InnerRegion + for (G4int j = 0; j <= num_volumes; j++) + { + for (G4int i = 0; i < (G4int)fWorld_log->GetNoDaughters(); i++) + { + if (fWorld_log->GetDaughter(i)->GetLogicalVolume()->GetName() == inner_volumes[j]) + { + InnerRegion->AddRootLogicalVolume(fWorld_log->GetDaughter(i)->GetLogicalVolume()); + G4cout << "Added: " << fWorld_log->GetDaughter(i)->GetLogicalVolume()->GetName() << G4endl; + } + } + } + fPhysiWorld = fWorldPhysVol; + } + return fPhysiWorld; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + diff --git a/examples/advanced/xray_SiliconPoreOptics/src/XraySPODetectorMessenger.cc b/examples/advanced/xray_SiliconPoreOptics/src/XraySPODetectorMessenger.cc new file mode 100644 index 00000000000..ffebfa190fc --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/src/XraySPODetectorMessenger.cc @@ -0,0 +1,62 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XraySPODetectorMessenger.cc +/// \brief Implementation of the DetectorMessenger class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "XraySPODetectorMessenger.hh" +#include +#include "XraySPODetectorConstruction.hh" +#include "G4UIcommand.hh" +#include "G4UIcmdWithAString.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +XraySPODetectorMessenger::XraySPODetectorMessenger(XraySPODetectorConstruction *Det) +: fDetector(Det), fTheReadCommand(nullptr) +{ + fTheReadCommand = new G4UIcmdWithAString("/xrayopt/det/readGDML",this); + fTheReadCommand->SetGuidance("Set the geometry from GDML file."); + fTheReadCommand->SetParameterName("FileRead",false); + fTheReadCommand->AvailableForStates(G4State_PreInit); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XraySPODetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue) +{ + if (command == fTheReadCommand) + { + fDetector->SetReadFile(newValue); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/xray_SiliconPoreOptics/src/XraySPOHistoManager.cc b/examples/advanced/xray_SiliconPoreOptics/src/XraySPOHistoManager.cc new file mode 100644 index 00000000000..7f5c364ff14 --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/src/XraySPOHistoManager.cc @@ -0,0 +1,67 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XraySPOHistoManager.cc +/// \brief Implementation of the HistoManager class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "XraySPOHistoManager.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +XraySPOHistoManager::XraySPOHistoManager() +{ + Book(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XraySPOHistoManager::Book() +{ + auto analysisManager = G4AnalysisManager::Instance(); + analysisManager->SetNtupleMerging(true); + + int fNtupleID = analysisManager->CreateNtuple("XraySPO", "some values"); + analysisManager->CreateNtupleIColumn("eventID"); + analysisManager->CreateNtupleSColumn("vol_name"); + analysisManager->CreateNtupleIColumn("trackID"); + analysisManager->CreateNtupleDColumn("x"); + analysisManager->CreateNtupleDColumn("y"); + analysisManager->CreateNtupleDColumn("z"); + analysisManager->CreateNtupleDColumn("theta"); + analysisManager->CreateNtupleDColumn("phi"); + analysisManager->CreateNtupleSColumn("proc_name"); + analysisManager->CreateNtupleIColumn("parentID"); + analysisManager->CreateNtupleIColumn("num_reflections"); + analysisManager->FinishNtuple(fNtupleID); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + diff --git a/examples/advanced/xray_SiliconPoreOptics/src/XraySPOPhysicsList.cc b/examples/advanced/xray_SiliconPoreOptics/src/XraySPOPhysicsList.cc new file mode 100644 index 00000000000..0a70108c020 --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/src/XraySPOPhysicsList.cc @@ -0,0 +1,253 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XraySPOPhysicsList.cc +/// \brief Implementation of the PhysicsList class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "XraySPOPhysicsList.hh" +#include "XraySPOPhysicsListMessenger.hh" + +#include "G4EmStandardPhysics_SpacePhysics.hh" +#include "G4EmStandardPhysics.hh" +#include "G4EmStandardPhysics_option1.hh" +#include "G4EmStandardPhysics_option2.hh" +#include "G4EmStandardPhysics_option3.hh" +#include "G4EmStandardPhysics_option4.hh" +#include "G4EmStandardPhysicsSS.hh" +#include "G4EmStandardPhysicsGS.hh" +#include "G4EmStandardPhysicsWVI.hh" +#include "G4EmLivermorePhysics.hh" +#include "G4EmPenelopePhysics.hh" +#include "G4EmLowEPPhysics.hh" + +#include "G4LossTableManager.hh" +#include "G4UnitsTable.hh" +#include "G4SystemOfUnits.hh" + +// particles +#include "G4BosonConstructor.hh" +#include "G4LeptonConstructor.hh" +#include "G4MesonConstructor.hh" +#include "G4BosonConstructor.hh" +#include "G4BaryonConstructor.hh" +#include "G4IonConstructor.hh" +#include "G4ShortLivedConstructor.hh" +#include "G4Decay.hh" +#include "G4PhysicsListHelper.hh" +#include "G4RadioactiveDecay.hh" +#include "G4GenericIon.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +XraySPOPhysicsList::XraySPOPhysicsList() +{ + fMessenger = new XraySPOPhysicsListMessenger(this); + + SetVerboseLevel(1); + + // EM physics + fEmPhysicsList = new G4EmStandardPhysics(); + + G4LossTableManager::Instance(); + SetDefaultCutValue(1.*mm); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XraySPOPhysicsList::ConstructParticle() +{ + G4BosonConstructor pBosonConstructor; + pBosonConstructor.ConstructParticle(); + + G4LeptonConstructor pLeptonConstructor; + pLeptonConstructor.ConstructParticle(); + + G4MesonConstructor pMesonConstructor; + pMesonConstructor.ConstructParticle(); + + G4BaryonConstructor pBaryonConstructor; + pBaryonConstructor.ConstructParticle(); + + G4IonConstructor pIonConstructor; + pIonConstructor.ConstructParticle(); + + G4ShortLivedConstructor pShortLivedConstructor; + pShortLivedConstructor.ConstructParticle(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include "G4ProcessManager.hh" + +void XraySPOPhysicsList::ConstructProcess() +{ + AddTransportation(); + + // electromagnetic physics list + fEmPhysicsList->ConstructProcess(); + + // Em options + G4EmParameters* param = G4EmParameters::Instance(); + param->SetBuildCSDARange(true); + param->SetMscThetaLimit(0); + + AddDecay(); + + AddRadioactiveDecay(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XraySPOPhysicsList::AddPhysicsList(const G4String& name) +{ + if (verboseLevel>0) + { + G4cout << "PhysicsList::AddPhysicsList: <" << name << ">" << G4endl; + } + + if (name == fEmName) + { + return; + } + if (name == "SpacePhysics") + { + delete fEmPhysicsList; + G4cout << "X - Defining SpacePhysics, no hadronic part" << G4endl; + fEmName = name; + fEmPhysicsList = new G4EmStandardPhysics_SpacePhysics(); + } + else if (name == "emstandard_opt0") + { + delete fEmPhysicsList; + fEmPhysicsList = new G4EmStandardPhysics(); + } + else if (name == "emstandard_opt1") + { + fEmName = name; + delete fEmPhysicsList; + fEmPhysicsList = new G4EmStandardPhysics_option1(); + } + else if (name == "emstandard_opt2") + { + fEmName = name; + delete fEmPhysicsList; + fEmPhysicsList = new G4EmStandardPhysics_option2(); + } + else if (name == "emstandard_opt3") + { + fEmName = name; + delete fEmPhysicsList; + fEmPhysicsList = new G4EmStandardPhysics_option3(); + } + else if (name == "emstandard_opt4") + { + fEmName = name; + delete fEmPhysicsList; + fEmPhysicsList = new G4EmStandardPhysics_option4(); + } + else if (name == "emstandardSS") + { + fEmName = name; + delete fEmPhysicsList; + fEmPhysicsList = new G4EmStandardPhysicsSS(); + } + else if (name == "emstandardGS") + { + fEmName = name; + delete fEmPhysicsList; + fEmPhysicsList = new G4EmStandardPhysicsGS(); + } + else if (name == "emstandardWVI") + { + fEmName = name; + delete fEmPhysicsList; + fEmPhysicsList = new G4EmStandardPhysicsWVI(); + } + else if (name == "emlowenergy") + { + fEmName = name; + delete fEmPhysicsList; + fEmPhysicsList = new G4EmLowEPPhysics(); + } + else if (name == "emlivermore") + { + fEmName = name; + delete fEmPhysicsList; + fEmPhysicsList = new G4EmLivermorePhysics(); + } + else if (name == "empenelope") + { + fEmName = name; + delete fEmPhysicsList; + fEmPhysicsList = new G4EmPenelopePhysics(); + } + else + { + G4cout << "PhysicsList::AddPhysicsList: <" << name << ">" + << " is not defined" + << G4endl; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XraySPOPhysicsList::AddDecay() +{ + // decay process + G4Decay* decay = new G4Decay(); + G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); + + auto particleIterator=GetParticleIterator(); + particleIterator->reset(); + while( (*particleIterator)() ) + { + G4ParticleDefinition* particle = particleIterator->value(); + if (decay->IsApplicable(*particle) && !particle->IsShortLived()) + { + ph->RegisterProcess(decay, particle); + } + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XraySPOPhysicsList::AddRadioactiveDecay() +{ + G4RadioactiveDecay* radioactiveDecay = new G4RadioactiveDecay(); + + radioactiveDecay->SetARM(true); //Atomic Rearangement + + G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); + ph->RegisterProcess(radioactiveDecay, G4GenericIon::GenericIon()); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + diff --git a/examples/advanced/xray_SiliconPoreOptics/src/XraySPOPhysicsListMessenger.cc b/examples/advanced/xray_SiliconPoreOptics/src/XraySPOPhysicsListMessenger.cc new file mode 100644 index 00000000000..aa955e14dea --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/src/XraySPOPhysicsListMessenger.cc @@ -0,0 +1,64 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XraySPOPhysicsListMessenger.cc +/// \brief Implementation of the PhysicsListMessenger class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "XraySPOPhysicsListMessenger.hh" +#include "XraySPOPhysicsList.hh" +#include "G4UIdirectory.hh" +#include "G4UIcmdWithAString.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +XraySPOPhysicsListMessenger::XraySPOPhysicsListMessenger(XraySPOPhysicsList* pPhys) : fPhysicsList(pPhys) +{ + fPhysDir = new G4UIdirectory("/testem/phys/"); + fPhysDir->SetGuidance("physics list commands"); + + fListCmd = new G4UIcmdWithAString("/testem/phys/addPhysics",this); + fListCmd->SetGuidance("Add modula physics list."); + fListCmd->SetParameterName("PList",false); + fListCmd->AvailableForStates(G4State_PreInit); + fListCmd->SetToBeBroadcasted(false); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XraySPOPhysicsListMessenger::SetNewValue(G4UIcommand* command, G4String newValue) +{ + if(command == fListCmd) + { + fPhysicsList->AddPhysicsList(newValue); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/xray_SiliconPoreOptics/src/XraySPOPrimaryGeneratorAction.cc b/examples/advanced/xray_SiliconPoreOptics/src/XraySPOPrimaryGeneratorAction.cc new file mode 100644 index 00000000000..a738c07a2c7 --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/src/XraySPOPrimaryGeneratorAction.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. * +// ******************************************************************** +// +/// \file XraySPOPrimaryGeneratorAction.cc +/// \brief Implementation of the PrimaryGeneratorAction class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "XraySPOPrimaryGeneratorAction.hh" +#include "G4Event.hh" +#include "G4GeneralParticleSource.hh" +#include "G4ParticleTable.hh" +#include + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +XraySPOPrimaryGeneratorAction::XraySPOPrimaryGeneratorAction() +{ + fParticleGun = new G4GeneralParticleSource(); + G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable(); + G4String particleName; + fParticleGun->SetParticleDefinition(particleTable->FindParticle(particleName = "proton")); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XraySPOPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) +{ + fParticleGun->GeneratePrimaryVertex(anEvent); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/processes/electromagnetic/dna/utils/src/G4DNACPA100WaterExcitationStructure.cc b/examples/advanced/xray_SiliconPoreOptics/src/XraySPORunAction.cc similarity index 60% rename from source/processes/electromagnetic/dna/utils/src/G4DNACPA100WaterExcitationStructure.cc rename to examples/advanced/xray_SiliconPoreOptics/src/XraySPORunAction.cc index a26b4766df0..1eef30b7f8b 100644 --- a/source/processes/electromagnetic/dna/utils/src/G4DNACPA100WaterExcitationStructure.cc +++ b/examples/advanced/xray_SiliconPoreOptics/src/XraySPORunAction.cc @@ -23,52 +23,53 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// Based on the work of M. Terrissol and M. C. Bordage +/// \file XraySPORunAction.cc +/// \brief Implementation of the RunAction class // -// Users are requested to cite the following papers: -// - M. Terrissol, A. Baudre, Radiat. Prot. Dosim. 31 (1990) 175-177 -// - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries, -// M. Bardies, N. Lampe, S. Incerti, Phys. Med. 32 (2016) 1833-1840 -// -// Authors of this class: -// M.C. Bordage, M. Terrissol, S. Edel, J. Bordes, S. Incerti -// -// 15.01.2014: creation +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) // +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -#include "G4DNACPA100WaterExcitationStructure.hh" -#include "G4SystemOfUnits.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... +#include "XraySPORunAction.hh" +#include "G4Run.hh" +#include "G4RunManager.hh" +#include "G4AnalysisManager.hh" +#include "globals.hh" +#include -G4DNACPA100WaterExcitationStructure::G4DNACPA100WaterExcitationStructure(): nLevels(5) -{ +#include "XraySPOHistoManager.hh" - // The following values are extracted from the thesis of S. Edel, - // Paul Sabatier University, Toulouse, France, July 7, 2006 - // Page 36 - - energyConstant.push_back(8.17*eV); - energyConstant.push_back(10.13*eV); - energyConstant.push_back(11.31*eV); - energyConstant.push_back(12.91*eV); - energyConstant.push_back(14.50*eV); +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - nLevels = (G4int)energyConstant.size(); +XraySPORunAction::XraySPORunAction() : fHistoManager() +{ + fHistoManager = new XraySPOHistoManager(); + auto analysisManager = G4AnalysisManager::Instance(); + analysisManager->SetVerboseLevel(1); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4DNACPA100WaterExcitationStructure::~G4DNACPA100WaterExcitationStructure() -{ } - +void XraySPORunAction::BeginOfRunAction(const G4Run*) +{ + auto analysisManager = G4AnalysisManager::Instance(); + + // Open an output file + G4String fileName = "B4.root"; + analysisManager->OpenFile(); // do NOT insert fileName, otherwise it will not accept the name from the .mac file +} + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNACPA100WaterExcitationStructure::ExcitationEnergy(G4int level) +void XraySPORunAction::EndOfRunAction(const G4Run*) { - G4double excitation = 0.; + auto analysisManager = G4AnalysisManager::Instance(); - if (level >=0 && level < nLevels) excitation = energyConstant[level]; - - return excitation; + // Save ntuple + analysisManager->Write(); + analysisManager->CloseFile(); } + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/examples/advanced/xray_SiliconPoreOptics/src/XraySPOSteppingAction.cc b/examples/advanced/xray_SiliconPoreOptics/src/XraySPOSteppingAction.cc new file mode 100644 index 00000000000..69c7ee4c3ba --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/src/XraySPOSteppingAction.cc @@ -0,0 +1,135 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XraySPOSteppingAction.cc +/// \brief Implementation of the SteppingAction class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "XraySPOSteppingAction.hh" +#include "XraySPODetectorConstruction.hh" +#include "XraySPOHistoManager.hh" +#include "G4SteppingManager.hh" +#include "G4RunManager.hh" +#include "Randomize.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XraySPOSteppingAction::UserSteppingAction(const G4Step* step) +{ + G4int parentID = step->GetTrack()->GetParentID(); + + // Only primaries + if (parentID == 0) + { + G4RunManager *rm = G4RunManager::GetRunManager(); + G4int eventID = rm->GetCurrentEvent()->GetEventID(); + + G4double len_fraction = 0.1; // approx 1/20 of the lenght of the pore. Particles scatters an avg of 5 times, so by selecting all events with a distance >10mm we have all the scatters inside. + G4bool proceed = false; + + if (fPrevEventID != eventID) + { + fNumReflections = -2; + } + + G4ThreeVector direction = step->GetTrack()->GetMomentumDirection(); + auto theta = (G4double)direction.theta(); + auto phi = (G4double)direction.phi(); + + G4double x = step->GetPreStepPoint()->GetPosition().x(); + G4double y = step->GetPreStepPoint()->GetPosition().y(); + G4double z = step->GetPreStepPoint()->GetPosition().z(); + + const G4String& vol_name = step->GetTrack()->GetVolume()->GetName(); + G4int trackid = step->GetTrack()->GetTrackID(); + + G4StepPoint * postStep = step->GetPostStepPoint(); + G4StepPoint* post_point = step->GetPostStepPoint(); + + const G4String& proc_name = postStep->GetProcessDefinedStep()->GetProcessName(); + + // Count the number of reflections + G4String s = ""; + G4String& post_phys_name = s; + if (fPrevEventID == eventID && step->GetStepLength() >= len_fraction) + { + if (post_point != nullptr) + { + G4VPhysicalVolume* post_phys = post_point->GetPhysicalVolume(); + if (post_phys != nullptr) + { + post_phys_name = post_phys->GetName(); + } + + if (post_phys_name == "cone_1" || post_phys_name == "cone_2" || post_phys_name == "cone_3" || post_phys_name == "cone_4" || post_phys_name == "cone_5" || post_phys_name == "cone_6" || post_phys_name == "cone_7" || post_phys_name == "cone_8") + { + if (fNumReflections < 0) + { + fNumReflections = 1; + } + else + { + fNumReflections += 1; + } + proceed = true; + } + } + } + + if (vol_name == "pDummyEntrance" || vol_name == "pDummyExit" || vol_name == "pDummySphere") + { + proceed = true; + } + + if (proceed) + { + // G4cout << "Save with " << fNumReflections << " reflections" << G4endl; + G4AnalysisManager* analysisManager = G4AnalysisManager::Instance(); + analysisManager->FillNtupleIColumn(0, eventID); + analysisManager->FillNtupleSColumn(1, vol_name); + analysisManager->FillNtupleIColumn(2, trackid); + analysisManager->FillNtupleDColumn(3, x); + analysisManager->FillNtupleDColumn(4, y); + analysisManager->FillNtupleDColumn(5, z); + analysisManager->FillNtupleDColumn(6, theta); + analysisManager->FillNtupleDColumn(7, phi); + analysisManager->FillNtupleSColumn(8, proc_name); + analysisManager->FillNtupleIColumn(9, parentID); + analysisManager->FillNtupleIColumn(10, fNumReflections); + analysisManager->AddNtupleRow(); + } + fPrevx = x; + fPrevy = y; + fPrevz = z; + fPrevEventID = eventID; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/xray_SiliconPoreOptics/vis.mac b/examples/advanced/xray_SiliconPoreOptics/vis.mac new file mode 100644 index 00000000000..b6107b9250a --- /dev/null +++ b/examples/advanced/xray_SiliconPoreOptics/vis.mac @@ -0,0 +1,25 @@ +# Macro file for the visualization for the Xray_SiliconPoreOptics +# +# Create an OpenGL view: +/vis/open OGL 600x600-0+0 +# +# Draw geometry +/vis/drawVolume +# +# Specify style +/vis/viewer/set/style wireframe +/vis/viewer/set/auxiliaryEdge true +/vis/viewer/set/lineSegmentsPerCircle 100 +# +# Draw all trajectories for a given run +/vis/scene/add/trajectories smooth +#/vis/modeling/trajectories/create/drawByCharge +#/vis/modeling/trajectories/drawByCharge-0/default/setDrawStepPts true +#/vis/modeling/trajectories/drawByCharge-0/default/setStepPtsSize 2 +#/vis/scene/endOfEventAction accumulate +# +# Set analysis file name +/analysis/setFileName output.root +# +# Make the "World" box invisible +/vis/geometry/set/visibility World 0 false diff --git a/examples/advanced/xray_TESdetector/CMakeLists.txt b/examples/advanced/xray_TESdetector/CMakeLists.txt new file mode 100644 index 00000000000..3b4d3f72082 --- /dev/null +++ b/examples/advanced/xray_TESdetector/CMakeLists.txt @@ -0,0 +1,67 @@ +#---------------------------------------------------------------------------- +# Setup the project +cmake_minimum_required(VERSION 3.16...3.21) +project(XrayTESdetectorL2) + +#---------------------------------------------------------------------------- +# Find Geant4 package, activating all available UI and Vis drivers by default +# You can set WITH_GEANT4_UIVIS to OFF via the command line or ccmake/cmake-gui +# to build a batch mode only executable +# +option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON) +if(WITH_GEANT4_UIVIS) + find_package(Geant4 REQUIRED ui_all vis_all) +else() + find_package(Geant4 REQUIRED) +endif() + +#---------------------------------------------------------------------------- +# Setup Geant4 include directories and compile definitions +# Setup include directory for this project +# +include(${Geant4_USE_FILE}) +include_directories(${PROJECT_SOURCE_DIR}/include) + + +#---------------------------------------------------------------------------- +# Locate sources and headers for this project +# NB: headers are included so they will show up in IDEs +# +file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) +file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) + +#---------------------------------------------------------------------------- +# Add the executable, and link it to the Geant4 libraries +# +add_executable(XrayTESdetector xray_TESdetector.cc ${sources} ${headers}) +target_link_libraries(XrayTESdetector ${Geant4_LIBRARIES}) + +#---------------------------------------------------------------------------- +# Copy all scripts to the build directory, i.e. the directory in which we +# build B1. This is so that we can run the executable directly because it +# relies on these scripts being in the current working directory. +# +set(XrayTESdetector_SCRIPTS + xray_TESdetector.gdml pixelpos.txt run01.mac run02.mac init_vis.mac vis.mac + ) + +foreach(_script ${XrayTESdetector_SCRIPTS}) + configure_file( + ${PROJECT_SOURCE_DIR}/${_script} + ${PROJECT_BINARY_DIR}/${_script} + COPYONLY + ) +endforeach() + +#---------------------------------------------------------------------------- +# For internal Geant4 use - but has no effect if you build this +# example standalone +# +add_custom_target(XrayTESdetectorL2 DEPENDS XrayTESdetector) + +#---------------------------------------------------------------------------- +# Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX +# +install(TARGETS XrayTESdetector DESTINATION bin) + + diff --git a/examples/advanced/xray_TESdetector/GNUmakefile b/examples/advanced/xray_TESdetector/GNUmakefile new file mode 100644 index 00000000000..d6b6fe1acf2 --- /dev/null +++ b/examples/advanced/xray_TESdetector/GNUmakefile @@ -0,0 +1,16 @@ +name := TESarray +G4TARGET := $(name) +G4EXLIB := true + +ifndef G4INSTALL + G4INSTALL = ../../.. +endif + +.PHONY: all +all: lib bin + +include $(G4INSTALL)/config/binmake.gmk + +visclean: + rm -f g4*.prim g4*.eps g4*.wrl + rm -f .DAWN_* diff --git a/examples/advanced/xray_TESdetector/History b/examples/advanced/xray_TESdetector/History new file mode 100644 index 00000000000..3f3bce9dc9b --- /dev/null +++ b/examples/advanced/xray_TESdetector/History @@ -0,0 +1,11 @@ +# Example Xray_TESdetector History + +See `CONTRIBUTING.rst` for details of **required** info/format for each entry, +which **must** added in reverse chronological order (newest at the top). It must **not** +be used as a substitute for writing good git commit messages! + +## 2023-03-27 R.Stanzani (xraytesdetector-V11-01-01) +- Add vis manager + +## 2023-03-16 R.Stanzani (xraytesdetector-V11-01-00) +- First commit for the Xray_TESdetector example diff --git a/examples/advanced/xray_TESdetector/README.txt b/examples/advanced/xray_TESdetector/README.txt new file mode 100644 index 00000000000..112a668dc74 --- /dev/null +++ b/examples/advanced/xray_TESdetector/README.txt @@ -0,0 +1,172 @@ +-------------------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + Xray_TESdetector + ------------------ + P.Dondero (1), R.Stanzani (1) + Dec 2022 + + 1. Swhard S.r.l, Genoa (GE), Italy. + +-------------------------------------------------------------------------------- + + Contacts: paolo.dondero@cern.ch, ronny.stanzani@cern.ch + +-------------------------------------------------------------------------------- + Acknowledgements: example developed within the ESA AREMBES Project, + Contract n. 4000116655/16/NL/BW. This example is a reduced mass model of the + Athena X-IFU instrument based on an early configuration which is no more + applicable for any evaluation. Simone Lotti provided the simplified mass + model and background derived from those used in [1]. +-------------------------------------------------------------------------------- + + Xray_TESdetector is an example of the application of Geant4 in a space + environment. It represents an x-ray detector derived from the X-IFU, the + X-ray spectrometer designed and developed by the European Space Agency (ESA) + for use on the ATHENA telescope. + The detector is a Transition-edge sensor (TES) composed of 317 Bismuth pixels + arranged in a hexagonal shape and its setup includes different layers of + shielding, filters and support. + The main purpose of the simulation is the estimation of the particle radiation + background impacting on the detector. For execution time optimization purposes, + only particle steps respecting specific conditions (e.g. hit selected + volumes close to the detector) are stored on a .root file [2]. + An example of ROOT-based analysis of the output file is included + ("./analysis/analysis.C") and can be used to obtain basic plots and histograms. + Xray_TESdetector implements a physics list dedicated to space radiation interactions, + developed within the ESA AREMBES Project for the ATHENA mission, called Space + Physics List (SPL). + Technically, this example shows how to manage a complex geometry obtained + with advanced detector construction features (e.g., boolean operations, + parameterisation). + In addition, the example shows a way to optimize the simulation's execution time + and output size by selectively saving data based on specific combined conditions + (e.g. position, eventID and process name). + NOTE: in a multiple-run session, the last run always overrides the root file. + +1 - GEOMETRY DEFINITION + + The geometry consists of a simplified version of the X-IFU detector and is composed of + the following: + - the TES array, the backscattering (BSC) and the + Anti-coincidence detector (ACD); + - the structural elements supporting the detector (e.g. the cage underneath + it); + - the thermal shieldings; + - the structural elements of the cryostat chamber; + - a hollow Aluminum sphere schematizing the satellite. + Detector parameters: + - Detector thickness: 3 um + - Number of pixels: 317 + - Detector's shape: regular hexagon + - Hexagon's apothem: 8.593 mm + The default geometry is constructed in DetectorConstruction class. + Alternatively, a GDML file is provided (xray_TESdetector.gdml). + The position of each pixel is defined by a list of coordinates (x,y) + contained in "pixelpos.txt". + +2 - PARTICLE SOURCE + + The radiation field is composed of galactic cosmic rays (GCR) protons with a + flux estimated for the L1/L2 Lagrangian points, as described in [1]. + The energies range from 10 MeV to 100 GeV, and the particles are isotropically + generated on the surface of a sphere surrounding the geometry and randomly + launched toward its interior. The detector is placed in the center of the + sphere and the sphere's radius is chosen to avoid intersections with geometry + elements. + +3 - PHYSICS LIST + + This example implements a dedicated physics list called "Space Physics List", + developed within the ESA AREMBES Project. This physics list has been designed + focusing on the ATHENA physics processes, but contains high precision + models that can be used in a more general space application. + In details, this physics list provides a custom electromagnetic part combined + with the QBBC hadronic physics list. + In volumes near the detector, where high precision in the scattering description + is needed, the use of Single Scattering (SS) model is reccomended, as shown in + the "run01.mac", through the SetEmRegion command. + The use of SS only in selected regions allows the simulation to reduce CPU + consumption in the majority of the volumes and be very accurate near the + detector. + The default production cuts are selected for all volumes, i.e. 1mm. + +4 - HOW TO RUN THE EXAMPLE + + Compile code and execute the example in 'batch' mode from the macro file: + ./XrayTESdetector run01.mac + to launch it with the DetectorConstruction, or: + ./XrayTESdetector run02.mac + to launch it by using the provided GDML. + For this example, the multi-thread (MT) capability of Geant4 is enabled by + default. To specify the desired number of threads, the user can use the + command "/run/numberOfThreads" in "run01.mac". + +5 - STEPPING + + Within the "SteppingAction" class relevant information about the particle's + state are stored in Tuples [2], defined in the "HistoManager" class. + The tuples contain the following information: + 1. event ID + 2. volume name + 3. track ID + 4. coordinates (x,y,z) + 5. angles (theta, phi) + 6. parent ID + 7. pixel number (from the TES array) + 8. step energy deposit + 9. step number + 10. initial kinetic energy + 11. kinetic energy + 12. particle name + 13. pre and post-step names + 14. creator process name + + Tuples are filled with the informations listed above in two cases: + - when a new particle is generated (both primaries and secondaries); + - when the particles reach the volumes next to the detector and the + detector itself. + +6 - ANALYSIS + + xray_TESdetector provides an analysis macro example (analysis.C) with several + predefined histograms: + - Average energy deposit per pixel (1D); + - Energy deposit on the detector (2D); + - Particle count per pixel (1D); + - Spectra of the primaries on the detector (1D); + - Total spectra on the detector (1D); + - distribution of the particles on the detector (1D). + + The first three are used to qualitatively check how the interactions are + distributed on the detector pixels and what is the average deposit per pixel + and particle. The 2D histogram for the Energy deposit on the detector shows + the shape of the detector on the XY plane. + The spectrum histograms are used to observe the following: + - the initial energies of the particles (at launch or generation); + - the energy deposit on the detector; + - the energy of the step before the impact on the pixel. + Those information are the starting point to assess the background + composition and intensity on the detector, and thus optimize the + detector shielding and background rejection techniques. + Histograms are managed by the "analysis.C" file. + + 7 - VISUALISATION + + The visualization manager is set via the G4VisExecutive class + in the main() function in xray_TESdetector.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. + +-------------------------------------------------------------------------------- + +References + + [1] S. Lotti, S. Molendi, C. Macculi, V. Fioretti, L. Piro et al., "Review of + the Particle Background of the Athena X-IFU Instrument", The Astrophysical + Journal, 2021. + [2] BRUN, René, et al. "The ROOT Users Guide". CERN, http://root.cern.ch, 2003. diff --git a/examples/advanced/xray_TESdetector/XrayTESdetector.out b/examples/advanced/xray_TESdetector/XrayTESdetector.out new file mode 100644 index 00000000000..f6911efef3f --- /dev/null +++ b/examples/advanced/xray_TESdetector/XrayTESdetector.out @@ -0,0 +1,1946 @@ + +************************************************************** + Geant4 version Name: geant4-11-01-ref-02 [MT] (28-February-2023) + << in Multi-threaded mode >> + Copyright : Geant4 Collaboration + References : NIM A 506 (2003), 250-303 + : IEEE-TNS 53 (2006), 270-278 + : NIM A 835 (2016), 186-225 + WWW : http://geant4.org/ +************************************************************** + +1 - Defining DecayPhysics +2 - Defining RadioactiveDecayPhysics +3 - Defining Standard em +PhysicsList::AddPhysicsList: +X - Defining SpacePhysics +---> Using G4EmStandard_SpacePhysics v. 11.03 + +========================================================================================== +G4TaskRunManager :: Using G4ThreadPool... +========================================================================================== + +Build a new geometry +### HadronInelasticQBBC Construct Process: + Emin(FTFP)= 3 GeV; Emax(FTFP)= 100000 GeV + Emin(BERT)= 1 GeV; Emax(BERT)= 6 GeV; Emax(BERTpions)= 12 GeV; + Emin(BIC) = 0 GeV; Emax(BIC)= 1.5 GeV. +4 - Defining em options +======================================================================= +====== Electromagnetic Physics Parameters ======== +======================================================================= +LPM effect enabled 1 +Enable creation and use of sampling tables 0 +Apply cuts on all EM processes 0 +Use combined TransportationWithMsc Disabled +Use general process 0 +Enable linear polarisation for gamma 0 +Enable photoeffect sampling below K-shell 1 +Enable sampling of quantum entanglement 0 +X-section factor for integral approach 0.8 +Min kinetic energy for tables 100 eV +Max kinetic energy for tables 100 TeV +Number of bins per decade of a table 20 +Verbose level 1 +Verbose level for worker thread 0 +Bremsstrahlung energy threshold above which + primary e+- is added to the list of secondary 10 TeV +Bremsstrahlung energy threshold above which primary + muon/hadron is added to the list of secondary 100 TeV +Lowest triplet kinetic energy 1 MeV +Enable sampling of gamma linear polarisation 0 +5D gamma conversion model type 0 +5D gamma conversion model on isolated ion 0 +Livermore data directory epics_2017 +======================================================================= +====== Ionisation Parameters ======== +======================================================================= +Step function for e+- (0.2, 0.01 mm) +Step function for muons/hadrons (0.05, 1e-05 mm) +Step function for light ions (0.1, 0.02 mm) +Step function for general ions (0.1, 0.001 mm) +Lowest e+e- kinetic energy 50 eV +Lowest muon/hadron kinetic energy 1 keV +Use ICRU90 data 1 +Fluctuations of dE/dx are enabled 1 +Type of fluctuation model for leptons and hadrons Universal +Use built-in Birks satuaration 0 +Build CSDA range enabled 0 +Use cut as a final range enabled 0 +Enable angular generator interface 1 +Max kinetic energy for CSDA tables 1 GeV +Max kinetic energy for NIEL computation 1 MeV +Linear loss limit 0.01 +Read data from file for e+e- pair production by mu 0 +======================================================================= +====== Multiple Scattering Parameters ======== +======================================================================= +Type of msc step limit algorithm for e+- 2 +Type of msc step limit algorithm for muons/hadrons 0 +Msc lateral displacement for e+- enabled 1 +Msc lateral displacement for muons and hadrons 0 +Urban msc model lateral displacement alg96 1 +Range factor for msc step limit for e+- 0.08 +Range factor for msc step limit for muons/hadrons 0.2 +Geometry factor for msc step limitation of e+- 2.5 +Safety factor for msc step limit for e+- 0.6 +Skin parameter for msc step limitation of e+- 3 +Lambda limit for msc step limit for e+- 1 mm +Use Mott correction for e- scattering 1 +Factor used for dynamic computation of angular + limit between single and multiple scattering 1 +Fixed angular limit between single + and multiple scattering 3.1416 rad +Upper energy limit for e+- multiple scattering 100 MeV +Type of electron single scattering model 0 +Type of nuclear form-factor 1 +Screening factor 1 +======================================================================= +====== Atomic Deexcitation Parameters ======== +======================================================================= +Fluorescence enabled 1 +Directory in G4LEDATA for fluorescence data files fluor +Auger electron cascade enabled 0 +PIXE atomic de-excitation enabled 1 +De-excitation module ignores cuts 0 +Type of PIXE cross section for hadrons Empirical +Type of PIXE cross section for e+- Livermore +======================================================================= +======================================================================= +====== Electromagnetic Physics Parameters ======== +======================================================================= +LPM effect enabled 1 +Enable creation and use of sampling tables 0 +Apply cuts on all EM processes 0 +Use combined TransportationWithMsc Disabled +Use general process 0 +Enable linear polarisation for gamma 0 +Enable photoeffect sampling below K-shell 1 +Enable sampling of quantum entanglement 0 +X-section factor for integral approach 0.8 +Min kinetic energy for tables 100 eV +Max kinetic energy for tables 100 TeV +Number of bins per decade of a table 20 +Verbose level 1 +Verbose level for worker thread 0 +Bremsstrahlung energy threshold above which + primary e+- is added to the list of secondary 10 TeV +Bremsstrahlung energy threshold above which primary + muon/hadron is added to the list of secondary 100 TeV +Lowest triplet kinetic energy 1 MeV +Enable sampling of gamma linear polarisation 0 +5D gamma conversion model type 0 +5D gamma conversion model on isolated ion 0 +Livermore data directory epics_2017 +======================================================================= +====== Ionisation Parameters ======== +======================================================================= +Step function for e+- (0.2, 0.01 mm) +Step function for muons/hadrons (0.05, 1e-05 mm) +Step function for light ions (0.1, 0.02 mm) +Step function for general ions (0.1, 0.001 mm) +Lowest e+e- kinetic energy 50 eV +Lowest muon/hadron kinetic energy 1 keV +Use ICRU90 data 1 +Fluctuations of dE/dx are enabled 1 +Type of fluctuation model for leptons and hadrons Universal +Use built-in Birks satuaration 0 +Build CSDA range enabled 0 +Use cut as a final range enabled 0 +Enable angular generator interface 1 +Max kinetic energy for CSDA tables 1 GeV +Max kinetic energy for NIEL computation 1 MeV +Linear loss limit 0.01 +Read data from file for e+e- pair production by mu 0 +======================================================================= +====== Multiple Scattering Parameters ======== +======================================================================= +Type of msc step limit algorithm for e+- 2 +Type of msc step limit algorithm for muons/hadrons 0 +Msc lateral displacement for e+- enabled 1 +Msc lateral displacement for muons and hadrons 0 +Urban msc model lateral displacement alg96 1 +Range factor for msc step limit for e+- 0.08 +Range factor for msc step limit for muons/hadrons 0.2 +Geometry factor for msc step limitation of e+- 2.5 +Safety factor for msc step limit for e+- 0.6 +Skin parameter for msc step limitation of e+- 3 +Lambda limit for msc step limit for e+- 1 mm +Use Mott correction for e- scattering 1 +Factor used for dynamic computation of angular + limit between single and multiple scattering 1 +Fixed angular limit between single + and multiple scattering 3.1416 rad +Upper energy limit for e+- multiple scattering 100 MeV +Type of electron single scattering model 0 +Type of nuclear form-factor 1 +Screening factor 1 +======================================================================= +====== Atomic Deexcitation Parameters ======== +======================================================================= +Fluorescence enabled 1 +Directory in G4LEDATA for fluorescence data files fluor +Auger electron cascade enabled 0 +PIXE atomic de-excitation enabled 1 +De-excitation module ignores cuts 0 +Type of PIXE cross section for hadrons Empirical +Type of PIXE cross section for e+- Livermore +======================================================================= + +### === Deexcitation model UAtomDeexcitation is activated for 2 regions: + DefaultRegionForTheWorld 0 0 0 + InnerRegion 1 1 1 + +### === G4UAtomicDeexcitation::InitialiseForNewRun() +### === Ignore cuts flag: 0 +### === PIXE model for hadrons: Empirical +### === PIXE model for e+-: Livermore + +phot: for gamma SubType=12 BuildTable=0 + LambdaPrime table from 200 keV to 100 TeV in 174 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermorePhElectric : Emin= 0 eV Emax= 100 TeV SauterGavrila Fluo + +compt: for gamma SubType=13 BuildTable=1 + Lambda table from 100 eV to 1 MeV, 20 bins/decade, spline: 1 + LambdaPrime table from 1 MeV to 100 TeV in 160 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LowEPComptonModel : Emin= 0 eV Emax= 20 MeV Fluo + KleinNishina : Emin= 20 MeV Emax= 100 TeV Fluo + +conv: for gamma SubType=14 BuildTable=1 + Lambda table from 1.022 MeV to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + BetheHeitler5D : Emin= 0 eV Emax= 100 TeV ModifiedTsai + +Rayl: for gamma SubType=11 BuildTable=1 + Lambda table from 100 eV to 150 keV, 20 bins/decade, spline: 0 + LambdaPrime table from 150 keV to 100 TeV in 176 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermoreRayleigh : Emin= 0 eV Emax= 100 TeV CullenGenerator + +msc: for e- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + GoudsmitSaunderson : Emin= 0 eV Emax= 100 MeV Nbins=120 100 eV - 100 MeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=120 100 MeV - 100 TeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +eIoni: for e- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.2, 0.01 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LowEnergyIoni : Emin= 0 eV Emax= 100 keV deltaVI + MollerBhabha : Emin= 100 keV Emax= 100 TeV deltaVI + +eBrem: for e- XStype:4 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 10000 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eBremSB : Emin= 0 eV Emax= 1 GeV AngularGen2BS + eBremLPM : Emin= 1 GeV Emax= 100 TeV AngularGen2BS + +ePairProd: for e- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 25x1001; from 0.1 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ePairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 + Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 100 MeV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for e- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for e+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + GoudsmitSaunderson : Emin= 0 eV Emax= 100 MeV Nbins=120 100 eV - 100 MeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=120 100 MeV - 100 TeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +eIoni: for e+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.2, 0.01 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + PenIoni : Emin= 0 eV Emax= 100 keV + MollerBhabha : Emin= 100 keV Emax= 100 TeV deltaVI + +eBrem: for e+ XStype:4 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 10000 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eBremSB : Emin= 0 eV Emax= 1 GeV AngularGen2BS + eBremLPM : Emin= 1 GeV Emax= 100 TeV AngularGen2BS + +ePairProd: for e+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 25x1001; from 0.1 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ePairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +annihil: for e+ XStype:2 SubType=5 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eplus2gg : Emin= 0 eV Emax= 100 TeV + +CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 + Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 100 MeV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for e+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for proton SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for proton XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax= 2 MeV deltaVI + BetheBloch : Emin= 2 MeV Emax= 100 TeV deltaVI + +hBrems: for proton XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + ===== Limit on energy threshold has been applied + +hPairProd: for proton XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 17x1001; from 7.50618 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +nuclearStopping: for proton SubType=8 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV + +SingleCoulombScat: for proton XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for GenericIon SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + UrbanMsc : Emin= 0 eV Emax= 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +ionIoni: for GenericIon XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.001 mm), integ: 3, fluct: 1, linLossLim= 0.02 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ParamICRU73 : Emin= 0 eV Emax= 100 TeV deltaVI + +nuclearStopping: for GenericIon SubType=8 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV + +SingleCoulombScat: for GenericIon XStype:2 SubType=1 BuildTable=0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== +IonCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for alpha SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + UrbanMsc : Emin= 0 eV Emax= 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +ionIoni: for alpha XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.02 mm), integ: 3, fluct: 1, linLossLim= 0.02 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + BraggIon : Emin= 0 eV Emax=7.9452 MeV deltaVI + BetheBloch : Emin=7.9452 MeV Emax= 100 TeV deltaVI + +nuclearStopping: for alpha SubType=8 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV + +SingleCoulombScat: for alpha XStype:2 SubType=1 BuildTable=0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== +IonCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for anti_proton SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for anti_proton XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax= 2 MeV deltaVI + BetheBloch : Emin= 2 MeV Emax= 100 TeV deltaVI + +hBrems: for anti_proton XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + ===== Limit on energy threshold has been applied + +hPairProd: for anti_proton XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 17x1001; from 7.50618 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for anti_proton XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for kaon+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for kaon+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=1.05231 MeV deltaVI + BetheBloch : Emin=1.05231 MeV Emax= 100 TeV deltaVI + +hBrems: for kaon+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + ===== Limit on energy threshold has been applied + +hPairProd: for kaon+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 18x1001; from 3.94942 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for kaon+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for kaon- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for kaon- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=1.05231 MeV deltaVI + BetheBloch : Emin=1.05231 MeV Emax= 100 TeV deltaVI + +hBrems: for kaon- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + ===== Limit on energy threshold has been applied + +hPairProd: for kaon- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 18x1001; from 3.94942 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 + Used Lambda table of kaon+ + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for kaon- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for mu+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +muIoni: for mu+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax= 200 keV deltaVI + MuBetheBloch : Emin= 200 keV Emax= 100 TeV + +muBrems: for mu+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + ===== Limit on energy threshold has been applied + +muPairProd: for mu+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 21x1001; from 0.85 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for mu+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for mu- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +muIoni: for mu- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax= 200 keV deltaVI + MuBetheBloch : Emin= 200 keV Emax= 100 TeV + +muBrems: for mu- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + ===== Limit on energy threshold has been applied + +muPairProd: for mu- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 21x1001; from 0.85 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 + Used Lambda table of mu+ + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for mu- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for pi+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for pi+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=297.505 keV deltaVI + BetheBloch : Emin=297.505 keV Emax= 100 TeV deltaVI + +hBrems: for pi+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + ===== Limit on energy threshold has been applied + +hPairProd: for pi+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 20x1001; from 1.11656 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for pi+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for pi- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for pi- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=297.505 keV deltaVI + BetheBloch : Emin=297.505 keV Emax= 100 TeV deltaVI + +hBrems: for pi- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + ===== Limit on energy threshold has been applied + +hPairProd: for pi- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 20x1001; from 1.11656 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 + Used Lambda table of pi+ + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for pi- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +==================================================================== + HADRONIC PROCESSES SUMMARY (verbose level 1) + +--------------------------------------------------- + Hadronic Processes for B- + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: B-Inelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for D- + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: D-Inelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for GenericIon + + Process: ionInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for He3 + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + + Process: He3Inelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for alpha + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + + Process: alphaInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for anti_He3 + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_He3Inelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_alpha + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_alphaInelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_deuteron + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_deuteronInelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_hypertriton + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_lambda + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: anti_lambdaInelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_neutron + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100.1 MeV + Model: AntiAElastic: 100 MeV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_neutronInelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_proton + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100.1 MeV + Model: AntiAElastic: 100 MeV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_protonInelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_triton + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_tritonInelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for deuteron + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + + Process: dInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for e+ + + Process: positronNuclear + Model: G4ElectroVDNuclearModel: 0 eV ---> 1 PeV + Cr_sctns: ElectroNuclearXS: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for e- + + Process: electronNuclear + Model: G4ElectroVDNuclearModel: 0 eV ---> 1 PeV + Cr_sctns: ElectroNuclearXS: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for gamma + + Process: photonNuclear + Model: GammaNPreco: 0 eV ---> 200 MeV + Model: BertiniCascade: 199 MeV ---> 6 GeV + Model: TheoFSGenerator: 3 GeV ---> 100 TeV + Cr_sctns: GammaNuclearXS: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for kaon+ + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: kaon+Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for kaon- + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: kaon-Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: hBertiniCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for lambda + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: lambdaInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for mu+ + + Process: muonNuclear + Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV + Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for mu- + + Process: muonNuclear + Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV + Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV + + + Process: muMinusCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for neutron + + Process: hadElastic + Model: hElasticCHIPS: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV + + + Process: neutronInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 6 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV + + + Process: nCapture + Model: nRadCapture: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for pi+ + + Process: hadElastic + Model: hElasticGlauber: 0 eV ---> 100 TeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + + Process: pi+Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 12 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for pi- + + Process: hadElastic + Model: hElasticGlauber: 0 eV ---> 100 TeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + + Process: pi-Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 12 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + + Process: hBertiniCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for proton + + Process: hadElastic + Model: hElasticCHIPS: 0 eV ---> 100 TeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + + Process: protonInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 6 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: G4ParticleInelasticXS: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for sigma- + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: sigma-Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: hBertiniCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for triton + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + + Process: tInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +================================================================ +======================================================================= +====== Pre-compound/De-excitation Physics Parameters ======== +======================================================================= +Type of pre-compound inverse x-section 3 +Pre-compound model active 1 +Pre-compound excitation low energy 100 keV +Pre-compound excitation high energy 30 MeV +Type of de-excitation inverse x-section 3 +Type of de-excitation factory Evaporation+GEM +Number of de-excitation channels 68 +Min excitation energy 10 eV +Min energy per nucleon for multifragmentation 200 GeV +Limit excitation energy for Fermi BreakUp 20 MeV +Level density (1/MeV) 0.075 +Use simple level density model 1 +Use discrete excitation energy of the residual 1 +Time limit for long lived isomeres 1000 ps +Isomer production flag 1 +Internal e- conversion flag 1 +Store e- internal conversion data 1 +Correlated gamma emission flag 0 +Max 2J for sampling of angular correlations 10 +======================================================================= + +========================================================================= +--> G4TaskRunManager::CreateAndStartWorkers() --> Initializing workers... +========================================================================= + + Transportation, phot, compt, conv + Rayl, msc, eIoni, eBrem + ePairProd, CoulombScat, msc, eIoni + eBrem, annihil, CoulombScat, msc + ionIoni, nuclearStopping, msc, muIoni + muBrems, muPairProd, CoulombScat, muIoni + msc, hIoni, hBrems, hPairProd + CoulombScat, hIoni, msc, hIoni + hBrems, hPairProd, CoulombScat, hIoni + msc, hIoni, hBrems, hPairProd + CoulombScat, msc, hIoni, CoulombScat + hIoni, hIoni, msc, ionIoni + msc, ionIoni, hIoni, hIoni + hIoni, hIoni, hIoni, hIoni + hIoni, hIoni, hIoni, hIoni + hIoni, hIoni, hIoni, hIoni + hIoni, hIoni, hIoni, hIoni + hIoni, hIoni, hIoni, hIoni + hIoni, hIoni, hIoni, hIoni + hIoni, hIoni, hIoni, hIoni + hIoni, hIoni, hIoni, hIoni + hIoni, hIoni, hIoni, hIoni + SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat + SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat + SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat + SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, Decay + photonNuclear, electronNuclear, positronNuclear, muonNuclear + hadElastic, NeutronGeneralProc, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic +hFritiofCaptureAtRest,hBertiniCaptureAtRest,muMinusCaptureAtRest, dInelastic + tInelastic, He3Inelastic, alphaInelastic, ionInelastic + protonInelastic, pi+Inelastic, pi-Inelastic, kaon+Inelastic + kaon-Inelastic, kaon0SInelastic, kaon0LInelastic,anti_protonInelastic +anti_neutronInelastic,anti_deuteronInelastic,anti_tritonInelastic, anti_He3Inelastic +anti_alphaInelastic, lambdaInelastic, sigma+Inelastic, sigma-Inelastic + xi0Inelastic, xi-Inelastic, omega-Inelastic,anti_lambdaInelastic +anti_sigma+Inelastic,anti_sigma-Inelastic, anti_xi0Inelastic, anti_xi-Inelastic +anti_omega-Inelastic, D+Inelastic, D0Inelastic, D-Inelastic + anti_D0Inelastic, Ds+Inelastic, Ds-Inelastic, B+Inelastic + B0Inelastic, B-Inelastic, anti_B0Inelastic, Bs0Inelastic + anti_Bs0Inelastic, Bc+Inelastic, Bc-Inelastic, lambda_c+Inelastic + xi_c+Inelastic, xi_c0Inelastic, omega_c0Inelastic, lambda_bInelastic + xi_b0Inelastic, xi_b-Inelastic, omega_b-Inelastic,anti_lambda_c+Inelastic +anti_xi_c+Inelastic,anti_xi_c0Inelastic,anti_omega_c0Inelastic,anti_lambda_bInelastic +anti_xi_b0Inelastic,anti_xi_b-Inelastic,anti_omega_b-Inelastic + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 200 eV e- 200 eV e+ 200 eV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 6.9381 keV e- 546.315 keV e+ 525.612 keV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 2 used in the geometry : Yes + Material : G4_Cu + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 24.8209 keV e- 1.4031 MeV e+ 1.32293 MeV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 3 used in the geometry : Yes + Material : Cryoperm + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 24.1463 keV e- 1.41673 MeV e+ 1.33593 MeV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 4 used in the geometry : Yes + Material : RingAl + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 3.75362 keV e- 244.524 keV e+ 238.254 keV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 5 used in the geometry : Yes + Material : G4_Al + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 6.91664 keV e- 597.447 keV e+ 574.147 keV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 6 used in the geometry : Yes + Material : Stainless Steel + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 19.3924 keV e- 1.34692 MeV e+ 1.27338 MeV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 7 used in the geometry : Yes + Material : G4_Ti + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 13.2342 keV e- 820.572 keV e+ 782.066 keV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 8 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 200 eV e- 200 eV e+ 200 eV proton 100 keV + Region(s) which use this couple : + InnerRegion + +Index : 9 used in the geometry : Yes + Material : G4_Bi + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 99.6309 keV e- 1.20173 MeV e+ 1.12623 MeV proton 100 keV + Region(s) which use this couple : + InnerRegion + +Index : 10 used in the geometry : Yes + Material : Si3N4 + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 7.02662 keV e- 749.954 keV e+ 718.693 keV proton 100 keV + Region(s) which use this couple : + InnerRegion + +Index : 11 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 6.9381 keV e- 546.315 keV e+ 525.612 keV proton 100 keV + Region(s) which use this couple : + InnerRegion + +Index : 12 used in the geometry : Yes + Material : G4_Al + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 6.91664 keV e- 597.447 keV e+ 574.147 keV proton 100 keV + Region(s) which use this couple : + InnerRegion + +Index : 13 used in the geometry : Yes + Material : G4_Au + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 112.419 keV e- 2.28841 MeV e+ 2.12466 MeV proton 100 keV + Region(s) which use this couple : + InnerRegion + +================================================================== + +### Run 0 starts. +... set ntuple merging row mode : row-wise - done +... create file : output.root - done +... open analysis file : output.root - done +... open main analysis file : output.root - done +G4WT5 > Transportation, phot, compt, conv +G4WT6 > Transportation, phot, compt, conv +G4WT0 > Transportation, phot, compt, conv +G4WT4 > Transportation, phot, compt, conv +G4WT3 > Transportation, phot, compt, conv +G4WT1 > Transportation, phot, compt, conv +G4WT3 > Rayl, msc, eIoni, eBrem +G4WT3 > ePairProd, CoulombScat, msc, eIoni +G4WT3 > eBrem, annihil, CoulombScat, msc +G4WT3 > ionIoni, nuclearStopping, msc, muIoni +G4WT3 > muBrems, muPairProd, CoulombScat, muIoni +G4WT3 > msc, hIoni, hBrems, hPairProd +G4WT3 > CoulombScat, hIoni, msc, hIoni +G4WT3 > hBrems, hPairProd, CoulombScat, hIoni +G4WT6 > Rayl, msc, eIoni, eBrem +G4WT0 > Rayl, msc, eIoni, eBrem +G4WT6 > ePairProd, CoulombScat, msc, eIoni +G4WT0 > ePairProd, CoulombScat, msc, eIoni +G4WT4 > Rayl, msc, eIoni, eBrem +G4WT1 > Rayl, msc, eIoni, eBrem +G4WT4 > ePairProd, CoulombScat, msc, eIoni +G4WT7 > Transportation, phot, compt, conv +G4WT5 > Rayl, msc, eIoni, eBrem +G4WT5 > ePairProd, CoulombScat, msc, eIoni +G4WT3 > msc, hIoni, hBrems, hPairProd +G4WT3 > CoulombScat, msc, hIoni, CoulombScat +G4WT6 > eBrem, annihil, CoulombScat, msc +G4WT6 > ionIoni, nuclearStopping, msc, muIoni +G4WT6 > muBrems, muPairProd, CoulombScat, muIoni +G4WT6 > msc, hIoni, hBrems, hPairProd +G4WT4 > eBrem, annihil, CoulombScat, msc +G4WT4 > ionIoni, nuclearStopping, msc, muIoni +G4WT1 > ePairProd, CoulombScat, msc, eIoni +G4WT5 > eBrem, annihil, CoulombScat, msc +G4WT1 > eBrem, annihil, CoulombScat, msc +G4WT1 > ionIoni, nuclearStopping, msc, muIoni +G4WT0 > eBrem, annihil, CoulombScat, msc +G4WT0 > ionIoni, nuclearStopping, msc, muIoni +G4WT2 > Transportation, phot, compt, conv +G4WT6 > CoulombScat, hIoni, msc, hIoni +G4WT6 > hBrems, hPairProd, CoulombScat, hIoni +G4WT4 > muBrems, muPairProd, CoulombScat, muIoni +G4WT4 > msc, hIoni, hBrems, hPairProd +G4WT5 > ionIoni, nuclearStopping, msc, muIoni +G4WT5 > muBrems, muPairProd, CoulombScat, muIoni +G4WT5 > msc, hIoni, hBrems, hPairProd +G4WT5 > CoulombScat, hIoni, msc, hIoni +G4WT5 > hBrems, hPairProd, CoulombScat, hIoni +G4WT5 > msc, hIoni, hBrems, hPairProd +G4WT5 > CoulombScat, msc, hIoni, CoulombScat +G4WT5 > hIoni, hIoni, msc, ionIoni +G4WT2 > Rayl, msc, eIoni, eBrem +G4WT2 > ePairProd, CoulombScat, msc, eIoni +G4WT7 > Rayl, msc, eIoni, eBrem +G4WT7 > ePairProd, CoulombScat, msc, eIoni +G4WT7 > eBrem, annihil, CoulombScat, msc +G4WT4 > CoulombScat, hIoni, msc, hIoni +G4WT4 > hBrems, hPairProd, CoulombScat, hIoni +G4WT1 > muBrems, muPairProd, CoulombScat, muIoni +G4WT1 > msc, hIoni, hBrems, hPairProd +G4WT1 > CoulombScat, hIoni, msc, hIoni +G4WT1 > hBrems, hPairProd, CoulombScat, hIoni +G4WT5 > msc, ionIoni, hIoni, hIoni +G4WT5 > hIoni, hIoni, hIoni, hIoni +G4WT5 > hIoni, hIoni, hIoni, hIoni +G4WT5 > hIoni, hIoni, hIoni, hIoni +G4WT2 > eBrem, annihil, CoulombScat, msc +G4WT7 > ionIoni, nuclearStopping, msc, muIoni +G4WT2 > ionIoni, nuclearStopping, msc, muIoni +G4WT2 > muBrems, muPairProd, CoulombScat, muIoni +G4WT3 > hIoni, hIoni, msc, ionIoni +G4WT4 > msc, hIoni, hBrems, hPairProd +G4WT3 > msc, ionIoni, hIoni, hIoni +G4WT1 > msc, hIoni, hBrems, hPairProd +G4WT3 > hIoni, hIoni, hIoni, hIoni +G4WT7 > muBrems, muPairProd, CoulombScat, muIoni +G4WT3 > hIoni, hIoni, hIoni, hIoni +G4WT0 > muBrems, muPairProd, CoulombScat, muIoni +G4WT0 > msc, hIoni, hBrems, hPairProd +G4WT6 > msc, hIoni, hBrems, hPairProd +G4WT6 > CoulombScat, msc, hIoni, CoulombScat +G4WT6 > hIoni, hIoni, msc, ionIoni +G4WT1 > CoulombScat, msc, hIoni, CoulombScat +G4WT2 > msc, hIoni, hBrems, hPairProd +G4WT1 > hIoni, hIoni, msc, ionIoni +G4WT7 > msc, hIoni, hBrems, hPairProd +G4WT1 > msc, ionIoni, hIoni, hIoni +G4WT4 > CoulombScat, msc, hIoni, CoulombScat +G4WT5 > hIoni, hIoni, hIoni, hIoni +G4WT6 > msc, ionIoni, hIoni, hIoni +G4WT4 > hIoni, hIoni, msc, ionIoni +G4WT6 > hIoni, hIoni, hIoni, hIoni +G4WT4 > msc, ionIoni, hIoni, hIoni +G4WT6 > hIoni, hIoni, hIoni, hIoni +G4WT4 > hIoni, hIoni, hIoni, hIoni +G4WT6 > hIoni, hIoni, hIoni, hIoni +G4WT1 > hIoni, hIoni, hIoni, hIoni +G4WT5 > hIoni, hIoni, hIoni, hIoni +G4WT2 > CoulombScat, hIoni, msc, hIoni +G4WT5 > hIoni, hIoni, hIoni, hIoni +G4WT0 > CoulombScat, hIoni, msc, hIoni +G4WT7 > CoulombScat, hIoni, msc, hIoni +G4WT0 > hBrems, hPairProd, CoulombScat, hIoni +G4WT4 > hIoni, hIoni, hIoni, hIoni +G4WT4 > hIoni, hIoni, hIoni, hIoni +G4WT3 > hIoni, hIoni, hIoni, hIoni +G4WT6 > hIoni, hIoni, hIoni, hIoni +G4WT3 > hIoni, hIoni, hIoni, hIoni +G4WT3 > hIoni, hIoni, hIoni, hIoni +G4WT2 > hBrems, hPairProd, CoulombScat, hIoni +G4WT5 > hIoni, hIoni, hIoni, hIoni +G4WT2 > msc, hIoni, hBrems, hPairProd +G4WT0 > msc, hIoni, hBrems, hPairProd +G4WT0 > CoulombScat, msc, hIoni, CoulombScat +G4WT0 > hIoni, hIoni, msc, ionIoni +G4WT4 > hIoni, hIoni, hIoni, hIoni +G4WT4 > hIoni, hIoni, hIoni, hIoni +G4WT6 > hIoni, hIoni, hIoni, hIoni +G4WT3 > hIoni, hIoni, hIoni, hIoni +G4WT7 > hBrems, hPairProd, CoulombScat, hIoni +G4WT3 > hIoni, hIoni, hIoni, hIoni +G4WT7 > msc, hIoni, hBrems, hPairProd +G4WT5 > hIoni, hIoni, hIoni, hIoni +G4WT0 > msc, ionIoni, hIoni, hIoni +G4WT5 > hIoni, hIoni, hIoni, hIoni +G4WT0 > hIoni, hIoni, hIoni, hIoni +G4WT5 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT0 > hIoni, hIoni, hIoni, hIoni +G4WT4 > hIoni, hIoni, hIoni, hIoni +G4WT6 > hIoni, hIoni, hIoni, hIoni +G4WT4 > hIoni, hIoni, hIoni, hIoni +G4WT6 > hIoni, hIoni, hIoni, hIoni +G4WT4 > hIoni, hIoni, hIoni, hIoni +G4WT6 > hIoni, hIoni, hIoni, hIoni +G4WT4 > hIoni, hIoni, hIoni, hIoni +G4WT6 > hIoni, hIoni, hIoni, hIoni +G4WT0 > hIoni, hIoni, hIoni, hIoni +G4WT2 > CoulombScat, msc, hIoni, CoulombScat +G4WT7 > CoulombScat, msc, hIoni, CoulombScat +G4WT1 > hIoni, hIoni, hIoni, hIoni +G4WT5 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT4 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT3 > hIoni, hIoni, hIoni, hIoni +G4WT6 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT3 > hIoni, hIoni, hIoni, hIoni +G4WT2 > hIoni, hIoni, msc, ionIoni +G4WT7 > hIoni, hIoni, msc, ionIoni +G4WT2 > msc, ionIoni, hIoni, hIoni +G4WT5 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT2 > hIoni, hIoni, hIoni, hIoni +G4WT0 > hIoni, hIoni, hIoni, hIoni +G4WT6 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT0 > hIoni, hIoni, hIoni, hIoni +G4WT1 > hIoni, hIoni, hIoni, hIoni +G4WT7 > msc, ionIoni, hIoni, hIoni +G4WT1 > hIoni, hIoni, hIoni, hIoni +G4WT5 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, Decay +G4WT2 > hIoni, hIoni, hIoni, hIoni +G4WT3 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT2 > hIoni, hIoni, hIoni, hIoni +G4WT6 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT4 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT6 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, Decay +G4WT1 > hIoni, hIoni, hIoni, hIoni +G4WT5 > photonNuclear, electronNuclear, positronNuclear, muonNuclear +G4WT1 > hIoni, hIoni, hIoni, hIoni +G4WT3 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT1 > hIoni, hIoni, hIoni, hIoni +G4WT7 > hIoni, hIoni, hIoni, hIoni +G4WT1 > hIoni, hIoni, hIoni, hIoni +G4WT7 > hIoni, hIoni, hIoni, hIoni +G4WT1 > hIoni, hIoni, hIoni, hIoni +G4WT7 > hIoni, hIoni, hIoni, hIoni +G4WT1 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT2 > hIoni, hIoni, hIoni, hIoni +G4WT7 > hIoni, hIoni, hIoni, hIoni +G4WT6 > photonNuclear, electronNuclear, positronNuclear, muonNuclear +G4WT7 > hIoni, hIoni, hIoni, hIoni +G4WT5 > hadElastic, NeutronGeneralProc, hadElastic, hadElastic +G4WT7 > hIoni, hIoni, hIoni, hIoni +G4WT1 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT4 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT2 > hIoni, hIoni, hIoni, hIoni +G4WT4 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, Decay +G4WT6 > hadElastic, NeutronGeneralProc, hadElastic, hadElastic +G4WT3 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT6 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > hIoni, hIoni, hIoni, hIoni +G4WT1 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT0 > hIoni, hIoni, hIoni, hIoni +G4WT1 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, Decay +G4WT2 > hIoni, hIoni, hIoni, hIoni +G4WT5 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT2 > hIoni, hIoni, hIoni, hIoni +G4WT6 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > hIoni, hIoni, hIoni, hIoni +G4WT6 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT1 > photonNuclear, electronNuclear, positronNuclear, muonNuclear +G4WT6 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, Decay +G4WT5 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > photonNuclear, electronNuclear, positronNuclear, muonNuclear +G4WT4 > photonNuclear, electronNuclear, positronNuclear, muonNuclear +G4WT7 > hIoni, hIoni, hIoni, hIoni +G4WT0 > hIoni, hIoni, hIoni, hIoni +G4WT7 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT6 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT2 > hIoni, hIoni, hIoni, hIoni +G4WT6 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT5 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT4 > hadElastic, NeutronGeneralProc, hadElastic, hadElastic +G4WT1 > hadElastic, NeutronGeneralProc, hadElastic, hadElastic +G4WT7 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT1 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT2 > hIoni, hIoni, hIoni, hIoni +G4WT7 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, Decay +G4WT5 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > photonNuclear, electronNuclear, positronNuclear, muonNuclear +G4WT0 > hIoni, hIoni, hIoni, hIoni +G4WT7 > hadElastic, NeutronGeneralProc, hadElastic, hadElastic +G4WT1 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT6 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT4 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT5 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > hadElastic, NeutronGeneralProc, hadElastic, hadElastic +G4WT7 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT2 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT6 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT2 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT6 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT5 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT6 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT6 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT4 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT0 > hIoni, hIoni, hIoni, hIoni +G4WT4 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT1 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT5 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT1 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT1 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT2 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT3 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT1 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT6 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT2 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, Decay +G4WT4 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT2 > photonNuclear, electronNuclear, positronNuclear, muonNuclear +G4WT1 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT4 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT1 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT6 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT1 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT2 > hadElastic, NeutronGeneralProc, hadElastic, hadElastic +G4WT0 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT2 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT6 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT1 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT6 > hFritiofCaptureAtRest,hBertiniCaptureAtRest,muMinusCaptureAtRest, dInelastic +G4WT0 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT6 > tInelastic, He3Inelastic, alphaInelastic, ionInelastic +G4WT5 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT0 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat +G4WT3 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT4 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT4 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT4 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT5 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT4 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT1 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT2 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT1 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT5 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT4 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT6 > protonInelastic, pi+Inelastic, pi-Inelastic, kaon+Inelastic +G4WT1 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT6 > kaon-Inelastic, kaon0SInelastic, kaon0LInelastic,anti_protonInelastic +G4WT0 > SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, Decay +G4WT6 > anti_neutronInelastic,anti_deuteronInelastic,anti_tritonInelastic, anti_He3Inelastic +G4WT7 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT6 > anti_alphaInelastic, lambdaInelastic, sigma+Inelastic, sigma-Inelastic +G4WT7 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT2 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT1 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT1 > hFritiofCaptureAtRest,hBertiniCaptureAtRest,muMinusCaptureAtRest, dInelastic +G4WT5 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT6 > xi0Inelastic, xi-Inelastic, omega-Inelastic,anti_lambdaInelastic +G4WT3 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT6 > anti_sigma+Inelastic,anti_sigma-Inelastic, anti_xi0Inelastic, anti_xi-Inelastic +G4WT3 > hFritiofCaptureAtRest,hBertiniCaptureAtRest,muMinusCaptureAtRest, dInelastic +G4WT0 > photonNuclear, electronNuclear, positronNuclear, muonNuclear +G4WT3 > tInelastic, He3Inelastic, alphaInelastic, ionInelastic +G4WT5 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT5 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT1 > tInelastic, He3Inelastic, alphaInelastic, ionInelastic +G4WT5 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT6 > anti_omega-Inelastic, D+Inelastic, D0Inelastic, D-Inelastic +G4WT5 > hFritiofCaptureAtRest,hBertiniCaptureAtRest,muMinusCaptureAtRest, dInelastic +G4WT6 > anti_D0Inelastic, Ds+Inelastic, Ds-Inelastic, B+Inelastic +G4WT2 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT4 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > hFritiofCaptureAtRest,hBertiniCaptureAtRest,muMinusCaptureAtRest, dInelastic +G4WT0 > hadElastic, NeutronGeneralProc, hadElastic, hadElastic +G4WT3 > protonInelastic, pi+Inelastic, pi-Inelastic, kaon+Inelastic +G4WT0 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > kaon-Inelastic, kaon0SInelastic, kaon0LInelastic,anti_protonInelastic +G4WT0 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > anti_neutronInelastic,anti_deuteronInelastic,anti_tritonInelastic, anti_He3Inelastic +G4WT0 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > anti_alphaInelastic, lambdaInelastic, sigma+Inelastic, sigma-Inelastic +G4WT0 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > xi0Inelastic, xi-Inelastic, omega-Inelastic,anti_lambdaInelastic +G4WT6 > B0Inelastic, B-Inelastic, anti_B0Inelastic, Bs0Inelastic +G4WT2 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT6 > anti_Bs0Inelastic, Bc+Inelastic, Bc-Inelastic, lambda_c+Inelastic +G4WT4 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > tInelastic, He3Inelastic, alphaInelastic, ionInelastic +G4WT4 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > protonInelastic, pi+Inelastic, pi-Inelastic, kaon+Inelastic +G4WT4 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT1 > protonInelastic, pi+Inelastic, pi-Inelastic, kaon+Inelastic +G4WT2 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT1 > kaon-Inelastic, kaon0SInelastic, kaon0LInelastic,anti_protonInelastic +G4WT6 > xi_c+Inelastic, xi_c0Inelastic, omega_c0Inelastic, lambda_bInelastic +G4WT1 > anti_neutronInelastic,anti_deuteronInelastic,anti_tritonInelastic, anti_He3Inelastic +G4WT6 > xi_b0Inelastic, xi_b-Inelastic, omega_b-Inelastic,anti_lambda_c+Inelastic +G4WT1 > anti_alphaInelastic, lambdaInelastic, sigma+Inelastic, sigma-Inelastic +G4WT6 > anti_xi_c+Inelastic,anti_xi_c0Inelastic,anti_omega_c0Inelastic,anti_lambda_bInelastic +G4WT4 > hFritiofCaptureAtRest,hBertiniCaptureAtRest,muMinusCaptureAtRest, dInelastic +G4WT2 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT4 > tInelastic, He3Inelastic, alphaInelastic, ionInelastic +G4WT3 > anti_sigma+Inelastic,anti_sigma-Inelastic, anti_xi0Inelastic, anti_xi-Inelastic +G4WT0 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > anti_omega-Inelastic, D+Inelastic, D0Inelastic, D-Inelastic +G4WT1 > xi0Inelastic, xi-Inelastic, omega-Inelastic,anti_lambdaInelastic +G4WT6 > anti_xi_b0Inelastic,anti_xi_b-Inelastic,anti_omega_b-Inelastic +G4WT1 > anti_sigma+Inelastic,anti_sigma-Inelastic, anti_xi0Inelastic, anti_xi-Inelastic +G4WT2 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT4 > protonInelastic, pi+Inelastic, pi-Inelastic, kaon+Inelastic +G4WT2 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT0 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > anti_D0Inelastic, Ds+Inelastic, Ds-Inelastic, B+Inelastic +G4WT0 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > B0Inelastic, B-Inelastic, anti_B0Inelastic, Bs0Inelastic +G4WT0 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > anti_Bs0Inelastic, Bc+Inelastic, Bc-Inelastic, lambda_c+Inelastic +G4WT0 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > xi_c+Inelastic, xi_c0Inelastic, omega_c0Inelastic, lambda_bInelastic +G4WT0 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT3 > xi_b0Inelastic, xi_b-Inelastic, omega_b-Inelastic,anti_lambda_c+Inelastic +G4WT0 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT2 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT5 > tInelastic, He3Inelastic, alphaInelastic, ionInelastic +G4WT2 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT5 > protonInelastic, pi+Inelastic, pi-Inelastic, kaon+Inelastic +G4WT4 > kaon-Inelastic, kaon0SInelastic, kaon0LInelastic,anti_protonInelastic +G4WT3 > anti_xi_c+Inelastic,anti_xi_c0Inelastic,anti_omega_c0Inelastic,anti_lambda_bInelastic +G4WT4 > anti_neutronInelastic,anti_deuteronInelastic,anti_tritonInelastic, anti_He3Inelastic +G4WT3 > anti_xi_b0Inelastic,anti_xi_b-Inelastic,anti_omega_b-Inelastic +G4WT7 > kaon-Inelastic, kaon0SInelastic, kaon0LInelastic,anti_protonInelastic +G4WT2 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > anti_neutronInelastic,anti_deuteronInelastic,anti_tritonInelastic, anti_He3Inelastic +G4WT0 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > anti_alphaInelastic, lambdaInelastic, sigma+Inelastic, sigma-Inelastic +G4WT0 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > xi0Inelastic, xi-Inelastic, omega-Inelastic,anti_lambdaInelastic +G4WT0 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT7 > anti_sigma+Inelastic,anti_sigma-Inelastic, anti_xi0Inelastic, anti_xi-Inelastic +G4WT0 > hFritiofCaptureAtRest,hBertiniCaptureAtRest,muMinusCaptureAtRest, dInelastic +G4WT7 > anti_omega-Inelastic, D+Inelastic, D0Inelastic, D-Inelastic +G4WT0 > tInelastic, He3Inelastic, alphaInelastic, ionInelastic +G4WT2 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT1 > anti_omega-Inelastic, D+Inelastic, D0Inelastic, D-Inelastic +G4WT2 > hadElastic, hadElastic, hadElastic, hadElastic +G4WT5 > kaon-Inelastic, kaon0SInelastic, kaon0LInelastic,anti_protonInelastic +G4WT0 > protonInelastic, pi+Inelastic, pi-Inelastic, kaon+Inelastic +G4WT5 > anti_neutronInelastic,anti_deuteronInelastic,anti_tritonInelastic, anti_He3Inelastic +G4WT0 > kaon-Inelastic, kaon0SInelastic, kaon0LInelastic,anti_protonInelastic +G4WT1 > anti_D0Inelastic, Ds+Inelastic, Ds-Inelastic, B+Inelastic +G4WT2 > hFritiofCaptureAtRest,hBertiniCaptureAtRest,muMinusCaptureAtRest, dInelastic +G4WT7 > anti_D0Inelastic, Ds+Inelastic, Ds-Inelastic, B+Inelastic +G4WT2 > tInelastic, He3Inelastic, alphaInelastic, ionInelastic +G4WT5 > anti_alphaInelastic, lambdaInelastic, sigma+Inelastic, sigma-Inelastic +G4WT2 > protonInelastic, pi+Inelastic, pi-Inelastic, kaon+Inelastic +G4WT5 > xi0Inelastic, xi-Inelastic, omega-Inelastic,anti_lambdaInelastic +G4WT2 > kaon-Inelastic, kaon0SInelastic, kaon0LInelastic,anti_protonInelastic +G4WT4 > anti_alphaInelastic, lambdaInelastic, sigma+Inelastic, sigma-Inelastic +G4WT7 > B0Inelastic, B-Inelastic, anti_B0Inelastic, Bs0Inelastic +G4WT4 > xi0Inelastic, xi-Inelastic, omega-Inelastic,anti_lambdaInelastic +G4WT1 > B0Inelastic, B-Inelastic, anti_B0Inelastic, Bs0Inelastic +G4WT2 > anti_neutronInelastic,anti_deuteronInelastic,anti_tritonInelastic, anti_He3Inelastic +G4WT5 > anti_sigma+Inelastic,anti_sigma-Inelastic, anti_xi0Inelastic, anti_xi-Inelastic +G4WT2 > anti_alphaInelastic, lambdaInelastic, sigma+Inelastic, sigma-Inelastic +G4WT7 > anti_Bs0Inelastic, Bc+Inelastic, Bc-Inelastic, lambda_c+Inelastic +G4WT4 > anti_sigma+Inelastic,anti_sigma-Inelastic, anti_xi0Inelastic, anti_xi-Inelastic +G4WT7 > xi_c+Inelastic, xi_c0Inelastic, omega_c0Inelastic, lambda_bInelastic +G4WT0 > anti_neutronInelastic,anti_deuteronInelastic,anti_tritonInelastic, anti_He3Inelastic +G4WT5 > anti_omega-Inelastic, D+Inelastic, D0Inelastic, D-Inelastic +G4WT2 > xi0Inelastic, xi-Inelastic, omega-Inelastic,anti_lambdaInelastic +G4WT5 > anti_D0Inelastic, Ds+Inelastic, Ds-Inelastic, B+Inelastic +G4WT2 > anti_sigma+Inelastic,anti_sigma-Inelastic, anti_xi0Inelastic, anti_xi-Inelastic +G4WT5 > B0Inelastic, B-Inelastic, anti_B0Inelastic, Bs0Inelastic +G4WT7 > xi_b0Inelastic, xi_b-Inelastic, omega_b-Inelastic,anti_lambda_c+Inelastic +G4WT0 > anti_alphaInelastic, lambdaInelastic, sigma+Inelastic, sigma-Inelastic +G4WT7 > anti_xi_c+Inelastic,anti_xi_c0Inelastic,anti_omega_c0Inelastic,anti_lambda_bInelastic +G4WT0 > xi0Inelastic, xi-Inelastic, omega-Inelastic,anti_lambdaInelastic +G4WT7 > anti_xi_b0Inelastic,anti_xi_b-Inelastic,anti_omega_b-Inelastic +G4WT0 > anti_sigma+Inelastic,anti_sigma-Inelastic, anti_xi0Inelastic, anti_xi-Inelastic +G4WT5 > anti_Bs0Inelastic, Bc+Inelastic, Bc-Inelastic, lambda_c+Inelastic +G4WT0 > anti_omega-Inelastic, D+Inelastic, D0Inelastic, D-Inelastic +G4WT4 > anti_omega-Inelastic, D+Inelastic, D0Inelastic, D-Inelastic +G4WT1 > anti_Bs0Inelastic, Bc+Inelastic, Bc-Inelastic, lambda_c+Inelastic +G4WT4 > anti_D0Inelastic, Ds+Inelastic, Ds-Inelastic, B+Inelastic +G4WT1 > xi_c+Inelastic, xi_c0Inelastic, omega_c0Inelastic, lambda_bInelastic +G4WT4 > B0Inelastic, B-Inelastic, anti_B0Inelastic, Bs0Inelastic +G4WT2 > anti_omega-Inelastic, D+Inelastic, D0Inelastic, D-Inelastic +G4WT0 > anti_D0Inelastic, Ds+Inelastic, Ds-Inelastic, B+Inelastic +G4WT5 > xi_c+Inelastic, xi_c0Inelastic, omega_c0Inelastic, lambda_bInelastic +G4WT1 > xi_b0Inelastic, xi_b-Inelastic, omega_b-Inelastic,anti_lambda_c+Inelastic +G4WT5 > xi_b0Inelastic, xi_b-Inelastic, omega_b-Inelastic,anti_lambda_c+Inelastic +G4WT2 > anti_D0Inelastic, Ds+Inelastic, Ds-Inelastic, B+Inelastic +G4WT0 > B0Inelastic, B-Inelastic, anti_B0Inelastic, Bs0Inelastic +G4WT2 > B0Inelastic, B-Inelastic, anti_B0Inelastic, Bs0Inelastic +G4WT4 > anti_Bs0Inelastic, Bc+Inelastic, Bc-Inelastic, lambda_c+Inelastic +G4WT2 > anti_Bs0Inelastic, Bc+Inelastic, Bc-Inelastic, lambda_c+Inelastic +G4WT5 > anti_xi_c+Inelastic,anti_xi_c0Inelastic,anti_omega_c0Inelastic,anti_lambda_bInelastic +G4WT4 > xi_c+Inelastic, xi_c0Inelastic, omega_c0Inelastic, lambda_bInelastic +G4WT5 > anti_xi_b0Inelastic,anti_xi_b-Inelastic,anti_omega_b-Inelastic +G4WT4 > xi_b0Inelastic, xi_b-Inelastic, omega_b-Inelastic,anti_lambda_c+Inelastic +G4WT0 > anti_Bs0Inelastic, Bc+Inelastic, Bc-Inelastic, lambda_c+Inelastic +G4WT4 > anti_xi_c+Inelastic,anti_xi_c0Inelastic,anti_omega_c0Inelastic,anti_lambda_bInelastic +G4WT2 > xi_c+Inelastic, xi_c0Inelastic, omega_c0Inelastic, lambda_bInelastic +G4WT4 > anti_xi_b0Inelastic,anti_xi_b-Inelastic,anti_omega_b-Inelastic +G4WT2 > xi_b0Inelastic, xi_b-Inelastic, omega_b-Inelastic,anti_lambda_c+Inelastic +G4WT1 > anti_xi_c+Inelastic,anti_xi_c0Inelastic,anti_omega_c0Inelastic,anti_lambda_bInelastic +G4WT0 > xi_c+Inelastic, xi_c0Inelastic, omega_c0Inelastic, lambda_bInelastic +G4WT1 > anti_xi_b0Inelastic,anti_xi_b-Inelastic,anti_omega_b-Inelastic +G4WT0 > xi_b0Inelastic, xi_b-Inelastic, omega_b-Inelastic,anti_lambda_c+Inelastic +G4WT2 > anti_xi_c+Inelastic,anti_xi_c0Inelastic,anti_omega_c0Inelastic,anti_lambda_bInelastic +G4WT0 > anti_xi_c+Inelastic,anti_xi_c0Inelastic,anti_omega_c0Inelastic,anti_lambda_bInelastic +G4WT2 > anti_xi_b0Inelastic,anti_xi_b-Inelastic,anti_omega_b-Inelastic +G4WT0 > anti_xi_b0Inelastic,anti_xi_b-Inelastic,anti_omega_b-Inelastic + +========================================================================================== +--> G4TaskRunManager::CreateAndStartWorkers() --> Creating 32 tasks with 31 events/task... +========================================================================================== + +G4WT3 > ### Run 0 starts on worker thread 3. +G4WT3 > ... set ntuple merging row mode : row-wise - done +G4WT3 > --> Event 0 starts with initial seeds (30265872,75622946). +G4WT0 > ### Run 0 starts on worker thread 0. +G4WT0 > ... set ntuple merging row mode : row-wise - done +G4WT1 > ### Run 0 starts on worker thread 1. +G4WT6 > ### Run 0 starts on worker thread 6. +G4WT1 > ... set ntuple merging row mode : row-wise - done +G4WT2 > ### Run 0 starts on worker thread 2. +G4WT6 > ... set ntuple merging row mode : row-wise - done +G4WT2 > ... set ntuple merging row mode : row-wise - done +G4WT7 > ### Run 0 starts on worker thread 7. +G4WT7 > ... set ntuple merging row mode : row-wise - done +G4WT5 > ### Run 0 starts on worker thread 5. +G4WT5 > ... set ntuple merging row mode : row-wise - done +G4WT4 > ### Run 0 starts on worker thread 4. +G4WT4 > ... set ntuple merging row mode : row-wise - done +G4WT6 > [thread 6] Thread-local run terminated. +G4WT6 > [thread 6] Run Summary +G4WT6 > [thread 6] Number of events processed : 132 +G4WT2 > [thread 2] Thread-local run terminated. +G4WT6 > [thread 6] User=1.320000s Real=0.219777s Sys=0.000000s [Cpu=600.6%] +G4WT3 > [thread 3] Thread-local run terminated. +G4WT6 > ... merge all h1 - done +G4WT4 > [thread 4] Thread-local run terminated. +G4WT7 > [thread 7] Thread-local run terminated. +G4WT7 > [thread 7] Run Summary +G4WT5 > [thread 5] Thread-local run terminated. +G4WT5 > [thread 5] Run Summary +G4WT5 > [thread 5] Number of events processed : 124 +G4WT3 > [thread 3] Run Summary +G4WT3 > [thread 3] Number of events processed : 93 +G4WT3 > [thread 3] User=1.330000s Real=0.220133s Sys=0.000000s [Cpu=604.2%] +G4WT4 > [thread 4] Run Summary +G4WT4 > [thread 4] Number of events processed : 155 +G4WT7 > [thread 7] Number of events processed : 124 +G4WT7 > [thread 7] User=1.320000s Real=0.219737s Sys=0.000000s [Cpu=600.7%] +G4WT2 > [thread 2] Run Summary +G4WT2 > [thread 2] Number of events processed : 124 +G4WT5 > [thread 5] User=1.310000s Real=0.217217s Sys=0.000000s [Cpu=603.1%] +G4WT0 > [thread 0] Thread-local run terminated. +G4WT0 > [thread 0] Run Summary +G4WT0 > [thread 0] Number of events processed : 93 +G4WT4 > [thread 4] User=1.310000s Real=0.215165s Sys=0.000000s [Cpu=608.8%] +G4WT0 > [thread 0] User=1.320000s Real=0.219891s Sys=0.000000s [Cpu=600.3%] +G4WT1 > [thread 1] Thread-local run terminated. +G4WT1 > [thread 1] Run Summary +G4WT2 > [thread 2] User=0.110000s Real=0.029376s Sys=0.000000s [Cpu=374.5%] +G4WT1 > [thread 1] Number of events processed : 155 +G4WT1 > [thread 1] User=1.320000s Real=0.219794s Sys=0.000000s [Cpu=600.6%] +G4WT6 > ... merge all h2 - done +G4WT6 > ... merge all h3 - done +G4WT6 > ... merge all p1 - done +G4WT6 > ... merge all p2 - done +G4WT5 > ... merge all h1 - done +G4WT5 > ... merge all h2 - done +G4WT5 > ... merge all h3 - done +G4WT5 > ... merge all p1 - done +G4WT5 > ... merge all p2 - done +G4WT1 > ... merge all h1 - done +G4WT1 > ... merge all h2 - done +G4WT1 > ... merge all h3 - done +G4WT1 > ... merge all p1 - done +G4WT1 > ... merge all p2 - done +G4WT4 > ... merge all h1 - done +G4WT4 > ... merge all h2 - done +G4WT4 > ... merge all h3 - done +G4WT4 > ... merge all p1 - done +G4WT4 > ... merge all p2 - done +G4WT0 > ... merge all h1 - done +G4WT0 > ... merge all h2 - done +G4WT0 > ... merge all h3 - done +G4WT0 > ... merge all p1 - done +G4WT0 > ... merge all p2 - done +G4WT7 > ... merge all h1 - done +G4WT7 > ... merge all h2 - done +G4WT7 > ... merge all h3 - done +G4WT7 > ... merge all p1 - done +G4WT7 > ... merge all p2 - done +G4WT2 > ... merge all h1 - done +G4WT2 > ... merge all h2 - done +G4WT2 > ... merge all h3 - done +G4WT2 > ... merge all p1 - done +G4WT2 > ... merge all p2 - done +G4WT3 > ... merge all h1 - done +G4WT3 > ... merge all h2 - done +G4WT3 > ... merge all h3 - done +G4WT3 > ... merge all p1 - done +G4WT3 > ... merge all p2 - done +G4WT6 > ... merge slave ntuples - done +G4WT5 > ... merge slave ntuples - done +G4WT4 > ... merge slave ntuples - done +G4WT2 > ... merge slave ntuples - done +G4WT7 > ... merge slave ntuples - done +G4WT3 > ... merge slave ntuples - done +G4WT0 > ... merge slave ntuples - done +G4WT1 > ... merge slave ntuples - done + Run terminated. +Run Summary + Number of events processed : 1000 + User=2.290000s Real=0.363826s Sys=0.060000s [Cpu=645.9%] +... merge main ntuples - done +... write file : output.root - done +... close file : output.root - done +G4WT3 > ================== Deleting memory pools =================== +G4WT0 > ================== Deleting memory pools =================== +G4WT4 > ================== Deleting memory pools =================== +G4WT0 > Number of memory pools allocated: 11; of which, static: 0 +G4WT4 > Number of memory pools allocated: 11; of which, static: 0 +G4WT0 > Dynamic pools deleted: 11 / Total memory freed: 0.05 MB +G4WT4 > Dynamic pools deleted: 11 / Total memory freed: 0.036 MB +G4WT1 > ================== Deleting memory pools =================== +G4WT5 > ================== Deleting memory pools =================== +G4WT2 > ================== Deleting memory pools =================== +G4WT7 > ================== Deleting memory pools =================== +G4WT0 > ============================================================ +G4WT4 > ============================================================ +G4WT3 > Number of memory pools allocated: 11; of which, static: 0 +G4WT1 > Number of memory pools allocated: 11; of which, static: 0 +G4WT1 > Dynamic pools deleted: 11 / Total memory freed: 0.039 MB +G4WT2 > Number of memory pools allocated: 11; of which, static: 0 +G4WT2 > Dynamic pools deleted: 11 / Total memory freed: 0.036 MB +G4WT6 > ================== Deleting memory pools =================== +G4WT5 > Number of memory pools allocated: 11; of which, static: 0 +G4WT6 > Number of memory pools allocated: 11; of which, static: 0 +G4WT1 > ============================================================ +G4WT7 > Number of memory pools allocated: 11; of which, static: 0 +G4WT3 > Dynamic pools deleted: 11 / Total memory freed: 0.045 MB +G4WT7 > Dynamic pools deleted: 11 / Total memory freed: 0.042 MB +G4WT3 > ============================================================ +G4WT7 > ============================================================ +G4WT6 > Dynamic pools deleted: 11 / Total memory freed: 0.042 MB +G4WT2 > ============================================================ +G4WT5 > Dynamic pools deleted: 11 / Total memory freed: 0.043 MB +G4WT5 > ============================================================ +G4WT6 > ============================================================ +================== Deleting memory pools =================== +Number of memory pools allocated: 6; of which, static: 0 +Dynamic pools deleted: 6 / Total memory freed: 0.17 MB +============================================================ diff --git a/examples/advanced/xray_TESdetector/analysis/analysis.C b/examples/advanced/xray_TESdetector/analysis/analysis.C new file mode 100644 index 00000000000..432509cb8f0 --- /dev/null +++ b/examples/advanced/xray_TESdetector/analysis/analysis.C @@ -0,0 +1,300 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace std; +TApplication myapp("app",NULL,NULL); + +////////////////////////////////////////////////////// + +int main(int argc, char *argv[]){ + string ifilename = ""; + int no_events = 10000000; // number of primaries + + if(argc == 1) + { + cout << "No input file selected. Please use: ./read_tree_spectrum [input_file.root]" << endl; + return 0; + } + else + { + ifilename = argv[1]; + if (argc == 3) no_events = atoi(argv[2]); + } + + TString ifilenameforroot = ifilename; + TFile *f = new TFile(ifilenameforroot, "READ"); + + int no_pixel = 317; + + // Histogram definition + // Detector deposits + TH1D *pixel_dep = new TH1D ("pixel", "Avg. energy deposit per pixel [MeV]", no_pixel, 0, no_pixel); //(nbinx, xdown, xup, nbiny, ylow, yup) for drawing the hexagon + TH1D *part_per_pixel = new TH1D ("Part per pixel", "No. particles per pixel", no_pixel, 0, no_pixel); + + // Spectra for energies (initial, incident and deposited) + int bin_number = 500; + int max_val = 10000; + int min_val = 0; + double bin_width = (max_val-min_val)/(double)bin_number; + TH1D *initial_energies = new TH1D ("energies4", "GCR Protons impacting spectra on the detector", bin_number, min_val, max_val); + TH1D *incident_energies = new TH1D ("energies2", " ", bin_number, min_val, max_val); + TH1D *dep_energies = new TH1D ("energies3", " ", bin_number, min_val, max_val); + + // Spectra for energies (initial, incident and deposited) - for primaries (protons) + TH1D *initial_energies_P = new TH1D ("energies4_P", " ", bin_number, min_val, max_val); + TH1D *incident_energies_P = new TH1D ("energies2_P", " ", bin_number, min_val, max_val); + TH1D *dep_energies_P = new TH1D ("energies3_P", "Primary GCR Protons impacting spectra on the detector", bin_number, min_val, max_val); + + // Incident particles + TH1D *inc_particles = new TH1D ("energies6", "GCR Protons particle fluxes on the detector composition", 5, 0, 5); + + // Variables to store the tuples' values + int eventID = 0; + char vol_name[500]; + int trackID = 0; + double x = 0; + double y = 0; + double z = 0; + double theta = 0; + double phi = 0; + int parentID = 0; + int pixel_number = 0; + double step_energy_dep = 0; + int step_number = 0; + double init_kinetic_energy = 0; + double kinetic_energy = 0; + char particle_name[500]; + char pre_step_name[500]; + char post_step_name[500]; + + // Define tuple elements + TTree *mytree = (TTree*)f->Get("TES_Tuple"); + Long64_t nentries = mytree->GetEntries(); + mytree->SetBranchAddress("eventID", &eventID); + mytree->SetBranchAddress("vol_name", &vol_name); + mytree->SetBranchAddress("trackID", &trackID); + mytree->SetBranchAddress("x", &x); + mytree->SetBranchAddress("y", &y); + mytree->SetBranchAddress("z", &z); + mytree->SetBranchAddress("theta", &theta); + mytree->SetBranchAddress("phi", &phi); + mytree->SetBranchAddress("parentID", &parentID); + mytree->SetBranchAddress("pixel_number", &pixel_number); + mytree->SetBranchAddress("step_energy_dep", &step_energy_dep); + mytree->SetBranchAddress("step_number", &step_number); + mytree->SetBranchAddress("init_kinetic_energy", &init_kinetic_energy); + mytree->SetBranchAddress("kinetic_energy", &kinetic_energy); + mytree->SetBranchAddress("particle_name", &particle_name); + mytree->SetBranchAddress("pre_step_name", &pre_step_name); + mytree->SetBranchAddress("post_step_name", &post_step_name); + + cout << "Reading " << nentries << " from the TTree." << endl; + string vol_name_old = ""; + + int eventID_old = 0; + int trackID_old = 0; + double total_step_dep = 0; + double total_step_dep_P = 0; + double kine = 0; // kinetic energy + double kine_P = 0; // kinetic energy for protons + double in_kine = 0; // initial kinetic energy + double in_kine_P = 0; // initial kinetic energy for protons + bool entered = false; + bool entered_P = false; + char arr[50]; + string str = ""; + int pixel_number_old = 0; + + for (Long64_t i=0; iGetEntry(i); + + if (entered || entered_P) + { + if (eventID != eventID_old || (eventID == eventID_old && trackID != trackID_old)) + { + if (entered && total_step_dep > 0) + { + initial_energies->Fill(in_kine); + incident_energies->Fill(kine); + dep_energies->Fill(total_step_dep); + inc_particles->Fill(arr, 1); + total_step_dep = 0; + } + if (entered_P && total_step_dep_P > 0) + { + initial_energies_P->Fill(in_kine_P); + incident_energies_P->Fill(kine_P); + dep_energies_P->Fill(total_step_dep_P); + total_step_dep_P = 0; + } + entered = false; + entered_P = false; + } + } + str = (string)particle_name; + + if((string)vol_name == "Bipxl") + { + if (vol_name_old != "Bipxl") + { + if (!entered) + { + entered = true; + kine = kinetic_energy; + in_kine = init_kinetic_energy; + + if (str != "proton" && str != "gamma" && str != "e+" && str != "e-") + { + str = "Other particles"; + } + strcpy(arr, str.c_str()); + + // Same but onyl for primaries + if (!entered_P) + { + if (str == "proton" && parentID == 0) + { + entered_P = true; + kine_P = kinetic_energy; + in_kine_P = init_kinetic_energy; + } + } + } + } + + // Sum the total energy deposit from all particles + total_step_dep += step_energy_dep; + + // Sum the total energy deposit from the primaries + if (str == "proton" && parentID == 0) total_step_dep_P += step_energy_dep; + // hist_det_count->Fill(x, y, step_energy_dep); + + if (pixel_number != pixel_number_old) + { + part_per_pixel->Fill(-pixel_number); + } + + pixel_dep->Fill(-pixel_number, step_energy_dep); + } + eventID_old = eventID; + trackID_old = trackID; + vol_name_old = (string)vol_name; + pixel_number_old = pixel_number; + } + + cout << "Starts plotting..." << endl; + + // Draw histograms + TCanvas *c1 = new TCanvas ("c1", "Energy dep", 0, 0, 1000, 900); + double radius = 27.0; + double pi = 3.1415; + double T = no_events/(0.407*4*pi*pi*radius*radius); //equivalent time + double S = 2.1; //cm2 + dep_energies->Scale(1.0/(T*S*bin_width)); //scale based on the equivalent time and detector surface + initial_energies->Scale(1.0/(T*S*bin_width)); + incident_energies->Scale(1.0/(T*S*bin_width)); + gStyle->SetOptStat(0); + c1->SetLogx(); + c1->SetLogy(); + dep_energies->SetLineColor(kRed); + initial_energies->Draw("hist"); + initial_energies->SetLineColor(kBlack); + incident_energies->Draw("histsame"); + dep_energies->Draw("histsame"); + incident_energies->SetLineColor(kBlue); + initial_energies->GetYaxis()->SetRangeUser(1.0e-6, 1.0); + initial_energies->GetXaxis()->SetTitle("Energy [MeV]"); + initial_energies->GetYaxis()->SetTitle("Counts/cm2/s/MeV"); + auto legend1 = new TLegend(0.75,0.8,0.9,0.9); + legend1->AddEntry(dep_energies,"Edep"); + legend1->AddEntry(incident_energies, "Einc"); + legend1->AddEntry(initial_energies, "Ei"); + legend1->Draw("same"); + + TCanvas *c2 = new TCanvas ("c2", "Proton energy dep", 50, 0, 1000, 900); + dep_energies_P->Scale(1.0/(T*S*bin_width)); + initial_energies_P->Scale(1.0/(T*S*bin_width)); + incident_energies_P->Scale(1.0/(T*S*bin_width)); + gStyle->SetOptStat(0); + c2->SetLogx(); + c2->SetLogy(); + dep_energies_P->Draw("hist"); + dep_energies_P->SetLineColor(kRed); + initial_energies_P->Draw("histsame"); + initial_energies_P->SetLineColor(kBlack); + incident_energies_P->Draw("histsame"); + incident_energies_P->SetLineColor(kBlue); + dep_energies_P->GetYaxis()->SetRangeUser(1.0e-6, 1.0); + dep_energies_P->GetXaxis()->SetTitle("Energy [MeV]"); + dep_energies_P->GetYaxis()->SetTitle("Counts/cm2/s/MeV"); + auto legend2 = new TLegend(0.75,0.8,0.9,0.9); + legend2->AddEntry(dep_energies,"Edep"); + legend2->AddEntry(incident_energies, "Einc"); + legend2->AddEntry(initial_energies, "Ei"); + legend2->Draw("same"); + + TCanvas *cpie = new TCanvas("Particless distribution", "Particles distribution", 100, 0, 1000, 1000); + string label1 = inc_particles->GetXaxis()->GetBinLabel(1); + string label2 = inc_particles->GetXaxis()->GetBinLabel(2); + string label3 = inc_particles->GetXaxis()->GetBinLabel(3); + string label4 = inc_particles->GetXaxis()->GetBinLabel(4); + string label5 = inc_particles->GetXaxis()->GetBinLabel(5); + Float_t val1 = inc_particles->GetBinContent(1); + Float_t val2 = inc_particles->GetBinContent(2); + Float_t val3 = inc_particles->GetBinContent(3); + Float_t val4 = inc_particles->GetBinContent(4); + Float_t val5 = inc_particles->GetBinContent(5); + Float_t vals[] = {val1,val2,val3,val4,val5}; + Int_t colors[] = {1,2,3,4,5}; + Int_t nvals = sizeof(vals)/sizeof(vals[0]); + TPie *pie1 = new TPie("pie1", "Particles distribution",nvals,vals,colors); + pie1->SetLabelsOffset(.01); + pie1->SetRadius(.2); + pie1->SetEntryLabel(0, label1.c_str()); + pie1->SetEntryLabel(1, label2.c_str()); + pie1->SetEntryLabel(2, label3.c_str()); + pie1->SetEntryLabel(3, label4.c_str()); + pie1->SetEntryLabel(4, label5.c_str()); + pie1->SetLabelFormat("%txt (%perc)"); + pie1->Draw(); + + TCanvas *c4_num = new TCanvas ("c4_num", "Particle count per pixel", 150, 0, 1000, 900); + part_per_pixel->GetXaxis()->SetTitle("Pixel number"); + part_per_pixel->GetYaxis()->SetTitle("Counts"); + part_per_pixel->SetFillColor(kBlack); + part_per_pixel->SetMarkerColor(kBlack); + part_per_pixel->Draw(); + + // Draw the histogram of the single pixel deposition + TCanvas *c5 = new TCanvas ("c5", "Avg. energy deposit per pixel", 250, 0, 1000, 900); + pixel_dep->Divide(part_per_pixel); + pixel_dep->GetXaxis()->SetTitle("Pixel number"); + pixel_dep->GetYaxis()->SetTitle("Avg. energy deposit [MeV]"); + pixel_dep->SetFillColor(kBlack); + pixel_dep->SetMarkerColor(kBlack); + pixel_dep->Draw(""); + + myapp.Run(true); + f->Close(); + return 0; +} \ No newline at end of file diff --git a/examples/advanced/xray_TESdetector/include/G4EmStandardPhysics_SpacePhysics.hh b/examples/advanced/xray_TESdetector/include/G4EmStandardPhysics_SpacePhysics.hh new file mode 100644 index 00000000000..bff3df2831d --- /dev/null +++ b/examples/advanced/xray_TESdetector/include/G4EmStandardPhysics_SpacePhysics.hh @@ -0,0 +1,64 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XrayTESdetDetParameterisation.hh +/// \brief Definition of the DetParameterisation class +// +// This class provides construction of EM physics using the best models +// of standard and low-energy packages and set of +// the most adavced options allowing precise simulation at low +// and intermediate energies +// +// Author: P.Dondero (paolo.dondero@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef G4EmStandardPhysics_SpacePhysics_h +#define G4EmStandardPhysics_SpacePhysics_h 1 + +#include "G4VPhysicsConstructor.hh" +#include "globals.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class G4EmStandardPhysics_SpacePhysics : public G4VPhysicsConstructor +{ + public: + + explicit G4EmStandardPhysics_SpacePhysics(G4int ver=1, const G4String& name=""); + ~G4EmStandardPhysics_SpacePhysics() override = default; + void ConstructParticle() override; + void ConstructProcess() override; + + private: + + G4int fVerbose; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif \ No newline at end of file diff --git a/examples/advanced/xray_TESdetector/include/XrayTESdetActionInitialization.hh b/examples/advanced/xray_TESdetector/include/XrayTESdetActionInitialization.hh new file mode 100644 index 00000000000..ee8a75a9066 --- /dev/null +++ b/examples/advanced/xray_TESdetector/include/XrayTESdetActionInitialization.hh @@ -0,0 +1,57 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XrayTESdetActionInitialization.hh +/// \brief Definition of the ActionInitialization class +// +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XrayTESdetActionInitialization_h +#define XrayTESdetActionInitialization_h 1 + +#include "G4VUserActionInitialization.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class XrayTESdetActionInitialization : public G4VUserActionInitialization +{ + public: + + explicit XrayTESdetActionInitialization() = default; + ~XrayTESdetActionInitialization() override = default; + + void BuildForMaster() const override; + void Build() const override; + +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif \ No newline at end of file diff --git a/examples/advanced/xray_TESdetector/include/XrayTESdetDetParameterisation.hh b/examples/advanced/xray_TESdetector/include/XrayTESdetDetParameterisation.hh new file mode 100644 index 00000000000..7d4581f4d83 --- /dev/null +++ b/examples/advanced/xray_TESdetector/include/XrayTESdetDetParameterisation.hh @@ -0,0 +1,81 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XrayTESdetDetParameterisation.hh +/// \brief Definition of the DetParameterisation class +// +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XrayTESdetDetParameterisation_H +#define XrayTESdetDetParameterisation_H 1 + +#include "globals.hh" +#include "G4VPVParameterisation.hh" + + +class G4VPhysicalVolume; +class G4Box; + +// Dummy declarations to get rid of warnings ... +class G4Trd; +class G4Trap; +class G4Cons; +class G4Orb; +class G4Sphere; +class G4Torus; +class G4Para; +class G4Hype; +class G4Tubs; +class G4Polycone; +class G4Polyhedra; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class XrayTESdetDetParameterisation : public G4VPVParameterisation +{ + public: + + explicit XrayTESdetDetParameterisation(G4int NoChambers, G4double startX, G4double spacingX, G4double startY, G4double spacingY); + ~XrayTESdetDetParameterisation() override = default; + void ComputeTransformation (const G4int copyNo, G4VPhysicalVolume* physVol) const override; + + private: + + G4int fNoChambers; + G4double fStartX; + G4double fStartY; + G4double fSpacingX; // The distance between the chambers' center + G4double fSpacingY; + +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif \ No newline at end of file diff --git a/examples/advanced/xray_TESdetector/include/XrayTESdetDetectorConstruction.hh b/examples/advanced/xray_TESdetector/include/XrayTESdetDetectorConstruction.hh new file mode 100644 index 00000000000..99bb621ab6d --- /dev/null +++ b/examples/advanced/xray_TESdetector/include/XrayTESdetDetectorConstruction.hh @@ -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. * +// ******************************************************************** +// +/// \file XrayTESdetDetectorConstruction.hh +/// \brief Definition of the DetectorConstruction class +// +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XrayTESdetDetectorConstruction_h +#define XrayTESdetDetectorConstruction_h 1 + +class XrayTESdetDetectorMessenger; +class G4LogicalVolume; +class G4VPhysicalVolume; +class G4UserLimits; +class G4PVPlacement; + +#include "G4VUserDetectorConstruction.hh" +#include "G4GDMLParser.hh" +#include "G4PVParameterised.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class XrayTESdetDetectorConstruction : public G4VUserDetectorConstruction +{ + public: + + explicit XrayTESdetDetectorConstruction(); + ~XrayTESdetDetectorConstruction() override; + G4VPhysicalVolume* Construct() override; + void SetMaxStep (G4double); + void SetReadFile(G4String); + + private: + + // GDMLparser + G4GDMLParser fParser; + G4String fReadFile; + G4UserLimits* fStepLimitPolyfilta; + G4UserLimits* fStepLimitAlfilta; + G4UserLimits* fStepLimitmembrane; + G4PVPlacement* fExperimentalHall_phys; + XrayTESdetDetectorMessenger* fDetectorMessenger; + G4VPhysicalVolume* ConstructDetector(); + G4PVParameterised* fPhysiDet; + + // Logical volumes + G4LogicalVolume* fExperimentalHall_log; + G4LogicalVolume* fElement_log; + G4LogicalVolume* fMembranepxl_log; + G4LogicalVolume* fDetector_log; + G4LogicalVolume* fBipxl_log; + G4LogicalVolume* fACDpxl_log; + G4LogicalVolume* fInACDpxl_log; + G4LogicalVolume* fGridpiece_log; + G4LogicalVolume* fWafer_log; + G4LogicalVolume* fACplate_log; + G4LogicalVolume* fCagewall_log; + G4LogicalVolume* fMinicagewall_log; + G4LogicalVolume* fExtcagewall_log; + G4LogicalVolume* fExtboard_log; + G4LogicalVolume* fMesh_log; + G4LogicalVolume* fSphere_log; + G4LogicalVolume* fBSC_log; + G4LogicalVolume* fTrapezoid_A_log; + G4LogicalVolume* fTrapezoid_B_log; + G4LogicalVolume* fTrapezoid_C_log; + G4LogicalVolume* fTrapezoid_D_log; + G4LogicalVolume* fWorld_log; + + // Physical volumes + G4VPhysicalVolume* fBipxl_phys; + G4VPhysicalVolume* fMembranepxl_phys; + G4VPhysicalVolume* fGridpiece_phys; + G4VPhysicalVolume* fDetector_phys; + G4VPhysicalVolume* fACDpxl_phys; + G4VPhysicalVolume* fInACDpxl_phys; + G4VPhysicalVolume* fWafer_phys; + G4VPhysicalVolume* fACplate_phys; + G4VPhysicalVolume* fCagecolumn_phys; + G4VPhysicalVolume* fCagecolumn2_phys; + G4VPhysicalVolume* fCagecolumn3_phys; + G4VPhysicalVolume* fCagecolumn4_phys; + G4VPhysicalVolume* fCagecolumn5_phys; + G4VPhysicalVolume* fCagecolumn6_phys; + G4VPhysicalVolume* fEmptycagecolumn_phys; + G4VPhysicalVolume* fEmptycagecolumn2_phys; + G4VPhysicalVolume* fEmptycagecolumn3_phys; + G4VPhysicalVolume* fCagewall_phys; + G4VPhysicalVolume* fCagewall2_phys; + G4VPhysicalVolume* fCagewall3_phys; + G4VPhysicalVolume* fCagewall4_phys; + G4VPhysicalVolume* fCagewall5_phys; + G4VPhysicalVolume* fCagewall6_phys; + G4VPhysicalVolume* fMinicagewall_phys; + G4VPhysicalVolume* fMinicagewall2_phys; + G4VPhysicalVolume* fMinicagewall3_phys; + G4VPhysicalVolume* fExtcagewall_phys; + G4VPhysicalVolume* fExtcagewall2_phys; + G4VPhysicalVolume* fExtboard_phys; + G4VPhysicalVolume* fExtboard2_phys; + G4VPhysicalVolume* fRing_phys; + G4VPhysicalVolume* fFirstShield_botplate_phys; + G4VPhysicalVolume* fFirstShield_side_phys; + G4VPhysicalVolume* fFirstShield_topplate_phys; + G4VPhysicalVolume* fFirstShield_topcyl_phys; + G4VPhysicalVolume* fSecondShieldbotPlate_phys; + G4VPhysicalVolume* fSecondShieldside_phys; + G4VPhysicalVolume* fSecondShieldtopPlate_phys; + G4VPhysicalVolume* fSecondShieldshield_topcyl_phys; + G4VPhysicalVolume* fThirdShieldbotPlate_phys; + G4VPhysicalVolume* fThirdShieldbotCone_phys; + G4VPhysicalVolume* fThirdShieldtopCone_phys; + G4VPhysicalVolume* fThirdShieldside_phys; + G4VPhysicalVolume* fCryostatbotPlate_phys; + G4VPhysicalVolume* fCryostatbotCone_phys; + G4VPhysicalVolume* fCryostatbotSide_phys; + G4VPhysicalVolume* fCryostatmidSide_phys; + G4VPhysicalVolume* fCryostattopSide_phys; + G4VPhysicalVolume* fCryostattopCone_phys; + G4VPhysicalVolume* fAC_phys; + G4VPhysicalVolume* fACIC_phys; + G4VPhysicalVolume* fMesh_phys; + G4VPhysicalVolume* fSphere_phys; + G4VPhysicalVolume* fFiltercarrier_phys; + G4VPhysicalVolume* fBSC_phys; + G4VPhysicalVolume* fAlFilter_phys; + G4VPhysicalVolume* fTrapezoid_A_phys; + G4VPhysicalVolume* fTrapezoid_B_phys; + G4VPhysicalVolume* fTrapezoid_C_phys; + G4VPhysicalVolume* fTrapezoid_D_phys; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/xray_TESdetector/include/XrayTESdetDetectorMessenger.hh b/examples/advanced/xray_TESdetector/include/XrayTESdetDetectorMessenger.hh new file mode 100644 index 00000000000..85c761c0b21 --- /dev/null +++ b/examples/advanced/xray_TESdetector/include/XrayTESdetDetectorMessenger.hh @@ -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. * +// ******************************************************************** +// +/// \file XrayTESdetDetectorMessenger.hh +/// \brief Definition of the DetectorMessenger class +// +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XrayTESdetDetectorMessenger_h +#define XrayTESdetDetectorMessenger_h 1 + +#include "globals.hh" +#include "G4UImessenger.hh" + +class XrayTESdetDetectorConstruction; +class G4UIcommand; +class G4UIcmdWithAString; + +class XrayTESdetDetectorMessenger: public G4UImessenger +{ + public: + + explicit XrayTESdetDetectorMessenger(XrayTESdetDetectorConstruction*); + ~XrayTESdetDetectorMessenger() override; + void SetNewValue(G4UIcommand*, G4String) override; + + private: + + XrayTESdetDetectorConstruction* fpDetector; + G4UIcmdWithAString* fTheReadCommand; +}; + +#endif \ No newline at end of file diff --git a/examples/advanced/xray_TESdetector/include/XrayTESdetHistoManager.hh b/examples/advanced/xray_TESdetector/include/XrayTESdetHistoManager.hh new file mode 100644 index 00000000000..11f20de304e --- /dev/null +++ b/examples/advanced/xray_TESdetector/include/XrayTESdetHistoManager.hh @@ -0,0 +1,59 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XrayTESdetHistoManager.hh +/// \brief Definition of the HistoManager class +// +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XrayTESdetHistoManager_h +#define XrayTESdetHistoManager_h 1 + +#include "globals.hh" +#include "G4UnitsTable.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class XrayTESdetHistoManager +{ + public: + + explicit XrayTESdetHistoManager(); + ~XrayTESdetHistoManager() = default; + + private: + + void fBook(); + G4String fFileName; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif \ No newline at end of file diff --git a/examples/advanced/xray_TESdetector/include/XrayTESdetPhysicsList.hh b/examples/advanced/xray_TESdetector/include/XrayTESdetPhysicsList.hh new file mode 100644 index 00000000000..518f6731110 --- /dev/null +++ b/examples/advanced/xray_TESdetector/include/XrayTESdetPhysicsList.hh @@ -0,0 +1,70 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XrayTESdetPhysicsList.hh +/// \brief Definition of the PhysicsList class +// +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XrayTESdetPhysicsList_h +#define XrayTESdetPhysicsList_h 1 + +#include "G4VModularPhysicsList.hh" +#include "globals.hh" + +class G4VPhysicsConstructor; +class XrayTESdetPhysicsListMessenger; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class XrayTESdetPhysicsList: public G4VModularPhysicsList +{ +public: + + explicit XrayTESdetPhysicsList(); + ~XrayTESdetPhysicsList() override; + void ConstructParticle() override; + void ConstructProcess() override; + void AddPhysicsList(const G4String& name); + void List(); + +private: + + void fSetBuilderList1(G4bool flagHP = false); + XrayTESdetPhysicsListMessenger* fMessenger; + G4String fEmName; + G4VPhysicsConstructor* fEmPhysicsList; + G4VPhysicsConstructor* fParticleList; + std::vector fHadronPhys; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif \ No newline at end of file diff --git a/examples/advanced/xray_TESdetector/include/XrayTESdetPhysicsListMessenger.hh b/examples/advanced/xray_TESdetector/include/XrayTESdetPhysicsListMessenger.hh new file mode 100644 index 00000000000..611fc7c3f3b --- /dev/null +++ b/examples/advanced/xray_TESdetector/include/XrayTESdetPhysicsListMessenger.hh @@ -0,0 +1,66 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XrayTESdetPhysicsListMessenger.hh +/// \brief Definition of the PhysicsListMessenger class +// +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XrayTESdetPhysicsListMessenger_h +#define XrayTESdetPhysicsListMessenger_h 1 + +#include "G4UImessenger.hh" +#include "globals.hh" + +class XrayTESdetPhysicsList; +class G4UIdirectory; +class G4UIcmdWithAString; +class G4UIcmdWithADoubleAndUnit; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class XrayTESdetPhysicsListMessenger: public G4UImessenger +{ +public: + + explicit XrayTESdetPhysicsListMessenger(XrayTESdetPhysicsList*); + ~XrayTESdetPhysicsListMessenger() override; + void SetNewValue(G4UIcommand*, G4String) override; + +private: + + XrayTESdetPhysicsList* fPhysicsList; + G4UIdirectory* fPhysDir; + G4UIcmdWithAString* fListCmd; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif \ No newline at end of file diff --git a/examples/advanced/xray_TESdetector/include/XrayTESdetPrimaryGeneratorAction.hh b/examples/advanced/xray_TESdetector/include/XrayTESdetPrimaryGeneratorAction.hh new file mode 100644 index 00000000000..a4d6fd912e2 --- /dev/null +++ b/examples/advanced/xray_TESdetector/include/XrayTESdetPrimaryGeneratorAction.hh @@ -0,0 +1,64 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XrayTESdetPrimaryGeneratorAction.hh +/// \brief Definition of the PrimaryGeneratorAction class +// +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XrayTESdetPrimaryGeneratorAction_h +#define XrayTESdetPrimaryGeneratorAction_h 1 + +#include "G4VUserPrimaryGeneratorAction.hh" +#include "G4ParticleGun.hh" +#include "globals.hh" + +class G4Event; + +class XrayTESdetPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction +{ + public: + + explicit XrayTESdetPrimaryGeneratorAction(); + ~XrayTESdetPrimaryGeneratorAction() override; + void GeneratePrimaries(G4Event* anEvent) override; + void SetRndmFlag(G4String val) { fRndmFlag = val;} + G4ParticleGun* GetParticleGun() {return fParticleGun;} + + private: + + G4String fRndmFlag; + G4ParticleGun* fParticleGun; + +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/advanced/xray_TESdetector/include/XrayTESdetRunAction.hh b/examples/advanced/xray_TESdetector/include/XrayTESdetRunAction.hh new file mode 100644 index 00000000000..f6e1cd6a875 --- /dev/null +++ b/examples/advanced/xray_TESdetector/include/XrayTESdetRunAction.hh @@ -0,0 +1,62 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XrayTESdetRunAction.hh +/// \brief Definition of the RunAction class +// +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XrayTESdetRunAction_h +#define XrayTESdetRunAction_h 1 + +#include "G4UserRunAction.hh" +#include "globals.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class XrayTESdetHistoManager; + +class XrayTESdetRunAction : public G4UserRunAction +{ + public: + + explicit XrayTESdetRunAction(); + ~XrayTESdetRunAction() override; + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; + + private: + + XrayTESdetHistoManager* fHistoManager; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif \ No newline at end of file diff --git a/examples/advanced/xray_TESdetector/include/XrayTESdetSteppingAction.hh b/examples/advanced/xray_TESdetector/include/XrayTESdetSteppingAction.hh new file mode 100644 index 00000000000..327e149c3fb --- /dev/null +++ b/examples/advanced/xray_TESdetector/include/XrayTESdetSteppingAction.hh @@ -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. * +// ******************************************************************** +// +/// \file XrayTESdetSteppingAction.hh +/// \brief Definition of the SteppingAction class +// +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#ifndef XrayTESdetSteppingAction_h +#define XrayTESdetSteppingAction_h 1 + +#include "globals.hh" +#include "G4UserSteppingAction.hh" +#include + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class XrayTESdetDetectorConstruction; +class XrayTESdetRunAction; +class XrayTESdetEventAction; + +class XrayTESdetSteppingAction : public G4UserSteppingAction +{ + public: + + explicit XrayTESdetSteppingAction() = default; + ~XrayTESdetSteppingAction() override = default; + void UserSteppingAction(const G4Step*) override; + + private: + + G4int fPrev_eventID = 0; + G4int fPrev_trackID = 0; + std::map fInit_energy; + std::map fCreator_proc; + +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif \ No newline at end of file diff --git a/examples/advanced/xray_TESdetector/init_vis.mac b/examples/advanced/xray_TESdetector/init_vis.mac new file mode 100644 index 00000000000..a0a1accf710 --- /dev/null +++ b/examples/advanced/xray_TESdetector/init_vis.mac @@ -0,0 +1,13 @@ +# Macro file for the initialization of example Xray_TESdetector +# in interactive session +# +# Set some default verbose +/control/verbose 2 +/control/saveHistory +/run/verbose 1 + +# Initialize kernel +/run/initialize + +# Visualization setting +/control/execute vis.mac diff --git a/examples/advanced/xray_TESdetector/pixelpos.txt b/examples/advanced/xray_TESdetector/pixelpos.txt new file mode 100644 index 00000000000..2de17c7fdd6 --- /dev/null +++ b/examples/advanced/xray_TESdetector/pixelpos.txt @@ -0,0 +1,317 @@ +-4.07 -7.327 +-3.256 -7.327 +-2.442 -7.327 +-1.628 -7.327 +-0.814 -7.327 +0.0 -7.327 +0.814 -7.327 +1.628 -7.327 +2.442 -7.327 +3.256 -7.327 +4.07 -7.327 +-4.884 -6.513 +-4.07 -6.513 +-3.256 -6.513 +-2.442 -6.513 +-1.628 -6.513 +-0.814 -6.513 +0.0 -6.513 +0.814 -6.513 +1.628 -6.513 +2.442 -6.513 +3.256 -6.513 +4.07 -6.513 +4.884 -6.513 +-5.699 -5.699 +-4.884 -5.699 +-4.07 -5.699 +-3.256 -5.699 +-2.442 -5.699 +-1.628 -5.699 +-0.814 -5.699 +0.0 -5.699 +0.814 -5.699 +1.628 -5.699 +2.442 -5.699 +3.256 -5.699 +4.07 -5.699 +4.884 -5.699 +5.699 -5.699 +-5.699 -4.884 +-4.884 -4.884 +-4.07 -4.884 +-3.256 -4.884 +-2.442 -4.884 +-1.628 -4.884 +-0.814 -4.884 +0.0 -4.884 +0.814 -4.884 +1.628 -4.884 +2.442 -4.884 +3.256 -4.884 +4.07 -4.884 +4.884 -4.884 +5.699 -4.884 +-6.513 -4.07 +-5.699 -4.07 +-4.884 -4.07 +-4.07 -4.07 +-3.256 -4.07 +-2.442 -4.07 +-1.628 -4.07 +-0.814 -4.07 +0.0 -4.07 +0.814 -4.07 +1.628 -4.07 +2.442 -4.07 +3.256 -4.07 +4.07 -4.07 +4.884 -4.07 +5.699 -4.07 +6.513 -4.07 +-6.513 -3.256 +-5.699 -3.256 +-4.884 -3.256 +-4.07 -3.256 +-3.256 -3.256 +-2.442 -3.256 +-1.628 -3.256 +-0.814 -3.256 +0.0 -3.256 +0.814 -3.256 +1.628 -3.256 +2.442 -3.256 +3.256 -3.256 +4.07 -3.256 +4.884 -3.256 +5.699 -3.256 +6.513 -3.256 +-7.327 -2.442 +-6.513 -2.442 +-5.699 -2.442 +-4.884 -2.442 +-4.07 -2.442 +-3.256 -2.442 +-2.442 -2.442 +-1.628 -2.442 +-0.814 -2.442 +0.0 -2.442 +0.814 -2.442 +1.628 -2.442 +2.442 -2.442 +3.256 -2.442 +4.07 -2.442 +4.884 -2.442 +5.699 -2.442 +6.513 -2.442 +7.327 -2.442 +-7.327 -1.628 +-6.513 -1.628 +-5.699 -1.628 +-4.884 -1.628 +-4.07 -1.628 +-3.256 -1.628 +-2.442 -1.628 +-1.628 -1.628 +-0.814 -1.628 +0.0 -1.628 +0.814 -1.628 +1.628 -1.628 +2.442 -1.628 +3.256 -1.628 +4.07 -1.628 +4.884 -1.628 +5.699 -1.628 +6.513 -1.628 +7.327 -1.628 +-8.141 -0.814 +-7.327 -0.814 +-6.513 -0.814 +-5.699 -0.814 +-4.884 -0.814 +-4.07 -0.814 +-3.256 -0.814 +-2.442 -0.814 +-1.628 -0.814 +-0.814 -0.814 +0.0 -0.814 +0.814 -0.814 +1.628 -0.814 +2.442 -0.814 +3.256 -0.814 +4.07 -0.814 +4.884 -0.814 +5.699 -0.814 +6.513 -0.814 +7.327 -0.814 +8.141 -0.814 +-8.955 0.0 +-8.141 0.0 +-7.327 0.0 +-6.513 0.0 +-5.699 0.0 +-4.884 0.0 +-4.07 0.0 +-3.256 0.0 +-2.442 0.0 +-1.628 0.0 +-0.814 0.0 +0.0 0.0 +0.814 0.0 +1.628 0.0 +2.442 0.0 +3.256 0.0 +4.07 0.0 +4.884 0.0 +5.699 0.0 +6.513 0.0 +7.327 0.0 +8.141 0.0 +8.955 0.0 +-8.141 0.814 +-7.327 0.814 +-6.513 0.814 +-5.699 0.814 +-4.884 0.814 +-4.07 0.814 +-3.256 0.814 +-2.442 0.814 +-1.628 0.814 +-0.814 0.814 +0.0 0.814 +0.814 0.814 +1.628 0.814 +2.442 0.814 +3.256 0.814 +4.07 0.814 +4.884 0.814 +5.699 0.814 +6.513 0.814 +7.327 0.814 +8.141 0.814 +-7.327 1.628 +-6.513 1.628 +-5.699 1.628 +-4.884 1.628 +-4.07 1.628 +-3.256 1.628 +-2.442 1.628 +-1.628 1.628 +-0.814 1.628 +0.0 1.628 +0.814 1.628 +1.628 1.628 +2.442 1.628 +3.256 1.628 +4.07 1.628 +4.884 1.628 +5.699 1.628 +6.513 1.628 +7.327 1.628 +-7.327 2.442 +-6.513 2.442 +-5.699 2.442 +-4.884 2.442 +-4.07 2.442 +-3.256 2.442 +-2.442 2.442 +-1.628 2.442 +-0.814 2.442 +0.0 2.442 +0.814 2.442 +1.628 2.442 +2.442 2.442 +3.256 2.442 +4.07 2.442 +4.884 2.442 +5.699 2.442 +6.513 2.442 +7.327 2.442 +-6.513 3.256 +-5.699 3.256 +-4.884 3.256 +-4.07 3.256 +-3.256 3.256 +-2.442 3.256 +-1.628 3.256 +-0.814 3.256 +0.0 3.256 +0.814 3.256 +1.628 3.256 +2.442 3.256 +3.256 3.256 +4.07 3.256 +4.884 3.256 +5.699 3.256 +6.513 3.256 +-6.513 4.07 +-5.699 4.07 +-4.884 4.07 +-4.07 4.07 +-3.256 4.07 +-2.442 4.07 +-1.628 4.07 +-0.814 4.07 +0.0 4.07 +0.814 4.07 +1.628 4.07 +2.442 4.07 +3.256 4.07 +4.07 4.07 +4.884 4.07 +5.699 4.07 +6.513 4.07 +-5.699 4.884 +-4.884 4.884 +-4.07 4.884 +-3.256 4.884 +-2.442 4.884 +-1.628 4.884 +-0.814 4.884 +0.0 4.884 +0.814 4.884 +1.628 4.884 +2.442 4.884 +3.256 4.884 +4.07 4.884 +4.884 4.884 +5.699 4.884 +-5.699 5.699 +-4.884 5.699 +-4.07 5.699 +-3.256 5.699 +-2.442 5.699 +-1.628 5.699 +-0.814 5.699 +0.0 5.699 +0.814 5.699 +1.628 5.699 +2.442 5.699 +3.256 5.699 +4.07 5.699 +4.884 5.699 +5.699 5.699 +-4.884 6.513 +-4.07 6.513 +-3.256 6.513 +-2.442 6.513 +-1.628 6.513 +-0.814 6.513 +0.0 6.513 +0.814 6.513 +1.628 6.513 +2.442 6.513 +3.256 6.513 +4.07 6.513 +4.884 6.513 +-4.07 7.327 +-3.256 7.327 +-2.442 7.327 +-1.628 7.327 +-0.814 7.327 +0.0 7.327 +0.814 7.327 +1.628 7.327 +2.442 7.327 +3.256 7.327 +4.07 7.327 diff --git a/examples/advanced/xray_TESdetector/pixelpos2.txt b/examples/advanced/xray_TESdetector/pixelpos2.txt new file mode 100644 index 00000000000..8709f804f2e --- /dev/null +++ b/examples/advanced/xray_TESdetector/pixelpos2.txt @@ -0,0 +1,5 @@ +a +b +c +d + diff --git a/examples/advanced/xray_TESdetector/run01.mac b/examples/advanced/xray_TESdetector/run01.mac new file mode 100644 index 00000000000..5ad1b38a6ca --- /dev/null +++ b/examples/advanced/xray_TESdetector/run01.mac @@ -0,0 +1,21 @@ + +#/control/cout/ignoreThreadsExcept 0 +#/run/numberOfThreads 1 +#/control/verbose 1 +/run/verbose 1 +#/process/em/verbose 1 +#/tracking/verbose 1 + +/testem/phys/addPhysics SpacePhysics_QBBC +/process/em/AddEmRegion InnerRegion G4EmStandardSS + +/run/initialize + +/random/setSeeds 123 2004 +/process/list + +/analysis/setFileName output.root + +# +/run/printProgress 1000 +/run/beamOn 1000 diff --git a/examples/advanced/xray_TESdetector/run02.mac b/examples/advanced/xray_TESdetector/run02.mac new file mode 100644 index 00000000000..6a87cfe6c1e --- /dev/null +++ b/examples/advanced/xray_TESdetector/run02.mac @@ -0,0 +1,23 @@ + +#/control/cout/ignoreThreadsExcept 0 +#/run/numberOfThreads 1 +#/control/verbose 1 +/run/verbose 1 +#/process/em/verbose 1 +#/tracking/verbose 1 + +/XrayTESdet/det/readGDML xray_TESdetector.gdml + +/testem/phys/addPhysics SpacePhysics_QBBC +/process/em/AddEmRegion InnerRegion G4EmStandardSS + +/run/initialize + +/random/setSeeds 123 2004 +/process/list + +/analysis/setFileName output.root + +# +/run/printProgress 1000 +/run/beamOn 1000 diff --git a/examples/advanced/xray_TESdetector/src/G4EmStandardPhysics_SpacePhysics.cc b/examples/advanced/xray_TESdetector/src/G4EmStandardPhysics_SpacePhysics.cc new file mode 100644 index 00000000000..dd5c84320ff --- /dev/null +++ b/examples/advanced/xray_TESdetector/src/G4EmStandardPhysics_SpacePhysics.cc @@ -0,0 +1,327 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +//--------------------------------------------------------------------------- +// +// Author: P.Dondero (paolo.dondero@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "G4EmStandardPhysics_SpacePhysics.hh" + +#include "G4SystemOfUnits.hh" +#include "G4ParticleDefinition.hh" +#include "G4LossTableManager.hh" +#include "G4EmParameters.hh" +#include "G4EmBuilder.hh" + +#include "G4ComptonScattering.hh" +#include "G4GammaConversion.hh" +#include "G4PhotoElectricEffect.hh" +#include "G4RayleighScattering.hh" +#include "G4PEEffectFluoModel.hh" +#include "G4KleinNishinaModel.hh" +#include "G4BetheHeitler5DModel.hh" +#include "G4LivermorePhotoElectricModel.hh" +#include "G4LivermorePolarizedRayleighModel.hh" +#include "G4PhotoElectricAngularGeneratorPolarized.hh" +#include "G4LowEPComptonModel.hh" +#include "G4LowEPPolarizedComptonModel.hh" + +#include "G4eMultipleScattering.hh" +#include "G4hMultipleScattering.hh" +#include "G4MscStepLimitType.hh" +#include "G4UrbanMscModel.hh" +#include "G4GoudsmitSaundersonMscModel.hh" +#include "G4DummyModel.hh" +#include "G4WentzelVIModel.hh" +#include "G4CoulombScattering.hh" +#include "G4eCoulombScatteringModel.hh" + +#include "G4eIonisation.hh" +#include "G4eBremsstrahlung.hh" +#include "G4Generator2BS.hh" +#include "G4Generator2BN.hh" +#include "G4SeltzerBergerModel.hh" +#include "G4ePairProduction.hh" +#include "G4LivermoreIonisationModel.hh" +#include "G4PenelopeIonisationModel.hh" +#include "G4UniversalFluctuation.hh" +#include "G4UrbanFluctuation.hh" + +#include "G4eplusAnnihilation.hh" + +#include "G4hIonisation.hh" +#include "G4ionIonisation.hh" +#include "G4IonParametrisedLossModel.hh" +#include "G4NuclearStopping.hh" + +#include "G4Gamma.hh" +#include "G4Electron.hh" +#include "G4Positron.hh" +#include "G4GenericIon.hh" + +#include "G4PhysicsListHelper.hh" +#include "G4BuilderType.hh" +#include "G4EmModelActivator.hh" +#include "G4GammaGeneralProcess.hh" + +// factory +#include "G4PhysicsConstructorFactory.hh" +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4EmStandardPhysics_SpacePhysics::G4EmStandardPhysics_SpacePhysics(G4int ver, const G4String&) + : G4VPhysicsConstructor("G4EmStandard_SpacePhysics"), fVerbose(ver) +{ + G4cout << "---> Using G4EmStandard_SpacePhysics v. 11.03 " << G4endl; + G4EmParameters* param = G4EmParameters::Instance(); + param->SetDefaults(); + param->SetVerbose(ver); + param->SetMinEnergy(100*CLHEP::eV); + param->SetLowestElectronEnergy(50*CLHEP::eV); + param->SetNumberOfBinsPerDecade(20); + param->ActivateAngularGeneratorForIonisation(true); + param->SetStepFunction(0.2, 10*CLHEP::um); + param->SetStepFunctionMuHad(0.05, 0.01*CLHEP::um); + param->SetStepFunctionLightIons(0.1, 20*CLHEP::um); + param->SetStepFunctionIons(0.1, 1*CLHEP::um); + param->SetUseMottCorrection(true); // use Mott-correction for e-/e+ msc gs + param->SetMscStepLimitType(fUseSafetyPlus); // for e-/e+ msc gs + param->SetMscSkin(3); // error-free stepping for e-/e+ msc gs + param->SetMscRangeFactor(0.08); // error-free stepping for e-/e+ msc gs + param->SetMuHadLateralDisplacement(true); + param->SetFluo(true); + param->SetUseICRU90Data(true); + param->SetMaxNIELEnergy(1*CLHEP::MeV); + SetPhysicsType(bElectromagnetic); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4EmStandardPhysics_SpacePhysics::ConstructParticle() +{ + // minimal set of particles for EM physics + G4EmBuilder::ConstructMinimalEmSet(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4EmStandardPhysics_SpacePhysics::ConstructProcess() +{ + if(fVerbose > 1) + { + G4cout << "### " << GetPhysicsName() << " Construct Space Physics Processes " << G4endl; + } + G4EmBuilder::PrepareEMPhysics(); + + auto *ph = G4PhysicsListHelper::GetPhysicsListHelper(); + auto *param = G4EmParameters::Instance(); + + // processes used by several particles + auto *hmsc = new G4hMultipleScattering("ionmsc"); + + // nuclear stopping is enabled if the energy limit above zero + G4double nielEnergyLimit = param->MaxNIELEnergy(); + G4NuclearStopping* pnuc = nullptr; + if(nielEnergyLimit > 0.0) + { + pnuc = new G4NuclearStopping(); + pnuc->SetMaxKinEnergy(nielEnergyLimit); + } + + // high energy limit for e+- scattering models and bremsstrahlung + G4double highEnergyLimit = param->MscEnergyLimit(); + + // Add gamma EM Processes + G4ParticleDefinition *particle = G4Gamma::Gamma(); + G4bool polar = param->EnablePolarisation(); + + // Photoelectric + auto *pe = new G4PhotoElectricEffect(); + auto *peModel = new G4LivermorePhotoElectricModel(); + pe->SetEmModel(peModel); + if(polar) + { + peModel->SetAngularDistribution(new G4PhotoElectricAngularGeneratorPolarized()); + } + + // Compton scattering + auto *cs = new G4ComptonScattering; + cs->SetEmModel(new G4KleinNishinaModel()); + G4VEmModel* cModel = nullptr; + if(polar) + { + cModel = new G4LowEPPolarizedComptonModel(); + } + else + { + cModel = new G4LowEPComptonModel(); + } + cModel->SetHighEnergyLimit(20*CLHEP::MeV); + cs->AddEmModel(0, cModel); + + // Gamma conversion + auto *gc = new G4GammaConversion(); + auto *conv = new G4BetheHeitler5DModel(); + gc->SetEmModel(conv); + + // default Rayleigh scattering is Livermore + G4RayleighScattering* rl = new G4RayleighScattering(); + if(polar) + { + rl->SetEmModel(new G4LivermorePolarizedRayleighModel()); + } + + if(param->GeneralProcessActive()) + { + auto *sp = new G4GammaGeneralProcess(); + sp->AddEmProcess(pe); + sp->AddEmProcess(cs); + sp->AddEmProcess(gc); + sp->AddEmProcess(rl); + G4LossTableManager::Instance()->SetGammaGeneralProcess(sp); + ph->RegisterProcess(sp, particle); + } + else + { + ph->RegisterProcess(pe, particle); + ph->RegisterProcess(cs, particle); + ph->RegisterProcess(gc, particle); + ph->RegisterProcess(rl, particle); + } + + // e- + particle = G4Electron::Electron(); + + // multiple scattering + auto *msc = new G4eMultipleScattering(); + // e-/e+ msc gs with Mott-correction + // (Mott-correction is set through G4EmParameters) + auto *msc1 = new G4GoudsmitSaundersonMscModel(); + auto *msc2 = new G4WentzelVIModel(); + msc1->SetHighEnergyLimit(highEnergyLimit); + msc2->SetLowEnergyLimit(highEnergyLimit); + msc->SetEmModel(msc1); + msc->SetEmModel(msc2); + + auto *ssm = new G4eCoulombScatteringModel(); + G4CoulombScattering* ss = new G4CoulombScattering(); + ss->SetEmModel(ssm); + ss->SetMinKinEnergy(highEnergyLimit); + ssm->SetLowEnergyLimit(highEnergyLimit); + ssm->SetActivationLowEnergyLimit(highEnergyLimit); + + // ionisation + auto *eioni = new G4eIonisation(); + G4VEmModel* theIoniLiv = new G4LivermoreIonisationModel(); + eioni->SetFluctModel(new G4UrbanFluctuation()); + theIoniLiv->SetHighEnergyLimit(0.1*CLHEP::MeV); + eioni->AddEmModel(0, theIoniLiv, new G4UniversalFluctuation() ); + + // bremsstrahlung + auto *brem = new G4eBremsstrahlung(); + auto *br1 = new G4SeltzerBergerModel(); + auto *br2 = new G4eBremsstrahlungRelModel(); + br1->SetAngularDistribution(new G4Generator2BS()); + br2->SetAngularDistribution(new G4Generator2BS()); + brem->SetEmModel(br1); + brem->SetEmModel(br2); + br1->SetHighEnergyLimit(CLHEP::GeV); + + auto *ee = new G4ePairProduction(); + + // register processes + ph->RegisterProcess(msc, particle); + ph->RegisterProcess(eioni, particle); + ph->RegisterProcess(brem, particle); + ph->RegisterProcess(ee, particle); + ph->RegisterProcess(ss, particle); + + // e+ + particle = G4Positron::Positron(); + + // multiple scattering + msc = new G4eMultipleScattering(); + // e-/e+ msc gs with Mott-correction + // (Mott-correction is set through G4EmParameters) + msc1 = new G4GoudsmitSaundersonMscModel(); + msc2 = new G4WentzelVIModel(); + msc1->SetHighEnergyLimit(highEnergyLimit); + msc2->SetLowEnergyLimit(highEnergyLimit); + msc->SetEmModel(msc1); + msc->SetEmModel(msc2); + + ssm = new G4eCoulombScatteringModel(); + ss = new G4CoulombScattering(); + ss->SetEmModel(ssm); + ss->SetMinKinEnergy(highEnergyLimit); + ssm->SetLowEnergyLimit(highEnergyLimit); + ssm->SetActivationLowEnergyLimit(highEnergyLimit); + + // ionisation + eioni = new G4eIonisation(); + eioni->SetFluctModel(new G4UrbanFluctuation()); + auto *pen = new G4PenelopeIonisationModel(); + pen->SetHighEnergyLimit(0.1*CLHEP::MeV); + eioni->AddEmModel(0, pen, new G4UniversalFluctuation()); + + // bremsstrahlung + brem = new G4eBremsstrahlung(); + br1 = new G4SeltzerBergerModel(); + br2 = new G4eBremsstrahlungRelModel(); + br1->SetAngularDistribution(new G4Generator2BS()); + br2->SetAngularDistribution(new G4Generator2BS()); + brem->SetEmModel(br1); + brem->SetEmModel(br2); + br1->SetHighEnergyLimit(CLHEP::GeV); + + // register processes + ph->RegisterProcess(msc, particle); + ph->RegisterProcess(eioni, particle); + ph->RegisterProcess(brem, particle); + ph->RegisterProcess(ee, particle); + ph->RegisterProcess(new G4eplusAnnihilation(), particle); + ph->RegisterProcess(ss, particle); + + // generic ion + particle = G4GenericIon::GenericIon(); + auto *ionIoni = new G4ionIonisation(); + ionIoni->SetEmModel(new G4IonParametrisedLossModel()); + ph->RegisterProcess(hmsc, particle); + ph->RegisterProcess(ionIoni, particle); + if(nullptr != pnuc) { ph->RegisterProcess(pnuc, particle); } + + // muons, hadrons, ions + G4EmBuilder::ConstructCharged(hmsc, pnuc); + + // extra configuration + G4EmModelActivator mact(GetPhysicsName()); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/xray_TESdetector/src/XrayTESdetActionInitialization.cc b/examples/advanced/xray_TESdetector/src/XrayTESdetActionInitialization.cc new file mode 100644 index 00000000000..6b02141e365 --- /dev/null +++ b/examples/advanced/xray_TESdetector/src/XrayTESdetActionInitialization.cc @@ -0,0 +1,59 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +/// \file XrayTESdetActionInitialization.cc +/// \brief Implementation of the ActionInitialization class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "XrayTESdetActionInitialization.hh" +#include "XrayTESdetPrimaryGeneratorAction.hh" +#include "XrayTESdetRunAction.hh" +#include "XrayTESdetSteppingAction.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XrayTESdetActionInitialization::BuildForMaster() const +{ + auto *runAction = new XrayTESdetRunAction(); + SetUserAction(runAction); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XrayTESdetActionInitialization::Build() const +{ + auto *kinematics = new XrayTESdetPrimaryGeneratorAction(); + SetUserAction(kinematics); + SetUserAction(new XrayTESdetRunAction()); + SetUserAction(new XrayTESdetSteppingAction()); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/xray_TESdetector/src/XrayTESdetDetParameterisation.cc b/examples/advanced/xray_TESdetector/src/XrayTESdetDetParameterisation.cc new file mode 100644 index 00000000000..6b372aea717 --- /dev/null +++ b/examples/advanced/xray_TESdetector/src/XrayTESdetDetParameterisation.cc @@ -0,0 +1,107 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +/// \file DetParameterisation.cc +/// \brief Implementation of the DetParameterisation class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "XrayTESdetDetParameterisation.hh" +#include "G4VPhysicalVolume.hh" +#include "G4LogicalVolume.hh" +#include "G4ThreeVector.hh" +#include "G4Box.hh" +#include "G4SystemOfUnits.hh" +#include "G4PhysicalConstants.hh" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +XrayTESdetDetParameterisation::XrayTESdetDetParameterisation( + G4int NoChambers, + G4double startX, // X of center of first + G4double spacingX, // X spacing of centers + G4double startY, // Y of center of first + G4double spacingY // Y spacing of centers +){ + fNoChambers = NoChambers; + fStartX = startX; + fStartY = startY; + fSpacingX = spacingX; + fSpacingY = spacingY; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XrayTESdetDetParameterisation::ComputeTransformation (const G4int copyNo, G4VPhysicalVolume* physVol) const +{ + G4double Xposition; + G4double Yposition; + G4int no_daug = physVol->GetLogicalVolume()->GetNoDaughters(); + + for (G4int k=0; kGetLogicalVolume()->GetDaughter(k)->SetCopyNo(-copyNo); + } + std::ifstream input("pixelpos.txt"); + if ( !input ) + { + G4cout << "Cannot open pixels positions' file\n"; exit( -1 ); + } + + std::vector xpos; G4double b; + std::vector ypos; G4double c; + + while(!input.eof()) + { + input >> b >> c; + xpos.push_back(b); + ypos.push_back(c); + } + + input.close(); + + Xposition = xpos[copyNo]*mm; + Yposition = ypos[copyNo]*mm; + + G4ThreeVector origin(Xposition, Yposition, 0); + physVol->SetTranslation(origin); + physVol->SetRotation(0); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/xray_TESdetector/src/XrayTESdetDetectorConstruction.cc b/examples/advanced/xray_TESdetector/src/XrayTESdetDetectorConstruction.cc new file mode 100644 index 00000000000..63ee86d09b9 --- /dev/null +++ b/examples/advanced/xray_TESdetector/src/XrayTESdetDetectorConstruction.cc @@ -0,0 +1,1214 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +/// \file XrayTESdetDetectorConstruction.cc +/// \brief Implementation of the XrayTESdetDetectorConstruction class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "XrayTESdetDetectorConstruction.hh" +#include "XrayTESdetDetectorMessenger.hh" +#include "XrayTESdetDetParameterisation.hh" +#include "G4Material.hh" +#include "G4Sphere.hh" +#include "G4Box.hh" +#include "G4Tubs.hh" +#include "G4LogicalVolume.hh" +#include "G4ThreeVector.hh" +#include "G4PVPlacement.hh" +#include "G4PVParameterised.hh" +#include "globals.hh" +#include "G4SDManager.hh" +#include "G4GeometryTolerance.hh" +#include "G4GeometryManager.hh" +#include "G4UserLimits.hh" +#include "G4VisAttributes.hh" +#include "G4Colour.hh" +#include "G4ios.hh" +#include "G4SubtractionSolid.hh" +#include "G4Cons.hh" +#include "G4RotationMatrix.hh" +#include "G4PVReplica.hh" +#include "G4NistManager.hh" +#include "G4Cons.hh" +#include "G4Polyhedra.hh" +#include "G4PVParameterised.hh" +#include "G4Trap.hh" +#include "G4Trd.hh" +#include "G4Hype.hh" +#include "G4ExtrudedSolid.hh" +#include "G4SystemOfUnits.hh" +#include "G4PhysicalConstants.hh" + +// #include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "G4GDMLParser.hh" +#include "G4PhysicalVolumeStore.hh" +#include "G4ProductionCuts.hh" +#include "G4ProductionCutsTable.hh" + + +XrayTESdetDetectorConstruction::XrayTESdetDetectorConstruction() +: fStepLimitPolyfilta(nullptr),fStepLimitAlfilta(nullptr),fStepLimitmembrane(nullptr),fExperimentalHall_phys(nullptr),fDetectorMessenger(nullptr) +{ + fReadFile = ""; + fDetectorMessenger = new XrayTESdetDetectorMessenger(this); +} + + +XrayTESdetDetectorConstruction::~XrayTESdetDetectorConstruction() +{ + delete fStepLimitAlfilta; + delete fStepLimitPolyfilta; + delete fStepLimitmembrane; + delete fDetectorMessenger; +} + + +G4VPhysicalVolume* XrayTESdetDetectorConstruction::Construct() +{ + return ConstructDetector(); +} + + +G4VPhysicalVolume* XrayTESdetDetectorConstruction::ConstructDetector() +{ + G4VPhysicalVolume* fWorld_phys; + auto *InnerRegion = new G4Region("InnerRegion"); + + if (fReadFile == "") + { + G4cout << "Build a new geometry" << G4endl; + + // ------------------------------------------------------------------------------------------- + // --------------- Define materials ---------------------------------------------------------- + // ------------------------------------------------------------------------------------------- + G4String symbol; + G4int ncomponents; + G4double density; + G4double fractionmass; + + auto *man = G4NistManager::Instance(); + auto *Si = man->FindOrBuildMaterial("G4_Si"); + auto *Cu = man->FindOrBuildMaterial("G4_Cu"); + auto *Bi = man->FindOrBuildMaterial("G4_Bi"); + auto *Al = man->FindOrBuildMaterial("G4_Al"); + auto *Ni = man->FindOrBuildMaterial("G4_Ni"); + auto *Au = man->FindOrBuildMaterial("G4_Au"); + auto *N = man->FindOrBuildMaterial("G4_N"); + auto *Fe = man->FindOrBuildMaterial("G4_Fe"); + auto *C = man->FindOrBuildMaterial("G4_C"); + auto *Mn = man->FindOrBuildMaterial("G4_Mn"); + auto *Ph = man->FindOrBuildMaterial("G4_P"); + auto *S = man->FindOrBuildMaterial("G4_S"); + auto *Cr = man->FindOrBuildMaterial("G4_Cr"); + auto *Mo = man->FindOrBuildMaterial("G4_Mo"); + auto *Ti = man->FindOrBuildMaterial("G4_Ti"); + + // Define the material of the ring + auto *RingAl = new G4Material("RingAl", density=0.736*g/cm3, ncomponents=1); + RingAl->AddMaterial(Al, fractionmass=1); + + // Define cryoperm + auto *Cryoperm = new G4Material("Cryoperm", density=8.7*g/cm3, ncomponents=4); + Cryoperm->AddMaterial(Ni, fractionmass=0.775); + Cryoperm->AddMaterial(Cu, fractionmass=0.045); + Cryoperm->AddMaterial(Mo, fractionmass=0.025); + Cryoperm->AddMaterial(Fe, fractionmass=0.155); + + // Define vacuum + auto *vacuum = man->FindOrBuildMaterial("G4_Galactic"); + + // Define the Stainless Steel + G4double SS_density = 8.03*g/cm3; + auto *SS = new G4Material("Stainless Steel",density=SS_density,ncomponents=8); + SS->AddMaterial(N, fractionmass=0.01); + SS->AddMaterial(Ni, fractionmass=0.1); + SS->AddMaterial(Cr, fractionmass=0.185); + SS->AddMaterial(S, fractionmass=0.03); + SS->AddMaterial(Ph, fractionmass=0.045); + SS->AddMaterial(Mn, fractionmass=0.02); + SS->AddMaterial(C, fractionmass=0.08); + SS->AddMaterial(Fe, fractionmass=0.53); + + // Si3N4 + G4double A; + G4double Z; + auto *elSi = new G4Element("Silicon", "Si", Z=14., A=28.0855*g/mole); + auto *elN = new G4Element("Nitrogen","N", Z=7., A=14.00674*g/mole); + G4double Si3N4density = 3.44*g/cm3; + auto *Si3N4 = new G4Material("Si3N4", Si3N4density, 2); + Si3N4->AddElement (elSi, 3); + Si3N4->AddElement (elN, 4); + + // ------------------------------------------------------------------------------------------- + // ----------------------------------- Define World volume ----------------------------------- + G4double expHall_x = 3*m; + G4double expHall_y = 3*m; + G4double expHall_z = 3*m; + + auto *experimentalHall_box = new G4Box("experimentalHall_box",expHall_x,expHall_y,expHall_z); + fExperimentalHall_log = new G4LogicalVolume(experimentalHall_box,vacuum,"experimentalHall_log",0,0,0);// vacuum ok, its the mother volume + fExperimentalHall_phys = new G4PVPlacement(nullptr,G4ThreeVector(), fExperimentalHall_log,"expHall",0,false,0); + + // ------------------------------------------------------------------------------------------- + // ------------------------------------ Define TES array ------------------------------------- + //absorber: 3 µm Bi + G4double Biabsorberthickness = 3*um; + G4double Gridthickness = 200*um; + G4double membrane_thickness = 0.75*um; + G4double wafer_thickness = 0.25*mm; + + //height of the entire volume to be replicated + G4double xifu_z = Biabsorberthickness+Gridthickness+membrane_thickness; + + //size of the mother volume to be replicated + G4double pxl_pitch = 0.814*mm;//V2 res90 + G4double pxl_gap = 11*um; + G4double pxl_size = pxl_pitch-pxl_gap; + G4double grid_size = pxl_pitch; + + G4double DetPos_x = 0.0*mm; + G4double DetPos_y = 0.0*mm; + G4double DetPos_z = -xifu_z; //So that the absorbers surface is at z=0 + + //mother volume of the detector has hexagonal shape + G4double phiStart = 0; + G4double phiTotal = 0; + G4int numSide = 6; + G4int numZPlanes = 2; + G4double rInner[2] = {0,0}; + + //end of parameters definitions + auto *element_box = new G4Box("element_box",grid_size*0.5,grid_size*0.5,xifu_z*0.5); + fElement_log = new G4LogicalVolume(element_box,vacuum,"element_log"); + + //definition of the mother volume containing the replicated elements + G4String pName = "Detector_hex"; + G4double zPlane[2] = {-xifu_z*0.5,xifu_z*0.5}; + + G4double rOuter[2] = {8.5*mm,8.5*mm};//apothem + + G4Polyhedra* Detector_hex = new G4Polyhedra(pName, + phiStart, + phiTotal, + numSide, + numZPlanes, + zPlane, + rInner, + rOuter); + + fDetector_log = new G4LogicalVolume(Detector_hex,vacuum,"Detector_log");//vacuum ok, it's the mother volume + fDetector_phys = new G4PVPlacement(nullptr, G4ThreeVector(DetPos_x,DetPos_y,DetPos_z+0.0001*um),fDetector_log,"Detector",fExperimentalHall_log, false, 0); + + //Bi absorber 3 um + auto *Bipxl_box = new G4Box("Bipxl_box",pxl_size*0.5,pxl_size*0.5,Biabsorberthickness*0.5); + fBipxl_log = new G4LogicalVolume(Bipxl_box,Bi,"Bipxl_log"); + fBipxl_phys = new G4PVPlacement(nullptr,G4ThreeVector(0., 0., xifu_z*0.5-Biabsorberthickness*0.5), fBipxl_log, "Bipxl", fElement_log, false, 0); + + //SiN membrane sustaing the absorbers + auto *membranepxl_box = new G4Box("membranepxl_box",pxl_size*0.5,pxl_size*0.5,membrane_thickness*0.5); + fMembranepxl_log = new G4LogicalVolume(membranepxl_box,Si3N4,"membranepxl_log"); + fMembranepxl_phys = new G4PVPlacement(nullptr,G4ThreeVector(0., 0., xifu_z*0.5-Biabsorberthickness-membrane_thickness*0.5), fMembranepxl_log, "membrane", fElement_log, false, 0); + + //step limiter: the membrane is really thin, thinner than the typical interaction step. This forces the particles to perform at least 5 interactions inside + G4double maxStepmembrane = 0.2*membrane_thickness; + fStepLimitmembrane = new G4UserLimits(maxStepmembrane); + fMembranepxl_log->SetUserLimits(fStepLimitmembrane); + + // Grid element + auto *gridbox = new G4Box("grid_box",grid_size*0.5,grid_size*0.5,Gridthickness*0.5); + G4double gridbeam_size = 165*um; + G4double gridhole_size = grid_size-gridbeam_size; + G4double gridhole_thickness = Gridthickness+1*mm; + auto *gridhole_box = new G4Box("gridhole_box",gridhole_size*0.5,gridhole_size*0.5,gridhole_thickness*0.5); + G4SubtractionSolid* gridsubtraction = new G4SubtractionSolid("gridsubtraction",gridbox, gridhole_box); + fGridpiece_log = new G4LogicalVolume(gridsubtraction,Si,"gridpiece_log"); + fGridpiece_phys = new G4PVPlacement(nullptr,G4ThreeVector(0., 0., xifu_z*0.5-Biabsorberthickness-membrane_thickness-Gridthickness*0.5), fGridpiece_log, "gridpiece", fElement_log, false, 0); + + //parametrization of element_log + auto *DetParam = new XrayTESdetDetParameterisation( + 317,//V1 and V2 res80 and res90 // to be commented for overlap check + //2, // To enable volumes overlap check the number of replicas must be reduced. Keep it commented if not needed + -grid_size*38, + grid_size, + grid_size*0.5, + grid_size ); + + fPhysiDet = new G4PVParameterised( + "Det", // their name + fElement_log, // their logical volume + fDetector_log, // Mother logical volume + kXAxis, // Are placed along this axis + 317, //V1 and V2 res80 and res90 + //2, // overlap check. Same as before. + DetParam); // The parametrisation + + // ------------ Define support wafer ---------------------------------------------- + G4double rOutersupp[2] = {39.4*mm,39.4*0.5*mm}; + G4double zwaferPlane[2] = {-0.5*wafer_thickness,0.5*wafer_thickness}; + + auto *wafer_hex = new G4Polyhedra("wafer_hex", + phiStart, + phiTotal, + numSide, + numZPlanes, + zwaferPlane, + rOuter, + rOutersupp); + + fWafer_log = new G4LogicalVolume(wafer_hex,Si,"wafer_log"); + G4double wafer_z = -xifu_z*0.5-Biabsorberthickness-Gridthickness*0.5; + fWafer_phys = new G4PVPlacement(nullptr, G4ThreeVector(DetPos_x,DetPos_y,wafer_z), fWafer_log,"wafer",fExperimentalHall_log, false, 0); + + //------------------------------------------------------------------------------------------------------ + //---------------------------------- BSC electron detector --------------------------------------- + // This fake surface placed just above the absorbers gathers information on the electrons crossing it + // it can be used to check if the same particle crossed it twice, to identify backscattering events + //------------------------------------------------------------------------------------------------------ + G4double BSC_z = 0.05*mm; // half thickness + + G4String pBSCName = "BSCdetector"; + G4double zPlaneBSC[2] = {-BSC_z,BSC_z}; + G4double rOuterBSC[2] = {rOuter[0]+2*mm,rOuter[1]+2*mm}; + + auto *BSC_hex = new G4Polyhedra(pBSCName, + phiStart, + phiTotal, + numSide, + numZPlanes, + zPlaneBSC, + rInner, + rOuterBSC); + + fBSC_log = new G4LogicalVolume(BSC_hex,vacuum,"BSC_log"); + + G4double BSCPos_x = 0.0*mm; + G4double BSCPos_y = 0.0*mm; + G4double BSCPos_z = wafer_z + wafer_thickness+BSC_z*0.5; + + fBSC_phys = new G4PVPlacement(nullptr, G4ThreeVector(BSCPos_x,BSCPos_y,BSCPos_z),fBSC_log,"BSC",fExperimentalHall_log, false, 0); + + // -------------------------------------------------------------------------------------------------------------------------------------------- + // -------------------------------------------------------- Define ACD inner array ------------------------------------------------------------ + // Anti Coincidence Detectors are usually thicker than the main ones. It can generate a huge output file if low cuts are used + // defining a inner part of the ACD and assigning it to a lower precision region, thus allowing only the creation of high energy secondaries + // can help speeding up the simulation and reducing the output size. In this example only the external 25 um belong to the higher precision region + // -------------------------------------------------------------------------------------------------------------------------------------------- + G4double ACDthickness = 200*um; + G4double ACD_distance = 0.75*mm; // distance from the lower edge of the main detector + G4double ACDarrayPos_z = -1*(ACD_distance+Biabsorberthickness/2+ACDthickness/2); + G4double ACDpxlGAP = 50*um; + + G4double pxlheight = 8.5*mm; + G4double pxlwideside = pxlheight*1.191*mm; + G4double pxlshortside = pxlwideside*0.5; + + G4double inACDthickness = ACDthickness-50*um; + + G4double inpxlheight = pxlheight-50*um; + G4double inpxlwideside = pxlwideside-50*um; + G4double inpxlshortside = inpxlwideside*0.5; + + auto *inACDpxl = new G4Trap("inACDpxl", + inACDthickness, + inpxlheight, + inpxlwideside, + inpxlshortside); + + fInACDpxl_log = new G4LogicalVolume(inACDpxl,Si,"inACDpxl_log"); + G4RotationMatrix rotm = G4RotationMatrix(); + + //pxl1 + G4double ACDarrayPos1_x = (pxlshortside*1.5+ACDpxlGAP)*0.5; + G4double ACDarrayPos1_y = (pxlheight+ACDpxlGAP)*0.5; + fInACDpxl_phys = new G4PVPlacement(nullptr, G4ThreeVector(ACDarrayPos1_x,ACDarrayPos1_y,ACDarrayPos_z),fInACDpxl_log,"pxl1",fExperimentalHall_log, false, 0); + + //pxl2 + rotm.rotateZ(180*deg); + G4double ACDarrayPos2_x = -ACDarrayPos1_x; + G4double ACDarrayPos2_y = -ACDarrayPos1_y; + G4ThreeVector position2 = G4ThreeVector(ACDarrayPos2_x,ACDarrayPos2_y,ACDarrayPos_z); + G4Transform3D transform2 = G4Transform3D(rotm,position2); + fInACDpxl_phys = new G4PVPlacement(transform2,fInACDpxl_log,"pxl2",fExperimentalHall_log, false, 0); + + //pxl3 + rotm.rotateY(180*deg); + G4double ACDarrayPos3_x = ACDarrayPos1_x; + G4double ACDarrayPos3_y = -ACDarrayPos1_y; + G4ThreeVector position3 = G4ThreeVector(ACDarrayPos3_x,ACDarrayPos3_y,ACDarrayPos_z); + G4Transform3D transform3 = G4Transform3D(rotm,position3); + fInACDpxl_phys = new G4PVPlacement(transform3,fInACDpxl_log,"pxl3",fExperimentalHall_log, false, 0); + + //pxl4 + rotm.rotateZ(180*deg); + G4double ACDarrayPos4_x = -ACDarrayPos1_x; + G4double ACDarrayPos4_y = ACDarrayPos1_y; + G4ThreeVector position4 = G4ThreeVector(ACDarrayPos4_x,ACDarrayPos4_y,ACDarrayPos_z); + G4Transform3D transform4 = G4Transform3D(rotm,position4); + fInACDpxl_phys = new G4PVPlacement(transform4,fInACDpxl_log,"pxl4",fExperimentalHall_log, false, 0); + + // ---------------------------------------------------------------------------------- + // -------------------- Define ACD outer layer array -------------------------------- + auto *ACDpxl = new G4Trap("ACDpxl", + ACDthickness, + pxlheight, + pxlwideside, + pxlshortside); + G4SubtractionSolid* ACDsub = new G4SubtractionSolid("ACDsub",ACDpxl, inACDpxl); + fACDpxl_log = new G4LogicalVolume(ACDsub,Si,"ACDpxl_log"); + + //pxl1 + fACDpxl_phys = new G4PVPlacement(nullptr, G4ThreeVector(ACDarrayPos1_x,ACDarrayPos1_y,ACDarrayPos_z),fACDpxl_log,"pxl1a",fExperimentalHall_log, false, 0); + + //pxl2 + fACDpxl_phys = new G4PVPlacement(transform2,fACDpxl_log,"pxl2a",fExperimentalHall_log, false, 0); + + //pxl3 + fACDpxl_phys = new G4PVPlacement(transform3,fACDpxl_log,"pxl3a",fExperimentalHall_log, false, 0); + + //pxl4 + fACDpxl_phys = new G4PVPlacement(transform4,fACDpxl_log,"pxl4a",fExperimentalHall_log, false, 0); + + //------------------------------------------------------------------------------------------------------ + //-----------------------------------------SUPPORTS------------------------------------------------// + + //--------------------- ACD plate -------------- + G4double ACplate_thickness = 3.5*mm; // support thickness + + G4String ACplateName = "ACplateName"; + G4double ACplatezPlane[2] = {-0.5*ACplate_thickness,0.5*ACplate_thickness}; + G4double ACplaterInner[2] = {pxlwideside,pxlwideside};//apothem + G4double ACplaterOuter[2] = {43*mm,43*mm}; + + auto *ACplate_hex = new G4Polyhedra(ACplateName, + phiStart, + phiTotal, + numSide, + numZPlanes, + ACplatezPlane, + ACplaterInner, + ACplaterOuter ); + + fACplate_log = new G4LogicalVolume(ACplate_hex,Cu,"ACplate_log");//tbc + + G4double ACplatePos_x = DetPos_x; + G4double ACplatePos_y = DetPos_y; + G4double ACplatePos_z = -2.25*mm; + + fACplate_phys = new G4PVPlacement(nullptr, G4ThreeVector(ACplatePos_x,ACplatePos_y,ACplatePos_z),fACplate_log,"ACDplate",fExperimentalHall_log, false, 0); + + //------------------------------------------------------------------------------------------------------ + //---------------------------------------------- cage ---------------------------------------------- + // ALL THE FOLLOWING SUPPORTING STRUCTURES DEFINE A COMPLEX SHAPE THAT WAS SIMPLIFIED AND ADAPTED FROM AN ENGINEERING CAD MODEL + // ALL THE NUMBERS RELATIVE TO SIZES AND POSITIONS HAVE BEEN EXTRACTED FROM THE CAD FILE, THAT IS WHY THE NUMBERS ARE SO ODD + // THIS IS MEANT JUST TO GIVE AN EXAMPLE OF THE SUPPORTING STRUCTURES PRESENT IN AN ACTUAL CRYOSTAT + + //------------------supporting columns (full) + G4double hightOfcagecolumn = 60*mm; + + auto *cagecolumn = new G4Tubs("cagecolumn", 0*mm, 3.99*mm, hightOfcagecolumn*0.5, 0*deg, 360*deg); + G4LogicalVolume* cagecolumn_log = new G4LogicalVolume(cagecolumn,Cu,"cagecolumn_log",0,0,0); + + fCagecolumn_phys = new G4PVPlacement( + 0, // no rotation + G4ThreeVector(45.75*mm,0*mm,-36.5027*mm), // translation position + cagecolumn_log, // its logical volume + "cagecolumn1", // its name + fExperimentalHall_log, // its mother (logical) volume + false, // no boolean operations + 0); + + fCagecolumn2_phys = new G4PVPlacement( + 0, + G4ThreeVector(-45.75*mm,0*mm,-36.5027*mm), + cagecolumn_log, + "cagecolumn2", + fExperimentalHall_log, + false, + 0); + + fCagecolumn3_phys = new G4PVPlacement( + 0, + G4ThreeVector(22.875*mm,39.621*mm,-36.5027*mm), + cagecolumn_log, + "cagecolumn3", + fExperimentalHall_log, + false, + 0); + + fCagecolumn4_phys = new G4PVPlacement( + 0, + G4ThreeVector(22.875*mm,-39.621*mm,-36.5027*mm), + cagecolumn_log, + "cagecolumn4", + fExperimentalHall_log, + false, + 0); + + fCagecolumn5_phys = new G4PVPlacement( + 0, + G4ThreeVector(-22.875*mm,-39.621*mm,-36.5027*mm), + cagecolumn_log, + "cagecolumn5", + fExperimentalHall_log, + false, + 0); + + fCagecolumn6_phys = new G4PVPlacement( + 0, + G4ThreeVector(-22.875*mm,39.621*mm,-36.5027*mm), + cagecolumn_log, + "cagecolumn6", + fExperimentalHall_log, + false, + 0); + + //----------------------------------supporting columns (empty) + auto *emptycagecolumn = new G4Tubs("emptycagecolumn", 1.25*mm, 3*mm, hightOfcagecolumn*0.5, 0*deg, 360*deg); + G4LogicalVolume* emptycagecolumn_log = new G4LogicalVolume(emptycagecolumn,Cu,"emptycagecolumn_log",0,0,0); + + fEmptycagecolumn_phys = new G4PVPlacement( + 0, + G4ThreeVector(22.875*mm,0*mm,-36.5027*mm), + emptycagecolumn_log, + "emptycagecolumn1", + fExperimentalHall_log, + false, + 0); + + fEmptycagecolumn2_phys = new G4PVPlacement( + 0, + G4ThreeVector(-11.4375*mm,-19.8103311*mm,-36.5027*mm), + emptycagecolumn_log, + "emptycagecolumn2", + fExperimentalHall_log, + false, + 0); + + fEmptycagecolumn3_phys = new G4PVPlacement( + 0, + G4ThreeVector(-11.4375*mm,19.810331*mm,-36.5027*mm), + emptycagecolumn_log, + "emptycagecolumn3", + fExperimentalHall_log, + false, + 0); + + //-----------------------walls + G4double cagewall_x = 1*mm; + G4double cagewall_y = 32.62*mm; + G4double cagewall_z = 65*mm; + + auto *cagewall_box = new G4Box("_box",cagewall_x*0.5,cagewall_y*0.5,cagewall_z*0.5); + + fCagewall_log = new G4LogicalVolume(cagewall_box,Cu,"cagewall_log",0,0,0); //tbc + fCagewall_phys = new G4PVPlacement( + 0, + G4ThreeVector(22.875*mm,19.3103311*mm,-36.5027*mm), + fCagewall_log, + "cagewall1", + fExperimentalHall_log, + false, + 0); + + ///and the other 5 pieces + fCagewall2_phys = new G4PVPlacement( + 0, + G4ThreeVector(22.875*mm,-19.3103311*mm,-36.5027*mm), + fCagewall_log, + "cagewall2", + fExperimentalHall_log, + false, + 0); + + G4RotationMatrix wallrotm = G4RotationMatrix(); + + wallrotm.rotateZ(-60*deg); + G4ThreeVector wallposition3 = G4ThreeVector(5.2857373*mm,29.4654967*mm,-36.5027*mm); + G4Transform3D walltransform3 = G4Transform3D(wallrotm,wallposition3); + fCagewall3_phys = new G4PVPlacement(walltransform3,fCagewall_log,"cagewall3",fExperimentalHall_log, true, 0); + + G4ThreeVector wallposition4 = G4ThreeVector(-28.1607373*mm,10.1551656*mm,-36.5027*mm); + G4Transform3D walltransform4 = G4Transform3D(wallrotm,wallposition4); + fCagewall4_phys = new G4PVPlacement(walltransform4,fCagewall_log,"cagewall4",fExperimentalHall_log, true, 0); + + wallrotm.rotateZ(120*deg); + G4ThreeVector wallposition5 = G4ThreeVector(-28.1607373*mm,-10.1551656*mm,-36.5027*mm); + G4Transform3D walltransform5 = G4Transform3D(wallrotm,wallposition5); + fCagewall5_phys = new G4PVPlacement(walltransform5,fCagewall_log,"cagewall5",fExperimentalHall_log, true, 0); + + G4ThreeVector wallposition6 = G4ThreeVector(5.2857373*mm,-29.4654967*mm,-36.5027*mm); + G4Transform3D walltransform6 = G4Transform3D(wallrotm,wallposition6); + fCagewall6_phys = new G4PVPlacement(walltransform6,fCagewall_log,"cagewall6",fExperimentalHall_log, true, 0); + + //-----------------------miniwalls + G4double minicagewall_x = 15.875*mm; + G4double minicagewall_y = 1*mm; + + auto *minicagewall_box = new G4Box("minicagewall_box",minicagewall_x*0.5,minicagewall_y*0.5,cagewall_z*0.5); + fMinicagewall_log = new G4LogicalVolume(minicagewall_box,Cu,"minicagewall_log",0,0,0);//tbc + fMinicagewall_phys = new G4PVPlacement( + 0, + G4ThreeVector(33.8125*mm,0*mm,-36.5027*mm), + fMinicagewall_log, + "minicagewall1", + fExperimentalHall_log, + false, + 0); + + G4RotationMatrix wallrotm2 = G4RotationMatrix(); + + wallrotm2.rotateZ(-60*deg); + G4ThreeVector miniwallposition2 = G4ThreeVector(-16.90625*mm,29.282484*mm,-36.5027*mm); + G4Transform3D miniwalltransform2 = G4Transform3D(wallrotm2,miniwallposition2); + fMinicagewall2_phys = new G4PVPlacement(miniwalltransform2,fMinicagewall_log,"minicagewall2",fExperimentalHall_log, true, 0); + + wallrotm2.rotateZ(-60*deg); + G4ThreeVector miniwallposition3 = G4ThreeVector(-16.90625*mm,-29.282484*mm,-36.5027*mm); + G4Transform3D miniwalltransform3 = G4Transform3D(wallrotm2,miniwallposition3); + fMinicagewall3_phys = new G4PVPlacement(miniwalltransform3,fMinicagewall_log,"minicagewall3",fExperimentalHall_log, true, 0); + + //--------------extwalls + G4double extcagewall_x = 1.85*mm; + G4double extcagewall_y = 37.75*mm; + G4double extcagewall_z = 65*mm; + + auto *extcagewall_box = new G4Box("extcagewall_box",extcagewall_x*0.5,extcagewall_y*0.5,extcagewall_z*0.5); + fExtcagewall_log = new G4LogicalVolume(extcagewall_box,Cu,"extcagewall_log",0,0,0); + G4RotationMatrix wallrotm3 = G4RotationMatrix(); + wallrotm3.rotateZ(-30*deg); + G4ThreeVector extwallposition = G4ThreeVector(-35.0724512*mm,20.2490891*mm,-36.5027*mm); + G4Transform3D extwalltransform = G4Transform3D(wallrotm3,extwallposition); + fExtcagewall_phys = new G4PVPlacement(extwalltransform,fExtcagewall_log,"extcagewall1",fExperimentalHall_log, true, 0); + + G4ThreeVector extwallposition2 = G4ThreeVector(35.0724512*mm,-20.2490891*mm,-36.5027*mm); + G4Transform3D extwalltransform2 = G4Transform3D(wallrotm3,extwallposition2); + fExtcagewall2_phys = new G4PVPlacement(extwalltransform2,fExtcagewall_log,"extcagewall2",fExperimentalHall_log, true, 0); + + //--------------extboards + G4double extboard_x = 0.5*mm; + G4double extboard_y = 36.5*mm; + G4double extboard_z = 64.5*mm; + + auto *extboard_box = new G4Box("extboard_box",extboard_x*0.5,extboard_y*0.5,extboard_z*0.5); + fExtboard_log = new G4LogicalVolume(extboard_box,Si,"extboard_log",0,0,0); + G4ThreeVector extboardposition = G4ThreeVector(37.932*mm,-21.9*mm,-36.253*mm); + G4Transform3D extboardtransform = G4Transform3D(wallrotm3,extboardposition); + fExtboard_phys = new G4PVPlacement(extboardtransform,fExtboard_log,"extboard1",fExperimentalHall_log, true, 0); + + G4ThreeVector extboardposition2 = G4ThreeVector(-37.932*mm,21.9*mm,-36.253*mm); + G4Transform3D extboardtransform2 = G4Transform3D(wallrotm3,extboardposition2); + fExtboard2_phys = new G4PVPlacement(extboardtransform2,fExtboard_log,"extboard2",fExperimentalHall_log, true, 0); + + //------------------------------------------------------------------------------------------------- + // --- END OF THE SUPPORTING STRUCTURES. HERE: STAGES OF THE CRYOSTAT ----------------------------- + + //------------------------------------------------------------------------------------------------- + //---------------------------------------- First thermal shield ----------------------------------------- + + auto *FirstShield_botplate = new G4Tubs("Tube_FirstShield_botplate", 0.*mm, 80*mm, 1*mm*0.5, 0*deg, 360*deg); + G4LogicalVolume* FirstShield_botplate_log = new G4LogicalVolume(FirstShield_botplate,Cryoperm,"FirstShield_botplate_log",0,0,0); + fFirstShield_botplate_phys = new G4PVPlacement( + 0, + G4ThreeVector(0,0,-101*mm), + FirstShield_botplate_log, + "FirstShield_botplate", + fExperimentalHall_log, + false, + 0); + + //------------------------ + auto *FirstShield_side = new G4Tubs("Tube_FirstShield_side", 79*mm, 80*mm, 145*mm*0.5, 0*deg, 360*deg); + G4LogicalVolume* FirstShield_side_log = new G4LogicalVolume(FirstShield_side,Cryoperm,"FirstShield_side_log",0,0,0); + fFirstShield_side_phys = new G4PVPlacement( + 0, + G4ThreeVector(0,0,-28*mm), + FirstShield_side_log, + "FirstShield_side", + fExperimentalHall_log, + false, + 0); + + //--------------------------- + auto *FirstShield_topplate = new G4Tubs("Tube_FirstShield_topplate", 31.85*mm, 80*mm, 1*mm*0.5, 0*deg, 360*deg); + G4LogicalVolume* FirstShield_topplate_log = new G4LogicalVolume(FirstShield_topplate,Cryoperm,"FirstShield_topplate_log",0,0,0); + fFirstShield_topplate_phys = new G4PVPlacement( + 0, + G4ThreeVector(0,0,45*mm), + FirstShield_topplate_log, + "FirstShield_topplate", + fExperimentalHall_log, + false, + 0); + + //------------------------------ + auto *FirstShield_topcyl = new G4Tubs("Tube_FirstShield_topcyl", 31.85*mm, 32.85*mm, 74*mm*0.5, 0*deg, 360*deg); + G4LogicalVolume* FirstShield_topcyl_log = new G4LogicalVolume(FirstShield_topcyl,Cryoperm,"FirstShield_topcyl_log",0,0,0); + fFirstShield_topcyl_phys = new G4PVPlacement( + 0, + G4ThreeVector(0,0,82.5*mm), + FirstShield_topcyl_log, + "FirstShield_topcyl", + fExperimentalHall_log, + false, + 0); + + //------------------------------------------------------------------------------------------------- + //------------------------------------------ Ring ---------------------------------------------- + + // This solid has a complex shape, filled with holes and supporting beams. Since it is not in direct sight of + // the detector, it can be simplified as a ring-like shape. + + // The material has been defined as a custom Al with density equal to the average density in the original solid + G4double hightOfRing = 85*mm; + auto *Ring = new G4Tubs("Ring_tubs", 80*mm, 97.1*mm, hightOfRing*0.5, 0*deg, 360*deg); + + // Three boxes are used for a boolean subtraction, cutting 3 sections of the ring + G4double cuts_x = 38.781347139*mm; + G4double cuts_y = 116.620103593*mm; + G4double cuts_z = 85.1*mm; + + auto *cuts_box = new G4Box("cuts_box",cuts_x*0.5,cuts_y*0.5,cuts_z*0.5); + + G4ThreeVector cutspos = G4ThreeVector(-105.055643631*mm,0,0); + G4SubtractionSolid* Ringsub = new G4SubtractionSolid("Ringsub",Ring,cuts_box,0,cutspos); + + auto *cutsrotm = new G4RotationMatrix(); + cutsrotm->rotateZ(60*deg); + G4ThreeVector cutspos2 = G4ThreeVector(52.527821885*mm,-90.980856208*mm,0); + G4SubtractionSolid* Ringsub2 = new G4SubtractionSolid("Ringsub2",Ringsub,cuts_box,cutsrotm,cutspos2); + cutsrotm->rotateZ(60*deg); + G4ThreeVector cutspos3 = G4ThreeVector(52.527821885*mm,90.980856208*mm,0); + auto *Ringsub3 = new G4SubtractionSolid("Ringsub3",Ringsub2,cuts_box,cutsrotm,cutspos3); + auto *Ring_log = new G4LogicalVolume(Ringsub3,RingAl,"Ring_log",0,0,0);//tbc + fRing_phys = new G4PVPlacement( + 0, + G4ThreeVector(0.,0.,-22*mm), + Ring_log, + "Ring", + fExperimentalHall_log, + false, + 0); + + //------------------------------------------------------------------------------------------------- + //---------------------------------------- Second thermal shield ----------------------------------------- + // This is another irregular and complex shape derived from a CAD engineering model that was simplified for Geant4 implementation + + // Define the overall shape and bottom plate defining the base points to extrude + std::vector newShape(6); + newShape[0] = G4TwoVector(58.936*mm, 154.115*mm); + newShape[1] = G4TwoVector(104*mm, 128.098*mm); + newShape[2] = G4TwoVector(104*mm, -128.098*mm); + newShape[3] = G4TwoVector(58.936*mm, -154.115*mm); + newShape[4] = G4TwoVector(-162.936*mm, -26.018*mm); + newShape[5] = G4TwoVector(-162.936*mm, 26.018*mm); + + // ------------------------------------------- the lower plate ------------------------------------------- + // Extrusion of the solid defined by the 6 points above + auto *MyShape = new G4ExtrudedSolid("MyShape", newShape, 2.65*0.5*mm, G4TwoVector(0, 0), 1.0, G4TwoVector(0, 0), 1.0); + + // Inserting a hole in the plate + auto *MyHole = new G4Tubs("MyHole", 0, 19*mm, 3*mm*0.5, 0*deg, 360*deg); + G4ThreeVector holepos = G4ThreeVector(0,0,0); + auto *SecondShieldbotPlate = new G4SubtractionSolid("SecondShieldbotPlate_sub",MyShape,MyHole,0,holepos); + auto *SecondShieldbotPlate_log = new G4LogicalVolume(SecondShieldbotPlate,Al,"SecondShieldbotPlate_log",0,0,0); + fSecondShieldbotPlate_phys = new G4PVPlacement( + 0, + G4ThreeVector(0,0,-110.178*mm), + SecondShieldbotPlate_log, + "SecondShieldbotPlate", + fExperimentalHall_log, + false, + 0); + + //--------------------------------------------------------------------------------------------------- + //------------------------------------------ the central part --------------------------------------- + + // Definitino of the central block + auto *MyShape2 = new G4ExtrudedSolid("MyShape2", newShape, 215.35*0.5*mm, G4TwoVector(0, 0), 1.0, G4TwoVector(0, 0), 1.0); + + // The central part needs to be empty inside, so we define 6 new points for the subtraction of the central area + std::vector newHole(6); + newHole[0] = G4TwoVector(58.936*mm, 149.762*mm); + newHole[1] = G4TwoVector(100.23*mm, 125.921*mm); + newHole[2] = G4TwoVector(100.23*mm, -125.921*mm); + newHole[3] = G4TwoVector(58.936*mm, -149.762*mm); + newHole[4] = G4TwoVector(-159.166*mm, -23.841*mm); + newHole[5] = G4TwoVector(-159.166*mm, 23.841*mm); + + // Extrusion of the subtraction solid + auto *MyInnerShape = new G4ExtrudedSolid("MyInnerShape", newHole, 216*0.5*mm, G4TwoVector(0, 0), 1.0, G4TwoVector(0, 0), 1.0); + + // creation of the central part: subtract the subtraction solid from the central block + auto *SecondShieldside = new G4SubtractionSolid("SecondShieldside_sub",MyShape2,MyInnerShape,0,holepos); + auto *SecondShieldside_log = new G4LogicalVolume(SecondShieldside,Al,"SecondShieldside_log",0,0,0); + fSecondShieldside_phys = new G4PVPlacement( + 0, + G4ThreeVector(0,0,-1.178*mm), + SecondShieldside_log, + "SecondShieldside", + fExperimentalHall_log, + false, + 0); + + //-------------------------------------- top plate cover --------------------------------------- + G4ExtrudedSolid *MyShape3 = new G4ExtrudedSolid("MyShape3", newShape, 10.87*0.5*mm, G4TwoVector(0, 0), 1.0, G4TwoVector(0, 0), 1.0); + auto *MyHole2 = new G4Tubs("MyHole2", 0, 36.85*mm, 11*mm*0.5, 0*deg, 360*deg); + auto *SecondShieldtopPlate = new G4SubtractionSolid("SecondShieldtopPlate_sub",MyShape3,MyHole2,0,holepos); + auto *SecondShieldtopPlate_log = new G4LogicalVolume(SecondShieldtopPlate,Al,"SecondShieldtopPlate_log",0,0,0); + fSecondShieldtopPlate_phys = new G4PVPlacement( + 0, + G4ThreeVector(0,0,111.932*mm), + SecondShieldtopPlate_log, + "SecondShieldtopPlate", + fExperimentalHall_log, + false, + 0); + + //-------------------------------------- + auto *SecondShieldshield_topcyl = new G4Tubs("SecondShieldshield", 36.85*mm, 39*mm, 12*mm*0.5, 0*deg, 360*deg); + auto *SecondShieldshield_topcyl_log = new G4LogicalVolume(SecondShieldshield_topcyl,Al,"SecondShieldshield_topcyl_log",0,0,0); + fSecondShieldshield_topcyl_phys = new G4PVPlacement( + 0, + G4ThreeVector(0,0,123.367*mm), + SecondShieldshield_topcyl_log, + "SecondShieldshield_topcyl", + fExperimentalHall_log, + false, + 0); + + //------------------------------------------------------------------------------------------------------ + //------------------------------------- EXTERNAL ZONE ------------------------------------------- + + //------------------------------------------------------------------------------------------------------ + //---------------------------------------- Third thermal shield --------------------------------------------------- + G4double TopConeDOWNradius = 174.6*mm; + G4double TopConeUPradius = 93*mm; + G4double TopConeheight = 40*mm; + G4double SideHeight = 280*mm; + G4double ConeDOWNradius = 80*mm; + G4double Conethick = 0.4*mm; + G4double ConeUPradius = 174.6*mm; + G4double Coneheight = 40*mm; + + //--------------- + auto *ThirdShieldside = new G4Tubs("ThirdShieldside_tubs", TopConeDOWNradius, TopConeDOWNradius+Conethick, SideHeight*0.5, 0*deg, 360*deg); + G4LogicalVolume* ThirdShieldside_log = new G4LogicalVolume(ThirdShieldside,Al,"ThirdShieldside_log",0,0,0); + fThirdShieldside_phys = new G4PVPlacement( + 0, + G4ThreeVector(0,0,0), + ThirdShieldside_log, + "ThirdShieldside", + fExperimentalHall_log, + false, + 0); + + //------------------- + auto *ThirdShieldtopCone = new G4Cons("ThirdShieldtopCone_cons", TopConeDOWNradius,Conethick+TopConeDOWNradius,TopConeUPradius,TopConeUPradius+Conethick, TopConeheight*0.5, 0*deg, 360*deg); + auto *ThirdShieldtopCone_log = new G4LogicalVolume(ThirdShieldtopCone,Al,"ThirdShieldtopCone_log",0,0,0); + fThirdShieldtopCone_phys = new G4PVPlacement( + 0, + G4ThreeVector(0.,0.,(SideHeight+TopConeheight)*0.5), + ThirdShieldtopCone_log, + "ThirdShieldtopCone", + fExperimentalHall_log, + false, + 0); + + //------------------- + auto *ThirdShieldbotCone = new G4Cons("ThirdShieldbotCone_cons", ConeDOWNradius,Conethick+ConeDOWNradius,ConeUPradius,ConeUPradius+Conethick, Coneheight*0.5, 0*deg, 360*deg); + auto *ThirdShieldbotCone_log = new G4LogicalVolume(ThirdShieldbotCone,Al,"ThirdShieldbotCone_log",0,0,0); + fThirdShieldbotCone_phys = new G4PVPlacement( + 0, + G4ThreeVector(0.,0.,(-SideHeight-Coneheight)*0.5), + ThirdShieldbotCone_log, + "ThirdShieldbotCone", + fExperimentalHall_log, + false, + 0); + + //------------------- + auto *ThirdShieldbotPlate = new G4Tubs("ThirdShieldbotPlate_tubs", 0*mm, Conethick+ConeDOWNradius,Conethick*0.5, 0*deg, 360*deg); + auto *ThirdShieldbotPlate_log = new G4LogicalVolume(ThirdShieldbotPlate,Al,"ThirdShieldbotPlate_log",0,0,0); + fThirdShieldbotPlate_phys = new G4PVPlacement( + 0, + G4ThreeVector(0,0,(-SideHeight-Conethick)*0.5-Coneheight), + ThirdShieldbotPlate_log, + "ThirdShieldbotPlate", + fExperimentalHall_log, + false, + 0); + + //---------------------------------------------------------------------------------------------------------------- + //-------------------------------------------------- External layer of the Cryostat -------------------------------------------------- + //---------------------------------------------------------------------------------------------------------------- + G4double sideradius = 200*mm; + G4double midsidethick = 8.8*mm; + G4double midsideheigth = 120*mm; + auto *CryostatmidSide = new G4Tubs("CryostatmidSide_tubs", sideradius, sideradius+midsidethick, midsideheigth*0.5, 0*deg, 360*deg); + auto *CryostatmidSide_log = new G4LogicalVolume(CryostatmidSide,Al,"CryostatmidSide_log",0,0,0); + fCryostatmidSide_phys = new G4PVPlacement( + 0, + G4ThreeVector(0,0,0), + CryostatmidSide_log, + "CryostatmidSide", + fExperimentalHall_log, + false, + 0); + + //--------------- + G4double topsidethick = 6.5*mm; + G4double topsideheigth = 85*mm; + auto *CryostattopSide = new G4Tubs("CryostattopSide_tubs", sideradius, sideradius+topsidethick, topsideheigth*0.5, 0*deg, 360*deg); + auto *CryostattopSide_log = new G4LogicalVolume(CryostattopSide,Al,"CryostattopSide_log",0,0,0); + fCryostattopSide_phys = new G4PVPlacement( + 0, + G4ThreeVector(0,0,midsideheigth*0.5+topsideheigth*0.5), + CryostattopSide_log, + "CryostattopSide", + fExperimentalHall_log, + false, + 0); + + //------------------- + ConeUPradius = 97*mm; + Coneheight = 75*mm; + auto *CryostattopCone = new G4Cons("CryostattopCone_cons", sideradius,topsidethick+sideradius,ConeUPradius,ConeUPradius+topsidethick, Coneheight*0.5, 0*deg, 360*deg); + auto *CryostattopCone_log = new G4LogicalVolume(CryostattopCone,Al,"CryostattopCone_log",0,0,0); + fCryostattopCone_phys = new G4PVPlacement( + 0, + G4ThreeVector(0.,0.,midsideheigth*0.5+topsideheigth+Coneheight*0.5), // translation position + CryostattopCone_log, + "CryostattopCone", + fExperimentalHall_log, + false, + 0); + + //--------------- + G4double botsideheigth = 85*mm; + auto *CryostatbotSide = new G4Tubs("CryostatbotSide_tubs", sideradius, sideradius+topsidethick, botsideheigth*0.5, 0*deg, 360*deg); + auto *CryostatbotSide_log = new G4LogicalVolume(CryostatbotSide,Al,"CryostatbotSide_log",0,0,0); + fCryostatbotSide_phys = new G4PVPlacement( + 0, + G4ThreeVector(0,0,-midsideheigth*0.5-botsideheigth*0.5), + CryostatbotSide_log, + "CryostatbotSide", + fExperimentalHall_log, + false, + 0); + + //------------------- + ConeDOWNradius = 120*mm; + auto *CryostatbotCone = new G4Cons("CryostatbotCone_cons", ConeDOWNradius,topsidethick+ConeDOWNradius,sideradius,sideradius+topsidethick, Coneheight*0.5, 0*deg, 360*deg); + auto *CryostatbotCone_log = new G4LogicalVolume(CryostatbotCone,Al,"CryostatbotCone_log",0,0,0); + fCryostatbotCone_phys = new G4PVPlacement( + 0, + G4ThreeVector(0.,0.,-midsideheigth*0.5-botsideheigth-Coneheight*0.5), // translation position + CryostatbotCone_log, + "CryostatbotCone", + fExperimentalHall_log, + false, + 0); + + //--------------------- + auto *CryostatbotPlate = new G4Tubs("CryostatbotPlate_tubs", 0*mm, ConeDOWNradius, midsidethick*0.5, 0*deg, 360*deg); + auto *CryostatbotPlate_log = new G4LogicalVolume(CryostatbotPlate,Al,"CryostatbotPlate_log",0,0,0); + fCryostatbotPlate_phys = new G4PVPlacement( + 0, + G4ThreeVector(0,0,-midsideheigth*0.5-botsideheigth-Coneheight+midsidethick*0.5), // translation position + CryostatbotPlate_log, + "CryostatbotPlate", + fExperimentalHall_log, + false, + 0); + + //------------------------------------------------------------------------------------------------------ + //------------------------------------- radiation filter -------------------------------------------- + //------------------------------------------------------------------------------------------------------ + G4double halfhightOfAlFilter = 20*0.5*nm; + G4double mesh_thickness = 80*um; + G4double filtercarrierthickness = 5*mm; + G4double outerRadiusOfFilter = 128*0.5*mm; + G4double ZposFilter = 180*mm; + + auto *AlFilter = new G4Tubs("Filter", 0, outerRadiusOfFilter, halfhightOfAlFilter, 0.*deg, 360.*deg); + auto *AlFilter_log = new G4LogicalVolume(AlFilter,Al,"AlFilter_log",0,0,0); + fAlFilter_phys = new G4PVPlacement(nullptr,G4ThreeVector(0.,0.,ZposFilter), AlFilter_log, "AlFilter" ,fExperimentalHall_log,false,0); + + //------step limiter filter + AlFilter_log->SetUserLimits(fStepLimitAlfilta); + + //----- mesh: Nb + auto *Mesh = new G4Tubs("meshcage", 0, outerRadiusOfFilter+3.3*mm, mesh_thickness*0.5 , 0.*deg, 360.*deg); + fMesh_log = new G4LogicalVolume(Mesh,vacuum,"Mesh_log"); //vacuum, it's the mother volume and not the grid + G4double meshPos_z = ZposFilter-halfhightOfAlFilter-mesh_thickness*0.5; + fMesh_phys = new G4PVPlacement(nullptr, G4ThreeVector(DetPos_x,DetPos_y,meshPos_z),fMesh_log,"meshphys",fExperimentalHall_log, false, 0); + + //////// mesh pixels (grid support) + G4double half_x1 = 4827/2.*um; + G4double half_x2 = 4827/2.*um; + G4double half_x3 = 4880/2.*um; + G4double half_x4 = 4880/2.*um; + G4double half_y1 = 80/2.*um; + G4double half_y2 = 80/2.*um; + G4double dZ = 26.50/2.*um; + + G4double L1 = half_x1; + G4double L3 = dZ; + + // create the trapezoids for the element of the grid + auto *trapezoid_A = new G4Trap("Trapezoid_A",dZ,0,0,half_y1,half_x1,half_x2,0,half_y2,half_x3,half_x4,0); + auto *trapezoid_B = new G4Trap("Trapezoid_B",dZ,0,0,half_y1,half_x1,half_x2,0,half_y2,half_x3,half_x4,0); + auto *trapezoid_C = new G4Trap("Trapezoid_C",dZ,0,0,half_y1,half_x1,half_x2,0,half_y2,half_x3,half_x4,0); + auto *trapezoid_D = new G4Trap("Trapezoid_D",dZ,0,0,half_y1,half_x1,half_x2,0,half_y2,half_x3,half_x4,0); + + // create their rotation matrices and placement vectors + auto *rotmat_A = new G4RotationMatrix(); + auto *rotmat_B = new G4RotationMatrix(); + auto *rotmat_C = new G4RotationMatrix(); + auto *rotmat_D = new G4RotationMatrix(); + rotmat_A->rotateX(90.*deg); + rotmat_B->rotateX(90.*deg); + rotmat_B->rotateY(-90.*deg); + rotmat_C->rotateX(270.*deg); + rotmat_D->rotateX(90.*deg); + rotmat_D->rotateY(90.*deg); + G4ThreeVector pos_trap_A = G4ThreeVector(0,L1+L3,meshPos_z); + G4ThreeVector pos_trap_B = G4ThreeVector(L1+L3,0,meshPos_z); + G4ThreeVector pos_trap_C = G4ThreeVector(0,-L1-L3,meshPos_z); + G4ThreeVector pos_trap_D = G4ThreeVector(-L1-L3,0,meshPos_z); + + //Test: create their logical and physical volumes + fTrapezoid_A_log = new G4LogicalVolume(trapezoid_A,SS,"trapezoid_A_log"); + fTrapezoid_B_log = new G4LogicalVolume(trapezoid_B,SS,"trapezoid_B_log"); + fTrapezoid_C_log = new G4LogicalVolume(trapezoid_C,SS,"trapezoid_C_log"); + fTrapezoid_D_log = new G4LogicalVolume(trapezoid_D,SS,"trapezoid_D_log"); + + G4ThreeVector pos_munion_base = G4ThreeVector(0,0,0); + auto *rotmat_final = new G4RotationMatrix(); + rotmat_final->rotateX(0.*deg); + G4Transform3D transf_base = G4Transform3D(*rotmat_final, pos_munion_base); + + G4int index = 0; + G4double coordx = 0; + G4double coordy = 0; + const G4int num = 13; + G4double distance = 0; + + G4ThreeVector pos_base = G4ThreeVector(0,0,0); + G4ThreeVector posA = G4ThreeVector(0,0,0); // the z coord is 0 because it will refer to Mesh_log + G4ThreeVector posB = G4ThreeVector(0,0,0); + G4ThreeVector posC = G4ThreeVector(0,0,0); + G4ThreeVector posD = G4ThreeVector(0,0,0); + + std::vector phys_array; + for (int i=-num; i<=num; i++) + { + for (int j=-num; j<=num; j++) + { + std::string sA = "trapezoidA_"; + std::string sB = "trapezoidB_"; + std::string sC = "trapezoidC_"; + std::string sD = "trapezoidD_"; + + std::string index_str = std::to_string(index); + sA += index_str; + sB += index_str; + sC += index_str; + sD += index_str; + + coordx = i*half_x3*2; + coordy = j*half_x3*2; + + distance = std::sqrt(coordx*coordx + coordy*coordy); + + if (distance < outerRadiusOfFilter) + { + pos_base = G4ThreeVector(coordx,coordy,meshPos_z); + posA = G4ThreeVector(coordx,coordy+L1+L3,0); // the z coord is 0 because it will refer to fMesh_log + posB = G4ThreeVector(coordx+L1+L3,coordy,0); + posC = G4ThreeVector(coordx,coordy-L1-L3,0); + posD = G4ThreeVector(coordx-L1-L3,coordy,0); + + fTrapezoid_A_phys = new G4PVPlacement(rotmat_A,posA,fTrapezoid_A_log,sA,fMesh_log, false, 0); + fTrapezoid_B_phys = new G4PVPlacement(rotmat_B,posB,fTrapezoid_B_log,sB,fMesh_log, false, 0); + fTrapezoid_C_phys = new G4PVPlacement(rotmat_C,posC,fTrapezoid_C_log,sC,fMesh_log, false, 0); + fTrapezoid_D_phys = new G4PVPlacement(rotmat_D,posD,fTrapezoid_D_log,sD,fMesh_log, false, 0); + + phys_array.push_back(fTrapezoid_A_phys); + phys_array.push_back(fTrapezoid_B_phys); + phys_array.push_back(fTrapezoid_C_phys); + phys_array.push_back(fTrapezoid_D_phys); + index += 1; + } + } + } + + auto *filtercarrier = new G4Tubs("filtercarrier_tubs", outerRadiusOfFilter,outerRadiusOfFilter+3.85*mm ,filtercarrierthickness*0.5,0.*deg,360.*deg); + auto *filtercarrier_log = new G4LogicalVolume(filtercarrier,Al,"filtercarrier_log",0,0,0); + fFiltercarrier_phys = new G4PVPlacement(nullptr,G4ThreeVector(0.,0.,meshPos_z+mesh_thickness*0.5+filtercarrierthickness*0.5),filtercarrier_log,"filtercarrier",fExperimentalHall_log,false,0); + + //------------------------------------------------------------------------------------------------------ + //---------------------------------------- aperture cylinder --------------------------------------- + //------------------------------------------------------------------------------------------------------ + //300K piece + //G4double ACinnerDOWNradius = 106*mm; + G4double ACinnerUPradius = 67.8644*mm; + G4double ACthick = 1*mm; + G4double ACheight = midsideheigth*0.5+topsideheigth+Coneheight-ZposFilter-filtercarrierthickness; + + //ZposFilter + auto *AC = new G4Cons("AC_cons",ACinnerUPradius-ACthick,ACinnerUPradius,ConeUPradius-ACthick,ConeUPradius,ACheight*0.5,0*deg,360*deg); + auto *AC_log = new G4LogicalVolume(AC,Ti,"AC_log",0,0,0); + fAC_phys = new G4PVPlacement( + 0, + G4ThreeVector(0.,0.,midsideheigth*0.5+topsideheigth+Coneheight-ACheight*0.5), + AC_log, + "AC", + fExperimentalHall_log, + false, + 0); + + //-----inner coating + auto *ACIC = new G4Cons("ACIC_cons",ACinnerUPradius-ACthick-5*um,ACinnerUPradius-ACthick,ConeUPradius-ACthick-5*um,ConeUPradius-ACthick,ACheight*0.5,0*deg,360*deg); + auto *ACIC_log = new G4LogicalVolume(ACIC,Au,"ACIC_log",0,0,0); + fACIC_phys = new G4PVPlacement( + 0, + G4ThreeVector(0.,0.,midsideheigth*0.5+topsideheigth+Coneheight-ACheight*0.5), + ACIC_log, + "ACIC", + fExperimentalHall_log, + false, + 0); + + //------------------------------------------------------------------------------------------------------ + //------------------------------ The Al sphere representing the spacecraft ---------------------- + //------------------------------------------------------------------------------------------------------ + auto *sphere = new G4Sphere("sphere_sphere",26*cm,27*cm,0.,twopi,0.,pi); + fSphere_log = new G4LogicalVolume(sphere,Al,"sphere_log"); + fSphere_phys = new G4PVPlacement(nullptr,G4ThreeVector(0.,0.,0*mm),fSphere_log,"sphere",fExperimentalHall_log,false,0); + + //------------------------------------------------------------------------------------------------------ + //--------------------- regions assignment: closer to the detector, lower the Ecut -------------- + //------------------------------------------------------------------------------------------------------ + // everything directly seen by the detector + InnerRegion->AddRootLogicalVolume(fElement_log); + InnerRegion->AddRootLogicalVolume(fDetector_log); + InnerRegion->AddRootLogicalVolume(fBipxl_log); + InnerRegion->AddRootLogicalVolume(fMembranepxl_log); + InnerRegion->AddRootLogicalVolume(fGridpiece_log); + InnerRegion->AddRootLogicalVolume(fWafer_log); + InnerRegion->AddRootLogicalVolume(fACDpxl_log); + InnerRegion->AddRootLogicalVolume(AlFilter_log); // it was in the intermediate region + InnerRegion->AddRootLogicalVolume(ACIC_log); + + fWorld_phys = fExperimentalHall_phys; + } + else + { + G4cout << "Build geometry from GDML file: " << fReadFile << G4endl; + G4VPhysicalVolume* fWorldPhysVol; + fParser.Read(fReadFile); + fWorldPhysVol = fParser.GetWorldVolume(); + fWorld_log = fWorldPhysVol->GetLogicalVolume(); + G4int num_volumes = 9; + auto *inner_volumes = new G4String[num_volumes]; + inner_volumes[0] = "element_log"; inner_volumes[1] = "Detector_log"; inner_volumes[2] = "Bipxl_log"; inner_volumes[3] = "membranepxl_log"; + inner_volumes[4] = "gridpiece_log"; inner_volumes[5] = "wafer_log"; inner_volumes[6] = "ACDpxl_log"; inner_volumes[7] = "AlFilter_log"; + inner_volumes[8] = "ACIC_log"; + + G4cout << "Adding volumes to the InnerRegion" << G4endl; + // Add volumes to the InnerRegion + for (G4int j = 0; j <= num_volumes; j++) + { + for (G4int i = 0; i < (G4int)fWorld_log->GetNoDaughters(); i++) + { + if (fWorld_log->GetDaughter(i)->GetLogicalVolume()->GetName() == inner_volumes[j]) + { + InnerRegion->AddRootLogicalVolume(fWorld_log->GetDaughter(i)->GetLogicalVolume()); + G4cout << "Added: " << fWorld_log->GetDaughter(i)->GetLogicalVolume()->GetName() << G4endl; + } + } + } + + // Read volume names + auto *pvs = G4PhysicalVolumeStore::GetInstance(); + if (pvs == nullptr) + { + G4cout << "PhysicalVolumeStore not accessible" << G4endl; + } + else + { + G4cout << "Volumes imported in the PhysicalVolumeStore. " << G4endl; + G4int length = 0; + length = pvs->size(); + for (G4int i= 0; iGetName(); + } + } + fWorld_phys = fWorldPhysVol; + } + + // Set production cuts + G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(200*eV, 1000*GeV); + auto* InnerCuts = new G4ProductionCuts; + InnerCuts->SetProductionCut(1*mm); + InnerRegion->SetProductionCuts(InnerCuts); + + return fWorld_phys; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XrayTESdetDetectorConstruction::SetMaxStep(G4double maxStep) +{ + if ((fStepLimitAlfilta != nullptr)&&(maxStep>0.)){ fStepLimitAlfilta->SetMaxAllowedStep(maxStep); } + if ((fStepLimitPolyfilta != nullptr)&&(maxStep>0.)){ fStepLimitPolyfilta->SetMaxAllowedStep(maxStep); } + if ((fStepLimitmembrane != nullptr)&&(maxStep>0.)){ fStepLimitmembrane->SetMaxAllowedStep(maxStep); } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XrayTESdetDetectorConstruction::SetReadFile(G4String input_geometry) +{ + fReadFile = std::move(input_geometry); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/xray_TESdetector/src/XrayTESdetDetectorMessenger.cc b/examples/advanced/xray_TESdetector/src/XrayTESdetDetectorMessenger.cc new file mode 100644 index 00000000000..6a08a8f2e0d --- /dev/null +++ b/examples/advanced/xray_TESdetector/src/XrayTESdetDetectorMessenger.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. * +// ******************************************************************** +// +// +/// \file XrayTESdetDetectorMessenger.cc +/// \brief Implementation of the DetectorMessenger class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "XrayTESdetDetectorMessenger.hh" +#include "XrayTESdetDetectorConstruction.hh" + +// #include "G4UIdirectory.hh" +#include "G4UIcommand.hh" +// #include "G4UIparameter.hh" +#include "G4UIcmdWithAString.hh" +// #include "G4UIcmdWithoutParameter.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +XrayTESdetDetectorMessenger::XrayTESdetDetectorMessenger(XrayTESdetDetectorConstruction *Det) : + fpDetector(Det), fTheReadCommand(nullptr) +{ + fTheReadCommand = new G4UIcmdWithAString("/XrayTESdet/det/readGDML", this); + fTheReadCommand ->SetGuidance("READ GDML file with given name"); + fTheReadCommand ->SetParameterName("FileRead", false); + fTheReadCommand ->SetDefaultValue("xray_TESdetector.gdml"); + fTheReadCommand ->AvailableForStates(G4State_PreInit); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +XrayTESdetDetectorMessenger::~XrayTESdetDetectorMessenger() +{ + delete fTheReadCommand; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XrayTESdetDetectorMessenger::SetNewValue(G4UIcommand* command, G4String newValue) +{ + if (command == fTheReadCommand) fpDetector->SetReadFile(newValue); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/xray_TESdetector/src/XrayTESdetHistoManager.cc b/examples/advanced/xray_TESdetector/src/XrayTESdetHistoManager.cc new file mode 100644 index 00000000000..1dc951d5901 --- /dev/null +++ b/examples/advanced/xray_TESdetector/src/XrayTESdetHistoManager.cc @@ -0,0 +1,78 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +/// \file XrayTESdetHistoManager.cc +/// \brief Implementation of the HistoManager class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "XrayTESdetHistoManager.hh" +#include "G4AnalysisManager.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +XrayTESdetHistoManager::XrayTESdetHistoManager() + : fFileName("example") +{ + fBook(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XrayTESdetHistoManager::fBook() +{ + // Create or get analysis manager + auto analysisManager = G4AnalysisManager::Instance(); + analysisManager->SetNtupleMerging(true); + + // Creating Ntuple + int fNtupleID = analysisManager->CreateNtuple("TES_Tuple", "detectorPixelInfo"); + analysisManager->CreateNtupleIColumn("eventID"); + analysisManager->CreateNtupleSColumn("vol_name"); + analysisManager->CreateNtupleIColumn("trackID"); + analysisManager->CreateNtupleDColumn("x"); + analysisManager->CreateNtupleDColumn("y"); + analysisManager->CreateNtupleDColumn("z"); + analysisManager->CreateNtupleDColumn("theta"); + analysisManager->CreateNtupleDColumn("phi"); + analysisManager->CreateNtupleIColumn("parentID"); + analysisManager->CreateNtupleIColumn("pixel_number"); + analysisManager->CreateNtupleDColumn("step_energy_dep"); + analysisManager->CreateNtupleIColumn("step_number"); + analysisManager->CreateNtupleDColumn("init_kinetic_energy"); + analysisManager->CreateNtupleDColumn("kinetic_energy"); + analysisManager->CreateNtupleSColumn("particle_name"); + analysisManager->CreateNtupleSColumn("pre_step_name"); + analysisManager->CreateNtupleSColumn("post_step_name"); + analysisManager->CreateNtupleSColumn("creator_proc_name"); + analysisManager->FinishNtuple(fNtupleID); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/xray_TESdetector/src/XrayTESdetPhysicsList.cc b/examples/advanced/xray_TESdetector/src/XrayTESdetPhysicsList.cc new file mode 100644 index 00000000000..df58ba14bd7 --- /dev/null +++ b/examples/advanced/xray_TESdetector/src/XrayTESdetPhysicsList.cc @@ -0,0 +1,247 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +/// \file XrayTESdetPhysicsList.cc +/// \brief Implementation of the PhysicsList class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "G4VUserPhysicsList.hh" +#include "XrayTESdetPhysicsList.hh" +#include "XrayTESdetPhysicsListMessenger.hh" + +#include "G4RadioactiveDecayPhysics.hh" +#include "G4DecayPhysics.hh" +#include "G4EmStandardPhysics.hh" +#include "G4EmStandardPhysics_option1.hh" +#include "G4EmStandardPhysics_option2.hh" +#include "G4EmStandardPhysics_option3.hh" +#include "G4EmStandardPhysics_option4.hh" +#include "G4EmStandardPhysicsSS.hh" + +#include "G4EmStandardPhysics_SpacePhysics.hh" +#include "G4EmLivermorePhysics.hh" +#include "G4EmPenelopePhysics.hh" +#include "G4HadronElasticPhysics.hh" +#include "G4HadronElasticPhysicsXS.hh" +#include "G4HadronElasticPhysicsHP.hh" +#include "G4ChargeExchangePhysics.hh" +#include "G4NeutronTrackingCut.hh" +#include "G4NeutronCrossSectionXS.hh" +#include "G4StoppingPhysics.hh" +#include "G4IonBinaryCascadePhysics.hh" +#include "G4IonPhysics.hh" +#include "G4EmExtraPhysics.hh" + +#include "G4HadronPhysicsFTFP_BERT.hh" +#include "G4HadronPhysicsFTFP_BERT_HP.hh" +#include "G4HadronPhysicsFTF_BIC.hh" +#include "G4HadronInelasticQBBC.hh" +#include "G4HadronPhysicsQGSP_BERT.hh" +#include "G4HadronPhysicsQGSP_BERT_HP.hh" +#include "G4HadronPhysicsQGSP_BIC.hh" +#include "G4HadronPhysicsQGSP_BIC_HP.hh" +#include "G4HadronPhysicsQGSP_FTFP_BERT.hh" +#include "G4HadronPhysicsQGS_BIC.hh" + +#include "G4LossTableManager.hh" +#include "G4ProcessManager.hh" +#include "G4ParticleTypes.hh" +#include "G4ParticleTable.hh" +#include "G4Gamma.hh" +#include "G4Electron.hh" +#include "G4Positron.hh" +#include "G4Proton.hh" + +#include "G4Region.hh" +#include "G4RegionStore.hh" +#include "G4SystemOfUnits.hh" +#include "G4PhysicalConstants.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +XrayTESdetPhysicsList::XrayTESdetPhysicsList() : fMessenger(nullptr), fEmPhysicsList(nullptr), fParticleList(nullptr) +{ + fMessenger = new XrayTESdetPhysicsListMessenger(this); + G4LossTableManager::Instance(); + verboseLevel = 1; + + // Particles + G4cout << "1 - Defining DecayPhysics" << G4endl; + fParticleList = new G4DecayPhysics("decays"); + + // Radioactive decay + G4cout << "2 - Defining RadioactiveDecayPhysics" << G4endl; + RegisterPhysics(new G4RadioactiveDecayPhysics()); + + // EM physics + G4cout << "3 - Defining Standard em" << G4endl; + fEmName = G4String("local"); + //fEmPhysicsList = new PhysListEmStandard(fEmName); + fEmPhysicsList = new G4EmStandardPhysics(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +XrayTESdetPhysicsList::~XrayTESdetPhysicsList() +{ + delete fParticleList; + delete fEmPhysicsList; + delete fMessenger; + for(size_t i=0; iConstructParticle(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void XrayTESdetPhysicsList::ConstructProcess() +{ + AddTransportation(); + fEmPhysicsList->ConstructProcess(); + fParticleList->ConstructProcess(); + for(size_t i=0; iConstructProcess(); + } + + // Em options + G4cout << "4 - Defining em options" << G4endl; + G4EmParameters* param = G4EmParameters::Instance(); + param->SetDeexActiveRegion("InnerRegion", true, true, true); + + param->SetAuger(true); + param->SetAugerCascade(false); + param->SetFluo(true); + param->SetPixe(true); + param->SetDeexcitationIgnoreCut(false); + + param->SetMuHadLateralDisplacement(false); + param->SetBremsstrahlungTh(10*TeV); + param->Dump(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void XrayTESdetPhysicsList::AddPhysicsList(const G4String& name) +{ + if (verboseLevel>0) + { + G4cout << "PhysicsList::AddPhysicsList: <" << name << ">" << G4endl; + } + + if (name == fEmName) + { + return; + } + + if (name == "SpacePhysics") + { + delete fEmPhysicsList; + G4cout << "X - Defining SpacePhysics, no hadronic part" << G4endl; + fEmName = name; + fEmPhysicsList = new G4EmStandardPhysics_SpacePhysics(); + } + else if (name == "SpacePhysics_QBBC") + { + delete fEmPhysicsList; + G4cout << "X - Defining SpacePhysics" << G4endl; + fEmName = name; + fEmPhysicsList = new G4EmStandardPhysics_SpacePhysics(); + fSetBuilderList1(false); + fHadronPhys.push_back(new G4HadronInelasticQBBC(verboseLevel)); + } + else if (name == "opt4_QGSP") + { + delete fEmPhysicsList; + fEmName = name; + G4cout << "X - Defining opt4+QGSP no HP physics" << G4endl; + fEmPhysicsList = new G4EmStandardPhysics_option4(); + fSetBuilderList1(false); + fHadronPhys.push_back( new G4HadronPhysicsQGSP_BERT_HP()); + } + else if (name == "opt4_QBBC") + { + delete fEmPhysicsList; + fEmName = name; + G4cout << "X - Defining opt4+QBBC physics" << G4endl; + fEmPhysicsList = new G4EmStandardPhysics_option4(); + fSetBuilderList1(false); + fHadronPhys.push_back(new G4HadronInelasticQBBC(verboseLevel)); + } + else if (name == "emstandard_opt4") + { + delete fEmPhysicsList; + G4cout << "X - Defining opt4" << G4endl; + fEmName = name; + fEmPhysicsList = new G4EmStandardPhysics_option4(); + } + else if (name == "emstandardSS") + { + delete fEmPhysicsList; + G4cout << "X - Defining SS" << G4endl; + fEmName = name; + fEmPhysicsList = new G4EmStandardPhysicsSS(); + } + else + { + G4cout << "PhysicsList::AddPhysicsList: <" << name << ">" + << " is not defined" + << G4endl; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void XrayTESdetPhysicsList::fSetBuilderList1(G4bool flagHP) +{ + fHadronPhys.push_back( new G4EmExtraPhysics(verboseLevel)); + if(flagHP) + { + fHadronPhys.push_back( new G4HadronElasticPhysicsHP(verboseLevel)); + } + else + { + fHadronPhys.push_back( new G4HadronElasticPhysics(verboseLevel)); + } + fHadronPhys.push_back(new G4StoppingPhysics(verboseLevel)); + fHadronPhys.push_back(new G4IonPhysics(verboseLevel)); + fHadronPhys.push_back(new G4NeutronTrackingCut(verboseLevel)); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/xray_TESdetector/src/XrayTESdetPhysicsListMessenger.cc b/examples/advanced/xray_TESdetector/src/XrayTESdetPhysicsListMessenger.cc new file mode 100644 index 00000000000..77c9019cd60 --- /dev/null +++ b/examples/advanced/xray_TESdetector/src/XrayTESdetPhysicsListMessenger.cc @@ -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. * +// ******************************************************************** +// +// +/// \file XrayTESdetPhysicsListMessenger.cc +/// \brief Implementation of the PhysicsListMessenger class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "XrayTESdetPhysicsListMessenger.hh" +#include "XrayTESdetPhysicsList.hh" +#include "G4UIdirectory.hh" +#include "G4UIcmdWithAString.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +XrayTESdetPhysicsListMessenger::XrayTESdetPhysicsListMessenger(XrayTESdetPhysicsList* pPhys) +: fPhysicsList(pPhys),fPhysDir(nullptr),fListCmd(nullptr) +{ + fPhysDir = new G4UIdirectory("/testem/phys/"); + fPhysDir->SetGuidance("physics list commands"); + + fListCmd = new G4UIcmdWithAString("/testem/phys/addPhysics", this); + fListCmd->SetGuidance("Add modula physics list."); + fListCmd->SetParameterName("PList", false); + fListCmd->AvailableForStates(G4State_PreInit); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +XrayTESdetPhysicsListMessenger::~XrayTESdetPhysicsListMessenger() +{ + delete fListCmd; + delete fPhysDir; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XrayTESdetPhysicsListMessenger::SetNewValue(G4UIcommand* command, G4String newValue) +{ + if(command == fListCmd) + { + fPhysicsList->AddPhysicsList(newValue); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/xray_TESdetector/src/XrayTESdetPrimaryGeneratorAction.cc b/examples/advanced/xray_TESdetector/src/XrayTESdetPrimaryGeneratorAction.cc new file mode 100644 index 00000000000..6ccf9763690 --- /dev/null +++ b/examples/advanced/xray_TESdetector/src/XrayTESdetPrimaryGeneratorAction.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. * +// ******************************************************************** +// +// +/// \file XrayTESdetPrimaryGeneratorAction.cc +/// \brief Implementation of the PrimaryGeneratorAction class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "XrayTESdetPrimaryGeneratorAction.hh" +#include "XrayTESdetDetectorConstruction.hh" + +#include "G4Event.hh" +#include "G4ParticleGun.hh" +#include "G4ThreeVector.hh" +#include "G4ParticleTable.hh" +#include "G4ParticleDefinition.hh" +#include "Randomize.hh" +#include "globals.hh" +#include "G4NistManager.hh" +#include "G4SystemOfUnits.hh" +#include "G4PhysicalConstants.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +XrayTESdetPrimaryGeneratorAction::XrayTESdetPrimaryGeneratorAction() +{ + G4int n_particle = 1; + fParticleGun = new G4ParticleGun(n_particle); + G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable(); + G4String particleName; + + // setting particle type + fParticleGun->SetParticleDefinition(particleTable->FindParticle(particleName="proton")); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +XrayTESdetPrimaryGeneratorAction::~XrayTESdetPrimaryGeneratorAction() +{ + delete fParticleGun; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XrayTESdetPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) +{ + G4double ax; + G4double ay; + G4double az; + + G4double bx; + G4double by; + G4double bz; + + G4double vx; + G4double vy; + G4double vz; + + G4double energy = 0; + G4double u; + G4double u1; + + G4double theta0; + G4double phi0; + G4double theta1; + G4double phi1; + + G4double ene; + G4double flux; + G4double r; + + // Radius to shot particles + r = 27*cm; + + // Proton flux @L2 (Pamela2009), in p/cm2/s/sr [10 MeV - 10 GeV] = 0.407 + G4double phi = 0.379; + G4double tr = 0.938; + G4double T; + + while (true) + { + u = G4UniformRand(); + u1 = 0.268*G4UniformRand(); //max of the flux, in particles/cm2-s-GeV-sr + ene = 10.*MeV + u*100000.*MeV; + T = ene*0.001; + flux = 1.9*std::pow(((T + phi)*(T + phi + 2*tr)), -1.39)*T*(T + 2*tr)/((1 + 0.4866*std::pow(((T + phi)*(T + phi + 2*tr)),-1.255))*(T + phi)*(T + phi + 2*tr)); + if (u1 <= flux) + { + energy = ene; + break; + } + } + + theta0 = std::acos(1. - 2.*G4UniformRand()); + theta1 = std::acos(1. - 2.*G4UniformRand()); + phi0 = twopi*G4UniformRand(); + phi1 = twopi*G4UniformRand(); + ax = r*std::sin(theta0)*std::cos(phi0); + ay = r*std::sin(theta0)*std::sin(phi0); + az = r*std::cos(theta0) + 80*mm; + + bx = r*std::sin(theta1)*std::cos(phi1); + by = r*std::sin(theta1)*std::sin(phi1); + bz = r*std::cos(theta1) + 80*mm; + vx = bx - ax; + vy = by - ay; + vz = bz - az; + + fParticleGun->SetParticleEnergy(energy); + fParticleGun->SetParticlePosition(G4ThreeVector(ax, ay, az)); + fParticleGun->SetParticleMomentumDirection(G4ThreeVector(vx,vy,vz)); + fParticleGun->GeneratePrimaryVertex(anEvent); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/xray_TESdetector/src/XrayTESdetRunAction.cc b/examples/advanced/xray_TESdetector/src/XrayTESdetRunAction.cc new file mode 100644 index 00000000000..3dacecc8882 --- /dev/null +++ b/examples/advanced/xray_TESdetector/src/XrayTESdetRunAction.cc @@ -0,0 +1,85 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +/// \file XrayTESdetRunAction.cc +/// \brief Implementation of the RunAction class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "XrayTESdetRunAction.hh" +#include "XrayTESdetHistoManager.hh" +#include "G4Run.hh" +#include "G4EmCalculator.hh" +#include "G4EmParameters.hh" +#include "G4UnitsTable.hh" +#include "G4SystemOfUnits.hh" +#include "Randomize.hh" + +#include "G4AnalysisManager.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +XrayTESdetRunAction::XrayTESdetRunAction() : fHistoManager(nullptr) +{ + // Book predefined histograms + fHistoManager = new XrayTESdetHistoManager(); + auto analysisManager = G4AnalysisManager::Instance(); + analysisManager->SetVerboseLevel(1); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +XrayTESdetRunAction::~XrayTESdetRunAction() +{ + delete fHistoManager; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XrayTESdetRunAction::BeginOfRunAction(const G4Run*) +{ + // Open the analysisManager instance + auto analysisManager = G4AnalysisManager::Instance(); + + // set the name via the macro file + analysisManager->OpenFile(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XrayTESdetRunAction::EndOfRunAction(const G4Run*) +{ + // save histograms + auto analysisManager = G4AnalysisManager::Instance(); + analysisManager->Write(); + analysisManager->CloseFile(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/xray_TESdetector/src/XrayTESdetSteppingAction.cc b/examples/advanced/xray_TESdetector/src/XrayTESdetSteppingAction.cc new file mode 100644 index 00000000000..b8ba6472f6d --- /dev/null +++ b/examples/advanced/xray_TESdetector/src/XrayTESdetSteppingAction.cc @@ -0,0 +1,207 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +/// \file XrayTESdetSteppingAction.cc +/// \brief Implementation of the SteppingAction class +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#include "XrayTESdetSteppingAction.hh" +#include "G4AnalysisManager.hh" + +#include "G4SteppingManager.hh" +#include "G4RunManager.hh" +#include "G4SystemOfUnits.hh" +#include "G4PhysicalConstants.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4String clean_name (const G4String& vol_name) +{ + G4String cleaned_name = ""; + + // Search if the vol_name contains one of the following part + if (((std::string)vol_name).find("Bipxl") != std::string::npos) + cleaned_name = "Bipxl"; + if (((std::string)vol_name).find("membrane") != std::string::npos) + cleaned_name = "membrane"; + if (((std::string)vol_name).find("gridpiece") != std::string::npos) + cleaned_name = "gridpiece"; + if (((std::string)vol_name).find("trapezoid") != std::string::npos) + cleaned_name = "Mesh"; + if (cleaned_name == "") cleaned_name = vol_name; + return cleaned_name; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XrayTESdetSteppingAction::UserSteppingAction(const G4Step* step) +{ + // Define quantities to use in the + G4RunManager *rm = G4RunManager::GetRunManager(); + auto analysisManager = G4AnalysisManager::Instance(); + + G4int eventID = rm->GetCurrentEvent()->GetEventID(); + G4Track* track = step->GetTrack(); + G4StepPoint* pre_step_point = step->GetPreStepPoint(); + G4int parentID = track->GetParentID(); + G4int trackID = track->GetTrackID(); + const G4String& vol_name = track->GetVolume()->GetName(); + G4String mother_name = ""; + G4double init_kinetic_energy = 0; + G4double kinetic_energy = track->GetKineticEnergy(); + G4double pre_kinetic_energy = pre_step_point->GetKineticEnergy(); + const G4String& particle_name = track->GetParticleDefinition()->GetParticleName(); + const G4VProcess* pre_step_proc = pre_step_point->GetProcessDefinedStep(); + const G4VProcess* post_step_proc = pre_step_point->GetProcessDefinedStep(); + + bool proceed = false; + G4String pre_step_name_s = "Undefined"; + G4String post_step_name_s = "Undefined"; + G4String creator_process_name = "Undefined"; + G4String init_creator_process = "Undefined"; + const G4String& pre_step_name = pre_step_name_s; + const G4String& post_step_name = post_step_name_s; + + if (track->GetCreatorProcess() != nullptr) + { + creator_process_name = track->GetCreatorProcess()->GetProcessName(); + } + + if (pre_step_proc != nullptr) + { + pre_step_name_s = pre_step_proc->GetProcessName(); + } + + if (post_step_proc != nullptr) + { + post_step_name_s = post_step_proc->GetProcessName(); + } + + // Saves the first energy of the secondaries + if (eventID != fPrev_eventID) + { + fInit_energy.clear(); + fCreator_proc.clear(); + } + + G4int current_step_number = -1; + current_step_number = track->GetCurrentStepNumber(); + if (current_step_number != -1) + { + if (current_step_number == 1 && parentID == 0) + { + proceed = true; + fInit_energy.insert(std::pair(trackID, pre_kinetic_energy)); + fCreator_proc.insert(std::pair(trackID, creator_process_name)); + pre_step_name_s = "InitStep"; + } + } + + // Fill the map for the secondaries + if (trackID > 1) + { + // First value for each trackIDs; this serves to keep it untile the eventID changes. + if (fInit_energy.count((int)trackID) == 0) + { + fInit_energy.insert(std::pair(trackID, pre_kinetic_energy)); + fCreator_proc.insert(std::pair(trackID, creator_process_name)); + } + } + + // Exclude the world volume, which has no mother volume + if (((std::string)vol_name).find("expHall") == std::string::npos) + { + if (track->GetVolume() != nullptr) + { + if (track->GetVolume()->GetMotherLogical() != nullptr) + { + mother_name = track->GetVolume()->GetMotherLogical()->GetName(); + } + } + if (((std::string)mother_name).find("Detector_log") != std::string::npos || ((std::string)mother_name).find("element_log") != std::string::npos) + { + proceed = true; + } + } + + init_kinetic_energy = fInit_energy[(int)trackID]; + init_creator_process = fCreator_proc[trackID]; + + G4String cleaned_name = ""; + cleaned_name = clean_name(vol_name); + + // Saves on tuple + if (proceed) + { + G4double x = pre_step_point->GetPosition().x(); + G4double y = pre_step_point->GetPosition().y(); + G4double z = pre_step_point->GetPosition().z(); + G4ThreeVector direction = pre_step_point->GetMomentum(); + G4double theta = direction.theta(); + G4double phi = direction.phi(); + G4int pixel_number = track->GetVolume()->GetCopyNo(); + G4int def_replica_number = -999; // default value, to be discarded during the analysis + G4int step_number = track->GetCurrentStepNumber(); + G4double step_energy_dep = step->GetTotalEnergyDeposit(); + + // Fill tuple + analysisManager->FillNtupleIColumn(0, eventID); + analysisManager->FillNtupleSColumn(1, cleaned_name); + analysisManager->FillNtupleIColumn(2, trackID); + analysisManager->FillNtupleDColumn(3, x); + analysisManager->FillNtupleDColumn(4, y); + analysisManager->FillNtupleDColumn(5, z); + analysisManager->FillNtupleDColumn(6, theta); + analysisManager->FillNtupleDColumn(7, phi); + analysisManager->FillNtupleIColumn(8, parentID); + if (((std::string)vol_name).find("Bipxl") != std::string::npos) + { + analysisManager->FillNtupleIColumn(9, pixel_number); + } + else + { + analysisManager->FillNtupleIColumn(9, def_replica_number); + } + analysisManager->FillNtupleDColumn(10, step_energy_dep); + analysisManager->FillNtupleIColumn(11, step_number); + analysisManager->FillNtupleDColumn(12, init_kinetic_energy); + analysisManager->FillNtupleDColumn(13, kinetic_energy); + analysisManager->FillNtupleSColumn(14, particle_name); + analysisManager->FillNtupleSColumn(15, pre_step_name); + analysisManager->FillNtupleSColumn(16, post_step_name); + analysisManager->FillNtupleSColumn(17, init_creator_process); + analysisManager->AddNtupleRow(0); + } + fPrev_eventID = eventID; + fPrev_trackID = trackID; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/xray_TESdetector/vis.mac b/examples/advanced/xray_TESdetector/vis.mac new file mode 100644 index 00000000000..3f58a13a60e --- /dev/null +++ b/examples/advanced/xray_TESdetector/vis.mac @@ -0,0 +1,25 @@ +# Macro file for the visualization for the Xray_TESdetector +# +# Create an OpenGL view: +/vis/open OGL 600x600-0+0 +# +# Draw geometry +/vis/drawVolume +# +# Specify style +/vis/viewer/set/style wireframe +/vis/viewer/set/auxiliaryEdge true +/vis/viewer/set/lineSegmentsPerCircle 100 +# +# Draw all trajectories for a given run +/vis/scene/add/trajectories smooth +#/vis/modeling/trajectories/create/drawByCharge +#/vis/modeling/trajectories/drawByCharge-0/default/setDrawStepPts true +#/vis/modeling/trajectories/drawByCharge-0/default/setStepPtsSize 2 +#/vis/scene/endOfEventAction accumulate +# +# Set analysis file name +/analysis/setFileName output.root +# +# Make the "World" box invisible +/vis/geometry/set/visibility World 0 false diff --git a/examples/advanced/xray_TESdetector/xray_TESdetector.cc b/examples/advanced/xray_TESdetector/xray_TESdetector.cc new file mode 100644 index 00000000000..87155b7717c --- /dev/null +++ b/examples/advanced/xray_TESdetector/xray_TESdetector.cc @@ -0,0 +1,106 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// --------------------------------------------------------------------- +// Geant4 - XrayTESdetector example +// --------------------------------------------------------------------- +// +// Authors: P.Dondero (paolo.dondero@cern.ch), R.Stanzani (ronny.stanzani@cern.ch) +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include "XrayTESdetDetectorConstruction.hh" +#include "XrayTESdetPhysicsList.hh" +#include "XrayTESdetActionInitialization.hh" + +#include "G4RunManager.hh" +#include "G4MTRunManager.hh" +#include "G4UImanager.hh" +#include "G4UIterminal.hh" +#include "G4UItcsh.hh" +#include "G4VisExecutive.hh" +#include "G4UIExecutive.hh" +#include "G4RunManagerFactory.hh" + +#include "G4UIExecutive.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +int main(int argc,char** argv) +{ + G4UIExecutive* ui = nullptr; + if(argc == 1) + { + ui = new G4UIExecutive(argc, argv); + } + + // Run manager + auto runManager = G4RunManagerFactory::CreateRunManager(); + runManager->SetNumberOfThreads(8); + + // User Initialization classes (mandatory) + runManager->SetUserInitialization(new XrayTESdetDetectorConstruction); + + auto *phys = new XrayTESdetPhysicsList; + runManager->SetUserInitialization(phys); + + runManager->SetUserInitialization(new XrayTESdetActionInitialization()); + + // Visualization manager construction + auto visManager = new G4VisExecutive; + visManager->Initialize(); + + // Get the pointer to the User Interface manager + G4UImanager* UImanager = G4UImanager::GetUIpointer(); + + // Process macro or start UI session + // + if(!ui) + { + // batch mode + G4String command = "/control/execute "; + G4String fileName = argv[1]; + UImanager->ApplyCommand(command+fileName); + } + else + { + // interactive mode + UImanager->ApplyCommand("/control/execute init_vis.mac"); + ui->SessionStart(); + delete ui; + } + + // Job termination + // Free the store: user actions, physics_list and detector_description are + // owned and deleted by the run manager, so they should not be deleted + // in the main() program! + delete visManager; + delete runManager; + + return 0; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/advanced/xray_TESdetector/xray_TESdetector.gdml b/examples/advanced/xray_TESdetector/xray_TESdetector.gdml new file mode 100644 index 00000000000..6bea5043a77 --- /dev/null +++ b/examples/advanced/xray_TESdetector/xray_TESdetector.gdml @@ -0,0 +1,15305 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+ + + + + + + + + + + + + +
+
+ + + + + + + + +
+
+ + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/advanced/xray_TESdetector/xray_TESdetector.out b/examples/advanced/xray_TESdetector/xray_TESdetector.out new file mode 100644 index 00000000000..307134d0a09 --- /dev/null +++ b/examples/advanced/xray_TESdetector/xray_TESdetector.out @@ -0,0 +1,1429 @@ +Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Forcing G4RunManager type... + + ############################################ + !!! WARNING - FPE detection is activated !!! + ############################################ + + + ################################ + !!! G4Backtrace is activated !!! + ################################ + + +************************************************************** + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) + Copyright : Geant4 Collaboration + References : NIM A 506 (2003), 250-303 + : IEEE-TNS 53 (2006), 270-278 + : NIM A 835 (2016), 186-225 + WWW : http://geant4.org/ +************************************************************** + +1 - Defining DecayPhysics +2 - Defining RadioactiveDecayPhysics +3 - Defining Standard em +Visualization Manager instantiating with verbosity "warnings (3)"... +Visualization Manager initialising... +Registering graphics systems... + +You have successfully registered the following graphics systems. +Registered graphics systems are: + ASCIITree (ATree) + DAWNFILE (DAWNFILE) + G4HepRepFile (HepRepFile) + RayTracer (RayTracer) + VRML2FILE (VRML2FILE) + gMocrenFile (gMocrenFile) + TOOLSSG_OFFSCREEN (TSG_OFFSCREEN) + TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE) + OpenGLImmediateQt (OGLIQt, OGLI) + OpenGLStoredQt (OGLSQt, OGL, OGLS) + OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK) + OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK) + OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK) + OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK) + RayTracerX (RayTracerX) + Qt3D (Qt3D) + TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) + TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) + TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) + +Registering model factories... + +You have successfully registered the following model factories. +Registered model factories: + generic + drawByAttribute + drawByCharge + drawByOriginVolume + drawByParticleID + drawByEncounteredVolume + +Registered models: + None + +Registered filter factories: + attributeFilter + chargeFilter + originVolumeFilter + particleFilter + encounteredVolumeFilter + +Registered filters: + None + +You have successfully registered the following user vis actions. +Run Duration User Vis Actions: none +End of Event User Vis Actions: none +End of Run User Vis Actions: none + +Some /vis commands (optionally) take a string to specify colour. +"/vis/list" to see available colours. +PhysicsList::AddPhysicsList: +X - Defining SpacePhysics +---> Using G4EmStandard_SpacePhysics v. 11.03 +Build a new geometry +### HadronInelasticQBBC Construct Process: + Emin(FTFP)= 3 GeV Emax(FTFP)= 100000 GeV + Emin(BERT)= 1 GeV Emax(BERT)= 6 GeV Emax(BERTpions)= 12 GeV + Emin(BIC) = 0 GeV Emax(BIC)= 1.5 GeV. +4 - Defining em options +======================================================================= +====== Electromagnetic Physics Parameters ======== +======================================================================= +LPM effect enabled 1 +Enable creation and use of sampling tables 0 +Apply cuts on all EM processes 0 +Use combined TransportationWithMsc Disabled +Use general process 0 +Enable linear polarisation for gamma 0 +Enable photoeffect sampling below K-shell 1 +Enable sampling of quantum entanglement 0 +X-section factor for integral approach 0.8 +Min kinetic energy for tables 100 eV +Max kinetic energy for tables 100 TeV +Number of bins per decade of a table 20 +Verbose level 1 +Verbose level for worker thread 0 +Bremsstrahlung energy threshold above which + primary e+- is added to the list of secondary 10 TeV +Bremsstrahlung energy threshold above which primary + muon/hadron is added to the list of secondary 100 TeV +Lowest triplet kinetic energy 1 MeV +Enable sampling of gamma linear polarisation 0 +5D gamma conversion model type 0 +5D gamma conversion model on isolated ion 0 +Livermore data directory epics_2017 +======================================================================= +====== Ionisation Parameters ======== +======================================================================= +Step function for e+- (0.2, 0.01 mm) +Step function for muons/hadrons (0.05, 1e-05 mm) +Step function for light ions (0.1, 0.02 mm) +Step function for general ions (0.1, 0.001 mm) +Lowest e+e- kinetic energy 50 eV +Lowest muon/hadron kinetic energy 1 keV +Use ICRU90 data 1 +Fluctuations of dE/dx are enabled 1 +Type of fluctuation model for leptons and hadrons Universal +Use built-in Birks satuaration 0 +Build CSDA range enabled 0 +Use cut as a final range enabled 0 +Enable angular generator interface 1 +Max kinetic energy for CSDA tables 1 GeV +Max kinetic energy for NIEL computation 1 MeV +Linear loss limit 0.01 +Read data from file for e+e- pair production by mu 0 +======================================================================= +====== Multiple Scattering Parameters ======== +======================================================================= +Type of msc step limit algorithm for e+- 2 +Type of msc step limit algorithm for muons/hadrons 0 +Msc lateral displacement for e+- enabled 1 +Msc lateral displacement for muons and hadrons 0 +Urban msc model lateral displacement alg96 1 +Range factor for msc step limit for e+- 0.08 +Range factor for msc step limit for muons/hadrons 0.2 +Geometry factor for msc step limitation of e+- 2.5 +Safety factor for msc step limit for e+- 0.6 +Skin parameter for msc step limitation of e+- 3 +Lambda limit for msc step limit for e+- 1 mm +Use Mott correction for e- scattering 1 +Factor used for dynamic computation of angular + limit between single and multiple scattering 1 +Fixed angular limit between single + and multiple scattering 3.1416 rad +Upper energy limit for e+- multiple scattering 100 MeV +Type of electron single scattering model 0 +Type of nuclear form-factor 1 +Screening factor 1 +======================================================================= +====== Atomic Deexcitation Parameters ======== +======================================================================= +Fluorescence enabled 1 +Directory in G4LEDATA for fluorescence data files fluor +Auger electron cascade enabled 0 +PIXE atomic de-excitation enabled 1 +De-excitation module ignores cuts 0 +Type of PIXE cross section for hadrons Empirical +Type of PIXE cross section for e+- Livermore +======================================================================= + Transportation, phot, compt, conv + Rayl, msc, eIoni, eBrem + ePairProd, CoulombScat, msc, eIoni + eBrem, annihil, CoulombScat, msc + ionIoni, nuclearStopping, msc, muIoni + muBrems, muPairProd, CoulombScat, muIoni + msc, hIoni, hBrems, hPairProd + CoulombScat, hIoni, msc, hIoni + hBrems, hPairProd, CoulombScat, hIoni + msc, hIoni, hBrems, hPairProd + CoulombScat, msc, hIoni, CoulombScat + hIoni, hIoni, msc, ionIoni + msc, ionIoni, hIoni, hIoni + hIoni, hIoni, hIoni, hIoni + hIoni, hIoni, hIoni, hIoni + hIoni, hIoni, hIoni, hIoni + hIoni, hIoni, hIoni, hIoni + hIoni, hIoni, hIoni, hIoni + hIoni, hIoni, hIoni, hIoni + hIoni, hIoni, hIoni, hIoni + hIoni, hIoni, hIoni, hIoni + hIoni, hIoni, hIoni, hIoni + SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat + SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat + SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, SingleCoulombScat + SingleCoulombScat, SingleCoulombScat, SingleCoulombScat, Decay + photonNuclear, electronNuclear, positronNuclear, muonNuclear + hadElastic, NeutronGeneralProc, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic + hadElastic, hadElastic, hadElastic, hadElastic +hFritiofCaptureAtRest,hBertiniCaptureAtRest,muMinusCaptureAtRest, dInelastic + tInelastic, He3Inelastic, alphaInelastic, ionInelastic + protonInelastic, pi+Inelastic, pi-Inelastic, kaon+Inelastic + kaon-Inelastic, kaon0SInelastic, kaon0LInelastic,anti_protonInelastic +anti_neutronInelastic,anti_deuteronInelastic,anti_tritonInelastic, anti_He3Inelastic +anti_alphaInelastic, lambdaInelastic, sigma+Inelastic, sigma-Inelastic + xi0Inelastic, xi-Inelastic, omega-Inelastic,anti_lambdaInelastic +anti_sigma+Inelastic,anti_sigma-Inelastic, anti_xi0Inelastic, anti_xi-Inelastic +anti_omega-Inelastic, D+Inelastic, D0Inelastic, D-Inelastic + anti_D0Inelastic, Ds+Inelastic, Ds-Inelastic, B+Inelastic + B0Inelastic, B-Inelastic, anti_B0Inelastic, Bs0Inelastic + anti_Bs0Inelastic, Bc+Inelastic, Bc-Inelastic, lambda_c+Inelastic + xi_c+Inelastic, xi_c0Inelastic, omega_c0Inelastic, lambda_bInelastic + xi_b0Inelastic, xi_b-Inelastic, omega_b-Inelastic,anti_lambda_c+Inelastic +anti_xi_c+Inelastic,anti_xi_c0Inelastic,anti_omega_c0Inelastic,anti_lambda_bInelastic +anti_xi_b0Inelastic,anti_xi_b-Inelastic,anti_omega_b-Inelastic +======================================================================= +====== Electromagnetic Physics Parameters ======== +======================================================================= +LPM effect enabled 1 +Enable creation and use of sampling tables 0 +Apply cuts on all EM processes 0 +Use combined TransportationWithMsc Disabled +Use general process 0 +Enable linear polarisation for gamma 0 +Enable photoeffect sampling below K-shell 1 +Enable sampling of quantum entanglement 0 +X-section factor for integral approach 0.8 +Min kinetic energy for tables 100 eV +Max kinetic energy for tables 100 TeV +Number of bins per decade of a table 20 +Verbose level 1 +Verbose level for worker thread 0 +Bremsstrahlung energy threshold above which + primary e+- is added to the list of secondary 10 TeV +Bremsstrahlung energy threshold above which primary + muon/hadron is added to the list of secondary 100 TeV +Lowest triplet kinetic energy 1 MeV +Enable sampling of gamma linear polarisation 0 +5D gamma conversion model type 0 +5D gamma conversion model on isolated ion 0 +Livermore data directory epics_2017 +======================================================================= +====== Ionisation Parameters ======== +======================================================================= +Step function for e+- (0.2, 0.01 mm) +Step function for muons/hadrons (0.05, 1e-05 mm) +Step function for light ions (0.1, 0.02 mm) +Step function for general ions (0.1, 0.001 mm) +Lowest e+e- kinetic energy 50 eV +Lowest muon/hadron kinetic energy 1 keV +Use ICRU90 data 1 +Fluctuations of dE/dx are enabled 1 +Type of fluctuation model for leptons and hadrons Universal +Use built-in Birks satuaration 0 +Build CSDA range enabled 0 +Use cut as a final range enabled 0 +Enable angular generator interface 1 +Max kinetic energy for CSDA tables 1 GeV +Max kinetic energy for NIEL computation 1 MeV +Linear loss limit 0.01 +Read data from file for e+e- pair production by mu 0 +======================================================================= +====== Multiple Scattering Parameters ======== +======================================================================= +Type of msc step limit algorithm for e+- 2 +Type of msc step limit algorithm for muons/hadrons 0 +Msc lateral displacement for e+- enabled 1 +Msc lateral displacement for muons and hadrons 0 +Urban msc model lateral displacement alg96 1 +Range factor for msc step limit for e+- 0.08 +Range factor for msc step limit for muons/hadrons 0.2 +Geometry factor for msc step limitation of e+- 2.5 +Safety factor for msc step limit for e+- 0.6 +Skin parameter for msc step limitation of e+- 3 +Lambda limit for msc step limit for e+- 1 mm +Use Mott correction for e- scattering 1 +Factor used for dynamic computation of angular + limit between single and multiple scattering 1 +Fixed angular limit between single + and multiple scattering 3.1416 rad +Upper energy limit for e+- multiple scattering 100 MeV +Type of electron single scattering model 0 +Type of nuclear form-factor 1 +Screening factor 1 +======================================================================= +====== Atomic Deexcitation Parameters ======== +======================================================================= +Fluorescence enabled 1 +Directory in G4LEDATA for fluorescence data files fluor +Auger electron cascade enabled 0 +PIXE atomic de-excitation enabled 1 +De-excitation module ignores cuts 0 +Type of PIXE cross section for hadrons Empirical +Type of PIXE cross section for e+- Livermore +======================================================================= + +### === Deexcitation model UAtomDeexcitation is activated for 2 regions: + DefaultRegionForTheWorld 0 0 0 + InnerRegion 1 1 1 + +### === G4UAtomicDeexcitation::InitialiseForNewRun() +### === Ignore cuts flag: 0 +### === PIXE model for hadrons: Empirical +### === PIXE model for e+-: Livermore + +phot: for gamma SubType=12 BuildTable=0 + LambdaPrime table from 200 keV to 100 TeV in 174 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermorePhElectric : Emin= 0 eV Emax= 100 TeV SauterGavrila Fluo + +compt: for gamma SubType=13 BuildTable=1 + Lambda table from 100 eV to 1 MeV, 20 bins/decade, spline: 1 + LambdaPrime table from 1 MeV to 100 TeV in 160 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LowEPComptonModel : Emin= 0 eV Emax= 20 MeV Fluo + KleinNishina : Emin= 20 MeV Emax= 100 TeV Fluo + +conv: for gamma SubType=14 BuildTable=1 + Lambda table from 1.022 MeV to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + BetheHeitler5D : Emin= 0 eV Emax= 100 TeV ModifiedTsai + +Rayl: for gamma SubType=11 BuildTable=1 + Lambda table from 100 eV to 150 keV, 20 bins/decade, spline: 0 + LambdaPrime table from 150 keV to 100 TeV in 176 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermoreRayleigh : Emin= 0 eV Emax= 100 TeV CullenGenerator + +msc: for e- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + GoudsmitSaunderson : Emin= 0 eV Emax= 100 MeV Nbins=120 100 eV - 100 MeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=120 100 MeV - 100 TeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +eIoni: for e- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.2, 0.01 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LowEnergyIoni : Emin= 0 eV Emax= 100 keV deltaVI + MollerBhabha : Emin= 100 keV Emax= 100 TeV deltaVI + +eBrem: for e- XStype:4 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 10000 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eBremSB : Emin= 0 eV Emax= 1 GeV AngularGen2BS + eBremLPM : Emin= 1 GeV Emax= 100 TeV AngularGen2BS + +ePairProd: for e- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 25x1001 from 0.1 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ePairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 + Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 100 MeV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for e- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for e+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + GoudsmitSaunderson : Emin= 0 eV Emax= 100 MeV Nbins=120 100 eV - 100 MeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=120 100 MeV - 100 TeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +eIoni: for e+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.2, 0.01 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + PenIoni : Emin= 0 eV Emax= 100 keV + MollerBhabha : Emin= 100 keV Emax= 100 TeV deltaVI + +eBrem: for e+ XStype:4 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 10000 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eBremSB : Emin= 0 eV Emax= 1 GeV AngularGen2BS + eBremLPM : Emin= 1 GeV Emax= 100 TeV AngularGen2BS + +ePairProd: for e+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 0 + Sampling table 25x1001 from 0.1 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ePairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +annihil: for e+ XStype:2 SubType=5 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eplus2gg : Emin= 0 eV Emax= 100 TeV + +CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 + Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 100 MeV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for e+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for proton SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for proton XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax= 2 MeV deltaVI + BetheBloch : Emin= 2 MeV Emax= 100 TeV deltaVI + +hBrems: for proton XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + ===== Limit on energy threshold has been applied + +hPairProd: for proton XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 17x1001 from 7.50618 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +nuclearStopping: for proton SubType=8 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV + +SingleCoulombScat: for proton XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for GenericIon SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + UrbanMsc : Emin= 0 eV Emax= 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +ionIoni: for GenericIon XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.001 mm), integ: 3, fluct: 1, linLossLim= 0.02 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ParamICRU73 : Emin= 0 eV Emax= 100 TeV deltaVI + +nuclearStopping: for GenericIon SubType=8 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV + +SingleCoulombScat: for GenericIon XStype:2 SubType=1 BuildTable=0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== +IonCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for alpha SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + UrbanMsc : Emin= 0 eV Emax= 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +ionIoni: for alpha XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.02 mm), integ: 3, fluct: 1, linLossLim= 0.02 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + BraggIon : Emin= 0 eV Emax=7.9452 MeV deltaVI + BetheBloch : Emin=7.9452 MeV Emax= 100 TeV deltaVI + +nuclearStopping: for alpha SubType=8 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU49NucStopping : Emin= 0 eV Emax= 1 MeV + +SingleCoulombScat: for alpha XStype:2 SubType=1 BuildTable=0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== +IonCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for anti_proton SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for anti_proton XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax= 2 MeV deltaVI + BetheBloch : Emin= 2 MeV Emax= 100 TeV deltaVI + +hBrems: for anti_proton XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + ===== Limit on energy threshold has been applied + +hPairProd: for anti_proton XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 17x1001 from 7.50618 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for anti_proton XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for kaon+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for kaon+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=1.05231 MeV deltaVI + BetheBloch : Emin=1.05231 MeV Emax= 100 TeV deltaVI + +hBrems: for kaon+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + ===== Limit on energy threshold has been applied + +hPairProd: for kaon+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 18x1001 from 3.94942 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for kaon+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for kaon- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for kaon- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=1.05231 MeV deltaVI + BetheBloch : Emin=1.05231 MeV Emax= 100 TeV deltaVI + +hBrems: for kaon- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + ===== Limit on energy threshold has been applied + +hPairProd: for kaon- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 18x1001 from 3.94942 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 + Used Lambda table of kaon+ + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for kaon- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for mu+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +muIoni: for mu+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax= 200 keV deltaVI + MuBetheBloch : Emin= 200 keV Emax= 100 TeV deltaVI + +muBrems: for mu+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + ===== Limit on energy threshold has been applied + +muPairProd: for mu+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 21x1001 from 0.85 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for mu+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for mu- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +muIoni: for mu- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax= 200 keV deltaVI + MuBetheBloch : Emin= 200 keV Emax= 100 TeV deltaVI + +muBrems: for mu- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + ===== Limit on energy threshold has been applied + +muPairProd: for mu- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 21x1001 from 0.85 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 + Used Lambda table of mu+ + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for mu- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for pi+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for pi+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=297.505 keV deltaVI + BetheBloch : Emin=297.505 keV Emax= 100 TeV deltaVI + +hBrems: for pi+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + ===== Limit on energy threshold has been applied + +hPairProd: for pi+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 20x1001 from 1.11656 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for pi+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for pi- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=240 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hIoni: for pi- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + StepFunction=(0.05, 1e-05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=297.505 keV deltaVI + BetheBloch : Emin=297.505 keV Emax= 100 TeV deltaVI + +hBrems: for pi- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + ===== Limit on energy threshold has been applied + +hPairProd: for pi- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 240 bins + Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 + Sampling table 20x1001 from 1.11656 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 + Used Lambda table of pi+ + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + ===== EM models for the G4Region InnerRegion ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +SingleCoulombScat: for pi- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 20 bins/decade, spline: 1 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + ===== EM models for the G4Region InnerRegion ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +==================================================================== + HADRONIC PROCESSES SUMMARY (verbose level 1) + +--------------------------------------------------- + Hadronic Processes for B- + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: B-Inelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for D- + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: D-Inelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for GenericIon + + Process: ionInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for He3 + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + + Process: He3Inelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for alpha + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + + Process: alphaInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for anti_He3 + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_He3Inelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_alpha + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_alphaInelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_deuteron + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_deuteronInelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_hypertriton + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_lambda + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: anti_lambdaInelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_neutron + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100.1 MeV + Model: AntiAElastic: 100 MeV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_neutronInelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_proton + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100.1 MeV + Model: AntiAElastic: 100 MeV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_protonInelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_triton + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_tritonInelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for deuteron + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + + Process: dInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for e+ + + Process: positronNuclear + Model: G4ElectroVDNuclearModel: 0 eV ---> 1 PeV + Cr_sctns: ElectroNuclearXS: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for e- + + Process: electronNuclear + Model: G4ElectroVDNuclearModel: 0 eV ---> 1 PeV + Cr_sctns: ElectroNuclearXS: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for gamma + + Process: photonNuclear + Model: GammaNPreco: 0 eV ---> 200 MeV + Model: BertiniCascade: 199 MeV ---> 6 GeV + Model: TheoFSGenerator: 3 GeV ---> 100 TeV + Cr_sctns: GammaNuclearXS: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for kaon+ + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: kaon+Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for kaon- + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: kaon-Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: hBertiniCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for lambda + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: lambdaInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for mu+ + + Process: muonNuclear + Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV + Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for mu- + + Process: muonNuclear + Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV + Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV + + + Process: muMinusCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for neutron + + Process: hadElastic + Model: hElasticCHIPS: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV + + + Process: neutronInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 6 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV + + + Process: nCapture + Model: nRadCapture: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for pi+ + + Process: hadElastic + Model: hElasticGlauber: 0 eV ---> 100 TeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + + Process: pi+Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 12 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for pi- + + Process: hadElastic + Model: hElasticGlauber: 0 eV ---> 100 TeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + + Process: pi-Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 12 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + + Process: hBertiniCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for proton + + Process: hadElastic + Model: hElasticCHIPS: 0 eV ---> 100 TeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + + Process: protonInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 1 GeV ---> 6 GeV + Model: Binary Cascade: 0 eV ---> 1.5 GeV + Cr_sctns: G4ParticleInelasticXS: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for sigma- + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: sigma-Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: hBertiniCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for triton + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + + Process: tInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +================================================================ +======================================================================= +====== Geant4 Native Pre-compound Model Parameters ======== +======================================================================= +Type of pre-compound inverse x-section 3 +Pre-compound model active 1 +Pre-compound excitation low energy 100 keV +Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= +Type of de-excitation inverse x-section 3 +Type of de-excitation factory Evaporation+GEM +Number of de-excitation channels 68 +Min excitation energy 10 eV +Min energy per nucleon for multifragmentation 200 GeV +Limit excitation energy for Fermi BreakUp 20 MeV +Level density (1/MeV) 0.075 +Use simple level density model 1 +Use discrete excitation energy of the residual 1 +Time limit for long lived isomeres 1000 ps +Isomer production flag 1 +Internal e- conversion flag 1 +Store e- internal conversion data 1 +Correlated gamma emission flag 0 +Max 2J for sampling of angular correlations 10 +======================================================================= + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 200 eV e- 200 eV e+ 200 eV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 6.9381 keV e- 546.315 keV e+ 525.612 keV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 2 used in the geometry : Yes + Material : G4_Cu + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 24.8209 keV e- 1.4031 MeV e+ 1.32293 MeV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 3 used in the geometry : Yes + Material : Cryoperm + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 24.1463 keV e- 1.41673 MeV e+ 1.33593 MeV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 4 used in the geometry : Yes + Material : RingAl + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 3.75362 keV e- 244.524 keV e+ 238.254 keV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 5 used in the geometry : Yes + Material : G4_Al + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 6.91664 keV e- 597.447 keV e+ 574.147 keV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 6 used in the geometry : Yes + Material : Stainless Steel + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 19.3924 keV e- 1.34692 MeV e+ 1.27338 MeV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 7 used in the geometry : Yes + Material : G4_Ti + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 13.2342 keV e- 820.572 keV e+ 782.066 keV proton 100 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 8 used in the geometry : Yes + Material : G4_Galactic + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 200 eV e- 200 eV e+ 200 eV proton 100 keV + Region(s) which use this couple : + InnerRegion + +Index : 9 used in the geometry : Yes + Material : G4_Bi + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 99.6309 keV e- 1.20173 MeV e+ 1.12623 MeV proton 100 keV + Region(s) which use this couple : + InnerRegion + +Index : 10 used in the geometry : Yes + Material : Si3N4 + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 7.02662 keV e- 749.954 keV e+ 718.693 keV proton 100 keV + Region(s) which use this couple : + InnerRegion + +Index : 11 used in the geometry : Yes + Material : G4_Si + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 6.9381 keV e- 546.315 keV e+ 525.612 keV proton 100 keV + Region(s) which use this couple : + InnerRegion + +Index : 12 used in the geometry : Yes + Material : G4_Al + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 6.91664 keV e- 597.447 keV e+ 574.147 keV proton 100 keV + Region(s) which use this couple : + InnerRegion + +Index : 13 used in the geometry : Yes + Material : G4_Au + Range cuts : gamma 1 mm e- 1 mm e+ 1 mm proton 1 mm + Energy thresholds : gamma 112.419 keV e- 2.28841 MeV e+ 2.12466 MeV proton 100 keV + Region(s) which use this couple : + InnerRegion + +================================================================== + +G4VisManager: Using G4TrajectoryDrawByCharge as fallback trajectory model. +See commands in /vis/modeling/trajectories/ for other options. +### Run 0 starts. + +-------- WWWW ------- G4Exception-START -------- WWWW ------- +*** G4Exception : Analysis_W001 + issued by : G4RootNtupleFileManager::SetNtupleMergingMode +Merging ntuples is not applicable in sequential application. +Setting was ignored. +*** This is just a warning message. *** +-------- WWWW -------- G4Exception-END --------- WWWW ------- + +... set ntuple merging row mode : row-wise - done +... create file : output.root - done +... open analysis file : output.root - done +... open analysis file : output.root - done +--> Event 0 starts. + Run terminated. +Run Summary + Number of events processed : 1000 + User=0.950000s Real=0.959874s Sys=0.000000s +... write file : output.root - done +... close file : output.root - done +Graphics systems deleted. +Visualization Manager deleting... +================== Deleting memory pools =================== +Number of memory pools allocated: 13 of which, static: 0 +Dynamic pools deleted: 13 / Total memory freed: 0.23 MB +============================================================ diff --git a/examples/advanced/xray_fluorescence/xray_fluorescence.out b/examples/advanced/xray_fluorescence/xray_fluorescence.out index 374710869d4..0741f549414 100644 --- a/examples/advanced/xray_fluorescence/xray_fluorescence.out +++ b/examples/advanced/xray_fluorescence/xray_fluorescence.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -2312,7 +2312,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -2537,7 +2539,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -2576,7 +2578,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -2609,7 +2611,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -2679,7 +2681,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -2712,7 +2714,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -2745,7 +2747,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -2778,7 +2780,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -2811,7 +2813,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -2844,7 +2846,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -2877,7 +2879,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -2973,7 +2975,7 @@ Created histos Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.003214s Sys=0.000000s + User=0.000000s Real=0.002769s Sys=0.000000s Going to save histograms ... write file : xrayfluo.root - done ... close file : xrayfluo.root - done diff --git a/examples/advanced/xray_telescope/xray_telescope.out b/examples/advanced/xray_telescope/xray_telescope.out index 7654fa87e79..6da5f518476 100644 --- a/examples/advanced/xray_telescope/xray_telescope.out +++ b/examples/advanced/xray_telescope/xray_telescope.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -43,7 +43,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -242,7 +244,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -453,7 +454,7 @@ Opening output file xraytel ... done Run terminated. Run Summary Number of events processed : 1000 - User=0.010000s Real=0.012542s Sys=0.000000s + User=0.020000s Real=0.016119s Sys=0.000000s ########################################## WARNING: command "/vis/viewer/update" could not be applied: no current viewer. Graphics systems deleted. diff --git a/examples/basic/B1/exampleB1.out b/examples/basic/B1/exampleB1.out index 77bf7c32ae6..af793d3c756 100644 --- a/examples/basic/B1/exampleB1.out +++ b/examples/basic/B1/exampleB1.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -44,7 +44,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -201,7 +203,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -233,7 +235,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -265,7 +267,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -278,7 +280,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -324,7 +325,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -356,7 +357,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -388,7 +389,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -420,7 +421,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -452,7 +453,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -484,7 +485,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -516,7 +517,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -908,12 +909,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -963,7 +973,7 @@ See commands in /vis/modeling/trajectories/ for other options. --------------------End of Global Run----------------------- The run consists of 1000 proton of 210 MeV - Cumulated dose per run, in scoring volume : 5.04835 nanoGy rms = 145.945 picoGy + Cumulated dose per run, in scoring volume : 4.99978 nanoGy rms = 145.634 picoGy ------------------------------------------------------------ Graphics systems deleted. diff --git a/examples/basic/B2/B2a/exampleB2a.out b/examples/basic/B2/B2a/exampleB2a.out index 2cec6a0ac0a..3dfbc55153a 100644 --- a/examples/basic/B2/B2a/exampleB2a.out +++ b/examples/basic/B2/B2a/exampleB2a.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -272,7 +274,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -304,7 +306,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -336,7 +338,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -349,7 +351,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -395,7 +396,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -427,7 +428,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -459,7 +460,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -491,7 +492,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -523,7 +524,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -555,7 +556,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -587,7 +588,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -972,12 +973,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/basic/B2/B2b/exampleB2b.out b/examples/basic/B2/B2b/exampleB2b.out index 79ec36907b8..d324944fee6 100644 --- a/examples/basic/B2/B2b/exampleB2b.out +++ b/examples/basic/B2/B2b/exampleB2b.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -268,7 +270,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -300,7 +302,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -332,7 +334,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -345,7 +347,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -391,7 +392,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -423,7 +424,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -455,7 +456,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -487,7 +488,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -519,7 +520,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -551,7 +552,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -583,7 +584,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -968,12 +969,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1223,179 +1233,179 @@ See commands in /vis/modeling/trajectories/ for other options. >>> Event: 12 131 hits stored in this event >>> Event: 13 - 94495 hits stored in this event + 129499 hits stored in this event >>> Event: 14 - 621 hits stored in this event + 51 hits stored in this event >>> Event: 15 - 268 hits stored in this event + 92 hits stored in this event >>> Event: 16 - 277 hits stored in this event + 236 hits stored in this event >>> Event: 17 - 116 hits stored in this event + 69 hits stored in this event >>> Event: 18 - 194 hits stored in this event + 75 hits stored in this event >>> Event: 19 - 56 hits stored in this event + 61 hits stored in this event >>> Event: 20 - 179 hits stored in this event + 1833 hits stored in this event >>> Event: 21 - 282 hits stored in this event + 153 hits stored in this event >>> Event: 22 - 1382 hits stored in this event + 64 hits stored in this event >>> Event: 23 - 89 hits stored in this event + 148 hits stored in this event >>> Event: 24 - 77 hits stored in this event + 99 hits stored in this event >>> Event: 25 - 477 hits stored in this event + 169 hits stored in this event >>> Event: 26 - 148 hits stored in this event + 66 hits stored in this event >>> Event: 27 - 387 hits stored in this event + 114 hits stored in this event >>> Event: 28 - 267 hits stored in this event + 77 hits stored in this event >>> Event: 29 - 131 hits stored in this event + 135 hits stored in this event >>> Event: 30 - 137 hits stored in this event + 78 hits stored in this event >>> Event: 31 - 838 hits stored in this event + 88 hits stored in this event >>> Event: 32 - 141 hits stored in this event + 184 hits stored in this event >>> Event: 33 - 122 hits stored in this event + 2286 hits stored in this event >>> Event: 34 - 574 hits stored in this event + 125 hits stored in this event >>> Event: 35 - 90 hits stored in this event + 121 hits stored in this event >>> Event: 36 - 69 hits stored in this event + 96 hits stored in this event >>> Event: 37 - 1099 hits stored in this event + 93 hits stored in this event >>> Event: 38 - 38 hits stored in this event + 171 hits stored in this event >>> Event: 39 - 78 hits stored in this event + 58 hits stored in this event >>> Event: 40 - 128 hits stored in this event + 304 hits stored in this event >>> Event: 41 - 66 hits stored in this event + 163 hits stored in this event >>> Event: 42 - 133 hits stored in this event + 188 hits stored in this event >>> Event: 43 - 550 hits stored in this event + 80 hits stored in this event >>> Event: 44 - 643 hits stored in this event + 77 hits stored in this event >>> Event: 45 - 86 hits stored in this event + 84 hits stored in this event >>> Event: 46 - 77 hits stored in this event + 63 hits stored in this event >>> Event: 47 - 87 hits stored in this event + 160 hits stored in this event >>> Event: 48 - 104 hits stored in this event + 83 hits stored in this event >>> Event: 49 - 199 hits stored in this event + 147 hits stored in this event >>> Event: 50 - 110 hits stored in this event + 453 hits stored in this event >>> Event: 51 - 110 hits stored in this event + 66 hits stored in this event >>> Event: 52 - 71 hits stored in this event + 129 hits stored in this event >>> Event: 53 - 3666 hits stored in this event + 68 hits stored in this event >>> Event: 54 - 329 hits stored in this event + 78 hits stored in this event >>> Event: 55 76 hits stored in this event >>> Event: 56 - 113 hits stored in this event + 83 hits stored in this event >>> Event: 57 - 4073 hits stored in this event + 136 hits stored in this event >>> Event: 58 - 113 hits stored in this event + 64 hits stored in this event >>> Event: 59 - 75 hits stored in this event + 105 hits stored in this event >>> Event: 60 - 91 hits stored in this event + 108 hits stored in this event >>> Event: 61 - 70 hits stored in this event + 145 hits stored in this event >>> Event: 62 - 94 hits stored in this event + 442 hits stored in this event >>> Event: 63 - 55 hits stored in this event + 74 hits stored in this event >>> Event: 64 - 62 hits stored in this event + 55 hits stored in this event >>> Event: 65 - 63 hits stored in this event + 201 hits stored in this event >>> Event: 66 - 101 hits stored in this event + 154 hits stored in this event >>> Event: 67 - 325 hits stored in this event + 161 hits stored in this event >>> Event: 68 - 110 hits stored in this event + 195 hits stored in this event >>> Event: 69 - 91 hits stored in this event + 210 hits stored in this event >>> Event: 70 - 85 hits stored in this event + 407 hits stored in this event >>> Event: 71 - 144 hits stored in this event + 363 hits stored in this event >>> Event: 72 - 64 hits stored in this event + 190 hits stored in this event >>> Event: 73 - 72 hits stored in this event + 81 hits stored in this event >>> Event: 74 - 107 hits stored in this event + 95 hits stored in this event >>> Event: 75 - 63 hits stored in this event + 866 hits stored in this event >>> Event: 76 - 159 hits stored in this event + 255 hits stored in this event >>> Event: 77 - 1405 hits stored in this event + 248 hits stored in this event >>> Event: 78 - 100 hits stored in this event + 57 hits stored in this event >>> Event: 79 - 89 hits stored in this event + 391 hits stored in this event >>> Event: 80 - 60 hits stored in this event + 45 hits stored in this event >>> Event: 81 - 85 hits stored in this event + 76 hits stored in this event >>> Event: 82 - 98 hits stored in this event + 187 hits stored in this event >>> Event: 83 - 41 hits stored in this event + 66 hits stored in this event >>> Event: 84 - 164 hits stored in this event + 972 hits stored in this event >>> Event: 85 - 253 hits stored in this event + 158 hits stored in this event >>> Event: 86 - 58 hits stored in this event + 2528 hits stored in this event >>> Event: 87 - 155 hits stored in this event + 124 hits stored in this event >>> Event: 88 - 135 hits stored in this event + 141 hits stored in this event >>> Event: 89 - 129 hits stored in this event + 1201 hits stored in this event >>> Event: 90 - 87 hits stored in this event + 133 hits stored in this event >>> Event: 91 - 56 hits stored in this event + 1624 hits stored in this event >>> Event: 92 - 84 hits stored in this event + 491 hits stored in this event >>> Event: 93 - 78 hits stored in this event + 61 hits stored in this event >>> Event: 94 - 601 hits stored in this event + 137 hits stored in this event >>> Event: 95 - 249 hits stored in this event + 69 hits stored in this event >>> Event: 96 - 266 hits stored in this event + 157 hits stored in this event >>> Event: 97 - 158 hits stored in this event + 88 hits stored in this event >>> Event: 98 - 155 hits stored in this event + 84 hits stored in this event >>> Event: 99 - 80 hits stored in this event + 63 hits stored in this event ### Run 2 starts. --> Event 0 starts. diff --git a/examples/basic/B3/B3a/exampleB3a.out b/examples/basic/B3/B3a/exampleB3a.out index fa6e553d449..85ddc8f2e0a 100644 --- a/examples/basic/B3/B3a/exampleB3a.out +++ b/examples/basic/B3/B3a/exampleB3a.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -43,7 +43,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -358,7 +360,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -390,7 +392,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -422,7 +424,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -435,7 +437,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -498,7 +499,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -530,7 +531,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -562,7 +563,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -594,7 +595,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -626,7 +627,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -658,7 +659,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -690,7 +691,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV ====================================================================== @@ -739,8 +740,8 @@ Setting was ignored. --> Event 9000 starts. --------------------End of Global Run----------------------- - The run was 10000 events Nb of 'good' e+ annihilations: 1300 - Total dose in patient : 303.614 picoGy + The run was 10000 events Nb of 'good' e+ annihilations: 1275 + Total dose in patient : 308.987 picoGy ------------------------------------------------------------ ... write file : scoring.root - done diff --git a/examples/basic/B3/B3b/exampleB3b.out b/examples/basic/B3/B3b/exampleB3b.out index 73589f5d9a0..525db3290ef 100644 --- a/examples/basic/B3/B3b/exampleB3b.out +++ b/examples/basic/B3/B3b/exampleB3b.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -43,7 +43,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -358,7 +360,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -390,7 +392,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -422,7 +424,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -435,7 +437,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -498,7 +499,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -530,7 +531,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -562,7 +563,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -594,7 +595,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -626,7 +627,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -658,7 +659,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -690,7 +691,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV ====================================================================== @@ -741,9 +742,9 @@ Setting was ignored. --> Event 9000 starts. --------------------End of Global Run----------------------- - The run was 10000 events Nb of 'good' e+ annihilations: 1300 - Total dose in patient : 303.614 picoGy - Total dose in patient : 3.03614e-10 [sigma: 1.73139e-14 | error: 0.0057026 | coeff: 0.0057026 | eff: 1 | fom: 30750.7 | r2int: 3.25164e-05 | r2eff: 0 | hits: 10000 ] Gy + The run was 10000 events Nb of 'good' e+ annihilations: 1275 + Total dose in patient : 308.987 picoGy + Total dose in patient : 3.08987e-10 [sigma: 1.73653e-14 | error: 0.00562007 | coeff: 0.00562007 | eff: 1 | fom: 31660.4 | r2int: 3.1582e-05 | r2eff: 0 | hits: 10000 ] Gy ------------------------------------------------------------ ... write file : scoring.root - done diff --git a/examples/basic/B4/.README.txt b/examples/basic/B4/.README.txt index a19bdda8432..a6e08ad72b9 100644 --- a/examples/basic/B4/.README.txt +++ b/examples/basic/B4/.README.txt @@ -7,7 +7,7 @@ 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) + (See also examples/extended/electromagnetic/TestEm3 or hadronic/Hadr05) \section B4_s1 GEOMETRY DEFINITION @@ -52,7 +52,7 @@ A more general version of this geometry can be found in: - examples/extended/electromagnetic/TestEm3 + examples/extended/electromagnetic/TestEm3 or hadronic/Hadr05 where all the geometry parameters, the absorber and gap materials can be modified interactively via the commands defined in the DetectorMessenger class. diff --git a/examples/basic/B4/B4a/exampleB4a.out b/examples/basic/B4/B4a/exampleB4a.out index 2c978faa9c5..c45b1c0e537 100644 --- a/examples/basic/B4/B4a/exampleB4a.out +++ b/examples/basic/B4/B4a/exampleB4a.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -244,7 +246,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -276,7 +278,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -308,7 +310,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -321,7 +323,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -367,7 +368,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -399,7 +400,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -431,7 +432,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -463,7 +464,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -495,7 +496,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -527,7 +528,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -559,7 +560,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -944,12 +945,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -984,9 +994,10 @@ Setting was ignored. ... open analysis file : B4.root - done Using --> Event 0 starts. ----> End of event: 0 Absorber: total energy: 259.894 MeV total track length: 18.9569 cm Gap: total energy: 17.4244 MeV total track length: 8.74398 cm +--> End of event 0 + ----> print histograms statistic for the entire run @@ -1063,9 +1074,10 @@ hFritiofCaptureAtRest,hBertiniCaptureAtRest,muMinusCaptureAtRest, dInela ... open analysis file : B4.root - done Using --> Event 0 starts. ----> End of event: 0 Absorber: total energy: 278.136 MeV total track length: 20.1737 cm Gap: total energy: 19.9095 MeV total track length: 10.0917 cm +--> End of event 0 + ----> print histograms statistic for the entire run @@ -1088,14 +1100,15 @@ View them with "/vis/plot" or "/vis/reviewPlots". ... open analysis file : B4.root - done Using --> Event 0 starts. ----> End of event: 0 Absorber: total energy: 435.043 MeV total track length: 31.1955 cm Gap: total energy: 37.3961 MeV total track length: 18.5223 cm +--> End of event 0 + ----> print histograms statistic for the entire run - EAbs : mean = 435.043 MeV rms = 0 eV - EGap : mean = 37.3961 MeV rms = 0 eV + EAbs : mean = 0 eV rms = 0 eV + EGap : mean = 0 eV rms = 0 eV LAbs : mean = 31.1955 cm rms = 0 fm LGap : mean = 18.5223 cm rms = 0 fm ... write file : B4.root - done diff --git a/examples/basic/B4/B4a/include/EventAction.hh b/examples/basic/B4/B4a/include/EventAction.hh index 0f734edc83d..6aeb5260186 100644 --- a/examples/basic/B4/B4a/include/EventAction.hh +++ b/examples/basic/B4/B4a/include/EventAction.hh @@ -76,7 +76,6 @@ inline void EventAction::AddGap(G4double de, G4double dl) { } } - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #endif diff --git a/examples/basic/B4/B4a/plotHisto.C b/examples/basic/B4/B4a/plotHisto.C index 868a742ab54..5a52808e748 100644 --- a/examples/basic/B4/B4a/plotHisto.C +++ b/examples/basic/B4/B4a/plotHisto.C @@ -28,16 +28,17 @@ hist2->Draw("HIST"); // Draw Egap histogram in the pad 3 - // with logaritmic scale for y + TH1D* hist3 = (TH1D*)f.Get("Egap"); c1->cd(3); - gPad->SetLogy(1); + // set logarithmic scale for y + //gPad->SetLogy(1); hist3->Draw("HIST"); // Draw Lgap histogram in the pad 4 - // with logaritmic scale for y c1->cd(4); - gPad->SetLogy(1); + // set logarithmic scale for y + //gPad->SetLogy(1); TH1D* hist4 = (TH1D*)f.Get("Lgap"); hist4->Draw("HIST"); } diff --git a/examples/basic/B4/B4a/plotNtuple.C b/examples/basic/B4/B4a/plotNtuple.C index 086bbd402a9..86f50705b10 100644 --- a/examples/basic/B4/B4a/plotNtuple.C +++ b/examples/basic/B4/B4a/plotNtuple.C @@ -28,15 +28,15 @@ c1->cd(2); ntuple->Draw("Labs"); - // Draw Egap histogram in the pad 3 - // with logaritmic scale for y ?? how to do this? + // Draw Egap histogram in the pad c1->cd(3); - gPad->SetLogy(1); + //set logarithmic scale for y + //gPad->SetLogy(1); ntuple->Draw("Egap"); // Draw Lgap histogram in the pad 4 - // with logaritmic scale for y ?? how to do this? c1->cd(4); - gPad->SetLogy(1); - ntuple->Draw("Egap"); + //set logarithmic scale for y + //gPad->SetLogy(1); + ntuple->Draw("Lgap"); } diff --git a/examples/basic/B4/B4a/run1.mac b/examples/basic/B4/B4a/run1.mac index 18983715a04..14d3cea59b5 100644 --- a/examples/basic/B4/B4a/run1.mac +++ b/examples/basic/B4/B4a/run1.mac @@ -1,44 +1,40 @@ # Macro file for example B4 -# +# # Can be run in batch, without graphic # or interactively: Idle> /control/execute run1.mac -# -# Change the default number of workers (in multi-threading mode) +# +# change the default number of workers (in multi-threading mode) #/run/numberOfThreads 4 # +# Kind of tutorial: +# interactively with visualization, issue the commands one by one: +# Idle> gun/particle mu+ +# Idle> ...etc... +# # Initialize kernel /run/initialize # -# Default kinematics: -# electron 50 MeV in direction (0.,0.,1.) -# 1 event with tracking/verbose -# -/tracking/verbose 1 -/run/beamOn 1 -# -# # muon 300 MeV in direction (0.,0.,1.) -# 3 events -# /gun/particle mu+ -/gun/energy 3 MeV -/run/beamOn 3 +/gun/energy 300 MeV # -# 20 events +/run/beamOn 1 # -/tracking/verbose 0 /run/printProgress 5 -/run/beamOn 20 +/run/beamOn 10 # -# Magnetic field -# -/globalField/setValue 0.2 0 0 tesla -/run/beamOn 3 -# -# Activate/inactivate physics processes +# inactivate multiple scattering process +/process/inactivate msc +/run/beamOn 10 # -/process/list -/process/inactivate eBrem +# set a magnetic field +/globalField/setValue 2 0 0 tesla +/run/beamOn 10 # -/run/beamOn 20 +# re-activate multiple scattering +/process/activate msc +/run/beamOn 10 # +# verbosity +/tracking/verbose 2 +/run/beamOn 1 diff --git a/examples/basic/B4/B4a/run2.mac b/examples/basic/B4/B4a/run2.mac index 35e16a69017..93c811633eb 100644 --- a/examples/basic/B4/B4a/run2.mac +++ b/examples/basic/B4/B4a/run2.mac @@ -1,17 +1,23 @@ # Macro file for example B4 -# +# # To be run preferably in batch, without graphics: -# % exampleB4[a,b,c,d] run2.mac +# % exampleB4[a,b,c,d] -m run2.mac +# +# Produce Histograms and Ntuples # #/run/numberOfThreads 4 #/control/cout/ignoreThreadsExcept 0 # +# reduce the verbosity level for EM and hadronic physics +#/process/em/verbose 0 +#/process/had/verbose 0 +# /run/initialize # -# Default kinemtics: -# electron 50 MeV in direction (0.,0.,1.) -# 1000 events +# Default kinemtics: +# electron 300 MeV in direction (0.,0.,1.) +# 10000 events # -/run/printProgress 100 -/run/beamOn 1000 +/run/printProgress 1000 +/run/beamOn 10000 diff --git a/examples/basic/B4/B4a/src/EventAction.cc b/examples/basic/B4/B4a/src/EventAction.cc index 30b804e8a70..b92313dec0e 100644 --- a/examples/basic/B4/B4a/src/EventAction.cc +++ b/examples/basic/B4/B4a/src/EventAction.cc @@ -56,9 +56,6 @@ void EventAction::BeginOfEventAction(const G4Event* /*event*/) void EventAction::EndOfEventAction(const G4Event* event) { - // Accumulate statistics - // - // get analysis manager auto analysisManager = G4AnalysisManager::Instance(); @@ -80,8 +77,6 @@ void EventAction::EndOfEventAction(const G4Event* event) auto eventID = event->GetEventID(); auto printModulo = G4RunManager::GetRunManager()->GetPrintProgress(); if ( ( printModulo > 0 ) && ( eventID % printModulo == 0 ) ) { - G4cout << "---> End of event: " << eventID << G4endl; - G4cout << " Absorber: total energy: " << std::setw(7) << G4BestUnit(fEnergyAbs,"Energy") @@ -93,9 +88,11 @@ void EventAction::EndOfEventAction(const G4Event* event) << " total track length: " << std::setw(7) << G4BestUnit(fTrackLGap,"Length") << G4endl; + + G4cout << "--> End of event " << eventID << "\n" << G4endl; } } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... -} +} diff --git a/examples/basic/B4/B4a/src/PrimaryGeneratorAction.cc b/examples/basic/B4/B4a/src/PrimaryGeneratorAction.cc index 793ee4eca89..3818a7270ec 100644 --- a/examples/basic/B4/B4a/src/PrimaryGeneratorAction.cc +++ b/examples/basic/B4/B4a/src/PrimaryGeneratorAction.cc @@ -56,7 +56,7 @@ PrimaryGeneratorAction::PrimaryGeneratorAction() = G4ParticleTable::GetParticleTable()->FindParticle("e-"); fParticleGun->SetParticleDefinition(particleDefinition); fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0.,0.,1.)); - fParticleGun->SetParticleEnergy(50.*MeV); + fParticleGun->SetParticleEnergy(300.*MeV); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/basic/B4/B4a/src/RunAction.cc b/examples/basic/B4/B4a/src/RunAction.cc index ba1bcb36f30..63ef0d5497f 100644 --- a/examples/basic/B4/B4a/src/RunAction.cc +++ b/examples/basic/B4/B4a/src/RunAction.cc @@ -61,11 +61,11 @@ RunAction::RunAction() // // Creating histograms - analysisManager->CreateH1("Eabs","Edep in absorber", 100, 0., 800*MeV); - analysisManager->CreateH1("Egap","Edep in gap", 100, 0., 100*MeV); - analysisManager->CreateH1("Labs","trackL in absorber", 100, 0., 1*m); - analysisManager->CreateH1("Lgap","trackL in gap", 100, 0., 50*cm); - + analysisManager->CreateH1("Eabs" ,"Edep in absorber", 110, 0., 330*MeV); + analysisManager->CreateH1("Egap" ,"Edep in gap", 100, 0., 30*MeV); + analysisManager->CreateH1("Labs" ,"trackL in absorber", 100, 0., 50*cm); + analysisManager->CreateH1("Lgap" ,"trackL in gap", 100, 0., 50*cm); + // Creating ntuple // analysisManager->CreateNtuple("B4", "Edep and TrackL"); @@ -131,7 +131,7 @@ void RunAction::EndOfRunAction(const G4Run* /*run*/) G4cout << " LGap : mean = " << G4BestUnit(analysisManager->GetH1(3)->mean(), "Length") << " rms = " - << G4BestUnit(analysisManager->GetH1(3)->rms(), "Length") << G4endl; + << G4BestUnit(analysisManager->GetH1(3)->rms(), "Length") << G4endl; } // save histograms & ntuple diff --git a/examples/basic/B4/B4b/exampleB4b.out b/examples/basic/B4/B4b/exampleB4b.out index 3b73565113f..6fe0702076e 100644 --- a/examples/basic/B4/B4b/exampleB4b.out +++ b/examples/basic/B4/B4b/exampleB4b.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -244,7 +246,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -276,7 +278,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -308,7 +310,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -321,7 +323,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -367,7 +368,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -399,7 +400,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -431,7 +432,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -463,7 +464,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -495,7 +496,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -527,7 +528,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -559,7 +560,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -944,12 +945,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -985,9 +995,10 @@ Setting was ignored. ... open analysis file : B4.root - done Using --> Event 0 starts. ----> End of event: 0 Absorber: total energy: 259.894 MeV total track length: 18.9569 cm Gap: total energy: 17.4244 MeV total track length: 8.74398 cm +--> End of event 0 + ----> print histograms statistic for the entire run @@ -1065,9 +1076,10 @@ hFritiofCaptureAtRest,hBertiniCaptureAtRest,muMinusCaptureAtRest, dInela ... open analysis file : B4.root - done Using --> Event 0 starts. ----> End of event: 0 Absorber: total energy: 278.136 MeV total track length: 20.1737 cm Gap: total energy: 19.9095 MeV total track length: 10.0917 cm +--> End of event 0 + ----> print histograms statistic for the entire run @@ -1091,14 +1103,15 @@ View them with "/vis/plot" or "/vis/reviewPlots". ... open analysis file : B4.root - done Using --> Event 0 starts. ----> End of event: 0 Absorber: total energy: 435.043 MeV total track length: 31.1955 cm Gap: total energy: 37.3961 MeV total track length: 18.5223 cm +--> End of event 0 + ----> print histograms statistic for the entire run - EAbs : mean = 435.043 MeV rms = 0 eV - EGap : mean = 37.3961 MeV rms = 0 eV + EAbs : mean = 0 eV rms = 0 eV + EGap : mean = 0 eV rms = 0 eV LAbs : mean = 31.1955 cm rms = 0 fm LGap : mean = 18.5223 cm rms = 0 fm ... write file : B4.root - done diff --git a/examples/basic/B4/B4b/include/RunData.hh b/examples/basic/B4/B4b/include/RunData.hh index 96b45e342eb..401dfd27455 100644 --- a/examples/basic/B4/B4b/include/RunData.hh +++ b/examples/basic/B4/B4b/include/RunData.hh @@ -54,7 +54,7 @@ const G4int kDim = 2; /// - fEdep[], fTrackLength[]. /// /// The data are collected step by step in SteppingAction, and -/// the accumulated values are filled in histograms and entuple +/// the accumulated values are filled in histograms and a Ntuple /// event by event in EventAction. class RunData : public G4Run diff --git a/examples/basic/B4/B4b/plotHisto.C b/examples/basic/B4/B4b/plotHisto.C index 868a742ab54..5a52808e748 100644 --- a/examples/basic/B4/B4b/plotHisto.C +++ b/examples/basic/B4/B4b/plotHisto.C @@ -28,16 +28,17 @@ hist2->Draw("HIST"); // Draw Egap histogram in the pad 3 - // with logaritmic scale for y + TH1D* hist3 = (TH1D*)f.Get("Egap"); c1->cd(3); - gPad->SetLogy(1); + // set logarithmic scale for y + //gPad->SetLogy(1); hist3->Draw("HIST"); // Draw Lgap histogram in the pad 4 - // with logaritmic scale for y c1->cd(4); - gPad->SetLogy(1); + // set logarithmic scale for y + //gPad->SetLogy(1); TH1D* hist4 = (TH1D*)f.Get("Lgap"); hist4->Draw("HIST"); } diff --git a/examples/basic/B4/B4b/plotNtuple.C b/examples/basic/B4/B4b/plotNtuple.C index 086bbd402a9..86f50705b10 100644 --- a/examples/basic/B4/B4b/plotNtuple.C +++ b/examples/basic/B4/B4b/plotNtuple.C @@ -28,15 +28,15 @@ c1->cd(2); ntuple->Draw("Labs"); - // Draw Egap histogram in the pad 3 - // with logaritmic scale for y ?? how to do this? + // Draw Egap histogram in the pad c1->cd(3); - gPad->SetLogy(1); + //set logarithmic scale for y + //gPad->SetLogy(1); ntuple->Draw("Egap"); // Draw Lgap histogram in the pad 4 - // with logaritmic scale for y ?? how to do this? c1->cd(4); - gPad->SetLogy(1); - ntuple->Draw("Egap"); + //set logarithmic scale for y + //gPad->SetLogy(1); + ntuple->Draw("Lgap"); } diff --git a/examples/basic/B4/B4b/run1.mac b/examples/basic/B4/B4b/run1.mac index 18983715a04..14d3cea59b5 100644 --- a/examples/basic/B4/B4b/run1.mac +++ b/examples/basic/B4/B4b/run1.mac @@ -1,44 +1,40 @@ # Macro file for example B4 -# +# # Can be run in batch, without graphic # or interactively: Idle> /control/execute run1.mac -# -# Change the default number of workers (in multi-threading mode) +# +# change the default number of workers (in multi-threading mode) #/run/numberOfThreads 4 # +# Kind of tutorial: +# interactively with visualization, issue the commands one by one: +# Idle> gun/particle mu+ +# Idle> ...etc... +# # Initialize kernel /run/initialize # -# Default kinematics: -# electron 50 MeV in direction (0.,0.,1.) -# 1 event with tracking/verbose -# -/tracking/verbose 1 -/run/beamOn 1 -# -# # muon 300 MeV in direction (0.,0.,1.) -# 3 events -# /gun/particle mu+ -/gun/energy 3 MeV -/run/beamOn 3 +/gun/energy 300 MeV # -# 20 events +/run/beamOn 1 # -/tracking/verbose 0 /run/printProgress 5 -/run/beamOn 20 +/run/beamOn 10 # -# Magnetic field -# -/globalField/setValue 0.2 0 0 tesla -/run/beamOn 3 -# -# Activate/inactivate physics processes +# inactivate multiple scattering process +/process/inactivate msc +/run/beamOn 10 # -/process/list -/process/inactivate eBrem +# set a magnetic field +/globalField/setValue 2 0 0 tesla +/run/beamOn 10 # -/run/beamOn 20 +# re-activate multiple scattering +/process/activate msc +/run/beamOn 10 # +# verbosity +/tracking/verbose 2 +/run/beamOn 1 diff --git a/examples/basic/B4/B4b/run2.mac b/examples/basic/B4/B4b/run2.mac index 35e16a69017..93c811633eb 100644 --- a/examples/basic/B4/B4b/run2.mac +++ b/examples/basic/B4/B4b/run2.mac @@ -1,17 +1,23 @@ # Macro file for example B4 -# +# # To be run preferably in batch, without graphics: -# % exampleB4[a,b,c,d] run2.mac +# % exampleB4[a,b,c,d] -m run2.mac +# +# Produce Histograms and Ntuples # #/run/numberOfThreads 4 #/control/cout/ignoreThreadsExcept 0 # +# reduce the verbosity level for EM and hadronic physics +#/process/em/verbose 0 +#/process/had/verbose 0 +# /run/initialize # -# Default kinemtics: -# electron 50 MeV in direction (0.,0.,1.) -# 1000 events +# Default kinemtics: +# electron 300 MeV in direction (0.,0.,1.) +# 10000 events # -/run/printProgress 100 -/run/beamOn 1000 +/run/printProgress 1000 +/run/beamOn 10000 diff --git a/examples/basic/B4/B4b/src/EventAction.cc b/examples/basic/B4/B4b/src/EventAction.cc index eb632ce64bd..8d11bc63a56 100644 --- a/examples/basic/B4/B4b/src/EventAction.cc +++ b/examples/basic/B4/B4b/src/EventAction.cc @@ -45,7 +45,7 @@ namespace B4b void EventAction::PrintEventStatistics( G4double absoEdep, G4double absoTrackLength, G4double gapEdep, G4double gapTrackLength) const -{ +{ // print event statistics G4cout << " Absorber: total energy: " @@ -84,13 +84,12 @@ void EventAction::EndOfEventAction(const G4Event* event) auto eventID = event->GetEventID(); auto printModulo = G4RunManager::GetRunManager()->GetPrintProgress(); if ( ( printModulo > 0 ) && ( eventID % printModulo == 0 ) ) { - G4cout << "---> End of event: " << eventID << G4endl; - PrintEventStatistics( runData->GetEdep(kAbs), runData->GetTrackLength(kAbs), runData->GetEdep(kGap), runData->GetTrackLength(kGap)); + G4cout << "--> End of event " << eventID << "\n" << G4endl; } } diff --git a/examples/basic/B4/B4b/src/PrimaryGeneratorAction.cc b/examples/basic/B4/B4b/src/PrimaryGeneratorAction.cc index b63d8bb51f1..f179cac9978 100644 --- a/examples/basic/B4/B4b/src/PrimaryGeneratorAction.cc +++ b/examples/basic/B4/B4b/src/PrimaryGeneratorAction.cc @@ -56,7 +56,7 @@ PrimaryGeneratorAction::PrimaryGeneratorAction() = G4ParticleTable::GetParticleTable()->FindParticle("e-"); fParticleGun->SetParticleDefinition(particleDefinition); fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0.,0.,1.)); - fParticleGun->SetParticleEnergy(50.*MeV); + fParticleGun->SetParticleEnergy(300.*MeV); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/basic/B4/B4b/src/RunAction.cc b/examples/basic/B4/B4b/src/RunAction.cc index 1b9d4d04d3c..7683ffbdf85 100644 --- a/examples/basic/B4/B4b/src/RunAction.cc +++ b/examples/basic/B4/B4b/src/RunAction.cc @@ -62,11 +62,11 @@ RunAction::RunAction() // // Creating histograms - analysisManager->CreateH1("Eabs","Edep in absorber", 100, 0., 800*MeV); - analysisManager->CreateH1("Egap","Edep in gap", 100, 0., 100*MeV); - analysisManager->CreateH1("Labs","trackL in absorber", 100, 0., 1*m); - analysisManager->CreateH1("Lgap","trackL in gap", 100, 0., 50*cm); - + analysisManager->CreateH1("Eabs" ,"Edep in absorber", 110, 0., 330*MeV); + analysisManager->CreateH1("Egap" ,"Edep in gap", 100, 0., 30*MeV); + analysisManager->CreateH1("Labs" ,"trackL in absorber", 100, 0., 50*cm); + analysisManager->CreateH1("Lgap" ,"trackL in gap", 100, 0., 50*cm); + // Creating ntuple // analysisManager->CreateNtuple("B4", "Edep and TrackL"); diff --git a/examples/basic/B4/B4b/src/RunData.cc b/examples/basic/B4/B4b/src/RunData.cc index d41c20fb690..e7789e4f479 100644 --- a/examples/basic/B4/B4b/src/RunData.cc +++ b/examples/basic/B4/B4b/src/RunData.cc @@ -44,7 +44,7 @@ void RunData::FillPerEvent() auto analysisManager = G4AnalysisManager::Instance(); // accumulate statistic - // in the order od the histograms, ntuple columns declarations + // in the order of the histograms, ntuple columns declarations G4int counter = 0; for ( auto edep : fEdep ) { analysisManager->FillH1(counter, edep); @@ -54,6 +54,7 @@ void RunData::FillPerEvent() analysisManager->FillH1(counter, trackLength); analysisManager->FillNtupleDColumn(counter++, trackLength); } + analysisManager->AddNtupleRow(); } diff --git a/examples/basic/B4/B4c/exampleB4c.out b/examples/basic/B4/B4c/exampleB4c.out index 2c978faa9c5..b3c9b3d054a 100644 --- a/examples/basic/B4/B4c/exampleB4c.out +++ b/examples/basic/B4/B4c/exampleB4c.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -244,7 +246,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -276,7 +278,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -308,7 +310,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -321,7 +323,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -367,7 +368,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -399,7 +400,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -431,7 +432,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -463,7 +464,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -495,7 +496,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -527,7 +528,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -559,7 +560,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -944,12 +945,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -984,9 +994,10 @@ Setting was ignored. ... open analysis file : B4.root - done Using --> Event 0 starts. ----> End of event: 0 Absorber: total energy: 259.894 MeV total track length: 18.9569 cm Gap: total energy: 17.4244 MeV total track length: 8.74398 cm +--> End of event: 0 + ----> print histograms statistic for the entire run @@ -1063,9 +1074,10 @@ hFritiofCaptureAtRest,hBertiniCaptureAtRest,muMinusCaptureAtRest, dInela ... open analysis file : B4.root - done Using --> Event 0 starts. ----> End of event: 0 Absorber: total energy: 278.136 MeV total track length: 20.1737 cm Gap: total energy: 19.9095 MeV total track length: 10.0917 cm +--> End of event: 0 + ----> print histograms statistic for the entire run @@ -1088,14 +1100,15 @@ View them with "/vis/plot" or "/vis/reviewPlots". ... open analysis file : B4.root - done Using --> Event 0 starts. ----> End of event: 0 Absorber: total energy: 435.043 MeV total track length: 31.1955 cm Gap: total energy: 37.3961 MeV total track length: 18.5223 cm +--> End of event: 0 + ----> print histograms statistic for the entire run - EAbs : mean = 435.043 MeV rms = 0 eV - EGap : mean = 37.3961 MeV rms = 0 eV + EAbs : mean = 0 eV rms = 0 eV + EGap : mean = 0 eV rms = 0 eV LAbs : mean = 31.1955 cm rms = 0 fm LGap : mean = 18.5223 cm rms = 0 fm ... write file : B4.root - done diff --git a/examples/basic/B4/B4c/plotHisto.C b/examples/basic/B4/B4c/plotHisto.C index 868a742ab54..5a52808e748 100644 --- a/examples/basic/B4/B4c/plotHisto.C +++ b/examples/basic/B4/B4c/plotHisto.C @@ -28,16 +28,17 @@ hist2->Draw("HIST"); // Draw Egap histogram in the pad 3 - // with logaritmic scale for y + TH1D* hist3 = (TH1D*)f.Get("Egap"); c1->cd(3); - gPad->SetLogy(1); + // set logarithmic scale for y + //gPad->SetLogy(1); hist3->Draw("HIST"); // Draw Lgap histogram in the pad 4 - // with logaritmic scale for y c1->cd(4); - gPad->SetLogy(1); + // set logarithmic scale for y + //gPad->SetLogy(1); TH1D* hist4 = (TH1D*)f.Get("Lgap"); hist4->Draw("HIST"); } diff --git a/examples/basic/B4/B4c/plotNtuple.C b/examples/basic/B4/B4c/plotNtuple.C index 086bbd402a9..86f50705b10 100644 --- a/examples/basic/B4/B4c/plotNtuple.C +++ b/examples/basic/B4/B4c/plotNtuple.C @@ -28,15 +28,15 @@ c1->cd(2); ntuple->Draw("Labs"); - // Draw Egap histogram in the pad 3 - // with logaritmic scale for y ?? how to do this? + // Draw Egap histogram in the pad c1->cd(3); - gPad->SetLogy(1); + //set logarithmic scale for y + //gPad->SetLogy(1); ntuple->Draw("Egap"); // Draw Lgap histogram in the pad 4 - // with logaritmic scale for y ?? how to do this? c1->cd(4); - gPad->SetLogy(1); - ntuple->Draw("Egap"); + //set logarithmic scale for y + //gPad->SetLogy(1); + ntuple->Draw("Lgap"); } diff --git a/examples/basic/B4/B4c/run1.mac b/examples/basic/B4/B4c/run1.mac index 18983715a04..14d3cea59b5 100644 --- a/examples/basic/B4/B4c/run1.mac +++ b/examples/basic/B4/B4c/run1.mac @@ -1,44 +1,40 @@ # Macro file for example B4 -# +# # Can be run in batch, without graphic # or interactively: Idle> /control/execute run1.mac -# -# Change the default number of workers (in multi-threading mode) +# +# change the default number of workers (in multi-threading mode) #/run/numberOfThreads 4 # +# Kind of tutorial: +# interactively with visualization, issue the commands one by one: +# Idle> gun/particle mu+ +# Idle> ...etc... +# # Initialize kernel /run/initialize # -# Default kinematics: -# electron 50 MeV in direction (0.,0.,1.) -# 1 event with tracking/verbose -# -/tracking/verbose 1 -/run/beamOn 1 -# -# # muon 300 MeV in direction (0.,0.,1.) -# 3 events -# /gun/particle mu+ -/gun/energy 3 MeV -/run/beamOn 3 +/gun/energy 300 MeV # -# 20 events +/run/beamOn 1 # -/tracking/verbose 0 /run/printProgress 5 -/run/beamOn 20 +/run/beamOn 10 # -# Magnetic field -# -/globalField/setValue 0.2 0 0 tesla -/run/beamOn 3 -# -# Activate/inactivate physics processes +# inactivate multiple scattering process +/process/inactivate msc +/run/beamOn 10 # -/process/list -/process/inactivate eBrem +# set a magnetic field +/globalField/setValue 2 0 0 tesla +/run/beamOn 10 # -/run/beamOn 20 +# re-activate multiple scattering +/process/activate msc +/run/beamOn 10 # +# verbosity +/tracking/verbose 2 +/run/beamOn 1 diff --git a/examples/basic/B4/B4c/run2.mac b/examples/basic/B4/B4c/run2.mac index 35e16a69017..93c811633eb 100644 --- a/examples/basic/B4/B4c/run2.mac +++ b/examples/basic/B4/B4c/run2.mac @@ -1,17 +1,23 @@ # Macro file for example B4 -# +# # To be run preferably in batch, without graphics: -# % exampleB4[a,b,c,d] run2.mac +# % exampleB4[a,b,c,d] -m run2.mac +# +# Produce Histograms and Ntuples # #/run/numberOfThreads 4 #/control/cout/ignoreThreadsExcept 0 # +# reduce the verbosity level for EM and hadronic physics +#/process/em/verbose 0 +#/process/had/verbose 0 +# /run/initialize # -# Default kinemtics: -# electron 50 MeV in direction (0.,0.,1.) -# 1000 events +# Default kinemtics: +# electron 300 MeV in direction (0.,0.,1.) +# 10000 events # -/run/printProgress 100 -/run/beamOn 1000 +/run/printProgress 1000 +/run/beamOn 10000 diff --git a/examples/basic/B4/B4c/src/EventAction.cc b/examples/basic/B4/B4c/src/EventAction.cc index 71be7eba9b5..1273839fe3d 100644 --- a/examples/basic/B4/B4c/src/EventAction.cc +++ b/examples/basic/B4/B4c/src/EventAction.cc @@ -114,11 +114,10 @@ void EventAction::EndOfEventAction(const G4Event* event) auto eventID = event->GetEventID(); auto printModulo = G4RunManager::GetRunManager()->GetPrintProgress(); if ( ( printModulo > 0 ) && ( eventID % printModulo == 0 ) ) { - G4cout << "---> End of event: " << eventID << G4endl; - PrintEventStatistics( absoHit->GetEdep(), absoHit->GetTrackLength(), gapHit->GetEdep(), gapHit->GetTrackLength()); + G4cout << "--> End of event: " << eventID << "\n" << G4endl; } // Fill histograms, ntuple diff --git a/examples/basic/B4/B4c/src/PrimaryGeneratorAction.cc b/examples/basic/B4/B4c/src/PrimaryGeneratorAction.cc index cdd659b3e71..8e9fc7bcd72 100644 --- a/examples/basic/B4/B4c/src/PrimaryGeneratorAction.cc +++ b/examples/basic/B4/B4c/src/PrimaryGeneratorAction.cc @@ -56,7 +56,7 @@ PrimaryGeneratorAction::PrimaryGeneratorAction() = G4ParticleTable::GetParticleTable()->FindParticle("e-"); fParticleGun->SetParticleDefinition(particleDefinition); fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0.,0.,1.)); - fParticleGun->SetParticleEnergy(50.*MeV); + fParticleGun->SetParticleEnergy(300.*MeV); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/basic/B4/B4c/src/RunAction.cc b/examples/basic/B4/B4c/src/RunAction.cc index 12665c666ae..7334ca88511 100644 --- a/examples/basic/B4/B4c/src/RunAction.cc +++ b/examples/basic/B4/B4c/src/RunAction.cc @@ -61,9 +61,9 @@ RunAction::RunAction() // // Creating histograms - analysisManager->CreateH1("Eabs","Edep in absorber", 100, 0., 800*MeV); - analysisManager->CreateH1("Egap","Edep in gap", 100, 0., 100*MeV); - analysisManager->CreateH1("Labs","trackL in absorber", 100, 0., 1*m); + analysisManager->CreateH1("Eabs","Edep in absorber", 110, 0., 330*MeV); + analysisManager->CreateH1("Egap","Edep in gap", 100, 0., 30*MeV); + analysisManager->CreateH1("Labs","trackL in absorber", 100, 0., 50*cm); analysisManager->CreateH1("Lgap","trackL in gap", 100, 0., 50*cm); // Creating ntuple diff --git a/examples/basic/B4/B4d/exampleB4d.out b/examples/basic/B4/B4d/exampleB4d.out index 7b4cd3cc5fc..da87dedefac 100644 --- a/examples/basic/B4/B4d/exampleB4d.out +++ b/examples/basic/B4/B4d/exampleB4d.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -248,7 +250,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -280,7 +282,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -312,7 +314,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -325,7 +327,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -371,7 +372,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -403,7 +404,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -435,7 +436,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -467,7 +468,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -499,7 +500,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -531,7 +532,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -563,7 +564,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -948,12 +949,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -988,9 +998,10 @@ Setting was ignored. ... open analysis file : B4.root - done Using --> Event 0 starts. ----> End of event: 0 Absorber: total energy: 259.894 MeV total track length: 18.9569 cm Gap: total energy: 17.4244 MeV total track length: 8.74398 cm +--> End of event: 0 + ----> print histograms statistic for the entire run @@ -1067,9 +1078,10 @@ hFritiofCaptureAtRest,hBertiniCaptureAtRest,muMinusCaptureAtRest, dInela ... open analysis file : B4.root - done Using --> Event 0 starts. ----> End of event: 0 Absorber: total energy: 278.136 MeV total track length: 20.1737 cm Gap: total energy: 19.9095 MeV total track length: 10.0917 cm +--> End of event: 0 + ----> print histograms statistic for the entire run @@ -1092,14 +1104,15 @@ View them with "/vis/plot" or "/vis/reviewPlots". ... open analysis file : B4.root - done Using --> Event 0 starts. ----> End of event: 0 Absorber: total energy: 435.043 MeV total track length: 31.1955 cm Gap: total energy: 37.3961 MeV total track length: 18.5223 cm +--> End of event: 0 + ----> print histograms statistic for the entire run - EAbs : mean = 435.043 MeV rms = 0 eV - EGap : mean = 37.3961 MeV rms = 0 eV + EAbs : mean = 0 eV rms = 0 eV + EGap : mean = 0 eV rms = 0 eV LAbs : mean = 31.1955 cm rms = 0 fm LGap : mean = 18.5223 cm rms = 0 fm ... write file : B4.root - done @@ -1113,4 +1126,4 @@ List them with "/analysis/list". View them with "/vis/plot" or "/vis/reviewPlots". Graphics systems deleted. Visualization Manager deleting... -### deleting chargedFilter 0x244c3c0 +### deleting chargedFilter 0x105a4e0 diff --git a/examples/basic/B4/B4d/plotHisto.C b/examples/basic/B4/B4d/plotHisto.C index 868a742ab54..5a52808e748 100644 --- a/examples/basic/B4/B4d/plotHisto.C +++ b/examples/basic/B4/B4d/plotHisto.C @@ -28,16 +28,17 @@ hist2->Draw("HIST"); // Draw Egap histogram in the pad 3 - // with logaritmic scale for y + TH1D* hist3 = (TH1D*)f.Get("Egap"); c1->cd(3); - gPad->SetLogy(1); + // set logarithmic scale for y + //gPad->SetLogy(1); hist3->Draw("HIST"); // Draw Lgap histogram in the pad 4 - // with logaritmic scale for y c1->cd(4); - gPad->SetLogy(1); + // set logarithmic scale for y + //gPad->SetLogy(1); TH1D* hist4 = (TH1D*)f.Get("Lgap"); hist4->Draw("HIST"); } diff --git a/examples/basic/B4/B4d/plotNtuple.C b/examples/basic/B4/B4d/plotNtuple.C index 086bbd402a9..86f50705b10 100644 --- a/examples/basic/B4/B4d/plotNtuple.C +++ b/examples/basic/B4/B4d/plotNtuple.C @@ -28,15 +28,15 @@ c1->cd(2); ntuple->Draw("Labs"); - // Draw Egap histogram in the pad 3 - // with logaritmic scale for y ?? how to do this? + // Draw Egap histogram in the pad c1->cd(3); - gPad->SetLogy(1); + //set logarithmic scale for y + //gPad->SetLogy(1); ntuple->Draw("Egap"); // Draw Lgap histogram in the pad 4 - // with logaritmic scale for y ?? how to do this? c1->cd(4); - gPad->SetLogy(1); - ntuple->Draw("Egap"); + //set logarithmic scale for y + //gPad->SetLogy(1); + ntuple->Draw("Lgap"); } diff --git a/examples/basic/B4/B4d/run1.mac b/examples/basic/B4/B4d/run1.mac index 18983715a04..14d3cea59b5 100644 --- a/examples/basic/B4/B4d/run1.mac +++ b/examples/basic/B4/B4d/run1.mac @@ -1,44 +1,40 @@ # Macro file for example B4 -# +# # Can be run in batch, without graphic # or interactively: Idle> /control/execute run1.mac -# -# Change the default number of workers (in multi-threading mode) +# +# change the default number of workers (in multi-threading mode) #/run/numberOfThreads 4 # +# Kind of tutorial: +# interactively with visualization, issue the commands one by one: +# Idle> gun/particle mu+ +# Idle> ...etc... +# # Initialize kernel /run/initialize # -# Default kinematics: -# electron 50 MeV in direction (0.,0.,1.) -# 1 event with tracking/verbose -# -/tracking/verbose 1 -/run/beamOn 1 -# -# # muon 300 MeV in direction (0.,0.,1.) -# 3 events -# /gun/particle mu+ -/gun/energy 3 MeV -/run/beamOn 3 +/gun/energy 300 MeV # -# 20 events +/run/beamOn 1 # -/tracking/verbose 0 /run/printProgress 5 -/run/beamOn 20 +/run/beamOn 10 # -# Magnetic field -# -/globalField/setValue 0.2 0 0 tesla -/run/beamOn 3 -# -# Activate/inactivate physics processes +# inactivate multiple scattering process +/process/inactivate msc +/run/beamOn 10 # -/process/list -/process/inactivate eBrem +# set a magnetic field +/globalField/setValue 2 0 0 tesla +/run/beamOn 10 # -/run/beamOn 20 +# re-activate multiple scattering +/process/activate msc +/run/beamOn 10 # +# verbosity +/tracking/verbose 2 +/run/beamOn 1 diff --git a/examples/basic/B4/B4d/run2.mac b/examples/basic/B4/B4d/run2.mac index e301402e42c..93c811633eb 100644 --- a/examples/basic/B4/B4d/run2.mac +++ b/examples/basic/B4/B4d/run2.mac @@ -1,19 +1,23 @@ # Macro file for example B4 -# +# # To be run preferably in batch, without graphics: -# % exampleB4[a,b,c,d] run2.mac +# % exampleB4[a,b,c,d] -m run2.mac +# +# Produce Histograms and Ntuples # #/run/numberOfThreads 4 #/control/cout/ignoreThreadsExcept 0 # -/run/initialize +# reduce the verbosity level for EM and hadronic physics +#/process/em/verbose 0 +#/process/had/verbose 0 # -# Default kinemtics: -# electron 50 MeV in direction (0.,0.,1.) -# 1000 events +/run/initialize # -/run/printProgress 100 -/score/ntuple/writerVerbose 1 +# Default kinemtics: +# electron 300 MeV in direction (0.,0.,1.) +# 10000 events # -/run/beamOn 1000 +/run/printProgress 1000 +/run/beamOn 10000 diff --git a/examples/basic/B4/B4d/src/EventAction.cc b/examples/basic/B4/B4d/src/EventAction.cc index 2a086631418..4a7e98e725f 100644 --- a/examples/basic/B4/B4d/src/EventAction.cc +++ b/examples/basic/B4/B4d/src/EventAction.cc @@ -149,8 +149,8 @@ void EventAction::EndOfEventAction(const G4Event* event) auto eventID = event->GetEventID(); auto printModulo = G4RunManager::GetRunManager()->GetPrintProgress(); if ( ( printModulo > 0 ) && ( eventID % printModulo == 0 ) ) { - G4cout << "---> End of event: " << eventID << G4endl; PrintEventStatistics(absoEdep, absoTrackLength, gapEdep, gapTrackLength); + G4cout << "--> End of event: " << eventID << "\n" << G4endl; } } diff --git a/examples/basic/B4/B4d/src/PrimaryGeneratorAction.cc b/examples/basic/B4/B4d/src/PrimaryGeneratorAction.cc index b993401ce7a..17f5fd142af 100644 --- a/examples/basic/B4/B4d/src/PrimaryGeneratorAction.cc +++ b/examples/basic/B4/B4d/src/PrimaryGeneratorAction.cc @@ -56,7 +56,7 @@ PrimaryGeneratorAction::PrimaryGeneratorAction() = G4ParticleTable::GetParticleTable()->FindParticle("e-"); fParticleGun->SetParticleDefinition(particleDefinition); fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0.,0.,1.)); - fParticleGun->SetParticleEnergy(50.*MeV); + fParticleGun->SetParticleEnergy(300.*MeV); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/basic/B4/B4d/src/RunAction.cc b/examples/basic/B4/B4d/src/RunAction.cc index 5be64c55ce3..41e7971e1ac 100644 --- a/examples/basic/B4/B4d/src/RunAction.cc +++ b/examples/basic/B4/B4d/src/RunAction.cc @@ -61,9 +61,9 @@ RunAction::RunAction() // // Creating histograms - analysisManager->CreateH1("Eabs","Edep in absorber", 100, 0., 800*MeV); - analysisManager->CreateH1("Egap","Edep in gap", 100, 0., 100*MeV); - analysisManager->CreateH1("Labs","trackL in absorber", 100, 0., 1*m); + analysisManager->CreateH1("Eabs","Edep in absorber", 110, 0., 330*MeV); + analysisManager->CreateH1("Egap","Edep in gap", 100, 0., 30*MeV); + analysisManager->CreateH1("Labs","trackL in absorber", 100, 0., 50*cm); analysisManager->CreateH1("Lgap","trackL in gap", 100, 0., 50*cm); // Creating ntuple diff --git a/examples/basic/B4/History b/examples/basic/B4/History index 4200beeaa8e..68c8e4a23fe 100644 --- a/examples/basic/B4/History +++ b/examples/basic/B4/History @@ -4,6 +4,10 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-01-30 M. Maire (exampleB4-V11-01-00) +- PrimaryGeneratorAction: default e-, 300 MeV +- RunAction: adjust binning of histograms +- update of run1.mac and run2.mac ## 2022-11-29 I. Hrivnacova (exampleB4-V11-00-02) - Activated merging ntuples with score ntuple writer in B4d diff --git a/examples/basic/B4/README b/examples/basic/B4/README index 9fde52e7d6f..3a7abb64c04 100644 --- a/examples/basic/B4/README +++ b/examples/basic/B4/README @@ -10,7 +10,7 @@ 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) + (See also examples/extended/electromagnetic/TestEm3 or hadronic/Hadr05) 1- GEOMETRY DEFINITION @@ -45,7 +45,7 @@ ========================================================================== A more general version of this geometry can be found in: - examples/extended/electromagnetic/TestEm3 + examples/extended/electromagnetic/TestEm3 or hadronic/Hadr05 where all the geometry parameters, the absorber and gap materials can be modified interactively via the commands defined in the DetectorMessenger class. @@ -169,6 +169,7 @@ - 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 diff --git a/examples/basic/B4/macros/plotHisto.C b/examples/basic/B4/macros/plotHisto.C index 868a742ab54..5a52808e748 100644 --- a/examples/basic/B4/macros/plotHisto.C +++ b/examples/basic/B4/macros/plotHisto.C @@ -28,16 +28,17 @@ hist2->Draw("HIST"); // Draw Egap histogram in the pad 3 - // with logaritmic scale for y + TH1D* hist3 = (TH1D*)f.Get("Egap"); c1->cd(3); - gPad->SetLogy(1); + // set logarithmic scale for y + //gPad->SetLogy(1); hist3->Draw("HIST"); // Draw Lgap histogram in the pad 4 - // with logaritmic scale for y c1->cd(4); - gPad->SetLogy(1); + // set logarithmic scale for y + //gPad->SetLogy(1); TH1D* hist4 = (TH1D*)f.Get("Lgap"); hist4->Draw("HIST"); } diff --git a/examples/basic/B4/macros/plotNtuple.C b/examples/basic/B4/macros/plotNtuple.C index 086bbd402a9..86f50705b10 100644 --- a/examples/basic/B4/macros/plotNtuple.C +++ b/examples/basic/B4/macros/plotNtuple.C @@ -28,15 +28,15 @@ c1->cd(2); ntuple->Draw("Labs"); - // Draw Egap histogram in the pad 3 - // with logaritmic scale for y ?? how to do this? + // Draw Egap histogram in the pad c1->cd(3); - gPad->SetLogy(1); + //set logarithmic scale for y + //gPad->SetLogy(1); ntuple->Draw("Egap"); // Draw Lgap histogram in the pad 4 - // with logaritmic scale for y ?? how to do this? c1->cd(4); - gPad->SetLogy(1); - ntuple->Draw("Egap"); + //set logarithmic scale for y + //gPad->SetLogy(1); + ntuple->Draw("Lgap"); } diff --git a/examples/basic/B4/macros/run1.mac b/examples/basic/B4/macros/run1.mac index 18983715a04..14d3cea59b5 100644 --- a/examples/basic/B4/macros/run1.mac +++ b/examples/basic/B4/macros/run1.mac @@ -1,44 +1,40 @@ # Macro file for example B4 -# +# # Can be run in batch, without graphic # or interactively: Idle> /control/execute run1.mac -# -# Change the default number of workers (in multi-threading mode) +# +# change the default number of workers (in multi-threading mode) #/run/numberOfThreads 4 # +# Kind of tutorial: +# interactively with visualization, issue the commands one by one: +# Idle> gun/particle mu+ +# Idle> ...etc... +# # Initialize kernel /run/initialize # -# Default kinematics: -# electron 50 MeV in direction (0.,0.,1.) -# 1 event with tracking/verbose -# -/tracking/verbose 1 -/run/beamOn 1 -# -# # muon 300 MeV in direction (0.,0.,1.) -# 3 events -# /gun/particle mu+ -/gun/energy 3 MeV -/run/beamOn 3 +/gun/energy 300 MeV # -# 20 events +/run/beamOn 1 # -/tracking/verbose 0 /run/printProgress 5 -/run/beamOn 20 +/run/beamOn 10 # -# Magnetic field -# -/globalField/setValue 0.2 0 0 tesla -/run/beamOn 3 -# -# Activate/inactivate physics processes +# inactivate multiple scattering process +/process/inactivate msc +/run/beamOn 10 # -/process/list -/process/inactivate eBrem +# set a magnetic field +/globalField/setValue 2 0 0 tesla +/run/beamOn 10 # -/run/beamOn 20 +# re-activate multiple scattering +/process/activate msc +/run/beamOn 10 # +# verbosity +/tracking/verbose 2 +/run/beamOn 1 diff --git a/examples/basic/B4/macros/run2.mac b/examples/basic/B4/macros/run2.mac index 35e16a69017..93c811633eb 100644 --- a/examples/basic/B4/macros/run2.mac +++ b/examples/basic/B4/macros/run2.mac @@ -1,17 +1,23 @@ # Macro file for example B4 -# +# # To be run preferably in batch, without graphics: -# % exampleB4[a,b,c,d] run2.mac +# % exampleB4[a,b,c,d] -m run2.mac +# +# Produce Histograms and Ntuples # #/run/numberOfThreads 4 #/control/cout/ignoreThreadsExcept 0 # +# reduce the verbosity level for EM and hadronic physics +#/process/em/verbose 0 +#/process/had/verbose 0 +# /run/initialize # -# Default kinemtics: -# electron 50 MeV in direction (0.,0.,1.) -# 1000 events +# Default kinemtics: +# electron 300 MeV in direction (0.,0.,1.) +# 10000 events # -/run/printProgress 100 -/run/beamOn 1000 +/run/printProgress 1000 +/run/beamOn 10000 diff --git a/examples/basic/B5/exampleB5.out b/examples/basic/B5/exampleB5.out index c2e2786b1fa..7fd8a81d2b3 100644 --- a/examples/basic/B5/exampleB5.out +++ b/examples/basic/B5/exampleB5.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -216,6 +218,7 @@ Checking overlaps for volume wirePlane2Physical:0 (G4Box) ... OK! Checking overlaps for volume EMcalorimeterPhysical:0 (G4Box) ... OK! Checking overlaps for volume HadCalorimeterPhysical:0 (G4Box) ... OK! Checking overlaps for volume HadCalScintiPhysical:0 (G4Box) ... OK! + G4ChordFinder: stepperDriverId: 2 hInelastic FTFP_BERT : threshold between BERT and FTFP is over the interval for pions : 3 to 6 GeV @@ -341,7 +344,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -373,7 +376,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -405,7 +408,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -418,7 +421,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -464,7 +466,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -496,7 +498,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -528,7 +530,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -560,7 +562,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -592,7 +594,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -624,7 +626,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -656,7 +658,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1041,12 +1043,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1086,83 +1097,79 @@ Setting was ignored. Hodoscope 1 has 1 hits. Hodoscope[7] 4.9870027260872 (nsec) Hodoscope 2 has 0 hits. -Drift Chamber 1 has 63 hits. - Layer[0] : time 6.6722253322166 (nsec) --- local (x,y) -2.1685854985035, -10.525684260597 - Layer[0] : time 6.6728346305255 (nsec) --- local (x,y) -12.557292974387, 16.601797991417 - Layer[0] : time 6.7034113361215 (nsec) --- local (x,y) 76.758224463858, 35.517416260083 - Layer[0] : time 6.7931713258041 (nsec) --- local (x,y) -185.78420850895, 47.276037854517 - Layer[0] : time 6.6746165368572 (nsec) --- local (x,y) -19.104026678652, 6.4173120305777 - Layer[0] : time 6.6730705403772 (nsec) --- local (x,y) 0.18897396250319, 20.47248843261 - Layer[0] : time 6.6748044840636 (nsec) --- local (x,y) -20.096094345897, -22.156067709552 - Layer[0] : time 6.6762234030177 (nsec) --- local (x,y) -12.656944643019, -34.596649574485 - Layer[0] : time 6.9439051600443 (nsec) --- local (x,y) 144.39860144463, -143.00049797841 - Layer[0] : time 6.6947683742471 (nsec) --- local (x,y) 61.810699203754, -15.110155825856 - Layer[0] : time 6.7487556731754 (nsec) --- local (x,y) -124.2721196614, 64.121292076136 - Layer[0] : time 6.7359767319569 (nsec) --- local (x,y) 113.96735852711, -74.960391568248 - Layer[1] : time 8.3410946312362 (nsec) --- local (x,y) -4.3322607935703, -20.96936373715 - Layer[1] : time 8.3423162577584 (nsec) --- local (x,y) -25.050159762211, 33.123606436138 - Layer[1] : time 8.4582970758693 (nsec) --- local (x,y) -14.864845486195, 26.466995362086 - Layer[1] : time 8.4032608189641 (nsec) --- local (x,y) 153.0020585377, 70.766590893104 - Layer[1] : time 8.5968880065256 (nsec) --- local (x,y) -387.43082997319, 69.079007805945 - Layer[1] : time 8.3458641304179 (nsec) --- local (x,y) -38.115235951044, 12.73881552497 - Layer[1] : time 8.3427777645078 (nsec) --- local (x,y) 0.4197820465424, 40.775163495984 - Layer[1] : time 8.3462304577727 (nsec) --- local (x,y) -40.06631099817, -44.121506038499 - Layer[1] : time 8.3490589730768 (nsec) --- local (x,y) -25.198546304227, -68.95134806468 - Layer[1] : time 9.458437862404 (nsec) --- local (x,y) -351.81703380379, -136.38223060013 - Layer[1] : time 9.4841904016032 (nsec) --- local (x,y) -356.96109408962, -137.84255712007 - Layer[1] : time 10.338164107706 (nsec) --- local (x,y) -495.82901580199, -130.02364234748 - Layer[1] : time 9.4841904016032 (nsec) --- local (x,y) -356.96109408962, -137.84255712007 - Layer[1] : time 9.485084536918 (nsec) --- local (x,y) -356.9651393836, -137.81481792071 - Layer[1] : time 8.8829962782289 (nsec) --- local (x,y) 288.17158786216, -284.96072634726 - Layer[1] : time 8.38610348146 (nsec) --- local (x,y) 123.35158328979, -30.211348091188 - Layer[1] : time 8.4935800565261 (nsec) --- local (x,y) -247.73123297303, 127.5852680885 - Layer[1] : time 8.4681464053809 (nsec) --- local (x,y) 227.15464619012, -149.36254788093 - Layer[2] : time 10.009963172665 (nsec) --- local (x,y) -6.4890580953253, -31.403184049773 - Layer[2] : time 10.011803458284 (nsec) --- local (x,y) -37.56455842733, 49.679564420533 - Layer[2] : time 10.216719347526 (nsec) --- local (x,y) 12.901390579095, 5.8374719766334 - Layer[2] : time 10.103110671792 (nsec) --- local (x,y) 229.25359183296, 106.00009856174 - Layer[2] : time 10.449445667584 (nsec) --- local (x,y) -625.25462931036, 99.295460493236 - Layer[2] : time 10.017112144142 (nsec) --- local (x,y) -57.148807770758, 18.999547455673 - Layer[2] : time 10.012486443951 (nsec) --- local (x,y) 0.61976823517652, 61.088740964513 - Layer[2] : time 10.017650961876 (nsec) --- local (x,y) -60.009898025177, -66.073544405584 - Layer[2] : time 10.021870981721 (nsec) --- local (x,y) -37.693986929126, -103.2194994205 - Layer[2] : time 10.077539523764 (nsec) --- local (x,y) 185.13139061181, -45.324951639198 - Layer[2] : time 10.238597003307 (nsec) --- local (x,y) -371.40194876634, 191.10007219017 - Layer[2] : time 10.200329347944 (nsec) --- local (x,y) 340.3496914619, -223.77975969483 - Layer[3] : time 11.678828696002 (nsec) --- local (x,y) -8.5971371347705, -41.803170730572 - Layer[3] : time 11.681296729113 (nsec) --- local (x,y) -50.101217522118, 66.273475748036 - Layer[3] : time 11.802969669332 (nsec) --- local (x,y) 305.51894957032, 141.24185608967 - Layer[3] : time 12.357695752301 (nsec) --- local (x,y) -898.7694809281, 128.80781186467 - Layer[3] : time 11.688365638661 (nsec) --- local (x,y) -76.224985085738, 25.259186468106 - Layer[3] : time 11.682190005469 (nsec) --- local (x,y) 0.80057346085262, 81.364591208999 - Layer[3] : time 11.689069304722 (nsec) --- local (x,y) -79.962738263177, -88.002249555014 - Layer[3] : time 11.722256314325 (nsec) --- local (x,y) -83.80850846214, -100.7516858728 - Layer[3] : time 11.694692290901 (nsec) --- local (x,y) -50.209661296555, -137.52094512852 - Layer[3] : time 11.769004216637 (nsec) --- local (x,y) 246.958802611, -60.512115965036 - Layer[3] : time 11.983675434679 (nsec) --- local (x,y) -495.11683356039, 254.67191688908 - Layer[3] : time 11.932549057416 (nsec) --- local (x,y) 453.49991500149, -298.34065212109 - Layer[4] : time 13.347694350342 (nsec) --- local (x,y) -10.67793827205, -52.210139369582 - Layer[4] : time 13.350790766079 (nsec) --- local (x,y) -62.637772561997, 82.874340347317 - Layer[4] : time 13.502816778169 (nsec) --- local (x,y) 381.76671648373, 176.46963263052 - Layer[4] : time 13.359627932097 (nsec) --- local (x,y) -95.362770988034, 31.537594345142 - Layer[4] : time 34.96756477875 (nsec) --- local (x,y) -894.16384976688, 112.56337188601 - Layer[4] : time 13.351891755454 (nsec) --- local (x,y) 0.9673797321392, 101.62696304584 - Layer[4] : time 13.360484863768 (nsec) --- local (x,y) -99.893159592235, -109.93111961074 - Layer[4] : time 13.367502374338 (nsec) --- local (x,y) -62.70392726405, -171.7809061206 - Layer[4] : time 13.460429115776 (nsec) --- local (x,y) 308.69827020305, -75.648618209272 +Drift Chamber 1 has 40 hits. + Layer[0] : time 6.6722060268221 (nsec) --- local (x,y) -2.1091686968979, -10.261386711993 + Layer[0] : time 6.6728465853951 (nsec) --- local (x,y) -12.553169717204, 16.71338252462 + Layer[0] : time 6.7033143997516 (nsec) --- local (x,y) 76.529780586904, 35.673808597678 + Layer[0] : time 6.6956922984748 (nsec) --- local (x,y) 81.875493809974, -0.85477509135731 + Layer[0] : time 6.6730834873078 (nsec) --- local (x,y) 0.34320221060009, 20.56603474755 + Layer[0] : time 6.9484236652371 (nsec) --- local (x,y) 145.98851728137, -146.3787322219 + Layer[0] : time 6.6950342629991 (nsec) --- local (x,y) 62.450410181806, -15.366151447924 + Layer[0] : time 6.9742408021299 (nsec) --- local (x,y) 155.59912002237, -248.03727078031 + Layer[0] : time 6.6820780303212 (nsec) --- local (x,y) -5.572678115684, 30.7039889111 + Layer[1] : time 8.3410574026466 (nsec) --- local (x,y) -4.2125701875237, -20.460922649752 + Layer[1] : time 8.3423315648321 (nsec) --- local (x,y) -24.998165480278, 33.301641464848 + Layer[1] : time 8.4030580509988 (nsec) --- local (x,y) 152.52334869271, 71.088030486401 + Layer[1] : time 8.3878614111963 (nsec) --- local (x,y) 163.22649496452, -1.7298679486029 + Layer[1] : time 8.3428043595827 (nsec) --- local (x,y) 0.68248033180366, 40.967905675569 + Layer[1] : time 8.8918183835432 (nsec) --- local (x,y) 291.53569704491, -291.30514687715 + Layer[1] : time 8.3865897040198 (nsec) --- local (x,y) 124.5233221035, -30.698908575467 + Layer[1] : time 8.3607324235125 (nsec) --- local (x,y) -11.015193806426, 61.196435433907 + Layer[2] : time 10.009914935281 (nsec) --- local (x,y) -6.3234902169198, -30.748482371576 + Layer[2] : time 10.111770107602 (nsec) --- local (x,y) -18.019654735188, -10.900306054337 + Layer[2] : time 10.531077790337 (nsec) --- local (x,y) 4.6954796579454, 45.686197258953 + Layer[2] : time 10.011815192737 (nsec) --- local (x,y) -37.421606733198, 49.893762808671 + Layer[2] : time 10.102782753908 (nsec) --- local (x,y) 228.48249227049, 106.49446452697 + Layer[2] : time 10.079985591371 (nsec) --- local (x,y) 244.4928652042, -2.6359691744778 + Layer[2] : time 10.012522690991 (nsec) --- local (x,y) 1.0249903907322, 61.350905362301 + Layer[2] : time 10.078110614419 (nsec) --- local (x,y) 186.51129798604, -46.022902556695 + Layer[2] : time 10.03938996318 (nsec) --- local (x,y) -16.331986036047, 91.722131042093 + Layer[3] : time 11.678775625247 (nsec) --- local (x,y) -8.392610585642, -41.089348775766 + Layer[3] : time 11.681298446478 (nsec) --- local (x,y) -49.82481819935, 66.497578935303 + Layer[3] : time 11.802506995987 (nsec) --- local (x,y) 304.42874772198, 141.92592801857 + Layer[3] : time 11.772033613255 (nsec) --- local (x,y) 325.61694864119, -3.5150928638193 + Layer[3] : time 11.682241029738 (nsec) --- local (x,y) 1.362233400048, 81.733919979516 + Layer[3] : time 11.769563709664 (nsec) --- local (x,y) 248.33579731819, -61.331169477549 + Layer[3] : time 11.718071298656 (nsec) --- local (x,y) -21.481343022123, 122.38904675317 + Layer[4] : time 13.347632895808 (nsec) --- local (x,y) -10.493216835368, -51.373826436474 + Layer[4] : time 13.350786412113 (nsec) --- local (x,y) -62.260229627225, 83.119818128484 + Layer[4] : time 13.502230111729 (nsec) --- local (x,y) 380.37964478861, 177.34203890516 + Layer[4] : time 13.464048419561 (nsec) --- local (x,y) 406.67845778895, -4.3945151638345 + Layer[4] : time 13.351963448199 (nsec) --- local (x,y) 1.7610265735718, 102.14569220609 + Layer[4] : time 13.461100415726 (nsec) --- local (x,y) 310.31637980884, -76.7994605281 + Layer[4] : time 13.396757913498 (nsec) --- local (x,y) -26.693337160787, 153.06615628609 Drift Chamber 2 has 0 hits. -EM Calorimeter has 1 hits. Total Edep is 0.066022059775767 (MeV) +EM Calorimeter has 0 hits. Total Edep is 0 (MeV) Hadron Calorimeter has 0 hits. Total Edep is 0 (MeV) + +-------- WWWW ------- G4Exception-START -------- WWWW ------- +*** G4Exception : GeomNav1002 + issued by : G4Navigator::ComputeStep() +Stuck Track: potential geometry or navigation problem. + Track stuck, not moving for 10 steps. + Current phys volume: 'worldPhysical' + - at position : (-285.8694479142378,-627.9713723744015,958.2685733912017) + in direction: (-0.3585384274239048,0.5258905714247282,-0.7712906734474148) + (local position: (-285.8694479142378,-627.9713723744015,958.2685733912017)) + (local direction: (-0.3585384274239048,0.5258905714247282,-0.7712906734474148)). + Previous phys volume: 'magneticPhysical' + + Likely geometry overlap - else navigation problem ! + *** Trying to get *unstuck* using a push - expanding step to 1e-07 (mm) ... Potential overlap in geometry ! + +*** This is just a warning message. *** +-------- WWWW -------- G4Exception-END --------- WWWW ------- + ... write file : B5.root - done ... write file : B5ntuple.root - done ... close file : B5.root - done ... close file : B5ntuple.root - done There are 2 h1 histograms - 0 with 4 entries: Drift Chamber 1 # Hits + 0 with 5 entries: Drift Chamber 1 # Hits 1 with 5 entries: Drift Chamber 2 # Hits There are 2 h2 histograms - 0 with 89 entries: Drift Chamber 1 X vs Y - 1 with 20 entries: Drift Chamber 2 X vs Y + 0 with 60 entries: Drift Chamber 1 X vs Y + 1 with 42 entries: Drift Chamber 2 X vs Y List them with "/analysis/list". View them with "/vis/plot" or "/vis/reviewPlots". ### Run 1 starts. @@ -1172,30 +1179,25 @@ View them with "/vis/plot" or "/vis/reviewPlots". ... open analysis file : B5.root - done --> Event 0 starts. ->>> Event 0 >>> Simulation truth : pi+ (0,0,100000) +>>> Event 0 >>> Simulation truth : pi+ (-0,0,100000) Hodoscope 1 has 1 hits. - Hodoscope[7] 4.9867880803856 (nsec) -Hodoscope 2 has 5 hits. - Hodoscope[10] 42.693815752214 (nsec) - Hodoscope[13] 453.9726364112 (nsec) - Hodoscope[9] 57.481539582686 (nsec) - Hodoscope[23] 297.7386293705 (nsec) - Hodoscope[8] 1954.2121524842 (nsec) -Drift Chamber 1 has 6 hits. - Layer[0] : time 6.6709548383423 (nsec) --- local (x,y) -0.016907985181262, 0.013194731231444 - Layer[1] : time 8.3387769397319 (nsec) --- local (x,y) -0.02903485515323, 0.023947081439904 - Layer[2] : time 10.006599041116 (nsec) --- local (x,y) -0.040028051021122, 0.035742734778174 - Layer[2] : time 10.01259586125 (nsec) --- local (x,y) -0.57381797786649, 0.22200334213648 - Layer[3] : time 11.674421142278 (nsec) --- local (x,y) -0.049702583956617, 0.045647906633354 - Layer[4] : time 13.342243243585 (nsec) --- local (x,y) -0.059814516314226, 0.057067981086288 + Hodoscope[7] 4.9867880804663 (nsec) +Hodoscope 2 has 1 hits. + Hodoscope[10] 42.693762847048 (nsec) +Drift Chamber 1 has 5 hits. + Layer[0] : time 6.6709548379017 (nsec) --- local (x,y) -0.0013613363529283, 0.010372869283601 + Layer[1] : time 8.338776938904 (nsec) --- local (x,y) -0.0089517689976559, 0.019852442072087 + Layer[2] : time 10.006599039956 (nsec) --- local (x,y) -0.016375183157413, 0.030216274419318 + Layer[3] : time 11.674421141202 (nsec) --- local (x,y) -0.022904642384632, 0.043470332425564 + Layer[4] : time 13.342243242388 (nsec) --- local (x,y) -0.030014225672447, 0.055674631640716 Drift Chamber 2 has 5 hits. - Layer[0] : time 34.366515647246 (nsec) --- local (x,y) -82.64156310523, 0.19291898828273 - Layer[1] : time 36.035246637679 (nsec) --- local (x,y) -99.150718699331, 0.20130685850906 - Layer[2] : time 37.703977325996 (nsec) --- local (x,y) -115.65712649892, 0.21455718531736 - Layer[3] : time 39.372708064058 (nsec) --- local (x,y) -132.16398443055, 0.22980408291763 - Layer[4] : time 41.041438672257 (nsec) --- local (x,y) -148.66966280365, 0.2446327225074 -EM Calorimeter has 68 hits. Total Edep is 28221.594587036 (MeV) -Hadron Calorimeter has 16 hits. Total Edep is 3128.24591747 (MeV) + Layer[0] : time 34.366456824348 (nsec) --- local (x,y) -82.692857939679, 0.20685572455874 + Layer[1] : time 36.035188767327 (nsec) --- local (x,y) -99.210666010728, 0.21312957817494 + Layer[2] : time 37.703920780428 (nsec) --- local (x,y) -115.72911068562, 0.21958152729197 + Layer[3] : time 39.372652771021 (nsec) --- local (x,y) -132.24735079893, 0.22640622478594 + Layer[4] : time 41.041384654776 (nsec) --- local (x,y) -148.76462011161, 0.23461399305257 +EM Calorimeter has 62 hits. Total Edep is 669.00275445229 (MeV) +Hadron Calorimeter has 16 hits. Total Edep is 3974.237316218 (MeV) ... write file : B5.root - done ... write file : B5ntuple.root - done ... close file : B5.root - done @@ -1204,8 +1206,8 @@ There are 2 h1 histograms 0 with 5 entries: Drift Chamber 1 # Hits 1 with 5 entries: Drift Chamber 2 # Hits There are 2 h2 histograms - 0 with 26 entries: Drift Chamber 1 X vs Y - 1 with 29 entries: Drift Chamber 2 X vs Y + 0 with 43 entries: Drift Chamber 1 X vs Y + 1 with 20 entries: Drift Chamber 2 X vs Y List them with "/analysis/list". View them with "/vis/plot" or "/vis/reviewPlots". ### Run 2 starts. @@ -1217,24 +1219,27 @@ View them with "/vis/plot" or "/vis/reviewPlots". >>> Event 0 >>> Simulation truth : e+ (-0,0,100000) Hodoscope 1 has 1 hits. - Hodoscope[7] 4.9867832232942 (nsec) -Hodoscope 2 has 2 hits. - Hodoscope[9] 43.185603726121 (nsec) - Hodoscope[7] 334.78020753538 (nsec) + Hodoscope[7] 4.9867832233174 (nsec) +Hodoscope 2 has 1 hits. + Hodoscope[9] 43.186054522374 (nsec) Drift Chamber 1 has 5 hits. - Layer[0] : time 6.6709483404483 (nsec) --- local (x,y) -0.011322643250436, 0.0033424959826452 - Layer[1] : time 8.3387688170051 (nsec) --- local (x,y) -0.024055273442765, 0.0024686768015861 - Layer[2] : time 10.006589293574 (nsec) --- local (x,y) -0.036863568400371, 0.00083358608602226 - Layer[3] : time 11.674409770394 (nsec) --- local (x,y) -0.052343955746273, -1.6883845718274e-05 - Layer[4] : time 13.342230247473 (nsec) --- local (x,y) -0.070146094046373, -0.0014019747309185 -Drift Chamber 2 has 5 hits. - Layer[0] : time 34.848365746185 (nsec) --- local (x,y) -147.70378778325, 0.045135979385728 - Layer[1] : time 36.519088558876 (nsec) --- local (x,y) -177.21405139083, 0.052868799613421 - Layer[2] : time 38.189811546195 (nsec) --- local (x,y) -206.72520250387, 0.063581621379375 - Layer[3] : time 39.860533510237 (nsec) --- local (x,y) -236.23114413061, 0.079822715869835 - Layer[4] : time 41.531254937109 (nsec) --- local (x,y) -265.73435030693, 0.09880902168614 -EM Calorimeter has 44 hits. Total Edep is 91227.805073932 (MeV) -Hadron Calorimeter has 7 hits. Total Edep is 41.269165899413 (MeV) + Layer[0] : time 6.6709483400756 (nsec) --- local (x,y) -0.00030527429106592, 0.00043460468221932 + Layer[1] : time 8.3387688162408 (nsec) --- local (x,y) 0.0061965697497505, -0.0013401703967007 + Layer[2] : time 10.006589292377 (nsec) --- local (x,y) 0.011631743273124, -0.0039980787090541 + Layer[3] : time 11.674409768562 (nsec) --- local (x,y) 0.017337298466786, -0.0082955431846046 + Layer[4] : time 13.342230244759 (nsec) --- local (x,y) 0.023360592579566, -0.012448816324634 +Drift Chamber 2 has 9 hits. + Layer[0] : time 34.848810980793 (nsec) --- local (x,y) -147.46814647879, 0.049961500503244 + Layer[0] : time 72.741007004528 (nsec) --- local (x,y) 603.34289320451, 140.93829542208 + Layer[1] : time 36.519534834516 (nsec) --- local (x,y) -176.98370365553, 0.06541628302743 + Layer[1] : time 71.016370082096 (nsec) --- local (x,y) 587.36340920297, 99.603744866441 + Layer[2] : time 38.190257863391 (nsec) --- local (x,y) -206.49506226651, 0.084210466527334 + Layer[2] : time 69.242090425089 (nsec) --- local (x,y) 726.35848309382, 107.59276295617 + Layer[3] : time 39.860981041425 (nsec) --- local (x,y) -236.00717772831, 0.10604928806827 + Layer[3] : time 67.423594355241 (nsec) --- local (x,y) 867.70402968911, 231.53542490804 + Layer[4] : time 41.531704291315 (nsec) --- local (x,y) -265.51965725623, 0.12985627314987 +EM Calorimeter has 51 hits. Total Edep is 82142.000265738 (MeV) +Hadron Calorimeter has 9 hits. Total Edep is 105.15334596483 (MeV) ... write file : B5.root - done ... write file : B5ntuple.root - done ... close file : B5.root - done @@ -1243,8 +1248,8 @@ There are 2 h1 histograms 0 with 5 entries: Drift Chamber 1 # Hits 1 with 5 entries: Drift Chamber 2 # Hits There are 2 h2 histograms - 0 with 25 entries: Drift Chamber 1 X vs Y - 1 with 26 entries: Drift Chamber 2 X vs Y + 0 with 30 entries: Drift Chamber 1 X vs Y + 1 with 34 entries: Drift Chamber 2 X vs Y List them with "/analysis/list". View them with "/vis/plot" or "/vis/reviewPlots". ### Run 3 starts. @@ -1254,28 +1259,25 @@ View them with "/vis/plot" or "/vis/reviewPlots". ... open analysis file : B5.root - done --> Event 0 starts. ->>> Event 0 >>> Simulation truth : proton (-0,0,10000) +>>> Event 0 >>> Simulation truth : proton (0,0,10000) Hodoscope 1 has 1 hits. - Hodoscope[7] 5.0086862458603 (nsec) + Hodoscope[7] 5.0086862832441 (nsec) Hodoscope 2 has 1 hits. - Hodoscope[9] 43.379102452598 (nsec) + Hodoscope[9] 43.376641296317 (nsec) Drift Chamber 1 has 5 hits. - Layer[0] : time 6.7002514539916 (nsec) --- local (x,y) 0.17995245293089, -0.050746067057994 - Layer[1] : time 8.3754003958163 (nsec) --- local (x,y) 0.33109725215112, -0.12129643775899 - Layer[2] : time 10.050549452767 (nsec) --- local (x,y) 0.47762745522454, -0.17486777166885 - Layer[3] : time 11.725698593886 (nsec) --- local (x,y) 0.60428693989408, -0.23055970607725 - Layer[4] : time 13.400847901817 (nsec) --- local (x,y) 0.73765937004697, -0.29413047865634 -Drift Chamber 2 has 8 hits. - Layer[0] : time 35.005055321362 (nsec) --- local (x,y) -146.05405702126, -0.91734428434577 - Layer[0] : time 35.03812557251 (nsec) --- local (x,y) -131.91597348412, -1.9499843682143 - Layer[0] : time 36.386797682754 (nsec) --- local (x,y) 195.52393696301, -22.900227965476 - Layer[0] : time 37.932125524908 (nsec) --- local (x,y) 533.15480694386, -159.88423296004 - Layer[1] : time 36.683155265364 (nsec) --- local (x,y) -175.73054075778, -0.99017852012551 - Layer[2] : time 38.361254806136 (nsec) --- local (x,y) -205.4044634786, -1.063498770103 - Layer[3] : time 40.03935158773 (nsec) --- local (x,y) -235.06368007154, -1.126235784697 - Layer[4] : time 41.717448242881 (nsec) --- local (x,y) -264.72141125455, -1.1715042165147 -EM Calorimeter has 34 hits. Total Edep is 1104.5772845453 (MeV) -Hadron Calorimeter has 11 hits. Total Edep is 399.69624186871 (MeV) + Layer[0] : time 6.70025439007 (nsec) --- local (x,y) 0.026867057373607, -0.037797947279505 + Layer[1] : time 8.3754062151684 (nsec) --- local (x,y) 0.048397685759236, -0.018624595845986 + Layer[2] : time 10.050558127599 (nsec) --- local (x,y) 0.06816255606115, 0.0073062159613661 + Layer[3] : time 11.725710188188 (nsec) --- local (x,y) 0.094620292341028, 0.0056262348776398 + Layer[4] : time 13.400862367639 (nsec) --- local (x,y) 0.13150753270193, 0.018405457138984 +Drift Chamber 2 has 5 hits. + Layer[0] : time 35.002640439753 (nsec) --- local (x,y) -147.77497927073, 0.39465225908424 + Layer[1] : time 36.680732807793 (nsec) --- local (x,y) -177.40138959455, 0.39797067130449 + Layer[2] : time 38.358822474084 (nsec) --- local (x,y) -207.01345649686, 0.43164921160545 + Layer[3] : time 40.036911999455 (nsec) --- local (x,y) -236.62420444912, 0.46109939928506 + Layer[4] : time 41.715001121149 (nsec) --- local (x,y) -266.23220865053, 0.4795351590078 +EM Calorimeter has 45 hits. Total Edep is 3668.2474041113 (MeV) +Hadron Calorimeter has 13 hits. Total Edep is 65.815702820483 (MeV) ... write file : B5.root - done ... write file : B5ntuple.root - done ... close file : B5.root - done @@ -1284,8 +1286,8 @@ There are 2 h1 histograms 0 with 5 entries: Drift Chamber 1 # Hits 1 with 5 entries: Drift Chamber 2 # Hits There are 2 h2 histograms - 0 with 28 entries: Drift Chamber 1 X vs Y - 1 with 28 entries: Drift Chamber 2 X vs Y + 0 with 25 entries: Drift Chamber 1 X vs Y + 1 with 25 entries: Drift Chamber 2 X vs Y List them with "/analysis/list". View them with "/vis/plot" or "/vis/reviewPlots". ### Run 4 starts. @@ -1295,25 +1297,25 @@ View them with "/vis/plot" or "/vis/reviewPlots". ... open analysis file : B5.root - done --> Event 0 starts. ->>> Event 0 >>> Simulation truth : pi+ (-0,0,10000) +>>> Event 0 >>> Simulation truth : pi+ (0,0,10000) Hodoscope 1 has 1 hits. - Hodoscope[7] 4.9872689265717 (nsec) + Hodoscope[7] 4.9872689328051 (nsec) Hodoscope 2 has 1 hits. - Hodoscope[10] 42.695849826474 (nsec) + Hodoscope[10] 42.700754721937 (nsec) Drift Chamber 1 has 5 hits. - Layer[0] : time 6.6715982295083 (nsec) --- local (x,y) -0.025512354482288, 0.19758493539466 - Layer[1] : time 8.3395812850102 (nsec) --- local (x,y) -0.065461215680102, 0.34002754214793 - Layer[2] : time 10.007564333636 (nsec) --- local (x,y) -0.11203878166436, 0.46856781330878 - Layer[3] : time 11.675547393083 (nsec) --- local (x,y) -0.17481978007333, 0.59896073813671 - Layer[4] : time 13.343530460151 (nsec) --- local (x,y) -0.24793834413256, 0.72965301088891 + Layer[0] : time 6.6715982251099 (nsec) --- local (x,y) 0.12825867802179, 0.19314744113038 + Layer[1] : time 8.3395813229284 (nsec) --- local (x,y) 0.24118425557539, 0.34427951177989 + Layer[2] : time 10.00756439398 (nsec) --- local (x,y) 0.31138830726546, 0.49153849215199 + Layer[3] : time 11.675547462454 (nsec) --- local (x,y) 0.36960120219994, 0.63319877801381 + Layer[4] : time 13.343530549854 (nsec) --- local (x,y) 0.43016356882945, 0.7893334936735 Drift Chamber 2 has 5 hits. - Layer[0] : time 34.367735757332 (nsec) --- local (x,y) -83.32747407943, 1.8710437675864 - Layer[1] : time 36.036629970814 (nsec) --- local (x,y) -99.85567334074, 2.0113602892098 - Layer[2] : time 37.705522656416 (nsec) --- local (x,y) -116.3698560562, 2.1624926460674 - Layer[3] : time 39.374415604019 (nsec) --- local (x,y) -132.88653713411, 2.2963148908274 - Layer[4] : time 41.043310325585 (nsec) --- local (x,y) -149.41936776889, 2.4205516492351 -EM Calorimeter has 43 hits. Total Edep is 2175.7949253022 (MeV) -Hadron Calorimeter has 11 hits. Total Edep is 181.83170981923 (MeV) + Layer[0] : time 34.372468681479 (nsec) --- local (x,y) -83.29257606059, 2.5878519394573 + Layer[1] : time 36.041398863744 (nsec) --- local (x,y) -100.1442406335, 2.7287101566816 + Layer[2] : time 37.710329356126 (nsec) --- local (x,y) -116.99866002167, 2.8672167617942 + Layer[3] : time 39.379258773577 (nsec) --- local (x,y) -133.84327807701, 3.0285592862872 + Layer[4] : time 41.048185838103 (nsec) --- local (x,y) -150.66670954195, 3.2067894261921 +EM Calorimeter has 49 hits. Total Edep is 350.83180173579 (MeV) +Hadron Calorimeter has 12 hits. Total Edep is 363.50551894334 (MeV) ... write file : B5.root - done ... write file : B5ntuple.root - done ... close file : B5.root - done @@ -1322,8 +1324,8 @@ There are 2 h1 histograms 0 with 5 entries: Drift Chamber 1 # Hits 1 with 5 entries: Drift Chamber 2 # Hits There are 2 h2 histograms - 0 with 26 entries: Drift Chamber 1 X vs Y - 1 with 25 entries: Drift Chamber 2 X vs Y + 0 with 25 entries: Drift Chamber 1 X vs Y + 1 with 26 entries: Drift Chamber 2 X vs Y List them with "/analysis/list". View them with "/vis/plot" or "/vis/reviewPlots". ### Run 5 starts. @@ -1335,23 +1337,23 @@ View them with "/vis/plot" or "/vis/reviewPlots". >>> Event 0 >>> Simulation truth : e+ (0,0,10000) Hodoscope 1 has 1 hits. - Hodoscope[7] 4.9867832403263 (nsec) + Hodoscope[7] 4.9867832445057 (nsec) Hodoscope 2 has 1 hits. - Hodoscope[9] 43.186012233399 (nsec) + Hodoscope[9] 43.187904313765 (nsec) Drift Chamber 1 has 5 hits. - Layer[0] : time 6.6709483960381 (nsec) --- local (x,y) 0.13402761366777, -0.047375663998367 - Layer[1] : time 8.3387689140179 (nsec) --- local (x,y) 0.23763416259803, -0.013570579930033 - Layer[2] : time 10.006589445886 (nsec) --- local (x,y) 0.3564900088631, 0.030103436609121 - Layer[3] : time 11.674409973119 (nsec) --- local (x,y) 0.46593502384597, 0.082326698627878 - Layer[4] : time 13.342230470608 (nsec) --- local (x,y) 0.49311041947269, 0.1263771077628 + Layer[0] : time 6.6709483875614 (nsec) --- local (x,y) -0.045550838147506, 0.14814354537815 + Layer[1] : time 8.3387689462332 (nsec) --- local (x,y) 0.058184049425026, 0.26168256791159 + Layer[2] : time 10.006589532488 (nsec) --- local (x,y) 0.19518077480019, 0.37756040363399 + Layer[3] : time 11.674410135767 (nsec) --- local (x,y) 0.34696763577821, 0.49743521981464 + Layer[4] : time 13.342230748521 (nsec) --- local (x,y) 0.50704002858137, 0.61864760204834 Drift Chamber 2 has 5 hits. - Layer[0] : time 34.848665483037 (nsec) --- local (x,y) -148.2426178459, 1.4596182420364 - Layer[1] : time 36.519407945829 (nsec) --- local (x,y) -177.85220312162, 1.6289114020745 - Layer[2] : time 38.190151286646 (nsec) --- local (x,y) -207.46616177482, 1.8117484355704 - Layer[3] : time 39.860893577676 (nsec) --- local (x,y) -237.07485326211, 1.9851475476867 - Layer[4] : time 41.531637751525 (nsec) --- local (x,y) -266.69309162555, 2.1585431453214 -EM Calorimeter has 19 hits. Total Edep is 9392.733679659 (MeV) -Hadron Calorimeter has 4 hits. Total Edep is 2.1153722336719 (MeV) + Layer[0] : time 34.850553727426 (nsec) --- local (x,y) -146.98979244832, 2.5342542395106 + Layer[1] : time 36.52130173511 (nsec) --- local (x,y) -176.62770654389, 2.6586011149475 + Layer[2] : time 38.192046244304 (nsec) --- local (x,y) -206.24779724424, 2.8036106717092 + Layer[3] : time 39.862789513476 (nsec) --- local (x,y) -235.86160089039, 2.9487761704847 + Layer[4] : time 41.5335336758 (nsec) --- local (x,y) -265.47989251657, 3.1019834860074 +EM Calorimeter has 16 hits. Total Edep is 9510.6347137595 (MeV) +Hadron Calorimeter has 3 hits. Total Edep is 0.6964975886789 (MeV) ... write file : B5.root - done ... write file : B5ntuple.root - done ... close file : B5.root - done @@ -1360,8 +1362,8 @@ There are 2 h1 histograms 0 with 5 entries: Drift Chamber 1 # Hits 1 with 5 entries: Drift Chamber 2 # Hits There are 2 h2 histograms - 0 with 37 entries: Drift Chamber 1 X vs Y - 1 with 22 entries: Drift Chamber 2 X vs Y + 0 with 28 entries: Drift Chamber 1 X vs Y + 1 with 26 entries: Drift Chamber 2 X vs Y List them with "/analysis/list". View them with "/vis/plot" or "/vis/reviewPlots". ### Run 6 starts. @@ -1371,24 +1373,27 @@ View them with "/vis/plot" or "/vis/reviewPlots". ... open analysis file : B5.root - done --> Event 0 starts. ->>> Event 0 >>> Simulation truth : proton (-0,0,1000) +>>> Event 0 >>> Simulation truth : proton (0,0,1000) Hodoscope 1 has 1 hits. - Hodoscope[7] 6.8391744990389 (nsec) + Hodoscope[7] 6.8388651033511 (nsec) Hodoscope 2 has 1 hits. - Hodoscope[9] 59.405185215116 (nsec) -Drift Chamber 1 has 5 hits. - Layer[0] : time 9.1531274897433 (nsec) --- local (x,y) -2.2033338371988, 0.40992882059706 - Layer[1] : time 11.445032335505 (nsec) --- local (x,y) -2.3793757127217, 1.2578225902361 - Layer[2] : time 13.737273354737 (nsec) --- local (x,y) -2.6154090860826, 2.3061556263772 - Layer[3] : time 16.029740433115 (nsec) --- local (x,y) -2.5306759311875, 3.1357831697754 - Layer[4] : time 18.322386194483 (nsec) --- local (x,y) -1.8603605594803, 3.8253372922677 -Drift Chamber 2 has 5 hits. - Layer[0] : time 47.921560995473 (nsec) --- local (x,y) -153.72143432771, 11.817720389481 - Layer[1] : time 50.222108799072 (nsec) --- local (x,y) -185.45580849309, 12.144640011875 - Layer[2] : time 52.522875072602 (nsec) --- local (x,y) -217.17527405897, 12.429069544705 - Layer[3] : time 54.823955349489 (nsec) --- local (x,y) -249.33833086301, 12.705995208549 - Layer[4] : time 57.125634971675 (nsec) --- local (x,y) -281.74353469436, 13.19780427005 -EM Calorimeter has 2 hits. Total Edep is 301.90521972738 (MeV) + Hodoscope[9] 59.404037028019 (nsec) +Drift Chamber 1 has 6 hits. + Layer[0] : time 9.1529745529366 (nsec) --- local (x,y) 1.0608428300404, -0.4805632773126 + Layer[1] : time 11.445090452393 (nsec) --- local (x,y) 2.1036288765157, -1.0594482002933 + Layer[1] : time 11.482733365964 (nsec) --- local (x,y) 17.195506400863, 7.4523622646542 + Layer[2] : time 13.737756552239 (nsec) --- local (x,y) 2.7272944981419, -1.6716208917435 + Layer[3] : time 16.030595544996 (nsec) --- local (x,y) 2.9610776618077, -1.80791358524 + Layer[4] : time 18.323643047564 (nsec) --- local (x,y) 2.8970750303976, -1.3965588857151 +Drift Chamber 2 has 7 hits. + Layer[0] : time 47.923112230884 (nsec) --- local (x,y) -147.32484994591, 5.7488299978502 + Layer[0] : time 48.516955955184 (nsec) --- local (x,y) -133.28568191938, -39.394217127131 + Layer[1] : time 50.223569293862 (nsec) --- local (x,y) -177.62516659271, 6.613046674942 + Layer[2] : time 52.524132348788 (nsec) --- local (x,y) -207.55557334567, 7.4094158994864 + Layer[3] : time 54.824711364991 (nsec) --- local (x,y) -236.83671374938, 8.3642760325209 + Layer[4] : time 57.125431249261 (nsec) --- local (x,y) -265.58941211799, 9.2010892752361 + Layer[4] : time 57.287630424962 (nsec) --- local (x,y) -228.37084824467, 36.581670049028 +EM Calorimeter has 3 hits. Total Edep is 406.97034364526 (MeV) Hadron Calorimeter has 0 hits. Total Edep is 0 (MeV) ... write file : B5.root - done ... write file : B5ntuple.root - done @@ -1398,8 +1403,8 @@ There are 2 h1 histograms 0 with 5 entries: Drift Chamber 1 # Hits 1 with 5 entries: Drift Chamber 2 # Hits There are 2 h2 histograms - 0 with 26 entries: Drift Chamber 1 X vs Y - 1 with 25 entries: Drift Chamber 2 X vs Y + 0 with 32 entries: Drift Chamber 1 X vs Y + 1 with 27 entries: Drift Chamber 2 X vs Y List them with "/analysis/list". View them with "/vis/plot" or "/vis/reviewPlots". ### Run 7 starts. @@ -1411,23 +1416,23 @@ View them with "/vis/plot" or "/vis/reviewPlots". >>> Event 0 >>> Simulation truth : pi+ (-0,0,1000) Hodoscope 1 has 1 hits. - Hodoscope[7] 5.0351306375419 (nsec) + Hodoscope[7] 5.0351325028607 (nsec) Hodoscope 2 has 1 hits. - Hodoscope[5] 42.574774203607 (nsec) + Hodoscope[10] 43.092010873902 (nsec) Drift Chamber 1 has 5 hits. - Layer[0] : time 6.7356910325356 (nsec) --- local (x,y) -0.33913141324876, -0.45640410026652 - Layer[1] : time 8.4197542432074 (nsec) --- local (x,y) 0.6101321583481, -0.91137477289017 - Layer[2] : time 10.10382178007 (nsec) --- local (x,y) 1.7143560691637, -1.5014690225079 - Layer[3] : time 11.785142303772 (nsec) --- local (x,y) -12.491400563884, -3.3898955717492 - Layer[4] : time 13.466326822412 (nsec) --- local (x,y) -27.527006367349, -5.2231651050716 + Layer[0] : time 6.7357258992822 (nsec) --- local (x,y) -0.35174218649574, -0.65127295285269 + Layer[1] : time 8.4198224407567 (nsec) --- local (x,y) -1.5445637349987, -1.2858731909526 + Layer[2] : time 10.103920257419 (nsec) --- local (x,y) -2.4814081246741, -1.7781587347081 + Layer[3] : time 11.788021500464 (nsec) --- local (x,y) -3.4366967677457, -1.9095805185461 + Layer[4] : time 13.472126275611 (nsec) --- local (x,y) -4.215973562338, -1.9964538569537 Drift Chamber 2 has 5 hits. - Layer[0] : time 34.144267572811 (nsec) --- local (x,y) -403.6846433757, -31.435070391988 - Layer[1] : time 35.833695038349 (nsec) --- local (x,y) -455.34913165898, -33.274525527684 - Layer[2] : time 37.523027708235 (nsec) --- local (x,y) -506.73673569836, -34.934703588117 - Layer[3] : time 39.212428741415 (nsec) --- local (x,y) -558.30852366397, -36.772560488097 - Layer[4] : time 40.901869643355 (nsec) --- local (x,y) -609.99235625449, -38.499139034073 -EM Calorimeter has 3 hits. Total Edep is 178.46449042171 (MeV) -Hadron Calorimeter has 1 hits. Total Edep is 18.170709428992 (MeV) + Layer[0] : time 34.682034892736 (nsec) --- local (x,y) -92.993437204501, -1.7953288483656 + Layer[1] : time 36.367281929621 (nsec) --- local (x,y) -111.07304847619, -0.86907323588438 + Layer[2] : time 38.052549602299 (nsec) --- local (x,y) -129.30033607897, 0.038894348610092 + Layer[3] : time 39.737859986168 (nsec) --- local (x,y) -147.83605842556, 1.0980185077244 + Layer[4] : time 41.423197220029 (nsec) --- local (x,y) -166.56398724332, 2.1991073181435 +EM Calorimeter has 20 hits. Total Edep is 352.67315486425 (MeV) +Hadron Calorimeter has 10 hits. Total Edep is 16.847545116271 (MeV) ... write file : B5.root - done ... write file : B5ntuple.root - done ... close file : B5.root - done @@ -1436,8 +1441,8 @@ There are 2 h1 histograms 0 with 5 entries: Drift Chamber 1 # Hits 1 with 5 entries: Drift Chamber 2 # Hits There are 2 h2 histograms - 0 with 37 entries: Drift Chamber 1 X vs Y - 1 with 23 entries: Drift Chamber 2 X vs Y + 0 with 26 entries: Drift Chamber 1 X vs Y + 1 with 25 entries: Drift Chamber 2 X vs Y List them with "/analysis/list". View them with "/vis/plot" or "/vis/reviewPlots". ### Run 8 starts. @@ -1447,24 +1452,24 @@ View them with "/vis/plot" or "/vis/reviewPlots". ... open analysis file : B5.root - done --> Event 0 starts. ->>> Event 0 >>> Simulation truth : e+ (-0,0,1000) +>>> Event 0 >>> Simulation truth : e+ (0,0,1000) Hodoscope 1 has 1 hits. - Hodoscope[7] 4.9867840299954 (nsec) + Hodoscope[7] 4.9867868030394 (nsec) Hodoscope 2 has 1 hits. - Hodoscope[9] 43.168745155971 (nsec) + Hodoscope[9] 43.184750162286 (nsec) Drift Chamber 1 has 5 hits. - Layer[0] : time 6.6709499767711 (nsec) --- local (x,y) 0.26939932089829, 0.71330692374654 - Layer[1] : time 8.3387715493322 (nsec) --- local (x,y) 0.22414990413347, 1.2210178658901 - Layer[2] : time 10.006593698749 (nsec) --- local (x,y) 0.18975223148915, 1.8742839066567 - Layer[3] : time 11.674419719985 (nsec) --- local (x,y) -0.78317895542235, 2.6245028118973 - Layer[4] : time 13.342248801656 (nsec) --- local (x,y) -2.1685834291356, 3.3927409174993 + Layer[0] : time 6.6709533955344 (nsec) --- local (x,y) 0.037135731053683, 0.14748068513622 + Layer[1] : time 8.3387753243866 (nsec) --- local (x,y) -0.29961072947765, -0.3532088604176 + Layer[2] : time 10.006597260613 (nsec) --- local (x,y) -0.67826327003494, -0.82907007971225 + Layer[3] : time 11.674419241456 (nsec) --- local (x,y) -1.1236092576417, -1.2550653874281 + Layer[4] : time 13.342242119539 (nsec) --- local (x,y) -1.6994776660166, -1.8192027498714 Drift Chamber 2 has 5 hits. - Layer[0] : time 34.830133010105 (nsec) --- local (x,y) -167.13294121386, 19.802894441912 - Layer[1] : time 36.501191082509 (nsec) --- local (x,y) -198.27896227151, 20.988431344167 - Layer[2] : time 38.172249734099 (nsec) --- local (x,y) -229.42981852224, 22.118599337488 - Layer[3] : time 39.843282565748 (nsec) --- local (x,y) -260.46168373783, 23.06815891094 - Layer[4] : time 41.514205395817 (nsec) --- local (x,y) -290.95549288585, 24.058127755678 -EM Calorimeter has 7 hits. Total Edep is 972.35426867434 (MeV) + Layer[0] : time 34.845665591509 (nsec) --- local (x,y) -155.73158704559, -7.9003805269337 + Layer[1] : time 36.516809454069 (nsec) --- local (x,y) -187.30408329592, -8.5449440688974 + Layer[2] : time 38.187961592738 (nsec) --- local (x,y) -218.91328377923, -9.3124517890313 + Layer[3] : time 39.859063614392 (nsec) --- local (x,y) -250.28282923892, -10.102504408466 + Layer[4] : time 41.530105226684 (nsec) --- local (x,y) -281.35719092036, -11.058533651398 +EM Calorimeter has 8 hits. Total Edep is 980.85382799029 (MeV) Hadron Calorimeter has 0 hits. Total Edep is 0 (MeV) ... write file : B5.root - done ... write file : B5ntuple.root - done @@ -1474,8 +1479,8 @@ There are 2 h1 histograms 0 with 5 entries: Drift Chamber 1 # Hits 1 with 5 entries: Drift Chamber 2 # Hits There are 2 h2 histograms - 0 with 26 entries: Drift Chamber 1 X vs Y - 1 with 23 entries: Drift Chamber 2 X vs Y + 0 with 25 entries: Drift Chamber 1 X vs Y + 1 with 30 entries: Drift Chamber 2 X vs Y List them with "/analysis/list". View them with "/vis/plot" or "/vis/reviewPlots". Graphics systems deleted. diff --git a/examples/extended/analysis/AnaEx01/AnaEx01-csv.out b/examples/extended/analysis/AnaEx01/AnaEx01-csv.out index af824a4d1c7..0c42bd62c22 100644 --- a/examples/extended/analysis/AnaEx01/AnaEx01-csv.out +++ b/examples/extended/analysis/AnaEx01/AnaEx01-csv.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -79,7 +79,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -258,7 +260,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -290,7 +292,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -322,7 +324,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -335,7 +337,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -381,7 +382,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -413,7 +414,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -445,7 +446,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -477,7 +478,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -509,7 +510,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -541,7 +542,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -573,7 +574,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -958,12 +959,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/analysis/AnaEx01/AnaEx01-hdf5.out b/examples/extended/analysis/AnaEx01/AnaEx01-hdf5.out index 440a17b2f05..b896a37cf4f 100644 --- a/examples/extended/analysis/AnaEx01/AnaEx01-hdf5.out +++ b/examples/extended/analysis/AnaEx01/AnaEx01-hdf5.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -79,7 +79,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -258,7 +260,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -290,7 +292,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -322,7 +324,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -335,7 +337,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -381,7 +382,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -413,7 +414,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -445,7 +446,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -477,7 +478,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -509,7 +510,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -541,7 +542,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -573,7 +574,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -958,12 +959,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/analysis/AnaEx01/AnaEx01-root.out b/examples/extended/analysis/AnaEx01/AnaEx01-root.out index 1b9c88dbdcf..d145e0466fc 100644 --- a/examples/extended/analysis/AnaEx01/AnaEx01-root.out +++ b/examples/extended/analysis/AnaEx01/AnaEx01-root.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -79,7 +79,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -258,7 +260,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -290,7 +292,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -322,7 +324,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -335,7 +337,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -381,7 +382,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -413,7 +414,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -445,7 +446,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -477,7 +478,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -509,7 +510,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -541,7 +542,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -573,7 +574,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -958,12 +959,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/analysis/AnaEx01/AnaEx01-xml.out b/examples/extended/analysis/AnaEx01/AnaEx01-xml.out index 1c75bb39e23..81706529b5e 100644 --- a/examples/extended/analysis/AnaEx01/AnaEx01-xml.out +++ b/examples/extended/analysis/AnaEx01/AnaEx01-xml.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -79,7 +79,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -258,7 +260,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -290,7 +292,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -322,7 +324,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -335,7 +337,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -381,7 +382,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -413,7 +414,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -445,7 +446,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -477,7 +478,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -509,7 +510,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -541,7 +542,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -573,7 +574,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -958,12 +959,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/analysis/AnaEx02/AnaEx02.out b/examples/extended/analysis/AnaEx02/AnaEx02.out index 3301942edc9..61425ec811f 100644 --- a/examples/extended/analysis/AnaEx02/AnaEx02.out +++ b/examples/extended/analysis/AnaEx02/AnaEx02.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -78,7 +78,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -257,7 +259,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -289,7 +291,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -321,7 +323,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -334,7 +336,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -380,7 +381,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -412,7 +413,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -444,7 +445,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -476,7 +477,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -508,7 +509,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -540,7 +541,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -572,7 +573,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -957,12 +958,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/analysis/AnaEx03/AnaEx03-csv.out b/examples/extended/analysis/AnaEx03/AnaEx03-csv.out index 7bcedb1e132..48026ee3951 100644 --- a/examples/extended/analysis/AnaEx03/AnaEx03-csv.out +++ b/examples/extended/analysis/AnaEx03/AnaEx03-csv.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -79,7 +79,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -244,7 +246,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -276,7 +278,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -308,7 +310,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -321,7 +323,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -367,7 +368,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -399,7 +400,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -431,7 +432,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -463,7 +464,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -495,7 +496,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -527,7 +528,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -559,7 +560,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -944,12 +945,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1040,7 +1050,7 @@ View them with "/vis/plot" or "/vis/reviewPlots". EAbs: mean = 272.05 MeV rms = 9.23393 MeV EGap: mean = 14.0337 MeV rms = 5.20653 MeV -LAbs: mean = 19.596 cm rms = 7.90909 mm +LAbs: mean = 19.596 cm rms = 7.90907 mm LGap: mean = 6.90508 cm rms = 2.73617 cm There are 4 h1 histograms 0 with 30 entries: Edep in absorber (MeV) @@ -1098,10 +1108,10 @@ View them with "/vis/plot" or "/vis/reviewPlots". ----> print histograms statistic -EAbs: mean = 217.841 MeV rms = 48.9819 MeV -EGap: mean = 19.6955 MeV rms = 10.0698 MeV -LAbs: mean = 9.0012 cm rms = 2.28215 cm -LGap: mean = 4.59033 cm rms = 1.30923 cm +EAbs: mean = 216.845 MeV rms = 41.8355 MeV +EGap: mean = 19.3365 MeV rms = 9.77126 MeV +LAbs: mean = 9.02409 cm rms = 2.17903 cm +LGap: mean = 4.58733 cm rms = 1.29921 cm There are 4 h1 histograms 0 with 40 entries: Edep in absorber (MeV) 1 with 40 entries: Edep in gap (MeV) @@ -1127,13 +1137,13 @@ View them with "/vis/plot" or "/vis/reviewPlots". ----> print histograms statistic -EAbs: mean = 189.975 MeV rms = 56.6818 MeV -EGap: mean = 17.0704 MeV rms = 11.9265 MeV -LAbs: mean = 8.89565 cm rms = 2.51711 cm -LGap: mean = 4.48712 cm rms = 1.60457 cm +EAbs: mean = 196.65 MeV rms = 52.0211 MeV +EGap: mean = 17.2096 MeV rms = 11.4505 MeV +LAbs: mean = 8.9716 cm rms = 2.03088 cm +LGap: mean = 4.53482 cm rms = 1.31395 cm There are 4 h1 histograms 0 with 50 entries: Edep in absorber (MeV) - 1 with 49 entries: Edep in gap (MeV) + 1 with 50 entries: Edep in gap (MeV) 2 with 50 entries: trackL in absorber (mm) 3 with 50 entries: trackL in gap (mm) List them with "/analysis/list". diff --git a/examples/extended/analysis/AnaEx03/AnaEx03-hdf5.out b/examples/extended/analysis/AnaEx03/AnaEx03-hdf5.out index 45aa0957299..404f57a3692 100644 --- a/examples/extended/analysis/AnaEx03/AnaEx03-hdf5.out +++ b/examples/extended/analysis/AnaEx03/AnaEx03-hdf5.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -79,7 +79,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -243,7 +245,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -275,7 +277,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -307,7 +309,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -320,7 +322,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -366,7 +367,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -398,7 +399,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -430,7 +431,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -462,7 +463,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -494,7 +495,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -526,7 +527,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -558,7 +559,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -943,12 +944,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1011,7 +1021,7 @@ View them with "/vis/plot" or "/vis/reviewPlots". EAbs: mean = 272.05 MeV rms = 9.23393 MeV EGap: mean = 14.0337 MeV rms = 5.20653 MeV -LAbs: mean = 19.596 cm rms = 7.90909 mm +LAbs: mean = 19.596 cm rms = 7.90907 mm LGap: mean = 6.90508 cm rms = 2.73617 cm There are 4 h1 histograms 0 with 30 entries: Edep in absorber (MeV) @@ -1030,10 +1040,10 @@ View them with "/vis/plot" or "/vis/reviewPlots". ----> print histograms statistic -EAbs: mean = 217.841 MeV rms = 48.9819 MeV -EGap: mean = 19.6955 MeV rms = 10.0698 MeV -LAbs: mean = 9.0012 cm rms = 2.28215 cm -LGap: mean = 4.59033 cm rms = 1.30923 cm +EAbs: mean = 216.845 MeV rms = 41.8355 MeV +EGap: mean = 19.3365 MeV rms = 9.77126 MeV +LAbs: mean = 9.02409 cm rms = 2.17903 cm +LGap: mean = 4.58733 cm rms = 1.29921 cm There are 4 h1 histograms 0 with 40 entries: Edep in absorber (MeV) 1 with 40 entries: Edep in gap (MeV) @@ -1048,13 +1058,13 @@ View them with "/vis/plot" or "/vis/reviewPlots". ----> print histograms statistic -EAbs: mean = 189.975 MeV rms = 56.6818 MeV -EGap: mean = 17.0704 MeV rms = 11.9265 MeV -LAbs: mean = 8.89565 cm rms = 2.51711 cm -LGap: mean = 4.48712 cm rms = 1.60457 cm +EAbs: mean = 196.65 MeV rms = 52.0211 MeV +EGap: mean = 17.2096 MeV rms = 11.4505 MeV +LAbs: mean = 8.9716 cm rms = 2.03088 cm +LGap: mean = 4.53482 cm rms = 1.31395 cm There are 4 h1 histograms 0 with 50 entries: Edep in absorber (MeV) - 1 with 49 entries: Edep in gap (MeV) + 1 with 50 entries: Edep in gap (MeV) 2 with 50 entries: trackL in absorber (mm) 3 with 50 entries: trackL in gap (mm) List them with "/analysis/list". diff --git a/examples/extended/analysis/AnaEx03/AnaEx03-root.out b/examples/extended/analysis/AnaEx03/AnaEx03-root.out index a3e747b44ee..cc7c2f6f77b 100644 --- a/examples/extended/analysis/AnaEx03/AnaEx03-root.out +++ b/examples/extended/analysis/AnaEx03/AnaEx03-root.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -79,7 +79,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -245,7 +247,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -277,7 +279,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -309,7 +311,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -322,7 +324,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -368,7 +369,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -400,7 +401,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -432,7 +433,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -464,7 +465,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -496,7 +497,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -528,7 +529,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -560,7 +561,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -945,12 +946,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1013,7 +1023,7 @@ View them with "/vis/plot" or "/vis/reviewPlots". EAbs: mean = 272.05 MeV rms = 9.23393 MeV EGap: mean = 14.0337 MeV rms = 5.20653 MeV -LAbs: mean = 19.596 cm rms = 7.90909 mm +LAbs: mean = 19.596 cm rms = 7.90907 mm LGap: mean = 6.90508 cm rms = 2.73617 cm There are 4 h1 histograms 0 with 30 entries: Edep in absorber (MeV) @@ -1033,10 +1043,10 @@ View them with "/vis/plot" or "/vis/reviewPlots". ----> print histograms statistic -EAbs: mean = 217.841 MeV rms = 48.9819 MeV -EGap: mean = 19.6955 MeV rms = 10.0698 MeV -LAbs: mean = 9.0012 cm rms = 2.28215 cm -LGap: mean = 4.59033 cm rms = 1.30923 cm +EAbs: mean = 216.845 MeV rms = 41.8355 MeV +EGap: mean = 19.3365 MeV rms = 9.77126 MeV +LAbs: mean = 9.02409 cm rms = 2.17903 cm +LGap: mean = 4.58733 cm rms = 1.29921 cm There are 4 h1 histograms 0 with 40 entries: Edep in absorber (MeV) 1 with 40 entries: Edep in gap (MeV) @@ -1051,13 +1061,13 @@ View them with "/vis/plot" or "/vis/reviewPlots". ----> print histograms statistic -EAbs: mean = 189.975 MeV rms = 56.6818 MeV -EGap: mean = 17.0704 MeV rms = 11.9265 MeV -LAbs: mean = 8.89565 cm rms = 2.51711 cm -LGap: mean = 4.48712 cm rms = 1.60457 cm +EAbs: mean = 196.65 MeV rms = 52.0211 MeV +EGap: mean = 17.2096 MeV rms = 11.4505 MeV +LAbs: mean = 8.9716 cm rms = 2.03088 cm +LGap: mean = 4.53482 cm rms = 1.31395 cm There are 4 h1 histograms 0 with 50 entries: Edep in absorber (MeV) - 1 with 49 entries: Edep in gap (MeV) + 1 with 50 entries: Edep in gap (MeV) 2 with 50 entries: trackL in absorber (mm) 3 with 50 entries: trackL in gap (mm) List them with "/analysis/list". diff --git a/examples/extended/analysis/AnaEx03/AnaEx03-xml.out b/examples/extended/analysis/AnaEx03/AnaEx03-xml.out index b02bbc61aed..af3cf46050f 100644 --- a/examples/extended/analysis/AnaEx03/AnaEx03-xml.out +++ b/examples/extended/analysis/AnaEx03/AnaEx03-xml.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -79,7 +79,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -245,7 +247,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -277,7 +279,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -309,7 +311,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -322,7 +324,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -368,7 +369,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -400,7 +401,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -432,7 +433,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -464,7 +465,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -496,7 +497,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -528,7 +529,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -560,7 +561,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -945,12 +946,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1017,7 +1027,7 @@ View them with "/vis/plot" or "/vis/reviewPlots". EAbs: mean = 272.05 MeV rms = 9.23393 MeV EGap: mean = 14.0337 MeV rms = 5.20653 MeV -LAbs: mean = 19.596 cm rms = 7.90909 mm +LAbs: mean = 19.596 cm rms = 7.90907 mm LGap: mean = 6.90508 cm rms = 2.73617 cm There are 4 h1 histograms 0 with 30 entries: Edep in absorber (MeV) @@ -1042,10 +1052,10 @@ View them with "/vis/plot" or "/vis/reviewPlots". ----> print histograms statistic -EAbs: mean = 217.841 MeV rms = 48.9819 MeV -EGap: mean = 19.6955 MeV rms = 10.0698 MeV -LAbs: mean = 9.0012 cm rms = 2.28215 cm -LGap: mean = 4.59033 cm rms = 1.30923 cm +EAbs: mean = 216.845 MeV rms = 41.8355 MeV +EGap: mean = 19.3365 MeV rms = 9.77126 MeV +LAbs: mean = 9.02409 cm rms = 2.17903 cm +LGap: mean = 4.58733 cm rms = 1.29921 cm There are 4 h1 histograms 0 with 40 entries: Edep in absorber (MeV) 1 with 40 entries: Edep in gap (MeV) @@ -1062,13 +1072,13 @@ View them with "/vis/plot" or "/vis/reviewPlots". ----> print histograms statistic -EAbs: mean = 189.975 MeV rms = 56.6818 MeV -EGap: mean = 17.0704 MeV rms = 11.9265 MeV -LAbs: mean = 8.89565 cm rms = 2.51711 cm -LGap: mean = 4.48712 cm rms = 1.60457 cm +EAbs: mean = 196.65 MeV rms = 52.0211 MeV +EGap: mean = 17.2096 MeV rms = 11.4505 MeV +LAbs: mean = 8.9716 cm rms = 2.03088 cm +LGap: mean = 4.53482 cm rms = 1.31395 cm There are 4 h1 histograms 0 with 50 entries: Edep in absorber (MeV) - 1 with 49 entries: Edep in gap (MeV) + 1 with 50 entries: Edep in gap (MeV) 2 with 50 entries: trackL in absorber (mm) 3 with 50 entries: trackL in gap (mm) List them with "/analysis/list". diff --git a/examples/extended/analysis/B1Con/exampleB01Con.out b/examples/extended/analysis/B1Con/exampleB01Con.out index ff8e47f990e..7aadb63c498 100644 --- a/examples/extended/analysis/B1Con/exampleB01Con.out +++ b/examples/extended/analysis/B1Con/exampleB01Con.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -51,7 +51,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -201,7 +203,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -233,7 +235,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -265,7 +267,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -278,7 +280,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -324,7 +325,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -356,7 +357,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -388,7 +389,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -420,7 +421,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -452,7 +453,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -484,7 +485,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -516,7 +517,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -908,12 +909,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -962,13 +972,13 @@ G4ConvergenceTester Output Result of DOSE_TALLY R = 0.0871604 SHIFT = 1.78107e-13 VOV = 0.00865677 - FOM = 4387.73 + FOM = 6581.6 THE LARGEST SCORE = 5.43178e-13 and it happened at 566th event Affected Mean = 4.64875e-14 and its ratio to original is 1.0108 Affected VAR = 1.62996e-26 and its ratio to original is 1.01437 Affected R = 0.086803 and its ratio to original is 0.9959 Affected SHIFT = 1.78431e-13 and its ratio to original is 1.00182 - Affected FOM = 4387.73 and its ratio to original is 1 + Affected FOM = 6581.6 and its ratio to original is 1 MEAN distribution is not RANDOM r follows 1/std::sqrt(N) r is monotonically decrease @@ -982,22 +992,22 @@ This result passes 5 / 8 Convergence Test. G4ConvergenceTester Output History of DOSE_TALLY i/16 till_ith mean var sd r vov fom shift e r2eff r2int - 1 62 6.0424e-14 2.12694e-26 1.4584e-13 0.304087 0.085229 360.481 1.58047e-13 0.253968 0.046627 0.0443743 - 2 124 4.34522e-14 1.48629e-26 1.21913e-13 0.250949 0.0715801 529.309 1.72666e-13 0.2 0.032 0.0304714 - 3 187 4.30264e-14 1.42936e-26 1.19556e-13 0.202655 0.0493 811.642 1.71213e-13 0.191489 0.0224586 0.0183919 - 4 249 3.87796e-14 1.29331e-26 1.13724e-13 0.185471 0.0425375 969.002 1.75121e-13 0.18 0.0182222 0.0160398 - 5 312 4.56897e-14 1.50775e-26 1.22791e-13 0.151906 0.0276474 1444.54 1.70399e-13 0.201278 0.0126781 0.0103236 - 6 374 4.42641e-14 1.49653e-26 1.22333e-13 0.142717 0.0239222 1636.55 1.73651e-13 0.189333 0.0114178 0.00889589 - 7 437 4.66551e-14 1.62359e-26 1.2742e-13 0.130498 0.019391 1957.37 1.76608e-13 0.189498 0.00976509 0.00722566 - 8 499 4.4408e-14 1.54392e-26 1.24254e-13 0.125131 0.0183329 2128.86 1.79065e-13 0.188 0.0086383 0.00698825 - 9 562 4.52784e-14 1.55386e-26 1.24654e-13 0.116027 0.0157509 2476.05 1.76339e-13 0.186501 0.00774761 0.0056908 - 10 624 4.44384e-14 1.55239e-26 1.24595e-13 0.112151 0.0146302 2650.17 1.79489e-13 0.184 0.00709565 0.00546203 - 11 687 4.50037e-14 1.5803e-26 1.2571e-13 0.106495 0.013151 2939.15 1.80261e-13 0.184593 0.00642053 0.00490412 - 12 749 4.56328e-14 1.59111e-26 1.26139e-13 0.100935 0.0118922 3271.86 1.79403e-13 0.186667 0.00580952 0.00436478 - 13 812 4.54608e-14 1.57597e-26 1.25538e-13 0.0968483 0.0109613 3553.81 1.78444e-13 0.186962 0.00534894 0.00401913 - 14 874 4.62163e-14 1.60542e-26 1.26705e-13 0.0926819 0.00992813 3880.51 1.77974e-13 0.187429 0.0049547 0.00362541 - 15 937 4.637e-14 1.62631e-26 1.27527e-13 0.0897973 0.00916043 4133.83 1.78559e-13 0.186567 0.00464819 0.00340676 - 16 999 4.59908e-14 1.60687e-26 1.26762e-13 0.0871604 0.00865677 4387.73 1.78107e-13 0.187 0.00434759 0.00324175 + 1 62 6.0424e-14 2.12694e-26 1.4584e-13 0.304087 0.085229 540.722 1.58047e-13 0.253968 0.046627 0.0443743 + 2 124 4.34522e-14 1.48629e-26 1.21913e-13 0.250949 0.0715801 793.963 1.72666e-13 0.2 0.032 0.0304714 + 3 187 4.30264e-14 1.42936e-26 1.19556e-13 0.202655 0.0493 1217.46 1.71213e-13 0.191489 0.0224586 0.0183919 + 4 249 3.87796e-14 1.29331e-26 1.13724e-13 0.185471 0.0425375 1453.5 1.75121e-13 0.18 0.0182222 0.0160398 + 5 312 4.56897e-14 1.50775e-26 1.22791e-13 0.151906 0.0276474 2166.8 1.70399e-13 0.201278 0.0126781 0.0103236 + 6 374 4.42641e-14 1.49653e-26 1.22333e-13 0.142717 0.0239222 2454.83 1.73651e-13 0.189333 0.0114178 0.00889589 + 7 437 4.66551e-14 1.62359e-26 1.2742e-13 0.130498 0.019391 2936.06 1.76608e-13 0.189498 0.00976509 0.00722566 + 8 499 4.4408e-14 1.54392e-26 1.24254e-13 0.125131 0.0183329 3193.28 1.79065e-13 0.188 0.0086383 0.00698825 + 9 562 4.52784e-14 1.55386e-26 1.24654e-13 0.116027 0.0157509 3714.07 1.76339e-13 0.186501 0.00774761 0.0056908 + 10 624 4.44384e-14 1.55239e-26 1.24595e-13 0.112151 0.0146302 3975.26 1.79489e-13 0.184 0.00709565 0.00546203 + 11 687 4.50037e-14 1.5803e-26 1.2571e-13 0.106495 0.013151 4408.73 1.80261e-13 0.184593 0.00642053 0.00490412 + 12 749 4.56328e-14 1.59111e-26 1.26139e-13 0.100935 0.0118922 4907.79 1.79403e-13 0.186667 0.00580952 0.00436478 + 13 812 4.54608e-14 1.57597e-26 1.25538e-13 0.0968483 0.0109613 5330.72 1.78444e-13 0.186962 0.00534894 0.00401913 + 14 874 4.62163e-14 1.60542e-26 1.26705e-13 0.0926819 0.00992813 5820.77 1.77974e-13 0.187429 0.0049547 0.00362541 + 15 937 4.637e-14 1.62631e-26 1.27527e-13 0.0897973 0.00916043 6200.75 1.78559e-13 0.186567 0.00464819 0.00340676 + 16 999 4.59908e-14 1.60687e-26 1.26762e-13 0.0871604 0.00865677 6581.6 1.78107e-13 0.187 0.00434759 0.00324175 --------------------End of Global Run----------------------- The run consists of 1000 gamma of 6 MeV @@ -1027,24 +1037,24 @@ i/16 till_ith mean var sd r vov ---> Begin of event: 900 G4ConvergenceTester Output Result of DOSE_TALLY - EFFICIENCY = 0.614 - MEAN = 4.91863e-12 - VAR = 2.14524e-23 - SD = 4.63168e-12 - R = 0.0297779 - SHIFT = 1.07833e-13 - VOV = 0.000162105 - FOM = 4337.49 -THE LARGEST SCORE = 1.07332e-11 and it happened at 846th event - Affected Mean = 4.92444e-12 and its ratio to original is 1.00118 - Affected VAR = 2.14648e-23 and its ratio to original is 1.00057 - Affected R = 0.0297364 and its ratio to original is 0.998608 - Affected SHIFT = 1.03534e-13 and its ratio to original is 0.96013 - Affected FOM = 4337.49 and its ratio to original is 1 + EFFICIENCY = 0.619 + MEAN = 4.93724e-12 + VAR = 2.13442e-23 + SD = 4.61998e-12 + R = 0.0295908 + SHIFT = 1.07914e-13 + VOV = 0.000166371 + FOM = 5191.16 +THE LARGEST SCORE = 1.08323e-11 and it happened at 985th event + Affected Mean = 4.94312e-12 and its ratio to original is 1.00119 + Affected VAR = 2.13576e-23 and its ratio to original is 1.00063 + Affected R = 0.02955 and its ratio to original is 0.998622 + Affected SHIFT = 1.03705e-13 and its ratio to original is 0.960996 + Affected FOM = 5191.16 and its ratio to original is 1 MEAN distribution is RANDOM r follows 1/std::sqrt(N) r is monotonically decrease -r is less than 0.1. r = 0.0297779 +r is less than 0.1. r = 0.0295908 VOV follows 1/std::sqrt(N) VOV is monotonically decrease FOM distribution is not RANDOM @@ -1054,26 +1064,26 @@ This result passes 6 / 8 Convergence Test. G4ConvergenceTester Output History of DOSE_TALLY i/16 till_ith mean var sd r vov fom shift e r2eff r2int - 1 62 4.38263e-12 2.21208e-23 4.70328e-12 0.135206 0.00334294 218.811 6.59571e-13 0.571429 0.0119048 0.00608568 - 2 124 4.33595e-12 2.11358e-23 4.59737e-12 0.0948353 0.00192038 444.754 6.5045e-13 0.552 0.00649275 0.00242903 - 3 187 4.61116e-12 2.11147e-23 4.59507e-12 0.072678 0.00104212 757.276 3.91328e-13 0.590426 0.00368986 0.00156414 - 4 249 4.69291e-12 2.13192e-23 4.61727e-12 0.0622261 0.000720901 1033.03 3.23699e-13 0.596 0.00271141 0.00114519 - 5 312 4.82305e-12 2.12567e-23 4.6105e-12 0.0540324 0.000532754 1370.1 1.73894e-13 0.607029 0.00206827 0.000841898 - 6 374 4.76504e-12 2.12256e-23 4.60713e-12 0.0499285 0.00045558 1604.59 2.37738e-13 0.6 0.00177778 0.000708427 - 7 437 4.73191e-12 2.13758e-23 4.6234e-12 0.0466861 0.000383653 1835.2 2.73418e-13 0.59589 0.00154831 0.000626305 - 8 499 4.78901e-12 2.13179e-23 4.61713e-12 0.0431162 0.000334904 2151.68 2.24491e-13 0.604 0.00131126 0.000544033 - 9 562 4.92343e-12 2.11972e-23 4.60404e-12 0.039411 0.000301432 2575.29 9.3764e-14 0.618117 0.00109736 0.000453101 - 10 624 4.97897e-12 2.12733e-23 4.6123e-12 0.0370542 0.000267654 2913.29 5.49607e-14 0.624 0.000964103 0.000406717 - 11 687 4.97543e-12 2.1355e-23 4.62115e-12 0.0354099 0.000238356 3067.44 5.32588e-14 0.617733 0.000899453 0.000352588 - 12 749 5.0258e-12 2.13455e-23 4.62012e-12 0.0335673 0.0002202 3413.44 1.1139e-14 0.624 0.000803419 0.000321845 - 13 812 5.06002e-12 2.12467e-23 4.60941e-12 0.0319483 0.000209359 3768.18 -1.56164e-14 0.630996 0.000719305 0.000300133 - 14 874 5.04729e-12 2.1274e-23 4.61238e-12 0.0308932 0.000192804 4029.96 -1.07897e-14 0.629714 0.000672025 0.000281274 - 15 937 4.9954e-12 2.14039e-23 4.62643e-12 0.0302395 0.000173017 4206.08 3.79467e-14 0.622601 0.000646231 0.000267222 - 16 999 4.91863e-12 2.14524e-23 4.63168e-12 0.0297779 0.000162105 4337.49 1.07833e-13 0.614 0.000628664 0.000257172 + 1 62 4.38263e-12 2.21208e-23 4.70328e-12 0.135206 0.00334294 248.649 6.59571e-13 0.571429 0.0119048 0.00608568 + 2 124 4.33595e-12 2.11358e-23 4.59737e-12 0.0948353 0.00192038 505.402 6.5045e-13 0.552 0.00649275 0.00242903 + 3 187 4.61116e-12 2.11147e-23 4.59507e-12 0.072678 0.00104212 860.54 3.91328e-13 0.590426 0.00368986 0.00156414 + 4 249 4.7038e-12 2.10402e-23 4.58696e-12 0.0616745 0.000772654 1194.99 2.97843e-13 0.6 0.00266667 0.00112186 + 5 312 4.89922e-12 2.10031e-23 4.58291e-12 0.052874 0.00058943 1625.9 1.20592e-13 0.626198 0.00190715 0.000879575 + 6 374 4.90357e-12 2.10182e-23 4.58456e-12 0.0482802 0.000486749 1950.02 1.26468e-13 0.624 0.00160684 0.000717928 + 7 437 4.87756e-12 2.08961e-23 4.57123e-12 0.044781 0.000424288 2266.68 1.4648e-13 0.623288 0.0013799 0.000620858 + 8 499 4.98456e-12 2.093e-23 4.57493e-12 0.0410461 0.000367079 2697.95 5.24184e-14 0.632 0.00116456 0.000516856 + 9 562 4.96867e-12 2.11266e-23 4.59637e-12 0.0389871 0.00031331 2990.44 6.74759e-14 0.623446 0.0010728 0.000444489 + 10 624 4.97057e-12 2.11541e-23 4.59936e-12 0.0370127 0.000280293 3318 6.71146e-14 0.624 0.000964103 0.000403643 + 11 687 4.9675e-12 2.10852e-23 4.59187e-12 0.0352418 0.000256954 3659.84 6.92913e-14 0.626453 0.000866697 0.000373479 + 12 749 4.85957e-12 2.10558e-23 4.58866e-12 0.0344792 0.000238397 3823.51 1.65614e-13 0.618667 0.000821839 0.000365393 + 13 812 4.92694e-12 2.1194e-23 4.60369e-12 0.0327706 0.000210358 4232.62 1.10454e-13 0.622386 0.000746272 0.000326317 + 14 874 4.89643e-12 2.12847e-23 4.61354e-12 0.031853 0.000192674 4479.98 1.42237e-13 0.619429 0.000702161 0.000311294 + 15 937 4.95228e-12 2.12424e-23 4.60895e-12 0.0303875 0.000179785 4922.5 8.71702e-14 0.623667 0.000643304 0.000279115 + 16 999 4.93724e-12 2.13442e-23 4.61998e-12 0.0295908 0.000166371 5191.16 1.07914e-13 0.619 0.000615509 0.000259229 --------------------End of Global Run----------------------- The run consists of 1000 proton of 210 MeV - Dose in scoring volume : 4.91863 nanoGy +- 146.393 picoGy + Dose in scoring volume : 4.93724 nanoGy +- 146.024 picoGy ------------------------------------------------------------ Graphics systems deleted. diff --git a/examples/extended/biasing/B01/exampleB01.out b/examples/extended/biasing/B01/exampleB01.out index d00f4855b4e..0beccb5c73f 100644 --- a/examples/extended/biasing/B01/exampleB01.out +++ b/examples/extended/biasing/B01/exampleB01.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -220,7 +220,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -252,7 +252,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -284,7 +284,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -297,7 +297,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -343,7 +342,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -375,7 +374,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -407,7 +406,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -439,7 +438,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -471,7 +470,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -503,7 +502,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -535,7 +534,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -920,12 +919,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/biasing/B02/exampleB02.out b/examples/extended/biasing/B02/exampleB02.out index 1a9e2b0fe64..2e07b0c70d7 100644 --- a/examples/extended/biasing/B02/exampleB02.out +++ b/examples/extended/biasing/B02/exampleB02.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -247,7 +247,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -279,7 +279,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -311,7 +311,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -324,7 +324,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -370,7 +369,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -402,7 +401,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -434,7 +433,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -466,7 +465,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -498,7 +497,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -530,7 +529,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -562,7 +561,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -947,12 +946,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/biasing/B03/exampleB03.out b/examples/extended/biasing/B03/exampleB03.out index 5cc0be5db22..da12923926e 100644 --- a/examples/extended/biasing/B03/exampleB03.out +++ b/examples/extended/biasing/B03/exampleB03.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -587,35 +587,21 @@ hIoni: for pi- XStype:3 SubType=2 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV -Type of de-excitation inverse x-section 3 -Type of de-excitation factory Evaporation+GEM -Number of de-excitation channels 68 -Min excitation energy 10 eV -Min energy per nucleon for multifragmentation 200 GeV -Limit excitation energy for Fermi BreakUp 20 MeV -Level density (1/MeV) 0.075 -Use simple level density model 1 -Use discrete excitation energy of the residual 1 -Time limit for long lived isomeres 1 ns -Isomer production flag 1 -Internal e- conversion flag 1 -Store e- internal conversion data 0 -Correlated gamma emission flag 0 -Max 2J for sampling of angular correlations 10 +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 ======================================================================= +====== Nuclear De-excitation Module Parameters ======== ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== -======================================================================= -Type of pre-compound inverse x-section 3 -Pre-compound model active 1 -Pre-compound excitation low energy 100 keV -Pre-compound excitation high energy 30 MeV Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/biasing/GB01/exampleGB01.out b/examples/extended/biasing/GB01/exampleGB01.out index 3a968964470..3cbf4ae3cd7 100644 --- a/examples/extended/biasing/GB01/exampleGB01.out +++ b/examples/extended/biasing/GB01/exampleGB01.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -57,7 +57,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -207,7 +209,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -239,7 +241,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -271,7 +273,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -284,7 +286,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -330,7 +331,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -362,7 +363,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -394,7 +395,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -426,7 +427,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -458,7 +459,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -490,7 +491,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -522,7 +523,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -907,12 +908,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1891,7 +1901,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 23.2 -6.87 188 0.0817 0 0 0 test.phys initStep - 1 23.2 -6.87 188 0 0.0817 0.000843 0.000843 test.phys ionIoni + 1 23.2 -6.87 188 0 0.0817 0.00176 0.00176 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -1914,7 +1924,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 16.3 0.113 0 0 0 test.phys initStep - 1 -0.000534 -0.000352 16.3 0 0.113 0.00101 0.00101 test.phys ionIoni + 1 -0.000948 -0.000625 16.3 0 0.113 0.00204 0.00204 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -1935,7 +1945,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 48.9 0.122 0 0 0 test.phys initStep - 1 0.000312 -0.000575 48.9 0 0.122 0.00105 0.00105 test.phys ionIoni + 1 0.000557 -0.00103 48.9 0 0.122 0.00211 0.00211 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -1959,7 +1969,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 -62.4 -148 58.4 0.123 0 0 0 test.phys initStep - 1 -62.4 -148 58.4 0 0.123 0.00106 0.00106 test.phys ionIoni + 1 -62.4 -148 58.4 0 0.123 0.00213 0.00213 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 3, Parent ID = 1 @@ -1967,7 +1977,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 -55 -156 33.6 0.185 0 0 0 test.phys initStep - 1 -55 -156 33.6 0 0.185 0.00133 0.00133 test.phys ionIoni + 1 -55 -156 33.6 0 0.185 0.00254 0.00254 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 2, Parent ID = 1 @@ -1975,7 +1985,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 72.7 0.143 0 0 0 test.phys initStep - 1 0.000238 0.000629 72.7 0 0.143 0.00115 0.00115 test.phys ionIoni + 1 0.000426 0.00113 72.7 0 0.143 0.00228 0.00228 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -1995,7 +2005,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 17.4 -2.16 66 0.127 0 0 0 test.phys initStep - 1 17.4 -2.16 66 0 0.127 0.00108 0.00108 test.phys ionIoni + 1 17.4 -2.16 66 0 0.127 0.00216 0.00216 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 2, Parent ID = 1 @@ -2003,7 +2013,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 58.4 0.0833 0 0 0 test.phys initStep - 1 -0.000554 6.88e-05 58.4 0 0.0833 0.000852 0.000852 test.phys ionIoni + 1 -0.000949 0.000118 58.4 0 0.0833 0.00177 0.00177 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -2020,7 +2030,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 37 0.168 0 0 0 test.phys initStep - 1 -7.06e-05 0.000478 37 0 0.168 0.00127 0.00127 test.phys ionIoni + 1 -0.000127 0.000856 37 0 0.168 0.00246 0.00246 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = gamma, Track ID = 3, Parent ID = 1 @@ -2080,7 +2090,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 11.7 -7.46 153 0.197 0 0 0 test.phys initStep - 1 11.7 -7.46 153 0 0.197 0.00136 0.00136 test.phys ionIoni + 1 11.7 -7.46 153 0 0.197 0.00258 0.00258 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 2, Parent ID = 1 @@ -2088,7 +2098,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 155 0.147 0 0 0 test.phys initStep - 1 -0.000568 0.000362 155 0 0.147 0.00117 0.00117 test.phys ionIoni + 1 -0.00102 0.000649 155 0 0.147 0.00231 0.00231 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -2119,7 +2129,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 -118 -104 181 0.0767 0 0 0 test.phys initStep - 1 -118 -104 181 0 0.0767 0.000816 0.000816 test.phys ionIoni + 1 -118 -104 181 0 0.0767 0.0017 0.0017 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -2138,7 +2148,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 78.8 0.732 0 0 0 test.phys initStep - 1 0.00201 -0.000424 78.8 0 0.732 0.0021 0.0021 test.phys ionIoni + 1 0.00298 -0.000628 78.8 0 0.732 0.00314 0.00314 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -2155,7 +2165,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 71.9 0.41 0 0 0 test.phys initStep - 1 0.00167 8.14e-05 71.9 0 0.41 0.00175 0.00175 test.phys ionIoni + 1 0.00274 0.000134 71.9 0 0.41 0.00293 0.00293 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = gamma, Track ID = 5, Parent ID = 1 @@ -2278,7 +2288,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 9.68 1.19 0 0 0 test.phys initStep - 1 0.00192 5.7e-05 9.68 0 1.19 0.00317 0.00317 test.phys ionIoni + 1 0.00225 6.67e-05 9.68 0 1.19 0.0037 0.0037 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = triton, Track ID = 8, Parent ID = 1 @@ -2373,7 +2383,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 85.2 50 43.3 0.525 0 0 0 test.phys initStep - 1 85.2 50 43.3 0 0.525 0.0019 0.0019 test.phys ionIoni + 1 85.2 50 43.3 0 0.525 0.00303 0.00303 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 14, Parent ID = 4 @@ -2381,7 +2391,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 55.3 -179 17.4 0.81 0 0 0 test.phys initStep - 1 55.3 -179 17.4 0 0.81 0.00216 0.00216 test.phys ionIoni + 1 55.3 -179 17.4 0 0.81 0.00316 0.00316 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = proton, Track ID = 3, Parent ID = 1 @@ -2408,7 +2418,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 -3.55 0.902 17.2 0.853 0 0 0 test.phys initStep - 1 -3.55 0.903 17.2 0 0.853 0.00232 0.00232 test.phys ionIoni + 1 -3.55 0.904 17.2 0 0.853 0.00324 0.00324 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = gamma, Track ID = 21, Parent ID = 2 @@ -2462,7 +2472,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 -86.8 191 144 0.128 0 0 0 test.phys initStep - 1 -86.8 191 144 0 0.128 0.00108 0.00108 test.phys ionIoni + 1 -86.8 191 144 0 0.128 0.00216 0.00216 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = gamma, Track ID = 27, Parent ID = 19 @@ -2513,7 +2523,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 -58.1 75.3 168 0.276 0 0 0 test.phys initStep - 1 -58.1 75.3 168 0 0.276 0.00155 0.00155 test.phys ionIoni + 1 -58.1 75.3 168 0 0.276 0.00278 0.00278 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = proton, Track ID = 18, Parent ID = 2 @@ -2594,7 +2604,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 7.01 22.8 27.5 2.35 0 0 0 test.phys initStep - 1 7.01 22.8 27.5 0 2.35 0.00285 0.00285 test.phys ionIoni + 1 7.01 22.8 27.5 0 2.35 0.00321 0.00321 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = gamma, Track ID = 40, Parent ID = 16 @@ -2667,7 +2677,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 8.37 -11.7 11.3 0.235 0 0 0 test.phys initStep - 1 8.37 -11.7 11.3 0 0.235 0.00146 0.00146 test.phys ionIoni + 1 8.37 -11.7 11.3 0 0.235 0.0027 0.0027 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = gamma, Track ID = 37, Parent ID = 16 @@ -2810,7 +2820,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 -3.18 0.582 18.1 1.68 0 0 0 test.phys initStep - 1 -3.18 0.579 18.1 0 1.68 0.0026 0.0026 test.phys ionIoni + 1 -3.18 0.579 18.1 0 1.68 0.00322 0.00322 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -2849,7 +2859,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 168 0.428 0 0 0 test.phys initStep - 1 6.38e-05 -0.00172 168 0 0.428 0.00178 0.00178 test.phys ionIoni + 1 0.000104 -0.00281 168 0 0.428 0.00295 0.00295 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -2866,7 +2876,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 16.1 0.0522 0 0 0 test.phys initStep - 1 0.000744 0.000102 16.1 0 0.0522 0.000909 0.000909 test.phys ionIoni + 1 0.0013 0.000179 16.1 0 0.0522 0.00188 0.00188 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = alpha, Track ID = 7, Parent ID = 1 @@ -2911,7 +2921,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 226 -182 21.8 0.159 0 0 0 test.phys initStep - 1 226 -182 21.8 0 0.159 0.00122 0.00122 test.phys ionIoni + 1 226 -182 21.8 0 0.159 0.00239 0.00239 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = proton, Track ID = 3, Parent ID = 1 diff --git a/examples/extended/biasing/GB02/exampleGB02.out b/examples/extended/biasing/GB02/exampleGB02.out index 38ece9237b3..981f5dc7094 100644 --- a/examples/extended/biasing/GB02/exampleGB02.out +++ b/examples/extended/biasing/GB02/exampleGB02.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -57,7 +57,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -207,7 +209,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -239,7 +241,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -271,7 +273,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -284,7 +286,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -330,7 +331,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -362,7 +363,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -394,7 +395,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -426,7 +427,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -458,7 +459,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -490,7 +491,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -522,7 +523,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -907,12 +908,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -2999,7 +3009,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 328 77.4 80.7 0.0828 0 0 0 test.phys initStep - 1 328 77.4 80.7 0 0.0828 0.00085 0.00085 test.phys ionIoni + 1 328 77.4 80.7 0 0.0828 0.00177 0.00177 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 7, Parent ID = 2 @@ -3007,7 +3017,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 351 85.4 99.9 0.116 0 0 0 test.phys initStep - 1 351 85.4 99.9 0 0.116 0.00102 0.00102 test.phys ionIoni + 1 351 85.4 99.9 0 0.116 0.00206 0.00206 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 6, Parent ID = 2 @@ -3015,7 +3025,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 194 38.5 129 0.081 0 0 0 test.phys initStep - 1 194 38.5 129 0 0.081 0.00084 0.00084 test.phys ionIoni + 1 194 38.5 129 0 0.081 0.00175 0.00175 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 5, Parent ID = 2 @@ -3023,7 +3033,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 163 121 113 0.142 0 0 0 test.phys initStep - 1 163 121 113 0 0.142 0.00114 0.00114 test.phys ionIoni + 1 163 121 113 0 0.142 0.00227 0.00227 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 4, Parent ID = 2 @@ -3031,7 +3041,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 85.8 3.5 84 0.106 0 0 0 test.phys initStep - 1 85.8 3.5 84 0 0.106 0.00097 0.00097 test.phys ionIoni + 1 85.8 3.5 84 0 0.106 0.00198 0.00198 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 3, Parent ID = 2 @@ -3039,7 +3049,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 42.4 0.0781 0 0 0 test.phys initStep - 1 -0.000538 -2.2e-05 42.4 0 0.0781 0.000824 0.000824 test.phys ionIoni + 1 -0.000912 -3.72e-05 42.4 0 0.0781 0.00172 0.00172 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -3072,7 +3082,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 -13.5 -228 84.4 0.109 0 0 0 test.phys initStep - 1 -13.5 -228 84.4 0 0.109 0.000986 0.000986 test.phys ionIoni + 1 -13.5 -228 84.4 0 0.109 0.00201 0.00201 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 5, Parent ID = 2 @@ -3080,7 +3090,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 -48.7 -176 31.6 0.135 0 0 0 test.phys initStep - 1 -48.7 -176 31.6 0 0.135 0.00111 0.00111 test.phys ionIoni + 1 -48.7 -176 31.6 0 0.135 0.00222 0.00222 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 4, Parent ID = 2 @@ -3088,7 +3098,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 -7.53 -161 37.7 0.0779 0 0 0 test.phys initStep - 1 -7.53 -161 37.7 0 0.0779 0.000823 0.000823 test.phys ionIoni + 1 -7.53 -161 37.7 0 0.0779 0.00172 0.00172 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 3, Parent ID = 2 @@ -3096,7 +3106,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 6.13 0.11 0 0 0 test.phys initStep - 1 2.97e-05 0.000633 6.13 0 0.11 0.00099 0.00099 test.phys ionIoni + 1 5.26e-05 0.00112 6.13 0 0.11 0.00202 0.00202 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -3148,7 +3158,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 74.4 21.1 80.5 0.105 0 0 0 test.phys initStep - 1 74.4 21.1 80.5 0 0.105 0.000965 0.000965 test.phys ionIoni + 1 74.4 21.1 80.5 0 0.105 0.00198 0.00198 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 4, Parent ID = 2 @@ -3156,7 +3166,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 37.3 -17.2 64.8 0.0832 0 0 0 test.phys initStep - 1 37.3 -17.2 64.8 0 0.0832 0.000851 0.000851 test.phys ionIoni + 1 37.3 -17.2 64.8 0 0.0832 0.00177 0.00177 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 3, Parent ID = 2 @@ -3164,7 +3174,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 68.3 0.145 0 0 0 test.phys initStep - 1 -0.000611 0.000283 68.3 0 0.145 0.00116 0.00116 test.phys ionIoni + 1 -0.0011 0.000507 68.3 0 0.145 0.00229 0.00229 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -3195,7 +3205,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 23.8 -7.65 161 0.162 0 0 0 test.phys initStep - 1 23.8 -7.65 161 0 0.162 0.00124 0.00124 test.phys ionIoni + 1 23.8 -7.65 161 0 0.162 0.00241 0.00241 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 3, Parent ID = 2 @@ -3203,7 +3213,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 158 0.116 0 0 0 test.phys initStep - 1 -0.000614 0.000197 158 0 0.116 0.00102 0.00102 test.phys ionIoni + 1 -0.00109 0.000351 158 0 0.116 0.00207 0.00207 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -3233,7 +3243,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 8.1 0.109 0 0 0 test.phys initStep - 1 0.000445 0.000447 8.11 0 0.109 0.000983 0.000983 test.phys ionIoni + 1 0.000787 0.000791 8.11 0 0.109 0.00201 0.00201 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -3282,7 +3292,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0.364 -0.185 145 0.0908 0 0 0 test.phys initStep - 1 0.363 -0.185 145 0 0.0908 0.00104 0.00104 test.phys ionIoni + 1 0.363 -0.185 145 0 0.0908 0.00215 0.00215 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = proton, Track ID = 4, Parent ID = 2 @@ -3299,7 +3309,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 146 0.218 0 0 0 test.phys initStep - 1 -0.00043 0.000219 146 0 0.218 0.00142 0.00142 test.phys ionIoni + 1 -0.000761 0.000387 146 0 0.218 0.00265 0.00265 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -3329,7 +3339,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 5.41 -5.11 147 0.121 0 0 0 test.phys initStep - 1 5.41 -5.11 147 0 0.121 0.00105 0.00105 test.phys ionIoni + 1 5.41 -5.11 147 0 0.121 0.00211 0.00211 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 3, Parent ID = 2 @@ -3337,7 +3347,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 146 0.125 0 0 0 test.phys initStep - 1 -0.000479 0.000452 146 0 0.125 0.00106 0.00106 test.phys ionIoni + 1 -0.000855 0.000807 146 0 0.125 0.00214 0.00214 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -3370,7 +3380,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 -100 -315 60.6 0.113 0 0 0 test.phys initStep - 1 -100 -315 60.6 0 0.113 0.001 0.001 test.phys ionIoni + 1 -100 -315 60.6 0 0.113 0.00204 0.00204 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 4, Parent ID = 2 @@ -3378,7 +3388,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 -95.3 -308 74.1 0.0861 0 0 0 test.phys initStep - 1 -95.3 -308 74.1 0 0.0861 0.000867 0.000867 test.phys ionIoni + 1 -95.3 -308 74.1 0 0.0861 0.0018 0.0018 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = N14, Track ID = 3, Parent ID = 2 @@ -3386,7 +3396,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 76.4 0.135 0 0 0 test.phys initStep - 1 0.000198 0.000639 76.4 0 0.135 0.00111 0.00111 test.phys ionIoni + 1 0.000354 0.00114 76.4 0 0.135 0.00222 0.00222 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -3415,7 +3425,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 127 0.539 0 0 0 test.phys initStep - 1 0.000908 0.00163 127 0 0.539 0.00192 0.00192 test.phys ionIoni + 1 0.00142 0.00256 127 0 0.539 0.00304 0.00304 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -3463,7 +3473,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 91.3 0.534 0 0 0 test.phys initStep - 1 0.00109 -0.00089 91.3 0 0.534 0.00203 0.00203 test.phys ionIoni + 1 0.00167 -0.00136 91.3 0 0.534 0.00312 0.00312 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = deuteron, Track ID = 6, Parent ID = 2 @@ -3536,7 +3546,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 36 -19.4 139 1.21 0 0 0 test.phys initStep - 1 36 -19.4 139 0 1.21 0.00254 0.00254 test.phys ionIoni + 1 36 -19.4 139 0 1.21 0.00329 0.00329 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = gamma, Track ID = 9, Parent ID = 2 @@ -3568,7 +3578,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 131 134 6.24 0.166 0 0 0 test.phys initStep - 1 131 134 6.24 0 0.166 0.00126 0.00126 test.phys ionIoni + 1 131 134 6.24 0 0.166 0.00244 0.00244 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = gamma, Track ID = 7, Parent ID = 2 @@ -3652,7 +3662,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 25.8 0.9 0 0 0 test.phys initStep - 1 -0.00191 0.00103 25.8 0 0.9 0.00222 0.00222 test.phys ionIoni + 1 -0.00272 0.00147 25.8 0 0.9 0.00318 0.00318 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -3813,7 +3823,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 -26.1 140 91.9 1.62 0 0 0 test.phys initStep - 1 -26.1 140 91.9 0 1.62 0.00292 0.00292 test.phys ionIoni + 1 -26.1 140 91.9 0 1.62 0.00358 0.00358 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = gamma, Track ID = 22, Parent ID = 5 @@ -3927,7 +3937,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 177 0.533 0 0 0 test.phys initStep - 1 -0.00139 0.000792 177 0 0.533 0.00202 0.00202 test.phys ionIoni + 1 -0.00213 0.00121 177 0 0.533 0.00312 0.00312 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = gamma, Track ID = 6, Parent ID = 2 @@ -4000,7 +4010,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0.975 1.49 147 3.79 0 0 0 test.phys initStep - 1 0.977 1.49 147 0 3.79 0.00392 0.00392 test.phys ionIoni + 1 0.976 1.49 147 0 3.79 0.00335 0.00335 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = gamma, Track ID = 7, Parent ID = 2 @@ -4080,7 +4090,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 108 12.1 0 0 0 test.phys initStep - 1 -0.000694 -0.00461 108 0 12.1 0.0191 0.0191 test.phys ionIoni + 1 -0.000182 -0.00121 108 0 12.1 0.00501 0.00501 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = deuteron, Track ID = 8, Parent ID = 2 @@ -4509,7 +4519,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 8.46 -3.64 83.6 1.31 0 0 0 test.phys initStep - 1 8.46 -3.64 83.6 0 1.31 0.00275 0.00275 test.phys ionIoni + 1 8.46 -3.64 83.6 0 1.31 0.00356 0.00356 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 52, Parent ID = 4 @@ -4527,7 +4537,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 63.7 -145 27.1 0.0842 0 0 0 test.phys initStep - 1 63.7 -145 27.1 0 0.0842 0.000857 0.000857 test.phys ionIoni + 1 63.7 -145 27.1 0 0.0842 0.00178 0.00178 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = proton, Track ID = 51, Parent ID = 4 @@ -4556,7 +4566,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 -0.0957 3.02 108 1.96 0 0 0 test.phys initStep - 1 -0.0969 3.02 108 0 1.96 0.00308 0.00308 test.phys ionIoni + 1 -0.0971 3.02 108 0 1.96 0.00359 0.00359 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = gamma, Track ID = 58, Parent ID = 3 @@ -4648,7 +4658,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 25.2 -15.5 10.3 0.183 0 0 0 test.phys initStep - 1 25.2 -15.5 10.3 0 0.183 0.00153 0.00153 test.phys ionIoni + 1 25.2 -15.5 10.3 0 0.183 0.00293 0.00293 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = gamma, Track ID = 68, Parent ID = 55 @@ -4716,7 +4726,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 3.4 -7.2 41.9 0.118 0 0 0 test.phys initStep - 1 3.4 -7.2 41.9 0 0.118 0.00103 0.00103 test.phys ionIoni + 1 3.4 -7.2 41.9 0 0.118 0.00209 0.00209 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = neutron, Track ID = 1, Parent ID = 0 @@ -4743,7 +4753,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 117 0.399 0 0 0 test.phys initStep - 1 -0.000881 0.00172 117 0 0.399 0.00203 0.00203 test.phys ionIoni + 1 -0.00146 0.00285 117 0 0.399 0.00341 0.00341 test.phys ionIoni ********************************************************************************************************* * G4Track Information: Particle = gamma, Track ID = 4, Parent ID = 2 @@ -5098,6 +5108,6 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 0 0 75.6 0.164 0 0 0 test.phys initStep - 1 0.000112 0.00112 75.6 0 0.164 0.00125 0.00125 test.phys ionIoni + 1 0.0002 0.00201 75.6 0 0.164 0.00243 0.00243 test.phys ionIoni Graphics systems deleted. Visualization Manager deleting... diff --git a/examples/extended/biasing/GB03/exampleGB03.out b/examples/extended/biasing/GB03/exampleGB03.out index 415b17e0949..8442fe1d817 100644 --- a/examples/extended/biasing/GB03/exampleGB03.out +++ b/examples/extended/biasing/GB03/exampleGB03.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -213,7 +215,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -245,7 +247,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -277,7 +279,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -290,7 +292,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -336,7 +337,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -368,7 +369,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -400,7 +401,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -432,7 +433,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -464,7 +465,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -496,7 +497,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -528,7 +529,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -914,12 +915,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ### G4LevelReader: broken transition 0 from level 24 to 24 for isotope Z= 89 A= 219 - use ground level ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -997,7 +1007,7 @@ GB03BOptrGeometryBasedBiasing : starting run with splitting factor = 2, and prob Run terminated. Run Summary Number of events processed : 10 - User=0.050000s Real=0.057667s Sys=0.000000s + User=0.090000s Real=0.098051s Sys=0.000000s Region -- -- appears in world volume This region is in the mass world. @@ -1057,7 +1067,7 @@ GB03BOptrGeometryBasedBiasing : starting run with splitting factor = 2, and prob Run terminated. Run Summary Number of events processed : 10 - User=0.120000s Real=0.129177s Sys=0.000000s + User=0.300000s Real=0.306826s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. @@ -1073,10 +1083,10 @@ G4SDManager deleted. EventManager deleted. Units table cleared. TransportationManager deleted. -Total navigation history collections cleaned: 25 +Total navigation history collections cleaned: 30 G4RNGHelper object is deleted. ================== Deleting memory pools =================== -Pool ID '20G4NavigationLevelRep', size : 0.0356 MB +Pool ID '20G4NavigationLevelRep', size : 0.0442 MB Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB Pool ID '17G4DynamicParticle', size : 0.00481 MB Pool ID '16G4SmartVoxelNode', size : 0.000961 MB @@ -1085,12 +1095,12 @@ Pool ID '7G4Event', size : 0.000961 MB Pool ID '15G4PrimaryVertex', size : 0.000961 MB Pool ID '17G4PrimaryParticle', size : 0.000961 MB Pool ID '15G4HCofThisEvent', size : 0.000961 MB -Pool ID '7G4Track', size : 0.00865 MB -Pool ID '18G4TouchableHistory', size : 0.00288 MB +Pool ID '7G4Track', size : 0.00961 MB +Pool ID '18G4TouchableHistory', size : 0.00385 MB Pool ID '15G4CountedObjectIvE', size : 0.000961 MB Pool ID '10G4Fragment', size : 0.000961 MB Number of memory pools allocated: 13 of which, static: 0 -Dynamic pools deleted: 13 / Total memory freed: 0.061 MB +Dynamic pools deleted: 13 / Total memory freed: 0.071 MB ============================================================ G4Allocator objects are deleted. UImanager deleted. diff --git a/examples/extended/biasing/GB04/exampleGB04.out b/examples/extended/biasing/GB04/exampleGB04.out index 4657dac922f..cc7d6764390 100644 --- a/examples/extended/biasing/GB04/exampleGB04.out +++ b/examples/extended/biasing/GB04/exampleGB04.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -57,7 +57,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -199,7 +201,7 @@ eIoni: for e- XStype:3 SubType=2 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -231,7 +233,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -271,7 +273,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -284,7 +286,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -330,7 +331,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -362,7 +363,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -394,7 +395,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -426,7 +427,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -458,7 +459,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -490,7 +491,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -522,7 +523,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -907,12 +908,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1399,7 +1409,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.003411s Sys=0.000000s + User=0.000000s Real=0.002387s Sys=0.000000s Region -- -- appears in world volume This region is in the mass world. @@ -2709,7 +2719,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Run terminated. Run Summary Number of events processed : 10 - User=0.010000s Real=0.006020s Sys=0.000000s + User=0.010000s Real=0.005854s Sys=0.000000s Region -- -- appears in world volume This region is in the mass world. @@ -5330,7 +5340,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.011805s Sys=0.000000s + User=0.010000s Real=0.009554s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. diff --git a/examples/extended/biasing/GB05/exampleGB05.out b/examples/extended/biasing/GB05/exampleGB05.out index d6a786ae83e..c5bbfab58af 100644 --- a/examples/extended/biasing/GB05/exampleGB05.out +++ b/examples/extended/biasing/GB05/exampleGB05.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -59,7 +59,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -209,7 +211,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -241,7 +243,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -273,7 +275,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -286,7 +288,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -332,7 +333,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -364,7 +365,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -396,7 +397,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -428,7 +429,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -460,7 +461,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -492,7 +493,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -524,7 +525,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -909,12 +910,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -2310,166 +2320,236 @@ See commands in /vis/modeling/trajectories/ for other options. neutron, kinetic energy (MeV) = 48.4548, position (cm) = (191.041,-46.3516,200), weight = 7.45058e-09 gamma, kinetic energy (MeV) = 0.387013, position (cm) = (187.388,-44.6193,200), weight = 2.98023e-08 neutron, kinetic energy (MeV) = 3.90543e-05, position (cm) = (180.952,-52.3336,200), weight = 2.98023e-08 - gamma, kinetic energy (MeV) = 6.40257, position (cm) = (172.396,-34.7689,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 0.0678231, position (cm) = (174.493,-31.2457,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 0.0444873, position (cm) = (124.415,-13.2109,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 0.0969528, position (cm) = (166.108,-20.0031,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 8.41113, position (cm) = (162.472,-10.3996,200), weight = 7.45058e-09 - neutron, kinetic energy (MeV) = 25.019, position (cm) = (177.712,-15.2922,200), weight = 7.45058e-09 - gamma, kinetic energy (MeV) = 0.110971, position (cm) = (173.398,-15.595,200), weight = 1.49012e-08 - neutron, kinetic energy (MeV) = 1.69054, position (cm) = (171.648,-5.70044,200), weight = 1.49012e-08 - gamma, kinetic energy (MeV) = 0.247401, position (cm) = (172.8,-6.64994,200), weight = 1.49012e-08 - neutron, kinetic energy (MeV) = 7.11152e-07, position (cm) = (168.149,-12.2863,200), weight = 2.98023e-08 - gamma, kinetic energy (MeV) = 0.100097, position (cm) = (183.473,-22.4239,200), weight = 2.98023e-08 - gamma, kinetic energy (MeV) = 0.107683, position (cm) = (182.572,-22.6801,200), weight = 2.98023e-08 - gamma, kinetic energy (MeV) = 0.229149, position (cm) = (177.524,-22.2337,200), weight = 2.98023e-08 - neutron, kinetic energy (MeV) = 12.1553, position (cm) = (187.898,-24.8267,200), weight = 1.49012e-08 - neutron, kinetic energy (MeV) = 12.1553, position (cm) = (187.898,-24.8267,200), weight = 1.49012e-08 - gamma, kinetic energy (MeV) = 2.24447, position (cm) = (178.779,-23.8686,200), weight = 2.98023e-08 - gamma, kinetic energy (MeV) = 0.387485, position (cm) = (175.663,-8.73305,200), weight = 2.98023e-08 - gamma, kinetic energy (MeV) = 0.161647, position (cm) = (145.19,24.4399,200), weight = 1.19209e-07 - gamma, kinetic energy (MeV) = 1.09806, position (cm) = (147.464,49.2238,200), weight = 1.19209e-07 - gamma, kinetic energy (MeV) = 0.135628, position (cm) = (185.229,59.267,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 51.6527, position (cm) = (131.372,28.7985,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 51.6527, position (cm) = (131.372,28.7985,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 51.6675, position (cm) = (122.106,29.9164,200), weight = 1.19209e-07 - neutron, kinetic energy (MeV) = 51.283, position (cm) = (122.656,29.3169,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 51.283, position (cm) = (122.656,29.3169,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 50.878, position (cm) = (129.528,32.1547,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 2.74768, position (cm) = (127.914,50.2196,200), weight = 1.19209e-07 - neutron, kinetic energy (MeV) = 2.73607, position (cm) = (127.675,50.7012,200), weight = 1.19209e-07 - gamma, kinetic energy (MeV) = 0.104664, position (cm) = (115.543,25.1245,200), weight = 2.38419e-07 - gamma, kinetic energy (MeV) = 1.30512, position (cm) = (124.335,25.6027,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 0.0259647, position (cm) = (98.5219,11.1582,200), weight = 9.53674e-07 - gamma, kinetic energy (MeV) = 0.484952, position (cm) = (123.886,13.5353,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 51.8406, position (cm) = (124.827,29.7503,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 51.8406, position (cm) = (124.827,29.7503,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 51.5046, position (cm) = (116.332,36.9769,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 21.6205, position (cm) = (118.952,-11.2108,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 1.77935, position (cm) = (119.911,3.38666,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.349884, position (cm) = (42.2868,-120.868,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 19.5827, position (cm) = (12.9229,-64.7005,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 0.155015, position (cm) = (21.794,-40.6054,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 0.000366851, position (cm) = (11.1802,-37.9043,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 11.0335, position (cm) = (31.6796,-66.0398,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 1.99716, position (cm) = (4.56064,-22.5949,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 4.4249, position (cm) = (77.8024,-44.7531,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 3.63155, position (cm) = (72.5754,-43.8655,200), weight = 2.38419e-07 - neutron, kinetic energy (MeV) = 0.0196254, position (cm) = (61.1344,-15.2628,200), weight = 2.38419e-07 - gamma, kinetic energy (MeV) = 0.269092, position (cm) = (71.9569,-20.5289,200), weight = 2.38419e-07 - gamma, kinetic energy (MeV) = 0.0542068, position (cm) = (13.7758,35.6206,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 0.0978813, position (cm) = (-145.424,70.7259,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 17.6942, position (cm) = (-127.314,63.0173,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 2.04852, position (cm) = (-116.777,56.3179,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.21087, position (cm) = (-119.852,56.7307,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 46.7378, position (cm) = (-102.372,167.763,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 46.9608, position (cm) = (-108.599,165.151,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 45.8567, position (cm) = (-116.02,146.69,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 45.8567, position (cm) = (-116.02,146.69,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 45.8567, position (cm) = (-116.02,146.69,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 49.3507, position (cm) = (-92.034,183.662,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 49.1657, position (cm) = (-91.1527,184.165,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 49.1657, position (cm) = (-91.1527,184.165,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 1.82112, position (cm) = (-84.3842,200.855,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 3.06384, position (cm) = (-70.4754,191.181,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 1.98665, position (cm) = (-94.7682,195.959,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 0.34334, position (cm) = (-109.128,183.53,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 30.441, position (cm) = (-101.441,192.958,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 5.26336, position (cm) = (-230.118,94.5246,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 0.140028, position (cm) = (-226.608,87.2875,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 58.8932, position (cm) = (-225.492,77.4143,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 4.38316, position (cm) = (-250.702,80.3671,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 26.0274, position (cm) = (-227.206,71.8342,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 25.395, position (cm) = (-223.77,61.3115,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 1.55546, position (cm) = (-268.204,53.6278,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 58.6677, position (cm) = (-266.51,55.4236,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 58.6677, position (cm) = (-266.51,55.4236,200), weight = 1.52588e-05 - gamma, kinetic energy (MeV) = 0.345348, position (cm) = (-251.722,61.9506,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.104554, position (cm) = (-265.648,45.5038,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.518779, position (cm) = (-251.246,103.936,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.150677, position (cm) = (-238.204,113.188,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.186868, position (cm) = (-206.169,103.372,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 0.209043, position (cm) = (-209.62,103.212,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 8.20262, position (cm) = (-206.118,103.723,200), weight = 1.90735e-06 - neutron, kinetic energy (MeV) = 10.0277, position (cm) = (-206.313,103.676,200), weight = 9.53674e-07 - neutron, kinetic energy (MeV) = 10.0277, position (cm) = (-206.313,103.676,200), weight = 4.76837e-07 - neutron, kinetic energy (MeV) = 10.0277, position (cm) = (-206.313,103.676,200), weight = 4.76837e-07 - gamma, kinetic energy (MeV) = 0.458098, position (cm) = (-197.049,119.519,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 48.6448, position (cm) = (-249.678,95.2024,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 48.6448, position (cm) = (-249.678,95.2024,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 48.6448, position (cm) = (-249.678,95.2024,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 48.6435, position (cm) = (-247.554,96.0325,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 48.9922, position (cm) = (-251.561,95.1945,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 2.72765, position (cm) = (-240.189,108.685,200), weight = 3.05176e-05 - gamma, kinetic energy (MeV) = 0.344784, position (cm) = (-270.249,104.153,200), weight = 3.05176e-05 - neutron, kinetic energy (MeV) = 4.60694, position (cm) = (-239.219,71.3499,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 0.376913, position (cm) = (-261.587,41.7944,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 2.05857, position (cm) = (-247.966,45.3862,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 48.435, position (cm) = (-242.56,20.0676,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 12.1165, position (cm) = (-239.463,105.167,200), weight = 1.19209e-07 - neutron, kinetic energy (MeV) = 12.1165, position (cm) = (-239.463,105.167,200), weight = 1.19209e-07 - neutron, kinetic energy (MeV) = 12.1165, position (cm) = (-239.463,105.167,200), weight = 5.96046e-08 - neutron, kinetic energy (MeV) = 12.1165, position (cm) = (-239.463,105.167,200), weight = 5.96046e-08 - gamma, kinetic energy (MeV) = 0.418925, position (cm) = (-242.352,105.005,200), weight = 1.19209e-07 - gamma, kinetic energy (MeV) = 0.0899522, position (cm) = (-226.519,65.7932,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 1.345e-06, position (cm) = (-248.544,16.497,200), weight = 1.90735e-06 - gamma, kinetic energy (MeV) = 6.78557, position (cm) = (-265.873,34.948,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 14.4913, position (cm) = (-258.233,35.9803,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.398582, position (cm) = (-259.477,83.9016,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 42.0099, position (cm) = (-256.68,76.1924,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 0.632222, position (cm) = (-253.282,26.7122,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 3.52407, position (cm) = (-200.938,45.8997,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 38.2494, position (cm) = (-253.018,-17.2529,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 37.2897, position (cm) = (-252.689,-18.2999,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 38.8299, position (cm) = (-257.628,-16.5115,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 38.8299, position (cm) = (-257.628,-16.5115,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 26.5965, position (cm) = (-235.476,-0.923744,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 26.5965, position (cm) = (-235.476,-0.923744,200), weight = 6.10352e-05 - gamma, kinetic energy (MeV) = 7.51854, position (cm) = (-273.725,-43.4018,200), weight = 0.000244141 - gamma, kinetic energy (MeV) = 0.995698, position (cm) = (-216.851,-34.2319,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 1.45319, position (cm) = (-234.214,-56.047,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 2.95403, position (cm) = (-259.337,-37.5599,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 5.28977, position (cm) = (-252.394,-61.7127,200), weight = 7.62939e-06 - gamma, kinetic energy (MeV) = 4.87583, position (cm) = (-249.896,-67.9606,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 23.7913, position (cm) = (-261.928,-57.6087,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 23.7913, position (cm) = (-261.928,-57.6087,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 23.5459, position (cm) = (-244.921,-58.5758,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 24.1298, position (cm) = (-245.687,-58.3161,200), weight = 7.62939e-06 - neutron, kinetic energy (MeV) = 1.04462, position (cm) = (-75.124,-37.9631,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 1.30711, position (cm) = (-74.2202,-28.4061,200), weight = 0.00012207 - gamma, kinetic energy (MeV) = 3.09377, position (cm) = (-86.4431,-35.5751,200), weight = 0.00012207 - neutron, kinetic energy (MeV) = 28.5027, position (cm) = (-94.3971,-26.407,200), weight = 6.10352e-05 - neutron, kinetic energy (MeV) = 26.7394, position (cm) = (-114.86,-43.3031,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 27.1967, position (cm) = (-109.896,-50.3483,200), weight = 1.52588e-05 - neutron, kinetic energy (MeV) = 26.9266, position (cm) = (-106.458,-47.8331,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.0720519, position (cm) = (-107.103,-26.7098,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.208267, position (cm) = (-88.4295,-25.9216,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 1.27009, position (cm) = (-100.398,-29.7612,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 6.79494, position (cm) = (-93.3637,-24.6516,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.831339, position (cm) = (-99.7783,-29.2155,200), weight = 3.8147e-06 - neutron, kinetic energy (MeV) = 0.000733728, position (cm) = (-103.793,-30.6547,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 1.17045, position (cm) = (-98.3492,-34.0138,200), weight = 3.8147e-06 - gamma, kinetic energy (MeV) = 0.119014, position (cm) = (-58.0286,58.2136,200), weight = 0.0078125 - gamma, kinetic energy (MeV) = 0.742875, position (cm) = (-94.2287,60.3533,200), weight = 0.0078125 - neutron, kinetic energy (MeV) = 51.3813, position (cm) = (0.567805,82.3923,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 65.29, position (cm) = (-5.18716,83.5587,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 65.6027, position (cm) = (-2.96549,85.188,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 64.9557, position (cm) = (-0.257958,82.1106,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 64.9557, position (cm) = (-0.257958,82.1106,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 65.0148, position (cm) = (-0.698757,78.4298,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 65.4083, position (cm) = (2.34705,87.6828,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 2.68404e-05, position (cm) = (-5.48952,81.0764,200), weight = 0.000976562 - gamma, kinetic energy (MeV) = 0.572962, position (cm) = (-13.7713,57.8061,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (5.36042,78.0144,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 0.44298, position (cm) = (-5.22181,36.7249,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 34.2996, position (cm) = (-4.16551,64.9252,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 34.2996, position (cm) = (-4.16551,64.9252,200), weight = 0.000488281 - neutron, kinetic energy (MeV) = 34.2996, position (cm) = (-4.16551,64.9252,200), weight = 0.000976562 - neutron, kinetic energy (MeV) = 1.30435e-06, position (cm) = (-19.497,76.0924,200), weight = 0.00195312 - neutron, kinetic energy (MeV) = 0.517723, position (cm) = (-33.3458,58.1556,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 7.50726, position (cm) = (-10.6714,72.2013,200), weight = 0.00390625 - gamma, kinetic energy (MeV) = 9.29688, position (cm) = (-1.05323,63.4105,200), weight = 0.000244141 - neutron, kinetic energy (MeV) = 41.7255, position (cm) = (-2.7528,27.9796,200), weight = 0.015625 - neutron, kinetic energy (MeV) = 36.8004, position (cm) = (-1.51007,27.0469,200), weight = 0.015625 + gamma, kinetic energy (MeV) = 6.39812, position (cm) = (172.386,-34.846,200), weight = 5.96046e-08 + neutron, kinetic energy (MeV) = 6.00908, position (cm) = (136.026,-5.80571,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 50.1658, position (cm) = (141.262,-13.2323,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 51.76, position (cm) = (129.754,24.2236,200), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 1.52823, position (cm) = (121.265,20.7131,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 2.61361, position (cm) = (130.281,23.6968,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 1.62059, position (cm) = (131.432,24.1414,200), weight = 9.53674e-07 + gamma, kinetic energy (MeV) = 0.131005, position (cm) = (115.311,27.4469,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 0.0537198, position (cm) = (111.564,54.9185,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 30.8591, position (cm) = (-21.0566,35.4775,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 30.8128, position (cm) = (-20.3856,35.4497,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 91.6485, position (cm) = (-23.0548,27.1157,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.163456, position (cm) = (-26.208,25.8381,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 92.3636, position (cm) = (-23.4563,27.2095,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 48.9032, position (cm) = (20.7976,-5.50728,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 98.4967, position (cm) = (-56.2918,5.97925,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 98.5717, position (cm) = (-50.707,7.27921,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 98.0812, position (cm) = (-41.8177,6.52405,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 98.5717, position (cm) = (-50.707,7.27921,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 3.07941, position (cm) = (-48.9179,-0.413373,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 12.6736, position (cm) = (-63.8597,-8.03047,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.938072, position (cm) = (-55.7544,18.7962,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.587096, position (cm) = (-30.1094,44.7094,200), weight = 0.000244141 + e-, kinetic energy (MeV) = 2.97028, position (cm) = (-38.8333,30.0162,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 0.131379, position (cm) = (-57.3926,19.9393,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 2.02217, position (cm) = (-57.4536,19.666,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 7.12317e-08, position (cm) = (-45.3617,-31.6661,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.102317, position (cm) = (-85.1235,-72.6904,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 1.22934, position (cm) = (-86.6611,-71.3609,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 0.106254, position (cm) = (-57.9565,-91.6847,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 3.45833, position (cm) = (-101.829,-51.6583,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 6.31527, position (cm) = (-83.0308,-68.7221,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 1.14982, position (cm) = (-83.1331,-79.1904,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.50383, position (cm) = (-97.6452,-97.3537,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 6.53612, position (cm) = (-74.6117,-67.0468,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 31.2425, position (cm) = (-92.0408,-39.4634,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 31.6914, position (cm) = (-91.3983,-37.2044,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.270383, position (cm) = (-8.94018,-11.2062,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 29.3445, position (cm) = (-85.1864,-50.6515,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 37.1486, position (cm) = (-84.6122,-53.5226,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.274784, position (cm) = (26.371,-34.1206,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 6.78305, position (cm) = (-8.42685,-51.7556,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 60.3711, position (cm) = (-16.2534,-43.3081,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 60.3901, position (cm) = (-4.07004,-52.511,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 60.2204, position (cm) = (-13.6305,-47.5642,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 0.0764719, position (cm) = (-92.9784,-84.8285,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 12.785, position (cm) = (-96.7431,-97.6239,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 48.4262, position (cm) = (-92.1205,-85.9611,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.459508, position (cm) = (-86.78,-93.8961,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 44.3957, position (cm) = (-100.743,-84.6689,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.358709, position (cm) = (-23.6753,-42.9821,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 0.85215, position (cm) = (-9.41624,-44.6035,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 2.33833, position (cm) = (-22.635,-80.0403,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.417993, position (cm) = (-19.9227,-53.8392,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.373769, position (cm) = (-8.84486,-59.3557,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.288264, position (cm) = (-7.56444,-40.9042,200), weight = 3.8147e-06 + gamma, kinetic energy (MeV) = 0.23, position (cm) = (-1.36289,-43.907,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 4.52799e-07, position (cm) = (-32.7448,-48.5519,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 1.8894, position (cm) = (-45.1859,-69.0628,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 2.52749, position (cm) = (-45.2666,-68.7879,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.849655, position (cm) = (-36.5059,-114.108,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 14.425, position (cm) = (-68.2871,-115.882,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 2.17093, position (cm) = (-68.7973,-115.322,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 2.22218, position (cm) = (-66.9612,-112.243,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 9.22166, position (cm) = (-61.5282,-114.376,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 0.178072, position (cm) = (-27.8695,-4.02503,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.117043, position (cm) = (-53.5846,10.4052,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.347871, position (cm) = (-45.4905,3.82855,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 18.6132, position (cm) = (-45.4217,14.8062,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.000233143, position (cm) = (-63.4898,-1.90485,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.4678, position (cm) = (-45.4577,17.1828,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.543181, position (cm) = (-45.5472,11.5748,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.255957, position (cm) = (-45.9609,11.8873,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 3.89342, position (cm) = (-45.4113,7.46424,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 4.19128, position (cm) = (-49.7147,16.1404,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.3914, position (cm) = (-32.1656,26.382,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.397436, position (cm) = (-46.4601,10.1982,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 2.00228, position (cm) = (-27.2923,2.03727,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.506506, position (cm) = (-48.5367,-11.5573,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 19.5254, position (cm) = (-48.4775,-13.9624,200), weight = 0.00390625 + gamma, kinetic energy (MeV) = 0.180197, position (cm) = (20.3327,0.926574,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 0.00101228, position (cm) = (-14.5123,-11.4116,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 47.8117, position (cm) = (-34.9474,-56.436,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.0953589, position (cm) = (-36.3214,-51.1357,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.37831, position (cm) = (-36.5475,-51.0976,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 0.585185, position (cm) = (-32.6561,-51.5796,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 41.1218, position (cm) = (-33.6151,-49.9228,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 1.38432, position (cm) = (-24.6682,-26.8325,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 4.33217, position (cm) = (-15.3158,-46.0892,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 3.28019, position (cm) = (3.39118,-61.7431,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 45.5455, position (cm) = (11.7397,-65.6695,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 45.4289, position (cm) = (0.913243,-48.1384,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 46.1038, position (cm) = (0.828929,-47.2696,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 46.1038, position (cm) = (0.828929,-47.2696,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 58.1703, position (cm) = (-38.0886,-23.6865,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 1.78351e-05, position (cm) = (-99.2946,-41.0656,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.165205, position (cm) = (-108.599,-46.2966,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 9.64266, position (cm) = (-83.6176,-62.904,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.625448, position (cm) = (-95.8187,-10.9095,200), weight = 1.52588e-05 + gamma, kinetic energy (MeV) = 6.33825, position (cm) = (-89.7205,-33.3162,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 1.27837e-06, position (cm) = (-50.5589,-10.5922,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.0720046, position (cm) = (-95.9515,-37.581,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 1.96222, position (cm) = (-114.948,-23.3389,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 3.9182, position (cm) = (-99.8753,-43.6513,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.314693, position (cm) = (-77.5925,-35.1901,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.162878, position (cm) = (-91.9338,-22.9487,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 40.6688, position (cm) = (-82.832,-56.6703,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 40.789, position (cm) = (-83.5633,-57.5551,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 40.789, position (cm) = (-83.5633,-57.5551,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 1.84482, position (cm) = (-92.4401,-106.856,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 0.00614133, position (cm) = (-95.0801,-74.635,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 5.30293, position (cm) = (-111.915,-52.2322,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 5.65604, position (cm) = (-103.497,-58.96,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 8.01843, position (cm) = (-34.6114,-88.278,200), weight = 2.38419e-07 + gamma, kinetic energy (MeV) = 4.47278, position (cm) = (-28.5127,-91.4935,200), weight = 1.19209e-07 + gamma, kinetic energy (MeV) = 0.582253, position (cm) = (-41.4404,-95.3445,200), weight = 1.19209e-07 + neutron, kinetic energy (MeV) = 0.00173003, position (cm) = (-27.9084,-78.7249,200), weight = 1.19209e-07 + neutron, kinetic energy (MeV) = 2.64249, position (cm) = (-44.2196,-66.3251,200), weight = 1.19209e-07 + neutron, kinetic energy (MeV) = 8.19234, position (cm) = (-48.3011,-84.093,200), weight = 2.38419e-07 + neutron, kinetic energy (MeV) = 0.105163, position (cm) = (-84.3813,-84.4103,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 2.56743, position (cm) = (-85.2689,-70.3199,200), weight = 3.8147e-06 + neutron, kinetic energy (MeV) = 37.7408, position (cm) = (3.44417,-80.5134,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 38.1179, position (cm) = (0.328918,-75.6877,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 37.2306, position (cm) = (1.80026,-73.8537,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 37.2306, position (cm) = (1.80026,-73.8537,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 37.2306, position (cm) = (1.80026,-73.8537,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.117032, position (cm) = (-6.02762,-73.8987,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 1.82875, position (cm) = (-8.10504,-76.6932,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 1.82875, position (cm) = (-8.10504,-76.6932,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 37.2482, position (cm) = (2.13216,-74.0841,200), weight = 0.015625 + gamma, kinetic energy (MeV) = 0.120179, position (cm) = (76.5841,-114.852,200), weight = 0.015625 + gamma, kinetic energy (MeV) = 3.09067, position (cm) = (75.9256,-115.738,200), weight = 0.015625 + gamma, kinetic energy (MeV) = 2.6973, position (cm) = (37.6603,-50.0663,200), weight = 0.03125 + gamma, kinetic energy (MeV) = 0.150807, position (cm) = (24.8618,-21.9607,200), weight = 0.03125 + neutron, kinetic energy (MeV) = 94.207, position (cm) = (38.306,-47.485,200), weight = 0.03125 + gamma, kinetic energy (MeV) = 0.0989243, position (cm) = (5.2624,45.3981,200), weight = 0.03125 + gamma, kinetic energy (MeV) = 5.90431, position (cm) = (-27.5736,-6.01073,200), weight = 0.0078125 + gamma, kinetic energy (MeV) = 0.158677, position (cm) = (-39.9217,-16.6039,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.306376, position (cm) = (-55.9334,-36.5547,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 0.245126, position (cm) = (-57.356,-34.2076,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.101223, position (cm) = (-43.4353,-14.2213,200), weight = 0.0078125 + gamma, kinetic energy (MeV) = 0.514094, position (cm) = (-18.2398,-24.3681,200), weight = 0.0078125 + gamma, kinetic energy (MeV) = 0.051533, position (cm) = (-19.7785,-22.4072,200), weight = 0.0078125 + gamma, kinetic energy (MeV) = 1.16456, position (cm) = (-21.9987,25.7714,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 2.35318, position (cm) = (1.91621,38.7262,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 3.82691, position (cm) = (-14.9957,9.09289,200), weight = 0.00195312 + gamma, kinetic energy (MeV) = 0.131889, position (cm) = (5.09203,-44.5947,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 66.8619, position (cm) = (-57.7984,23.6192,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 65.6254, position (cm) = (-57.0662,4.2556,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 67.4753, position (cm) = (-59.1632,25.4047,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 67.571, position (cm) = (-59.8589,22.8285,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 4.02835e-06, position (cm) = (-108.214,44.3276,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 1.94992, position (cm) = (32.9744,-38.3432,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 5.73606, position (cm) = (12.9603,-30.5478,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 1.07817, position (cm) = (18.3435,-37.9611,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 9.51569, position (cm) = (18.2355,-37.0452,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 48.0321, position (cm) = (19.5697,-37.9173,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 80.4777, position (cm) = (20.515,-39.0224,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 3.49107, position (cm) = (21.0915,-37.7691,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 3.71895, position (cm) = (19.4162,-35.9267,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 45.2403, position (cm) = (-4.54816,-24.839,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 35.8849, position (cm) = (36.4428,8.14097,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 29.0165, position (cm) = (41.1167,36.7392,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 29.088, position (cm) = (41.4456,36.5195,200), weight = 9.53674e-07 + neutron, kinetic energy (MeV) = 16.9111, position (cm) = (49.8846,43.8872,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 29.4773, position (cm) = (47.8296,26.8961,200), weight = 1.90735e-06 + neutron, kinetic energy (MeV) = 29.4773, position (cm) = (47.8296,26.8961,200), weight = 1.90735e-06 + gamma, kinetic energy (MeV) = 0.282919, position (cm) = (9.38931,45.3946,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 3.81491, position (cm) = (15.4542,44.6822,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 2.77371, position (cm) = (8.6314,18.4695,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 2.38869, position (cm) = (24.3789,35.2395,200), weight = 6.10352e-05 + e-, kinetic energy (MeV) = 0.139009, position (cm) = (45.1883,-14.809,200), weight = 0.000244141 + neutron, kinetic energy (MeV) = 0.14955, position (cm) = (18.83,42.0759,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 12.1293, position (cm) = (28.5575,54.6879,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 12.1293, position (cm) = (28.5575,54.6879,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 0.000990701, position (cm) = (40.3402,45.1876,200), weight = 0.015625 + gamma, kinetic energy (MeV) = 0.724403, position (cm) = (3.46161,92.1983,200), weight = 0.015625 + neutron, kinetic energy (MeV) = 0.678449, position (cm) = (-21.1377,50.2733,200), weight = 0.00390625 + neutron, kinetic energy (MeV) = 33.9141, position (cm) = (-69.3692,36.3897,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.0811728, position (cm) = (-48.0047,16.7203,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 1.09947, position (cm) = (-47.1648,27.9159,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 1.08793, position (cm) = (-38.3758,18.8576,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 0.152015, position (cm) = (-64.5023,88.3255,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 1.16284, position (cm) = (-61.7236,92.1253,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 1.06255, position (cm) = (-64.8742,83.0613,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 5.94695, position (cm) = (-67.1578,87.557,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 31.9122, position (cm) = (-87.7612,91.9596,200), weight = 1.52588e-05 + neutron, kinetic energy (MeV) = 31.8007, position (cm) = (-86.9288,92.2673,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 31.8767, position (cm) = (-87.5204,91.9055,200), weight = 7.62939e-06 + neutron, kinetic energy (MeV) = 31.5186, position (cm) = (-69.8112,85.5329,200), weight = 3.05176e-05 + gamma, kinetic energy (MeV) = 2.71045, position (cm) = (-51.1931,87.9634,200), weight = 6.10352e-05 + neutron, kinetic energy (MeV) = 6.13757, position (cm) = (-61.1931,86.9437,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 6.13757, position (cm) = (-61.1931,86.9437,200), weight = 3.05176e-05 + neutron, kinetic energy (MeV) = 31.5417, position (cm) = (-60.3559,86.2655,200), weight = 6.10352e-05 + gamma, kinetic energy (MeV) = 0.317444, position (cm) = (-52.3216,85.8753,200), weight = 0.000244141 + gamma, kinetic energy (MeV) = 4.22719, position (cm) = (-52.5006,91.1271,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 0.000313426, position (cm) = (-63.8629,88.8354,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 0.212872, position (cm) = (-54.4903,84.5311,200), weight = 0.00012207 + gamma, kinetic energy (MeV) = 4.04114, position (cm) = (-46.4026,81.2078,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 32.3263, position (cm) = (-62.3242,77.004,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 2.58352, position (cm) = (-35.0023,86.8376,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 10.6452, position (cm) = (-35.5167,77.1006,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 10.6452, position (cm) = (-35.5167,77.1006,200), weight = 0.00012207 + neutron, kinetic energy (MeV) = 1.10865, position (cm) = (-42.0894,89.0648,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 4.19221, position (cm) = (-38.7116,86.3822,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 2.79284, position (cm) = (-42.6529,93.8034,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 7.74788, position (cm) = (-43.3044,92.8772,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 6.06509, position (cm) = (56.1578,-0.0504598,200), weight = 0.0078125 + gamma, kinetic energy (MeV) = 0.8957, position (cm) = (69.4816,33.9704,200), weight = 0.0078125 + gamma, kinetic energy (MeV) = 0.191553, position (cm) = (41.1611,8.27899,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 80.4203, position (cm) = (56.4938,52.5166,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 80.4203, position (cm) = (56.4938,52.5166,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 75.9771, position (cm) = (54.9773,59.9068,200), weight = 0.000976562 + deuteron, kinetic energy (MeV) = 32.128, position (cm) = (55.068,60.0604,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.159929, position (cm) = (55.0406,59.587,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 1.84029, position (cm) = (55.1876,60.0315,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 3.70772, position (cm) = (52.7836,57.1418,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 0.33256, position (cm) = (57.5524,54.6618,200), weight = 0.00195312 + neutron, kinetic energy (MeV) = 89.8653, position (cm) = (89.4151,76.6422,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 25.0956, position (cm) = (8.66371,-50.3548,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 26.5204, position (cm) = (1.42512,-54.4725,200), weight = 0.000488281 + neutron, kinetic energy (MeV) = 26.5204, position (cm) = (1.42512,-54.4725,200), weight = 0.000488281 + gamma, kinetic energy (MeV) = 1.57249, position (cm) = (1.54664,-44.7555,200), weight = 0.000976562 + gamma, kinetic energy (MeV) = 3.28586, position (cm) = (-6.41751,-37.4685,200), weight = 0.000976562 + neutron, kinetic energy (MeV) = 71.21, position (cm) = (10.5549,-45.5373,200), weight = 0.03125 + neutron, kinetic energy (MeV) = 56.1487, position (cm) = (8.64573,-49.0561,200), weight = 0.015625 + neutron, kinetic energy (MeV) = 71.2693, position (cm) = (22.9782,-50.0442,200), weight = 0.0078125 + neutron, kinetic energy (MeV) = 0.147183, position (cm) = (25.0511,-61.2552,200), weight = 0.015625 + neutron, kinetic energy (MeV) = 48.3112, position (cm) = (53.0857,-48.4974,200), weight = 0.015625 + neutron, kinetic energy (MeV) = 48.3112, position (cm) = (53.0857,-48.4974,200), weight = 0.015625 + neutron, kinetic energy (MeV) = 48.3112, position (cm) = (53.0857,-48.4974,200), weight = 0.03125 Graphics systems deleted. Visualization Manager deleting... diff --git a/examples/extended/biasing/GB06/exampleGB06.out b/examples/extended/biasing/GB06/exampleGB06.out index 48b8cb77a62..eca9609b5f3 100644 --- a/examples/extended/biasing/GB06/exampleGB06.out +++ b/examples/extended/biasing/GB06/exampleGB06.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -69,7 +69,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -219,7 +221,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -251,7 +253,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -283,7 +285,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -296,7 +298,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -342,7 +343,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -374,7 +375,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -406,7 +407,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -438,7 +439,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -470,7 +471,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -502,7 +503,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -534,7 +535,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -919,12 +920,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/biasing/GB07/exampleGB07.out b/examples/extended/biasing/GB07/exampleGB07.out index 9f3b02e185e..92e02a8f32a 100644 --- a/examples/extended/biasing/GB07/exampleGB07.out +++ b/examples/extended/biasing/GB07/exampleGB07.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -57,7 +57,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -207,7 +209,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -235,7 +237,7 @@ eBrem: for e+ XStype:4 SubType=3 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -271,7 +273,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -284,7 +286,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -330,7 +331,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -362,7 +363,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -394,7 +395,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -426,7 +427,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -458,7 +459,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -490,7 +491,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -522,7 +523,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -907,12 +908,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -931,463 +941,433 @@ Max 2J for sampling of angular correlations 10 ======================================================================= G4VisManager: Using G4TrajectoryDrawByCharge as fallback trajectory model. See commands in /vis/modeling/trajectories/ for other options. - gamma, kinetic energy (MeV) = 3.26725, position (cm) = (1.79972,25.9144,200), weight = 9 - neutron, kinetic energy (MeV) = 166.556, position (cm) = (2.06304,25.3865,200), weight = 3 - gamma, kinetic energy (MeV) = 0.141498, position (cm) = (21.4266,12.2429,200), weight = 9 - neutron, kinetic energy (MeV) = 61.5197, position (cm) = (-1.04811,-0.756916,200), weight = 3 - gamma, kinetic energy (MeV) = 11.0385, position (cm) = (-2.44215,3.82117,200), weight = 1 - gamma, kinetic energy (MeV) = 23.909, position (cm) = (5.19919,-1.68759,200), weight = 1 - nu_e, kinetic energy (MeV) = 23.2364, position (cm) = (-16.5221,-10.12,200), weight = 2 - anti_nu_mu, kinetic energy (MeV) = 31.8346, position (cm) = (39.5627,36.7978,200), weight = 2 - nu_mu, kinetic energy (MeV) = 29.7919, position (cm) = (-28.3269,19.5344,200), weight = 2 - neutron, kinetic energy (MeV) = 89.0603, position (cm) = (-2.40215,17.6411,200), weight = 7 - gamma, kinetic energy (MeV) = 0.433407, position (cm) = (15.5945,1.99734,200), weight = 1 - gamma, kinetic energy (MeV) = 69.037, position (cm) = (4.85889,-1.36898,200), weight = 1 - gamma, kinetic energy (MeV) = 6.72701, position (cm) = (-10.9186,9.68075,200), weight = 1 - gamma, kinetic energy (MeV) = 5.57415, position (cm) = (-7.40876,1.2853,200), weight = 1 - gamma, kinetic energy (MeV) = 10.0839, position (cm) = (0.599734,-5.3233,200), weight = 1 - gamma, kinetic energy (MeV) = 0.306202, position (cm) = (4.61187,-4.82125,200), weight = 1 - anti_nu_mu, kinetic energy (MeV) = 34.9176, position (cm) = (80.7164,94.5114,200), weight = 2 - nu_e, kinetic energy (MeV) = 38.834, position (cm) = (5.68537,37.3425,200), weight = 2 - nu_mu, kinetic energy (MeV) = 9.48788, position (cm) = (42.8452,71.5662,200), weight = 2 - gamma, kinetic energy (MeV) = 0.768643, position (cm) = (-35.0976,-64.2884,200), weight = 2 - anti_nu_mu, kinetic energy (MeV) = 35.7032, position (cm) = (17.1008,69.9437,200), weight = 1 - neutron, kinetic energy (MeV) = 7704.03, position (cm) = (-6.87704,0.80288,200), weight = 1 - gamma, kinetic energy (MeV) = 21.7329, position (cm) = (-13.2059,3.04846,200), weight = 1 - gamma, kinetic energy (MeV) = 4.20186, position (cm) = (-28.941,-19.2181,200), weight = 1 - gamma, kinetic energy (MeV) = 0.357447, position (cm) = (-23.738,-3.71834,200), weight = 1 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-17.6935,-0.138615,200), weight = 1 - gamma, kinetic energy (MeV) = 0.996281, position (cm) = (-20.8604,8.59877,200), weight = 1 - gamma, kinetic energy (MeV) = 12.9462, position (cm) = (-19.9963,17.8556,200), weight = 1 - gamma, kinetic energy (MeV) = 0.802487, position (cm) = (-11.9207,14.0558,200), weight = 1 - gamma, kinetic energy (MeV) = 1.56375, position (cm) = (-26.9952,20.5168,200), weight = 1 - gamma, kinetic energy (MeV) = 2.01164, position (cm) = (-24.4552,10.0541,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0577347, position (cm) = (-17.778,4.19073,200), weight = 1 - gamma, kinetic energy (MeV) = 2.07908, position (cm) = (-12.0607,9.81441,200), weight = 1 - gamma, kinetic energy (MeV) = 0.970503, position (cm) = (-26.7143,12.6981,200), weight = 1 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-25.6465,5.34128,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0809465, position (cm) = (-25.3435,5.66531,200), weight = 1 - gamma, kinetic energy (MeV) = 0.333078, position (cm) = (2.95698,8.06649,200), weight = 1 - gamma, kinetic energy (MeV) = 0.431702, position (cm) = (-20.8037,15.0744,200), weight = 1 - gamma, kinetic energy (MeV) = 0.6361, position (cm) = (-22.7425,8.03925,200), weight = 3 - gamma, kinetic energy (MeV) = 1.20719, position (cm) = (-22.4655,7.00236,200), weight = 1 - gamma, kinetic energy (MeV) = 2.41499, position (cm) = (-21.6813,6.26545,200), weight = 1 - gamma, kinetic energy (MeV) = 0.317815, position (cm) = (-24.6961,8.34524,200), weight = 1 - gamma, kinetic energy (MeV) = 0.273534, position (cm) = (-21.7454,5.76395,200), weight = 1 - gamma, kinetic energy (MeV) = 0.213326, position (cm) = (-22.5786,14.7128,200), weight = 1 - gamma, kinetic energy (MeV) = 0.910361, position (cm) = (-21.6073,6.54996,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0761415, position (cm) = (-22.4911,5.56524,200), weight = 1 - gamma, kinetic energy (MeV) = 12.715, position (cm) = (-21.0141,6.72926,200), weight = 1 - gamma, kinetic energy (MeV) = 2.22547, position (cm) = (-22.7081,7.06086,200), weight = 1 - e-, kinetic energy (MeV) = 17.4764, position (cm) = (-21.5293,7.64474,200), weight = 1 - gamma, kinetic energy (MeV) = 1.20307, position (cm) = (-20.8357,6.21629,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0947173, position (cm) = (-24.4783,14.9409,200), weight = 1 - gamma, kinetic energy (MeV) = 3.76515, position (cm) = (38.2847,-32.4694,200), weight = 1 - gamma, kinetic energy (MeV) = 4.86304, position (cm) = (-48.1927,42.8205,200), weight = 1 - gamma, kinetic energy (MeV) = 8.35036, position (cm) = (-5.87045,8.00195,200), weight = 1 - gamma, kinetic energy (MeV) = 18.0635, position (cm) = (-21.948,6.27894,200), weight = 1 - gamma, kinetic energy (MeV) = 1.27773, position (cm) = (-23.7319,13.4425,200), weight = 1 - gamma, kinetic energy (MeV) = 19.8086, position (cm) = (-51.7148,29.5844,200), weight = 1 - gamma, kinetic energy (MeV) = 1.47168, position (cm) = (-28.0915,18.9198,200), weight = 1 - gamma, kinetic energy (MeV) = 1.2431, position (cm) = (-21.9031,-0.757688,200), weight = 1 - gamma, kinetic energy (MeV) = 0.448649, position (cm) = (-3.17931,27.8992,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0807919, position (cm) = (-23.8455,18.5453,200), weight = 1 - gamma, kinetic energy (MeV) = 4.03695, position (cm) = (-11.6158,19.6439,200), weight = 1 - gamma, kinetic energy (MeV) = 10.8278, position (cm) = (-19.0871,12.7318,200), weight = 1 - gamma, kinetic energy (MeV) = 0.786113, position (cm) = (-17.9988,10.1742,200), weight = 1 - gamma, kinetic energy (MeV) = 6.80698, position (cm) = (-19.1778,8.04829,200), weight = 1 - gamma, kinetic energy (MeV) = 0.378566, position (cm) = (-20.3462,10.1219,200), weight = 1 - e-, kinetic energy (MeV) = 118.133, position (cm) = (-20.8372,8.90075,200), weight = 1 - e-, kinetic energy (MeV) = 3.26066, position (cm) = (-20.9844,8.88983,200), weight = 1 - gamma, kinetic energy (MeV) = 0.129781, position (cm) = (-19.5527,-3.61742,200), weight = 1 - gamma, kinetic energy (MeV) = 3.47268, position (cm) = (-20.5894,6.23271,200), weight = 1 - gamma, kinetic energy (MeV) = 9.52524, position (cm) = (-21.2804,4.91881,200), weight = 1 - gamma, kinetic energy (MeV) = 6.59448, position (cm) = (-21.7843,4.47302,200), weight = 1 - gamma, kinetic energy (MeV) = 0.11553, position (cm) = (-19.2914,10.5119,200), weight = 1 - gamma, kinetic energy (MeV) = 2.36989, position (cm) = (-20.4608,4.14468,200), weight = 1 - gamma, kinetic energy (MeV) = 0.315973, position (cm) = (-21.0261,9.22231,200), weight = 1 - gamma, kinetic energy (MeV) = 0.778053, position (cm) = (-9.22967,12.0061,200), weight = 1 - gamma, kinetic energy (MeV) = 0.761962, position (cm) = (-18.9437,10.0009,200), weight = 1 - gamma, kinetic energy (MeV) = 1.73869, position (cm) = (-19.197,10.26,200), weight = 1 - gamma, kinetic energy (MeV) = 34.9321, position (cm) = (-19.3211,8.87048,200), weight = 1 - gamma, kinetic energy (MeV) = 1.07216, position (cm) = (-19.3617,9.05085,200), weight = 1 - e-, kinetic energy (MeV) = 0.93683, position (cm) = (-19.4684,8.9242,200), weight = 1 - gamma, kinetic energy (MeV) = 1.65046, position (cm) = (-19.5119,9.01455,200), weight = 1 - gamma, kinetic energy (MeV) = 1.48171, position (cm) = (-19.6822,9.35237,200), weight = 1 - gamma, kinetic energy (MeV) = 99.4903, position (cm) = (-20.6,9.6896,200), weight = 1 - gamma, kinetic energy (MeV) = 0.277478, position (cm) = (-20.7399,9.75024,200), weight = 1 - gamma, kinetic energy (MeV) = 2.34681, position (cm) = (-20.7381,9.7355,200), weight = 1 - gamma, kinetic energy (MeV) = 0.22807, position (cm) = (-27.6507,13.1643,200), weight = 1 - gamma, kinetic energy (MeV) = 0.222085, position (cm) = (-40.0272,21.8753,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0644455, position (cm) = (-5.32439,1.04571,200), weight = 1 - gamma, kinetic energy (MeV) = 2.46965, position (cm) = (-18.4492,9.78883,200), weight = 1 - gamma, kinetic energy (MeV) = 2.48094, position (cm) = (-14.8389,18.3611,200), weight = 1 - gamma, kinetic energy (MeV) = 0.144317, position (cm) = (-17.762,1.1444,200), weight = 1 - gamma, kinetic energy (MeV) = 0.215883, position (cm) = (-19.8303,21.1638,200), weight = 1 - gamma, kinetic energy (MeV) = 0.410109, position (cm) = (-13.3892,12.2466,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0863693, position (cm) = (-17.7509,13.238,200), weight = 1 - gamma, kinetic energy (MeV) = 1.0345, position (cm) = (-21.2674,13.621,200), weight = 1 - e+, kinetic energy (MeV) = 5.79905, position (cm) = (-21.0566,9.02849,200), weight = 1 - gamma, kinetic energy (MeV) = 1.45789, position (cm) = (-21.2428,8.64929,200), weight = 1 - gamma, kinetic energy (MeV) = 1.93073, position (cm) = (-20.9628,-3.10084,200), weight = 1 - gamma, kinetic energy (MeV) = 3.0302, position (cm) = (-5.56643,3.3747,200), weight = 1 - gamma, kinetic energy (MeV) = 2.60786, position (cm) = (-0.782746,35.8353,200), weight = 1 - gamma, kinetic energy (MeV) = 0.155915, position (cm) = (4.3724,30.8205,200), weight = 1 - gamma, kinetic energy (MeV) = 0.705091, position (cm) = (-0.49383,21.1695,200), weight = 1 - gamma, kinetic energy (MeV) = 53.1821, position (cm) = (0.609419,26.4563,200), weight = 1 - neutron, kinetic energy (MeV) = 1202.91, position (cm) = (-27.3924,47.4862,200), weight = 1 - neutron, kinetic energy (MeV) = 0.328255, position (cm) = (7.20966,-3.89993,200), weight = 4 - neutron, kinetic energy (MeV) = 114.356, position (cm) = (10.2159,-5.69185,200), weight = 4 - gamma, kinetic energy (MeV) = 0.0893099, position (cm) = (-25.1187,5.00853,200), weight = 2 - gamma, kinetic energy (MeV) = 0.485747, position (cm) = (4.05921,-28.1821,200), weight = 2 - gamma, kinetic energy (MeV) = 0.426481, position (cm) = (-28.795,-45.2334,200), weight = 2 - gamma, kinetic energy (MeV) = 0.460572, position (cm) = (-29.0934,-67.3522,200), weight = 2 - gamma, kinetic energy (MeV) = 1.55321, position (cm) = (-30.6707,-50.6613,200), weight = 2 - gamma, kinetic energy (MeV) = 0.11535, position (cm) = (-15.2181,-55.9366,200), weight = 2 - gamma, kinetic energy (MeV) = 0.0939875, position (cm) = (-25.8579,-44.9204,200), weight = 2 - e+, kinetic energy (MeV) = 423.643, position (cm) = (14.726,1.72307,200), weight = 1 - gamma, kinetic energy (MeV) = 0.268676, position (cm) = (14.7249,1.72049,200), weight = 1 - e-, kinetic energy (MeV) = 241.37, position (cm) = (14.7359,1.7301,200), weight = 1 - nu_e, kinetic energy (MeV) = 16.0326, position (cm) = (-93.9375,-54.3524,200), weight = 4 - gamma, kinetic energy (MeV) = 0.408889, position (cm) = (19.6361,14.5262,200), weight = 2 - neutron, kinetic energy (MeV) = 450.98, position (cm) = (37.5206,13.2447,200), weight = 1 - gamma, kinetic energy (MeV) = 102.669, position (cm) = (-12.704,54.3616,200), weight = 1 - proton, kinetic energy (MeV) = 955.454, position (cm) = (8.51567,-15.6296,200), weight = 1 - nu_mu, kinetic energy (MeV) = 17.0478, position (cm) = (-46.4941,-47.5818,200), weight = 1 - anti_nu_mu, kinetic energy (MeV) = 167.47, position (cm) = (-38.2495,-16.8717,200), weight = 1 - gamma, kinetic energy (MeV) = 0.197843, position (cm) = (-30.4327,-18.4679,200), weight = 1 - e+, kinetic energy (MeV) = 11.7557, position (cm) = (-30.9461,-18.0798,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0190532, position (cm) = (-30.9503,-18.0932,200), weight = 1 - gamma, kinetic energy (MeV) = 0.098446, position (cm) = (-30.4509,-18.7366,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0817174, position (cm) = (-30.2933,-18.0079,200), weight = 1 - gamma, kinetic energy (MeV) = 0.310791, position (cm) = (-31.0854,-19.3447,200), weight = 1 - gamma, kinetic energy (MeV) = 0.245882, position (cm) = (-19.3549,-20.9127,200), weight = 1 - gamma, kinetic energy (MeV) = 70.1393, position (cm) = (-31.5303,-17.258,200), weight = 1 - gamma, kinetic energy (MeV) = 84.1637, position (cm) = (-31.7925,-16.8913,200), weight = 1 - gamma, kinetic energy (MeV) = 0.448796, position (cm) = (-23.3631,-19.0064,200), weight = 1 - gamma, kinetic energy (MeV) = 0.717546, position (cm) = (-19.6582,-24.0128,200), weight = 1 - gamma, kinetic energy (MeV) = 0.52428, position (cm) = (-35.822,-21.129,200), weight = 1 - gamma, kinetic energy (MeV) = 88.6392, position (cm) = (-30.4523,-16.0813,200), weight = 1 - e-, kinetic energy (MeV) = 9.57061, position (cm) = (-27.0161,-19.9087,200), weight = 1 - gamma, kinetic energy (MeV) = 0.038934, position (cm) = (-27.0159,-19.9092,200), weight = 1 - gamma, kinetic energy (MeV) = 0.335377, position (cm) = (-29.171,-21.229,200), weight = 1 - gamma, kinetic energy (MeV) = 0.368814, position (cm) = (-26.601,-17.0529,200), weight = 1 - gamma, kinetic energy (MeV) = 1.70241, position (cm) = (-29.7375,-20.2264,200), weight = 1 - gamma, kinetic energy (MeV) = 0.314074, position (cm) = (-29.9028,-19.8168,200), weight = 1 - gamma, kinetic energy (MeV) = 0.249109, position (cm) = (-19.4007,-23.7988,200), weight = 1 - gamma, kinetic energy (MeV) = 3.03454, position (cm) = (-32.9612,-17.2582,200), weight = 1 - gamma, kinetic energy (MeV) = 0.319181, position (cm) = (-23.0079,-14.5222,200), weight = 1 - gamma, kinetic energy (MeV) = 0.982241, position (cm) = (-31.0496,-13.6951,200), weight = 1 - gamma, kinetic energy (MeV) = 2.63808, position (cm) = (-32.4967,-18.1145,200), weight = 1 - gamma, kinetic energy (MeV) = 3.39838, position (cm) = (-31.0953,-16.2931,200), weight = 1 - pi+, kinetic energy (MeV) = 567.752, position (cm) = (32.4835,-0.798624,200), weight = 1 - proton, kinetic energy (MeV) = 139.766, position (cm) = (7.61334,-5.25816,200), weight = 1 - anti_nu_mu, kinetic energy (MeV) = 46.6347, position (cm) = (56.9368,17.8383,200), weight = 3 - nu_mu, kinetic energy (MeV) = 282.965, position (cm) = (41.5514,8.12347,200), weight = 3 - pi+, kinetic energy (MeV) = 69.0837, position (cm) = (-8.67792,4.17128,200), weight = 2 - proton, kinetic energy (MeV) = 736.745, position (cm) = (28.1601,-22.2588,200), weight = 1 - gamma, kinetic energy (MeV) = 1.11116, position (cm) = (28.9708,-26.8746,200), weight = 10 - neutron, kinetic energy (MeV) = 79.3524, position (cm) = (19.9164,-27.0432,200), weight = 5 - gamma, kinetic energy (MeV) = 2.2532, position (cm) = (-9.04051,14.9449,200), weight = 1 - e+, kinetic energy (MeV) = 19.8988, position (cm) = (-8.34077,-5.96829,200), weight = 1 - gamma, kinetic energy (MeV) = 0.948459, position (cm) = (-8.35215,-5.98944,200), weight = 1 - gamma, kinetic energy (MeV) = 13.6863, position (cm) = (-8.32776,-5.97421,200), weight = 1 - gamma, kinetic energy (MeV) = 9.58358, position (cm) = (-8.23563,-5.91121,200), weight = 1 - e-, kinetic energy (MeV) = 54.103, position (cm) = (-7.83617,-5.49585,200), weight = 1 - gamma, kinetic energy (MeV) = 0.327275, position (cm) = (-7.90758,-5.61552,200), weight = 1 - gamma, kinetic energy (MeV) = 4.73796, position (cm) = (-15.7815,-15.2633,200), weight = 1 - gamma, kinetic energy (MeV) = 0.267603, position (cm) = (-6.10381,-0.220841,200), weight = 1 - gamma, kinetic energy (MeV) = 0.161362, position (cm) = (-12.4916,-23.4403,200), weight = 1 - gamma, kinetic energy (MeV) = 0.455947, position (cm) = (-13.2016,-6.87006,200), weight = 1 - gamma, kinetic energy (MeV) = 0.537149, position (cm) = (-14.8173,-16.4552,200), weight = 1 - gamma, kinetic energy (MeV) = 0.302514, position (cm) = (-11.2122,-11.8565,200), weight = 1 - e-, kinetic energy (MeV) = 19.501, position (cm) = (-12.054,-11.4888,200), weight = 1 - gamma, kinetic energy (MeV) = 0.425345, position (cm) = (-12.0534,-11.4889,200), weight = 1 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-6.72219,-12.3502,200), weight = 1 - gamma, kinetic energy (MeV) = 0.125288, position (cm) = (-0.846462,2.67664,200), weight = 1 - gamma, kinetic energy (MeV) = 1.17279, position (cm) = (-2.78883,-8.48702,200), weight = 1 - gamma, kinetic energy (MeV) = 0.140172, position (cm) = (-10.8041,-3.04085,200), weight = 1 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-10.9392,-5.54171,200), weight = 1 - gamma, kinetic energy (MeV) = 1.18071, position (cm) = (-23.4811,-9.45833,200), weight = 1 - e-, kinetic energy (MeV) = 2.7479, position (cm) = (-23.5026,-9.90399,200), weight = 1 - gamma, kinetic energy (MeV) = 0.451127, position (cm) = (-23.8102,-10.091,200), weight = 1 - gamma, kinetic energy (MeV) = 0.232306, position (cm) = (-23.1149,-8.26886,200), weight = 1 - gamma, kinetic energy (MeV) = 3.99838, position (cm) = (-14.5861,-6.11229,200), weight = 1 - gamma, kinetic energy (MeV) = 0.564858, position (cm) = (-5.08425,-9.28903,200), weight = 1 - gamma, kinetic energy (MeV) = 77.1393, position (cm) = (-12.4135,-5.133,200), weight = 1 - e+, kinetic energy (MeV) = 70.5271, position (cm) = (-13.1193,-4.41309,200), weight = 1 - e-, kinetic energy (MeV) = 12.0792, position (cm) = (-13.0579,-4.51574,200), weight = 1 - e-, kinetic energy (MeV) = 1.0527, position (cm) = (-13.0592,-4.59878,200), weight = 1 - gamma, kinetic energy (MeV) = 0.129536, position (cm) = (-12.005,8.51117,200), weight = 1 - neutron, kinetic energy (MeV) = 121.989, position (cm) = (31.0061,2.99351,200), weight = 1 - gamma, kinetic energy (MeV) = 0.160535, position (cm) = (-41.1271,-26.2404,200), weight = 3 - proton, kinetic energy (MeV) = 262.606, position (cm) = (-43.9693,-28.5053,200), weight = 1 - gamma, kinetic energy (MeV) = 0.41317, position (cm) = (-37.7951,28.0752,200), weight = 3 - gamma, kinetic energy (MeV) = 0.260448, position (cm) = (-40.1723,25.2073,200), weight = 3 - gamma, kinetic energy (MeV) = 0.0562868, position (cm) = (-39.214,25.3169,200), weight = 3 - gamma, kinetic energy (MeV) = 24.045, position (cm) = (-36.5669,22.2589,200), weight = 3 - neutron, kinetic energy (MeV) = 0.000348525, position (cm) = (-13.5284,25.2863,200), weight = 1 - anti_nu_e, kinetic energy (MeV) = 46.7021, position (cm) = (-18.0863,33.1587,200), weight = 3 - e+, kinetic energy (MeV) = 12.1391, position (cm) = (-44.9103,31.396,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0366516, position (cm) = (-44.7696,31.2235,200), weight = 1 - gamma, kinetic energy (MeV) = 57.287, position (cm) = (-44.4496,30.3744,200), weight = 1 - gamma, kinetic energy (MeV) = 6.61893, position (cm) = (-44.388,30.3226,200), weight = 1 - gamma, kinetic energy (MeV) = 0.211541, position (cm) = (-44.2214,30.0681,200), weight = 1 - gamma, kinetic energy (MeV) = 2.54902, position (cm) = (-44.528,30.3478,200), weight = 1 - gamma, kinetic energy (MeV) = 0.124997, position (cm) = (-35.9468,20.3539,200), weight = 1 - gamma, kinetic energy (MeV) = 5.70736, position (cm) = (-43.9975,29.854,200), weight = 1 - gamma, kinetic energy (MeV) = 22.5693, position (cm) = (-44.323,30.0556,200), weight = 1 - gamma, kinetic energy (MeV) = 1.33408, position (cm) = (-45.3885,32.5611,200), weight = 1 - gamma, kinetic energy (MeV) = 0.25812, position (cm) = (-36.4779,16.3137,200), weight = 1 - gamma, kinetic energy (MeV) = 8.41628, position (cm) = (-43.8207,29.6711,200), weight = 1 - gamma, kinetic energy (MeV) = 9.34391, position (cm) = (-43.3859,29.7698,200), weight = 1 - gamma, kinetic energy (MeV) = 0.391033, position (cm) = (-38.3296,24.3845,200), weight = 1 - gamma, kinetic energy (MeV) = 7.19198, position (cm) = (-42.8653,29.6435,200), weight = 1 - gamma, kinetic energy (MeV) = 0.148622, position (cm) = (-34.9374,29.095,200), weight = 1 - gamma, kinetic energy (MeV) = 0.119975, position (cm) = (-39.2901,31.8257,200), weight = 1 - gamma, kinetic energy (MeV) = 0.21852, position (cm) = (-39.6118,29.4652,200), weight = 1 - e-, kinetic energy (MeV) = 3.27666, position (cm) = (-40,29.5596,200), weight = 1 - gamma, kinetic energy (MeV) = 15.0822, position (cm) = (-39.6375,28.6205,200), weight = 1 - gamma, kinetic energy (MeV) = 0.159172, position (cm) = (-35.8331,24.9359,200), weight = 1 - gamma, kinetic energy (MeV) = 0.315486, position (cm) = (-37.1304,26.2108,200), weight = 1 - gamma, kinetic energy (MeV) = 3.02328, position (cm) = (-41.2667,33.9923,200), weight = 1 - gamma, kinetic energy (MeV) = 0.160633, position (cm) = (-44.3101,31.8069,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0787405, position (cm) = (-52.5641,25.2159,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0729413, position (cm) = (-39.1074,27.5181,200), weight = 1 - gamma, kinetic energy (MeV) = 0.994082, position (cm) = (-49.3008,20.756,200), weight = 1 - gamma, kinetic energy (MeV) = 0.629054, position (cm) = (-33.2841,33.2534,200), weight = 1 - gamma, kinetic energy (MeV) = 0.192795, position (cm) = (-23.4223,30.0103,200), weight = 3 - neutron, kinetic energy (MeV) = 3.5425, position (cm) = (-23.3803,30.0161,200), weight = 1 - gamma, kinetic energy (MeV) = 8.47677, position (cm) = (-23.5767,29.5128,200), weight = 1 - neutron, kinetic energy (MeV) = 436.253, position (cm) = (-25.7524,24.8967,200), weight = 1 - gamma, kinetic energy (MeV) = 1.09661, position (cm) = (55.562,21.3075,200), weight = 18 - gamma, kinetic energy (MeV) = 0.582467, position (cm) = (63.126,30.8193,200), weight = 18 - gamma, kinetic energy (MeV) = 0.107931, position (cm) = (-31.0815,-65.4753,200), weight = 8 - gamma, kinetic energy (MeV) = 4.45104, position (cm) = (-56.0646,-12.8651,200), weight = 8 - neutron, kinetic energy (MeV) = 98.668, position (cm) = (-57.7434,-7.96835,200), weight = 4 - gamma, kinetic energy (MeV) = 0.48587, position (cm) = (-30.4903,-30.4074,200), weight = 2 - gamma, kinetic energy (MeV) = 66.4791, position (cm) = (-44.8639,-57.392,200), weight = 2 - gamma, kinetic energy (MeV) = 0.251654, position (cm) = (-42.703,-64.2744,200), weight = 2 - neutron, kinetic energy (MeV) = 109.176, position (cm) = (-57.3852,90.9738,200), weight = 1 - neutron, kinetic energy (MeV) = 0.236377, position (cm) = (-10.7129,-60.6617,200), weight = 4 - gamma, kinetic energy (MeV) = 0.169487, position (cm) = (14.3859,-37.8258,200), weight = 4 - neutron, kinetic energy (MeV) = 2.45062, position (cm) = (16.7001,-43.5976,200), weight = 4 - neutron, kinetic energy (MeV) = 91.3969, position (cm) = (6.03452,-44.9843,200), weight = 4 - gamma, kinetic energy (MeV) = 0.35833, position (cm) = (-0.391694,-5.3109,200), weight = 1 - gamma, kinetic energy (MeV) = 0.545361, position (cm) = (4.343,-2.88044,200), weight = 1 - gamma, kinetic energy (MeV) = 8.3852, position (cm) = (-8.01677,4.60904,200), weight = 1 - gamma, kinetic energy (MeV) = 0.271665, position (cm) = (-2.6774,-2.13805,200), weight = 1 - gamma, kinetic energy (MeV) = 1.35898, position (cm) = (-6.28627,-14.206,200), weight = 1 - gamma, kinetic energy (MeV) = 1.1707, position (cm) = (0.0634866,1.57201,200), weight = 1 - gamma, kinetic energy (MeV) = 0.210722, position (cm) = (-6.05468,-9.53704,200), weight = 1 - gamma, kinetic energy (MeV) = 0.705344, position (cm) = (-5.63813,-8.74499,200), weight = 1 - gamma, kinetic energy (MeV) = 0.888518, position (cm) = (-5.62388,-9.70874,200), weight = 1 - gamma, kinetic energy (MeV) = 0.520504, position (cm) = (-5.72882,-11.0077,200), weight = 1 - gamma, kinetic energy (MeV) = 3.93161, position (cm) = (-4.90847,-12.0366,200), weight = 1 - gamma, kinetic energy (MeV) = 1.0978, position (cm) = (-6.58729,-11.9323,200), weight = 1 - gamma, kinetic energy (MeV) = 0.610769, position (cm) = (-6.5958,-7.81614,200), weight = 1 - gamma, kinetic energy (MeV) = 18.2259, position (cm) = (-6.60153,-10.7928,200), weight = 1 - gamma, kinetic energy (MeV) = 0.111205, position (cm) = (-2.82566,-2.13196,200), weight = 1 - gamma, kinetic energy (MeV) = 1.15369, position (cm) = (-0.844968,-11.3408,200), weight = 1 - gamma, kinetic energy (MeV) = 0.355518, position (cm) = (13.832,-3.24083,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0552244, position (cm) = (13.2874,5.33364,200), weight = 1 - gamma, kinetic energy (MeV) = 17.4094, position (cm) = (9.31252,-4.79311,200), weight = 1 - gamma, kinetic energy (MeV) = 0.807653, position (cm) = (14.988,-8.8428,200), weight = 1 - gamma, kinetic energy (MeV) = 0.108242, position (cm) = (9.3555,-2.08258,200), weight = 1 - gamma, kinetic energy (MeV) = 8.81945, position (cm) = (16.9703,-10.4827,200), weight = 1 - gamma, kinetic energy (MeV) = 4.00827, position (cm) = (16.2201,-10.6303,200), weight = 1 - gamma, kinetic energy (MeV) = 1.42958, position (cm) = (-11.1489,6.56864,200), weight = 1 - gamma, kinetic energy (MeV) = 0.15123, position (cm) = (11.7338,3.51158,200), weight = 1 - gamma, kinetic energy (MeV) = 26.8473, position (cm) = (-1.47556,-1.56278,200), weight = 1 - gamma, kinetic energy (MeV) = 20.095, position (cm) = (15.6478,-1.52507,200), weight = 1 - gamma, kinetic energy (MeV) = 1.46999, position (cm) = (-9.26666,13.956,200), weight = 1 - gamma, kinetic energy (MeV) = 0.323326, position (cm) = (-16.6942,6.1226,200), weight = 1 - gamma, kinetic energy (MeV) = 0.106516, position (cm) = (-19.6554,3.19527,200), weight = 1 - gamma, kinetic energy (MeV) = 3.6657, position (cm) = (-19.7401,6.14328,200), weight = 1 - gamma, kinetic energy (MeV) = 0.557374, position (cm) = (5.76535,-13.1868,200), weight = 1 - gamma, kinetic energy (MeV) = 2.36871, position (cm) = (0.735174,-7.79122,200), weight = 1 - gamma, kinetic energy (MeV) = 4.72849, position (cm) = (0.47371,-4.02689,200), weight = 1 - gamma, kinetic energy (MeV) = 0.146187, position (cm) = (-10.5893,0.853484,200), weight = 1 - gamma, kinetic energy (MeV) = 10.332, position (cm) = (1.89902,-2.40763,200), weight = 1 - gamma, kinetic energy (MeV) = 0.555243, position (cm) = (10.544,7.07889,200), weight = 1 - gamma, kinetic energy (MeV) = 1.33258, position (cm) = (4.46575,3.58469,200), weight = 1 - gamma, kinetic energy (MeV) = 5.29263, position (cm) = (-5.04964,2.54858,200), weight = 1 - gamma, kinetic energy (MeV) = 8.70433, position (cm) = (5.42494,2.68084,200), weight = 1 - gamma, kinetic energy (MeV) = 1.22128, position (cm) = (-0.64333,8.23454,200), weight = 1 - gamma, kinetic energy (MeV) = 89.4282, position (cm) = (-1.96479,-0.944526,200), weight = 1 - gamma, kinetic energy (MeV) = 0.155208, position (cm) = (-2.73476,-0.440813,200), weight = 1 - gamma, kinetic energy (MeV) = 0.42922, position (cm) = (-3.9017,4.05273,200), weight = 1 - gamma, kinetic energy (MeV) = 0.255773, position (cm) = (-3.78414,3.61036,200), weight = 1 - e-, kinetic energy (MeV) = 3.7692, position (cm) = (-0.680794,-2.67594,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0737578, position (cm) = (-0.684265,-2.68163,200), weight = 1 - gamma, kinetic energy (MeV) = 0.200142, position (cm) = (-0.617099,-2.56419,200), weight = 1 - gamma, kinetic energy (MeV) = 0.754695, position (cm) = (-6.13382,-1.66357,200), weight = 1 - gamma, kinetic energy (MeV) = 33.8948, position (cm) = (-1.52935,0.143952,200), weight = 1 - gamma, kinetic energy (MeV) = 11.2746, position (cm) = (-11.6324,5.62291,200), weight = 1 - gamma, kinetic energy (MeV) = 1.53087, position (cm) = (-8.47408,4.33907,200), weight = 1 - gamma, kinetic energy (MeV) = 0.059009, position (cm) = (19.6291,5.77809,200), weight = 1 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (0.737769,-11.9835,200), weight = 1 - gamma, kinetic energy (MeV) = 0.266359, position (cm) = (-1.01936,-11.3804,200), weight = 1 - gamma, kinetic energy (MeV) = 3.35067, position (cm) = (-0.911059,-11.6082,200), weight = 1 - gamma, kinetic energy (MeV) = 2.3655, position (cm) = (-0.181284,-11.7527,200), weight = 1 - e+, kinetic energy (MeV) = 20.5493, position (cm) = (3.61973,-3.1694,200), weight = 1 - e-, kinetic energy (MeV) = 37.9271, position (cm) = (3.62524,-3.16833,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0554548, position (cm) = (3.54493,-3.05165,200), weight = 1 - gamma, kinetic energy (MeV) = 4.50785, position (cm) = (-11.9436,7.40574,200), weight = 1 - gamma, kinetic energy (MeV) = 0.742732, position (cm) = (-13.1481,-3.19608,200), weight = 1 - gamma, kinetic energy (MeV) = 1.31814, position (cm) = (-11.1856,-8.64018,200), weight = 1 - gamma, kinetic energy (MeV) = 1.13885, position (cm) = (-1.2844,-9.17182,200), weight = 1 - gamma, kinetic energy (MeV) = 1.43261, position (cm) = (13.5526,6.24332,200), weight = 1 - gamma, kinetic energy (MeV) = 11.5295, position (cm) = (-0.0424916,-4.47934,200), weight = 1 - gamma, kinetic energy (MeV) = 4.1472, position (cm) = (27.7726,-17.771,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0848498, position (cm) = (-4.05846,11.1212,200), weight = 1 - gamma, kinetic energy (MeV) = 0.775323, position (cm) = (17.8453,-9.46447,200), weight = 1 - gamma, kinetic energy (MeV) = 1.30567, position (cm) = (32.4933,26.8422,200), weight = 1 - gamma, kinetic energy (MeV) = 20.0902, position (cm) = (1.46399,4.79847,200), weight = 1 - gamma, kinetic energy (MeV) = 2.09367, position (cm) = (-1.08058,3.17505,200), weight = 1 - gamma, kinetic energy (MeV) = 39.2189, position (cm) = (-1.34908,13.4807,200), weight = 1 - e+, kinetic energy (MeV) = 48.6587, position (cm) = (21.7708,-0.809858,200), weight = 1 - gamma, kinetic energy (MeV) = 0.184067, position (cm) = (21.7726,-0.827498,200), weight = 1 - e-, kinetic energy (MeV) = 2.94803, position (cm) = (22.3969,0.624994,200), weight = 1 - gamma, kinetic energy (MeV) = 2.28548, position (cm) = (5.60004,-28.6401,200), weight = 1 - gamma, kinetic energy (MeV) = 0.179784, position (cm) = (2.2636,-12.417,200), weight = 1 - gamma, kinetic energy (MeV) = 4.56423, position (cm) = (-18.0772,15.4123,200), weight = 1 - gamma, kinetic energy (MeV) = 4.45521, position (cm) = (27.9958,6.97117,200), weight = 1 - gamma, kinetic energy (MeV) = 0.114032, position (cm) = (1.5562,14.8078,200), weight = 1 - gamma, kinetic energy (MeV) = 2.3003, position (cm) = (-2.07231,-0.896457,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0642833, position (cm) = (0.464726,-2.35891,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0977426, position (cm) = (4.96798,4.33875,200), weight = 1 - gamma, kinetic energy (MeV) = 17.8406, position (cm) = (-10.7519,22.5494,200), weight = 1 - gamma, kinetic energy (MeV) = 1.63773, position (cm) = (-10.0891,11.1671,200), weight = 1 - gamma, kinetic energy (MeV) = 0.548808, position (cm) = (-9.97875,5.19952,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0916125, position (cm) = (-10.2129,4.34866,200), weight = 1 - gamma, kinetic energy (MeV) = 39.7387, position (cm) = (4.51262,14.9539,200), weight = 1 - gamma, kinetic energy (MeV) = 13.3187, position (cm) = (-1.31534,-6.46518,200), weight = 1 - gamma, kinetic energy (MeV) = 6.18276, position (cm) = (-1.08056,-14.374,200), weight = 1 - gamma, kinetic energy (MeV) = 0.407743, position (cm) = (-0.743571,-5.95427,200), weight = 1 - gamma, kinetic energy (MeV) = 2.78313, position (cm) = (18.5576,21.1128,200), weight = 1 - gamma, kinetic energy (MeV) = 10.4382, position (cm) = (11.783,-16.8459,200), weight = 1 - gamma, kinetic energy (MeV) = 1.37383, position (cm) = (3.672,6.95635,200), weight = 1 - e-, kinetic energy (MeV) = 4.12602, position (cm) = (1.71199,4.70209,200), weight = 1 - gamma, kinetic energy (MeV) = 32.6822, position (cm) = (1.96001,5.10012,200), weight = 1 - gamma, kinetic energy (MeV) = 0.182873, position (cm) = (-5.70334,-7.37038,200), weight = 1 - e-, kinetic energy (MeV) = 0.390002, position (cm) = (-1.57651,2.32418,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0830891, position (cm) = (-0.916043,1.889,200), weight = 1 - gamma, kinetic energy (MeV) = 1.62236, position (cm) = (-0.332306,1.32647,200), weight = 1 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-0.270329,1.10451,200), weight = 1 - e-, kinetic energy (MeV) = 2.58747, position (cm) = (-0.138565,1.56231,200), weight = 1 - gamma, kinetic energy (MeV) = 28.7186, position (cm) = (0.206712,1.36263,200), weight = 1 - gamma, kinetic energy (MeV) = 0.167886, position (cm) = (4.27193,-7.837,200), weight = 1 - gamma, kinetic energy (MeV) = 3.32982, position (cm) = (-1.48683,-1.25873,200), weight = 1 - gamma, kinetic energy (MeV) = 7.24052, position (cm) = (7.65796,19.5077,200), weight = 1 - gamma, kinetic energy (MeV) = 0.125899, position (cm) = (0.228402,-0.363882,200), weight = 1 - gamma, kinetic energy (MeV) = 0.440113, position (cm) = (3.42164,-6.61356,200), weight = 1 - gamma, kinetic energy (MeV) = 0.073359, position (cm) = (-2.66154,-6.26774,200), weight = 1 - gamma, kinetic energy (MeV) = 8.17353, position (cm) = (-11.1324,-3.46394,200), weight = 1 - gamma, kinetic energy (MeV) = 0.269667, position (cm) = (-10.7961,-8.71302,200), weight = 1 - gamma, kinetic energy (MeV) = 29.5606, position (cm) = (3.39653,6.90197,200), weight = 1 - gamma, kinetic energy (MeV) = 1.53864, position (cm) = (5.27409,14.8318,200), weight = 1 - gamma, kinetic energy (MeV) = 3.66512, position (cm) = (0.094035,2.58766,200), weight = 1 - gamma, kinetic energy (MeV) = 0.870071, position (cm) = (-2.59328,3.47522,200), weight = 1 - gamma, kinetic energy (MeV) = 0.216107, position (cm) = (4.71593,11.1784,200), weight = 3 - gamma, kinetic energy (MeV) = 0.165085, position (cm) = (7.54386,-4.02614,200), weight = 1 - gamma, kinetic energy (MeV) = 1.26632, position (cm) = (7.49523,-6.72044,200), weight = 1 - gamma, kinetic energy (MeV) = 10.9496, position (cm) = (-1.51985,0.812086,200), weight = 1 - gamma, kinetic energy (MeV) = 2.15291, position (cm) = (-37.6622,-34.4403,200), weight = 1 - gamma, kinetic energy (MeV) = 4.18436, position (cm) = (10.69,22.4174,200), weight = 1 - gamma, kinetic energy (MeV) = 0.212425, position (cm) = (-16.9638,12.7753,200), weight = 1 - gamma, kinetic energy (MeV) = 0.16981, position (cm) = (8.00819,-0.916004,200), weight = 1 - gamma, kinetic energy (MeV) = 3.97253, position (cm) = (31.0129,-37.68,200), weight = 1 - gamma, kinetic energy (MeV) = 1.01594, position (cm) = (21.0499,-20.9808,200), weight = 1 - gamma, kinetic energy (MeV) = 0.920579, position (cm) = (-1.00008,4.27532,200), weight = 1 - gamma, kinetic energy (MeV) = 0.116089, position (cm) = (-40.3056,11.3581,200), weight = 1 - e+, kinetic energy (MeV) = 39.38, position (cm) = (0.60455,2.53711,200), weight = 1 - gamma, kinetic energy (MeV) = 0.180952, position (cm) = (0.60122,2.53887,200), weight = 1 - gamma, kinetic energy (MeV) = 4.77616, position (cm) = (0.587354,2.48362,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0947097, position (cm) = (-1.51697,2.06968,200), weight = 1 - gamma, kinetic energy (MeV) = 1.02488, position (cm) = (3.62743,3.14107,200), weight = 1 - gamma, kinetic energy (MeV) = 7.78966, position (cm) = (1.38408,0.946642,200), weight = 1 - gamma, kinetic energy (MeV) = 0.25131, position (cm) = (-4.25798,-2.1381,200), weight = 1 - e-, kinetic energy (MeV) = 0.534164, position (cm) = (3.00842,1.26355,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0781252, position (cm) = (0.994251,9.23606,200), weight = 1 - gamma, kinetic energy (MeV) = 2.66062, position (cm) = (-0.747983,8.92909,200), weight = 1 - gamma, kinetic energy (MeV) = 1.20554, position (cm) = (3.40138,9.54486,200), weight = 1 - gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-2.88374,-8.78947,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0942083, position (cm) = (7.42295,-1.17474,200), weight = 1 - gamma, kinetic energy (MeV) = 12.6763, position (cm) = (-4.27579,3.15382,200), weight = 1 - gamma, kinetic energy (MeV) = 2.96203, position (cm) = (-5.22759,5.07453,200), weight = 1 - gamma, kinetic energy (MeV) = 0.195535, position (cm) = (-16.7432,2.513,200), weight = 1 - gamma, kinetic energy (MeV) = 34.8713, position (cm) = (-2.06785,18.6188,200), weight = 1 - gamma, kinetic energy (MeV) = 70.3455, position (cm) = (4.21165,4.61741,200), weight = 1 - gamma, kinetic energy (MeV) = 0.882604, position (cm) = (4.98936,6.19504,200), weight = 1 - gamma, kinetic energy (MeV) = 7.28178, position (cm) = (8.03318,-5.77712,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0639059, position (cm) = (-13.8229,-12.4962,200), weight = 1 - gamma, kinetic energy (MeV) = 0.209625, position (cm) = (9.41263,-2.65525,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0782446, position (cm) = (-6.73715,-9.51976,200), weight = 1 - gamma, kinetic energy (MeV) = 0.128136, position (cm) = (-2.92338,-8.63574,200), weight = 1 - gamma, kinetic energy (MeV) = 7.33976, position (cm) = (0.759344,1.23503,200), weight = 1 - gamma, kinetic energy (MeV) = 5.01188, position (cm) = (-19.9649,-1.77215,200), weight = 1 - gamma, kinetic energy (MeV) = 0.118356, position (cm) = (-26.1588,4.64846,200), weight = 1 - gamma, kinetic energy (MeV) = 13.606, position (cm) = (-9.18349,-4.48863,200), weight = 1 - gamma, kinetic energy (MeV) = 0.167764, position (cm) = (-0.247048,-2.28334,200), weight = 1 - gamma, kinetic energy (MeV) = 3.40804, position (cm) = (-1.01488,9.15212,200), weight = 1 - gamma, kinetic energy (MeV) = 2.60609, position (cm) = (9.01345,5.52795,200), weight = 1 - gamma, kinetic energy (MeV) = 7.1022, position (cm) = (-3.11204,9.09094,200), weight = 1 - gamma, kinetic energy (MeV) = 5.0336, position (cm) = (5.4409,19.1608,200), weight = 1 - gamma, kinetic energy (MeV) = 9.55289, position (cm) = (-17.3928,-43.0863,200), weight = 1 - gamma, kinetic energy (MeV) = 4.2234, position (cm) = (14.4368,-13.5798,200), weight = 1 - gamma, kinetic energy (MeV) = 5.28007, position (cm) = (13.1526,-11.8831,200), weight = 1 - gamma, kinetic energy (MeV) = 0.521025, position (cm) = (-2.78846,2.09926,200), weight = 1 - gamma, kinetic energy (MeV) = 0.0882749, position (cm) = (6.57501,-2.99247,200), weight = 1 - gamma, kinetic energy (MeV) = 0.491665, position (cm) = (-6.46749,-0.670916,200), weight = 1 - gamma, kinetic energy (MeV) = 0.188813, position (cm) = (-7.01968,0.378716,200), weight = 1 - gamma, kinetic energy (MeV) = 0.10204, position (cm) = (-0.115906,-52.7435,200), weight = 1 - gamma, kinetic energy (MeV) = 0.543196, position (cm) = (0.257928,-7.81442,200), weight = 1 - gamma, kinetic energy (MeV) = 19.9715, position (cm) = (15.8668,-13.4352,200), weight = 1 - gamma, kinetic energy (MeV) = 7.29027, position (cm) = (-6.86486,4.87257,200), weight = 1 - gamma, kinetic energy (MeV) = 0.339383, position (cm) = (-12.8759,-13.405,200), weight = 1 - gamma, kinetic energy (MeV) = 27.4612, position (cm) = (1.20669,1.40943,200), weight = 1 - gamma, kinetic energy (MeV) = 0.162695, position (cm) = (-9.71679,10.0486,200), weight = 1 - gamma, kinetic energy (MeV) = 20.5491, position (cm) = (4.52205,-4.1182,200), weight = 1 - gamma, kinetic energy (MeV) = 0.132117, position (cm) = (-0.228985,-14.1451,200), weight = 1 - gamma, kinetic energy (MeV) = 0.746871, position (cm) = (-22.6991,-29.067,200), weight = 1 - gamma, kinetic energy (MeV) = 3.14043, position (cm) = (1.97017,-5.78844,200), weight = 1 - gamma, kinetic energy (MeV) = 0.754518, position (cm) = (11.6679,6.80155,200), weight = 1 - gamma, kinetic energy (MeV) = 0.490432, position (cm) = (12.6764,-4.1843,200), weight = 1 - gamma, kinetic energy (MeV) = 7.91745, position (cm) = (10.4889,-48.4798,200), weight = 1 - gamma, kinetic energy (MeV) = 0.283726, position (cm) = (-30.246,-16.1107,200), weight = 1 - gamma, kinetic energy (MeV) = 2.885, position (cm) = (5.06994,14.0855,200), weight = 1 - gamma, kinetic energy (MeV) = 1.26075, position (cm) = (5.27817,-9.80742,200), weight = 1 - gamma, kinetic energy (MeV) = 8.18929, position (cm) = (-3.65976,-1.79308,200), weight = 1 - gamma, kinetic energy (MeV) = 15.6846, position (cm) = (13.8896,-8.36539,200), weight = 1 - gamma, kinetic energy (MeV) = 0.452501, position (cm) = (33.5685,-0.75042,200), weight = 1 - gamma, kinetic energy (MeV) = 5.66573, position (cm) = (3.51303,-1.02379,200), weight = 1 - gamma, kinetic energy (MeV) = 0.426297, position (cm) = (-1.53326,-13.3134,200), weight = 1 - gamma, kinetic energy (MeV) = 4.64852, position (cm) = (11.2853,-6.92059,200), weight = 1 - gamma, kinetic energy (MeV) = 0.181599, position (cm) = (6.49219,-13.1164,200), weight = 1 - gamma, kinetic energy (MeV) = 4.725, position (cm) = (1.49186,-6.01611,200), weight = 1 - gamma, kinetic energy (MeV) = 1.44644, position (cm) = (5.7708,-2.23109,200), weight = 1 - gamma, kinetic energy (MeV) = 4.51848, position (cm) = (2.90415,-1.71601,200), weight = 1 - gamma, kinetic energy (MeV) = 3.30399, position (cm) = (2.62087,-4.02677,200), weight = 1 - gamma, kinetic energy (MeV) = 2.8739, position (cm) = (20.6631,-30.2893,200), weight = 1 - gamma, kinetic energy (MeV) = 0.122555, position (cm) = (-7.70136,-44.1642,200), weight = 1 - gamma, kinetic energy (MeV) = 0.102033, position (cm) = (3.70699,-8.63653,200), weight = 1 - gamma, kinetic energy (MeV) = 2.17387, position (cm) = (-14.566,-14.5456,200), weight = 1 - gamma, kinetic energy (MeV) = 7.429, position (cm) = (1.6074,14.0852,200), weight = 1 - gamma, kinetic energy (MeV) = 25.2438, position (cm) = (-8.22144,2.06434,200), weight = 1 - gamma, kinetic energy (MeV) = 0.60456, position (cm) = (-1.15396,-16.6044,200), weight = 1 - gamma, kinetic energy (MeV) = 0.117605, position (cm) = (4.45337,1.09242,200), weight = 1 - gamma, kinetic energy (MeV) = 1.42924, position (cm) = (16.048,-3.39664,200), weight = 1 - gamma, kinetic energy (MeV) = 6.63153, position (cm) = (8.27617,-14.6831,200), weight = 1 - gamma, kinetic energy (MeV) = 0.678551, position (cm) = (9.56067,0.614839,200), weight = 1 - gamma, kinetic energy (MeV) = 132.13, position (cm) = (1.24753,-0.348666,200), weight = 1 - gamma, kinetic energy (MeV) = 57.9243, position (cm) = (-0.603709,-4.13942,200), weight = 1 - gamma, kinetic energy (MeV) = 0.620457, position (cm) = (-0.514795,7.16149,200), weight = 1 - gamma, kinetic energy (MeV) = 2.69152, position (cm) = (1.48228,0.627622,200), weight = 1 - gamma, kinetic energy (MeV) = 1.90399, position (cm) = (-30.6834,-17.9632,200), weight = 1 - e-, kinetic energy (MeV) = 5.05715, position (cm) = (-30.3618,-18.0193,200), weight = 1 - gamma, kinetic energy (MeV) = 1.3946, position (cm) = (-1.29355,-7.56055,200), weight = 1 - gamma, kinetic energy (MeV) = 2.10895, position (cm) = (0.278934,7.08818,200), weight = 1 - gamma, kinetic energy (MeV) = 21.3953, position (cm) = (-28.5178,3.47082,200), weight = 1 + gamma, kinetic energy (MeV) = 2.46353, position (cm) = (42.7112,17.1907,200), weight = 6 + neutron, kinetic energy (MeV) = 105.291, position (cm) = (54.2629,72.2837,200), weight = 3 + nu_e, kinetic energy (MeV) = 23.9338, position (cm) = (16.578,29.2329,200), weight = 5 + gamma, kinetic energy (MeV) = 18.6748, position (cm) = (21.5493,-16.7092,200), weight = 1 + gamma, kinetic energy (MeV) = 0.117224, position (cm) = (-6.45731,-9.94986,200), weight = 1 + gamma, kinetic energy (MeV) = 5.64963, position (cm) = (-10.3721,-4.09731,200), weight = 1 + gamma, kinetic energy (MeV) = 1.32173, position (cm) = (-5.6775,-2.96788,200), weight = 1 + gamma, kinetic energy (MeV) = 0.240802, position (cm) = (-20.0209,3.90584,200), weight = 1 + gamma, kinetic energy (MeV) = 6.02391, position (cm) = (31.7008,-12.1104,200), weight = 1 + gamma, kinetic energy (MeV) = 0.159566, position (cm) = (-12.9298,-5.90282,200), weight = 1 + gamma, kinetic energy (MeV) = 1.49823, position (cm) = (-25.4857,-4.67929,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0929534, position (cm) = (-17.1635,-13.4061,200), weight = 1 + gamma, kinetic energy (MeV) = 1.95917, position (cm) = (-24.517,-5.29097,200), weight = 1 + gamma, kinetic energy (MeV) = 0.249017, position (cm) = (-34.9087,-1.9993,200), weight = 1 + gamma, kinetic energy (MeV) = 4.64237, position (cm) = (-24.3568,-4.3721,200), weight = 1 + gamma, kinetic energy (MeV) = 0.491675, position (cm) = (-21.047,-2.96026,200), weight = 1 + gamma, kinetic energy (MeV) = 0.394549, position (cm) = (-20.7876,-2.96246,200), weight = 1 + gamma, kinetic energy (MeV) = 0.123023, position (cm) = (-18.8152,-2.51837,200), weight = 1 + gamma, kinetic energy (MeV) = 2.36629, position (cm) = (-21.5501,-2.46152,200), weight = 1 + e-, kinetic energy (MeV) = 2.63405, position (cm) = (-21.8626,-1.13105,200), weight = 1 + gamma, kinetic energy (MeV) = 17.276, position (cm) = (-22.5197,-1.34026,200), weight = 1 + gamma, kinetic energy (MeV) = 0.395212, position (cm) = (-22.3541,-1.51807,200), weight = 1 + gamma, kinetic energy (MeV) = 15.2841, position (cm) = (-22.4252,-1.5565,200), weight = 1 + gamma, kinetic energy (MeV) = 0.214288, position (cm) = (-23.5238,-2.22896,200), weight = 1 + gamma, kinetic energy (MeV) = 4.98826, position (cm) = (-22.419,-2.08698,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0459222, position (cm) = (-23.671,-5.39984,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0627844, position (cm) = (-10.3784,24.4295,200), weight = 1 + gamma, kinetic energy (MeV) = 2.04448, position (cm) = (-24.4143,-5.17017,200), weight = 1 + gamma, kinetic energy (MeV) = 0.235258, position (cm) = (3.92438,7.62807,200), weight = 1 + gamma, kinetic energy (MeV) = 0.592929, position (cm) = (-19.6624,-26.933,200), weight = 1 + gamma, kinetic energy (MeV) = 0.467826, position (cm) = (-32.9266,-7.20523,200), weight = 2 + neutron, kinetic energy (MeV) = 3.09579, position (cm) = (-0.80822,-33.6947,200), weight = 1 + pi+, kinetic energy (MeV) = 245.659, position (cm) = (25.2747,-43.1625,200), weight = 1 + gamma, kinetic energy (MeV) = 391.653, position (cm) = (16.0803,-5.33454,200), weight = 1 + neutron, kinetic energy (MeV) = 21.9874, position (cm) = (32.7499,-27.2526,200), weight = 4 + neutron, kinetic energy (MeV) = 1852.08, position (cm) = (11.5015,-5.80669,200), weight = 1 + gamma, kinetic energy (MeV) = 33.5544, position (cm) = (0.0682676,-18.3231,200), weight = 1 + anti_nu_mu, kinetic energy (MeV) = 36.7814, position (cm) = (-9.11162,30.7532,200), weight = 2 + gamma, kinetic energy (MeV) = 5.55121, position (cm) = (82.9176,-75.2134,200), weight = 3 + gamma, kinetic energy (MeV) = 0.187118, position (cm) = (82.5768,-74.1756,200), weight = 3 + e-, kinetic energy (MeV) = 17.9951, position (cm) = (-33.5326,-15.3994,200), weight = 1 + gamma, kinetic energy (MeV) = 0.5275, position (cm) = (-33.5307,-15.4093,200), weight = 1 + gamma, kinetic energy (MeV) = 0.164299, position (cm) = (-33.5702,-15.3832,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0670369, position (cm) = (-33.8932,-16.1059,200), weight = 1 + gamma, kinetic energy (MeV) = 0.076832, position (cm) = (-31.5521,-26.011,200), weight = 1 + gamma, kinetic energy (MeV) = 0.414463, position (cm) = (-55.3099,-7.65984,200), weight = 1 + gamma, kinetic energy (MeV) = 0.508853, position (cm) = (-19.5739,6.8243,200), weight = 1 + gamma, kinetic energy (MeV) = 4.38758, position (cm) = (-31.1515,-9.5835,200), weight = 1 + gamma, kinetic energy (MeV) = 0.160648, position (cm) = (-29.499,-3.29914,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0600146, position (cm) = (-34.5393,12.0357,200), weight = 1 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-21.5441,4.22476,200), weight = 1 + gamma, kinetic energy (MeV) = 7.82527, position (cm) = (-18.1954,0.432107,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0847761, position (cm) = (-48.123,-11.8304,200), weight = 1 + gamma, kinetic energy (MeV) = 1.31953, position (cm) = (2.62233,19.6799,200), weight = 1 + gamma, kinetic energy (MeV) = 7.89257, position (cm) = (-55.0364,9.55533,200), weight = 1 + gamma, kinetic energy (MeV) = 10.1156, position (cm) = (-33.7502,4.7056,200), weight = 1 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-24.2551,4.94149,200), weight = 1 + gamma, kinetic energy (MeV) = 2.02387, position (cm) = (-38.1228,2.71829,200), weight = 1 + gamma, kinetic energy (MeV) = 4.23009, position (cm) = (-33.3948,-3.30377,200), weight = 1 + neutron, kinetic energy (MeV) = 41.9622, position (cm) = (13.2906,80.7148,200), weight = 1 + gamma, kinetic energy (MeV) = 1.10394, position (cm) = (-18.791,16.869,200), weight = 18 + neutron, kinetic energy (MeV) = 13.8804, position (cm) = (-7.67734,12.2997,200), weight = 27 + gamma, kinetic energy (MeV) = 0.47123, position (cm) = (-16.199,15.2248,200), weight = 18 + neutron, kinetic energy (MeV) = 942.972, position (cm) = (3.92972,0.993959,200), weight = 1 + proton, kinetic energy (MeV) = 4206.14, position (cm) = (-4.32346,3.25085,200), weight = 1 + gamma, kinetic energy (MeV) = 0.342126, position (cm) = (-88.249,6.80797,200), weight = 6 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-23.9761,-31.8951,200), weight = 1 + gamma, kinetic energy (MeV) = 0.459341, position (cm) = (-14.8568,-39.5993,200), weight = 1 + e-, kinetic energy (MeV) = 6.53701, position (cm) = (-13.0419,-38.9688,200), weight = 1 + gamma, kinetic energy (MeV) = 0.784628, position (cm) = (-10.362,-43.3321,200), weight = 1 + gamma, kinetic energy (MeV) = 0.219202, position (cm) = (-8.4676,-38.9345,200), weight = 1 + gamma, kinetic energy (MeV) = 0.232031, position (cm) = (-14.922,-18.3119,200), weight = 1 + gamma, kinetic energy (MeV) = 1.41637, position (cm) = (-16.2038,-28.3587,200), weight = 1 + gamma, kinetic energy (MeV) = 54.7854, position (cm) = (-6.1106,-40.5738,200), weight = 1 + gamma, kinetic energy (MeV) = 0.196275, position (cm) = (-7.15727,-44.9542,200), weight = 1 + gamma, kinetic energy (MeV) = 0.39251, position (cm) = (2.37766,-42.9798,200), weight = 1 + gamma, kinetic energy (MeV) = 0.645074, position (cm) = (-8.66271,-24.2374,200), weight = 1 + gamma, kinetic energy (MeV) = 4.05193, position (cm) = (8.3846,-67.629,200), weight = 1 + gamma, kinetic energy (MeV) = 11.4271, position (cm) = (-76.1347,-3.28203,200), weight = 2 + gamma, kinetic energy (MeV) = 0.812735, position (cm) = (-72.9255,-19.1775,200), weight = 2 + gamma, kinetic energy (MeV) = 1.11087, position (cm) = (-74.4636,-4.13604,200), weight = 2 + neutron, kinetic energy (MeV) = 25.3518, position (cm) = (82.7274,16.741,200), weight = 4 + kaon-, kinetic energy (MeV) = 1342.6, position (cm) = (27.1272,3.85239,200), weight = 1 + neutron, kinetic energy (MeV) = 278.147, position (cm) = (-51.2857,8.64848,200), weight = 4 + nu_mu, kinetic energy (MeV) = 29.7919, position (cm) = (0.759932,-58.5356,200), weight = 1 + pi-, kinetic energy (MeV) = 189.233, position (cm) = (35.3936,-9.85421,200), weight = 1 + gamma, kinetic energy (MeV) = 4.28198, position (cm) = (24.1597,21.3357,200), weight = 2 + neutron, kinetic energy (MeV) = 56.4207, position (cm) = (64.4993,0.141001,200), weight = 1 + neutron, kinetic energy (MeV) = 199.974, position (cm) = (-9.90667,-51.3148,200), weight = 1 + nu_e, kinetic energy (MeV) = 31.3458, position (cm) = (27.8658,35.4679,200), weight = 1 + gamma, kinetic energy (MeV) = 2.17967, position (cm) = (5.86986,9.93954,200), weight = 1 + gamma, kinetic energy (MeV) = 14.2637, position (cm) = (28.2572,-23.738,200), weight = 1 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-3.91219,10.1563,200), weight = 1 + gamma, kinetic energy (MeV) = 2.30683, position (cm) = (10.267,-5.62135,200), weight = 1 + gamma, kinetic energy (MeV) = 1.16271, position (cm) = (14.2709,1.50004,200), weight = 1 + gamma, kinetic energy (MeV) = 1.56498, position (cm) = (12.1195,-3.11076,200), weight = 1 + gamma, kinetic energy (MeV) = 0.169488, position (cm) = (0.7543,-8.08924,200), weight = 1 + gamma, kinetic energy (MeV) = 6.26998, position (cm) = (-4.01711,-19.4792,200), weight = 1 + gamma, kinetic energy (MeV) = 0.454819, position (cm) = (-34.6927,-71.3096,200), weight = 1 + gamma, kinetic energy (MeV) = 8.27163, position (cm) = (-7.62726,-0.392669,200), weight = 1 + gamma, kinetic energy (MeV) = 1.63576, position (cm) = (4.69304,-0.084856,200), weight = 1 + gamma, kinetic energy (MeV) = 2.91161, position (cm) = (12.1934,-6.01272,200), weight = 1 + gamma, kinetic energy (MeV) = 7.47412, position (cm) = (6.58049,-5.73002,200), weight = 1 + gamma, kinetic energy (MeV) = 5.83294, position (cm) = (0.671334,-7.63261,200), weight = 1 + gamma, kinetic energy (MeV) = 0.363056, position (cm) = (4.38797,-6.79836,200), weight = 1 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (17.1473,-1.93721,200), weight = 1 + gamma, kinetic energy (MeV) = 1.43255, position (cm) = (-10.715,2.81434,200), weight = 1 + gamma, kinetic energy (MeV) = 0.251688, position (cm) = (-7.7872,0.996414,200), weight = 1 + gamma, kinetic energy (MeV) = 93.3549, position (cm) = (-2.71277,-0.628363,200), weight = 1 + gamma, kinetic energy (MeV) = 2.37668, position (cm) = (-2.67418,-1.30773,200), weight = 1 + gamma, kinetic energy (MeV) = 8.36113, position (cm) = (-2.97862,-1.54037,200), weight = 1 + gamma, kinetic energy (MeV) = 6.54025, position (cm) = (4.51333,1.20334,200), weight = 1 + gamma, kinetic energy (MeV) = 10.1553, position (cm) = (7.44665,-5.851,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0990764, position (cm) = (-6.3353,-5.25779,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0868941, position (cm) = (4.87655,29.9634,200), weight = 1 + gamma, kinetic energy (MeV) = 14.4174, position (cm) = (3.42476,6.56776,200), weight = 1 + gamma, kinetic energy (MeV) = 3.76278, position (cm) = (0.32658,17.1835,200), weight = 1 + gamma, kinetic energy (MeV) = 0.327545, position (cm) = (-4.84419,10.1332,200), weight = 1 + gamma, kinetic energy (MeV) = 0.383949, position (cm) = (21.2457,-8.14043,200), weight = 1 + e-, kinetic energy (MeV) = 2.22462, position (cm) = (-12.2633,-3.86902,200), weight = 1 + gamma, kinetic energy (MeV) = 12.994, position (cm) = (28.2247,38.6538,200), weight = 1 + gamma, kinetic energy (MeV) = 0.767657, position (cm) = (-17.0036,5.63283,200), weight = 1 + gamma, kinetic energy (MeV) = 4.8944, position (cm) = (1.34203,7.16439,200), weight = 1 + gamma, kinetic energy (MeV) = 8.7152, position (cm) = (10.0179,-6.75902,200), weight = 1 + gamma, kinetic energy (MeV) = 6.18499, position (cm) = (-0.148268,32.1866,200), weight = 1 + gamma, kinetic energy (MeV) = 17.1433, position (cm) = (-1.12155,-6.38197,200), weight = 1 + gamma, kinetic energy (MeV) = 4.87232, position (cm) = (10.179,-12.4334,200), weight = 1 + gamma, kinetic energy (MeV) = 5.94098, position (cm) = (1.00489,3.95803,200), weight = 1 + gamma, kinetic energy (MeV) = 0.23118, position (cm) = (2.95516,5.68325,200), weight = 1 + gamma, kinetic energy (MeV) = 1.35751, position (cm) = (7.38658,-15.4144,200), weight = 1 + gamma, kinetic energy (MeV) = 3.81211, position (cm) = (7.2887,-22.6192,200), weight = 1 + gamma, kinetic energy (MeV) = 12.7289, position (cm) = (0.66256,-11.7042,200), weight = 1 + gamma, kinetic energy (MeV) = 0.345076, position (cm) = (-0.485098,1.18278,200), weight = 1 + gamma, kinetic energy (MeV) = 9.81497, position (cm) = (29.3207,-11.2413,200), weight = 1 + gamma, kinetic energy (MeV) = 5.46132, position (cm) = (-2.40273,6.35869,200), weight = 1 + gamma, kinetic energy (MeV) = 5.43579, position (cm) = (-5.49401,-0.067172,200), weight = 1 + gamma, kinetic energy (MeV) = 14.7414, position (cm) = (3.44878,3.91751,200), weight = 1 + gamma, kinetic energy (MeV) = 7.36235, position (cm) = (1.72643,2.5578,200), weight = 3 + gamma, kinetic energy (MeV) = 11.8931, position (cm) = (2.91022,3.96123,200), weight = 1 + gamma, kinetic energy (MeV) = 0.200976, position (cm) = (4.52958,2.79399,200), weight = 1 + gamma, kinetic energy (MeV) = 0.10723, position (cm) = (-15.1875,15.6597,200), weight = 1 + gamma, kinetic energy (MeV) = 11.1939, position (cm) = (0.510195,-1.08708,200), weight = 1 + gamma, kinetic energy (MeV) = 0.282399, position (cm) = (-3.58854,10.7342,200), weight = 1 + gamma, kinetic energy (MeV) = 11.3254, position (cm) = (0.429874,-0.549113,200), weight = 1 + e-, kinetic energy (MeV) = 27.209, position (cm) = (0.54696,-1.25413,200), weight = 1 + gamma, kinetic energy (MeV) = 4.48958, position (cm) = (0.541698,-1.24456,200), weight = 1 + gamma, kinetic energy (MeV) = 1.17398, position (cm) = (0.411188,-1.7509,200), weight = 1 + gamma, kinetic energy (MeV) = 5.51523, position (cm) = (0.310017,-1.34204,200), weight = 1 + gamma, kinetic energy (MeV) = 0.125265, position (cm) = (0.230826,-1.30796,200), weight = 1 + gamma, kinetic energy (MeV) = 0.467355, position (cm) = (0.276196,-1.38455,200), weight = 1 + e+, kinetic energy (MeV) = 20.6799, position (cm) = (0.814198,-1.83094,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0875603, position (cm) = (0.821451,-1.83488,200), weight = 1 + gamma, kinetic energy (MeV) = 0.765676, position (cm) = (0.734445,-1.93617,200), weight = 1 + gamma, kinetic energy (MeV) = 0.505471, position (cm) = (0.235339,-1.22842,200), weight = 1 + e-, kinetic energy (MeV) = 47.291, position (cm) = (0.340848,-1.72662,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0637771, position (cm) = (-2.48936,5.06393,200), weight = 1 + gamma, kinetic energy (MeV) = 0.172505, position (cm) = (0.313397,0.658203,200), weight = 1 + gamma, kinetic energy (MeV) = 0.521463, position (cm) = (0.607414,-9.53829,200), weight = 1 + gamma, kinetic energy (MeV) = 0.176688, position (cm) = (-0.348769,-3.65909,200), weight = 1 + gamma, kinetic energy (MeV) = 0.292022, position (cm) = (2.43861,-8.21013,200), weight = 1 + gamma, kinetic energy (MeV) = 2.12977, position (cm) = (-1.36633,-5.56126,200), weight = 1 + gamma, kinetic energy (MeV) = 0.164306, position (cm) = (-0.251141,-2.55063,200), weight = 1 + gamma, kinetic energy (MeV) = 0.339601, position (cm) = (0.250848,-2.15955,200), weight = 1 + gamma, kinetic energy (MeV) = 0.484325, position (cm) = (0.685074,0.792245,200), weight = 1 + e-, kinetic energy (MeV) = 0.175519, position (cm) = (-1.19536,-2.79217,200), weight = 1 + gamma, kinetic energy (MeV) = 1.25639, position (cm) = (5.89302,-6.33662,200), weight = 1 + gamma, kinetic energy (MeV) = 0.44725, position (cm) = (1.34565,-3.65255,200), weight = 1 + gamma, kinetic energy (MeV) = 0.118546, position (cm) = (1.72942,-1.71281,200), weight = 1 + gamma, kinetic energy (MeV) = 0.159141, position (cm) = (2.30958,-0.0718669,200), weight = 1 + gamma, kinetic energy (MeV) = 0.671072, position (cm) = (-0.573824,-1.47556,200), weight = 1 + e-, kinetic energy (MeV) = 4.15214, position (cm) = (0.0325431,-1.29686,200), weight = 1 + gamma, kinetic energy (MeV) = 1.21629, position (cm) = (0.101217,-9.12239,200), weight = 1 + gamma, kinetic energy (MeV) = 8.00809, position (cm) = (-0.0300767,-1.45674,200), weight = 1 + gamma, kinetic energy (MeV) = 1.07016, position (cm) = (-8.28641,-5.15596,200), weight = 1 + gamma, kinetic energy (MeV) = 0.487479, position (cm) = (-4.38966,1.21062,200), weight = 1 + gamma, kinetic energy (MeV) = 0.280039, position (cm) = (0.629211,2.49887,200), weight = 1 + gamma, kinetic energy (MeV) = 7.26058, position (cm) = (0.0705468,0.860076,200), weight = 1 + gamma, kinetic energy (MeV) = 2.12778, position (cm) = (4.46917,-0.471831,200), weight = 1 + e-, kinetic energy (MeV) = 11.864, position (cm) = (-0.847342,1.09668,200), weight = 1 + gamma, kinetic energy (MeV) = 1.91591, position (cm) = (-0.847182,1.09488,200), weight = 1 + gamma, kinetic energy (MeV) = 0.922745, position (cm) = (-1.09527,1.63533,200), weight = 1 + gamma, kinetic energy (MeV) = 6.83407, position (cm) = (-1.04525,1.77882,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0619806, position (cm) = (-1.12262,1.92435,200), weight = 1 + e+, kinetic energy (MeV) = 3.73966, position (cm) = (1.55489,-0.847423,200), weight = 1 + gamma, kinetic energy (MeV) = 1.86378, position (cm) = (0.93235,-0.556536,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0828295, position (cm) = (0.945853,0.418826,200), weight = 1 + e-, kinetic energy (MeV) = 25.5933, position (cm) = (1.18857,0.303038,200), weight = 1 + gamma, kinetic energy (MeV) = 3.33744, position (cm) = (1.1886,0.303008,200), weight = 1 + gamma, kinetic energy (MeV) = 0.160889, position (cm) = (1.03725,0.281798,200), weight = 1 + gamma, kinetic energy (MeV) = 0.890297, position (cm) = (-2.36237,-1.80574,200), weight = 1 + gamma, kinetic energy (MeV) = 0.152593, position (cm) = (-10.4096,-7.21275,200), weight = 1 + gamma, kinetic energy (MeV) = 3.00324, position (cm) = (-0.543496,-1.04027,200), weight = 1 + gamma, kinetic energy (MeV) = 4.78257, position (cm) = (1.44852,1.80575,200), weight = 1 + gamma, kinetic energy (MeV) = 0.426949, position (cm) = (1.71265,-0.267548,200), weight = 1 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (5.16798,-0.01388,200), weight = 1 + gamma, kinetic energy (MeV) = 0.828699, position (cm) = (2.04002,3.39495,200), weight = 1 + gamma, kinetic energy (MeV) = 1.89273, position (cm) = (-0.0688732,-5.04243,200), weight = 1 + gamma, kinetic energy (MeV) = 0.856813, position (cm) = (1.06494,-0.357541,200), weight = 1 + gamma, kinetic energy (MeV) = 0.340418, position (cm) = (6.24001,0.863639,200), weight = 1 + gamma, kinetic energy (MeV) = 0.263893, position (cm) = (1.06364,0.259105,200), weight = 1 + gamma, kinetic energy (MeV) = 0.239333, position (cm) = (1.13919,0.225288,200), weight = 1 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-0.0907152,0.396668,200), weight = 1 + gamma, kinetic energy (MeV) = 32.0189, position (cm) = (0.130216,-0.630952,200), weight = 1 + gamma, kinetic energy (MeV) = 4.03228, position (cm) = (-3.03097,3.19255,200), weight = 1 + gamma, kinetic energy (MeV) = 0.141304, position (cm) = (12.6283,-7.77743,200), weight = 1 + gamma, kinetic energy (MeV) = 1.21686, position (cm) = (0.095261,6.74757,200), weight = 1 + gamma, kinetic energy (MeV) = 7.37545, position (cm) = (5.88054,11.8248,200), weight = 1 + gamma, kinetic energy (MeV) = 2.45025, position (cm) = (1.52834,-0.630967,200), weight = 1 + gamma, kinetic energy (MeV) = 0.27426, position (cm) = (17.2929,-2.02217,200), weight = 1 + gamma, kinetic energy (MeV) = 4.73661, position (cm) = (-1.30155,15.9723,200), weight = 1 + gamma, kinetic energy (MeV) = 3.87796, position (cm) = (7.08459,-17.2809,200), weight = 1 + gamma, kinetic energy (MeV) = 1.16663, position (cm) = (48.6305,-14.472,200), weight = 1 + gamma, kinetic energy (MeV) = 3.9062, position (cm) = (-22.2205,-27.0145,200), weight = 1 + gamma, kinetic energy (MeV) = 0.379, position (cm) = (-7.0068,-5.69349,200), weight = 1 + gamma, kinetic energy (MeV) = 6.96033, position (cm) = (0.784926,-6.70177,200), weight = 1 + gamma, kinetic energy (MeV) = 0.413774, position (cm) = (-3.67857,0.487327,200), weight = 1 + e-, kinetic energy (MeV) = 3.01248, position (cm) = (-0.952188,1.41782,200), weight = 1 + gamma, kinetic energy (MeV) = 0.103536, position (cm) = (5.86516,-17.6457,200), weight = 1 + gamma, kinetic energy (MeV) = 0.916717, position (cm) = (6.72321,7.55239,200), weight = 1 + gamma, kinetic energy (MeV) = 12.6588, position (cm) = (2.99409,2.35368,200), weight = 1 + gamma, kinetic energy (MeV) = 21.3404, position (cm) = (-0.754773,9.09711,200), weight = 1 + gamma, kinetic energy (MeV) = 0.154081, position (cm) = (2.2967,-4.41692,200), weight = 1 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-2.12901,1.16334,200), weight = 1 + gamma, kinetic energy (MeV) = 16.473, position (cm) = (-0.18943,-9.04751,200), weight = 1 + gamma, kinetic energy (MeV) = 4.17538, position (cm) = (-9.60889,34.7143,200), weight = 1 + gamma, kinetic energy (MeV) = 0.910541, position (cm) = (-23.7059,-6.21019,200), weight = 1 + gamma, kinetic energy (MeV) = 2.3798, position (cm) = (4.56069,21.3329,200), weight = 1 + gamma, kinetic energy (MeV) = 3.62393, position (cm) = (1.4206,2.45934,200), weight = 1 + gamma, kinetic energy (MeV) = 0.218868, position (cm) = (-10.8678,19.2714,200), weight = 1 + gamma, kinetic energy (MeV) = 0.250026, position (cm) = (-6.55697,19.1616,200), weight = 1 + gamma, kinetic energy (MeV) = 0.408295, position (cm) = (-9.35102,12.435,200), weight = 1 + gamma, kinetic energy (MeV) = 9.80608, position (cm) = (-12.103,15.3896,200), weight = 1 + gamma, kinetic energy (MeV) = 5.51919, position (cm) = (-0.0604722,-19.8016,200), weight = 1 + gamma, kinetic energy (MeV) = 4.90528, position (cm) = (-8.23112,-6.47981,200), weight = 1 + gamma, kinetic energy (MeV) = 1.27287, position (cm) = (19.8903,0.535654,200), weight = 1 + gamma, kinetic energy (MeV) = 2.2701, position (cm) = (6.00546,-10.9017,200), weight = 1 + gamma, kinetic energy (MeV) = 14.0168, position (cm) = (2.55217,-13.2109,200), weight = 1 + gamma, kinetic energy (MeV) = 0.843005, position (cm) = (-0.527329,-13.9098,200), weight = 1 + gamma, kinetic energy (MeV) = 0.257049, position (cm) = (0.25092,2.73045,200), weight = 1 + gamma, kinetic energy (MeV) = 4.24679, position (cm) = (5.21807,7.12929,200), weight = 1 + gamma, kinetic energy (MeV) = 7.54777, position (cm) = (-7.60846,8.47418,200), weight = 1 + gamma, kinetic energy (MeV) = 0.125613, position (cm) = (0.54901,-1.60102,200), weight = 1 + gamma, kinetic energy (MeV) = 1.79614, position (cm) = (-16.8021,-9.99038,200), weight = 1 + gamma, kinetic energy (MeV) = 0.437711, position (cm) = (-15.371,-11.1636,200), weight = 1 + gamma, kinetic energy (MeV) = 3.47845, position (cm) = (14.637,7.63142,200), weight = 1 + gamma, kinetic energy (MeV) = 0.44822, position (cm) = (-10.0755,2.61101,200), weight = 1 + gamma, kinetic energy (MeV) = 0.062895, position (cm) = (-11.4526,2.65729,200), weight = 1 + e-, kinetic energy (MeV) = 0.509492, position (cm) = (-11.8216,2.17403,200), weight = 1 + e-, kinetic energy (MeV) = 1.2211, position (cm) = (-11.8511,2.27433,200), weight = 1 + e+, kinetic energy (MeV) = 23.2847, position (cm) = (0.679794,2.12086,200), weight = 1 + e-, kinetic energy (MeV) = 2.88528, position (cm) = (0.262677,2.13018,200), weight = 1 + gamma, kinetic energy (MeV) = 0.616145, position (cm) = (-4.73185,-12.0819,200), weight = 1 + e-, kinetic energy (MeV) = 6.68136, position (cm) = (-2.04291,5.35525,200), weight = 1 + gamma, kinetic energy (MeV) = 18.4897, position (cm) = (-1.53939,6.15871,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0822186, position (cm) = (17.8836,-7.42295,200), weight = 1 + gamma, kinetic energy (MeV) = 2.1619, position (cm) = (-4.54071,12.6232,200), weight = 1 + gamma, kinetic energy (MeV) = 13.2424, position (cm) = (-6.92176,-3.32794,200), weight = 1 + gamma, kinetic energy (MeV) = 13.3477, position (cm) = (-3.15459,4.17647,200), weight = 1 + gamma, kinetic energy (MeV) = 1.36772, position (cm) = (-2.78784,-3.19508,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0781267, position (cm) = (-13.9627,-30.8336,200), weight = 1 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (7.5192,-3.22372,200), weight = 1 + gamma, kinetic energy (MeV) = 3.06592, position (cm) = (6.54346,10.2407,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0910283, position (cm) = (1.67098,4.95385,200), weight = 1 + gamma, kinetic energy (MeV) = 7.7951, position (cm) = (7.05387,-0.696308,200), weight = 1 + gamma, kinetic energy (MeV) = 17.4451, position (cm) = (7.23511,-0.81732,200), weight = 1 + gamma, kinetic energy (MeV) = 0.199174, position (cm) = (6.1014,-3.94327,200), weight = 1 + gamma, kinetic energy (MeV) = 0.221496, position (cm) = (1.8386,-2.4564,200), weight = 1 + gamma, kinetic energy (MeV) = 1.99398, position (cm) = (6.08636,-4.70112,200), weight = 1 + gamma, kinetic energy (MeV) = 3.06279, position (cm) = (6.38413,-3.91335,200), weight = 1 + gamma, kinetic energy (MeV) = 9.47435, position (cm) = (-18.5475,-0.454415,200), weight = 1 + gamma, kinetic energy (MeV) = 0.60588, position (cm) = (43.95,27.068,200), weight = 1 + gamma, kinetic energy (MeV) = 8.10519, position (cm) = (-29.5943,1.88706,200), weight = 1 + gamma, kinetic energy (MeV) = 1.93067, position (cm) = (-32.9197,3.52485,200), weight = 1 + gamma, kinetic energy (MeV) = 28.7854, position (cm) = (8.32386,-13.3794,200), weight = 1 + gamma, kinetic energy (MeV) = 9.61079, position (cm) = (9.87177,26.7161,200), weight = 1 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (3.98769,6.81604,200), weight = 1 + gamma, kinetic energy (MeV) = 0.16604, position (cm) = (-2.90397,6.09221,200), weight = 1 + gamma, kinetic energy (MeV) = 7.98937, position (cm) = (2.47352,8.14851,200), weight = 1 + gamma, kinetic energy (MeV) = 0.189562, position (cm) = (4.35122,7.56857,200), weight = 1 + gamma, kinetic energy (MeV) = 0.662138, position (cm) = (3.44095,7.12507,200), weight = 1 + gamma, kinetic energy (MeV) = 5.74021, position (cm) = (3.32889,7.43594,200), weight = 1 + gamma, kinetic energy (MeV) = 0.112462, position (cm) = (2.33783,6.47486,200), weight = 1 + gamma, kinetic energy (MeV) = 0.265775, position (cm) = (35.8782,2.40218,200), weight = 1 + gamma, kinetic energy (MeV) = 6.34494, position (cm) = (11.6161,4.16565,200), weight = 1 + gamma, kinetic energy (MeV) = 0.164333, position (cm) = (6.70014,-30.4539,200), weight = 1 + gamma, kinetic energy (MeV) = 20.4821, position (cm) = (-2.29712,-5.29757,200), weight = 1 + gamma, kinetic energy (MeV) = 11.3511, position (cm) = (-17.1913,-0.082736,200), weight = 1 + gamma, kinetic energy (MeV) = 43.5748, position (cm) = (-18.938,-0.275537,200), weight = 1 + gamma, kinetic energy (MeV) = 2.23881, position (cm) = (9.56179,-10.6888,200), weight = 1 + gamma, kinetic energy (MeV) = 2.44023, position (cm) = (-0.804396,9.36841,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0582632, position (cm) = (-0.334484,14.8482,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0941525, position (cm) = (-2.36057,8.27707,200), weight = 1 + gamma, kinetic energy (MeV) = 3.09271, position (cm) = (2.80951,3.82921,200), weight = 1 + gamma, kinetic energy (MeV) = 0.12748, position (cm) = (-7.55779,8.90692,200), weight = 1 + gamma, kinetic energy (MeV) = 4.58592, position (cm) = (-5.78266,-8.71936,200), weight = 1 + gamma, kinetic energy (MeV) = 5.74073, position (cm) = (-5.03016,7.29524,200), weight = 1 + gamma, kinetic energy (MeV) = 0.048308, position (cm) = (12.4862,-0.705965,200), weight = 1 + gamma, kinetic energy (MeV) = 4.85042, position (cm) = (1.6743,0.843434,200), weight = 1 + gamma, kinetic energy (MeV) = 0.110848, position (cm) = (2.05594,-3.39941,200), weight = 1 + gamma, kinetic energy (MeV) = 4.14892, position (cm) = (1.29405,2.60771,200), weight = 1 + gamma, kinetic energy (MeV) = 0.293881, position (cm) = (1.63071,-5.2939,200), weight = 1 + gamma, kinetic energy (MeV) = 4.78289, position (cm) = (-0.734233,9.71913,200), weight = 1 + gamma, kinetic energy (MeV) = 0.169842, position (cm) = (-14.4758,19.5567,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0788134, position (cm) = (11.6413,-24.3496,200), weight = 1 + gamma, kinetic energy (MeV) = 1.26721, position (cm) = (-8.84064,-9.45063,200), weight = 1 + gamma, kinetic energy (MeV) = 0.130784, position (cm) = (14.4145,4.84367,200), weight = 1 + gamma, kinetic energy (MeV) = 0.175651, position (cm) = (-8.00593,-6.36614,200), weight = 1 + gamma, kinetic energy (MeV) = 0.302983, position (cm) = (-5.24945,-7.41025,200), weight = 1 + gamma, kinetic energy (MeV) = 0.139852, position (cm) = (19.0685,27.8766,200), weight = 1 + gamma, kinetic energy (MeV) = 0.72851, position (cm) = (2.96207,-2.00457,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0812794, position (cm) = (-1.55366,-5.67058,200), weight = 1 + gamma, kinetic energy (MeV) = 0.181059, position (cm) = (-2.26728,-2.39963,200), weight = 1 + gamma, kinetic energy (MeV) = 1.32218, position (cm) = (-2.56531,-0.144161,200), weight = 1 + gamma, kinetic energy (MeV) = 0.117307, position (cm) = (7.42054,-8.59708,200), weight = 1 + gamma, kinetic energy (MeV) = 0.101357, position (cm) = (4.78565,6.73764,200), weight = 1 + gamma, kinetic energy (MeV) = 10.6779, position (cm) = (1.80763,-2.69871,200), weight = 1 + gamma, kinetic energy (MeV) = 0.459279, position (cm) = (-6.49041,-10.7212,200), weight = 1 + gamma, kinetic energy (MeV) = 0.475162, position (cm) = (-3.71592,-8.93392,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0651561, position (cm) = (4.07018,-3.82338,200), weight = 1 + gamma, kinetic energy (MeV) = 0.233208, position (cm) = (4.72354,-2.98892,200), weight = 1 + gamma, kinetic energy (MeV) = 13.1069, position (cm) = (0.865726,-7.03931,200), weight = 1 + gamma, kinetic energy (MeV) = 0.266677, position (cm) = (4.99225,-3.93997,200), weight = 1 + gamma, kinetic energy (MeV) = 4.64871, position (cm) = (0.97496,-4.76439,200), weight = 1 + gamma, kinetic energy (MeV) = 2.83892, position (cm) = (-4.14816,7.1012,200), weight = 1 + gamma, kinetic energy (MeV) = 0.661, position (cm) = (12.7999,1.55812,200), weight = 1 + e-, kinetic energy (MeV) = 1.29205, position (cm) = (12.9274,1.54751,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0999913, position (cm) = (12.924,1.5691,200), weight = 1 + gamma, kinetic energy (MeV) = 7.39637, position (cm) = (-8.82182,-4.81161,200), weight = 1 + gamma, kinetic energy (MeV) = 5.23475, position (cm) = (-14.0276,1.44357,200), weight = 1 + gamma, kinetic energy (MeV) = 0.17074, position (cm) = (4.58054,0.955043,200), weight = 1 + gamma, kinetic energy (MeV) = 17.1354, position (cm) = (-2.30286,-12.6314,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0658203, position (cm) = (-2.2184,-13.1314,200), weight = 1 + gamma, kinetic energy (MeV) = 10.7305, position (cm) = (1.42709,19.5113,200), weight = 1 + gamma, kinetic energy (MeV) = 0.31865, position (cm) = (-16.062,30.0981,200), weight = 1 + gamma, kinetic energy (MeV) = 1.62862, position (cm) = (-20.9626,26.8481,200), weight = 1 + gamma, kinetic energy (MeV) = 1.60944, position (cm) = (-6.64402,38.4627,200), weight = 1 + gamma, kinetic energy (MeV) = 21.9617, position (cm) = (-8.10873,-2.96684,200), weight = 1 + gamma, kinetic energy (MeV) = 145.086, position (cm) = (-3.023,-0.532562,200), weight = 1 + gamma, kinetic energy (MeV) = 9.95689, position (cm) = (11.2755,1.48797,200), weight = 1 + gamma, kinetic energy (MeV) = 0.101331, position (cm) = (-2.99826,5.04658,200), weight = 1 + gamma, kinetic energy (MeV) = 0.057773, position (cm) = (0.2784,-17.4032,200), weight = 1 + gamma, kinetic energy (MeV) = 2.55062, position (cm) = (-3.41321,-1.27436,200), weight = 1 + gamma, kinetic energy (MeV) = 3.33676, position (cm) = (-24.2246,9.6441,200), weight = 1 + gamma, kinetic energy (MeV) = 0.169188, position (cm) = (-48.7939,-21.9116,200), weight = 1 + gamma, kinetic energy (MeV) = 3.32471, position (cm) = (-17.4937,2.49538,200), weight = 1 + gamma, kinetic energy (MeV) = 8.41929, position (cm) = (3.71451,9.91113,200), weight = 1 + gamma, kinetic energy (MeV) = 0.119829, position (cm) = (2.2805,6.90079,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0861803, position (cm) = (9.87515,-0.298217,200), weight = 1 + gamma, kinetic energy (MeV) = 1.02289, position (cm) = (22.395,10.6379,200), weight = 1 + gamma, kinetic energy (MeV) = 0.117555, position (cm) = (25.6563,3.82884,200), weight = 1 + gamma, kinetic energy (MeV) = 1.34536, position (cm) = (-1.66928,-20.4245,200), weight = 1 + gamma, kinetic energy (MeV) = 1.04019, position (cm) = (-17.6113,4.89589,200), weight = 1 + gamma, kinetic energy (MeV) = 5.55471, position (cm) = (0.509994,-1.35897,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0665076, position (cm) = (13.3903,-1.61933,200), weight = 1 + gamma, kinetic energy (MeV) = 9.38609, position (cm) = (12.2282,-6.33509,200), weight = 1 + gamma, kinetic energy (MeV) = 2.34221, position (cm) = (0.0225331,-5.44775,200), weight = 1 + gamma, kinetic energy (MeV) = 6.70378, position (cm) = (0.592603,0.149282,200), weight = 1 + gamma, kinetic energy (MeV) = 6.57895, position (cm) = (0.0783378,-1.67029,200), weight = 1 + gamma, kinetic energy (MeV) = 0.34069, position (cm) = (-5.27813,-0.502836,200), weight = 1 + gamma, kinetic energy (MeV) = 1.78136, position (cm) = (-1.18573,2.25333,200), weight = 1 + gamma, kinetic energy (MeV) = 0.510999, position (cm) = (-1.22339,3.69836,200), weight = 1 + gamma, kinetic energy (MeV) = 0.929541, position (cm) = (-0.965933,3.09468,200), weight = 1 + gamma, kinetic energy (MeV) = 10.4265, position (cm) = (-2.03659,1.02711,200), weight = 1 + gamma, kinetic energy (MeV) = 0.199883, position (cm) = (1.18566,11.9884,200), weight = 1 + gamma, kinetic energy (MeV) = 0.138352, position (cm) = (-5.09605,-1.12955,200), weight = 1 + gamma, kinetic energy (MeV) = 17.5155, position (cm) = (-2.80656,-1.32622,200), weight = 1 + gamma, kinetic energy (MeV) = 0.725546, position (cm) = (8.38477,4.9425,200), weight = 1 + gamma, kinetic energy (MeV) = 0.347876, position (cm) = (0.945822,3.37364,200), weight = 1 + gamma, kinetic energy (MeV) = 0.465993, position (cm) = (-5.24399,19.27,200), weight = 1 + gamma, kinetic energy (MeV) = 1.24619, position (cm) = (1.45604,0.738626,200), weight = 1 + gamma, kinetic energy (MeV) = 0.315738, position (cm) = (1.24469,1.18214,200), weight = 1 + gamma, kinetic energy (MeV) = 0.184986, position (cm) = (6.7274,8.48149,200), weight = 1 + e-, kinetic energy (MeV) = 0.912071, position (cm) = (10.9405,-5.93428,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0836866, position (cm) = (11.4708,3.40383,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0582402, position (cm) = (-4.96541,4.11639,200), weight = 1 + gamma, kinetic energy (MeV) = 0.245422, position (cm) = (-0.134418,-1.06299,200), weight = 1 + gamma, kinetic energy (MeV) = 7.02271, position (cm) = (1.97429,-2.33516,200), weight = 1 + gamma, kinetic energy (MeV) = 8.03777, position (cm) = (1.59077,-2.83863,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0498193, position (cm) = (-0.524796,6.64645,200), weight = 1 + gamma, kinetic energy (MeV) = 0.472881, position (cm) = (-0.872603,12.0506,200), weight = 1 + gamma, kinetic energy (MeV) = 7.43185, position (cm) = (-4.16865,15.4166,200), weight = 1 + gamma, kinetic energy (MeV) = 4.18357, position (cm) = (23.0755,0.698191,200), weight = 1 + gamma, kinetic energy (MeV) = 6.1158, position (cm) = (2.70822,13.6437,200), weight = 1 + gamma, kinetic energy (MeV) = 18.1896, position (cm) = (-1.42998,5.26373,200), weight = 1 + gamma, kinetic energy (MeV) = 12.6619, position (cm) = (-0.733581,-7.31695,200), weight = 1 + gamma, kinetic energy (MeV) = 3.63059, position (cm) = (6.74548,-19.9815,200), weight = 1 + gamma, kinetic energy (MeV) = 3.5515, position (cm) = (-10.5892,10.3086,200), weight = 1 + gamma, kinetic energy (MeV) = 0.809589, position (cm) = (-0.589994,-2.00724,200), weight = 1 + gamma, kinetic energy (MeV) = 11.2486, position (cm) = (-11.8735,2.55884,200), weight = 1 + gamma, kinetic energy (MeV) = 2.34448, position (cm) = (-2.79769,15.6579,200), weight = 1 + gamma, kinetic energy (MeV) = 30.0052, position (cm) = (-3.37262,2.25484,200), weight = 1 + gamma, kinetic energy (MeV) = 1.28576, position (cm) = (-5.4581,1.96695,200), weight = 1 + gamma, kinetic energy (MeV) = 12.0086, position (cm) = (-5.17753,-1.74415,200), weight = 1 + gamma, kinetic energy (MeV) = 2.9219, position (cm) = (-4.95071,-7.99025,200), weight = 1 + gamma, kinetic energy (MeV) = 0.301882, position (cm) = (-3.24124,-2.30886,200), weight = 1 + gamma, kinetic energy (MeV) = 11.6951, position (cm) = (-6.98767,4.12684,200), weight = 1 + gamma, kinetic energy (MeV) = 0.100573, position (cm) = (-7.42774,0.35603,200), weight = 1 + gamma, kinetic energy (MeV) = 1.37419, position (cm) = (-5.87759,-0.450348,200), weight = 1 + gamma, kinetic energy (MeV) = 3.3137, position (cm) = (8.27573,15.1605,200), weight = 1 + e+, kinetic energy (MeV) = 15.1378, position (cm) = (-1.91788,1.02473,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0866173, position (cm) = (-1.91725,1.02324,200), weight = 1 + gamma, kinetic energy (MeV) = 2.28346, position (cm) = (-1.90449,0.991443,200), weight = 1 + gamma, kinetic energy (MeV) = 1.9147, position (cm) = (0.436417,8.82797,200), weight = 1 + gamma, kinetic energy (MeV) = 6.25795, position (cm) = (-3.87832,2.1227,200), weight = 1 + gamma, kinetic energy (MeV) = 0.25063, position (cm) = (8.39797,20.5941,200), weight = 1 + gamma, kinetic energy (MeV) = 0.256466, position (cm) = (-15.7581,10.6257,200), weight = 1 + gamma, kinetic energy (MeV) = 19.0795, position (cm) = (1.21225,-2.81158,200), weight = 1 + gamma, kinetic energy (MeV) = 0.235909, position (cm) = (-4.07771,-3.01073,200), weight = 1 + gamma, kinetic energy (MeV) = 0.464307, position (cm) = (0.00414225,-1.46039,200), weight = 1 + gamma, kinetic energy (MeV) = 4.77444, position (cm) = (0.727224,-0.787539,200), weight = 1 + gamma, kinetic energy (MeV) = 1.47256, position (cm) = (1.26165,-1.5446,200), weight = 1 + gamma, kinetic energy (MeV) = 5.05144, position (cm) = (17.8763,8.58627,200), weight = 1 + gamma, kinetic energy (MeV) = 11.3915, position (cm) = (3.45446,1.20528,200), weight = 1 + gamma, kinetic energy (MeV) = 12.9522, position (cm) = (-9.24182,7.15344,200), weight = 1 + gamma, kinetic energy (MeV) = 0.18139, position (cm) = (-5.50107,8.0882,200), weight = 1 + gamma, kinetic energy (MeV) = 6.40555, position (cm) = (-6.45275,5.093,200), weight = 1 + gamma, kinetic energy (MeV) = 0.292783, position (cm) = (1.97507,9.14881,200), weight = 1 + gamma, kinetic energy (MeV) = 0.174757, position (cm) = (-1.02649,8.02889,200), weight = 1 + gamma, kinetic energy (MeV) = 0.0903442, position (cm) = (-1.40136,9.81162,200), weight = 1 + gamma, kinetic energy (MeV) = 3.27741, position (cm) = (-1.9394,7.60934,200), weight = 1 + gamma, kinetic energy (MeV) = 0.954397, position (cm) = (3.18169,4.60895,200), weight = 1 + gamma, kinetic energy (MeV) = 1.60431, position (cm) = (-34.727,-24.9664,200), weight = 1 + gamma, kinetic energy (MeV) = 0.385277, position (cm) = (-7.73264,-8.54435,200), weight = 1 + gamma, kinetic energy (MeV) = 0.902251, position (cm) = (3.90331,2.4787,200), weight = 1 + e-, kinetic energy (MeV) = 4.6889, position (cm) = (4.25751,5.75719,200), weight = 1 + gamma, kinetic energy (MeV) = 0.462197, position (cm) = (12.3742,11.9817,200), weight = 1 + gamma, kinetic energy (MeV) = 16.8558, position (cm) = (6.45755,7.37783,200), weight = 1 + gamma, kinetic energy (MeV) = 2.87787, position (cm) = (11.0633,17.4659,200), weight = 1 Graphics systems deleted. Visualization Manager deleting... diff --git a/examples/extended/biasing/ReverseMC01/History b/examples/extended/biasing/ReverseMC01/History index 675c50071c9..8d87a86035c 100644 --- a/examples/extended/biasing/ReverseMC01/History +++ b/examples/extended/biasing/ReverseMC01/History @@ -4,6 +4,8 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2022-12-14 Ben Morgan (ReverseMC01-V11-01-00) +- Remove inclusion of unneeded and now obsolete G4strstreambuf header ## 2021-12-10 Ben Morgan (ReverseMC01-V11-00-00) - Change to new Markdown History format diff --git a/examples/extended/biasing/ReverseMC01/include/RMC01AnalysisManager.hh b/examples/extended/biasing/ReverseMC01/include/RMC01AnalysisManager.hh index 816e71ae975..1890f6b7347 100644 --- a/examples/extended/biasing/ReverseMC01/include/RMC01AnalysisManager.hh +++ b/examples/extended/biasing/ReverseMC01/include/RMC01AnalysisManager.hh @@ -55,7 +55,6 @@ #define RMC01AnalysisManager_HH #include"G4ios.hh" -#include"G4strstreambuf.hh" #include #include"globals.hh" #include diff --git a/examples/extended/biasing/ReverseMC01/run_adjoint_simulation_electron.out b/examples/extended/biasing/ReverseMC01/run_adjoint_simulation_electron.out index c6fd098a489..c2f507bab3b 100644 --- a/examples/extended/biasing/ReverseMC01/run_adjoint_simulation_electron.out +++ b/examples/extended/biasing/ReverseMC01/run_adjoint_simulation_electron.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -42,7 +42,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -410,7 +412,7 @@ nb event 175000 Run terminated. Run Summary Run Aborted after 175200 events processed. - User=70.140000s Real=70.784642s Sys=0.080000s + User=61.180000s Real=72.553937s Sys=0.170000s Results of reverse/adjoint simulation! normalised edep [MeV] = 0.0016474 error[MeV] = 1.64738e-05 diff --git a/examples/extended/common/common.out b/examples/extended/common/common.out index f72a7f0b594..799ebdfa72f 100644 --- a/examples/extended/common/common.out +++ b/examples/extended/common/common.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -42,7 +42,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -114,7 +116,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000314s Sys=0.000000s + User=0.000000s Real=0.000272s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. diff --git a/examples/extended/electromagnetic/.README.txt b/examples/extended/electromagnetic/.README.txt index dfc3ada95aa..010a6065717 100644 --- a/examples/extended/electromagnetic/.README.txt +++ b/examples/extended/electromagnetic/.README.txt @@ -59,6 +59,8 @@ | Transition radiation | Em8 | |-----------------------------------------------------------------------| | Photo-absorption-ionization model | Em10 | + |-----------------------------------------------------------------------| + | Gamma Conversion Bethe - Heitler 5D model | Em15 | ------------------------------------------------------------------------- \endverbatim @@ -106,8 +108,7 @@ - \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 ExampleTestEm15 TestEm15 \endlink - compute and plot final state of Multiple Scattering or Gamma Conversion as an isolated process - \link ExampleTestEm16 TestEm16 \endlink - simulation of synchrotron radiation diff --git a/examples/extended/electromagnetic/History b/examples/extended/electromagnetic/History index e0aae5855ed..a6fb8f88448 100644 --- a/examples/extended/electromagnetic/History +++ b/examples/extended/electromagnetic/History @@ -4,6 +4,9 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2022-12-15 Igor Semeniouk (electromagnetic-V11-01-00) + - README, .README.txt + - Update TestEm15 short description add GC entry to table ## 2021-12-10 Ben Morgan (electromagnetic-V11-00-00) - Change to new Markdown History format diff --git a/examples/extended/electromagnetic/README b/examples/extended/electromagnetic/README index b6d75ed5c1b..96ef65a7297 100644 --- a/examples/extended/electromagnetic/README +++ b/examples/extended/electromagnetic/README @@ -60,6 +60,8 @@ | Transition radiation | Em8 | |-----------------------------------------------------------------------| | Photo-absorption-ionization model | Em10 | + |-----------------------------------------------------------------------| + | Gamma Conversion Bethe - Heitler 5D model | Em15 | ------------------------------------------------------------------------- @@ -107,8 +109,8 @@ 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 + TestEm15 - compute and plot final state of Multiple Scattering + or Gamma Conversion as an isolated process TestEm16 - simulation of synchrotron radiation diff --git a/examples/extended/electromagnetic/TestEm0/.README.txt b/examples/extended/electromagnetic/TestEm0/.README.txt index 71fcb1f7caf..6640204fe3c 100644 --- a/examples/extended/electromagnetic/TestEm0/.README.txt +++ b/examples/extended/electromagnetic/TestEm0/.README.txt @@ -30,6 +30,9 @@ Idle> /run/beamOn The last command triggers BuildPhysicsTable() and executes the program. + Macros provided in this example: + - muon.mac: muon incident + - ion.mac: generic ion incident \section TestEm0_s1 DirectAccess diff --git a/examples/extended/electromagnetic/TestEm0/CMakeLists.txt b/examples/extended/electromagnetic/TestEm0/CMakeLists.txt index fbc865f134f..8cf33eaaa0c 100644 --- a/examples/extended/electromagnetic/TestEm0/CMakeLists.txt +++ b/examples/extended/electromagnetic/TestEm0/CMakeLists.txt @@ -36,7 +36,7 @@ target_link_libraries(DirectAccess ${Geant4_LIBRARIES} ) # relies on these scripts being in the current working directory. # set(TestEm0_SCRIPTS - TestEm0.in TestEm0.out muon.mac + TestEm0.in TestEm0.out ion.mac muon.mac ) foreach(_script ${TestEm0_SCRIPTS}) diff --git a/examples/extended/electromagnetic/TestEm0/DirectAccess.out b/examples/extended/electromagnetic/TestEm0/DirectAccess.out new file mode 100644 index 00000000000..308a7224f86 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm0/DirectAccess.out @@ -0,0 +1,121 @@ + +***** Table : Nb of materials = 1 ***** + + Material: G4_Fe density: 7.874 g/cm3 RadL: 1.757 cm Nucl.Int.Length: 16.990 cm + Imean: 286.000 eV temperature: 293.15 K pressure: 1.00 atm + + ---> Element: Fe (Fe) Z = 26.0 N = 56 A = 55.845 g/mole + ---> Isotope: Fe54 Z = 26 N = 54 A = 53.94 g/mole abundance: 5.845 % + ---> Isotope: Fe56 Z = 26 N = 56 A = 55.93 g/mole abundance: 91.754 % + ---> Isotope: Fe57 Z = 26 N = 57 A = 56.94 g/mole abundance: 2.119 % + ---> Isotope: Fe58 Z = 26 N = 58 A = 57.93 g/mole abundance: 0.282 % + ElmMassFraction: 100.00 % ElmAbundance 100.00 % + + + + + #### Gamma : CrossSectionPerAtom and MeanFreePath for G4_Fe + + Energy PhotoElec Compton Conversion PhotoElec Compton Conversion + + 1.01 MeV 31.5206 mbarn 5.50395 barn 0 pbarn 3.73632 m 2.13976 cm 5.82593e+288 pc + 1.11 MeV 26.1169 mbarn 5.25115 barn 1.19069 mbarn 4.50939 m 2.24277 cm 98.9097 m + 1.21 MeV 22.1214 mbarn 5.02506 barn 5.43424 mbarn 5.32386 m 2.34368 cm 21.6721 m + 1.31 MeV 19.0741 mbarn 4.82133 barn 12.7528 mbarn 6.17439 m 2.44271 cm 9.23494 m + 1.41 MeV 16.6897 mbarn 4.63654 barn 23.1463 mbarn 7.0565 m 2.54007 cm 5.08812 m + 1.51 MeV 14.7834 mbarn 4.46798 barn 36.512 mbarn 7.96645 m 2.63589 cm 3.22554 m + 1.61 MeV 13.2312 mbarn 4.31345 barn 51.7366 mbarn 8.90102 m 2.73033 cm 2.27636 m + 1.71 MeV 11.9473 mbarn 4.17114 barn 69.0718 mbarn 9.85751 m 2.82348 cm 1.70505 m + 1.81 MeV 10.8709 mbarn 4.03955 barn 88.012 mbarn 10.8336 m 2.91545 cm 1.33813 m + 1.91 MeV 9.95761 mbarn 3.91745 barn 108.167 mbarn 11.8273 m 3.00632 cm 1.08879 m + + #### e+ annihilation : CrossSectionPerAtom and MeanFreePath for G4_Fe + + Energy e+ annihil e+ annihil + + 1.01 MeV 4.44752 barn 2.64802 cm + 1.11 MeV 4.23495 barn 2.78094 cm + 1.21 MeV 4.04467 barn 2.91176 cm + 1.31 MeV 3.87306 barn 3.04077 cm + 1.41 MeV 3.71732 barn 3.16817 cm + 1.51 MeV 3.5752 barn 3.29411 cm + 1.61 MeV 3.4449 barn 3.41871 cm + 1.71 MeV 3.32492 barn 3.54207 cm + 1.81 MeV 3.21404 barn 3.66427 cm + 1.91 MeV 3.11121 barn 3.78538 cm + + ####electron: CrossSection, MeanFreePath and StoppingPower for G4_Fe Energy cut = 100 keV + + Energy ionization bremsstra ionization bremsstra ionization bremsstra + + 1.01 MeV 58.6857 barn -nan km2 2.00681 mm 1.11963 cm 9.25654 MeV/cm 72.8959 keV/cm + 11.01 MeV 65.8351 barn 10.5188 barn 1.78888 mm 3.4444 mm 9.301 MeV/cm 80.1401 keV/cm + 21.01 MeV 66.0784 barn 34.192 barn 1.7823 mm 2.85591 mm 9.46881 MeV/cm 79.1689 keV/cm + 31.01 MeV 66.1546 barn 41.2377 barn 1.78024 mm 2.60145 mm 9.54968 MeV/cm 77.5209 keV/cm + 41.01 MeV 66.191 barn 45.2713 barn 1.77926 mm 2.44404 mm 9.5979 MeV/cm 76.1843 keV/cm + 51.01 MeV 66.2121 barn 48.187 barn 1.7787 mm 2.33558 mm 9.63003 MeV/cm 74.7733 keV/cm + 61.01 MeV 66.2258 barn 50.4249 barn 1.77833 mm 2.25293 mm 9.65294 MeV/cm 73.4943 keV/cm + 71.01 MeV 66.2353 barn 52.2747 barn 1.77807 mm 2.18867 mm 9.67006 MeV/cm 72.1716 keV/cm + 81.01 MeV 66.2424 barn 53.8095 barn 1.77788 mm 2.13592 mm 9.68328 MeV/cm 70.8773 keV/cm + 91.01 MeV 66.2479 barn 55.1384 barn 1.77774 mm 2.09162 mm 9.69377 MeV/cm 69.6192 keV/cm + 101.01 MeV 66.2521 barn 56.3063 barn 1.77762 mm 2.05363 mm 9.70224 MeV/cm 68.3818 keV/cm + + #### proton : CrossSection, MeanFreePath and StoppingPower for G4_Fe Energy cut = 100 keV + + Energy ionization ionization ionization + + 1.01 MeV 0 pbarn 5.82593e+288 pc 1.04362 GeV/cm + 11.01 MeV 0 pbarn 5.82593e+288 pc 205.594 MeV/cm + 21.01 MeV 0 pbarn 5.82593e+288 pc 127.911 MeV/cm + 31.01 MeV 0 pbarn 5.82593e+288 pc 95.2497 MeV/cm + 41.01 MeV 0 pbarn 5.82593e+288 pc 77.0087 MeV/cm + 51.01 MeV 73.4715 barn 1.60295 mm 64.5858 MeV/cm + 61.01 MeV 136.191 barn 864.75 um 55.6733 MeV/cm + 71.01 MeV 164.26 barn 716.981 um 49.1171 MeV/cm + 81.01 MeV 176.146 barn 668.601 um 44.0715 MeV/cm + 91.01 MeV 179.973 barn 654.383 um 40.097 MeV/cm + 101.01 MeV 179.641 barn 655.593 um 36.9279 MeV/cm + + #### proton : low energy model (Bragg) Energy cut = 10 keV + + Energy ionization ionization ionization + + 1.1 keV 0 pbarn 5.82593e+288 pc 310.766 MeV/cm + 301.1 keV 0 pbarn 5.82593e+288 pc 1.93398 GeV/cm + 601.1 keV 0 pbarn 5.82593e+288 pc 1.36403 GeV/cm + 901.1 keV 0 pbarn 5.82593e+288 pc 1.09453 GeV/cm + 1.2011 MeV 0 pbarn 5.82593e+288 pc 929.077 MeV/cm + 1.5011 MeV 0 pbarn 5.82593e+288 pc 814.594 MeV/cm + 1.8011 MeV 0 pbarn 5.82593e+288 pc 727.03 MeV/cm + + ####muon: CrossSection and MeanFreePath for G4_Fe Energy cut = 10 MeV + + Energy ionization bremsstra pair_prod ionization bremsstra pair_prod + + 1.01 GeV 457.217 mbarn 694.657 mubarn 685.688 mubarn 25.7582 cm 169.539 m 171.756 m + 11.01 GeV 675.132 mbarn 2.02862 mbarn 26.2282 mbarn 17.4442 cm 58.0548 m 4.49025 m + 21.01 GeV 684.489 mbarn 2.41403 mbarn 46.3852 mbarn 17.2057 cm 48.786 m 2.53898 m + 31.01 GeV 688.689 mbarn 2.63939 mbarn 62.3763 mbarn 17.1008 cm 44.6205 m 1.88808 m + 41.01 GeV 691.358 mbarn 2.79745 mbarn 75.7828 mbarn 17.0348 cm 42.0994 m 1.55406 m + 51.01 GeV 693.309 mbarn 2.91866 mbarn 87.4123 mbarn 16.9868 cm 40.3511 m 1.34731 m + 61.01 GeV 694.846 mbarn 3.01671 mbarn 97.7334 mbarn 16.9492 cm 39.0396 m 1.20502 m + 71.01 GeV 696.113 mbarn 3.09883 mbarn 107.045 mbarn 16.9184 cm 38.0051 m 1.10021 m + 81.01 GeV 697.191 mbarn 3.16935 mbarn 115.548 mbarn 16.8922 cm 37.1594 m 1.01924 m + 91.01 GeV 698.129 mbarn 3.23108 mbarn 123.39 mbarn 16.8695 cm 36.4495 m 95.446 cm + 101.01 GeV 698.96 mbarn 3.28584 mbarn 130.678 mbarn 16.8495 cm 35.8421 m 90.1234 cm + + ####muon: StoppingPower for G4_Fe Energy cut = 10 MeV + + Energy ionization bremsstra pair_prod + + 1.01 GeV 11.6473 MeV/cm 276.185 eV/cm 522.435 eV/cm + 11.01 GeV 12.2762 MeV/cm 346.158 eV/cm 5.01672 keV/cm + 21.01 GeV 12.3502 MeV/cm 347.718 eV/cm 6.63066 keV/cm + 31.01 GeV 12.3789 MeV/cm 348.061 eV/cm 7.62215 keV/cm + 41.01 GeV 12.3936 MeV/cm 348.191 eV/cm 8.33952 keV/cm + 51.01 GeV 12.4022 MeV/cm 348.254 eV/cm 8.90194 keV/cm + 61.01 GeV 12.4077 MeV/cm 348.29 eV/cm 9.36461 keV/cm + 71.01 GeV 12.4114 MeV/cm 348.313 eV/cm 9.75763 keV/cm + 81.01 GeV 12.4141 MeV/cm 348.328 eV/cm 10.0993 keV/cm + 91.01 GeV 12.4161 MeV/cm 348.339 eV/cm 10.4014 keV/cm + 101.01 GeV 12.4176 MeV/cm 348.347 eV/cm 10.6723 keV/cm diff --git a/examples/extended/electromagnetic/TestEm0/History b/examples/extended/electromagnetic/TestEm0/History index dfb07b74fab..0ad0ffd8fe5 100644 --- a/examples/extended/electromagnetic/TestEm0/History +++ b/examples/extended/electromagnetic/TestEm0/History @@ -4,6 +4,11 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-03-11 Michel Maire (testem0-V11-01-00) +- revision of all headers +- RunAction: restore output format +- new macro ion.mac + ## 2021-12-10 Ben Morgan (testem0-V11-00-00) - Change to new Markdown History format diff --git a/examples/extended/electromagnetic/TestEm0/README b/examples/extended/electromagnetic/TestEm0/README index 2e90b845fcf..65ba04701e0 100644 --- a/examples/extended/electromagnetic/TestEm0/README +++ b/examples/extended/electromagnetic/TestEm0/README @@ -29,6 +29,9 @@ The last command triggers BuildPhysicsTable() and executes the program. + Macros provided in this example: + - muon.mac: muon incident + - ion.mac: generic ion incident DirectAccess ------------ diff --git a/examples/extended/electromagnetic/TestEm0/TestEm0.out b/examples/extended/electromagnetic/TestEm0/TestEm0.out index 4df4a89c3ad..bd64a008f3d 100644 --- a/examples/extended/electromagnetic/TestEm0/TestEm0.out +++ b/examples/extended/electromagnetic/TestEm0/TestEm0.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -144,12 +144,11 @@ Index : 0 used in the geometry : Yes cross section per atom : 1.72494 barn 11.0976 barn 0 pbarn 774.227 mbarn 13.5968 barn - - compCrossSectionPerVolume: 0.0761496 cm^-1 0.489918 cm^-1 0 cm^-1 0.0341792 cm^-1 0.600247 cm^-1 - cross section per volume : 0.076168 cm^-1 0.489918 cm^-1 0 cm^-1 0.0341792 cm^-1 0.600265 cm^-1 + compCrossSectionPerVolume: 0.0761496 cm^-1 0.489918 cm^-1 0 cm^-1 0.0341792 cm^-1 0.600247 cm^-1 + cross section per volume : 0.076168 cm^-1 0.489918 cm^-1 0 cm^-1 0.0341792 cm^-1 0.600265 cm^-1 cross section per mass : 1.43092 mm2/g 9.20379 mm2/g 0 um2/mg 642.104 um2/mg 11.2768 mm2/g - mean free path : 13.1289 cm 2.04116 cm 5.82593e+288 pc 29.2575 cm 1.66593 cm + mean free path : 13.1289 cm 2.04116 cm 5.82593e+288 pc 29.2575 cm 1.66593 cm (g/cm2) : 69.885 g/cm2 10.8651 g/cm2 2.88022e+285 kg/cm2 155.738 g/cm2 8.86775 g/cm2 ----------------------------------------------------------- @@ -157,7 +156,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000362s Sys=0.000000s + User=0.000000s Real=0.000393s Sys=0.000000s Material: Water density: 1.000 g/cm3 RadL: 36.092 cm Nucl.Int.Length: 75.356 cm Imean: 78.000 eV temperature: 293.15 K pressure: 1.00 atm @@ -200,20 +199,19 @@ Index : 1 used in the geometry : Yes Max_energy _transferable : 5 MeV (2.53529 cm ) processes : eIoni eBrem ePairProd total - - compCrossSectionPerVolume: 0.994823 cm^-1 0.325194 cm^-1 0 cm^-1 1.32002 cm^-1 - cross section per volume : 0.994823 cm^-1 0.325183 cm^-1 0 cm^-1 1.32001 cm^-1 + compCrossSectionPerVolume: 0.994823 cm^-1 0.325194 cm^-1 0 cm^-1 1.32002 cm^-1 + cross section per volume : 0.994823 cm^-1 0.325183 cm^-1 0 cm^-1 1.32001 cm^-1 cross section per mass : 99.4823 mm2/g 32.5183 mm2/g 0 um2/mg 1.32001 cm2/g - mean free path : 1.0052 cm 3.07519 cm 5.82593e+288 pc 7.57573 mm + mean free path : 1.0052 cm 3.07519 cm 5.82593e+288 pc 7.57573 mm (g/cm2) : 1.0052 g/cm2 3.07519 g/cm2 2.88022e+285 kg/cm2 757.573 mg/cm2 - restricted dE/dx : 1.61327 MeV/cm 25.5407 eV/cm 0 eV/cm 1.6133 MeV/cm - (MeV/g/cm2) : 1.61327 MeV*cm2/g 25.5407 eV*cm2/g 0 eV*cm2/g 1.6133 MeV*cm2/g + restricted dE/dx : 1.61327 MeV/cm 25.5407 eV/cm 0 eV/cm 1.6133 MeV/cm + (MeV/g/cm2) : 1.61327 MeV*cm2/g 25.5407 eV*cm2/g 0 eV*cm2/g 1.6133 MeV*cm2/g - unrestricted dE/dx : 1.99147 MeV/cm 181.698 keV/cm 0 eV/cm 2.17317 MeV/cm - (MeV/g/cm2) : 1.99147 MeV*cm2/g 181.698 keV*cm2/g 0 eV*cm2/g 2.17317 MeV*cm2/g + unrestricted dE/dx : 1.99147 MeV/cm 181.698 keV/cm 0 eV/cm 2.17317 MeV/cm + (MeV/g/cm2) : 1.99147 MeV*cm2/g 181.698 keV*cm2/g 0 eV*cm2/g 2.17317 MeV*cm2/g range from restrict dE/dx: 6.0722 cm ( 6.0722 g/cm2 ) range from full dE/dx : 4.93182 cm ( 4.93182 g/cm2 ) @@ -227,7 +225,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000152s Sys=0.000000s + User=0.000000s Real=0.000161s Sys=0.000000s ================== Deleting memory pools =================== Number of memory pools allocated: 9 of which, static: 0 Dynamic pools deleted: 9 / Total memory freed: 0.012 MB diff --git a/examples/extended/electromagnetic/TestEm0/include/DetectorConstruction.hh b/examples/extended/electromagnetic/TestEm0/include/DetectorConstruction.hh index 9c63ab23488..eedc1423729 100644 --- a/examples/extended/electromagnetic/TestEm0/include/DetectorConstruction.hh +++ b/examples/extended/electromagnetic/TestEm0/include/DetectorConstruction.hh @@ -50,12 +50,11 @@ class DetectorConstruction : public G4VUserDetectorConstruction public: DetectorConstruction(); - virtual ~DetectorConstruction(); + ~DetectorConstruction() override; public: - virtual - G4VPhysicalVolume* Construct(); + G4VPhysicalVolume* Construct() override; void SetMaterial (const G4String&); const @@ -67,11 +66,11 @@ class DetectorConstruction : public G4VUserDetectorConstruction private: - G4VPhysicalVolume* fBox; - G4double fBoxSize; - G4Material* fMaterial; + G4VPhysicalVolume* fBox = nullptr; + G4double fBoxSize = 0.; + G4Material* fMaterial = nullptr; - DetectorMessenger* fDetectorMessenger; + DetectorMessenger* fDetectorMessenger = nullptr; private: diff --git a/examples/extended/electromagnetic/TestEm0/include/DetectorMessenger.hh b/examples/extended/electromagnetic/TestEm0/include/DetectorMessenger.hh index 85946e9018d..907a2f5fdc8 100644 --- a/examples/extended/electromagnetic/TestEm0/include/DetectorMessenger.hh +++ b/examples/extended/electromagnetic/TestEm0/include/DetectorMessenger.hh @@ -47,18 +47,17 @@ class DetectorMessenger: public G4UImessenger public: DetectorMessenger(DetectorConstruction* ); - ~DetectorMessenger(); - - virtual - void SetNewValue(G4UIcommand*, G4String); + ~DetectorMessenger() override; + + void SetNewValue(G4UIcommand*, G4String) override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; - G4UIdirectory* fTestemDir; - G4UIdirectory* fDetDir; - G4UIcmdWithAString* fMaterCmd; + G4UIdirectory* fTestemDir = nullptr; + G4UIdirectory* fDetDir = nullptr; + G4UIcmdWithAString* fMaterCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm0/include/PhysListEmStandard.hh b/examples/extended/electromagnetic/TestEm0/include/PhysListEmStandard.hh index 91c9a48e92e..3f183d81816 100644 --- a/examples/extended/electromagnetic/TestEm0/include/PhysListEmStandard.hh +++ b/examples/extended/electromagnetic/TestEm0/include/PhysListEmStandard.hh @@ -43,16 +43,16 @@ class PhysListEmStandard : public G4VPhysicsConstructor { public: PhysListEmStandard(const G4String& name = "standard"); - ~PhysListEmStandard(); + ~PhysListEmStandard() override = default; public: // This method is dummy for physics - virtual void ConstructParticle() {}; + void ConstructParticle() override {}; // This method will be invoked in the Construct() method. // each physics process will be instantiated and // registered to the process manager of each particle type - virtual void ConstructProcess(); + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm0/include/PhysicsList.hh b/examples/extended/electromagnetic/TestEm0/include/PhysicsList.hh index d5de1fb3ec5..1d727085292 100644 --- a/examples/extended/electromagnetic/TestEm0/include/PhysicsList.hh +++ b/examples/extended/electromagnetic/TestEm0/include/PhysicsList.hh @@ -58,10 +58,10 @@ class PhysicsList: public G4VModularPhysicsList void AddPhysicsList(const G4String& name); private: - G4VPhysicsConstructor* fEmPhysicsList; - G4String fEmName; + G4VPhysicsConstructor* fEmPhysicsList = nullptr; + G4String fEmName = " "; - PhysicsListMessenger* fMessenger; + PhysicsListMessenger* fMessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm0/include/PhysicsListMessenger.hh b/examples/extended/electromagnetic/TestEm0/include/PhysicsListMessenger.hh index b84c4ab8540..44c8e6cccbe 100644 --- a/examples/extended/electromagnetic/TestEm0/include/PhysicsListMessenger.hh +++ b/examples/extended/electromagnetic/TestEm0/include/PhysicsListMessenger.hh @@ -48,17 +48,16 @@ class PhysicsListMessenger: public G4UImessenger public: PhysicsListMessenger(PhysicsList* ); - ~PhysicsListMessenger(); - - virtual - void SetNewValue(G4UIcommand*, G4String); + ~PhysicsListMessenger() override; + + void SetNewValue(G4UIcommand*, G4String) override; private: - PhysicsList* fPhysicsList; + PhysicsList* fPhysicsList = nullptr; - G4UIdirectory* fPhysDir; - G4UIcmdWithAString* fListCmd; + G4UIdirectory* fPhysDir = nullptr; + G4UIcmdWithAString* fListCmd = nullptr; }; diff --git a/examples/extended/electromagnetic/TestEm0/include/PrimaryGeneratorAction.hh b/examples/extended/electromagnetic/TestEm0/include/PrimaryGeneratorAction.hh index 2031524fe56..6ae3b573778 100644 --- a/examples/extended/electromagnetic/TestEm0/include/PrimaryGeneratorAction.hh +++ b/examples/extended/electromagnetic/TestEm0/include/PrimaryGeneratorAction.hh @@ -46,18 +46,17 @@ class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: PrimaryGeneratorAction(DetectorConstruction*); - ~PrimaryGeneratorAction(); + ~PrimaryGeneratorAction() override; public: void SetDefaultKinematic(); - virtual - void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; G4ParticleGun* GetParticleGun() {return fParticleGun;} private: - G4ParticleGun* fParticleGun; - DetectorConstruction* fDetector; + G4ParticleGun* fParticleGun = nullptr; + DetectorConstruction* fDetector = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm0/include/RunAction.hh b/examples/extended/electromagnetic/TestEm0/include/RunAction.hh index 9c2436e6408..a110c78ac76 100644 --- a/examples/extended/electromagnetic/TestEm0/include/RunAction.hh +++ b/examples/extended/electromagnetic/TestEm0/include/RunAction.hh @@ -48,20 +48,20 @@ class RunAction : public G4UserRunAction { public: RunAction(DetectorConstruction*, PrimaryGeneratorAction*); - ~RunAction(); + ~RunAction() override = default; public: - virtual void BeginOfRunAction(const G4Run*); - virtual void EndOfRunAction(const G4Run*); + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; void GetCuts(); void CriticalEnergy(); private: - DetectorConstruction* fDetector; - PrimaryGeneratorAction* fPrimary; - G4double fRangeCut[3]; - G4double fEnergyCut[3]; + DetectorConstruction* fDetector = nullptr; + PrimaryGeneratorAction* fPrimary = nullptr; + G4double fRangeCut[3] = {0., 0., 0.}; + G4double fEnergyCut[3] = {0., 0., 0.}; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm0/ion.mac b/examples/extended/electromagnetic/TestEm0/ion.mac new file mode 100644 index 00000000000..d1740fa3608 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm0/ion.mac @@ -0,0 +1,20 @@ +# +# Macro file for "TestEm0.cc" +# +/control/verbose 0 +/run/verbose 1 +# +/testem/phys/addPhysics local +###/testem/phys/addPhysics emstandard_opt4 +# +/process/em/verbose 0 +# +/run/setCut 1 mm +/run/initialize +# +/testem/det/setMat G4_lH2 +/gun/particle ion +/gun/ion 3 7 +/gun/energy 20 MeV +/run/beamOn +# diff --git a/examples/extended/electromagnetic/TestEm0/src/DetectorConstruction.cc b/examples/extended/electromagnetic/TestEm0/src/DetectorConstruction.cc index 65fc8f45581..b3a3d9c5e12 100644 --- a/examples/extended/electromagnetic/TestEm0/src/DetectorConstruction.cc +++ b/examples/extended/electromagnetic/TestEm0/src/DetectorConstruction.cc @@ -54,8 +54,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorConstruction::DetectorConstruction() -:G4VUserDetectorConstruction(), - fBox(nullptr),fMaterial(nullptr) { fBoxSize = 1*mm; DefineMaterials(); diff --git a/examples/extended/electromagnetic/TestEm0/src/DetectorMessenger.cc b/examples/extended/electromagnetic/TestEm0/src/DetectorMessenger.cc index 5cd91a6c643..5ca384f4992 100644 --- a/examples/extended/electromagnetic/TestEm0/src/DetectorMessenger.cc +++ b/examples/extended/electromagnetic/TestEm0/src/DetectorMessenger.cc @@ -38,9 +38,9 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -DetectorMessenger::DetectorMessenger(DetectorConstruction * Det) -:G4UImessenger(),fDetector(Det),fTestemDir(0),fDetDir(0),fMaterCmd(0) -{ +DetectorMessenger::DetectorMessenger(DetectorConstruction* detector) +:fDetector(detector) +{ fTestemDir = new G4UIdirectory("/testem/"); fTestemDir->SetGuidance("commands specific to this example"); diff --git a/examples/extended/electromagnetic/TestEm0/src/PhysListEmStandard.cc b/examples/extended/electromagnetic/TestEm0/src/PhysListEmStandard.cc index 1162122e052..3c18646947c 100644 --- a/examples/extended/electromagnetic/TestEm0/src/PhysListEmStandard.cc +++ b/examples/extended/electromagnetic/TestEm0/src/PhysListEmStandard.cc @@ -63,7 +63,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysListEmStandard::PhysListEmStandard(const G4String& name) - : G4VPhysicsConstructor(name) +:G4VPhysicsConstructor(name) { G4EmParameters* param = G4EmParameters::Instance(); param->SetDefaults(); @@ -73,11 +73,6 @@ PhysListEmStandard::PhysListEmStandard(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysListEmStandard::~PhysListEmStandard() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysListEmStandard::ConstructProcess() { G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); diff --git a/examples/extended/electromagnetic/TestEm0/src/PhysicsList.cc b/examples/extended/electromagnetic/TestEm0/src/PhysicsList.cc index 66049d78c47..b400392494e 100644 --- a/examples/extended/electromagnetic/TestEm0/src/PhysicsList.cc +++ b/examples/extended/electromagnetic/TestEm0/src/PhysicsList.cc @@ -27,7 +27,6 @@ /// \brief Implementation of the PhysicsList class // // -// //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -93,10 +92,10 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::PhysicsList() : G4VModularPhysicsList(), - fEmPhysicsList(nullptr), fEmName(""), - fMessenger(new PhysicsListMessenger(this)) -{ +PhysicsList::PhysicsList() +{ + fMessenger = new PhysicsListMessenger(this); + // set default cut value SetDefaultCutValue(1.0*mm); diff --git a/examples/extended/electromagnetic/TestEm0/src/PhysicsListMessenger.cc b/examples/extended/electromagnetic/TestEm0/src/PhysicsListMessenger.cc index 529f71af6e1..855032e10af 100644 --- a/examples/extended/electromagnetic/TestEm0/src/PhysicsListMessenger.cc +++ b/examples/extended/electromagnetic/TestEm0/src/PhysicsListMessenger.cc @@ -40,8 +40,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysicsListMessenger::PhysicsListMessenger(PhysicsList* pPhys) -:G4UImessenger(), - fPhysicsList(pPhys),fPhysDir(0),fListCmd(0) +:fPhysicsList(pPhys) { fPhysDir = new G4UIdirectory("/testem/phys/"); fPhysDir->SetGuidance("physics list commands"); diff --git a/examples/extended/electromagnetic/TestEm0/src/PrimaryGeneratorAction.cc b/examples/extended/electromagnetic/TestEm0/src/PrimaryGeneratorAction.cc index 94926d7abc6..883b40d9b1e 100644 --- a/examples/extended/electromagnetic/TestEm0/src/PrimaryGeneratorAction.cc +++ b/examples/extended/electromagnetic/TestEm0/src/PrimaryGeneratorAction.cc @@ -26,10 +26,7 @@ /// \file electromagnetic/TestEm0/src/PrimaryGeneratorAction.cc /// \brief Implementation of the PrimaryGeneratorAction class // -// -// // - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -44,8 +41,8 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PrimaryGeneratorAction::PrimaryGeneratorAction( DetectorConstruction* DC) -:G4VUserPrimaryGeneratorAction(),fParticleGun(0),fDetector(DC) +PrimaryGeneratorAction::PrimaryGeneratorAction( DetectorConstruction* detector) +:fDetector(detector) { fParticleGun = new G4ParticleGun(1); SetDefaultKinematic(); diff --git a/examples/extended/electromagnetic/TestEm0/src/RunAction.cc b/examples/extended/electromagnetic/TestEm0/src/RunAction.cc index 9fa3dd1d018..71190dd6dab 100644 --- a/examples/extended/electromagnetic/TestEm0/src/RunAction.cc +++ b/examples/extended/electromagnetic/TestEm0/src/RunAction.cc @@ -49,14 +49,8 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... RunAction::RunAction(DetectorConstruction* det, PrimaryGeneratorAction* kin) - : G4UserRunAction(), fDetector(det), fPrimary(kin) +:fDetector(det), fPrimary(kin) { } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -RunAction::~RunAction() -{ } - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void RunAction::BeginOfRunAction(const G4Run*) @@ -192,13 +186,13 @@ void RunAction::BeginOfRunAction(const G4Run*) sigma2.push_back(Sigtot/density); //print cross sections - G4cout << "\n \n compCrossSectionPerVolume: "; + G4cout << "\n compCrossSectionPerVolume: "; for (size_t j=0; j 0.) lambda = 1/sigma1[j]; - G4cout << "\t" << std::setw(9) << G4BestUnit( lambda, "Length"); + G4cout << "\t" << std::setw(9) << G4BestUnit( lambda, "Length") << " "; } //mean free path (g/cm2) @@ -252,13 +246,13 @@ void RunAction::BeginOfRunAction(const G4Run*) //print stopping power G4cout << "\n \n restricted dE/dx : "; for (size_t j=0; j<=nproc; ++j) { - G4cout << "\t" << std::setw(14) + G4cout << "\t" << std::setw(9) << G4BestUnit(dedx1[j],"Energy/Length"); } G4cout << "\n (MeV/g/cm2) : "; for (size_t j=0; j<=nproc; ++j) { - G4cout << "\t" << std::setw(14) + G4cout << "\t" << std::setw(9) << G4BestUnit(dedx2[j],"Energy*Surface/Mass"); } dedxtot = 0.; @@ -275,12 +269,12 @@ void RunAction::BeginOfRunAction(const G4Run*) //print stopping power G4cout << "\n \n unrestricted dE/dx : "; for (size_t j=0; j<=nproc; ++j) { - G4cout << "\t" << std::setw(14) << G4BestUnit(dedx1[j],"Energy/Length"); + G4cout << "\t" << std::setw(9) << G4BestUnit(dedx1[j],"Energy/Length"); } G4cout << "\n (MeV/g/cm2) : "; for (size_t j=0; j<=nproc; ++j) { - G4cout << "\t" << std::setw(14) + G4cout << "\t" << std::setw(9) << G4BestUnit(dedx2[j],"Energy*Surface/Mass"); } diff --git a/examples/extended/electromagnetic/TestEm1/.README.txt b/examples/extended/electromagnetic/TestEm1/.README.txt index 854a40ef291..86f9b93c73f 100644 --- a/examples/extended/electromagnetic/TestEm1/.README.txt +++ b/examples/extended/electromagnetic/TestEm1/.README.txt @@ -122,6 +122,7 @@ Idle> exit Macros to be run interactively: - annihil.mac: To visualise 100 MeV e+ annihilation - decayinfly.mac: To visualise decay in fly of N16 + - etaDecay.mac: to visualise decay of eta particle - gammaconversion.mac: To visualise gamma conversion and e+ annihilation - photon.mac: To visualiza p300 keV photon beam - stepMax.mac: to test command /testem/stepMax diff --git a/examples/extended/electromagnetic/TestEm1/CMakeLists.txt b/examples/extended/electromagnetic/TestEm1/CMakeLists.txt index 3841c95df1a..7de49e327e8 100644 --- a/examples/extended/electromagnetic/TestEm1/CMakeLists.txt +++ b/examples/extended/electromagnetic/TestEm1/CMakeLists.txt @@ -40,7 +40,7 @@ target_link_libraries(TestEm1 ${Geant4_LIBRARIES} ${HBOOK_LIBRARIES}) # relies on these scripts being in the current working directory. # set(TestEm1_SCRIPTS - alphaRange.mac annihil.mac brems.mac decayinfly.mac erange.mac gammaconversion.mac + alphaRange.mac annihil.mac brems.mac decayinfly.mac erange.mac etaDecay.mac gammaconversion.mac geantino.mac ionRange.mac photoelec.mac photon.mac radioactive.mac range.mac runs.mac pRange.mac stepMax.mac TestEm1.in TestEm1.out vis.mac ) diff --git a/examples/extended/electromagnetic/TestEm1/History b/examples/extended/electromagnetic/TestEm1/History index 1536ab5a1bb..24fc411be3a 100644 --- a/examples/extended/electromagnetic/TestEm1/History +++ b/examples/extended/electromagnetic/TestEm1/History @@ -4,6 +4,10 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-03-19 Michel Maire (testem1-V11-01-00) +- new macro: etaDecay.mac +- PhysicsList::AddRadioactiveDecay(): set ARM false +- revision of all headers ## 2022-10-31 Vladimir Ivanchenko (testem1-V11-00-04) - PhysicsList::AddRadioactiveDecay(): enable atomic de-excitation diff --git a/examples/extended/electromagnetic/TestEm1/README b/examples/extended/electromagnetic/TestEm1/README index 9d03daa780b..d4994bf9e29 100644 --- a/examples/extended/electromagnetic/TestEm1/README +++ b/examples/extended/electromagnetic/TestEm1/README @@ -119,6 +119,7 @@ Macros to be run interactively: - annihil.mac: To visualise 100 MeV e+ annihilation - decayinfly.mac: To visualise decay in fly of N16 + - etaDecay.mac: to visualise decay of eta particle - gammaconversion.mac: To visualise gamma conversion and e+ annihilation - photon.mac: To visualiza p300 keV photon beam - stepMax.mac: to test command /testem/stepMax diff --git a/examples/extended/electromagnetic/TestEm1/TestEm1.out b/examples/extended/electromagnetic/TestEm1/TestEm1.out index 04d6671f727..3352344cd8b 100644 --- a/examples/extended/electromagnetic/TestEm1/TestEm1.out +++ b/examples/extended/electromagnetic/TestEm1/TestEm1.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -120,16 +120,6 @@ Type of electron single scattering model 0 Type of nuclear form-factor 1 Screening factor 1 ======================================================================= -====== Atomic Deexcitation Parameters ======== -======================================================================= -Fluorescence enabled 1 -Directory in G4LEDATA for fluorescence data files fluor -Auger electron cascade enabled 1 -PIXE atomic de-excitation enabled 0 -De-excitation module ignores cuts 1 -Type of PIXE cross section for hadrons Empirical -Type of PIXE cross section for e+- Livermore -======================================================================= # ##/globalField/setValue 0 0 5 tesla # @@ -209,21 +199,6 @@ Type of electron single scattering model 0 Type of nuclear form-factor 1 Screening factor 1 ======================================================================= -====== Atomic Deexcitation Parameters ======== -======================================================================= -Fluorescence enabled 1 -Directory in G4LEDATA for fluorescence data files fluor -Auger electron cascade enabled 1 -PIXE atomic de-excitation enabled 0 -De-excitation module ignores cuts 1 -Type of PIXE cross section for hadrons Empirical -Type of PIXE cross section for e+- Livermore -======================================================================= - -### === Deexcitation model UAtomDeexcitation is activated for 1 region: - DefaultRegionForTheWorld 1 1 0 -### === Auger flag: 1 -### === Ignore cuts flag: 1 phot: for gamma SubType=12 BuildTable=0 LambdaPrime table from 200 keV to 100 TeV in 61 bins @@ -272,7 +247,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -305,7 +280,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -338,7 +313,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -351,7 +326,6 @@ ionIoni: for GenericIon XStype:1 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 1, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -363,12 +337,12 @@ min MeanLife (from G4NuclideTable) 1 ps Max life time (from G4DeexPrecoParameters) 1 ns Internal e- conversion flag 1 Stored internal conversion coefficients 0 -Enabled atomic relaxation mode 1 +Enabled atomic relaxation mode 0 Enable correlated gamma emission 0 Max 2J for sampling of angular correlations 10 -Atomic de-excitation enabled 1 -Auger electron emission enabled 1 -Check EM cuts disabled for atomic de-excitation 1 +Atomic de-excitation enabled 0 +Auger electron emission enabled 0 +Check EM cuts disabled for atomic de-excitation 0 Use Bearden atomic level energies 0 Use ANSTO fluorescence model 0 Threshold for very long decay time at rest 3.171e+10 y @@ -417,7 +391,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -450,7 +424,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -483,7 +457,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -516,7 +490,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -549,7 +523,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -582,7 +556,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -615,7 +589,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -650,31 +624,31 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 2000 - User=1.710000s Real=1.717760s Sys=0.000000s + User=1.150000s Real=1.153828s Sys=0.000000s ======================== run summary ====================== The run is: 2000 e- of 100 MeV through 10 m of Aluminium (density: 2.7 g/cm3 ) - Total energy deposit: 99.817 MeV + Total energy deposit: 99.805 MeV NIEL energy calculated: 0 eV - Nb tracks/event neutral: 26.266 charged: 213.24 - Nb steps/event neutral: 140.46 charged: 279.25 + Nb tracks/event neutral: 25.288 charged: 137.97 + Nb steps/event neutral: 140.29 charged: 203.92 Process calls frequency : - CoulombScat= 1 Rayl= 17869 Transportation= 1803 - annihil= 2770 compt= 210513 conv= 2755 - eBrem= 46487 eIoni= 508883 msc= 349 - phot= 47979 + Rayl= 17934 Transportation= 1891 annihil= 2865 + compt= 212078 conv= 2855 eBrem= 45996 + eIoni= 358593 msc= 373 phot= 45842 + --------------------------------------------------------- Primary particle : - true Range = 11.053 cm rms = 3.8363 cm - proj Range = 9.6034 cm rms = 3.5551 cm - proj/true = 0.86882 - transverse dispersion at end = 1.6103 cm - mass true Range from simulation = 29.844 g/cm2 + true Range = 11.005 cm rms = 3.8141 cm + proj Range = 9.5542 cm rms = 3.5406 cm + proj/true = 0.86817 + transverse dispersion at end = 1.5847 cm + mass true Range from simulation = 29.713 g/cm2 from PhysicsTable (csda range) = 32.101 g/cm2 --------------------------------------------------------- @@ -682,7 +656,7 @@ Run Summary ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={690198723536179998, 579348065020758353, 1232261265139153084, 165787043733624689, 748937011550919510, 879415774404578847, 2110754935832426187, 1748976034684396008, 1365227957530309923, 1135855280823101212, 359509110872997255, 2259881656703777725, 1810625495170997845, 2089662706748706929, 1984193456088473829, 1436347530539347210, 1011961977761377040} counter= 15sumtot= 856356943217880085 +N=17 V[N]={317779713105008277, 1743114184808863783, 1853744490327788949, 1867994546118534698, 1759317440874895583, 372561046307802386, 199835284609250062, 277249706631814727, 423500553688835566, 375850380177904045, 1170986928247446829, 2233640470400443417, 1318521029062620427, 1236994621763870533, 1501231813471218272, 1222164454155121669, 2100905387911886013} counter= 14sumtot= 1528647977953753628 --------------------------------------- # /gun/particle proton @@ -704,7 +678,7 @@ Index : 0 used in the geometry : Yes ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={690198723536179998, 579348065020758353, 1232261265139153084, 165787043733624689, 748937011550919510, 879415774404578847, 2110754935832426187, 1748976034684396008, 1365227957530309923, 1135855280823101212, 359509110872997255, 2259881656703777725, 1810625495170997845, 2089662706748706929, 1984193456088473829, 1436347530539347210, 1011961977761377040} counter= 15sumtot= 856356943217880085 +N=17 V[N]={317779713105008277, 1743114184808863783, 1853744490327788949, 1867994546118534698, 1759317440874895583, 372561046307802386, 199835284609250062, 277249706631814727, 423500553688835566, 375850380177904045, 1170986928247446829, 2233640470400443417, 1318521029062620427, 1236994621763870533, 1501231813471218272, 1222164454155121669, 2100905387911886013} counter= 14sumtot= 1528647977953753628 --------------------------------------- --> Event 0 starts. --> Event 200 starts. @@ -719,28 +693,28 @@ N=17 V[N]={690198723536179998, 579348065020758353, 1232261265139153084, 16578704 Run terminated. Run Summary Number of events processed : 2000 - User=0.070000s Real=0.072415s Sys=0.000000s + User=0.060000s Real=0.062617s Sys=0.000000s ======================== run summary ====================== The run is: 2000 proton of 100 MeV through 10 m of Aluminium (density: 2.7 g/cm3 ) Total energy deposit: 100 MeV - NIEL energy calculated: 168.14 eV + NIEL energy calculated: 167.81 eV - Nb tracks/event neutral: 0 charged: 1.0065 - Nb steps/event neutral: 0 charged: 19.073 + Nb tracks/event neutral: 0 charged: 1.007 + Nb steps/event neutral: 0 charged: 19.081 Process calls frequency : - CoulombScat= 46 NoProcess= 13 hIoni= 38074 - ionIoni= 13 + CoulombScat= 36 NoProcess= 14 hIoni= 38097 + ionIoni= 14 --------------------------------------------------------- Primary particle : - true Range = 3.7109 cm rms = 415.06 um - proj Range = 3.7026 cm rms = 431.69 um - proj/true = 0.99775 - transverse dispersion at end = 1.1267 mm + true Range = 3.7107 cm rms = 419.56 um + proj Range = 3.7026 cm rms = 427.68 um + proj/true = 0.99781 + transverse dispersion at end = 1.0892 mm mass true Range from simulation = 10.019 g/cm2 from PhysicsTable (csda range) = 10.012 g/cm2 --------------------------------------------------------- @@ -749,10 +723,10 @@ Run Summary ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={1022057284471871571, 2182122990961787818, 22661610049818286, 1167058904645161636, 1057523812732912072, 448833241231062584, 265784209780802524, 272334288315472262, 2207680454799403809, 1653502782966459341, 1990026467855209068, 1157980319271137565, 496108903690270821, 1002644507988024922, 1781101410953333273, 759600882143407906, 1560436312506735844} counter= 8sumtot= 600714310653319694 +N=17 V[N]={429609243965298226, 1354877440464605788, 424681071433555278, 2284854082925164057, 2270811056351683002, 598774110409585752, 466671845982721345, 2125375543883793559, 28639221809827488, 1896774277780255964, 459116391268456505, 1433470910628339911, 1593743306696717856, 2034778031315891687, 1761609582760600617, 1677238692884670376, 2218919062060226238} counter= 17sumtot= 1513780484454139 --------------------------------------- # ================== Deleting memory pools =================== Number of memory pools allocated: 9 of which, static: 0 -Dynamic pools deleted: 9 / Total memory freed: 0.037 MB +Dynamic pools deleted: 9 / Total memory freed: 0.038 MB ============================================================ diff --git a/examples/extended/electromagnetic/TestEm1/etaDecay.mac b/examples/extended/electromagnetic/TestEm1/etaDecay.mac new file mode 100644 index 00000000000..7d1b979f379 --- /dev/null +++ b/examples/extended/electromagnetic/TestEm1/etaDecay.mac @@ -0,0 +1,27 @@ +# +# Macro file for "TestEm1.cc" +# +# interactively: visualize eta decay +# +/control/verbose 1 +/run/verbose 1 +/process/em/verbose 0 +# +/testem/det/setMat Galactic +/testem/det/setSize 100 nm +# +/testem/phys/addPhysics local +# +## interactive or batch +/control/execute vis.mac +/run/initialize +# +## kinematic +/gun/particle eta +/gun/energy 1 eV +/gun/position 0 0 0 mm +# +## run +/tracking/verbose 2 +/run/beamOn 1 + diff --git a/examples/extended/electromagnetic/TestEm1/include/ActionInitialization.hh b/examples/extended/electromagnetic/TestEm1/include/ActionInitialization.hh index 17157e727e1..a4f47419dcc 100644 --- a/examples/extended/electromagnetic/TestEm1/include/ActionInitialization.hh +++ b/examples/extended/electromagnetic/TestEm1/include/ActionInitialization.hh @@ -41,13 +41,13 @@ class ActionInitialization : public G4VUserActionInitialization { public: ActionInitialization(DetectorConstruction*); - virtual ~ActionInitialization(); + ~ActionInitialization() override = default; - virtual void BuildForMaster() const; - virtual void Build() const; + void BuildForMaster() const override; + void Build() const override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; }; diff --git a/examples/extended/electromagnetic/TestEm1/include/DetectorConstruction.hh b/examples/extended/electromagnetic/TestEm1/include/DetectorConstruction.hh index b9b1df23fe1..c9c632f0ad8 100644 --- a/examples/extended/electromagnetic/TestEm1/include/DetectorConstruction.hh +++ b/examples/extended/electromagnetic/TestEm1/include/DetectorConstruction.hh @@ -51,10 +51,10 @@ class DetectorConstruction : public G4VUserDetectorConstruction public: DetectorConstruction(); - virtual ~DetectorConstruction(); + ~DetectorConstruction() override; - virtual G4VPhysicalVolume* Construct(); - virtual void ConstructSDandField(); + G4VPhysicalVolume* Construct() override; + void ConstructSDandField() override; void SetSize (G4double); void SetMaterial (const G4String&); @@ -68,15 +68,15 @@ class DetectorConstruction : public G4VUserDetectorConstruction private: - G4VPhysicalVolume* fPBox; - G4LogicalVolume* fLBox; - G4Box* fBox; + G4VPhysicalVolume* fPBox = nullptr; + G4LogicalVolume* fLBox = nullptr; + G4Box* fBox = nullptr; - G4double fBoxSize; - G4Material* fMaterial; + G4double fBoxSize = 0.; + G4Material* fMaterial = nullptr; - DetectorMessenger* fDetectorMessenger; - G4Cache fFieldMessenger; + DetectorMessenger* fDetectorMessenger = nullptr; + G4Cache fFieldMessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm1/include/DetectorMessenger.hh b/examples/extended/electromagnetic/TestEm1/include/DetectorMessenger.hh index a80ad4f77ab..663e1960343 100644 --- a/examples/extended/electromagnetic/TestEm1/include/DetectorMessenger.hh +++ b/examples/extended/electromagnetic/TestEm1/include/DetectorMessenger.hh @@ -49,18 +49,18 @@ class DetectorMessenger: public G4UImessenger public: DetectorMessenger(DetectorConstruction* ); - ~DetectorMessenger(); + ~DetectorMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; - G4UIdirectory* fTestemDir; - G4UIdirectory* fDetDir; - G4UIcmdWithAString* fMaterCmd; - G4UIcmdWithADoubleAndUnit* fSizeCmd; + G4UIdirectory* fTestemDir = nullptr; + G4UIdirectory* fDetDir = nullptr; + G4UIcmdWithAString* fMaterCmd = nullptr; + G4UIcmdWithADoubleAndUnit* fSizeCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm1/include/EventAction.hh b/examples/extended/electromagnetic/TestEm1/include/EventAction.hh index 0d923d38efd..61ff69d8909 100644 --- a/examples/extended/electromagnetic/TestEm1/include/EventAction.hh +++ b/examples/extended/electromagnetic/TestEm1/include/EventAction.hh @@ -42,8 +42,8 @@ class EventAction : public G4UserEventAction { public: - EventAction(); - ~EventAction() override; + EventAction() = default; + ~EventAction() override = default; void BeginOfEventAction(const G4Event*) override; void EndOfEventAction(const G4Event*) override; @@ -53,8 +53,8 @@ class EventAction : public G4UserEventAction inline G4double GetEnergyDeposit() {return fTotalEnergyDeposit;}; private: - G4double fTotalEnergyDeposit; - G4double fNIEL; + G4double fTotalEnergyDeposit = 0.; + G4double fNIEL = 0.; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm1/include/HistoManager.hh b/examples/extended/electromagnetic/TestEm1/include/HistoManager.hh index acc5c00a98c..94ffcf2e815 100644 --- a/examples/extended/electromagnetic/TestEm1/include/HistoManager.hh +++ b/examples/extended/electromagnetic/TestEm1/include/HistoManager.hh @@ -43,12 +43,12 @@ class HistoManager { public: HistoManager(); - ~HistoManager(); + ~HistoManager() = default; private: void Book(); - G4String fFileName; + G4String fFileName = "testem1"; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm1/include/PhysListEmStandard.hh b/examples/extended/electromagnetic/TestEm1/include/PhysListEmStandard.hh index 41364f4fe8e..5887af38340 100644 --- a/examples/extended/electromagnetic/TestEm1/include/PhysListEmStandard.hh +++ b/examples/extended/electromagnetic/TestEm1/include/PhysListEmStandard.hh @@ -42,16 +42,16 @@ class PhysListEmStandard : public G4VPhysicsConstructor { public: PhysListEmStandard(const G4String& name = "standard"); - ~PhysListEmStandard(); + ~PhysListEmStandard() override = default; public: // This method is dummy for physics - virtual void ConstructParticle() {}; + void ConstructParticle() override {}; // This method will be invoked in the Construct() method. // each physics process will be instantiated and // registered to the process manager of each particle type - virtual void ConstructProcess(); + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm1/include/PhysicsList.hh b/examples/extended/electromagnetic/TestEm1/include/PhysicsList.hh index ac69283b29c..6c5320c38b6 100644 --- a/examples/extended/electromagnetic/TestEm1/include/PhysicsList.hh +++ b/examples/extended/electromagnetic/TestEm1/include/PhysicsList.hh @@ -51,10 +51,10 @@ class PhysicsList: public G4VModularPhysicsList { public: PhysicsList(DetectorConstruction*); - ~PhysicsList(); + ~PhysicsList() override; - virtual void ConstructParticle(); - virtual void ConstructProcess(); + void ConstructParticle() override; + void ConstructProcess() override; void AddPhysicsList(const G4String& name); void AddDecay(); @@ -65,11 +65,10 @@ class PhysicsList: public G4VModularPhysicsList G4VProcess* GetProcess(const G4String&) const; private: - G4VPhysicsConstructor* fEmPhysicsList; - G4String fEmName; - - DetectorConstruction* fDet; - PhysicsListMessenger* fMessenger; + G4VPhysicsConstructor* fEmPhysicsList = nullptr; + G4String fEmName = " "; + DetectorConstruction* fDet = nullptr; + PhysicsListMessenger* fMessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm1/include/PhysicsListMessenger.hh b/examples/extended/electromagnetic/TestEm1/include/PhysicsListMessenger.hh index 90e9d722447..4d9cc0a4f16 100644 --- a/examples/extended/electromagnetic/TestEm1/include/PhysicsListMessenger.hh +++ b/examples/extended/electromagnetic/TestEm1/include/PhysicsListMessenger.hh @@ -48,17 +48,17 @@ class PhysicsListMessenger: public G4UImessenger public: PhysicsListMessenger(PhysicsList* ); - ~PhysicsListMessenger(); + ~PhysicsListMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - PhysicsList* fPhysicsList; + PhysicsList* fPhysicsList = nullptr; - G4UIdirectory* fPhysDir; - G4UIcmdWithADoubleAndUnit* fRCmd; - G4UIcmdWithAString* fListCmd; + G4UIdirectory* fPhysDir = nullptr; + G4UIcmdWithADoubleAndUnit* fRCmd = nullptr; + G4UIcmdWithAString* fListCmd = nullptr; }; diff --git a/examples/extended/electromagnetic/TestEm1/include/PrimaryGeneratorAction.hh b/examples/extended/electromagnetic/TestEm1/include/PrimaryGeneratorAction.hh index 67350bfce8a..d3696330dbb 100644 --- a/examples/extended/electromagnetic/TestEm1/include/PrimaryGeneratorAction.hh +++ b/examples/extended/electromagnetic/TestEm1/include/PrimaryGeneratorAction.hh @@ -47,20 +47,20 @@ class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: PrimaryGeneratorAction(DetectorConstruction*); - ~PrimaryGeneratorAction(); + ~PrimaryGeneratorAction() override; public: void SetDefaultKinematic(G4int); void SetRndmBeam(G4double val) {fRndmBeam = val;} - virtual void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; G4ParticleGun* GetParticleGun() {return fParticleGun;} private: - G4ParticleGun* fParticleGun; - DetectorConstruction* fDetector; - G4double fRndmBeam; - PrimaryGeneratorMessenger* fGunMessenger; + G4ParticleGun* fParticleGun = nullptr; + DetectorConstruction* fDetector = nullptr; + G4double fRndmBeam = 0.; + PrimaryGeneratorMessenger* fGunMessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm1/include/PrimaryGeneratorMessenger.hh b/examples/extended/electromagnetic/TestEm1/include/PrimaryGeneratorMessenger.hh index bdcdc4f142c..73bbb8efa45 100644 --- a/examples/extended/electromagnetic/TestEm1/include/PrimaryGeneratorMessenger.hh +++ b/examples/extended/electromagnetic/TestEm1/include/PrimaryGeneratorMessenger.hh @@ -47,16 +47,16 @@ class PrimaryGeneratorMessenger: public G4UImessenger { public: PrimaryGeneratorMessenger(PrimaryGeneratorAction*); - ~PrimaryGeneratorMessenger(); + ~PrimaryGeneratorMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - PrimaryGeneratorAction* fAction; + PrimaryGeneratorAction* fAction = nullptr; - G4UIdirectory* fGunDir; - G4UIcmdWithAnInteger* fDefaultCmd; - G4UIcmdWithADouble* fRndmCmd; + G4UIdirectory* fGunDir = nullptr; + G4UIcmdWithAnInteger* fDefaultCmd = nullptr; + G4UIcmdWithADouble* fRndmCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm1/include/Run.hh b/examples/extended/electromagnetic/TestEm1/include/Run.hh index 1d839f90aba..17b539c3a5b 100644 --- a/examples/extended/electromagnetic/TestEm1/include/Run.hh +++ b/examples/extended/electromagnetic/TestEm1/include/Run.hh @@ -46,7 +46,7 @@ class Run : public G4Run { public: Run(const DetectorConstruction*); - ~Run() override; + ~Run() override = default; void SetPrimary(const G4ParticleDefinition* particle, G4double energy); @@ -66,16 +66,17 @@ class Run : public G4Run void EndOfRun(); private: - const DetectorConstruction* fDetector; - const G4ParticleDefinition* fParticle; - G4double fEkin; + const DetectorConstruction* fDetector = nullptr; + const G4ParticleDefinition* fParticle = nullptr; + G4double fEkin = 0.; - G4int fNbOfTraks0, fNbOfTraks1; - G4int fNbOfSteps0, fNbOfSteps1; - G4double fEdep, fNIEL; - G4double fTrueRange, fTrueRange2; - G4double fProjRange, fProjRange2; - G4double fTransvDev, fTransvDev2; + G4int fNbOfTraks0 = 0, fNbOfTraks1 = 0; + G4int fNbOfSteps0 = 0, fNbOfSteps1 = 0; + G4double fEdep = 0. , fNIEL = 0.; + G4double fTrueRange = 0., fTrueRange2 = 0.; + G4double fProjRange = 0., fProjRange2 = 0.; + G4double fTransvDev = 0., fTransvDev2 = 0.; + std::map fProcCounter; }; diff --git a/examples/extended/electromagnetic/TestEm1/include/RunAction.hh b/examples/extended/electromagnetic/TestEm1/include/RunAction.hh index ce50116ff2a..97a788cdf3c 100644 --- a/examples/extended/electromagnetic/TestEm1/include/RunAction.hh +++ b/examples/extended/electromagnetic/TestEm1/include/RunAction.hh @@ -57,10 +57,10 @@ class RunAction : public G4UserRunAction void EndOfRunAction(const G4Run*) override; private: - const DetectorConstruction* fDetector; - PrimaryGeneratorAction* fPrimary; - Run* fRun; - HistoManager* fHistoManager; + const DetectorConstruction* fDetector = nullptr; + PrimaryGeneratorAction* fPrimary = nullptr; + Run* fRun = nullptr; + HistoManager* fHistoManager = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm1/include/StackingAction.hh b/examples/extended/electromagnetic/TestEm1/include/StackingAction.hh index 71f3ab8cb52..2e763a0b687 100644 --- a/examples/extended/electromagnetic/TestEm1/include/StackingAction.hh +++ b/examples/extended/electromagnetic/TestEm1/include/StackingAction.hh @@ -41,10 +41,10 @@ class StackingAction : public G4UserStackingAction { public: - StackingAction(); - ~StackingAction(); + StackingAction() = default; + ~StackingAction() override = default; - virtual G4ClassificationOfNewTrack ClassifyNewTrack(const G4Track*); + G4ClassificationOfNewTrack ClassifyNewTrack(const G4Track*) override; }; diff --git a/examples/extended/electromagnetic/TestEm1/include/StepMax.hh b/examples/extended/electromagnetic/TestEm1/include/StepMax.hh index d0857820ca7..00d79a228f3 100644 --- a/examples/extended/electromagnetic/TestEm1/include/StepMax.hh +++ b/examples/extended/electromagnetic/TestEm1/include/StepMax.hh @@ -47,7 +47,7 @@ class StepMax : public G4VDiscreteProcess public: StepMax(const G4String& processName = "UserMaxStep"); - ~StepMax(); + ~StepMax(); G4bool IsApplicable(const G4ParticleDefinition&) override; @@ -65,9 +65,9 @@ class StepMax : public G4VDiscreteProcess private: - G4double fMaxChargedStep; + G4double fMaxChargedStep = DBL_MAX; - StepMaxMessenger* fMess; + StepMaxMessenger* fMess = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm1/include/StepMaxMessenger.hh b/examples/extended/electromagnetic/TestEm1/include/StepMaxMessenger.hh index f990039bcf1..6158e14334a 100644 --- a/examples/extended/electromagnetic/TestEm1/include/StepMaxMessenger.hh +++ b/examples/extended/electromagnetic/TestEm1/include/StepMaxMessenger.hh @@ -45,13 +45,13 @@ class StepMaxMessenger: public G4UImessenger { public: StepMaxMessenger(StepMax*); - ~StepMaxMessenger(); + ~StepMaxMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - StepMax* fStepMax; - G4UIcmdWithADoubleAndUnit* fStepMaxCmd; + StepMax* fStepMax = nullptr; + G4UIcmdWithADoubleAndUnit* fStepMaxCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm1/include/SteppingAction.hh b/examples/extended/electromagnetic/TestEm1/include/SteppingAction.hh index 1d8227667b2..b12f70e1312 100644 --- a/examples/extended/electromagnetic/TestEm1/include/SteppingAction.hh +++ b/examples/extended/electromagnetic/TestEm1/include/SteppingAction.hh @@ -44,13 +44,13 @@ class SteppingAction : public G4UserSteppingAction { public: SteppingAction(EventAction*); - ~SteppingAction() override; + ~SteppingAction() override = default; void UserSteppingAction(const G4Step*) override; private: - EventAction* fEventAction; - G4NIELCalculator* fNIELCalculator; + EventAction* fEventAction = nullptr; + G4NIELCalculator* fNIELCalculator = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm1/include/TrackingAction.hh b/examples/extended/electromagnetic/TestEm1/include/TrackingAction.hh index 8be493c5c1e..8f3308b1f98 100644 --- a/examples/extended/electromagnetic/TestEm1/include/TrackingAction.hh +++ b/examples/extended/electromagnetic/TestEm1/include/TrackingAction.hh @@ -43,13 +43,13 @@ class TrackingAction : public G4UserTrackingAction { public: TrackingAction(PrimaryGeneratorAction*); - ~TrackingAction() {}; + ~TrackingAction() override = default; - virtual void PreUserTrackingAction(const G4Track*); - virtual void PostUserTrackingAction(const G4Track*); + void PreUserTrackingAction(const G4Track*) override; + void PostUserTrackingAction(const G4Track*) override; private: - PrimaryGeneratorAction* fPrimary; + PrimaryGeneratorAction* fPrimary = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm1/src/ActionInitialization.cc b/examples/extended/electromagnetic/TestEm1/src/ActionInitialization.cc index eeb8d1f5385..a51de5c9e38 100644 --- a/examples/extended/electromagnetic/TestEm1/src/ActionInitialization.cc +++ b/examples/extended/electromagnetic/TestEm1/src/ActionInitialization.cc @@ -39,12 +39,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ActionInitialization::ActionInitialization(DetectorConstruction* det) - : G4VUserActionInitialization(),fDetector(det) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -ActionInitialization::~ActionInitialization() + : fDetector(det) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm1/src/DetectorConstruction.cc b/examples/extended/electromagnetic/TestEm1/src/DetectorConstruction.cc index 2faa2e67daa..b242d2418ef 100644 --- a/examples/extended/electromagnetic/TestEm1/src/DetectorConstruction.cc +++ b/examples/extended/electromagnetic/TestEm1/src/DetectorConstruction.cc @@ -56,8 +56,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorConstruction::DetectorConstruction() -:G4VUserDetectorConstruction(),fPBox(nullptr), fLBox(nullptr), - fBox(nullptr), fMaterial(nullptr) { fBoxSize = 10*m; DefineMaterials(); diff --git a/examples/extended/electromagnetic/TestEm1/src/DetectorMessenger.cc b/examples/extended/electromagnetic/TestEm1/src/DetectorMessenger.cc index 4509be68b8a..1a0dd048225 100644 --- a/examples/extended/electromagnetic/TestEm1/src/DetectorMessenger.cc +++ b/examples/extended/electromagnetic/TestEm1/src/DetectorMessenger.cc @@ -41,11 +41,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorMessenger::DetectorMessenger(DetectorConstruction * Det) -:G4UImessenger(),fDetector(Det), - fTestemDir(0), - fDetDir(0), - fMaterCmd(0), - fSizeCmd(0) + : fDetector(Det) { fTestemDir = new G4UIdirectory("/testem/"); fTestemDir->SetGuidance("commands specific to this example"); diff --git a/examples/extended/electromagnetic/TestEm1/src/EventAction.cc b/examples/extended/electromagnetic/TestEm1/src/EventAction.cc index 873916fc430..fbf35cee552 100644 --- a/examples/extended/electromagnetic/TestEm1/src/EventAction.cc +++ b/examples/extended/electromagnetic/TestEm1/src/EventAction.cc @@ -40,20 +40,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -EventAction::EventAction() -:G4UserEventAction() -{ - fTotalEnergyDeposit = 0.; - fNIEL = 0.; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -EventAction::~EventAction() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void EventAction::BeginOfEventAction(const G4Event*) { fTotalEnergyDeposit = 0.; diff --git a/examples/extended/electromagnetic/TestEm1/src/HistoManager.cc b/examples/extended/electromagnetic/TestEm1/src/HistoManager.cc index a0ba82ad1ea..309952b3998 100644 --- a/examples/extended/electromagnetic/TestEm1/src/HistoManager.cc +++ b/examples/extended/electromagnetic/TestEm1/src/HistoManager.cc @@ -36,19 +36,12 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... HistoManager::HistoManager() - : fFileName("testem1") { Book(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -HistoManager::~HistoManager() -{ -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void HistoManager::Book() { // Create or get analysis manager diff --git a/examples/extended/electromagnetic/TestEm1/src/PhysListEmStandard.cc b/examples/extended/electromagnetic/TestEm1/src/PhysListEmStandard.cc index 248dbc7f721..876dc20e865 100644 --- a/examples/extended/electromagnetic/TestEm1/src/PhysListEmStandard.cc +++ b/examples/extended/electromagnetic/TestEm1/src/PhysListEmStandard.cc @@ -88,11 +88,6 @@ PhysListEmStandard::PhysListEmStandard(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysListEmStandard::~PhysListEmStandard() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysListEmStandard::ConstructProcess() { G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); diff --git a/examples/extended/electromagnetic/TestEm1/src/PhysicsList.cc b/examples/extended/electromagnetic/TestEm1/src/PhysicsList.cc index 8786fd7ce91..a1f21f69c52 100644 --- a/examples/extended/electromagnetic/TestEm1/src/PhysicsList.cc +++ b/examples/extended/electromagnetic/TestEm1/src/PhysicsList.cc @@ -82,7 +82,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysicsList::PhysicsList(DetectorConstruction* det) - : G4VModularPhysicsList(), fEmPhysicsList(nullptr), fEmName(" "), fDet(det) + : fDet(det) { fMessenger = new PhysicsListMessenger(this); SetVerboseLevel(1); @@ -264,11 +264,14 @@ void PhysicsList::AddRadioactiveDecay() { G4RadioactiveDecay* radioactiveDecay = new G4RadioactiveDecay(); - radioactiveDecay->SetARM(true); //Atomic Rearangement + G4bool armFlag = false; + radioactiveDecay->SetARM(armFlag); //Atomic Rearangement // atomic de-excitation module - G4EmParameters::Instance()->SetAuger(true); - G4EmParameters::Instance()->SetDeexcitationIgnoreCut(true); + if (armFlag) { + G4EmParameters::Instance()->SetAuger(true); + G4EmParameters::Instance()->SetDeexcitationIgnoreCut(true); + } G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); ph->RegisterProcess(radioactiveDecay, G4GenericIon::GenericIon()); diff --git a/examples/extended/electromagnetic/TestEm1/src/PhysicsListMessenger.cc b/examples/extended/electromagnetic/TestEm1/src/PhysicsListMessenger.cc index 0cea6485869..0d8972e85f6 100644 --- a/examples/extended/electromagnetic/TestEm1/src/PhysicsListMessenger.cc +++ b/examples/extended/electromagnetic/TestEm1/src/PhysicsListMessenger.cc @@ -40,10 +40,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysicsListMessenger::PhysicsListMessenger(PhysicsList* pPhys) -:G4UImessenger(),fPhysicsList(pPhys), - fPhysDir(0), - fRCmd(0), - fListCmd(0) +: fPhysicsList(pPhys) { fPhysDir = new G4UIdirectory("/testem/phys/"); fPhysDir->SetGuidance("physics list commands"); diff --git a/examples/extended/electromagnetic/TestEm1/src/PrimaryGeneratorAction.cc b/examples/extended/electromagnetic/TestEm1/src/PrimaryGeneratorAction.cc index 4b4d9f6bdf8..199102c81af 100644 --- a/examples/extended/electromagnetic/TestEm1/src/PrimaryGeneratorAction.cc +++ b/examples/extended/electromagnetic/TestEm1/src/PrimaryGeneratorAction.cc @@ -45,16 +45,10 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PrimaryGeneratorAction::PrimaryGeneratorAction( DetectorConstruction* det) -:G4VUserPrimaryGeneratorAction(), - fParticleGun(0), - fDetector(det), - fRndmBeam(0), - fGunMessenger(0) - + :fDetector(det) { fParticleGun = new G4ParticleGun(1); SetDefaultKinematic(1); - fRndmBeam = 0.; //create a messenger for this class fGunMessenger = new PrimaryGeneratorMessenger(this); diff --git a/examples/extended/electromagnetic/TestEm1/src/PrimaryGeneratorMessenger.cc b/examples/extended/electromagnetic/TestEm1/src/PrimaryGeneratorMessenger.cc index 7f56d9360e2..f573724b52a 100644 --- a/examples/extended/electromagnetic/TestEm1/src/PrimaryGeneratorMessenger.cc +++ b/examples/extended/electromagnetic/TestEm1/src/PrimaryGeneratorMessenger.cc @@ -40,10 +40,7 @@ PrimaryGeneratorMessenger::PrimaryGeneratorMessenger( PrimaryGeneratorAction* Gun) -:G4UImessenger(),fAction(Gun), - fGunDir(0), - fDefaultCmd(0), - fRndmCmd(0) + :fAction(Gun) { fGunDir = new G4UIdirectory("/testem/gun/"); fGunDir->SetGuidance("gun control"); diff --git a/examples/extended/electromagnetic/TestEm1/src/Run.cc b/examples/extended/electromagnetic/TestEm1/src/Run.cc index 0bc8ee277bb..69730768ef8 100644 --- a/examples/extended/electromagnetic/TestEm1/src/Run.cc +++ b/examples/extended/electromagnetic/TestEm1/src/Run.cc @@ -43,20 +43,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... Run::Run(const DetectorConstruction* det) -: G4Run(), - fDetector(det), - fParticle(0), fEkin(0.), - fNbOfTraks0(0), fNbOfTraks1(0), - fNbOfSteps0(0), fNbOfSteps1(0), - fEdep(0.), fNIEL(0.), - fTrueRange(0.), fTrueRange2(0.), - fProjRange(0.), fProjRange2(0.), - fTransvDev(0.), fTransvDev2(0.) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -Run::~Run() +: fDetector(det) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm1/src/RunAction.cc b/examples/extended/electromagnetic/TestEm1/src/RunAction.cc index 948237d01fc..4cd4c9a4fdf 100644 --- a/examples/extended/electromagnetic/TestEm1/src/RunAction.cc +++ b/examples/extended/electromagnetic/TestEm1/src/RunAction.cc @@ -43,8 +43,8 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... RunAction::RunAction(const DetectorConstruction* det, - PrimaryGeneratorAction* kin) - : G4UserRunAction(),fDetector(det),fPrimary(kin),fRun(nullptr) + PrimaryGeneratorAction* kin) + :fDetector(det),fPrimary(kin) { fHistoManager = new HistoManager(); } diff --git a/examples/extended/electromagnetic/TestEm1/src/StackingAction.cc b/examples/extended/electromagnetic/TestEm1/src/StackingAction.cc index 7d42c41de09..e2719ba90c2 100644 --- a/examples/extended/electromagnetic/TestEm1/src/StackingAction.cc +++ b/examples/extended/electromagnetic/TestEm1/src/StackingAction.cc @@ -37,17 +37,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -StackingAction::StackingAction() - : G4UserStackingAction() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -StackingAction::~StackingAction() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - G4ClassificationOfNewTrack StackingAction::ClassifyNewTrack(const G4Track* track) { diff --git a/examples/extended/electromagnetic/TestEm1/src/StepMax.cc b/examples/extended/electromagnetic/TestEm1/src/StepMax.cc index baf98b5ab5c..8c7a0372f86 100644 --- a/examples/extended/electromagnetic/TestEm1/src/StepMax.cc +++ b/examples/extended/electromagnetic/TestEm1/src/StepMax.cc @@ -36,7 +36,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... StepMax::StepMax(const G4String& processName) - : G4VDiscreteProcess(processName),fMaxChargedStep(DBL_MAX),fMess(nullptr) + : G4VDiscreteProcess(processName) { fMess = new StepMaxMessenger(this); } diff --git a/examples/extended/electromagnetic/TestEm1/src/StepMaxMessenger.cc b/examples/extended/electromagnetic/TestEm1/src/StepMaxMessenger.cc index 18acc404e82..254894b9dd4 100644 --- a/examples/extended/electromagnetic/TestEm1/src/StepMaxMessenger.cc +++ b/examples/extended/electromagnetic/TestEm1/src/StepMaxMessenger.cc @@ -38,7 +38,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... StepMaxMessenger::StepMaxMessenger(StepMax* stepM) -:G4UImessenger(),fStepMax(stepM),fStepMaxCmd(0) +:fStepMax(stepM) { fStepMaxCmd = new G4UIcmdWithADoubleAndUnit("/testem/stepMax",this); fStepMaxCmd->SetGuidance("Set max allowed step length"); diff --git a/examples/extended/electromagnetic/TestEm1/src/SteppingAction.cc b/examples/extended/electromagnetic/TestEm1/src/SteppingAction.cc index 7bf2ce16947..6936e95718d 100644 --- a/examples/extended/electromagnetic/TestEm1/src/SteppingAction.cc +++ b/examples/extended/electromagnetic/TestEm1/src/SteppingAction.cc @@ -45,15 +45,15 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... SteppingAction::SteppingAction(EventAction* event) - :G4UserSteppingAction(), fEventAction(event) + :fEventAction(event) { fNIELCalculator = new G4NIELCalculator(new G4ICRU49NuclearStoppingModel(),1); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -SteppingAction::~SteppingAction() -{} +///SteppingAction::~SteppingAction() +///{} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm1/src/TrackingAction.cc b/examples/extended/electromagnetic/TestEm1/src/TrackingAction.cc index 4a0c88a9b36..89f47c07172 100644 --- a/examples/extended/electromagnetic/TestEm1/src/TrackingAction.cc +++ b/examples/extended/electromagnetic/TestEm1/src/TrackingAction.cc @@ -44,7 +44,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... TrackingAction::TrackingAction(PrimaryGeneratorAction* prim) -:G4UserTrackingAction(),fPrimary(prim) + :fPrimary(prim) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm10/TestEm10.out b/examples/extended/electromagnetic/TestEm10/TestEm10.out index 4077ee28ad3..9a0f858d4d2 100644 --- a/examples/extended/electromagnetic/TestEm10/TestEm10.out +++ b/examples/extended/electromagnetic/TestEm10/TestEm10.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -158,7 +158,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -218,7 +218,7 @@ Lorentz Factor XTR photon number total time for build X-ray TR energy loss tables = 0.62 s Build angle for energy distribution according the current radiator -total time for build X-ray TR angle for energy loss tables = 2.04 s +total time for build X-ray TR angle for energy loss tables = 1.96 s msc: for e+ SubType= 10 ===== EM models for the G4Region DefaultRegionForTheWorld ====== @@ -248,7 +248,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -308,7 +308,7 @@ Lorentz Factor XTR photon number total time for build X-ray TR energy loss tables = 0.62 s Build angle for energy distribution according the current radiator -total time for build X-ray TR angle for energy loss tables = 2.03 s +total time for build X-ray TR angle for energy loss tables = 1.96 s msc: for proton SubType= 10 ===== EM models for the G4Region DefaultRegionForTheWorld ====== @@ -338,7 +338,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -351,7 +351,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -397,7 +396,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -429,7 +428,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -461,7 +460,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -493,7 +492,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -525,7 +524,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -557,7 +556,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -589,7 +588,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -633,7 +632,7 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.250000s Real=0.251511s Sys=0.000000s + User=0.200000s Real=0.207233s Sys=0.000000s ================== run summary ===================== End of Run TotNbofEvents = 1000 Mean energy deposit in absorber = 0.0469696 +-0.0185724 MeV diff --git a/examples/extended/electromagnetic/TestEm11/.README.txt b/examples/extended/electromagnetic/TestEm11/.README.txt index 36a3bfa9e1d..3362160fff5 100644 --- a/examples/extended/electromagnetic/TestEm11/.README.txt +++ b/examples/extended/electromagnetic/TestEm11/.README.txt @@ -163,11 +163,12 @@ Idle> exit - 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 + - 9 : total energy leakage + - 10 : total energy : Edep + Eleak + - 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 diff --git a/examples/extended/electromagnetic/TestEm11/History b/examples/extended/electromagnetic/TestEm11/History index 8f203db062c..140fd8fd974 100644 --- a/examples/extended/electromagnetic/TestEm11/History +++ b/examples/extended/electromagnetic/TestEm11/History @@ -4,6 +4,14 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-03-24 Michel Maire (testem11-V11-01-01) +- PhysicsList::RadioactiveDecay(): setARM = false +- continue revision of header files + +## 2023-01-25 Michel Maire (testem11-V11-01-00) +- compute and plot energy leakage and total energy +- revision of all header files + ## 2022-10-11 Michel Maire (testem11-V11-00-01) - PhysicsList::AddRadioactiveDecay(): update lifeTime threshold diff --git a/examples/extended/electromagnetic/TestEm11/README b/examples/extended/electromagnetic/TestEm11/README index d28d6ac9b6a..75835093657 100644 --- a/examples/extended/electromagnetic/TestEm11/README +++ b/examples/extended/electromagnetic/TestEm11/README @@ -164,9 +164,10 @@ 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 + 9 : total energy leakage + 10 : total energy : Edep + Eleak + 11 : energy deposited in absorber 1 + 12 : energy deposited in absorber 2 ...etc........ The histograms are managed by G4Analysis classes. diff --git a/examples/extended/electromagnetic/TestEm11/TestEm11.out b/examples/extended/electromagnetic/TestEm11/TestEm11.out index 6dcbd5cadfa..2d6485bf932 100644 --- a/examples/extended/electromagnetic/TestEm11/TestEm11.out +++ b/examples/extended/electromagnetic/TestEm11/TestEm11.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -55,7 +55,7 @@ PhysicsList::AddPhysicsList: ------------------------------------------------------------- ---> The Absorber is 1 layers of: - G4_Si: 1 mm divided in 1 slices + G4_Si: 1 mm divided in 1 slices ------------------------------------------------------------- # @@ -293,7 +293,7 @@ min MeanLife (from G4NuclideTable) 1 ps Max life time (from G4DeexPrecoParameters) 1 ns Internal e- conversion flag 1 Stored internal conversion coefficients 0 -Enabled atomic relaxation mode 1 +Enabled atomic relaxation mode 0 Enable correlated gamma emission 0 Max 2J for sampling of angular correlations 10 Atomic de-excitation enabled 1 @@ -540,7 +540,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 20000 - User=0.750000s Real=0.759832s Sys=0.000000s + User=0.820000s Real=0.862824s Sys=0.000000s ======================== run summary ===================== @@ -548,6 +548,8 @@ Run Summary 1 1.00 mm of G4_Si (density: 2.33 g/cm3 ) Edep in absorber 1 = 448.476 keV (13.860 keV-->500.000 keV) + Energy leakage = 51.524 keV (5.048 keV-->486.140 keV) + Energy total = 500.000 keV (500.000 keV-->500.000 keV) Track length of primary track = 884.384 um +- 189.614 um Range from EmCalculator = 942.776 um (from full dE/dx) @@ -556,7 +558,8 @@ Run Summary Nb of steps of primary track = 12.02 +- 2.92 Step size= 75.905 um +- 19.096 um - absorbed = 77.66 % transmit = 5.93 % reflected = 16.41 % + absorbed = 77.66 % transmit = 5.93 % reflected = 16.41 % + --------- Ranecu engine status --------- Initial seed (index) = 0 diff --git a/examples/extended/electromagnetic/TestEm11/include/ActionInitialization.hh b/examples/extended/electromagnetic/TestEm11/include/ActionInitialization.hh index e4960696004..094cc84aaa4 100644 --- a/examples/extended/electromagnetic/TestEm11/include/ActionInitialization.hh +++ b/examples/extended/electromagnetic/TestEm11/include/ActionInitialization.hh @@ -42,14 +42,14 @@ class ActionInitialization : public G4VUserActionInitialization { public: ActionInitialization(DetectorConstruction*, PhysicsList*); - ~ActionInitialization() override; + ~ActionInitialization() override = default; void BuildForMaster() const override; void Build() const override; private: - DetectorConstruction* fDetector; - PhysicsList* fPhysics; + DetectorConstruction* fDetector = nullptr; + PhysicsList* fPhysics = nullptr; }; #endif diff --git a/examples/extended/electromagnetic/TestEm11/include/DetectorConstruction.hh b/examples/extended/electromagnetic/TestEm11/include/DetectorConstruction.hh index 6fdde46851f..56c6ff93ed7 100644 --- a/examples/extended/electromagnetic/TestEm11/include/DetectorConstruction.hh +++ b/examples/extended/electromagnetic/TestEm11/include/DetectorConstruction.hh @@ -54,7 +54,7 @@ class DetectorConstruction : public G4VUserDetectorConstruction public: DetectorConstruction(); - ~DetectorConstruction(); + ~DetectorConstruction() override; public: @@ -65,8 +65,8 @@ public: void SetAbsorSizeYZ (G4double); void SetNbOfDivisions (G4int,G4int); - virtual G4VPhysicalVolume* Construct(); - virtual void ConstructSDandField(); + G4VPhysicalVolume* Construct() override; + void ConstructSDandField() override; public: @@ -84,21 +84,21 @@ public: private: - G4int fNbOfAbsor; + G4int fNbOfAbsor = 1; G4Material* fAbsorMaterial [kMaxAbsor]; G4double fAbsorThickness[kMaxAbsor]; G4double fXfront[kMaxAbsor]; G4int fNbOfDivisions[kMaxAbsor]; - G4double fAbsorSizeX; - G4double fAbsorSizeYZ; - G4Material* fDefaultMaterial; + G4double fAbsorSizeX = 0.; + G4double fAbsorSizeYZ = 0.; + G4Material* fDefaultMaterial = nullptr; - G4VPhysicalVolume* fPhysiWorld; + G4VPhysicalVolume* fPhysiWorld = nullptr; - DetectorMessenger* fDetectorMessenger; - G4Cache fFieldMessenger; + DetectorMessenger* fDetectorMessenger = nullptr; + G4Cache fFieldMessenger = nullptr; private: diff --git a/examples/extended/electromagnetic/TestEm11/include/DetectorMessenger.hh b/examples/extended/electromagnetic/TestEm11/include/DetectorMessenger.hh index e15adf64f84..e47ae0426c4 100644 --- a/examples/extended/electromagnetic/TestEm11/include/DetectorMessenger.hh +++ b/examples/extended/electromagnetic/TestEm11/include/DetectorMessenger.hh @@ -50,20 +50,20 @@ class DetectorMessenger: public G4UImessenger public: DetectorMessenger(DetectorConstruction* ); - ~DetectorMessenger(); + ~DetectorMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; - G4UIdirectory* fTestemDir; - G4UIdirectory* fDetDir; - G4UIcmdWithAnInteger* fNbAbsorCmd; - G4UIcommand* fAbsorCmd; - G4UIcommand* fNdivCmd; - G4UIcmdWithADoubleAndUnit* fSizeYZCmd; + G4UIdirectory* fTestemDir = nullptr; + G4UIdirectory* fDetDir = nullptr; + G4UIcmdWithAnInteger* fNbAbsorCmd = nullptr; + G4UIcommand* fAbsorCmd = nullptr; + G4UIcommand* fNdivCmd = nullptr; + G4UIcmdWithADoubleAndUnit* fSizeYZCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm11/include/EventAction.hh b/examples/extended/electromagnetic/TestEm11/include/EventAction.hh index 42580999408..40ae65e4ae1 100644 --- a/examples/extended/electromagnetic/TestEm11/include/EventAction.hh +++ b/examples/extended/electromagnetic/TestEm11/include/EventAction.hh @@ -43,18 +43,20 @@ class EventAction : public G4UserEventAction { public: EventAction(DetectorConstruction*); - ~EventAction(); + ~EventAction() override = default; public: - virtual void BeginOfEventAction(const G4Event*); - virtual void EndOfEventAction(const G4Event*); + void BeginOfEventAction(const G4Event*) override; + void EndOfEventAction(const G4Event*) override; - void AddEdep(G4int k, G4double edep) { fEdepAbsor[k] += edep; } + void AddEdep(G4int k, G4double edep); + void AddEleak (G4double eleak); private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; G4double fEdepAbsor[kMaxAbsor]; + G4double fEnergyLeak = 0.; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm11/include/HistoManager.hh b/examples/extended/electromagnetic/TestEm11/include/HistoManager.hh index 7f39def5f76..66a44a2dd23 100644 --- a/examples/extended/electromagnetic/TestEm11/include/HistoManager.hh +++ b/examples/extended/electromagnetic/TestEm11/include/HistoManager.hh @@ -44,11 +44,11 @@ class HistoManager { public: HistoManager(); - ~HistoManager(); + ~HistoManager() = default; private: void Book(); - G4String fFileName; + G4String fFileName = "testem11"; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm11/include/PhysListEmStandard.hh b/examples/extended/electromagnetic/TestEm11/include/PhysListEmStandard.hh index ebe0ce10ec2..da88bc57c55 100644 --- a/examples/extended/electromagnetic/TestEm11/include/PhysListEmStandard.hh +++ b/examples/extended/electromagnetic/TestEm11/include/PhysListEmStandard.hh @@ -43,16 +43,16 @@ class PhysListEmStandard : public G4VPhysicsConstructor { public: PhysListEmStandard(const G4String& name = "standard"); - ~PhysListEmStandard(); + ~PhysListEmStandard() override = default; public: // This method is dummy for physics - virtual void ConstructParticle() {}; + void ConstructParticle() override {}; // This method will be invoked in the Construct() method. // each physics process will be instantiated and // registered to the process manager of each particle type - virtual void ConstructProcess(); + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm11/include/PhysicsList.hh b/examples/extended/electromagnetic/TestEm11/include/PhysicsList.hh index e1f43199f1d..653d6982b97 100644 --- a/examples/extended/electromagnetic/TestEm11/include/PhysicsList.hh +++ b/examples/extended/electromagnetic/TestEm11/include/PhysicsList.hh @@ -50,12 +50,12 @@ class PhysicsList: public G4VModularPhysicsList { public: PhysicsList(); - ~PhysicsList(); + ~PhysicsList() override; - virtual void ConstructParticle(); + void ConstructParticle() override; void AddPhysicsList(const G4String& name); - virtual void ConstructProcess(); + void ConstructProcess() override; void AddDecay(); void AddRadioactiveDecay(); void AddStepMax(); @@ -63,11 +63,11 @@ class PhysicsList: public G4VModularPhysicsList StepMax* GetStepMaxProcess() {return fStepMaxProcess;}; private: - G4String fEmName; - G4VPhysicsConstructor* fEmPhysicsList; + G4String fEmName = " "; + G4VPhysicsConstructor* fEmPhysicsList = nullptr; static G4ThreadLocal StepMax* fStepMaxProcess; - PhysicsListMessenger* fMessenger; + PhysicsListMessenger* fMessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm11/include/PhysicsListMessenger.hh b/examples/extended/electromagnetic/TestEm11/include/PhysicsListMessenger.hh index 7e964c06b8f..68f1efc2d4e 100644 --- a/examples/extended/electromagnetic/TestEm11/include/PhysicsListMessenger.hh +++ b/examples/extended/electromagnetic/TestEm11/include/PhysicsListMessenger.hh @@ -47,16 +47,16 @@ class PhysicsListMessenger: public G4UImessenger public: PhysicsListMessenger(PhysicsList* ); - ~PhysicsListMessenger(); + ~PhysicsListMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - PhysicsList* fPhysicsList; + PhysicsList* fPhysicsList = nullptr; - G4UIdirectory* fPhysDir; - G4UIcmdWithAString* fListCmd; + G4UIdirectory* fPhysDir = nullptr; + G4UIcmdWithAString* fListCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm11/include/PrimaryGeneratorAction.hh b/examples/extended/electromagnetic/TestEm11/include/PrimaryGeneratorAction.hh index e1d643fb729..86fba6ced05 100644 --- a/examples/extended/electromagnetic/TestEm11/include/PrimaryGeneratorAction.hh +++ b/examples/extended/electromagnetic/TestEm11/include/PrimaryGeneratorAction.hh @@ -47,20 +47,20 @@ class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: PrimaryGeneratorAction(DetectorConstruction*); - ~PrimaryGeneratorAction(); + ~PrimaryGeneratorAction() override; public: void SetDefaultKinematic(); void SetRndmBeam(G4double val) {fRndmBeam = val;} - virtual void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; G4ParticleGun* GetParticleGun() {return fParticleGun;} private: - G4ParticleGun* fParticleGun; - DetectorConstruction* fDetector; - G4double fRndmBeam; - PrimaryGeneratorMessenger* fGunMessenger; + G4ParticleGun* fParticleGun = nullptr; + DetectorConstruction* fDetector = nullptr; + G4double fRndmBeam = 0.; + PrimaryGeneratorMessenger* fGunMessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm11/include/PrimaryGeneratorMessenger.hh b/examples/extended/electromagnetic/TestEm11/include/PrimaryGeneratorMessenger.hh index 03f1c0bbbb6..1d3734a182c 100644 --- a/examples/extended/electromagnetic/TestEm11/include/PrimaryGeneratorMessenger.hh +++ b/examples/extended/electromagnetic/TestEm11/include/PrimaryGeneratorMessenger.hh @@ -47,15 +47,15 @@ class PrimaryGeneratorMessenger: public G4UImessenger { public: PrimaryGeneratorMessenger(PrimaryGeneratorAction*); - ~PrimaryGeneratorMessenger(); + ~PrimaryGeneratorMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - PrimaryGeneratorAction* fAction; - G4UIdirectory* fGunDir; - G4UIcmdWithoutParameter* fDefaultCmd; - G4UIcmdWithADoubleAndUnit* fRndmCmd; + PrimaryGeneratorAction* fAction = nullptr; + G4UIdirectory* fGunDir = nullptr; + G4UIcmdWithoutParameter* fDefaultCmd = nullptr; + G4UIcmdWithADoubleAndUnit* fRndmCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm11/include/Run.hh b/examples/extended/electromagnetic/TestEm11/include/Run.hh index f91238085a9..310bd5d103c 100644 --- a/examples/extended/electromagnetic/TestEm11/include/Run.hh +++ b/examples/extended/electromagnetic/TestEm11/include/Run.hh @@ -46,13 +46,15 @@ class Run : public G4Run { public: Run(DetectorConstruction* detector); - ~Run(); + ~Run() override = default; public: void SetPrimary(G4ParticleDefinition* particle, G4double energy); void AddEdep (G4int i, G4double e); void AddTotEdep (G4double e); + void AddEleak (G4double); + void AddEtotal (G4double); void AddTrackLength (G4double t); void AddProjRange (G4double x); void AddStepSize (G4int nb, G4double st); @@ -64,23 +66,22 @@ class Run : public G4Run G4double GetCsdaRange (G4int i); G4double GetXfrontNorm(G4int i); - virtual void Merge(const G4Run*); + void Merge(const G4Run*) override; void EndOfRun(); private: - DetectorConstruction* fDetector; - G4ParticleDefinition* fParticle; - G4double fEkin; + DetectorConstruction* fDetector = nullptr; + G4ParticleDefinition* fParticle = nullptr; + G4double fEkin = 0.; - G4double fTrackLen, fTrackLen2; - G4double fProjRange, fProjRange2; - G4int fNbOfSteps, fNbOfSteps2; - G4double fStepSize, fStepSize2; + G4double fTrackLen = 0., fTrackLen2 = 0.; + G4double fProjRange = 0., fProjRange2 = 0.; + G4int fNbOfSteps = 0 , fNbOfSteps2 = 0; + G4double fStepSize = 0., fStepSize2 = 0.; G4int fStatus[3]; - G4double fEdeposit[kMaxAbsor]; - G4double fEmin[kMaxAbsor], fEmax[kMaxAbsor]; - G4double fTotEdep[3]; + G4double fEdeposit[kMaxAbsor], fEmin[kMaxAbsor], fEmax[kMaxAbsor]; + G4double fTotEdep[3], fEleak[3], fEtotal[3]; G4double fCsdaRange[kMaxAbsor]; G4double fXfrontNorm[kMaxAbsor]; }; diff --git a/examples/extended/electromagnetic/TestEm11/include/RunAction.hh b/examples/extended/electromagnetic/TestEm11/include/RunAction.hh index aed1acfa7d9..10394b05439 100644 --- a/examples/extended/electromagnetic/TestEm11/include/RunAction.hh +++ b/examples/extended/electromagnetic/TestEm11/include/RunAction.hh @@ -48,19 +48,19 @@ class RunAction : public G4UserRunAction { public: RunAction(DetectorConstruction*, PhysicsList*,PrimaryGeneratorAction*); - ~RunAction(); + ~RunAction() override; public: - virtual void BeginOfRunAction(const G4Run*); - virtual void EndOfRunAction(const G4Run*); - virtual G4Run* GenerateRun(); + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; + G4Run* GenerateRun() override; private: - DetectorConstruction* fDetector; - PhysicsList* fPhysics; - PrimaryGeneratorAction* fPrimary; - Run* fRun; - HistoManager* fHistoManager; + DetectorConstruction* fDetector = nullptr; + PhysicsList* fPhysics = nullptr; + PrimaryGeneratorAction* fPrimary = nullptr; + Run* fRun = nullptr; + HistoManager* fHistoManager = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm11/include/StepMax.hh b/examples/extended/electromagnetic/TestEm11/include/StepMax.hh index 77bbdf8a128..5b28c145ef9 100644 --- a/examples/extended/electromagnetic/TestEm11/include/StepMax.hh +++ b/examples/extended/electromagnetic/TestEm11/include/StepMax.hh @@ -48,30 +48,29 @@ class StepMax : public G4VDiscreteProcess StepMax(const G4String& processName = "UserMaxStep", G4ProcessType type = fUserDefined); - ~StepMax(); + ~StepMax() override; - virtual G4bool IsApplicable(const G4ParticleDefinition&); + G4bool IsApplicable(const G4ParticleDefinition&) override; void SetMaxStep1(G4double); void SetMaxStep2(G4double); void ApplyMaxStep2(G4bool); - virtual G4double PostStepGetPhysicalInteractionLength(const G4Track& track, - G4double previousStepSize, - G4ForceCondition* condition); + G4double PostStepGetPhysicalInteractionLength(const G4Track& track, + G4double previousStepSize, G4ForceCondition* condition) override; - virtual G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&); + G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&) override; - virtual G4double GetMeanFreePath(const G4Track&,G4double,G4ForceCondition*) + G4double GetMeanFreePath(const G4Track&,G4double,G4ForceCondition*) override {return DBL_MAX;}; private: - G4double fMaxStep1; - G4double fMaxStep2; - G4bool fApplyMaxStep2; + G4double fMaxStep1 = DBL_MAX; + G4double fMaxStep2 = DBL_MAX; + G4bool fApplyMaxStep2 = true; - StepMaxMessenger* fMess; + StepMaxMessenger* fMess = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm11/include/StepMaxMessenger.hh b/examples/extended/electromagnetic/TestEm11/include/StepMaxMessenger.hh index 84d93832959..d2fea51ab27 100644 --- a/examples/extended/electromagnetic/TestEm11/include/StepMaxMessenger.hh +++ b/examples/extended/electromagnetic/TestEm11/include/StepMaxMessenger.hh @@ -46,14 +46,14 @@ class StepMaxMessenger: public G4UImessenger { public: StepMaxMessenger(StepMax*); - ~StepMaxMessenger(); + ~StepMaxMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - StepMax* fStepMax; - G4UIcmdWithADoubleAndUnit* fStepMax1Cmd; - G4UIcmdWithABool* fStepMax2Cmd; + StepMax* fStepMax = nullptr; + G4UIcmdWithADoubleAndUnit* fStepMax1Cmd = nullptr; + G4UIcmdWithABool* fStepMax2Cmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm11/include/SteppingAction.hh b/examples/extended/electromagnetic/TestEm11/include/SteppingAction.hh index f9acc6ce44d..ea993027caf 100644 --- a/examples/extended/electromagnetic/TestEm11/include/SteppingAction.hh +++ b/examples/extended/electromagnetic/TestEm11/include/SteppingAction.hh @@ -45,13 +45,13 @@ class SteppingAction : public G4UserSteppingAction { public: SteppingAction(DetectorConstruction*,EventAction*); - ~SteppingAction(); + ~SteppingAction() = default; - virtual void UserSteppingAction(const G4Step*); + void UserSteppingAction(const G4Step*) override; private: - DetectorConstruction* fDetector; - EventAction* fEventAction; + DetectorConstruction* fDetector = nullptr; + EventAction* fEventAction = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm11/include/TrackingAction.hh b/examples/extended/electromagnetic/TestEm11/include/TrackingAction.hh index 0b5ebfb30c1..fa4fc854ce3 100644 --- a/examples/extended/electromagnetic/TestEm11/include/TrackingAction.hh +++ b/examples/extended/electromagnetic/TestEm11/include/TrackingAction.hh @@ -37,19 +37,21 @@ #include "globals.hh" class DetectorConstruction; +class EventAction; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... class TrackingAction : public G4UserTrackingAction { public: - TrackingAction(DetectorConstruction*); - ~TrackingAction() {}; + TrackingAction(DetectorConstruction*, EventAction*); + ~TrackingAction() = default; - virtual void PostUserTrackingAction(const G4Track*); + void PostUserTrackingAction(const G4Track*) override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; + EventAction* fEventAct = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm11/src/ActionInitialization.cc b/examples/extended/electromagnetic/TestEm11/src/ActionInitialization.cc index c429aff8b77..48c674100ed 100644 --- a/examples/extended/electromagnetic/TestEm11/src/ActionInitialization.cc +++ b/examples/extended/electromagnetic/TestEm11/src/ActionInitialization.cc @@ -38,15 +38,8 @@ ActionInitialization::ActionInitialization(DetectorConstruction* detector, PhysicsList* physics) - : G4VUserActionInitialization(), - fDetector(detector), - fPhysics(physics) -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -ActionInitialization::~ActionInitialization() -{} + : fDetector(detector), fPhysics(physics) +{ } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -68,7 +61,7 @@ void ActionInitialization::Build() const EventAction* eventAction = new EventAction(fDetector); SetUserAction(eventAction); - SetUserAction(new TrackingAction(fDetector)); + SetUserAction(new TrackingAction(fDetector, eventAction)); SetUserAction(new SteppingAction(fDetector, eventAction)); } diff --git a/examples/extended/electromagnetic/TestEm11/src/DetectorConstruction.cc b/examples/extended/electromagnetic/TestEm11/src/DetectorConstruction.cc index d44d9dee071..83a861046c6 100644 --- a/examples/extended/electromagnetic/TestEm11/src/DetectorConstruction.cc +++ b/examples/extended/electromagnetic/TestEm11/src/DetectorConstruction.cc @@ -58,16 +58,14 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorConstruction::DetectorConstruction() -:G4VUserDetectorConstruction(),fDefaultMaterial(0),fPhysiWorld(0), - fDetectorMessenger(0) { // default parameter values of the absorbers fNbOfAbsor = 1; - fAbsorThickness[0] = 0*mm; //dummy, for initialization - fAbsorThickness[1] = 1*mm; + fAbsorThickness[0] = 0.*mm; //dummy, for initialization + fAbsorThickness[1] = 1.*mm; fAbsorSizeYZ = 1.*mm; for (G4int iAbs=0; iAbs The Absorber is " << fNbOfAbsor << " layers of:"; for (G4int i=1; i<=fNbOfAbsor; i++) { - G4cout << "\n \t" << std::setw(12) << fAbsorMaterial[i]->GetName() <<": " + G4cout << "\n \t" << std::setw(16) << fAbsorMaterial[i]->GetName() <<": " << std::setw(6) << G4BestUnit(fAbsorThickness[i],"Length") << " divided in " << fNbOfDivisions[i] << " slices"; } diff --git a/examples/extended/electromagnetic/TestEm11/src/DetectorMessenger.cc b/examples/extended/electromagnetic/TestEm11/src/DetectorMessenger.cc index a1ddce8fb21..e9811607037 100644 --- a/examples/extended/electromagnetic/TestEm11/src/DetectorMessenger.cc +++ b/examples/extended/electromagnetic/TestEm11/src/DetectorMessenger.cc @@ -45,13 +45,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorMessenger::DetectorMessenger(DetectorConstruction * Det) -:G4UImessenger(),fDetector(Det), - fTestemDir(0), - fDetDir(0), - fNbAbsorCmd(0), - fAbsorCmd(0), - fNdivCmd(0), - fSizeYZCmd(0) +:fDetector(Det) { fTestemDir = new G4UIdirectory("/testem/"); fTestemDir->SetGuidance(" detector control."); diff --git a/examples/extended/electromagnetic/TestEm11/src/EventAction.cc b/examples/extended/electromagnetic/TestEm11/src/EventAction.cc index c76190737e2..336fb45811b 100644 --- a/examples/extended/electromagnetic/TestEm11/src/EventAction.cc +++ b/examples/extended/electromagnetic/TestEm11/src/EventAction.cc @@ -42,13 +42,8 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... EventAction::EventAction(DetectorConstruction* det) -:G4UserEventAction(), fDetector(det) -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -EventAction::~EventAction() -{} +: fDetector(det) +{ } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -56,6 +51,23 @@ void EventAction::BeginOfEventAction(const G4Event*) { //energy deposited per event for (G4int k=0; kGetNbOfAbsor(); k++) { if (fEdepAbsor[k] > 0.) { run->AddEdep(k,fEdepAbsor[k]); - G4AnalysisManager::Instance()->FillH1(10 + k, fEdepAbsor[k]); + analysis->FillH1(10 + k, fEdepAbsor[k]); TotalEdep += fEdepAbsor[k]; } } - if (TotalEdep > 0.) { - run->AddTotEdep(TotalEdep); - G4AnalysisManager::Instance()->FillH1(2,TotalEdep); - } + if (TotalEdep > 0.) run->AddTotEdep(TotalEdep); + if (fEnergyLeak > 0.) run->AddEleak(fEnergyLeak); + G4double Etotal = TotalEdep + fEnergyLeak; + if (Etotal > 0.) run->AddEtotal(Etotal); + + analysis->FillH1( 2,TotalEdep); + analysis->FillH1( 9,fEnergyLeak); + analysis->FillH1(10,Etotal); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm11/src/HistoManager.cc b/examples/extended/electromagnetic/TestEm11/src/HistoManager.cc index 1ba490efdc2..896c4af6495 100644 --- a/examples/extended/electromagnetic/TestEm11/src/HistoManager.cc +++ b/examples/extended/electromagnetic/TestEm11/src/HistoManager.cc @@ -38,19 +38,12 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... HistoManager::HistoManager() - : fFileName("testem11") { Book(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -HistoManager::~HistoManager() -{ -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void HistoManager::Book() { // Create or get analysis manager @@ -78,8 +71,8 @@ void HistoManager::Book() "true track length of charged secondaries", //6 "true step size of charged secondaries", //7 "Edep (MeV.cm2/g) along x/r0", //8 - "dummy", //9 - "dummy" //10 + "total Energy leakage", //9 + "total Energy : Edep + Eleak" //10 }; // Default values (to be reset via /analysis/h1/set command) diff --git a/examples/extended/electromagnetic/TestEm11/src/PhysListEmStandard.cc b/examples/extended/electromagnetic/TestEm11/src/PhysListEmStandard.cc index 248dbc7f721..876dc20e865 100644 --- a/examples/extended/electromagnetic/TestEm11/src/PhysListEmStandard.cc +++ b/examples/extended/electromagnetic/TestEm11/src/PhysListEmStandard.cc @@ -88,11 +88,6 @@ PhysListEmStandard::PhysListEmStandard(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysListEmStandard::~PhysListEmStandard() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysListEmStandard::ConstructProcess() { G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); diff --git a/examples/extended/electromagnetic/TestEm11/src/PhysicsList.cc b/examples/extended/electromagnetic/TestEm11/src/PhysicsList.cc index ff206d657e3..0cf8087c234 100644 --- a/examples/extended/electromagnetic/TestEm11/src/PhysicsList.cc +++ b/examples/extended/electromagnetic/TestEm11/src/PhysicsList.cc @@ -72,7 +72,7 @@ G4ThreadLocal StepMax* PhysicsList::fStepMaxProcess = nullptr; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::PhysicsList() : G4VModularPhysicsList() +PhysicsList::PhysicsList() { fMessenger = new PhysicsListMessenger(this); @@ -249,9 +249,16 @@ void PhysicsList::AddDecay() void PhysicsList::AddRadioactiveDecay() { G4RadioactiveDecay* radioactiveDecay = new G4RadioactiveDecay(); + + G4bool armFlag = false; + radioactiveDecay->SetARM(armFlag); //Atomic Rearangement - radioactiveDecay->SetARM(true); //Atomic Rearangement - + // atomic de-excitation module, if needed + if (armFlag) { + G4EmParameters::Instance()->SetAuger(true); + G4EmParameters::Instance()->SetDeexcitationIgnoreCut(true); + } + G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); ph->RegisterProcess(radioactiveDecay, G4GenericIon::GenericIon()); diff --git a/examples/extended/electromagnetic/TestEm11/src/PhysicsListMessenger.cc b/examples/extended/electromagnetic/TestEm11/src/PhysicsListMessenger.cc index acf41e44b03..e53d10743b0 100644 --- a/examples/extended/electromagnetic/TestEm11/src/PhysicsListMessenger.cc +++ b/examples/extended/electromagnetic/TestEm11/src/PhysicsListMessenger.cc @@ -39,7 +39,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysicsListMessenger::PhysicsListMessenger(PhysicsList* pPhys) - : G4UImessenger(),fPhysicsList(pPhys) + : fPhysicsList(pPhys) { fPhysDir = new G4UIdirectory("/testem/phys/"); fPhysDir->SetGuidance("physics list commands"); diff --git a/examples/extended/electromagnetic/TestEm11/src/PrimaryGeneratorAction.cc b/examples/extended/electromagnetic/TestEm11/src/PrimaryGeneratorAction.cc index cf475231842..61fdee06908 100644 --- a/examples/extended/electromagnetic/TestEm11/src/PrimaryGeneratorAction.cc +++ b/examples/extended/electromagnetic/TestEm11/src/PrimaryGeneratorAction.cc @@ -45,8 +45,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PrimaryGeneratorAction::PrimaryGeneratorAction(DetectorConstruction* det) -:G4VUserPrimaryGeneratorAction(), - fDetector(det),fRndmBeam(0.), fGunMessenger(0) + :fDetector(det) { fParticleGun = new G4ParticleGun(1); SetDefaultKinematic(); diff --git a/examples/extended/electromagnetic/TestEm11/src/PrimaryGeneratorMessenger.cc b/examples/extended/electromagnetic/TestEm11/src/PrimaryGeneratorMessenger.cc index 04c7e88889b..fcbc6fb2a56 100644 --- a/examples/extended/electromagnetic/TestEm11/src/PrimaryGeneratorMessenger.cc +++ b/examples/extended/electromagnetic/TestEm11/src/PrimaryGeneratorMessenger.cc @@ -41,7 +41,7 @@ PrimaryGeneratorMessenger::PrimaryGeneratorMessenger( PrimaryGeneratorAction* Gun) -:G4UImessenger(),fAction(Gun),fGunDir(0),fDefaultCmd(0),fRndmCmd(0) +:fAction(Gun) { fGunDir = new G4UIdirectory("/testem/gun/"); fGunDir->SetGuidance("gun control"); diff --git a/examples/extended/electromagnetic/TestEm11/src/Run.cc b/examples/extended/electromagnetic/TestEm11/src/Run.cc index 16ce1a62577..0bcfb8f9ee0 100644 --- a/examples/extended/electromagnetic/TestEm11/src/Run.cc +++ b/examples/extended/electromagnetic/TestEm11/src/Run.cc @@ -46,16 +46,13 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... Run::Run(DetectorConstruction* detector) -: G4Run(), - fDetector(detector), - fParticle(0), fEkin(0.), - fTrackLen(0.), fTrackLen2(0.), - fProjRange(0.), fProjRange2(0.), - fNbOfSteps(0), fNbOfSteps2(0), - fStepSize(0.), fStepSize2(0.) +: fDetector(detector) { - for (G4int i=0; i<3; ++i) { fStatus[i] = 0; fTotEdep[i] = 0.; } - fTotEdep[1] = joule; + for (G4int i=0; i<3; ++i) { + fStatus[i] = 0; fTotEdep[i] = fEleak[i] = fEtotal[i]= 0.; + } + fTotEdep[1] = fEleak[1] = fEtotal[1] = joule; + for (G4int i=0; i fTotEdep[2]) fTotEdep[2] = e; } } + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void Run::AddEleak (G4double e) +{ + if (e > 0.) { + fEleak[0] += e; + if (e < fEleak[1]) fEleak[1] = e; + if (e > fEleak[2]) fEleak[2] = e; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void Run::AddEtotal (G4double e) +{ + if (e > 0.) { + fEtotal[0] += e; + if (e < fEtotal[1]) fEtotal[1] = e; + if (e > fEtotal[2]) fEtotal[2] = e; + } +} + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void Run::AddTrackLength (G4double t) @@ -195,9 +210,21 @@ void Run::Merge(const G4Run* run) fTotEdep[0] += localRun->fTotEdep[0]; G4double min,max; min = localRun->fTotEdep[1]; max = localRun->fTotEdep[2]; -if (fTotEdep[1] > min) fTotEdep[1] = min; -if (fTotEdep[2] < max) fTotEdep[2] = max; - + if (fTotEdep[1] > min) fTotEdep[1] = min; + if (fTotEdep[2] < max) fTotEdep[2] = max; + + // Eleak + fEleak[0] += localRun->fEleak[0]; + min = localRun->fEleak[1]; max = localRun->fEleak[2]; + if (fEleak[1] > min) fEleak[1] = min; + if (fEleak[2] < max) fEleak[2] = max; + + // Etotal + fEtotal[0] += localRun->fEtotal[0]; + min = localRun->fEtotal[1]; max = localRun->fEtotal[2]; + if (fEtotal[1] > min) fEtotal[1] = min; + if (fEtotal[2] < max) fEtotal[2] = max; + G4Run::Merge(run); } @@ -238,6 +265,8 @@ void Run::EndOfRun() G4cout.precision(3); G4double rms (0); + //Edep in absorbers + // for (G4int i=1; i<= nbOfAbsor; i++) { fEdeposit[i] /= numberOfEvent; @@ -259,6 +288,24 @@ void Run::EndOfRun() << ")" << G4endl; } + //Eleak + // + fEleak[0] /= numberOfEvent; + G4cout + << " Energy leakage = " << G4BestUnit(fEleak[0],"Energy") + << "\t(" << G4BestUnit(fEleak[1], "Energy") + << "-->" << G4BestUnit(fEleak[2], "Energy") + << ")" << G4endl; + + //Etotal + // + fEtotal[0] /= numberOfEvent; + G4cout + << " Energy total = " << G4BestUnit(fEtotal[0],"Energy") + << "\t(" << G4BestUnit(fEtotal[1], "Energy") + << "-->" << G4BestUnit(fEtotal[2], "Energy") + << ")" << G4endl; + //compute track length of primary track // fTrackLen /= numberOfEvent; fTrackLen2 /= numberOfEvent; @@ -321,7 +368,7 @@ void Run::EndOfRun() G4cout << "\n absorbed = " << absorbed << " %" << " transmit = " << transmit << " %" - << " reflected = " << reflected << " %" << G4endl; + << " reflected = " << reflected << " % \n" << G4endl; // normalize histograms of longitudinal energy profile // diff --git a/examples/extended/electromagnetic/TestEm11/src/RunAction.cc b/examples/extended/electromagnetic/TestEm11/src/RunAction.cc index f921683bdf8..ff6ce6200cf 100644 --- a/examples/extended/electromagnetic/TestEm11/src/RunAction.cc +++ b/examples/extended/electromagnetic/TestEm11/src/RunAction.cc @@ -50,8 +50,7 @@ RunAction::RunAction(DetectorConstruction* det, PhysicsList* phys, PrimaryGeneratorAction* kin) -:G4UserRunAction(),fDetector(det),fPhysics(phys),fPrimary(kin),fRun(0), - fHistoManager(0) +:fDetector(det),fPhysics(phys),fPrimary(kin) { // Book predefined histograms fHistoManager = new HistoManager(); diff --git a/examples/extended/electromagnetic/TestEm11/src/StepMax.cc b/examples/extended/electromagnetic/TestEm11/src/StepMax.cc index e651bd352d5..1a939948139 100644 --- a/examples/extended/electromagnetic/TestEm11/src/StepMax.cc +++ b/examples/extended/electromagnetic/TestEm11/src/StepMax.cc @@ -36,7 +36,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... StepMax::StepMax(const G4String& processName, G4ProcessType type) - : G4VDiscreteProcess(processName,type),fMess(0) + : G4VDiscreteProcess(processName,type) { fMaxStep1 = fMaxStep2 = DBL_MAX; fApplyMaxStep2 = true; diff --git a/examples/extended/electromagnetic/TestEm11/src/StepMaxMessenger.cc b/examples/extended/electromagnetic/TestEm11/src/StepMaxMessenger.cc index 1f876397c12..d6bc8f4069b 100644 --- a/examples/extended/electromagnetic/TestEm11/src/StepMaxMessenger.cc +++ b/examples/extended/electromagnetic/TestEm11/src/StepMaxMessenger.cc @@ -39,9 +39,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... StepMaxMessenger::StepMaxMessenger(StepMax* stepM) -:G4UImessenger(),fStepMax(stepM), - fStepMax1Cmd(0), - fStepMax2Cmd(0) +:fStepMax(stepM) { fStepMax1Cmd = new G4UIcmdWithADoubleAndUnit("/testem/stepMax",this); fStepMax1Cmd->SetGuidance("Set max allowed step length"); diff --git a/examples/extended/electromagnetic/TestEm11/src/SteppingAction.cc b/examples/extended/electromagnetic/TestEm11/src/SteppingAction.cc index 4cfc17f343b..78762d78be7 100644 --- a/examples/extended/electromagnetic/TestEm11/src/SteppingAction.cc +++ b/examples/extended/electromagnetic/TestEm11/src/SteppingAction.cc @@ -43,12 +43,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... SteppingAction::SteppingAction(DetectorConstruction* det, EventAction* event) -:G4UserSteppingAction(),fDetector(det), fEventAction(event) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -SteppingAction::~SteppingAction() +:fDetector(det), fEventAction(event) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm11/src/TrackingAction.cc b/examples/extended/electromagnetic/TestEm11/src/TrackingAction.cc index a3a3825b0e6..781481e771a 100644 --- a/examples/extended/electromagnetic/TestEm11/src/TrackingAction.cc +++ b/examples/extended/electromagnetic/TestEm11/src/TrackingAction.cc @@ -34,15 +34,17 @@ #include "DetectorConstruction.hh" #include "Run.hh" +#include "EventAction.hh" #include "HistoManager.hh" #include "G4Track.hh" +#include "G4StepStatus.hh" #include "G4RunManager.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -TrackingAction::TrackingAction(DetectorConstruction* det) -:G4UserTrackingAction(),fDetector(det) +TrackingAction::TrackingAction(DetectorConstruction* det,EventAction* evt) +:fDetector(det),fEventAct(evt) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -84,13 +86,20 @@ void TrackingAction::PostUserTrackingAction(const G4Track* track) //status of primary particle : absorbed, transmited, reflected ? // if (trackID == 1) { - G4int status = 0; + G4int flag = 0; if (!track->GetNextVolume()) { - if (track->GetMomentumDirection().x() > 0.) status = 1; - else status = 2; + if (track->GetMomentumDirection().x() > 0.) flag = 1; + else flag = 2; } - run->AddTrackStatus(status); - } + run->AddTrackStatus(flag); + } + + // where are we ? + G4StepStatus status = track->GetStep()->GetPostStepPoint()->GetStepStatus(); + if (status == fWorldBoundary) { + G4double energy = track->GetKineticEnergy(); + fEventAct->AddEleak(energy); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm12/History b/examples/extended/electromagnetic/TestEm12/History index 43179d2866c..93f56905176 100644 --- a/examples/extended/electromagnetic/TestEm12/History +++ b/examples/extended/electromagnetic/TestEm12/History @@ -4,6 +4,8 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-05-12 Michel Maire (testem12-V11-01-00) +- revision of all headers ## 2021-12-10 Ben Morgan (testem12-V11-00-00) - Change to new Markdown History format diff --git a/examples/extended/electromagnetic/TestEm12/TestEm12.out b/examples/extended/electromagnetic/TestEm12/TestEm12.out index 2508549f6c9..4fcd3519f9e 100644 --- a/examples/extended/electromagnetic/TestEm12/TestEm12.out +++ b/examples/extended/electromagnetic/TestEm12/TestEm12.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -183,7 +183,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -216,7 +216,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -249,7 +249,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -262,7 +262,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -311,7 +310,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -344,7 +343,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -377,7 +376,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -410,7 +409,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -443,7 +442,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -476,7 +475,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -509,7 +508,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -543,7 +542,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.930000s Real=0.942069s Sys=0.000000s + User=0.830000s Real=0.838703s Sys=0.000000s ======================== run summary ===================== diff --git a/examples/extended/electromagnetic/TestEm12/include/ActionInitialization.hh b/examples/extended/electromagnetic/TestEm12/include/ActionInitialization.hh index 87c2f419fcc..10ab82947e4 100644 --- a/examples/extended/electromagnetic/TestEm12/include/ActionInitialization.hh +++ b/examples/extended/electromagnetic/TestEm12/include/ActionInitialization.hh @@ -42,14 +42,14 @@ class ActionInitialization : public G4VUserActionInitialization { public: ActionInitialization(DetectorConstruction*, PhysicsList* ); - ~ActionInitialization() override; + ~ActionInitialization() override = default; void BuildForMaster() const override; void Build() const override; private: - DetectorConstruction* fDetector; - PhysicsList* fPhysics; + DetectorConstruction* fDetector = nullptr; + PhysicsList* fPhysics = nullptr; }; #endif diff --git a/examples/extended/electromagnetic/TestEm12/include/DetectorConstruction.hh b/examples/extended/electromagnetic/TestEm12/include/DetectorConstruction.hh index ccb6826610e..2a01dd27dcf 100644 --- a/examples/extended/electromagnetic/TestEm12/include/DetectorConstruction.hh +++ b/examples/extended/electromagnetic/TestEm12/include/DetectorConstruction.hh @@ -50,7 +50,7 @@ class DetectorConstruction : public G4VUserDetectorConstruction public: DetectorConstruction(); - virtual ~DetectorConstruction(); + ~DetectorConstruction() override; public: @@ -58,7 +58,7 @@ class DetectorConstruction : public G4VUserDetectorConstruction void SetMaterial (G4String); void SetNbOfLayers (G4int nb); - virtual G4VPhysicalVolume* Construct(); + G4VPhysicalVolume* Construct() override; public: @@ -71,13 +71,13 @@ class DetectorConstruction : public G4VUserDetectorConstruction private: - G4double fAbsorRadius; - G4Material* fAbsorMaterial; - G4int fNbOfLayers; - G4double fLayerThickness; - G4VPhysicalVolume* fAbsor; + G4double fAbsorRadius = 0.; + G4Material* fAbsorMaterial = nullptr; + G4int fNbOfLayers = 0; + G4double fLayerThickness = 0.; + G4VPhysicalVolume* fAbsor = nullptr; - DetectorMessenger* fDetectorMessenger; + DetectorMessenger* fDetectorMessenger = nullptr; std::vector fLVolumes; std::vector fSpheres; diff --git a/examples/extended/electromagnetic/TestEm12/include/DetectorMessenger.hh b/examples/extended/electromagnetic/TestEm12/include/DetectorMessenger.hh index 3dbdaa5c8de..1296cfead60 100644 --- a/examples/extended/electromagnetic/TestEm12/include/DetectorMessenger.hh +++ b/examples/extended/electromagnetic/TestEm12/include/DetectorMessenger.hh @@ -49,19 +49,19 @@ class DetectorMessenger: public G4UImessenger public: DetectorMessenger(DetectorConstruction* ); - ~DetectorMessenger(); + ~DetectorMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; - G4UIdirectory* fTestemDir; - G4UIdirectory* fDetDir; - G4UIcmdWithAString* fMaterCmd; - G4UIcmdWithADoubleAndUnit* fRadiusCmd; - G4UIcmdWithAnInteger* fNbLayersCmd; + G4UIdirectory* fTestemDir = nullptr; + G4UIdirectory* fDetDir = nullptr; + G4UIcmdWithAString* fMaterCmd = nullptr; + G4UIcmdWithADoubleAndUnit* fRadiusCmd = nullptr; + G4UIcmdWithAnInteger* fNbLayersCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm12/include/EventAction.hh b/examples/extended/electromagnetic/TestEm12/include/EventAction.hh index b9d499fc67c..a09e863d787 100644 --- a/examples/extended/electromagnetic/TestEm12/include/EventAction.hh +++ b/examples/extended/electromagnetic/TestEm12/include/EventAction.hh @@ -41,17 +41,17 @@ class EventAction : public G4UserEventAction { public: - EventAction(); - ~EventAction(); + EventAction() = default; + ~EventAction() override = default; public: - virtual void BeginOfEventAction(const G4Event*); - virtual void EndOfEventAction(const G4Event*); + void BeginOfEventAction(const G4Event*) override; + void EndOfEventAction(const G4Event*) override; void AddEdep(G4double edep) {fTotalEdep += edep;}; private: - G4double fTotalEdep; + G4double fTotalEdep = 0.; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm12/include/HistoManager.hh b/examples/extended/electromagnetic/TestEm12/include/HistoManager.hh index de988ad5bf2..68089825eef 100644 --- a/examples/extended/electromagnetic/TestEm12/include/HistoManager.hh +++ b/examples/extended/electromagnetic/TestEm12/include/HistoManager.hh @@ -44,11 +44,11 @@ class HistoManager { public: HistoManager(); - ~HistoManager(); + ~HistoManager() = default; private: void Book(); - G4String fFileName; + G4String fFileName = "testem12"; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm12/include/PhysListEmStandard.hh b/examples/extended/electromagnetic/TestEm12/include/PhysListEmStandard.hh index a995660fdb8..74a78954bc4 100644 --- a/examples/extended/electromagnetic/TestEm12/include/PhysListEmStandard.hh +++ b/examples/extended/electromagnetic/TestEm12/include/PhysListEmStandard.hh @@ -43,16 +43,16 @@ class PhysListEmStandard : public G4VPhysicsConstructor { public: PhysListEmStandard(const G4String& name = "standard"); - ~PhysListEmStandard(); + ~PhysListEmStandard() override = default; public: // This method is dummy for physics - virtual void ConstructParticle() {}; + void ConstructParticle() override {}; // This method will be invoked in the Construct() method. // each physics process will be instantiated and // registered to the process manager of each particle type - virtual void ConstructProcess(); + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm12/include/PhysListEmStandardSSM.hh b/examples/extended/electromagnetic/TestEm12/include/PhysListEmStandardSSM.hh index 3c3f48cb7a3..6e5fd05a1e9 100644 --- a/examples/extended/electromagnetic/TestEm12/include/PhysListEmStandardSSM.hh +++ b/examples/extended/electromagnetic/TestEm12/include/PhysListEmStandardSSM.hh @@ -42,16 +42,16 @@ class PhysListEmStandardSSM : public G4VPhysicsConstructor { public: PhysListEmStandardSSM(const G4String& name = "standardSSM"); - ~PhysListEmStandardSSM(); + ~PhysListEmStandardSSM() override = default; public: // This method is dummy for physics - virtual void ConstructParticle() {}; + void ConstructParticle() override {}; // This method will be invoked in the Construct() method. // each physics process will be instantiated and // registered to the process manager of each particle type - virtual void ConstructProcess(); + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm12/include/PhysicsList.hh b/examples/extended/electromagnetic/TestEm12/include/PhysicsList.hh index 501050619a4..7fa95134002 100644 --- a/examples/extended/electromagnetic/TestEm12/include/PhysicsList.hh +++ b/examples/extended/electromagnetic/TestEm12/include/PhysicsList.hh @@ -50,23 +50,23 @@ class PhysicsList: public G4VModularPhysicsList { public: PhysicsList(); - ~PhysicsList(); + ~PhysicsList() override; - virtual void ConstructParticle(); + void ConstructParticle() override; void AddPhysicsList(const G4String& name); - virtual void ConstructProcess(); - + void ConstructProcess() override; void AddDecay(); - void AddStepMax(); + void AddStepMax(); + StepMax* GetStepMaxProcess() {return fStepMaxProcess;}; private: G4String fEmName; - G4VPhysicsConstructor* fEmPhysicsList; + G4VPhysicsConstructor* fEmPhysicsList = nullptr; static G4ThreadLocal StepMax* fStepMaxProcess; - PhysicsListMessenger* fMessenger; + PhysicsListMessenger* fMessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm12/include/PhysicsListMessenger.hh b/examples/extended/electromagnetic/TestEm12/include/PhysicsListMessenger.hh index 00bf955af77..c4d1275bbc8 100644 --- a/examples/extended/electromagnetic/TestEm12/include/PhysicsListMessenger.hh +++ b/examples/extended/electromagnetic/TestEm12/include/PhysicsListMessenger.hh @@ -47,16 +47,16 @@ class PhysicsListMessenger: public G4UImessenger public: PhysicsListMessenger(PhysicsList* ); - ~PhysicsListMessenger(); + ~PhysicsListMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - PhysicsList* fPhysicsList; + PhysicsList* fPhysicsList = nullptr; - G4UIdirectory* fPhysDir; - G4UIcmdWithAString* fListCmd; + G4UIdirectory* fPhysDir = nullptr; + G4UIcmdWithAString* fListCmd = nullptr; }; diff --git a/examples/extended/electromagnetic/TestEm12/include/PrimaryGeneratorAction.hh b/examples/extended/electromagnetic/TestEm12/include/PrimaryGeneratorAction.hh index e971a332ace..2840be61052 100644 --- a/examples/extended/electromagnetic/TestEm12/include/PrimaryGeneratorAction.hh +++ b/examples/extended/electromagnetic/TestEm12/include/PrimaryGeneratorAction.hh @@ -46,18 +46,18 @@ class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: PrimaryGeneratorAction(); - ~PrimaryGeneratorAction(); + ~PrimaryGeneratorAction() override; public: void SetRndmBeam(G4bool val) {fRndmBeam = val;} - virtual void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; G4ParticleGun* GetParticleGun() {return fParticleGun;} private: - G4ParticleGun* fParticleGun; - G4bool fRndmBeam; - PrimaryGeneratorMessenger* fGunMessenger; + G4ParticleGun* fParticleGun = nullptr; + G4bool fRndmBeam = true; + PrimaryGeneratorMessenger* fGunMessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm12/include/PrimaryGeneratorMessenger.hh b/examples/extended/electromagnetic/TestEm12/include/PrimaryGeneratorMessenger.hh index c78d0a5b49d..beff3f0fbd1 100644 --- a/examples/extended/electromagnetic/TestEm12/include/PrimaryGeneratorMessenger.hh +++ b/examples/extended/electromagnetic/TestEm12/include/PrimaryGeneratorMessenger.hh @@ -46,14 +46,14 @@ class PrimaryGeneratorMessenger: public G4UImessenger { public: PrimaryGeneratorMessenger(PrimaryGeneratorAction*); - ~PrimaryGeneratorMessenger(); + ~PrimaryGeneratorMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - PrimaryGeneratorAction* fAction; - G4UIdirectory* fGunDir; - G4UIcmdWithABool* fRndmCmd; + PrimaryGeneratorAction* fAction = nullptr; + G4UIdirectory* fGunDir = nullptr; + G4UIcmdWithABool* fRndmCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm12/include/Run.hh b/examples/extended/electromagnetic/TestEm12/include/Run.hh index 1b5c4f8bf34..9acd7834fc4 100644 --- a/examples/extended/electromagnetic/TestEm12/include/Run.hh +++ b/examples/extended/electromagnetic/TestEm12/include/Run.hh @@ -46,7 +46,7 @@ class Run : public G4Run { public: Run(DetectorConstruction* detector); - ~Run(); + ~Run() override = default; public: void SetPrimary(G4ParticleDefinition* particle, G4double energy); @@ -59,21 +59,21 @@ class Run : public G4Run void SetCsdaRange (G4double value); G4double GetCsdaRange(); - virtual void Merge(const G4Run*); + void Merge(const G4Run*) override; void EndOfRun(); private: - DetectorConstruction* fDetector; - G4ParticleDefinition* fParticle; - G4double fEkin; + DetectorConstruction* fDetector = nullptr; + G4ParticleDefinition* fParticle = nullptr; + G4double fEkin = 0.; - G4double fEdeposit, fEdeposit2; - G4double fTrackLen, fTrackLen2; - G4double fProjRange, fProjRange2; - G4int fNbOfSteps, fNbOfSteps2; - G4double fStepSize, fStepSize2; + G4double fEdeposit = 0., fEdeposit2 = 0.; + G4double fTrackLen = 0., fTrackLen2 = 0.; + G4double fProjRange = 0., fProjRange2 = 0.; + G4int fNbOfSteps = 0, fNbOfSteps2 = 0; + G4double fStepSize = 0., fStepSize2 = 0.; - G4double fCsdaRange; + G4double fCsdaRange = 0.; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm12/include/RunAction.hh b/examples/extended/electromagnetic/TestEm12/include/RunAction.hh index cc6bfa2ef11..7abf3fb5dcf 100644 --- a/examples/extended/electromagnetic/TestEm12/include/RunAction.hh +++ b/examples/extended/electromagnetic/TestEm12/include/RunAction.hh @@ -48,19 +48,19 @@ class RunAction : public G4UserRunAction { public: RunAction(DetectorConstruction*, PhysicsList*, PrimaryGeneratorAction*); - ~RunAction(); + ~RunAction() override; public: - virtual void BeginOfRunAction(const G4Run*); - virtual void EndOfRunAction(const G4Run*); - virtual G4Run* GenerateRun(); + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; + G4Run* GenerateRun() override; private: - DetectorConstruction* fDetector; - PhysicsList* fPhysics; - PrimaryGeneratorAction* fPrimary; - Run* fRun; - HistoManager* fHistoManager; + DetectorConstruction* fDetector = nullptr; + PhysicsList* fPhysics = nullptr; + PrimaryGeneratorAction* fPrimary = nullptr; + Run* fRun = nullptr; + HistoManager* fHistoManager = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm12/include/StepMax.hh b/examples/extended/electromagnetic/TestEm12/include/StepMax.hh index abd93536f40..07cf56e38a1 100644 --- a/examples/extended/electromagnetic/TestEm12/include/StepMax.hh +++ b/examples/extended/electromagnetic/TestEm12/include/StepMax.hh @@ -48,21 +48,21 @@ class StepMax : public G4VDiscreteProcess StepMax(const G4String& processName = "UserMaxStep", G4ProcessType type = fUserDefined); - ~StepMax(); + ~StepMax() override; - virtual G4bool IsApplicable(const G4ParticleDefinition&); + G4bool IsApplicable(const G4ParticleDefinition&) override; void SetMaxStep1(G4double); void SetMaxStep2(G4double); void ApplyMaxStep2(G4bool); - virtual G4double PostStepGetPhysicalInteractionLength(const G4Track& track, - G4double previousStepSize, - G4ForceCondition* condition); + G4double PostStepGetPhysicalInteractionLength(const G4Track& track, + G4double previousStepSize, + G4ForceCondition* condition) override; - virtual G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&); + G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&) override; - virtual G4double GetMeanFreePath(const G4Track&,G4double,G4ForceCondition*) + G4double GetMeanFreePath(const G4Track&,G4double,G4ForceCondition*) override {return DBL_MAX;}; private: @@ -71,7 +71,7 @@ class StepMax : public G4VDiscreteProcess G4double fMaxStep2; G4bool fApplyMaxStep2; - StepMaxMessenger* fMess; + StepMaxMessenger* fMess = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm12/include/StepMaxMessenger.hh b/examples/extended/electromagnetic/TestEm12/include/StepMaxMessenger.hh index 27268479e07..faf0ce74564 100644 --- a/examples/extended/electromagnetic/TestEm12/include/StepMaxMessenger.hh +++ b/examples/extended/electromagnetic/TestEm12/include/StepMaxMessenger.hh @@ -46,14 +46,14 @@ class StepMaxMessenger: public G4UImessenger { public: StepMaxMessenger(StepMax*); - ~StepMaxMessenger(); + ~StepMaxMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - StepMax* fStepMax; - G4UIcmdWithADoubleAndUnit* fStepMax1Cmd; - G4UIcmdWithABool* fStepMax2Cmd; + StepMax* fStepMax = nullptr; + G4UIcmdWithADoubleAndUnit* fStepMax1Cmd = nullptr; + G4UIcmdWithABool* fStepMax2Cmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm12/include/SteppingAction.hh b/examples/extended/electromagnetic/TestEm12/include/SteppingAction.hh index 82c45522468..bd7a9a4abc5 100644 --- a/examples/extended/electromagnetic/TestEm12/include/SteppingAction.hh +++ b/examples/extended/electromagnetic/TestEm12/include/SteppingAction.hh @@ -43,12 +43,12 @@ class SteppingAction : public G4UserSteppingAction { public: SteppingAction(EventAction*); - ~SteppingAction(); + ~SteppingAction() override = default; - virtual void UserSteppingAction(const G4Step*); + void UserSteppingAction(const G4Step*) override; private: - EventAction* fEventAction; + EventAction* fEventAction = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm12/include/TrackingAction.hh b/examples/extended/electromagnetic/TestEm12/include/TrackingAction.hh index 7d1e06aed42..3d3cbf3e3b5 100644 --- a/examples/extended/electromagnetic/TestEm12/include/TrackingAction.hh +++ b/examples/extended/electromagnetic/TestEm12/include/TrackingAction.hh @@ -44,12 +44,12 @@ class TrackingAction : public G4UserTrackingAction { public: TrackingAction(PrimaryGeneratorAction*); - ~TrackingAction() {}; + ~TrackingAction() override = default; - virtual void PostUserTrackingAction(const G4Track*); + void PostUserTrackingAction(const G4Track*) override; private: - PrimaryGeneratorAction* fPrimary; + PrimaryGeneratorAction* fPrimary = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm12/src/ActionInitialization.cc b/examples/extended/electromagnetic/TestEm12/src/ActionInitialization.cc index eae483929c7..9a5aedf8615 100644 --- a/examples/extended/electromagnetic/TestEm12/src/ActionInitialization.cc +++ b/examples/extended/electromagnetic/TestEm12/src/ActionInitialization.cc @@ -38,21 +38,14 @@ ActionInitialization::ActionInitialization(DetectorConstruction* detector, PhysicsList* physics) - : G4VUserActionInitialization(), - fDetector(detector), - fPhysics(physics) -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -ActionInitialization::~ActionInitialization() -{} + : fDetector(detector), fPhysics(physics) +{ } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ActionInitialization::BuildForMaster() const { - RunAction* runAction = new RunAction(fDetector, fPhysics, 0); + RunAction* runAction = new RunAction(fDetector, fPhysics, nullptr); SetUserAction(runAction); } diff --git a/examples/extended/electromagnetic/TestEm12/src/DetectorConstruction.cc b/examples/extended/electromagnetic/TestEm12/src/DetectorConstruction.cc index 2b7e97cb8c5..b00e79cdbd5 100644 --- a/examples/extended/electromagnetic/TestEm12/src/DetectorConstruction.cc +++ b/examples/extended/electromagnetic/TestEm12/src/DetectorConstruction.cc @@ -53,9 +53,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorConstruction::DetectorConstruction() - : G4VUserDetectorConstruction(), - fAbsorMaterial(nullptr), - fAbsor(nullptr) { // default parameter values fAbsorRadius = 3*cm; diff --git a/examples/extended/electromagnetic/TestEm12/src/DetectorMessenger.cc b/examples/extended/electromagnetic/TestEm12/src/DetectorMessenger.cc index c1c664ec605..6eec9efd1b1 100644 --- a/examples/extended/electromagnetic/TestEm12/src/DetectorMessenger.cc +++ b/examples/extended/electromagnetic/TestEm12/src/DetectorMessenger.cc @@ -41,12 +41,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorMessenger::DetectorMessenger(DetectorConstruction * Det) -:G4UImessenger(),fDetector(Det), - fTestemDir(0), - fDetDir(0), - fMaterCmd(0), - fRadiusCmd(0), - fNbLayersCmd(0) +:fDetector(Det) { fTestemDir = new G4UIdirectory("/testem/"); fTestemDir->SetGuidance(" detector control."); diff --git a/examples/extended/electromagnetic/TestEm12/src/EventAction.cc b/examples/extended/electromagnetic/TestEm12/src/EventAction.cc index ecabb4f6904..69ef8e1b010 100644 --- a/examples/extended/electromagnetic/TestEm12/src/EventAction.cc +++ b/examples/extended/electromagnetic/TestEm12/src/EventAction.cc @@ -39,17 +39,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -EventAction::EventAction() -:G4UserEventAction() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -EventAction::~EventAction() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void EventAction::BeginOfEventAction(const G4Event*) { //energy deposited per event diff --git a/examples/extended/electromagnetic/TestEm12/src/HistoManager.cc b/examples/extended/electromagnetic/TestEm12/src/HistoManager.cc index 40721abaf53..841c986a327 100644 --- a/examples/extended/electromagnetic/TestEm12/src/HistoManager.cc +++ b/examples/extended/electromagnetic/TestEm12/src/HistoManager.cc @@ -37,19 +37,12 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... HistoManager::HistoManager() - : fFileName("testem12") { Book(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -HistoManager::~HistoManager() -{ -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void HistoManager::Book() { // Create or get analysis manager diff --git a/examples/extended/electromagnetic/TestEm12/src/PhysListEmStandard.cc b/examples/extended/electromagnetic/TestEm12/src/PhysListEmStandard.cc index 248dbc7f721..876dc20e865 100644 --- a/examples/extended/electromagnetic/TestEm12/src/PhysListEmStandard.cc +++ b/examples/extended/electromagnetic/TestEm12/src/PhysListEmStandard.cc @@ -88,11 +88,6 @@ PhysListEmStandard::PhysListEmStandard(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysListEmStandard::~PhysListEmStandard() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysListEmStandard::ConstructProcess() { G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); diff --git a/examples/extended/electromagnetic/TestEm12/src/PhysListEmStandardSSM.cc b/examples/extended/electromagnetic/TestEm12/src/PhysListEmStandardSSM.cc index 3c5b9cdf5e1..4cc1d37011d 100644 --- a/examples/extended/electromagnetic/TestEm12/src/PhysListEmStandardSSM.cc +++ b/examples/extended/electromagnetic/TestEm12/src/PhysListEmStandardSSM.cc @@ -61,12 +61,7 @@ PhysListEmStandardSSM::PhysListEmStandardSSM(const G4String& name) : G4VPhysicsConstructor(name) -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -PhysListEmStandardSSM::~PhysListEmStandardSSM() -{} +{ } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm12/src/PhysicsList.cc b/examples/extended/electromagnetic/TestEm12/src/PhysicsList.cc index 07c51585b24..582e34b2702 100644 --- a/examples/extended/electromagnetic/TestEm12/src/PhysicsList.cc +++ b/examples/extended/electromagnetic/TestEm12/src/PhysicsList.cc @@ -75,7 +75,7 @@ G4ThreadLocal StepMax* PhysicsList::fStepMaxProcess = nullptr; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::PhysicsList() : G4VModularPhysicsList() +PhysicsList::PhysicsList() { fMessenger = new PhysicsListMessenger(this); diff --git a/examples/extended/electromagnetic/TestEm12/src/PhysicsListMessenger.cc b/examples/extended/electromagnetic/TestEm12/src/PhysicsListMessenger.cc index de81ee11338..cc8770c4250 100644 --- a/examples/extended/electromagnetic/TestEm12/src/PhysicsListMessenger.cc +++ b/examples/extended/electromagnetic/TestEm12/src/PhysicsListMessenger.cc @@ -40,8 +40,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysicsListMessenger::PhysicsListMessenger(PhysicsList* pPhys) -:G4UImessenger(),fPhysicsList(pPhys), - fPhysDir(0), fListCmd(0) +:fPhysicsList(pPhys) { fPhysDir = new G4UIdirectory("/testem/phys/"); fPhysDir->SetGuidance("physics list commands"); diff --git a/examples/extended/electromagnetic/TestEm12/src/PrimaryGeneratorAction.cc b/examples/extended/electromagnetic/TestEm12/src/PrimaryGeneratorAction.cc index 7738aeabab6..7dacbe0b152 100644 --- a/examples/extended/electromagnetic/TestEm12/src/PrimaryGeneratorAction.cc +++ b/examples/extended/electromagnetic/TestEm12/src/PrimaryGeneratorAction.cc @@ -45,10 +45,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PrimaryGeneratorAction::PrimaryGeneratorAction() -:G4VUserPrimaryGeneratorAction(), - fParticleGun(0), - fRndmBeam(0), - fGunMessenger(0) { fParticleGun = new G4ParticleGun(1); G4ParticleDefinition* particle @@ -57,8 +53,6 @@ PrimaryGeneratorAction::PrimaryGeneratorAction() fParticleGun->SetParticleEnergy(4*MeV); fParticleGun->SetParticlePosition(G4ThreeVector()); fParticleGun->SetParticleMomentumDirection(G4ThreeVector(1,0,0)); - - fRndmBeam = true; //create a messenger for this class fGunMessenger = new PrimaryGeneratorMessenger(this); diff --git a/examples/extended/electromagnetic/TestEm12/src/PrimaryGeneratorMessenger.cc b/examples/extended/electromagnetic/TestEm12/src/PrimaryGeneratorMessenger.cc index d350f6a7f45..bfdebf6759f 100644 --- a/examples/extended/electromagnetic/TestEm12/src/PrimaryGeneratorMessenger.cc +++ b/examples/extended/electromagnetic/TestEm12/src/PrimaryGeneratorMessenger.cc @@ -40,9 +40,7 @@ PrimaryGeneratorMessenger::PrimaryGeneratorMessenger( PrimaryGeneratorAction* Gun) -:G4UImessenger(),fAction(Gun), - fGunDir(0), - fRndmCmd(0) +:fAction(Gun) { fGunDir = new G4UIdirectory("/testem/gun/"); fGunDir->SetGuidance("gun control"); diff --git a/examples/extended/electromagnetic/TestEm12/src/Run.cc b/examples/extended/electromagnetic/TestEm12/src/Run.cc index 385e350fa01..d0a12bf9c21 100644 --- a/examples/extended/electromagnetic/TestEm12/src/Run.cc +++ b/examples/extended/electromagnetic/TestEm12/src/Run.cc @@ -43,20 +43,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... Run::Run(DetectorConstruction* detector) -: G4Run(), - fDetector(detector), - fParticle(0), fEkin(0.), - fEdeposit(0.), fEdeposit2(0.), - fTrackLen(0.), fTrackLen2(0.), - fProjRange(0.), fProjRange2(0.), - fNbOfSteps(0), fNbOfSteps2(0), - fStepSize(0.), fStepSize2(0.), - fCsdaRange(0.) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -Run::~Run() +: fDetector(detector) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm12/src/RunAction.cc b/examples/extended/electromagnetic/TestEm12/src/RunAction.cc index d9499497d02..46a196b4a1c 100644 --- a/examples/extended/electromagnetic/TestEm12/src/RunAction.cc +++ b/examples/extended/electromagnetic/TestEm12/src/RunAction.cc @@ -47,8 +47,7 @@ RunAction::RunAction(DetectorConstruction* det, PhysicsList* phys, PrimaryGeneratorAction* kin) -:G4UserRunAction(), - fDetector(det),fPhysics(phys),fPrimary(kin),fRun(0),fHistoManager(0) +: fDetector(det),fPhysics(phys),fPrimary(kin) { // Book predefined histograms fHistoManager = new HistoManager(); diff --git a/examples/extended/electromagnetic/TestEm12/src/StepMax.cc b/examples/extended/electromagnetic/TestEm12/src/StepMax.cc index a346b1bb949..cbfd0e94d61 100644 --- a/examples/extended/electromagnetic/TestEm12/src/StepMax.cc +++ b/examples/extended/electromagnetic/TestEm12/src/StepMax.cc @@ -36,7 +36,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... StepMax::StepMax(const G4String& processName, G4ProcessType type) - : G4VDiscreteProcess(processName,type),fMess(0) + : G4VDiscreteProcess(processName,type) { fMaxStep1 = fMaxStep2 = DBL_MAX; fApplyMaxStep2 = true; diff --git a/examples/extended/electromagnetic/TestEm12/src/StepMaxMessenger.cc b/examples/extended/electromagnetic/TestEm12/src/StepMaxMessenger.cc index 61690e1b3a8..991d30453d9 100644 --- a/examples/extended/electromagnetic/TestEm12/src/StepMaxMessenger.cc +++ b/examples/extended/electromagnetic/TestEm12/src/StepMaxMessenger.cc @@ -39,9 +39,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... StepMaxMessenger::StepMaxMessenger(StepMax* stepM) -:G4UImessenger(),fStepMax(stepM), - fStepMax1Cmd(0), - fStepMax2Cmd(0) +: fStepMax(stepM) { fStepMax1Cmd = new G4UIcmdWithADoubleAndUnit("/testem/stepMax",this); fStepMax1Cmd->SetGuidance("Set max allowed step length"); diff --git a/examples/extended/electromagnetic/TestEm12/src/SteppingAction.cc b/examples/extended/electromagnetic/TestEm12/src/SteppingAction.cc index c32c716c408..322592a4ede 100644 --- a/examples/extended/electromagnetic/TestEm12/src/SteppingAction.cc +++ b/examples/extended/electromagnetic/TestEm12/src/SteppingAction.cc @@ -40,13 +40,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... SteppingAction::SteppingAction(EventAction* event) -:G4UserSteppingAction(), - fEventAction(event) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -SteppingAction::~SteppingAction() +: fEventAction(event) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm12/src/TrackingAction.cc b/examples/extended/electromagnetic/TestEm12/src/TrackingAction.cc index 6c7e436b753..356f6d8fb16 100644 --- a/examples/extended/electromagnetic/TestEm12/src/TrackingAction.cc +++ b/examples/extended/electromagnetic/TestEm12/src/TrackingAction.cc @@ -41,8 +41,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... TrackingAction::TrackingAction(PrimaryGeneratorAction* prim) -:G4UserTrackingAction(), - fPrimary(prim) +: fPrimary(prim) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm13/History b/examples/extended/electromagnetic/TestEm13/History index 7511fc06c5a..9d2a211bc5c 100644 --- a/examples/extended/electromagnetic/TestEm13/History +++ b/examples/extended/electromagnetic/TestEm13/History @@ -4,6 +4,8 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-05-10 Michel Maire (testem13-V11-01-00) +- revision of all headers ## 2021-12-10 Ben Morgan (testem13-V11-00-00) - Change to new Markdown History format diff --git a/examples/extended/electromagnetic/TestEm13/TestEm13.out b/examples/extended/electromagnetic/TestEm13/TestEm13.out index e4a1d42c159..152a7f4d9b7 100644 --- a/examples/extended/electromagnetic/TestEm13/TestEm13.out +++ b/examples/extended/electromagnetic/TestEm13/TestEm13.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -183,7 +183,7 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 1000000 - User=2.050000s Real=2.061312s Sys=0.000000s + User=1.980000s Real=1.989883s Sys=0.000000s ======================== run summary ====================== @@ -250,7 +250,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000000 - User=2.550000s Real=2.573390s Sys=0.000000s + User=2.190000s Real=2.200987s Sys=0.000000s ======================== run summary ====================== diff --git a/examples/extended/electromagnetic/TestEm13/include/ActionInitialization.hh b/examples/extended/electromagnetic/TestEm13/include/ActionInitialization.hh index b104804d908..172372ba0d8 100644 --- a/examples/extended/electromagnetic/TestEm13/include/ActionInitialization.hh +++ b/examples/extended/electromagnetic/TestEm13/include/ActionInitialization.hh @@ -41,13 +41,13 @@ class ActionInitialization : public G4VUserActionInitialization { public: ActionInitialization(DetectorConstruction*); - ~ActionInitialization() override; + ~ActionInitialization() override = default; void BuildForMaster() const override; void Build() const override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; }; #endif diff --git a/examples/extended/electromagnetic/TestEm13/include/DetectorConstruction.hh b/examples/extended/electromagnetic/TestEm13/include/DetectorConstruction.hh index 6e26718205a..6f3178c004c 100644 --- a/examples/extended/electromagnetic/TestEm13/include/DetectorConstruction.hh +++ b/examples/extended/electromagnetic/TestEm13/include/DetectorConstruction.hh @@ -47,11 +47,11 @@ class DetectorConstruction : public G4VUserDetectorConstruction public: DetectorConstruction(); - ~DetectorConstruction(); + ~DetectorConstruction() override; public: - virtual G4VPhysicalVolume* Construct(); + G4VPhysicalVolume* Construct() override; void SetSize (G4double); void SetMaterial (G4String); @@ -68,13 +68,13 @@ class DetectorConstruction : public G4VUserDetectorConstruction private: - G4VPhysicalVolume* fPBox; - G4LogicalVolume* fLBox; + G4VPhysicalVolume* fPBox = nullptr; + G4LogicalVolume* fLBox = nullptr; - G4double fBoxSize; - G4Material* fMaterial; + G4double fBoxSize = 0.; + G4Material* fMaterial = nullptr; - DetectorMessenger* fDetectorMessenger; + DetectorMessenger* fDetectorMessenger = nullptr; private: diff --git a/examples/extended/electromagnetic/TestEm13/include/DetectorMessenger.hh b/examples/extended/electromagnetic/TestEm13/include/DetectorMessenger.hh index 2dc66dc433c..4d78163d6f2 100644 --- a/examples/extended/electromagnetic/TestEm13/include/DetectorMessenger.hh +++ b/examples/extended/electromagnetic/TestEm13/include/DetectorMessenger.hh @@ -48,18 +48,18 @@ class DetectorMessenger: public G4UImessenger public: DetectorMessenger(DetectorConstruction* ); - ~DetectorMessenger(); + ~DetectorMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; - G4UIdirectory* fTestemDir; - G4UIdirectory* fDetDir; - G4UIcmdWithAString* fMaterCmd; - G4UIcmdWithADoubleAndUnit* fSizeCmd; + G4UIdirectory* fTestemDir = nullptr; + G4UIdirectory* fDetDir = nullptr; + G4UIcmdWithAString* fMaterCmd = nullptr; + G4UIcmdWithADoubleAndUnit* fSizeCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm13/include/PhysListEmLivermore.hh b/examples/extended/electromagnetic/TestEm13/include/PhysListEmLivermore.hh index 195273f3eaf..207b0681d9d 100644 --- a/examples/extended/electromagnetic/TestEm13/include/PhysListEmLivermore.hh +++ b/examples/extended/electromagnetic/TestEm13/include/PhysListEmLivermore.hh @@ -42,16 +42,16 @@ class PhysListEmLivermore : public G4VPhysicsConstructor { public: PhysListEmLivermore(const G4String& name = "livermore"); - ~PhysListEmLivermore(); + ~PhysListEmLivermore() override = default; public: // This method is dummy for physics - virtual void ConstructParticle() {}; + void ConstructParticle() override {}; // This method will be invoked in the Construct() method. // each physics process will be instantiated and // registered to the process manager of each particle type - virtual void ConstructProcess(); + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm13/include/PhysListEmPenelope.hh b/examples/extended/electromagnetic/TestEm13/include/PhysListEmPenelope.hh index 227da53ee7b..2a127680186 100644 --- a/examples/extended/electromagnetic/TestEm13/include/PhysListEmPenelope.hh +++ b/examples/extended/electromagnetic/TestEm13/include/PhysListEmPenelope.hh @@ -42,16 +42,16 @@ class PhysListEmPenelope : public G4VPhysicsConstructor { public: PhysListEmPenelope(const G4String& name = "penelope"); - ~PhysListEmPenelope(); + ~PhysListEmPenelope() override = default; public: // This method is dummy for physics - virtual void ConstructParticle() {}; + void ConstructParticle() override {}; // This method will be invoked in the Construct() method. // each physics process will be instantiated and // registered to the process manager of each particle type - virtual void ConstructProcess(); + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm13/include/PhysListEmStandard.hh b/examples/extended/electromagnetic/TestEm13/include/PhysListEmStandard.hh index 1afc926c241..fa9232eefec 100644 --- a/examples/extended/electromagnetic/TestEm13/include/PhysListEmStandard.hh +++ b/examples/extended/electromagnetic/TestEm13/include/PhysListEmStandard.hh @@ -42,16 +42,16 @@ class PhysListEmStandard : public G4VPhysicsConstructor { public: PhysListEmStandard(const G4String& name = "standard"); - ~PhysListEmStandard(); + ~PhysListEmStandard() override = default; public: // This method is dummy for physics - virtual void ConstructParticle() {}; + void ConstructParticle() override {}; // This method will be invoked in the Construct() method. // each physics process will be instantiated and // registered to the process manager of each particle type - virtual void ConstructProcess(); + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm13/include/PhysicsList.hh b/examples/extended/electromagnetic/TestEm13/include/PhysicsList.hh index 8f81a1a7602..bda41ccd52a 100644 --- a/examples/extended/electromagnetic/TestEm13/include/PhysicsList.hh +++ b/examples/extended/electromagnetic/TestEm13/include/PhysicsList.hh @@ -27,7 +27,6 @@ /// \brief Definition of the PhysicsList class // // -// //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // // 14.10.02 (V.Ivanchenko) provide modular list on base of old PhysicsList @@ -50,18 +49,18 @@ class PhysicsList: public G4VModularPhysicsList { public: PhysicsList(); - ~PhysicsList(); + ~PhysicsList() override; - virtual void ConstructParticle(); - virtual void ConstructProcess(); + void ConstructParticle() override; + void ConstructProcess() override; void AddPhysicsList(const G4String& name); - virtual void SetCuts(); + void SetCuts() override; private: - G4VPhysicsConstructor* fEmPhysicsList; + G4VPhysicsConstructor* fEmPhysicsList = nullptr; G4String fEmName; - PhysicsListMessenger* fMessenger; + PhysicsListMessenger* fMessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm13/include/PhysicsListMessenger.hh b/examples/extended/electromagnetic/TestEm13/include/PhysicsListMessenger.hh index 569d980091a..aa6b9a83803 100644 --- a/examples/extended/electromagnetic/TestEm13/include/PhysicsListMessenger.hh +++ b/examples/extended/electromagnetic/TestEm13/include/PhysicsListMessenger.hh @@ -47,16 +47,16 @@ class PhysicsListMessenger: public G4UImessenger public: PhysicsListMessenger(PhysicsList* ); - ~PhysicsListMessenger(); + ~PhysicsListMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - PhysicsList* fPhysicsList; + PhysicsList* fPhysicsList = nullptr; - G4UIdirectory* fPhysDir; - G4UIcmdWithAString* fListCmd; + G4UIdirectory* fPhysDir = nullptr; + G4UIcmdWithAString* fListCmd = nullptr; }; diff --git a/examples/extended/electromagnetic/TestEm13/include/PrimaryGeneratorAction.hh b/examples/extended/electromagnetic/TestEm13/include/PrimaryGeneratorAction.hh index c5e1f61f6ca..436fd2a3f7d 100644 --- a/examples/extended/electromagnetic/TestEm13/include/PrimaryGeneratorAction.hh +++ b/examples/extended/electromagnetic/TestEm13/include/PrimaryGeneratorAction.hh @@ -46,15 +46,15 @@ class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: PrimaryGeneratorAction(DetectorConstruction*); - ~PrimaryGeneratorAction(); + ~PrimaryGeneratorAction() override; public: - virtual void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; G4ParticleGun* GetParticleGun() {return fParticleGun;}; private: - G4ParticleGun* fParticleGun; - DetectorConstruction* fDetector; + G4ParticleGun* fParticleGun = nullptr; + DetectorConstruction* fDetector = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm13/include/Run.hh b/examples/extended/electromagnetic/TestEm13/include/Run.hh index e31ed261d76..542b9c627fb 100644 --- a/examples/extended/electromagnetic/TestEm13/include/Run.hh +++ b/examples/extended/electromagnetic/TestEm13/include/Run.hh @@ -46,20 +46,20 @@ class Run : public G4Run { public: Run(DetectorConstruction*); - ~Run(); + ~Run() override = default; public: void SetPrimary(G4ParticleDefinition* particle, G4double energy); - void CountProcesses(G4String procName); - virtual void Merge(const G4Run*); + void CountProcesses(G4String procName); + void Merge(const G4Run*) override; void EndOfRun(); private: - DetectorConstruction* fDetector; - G4ParticleDefinition* fParticle; - G4double fEkin; + DetectorConstruction* fDetector = nullptr; + G4ParticleDefinition* fParticle = nullptr; + G4double fEkin = 0.; - std::map fProcCounter; + std::map fProcCounter; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm13/include/RunAction.hh b/examples/extended/electromagnetic/TestEm13/include/RunAction.hh index 1743ba0c24b..10c4d51d3e8 100644 --- a/examples/extended/electromagnetic/TestEm13/include/RunAction.hh +++ b/examples/extended/electromagnetic/TestEm13/include/RunAction.hh @@ -48,17 +48,17 @@ class RunAction : public G4UserRunAction { public: RunAction(DetectorConstruction*, PrimaryGeneratorAction*); - ~RunAction(); + ~RunAction() override = default; public: - virtual G4Run* GenerateRun(); - virtual void BeginOfRunAction(const G4Run*); - virtual void EndOfRunAction(const G4Run*); + G4Run* GenerateRun() override; + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; private: - DetectorConstruction* fDetector; - PrimaryGeneratorAction* fPrimary; - Run* fRun; + DetectorConstruction* fDetector = nullptr; + PrimaryGeneratorAction* fPrimary = nullptr; + Run* fRun = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm13/include/SteppingAction.hh b/examples/extended/electromagnetic/TestEm13/include/SteppingAction.hh index 0c1a395508b..8d887e76f15 100644 --- a/examples/extended/electromagnetic/TestEm13/include/SteppingAction.hh +++ b/examples/extended/electromagnetic/TestEm13/include/SteppingAction.hh @@ -41,10 +41,10 @@ class SteppingAction : public G4UserSteppingAction { public: - SteppingAction(); - ~SteppingAction(); + SteppingAction() = default; + ~SteppingAction() override = default; - virtual void UserSteppingAction(const G4Step*); + void UserSteppingAction(const G4Step*) override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm13/src/ActionInitialization.cc b/examples/extended/electromagnetic/TestEm13/src/ActionInitialization.cc index a516b1ea34e..0e734fafdb0 100644 --- a/examples/extended/electromagnetic/TestEm13/src/ActionInitialization.cc +++ b/examples/extended/electromagnetic/TestEm13/src/ActionInitialization.cc @@ -36,12 +36,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ActionInitialization::ActionInitialization(DetectorConstruction* det) - : G4VUserActionInitialization(),fDetector(det) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -ActionInitialization::~ActionInitialization() + : fDetector(det) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm13/src/DetectorConstruction.cc b/examples/extended/electromagnetic/TestEm13/src/DetectorConstruction.cc index 8dd34f658be..830063bb1df 100644 --- a/examples/extended/electromagnetic/TestEm13/src/DetectorConstruction.cc +++ b/examples/extended/electromagnetic/TestEm13/src/DetectorConstruction.cc @@ -51,8 +51,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorConstruction::DetectorConstruction() -:G4VUserDetectorConstruction(),fPBox(0), fLBox(0), fMaterial(0), - fDetectorMessenger(0) { fBoxSize = 1*cm; DefineMaterials(); diff --git a/examples/extended/electromagnetic/TestEm13/src/DetectorMessenger.cc b/examples/extended/electromagnetic/TestEm13/src/DetectorMessenger.cc index 480a982e445..ef1cba76c40 100644 --- a/examples/extended/electromagnetic/TestEm13/src/DetectorMessenger.cc +++ b/examples/extended/electromagnetic/TestEm13/src/DetectorMessenger.cc @@ -40,11 +40,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorMessenger::DetectorMessenger(DetectorConstruction * Det) -:G4UImessenger(),fDetector(Det), - fTestemDir(0), - fDetDir(0), - fMaterCmd(0), - fSizeCmd(0) +:fDetector(Det) { fTestemDir = new G4UIdirectory("/testem/"); fTestemDir->SetGuidance("commands specific to this example"); diff --git a/examples/extended/electromagnetic/TestEm13/src/PhysListEmLivermore.cc b/examples/extended/electromagnetic/TestEm13/src/PhysListEmLivermore.cc index 82ef40f11cf..27e0352a1bc 100644 --- a/examples/extended/electromagnetic/TestEm13/src/PhysListEmLivermore.cc +++ b/examples/extended/electromagnetic/TestEm13/src/PhysListEmLivermore.cc @@ -98,11 +98,6 @@ PhysListEmLivermore::PhysListEmLivermore(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysListEmLivermore::~PhysListEmLivermore() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysListEmLivermore::ConstructProcess() { // Add Livermore EM Processes diff --git a/examples/extended/electromagnetic/TestEm13/src/PhysListEmPenelope.cc b/examples/extended/electromagnetic/TestEm13/src/PhysListEmPenelope.cc index 3d6dbf03969..fb540a406fd 100644 --- a/examples/extended/electromagnetic/TestEm13/src/PhysListEmPenelope.cc +++ b/examples/extended/electromagnetic/TestEm13/src/PhysListEmPenelope.cc @@ -99,11 +99,6 @@ PhysListEmPenelope::PhysListEmPenelope(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysListEmPenelope::~PhysListEmPenelope() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysListEmPenelope::ConstructProcess() { // Add standard EM Processes diff --git a/examples/extended/electromagnetic/TestEm13/src/PhysListEmStandard.cc b/examples/extended/electromagnetic/TestEm13/src/PhysListEmStandard.cc index e2e3c658a5f..5e3ede39eeb 100644 --- a/examples/extended/electromagnetic/TestEm13/src/PhysListEmStandard.cc +++ b/examples/extended/electromagnetic/TestEm13/src/PhysListEmStandard.cc @@ -80,11 +80,6 @@ PhysListEmStandard::PhysListEmStandard(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysListEmStandard::~PhysListEmStandard() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysListEmStandard::ConstructProcess() { // Add standard EM Processes diff --git a/examples/extended/electromagnetic/TestEm13/src/PhysicsList.cc b/examples/extended/electromagnetic/TestEm13/src/PhysicsList.cc index 5c147eab598..da8081225cf 100644 --- a/examples/extended/electromagnetic/TestEm13/src/PhysicsList.cc +++ b/examples/extended/electromagnetic/TestEm13/src/PhysicsList.cc @@ -27,7 +27,6 @@ /// \brief Implementation of the PhysicsList class // // -// //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -54,9 +53,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::PhysicsList() -: G4VModularPhysicsList(), - fEmPhysicsList(0), fMessenger(0) +PhysicsList::PhysicsList() { //add new units for cross sections diff --git a/examples/extended/electromagnetic/TestEm13/src/PhysicsListMessenger.cc b/examples/extended/electromagnetic/TestEm13/src/PhysicsListMessenger.cc index 5d292019b1f..e4a68c44d70 100644 --- a/examples/extended/electromagnetic/TestEm13/src/PhysicsListMessenger.cc +++ b/examples/extended/electromagnetic/TestEm13/src/PhysicsListMessenger.cc @@ -39,8 +39,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysicsListMessenger::PhysicsListMessenger(PhysicsList* pPhys) -:G4UImessenger(),fPhysicsList(pPhys), - fPhysDir(0), fListCmd(0) +:fPhysicsList(pPhys) { fPhysDir = new G4UIdirectory("/testem/phys/"); fPhysDir->SetGuidance("physics list commands"); diff --git a/examples/extended/electromagnetic/TestEm13/src/PrimaryGeneratorAction.cc b/examples/extended/electromagnetic/TestEm13/src/PrimaryGeneratorAction.cc index d239795ee44..b387c17f031 100644 --- a/examples/extended/electromagnetic/TestEm13/src/PrimaryGeneratorAction.cc +++ b/examples/extended/electromagnetic/TestEm13/src/PrimaryGeneratorAction.cc @@ -43,7 +43,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PrimaryGeneratorAction::PrimaryGeneratorAction(DetectorConstruction* det) -:G4VUserPrimaryGeneratorAction(),fParticleGun(0),fDetector(det) +:fDetector(det) { fParticleGun = new G4ParticleGun(1); G4ParticleDefinition* particle diff --git a/examples/extended/electromagnetic/TestEm13/src/Run.cc b/examples/extended/electromagnetic/TestEm13/src/Run.cc index e467344fec5..e567278a26b 100644 --- a/examples/extended/electromagnetic/TestEm13/src/Run.cc +++ b/examples/extended/electromagnetic/TestEm13/src/Run.cc @@ -44,14 +44,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... Run::Run(DetectorConstruction* det) -: G4Run(), - fDetector(det), - fParticle(0), fEkin(0.) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -Run::~Run() +: fDetector(det) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm13/src/RunAction.cc b/examples/extended/electromagnetic/TestEm13/src/RunAction.cc index e8f7d55d992..1c460a968a3 100644 --- a/examples/extended/electromagnetic/TestEm13/src/RunAction.cc +++ b/examples/extended/electromagnetic/TestEm13/src/RunAction.cc @@ -44,12 +44,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... RunAction::RunAction(DetectorConstruction* det, PrimaryGeneratorAction* kin) -:G4UserRunAction(),fDetector(det),fPrimary(kin),fRun(0) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -RunAction::~RunAction() +:fDetector(det),fPrimary(kin) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm13/src/SteppingAction.cc b/examples/extended/electromagnetic/TestEm13/src/SteppingAction.cc index 64ee32e592c..ff2c6efe370 100644 --- a/examples/extended/electromagnetic/TestEm13/src/SteppingAction.cc +++ b/examples/extended/electromagnetic/TestEm13/src/SteppingAction.cc @@ -37,17 +37,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -SteppingAction::SteppingAction() -:G4UserSteppingAction() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -SteppingAction::~SteppingAction() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void SteppingAction::UserSteppingAction(const G4Step* aStep) { G4StepPoint* endPoint = aStep->GetPostStepPoint(); diff --git a/examples/extended/electromagnetic/TestEm14/History b/examples/extended/electromagnetic/TestEm14/History index 28dafe4bcfd..480afbbb28b 100644 --- a/examples/extended/electromagnetic/TestEm14/History +++ b/examples/extended/electromagnetic/TestEm14/History @@ -4,6 +4,8 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-05-10 Michel Maire (testem14-V11-01-00) +- revision of all headers ## 2021-12-10 Ben Morgan (testem14-V11-00-00) - Change to new Markdown History format diff --git a/examples/extended/electromagnetic/TestEm14/TestEm14.out b/examples/extended/electromagnetic/TestEm14/TestEm14.out index 64319e6e061..5328bc841c1 100644 --- a/examples/extended/electromagnetic/TestEm14/TestEm14.out +++ b/examples/extended/electromagnetic/TestEm14/TestEm14.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -183,7 +183,7 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 1000000 - User=4.040000s Real=4.063514s Sys=0.010000s + User=3.300000s Real=3.357536s Sys=0.000000s ======================== run summary ====================== @@ -253,7 +253,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000000 - User=3.790000s Real=3.815473s Sys=0.000000s + User=3.060000s Real=3.134396s Sys=0.000000s ======================== run summary ====================== diff --git a/examples/extended/electromagnetic/TestEm14/include/ActionInitialization.hh b/examples/extended/electromagnetic/TestEm14/include/ActionInitialization.hh index 8bd84b19975..8cb4ed377ed 100644 --- a/examples/extended/electromagnetic/TestEm14/include/ActionInitialization.hh +++ b/examples/extended/electromagnetic/TestEm14/include/ActionInitialization.hh @@ -41,13 +41,13 @@ class ActionInitialization : public G4VUserActionInitialization { public: ActionInitialization(DetectorConstruction*); - ~ActionInitialization() override; + ~ActionInitialization() override = default; void BuildForMaster() const override; void Build() const override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; }; #endif diff --git a/examples/extended/electromagnetic/TestEm14/include/DetectorConstruction.hh b/examples/extended/electromagnetic/TestEm14/include/DetectorConstruction.hh index 9913e046cb4..3eec8ce3faf 100644 --- a/examples/extended/electromagnetic/TestEm14/include/DetectorConstruction.hh +++ b/examples/extended/electromagnetic/TestEm14/include/DetectorConstruction.hh @@ -47,39 +47,39 @@ class DetectorConstruction : public G4VUserDetectorConstruction public: DetectorConstruction(); - ~DetectorConstruction(); + ~DetectorConstruction() override; public: - virtual G4VPhysicalVolume* Construct(); + G4VPhysicalVolume* Construct() override; - void SetSize (G4double); - void SetMaterial (G4String); + void SetSize (G4double); + void SetMaterial (G4String); public: const - G4VPhysicalVolume* GetWorld() {return fPBox;}; + G4VPhysicalVolume* GetWorld() {return fPBox;}; - G4double GetSize() {return fBoxSize;}; + G4double GetSize() {return fBoxSize;}; G4Material* GetMaterial() {return fMaterial;}; void PrintParameters(); private: - G4VPhysicalVolume* fPBox; - G4LogicalVolume* fLBox; + G4VPhysicalVolume* fPBox = nullptr; + G4LogicalVolume* fLBox = nullptr; - G4double fBoxSize; - G4Material* fMaterial; + G4double fBoxSize = 0.; + G4Material* fMaterial = nullptr; - DetectorMessenger* fDetectorMessenger; + DetectorMessenger* fDetectorMessenger = nullptr; private: void DefineMaterials(); - G4VPhysicalVolume* ConstructVolumes(); + G4VPhysicalVolume* ConstructVolumes(); }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm14/include/DetectorMessenger.hh b/examples/extended/electromagnetic/TestEm14/include/DetectorMessenger.hh index 62d3eb21e2b..b3e03c47446 100644 --- a/examples/extended/electromagnetic/TestEm14/include/DetectorMessenger.hh +++ b/examples/extended/electromagnetic/TestEm14/include/DetectorMessenger.hh @@ -48,18 +48,18 @@ class DetectorMessenger: public G4UImessenger public: DetectorMessenger(DetectorConstruction* ); - ~DetectorMessenger(); + ~DetectorMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; - G4UIdirectory* fTestemDir; - G4UIdirectory* fDetDir; - G4UIcmdWithAString* fMaterCmd; - G4UIcmdWithADoubleAndUnit* fSizeCmd; + G4UIdirectory* fTestemDir = nullptr; + G4UIdirectory* fDetDir = nullptr; + G4UIcmdWithAString* fMaterCmd = nullptr; + G4UIcmdWithADoubleAndUnit* fSizeCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm14/include/HistoManager.hh b/examples/extended/electromagnetic/TestEm14/include/HistoManager.hh index 7105269b0c2..fd297e43dca 100644 --- a/examples/extended/electromagnetic/TestEm14/include/HistoManager.hh +++ b/examples/extended/electromagnetic/TestEm14/include/HistoManager.hh @@ -23,7 +23,6 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -40,11 +39,11 @@ class HistoManager { public: HistoManager(); - ~HistoManager(); + ~HistoManager() = default; private: void Book(); - G4String fFileName; + G4String fFileName = "testem14"; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm14/include/PhysListEmLivermore.hh b/examples/extended/electromagnetic/TestEm14/include/PhysListEmLivermore.hh index 36d5bc48f35..c964af2c53a 100644 --- a/examples/extended/electromagnetic/TestEm14/include/PhysListEmLivermore.hh +++ b/examples/extended/electromagnetic/TestEm14/include/PhysListEmLivermore.hh @@ -42,16 +42,16 @@ class PhysListEmLivermore : public G4VPhysicsConstructor { public: PhysListEmLivermore(const G4String& name = "livermore"); - ~PhysListEmLivermore(); + ~PhysListEmLivermore() override = default; public: // This method is dummy for physics - virtual void ConstructParticle() {}; + void ConstructParticle() override { }; // This method will be invoked in the Construct() method. // each physics process will be instantiated and // registered to the process manager of each particle type - virtual void ConstructProcess(); + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm14/include/PhysListEmPenelope.hh b/examples/extended/electromagnetic/TestEm14/include/PhysListEmPenelope.hh index 5f495e5e00f..a8ef13c9949 100644 --- a/examples/extended/electromagnetic/TestEm14/include/PhysListEmPenelope.hh +++ b/examples/extended/electromagnetic/TestEm14/include/PhysListEmPenelope.hh @@ -42,16 +42,16 @@ class PhysListEmPenelope : public G4VPhysicsConstructor { public: PhysListEmPenelope(const G4String& name = "penelope"); - ~PhysListEmPenelope(); + ~PhysListEmPenelope() override = default; public: // This method is dummy for physics - virtual void ConstructParticle() {}; + void ConstructParticle() override {}; // This method will be invoked in the Construct() method. // each physics process will be instantiated and // registered to the process manager of each particle type - virtual void ConstructProcess(); + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm14/include/PhysListEmStandard.hh b/examples/extended/electromagnetic/TestEm14/include/PhysListEmStandard.hh index e9d6e13fa91..abec9d1023c 100644 --- a/examples/extended/electromagnetic/TestEm14/include/PhysListEmStandard.hh +++ b/examples/extended/electromagnetic/TestEm14/include/PhysListEmStandard.hh @@ -42,16 +42,16 @@ class PhysListEmStandard : public G4VPhysicsConstructor { public: PhysListEmStandard(const G4String& name = "standard"); - ~PhysListEmStandard(); + ~PhysListEmStandard() override = default; public: // This method is dummy for physics - virtual void ConstructParticle() {}; + void ConstructParticle() override {}; // This method will be invoked in the Construct() method. // each physics process will be instantiated and // registered to the process manager of each particle type - virtual void ConstructProcess(); + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm14/include/PhysicsList.hh b/examples/extended/electromagnetic/TestEm14/include/PhysicsList.hh index 7a97bcfe1da..052ff928dde 100644 --- a/examples/extended/electromagnetic/TestEm14/include/PhysicsList.hh +++ b/examples/extended/electromagnetic/TestEm14/include/PhysicsList.hh @@ -27,7 +27,6 @@ /// \brief Definition of the PhysicsList class // // -// //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // // 14.10.02 (V.Ivanchenko) provide modular list on base of old PhysicsList @@ -50,18 +49,18 @@ class PhysicsList: public G4VModularPhysicsList { public: PhysicsList(); - ~PhysicsList(); + ~PhysicsList() override; - virtual void ConstructParticle(); - virtual void ConstructProcess(); + void ConstructParticle() override; + void ConstructProcess() override; void AddPhysicsList(const G4String& name); - virtual void SetCuts(); + void SetCuts() override; private: - G4VPhysicsConstructor* fEmPhysicsList; + G4VPhysicsConstructor* fEmPhysicsList = nullptr; G4String fEmName; - PhysicsListMessenger* fMessenger; + PhysicsListMessenger* fMessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm14/include/PhysicsListMessenger.hh b/examples/extended/electromagnetic/TestEm14/include/PhysicsListMessenger.hh index 797b795f710..436ede8d60d 100644 --- a/examples/extended/electromagnetic/TestEm14/include/PhysicsListMessenger.hh +++ b/examples/extended/electromagnetic/TestEm14/include/PhysicsListMessenger.hh @@ -47,16 +47,16 @@ class PhysicsListMessenger: public G4UImessenger public: PhysicsListMessenger(PhysicsList* ); - ~PhysicsListMessenger(); + ~PhysicsListMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - PhysicsList* fPhysicsList; + PhysicsList* fPhysicsList = nullptr; - G4UIdirectory* fPhysDir; - G4UIcmdWithAString* fListCmd; + G4UIdirectory* fPhysDir = nullptr; + G4UIcmdWithAString* fListCmd = nullptr; }; diff --git a/examples/extended/electromagnetic/TestEm14/include/PrimaryGeneratorAction.hh b/examples/extended/electromagnetic/TestEm14/include/PrimaryGeneratorAction.hh index 7016d93797d..d68f3624f1e 100644 --- a/examples/extended/electromagnetic/TestEm14/include/PrimaryGeneratorAction.hh +++ b/examples/extended/electromagnetic/TestEm14/include/PrimaryGeneratorAction.hh @@ -45,16 +45,16 @@ class DetectorConstruction; class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: - PrimaryGeneratorAction(DetectorConstruction*); - ~PrimaryGeneratorAction(); + PrimaryGeneratorAction(DetectorConstruction*); + ~PrimaryGeneratorAction() override; public: - virtual void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; G4ParticleGun* GetParticleGun() {return fParticleGun;}; private: - G4ParticleGun* fParticleGun; - DetectorConstruction* fDetector; + G4ParticleGun* fParticleGun = nullptr; + DetectorConstruction* fDetector = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm14/include/Run.hh b/examples/extended/electromagnetic/TestEm14/include/Run.hh index 676d7cedddd..1ef949a3724 100644 --- a/examples/extended/electromagnetic/TestEm14/include/Run.hh +++ b/examples/extended/electromagnetic/TestEm14/include/Run.hh @@ -46,26 +46,26 @@ class Run : public G4Run { public: Run(DetectorConstruction*); - ~Run(); + ~Run() override = default; public: void SetPrimary(G4ParticleDefinition* particle, G4double energy); void CountProcesses(G4String procName); void SumTrack (G4double track); void SumeTransf (G4double energy); - virtual void Merge(const G4Run*); + void Merge(const G4Run*) override; void EndOfRun(); private: - DetectorConstruction* fDetector; - G4ParticleDefinition* fParticle; - G4double fEkin; + DetectorConstruction* fDetector = nullptr; + G4ParticleDefinition* fParticle = nullptr; + G4double fEkin = 0.; std::map fProcCounter; - G4int fTotalCount; //all processes counter - G4double fSumTrack; //sum of trackLength - G4double fSumTrack2; //sum of trackLength*trackLength - G4double fEnTransfer; //energy transfered to charged secondaries + G4int fTotalCount = 0; //all processes counter + G4double fSumTrack = 0.; //sum of trackLength + G4double fSumTrack2 = 0.; //sum of trackLength*trackLength + G4double fEnTransfer = 0.; //energy transfered to charged secondaries }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm14/include/RunAction.hh b/examples/extended/electromagnetic/TestEm14/include/RunAction.hh index 01d1ab46488..3a341bd0c83 100644 --- a/examples/extended/electromagnetic/TestEm14/include/RunAction.hh +++ b/examples/extended/electromagnetic/TestEm14/include/RunAction.hh @@ -48,19 +48,19 @@ class HistoManager; class RunAction : public G4UserRunAction { public: - RunAction(DetectorConstruction* det, PrimaryGeneratorAction* prim=0); - ~RunAction(); + RunAction(DetectorConstruction* det, PrimaryGeneratorAction* prim=nullptr); + ~RunAction() override; public: - virtual G4Run* GenerateRun(); - virtual void BeginOfRunAction(const G4Run*); - virtual void EndOfRunAction(const G4Run*); + G4Run* GenerateRun() override; + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; private: - DetectorConstruction* fDetector; - PrimaryGeneratorAction* fPrimary; - Run* fRun; - HistoManager* fHistoManager; + DetectorConstruction* fDetector = nullptr; + PrimaryGeneratorAction* fPrimary = nullptr; + Run* fRun = nullptr; + HistoManager* fHistoManager = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm14/include/SteppingAction.hh b/examples/extended/electromagnetic/TestEm14/include/SteppingAction.hh index 1aaf2f399f7..809ff527442 100644 --- a/examples/extended/electromagnetic/TestEm14/include/SteppingAction.hh +++ b/examples/extended/electromagnetic/TestEm14/include/SteppingAction.hh @@ -41,10 +41,10 @@ class SteppingAction : public G4UserSteppingAction { public: - SteppingAction(); - ~SteppingAction(); + SteppingAction() = default; + ~SteppingAction() override = default; - virtual void UserSteppingAction(const G4Step*); + void UserSteppingAction(const G4Step*) override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm14/src/ActionInitialization.cc b/examples/extended/electromagnetic/TestEm14/src/ActionInitialization.cc index 309a44b59a1..39635b57db8 100644 --- a/examples/extended/electromagnetic/TestEm14/src/ActionInitialization.cc +++ b/examples/extended/electromagnetic/TestEm14/src/ActionInitialization.cc @@ -36,19 +36,14 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ActionInitialization::ActionInitialization(DetectorConstruction* det) - : G4VUserActionInitialization(),fDetector(det) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -ActionInitialization::~ActionInitialization() + : fDetector(det) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ActionInitialization::BuildForMaster() const { - SetUserAction(new RunAction(fDetector,0)); + SetUserAction(new RunAction(fDetector,nullptr)); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm14/src/DetectorConstruction.cc b/examples/extended/electromagnetic/TestEm14/src/DetectorConstruction.cc index 1fec3719043..e1389dbce43 100644 --- a/examples/extended/electromagnetic/TestEm14/src/DetectorConstruction.cc +++ b/examples/extended/electromagnetic/TestEm14/src/DetectorConstruction.cc @@ -50,8 +50,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorConstruction::DetectorConstruction() -:G4VUserDetectorConstruction(),fPBox(0), fLBox(0), fMaterial(0), - fDetectorMessenger(0) { fBoxSize = 100*m; DefineMaterials(); diff --git a/examples/extended/electromagnetic/TestEm14/src/DetectorMessenger.cc b/examples/extended/electromagnetic/TestEm14/src/DetectorMessenger.cc index e4b46c43ac7..f0a4d8700ba 100644 --- a/examples/extended/electromagnetic/TestEm14/src/DetectorMessenger.cc +++ b/examples/extended/electromagnetic/TestEm14/src/DetectorMessenger.cc @@ -40,11 +40,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorMessenger::DetectorMessenger(DetectorConstruction * Det) -:G4UImessenger(),fDetector(Det), - fTestemDir(0), - fDetDir(0), - fMaterCmd(0), - fSizeCmd(0) +:fDetector(Det) { fTestemDir = new G4UIdirectory("/testem/"); fTestemDir->SetGuidance("commands specific to this example"); diff --git a/examples/extended/electromagnetic/TestEm14/src/HistoManager.cc b/examples/extended/electromagnetic/TestEm14/src/HistoManager.cc index 4b744497379..d6e3e6628a0 100644 --- a/examples/extended/electromagnetic/TestEm14/src/HistoManager.cc +++ b/examples/extended/electromagnetic/TestEm14/src/HistoManager.cc @@ -23,7 +23,6 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -34,19 +33,12 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... HistoManager::HistoManager() - : fFileName("testem14") { Book(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -HistoManager::~HistoManager() -{ -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void HistoManager::Book() { // Create or get analysis manager diff --git a/examples/extended/electromagnetic/TestEm14/src/PhysListEmLivermore.cc b/examples/extended/electromagnetic/TestEm14/src/PhysListEmLivermore.cc index dff59299948..cfba5f3510b 100644 --- a/examples/extended/electromagnetic/TestEm14/src/PhysListEmLivermore.cc +++ b/examples/extended/electromagnetic/TestEm14/src/PhysListEmLivermore.cc @@ -27,7 +27,6 @@ /// \brief Implementation of the PhysListEmLivermore class // // -// //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -99,11 +98,6 @@ PhysListEmLivermore::PhysListEmLivermore(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysListEmLivermore::~PhysListEmLivermore() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysListEmLivermore::ConstructProcess() { // Add Livermore EM Processes diff --git a/examples/extended/electromagnetic/TestEm14/src/PhysListEmPenelope.cc b/examples/extended/electromagnetic/TestEm14/src/PhysListEmPenelope.cc index 665566c8a12..4b6cbafe67f 100644 --- a/examples/extended/electromagnetic/TestEm14/src/PhysListEmPenelope.cc +++ b/examples/extended/electromagnetic/TestEm14/src/PhysListEmPenelope.cc @@ -27,7 +27,6 @@ /// \brief Implementation of the PhysListEmPenelope class // // -// //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -99,11 +98,6 @@ PhysListEmPenelope::PhysListEmPenelope(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysListEmPenelope::~PhysListEmPenelope() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysListEmPenelope::ConstructProcess() { // Add standard EM Processes diff --git a/examples/extended/electromagnetic/TestEm14/src/PhysListEmStandard.cc b/examples/extended/electromagnetic/TestEm14/src/PhysListEmStandard.cc index 2f766d075b8..ebe347ab4ca 100644 --- a/examples/extended/electromagnetic/TestEm14/src/PhysListEmStandard.cc +++ b/examples/extended/electromagnetic/TestEm14/src/PhysListEmStandard.cc @@ -80,11 +80,6 @@ PhysListEmStandard::PhysListEmStandard(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysListEmStandard::~PhysListEmStandard() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysListEmStandard::ConstructProcess() { // Add standard EM Processes diff --git a/examples/extended/electromagnetic/TestEm14/src/PhysicsList.cc b/examples/extended/electromagnetic/TestEm14/src/PhysicsList.cc index bf15ed33d40..20a7c77fb53 100644 --- a/examples/extended/electromagnetic/TestEm14/src/PhysicsList.cc +++ b/examples/extended/electromagnetic/TestEm14/src/PhysicsList.cc @@ -25,7 +25,6 @@ // /// \file PhysicsList.cc /// \brief Implementation of the PhysicsList class -// // // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -55,9 +54,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysicsList::PhysicsList() -: G4VModularPhysicsList(), - fEmPhysicsList(0), - fMessenger(0) { G4LossTableManager::Instance(); diff --git a/examples/extended/electromagnetic/TestEm14/src/PhysicsListMessenger.cc b/examples/extended/electromagnetic/TestEm14/src/PhysicsListMessenger.cc index 644e9e50dc6..eb1948e423d 100644 --- a/examples/extended/electromagnetic/TestEm14/src/PhysicsListMessenger.cc +++ b/examples/extended/electromagnetic/TestEm14/src/PhysicsListMessenger.cc @@ -39,8 +39,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysicsListMessenger::PhysicsListMessenger(PhysicsList* pPhys) -:G4UImessenger(),fPhysicsList(pPhys), - fPhysDir(0), fListCmd(0) +: fPhysicsList(pPhys) { fPhysDir = new G4UIdirectory("/testem/phys/"); fPhysDir->SetGuidance("physics list commands"); diff --git a/examples/extended/electromagnetic/TestEm14/src/PrimaryGeneratorAction.cc b/examples/extended/electromagnetic/TestEm14/src/PrimaryGeneratorAction.cc index c640bd4a2ba..ec7acf9006b 100644 --- a/examples/extended/electromagnetic/TestEm14/src/PrimaryGeneratorAction.cc +++ b/examples/extended/electromagnetic/TestEm14/src/PrimaryGeneratorAction.cc @@ -43,7 +43,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PrimaryGeneratorAction::PrimaryGeneratorAction(DetectorConstruction* det) -:G4VUserPrimaryGeneratorAction(),fParticleGun(0),fDetector(det) +: fDetector(det) { fParticleGun = new G4ParticleGun(1); G4ParticleDefinition* particle diff --git a/examples/extended/electromagnetic/TestEm14/src/Run.cc b/examples/extended/electromagnetic/TestEm14/src/Run.cc index 6bfead75c69..95d566c69e1 100644 --- a/examples/extended/electromagnetic/TestEm14/src/Run.cc +++ b/examples/extended/electromagnetic/TestEm14/src/Run.cc @@ -44,15 +44,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... Run::Run(DetectorConstruction* det) -: G4Run(), - fDetector(det), - fParticle(0), fEkin(0.), - fTotalCount(0), fSumTrack(0.), fSumTrack2(0.), fEnTransfer(0.) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -Run::~Run() +: fDetector(det) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm14/src/RunAction.cc b/examples/extended/electromagnetic/TestEm14/src/RunAction.cc index 36d1af5f607..d05d896f198 100644 --- a/examples/extended/electromagnetic/TestEm14/src/RunAction.cc +++ b/examples/extended/electromagnetic/TestEm14/src/RunAction.cc @@ -46,7 +46,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... RunAction::RunAction(DetectorConstruction* det, PrimaryGeneratorAction* kin) -:G4UserRunAction(),fDetector(det),fPrimary(kin),fRun(0),fHistoManager(0) +: fDetector(det),fPrimary(kin) { fHistoManager = new HistoManager(); } diff --git a/examples/extended/electromagnetic/TestEm14/src/SteppingAction.cc b/examples/extended/electromagnetic/TestEm14/src/SteppingAction.cc index 483579363f1..cec1ad0c1e3 100644 --- a/examples/extended/electromagnetic/TestEm14/src/SteppingAction.cc +++ b/examples/extended/electromagnetic/TestEm14/src/SteppingAction.cc @@ -37,17 +37,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -SteppingAction::SteppingAction() -:G4UserSteppingAction() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -SteppingAction::~SteppingAction() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void SteppingAction::UserSteppingAction(const G4Step* aStep) { const G4StepPoint* endPoint = aStep->GetPostStepPoint(); diff --git a/examples/extended/electromagnetic/TestEm15/.README.txt b/examples/extended/electromagnetic/TestEm15/.README.txt index d22056a755c..606a6c9404a 100644 --- a/examples/extended/electromagnetic/TestEm15/.README.txt +++ b/examples/extended/electromagnetic/TestEm15/.README.txt @@ -4,62 +4,68 @@ /*! \page ExampleTestEm15 Example TestEm15 +How to compute and plot the final state of: + - Multiple Scattering + - Gamma Conversion +considered as an isolated processes, see \link TestEm15_s4 PHYSICS \endlink . + +For Multiple Scattering, the method is exposed below. + +For Gamma Conversion, when G4BetheHeitler5DModel Model is used, +see \link ExampleTestEm15_GC README.gamma \endlink for Histograms and UI commands description. - 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 \ref TestEm15_s4. - \section TestEm15_s1 GEOMETRY DEFINITION - + It is a single box representing a 'semi infinite' homogeneous medium. - Two parameters define the geometry : + 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 + + 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 - + 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 + 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 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. - + + __Multiple Scattering:__ + + 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 + + The test contains 16 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 +\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 @@ -78,50 +84,50 @@ - 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 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 +/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 - + 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 + + 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 : + + - Execute TestEm15 in 'batch' mode from macro files: \verbatim % TestEm15 compt.mac \endverbatim - - - Execute TestEm15 in 'interactive mode' with visualization : + + - Execute TestEm15 in 'interactive mode' with visualization: \verbatim % TestEm15 Idle> control/execute vis.mac @@ -135,15 +141,116 @@ Idle> exit The examples of macros for Multiple Scattering: - electron.mac - - muon.mac + - muon.mac - proton.mac - The example of Gamma Conversion macro : + The example of Gamma Conversion macro: - gamma.mac - gamma to e+ e- - gamma2mumu.mac gamma to mu+ mu- - - See README.gamma for details about Gamma Conversion - macros and histograsms. + +\subpage ExampleTestEm15_GC + +\page ExampleTestEm15_GC Example TestEm15 - Gamma Conversion + +\section TestEm15_gc_s0 Gamma Conversion macros: + - gamma.mac - tests of the 5D gamma -> e+ e- conversion model G4BetheHeitler5DModel + - gamma2mumu.mac - tests of the 5D gamma -> mu+ mu- conversion model G4BetheHeitler5DModel + +All discrete processes are inactivated (see macro), +so Gamma Conversion is 'forced'. + +\section TestEm15_gc_s1 HISTOGRAMS + + - 10 : Open Angle (rad)* E gamma (MeV). + +The most probable value of the e+ e- pair opening angle multiplied by the +photon energy is 1.6 rad*MeV and 338 rad*MeV in case mu+ mu- pair. +See: Olsen, Phys. Rev. 131 (1963) 406. +See also: Fig. 7 of arXiv:1802.08253 and Fig. 6 arXiv:1910.12501. + + - 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. + + For linearly polarized incident photons, the distributions should show + a sinusoidal shape with period 180°, for non polarized incident photons, + the distribution of azimuthal angles should be flat. + + - 14 : Asymmetry 2 * cos(phi_+ + phi_-). + +For a photon propagating along x, polarized along y, +the average value of ( 2.0 * 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). + +\section TestEm15_gc_s2 UI COMMANDS + +There are two commands to control G4BetheHeitler5DModel: + +\verbatim +/process/gconv/conversionType itype +/process/gconv/onIsolated bool +\endverbatim + +The command: +\verbatim +/process/gconv/conversionType +\endverbatim + +Allow to force conversion on nuclear or electron +The parameter values: + - 0 - (default) both triplet and nuclear conversion in proportion triplet/nuclear 1/Z + - 1 - force nuclear conversion + - 2 - force triplet + +The command: +\verbatim +/process/gconv/onIsolated +\endverbatim + +Allow simulate conversion on isolated particles without screening +The perimeter values: + - false - (default) atomic electron screening + - true - conversion on isolated particles + +\subsection TestEm15_gc_s3 One more command for G4GammaConversionToMuons + +To enable gamma to mu+ mu- conversion use command: + +\verbatim +/process/em/max5DMuPairEnergy emax5D units +\endverbatim +The conversion disabled by default, emax5D set to 0.0 + +__The model tested for the energies about the threshold up to PeV range__. */ - diff --git a/examples/extended/electromagnetic/TestEm15/History b/examples/extended/electromagnetic/TestEm15/History index 20da0b71e8a..b2dcad9a6f2 100644 --- a/examples/extended/electromagnetic/TestEm15/History +++ b/examples/extended/electromagnetic/TestEm15/History @@ -5,6 +5,10 @@ which **must** added in reverse chronological order (newest at the top). It must be used as a substitute for writing good git commit messages! +## 2022-12-15 Igor Semeniouk (testem15-V11-01-00) + - README, README.gamma - changes from D.Bernard, cleanup + - .README.txt - cleanup, information from README.gamma added + ## 2022-02-20 Igor Semeniouk (testem15-V11-00-02) - TestEm15 README.gamma update (documatation only) - Added description of UI commands to control G4BetheHeitler5DModel diff --git a/examples/extended/electromagnetic/TestEm15/README b/examples/extended/electromagnetic/TestEm15/README index a4dbd266608..27dda8b6b56 100644 --- a/examples/extended/electromagnetic/TestEm15/README +++ b/examples/extended/electromagnetic/TestEm15/README @@ -7,59 +7,66 @@ 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. - + How to compute and plot the final state of: + - Multiple Scattering + - Gamma Conversion + considered as an isolated processes, see PHYSICS. + + For Multiple Scattering, the method is exposed below. + + For Gamma Conversion, when G4BetheHeitler5DModel Model is used, + see README.gamma for Histograms and UI commands description. + 1- GEOMETRY DEFINITION - + It is a single box representing a 'semi infinite' homogeneous medium. - Two parameters define the geometry : + 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 + + 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 - + 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 + 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 + + Multiple Scattering: + + 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 + + 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 @@ -78,54 +85,51 @@ 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 + + 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 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 + + 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 : + + execute TestEm15 in 'batch' mode from macro files: % TestEm15 compt.mac - - execute TestEm15 in 'interactive mode' with visualization : + + 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- - - See README.gamma for details about Gamma Conversion - macros and histograsms. \ No newline at end of file + 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 index ca94a84a8f6..9b8c22fa64a 100644 --- a/examples/extended/electromagnetic/TestEm15/README.gamma +++ b/examples/extended/electromagnetic/TestEm15/README.gamma @@ -21,7 +21,7 @@ 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 + 12 # Phi recoil 13 # Phi positron For linearly polarized incident photons, the distributions should show a sinusoidal shape with period 180°, for non polarized incident photons, @@ -32,11 +32,11 @@ See also Fig. 2 of Astroparticle Physics 88 (2017) 60. For a photon propagating along x, polarized along y, the average value of ( 2.0 * cos(phi_+ + phi_-) ), provides a measurement of the polarization asymmetry, A. -Eq. (12) of Nucl. Instrum. Meth. A 729 (2013) 765 +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 +provides the optimal measurement of the asymmetry Astroparticle Physics 88 (2017) 30. For high-energy photons (E >> 20 MeV), the asymptotic expression for A @@ -87,4 +87,3 @@ To enable gamma to mu+ mu- conversion use command: The conversion disabled by default, emax5D set to 0.0 The model tested for the energies about the threshold up to PeV range. - diff --git a/examples/extended/electromagnetic/TestEm15/TestEm15.out b/examples/extended/electromagnetic/TestEm15/TestEm15.out index a01f679c731..dd89ee4b9f7 100644 --- a/examples/extended/electromagnetic/TestEm15/TestEm15.out +++ b/examples/extended/electromagnetic/TestEm15/TestEm15.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -383,7 +383,6 @@ ionIoni: for GenericIon XStype:0 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 0, fluct: 0, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -564,7 +563,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 10000 - User=0.050000s Real=0.044898s Sys=0.000000s + User=0.040000s Real=0.044355s Sys=0.000000s The run consists of 10000 e- of 5 MeV through 100 m of Water (density: 1 g/cm3 ) @@ -636,7 +635,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 10000 - User=0.060000s Real=0.061082s Sys=0.000000s + User=0.060000s Real=0.057135s Sys=0.000000s The run consists of 10000 e- of 100 keV through 100 m of Water (density: 1 g/cm3 ) diff --git a/examples/extended/electromagnetic/TestEm16/TestEm16.out b/examples/extended/electromagnetic/TestEm16/TestEm16.out index 0fb71d1bbda..a1969a1952a 100644 --- a/examples/extended/electromagnetic/TestEm16/TestEm16.out +++ b/examples/extended/electromagnetic/TestEm16/TestEm16.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -91,6 +91,7 @@ Command is ignored. /run/physicsModified # /globalField/setValue 0 0 1 tesla + G4ChordFinder: stepperDriverId: 2 # /gun/particle e- /gun/energy 9.9994890009 GeV @@ -331,7 +332,7 @@ G4SynchrotronRadiation::GetRandomEnergySR : Run terminated. Run Summary Number of events processed : 100 - User=0.190000s Real=0.192588s Sys=0.010000s + User=0.170000s Real=0.169063s Sys=0.000000s Summary for synchrotron radiation : Number of photons = 65086 Emean = 20.39 +/- 0.1444 keV diff --git a/examples/extended/electromagnetic/TestEm17/TestEm17.out b/examples/extended/electromagnetic/TestEm17/TestEm17.out index 1ead89eb60e..da2637f748a 100644 --- a/examples/extended/electromagnetic/TestEm17/TestEm17.out +++ b/examples/extended/electromagnetic/TestEm17/TestEm17.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -261,7 +261,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 1000 PeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -293,7 +293,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 1000 PeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -325,7 +325,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 1000 PeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -338,7 +338,6 @@ ionIoni: for GenericIon XStype:1 SubType=2 dE/dx and range tables from 100 eV to 1000 PeV in 112 bins Lambda tables from threshold to 1000 PeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 1, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 1000 PeV @@ -384,7 +383,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 1000 PeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -416,7 +415,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 1000 PeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -448,7 +447,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -480,7 +479,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 1000 PeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -512,7 +511,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -544,7 +543,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 1000 PeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -576,7 +575,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -630,7 +629,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 10000 - User=1.410000s Real=1.426837s Sys=0.000000s + User=1.280000s Real=1.281203s Sys=0.000000s The run consists of 10000 mu+ of 10 TeV through 1 m of Iron (density: 7.9 g/cm3 ) @@ -686,7 +685,7 @@ N=17 V[N]={356575979127036268, 1480344814211241319, 2291742542844202723, 1462889 Run terminated. Run Summary Number of events processed : 10000 - User=1.290000s Real=1.303975s Sys=0.000000s + User=1.200000s Real=1.207309s Sys=0.000000s The run consists of 10000 pi+ of 10 TeV through 1 m of Iron (density: 7.9 g/cm3 ) @@ -741,7 +740,7 @@ N=17 V[N]={760258473299029110, 1090172941071924422, 730805950373528576, 14263551 Run terminated. Run Summary Number of events processed : 10000 - User=1.230000s Real=1.233005s Sys=0.000000s + User=1.130000s Real=1.211861s Sys=0.000000s The run consists of 10000 proton of 10 TeV through 1 m of Iron (density: 7.9 g/cm3 ) diff --git a/examples/extended/electromagnetic/TestEm18/History b/examples/extended/electromagnetic/TestEm18/History index bb1c36dc971..8c6fb262590 100644 --- a/examples/extended/electromagnetic/TestEm18/History +++ b/examples/extended/electromagnetic/TestEm18/History @@ -4,6 +4,9 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-05-17 Michel Maire (testem18-V11-01-00) +- revision of all headers +- ~StakingAction() : delete StackingMessenger* ## 2021-12-10 Ben Morgan (testem18-V11-00-00) - Change to new Markdown History format diff --git a/examples/extended/electromagnetic/TestEm18/TestEm18.out b/examples/extended/electromagnetic/TestEm18/TestEm18.out index 4a0d66edf59..d49b5606657 100644 --- a/examples/extended/electromagnetic/TestEm18/TestEm18.out +++ b/examples/extended/electromagnetic/TestEm18/TestEm18.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -215,7 +215,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100000 - User=0.550000s Real=0.558543s Sys=0.000000s + User=0.530000s Real=0.533965s Sys=0.000000s ======================== run summary ====================== diff --git a/examples/extended/electromagnetic/TestEm18/include/DetectorConstruction.hh b/examples/extended/electromagnetic/TestEm18/include/DetectorConstruction.hh index ed35df56c6f..bb8b851fb14 100644 --- a/examples/extended/electromagnetic/TestEm18/include/DetectorConstruction.hh +++ b/examples/extended/electromagnetic/TestEm18/include/DetectorConstruction.hh @@ -47,11 +47,11 @@ class DetectorConstruction : public G4VUserDetectorConstruction public: DetectorConstruction(); - ~DetectorConstruction(); + ~DetectorConstruction() override; public: - virtual G4VPhysicalVolume* Construct(); + G4VPhysicalVolume* Construct() override; void SetSize (G4double); void SetMaterial (const G4String&); @@ -70,13 +70,13 @@ class DetectorConstruction : public G4VUserDetectorConstruction private: - G4VPhysicalVolume* fPBox; - G4LogicalVolume* fLBox; + G4VPhysicalVolume* fPBox = nullptr; + G4LogicalVolume* fLBox = nullptr; G4double fBoxSize; - G4Material* fMaterial; + G4Material* fMaterial = nullptr; - DetectorMessenger* fDetectorMessenger; + DetectorMessenger* fDetectorMessenger = nullptr; private: diff --git a/examples/extended/electromagnetic/TestEm18/include/DetectorMessenger.hh b/examples/extended/electromagnetic/TestEm18/include/DetectorMessenger.hh index 2e6ea31d53d..f79e3c001bb 100644 --- a/examples/extended/electromagnetic/TestEm18/include/DetectorMessenger.hh +++ b/examples/extended/electromagnetic/TestEm18/include/DetectorMessenger.hh @@ -49,19 +49,19 @@ class DetectorMessenger: public G4UImessenger public: DetectorMessenger(DetectorConstruction* ); - ~DetectorMessenger(); + ~DetectorMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; - G4UIdirectory* fTestemDir; - G4UIdirectory* fDetDir; - G4UIcmdWithAString* fMaterCmd; - G4UIcmdWithADoubleAndUnit* fSizeCmd; - G4UIcmdWithoutParameter* fUpdateCmd; + G4UIdirectory* fTestemDir = nullptr; + G4UIdirectory* fDetDir = nullptr; + G4UIcmdWithAString* fMaterCmd = nullptr; + G4UIcmdWithADoubleAndUnit* fSizeCmd = nullptr; + G4UIcmdWithoutParameter* fUpdateCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm18/include/EventAction.hh b/examples/extended/electromagnetic/TestEm18/include/EventAction.hh index 63cb890ee7c..542763f8fc9 100644 --- a/examples/extended/electromagnetic/TestEm18/include/EventAction.hh +++ b/examples/extended/electromagnetic/TestEm18/include/EventAction.hh @@ -46,19 +46,19 @@ class EventAction : public G4UserEventAction { public: EventAction(RunAction*); - ~EventAction(); + ~EventAction() override = default; public: - virtual void BeginOfEventAction(const G4Event*); - virtual void EndOfEventAction(const G4Event*); + void BeginOfEventAction(const G4Event*) override; + void EndOfEventAction(const G4Event*) override; void SumEnergyDeposited(G4int trackID, G4double edep); void SumEnergyTransfered(const G4VProcess*, G4double); private: - RunAction* fRunAction; + RunAction* fRunAction = nullptr; - G4double fEdepPrimary, fEdepSecondary; + G4double fEdepPrimary = 0., fEdepSecondary = 0.; std::map fEnergyTransfered; std::map fProcessSubType; }; diff --git a/examples/extended/electromagnetic/TestEm18/include/HistoManager.hh b/examples/extended/electromagnetic/TestEm18/include/HistoManager.hh index 23373986186..910e307a46e 100644 --- a/examples/extended/electromagnetic/TestEm18/include/HistoManager.hh +++ b/examples/extended/electromagnetic/TestEm18/include/HistoManager.hh @@ -40,11 +40,11 @@ class HistoManager { public: HistoManager(); - ~HistoManager(); + ~HistoManager() = default; private: void Book(); - G4String fFileName; + G4String fFileName = "testem18"; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm18/include/PhysListEmLivermore.hh b/examples/extended/electromagnetic/TestEm18/include/PhysListEmLivermore.hh index 59d10307858..d9cc3921502 100644 --- a/examples/extended/electromagnetic/TestEm18/include/PhysListEmLivermore.hh +++ b/examples/extended/electromagnetic/TestEm18/include/PhysListEmLivermore.hh @@ -40,10 +40,10 @@ class PhysListEmLivermore : public G4VPhysicsConstructor { public: PhysListEmLivermore(const G4String& name = "Livermore"); - ~PhysListEmLivermore(); + ~PhysListEmLivermore() override = default; - virtual void ConstructParticle() { }; - virtual void ConstructProcess(); + void ConstructParticle() override { }; + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm18/include/PhysListEmPenelope.hh b/examples/extended/electromagnetic/TestEm18/include/PhysListEmPenelope.hh index 15313a69801..2b9bbd116ef 100644 --- a/examples/extended/electromagnetic/TestEm18/include/PhysListEmPenelope.hh +++ b/examples/extended/electromagnetic/TestEm18/include/PhysListEmPenelope.hh @@ -40,10 +40,10 @@ class PhysListEmPenelope : public G4VPhysicsConstructor { public: PhysListEmPenelope(const G4String& name = "Penelope"); - ~PhysListEmPenelope(); + ~PhysListEmPenelope() override = default; - virtual void ConstructParticle() { }; - virtual void ConstructProcess(); + void ConstructParticle() override { }; + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm18/include/PhysListEmStandard.hh b/examples/extended/electromagnetic/TestEm18/include/PhysListEmStandard.hh index afc6850c10b..a172ee1786a 100644 --- a/examples/extended/electromagnetic/TestEm18/include/PhysListEmStandard.hh +++ b/examples/extended/electromagnetic/TestEm18/include/PhysListEmStandard.hh @@ -42,16 +42,16 @@ class PhysListEmStandard : public G4VPhysicsConstructor { public: PhysListEmStandard(const G4String& name = "standard"); - ~PhysListEmStandard(); + ~PhysListEmStandard() override = default; public: // This method is dummy for physics - virtual void ConstructParticle() {}; + void ConstructParticle() override {}; // This method will be invoked in the Construct() method. // each physics process will be instantiated and // registered to the process manager of each particle type - virtual void ConstructProcess(); + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm18/include/PhysicsList.hh b/examples/extended/electromagnetic/TestEm18/include/PhysicsList.hh index b7420a62005..36fd1ed67d7 100644 --- a/examples/extended/electromagnetic/TestEm18/include/PhysicsList.hh +++ b/examples/extended/electromagnetic/TestEm18/include/PhysicsList.hh @@ -45,19 +45,19 @@ class PhysicsList: public G4VModularPhysicsList { public: PhysicsList(); - ~PhysicsList(); + ~PhysicsList() override; - virtual void ConstructParticle(); - virtual void ConstructProcess(); + void ConstructParticle() override; + void ConstructProcess() override; void AddPhysicsList(const G4String& name); void AddStepMax(); private: - PhysicsListMessenger* fMessenger; + PhysicsListMessenger* fMessenger = nullptr; G4String fEmName; - G4VPhysicsConstructor* fEmPhysicsList; + G4VPhysicsConstructor* fEmPhysicsList = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm18/include/PhysicsListMessenger.hh b/examples/extended/electromagnetic/TestEm18/include/PhysicsListMessenger.hh index 54865463b5b..921863a086e 100644 --- a/examples/extended/electromagnetic/TestEm18/include/PhysicsListMessenger.hh +++ b/examples/extended/electromagnetic/TestEm18/include/PhysicsListMessenger.hh @@ -47,16 +47,16 @@ class PhysicsListMessenger: public G4UImessenger public: PhysicsListMessenger(PhysicsList* ); - ~PhysicsListMessenger(); + ~PhysicsListMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - PhysicsList* fPhysicsList; + PhysicsList* fPhysicsList = nullptr; - G4UIdirectory* fPhysDir; - G4UIcmdWithAString* fListCmd; + G4UIdirectory* fPhysDir = nullptr; + G4UIcmdWithAString* fListCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm18/include/PrimaryGeneratorAction.hh b/examples/extended/electromagnetic/TestEm18/include/PrimaryGeneratorAction.hh index 7efa2854a85..5d86323f8bd 100644 --- a/examples/extended/electromagnetic/TestEm18/include/PrimaryGeneratorAction.hh +++ b/examples/extended/electromagnetic/TestEm18/include/PrimaryGeneratorAction.hh @@ -46,15 +46,15 @@ class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: PrimaryGeneratorAction(DetectorConstruction*); - ~PrimaryGeneratorAction(); + ~PrimaryGeneratorAction() override; public: - virtual void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; G4ParticleGun* GetParticleGun() {return fParticleGun;}; private: - G4ParticleGun* fParticleGun; - DetectorConstruction* fDetector; + G4ParticleGun* fParticleGun = nullptr; + DetectorConstruction* fDetector = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm18/include/RunAction.hh b/examples/extended/electromagnetic/TestEm18/include/RunAction.hh index 2779097655d..37365a82ae6 100644 --- a/examples/extended/electromagnetic/TestEm18/include/RunAction.hh +++ b/examples/extended/electromagnetic/TestEm18/include/RunAction.hh @@ -54,11 +54,11 @@ class RunAction : public G4UserRunAction { public: RunAction(DetectorConstruction*, PrimaryGeneratorAction*); - ~RunAction(); + ~RunAction() override; public: - virtual void BeginOfRunAction(const G4Run*); - virtual void EndOfRunAction(const G4Run*); + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; void CountProcesses(G4String procName); @@ -99,23 +99,23 @@ private: private: - DetectorConstruction* fDetector; - PrimaryGeneratorAction* fPrimary; - HistoManager* fHistoManager; + DetectorConstruction* fDetector = nullptr; + PrimaryGeneratorAction* fPrimary = nullptr; + HistoManager* fHistoManager = nullptr; std::map fProcCounter; - G4long fNbSteps; - G4double fTrackLength, fStepMin, fStepMax; + G4long fNbSteps = 0; + G4double fTrackLength = 0., fStepMin = DBL_MAX, fStepMax = 0.; - G4double fEdepPrimary, fEdepPrimMin, fEdepPrimMax; + G4double fEdepPrimary = 0., fEdepPrimMin = DBL_MAX, fEdepPrimMax = 0.; std::map fEtransfByProcess; - G4double fEnergyTransfered, fEtransfMin, fEtransfMax; - G4double fEnergyLost, fElostMin, fElostMax; - G4double fEnergyBalance, fEbalMin, fEbalMax; + G4double fEnergyTransfered = 0., fEtransfMin = DBL_MAX, fEtransfMax = 0.; + G4double fEnergyLost = 0., fElostMin = DBL_MAX, fElostMax = 0.; + G4double fEnergyBalance = 0., fEbalMin = DBL_MAX, fEbalMax = 0.; - G4double fEdepSecondary, fEdepSecMin, fEdepSecMax; - G4double fEdepTotal, fEdepTotMin, fEdepTotMax; + G4double fEdepSecondary = 0., fEdepSecMin = DBL_MAX, fEdepSecMax = 0.; + G4double fEdepTotal = 0., fEdepTotMin = DBL_MAX, fEdepTotMax = 0.; std::map fEkinOfSecondaries; }; diff --git a/examples/extended/electromagnetic/TestEm18/include/StackingAction.hh b/examples/extended/electromagnetic/TestEm18/include/StackingAction.hh index c4dbe25029e..9f9e77ef172 100644 --- a/examples/extended/electromagnetic/TestEm18/include/StackingAction.hh +++ b/examples/extended/electromagnetic/TestEm18/include/StackingAction.hh @@ -44,15 +44,15 @@ class StackingAction : public G4UserStackingAction { public: StackingAction(); - ~StackingAction(); + ~StackingAction() override; void SetTrackSecondaries(G4bool value) { fTrackSecondaries = value;}; - virtual G4ClassificationOfNewTrack ClassifyNewTrack(const G4Track*); + G4ClassificationOfNewTrack ClassifyNewTrack(const G4Track*) override; private: - G4bool fTrackSecondaries; - StackingMessenger* fStackMessenger; + G4bool fTrackSecondaries = false; + StackingMessenger* fStackMessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm18/include/StackingMessenger.hh b/examples/extended/electromagnetic/TestEm18/include/StackingMessenger.hh index b0d146849e1..d51ee950d9d 100644 --- a/examples/extended/electromagnetic/TestEm18/include/StackingMessenger.hh +++ b/examples/extended/electromagnetic/TestEm18/include/StackingMessenger.hh @@ -45,13 +45,13 @@ class StackingMessenger: public G4UImessenger { public: StackingMessenger(StackingAction*); - ~StackingMessenger(); + ~StackingMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - StackingAction* fStackAction; - G4UIcmdWithABool* fTrackCmd; + StackingAction* fStackAction = nullptr; + G4UIcmdWithABool* fTrackCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm18/include/StepMax.hh b/examples/extended/electromagnetic/TestEm18/include/StepMax.hh index 99f0dd42596..45e38ccaa4c 100644 --- a/examples/extended/electromagnetic/TestEm18/include/StepMax.hh +++ b/examples/extended/electromagnetic/TestEm18/include/StepMax.hh @@ -47,24 +47,24 @@ class StepMax : public G4VDiscreteProcess public: StepMax(const G4String& processName ="UserStepMax"); - ~StepMax(); + ~StepMax() override; - virtual G4bool IsApplicable(const G4ParticleDefinition&); + G4bool IsApplicable(const G4ParticleDefinition&) override; void SetMaxStep(G4double); - virtual G4double PostStepGetPhysicalInteractionLength(const G4Track& track, - G4double previousStepSize, - G4ForceCondition* condition); + G4double PostStepGetPhysicalInteractionLength(const G4Track& track, + G4double previousStepSize, + G4ForceCondition* condition) override; - virtual G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&); + G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&) override; - virtual G4double GetMeanFreePath(const G4Track&,G4double,G4ForceCondition*) + G4double GetMeanFreePath(const G4Track&,G4double,G4ForceCondition*) override {return DBL_MAX;}; // it is not needed here ! private: - G4double fMaxChargedStep; - StepMaxMessenger* fMess; + G4double fMaxChargedStep = DBL_MAX; + StepMaxMessenger* fMess = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm18/include/StepMaxMessenger.hh b/examples/extended/electromagnetic/TestEm18/include/StepMaxMessenger.hh index 0d5ab09e3c6..f0b5f2a2cb8 100644 --- a/examples/extended/electromagnetic/TestEm18/include/StepMaxMessenger.hh +++ b/examples/extended/electromagnetic/TestEm18/include/StepMaxMessenger.hh @@ -45,13 +45,13 @@ class StepMaxMessenger: public G4UImessenger { public: StepMaxMessenger(StepMax*); - ~StepMaxMessenger(); + ~StepMaxMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - StepMax* fStepMax; - G4UIcmdWithADoubleAndUnit* fStepMaxCmd; + StepMax* fStepMax = nullptr; + G4UIcmdWithADoubleAndUnit* fStepMaxCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm18/include/SteppingAction.hh b/examples/extended/electromagnetic/TestEm18/include/SteppingAction.hh index b27b7f91a25..ada64e77223 100644 --- a/examples/extended/electromagnetic/TestEm18/include/SteppingAction.hh +++ b/examples/extended/electromagnetic/TestEm18/include/SteppingAction.hh @@ -45,13 +45,13 @@ class SteppingAction : public G4UserSteppingAction { public: SteppingAction(RunAction*,EventAction* ); - ~SteppingAction(); + ~SteppingAction() override = default; - virtual void UserSteppingAction(const G4Step*); + void UserSteppingAction(const G4Step*) override; private: - RunAction* fRunaction; - EventAction* fEventaction; + RunAction* fRunaction = nullptr; + EventAction* fEventaction = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm18/include/TrackingAction.hh b/examples/extended/electromagnetic/TestEm18/include/TrackingAction.hh index d8f1eb55e54..3a9c33d90da 100644 --- a/examples/extended/electromagnetic/TestEm18/include/TrackingAction.hh +++ b/examples/extended/electromagnetic/TestEm18/include/TrackingAction.hh @@ -44,13 +44,13 @@ class TrackingAction : public G4UserTrackingAction { public: TrackingAction(RunAction*); - ~TrackingAction() {}; + ~TrackingAction() override = default; - virtual void PreUserTrackingAction(const G4Track*); - virtual void PostUserTrackingAction(const G4Track*); + void PreUserTrackingAction(const G4Track*) override; + void PostUserTrackingAction(const G4Track*) override; private: - RunAction* fRunAction; + RunAction* fRunAction = nullptr; G4double fEkin1; }; diff --git a/examples/extended/electromagnetic/TestEm18/src/DetectorConstruction.cc b/examples/extended/electromagnetic/TestEm18/src/DetectorConstruction.cc index ac891faa153..9e87fe3ef03 100644 --- a/examples/extended/electromagnetic/TestEm18/src/DetectorConstruction.cc +++ b/examples/extended/electromagnetic/TestEm18/src/DetectorConstruction.cc @@ -50,8 +50,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorConstruction::DetectorConstruction() -:G4VUserDetectorConstruction(),fPBox(0), fLBox(0), fMaterial(0), - fDetectorMessenger(0) { fBoxSize = 1*cm; DefineMaterials(); diff --git a/examples/extended/electromagnetic/TestEm18/src/DetectorMessenger.cc b/examples/extended/electromagnetic/TestEm18/src/DetectorMessenger.cc index aca1c396511..27b580180c5 100644 --- a/examples/extended/electromagnetic/TestEm18/src/DetectorMessenger.cc +++ b/examples/extended/electromagnetic/TestEm18/src/DetectorMessenger.cc @@ -41,12 +41,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorMessenger::DetectorMessenger(DetectorConstruction * Det) -:G4UImessenger(),fDetector(Det), - fTestemDir(0), - fDetDir(0), - fMaterCmd(0), - fSizeCmd(0), - fUpdateCmd(0) +: fDetector(Det) { fTestemDir = new G4UIdirectory("/testem/"); fTestemDir->SetGuidance("commands specific to this example"); diff --git a/examples/extended/electromagnetic/TestEm18/src/EventAction.cc b/examples/extended/electromagnetic/TestEm18/src/EventAction.cc index 017e7e6febc..7055a89cb32 100644 --- a/examples/extended/electromagnetic/TestEm18/src/EventAction.cc +++ b/examples/extended/electromagnetic/TestEm18/src/EventAction.cc @@ -40,12 +40,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... EventAction::EventAction(RunAction* RA) -:G4UserEventAction(),fRunAction(RA) -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -EventAction::~EventAction() +:fRunAction(RA) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm18/src/HistoManager.cc b/examples/extended/electromagnetic/TestEm18/src/HistoManager.cc index e186a52e219..876d47a2566 100644 --- a/examples/extended/electromagnetic/TestEm18/src/HistoManager.cc +++ b/examples/extended/electromagnetic/TestEm18/src/HistoManager.cc @@ -34,19 +34,12 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... HistoManager::HistoManager() - : fFileName("testem18") { Book(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -HistoManager::~HistoManager() -{ -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void HistoManager::Book() { // Create or get analysis manager diff --git a/examples/extended/electromagnetic/TestEm18/src/PhysListEmLivermore.cc b/examples/extended/electromagnetic/TestEm18/src/PhysListEmLivermore.cc index fabcd004fe7..d70d87d0ad4 100644 --- a/examples/extended/electromagnetic/TestEm18/src/PhysListEmLivermore.cc +++ b/examples/extended/electromagnetic/TestEm18/src/PhysListEmLivermore.cc @@ -102,11 +102,6 @@ PhysListEmLivermore::PhysListEmLivermore(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysListEmLivermore::~PhysListEmLivermore() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysListEmLivermore::ConstructProcess() { G4PhysicsListHelper* list = G4PhysicsListHelper::GetPhysicsListHelper(); diff --git a/examples/extended/electromagnetic/TestEm18/src/PhysListEmPenelope.cc b/examples/extended/electromagnetic/TestEm18/src/PhysListEmPenelope.cc index 9124f3b058d..93a76833403 100644 --- a/examples/extended/electromagnetic/TestEm18/src/PhysListEmPenelope.cc +++ b/examples/extended/electromagnetic/TestEm18/src/PhysListEmPenelope.cc @@ -103,11 +103,6 @@ PhysListEmPenelope::PhysListEmPenelope(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysListEmPenelope::~PhysListEmPenelope() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysListEmPenelope::ConstructProcess() { G4PhysicsListHelper* list = G4PhysicsListHelper::GetPhysicsListHelper(); diff --git a/examples/extended/electromagnetic/TestEm18/src/PhysListEmStandard.cc b/examples/extended/electromagnetic/TestEm18/src/PhysListEmStandard.cc index d5078e72b41..c69e17fbe82 100644 --- a/examples/extended/electromagnetic/TestEm18/src/PhysListEmStandard.cc +++ b/examples/extended/electromagnetic/TestEm18/src/PhysListEmStandard.cc @@ -84,11 +84,6 @@ PhysListEmStandard::PhysListEmStandard(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysListEmStandard::~PhysListEmStandard() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysListEmStandard::ConstructProcess() { G4PhysicsListHelper* list = G4PhysicsListHelper::GetPhysicsListHelper(); diff --git a/examples/extended/electromagnetic/TestEm18/src/PhysicsList.cc b/examples/extended/electromagnetic/TestEm18/src/PhysicsList.cc index 06d2ee252fb..f0ec5b47bd4 100644 --- a/examples/extended/electromagnetic/TestEm18/src/PhysicsList.cc +++ b/examples/extended/electromagnetic/TestEm18/src/PhysicsList.cc @@ -43,9 +43,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::PhysicsList() : G4VModularPhysicsList(), - fMessenger(0), - fEmPhysicsList(0) +PhysicsList::PhysicsList() { G4LossTableManager::Instance(); fMessenger = new PhysicsListMessenger(this); diff --git a/examples/extended/electromagnetic/TestEm18/src/PhysicsListMessenger.cc b/examples/extended/electromagnetic/TestEm18/src/PhysicsListMessenger.cc index d9be38b757f..38298e4eaf9 100644 --- a/examples/extended/electromagnetic/TestEm18/src/PhysicsListMessenger.cc +++ b/examples/extended/electromagnetic/TestEm18/src/PhysicsListMessenger.cc @@ -39,8 +39,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysicsListMessenger::PhysicsListMessenger(PhysicsList* pPhys) -:G4UImessenger(),fPhysicsList(pPhys), - fPhysDir(0), fListCmd(0) +: fPhysicsList(pPhys) { fPhysDir = new G4UIdirectory("/testem/phys/"); fPhysDir->SetGuidance("physics list commands"); diff --git a/examples/extended/electromagnetic/TestEm18/src/PrimaryGeneratorAction.cc b/examples/extended/electromagnetic/TestEm18/src/PrimaryGeneratorAction.cc index 522ca18297d..cfa53663974 100644 --- a/examples/extended/electromagnetic/TestEm18/src/PrimaryGeneratorAction.cc +++ b/examples/extended/electromagnetic/TestEm18/src/PrimaryGeneratorAction.cc @@ -43,7 +43,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PrimaryGeneratorAction::PrimaryGeneratorAction(DetectorConstruction* det) -:G4VUserPrimaryGeneratorAction(),fParticleGun(0),fDetector(det) +: fDetector(det) { fParticleGun = new G4ParticleGun(1); G4ParticleDefinition* particle diff --git a/examples/extended/electromagnetic/TestEm18/src/RunAction.cc b/examples/extended/electromagnetic/TestEm18/src/RunAction.cc index 1d97180fdec..d53270c9bbf 100644 --- a/examples/extended/electromagnetic/TestEm18/src/RunAction.cc +++ b/examples/extended/electromagnetic/TestEm18/src/RunAction.cc @@ -45,7 +45,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... RunAction::RunAction(DetectorConstruction* det, PrimaryGeneratorAction* kin) -:G4UserRunAction(),fDetector(det), fPrimary(kin), fHistoManager(0) +: fDetector(det), fPrimary(kin) { fHistoManager = new HistoManager(); } diff --git a/examples/extended/electromagnetic/TestEm18/src/StackingAction.cc b/examples/extended/electromagnetic/TestEm18/src/StackingAction.cc index 9cd94a79155..20b6aae8433 100644 --- a/examples/extended/electromagnetic/TestEm18/src/StackingAction.cc +++ b/examples/extended/electromagnetic/TestEm18/src/StackingAction.cc @@ -38,7 +38,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... StackingAction::StackingAction() -:G4UserStackingAction(), fTrackSecondaries(false) { fStackMessenger = new StackingMessenger(this); } @@ -47,7 +46,7 @@ StackingAction::StackingAction() StackingAction::~StackingAction() { - ///delete fStackMessenger; + delete fStackMessenger; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm18/src/StackingMessenger.cc b/examples/extended/electromagnetic/TestEm18/src/StackingMessenger.cc index 2cd3de418b1..60ad6f95641 100644 --- a/examples/extended/electromagnetic/TestEm18/src/StackingMessenger.cc +++ b/examples/extended/electromagnetic/TestEm18/src/StackingMessenger.cc @@ -38,7 +38,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... StackingMessenger::StackingMessenger(StackingAction* stack) -:G4UImessenger(),fStackAction(stack),fTrackCmd(nullptr) +: fStackAction(stack) { fTrackCmd = new G4UIcmdWithABool("/testem/trackSecondaries",this); fTrackCmd->SetGuidance(" kill or keep secondary tracks"); diff --git a/examples/extended/electromagnetic/TestEm18/src/StepMax.cc b/examples/extended/electromagnetic/TestEm18/src/StepMax.cc index a3915b56f86..ac135e9e9b1 100644 --- a/examples/extended/electromagnetic/TestEm18/src/StepMax.cc +++ b/examples/extended/electromagnetic/TestEm18/src/StepMax.cc @@ -36,7 +36,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... StepMax::StepMax(const G4String& processName) - : G4VDiscreteProcess(processName),fMaxChargedStep(DBL_MAX),fMess(0) + : G4VDiscreteProcess(processName) { fMess = new StepMaxMessenger(this); } diff --git a/examples/extended/electromagnetic/TestEm18/src/StepMaxMessenger.cc b/examples/extended/electromagnetic/TestEm18/src/StepMaxMessenger.cc index 7b1a62b7557..5f24fb1945e 100644 --- a/examples/extended/electromagnetic/TestEm18/src/StepMaxMessenger.cc +++ b/examples/extended/electromagnetic/TestEm18/src/StepMaxMessenger.cc @@ -38,7 +38,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... StepMaxMessenger::StepMaxMessenger(StepMax* stepM) -:G4UImessenger(),fStepMax(stepM),fStepMaxCmd(0) +: fStepMax(stepM) { fStepMaxCmd = new G4UIcmdWithADoubleAndUnit("/testem/stepMax",this); fStepMaxCmd->SetGuidance("Set max allowed step length"); diff --git a/examples/extended/electromagnetic/TestEm18/src/SteppingAction.cc b/examples/extended/electromagnetic/TestEm18/src/SteppingAction.cc index 22db0e7c59b..ab766f9b162 100644 --- a/examples/extended/electromagnetic/TestEm18/src/SteppingAction.cc +++ b/examples/extended/electromagnetic/TestEm18/src/SteppingAction.cc @@ -42,12 +42,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... SteppingAction::SteppingAction(RunAction* RA, EventAction* EA) -:G4UserSteppingAction(),fRunaction(RA), fEventaction(EA) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -SteppingAction::~SteppingAction() +: fRunaction(RA), fEventaction(EA) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm18/src/TrackingAction.cc b/examples/extended/electromagnetic/TestEm18/src/TrackingAction.cc index f2faf6b5444..fb5d4383cc3 100644 --- a/examples/extended/electromagnetic/TestEm18/src/TrackingAction.cc +++ b/examples/extended/electromagnetic/TestEm18/src/TrackingAction.cc @@ -38,7 +38,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... TrackingAction::TrackingAction(RunAction* runaction) -:G4UserTrackingAction(), fRunAction(runaction) +: fRunAction(runaction) { fEkin1 = 0.; } diff --git a/examples/extended/electromagnetic/TestEm2/History b/examples/extended/electromagnetic/TestEm2/History index 716610ee5e6..8323707ff38 100644 --- a/examples/extended/electromagnetic/TestEm2/History +++ b/examples/extended/electromagnetic/TestEm2/History @@ -4,6 +4,8 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-05-04 Michel Maire (testem2-V11-01-00) +- Revision of all headers ## 2021-12-10 Ben Morgan (testem2-V11-00-00) - Change to new Markdown History format diff --git a/examples/extended/electromagnetic/TestEm2/TestEm2.out b/examples/extended/electromagnetic/TestEm2/TestEm2.out index 39c7cd9df2a..2c8fdd10373 100644 --- a/examples/extended/electromagnetic/TestEm2/TestEm2.out +++ b/examples/extended/electromagnetic/TestEm2/TestEm2.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -253,7 +253,7 @@ eBrem: for e- XStype:3 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -285,7 +285,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -317,7 +317,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -330,7 +330,6 @@ ionIoni: for GenericIon XStype:1 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 1, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -376,7 +375,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -408,7 +407,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -440,7 +439,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -472,7 +471,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -504,7 +503,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -536,7 +535,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -568,7 +567,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -600,7 +599,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 100 - User=2.160000s Real=2.168520s Sys=0.000000s + User=1.980000s Real=1.986584s Sys=0.000000s LOGITUDINAL PROFILE CUMULATIVE LOGITUDINAL PROFILE bin Mean rms bin Mean rms diff --git a/examples/extended/electromagnetic/TestEm2/include/ActionInitialization.hh b/examples/extended/electromagnetic/TestEm2/include/ActionInitialization.hh index 678ab95fd5a..5812637849d 100644 --- a/examples/extended/electromagnetic/TestEm2/include/ActionInitialization.hh +++ b/examples/extended/electromagnetic/TestEm2/include/ActionInitialization.hh @@ -40,16 +40,14 @@ class ActionInitialization : public G4VUserActionInitialization public: ActionInitialization(DetectorConstruction*); + ~ActionInitialization() override = default; - virtual ~ActionInitialization(); - - virtual void Build() const; - - virtual void BuildForMaster() const; + void Build() const override; + void BuildForMaster() const override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; }; diff --git a/examples/extended/electromagnetic/TestEm2/include/DetectorConstruction.hh b/examples/extended/electromagnetic/TestEm2/include/DetectorConstruction.hh index 6844a671faf..8ec266b38fc 100644 --- a/examples/extended/electromagnetic/TestEm2/include/DetectorConstruction.hh +++ b/examples/extended/electromagnetic/TestEm2/include/DetectorConstruction.hh @@ -54,7 +54,7 @@ class DetectorConstruction : public G4VUserDetectorConstruction public: DetectorConstruction(); - virtual ~DetectorConstruction(); + ~DetectorConstruction() override; public: @@ -62,9 +62,9 @@ public: void SetLBining (G4ThreeVector); void SetRBining (G4ThreeVector); - virtual G4VPhysicalVolume* Construct(); + G4VPhysicalVolume* Construct() override; - virtual void ConstructSDandField(); + void ConstructSDandField() override; const G4VPhysicalVolume* GetEcal() const {return fPhysiEcal;}; @@ -85,22 +85,22 @@ private: void DefineMaterials(); void UpdateParameters(); - G4int fNLtot, fNRtot; // nb of bins: longitudinal and radial - G4double fDLradl, fDRradl; // bin thickness (in radl unit) - G4double fDLlength, fDRlength; // bin thickness (in length unit) + G4int fNLtot = 40, fNRtot = 50; // nb of bins: longitudinal and radial + G4double fDLradl = 0.5, fDRradl = 0.1; // bin thickness (in radl unit) + G4double fDLlength = 0., fDRlength = 0.; // bin thickness (in length unit) - G4Material* fMaterial; //pointer to the material + G4Material* fMaterial = nullptr; //pointer to the material - G4double fEcalLength; //full length of the Calorimeter - G4double fEcalRadius; //radius of the Calorimeter + G4double fEcalLength = 0.; //full length of the Calorimeter + G4double fEcalRadius = 0.; //radius of the Calorimeter - G4Tubs* fSolidEcal; //pointer to the solid calorimeter - G4LogicalVolume* fLogicEcal; //pointer to the logical calorimeter - G4VPhysicalVolume* fPhysiEcal; //pointer to the physical calorimeter + G4Tubs* fSolidEcal = nullptr; //pointer to the solid calorimeter + G4LogicalVolume* fLogicEcal = nullptr; //pointer to the logical calorimeter + G4VPhysicalVolume* fPhysiEcal = nullptr; //pointer to the physical calorimeter - DetectorMessenger* fDetectorMessenger; //pointer to the Messenger + DetectorMessenger* fDetectorMessenger = nullptr; //pointer to the Messenger - G4Cache fFieldMessenger; + G4Cache fFieldMessenger = nullptr; }; diff --git a/examples/extended/electromagnetic/TestEm2/include/DetectorMessenger.hh b/examples/extended/electromagnetic/TestEm2/include/DetectorMessenger.hh index 869ab09e6f8..b601e11c495 100644 --- a/examples/extended/electromagnetic/TestEm2/include/DetectorMessenger.hh +++ b/examples/extended/electromagnetic/TestEm2/include/DetectorMessenger.hh @@ -49,18 +49,18 @@ class DetectorMessenger: public G4UImessenger { public: DetectorMessenger(DetectorConstruction* ); - virtual ~DetectorMessenger(); + ~DetectorMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; - G4UIdirectory* fTestemDir; - G4UIdirectory* fDetDir; - G4UIcmdWithAString* fMaterCmd; - G4UIcmdWith3Vector* fLBinCmd; - G4UIcmdWith3Vector* fRBinCmd; + G4UIdirectory* fTestemDir = nullptr; + G4UIdirectory* fDetDir = nullptr; + G4UIcmdWithAString* fMaterCmd = nullptr; + G4UIcmdWith3Vector* fLBinCmd = nullptr; + G4UIcmdWith3Vector* fRBinCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/include/EmAcceptance.hh b/examples/extended/electromagnetic/TestEm2/include/EmAcceptance.hh index 4f4b6021a69..36c713ce224 100644 --- a/examples/extended/electromagnetic/TestEm2/include/EmAcceptance.hh +++ b/examples/extended/electromagnetic/TestEm2/include/EmAcceptance.hh @@ -40,8 +40,8 @@ class EmAcceptance { public: - EmAcceptance(); - ~EmAcceptance(); + EmAcceptance() = default; + ~EmAcceptance() = default; void BeginOfAcceptance(const G4String& title, G4int stat); void EndOfAcceptance(); @@ -51,7 +51,7 @@ public: G4double rms, G4double limit); private: - G4bool fIsAccepted; + G4bool fIsAccepted = false; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/include/EventAction.hh b/examples/extended/electromagnetic/TestEm2/include/EventAction.hh index c8a8950cc79..15dcf5734a2 100644 --- a/examples/extended/electromagnetic/TestEm2/include/EventAction.hh +++ b/examples/extended/electromagnetic/TestEm2/include/EventAction.hh @@ -44,11 +44,11 @@ class EventAction : public G4UserEventAction { public: - EventAction(); - virtual ~EventAction(); + EventAction() = default; + ~EventAction() override = default; - virtual void BeginOfEventAction(const G4Event*); - virtual void EndOfEventAction(const G4Event*); + void BeginOfEventAction(const G4Event*) override; + void EndOfEventAction(const G4Event*) override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/include/PhysListEmStandard.hh b/examples/extended/electromagnetic/TestEm2/include/PhysListEmStandard.hh index 85a82f52a8f..655b124da6e 100644 --- a/examples/extended/electromagnetic/TestEm2/include/PhysListEmStandard.hh +++ b/examples/extended/electromagnetic/TestEm2/include/PhysListEmStandard.hh @@ -27,7 +27,6 @@ /// \brief Definition of the PhysListEmStandard class // // -// //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -43,16 +42,16 @@ class PhysListEmStandard : public G4VPhysicsConstructor { public: PhysListEmStandard(const G4String& name = "standard"); - ~PhysListEmStandard(); + ~PhysListEmStandard() override = default; public: // This method is dummy for physics - virtual void ConstructParticle() {}; + void ConstructParticle() override {}; // This method will be invoked in the Construct() method. // each physics process will be instantiated and // registered to the process manager of each particle type - virtual void ConstructProcess(); + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/include/PhysicsList.hh b/examples/extended/electromagnetic/TestEm2/include/PhysicsList.hh index 27d6c73ac87..f6b7335bc4f 100644 --- a/examples/extended/electromagnetic/TestEm2/include/PhysicsList.hh +++ b/examples/extended/electromagnetic/TestEm2/include/PhysicsList.hh @@ -55,12 +55,12 @@ public: private: - PhysicsListMessenger* fMessenger; + PhysicsListMessenger* fMessenger = nullptr; - G4String fEmName; - G4VPhysicsConstructor* fEmPhysicsList; - G4VPhysicsConstructor* fDecayPhysics; - G4VPhysicsConstructor* fHadPhysicsList; + G4String fEmName = " "; + G4VPhysicsConstructor* fEmPhysicsList = nullptr; + G4VPhysicsConstructor* fDecayPhysics = nullptr; + G4VPhysicsConstructor* fHadPhysicsList = nullptr ; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/include/PhysicsListMessenger.hh b/examples/extended/electromagnetic/TestEm2/include/PhysicsListMessenger.hh index 2f871af3995..91e4ec135c1 100644 --- a/examples/extended/electromagnetic/TestEm2/include/PhysicsListMessenger.hh +++ b/examples/extended/electromagnetic/TestEm2/include/PhysicsListMessenger.hh @@ -44,19 +44,19 @@ class G4UIcmdWithAString; class PhysicsListMessenger: public G4UImessenger { -public: + public: - PhysicsListMessenger(PhysicsList* ); - ~PhysicsListMessenger(); + PhysicsListMessenger(PhysicsList*); + ~PhysicsListMessenger() override; - void SetNewValue(G4UIcommand*, G4String) override; + void SetNewValue(G4UIcommand*, G4String) override; -private: + private: - PhysicsList* fPhysicsList; + PhysicsList* fPhysicsList = nullptr; - G4UIdirectory* fPhysDir; - G4UIcmdWithAString* fListCmd; + G4UIdirectory* fPhysDir = nullptr; + G4UIcmdWithAString* fListCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/include/PrimaryGeneratorAction.hh b/examples/extended/electromagnetic/TestEm2/include/PrimaryGeneratorAction.hh index cf0cf7b7749..328260e4c34 100644 --- a/examples/extended/electromagnetic/TestEm2/include/PrimaryGeneratorAction.hh +++ b/examples/extended/electromagnetic/TestEm2/include/PrimaryGeneratorAction.hh @@ -44,16 +44,16 @@ class DetectorConstruction; class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { -public: - PrimaryGeneratorAction(DetectorConstruction*); - virtual ~PrimaryGeneratorAction(); + public: + PrimaryGeneratorAction(DetectorConstruction*); + ~PrimaryGeneratorAction() override; - virtual void GeneratePrimaries(G4Event*); - inline G4ParticleGun* GetParticleGun() {return fParticleGun;}; + void GeneratePrimaries(G4Event*) override; + inline G4ParticleGun* GetParticleGun() {return fParticleGun;}; -private: - G4ParticleGun* fParticleGun; - DetectorConstruction* fDetector; + private: + G4ParticleGun* fParticleGun = nullptr; + DetectorConstruction* fDetector = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/include/Run.hh b/examples/extended/electromagnetic/TestEm2/include/Run.hh index b5fbadcaaa8..8b70e6ef277 100644 --- a/examples/extended/electromagnetic/TestEm2/include/Run.hh +++ b/examples/extended/electromagnetic/TestEm2/include/Run.hh @@ -35,6 +35,7 @@ #include "G4Run.hh" #include "G4AnalysisManager.hh" +#include "DetectorConstruction.hh" #include typedef std::vector MyVector; @@ -51,9 +52,9 @@ class Run : public G4Run public: Run(DetectorConstruction*, PrimaryGeneratorAction*); - virtual ~Run(); + ~Run() override = default; - virtual void Merge(const G4Run*); + void Merge(const G4Run*) override; void InitializePerEvent(); void FillPerEvent(); @@ -70,35 +71,35 @@ public: private: void Reset(); - DetectorConstruction* fDet; - PrimaryGeneratorAction* fKin; + DetectorConstruction* fDet = nullptr; + PrimaryGeneratorAction* fKin = nullptr; - G4int f_nLbin; + G4int f_nLbin = kMaxBin; MyVector f_dEdL; MyVector fSumELongit; MyVector fSumE2Longit; MyVector fSumELongitCumul; MyVector fSumE2LongitCumul; - G4int f_nRbin; + G4int f_nRbin = kMaxBin; MyVector f_dEdR; MyVector fSumERadial; MyVector fSumE2Radial; MyVector fSumERadialCumul; MyVector fSumE2RadialCumul; - G4double fChargTrLength; - G4double fSumChargTrLength; - G4double fSum2ChargTrLength; + G4double fChargTrLength = 0.; + G4double fSumChargTrLength = 0.; + G4double fSum2ChargTrLength = 0.; - G4double fNeutrTrLength; - G4double fSumNeutrTrLength; - G4double fSum2NeutrTrLength; + G4double fNeutrTrLength = 0.; + G4double fSumNeutrTrLength = 0.; + G4double fSum2NeutrTrLength = 0.; - G4double fChargedStep; - G4double fNeutralStep; + G4double fChargedStep = 0.; + G4double fNeutralStep = 0.; - G4int fVerbose; + G4int fVerbose = 0; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/include/RunAction.hh b/examples/extended/electromagnetic/TestEm2/include/RunAction.hh index 374bbfb59a6..0e6d4ee8f13 100644 --- a/examples/extended/electromagnetic/TestEm2/include/RunAction.hh +++ b/examples/extended/electromagnetic/TestEm2/include/RunAction.hh @@ -51,11 +51,11 @@ class RunAction : public G4UserRunAction public: RunAction(DetectorConstruction*, PrimaryGeneratorAction*); - virtual ~RunAction(); + ~RunAction() override; - virtual G4Run* GenerateRun(); - virtual void BeginOfRunAction(const G4Run*); - virtual void EndOfRunAction(const G4Run*); + virtual G4Run* GenerateRun() override; + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; void SetVerbose(G4int val); @@ -66,17 +66,17 @@ private: void BookHisto(); private: - DetectorConstruction* fDet; - PrimaryGeneratorAction* fKin; - RunActionMessenger* fRunMessenger; - G4AnalysisManager* fAnalysisManager; - Run* fRun; + DetectorConstruction* fDet = nullptr; + PrimaryGeneratorAction* fKin = nullptr; + RunActionMessenger* fRunMessenger = nullptr; + G4AnalysisManager* fAnalysisManager = nullptr; + Run* fRun = nullptr; - G4int fVerbose; + G4int fVerbose = 0; - G4double fEdeptrue; - G4double fRmstrue; - G4double fLimittrue; + G4double fEdeptrue = 1.; + G4double fRmstrue = 1.; + G4double fLimittrue = DBL_MAX; }; diff --git a/examples/extended/electromagnetic/TestEm2/include/RunActionMessenger.hh b/examples/extended/electromagnetic/TestEm2/include/RunActionMessenger.hh index b0cfd4f1711..a63a68d3fcf 100644 --- a/examples/extended/electromagnetic/TestEm2/include/RunActionMessenger.hh +++ b/examples/extended/electromagnetic/TestEm2/include/RunActionMessenger.hh @@ -48,16 +48,16 @@ class RunActionMessenger: public G4UImessenger { public: RunActionMessenger(RunAction*); - virtual ~RunActionMessenger(); + ~RunActionMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - RunAction* fRun; + RunAction* fRun = nullptr; - G4UIdirectory* fRunDir; - G4UIcmdWith3Vector* fAccCmd; - G4UIcmdWithAnInteger* fVerbCmd; + G4UIdirectory* fRunDir = nullptr; + G4UIcmdWith3Vector* fAccCmd = nullptr; + G4UIcmdWithAnInteger* fVerbCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/include/StepMax.hh b/examples/extended/electromagnetic/TestEm2/include/StepMax.hh index 804f25d8189..d7204ca2231 100644 --- a/examples/extended/electromagnetic/TestEm2/include/StepMax.hh +++ b/examples/extended/electromagnetic/TestEm2/include/StepMax.hh @@ -47,7 +47,7 @@ class StepMax : public G4VDiscreteProcess public: StepMax(const G4String& processName = "UserMaxStep"); - ~StepMax(); + ~StepMax() override; G4bool IsApplicable(const G4ParticleDefinition&) override; @@ -65,9 +65,9 @@ class StepMax : public G4VDiscreteProcess private: - G4double fMaxChargedStep; + G4double fMaxChargedStep = DBL_MAX; - StepMaxMessenger* fMess; + StepMaxMessenger* fMess = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/include/StepMaxMessenger.hh b/examples/extended/electromagnetic/TestEm2/include/StepMaxMessenger.hh index a6b77a83b7e..6158e14334a 100644 --- a/examples/extended/electromagnetic/TestEm2/include/StepMaxMessenger.hh +++ b/examples/extended/electromagnetic/TestEm2/include/StepMaxMessenger.hh @@ -45,13 +45,13 @@ class StepMaxMessenger: public G4UImessenger { public: StepMaxMessenger(StepMax*); - ~StepMaxMessenger(); + ~StepMaxMessenger() override; void SetNewValue(G4UIcommand*, G4String) override; private: - StepMax* fStepMax; - G4UIcmdWithADoubleAndUnit* fStepMaxCmd; + StepMax* fStepMax = nullptr; + G4UIcmdWithADoubleAndUnit* fStepMaxCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/include/SteppingAction.hh b/examples/extended/electromagnetic/TestEm2/include/SteppingAction.hh index 95a8f13ced7..b086952ede1 100644 --- a/examples/extended/electromagnetic/TestEm2/include/SteppingAction.hh +++ b/examples/extended/electromagnetic/TestEm2/include/SteppingAction.hh @@ -43,12 +43,12 @@ class SteppingAction : public G4UserSteppingAction { public: SteppingAction(DetectorConstruction*); - virtual ~SteppingAction(); + ~SteppingAction() override = default; - virtual void UserSteppingAction(const G4Step*); + void UserSteppingAction(const G4Step*) override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/include/TrackingAction.hh b/examples/extended/electromagnetic/TestEm2/include/TrackingAction.hh index 3bd548e3929..71a86e5ac39 100644 --- a/examples/extended/electromagnetic/TestEm2/include/TrackingAction.hh +++ b/examples/extended/electromagnetic/TestEm2/include/TrackingAction.hh @@ -40,10 +40,10 @@ class TrackingAction : public G4UserTrackingAction { public: - TrackingAction(); - virtual ~TrackingAction() {}; + TrackingAction() = default; + ~TrackingAction() override = default; - virtual void PostUserTrackingAction(const G4Track*); + void PostUserTrackingAction(const G4Track*) override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/src/ActionInitialization.cc b/examples/extended/electromagnetic/TestEm2/src/ActionInitialization.cc index df26a2f4e41..94e93b0b099 100644 --- a/examples/extended/electromagnetic/TestEm2/src/ActionInitialization.cc +++ b/examples/extended/electromagnetic/TestEm2/src/ActionInitialization.cc @@ -41,11 +41,6 @@ ActionInitialization::ActionInitialization(DetectorConstruction* det) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ActionInitialization::~ActionInitialization() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void ActionInitialization::Build() const { diff --git a/examples/extended/electromagnetic/TestEm2/src/DetectorConstruction.cc b/examples/extended/electromagnetic/TestEm2/src/DetectorConstruction.cc index b476b4d9b62..d5d33415405 100644 --- a/examples/extended/electromagnetic/TestEm2/src/DetectorConstruction.cc +++ b/examples/extended/electromagnetic/TestEm2/src/DetectorConstruction.cc @@ -50,14 +50,10 @@ #include "G4UnitsTable.hh" #include "G4AutoDelete.hh" + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorConstruction::DetectorConstruction() - :G4VUserDetectorConstruction(), - fNLtot(40),fNRtot(50),fDLradl(0.5),fDRradl(0.1), - fDLlength(0.),fDRlength(0.),fMaterial(nullptr), - fEcalLength(0.),fEcalRadius(0.), - fSolidEcal(nullptr),fLogicEcal(nullptr),fPhysiEcal(nullptr) { DefineMaterials(); SetMaterial("G4_PbWO4"); diff --git a/examples/extended/electromagnetic/TestEm2/src/DetectorMessenger.cc b/examples/extended/electromagnetic/TestEm2/src/DetectorMessenger.cc index abb3530f4e2..24f7918af12 100644 --- a/examples/extended/electromagnetic/TestEm2/src/DetectorMessenger.cc +++ b/examples/extended/electromagnetic/TestEm2/src/DetectorMessenger.cc @@ -42,7 +42,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorMessenger::DetectorMessenger(DetectorConstruction * Det) -:G4UImessenger(),fDetector(Det) +:fDetector(Det) { fTestemDir = new G4UIdirectory("/testem/"); fTestemDir->SetGuidance(" detector control."); diff --git a/examples/extended/electromagnetic/TestEm2/src/EmAcceptance.cc b/examples/extended/electromagnetic/TestEm2/src/EmAcceptance.cc index 58cc09b1302..b4615b256fc 100644 --- a/examples/extended/electromagnetic/TestEm2/src/EmAcceptance.cc +++ b/examples/extended/electromagnetic/TestEm2/src/EmAcceptance.cc @@ -34,17 +34,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -EmAcceptance::EmAcceptance() - : fIsAccepted(false) -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -EmAcceptance::~EmAcceptance() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void EmAcceptance::BeginOfAcceptance(const G4String& title, G4int stat) { G4cout << G4endl; diff --git a/examples/extended/electromagnetic/TestEm2/src/EventAction.cc b/examples/extended/electromagnetic/TestEm2/src/EventAction.cc index f680d6dd585..1bd3b761a21 100644 --- a/examples/extended/electromagnetic/TestEm2/src/EventAction.cc +++ b/examples/extended/electromagnetic/TestEm2/src/EventAction.cc @@ -39,17 +39,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -EventAction::EventAction() -:G4UserEventAction() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -EventAction::~EventAction() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void EventAction::BeginOfEventAction(const G4Event*) { //additional initializations diff --git a/examples/extended/electromagnetic/TestEm2/src/PhysListEmStandard.cc b/examples/extended/electromagnetic/TestEm2/src/PhysListEmStandard.cc index 248dbc7f721..876dc20e865 100644 --- a/examples/extended/electromagnetic/TestEm2/src/PhysListEmStandard.cc +++ b/examples/extended/electromagnetic/TestEm2/src/PhysListEmStandard.cc @@ -88,11 +88,6 @@ PhysListEmStandard::PhysListEmStandard(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysListEmStandard::~PhysListEmStandard() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysListEmStandard::ConstructProcess() { G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); diff --git a/examples/extended/electromagnetic/TestEm2/src/PhysicsList.cc b/examples/extended/electromagnetic/TestEm2/src/PhysicsList.cc index b1507a06af9..d0d9d42cf47 100644 --- a/examples/extended/electromagnetic/TestEm2/src/PhysicsList.cc +++ b/examples/extended/electromagnetic/TestEm2/src/PhysicsList.cc @@ -77,8 +77,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::PhysicsList() : G4VModularPhysicsList(), - fHadPhysicsList(nullptr) +PhysicsList::PhysicsList() { fMessenger = new PhysicsListMessenger(this); SetVerboseLevel(1); diff --git a/examples/extended/electromagnetic/TestEm2/src/PhysicsListMessenger.cc b/examples/extended/electromagnetic/TestEm2/src/PhysicsListMessenger.cc index 74554522b57..bcbcb0b47c8 100644 --- a/examples/extended/electromagnetic/TestEm2/src/PhysicsListMessenger.cc +++ b/examples/extended/electromagnetic/TestEm2/src/PhysicsListMessenger.cc @@ -39,7 +39,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysicsListMessenger::PhysicsListMessenger(PhysicsList* pPhys) - :G4UImessenger(),fPhysicsList(pPhys) + :fPhysicsList(pPhys) { fPhysDir = new G4UIdirectory("/testem/phys/"); fPhysDir->SetGuidance("physics list commands"); diff --git a/examples/extended/electromagnetic/TestEm2/src/PrimaryGeneratorAction.cc b/examples/extended/electromagnetic/TestEm2/src/PrimaryGeneratorAction.cc index 7995d593ed7..6ced2394345 100644 --- a/examples/extended/electromagnetic/TestEm2/src/PrimaryGeneratorAction.cc +++ b/examples/extended/electromagnetic/TestEm2/src/PrimaryGeneratorAction.cc @@ -41,8 +41,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PrimaryGeneratorAction::PrimaryGeneratorAction (DetectorConstruction* det) -:G4VUserPrimaryGeneratorAction(), - fParticleGun(0),fDetector(det) +:fDetector(det) { G4int n_particle = 1; fParticleGun = new G4ParticleGun(n_particle); diff --git a/examples/extended/electromagnetic/TestEm2/src/Run.cc b/examples/extended/electromagnetic/TestEm2/src/Run.cc index 7e9445b1089..4313b48353b 100644 --- a/examples/extended/electromagnetic/TestEm2/src/Run.cc +++ b/examples/extended/electromagnetic/TestEm2/src/Run.cc @@ -32,7 +32,6 @@ #include "Run.hh" -#include "DetectorConstruction.hh" #include "PrimaryGeneratorAction.hh" #include "EmAcceptance.hh" @@ -44,8 +43,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... Run::Run(DetectorConstruction* det, PrimaryGeneratorAction* kin) - :G4Run(),fDet(det),fKin(kin), - f_nLbin(kMaxBin),f_nRbin(kMaxBin) + :fDet(det),fKin(kin) { Reset(); } @@ -88,11 +86,6 @@ void Run::Reset() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -Run::~Run() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void Run::InitializePerEvent() { //initialize arrays of energy deposit per bin diff --git a/examples/extended/electromagnetic/TestEm2/src/RunAction.cc b/examples/extended/electromagnetic/TestEm2/src/RunAction.cc index ae1f9e302c4..f50a8da9255 100644 --- a/examples/extended/electromagnetic/TestEm2/src/RunAction.cc +++ b/examples/extended/electromagnetic/TestEm2/src/RunAction.cc @@ -47,9 +47,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... RunAction::RunAction(DetectorConstruction* det, PrimaryGeneratorAction* kin) - :G4UserRunAction(), - fDet(det),fKin(kin),fAnalysisManager(nullptr),fRun(nullptr), - fVerbose(0), fEdeptrue(1.), fRmstrue(1.), fLimittrue(DBL_MAX) + :fDet(det),fKin(kin) { fRunMessenger = new RunActionMessenger(this); diff --git a/examples/extended/electromagnetic/TestEm2/src/RunActionMessenger.cc b/examples/extended/electromagnetic/TestEm2/src/RunActionMessenger.cc index 6baebb1aebb..98e0d89c629 100644 --- a/examples/extended/electromagnetic/TestEm2/src/RunActionMessenger.cc +++ b/examples/extended/electromagnetic/TestEm2/src/RunActionMessenger.cc @@ -41,10 +41,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... RunActionMessenger::RunActionMessenger(RunAction* run) -:G4UImessenger(),fRun(run), - fRunDir(0), - fAccCmd(0), - fVerbCmd(0) +:fRun(run) { fRunDir = new G4UIdirectory("/testem/run/"); fRunDir->SetGuidance("run control"); diff --git a/examples/extended/electromagnetic/TestEm2/src/StepMax.cc b/examples/extended/electromagnetic/TestEm2/src/StepMax.cc index baf98b5ab5c..8c7a0372f86 100644 --- a/examples/extended/electromagnetic/TestEm2/src/StepMax.cc +++ b/examples/extended/electromagnetic/TestEm2/src/StepMax.cc @@ -36,7 +36,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... StepMax::StepMax(const G4String& processName) - : G4VDiscreteProcess(processName),fMaxChargedStep(DBL_MAX),fMess(nullptr) + : G4VDiscreteProcess(processName) { fMess = new StepMaxMessenger(this); } diff --git a/examples/extended/electromagnetic/TestEm2/src/StepMaxMessenger.cc b/examples/extended/electromagnetic/TestEm2/src/StepMaxMessenger.cc index 10b2153fbfd..254894b9dd4 100644 --- a/examples/extended/electromagnetic/TestEm2/src/StepMaxMessenger.cc +++ b/examples/extended/electromagnetic/TestEm2/src/StepMaxMessenger.cc @@ -38,7 +38,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... StepMaxMessenger::StepMaxMessenger(StepMax* stepM) -:G4UImessenger(),fStepMax(stepM),fStepMaxCmd(nullptr) +:fStepMax(stepM) { fStepMaxCmd = new G4UIcmdWithADoubleAndUnit("/testem/stepMax",this); fStepMaxCmd->SetGuidance("Set max allowed step length"); diff --git a/examples/extended/electromagnetic/TestEm2/src/SteppingAction.cc b/examples/extended/electromagnetic/TestEm2/src/SteppingAction.cc index ac43771ee44..5755ab4021d 100644 --- a/examples/extended/electromagnetic/TestEm2/src/SteppingAction.cc +++ b/examples/extended/electromagnetic/TestEm2/src/SteppingAction.cc @@ -40,12 +40,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... SteppingAction::SteppingAction(DetectorConstruction* det) -:G4UserSteppingAction(),fDetector(det) -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -SteppingAction::~SteppingAction() +:fDetector(det) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm2/src/TrackingAction.cc b/examples/extended/electromagnetic/TestEm2/src/TrackingAction.cc index 1045cc393fd..8f72e3b5824 100644 --- a/examples/extended/electromagnetic/TestEm2/src/TrackingAction.cc +++ b/examples/extended/electromagnetic/TestEm2/src/TrackingAction.cc @@ -38,12 +38,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -TrackingAction::TrackingAction() -:G4UserTrackingAction() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void TrackingAction::PostUserTrackingAction(const G4Track* aTrack) { //count total track length diff --git a/examples/extended/electromagnetic/TestEm3/.README.txt b/examples/extended/electromagnetic/TestEm3/.README.txt index 6435c5716e3..ec83c005956 100644 --- a/examples/extended/electromagnetic/TestEm3/.README.txt +++ b/examples/extended/electromagnetic/TestEm3/.README.txt @@ -172,14 +172,17 @@ Idle> exit - histo 1 : energy deposit in absorber 1 - histo 2 : energy deposit in absorber 2 - etc. - + - histo 10 : total energy deposit + - 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) - + - histo 23 : total energy leakage + - histo 24 : total energy: Edep + Eleak + NB. Numbering scheme for histograms: - layer : from 1 to NbOfLayers (included) - absorbers : from 1 to NbOfAbsor (included) diff --git a/examples/extended/electromagnetic/TestEm3/History b/examples/extended/electromagnetic/TestEm3/History index 4d79b720975..904a6899d8d 100644 --- a/examples/extended/electromagnetic/TestEm3/History +++ b/examples/extended/electromagnetic/TestEm3/History @@ -4,6 +4,14 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-05-04 Vladimir Ivantchenko (testem3-V11-01-02) +- Run - fixed division by zero for the case if energy deposition in a layer is zero + +## 2023-04-15 Michel Maire (testem3-V11-01-01) +- revision of all headers + +## 2023-01-23 Michel Maire (testem3-V11-01-00) +- compute and plot energy leakage and total energy ## 2022-01-18 Jonas Hahnfeld (testem3-V11-00-01) - Prefer pointer to `const G4Material` if possible diff --git a/examples/extended/electromagnetic/TestEm3/README b/examples/extended/electromagnetic/TestEm3/README index 88f6d282b00..b7da2050dbe 100644 --- a/examples/extended/electromagnetic/TestEm3/README +++ b/examples/extended/electromagnetic/TestEm3/README @@ -165,6 +165,7 @@ histo 1 : energy deposit in absorber 1 histo 2 : energy deposit in absorber 2 ...etc........... + histo 10 : total energy deposit histo 11 : longitudinal profile of energy deposit in absorber 1 (MeV/event) histo 12 : longitudinal profile of energy deposit in absorber 2 (MeV/event) @@ -172,7 +173,8 @@ histo 21 : energy flow (MeV/event) histo 22 : lateral energy leak (MeV/event) - ...etc........... + histo 23 : total energy leakage + histo 24 : total energy: Edep + Eleak NB. Numbering scheme for histograms: layer : from 1 to NbOfLayers (included) diff --git a/examples/extended/electromagnetic/TestEm3/TestEm3-geom.out b/examples/extended/electromagnetic/TestEm3/TestEm3-geom.out index 5e6179af066..5adebc79705 100644 --- a/examples/extended/electromagnetic/TestEm3/TestEm3-geom.out +++ b/examples/extended/electromagnetic/TestEm3/TestEm3-geom.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -54,6 +54,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ------------------------------------------------------------- # /globalField/setValue 0 0 10 tesla + G4ChordFinder: stepperDriverId: 2 # /testem/gun/setDefault /testem/gun/rndm 0.1 @@ -202,7 +203,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -242,7 +243,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -274,7 +275,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -343,7 +344,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -375,7 +376,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -407,7 +408,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -439,7 +440,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -471,7 +472,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -503,7 +504,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -535,7 +536,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV ### Run 0 starts. @@ -543,8 +544,11 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ------------------------------------------------------------ material Edep RMS sqrt(E0(GeV))*rmsE/Emean total tracklen - Aluminium: 85.178 MeV : 1.25 MeV 0.8035 +- 0.2541 % 10.4 cm +- 645 um + Aluminium: 85.764 MeV : 1.608 MeV 1.027 +- 0.3247 % 10.3 cm +- 602 um + Total energy deposited = 85.76 MeV +- 1.608 MeV + Energy leakage = 214.2 MeV +- 1.608 MeV + Total energy : Edep + Eleak = 300 MeV +- 0 eV ------------------------------------------------------------ Beam particle proton E = 300 MeV Mean number of gamma 0 @@ -557,7 +561,7 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Energy deposition from Energy flow balance : material Total Edep - Aluminium: 85.1776 MeV + Aluminium: 85.7636 MeV ------------------------------------------------------------ diff --git a/examples/extended/electromagnetic/TestEm3/TestEm3.out b/examples/extended/electromagnetic/TestEm3/TestEm3.out index 816d81a8742..0d3adf88b26 100644 --- a/examples/extended/electromagnetic/TestEm3/TestEm3.out +++ b/examples/extended/electromagnetic/TestEm3/TestEm3.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -198,7 +198,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -230,7 +230,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -262,7 +262,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -275,7 +275,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -321,7 +320,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -353,7 +352,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -385,7 +384,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -417,7 +416,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -449,7 +448,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -481,7 +480,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -513,7 +512,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -548,7 +547,7 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=1.480000s Real=1.533299s Sys=0.000000s + User=1.310000s Real=1.319357s Sys=0.000000s ------------------------------------------------------------ material Edep RMS sqrt(E0(GeV))*rmsE/Emean total tracklen @@ -556,11 +555,14 @@ Run Summary G4_Pb: 775.36 MeV : 17.79 MeV 2.295 +- 0.2295 % 54.7 cm +- 1.37 cm G4_lAr: 213.68 MeV : 16.63 MeV 7.783 +- 0.7783 % 1.05 m +- 8.45 cm + Total energy deposited = 989 MeV +- 7.31 MeV + Energy leakage = 10.95 MeV +- 7.291 MeV + Total energy : Edep + Eleak = 1000 MeV +- 101.7 keV ------------------------------------------------------------ Beam particle e- E = 1 GeV - Mean number of gamma 507 - Mean number of e- 870 - Mean number of e+ 53.7 + Mean number of gamma 506.9 + Mean number of e- 870.1 + Mean number of e+ 53.67 Mean number of charged steps 3659.12 Mean number of neutral steps 3651.52 ------------------------------------------------------------ @@ -620,7 +622,7 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=1.250000s Real=1.251980s Sys=0.000000s + User=1.140000s Real=1.143307s Sys=0.000000s ------------------------------------------------------------ material Edep RMS sqrt(E0(GeV))*rmsE/Emean total tracklen @@ -628,11 +630,14 @@ Run Summary G4_Pb: 773.86 MeV : 20.77 MeV 2.683 +- 0.2683 % 52 cm +- 1.36 cm G4_lAr: 215.88 MeV : 17.59 MeV 8.15 +- 0.815 % 1.02 m +- 8.23 cm + Total energy deposited = 989.7 MeV +- 14.37 MeV + Energy leakage = 8.747 MeV +- 6.022 MeV + Total energy : Edep + Eleak = 998.5 MeV +- 12.42 MeV ------------------------------------------------------------ Beam particle e- E = 1 GeV - Mean number of gamma 290 - Mean number of e- 556 - Mean number of e+ 53.2 + Mean number of gamma 290.5 + Mean number of e- 556.2 + Mean number of e+ 53.21 Mean number of charged steps 3103.77 Mean number of neutral steps 2939.75 ------------------------------------------------------------ diff --git a/examples/extended/electromagnetic/TestEm3/include/ActionInitialization.hh b/examples/extended/electromagnetic/TestEm3/include/ActionInitialization.hh index 8bd84b19975..8cb4ed377ed 100644 --- a/examples/extended/electromagnetic/TestEm3/include/ActionInitialization.hh +++ b/examples/extended/electromagnetic/TestEm3/include/ActionInitialization.hh @@ -41,13 +41,13 @@ class ActionInitialization : public G4VUserActionInitialization { public: ActionInitialization(DetectorConstruction*); - ~ActionInitialization() override; + ~ActionInitialization() override = default; void BuildForMaster() const override; void Build() const override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; }; #endif diff --git a/examples/extended/electromagnetic/TestEm3/include/DetectorConstruction.hh b/examples/extended/electromagnetic/TestEm3/include/DetectorConstruction.hh index 27c316d4d3b..989c7de1c0d 100644 --- a/examples/extended/electromagnetic/TestEm3/include/DetectorConstruction.hh +++ b/examples/extended/electromagnetic/TestEm3/include/DetectorConstruction.hh @@ -54,7 +54,7 @@ class DetectorConstruction : public G4VUserDetectorConstruction public: DetectorConstruction(); - ~DetectorConstruction(); + ~DetectorConstruction() override; public: @@ -66,8 +66,8 @@ public: void SetCalorSizeYZ (G4double); void SetNbOfLayers (G4int); - virtual G4VPhysicalVolume* Construct(); - virtual void ConstructSDandField(); + G4VPhysicalVolume* Construct() override; + void ConstructSDandField() override; public: @@ -94,38 +94,38 @@ private: void DefineMaterials(); void ComputeCalorParameters(); - G4int fNbOfAbsor; + G4int fNbOfAbsor = 0; G4Material* fAbsorMaterial[kMaxAbsor]; G4double fAbsorThickness[kMaxAbsor]; - G4int fNbOfLayers; - G4double fLayerThickness; + G4int fNbOfLayers = 0; + G4double fLayerThickness = 0.; - G4double fCalorSizeYZ; - G4double fCalorThickness; + G4double fCalorSizeYZ = 0.; + G4double fCalorThickness = 0.; - G4Material* fWorldMaterial; - G4double fWorldSizeYZ; - G4double fWorldSizeX; + G4Material* fWorldMaterial = nullptr; + G4double fWorldSizeYZ = 0.; + G4double fWorldSizeX = 0.; - G4Box* fSolidWorld; - G4LogicalVolume* fLogicWorld; - G4VPhysicalVolume* fPhysiWorld; + G4Box* fSolidWorld = nullptr; + G4LogicalVolume* fLogicWorld = nullptr; + G4VPhysicalVolume* fPhysiWorld = nullptr; - G4Box* fSolidCalor; - G4LogicalVolume* fLogicCalor; - G4VPhysicalVolume* fPhysiCalor; + G4Box* fSolidCalor = nullptr; + G4LogicalVolume* fLogicCalor = nullptr; + G4VPhysicalVolume* fPhysiCalor = nullptr; - G4Box* fSolidLayer; - G4LogicalVolume* fLogicLayer; - G4VPhysicalVolume* fPhysiLayer; + G4Box* fSolidLayer = nullptr; + G4LogicalVolume* fLogicLayer = nullptr; + G4VPhysicalVolume* fPhysiLayer = nullptr; G4Box* fSolidAbsor[kMaxAbsor]; G4LogicalVolume* fLogicAbsor[kMaxAbsor]; G4VPhysicalVolume* fPhysiAbsor[kMaxAbsor]; - DetectorMessenger* fDetectorMessenger; - G4Cache fFieldMessenger; + DetectorMessenger* fDetectorMessenger = nullptr; + G4Cache fFieldMessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/include/DetectorMessenger.hh b/examples/extended/electromagnetic/TestEm3/include/DetectorMessenger.hh index c6566f12c0e..c3ea2a33f02 100644 --- a/examples/extended/electromagnetic/TestEm3/include/DetectorMessenger.hh +++ b/examples/extended/electromagnetic/TestEm3/include/DetectorMessenger.hh @@ -49,20 +49,20 @@ class DetectorMessenger: public G4UImessenger { public: DetectorMessenger(DetectorConstruction* ); - ~DetectorMessenger(); + ~DetectorMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; - G4UIdirectory* fTestemDir; - G4UIdirectory* fDetDir; + G4UIdirectory* fTestemDir = nullptr; + G4UIdirectory* fDetDir = nullptr; - G4UIcmdWithADoubleAndUnit* fSizeYZCmd; - G4UIcmdWithAnInteger* fNbLayersCmd; - G4UIcmdWithAnInteger* fNbAbsorCmd; - G4UIcommand* fAbsorCmd; + G4UIcmdWithADoubleAndUnit* fSizeYZCmd = nullptr; + G4UIcmdWithAnInteger* fNbLayersCmd = nullptr; + G4UIcmdWithAnInteger* fNbAbsorCmd = nullptr; + G4UIcommand* fAbsorCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/include/EmAcceptance.hh b/examples/extended/electromagnetic/TestEm3/include/EmAcceptance.hh index 264482fe2b2..d89594652a6 100644 --- a/examples/extended/electromagnetic/TestEm3/include/EmAcceptance.hh +++ b/examples/extended/electromagnetic/TestEm3/include/EmAcceptance.hh @@ -41,8 +41,8 @@ class EmAcceptance { public: - EmAcceptance(); - ~EmAcceptance(); + EmAcceptance() = default; + ~EmAcceptance() = default; void BeginOfAcceptance(const G4String& title, G4int stat); void EndOfAcceptance(); @@ -53,7 +53,7 @@ public: private: - G4bool fIsAccepted; + G4bool fIsAccepted = false; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/include/EventAction.hh b/examples/extended/electromagnetic/TestEm3/include/EventAction.hh index 7b5959bf6bd..3a0ad6235e3 100644 --- a/examples/extended/electromagnetic/TestEm3/include/EventAction.hh +++ b/examples/extended/electromagnetic/TestEm3/include/EventAction.hh @@ -43,19 +43,20 @@ class EventAction : public G4UserEventAction { public: EventAction(DetectorConstruction*); - ~EventAction(); + ~EventAction() override = default; - virtual void BeginOfEventAction(const G4Event*); - virtual void EndOfEventAction(const G4Event*); + void BeginOfEventAction(const G4Event*) override; + void EndOfEventAction(const G4Event*) override; - void SumEnergy(G4int k, G4double de, G4double dl) - {fEnergyDeposit[k] += de; fTrackLengthCh[k] += dl;}; + void SumEnergy(G4int k, G4double de, G4double dl); + void SumEnergyLeak (G4double eleak); private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; - G4double fEnergyDeposit[kMaxAbsor]; - G4double fTrackLengthCh[kMaxAbsor]; + G4double fEnergyDeposit[kMaxAbsor]; + G4double fTrackLengthCh[kMaxAbsor]; + G4double fEnergyLeak; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/include/HistoManager.hh b/examples/extended/electromagnetic/TestEm3/include/HistoManager.hh index bade605ef00..d2559342ade 100644 --- a/examples/extended/electromagnetic/TestEm3/include/HistoManager.hh +++ b/examples/extended/electromagnetic/TestEm3/include/HistoManager.hh @@ -23,7 +23,6 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -37,7 +36,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "DetectorConstruction.hh" - const G4int kMaxHisto = 2*kMaxAbsor + 3; + const G4int kMaxHisto = 2*kMaxAbsor + 5; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -45,11 +44,11 @@ class HistoManager { public: HistoManager(); - ~HistoManager(); + ~HistoManager() = default; private: void Book(); - G4String fFileName; + G4String fFileName = "testem3"; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/include/PhysListEmStandard.hh b/examples/extended/electromagnetic/TestEm3/include/PhysListEmStandard.hh index 5374790d264..60ddb96599e 100644 --- a/examples/extended/electromagnetic/TestEm3/include/PhysListEmStandard.hh +++ b/examples/extended/electromagnetic/TestEm3/include/PhysListEmStandard.hh @@ -42,16 +42,16 @@ class PhysListEmStandard : public G4VPhysicsConstructor { public: PhysListEmStandard(const G4String& name = "standard"); - ~PhysListEmStandard(); + ~PhysListEmStandard() override = default; public: // This method is dummy for physics - virtual void ConstructParticle() {}; + void ConstructParticle() override {}; // This method will be invoked in the Construct() method. // each physics process will be instantiated and // registered to the process manager of each particle type - virtual void ConstructProcess(); + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/include/PhysicsList.hh b/examples/extended/electromagnetic/TestEm3/include/PhysicsList.hh index eed32863063..b2ffe853373 100644 --- a/examples/extended/electromagnetic/TestEm3/include/PhysicsList.hh +++ b/examples/extended/electromagnetic/TestEm3/include/PhysicsList.hh @@ -55,12 +55,12 @@ public: private: - PhysicsListMessenger* fMessenger; + PhysicsListMessenger* fMessenger = nullptr; - G4String fEmName; - G4VPhysicsConstructor* fEmPhysicsList; - G4VPhysicsConstructor* fDecayPhysics; - G4VPhysicsConstructor* fHadPhysicsList; + G4String fEmName = " "; + G4VPhysicsConstructor* fEmPhysicsList = nullptr; + G4VPhysicsConstructor* fDecayPhysics = nullptr; + G4VPhysicsConstructor* fHadPhysicsList = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/include/PhysicsListMessenger.hh b/examples/extended/electromagnetic/TestEm3/include/PhysicsListMessenger.hh index fd57ffc1015..f3112a68198 100644 --- a/examples/extended/electromagnetic/TestEm3/include/PhysicsListMessenger.hh +++ b/examples/extended/electromagnetic/TestEm3/include/PhysicsListMessenger.hh @@ -47,16 +47,16 @@ class PhysicsListMessenger: public G4UImessenger public: PhysicsListMessenger(PhysicsList* ); - ~PhysicsListMessenger(); + ~PhysicsListMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - PhysicsList* fPhysicsList; + PhysicsList* fPhysicsList = nullptr; - G4UIdirectory* fPhysDir; - G4UIcmdWithAString* fListCmd; + G4UIdirectory* fPhysDir = nullptr; + G4UIcmdWithAString* fListCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/include/PrimaryGeneratorAction.hh b/examples/extended/electromagnetic/TestEm3/include/PrimaryGeneratorAction.hh index 5427a41bdc0..5bf6d0e43ca 100644 --- a/examples/extended/electromagnetic/TestEm3/include/PrimaryGeneratorAction.hh +++ b/examples/extended/electromagnetic/TestEm3/include/PrimaryGeneratorAction.hh @@ -47,22 +47,21 @@ class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: PrimaryGeneratorAction(DetectorConstruction*); - ~PrimaryGeneratorAction(); + ~PrimaryGeneratorAction() override; public: void SetDefaultKinematic(); void SetRndmBeam(G4double val) { fRndmBeam = val;} - virtual - void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; G4ParticleGun* GetParticleGun() {return fParticleGun;}; private: - G4ParticleGun* fParticleGun; - DetectorConstruction* fDetector; - G4double fRndmBeam; //lateral random beam extension in fraction sizeYZ/2 + G4ParticleGun* fParticleGun = nullptr; + DetectorConstruction* fDetector = nullptr; + G4double fRndmBeam = 0.; //lateral beam extension in fraction of sizeYZ - PrimaryGeneratorMessenger* fGunMessenger; + PrimaryGeneratorMessenger* fGunMessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/include/PrimaryGeneratorMessenger.hh b/examples/extended/electromagnetic/TestEm3/include/PrimaryGeneratorMessenger.hh index 834075a39dc..adcf763d80f 100644 --- a/examples/extended/electromagnetic/TestEm3/include/PrimaryGeneratorMessenger.hh +++ b/examples/extended/electromagnetic/TestEm3/include/PrimaryGeneratorMessenger.hh @@ -47,16 +47,16 @@ class PrimaryGeneratorMessenger: public G4UImessenger { public: PrimaryGeneratorMessenger(PrimaryGeneratorAction*); - ~PrimaryGeneratorMessenger(); + ~PrimaryGeneratorMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - PrimaryGeneratorAction* fAction; + PrimaryGeneratorAction* fAction = nullptr; - G4UIdirectory* fGunDir; - G4UIcmdWithoutParameter* fDefaultCmd; - G4UIcmdWithADouble* fRndmCmd; + G4UIdirectory* fGunDir = nullptr; + G4UIcmdWithoutParameter* fDefaultCmd = nullptr; + G4UIcmdWithADouble* fRndmCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/include/Run.hh b/examples/extended/electromagnetic/TestEm3/include/Run.hh index 85e72936bbd..5d95dae3a4d 100644 --- a/examples/extended/electromagnetic/TestEm3/include/Run.hh +++ b/examples/extended/electromagnetic/TestEm3/include/Run.hh @@ -49,13 +49,14 @@ class Run : public G4Run { public: Run(DetectorConstruction*); - ~Run(); + ~Run() override = default; public: void SetPrimary(G4ParticleDefinition* particle, G4double energy); void FillPerEvent(G4int,G4double,G4double); + void SumEnergies (G4double edeptot, G4double eleak); void SumEnergyFlow (G4int plane, G4double Eflow); void SumLateralEleak(G4int cell, G4double Eflow); void AddChargedStep(); @@ -65,32 +66,36 @@ class Run : public G4Run void SetEdepAndRMS(G4int, G4double, G4double, G4double); void SetApplyLimit(G4bool); - virtual void Merge(const G4Run*); + void Merge(const G4Run*) override; void EndOfRun(); private: - DetectorConstruction* fDetector; - G4ParticleDefinition* fParticle; - G4double fEkin; + DetectorConstruction* fDetector = nullptr; + G4ParticleDefinition* fParticle = nullptr; + G4double fEkin = 0.; G4double fSumEAbs [kMaxAbsor], fSum2EAbs [kMaxAbsor]; G4double fSumLAbs [kMaxAbsor], fSum2LAbs [kMaxAbsor]; + G4double fEdepTot = 0., fEdepTot2 = 0.; + G4double fEleakTot = 0., fEleakTot2 = 0.; + G4double fEtotal = 0., fEtotal2 = 0.; + std::vector fEnergyFlow; std::vector fLateralEleak; std::vector fEnergyDeposit[kMaxAbsor]; - G4double fChargedStep; - G4double fNeutralStep; + G4double fChargedStep = 0.; + G4double fNeutralStep = 0.; - G4int fN_gamma; - G4int fN_elec; - G4int fN_pos; + G4int fN_gamma = 0; + G4int fN_elec = 0; + G4int fN_pos = 0; G4double fEdeptrue [kMaxAbsor]; G4double fRmstrue [kMaxAbsor]; G4double fLimittrue[kMaxAbsor]; - G4bool fApplyLimit; + G4bool fApplyLimit = false; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/include/RunAction.hh b/examples/extended/electromagnetic/TestEm3/include/RunAction.hh index 83618aa61f9..a364ae47ab5 100644 --- a/examples/extended/electromagnetic/TestEm3/include/RunAction.hh +++ b/examples/extended/electromagnetic/TestEm3/include/RunAction.hh @@ -52,11 +52,11 @@ class RunAction : public G4UserRunAction public: RunAction(DetectorConstruction*, PrimaryGeneratorAction* prim=0); - ~RunAction(); + ~RunAction() override; - virtual G4Run* GenerateRun(); - virtual void BeginOfRunAction(const G4Run*); - virtual void EndOfRunAction(const G4Run*); + G4Run* GenerateRun() override; + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; // Acceptance parameters void SetEdepAndRMS(G4int, G4double, G4double, G4double); @@ -64,12 +64,12 @@ public: private: - DetectorConstruction* fDetector; - PrimaryGeneratorAction* fPrimary; - Run* fRun; - RunActionMessenger* fRunMessenger; - HistoManager* fHistoManager; - G4Timer* fTimer; + DetectorConstruction* fDetector = nullptr; + PrimaryGeneratorAction* fPrimary = nullptr; + Run* fRun = nullptr; + RunActionMessenger* fRunMessenger = nullptr; + HistoManager* fHistoManager = nullptr; + G4Timer* fTimer = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/include/RunActionMessenger.hh b/examples/extended/electromagnetic/TestEm3/include/RunActionMessenger.hh index cea4a6ac260..09187e310f2 100644 --- a/examples/extended/electromagnetic/TestEm3/include/RunActionMessenger.hh +++ b/examples/extended/electromagnetic/TestEm3/include/RunActionMessenger.hh @@ -47,16 +47,16 @@ class RunActionMessenger: public G4UImessenger { public: RunActionMessenger(RunAction*); - virtual ~RunActionMessenger(); + ~RunActionMessenger() override; - void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - RunAction* fRunAction; + RunAction* fRunAction = nullptr; - G4UIdirectory* fRunDir; - G4UIcommand* fAccCmd; - G4UIcmdWithABool* fLimCmd; + G4UIdirectory* fRunDir = nullptr; + G4UIcommand* fAccCmd = nullptr; + G4UIcmdWithABool* fLimCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/include/StepMax.hh b/examples/extended/electromagnetic/TestEm3/include/StepMax.hh index aa0a469165b..d464da619f8 100644 --- a/examples/extended/electromagnetic/TestEm3/include/StepMax.hh +++ b/examples/extended/electromagnetic/TestEm3/include/StepMax.hh @@ -47,7 +47,7 @@ class StepMax : public G4VDiscreteProcess public: StepMax(const G4String& processName = "UserMaxStep"); - ~StepMax(); + ~StepMax(); G4bool IsApplicable(const G4ParticleDefinition&) override; @@ -65,9 +65,9 @@ class StepMax : public G4VDiscreteProcess private: - G4double fMaxChargedStep; + G4double fMaxChargedStep = DBL_MAX; - StepMaxMessenger* fMess; + StepMaxMessenger* fMess = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/include/StepMaxMessenger.hh b/examples/extended/electromagnetic/TestEm3/include/StepMaxMessenger.hh index f990039bcf1..6158e14334a 100644 --- a/examples/extended/electromagnetic/TestEm3/include/StepMaxMessenger.hh +++ b/examples/extended/electromagnetic/TestEm3/include/StepMaxMessenger.hh @@ -45,13 +45,13 @@ class StepMaxMessenger: public G4UImessenger { public: StepMaxMessenger(StepMax*); - ~StepMaxMessenger(); + ~StepMaxMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - StepMax* fStepMax; - G4UIcmdWithADoubleAndUnit* fStepMaxCmd; + StepMax* fStepMax = nullptr; + G4UIcmdWithADoubleAndUnit* fStepMaxCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/include/SteppingAction.hh b/examples/extended/electromagnetic/TestEm3/include/SteppingAction.hh index 9711c507830..21d011c4246 100644 --- a/examples/extended/electromagnetic/TestEm3/include/SteppingAction.hh +++ b/examples/extended/electromagnetic/TestEm3/include/SteppingAction.hh @@ -45,15 +45,15 @@ class SteppingAction : public G4UserSteppingAction { public: SteppingAction(DetectorConstruction*, EventAction*); - ~SteppingAction(); + ~SteppingAction() override = default; - virtual void UserSteppingAction(const G4Step*); + void UserSteppingAction(const G4Step*) override; G4double BirksAttenuation(const G4Step*); private: - DetectorConstruction* fDetector; - EventAction* fEventAct; + DetectorConstruction* fDetector = nullptr; + EventAction* fEventAct = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/include/TrackingAction.hh b/examples/extended/electromagnetic/TestEm3/include/TrackingAction.hh index d33d018c4ba..2954fd980a4 100644 --- a/examples/extended/electromagnetic/TestEm3/include/TrackingAction.hh +++ b/examples/extended/electromagnetic/TestEm3/include/TrackingAction.hh @@ -37,20 +37,22 @@ #include "globals.hh" class DetectorConstruction; +class EventAction; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... class TrackingAction : public G4UserTrackingAction { public: - TrackingAction(DetectorConstruction*); - ~TrackingAction() {}; + TrackingAction(DetectorConstruction*, EventAction*); + ~TrackingAction() override = default; - virtual void PreUserTrackingAction(const G4Track*); - virtual void PostUserTrackingAction(const G4Track*); + void PreUserTrackingAction(const G4Track*) override; + void PostUserTrackingAction(const G4Track*) override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; + EventAction* fEventAct = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/run01.mac b/examples/extended/electromagnetic/TestEm3/run01.mac index 94d7e0374ad..d9fd814c13a 100644 --- a/examples/extended/electromagnetic/TestEm3/run01.mac +++ b/examples/extended/electromagnetic/TestEm3/run01.mac @@ -4,26 +4,30 @@ # # Lead-liquidArgon 50 layers; electron 1 GeV # -/control/verbose 2 -/run/verbose 2 +/control/verbose 1 +/run/verbose 1 # /testem/phys/addPhysics local +###/testem/phys/addPhysics emstandard_opt0 # -/run/setCut 100 um +###/run/setCut 100 um # +/process/em/verbose 0 /run/initialize # /gun/particle e- /gun/energy 1 GeV # /analysis/setFileName run01 -/analysis/h1/set 1 100 700. 1000. MeV -/analysis/h1/set 2 100 0. 300. MeV +/analysis/h1/set 1 100 700. 1000. MeV #edep in absor1 +/analysis/h1/set 2 100 0. 300. MeV #edep in absor2 +/analysis/h1/set 10 110 900. 1010. MeV #total edep /analysis/h1/set 11 52 0. 52. none #long. profile in absor1 /analysis/h1/set 12 52 0. 52. none #long. profile in absor2 /analysis/h1/set 21 102 0. 102. none #energy flow /analysis/h1/set 22 102 0. 102. none #lateral energy leakage +/analysis/h1/set 23 100 0. 50. MeV #eleak +/analysis/h1/set 24 110 900. 1010. MeV #total energy: edep + eleak # -/run/printProgress 100 -# -/run/beamOn 1000 +/run/printProgress 200 +/run/beamOn 2000 diff --git a/examples/extended/electromagnetic/TestEm3/src/ActionInitialization.cc b/examples/extended/electromagnetic/TestEm3/src/ActionInitialization.cc index cbbad13f87a..2392a1a827f 100644 --- a/examples/extended/electromagnetic/TestEm3/src/ActionInitialization.cc +++ b/examples/extended/electromagnetic/TestEm3/src/ActionInitialization.cc @@ -38,12 +38,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ActionInitialization::ActionInitialization(DetectorConstruction* det) - : G4VUserActionInitialization(),fDetector(det) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -ActionInitialization::~ActionInitialization() + :fDetector(det) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -67,7 +62,7 @@ void ActionInitialization::Build() const EventAction* event = new EventAction(fDetector); SetUserAction(event); - SetUserAction(new TrackingAction(fDetector)); + SetUserAction(new TrackingAction(fDetector,event)); SetUserAction(new SteppingAction(fDetector,event)); } diff --git a/examples/extended/electromagnetic/TestEm3/src/DetectorConstruction.cc b/examples/extended/electromagnetic/TestEm3/src/DetectorConstruction.cc index ad609b8c5a7..45c776f4536 100644 --- a/examples/extended/electromagnetic/TestEm3/src/DetectorConstruction.cc +++ b/examples/extended/electromagnetic/TestEm3/src/DetectorConstruction.cc @@ -55,11 +55,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorConstruction::DetectorConstruction() - :G4VUserDetectorConstruction(), - fWorldMaterial(nullptr),fSolidWorld(nullptr),fLogicWorld(nullptr), - fPhysiWorld(nullptr),fSolidCalor(nullptr),fLogicCalor(nullptr), - fPhysiCalor(nullptr),fSolidLayer(nullptr),fLogicLayer(nullptr), - fPhysiLayer(nullptr) { for(G4int i=0; iSetGuidance("UI commands specific to this example"); diff --git a/examples/extended/electromagnetic/TestEm3/src/EmAcceptance.cc b/examples/extended/electromagnetic/TestEm3/src/EmAcceptance.cc index 2630812984b..fa2d4f65ccc 100644 --- a/examples/extended/electromagnetic/TestEm3/src/EmAcceptance.cc +++ b/examples/extended/electromagnetic/TestEm3/src/EmAcceptance.cc @@ -34,17 +34,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -EmAcceptance::EmAcceptance() - : fIsAccepted(false) -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -EmAcceptance::~EmAcceptance() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void EmAcceptance::BeginOfAcceptance(const G4String& title, G4int stat) { G4cout << "\n<<<<>>>> " << stat << " events for " << title diff --git a/examples/extended/electromagnetic/TestEm3/src/EventAction.cc b/examples/extended/electromagnetic/TestEm3/src/EventAction.cc index 4aa88044790..03af3ecdfc6 100644 --- a/examples/extended/electromagnetic/TestEm3/src/EventAction.cc +++ b/examples/extended/electromagnetic/TestEm3/src/EventAction.cc @@ -41,12 +41,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... EventAction::EventAction(DetectorConstruction* det) -:G4UserEventAction(),fDetector(det) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -EventAction::~EventAction() +:fDetector(det) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -58,6 +53,24 @@ void EventAction::BeginOfEventAction(const G4Event*) for (G4int k=0; k( G4RunManager::GetRunManager()->GetNonConstCurrentRun()); - + + G4double EdepTot =0.; for (G4int k=1; k<=fDetector->GetNbOfAbsor(); k++) { run->FillPerEvent(k,fEnergyDeposit[k],fTrackLengthCh[k]); if (fEnergyDeposit[k] > 0.) G4AnalysisManager::Instance()->FillH1(k, fEnergyDeposit[k]); + EdepTot += fEnergyDeposit[k]; } + + run->SumEnergies(EdepTot,fEnergyLeak); + + //histograms + G4AnalysisManager* analysis = G4AnalysisManager::Instance(); + analysis->FillH1(kMaxAbsor, EdepTot); + G4int id = 2*kMaxAbsor+3; + analysis->FillH1(id, fEnergyLeak); + G4double ETot = EdepTot + fEnergyLeak; + analysis->FillH1(++id, ETot); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/src/HistoManager.cc b/examples/extended/electromagnetic/TestEm3/src/HistoManager.cc index a9fc7668b29..d32cda03227 100644 --- a/examples/extended/electromagnetic/TestEm3/src/HistoManager.cc +++ b/examples/extended/electromagnetic/TestEm3/src/HistoManager.cc @@ -23,7 +23,6 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -35,19 +34,12 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... HistoManager::HistoManager() - : fFileName("testem3") { Book(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -HistoManager::~HistoManager() -{ -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void HistoManager::Book() { // Create or get analysis manager @@ -63,7 +55,7 @@ void HistoManager::Book() const G4String id[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10","11","12","13","14","15","16","17","18","19", - "20","21","22"}; + "20","21","22","23","24"}; G4String title; // Default values (to be reset via /analysis/h1/set command) @@ -74,11 +66,14 @@ void HistoManager::Book() // Create all histograms as inactivated // as we have not yet set nbins, vmin, vmax for (G4int k=0; k kMaxAbsor) title = "Edep longit. profile (MeV/event) in absorber " + if (k < kMaxAbsor) title = "Edep in absorber " + id[k]; + if (k == kMaxAbsor) title = "total energy deposited"; + if (k > kMaxAbsor) title = "Edep longit. profile (MeV/event) in absorber " + id[k-kMaxAbsor]; if (k == 2*kMaxAbsor+1) title = "energy flow (MeV/event)"; if (k == 2*kMaxAbsor+2) title = "lateral energy leak (MeV/event)"; + if (k == 2*kMaxAbsor+3) title = "total energy leakage"; + if (k == 2*kMaxAbsor+4) title = "total energy relased : Edep + Eleak"; G4int ih = analysisManager->CreateH1(id[k], title, nbins, vmin, vmax); analysisManager->SetH1Activation(ih, false); } diff --git a/examples/extended/electromagnetic/TestEm3/src/PhysListEmStandard.cc b/examples/extended/electromagnetic/TestEm3/src/PhysListEmStandard.cc index 248dbc7f721..876dc20e865 100644 --- a/examples/extended/electromagnetic/TestEm3/src/PhysListEmStandard.cc +++ b/examples/extended/electromagnetic/TestEm3/src/PhysListEmStandard.cc @@ -88,11 +88,6 @@ PhysListEmStandard::PhysListEmStandard(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysListEmStandard::~PhysListEmStandard() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysListEmStandard::ConstructProcess() { G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); diff --git a/examples/extended/electromagnetic/TestEm3/src/PhysicsList.cc b/examples/extended/electromagnetic/TestEm3/src/PhysicsList.cc index 30a493159d7..73b462d1b4f 100644 --- a/examples/extended/electromagnetic/TestEm3/src/PhysicsList.cc +++ b/examples/extended/electromagnetic/TestEm3/src/PhysicsList.cc @@ -77,8 +77,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::PhysicsList() : G4VModularPhysicsList(), - fHadPhysicsList(nullptr) +PhysicsList::PhysicsList() { fMessenger = new PhysicsListMessenger(this); SetVerboseLevel(1); diff --git a/examples/extended/electromagnetic/TestEm3/src/PhysicsListMessenger.cc b/examples/extended/electromagnetic/TestEm3/src/PhysicsListMessenger.cc index 00572f51e9b..409887c0e30 100644 --- a/examples/extended/electromagnetic/TestEm3/src/PhysicsListMessenger.cc +++ b/examples/extended/electromagnetic/TestEm3/src/PhysicsListMessenger.cc @@ -39,7 +39,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysicsListMessenger::PhysicsListMessenger(PhysicsList* pPhys) - :G4UImessenger(),fPhysicsList(pPhys) + :fPhysicsList(pPhys) { fPhysDir = new G4UIdirectory("/testem/phys/"); fPhysDir->SetGuidance("physics list commands"); diff --git a/examples/extended/electromagnetic/TestEm3/src/PrimaryGeneratorAction.cc b/examples/extended/electromagnetic/TestEm3/src/PrimaryGeneratorAction.cc index 686988f00ce..673d8766011 100644 --- a/examples/extended/electromagnetic/TestEm3/src/PrimaryGeneratorAction.cc +++ b/examples/extended/electromagnetic/TestEm3/src/PrimaryGeneratorAction.cc @@ -46,11 +46,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PrimaryGeneratorAction::PrimaryGeneratorAction(DetectorConstruction* det) -:G4VUserPrimaryGeneratorAction(), - fParticleGun(0), - fDetector(det), - fRndmBeam(0.), - fGunMessenger(0) +:fDetector(det) { G4int n_particle = 1; fParticleGun = new G4ParticleGun(n_particle); diff --git a/examples/extended/electromagnetic/TestEm3/src/PrimaryGeneratorMessenger.cc b/examples/extended/electromagnetic/TestEm3/src/PrimaryGeneratorMessenger.cc index dbb0981cdbe..3c0b790e534 100644 --- a/examples/extended/electromagnetic/TestEm3/src/PrimaryGeneratorMessenger.cc +++ b/examples/extended/electromagnetic/TestEm3/src/PrimaryGeneratorMessenger.cc @@ -41,10 +41,7 @@ PrimaryGeneratorMessenger::PrimaryGeneratorMessenger( PrimaryGeneratorAction* Gun) -:G4UImessenger(),fAction(Gun), - fGunDir(0), - fDefaultCmd(0), - fRndmCmd(0) +:fAction(Gun) { fGunDir = new G4UIdirectory("/testem/gun/"); fGunDir->SetGuidance("gun control"); diff --git a/examples/extended/electromagnetic/TestEm3/src/Run.cc b/examples/extended/electromagnetic/TestEm3/src/Run.cc index 839e0f7578e..e92d7df033a 100644 --- a/examples/extended/electromagnetic/TestEm3/src/Run.cc +++ b/examples/extended/electromagnetic/TestEm3/src/Run.cc @@ -51,12 +51,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... Run::Run(DetectorConstruction* det) -: G4Run(), - fDetector(det), - fParticle(nullptr), fEkin(0.), - fChargedStep(0), fNeutralStep(0), - fN_gamma(0), fN_elec(0), fN_pos(0), - fApplyLimit(false) +: fDetector(det) { //initialize cumulative quantities // @@ -67,6 +62,10 @@ Run::Run(DetectorConstruction* det) fLimittrue[k] = DBL_MAX; } + fEdepTot = fEdepTot2 = 0.; + fEleakTot = fEleakTot2 = 0.; + fEtotal = fEtotal2 = 0.; + //initialize Eflow // G4int nbPlanes = (fDetector->GetNbOfLayers())*(fDetector->GetNbOfAbsor()) + 2; @@ -77,11 +76,6 @@ Run::Run(DetectorConstruction* det) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -Run::~Run() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void Run::SetPrimary(G4ParticleDefinition* particle, G4double energy) { fParticle = particle; @@ -101,6 +95,17 @@ void Run::FillPerEvent(G4int kAbs, G4double EAbs, G4double LAbs) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void Run::SumEnergies(G4double edeptot, G4double eleak) +{ + fEdepTot += edeptot; fEdepTot2 += edeptot*edeptot; + fEleakTot += eleak; fEleakTot2 += eleak*eleak; + + G4double etotal = edeptot + eleak; + fEtotal += etotal; fEtotal2 += etotal*etotal; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + void Run::SumEnergyFlow(G4int plane, G4double Eflow) { fEnergyFlow[plane] += Eflow; @@ -155,7 +160,16 @@ void Run::Merge(const G4Run* run) fSumLAbs[k] += localRun->fSumLAbs[k]; fSum2LAbs[k] += localRun->fSum2LAbs[k]; } - + + fEdepTot += localRun->fEdepTot; + fEdepTot2 += localRun->fEdepTot2; + + fEleakTot += localRun->fEleakTot; + fEleakTot2 += localRun->fEleakTot2; + + fEtotal += localRun->fEtotal; + fEtotal2 += localRun->fEtotal2; + G4int nbPlanes = (fDetector->GetNbOfLayers())*(fDetector->GetNbOfAbsor()) + 2; for (G4int k=0; kfEnergyFlow[k]; @@ -186,7 +200,7 @@ void Run::Merge(const G4Run* run) void Run::EndOfRun() { G4int nEvt = numberOfEvent; - G4double norm = G4double(nEvt); + G4double norm = G4double(nEvt); if(norm > 0) norm = 1./norm; G4double qnorm = std::sqrt(norm); @@ -237,8 +251,8 @@ void Run::EndOfRun() rmsEAbs = std::sqrt(std::abs(MeanEAbs2 - MeanEAbs*MeanEAbs)); } - resolution= 100.*sqbeam*rmsEAbs/MeanEAbs; - rmsres = resolution*qnorm; + resolution = (MeanEAbs > 0.) ? 100.*sqbeam*rmsEAbs/MeanEAbs : 0.0; + rmsres = resolution*qnorm; // Save mean and RMS fSumEAbs[k] = MeanEAbs; @@ -263,7 +277,37 @@ void Run::EndOfRun() << std::setw(4) << G4BestUnit( rmsLAbs,"Length") << G4endl; } - G4cout << "\n------------------------------------------------------------\n"; + + //total energy deposited + // + fEdepTot *= norm; + fEdepTot2 *= norm; + G4double rmsEdep = std::sqrt(std::abs(fEdepTot2 - fEdepTot*fEdepTot)); + + G4cout << "\n Total energy deposited = " << std::setprecision(4) + << G4BestUnit(fEdepTot,"Energy") + << " +- " << G4BestUnit(rmsEdep, "Energy") << G4endl; + + //Energy leakage + // + fEleakTot *= norm; + fEleakTot2 *= norm; + G4double rmsEleak = std::sqrt(std::abs(fEleakTot2 - fEleakTot*fEleakTot)); + + G4cout << " Energy leakage = " << G4BestUnit(fEleakTot, "Energy") + << " +- " << G4BestUnit(rmsEleak, "Energy") << G4endl; + + //total energy + // + fEtotal *= norm; + fEtotal2 *= norm; + G4double rmsEtotal = std::sqrt(std::abs(fEtotal2 - fEtotal*fEtotal)); + + G4cout << " Total energy : Edep + Eleak = " + << G4BestUnit(fEtotal,"Energy") + << " +- " << G4BestUnit(rmsEtotal, "Energy") << G4endl; + + G4cout << "------------------------------------------------------------\n"; G4cout << " Beam particle " << fParticle->GetParticleName() @@ -332,7 +376,7 @@ void Run::EndOfRun() //normalize histograms // - for (G4int ih = kMaxAbsor+1; ih < kMaxHisto; ih++) { + for (G4int ih = kMaxAbsor+1; ih < kMaxHisto-2; ih++) { analysis->ScaleH1(ih,norm/MeV); } diff --git a/examples/extended/electromagnetic/TestEm3/src/RunAction.cc b/examples/extended/electromagnetic/TestEm3/src/RunAction.cc index 3936717e98e..14913db437d 100644 --- a/examples/extended/electromagnetic/TestEm3/src/RunAction.cc +++ b/examples/extended/electromagnetic/TestEm3/src/RunAction.cc @@ -44,8 +44,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... RunAction::RunAction(DetectorConstruction* det, PrimaryGeneratorAction* prim) - :G4UserRunAction(), fDetector(det), fPrimary(prim), fRun(nullptr), - fTimer(nullptr) + : fDetector(det), fPrimary(prim) { fRunMessenger = new RunActionMessenger(this); fHistoManager = new HistoManager(); diff --git a/examples/extended/electromagnetic/TestEm3/src/RunActionMessenger.cc b/examples/extended/electromagnetic/TestEm3/src/RunActionMessenger.cc index ffe8a37b71b..c31595b7d8b 100644 --- a/examples/extended/electromagnetic/TestEm3/src/RunActionMessenger.cc +++ b/examples/extended/electromagnetic/TestEm3/src/RunActionMessenger.cc @@ -43,10 +43,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... RunActionMessenger::RunActionMessenger(RunAction* run) -:G4UImessenger(),fRunAction(run), - fRunDir(0), - fAccCmd(0), - fLimCmd(0) +:fRunAction(run) { fRunDir = new G4UIdirectory("/testem/run/"); fRunDir->SetGuidance("run commands"); diff --git a/examples/extended/electromagnetic/TestEm3/src/StepMax.cc b/examples/extended/electromagnetic/TestEm3/src/StepMax.cc index 18252566ee0..13dffe830c8 100644 --- a/examples/extended/electromagnetic/TestEm3/src/StepMax.cc +++ b/examples/extended/electromagnetic/TestEm3/src/StepMax.cc @@ -36,7 +36,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... StepMax::StepMax(const G4String& processName) - : G4VDiscreteProcess(processName),fMaxChargedStep(DBL_MAX),fMess(nullptr) +: G4VDiscreteProcess(processName) { fMess = new StepMaxMessenger(this); } diff --git a/examples/extended/electromagnetic/TestEm3/src/StepMaxMessenger.cc b/examples/extended/electromagnetic/TestEm3/src/StepMaxMessenger.cc index 10b2153fbfd..254894b9dd4 100644 --- a/examples/extended/electromagnetic/TestEm3/src/StepMaxMessenger.cc +++ b/examples/extended/electromagnetic/TestEm3/src/StepMaxMessenger.cc @@ -38,7 +38,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... StepMaxMessenger::StepMaxMessenger(StepMax* stepM) -:G4UImessenger(),fStepMax(stepM),fStepMaxCmd(nullptr) +:fStepMax(stepM) { fStepMaxCmd = new G4UIcmdWithADoubleAndUnit("/testem/stepMax",this); fStepMaxCmd->SetGuidance("Set max allowed step length"); diff --git a/examples/extended/electromagnetic/TestEm3/src/SteppingAction.cc b/examples/extended/electromagnetic/TestEm3/src/SteppingAction.cc index 35723216665..31ba34e2ea7 100644 --- a/examples/extended/electromagnetic/TestEm3/src/SteppingAction.cc +++ b/examples/extended/electromagnetic/TestEm3/src/SteppingAction.cc @@ -44,12 +44,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... SteppingAction::SteppingAction(DetectorConstruction* det, EventAction* evt) -:G4UserSteppingAction(),fDetector(det),fEventAct(evt) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -SteppingAction::~SteppingAction() +:fDetector(det),fEventAct(evt) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm3/src/TrackingAction.cc b/examples/extended/electromagnetic/TestEm3/src/TrackingAction.cc index a285acba3c2..ceb43569b08 100644 --- a/examples/extended/electromagnetic/TestEm3/src/TrackingAction.cc +++ b/examples/extended/electromagnetic/TestEm3/src/TrackingAction.cc @@ -35,6 +35,7 @@ #include "DetectorConstruction.hh" #include "Run.hh" +#include "EventAction.hh" #include "G4RunManager.hh" #include "G4Positron.hh" @@ -42,8 +43,8 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -TrackingAction::TrackingAction(DetectorConstruction* det) -:G4UserTrackingAction(),fDetector(det) +TrackingAction::TrackingAction(DetectorConstruction* det,EventAction* evt) +:fDetector(det),fEventAct(evt) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -80,8 +81,15 @@ void TrackingAction::PreUserTrackingAction(const G4Track* track ) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void TrackingAction::PostUserTrackingAction(const G4Track* ) -{ } +void TrackingAction::PostUserTrackingAction(const G4Track* track ) +{ + // energy leakage + G4StepStatus status = track->GetStep()->GetPostStepPoint()->GetStepStatus(); + if (status == fWorldBoundary) { + G4double eleak = track->GetKineticEnergy(); + fEventAct->SumEnergyLeak(eleak); + } +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm4/History b/examples/extended/electromagnetic/TestEm4/History index 82d9a4b3e91..5b7d79cf78d 100644 --- a/examples/extended/electromagnetic/TestEm4/History +++ b/examples/extended/electromagnetic/TestEm4/History @@ -4,6 +4,9 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-04-06 Michel Maire (testem4-V11-01-00) +- revision of all headers +- RunAction: print run conditions and histograms statistic ## 2021-12-10 Ben Morgan (testem4-V11-00-00) - Change to new Markdown History format diff --git a/examples/extended/electromagnetic/TestEm4/TestEm4.out b/examples/extended/electromagnetic/TestEm4/TestEm4.out index 35cc86d9e5b..23216fd96a5 100644 --- a/examples/extended/electromagnetic/TestEm4/TestEm4.out +++ b/examples/extended/electromagnetic/TestEm4/TestEm4.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -209,7 +209,12 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 100000 - User=0.660000s Real=0.669338s Sys=0.000000s + User=0.610000s Real=0.613729s Sys=0.010000s + +--------------------End of Global Run------------------------ + The run consists of 100000 gamma of 9 MeV in a volume of C6F6 + Energy deposit per event: mean = 930.463 keV rms = 2.35286 MeV +------------------------------------------------------------ --------- Ranecu engine status --------- Initial seed (index) = 0 diff --git a/examples/extended/electromagnetic/TestEm4/include/ActionInitialization.hh b/examples/extended/electromagnetic/TestEm4/include/ActionInitialization.hh index 424feea6313..b378777cb23 100644 --- a/examples/extended/electromagnetic/TestEm4/include/ActionInitialization.hh +++ b/examples/extended/electromagnetic/TestEm4/include/ActionInitialization.hh @@ -33,16 +33,15 @@ #include "G4VUserActionInitialization.hh" /// Action initialization class. -/// class ActionInitialization : public G4VUserActionInitialization { public: - ActionInitialization(); - virtual ~ActionInitialization(); + ActionInitialization() = default; + ~ActionInitialization() override = default; - virtual void BuildForMaster() const; - virtual void Build() const; + void BuildForMaster() const override; + void Build() const override; }; #endif diff --git a/examples/extended/electromagnetic/TestEm4/include/DetectorConstruction.hh b/examples/extended/electromagnetic/TestEm4/include/DetectorConstruction.hh index 0d03a4df94c..7f1b923a0da 100644 --- a/examples/extended/electromagnetic/TestEm4/include/DetectorConstruction.hh +++ b/examples/extended/electromagnetic/TestEm4/include/DetectorConstruction.hh @@ -25,8 +25,6 @@ // /// \file electromagnetic/TestEm4/include/DetectorConstruction.hh /// \brief Definition of the DetectorConstruction class -// -// // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -44,10 +42,10 @@ class DetectorConstruction : public G4VUserDetectorConstruction { public: - DetectorConstruction(); - ~DetectorConstruction(); + DetectorConstruction() = default; + ~DetectorConstruction() override = default; - virtual G4VPhysicalVolume* Construct(); + G4VPhysicalVolume* Construct() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm4/include/EventAction.hh b/examples/extended/electromagnetic/TestEm4/include/EventAction.hh index babd7354527..3828cca5931 100644 --- a/examples/extended/electromagnetic/TestEm4/include/EventAction.hh +++ b/examples/extended/electromagnetic/TestEm4/include/EventAction.hh @@ -26,10 +26,7 @@ /// \file electromagnetic/TestEm4/include/EventAction.hh /// \brief Definition of the EventAction class // -// -// // - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -44,18 +41,18 @@ class EventAction : public G4UserEventAction { public: - EventAction(); - ~EventAction(); + EventAction() = default; + ~EventAction() override = default; public: - virtual void BeginOfEventAction(const G4Event*); - virtual void EndOfEventAction(const G4Event*); + void BeginOfEventAction(const G4Event*) override; + void EndOfEventAction(const G4Event*) override; - void AddEdep(G4double Edep) {fTotalEnergyDeposit += Edep;}; - G4double GetEnergyDeposit() {return fTotalEnergyDeposit;}; + void AddEdep(G4double Edep); + G4double GetEnergyDeposit() {return fTotalEnergyDeposit;}; private: - G4double fTotalEnergyDeposit; // Energy deposited in c6f6 + G4double fTotalEnergyDeposit = 0.; // Energy deposited in c6f6 }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm4/include/PhysicsList.hh b/examples/extended/electromagnetic/TestEm4/include/PhysicsList.hh index 3caa3cf3a72..a4131cd9ad5 100644 --- a/examples/extended/electromagnetic/TestEm4/include/PhysicsList.hh +++ b/examples/extended/electromagnetic/TestEm4/include/PhysicsList.hh @@ -25,9 +25,6 @@ // /// \file electromagnetic/TestEm4/include/PhysicsList.hh /// \brief Definition of the PhysicsList class -// -// -// // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -45,14 +42,14 @@ class PhysicsList: public G4VUserPhysicsList { public: PhysicsList(); - ~PhysicsList(); + ~PhysicsList() override = default; protected: // Construct particle and physics - virtual void ConstructParticle(); - virtual void ConstructProcess(); + void ConstructParticle() override; + void ConstructProcess() override; - virtual void SetCuts(); + void SetCuts() override; protected: // these methods Construct particles diff --git a/examples/extended/electromagnetic/TestEm4/include/PrimaryGeneratorAction.hh b/examples/extended/electromagnetic/TestEm4/include/PrimaryGeneratorAction.hh index fedb8236469..53645b83473 100644 --- a/examples/extended/electromagnetic/TestEm4/include/PrimaryGeneratorAction.hh +++ b/examples/extended/electromagnetic/TestEm4/include/PrimaryGeneratorAction.hh @@ -27,9 +27,6 @@ /// \brief Definition of the PrimaryGeneratorAction class // // -// -// - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -48,13 +45,14 @@ class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: PrimaryGeneratorAction(); - ~PrimaryGeneratorAction(); + ~PrimaryGeneratorAction() override; public: - virtual void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; + G4ParticleGun* GetParticleGun() { return fParticleGun; } private: - G4ParticleGun* fParticleGun; //pointer a to G4 service class + G4ParticleGun* fParticleGun = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm4/include/RunAction.hh b/examples/extended/electromagnetic/TestEm4/include/RunAction.hh index b79b5e94a6e..edbdf130eba 100644 --- a/examples/extended/electromagnetic/TestEm4/include/RunAction.hh +++ b/examples/extended/electromagnetic/TestEm4/include/RunAction.hh @@ -33,7 +33,6 @@ #ifndef RunAction_h #define RunAction_h 1 -#include "G4AnalysisManager.hh" #include "G4UserRunAction.hh" #include "globals.hh" @@ -47,11 +46,11 @@ class RunAction : public G4UserRunAction { public: RunAction(); - ~RunAction(); + ~RunAction() override = default; public: - virtual void BeginOfRunAction(const G4Run*); - virtual void EndOfRunAction(const G4Run*); + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm4/include/SteppingAction.hh b/examples/extended/electromagnetic/TestEm4/include/SteppingAction.hh index bf844821ba5..4adeed315d7 100644 --- a/examples/extended/electromagnetic/TestEm4/include/SteppingAction.hh +++ b/examples/extended/electromagnetic/TestEm4/include/SteppingAction.hh @@ -27,9 +27,6 @@ /// \brief Definition of the SteppingAction class // // -// -// - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... @@ -46,12 +43,12 @@ class SteppingAction : public G4UserSteppingAction { public: SteppingAction(EventAction*); - ~SteppingAction(); + ~SteppingAction() override = default; - virtual void UserSteppingAction(const G4Step*); + void UserSteppingAction(const G4Step*) override; private: - EventAction* fEventAction; + EventAction* fEventAction = nullptr; }; #endif diff --git a/examples/extended/electromagnetic/TestEm4/src/ActionInitialization.cc b/examples/extended/electromagnetic/TestEm4/src/ActionInitialization.cc index 1191cd03b38..7a9617f3e1a 100644 --- a/examples/extended/electromagnetic/TestEm4/src/ActionInitialization.cc +++ b/examples/extended/electromagnetic/TestEm4/src/ActionInitialization.cc @@ -35,17 +35,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ActionInitialization::ActionInitialization() - : G4VUserActionInitialization() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -ActionInitialization::~ActionInitialization() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void ActionInitialization::BuildForMaster() const { SetUserAction(new RunAction); diff --git a/examples/extended/electromagnetic/TestEm4/src/DetectorConstruction.cc b/examples/extended/electromagnetic/TestEm4/src/DetectorConstruction.cc index c52ab0292a2..121532dc844 100644 --- a/examples/extended/electromagnetic/TestEm4/src/DetectorConstruction.cc +++ b/examples/extended/electromagnetic/TestEm4/src/DetectorConstruction.cc @@ -42,17 +42,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -DetectorConstruction::DetectorConstruction() -:G4VUserDetectorConstruction() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -DetectorConstruction::~DetectorConstruction() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - G4VPhysicalVolume* DetectorConstruction::Construct() { // diff --git a/examples/extended/electromagnetic/TestEm4/src/EventAction.cc b/examples/extended/electromagnetic/TestEm4/src/EventAction.cc index 819e63f0441..fd4f3a294f1 100644 --- a/examples/extended/electromagnetic/TestEm4/src/EventAction.cc +++ b/examples/extended/electromagnetic/TestEm4/src/EventAction.cc @@ -39,18 +39,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -EventAction::EventAction() -:G4UserEventAction(), - fTotalEnergyDeposit(0.) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -EventAction::~EventAction() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void EventAction::BeginOfEventAction( const G4Event*) { //initializations @@ -59,6 +47,13 @@ void EventAction::BeginOfEventAction( const G4Event*) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void EventAction::AddEdep(G4double Edep) +{ + fTotalEnergyDeposit += Edep; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + void EventAction::EndOfEventAction( const G4Event*) { G4AnalysisManager* analysisManager = G4AnalysisManager::Instance(); diff --git a/examples/extended/electromagnetic/TestEm4/src/PhysicsList.cc b/examples/extended/electromagnetic/TestEm4/src/PhysicsList.cc index 860e5bf2828..5134b6ce7b3 100644 --- a/examples/extended/electromagnetic/TestEm4/src/PhysicsList.cc +++ b/examples/extended/electromagnetic/TestEm4/src/PhysicsList.cc @@ -44,19 +44,12 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysicsList::PhysicsList() -: G4VUserPhysicsList() { defaultCutValue = 1.0*mm; - SetVerboseLevel(1); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::~PhysicsList() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysicsList::ConstructParticle() { // In this method, static member functions should be called diff --git a/examples/extended/electromagnetic/TestEm4/src/PrimaryGeneratorAction.cc b/examples/extended/electromagnetic/TestEm4/src/PrimaryGeneratorAction.cc index 05564896a14..79274a8de7d 100644 --- a/examples/extended/electromagnetic/TestEm4/src/PrimaryGeneratorAction.cc +++ b/examples/extended/electromagnetic/TestEm4/src/PrimaryGeneratorAction.cc @@ -27,9 +27,6 @@ /// \brief Implementation of the PrimaryGeneratorAction class // // -// -// - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -46,7 +43,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PrimaryGeneratorAction::PrimaryGeneratorAction() -: G4VUserPrimaryGeneratorAction(),fParticleGun(0) { G4int n_particle = 1; fParticleGun = new G4ParticleGun(n_particle); @@ -59,7 +55,6 @@ PrimaryGeneratorAction::PrimaryGeneratorAction() fParticleGun->SetParticleMomentumDirection(G4ThreeVector(1.,0.,0.)); fParticleGun->SetParticleEnergy(9*MeV); fParticleGun->SetParticlePosition(G4ThreeVector(0.*cm,0.*cm,0.*cm)); - } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm4/src/RunAction.cc b/examples/extended/electromagnetic/TestEm4/src/RunAction.cc index 227a45ff9c8..ffd043c58d0 100644 --- a/examples/extended/electromagnetic/TestEm4/src/RunAction.cc +++ b/examples/extended/electromagnetic/TestEm4/src/RunAction.cc @@ -31,17 +31,20 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "RunAction.hh" +#include "PrimaryGeneratorAction.hh" +#include "G4AnalysisManager.hh" #include "G4Run.hh" #include "G4RunManager.hh" +#include "G4ParticleGun.hh" +#include "G4UnitsTable.hh" #include "G4SystemOfUnits.hh" #include "Randomize.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... RunAction::RunAction() - : G4UserRunAction() { G4AnalysisManager* analysisManager = G4AnalysisManager::Instance(); analysisManager->SetDefaultFileType("root"); @@ -55,12 +58,6 @@ RunAction::RunAction() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -RunAction::~RunAction() -{ -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void RunAction::BeginOfRunAction(const G4Run*) { // show Rndm status @@ -78,13 +75,51 @@ void RunAction::BeginOfRunAction(const G4Run*) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void RunAction::EndOfRunAction(const G4Run*) -{ +void RunAction::EndOfRunAction(const G4Run* run) +{ + G4int nofEvents = run->GetNumberOfEvent(); + if (nofEvents == 0) return; + + G4AnalysisManager* analysisManager = G4AnalysisManager::Instance(); + + if (isMaster) { + // Run conditions + // note: There is no primary generator action object for "master" + // run manager for multi-threaded mode. + PrimaryGeneratorAction* generatorAction = (PrimaryGeneratorAction*) + (G4RunManager::GetRunManager()->GetUserPrimaryGeneratorAction()); + G4String runCondition = " "; + if (generatorAction) + { + G4ParticleGun* particleGun = generatorAction->GetParticleGun(); + runCondition = particleGun->GetParticleDefinition()->GetParticleName(); + runCondition += " of "; + G4double particleEnergy = particleGun->GetParticleEnergy(); + runCondition += G4BestUnit(particleEnergy,"Energy"); + runCondition += " in a volume of C6F6 "; + } + + G4cout + << G4endl + << "--------------------End of Global Run------------------------"; + G4cout + << G4endl + << " The run consists of " << nofEvents << " " << runCondition << G4endl; + if ( analysisManager->GetH1(1) ) { + G4cout << " Energy deposit per event: mean = " + << G4BestUnit(analysisManager->GetH1(1)->mean(), "Energy") + << " rms = " + << G4BestUnit(analysisManager->GetH1(1)->rms(), "Energy") + << G4endl + << "------------------------------------------------------------" + << G4endl; + } + } + // show Rndm status - if (isMaster) G4Random::showEngineStatus(); + if (isMaster) G4Random::showEngineStatus(); //save histograms - G4AnalysisManager* analysisManager = G4AnalysisManager::Instance(); analysisManager->Write(); analysisManager->CloseFile(); } diff --git a/examples/extended/electromagnetic/TestEm4/src/SteppingAction.cc b/examples/extended/electromagnetic/TestEm4/src/SteppingAction.cc index 5be59d3d3b5..3d55a1cc80f 100644 --- a/examples/extended/electromagnetic/TestEm4/src/SteppingAction.cc +++ b/examples/extended/electromagnetic/TestEm4/src/SteppingAction.cc @@ -41,12 +41,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... SteppingAction::SteppingAction(EventAction* EvAct) -:G4UserSteppingAction(),fEventAction(EvAct) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -SteppingAction::~SteppingAction() +:fEventAction(EvAct) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/History b/examples/extended/electromagnetic/TestEm5/History index 63d93b22345..db2f51249b6 100644 --- a/examples/extended/electromagnetic/TestEm5/History +++ b/examples/extended/electromagnetic/TestEm5/History @@ -4,6 +4,8 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-04-28 Michel Maire (testem5-V11-01-00) +- revision of all headers ## 2022-07-06 Vladimir Ivanchenko (testem5-V11-00-02) - Added summary on gamma processes diff --git a/examples/extended/electromagnetic/TestEm5/TestEm5-geom.out b/examples/extended/electromagnetic/TestEm5/TestEm5-geom.out index 5ee3be44c71..afa6a20bbdc 100644 --- a/examples/extended/electromagnetic/TestEm5/TestEm5-geom.out +++ b/examples/extended/electromagnetic/TestEm5/TestEm5-geom.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -105,7 +105,7 @@ Step# X Y Z KineE dEStep StepLeng T Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000536s Sys=0.000000s + User=0.000000s Real=0.000366s Sys=0.000000s ======================== run summary ====================== @@ -140,7 +140,8 @@ Run Summary rms proj angle of transmit primary particle = 0 mrad (central part only) computed theta0 (Highland formula) = 0 mrad central part defined as +- 0 mrad Tail ratio = 0 % -## Gamma process counts: + + Gamma process counts: Photoeffect 0 Compton 0 Conversion 0 @@ -184,7 +185,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 6 - User=0.000000s Real=0.000076s Sys=0.000000s + User=0.000000s Real=0.000093s Sys=0.000000s ======================== run summary ====================== @@ -219,7 +220,8 @@ Run Summary rms proj angle of transmit primary particle = 0 mrad (central part only) computed theta0 (Highland formula) = 0 mrad central part defined as +- 0 mrad Tail ratio = 0 % -## Gamma process counts: + + Gamma process counts: Photoeffect 0 Compton 0 Conversion 0 diff --git a/examples/extended/electromagnetic/TestEm5/TestEm5-pixe_ANSTO.out b/examples/extended/electromagnetic/TestEm5/TestEm5-pixe_ANSTO.out index f0824f3deb5..8f871728076 100644 --- a/examples/extended/electromagnetic/TestEm5/TestEm5-pixe_ANSTO.out +++ b/examples/extended/electromagnetic/TestEm5/TestEm5-pixe_ANSTO.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -236,7 +236,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 100000 - User=75.830000s Real=76.493017s Sys=0.000000s + User=70.830000s Real=82.246290s Sys=0.010000s ======================== run summary ====================== @@ -271,7 +271,8 @@ Run Summary rms proj angle of transmit primary particle = 0 mrad (central part only) computed theta0 (Highland formula) = 233.3 mrad central part defined as +- 699.8 mrad Tail ratio = 0 % -## Gamma process counts: + + Gamma process counts: Photoeffect 58109 Compton 3 Conversion 0 diff --git a/examples/extended/electromagnetic/TestEm5/TestEm5.out b/examples/extended/electromagnetic/TestEm5/TestEm5.out index 31b58328f6c..4d49669cf39 100644 --- a/examples/extended/electromagnetic/TestEm5/TestEm5.out +++ b/examples/extended/electromagnetic/TestEm5/TestEm5.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -515,30 +515,30 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 100000 - User=0.920000s Real=0.928860s Sys=0.000000s + User=0.840000s Real=0.843798s Sys=0.000000s ======================== run summary ====================== The run was 100000 pi+ of 5 GeV through 20 um of Silicon (density: 2.33 g/cm3 ) - Total energy deposit in absorber per event = 6.358 keV +- 16.34 eV + Total energy deposit in absorber per event = 6.359 keV +- 16.34 eV - -----> Mean dE/dx = 3.179 MeV/cm (1.364 MeV*cm2/g) + -----> Mean dE/dx = 3.179 MeV/cm (1.365 MeV*cm2/g) From formulas : restricted dEdx = 2.96 MeV/cm (1.27 MeV*cm2/g) - full dEdx = 4.726 MeV/cm (2.028 MeV*cm2/g) + full dEdx = 4.727 MeV/cm (2.029 MeV*cm2/g) - Leakage : primary = 5 GeV +- 252.7 eV secondaries = 1.76 keV +- 250.9 eV + Leakage : primary = 5 GeV +- 252.7 eV secondaries = 1.761 keV +- 250.9 eV Energy balance : edep + eleak = 5 GeV - Total track length (charged) in absorber per event = 20.26 um +- 7.827 nm + Total track length (charged) in absorber per event = 20.26 um +- 7.83 nm Total track length (neutral) in absorber per event = 2.713 Ang +- 1.915 Ang - Number of steps (charged) in absorber per event = 1.115 +- 0.003493 + Number of steps (charged) in absorber per event = 1.116 +- 0.003494 Number of steps (neutral) in absorber per event = 4e-05 +- 2.449e-05 - Number of secondaries per event : Gammas = 4e-05 electrons = 0.01744 positrons = 0 + Number of secondaries per event : Gammas = 4e-05 electrons = 0.01747 positrons = 0 Number of events with the primary particle transmitted = 100 % Number of events with at least 1 particle transmitted (same charge as primary) = 100 % @@ -549,8 +549,9 @@ Run Summary MultipleScattering: rms proj angle of transmit primary particle = 0.02505 mrad (central part only) computed theta0 (Highland formula) = 0.02627 mrad - central part defined as +- 0.07881 mrad Tail ratio = 1.956 % -## Gamma process counts: + central part defined as +- 0.07881 mrad Tail ratio = 1.955 % + + Gamma process counts: Photoeffect 3 Compton 0 Conversion 0 @@ -559,7 +560,7 @@ Run Summary ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={387689516187099455, 1947743697759783307, 984698709684866192, 1557125090261443253, 1405971494381235133, 1859809124663893344, 323808230424620918, 1155813367203726096, 1585121702309265979, 736197285369872686, 1017405277539546920, 1970751509882679426, 952356149280055994, 2058573618419247016, 1384973780729597446, 681322386937888161, 1407651762910572314} counter= 7sumtot= 664425621022148081 +N=17 V[N]={2251962729139529066, 2255809157296117052, 1561220629868467436, 1195476958895027731, 916026491557160216, 2286142396129843992, 727122086692933445, 2154070967832773614, 1158745510824107070, 230037157449298802, 1709165827036616987, 491867981487343160, 869768187519962736, 2238370973868372141, 662565836578216787, 1254038465375233350, 1004978088231242105} counter= 5sumtot= 2214782362859000131 --------------------------------------- # /testem/det/setAbsMat Gold @@ -604,7 +605,7 @@ Index : 2 used in the geometry : Yes ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={387689516187099455, 1947743697759783307, 984698709684866192, 1557125090261443253, 1405971494381235133, 1859809124663893344, 323808230424620918, 1155813367203726096, 1585121702309265979, 736197285369872686, 1017405277539546920, 1970751509882679426, 952356149280055994, 2058573618419247016, 1384973780729597446, 681322386937888161, 1407651762910572314} counter= 7sumtot= 664425621022148081 +N=17 V[N]={2251962729139529066, 2255809157296117052, 1561220629868467436, 1195476958895027731, 916026491557160216, 2286142396129843992, 727122086692933445, 2154070967832773614, 1158745510824107070, 230037157449298802, 1709165827036616987, 491867981487343160, 869768187519962736, 2238370973868372141, 662565836578216787, 1254038465375233350, 1004978088231242105} counter= 5sumtot= 2214782362859000131 --------------------------------------- --> Event 0 starts. --> Event 10000 starts. @@ -614,30 +615,30 @@ N=17 V[N]={387689516187099455, 1947743697759783307, 984698709684866192, 15571250 Run terminated. Run Summary Number of events processed : 50000 - User=0.480000s Real=0.487443s Sys=0.000000s + User=0.430000s Real=0.436952s Sys=0.000000s ======================== run summary ====================== The run was 50000 e- of 15.7 MeV through 9.66 um of Gold (density: 19.3 g/cm3 ) - Total energy deposit in absorber per event = 18.41 keV +- 65.31 eV + Total energy deposit in absorber per event = 18.42 keV +- 65.33 eV - -----> Mean dE/dx = 19.07 MeV/cm (0.9869 MeV*cm2/g) + -----> Mean dE/dx = 19.07 MeV/cm (0.987 MeV*cm2/g) From formulas : restricted dEdx = 17.91 MeV/cm (0.927 MeV*cm2/g) full dEdx = 61.41 MeV/cm (3.179 MeV*cm2/g) - Leakage : primary = 15.64 MeV +- 2.385 keV secondaries = 46.45 keV +- 2.377 keV + Leakage : primary = 15.63 MeV +- 2.391 keV secondaries = 46.65 keV +- 2.382 keV Energy balance : edep + eleak = 15.7 MeV - Total track length (charged) in absorber per event = 9.92 um +- 12.63 nm - Total track length (neutral) in absorber per event = 125.1 nm +- 4.368 nm + Total track length (charged) in absorber per event = 9.921 um +- 12.63 nm + Total track length (neutral) in absorber per event = 125.3 nm +- 4.371 nm - Number of steps (charged) in absorber per event = 1.198 +- 0.006958 - Number of steps (neutral) in absorber per event = 0.02818 +- 0.000778 + Number of steps (charged) in absorber per event = 1.198 +- 0.006963 + Number of steps (neutral) in absorber per event = 0.02824 +- 0.0007787 - Number of secondaries per event : Gammas = 0.0281 electrons = 0.02222 positrons = 0 + Number of secondaries per event : Gammas = 0.02816 electrons = 0.02226 positrons = 0 Number of events with the primary particle transmitted = 99.99 % Number of events with at least 1 particle transmitted (same charge as primary) = 99.99 % @@ -648,8 +649,9 @@ Run Summary MultipleScattering: rms proj angle of transmit primary particle = 34.89 mrad (central part only) computed theta0 (Highland formula) = 35.1 mrad - central part defined as +- 105.3 mrad Tail ratio = 2.933 % -## Gamma process counts: + central part defined as +- 105.3 mrad Tail ratio = 2.936 % + + Gamma process counts: Photoeffect 222 Compton 1 Conversion 0 @@ -658,7 +660,7 @@ Run Summary ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={1239212255599460965, 1328488509436437337, 1766244005004820777, 289170208098684937, 771140316716661411, 849263891296505433, 1791436233008270765, 682837236660786757, 519159570131443593, 420727770183332605, 338116080993397566, 1570479464120553909, 2261538915773229492, 1643374505935178138, 1841001653776451323, 1523663052794115716, 1070398953769415373} counter= 13sumtot= 1459508549589194489 +N=17 V[N]={2127184459213952784, 1452207038256057524, 383772375008462944, 1938816548079568081, 170850634097202515, 1224910038482526674, 1899856711087975892, 268410110325902622, 2187438772980663619, 4795531007254098, 1893863683964505273, 2201995495190607447, 1754997657949181209, 2160086850773997758, 50353585018985954, 1895785352920017325, 1495309803391547054} counter= 12sumtot= 52204555611469263 --------------------------------------- # /run/setCut 10 um @@ -708,7 +710,7 @@ Index : 3 used in the geometry : Yes ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={1239212255599460965, 1328488509436437337, 1766244005004820777, 289170208098684937, 771140316716661411, 849263891296505433, 1791436233008270765, 682837236660786757, 519159570131443593, 420727770183332605, 338116080993397566, 1570479464120553909, 2261538915773229492, 1643374505935178138, 1841001653776451323, 1523663052794115716, 1070398953769415373} counter= 13sumtot= 1459508549589194489 +N=17 V[N]={2127184459213952784, 1452207038256057524, 383772375008462944, 1938816548079568081, 170850634097202515, 1224910038482526674, 1899856711087975892, 268410110325902622, 2187438772980663619, 4795531007254098, 1893863683964505273, 2201995495190607447, 1754997657949181209, 2160086850773997758, 50353585018985954, 1895785352920017325, 1495309803391547054} counter= 12sumtot= 52204555611469263 --------------------------------------- --> Event 0 starts. --> Event 10000 starts. @@ -718,30 +720,30 @@ N=17 V[N]={1239212255599460965, 1328488509436437337, 1766244005004820777, 289170 Run terminated. Run Summary Number of events processed : 50000 - User=1.790000s Real=1.802167s Sys=0.010000s + User=1.630000s Real=1.651983s Sys=0.000000s ======================== run summary ====================== The run was 50000 mu+ of 96.2 MeV through 4.74 mm of G4_POLYETHYLENE (density: 940 mg/cm3) - Total energy deposit in absorber per event = 1.048 MeV +- 1.012 keV + Total energy deposit in absorber per event = 1.054 MeV +- 1.012 keV - -----> Mean dE/dx = 2.212 MeV/cm (2.353 MeV*cm2/g) + -----> Mean dE/dx = 2.223 MeV/cm (2.365 MeV*cm2/g) From formulas : - restricted dEdx = 1.749 MeV/cm (1.861 MeV*cm2/g) - full dEdx = 2.265 MeV/cm (2.409 MeV*cm2/g) + restricted dEdx = 1.761 MeV/cm (1.873 MeV*cm2/g) + full dEdx = 2.28 MeV/cm (2.425 MeV*cm2/g) - Leakage : primary = 95.12 MeV +- 2.343 keV secondaries = 27.08 keV +- 724.6 eV + Leakage : primary = 95.12 MeV +- 2.341 keV secondaries = 27.21 keV +- 727 eV Energy balance : edep + eleak = 96.2 MeV - Total track length (charged) in absorber per event = 5.176 mm +- 3.891 um - Total track length (neutral) in absorber per event = 21.83 um +- 2.267 um + Total track length (charged) in absorber per event = 5.175 mm +- 3.878 um + Total track length (neutral) in absorber per event = 19.29 um +- 2.124 um - Number of steps (charged) in absorber per event = 11.12 +- 0.02803 - Number of steps (neutral) in absorber per event = 0.01012 +- 0.0004762 + Number of steps (charged) in absorber per event = 11.12 +- 0.02804 + Number of steps (neutral) in absorber per event = 0.00926 +- 0.0004502 - Number of secondaries per event : Gammas = 0.00968 electrons = 4.179 positrons = 0 + Number of secondaries per event : Gammas = 0.00892 electrons = 4.175 positrons = 0 Number of events with the primary particle transmitted = 100 % Number of events with at least 1 particle transmitted (same charge as primary) = 100 % @@ -750,19 +752,20 @@ Run Summary Number of events with at least 1 particle reflected (same charge as primary) = 0 % MultipleScattering: - rms proj angle of transmit primary particle = 7.365 mrad (central part only) + rms proj angle of transmit primary particle = 7.347 mrad (central part only) computed theta0 (Highland formula) = 7.636 mrad - central part defined as +- 22.91 mrad Tail ratio = 1.262 % -## Gamma process counts: - Photoeffect 320 - Compton 12 + central part defined as +- 22.91 mrad Tail ratio = 1.34 % + + Gamma process counts: + Photoeffect 308 + Compton 7 Conversion 0 Rayleigh 10 ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={445516801888180624, 1579788386561753521, 2263896843532244990, 2096423020077971814, 924707696375966943, 680876823333778212, 796359742759019976, 1784894783147136787, 993138941825847484, 1718798230150178817, 405196966698966702, 762565805911693308, 1540937812259333697, 1433012635472421271, 1841345035944728023, 686998217669764047, 620929874914935640} counter= 17sumtot= 2128643544814370248 +N=17 V[N]={743852330670488035, 2136169146287051088, 849070234196116409, 1099334105754823070, 2035714858655852637, 1386121618016294856, 1215029058652054760, 1818316177065057046, 136514406558124474, 547747403224532623, 292615271354025672, 105127857429196074, 501292010528540240, 1145142488516375402, 1455866176666346843, 1127018718425719961, 2043458562419498534} counter= 7sumtot= 191646350710546116 --------------------------------------- # /run/setCut 1 mm @@ -818,7 +821,7 @@ Index : 4 used in the geometry : Yes ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={445516801888180624, 1579788386561753521, 2263896843532244990, 2096423020077971814, 924707696375966943, 680876823333778212, 796359742759019976, 1784894783147136787, 993138941825847484, 1718798230150178817, 405196966698966702, 762565805911693308, 1540937812259333697, 1433012635472421271, 1841345035944728023, 686998217669764047, 620929874914935640} counter= 17sumtot= 2128643544814370248 +N=17 V[N]={743852330670488035, 2136169146287051088, 849070234196116409, 1099334105754823070, 2035714858655852637, 1386121618016294856, 1215029058652054760, 1818316177065057046, 136514406558124474, 547747403224532623, 292615271354025672, 105127857429196074, 501292010528540240, 1145142488516375402, 1455866176666346843, 1127018718425719961, 2043458562419498534} counter= 7sumtot= 191646350710546116 --------------------------------------- --> Event 0 starts. --> Event 10000 starts. @@ -828,30 +831,30 @@ N=17 V[N]={445516801888180624, 1579788386561753521, 2263896843532244990, 2096423 Run terminated. Run Summary Number of events processed : 50000 - User=0.480000s Real=0.478344s Sys=0.000000s + User=0.430000s Real=0.429887s Sys=0.000000s ======================== run summary ====================== The run was 50000 proton of 175 GeV through 8 mm of Aluminium (density: 2.7 g/cm3 ) - Total energy deposit in absorber per event = 4.78 MeV +- 121 keV + Total energy deposit in absorber per event = 4.795 MeV +- 122.2 keV - -----> Mean dE/dx = 5.972 MeV/cm (2.212 MeV*cm2/g) + -----> Mean dE/dx = 5.991 MeV/cm (2.219 MeV*cm2/g) From formulas : restricted dEdx = 4.024 MeV/cm (1.49 MeV*cm2/g) full dEdx = 6.048 MeV/cm (2.24 MeV*cm2/g) - Leakage : primary = 174.7 GeV +- 121.1 keV secondaries = 0 eV +- 0 eV + Leakage : primary = 174.7 GeV +- 122.2 keV secondaries = 0 eV +- 0 eV Energy balance : edep + eleak = 174.7 GeV Total track length (charged) in absorber per event = 8.004 mm +- 0 fm Total track length (neutral) in absorber per event = 0 fm +- 0 fm - Number of steps (charged) in absorber per event = 1.266 +- 0.002307 + Number of steps (charged) in absorber per event = 1.267 +- 0.002306 Number of steps (neutral) in absorber per event = 0 +- 0 - Number of secondaries per event : Gammas = 0 electrons = 0.2664 positrons = 0.00086 + Number of secondaries per event : Gammas = 0 electrons = 0.2666 positrons = 0.00086 Number of events with the primary particle transmitted = 100 % Number of events with at least 1 particle transmitted (same charge as primary) = 100 % @@ -860,10 +863,11 @@ Run Summary Number of events with at least 1 particle reflected (same charge as primary) = 0 % MultipleScattering: - rms proj angle of transmit primary particle = 0.02066 mrad (central part only) + rms proj angle of transmit primary particle = 0.02067 mrad (central part only) computed theta0 (Highland formula) = 0.02111 mrad - central part defined as +- 0.06333 mrad Tail ratio = 1.293 % -## Gamma process counts: + central part defined as +- 0.06333 mrad Tail ratio = 1.304 % + + Gamma process counts: Photoeffect 0 Compton 0 Conversion 0 @@ -872,7 +876,7 @@ Run Summary ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={2252079291490278474, 564825970820549864, 1356474669540624333, 1561971409888477125, 212954819950169613, 1503098223136454504, 307450644531012226, 361317507389786050, 970475807288250204, 1085654349447888547, 510403480031176694, 1552479574494195507, 2071644574856921443, 1908418382130254556, 361098093250487375, 1840509829600686597, 437984159534900243} counter= 16sumtot= 412096713672561747 +N=17 V[N]={229283173202294728, 2183691285638226244, 620326498413005005, 885130391089783417, 787727864755907687, 1074060692936664022, 640618028724210808, 1556753036198792096, 778117101884391675, 1312434234085935294, 546990018900134803, 28655440584924331, 2276502795822625937, 1045042082374896511, 1054385297299224609, 449440916096920264, 2205084925893285649} counter= 14sumtot= 1533342719405365423 --------------------------------------- # /testem/det/setAbsMat Iron @@ -929,7 +933,7 @@ Index : 5 used in the geometry : Yes ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={2252079291490278474, 564825970820549864, 1356474669540624333, 1561971409888477125, 212954819950169613, 1503098223136454504, 307450644531012226, 361317507389786050, 970475807288250204, 1085654349447888547, 510403480031176694, 1552479574494195507, 2071644574856921443, 1908418382130254556, 361098093250487375, 1840509829600686597, 437984159534900243} counter= 16sumtot= 412096713672561747 +N=17 V[N]={229283173202294728, 2183691285638226244, 620326498413005005, 885130391089783417, 787727864755907687, 1074060692936664022, 640618028724210808, 1556753036198792096, 778117101884391675, 1312434234085935294, 546990018900134803, 28655440584924331, 2276502795822625937, 1045042082374896511, 1054385297299224609, 449440916096920264, 2205084925893285649} counter= 14sumtot= 1533342719405365423 --------------------------------------- --> Event 0 starts. --> Event 10000 starts. @@ -939,30 +943,30 @@ N=17 V[N]={2252079291490278474, 564825970820549864, 1356474669540624333, 1561971 Run terminated. Run Summary Number of events processed : 50000 - User=7.880000s Real=7.936934s Sys=0.000000s + User=7.490000s Real=7.638230s Sys=0.000000s ======================== run summary ====================== The run was 50000 mu+ of 100 GeV through 1 m of Iron (density: 7.87 g/cm3 ) - Total energy deposit in absorber per event = 2.157 GeV +- 14.45 MeV + Total energy deposit in absorber per event = 2.155 GeV +- 14.22 MeV - -----> Mean dE/dx = 21.57 MeV/cm (2.741 MeV*cm2/g) + -----> Mean dE/dx = 21.55 MeV/cm (2.738 MeV*cm2/g) From formulas : restricted dEdx = 11.21 MeV/cm (1.425 MeV*cm2/g) full dEdx = 21.61 MeV/cm (2.745 MeV*cm2/g) - Leakage : primary = 97.84 GeV +- 14.45 MeV secondaries = 0 eV +- 0 eV + Leakage : primary = 97.84 GeV +- 14.22 MeV secondaries = 0 eV +- 0 eV Energy balance : edep + eleak = 100 GeV - Total track length (charged) in absorber per event = 1 m +- 4.649 nm + Total track length (charged) in absorber per event = 1 m +- 6.333 nm Total track length (neutral) in absorber per event = 0 fm +- 0 fm - Number of steps (charged) in absorber per event = 47.61 +- 0.03054 + Number of steps (charged) in absorber per event = 47.55 +- 0.03041 Number of steps (neutral) in absorber per event = 0 +- 0 - Number of secondaries per event : Gammas = 0.05008 electrons = 46.56 positrons = 1.259 + Number of secondaries per event : Gammas = 0.05136 electrons = 46.49 positrons = 1.264 Number of events with the primary particle transmitted = 100 % Number of events with at least 1 particle transmitted (same charge as primary) = 100 % @@ -971,10 +975,11 @@ Run Summary Number of events with at least 1 particle reflected (same charge as primary) = 0 % MultipleScattering: - rms proj angle of transmit primary particle = 1.183 mrad (central part only) + rms proj angle of transmit primary particle = 1.179 mrad (central part only) computed theta0 (Highland formula) = 1.182 mrad - central part defined as +- 3.546 mrad Tail ratio = 0.578 % -## Gamma process counts: + central part defined as +- 3.546 mrad Tail ratio = 0.561 % + + Gamma process counts: Photoeffect 0 Compton 0 Conversion 0 @@ -983,7 +988,7 @@ Run Summary ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={420659126005140040, 1225235092154866899, 467064051926141271, 872620520104710954, 154210198302006135, 1217037251478269454, 785375312638799848, 507186188750151534, 16332779840598712, 2201933772516139148, 587833775645490031, 858673669071150570, 1743528740806934203, 783655146520683320, 1706382825534161226, 1073060800756282074, 982189721651594646} counter= 12sumtot= 1767920918420956359 +N=17 V[N]={204717756033304856, 724309485040076549, 2042106297155167544, 736575988112398030, 1043545919384348766, 1066100194176683821, 1370180578678059578, 2276035369146421509, 54524033950891282, 1697501097594485980, 1886792253039231551, 837597529950614712, 464061031041513128, 394626740474736535, 2213225000856736945, 2226742419321754442, 2270117469262072624} counter= 17sumtot= 756172080295252293 --------------------------------------- # ================== Deleting memory pools =================== diff --git a/examples/extended/electromagnetic/TestEm5/include/ActionInitialization.hh b/examples/extended/electromagnetic/TestEm5/include/ActionInitialization.hh index b4429794268..8cb4ed377ed 100644 --- a/examples/extended/electromagnetic/TestEm5/include/ActionInitialization.hh +++ b/examples/extended/electromagnetic/TestEm5/include/ActionInitialization.hh @@ -41,13 +41,13 @@ class ActionInitialization : public G4VUserActionInitialization { public: ActionInitialization(DetectorConstruction*); - ~ActionInitialization() override; + ~ActionInitialization() override = default; void BuildForMaster() const override; void Build() const override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; }; #endif diff --git a/examples/extended/electromagnetic/TestEm5/include/DetectorConstruction.hh b/examples/extended/electromagnetic/TestEm5/include/DetectorConstruction.hh index a283e992df7..5f7e68099aa 100644 --- a/examples/extended/electromagnetic/TestEm5/include/DetectorConstruction.hh +++ b/examples/extended/electromagnetic/TestEm5/include/DetectorConstruction.hh @@ -53,7 +53,7 @@ class DetectorConstruction : public G4VUserDetectorConstruction public: explicit DetectorConstruction(); - virtual ~DetectorConstruction(); + ~DetectorConstruction() override; void SetAbsorberMaterial (const G4String&); void SetAbsorberThickness(G4double); @@ -91,27 +91,27 @@ private: void ComputeGeomParameters(); void ChangeGeometry(); - G4Material* fAbsorberMaterial; - G4double fAbsorberThickness; - G4double fAbsorberSizeYZ; + G4Material* fAbsorberMaterial = nullptr; + G4double fAbsorberThickness = 0.; + G4double fAbsorberSizeYZ = 0.; - G4double fXposAbs; - G4double fXstartAbs, fXendAbs; + G4double fXposAbs = 0.; + G4double fXstartAbs = 0., fXendAbs = 0.; - G4Material* fWorldMaterial; - G4double fWorldSizeX; - G4double fWorldSizeYZ; + G4Material* fWorldMaterial = nullptr; + G4double fWorldSizeX = 0.; + G4double fWorldSizeYZ = 0.; - G4Box* fSolidWorld; - G4LogicalVolume* fLogicWorld; - G4VPhysicalVolume* fPhysiWorld; + G4Box* fSolidWorld = nullptr; + G4LogicalVolume* fLogicWorld = nullptr; + G4VPhysicalVolume* fPhysiWorld = nullptr; - G4Box* fSolidAbsorber; - G4LogicalVolume* fLogicAbsorber; - G4VPhysicalVolume* fPhysiAbsorber; + G4Box* fSolidAbsorber = nullptr; + G4LogicalVolume* fLogicAbsorber = nullptr; + G4VPhysicalVolume* fPhysiAbsorber = nullptr; - DetectorMessenger* fDetectorMessenger; - G4Cache fFieldMessenger; + DetectorMessenger* fDetectorMessenger = nullptr; + G4Cache fFieldMessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/include/DetectorMessenger.hh b/examples/extended/electromagnetic/TestEm5/include/DetectorMessenger.hh index 71f4b658f92..94390cee4c2 100644 --- a/examples/extended/electromagnetic/TestEm5/include/DetectorMessenger.hh +++ b/examples/extended/electromagnetic/TestEm5/include/DetectorMessenger.hh @@ -49,25 +49,25 @@ class DetectorMessenger: public G4UImessenger { public: DetectorMessenger(DetectorConstruction*); - ~DetectorMessenger(); + ~DetectorMessenger() override; void SetNewValue(G4UIcommand*, G4String) override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; - G4UIdirectory* fTestemDir; - G4UIdirectory* fDetDir; + G4UIdirectory* fTestemDir = nullptr; + G4UIdirectory* fDetDir = nullptr; - G4UIcmdWithAString* fAbsMaterCmd; - G4UIcmdWithADoubleAndUnit* fAbsThickCmd; - G4UIcmdWithADoubleAndUnit* fAbsSizYZCmd; + G4UIcmdWithAString* fAbsMaterCmd = nullptr; + G4UIcmdWithADoubleAndUnit* fAbsThickCmd = nullptr; + G4UIcmdWithADoubleAndUnit* fAbsSizYZCmd = nullptr; - G4UIcmdWithADoubleAndUnit* fAbsXposCmd; + G4UIcmdWithADoubleAndUnit* fAbsXposCmd = nullptr; - G4UIcmdWithAString* fWorldMaterCmd; - G4UIcmdWithADoubleAndUnit* fWorldXCmd; - G4UIcmdWithADoubleAndUnit* fWorldYZCmd; + G4UIcmdWithAString* fWorldMaterCmd = nullptr; + G4UIcmdWithADoubleAndUnit* fWorldXCmd = nullptr; + G4UIcmdWithADoubleAndUnit* fWorldYZCmd = nullptr; }; diff --git a/examples/extended/electromagnetic/TestEm5/include/EventAction.hh b/examples/extended/electromagnetic/TestEm5/include/EventAction.hh index e99ed939795..ff9f62dc8d3 100644 --- a/examples/extended/electromagnetic/TestEm5/include/EventAction.hh +++ b/examples/extended/electromagnetic/TestEm5/include/EventAction.hh @@ -43,8 +43,8 @@ class G4VProcess; class EventAction : public G4UserEventAction { public: - EventAction(); - ~EventAction() = default; + EventAction() = default; + ~EventAction() override = default; void BeginOfEventAction(const G4Event*) override; void EndOfEventAction(const G4Event*) override; @@ -63,11 +63,11 @@ public: private: - G4double fEnergyDeposit; - G4double fTrakLenCharged, fTrakLenNeutral; - G4int fNbStepsCharged, fNbStepsNeutral; - G4int fTransmitFlag, fReflectFlag; - G4int fTypes[4]; + G4double fEnergyDeposit = 0.; + G4double fTrakLenCharged = 0., fTrakLenNeutral = 0.; + G4int fNbStepsCharged = 0, fNbStepsNeutral = 0; + G4int fTransmitFlag = 0, fReflectFlag = 0; + G4int fTypes[4] = {0,0,0,0}; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/include/HistoManager.hh b/examples/extended/electromagnetic/TestEm5/include/HistoManager.hh index b7194c03c0a..0d5126158fa 100644 --- a/examples/extended/electromagnetic/TestEm5/include/HistoManager.hh +++ b/examples/extended/electromagnetic/TestEm5/include/HistoManager.hh @@ -26,7 +26,6 @@ /// \file electromagnetic/TestEm5/include/HistoManager.hh /// \brief Definition of the HistoManager class // -// // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -35,7 +34,6 @@ #define HistoManager_h 1 #include "globals.hh" - #include "G4AnalysisManager.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -44,11 +42,11 @@ class HistoManager { public: HistoManager(); - ~HistoManager(); + ~HistoManager() = default; private: void Book(); - G4String fFileName; + G4String fFileName = "testem5"; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/include/PhysListEmStandard.hh b/examples/extended/electromagnetic/TestEm5/include/PhysListEmStandard.hh index 56be004703a..ce7baa89922 100644 --- a/examples/extended/electromagnetic/TestEm5/include/PhysListEmStandard.hh +++ b/examples/extended/electromagnetic/TestEm5/include/PhysListEmStandard.hh @@ -42,16 +42,16 @@ class PhysListEmStandard : public G4VPhysicsConstructor { public: PhysListEmStandard(const G4String& name = "standard"); - ~PhysListEmStandard(); + ~PhysListEmStandard() override = default; public: // This method is dummy for physics - virtual void ConstructParticle() {}; + void ConstructParticle() override {}; // This method will be invoked in the Construct() method. // each physics process will be instantiated and // registered to the process manager of each particle type - virtual void ConstructProcess(); + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/include/PhysicsList.hh b/examples/extended/electromagnetic/TestEm5/include/PhysicsList.hh index 5fce84912a0..3ab042c5736 100644 --- a/examples/extended/electromagnetic/TestEm5/include/PhysicsList.hh +++ b/examples/extended/electromagnetic/TestEm5/include/PhysicsList.hh @@ -56,12 +56,12 @@ public: private: - PhysicsListMessenger* fMessenger; + PhysicsListMessenger* fMessenger = nullptr; - G4String fEmName; - G4VPhysicsConstructor* fEmPhysicsList; - G4VPhysicsConstructor* fDecayPhysics; - G4VPhysicsConstructor* fHadPhysicsList; + G4String fEmName = " "; + G4VPhysicsConstructor* fEmPhysicsList = nullptr; + G4VPhysicsConstructor* fDecayPhysics = nullptr; + G4VPhysicsConstructor* fHadPhysicsList = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/include/PhysicsListMessenger.hh b/examples/extended/electromagnetic/TestEm5/include/PhysicsListMessenger.hh index 464947e3464..f3729dc3ec7 100644 --- a/examples/extended/electromagnetic/TestEm5/include/PhysicsListMessenger.hh +++ b/examples/extended/electromagnetic/TestEm5/include/PhysicsListMessenger.hh @@ -46,17 +46,17 @@ class PhysicsListMessenger: public G4UImessenger { public: - PhysicsListMessenger(PhysicsList* ); - ~PhysicsListMessenger(); + PhysicsListMessenger(PhysicsList*); + ~PhysicsListMessenger() override; void SetNewValue(G4UIcommand*, G4String) override; private: - PhysicsList* fPhysicsList; + PhysicsList* fPhysicsList = nullptr; - G4UIdirectory* fPhysDir; - G4UIcmdWithAString* fListCmd; + G4UIdirectory* fPhysDir = nullptr; + G4UIcmdWithAString* fListCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/include/PrimaryGeneratorAction.hh b/examples/extended/electromagnetic/TestEm5/include/PrimaryGeneratorAction.hh index 4387f00fe8d..8227ec0a428 100644 --- a/examples/extended/electromagnetic/TestEm5/include/PrimaryGeneratorAction.hh +++ b/examples/extended/electromagnetic/TestEm5/include/PrimaryGeneratorAction.hh @@ -47,20 +47,20 @@ class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: PrimaryGeneratorAction(DetectorConstruction*); - ~PrimaryGeneratorAction(); + ~PrimaryGeneratorAction() override; public: void SetDefaultKinematic(); void SetRndmBeam(G4double val) {fRndmBeam = val;}; - virtual void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; G4ParticleGun* GetParticleGun() {return fParticleGun;}; private: - G4ParticleGun* fParticleGun; - DetectorConstruction* fDetector; - G4double fRndmBeam; + G4ParticleGun* fParticleGun = nullptr; + DetectorConstruction* fDetector = nullptr; + G4double fRndmBeam = 0.; - PrimaryGeneratorMessenger* fGunMessenger; + PrimaryGeneratorMessenger* fGunMessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/include/PrimaryGeneratorMessenger.hh b/examples/extended/electromagnetic/TestEm5/include/PrimaryGeneratorMessenger.hh index ee8175864c5..4a664175216 100644 --- a/examples/extended/electromagnetic/TestEm5/include/PrimaryGeneratorMessenger.hh +++ b/examples/extended/electromagnetic/TestEm5/include/PrimaryGeneratorMessenger.hh @@ -47,16 +47,16 @@ class PrimaryGeneratorMessenger: public G4UImessenger { public: PrimaryGeneratorMessenger(PrimaryGeneratorAction*); - ~PrimaryGeneratorMessenger(); + ~PrimaryGeneratorMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - PrimaryGeneratorAction* fAction; + PrimaryGeneratorAction* fAction = nullptr; - G4UIdirectory* fGunDir; - G4UIcmdWithoutParameter* fDefaultCmd; - G4UIcmdWithADouble* fRndmCmd; + G4UIdirectory* fGunDir = nullptr; + G4UIcmdWithoutParameter* fDefaultCmd = nullptr; + G4UIcmdWithADouble* fRndmCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/include/Run.hh b/examples/extended/electromagnetic/TestEm5/include/Run.hh index e77aabf0492..58cb105c373 100644 --- a/examples/extended/electromagnetic/TestEm5/include/Run.hh +++ b/examples/extended/electromagnetic/TestEm5/include/Run.hh @@ -50,7 +50,7 @@ class Run : public G4Run { public: Run(DetectorConstruction*); - ~Run() = default; + ~Run() override = default; void SetPrimary(G4ParticleDefinition* particle, G4double energy); @@ -100,23 +100,24 @@ public: void EndOfRun(); private: - DetectorConstruction* fDetector; - G4ParticleDefinition* fParticle; - G4double fEkin; + DetectorConstruction* fDetector = nullptr; + G4ParticleDefinition* fParticle = nullptr; + G4double fEkin = 0.; - G4double fEnergyDeposit, fEnergyDeposit2; - G4double fTrakLenCharged, fTrakLenCharged2; - G4double fTrakLenNeutral, fTrakLenNeutral2; - G4double fNbStepsCharged, fNbStepsCharged2; - G4double fNbStepsNeutral, fNbStepsNeutral2; - G4double fMscProjecTheta, fMscProjecTheta2; - G4double fMscThetaCentral; + G4double fEnergyDeposit = 0., fEnergyDeposit2 = 0.; + G4double fTrakLenCharged = 0., fTrakLenCharged2 = 0.; + G4double fTrakLenNeutral = 0., fTrakLenNeutral2 = 0.; + G4double fNbStepsCharged = 0., fNbStepsCharged2 = 0.; + G4double fNbStepsNeutral = 0., fNbStepsNeutral2 = 0.; + G4double fMscProjecTheta = 0., fMscProjecTheta2 = 0.; + G4double fMscThetaCentral = 0.; - G4int fNbGamma, fNbElect, fNbPosit; - G4int fTransmit[2], fReflect[2]; - G4int fMscEntryCentral, fTypes[4]; - - G4double fEnergyLeak[2], fEnergyLeak2[2]; + G4int fNbGamma = 0, fNbElect = 0, fNbPosit = 0; + G4int fTransmit[2] = {0,0}, fReflect[2] = {0,0}; + G4int fMscEntryCentral = 0; + G4int fTypes[4] = {0,0,0,0}; + + G4double fEnergyLeak[2] = {0,0}, fEnergyLeak2[2] = {0,0}; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/include/RunAction.hh b/examples/extended/electromagnetic/TestEm5/include/RunAction.hh index 4f1464e26a7..6425b715f18 100644 --- a/examples/extended/electromagnetic/TestEm5/include/RunAction.hh +++ b/examples/extended/electromagnetic/TestEm5/include/RunAction.hh @@ -50,18 +50,18 @@ class RunAction : public G4UserRunAction public: - RunAction(DetectorConstruction* det, PrimaryGeneratorAction* prim=0); - ~RunAction(); + RunAction(DetectorConstruction* det, PrimaryGeneratorAction* prim = nullptr); + ~RunAction() override; - virtual G4Run* GenerateRun(); - virtual void BeginOfRunAction(const G4Run*); - virtual void EndOfRunAction(const G4Run*); + G4Run* GenerateRun() override; + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; private: - DetectorConstruction* fDetector; - PrimaryGeneratorAction* fPrimary; - Run* fRun; - HistoManager* fHistoManager; + DetectorConstruction* fDetector = nullptr; + PrimaryGeneratorAction* fPrimary = nullptr; + Run* fRun = nullptr; + HistoManager* fHistoManager = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/include/StackingAction.hh b/examples/extended/electromagnetic/TestEm5/include/StackingAction.hh index 310c73c9946..1efbdff4c48 100644 --- a/examples/extended/electromagnetic/TestEm5/include/StackingAction.hh +++ b/examples/extended/electromagnetic/TestEm5/include/StackingAction.hh @@ -45,7 +45,7 @@ class StackingAction : public G4UserStackingAction { public: StackingAction(EventAction*); - ~StackingAction(); + ~StackingAction() override; void SetKillStatus(G4int value) { fKillSecondary = value;}; @@ -54,8 +54,8 @@ class StackingAction : public G4UserStackingAction private: EventAction* fEventAction; - G4bool fKillSecondary = 0; - StackingMessenger* fStackMessenger; + G4bool fKillSecondary = false; + StackingMessenger* fStackMessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/include/StackingMessenger.hh b/examples/extended/electromagnetic/TestEm5/include/StackingMessenger.hh index c2467201fac..6e4516efebb 100644 --- a/examples/extended/electromagnetic/TestEm5/include/StackingMessenger.hh +++ b/examples/extended/electromagnetic/TestEm5/include/StackingMessenger.hh @@ -46,15 +46,15 @@ class StackingMessenger: public G4UImessenger { public: StackingMessenger(StackingAction*); - ~StackingMessenger(); + ~StackingMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - StackingAction* fStackAction; + StackingAction* fStackAction = nullptr; - G4UIdirectory* fStackDir; - G4UIcmdWithAnInteger* fKillCmd; + G4UIdirectory* fStackDir = nullptr; + G4UIcmdWithAnInteger* fKillCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/include/StepMax.hh b/examples/extended/electromagnetic/TestEm5/include/StepMax.hh index 804f25d8189..26ce0c737ac 100644 --- a/examples/extended/electromagnetic/TestEm5/include/StepMax.hh +++ b/examples/extended/electromagnetic/TestEm5/include/StepMax.hh @@ -47,7 +47,7 @@ class StepMax : public G4VDiscreteProcess public: StepMax(const G4String& processName = "UserMaxStep"); - ~StepMax(); + ~StepMax() override; G4bool IsApplicable(const G4ParticleDefinition&) override; @@ -65,9 +65,8 @@ class StepMax : public G4VDiscreteProcess private: - G4double fMaxChargedStep; - - StepMaxMessenger* fMess; + G4double fMaxChargedStep = DBL_MAX; + StepMaxMessenger* fMess = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/include/StepMaxMessenger.hh b/examples/extended/electromagnetic/TestEm5/include/StepMaxMessenger.hh index a6b77a83b7e..6158e14334a 100644 --- a/examples/extended/electromagnetic/TestEm5/include/StepMaxMessenger.hh +++ b/examples/extended/electromagnetic/TestEm5/include/StepMaxMessenger.hh @@ -45,13 +45,13 @@ class StepMaxMessenger: public G4UImessenger { public: StepMaxMessenger(StepMax*); - ~StepMaxMessenger(); + ~StepMaxMessenger() override; void SetNewValue(G4UIcommand*, G4String) override; private: - StepMax* fStepMax; - G4UIcmdWithADoubleAndUnit* fStepMaxCmd; + StepMax* fStepMax = nullptr; + G4UIcmdWithADoubleAndUnit* fStepMaxCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/include/SteppingAction.hh b/examples/extended/electromagnetic/TestEm5/include/SteppingAction.hh index 8fba51b5620..1866eced3f0 100644 --- a/examples/extended/electromagnetic/TestEm5/include/SteppingAction.hh +++ b/examples/extended/electromagnetic/TestEm5/include/SteppingAction.hh @@ -46,13 +46,13 @@ class SteppingAction : public G4UserSteppingAction { public: SteppingAction(DetectorConstruction*,EventAction*); - ~SteppingAction(); + ~SteppingAction() override = default; - virtual void UserSteppingAction(const G4Step*); + void UserSteppingAction(const G4Step*) override; private: - DetectorConstruction* fDetector; - EventAction* fEventAction; + DetectorConstruction* fDetector = nullptr; + EventAction* fEventAction = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/include/TrackingAction.hh b/examples/extended/electromagnetic/TestEm5/include/TrackingAction.hh index 074312b8ae1..cc4f8618e24 100644 --- a/examples/extended/electromagnetic/TestEm5/include/TrackingAction.hh +++ b/examples/extended/electromagnetic/TestEm5/include/TrackingAction.hh @@ -45,18 +45,18 @@ class TrackingAction : public G4UserTrackingAction { public: TrackingAction(DetectorConstruction*,EventAction*); - ~TrackingAction() {}; + ~TrackingAction() override = default; - virtual void PreUserTrackingAction(const G4Track*); - virtual void PostUserTrackingAction(const G4Track*); + void PreUserTrackingAction(const G4Track*) override; + void PostUserTrackingAction(const G4Track*) override; private: - DetectorConstruction* fDetector; - EventAction* fEventAction; + DetectorConstruction* fDetector = nullptr; + EventAction* fEventAction = nullptr; - G4double fXstartAbs, fXendAbs; - G4double fPrimaryCharge; - G4double fDirX; + G4double fXstartAbs = 0., fXendAbs = 0.; + G4double fPrimaryCharge = 0.; + G4double fDirX = 0.; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/src/ActionInitialization.cc b/examples/extended/electromagnetic/TestEm5/src/ActionInitialization.cc index b6e551f23f3..a2382cf3f85 100644 --- a/examples/extended/electromagnetic/TestEm5/src/ActionInitialization.cc +++ b/examples/extended/electromagnetic/TestEm5/src/ActionInitialization.cc @@ -39,12 +39,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ActionInitialization::ActionInitialization(DetectorConstruction* det) - : G4VUserActionInitialization(),fDetector(det) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -ActionInitialization::~ActionInitialization() + : fDetector(det) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/src/DetectorConstruction.cc b/examples/extended/electromagnetic/TestEm5/src/DetectorConstruction.cc index 6781228f0f0..7117945b224 100644 --- a/examples/extended/electromagnetic/TestEm5/src/DetectorConstruction.cc +++ b/examples/extended/electromagnetic/TestEm5/src/DetectorConstruction.cc @@ -57,11 +57,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorConstruction::DetectorConstruction() - : G4VUserDetectorConstruction(), - fAbsorberMaterial(nullptr),fWorldMaterial(nullptr), - fSolidWorld(nullptr),fLogicWorld(nullptr),fPhysiWorld(nullptr), - fSolidAbsorber(nullptr),fLogicAbsorber(nullptr),fPhysiAbsorber(nullptr), - fDetectorMessenger(nullptr) { // default parameter values of the calorimeter fAbsorberThickness = 1.*cm; diff --git a/examples/extended/electromagnetic/TestEm5/src/DetectorMessenger.cc b/examples/extended/electromagnetic/TestEm5/src/DetectorMessenger.cc index 81b044fc9c5..cea88f96db1 100644 --- a/examples/extended/electromagnetic/TestEm5/src/DetectorMessenger.cc +++ b/examples/extended/electromagnetic/TestEm5/src/DetectorMessenger.cc @@ -42,16 +42,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorMessenger::DetectorMessenger(DetectorConstruction * Det) -:G4UImessenger(),fDetector(Det), - fTestemDir(0), - fDetDir(0), - fAbsMaterCmd(0), - fAbsThickCmd(0), - fAbsSizYZCmd(0), - fAbsXposCmd(0), - fWorldMaterCmd(0), - fWorldXCmd(0), - fWorldYZCmd(0) +:fDetector(Det) { fTestemDir = new G4UIdirectory("/testem/"); fTestemDir->SetGuidance("UI commands specific to this example."); diff --git a/examples/extended/electromagnetic/TestEm5/src/EventAction.cc b/examples/extended/electromagnetic/TestEm5/src/EventAction.cc index 696c10f725f..d2ceb318690 100644 --- a/examples/extended/electromagnetic/TestEm5/src/EventAction.cc +++ b/examples/extended/electromagnetic/TestEm5/src/EventAction.cc @@ -41,18 +41,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -EventAction::EventAction() -:G4UserEventAction(), - fEnergyDeposit(0.), - fTrakLenCharged(0.), fTrakLenNeutral(0.), - fNbStepsCharged(0), fNbStepsNeutral(0), - fTransmitFlag(0), fReflectFlag(0) -{ - fTypes[0] = fTypes[1] = fTypes[2] = fTypes[3] = 0; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void EventAction::BeginOfEventAction(const G4Event* ) { // initialisation per event diff --git a/examples/extended/electromagnetic/TestEm5/src/HistoManager.cc b/examples/extended/electromagnetic/TestEm5/src/HistoManager.cc index fa49042f13b..7e72ffda65a 100644 --- a/examples/extended/electromagnetic/TestEm5/src/HistoManager.cc +++ b/examples/extended/electromagnetic/TestEm5/src/HistoManager.cc @@ -26,7 +26,6 @@ /// \file electromagnetic/TestEm5/src/HistoManager.cc /// \brief Implementation of the HistoManager class // -// // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -37,19 +36,12 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... HistoManager::HistoManager() - : fFileName("testem5") { Book(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -HistoManager::~HistoManager() -{ -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void HistoManager::Book() { // Create or get analysis manager diff --git a/examples/extended/electromagnetic/TestEm5/src/PhysListEmStandard.cc b/examples/extended/electromagnetic/TestEm5/src/PhysListEmStandard.cc index 248dbc7f721..c45e948e11f 100644 --- a/examples/extended/electromagnetic/TestEm5/src/PhysListEmStandard.cc +++ b/examples/extended/electromagnetic/TestEm5/src/PhysListEmStandard.cc @@ -88,8 +88,8 @@ PhysListEmStandard::PhysListEmStandard(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysListEmStandard::~PhysListEmStandard() -{} +//PhysListEmStandard::~PhysListEmStandard() +//{} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/src/PhysicsList.cc b/examples/extended/electromagnetic/TestEm5/src/PhysicsList.cc index 037a8af8a83..393bc300af5 100644 --- a/examples/extended/electromagnetic/TestEm5/src/PhysicsList.cc +++ b/examples/extended/electromagnetic/TestEm5/src/PhysicsList.cc @@ -77,8 +77,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::PhysicsList() : G4VModularPhysicsList(), - fHadPhysicsList(nullptr) +PhysicsList::PhysicsList() { fMessenger = new PhysicsListMessenger(this); SetVerboseLevel(1); diff --git a/examples/extended/electromagnetic/TestEm5/src/PhysicsListMessenger.cc b/examples/extended/electromagnetic/TestEm5/src/PhysicsListMessenger.cc index 6f20e91337e..2aa094a8288 100644 --- a/examples/extended/electromagnetic/TestEm5/src/PhysicsListMessenger.cc +++ b/examples/extended/electromagnetic/TestEm5/src/PhysicsListMessenger.cc @@ -39,7 +39,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysicsListMessenger::PhysicsListMessenger(PhysicsList* pPhys) - :G4UImessenger(),fPhysicsList(pPhys) + :fPhysicsList(pPhys) { fPhysDir = new G4UIdirectory("/testem/phys/"); fPhysDir->SetGuidance("physics list commands"); @@ -48,8 +48,7 @@ PhysicsListMessenger::PhysicsListMessenger(PhysicsList* pPhys) fListCmd->SetGuidance("Add modula physics list."); fListCmd->SetParameterName("PList",false); fListCmd->AvailableForStates(G4State_PreInit); - fListCmd->SetToBeBroadcasted(false); - + fListCmd->SetToBeBroadcasted(false); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/src/PrimaryGeneratorAction.cc b/examples/extended/electromagnetic/TestEm5/src/PrimaryGeneratorAction.cc index c1d48d6f702..b0e44d0398b 100644 --- a/examples/extended/electromagnetic/TestEm5/src/PrimaryGeneratorAction.cc +++ b/examples/extended/electromagnetic/TestEm5/src/PrimaryGeneratorAction.cc @@ -43,9 +43,8 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PrimaryGeneratorAction::PrimaryGeneratorAction(DetectorConstruction* DC) - :G4VUserPrimaryGeneratorAction(), - fParticleGun(0),fDetector(DC),fRndmBeam(0),fGunMessenger(0) +PrimaryGeneratorAction::PrimaryGeneratorAction(DetectorConstruction* det) + :fDetector(det) { G4int n_particle = 1; fParticleGun = new G4ParticleGun(n_particle); diff --git a/examples/extended/electromagnetic/TestEm5/src/PrimaryGeneratorMessenger.cc b/examples/extended/electromagnetic/TestEm5/src/PrimaryGeneratorMessenger.cc index fca438a0a93..034c57f437b 100644 --- a/examples/extended/electromagnetic/TestEm5/src/PrimaryGeneratorMessenger.cc +++ b/examples/extended/electromagnetic/TestEm5/src/PrimaryGeneratorMessenger.cc @@ -41,10 +41,7 @@ PrimaryGeneratorMessenger::PrimaryGeneratorMessenger( PrimaryGeneratorAction* Gun) -:G4UImessenger(),fAction(Gun), - fGunDir(0), - fDefaultCmd(0), - fRndmCmd(0) +:fAction(Gun) { fGunDir = new G4UIdirectory("/testem/gun/"); fGunDir->SetGuidance("gun control"); diff --git a/examples/extended/electromagnetic/TestEm5/src/Run.cc b/examples/extended/electromagnetic/TestEm5/src/Run.cc index aec351ec698..3260d03e2d8 100644 --- a/examples/extended/electromagnetic/TestEm5/src/Run.cc +++ b/examples/extended/electromagnetic/TestEm5/src/Run.cc @@ -44,27 +44,8 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... Run::Run(DetectorConstruction* det) -: G4Run(), - fDetector(det), - fParticle(0), fEkin(0.) -{ - fEnergyDeposit = fEnergyDeposit2 = 0.; - fTrakLenCharged = fTrakLenCharged2 = 0.; - fTrakLenNeutral = fTrakLenNeutral2 = 0.; - fNbStepsCharged = fNbStepsCharged2 = 0.; - fNbStepsNeutral = fNbStepsNeutral2 = 0.; - fMscProjecTheta = fMscProjecTheta2 = 0.; - fMscThetaCentral = 0.; - - fNbGamma = fNbElect = fNbPosit = 0; - - fTransmit[0] = fTransmit[1] = fReflect[0] = fReflect[1] = 0; - - fMscEntryCentral = 0; - fTypes[0] = fTypes[1] = fTypes[2] = fTypes[3] = 0; - - fEnergyLeak[0] = fEnergyLeak[1] = fEnergyLeak2[0] = fEnergyLeak2[1] = 0.; - } +: fDetector(det) +{ } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -304,7 +285,9 @@ void Run::EndOfRun() << fMscThetaCentral/mrad << " mrad; " << " Tail ratio = " << tailMsc << " %" << G4endl; - G4cout << "## Gamma process counts:" << G4endl; + // gamma process counts + // + G4cout << "\n Gamma process counts:" << G4endl; G4cout << " Photoeffect " << fTypes[0] << G4endl; G4cout << " Compton " << fTypes[1] << G4endl; G4cout << " Conversion " << fTypes[2] << G4endl; diff --git a/examples/extended/electromagnetic/TestEm5/src/RunAction.cc b/examples/extended/electromagnetic/TestEm5/src/RunAction.cc index bd8797b65e4..6fabe6cde9b 100644 --- a/examples/extended/electromagnetic/TestEm5/src/RunAction.cc +++ b/examples/extended/electromagnetic/TestEm5/src/RunAction.cc @@ -47,7 +47,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... RunAction::RunAction(DetectorConstruction* det, PrimaryGeneratorAction* kin) -:G4UserRunAction(),fDetector(det), fPrimary(kin), fRun(0), fHistoManager(0) +: fDetector(det),fPrimary(kin) { // Book predefined histograms fHistoManager = new HistoManager(); diff --git a/examples/extended/electromagnetic/TestEm5/src/StackingAction.cc b/examples/extended/electromagnetic/TestEm5/src/StackingAction.cc index 9ad1bdea7c1..f14842778a3 100644 --- a/examples/extended/electromagnetic/TestEm5/src/StackingAction.cc +++ b/examples/extended/electromagnetic/TestEm5/src/StackingAction.cc @@ -43,8 +43,8 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -StackingAction::StackingAction(EventAction* EA) - : G4UserStackingAction(), fEventAction(EA) +StackingAction::StackingAction(EventAction* event) + : fEventAction(event) { fStackMessenger = new StackingMessenger(this); } diff --git a/examples/extended/electromagnetic/TestEm5/src/StackingMessenger.cc b/examples/extended/electromagnetic/TestEm5/src/StackingMessenger.cc index b7a1137cfd1..1dd5d054793 100644 --- a/examples/extended/electromagnetic/TestEm5/src/StackingMessenger.cc +++ b/examples/extended/electromagnetic/TestEm5/src/StackingMessenger.cc @@ -39,9 +39,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... StackingMessenger::StackingMessenger(StackingAction* stack) -:G4UImessenger(),fStackAction(stack), - fStackDir(0), - fKillCmd(0) +: fStackAction(stack) { fStackDir = new G4UIdirectory("/testem/stack/"); fStackDir->SetGuidance("stacking control"); diff --git a/examples/extended/electromagnetic/TestEm5/src/StepMax.cc b/examples/extended/electromagnetic/TestEm5/src/StepMax.cc index 18252566ee0..29f94931097 100644 --- a/examples/extended/electromagnetic/TestEm5/src/StepMax.cc +++ b/examples/extended/electromagnetic/TestEm5/src/StepMax.cc @@ -36,7 +36,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... StepMax::StepMax(const G4String& processName) - : G4VDiscreteProcess(processName),fMaxChargedStep(DBL_MAX),fMess(nullptr) + : G4VDiscreteProcess(processName) { fMess = new StepMaxMessenger(this); } diff --git a/examples/extended/electromagnetic/TestEm5/src/StepMaxMessenger.cc b/examples/extended/electromagnetic/TestEm5/src/StepMaxMessenger.cc index 10b2153fbfd..254894b9dd4 100644 --- a/examples/extended/electromagnetic/TestEm5/src/StepMaxMessenger.cc +++ b/examples/extended/electromagnetic/TestEm5/src/StepMaxMessenger.cc @@ -38,7 +38,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... StepMaxMessenger::StepMaxMessenger(StepMax* stepM) -:G4UImessenger(),fStepMax(stepM),fStepMaxCmd(nullptr) +:fStepMax(stepM) { fStepMaxCmd = new G4UIcmdWithADoubleAndUnit("/testem/stepMax",this); fStepMaxCmd->SetGuidance("Set max allowed step length"); diff --git a/examples/extended/electromagnetic/TestEm5/src/SteppingAction.cc b/examples/extended/electromagnetic/TestEm5/src/SteppingAction.cc index 7f4f8ee31ce..58965040c2f 100644 --- a/examples/extended/electromagnetic/TestEm5/src/SteppingAction.cc +++ b/examples/extended/electromagnetic/TestEm5/src/SteppingAction.cc @@ -41,14 +41,8 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -SteppingAction::SteppingAction(DetectorConstruction* DET, - EventAction* EA) -:G4UserSteppingAction(),fDetector(DET), fEventAction(EA) -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -SteppingAction::~SteppingAction() +SteppingAction::SteppingAction(DetectorConstruction* det, EventAction* event) +:fDetector(det), fEventAction(event) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm5/src/TrackingAction.cc b/examples/extended/electromagnetic/TestEm5/src/TrackingAction.cc index 909a5f40564..341ddf3e6a5 100644 --- a/examples/extended/electromagnetic/TestEm5/src/TrackingAction.cc +++ b/examples/extended/electromagnetic/TestEm5/src/TrackingAction.cc @@ -45,11 +45,9 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -TrackingAction::TrackingAction(DetectorConstruction* DET, EventAction* EA) -:G4UserTrackingAction(),fDetector(DET), fEventAction(EA) -{ - fXstartAbs = fXendAbs = fPrimaryCharge = fDirX = 0.0; -} +TrackingAction::TrackingAction(DetectorConstruction* det, EventAction* event) +:fDetector(det), fEventAction(event) +{ } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm6/TestEm6.out b/examples/extended/electromagnetic/TestEm6/TestEm6.out index 6ea6c86e6b3..155c93b1dde 100644 --- a/examples/extended/electromagnetic/TestEm6/TestEm6.out +++ b/examples/extended/electromagnetic/TestEm6/TestEm6.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -270,7 +270,7 @@ Step# X Y Z KineE dEStep StepLeng T Run terminated. Run Summary Number of events processed : 5 - User=0.000000s Real=0.000820s Sys=0.000000s + User=0.000000s Real=0.000670s Sys=0.000000s ### RunAction::EndOfRunAction Number of process calls ---> GammaToMuPair : 5 @@ -388,7 +388,7 @@ Step# X Y Z KineE dEStep StepLeng T Run terminated. Run Summary Number of events processed : 5 - User=0.000000s Real=0.000553s Sys=0.000000s + User=0.000000s Real=0.000473s Sys=0.000000s ### RunAction::EndOfRunAction Number of process calls ---> AnnihiToMuPair : 2 ee2hadr : 3 diff --git a/examples/extended/electromagnetic/TestEm7/History b/examples/extended/electromagnetic/TestEm7/History index dc9a7a63abc..bed793c1dc0 100644 --- a/examples/extended/electromagnetic/TestEm7/History +++ b/examples/extended/electromagnetic/TestEm7/History @@ -5,6 +5,9 @@ which **must** added in reverse chronological order (newest at the top). It must be used as a substitute for writing good git commit messages! +## 2023-04-17 V. Ivanchenko (testem7-V11-01-00) +- added extra macro for test muon dEdx and Range + ## 2022-10-18 V. Ivanchenko (testem7-V11-00-01) - Make local EM physics the same as EM physics option3 with G4IonParameterizedModel diff --git a/examples/extended/electromagnetic/TestEm7/TestEm7.out b/examples/extended/electromagnetic/TestEm7/TestEm7.out index bfa8253e307..924a9cf2eb6 100644 --- a/examples/extended/electromagnetic/TestEm7/TestEm7.out +++ b/examples/extended/electromagnetic/TestEm7/TestEm7.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -589,7 +589,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 10000 - User=6.560000s Real=6.602415s Sys=0.000000s + User=5.270000s Real=5.312767s Sys=0.000000s The run consists of 10000 proton of 160 MeV through 20 cm of G4_WATER (density: 1 g/cm3 ) @@ -649,21 +649,21 @@ N=17 V[N]={1688224171856633815, 1204397957432844994, 970316653270356218, 2007108 Run terminated. Run Summary Number of events processed : 1000 - User=2.920000s Real=2.940885s Sys=0.000000s + User=1.760000s Real=1.779931s Sys=0.000000s The run consists of 1000 C12 of 3.5 GeV through 20 cm of G4_WATER (density: 1 g/cm3 ) - Projected Range= 16.5422 cm rms= 535.539 um - Mean number of primary steps = 156.685 + Projected Range= 16.5411 cm rms= 541.188 um + Mean number of primary steps = 154.938 Total energy deposit= 3.49998 GeV - niel energy deposit = 291.094 keV + niel energy deposit = 292.903 keV --------------------------------------------------------- Cumulated Doses : Edep Edep/Ebeam Dose - tally 0: 11.426 GeV 0.326457 % 0.000228831 Gy - tally 1: 12.7834 GeV 0.365241 % 0.000256016 Gy - tally 2: 15.2416 GeV 0.435474 % 0.000305247 Gy - tally 3: 22.2325 GeV 0.635213 % 0.000445254 Gy + tally 0: 10.7886 GeV 0.308246 % 0.000216065 Gy + tally 1: 12.409 GeV 0.354543 % 0.000248518 Gy + tally 2: 14.9352 GeV 0.42672 % 0.000299111 Gy + tally 3: 22.5929 GeV 0.64551 % 0.000452472 Gy --------------------------------------------------------- @@ -671,7 +671,7 @@ Run Summary ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={1649824727118647661, 1046390055990695993, 1480625329608636178, 1464081956272961574, 690398189349009815, 1387920628077919840, 1805855177575327470, 889528290669479374, 481729531693366248, 1412514200587325633, 1276571729738571688, 2113172881940251241, 1071669001935448011, 1396820044800673496, 195159062383107426, 2263764457198372112, 1930759182272215021} counter= 3sumtot= 1804197364288763222 +N=17 V[N]={829417378963022862, 1300201283843962640, 198956925836139836, 1464142568270413897, 1663335276770542544, 1656954601194791265, 1383379463823026538, 1392791571441710626, 1676186440055374139, 191680451985486584, 1273101876326520341, 1861268221091185200, 1973042739886704311, 1392842470028930196, 18013845985156595, 128882402125537445, 463025432105957836} counter= 16sumtot= 420478876024911247 --------------------------------------- /testem/det/tallyNumber 0 /testem/det/setMat G4_Cu @@ -714,25 +714,25 @@ Index : 2 used in the geometry : Yes ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={1649824727118647661, 1046390055990695993, 1480625329608636178, 1464081956272961574, 690398189349009815, 1387920628077919840, 1805855177575327470, 889528290669479374, 481729531693366248, 1412514200587325633, 1276571729738571688, 2113172881940251241, 1071669001935448011, 1396820044800673496, 195159062383107426, 2263764457198372112, 1930759182272215021} counter= 3sumtot= 1804197364288763222 +N=17 V[N]={829417378963022862, 1300201283843962640, 198956925836139836, 1464142568270413897, 1663335276770542544, 1656954601194791265, 1383379463823026538, 1392791571441710626, 1676186440055374139, 191680451985486584, 1273101876326520341, 1861268221091185200, 1973042739886704311, 1392842470028930196, 18013845985156595, 128882402125537445, 463025432105957836} counter= 16sumtot= 420478876024911247 --------------------------------------- --> Event 0 starts. Run terminated. Run Summary Number of events processed : 1000 - User=1.130000s Real=1.137266s Sys=0.000000s + User=0.930000s Real=0.932637s Sys=0.000000s The run consists of 1000 kaon+ of 100 MeV through 20 cm of G4_Cu (density: 8.96 g/cm3 ) - Projected Range= 2.1567 cm rms= 1.24427 mm - Mean number of primary steps = 20.235 - Total energy deposit= 282.121 MeV + Projected Range= 2.1382 cm rms= 1.28583 mm + Mean number of primary steps = 20.179 + Total energy deposit= 284.629 MeV niel energy deposit = 0 eV ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={1338587987670300508, 1726055524348634207, 1737204937330380700, 1639399654331639462, 245427606703379338, 1921119971291046248, 591807107117597966, 50523088105921032, 1114012319281161684, 1956299836203977483, 1504477214837265449, 1755451611528137480, 1834114270019308452, 1105298873475352169, 728576389818243645, 2143959167100429154, 1417278373831834602} counter= 6sumtot= 2057006850071364020 +N=17 V[N]={501735119625782754, 923815342429099247, 599735403239893071, 2072830885501423414, 2048765116260350509, 318197838522467868, 2007821188724365897, 1279191860425426251, 1865711923282873014, 987013753613254691, 729269885303685741, 873397506866956526, 1979786621814026888, 470769242883903266, 1540710321228047751, 1291055062660520805, 2067419779530689428} counter= 15sumtot= 804639768989521562 --------------------------------------- /testem/det/setMat TechVacuum /gun/particle alpha @@ -779,13 +779,13 @@ Index : 3 used in the geometry : Yes ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={1338587987670300508, 1726055524348634207, 1737204937330380700, 1639399654331639462, 245427606703379338, 1921119971291046248, 591807107117597966, 50523088105921032, 1114012319281161684, 1956299836203977483, 1504477214837265449, 1755451611528137480, 1834114270019308452, 1105298873475352169, 728576389818243645, 2143959167100429154, 1417278373831834602} counter= 6sumtot= 2057006850071364020 +N=17 V[N]={501735119625782754, 923815342429099247, 599735403239893071, 2072830885501423414, 2048765116260350509, 318197838522467868, 2007821188724365897, 1279191860425426251, 1865711923282873014, 987013753613254691, 729269885303685741, 873397506866956526, 1979786621814026888, 470769242883903266, 1540710321228047751, 1291055062660520805, 2067419779530689428} counter= 15sumtot= 804639768989521562 --------------------------------------- --> Event 0 starts. Run terminated. Run Summary Number of events processed : 100 - User=0.000000s Real=0.000459s Sys=0.000000s + User=0.000000s Real=0.000415s Sys=0.000000s The run consists of 100 alpha of 265 eV through 20 cm of TechVacuum (density: 0.01 mg/cm3) @@ -797,7 +797,7 @@ Run Summary ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={2192163975694763026, 1673159475950802342, 782451221943179320, 1487494436517478500, 579611417974425404, 1713718724176807689, 1489087925180720458, 2049345872479684306, 1586473965357024030, 10296329964463894, 998134519037403527, 551635596268734023, 1661333464599000816, 1000289672044395123, 1085366875711823351, 600976340583993053, 272441468048635339} counter= 14sumtot= 1287237207823782593 +N=17 V[N]={31629932840827938, 871228274508322766, 1000560302593716623, 1787959523827062788, 1461014182565297822, 1042213102844504803, 1710765848938777200, 1897640330697169306, 506996622542709347, 153026835078646295, 634938331807752530, 358239086562041327, 34016071867321501, 1474807280863803110, 790694863059189795, 1403685252349500849, 283841600100853125} counter= 7sumtot= 1608199387765333419 --------------------------------------- /testem/det/setMat G4_WATER /gun/particle alpha @@ -842,25 +842,25 @@ Index : 3 used in the geometry : No ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={2192163975694763026, 1673159475950802342, 782451221943179320, 1487494436517478500, 579611417974425404, 1713718724176807689, 1489087925180720458, 2049345872479684306, 1586473965357024030, 10296329964463894, 998134519037403527, 551635596268734023, 1661333464599000816, 1000289672044395123, 1085366875711823351, 600976340583993053, 272441468048635339} counter= 14sumtot= 1287237207823782593 +N=17 V[N]={31629932840827938, 871228274508322766, 1000560302593716623, 1787959523827062788, 1461014182565297822, 1042213102844504803, 1710765848938777200, 1897640330697169306, 506996622542709347, 153026835078646295, 634938331807752530, 358239086562041327, 34016071867321501, 1474807280863803110, 790694863059189795, 1403685252349500849, 283841600100853125} counter= 7sumtot= 1608199387765333419 --------------------------------------- --> Event 0 starts. Run terminated. Run Summary Number of events processed : 100 - User=0.010000s Real=0.009827s Sys=0.000000s + User=0.010000s Real=0.009013s Sys=0.000000s The run consists of 100 alpha of 100 MeV through 20 cm of G4_WATER (density: 1 g/cm3 ) - Projected Range= 6.45933 mm rms= 40.8816 um - Mean number of primary steps = 30.55 + Projected Range= 6.46159 mm rms= 45.4247 um + Mean number of primary steps = 30.5 Total energy deposit= 100 MeV - niel energy deposit = 10.6551 keV + niel energy deposit = 10.6774 keV ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={1355506713174184281, 779681627929014089, 1785895315103792745, 2104868334260972656, 71091773222664789, 1914512557478149858, 920630424631194194, 1468270053995532510, 1314866396454028056, 135018963173355710, 1270326935683663919, 1787970458731610810, 254928247856670452, 1972595102093162849, 965870248761183455, 1454084882284254364, 2297983622324710773} counter= 12sumtot= 1101514574234899951 +N=17 V[N]={1964566707233739242, 2134232692510234451, 1560845933114215428, 172861493382653167, 1785729058059721531, 1743716076502391938, 1266659746127727927, 1912182428385523050, 968614424299056580, 1389028684522903430, 1569317316847523720, 336482328046501121, 2006388492855086464, 1131986105382208151, 2097107038936746387, 1413009922370789853, 309974703984693226} counter= 7sumtot= 704273060424776156 --------------------------------------- /testem/det/setMat G4_Si /gun/particle ion @@ -914,25 +914,25 @@ Index : 4 used in the geometry : Yes ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={1355506713174184281, 779681627929014089, 1785895315103792745, 2104868334260972656, 71091773222664789, 1914512557478149858, 920630424631194194, 1468270053995532510, 1314866396454028056, 135018963173355710, 1270326935683663919, 1787970458731610810, 254928247856670452, 1972595102093162849, 965870248761183455, 1454084882284254364, 2297983622324710773} counter= 12sumtot= 1101514574234899951 +N=17 V[N]={1964566707233739242, 2134232692510234451, 1560845933114215428, 172861493382653167, 1785729058059721531, 1743716076502391938, 1266659746127727927, 1912182428385523050, 968614424299056580, 1389028684522903430, 1569317316847523720, 336482328046501121, 2006388492855086464, 1131986105382208151, 2097107038936746387, 1413009922370789853, 309974703984693226} counter= 7sumtot= 704273060424776156 --------------------------------------- --> Event 0 starts. Run terminated. Run Summary Number of events processed : 10 - User=3.260000s Real=3.338079s Sys=0.050000s + User=5.540000s Real=5.622864s Sys=0.040000s The run consists of 10 Xe131 of 1.217 GeV through 20 cm of G4_Si (density: 2.33 g/cm3 ) - Projected Range= 103.254 um rms= 22.0295 um - Mean number of primary steps = 45129.3 - Total energy deposit= 1.21747 GeV - niel energy deposit = 8.5814 MeV + Projected Range= 134.047 um rms= 40.1848 um + Mean number of primary steps = 87687.9 + Total energy deposit= 1.21798 GeV + niel energy deposit = 7.18331 MeV ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={1226539145667925247, 803384048961195186, 1597766061534637389, 788125295189000949, 884394695423593129, 1031931218901739477, 1263809110994118839, 1113262438020200866, 683421330660528998, 2057847253672169623, 1763767724925684218, 1667946317736174446, 2291569851075208156, 1955305347057359432, 693172886419360308, 1787970184152794831, 845907212407414864} counter= 14sumtot= 1703533039875860399 +N=17 V[N]={1104982781534720889, 185315459398550563, 498706388437354980, 2050396178167431924, 1556520057910404659, 1557385895092432061, 2057759059819518410, 408999321323115620, 887867878533340246, 1110809714378542652, 522978780076922885, 1575259233061277640, 652548690403036210, 194075076131857469, 1083799765434588918, 1760308327715611770, 149993551396521066} counter= 6sumtot= 1216805094319370305 --------------------------------------- /testem/det/setMat Water_1.05 /gun/particle proton @@ -992,25 +992,25 @@ Index : 5 used in the geometry : Yes ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={1226539145667925247, 803384048961195186, 1597766061534637389, 788125295189000949, 884394695423593129, 1031931218901739477, 1263809110994118839, 1113262438020200866, 683421330660528998, 2057847253672169623, 1763767724925684218, 1667946317736174446, 2291569851075208156, 1955305347057359432, 693172886419360308, 1787970184152794831, 845907212407414864} counter= 14sumtot= 1703533039875860399 +N=17 V[N]={1104982781534720889, 185315459398550563, 498706388437354980, 2050396178167431924, 1556520057910404659, 1557385895092432061, 2057759059819518410, 408999321323115620, 887867878533340246, 1110809714378542652, 522978780076922885, 1575259233061277640, 652548690403036210, 194075076131857469, 1083799765434588918, 1760308327715611770, 149993551396521066} counter= 6sumtot= 1216805094319370305 --------------------------------------- --> Event 0 starts. Run terminated. Run Summary Number of events processed : 1000 - User=0.560000s Real=0.569527s Sys=0.000000s + User=0.510000s Real=0.707524s Sys=0.000000s The run consists of 1000 proton of 160 MeV through 20 cm of Water_1.05 (density: 1.05 g/cm3 ) - Projected Range= 16.9343 cm rms= 1.85656 mm - Mean number of primary steps = 180.24 + Projected Range= 16.9326 cm rms= 1.83039 mm + Mean number of primary steps = 180.227 Total energy deposit= 160 MeV - niel energy deposit = 167.739 eV + niel energy deposit = 189.812 eV ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={1559601014303070711, 1095335349674149805, 932635877950963016, 1474630784217774705, 1341611265631990098, 1129982344277425035, 258877296844998270, 2092578776198380370, 916161013568256293, 2182394717222575020, 1096302772421771783, 458432139333979571, 1580181127183452038, 1936103536323180792, 39973741503986752, 398879171059995875, 1443222940257226693} counter= 11sumtot= 1490159794263625219 +N=17 V[N]={402502799063649907, 303952163628049436, 1676149088952966896, 1991727249298643085, 31650104078232986, 1115206666826141429, 1328153891858133457, 822048637108351250, 2032478610777503315, 55906023970787893, 400299369045289749, 1159860334160527007, 2112562303303974239, 797381338023607201, 1133133083457443696, 2274605076445633022, 1856028563990787932} counter= 14sumtot= 1046901230280170892 --------------------------------------- ================== Deleting memory pools =================== Number of memory pools allocated: 12 of which, static: 0 diff --git a/examples/extended/electromagnetic/TestEm7/c12.mac b/examples/extended/electromagnetic/TestEm7/c12.mac index b0d875aaf1d..ca1235e30bf 100644 --- a/examples/extended/electromagnetic/TestEm7/c12.mac +++ b/examples/extended/electromagnetic/TestEm7/c12.mac @@ -27,18 +27,19 @@ #/testem/phys/addPhysics local # #/process/eLoss/UseICRU90 true +#/process/eLoss/StepFunctionIons 0.1 0.1 mm # # /run/initialize # -#/gun/particle ion -#/gun/ion 6 12 6 -#/gun/energy 2.4 GeV +/gun/particle ion +/gun/ion 6 12 6 +/gun/energy 2.4 GeV #/gun/energy 240 MeV # -/gun/particle ion -/gun/ion 18 40 18 -/gun/energy 4 GeV +#/gun/particle ion +#/gun/ion 18 40 18 +#/gun/energy 4 GeV #/gun/energy 400 MeV # # step limit diff --git a/examples/extended/electromagnetic/TestEm7/mu.mac b/examples/extended/electromagnetic/TestEm7/mu.mac new file mode 100644 index 00000000000..79477b3195d --- /dev/null +++ b/examples/extended/electromagnetic/TestEm7/mu.mac @@ -0,0 +1,50 @@ +# +# Macro file for TestEm7 +# (can be run in batch, without graphic) +# +/control/verbose 2 +/run/verbose 2 +/tracking/verbose 0 +# +/testem/det/setMat G4_Al +/testem/det/setSizeX 20 cm +/testem/det/setSizeYZ 20 cm +# +/testem/phys/addPhysics emstandard_opt0 +#/testem/phys/addPhysics emstandard_opt3 +#/testem/phys/addPhysics emstandard_opt4 +#/testem/phys/addPhysics ionGasModels +#/testem/phys/addPhysics local +# +#/process/eLoss/UseICRU90 true +# +# +#/process/em/binsPerDecade 20 +/run/initialize +# +/gun/particle mu- +/gun/momentumAmp 40 MeV +#/gun/energy 20 MeV +# +# step limit +/run/setCut 0.1 mm +/testem/stepMax 0.1 mm +# +#/run/printProgress 100 +# +#/analysis/setFileName c12 +#/analysis/h1/set 2 100 80 90 mm +#/analysis/h1/set 3 100 80 90 mm +# +/run/beamOn 1000 +# +#/control/shell mkdir physdata0k +#/run/particle/storePhysicsTable physdata0k +# +/testem/det/setMat G4_Cu +# +/run/beamOn 100 +# +#/control/shell mkdir physdata0m +#/run/particle/storePhysicsTable physdata0m +# diff --git a/examples/extended/electromagnetic/TestEm8/History b/examples/extended/electromagnetic/TestEm8/History index 495442359db..852625a107c 100644 --- a/examples/extended/electromagnetic/TestEm8/History +++ b/examples/extended/electromagnetic/TestEm8/History @@ -5,6 +5,9 @@ which **must** added in reverse chronological order (newest at the top). It must be used as a substitute for writing good git commit messages! +## 2023-04-25 V. Ivanchenko (testem8-V11-01-00) +- Coding guidelines: applied clang-format and clean-up headers + ## 2022-10-26 I. Hrivnacova (testem8-V11-00-01) - Coding guidelines: start data members with 'f' (StepMax) diff --git a/examples/extended/electromagnetic/TestEm8/TestEm8.out b/examples/extended/electromagnetic/TestEm8/TestEm8.out index f7084d6f3f0..3b3ef0de8bf 100644 --- a/examples/extended/electromagnetic/TestEm8/TestEm8.out +++ b/examples/extended/electromagnetic/TestEm8/TestEm8.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -555,7 +555,7 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.060000s Real=0.064706s Sys=0.000000s + User=0.050000s Real=0.063141s Sys=0.000000s RunAction: End of run actions are started 1 Nevt= 1000 Edep= 0.0167496 ==================================================== Beam Particle: proton diff --git a/examples/extended/electromagnetic/TestEm8/include/ActionInitialization.hh b/examples/extended/electromagnetic/TestEm8/include/ActionInitialization.hh index 937fcf1458d..752a1558ca1 100644 --- a/examples/extended/electromagnetic/TestEm8/include/ActionInitialization.hh +++ b/examples/extended/electromagnetic/TestEm8/include/ActionInitialization.hh @@ -23,9 +23,6 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// -// -// //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -35,22 +32,19 @@ #include "G4VUserActionInitialization.hh" - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -class ActionInitialization : public G4VUserActionInitialization -{ +class ActionInitialization : public G4VUserActionInitialization { public: - ActionInitialization(); - virtual ~ActionInitialization(); - - virtual void Build() const; + ~ActionInitialization() override = default; - virtual void BuildForMaster() const; + void Build() const override; -private: + void BuildForMaster() const override; + ActionInitialization &operator = (const ActionInitialization &right) = delete; + ActionInitialization(const ActionInitialization &) = delete; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm8/include/DetectorConstruction.hh b/examples/extended/electromagnetic/TestEm8/include/DetectorConstruction.hh index d85566ef412..8bb47cecf3a 100644 --- a/examples/extended/electromagnetic/TestEm8/include/DetectorConstruction.hh +++ b/examples/extended/electromagnetic/TestEm8/include/DetectorConstruction.hh @@ -36,7 +36,7 @@ // Modified: // //////////////////////////////////////////////////////////////////////// -// +// #ifndef DetectorConstruction_h #define DetectorConstruction_h 1 @@ -53,59 +53,57 @@ class G4VPhysicalVolume; class G4LogicalVolume; class G4ProductionCuts; -class DetectorConstruction : public G4VUserDetectorConstruction -{ +class DetectorConstruction : public G4VUserDetectorConstruction { public: - - DetectorConstruction(); - virtual ~DetectorConstruction(); - - virtual G4VPhysicalVolume* Construct(); - virtual void ConstructSDandField(); + explicit DetectorConstruction(); + ~DetectorConstruction() override; + + G4VPhysicalVolume *Construct() override; + void ConstructSDandField() override; - void SetGasMaterial (const G4String&); - void SetContainerMaterial (const G4String&); - void SetWorldMaterial(const G4String&); + void SetGasMaterial(const G4String &); + void SetContainerMaterial(const G4String &); + void SetWorldMaterial(const G4String &); - void SetGasThickness(G4double); - void SetGasRadius(G4double); - void SetContainerThickness(G4double); + void SetGasThickness(G4double); + void SetGasRadius(G4double); + void SetContainerThickness(G4double); void SetPairEnergy(G4double); - inline G4VPhysicalVolume* GetWorldPhysVol() const { return fPhysWorld; } + DetectorConstruction &operator = (const DetectorConstruction &right) = delete; + DetectorConstruction(const DetectorConstruction &) = delete; + + inline G4VPhysicalVolume *GetWorldPhysVol() const { return fPhysWorld; } inline void SetMaxChargedStep(G4double x) { fMaxStep = x; } inline G4double GetMaxChargedStep() const { return fMaxStep; } - -private: +private: void DefineMaterials(); void ChangeGeometry(); - G4Material* fGasMat; - G4double fGasThickness; - G4double fGasRadius; - G4double fMaxStep; + G4Material *fGasMat; + G4Material *fWindowMat; + G4Material *fWorldMaterial; - G4Material* fWindowMat; - G4double fWindowThick; + G4double fGasThickness; + G4double fGasRadius; + G4double fMaxStep; + G4double fWindowThick; - G4Material* fWorldMaterial; - G4Tubs* fSolidWorld; - G4Tubs* fSolidContainer; - G4Tubs* fSolidDetector; - - G4VPhysicalVolume* fPhysWorld; - G4LogicalVolume* fLogicWorld; - G4LogicalVolume* fLogicContainer; - G4LogicalVolume* fLogicDetector; + G4Tubs *fSolidWorld = nullptr; + G4Tubs *fSolidContainer = nullptr; + G4Tubs *fSolidDetector = nullptr; - DetectorMessenger* fDetectorMessenger; - G4ProductionCuts* fGasDetectorCuts; - G4Region* fRegGasDet; + G4VPhysicalVolume *fPhysWorld = nullptr; + G4LogicalVolume *fLogicWorld = nullptr; + G4LogicalVolume *fLogicContainer = nullptr; + G4LogicalVolume *fLogicDetector = nullptr; + DetectorMessenger *fDetectorMessenger; + G4ProductionCuts *fGasDetectorCuts; + G4Region *fRegGasDet = nullptr; }; #endif - diff --git a/examples/extended/electromagnetic/TestEm8/include/DetectorMessenger.hh b/examples/extended/electromagnetic/TestEm8/include/DetectorMessenger.hh index 740a23fa8b1..8945f33d07b 100644 --- a/examples/extended/electromagnetic/TestEm8/include/DetectorMessenger.hh +++ b/examples/extended/electromagnetic/TestEm8/include/DetectorMessenger.hh @@ -36,7 +36,7 @@ // Modified: // //////////////////////////////////////////////////////////////////////// -// +// //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... @@ -55,33 +55,32 @@ class G4UIcmdWithoutParameter; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -class DetectorMessenger: public G4UImessenger -{ +class DetectorMessenger : public G4UImessenger { public: + explicit DetectorMessenger(DetectorConstruction *); + ~DetectorMessenger() override; + + void SetNewValue(G4UIcommand *, G4String) override; + + DetectorMessenger &operator = (const DetectorMessenger &right) = delete; + DetectorMessenger(const DetectorMessenger &) = delete; - DetectorMessenger(DetectorConstruction* ); - virtual ~DetectorMessenger(); - - virtual void SetNewValue(G4UIcommand*, G4String); - private: + DetectorConstruction *fDetector; - DetectorConstruction* fDetector; - - G4UIdirectory* fDetDir; + G4UIdirectory *fDetDir; - G4UIcmdWithAString* fGasMaterCmd; - G4UIcmdWithADoubleAndUnit* fGasThickCmd; - G4UIcmdWithADoubleAndUnit* fGasRadCmd; + G4UIcmdWithAString *fGasMaterCmd; + G4UIcmdWithADoubleAndUnit *fGasThickCmd; + G4UIcmdWithADoubleAndUnit *fGasRadCmd; - G4UIcmdWithADoubleAndUnit* fWinThickCmd; - G4UIcmdWithAString* fWindowMaterCmd; + G4UIcmdWithADoubleAndUnit *fWinThickCmd; + G4UIcmdWithAString *fWindowMaterCmd; - G4UIcmdWithAString* fWorldMaterCmd; + G4UIcmdWithAString *fWorldMaterCmd; - G4UIcmdWithADoubleAndUnit* fIonCmd; - G4UIcmdWithADoubleAndUnit* fStepMaxCmd; + G4UIcmdWithADoubleAndUnit *fIonCmd; + G4UIcmdWithADoubleAndUnit *fStepMaxCmd; }; #endif - diff --git a/examples/extended/electromagnetic/TestEm8/include/EventAction.hh b/examples/extended/electromagnetic/TestEm8/include/EventAction.hh index 94de4168643..87498b74d86 100644 --- a/examples/extended/electromagnetic/TestEm8/include/EventAction.hh +++ b/examples/extended/electromagnetic/TestEm8/include/EventAction.hh @@ -50,15 +50,16 @@ class G4Event; class EventActionMessenger; -class EventAction : public G4UserEventAction -{ -public: // Without description - +class EventAction : public G4UserEventAction { +public: EventAction(); - virtual ~EventAction(); + ~EventAction() override = default; + + void BeginOfEventAction(const G4Event *) override; + void EndOfEventAction(const G4Event *) override; - virtual void BeginOfEventAction(const G4Event*); - virtual void EndOfEventAction(const G4Event*); + EventAction &operator = (const EventAction &right) = delete; + EventAction(const EventAction &) = delete; }; #endif diff --git a/examples/extended/electromagnetic/TestEm8/include/PhysicsList.hh b/examples/extended/electromagnetic/TestEm8/include/PhysicsList.hh index f83ff7bdbbd..4257a8d0de1 100644 --- a/examples/extended/electromagnetic/TestEm8/include/PhysicsList.hh +++ b/examples/extended/electromagnetic/TestEm8/include/PhysicsList.hh @@ -50,33 +50,32 @@ class DetectorConstruction; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -class PhysicsList: public G4VModularPhysicsList -{ +class PhysicsList : public G4VModularPhysicsList { public: + explicit PhysicsList(DetectorConstruction *); + ~PhysicsList() override; - PhysicsList(DetectorConstruction*); - virtual ~PhysicsList(); + void ConstructParticle() override; + void ConstructProcess() override; - virtual void ConstructParticle(); - - virtual void SetCuts(); - - void AddPhysicsList(const G4String& name); - virtual void ConstructProcess(); - - void AddStepMax(); + void SetCuts() override; -private: + void AddPhysicsList(const G4String &name); + + void AddStepMax(); + + PhysicsList &operator = (const PhysicsList &right) = delete; + PhysicsList(const PhysicsList &) = delete; - G4VPhysicsConstructor* fEmPhysicsList; - G4VPhysicsConstructor* fDecayPhysicsList; +private: + G4VPhysicsConstructor *fEmPhysicsList; + G4VPhysicsConstructor *fDecayPhysicsList; G4String fEmName; - - PhysicsListMessenger* fMessenger; - DetectorConstruction* fDetectorConstruction; + + PhysicsListMessenger *fMessenger; + DetectorConstruction *fDetectorConstruction; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #endif - diff --git a/examples/extended/electromagnetic/TestEm8/include/PhysicsListMessenger.hh b/examples/extended/electromagnetic/TestEm8/include/PhysicsListMessenger.hh index 4df01a04007..60197a27ccc 100644 --- a/examples/extended/electromagnetic/TestEm8/include/PhysicsListMessenger.hh +++ b/examples/extended/electromagnetic/TestEm8/include/PhysicsListMessenger.hh @@ -37,7 +37,7 @@ // Author: V.Ivanchenko 01.09.2010 // //---------------------------------------------------------------------------- -// +// //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -57,32 +57,30 @@ class G4UIcmdWithAnInteger; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -class PhysicsListMessenger: public G4UImessenger -{ +class PhysicsListMessenger : public G4UImessenger { public: - - PhysicsListMessenger(PhysicsList* ); - virtual ~PhysicsListMessenger(); - - virtual void SetNewValue(G4UIcommand*, G4String); - + explicit PhysicsListMessenger(PhysicsList *); + ~PhysicsListMessenger() override; + + void SetNewValue(G4UIcommand *, G4String) override; + + PhysicsListMessenger &operator = (const PhysicsListMessenger &right) = delete; + PhysicsListMessenger(const PhysicsListMessenger &) = delete; + private: - - PhysicsList* fPhysicsList; + PhysicsList *fPhysicsList; - G4UIdirectory* fPhysDir; - G4UIcmdWithADoubleAndUnit* fECmd; - G4UIcmdWithAnInteger* fEBCmd; - G4UIcmdWithAnInteger* fCBCmd; - G4UIcmdWithAnInteger* fCMCmd; - G4UIcmdWithAString* fListCmd; - G4UIcmdWithADoubleAndUnit* fADCCmd; - G4UIcmdWithADouble* fNorCmd; - G4UIcmdWithADoubleAndUnit* fSmCmd; - + G4UIdirectory *fPhysDir; + G4UIcmdWithADoubleAndUnit *fECmd; + G4UIcmdWithAnInteger *fEBCmd; + G4UIcmdWithAnInteger *fCBCmd; + G4UIcmdWithAnInteger *fCMCmd; + G4UIcmdWithAString *fListCmd; + G4UIcmdWithADoubleAndUnit *fADCCmd; + G4UIcmdWithADouble *fNorCmd; + G4UIcmdWithADoubleAndUnit *fSmCmd; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #endif - diff --git a/examples/extended/electromagnetic/TestEm8/include/PrimaryGeneratorAction.hh b/examples/extended/electromagnetic/TestEm8/include/PrimaryGeneratorAction.hh index fa39a520368..a9bf98dfcc9 100644 --- a/examples/extended/electromagnetic/TestEm8/include/PrimaryGeneratorAction.hh +++ b/examples/extended/electromagnetic/TestEm8/include/PrimaryGeneratorAction.hh @@ -54,26 +54,22 @@ class TestParameters; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction -{ +class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: - PrimaryGeneratorAction(); - virtual ~PrimaryGeneratorAction(); - - virtual void GeneratePrimaries(G4Event*); + ~PrimaryGeneratorAction() override; -private: + void GeneratePrimaries(G4Event *) override; - PrimaryGeneratorAction & operator=(const PrimaryGeneratorAction &right); - PrimaryGeneratorAction(const PrimaryGeneratorAction&); + PrimaryGeneratorAction &operator= + (const PrimaryGeneratorAction &right) = delete; + PrimaryGeneratorAction(const PrimaryGeneratorAction &) = delete; - G4ParticleGun* fParticleGun; - TestParameters* fParam; +private: + G4ParticleGun *fParticleGun; + TestParameters *fParam; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #endif - - diff --git a/examples/extended/electromagnetic/TestEm8/include/Run.hh b/examples/extended/electromagnetic/TestEm8/include/Run.hh index fe6b432c200..af7346fe014 100644 --- a/examples/extended/electromagnetic/TestEm8/include/Run.hh +++ b/examples/extended/electromagnetic/TestEm8/include/Run.hh @@ -46,14 +46,12 @@ class TestParameters; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -class Run : public G4Run -{ +class Run : public G4Run { public: - Run(); - virtual ~Run(); + ~Run() override = default; - virtual void Merge(const G4Run*); + void Merge(const G4Run *) override; void BeginOfRun(); void EndOfRun(); @@ -61,7 +59,10 @@ public: void BeginOfEvent(); void EndOfEvent(); - void AddEnergy(G4double edep, const G4Step*); + void AddEnergy(G4double edep, const G4Step *); + + Run &operator = (const Run &right) = delete; + Run(const Run &) = delete; inline void SetVerbose(G4int value); @@ -73,63 +74,42 @@ public: inline G4double GetMeanCluster() const; - inline const G4StatDouble* GetStat() const; + inline const G4StatDouble *GetStat() const; private: - - G4int fVerbose; - G4int fNbins; - G4double fStepGas; - G4double fMaxEnergy; - G4double fCluster; - G4double fTotStepGas; - G4double fTotCluster; - G4double fMeanCluster; + G4int fVerbose = 1; + G4int fNbins = 0; + G4double fStepGas = 0.0; + G4double fMaxEnergy = 0.0; + G4double fCluster = 0.0; + G4double fTotStepGas = 0.0; + G4double fTotCluster = 0.0; + G4double fMeanCluster = 0.0; G4double fFactorALICE; G4double fWidthALICE; - G4double fEvt; + G4double fEvt = 0.0; + G4double fTotEdep = 0.0; + G4double fOverflow = 0.0; - G4double fTotEdep; - G4StatDouble fEdep; - G4double fOverflow; + G4StatDouble fEdep = 325; G4DataVector fEgas; - G4ElectronIonPair* fElIonPair; - TestParameters* fParam; + G4ElectronIonPair *fElIonPair; + TestParameters *fParam; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline void Run::SetVerbose(G4int value) -{ - fVerbose = value; -} +inline void Run::SetVerbose(G4int value) { fVerbose = value; } -inline G4int Run::GetVerbose() const -{ - return fVerbose; -} +inline G4int Run::GetVerbose() const { return fVerbose; } -inline G4double Run::GetTotStepGas() const -{ - return fTotStepGas; -} +inline G4double Run::GetTotStepGas() const { return fTotStepGas; } -inline G4double Run::GetTotCluster() const -{ - return fTotCluster; -} +inline G4double Run::GetTotCluster() const { return fTotCluster; } -inline G4double Run::GetMeanCluster() const -{ - return fMeanCluster; -} +inline G4double Run::GetMeanCluster() const { return fMeanCluster; } -inline const G4StatDouble* Run::GetStat() const -{ - return &fEdep; -} +inline const G4StatDouble *Run::GetStat() const { return &fEdep; } #endif - - diff --git a/examples/extended/electromagnetic/TestEm8/include/RunAction.hh b/examples/extended/electromagnetic/TestEm8/include/RunAction.hh index 4f9f66133ff..8143b7f91fd 100644 --- a/examples/extended/electromagnetic/TestEm8/include/RunAction.hh +++ b/examples/extended/electromagnetic/TestEm8/include/RunAction.hh @@ -51,31 +51,29 @@ class Run; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -class RunAction : public G4UserRunAction -{ -public: - +class RunAction : public G4UserRunAction { +public: RunAction(); - virtual ~RunAction(); + ~RunAction() override = default; - virtual G4Run* GenerateRun(); + G4Run *GenerateRun() override; - virtual void BeginOfRunAction(const G4Run*); + void BeginOfRunAction(const G4Run *) override; // In this method histogramms are booked - virtual void EndOfRunAction(const G4Run*); + void EndOfRunAction(const G4Run *) override; // In this method bookHisto method is called in which histogramms are filled -private: + RunAction &operator = (const RunAction &right) = delete; + RunAction(const RunAction &) = delete; - // Book predefined histogramms +private: + // Book predefined histogramms void Book(); private: - - G4AnalysisManager* fAnalysisManager; - Run* fRun; + G4AnalysisManager *fAnalysisManager; + Run *fRun = nullptr; }; #endif - diff --git a/examples/extended/electromagnetic/TestEm8/include/StackingAction.hh b/examples/extended/electromagnetic/TestEm8/include/StackingAction.hh index 4a0127e5be5..c41582af55d 100644 --- a/examples/extended/electromagnetic/TestEm8/include/StackingAction.hh +++ b/examples/extended/electromagnetic/TestEm8/include/StackingAction.hh @@ -40,24 +40,25 @@ class StackingMessenger; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -class StackingAction : public G4UserStackingAction -{ +class StackingAction : public G4UserStackingAction { public: StackingAction(); - ~StackingAction(); - - inline void SetKillStatus(G4bool value) { fKillSecondary = value; }; - - virtual G4ClassificationOfNewTrack ClassifyNewTrack(const G4Track*); - -private: - - G4bool fKillSecondary; - StackingMessenger* fStackMessenger; + ~StackingAction() override; + + inline void SetKillStatus(G4bool value) { + fKillSecondary = value; + }; + + G4ClassificationOfNewTrack ClassifyNewTrack(const G4Track *) override; + StackingAction &operator = (const StackingAction &right) = delete; + StackingAction(const StackingAction &) = delete; + +private: + G4bool fKillSecondary = false; + StackingMessenger *fStackMessenger; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #endif - diff --git a/examples/extended/electromagnetic/TestEm8/include/StackingMessenger.hh b/examples/extended/electromagnetic/TestEm8/include/StackingMessenger.hh index 4350a9baadb..b142fe14a53 100644 --- a/examples/extended/electromagnetic/TestEm8/include/StackingMessenger.hh +++ b/examples/extended/electromagnetic/TestEm8/include/StackingMessenger.hh @@ -41,18 +41,19 @@ class G4UIcmdWithABool; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -class StackingMessenger: public G4UImessenger -{ +class StackingMessenger : public G4UImessenger { public: - StackingMessenger(StackingAction*); - ~StackingMessenger(); - - virtual void SetNewValue(G4UIcommand*, G4String); - -private: + explicit StackingMessenger(StackingAction *); + ~StackingMessenger() override; + + void SetNewValue(G4UIcommand *, G4String) override; - StackingAction* fStackAction; - G4UIcmdWithABool* fKillCmd; + StackingMessenger &operator = (const StackingMessenger &right) = delete; + StackingMessenger(const StackingMessenger &) = delete; + +private: + StackingAction *fStackAction; + G4UIcmdWithABool *fKillCmd; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm8/include/StepMax.hh b/examples/extended/electromagnetic/TestEm8/include/StepMax.hh index a7fec811525..82a344377c4 100644 --- a/examples/extended/electromagnetic/TestEm8/include/StepMax.hh +++ b/examples/extended/electromagnetic/TestEm8/include/StepMax.hh @@ -40,38 +40,38 @@ class G4VPhysicalVolume; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -class StepMax : public G4VEmProcess -{ +class StepMax : public G4VEmProcess { public: + explicit StepMax(DetectorConstruction *ptr, + const G4String &processName = "UserMaxStep"); + ~StepMax() override = default; - StepMax(DetectorConstruction* ptr, - const G4String& processName = "UserMaxStep"); - virtual ~StepMax(); + G4bool IsApplicable(const G4ParticleDefinition &) override; - virtual G4bool IsApplicable(const G4ParticleDefinition&); + void PreparePhysicsTable(const G4ParticleDefinition &) override; - virtual void PreparePhysicsTable(const G4ParticleDefinition&); + void BuildPhysicsTable(const G4ParticleDefinition &) override; - virtual void BuildPhysicsTable(const G4ParticleDefinition&); + void InitialiseProcess(const G4ParticleDefinition *) override; - virtual void InitialiseProcess(const G4ParticleDefinition*); + G4double + PostStepGetPhysicalInteractionLength(const G4Track &track, + G4double previousStep, + G4ForceCondition *cond) override; - virtual G4double PostStepGetPhysicalInteractionLength(const G4Track& track, - G4double previousStep, - G4ForceCondition* cond); + G4VParticleChange *PostStepDoIt(const G4Track &, const G4Step &) override; - virtual G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&); + StepMax &operator = (const StepMax &right) = delete; + StepMax(const StepMax &) = delete; private: + G4double fMaxChargedStep = DBL_MAX; - G4double fMaxChargedStep; - - DetectorConstruction* fDetector; - G4VPhysicalVolume* fWorld; - G4bool fIsInitialised; + DetectorConstruction *fDetector; + G4VPhysicalVolume *fWorld = nullptr; + G4bool fIsInitialised = false; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #endif - diff --git a/examples/extended/electromagnetic/TestEm8/include/TargetSD.hh b/examples/extended/electromagnetic/TestEm8/include/TargetSD.hh index e0a1ea40955..3121cdc5ba3 100644 --- a/examples/extended/electromagnetic/TestEm8/include/TargetSD.hh +++ b/examples/extended/electromagnetic/TestEm8/include/TargetSD.hh @@ -36,7 +36,7 @@ // Modified: // //////////////////////////////////////////////////////////////////////// -// +// #ifndef TargetSD_h #define TargetSD_h 1 @@ -51,26 +51,24 @@ class G4TouchableHistory; class G4HCofThisEvent; class Run; -class TargetSD : public G4VSensitiveDetector -{ -public: // Without description +class TargetSD : public G4VSensitiveDetector { +public: + explicit TargetSD(const G4String &); + ~TargetSD() override = default; - TargetSD(const G4String&); - virtual ~TargetSD(); + void Initialize(G4HCofThisEvent *) override; + G4bool ProcessHits(G4Step *, G4TouchableHistory *) override; + void EndOfEvent(G4HCofThisEvent *) override; + void clear() override; + void PrintAll() override; - virtual void Initialize(G4HCofThisEvent*); - virtual G4bool ProcessHits(G4Step*,G4TouchableHistory*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void clear(); - virtual void PrintAll(); + TargetSD &operator = (const TargetSD &right) = delete; + TargetSD(const TargetSD &) = delete; private: - - Run* fRun; - + Run *fRun = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... #endif - diff --git a/examples/extended/electromagnetic/TestEm8/include/TestParameters.hh b/examples/extended/electromagnetic/TestEm8/include/TestParameters.hh index 3458a74d34d..8dd1f97c4c9 100644 --- a/examples/extended/electromagnetic/TestEm8/include/TestParameters.hh +++ b/examples/extended/electromagnetic/TestEm8/include/TestParameters.hh @@ -53,21 +53,18 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -class TestParameters -{ +class TestParameters { public: // With description - static TestParameters* GetPointer(); + static TestParameters *GetPointer(); private: - TestParameters(); public: // Without description - - ~TestParameters(); + ~TestParameters() = default; void SetMaxEnergy(G4double value); @@ -105,26 +102,25 @@ public: // Without description G4double GetBeamEnergy() const; - void SetBeamParticle(const G4ParticleDefinition*); + void SetBeamParticle(const G4ParticleDefinition *); - const G4ParticleDefinition* GetBeamParticle() const; + const G4ParticleDefinition *GetBeamParticle() const; private: - - static TestParameters* fManager; + static TestParameters *fManager; G4double fMaxEnergy; - G4double fFactorALICE; - G4double fNormFactor; - G4double fEnergySmear; - G4double fPositionZ; - G4double fBeamEnergy; + G4double fFactorALICE = 325; + G4double fNormFactor = 1.0; + G4double fEnergySmear = 0.0; + G4double fPositionZ = 0.0; + G4double fBeamEnergy = 0.0; - G4int fBinsE; - G4int fBinsCluster; - G4int fMaxCluster; + G4int fBinsE = 100; + G4int fBinsCluster = 1; + G4int fMaxCluster = 1500; - const G4ParticleDefinition* fParticle; + const G4ParticleDefinition *fParticle = nullptr; }; #endif diff --git a/examples/extended/electromagnetic/TestEm8/src/ActionInitialization.cc b/examples/extended/electromagnetic/TestEm8/src/ActionInitialization.cc index 6942122780a..8e507b9e9d3 100644 --- a/examples/extended/electromagnetic/TestEm8/src/ActionInitialization.cc +++ b/examples/extended/electromagnetic/TestEm8/src/ActionInitialization.cc @@ -25,7 +25,7 @@ // // // -// +// //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... #include "ActionInitialization.hh" @@ -37,18 +37,11 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ActionInitialization::ActionInitialization() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -ActionInitialization::~ActionInitialization() -{} +ActionInitialization::ActionInitialization() {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void ActionInitialization::Build() const -{ +void ActionInitialization::Build() const { SetUserAction(new PrimaryGeneratorAction()); SetUserAction(new RunAction()); @@ -58,8 +51,7 @@ void ActionInitialization::Build() const //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void ActionInitialization::BuildForMaster() const -{ +void ActionInitialization::BuildForMaster() const { SetUserAction(new RunAction()); } diff --git a/examples/extended/electromagnetic/TestEm8/src/DetectorConstruction.cc b/examples/extended/electromagnetic/TestEm8/src/DetectorConstruction.cc index 320a2dd59e5..7e4fb7f64bf 100644 --- a/examples/extended/electromagnetic/TestEm8/src/DetectorConstruction.cc +++ b/examples/extended/electromagnetic/TestEm8/src/DetectorConstruction.cc @@ -36,7 +36,7 @@ // Modified: // //////////////////////////////////////////////////////////////////////// -// +// //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "DetectorConstruction.hh" @@ -74,266 +74,246 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -DetectorConstruction::DetectorConstruction() - : G4VUserDetectorConstruction(), - fGasMat(nullptr), fWindowMat(nullptr), fWorldMaterial(nullptr), - fSolidWorld(nullptr), fSolidContainer(nullptr), fSolidDetector(nullptr), - fPhysWorld(nullptr), fLogicWorld(nullptr), fLogicContainer(nullptr), - fLogicDetector(nullptr),fRegGasDet(nullptr) -{ - fGasThickness = 23.0*mm; - fGasRadius = 10.*cm; - fMaxStep = DBL_MAX; +DetectorConstruction::DetectorConstruction() { + fGasThickness = 23.0 * mm; + fGasRadius = 10. * cm; + fMaxStep = DBL_MAX; - fWindowThick = 51.0*micrometer; + fWindowThick = 51.0 * micrometer; DefineMaterials(); fDetectorMessenger = new DetectorMessenger(this); - G4double cut = 0.7*mm; - fGasDetectorCuts = new G4ProductionCuts(); - fGasDetectorCuts->SetProductionCut(cut,"gamma"); - fGasDetectorCuts->SetProductionCut(cut,"e-"); - fGasDetectorCuts->SetProductionCut(cut,"e+"); - fGasDetectorCuts->SetProductionCut(cut,"proton"); + G4double cut = 0.7 * mm; + fGasDetectorCuts = new G4ProductionCuts(); + fGasDetectorCuts->SetProductionCut(cut, "gamma"); + fGasDetectorCuts->SetProductionCut(cut, "e-"); + fGasDetectorCuts->SetProductionCut(cut, "e+"); + fGasDetectorCuts->SetProductionCut(cut, "proton"); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -DetectorConstruction::~DetectorConstruction() -{ - delete fDetectorMessenger; -} +DetectorConstruction::~DetectorConstruction() { delete fDetectorMessenger; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void DetectorConstruction::DefineMaterials() -{ - //This function illustrates the possible ways to define materials - G4String name, symbol ; - G4double density; - G4int nel; - G4int ncomponents; +void DetectorConstruction::DefineMaterials() { + // This function illustrates the possible ways to define materials + G4String name, symbol; + G4double density; + G4int nel; + G4int ncomponents; G4double fractionmass; - G4NistManager* manager = G4NistManager::Instance(); + G4NistManager *manager = G4NistManager::Instance(); // // define Elements // - G4Element* elH = manager->FindOrBuildElement(1); - G4Element* elC = manager->FindOrBuildElement(6); - G4Element* elO = manager->FindOrBuildElement(8); - G4Element* elF = manager->FindOrBuildElement(9); - G4Element* elNe = manager->FindOrBuildElement(10); - G4Element* elXe = manager->FindOrBuildElement(54); + G4Element *elH = manager->FindOrBuildElement(1); + G4Element *elC = manager->FindOrBuildElement(6); + G4Element *elO = manager->FindOrBuildElement(8); + G4Element *elF = manager->FindOrBuildElement(9); + G4Element *elNe = manager->FindOrBuildElement(10); + G4Element *elXe = manager->FindOrBuildElement(54); + // + // simple gases at STP conditions // - // simple gases at STP conditions + G4Material *Argon = manager->FindOrBuildMaterial("G4_Ar"); + G4Material *Kr = manager->FindOrBuildMaterial("G4_Kr"); + G4Material *Xe = manager->FindOrBuildMaterial("G4_Xe"); // - G4Material* Argon = manager->FindOrBuildMaterial("G4_Ar"); - G4Material* Kr = manager->FindOrBuildMaterial("G4_Kr"); - G4Material* Xe = manager->FindOrBuildMaterial("G4_Xe"); - // // gases at STP conditions // - G4Material* CarbonDioxide = - manager->FindOrBuildMaterial("G4_CARBON_DIOXIDE"); - G4Material* Mylar = manager->FindOrBuildMaterial("G4_MYLAR"); - G4Material* Methane= manager->FindOrBuildMaterial("G4_METHANE"); - G4Material* Propane= manager->FindOrBuildMaterial("G4_PROPANE"); + G4Material *CarbonDioxide = manager->FindOrBuildMaterial("G4_CARBON_DIOXIDE"); + G4Material *Mylar = manager->FindOrBuildMaterial("G4_MYLAR"); + G4Material *Methane = manager->FindOrBuildMaterial("G4_METHANE"); + G4Material *Propane = manager->FindOrBuildMaterial("G4_PROPANE"); // propane at 10 atmospheres - manager->ConstructNewGasMaterial("Propane10","G4_PROPANE", - NTP_Temperature,10.*atmosphere); + manager->ConstructNewGasMaterial("Propane10", "G4_PROPANE", NTP_Temperature, + 10. * atmosphere); - G4Material* empty = manager->FindOrBuildMaterial("G4_Galactic"); + G4Material *empty = manager->FindOrBuildMaterial("G4_Galactic"); // 93% Kr + 7% CH4, STP - density = 3.491*mg/cm3 ; - G4Material* Kr7CH4 = - new G4Material(name="Kr7CH4" , density, - ncomponents=2); - Kr7CH4->AddMaterial( Kr, fractionmass = 0.986 ) ; - Kr7CH4->AddMaterial( Methane, fractionmass = 0.014 ) ; - - G4double TRT_Xe_density = 5.485*mg/cm3; - G4Material* TRT_Xe = - new G4Material(name="TRT_Xe", TRT_Xe_density, nel=1, - kStateGas,293.15*kelvin,1.*atmosphere); - TRT_Xe->AddElement(elXe,1); - - G4double TRT_CO2_density = 1.842*mg/cm3; - G4Material* TRT_CO2 = - new G4Material(name="TRT_CO2", TRT_CO2_density, nel=2, - kStateGas,293.15*kelvin,1.*atmosphere); - TRT_CO2->AddElement(elC,1); - TRT_CO2->AddElement(elO,2); + density = 3.491 * mg / cm3; + G4Material *Kr7CH4 = + new G4Material(name = "Kr7CH4", density, ncomponents = 2); + Kr7CH4->AddMaterial(Kr, fractionmass = 0.986); + Kr7CH4->AddMaterial(Methane, fractionmass = 0.014); + + G4double TRT_Xe_density = 5.485 * mg / cm3; + G4Material *TRT_Xe = + new G4Material(name = "TRT_Xe", TRT_Xe_density, nel = 1, kStateGas, + 293.15 * kelvin, 1. * atmosphere); + TRT_Xe->AddElement(elXe, 1); + + G4double TRT_CO2_density = 1.842 * mg / cm3; + G4Material *TRT_CO2 = + new G4Material(name = "TRT_CO2", TRT_CO2_density, nel = 2, kStateGas, + 293.15 * kelvin, 1. * atmosphere); + TRT_CO2->AddElement(elC, 1); + TRT_CO2->AddElement(elO, 2); // check alternative constructor - std::vector trtatom = {"C","O"}; - std::vector trtnum = {1, 2}; - manager->ConstructNewMaterial("TRT_CO2p",trtatom,trtnum,TRT_CO2_density, - true,kStateGas,NTP_Temperature,atmosphere); - - G4double TRT_CF4_density = 3.9*mg/cm3; - G4Material* TRT_CF4 = - new G4Material(name="TRT_CF4", TRT_CF4_density, nel=2, - kStateGas,293.15*kelvin,1.*atmosphere); - TRT_CF4->AddElement(elC,1); - TRT_CF4->AddElement(elF,4); + std::vector trtatom = { "C", "O" }; + std::vector trtnum = { 1, 2 }; + manager->ConstructNewMaterial("TRT_CO2p", trtatom, trtnum, TRT_CO2_density, + true, kStateGas, NTP_Temperature, atmosphere); + + G4double TRT_CF4_density = 3.9 * mg / cm3; + G4Material *TRT_CF4 = + new G4Material(name = "TRT_CF4", TRT_CF4_density, nel = 2, kStateGas, + 293.15 * kelvin, 1. * atmosphere); + TRT_CF4->AddElement(elC, 1); + TRT_CF4->AddElement(elF, 4); // ATLAS TRT straw tube gas mixture (20 C, 1 atm) - G4double XeCO2CF4_density = 4.76*mg/cm3; - G4Material* XeCO2CF4 = - new G4Material(name="XeCO2CF4", XeCO2CF4_density, - ncomponents=3, - kStateGas,293.15*kelvin,1.*atmosphere); - XeCO2CF4->AddMaterial(TRT_Xe,0.807); - XeCO2CF4->AddMaterial(TRT_CO2,0.039); - XeCO2CF4->AddMaterial(TRT_CF4,0.154); + G4double XeCO2CF4_density = 4.76 * mg / cm3; + G4Material *XeCO2CF4 = + new G4Material(name = "XeCO2CF4", XeCO2CF4_density, ncomponents = 3, + kStateGas, 293.15 * kelvin, 1. * atmosphere); + XeCO2CF4->AddMaterial(TRT_Xe, 0.807); + XeCO2CF4->AddMaterial(TRT_CO2, 0.039); + XeCO2CF4->AddMaterial(TRT_CF4, 0.154); // C3H8,20 C, 2 atm - density = 3.758*mg/cm3; - G4Material* C3H8 = new G4Material(name="C3H8",density,nel=2, - kStateGas,293.15*kelvin,2.*atmosphere); - C3H8->AddElement(elC,3); - C3H8->AddElement(elH,8); + density = 3.758 * mg / cm3; + G4Material *C3H8 = new G4Material(name = "C3H8", density, nel = 2, kStateGas, + 293.15 * kelvin, 2. * atmosphere); + C3H8->AddElement(elC, 3); + C3H8->AddElement(elH, 8); // The same material via different constructor - std::vector elmname = {"C","H"}; - std::vector atomnum = {3, 8}; - manager->ConstructNewIdealGasMaterial("C3H8p",elmname,atomnum,true, - 293.15*kelvin,2.*atmosphere); - - // 87.5% Xe + 7.5% CH4 + 5% C3H8, 20 C, 1. atm - density = 4.9196*mg/cm3 ; - G4Material* XeCH4C3H8 = - new G4Material(name="XeCH4C3H8" , - density, ncomponents=3, - kStateGas,NTP_Temperature,1.*atmosphere); - XeCH4C3H8->AddMaterial( Xe, fractionmass = 0.971); - XeCH4C3H8->AddMaterial( Methane, fractionmass = 0.010); - XeCH4C3H8->AddMaterial( Propane, fractionmass = 0.019); + std::vector elmname = { "C", "H" }; + std::vector atomnum = { 3, 8 }; + manager->ConstructNewIdealGasMaterial("C3H8p", elmname, atomnum, true, + 293.15 * kelvin, 2. * atmosphere); + + // 87.5% Xe + 7.5% CH4 + 5% C3H8, 20 C, 1. atm + density = 4.9196 * mg / cm3; + G4Material *XeCH4C3H8 = + new G4Material(name = "XeCH4C3H8", density, ncomponents = 3, kStateGas, + NTP_Temperature, 1. * atmosphere); + XeCH4C3H8->AddMaterial(Xe, fractionmass = 0.971); + XeCH4C3H8->AddMaterial(Methane, fractionmass = 0.010); + XeCH4C3H8->AddMaterial(Propane, fractionmass = 0.019); // 93% Ar + 7% CH4, STP - density = 1.709*mg/cm3 ; - G4Material* Ar7CH4 = - new G4Material(name="Ar7CH4", density, ncomponents=2, - kStateGas,STP_Temperature,STP_Pressure); - Ar7CH4->AddMaterial( Argon, fractionmass = 0.971 ) ; - Ar7CH4->AddMaterial( Methane, fractionmass = 0.029 ) ; + density = 1.709 * mg / cm3; + G4Material *Ar7CH4 = new G4Material(name = "Ar7CH4", density, ncomponents = 2, + kStateGas, STP_Temperature, STP_Pressure); + Ar7CH4->AddMaterial(Argon, fractionmass = 0.971); + Ar7CH4->AddMaterial(Methane, fractionmass = 0.029); // 80% Ar + 20% CO2, STP - density = 1.8223*mg/cm3 ; - G4Material* Ar_80CO2_20 = - new G4Material(name="ArCO2" , density, ncomponents=2, - kStateGas,STP_Temperature,STP_Pressure); - Ar_80CO2_20->AddMaterial( Argon, fractionmass = 0.783 ) ; - Ar_80CO2_20->AddMaterial( CarbonDioxide, fractionmass = 0.217 ) ; + density = 1.8223 * mg / cm3; + G4Material *Ar_80CO2_20 = + new G4Material(name = "ArCO2", density, ncomponents = 2, kStateGas, + STP_Temperature, STP_Pressure); + Ar_80CO2_20->AddMaterial(Argon, fractionmass = 0.783); + Ar_80CO2_20->AddMaterial(CarbonDioxide, fractionmass = 0.217); // 80% Xe + 20% CO2, STP - density = 5.0818*mg/cm3 ; - G4Material* Xe20CO2 = - new G4Material(name="Xe20CO2", density, ncomponents=2, - kStateGas,STP_Temperature,STP_Pressure); - Xe20CO2->AddMaterial( Xe, fractionmass = 0.922 ) ; - Xe20CO2->AddMaterial( CarbonDioxide, fractionmass = 0.078 ) ; + density = 5.0818 * mg / cm3; + G4Material *Xe20CO2 = + new G4Material(name = "Xe20CO2", density, ncomponents = 2, kStateGas, + STP_Temperature, STP_Pressure); + Xe20CO2->AddMaterial(Xe, fractionmass = 0.922); + Xe20CO2->AddMaterial(CarbonDioxide, fractionmass = 0.078); // 80% Kr + 20% CO2, STP - density = 3.601*mg/cm3 ; - G4Material* Kr20CO2 = - new G4Material(name="Kr20CO2", density, ncomponents=2, - kStateGas,STP_Temperature,STP_Pressure); - Kr20CO2->AddMaterial( Kr, fractionmass = 0.89 ) ; - Kr20CO2->AddMaterial( CarbonDioxide, fractionmass = 0.11 ) ; + density = 3.601 * mg / cm3; + G4Material *Kr20CO2 = + new G4Material(name = "Kr20CO2", density, ncomponents = 2, kStateGas, + STP_Temperature, STP_Pressure); + Kr20CO2->AddMaterial(Kr, fractionmass = 0.89); + Kr20CO2->AddMaterial(CarbonDioxide, fractionmass = 0.11); // ALICE mixture TPC_Ne-CO2-2 - density = 0.939*mg/cm3 ; - G4Material* NeCO2 = - new G4Material(name="TPC_Ne-CO2-2", density, ncomponents=3, - kStateGas,NTP_Temperature,1.*atmosphere); - NeCO2->AddElement( elNe, fractionmass = 0.8039 ) ; - NeCO2->AddElement( elO, fractionmass = 0.1426 ) ; - NeCO2->AddElement( elC, fractionmass = 0.0535 ) ; + density = 0.939 * mg / cm3; + G4Material *NeCO2 = + new G4Material(name = "TPC_Ne-CO2-2", density, ncomponents = 3, kStateGas, + NTP_Temperature, 1. * atmosphere); + NeCO2->AddElement(elNe, fractionmass = 0.8039); + NeCO2->AddElement(elO, fractionmass = 0.1426); + NeCO2->AddElement(elC, fractionmass = 0.0535); // check alternative constructor - std::vector neatom = {"Ne","O","C"}; - std::vector nefr = {0.8039, 0.1426, 0.0536}; - manager->ConstructNewMaterial("TPC_Ne-CO2-2p",neatom,nefr,density,true, - kStateGas,NTP_Temperature,atmosphere); + std::vector neatom = { "Ne", "O", "C" }; + std::vector nefr = { 0.8039, 0.1426, 0.0536 }; + manager->ConstructNewMaterial("TPC_Ne-CO2-2p", neatom, nefr, density, true, + kStateGas, NTP_Temperature, atmosphere); // ALICE TRD mixure 85% Xe + 15% CO2 NTP - density = 4.9389*mg/cm3 ; - G4Material* Xe15CO2 = - new G4Material(name="Xe15CO2", density, ncomponents=2, - kStateGas,NTP_Temperature,atmosphere); - Xe15CO2->AddMaterial( Xe, fractionmass = 0.944 ); - Xe15CO2->AddMaterial( CarbonDioxide, fractionmass = 0.056 ); - + density = 4.9389 * mg / cm3; + G4Material *Xe15CO2 = + new G4Material(name = "Xe15CO2", density, ncomponents = 2, kStateGas, + NTP_Temperature, atmosphere); + Xe15CO2->AddMaterial(Xe, fractionmass = 0.944); + Xe15CO2->AddMaterial(CarbonDioxide, fractionmass = 0.056); + fGasMat = XeCH4C3H8; fWindowMat = Mylar; - fWorldMaterial = empty; + fWorldMaterial = empty; G4cout << *(G4Material::GetMaterialTable()) << G4endl; - } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4VPhysicalVolume* DetectorConstruction::Construct() -{ - G4double contThick = fWindowThick*2 + fGasThickness; - G4double contR = fWindowThick*2 + fGasRadius; - G4double worldSizeZ = contThick*1.2; - G4double worldSizeR = contR*1.2; +G4VPhysicalVolume *DetectorConstruction::Construct() { + if(nullptr != fPhysWorld) { return fPhysWorld; } - TestParameters::GetPointer()->SetPositionZ(-0.55*contThick); + G4double contThick = fWindowThick * 2 + fGasThickness; + G4double contR = fWindowThick * 2 + fGasRadius; + + G4double worldSizeZ = contThick * 1.2; + G4double worldSizeR = contR * 1.2; + + TestParameters::GetPointer()->SetPositionZ(-0.55 * contThick); // Printout parameters - G4cout << "\n The WORLD is made of " - << worldSizeZ/mm << "mm of " << fWorldMaterial->GetName() ; - G4cout << ", the transverse size (R) of the world is " << worldSizeR/mm + G4cout << "\n The WORLD is made of " << worldSizeZ / mm << "mm of " + << fWorldMaterial->GetName(); + G4cout << ", the transverse size (R) of the world is " << worldSizeR / mm << " mm. " << G4endl; - G4cout << " The CONTAINER is made of " - << fWindowThick/mm << "mm of " << fWindowMat->GetName() << G4endl; - G4cout << " The TARGET is made of " - << fGasThickness/mm << "mm of " << fGasMat->GetName() ; - G4cout << ", the transverse size (R) is " << fGasRadius/mm << " mm. " + G4cout << " The CONTAINER is made of " << fWindowThick / mm << "mm of " + << fWindowMat->GetName() << G4endl; + G4cout << " The TARGET is made of " << fGasThickness / mm << "mm of " + << fGasMat->GetName(); + G4cout << ", the transverse size (R) is " << fGasRadius / mm << " mm. " << G4endl; G4cout << G4endl; - + // World - fSolidWorld = - new G4Tubs("World",0.,worldSizeR,worldSizeZ/2.,0.,CLHEP::twopi); - + fSolidWorld = + new G4Tubs("World", 0., worldSizeR, worldSizeZ / 2., 0., CLHEP::twopi); + fLogicWorld = new G4LogicalVolume(fSolidWorld, fWorldMaterial, "World"); - - fPhysWorld = new G4PVPlacement(0, - G4ThreeVector(0.,0.,0.), - "World", - fLogicWorld, - 0, - false, - 0); + + fPhysWorld = new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), "World", + fLogicWorld, 0, false, 0); // Window - fSolidContainer = new G4Tubs("Absorber", - 0.,contR,contThick/2.,0.,CLHEP::twopi); + fSolidContainer = + new G4Tubs("Absorber", 0., contR, contThick / 2., 0., CLHEP::twopi); - fLogicContainer = new G4LogicalVolume(fSolidContainer, fWindowMat, "Window"); + fLogicContainer = new G4LogicalVolume(fSolidContainer, fWindowMat, "Window"); + + G4PVPlacement *PhysWind = + new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), "Window", fLogicContainer, + fPhysWorld, false, 0); - G4PVPlacement* PhysWind = new G4PVPlacement(0, G4ThreeVector(0.,0.,0.), - "Window", fLogicContainer, - fPhysWorld, false, 0); - // Detector volume - fSolidDetector = new G4Tubs("Gas", 0., fGasRadius, fGasThickness/2., - 0., CLHEP::twopi); + fSolidDetector = + new G4Tubs("Gas", 0., fGasRadius, fGasThickness / 2., 0., CLHEP::twopi); - fLogicDetector = new G4LogicalVolume(fSolidDetector, fGasMat, "Gas"); + fLogicDetector = new G4LogicalVolume(fSolidDetector, fGasMat, "Gas"); - new G4PVPlacement(0, G4ThreeVector(0.,0.,0.), "Gas", fLogicDetector, + new G4PVPlacement(0, G4ThreeVector(0., 0., 0.), "Gas", fLogicDetector, PhysWind, false, 0); // defined gas detector region @@ -343,41 +323,41 @@ G4VPhysicalVolume* DetectorConstruction::Construct() // visualisation fLogicWorld->SetVisAttributes(G4VisAttributes::GetInvisible()); - G4VisAttributes* color1 = new G4VisAttributes(G4Colour(0.3, 0.3, 0.3)); + G4VisAttributes *color1 = new G4VisAttributes(G4Colour(0.3, 0.3, 0.3)); fLogicContainer->SetVisAttributes(color1); - G4VisAttributes* color2 = new G4VisAttributes(G4Colour(0.0, 0.3, 0.7)); + G4VisAttributes *color2 = new G4VisAttributes(G4Colour(0.0, 0.3, 0.7)); fLogicDetector->SetVisAttributes(color2); - if(0.0 == fGasMat->GetIonisation()->GetMeanEnergyPerIonPair()) { - SetPairEnergy(20*eV); + if (0.0 == fGasMat->GetIonisation()->GetMeanEnergyPerIonPair()) { + SetPairEnergy(20 * eV); } return fPhysWorld; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void DetectorConstruction::ConstructSDandField() -{ +void DetectorConstruction::ConstructSDandField() { auto sd = new TargetSD("GasSD"); G4SDManager::GetSDMpointer()->AddNewDetector(sd); - SetSensitiveDetector(fLogicDetector, sd); + SetSensitiveDetector(fLogicDetector, sd); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void DetectorConstruction::SetGasMaterial(const G4String& name) -{ +void DetectorConstruction::SetGasMaterial(const G4String &name) { // get the pointer to the existing material - G4Material* mat = G4Material::GetMaterial(name, false); + G4Material *mat = G4Material::GetMaterial(name, false); // create the material by its name - if(!mat) { mat = G4NistManager::Instance()->FindOrBuildMaterial(name); } + if (!mat) { + mat = G4NistManager::Instance()->FindOrBuildMaterial(name); + } if (mat && mat != fGasMat) { G4cout << "### New target material: " << mat->GetName() << G4endl; fGasMat = mat; - if(fLogicDetector) { - fLogicDetector->SetMaterial(mat); + if (fLogicDetector) { + fLogicDetector->SetMaterial(mat); G4RunManager::GetRunManager()->PhysicsHasBeenModified(); } } @@ -385,19 +365,20 @@ void DetectorConstruction::SetGasMaterial(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void DetectorConstruction::SetContainerMaterial(const G4String& name) -{ +void DetectorConstruction::SetContainerMaterial(const G4String &name) { // get the pointer to the existing material - G4Material* mat = G4Material::GetMaterial(name, false); + G4Material *mat = G4Material::GetMaterial(name, false); // create the material by its name - if(!mat) { mat = G4NistManager::Instance()->FindOrBuildMaterial(name); } + if (!mat) { + mat = G4NistManager::Instance()->FindOrBuildMaterial(name); + } if (mat && mat != fWindowMat) { G4cout << "### New material for container: " << mat->GetName() << G4endl; fWindowMat = mat; - if(fLogicContainer) { - fLogicContainer->SetMaterial(mat); + if (fLogicContainer) { + fLogicContainer->SetMaterial(mat); G4RunManager::GetRunManager()->PhysicsHasBeenModified(); } } @@ -405,19 +386,20 @@ void DetectorConstruction::SetContainerMaterial(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void DetectorConstruction::SetWorldMaterial(const G4String& name) -{ +void DetectorConstruction::SetWorldMaterial(const G4String &name) { // get the pointer to the existing material - G4Material* mat = G4Material::GetMaterial(name, false); + G4Material *mat = G4Material::GetMaterial(name, false); // create the material by its name - if(!mat) { mat = G4NistManager::Instance()->FindOrBuildMaterial(name); } + if (!mat) { + mat = G4NistManager::Instance()->FindOrBuildMaterial(name); + } if (mat && mat != fWorldMaterial) { G4cout << "### New World material: " << mat->GetName() << G4endl; fWorldMaterial = mat; - if(fLogicWorld) { - fLogicWorld->SetMaterial(mat); + if (fLogicWorld) { + fLogicWorld->SetMaterial(mat); G4RunManager::GetRunManager()->PhysicsHasBeenModified(); } } @@ -425,57 +407,61 @@ void DetectorConstruction::SetWorldMaterial(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void DetectorConstruction::SetGasThickness(G4double val) -{ +void DetectorConstruction::SetGasThickness(G4double val) { + if(val <= 0.0) { return; } fGasThickness = val; - if(fPhysWorld) { ChangeGeometry(); } -} + if (nullptr != fPhysWorld) { + ChangeGeometry(); + } +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void DetectorConstruction::SetGasRadius(G4double val) -{ +void DetectorConstruction::SetGasRadius(G4double val) { + if(val <= 0.0) { return; } fGasRadius = val; - if(fPhysWorld) { ChangeGeometry(); } -} + if (nullptr != fPhysWorld) { + ChangeGeometry(); + } +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void DetectorConstruction::SetContainerThickness(G4double val) -{ +void DetectorConstruction::SetContainerThickness(G4double val) { + if(val <= 0.0) { return; } fWindowThick = val; - if(fPhysWorld) { ChangeGeometry(); } -} + if (nullptr != fPhysWorld) { + ChangeGeometry(); + } +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void DetectorConstruction::SetPairEnergy(G4double val) -{ - if(val > 0.0) { +void DetectorConstruction::SetPairEnergy(G4double val) { + if (val > 0.0) { fGasMat->GetIonisation()->SetMeanEnergyPerIonPair(val); } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void DetectorConstruction::ChangeGeometry() -{ - G4double contThick = fWindowThick*2 + fGasThickness; - G4double contR = fWindowThick*2 + fGasRadius; +void DetectorConstruction::ChangeGeometry() { + G4double contThick = fWindowThick * 2 + fGasThickness; + G4double contR = fWindowThick * 2 + fGasRadius; - G4double worldSizeZ = contThick*1.2; - G4double worldSizeR = contR*1.2; + G4double worldSizeZ = contThick * 1.2; + G4double worldSizeR = contR * 1.2; - TestParameters::GetPointer()->SetPositionZ(-0.55*contThick); + TestParameters::GetPointer()->SetPositionZ(-0.55 * contThick); fSolidWorld->SetOuterRadius(worldSizeR); - fSolidWorld->SetZHalfLength(worldSizeZ*0.5); + fSolidWorld->SetZHalfLength(worldSizeZ * 0.5); fSolidContainer->SetOuterRadius(contR); - fSolidContainer->SetZHalfLength(contThick*0.5); + fSolidContainer->SetZHalfLength(contThick * 0.5); fSolidDetector->SetOuterRadius(fGasRadius); - fSolidDetector->SetZHalfLength(fGasThickness*0.5); + fSolidDetector->SetZHalfLength(fGasThickness * 0.5); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm8/src/DetectorMessenger.cc b/examples/extended/electromagnetic/TestEm8/src/DetectorMessenger.cc index 0d9620caac7..275361e49b9 100644 --- a/examples/extended/electromagnetic/TestEm8/src/DetectorMessenger.cc +++ b/examples/extended/electromagnetic/TestEm8/src/DetectorMessenger.cc @@ -36,7 +36,7 @@ // Modified: // //////////////////////////////////////////////////////////////////////// -// +// //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -50,104 +50,101 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -DetectorMessenger::DetectorMessenger(DetectorConstruction * det) - : G4UImessenger(),fDetector(det) -{ +DetectorMessenger::DetectorMessenger(DetectorConstruction *det) + : fDetector(det) { fDetDir = new G4UIdirectory("/testem/"); fDetDir->SetGuidance("Detector control."); - - fGasMaterCmd = new G4UIcmdWithAString("/testem/setGasMat",this); + + fGasMaterCmd = new G4UIcmdWithAString("/testem/setGasMat", this); fGasMaterCmd->SetGuidance("Select material of the detector."); - fGasMaterCmd->SetParameterName("gmat",true); + fGasMaterCmd->SetParameterName("gmat", true); fGasMaterCmd->SetDefaultValue("Argon"); - fGasMaterCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + fGasMaterCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - fWindowMaterCmd = new G4UIcmdWithAString("/testem/setWindowMat",this); + fWindowMaterCmd = new G4UIcmdWithAString("/testem/setWindowMat", this); fWindowMaterCmd->SetGuidance("Select material of the window."); - fWindowMaterCmd->SetParameterName("wmat",true); + fWindowMaterCmd->SetParameterName("wmat", true); fWindowMaterCmd->SetDefaultValue("Mylar"); - fWindowMaterCmd->AvailableForStates(G4State_PreInit,G4State_Idle); - - fWorldMaterCmd = new G4UIcmdWithAString("/testem/setWorldMat",this); + fWindowMaterCmd->AvailableForStates(G4State_PreInit, G4State_Idle); + + fWorldMaterCmd = new G4UIcmdWithAString("/testem/setWorldMat", this); fWorldMaterCmd->SetGuidance("Select material of the world."); - fWorldMaterCmd->SetParameterName("worldmat",true); + fWorldMaterCmd->SetParameterName("worldmat", true); fWorldMaterCmd->SetDefaultValue("empty"); - fWorldMaterCmd->AvailableForStates(G4State_PreInit,G4State_Idle); - - fGasThickCmd = new G4UIcmdWithADoubleAndUnit("/testem/setGasThick",this); + fWorldMaterCmd->AvailableForStates(G4State_PreInit, G4State_Idle); + + fGasThickCmd = new G4UIcmdWithADoubleAndUnit("/testem/setGasThick", this); fGasThickCmd->SetGuidance("Set thickness of the detector"); - fGasThickCmd->SetParameterName("SizeZ",false,false); + fGasThickCmd->SetParameterName("SizeZ", false, false); fGasThickCmd->SetUnitCategory("Length"); fGasThickCmd->SetDefaultUnit("mm"); fGasThickCmd->SetRange("SizeZ>0."); - fGasThickCmd->AvailableForStates(G4State_PreInit,G4State_Idle); - - fGasRadCmd = new G4UIcmdWithADoubleAndUnit("/testem/setGasRad",this); + fGasThickCmd->AvailableForStates(G4State_PreInit, G4State_Idle); + + fGasRadCmd = new G4UIcmdWithADoubleAndUnit("/testem/setGasRad", this); fGasRadCmd->SetGuidance("Set radius of the detector"); - fGasRadCmd->SetParameterName("SizeR",false,false); + fGasRadCmd->SetParameterName("SizeR", false, false); fGasRadCmd->SetUnitCategory("Length"); fGasRadCmd->SetDefaultUnit("mm"); fGasRadCmd->SetRange("SizeR>0."); - fGasRadCmd->AvailableForStates(G4State_PreInit,G4State_Idle); - - fWinThickCmd = new G4UIcmdWithADoubleAndUnit("/testem/setWindowThick",this); + fGasRadCmd->AvailableForStates(G4State_PreInit, G4State_Idle); + + fWinThickCmd = new G4UIcmdWithADoubleAndUnit("/testem/setWindowThick", this); fWinThickCmd->SetGuidance("Set thickness of the window"); - fWinThickCmd->SetParameterName("delta",false,false); + fWinThickCmd->SetParameterName("delta", false, false); fWinThickCmd->SetUnitCategory("Length"); fWinThickCmd->SetDefaultUnit("mm"); fWinThickCmd->SetRange("delta>0."); - fWinThickCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + fWinThickCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - fIonCmd = new G4UIcmdWithADoubleAndUnit("/testem/setPairEnergy",this); + fIonCmd = new G4UIcmdWithADoubleAndUnit("/testem/setPairEnergy", this); fIonCmd->SetGuidance("Set energy per electron-ion pair for detector"); - fIonCmd->SetParameterName("en",false,false); + fIonCmd->SetParameterName("en", false, false); fIonCmd->SetUnitCategory("Energy"); fIonCmd->SetDefaultUnit("MeV"); fIonCmd->SetRange("en>0."); - fIonCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + fIonCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - fStepMaxCmd = new G4UIcmdWithADoubleAndUnit("/testem/stepMax",this); + fStepMaxCmd = new G4UIcmdWithADoubleAndUnit("/testem/stepMax", this); fStepMaxCmd->SetGuidance("Set max allowed step length for charged particles"); - fStepMaxCmd->SetParameterName("mxStep",false); + fStepMaxCmd->SetParameterName("mxStep", false); fStepMaxCmd->SetRange("mxStep>0."); fStepMaxCmd->SetUnitCategory("Length"); - fStepMaxCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + fStepMaxCmd->AvailableForStates(G4State_PreInit, G4State_Idle); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -DetectorMessenger::~DetectorMessenger() -{ - delete fGasMaterCmd; - delete fGasThickCmd; - delete fGasRadCmd; - delete fWinThickCmd; +DetectorMessenger::~DetectorMessenger() { + delete fGasMaterCmd; + delete fGasThickCmd; + delete fGasRadCmd; + delete fWinThickCmd; delete fWindowMaterCmd; delete fWorldMaterCmd; delete fIonCmd; - delete fStepMaxCmd; + delete fStepMaxCmd; delete fDetDir; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void DetectorMessenger::SetNewValue(G4UIcommand* command,G4String newValue) -{ - if( command == fGasMaterCmd ) { +void DetectorMessenger::SetNewValue(G4UIcommand *command, G4String newValue) { + if (command == fGasMaterCmd) { fDetector->SetGasMaterial(newValue); - } else if( command == fWindowMaterCmd ) { + } else if (command == fWindowMaterCmd) { fDetector->SetContainerMaterial(newValue); - } else if( command == fWorldMaterCmd ) { + } else if (command == fWorldMaterCmd) { fDetector->SetWorldMaterial(newValue); - } else if( command == fGasThickCmd ) { + } else if (command == fGasThickCmd) { fDetector->SetGasThickness(fGasThickCmd->GetNewDoubleValue(newValue)); - } else if( command == fGasRadCmd ) { + } else if (command == fGasRadCmd) { fDetector->SetGasRadius(fGasRadCmd->GetNewDoubleValue(newValue)); - } else if( command == fWinThickCmd ) { + } else if (command == fWinThickCmd) { fDetector->SetContainerThickness(fWinThickCmd->GetNewDoubleValue(newValue)); - } else if( command == fStepMaxCmd ) { + } else if (command == fStepMaxCmd) { fDetector->SetMaxChargedStep(fStepMaxCmd->GetNewDoubleValue(newValue)); - } else if( command == fIonCmd ) { + } else if (command == fIonCmd) { fDetector->SetPairEnergy(fIonCmd->GetNewDoubleValue(newValue)); } } diff --git a/examples/extended/electromagnetic/TestEm8/src/EventAction.cc b/examples/extended/electromagnetic/TestEm8/src/EventAction.cc index 59819719adc..ec9de2b371b 100644 --- a/examples/extended/electromagnetic/TestEm8/src/EventAction.cc +++ b/examples/extended/electromagnetic/TestEm8/src/EventAction.cc @@ -47,32 +47,23 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -EventAction::EventAction() - : G4UserEventAction() -{} +EventAction::EventAction() {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -EventAction::~EventAction() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - -void EventAction::BeginOfEventAction(const G4Event*) -{ -//additional initializations - Run* run - = static_cast(G4RunManager::GetRunManager()->GetNonConstCurrentRun()); - run->BeginOfEvent(); +void EventAction::BeginOfEventAction(const G4Event *) { + // additional initializations + Run *run = static_cast( + G4RunManager::GetRunManager()->GetNonConstCurrentRun()); + run->BeginOfEvent(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void EventAction::EndOfEventAction(const G4Event*) -{ - Run* run - = static_cast(G4RunManager::GetRunManager()->GetNonConstCurrentRun()); - run->EndOfEvent(); +void EventAction::EndOfEventAction(const G4Event *) { + Run *run = static_cast( + G4RunManager::GetRunManager()->GetNonConstCurrentRun()); + run->EndOfEvent(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/examples/extended/electromagnetic/TestEm8/src/PhysicsList.cc b/examples/extended/electromagnetic/TestEm8/src/PhysicsList.cc index 3d2c0989c43..27b71a41cd4 100644 --- a/examples/extended/electromagnetic/TestEm8/src/PhysicsList.cc +++ b/examples/extended/electromagnetic/TestEm8/src/PhysicsList.cc @@ -81,16 +81,15 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::PhysicsList(DetectorConstruction* ptr) - : G4VModularPhysicsList(), fDetectorConstruction(ptr) -{ - // set verbosity for zero to avoid double printout +PhysicsList::PhysicsList(DetectorConstruction *ptr) + : fDetectorConstruction(ptr) { + // set verbosity for zero to avoid double printout // on physics verbosity should be restored to 1 when cuts // are set G4EmParameters::Instance()->SetVerbose(0); - SetDefaultCutValue(1*mm); - + SetDefaultCutValue(1 * mm); + fMessenger = new PhysicsListMessenger(this); // Decay Physics is always defined @@ -105,8 +104,7 @@ PhysicsList::PhysicsList(DetectorConstruction* ptr) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::~PhysicsList() -{ +PhysicsList::~PhysicsList() { delete fMessenger; delete fDecayPhysicsList; delete fEmPhysicsList; @@ -114,15 +112,13 @@ PhysicsList::~PhysicsList() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void PhysicsList::ConstructParticle() -{ +void PhysicsList::ConstructParticle() { fDecayPhysicsList->ConstructParticle(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void PhysicsList::ConstructProcess() -{ +void PhysicsList::ConstructProcess() { AddTransportation(); fEmPhysicsList->ConstructProcess(); fDecayPhysicsList->ConstructProcess(); @@ -131,9 +127,8 @@ void PhysicsList::ConstructProcess() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void PhysicsList::AddPhysicsList(const G4String& name) -{ - if (verboseLevel>1) { +void PhysicsList::AddPhysicsList(const G4String &name) { + if (verboseLevel > 1) { G4cout << "PhysicsList::AddPhysicsList: <" << name << ">" << G4endl; } @@ -189,10 +184,10 @@ void PhysicsList::AddPhysicsList(const G4String& name) fEmPhysicsList = new G4EmStandardPhysicsGS(0); } else if (name == "pai") { - G4EmParameters::Instance()->AddPAIModel("all","world","pai"); + G4EmParameters::Instance()->AddPAIModel("all", "world", "pai"); } else if (name == "pai_photon") { - G4EmParameters::Instance()->AddPAIModel("all","world","pai_photon"); + G4EmParameters::Instance()->AddPAIModel("all", "world", "pai_photon"); } else if (name == "emlivermore") { @@ -215,27 +210,23 @@ void PhysicsList::AddPhysicsList(const G4String& name) } else { G4cout << "PhysicsList::AddPhysicsList: <" << name << ">" - << " is not defined" - << G4endl; + << " is not defined" << G4endl; } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void PhysicsList::AddStepMax() -{ +void PhysicsList::AddStepMax() { // Step limitation seen as a process - StepMax* stepMaxProcess = new StepMax(fDetectorConstruction); + StepMax *stepMaxProcess = new StepMax(fDetectorConstruction); - auto particleIterator=GetParticleIterator(); + auto particleIterator = GetParticleIterator(); particleIterator->reset(); - while ((*particleIterator)()) - { - G4ParticleDefinition* particle = particleIterator->value(); - G4ProcessManager* pmanager = particle->GetProcessManager(); + while ((*particleIterator)()) { + G4ParticleDefinition *particle = particleIterator->value(); + G4ProcessManager *pmanager = particle->GetProcessManager(); - if (stepMaxProcess->IsApplicable(*particle)) - { + if (stepMaxProcess->IsApplicable(*particle)) { pmanager->AddDiscreteProcess(stepMaxProcess); } } @@ -243,11 +234,12 @@ void PhysicsList::AddStepMax() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void PhysicsList::SetCuts() -{ - G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(25.*eV,1e5); - if ( verboseLevel > 0 ) { DumpCutValuesTable(); } +void PhysicsList::SetCuts() { + G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(25. * eV, + 1e5); + if (verboseLevel > 0) { + DumpCutValuesTable(); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - diff --git a/examples/extended/electromagnetic/TestEm8/src/PhysicsListMessenger.cc b/examples/extended/electromagnetic/TestEm8/src/PhysicsListMessenger.cc index 4a98ea28173..3380c61ef5c 100644 --- a/examples/extended/electromagnetic/TestEm8/src/PhysicsListMessenger.cc +++ b/examples/extended/electromagnetic/TestEm8/src/PhysicsListMessenger.cc @@ -36,7 +36,7 @@ // Author: V.Ivanchenko 01.09.2010 // //---------------------------------------------------------------------------- -// +// //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -53,69 +53,67 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsListMessenger::PhysicsListMessenger(PhysicsList* pPhys) -:G4UImessenger(),fPhysicsList(pPhys) -{ +PhysicsListMessenger::PhysicsListMessenger(PhysicsList *pPhys) + : fPhysicsList(pPhys) { fPhysDir = new G4UIdirectory("/testem/phys/"); fPhysDir->SetGuidance("physics list commands"); - fECmd = new G4UIcmdWithADoubleAndUnit("/testem/phys/setMaxE",this); + fECmd = new G4UIcmdWithADoubleAndUnit("/testem/phys/setMaxE", this); fECmd->SetGuidance("Set max energy deposit"); - fECmd->SetParameterName("Emax",false); + fECmd->SetParameterName("Emax", false); fECmd->SetUnitCategory("Energy"); fECmd->SetRange("Emax>0.0"); - fECmd->AvailableForStates(G4State_PreInit,G4State_Idle); + fECmd->AvailableForStates(G4State_PreInit, G4State_Idle); - fEBCmd = new G4UIcmdWithAnInteger("/testem/phys/setNbinsE",this); + fEBCmd = new G4UIcmdWithAnInteger("/testem/phys/setNbinsE", this); fEBCmd->SetGuidance("Set number of bins in energy."); - fEBCmd->SetParameterName("Ebins",false); + fEBCmd->SetParameterName("Ebins", false); fEBCmd->SetRange("Ebins>0"); - fEBCmd->AvailableForStates(G4State_PreInit,G4State_Idle); - - fCBCmd = new G4UIcmdWithAnInteger("/testem/phys/setNbinsCl",this); + fEBCmd->AvailableForStates(G4State_PreInit, G4State_Idle); + + fCBCmd = new G4UIcmdWithAnInteger("/testem/phys/setNbinsCl", this); fCBCmd->SetGuidance("Set number of bins of clusters."); - fCBCmd->SetParameterName("Cbins",false); + fCBCmd->SetParameterName("Cbins", false); fCBCmd->SetRange("Cbins>0"); - fCBCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + fCBCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - fCMCmd = new G4UIcmdWithAnInteger("/testem/phys/setMaxCl",this); + fCMCmd = new G4UIcmdWithAnInteger("/testem/phys/setMaxCl", this); fCMCmd->SetGuidance("Set max number of clusters."); - fCMCmd->SetParameterName("Cmax",false); + fCMCmd->SetParameterName("Cmax", false); fCMCmd->SetRange("Cmax>0"); - fCMCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + fCMCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - fListCmd = new G4UIcmdWithAString("/testem/phys/addPhysics",this); + fListCmd = new G4UIcmdWithAString("/testem/phys/addPhysics", this); fListCmd->SetGuidance("Add modula physics list."); - fListCmd->SetParameterName("PList",false); + fListCmd->SetParameterName("PList", false); fListCmd->AvailableForStates(G4State_PreInit); - fADCCmd = - new G4UIcmdWithADoubleAndUnit("/testem/phys/setEnergyPerChannel",this); + fADCCmd = + new G4UIcmdWithADoubleAndUnit("/testem/phys/setEnergyPerChannel", this); fADCCmd->SetGuidance("Set energy per ADC channel"); - fADCCmd->SetParameterName("enadc",false,false); + fADCCmd->SetParameterName("enadc", false, false); fADCCmd->SetUnitCategory("Energy"); fADCCmd->SetDefaultUnit("keV"); fADCCmd->SetRange("enadc>0."); - fADCCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + fADCCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - fNorCmd = new G4UIcmdWithADouble("/testem/phys/setNormFactor",this); + fNorCmd = new G4UIcmdWithADouble("/testem/phys/setNormFactor", this); fNorCmd->SetGuidance("Set factor for histogram normalisation"); - fNorCmd->SetParameterName("nfac",false,false); + fNorCmd->SetParameterName("nfac", false, false); fNorCmd->SetRange("nfac>0."); - fNorCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + fNorCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - fSmCmd = new G4UIcmdWithADoubleAndUnit("/testem/phys/setEnergySmear",this); + fSmCmd = new G4UIcmdWithADoubleAndUnit("/testem/phys/setEnergySmear", this); fSmCmd->SetGuidance("Set intrinsic width of detector response"); - fSmCmd->SetParameterName("sm",false,false); + fSmCmd->SetParameterName("sm", false, false); fSmCmd->SetDefaultUnit("keV"); fSmCmd->SetRange("sm>0."); - fSmCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + fSmCmd->AvailableForStates(G4State_PreInit, G4State_Idle); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsListMessenger::~PhysicsListMessenger() -{ +PhysicsListMessenger::~PhysicsListMessenger() { delete fECmd; delete fEBCmd; delete fCBCmd; @@ -129,27 +127,34 @@ PhysicsListMessenger::~PhysicsListMessenger() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void PhysicsListMessenger::SetNewValue(G4UIcommand* command, - G4String newValue) -{ - TestParameters* man = TestParameters::GetPointer(); - - if( command == fECmd ) - { man->SetMaxEnergy(fECmd->GetNewDoubleValue(newValue)); } - if( command == fEBCmd ) - { man->SetNumberBins(fEBCmd->GetNewIntValue(newValue)); } - if( command == fCBCmd ) - { man->SetNumberBinsCluster(fCBCmd->GetNewIntValue(newValue)); } - if( command == fCMCmd ) - { man->SetMaxCluster(fCMCmd->GetNewIntValue(newValue)); } - if( command == fListCmd ) - { fPhysicsList->AddPhysicsList(newValue); } - if( command == fADCCmd ) - { man->SetEnergyPerChannel(fADCCmd->GetNewDoubleValue(newValue)); } - if( command == fNorCmd ) - { man->SetNormFactor(fNorCmd->GetNewDoubleValue(newValue)); } - if( command == fSmCmd ) - { man->SetEnergySmear(fSmCmd->GetNewDoubleValue(newValue)); } +void PhysicsListMessenger::SetNewValue(G4UIcommand *command, + G4String newValue) { + TestParameters *man = TestParameters::GetPointer(); + + if (command == fECmd) { + man->SetMaxEnergy(fECmd->GetNewDoubleValue(newValue)); + } + if (command == fEBCmd) { + man->SetNumberBins(fEBCmd->GetNewIntValue(newValue)); + } + if (command == fCBCmd) { + man->SetNumberBinsCluster(fCBCmd->GetNewIntValue(newValue)); + } + if (command == fCMCmd) { + man->SetMaxCluster(fCMCmd->GetNewIntValue(newValue)); + } + if (command == fListCmd) { + fPhysicsList->AddPhysicsList(newValue); + } + if (command == fADCCmd) { + man->SetEnergyPerChannel(fADCCmd->GetNewDoubleValue(newValue)); + } + if (command == fNorCmd) { + man->SetNormFactor(fNorCmd->GetNewDoubleValue(newValue)); + } + if (command == fSmCmd) { + man->SetEnergySmear(fSmCmd->GetNewDoubleValue(newValue)); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm8/src/PrimaryGeneratorAction.cc b/examples/extended/electromagnetic/TestEm8/src/PrimaryGeneratorAction.cc index 0cc4eec97b2..dbdd445733c 100644 --- a/examples/extended/electromagnetic/TestEm8/src/PrimaryGeneratorAction.cc +++ b/examples/extended/electromagnetic/TestEm8/src/PrimaryGeneratorAction.cc @@ -49,32 +49,25 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PrimaryGeneratorAction::PrimaryGeneratorAction() - : G4VUserPrimaryGeneratorAction(), - fParticleGun(0) -{ - fParticleGun = new G4ParticleGun(1); +PrimaryGeneratorAction::PrimaryGeneratorAction() { + fParticleGun = new G4ParticleGun(1); fParticleGun->SetParticleDefinition(G4Electron::Electron()); - fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0.,0.,1.)); - fParticleGun->SetParticleEnergy(1.*GeV); + fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0., 0., 1.)); + fParticleGun->SetParticleEnergy(1. * GeV); fParam = TestParameters::GetPointer(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PrimaryGeneratorAction::~PrimaryGeneratorAction() -{ - delete fParticleGun; -} +PrimaryGeneratorAction::~PrimaryGeneratorAction() { delete fParticleGun; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) -{ +void PrimaryGeneratorAction::GeneratePrimaries(G4Event *anEvent) { G4double z = fParam->GetPositionZ(); fParam->SetBeamParticle(fParticleGun->GetParticleDefinition()); fParam->SetBeamEnergy(fParticleGun->GetParticleEnergy()); - fParticleGun->SetParticlePosition(G4ThreeVector(0.,0.,z)); + fParticleGun->SetParticlePosition(G4ThreeVector(0., 0., z)); fParticleGun->GeneratePrimaryVertex(anEvent); } diff --git a/examples/extended/electromagnetic/TestEm8/src/Run.cc b/examples/extended/electromagnetic/TestEm8/src/Run.cc index 583fb750f6b..cbd2b40f7a5 100644 --- a/examples/extended/electromagnetic/TestEm8/src/Run.cc +++ b/examples/extended/electromagnetic/TestEm8/src/Run.cc @@ -26,7 +26,7 @@ /// \file electromagnetic/TestEm8/src/Run.cc /// \brief Implementation of the Run class // -// +// //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -42,132 +42,112 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -Run::Run() - : G4Run(), fElIonPair(0), fParam(TestParameters::GetPointer()) -{ +Run::Run() : G4Run(), fElIonPair(0), fParam(TestParameters::GetPointer()) { fElIonPair = G4LossTableManager::Instance()->ElectronIonPair(); - fTotStepGas = fTotCluster = fMeanCluster = fOverflow = fTotEdep - = fStepGas = fCluster = fMaxEnergy = 0.0; - fEvt = fNbins = 0; - fFactorALICE = fParam->GetFactorALICE(); - fWidthALICE = fParam->GetEnergySmear(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -Run::~Run() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void Run::BeginOfRun() -{ +void Run::BeginOfRun() { // initilise scoring - fTotStepGas = fTotCluster = fMeanCluster = fOverflow = fTotEdep - = fStepGas = fCluster = 0.0; + fTotStepGas = fTotCluster = fMeanCluster = fOverflow = fTotEdep = fStepGas = + fCluster = 0.0; fEvt = 0; fFactorALICE = fParam->GetFactorALICE(); fWidthALICE = fParam->GetEnergySmear(); - + SetVerbose(1); fNbins = fParam->GetNumberBins(); fMaxEnergy = fParam->GetMaxEnergy(); - - fEgas.resize(fNbins,0.0); + + fEgas.resize(fNbins, 0.0); fEdep.reset(); - if(fVerbose > 0) { + if (fVerbose > 0) { G4int binsCluster = fParam->GetNumberBinsCluster(); - G4cout << " BinsCluster= " << binsCluster << " BinsE= " << fNbins - << " Emax(keV)= " << fMaxEnergy/keV << G4endl; - G4cout << " WidthALICE(keV)= " << fWidthALICE/keV + G4cout << " BinsCluster= " << binsCluster << " BinsE= " << fNbins + << " Emax(keV)= " << fMaxEnergy / keV << G4endl; + G4cout << " WidthALICE(keV)= " << fWidthALICE / keV << " FactorALICE= " << fFactorALICE << G4endl; - } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Run::EndOfRun() -{ +void Run::EndOfRun() { G4int nEvt = GetNumberOfEvent(); - G4double norm = (nEvt > 0) ? 1.0/(G4double)nEvt : 0.0; + G4double norm = (nEvt > 0) ? 1.0 / (G4double)nEvt : 0.0; - fTotStepGas *= norm; - fTotCluster *= norm; + fTotStepGas *= norm; + fTotCluster *= norm; fMeanCluster *= norm; - fOverflow *= norm; + fOverflow *= norm; G4double y1 = fEdep.mean(); G4double y2 = fEdep.rms(); - G4double de = fMaxEnergy/G4double(fNbins); - G4double x1 = -de*0.5; + G4double de = fMaxEnergy / G4double(fNbins); + G4double x1 = -de * 0.5; fFactorALICE = fParam->GetFactorALICE(); G4cout << " ====================================================" << G4endl; - G4cout << " Beam Particle: " - << fParam->GetBeamParticle()->GetParticleName() << G4endl - << " Ekin(MeV) = " << fParam->GetBeamEnergy()/MeV - << G4endl - << " Z(mm) = " << fParam->GetPositionZ()/mm + G4cout << " Beam Particle: " << fParam->GetBeamParticle()->GetParticleName() + << G4endl << " Ekin(MeV) = " << fParam->GetBeamEnergy() / MeV + << G4endl << " Z(mm) = " << fParam->GetPositionZ() / mm << G4endl; G4cout << " ================== run summary =====================" << G4endl; G4int prec = G4cout.precision(5); - G4cout << " End of Run TotNbofEvents = " - << nEvt << G4endl; - G4cout << " Energy(keV) per ADC channel = " - << 1.0/(keV*fFactorALICE) << G4endl; + G4cout << " End of Run TotNbofEvents = " << nEvt << G4endl; + G4cout << " Energy(keV) per ADC channel = " << 1.0 / (keV * fFactorALICE) + << G4endl; G4cout << G4endl; - G4cout << " Mean energy deposit in absorber = " << - y1/keV << " +- " << y2*std::sqrt(norm)/keV << " keV; "; - if(y1 > 0.0) { G4cout << " RMS/Emean = " << y2/y1; } + G4cout << " Mean energy deposit in absorber = " << y1 / keV << " +- " + << y2 *std::sqrt(norm) / keV << " keV; "; + if (y1 > 0.0) { + G4cout << " RMS/Emean = " << y2 / y1; + } G4cout << G4endl; - G4cout << " Mean number of steps in absorber= " - << fTotStepGas << "; mean number of ion-clusters = " - << fTotCluster << " MeanCluster= " << fMeanCluster - << G4endl; + G4cout << " Mean number of steps in absorber= " << fTotStepGas + << "; mean number of ion-clusters = " << fTotCluster + << " MeanCluster= " << fMeanCluster << G4endl; G4cout << G4endl; - G4cout << " ====== Energy deposit distribution Noverflows= " << fOverflow - << " ====== " << G4endl ; + G4cout << " ====== Energy deposit distribution Noverflows= " << fOverflow + << " ====== " << G4endl; G4cout << " bin nb Elow entries normalized " << G4endl; - std::ofstream fileOut("distribution.out", std::ios::out ); - fileOut.setf( std::ios::scientific, std::ios::floatfield ); + std::ofstream fileOut("distribution.out", std::ios::out); + fileOut.setf(std::ios::scientific, std::ios::floatfield); x1 = 0.0; fileOut << fNbins << G4endl; - - for(G4int j=0; jGetNormFactor(); - analysisManager->ScaleH1(1,norm); - analysisManager->ScaleH1(2,norm); - analysisManager->ScaleH1(3,norm*normf); - + analysisManager->ScaleH1(1, norm); + analysisManager->ScaleH1(2, norm); + analysisManager->ScaleH1(3, norm * normf); + G4cout << " ================== run end ==========================" << G4endl; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Run::BeginOfEvent() -{ +void Run::BeginOfEvent() { fTotEdep = 0.0; fStepGas = 0; fCluster = 0; @@ -176,65 +156,67 @@ void Run::BeginOfEvent() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Run::EndOfEvent() -{ +void Run::EndOfEvent() { fTotStepGas += fStepGas; fTotCluster += fCluster; - if(fWidthALICE > 0.0) { - G4double x = G4RandGauss::shoot(0.,fWidthALICE); + if (fWidthALICE > 0.0) { + G4double x = G4RandGauss::shoot(0., fWidthALICE); fTotEdep += x; fTotEdep = std::max(fTotEdep, 0.0); } - G4int idx = G4int(fTotEdep*fNbins/fMaxEnergy); + G4int idx = G4int(fTotEdep * fNbins / fMaxEnergy); - if(idx < 0) { fEgas[0] += 1.0; } - if(idx >= fNbins) { fOverflow += 1.0; } - else { fEgas[idx] += 1.0; } - - G4AnalysisManager* analysisManager = G4AnalysisManager::Instance(); + if (idx < 0) { + fEgas[0] += 1.0; + } + if (idx >= fNbins) { + fOverflow += 1.0; + } else { + fEgas[idx] += 1.0; + } + + G4AnalysisManager *analysisManager = G4AnalysisManager::Instance(); // fill histo - analysisManager->FillH1(1,fTotEdep/keV,1.0); - analysisManager->FillH1(2,fCluster,1.0); - analysisManager->FillH1(3,fTotEdep*fFactorALICE,1.0); + analysisManager->FillH1(1, fTotEdep / keV, 1.0); + analysisManager->FillH1(2, fCluster, 1.0); + analysisManager->FillH1(3, fTotEdep * fFactorALICE, 1.0); fEdep.fill(fTotEdep, 1.0); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Run::Merge(const G4Run* run) -{ - const Run* localRun = static_cast(run); +void Run::Merge(const G4Run *run) { + const Run *localRun = static_cast(run); - fTotStepGas += localRun->fTotStepGas; - fTotCluster += localRun->fTotCluster; + fTotStepGas += localRun->fTotStepGas; + fTotCluster += localRun->fTotCluster; fMeanCluster += localRun->fMeanCluster; - fOverflow += localRun->fOverflow; + fOverflow += localRun->fOverflow; - G4StatDouble* stat = const_cast(localRun->GetStat()); + G4StatDouble *stat = const_cast(localRun->GetStat()); fEdep.add(stat); - - for(G4int j=0; jfEgas[j]; + + for (G4int j = 0; j < fNbins; ++j) { + fEgas[j] += localRun->fEgas[j]; } - + G4Run::Merge(run); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Run::AddEnergy(G4double edep, const G4Step* step) -{ - if(1 < fVerbose) { - G4cout << "Run::AddEnergy: e(keV)= " << edep/keV - << G4endl; +void Run::AddEnergy(G4double edep, const G4Step *step) { + if (1 < fVerbose) { + G4cout << "Run::AddEnergy: e(keV)= " << edep / keV << G4endl; } fTotEdep += edep; - if(step) { - if(1 == step->GetTrack()->GetTrackID()) { fStepGas += 1.0; } + if (step) { + if (1 == step->GetTrack()->GetTrackID()) { + fStepGas += 1.0; + } fMeanCluster += fElIonPair->MeanNumberOfIonsAlongStep(step); fCluster += fElIonPair->SampleNumberOfIonsAlongStep(step); diff --git a/examples/extended/electromagnetic/TestEm8/src/RunAction.cc b/examples/extended/electromagnetic/TestEm8/src/RunAction.cc index f31e41da4b3..a8e7de100a7 100644 --- a/examples/extended/electromagnetic/TestEm8/src/RunAction.cc +++ b/examples/extended/electromagnetic/TestEm8/src/RunAction.cc @@ -49,12 +49,10 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -RunAction::RunAction() - : G4UserRunAction(), fAnalysisManager(0), fRun(0) -{ +RunAction::RunAction() { TestParameters::GetPointer(); fAnalysisManager = G4AnalysisManager::Instance(); - fAnalysisManager->SetDefaultFileType("root"); + fAnalysisManager->SetDefaultFileType("root"); fAnalysisManager->SetFileName("testem8"); fAnalysisManager->SetVerboseLevel(1); fAnalysisManager->SetActivation(true); @@ -62,70 +60,61 @@ RunAction::RunAction() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -RunAction::~RunAction() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void RunAction::Book() -{ +void RunAction::Book() { // Always creating analysis manager - TestParameters* param = TestParameters::GetPointer(); + TestParameters *param = TestParameters::GetPointer(); G4int nBinsE = param->GetNumberBins(); G4int nBinsCluster = param->GetNumberBinsCluster(); G4int nMaxCluster = param->GetMaxCluster(); G4double maxEnergy = param->GetMaxEnergy(); G4double factorALICE = param->GetFactorALICE(); - //G4cout << "### maxenergy(keV)= " << maxEnergy/keV + // G4cout << "### maxenergy(keV)= " << maxEnergy/keV // << " factorALICE= " << factorALICE << G4endl; // Creating an 1-dimensional histograms in the root directory of the tree - fAnalysisManager->SetFirstHistoId(1); - fAnalysisManager->CreateH1("h1","Energy deposition in detector (keV)", - nBinsE,0.0,maxEnergy/keV); - fAnalysisManager->CreateH1("h2","Number of primary clusters", - nBinsCluster,0.0,G4double(nMaxCluster)); - fAnalysisManager->CreateH1("h3","Energy deposition in detector (ADC)", - nBinsE,0.0,maxEnergy*factorALICE); - fAnalysisManager->OpenFile(); + fAnalysisManager->SetFirstHistoId(1); + fAnalysisManager->CreateH1("h1", "Energy deposition in detector (keV)", + nBinsE, 0.0, maxEnergy / keV); + fAnalysisManager->CreateH1("h2", "Number of primary clusters", nBinsCluster, + 0.0, G4double(nMaxCluster)); + fAnalysisManager->CreateH1("h3", "Energy deposition in detector (ADC)", + nBinsE, 0.0, maxEnergy * factorALICE); + fAnalysisManager->OpenFile(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4Run* RunAction::GenerateRun() -{ - fRun = new Run(); +G4Run *RunAction::GenerateRun() { + fRun = new Run(); return fRun; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void RunAction::BeginOfRunAction(const G4Run* aRun) -{ +void RunAction::BeginOfRunAction(const G4Run *aRun) { G4int id = aRun->GetRunID(); - G4cout << "### Run " << id << " start analysis activation; rand= " - << G4UniformRand() << G4endl; + G4cout << "### Run " << id + << " start analysis activation; rand= " << G4UniformRand() << G4endl; fRun->BeginOfRun(); - //histograms + // histograms Book(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void RunAction::EndOfRunAction(const G4Run*) -{ +void RunAction::EndOfRunAction(const G4Run *) { // print Run summary - G4cout << "RunAction: End of run actions are started " << isMaster - << " Nevt= " << fRun->GetNumberOfEvent() + G4cout << "RunAction: End of run actions are started " << isMaster + << " Nevt= " << fRun->GetNumberOfEvent() << " Edep= " << fRun->GetStat()->mean() << G4endl; if (isMaster) { - fRun->EndOfRun(); + fRun->EndOfRun(); } // save histos and close analysis - if (fAnalysisManager->IsActive()) { + if (fAnalysisManager->IsActive()) { fAnalysisManager->Write(); fAnalysisManager->CloseFile(); fAnalysisManager->Clear(); diff --git a/examples/extended/electromagnetic/TestEm8/src/StackingAction.cc b/examples/extended/electromagnetic/TestEm8/src/StackingAction.cc index e180e371985..4b58b2b12ed 100644 --- a/examples/extended/electromagnetic/TestEm8/src/StackingAction.cc +++ b/examples/extended/electromagnetic/TestEm8/src/StackingAction.cc @@ -41,42 +41,35 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -StackingAction::StackingAction() - : G4UserStackingAction(), - fKillSecondary(false), - fStackMessenger(0) -{ +StackingAction::StackingAction() { fStackMessenger = new StackingMessenger(this); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -StackingAction::~StackingAction() -{ - delete fStackMessenger; -} +StackingAction::~StackingAction() { delete fStackMessenger; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4ClassificationOfNewTrack -StackingAction::ClassifyNewTrack(const G4Track* aTrack) -{ - //stack or delete secondaries +StackingAction::ClassifyNewTrack(const G4Track *aTrack) { + // stack or delete secondaries G4ClassificationOfNewTrack status = fUrgent; - //keep primary particle - if (aTrack->GetParentID() == 0 || !fKillSecondary) { return status; } - - Run* run - = static_cast(G4RunManager::GetRunManager()->GetNonConstCurrentRun()); + // keep primary particle + if (aTrack->GetParentID() == 0 || !fKillSecondary) { + return status; + } + + Run *run = static_cast( + G4RunManager::GetRunManager()->GetNonConstCurrentRun()); // charged tracks are killed only inside sensitive volumes - if(aTrack->GetVolume()->GetLogicalVolume()->GetSensitiveDetector() && - aTrack->GetDefinition()->GetPDGCharge() != 0.0) - { - run->AddEnergy(aTrack->GetKineticEnergy(), 0); - status = fKill; - } + if (aTrack->GetVolume()->GetLogicalVolume()->GetSensitiveDetector() && + aTrack->GetDefinition()->GetPDGCharge() != 0.0) { + run->AddEnergy(aTrack->GetKineticEnergy(), 0); + status = fKill; + } return status; } diff --git a/examples/extended/electromagnetic/TestEm8/src/StackingMessenger.cc b/examples/extended/electromagnetic/TestEm8/src/StackingMessenger.cc index 53bf012d8b7..34c37a3f4eb 100644 --- a/examples/extended/electromagnetic/TestEm8/src/StackingMessenger.cc +++ b/examples/extended/electromagnetic/TestEm8/src/StackingMessenger.cc @@ -37,28 +37,24 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -StackingMessenger::StackingMessenger(StackingAction* stack) -:G4UImessenger(),fStackAction(stack),fKillCmd(0) -{ - fKillCmd = new G4UIcmdWithABool("/testem/killSecondaries",this); +StackingMessenger::StackingMessenger(StackingAction *stack) + : fStackAction(stack), fKillCmd(0) { + fKillCmd = new G4UIcmdWithABool("/testem/killSecondaries", this); fKillCmd->SetGuidance("Kill secondary charged particles"); - fKillCmd->SetParameterName("choice",true); + fKillCmd->SetParameterName("choice", true); fKillCmd->SetDefaultValue(false); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -StackingMessenger::~StackingMessenger() -{ - delete fKillCmd; -} +StackingMessenger::~StackingMessenger() { delete fKillCmd; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void StackingMessenger::SetNewValue(G4UIcommand* command, G4String newValue) -{ - if(command == fKillCmd) - {fStackAction->SetKillStatus(fKillCmd->GetNewBoolValue(newValue));} +void StackingMessenger::SetNewValue(G4UIcommand *command, G4String newValue) { + if (command == fKillCmd) { + fStackAction->SetKillStatus(fKillCmd->GetNewBoolValue(newValue)); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/electromagnetic/TestEm8/src/StepMax.cc b/examples/extended/electromagnetic/TestEm8/src/StepMax.cc index e769aa68297..85c627a520d 100644 --- a/examples/extended/electromagnetic/TestEm8/src/StepMax.cc +++ b/examples/extended/electromagnetic/TestEm8/src/StepMax.cc @@ -34,43 +34,31 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -StepMax::StepMax(DetectorConstruction* ptr, const G4String& processName) - : G4VEmProcess(processName, fGeneral),fMaxChargedStep(DBL_MAX), - fDetector(ptr),fWorld(nullptr),fIsInitialised(false) -{ - SetProcessSubType(static_cast(STEP_LIMITER)); +StepMax::StepMax(DetectorConstruction *ptr, const G4String &processName) + : G4VEmProcess(processName, fGeneral), fDetector(ptr) { + SetProcessSubType(static_cast(STEP_LIMITER)); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -StepMax::~StepMax() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4bool StepMax::IsApplicable(const G4ParticleDefinition& part) -{ +G4bool StepMax::IsApplicable(const G4ParticleDefinition &part) { return (part.GetPDGCharge() != 0. && !part.IsShortLived()); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void StepMax::PreparePhysicsTable(const G4ParticleDefinition&) -{ - if(fIsInitialised) { - fIsInitialised = false; - } +void StepMax::PreparePhysicsTable(const G4ParticleDefinition &) { + fIsInitialised = false; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void StepMax::BuildPhysicsTable(const G4ParticleDefinition&) -{ - if(!fIsInitialised) { +void StepMax::BuildPhysicsTable(const G4ParticleDefinition &) { + if (!fIsInitialised) { fMaxChargedStep = fDetector->GetMaxChargedStep(); fWorld = fDetector->GetWorldPhysVol(); fIsInitialised = true; - if(fMaxChargedStep < DBL_MAX) { + if (fMaxChargedStep < DBL_MAX) { G4cout << GetProcessName() << ": SubType= " << GetProcessSubType() << " Step limit(mm)= " << fMaxChargedStep << G4endl; } @@ -79,16 +67,13 @@ void StepMax::BuildPhysicsTable(const G4ParticleDefinition&) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void StepMax::InitialiseProcess(const G4ParticleDefinition*) -{} +void StepMax::InitialiseProcess(const G4ParticleDefinition *) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double -StepMax::PostStepGetPhysicalInteractionLength(const G4Track& aTrack, - G4double, - G4ForceCondition* condition) -{ +G4double +StepMax::PostStepGetPhysicalInteractionLength(const G4Track &aTrack, G4double, + G4ForceCondition *condition) { // condition is set to "Not Forced" *condition = NotForced; return (aTrack.GetVolume() != fWorld) ? fMaxChargedStep : DBL_MAX; @@ -96,12 +81,11 @@ StepMax::PostStepGetPhysicalInteractionLength(const G4Track& aTrack, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4VParticleChange* StepMax::PostStepDoIt(const G4Track& aTrack, const G4Step&) -{ +G4VParticleChange *StepMax::PostStepDoIt(const G4Track &aTrack, + const G4Step &) { // do nothing aParticleChange.Initialize(aTrack); return &aParticleChange; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - diff --git a/examples/extended/electromagnetic/TestEm8/src/TargetSD.cc b/examples/extended/electromagnetic/TestEm8/src/TargetSD.cc index 751fab430d7..93bdafb5a9c 100644 --- a/examples/extended/electromagnetic/TestEm8/src/TargetSD.cc +++ b/examples/extended/electromagnetic/TestEm8/src/TargetSD.cc @@ -36,7 +36,7 @@ // Modified: // //////////////////////////////////////////////////////////////////////// -// +// #include "TargetSD.hh" #include "Run.hh" @@ -48,45 +48,34 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -TargetSD::TargetSD(const G4String& name) - : G4VSensitiveDetector(name), fRun(0) -{} +TargetSD::TargetSD(const G4String &name) + : G4VSensitiveDetector(name) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -TargetSD::~TargetSD() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void TargetSD::Initialize(G4HCofThisEvent*) -{ - fRun = (Run*)G4RunManager::GetRunManager()->GetNonConstCurrentRun(); +void TargetSD::Initialize(G4HCofThisEvent *) { + fRun = static_cast( + G4RunManager::GetRunManager()->GetNonConstCurrentRun()); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool TargetSD::ProcessHits(G4Step* aStep, G4TouchableHistory*) -{ +G4bool TargetSD::ProcessHits(G4Step *aStep, G4TouchableHistory *) { G4double edep = aStep->GetTotalEnergyDeposit(); - fRun->AddEnergy(edep, aStep); + fRun->AddEnergy(edep, aStep); return true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void TargetSD::EndOfEvent(G4HCofThisEvent*) -{} +void TargetSD::EndOfEvent(G4HCofThisEvent *) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void TargetSD::clear() -{} +void TargetSD::clear() {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void TargetSD::PrintAll() -{} +void TargetSD::PrintAll() {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - diff --git a/examples/extended/electromagnetic/TestEm8/src/TestParameters.cc b/examples/extended/electromagnetic/TestEm8/src/TestParameters.cc index c2b379382c8..74572c8e668 100644 --- a/examples/extended/electromagnetic/TestEm8/src/TestParameters.cc +++ b/examples/extended/electromagnetic/TestEm8/src/TestParameters.cc @@ -45,13 +45,12 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -TestParameters* TestParameters::fManager = nullptr; +TestParameters *TestParameters::fManager = nullptr; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -TestParameters* TestParameters::GetPointer() -{ - if(!fManager) { +TestParameters *TestParameters::GetPointer() { + if (!fManager) { fManager = new TestParameters(); } return fManager; @@ -59,168 +58,101 @@ TestParameters* TestParameters::GetPointer() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -TestParameters::TestParameters() -{ - fMaxEnergy = 100.*keV; - fBinsE = 100; - fBinsCluster = 1; - fMaxCluster = 1500; - fNormFactor = 1.0; - fEnergySmear = 0.0; - fPositionZ = 0.0; - fBeamEnergy = 0.0; - - fParticle = nullptr; +TestParameters::TestParameters() { + fMaxEnergy = 100. * CLHEP::keV; // normalisation to PAI - fFactorALICE = 325; + // fFactorALICE = 325; // normalisation to Opt0 - //fFactorALICE = 275; + // fFactorALICE = 275; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -TestParameters::~TestParameters() -{} +void TestParameters::SetMaxEnergy(G4double value) { fMaxEnergy = value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void TestParameters::SetMaxEnergy(G4double value) -{ - fMaxEnergy = value; -} +G4double TestParameters::GetMaxEnergy() const { return fMaxEnergy; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double TestParameters::GetMaxEnergy() const -{ - return fMaxEnergy; -} +void TestParameters::SetNumberBins(G4int value) { fBinsE = value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void TestParameters::SetNumberBins(G4int value) -{ - fBinsE = value; -} +G4int TestParameters::GetNumberBins() const { return fBinsE; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4int TestParameters::GetNumberBins() const -{ - return fBinsE; -} +void TestParameters::SetNumberBinsCluster(G4int value) { fBinsCluster = value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void TestParameters::SetNumberBinsCluster(G4int value) -{ - fBinsCluster = value; -} +G4int TestParameters::GetNumberBinsCluster() const { return fBinsCluster; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4int TestParameters::GetNumberBinsCluster() const -{ - return fBinsCluster; -} +void TestParameters::SetMaxCluster(G4int value) { fMaxCluster = value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void TestParameters::SetMaxCluster(G4int value) -{ - fMaxCluster = value; -} -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4int TestParameters::GetMaxCluster() const -{ - return fMaxCluster; -} +G4int TestParameters::GetMaxCluster() const { return fMaxCluster; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void TestParameters::SetEnergyPerChannel(G4double value) -{ - if(value > 0.0) { fFactorALICE = 1./value; } +void TestParameters::SetEnergyPerChannel(G4double value) { + if (value > 0.0) { + fFactorALICE = 1. / value; + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double TestParameters::GetFactorALICE() const -{ - return fFactorALICE; -} +G4double TestParameters::GetFactorALICE() const { return fFactorALICE; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void TestParameters::SetNormFactor(G4double value) -{ - fNormFactor = value; -} +void TestParameters::SetNormFactor(G4double value) { fNormFactor = value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double TestParameters::GetNormFactor() const -{ - return fNormFactor; -} +G4double TestParameters::GetNormFactor() const { return fNormFactor; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void TestParameters::SetEnergySmear(G4double value) -{ - fEnergySmear = value; -} +void TestParameters::SetEnergySmear(G4double value) { fEnergySmear = value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double TestParameters::GetEnergySmear() const -{ - return fEnergySmear; -} +G4double TestParameters::GetEnergySmear() const { return fEnergySmear; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void TestParameters::SetPositionZ(G4double val) -{ - fPositionZ = val; -} +void TestParameters::SetPositionZ(G4double val) { fPositionZ = val; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double TestParameters::GetPositionZ() const -{ - return fPositionZ; -} +G4double TestParameters::GetPositionZ() const { return fPositionZ; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void TestParameters::SetBeamEnergy(G4double val) -{ - fBeamEnergy = val; -} +void TestParameters::SetBeamEnergy(G4double val) { fBeamEnergy = val; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double TestParameters::GetBeamEnergy() const -{ - return fBeamEnergy; -} +G4double TestParameters::GetBeamEnergy() const { return fBeamEnergy; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void TestParameters::SetBeamParticle(const G4ParticleDefinition* ptr) -{ +void TestParameters::SetBeamParticle(const G4ParticleDefinition *ptr) { fParticle = ptr; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -const G4ParticleDefinition* TestParameters::GetBeamParticle() const -{ +const G4ParticleDefinition *TestParameters::GetBeamParticle() const { return fParticle; } diff --git a/examples/extended/electromagnetic/TestEm9/TestEm9.out b/examples/extended/electromagnetic/TestEm9/TestEm9.out index 7215a2c2f0f..cee302820f3 100644 --- a/examples/extended/electromagnetic/TestEm9/TestEm9.out +++ b/examples/extended/electromagnetic/TestEm9/TestEm9.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -198,7 +198,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 applyCuts:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV ===== EM models for the G4Region VertexDetector ====== @@ -244,7 +244,7 @@ annihil: for e+ XStype:2 applyCuts:1 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 applyCuts:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV ===== EM models for the G4Region VertexDetector ====== @@ -280,7 +280,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 applyCuts:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -293,7 +293,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 240 bins Lambda tables from threshold to 100 TeV, 20 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -339,7 +338,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 applyCuts:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -371,7 +370,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 applyCuts:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -403,7 +402,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 applyCuts:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -435,7 +434,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 applyCuts:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -467,7 +466,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 applyCuts:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -499,7 +498,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 applyCuts:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -531,7 +530,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 applyCuts:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -603,7 +602,7 @@ Index : 7 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.680000s Real=0.689526s Sys=0.000000s + User=0.580000s Real=0.581269s Sys=0.000000s RunAction: End of run actions are started HistoManager: End of run actions are started RunID# 0 ================================================================= @@ -713,7 +712,7 @@ Index : 7 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=1.000000s Real=1.008270s Sys=0.000000s + User=0.850000s Real=0.860606s Sys=0.000000s RunAction: End of run actions are started HistoManager: End of run actions are started RunID# 1 ================================================================= @@ -836,7 +835,7 @@ Index : 7 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.470000s Real=0.467496s Sys=0.000000s + User=0.390000s Real=0.394516s Sys=0.000000s RunAction: End of run actions are started HistoManager: End of run actions are started RunID# 2 ================================================================= @@ -959,7 +958,7 @@ Index : 7 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.680000s Real=0.688321s Sys=0.000000s + User=0.580000s Real=0.583516s Sys=0.000000s RunAction: End of run actions are started HistoManager: End of run actions are started RunID# 3 ================================================================= diff --git a/examples/extended/errorpropagation/errProp/errProp.out b/examples/extended/errorpropagation/errProp/errProp.out index c2606516d5e..4aa0090e128 100644 --- a/examples/extended/errorpropagation/errProp/errProp.out +++ b/examples/extended/errorpropagation/errProp/errProp.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -18,7 +18,8 @@ WWW : http://geant4.org/ ************************************************************** - creating G4RunManagerKernel 0xabc0b0 + creating G4RunManagerKernel 0xf54450 + G4ChordFinder: stepperDriverId: 2 The materials defined are : @@ -93,17 +94,18 @@ G4Transportation: Current values for thresholds related to the killing of loop Important Energy = 250 ( above this tracks are given multiple chances ) Extra Trials = 10 'important' tracks, i.e. those above 'important' energy G4Transportation constructor> set fShortStepOptimisation to false -0xd6ff20G4ErrorPhysicsList:: particle process manager e+ = 0xd74d00 -0xd6fdd0G4ErrorPhysicsList:: particle process manager e- = 0xd792c0 -0xd6f860G4ErrorPhysicsList:: particle process manager gamma = 0xd793f0 -0xd71330G4ErrorPhysicsList:: particle process manager geantino = 0xd79640 -0xd700b0G4ErrorPhysicsList:: particle process manager mu+ = 0xd79890 -0xd70480G4ErrorPhysicsList:: particle process manager mu- = 0xd79ae0 -0xd70890G4ErrorPhysicsList:: particle process manager pi+ = 0xd79d30 -0xd70ce0G4ErrorPhysicsList:: particle process manager pi- = 0xd79f80 -0xd71100G4ErrorPhysicsList:: particle process manager proton = 0xd7a1d0 +0x1205490G4ErrorPhysicsList:: particle process manager e+ = 0x120a250 +0x1205340G4ErrorPhysicsList:: particle process manager e- = 0x120e700 +0x1204dd0G4ErrorPhysicsList:: particle process manager gamma = 0x120e8b0 +0x1206840G4ErrorPhysicsList:: particle process manager geantino = 0x120eb00 +0x12055e0G4ErrorPhysicsList:: particle process manager mu+ = 0x120ed50 +0x1205990G4ErrorPhysicsList:: particle process manager mu- = 0x120efa0 +0x1205da0G4ErrorPhysicsList:: particle process manager pi+ = 0x120f1f0 +0x12061f0G4ErrorPhysicsList:: particle process manager pi- = 0x120f440 +0x1206610G4ErrorPhysicsList:: particle process manager proton = 0x120f690 physicsList->CheckParticleList() start. physicsList->setCut() start. + G4ChordFinder: stepperDriverId: 2 ======================================================================= ====== Electromagnetic Physics Parameters ======== ======================================================================= diff --git a/examples/extended/eventgenerator/exgps/History b/examples/extended/eventgenerator/exgps/History index cc07b70bb59..1b522bbe90a 100644 --- a/examples/extended/eventgenerator/exgps/History +++ b/examples/extended/eventgenerator/exgps/History @@ -1,12 +1,11 @@ # Example exgps History See `CONTRIBUTING.rst` for details of **required** info/format for each entry, -which **must** added in reverse chronological order (newest at the top). -It must **not** be used as a substitute for writing good git commit messages! +which **must** added in reverse chronological order (newest at the top). It must **not** +be used as a substitute for writing good git commit messages! -------------------------------------------------------------------------------- -## 2023-01-09 Ben Morgan (exgps-V11-00-01) +## 2023-01-09 Ben Morgan (exgps-V11-01-00) - Use PROJECT_ scoped _SOURCE/BINARY_DIR variables in place of CMAKE_ scope version to ease use of Geant4 as a CMake subproject. - Fixes [GitHub PR #52](https://github.com/Geant4/geant4/pull/52) diff --git a/examples/extended/eventgenerator/exgps/exgps_batch.out b/examples/extended/eventgenerator/exgps/exgps_batch.out index bd84559e36f..9c63a2048ae 100644 --- a/examples/extended/eventgenerator/exgps/exgps_batch.out +++ b/examples/extended/eventgenerator/exgps/exgps_batch.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 diff --git a/examples/extended/eventgenerator/particleGun/particleGun_run1.out b/examples/extended/eventgenerator/particleGun/particleGun_run1.out index 509eec49734..f6b78d38c48 100644 --- a/examples/extended/eventgenerator/particleGun/particleGun_run1.out +++ b/examples/extended/eventgenerator/particleGun/particleGun_run1.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -67,7 +67,7 @@ Step# X Y Z KineE dEStep StepLeng T Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000390s Sys=0.000000s + User=0.000000s Real=0.000380s Sys=0.000000s # /tracking/verbose 0 /run/beamOn 5 @@ -87,7 +87,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 5 - User=0.000000s Real=0.000059s Sys=0.000000s + User=0.000000s Real=0.000030s Sys=0.000000s ================== Deleting memory pools =================== Number of memory pools allocated: 9 of which, static: 0 Dynamic pools deleted: 9 / Total memory freed: 0.015 MB diff --git a/examples/extended/eventgenerator/particleGun/particleGun_run2.out b/examples/extended/eventgenerator/particleGun/particleGun_run2.out index c34034bbf73..f4359dbce37 100644 --- a/examples/extended/eventgenerator/particleGun/particleGun_run2.out +++ b/examples/extended/eventgenerator/particleGun/particleGun_run2.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -49,7 +49,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100000 - User=0.210000s Real=0.215130s Sys=0.000000s + User=0.190000s Real=0.195883s Sys=0.000000s ... write file : run2.root - done ... close file : run2.root - done ================== Deleting memory pools =================== diff --git a/examples/extended/eventgenerator/particleGun/particleGun_run3.out b/examples/extended/eventgenerator/particleGun/particleGun_run3.out index dcb9580f364..326d2490427 100644 --- a/examples/extended/eventgenerator/particleGun/particleGun_run3.out +++ b/examples/extended/eventgenerator/particleGun/particleGun_run3.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -50,7 +50,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100000 - User=0.260000s Real=0.268022s Sys=0.000000s + User=0.240000s Real=0.240023s Sys=0.000000s ... write file : run3.root - done ... close file : run3.root - done ================== Deleting memory pools =================== diff --git a/examples/extended/eventgenerator/particleGun/particleGun_run4.out b/examples/extended/eventgenerator/particleGun/particleGun_run4.out index 8802a993fbd..5637dea24e2 100644 --- a/examples/extended/eventgenerator/particleGun/particleGun_run4.out +++ b/examples/extended/eventgenerator/particleGun/particleGun_run4.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -65,7 +65,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000000 - User=3.370000s Real=3.388386s Sys=0.000000s + User=3.260000s Real=3.308031s Sys=0.000000s ... write file : run4.root - done ... close file : run4.root - done ================== Deleting memory pools =================== diff --git a/examples/extended/eventgenerator/pythia/py8decayer/.README.txt b/examples/extended/eventgenerator/pythia/py8decayer/.README.txt index c68dc0619ef..9d057b9f032 100644 --- a/examples/extended/eventgenerator/pythia/py8decayer/.README.txt +++ b/examples/extended/eventgenerator/pythia/py8decayer/.README.txt @@ -32,7 +32,7 @@ ## Installation of Pythia8: - NOTE: As of October 2022, pythia8.3.0.7 is the most current version, + NOTE: As of April 2023, pythia8.3.0.9 is the most current version, thus it is used in this example. In the future, please check updates at Pythia8 site: https://pythia.org @@ -40,13 +40,13 @@ - 2. Download desired version of Pythia8 and un-tar it, e.g. \verbatim -wget https://pythia.org/download/pythia83/pythia8307.tgz -tar xzf pythia8307.tgz +wget https://pythia.org/download/pythia83/pythia8309.tgz +tar xzf pythia8309.tgz \endverbatim - 3. Build/install Pythia8 \verbatim -cd pythia8307 +cd pythia8309 export CXX=\`which g++\` ./configure --prefix=$PWD --cxx=$CXX make @@ -55,7 +55,7 @@ make If one wants to turn to e.g. C++17 standard, one needs to override flags via --cxx-common argument to configure script. Alternatively, one can setup CXX_COMMON environment variable. - As of pythia8307, the default flags are the following: + As of pythia8309, the default flags are the following: -O2 -std=c++11 -pedantic -W -Wall -Wshadow -pthread Please note use of -pthread which was not among default flags in earlier relesaes of Pythia8. @@ -191,7 +191,7 @@ export PYTHIA8=$PWD It appears that Geant4 sets (at least) masses of quarks as listed in PDG. For details on default settings for the quark masses in Pythia8 please refer to the Pythia8 manual: - https://pythia.org/manuals/pythia8307/Welcome.html + https://pythia.org/manuals/pythia8309/Welcome.html See Particles and Decays section, Particle Data subsection. Beyond quarks/diquarks some differences in mass central values or width have also diff --git a/examples/extended/eventgenerator/pythia/py8decayer/History b/examples/extended/eventgenerator/pythia/py8decayer/History index 93f1e975863..971df3037da 100644 --- a/examples/extended/eventgenerator/pythia/py8decayer/History +++ b/examples/extended/eventgenerator/pythia/py8decayer/History @@ -4,6 +4,10 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-04-22 Julia Yarba (p8decayer-V11-01-00) +- Test vs Pythia8.3.0.9 which is the latest as of April 2023 +- Update README and .README.txt + ## 2022-10-20 Julia Yarba (p8decayer-V11-00-05) - Minor cleanups in .README.txt diff --git a/examples/extended/eventgenerator/pythia/py8decayer/README b/examples/extended/eventgenerator/pythia/py8decayer/README index c4711adee52..d63a3e085ff 100644 --- a/examples/extended/eventgenerator/pythia/py8decayer/README +++ b/examples/extended/eventgenerator/pythia/py8decayer/README @@ -30,26 +30,26 @@ Installation of Pythia8: - NOTE: As of October 2022, pythia8.3.0.7 is the most current version, + NOTE: As of April 2023, pythia8.3.0.9 is the most current version, thus 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 https://pythia.org/download/pythia83/pythia8307.tgz - tar xzf pythia8307.tgz + wget https://pythia.org/download/pythia83/pythia8309.tgz + tar xzf pythia8309.tgz 3. Build/install Pythia8 - cd pythia8307 + cd pythia8309 export CXX=\`which g++\` ./configure --prefix=$PWD --cxx=$CXX make - NOTE: By default, Pythia8 (as of 8.3.0.7) builds with C++11 standards. + NOTE: By default, Pythia8 (as of 8.3.0.9) 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. Alternatively, one can setup CXX_COMMON environment variable. - As of pythia8307, the default flags are the following: + As of pythia8309, the default flags are the following: -O2 -std=c++11 -pedantic -W -Wall -Wshadow -pthread Please note use of -pthread which was not among default flags in earlier relesaes of Pythia8. @@ -180,7 +180,7 @@ It appears that Geant4 sets (at least) masses of quarks as listed in PDG. For details on default settings for the quark masses in Pythia8 please refer to the Pythia8 manual: - https://pythia.org/manuals/pythia8307/Welcome.html + https://pythia.org/manuals/pythia8309/Welcome.html See Particles and Decays section, Particle Data subsection. Beyond quarks/diquarks some differences in mass central values or width have also diff --git a/examples/extended/eventgenerator/userPrimaryGenerator/userPrimaryGenerator.out b/examples/extended/eventgenerator/userPrimaryGenerator/userPrimaryGenerator.out index 0355b0fde7c..13b41396aa2 100644 --- a/examples/extended/eventgenerator/userPrimaryGenerator/userPrimaryGenerator.out +++ b/examples/extended/eventgenerator/userPrimaryGenerator/userPrimaryGenerator.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -50,7 +50,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100000 - User=0.370000s Real=0.367107s Sys=0.000000s + User=0.410000s Real=0.415706s Sys=0.000000s ================== Deleting memory pools =================== Number of memory pools allocated: 9 of which, static: 0 Dynamic pools deleted: 9 / Total memory freed: 0.013 MB diff --git a/examples/extended/exoticphysics/History b/examples/extended/exoticphysics/History index 1ff2963c170..caaa208b271 100644 --- a/examples/extended/exoticphysics/History +++ b/examples/extended/exoticphysics/History @@ -1,12 +1,11 @@ # Example exoticphysics History See `CONTRIBUTING.rst` for details of **required** info/format for each entry, -which **must** added in reverse chronological order (newest at the top). -It must **not** be used as a substitute for writing good git commit messages! +which **must** added in reverse chronological order (newest at the top). It must **not** +be used as a substitute for writing good git commit messages! -------------------------------------------------------------------------------- -## 2023-01-09 Ben Morgan (exExoticPhysics-V11-00-01) +## 2023-01-09 Ben Morgan (exExoticPhysics-V11-01-00) - Use PROJECT_ scoped _SOURCE/BINARY_DIR variables in place of CMAKE_ scope version to ease use of Geant4 as a CMake subproject. - Fixes [GitHub PR #52](https://github.com/Geant4/geant4/pull/52) diff --git a/examples/extended/exoticphysics/channeling/channeling.out b/examples/extended/exoticphysics/channeling/channeling.out index f9344d83747..cc62377e077 100644 --- a/examples/extended/exoticphysics/channeling/channeling.out +++ b/examples/extended/exoticphysics/channeling/channeling.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -249,9 +251,9 @@ ePairProd: for e- XStype:3 SubType=4 ===== EM models for the G4Region DefaultRegionForTheWorld ====== ePairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi -CoulombScat: for e- XStype:3 SubType=1 BuildTable=1 - Lambda table from 100 eV to 100 TeV, 7 bins/decade, spline: 0 - 0 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 +CoulombScat: for e- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 7 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eDPWACoulombScattering : Emin= 0 eV Emax= 100 MeV @@ -277,9 +279,9 @@ ePairProd: for e+ XStype:1 SubType=4 ===== EM models for the G4Region DefaultRegionForTheWorld ====== ePairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi -CoulombScat: for e+ XStype:3 SubType=1 BuildTable=1 - Lambda table from 100 eV to 100 TeV, 7 bins/decade, spline: 0 - 0 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 +CoulombScat: for e+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 7 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eDPWACoulombScattering : Emin= 0 eV Emax= 100 MeV @@ -308,9 +310,9 @@ hPairProd: for proton XStype:3 SubType=4 ===== EM models for the G4Region DefaultRegionForTheWorld ====== hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi -CoulombScat: for proton XStype:3 SubType=1 BuildTable=1 - Lambda table from 100 eV to 100 TeV, 7 bins/decade, spline: 0 - 0 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 +CoulombScat: for proton XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 7 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -321,8 +323,8 @@ ionIoni: for GenericIon XStype:3 SubType=2 ===== EM models for the G4Region DefaultRegionForTheWorld ====== LindhardSorensen : Emin= 0 eV Emax= 100 TeV -CoulombScat: for GenericIon XStype:3 SubType=1 BuildTable=0 - 0 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 +CoulombScat: for GenericIon XStype:2 SubType=1 BuildTable=0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== IonCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -334,8 +336,8 @@ ionIoni: for alpha XStype:3 SubType=2 BraggIon : Emin= 0 eV Emax=7.9452 MeV BetheBloch : Emin=7.9452 MeV Emax= 100 TeV -CoulombScat: for alpha XStype:3 SubType=1 BuildTable=0 - 0 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 +CoulombScat: for alpha XStype:2 SubType=1 BuildTable=0 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== IonCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -360,9 +362,9 @@ hPairProd: for anti_proton XStype:1 SubType=4 ===== EM models for the G4Region DefaultRegionForTheWorld ====== hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi -CoulombScat: for anti_proton XStype:3 SubType=1 BuildTable=1 - Lambda table from 100 eV to 100 TeV, 7 bins/decade, spline: 0 - 0 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 +CoulombScat: for anti_proton XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 7 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -387,9 +389,9 @@ hPairProd: for kaon+ XStype:1 SubType=4 ===== EM models for the G4Region DefaultRegionForTheWorld ====== hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi -CoulombScat: for kaon+ XStype:3 SubType=1 BuildTable=1 - Lambda table from 100 eV to 100 TeV, 7 bins/decade, spline: 0 - 0 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 +CoulombScat: for kaon+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 7 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -414,9 +416,9 @@ hPairProd: for kaon- XStype:1 SubType=4 ===== EM models for the G4Region DefaultRegionForTheWorld ====== hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi -CoulombScat: for kaon- XStype:3 SubType=1 BuildTable=1 - Lambda table from 100 eV to 100 TeV, 7 bins/decade, spline: 0 - 0 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 +CoulombScat: for kaon- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 7 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -441,9 +443,9 @@ muPairProd: for mu+ XStype:1 SubType=4 ===== EM models for the G4Region DefaultRegionForTheWorld ====== muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi -CoulombScat: for mu+ XStype:3 SubType=1 BuildTable=1 - Lambda table from 100 eV to 100 TeV, 7 bins/decade, spline: 0 - 0 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 +CoulombScat: for mu+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 7 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -468,9 +470,9 @@ muPairProd: for mu- XStype:1 SubType=4 ===== EM models for the G4Region DefaultRegionForTheWorld ====== muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi -CoulombScat: for mu- XStype:3 SubType=1 BuildTable=1 +CoulombScat: for mu- XStype:2 SubType=1 BuildTable=1 Used Lambda table of mu+ - 0 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -495,9 +497,9 @@ hPairProd: for pi+ XStype:1 SubType=4 ===== EM models for the G4Region DefaultRegionForTheWorld ====== hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi -CoulombScat: for pi+ XStype:3 SubType=1 BuildTable=1 - Lambda table from 100 eV to 100 TeV, 7 bins/decade, spline: 0 - 0 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 +CoulombScat: for pi+ XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 7 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -522,9 +524,9 @@ hPairProd: for pi- XStype:1 SubType=4 ===== EM models for the G4Region DefaultRegionForTheWorld ====== hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi -CoulombScat: for pi- XStype:3 SubType=1 BuildTable=1 - Lambda table from 100 eV to 100 TeV, 7 bins/decade, spline: 0 - 0 < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 +CoulombScat: for pi- XStype:2 SubType=1 BuildTable=1 + Lambda table from 100 eV to 100 TeV, 7 bins/decade, spline: 1 + 0 < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -909,12 +911,21 @@ CoulombScat: for pi- XStype:3 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1968,12 +1979,12 @@ Using Run terminated. Run Summary Number of events processed : 1000 - User=84.570000s Real=85.856272s Sys=0.010000s + User=73.230000s Real=79.938972s Sys=0.020000s ... write file : ExExCh.root - done ... close file : ExExCh.root - done Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== Number of memory pools allocated: 16 of which, static: 1 -Dynamic pools deleted: 15 / Total memory freed: 0.048 MB +Dynamic pools deleted: 15 / Total memory freed: 0.061 MB ============================================================ diff --git a/examples/extended/exoticphysics/dmparticle/dmparticle.out b/examples/extended/exoticphysics/dmparticle/dmparticle.out index 778a69fefb4..a0178aa334d 100644 --- a/examples/extended/exoticphysics/dmparticle/dmparticle.out +++ b/examples/extended/exoticphysics/dmparticle/dmparticle.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -212,7 +214,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -244,7 +246,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -277,7 +279,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -297,7 +299,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -344,7 +345,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -377,7 +378,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -410,7 +411,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -443,7 +444,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -476,7 +477,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -509,7 +510,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -542,7 +543,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1120,7 +1121,7 @@ Event = 0 z0 = -779.999 Primary direction = (0,0,1) Run terminated. Run Summary Number of events processed : 100 - User=0.660000s Real=0.666499s Sys=0.000000s + User=0.610000s Real=0.619124s Sys=0.000000s RunAction: End of run actions are started 1 Nevt= 100 Edep= 4040.08 ==================================================== Beam Particle: proton diff --git a/examples/extended/exoticphysics/monopole/monopole.out b/examples/extended/exoticphysics/monopole/monopole.out index 5f79007c7f9..a3f9c8ad446 100644 --- a/examples/extended/exoticphysics/monopole/monopole.out +++ b/examples/extended/exoticphysics/monopole/monopole.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -42,6 +42,8 @@ Monopole is created: m(GeV)= 100 Qel= 0 Qmag= 68.518 --------------------------------------------------------- G4MonopoleEquation::G4MonopoleEquation + G4ChordFinder: stepperDriverId: 2 + G4ChordFinder: stepperDriverId: 2 hInelastic FTFP_BERT : threshold between BERT and FTFP is over the interval for pions : 3 to 6 GeV @@ -74,6 +76,8 @@ G4ProcessManager: particle[monopole] /run/printProgress 10 /testex/fld/setField 0.2 tesla G4MonopoleEquation::G4MonopoleEquation + G4ChordFinder: stepperDriverId: 2 + G4ChordFinder: stepperDriverId: 2 /gun/particle monopole /gun/energy 100 GeV /run/beamOn 100 @@ -195,7 +199,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -227,7 +231,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -259,7 +263,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -272,7 +276,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -318,7 +321,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -350,7 +353,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -382,7 +385,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -414,7 +417,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -446,7 +449,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -478,7 +481,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -510,7 +513,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -895,12 +898,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -955,7 +967,7 @@ Index : 1 used in the geometry : Yes The run consists of 100 monopole of 100 GeV through 10 cm of G4_Si (density: 2.33 g/cm3 ) - Projected Range= 7.7953 cm rms= 228.45 um + Projected Range= 7.7972 cm rms= 186.97 um ################################################################## ### Stopping Powers and Cross Sections diff --git a/examples/extended/exoticphysics/saxs/saxs-slits.out b/examples/extended/exoticphysics/saxs/saxs-slits.out index 0d07fd387f2..f8697ee28ac 100644 --- a/examples/extended/exoticphysics/saxs/saxs-slits.out +++ b/examples/extended/exoticphysics/saxs/saxs-slits.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -191,7 +191,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -225,7 +225,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -402,7 +402,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -434,7 +434,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -556,7 +556,7 @@ Setting was ignored. Run terminated. Run Summary Number of events processed : 1000000 - User=15.770000s Real=15.933461s Sys=0.060000s + User=14.000000s Real=19.787042s Sys=0.070000s --------------------End of Global Run----------------------- The run had 1000000 events... write file : output.root - done @@ -566,4 +566,4 @@ Number of memory pools allocated: 14 of which, static: 0 Dynamic pools deleted: 14 / Total memory freed: 0.028 MB ============================================================ Execution completed -User=17.510000s Real=17.784857s Sys=0.090000s +User=15.690000s Real=24.464679s Sys=0.120000s diff --git a/examples/extended/exoticphysics/saxs/saxs.out b/examples/extended/exoticphysics/saxs/saxs.out index ed920299e8e..5c033bfaee3 100644 --- a/examples/extended/exoticphysics/saxs/saxs.out +++ b/examples/extended/exoticphysics/saxs/saxs.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -181,7 +181,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -215,7 +215,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -392,7 +392,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -424,7 +424,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -539,7 +539,7 @@ Setting was ignored. Run terminated. Run Summary Number of events processed : 1000000 - User=26.810000s Real=27.324931s Sys=0.320000s + User=18.680000s Real=23.246795s Sys=0.300000s --------------------End of Global Run----------------------- The run had 1000000 events... write file : output.root - done @@ -549,4 +549,4 @@ Number of memory pools allocated: 14 of which, static: 0 Dynamic pools deleted: 14 / Total memory freed: 0.025 MB ============================================================ Execution completed -User=28.530000s Real=29.511123s Sys=0.360000s +User=20.320000s Real=25.672667s Sys=0.350000s diff --git a/examples/extended/exoticphysics/ucn/ExUCN.out b/examples/extended/exoticphysics/ucn/ExUCN.out index 9ac95e6259c..988e81136fe 100644 --- a/examples/extended/exoticphysics/ucn/ExUCN.out +++ b/examples/extended/exoticphysics/ucn/ExUCN.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -44,6 +44,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo + G4ChordFinder: stepperDriverId: 2 Visualization Manager instantiating with verbosity "warnings (3)"... Visualization Manager initialising... Registering graphics systems... @@ -68,7 +69,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -1498,7 +1501,7 @@ Terminate current event processing. Run terminated. Run Summary Number of events processed : 1 - User=0.030000s Real=0.031137s Sys=0.000000s + User=0.020000s Real=0.029590s Sys=0.000000s Sum NoMT: 0 Sum NoMRT: 0 Sum NoMRCondition: 0 diff --git a/examples/extended/field/BlineTracer/BlineTracer.out b/examples/extended/field/BlineTracer/BlineTracer.out index f4bc2951206..0a7bc26e4c8 100644 --- a/examples/extended/field/BlineTracer/BlineTracer.out +++ b/examples/extended/field/BlineTracer/BlineTracer.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 diff --git a/examples/extended/field/field01/field01.out b/examples/extended/field/field01/field01.out index ece80656ec6..68ead277254 100644 --- a/examples/extended/field/field01/field01.out +++ b/examples/extended/field/field01/field01.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -35,6 +35,7 @@ field01: Using G4TransportationParameters to set looper parameters. G4ExplicitEuler is chosen. The minimal step is equal to 0.003 mm 2. Creating ChordFinder. + G4ChordFinder: stepperDriverId: 2 3. Updating Field Manager (chord finder, field-ptr). 4/5. Updating eps_min and eps_max in Field Manager. F01FieldSetup: requesting Max(imum) Epsilon = 0.005 @@ -45,12 +46,14 @@ F01FieldSetup: requesting Max(imum) Epsilon = 0.005 G4DormandPrince745 Stepper is chosen The minimal step is equal to 0.003 mm 2. Creating ChordFinder. + G4ChordFinder: stepperDriverId: 2 3. Updating Field Manager (chord finder, field-ptr). F01FieldSetup::CreateStepperAndChordFinder() called. 1. Creating Stepper. G4DormandPrince745 Stepper is chosen The minimal step is equal to 0.01 mm 2. Creating ChordFinder. + G4ChordFinder: stepperDriverId: 2 3. Updating Field Manager (chord finder, field-ptr). ========= Table of registered couples ============================ @@ -72,11 +75,68 @@ Index : 0 used in the geometry : Yes Step# X Y Z Direction x dir y dir z KineE dEStep StepLeng TrakLeng Volume Process 0 0 fm 0 fm 21.9895 m 0 0 -1 500 MeV 0 eV 0 fm 0 fm World initStep - 1 0 fm 0 fm -22 m 0 0 -1 500 MeV 107.243 meV 43.9895 m 43.9895 m OutOfWorld Transportation + 1 0 fm 0 fm 17.5806 m 0 0 -1 500 MeV 10.7487 meV 4.40895 m 4.40895 m World Transportation + 2 0 fm 0 fm 13.6125 m 0 0 -1 500 MeV 9.67384 meV 3.96806 m 8.37701 m World Transportation + 3 0 fm 0 fm 10.0412 m 0 0 -1 500 MeV 8.70646 meV 3.57125 m 11.9483 m World Transportation + 4 0 fm 0 fm 6.82712 m 0 0 -1 500 MeV 7.83581 meV 3.21412 m 15.1624 m World Transportation + 5 0 fm 0 fm 3.93441 m 0 0 -1 500 MeV 7.05223 meV 2.89271 m 18.0551 m World Transportation + 6 0 fm 0 fm 1.33097 m 0 0 -1 500 MeV 6.34701 meV 2.60344 m 20.6585 m World Transportation + 7 0 fm 0 fm -1.01213 m 0 0 -1 500 MeV 5.71231 meV 2.3431 m 23.0016 m World Transportation + 8 0 fm 0 fm -3.12092 m 0 0 -1 500 MeV 5.14107 meV 2.10879 m 25.1104 m World Transportation + 9 0 fm 0 fm -5.01882 m 0 0 -1 500 MeV 4.62697 meV 1.89791 m 27.0083 m World Transportation + 10 0 fm 0 fm -6.72694 m 0 0 -1 500 MeV 4.16427 meV 1.70812 m 28.7164 m World Transportation + 11 0 fm 0 fm -8.26425 m 0 0 -1 500 MeV 3.74784 meV 1.53731 m 30.2537 m World Transportation + 12 0 fm 0 fm -9.64782 m 0 0 -1 500 MeV 3.37306 meV 1.38358 m 31.6373 m World Transportation + 13 0 fm 0 fm -10.893 m 0 0 -1 500 MeV 3.03575 meV 1.24522 m 32.8825 m World Transportation + 14 0 fm 0 fm -12.0137 m 0 0 -1 500 MeV 2.73218 meV 1.1207 m 34.0032 m World Transportation + 15 0 fm 0 fm -13.0224 m 0 0 -1 500 MeV 2.45896 meV 1.00863 m 35.0119 m World Transportation + 16 0 fm 0 fm -13.9301 m 0 0 -1 500 MeV 2.21306 meV 90.7764 cm 35.9196 m World Transportation + 17 0 fm 0 fm -14.7471 m 0 0 -1 500 MeV 1.99176 meV 81.6987 cm 36.7366 m World Transportation + 18 0 fm 0 fm -15.4824 m 0 0 -1 500 MeV 1.79258 meV 73.5289 cm 37.4719 m World Transportation + 19 0 fm 0 fm -16.1442 m 0 0 -1 500 MeV 1.61332 meV 66.176 cm 38.1337 m World Transportation + 20 0 fm 0 fm -16.7397 m 0 0 -1 500 MeV 1.45199 meV 59.5584 cm 38.7292 m World Transportation + 21 0 fm 0 fm -17.2758 m 0 0 -1 500 MeV 1.30679 meV 53.6025 cm 39.2653 m World Transportation + 22 0 fm 0 fm -17.7582 m 0 0 -1 500 MeV 1.17611 meV 48.2423 cm 39.7477 m World Transportation + 23 0 fm 0 fm -18.1924 m 0 0 -1 500 MeV 1.0585 meV 43.4181 cm 40.1819 m World Transportation + 24 0 fm 0 fm -18.5831 m 0 0 -1 500 MeV 0.952652 meV 39.0763 cm 40.5726 m World Transportation + 25 0 fm 0 fm -18.9348 m 0 0 -1 500 MeV 0.857386 meV 35.1686 cm 40.9243 m World Transportation + 26 0 fm 0 fm -19.2513 m 0 0 -1 500 MeV 0.771648 meV 31.6518 cm 41.2408 m World Transportation + 27 0 fm 0 fm -19.5362 m 0 0 -1 500 MeV 0.694483 meV 28.4866 cm 41.5257 m World Transportation + 28 0 fm 0 fm -19.7926 m 0 0 -1 500 MeV 0.625035 meV 25.6379 cm 41.7821 m World Transportation + 29 0 fm 0 fm -20.0233 m 0 0 -1 500 MeV 0.562531 meV 23.0741 cm 42.0128 m World Transportation + 30 0 fm 0 fm -20.231 m 0 0 -1 500 MeV 0.506278 meV 20.7667 cm 42.2205 m World Transportation + 31 0 fm 0 fm -20.4179 m 0 0 -1 500 MeV 0.45565 meV 18.69 cm 42.4074 m World Transportation + 32 0 fm 0 fm -20.5861 m 0 0 -1 500 MeV 0.410085 meV 16.821 cm 42.5756 m World Transportation + 33 0 fm 0 fm -20.7375 m 0 0 -1 500 MeV 0.369077 meV 15.1389 cm 42.727 m World Transportation + 34 0 fm 0 fm -20.8737 m 0 0 -1 500 MeV 0.332169 meV 13.625 cm 42.8632 m World Transportation + 35 0 fm 0 fm -20.9964 m 0 0 -1 500 MeV 0.298952 meV 12.2625 cm 42.9859 m World Transportation + 36 0 fm 0 fm -21.1067 m 0 0 -1 500 MeV 0.269057 meV 11.0363 cm 43.0962 m World Transportation + 37 0 fm 0 fm -21.2061 m 0 0 -1 500 MeV 0.242151 meV 9.93266 cm 43.1956 m World Transportation + 38 0 fm 0 fm -21.2955 m 0 0 -1 500 MeV 0.217936 meV 8.93939 cm 43.285 m World Transportation + 39 0 fm 0 fm -21.3759 m 0 0 -1 500 MeV 0.196143 meV 8.04545 cm 43.3654 m World Transportation + 40 0 fm 0 fm -21.4483 m 0 0 -1 500 MeV 0.176528 meV 7.24091 cm 43.4378 m World Transportation + 41 0 fm 0 fm -21.5135 m 0 0 -1 500 MeV 0.158875 meV 6.51682 cm 43.503 m World Transportation + 42 0 fm 0 fm -21.5721 m 0 0 -1 500 MeV 0.142988 meV 5.86514 cm 43.5616 m World Transportation + 43 0 fm 0 fm -21.6249 m 0 0 -1 500 MeV 0.128689 meV 5.27862 cm 43.6144 m World Transportation + 44 0 fm 0 fm -21.6724 m 0 0 -1 500 MeV 0.11582 meV 4.75076 cm 43.6619 m World Transportation + 45 0 fm 0 fm -21.7152 m 0 0 -1 500 MeV 0.104238 meV 4.27568 cm 43.7047 m World Transportation + 46 0 fm 0 fm -21.7537 m 0 0 -1 500 MeV 0.0938144 meV 3.84812 cm 43.7432 m World Transportation + 47 0 fm 0 fm -21.7883 m 0 0 -1 500 MeV 0.0844329 meV 3.4633 cm 43.7778 m World Transportation + 48 0 fm 0 fm -21.8195 m 0 0 -1 500 MeV 0.0759896 meV 3.11697 cm 43.809 m World Transportation + 49 0 fm 0 fm -21.8475 m 0 0 -1 500 MeV 0.0683907 meV 2.80528 cm 43.837 m World Transportation + 50 0 fm 0 fm -21.8728 m 0 0 -1 500 MeV 0.0615516 meV 2.52475 cm 43.8623 m World Transportation + 51 0 fm 0 fm -21.8955 m 0 0 -1 500 MeV 0.0553964 meV 2.27227 cm 43.885 m World Transportation + 52 0 fm 0 fm -21.9159 m 0 0 -1 500 MeV 0.0498568 meV 2.04505 cm 43.9054 m World Transportation + 53 0 fm 0 fm -21.9344 m 0 0 -1 500 MeV 0.0448711 meV 1.84054 cm 43.9239 m World Transportation + 54 0 fm 0 fm -21.9509 m 0 0 -1 500 MeV 0.040384 meV 1.65649 cm 43.9404 m World Transportation + 55 0 fm 0 fm -21.9658 m 0 0 -1 500 MeV 0.0363456 meV 1.49084 cm 43.9553 m World Transportation + 56 0 fm 0 fm -21.9792 m 0 0 -1 500 MeV 0.032711 meV 1.34175 cm 43.9687 m World Transportation + 57 0 fm 0 fm -21.9913 m 0 0 -1 500 MeV 0.0294399 meV 1.20758 cm 43.9808 m World Transportation + 58 0 fm 0 fm -22 m 0 0 -1 500 MeV 0.0211665 meV 8.68215 mm 43.9895 m OutOfWorld Transportation Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000710s Sys=0.000000s + User=0.000000s Real=0.001220s Sys=0.000000s ========= Table of registered couples ============================ @@ -97,11 +157,68 @@ Index : 0 used in the geometry : Yes Step# X Y Z Direction x dir y dir z KineE dEStep StepLeng TrakLeng Volume Process 0 0 fm 0 fm 21.9895 m 0 0 -1 250 MeV 0 eV 0 fm 0 fm World initStep - 1 0 fm 0 fm -22 m 0 0 -1 250 MeV 101.212 meV 43.9895 m 43.9895 m OutOfWorld Transportation + 1 0 fm 0 fm 17.5806 m 0 0 -1 250 MeV 10.1442 meV 4.40895 m 4.40895 m World Transportation + 2 0 fm 0 fm 13.6125 m 0 0 -1 250 MeV 9.12977 meV 3.96806 m 8.37701 m World Transportation + 3 0 fm 0 fm 10.0412 m 0 0 -1 250 MeV 8.21679 meV 3.57125 m 11.9483 m World Transportation + 4 0 fm 0 fm 6.82712 m 0 0 -1 250 MeV 7.39511 meV 3.21412 m 15.1624 m World Transportation + 5 0 fm 0 fm 3.93441 m 0 0 -1 250 MeV 6.6556 meV 2.89271 m 18.0551 m World Transportation + 6 0 fm 0 fm 1.33097 m 0 0 -1 250 MeV 5.99004 meV 2.60344 m 20.6585 m World Transportation + 7 0 fm 0 fm -1.01213 m 0 0 -1 250 MeV 5.39104 meV 2.3431 m 23.0016 m World Transportation + 8 0 fm 0 fm -3.12092 m 0 0 -1 250 MeV 4.85193 meV 2.10879 m 25.1104 m World Transportation + 9 0 fm 0 fm -5.01882 m 0 0 -1 250 MeV 4.36674 meV 1.89791 m 27.0083 m World Transportation + 10 0 fm 0 fm -6.72694 m 0 0 -1 250 MeV 3.93007 meV 1.70812 m 28.7164 m World Transportation + 11 0 fm 0 fm -8.26425 m 0 0 -1 250 MeV 3.53706 meV 1.53731 m 30.2537 m World Transportation + 12 0 fm 0 fm -9.64782 m 0 0 -1 250 MeV 3.18335 meV 1.38358 m 31.6373 m World Transportation + 13 0 fm 0 fm -10.893 m 0 0 -1 250 MeV 2.86502 meV 1.24522 m 32.8825 m World Transportation + 14 0 fm 0 fm -12.0137 m 0 0 -1 250 MeV 2.57852 meV 1.1207 m 34.0032 m World Transportation + 15 0 fm 0 fm -13.0224 m 0 0 -1 250 MeV 2.32066 meV 1.00863 m 35.0119 m World Transportation + 16 0 fm 0 fm -13.9301 m 0 0 -1 250 MeV 2.0886 meV 90.7764 cm 35.9196 m World Transportation + 17 0 fm 0 fm -14.7471 m 0 0 -1 250 MeV 1.87974 meV 81.6987 cm 36.7366 m World Transportation + 18 0 fm 0 fm -15.4824 m 0 0 -1 250 MeV 1.69176 meV 73.5289 cm 37.4719 m World Transportation + 19 0 fm 0 fm -16.1442 m 0 0 -1 250 MeV 1.52259 meV 66.176 cm 38.1337 m World Transportation + 20 0 fm 0 fm -16.7397 m 0 0 -1 250 MeV 1.37033 meV 59.5584 cm 38.7292 m World Transportation + 21 0 fm 0 fm -17.2758 m 0 0 -1 250 MeV 1.2333 meV 53.6025 cm 39.2653 m World Transportation + 22 0 fm 0 fm -17.7582 m 0 0 -1 250 MeV 1.10997 meV 48.2423 cm 39.7477 m World Transportation + 23 0 fm 0 fm -18.1924 m 0 0 -1 250 MeV 0.99897 meV 43.4181 cm 40.1819 m World Transportation + 24 0 fm 0 fm -18.5831 m 0 0 -1 250 MeV 0.899073 meV 39.0763 cm 40.5726 m World Transportation + 25 0 fm 0 fm -18.9348 m 0 0 -1 250 MeV 0.809166 meV 35.1686 cm 40.9243 m World Transportation + 26 0 fm 0 fm -19.2513 m 0 0 -1 250 MeV 0.728249 meV 31.6518 cm 41.2408 m World Transportation + 27 0 fm 0 fm -19.5362 m 0 0 -1 250 MeV 0.655424 meV 28.4866 cm 41.5257 m World Transportation + 28 0 fm 0 fm -19.7926 m 0 0 -1 250 MeV 0.589882 meV 25.6379 cm 41.7821 m World Transportation + 29 0 fm 0 fm -20.0233 m 0 0 -1 250 MeV 0.530894 meV 23.0741 cm 42.0128 m World Transportation + 30 0 fm 0 fm -20.231 m 0 0 -1 250 MeV 0.477804 meV 20.7667 cm 42.2205 m World Transportation + 31 0 fm 0 fm -20.4179 m 0 0 -1 250 MeV 0.430024 meV 18.69 cm 42.4074 m World Transportation + 32 0 fm 0 fm -20.5861 m 0 0 -1 250 MeV 0.387021 meV 16.821 cm 42.5756 m World Transportation + 33 0 fm 0 fm -20.7375 m 0 0 -1 250 MeV 0.348319 meV 15.1389 cm 42.727 m World Transportation + 34 0 fm 0 fm -20.8737 m 0 0 -1 250 MeV 0.313487 meV 13.625 cm 42.8632 m World Transportation + 35 0 fm 0 fm -20.9964 m 0 0 -1 250 MeV 0.282139 meV 12.2625 cm 42.9859 m World Transportation + 36 0 fm 0 fm -21.1067 m 0 0 -1 250 MeV 0.253925 meV 11.0363 cm 43.0962 m World Transportation + 37 0 fm 0 fm -21.2061 m 0 0 -1 250 MeV 0.228532 meV 9.93266 cm 43.1956 m World Transportation + 38 0 fm 0 fm -21.2955 m 0 0 -1 250 MeV 0.205679 meV 8.93939 cm 43.285 m World Transportation + 39 0 fm 0 fm -21.3759 m 0 0 -1 250 MeV 0.185111 meV 8.04545 cm 43.3654 m World Transportation + 40 0 fm 0 fm -21.4483 m 0 0 -1 250 MeV 0.1666 meV 7.24091 cm 43.4378 m World Transportation + 41 0 fm 0 fm -21.5135 m 0 0 -1 250 MeV 0.14994 meV 6.51682 cm 43.503 m World Transportation + 42 0 fm 0 fm -21.5721 m 0 0 -1 250 MeV 0.134946 meV 5.86514 cm 43.5616 m World Transportation + 43 0 fm 0 fm -21.6249 m 0 0 -1 250 MeV 0.121451 meV 5.27862 cm 43.6144 m World Transportation + 44 0 fm 0 fm -21.6724 m 0 0 -1 250 MeV 0.109306 meV 4.75076 cm 43.6619 m World Transportation + 45 0 fm 0 fm -21.7152 m 0 0 -1 250 MeV 0.0983756 meV 4.27568 cm 43.7047 m World Transportation + 46 0 fm 0 fm -21.7537 m 0 0 -1 250 MeV 0.0885381 meV 3.84812 cm 43.7432 m World Transportation + 47 0 fm 0 fm -21.7883 m 0 0 -1 250 MeV 0.0796843 meV 3.4633 cm 43.7778 m World Transportation + 48 0 fm 0 fm -21.8195 m 0 0 -1 250 MeV 0.0717158 meV 3.11697 cm 43.809 m World Transportation + 49 0 fm 0 fm -21.8475 m 0 0 -1 250 MeV 0.0645443 meV 2.80528 cm 43.837 m World Transportation + 50 0 fm 0 fm -21.8728 m 0 0 -1 250 MeV 0.0580898 meV 2.52475 cm 43.8623 m World Transportation + 51 0 fm 0 fm -21.8955 m 0 0 -1 250 MeV 0.0522809 meV 2.27227 cm 43.885 m World Transportation + 52 0 fm 0 fm -21.9159 m 0 0 -1 250 MeV 0.0470528 meV 2.04505 cm 43.9054 m World Transportation + 53 0 fm 0 fm -21.9344 m 0 0 -1 250 MeV 0.0423475 meV 1.84054 cm 43.9239 m World Transportation + 54 0 fm 0 fm -21.9509 m 0 0 -1 250 MeV 0.0381127 meV 1.65649 cm 43.9404 m World Transportation + 55 0 fm 0 fm -21.9658 m 0 0 -1 250 MeV 0.0343015 meV 1.49084 cm 43.9553 m World Transportation + 56 0 fm 0 fm -21.9792 m 0 0 -1 250 MeV 0.0308713 meV 1.34175 cm 43.9687 m World Transportation + 57 0 fm 0 fm -21.9913 m 0 0 -1 250 MeV 0.0277842 meV 1.20758 cm 43.9808 m World Transportation + 58 0 fm 0 fm -22 m 0 0 -1 250 MeV 0.019976 meV 8.68215 mm 43.9895 m OutOfWorld Transportation Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000117s Sys=0.000000s + User=0.000000s Real=0.000746s Sys=0.000000s ========= Table of registered couples ============================ @@ -122,11 +239,68 @@ Index : 0 used in the geometry : Yes Step# X Y Z Direction x dir y dir z KineE dEStep StepLeng TrakLeng Volume Process 0 0 fm 0 fm 21.9895 m 0 0 -1 200 MeV 0 eV 0 fm 0 fm World initStep - 1 0 fm 0 fm -22 m 0 0 -1 200 MeV 99.2707 meV 43.9895 m 43.9895 m OutOfWorld Transportation + 1 0 fm 0 fm 17.5806 m 0 0 -1 200 MeV 9.94964 meV 4.40895 m 4.40895 m World Transportation + 2 0 fm 0 fm 13.6125 m 0 0 -1 200 MeV 8.95468 meV 3.96806 m 8.37701 m World Transportation + 3 0 fm 0 fm 10.0412 m 0 0 -1 200 MeV 8.05921 meV 3.57125 m 11.9483 m World Transportation + 4 0 fm 0 fm 6.82712 m 0 0 -1 200 MeV 7.25329 meV 3.21412 m 15.1624 m World Transportation + 5 0 fm 0 fm 3.93441 m 0 0 -1 200 MeV 6.52796 meV 2.89271 m 18.0551 m World Transportation + 6 0 fm 0 fm 1.33097 m 0 0 -1 200 MeV 5.87516 meV 2.60344 m 20.6585 m World Transportation + 7 0 fm 0 fm -1.01213 m 0 0 -1 200 MeV 5.28765 meV 2.3431 m 23.0016 m World Transportation + 8 0 fm 0 fm -3.12092 m 0 0 -1 200 MeV 4.75888 meV 2.10879 m 25.1104 m World Transportation + 9 0 fm 0 fm -5.01882 m 0 0 -1 200 MeV 4.28299 meV 1.89791 m 27.0083 m World Transportation + 10 0 fm 0 fm -6.72694 m 0 0 -1 200 MeV 3.85469 meV 1.70812 m 28.7164 m World Transportation + 11 0 fm 0 fm -8.26425 m 0 0 -1 200 MeV 3.46923 meV 1.53731 m 30.2537 m World Transportation + 12 0 fm 0 fm -9.64782 m 0 0 -1 200 MeV 3.1223 meV 1.38358 m 31.6373 m World Transportation + 13 0 fm 0 fm -10.893 m 0 0 -1 200 MeV 2.81007 meV 1.24522 m 32.8825 m World Transportation + 14 0 fm 0 fm -12.0137 m 0 0 -1 200 MeV 2.52907 meV 1.1207 m 34.0032 m World Transportation + 15 0 fm 0 fm -13.0224 m 0 0 -1 200 MeV 2.27616 meV 1.00863 m 35.0119 m World Transportation + 16 0 fm 0 fm -13.9301 m 0 0 -1 200 MeV 2.04854 meV 90.7764 cm 35.9196 m World Transportation + 17 0 fm 0 fm -14.7471 m 0 0 -1 200 MeV 1.84369 meV 81.6987 cm 36.7366 m World Transportation + 18 0 fm 0 fm -15.4824 m 0 0 -1 200 MeV 1.65932 meV 73.5289 cm 37.4719 m World Transportation + 19 0 fm 0 fm -16.1442 m 0 0 -1 200 MeV 1.49339 meV 66.176 cm 38.1337 m World Transportation + 20 0 fm 0 fm -16.7397 m 0 0 -1 200 MeV 1.34405 meV 59.5584 cm 38.7292 m World Transportation + 21 0 fm 0 fm -17.2758 m 0 0 -1 200 MeV 1.20964 meV 53.6025 cm 39.2653 m World Transportation + 22 0 fm 0 fm -17.7582 m 0 0 -1 200 MeV 1.08868 meV 48.2423 cm 39.7477 m World Transportation + 23 0 fm 0 fm -18.1924 m 0 0 -1 200 MeV 0.979812 meV 43.4181 cm 40.1819 m World Transportation + 24 0 fm 0 fm -18.5831 m 0 0 -1 200 MeV 0.881831 meV 39.0763 cm 40.5726 m World Transportation + 25 0 fm 0 fm -18.9348 m 0 0 -1 200 MeV 0.793647 meV 35.1686 cm 40.9243 m World Transportation + 26 0 fm 0 fm -19.2513 m 0 0 -1 200 MeV 0.714283 meV 31.6518 cm 41.2408 m World Transportation + 27 0 fm 0 fm -19.5362 m 0 0 -1 200 MeV 0.642854 meV 28.4866 cm 41.5257 m World Transportation + 28 0 fm 0 fm -19.7926 m 0 0 -1 200 MeV 0.578569 meV 25.6379 cm 41.7821 m World Transportation + 29 0 fm 0 fm -20.0233 m 0 0 -1 200 MeV 0.520712 meV 23.0741 cm 42.0128 m World Transportation + 30 0 fm 0 fm -20.231 m 0 0 -1 200 MeV 0.468641 meV 20.7667 cm 42.2205 m World Transportation + 31 0 fm 0 fm -20.4179 m 0 0 -1 200 MeV 0.421777 meV 18.69 cm 42.4074 m World Transportation + 32 0 fm 0 fm -20.5861 m 0 0 -1 200 MeV 0.379599 meV 16.821 cm 42.5756 m World Transportation + 33 0 fm 0 fm -20.7375 m 0 0 -1 200 MeV 0.341639 meV 15.1389 cm 42.727 m World Transportation + 34 0 fm 0 fm -20.8737 m 0 0 -1 200 MeV 0.307475 meV 13.625 cm 42.8632 m World Transportation + 35 0 fm 0 fm -20.9964 m 0 0 -1 200 MeV 0.276728 meV 12.2625 cm 42.9859 m World Transportation + 36 0 fm 0 fm -21.1067 m 0 0 -1 200 MeV 0.249055 meV 11.0363 cm 43.0962 m World Transportation + 37 0 fm 0 fm -21.2061 m 0 0 -1 200 MeV 0.224149 meV 9.93266 cm 43.1956 m World Transportation + 38 0 fm 0 fm -21.2955 m 0 0 -1 200 MeV 0.201735 meV 8.93939 cm 43.285 m World Transportation + 39 0 fm 0 fm -21.3759 m 0 0 -1 200 MeV 0.181561 meV 8.04545 cm 43.3654 m World Transportation + 40 0 fm 0 fm -21.4483 m 0 0 -1 200 MeV 0.163405 meV 7.24091 cm 43.4378 m World Transportation + 41 0 fm 0 fm -21.5135 m 0 0 -1 200 MeV 0.147064 meV 6.51682 cm 43.503 m World Transportation + 42 0 fm 0 fm -21.5721 m 0 0 -1 200 MeV 0.132358 meV 5.86514 cm 43.5616 m World Transportation + 43 0 fm 0 fm -21.6249 m 0 0 -1 200 MeV 0.119122 meV 5.27862 cm 43.6144 m World Transportation + 44 0 fm 0 fm -21.6724 m 0 0 -1 200 MeV 0.10721 meV 4.75076 cm 43.6619 m World Transportation + 45 0 fm 0 fm -21.7152 m 0 0 -1 200 MeV 0.096489 meV 4.27568 cm 43.7047 m World Transportation + 46 0 fm 0 fm -21.7537 m 0 0 -1 200 MeV 0.0868401 meV 3.84812 cm 43.7432 m World Transportation + 47 0 fm 0 fm -21.7883 m 0 0 -1 200 MeV 0.0781561 meV 3.4633 cm 43.7778 m World Transportation + 48 0 fm 0 fm -21.8195 m 0 0 -1 200 MeV 0.0703405 meV 3.11697 cm 43.809 m World Transportation + 49 0 fm 0 fm -21.8475 m 0 0 -1 200 MeV 0.0633064 meV 2.80528 cm 43.837 m World Transportation + 50 0 fm 0 fm -21.8728 m 0 0 -1 200 MeV 0.0569758 meV 2.52475 cm 43.8623 m World Transportation + 51 0 fm 0 fm -21.8955 m 0 0 -1 200 MeV 0.0512782 meV 2.27227 cm 43.885 m World Transportation + 52 0 fm 0 fm -21.9159 m 0 0 -1 200 MeV 0.0461504 meV 2.04505 cm 43.9054 m World Transportation + 53 0 fm 0 fm -21.9344 m 0 0 -1 200 MeV 0.0415354 meV 1.84054 cm 43.9239 m World Transportation + 54 0 fm 0 fm -21.9509 m 0 0 -1 200 MeV 0.0373818 meV 1.65649 cm 43.9404 m World Transportation + 55 0 fm 0 fm -21.9658 m 0 0 -1 200 MeV 0.0336436 meV 1.49084 cm 43.9553 m World Transportation + 56 0 fm 0 fm -21.9792 m 0 0 -1 200 MeV 0.0302793 meV 1.34175 cm 43.9687 m World Transportation + 57 0 fm 0 fm -21.9913 m 0 0 -1 200 MeV 0.0272513 meV 1.20758 cm 43.9808 m World Transportation + 58 0 fm 0 fm -22 m 0 0 -1 200 MeV 0.0195929 meV 8.68215 mm 43.9895 m OutOfWorld Transportation Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000085s Sys=0.000000s + User=0.000000s Real=0.000725s Sys=0.000000s ========= Table of registered couples ============================ @@ -147,11 +321,68 @@ Index : 0 used in the geometry : Yes Step# X Y Z Direction x dir y dir z KineE dEStep StepLeng TrakLeng Volume Process 0 0 fm 0 fm 21.9895 m 0 0 -1 100 MeV 0 eV 0 fm 0 fm World initStep - 1 0 fm 0 fm -22 m -6.91047e-07 -1.81478e-07 -1 100 MeV 93.2533 meV 43.9895 m 43.9895 m OutOfWorld Transportation + 1 8.92113 mm -1.78691 cm 17.5806 m 6.28145e-08 -3.40789e-08 -1 100 MeV 9.34671 meV 4.40903 m 4.40903 m World Transportation + 2 8.92403 mm -1.78679 cm 13.6125 m -1.23559e-05 2.85155e-05 -1 100 MeV 8.41188 meV 3.96806 m 8.37709 m World Transportation + 3 8.91722 mm -1.78731 cm 10.0412 m 3.96458e-05 -3.85094e-05 -1 100 MeV 7.57069 meV 3.57125 m 11.9483 m World Transportation + 4 -967.158 um -1.5954 cm 6.82712 m 6.58553e-05 -5.02286e-05 -1 100 MeV 6.81368 meV 3.21415 m 15.1625 m World Transportation + 5 -958.285 um -1.59381 cm 3.93441 m -9.10665e-05 3.71204e-05 -1 100 MeV 6.13226 meV 2.89271 m 18.0552 m World Transportation + 6 -963.758 um -1.59356 cm 1.33097 m -0.000115374 -1.67489e-05 -1 100 MeV 5.51903 meV 2.60344 m 20.6586 m World Transportation + 7 -949.121 um -1.59515 cm -1.01213 m 4.12576e-05 0.000127324 -1 100 MeV 4.96728 meV 2.34317 m 23.0018 m World Transportation + 8 -962.698 um -1.59313 cm -3.12092 m -0.000157685 -6.31324e-06 -1 100 MeV 4.47044 meV 2.1088 m 25.1106 m World Transportation + 9 -960.719 um -1.593 cm -5.01882 m -0.000170399 1.31717e-05 -1 100 MeV 4.02354 meV 1.89799 m 27.0086 m World Transportation + 10 -945.594 um -1.59565 cm -6.72694 m 9.04455e-05 0.000162039 -1 100 MeV 3.62104 meV 1.70812 m 28.7167 m World Transportation + 11 -972.522 um -1.59296 cm -8.26425 m -0.000174202 -0.000103012 -1 100 MeV 3.25893 meV 1.53731 m 30.254 m World Transportation + 12 -984.115 um -1.59485 cm -9.64782 m 1.19868e-05 -0.000217118 -1 100 MeV 2.93304 meV 1.38358 m 31.6376 m World Transportation + 13 -984.877 um -1.59421 cm -10.893 m -5.08682e-05 -0.000224623 -1 100 MeV 2.63974 meV 1.24522 m 32.8828 m World Transportation + 14 800.786 um -1.17185 cm -12.0137 m -0.000243515 3.73474e-05 -1 100 MeV 2.3758 meV 1.12071 m 34.0035 m World Transportation + 15 15.2238 um -4.43631 mm -13.0224 m 0.000236792 9.4724e-05 -1 100 MeV 2.13829 meV 1.00868 m 35.0122 m World Transportation + 16 -2.61206 mm 1.70801 mm -13.9301 m -0.000267891 2.1271e-05 -1 100 MeV 1.92446 meV 90.7809 cm 35.92 m World Transportation + 17 -4.00024 mm -6.32998 mm -14.7471 m 3.9528e-05 -0.000285409 -1 100 MeV 1.73209 meV 81.7063 cm 36.7371 m World Transportation + 18 -3.98467 mm -6.35405 mm -15.4824 m 0.000276508 -0.000132098 -1 100 MeV 1.55874 meV 73.5289 cm 37.4724 m World Transportation + 19 -3.97751 mm -6.35879 mm -16.1442 m 0.000323174 -6.15286e-05 -1 100 MeV 1.40286 meV 66.176 cm 38.1341 m World Transportation + 20 -514.338 um -8.12297 mm -16.7397 m 0.000282701 -0.000188329 -1 100 MeV 1.26263 meV 59.5608 cm 38.7297 m World Transportation + 21 -457.327 um -1.45866 cm -17.2758 m -1.70759e-07 -0.000357301 -1 100 MeV 1.13648 meV 53.61 cm 39.2658 m World Transportation + 22 -423.016 um -1.45486 cm -17.7582 m -0.000374209 -1.95608e-05 -1 100 MeV 1.02269 meV 48.2423 cm 39.7483 m World Transportation + 23 880.064 um -1.42544 cm -18.1924 m 0.000142683 0.000367796 -1 100 MeV 0.920428 meV 43.4185 cm 40.1824 m World Transportation + 24 802.829 um -1.42546 cm -18.5831 m 0.00014445 -0.000392422 -1 100 MeV 0.828378 meV 39.0763 cm 40.5732 m World Transportation + 25 876.238 um -1.42123 cm -18.9348 m -0.000271515 0.000330125 -1 100 MeV 0.74554 meV 35.1687 cm 40.9249 m World Transportation + 26 807.893 um -1.42677 cm -19.2513 m 0.000273734 -0.000342592 -1 100 MeV 0.671084 meV 31.6564 cm 41.2415 m World Transportation + 27 886.273 um -1.42241 cm -19.5362 m -0.00015545 0.000428891 -1 100 MeV 0.603888 meV 28.4866 cm 41.5263 m World Transportation + 28 795.255 um -1.42272 cm -19.7926 m -0.000124947 -0.000466972 -1 100 MeV 0.543499 meV 25.638 cm 41.7827 m World Transportation + 29 865.433 um -1.42878 cm -20.0233 m 0.00047133 0.000223749 -1 100 MeV 0.489149 meV 23.0742 cm 42.0134 m World Transportation + 30 1.40242 mm -1.41072 cm -20.231 m -0.000433155 0.000324557 -1 100 MeV 0.440237 meV 20.7669 cm 42.2211 m World Transportation + 31 1.31721 mm -1.41312 cm -20.4179 m -0.000196196 -0.000514169 -1 100 MeV 0.396213 meV 18.6902 cm 42.408 m World Transportation + 32 -319.037 um -1.49261 cm -20.5861 m 0.00053364 -0.00014956 -1 100 MeV 0.356629 meV 16.8229 cm 42.5762 m World Transportation + 33 898.805 um -1.84475 cm -20.7375 m 0.000190615 0.000522034 -1 100 MeV 0.321114 meV 15.1476 cm 42.7277 m World Transportation + 34 -1.46189 mm -1.92746 cm -20.8737 m -0.00046609 0.000303764 -1 100 MeV 0.288929 meV 13.6294 cm 42.864 m World Transportation + 35 247.118 um -2.13265 cm -20.9964 m -0.000449498 -0.000328146 -1 100 MeV 0.260073 meV 12.2682 cm 42.9867 m World Transportation + 36 224.518 um -2.13804 cm -21.1067 m 8.14043e-05 -0.000550583 -1 100 MeV 0.233958 meV 11.0363 cm 43.0971 m World Transportation + 37 256.062 um -2.14231 cm -21.2061 m 0.000502151 -0.000240152 -1 100 MeV 0.210562 meV 9.93266 cm 43.1964 m World Transportation + 38 304.238 um -2.14234 cm -21.2955 m 0.000505007 0.000233991 -1 100 MeV 0.189506 meV 8.93939 cm 43.2858 m World Transportation + 39 333.68 um -2.13912 cm -21.3759 m 0.000188219 0.000523807 -1 100 MeV 0.170555 meV 8.04545 cm 43.3662 m World Transportation + 40 231.893 um -2.23569 cm -21.4483 m -0.000200163 0.000519247 -1 100 MeV 0.153528 meV 7.24223 cm 43.4387 m World Transportation + 41 209.238 um -2.23293 cm -21.5135 m -0.000471082 0.000296287 -1 100 MeV 0.13815 meV 6.51681 cm 43.5038 m World Transportation + 42 178.239 um -2.23207 cm -21.5721 m -0.000556512 -8.86477e-06 -1 100 MeV 0.124335 meV 5.86513 cm 43.5625 m World Transportation + 43 150.285 um -2.23286 cm -21.6249 m -0.00047868 -0.000283965 -1 100 MeV 0.111901 meV 5.27862 cm 43.6153 m World Transportation + 44 131.461 um -2.23468 cm -21.6724 m -0.000299297 -0.000469293 -1 100 MeV 0.100711 meV 4.75076 cm 43.6628 m World Transportation + 45 123.199 um -2.23689 cm -21.7152 m -8.14392e-05 -0.000550543 -1 100 MeV 0.0906401 meV 4.27568 cm 43.7055 m World Transportation + 46 829.389 um -2.06493 cm -21.7537 m 0.000127906 -0.00054162 -1 100 MeV 0.0817583 meV 3.85671 cm 43.7441 m World Transportation + 47 836.9 um -2.06669 cm -21.7883 m 0.000301625 -0.000467655 -1 100 MeV 0.0734183 meV 3.46329 cm 43.7787 m World Transportation + 48 671.265 um -2.21725 cm -21.8195 m 0.000428784 -0.000354743 -1 100 MeV 0.0662205 meV 3.12376 cm 43.81 m World Transportation + 49 -454.602 um -2.22725 cm -21.8475 m 0.000509221 -0.000224405 -1 100 MeV 0.0595614 meV 2.80964 cm 43.8381 m World Transportation + 50 592.901 um -2.29551 cm -21.8728 m 0.000548798 -9.22693e-05 -1 100 MeV 0.0536423 meV 2.53042 cm 43.8634 m World Transportation + 51 605.501 um -2.29558 cm -21.8955 m 0.000555569 3.17603e-05 -1 100 MeV 0.0481699 meV 2.27227 cm 43.8861 m World Transportation + 52 616.721 um -2.2954 cm -21.9159 m 0.000538039 0.000142242 -1 100 MeV 0.0433529 meV 2.04504 cm 43.9065 m World Transportation + 53 626.333 um -2.29505 cm -21.9344 m 0.00050362 0.000236858 -1 100 MeV 0.0390176 meV 1.84054 cm 43.9249 m World Transportation + 54 1.0511 mm -2.32086 cm -21.9509 m 0.000458528 0.000315441 -1 100 MeV 0.035145 meV 1.65786 cm 43.9415 m World Transportation + 55 1.05756 mm -2.32034 cm -21.9658 m 0.000407455 0.000379071 -1 100 MeV 0.0316043 meV 1.49084 cm 43.9564 m World Transportation + 56 778.914 um -2.36491 cm -21.9792 m 0.000353979 0.000429397 -1 100 MeV 0.0284859 meV 1.34374 cm 43.9699 m World Transportation + 57 782.871 um -2.36437 cm -21.9913 m 0.000300612 0.000468301 -1 100 MeV 0.0255994 meV 1.20758 cm 43.9819 m World Transportation + 58 785.258 um -2.36395 cm -22 m 0.000259545 0.00049225 -1 100 MeV 0.0184973 meV 8.72558 mm 43.9907 m OutOfWorld Transportation Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000096s Sys=0.000000s + User=0.000000s Real=0.001013s Sys=0.000000s ========= Table of registered couples ============================ @@ -172,16 +403,74 @@ Index : 0 used in the geometry : Yes Step# X Y Z Direction x dir y dir z KineE dEStep StepLeng TrakLeng Volume Process 0 0 fm 0 fm 21.9895 m 0 0 -1 50 MeV 0 eV 0 fm 0 fm World initStep - 1 0 fm 0 fm -22 m 4.699e-07 -6.20965e-07 -1 50 MeV 87.263 meV 43.9895 m 43.9895 m OutOfWorld Transportation + 1 0 fm 0 fm 17.5806 m 7.87373e-08 -2.1489e-08 -1 50 MeV 8.74614 meV 4.40895 m 4.40895 m World Transportation + 2 2.37466 mm 6.43751 mm 13.6125 m -2.07479e-05 -3.19225e-05 -1 50 MeV 7.87155 meV 3.96807 m 8.37702 m World Transportation + 3 2.37319 mm 6.43584 mm 10.0412 m 1.21732e-05 -6.07707e-05 -1 50 MeV 7.08437 meV 3.57125 m 11.9483 m World Transportation + 4 2.37181 mm 6.43491 mm 6.82712 m 3.04114e-05 -8.79238e-05 -1 50 MeV 6.37593 meV 3.21412 m 15.1624 m World Transportation + 5 2.371 mm 6.43365 mm 3.93441 m 5.50149e-05 -0.000103704 -1 50 MeV 5.73834 meV 2.89271 m 18.0551 m World Transportation + 6 411.125 um 8.9523 mm 1.33097 m 0.000126557 -3.87707e-05 -1 50 MeV 5.16451 meV 2.60344 m 20.6585 m World Transportation + 7 4.45511 mm 5.18768 mm -1.01213 m -1.44385e-05 0.000144825 -1 50 MeV 4.64808 meV 2.34311 m 23.0017 m World Transportation + 8 4.44083 mm 5.1821 mm -3.12092 m 9.48136e-05 -0.000134994 -1 50 MeV 4.18325 meV 2.10879 m 25.1104 m World Transportation + 9 4.43795 mm 5.18544 mm -5.01883 m 2.93519e-05 -0.000191319 -1 50 MeV 3.76493 meV 1.89791 m 27.0084 m World Transportation + 10 4.45474 mm 5.17837 mm -6.72694 m 0.000167812 0.000137626 -1 50 MeV 3.38845 meV 1.70813 m 28.7165 m World Transportation + 11 5.2981 mm 4.94247 mm -8.26425 m 0.000193433 -0.00012672 -1 50 MeV 3.04959 meV 1.53731 m 30.2538 m World Transportation + 12 5.31686 mm 4.95057 mm -9.64782 m 3.47183e-05 0.000240658 -1 50 MeV 2.74463 meV 1.38358 m 31.6374 m World Transportation + 13 5.31354 mm 4.94228 mm -10.893 m 0.000197154 0.000175724 -1 50 MeV 2.47017 meV 1.24522 m 32.8826 m World Transportation + 14 4.94463 mm 6.62255 mm -12.0137 m -0.00021083 -0.000188129 -1 50 MeV 2.22316 meV 1.1207 m 34.0033 m World Transportation + 15 4.93931 mm 6.61036 mm -13.0224 m 2.78677e-05 -0.000292308 -1 50 MeV 2.00084 meV 1.00863 m 35.0119 m World Transportation + 16 4.94492 mm 6.62445 mm -13.9301 m -0.00024809 -0.000182291 -1 50 MeV 1.80079 meV 90.7781 cm 35.9197 m World Transportation + 17 4.96809 mm 6.6021 mm -14.7471 m 0.000189772 0.000271517 -1 50 MeV 1.62068 meV 81.6987 cm 36.7367 m World Transportation + 18 4.9597 mm 6.62866 mm -15.4824 m -0.000330468 0.00010718 -1 50 MeV 1.45861 meV 73.5289 cm 37.472 m World Transportation + 19 6.71437 mm 9.1502 mm -16.1442 m -0.000365004 -4.53075e-05 -1 50 MeV 1.31277 meV 66.1773 cm 38.1337 m World Transportation + 20 4.69372 mm 8.2853 mm -16.7397 m -0.000288659 0.00026666 -1 50 MeV 1.18149 meV 59.5591 cm 38.7293 m World Transportation + 21 4.68764 mm 8.25057 mm -17.2758 m 0.000391529 0.000147512 -1 50 MeV 1.06333 meV 53.6025 cm 39.2653 m World Transportation + 22 5.14662 mm 1.07258 cm -17.7582 m -0.00041027 -0.000183852 -1 50 MeV 0.957017 meV 48.2435 cm 39.7478 m World Transportation + 23 5.14498 mm 1.0683 cm -18.1924 m 0.000427422 -0.000215866 -1 50 MeV 0.861294 meV 43.418 cm 40.182 m World Transportation + 24 5.17644 mm 1.06897 cm -18.5831 m 0.000297298 0.000400231 -1 50 MeV 0.775165 meV 39.0762 cm 40.5727 m World Transportation + 25 5.1834 mm 1.07047 cm -18.9348 m 3.59145e-06 0.000536641 -1 50 MeV 0.697648 meV 35.1686 cm 40.9244 m World Transportation + 26 2.64818 mm 1.04618 cm -19.2513 m 3.52087e-05 0.000580327 -1 50 MeV 0.627922 meV 31.6537 cm 41.241 m World Transportation + 27 2.64152 mm 1.04425 cm -19.5362 m 0.000412194 0.000449833 -1 50 MeV 0.565095 meV 28.4866 cm 41.5258 m World Transportation + 28 1.73522 mm 9.18034 mm -19.7926 m 0.000591228 -0.000259722 -1 50 MeV 0.508602 meV 25.6388 cm 41.7822 m World Transportation + 29 3.08935 mm 9.34211 mm -20.0233 m -0.000381037 -0.000567698 -1 50 MeV 0.457742 meV 23.0749 cm 42.013 m World Transportation + 30 4.03641 mm 1.09866 cm -20.231 m -0.000250922 0.000684187 -1 50 MeV 0.411986 meV 20.7683 cm 42.2206 m World Transportation + 31 3.97729 mm 1.0944 cm -20.4179 m 0.000584659 -0.000473714 -1 50 MeV 0.370759 meV 18.69 cm 42.4075 m World Transportation + 32 4.02087 mm 1.10081 cm -20.5861 m -0.000671639 0.000379973 -1 50 MeV 0.333683 meV 16.821 cm 42.5757 m World Transportation + 33 3.50556 mm 1.03454 cm -20.7375 m 0.000623593 -0.000504032 -1 50 MeV 0.300322 meV 15.1393 cm 42.7271 m World Transportation + 34 5.00415 mm 1.09826 cm -20.8737 m -0.000351706 0.00077248 -1 50 MeV 0.270316 meV 13.6267 cm 42.8634 m World Transportation + 35 4.91884 mm 1.09799 cm -20.9964 m -0.000298376 -0.000898467 -1 50 MeV 0.243255 meV 12.2625 cm 42.986 m World Transportation + 36 4.9788 mm 1.09156 cm -21.1067 m 0.000961045 0.000276045 -1 50 MeV 0.218929 meV 11.0363 cm 43.0964 m World Transportation + 37 5.0059 mm 1.0997 cm -21.2061 m -0.000633251 0.000806877 -0.999999 50 MeV 0.197036 meV 9.93266 cm 43.1957 m World Transportation + 38 4.92479 mm 1.09995 cm -21.2955 m -0.000681426 -0.000781939 -0.999999 50 MeV 0.177333 meV 8.93939 cm 43.2851 m World Transportation + 39 5.66189 mm 1.03258 cm -21.3759 m 0.000792555 -0.00067658 -0.999999 50 MeV 0.15962 meV 8.04649 cm 43.3656 m World Transportation + 40 5.73136 mm 1.0326 cm -21.4483 m 0.000788521 0.000684164 -0.999999 50 MeV 0.14364 meV 7.24092 cm 43.438 m World Transportation + 41 5.74509 mm 1.03881 cm -21.5135 m -0.000427785 0.000953042 -0.999999 50 MeV 0.129276 meV 6.51683 cm 43.5032 m World Transportation + 42 5.69639 mm 1.04196 cm -21.5721 m -0.00104487 -1.01416e-06 -0.999999 50 MeV 0.116348 meV 5.86514 cm 43.5618 m World Transportation + 43 5.65056 mm 1.03935 cm -21.6249 m -0.000533107 -0.000898665 -0.999999 50 MeV 0.104713 meV 5.27863 cm 43.6146 m World Transportation + 44 5.64721 mm 1.03458 cm -21.6724 m 0.000402347 -0.000964259 -0.999999 50 MeV 0.0942421 meV 4.75077 cm 43.6621 m World Transportation + 45 5.34471 mm 1.05795 cm -21.7152 m 0.000985704 -0.000346341 -0.999999 50 MeV 0.0848257 meV 4.27609 cm 43.7049 m World Transportation + 46 4.75814 mm 9.88485 mm -21.7537 m 0.000955632 0.000422045 -0.999999 50 MeV 0.0763784 meV 3.85025 cm 43.7434 m World Transportation + 47 5.23034 mm 1.03408 cm -21.7883 m 0.000479218 0.000928324 -0.999999 50 MeV 0.0687229 meV 3.46434 cm 43.778 m World Transportation + 48 5.7075 mm 1.08572 cm -21.8195 m -0.000139574 0.00103536 -0.999999 50 MeV 0.0618594 meV 3.11835 cm 43.8092 m World Transportation + 49 5.69599 mm 1.08838 cm -21.8475 m -0.000659808 0.000810078 -0.999999 50 MeV 0.055649 meV 2.80528 cm 43.8372 m World Transportation + 50 5.67505 mm 1.08994 cm -21.8728 m -0.000965142 0.000400008 -0.999999 50 MeV 0.0500841 meV 2.52475 cm 43.8625 m World Transportation + 51 5.65185 mm 1.09034 cm -21.8955 m -0.00104335 -5.44518e-05 -0.999999 50 MeV 0.0450757 meV 2.27228 cm 43.8852 m World Transportation + 52 5.6313 mm 1.08981 cm -21.9159 m -0.000939503 -0.000456925 -0.999999 50 MeV 0.0405681 meV 2.04505 cm 43.9057 m World Transportation + 53 5.79144 mm 1.10557 cm -21.9344 m -0.000717893 -0.000758935 -0.999999 50 MeV 0.0365173 meV 1.84085 cm 43.9241 m World Transportation + 54 5.78178 mm 1.10415 cm -21.9509 m -0.000438536 -0.000948153 -0.999999 50 MeV 0.0328601 meV 1.65649 cm 43.9406 m World Transportation + 55 5.77738 mm 1.10266 cm -21.9658 m -0.000146998 -0.00103428 -0.999999 50 MeV 0.0295741 meV 1.49084 cm 43.9555 m World Transportation + 56 5.77725 mm 1.10126 cm -21.9792 m 0.00012675 -0.00103694 -0.999999 50 MeV 0.0266167 meV 1.34175 cm 43.969 m World Transportation + 57 5.78024 mm 1.10004 cm -21.9913 m 0.000366204 -0.000978412 -0.999999 50 MeV 0.023955 meV 1.20758 cm 43.981 m World Transportation + 58 5.78429 mm 1.09923 cm -22 m 0.000526478 -0.000902285 -0.999999 50 MeV 0.0172467 meV 8.69412 mm 43.9897 m OutOfWorld Transportation Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000097s Sys=0.000000s + User=0.000000s Real=0.001193s Sys=0.000000s F01FieldSetup::CreateStepperAndChordFinder() called. 1. Creating Stepper. G4DormandPrince745 Stepper is chosen The minimal step is equal to 0.01 mm 2. Creating ChordFinder. + G4ChordFinder: stepperDriverId: 2 3. Updating Field Manager (chord finder, field-ptr). Setting Field strength to (1000,0,0) Gauss. @@ -204,13 +493,34 @@ Index : 0 used in the geometry : Yes Step# X Y Z Direction x dir y dir z KineE dEStep StepLeng TrakLeng Volume Process 0 0 fm 0 fm 21.9895 m 0 0 -1 50 MeV 0 eV 0 fm 0 fm World initStep - 1 0 fm 3.36956 m 21.9895 m -1.33249e-07 -1.51702e-08 1 50 MeV 10.4996 meV 5.2929 m 5.2929 m World Transportation - 2 -1.33249 Ang 3.36956 m 21.9905 m -9.9725e-08 -0.000593579 1 50 MeV 0.00202385 meV 1.02023 mm 5.29392 m Absorber Transportation - 3 -1.08064 nm 3.36953 m 22 m -5.57875e-08 -0.00623227 0.999981 50 MeV 0.0188455 meV 9.50007 mm 5.30342 m OutOfWorld Transportation + 1 0 fm 3.14294 m 21.1456 m -1.32443e-07 0.500921 0.865493 50 MeV 8.74614 meV 4.40895 m 4.40895 m World Transportation + 2 -14.3996 nm 3.19433 m 21.2413 m 6.62848e-08 0.444064 0.895995 50 MeV 0.215676 meV 10.8723 cm 4.51767 m World Transportation + 3 -8.12436 nm 3.23397 m 21.3273 m 7.91725e-08 0.393042 0.91952 50 MeV 0.187802 meV 9.46713 cm 4.61234 m World Transportation + 4 -892.306 um 3.26539 m 21.4043 m 3.0827e-08 0.347197 0.937792 50 MeV 0.164988 meV 8.31708 cm 4.69552 m World Transportation + 5 -892.303 um 3.2894 m 21.4738 m -6.44151e-08 0.305956 0.952046 50 MeV 0.145843 meV 7.35201 cm 4.76904 m World Transportation + 6 -892.308 um 3.30817 m 21.5363 m -5.65069e-08 0.268852 0.963182 50 MeV 0.12948 meV 6.5271 cm 4.83431 m World Transportation + 7 -180.157 um 3.32241 m 21.5927 m -1.42529e-08 0.235459 0.971884 50 MeV 0.115359 meV 5.8153 cm 4.89246 m World Transportation + 8 -180.158 um 3.33385 m 21.6433 m -1.42529e-08 0.205406 0.978677 50 MeV 0.102978 meV 5.19114 cm 4.94437 m World Transportation + 9 -180.158 um 3.34276 m 21.6889 m 1.0064e-08 0.178351 0.983967 50 MeV 0.092138 meV 4.6447 cm 4.99082 m World Transportation + 10 -180.158 um 3.34968 m 21.7299 m 4.26018e-08 0.153993 0.988072 50 MeV 0.0825597 meV 4.16185 cm 5.03244 m World Transportation + 11 -668.616 um 3.35563 m 21.7668 m 6.24563e-09 0.132061 0.991242 50 MeV 0.0740905 meV 3.73492 cm 5.06979 m World Transportation + 12 -726.708 um 3.36023 m 21.8 m -1.60593e-08 0.112311 0.993673 50 MeV 0.0665231 meV 3.35345 cm 5.10332 m World Transportation + 13 -726.708 um 3.36335 m 21.83 m -7.16612e-08 0.0945255 0.995522 50 MeV 0.0597626 meV 3.01265 cm 5.13345 m World Transportation + 14 -726.71 um 3.36569 m 21.857 m -7.88289e-08 0.0785131 0.996913 50 MeV 0.0537176 meV 2.70792 cm 5.16053 m World Transportation + 15 -726.712 um 3.36743 m 21.8812 m -7.88289e-08 0.0640975 0.997944 50 MeV 0.0483084 meV 2.43524 cm 5.18488 m World Transportation + 16 -220.431 um 3.36884 m 21.9031 m 8.87042e-09 0.0511201 0.998693 50 MeV 0.0434688 meV 2.19127 cm 5.20679 m World Transportation + 17 -220.43 um 3.36974 m 21.9228 m -3.89961e-08 0.0394372 0.999222 50 MeV 0.0390859 meV 1.97033 cm 5.22649 m World Transportation + 18 8.10732 um 3.36987 m 21.9405 m -2.52886e-08 0.0289207 0.999582 50 MeV 0.0351974 meV 1.77431 cm 5.24424 m World Transportation + 19 -421.563 um 3.36992 m 21.9565 m -5.22072e-08 0.0194554 0.999811 50 MeV 0.0316777 meV 1.59688 cm 5.26021 m World Transportation + 20 -842.116 um 3.37044 m 21.9708 m -1.00195e-07 0.0109363 0.99994 50 MeV 0.0285099 meV 1.43719 cm 5.27458 m World Transportation + 21 -842.117 um 3.37053 m 21.9837 m -7.60224e-08 0.00326836 0.999995 50 MeV 0.0256278 meV 1.2919 cm 5.2875 m World Transportation + 22 -842.117 um 3.37054 m 21.9895 m -6.41401e-08 -0.000156396 1 50 MeV 0.011446 meV 5.76994 mm 5.29327 m World Transportation + 23 -842.117 um 3.37054 m 21.9905 m -6.71101e-08 -0.000749925 1 50 MeV 0.00202385 meV 1.02023 mm 5.29429 m Absorber Transportation + 24 -842.118 um 3.3705 m 22 m -5.56673e-08 -0.00638862 0.99998 50 MeV 0.0188455 meV 9.50007 mm 5.30379 m OutOfWorld Transportation Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000223s Sys=0.000000s + User=0.000000s Real=0.000404s Sys=0.000000s ========= Table of registered couples ============================ @@ -237,7 +547,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.010000s Real=0.007917s Sys=0.000000s + User=0.020000s Real=0.014555s Sys=0.000000s # /calor/setAbsMat Xe20CO2 /calor/setWorldMat Kr20CO2 @@ -306,8 +616,8 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.030000s Real=0.029411s Sys=0.000000s + User=0.000000s Real=0.005287s Sys=0.000000s ================== Deleting memory pools =================== Number of memory pools allocated: 12 of which, static: 0 -Dynamic pools deleted: 12 / Total memory freed: 0.52 MB +Dynamic pools deleted: 12 / Total memory freed: 0.3 MB ============================================================ diff --git a/examples/extended/field/field02/field02.out b/examples/extended/field/field02/field02.out index 9b757d9d12a..0766851f472 100644 --- a/examples/extended/field/field02/field02.out +++ b/examples/extended/field/field02/field02.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -242,7 +242,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -395,7 +397,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -427,7 +429,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -459,7 +461,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -472,7 +474,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -518,7 +519,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -550,7 +551,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -582,7 +583,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -614,7 +615,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -646,7 +647,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -678,7 +679,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -710,7 +711,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1095,12 +1096,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -2832,7 +2842,13 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne 0 -7.84 um -5.55 mm 6.94 mm 1 keV 0 eV 0 fm 0 fm World initStep 1 -5.22 um -5.57 mm 6.94 mm 200 keV 1 keV 53.4 um 53.4 um World eIoni 2 -3.19 cm -9.83 cm -1.61 cm 927 MeV 26.3 keV 10.7 cm 10.7 cm World eIoni - 3 -6.57 cm -18.9 cm -6.46 cm 1.83 GeV 24.2 keV 10.9 cm 21.6 cm OutOfWorldTransportation + 3 -4.1 cm -11.4 cm -2.92 cm 1.09 GeV 7.02 keV 2.26 cm 13 cm WorldTransportation + 4 -4.78 cm -13 cm -3.88 cm 1.24 GeV 3.56 keV 1.93 cm 14.9 cm WorldTransportation + 5 -5.3 cm -14.4 cm -4.64 cm 1.38 GeV 4.84 keV 1.7 cm 16.6 cm WorldTransportation + 6 -5.72 cm -15.7 cm -5.24 cm 1.52 GeV 3.44 keV 1.51 cm 18.1 cm WorldTransportation + 7 -6.07 cm -16.9 cm -5.74 cm 1.64 GeV 1.95 keV 1.36 cm 19.5 cm WorldTransportation + 8 -6.36 cm -18 cm -6.16 cm 1.75 GeV 1.76 keV 1.22 cm 20.7 cm WorldTransportation + 9 -6.57 cm -18.9 cm -6.46 cm 1.83 GeV 2.48 keV 9.35 mm 21.6 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -2840,101 +2856,107 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -74.2 um -5.07 cm 1.55 cm 557 MeV 11.9 keV 5.55 cm 5.55 cm World eIoni - 2 -121 um -8.9 cm 1.81 cm 939 MeV 8.23 keV 3.83 cm 9.39 cm World eIoni - 3 -121 um -8.96 cm 1.82 cm 946 MeV 0 eV 688 um 9.45 cm World eIoni - 4 -123 um -9.07 cm 1.82 cm 957 MeV 108 eV 1.08 mm 9.56 cm World eIoni - 5 -179 um -15.5 cm 2.08 cm 1.6 GeV 10 keV 6.44 cm 16 cm World eIoni - 6 -204 um -20 cm 2.21 cm 2.05 GeV 8.04 keV 4.49 cm 20.5 cm OutOfWorldTransportation + 1 -329 um -10.6 cm 1.88 cm 1.1 GeV 20 keV 11 cm 11 cm World eIoni + 2 -347 um -12 cm 1.94 cm 1.25 GeV 2.27 keV 1.45 cm 12.5 cm World eIoni + 3 -424 um -20 cm 2.2 cm 2.05 GeV 20.8 keV 8 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -179 um -15.5 cm 2.08 cm 2.21 keV 0 eV 0 fm 0 fm World initStep - 1 -180 um -15.5 cm 2.08 cm 754 keV 2.21 keV 176 um 176 um World eIoni - 2 -57.9 um -16.3 cm 2.05 cm 83.2 MeV 2.24 keV 8.26 mm 8.44 mm World eIoni - 3 190 um -20 cm 2.07 cm 449 MeV 6.37 keV 3.66 cm 4.5 cm OutOfWorldTransportation + 0 -347 um -12 cm 1.94 cm 2.74 keV 0 eV 0 fm 0 fm World initStep + 1 -345 um -12 cm 1.94 cm 1.1 MeV 2.74 keV 252 um 252 um World eIoni + 2 -311 um -12.2 cm 1.94 cm 22.3 MeV 258 eV 2.12 mm 2.38 mm World eIoni + 3 -190 um -20 cm 1.95 cm 800 MeV 9.94 keV 7.78 cm 8.02 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -123 um -9.07 cm 1.82 cm 2.22 keV 0 eV 0 fm 0 fm World initStep - 1 -122 um -9.08 cm 1.82 cm 764 keV 2.22 keV 178 um 178 um World eIoni - 2 -612 um -10.3 cm 1.85 cm 125 MeV 523 eV 1.24 cm 1.26 cm World eIoni - 3 -1.14 mm -20 cm 1.96 cm 1.09 GeV 22.4 keV 9.68 cm 10.9 cm OutOfWorldTransportation + 0 -329 um -10.6 cm 1.88 cm 1.97 keV 0 eV 0 fm 0 fm World initStep + 1 -328 um -10.6 cm 1.88 cm 623 keV 1.97 keV 148 um 148 um World eIoni + 2 -326 um -20 cm 1.89 cm 945 MeV 16.8 keV 9.64 cm 9.66 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 5 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -612 um -10.3 cm 1.85 cm 1.11 keV 0 eV 0 fm 0 fm World initStep - 1 -610 um -10.3 cm 1.85 cm 235 keV 1.11 keV 61.4 um 61.4 um World eIoni - 2 -599 um -20 cm 1.85 cm 968 MeV 24.5 keV 10.8 cm 10.8 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 1.78 um -1.19 mm 3.4 mm 61.9 MeV 2.22 keV 3.66 mm 3.66 mm World eIoni + 2 110 um -7.71 cm 1.74 cm 821 MeV 15 keV 7.83 cm 8.2 cm World eIoni + 3 152 um -12.2 cm 1.96 cm 1.27 GeV 9.82 keV 4.45 cm 12.7 cm World eIoni + 4 199 um -20 cm 2.2 cm 2.05 GeV 18.7 keV 7.85 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -121 um -8.96 cm 1.82 cm 36.9 keV 0 eV 0 fm 0 fm World initStep - 1 -32.3 um -9.54 cm 1.8 cm 59.8 MeV 5.69 keV 7.02 mm 7.02 mm World eIoni - 2 523 um -9.6 cm 1.8 cm 65.8 MeV 494 eV 823 um 7.84 mm World eIoni - 3 1.3 cm -20 cm 1.87 cm 1.1 GeV 18.7 keV 10.5 cm 11.3 cm OutOfWorldTransportation + 0 152 um -12.2 cm 1.96 cm 1.06 keV 0 eV 0 fm 0 fm World initStep + 1 153 um -12.2 cm 1.96 cm 219 keV 1.06 keV 57.8 um 57.8 um World eIoni + 2 162 um -20 cm 1.96 cm 784 MeV 23.3 keV 8.66 cm 8.67 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -121 um -8.9 cm 1.81 cm 37.3 keV 0 eV 0 fm 0 fm World initStep - 1 -100 um -8.92 cm 1.82 cm 2.96 MeV 47.3 eV 302 um 302 um World eIoni - 2 -23.3 um -10.2 cm 1.83 cm 128 MeV 3.06 keV 1.25 cm 1.28 cm World eIoni - 3 -372 um -18 cm 1.86 cm 907 MeV 19.1 keV 7.79 cm 9.07 cm World eIoni - 4 -413 um -20 cm 1.86 cm 1.11 GeV 2.88 keV 2.04 cm 11.1 cm OutOfWorldTransportation + 0 110 um -7.71 cm 1.74 cm 1 keV 0 eV 0 fm 0 fm World initStep + 1 108 um -7.71 cm 1.74 cm 199 keV 1 keV 53.2 um 53.2 um World eIoni + 2 2.93 cm -16.9 cm 2.65 cm 920 MeV 24.7 keV 10.6 cm 10.7 cm World eIoni + 3 4.24 cm -17.5 cm 2.49 cm 984 MeV 3.3 keV 1.47 cm 12.1 cm WorldTransportation + 4 5.3 cm -18.2 cm 2.35 cm 1.05 GeV 2.96 keV 1.27 cm 13.4 cm WorldTransportation + 5 6.18 cm -18.9 cm 2.24 cm 1.12 GeV 2.81 keV 1.13 cm 14.5 cm WorldTransportation + 6 6.26 cm -19 cm 2.23 cm 1.13 GeV 348 eV 1.02 mm 14.6 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -372 um -18 cm 1.86 cm 57.1 keV 0 eV 0 fm 0 fm World initStep - 1 -4.9 mm -19.1 cm 2.1 cm 116 MeV 7.83 keV 1.36 cm 1.36 cm World eIoni - 2 -6.39 mm -20 cm 2.04 cm 205 MeV 2.72 keV 8.98 mm 2.26 cm OutOfWorldTransportation + 0 1.78 um -1.19 mm 3.4 mm 1.69 keV 0 eV 0 fm 0 fm World initStep + 1 -3.51 um -1.23 mm 3.4 mm 480 keV 1.69 keV 116 um 116 um World eIoni + 2 -35.7 um -20 cm 3.4 mm 1.99 GeV 43.8 keV 21.3 cm 21.3 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -74.2 um -5.07 cm 1.55 cm 12.1 keV 0 eV 0 fm 0 fm World initStep - 1 -65.4 um -5.2 cm 1.55 cm 13.7 MeV 1.99 keV 2.08 mm 2.08 mm World eIoni - 2 -968 um -6.55 cm 1.84 cm 149 MeV 3.04 keV 1.41 cm 1.61 cm World eIoni - 3 -1.8 mm -17 cm 2.08 cm 1.19 GeV 24.9 keV 10.4 cm 12 cm World eIoni - 4 -1.81 mm -17.1 cm 2.09 cm 1.2 GeV 287 eV 1.56 mm 12.2 cm World eIoni - 5 -1.91 mm -20 cm 2.11 cm 1.49 GeV 4.92 keV 2.89 cm 15.1 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 -22.5 um -1.16 cm 9.42 mm 166 MeV 3.81 keV 1.59 cm 1.59 cm World eBrem + 2 -173 um -12 cm 1.98 cm 1.25 GeV 24.9 keV 10.9 cm 12.5 cm World eIoni + 3 -290 um -18.5 cm 2.2 cm 1.9 GeV 15.6 keV 6.53 cm 19 cm World eIoni + 4 -313 um -20 cm 2.24 cm 2.05 GeV 3.13 keV 1.47 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 10, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.81 mm -17.1 cm 2.09 cm 1.18 keV 0 eV 0 fm 0 fm World initStep - 1 -1.81 mm -17.1 cm 2.09 cm 261 keV 1.18 keV 67.3 um 67.3 um World eIoni - 2 -1.83 mm -20 cm 2.09 cm 289 MeV 9.54 keV 2.96 cm 2.97 cm OutOfWorldTransportation + 0 -290 um -18.5 cm 2.2 cm 1.01 keV 0 eV 0 fm 0 fm World initStep + 1 -289 um -18.5 cm 2.2 cm 202 keV 1.01 keV 53.8 um 53.8 um World eIoni + 2 -279 um -20 cm 2.2 cm 147 MeV 4.14 keV 1.49 cm 1.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 9, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process + 0 -173 um -12 cm 1.98 cm 1.04 keV 0 eV 0 fm 0 fm World initStep + 1 -171 um -12 cm 1.98 cm 212 keV 1.04 keV 56.2 um 56.2 um World eIoni + 2 -161 um -20 cm 1.98 cm 800 MeV 20.8 keV 8.91 cm 8.92 cm OutOfWorldTransportation + +********************************************************************************************************* +* G4Track Information: Particle = gamma, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.8 mm -17 cm 2.08 cm 1.65 keV 0 eV 0 fm 0 fm World initStep - 1 -1.8 mm -17 cm 2.08 cm 459 keV 1.65 keV 112 um 112 um World eIoni - 2 -1.81 mm -20 cm 2.09 cm 305 MeV 4.32 keV 3.08 cm 3.09 cm OutOfWorldTransportation + 0 -22.5 um -1.16 cm 9.42 mm 97.3 keV 0 eV 0 fm 0 fm World initStep + 1 81.5 um -20 cm 6.94 cm 97.3 keV 0 eV 19.8 cm 19.8 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -2942,59 +2964,81 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -389 um -10.2 cm 1.9 cm 1.07 GeV 19.2 keV 10.7 cm 10.7 cm World eIoni - 2 -397 um -10.3 cm 1.91 cm 1.08 GeV 245 eV 1.47 mm 10.8 cm World eIoni - 3 -640 um -15.8 cm 2.1 cm 1.63 GeV 12.1 keV 5.45 cm 16.3 cm World eIoni - 4 -777 um -20 cm 2.22 cm 2.05 GeV 10.1 keV 4.23 cm 20.5 cm OutOfWorldTransportation + 1 141 um -6.28 cm 1.65 cm 678 MeV 10.9 keV 6.77 cm 6.77 cm World eIoni + 2 143 um -6.36 cm 1.65 cm 686 MeV 98.1 eV 763 um 6.84 cm World eIoni + 3 200 um -9.06 cm 1.82 cm 956 MeV 4.94 keV 2.71 cm 9.55 cm World eIoni + 4 311 um -20 cm 2.2 cm 2.05 GeV 21.6 keV 10.9 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -640 um -15.8 cm 2.1 cm 1.01 keV 0 eV 0 fm 0 fm World initStep - 1 -642 um -15.8 cm 2.1 cm 202 keV 1.01 keV 53.9 um 53.9 um World eIoni - 2 -664 um -20 cm 2.1 cm 423 MeV 9.64 keV 4.48 cm 4.48 cm OutOfWorldTransportation + 0 200 um -9.06 cm 1.82 cm 1.24 keV 0 eV 0 fm 0 fm World initStep + 1 197 um -9.06 cm 1.82 cm 282 keV 1.24 keV 72.2 um 72.2 um World eIoni + 2 171 um -20 cm 1.82 cm 1.09 GeV 24 keV 12 cm 12 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -397 um -10.3 cm 1.91 cm 12 keV 0 eV 0 fm 0 fm World initStep - 1 -423 um -10.5 cm 1.9 cm 13.5 MeV 3.4 keV 2.06 mm 2.06 mm World eIoni - 2 -910 um -10.5 cm 1.94 cm 17.3 MeV 216 eV 749 um 2.81 mm World eIoni - 3 -4.86 mm -18.3 cm 2.35 cm 803 MeV 14.5 keV 7.91 cm 8.19 cm World eIoni - 4 -5.03 mm -20 cm 2.37 cm 967 MeV 3.24 keV 1.65 cm 9.84 cm OutOfWorldTransportation + 0 143 um -6.36 cm 1.65 cm 6.01 keV 0 eV 0 fm 0 fm World initStep + 1 119 um -6.4 cm 1.65 cm 4.41 MeV 6.01 keV 990 um 990 um World eIoni + 2 99.3 um -6.65 cm 1.65 cm 29.7 MeV 347 eV 2.53 mm 3.52 mm World eIoni + 3 406 um -18.8 cm 1.59 cm 1.25 GeV 23.1 keV 12.2 cm 12.5 cm WorldTransportation + 4 406 um -18.8 cm 1.59 cm 1.25 GeV 0 eV 0 fm 12.5 cm World eIoni + 5 491 um -20 cm 1.58 cm 1.36 GeV 1.79 keV 1.17 cm 13.7 cm OutOfWorldTransportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 3 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process + 0 406 um -18.8 cm 1.59 cm 996 eV 0 eV 0 fm 0 fm World initStep + 1 404 um -18.8 cm 1.59 cm 198 keV 996 eV 52.9 um 52.9 um World eIoni + 2 397 um -20 cm 1.58 cm 117 MeV 2.44 keV 1.19 cm 1.19 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 5, Parent ID = 3 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.86 mm -18.3 cm 2.35 cm 1.03 keV 0 eV 0 fm 0 fm World initStep - 1 -4.87 mm -18.3 cm 2.35 cm 210 keV 1.03 keV 55.7 um 55.7 um World eIoni - 2 -4.88 mm -20 cm 2.35 cm 165 MeV 2.83 keV 1.68 cm 1.69 cm OutOfWorldTransportation + 0 99.3 um -6.65 cm 1.65 cm 3.15 keV 0 eV 0 fm 0 fm World initStep + 1 90.5 um -6.67 cm 1.65 cm 1.41 MeV 3.15 keV 319 um 319 um World eIoni + 2 -33.2 um -7.23 cm 1.65 cm 58.2 MeV 977 eV 5.68 mm 6 mm World eIoni + 3 7.47 um -19.4 cm 1.65 cm 1.28 GeV 24.8 keV 12.2 cm 12.8 cm WorldTransportation + 4 7.47 um -19.4 cm 1.65 cm 1.28 GeV4.64e-05 meV 220 fm 12.8 cm World eIoni + 5 14.3 um -20 cm 1.65 cm 1.33 GeV 254 eV 5.59 mm 13.4 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 5 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -389 um -10.2 cm 1.9 cm 6.01 keV 0 eV 0 fm 0 fm World initStep - 1 -413 um -10.2 cm 1.9 cm 4.41 MeV 6.01 keV 990 um 990 um World eIoni - 2 -430 um -10.6 cm 1.9 cm 46 MeV 607 eV 4.16 mm 5.15 mm World eIoni - 3 -430 um -12.3 cm 1.91 cm 209 MeV 3.5 keV 1.63 cm 2.14 cm World eIoni - 4 -414 um -20 cm 1.92 cm 982 MeV 15.4 keV 7.73 cm 9.88 cm OutOfWorldTransportation + 0 7.47 um -19.4 cm 1.65 cm 2.22 keV 0 eV 0 fm 0 fm World initStep + 1 12 um -19.4 cm 1.65 cm 763 keV 2.22 keV 178 um 178 um World eIoni + 2 -133 um -20 cm 1.65 cm 53.5 MeV 167 eV 5.28 mm 5.46 mm World eIoni + 3 -143 um -20 cm 1.65 cm 56 MeV 15.4 eV 242 um 5.7 mm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 7 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process + 0 -133 um -20 cm 1.65 cm 1.07 keV 0 eV 0 fm 0 fm World initStep + 1 -131 um -20 cm 1.65 cm 221 keV 1.07 keV 58.3 um 58.3 um World eIoni + 2 -128 um -20 cm 1.65 cm 2.43 MeV 0 eV 220 um 279 um OutOfWorldTransportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -430 um -12.3 cm 1.91 cm 1.13 keV 0 eV 0 fm 0 fm World initStep - 1 -431 um -12.3 cm 1.91 cm 244 keV 1.13 keV 63.4 um 63.4 um World eIoni - 2 -437 um -20 cm 1.91 cm 773 MeV 19.2 keV 8.38 cm 8.39 cm OutOfWorldTransportation + 0 141 um -6.28 cm 1.65 cm 1.16 keV 0 eV 0 fm 0 fm World initStep + 1 143 um -6.29 cm 1.65 cm 254 keV 1.16 keV 65.9 um 65.9 um World eIoni + 2 -475 um -19.9 cm 1.71 cm 1.36 GeV 32.7 keV 15.7 cm 15.7 cm World eIoni + 3 -900 um -20 cm 1.72 cm 1.37 GeV 87.6 eV 1.01 mm 15.8 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -3002,137 +3046,137 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 253 um -7.94 cm 1.76 cm 844 MeV 14.4 keV 8.43 cm 8.43 cm World eIoni - 2 432 um -14.3 cm 2.03 cm 1.48 GeV 11.8 keV 6.38 cm 14.8 cm World eIoni - 3 532 um -20 cm 2.19 cm 2.05 GeV 9.67 keV 5.69 cm 20.5 cm OutOfWorldTransportation + 1 76.6 um -4.42 cm 1.51 cm 492 MeV 9.92 keV 4.9 cm 4.9 cm World eIoni + 2 155 um -20 cm 2.23 cm 2.05 GeV 28.6 keV 15.6 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 432 um -14.3 cm 2.03 cm 1.17 keV 0 eV 0 fm 0 fm World initStep - 1 429 um -14.3 cm 2.03 cm 260 keV 1.17 keV 67.1 um 67.1 um World eIoni - 2 408 um -20 cm 2.03 cm 568 MeV 12 keV 5.98 cm 5.99 cm OutOfWorldTransportation + 0 76.6 um -4.42 cm 1.51 cm 1.51 keV 0 eV 0 fm 0 fm World initStep + 1 77.4 um -4.43 cm 1.51 cm 396 keV 1.51 keV 97.5 um 97.5 um World eIoni + 2 82.4 um -20 cm 1.51 cm 1.56 GeV 27.2 keV 16.8 cm 16.8 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 253 um -7.94 cm 1.76 cm 1.55 keV 0 eV 0 fm 0 fm World initStep - 1 248 um -7.94 cm 1.76 cm 412 keV 1.55 keV 101 um 101 um World eIoni - 2 1.17 cm -16.6 cm 3.1 cm 871 MeV 12.7 keV 9.03 cm 9.04 cm World eBrem - 3 5.06 cm -19.3 cm 5.45 cm 1.14 GeV 12.8 keV 5.34 cm 14.4 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 79.9 um -8.79 cm 1.85 cm 929 MeV 14.2 keV 9.28 cm 9.28 cm World eIoni + 2 104 um -17.3 cm 2.2 cm 1.78 GeV 21.9 keV 8.49 cm 17.8 cm World eIoni + 3 109 um -20 cm 2.28 cm 2.05 GeV 6.19 keV 2.73 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 4, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 1.17 cm -16.6 cm 3.1 cm 11.6 keV 0 eV 0 fm 0 fm World initStep - 1 7.16 cm -18.7 cm 6.72 cm 11.6 keV 0 eV 7.29 cm 7.29 cm OutOfWorldTransportation + 0 104 um -17.3 cm 2.2 cm 1.98 keV 0 eV 0 fm 0 fm World initStep + 1 97.8 um -17.3 cm 2.2 cm 627 keV 1.98 keV 149 um 149 um World eIoni + 2 73.6 um -20 cm 2.2 cm 273 MeV 5.04 keV 2.74 cm 2.76 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 10.5 um -6.36 mm 7.35 mm 114 MeV 2.75 keV 1.02 cm 1.02 cm World eIoni - 2 -4.76 um -4.19 cm 1.47 cm 469 MeV 9.06 keV 3.64 cm 4.66 cm World eIoni - 3 -64.4 um -15.8 cm 2.1 cm 1.63 GeV 22.5 keV 11.7 cm 16.3 cm World eIoni - 4 -74.6 um -20 cm 2.21 cm 2.05 GeV 9.35 keV 4.17 cm 20.5 cm OutOfWorldTransportation + 0 79.9 um -8.79 cm 1.85 cm 5.38 keV 0 eV 0 fm 0 fm World initStep + 1 98.6 um -8.82 cm 1.85 cm 2.91 MeV 2.93 keV 407 um 407 um World eIoni + 2 2.85 mm -13.6 cm 1.77 cm 477 MeV 6.89 keV 4.78 cm 4.82 cm World eIoni + 3 3.03 mm -15.1 cm 1.75 cm 634 MeV 2.86 keV 1.58 cm 6.39 cm World eIoni + 4 3.21 mm -17.2 cm 1.73 cm 843 MeV 4.88 keV 2.09 cm 8.48 cm World eIoni + 5 3.28 mm -18.3 cm 1.72 cm 949 MeV 3.81 keV 1.06 cm 9.54 cm World eIoni + 6 3.39 mm -20 cm 1.7 cm 1.12 GeV 4 keV 1.72 cm 11.3 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -64.4 um -15.8 cm 2.1 cm 1.27 keV 0 eV 0 fm 0 fm World initStep - 1 -65 um -15.8 cm 2.1 cm 295 keV 1.27 keV 75.2 um 75.2 um World eIoni - 2 -68.9 um -20 cm 2.1 cm 417 MeV 8.42 keV 4.29 cm 4.3 cm OutOfWorldTransportation + 0 3.28 mm -18.3 cm 1.72 cm 3.16 keV 0 eV 0 fm 0 fm World initStep + 1 3.28 mm -18.3 cm 1.72 cm 409 keV 186 eV 45.5 um 45.5 um World eIoni + 2 3.07 mm -20 cm 1.73 cm 172 MeV 1.91 keV 1.73 cm 1.74 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.76 um -4.19 cm 1.47 cm 2.64 keV 0 eV 0 fm 0 fm World initStep - 1 2.33 um -4.2 cm 1.47 cm 1.03 MeV 2.64 keV 236 um 236 um World eIoni - 2 -192 um -4.98 cm 1.48 cm 79.7 MeV 534 eV 7.88 mm 8.11 mm World eIoni - 3 -751 um -20 cm 1.51 cm 1.58 GeV 30.3 keV 15 cm 15.8 cm OutOfWorldTransportation + 0 3.21 mm -17.2 cm 1.73 cm 2.76 keV 0 eV 0 fm 0 fm World initStep + 1 3.2 mm -17.2 cm 1.72 cm 1.11 MeV 2.76 keV 255 um 255 um World eIoni + 2 3.18 mm -17.4 cm 1.72 cm 17.7 MeV 61.3 eV 1.66 mm 1.91 mm World eIoni + 3 3.12 mm -20 cm 1.72 cm 278 MeV 5.14 keV 2.6 cm 2.79 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 10.5 um -6.36 mm 7.35 mm 1.8 keV 0 eV 0 fm 0 fm World initStep - 1 11.5 um -6.41 mm 7.34 mm 531 keV 1.8 keV 128 um 128 um World eIoni - 2 17.4 um -20 cm 7.31 mm 1.94 GeV 27.5 keV 20.5 cm 20.5 cm OutOfWorldTransportation + 0 3.03 mm -15.1 cm 1.75 cm 12.3 keV 0 eV 0 fm 0 fm World initStep + 1 3.03 mm -15.3 cm 1.75 cm 14.1 MeV 3.17 keV 2.11 mm 2.11 mm World eIoni + 2 3.99 mm -15.2 cm 1.78 cm 8.73 MeV 33.7 eV 1.19 mm 3.3 mm World eIoni + 3 8.04 mm -20 cm 1.91 cm 486 MeV 7.59 keV 4.86 cm 5.19 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -131 um -7.4 cm 1.76 cm 790 MeV 20.3 keV 7.89 cm 7.89 cm World eIoni - 2 -140 um -13 cm 2.04 cm 1.35 GeV 12.4 keV 5.65 cm 13.5 cm World eIoni - 3 -142 um -14.2 cm 2.08 cm 1.47 GeV 2.13 keV 1.16 cm 14.7 cm World eIoni - 4 -144 um -15.6 cm 2.13 cm 1.61 GeV 1.96 keV 1.44 cm 16.1 cm World eIoni - 5 -146 um -16.7 cm 2.16 cm 1.72 GeV 980 eV 1.1 cm 17.2 cm World eIoni - 6 -150 um -20 cm 2.25 cm 2.05 GeV 7.47 keV 3.26 cm 20.5 cm OutOfWorldTransportation + 0 2.85 mm -13.6 cm 1.77 cm 3.32 keV 0 eV 0 fm 0 fm World initStep + 1 2.86 mm -13.6 cm 1.77 cm 1.55 MeV 3.32 keV 349 um 349 um World eIoni + 2 2.85 mm -13.7 cm 1.77 cm 15.2 MeV 833 eV 1.36 mm 1.71 mm World eIoni + 3 2.85 mm -13.9 cm 1.77 cm 32.3 MeV 341 eV 1.71 mm 3.42 mm World eIoni + 4 2.86 mm -18.3 cm 1.78 cm 474 MeV 10.8 keV 4.42 cm 4.76 cm World eIoni + 5 2.87 mm -20 cm 1.78 cm 645 MeV 3.48 keV 1.7 cm 6.47 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 9, Parent ID = 4 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -146 um -16.7 cm 2.16 cm 3.16 keV 0 eV 0 fm 0 fm World initStep - 1 -146 um -16.8 cm 2.16 cm 1.41 MeV 3.16 keV 320 um 320 um World eIoni - 2 -137 um -16.9 cm 2.16 cm 12 MeV 0 eV 1.06 mm 1.38 mm World eIoni - 3 -106 um -20 cm 2.16 cm 326 MeV 3.54 keV 3.14 cm 3.28 cm OutOfWorldTransportation + 0 2.86 mm -18.3 cm 1.78 cm 2.12 keV 0 eV 0 fm 0 fm World initStep + 1 2.86 mm -18.3 cm 1.78 cm 705 keV 2.12 keV 166 um 166 um World eIoni + 2 2.87 mm -20 cm 1.78 cm 170 MeV 3.24 keV 1.7 cm 1.72 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 4 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -144 um -15.6 cm 2.13 cm 7.27 keV 0 eV 0 fm 0 fm World initStep - 1 -116 um -15.7 cm 2.13 cm 6.2 MeV 4.51 keV 1.31 mm 1.31 mm World eIoni - 2 -340 um -15.7 cm 2.03 cm 9.23 MeV 154 eV 1.17 mm 2.48 mm World eIoni - 3 -841 um -20 cm 1.83 cm 437 MeV 7.52 keV 4.29 cm 4.54 cm OutOfWorldTransportation + 0 2.85 mm -13.9 cm 1.77 cm 993 eV 0 eV 0 fm 0 fm World initStep + 1 2.85 mm -13.9 cm 1.77 cm 197 keV 993 eV 52.6 um 52.6 um World eIoni + 2 2.87 mm -20 cm 1.77 cm 612 MeV 16.5 keV 6.72 cm 6.72 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -142 um -14.2 cm 2.08 cm 1.59 keV 0 eV 0 fm 0 fm World initStep - 1 -138 um -14.2 cm 2.08 cm 430 keV 1.59 keV 105 um 105 um World eIoni - 2 -117 um -20 cm 2.08 cm 580 MeV 13 keV 5.93 cm 5.94 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 -34.6 um -3.99 cm 1.44 cm 449 MeV 9.06 keV 4.47 cm 4.47 cm World eIoni + 2 231 um -19.8 cm 2.2 cm 2.03 GeV 31.8 keV 15.8 cm 20.3 cm World eIoni + 3 232 um -20 cm 2.21 cm 2.05 GeV 779 eV 2.47 mm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -140 um -13 cm 2.04 cm 2.95 keV 0 eV 0 fm 0 fm World initStep - 1 -142 um -13.1 cm 2.04 cm 1.25 MeV 2.95 keV 285 um 285 um World eIoni - 2 -112 um -13.6 cm 2.05 cm 51.3 MeV 632 eV 5.01 mm 5.3 mm World eIoni - 3 -14.9 um -20 cm 2.07 cm 696 MeV 10.4 keV 6.45 cm 6.98 cm OutOfWorldTransportation + 0 231 um -19.8 cm 2.2 cm 2.12 keV 0 eV 0 fm 0 fm World initStep + 1 224 um -19.8 cm 2.2 cm 703 keV 2.12 keV 165 um 165 um World eIoni + 2 212 um -20 cm 2.2 cm 24.8 MeV 35.5 eV 2.41 mm 2.57 mm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -131 um -7.4 cm 1.76 cm 3.66 keV 0 eV 0 fm 0 fm World initStep - 1 -130 um -7.41 cm 1.76 cm 1.84 MeV 3.66 keV 414 um 414 um World eIoni - 2 -136 um -7.72 cm 1.76 cm 32.8 MeV 508 eV 3.09 mm 3.51 mm World eIoni - 3 -26 um -20 cm 1.78 cm 1.26 GeV 24 keV 12.3 cm 12.6 cm OutOfWorldTransportation + 0 -34.6 um -3.99 cm 1.44 cm 1.11 keV 0 eV 0 fm 0 fm World initStep + 1 -32 um -4 cm 1.44 cm 236 keV 1.11 keV 61.7 um 61.7 um World eIoni + 2 2.37 cm -16.1 cm 4.5 cm 1.21 GeV 30.1 keV 14 cm 14 cm World eIoni + 3 3.24 cm -19.7 cm 9.04 cm 1.57 GeV 8.92 keV 5.92 cm 19.9 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -3140,146 +3184,143 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -720 nm -554 um 2.34 mm 55.5 MeV 446 eV 2.43 mm 2.43 mm World eIoni - 2 -29.2 um -7.05 cm 1.73 cm 756 MeV 14.6 keV 7.3 cm 7.54 cm World eIoni - 3 -30.9 um -20 cm 2.26 cm 2.05 GeV 24.8 keV 13 cm 20.5 cm OutOfWorldTransportation + 1 442 um -11.6 cm 1.94 cm 1.21 GeV 24.9 keV 12.1 cm 12.1 cm World eIoni + 2 627 um -20 cm 2.22 cm 2.05 GeV 18.8 keV 8.36 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -29.2 um -7.05 cm 1.73 cm 1.91 keV 0 eV 0 fm 0 fm World initStep - 1 -34.3 um -7.06 cm 1.73 cm 589 keV 1.91 keV 140 um 140 um World eIoni - 2 -60.4 um -20 cm 1.74 cm 1.29 GeV 21.1 keV 13.4 cm 13.4 cm OutOfWorldTransportation + 0 442 um -11.6 cm 1.94 cm 2 keV 0 eV 0 fm 0 fm World initStep + 1 440 um -11.6 cm 1.94 cm 636 keV 2 keV 150 um 150 um World eIoni + 2 -2 mm -16.5 cm 2.38 cm 484 MeV 4.98 keV 4.88 cm 4.89 cm World eIoni + 3 -3.48 mm -20 cm 2.81 cm 835 MeV 7.38 keV 3.55 cm 8.44 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -720 nm -554 um 2.34 mm 12.6 keV 0 eV 0 fm 0 fm World initStep - 1 -23.9 um -1.9 mm 2.37 mm 14.4 MeV 5.87 keV 2.15 mm 2.15 mm World eIoni - 2 -46.3 um -2.34 mm 2.19 mm 18.8 MeV 20.4 eV 476 um 2.63 mm World eIoni - 3 -275 um -2.73 cm 622 um 268 MeV 2.87 keV 2.5 cm 2.77 cm World eIoni - 4 -427 um -13.4 cm -395 um 1.34 GeV 21.3 keV 10.7 cm 13.5 cm World eIoni - 5 -453 um -16.1 cm -525 um 1.61 GeV 3.26 keV 2.71 cm 16.2 cm World eIoni - 6 -479 um -20 cm -676 um 2 GeV 4.77 keV 3.86 cm 20 cm OutOfWorldTransportation + 0 -2 mm -16.5 cm 2.38 cm 1.73 keV 0 eV 0 fm 0 fm World initStep + 1 -2 mm -16.5 cm 2.38 cm 498 keV 1.73 keV 120 um 120 um World eIoni + 2 -1.99 mm -20 cm 2.38 cm 352 MeV 4.25 keV 3.55 cm 3.56 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -453 um -16.1 cm -525 um 1.77 keV 0 eV 0 fm 0 fm World initStep - 1 -456 um -16.1 cm -521 um 515 keV 1.77 keV 124 um 124 um World eIoni - 2 -474 um -20 cm -503 um 386 MeV 5.8 keV 3.9 cm 3.91 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 -377 um -12.7 cm 2.04 cm 1.32 GeV 21.8 keV 13.2 cm 13.2 cm World eIoni + 2 -898 um -20 cm 2.24 cm 2.05 GeV 15.6 keV 7.31 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -427 um -13.4 cm -395 um 1.07 keV 0 eV 0 fm 0 fm World initStep - 1 -427 um -13.4 cm -398 um 224 keV 1.07 keV 58.9 um 58.9 um World eIoni - 2 -425 um -20 cm -421 um 657 MeV 16.2 keV 7.11 cm 7.11 cm OutOfWorldTransportation + 0 -377 um -12.7 cm 2.04 cm 1.54 keV 0 eV 0 fm 0 fm World initStep + 1 -372 um -12.7 cm 2.04 cm 411 keV 1.54 keV 101 um 101 um World eIoni + 2 -346 um -20 cm 2.04 cm 731 MeV 13.7 keV 7.54 cm 7.55 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -275 um -2.73 cm 622 um 1.9 keV 0 eV 0 fm 0 fm World initStep - 1 -278 um -2.73 cm 627 um 586 keV 1.9 keV 140 um 140 um World eIoni - 2 -297 um -20 cm 654 um 1.73 GeV 26.9 keV 18 cm 18 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 280 um -8.05 cm 1.77 cm 855 MeV 14.3 keV 8.54 cm 8.54 cm World eIoni + 2 341 um -16.7 cm 2.13 cm 1.72 GeV 19.1 keV 8.63 cm 17.2 cm World eIoni + 3 360 um -20 cm 2.22 cm 2.05 GeV 6.19 keV 3.33 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -68.9 um -6.01 cm 1.62 cm 651 MeV 13.6 keV 6.5 cm 6.5 cm World eIoni - 2 -41.8 um -11.5 cm 1.92 cm 1.2 GeV 12.9 keV 5.51 cm 12 cm World eIoni - 3 -27.8 um -20 cm 2.18 cm 2.05 GeV 18.8 keV 8.49 cm 20.5 cm OutOfWorldTransportation + 0 341 um -16.7 cm 2.13 cm 1.13 keV 0 eV 0 fm 0 fm World initStep + 1 345 um -16.7 cm 2.13 cm 244 keV 1.13 keV 63.5 um 63.5 um World eIoni + 2 366 um -20 cm 2.13 cm 333 MeV 5.11 keV 3.44 cm 3.44 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -41.8 um -11.5 cm 1.92 cm 10.4 keV 0 eV 0 fm 0 fm World initStep - 1 -75.8 um -11.6 cm 1.92 cm 5.82 MeV 1.49 keV 676 um 676 um World eIoni - 2 -2.11 mm -19.1 cm 2.16 cm 760 MeV 11.5 keV 7.56 cm 7.63 cm World eIoni - 3 -2.18 mm -20 cm 2.19 cm 849 MeV 2.56 keV 8.9 mm 8.52 cm OutOfWorldTransportation + 0 280 um -8.05 cm 1.77 cm 1.73 keV 0 eV 0 fm 0 fm World initStep + 1 285 um -8.06 cm 1.77 cm 497 keV 1.73 keV 120 um 120 um World eIoni + 2 312 um -20 cm 1.77 cm 1.19 GeV 22.4 keV 12.4 cm 12.4 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -2.11 mm -19.1 cm 2.16 cm 2.57 keV 0 eV 0 fm 0 fm World initStep - 1 -2.11 mm -19.1 cm 2.16 cm 988 keV 2.57 keV 227 um 227 um World eIoni - 2 -2.11 mm -20 cm 2.16 cm 89.1 MeV 776 eV 8.81 mm 9.04 mm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 5.89 nm -496 nm 70.5 um 50 MeV 81 eV 70.5 um 70.5 um World eIoni + 2 -17.8 um -1.23 cm 9.63 mm 173 MeV 3 keV 1.66 cm 1.66 cm World eIoni + 3 -71.1 um -8.24 cm 1.79 cm 874 MeV 14.5 keV 7.07 cm 8.73 cm World eIoni + 4 -103 um -20 cm 2.22 cm 2.05 GeV 24.1 keV 11.8 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -68.9 um -6.01 cm 1.62 cm 3.59 keV 0 eV 0 fm 0 fm World initStep - 1 -68.3 um -6.03 cm 1.62 cm 1.77 MeV 3.59 keV 400 um 400 um World eIoni - 2 -69.9 um -6.08 cm 1.63 cm 7.13 MeV 426 eV 536 um 935 um World eIoni - 3 -388 um -9.32 cm 1.61 cm 331 MeV 4.38 keV 3.23 cm 3.33 cm World eIoni - 4 -882 um -20 cm 1.59 cm 1.4 GeV 21.1 keV 10.7 cm 14 cm OutOfWorldTransportation + 0 -71.1 um -8.24 cm 1.79 cm 1.8 keV 0 eV 0 fm 0 fm World initStep + 1 -76.9 um -8.25 cm 1.79 cm 532 keV 1.8 keV 128 um 128 um World eIoni + 2 -108 um -20 cm 1.79 cm 1.18 GeV 22.1 keV 12.2 cm 12.2 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -388 um -9.32 cm 1.61 cm 11.5 keV 0 eV 0 fm 0 fm World initStep - 1 -402 um -9.37 cm 1.6 cm 5.39 MeV 1.29 keV 597 um 597 um World eIoni - 2 501 um -14.1 cm 1.7 cm 479 MeV 6.6 keV 4.77 cm 4.83 cm World eIoni - 3 -264 um -15.5 cm 1.75 cm 621 MeV 3.12 keV 1.42 cm 6.25 cm World eIoni - 4 -1.83 mm -19.9 cm 1.84 cm 1.06 GeV 5.53 keV 4.35 cm 10.6 cm World eIoni - 5 -1.87 mm -20 cm 1.85 cm 1.07 GeV 430 eV 1.31 mm 10.7 cm OutOfWorldTransportation + 0 -17.8 um -1.23 cm 9.63 mm 4 keV 0 eV 0 fm 0 fm World initStep + 1 -25.2 um -1.25 cm 9.62 mm 2.14 MeV 4 keV 482 um 482 um World eIoni + 2 -33.2 um -1.33 cm 9.61 mm 10.1 MeV 18.8 eV 800 um 1.28 mm World eIoni + 3 -112 um -2.54 cm 9.63 mm 131 MeV 4.05 keV 1.21 cm 1.33 cm World eIoni + 4 -209 um -15.3 cm 9.57 mm 1.4 GeV 26.8 keV 12.7 cm 14.1 cm World eIoni + 5 -235 um -20 cm 9.54 mm 1.88 GeV 7.57 keV 4.74 cm 18.8 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 5 +* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 3 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.83 mm -19.9 cm 1.84 cm 2.97 keV 0 eV 0 fm 0 fm World initStep - 1 -1.82 mm -19.9 cm 1.84 cm 1.26 MeV 2.97 keV 261 um 261 um World eIoni - 2 -1.63 mm -20 cm 1.82 cm 13.2 MeV 809 eV 1.24 mm 1.5 mm OutOfWorldTransportation + 0 -209 um -15.3 cm 9.57 mm 2.03 keV 0 eV 0 fm 0 fm World initStep + 1 -215 um -15.3 cm 9.57 mm 654 keV 2.03 keV 154 um 154 um World eIoni + 2 -159 um -15.6 cm 9.62 mm 30.8 MeV 1.03 keV 3.02 mm 3.18 mm World eIoni + 3 8.62 um -20 cm 9.68 mm 474 MeV 8.68 keV 4.43 cm 4.75 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 9, Parent ID = 8 +* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 6 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.82 mm -19.9 cm 1.84 cm 1.11 keV 0 eV 0 fm 0 fm World initStep - 1 -1.82 mm -19.9 cm 1.84 cm 238 keV 1.11 keV 62 um 62 um World eIoni - 2 -1.81 mm -20 cm 1.85 cm 11.9 MeV 442 eV 1.17 mm 1.23 mm OutOfWorldTransportation + 0 -159 um -15.6 cm 9.62 mm 8.86 keV 0 eV 0 fm 0 fm World initStep + 1 -189 um -15.7 cm 9.64 mm 8.68 MeV 5.73 keV 1.6 mm 1.6 mm World eIoni + 2 -2.08 mm -16.6 cm 1.1 cm 104 MeV 763 eV 1 cm 1.16 cm World eIoni + 3 -3.22 mm -20 cm 1.16 cm 443 MeV 5.52 keV 3.4 cm 4.56 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 5 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 3 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -264 um -15.5 cm 1.75 cm 1.8 keV 0 eV 0 fm 0 fm World initStep - 1 -259 um -15.5 cm 1.75 cm 533 keV 1.8 keV 128 um 128 um World eIoni - 2 -238 um -20 cm 1.75 cm 447 MeV 6.63 keV 4.52 cm 4.54 cm OutOfWorldTransportation + 0 -112 um -2.54 cm 9.63 mm 1.41 keV 0 eV 0 fm 0 fm World initStep + 1 -116 um -2.54 cm 9.63 mm 351 keV 1.41 keV 87.6 um 87.6 um World eIoni + 2 -144 um -20 cm 9.62 mm 1.75 GeV 44.2 keV 19.4 cm 19.4 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 5 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 501 um -14.1 cm 1.7 cm 1.1 keV 0 eV 0 fm 0 fm World initStep - 1 498 um -14.1 cm 1.7 cm 234 keV 1.1 keV 61.3 um 61.3 um World eIoni - 2 475 um -20 cm 1.7 cm 589 MeV 16.7 keV 6.28 cm 6.28 cm OutOfWorldTransportation + 0 5.89 nm -496 nm 70.5 um 1.96 keV 0 eV 0 fm 0 fm World initStep + 1 -4.4 um -59.3 um 70.7 um 617 keV 1.96 keV 146 um 146 um World eIoni + 2 -28.9 um -20 cm 71.9 um 2 GeV 32.3 keV 20.9 cm 21 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -3287,147 +3328,148 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -22.3 um -11.6 cm 1.91 cm 1.21 GeV 21.7 keV 12.1 cm 12.1 cm World eIoni - 2 100 um -20 cm 2.14 cm 2.05 GeV 16.5 keV 8.41 cm 20.5 cm OutOfWorldTransportation + 1 33.4 um -1.59 cm 1.06 cm 209 MeV 3.95 keV 2.03 cm 2.03 cm World eIoni + 2 40 um -6.61 cm 1.69 cm 711 MeV 10.2 keV 5.07 cm 7.1 cm World eIoni + 3 35.3 um -9.61 cm 1.87 cm 1.01 GeV 7.46 keV 3.01 cm 10.1 cm World eIoni + 4 31.8 um -13.1 cm 2.02 cm 1.36 GeV 8.01 keV 3.48 cm 13.6 cm World eIoni + 5 26.1 um -20 cm 2.23 cm 2.05 GeV 12.1 keV 6.91 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -22.3 um -11.6 cm 1.91 cm 17.2 keV 0 eV 0 fm 0 fm World initStep - 1 42.5 um -11.8 cm 1.91 cm 21.5 MeV 3.61 keV 2.83 mm 2.83 mm World eIoni - 2 1.96 mm -13.2 cm 2.04 cm 157 MeV 3.41 keV 1.39 cm 1.67 cm World eIoni - 3 3.14 mm -17.7 cm 2.14 cm 607 MeV 8.21 keV 4.5 cm 6.17 cm World eIoni - 4 3.4 mm -19.8 cm 2.16 cm 819 MeV 4.47 keV 2.12 cm 8.29 cm World eIoni - 5 3.43 mm -20 cm 2.16 cm 841 MeV 198 eV 2.2 mm 8.51 cm OutOfWorldTransportation + 0 31.8 um -13.1 cm 2.02 cm 1.27 keV 0 eV 0 fm 0 fm World initStep + 1 29 um -13.1 cm 2.02 cm 295 keV 1.27 keV 75 um 75 um World eIoni + 2 10.4 um -20 cm 2.02 cm 691 MeV 18.1 keV 7.27 cm 7.28 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 3.4 mm -19.8 cm 2.16 cm 2.78 keV 0 eV 0 fm 0 fm World initStep - 1 3.41 mm -19.8 cm 2.16 cm 1.13 MeV 2.78 keV 258 um 258 um World eIoni - 2 3.41 mm -19.8 cm 2.16 cm 5.25 MeV 0 eV 413 um 670 um World eIoni - 3 3.42 mm -20 cm 2.16 cm 22.1 MeV 239 eV 1.68 mm 2.35 mm OutOfWorldTransportation + 0 35.3 um -9.61 cm 1.87 cm 1.23 keV 0 eV 0 fm 0 fm World initStep + 1 38.8 um -9.62 cm 1.87 cm 281 keV 1.23 keV 71.9 um 71.9 um World eIoni + 2 64.3 um -20 cm 1.87 cm 1.04 GeV 25 keV 11.3 cm 11.3 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 3.14 mm -17.7 cm 2.14 cm 1.8 keV 0 eV 0 fm 0 fm World initStep - 1 3.14 mm -17.7 cm 2.14 cm 534 keV 1.8 keV 128 um 128 um World eIoni - 2 3.14 mm -20 cm 2.13 cm 234 MeV 4.61 keV 2.35 cm 2.37 cm OutOfWorldTransportation + 0 40 um -6.61 cm 1.69 cm 17.2 keV 0 eV 0 fm 0 fm World initStep + 1 105 um -6.82 cm 1.69 cm 21.5 MeV 2.52 keV 2.83 mm 2.83 mm World eIoni + 2 -2.17 mm -7.25 cm 1.7 cm 64.6 MeV 1.49 keV 4.96 mm 7.79 mm World eIoni + 3 -6.9 mm -14.9 cm 1.7 cm 831 MeV 17 keV 7.68 cm 8.46 cm World eIoni + 4 -7.33 mm -16.8 cm 1.71 cm 1.02 GeV 2.67 keV 1.89 cm 10.3 cm World eIoni + 5 -7.67 mm -18.6 cm 1.71 cm 1.2 GeV 2.87 keV 1.82 cm 12.2 cm World eIoni + 6 -7.89 mm -20 cm 1.71 cm 1.34 GeV 3.05 keV 1.37 cm 13.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 3 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -6.3 um -3.33 mm 5.52 mm 83.3 MeV 1.09 keV 6.68 mm 6.68 mm World eIoni - 2 -30.9 um -20 cm 2.22 cm 2.05 GeV 40.8 keV 19.8 cm 20.5 cm OutOfWorldTransportation + 0 -7.67 mm -18.6 cm 1.71 cm 22.2 keV 0 eV 0 fm 0 fm World initStep + 1 -7.72 mm -18.8 cm 1.71 cm 16.4 MeV 2.56 keV 1.8 mm 1.8 mm World eIoni + 2 -5.6 mm -20 cm 2.14 cm 139 MeV 4.8 keV 1.39 cm 1.57 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 3 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -6.3 um -3.33 mm 5.52 mm 1.78 keV 0 eV 0 fm 0 fm World initStep - 1 -10.5 um -3.38 mm 5.51 mm 522 keV 1.78 keV 126 um 126 um World eIoni - 2 -35.3 um -20 cm 5.5 mm 1.97 GeV 34.9 keV 20.9 cm 20.9 cm OutOfWorldTransportation + 0 -7.33 mm -16.8 cm 1.71 cm 2.32 keV 0 eV 0 fm 0 fm World initStep + 1 -7.33 mm -16.8 cm 1.71 cm 825 keV 2.32 keV 192 um 192 um World eIoni + 2 -7.35 mm -16.9 cm 1.71 cm 11.9 MeV 121 eV 1.11 mm 1.3 mm World eIoni + 3 -7.42 mm -20 cm 1.71 cm 319 MeV 6.21 keV 3.08 cm 3.21 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 3 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 4.38 um -2.99 mm 5.26 mm 79.9 MeV 1.65 keV 6.26 mm 6.26 mm World eIoni - 2 61.5 nm -20 cm 2.22 cm 2.05 GeV 37 keV 19.9 cm 20.5 cm OutOfWorldTransportation + 0 -6.9 mm -14.9 cm 1.7 cm 1.06 keV 0 eV 0 fm 0 fm World initStep + 1 -6.9 mm -14.9 cm 1.7 cm 219 keV 1.06 keV 57.7 um 57.7 um World eIoni + 2 -6.92 mm -20 cm 1.7 cm 508 MeV 12.1 keV 5.4 cm 5.41 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 4.38 um -2.99 mm 5.26 mm 3.39 keV 0 eV 0 fm 0 fm World initStep - 1 14.9 um -3.14 mm 5.26 mm 1.6 MeV 3.39 keV 361 um 361 um World eIoni - 2 -70.7 um -1.12 cm 5.11 mm 82.6 MeV 608 eV 8.11 mm 8.47 mm World eIoni - 3 -196 um -2.71 cm 5 mm 241 MeV 4.43 keV 1.59 cm 2.44 cm World eIoni - 4 -351 um -14.7 cm 4.93 mm 1.44 GeV 23.1 keV 12 cm 14.5 cm World eIoni - 5 -386 um -20 cm 4.95 mm 1.97 GeV 9.15 keV 5.26 cm 19.7 cm OutOfWorldTransportation + 0 33.4 um -1.59 cm 1.06 cm 1.07 keV 0 eV 0 fm 0 fm World initStep + 1 36.3 um -1.59 cm 1.06 cm 221 keV 1.07 keV 58.3 um 58.3 um World eIoni + 2 1.47 mm -12.5 cm -3.56 cm 1.09 GeV 32.8 keV 12.6 cm 12.6 cm World eIoni + 3 1.78 mm -20 cm -5.91 cm 1.84 GeV 13 keV 7.87 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -351 um -14.7 cm 4.93 mm 1.23 keV 0 eV 0 fm 0 fm World initStep - 1 -354 um -14.7 cm 4.93 mm 281 keV 1.23 keV 71.8 um 71.8 um World eIoni - 2 -378 um -20 cm 4.93 mm 526 MeV 11.8 keV 5.48 cm 5.49 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 -142 um -6.99 cm 1.69 cm 749 MeV 12.9 keV 7.48 cm 7.48 cm World eIoni + 2 -170 um -16.4 cm 2.09 cm 1.69 GeV 22.6 keV 9.42 cm 16.9 cm World eIoni + 3 -170 um -20 cm 2.18 cm 2.05 GeV 8.45 keV 3.6 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -196 um -2.71 cm 5 mm 4.47 keV 0 eV 0 fm 0 fm World initStep - 1 -178 um -2.74 cm 5 mm 2.61 MeV 4.47 keV 586 um 586 um World eIoni - 2 -176 um -2.75 cm 5 mm 3.59 MeV 0 eV 98.1 um 684 um World eIoni - 3 -1.6 mm -8.72 cm 4.02 mm 601 MeV 11.3 keV 5.98 cm 6.05 cm World eIoni - 4 -4.85 mm -10.2 cm 3.21 mm 751 MeV 3.99 keV 1.54 cm 7.59 cm World eIoni - 5 -9.56 mm -13.1 cm 2.03 mm 1.04 GeV 8.39 keV 2.95 cm 10.5 cm World eIoni - 6 -1.67 cm -19.9 cm 226 um 1.72 GeV 17.1 keV 6.84 cm 17.4 cm OutOfWorldTransportation + 0 -170 um -16.4 cm 2.09 cm 1.82 keV 0 eV 0 fm 0 fm World initStep + 1 -175 um -16.4 cm 2.09 cm 543 keV 1.82 keV 130 um 130 um World eIoni + 2 -198 um -20 cm 2.09 cm 360 MeV 4.72 keV 3.63 cm 3.64 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -9.56 mm -13.1 cm 2.03 mm 4.47 keV 0 eV 0 fm 0 fm World initStep - 1 -9.56 mm -13.2 cm 2.01 mm 2.61 MeV 4.47 keV 586 um 586 um World eIoni - 2 -9.56 mm -13.2 cm 2.01 mm 2.7 MeV 1.31 eV 8.92 um 595 um World eIoni - 3 -9.57 mm -20 cm 1.97 mm 684 MeV 13.6 keV 6.83 cm 6.89 cm OutOfWorldTransportation + 0 -142 um -6.99 cm 1.69 cm 3.78 keV 0 eV 0 fm 0 fm World initStep + 1 -128 um -7.01 cm 1.69 cm 1.95 MeV 3.78 keV 438 um 438 um World eIoni + 2 -127 um -7.01 cm 1.69 cm 2.21 MeV 3.88 eV 26.8 um 465 um World eIoni + 3 -90.7 um -20 cm 1.69 cm 1.3 GeV 20.1 keV 13 cm 13.1 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.85 mm -10.2 cm 3.21 mm 3.48 keV 0 eV 0 fm 0 fm World initStep - 1 -4.86 mm -10.2 cm 3.22 mm 1.68 MeV 3.48 keV 379 um 379 um World eIoni - 2 -4.86 mm -10.7 cm 3.29 mm 45.4 MeV 1.06 keV 4.37 mm 4.75 mm World eIoni - 3 -4.84 mm -20 cm 3.41 mm 977 MeV 14.6 keV 9.32 cm 9.79 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 -286 um -12.2 cm 1.94 cm 1.27 GeV 22.8 keV 12.7 cm 12.7 cm World eIoni + 2 -297 um -13.6 cm 1.99 cm 1.41 GeV 4.42 keV 1.38 cm 14.1 cm World eIoni + 3 -314 um -16 cm 2.06 cm 1.65 GeV 4.56 keV 2.38 cm 16.5 cm World eIoni + 4 -338 um -20 cm 2.17 cm 2.05 GeV 8.96 keV 4.04 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.6 mm -8.72 cm 4.02 mm 1.82 keV 0 eV 0 fm 0 fm World initStep - 1 -1.61 mm -8.73 cm 4.01 mm 547 keV 1.82 keV 130 um 130 um World eIoni - 2 -1.64 mm -20 cm 4 mm 1.13 GeV 21 keV 11.6 cm 11.6 cm OutOfWorldTransportation + 0 -314 um -16 cm 2.06 cm 1.3 keV 0 eV 0 fm 0 fm World initStep + 1 -314 um -16 cm 2.07 cm 307 keV 1.3 keV 77.7 um 77.7 um World eIoni + 2 -309 um -20 cm 2.07 cm 403 MeV 10.2 keV 4.14 cm 4.15 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -194 um -6.98 cm 1.72 cm 749 MeV 14.9 keV 7.47 cm 7.47 cm World eIoni - 2 -246 um -20 cm 2.24 cm 2.05 GeV 33 keV 13 cm 20.5 cm OutOfWorldTransportation + 0 -297 um -13.6 cm 1.99 cm 3.21 keV 0 eV 0 fm 0 fm World initStep + 1 -287 um -13.6 cm 1.99 cm 1.46 MeV 3.21 keV 330 um 330 um World eIoni + 2 -278 um -13.9 cm 1.98 cm 35 MeV 567 eV 3.35 mm 3.68 mm World eIoni + 3 -454 um -20 cm 1.95 cm 641 MeV 12.5 keV 6.06 cm 6.43 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -194 um -6.98 cm 1.72 cm 1.47 keV 0 eV 0 fm 0 fm World initStep - 1 -196 um -6.99 cm 1.72 cm 379 keV 1.47 keV 93.8 um 93.8 um World eIoni - 2 -204 um -20 cm 1.72 cm 1.3 GeV 24.8 keV 13.9 cm 13.9 cm OutOfWorldTransportation + 0 -286 um -12.2 cm 1.94 cm 1.14 keV 0 eV 0 fm 0 fm World initStep + 1 -289 um -12.2 cm 1.94 cm 247 keV 1.14 keV 64.2 um 64.2 um World eIoni + 2 -312 um -20 cm 1.93 cm 780 MeV 18 keV 8.44 cm 8.44 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -3515,6 +3557,7 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep 1 0 fm -20 cm 2.22 cm 2.05 GeV 37.4 keV 20.5 cm 20.5 cm OutOfWorldTransportation +--> Event 50 starts. ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -3554,7 +3597,13 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne 0 -18.2 um -9.4 mm 8.65 mm 1.04 keV 0 eV 0 fm 0 fm World initStep 1 -20.3 um -9.42 mm 8.65 mm 212 keV 1.04 keV 56 um 56 um World eIoni 2 1.25 mm -11.1 cm 5.17 cm 1.02 GeV 27 keV 11.8 cm 11.8 cm World eIoni - 3 2.57 cm -19.8 cm 6.02 cm 1.89 GeV 16.1 keV 9.12 cm 20.9 cm OutOfWorldTransportation + 3 7.83 mm -12.9 cm 5.4 cm 1.2 GeV 2.57 keV 1.93 cm 13.7 cm WorldTransportation + 4 1.29 cm -14.5 cm 5.58 cm 1.36 GeV 3.97 keV 1.73 cm 15.4 cm WorldTransportation + 5 1.7 cm -16 cm 5.72 cm 1.51 GeV 3.65 keV 1.55 cm 17 cm WorldTransportation + 6 2.03 cm -17.4 cm 5.83 cm 1.64 GeV 5.2 keV 1.39 cm 18.4 cm WorldTransportation + 7 2.31 cm -18.6 cm 5.93 cm 1.77 GeV 4.14 keV 1.25 cm 19.6 cm WorldTransportation + 8 2.54 cm -19.7 cm 6.01 cm 1.88 GeV 1.6 keV 1.13 cm 20.7 cm WorldTransportation + 9 2.57 cm -19.8 cm 6.02 cm 1.89 GeV 0 eV 1.38 mm 20.9 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -3562,262 +3611,256 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 0 fm -20 cm 2.22 cm 2.05 GeV 41.3 keV 20.5 cm 20.5 cm OutOfWorldTransportation + 1 3.86 um -1.37 cm 1 cm 187 MeV 5.8 keV 1.81 cm 1.81 cm World eIoni + 2 85.1 um -20 cm 2.21 cm 2.05 GeV 39.7 keV 18.7 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -33.6 um -1.61 cm 1.07 cm 211 MeV 4.23 keV 2.06 cm 2.06 cm World eIoni - 2 -51 um -1.97 cm 1.15 cm 247 MeV 1.81 keV 3.65 mm 2.42 cm World eIoni - 3 -140 um -5.01 cm 1.55 cm 551 MeV 7.68 keV 3.07 cm 5.49 cm World eIoni - 4 -239 um -16.6 cm 2.13 cm 1.71 GeV 27.7 keV 11.7 cm 17.1 cm World eIoni - 5 -253 um -20 cm 2.21 cm 2.05 GeV 7.17 keV 3.35 cm 20.5 cm OutOfWorldTransportation + 0 3.86 um -1.37 cm 1 cm 3.18 keV 0 eV 0 fm 0 fm World initStep + 1 2.41 um -1.39 cm 1 cm 1.43 MeV 3.18 keV 324 um 324 um World eIoni + 2 52.7 um -1.92 cm 9.9 mm 54.7 MeV 1.02 keV 5.33 mm 5.65 mm World eIoni + 3 388 um -3.85 cm 9.69 mm 247 MeV 2.81 keV 1.93 cm 2.49 cm World eIoni + 4 713 um -13.9 cm 9.47 mm 1.25 GeV 17.6 keV 10 cm 12.5 cm World eIoni + 5 784 um -20 cm 9.37 mm 1.86 GeV 9.9 keV 6.11 cm 18.6 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -239 um -16.6 cm 2.13 cm 1.08 keV 0 eV 0 fm 0 fm World initStep - 1 -237 um -16.7 cm 2.13 cm 227 keV 1.08 keV 59.7 um 59.7 um World eIoni - 2 -225 um -20 cm 2.12 cm 335 MeV 6.85 keV 3.47 cm 3.48 cm OutOfWorldTransportation + 0 713 um -13.9 cm 9.47 mm 2.06 keV 0 eV 0 fm 0 fm World initStep + 1 710 um -13.9 cm 9.47 mm 672 keV 2.06 keV 158 um 158 um World eIoni + 2 -581 um -16.1 cm 1.03 cm 224 MeV 2.81 keV 2.25 cm 2.26 cm World eIoni + 3 -1.01 mm -17.2 cm 1.02 cm 330 MeV 4.35 keV 1.06 cm 3.32 cm World eIoni + 4 -1.7 mm -20 cm 1 cm 611 MeV 6.46 keV 2.81 cm 6.13 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 4 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -140 um -5.01 cm 1.55 cm 1.25 keV 0 eV 0 fm 0 fm World initStep - 1 -143 um -5.01 cm 1.55 cm 287 keV 1.25 keV 73.2 um 73.2 um World eIoni - 2 -164 um -20 cm 1.56 cm 1.5 GeV 32 keV 17 cm 17 cm OutOfWorldTransportation + 0 -1.01 mm -17.2 cm 1.02 cm 1.13 keV 0 eV 0 fm 0 fm World initStep + 1 -1.01 mm -17.2 cm 1.02 cm 245 keV 1.13 keV 63.8 um 63.8 um World eIoni + 2 -1 mm -20 cm 1.02 cm 281 MeV 3.09 keV 2.88 cm 2.89 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 4 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -51 um -1.97 cm 1.15 cm 2.67 keV 0 eV 0 fm 0 fm World initStep - 1 -41.8 um -1.98 cm 1.15 cm 1.05 MeV 2.67 keV 241 um 241 um World eIoni - 2 -34.5 um -3.23 cm 1.19 cm 127 MeV 1.13 keV 1.26 cm 1.28 cm World eIoni - 3 -188 um -20 cm 1.34 cm 1.8 GeV 37 keV 16.8 cm 18 cm OutOfWorldTransportation + 0 -581 um -16.1 cm 1.03 cm 5.02 keV 0 eV 0 fm 0 fm World initStep + 1 -595 um -16.2 cm 1.03 cm 3.21 MeV 5.02 keV 719 um 719 um World eIoni + 2 -585 um -16.5 cm 1.03 cm 33.7 MeV 44.5 eV 3.05 mm 3.77 mm World eIoni + 3 -520 um -20 cm 1.02 cm 387 MeV 5.1 keV 3.54 cm 3.91 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -33.6 um -1.61 cm 1.07 cm 9.37 keV 0 eV 0 fm 0 fm World initStep - 1 -38.1 um -1.7 cm 1.07 cm 9.47 MeV 3.71 keV 1.68 mm 1.68 mm World eIoni - 2 -1.3 mm -1.81 cm 1.2 cm 20.8 MeV 492 eV 2.36 mm 4.04 mm World eIoni - 3 -3.89 mm -7.95 cm 1.4 cm 635 MeV 15.3 keV 6.16 cm 6.56 cm World eIoni - 4 -4.3 mm -11 cm 1.42 cm 943 MeV 3.3 keV 3.08 cm 9.64 cm World eIoni - 5 -4.98 mm -20 cm 1.44 cm 1.84 GeV 16.1 keV 8.96 cm 18.6 cm OutOfWorldTransportation + 0 388 um -3.85 cm 9.69 mm 1.16 keV 0 eV 0 fm 0 fm World initStep + 1 385 um -3.85 cm 9.69 mm 254 keV 1.16 keV 65.8 um 65.8 um World eIoni + 2 -2.27 cm -17.4 cm -755 um 1.36 GeV 34.4 keV 15.7 cm 15.7 cm World eIoni + 3 -3.55 cm -19.7 cm 1.86 mm 1.58 GeV 6.92 keV 2.6 cm 18.3 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.3 mm -11 cm 1.42 cm 2.58 keV 0 eV 0 fm 0 fm World initStep - 1 -4.29 mm -11 cm 1.42 cm 993 keV 2.58 keV 228 um 228 um World eIoni - 2 -4.25 mm -11.3 cm 1.42 cm 23.5 MeV 199 eV 2.25 mm 2.48 mm World eIoni - 3 -4.04 mm -20 cm 1.43 cm 896 MeV 19.3 keV 8.73 cm 8.98 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 91.6 um -8.18 cm 1.76 cm 868 MeV 16.4 keV 8.67 cm 8.67 cm World eIoni + 2 106 um -8.7 cm 1.78 cm 920 MeV 854 eV 5.17 mm 9.19 cm World eIoni + 3 238 um -15 cm 2.02 cm 1.55 GeV 12.5 keV 6.28 cm 15.5 cm World eIoni + 4 310 um -20 cm 2.15 cm 2.05 GeV 10.3 keV 5.03 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -3.89 mm -7.95 cm 1.4 cm 1.38 keV 0 eV 0 fm 0 fm World initStep - 1 -3.89 mm -7.96 cm 1.4 cm 339 keV 1.38 keV 85 um 85 um World eIoni - 2 -3.87 mm -20 cm 1.4 cm 1.2 GeV 27.1 keV 12.9 cm 13 cm OutOfWorldTransportation ---> Event 50 starts. + 0 238 um -15 cm 2.02 cm 30.8 keV 0 eV 0 fm 0 fm World initStep + 1 108 um -15.4 cm 2.03 cm 46 MeV 4.63 keV 5.46 mm 5.46 mm World eIoni + 2 3.72 mm -16.9 cm 2.73 cm 192 MeV 1.99 keV 1.72 cm 2.26 cm World eIoni + 3 5.6 mm -19.7 cm 3.09 cm 475 MeV 5.44 keV 2.86 cm 5.12 cm World eIoni + 4 5.72 mm -20 cm 3.11 cm 504 MeV 56.8 eV 2.9 mm 5.41 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 4 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 75.3 um -3.69 cm 1.42 cm 419 MeV 6.32 keV 4.16 cm 4.16 cm World eIoni - 2 336 um -6.98 cm 1.73 cm 748 MeV 8.26 keV 3.31 cm 7.47 cm World eIoni - 3 455 um -9.43 cm 1.87 cm 993 MeV 4.8 keV 2.45 cm 9.92 cm World eIoni - 4 688 um -16.5 cm 2.15 cm 1.7 GeV 17.9 keV 7.05 cm 17 cm World eIoni - 5 775 um -20 cm 2.24 cm 2.05 GeV 5 keV 3.52 cm 20.5 cm OutOfWorldTransportation + 0 5.6 mm -19.7 cm 3.09 cm 1.43 keV 0 eV 0 fm 0 fm World initStep + 1 5.6 mm -19.7 cm 3.09 cm 363 keV 1.43 keV 90.2 um 90.2 um World eIoni + 2 5.59 mm -20 cm 3.09 cm 28.9 MeV 317 eV 2.86 mm 2.95 mm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 4 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 688 um -16.5 cm 2.15 cm 1.44 keV 0 eV 0 fm 0 fm World initStep - 1 684 um -16.5 cm 2.15 cm 364 keV 1.44 keV 90.4 um 90.4 um World eIoni - 2 664 um -20 cm 2.15 cm 352 MeV 5.99 keV 3.58 cm 3.59 cm OutOfWorldTransportation + 0 3.72 mm -16.9 cm 2.73 cm 1.02 keV 0 eV 0 fm 0 fm World initStep + 1 3.72 mm -16.9 cm 2.73 cm 206 keV 1.02 keV 54.7 um 54.7 um World eIoni + 2 3.72 mm -20 cm 2.73 cm 313 MeV 6.1 keV 3.25 cm 3.26 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 455 um -9.43 cm 1.87 cm 4.43 keV 0 eV 0 fm 0 fm World initStep - 1 448 um -9.45 cm 1.87 cm 2.57 MeV 4.43 keV 576 um 576 um World eIoni - 2 472 um -9.81 cm 1.88 cm 38.2 MeV 110 eV 3.57 mm 4.14 mm World eIoni - 3 481 um -9.88 cm 1.88 cm 44.1 MeV 0 eV 730 um 4.87 mm World eBrem - 4 404 um -16.2 cm 1.88 cm 676 MeV 17.2 keV 6.32 cm 6.81 cm World eIoni - 5 361 um -18.4 cm 1.89 cm 895 MeV 5.51 keV 2.18 cm 8.99 cm World eIoni - 6 336 um -20 cm 1.89 cm 1.06 GeV 4.67 keV 1.61 cm 10.6 cm OutOfWorldTransportation + 0 106 um -8.7 cm 1.78 cm 2.01 keV 0 eV 0 fm 0 fm World initStep + 1 113 um -8.7 cm 1.78 cm 641 keV 2.01 keV 152 um 152 um World eIoni + 2 144 um -20 cm 1.79 cm 1.13 GeV 14.5 keV 11.6 cm 11.6 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 4 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 361 um -18.4 cm 1.89 cm 2.23 keV 0 eV 0 fm 0 fm World initStep - 1 358 um -18.4 cm 1.89 cm 768 keV 2.23 keV 179 um 179 um World eIoni - 2 352 um -18.4 cm 1.89 cm 4.4 MeV 0 eV 363 um 543 um World eIoni - 3 336 um -20 cm 1.89 cm 161 MeV 1.54 keV 1.57 cm 1.62 cm OutOfWorldTransportation + 0 91.6 um -8.18 cm 1.76 cm 3.8 keV 0 eV 0 fm 0 fm World initStep + 1 79.1 um -8.2 cm 1.76 cm 1.96 MeV 3.8 keV 441 um 441 um World eIoni + 2 -403 um -10.1 cm 1.78 cm 189 MeV 3.63 keV 1.87 cm 1.92 cm World eIoni + 3 -1.53 mm -20 cm 1.82 cm 1.18 GeV 21 keV 9.93 cm 11.8 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 4 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 404 um -16.2 cm 1.88 cm 2.51 keV 0 eV 0 fm 0 fm World initStep - 1 396 um -16.2 cm 1.88 cm 945 keV 2.51 keV 218 um 218 um World eIoni - 2 515 um -17.3 cm 1.84 cm 108 MeV 1.46 keV 1.07 cm 1.09 cm World eIoni - 3 472 um -20 cm 1.79 cm 379 MeV 6.09 keV 2.71 cm 3.81 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 -461 um -11.3 cm 1.93 cm 1.18 GeV 27.6 keV 11.8 cm 11.8 cm World eIoni + 2 -878 um -15.9 cm 2.09 cm 1.64 GeV 11.4 keV 4.64 cm 16.4 cm World eIoni + 3 -1.15 mm -20 cm 2.2 cm 2.05 GeV 10.8 keV 4.06 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 6, Parent ID = 4 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 481 um -9.88 cm 1.88 cm 1.42 MeV 0 eV 0 fm 0 fm World initStep - 1 3.22 mm -20 cm 1.72 cm 1.42 MeV 0 eV 10.1 cm 10.1 cm OutOfWorldTransportation + 0 -878 um -15.9 cm 2.09 cm 1.21 keV 0 eV 0 fm 0 fm World initStep + 1 -875 um -15.9 cm 2.09 cm 272 keV 1.21 keV 69.8 um 69.8 um World eIoni + 2 -855 um -20 cm 2.09 cm 406 MeV 7.34 keV 4.19 cm 4.2 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 336 um -6.98 cm 1.73 cm 3.08 keV 0 eV 0 fm 0 fm World initStep - 1 342 um -7 cm 1.72 cm 1.35 MeV 3.08 keV 307 um 307 um World eIoni - 2 276 um -7.54 cm 1.73 cm 56.2 MeV 1.85 keV 5.48 mm 5.79 mm World eIoni - 3 26.6 um -11.7 cm 1.72 cm 472 MeV 6.02 keV 4.16 cm 4.74 cm World eIoni - 4 -307 um -20 cm 1.76 cm 1.3 GeV 15.9 keV 8.3 cm 13 cm OutOfWorldTransportation + 0 -461 um -11.3 cm 1.93 cm 3.5 keV 0 eV 0 fm 0 fm World initStep + 1 -453 um -11.3 cm 1.93 cm 1.69 MeV 3.5 keV 382 um 382 um World eIoni + 2 -452 um -11.4 cm 1.93 cm 5.67 MeV 0 eV 398 um 780 um World eIoni + 3 -654 um -14.1 cm 1.9 cm 282 MeV 6.1 keV 2.76 cm 2.84 cm World eIoni + 4 -1.11 mm -20 cm 1.85 cm 869 MeV 14.3 keV 5.87 cm 8.71 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 9, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 26.6 um -11.7 cm 1.72 cm 4.55 keV 0 eV 0 fm 0 fm World initStep - 1 9.18 um -11.7 cm 1.72 cm 2.69 MeV 4.55 keV 605 um 605 um World eIoni - 2 5.03 um -11.8 cm 1.72 cm 6.3 MeV 0 eV 361 um 965 um World eIoni - 3 20.5 um -12.4 cm 1.72 cm 69.9 MeV 608 eV 6.36 mm 7.33 mm World eIoni - 4 -112 um -18.2 cm 1.72 cm 652 MeV 13.1 keV 5.82 cm 6.56 cm World eIoni - 5 -159 um -19.6 cm 1.72 cm 788 MeV 1.41 keV 1.36 cm 7.92 cm World eIoni - 6 -172 um -20 cm 1.72 cm 830 MeV 3.25 keV 4.18 mm 8.33 cm OutOfWorldTransportation + 0 -654 um -14.1 cm 1.9 cm 1.13 keV 0 eV 0 fm 0 fm World initStep + 1 -657 um -14.1 cm 1.9 cm 242 keV 1.13 keV 63 um 63 um World eIoni + 2 -679 um -20 cm 1.9 cm 587 MeV 12 keV 6.24 cm 6.24 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 12, Parent ID = 9 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -159 um -19.6 cm 1.72 cm 1.07 keV 0 eV 0 fm 0 fm World initStep - 1 -161 um -19.6 cm 1.72 cm 224 keV 1.07 keV 59 um 59 um World eIoni - 2 -168 um -20 cm 1.72 cm 41.8 MeV 253 eV 4.18 mm 4.24 mm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 -170 um -10.7 cm 1.95 cm 1.12 GeV 24.4 keV 11.2 cm 11.2 cm World eIoni + 2 -169 um -15.5 cm 2.15 cm 1.6 GeV 11.4 keV 4.81 cm 16 cm World eIoni + 3 -174 um -20 cm 2.28 cm 2.05 GeV 9.39 keV 4.51 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 11, Parent ID = 9 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -112 um -18.2 cm 1.72 cm 1.31 keV 0 eV 0 fm 0 fm World initStep - 1 -115 um -18.2 cm 1.72 cm 311 keV 1.31 keV 78.7 um 78.7 um World eIoni - 2 -128 um -20 cm 1.72 cm 178 MeV 2.56 keV 1.79 cm 1.8 cm OutOfWorldTransportation + 0 -169 um -15.5 cm 2.15 cm 2.53 keV 0 eV 0 fm 0 fm World initStep + 1 -165 um -15.5 cm 2.15 cm 816 keV 832 eV 122 um 122 um World eIoni + 2 1.17 mm -18.4 cm 2.02 cm 295 MeV 4.78 keV 2.95 cm 2.96 cm World eIoni + 3 1.18 mm -20 cm 1.92 cm 451 MeV 2.28 keV 1.56 cm 4.53 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 10, Parent ID = 9 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 3 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 20.5 um -12.4 cm 1.72 cm 1.62 keV 0 eV 0 fm 0 fm World initStep - 1 25 um -12.4 cm 1.72 cm 447 keV 1.62 keV 109 um 109 um World eIoni - 2 49.2 um -20 cm 1.72 cm 760 MeV 14.5 keV 7.81 cm 7.83 cm OutOfWorldTransportation + 0 1.17 mm -18.4 cm 2.02 cm 1.93 keV 0 eV 0 fm 0 fm World initStep + 1 1.17 mm -18.4 cm 2.02 cm 600 keV 1.93 keV 143 um 143 um World eIoni + 2 1.19 mm -20 cm 2.02 cm 156 MeV 2.11 keV 1.56 cm 1.57 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 75.3 um -3.69 cm 1.42 cm 3.06 keV 0 eV 0 fm 0 fm World initStep - 1 68.5 um -3.7 cm 1.42 cm 1.34 MeV 3.06 keV 303 um 303 um World eIoni - 2 118 um -4.08 cm 1.42 cm 39.5 MeV 391 eV 3.82 mm 4.13 mm World eIoni - 3 84.6 um -15.8 cm 1.49 cm 1.21 GeV 19.8 keV 11.7 cm 12.1 cm World eIoni - 4 79.8 um -20 cm 1.51 cm 1.63 GeV 10.6 keV 4.24 cm 16.3 cm OutOfWorldTransportation + 0 -170 um -10.7 cm 1.95 cm 2.31 keV 0 eV 0 fm 0 fm World initStep + 1 -178 um -10.7 cm 1.95 cm 815 keV 2.31 keV 189 um 189 um World eIoni + 2 -98.7 um -11.1 cm 1.95 cm 43.7 MeV 670 eV 4.29 mm 4.48 mm World eIoni + 3 -77.5 um -11.4 cm 1.95 cm 69.7 MeV 222 eV 2.6 mm 7.08 mm World eIoni + 4 206 um -19 cm 1.95 cm 828 MeV 15.5 keV 7.58 cm 8.29 cm World eIoni + 5 227 um -19.9 cm 1.95 cm 924 MeV 1.24 keV 9.64 mm 9.25 cm World eIoni + 6 228 um -20 cm 1.95 cm 931 MeV 550 eV 714 um 9.32 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 13, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 84.6 um -15.8 cm 1.49 cm 2.68 keV 0 eV 0 fm 0 fm World initStep - 1 75.3 um -15.8 cm 1.49 cm 1.06 MeV 2.68 keV 243 um 243 um World eIoni - 2 82.3 um -16.6 cm 1.46 cm 86 MeV 1 keV 8.5 mm 8.75 mm World eIoni - 3 468 um -18.2 cm 1.46 cm 245 MeV 2.12 keV 1.59 cm 2.46 cm World eIoni - 4 657 um -20 cm 1.45 cm 424 MeV 3.61 keV 1.79 cm 4.25 cm OutOfWorldTransportation + 0 227 um -19.9 cm 1.95 cm 1.18 keV 0 eV 0 fm 0 fm World initStep + 1 230 um -19.9 cm 1.95 cm 263 keV 1.18 keV 67.7 um 67.7 um World eIoni + 2 238 um -20 cm 1.95 cm 7.15 MeV 91.3 eV 690 um 757 um OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 14, Parent ID = 13 +* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 468 um -18.2 cm 1.46 cm 2.82 keV 0 eV 0 fm 0 fm World initStep - 1 458 um -18.2 cm 1.46 cm 1.16 MeV 2.82 keV 264 um 264 um World eIoni - 2 525 um -18.7 cm 1.46 cm 45.6 MeV 284 eV 4.44 mm 4.71 mm World eIoni - 3 786 um -19.6 cm 1.44 cm 140 MeV 2.2 keV 9.41 mm 1.41 cm World eIoni - 4 845 um -20 cm 1.44 cm 179 MeV 1.77 keV 3.94 mm 1.81 cm OutOfWorldTransportation + 0 206 um -19 cm 1.95 cm 1.59 keV 0 eV 0 fm 0 fm World initStep + 1 201 um -19 cm 1.95 cm 433 keV 1.59 keV 106 um 106 um World eIoni + 2 184 um -20 cm 1.95 cm 104 MeV 1.19 keV 1.03 cm 1.05 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 15, Parent ID = 14 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 786 um -19.6 cm 1.44 cm 1.68 keV 0 eV 0 fm 0 fm World initStep - 1 782 um -19.6 cm 1.44 cm 474 keV 1.68 keV 115 um 115 um World eIoni - 2 770 um -20 cm 1.44 cm 39.5 MeV 491 eV 3.9 mm 4.02 mm OutOfWorldTransportation + 0 -77.5 um -11.4 cm 1.95 cm 4.1 keV 0 eV 0 fm 0 fm World initStep + 1 -92.2 um -11.4 cm 1.95 cm 2.24 MeV 4.1 keV 503 um 503 um World eIoni + 2 -101 um -11.5 cm 1.95 cm 13.5 MeV 1.4 keV 1.12 mm 1.63 mm World eIoni + 3 52.6 um -17.1 cm 1.99 cm 571 MeV 9.6 keV 5.58 cm 5.74 cm World eIoni + 4 322 um -20 cm 2.02 cm 862 MeV 4.75 keV 2.9 cm 8.64 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 5 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -261 um -8.67 cm 1.8 cm 916 MeV 15.5 keV 9.16 cm 9.16 cm World eIoni - 2 -319 um -10.8 cm 1.91 cm 1.13 GeV 5.65 keV 2.18 cm 11.3 cm World eIoni - 3 -481 um -20 cm 2.21 cm 2.05 GeV 18.7 keV 9.16 cm 20.5 cm OutOfWorldTransportation + 0 52.6 um -17.1 cm 1.99 cm 11.1 keV 0 eV 0 fm 0 fm World initStep + 1 77.3 um -17.1 cm 1.99 cm 4.2 MeV 2.35 keV 455 um 455 um World eIoni + 2 -121 um -20 cm 1.95 cm 290 MeV 4.55 keV 2.86 cm 2.91 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -319 um -10.8 cm 1.91 cm 1.68 keV 0 eV 0 fm 0 fm World initStep - 1 -322 um -10.8 cm 1.91 cm 476 keV 1.68 keV 115 um 115 um World eIoni - 2 -334 um -20 cm 1.91 cm 916 MeV 12.4 keV 9.44 cm 9.45 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 -589 um -17.9 cm 2.23 cm 1.84 GeV 39.8 keV 18.4 cm 18.4 cm World eIoni + 2 -564 um -20 cm 2.31 cm 2.05 GeV 4.62 keV 2.13 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -261 um -8.67 cm 1.8 cm 1.2 keV 0 eV 0 fm 0 fm World initStep - 1 -261 um -8.67 cm 1.8 cm 270 keV 1.2 keV 69.5 um 69.5 um World eIoni - 2 -259 um -20 cm 1.79 cm 1.13 GeV 28.1 keV 12.6 cm 12.6 cm OutOfWorldTransportation + 0 -589 um -17.9 cm 2.23 cm 1.95 keV 0 eV 0 fm 0 fm World initStep + 1 -584 um -17.9 cm 2.23 cm 608 keV 1.95 keV 144 um 144 um World eIoni + 2 -567 um -20 cm 2.23 cm 213 MeV 2.43 keV 2.13 cm 2.15 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -3825,17 +3868,38 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -310 um -19.8 cm 2.11 cm 2.03 GeV 45.1 keV 20.3 cm 20.3 cm World eIoni - 2 -307 um -20 cm 2.12 cm 2.05 GeV 82.6 eV 2.06 mm 20.5 cm OutOfWorldTransportation + 1 3.71 um -2.25 mm 4.61 mm 72.5 MeV 946 eV 5.27 mm 5.27 mm World eIoni + 2 148 um -20 cm 2.21 cm 2.05 GeV 40.4 keV 20 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -310 um -19.8 cm 2.11 cm 2.54 keV 0 eV 0 fm 0 fm World initStep - 1 -305 um -19.8 cm 2.12 cm 966 keV 2.54 keV 222 um 222 um World eIoni - 2 -296 um -20 cm 2.12 cm 20.7 MeV 98.3 eV 1.97 mm 2.2 mm OutOfWorldTransportation + 0 3.71 um -2.25 mm 4.61 mm 4.17 keV 0 eV 0 fm 0 fm World initStep + 1 -4.85 um -2.31 mm 4.61 mm 576 keV 118 eV 62.6 um 62.6 um World eIoni + 2 1.99 mm -4.33 cm 827 um 410 MeV 11.4 keV 4.14 cm 4.14 cm World eIoni + 3 7.03 mm -20 cm -1.1 cm 1.98 GeV 39.2 keV 15.7 cm 19.9 cm OutOfWorldTransportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 2 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process + 0 1.99 mm -4.33 cm 827 um 2.25 keV 0 eV 0 fm 0 fm World initStep + 1 1.98 mm -4.33 cm 823 um 778 keV 2.25 keV 181 um 181 um World eIoni + 2 1.76 mm -5.8 cm 1.5 mm 148 MeV 2.46 keV 1.47 cm 1.49 cm World eIoni + 3 1.04 mm -18.9 cm 2.88 mm 1.45 GeV 24 keV 13.1 cm 14.6 cm World eIoni + 4 1.02 mm -20 cm 2.94 mm 1.57 GeV 2.54 keV 1.14 cm 15.7 cm OutOfWorldTransportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 3 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process + 0 1.04 mm -18.9 cm 2.88 mm 1.25 keV 0 eV 0 fm 0 fm World initStep + 1 1.03 mm -18.9 cm 2.89 mm 287 keV 1.25 keV 73.1 um 73.1 um World eIoni + 2 1.02 mm -20 cm 2.89 mm 114 MeV 3.55 keV 1.14 cm 1.15 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -3843,107 +3907,122 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -40.5 um -1.92 cm 1.14 cm 242 MeV 4.52 keV 2.37 cm 2.37 cm World eIoni - 2 -92 um -15.1 cm 2.08 cm 1.56 GeV 24.6 keV 13.2 cm 15.6 cm World eIoni - 3 -91.9 um -15.1 cm 2.09 cm 1.56 GeV 92.4 eV 430 um 15.6 cm World eIoni - 4 -91.5 um -15.6 cm 2.1 cm 1.61 GeV 420 eV 4.21 mm 16 cm World eIoni - 5 -88.1 um -20 cm 2.22 cm 2.05 GeV 8.92 keV 4.45 cm 20.5 cm OutOfWorldTransportation + 1 -4.51 um -2.98 mm 5.25 mm 79.9 MeV 1.07 keV 6.25 mm 6.25 mm World eIoni + 2 -40.7 um -2.81 cm 1.3 cm 331 MeV 6.32 keV 2.65 cm 3.28 cm World eIoni + 3 -89.6 um -10.4 cm 1.9 cm 1.09 GeV 14 keV 7.62 cm 10.9 cm World eIoni + 4 -92.2 um -11.5 cm 1.95 cm 1.2 GeV 2.24 keV 1.07 cm 12 cm World eIoni + 5 -101 um -16.3 cm 2.12 cm 1.68 GeV 10.9 keV 4.81 cm 16.8 cm World eIoni + 6 -105 um -20 cm 2.22 cm 2.05 GeV 6.36 keV 3.72 cm 20.5 cm OutOfWorldTransportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 1 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process + 0 -101 um -16.3 cm 2.12 cm 1.23 keV 0 eV 0 fm 0 fm World initStep + 1 -98.2 um -16.3 cm 2.12 cm 281 keV 1.23 keV 71.9 um 71.9 um World eIoni + 2 -81.9 um -20 cm 2.12 cm 372 MeV 7.44 keV 3.82 cm 3.83 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 5, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -91.5 um -15.6 cm 2.1 cm 3.37 keV 0 eV 0 fm 0 fm World initStep - 1 -84.1 um -15.6 cm 2.1 cm 1.59 MeV 3.37 keV 359 um 359 um World eIoni - 2 -76.6 um -15.6 cm 2.1 cm 7.39 MeV 31.8 eV 580 um 939 um World eIoni - 3 -47.2 um -20 cm 2.1 cm 445 MeV 5.89 keV 4.38 cm 4.47 cm OutOfWorldTransportation + 0 -92.2 um -11.5 cm 1.95 cm 2.76 keV 0 eV 0 fm 0 fm World initStep + 1 -82.6 um -11.5 cm 1.95 cm 1.12 MeV 2.76 keV 256 um 256 um World eIoni + 2 -213 um -12.2 cm 1.93 cm 76.4 MeV 1.75 keV 7.54 mm 7.79 mm World eIoni + 3 -632 um -19.5 cm 1.92 cm 805 MeV 12.1 keV 7.29 cm 8.07 cm World eIoni + 4 -642 um -20 cm 1.92 cm 853 MeV 443 eV 4.74 mm 8.54 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 5 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -91.9 um -15.1 cm 2.09 cm 1.58 keV 0 eV 0 fm 0 fm World initStep - 1 -96.8 um -15.1 cm 2.09 cm 428 keV 1.58 keV 105 um 105 um World eIoni - 2 -122 um -20 cm 2.09 cm 487 MeV 8.35 keV 4.96 cm 4.97 cm OutOfWorldTransportation + 0 -632 um -19.5 cm 1.92 cm 1.51 keV 0 eV 0 fm 0 fm World initStep + 1 -631 um -19.5 cm 1.92 cm 396 keV 1.51 keV 97.6 um 97.6 um World eIoni + 2 -630 um -20 cm 1.92 cm 47.5 MeV 1.41 keV 4.71 mm 4.81 mm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -92 um -15.1 cm 2.08 cm 1.1 keV 0 eV 0 fm 0 fm World initStep - 1 -94.1 um -15.1 cm 2.08 cm 234 keV 1.1 keV 61.1 um 61.1 um World eIoni - 2 -110 um -20 cm 2.09 cm 491 MeV 10.7 keV 5.18 cm 5.18 cm OutOfWorldTransportation + 0 -89.6 um -10.4 cm 1.9 cm 2.38 keV 0 eV 0 fm 0 fm World initStep + 1 -81.4 um -10.4 cm 1.9 cm 862 keV 2.38 keV 200 um 200 um World eIoni + 2 -183 um -10.9 cm 1.9 cm 50.8 MeV 490 eV 5 mm 5.2 mm World eIoni + 3 -980 um -17.3 cm 1.89 cm 687 MeV 13.7 keV 6.36 cm 6.88 cm World eIoni + 4 -1.12 mm -20 cm 1.88 cm 960 MeV 5.18 keV 2.73 cm 9.61 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 4 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -40.5 um -1.92 cm 1.14 cm 1.01 keV 0 eV 0 fm 0 fm World initStep - 1 -39.1 um -1.92 cm 1.14 cm 201 keV 1.01 keV 53.6 um 53.6 um World eIoni - 2 1.02 mm -11.3 cm -2.83 cm 935 MeV 28.6 keV 10.8 cm 10.8 cm World eIoni - 3 6.31 mm -20 cm -4.69 cm 1.81 GeV 17.5 keV 8.94 cm 19.8 cm OutOfWorldTransportation + 0 -980 um -17.3 cm 1.89 cm 1.01 keV 0 eV 0 fm 0 fm World initStep + 1 -983 um -17.3 cm 1.89 cm 202 keV 1.01 keV 53.9 um 53.9 um World eIoni + 2 -1 mm -20 cm 1.89 cm 273 MeV 10.9 keV 2.83 cm 2.83 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -164 um -13.7 cm 2.09 cm 1.42 GeV 29.1 keV 14.2 cm 14.2 cm World eIoni - 2 -297 um -20 cm 2.3 cm 2.05 GeV 15.8 keV 6.31 cm 20.5 cm OutOfWorldTransportation + 0 -40.7 um -2.81 cm 1.3 cm 1.71 keV 0 eV 0 fm 0 fm World initStep + 1 -38.7 um -2.82 cm 1.3 cm 488 keV 1.71 keV 118 um 118 um World eIoni + 2 -27.2 um -20 cm 1.3 cm 1.72 GeV 26.8 keV 18.2 cm 18.2 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -164 um -13.7 cm 2.09 cm 1.25 keV 0 eV 0 fm 0 fm World initStep - 1 -164 um -13.7 cm 2.09 cm 290 keV 1.25 keV 73.8 um 73.8 um World eIoni - 2 -164 um -20 cm 2.1 cm 631 MeV 10.3 keV 6.61 cm 6.62 cm OutOfWorldTransportation + 0 -4.51 um -2.98 mm 5.25 mm 3.12 keV 0 eV 0 fm 0 fm World initStep + 1 -8.02 um -3.11 mm 5.25 mm 1.38 MeV 3.12 keV 313 um 313 um World eIoni + 2 -9.21 um -3.29 mm 5.24 mm 3.1 MeV 0 eV 172 um 485 um World eIoni + 3 724 um -5.67 cm 3.71 mm 537 MeV 11.6 keV 5.34 cm 5.39 cm World eIoni + 4 909 um -5.96 cm 4.02 mm 566 MeV 305 eV 2.92 mm 5.69 cm World eIoni + 5 2.94 mm -10.4 cm 7.39 mm 1.01 GeV 6.82 keV 4.44 cm 10.1 cm World eIoni + 6 5.28 mm -20 cm 1.13 cm 1.97 GeV 24.3 keV 9.62 cm 19.7 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 11, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 520 um -12.9 cm 1.98 cm 1.34 GeV 24.9 keV 13.4 cm 13.4 cm World eIoni - 2 625 um -15.9 cm 2.09 cm 1.64 GeV 6 keV 3.06 cm 16.4 cm World eIoni - 3 666 um -17.3 cm 2.12 cm 1.78 GeV 1.64 keV 1.36 cm 17.8 cm World eIoni - 4 738 um -20 cm 2.19 cm 2.05 GeV 4.53 keV 2.7 cm 20.5 cm OutOfWorldTransportation + 0 2.94 mm -10.4 cm 7.39 mm 3.62 keV 0 eV 0 fm 0 fm World initStep + 1 2.95 mm -10.4 cm 7.38 mm 1.8 MeV 3.62 keV 406 um 406 um World eIoni + 2 2.96 mm -10.6 cm 7.39 mm 21.4 MeV 327 eV 1.96 mm 2.36 mm World eIoni + 3 2.98 mm -20 cm 7.4 mm 962 MeV 19.1 keV 9.4 cm 9.64 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 10, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 666 um -17.3 cm 2.12 cm 3.55 keV 0 eV 0 fm 0 fm World initStep - 1 665 um -17.3 cm 2.12 cm 1.73 MeV 3.55 keV 391 um 391 um World eIoni - 2 643 um -17.5 cm 2.12 cm 24.1 MeV 17.8 eV 2.24 mm 2.63 mm World eIoni - 3 591 um -20 cm 2.12 cm 270 MeV 3.27 keV 2.46 cm 2.72 cm OutOfWorldTransportation + 0 909 um -5.96 cm 4.02 mm 2.42 keV 0 eV 0 fm 0 fm World initStep + 1 906 um -5.97 cm 4.01 mm 888 keV 2.42 keV 206 um 206 um World eIoni + 2 716 um -6.91 cm 4.27 mm 95.7 MeV 689 eV 9.49 mm 9.69 mm World eIoni + 3 389 um -11.7 cm 5.09 mm 579 MeV 8.33 keV 4.84 cm 5.8 cm World eIoni + 4 225 um -20 cm 5.5 mm 1.4 GeV 15.9 keV 8.25 cm 14.1 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 12, Parent ID = 10 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 625 um -15.9 cm 2.09 cm 9.34 keV 0 eV 0 fm 0 fm World initStep - 1 620 um -16 cm 2.09 cm 9.42 MeV 6.24 keV 1.67 mm 1.67 mm World eIoni - 2 1.6 mm -16.3 cm 2.02 cm 34 MeV 413 eV 2.78 mm 4.46 mm World eIoni - 3 3.26 mm -20 cm 1.9 cm 406 MeV 9.25 keV 3.73 cm 4.17 cm OutOfWorldTransportation + 0 389 um -11.7 cm 5.09 mm 1.86 keV 0 eV 0 fm 0 fm World initStep + 1 384 um -11.8 cm 5.09 mm 561 keV 1.86 keV 134 um 134 um World eIoni + 2 358 um -20 cm 5.1 mm 825 MeV 14.6 keV 8.42 cm 8.44 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 9, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 520 um -12.9 cm 1.98 cm 1.06 keV 0 eV 0 fm 0 fm World initStep - 1 521 um -12.9 cm 1.98 cm 220 keV 1.06 keV 58.1 um 58.1 um World eIoni - 2 529 um -20 cm 1.98 cm 712 MeV 19.9 keV 7.77 cm 7.78 cm OutOfWorldTransportation + 0 724 um -5.67 cm 3.71 mm 1.44 keV 0 eV 0 fm 0 fm World initStep + 1 721 um -5.67 cm 3.71 mm 366 keV 1.44 keV 90.9 um 90.9 um World eIoni + 2 702 um -20 cm 3.69 mm 1.43 GeV 23.2 keV 15.5 cm 15.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -3951,17 +4030,18 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -63.7 um -4.22 cm 1.47 cm 472 MeV 7.59 keV 4.69 cm 4.69 cm World eIoni - 2 -110 um -20 cm 2.2 cm 2.05 GeV 35.2 keV 15.8 cm 20.5 cm OutOfWorldTransportation + 1 -61.1 um -13.3 cm 2.08 cm 1.38 GeV 33.4 keV 13.8 cm 13.8 cm World eIoni + 2 -105 um -20 cm 2.29 cm 2.05 GeV 18.4 keV 6.71 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -63.7 um -4.22 cm 1.47 cm 1.31 keV 0 eV 0 fm 0 fm World initStep - 1 -62.9 um -4.22 cm 1.47 cm 310 keV 1.31 keV 78.5 um 78.5 um World eIoni - 2 -57.1 um -20 cm 1.46 cm 1.58 GeV 44.8 keV 17.7 cm 17.7 cm OutOfWorldTransportation + 0 -61.1 um -13.3 cm 2.08 cm 2.44 keV 0 eV 0 fm 0 fm World initStep + 1 -69.2 um -13.3 cm 2.08 cm 897 keV 2.44 keV 207 um 207 um World eIoni + 2 -20.1 um -14.2 cm 2.05 cm 85.7 MeV 1.29 keV 8.49 mm 8.7 mm World eIoni + 3 297 um -20 cm 2.01 cm 670 MeV 8.59 keV 5.85 cm 6.72 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -3969,140 +4049,142 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -506 nm -486 um 2.2 mm 54.8 MeV 358 eV 2.27 mm 2.27 mm World eIoni - 2 376 um -10.7 cm 1.9 cm 1.12 GeV 19.3 keV 10.9 cm 11.2 cm World eIoni - 3 414 um -15.2 cm 2.07 cm 1.57 GeV 11 keV 4.53 cm 15.7 cm World eIoni - 4 444 um -20 cm 2.19 cm 2.05 GeV 12.3 keV 4.81 cm 20.5 cm OutOfWorldTransportation + 1 -157 um -5.64 cm 1.62 cm 614 MeV 10.7 keV 6.13 cm 6.13 cm World eIoni + 2 -293 um -10.8 cm 1.95 cm 1.13 GeV 10.2 keV 5.17 cm 11.3 cm World eIoni + 3 -430 um -20 cm 2.27 cm 2.05 GeV 21.3 keV 9.2 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 414 um -15.2 cm 2.07 cm 3.03 keV 0 eV 0 fm 0 fm World initStep - 1 403 um -15.2 cm 2.07 cm 1.31 MeV 3.03 keV 298 um 298 um World eIoni - 2 389 um -15.4 cm 2.07 cm 24 MeV 471 eV 2.27 mm 2.57 mm World eIoni - 3 380 um -20 cm 2.07 cm 481 MeV 7.95 keV 4.57 cm 4.83 cm OutOfWorldTransportation + 0 -293 um -10.8 cm 1.95 cm 5.45 keV 0 eV 0 fm 0 fm World initStep + 1 -300 um -10.8 cm 1.95 cm 3.72 MeV 5.45 keV 833 um 833 um World eIoni + 2 -303 um -10.9 cm 1.95 cm 8.52 MeV 178 eV 480 um 1.31 mm World eIoni + 3 248 um -17.5 cm 1.88 cm 668 MeV 12.9 keV 6.59 cm 6.72 cm World eIoni + 4 424 um -20 cm 1.87 cm 920 MeV 3.8 keV 2.52 cm 9.25 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 3 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 376 um -10.7 cm 1.9 cm 1.54 keV 0 eV 0 fm 0 fm World initStep - 1 377 um -10.7 cm 1.9 cm 411 keV 1.54 keV 101 um 101 um World eIoni - 2 384 um -20 cm 1.9 cm 934 MeV 16.4 keV 9.72 cm 9.73 cm OutOfWorldTransportation + 0 248 um -17.5 cm 1.88 cm 1.34 keV 0 eV 0 fm 0 fm World initStep + 1 246 um -17.5 cm 1.88 cm 324 keV 1.34 keV 81.5 um 81.5 um World eIoni + 2 234 um -20 cm 1.87 cm 252 MeV 4.85 keV 2.56 cm 2.57 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -506 nm -486 um 2.2 mm 2.08 keV 0 eV 0 fm 0 fm World initStep - 1 -4.37 um -551 um 2.19 mm 682 keV 2.08 keV 160 um 160 um World eIoni - 2 219 um -7.48 mm 2.29 mm 69.9 MeV 583 eV 6.93 mm 7.09 mm World eIoni - 3 1.11 mm -20 cm 2.66 mm 2 GeV 41.5 keV 19.3 cm 20 cm OutOfWorldTransportation + 0 -157 um -5.64 cm 1.62 cm 6.34 keV 0 eV 0 fm 0 fm World initStep + 1 -183 um -5.69 cm 1.62 cm 4.86 MeV 4.86 keV 1.08 mm 1.08 mm World eIoni + 2 -410 um -5.92 cm 1.66 cm 28.1 MeV 479 eV 2.38 mm 3.47 mm World eIoni + 3 -919 um -20 cm 1.74 cm 1.44 GeV 28.4 keV 14.1 cm 14.4 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 219 um -7.48 mm 2.29 mm 3.61 keV 0 eV 0 fm 0 fm World initStep - 1 223 um -7.64 mm 2.31 mm 1.8 MeV 3.61 keV 404 um 404 um World eIoni - 2 236 um -9.27 mm 2.33 mm 18.1 MeV 103 eV 1.63 mm 2.03 mm World eIoni - 3 262 um -1.68 cm 2.37 mm 93.1 MeV 383 eV 7.51 mm 9.54 mm World eIoni - 4 302 um -4.09 cm 2.41 mm 335 MeV 6.63 keV 2.41 cm 3.37 cm World eIoni - 5 353 um -11.7 cm 2.46 mm 1.09 GeV 17.8 keV 7.6 cm 11 cm World eBrem - 6 361 um -12.8 cm 2.46 mm 1.21 GeV 1.9 keV 1.15 cm 12.1 cm World eIoni - 7 396 um -18 cm 2.47 mm 1.72 GeV 9.54 keV 5.11 cm 17.2 cm World eIoni - 8 408 um -20 cm 2.47 mm 1.92 GeV 4.32 keV 2 cm 19.2 cm World eIoni - 9 408 um -20 cm 2.47 mm 1.93 GeV 39.3 eV 470 um 19.3 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 -32.7 um -17.8 cm 2.07 cm 1.83 GeV 30.4 keV 18.3 cm 18.3 cm World eIoni + 2 -12.5 um -20 cm 2.12 cm 2.05 GeV 4.12 keV 2.23 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 10, Parent ID = 5 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 408 um -20 cm 2.47 mm 3.26 keV 0 eV 0 fm 0 fm World initStep - 1 396 um -20 cm 2.48 mm 1.5 MeV 3.26 keV 339 um 339 um World eIoni - 2 390 um -20 cm 2.48 mm 4.81 MeV 0 eV 331 um 670 um OutOfWorldTransportation + 0 -32.7 um -17.8 cm 2.07 cm 1.01 keV 0 eV 0 fm 0 fm World initStep + 1 -33.3 um -17.8 cm 2.07 cm 201 keV 1.01 keV 53.6 um 53.6 um World eIoni + 2 -37.4 um -20 cm 2.07 cm 223 MeV 7.73 keV 2.3 cm 2.3 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 9, Parent ID = 5 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 396 um -18 cm 2.47 mm 119 keV 0 eV 0 fm 0 fm World initStep - 1 2 mm -19.2 cm -97.6 um 129 MeV 4.27 keV 1.34 cm 1.34 cm World eIoni - 2 2.95 mm -20 cm -1.83 mm 206 MeV 717 eV 7.93 mm 2.14 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 32.8 um -2.61 cm 1.26 cm 311 MeV 6.21 keV 3.07 cm 3.07 cm World eIoni + 2 -78.5 um -18.6 cm 2.17 cm 1.91 GeV 42.5 keV 16.1 cm 19.1 cm World eIoni + 3 -92 um -20 cm 2.21 cm 2.05 GeV 2.42 keV 1.37 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 5 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 361 um -12.8 cm 2.46 mm 1.21 keV 0 eV 0 fm 0 fm World initStep - 1 358 um -12.8 cm 2.46 mm 274 keV 1.21 keV 70.3 um 70.3 um World eIoni - 2 334 um -20 cm 2.45 mm 716 MeV 16.2 keV 7.61 cm 7.61 cm OutOfWorldTransportation + 0 -78.5 um -18.6 cm 2.17 cm 4.37 keV 0 eV 0 fm 0 fm World initStep + 1 -84.2 um -18.7 cm 2.17 cm 2.51 MeV 4.37 keV 564 um 564 um World eIoni + 2 -92.9 um -18.8 cm 2.17 cm 14.3 MeV 88.6 eV 1.18 mm 1.75 mm World eIoni + 3 -114 um -20 cm 2.18 cm 137 MeV 1.19 keV 1.22 cm 1.4 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 5 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 302 um -4.09 cm 2.41 mm 3.56 keV 0 eV 0 fm 0 fm World initStep - 1 295 um -4.11 cm 2.4 mm 1.61 MeV 1.12 keV 260 um 260 um World eIoni - 2 -379 um -6.41 cm 3.87 mm 232 MeV 3.44 keV 2.31 cm 2.34 cm World eIoni - 3 -805 um -19.9 cm 4.67 mm 1.58 GeV 23.3 keV 13.5 cm 15.8 cm World eIoni - 4 -808 um -20 cm 4.66 mm 1.59 GeV 274 eV 1.17 mm 15.9 cm OutOfWorldTransportation + 0 32.8 um -2.61 cm 1.26 cm 999 eV 0 eV 0 fm 0 fm World initStep + 1 30.3 um -2.61 cm 1.26 cm 199 keV 999 eV 53.1 um 53.1 um World eIoni + 2 1.9 cm -11.8 cm -2.14 cm 916 MeV 25.7 keV 10.6 cm 10.6 cm World eIoni + 3 2.12 cm -13.5 cm -2.93 cm 1.09 GeV 2.56 keV 1.91 cm 12.5 cm WorldTransportation + 4 2.3 cm -15.1 cm -3.54 cm 1.24 GeV 2.93 keV 1.69 cm 14.2 cm WorldTransportation + 5 2.43 cm -16.5 cm -4.02 cm 1.39 GeV 1.36 keV 1.51 cm 15.7 cm WorldTransportation + 6 2.54 cm -17.8 cm -4.41 cm 1.52 GeV 2.8 keV 1.35 cm 17.1 cm WorldTransportation + 7 2.63 cm -18.9 cm -4.73 cm 1.63 GeV 4.05 keV 1.21 cm 18.3 cm WorldTransportation + 8 2.7 cm -19.8 cm -4.96 cm 1.72 GeV 1.99 keV 9.16 mm 19.2 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 13, Parent ID = 7 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -805 um -19.9 cm 4.67 mm 1.01 keV 0 eV 0 fm 0 fm World initStep - 1 -806 um -19.9 cm 4.67 mm 201 keV 1.01 keV 53.6 um 53.6 um World eIoni - 2 -808 um -20 cm 4.66 mm 11.7 MeV 369 eV 1.15 mm 1.21 mm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 18.2 um -1.85 cm 1.13 cm 235 MeV 4.2 keV 2.3 cm 2.3 cm World eIoni + 2 -87.4 um -19.3 cm 2.21 cm 1.98 GeV 31.4 keV 17.5 cm 19.8 cm World eIoni + 3 -94.4 um -20 cm 2.23 cm 2.05 GeV 792 eV 7.28 mm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 12, Parent ID = 7 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -379 um -6.41 cm 3.87 mm 1.3 keV 0 eV 0 fm 0 fm World initStep - 1 -379 um -6.41 cm 3.87 mm 309 keV 1.3 keV 78.2 um 78.2 um World eIoni - 2 -380 um -20 cm 3.9 mm 1.36 GeV 24.7 keV 15 cm 15 cm OutOfWorldTransportation + 0 -87.4 um -19.3 cm 2.21 cm 1.78 keV 0 eV 0 fm 0 fm World initStep + 1 -83.6 um -19.3 cm 2.21 cm 520 keV 1.78 keV 125 um 125 um World eIoni + 2 -71.4 um -20 cm 2.21 cm 72.8 MeV 416 eV 7.25 mm 7.37 mm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 11, Parent ID = 7 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 295 um -4.11 cm 2.4 mm 1.3 keV 0 eV 0 fm 0 fm World initStep - 1 292 um -4.11 cm 2.4 mm 307 keV 1.3 keV 77.6 um 77.6 um World eIoni - 2 275 um -20 cm 2.38 mm 1.59 GeV 39.5 keV 17.9 cm 17.9 cm OutOfWorldTransportation + 0 18.2 um -1.85 cm 1.13 cm 2.22 keV 0 eV 0 fm 0 fm World initStep + 1 11.9 um -1.86 cm 1.13 cm 766 keV 2.22 keV 178 um 178 um World eIoni + 2 307 um -2.87 cm 1.1 cm 101 MeV 1.09 keV 1.01 cm 1.02 cm World eIoni + 3 1.09 mm -5.52 cm 1.07 cm 366 MeV 5.92 keV 2.65 cm 3.68 cm World eIoni + 4 1.82 mm -13.7 cm 1.03 cm 1.19 GeV 21 keV 8.21 cm 11.9 cm World eIoni + 5 2.04 mm -20 cm 1.02 cm 1.81 GeV 14.5 keV 6.27 cm 18.2 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 5 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 262 um -1.68 cm 2.37 mm 3.94 keV 0 eV 0 fm 0 fm World initStep - 1 255 um -1.7 cm 2.39 mm 2.09 MeV 3.94 keV 469 um 469 um World eIoni - 2 226 um -1.98 cm 2.42 mm 30.2 MeV 243 eV 2.81 mm 3.28 mm World eIoni - 3 -302 um -17.6 cm 1.34 mm 1.59 GeV 29.1 keV 15.6 cm 15.9 cm World eIoni - 4 -391 um -20 cm 1.13 mm 1.83 GeV 5.8 keV 2.42 cm 18.4 cm OutOfWorldTransportation + 0 1.82 mm -13.7 cm 1.03 cm 1.06 keV 0 eV 0 fm 0 fm World initStep + 1 1.82 mm -13.7 cm 1.03 cm 219 keV 1.06 keV 57.8 um 57.8 um World eIoni + 2 1.83 mm -20 cm 1.03 cm 627 MeV 13.9 keV 6.77 cm 6.78 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 14, Parent ID = 6 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -302 um -17.6 cm 1.34 mm 25.7 keV 0 eV 0 fm 0 fm World initStep - 1 -397 um -17.9 cm 1.29 mm 33.1 MeV 2.68 keV 3.94 mm 3.94 mm World eIoni - 2 272 um -20 cm 3.08 mm 244 MeV 4.27 keV 2.12 cm 2.51 cm OutOfWorldTransportation + 0 1.09 mm -5.52 cm 1.07 cm 25.9 keV 0 eV 0 fm 0 fm World initStep + 1 989 um -5.86 cm 1.06 cm 36.1 MeV 4.11 keV 4.38 mm 4.38 mm World eIoni + 2 1.74 mm -6.49 cm 3.4 mm 99.4 MeV 1.32 keV 1.08 cm 1.52 cm World eIoni + 3 2.69 mm -20 cm -5.8 mm 1.45 GeV 24.8 keV 13.6 cm 15.1 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -4110,76 +4192,72 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -62.5 um -5.57 cm 1.59 cm 607 MeV 9.3 keV 6.05 cm 6.05 cm World eIoni - 2 -182 um -18.2 cm 2.13 cm 1.87 GeV 23.4 keV 12.7 cm 18.7 cm World eIoni - 3 -197 um -20 cm 2.18 cm 2.05 GeV 3.81 keV 1.76 cm 20.5 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -182 um -18.2 cm 2.13 cm 3.51 keV 0 eV 0 fm 0 fm World initStep - 1 -169 um -18.3 cm 2.13 cm 1.71 MeV 3.51 keV 385 um 385 um World eIoni - 2 -40.2 um -19.3 cm 2.15 cm 109 MeV 1.23 keV 1.07 cm 1.11 cm World eIoni - 3 114 um -20 cm 2.18 cm 176 MeV 757 eV 6.73 mm 1.78 cm OutOfWorldTransportation + 1 -41.3 um -2.25 cm 1.2 cm 275 MeV 6.62 keV 2.71 cm 2.71 cm World eIoni + 2 -217 um -20 cm 2.21 cm 2.05 GeV 35 keV 17.8 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -62.5 um -5.57 cm 1.59 cm 1.27 keV 0 eV 0 fm 0 fm World initStep - 1 -59.1 um -5.57 cm 1.59 cm 294 keV 1.27 keV 74.8 um 74.8 um World eIoni - 2 -33.9 um -20 cm 1.59 cm 1.44 GeV 30.8 keV 16.2 cm 16.2 cm OutOfWorldTransportation + 0 -41.3 um -2.25 cm 1.2 cm 4.34 keV 0 eV 0 fm 0 fm World initStep + 1 -25.4 um -2.28 cm 1.2 cm 2.48 MeV 4.34 keV 556 um 556 um World eIoni + 2 -13.3 um -2.39 cm 1.2 cm 13.5 MeV 333 eV 1.1 mm 1.66 mm World eIoni + 3 33.4 um -6.38 cm 1.23 cm 413 MeV 7.15 keV 3.99 cm 4.16 cm World eIoni + 4 61.3 um -9.36 cm 1.24 cm 711 MeV 5.85 keV 2.98 cm 7.14 cm World eIoni + 5 84.4 um -14 cm 1.26 cm 1.17 GeV 8.75 keV 4.62 cm 11.8 cm World eIoni + 6 91.7 um -16.6 cm 1.26 cm 1.44 GeV 5.53 keV 2.62 cm 14.4 cm World eIoni + 7 96.4 um -20 cm 1.27 cm 1.77 GeV 7.29 keV 3.4 cm 17.8 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 60.7 um -19.1 cm 2.3 cm 1.96 GeV 36.7 keV 19.6 cm 19.6 cm World eIoni - 2 64.3 um -20 cm 2.32 cm 2.05 GeV 3.68 keV 8.85 mm 20.5 cm OutOfWorldTransportation + 0 91.7 um -16.6 cm 1.26 cm 12.4 keV 0 eV 0 fm 0 fm World initStep + 1 142 um -16.7 cm 1.26 cm 14.2 MeV 5.98 keV 2.12 mm 2.12 mm World eIoni + 2 1.14 mm -17.1 cm 1.12 cm 47.7 MeV 680 eV 3.86 mm 5.98 mm World eIoni + 3 2.5 mm -20 cm 9.12 mm 340 MeV 6.23 keV 2.94 cm 3.54 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 60.7 um -19.1 cm 2.3 cm 16 keV 0 eV 0 fm 0 fm World initStep - 1 37.5 um -19.3 cm 2.29 cm 17.3 MeV 4.61 keV 2.2 mm 2.2 mm World eIoni - 2 186 um -20 cm 2.41 cm 89.3 MeV 1.34 keV 7.32 mm 9.52 mm OutOfWorldTransportation + 0 84.4 um -14 cm 1.26 cm 1.32 keV 0 eV 0 fm 0 fm World initStep + 1 80.5 um -14 cm 1.26 cm 315 keV 1.32 keV 79.4 um 79.4 um World eIoni + 2 56.2 um -20 cm 1.26 cm 602 MeV 13.2 keV 6.26 cm 6.27 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -125 um -4.49 cm 1.51 cm 499 MeV 7.76 keV 4.97 cm 4.97 cm World eIoni - 2 -188 um -16.1 cm 2.12 cm 1.66 GeV 24.4 keV 11.6 cm 16.6 cm World eIoni - 3 -180 um -20 cm 2.23 cm 2.05 GeV 9.75 keV 3.9 cm 20.5 cm OutOfWorldTransportation + 0 61.3 um -9.36 cm 1.24 cm 1.04 keV 0 eV 0 fm 0 fm World initStep + 1 61.8 um -9.36 cm 1.24 cm 211 keV 1.04 keV 56 um 56 um World eIoni + 2 -1.98 mm -19.5 cm 7.55 mm 1.01 GeV 33.5 keV 11.7 cm 11.7 cm World eIoni + 3 925 um -20 cm 2.97 mm 1.06 GeV 976 eV 7.6 mm 12.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -188 um -16.1 cm 2.12 cm 69.1 keV 0 eV 0 fm 0 fm World initStep - 1 5.44 mm -17.7 cm 1.68 cm 159 MeV 6.49 keV 1.85 cm 1.85 cm World eIoni - 2 1.28 cm -18.5 cm 2 cm 237 MeV 2.1 keV 1.13 cm 2.98 cm World eIoni - 3 1.95 cm -19.9 cm 2.3 cm 382 MeV 3.53 keV 1.63 cm 4.61 cm OutOfWorldTransportation + 0 33.4 um -6.38 cm 1.23 cm 5.47 keV 0 eV 0 fm 0 fm World initStep + 1 25.7 um -6.41 cm 1.23 cm 3.74 MeV 5.47 keV 837 um 837 um World eIoni + 2 30.1 um -6.6 cm 1.22 cm 22.2 MeV 112 eV 1.85 mm 2.68 mm World eIoni + 3 57.7 um -8.56 cm 1.22 cm 219 MeV 2.19 keV 1.97 cm 2.23 cm World eIoni + 4 6.92 um -20 cm 1.2 cm 1.36 GeV 20.9 keV 11.4 cm 13.7 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 3 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -125 um -4.49 cm 1.51 cm 1.16 keV 0 eV 0 fm 0 fm World initStep - 1 -126 um -4.49 cm 1.51 cm 255 keV 1.16 keV 66 um 66 um World eIoni - 2 6.67 mm -18.2 cm 3.19 cm 1.37 GeV 32.9 keV 15.8 cm 15.8 cm World eIoni - 3 1.59 cm -19.9 cm 1.77 cm 1.54 GeV 3.31 keV 2.45 cm 18.3 cm OutOfWorldTransportation + 0 57.7 um -8.56 cm 1.22 cm 3.01 keV 0 eV 0 fm 0 fm World initStep + 1 53.8 um -8.57 cm 1.21 cm 1.3 MeV 3.01 keV 295 um 295 um World eIoni + 2 56.2 um -8.68 cm 1.21 cm 12.4 MeV 19.8 eV 1.11 mm 1.4 mm World eIoni + 3 64.2 um -20 cm 1.22 cm 1.14 GeV 21.5 keV 11.3 cm 11.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -4187,39 +4265,34 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -101 um -9.7 cm 1.83 cm 1.02 GeV 19.6 keV 10.2 cm 10.2 cm World eIoni - 2 -149 um -15.5 cm 2.06 cm 1.6 GeV 13.2 keV 5.77 cm 16 cm World eIoni - 3 -180 um -20 cm 2.18 cm 2.05 GeV 7.93 keV 4.53 cm 20.5 cm OutOfWorldTransportation + 1 0 fm -20 cm 2.22 cm 2.05 GeV 43.6 keV 20.5 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -149 um -15.5 cm 2.06 cm 1.05 keV 0 eV 0 fm 0 fm World initStep - 1 -146 um -15.5 cm 2.06 cm 216 keV 1.05 keV 57.1 um 57.1 um World eIoni - 2 -125 um -20 cm 2.06 cm 453 MeV 10.7 keV 4.79 cm 4.79 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 85.4 um -5.05 cm 1.57 cm 555 MeV 11.1 keV 5.53 cm 5.53 cm World eIoni + 2 278 um -20 cm 2.27 cm 2.05 GeV 33.1 keV 15 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -101 um -9.7 cm 1.83 cm 2.89 keV 0 eV 0 fm 0 fm World initStep - 1 -108 um -9.71 cm 1.83 cm 1.21 MeV 2.89 keV 276 um 276 um World eIoni - 2 -156 um -9.97 cm 1.83 cm 27 MeV 1.28 keV 2.58 mm 2.86 mm World eIoni - 3 -172 um -11.1 cm 1.83 cm 138 MeV 1.67 keV 1.11 cm 1.39 cm World eIoni - 4 -132 um -20 cm 1.83 cm 1.03 GeV 16.2 keV 8.92 cm 10.3 cm OutOfWorldTransportation + 0 85.4 um -5.05 cm 1.57 cm 87.7 keV 0 eV 0 fm 0 fm World initStep + 1 34.3 um -6.75 cm 1.55 cm 172 MeV 8.68 keV 1.9 cm 1.9 cm World eIoni + 2 -6.59 mm -20 cm 7.85 mm 1.5 GeV 25.8 keV 13.3 cm 15.2 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -172 um -11.1 cm 1.83 cm 3.07 keV 0 eV 0 fm 0 fm World initStep - 1 -182 um -11.1 cm 1.83 cm 1.35 MeV 3.07 keV 306 um 306 um World eIoni - 2 -196 um -11.3 cm 1.84 cm 21.6 MeV 16.5 eV 2.02 mm 2.33 mm World eIoni - 3 -138 um -20 cm 1.85 cm 892 MeV 18.5 keV 8.71 cm 8.94 cm OutOfWorldTransportation + 0 34.3 um -6.75 cm 1.55 cm 1.37 keV 0 eV 0 fm 0 fm World initStep + 1 30.8 um -6.75 cm 1.55 cm 336 keV 1.37 keV 84.2 um 84.2 um World eIoni + 2 7.22 um -20 cm 1.55 cm 1.32 GeV 24.2 keV 14.4 cm 14.4 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -4227,27 +4300,36 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -133 um -12.6 cm 2.05 cm 1.31 GeV 22.4 keV 13.1 cm 13.1 cm World eIoni - 2 132 um -19.1 cm 2.31 cm 1.96 GeV 14.8 keV 6.46 cm 19.6 cm World eIoni - 3 163 um -20 cm 2.34 cm 2.05 GeV 2.95 keV 9.5 mm 20.5 cm OutOfWorldTransportation + 1 336 um -8.98 cm 1.83 cm 948 MeV 19.4 keV 9.47 cm 9.47 cm World eIoni + 2 592 um -20 cm 2.23 cm 2.05 GeV 21.2 keV 11 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process + 0 336 um -8.98 cm 1.83 cm 6.77 keV 0 eV 0 fm 0 fm World initStep + 1 312 um -9.03 cm 1.83 cm 5.47 MeV 5.11 keV 1.19 mm 1.19 mm World eIoni + 2 -225 um -9.03 cm 1.84 cm 5.42 MeV 30.7 eV 562 um 1.76 mm World eIoni + 3 -3.11 mm -20 cm 1.86 cm 1.1 GeV 17.4 keV 11 cm 11.2 cm OutOfWorldTransportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 132 um -19.1 cm 2.31 cm 1.54 keV 0 eV 0 fm 0 fm World initStep - 1 135 um -19.1 cm 2.31 cm 411 keV 1.54 keV 101 um 101 um World eIoni - 2 150 um -20 cm 2.31 cm 95 MeV 1.3 keV 9.49 mm 9.59 mm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 -15.1 um -1 cm 8.86 mm 150 MeV 2.65 keV 1.42 cm 1.42 cm World eIoni + 2 -39.5 um -20 cm 2.22 cm 2.05 GeV 43.6 keV 19.1 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -133 um -12.6 cm 2.05 cm 1.42 keV 0 eV 0 fm 0 fm World initStep - 1 -137 um -12.6 cm 2.05 cm 358 keV 1.42 keV 89.1 um 89.1 um World eIoni - 2 -163 um -20 cm 2.05 cm 741 MeV 11.8 keV 7.7 cm 7.71 cm OutOfWorldTransportation + 0 -15.1 um -1 cm 8.86 mm 1.89 keV 0 eV 0 fm 0 fm World initStep + 1 -11.2 um -1.01 cm 8.86 mm 584 keV 1.89 keV 138 um 138 um World eIoni + 2 9.78 um -20 cm 8.89 mm 1.9 GeV 36.7 keV 19.9 cm 19.9 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -4255,48 +4337,48 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 0 fm -20 cm 2.22 cm 2.05 GeV 36.9 keV 20.5 cm 20.5 cm OutOfWorldTransportation + 1 -742 um -15.8 cm 2.12 cm 1.63 GeV 37.4 keV 16.3 cm 16.3 cm World eIoni + 2 -824 um -20 cm 2.27 cm 2.05 GeV 3.78 keV 4.2 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 7.39 um -7.07 cm 1.69 cm 756 MeV 12.2 keV 7.55 cm 7.55 cm World eIoni - 2 -42.3 um -9.62 cm 1.81 cm 1.01 GeV 5.78 keV 2.56 cm 10.1 cm World eIoni - 3 -168 um -20 cm 2.09 cm 2.05 GeV 18.7 keV 10.4 cm 20.5 cm OutOfWorldTransportation + 0 -742 um -15.8 cm 2.12 cm 3.85 keV 0 eV 0 fm 0 fm World initStep + 1 -755 um -15.8 cm 2.12 cm 2 MeV 3.85 keV 451 um 451 um World eIoni + 2 -758 um -15.8 cm 2.12 cm 3.33 MeV 0 eV 133 um 583 um World eIoni + 3 -526 um -17.4 cm 2.12 cm 163 MeV 3.14 keV 1.6 cm 1.66 cm World eIoni + 4 -64.2 um -19 cm 2.11 cm 323 MeV 1.57 keV 1.6 cm 3.25 cm World eIoni + 5 114 um -20 cm 2.1 cm 420 MeV 1.19 keV 9.67 mm 4.22 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -42.3 um -9.62 cm 1.81 cm 3.01 keV 0 eV 0 fm 0 fm World initStep - 1 -42.9 um -9.63 cm 1.81 cm 1.3 MeV 3.01 keV 294 um 294 um World eIoni - 2 -43.6 um -9.65 cm 1.81 cm 3.44 MeV 24.9 eV 214 um 509 um World eIoni - 3 3.09 mm -19.2 cm 1.61 cm 960 MeV 23.6 keV 9.58 cm 9.63 cm World eIoni - 4 3.41 mm -20 cm 1.6 cm 1.04 GeV 1.46 keV 7.73 mm 10.4 cm OutOfWorldTransportation + 0 -64.2 um -19 cm 2.11 cm 1.09 keV 0 eV 0 fm 0 fm World initStep + 1 -63.2 um -19 cm 2.11 cm 228 keV 1.09 keV 59.8 um 59.8 um World eIoni + 2 -58.1 um -20 cm 2.1 cm 96.7 MeV 2.41 keV 9.75 mm 9.81 mm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 3.09 mm -19.2 cm 1.61 cm 2.65 keV 0 eV 0 fm 0 fm World initStep - 1 3.1 mm -19.2 cm 1.61 cm 1.04 MeV 2.65 keV 238 um 238 um World eIoni - 2 3.06 mm -19.8 cm 1.62 cm 58.6 MeV 844 eV 5.76 mm 6 mm World eIoni - 3 3.07 mm -20 cm 1.62 cm 77.4 MeV 181 eV 1.87 mm 7.87 mm OutOfWorldTransportation + 0 -526 um -17.4 cm 2.12 cm 2.01 keV 0 eV 0 fm 0 fm World initStep + 1 -530 um -17.4 cm 2.12 cm 640 keV 2.01 keV 151 um 151 um World eIoni + 2 -1.45 mm -19.1 cm 2.07 cm 169 MeV 3.64 keV 1.69 cm 1.7 cm World eIoni + 3 -1.92 mm -20 cm 1.96 cm 256 MeV 1.44 keV 8.81 mm 2.58 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 3 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 7.39 um -7.07 cm 1.69 cm 4.69 keV 0 eV 0 fm 0 fm World initStep - 1 20.7 um -7.09 cm 1.69 cm 2.84 MeV 4.69 keV 636 um 636 um World eIoni - 2 42.2 um -7.28 cm 1.69 cm 22 MeV 305 eV 1.92 mm 2.55 mm World eIoni - 3 117 um -20 cm 1.68 cm 1.29 GeV 25.9 keV 12.7 cm 13 cm OutOfWorldTransportation + 0 -1.45 mm -19.1 cm 2.07 cm 1.44 keV 0 eV 0 fm 0 fm World initStep + 1 -1.45 mm -19.1 cm 2.07 cm 365 keV 1.44 keV 90.6 um 90.6 um World eIoni + 2 -1.44 mm -20 cm 2.07 cm 87.4 MeV 999 eV 8.74 mm 8.83 mm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -4304,28 +4386,59 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -345 um -9.36 cm 1.84 cm 986 MeV 19.6 keV 9.86 cm 9.86 cm World eIoni - 2 -345 um -9.37 cm 1.84 cm 987 MeV 0 eV 104 um 9.87 cm World eIoni - 3 -594 um -20 cm 2.16 cm 2.05 GeV 24.5 keV 10.6 cm 20.5 cm OutOfWorldTransportation + 1 204 um -6.71 cm 1.68 cm 721 MeV 13.2 keV 7.19 cm 7.19 cm World eIoni + 2 306 um -20 cm 2.23 cm 2.05 GeV 32.1 keV 13.3 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process + 0 204 um -6.71 cm 1.68 cm 996 eV 0 eV 0 fm 0 fm World initStep + 1 205 um -6.71 cm 1.68 cm 198 keV 996 eV 52.8 um 52.8 um World eIoni + 2 -2.23 cm -15.8 cm 4.81 cm 909 MeV 22.2 keV 10.5 cm 10.5 cm World eIoni + 3 -2.55 cm -17.1 cm 5.3 cm 1.04 GeV 3.37 keV 1.44 cm 12 cm WorldTransportation + 4 -2.8 cm -18.3 cm 5.69 cm 1.16 GeV 4.28 keV 1.29 cm 13.2 cm WorldTransportation + 5 -3 cm -19.4 cm 6.01 cm 1.27 GeV 1.87 keV 1.15 cm 14.4 cm WorldTransportation + 6 -3.06 cm -19.8 cm 6.11 cm 1.31 GeV 410 eV 3.84 mm 14.8 cm OutOfWorldTransportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -345 um -9.37 cm 1.84 cm 1.64 keV 0 eV 0 fm 0 fm World initStep - 1 -350 um -9.38 cm 1.84 cm 455 keV 1.64 keV 111 um 111 um World eIoni - 2 -377 um -20 cm 1.84 cm 1.06 GeV 16.4 keV 11 cm 11.1 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 10.5 um -5.63 mm 6.97 mm 106 MeV 1.88 keV 9.42 mm 9.42 mm World eIoni + 2 23.5 um -20 cm 2.22 cm 2.05 GeV 46.7 keV 19.6 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -345 um -9.36 cm 1.84 cm 3.78 keV 0 eV 0 fm 0 fm World initStep - 1 -340 um -9.38 cm 1.84 cm 1.95 MeV 3.78 keV 438 um 438 um World eIoni - 2 -332 um -9.48 cm 1.84 cm 11.9 MeV 111 eV 998 um 1.44 mm World eIoni - 3 -315 um -20 cm 1.85 cm 1.06 GeV 18.9 keV 10.5 cm 10.7 cm OutOfWorldTransportation + 0 10.5 um -5.63 mm 6.97 mm 5.82 keV 0 eV 0 fm 0 fm World initStep + 1 9.58 um -6.02 mm 7 mm 4.18 MeV 5.82 keV 935 um 935 um World eIoni + 2 -179 um -2.07 cm 7.03 mm 151 MeV 1.22 keV 1.46 cm 1.56 cm World eIoni + 3 -185 um -2.28 cm 7.03 mm 172 MeV 218 eV 2.11 mm 1.77 cm World eIoni + 4 -309 um -20 cm 7.09 mm 1.94 GeV 37.1 keV 17.7 cm 19.5 cm OutOfWorldTransportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process + 0 -185 um -2.28 cm 7.03 mm 1.49 keV 0 eV 0 fm 0 fm World initStep + 1 -181 um -2.28 cm 7.03 mm 385 keV 1.49 keV 95.2 um 95.2 um World eIoni + 2 -157 um -20 cm 7.05 mm 1.77 GeV 33.1 keV 19.4 cm 19.4 cm OutOfWorldTransportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 2 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process + 0 -179 um -2.07 cm 7.03 mm 1.32 keV 0 eV 0 fm 0 fm World initStep + 1 -176 um -2.07 cm 7.03 mm 318 keV 1.32 keV 80.1 um 80.1 um World eIoni + 2 -154 um -20 cm 7.05 mm 1.79 GeV 38 keV 20.4 cm 20.4 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -4333,66 +4446,80 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -2.36 um -5.9 cm 1.61 cm 640 MeV 11.3 keV 6.39 cm 6.39 cm World eIoni - 2 -59.1 um -8.54 cm 1.78 cm 904 MeV 7.08 keV 2.64 cm 9.03 cm World eIoni - 3 -82.4 um -10 cm 1.86 cm 1.05 GeV 3.82 keV 1.48 cm 10.5 cm World eIoni - 4 -177 um -20 cm 2.18 cm 2.05 GeV 24.6 keV 9.99 cm 20.5 cm OutOfWorldTransportation + 1 10.8 um -2.68 cm 1.27 cm 317 MeV 6.86 keV 3.14 cm 3.14 cm World eIoni + 2 20.2 um -6.7 cm 1.69 cm 720 MeV 8.41 keV 4.05 cm 7.19 cm World eIoni + 3 21.5 um -10.3 cm 1.89 cm 1.08 GeV 5.34 keV 3.59 cm 10.8 cm World eIoni + 4 21 um -11.8 cm 1.96 cm 1.23 GeV 2.39 keV 1.49 cm 12.3 cm World eIoni + 5 24.4 um -20 cm 2.22 cm 2.05 GeV 19.1 keV 8.23 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -82.4 um -10 cm 1.86 cm 8.43 keV 0 eV 0 fm 0 fm World initStep - 1 -109 um -10.1 cm 1.86 cm 4.47 MeV 1.56 keV 533 um 533 um World eIoni - 2 -2.35 mm -16.6 cm 2.03 cm 661 MeV 9.77 keV 6.58 cm 6.63 cm World eIoni - 3 -4.1 mm -20 cm 2.12 cm 998 MeV 9.84 keV 3.37 cm 10 cm OutOfWorldTransportation + 0 21 um -11.8 cm 1.96 cm 2.22 keV 0 eV 0 fm 0 fm World initStep + 1 14.9 um -11.8 cm 1.96 cm 765 keV 2.22 keV 179 um 179 um World eIoni + 2 796 um -13.4 cm 1.96 cm 158 MeV 2.51 keV 1.58 cm 1.6 cm World eIoni + 3 1.56 mm -17.4 cm 1.97 cm 568 MeV 9.25 keV 4.1 cm 5.69 cm World eIoni + 4 1.71 mm -19 cm 1.97 cm 719 MeV 2.73 keV 1.51 cm 7.2 cm World eIoni + 5 1.79 mm -20 cm 1.97 cm 823 MeV 1.21 keV 1.04 cm 8.24 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 4 +* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 5 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -2.35 mm -16.6 cm 2.03 cm 7.83 keV 0 eV 0 fm 0 fm World initStep - 1 -2.33 mm -16.7 cm 2.03 cm 6.94 MeV 4.66 keV 1.28 mm 1.28 mm World eIoni - 2 -2.62 mm -17.2 cm 2.25 cm 53.8 MeV 820 eV 5.65 mm 6.92 mm World eIoni - 3 -2.75 mm -20 cm 2.38 cm 337 MeV 6.79 keV 2.84 cm 3.53 cm OutOfWorldTransportation + 0 1.71 mm -19 cm 1.97 cm 4.6 keV 0 eV 0 fm 0 fm World initStep + 1 1.69 mm -19 cm 1.97 cm 2.74 MeV 4.6 keV 615 um 615 um World eIoni + 2 1.69 mm -19.2 cm 1.97 cm 20.8 MeV 95.5 eV 1.81 mm 2.42 mm World eIoni + 3 1.7 mm -20 cm 1.97 cm 105 MeV 1.63 keV 8.37 mm 1.08 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 6, Parent ID = 5 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -2.62 mm -17.2 cm 2.25 cm 20.7 keV 0 eV 0 fm 0 fm World initStep - 1 -2.58 mm -17.3 cm 2.24 cm 13.1 MeV 3.03 keV 1.41 mm 1.41 mm World eIoni - 2 -540 um -20 cm 2.29 cm 284 MeV 4.99 keV 2.73 cm 2.87 cm OutOfWorldTransportation + 0 1.56 mm -17.4 cm 1.97 cm 1.11 keV 0 eV 0 fm 0 fm World initStep + 1 1.56 mm -17.5 cm 1.97 cm 238 keV 1.11 keV 62.2 um 62.2 um World eIoni + 2 1.55 mm -20 cm 1.97 cm 255 MeV 6.75 keV 2.62 cm 2.62 cm OutOfWorldTransportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process + 0 21.5 um -10.3 cm 1.89 cm 1.94 keV 0 eV 0 fm 0 fm World initStep + 1 23.2 um -10.3 cm 1.89 cm 605 keV 1.94 keV 144 um 144 um World eIoni + 2 31.5 um -20 cm 1.89 cm 972 MeV 14.5 keV 9.93 cm 9.95 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -59.1 um -8.54 cm 1.78 cm 1.87 keV 0 eV 0 fm 0 fm World initStep - 1 -61.3 um -8.55 cm 1.78 cm 566 keV 1.87 keV 135 um 135 um World eIoni - 2 -72.7 um -20 cm 1.79 cm 1.15 GeV 17.3 keV 11.8 cm 11.8 cm OutOfWorldTransportation + 0 20.2 um -6.7 cm 1.69 cm 1.23 keV 0 eV 0 fm 0 fm World initStep + 1 23.5 um -6.7 cm 1.69 cm 280 keV 1.23 keV 71.6 um 71.6 um World eIoni + 2 48.6 um -20 cm 1.69 cm 1.33 GeV 26.2 keV 14.9 cm 14.9 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -2.36 um -5.9 cm 1.61 cm 2.59 keV 0 eV 0 fm 0 fm World initStep - 1 -9.38 um -5.91 cm 1.61 cm 996 keV 2.59 keV 229 um 229 um World eIoni - 2 -149 um -6.81 cm 1.59 cm 90.2 MeV 1.07 keV 8.93 mm 9.16 mm World eIoni - 3 1.23 mm -20 cm 1.61 cm 1.41 GeV 33.3 keV 13.2 cm 14.1 cm OutOfWorldTransportation + 0 10.8 um -2.68 cm 1.27 cm 2.46 keV 0 eV 0 fm 0 fm World initStep + 1 17.6 um -2.68 cm 1.27 cm 912 keV 2.46 keV 210 um 210 um World eIoni + 2 -277 um -3.67 cm 1.26 cm 99.4 MeV 649 eV 9.86 mm 1.01 cm World eIoni + 3 -1.29 mm -19.9 cm 1.41 cm 1.72 GeV 37.8 keV 16.2 cm 17.2 cm World eIoni + 4 -1.3 mm -20 cm 1.41 cm 1.73 GeV 16 eV 1.25 mm 17.3 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 0 fm -20 cm 2.22 cm 2.05 GeV 33.2 keV 20.5 cm 20.5 cm OutOfWorldTransportation + 0 -1.29 mm -19.9 cm 1.41 cm 2.44 keV 0 eV 0 fm 0 fm World initStep + 1 -1.3 mm -19.9 cm 1.4 cm 901 keV 2.44 keV 208 um 208 um World eIoni + 2 -1.3 mm -20 cm 1.4 cm 12.6 MeV 30.3 eV 1.17 mm 1.38 mm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -4400,28 +4527,28 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 187 um -7.11 cm 1.74 cm 762 MeV 11.7 keV 7.6 cm 7.6 cm World eIoni - 2 424 um -14.8 cm 2.1 cm 1.53 GeV 15.5 keV 7.74 cm 15.3 cm World eIoni - 3 523 um -20 cm 2.26 cm 2.05 GeV 13.9 keV 5.16 cm 20.5 cm OutOfWorldTransportation + 1 -4.36 um -3.65 mm 5.76 mm 86.5 MeV 1.6 keV 7.09 mm 7.09 mm World eIoni + 2 -161 um -8.57 cm 1.8 cm 907 MeV 19.5 keV 8.35 cm 9.06 cm World eIoni + 3 -330 um -20 cm 2.2 cm 2.05 GeV 24.9 keV 11.4 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 424 um -14.8 cm 2.1 cm 992 eV 0 eV 0 fm 0 fm World initStep - 1 425 um -14.8 cm 2.1 cm 196 keV 992 eV 52.6 um 52.6 um World eIoni - 2 429 um -20 cm 2.11 cm 516 MeV 8.71 keV 5.56 cm 5.57 cm OutOfWorldTransportation + 0 -161 um -8.57 cm 1.8 cm 1.39 keV 0 eV 0 fm 0 fm World initStep + 1 -165 um -8.58 cm 1.8 cm 343 keV 1.39 keV 85.8 um 85.8 um World eIoni + 2 -193 um -20 cm 1.8 cm 1.14 GeV 18.1 keV 12.2 cm 12.2 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 187 um -7.11 cm 1.74 cm 13.7 keV 0 eV 0 fm 0 fm World initStep - 1 146 um -7.27 cm 1.73 cm 16.2 MeV 5.25 keV 2.31 mm 2.31 mm World eIoni - 2 -637 um -7.76 cm 2.01 cm 65.9 MeV 908 eV 5.95 mm 8.25 mm World eIoni - 3 -1.97 mm -20 cm 2.46 cm 1.29 GeV 24.8 keV 12.3 cm 13.1 cm OutOfWorldTransportation + 0 -4.36 um -3.65 mm 5.76 mm 3.17 keV 0 eV 0 fm 0 fm World initStep + 1 -15.8 um -3.78 mm 5.76 mm 1.43 MeV 3.17 keV 322 um 322 um World eIoni + 2 -68.2 um -6.57 mm 5.76 mm 29.3 MeV 15.2 eV 2.79 mm 3.11 mm World eIoni + 3 -197 um -20 cm 5.78 mm 1.96 GeV 32.5 keV 19.3 cm 19.7 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -4429,259 +4556,274 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 21.5 um -2.34 cm 1.21 cm 284 MeV 4.75 keV 2.8 cm 2.8 cm World eIoni - 2 10.1 um -3.8 cm 1.43 cm 430 MeV 6.52 keV 1.48 cm 4.27 cm World eIoni - 3 -25.2 um -8.52 cm 1.8 cm 902 MeV 9.44 keV 4.74 cm 9.01 cm World eIoni - 4 -70.9 um -20 cm 2.22 cm 2.05 GeV 25.2 keV 11.5 cm 20.5 cm OutOfWorldTransportation + 1 -82.4 um -3.65 cm 1.42 cm 415 MeV 8.78 keV 4.12 cm 4.12 cm World eIoni + 2 -65 um -19.9 cm 2.23 cm 2.04 GeV 36.2 keV 16.3 cm 20.4 cm World eIoni + 3 -64.7 um -20 cm 2.23 cm 2.05 GeV 195 eV 1.08 mm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -25.2 um -8.52 cm 1.8 cm 1.03 keV 0 eV 0 fm 0 fm World initStep - 1 -25.9 um -8.53 cm 1.8 cm 208 keV 1.03 keV 55.2 um 55.2 um World eIoni - 2 3.5 mm -18.4 cm 2.23 mm 985 MeV 25.7 keV 11.4 cm 11.4 cm World eIoni - 3 2.23 mm -20 cm -9.39 mm 1.15 GeV 4.51 keV 2.01 cm 13.4 cm OutOfWorldTransportation + 0 -65 um -19.9 cm 2.23 cm 1.06 keV 0 eV 0 fm 0 fm World initStep + 1 -64.3 um -19.9 cm 2.23 cm 220 keV 1.06 keV 58.1 um 58.1 um World eIoni + 2 -62.2 um -20 cm 2.23 cm 10.8 MeV 17.4 eV 1.06 mm 1.12 mm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 10.1 um -3.8 cm 1.43 cm 1.26 keV 0 eV 0 fm 0 fm World initStep - 1 10.4 um -3.8 cm 1.43 cm 293 keV 1.26 keV 74.5 um 74.5 um World eIoni - 2 12.4 um -20 cm 1.43 cm 1.62 GeV 39.1 keV 18.5 cm 18.5 cm OutOfWorldTransportation + 0 -82.4 um -3.65 cm 1.42 cm 2.11 keV 0 eV 0 fm 0 fm World initStep + 1 -89.3 um -3.65 cm 1.42 cm 698 keV 2.11 keV 164 um 164 um World eIoni + 2 -119 um -3.89 cm 1.41 cm 24.4 MeV 286 eV 2.37 mm 2.53 mm World eIoni + 3 -607 um -15.7 cm 1.48 cm 1.2 GeV 20 keV 11.8 cm 12 cm World eIoni + 4 -52.1 um -20 cm 1.47 cm 1.64 GeV 6.96 keV 4.33 cm 16.4 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 21.5 um -2.34 cm 1.21 cm 4.33 keV 0 eV 0 fm 0 fm World initStep - 1 22.6 um -2.36 cm 1.21 cm 2.46 MeV 4.33 keV 554 um 554 um World eIoni - 2 22.6 um -2.37 cm 1.21 cm 3.4 MeV 0 eV 93.5 um 647 um World eIoni - 3 483 um -5.08 cm 1.18 cm 274 MeV 2.76 keV 2.71 cm 2.78 cm World eIoni - 4 458 um -16 cm 1.23 cm 1.36 GeV 28.1 keV 10.9 cm 13.7 cm World eIoni - 5 488 um -20 cm 1.24 cm 1.77 GeV 8.87 keV 4.05 cm 17.7 cm OutOfWorldTransportation + 0 -607 um -15.7 cm 1.48 cm 1.91 keV 0 eV 0 fm 0 fm World initStep + 1 -612 um -15.7 cm 1.48 cm 590 keV 1.91 keV 141 um 141 um World eIoni + 2 -634 um -20 cm 1.48 cm 433 MeV 5.75 keV 4.36 cm 4.38 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 458 um -16 cm 1.23 cm 7.94 keV 0 eV 0 fm 0 fm World initStep - 1 424 um -16 cm 1.23 cm 7.24 MeV 3.35 keV 1.44 mm 1.44 mm World eIoni - 2 -462 um -16.3 cm 1.41 cm 39.8 MeV 345 eV 4.13 mm 5.57 mm World eIoni - 3 -1.26 mm -20 cm 1.56 cm 405 MeV 6.85 keV 3.66 cm 4.22 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 42.6 um -1.96 cm 1.15 cm 246 MeV 2.39 keV 2.41 cm 2.41 cm World eIoni + 2 141 um -5.77 cm 1.64 cm 627 MeV 5.81 keV 3.84 cm 6.25 cm World eIoni + 3 183 um -8.47 cm 1.83 cm 897 MeV 5.79 keV 2.71 cm 8.96 cm World eIoni + 4 239 um -17.5 cm 2.19 cm 1.8 GeV 21.4 keV 9.07 cm 18 cm World eIoni + 5 243 um -20 cm 2.26 cm 2.05 GeV 6.28 keV 2.47 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 483 um -5.08 cm 1.18 cm 1.15 keV 0 eV 0 fm 0 fm World initStep - 1 484 um -5.08 cm 1.18 cm 251 keV 1.15 keV 65.1 um 65.1 um World eIoni - 2 -1.06 cm -18.4 cm 2.28 cm 1.33 GeV 29.1 keV 15.4 cm 15.4 cm World eIoni - 3 -1.33 cm -20 cm 3.42 cm 1.49 GeV 3.26 keV 1.93 cm 17.3 cm OutOfWorldTransportation + 0 239 um -17.5 cm 2.19 cm 1.02 keV 0 eV 0 fm 0 fm World initStep + 1 239 um -17.5 cm 2.19 cm 204 keV 1.02 keV 54.3 um 54.3 um World eIoni + 2 239 um -20 cm 2.19 cm 247 MeV 8.52 keV 2.54 cm 2.55 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -78.5 um -3.12 cm 1.34 cm 362 MeV 8.1 keV 3.59 cm 3.59 cm World eIoni - 2 -121 um -10.6 cm 1.93 cm 1.11 GeV 12.4 keV 7.5 cm 11.1 cm World eIoni - 3 -123 um -11.3 cm 1.96 cm 1.18 GeV 1.5 keV 7.09 mm 11.8 cm World eIoni - 4 -141 um -20 cm 2.26 cm 2.05 GeV 18.3 keV 8.7 cm 20.5 cm OutOfWorldTransportation + 0 183 um -8.47 cm 1.83 cm 1.54 keV 0 eV 0 fm 0 fm World initStep + 1 187 um -8.47 cm 1.83 cm 410 keV 1.54 keV 101 um 101 um World eIoni + 2 214 um -20 cm 1.82 cm 1.15 GeV 22.2 keV 12.1 cm 12.1 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -123 um -11.3 cm 1.96 cm 2.85 keV 0 eV 0 fm 0 fm World initStep - 1 -118 um -11.3 cm 1.96 cm 1.18 MeV 2.85 keV 269 um 269 um World eIoni - 2 -227 um -11.9 cm 1.95 cm 62.7 MeV 526 eV 6.16 mm 6.43 mm World eIoni - 3 -246 um -19.6 cm 1.91 cm 827 MeV 16.4 keV 7.64 cm 8.28 cm World eIoni - 4 -244 um -20 cm 1.91 cm 869 MeV 1.08 keV 4.26 mm 8.71 cm OutOfWorldTransportation + 0 141 um -5.77 cm 1.64 cm 1.59 keV 0 eV 0 fm 0 fm World initStep + 1 141 um -5.77 cm 1.64 cm 434 keV 1.59 keV 106 um 106 um World eIoni + 2 140 um -20 cm 1.63 cm 1.42 GeV 25.9 keV 15.1 cm 15.1 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 4 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -246 um -19.6 cm 1.91 cm 42.1 keV 0 eV 0 fm 0 fm World initStep - 1 -276 um -19.6 cm 1.91 cm 3.93 MeV 318 eV 400 um 400 um World eIoni - 2 -293 um -20 cm 1.91 cm 42.7 MeV 664 eV 3.87 mm 4.27 mm OutOfWorldTransportation + 0 42.6 um -1.96 cm 1.15 cm 7.61 keV 0 eV 0 fm 0 fm World initStep + 1 59 um -2.02 cm 1.15 cm 6.71 MeV 6 keV 1.37 mm 1.37 mm World eIoni + 2 847 um -2.22 cm 1.21 cm 26.5 MeV 484 eV 2.25 mm 3.63 mm World eIoni + 3 1.51 mm -2.96 cm 1.26 cm 100 MeV 1.45 keV 7.46 mm 1.11 cm World eIoni + 4 2.74 mm -15.8 cm 1.38 cm 1.38 GeV 32.4 keV 12.8 cm 14 cm World eIoni + 5 2.81 mm -18.2 cm 1.39 cm 1.62 GeV 3.2 keV 2.38 cm 16.3 cm World eIoni + 6 2.85 mm -20 cm 1.4 cm 1.8 GeV 4.84 keV 1.81 cm 18.1 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -121 um -10.6 cm 1.93 cm 1.94 keV 0 eV 0 fm 0 fm World initStep - 1 -116 um -10.6 cm 1.93 cm 605 keV 1.94 keV 144 um 144 um World eIoni - 2 -89.3 um -20 cm 1.93 cm 940 MeV 13.6 keV 9.6 cm 9.61 cm OutOfWorldTransportation + 0 2.81 mm -18.2 cm 1.39 cm 4.27 keV 0 eV 0 fm 0 fm World initStep + 1 2.82 mm -18.2 cm 1.39 cm 2.41 MeV 4.27 keV 541 um 541 um World eIoni + 2 2.83 mm -18.5 cm 1.39 cm 32.4 MeV 367 eV 3 mm 3.55 mm World eIoni + 3 2.83 mm -20 cm 1.39 cm 181 MeV 2.43 keV 1.49 cm 1.84 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -78.5 um -3.12 cm 1.34 cm 1.46 keV 0 eV 0 fm 0 fm World initStep - 1 -74.1 um -3.13 cm 1.34 cm 376 keV 1.46 keV 93.1 um 93.1 um World eIoni - 2 -45.2 um -20 cm 1.34 cm 1.69 GeV 32.5 keV 18.4 cm 18.5 cm OutOfWorldTransportation + 0 2.74 mm -15.8 cm 1.38 cm 1.75 keV 0 eV 0 fm 0 fm World initStep + 1 2.74 mm -15.8 cm 1.38 cm 509 keV 1.75 keV 123 um 123 um World eIoni + 2 2.72 mm -20 cm 1.38 cm 419 MeV 6.18 keV 4.24 cm 4.25 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 18.5 um -9.58 mm 8.71 mm 146 MeV 2.08 keV 1.37 cm 1.37 cm World eIoni - 2 -51.3 um -16 cm 2.11 cm 1.65 GeV 30.3 keV 15.1 cm 16.5 cm World eIoni - 3 -52.6 um -16.7 cm 2.13 cm 1.72 GeV 976 eV 6.74 mm 17.2 cm World eIoni - 4 -58.2 um -20 cm 2.22 cm 2.05 GeV 9.85 keV 3.34 cm 20.5 cm OutOfWorldTransportation + 0 1.51 mm -2.96 cm 1.26 cm 4.76 keV 0 eV 0 fm 0 fm World initStep + 1 1.53 mm -2.99 cm 1.26 cm 2.92 MeV 4.76 keV 655 um 655 um World eIoni + 2 1.55 mm -3.19 cm 1.26 cm 22.6 MeV 143 eV 1.97 mm 2.63 mm World eIoni + 3 1.57 mm -3.61 cm 1.27 cm 64.6 MeV 908 eV 4.21 mm 6.84 mm World eIoni + 4 1.6 mm -6.55 cm 1.28 cm 359 MeV 5.88 keV 2.95 cm 3.63 cm World eIoni + 5 1.56 mm -12.8 cm 1.29 cm 986 MeV 11.6 keV 6.27 cm 9.9 cm World eIoni + 6 1.55 mm -15.4 cm 1.29 cm 1.24 GeV 5.7 keV 2.57 cm 12.5 cm World eIoni + 7 1.55 mm -17.4 cm 1.29 cm 1.44 GeV 4.49 keV 2 cm 14.5 cm World eIoni + 8 1.54 mm -20 cm 1.29 cm 1.7 GeV 3.25 keV 2.61 cm 17.1 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 13, Parent ID = 6 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -52.6 um -16.7 cm 2.13 cm 1.27 keV 0 eV 0 fm 0 fm World initStep - 1 -53 um -16.7 cm 2.13 cm 298 keV 1.27 keV 75.6 um 75.6 um World eIoni - 2 -55 um -20 cm 2.12 cm 334 MeV 5.41 keV 3.42 cm 3.43 cm OutOfWorldTransportation + 0 1.55 mm -17.4 cm 1.29 cm 1.15 keV 0 eV 0 fm 0 fm World initStep + 1 1.55 mm -17.4 cm 1.29 cm 249 keV 1.15 keV 64.7 um 64.7 um World eIoni + 2 1.55 mm -20 cm 1.29 cm 261 MeV 3.13 keV 2.67 cm 2.68 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 12, Parent ID = 6 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -51.3 um -16 cm 2.11 cm 13.4 keV 0 eV 0 fm 0 fm World initStep - 1 -102 um -16.1 cm 2.1 cm 15.6 MeV 2.96 keV 2.26 mm 2.26 mm World eIoni - 2 19.5 um -16.2 cm 2.1 cm 18.1 MeV 72 eV 282 um 2.54 mm World eIoni - 3 2.33 mm -20 cm 2 cm 402 MeV 9.07 keV 3.86 cm 4.11 cm OutOfWorldTransportation + 0 1.55 mm -15.4 cm 1.29 cm 1.11 keV 0 eV 0 fm 0 fm World initStep + 1 1.55 mm -15.4 cm 1.29 cm 236 keV 1.11 keV 61.7 um 61.7 um World eIoni + 2 1.55 mm -20 cm 1.29 cm 461 MeV 9.85 keV 4.83 cm 4.84 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 11, Parent ID = 6 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 19.5 um -16.2 cm 2.1 cm 7.95 keV 0 eV 0 fm 0 fm World initStep - 1 49.1 um -16.2 cm 2.1 cm 7.23 MeV 5.75 keV 1.44 mm 1.44 mm World eIoni - 2 -1.97 mm -17.1 cm 2.13 cm 91.5 MeV 1.14 keV 8.89 mm 1.03 cm World eIoni - 3 -2.97 mm -20 cm 2.15 cm 385 MeV 4.93 keV 2.93 cm 3.97 cm OutOfWorldTransportation + 0 1.56 mm -12.8 cm 1.29 cm 1.38 keV 0 eV 0 fm 0 fm World initStep + 1 1.57 mm -12.8 cm 1.29 cm 342 keV 1.38 keV 85.5 um 85.5 um World eIoni + 2 1.58 mm -20 cm 1.28 cm 718 MeV 16.3 keV 7.48 cm 7.48 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 10, Parent ID = 6 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 18.5 um -9.58 mm 8.71 mm 1.91 keV 0 eV 0 fm 0 fm World initStep - 1 13.4 um -9.63 mm 8.71 mm 589 keV 1.91 keV 141 um 141 um World eIoni - 2 -14.3 um -20 cm 8.69 mm 1.9 GeV 31.5 keV 20 cm 20 cm OutOfWorldTransportation + 0 1.6 mm -6.55 cm 1.28 cm 7.21 keV 0 eV 0 fm 0 fm World initStep + 1 1.6 mm -6.57 cm 1.28 cm 1.32 MeV 329 eV 140 um 140 um World eIoni + 2 -1.41 mm -14.1 cm 1.7 cm 755 MeV 11.1 keV 7.58 cm 7.59 cm World eIoni + 3 -3.01 mm -20 cm 1.86 cm 1.34 GeV 11.5 keV 5.9 cm 13.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 14, Parent ID = 10 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 952 nm -3.95 mm 5.97 mm 89.6 MeV 1.57 keV 7.46 mm 7.46 mm World eIoni - 2 287 um -13.1 cm 2.02 cm 1.36 GeV 27.1 keV 12.8 cm 13.6 cm World eIoni - 3 395 um -20 cm 2.23 cm 2.05 GeV 10.2 keV 6.91 cm 20.5 cm OutOfWorldTransportation + 0 -1.41 mm -14.1 cm 1.7 cm 1.07 keV 0 eV 0 fm 0 fm World initStep + 1 -1.42 mm -14.1 cm 1.7 cm 222 keV 1.07 keV 58.5 um 58.5 um World eIoni + 2 -1.43 mm -20 cm 1.7 cm 589 MeV 15.8 keV 6.32 cm 6.33 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 9, Parent ID = 6 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 287 um -13.1 cm 2.02 cm 6.03 keV 0 eV 0 fm 0 fm World initStep - 1 294 um -13.1 cm 2.01 cm 4.45 MeV 6.03 keV 997 um 997 um World eIoni - 2 323 um -13.6 cm 2.01 cm 47.7 MeV 1.71 keV 4.33 mm 5.33 mm World eIoni - 3 359 um -20 cm 2.02 cm 691 MeV 13.4 keV 6.43 cm 6.96 cm OutOfWorldTransportation + 0 1.57 mm -3.61 cm 1.27 cm 174 keV 0 eV 0 fm 0 fm World initStep + 1 1.25 cm -8.12 cm 2.09 cm 451 MeV 12.1 keV 4.9 cm 4.9 cm World eIoni + 2 1.42 cm -8.61 cm 2.13 cm 501 MeV 550 eV 5.27 mm 5.43 cm World eIoni + 3 2.36 cm -12.5 cm 2.39 cm 892 MeV 4.59 keV 4.04 cm 9.47 cm World eIoni + 4 2.48 cm -13.2 cm 2.42 cm 963 MeV 523 eV 7.2 mm 10.2 cm World eIoni + 5 3.3 cm -19.7 cm 2.65 cm 1.61 GeV 12.4 keV 6.55 cm 16.7 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 18, Parent ID = 9 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 952 nm -3.95 mm 5.97 mm 6.65 keV 0 eV 0 fm 0 fm World initStep - 1 23.8 um -4.45 mm 5.96 mm 5.3 MeV 4.58 keV 1.16 mm 1.16 mm World eIoni - 2 -1.35 mm -6.88 mm 5.47 mm 29.6 MeV 246 eV 3.4 mm 4.56 mm World eIoni - 3 -2.51 mm -5.03 cm 5.27 mm 463 MeV 7.52 keV 4.34 cm 4.8 cm World eIoni - 4 -3.02 mm -15.8 cm 5.41 mm 1.54 GeV 29.8 keV 10.8 cm 15.6 cm World eIoni - 5 -3.13 mm -20 cm 5.43 mm 1.96 GeV 9.34 keV 4.16 cm 19.8 cm OutOfWorldTransportation + 0 2.48 cm -13.2 cm 2.42 cm 4.55 keV 0 eV 0 fm 0 fm World initStep + 1 2.48 cm -13.3 cm 2.42 cm 2.69 MeV 4.55 keV 604 um 604 um World eIoni + 2 2.48 cm -13.4 cm 2.42 cm 16.2 MeV 50.8 eV 1.35 mm 1.95 mm World eIoni + 3 2.48 cm -13.8 cm 2.42 cm 61.5 MeV 119 eV 4.53 mm 6.48 mm World eIoni + 4 2.47 cm -17.1 cm 2.42 cm 384 MeV 6.8 keV 3.23 cm 3.88 cm World eIoni + 5 2.47 cm -19.8 cm 2.42 cm 661 MeV 8.32 keV 2.77 cm 6.65 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 20, Parent ID = 18 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -3.02 mm -15.8 cm 5.41 mm 1.33 keV 0 eV 0 fm 0 fm World initStep - 1 -3.02 mm -15.8 cm 5.4 mm 320 keV 1.33 keV 80.6 um 80.6 um World eIoni - 2 -3 mm -20 cm 5.39 mm 416 MeV 7.94 keV 4.27 cm 4.28 cm OutOfWorldTransportation + 0 2.47 cm -17.1 cm 2.42 cm 1.38 keV 0 eV 0 fm 0 fm World initStep + 1 2.47 cm -17.1 cm 2.42 cm 339 keV 1.38 keV 85 um 85 um World eIoni + 2 2.47 cm -19.8 cm 2.42 cm 277 MeV 4.46 keV 2.81 cm 2.82 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 19, Parent ID = 18 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -2.51 mm -5.03 cm 5.27 mm 3.54 keV 0 eV 0 fm 0 fm World initStep - 1 -2.51 mm -5.04 cm 5.25 mm 1.73 MeV 3.54 keV 390 um 390 um World eIoni - 2 -2.47 mm -5.41 cm 5.26 mm 38.2 MeV 487 eV 3.65 mm 4.04 mm World eIoni - 3 -2.37 mm -7.4 cm 5.32 mm 238 MeV 2.74 keV 2 cm 2.4 cm World eIoni - 4 -2.31 mm -16.4 cm 5.44 mm 1.13 GeV 17.2 keV 8.97 cm 11.4 cm World eIoni - 5 -2.29 mm -20 cm 5.49 mm 1.5 GeV 5.62 keV 3.63 cm 15 cm OutOfWorldTransportation + 0 2.48 cm -13.8 cm 2.42 cm 2.29 keV 0 eV 0 fm 0 fm World initStep + 1 2.48 cm -13.9 cm 2.42 cm 804 keV 2.29 keV 187 um 187 um World eIoni + 2 2.17 cm -17.8 cm 2.45 cm 399 MeV 8.41 keV 4.01 cm 4.03 cm World eIoni + 3 2.07 cm -19.9 cm 2.53 cm 604 MeV 6.1 keV 2.06 cm 6.08 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 4 +* G4Track Information: Particle = e-, Track ID = 17, Parent ID = 9 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -2.31 mm -16.4 cm 5.44 mm 1.46 keV 0 eV 0 fm 0 fm World initStep - 1 -2.31 mm -16.4 cm 5.44 mm 373 keV 1.46 keV 92.4 um 92.4 um World eIoni - 2 -2.33 mm -20 cm 5.46 mm 363 MeV 7.82 keV 3.69 cm 3.7 cm OutOfWorldTransportation + 0 2.36 cm -12.5 cm 2.39 cm 3.33 keV 0 eV 0 fm 0 fm World initStep + 1 2.36 cm -12.5 cm 2.39 cm 1.56 MeV 3.33 keV 352 um 352 um World eIoni + 2 2.35 cm -12.9 cm 2.39 cm 38.5 MeV 107 eV 3.7 mm 4.05 mm World eIoni + 3 2.35 cm -19.9 cm 2.39 cm 734 MeV 14.7 keV 6.95 cm 7.36 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 4 +* G4Track Information: Particle = e-, Track ID = 16, Parent ID = 9 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -2.37 mm -7.4 cm 5.32 mm 1.15 keV 0 eV 0 fm 0 fm World initStep - 1 -2.37 mm -7.41 cm 5.32 mm 249 keV 1.15 keV 64.7 um 64.7 um World eIoni - 2 -2.36 mm -20 cm 5.29 mm 1.26 GeV 32.3 keV 14.4 cm 14.4 cm OutOfWorldTransportation + 0 1.42 cm -8.61 cm 2.13 cm 4.99 keV 0 eV 0 fm 0 fm World initStep + 1 1.42 cm -8.64 cm 2.13 cm 3.17 MeV 4.99 keV 711 um 711 um World eIoni + 2 1.43 cm -9.29 cm 2.13 cm 68.5 MeV 630 eV 6.54 mm 7.25 mm World eIoni + 3 1.45 cm -17.5 cm 2.15 cm 891 MeV 13.9 keV 8.22 cm 8.95 cm World eIoni + 4 1.45 cm -19.9 cm 2.16 cm 1.13 GeV 2.63 keV 2.43 cm 11.4 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 21, Parent ID = 16 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -431 um -12.6 cm 1.96 cm 1.31 GeV 22.6 keV 13.1 cm 13.1 cm World eIoni - 2 -498 um -14.2 cm 2.02 cm 1.47 GeV 3.38 keV 1.6 cm 14.7 cm World eIoni - 3 -689 um -20 cm 2.18 cm 2.05 GeV 12.4 keV 5.84 cm 20.5 cm OutOfWorldTransportation + 0 1.45 cm -17.5 cm 2.15 cm 1.5 keV 0 eV 0 fm 0 fm World initStep + 1 1.45 cm -17.5 cm 2.15 cm 393 keV 1.5 keV 97 um 97 um World eIoni + 2 1.44 cm -19.9 cm 2.15 cm 243 MeV 3.51 keV 2.45 cm 2.46 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 15, Parent ID = 9 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -498 um -14.2 cm 2.02 cm 6.53 keV 0 eV 0 fm 0 fm World initStep - 1 -505 um -14.2 cm 2.02 cm 277 keV 73.5 eV 29.4 um 29.4 um World eIoni - 2 -6.48 mm -18.1 cm 2.44 cm 397 MeV 8.97 keV 4.09 cm 4.09 cm World eIoni - 3 -4.83 mm -20 cm 2.66 cm 584 MeV 3.89 keV 1.89 cm 5.98 cm OutOfWorldTransportation + 0 1.25 cm -8.12 cm 2.09 cm 8.31 keV 0 eV 0 fm 0 fm World initStep + 1 1.25 cm -8.19 cm 2.08 cm 7.83 MeV 3.46 keV 1.51 mm 1.51 mm World eIoni + 2 1.32 cm -8.46 cm 2.19 cm 34.7 MeV 338 eV 3.03 mm 4.54 mm World eIoni + 3 1.45 cm -17.9 cm 2.34 cm 981 MeV 15 keV 9.47 cm 9.92 cm World eIoni + 4 1.46 cm -19.9 cm 2.34 cm 1.18 GeV 3.18 keV 2.03 cm 11.9 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 22, Parent ID = 15 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process + 0 1.45 cm -17.9 cm 2.34 cm 3.02 keV 0 eV 0 fm 0 fm World initStep + 1 1.45 cm -17.9 cm 2.34 cm 1.3 MeV 3.02 keV 296 um 296 um World eIoni + 2 1.45 cm -18 cm 2.34 cm 6.92 MeV 970 eV 562 um 858 um World eIoni + 3 1.43 cm -19.8 cm 2.35 cm 185 MeV 1.69 keV 1.78 cm 1.87 cm World eIoni + 4 1.43 cm -19.9 cm 2.35 cm 203 MeV 1.03 keV 1.76 mm 2.04 cm OutOfWorldTransportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 23, Parent ID = 22 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -431 um -12.6 cm 1.96 cm 1.07 keV 0 eV 0 fm 0 fm World initStep - 1 -433 um -12.6 cm 1.96 cm 222 keV 1.07 keV 58.5 um 58.5 um World eIoni - 2 -444 um -20 cm 1.96 cm 744 MeV 19.1 keV 8.15 cm 8.16 cm OutOfWorldTransportation + 0 1.43 cm -19.8 cm 2.35 cm 2.44 keV 0 eV 0 fm 0 fm World initStep + 1 1.43 cm -19.8 cm 2.34 cm 898 keV 2.44 keV 207 um 207 um World eIoni + 2 1.43 cm -19.9 cm 2.34 cm 17.7 MeV 111 eV 1.68 mm 1.88 mm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -4689,84 +4831,98 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 233 um -7.05 cm 1.71 cm 754 MeV 13.1 keV 7.53 cm 7.53 cm World eIoni - 2 356 um -20 cm 2.22 cm 2.05 GeV 25.9 keV 13 cm 20.5 cm OutOfWorldTransportation + 1 11.7 um -4.48 cm 1.52 cm 499 MeV 13.1 keV 4.97 cm 4.97 cm World eIoni + 2 -2.94 um -5.21 cm 1.59 cm 572 MeV 2.36 keV 7.33 mm 5.7 cm World eIoni + 3 -127 um -15.4 cm 2.11 cm 1.59 GeV 21.3 keV 10.2 cm 15.9 cm World eIoni + 4 -132 um -15.9 cm 2.13 cm 1.64 GeV 330 eV 4.19 mm 16.4 cm World eIoni + 5 -171 um -20 cm 2.24 cm 2.05 GeV 9.04 keV 4.14 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 233 um -7.05 cm 1.71 cm 1.15 keV 0 eV 0 fm 0 fm World initStep - 1 236 um -7.05 cm 1.71 cm 250 keV 1.15 keV 64.8 um 64.8 um World eIoni - 2 260 um -20 cm 1.71 cm 1.3 GeV 29.9 keV 14.9 cm 14.9 cm OutOfWorldTransportation + 0 -132 um -15.9 cm 2.13 cm 1.83 keV 0 eV 0 fm 0 fm World initStep + 1 -127 um -15.9 cm 2.13 cm 550 keV 1.83 keV 132 um 132 um World eIoni + 2 -107 um -20 cm 2.13 cm 413 MeV 4.98 keV 4.17 cm 4.19 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -389 um -14.3 cm 2.11 cm 1.48 GeV 27.2 keV 14.8 cm 14.8 cm World eIoni - 2 -454 um -20 cm 2.28 cm 2.05 GeV 12.2 keV 5.72 cm 20.5 cm OutOfWorldTransportation + 0 -127 um -15.4 cm 2.11 cm 3.38 keV 0 eV 0 fm 0 fm World initStep + 1 -115 um -15.5 cm 2.11 cm 1.49 MeV 1.02 keV 273 um 273 um World eIoni + 2 138 um -17.4 cm 2.19 cm 190 MeV 2.46 keV 1.9 cm 1.92 cm World eIoni + 3 483 um -20 cm 2.15 cm 455 MeV 6 keV 2.65 cm 4.57 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 4 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -389 um -14.3 cm 2.11 cm 1.48 keV 0 eV 0 fm 0 fm World initStep - 1 -384 um -14.3 cm 2.11 cm 383 keV 1.48 keV 94.8 um 94.8 um World eIoni - 2 -361 um -20 cm 2.11 cm 571 MeV 14.3 keV 5.86 cm 5.87 cm OutOfWorldTransportation + 0 138 um -17.4 cm 2.19 cm 3.36 keV 0 eV 0 fm 0 fm World initStep + 1 126 um -17.4 cm 2.19 cm 1.58 MeV 3.36 keV 357 um 357 um World eIoni + 2 45 um -17.8 cm 2.19 cm 43.9 MeV 87.1 eV 4.23 mm 4.59 mm World eIoni + 3 -33 um -18.3 cm 2.18 cm 97.9 MeV 790 eV 5.4 mm 9.99 mm World eIoni + 4 -135 um -20 cm 2.16 cm 265 MeV 4.66 keV 1.67 cm 2.67 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 7 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 0 fm -20 cm 2.22 cm 2.05 GeV 41.8 keV 20.5 cm 20.5 cm OutOfWorldTransportation + 0 -33 um -18.3 cm 2.18 cm 1.24 keV 0 eV 0 fm 0 fm World initStep + 1 -30.3 um -18.3 cm 2.18 cm 283 keV 1.24 keV 72.2 um 72.2 um World eIoni + 2 -15.4 um -20 cm 2.17 cm 167 MeV 2.75 keV 1.69 cm 1.7 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 4 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -111 um -4.27 cm 1.49 cm 477 MeV 11.9 keV 4.75 cm 4.75 cm World eIoni - 2 -125 um -5.12 cm 1.57 cm 562 MeV 2.86 keV 8.58 mm 5.6 cm World eIoni - 3 -211 um -16 cm 2.12 cm 1.65 GeV 26.2 keV 10.9 cm 16.5 cm World eIoni - 4 -225 um -20 cm 2.23 cm 2.05 GeV 6.65 keV 4.04 cm 20.5 cm OutOfWorldTransportation + 0 -115 um -15.5 cm 2.11 cm 51.2 keV 0 eV 0 fm 0 fm World initStep + 1 -241 um -16.4 cm 2.13 cm 98 MeV 9.03 keV 1.15 cm 1.15 cm World eIoni + 2 -1.55 mm -16.5 cm 2.09 cm 109 MeV 83.3 eV 1.74 mm 1.32 cm World eIoni + 3 -1.97 mm -16.6 cm 2.08 cm 113 MeV 72.5 eV 607 um 1.38 cm World eIoni + 4 -1.08 cm -18.5 cm 1.86 cm 308 MeV 3.45 keV 2.17 cm 3.55 cm World eIoni + 5 -1.39 cm -20 cm 1.78 cm 452 MeV 4.37 keV 1.48 cm 5.03 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 10, Parent ID = 6 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -211 um -16 cm 2.12 cm 2.14 keV 0 eV 0 fm 0 fm World initStep - 1 -212 um -16 cm 2.12 cm 718 keV 2.14 keV 168 um 168 um World eIoni - 2 71.5 um -17.5 cm 2.2 cm 153 MeV 3.38 keV 1.52 cm 1.54 cm World eIoni - 3 492 um -20 cm 2.29 cm 404 MeV 4.07 keV 2.51 cm 4.05 cm OutOfWorldTransportation + 0 -1.08 cm -18.5 cm 1.86 cm 1.6 keV 0 eV 0 fm 0 fm World initStep + 1 -1.08 cm -18.5 cm 1.86 cm 438 keV 1.6 keV 106 um 106 um World eIoni + 2 -1.09 cm -20 cm 1.86 cm 146 MeV 4.58 keV 1.47 cm 1.48 cm OutOfWorldTransportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 9, Parent ID = 6 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process + 0 -1.97 mm -16.6 cm 2.08 cm 1.13 keV 0 eV 0 fm 0 fm World initStep + 1 -1.97 mm -16.6 cm 2.08 cm 256 keV 1.13 keV 63.5 um 63.5 um World eIoni + 2 -1.99 mm -20 cm 2.08 cm 344 MeV 7.88 keV 3.54 cm 3.55 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -125 um -5.12 cm 1.57 cm 1.07 keV 0 eV 0 fm 0 fm World initStep - 1 -122 um -5.12 cm 1.57 cm 221 keV 1.07 keV 58.3 um 58.3 um World eIoni - 2 -2.07 cm -16 cm -1.79 cm 1.09 GeV 24.7 keV 12.6 cm 12.6 cm World eIoni - 3 -2.87 cm -19.8 cm -3.24 cm 1.47 GeV 10.9 keV 4.13 cm 16.7 cm OutOfWorldTransportation + 0 -2.94 um -5.21 cm 1.59 cm 1.65 keV 0 eV 0 fm 0 fm World initStep + 1 -7.38 um -5.22 cm 1.59 cm 459 keV 1.65 keV 112 um 112 um World eIoni + 2 -33.9 um -20 cm 1.59 cm 1.48 GeV 29.8 keV 15.6 cm 15.6 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -111 um -4.27 cm 1.49 cm 11.3 keV 0 eV 0 fm 0 fm World initStep - 1 -132 um -4.38 cm 1.48 cm 12.4 MeV 4.16 keV 1.96 mm 1.96 mm World eIoni - 2 1.36 mm -5.32 cm 1.4 cm 106 MeV 526 eV 9.62 mm 1.16 cm World eIoni - 3 3.13 mm -20 cm 1.3 cm 1.57 GeV 27 keV 14.7 cm 15.8 cm OutOfWorldTransportation + 0 11.7 um -4.48 cm 1.52 cm 1.43 keV 0 eV 0 fm 0 fm World initStep + 1 10.3 um -4.49 cm 1.52 cm 361 keV 1.43 keV 89.6 um 89.6 um World eIoni + 2 1.74 um -20 cm 1.52 cm 1.55 GeV 28.7 keV 16.9 cm 16.9 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -4774,17 +4930,17 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 645 um -17.6 cm 2.22 cm 1.81 GeV 32.7 keV 18.1 cm 18.1 cm World eIoni - 2 702 um -20 cm 2.28 cm 2.05 GeV 4.21 keV 2.41 cm 20.5 cm OutOfWorldTransportation + 1 -290 um -9.12 cm 1.86 cm 962 MeV 19.7 keV 9.61 cm 9.61 cm World eIoni + 2 -476 um -20 cm 2.24 cm 2.05 GeV 20.5 keV 10.9 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 645 um -17.6 cm 2.22 cm 1.18 keV 0 eV 0 fm 0 fm World initStep - 1 647 um -17.6 cm 2.22 cm 263 keV 1.18 keV 67.9 um 67.9 um World eIoni - 2 657 um -20 cm 2.22 cm 241 MeV 3.99 keV 2.46 cm 2.46 cm OutOfWorldTransportation + 0 -290 um -9.12 cm 1.86 cm 1.48 keV 0 eV 0 fm 0 fm World initStep + 1 -292 um -9.12 cm 1.86 cm 381 keV 1.48 keV 94.3 um 94.3 um World eIoni + 2 -306 um -20 cm 1.85 cm 1.09 GeV 19.8 keV 11.5 cm 11.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -4792,160 +4948,149 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -598 nm -190 um 1.38 mm 51.9 MeV 182 eV 1.4 mm 1.4 mm World eIoni - 2 -1.85 um -9.47 mm 8.66 mm 145 MeV 3.18 keV 1.22 cm 1.36 cm World eIoni - 3 -37.2 um -7.3 cm 1.73 cm 780 MeV 8.44 keV 6.43 cm 7.79 cm World eIoni - 4 -44.6 um -12.4 cm 1.99 cm 1.29 GeV 10.1 keV 5.09 cm 12.9 cm World eIoni - 5 -44.8 um -12.6 cm 2 cm 1.31 GeV 193 eV 1.94 mm 13.1 cm World eIoni - 6 -46.1 um -20 cm 2.23 cm 2.05 GeV 16.9 keV 7.42 cm 20.5 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 1 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -44.8 um -12.6 cm 2 cm 1.66 keV 0 eV 0 fm 0 fm World initStep - 1 -48.1 um -12.6 cm 2 cm 466 keV 1.66 keV 113 um 113 um World eIoni - 2 -65.7 um -20 cm 1.99 cm 741 MeV 9.4 keV 7.6 cm 7.61 cm OutOfWorldTransportation + 1 120 nm -23.1 um 483 um 50.2 MeV 16.6 eV 484 um 484 um World eIoni + 2 -7.27 um -20 cm 2.22 cm 2.05 GeV 41.4 keV 20.5 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -44.6 um -12.4 cm 1.99 cm 1.04 keV 0 eV 0 fm 0 fm World initStep - 1 -42.4 um -12.4 cm 1.99 cm 211 keV 1.04 keV 56 um 56 um World eIoni - 2 -24.4 um -20 cm 1.99 cm 761 MeV 14 keV 8.43 cm 8.44 cm OutOfWorldTransportation + 0 120 nm -23.1 um 483 um 5.57 keV 0 eV 0 fm 0 fm World initStep + 1 4.4 um -334 um 487 um 3.49 MeV 1.68 keV 507 um 507 um World eIoni + 2 -904 um -15.8 cm -5.17 mm 1.58 GeV 20.5 keV 15.8 cm 15.9 cm World eIoni + 3 -1.11 mm -17.8 cm -6.52 mm 1.78 GeV 4.43 keV 1.99 cm 17.8 cm World eIoni + 4 -1.31 mm -20 cm -7.87 mm 2 GeV 3.53 keV 2.25 cm 20.1 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -37.2 um -7.3 cm 1.73 cm 2.57 keV 0 eV 0 fm 0 fm World initStep - 1 -29.5 um -7.31 cm 1.73 cm 985 keV 2.57 keV 226 um 226 um World eIoni - 2 -6.74 um -7.45 cm 1.73 cm 14.6 MeV 165 eV 1.36 mm 1.59 mm World eIoni - 3 185 um -9.39 cm 1.75 cm 209 MeV 2.68 keV 1.94 cm 2.1 cm World eIoni - 4 293 um -20 cm 1.75 cm 1.27 GeV 21.5 keV 10.6 cm 12.7 cm OutOfWorldTransportation + 0 -1.11 mm -17.8 cm -6.52 mm 17 keV 0 eV 0 fm 0 fm World initStep + 1 -1.11 mm -17.9 cm -6.57 mm 11.6 MeV 1.81 keV 1.29 mm 1.29 mm World eIoni + 2 -1.69 mm -20 cm -5.97 mm 225 MeV 3.58 keV 2.14 cm 2.27 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 4 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 185 um -9.39 cm 1.75 cm 2.58 keV 0 eV 0 fm 0 fm World initStep - 1 188 um -9.4 cm 1.75 cm 990 keV 2.58 keV 227 um 227 um World eIoni - 2 -509 um -11 cm 1.76 cm 166 MeV 2.52 keV 1.65 cm 1.67 cm World eIoni - 3 -1.86 mm -13.6 cm 1.71 cm 422 MeV 3.95 keV 2.56 cm 4.24 cm World eIoni - 4 -3.2 mm -20 cm 1.66 cm 1.06 GeV 8.6 keV 6.39 cm 10.6 cm OutOfWorldTransportation + 0 -904 um -15.8 cm -5.17 mm 5.01 keV 0 eV 0 fm 0 fm World initStep + 1 -895 um -15.8 cm -5.15 mm 2.3 MeV 2.01 keV 301 um 301 um World eIoni + 2 -372 um -20 cm -3.92 mm 423 MeV 6.88 keV 4.23 cm 4.26 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 7 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.86 mm -13.6 cm 1.71 cm 1.12 keV 0 eV 0 fm 0 fm World initStep - 1 -1.86 mm -13.6 cm 1.71 cm 239 keV 1.12 keV 62.4 um 62.4 um World eIoni - 2 -1.87 mm -20 cm 1.71 cm 639 MeV 13.1 keV 6.84 cm 6.85 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 595 um -13.6 cm 2.02 cm 1.41 GeV 26.4 keV 14.1 cm 14.1 cm World eIoni + 2 670 um -15.6 cm 2.08 cm 1.61 GeV 2.92 keV 1.95 cm 16.1 cm World eIoni + 3 810 um -20 cm 2.2 cm 2.05 GeV 7.75 keV 4.41 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.85 um -9.47 mm 8.66 mm 1.4 keV 0 eV 0 fm 0 fm World initStep - 1 551 nm -9.51 mm 8.66 mm 349 keV 1.4 keV 87.1 um 87.1 um World eIoni - 2 17.7 um -20 cm 8.63 mm 1.91 GeV 36.4 keV 21.4 cm 21.4 cm OutOfWorldTransportation + 0 670 um -15.6 cm 2.08 cm 1.49 keV 0 eV 0 fm 0 fm World initStep + 1 674 um -15.6 cm 2.08 cm 386 keV 1.49 keV 95.3 um 95.3 um World eIoni + 2 698 um -20 cm 2.08 cm 441 MeV 8.87 keV 4.49 cm 4.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -598 nm -190 um 1.38 mm 9.88 keV 0 eV 0 fm 0 fm World initStep - 1 -35.3 um -1.15 mm 1.39 mm 10.2 MeV 5.4 keV 1.76 mm 1.76 mm World eIoni - 2 -115 um -2.9 mm -695 um 27.8 MeV 951 eV 3.04 mm 4.8 mm World eIoni - 3 -927 um -17.7 cm -6.19 mm 1.77 GeV 32.4 keV 17.4 cm 17.9 cm World eIoni - 4 -1e+03 um -20 cm -6.52 mm 2 GeV 5.92 keV 2.33 cm 20.2 cm OutOfWorldTransportation + 0 595 um -13.6 cm 2.02 cm 1.25 keV 0 eV 0 fm 0 fm World initStep + 1 595 um -13.6 cm 2.02 cm 286 keV 1.25 keV 73.1 um 73.1 um World eIoni + 2 595 um -20 cm 2.02 cm 635 MeV 12.2 keV 6.67 cm 6.68 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 9, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -927 um -17.7 cm -6.19 mm 1.05 keV 0 eV 0 fm 0 fm World initStep - 1 -925 um -17.7 cm -6.19 mm 216 keV 1.05 keV 57.1 um 57.1 um World eIoni - 2 -908 um -20 cm -6.18 mm 233 MeV 6.74 keV 2.39 cm 2.4 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 -10.7 um -6.02 mm 7.18 mm 110 MeV 1.74 keV 9.86 mm 9.86 mm World eIoni + 2 -11.3 um -1.59 cm 1.06 cm 209 MeV 1.71 keV 1.05 cm 2.03 cm World eIoni + 3 -17.5 um -5.35 cm 1.59 cm 585 MeV 10 keV 3.8 cm 5.83 cm World eIoni + 4 13.6 um -19.2 cm 2.2 cm 1.97 GeV 29 keV 13.9 cm 19.7 cm World eIoni + 5 15.1 um -20 cm 2.22 cm 2.05 GeV 889 eV 7.53 mm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -8.77 um -1.11 cm 9.22 mm 161 MeV 3.77 keV 1.53 cm 1.53 cm World eIoni - 2 -7.73 um -3.94 cm 1.44 cm 444 MeV 8.21 keV 2.89 cm 4.42 cm World eIoni - 3 866 nm -5.3 cm 1.58 cm 580 MeV 1.96 keV 1.36 cm 5.79 cm World eIoni - 4 38.8 um -20 cm 2.21 cm 2.05 GeV 29.4 keV 14.7 cm 20.5 cm OutOfWorldTransportation + 0 13.6 um -19.2 cm 2.2 cm 2.72 keV 0 eV 0 fm 0 fm World initStep + 1 22.2 um -19.3 cm 2.2 cm 1.09 MeV 2.72 keV 249 um 249 um World eIoni + 2 81.4 um -19.6 cm 2.21 cm 32.3 MeV 166 eV 3.13 mm 3.37 mm World eIoni + 3 134 um -20 cm 2.21 cm 75.4 MeV 428 eV 4.3 mm 7.68 mm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 866 nm -5.3 cm 1.58 cm 4.85 keV 0 eV 0 fm 0 fm World initStep - 1 4.35 um -5.32 cm 1.58 cm 1.76 MeV 1.16 keV 213 um 213 um World eIoni - 2 -6.44 mm -15.2 cm 1.24 cm 987 MeV 18.1 keV 9.92 cm 9.94 cm World eIoni - 3 -1.1 cm -20 cm 1.14 cm 1.47 GeV 8.42 keV 4.82 cm 14.8 cm OutOfWorldTransportation + 0 -17.5 um -5.35 cm 1.59 cm 5.06 keV 0 eV 0 fm 0 fm World initStep + 1 -151 nm -5.38 cm 1.59 cm 3.25 MeV 5.06 keV 728 um 728 um World eIoni + 2 -32 um -6.06 cm 1.59 cm 71.5 MeV 219 eV 6.83 mm 7.56 mm WorldTransportation + 3 -32 um -6.06 cm 1.59 cm 71.5 MeV1.1e-07 meV 0.557 fm 7.56 mm World eIoni + 4 -14.4 um -20 cm 1.61 cm 1.47 GeV 31 keV 13.9 cm 14.7 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 4 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -6.44 mm -15.2 cm 1.24 cm 3.32 keV 0 eV 0 fm 0 fm World initStep - 1 -6.45 mm -15.2 cm 1.24 cm 1.55 MeV 3.32 keV 349 um 349 um World eIoni - 2 -6.43 mm -15.4 cm 1.24 cm 26.9 MeV 166 eV 2.54 mm 2.89 mm World eIoni - 3 -6.4 mm -16.9 cm 1.23 cm 177 MeV 2.88 keV 1.5 cm 1.79 cm World eIoni - 4 -6.44 mm -20 cm 1.23 cm 482 MeV 7.53 keV 3.05 cm 4.84 cm OutOfWorldTransportation + 0 -11.3 um -1.59 cm 1.06 cm 1.18 keV 0 eV 0 fm 0 fm World initStep + 1 -14.3 um -1.59 cm 1.06 cm 262 keV 1.18 keV 67.6 um 67.6 um World eIoni + 2 3.63 cm -15.9 cm 2.92 cm 1.43 GeV 36.2 keV 16.5 cm 16.5 cm World eIoni + 3 4.28 cm -19.5 cm 4.53 cm 1.79 GeV 7.49 keV 4.05 cm 20.6 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 5 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -6.4 mm -16.9 cm 1.23 cm 10.1 keV 0 eV 0 fm 0 fm World initStep - 1 -6.41 mm -17 cm 1.24 cm 9.54 MeV 3.09 keV 1.41 mm 1.41 mm World eIoni - 2 -5.18 mm -20 cm 1.1 cm 306 MeV 5.25 keV 2.98 cm 3.12 cm OutOfWorldTransportation + 0 -10.7 um -6.02 mm 7.18 mm 29.3 keV 0 eV 0 fm 0 fm World initStep + 1 -65 um -8.42 mm 7.12 mm 24.9 MeV 2.72 keV 2.69 mm 2.69 mm World eIoni + 2 5.18 mm -9 cm 4.58 mm 841 MeV 13.6 keV 8.2 cm 8.47 cm World eIoni + 3 6.55 mm -20 cm 4.05 mm 1.94 GeV 21.7 keV 11 cm 19.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 5 +* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -6.43 mm -15.4 cm 1.24 cm 50.3 keV 0 eV 0 fm 0 fm World initStep - 1 -6.62 mm -16.4 cm 1.24 cm 95.2 MeV 7.36 keV 1.11 cm 1.11 cm World eIoni - 2 -4.46 mm -19 cm 1.78 cm 353 MeV 5.12 keV 2.66 cm 3.77 cm World eIoni - 3 -4.04 mm -20 cm 1.88 cm 458 MeV 653 eV 1.05 cm 4.82 cm OutOfWorldTransportation + 0 5.18 mm -9 cm 4.58 mm 4 keV 0 eV 0 fm 0 fm World initStep + 1 5.18 mm -9.02 cm 4.56 mm 2.15 MeV 4 keV 483 um 483 um World eIoni + 2 5.38 mm -10.1 cm 4.56 mm 108 MeV 1.55 keV 1.06 cm 1.1 cm World eIoni + 3 5.62 mm -17.6 cm 4.34 mm 860 MeV 17.2 keV 7.52 cm 8.63 cm World eIoni + 4 5.65 mm -20 cm 4.21 mm 1.1 GeV 4.82 keV 2.4 cm 11 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 6 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -7.73 um -3.94 cm 1.44 cm 1.7 keV 0 eV 0 fm 0 fm World initStep - 1 -11.8 um -3.95 cm 1.44 cm 483 keV 1.7 keV 117 um 117 um World eIoni - 2 -35.9 um -20 cm 1.44 cm 1.61 GeV 24.7 keV 17 cm 17 cm OutOfWorldTransportation + 0 5.62 mm -17.6 cm 4.34 mm 3.59 keV 0 eV 0 fm 0 fm World initStep + 1 5.61 mm -17.6 cm 4.34 mm 1.77 MeV 3.59 keV 399 um 399 um World eIoni + 2 5.61 mm -17.7 cm 4.35 mm 13.3 MeV 38.9 eV 1.15 mm 1.55 mm World eIoni + 3 5.63 mm -20 cm 4.38 mm 240 MeV 3.67 keV 2.27 cm 2.42 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 6 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -8.77 um -1.11 cm 9.22 mm 1.21 keV 0 eV 0 fm 0 fm World initStep - 1 -7.51 um -1.11 cm 9.22 mm 272 keV 1.21 keV 69.7 um 69.7 um World eIoni - 2 -3.41 cm -16.2 cm -6.11 mm 1.51 GeV 36.7 keV 17.4 cm 17.4 cm World eIoni - 3 -4.88 cm -19.4 cm -7.55 mm 1.83 GeV 7.83 keV 3.5 cm 20.9 cm OutOfWorldTransportation + 0 5.38 mm -10.1 cm 4.56 mm 1.01 keV 0 eV 0 fm 0 fm World initStep + 1 5.37 mm -10.1 cm 4.56 mm 202 keV 1.01 keV 53.8 um 53.8 um World eIoni + 2 2.45 mm -19.5 cm 8.7 mm 941 MeV 26.2 keV 10.9 cm 10.9 cm World eIoni + 3 1 mm -20 cm 1.01 cm 993 MeV 1.25 keV 5.56 mm 11.4 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -4953,38 +5098,38 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -159 um -5.3 cm 1.59 cm 580 MeV 9.87 keV 5.79 cm 5.79 cm World eIoni - 2 -247 um -10.1 cm 1.89 cm 1.06 GeV 9.52 keV 4.76 cm 10.5 cm World eIoni - 3 -335 um -17.4 cm 2.16 cm 1.79 GeV 17 keV 7.36 cm 17.9 cm World eIoni - 4 -356 um -20 cm 2.23 cm 2.05 GeV 4.47 keV 2.59 cm 20.5 cm OutOfWorldTransportation + 1 14.6 um -7.77 mm 8 mm 128 MeV 2.64 keV 1.18 cm 1.18 cm World eIoni + 2 34.5 um -20 cm 2.22 cm 2.05 GeV 42 keV 19.3 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -335 um -17.4 cm 2.16 cm 4.91 keV 0 eV 0 fm 0 fm World initStep - 1 -334 um -17.4 cm 2.16 cm 3 MeV 1.53 keV 540 um 540 um World eIoni - 2 1.18 mm -20 cm 2.07 cm 259 MeV 3.8 keV 2.6 cm 2.65 cm OutOfWorldTransportation + 0 14.6 um -7.77 mm 8 mm 1.09 keV 0 eV 0 fm 0 fm World initStep + 1 14.6 um -7.79 mm 8 mm 231 keV 1.09 keV 60 um 60 um World eIoni + 2 -3.77 cm -12.4 cm -2.37 cm 1.17 GeV 29.6 keV 13.5 cm 13.5 cm World eIoni + 3 -5.78 cm -19.1 cm -4.4 cm 1.84 GeV 14.9 keV 7.31 cm 20.8 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -247 um -10.1 cm 1.89 cm 1.42 keV 0 eV 0 fm 0 fm World initStep - 1 -243 um -10.1 cm 1.89 cm 358 keV 1.42 keV 89.1 um 89.1 um World eIoni - 2 -218 um -20 cm 1.89 cm 994 MeV 19.3 keV 10.5 cm 10.5 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 34.7 um -9.33 cm 1.81 cm 983 MeV 18.9 keV 9.82 cm 9.82 cm World eIoni + 2 97.9 um -20 cm 2.17 cm 2.05 GeV 25.2 keV 10.7 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -159 um -5.3 cm 1.59 cm 4.92 keV 0 eV 0 fm 0 fm World initStep - 1 -148 um -5.33 cm 1.59 cm 3.09 MeV 4.92 keV 693 um 693 um World eIoni - 2 -143 um -5.56 cm 1.59 cm 25.7 MeV 229 eV 2.26 mm 2.96 mm World eIoni - 3 -148 um -20 cm 1.59 cm 1.47 GeV 29.5 keV 14.4 cm 14.7 cm OutOfWorldTransportation + 0 34.7 um -9.33 cm 1.81 cm 991 eV 0 eV 0 fm 0 fm World initStep + 1 33.9 um -9.33 cm 1.81 cm 196 keV 991 eV 52.5 um 52.5 um World eIoni + 2 -1.29 cm -18.3 cm 7.59 mm 898 MeV 23.5 keV 10.4 cm 10.4 cm World eIoni + 3 -1.58 cm -19.4 cm 7.93 mm 1.01 GeV 1.92 keV 1.17 cm 11.6 cm WorldTransportation + 4 -1.69 cm -19.9 cm 8.06 mm 1.06 GeV 1.51 keV 4.98 mm 12.1 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -4992,96 +5137,102 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -320 um -10.6 cm 1.94 cm 1.11 GeV 20.3 keV 11.1 cm 11.1 cm World eIoni - 2 -521 um -20 cm 2.28 cm 2.05 GeV 22.3 keV 9.44 cm 20.5 cm OutOfWorldTransportation + 1 -130 um -5.15 cm 1.58 cm 565 MeV 9.4 keV 5.63 cm 5.63 cm World eIoni + 2 -219 um -9.05 cm 1.86 cm 955 MeV 8.62 keV 3.91 cm 9.54 cm World eIoni + 3 -355 um -20 cm 2.26 cm 2.05 GeV 27.9 keV 11 cm 20.5 cm OutOfWorldTransportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process + 0 -219 um -9.05 cm 1.86 cm 1.46 keV 0 eV 0 fm 0 fm World initStep + 1 -221 um -9.05 cm 1.86 cm 376 keV 1.46 keV 93.1 um 93.1 um World eIoni + 2 -230 um -20 cm 1.85 cm 1.1 GeV 18.7 keV 11.6 cm 11.6 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -320 um -10.6 cm 1.94 cm 6.64 keV 0 eV 0 fm 0 fm World initStep - 1 -299 um -10.6 cm 1.94 cm 3.47 MeV 2.03 keV 437 um 437 um World eIoni - 2 2.21 mm -19.8 cm 2.14 cm 927 MeV 12.2 keV 9.29 cm 9.34 cm World eIoni - 3 2.3 mm -20 cm 2.14 cm 943 MeV 1.53 keV 1.62 mm 9.5 cm OutOfWorldTransportation + 0 -130 um -5.15 cm 1.58 cm 3.65 keV 0 eV 0 fm 0 fm World initStep + 1 -140 um -5.16 cm 1.58 cm 1.82 MeV 3.65 keV 411 um 411 um World eIoni + 2 -142 um -5.27 cm 1.58 cm 12.2 MeV 223 eV 1.04 mm 1.45 mm World eIoni + 3 -469 um -9.61 cm 1.59 cm 447 MeV 6.25 keV 4.35 cm 4.49 cm World eIoni + 4 -627 um -20 cm 1.66 cm 1.49 GeV 19.8 keV 10.4 cm 14.9 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 2.21 mm -19.8 cm 2.14 cm 6.76 keV 0 eV 0 fm 0 fm World initStep - 1 2.19 mm -19.9 cm 2.14 cm 5.45 MeV 6.76 keV 1.19 mm 1.19 mm World eIoni - 2 2.11 mm -20 cm 2.02 cm 16.5 MeV 402 eV 1.91 mm 3.1 mm OutOfWorldTransportation + 0 -469 um -9.61 cm 1.59 cm 1.08 keV 0 eV 0 fm 0 fm World initStep + 1 -466 um -9.62 cm 1.59 cm 226 keV 1.08 keV 59.4 um 59.4 um World eIoni + 2 -442 um -20 cm 1.59 cm 1.04 GeV 31.2 keV 11.8 cm 11.8 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -29.6 um -2.95 cm 1.32 cm 345 MeV 6.91 keV 3.41 cm 3.41 cm World eIoni - 2 -45.5 um -5.81 cm 1.64 cm 631 MeV 6.45 keV 2.88 cm 6.3 cm World eIoni - 3 -63.6 um -20 cm 2.25 cm 2.05 GeV 31.6 keV 14.2 cm 20.5 cm OutOfWorldTransportation + 0 -142 um -5.27 cm 1.58 cm 1.11 keV 0 eV 0 fm 0 fm World initStep + 1 -143 um -5.27 cm 1.58 cm 236 keV 1.11 keV 61.8 um 61.8 um World eIoni + 2 2.47 cm -17.4 cm 2.29 cm 1.21 GeV 32.2 keV 14 cm 14 cm World eIoni + 3 3.81 cm -19.6 cm 2.61 cm 1.44 GeV 6.31 keV 2.64 cm 16.6 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -45.5 um -5.81 cm 1.64 cm 1.98 keV 0 eV 0 fm 0 fm World initStep - 1 -51.6 um -5.82 cm 1.64 cm 625 keV 1.98 keV 148 um 148 um World eIoni - 2 -81.6 um -20 cm 1.64 cm 1.42 GeV 24.3 keV 14.6 cm 14.7 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 -87.9 um -7.5 cm 1.72 cm 800 MeV 15.3 keV 7.99 cm 7.99 cm World eIoni + 2 -48.6 um -20 cm 2.18 cm 2.05 GeV 24.9 keV 12.5 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -29.6 um -2.95 cm 1.32 cm 2.2 keV 0 eV 0 fm 0 fm World initStep - 1 -35.8 um -2.95 cm 1.33 cm 752 keV 2.2 keV 176 um 176 um World eIoni - 2 1.34 mm -5.29 cm 1.28 cm 235 MeV 2.95 keV 2.35 cm 2.36 cm World eIoni - 3 1.54 mm -5.43 cm 1.27 cm 249 MeV 291 eV 1.43 mm 2.51 cm World eIoni - 4 3.77 mm -7.8 cm 1.14 cm 485 MeV 5.01 keV 2.38 cm 4.89 cm World eIoni - 5 6.81 mm -15.1 cm 9.61 mm 1.21 GeV 15.5 keV 7.29 cm 12.2 cm World eIoni - 6 7 mm -15.8 cm 9.51 mm 1.28 GeV 1.11 keV 6.78 mm 12.9 cm World eIoni - 7 7.94 mm -20 cm 8.97 mm 1.7 GeV 14.1 keV 4.23 cm 17.1 cm OutOfWorldTransportation + 0 -87.9 um -7.5 cm 1.72 cm 1.57 keV 0 eV 0 fm 0 fm World initStep + 1 -92.1 um -7.51 cm 1.72 cm 424 keV 1.57 keV 104 um 104 um World eIoni + 2 -118 um -20 cm 1.72 cm 1.25 GeV 21.3 keV 13.2 cm 13.2 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 7 mm -15.8 cm 9.51 mm 1.19 keV 0 eV 0 fm 0 fm World initStep - 1 6.99 mm -15.8 cm 9.51 mm 266 keV 1.19 keV 68.6 um 68.6 um World eIoni - 2 6.97 mm -20 cm 9.53 mm 423 MeV 8.97 keV 4.39 cm 4.39 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 556 um -13.9 cm 2.01 cm 1.44 GeV 26.4 keV 14.4 cm 14.4 cm World eIoni + 2 608 um -20 cm 2.19 cm 2.05 GeV 15 keV 6.1 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 6.81 mm -15.1 cm 9.61 mm 1.8 keV 0 eV 0 fm 0 fm World initStep - 1 6.82 mm -15.1 cm 9.61 mm 530 keV 1.8 keV 127 um 127 um World eIoni - 2 6.83 mm -20 cm 9.59 mm 491 MeV 7.28 keV 4.97 cm 4.99 cm OutOfWorldTransportation + 0 556 um -13.9 cm 2.01 cm 1.56 keV 0 eV 0 fm 0 fm World initStep + 1 560 um -13.9 cm 2.01 cm 417 keV 1.56 keV 102 um 102 um World eIoni + 2 583 um -20 cm 2.01 cm 610 MeV 10.6 keV 6.25 cm 6.26 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 3.77 mm -7.8 cm 1.14 cm 1.61 keV 0 eV 0 fm 0 fm World initStep - 1 3.78 mm -7.8 cm 1.14 cm 444 keV 1.61 keV 108 um 108 um World eIoni - 2 3.81 mm -20 cm 1.14 cm 1.22 GeV 23.2 keV 12.8 cm 12.8 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 -4.28 um -5.45 mm 6.89 mm 105 MeV 2.54 keV 9.21 mm 9.21 mm World eIoni + 2 -12.4 um -20 cm 2.22 cm 2.05 GeV 35.9 keV 19.6 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 1.54 mm -5.43 cm 1.27 cm 1.75 keV 0 eV 0 fm 0 fm World initStep - 1 1.54 mm -5.44 cm 1.27 cm 508 keV 1.75 keV 123 um 123 um World eIoni - 2 1.53 mm -20 cm 1.27 cm 1.46 GeV 25.8 keV 15.2 cm 15.2 cm OutOfWorldTransportation + 0 -4.28 um -5.45 mm 6.89 mm 1.38 keV 0 eV 0 fm 0 fm World initStep + 1 -4.86 um -5.48 mm 6.89 mm 345 keV 1.38 keV 84.7 um 84.7 um World eIoni + 2 -8.85 um -20 cm 6.92 mm 1.95 GeV 33.5 keV 22 cm 22 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -5089,130 +5240,127 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 176 nm -37.9 um 618 um 50.4 MeV 260 eV 619 um 619 um World eIoni - 2 -301 um -8.66 cm 1.82 cm 916 MeV 18.8 keV 9.09 cm 9.16 cm World eIoni - 3 -471 um -20 cm 2.22 cm 2.05 GeV 25.5 keV 11.3 cm 20.5 cm OutOfWorldTransportation + 1 0 fm -20 cm 2.22 cm 2.05 GeV 38.8 keV 20.5 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -301 um -8.66 cm 1.82 cm 2.49 keV 0 eV 0 fm 0 fm World initStep - 1 -292 um -8.67 cm 1.82 cm 931 keV 2.49 keV 215 um 215 um World eIoni - 2 -289 um -8.69 cm 1.82 cm 2.79 MeV 0 eV 186 um 401 um World eIoni - 3 -255 um -9.41 cm 1.81 cm 75 MeV 649 eV 7.22 mm 7.62 mm World eIoni - 4 -544 um -12.8 cm 1.77 cm 417 MeV 5.02 keV 3.42 cm 4.18 cm World eIoni - 5 -594 um -20 cm 1.74 cm 1.13 GeV 18.9 keV 7.17 cm 11.3 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 -48.2 um -3.89 cm 1.43 cm 439 MeV 6.83 keV 4.37 cm 4.37 cm World eIoni + 2 -39.5 um -5.59 cm 1.6 cm 609 MeV 5.77 keV 1.71 cm 6.07 cm World eIoni + 3 -36.6 um -6.27 cm 1.65 cm 677 MeV 1.04 keV 6.81 mm 6.76 cm World eIoni + 4 -12.6 um -20 cm 2.21 cm 2.05 GeV 29.4 keV 13.7 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -544 um -12.8 cm 1.77 cm 1.09 keV 0 eV 0 fm 0 fm World initStep - 1 -546 um -12.8 cm 1.77 cm 228 keV 1.09 keV 59.8 um 59.8 um World eIoni - 2 -557 um -20 cm 1.77 cm 717 MeV 14.4 keV 7.79 cm 7.8 cm OutOfWorldTransportation + 0 -36.6 um -6.27 cm 1.65 cm 4.82 keV 0 eV 0 fm 0 fm World initStep + 1 -17.6 um -6.3 cm 1.65 cm 2.98 MeV 4.82 keV 668 um 668 um World eIoni + 2 -6.4 um -6.51 cm 1.65 cm 24.1 MeV 173 eV 2.11 mm 2.78 mm World eIoni + 3 15.4 um -7.71 cm 1.65 cm 145 MeV 2.91 keV 1.2 cm 1.48 cm World eIoni + 4 22.4 um -8.58 cm 1.64 cm 231 MeV 983 eV 8.64 mm 2.35 cm World eIoni + 5 50.1 um -20 cm 1.64 cm 1.37 GeV 27.3 keV 11.4 cm 13.8 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 4 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -255 um -9.41 cm 1.81 cm 2.08 keV 0 eV 0 fm 0 fm World initStep - 1 -254 um -9.42 cm 1.81 cm 683 keV 2.08 keV 161 um 161 um World eIoni - 2 -1.04 mm -11.5 cm 1.7 cm 211 MeV 1.29 keV 2.11 cm 2.13 cm World eIoni - 3 -2.8 mm -14 cm 1.54 cm 455 MeV 5.69 keV 2.45 cm 4.58 cm World eIoni - 4 -4.72 mm -20 cm 1.37 cm 1.06 GeV 14.8 keV 6.04 cm 10.6 cm OutOfWorldTransportation + 0 22.4 um -8.58 cm 1.64 cm 1.12 keV 0 eV 0 fm 0 fm World initStep + 1 21.2 um -8.58 cm 1.64 cm 241 keV 1.12 keV 62.8 um 62.8 um World eIoni + 2 11.6 um -20 cm 1.65 cm 1.14 GeV 30 keV 13 cm 13 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 4 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 4 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -2.8 mm -14 cm 1.54 cm 1.45 keV 0 eV 0 fm 0 fm World initStep - 1 -2.79 mm -14 cm 1.54 cm 371 keV 1.45 keV 92.1 um 92.1 um World eIoni - 2 -2.78 mm -20 cm 1.54 cm 604 MeV 11.4 keV 6.22 cm 6.23 cm OutOfWorldTransportation + 0 15.4 um -7.71 cm 1.65 cm 1.18 keV 0 eV 0 fm 0 fm World initStep + 1 12.5 um -7.72 cm 1.65 cm 262 keV 1.18 keV 67.6 um 67.6 um World eIoni + 2 -9.21 um -20 cm 1.64 cm 1.23 GeV 32.2 keV 13.8 cm 13.9 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 4 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.04 mm -11.5 cm 1.7 cm 1.79 keV 0 eV 0 fm 0 fm World initStep - 1 -1.04 mm -11.5 cm 1.7 cm 527 keV 1.79 keV 127 um 127 um World eIoni - 2 -1.05 mm -20 cm 1.71 cm 847 MeV 14.8 keV 8.68 cm 8.69 cm OutOfWorldTransportation + 0 -39.5 um -5.59 cm 1.6 cm 1.62 keV 0 eV 0 fm 0 fm World initStep + 1 -36.9 um -5.6 cm 1.6 cm 446 keV 1.62 keV 109 um 109 um World eIoni + 2 -21.2 um -20 cm 1.6 cm 1.44 GeV 26.7 keV 15.2 cm 15.2 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 176 nm -37.9 um 618 um 2.1 keV 0 eV 0 fm 0 fm World initStep - 1 -3.68 um -104 um 617 um 694 keV 2.1 keV 163 um 163 um World eIoni - 2 2.1 mm -3.09 cm 1.7 mm 309 MeV 3.97 keV 3.1 cm 3.11 cm World eIoni - 3 2.24 cm -18 cm 1.58 cm 1.8 GeV 28.9 keV 15.2 cm 18.3 cm World eIoni - 4 2.34 cm -19.9 cm 1.66 cm 1.99 GeV 3.7 keV 1.87 cm 20.2 cm OutOfWorldTransportation + 0 -48.2 um -3.89 cm 1.43 cm 7.37 keV 0 eV 0 fm 0 fm World initStep + 1 -17.6 um -3.95 cm 1.43 cm 6.36 MeV 5.72 keV 1.33 mm 1.33 mm World eIoni + 2 -1.28 mm -4.38 cm 1.45 cm 49.5 MeV 455 eV 4.58 mm 5.9 mm World eIoni + 3 -1.79 mm -5.13 cm 1.46 cm 124 MeV 1.53 keV 7.5 mm 1.34 cm World eIoni + 4 -2.28 mm -6.87 cm 1.46 cm 298 MeV 3.54 keV 1.74 cm 3.08 cm World eIoni + 5 -2.87 mm -12.6 cm 1.47 cm 873 MeV 12.7 keV 5.75 cm 8.83 cm World eIoni + 6 -3.2 mm -20 cm 1.48 cm 1.61 GeV 17 keV 7.38 cm 16.2 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 9, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 2.24 cm -18 cm 1.58 cm 1.75 keV 0 eV 0 fm 0 fm World initStep - 1 2.24 cm -18 cm 1.58 cm 508 keV 1.75 keV 123 um 123 um World eIoni - 2 2.24 cm -19.9 cm 1.58 cm 188 MeV 4.07 keV 1.88 cm 1.89 cm OutOfWorldTransportation + 0 -2.87 mm -12.6 cm 1.47 cm 7.39 keV 0 eV 0 fm 0 fm World initStep + 1 -2.9 mm -12.7 cm 1.47 cm 6.39 MeV 7.39 keV 1.33 mm 1.33 mm World eIoni + 2 -3.08 mm -12.7 cm 1.49 cm 10 MeV 51.4 eV 437 um 1.77 mm World eIoni + 3 -4.61 mm -20 cm 1.62 cm 738 MeV 11.9 keV 7.29 cm 7.47 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 12.6 um -1.91 cm 1.13 cm 241 MeV 3.6 keV 2.36 cm 2.36 cm World eIoni - 2 30.4 um -6.72 cm 1.69 cm 722 MeV 14.2 keV 4.85 cm 7.21 cm World eIoni - 3 27.5 um -20 cm 2.23 cm 2.05 GeV 27.4 keV 13.3 cm 20.5 cm OutOfWorldTransportation + 0 -2.28 mm -6.87 cm 1.46 cm 1.3 keV 0 eV 0 fm 0 fm World initStep + 1 -2.28 mm -6.87 cm 1.46 cm 308 keV 1.3 keV 78 um 78 um World eIoni + 2 -2.29 mm -20 cm 1.47 cm 1.31 GeV 32.2 keV 14.4 cm 14.4 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 30.4 um -6.72 cm 1.69 cm 13.2 keV 0 eV 0 fm 0 fm World initStep - 1 52.4 um -6.75 cm 1.69 cm 2.81 MeV 393 eV 291 um 291 um World eIoni - 2 1.3 mm -8.61 cm 1.73 cm 189 MeV 1.67 keV 1.9 cm 1.93 cm World eIoni - 3 987 um -13.9 cm 1.84 cm 719 MeV 14.8 keV 5.3 cm 7.23 cm World eIoni - 4 844 um -20 cm 1.89 cm 1.33 GeV 17.5 keV 6.09 cm 13.3 cm OutOfWorldTransportation + 0 -1.79 mm -5.13 cm 1.46 cm 1.24 keV 0 eV 0 fm 0 fm World initStep + 1 -1.79 mm -5.13 cm 1.46 cm 286 keV 1.24 keV 72.9 um 72.9 um World eIoni + 2 -1.79 mm -20 cm 1.46 cm 1.49 GeV 27.8 keV 16.9 cm 16.9 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 987 um -13.9 cm 1.84 cm 7.37 keV 0 eV 0 fm 0 fm World initStep - 1 1.02 mm -14 cm 1.84 cm 6.36 MeV 7.37 keV 1.33 mm 1.33 mm World eIoni - 2 1.73 mm -14.2 cm 1.96 cm 33.1 MeV 371 eV 3.15 mm 4.48 mm World eIoni - 3 2.71 mm -20 cm 2.13 cm 609 MeV 10.2 keV 5.77 cm 6.21 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 57.5 um -4.26 cm 1.47 cm 476 MeV 7 keV 4.74 cm 4.74 cm World eIoni + 2 60.6 um -7.88 cm 1.75 cm 838 MeV 7.31 keV 3.63 cm 8.37 cm World eIoni + 3 82.6 um -20 cm 2.19 cm 2.05 GeV 23.6 keV 12.1 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 1.3 mm -8.61 cm 1.73 cm 1.04 keV 0 eV 0 fm 0 fm World initStep - 1 1.3 mm -8.62 cm 1.73 cm 214 keV 1.04 keV 56.5 um 56.5 um World eIoni - 2 -867 um -18.9 cm 2.78 cm 1.03 GeV 32 keV 11.9 cm 11.9 cm World eIoni - 3 -1.93 mm -20 cm 3.1 cm 1.14 GeV 3.75 keV 1.14 cm 13.1 cm OutOfWorldTransportation + 0 60.6 um -7.88 cm 1.75 cm 1.59 keV 0 eV 0 fm 0 fm World initStep + 1 58.5 um -7.88 cm 1.75 cm 430 keV 1.59 keV 105 um 105 um World eIoni + 2 45.8 um -20 cm 1.75 cm 1.21 GeV 22.2 keV 12.7 cm 12.7 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 12.6 um -1.91 cm 1.13 cm 1.2 keV 0 eV 0 fm 0 fm World initStep - 1 14.8 um -1.91 cm 1.13 cm 268 keV 1.2 keV 68.9 um 68.9 um World eIoni - 2 2.23 mm -16.7 cm -2.11 cm 1.48 GeV 34 keV 17.1 cm 17.1 cm World eIoni - 3 1.85 cm -19.9 cm -2.46 cm 1.8 GeV 7.65 keV 3.61 cm 20.7 cm OutOfWorldTransportation + 0 57.5 um -4.26 cm 1.47 cm 1.03 keV 0 eV 0 fm 0 fm World initStep + 1 55.6 um -4.26 cm 1.47 cm 208 keV 1.03 keV 55.1 um 55.1 um World eIoni + 2 2.05 cm -14.1 cm -2.16 cm 983 MeV 26.8 keV 11.4 cm 11.4 cm World eIoni + 3 2.58 cm -19.8 cm -3.01 cm 1.56 GeV 11.9 keV 5.83 cm 17.2 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -5220,27 +5368,40 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -4.97 um -1.62 cm 1.07 cm 212 MeV 3.29 keV 2.07 cm 2.07 cm World eIoni - 2 52.5 um -13.2 cm 2.01 cm 1.37 GeV 26.1 keV 11.6 cm 13.7 cm World eIoni - 3 122 um -20 cm 2.21 cm 2.05 GeV 18.5 keV 6.79 cm 20.5 cm OutOfWorldTransportation + 1 -6.36 um -4.9 mm 6.57 mm 99 MeV 601 eV 8.57 mm 8.57 mm World eIoni + 2 -20.6 um -20 cm 2.22 cm 2.05 GeV 37.7 keV 19.6 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 52.5 um -13.2 cm 2.01 cm 1.64 keV 0 eV 0 fm 0 fm World initStep - 1 54.6 um -13.2 cm 2.01 cm 455 keV 1.64 keV 111 um 111 um World eIoni - 2 65.4 um -20 cm 2.01 cm 679 MeV 10.5 keV 6.95 cm 6.96 cm OutOfWorldTransportation + 0 -6.36 um -4.9 mm 6.57 mm 2.09 keV 0 eV 0 fm 0 fm World initStep + 1 -2.33 um -4.96 mm 6.57 mm 699 keV 2.09 keV 162 um 162 um World eIoni + 2 -3.17 mm -4.35 cm 7.55 mm 386 MeV 7.23 keV 3.88 cm 3.89 cm World eIoni + 3 -3.79 mm -5.21 cm 7.81 mm 472 MeV 1.15 keV 8.64 mm 4.76 cm World eIoni + 4 -8.18 mm -20 cm 9.68 mm 1.95 GeV 29.9 keV 14.8 cm 19.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 2 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process + 0 -3.79 mm -5.21 cm 7.81 mm 3.98 keV 0 eV 0 fm 0 fm World initStep + 1 -3.81 mm -5.23 cm 7.82 mm 2.12 MeV 3.98 keV 477 um 477 um World eIoni + 2 -3.81 mm -5.39 cm 7.82 mm 18 MeV 103 eV 1.59 mm 2.07 mm World eIoni + 3 -3.79 mm -6.05 cm 7.82 mm 84.1 MeV 1.14 keV 6.61 mm 8.68 mm World eIoni + 4 -3.62 mm -20 cm 7.78 mm 1.48 GeV 25.3 keV 13.9 cm 14.8 cm OutOfWorldTransportation + +********************************************************************************************************* +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 3 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.97 um -1.62 cm 1.07 cm 1.69 keV 0 eV 0 fm 0 fm World initStep - 1 -3.16 um -1.63 cm 1.07 cm 483 keV 1.69 keV 116 um 116 um World eIoni - 2 7.46 um -20 cm 1.07 cm 1.84 GeV 32.9 keV 19.6 cm 19.6 cm OutOfWorldTransportation + 0 -3.79 mm -6.05 cm 7.82 mm 2.64 keV 0 eV 0 fm 0 fm World initStep + 1 -3.79 mm -6.06 cm 7.83 mm 1.04 MeV 2.64 keV 237 um 237 um World eIoni + 2 -3.92 mm -6.72 cm 7.96 mm 66.8 MeV 404 eV 6.58 mm 6.82 mm World eIoni + 3 -4.09 mm -20 cm 8.04 mm 1.39 GeV 28.5 keV 13.3 cm 14 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -5248,67 +5409,67 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 47 um -2.13 cm 1.18 cm 263 MeV 3.63 keV 2.59 cm 2.59 cm World eIoni - 2 132 um -5.51 cm 1.59 cm 601 MeV 5.36 keV 3.41 cm 6 cm World eIoni - 3 240 um -20 cm 2.21 cm 2.05 GeV 33.8 keV 14.5 cm 20.5 cm OutOfWorldTransportation + 1 0 fm -20 cm 2.22 cm 2.05 GeV 35.8 keV 20.5 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 132 um -5.51 cm 1.59 cm 1.19 keV 0 eV 0 fm 0 fm World initStep - 1 135 um -5.52 cm 1.59 cm 266 keV 1.19 keV 68.5 um 68.5 um World eIoni - 2 159 um -20 cm 1.6 cm 1.45 GeV 33.6 keV 16.7 cm 16.7 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 -39.3 um -5.53 cm 1.62 cm 603 MeV 12.2 keV 6.01 cm 6.01 cm World eIoni + 2 -132 um -20 cm 2.25 cm 2.05 GeV 28.9 keV 14.5 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 47 um -2.13 cm 1.18 cm 2.2 keV 0 eV 0 fm 0 fm World initStep - 1 52.8 um -2.14 cm 1.18 cm 752 keV 2.2 keV 175 um 175 um World eIoni - 2 10.7 um -2.39 cm 1.18 cm 26.5 MeV 335 eV 2.57 mm 2.75 mm World eIoni - 3 -96.6 um -20 cm 1.18 cm 1.79 GeV 30.2 keV 17.6 cm 17.9 cm OutOfWorldTransportation + 0 -39.3 um -5.53 cm 1.62 cm 6.66 keV 0 eV 0 fm 0 fm World initStep + 1 -19.7 um -5.58 cm 1.62 cm 5.32 MeV 4.09 keV 1.17 mm 1.17 mm World eIoni + 2 -755 um -6.78 cm 1.78 cm 125 MeV 1.53 keV 1.23 cm 1.35 cm World eIoni + 3 -909 um -9.37 cm 1.84 cm 385 MeV 6.95 keV 2.6 cm 3.95 cm World eIoni + 4 -939 um -10.3 cm 1.85 cm 478 MeV 1.6 keV 9.31 mm 4.88 cm World eIoni + 5 -1.09 mm -19.1 cm 1.91 cm 1.36 GeV 18.8 keV 8.81 cm 13.7 cm World eIoni + 6 -1.1 mm -20 cm 1.92 cm 1.45 GeV 865 eV 8.91 mm 14.6 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 440 um -15.5 cm 2.04 cm 1.6 GeV 33.4 keV 16 cm 16 cm World eIoni - 2 471 um -16.6 cm 2.07 cm 1.71 GeV 1.5 keV 1.1 cm 17.1 cm World eIoni - 3 553 um -20 cm 2.15 cm 2.05 GeV 5.45 keV 3.37 cm 20.5 cm OutOfWorldTransportation + 0 -1.09 mm -19.1 cm 1.91 cm 6.91 keV 0 eV 0 fm 0 fm World initStep + 1 -1.09 mm -19.1 cm 1.91 cm 1.04 MeV 643 eV 110 um 110 um World eIoni + 2 -918 um -20 cm 1.89 cm 88.7 MeV 298 eV 8.79 mm 8.9 mm World eIoni + 3 -918 um -20 cm 1.89 cm 89.1 MeV 7.94 eV 39.7 um 8.94 mm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 5 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 471 um -16.6 cm 2.07 cm 2.54 keV 0 eV 0 fm 0 fm World initStep - 1 479 um -16.6 cm 2.07 cm 965 keV 2.54 keV 222 um 222 um World eIoni - 2 785 um -17.6 cm 2.06 cm 91.7 MeV 869 eV 9.09 mm 9.31 mm World eIoni - 3 1.22 mm -18.4 cm 2.06 cm 178 MeV 3.18 keV 8.6 mm 1.79 cm World eIoni - 4 1.64 mm -20 cm 2.06 cm 337 MeV 2.54 keV 1.59 cm 3.38 cm OutOfWorldTransportation + 0 -918 um -20 cm 1.89 cm 4.58 keV 0 eV 0 fm 0 fm World initStep + 1 -917 um -20 cm 1.89 cm 246 keV 0 eV 26.3 um 26.3 um World msc + 2 -915 um -20 cm 1.89 cm 400 keV 3.34 eV 16 um 42.3 um OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 1.22 mm -18.4 cm 2.06 cm 1.66 keV 0 eV 0 fm 0 fm World initStep - 1 1.22 mm -18.4 cm 2.06 cm 465 keV 1.66 keV 113 um 113 um World eIoni - 2 1.23 mm -20 cm 2.06 cm 159 MeV 2.33 keV 1.59 cm 1.61 cm OutOfWorldTransportation + 0 -939 um -10.3 cm 1.85 cm 2.74 keV 0 eV 0 fm 0 fm World initStep + 1 -934 um -10.3 cm 1.85 cm 1.1 MeV 2.74 keV 252 um 252 um World eIoni + 2 -909 um -10.5 cm 1.85 cm 18.9 MeV 0 eV 1.78 mm 2.03 mm World eIoni + 3 -812 um -20 cm 1.86 cm 970 MeV 15 keV 9.51 cm 9.71 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 440 um -15.5 cm 2.04 cm 1.04 keV 0 eV 0 fm 0 fm World initStep - 1 443 um -15.5 cm 2.04 cm 211 keV 1.04 keV 55.9 um 55.9 um World eIoni - 2 462 um -20 cm 2.04 cm 446 MeV 8.4 keV 4.72 cm 4.73 cm OutOfWorldTransportation + 0 -909 um -9.37 cm 1.84 cm 1.11 keV 0 eV 0 fm 0 fm World initStep + 1 -911 um -9.38 cm 1.84 cm 235 keV 1.11 keV 61.4 um 61.4 um World eIoni + 2 -927 um -20 cm 1.84 cm 1.06 GeV 27 keV 12 cm 12 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -5316,17 +5477,15 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 813 um -18.1 cm 2.21 cm 1.86 GeV 37.4 keV 18.6 cm 18.6 cm World eIoni - 2 965 um -20 cm 2.27 cm 2.05 GeV 4.01 keV 1.93 cm 20.5 cm OutOfWorldTransportation + 1 0 fm -20 cm 2.22 cm 2.05 GeV 39.5 keV 20.5 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 813 um -18.1 cm 2.21 cm 1.75 keV 0 eV 0 fm 0 fm World initStep - 1 810 um -18.1 cm 2.21 cm 505 keV 1.75 keV 122 um 122 um World eIoni - 2 796 um -20 cm 2.21 cm 193 MeV 3.97 keV 1.94 cm 1.95 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 0 fm -20 cm 2.22 cm 2.05 GeV 37.8 keV 20.5 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -5334,29 +5493,28 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 79.2 um -5.07 cm 1.58 cm 557 MeV 11.9 keV 5.56 cm 5.56 cm World eIoni - 2 151 um -10.1 cm 1.91 cm 1.06 GeV 12.8 keV 5.05 cm 10.6 cm World eIoni - 3 235 um -20 cm 2.26 cm 2.05 GeV 21.3 keV 9.89 cm 20.5 cm OutOfWorldTransportation + 1 -434 um -11.1 cm 1.95 cm 1.16 GeV 21.7 keV 11.6 cm 11.6 cm World eIoni + 2 -299 um -17.8 cm 2.2 cm 1.83 GeV 13 keV 6.68 cm 18.3 cm World eIoni + 3 -265 um -20 cm 2.26 cm 2.05 GeV 7.52 keV 2.18 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 151 um -10.1 cm 1.91 cm 69.8 keV 0 eV 0 fm 0 fm World initStep - 1 148 um -11.7 cm 1.89 cm 161 MeV 7.3 keV 1.88 cm 1.88 cm World eIoni - 2 4.27 mm -12.5 cm 1.92 cm 236 MeV 1.32 keV 8.53 mm 2.73 cm World eIoni - 3 1.82 cm -19.9 cm 2.04 cm 982 MeV 14.4 keV 7.62 cm 10.3 cm OutOfWorldTransportation + 0 -299 um -17.8 cm 2.2 cm 1.02 keV 0 eV 0 fm 0 fm World initStep + 1 -299 um -17.8 cm 2.2 cm 205 keV 1.02 keV 54.6 um 54.6 um World eIoni + 2 -295 um -20 cm 2.2 cm 218 MeV 4.2 keV 2.24 cm 2.25 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 79.2 um -5.07 cm 1.58 cm 1.04 keV 0 eV 0 fm 0 fm World initStep - 1 82 um -5.07 cm 1.57 cm 211 keV 1.04 keV 56 um 56 um World eIoni - 2 -4.27 cm -15.2 cm 1.64 cm 1.01 GeV 31 keV 11.7 cm 11.7 cm World eIoni - 3 -5.71 cm -19.2 cm 1.76 cm 1.41 GeV 6.48 keV 4.24 cm 15.9 cm OutOfWorldTransportation + 0 -434 um -11.1 cm 1.95 cm 13.8 keV 0 eV 0 fm 0 fm World initStep + 1 -461 um -11.3 cm 1.94 cm 16.3 MeV 3.53 keV 2.32 mm 2.32 mm World eIoni + 2 -1.47 mm -12.1 cm 1.92 cm 94.9 MeV 1.09 keV 7.96 mm 1.03 cm World eIoni + 3 -2.58 mm -20 cm 1.89 cm 886 MeV 16.5 keV 7.91 cm 8.94 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -5364,60 +5522,58 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -13.2 um -8.31 mm 8.23 mm 133 MeV 1.9 keV 1.24 cm 1.24 cm World eIoni - 2 -11.8 um -1.22 cm 9.6 mm 172 MeV 802 eV 4.13 mm 1.65 cm World eIoni - 3 -7.07 um -4.19 cm 1.47 cm 469 MeV 7.7 keV 3.01 cm 4.67 cm World eIoni - 4 -29.3 um -14.4 cm 2.05 cm 1.49 GeV 21 keV 10.2 cm 14.9 cm World eIoni - 5 -45.7 um -20 cm 2.21 cm 2.05 GeV 12.7 keV 5.64 cm 20.5 cm OutOfWorldTransportation + 1 147 um -5.33 cm 1.59 cm 583 MeV 7.8 keV 5.82 cm 5.82 cm World eIoni + 2 151 um -6.07 cm 1.65 cm 657 MeV 1.37 keV 7.42 mm 6.56 cm World eIoni + 3 191 um -20 cm 2.22 cm 2.05 GeV 32.5 keV 13.9 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -29.3 um -14.4 cm 2.05 cm 2.55 keV 0 eV 0 fm 0 fm World initStep - 1 -23.4 um -14.4 cm 2.05 cm 389 keV 451 eV 45.1 um 45.1 um World eIoni - 2 -127 um -20 cm 2 cm 559 MeV 9.05 keV 5.73 cm 5.74 cm World eIoni - 3 -185 um -20 cm 1.99 cm 564 MeV 22.3 eV 501 um 5.79 cm OutOfWorldTransportation + 0 151 um -6.07 cm 1.65 cm 1.02 keV 0 eV 0 fm 0 fm World initStep + 1 153 um -6.08 cm 1.65 cm 206 keV 1.02 keV 54.7 um 54.7 um World eIoni + 2 2.57 cm -15.8 cm -1.57 cm 969 MeV 28.9 keV 11.2 cm 11.2 cm World eIoni + 3 3.16 cm -19.7 cm -7.23 cm 1.37 GeV 14.4 keV 7.03 cm 18.2 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -7.07 um -4.19 cm 1.47 cm 8.47 keV 0 eV 0 fm 0 fm World initStep - 1 21.1 um -4.26 cm 1.47 cm 7.15 MeV 2.13 keV 1.08 mm 1.08 mm World eIoni - 2 1.62 mm -5.29 cm 1.62 cm 110 MeV 995 eV 1.08 cm 1.18 cm World eIoni - 3 3.32 mm -20 cm 1.77 cm 1.58 GeV 30.8 keV 14.7 cm 15.9 cm OutOfWorldTransportation + 0 147 um -5.33 cm 1.59 cm 5.37 keV 0 eV 0 fm 0 fm World initStep + 1 168 um -5.37 cm 1.59 cm 3.61 MeV 5.37 keV 810 um 810 um World eIoni + 2 178 um -5.55 cm 1.59 cm 22 MeV 347 eV 1.84 mm 2.65 mm World eIoni + 3 432 um -10.3 cm 1.6 cm 498 MeV 9.62 keV 4.76 cm 5.02 cm World eIoni + 4 476 um -15 cm 1.6 cm 969 MeV 8.22 keV 4.72 cm 9.74 cm World eIoni + 5 506 um -20 cm 1.6 cm 1.47 GeV 13.7 keV 4.98 cm 14.7 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 4 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 1.62 mm -5.29 cm 1.62 cm 1.15 keV 0 eV 0 fm 0 fm World initStep - 1 1.62 mm -5.29 cm 1.62 cm 250 keV 1.15 keV 64.8 um 64.8 um World eIoni - 2 -6.17 mm -18.5 cm 3.76 mm 1.32 GeV 27.5 keV 15.3 cm 15.3 cm World eIoni - 3 -3.88 cm -19.6 cm 7.15 mm 1.43 GeV 7.74 keV 3.47 cm 18.8 cm OutOfWorldTransportation + 0 476 um -15 cm 1.6 cm 1.41 keV 0 eV 0 fm 0 fm World initStep + 1 478 um -15 cm 1.6 cm 352 keV 1.41 keV 87.8 um 87.8 um World eIoni + 2 -266 um -16.4 cm 1.7 cm 142 MeV 2.17 keV 1.43 cm 1.44 cm World eBrem + 3 -3.48 mm -20 cm 1.69 cm 497 MeV 7.48 keV 3.57 cm 5.01 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -11.8 um -1.22 cm 9.6 mm 1.68 keV 0 eV 0 fm 0 fm World initStep - 1 -16.6 um -1.23 cm 9.6 mm 476 keV 1.68 keV 115 um 115 um World eIoni - 2 -45.8 um -20 cm 9.61 mm 1.88 GeV 33.1 keV 20.1 cm 20.1 cm OutOfWorldTransportation + 0 432 um -10.3 cm 1.6 cm 1.25 keV 0 eV 0 fm 0 fm World initStep + 1 429 um -10.3 cm 1.6 cm 287 keV 1.25 keV 73.3 um 73.3 um World eIoni + 2 408 um -20 cm 1.6 cm 969 MeV 21.3 keV 10.5 cm 10.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -13.2 um -8.31 mm 8.23 mm 134 keV 0 eV 0 fm 0 fm World initStep - 1 1.72 cm -5.62 cm -2.6 mm 480 MeV 21.5 keV 5.56 cm 5.56 cm World eIoni - 2 1.73 cm -5.68 cm -2.9 mm 485 MeV 0 eV 647 um 5.63 cm World eIoni - 3 3.06 cm -19.8 cm -3.51 cm 1.89 GeV 28.9 keV 14.6 cm 20.2 cm OutOfWorldTransportation + 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 0 fm -20 cm 2.22 cm 2.05 GeV 40.9 keV 20.5 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -5425,264 +5581,239 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -667 nm -291 um 1.71 mm 52.9 MeV 163 eV 1.74 mm 1.74 mm World eIoni - 2 143 um -6.71 cm 1.68 cm 721 MeV 12.9 keV 7.02 cm 7.19 cm World eIoni - 3 254 um -18 cm 2.15 cm 1.85 GeV 18.6 keV 11.3 cm 18.5 cm World eIoni - 4 268 um -20 cm 2.2 cm 2.05 GeV 4.8 keV 2.05 cm 20.5 cm OutOfWorldTransportation + 1 8.77 um -4.99 mm 6.61 mm 99.9 MeV 2.62 keV 8.68 mm 8.68 mm World eIoni + 2 -31.9 um -5.35 cm 1.58 cm 585 MeV 13.1 keV 4.97 cm 5.84 cm World eIoni + 3 -56 um -6.85 cm 1.7 cm 735 MeV 2.75 keV 1.5 cm 7.34 cm World eIoni + 4 -110 um -14.2 cm 2.05 cm 1.47 GeV 15.2 keV 7.32 cm 14.7 cm World eIoni + 5 -127 um -19 cm 2.19 cm 1.95 GeV 7.15 keV 4.81 cm 19.5 cm World eIoni + 6 -131 um -20 cm 2.22 cm 2.05 GeV 2.04 keV 1.03 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 254 um -18 cm 2.15 cm 2.59 keV 0 eV 0 fm 0 fm World initStep - 1 261 um -18 cm 2.15 cm 1 MeV 2.59 keV 230 um 230 um World eIoni - 2 809 um -19.5 cm 2.19 cm 156 MeV 1.74 keV 1.55 cm 1.58 cm World eIoni - 3 797 um -20 cm 2.2 cm 205 MeV 480 eV 4.85 mm 2.06 cm OutOfWorldTransportation + 0 -127 um -19 cm 2.19 cm 4.66 keV 0 eV 0 fm 0 fm World initStep + 1 -109 um -19 cm 2.19 cm 2.8 MeV 4.66 keV 629 um 629 um World eIoni + 2 -103 um -19.1 cm 2.19 cm 13.6 MeV 300 eV 1.08 mm 1.71 mm World eIoni + 3 -98 um -20 cm 2.19 cm 103 MeV 1.17 keV 8.97 mm 1.07 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 143 um -6.71 cm 1.68 cm 1.06 keV 0 eV 0 fm 0 fm World initStep - 1 144 um -6.71 cm 1.68 cm 220 keV 1.06 keV 57.9 um 57.9 um World eIoni - 2 -2.45 cm -17.5 cm 2 cm 1.08 GeV 32.3 keV 12.5 cm 12.5 cm World eIoni - 3 -3.99 cm -19.6 cm 2.6 cm 1.29 GeV 5.12 keV 2.68 cm 15.1 cm OutOfWorldTransportation + 0 -110 um -14.2 cm 2.05 cm 4.12 keV 0 eV 0 fm 0 fm World initStep + 1 -100 um -14.2 cm 2.05 cm 2.26 MeV 4.12 keV 509 um 509 um World eIoni + 2 -73.7 um -14.4 cm 2.05 cm 24.2 MeV 533 eV 2.2 mm 2.7 mm World eIoni + 3 -83.3 um -20 cm 2.05 cm 584 MeV 13.2 keV 5.6 cm 5.87 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 5 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -667 nm -291 um 1.71 mm 7.11 keV 0 eV 0 fm 0 fm World initStep - 1 26.1 um -855 um 1.71 mm 5.97 MeV 7.11 keV 1.27 mm 1.27 mm World eIoni - 2 -598 um -1.17 cm -287 um 115 MeV 1.22 keV 1.2 cm 1.32 cm World eIoni - 3 -798 um -14.8 cm -1.43 mm 1.48 GeV 25.4 keV 13.6 cm 14.9 cm World eIoni - 4 -804 um -20 cm -1.58 mm 2 GeV 9.09 keV 5.21 cm 20.2 cm OutOfWorldTransportation + 0 -73.7 um -14.4 cm 2.05 cm 10.6 keV 0 eV 0 fm 0 fm World initStep + 1 -31.1 um -14.5 cm 2.05 cm 11.4 MeV 5.78 keV 1.86 mm 1.86 mm World eIoni + 2 -219 um -14.5 cm 2.07 cm 10.1 MeV 89.7 eV 284 um 2.15 mm World eIoni + 3 -3.11 mm -15.9 cm 2.32 cm 152 MeV 2.03 keV 1.56 cm 1.77 cm World eIoni + 4 -4.18 mm -20 cm 2.42 cm 560 MeV 9.24 keV 4.09 cm 5.86 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 7 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -798 um -14.8 cm -1.43 mm 2.2 keV 0 eV 0 fm 0 fm World initStep - 1 -804 um -14.8 cm -1.44 mm 750 keV 2.2 keV 175 um 175 um World eIoni - 2 -1.36 mm -19.6 cm 2.82 mm 477 MeV 7.93 keV 4.8 cm 4.82 cm World eIoni - 3 -1.51 mm -20 cm 3.34 mm 521 MeV 940 eV 4.39 mm 5.26 cm OutOfWorldTransportation + 0 -3.11 mm -15.9 cm 2.32 cm 6.01 keV 0 eV 0 fm 0 fm World initStep + 1 -3.13 mm -15.9 cm 2.32 cm 4.42 MeV 6.01 keV 991 um 991 um World eIoni + 2 -3.14 mm -16.3 cm 2.32 cm 37.6 MeV 214 eV 3.32 mm 4.31 mm World eIoni + 3 -3.14 mm -16.4 cm 2.32 cm 49.1 MeV 93.2 eV 1.15 mm 5.46 mm World eIoni + 4 -3.12 mm -17.9 cm 2.33 cm 203 MeV 1.97 keV 1.54 cm 2.09 cm World eIoni + 5 -3.11 mm -18.7 cm 2.33 cm 277 MeV 1.43 keV 7.41 mm 2.83 cm World eIoni + 6 -3.1 mm -20 cm 2.33 cm 409 MeV 2.26 keV 1.32 cm 4.15 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 11, Parent ID = 8 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 3.02 um -2.24 mm 4.6 mm 72.4 MeV 825 eV 5.26 mm 5.26 mm World eIoni - 2 41.4 um -3.58 cm 1.41 cm 408 MeV 5.23 keV 3.53 cm 4.06 cm World eIoni - 3 51.5 um -7.15 cm 1.73 cm 766 MeV 7.06 keV 3.59 cm 7.64 cm World eIoni - 4 50.8 um -20 cm 2.23 cm 2.05 GeV 31.8 keV 12.9 cm 20.5 cm OutOfWorldTransportation + 0 -3.11 mm -18.7 cm 2.33 cm 1.51 keV 0 eV 0 fm 0 fm World initStep + 1 -3.11 mm -18.7 cm 2.33 cm 396 keV 1.51 keV 97.7 um 97.7 um World eIoni + 2 -3.12 mm -20 cm 2.33 cm 132 MeV 1.66 keV 1.32 cm 1.33 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 10, Parent ID = 8 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 51.5 um -7.15 cm 1.73 cm 1.47 keV 0 eV 0 fm 0 fm World initStep - 1 55.9 um -7.16 cm 1.73 cm 376 keV 1.47 keV 93.2 um 93.2 um World eIoni - 2 84.8 um -20 cm 1.73 cm 1.28 GeV 25.2 keV 13.7 cm 13.7 cm OutOfWorldTransportation + 0 -3.12 mm -17.9 cm 2.33 cm 11.2 keV 0 eV 0 fm 0 fm World initStep + 1 -3.15 mm -18.1 cm 2.33 cm 12.4 MeV 3.84 keV 1.95 mm 1.95 mm World eIoni + 2 -2.98 mm -18.2 cm 2.36 cm 25.4 MeV 85.2 eV 1.35 mm 3.31 mm World eIoni + 3 -2.5 mm -20 cm 2.45 cm 207 MeV 5.24 keV 1.82 cm 2.15 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 9, Parent ID = 8 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 41.4 um -3.58 cm 1.41 cm 2.51 keV 0 eV 0 fm 0 fm World initStep - 1 42.5 um -3.59 cm 1.41 cm 944 keV 2.51 keV 218 um 218 um World eIoni - 2 53.1 um -3.7 cm 1.41 cm 12.3 MeV 86.9 eV 1.14 mm 1.35 mm World eIoni - 3 -117 um -12.5 cm 1.51 cm 895 MeV 14.8 keV 8.82 cm 8.96 cm World eIoni - 4 10.5 um -16.8 cm 1.52 cm 1.32 GeV 7.54 keV 4.23 cm 13.2 cm World eIoni - 5 84.4 um -20 cm 1.53 cm 1.64 GeV 5.03 keV 3.24 cm 16.4 cm OutOfWorldTransportation + 0 -3.14 mm -16.4 cm 2.32 cm 1.87 keV 0 eV 0 fm 0 fm World initStep + 1 -3.14 mm -16.4 cm 2.32 cm 566 keV 1.87 keV 135 um 135 um World eIoni + 2 -3.12 mm -20 cm 2.32 cm 360 MeV 3.69 keV 3.63 cm 3.64 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 10.5 um -16.8 cm 1.52 cm 1.46 keV 0 eV 0 fm 0 fm World initStep - 1 6.4 um -16.8 cm 1.52 cm 372 keV 1.46 keV 92.3 um 92.3 um World eIoni - 2 -15.1 um -20 cm 1.52 cm 324 MeV 5.96 keV 3.29 cm 3.3 cm OutOfWorldTransportation + 0 -56 um -6.85 cm 1.7 cm 4.51 keV 0 eV 0 fm 0 fm World initStep + 1 -72.7 um -6.88 cm 1.7 cm 2.65 MeV 4.51 keV 594 um 594 um World eIoni + 2 -43.8 um -7.44 cm 1.71 cm 59.1 MeV 574 eV 5.65 mm 6.24 mm World eIoni + 3 -83.1 um -11.1 cm 1.71 cm 422 MeV 6.27 keV 3.63 cm 4.25 cm World eIoni + 4 -152 um -14.1 cm 1.71 cm 723 MeV 6.17 keV 3.01 cm 7.26 cm World eIoni + 5 -229 um -20 cm 1.7 cm 1.32 GeV 8.77 keV 5.92 cm 13.2 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 13, Parent ID = 4 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -117 um -12.5 cm 1.51 cm 2.28 keV 0 eV 0 fm 0 fm World initStep - 1 -111 um -12.5 cm 1.51 cm 801 keV 2.28 keV 186 um 186 um World eIoni - 2 -92.3 um -12.8 cm 1.51 cm 23.5 MeV 159 eV 2.27 mm 2.46 mm World eIoni - 3 -50.6 um -20 cm 1.54 cm 747 MeV 12.4 keV 7.24 cm 7.48 cm OutOfWorldTransportation + 0 -152 um -14.1 cm 1.71 cm 7.07 keV 0 eV 0 fm 0 fm World initStep + 1 -145 um -14.1 cm 1.7 cm 5.91 MeV 4.46 keV 1.26 mm 1.26 mm World eIoni + 2 90.1 um -14.7 cm 1.62 cm 66.7 MeV 1.18 keV 7.32 mm 8.58 mm World eIoni + 3 156 um -15.3 cm 1.61 cm 126 MeV 842 eV 5.96 mm 1.45 cm World eIoni + 4 300 um -19.1 cm 1.59 cm 499 MeV 8.94 keV 3.72 cm 5.18 cm World eIoni + 5 321 um -20 cm 1.59 cm 593 MeV 2.92 keV 9.4 mm 6.12 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 15, Parent ID = 13 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 3.02 um -2.24 mm 4.6 mm 2.3 keV 0 eV 0 fm 0 fm World initStep - 1 -3.52 um -2.31 mm 4.6 mm 823 keV 2.3 keV 188 um 188 um World eIoni - 2 -1.76 mm -2.98 cm 4.32 mm 275 MeV 6.53 keV 2.75 cm 2.77 cm World eIoni - 3 -3.28 mm -11.2 cm 5.46 mm 1.1 GeV 18.9 keV 8.2 cm 11 cm World eIoni - 4 -3.47 mm -13.4 cm 5.61 mm 1.31 GeV 4.45 keV 2.19 cm 13.2 cm World eIoni - 5 -3.89 mm -20 cm 5.94 mm 1.98 GeV 9.81 keV 6.63 cm 19.8 cm OutOfWorldTransportation + 0 300 um -19.1 cm 1.59 cm 18.6 keV 0 eV 0 fm 0 fm World initStep + 1 320 um -19.2 cm 1.58 cm 9.65 MeV 3.9 keV 1.04 mm 1.04 mm World eIoni + 2 -26.3 um -20 cm 1.6 cm 94.4 MeV 1.12 keV 8.49 mm 9.53 mm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 2 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -3.47 mm -13.4 cm 5.61 mm 1.46 keV 0 eV 0 fm 0 fm World initStep - 1 -3.47 mm -13.4 cm 5.61 mm 373 keV 1.46 keV 92.5 um 92.5 um World eIoni - 2 -3.49 mm -20 cm 5.63 mm 663 MeV 12.1 keV 6.85 cm 6.86 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 2 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -3.28 mm -11.2 cm 5.46 mm 4.65 keV 0 eV 0 fm 0 fm World initStep - 1 -3.26 mm -11.2 cm 5.46 mm 2.8 MeV 4.65 keV 629 um 629 um World eIoni - 2 -3.24 mm -11.4 cm 5.45 mm 23.9 MeV 46.4 eV 2.11 mm 2.74 mm World eIoni - 3 -3.2 mm -20 cm 5.43 mm 882 MeV 16.6 keV 8.58 cm 8.86 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 47.3 um -8.89 cm 1.79 cm 939 MeV 21.4 keV 9.38 cm 9.38 cm World eIoni - 2 49 um -9.34 cm 1.82 cm 984 MeV 1.79 keV 4.49 mm 9.83 cm World eIoni - 3 49.6 um -9.48 cm 1.82 cm 998 MeV 131 eV 1.39 mm 9.97 cm World eIoni - 4 74.3 um -20 cm 2.17 cm 2.05 GeV 20.5 keV 10.5 cm 20.5 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 14, Parent ID = 13 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 49.6 um -9.48 cm 1.82 cm 2.77 keV 0 eV 0 fm 0 fm World initStep - 1 59.4 um -9.49 cm 1.82 cm 1.13 MeV 2.77 keV 257 um 257 um World eIoni - 2 64.8 um -9.51 cm 1.82 cm 3.5 MeV 0 eV 238 um 495 um World eIoni - 3 93.6 um -20 cm 1.82 cm 1.05 GeV 12.3 keV 10.5 cm 10.6 cm OutOfWorldTransportation + 0 156 um -15.3 cm 1.61 cm 1.07 keV 0 eV 0 fm 0 fm World initStep + 1 157 um -15.3 cm 1.61 cm 223 keV 1.07 keV 58.8 um 58.8 um World eIoni + 2 158 um -20 cm 1.61 cm 466 MeV 12.2 keV 4.92 cm 4.93 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 12, Parent ID = 4 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 49 um -9.34 cm 1.82 cm 2.4 keV 0 eV 0 fm 0 fm World initStep - 1 45.4 um -9.35 cm 1.82 cm 874 keV 2.4 keV 202 um 202 um World eIoni - 2 136 um -10.3 cm 1.78 cm 91.7 MeV 775 eV 9.09 mm 9.29 mm World eIoni - 3 120 um -14.5 cm 1.72 cm 521 MeV 9.94 keV 4.29 cm 5.22 cm World eIoni - 4 107 um -17.2 cm 1.7 cm 790 MeV 4.05 keV 2.7 cm 7.92 cm World eIoni - 5 101 um -18.8 cm 1.69 cm 948 MeV 3.2 keV 1.58 cm 9.49 cm World eIoni - 6 98.4 um -20 cm 1.69 cm 1.07 GeV 3.13 keV 1.18 cm 10.7 cm OutOfWorldTransportation + 0 -83.1 um -11.1 cm 1.71 cm 3.04 keV 0 eV 0 fm 0 fm World initStep + 1 -83.7 um -11.1 cm 1.71 cm 1.33 MeV 3.04 keV 301 um 301 um World eIoni + 2 -81.5 um -11.1 cm 1.71 cm 6.19 MeV 58.2 eV 486 um 787 um World eIoni + 3 -131 um -12 cm 1.71 cm 93.3 MeV 1.33 keV 8.71 mm 9.5 mm World eIoni + 4 -237 um -18.8 cm 1.73 cm 777 MeV 14.2 keV 6.84 cm 7.79 cm World eIoni + 5 -241 um -20 cm 1.73 cm 893 MeV 2.85 keV 1.16 cm 8.95 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 17, Parent ID = 12 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 101 um -18.8 cm 1.69 cm 2.76 keV 0 eV 0 fm 0 fm World initStep - 1 106 um -18.8 cm 1.69 cm 1.12 MeV 2.76 keV 256 um 256 um World eIoni - 2 106 um -18.8 cm 1.69 cm 1.13 MeV 167 meV 1.15 um 257 um World eIoni - 3 119 um -20 cm 1.7 cm 118 MeV 1.87 keV 1.17 cm 1.2 cm OutOfWorldTransportation + 0 -237 um -18.8 cm 1.73 cm 2.07 keV 0 eV 0 fm 0 fm World initStep + 1 -238 um -18.8 cm 1.73 cm 676 keV 2.07 keV 159 um 159 um World eIoni + 2 -239 um -20 cm 1.73 cm 116 MeV 3.27 keV 1.16 cm 1.17 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 16, Parent ID = 12 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 107 um -17.2 cm 1.7 cm 1.87 keV 0 eV 0 fm 0 fm World initStep - 1 105 um -17.2 cm 1.7 cm 567 keV 1.87 keV 136 um 136 um World eIoni - 2 96.3 um -20 cm 1.7 cm 276 MeV 3.47 keV 2.77 cm 2.79 cm OutOfWorldTransportation + 0 -131 um -12 cm 1.71 cm 3.1 keV 0 eV 0 fm 0 fm World initStep + 1 -133 um -12 cm 1.71 cm 1.25 MeV 1.39 keV 198 um 198 um World eIoni + 2 188 um -13.6 cm 1.75 cm 157 MeV 1.41 keV 1.58 cm 1.6 cm World eIoni + 3 -453 um -17.3 cm 1.78 cm 533 MeV 7.59 keV 3.77 cm 5.36 cm World eIoni + 4 -677 um -20 cm 1.79 cm 800 MeV 5.92 keV 2.67 cm 8.03 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 3 +* G4Track Information: Particle = e-, Track ID = 19, Parent ID = 16 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 120 um -14.5 cm 1.72 cm 2.78 keV 0 eV 0 fm 0 fm World initStep - 1 114 um -14.6 cm 1.71 cm 1.13 MeV 2.78 keV 258 um 258 um World eIoni - 2 506 um -15.9 cm 1.69 cm 134 MeV 1.4 keV 1.33 cm 1.35 cm World eIoni - 3 731 um -17.7 cm 1.67 cm 317 MeV 3.12 keV 1.84 cm 3.19 cm World eIoni - 4 878 um -20 cm 1.66 cm 546 MeV 5.05 keV 2.28 cm 5.47 cm OutOfWorldTransportation + 0 -453 um -17.3 cm 1.78 cm 1.17 keV 0 eV 0 fm 0 fm World initStep + 1 -452 um -17.3 cm 1.78 cm 258 keV 1.17 keV 66.6 um 66.6 um World eIoni + 2 -451 um -20 cm 1.78 cm 267 MeV 8.46 keV 2.73 cm 2.73 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 5 +* G4Track Information: Particle = e-, Track ID = 18, Parent ID = 16 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 731 um -17.7 cm 1.67 cm 4.96 keV 0 eV 0 fm 0 fm World initStep - 1 726 um -17.7 cm 1.67 cm 3.14 MeV 4.96 keV 705 um 705 um World eIoni - 2 723 um -17.8 cm 1.67 cm 13.1 MeV 55.6 eV 993 um 1.7 mm World eIoni - 3 740 um -18.9 cm 1.67 cm 119 MeV 1.37 keV 1.06 cm 1.23 cm World eIoni - 4 750 um -20 cm 1.66 cm 228 MeV 2.32 keV 1.1 cm 2.32 cm OutOfWorldTransportation + 0 188 um -13.6 cm 1.75 cm 6.95 keV 0 eV 0 fm 0 fm World initStep + 1 162 um -13.6 cm 1.75 cm 5.73 MeV 6.95 keV 1.24 mm 1.24 mm World eIoni + 2 -703 um -13.9 cm 1.62 cm 30.6 MeV 326 eV 3.37 mm 4.61 mm World eIoni + 3 -1.59 mm -20 cm 1.48 cm 644 MeV 8.38 keV 6.13 cm 6.6 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 9, Parent ID = 8 +* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 740 um -18.9 cm 1.67 cm 1.03 keV 0 eV 0 fm 0 fm World initStep - 1 743 um -18.9 cm 1.67 cm 209 keV 1.03 keV 55.4 um 55.4 um World eIoni - 2 758 um -20 cm 1.67 cm 110 MeV 1.77 keV 1.11 cm 1.11 cm OutOfWorldTransportation + 0 -31.9 um -5.35 cm 1.58 cm 1.5 keV 0 eV 0 fm 0 fm World initStep + 1 -27.6 um -5.36 cm 1.59 cm 394 keV 1.5 keV 97.1 um 97.1 um World eIoni + 2 293 nm -20 cm 1.59 cm 1.46 GeV 26.3 keV 15.7 cm 15.7 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 47.3 um -8.89 cm 1.79 cm 1.26 keV 0 eV 0 fm 0 fm World initStep - 1 45.7 um -8.89 cm 1.79 cm 292 keV 1.26 keV 74.4 um 74.4 um World eIoni - 2 34.7 um -20 cm 1.79 cm 1.11 GeV 20.3 keV 12.1 cm 12.1 cm OutOfWorldTransportation + 0 8.77 um -4.99 mm 6.61 mm 3.02 keV 0 eV 0 fm 0 fm World initStep + 1 -227 nm -5.11 mm 6.61 mm 1.3 MeV 3.02 keV 297 um 297 um World eIoni + 2 -71.1 um -1.17 cm 6.47 mm 66.7 MeV 629 eV 6.54 mm 6.84 mm World eIoni + 3 -829 um -8.45 cm 6.46 mm 795 MeV 17.1 keV 7.29 cm 7.97 cm World eIoni + 4 -1.06 mm -16.7 cm 6.5 mm 1.62 GeV 17.4 keV 8.24 cm 16.2 cm World eIoni + 5 -1.12 mm -20 cm 6.51 mm 1.95 GeV 5.89 keV 3.3 cm 19.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 21, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 0 fm -20 cm 2.22 cm 2.05 GeV 43 keV 20.5 cm 20.5 cm OutOfWorldTransportation + 0 -1.06 mm -16.7 cm 6.5 mm 1.63 keV 0 eV 0 fm 0 fm World initStep + 1 -1.05 mm -16.7 cm 6.5 mm 449 keV 1.63 keV 109 um 109 um World eIoni + 2 -1.03 mm -20 cm 6.48 mm 330 MeV 4.58 keV 3.34 cm 3.35 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 +* G4Track Information: Particle = e-, Track ID = 20, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 544 um -12.6 cm 2 cm 1.31 GeV 23.8 keV 13.1 cm 13.1 cm World eIoni - 2 795 um -20 cm 2.23 cm 2.05 GeV 17.1 keV 7.44 cm 20.5 cm OutOfWorldTransportation + 0 -829 um -8.45 cm 6.46 mm 8.77 keV 0 eV 0 fm 0 fm World initStep + 1 -805 um -8.49 cm 6.48 mm 3.59 MeV 731 eV 403 um 403 um World eIoni + 2 -2.42 mm -12.4 cm 6.8 mm 400 MeV 5.35 keV 3.98 cm 4.02 cm World eIoni + 3 -3.52 mm -20 cm 7.22 mm 1.15 GeV 14.1 keV 7.55 cm 11.6 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 23, Parent ID = 20 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 544 um -12.6 cm 2 cm 2.65 keV 0 eV 0 fm 0 fm World initStep - 1 553 um -12.6 cm 2 cm 1.04 MeV 2.65 keV 238 um 238 um World eIoni - 2 539 um -13.2 cm 2.01 cm 58.8 MeV 1.9 keV 5.78 mm 6.02 mm WorldTransportation - 3 539 um -13.2 cm 2.01 cm 58.8 MeV 0 eV 0 fm 6.02 mm World eIoni - 4 367 um -15.9 cm 2.01 cm 333 MeV 5.91 keV 2.74 cm 3.34 cm World eIoni - 5 295 um -20 cm 2.01 cm 744 MeV 10.3 keV 4.11 cm 7.45 cm OutOfWorldTransportation + 0 -2.42 mm -12.4 cm 6.8 mm 15.8 keV 0 eV 0 fm 0 fm World initStep + 1 -2.44 mm -12.6 cm 6.87 mm 19.2 MeV 5.67 keV 2.61 mm 2.61 mm World eIoni + 2 512 um -13.3 cm 6.56 mm 81.2 MeV 1.72 keV 7.04 mm 9.65 mm World eIoni + 3 4.36 mm -20 cm 6.14 mm 756 MeV 11.8 keV 6.76 cm 7.73 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 2 +* G4Track Information: Particle = e-, Track ID = 22, Parent ID = 20 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 367 um -15.9 cm 2.01 cm 1.07 keV 0 eV 0 fm 0 fm World initStep - 1 366 um -15.9 cm 2.01 cm 221 keV 1.07 keV 58.2 um 58.2 um World eIoni - 2 357 um -20 cm 2.01 cm 411 MeV 10.4 keV 4.31 cm 4.31 cm OutOfWorldTransportation + 0 -805 um -8.49 cm 6.48 mm 996 eV 0 eV 0 fm 0 fm World initStep + 1 -807 um -8.49 cm 6.48 mm 199 keV 996 eV 52.9 um 52.9 um World eIoni + 2 1.36 cm -17.7 cm 2.41 cm 921 MeV 21.1 keV 10.7 cm 10.7 cm World eIoni + 3 1.63 cm -18.6 cm 3.36 cm 1.01 GeV 4.29 keV 1.34 cm 12 cm WorldTransportation + 4 1.84 cm -19.5 cm 4.12 cm 1.1 GeV 2.36 keV 1.18 cm 13.2 cm WorldTransportation + 5 1.93 cm -19.9 cm 4.45 cm 1.14 GeV 345 eV 5.41 mm 13.7 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -5690,120 +5821,48 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 10.2 um -1.27 cm 9.78 mm 177 MeV 2.51 keV 1.71 cm 1.71 cm World eIoni - 2 21.2 um -4.71 cm 1.53 cm 521 MeV 9.48 keV 3.49 cm 5.19 cm World eIoni - 3 26.2 um -7.79 cm 1.77 cm 829 MeV 8.38 keV 3.09 cm 8.28 cm World eIoni - 4 36.6 um -16.8 cm 2.14 cm 1.73 GeV 18 keV 8.98 cm 17.3 cm World eIoni - 5 36.4 um -20 cm 2.22 cm 2.05 GeV 5 keV 3.24 cm 20.5 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 1 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 36.6 um -16.8 cm 2.14 cm 1.05 keV 0 eV 0 fm 0 fm World initStep - 1 33.8 um -16.8 cm 2.14 cm 215 keV 1.05 keV 56.9 um 56.9 um World eIoni - 2 14.4 um -20 cm 2.14 cm 324 MeV 7.02 keV 3.37 cm 3.38 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 26.2 um -7.79 cm 1.77 cm 1.37 keV 0 eV 0 fm 0 fm World initStep - 1 28.8 um -7.79 cm 1.77 cm 334 keV 1.37 keV 83.9 um 83.9 um World eIoni - 2 46.1 um -20 cm 1.76 cm 1.22 GeV 27.9 keV 13.2 cm 13.2 cm OutOfWorldTransportation + 1 206 um -6.52 cm 1.68 cm 702 MeV 19.3 keV 7.01 cm 7.01 cm World eIoni + 2 520 um -17.3 cm 2.17 cm 1.78 GeV 21.4 keV 10.8 cm 17.8 cm World eIoni + 3 572 um -20 cm 2.24 cm 2.05 GeV 5.65 keV 2.67 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 21.2 um -4.71 cm 1.53 cm 18.5 keV 0 eV 0 fm 0 fm World initStep - 1 81.7 um -4.93 cm 1.53 cm 23.4 MeV 3.81 keV 3.03 mm 3.03 mm World eIoni - 2 1.55 mm -5.38 cm 1.4 cm 68.3 MeV 1.35 keV 4.94 mm 7.97 mm World eIoni - 3 5.23 mm -19.1 cm 1.02 cm 1.44 GeV 31.2 keV 13.7 cm 14.5 cm World eIoni - 4 5.3 mm -20 cm 1.02 cm 1.53 GeV 1.9 keV 9.16 mm 15.4 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 3 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 5.23 mm -19.1 cm 1.02 cm 3.48 keV 0 eV 0 fm 0 fm World initStep - 1 5.24 mm -19.1 cm 1.03 cm 1.68 MeV 3.48 keV 379 um 379 um World eIoni - 2 5.29 mm -19.5 cm 1.03 cm 41.4 MeV 511 eV 3.97 mm 4.35 mm World eIoni - 3 5.28 mm -20 cm 1.04 cm 91.7 MeV 1.01 keV 5.03 mm 9.38 mm OutOfWorldTransportation + 0 520 um -17.3 cm 2.17 cm 5.99 keV 0 eV 0 fm 0 fm World initStep + 1 506 um -17.4 cm 2.17 cm 4.39 MeV 5.99 keV 984 um 984 um World eIoni + 2 506 um -17.6 cm 2.17 cm 25.2 MeV 64.9 eV 2.08 mm 3.06 mm World eIoni + 3 562 um -20 cm 2.17 cm 268 MeV 6.38 keV 2.43 cm 2.73 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 10.2 um -1.27 cm 9.78 mm 1.08 keV 0 eV 0 fm 0 fm World initStep - 1 11.8 um -1.27 cm 9.78 mm 227 keV 1.08 keV 59.4 um 59.4 um World eIoni - 2 -2.84 cm -12.6 cm -2.89 cm 1.13 GeV 28.7 keV 13.1 cm 13.1 cm WorldTransportation - 3 -4.11 cm -19.6 cm -4.17 cm 1.83 GeV 13.6 keV 7.19 cm 20.3 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 180 um -7.75 cm 1.74 cm 825 MeV 18.1 keV 8.24 cm 8.24 cm World eIoni - 2 348 um -18.7 cm 2.17 cm 1.92 GeV 22.3 keV 10.9 cm 19.2 cm World eIoni - 3 360 um -20 cm 2.21 cm 2.05 GeV 3.85 keV 1.32 cm 20.5 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 348 um -18.7 cm 2.17 cm 2.01 keV 0 eV 0 fm 0 fm World initStep - 1 345 um -18.7 cm 2.17 cm 641 keV 2.01 keV 152 um 152 um World eIoni - 2 334 um -20 cm 2.17 cm 132 MeV 3.1 keV 1.32 cm 1.33 cm OutOfWorldTransportation + 0 206 um -6.52 cm 1.68 cm 6.5 keV 0 eV 0 fm 0 fm World initStep + 1 221 um -6.54 cm 1.68 cm 1.82 MeV 471 eV 200 um 200 um World eIoni + 2 455 um -9.41 cm 1.77 cm 290 MeV 3.42 keV 2.88 cm 2.9 cm World eIoni + 3 13.8 um -10.9 cm 1.81 cm 441 MeV 3 keV 1.51 cm 4.41 cm World eIoni + 4 -1.15 mm -20 cm 1.9 cm 1.35 GeV 21.3 keV 9.08 cm 13.5 cm OutOfWorldTransportation ********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 +* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 180 um -7.75 cm 1.74 cm 2.63 keV 0 eV 0 fm 0 fm World initStep - 1 179 um -7.76 cm 1.74 cm 1.03 MeV 2.63 keV 235 um 235 um World eIoni - 2 169 um -7.86 cm 1.74 cm 11.3 MeV 187 eV 1.02 mm 1.26 mm World eIoni - 3 56.3 um -10.6 cm 1.73 cm 288 MeV 4.41 keV 2.77 cm 2.9 cm World eIoni - 4 -199 um -20 cm 1.7 cm 1.22 GeV 20.6 keV 9.37 cm 12.3 cm OutOfWorldTransportation + 0 13.8 um -10.9 cm 1.81 cm 1.65 keV 0 eV 0 fm 0 fm World initStep + 1 16.6 um -10.9 cm 1.81 cm 461 keV 1.65 keV 112 um 112 um World eIoni + 2 32.1 um -20 cm 1.81 cm 908 MeV 15.2 keV 9.37 cm 9.38 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 4, Parent ID = 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 56.3 um -10.6 cm 1.73 cm 12.7 keV 0 eV 0 fm 0 fm World initStep - 1 3.59 um -10.8 cm 1.74 cm 14.7 MeV 5.55 keV 2.17 mm 2.17 mm World eIoni - 2 709 um -11 cm 1.56 cm 38.5 MeV 119 eV 3.17 mm 5.34 mm World eIoni - 3 1.48 mm -12.2 cm 1.36 cm 157 MeV 1.97 keV 1.21 cm 1.74 cm World eIoni - 4 1.75 mm -13.2 cm 1.3 cm 261 MeV 2.16 keV 1.04 cm 2.78 cm World eIoni - 5 2.44 mm -20 cm 1.13 cm 937 MeV 17.7 keV 6.77 cm 9.55 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 4 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 1.75 mm -13.2 cm 1.3 cm 5.22 keV 0 eV 0 fm 0 fm World initStep - 1 1.75 mm -13.2 cm 1.3 cm 1.06 MeV 378 eV 116 um 116 um World eIoni - 2 1.9 mm -20 cm 1.35 cm 677 MeV 8.34 keV 6.8 cm 6.81 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 4 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 1.48 mm -12.2 cm 1.36 cm 1.39 keV 0 eV 0 fm 0 fm World initStep - 1 1.48 mm -12.2 cm 1.36 cm 342 keV 1.39 keV 85.6 um 85.6 um World eIoni - 2 1.5 mm -20 cm 1.37 cm 780 MeV 13.8 keV 8.15 cm 8.16 cm OutOfWorldTransportation + 0 455 um -9.41 cm 1.77 cm 1.1 keV 0 eV 0 fm 0 fm World initStep + 1 453 um -9.42 cm 1.77 cm 233 keV 1.1 keV 60.9 um 60.9 um World eIoni + 2 436 um -20 cm 1.77 cm 1.06 GeV 25.2 keV 12 cm 12 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 1, Parent ID = 0 @@ -5811,138 +5870,32 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng Ne Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process 0 0 fm 0 fm 0 fm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 4.56 um -1.3 cm 9.81 mm 180 MeV 3.65 keV 1.73 cm 1.73 cm World eIoni - 2 28.6 um -3.8 cm 1.43 cm 430 MeV 4.83 keV 2.54 cm 4.28 cm World eIoni - 3 94.7 um -20 cm 2.21 cm 2.05 GeV 39.7 keV 16.2 cm 20.5 cm OutOfWorldTransportation + 1 -1.89 um -3.9 mm 5.94 mm 89 MeV 837 eV 7.39 mm 7.39 mm World eIoni + 2 79.2 um -6.87 cm 1.71 cm 737 MeV 8.56 keV 6.62 cm 7.36 cm World eIoni + 3 150 um -20 cm 2.24 cm 2.05 GeV 27.5 keV 13.1 cm 20.5 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 28.6 um -3.8 cm 1.43 cm 2.63 keV 0 eV 0 fm 0 fm World initStep - 1 37.8 um -3.81 cm 1.43 cm 1.02 MeV 2.63 keV 235 um 235 um World eIoni - 2 44.1 um -3.89 cm 1.43 cm 8.67 MeV 114 eV 765 um 1e+03 um World eIoni - 3 52.5 um -4.47 cm 1.43 cm 66.7 MeV 789 eV 5.81 mm 6.81 mm World eIoni - 4 -276 um -18.1 cm 1.46 cm 1.43 GeV 30 keV 13.6 cm 14.3 cm World eIoni - 5 -299 um -19.4 cm 1.46 cm 1.56 GeV 1.33 keV 1.33 cm 15.7 cm World eIoni - 6 -308 um -20 cm 1.46 cm 1.62 GeV 722 eV 5.59 mm 16.2 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 3 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -299 um -19.4 cm 1.46 cm 1.19 keV 0 eV 0 fm 0 fm World initStep - 1 -302 um -19.4 cm 1.46 cm 266 keV 1.19 keV 68.5 um 68.5 um World eIoni - 2 -315 um -20 cm 1.46 cm 55.9 MeV 868 eV 5.59 mm 5.66 mm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 5, Parent ID = 3 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -276 um -18.1 cm 1.46 cm 1.58 keV 0 eV 0 fm 0 fm World initStep - 1 -278 um -18.1 cm 1.46 cm 426 keV 1.58 keV 104 um 104 um World eIoni - 2 -288 um -20 cm 1.46 cm 188 MeV 2.54 keV 1.89 cm 1.9 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 4, Parent ID = 3 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 52.5 um -4.47 cm 1.43 cm 22.5 keV 0 eV 0 fm 0 fm World initStep - 1 76.9 um -4.76 cm 1.44 cm 30.1 MeV 3.74 keV 3.73 mm 3.73 mm World eIoni - 2 4.04 mm -4.79 cm 1.48 cm 33.2 MeV 398 eV 4.53 mm 8.25 mm World eIoni - 3 1.02 cm -9.18 cm 1.55 cm 472 MeV 8.99 keV 4.47 cm 5.3 cm World eIoni - 4 1.02 cm -9.38 cm 1.55 cm 492 MeV 237 eV 2.01 mm 5.5 cm World eIoni - 5 1.16 cm -14.1 cm 1.57 cm 960 MeV 12 keV 4.68 cm 10.2 cm World eIoni - 6 1.2 cm -16.2 cm 1.58 cm 1.17 GeV 4.56 keV 2.13 cm 12.3 cm World eIoni - 7 1.26 cm -20 cm 1.59 cm 1.55 GeV 6.06 keV 3.78 cm 16.1 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 10, Parent ID = 4 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 1.2 cm -16.2 cm 1.58 cm 1.58 keV 0 eV 0 fm 0 fm World initStep - 1 1.2 cm -16.2 cm 1.58 cm 429 keV 1.58 keV 105 um 105 um World eIoni - 2 1.2 cm -20 cm 1.58 cm 378 MeV 6.95 keV 3.83 cm 3.84 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 9, Parent ID = 4 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 1.16 cm -14.1 cm 1.57 cm 2.92 keV 0 eV 0 fm 0 fm World initStep - 1 1.16 cm -14.1 cm 1.57 cm 1.23 MeV 2.92 keV 280 um 280 um World eIoni - 2 1.16 cm -14.1 cm 1.57 cm 1.35 MeV 1.72 eV 11.9 um 292 um World eIoni - 3 1.27 cm -19.8 cm 1.47 cm 576 MeV 9.67 keV 5.77 cm 5.8 cm World eIoni - 4 1.28 cm -20 cm 1.46 cm 591 MeV 64.5 eV 1.48 mm 5.95 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 11, Parent ID = 9 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 1.27 cm -19.8 cm 1.47 cm 2.92 keV 0 eV 0 fm 0 fm World initStep - 1 1.27 cm -19.8 cm 1.47 cm 1.24 MeV 2.92 keV 281 um 281 um World eIoni - 2 1.27 cm -19.9 cm 1.47 cm 4.06 MeV 4.8 eV 282 um 563 um World eIoni - 3 1.27 cm -20 cm 1.47 cm 14.9 MeV 302 eV 1.08 mm 1.64 mm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 4 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 1.02 cm -9.38 cm 1.55 cm 6.17 keV 0 eV 0 fm 0 fm World initStep - 1 1.03 cm -9.42 cm 1.55 cm 4.56 MeV 4.52 keV 867 um 867 um World eIoni - 2 8.93 mm -12.5 cm 1.3 cm 315 MeV 3.91 keV 3.14 cm 3.23 cm World eIoni - 3 8.35 mm -14.7 cm 1.26 cm 529 MeV 4.66 keV 2.15 cm 5.38 cm World eIoni - 4 7.58 mm -20 cm 1.22 cm 1.06 GeV 12.3 keV 5.32 cm 10.7 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 13, Parent ID = 8 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 8.35 mm -14.7 cm 1.26 cm 13.9 keV 0 eV 0 fm 0 fm World initStep - 1 8.38 mm -14.8 cm 1.26 cm 16.4 MeV 5.02 keV 2.33 mm 2.33 mm World eIoni - 2 5.14 mm -15.9 cm 1.32 cm 124 MeV 1.78 keV 1.15 cm 1.38 cm World eIoni - 3 3.03 mm -20 cm 1.35 cm 534 MeV 7.2 keV 4.11 cm 5.49 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 12, Parent ID = 8 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 8.93 mm -12.5 cm 1.3 cm 18.8 keV 0 eV 0 fm 0 fm World initStep - 1 9 mm -12.7 cm 1.31 cm 23.9 MeV 6.67 keV 3.07 mm 3.07 mm World eIoni - 2 7.96 mm -15.8 cm 8.9 mm 329 MeV 1.68 keV 3.1 cm 3.41 cm World eIoni - 3 7.62 mm -20 cm 7.57 mm 748 MeV 6.53 keV 4.19 cm 7.6 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 4 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 1.02 cm -9.18 cm 1.55 cm 2.01 keV 0 eV 0 fm 0 fm World initStep - 1 1.02 cm -9.18 cm 1.55 cm 641 keV 2.01 keV 152 um 152 um World eIoni - 2 1.02 cm -20 cm 1.55 cm 1.08 GeV 11.8 keV 11 cm 11.1 cm OutOfWorldTransportation + 0 79.2 um -6.87 cm 1.71 cm 1.47 keV 0 eV 0 fm 0 fm World initStep + 1 78 um -6.87 cm 1.71 cm 377 keV 1.47 keV 93.2 um 93.2 um World eIoni + 2 70.5 um -20 cm 1.72 cm 1.31 GeV 25.8 keV 14 cm 14 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 4.56 um -1.3 cm 9.81 mm 1.27 keV 0 eV 0 fm 0 fm World initStep - 1 8.13 um -1.3 cm 9.81 mm 295 keV 1.27 keV 75 um 75 um World eIoni - 2 1.45 cm -18.5 cm 1.3 cm 1.72 GeV 44.1 keV 19.8 cm 19.8 cm World eIoni - 3 2.06 cm -19.9 cm 2.61 cm 1.86 GeV 6.13 keV 2 cm 21.9 cm OutOfWorldTransportation + 0 -1.89 um -3.9 mm 5.94 mm 1.15 keV 0 eV 0 fm 0 fm World initStep + 1 -3.32 um -3.92 mm 5.94 mm 255 keV 1.15 keV 64.9 um 64.9 um World eIoni + 2 4.54 cm -14.1 cm -2.97 cm 1.37 GeV 27.6 keV 15.8 cm 15.8 cm World eIoni + 3 5.98 cm -19.1 cm -6.17 cm 1.87 GeV 13.5 keV 6.13 cm 21.9 cm OutOfWorldTransportation Run terminated. Run Summary Number of events processed : 100 - User=0.040000s Real=0.048393s Sys=0.010000s + User=0.030000s Real=0.039758s Sys=0.010000s # /calor/setAbsMat Air /calor/setWorldMat Xe20CO2 @@ -6008,1317 +5961,59 @@ Index : 2 used in the geometry : Yes ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.51 mm -5.93 cm 1 cm 50 MeV 0 eV 0 fm 0 fm World initStep - 1 -4.51 mm -5.97 cm 1.19 cm 53.6 MeV 756 eV 1.93 mm 1.93 mm World eIoni - 2 -4.28 mm -9.78 cm 2.4 cm 434 MeV 21.7 keV 4.12 cm 4.31 cm World eIoni - 3 -4.3 mm -12.6 cm 2.65 cm 720 MeV 13.8 keV 2.87 cm 7.19 cm World eIoni - 4 -4.31 mm -14.8 cm 2.78 cm 931 MeV 14.2 keV 2.12 cm 9.31 cm World eIoni - 5 -4.33 mm -19.2 cm 2.98 cm 1.37 GeV 33.4 keV 4.41 cm 13.7 cm World eIoni - 6 -4.35 mm -25 cm 3.15 cm 1.96 GeV 62.2 keV 5.84 cm 19.6 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 6, Parent ID = 1 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.33 mm -19.2 cm 2.98 cm 1.64 keV 0 eV 0 fm 0 fm World initStep - 1 -4.33 mm -19.2 cm 2.98 cm 99 keV 1.64 keV 76.8 um 76.8 um World eIoni - 2 -4.33 mm -19.7 cm 2.97 cm 54.2 MeV 15 keV 1.54 cm 1.55 cm World eIoni - 3 7.94 mm -25 cm 3.6 cm 583 MeV 23.4 keV 6.3 cm 7.85 cm OutOfWorldTransportation + 0 -1.11 mm -10.1 cm 1 cm 50 MeV 0 eV 0 fm 0 fm World initStep + 1 -1.24 mm -13.1 cm 2.3 cm 354 MeV 20.1 keV 3.51 cm 3.51 cm World eIoni + 2 -1.4 mm -19 cm 2.79 cm 943 MeV 32.1 keV 5.92 cm 9.43 cm World eIoni + 3 -1.46 mm -22.3 cm 2.94 cm 1.27 GeV 14.2 keV 3.23 cm 12.7 cm World eIoni + 4 -1.49 mm -23.7 cm 2.99 cm 1.41 GeV 4.48 keV 1.39 cm 14.1 cm World eIoni + 5 -1.51 mm -25 cm 3.03 cm 1.54 GeV 5.71 keV 1.34 cm 15.4 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 5, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.31 mm -14.8 cm 2.78 cm 2.45 keV 0 eV 0 fm 0 fm World initStep - 1 -4.31 mm -14.8 cm 2.78 cm 142 keV 828 eV 29.2 um 29.2 um World eIoni - 2 -4.23 mm -14.8 cm 2.77 cm 7.32 MeV 101 eV 778 um 808 um World eIoni - 3 -3.47 mm -16.5 cm 2.75 cm 178 MeV 12.1 keV 1.71 cm 1.79 cm World eIoni - 4 -2.84 mm -19.9 cm 2.68 cm 518 MeV 21.3 keV 3.4 cm 5.19 cm World eIoni - 5 -2.63 mm -22.4 cm 2.66 cm 766 MeV 17.3 keV 2.48 cm 7.67 cm World eIoni - 6 -2.45 mm -25 cm 2.64 cm 1.02 GeV 14.3 keV 2.58 cm 10.3 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 10, Parent ID = 5 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -2.63 mm -22.4 cm 2.66 cm 1.2 keV 0 eV 0 fm 0 fm World initStep - 1 -2.62 mm -22.4 cm 2.66 cm 66.2 keV 1.2 keV 50.4 um 50.4 um World eIoni - 2 -2.61 mm -22.7 cm 2.66 cm 28.4 MeV 9.26 keV 8.45 mm 8.5 mm World eIoni - 3 1.88 mm -25 cm 3.25 cm 258 MeV 8.2 keV 2.5 cm 3.35 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 9, Parent ID = 5 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -2.84 mm -19.9 cm 2.68 cm 2.93 keV 0 eV 0 fm 0 fm World initStep - 1 -2.84 mm -19.9 cm 2.68 cm 219 keV 2.93 keV 173 um 173 um World eIoni - 2 -2.81 mm -20 cm 2.68 cm 2.92 MeV 20.9 eV 272 um 444 um World eIoni - 3 -2.51 mm -20.7 cm 2.72 cm 72 MeV 2.33 keV 6.93 mm 7.37 mm World eIoni - 4 -2.15 mm -25 cm 2.88 cm 507 MeV 24.1 keV 4.35 cm 5.09 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 11, Parent ID = 9 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -2.51 mm -20.7 cm 2.72 cm 9.39 keV 0 eV 0 fm 0 fm World initStep - 1 -2.52 mm -20.7 cm 2.72 cm 1.25 MeV 3.7 keV 571 um 571 um World eIoni - 2 -1.37 mm -22.8 cm 3.07 cm 215 MeV 7.92 keV 2.24 cm 2.3 cm World eIoni - 3 245 um -25 cm 3.72 cm 435 MeV 17.8 keV 2.3 cm 4.6 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 12, Parent ID = 11 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.37 mm -22.8 cm 3.07 cm 1.76 keV 0 eV 0 fm 0 fm World initStep - 1 -1.37 mm -22.8 cm 3.07 cm 108 keV 1.76 keV 84.7 um 84.7 um World eIoni - 2 -4.55 mm -23.4 cm 3.83 cm 57.4 MeV 10.1 keV 1.27 cm 1.27 cm World msc - 3 -1.16 cm -23.5 cm 4.14 cm 71.5 MeV 4.88 keV 8.75 mm 2.15 cm World msc - 4 -1.53 cm -24.3 cm 4.3 cm 154 MeV 4.1 keV 9.29 mm 3.08 cm World msc - 5 -1.68 cm -24.9 cm 4.37 cm 214 MeV 3.11 keV 6.16 mm 3.69 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 8, Parent ID = 5 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -3.47 mm -16.5 cm 2.75 cm 9.29 keV 0 eV 0 fm 0 fm World initStep - 1 -3.49 mm -16.5 cm 2.75 cm 1.23 MeV 2.65 keV 956 um 956 um World eIoni - 2 -826 um -18.2 cm 2.8 cm 163 MeV 3.99 keV 1.66 cm 1.76 cm World eIoni - 3 4.18 mm -20.6 cm 3.18 cm 408 MeV 9.54 keV 2.54 cm 4.29 cm World eIoni - 4 6.86 mm -23.3 cm 3.39 cm 674 MeV 19.7 keV 2.68 cm 6.98 cm World eIoni - 5 7.71 mm -24.4 cm 3.45 cm 790 MeV 6.75 keV 1.17 cm 8.14 cm World eIoni - 6 8.06 mm -25 cm 3.48 cm 845 MeV 2.53 keV 5.5 mm 8.69 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 16, Parent ID = 8 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 7.71 mm -24.4 cm 3.45 cm 1.84 keV 0 eV 0 fm 0 fm World initStep - 1 7.71 mm -24.4 cm 3.45 cm 114 keV 1.84 keV 89.9 um 89.9 um World eIoni - 2 7.69 mm -25 cm 3.45 cm 55 MeV 10.7 keV 9.9 mm 9.99 mm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 15, Parent ID = 8 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 6.86 mm -23.3 cm 3.39 cm 2.25 keV 0 eV 0 fm 0 fm World initStep - 1 6.86 mm -23.3 cm 3.39 cm 150 keV 2.25 keV 119 um 119 um World eIoni - 2 6.97 mm -24.2 cm 2.6 cm 91.9 MeV 15.1 keV 1.81 cm 1.82 cm World msc - 3 4.99 mm -25 cm 2.2 cm 172 MeV 3.88 keV 9.18 mm 2.74 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 14, Parent ID = 8 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 4.18 mm -20.6 cm 3.18 cm 2.9 keV 0 eV 0 fm 0 fm World initStep - 1 4.18 mm -20.6 cm 3.18 cm 218 keV 2.9 keV 171 um 171 um World eIoni - 2 4.65 mm -21 cm 3.04 cm 42 MeV 2.75 keV 4.64 mm 4.81 mm World eIoni - 3 4.67 mm -21.1 cm 3.04 cm 46.4 MeV 636 eV 440 um 5.25 mm World eIoni - 4 5.2 mm -22.8 cm 2.95 cm 218 MeV 10.1 keV 1.72 cm 2.24 cm World eIoni - 5 5.46 mm -25 cm 2.91 cm 438 MeV 15.3 keV 2.2 cm 4.44 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 18, Parent ID = 14 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 5.2 mm -22.8 cm 2.95 cm 1.47 keV 0 eV 0 fm 0 fm World initStep - 1 5.2 mm -22.8 cm 2.95 cm 86.9 keV 1.47 keV 66.5 um 66.5 um World eIoni - 2 -1.8 mm -23.2 cm 2.45 cm 43.9 MeV 9.42 keV 1.26 cm 1.27 cm World eIoni - 3 -7.82 mm -23.7 cm 2.02 cm 90.7 MeV 5.33 keV 9.55 mm 2.22 cm World msc - 4 -9.91 mm -24.4 cm 1.87 cm 161 MeV 3.38 keV 7.52 mm 2.98 cm World msc - 5 -1.1 cm -25 cm 1.79 cm 219 MeV 3.23 keV 5.9 mm 3.57 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 17, Parent ID = 14 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 4.67 mm -21.1 cm 3.04 cm 1.68 keV 0 eV 0 fm 0 fm World initStep - 1 4.67 mm -21.1 cm 3.04 cm 102 keV 1.68 keV 79.3 um 79.3 um World eIoni - 2 1.35 cm -21.6 cm 3.71 cm 57.1 MeV 12.9 keV 1.62 cm 1.62 cm World eIoni - 3 2.12 cm -23.3 cm 4.71 cm 226 MeV 10.7 keV 2.28 cm 3.9 cm World msc - 4 2.3 cm -24.9 cm 4.96 cm 382 MeV 12.3 keV 1.59 cm 5.49 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 13, Parent ID = 8 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -826 um -18.2 cm 2.8 cm 1.96 keV 0 eV 0 fm 0 fm World initStep - 1 -827 um -18.2 cm 2.8 cm 122 keV 1.96 keV 98.4 um 98.4 um World eIoni - 2 -833 um -18.9 cm 2.8 cm 76.6 MeV 10.8 keV 2.14 cm 2.15 cm World eIoni - 3 2.24 cm -24.9 cm 2.94 cm 673 MeV 50.4 keV 6.85 cm 9 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 7, Parent ID = 5 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.31 mm -14.8 cm 2.78 cm 1.62 keV 0 eV 0 fm 0 fm World initStep - 1 -4.31 mm -14.8 cm 2.78 cm 102 keV 1.62 keV 75.5 um 75.5 um World eIoni - 2 -4.3 mm -15.3 cm 2.78 cm 56.5 MeV 15.1 keV 1.6 cm 1.61 cm World eIoni - 3 1.18 cm -25 cm 2.28 cm 1.02 GeV 58.3 keV 9.98 cm 11.6 cm OutOfWorldTransportation + 0 -1.49 mm -23.7 cm 2.99 cm 1.87 keV 0 eV 0 fm 0 fm World initStep + 1 -1.48 mm -23.7 cm 2.99 cm 116 keV 1.87 keV 92.3 um 92.3 um World eIoni + 2 -1.79 mm -24.2 cm 2.49 cm 52.1 MeV 10.1 keV 8.58 mm 8.67 mm World msc + 3 -1.31 mm -25 cm 2.09 cm 134 MeV 4.21 keV 9.2 mm 1.79 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 4, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.3 mm -12.6 cm 2.65 cm 2.5 keV 0 eV 0 fm 0 fm World initStep - 1 -4.3 mm -12.6 cm 2.66 cm 173 keV 2.5 keV 137 um 137 um World eIoni - 2 -4.31 mm -13.6 cm 2.66 cm 98.7 MeV 8.72 keV 1.62 cm 1.63 cm World eIoni - 3 -6.56 mm -15 cm 3.51 cm 233 MeV 4.68 keV 1.63 cm 3.26 cm World eIoni - 4 -7.09 mm -15.6 cm 3.71 cm 295 MeV 3.97 keV 6.61 mm 3.92 cm World eIoni - 5 -7.27 mm -15.9 cm 3.78 cm 321 MeV 876 eV 2.69 mm 4.19 cm World eIoni - 6 -8.77 mm -19 cm 4.33 cm 639 MeV 15.3 keV 3.23 cm 7.41 cm World eIoni - 7 -8.97 mm -19.6 cm 4.4 cm 699 MeV 4.05 keV 6.02 mm 8.02 cm World eIoni - 8 -9.86 mm -23.3 cm 4.74 cm 1.06 GeV 23.8 keV 3.67 cm 11.7 cm World eIoni - 9 -1.02 cm -25 cm 4.86 cm 1.23 GeV 14.2 keV 1.7 cm 13.4 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 24, Parent ID = 4 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -9.86 mm -23.3 cm 4.74 cm 24.8 keV 0 eV 0 fm 0 fm World initStep - 1 -9.84 mm -23.3 cm 4.74 cm 5.54 MeV 1.81 keV 1.35 mm 1.35 mm World eIoni - 2 -1.04 cm -23.7 cm 4.66 cm 41.9 MeV 2.21 keV 3.79 mm 5.14 mm World eIoni - 3 -1.09 cm -25 cm 4.62 cm 170 MeV 8.42 keV 1.28 cm 1.79 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 25, Parent ID = 24 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.04 cm -23.7 cm 4.66 cm 1.92 keV 0 eV 0 fm 0 fm World initStep - 1 -1.04 cm -23.7 cm 4.66 cm 120 keV 1.92 keV 95.6 um 95.6 um World eIoni - 2 -1.52 cm -24.3 cm 5.02 cm 58.4 MeV 7.66 keV 1.01 cm 1.02 cm World msc - 3 -1.53 cm -25 cm 5.38 cm 126 MeV 4.5 keV 7.65 mm 1.79 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 23, Parent ID = 4 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -8.97 mm -19.6 cm 4.4 cm 1.45 keV 0 eV 0 fm 0 fm World initStep - 1 -8.97 mm -19.6 cm 4.4 cm 85.2 keV 1.45 keV 65 um 65 um World eIoni - 2 -8.95 mm -20 cm 4.4 cm 42.4 MeV 11.1 keV 1.22 cm 1.23 cm World eIoni - 3 -1.34 cm -25 cm 3.02 cm 534 MeV 22.1 keV 5.54 cm 6.77 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 22, Parent ID = 4 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -8.77 mm -19 cm 4.33 cm 2.74 keV 0 eV 0 fm 0 fm World initStep - 1 -8.78 mm -19 cm 4.33 cm 199 keV 2.74 keV 157 um 157 um World eIoni - 2 -8.78 mm -19 cm 4.33 cm 1.25 MeV 0 eV 105 um 262 um World eIoni - 3 -4.37 mm -21.7 cm 4.72 cm 268 MeV 10.5 keV 2.79 cm 2.81 cm World eIoni - 4 -3.35 mm -23.4 cm 4.89 cm 433 MeV 12.4 keV 1.67 cm 4.48 cm World eIoni - 5 -2.67 mm -25 cm 5 cm 597 MeV 6.51 keV 1.64 cm 6.12 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 27, Parent ID = 22 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -3.35 mm -23.4 cm 4.89 cm 28.1 keV 0 eV 0 fm 0 fm World initStep - 1 -3.36 mm -23.4 cm 4.89 cm 6.14 MeV 2.1 keV 1.21 mm 1.21 mm World eIoni - 2 -3.12 mm -25 cm 4.65 cm 164 MeV 7.15 keV 1.63 cm 1.75 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 26, Parent ID = 22 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.37 mm -21.7 cm 4.72 cm 1.48 keV 0 eV 0 fm 0 fm World initStep - 1 -4.37 mm -21.7 cm 4.72 cm 87.3 keV 1.48 keV 67.1 um 67.1 um World eIoni - 2 -8.01 mm -22.1 cm 5.51 cm 44.2 MeV 21.5 keV 1.27 cm 1.28 cm World eIoni - 3 -1.22 cm -23.8 cm 5.99 cm 214 MeV 9.29 keV 1.84 cm 3.12 cm World msc - 4 -1.32 cm -25 cm 6.1 cm 326 MeV 7.02 keV 1.14 cm 4.25 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 21, Parent ID = 4 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -7.27 mm -15.9 cm 3.78 cm 7.13 keV 0 eV 0 fm 0 fm World initStep - 1 -7.26 mm -15.9 cm 3.78 cm 810 keV 7.13 keV 706 um 706 um World eIoni - 2 -7.27 mm -15.9 cm 3.78 cm 6.73 MeV 40.3 eV 593 um 1.3 mm World eIoni - 3 -6.4 mm -17.8 cm 3.75 cm 198 MeV 5.22 keV 1.92 cm 2.05 cm World eIoni - 4 -5.8 mm -20.7 cm 3.77 cm 488 MeV 17.3 keV 2.91 cm 4.95 cm World eIoni - 5 -5.62 mm -22.6 cm 3.78 cm 679 MeV 13.7 keV 1.91 cm 6.86 cm World eIoni - 6 -5.47 mm -25 cm 3.79 cm 914 MeV 8.98 keV 2.35 cm 9.21 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 30, Parent ID = 21 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -5.62 mm -22.6 cm 3.78 cm 2.52 keV 0 eV 0 fm 0 fm World initStep - 1 -5.63 mm -22.6 cm 3.78 cm 176 keV 2.52 keV 139 um 139 um World eIoni - 2 -5.61 mm -22.7 cm 3.78 cm 3.3 MeV 130 eV 316 um 455 um World eIoni - 3 -5.5 mm -22.9 cm 3.79 cm 25.5 MeV 982 eV 2.22 mm 2.68 mm World eIoni - 4 -5.35 mm -25 cm 3.8 cm 235 MeV 8.65 keV 2.1 cm 2.37 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 31, Parent ID = 30 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -5.5 mm -22.9 cm 3.79 cm 2.07 keV 0 eV 0 fm 0 fm World initStep - 1 -5.5 mm -22.9 cm 3.79 cm 132 keV 2.07 keV 106 um 106 um World eIoni - 2 -1.47 cm -23.6 cm 3.68 cm 75.2 MeV 10.1 keV 1.47 cm 1.48 cm World msc - 3 -1.73 cm -23.7 cm 4.66 cm 80 MeV 5.09 keV 1.39 cm 2.87 cm World msc - 4 -1.82 cm -24.9 cm 4.99 cm 204 MeV 6.75 keV 1.29 cm 4.16 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 29, Parent ID = 21 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -5.8 mm -20.7 cm 3.77 cm 1.25 keV 0 eV 0 fm 0 fm World initStep - 1 -5.8 mm -20.7 cm 3.77 cm 70.1 keV 1.25 keV 53.3 um 53.3 um World eIoni - 2 -5.78 mm -21 cm 3.77 cm 31.1 MeV 9.07 keV 9.18 mm 9.24 mm World eIoni - 3 -4.77 mm -25 cm 4.82 cm 426 MeV 28.2 keV 4.26 cm 5.18 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 28, Parent ID = 21 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -6.4 mm -17.8 cm 3.75 cm 1.76 keV 0 eV 0 fm 0 fm World initStep - 1 -6.4 mm -17.8 cm 3.75 cm 108 keV 1.76 keV 84.9 um 84.9 um World eIoni - 2 -6.38 mm -18.4 cm 3.75 cm 62 MeV 14.2 keV 1.75 cm 1.76 cm World eIoni - 3 -1.37 cm -25 cm 2.3 cm 713 MeV 43.1 keV 7.67 cm 9.43 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 20, Parent ID = 4 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -7.09 mm -15.6 cm 3.71 cm 16.3 keV 0 eV 0 fm 0 fm World initStep - 1 -7.08 mm -15.6 cm 3.7 cm 2.66 MeV 3.33 keV 562 um 562 um World eIoni - 2 -7.76 mm -17 cm 3.48 cm 145 MeV 5.63 keV 1.45 cm 1.5 cm World eIoni - 3 -7.93 mm -19.9 cm 3.24 cm 427 MeV 13.5 keV 2.83 cm 4.34 cm World eIoni - 4 -7.94 mm -19.9 cm 3.23 cm 433 MeV 390 eV 565 um 4.39 cm World eIoni - 5 -7.96 mm -25 cm 3.06 cm 940 MeV 31.5 keV 5.08 cm 9.47 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 34, Parent ID = 20 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -7.94 mm -19.9 cm 3.23 cm 1.48 keV 0 eV 0 fm 0 fm World initStep - 1 -7.93 mm -19.9 cm 3.23 cm 87.4 keV 1.48 keV 67 um 67 um World eIoni - 2 -7.92 mm -20.4 cm 3.23 cm 44.3 MeV 8.87 keV 1.27 cm 1.28 cm World eIoni - 3 -1.61 cm -22.5 cm 3.89 cm 252 MeV 19.4 keV 2.51 cm 3.79 cm World eBrem - 4 -1.85 cm -24.9 cm 4.08 cm 495 MeV 14.2 keV 2.45 cm 6.24 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 35, Parent ID = 34 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.61 cm -22.5 cm 3.89 cm 6.44 MeV 0 eV 0 fm 0 fm World initStep - 1 -1.94 cm -24.9 cm 4.17 cm 6.44 MeV 0 eV 2.46 cm 2.46 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 33, Parent ID = 20 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -7.93 mm -19.9 cm 3.24 cm 4.63 keV 0 eV 0 fm 0 fm World initStep - 1 -7.93 mm -19.9 cm 3.24 cm 422 keV 4.63 keV 349 um 349 um World eIoni - 2 -8.59 mm -20.3 cm 3.28 cm 41.5 MeV 3.23 keV 4.25 mm 4.6 mm World eIoni - 3 -8.74 mm -20.5 cm 3.27 cm 63.6 MeV 1.89 keV 2.22 mm 6.82 mm World eIoni - 4 -9.2 mm -21.9 cm 3.28 cm 203 MeV 10.3 keV 1.39 cm 2.07 cm World eIoni - 5 -9.64 mm -25 cm 3.28 cm 512 MeV 19.4 keV 3.1 cm 5.17 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 37, Parent ID = 33 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -9.2 mm -21.9 cm 3.28 cm 7.42 keV 0 eV 0 fm 0 fm World initStep - 1 -9.2 mm -21.9 cm 3.28 cm 861 keV 7.42 keV 754 um 754 um World eIoni - 2 -9.17 mm -22 cm 3.28 cm 8.17 MeV 65.7 eV 733 um 1.49 mm World eIoni - 3 -9.11 mm -22.2 cm 3.28 cm 34.1 MeV 439 eV 2.6 mm 4.08 mm World eIoni - 4 -9.02 mm -23 cm 3.3 cm 113 MeV 2.58 keV 7.94 mm 1.2 cm World eIoni - 5 -9.02 mm -23.1 cm 3.31 cm 119 MeV 41.9 eV 550 um 1.26 cm World eIoni - 6 -8.92 mm -25 cm 3.32 cm 310 MeV 8.21 keV 1.91 cm 3.17 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 40, Parent ID = 37 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -9.02 mm -23.1 cm 3.31 cm 7.6 keV 0 eV 0 fm 0 fm World initStep - 1 -9 mm -23.1 cm 3.31 cm 875 keV 1.25 keV 266 um 266 um World eIoni - 2 -1.16 cm -24.7 cm 3.45 cm 163 MeV 4.48 keV 1.72 cm 1.74 cm World eIoni - 3 -1.27 cm -25 cm 3.46 cm 189 MeV 2.34 keV 2.9 mm 2.04 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 41, Parent ID = 40 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.16 cm -24.7 cm 3.45 cm 1.79 keV 0 eV 0 fm 0 fm World initStep - 1 -1.16 cm -24.7 cm 3.45 cm 110 keV 1.79 keV 86.8 um 86.8 um World eIoni - 2 -1.16 cm -25 cm 3.45 cm 27.1 MeV 2.86 keV 3.38 mm 3.47 mm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 39, Parent ID = 37 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -9.02 mm -23 cm 3.3 cm 1.95 keV 0 eV 0 fm 0 fm World initStep - 1 -9.02 mm -23 cm 3.3 cm 123 keV 1.95 keV 97.9 um 97.9 um World eIoni - 2 -4.32 mm -23.7 cm 3.86 cm 63.8 MeV 6.59 keV 1.18 cm 1.19 cm World msc - 3 -803 um -23.8 cm 4.68 cm 80.1 MeV 4.89 keV 1.03 cm 2.22 cm World msc - 4 1.07 mm -24.9 cm 5.11 cm 185 MeV 7.65 keV 1.16 cm 3.38 cm World msc - 5 1.21 mm -25 cm 5.14 cm 198 MeV 202 eV 1.34 mm 3.51 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 38, Parent ID = 37 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -9.11 mm -22.2 cm 3.28 cm 1.51 keV 0 eV 0 fm 0 fm World initStep - 1 -9.11 mm -22.2 cm 3.28 cm 90.1 keV 1.51 keV 68.9 um 68.9 um World eIoni - 2 -8.81 mm -22.7 cm 4.19 cm 46.5 MeV 12.5 keV 1.33 cm 1.34 cm World eIoni - 3 -3.95 mm -23.5 cm 4.99 cm 130 MeV 6.21 keV 1.39 cm 2.72 cm World msc - 4 -2.11 mm -25 cm 5.29 cm 277 MeV 11.2 keV 1.52 cm 4.25 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 36, Parent ID = 33 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -8.74 mm -20.5 cm 3.27 cm 84 keV 0 eV 0 fm 0 fm World initStep - 1 -8.69 mm -20.7 cm 3.26 cm 16.7 MeV 2.15 keV 2.05 mm 2.05 mm World eIoni - 2 -1.06 cm -22.3 cm 3.37 cm 185 MeV 6.89 keV 1.71 cm 1.92 cm World eIoni - 3 -1.12 cm -25 cm 3.42 cm 448 MeV 21.5 keV 2.63 cm 4.55 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 42, Parent ID = 36 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.06 cm -22.3 cm 3.37 cm 4.05 keV 0 eV 0 fm 0 fm World initStep - 1 -1.06 cm -22.3 cm 3.37 cm 345 keV 4.05 keV 283 um 283 um World eIoni - 2 -1.07 cm -22.4 cm 3.38 cm 7.76 MeV 33.3 eV 748 um 1.03 mm World eIoni - 3 -1.09 cm -25 cm 3.41 cm 263 MeV 9.38 keV 2.56 cm 2.67 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 32, Parent ID = 20 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -7.76 mm -17 cm 3.48 cm 1.57 keV 0 eV 0 fm 0 fm World initStep - 1 -7.76 mm -17 cm 3.48 cm 93.9 keV 1.57 keV 72.4 um 72.4 um World eIoni - 2 -7.74 mm -17.5 cm 3.48 cm 49.7 MeV 15.9 keV 1.42 cm 1.43 cm World eIoni - 3 -2.54 cm -24.9 cm 3.92 cm 784 MeV 39.3 keV 7.96 cm 9.39 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 19, Parent ID = 4 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -6.56 mm -15 cm 3.51 cm 1.34 keV 0 eV 0 fm 0 fm World initStep - 1 -6.56 mm -15 cm 3.51 cm 76.6 keV 1.34 keV 58.5 um 58.5 um World eIoni - 2 -6.55 mm -15.3 cm 3.51 cm 35.8 MeV 8.08 keV 1.04 cm 1.05 cm World eIoni - 3 7.23 mm -25 cm 4.1 cm 1 GeV 63.7 keV 10.2 cm 11.2 cm OutOfWorldTransportation + 0 -1.46 mm -22.3 cm 2.94 cm 1.22 keV 0 eV 0 fm 0 fm World initStep + 1 -1.46 mm -22.3 cm 2.94 cm 67.9 keV 1.22 keV 51.7 um 51.7 um World eIoni + 2 -1.48 mm -22.6 cm 2.94 cm 29.6 MeV 11.1 keV 8.77 mm 8.82 mm World eIoni + 3 -6.76 mm -25 cm 3.61 cm 272 MeV 13.5 keV 2.69 cm 3.57 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.28 mm -9.78 cm 2.4 cm 14.1 keV 0 eV 0 fm 0 fm World initStep - 1 -4.3 mm -9.8 cm 2.4 cm 2.44 MeV 8.72 keV 1.7 mm 1.7 mm World eIoni - 2 -4.07 mm -9.89 cm 2.45 cm 11.3 MeV 1.18 keV 1.06 mm 2.76 mm World eIoni - 3 -1.63 mm -14.7 cm 2.46 cm 492 MeV 21.3 keV 4.82 cm 5.1 cm World eIoni - 4 -1.63 mm -14.7 cm 2.46 cm 493 MeV 0 eV 61.8 um 5.11 cm World eIoni - 5 -1.42 mm -15.3 cm 2.46 cm 549 MeV 1.99 keV 5.57 mm 5.66 cm World eIoni - 6 -863 um -17.1 cm 2.47 cm 730 MeV 9.12 keV 1.81 cm 7.48 cm World eIoni - 7 -761 um -17.5 cm 2.47 cm 769 MeV 1.45 keV 3.88 mm 7.87 cm World eIoni - 8 -747 um -17.5 cm 2.47 cm 774 MeV 354 eV 536 um 7.92 cm World eIoni - 9 -85.8 um -20.6 cm 2.48 cm 1.08 GeV 11.9 keV 3.05 cm 11 cm World eIoni - 10 12 um -21.1 cm 2.48 cm 1.13 GeV 2.29 keV 5.3 mm 11.5 cm World eIoni - 11 620 um -25 cm 2.48 cm 1.52 GeV 25.4 keV 3.91 cm 15.4 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 50, Parent ID = 3 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 12 um -21.1 cm 2.48 cm 4.53 keV 0 eV 0 fm 0 fm World initStep - 1 4.45 um -21.1 cm 2.48 cm 409 keV 4.53 keV 338 um 338 um World eIoni - 2 92.5 um -21.2 cm 2.49 cm 14.8 MeV 1.73 keV 1.46 mm 1.8 mm World eIoni - 3 180 um -21.3 cm 2.49 cm 20 MeV 628 eV 520 um 2.32 mm World eIoni - 4 720 um -23.2 cm 2.48 cm 206 MeV 6.76 keV 1.87 cm 2.1 cm World eIoni - 5 833 um -24.3 cm 2.47 cm 319 MeV 8.54 keV 1.13 cm 3.23 cm World eIoni - 6 883 um -25 cm 2.47 cm 390 MeV 5 keV 7.1 mm 3.94 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 53, Parent ID = 50 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 833 um -24.3 cm 2.47 cm 1.75 keV 0 eV 0 fm 0 fm World initStep - 1 833 um -24.3 cm 2.47 cm 107 keV 1.75 keV 84.3 um 84.3 um World eIoni - 2 -545 um -24.8 cm 2.66 cm 47.6 MeV 7.2 keV 8.14 mm 8.23 mm World msc - 3 -1.23 mm -25 cm 2.91 cm 71.1 MeV 786 eV 3.54 mm 1.18 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 52, Parent ID = 50 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 720 um -23.2 cm 2.48 cm 6.56 keV 0 eV 0 fm 0 fm World initStep - 1 720 um -23.2 cm 2.48 cm 708 keV 1.43 keV 228 um 228 um World eIoni - 2 3.68 mm -24.8 cm 2.48 cm 160 MeV 4.27 keV 1.7 cm 1.73 cm World eIoni - 3 3.73 mm -25 cm 2.51 cm 184 MeV 623 eV 2.45 mm 1.97 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 54, Parent ID = 52 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 3.68 mm -24.8 cm 2.48 cm 5.22 keV 0 eV 0 fm 0 fm World initStep - 1 3.69 mm -24.8 cm 2.48 cm 436 keV 855 eV 89.9 um 89.9 um World eIoni - 2 3.93 mm -25 cm 2.5 cm 24.3 MeV 359 eV 2.5 mm 2.59 mm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 51, Parent ID = 50 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 180 um -21.3 cm 2.49 cm 4.37 keV 0 eV 0 fm 0 fm World initStep - 1 184 um -21.3 cm 2.5 cm 386 keV 4.37 keV 319 um 319 um World eIoni - 2 222 um -21.3 cm 2.5 cm 5.04 MeV 0 eV 467 um 787 um World eIoni - 3 -733 um -24.9 cm 2.49 cm 358 MeV 18.2 keV 3.56 cm 3.63 cm World eIoni - 4 -823 um -25 cm 2.49 cm 370 MeV 689 eV 1.21 mm 3.76 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 55, Parent ID = 51 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -733 um -24.9 cm 2.49 cm 3.21 keV 0 eV 0 fm 0 fm World initStep - 1 -733 um -24.9 cm 2.49 cm 218 keV 261 eV 46.4 um 46.4 um World eIoni - 2 -648 um -24.9 cm 2.47 cm 5.05 MeV 208 eV 533 um 580 um World eIoni - 3 -666 um -25 cm 2.47 cm 12.1 MeV 635 eV 708 um 1.29 mm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 49, Parent ID = 3 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -85.8 um -20.6 cm 2.48 cm 1.74 keV 0 eV 0 fm 0 fm World initStep - 1 -83.1 um -20.6 cm 2.48 cm 106 keV 1.74 keV 83.6 um 83.6 um World eIoni - 2 1.12 cm -21.2 cm 2.17 cm 60.8 MeV 11.3 keV 1.72 cm 1.72 cm World eIoni - 3 1.49 cm -23.5 cm 2.12 cm 290 MeV 16.2 keV 2.32 cm 4.05 cm World msc - 4 1.58 cm -25 cm 2.09 cm 439 MeV 9.58 keV 1.49 cm 5.54 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 48, Parent ID = 3 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -747 um -17.5 cm 2.47 cm 3.93 keV 0 eV 0 fm 0 fm World initStep - 1 -751 um -17.5 cm 2.47 cm 150 keV 237 eV 20.2 um 20.2 um World eIoni - 2 908 um -17.9 cm 2.39 cm 37.6 MeV 1.52 keV 4.49 mm 4.51 mm World eIoni - 3 2.57 mm -21.7 cm 2.52 cm 415 MeV 14.9 keV 3.79 cm 4.25 cm World msc - 4 2.64 mm -22.4 cm 2.53 cm 485 MeV 4.54 keV 6.99 mm 4.94 cm World eIoni - 5 2.79 mm -24.2 cm 2.55 cm 664 MeV 16.2 keV 1.79 cm 6.73 cm World eIoni - 6 2.85 mm -25 cm 2.55 cm 748 MeV 5.5 keV 8.38 mm 7.57 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 57, Parent ID = 48 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 2.79 mm -24.2 cm 2.55 cm 1.88 keV 0 eV 0 fm 0 fm World initStep - 1 2.79 mm -24.2 cm 2.55 cm 117 keV 1.88 keV 92.9 um 92.9 um World eIoni - 2 1.35 mm -24.7 cm 2.77 cm 56.7 MeV 11.7 keV 1 cm 1.01 cm World msc - 3 480 um -25 cm 2.94 cm 84 MeV 1.07 keV 3.31 mm 1.34 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 56, Parent ID = 48 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 2.64 mm -22.4 cm 2.53 cm 1.26 keV 0 eV 0 fm 0 fm World initStep - 1 2.64 mm -22.4 cm 2.53 cm 71 keV 1.26 keV 53.9 um 53.9 um World eIoni - 2 2.63 mm -22.7 cm 2.53 cm 31.7 MeV 12.8 keV 9.35 mm 9.41 mm World eIoni - 3 -2.49 mm -25 cm 3.08 cm 263 MeV 16.1 keV 2.5 cm 3.44 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 47, Parent ID = 3 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -761 um -17.5 cm 2.47 cm 4.25 keV 0 eV 0 fm 0 fm World initStep - 1 -768 um -17.5 cm 2.47 cm 371 keV 4.25 keV 305 um 305 um World eIoni - 2 -778 um -17.5 cm 2.47 cm 1.87 MeV 54.2 eV 151 um 456 um World eIoni - 3 712 um -19.1 cm 2.36 cm 159 MeV 5.44 keV 1.59 cm 1.64 cm World eIoni - 4 1.38 mm -19.5 cm 2.35 cm 206 MeV 1.42 keV 4.72 mm 2.11 cm World eIoni - 5 4.36 mm -24.1 cm 2.3 cm 660 MeV 24.9 keV 4.56 cm 6.67 cm World eIoni - 6 4.47 mm -24.4 cm 2.3 cm 691 MeV 3.01 keV 3.04 mm 6.97 cm World eIoni - 7 4.69 mm -25 cm 2.3 cm 753 MeV 4.37 keV 6.23 mm 7.6 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 62, Parent ID = 47 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 4.47 mm -24.4 cm 2.3 cm 5.07 keV 0 eV 0 fm 0 fm World initStep - 1 4.46 mm -24.4 cm 2.3 cm 491 keV 379 eV 226 um 226 um World eIoni - 2 4.35 mm -25 cm 2.34 cm 62.3 MeV 2.69 keV 6.56 mm 6.79 mm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 61, Parent ID = 47 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 4.36 mm -24.1 cm 2.3 cm 1.7 keV 0 eV 0 fm 0 fm World initStep - 1 4.36 mm -24.1 cm 2.3 cm 104 keV 1.7 keV 80.9 um 80.9 um World eIoni - 2 148 um -24.5 cm 2.28 cm 43.5 MeV 5.34 keV 7.2 mm 7.28 mm World msc - 3 -4.27 mm -25 cm 2.13 cm 92.7 MeV 797 eV 6.96 mm 1.42 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 60, Parent ID = 47 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 1.38 mm -19.5 cm 2.35 cm 1.5 keV 0 eV 0 fm 0 fm World initStep - 1 1.38 mm -19.5 cm 2.35 cm 88.6 keV 1.5 keV 68.1 um 68.1 um World eIoni - 2 1.39 mm -20 cm 2.35 cm 45.3 MeV 10.4 keV 1.3 cm 1.31 cm World eIoni - 3 -4.16 mm -25 cm 1.15 cm 547 MeV 26 keV 5.35 cm 6.66 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 59, Parent ID = 47 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 712 um -19.1 cm 2.36 cm 1.2 keV 0 eV 0 fm 0 fm World initStep - 1 714 um -19.1 cm 2.36 cm 65.9 keV 1.2 keV 50.4 um 50.4 um World eIoni - 2 728 um -19.3 cm 2.36 cm 28.2 MeV 12.1 keV 8.4 mm 8.45 mm World eIoni - 3 -5.02 mm -25 cm 2.74 cm 594 MeV 45.3 keV 5.75 cm 6.6 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 58, Parent ID = 47 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -778 um -17.5 cm 2.47 cm 4.94 keV 0 eV 0 fm 0 fm World initStep - 1 -785 um -17.5 cm 2.47 cm 467 keV 4.94 keV 388 um 388 um World eIoni - 2 -814 um -17.5 cm 2.48 cm 6.59 MeV 17.7 eV 615 um 1 mm World eIoni - 3 -827 um -17.7 cm 2.48 cm 24.4 MeV 819 eV 1.79 mm 2.79 mm World eIoni - 4 -1.39 mm -23.6 cm 2.62 cm 613 MeV 27.9 keV 5.89 cm 6.17 cm World eIoni - 5 -1.45 mm -24.1 cm 2.63 cm 666 MeV 2.79 keV 5.29 mm 6.7 cm World eIoni - 6 -1.54 mm -25 cm 2.65 cm 752 MeV 6.51 keV 8.56 mm 7.56 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 65, Parent ID = 58 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.45 mm -24.1 cm 2.63 cm 1.5 keV 0 eV 0 fm 0 fm World initStep - 1 -1.44 mm -24.1 cm 2.63 cm 89.3 keV 1.5 keV 68.4 um 68.4 um World eIoni - 2 -2.83 mm -24.5 cm 2.9 cm 33.1 MeV 3.64 keV 5.32 mm 5.39 mm World msc - 3 -1.26 mm -24.7 cm 3.24 cm 58.6 MeV 3 keV 4.69 mm 1.01 cm World msc - 4 -648 um -25 cm 3.37 cm 85.5 MeV 2.03 keV 3.05 mm 1.31 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 64, Parent ID = 58 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.39 mm -23.6 cm 2.62 cm 2.94 keV 0 eV 0 fm 0 fm World initStep - 1 -1.39 mm -23.6 cm 2.62 cm 220 keV 2.94 keV 174 um 174 um World eIoni - 2 -1.39 mm -23.6 cm 2.62 cm 833 keV 0 eV 61.8 um 236 um World eIoni - 3 -1.4 mm -25 cm 2.62 cm 138 MeV 7.04 keV 1.43 cm 1.46 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 66, Parent ID = 64 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.39 mm -23.6 cm 2.62 cm 3.78 keV 0 eV 0 fm 0 fm World initStep - 1 -1.4 mm -23.6 cm 2.62 cm 312 keV 3.78 keV 255 um 255 um World eIoni - 2 -1.65 mm -23.9 cm 2.58 cm 25.6 MeV 1.36 keV 2.61 mm 2.87 mm World eIoni - 3 -1.87 mm -24.3 cm 2.55 cm 69.6 MeV 2.09 keV 4.43 mm 7.29 mm World eIoni - 4 -2.04 mm -25 cm 2.53 cm 138 MeV 3.56 keV 6.8 mm 1.41 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 67, Parent ID = 66 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.87 mm -24.3 cm 2.55 cm 8.42 keV 0 eV 0 fm 0 fm World initStep - 1 -1.87 mm -24.3 cm 2.55 cm 1.05 MeV 8.42 keV 933 um 933 um World eIoni - 2 -1.88 mm -24.4 cm 2.55 cm 7.34 MeV 23.6 eV 631 um 1.56 mm World eIoni - 3 -3.37 mm -25 cm 2.67 cm 67.8 MeV 1.35 keV 6.53 mm 8.09 mm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 63, Parent ID = 58 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -827 um -17.7 cm 2.48 cm 11.7 keV 0 eV 0 fm 0 fm World initStep - 1 -838 um -17.7 cm 2.49 cm 1.79 MeV 9.95 keV 1.44 mm 1.44 mm World eIoni - 2 -1.22 mm -18.1 cm 2.47 cm 35.6 MeV 1.77 keV 3.79 mm 5.23 mm World eIoni - 3 -1.27 mm -20.4 cm 2.41 cm 266 MeV 13.9 keV 2.33 cm 2.85 cm World eBrem - 4 -1.13 mm -23.8 cm 2.37 cm 605 MeV 17.9 keV 3.39 cm 6.24 cm World eIoni - 5 -1.12 mm -24 cm 2.37 cm 628 MeV 3.27 keV 2.32 mm 6.47 cm World eIoni - 6 -1.11 mm -24.5 cm 2.36 cm 678 MeV 3.87 keV 4.98 mm 6.97 cm World eIoni - 7 -1.1 mm -24.7 cm 2.36 cm 696 MeV 802 eV 1.78 mm 7.15 cm World eIoni - 8 -1.09 mm -24.9 cm 2.36 cm 714 MeV 1.58 keV 1.83 mm 7.33 cm World eIoni - 9 -1.09 mm -25 cm 2.36 cm 725 MeV 602 eV 1.08 mm 7.44 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 73, Parent ID = 63 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.09 mm -24.9 cm 2.36 cm 1.69 keV 0 eV 0 fm 0 fm World initStep - 1 -1.09 mm -24.9 cm 2.36 cm 103 keV 1.69 keV 80.2 um 80.2 um World eIoni - 2 -1.08 mm -25 cm 2.36 cm 10.8 MeV 171 eV 1.17 mm 1.25 mm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 72, Parent ID = 63 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.1 mm -24.7 cm 2.36 cm 3.25 keV 0 eV 0 fm 0 fm World initStep - 1 -1.09 mm -24.7 cm 2.36 cm 253 keV 3.25 keV 202 um 202 um World eIoni - 2 -1.13 mm -24.9 cm 2.32 cm 22 MeV 515 eV 2.27 mm 2.47 mm World eIoni - 3 -1.13 mm -25 cm 2.31 cm 26.2 MeV 33.8 eV 421 um 2.89 mm World eIoni - 4 -1.13 mm -25 cm 2.3 cm 29.1 MeV 694 eV 301 um 3.19 mm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 74, Parent ID = 72 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.13 mm -25 cm 2.31 cm 1.22 keV 0 eV 0 fm 0 fm World initStep - 1 -1.12 mm -25 cm 2.31 cm 68.2 keV 1.22 keV 51.7 um 51.7 um World eIoni - 2 -1.12 mm -25 cm 2.31 cm 2.97 MeV 124 eV 303 um 355 um OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 71, Parent ID = 63 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.11 mm -24.5 cm 2.36 cm 1.4 keV 0 eV 0 fm 0 fm World initStep - 1 -1.11 mm -24.5 cm 2.36 cm 81.8 keV 1.4 keV 62.2 um 62.2 um World eIoni - 2 -1.48 mm -24.8 cm 2.17 cm 25.1 MeV 2.1 keV 3.7 mm 3.76 mm World msc - 3 -4.53 mm -25 cm 2.11 cm 43.5 MeV 1.43 keV 3.75 mm 7.51 mm World msc - 4 -4.74 mm -25 cm 2.11 cm 46.7 MeV 76.6 eV 390 um 7.9 mm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 70, Parent ID = 63 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.12 mm -24 cm 2.37 cm 3.73 keV 0 eV 0 fm 0 fm World initStep - 1 -1.13 mm -24 cm 2.37 cm 308 keV 1.14 keV 189 um 189 um World eIoni - 2 -1.08 mm -25 cm 2.4 cm 96.8 MeV 6.8 keV 1.12 cm 1.14 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 75, Parent ID = 70 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.13 mm -24 cm 2.37 cm 1.29 keV 0 eV 0 fm 0 fm World initStep - 1 -1.13 mm -24 cm 2.37 cm 72.7 keV 1.29 keV 55.5 um 55.5 um World eIoni - 2 -4.28 mm -24.3 cm 2.47 cm 27.8 MeV 6.18 keV 5.29 mm 5.35 mm World msc - 3 -5.33 mm -24.7 cm 2.63 cm 64.3 MeV 2.19 keV 4.17 mm 9.52 mm World msc - 4 -5.75 mm -25 cm 2.69 cm 92.7 MeV 241 eV 2.94 mm 1.25 cm World msc - 5 -5.78 mm -25 cm 2.7 cm 95.8 MeV 220 eV 325 um 1.28 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 69, Parent ID = 63 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.13 mm -23.8 cm 2.37 cm 5.62 keV 0 eV 0 fm 0 fm World initStep - 1 -1.14 mm -23.8 cm 2.37 cm 569 keV 5.62 keV 477 um 477 um World eIoni - 2 -1.18 mm -23.9 cm 2.37 cm 6.82 MeV 15 eV 627 um 1.1 mm World eIoni - 3 -1.34 mm -25 cm 2.37 cm 120 MeV 3.02 keV 1.13 cm 1.24 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = gamma, Track ID = 68, Parent ID = 63 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.27 mm -20.4 cm 2.41 cm 2.66 MeV 0 eV 0 fm 0 fm World initStep - 1 -1.25 mm -25 cm 2.31 cm 2.66 MeV 0 eV 4.59 cm 4.59 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 46, Parent ID = 3 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -863 um -17.1 cm 2.47 cm 5.62 keV 0 eV 0 fm 0 fm World initStep - 1 -873 um -17.1 cm 2.47 cm 570 keV 5.62 keV 478 um 478 um World eIoni - 2 -1.63 mm -17.6 cm 2.4 cm 55.8 MeV 1.59 keV 5.69 mm 6.17 mm World eIoni - 3 -2.43 mm -18.4 cm 2.39 cm 128 MeV 4.23 keV 7.25 mm 1.34 cm World eIoni - 4 -3.32 mm -20.4 cm 2.38 cm 337 MeV 12.3 keV 2.09 cm 3.43 cm World eIoni - 5 -3.71 mm -22.2 cm 2.38 cm 511 MeV 10.8 keV 1.74 cm 5.17 cm World eIoni - 6 -3.99 mm -24 cm 2.38 cm 690 MeV 8.22 keV 1.79 cm 6.96 cm World eIoni - 7 -4.02 mm -24.2 cm 2.38 cm 711 MeV 1.48 keV 2.16 mm 7.18 cm World eIoni - 8 -4.13 mm -25 cm 2.38 cm 792 MeV 5.43 keV 8.08 mm 7.99 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 80, Parent ID = 46 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.02 mm -24.2 cm 2.38 cm 1.58 keV 0 eV 0 fm 0 fm World initStep - 1 -4.02 mm -24.2 cm 2.38 cm 94.6 keV 1.58 keV 72.9 um 72.9 um World eIoni - 2 -1.62 mm -24.5 cm 2.52 cm 33.4 MeV 3.5 keV 5.06 mm 5.13 mm World msc - 3 295 um -25 cm 2.79 cm 80.4 MeV 3.68 keV 5.82 mm 1.1 cm World msc - 4 314 um -25 cm 2.79 cm 81.3 MeV 0 eV 93 um 1.1 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 79, Parent ID = 46 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -3.99 mm -24 cm 2.38 cm 2.58 keV 0 eV 0 fm 0 fm World initStep - 1 -3.99 mm -24 cm 2.38 cm 183 keV 2.58 keV 144 um 144 um World eIoni - 2 -4 mm -24 cm 2.38 cm 2.35 MeV 27.6 eV 219 um 363 um World eIoni - 3 -4.4 mm -24.7 cm 2.39 cm 72.6 MeV 4.16 keV 7.05 mm 7.42 mm World eIoni - 4 -4.45 mm -25 cm 2.38 cm 102 MeV 2.73 keV 2.98 mm 1.04 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 81, Parent ID = 79 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.4 mm -24.7 cm 2.39 cm 2.47 keV 0 eV 0 fm 0 fm World initStep - 1 -4.41 mm -24.7 cm 2.39 cm 170 keV 2.47 keV 135 um 135 um World eIoni - 2 -4.43 mm -25 cm 2.39 cm 29.8 MeV 4.1 keV 3.3 mm 3.44 mm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 78, Parent ID = 46 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -3.71 mm -22.2 cm 2.38 cm 2.88 keV 0 eV 0 fm 0 fm World initStep - 1 -3.71 mm -22.2 cm 2.38 cm 214 keV 2.88 keV 168 um 168 um World eIoni - 2 -4.04 mm -22.4 cm 2.36 cm 17.9 MeV 202 eV 1.85 mm 2.02 mm World eIoni - 3 -4.71 mm -22.7 cm 2.32 cm 56 MeV 3.37 keV 3.9 mm 5.92 mm World eIoni - 4 -5.55 mm -25 cm 2.26 cm 281 MeV 11.1 keV 2.25 cm 2.84 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 82, Parent ID = 78 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.71 mm -22.7 cm 2.32 cm 31.4 keV 0 eV 0 fm 0 fm World initStep - 1 -4.75 mm -22.8 cm 2.32 cm 8.76 MeV 9.94 keV 3.37 mm 3.37 mm World eIoni - 2 -6.79 mm -23.2 cm 2.2 cm 43.5 MeV 2.88 keV 4.98 mm 8.35 mm World eIoni - 3 -7.82 mm -25 cm 2.14 cm 225 MeV 12.2 keV 1.82 cm 2.65 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 77, Parent ID = 46 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -3.32 mm -20.4 cm 2.38 cm 1.31 keV 0 eV 0 fm 0 fm World initStep - 1 -3.32 mm -20.4 cm 2.38 cm 74.7 keV 1.31 keV 56.8 um 56.8 um World eIoni - 2 -3.34 mm -20.8 cm 2.39 cm 34.4 MeV 14.4 keV 1.01 cm 1.01 cm World eIoni - 3 -1.4 cm -25 cm 2.72 cm 451 MeV 26.8 keV 4.76 cm 5.77 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 76, Parent ID = 46 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -2.43 mm -18.4 cm 2.39 cm 1.32 keV 0 eV 0 fm 0 fm World initStep - 1 -2.43 mm -18.4 cm 2.39 cm 75.9 keV 1.32 keV 57.6 um 57.6 um World eIoni - 2 -2.43 mm -18.7 cm 2.39 cm 35.3 MeV 7.45 keV 1.03 cm 1.04 cm World eIoni - 3 -1.22 cm -25 cm 2.85 cm 661 MeV 34.3 keV 6.48 cm 7.51 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 45, Parent ID = 3 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.42 mm -15.3 cm 2.46 cm 82.2 keV 0 eV 0 fm 0 fm World initStep - 1 -1.57 mm -15.6 cm 2.46 cm 33 MeV 10.2 keV 5.98 mm 5.98 mm World eIoni - 2 4.41 mm -16 cm 2.62 cm 72.4 MeV 4.81 keV 9.73 mm 1.57 cm World eIoni - 3 6.18 mm -17.1 cm 2.67 cm 186 MeV 6.81 keV 1.15 cm 2.73 cm World eIoni - 4 8.24 mm -21 cm 2.73 cm 578 MeV 28.3 keV 3.92 cm 6.65 cm World eIoni - 5 8.46 mm -21.8 cm 2.73 cm 659 MeV 7.24 keV 8.1 mm 7.46 cm World eIoni - 6 8.51 mm -22 cm 2.73 cm 677 MeV 1.09 keV 1.76 mm 7.64 cm World eIoni - 7 8.53 mm -22.1 cm 2.73 cm 684 MeV 88 eV 774 um 7.71 cm World eIoni - 8 8.8 mm -23.3 cm 2.74 cm 806 MeV 6.03 keV 1.21 cm 8.93 cm World eIoni - 9 9.11 mm -25 cm 2.75 cm 973 MeV 8.25 keV 1.67 cm 10.6 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 89, Parent ID = 45 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 8.8 mm -23.3 cm 2.74 cm 1.46 keV 0 eV 0 fm 0 fm World initStep - 1 8.8 mm -23.3 cm 2.74 cm 86.2 keV 1.46 keV 65.8 um 65.8 um World eIoni - 2 3.94 mm -23.7 cm 2.39 cm 40.4 MeV 6.12 keV 9.18 mm 9.25 mm World msc - 3 1.34 mm -24.3 cm 2.02 cm 102 MeV 3.02 keV 7.73 mm 1.7 cm World msc - 4 209 um -25 cm 1.86 cm 169 MeV 5.32 keV 7.03 mm 2.4 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 88, Parent ID = 45 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 8.53 mm -22.1 cm 2.73 cm 1.33 keV 0 eV 0 fm 0 fm World initStep - 1 8.53 mm -22.1 cm 2.73 cm 76.7 keV 1.33 keV 58.2 um 58.2 um World eIoni - 2 8.51 mm -22.5 cm 2.73 cm 35.9 MeV 10.2 keV 1.05 cm 1.05 cm World eIoni - 3 1.76 cm -24.9 cm 3.23 cm 284 MeV 18.7 keV 2.86 cm 3.91 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 87, Parent ID = 45 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 8.51 mm -22 cm 2.73 cm 5.16 keV 0 eV 0 fm 0 fm World initStep - 1 8.51 mm -22 cm 2.73 cm 500 keV 5.16 keV 416 um 416 um World eIoni - 2 8.53 mm -22.2 cm 2.72 cm 15.7 MeV 771 eV 1.54 mm 1.96 mm World eIoni - 3 8.95 mm -25 cm 2.7 cm 296 MeV 12.6 keV 2.81 cm 3.01 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 86, Parent ID = 45 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 8.46 mm -21.8 cm 2.73 cm 1.28 keV 0 eV 0 fm 0 fm World initStep - 1 8.46 mm -21.8 cm 2.73 cm 72.5 keV 1.28 keV 55 um 55 um World eIoni - 2 8.46 mm -22.2 cm 2.73 cm 32.8 MeV 9.08 keV 9.63 mm 9.69 mm World eIoni - 3 1.6 cm -24.9 cm 2.6 cm 310 MeV 19.9 keV 3.41 cm 4.38 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 85, Parent ID = 45 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 8.24 mm -21 cm 2.73 cm 1.14 keV 0 eV 0 fm 0 fm World initStep - 1 8.24 mm -21 cm 2.72 cm 62.2 keV 1.14 keV 47.4 um 47.4 um World eIoni - 2 8.25 mm -21.3 cm 2.72 cm 25.7 MeV 5.89 keV 7.74 mm 7.79 mm World eIoni - 3 8.41 mm -25 cm 3.14 cm 395 MeV 19.5 keV 3.74 cm 4.52 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 84, Parent ID = 45 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 6.18 mm -17.1 cm 2.67 cm 3.43 keV 0 eV 0 fm 0 fm World initStep - 1 6.18 mm -17.1 cm 2.67 cm 273 keV 3.43 keV 220 um 220 um World eIoni - 2 6.2 mm -17.2 cm 2.67 cm 4.12 MeV 126 eV 387 um 607 um World eIoni - 3 1.26 cm -23.9 cm 2.02 cm 676 MeV 18.8 keV 6.83 cm 6.89 cm World eBrem - 4 2.62 cm -23.1 cm 2.13 cm 599 MeV 8.58 keV 1.57 cm 8.46 cm World eIoni - 5 4.5 cm -22.6 cm 2.28 cm 553 MeV 14.9 keV 1.95 cm 10.4 cm World eIoni - 6 6.08 cm -22.8 cm 2.41 cm 565 MeV 5.15 keV 1.59 cm 12 cm World eIoni - 7 7.86 cm -23.5 cm 2.55 cm 634 MeV 11.8 keV 1.93 cm 13.9 cm World eIoni - 8 8.15 cm -23.6 cm 2.57 cm 652 MeV 3.12 keV 3.39 mm 14.3 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 93, Parent ID = 84 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 7.86 cm -23.5 cm 2.55 cm 115 keV 0 eV 0 fm 0 fm World initStep - 1 7.86 cm -23.7 cm 2.54 cm 28.8 MeV 2.95 keV 3.35 mm 3.35 mm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 92, Parent ID = 84 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 6.08 cm -22.8 cm 2.41 cm 3.14 keV 0 eV 0 fm 0 fm World initStep - 1 6.08 cm -22.8 cm 2.41 cm 252 keV 3.14 keV 192 um 192 um World eIoni - 2 6.08 cm -22.8 cm 2.41 cm 7.08 MeV 0 eV 690 um 883 um World eIoni - 3 6.09 cm -24.2 cm 2.43 cm 148 MeV 6.18 keV 1.41 cm 1.5 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 91, Parent ID = 84 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 4.5 cm -22.6 cm 2.28 cm 2.03 keV 0 eV 0 fm 0 fm World initStep - 1 4.5 cm -22.6 cm 2.28 cm 133 keV 2.03 keV 103 um 103 um World eIoni - 2 5.45 cm -23.4 cm 1.75 cm 79.9 MeV 10.1 keV 1.7 cm 1.71 cm World msc - 3 6 cm -24.3 cm 8.52 mm 162 MeV 5.84 keV 1.39 cm 3.1 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 90, Parent ID = 84 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 2.62 cm -23.1 cm 2.13 cm 1.45 keV 0 eV 0 fm 0 fm World initStep - 1 2.62 cm -23.1 cm 2.13 cm 85.1 keV 1.45 keV 65.4 um 65.4 um World eIoni - 2 3.37 cm -23.5 cm 2.37 cm 41.9 MeV 12.2 keV 1.15 cm 1.15 cm World msc - 3 3.8 cm -24.1 cm 2.57 cm 103 MeV 2.68 keV 7.91 mm 1.95 cm World msc - 4 3.97 cm -24.7 cm 2.64 cm 158 MeV 3.81 keV 5.79 mm 2.52 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 83, Parent ID = 45 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 4.41 mm -16 cm 2.62 cm 4.69 keV 0 eV 0 fm 0 fm World initStep - 1 4.42 mm -16 cm 2.62 cm 428 keV 4.69 keV 356 um 356 um World eIoni - 2 4.58 mm -16.1 cm 2.61 cm 15.7 MeV 251 eV 1.55 mm 1.9 mm World eIoni - 3 6.52 mm -20.6 cm 2.48 cm 458 MeV 22.9 keV 4.43 cm 4.62 cm World eIoni - 4 7.95 mm -25 cm 2.39 cm 901 MeV 18.8 keV 4.43 cm 9.06 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 94, Parent ID = 83 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 6.52 mm -20.6 cm 2.48 cm 10.3 keV 0 eV 0 fm 0 fm World initStep - 1 6.53 mm -20.6 cm 2.48 cm 1.45 MeV 6.88 keV 1.26 mm 1.26 mm World eIoni - 2 6.37 mm -20.9 cm 2.46 cm 29.9 MeV 789 eV 2.91 mm 4.16 mm World eIoni - 3 5.95 mm -25 cm 2.53 cm 444 MeV 22.3 keV 4.14 cm 4.56 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 44, Parent ID = 3 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.63 mm -14.7 cm 2.46 cm 1.37 keV 0 eV 0 fm 0 fm World initStep - 1 -1.63 mm -14.7 cm 2.46 cm 79.2 keV 1.37 keV 60.3 um 60.3 um World eIoni - 2 -1.61 mm -15.1 cm 2.46 cm 37.8 MeV 9.45 keV 1.1 cm 1.1 cm World eIoni - 3 1.34 cm -25 cm 2.44 cm 1.03 GeV 43.9 keV 10.5 cm 11.6 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 43, Parent ID = 3 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.63 mm -14.7 cm 2.46 cm 33.4 keV 0 eV 0 fm 0 fm World initStep - 1 -1.68 mm -14.8 cm 2.47 cm 8.86 MeV 4.64 keV 2.09 mm 2.09 mm World eIoni - 2 -197 um -15.8 cm 2.21 cm 113 MeV 6.58 keV 1.14 cm 1.35 cm World eIoni - 3 -67.1 um -18.4 cm 2.12 cm 375 MeV 14.9 keV 2.62 cm 3.97 cm World eIoni - 4 -9.91 um -19.8 cm 2.1 cm 509 MeV 7.29 keV 1.35 cm 5.32 cm World eIoni - 5 10.1 um -20.4 cm 2.09 cm 566 MeV 5.35 keV 5.63 mm 5.88 cm World eIoni - 6 158 um -25 cm 2.04 cm 1.03 GeV 28.1 keV 4.6 cm 10.5 cm World eIoni - 7 160 um -25 cm 2.04 cm 1.03 GeV 63.8 eV 427 um 10.5 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 99, Parent ID = 43 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 158 um -25 cm 2.04 cm 3.92 keV 0 eV 0 fm 0 fm World initStep - 1 152 um -25 cm 2.05 cm 331 keV 1.82 keV 194 um 194 um World eIoni - 2 101 um -25 cm 2.05 cm 4.28 MeV 97.2 eV 402 um 595 um OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 98, Parent ID = 43 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 10.1 um -20.4 cm 2.09 cm 3.22 keV 0 eV 0 fm 0 fm World initStep - 1 4.73 um -20.4 cm 2.09 cm 250 keV 3.22 keV 199 um 199 um World eIoni - 2 227 um -20.5 cm 2.1 cm 15.4 MeV 492 eV 1.56 mm 1.76 mm World eIoni - 3 265 um -21.6 cm 2.09 cm 121 MeV 4.65 keV 1.06 cm 1.23 cm World eIoni - 4 157 um -25 cm 2.07 cm 464 MeV 18.1 keV 3.43 cm 4.66 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 100, Parent ID = 98 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 265 um -21.6 cm 2.09 cm 2.65 keV 0 eV 0 fm 0 fm World initStep - 1 266 um -21.6 cm 2.09 cm 190 keV 2.65 keV 150 um 150 um World eIoni - 2 1.05 cm -22.7 cm 2.16 cm 111 MeV 6.57 keV 1.79 cm 1.81 cm World eIoni - 3 1.18 cm -23.3 cm 2.14 cm 170 MeV 5.14 keV 6 mm 2.41 cm World eIoni - 4 1.38 cm -25 cm 2.11 cm 338 MeV 6.6 keV 1.69 cm 4.1 cm World eIoni - 5 1.38 cm -25 cm 2.11 cm 339 MeV 611 eV 110 um 4.11 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 103, Parent ID = 100 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 1.38 cm -25 cm 2.11 cm 4.86 keV 0 eV 0 fm 0 fm World initStep - 1 1.37 cm -25 cm 2.11 cm 373 keV 337 eV 72 um 72 um World msc - 2 1.37 cm -25 cm 2.11 cm 679 keV 18.4 eV 46 um 118 um World msc - 3 1.37 cm -25 cm 2.11 cm 891 keV 9.53 eV 25.1 um 143 um World msc - 4 1.37 cm -25 cm 2.11 cm 1.1 MeV 8.74 eV 23.6 um 167 um OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 102, Parent ID = 100 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 1.18 cm -23.3 cm 2.14 cm 11 keV 0 eV 0 fm 0 fm World initStep - 1 1.17 cm -23.3 cm 2.14 cm 1.61 MeV 11 keV 1.35 mm 1.35 mm World eIoni - 2 1.19 cm -23.4 cm 2.18 cm 9.87 MeV 88.1 eV 934 um 2.28 mm World eIoni - 3 1.2 cm -25 cm 2.24 cm 170 MeV 7.28 keV 1.61 cm 1.83 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 101, Parent ID = 100 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 1.05 cm -22.7 cm 2.16 cm 1.14 keV 0 eV 0 fm 0 fm World initStep - 1 1.05 cm -22.7 cm 2.16 cm 61.2 keV 1.14 keV 47.1 um 47.1 um World eIoni - 2 1.05 cm -22.9 cm 2.16 cm 25.1 MeV 9.62 keV 7.57 mm 7.62 mm World eIoni - 3 1.26 cm -25 cm 1.39 cm 228 MeV 7.56 keV 2.38 cm 3.14 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 97, Parent ID = 43 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -9.91 um -19.8 cm 2.1 cm 2.74 keV 0 eV 0 fm 0 fm World initStep - 1 -14.2 um -19.8 cm 2.1 cm 199 keV 2.74 keV 157 um 157 um World eIoni - 2 -962 um -20.1 cm 2.17 cm 35 MeV 2.8 keV 3.85 mm 4 mm World eIoni - 3 -5.6 mm -21.8 cm 2.2 cm 198 MeV 14.6 keV 1.72 cm 2.12 cm World eIoni - 4 -8.01 mm -25 cm 2.22 cm 519 MeV 16.1 keV 3.22 cm 5.34 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 104, Parent ID = 97 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -5.6 mm -21.8 cm 2.2 cm 3.32 keV 0 eV 0 fm 0 fm World initStep - 1 -5.6 mm -21.8 cm 2.2 cm 261 keV 3.32 keV 208 um 208 um World eIoni - 2 -4.88 mm -22.1 cm 2.17 cm 30.7 MeV 3.16 keV 3.21 mm 3.42 mm World eIoni - 3 -2.98 mm -24.3 cm 2.05 cm 254 MeV 8.78 keV 2.25 cm 2.59 cm World eIoni - 4 -2.93 mm -24.6 cm 2.04 cm 280 MeV 627 eV 2.66 mm 2.85 cm World eIoni - 5 -2.85 mm -25 cm 2.03 cm 322 MeV 3.24 keV 4.17 mm 3.27 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 106, Parent ID = 104 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -2.93 mm -24.6 cm 2.04 cm 1.32 keV 0 eV 0 fm 0 fm World initStep - 1 -2.93 mm -24.6 cm 2.04 cm 76 keV 1.32 keV 57.6 um 57.6 um World eIoni - 2 -1.96 mm -24.8 cm 1.93 cm 20.3 MeV 2.29 keV 2.85 mm 2.9 mm World msc - 3 -799 um -25 cm 1.77 cm 41.8 MeV 712 eV 2.98 mm 5.88 mm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 105, Parent ID = 104 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -2.98 mm -24.3 cm 2.05 cm 2.05 keV 0 eV 0 fm 0 fm World initStep - 1 -2.98 mm -24.3 cm 2.05 cm 130 keV 2.05 keV 104 um 104 um World eIoni - 2 -2.99 mm -25 cm 2.05 cm 68.3 MeV 7.23 keV 1.22 cm 1.23 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 96, Parent ID = 43 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -67.1 um -18.4 cm 2.12 cm 1.83 keV 0 eV 0 fm 0 fm World initStep - 1 -69.6 um -18.4 cm 2.12 cm 113 keV 1.83 keV 89.6 um 89.6 um World eIoni - 2 -89.2 um -19.1 cm 2.12 cm 67.2 MeV 18.5 keV 1.89 cm 1.9 cm World eIoni - 3 -7.51 mm -25 cm 3.72 cm 654 MeV 38.2 keV 6.33 cm 8.22 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 95, Parent ID = 43 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -197 um -15.8 cm 2.21 cm 309 keV 0 eV 0 fm 0 fm World initStep - 1 -1.17 mm -16.8 cm 1.82 cm 100 MeV 6.29 keV 1.16 cm 1.16 cm World eIoni - 2 -1.63 mm -17.1 cm 1.48 cm 131 MeV 3.37 keV 4.7 mm 1.63 cm World eIoni - 3 -2.45 mm -18.3 cm 8.64 mm 247 MeV 5.04 keV 1.32 cm 2.95 cm World eIoni - 4 -2.79 mm -19.1 cm 6.12 mm 330 MeV 5.62 keV 8.65 mm 3.81 cm World eIoni - 5 -3.16 mm -20.5 cm 3.15 mm 467 MeV 13.3 keV 1.4 cm 5.22 cm World eIoni - 6 -3.88 mm -25 cm -2.54 mm 917 MeV 21.8 keV 4.55 cm 9.76 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 110, Parent ID = 95 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -3.16 mm -20.5 cm 3.15 mm 13 keV 0 eV 0 fm 0 fm World initStep - 1 -3.14 mm -20.5 cm 3.13 mm 2.13 MeV 8.03 keV 1.38 mm 1.38 mm World eIoni - 2 -4.21 mm -21 cm 3.55 mm 52.4 MeV 2.15 keV 5.21 mm 6.59 mm World eIoni - 3 -5.06 mm -25 cm 3.6 mm 448 MeV 26.6 keV 3.96 cm 4.62 cm World eIoni - 4 -5.06 mm -25 cm 3.6 mm 451 MeV 372 eV 274 um 4.65 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 112, Parent ID = 110 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -5.06 mm -25 cm 3.6 mm 1.67 keV 0 eV 0 fm 0 fm World initStep - 1 -5.06 mm -25 cm 3.6 mm 102 keV 1.67 keV 79.2 um 79.2 um World eIoni - 2 -5.05 mm -25 cm 3.61 mm 2.74 MeV 0 eV 270 um 349 um OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 111, Parent ID = 110 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.21 mm -21 cm 3.55 mm 11.5 keV 0 eV 0 fm 0 fm World initStep - 1 -4.21 mm -21 cm 3.57 mm 1.59 MeV 1.28 keV 385 um 385 um World eIoni - 2 -3.79 mm -21.2 cm 3.55 mm 14.7 MeV 702 eV 1.43 mm 1.81 mm World eIoni - 3 -3.37 mm -22.8 cm 3.64 mm 176 MeV 10.5 keV 1.62 cm 1.8 cm World eBrem - 4 -3.36 mm -23.4 cm 3.69 mm 237 MeV 2.49 keV 6.02 mm 2.4 cm World eIoni - 5 -3.34 mm -25 cm 3.76 mm 399 MeV 9.61 keV 1.62 cm 4.02 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 114, Parent ID = 111 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -3.36 mm -23.4 cm 3.69 mm 1.96 keV 0 eV 0 fm 0 fm World initStep - 1 -3.37 mm -23.4 cm 3.69 mm 123 keV 1.96 keV 98.1 um 98.1 um World eIoni - 2 128 um -24 cm 9.75 mm 63.1 MeV 7.47 keV 1.15 cm 1.16 cm World msc - 3 5.81 mm -25 cm 1.29 cm 162 MeV 7.62 keV 1.2 cm 2.36 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 113, Parent ID = 111 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -3.79 mm -21.2 cm 3.55 mm 12.5 keV 0 eV 0 fm 0 fm World initStep - 1 -3.77 mm -21.2 cm 3.53 mm 1.87 MeV 2.57 keV 475 um 475 um World eIoni - 2 -2.28 mm -22.1 cm 3.08 mm 91.8 MeV 4.24 keV 9.17 mm 9.65 mm World eIoni - 3 -550 um -25 cm 2.2 mm 384 MeV 20 keV 2.93 cm 3.9 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 115, Parent ID = 113 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -2.28 mm -22.1 cm 3.08 mm 2.56 keV 0 eV 0 fm 0 fm World initStep - 1 -2.28 mm -22.1 cm 3.08 mm 180 keV 2.56 keV 142 um 142 um World eIoni - 2 -1.98 mm -22.2 cm 3.36 mm 17.4 MeV 164 eV 1.82 mm 1.96 mm World eIoni - 3 -1.4 mm -25 cm 4.68 mm 293 MeV 12.4 keV 2.76 cm 2.96 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 109, Parent ID = 95 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -2.79 mm -19.1 cm 6.12 mm 3.46 keV 0 eV 0 fm 0 fm World initStep - 1 -2.79 mm -19.1 cm 6.12 mm 275 keV 3.46 keV 222 um 222 um World eIoni - 2 -2.79 mm -19.1 cm 6.12 mm 439 keV 7.99 eV 16.5 um 238 um World eIoni - 3 -3.59 mm -19.6 cm 6.53 mm 44.9 MeV 2.48 keV 4.6 mm 4.84 mm World eIoni - 4 -5.53 mm -24.2 cm 8.3 mm 508 MeV 22.5 keV 4.65 cm 5.13 cm World eIoni - 5 -5.66 mm -25 cm 8.35 mm 587 MeV 6.35 keV 7.92 mm 5.92 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 116, Parent ID = 109 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -5.53 mm -24.2 cm 8.3 mm 6.56 keV 0 eV 0 fm 0 fm World initStep - 1 -5.51 mm -24.2 cm 8.3 mm 717 keV 6.56 keV 615 um 615 um World eIoni - 2 -5.34 mm -24.4 cm 8.29 mm 19 MeV 955 eV 1.85 mm 2.46 mm World eIoni - 3 -5.1 mm -24.7 cm 8.4 mm 45.9 MeV 3.04 keV 2.69 mm 5.16 mm World eIoni - 4 -4.96 mm -25 cm 8.45 mm 79.3 MeV 797 eV 3.35 mm 8.5 mm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 117, Parent ID = 116 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -5.1 mm -24.7 cm 8.4 mm 3.02 keV 0 eV 0 fm 0 fm World initStep - 1 -5.1 mm -24.7 cm 8.39 mm 229 keV 3.02 keV 181 um 181 um World eIoni - 2 -5.12 mm -25 cm 8.37 mm 33.4 MeV 2.78 keV 3.58 mm 3.76 mm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 108, Parent ID = 95 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -2.45 mm -18.3 cm 8.64 mm 60.5 keV 0 eV 0 fm 0 fm World initStep - 1 -2.53 mm -18.5 cm 8.54 mm 24.7 MeV 8.65 keV 7.2 mm 7.2 mm World eIoni - 2 -4.46 mm -23 cm 1.01 cm 470 MeV 32.5 keV 4.95 cm 5.67 cm World eIoni - 3 -4.66 mm -24.5 cm 1.03 cm 618 MeV 6.88 keV 1.49 cm 7.16 cm World eIoni - 4 -4.71 mm -25 cm 1.04 cm 671 MeV 4.78 keV 5.26 mm 7.69 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 120, Parent ID = 108 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.66 mm -24.5 cm 1.03 cm 9.85 keV 0 eV 0 fm 0 fm World initStep - 1 -4.65 mm -24.5 cm 1.03 cm 906 keV 171 eV 145 um 145 um World eIoni - 2 -4.19 mm -25 cm 9.97 mm 52.8 MeV 1.4 keV 5.45 mm 5.59 mm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 121, Parent ID = 120 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.65 mm -24.5 cm 1.03 cm 1.86 keV 0 eV 0 fm 0 fm World initStep - 1 -4.65 mm -24.5 cm 1.03 cm 120 keV 1.86 keV 91.4 um 91.4 um World eIoni - 2 -4.64 mm -25 cm 1.03 cm 51.8 MeV 2.49 keV 8.12 mm 8.21 mm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 119, Parent ID = 108 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.46 mm -23 cm 1.01 cm 1.9 keV 0 eV 0 fm 0 fm World initStep - 1 -4.46 mm -23 cm 1.01 cm 118 keV 1.9 keV 93.9 um 93.9 um World eIoni - 2 665 um -23.6 cm 1.54 cm 61.5 MeV 13.4 keV 1.18 cm 1.19 cm World msc - 3 3.59 mm -24.3 cm 1.88 cm 127 MeV 4.6 keV 8.05 mm 1.99 cm World msc - 4 5.15 mm -25 cm 2.06 cm 201 MeV 2.31 keV 7.79 mm 2.77 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 118, Parent ID = 108 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -2.53 mm -18.5 cm 8.54 mm 1.49 keV 0 eV 0 fm 0 fm World initStep - 1 -2.53 mm -18.5 cm 8.54 mm 88.5 keV 1.49 keV 67.8 um 67.8 um World eIoni - 2 -2.53 mm -19 cm 8.55 mm 45.2 MeV 16.1 keV 1.3 cm 1.3 cm World eIoni - 3 -1.39 cm -25 cm 168 um 643 MeV 32.1 keV 6.33 cm 7.63 cm OutOfWorldTransportation - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 107, Parent ID = 95 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -1.63 mm -17.1 cm 1.48 cm 1.17 keV 0 eV 0 fm 0 fm World initStep - 1 -1.63 mm -17.1 cm 1.48 cm 63.2 keV 1.17 keV 48.7 um 48.7 um World eIoni - 2 -1.62 mm -17.4 cm 1.48 cm 26.4 MeV 9.98 keV 7.92 mm 7.97 mm World eIoni - 3 -9.48 mm -25 cm 6.58 mm 785 MeV 47.1 keV 7.95 cm 8.74 cm OutOfWorldTransportation + 0 -1.4 mm -19 cm 2.79 cm 1.21 keV 0 eV 0 fm 0 fm World initStep + 1 -1.4 mm -19 cm 2.79 cm 66.9 keV 1.21 keV 50.9 um 50.9 um World eIoni + 2 -1.41 mm -19.3 cm 2.79 cm 28.8 MeV 14.8 keV 8.58 mm 8.63 mm World eIoni + 3 -5.54 mm -25 cm 1.76 cm 595 MeV 39.1 keV 6.11 cm 6.97 cm OutOfWorldTransportation ********************************************************************************************************* * G4Track Information: Particle = e-, Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng NextVolu Process - 0 -4.51 mm -5.97 cm 1.19 cm 1.96 keV 0 eV 0 fm 0 fm World initStep - 1 -4.5 mm -5.97 cm 1.19 cm 123 keV 1.96 keV 98 um 98 um World eIoni - 2 -4.48 mm -6.73 cm 1.19 cm 76.6 MeV 16.3 keV 2.14 cm 2.15 cm World eIoni - 3 -2.23 cm -24.9 cm -1.37 cm 1.89 GeV 103 keV 19.1 cm 21.3 cm OutOfWorldTransportation + 0 -1.24 mm -13.1 cm 2.3 cm 1.65 keV 0 eV 0 fm 0 fm World initStep + 1 -1.24 mm -13.1 cm 2.3 cm 99.7 keV 1.65 keV 77.9 um 77.9 um World eIoni + 2 -1.23 mm -13.7 cm 2.3 cm 54.8 MeV 6.26 keV 1.55 cm 1.56 cm World eIoni + 3 4.02 mm -25 cm 7.21 mm 1.19 GeV 66.5 keV 11.6 cm 13.2 cm OutOfWorldTransportation Run terminated. Run Summary Number of events processed : 1 - User=0.010000s Real=0.013170s Sys=0.000000s + User=0.000000s Real=0.000508s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== Number of memory pools allocated: 11 of which, static: 0 -Dynamic pools deleted: 11 / Total memory freed: 0.02 MB +Dynamic pools deleted: 11 / Total memory freed: 0.019 MB ============================================================ diff --git a/examples/extended/field/field03/field03.out b/examples/extended/field/field03/field03.out index e48b6349f0c..bf05636048d 100644 --- a/examples/extended/field/field03/field03.out +++ b/examples/extended/field/field03/field03.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -221,6 +221,8 @@ Checking overlaps for volume Absorber:0 (G4Tubs) ... OK! F03FieldSetup::UpdateField> The minimal step is equal to 0.25 mm Stepper Type chosen = 4 G4ClassicalRK4 (default) is called + G4ChordFinder: stepperDriverId: 2 + G4ChordFinder: stepperDriverId: 2 hInelastic FTFP_BERT : threshold between BERT and FTFP is over the interval for pions : 3 to 6 GeV @@ -253,7 +255,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -289,6 +293,8 @@ Some /vis commands (optionally) take a string to specify colour. F03FieldSetup::UpdateField> The minimal step is equal to 10 mm Stepper Type chosen = 4 G4ClassicalRK4 (default) is called + G4ChordFinder: stepperDriverId: 2 + G4ChordFinder: stepperDriverId: 2 ======================================================================= ====== Electromagnetic Physics Parameters ======== ======================================================================= @@ -406,7 +412,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -438,7 +444,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -470,7 +476,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -483,7 +489,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -529,7 +534,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -561,7 +566,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -593,7 +598,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -625,7 +630,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -657,7 +662,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -689,7 +694,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -721,7 +726,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1106,12 +1111,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1156,17 +1170,29 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng 4 0 fm 14.060739 cm 21.6395 m 500 MeV0.30481745 meV 12.503127 cm 38.651942 cm RadSlice Transportation 0 fm 691.81427 um -722.0755 um 5 0 fm 19.745298 cm 21.5885 m 500 MeV0.18636264 meV 7.6442989 cm 46.296241 cm Radiator Transportation 0 fm 792.62153 um -609.71395 um 6 0 fm 81.438088 cm 21.5885 m 500 MeV 1.6174637 meV 66.345788 cm 1.1264203 m World Transportation 0 fm 792.62217 um 609.71312 um - 7 0 fm 87.122639 cm 21.6395 m 500 MeV 0.1863625 meV 7.6442933 cm 1.2028632 m Radiator Transportation 0 fm 691.8151 um 722.07469 um - 8 0 fm 94.574764 cm 21.7395 m 500 MeV0.30481751 meV 12.503129 cm 1.3278945 m RadSlice Transportation 0 fm 494.15406 um 869.37435 um - 9 0 fm 98.908478 cm 21.8395 m 500 MeV0.26621847 meV 10.919858 cm 1.4370931 m Radiator Transportation 0 fm 296.49295 um 955.03504 um - 10 0 fm 1.009356 m 21.9395 m 500 MeV0.24917519 meV 10.22077 cm 1.5393008 m RadSlice Transportation 0 fm 98.83189 um 995.10414 um - 11 0 fm 1.0118329 m 21.9895 m 500 MeV0.12209581 meV 5.0081759 cm 1.5893826 m Radiator Transportation 0 fm 1.3322291 nm 1000 um - 12 0 fm 1.0118319 m 21.9905 m 500 MeV0.0024379313 meV 1.0000007 mm 1.5903826 m Absorber Transportation 0 fm -1.9752789 um 999.99805 um - 13 0 fm 1.0117239 m 22 m 500 MeV0.02316217 meV 9.500754 mm 1.5998833 m OutOfWorld Transportation 0 fm -20.753087 um 999.78463 um + 7 0 fm 87.122647 cm 21.6395 m 500 MeV0.18636264 meV 7.6442989 cm 1.2028633 m Radiator Transportation 0 fm 691.81502 um 722.07477 um + 8 0 fm 91.00273 cm 21.685122 m 500 MeV0.14609435 meV 5.9925578 cm 1.2627889 m RadSlice Transportation 0 fm 601.63793 um 798.76893 um + 9 0 fm 93.778668 cm 21.725986 m 500 MeV0.12048347 meV 4.9420403 cm 1.3122093 m RadSlice Transportation 0 fm 520.86605 um 853.63842 um + 10 0 fm 94.574777 cm 21.7395 m 500 MeV0.038239746 meV 1.5685336 cm 1.3278946 m RadSlice Transportation 0 fm 494.15393 um 869.37443 um + 11 0 fm 96.410409 cm 21.774987 m 500 MeV0.097429604 meV 3.9964074 cm 1.3678587 m Radiator Transportation 0 fm 424.0095 um 905.65774 um + 12 0 fm 97.778077 cm 21.807029 m 500 MeV0.084950232 meV 3.4845234 cm 1.4027039 m Radiator Transportation 0 fm 360.67588 um 932.69122 um + 13 0 fm 98.79751 cm 21.835971 m 500 MeV0.074819398 meV 3.0689727 cm 1.4333936 m Radiator Transportation 0 fm 303.46857 um 952.84145 um + 14 0 fm 98.908428 cm 21.8395 m 500 MeV0.0090188035 meV 3.6993698 mm 1.437093 m Radiator Transportation 0 fm 296.49314 um 955.03498 um + 15 0 fm 99.635021 cm 21.865299 m 500 MeV0.065350332 meV 2.6805667 cm 1.4638987 m RadSlice Transportation 0 fm 245.49879 um 969.3969 um + 16 0 fm 1.0016674 m 21.888593 m 500 MeV0.058255192 meV 2.3895353 cm 1.487794 m RadSlice Transportation 0 fm 199.45565 um 979.90686 um + 17 0 fm 1.0054861 m 21.909616 m 500 MeV0.052096501 meV 2.1369156 cm 1.5091632 m RadSlice Transportation 0 fm 157.90025 um 987.45507 um + 18 0 fm 1.0081517 m 21.928582 m 500 MeV0.046694118 meV 1.9153185 cm 1.5283164 m RadSlice Transportation 0 fm 120.41257 um 992.72394 um + 19 0 fm 1.0093559 m 21.9395 m 500 MeV0.026779122 meV 1.098437 cm 1.5393007 m RadSlice Transportation 0 fm 98.832029 um 995.10413 um + 20 0 fm 1.0106905 m 21.955524 m 500 MeV0.039201339 meV 1.6079766 cm 1.5553805 m Radiator Transportation 0 fm 67.159602 um 997.74225 um + 21 0 fm 1.0114553 m 21.969961 m 500 MeV0.035246867 meV 1.4457704 cm 1.5698382 m Radiator Transportation 0 fm 38.623322 um 999.25384 um + 22 0 fm 1.0117905 m 21.982962 m 500 MeV0.031708167 meV 1.3006186 cm 1.5828444 m Radiator Transportation 0 fm 12.924399 um 999.91648 um + 23 0 fm 1.0118328 m 21.9895 m 500 MeV0.015939436 meV 6.5381032 mm 1.5893825 m Radiator Transportation 0 fm 1.4708264 nm 1000 um + 24 0 fm 1.0118318 m 21.9905 m 500 MeV0.0024379313 meV 1.0000006 mm 1.5903825 m Absorber Transportation 0 fm -1.9751403 um 999.99805 um + 25 0 fm 1.0117238 m 22 m 500 MeV0.023162168 meV 9.5007532 mm 1.5998833 m OutOfWorld Transportation 0 fm -20.752946 um 999.78463 um Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.001213s Sys=0.000000s + User=0.000000s Real=0.001047s Sys=0.000000s ========= Table of registered couples ============================ @@ -1185,7 +1211,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.010000s Real=0.011621s Sys=0.000000s + User=0.010000s Real=0.010588s Sys=0.000000s Set global field value to (0,0,1000) Gauss ========= Table of registered couples ============================ @@ -1204,11 +1230,13 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.001478s Sys=0.000000s + User=0.000000s Real=0.002141s Sys=0.000000s Set global field value to (33000,0,0) Gauss F03FieldSetup::UpdateField> The minimal step is equal to 10 mm Stepper Type chosen = 4 G4ClassicalRK4 (default) is called + G4ChordFinder: stepperDriverId: 2 + G4ChordFinder: stepperDriverId: 2 Set local field value to (0,0,0) Gauss ========= Table of registered couples ============================ @@ -1236,18 +1264,18 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng 3 0 fm 0 fm 21.7395 m 500 MeV0.24379297 meV 10 cm 25 cm Radiator Transportation 0 fm 0 fm -1 mm 4 0 fm 0 fm 21.6395 m 500 MeV0.24379297 meV 10 cm 35 cm RadSlice Transportation 0 fm 0 fm -1 mm 5 0 fm 0 fm 21.5885 m 500 MeV0.12433442 meV 5.1 cm 40.1 cm Radiator Transportation 0 fm 0 fm -1 mm - 6 0 fm 1.0118328 m 21.5885 m 500 MeV 3.8748046 meV 1.5893832 m 1.9903832 m World Transportation 0 fm 0.87087764 fm 1 mm - 7 0 fm 1.0118328 m 21.6395 m 500 MeV0.12433442 meV 5.1 cm 2.0413832 m Radiator Transportation 0 fm 0.87087764 fm 1 mm - 8 0 fm 1.0118328 m 21.7395 m 500 MeV0.24379297 meV 10 cm 2.1413832 m RadSlice Transportation 0 fm 0.87087764 fm 1 mm - 9 0 fm 1.0118328 m 21.8395 m 500 MeV0.24379297 meV 10 cm 2.2413832 m Radiator Transportation 0 fm 0.87087764 fm 1 mm - 10 0 fm 1.0118328 m 21.9395 m 500 MeV0.24379297 meV 10 cm 2.3413832 m RadSlice Transportation 0 fm 0.87087764 fm 1 mm - 11 0 fm 1.0118328 m 21.9895 m 500 MeV0.12189649 meV 5 cm 2.3913832 m Radiator Transportation 0 fm 0.87087764 fm 1 mm + 6 0 fm 1.0118328 m 21.5885 m 500 MeV 3.8748046 meV 1.5893832 m 1.9903832 m World Transportation 0 fm 0.88123524 fm 1 mm + 7 0 fm 1.0118328 m 21.6395 m 500 MeV0.12433442 meV 5.1 cm 2.0413832 m Radiator Transportation 0 fm 0.88123524 fm 1 mm + 8 0 fm 1.0118328 m 21.7395 m 500 MeV0.24379297 meV 10 cm 2.1413832 m RadSlice Transportation 0 fm 0.88123524 fm 1 mm + 9 0 fm 1.0118328 m 21.8395 m 500 MeV0.24379297 meV 10 cm 2.2413832 m Radiator Transportation 0 fm 0.88123524 fm 1 mm + 10 0 fm 1.0118328 m 21.9395 m 500 MeV0.24379297 meV 10 cm 2.3413832 m RadSlice Transportation 0 fm 0.88123524 fm 1 mm + 11 0 fm 1.0118328 m 21.9895 m 500 MeV0.12189649 meV 5 cm 2.3913832 m Radiator Transportation 0 fm 0.88123524 fm 1 mm 12 0 fm 1.0118318 m 21.9905 m 500 MeV0.0024379313 meV 1.0000007 mm 2.3923832 m Absorber Transportation 0 fm -1.9766112 um 999.99805 um - 13 0 fm 1.0117238 m 22 m 500 MeV0.023162171 meV 9.5007541 mm 2.401884 m OutOfWorld Transportation 0 fm -20.754419 um 999.7846 um + 13 0 fm 1.0117238 m 22 m 500 MeV0.023162169 meV 9.5007533 mm 2.401884 m OutOfWorld Transportation 0 fm -20.754417 um 999.7846 um Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000449s Sys=0.000000s + User=0.000000s Real=0.000269s Sys=0.000000s /tracking/verbose 0 # /calor/setAbsMat Xe20CO2 @@ -1320,10 +1348,10 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.140000s Real=0.140826s Sys=0.010000s + User=0.270000s Real=0.268407s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== Number of memory pools allocated: 14 of which, static: 0 -Dynamic pools deleted: 14 / Total memory freed: 1.6 MB +Dynamic pools deleted: 14 / Total memory freed: 1.5 MB ============================================================ diff --git a/examples/extended/field/field04/field04.out b/examples/extended/field/field04/field04.out index 17a9ee06e1f..bee5125e7d6 100644 --- a/examples/extended/field/field04/field04.out +++ b/examples/extended/field/field04/field04.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -52,7 +52,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -230,6 +232,7 @@ G4NistMaterialBuilder::FindOrBuildMaterial G4_AIR G4NistMaterialBuilder::FindOrBuildMaterial G4_Pb G4NistMaterialBuilder::FindOrBuildMaterial G4_W G4ClassicalRK4 (default) is called + G4ChordFinder: stepperDriverId: 2 Accuracy Parameters: MinStep=0.01 DeltaChord=3 DeltaOneStep=0.01 DeltaIntersection=0.1 EpsMin=2.5e-07 EpsMax=0.001 @@ -392,7 +395,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -424,7 +427,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -456,7 +459,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -469,7 +472,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -515,7 +517,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -547,7 +549,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -579,7 +581,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -611,7 +613,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -643,7 +645,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -675,7 +677,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -707,7 +709,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1103,12 +1105,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1174,19 +1185,18 @@ Track (trackID 1, parentID 0) is processed with stopping code 2 Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process 0 -1.13 cm -2.83 mm 5.86 cm 33.1 MeV 0 eV 0 fm 0 fm Target initStep - 1 -1.1367426 cm -1.7427803 mm 5.8468398 cm 27.729824 MeV 5.3597121 MeV 1.1006203 mm 1.1006203 mm Target hIoni - 2 -1.1356615 cm -892.53996 um 5.8396248 cm 23.597254 MeV 4.1325703 MeV 860.79723 um 1.9614175 mm Target hIoni - 3 -1.1444911 cm -246.59361 um 5.8178123 cm 19.778344 MeV 3.81891 MeV 693.87768 um 2.6552952 mm Target hIoni - 4 -1.1443182 cm 244.94533 um 5.7933104 cm 15.753192 MeV 4.0251516 MeV 554.818 um 3.2101132 mm Target hIoni - 5 -1.1402168 cm 642.94345 um 5.7804474 cm 12.880938 MeV 2.8722536 MeV 425.21114 um 3.6353244 mm Target hIoni - 6 -1.14122 cm 959.57141 um 5.7682525 cm 10.167909 MeV 2.7130292 MeV 344.10519 um 3.9794296 mm Target hIoni - 7 -1.1377813 cm 1.2093715 mm 5.7582209 cm 7.4251433 MeV 2.742766 MeV 275.99801 um 4.2554276 mm Target hIoni - 8 -1.1369193 cm 1.3882538 mm 5.7475544 cm 4.4078179 MeV 3.0173254 MeV 213.38738 um 4.468815 mm Target hIoni - 9 -1.1345126 cm 1.5138134 mm 5.7437318 cm 1.1232932 MeV 3.2845248 MeV 138.93578 um 4.6077507 mm Target hIoni - 10 -1.1338955 cm 1.5231754 mm 5.7441728 cm 16.610135 keV 1.106683 MeV 16.372443 um 4.6241232 mm Target hIoni - 11 -1.1338956 cm 1.5231637 mm 5.7441732 cm 6.9388939e-09 meV 16.610135 keV 119.15003 nm 4.6242423 mm Target hIoni - 12 -1.1338956 cm 1.5231637 mm 5.7441732 cm 0 eV 6.9388939e-09 meV 2.2239643 fm 4.6242423 mm Target hIoni - 13 -1.1338956 cm 1.5231637 mm 5.7441732 cm 0 eV 0 eV 0 fm 4.6242423 mm Target Decay + 1 -1.136699 cm -1.766339 mm 5.8470205 cm 27.783205 MeV 5.3063315 MeV 1.0765869 mm 1.0765869 mm Target hIoni + 2 -1.1356898 cm -934.53358 um 5.83997 cm 23.690884 MeV 4.0923206 MeV 841.92149 um 1.9185084 mm Target hIoni + 3 -1.1442407 cm -301.69761 um 5.8188423 cm 19.902511 MeV 3.7883729 MeV 678.70028 um 2.5972087 mm Target hIoni + 4 -1.144121 cm 180.50683 um 5.7951332 cm 15.906441 MeV 3.9960705 MeV 542.61814 um 3.1398268 mm Target hIoni + 5 -1.1402183 cm 570.37699 um 5.7826529 cm 13.043935 MeV 2.8625053 MeV 415.84213 um 3.5556689 mm Target hIoni + 6 -1.1411977 cm 880.47305 um 5.7708449 cm 10.329278 MeV 2.714657 MeV 336.29565 um 3.8919646 mm Target hIoni + 7 -1.1379388 cm 1.1249529 mm 5.7611443 cm 7.5717959 MeV 2.7574823 MeV 269.29261 um 4.1612572 mm Target hIoni + 8 -1.1371205 cm 1.2997344 mm 5.7509198 cm 4.5106038 MeV 3.0611921 MeV 207.12778 um 4.368385 mm Target hIoni + 9 -1.1349473 cm 1.4170842 mm 5.7473454 cm 1.0215085 MeV 3.4890953 MeV 129.10314 um 4.4974881 mm Target hIoni + 10 -1.1346693 cm 1.4255514 mm 5.7473822 cm 93.333157 keV 928.17536 keV 9.235834 um 4.5067239 mm Target hIoni + 11 -1.1346556 cm 1.4257591 mm 5.747392 cm 0 eV 93.333157 keV 719.32374 nm 4.5074433 mm Target hIoni + 12 -1.1346556 cm 1.4257591 mm 5.747392 cm 0 eV 0 eV 0 fm 4.5074433 mm Target Decay Track (trackID 4, parentID 1) is processed with stopping code 2 ********************************************************************************************************* @@ -1194,19 +1204,18 @@ Track (trackID 4, parentID 1) is processed with stopping code 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process - 0 -1.13 cm 1.52 mm 5.74 cm 4.12 MeV 0 eV 0 fm 0 fm Target initStep - 1 -1.1235527 cm 1.5587528 mm 5.7378967 cm 1.3899866 MeV 2.7298261 MeV 143.89929 um 143.89929 um Target muIoni - 2 -1.1219142 cm 1.5673753 mm 5.7372353 cm 232.72107 keV 1.1572655 MeV 26.89442 um 170.79371 um Target muIoni - 3 -1.1219062 cm 1.5683802 mm 5.7372013 cm 6.7036221 keV 226.01745 keV 1.8253605 um 172.61907 um Target muIoni - 4 -1.1219061 cm 1.5683791 mm 5.7372016 cm 0 eV 6.7036221 keV 62.730063 nm 172.6818 um Target muIoni - 5 -1.1219061 cm 1.5683791 mm 5.7372016 cm 0 eV 0 eV 0 fm 172.6818 um Target DecayWithSpin + 0 -1.13 cm 1.43 mm 5.75 cm 4.12 MeV 0 eV 0 fm 0 fm Target initStep + 1 -1.1349338 cm 1.5058752 mm 5.7387599 cm 1.0958352 MeV 3.0239775 MeV 133.4438 um 133.4438 um Target muIoni + 2 -1.1352973 cm 1.5081844 mm 5.73786 cm 74.068973 keV 1.0217662 MeV 12.958876 um 146.40268 um Target muIoni + 3 -1.1353076 cm 1.5083103 mm 5.7378499 cm 0 eV 74.068973 keV 629.43678 nm 147.03211 um Target muIoni + 4 -1.1353076 cm 1.5083103 mm 5.7378499 cm 0 eV 0 eV 0 fm 147.03211 um Target DecayWithSpin Track (trackID 22, parentID 4) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.381746(mm),-0.66499881(mm),79.403547(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.324056(mm),-1.0156198(mm),78.884738(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1215,7 +1224,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.148752(mm),-1.9398744(mm),79.268303(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.638249(mm),-0.59360369(mm),79.005665(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1224,7 +1233,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.769654(mm),-2.6719156(mm),78.806167(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.069995(mm),1.9340203(mm),78.929536(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1233,7 +1242,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.865995(mm),-1.4550523(mm),78.78918(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.141086(mm),-0.20357721(mm),79.093328(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1242,7 +1251,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.282665(mm),-0.87956351(mm),78.539383(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.374429(mm),2.5278138(mm),79.22851(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1251,7 +1260,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.069481(mm),1.3282199(mm),78.929627(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.097349(mm),-2.5983888(mm),79.277367(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1260,7 +1269,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.224768(mm),-1.9270429(mm),79.2549(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.23375(mm),-1.0558771(mm),78.371681(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1269,7 +1278,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.053738(mm),2.2484028(mm),79.10873(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.520768(mm),3.3253619(mm),78.673726(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1278,7 +1287,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.519786(mm),1.1199183(mm),78.497572(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.732853(mm),0.50947194(mm),79.341637(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1287,7 +1296,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.772187(mm),0.50689429(mm),78.805721(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.749238(mm),2.0944361(mm),78.986094(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1296,7 +1305,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.051854(mm),-2.3885738(mm),78.403754(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.524567(mm),0.2742831(mm),78.320402(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1305,7 +1314,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.169558(mm),1.3101438(mm),78.206673(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.649003(mm),-2.9528429(mm),79.003768(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1314,7 +1323,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.458015(mm),-2.3452317(mm),78.332137(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.883826(mm),-0.35903096(mm),78.433382(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1323,7 +1332,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.07084(mm),-2.9679987(mm),79.105714(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.59452(mm),-0.80347346(mm),79.366029(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1332,7 +1341,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.323352(mm),-1.1001981(mm),78.708535(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.491792(mm),2.3866902(mm),79.207816(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1341,7 +1350,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.526118(mm),-0.82035049(mm),79.201763(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.852689(mm),0.31204285(mm),78.967853(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1350,7 +1359,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.384814(mm),1.9157883(mm),79.226679(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.171385(mm),0.95079774(mm),78.735331(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1359,7 +1368,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.151231(mm),-2.7610557(mm),78.738885(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.187943(mm),1.545553(mm),78.732412(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1368,7 +1377,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.528361(mm),1.0233514(mm),78.143406(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.216675(mm),-0.24766698(mm),78.727346(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1377,7 +1386,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.497267(mm),-3.841901(mm),78.67787(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.520847(mm),-0.91674284(mm),78.321058(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1386,7 +1395,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.19222(mm),0.48798414(mm),79.260639(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.529906(mm),0.58347318(mm),78.848441(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1395,7 +1404,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.196496(mm),0.2022476(mm),79.436212(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.130807(mm),-1.7230996(mm),78.742486(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1404,7 +1413,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.189753(mm),0.26972634(mm),78.555766(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.487231(mm),1.824928(mm),79.384947(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1413,7 +1422,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.383505(mm),-0.87756362(mm),78.697929(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.140096(mm),1.3665181(mm),79.269829(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1422,7 +1431,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.629605(mm),-3.8181364(mm),78.654535(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.491749(mm),-1.4596784(mm),79.031497(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1431,7 +1440,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.072199(mm),2.2233826(mm),78.929148(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.849416(mm),1.2965786(mm),78.615776(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1440,7 +1449,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.883449(mm),3.2983095(mm),79.138756(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.992942(mm),-1.8085054(mm),79.295777(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1449,7 +1458,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.513398(mm),-0.039397309(mm),78.675025(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.512146(mm),1.6881092(mm),78.675246(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1458,7 +1467,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.717977(mm),3.8456693(mm),78.815279(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.944193(mm),2.3729252(mm),78.422738(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1467,7 +1476,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.284338(mm),0.57380943(mm),79.420723(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.277232(mm),-2.0143888(mm),78.187687(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1476,7 +1485,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.33773(mm),1.2754466(mm),78.177019(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.689456(mm),-0.021274163(mm),78.291328(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1485,7 +1494,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.381434(mm),0.74780344(mm),78.521967(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.988464(mm),-2.537282(mm),78.414931(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1494,7 +1503,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.734935(mm),-2.5243311(mm),78.283308(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.066403(mm),2.289853(mm),78.93017(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1503,7 +1512,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.808682(mm),0.86858955(mm),78.270305(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.917564(mm),-0.82194231(mm),78.251106(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1512,7 +1521,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.985063(mm),-0.74304876(mm),78.768185(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.372934(mm),-0.65335232(mm),79.228774(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1521,7 +1530,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.698588(mm),0.47282086(mm),78.466044(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.980969(mm),-1.3238475(mm),78.945234(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1530,7 +1539,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.066913(mm),-0.13633059(mm),78.224772(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.398132(mm),-1.9748314(mm),78.519023(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1539,7 +1548,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.752549(mm),1.4697413(mm),78.632857(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.554164(mm),0.60457757(mm),78.315183(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1548,7 +1557,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.977173(mm),1.0682898(mm),78.593249(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.07045(mm),-0.49115643(mm),79.105783(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1557,7 +1566,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.99381(mm),-0.72230514(mm),78.413989(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.508649(mm),-1.4817562(mm),78.85219(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1566,7 +1575,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.013637(mm),-2.9813296(mm),78.410493(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.951122(mm),1.6869842(mm),79.303151(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1575,7 +1584,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.901901(mm),2.5445569(mm),78.606522(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.018226(mm),1.7434207(mm),78.58601(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1584,7 +1593,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.073878(mm),-2.9774387(mm),79.105178(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.054794(mm),-2.327961(mm),79.108544(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1593,7 +1602,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.126004(mm),0.69201881(mm),78.214352(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.558331(mm),-2.6766563(mm),79.196083(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1602,7 +1611,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.883518(mm),-2.7835623(mm),79.138744(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.609068(mm),1.7351204(mm),78.834483(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1611,7 +1620,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.076252(mm),1.1907079(mm),78.928433(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.790967(mm),2.4610735(mm),78.449755(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1620,7 +1629,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.951512(mm),-1.2363684(mm),78.24512(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.056305(mm),1.4826452(mm),78.226642(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1629,7 +1638,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.261377(mm),2.4219793(mm),78.36681(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.69384(mm),-0.021280869(mm),78.643209(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1638,7 +1647,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.967905(mm),-0.45719527(mm),78.418557(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.216226(mm),1.7441545(mm),78.903752(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1647,7 +1656,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.667817(mm),2.2291714(mm),79.176778(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.064068(mm),-3.240843(mm),79.106908(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1656,7 +1665,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.661175(mm),0.098159424(mm),78.825295(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.936035(mm),-0.16222674(mm),78.953157(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1665,7 +1674,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.591292(mm),1.4688122(mm),79.190271(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.222078(mm),0.4417363(mm),78.197412(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1674,7 +1683,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.327979(mm),2.5184181(mm),78.70772(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.84288(mm),-1.3789521(mm),78.264275(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1683,7 +1692,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.10594(mm),-0.078763205(mm),79.452179(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.286514(mm),-0.93829826(mm),79.067685(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1692,7 +1701,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.878116(mm),-1.0132733(mm),78.96337(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.367888(mm),-2.24884(mm),78.524356(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1701,7 +1710,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.912327(mm),-0.20491238(mm),79.309991(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.57795(mm),0.64066532(mm),78.310989(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1710,7 +1719,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.558944(mm),1.1990278(mm),78.843321(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.303324(mm),0.95260342(mm),78.359413(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1719,7 +1728,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.675943(mm),0.90613291(mm),78.822691(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.652136(mm),2.5886186(mm),78.474235(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1728,7 +1737,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.852773(mm),-1.6034955(mm),78.438857(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.217568(mm),0.72217665(mm),78.198207(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1737,7 +1746,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.532004(mm),2.9878673(mm),78.848072(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.40856(mm),-2.6094402(mm),78.340857(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1746,7 +1755,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.959513(mm),0.7662694(mm),79.301671(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.94645(mm),2.4233392(mm),79.303975(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1755,7 +1764,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.486805(mm),0.12410743(mm),78.856041(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.738639(mm),0.76393236(mm),78.811636(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1764,7 +1773,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.314259(mm),-0.8717558(mm),78.533812(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.633526(mm),2.169688(mm),78.83017(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1773,7 +1782,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.931359(mm),-2.2191987(mm),79.130309(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.935163(mm),-0.36160211(mm),78.953311(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1782,7 +1791,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.726371(mm),-3.2762456(mm),78.461145(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.88533(mm),-2.6464659(mm),78.433117(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1791,7 +1800,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.004451(mm),-2.6228893(mm),78.764766(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.663788(mm),0.75382764(mm),78.824834(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1800,7 +1809,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.516052(mm),3.3796909(mm),78.49823(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.534155(mm),0.048295741(mm),79.024019(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1809,7 +1818,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.67221(mm),-0.29465246(mm),78.118042(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.401707(mm),-0.1736292(mm),79.2237(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1818,7 +1827,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.629851(mm),-0.54421568(mm),78.478165(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.577977(mm),-3.0215981(mm),78.487311(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1827,7 +1836,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.572921(mm),1.5301454(mm),79.369838(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.216225(mm),1.6336861(mm),78.903752(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1836,7 +1845,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.098374(mm),-0.88316828(mm),79.100859(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.984847(mm),3.8907902(mm),78.768223(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1845,7 +1854,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.026127(mm),2.8588077(mm),78.937271(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.591755(mm),1.6839702(mm),79.19019(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1854,7 +1863,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.465361(mm),-0.29550755(mm),78.859822(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.614736(mm),-3.663372(mm),79.009811(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1863,7 +1872,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.8153(mm),-2.1385712(mm),78.621792(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.226417(mm),0.77329047(mm),78.549301(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1872,7 +1881,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.121792(mm),-1.2290079(mm),78.391422(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.481029(mm),-0.5426614(mm),79.386041(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1881,7 +1890,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.473496(mm),1.2482484(mm),78.858388(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.961467(mm),-1.5483431(mm),78.243365(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1890,7 +1899,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.870988(mm),-3.2065405(mm),78.435646(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.137923(mm),-1.3352831(mm),78.564905(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1899,7 +1908,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.396014(mm),-1.3297636(mm),78.695723(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.671761(mm),-0.28473641(mm),78.470775(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1908,7 +1917,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.468855(mm),-2.0084578(mm),79.035533(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.911614(mm),-1.2490756(mm),78.428482(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1917,16 +1926,282 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.260651(mm),1.0184562(mm),79.072245(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.229988(mm),-1.7726617(mm),78.372344(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = pi+, Track ID = 3, Parent ID = 1 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -1.2 cm -1.79 mm 5.49 cm 51.7 MeV 0 eV 0 fm 0 fm Target initStep + 1 -1.2550982 cm -1.1488048 mm 5.3059423 cm 44.985243 MeV 6.7008838 MeV 2.06899 mm 2.06899 mm Target hIoni + 2 -1.2951719 cm -501.7122 um 5.1570765 cm 38.062661 MeV 6.9225815 MeV 1.6843763 mm 3.7533664 mm Target hIoni + 3 -1.3066075 cm -380.4417 um 5.1170737 cm 36.549979 MeV 1.5126819 MeV 434.3643 um 4.1877307 mm Target Transportation + 4 5.2052136 cm 3.0570448 cm -2 m 36.549982 MeV1.2799259e-13 meV 2.206106 m 2.2102937 m CaptureMgnt Transportation + 5 4.4485681 cm -2.909542 mm -2.0866888 m 36.526904 MeV 21.091562 keV 9.3237094 cm 2.3035308 m World hIoni + 6 4.4065272 cm -4.7629835 mm -2.0915132 m 36.523599 MeV 732.28442 eV 5.1852469 mm 2.308716 m World hIoni + 7 3.9163456 cm -2.6498362 cm -2.1481348 m 36.50684 MeV 15.768252 keV 6.0847968 cm 2.369564 m World hIoni + 8 3.8354151 cm -3.0116532 cm -2.1576706 m 36.502672 MeV 2.5893472 keV 1.0231146 cm 2.3797951 m World hIoni + 9 3.7988145 cm -3.1762469 cm -2.162007 m 36.493839 MeV 815.53842 eV 4.652756 mm 2.3844479 m World hIoni + 10 3.4171324 cm -4.8799899 cm -2.2070852 m 36.479236 MeV 13.587873 keV 4.8341373 cm 2.4327893 m World hIoni + 11 3.0630179 cm -6.4252317 cm -2.248055 m 36.46195 MeV 11.257505 keV 4.3930048 cm 2.4767193 m World hIoni + 12 2.8281236 cm -7.4423882 cm -2.2749186 m 36.453812 MeV 7.1091071 keV 2.8820683 cm 2.50554 m World hIoni + 13 1.6920413 cm -12.434241 cm -2.40616 m 36.412571 MeV 40.217635 keV 14.087363 cm 2.6464136 m World hIoni + 14 1.4678954 cm -13.422244 cm -2.432099 m 36.397823 MeV 9.5538438 keV 2.7847308 cm 2.6742609 m World hIoni + 15 1.2113643 cm -14.546296 cm -2.4616024 m 36.387555 MeV 9.0687728 keV 3.1676271 cm 2.7059372 m World hIoni + 16 1.1681321 cm -14.735831 cm -2.4665843 m 36.385074 MeV 1.156771 keV 5.3477415 mm 2.711285 m World hIoni + 17 7.9920194 mm -16.347345 cm -2.5089349 m 36.370345 MeV 11.154235 keV 4.5462998 cm 2.756748 m World hIoni + 18 -3.1527101 mm -21.169734 cm -2.6336372 m 36.331299 MeV 35.809698 keV 13.416612 cm 2.8909141 m World hIoni + 19 -3.9869448 mm -21.555746 cm -2.6437644 m 36.324915 MeV 4.5391092 keV 1.0869997 cm 2.9017841 m World hIoni + 20 -4.498723 mm -21.794798 cm -2.6500394 m 36.310889 MeV 1.6285166 keV 6.7344136 mm 2.9085185 m World hIoni + 21 -1.2045089 cm -25.024068 cm -2.7351605 m 36.287455 MeV 23.434482 keV 9.1355475 cm 2.999874 m World hIoni + 22 -1.249646 cm -25.195192 cm -2.7396495 m 36.284971 MeV 1.4699491 keV 4.8252193 mm 3.0046992 m World hIoni + 23 -1.411369 cm -25.806906 cm -2.7556869 m 36.280028 MeV 3.8529741 keV 1.7240456 cm 3.0219396 m World hIoni + 24 -1.6893252 cm -26.862199 cm -2.7833429 m 36.272792 MeV 6.1644915 keV 2.9731268 cm 3.0516709 m World hIoni + 25 -1.9002463 cm -27.68475 cm -2.8049626 m 36.266859 MeV 4.3761813 keV 2.3227542 cm 3.0748984 m World hIoni + 26 -2.1168484 cm -28.531789 cm -2.8273136 m 36.26201 MeV 4.8487038 keV 2.4000133 cm 3.0988986 m World hIoni + 27 -2.2215011 cm -28.937806 cm -2.8381262 m 36.24165 MeV 4.0346078 keV 1.1597127 cm 3.1104957 m World hIoni + 28 -2.504466 cm -30.022634 cm -2.8669975 m 36.231512 MeV 7.531198 keV 3.0971663 cm 3.1414674 m World hIoni + 29 -3.0178708 cm -31.943698 cm -2.917758 m 36.211335 MeV 19.097393 keV 5.4516493 cm 3.1959839 m World hIoni + 30 -3.7099269 cm -34.562133 cm -2.9872017 m 36.188257 MeV 20.220202 keV 7.4538346 cm 3.2705222 m World hIoni + 31 -3.8471481 cm -35.077639 cm -3.0009344 m 36.18128 MeV 3.2124546 keV 1.4732399 cm 3.2852546 m World hIoni + 32 -4.0243763 cm -35.737507 cm -3.0184881 m 36.17448 MeV 5.6423234 keV 1.8836561 cm 3.3040912 m World hIoni + 33 -4.2584001 cm -36.612929 cm -3.0417565 m 36.166898 MeV 6.3724996 keV 2.497063 cm 3.3290618 m World hIoni + 34 -4.3503861 cm -36.958103 cm -3.0509334 m 36.163097 MeV 2.745968 keV 9.8476855 mm 3.3389095 m World hIoni + 35 -4.5638959 cm -37.748214 cm -3.0719598 m 36.156631 MeV 6.4660901 keV 2.2563186 cm 3.3614727 m World hIoni + 36 -4.7318493 cm -38.372693 cm -3.0885091 m 36.153304 MeV 3.3271858 keV 1.7767855 cm 3.3792405 m World hIoni + 37 -5.1034568 cm -39.753612 cm -3.1251551 m 36.127507 MeV 14.401953 keV 3.9337444 cm 3.418578 m World hIoni + 38 -5.3776582 cm -40.767228 cm -3.1520218 m 36.11289 MeV 8.0393713 keV 2.8845866 cm 3.4474238 m World hIoni + 39 -6.2509178 cm -43.929263 cm -3.2359471 m 36.082667 MeV 28.93981 keV 9.0108803 cm 3.5375326 m World hIoni + 40 -6.2915159 cm -44.07814 cm -3.2399696 m 36.077533 MeV 810.55333 eV 4.3083526 mm 3.541841 m World hIoni + 41 -6.4711683 cm -44.739888 cm -3.2578143 m 36.024927 MeV 4.7232886 keV 1.9116773 cm 3.5609578 m World hIoni + 42 -6.8005861 cm -45.979267 cm -3.2911047 m 35.994308 MeV 8.5501088 keV 3.5675124 cm 3.5966329 m World hIoni + 43 -6.8267401 cm -46.077594 cm -3.2937557 m 35.989955 MeV 938.31588 eV 2.839496 mm 3.5994724 m World hIoni + 44 -6.9998206 cm -46.727263 cm -3.3112581 m 35.966291 MeV 4.4165881 keV 1.8749299 cm 3.6182217 m World hIoni + 45 -7.0442443 cm -46.895278 cm -3.3157984 m 35.965303 MeV 988.01 eV 4.8616126 mm 3.6230833 m World hIoni + 46 -7.0946109 cm -47.085512 cm -3.3209416 m 35.963787 MeV 418.06877 eV 5.5067626 mm 3.6285901 m World hIoni + 47 -7.8033811 cm -49.750101 cm -3.3930055 m 35.944112 MeV 18.524104 keV 7.7158729 cm 3.7057488 m World hIoni + 48 -7.9476189 cm -50.294079 cm -3.4076388 m 35.933106 MeV 4.9389198 keV 1.5678215 cm 3.721427 m World hIoni + 49 -8.3166976 cm -51.705605 cm -3.4455082 m 35.920602 MeV 10.707948 keV 4.058273 cm 3.7620097 m World hIoni + 50 -8.7313843 cm -53.339943 cm -3.4894448 m 35.903936 MeV 15.085613 keV 4.7060964 cm 3.8090707 m World hIoni + 51 -9.0849157 cm -54.769434 cm -3.5274953 m 35.86521 MeV 12.276282 keV 4.0800544 cm 3.8498712 m World hIoni + 52 -9.2937348 cm -55.581078 cm -3.5491344 m 35.856113 MeV 7.7835885 keV 2.3205344 cm 3.8730766 m World hIoni + 53 -9.3582061 cm -55.833003 cm -3.5558719 m 35.852687 MeV 1.6699055 keV 7.2219191 mm 3.8802985 m World hIoni + 54 -9.402826 cm -56.007285 cm -3.5605179 m 35.850384 MeV 770.25214 eV 4.982146 mm 3.8852806 m World hIoni + 55 -9.9189116 cm -58.031793 cm -3.6145244 m 35.83149 MeV 14.375896 keV 5.7906902 cm 3.9431875 m World hIoni + 56 -10.015755 cm -58.418771 cm -3.6248341 m 35.827289 MeV 2.8492334 keV 1.1054585 cm 3.9542421 m World hIoni + 57 -10.453093 cm -60.14098 cm -3.6706883 m 35.817081 MeV 8.0071109 keV 4.9176652 cm 4.0034188 m World hIoni + 58 -10.527957 cm -60.430524 cm -3.6783833 m 35.803216 MeV 2.990057 keV 8.2557184 mm 4.0116745 m World hIoni + 59 -10.731077 cm -61.228155 cm -3.6995871 m 35.78918 MeV 5.5368917 keV 2.2745277 cm 4.0344198 m World hIoni + 60 -11.284786 cm -63.441166 cm -3.7583109 m 35.77292 MeV 15.227868 keV 6.2999204 cm 4.097419 m World hIoni + 61 -11.379949 cm -63.812115 cm -3.7681481 m 35.758217 MeV 4.8898328 keV 1.0556314 cm 4.1079753 m World hIoni + 62 -11.466086 cm -64.155213 cm -3.7771868 m 35.754824 MeV 2.0692281 keV 9.7062833 mm 4.1176816 m World hIoni + 63 -11.885563 cm -65.851154 cm -3.8217477 m 35.733558 MeV 19.942254 keV 4.7863652 cm 4.1655452 m World hIoni + 64 -12.073974 cm -66.643883 cm -3.8422134 m 35.723607 MeV 7.5275167 keV 2.2028103 cm 4.1875733 m World hIoni + 65 -12.206863 cm -67.197489 cm -3.8565111 m 35.718393 MeV 5.2141273 keV 1.538953 cm 4.2029629 m World hIoni + 66 -12.254112 cm -67.391955 cm -3.8615371 m 35.714522 MeV 2.8784944 keV 5.4097992 mm 4.2083727 m World hIoni + 67 -12.49477 cm -68.373453 cm -3.8869702 m 35.704783 MeV 8.7450353 keV 2.7367283 cm 4.2357399 m World hIoni + 68 -12.905936 cm -70.003924 cm -3.9290434 m 35.693813 MeV 10.969538 keV 4.5309107 cm 4.2810491 m World hIoni + 69 -12.949648 cm -70.171418 cm -3.9333449 m 35.693107 MeV 706.21159 eV 4.6367102 mm 4.2856858 m World hIoni + 70 -13.871132 cm -73.702647 cm -4.02398 m 35.668615 MeV 22.841777 keV 9.7706902 cm 4.3833927 m World hIoni + 71 -13.937792 cm -73.949169 cm -4.030351 m 35.64848 MeV 1.3789829 keV 6.8638359 mm 4.3902565 m World hIoni + 72 -14.127003 cm -74.651321 cm -4.0485574 m 35.642601 MeV 4.3957187 keV 1.9604942 cm 4.4098614 m World hIoni + 73 -14.340398 cm -75.424073 cm -4.0686921 m 35.63885 MeV 3.7512132 keV 2.1671953 cm 4.4315334 m World hIoni + 74 -14.629209 cm -76.455753 cm -4.0955687 m 35.615875 MeV 10.849552 keV 2.8933204 cm 4.4604666 m World hIoni + 75 -15.023654 cm -77.872832 cm -4.1325126 m 35.601852 MeV 14.022784 keV 3.9764674 cm 4.5002313 m World hIoni + 76 -15.067791 cm -78.029937 cm -4.1366141 m 35.59301 MeV 1.0778526 keV 4.4141702 mm 4.5046454 m World hIoni + 77 -15.147122 cm -78.314791 cm -4.1440394 m 35.590759 MeV 958.47507 eV 7.9924881 mm 4.5126379 m World hIoni + 78 -15.408734 cm -79.263296 cm -4.1687375 m 35.581938 MeV 7.3078683 keV 2.6585768 cm 4.5392237 m World hIoni + 79 -15.615697 cm -80.007768 cm -4.1880571 m 35.577461 MeV 4.4770625 keV 2.0807611 cm 4.5600313 m World hIoni + 80 -17.0558 cm -85.257408 cm -4.3236778 m 35.531191 MeV 44.352514 keV 14.613836 cm 4.7061697 m World hIoni + 81 -17.355426 cm -86.34056 cm -4.3522815 m 35.521376 MeV 8.6841696 keV 3.0732304 cm 4.736902 m World hIoni + 82 -17.374722 cm -86.409759 cm -4.3541216 m 35.514117 MeV 1.0678161 keV 1.9753512 mm 4.7388773 m World hIoni + 83 -18.201537 cm -89.362314 cm -4.4325805 m 35.479922 MeV 28.998498 keV 8.4237469 cm 4.8231148 m World hIoni + 84 -18.274911 cm -89.62575 cm -4.4395571 m 35.46946 MeV 2.6409955 keV 7.493448 mm 4.8306082 m World hIoni + 85 -18.306281 cm -89.738643 cm -4.4425469 m 35.467112 MeV 827.61804 eV 3.2112086 mm 4.8338195 m World hIoni + 86 -18.351798 cm -89.902039 cm -4.4468701 m 35.461616 MeV 3.0536723 keV 4.644002 mm 4.8384635 m World hIoni + 87 -18.634756 cm -90.921621 cm -4.4738183 m 35.454368 MeV 7.2480416 keV 2.8951154 cm 4.8674146 m World hIoni + 88 -18.674243 cm -91.064049 cm -4.4775569 m 35.450764 MeV 768.61468 eV 4.0201648 mm 4.8714348 m World hIoni + 89 -19.015982 cm -92.298113 cm -4.5099931 m 35.437787 MeV 11.740259 keV 3.4872253 cm 4.906307 m World hIoni + 90 -19.2567 cm -93.174649 cm -4.5331088 m 35.428165 MeV 8.4686329 keV 2.4838782 cm 4.9311458 m World hIoni + 91 -19.278452 cm -93.253107 cm -4.5351806 m 35.426987 MeV 1.1780052 keV 2.2259856 mm 4.9333718 m World hIoni + 92 -19.415158 cm -93.744435 cm -4.5481918 m 35.42392 MeV 2.0333932 keV 1.3975011 cm 4.9473468 m World hIoni + 93 -19.707763 cm -94.789674 cm -4.5759575 m 35.405585 MeV 7.7173858 keV 2.9811898 cm 4.9771587 m World hIoni + 94 -19.77737 cm -95.036582 cm -4.5825162 m 35.400526 MeV 2.7823268 keV 7.0425919 mm 4.9842013 m World hIoni + 95 -20.190821 cm -96.486805 cm -4.6216335 m 35.382661 MeV 10.491657 keV 4.1923443 cm 5.0261247 m World hIoni + 96 -20.272876 cm -96.768382 cm -4.629212 m 35.379484 MeV 3.1771516 keV 8.1262913 mm 5.034251 m World hIoni + 97 -20.755491 cm -98.413004 cm -4.6735694 m 35.364256 MeV 14.057384 keV 4.755368 cm 5.0818047 m World hIoni + 98 -21.172588 cm -99.810658 cm -4.7111995 m 35.351632 MeV 11.329114 keV 4.0358037 cm 5.1221628 m World hIoni + 99 -21.26755 cm -1.0012698 m -4.7196899 m 35.347397 MeV 3.0928057 keV 9.1101486 mm 5.1312729 m World hIoni + 100 -21.270223 cm -1.0013576 m -4.7199257 m 35.345296 MeV 25.935204 eV 253.01481 um 5.1315259 m World hIoni + 101 -21.310362 cm -1.0026838 m -4.7234897 m 35.34399 MeV 1.3054904 keV 3.8238744 mm 5.1353498 m World hIoni + 102 -22.360359 cm -1.0374331 m -4.8169182 m 35.304689 MeV 29.041663 keV 10.02333 cm 5.2355831 m World hIoni + 103 -23.253473 cm -1.0673581 m -4.8975718 m 35.27781 MeV 23.468291 keV 8.6488762 cm 5.3220718 m World hIoni + 104 -23.29941 cm -1.0688857 m -4.901655 m 35.272968 MeV 794.51294 eV 4.3837078 mm 5.3264556 m World hIoni + 105 -23.506486 cm -1.075794 m -4.920091 m 35.264751 MeV 6.2756691 keV 1.9796499 cm 5.3462521 m World hIoni + 106 -24.145885 cm -1.0974317 m -4.9780551 m 35.248388 MeV 16.363383 keV 6.2200669 cm 5.4084527 m World hIoni + 107 -24.773376 cm -1.1190471 m -5.0361212 m 35.231313 MeV 15.201705 keV 6.2275866 cm 5.4707286 m World hIoni + 108 -24.89058 cm -1.1231054 m -5.0469381 m 35.226052 MeV 3.1433827 keV 1.1612409 cm 5.482341 m World hIoni + 109 -24.97111 cm -1.1258878 m -5.0543535 m 35.223878 MeV 1.1032889 keV 7.9610294 mm 5.490302 m World hIoni + 110 -25.123744 cm -1.1311585 m -5.0683514 m 35.219405 MeV 3.3666615 keV 1.5035006 cm 5.505337 m World hIoni + 111 -25.267895 cm -1.1361955 m -5.0817092 m 35.21314 MeV 3.0151777 keV 1.4348568 cm 5.5196856 m World hIoni + 112 -25.333024 cm -1.1384411 m -5.0876748 m 35.210516 MeV 2.623515 keV 6.4074016 mm 5.526093 m World Decay +Track (trackID 3, parentID 1) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = mu+, Track ID = 114, Parent ID = 3 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -25.3 cm -1.14 m -5.09 m 45.9 MeV 0 eV 0 fm 0 fm World initStep + 1 -25.746647 cm -1.1513058 m -5.107938 m 45.898747 MeV 6.4462485 keV 2.4355893 cm 2.4355893 cm World muIoni + 2 -25.859449 cm -1.1548015 m -5.1134496 m 45.894939 MeV 2.2770437 keV 6.6234485 mm 3.0979341 cm World muIoni + 3 -27.101031 cm -1.1933928 m -5.1743344 m 45.872664 MeV 20.219501 keV 7.3146521 cm 10.412586 cm World muIoni + 4 -27.554803 cm -1.2076833 m -5.1968188 m 45.866233 MeV 5.3852019 keV 2.7025144 cm 13.115101 cm World muIoni + 5 -28.015796 cm -1.2221924 m -5.2197069 m 45.853415 MeV 6.1035707 keV 2.748868 cm 15.863969 cm World muIoni + 6 -28.411166 cm -1.2346211 m -5.2393448 m 45.843574 MeV 5.2107728 keV 2.3574445 cm 18.221413 cm World muIoni + 7 -28.476541 cm -1.2366926 m -5.2426147 m 45.842106 MeV 446.51257 eV 3.9255822 mm 18.613971 cm World muIoni + 8 -29.079251 cm -1.2557675 m -5.2727223 m 45.833691 MeV 7.1427245 keV 3.6147603 cm 22.228732 cm World muIoni + 9 -29.146039 cm -1.2578801 m -5.276063 m 45.831463 MeV 517.88226 eV 4.008691 mm 22.629601 cm World muIoni + 10 -29.200941 cm -1.2596187 m -5.2788065 m 45.828699 MeV 670.6007 eV 3.2940198 mm 22.959003 cm World muIoni + 11 -29.819556 cm -1.2791607 m -5.3096245 m 45.800151 MeV 6.7839783 keV 3.7012321 cm 26.660235 cm World muIoni + 12 -30.850329 cm -1.3114783 m -5.3604667 m 45.784897 MeV 15.254882 keV 6.1119721 cm 32.772207 cm World muIoni + 13 -31.128687 cm -1.3200983 m -5.3740666 m 45.756154 MeV 2.6058549 keV 1.6340374 cm 34.406244 cm World muIoni + 14 -31.842636 cm -1.3421312 m -5.4087146 m 45.744768 MeV 7.8631519 keV 4.1676227 cm 38.573867 cm World muIoni + 15 -32.051698 cm -1.3486012 m -5.4188778 m 45.738161 MeV 5.5307473 keV 1.2227998 cm 39.796667 cm World muIoni + 16 -33.564074 cm -1.3951833 m -5.492157 m 45.719915 MeV 17.18922 keV 8.813901 cm 48.610568 cm World muIoni + 17 -33.585034 cm -1.3958146 m -5.4931517 m 45.712239 MeV 177.55852 eV 1.1966091 mm 48.730229 cm World muIoni + 18 -34.498801 cm -1.4232136 m -5.5363129 m 45.700388 MeV 9.7411019 keV 5.1933606 cm 53.923589 cm World muIoni + 19 -35.27193 cm -1.44635 m -5.572607 m 45.685763 MeV 12.505611 keV 4.3730197 cm 58.296609 cm World muIoni + 20 -35.791605 cm -1.4618221 m -5.5969941 m 45.676182 MeV 8.3897304 keV 2.9344907 cm 61.2311 cm World muIoni + 21 -37.753972 cm -1.5206978 m -5.689761 m 45.653525 MeV 21.525765 keV 11.161168 cm 72.392268 cm World muIoni + 22 -38.585993 cm -1.5455308 m -5.7288694 m 45.644332 MeV 7.7188321 keV 4.706785 cm 77.099053 cm World muIoni + 23 -39.708473 cm -1.5790763 m -5.7818875 m 45.616729 MeV 16.286489 keV 6.37355 cm 83.472603 cm World muIoni + 24 -41.08177 cm -1.6198833 m -5.8463773 m 45.602327 MeV 13.20008 keV 7.7542061 cm 91.226809 cm World muIoni + 25 -41.08397 cm -1.6199493 m -5.8464821 m 45.601244 MeV 84.398158 eV 125.77104 um 91.239386 cm World muIoni + 26 -41.400885 cm -1.6294533 m -5.861582 m 45.596208 MeV 4.0210135 keV 1.8121179 cm 93.051504 cm World muIoni + 27 -42.853332 cm -1.6725256 m -5.9301149 m 45.575717 MeV 15.416481 keV 8.2237209 cm 1.0127522 m World muIoni + 28 -43.946598 cm -1.7051819 m -5.9819075 m 45.559974 MeV 14.165184 keV 6.2196808 cm 1.0749491 m World muIoni + 29 -44.583029 cm -1.7242906 m -6.0122226 m 45.549465 MeV 8.6830628 keV 3.6395778 cm 1.1113448 m World muIoni + 30 -44.90957 cm -1.7341628 m -6.0278501 m 45.543953 MeV 4.4118373 keV 1.8770804 cm 1.1301156 m World muIoni + 31 -47.502339 cm -1.8113794 m -6.1512365 m 45.510091 MeV 32.509837 keV 14.784814 cm 1.2779638 m World muIoni + 32 -47.759898 cm -1.8190428 m -6.1634018 m 45.505286 MeV 3.3532465 keV 1.4606749 cm 1.2925705 m World muIoni + 33 -47.856117 cm -1.8219067 m -6.1679385 m 45.501307 MeV 1.1313385 keV 5.4506229 mm 1.2980212 m World muIoni + 34 -49.210273 cm -1.8620921 m -6.2316275 m 45.479209 MeV 13.687717 keV 7.6515032 cm 1.3745362 m World muIoni + 35 -49.527911 cm -1.871584 m -6.2466751 m 45.474116 MeV 4.0721125 keV 1.8072491 cm 1.3926087 m World muIoni + 36 -50.099583 cm -1.888539 m -6.2735218 m 45.463222 MeV 5.5055926 keV 3.2263036 cm 1.4248717 m World muIoni + 37 -51.149667 cm -1.9198814 m -6.3230896 m 45.446184 MeV 13.248752 keV 5.9578406 cm 1.4844501 m World muIoni + 38 -52.488973 cm -1.959967 m -6.3864311 m 45.416035 MeV 15.653147 keV 7.6147157 cm 1.5605973 m World muIoni + 39 -53.132124 cm -1.9793884 m -6.4170738 m 45.407623 MeV 7.0602281 keV 3.6844647 cm 1.5974419 m World muIoni + 40 -54.315784 cm -2.0163378 m -6.4761596 m 45.393953 MeV 13.669793 keV 7.0687994 cm 1.6681299 m World muIoni + 41 -54.758842 cm -2.0303794 m -6.4987723 m 45.384567 MeV 7.1423203 keV 2.6983951 cm 1.6951139 m World muIoni + 42 -56.378316 cm -2.0819246 m -6.5818502 m 45.361279 MeV 21.446859 keV 9.9101759 cm 1.7942156 m World muIoni + 43 -56.730548 cm -2.0935026 m -6.6005055 m 45.355511 MeV 3.8939518 keV 2.2236804 cm 1.8164524 m World muIoni + 44 -56.905947 cm -2.0993424 m -6.6099038 m 45.347358 MeV 2.9288555 keV 1.1203056 cm 1.8276555 m World muIoni + 45 -58.385898 cm -2.1484742 m -6.6889413 m 45.325287 MeV 18.353926 keV 9.4233327 cm 1.9218888 m World muIoni + 46 -59.523925 cm -2.186228 m -6.7494774 m 45.305928 MeV 19.358429 keV 7.224606 cm 1.9941349 m World muIoni + 47 -61.72284 cm -2.2581355 m -6.864246 m 45.227163 MeV 30.391157 keV 13.720849 cm 2.1313434 m World muIoni + 48 -62.165605 cm -2.2728152 m -6.8876819 m 45.217613 MeV 7.3430872 keV 2.8005971 cm 2.1593493 m World muIoni + 49 -65.3169 cm -2.3763816 m -7.0529235 m 45.175191 MeV 41.201177 keV 19.754549 cm 2.3568948 m World muIoni + 50 -65.534805 cm -2.3837044 m -7.0646173 m 45.170021 MeV 2.2299633 keV 1.3968326 cm 2.3708631 m World muIoni + 51 -66.317422 cm -2.4097807 m -7.1062839 m 45.156157 MeV 9.517046 keV 4.9772844 cm 2.420636 m World muIoni + 52 -66.577519 cm -2.418419 m -7.1200853 m 45.152491 MeV 3.6659429 keV 1.6488349 cm 2.4371243 m World muIoni + 53 -66.772191 cm -2.4248388 m -7.1303405 m 45.145668 MeV 4.1664825 keV 1.2254474 cm 2.4493788 m World muIoni + 54 -70.976018 cm -2.562718 m -7.3511292 m 45.082148 MeV 60.916293 keV 26.367851 cm 2.7130573 m World muIoni + 55 -71.546214 cm -2.5820498 m -7.3818341 m 45.068593 MeV 7.18654 keV 3.6729032 cm 2.7497864 m World muIoni + 56 -72.979245 cm -2.6306284 m -7.4590465 m 45.043228 MeV 23.998888 keV 9.2341924 cm 2.8421283 m World muIoni + 57 -73.772966 cm -2.6574144 m -7.5014258 m 45.031284 MeV 10.844426 keV 5.0759228 cm 2.8928875 m World muIoni + 58 -75.846092 cm -2.7276793 m -7.6121437 m 45.001232 MeV 29.038714 keV 13.276098 cm 3.0256485 m World muIoni + 59 -78.890774 cm -2.8325616 m -7.7762781 m 44.954512 MeV 45.691005 keV 19.714904 cm 3.2227975 m World muIoni + 60 -79.411752 cm -2.8510925 m -7.8049582 m 44.946259 MeV 5.728653 keV 3.454108 cm 3.2573386 m World muIoni + 61 -79.953616 cm -2.8702757 m -7.8347372 m 44.93777 MeV 8.4895745 keV 3.5835044 cm 3.2931737 m World muIoni + 62 -80.505608 cm -2.8897583 m -7.8649028 m 44.927862 MeV 7.3385703 keV 3.6331889 cm 3.3295055 m World muIoni + 63 -81.091042 cm -2.9101909 m -7.8965244 m 44.92081 MeV 6.0485463 keV 3.8101043 cm 3.3676066 m World muIoni + 64 -81.34282 cm -2.9190685 m -7.9102105 m 44.918523 MeV 1.0646676 keV 1.6506348 cm 3.3841129 m World muIoni + 65 -81.392176 cm -2.9208248 m -7.9129142 m 44.91316 MeV 634.67186 eV 3.2616401 mm 3.3873746 m World muIoni + 66 -81.422967 cm -2.9219251 m -7.9146091 m 44.911599 MeV 292.10222 eV 2.0441171 mm 3.3894187 m World muIoni + 67 -82.437247 cm -2.9581193 m -7.9704111 m 44.898311 MeV 13.28753 keV 6.7281262 cm 3.4567 m World muIoni + 68 -82.519029 cm -2.9610234 m -7.974882 m 44.895252 MeV 1.2129281 keV 5.3936326 mm 3.4620936 m World muIoni + 69 -83.172196 cm -2.9848711 m -8.0111361 m 44.889135 MeV 6.1169668 keV 4.3883378 cm 3.505977 m World muIoni + 70 -83.845164 cm -3.0093511 m -8.0482439 m 44.877235 MeV 11.899235 keV 4.4961672 cm 3.5509386 m World muIoni + 71 -84.352028 cm -3.0278442 m -8.0762254 m 44.861925 MeV 5.6684388 keV 3.3921242 cm 3.5848599 m World muIoni + 72 -84.920338 cm -3.0485653 m -8.1075904 m 44.85375 MeV 5.9645321 keV 3.80188 cm 3.6228787 m World muIoni + 73 -85.428013 cm -3.067295 m -8.1358718 m 44.844872 MeV 7.2176772 keV 3.42988 cm 3.6571775 m World muIoni + 74 -85.474562 cm -3.069031 m -8.1385025 m 44.84251 MeV 249.42545 eV 3.1860989 mm 3.6603636 m World muIoni + 75 -85.846891 cm -3.0829334 m -8.1595491 m 44.835695 MeV 5.0677136 keV 2.5497069 cm 3.6858606 m World muIoni + 76 -86.160754 cm -3.0945678 m -8.1772215 m 44.827041 MeV 4.7895115 keV 2.1389781 cm 3.7072504 m World muIoni + 77 -86.534637 cm -3.1084963 m -8.1984243 m 44.821543 MeV 4.4804712 keV 2.5642638 cm 3.7328931 m World muIoni + 78 -87.941883 cm -3.160637 m -8.2776962 m 44.748448 MeV 23.303068 keV 9.5920482 cm 3.8288135 m World muIoni + 79 -88.260324 cm -3.1724607 m -8.295684 m 44.741423 MeV 4.5879202 keV 2.1760155 cm 3.8505737 m World muIoni + 80 -89.662492 cm -3.2243026 m -8.3746729 m 44.718279 MeV 21.998031 keV 9.5516825 cm 3.9460905 m World muIoni + 81 -89.967769 cm -3.2355249 m -8.3918182 m 44.7126 MeV 3.8184415 keV 2.0717641 cm 3.9668082 m World muIoni + 82 -90.391242 cm -3.2511177 m -8.4156371 m 44.705086 MeV 5.2837185 keV 2.8782126 cm 3.9955903 m World muIoni + 83 -91.277329 cm -3.2830911 m -8.4646518 m 44.69289 MeV 10.497783 keV 5.9188353 cm 4.0547786 m World muIoni + 84 -91.373798 cm -3.2866304 m -8.4700694 m 44.685911 MeV 760.99214 eV 6.5427688 mm 4.0613214 m World muIoni + 85 -93.858822 cm -3.3778036 m -8.6094349 m 44.648911 MeV 34.208113 keV 16.838364 cm 4.2297051 m World muIoni + 86 -96.616909 cm -3.4774486 m -8.762863 m 44.60317 MeV 40.58478 keV 18.501427 cm 4.4147193 m World muIoni + 87 -96.824132 cm -3.4850259 m -8.7745015 m 44.454964 MeV 3.300698 keV 1.4041472 cm 4.4287608 m World muIoni + 88 -97.202226 cm -3.4991418 m -8.795987 m 44.449299 MeV 5.6651401 keV 2.5984292 cm 4.4547451 m World muIoni + 89 -97.399239 cm -3.5065117 m -8.8072365 m 44.446064 MeV 2.2392532 keV 1.3592216 cm 4.4683373 m World muIoni + 90 -97.634465 cm -3.5153239 m -8.8206881 m 44.442363 MeV 2.3479876 keV 1.6252165 cm 4.4845895 m World muIoni + 91 -97.666784 cm -3.5165298 m -8.8225309 m 44.440931 MeV 150.06781 eV 2.2258593 mm 4.4868153 m World muIoni + 92 -98.212135 cm -3.5369248 m -8.8536807 m 44.430446 MeV 9.2639014 keV 3.7629898 cm 4.5244452 m World muIoni + 93 -98.454068 cm -3.5458838 m -8.8673047 m 44.426824 MeV 3.6217724 keV 1.648424 cm 4.5409295 m World muIoni + 94 -99.343831 cm -3.5788092 m -8.9175627 m 44.41388 MeV 11.516771 keV 6.0738194 cm 4.6016677 m World muIoni + 95 -99.400119 cm -3.5808935 m -8.9207436 m 44.398712 MeV 359.57239 eV 3.8443831 mm 4.605512 m World muIoni + 96 -1.0071948 m -3.6293923 m -8.9946694 m 44.375056 MeV 22.601695 keV 8.9393846 cm 4.6949059 m World muIoni + 97 -1.0093207 m -3.6372233 m -9.0066411 m 44.353561 MeV 3.7939682 keV 1.4462509 cm 4.7093684 m World muIoni + 98 -1.0153632 m -3.6598294 m -9.0411371 m 44.342854 MeV 6.8184703 keV 4.1683643 cm 4.751052 m World muIoni + 99 -1.0189251 m -3.6728992 m -9.0609875 m 44.335948 MeV 3.7451179 keV 2.4032157 cm 4.7750842 m World muIoni + 100 -1.0193641 m -3.6745134 m -9.0634364 m 44.333745 MeV 896.80197 eV 2.9657521 mm 4.77805 m World muIoni + 101 -1.0282804 m -3.7073131 m -9.1132123 m 44.322023 MeV 10.214548 keV 6.0274064 cm 4.838324 m World muIoni + 102 -1.0361807 m -3.7367212 m -9.1576595 m 44.305143 MeV 13.443995 keV 5.3877845 cm 4.8922019 m World muIoni + 103 -1.047805 m -3.7796306 m -9.2230071 m 44.285894 MeV 19.248688 keV 7.9035852 cm 4.9712377 m World muIoni + 104 -1.0585016 m -3.819013 m -9.2829896 m 44.270376 MeV 14.262305 keV 7.2548592 cm 5.0437863 m World muIoni + 105 -1.0646624 m -3.8411674 m -9.3166234 m 44.25944 MeV 9.8954159 keV 4.0743246 cm 5.0845296 m World muIoni + 106 -1.0687414 m -3.8558553 m -9.3389242 m 44.205565 MeV 4.8801008 keV 2.7012954 cm 5.1115425 m World muIoni + 107 -1.0699716 m -3.8603772 m -9.3457481 m 44.198476 MeV 2.4699144 keV 8.2779956 mm 5.1198205 m World muIoni + 108 -1.0748302 m -3.8781554 m -9.3725571 m 44.189412 MeV 7.8089092 keV 3.2533029 cm 5.1523535 m World muIoni + 109 -1.0785298 m -3.8918014 m -9.3930849 m 44.183149 MeV 6.2626787 keV 2.4925651 cm 5.1772792 m World muIoni + 110 -1.0887542 m -3.9291643 m -9.449277 m 44.167555 MeV 14.033871 keV 6.8250219 cm 5.2455294 m World muIoni + 111 -1.1147312 m -4.0220129 m -9.5893061 m 44.127606 MeV 36.967322 keV 17.001191 cm 5.4155413 m World muIoni + 112 -1.1292307 m -4.0718992 m -9.6644303 m 44.100896 MeV 24.869887 keV 9.1337537 cm 5.5068789 m World muIoni + 113 -1.1331607 m -4.085538 m -9.6848259 m 44.093809 MeV 5.8854632 keV 2.4848414 cm 5.5317273 m World muIoni + 114 -1.149399 m -4.1414709 m -9.7684779 m 44.071394 MeV 20.734815 keV 10.193073 cm 5.633658 m World muIoni + 115 -1.1495813 m -4.142091 m -9.7694048 m 44.068974 MeV 1.0513102 keV 1.1299571 mm 5.634788 m World muIoni + 116 -1.1515017 m -4.1486203 m -9.7791733 m 44.045884 MeV 2.0307697 keV 1.1905613 cm 5.6466936 m World muIoni + 117 -1.1879651 m -4.2731546 m -9.9649465 m 43.991771 MeV 52.361354 keV 22.660672 cm 5.8733003 m World muIoni + 118 -1.1881648 m -4.2738399 m -9.9659676 m 43.988387 MeV 46.995699 eV 1.2458694 mm 5.8745462 m World muIoni + 119 -1.1891598 m -4.2772579 m -9.9710541 m 43.985361 MeV 1.9024647 keV 6.2084706 mm 5.8807546 m World muIoni + 120 -1.2019779 m -4.3211232 m -10.036316 m 43.966029 MeV 16.939991 keV 7.9671806 cm 5.9604264 m World muIoni + 121 -1.2125869 m -4.3578825 m -10.091212 m 43.953285 MeV 11.648757 keV 6.6913587 cm 6.02734 m World muIoni + 122 -1.217988 m -4.3765344 m -10.119124 m 43.938636 MeV 9.798494 keV 3.4001634 cm 6.0613417 m World muIoni + 123 -1.2204661 m -4.3850261 m -10.131836 m 43.930702 MeV 6.7870046 keV 1.5487298 cm 6.076829 m World muIoni + 124 -1.2213761 m -4.3881518 m -10.136517 m 43.928863 MeV 705.53701 eV 5.7013612 mm 6.0825303 m World muIoni + 125 -1.2415121 m -4.4562272 m -10.238919 m 43.905531 MeV 23.332033 keV 12.46045 cm 6.2071348 m World muIoni + 126 -1.2472483 m -4.4747483 m -10.267238 m 43.635896 MeV 5.0487749 keV 3.4320436 cm 6.2414553 m World muIoni + 127 -1.2546621 m -4.49906 m -10.304085 m 43.621779 MeV 9.4256489 keV 4.476329 cm 6.2862185 m World muIoni + 128 -1.2558858 m -4.5030872 m -10.310168 m 43.613337 MeV 838.05021 eV 7.3970576 mm 6.2936156 m World muIoni + 129 -1.2638201 m -4.5290334 m -10.349412 m 43.600763 MeV 10.130769 keV 4.7710369 cm 6.341326 m World muIoni + 130 -1.2729007 m -4.5585836 m -10.394131 m 43.588655 MeV 11.017417 keV 5.436369 cm 6.3956897 m World muIoni + 131 -1.2897649 m -4.6134406 m -10.47703 m 43.569437 MeV 18.080258 keV 10.08268 cm 6.4965165 m World muIoni + 132 -1.3041391 m -4.660342 m -10.547581 m 43.555457 MeV 13.980138 keV 8.5929418 cm 6.5824459 m World muIoni + 133 -1.3098042 m -4.6791704 m -10.575985 m 43.545903 MeV 6.8205864 keV 3.4545245 cm 6.6169911 m World muIoni + 134 -1.3220193 m -4.7196517 m -10.636837 m 43.531238 MeV 14.664619 keV 7.4100502 cm 6.6910916 m World muIoni + 135 -1.3350717 m -4.7632654 m -10.701839 m 43.505452 MeV 17.574034 keV 7.9359221 cm 6.7704508 m World muIoni + 136 -1.345176 m -4.7971346 m -10.752542 m 43.476746 MeV 13.690487 keV 6.1806514 cm 6.8322574 m World muIoni + 137 -1.3494358 m -4.8111958 m -10.773499 m 43.464849 MeV 4.1663294 keV 2.5593537 cm 6.8578509 m World muIoni + 138 -1.3503534 m -4.8142025 m -10.777986 m 43.462699 MeV 2.1496659 keV 5.4788167 mm 6.8633297 m OutOfWorld Transportation +Track (trackID 114, parentID 3) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.601178(mm),-0.68414119(mm),79.364855(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.652757981345(mm),2.0530331642788(mm),79.003106338374(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1935,7 +2210,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.780353(mm),1.2713477(mm),78.980608(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.615854(mm),2.2290785(mm),79.185941(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1944,7 +2219,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.367945(mm),2.6872243(mm),78.700673(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.210419(mm),-3.9464963(mm),78.728449(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1953,7 +2228,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.25013(mm),-3.7114443(mm),78.721447(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.244724(mm),0.18758703(mm),78.7224(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1962,7 +2237,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.957195(mm),0.19601886(mm),78.773099(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.544459(mm),1.6763466(mm),78.669548(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1971,7 +2246,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.250576(mm),-3.4370482(mm),79.074022(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.158599(mm),1.6725782(mm),78.561259(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1980,7 +2255,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.395342(mm),1.1764935(mm),78.695842(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.698549(mm),3.8262829(mm),78.642378(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1989,7 +2264,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.200718(mm),2.5663706(mm),79.082813(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.265355(mm),-3.5321036(mm),78.895089(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -1998,7 +2273,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.072742(mm),2.2094266(mm),79.105379(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.893043(mm),-2.6306021(mm),78.608084(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2007,16 +2282,47 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.543089(mm),-1.5168759(mm),78.317136(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.529573(mm),1.3267482(mm),78.8485(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = pi+, Track ID = 5, Parent ID = 1 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -1.21 cm 1.32 mm 7.07 cm 27.1 MeV 0 eV 0 fm 0 fm Target initStep + 1 -1.1348447 cm 1.3266842 mm 7.0331528 cm 22.892897 MeV 4.1788995 MeV 812.39326 um 812.39326 um Target hIoni + 2 -1.0798458 cm 1.3573217 mm 7.0000012 cm 19.353151 MeV 3.5397457 MeV 648.7991 um 1.4611924 mm Target hIoni + 3 -1.0360874 cm 1.4709645 mm 6.9745193 cm 15.709913 MeV 3.6432385 MeV 524.14249 um 1.9853348 mm Target hIoni + 4 -9.9755095 mm 1.4857598 mm 6.9619959 cm 12.227764 MeV 3.4821487 MeV 410.07504 um 2.3954099 mm Target hIoni + 5 -9.6972355 mm 1.5754839 mm 6.9513805 cm 9.3882634 MeV 2.8395007 MeV 315.34252 um 2.7107524 mm Target hIoni + 6 -9.4743629 mm 1.6186848 mm 6.9426178 cm 6.6498022 MeV 2.7384612 MeV 247.64041 um 2.9583928 mm Target hIoni + 7 -9.3403566 mm 1.7282481 mm 6.9370607 cm 3.5363519 MeV 3.1134503 MeV 186.40357 um 3.1447964 mm Target hIoni + 8 -9.282731 mm 1.782476 mm 6.9339365 cm 77.594466 keV 3.4587574 MeV 88.351119 um 3.2331475 mm Target hIoni + 9 -9.2826168 mm 1.7826356 mm 6.9339334 cm 1.3877788e-08 meV 77.594466 keV 646.33317 nm 3.2337938 mm Target hIoni + 10 -9.2826168 mm 1.7826356 mm 6.9339334 cm 0 eV 1.3877788e-08 meV 8.1547565 fm 3.2337938 mm Target hIoni + 11 -9.2826168 mm 1.7826356 mm 6.9339334 cm 0 eV 0 eV 0 fm 3.2337938 mm Target Decay +Track (trackID 5, parentID 1) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = mu+, Track ID = 23, Parent ID = 5 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -9.28 mm 1.78 mm 6.93 cm 4.12 MeV 0 eV 0 fm 0 fm Target initStep + 1 -9.2943051 mm 1.8993705 mm 6.9357007 cm 1.4746625 MeV 2.6451501 MeV 133.4438 um 133.4438 um Target muIoni + 2 -9.2919035 mm 1.9053948 mm 6.9371848 cm 153.9436 keV 1.3207189 MeV 22.216357 um 155.66016 um Target muIoni + 3 -9.2920374 mm 1.9051618 mm 6.9371891 cm 0 eV 153.9436 keV 950.69251 nm 156.61085 um Target muIoni + 4 -9.2920374 mm 1.9051618 mm 6.9371891 cm 0 eV 0 eV 0 fm 156.61085 um Target DecayWithSpin +Track (trackID 23, parentID 5) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.936944(mm),-0.25242554(mm),78.952997(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.056776(mm),-1.24683(mm),79.108194(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2025,7 +2331,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.217419(mm),-0.024417732(mm),79.079868(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.203857(mm),1.611277(mm),78.376952(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2034,7 +2340,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.852138(mm),-2.6027222(mm),78.615296(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.657193(mm),-1.2231885(mm),79.002324(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2043,7 +2349,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.124859(mm),-0.7709185(mm),79.096189(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.677947(mm),1.320366(mm),78.822338(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2052,7 +2358,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.711575(mm),0.34241804(mm),78.287427(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.160091(mm),-0.067648043(mm),79.442631(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2061,7 +2367,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.7343(mm),-0.33920049(mm),78.988728(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.72871(mm),-0.043272356(mm),78.63706(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2070,7 +2376,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.192144(mm),0.45831905(mm),78.20269(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.144659(mm),-1.3388543(mm),78.38739(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2079,7 +2385,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.617456(mm),0.79961121(mm),78.656677(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.187165(mm),-0.16114804(mm),79.437857(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2088,7 +2394,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.423417(mm),2.8164623(mm),79.219872(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.381166(mm),1.7481692(mm),78.345687(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2097,7 +2403,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.177215(mm),1.7424411(mm),78.734303(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.14151(mm),-2.1811041(mm),78.387945(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2106,7 +2412,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.39337(mm),-3.0721034(mm),78.696189(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.242977(mm),1.3796704(mm),78.193727(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2115,7 +2421,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.594313(mm),-2.3341908(mm),78.308104(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.925124(mm),2.3106719(mm),79.307735(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2124,7 +2430,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.618161(mm),-1.704788(mm),79.361861(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.835454(mm),-2.2428303(mm),79.323546(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2133,7 +2439,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.343743(mm),2.1938472(mm),78.881267(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.280634(mm),0.20101736(mm),78.363414(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2142,7 +2448,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.973255(mm),2.9913085(mm),78.946594(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.319664(mm),-1.7318707(mm),78.180205(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2151,7 +2457,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.701323(mm),-0.65642652(mm),79.17087(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.420798(mm),2.2353897(mm),79.044007(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2160,7 +2466,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.581126(mm),-0.5370372(mm),78.134102(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.629286(mm),-1.9943242(mm),78.301937(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2169,7 +2475,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.559793(mm),1.0373736(mm),79.372153(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.773387(mm),0.7108101(mm),79.33449(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2178,7 +2484,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.366053(mm),1.0799198(mm),79.229987(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.964258(mm),0.1534843(mm),78.771853(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2187,7 +2493,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.352513(mm),1.7528792(mm),78.174413(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.755209(mm),-2.0713364(mm),79.161368(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2196,7 +2502,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.158415(mm),2.2401811(mm),78.561291(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.08771(mm),1.2010635(mm),78.926413(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2205,7 +2511,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.898677(mm),-2.6486603(mm),78.430763(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.673661(mm),0.43279863(mm),78.823094(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2214,7 +2520,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.306259(mm),-2.1225801(mm),79.064203(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.793543(mm),1.0152339(mm),78.449301(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2223,7 +2529,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.86359(mm),-3.42436(mm),78.965931(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.147939(mm),1.6890874(mm),78.915793(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2232,7 +2538,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.52593(mm),-2.745931(mm),78.672816(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.065266(mm),1.2943472(mm),79.283024(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2241,7 +2547,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.091917(mm),-3.4741528(mm),78.925671(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.412014(mm),0.97008722(mm),79.39821(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2250,7 +2556,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.1591(mm),0.10128271(mm),78.913825(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.848835(mm),0.75359797(mm),78.792206(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2259,7 +2565,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.648055(mm),-0.61404671(mm),78.122301(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.93962(mm),-0.45887431(mm),78.599871(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2268,7 +2574,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.673674(mm),-1.1398405(mm),78.999418(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.967205(mm),3.1778159(mm),78.947661(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2277,7 +2583,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.918035(mm),-0.010448459(mm),78.251023(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.090173(mm),2.4239641(mm),78.925978(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2286,7 +2592,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.760224(mm),-1.7713341(mm),79.160484(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.656414(mm),1.1807588(mm),79.178789(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2295,7 +2601,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.923222(mm),0.21060964(mm),79.30807(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.372493(mm),-0.078287188(mm),79.228852(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2304,7 +2610,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.240374(mm),-1.9080681(mm),79.252148(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.741846(mm),0.55828454(mm),78.987398(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2313,7 +2619,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.295059(mm),-1.7681369(mm),78.713524(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.986679(mm),-1.2943942(mm),78.591573(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2322,7 +2628,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.08692(mm),1.4976594(mm),79.102879(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.546147(mm),1.1138465(mm),78.14027(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2331,7 +2637,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.659375(mm),-0.53062104(mm),78.472959(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.66835(mm),-2.1058442(mm),79.353011(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2340,7 +2646,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.283191(mm),3.4374801(mm),79.068271(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.751927(mm),-1.9470804(mm),79.161947(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2349,7 +2655,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.176972(mm),-1.6157928(mm),78.205365(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.601205(mm),0.1245159(mm),78.835869(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2358,7 +2664,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.310455(mm),-1.3444456(mm),78.887137(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.40613(mm),1.0344782(mm),78.693939(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2367,7 +2673,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.872245(mm),-0.92637298(mm),78.964405(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.604014(mm),3.3959846(mm),78.48272(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2376,7 +2682,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.803565(mm),-0.91807858(mm),78.271207(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.432641(mm),-3.1765303(mm),78.512938(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2385,7 +2691,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.67976(mm),-1.245008(mm),78.822018(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.986631(mm),2.384192(mm),78.415255(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2394,7 +2700,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.979568(mm),2.3357658(mm),78.769154(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.674066(mm),0.5481401(mm),78.117714(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2403,7 +2709,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.501071(mm),-1.5511123(mm),79.029853(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.029193(mm),-1.1936182(mm),78.936731(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2412,7 +2718,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.252021(mm),1.4337775(mm),79.426421(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.552241(mm),0.59648596(mm),79.02083(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2421,7 +2727,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.602231(mm),1.0897682(mm),78.835689(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.996674(mm),1.6462984(mm),78.237157(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2430,7 +2736,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.459657(mm),-2.2833726(mm),78.331847(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.801994(mm),2.764623(mm),78.800465(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2439,7 +2745,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.422207(mm),-1.3505842(mm),78.514778(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.662371(mm),-2.8171365(mm),79.177738(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2448,7 +2754,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.917062(mm),1.9127508(mm),78.780175(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.662621(mm),-1.4504505(mm),79.354021(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2457,7 +2763,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.658495(mm),-0.081687949(mm),78.473114(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.961012(mm),2.6776971(mm),78.419772(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2466,7 +2772,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.65593(mm),1.05944(mm),78.120912(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.649149(mm),3.5863987(mm),78.651089(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2475,7 +2781,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.095615(mm),-2.3033257(mm),79.277673(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.56445(mm),0.62831211(mm),78.489696(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2484,7 +2790,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.143133(mm),-0.3719701(mm),78.91664(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.771997(mm),1.1060053(mm),78.4531(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2493,7 +2799,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.156476(mm),-1.6935046(mm),78.73796(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.031988(mm),-2.4563555(mm),78.759911(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2502,7 +2808,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.376912(mm),2.348935(mm),78.522765(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.27781(mm),-3.9258392(mm),78.716566(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2511,7 +2817,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.938916(mm),-2.9567254(mm),79.128976(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.857092(mm),-0.85820083(mm),78.261769(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2520,7 +2826,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.228546(mm),-1.0004897(mm),78.372598(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.633002(mm),-1.8436317(mm),78.830263(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2529,7 +2835,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.308089(mm),1.7077786(mm),78.358573(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.105196(mm),3.1532943(mm),78.923329(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2538,7 +2844,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.673567(mm),-3.1995189(mm),79.175764(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.428155(mm),-1.354676(mm),78.161075(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2547,7 +2853,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.827736(mm),-0.72173824(mm),79.14858(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.639872(mm),-0.42804458(mm),78.829051(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2556,7 +2862,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.882322(mm),2.3931203(mm),78.962628(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.614474(mm),2.7634136(mm),78.304549(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2565,7 +2871,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.424484(mm),-2.1840175(mm),79.219684(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.751007(mm),2.3493972(mm),79.162109(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2574,7 +2880,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.629751(mm),-0.40508808(mm),78.478182(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.549284(mm),0.22736722(mm),78.139717(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2583,7 +2889,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.200613(mm),-0.8146909(mm),79.259159(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.122573(mm),-3.1786375(mm),78.920265(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2592,7 +2898,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.642312(mm),-1.9202406(mm),79.357602(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.652133(mm),3.1789311(mm),79.003216(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2601,7 +2907,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.833172(mm),0.91913381(mm),78.61864(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.091336(mm),3.1656524(mm),79.1021(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2610,7 +2916,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.975644(mm),1.2503479(mm),78.946173(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.286588(mm),-3.7804653(mm),78.715018(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2619,7 +2925,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.899881(mm),-2.8595122(mm),78.430551(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.437422(mm),-1.0702544(mm),78.512095(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2628,7 +2934,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.210475(mm),-1.2487766(mm),78.728439(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.279347(mm),-2.7436204(mm),78.363641(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2637,7 +2943,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.691394(mm),-0.45579045(mm),79.348948(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.559113(mm),-2.3471002(mm),78.490638(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2646,7 +2952,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.66922(mm),2.9299606(mm),78.823877(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.352712(mm),0.77474813(mm),79.408666(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2655,7 +2961,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.719296(mm),2.5876973(mm),79.167701(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.225445(mm),-2.3382104(mm),79.078453(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2664,7 +2970,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.978585(mm),0.36007043(mm),78.240346(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.606599(mm),-0.7484417(mm),78.658592(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2673,7 +2979,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.015328(mm),2.5431841(mm),78.586522(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.836003(mm),0.88577841(mm),79.147122(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2682,7 +2988,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.582223(mm),2.8630157(mm),78.310236(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.061892(mm),0.4676295(mm),78.401984(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2691,7 +2997,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.383845(mm),1.7939307(mm),78.345215(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.152142(mm),1.8146977(mm),78.738724(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2700,7 +3006,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.125248(mm),-2.920082(mm),78.390813(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.117426(mm),-0.58800031(mm),79.273827(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2709,7 +3015,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.064941(mm),1.4670737(mm),78.930427(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.280702(mm),2.1313897(mm),79.245037(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2718,7 +3024,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.296989(mm),-1.3976814(mm),78.184203(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.652988(mm),3.1154793(mm),78.474085(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2727,7 +3033,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.647009(mm),-3.9132664(mm),78.651466(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.195208(mm),2.7290538(mm),79.083785(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2736,7 +3042,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.263819(mm),-0.62961273(mm),78.190052(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.82268(mm),2.0681807(mm),78.267836(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2745,7 +3051,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.626913(mm),3.0767003(mm),78.478683(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.736373(mm),2.3230088(mm),79.16469(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2754,16 +3060,46 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.019161(mm),-2.5242959(mm),78.9385(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.367462(mm),0.93996286(mm),78.348104(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = pi+, Track ID = 6, Parent ID = 1 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -1.5 cm 936 um 7.07 cm 22.6 MeV 0 eV 0 fm 0 fm Target initStep + 1 -1.5299478 cm 925.49088 um 7.1268654 cm 18.5889 MeV 3.9652678 MeV 636.30321 um 636.30321 um Target hIoni + 2 -1.5510697 cm 942.02812 um 7.1714853 cm 15.604132 MeV 2.9847682 MeV 498.98307 um 1.1352863 mm Target hIoni + 3 -1.5763431 cm 1.0284512 mm 7.2015824 cm 12.854138 MeV 2.7499937 MeV 406.98949 um 1.5422758 mm Target hIoni + 4 -1.5978543 cm 1.1348941 mm 7.223797 cm 9.8209353 MeV 3.0332025 MeV 331.35681 um 1.8736326 mm Target hIoni + 5 -1.6174711 cm 1.191189 mm 7.2387905 cm 7.0002127 MeV 2.8207226 MeV 257.51594 um 2.1311485 mm Target hIoni + 6 -1.6313263 cm 1.2558218 mm 7.2500394 cm 3.7860171 MeV 3.2141956 MeV 194.36407 um 2.3255126 mm Target hIoni + 7 -1.6346554 cm 1.3158229 mm 7.2567989 cm 255.22031 keV 3.5307968 MeV 100.04355 um 2.4255562 mm Target hIoni + 8 -1.6347238 cm 1.3164716 mm 7.2568265 cm 22.498875 keV 232.72143 keV 1.3627334 um 2.4269189 mm Target hIoni + 9 -1.6347251 cm 1.3164716 mm 7.2568248 cm 0 eV 22.498875 keV 331.10807 nm 2.42725 mm Target hIoni + 10 -1.6347251 cm 1.3164716 mm 7.2568248 cm 0 eV 0 eV 0 fm 2.42725 mm Target Decay +Track (trackID 6, parentID 1) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = mu+, Track ID = 20, Parent ID = 6 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -1.63 cm 1.32 mm 7.26 cm 4.12 MeV 0 eV 0 fm 0 fm Target initStep + 1 -1.6410067 cm 1.2590717 mm 7.2651673 cm 1.0373212 MeV 3.0824915 MeV 133.4438 um 133.4438 um Target muIoni + 2 -1.6404136 cm 1.2528835 mm 7.2656346 cm 19.200633 keV 1.0181205 MeV 11.738787 um 145.18259 um Target muIoni + 3 -1.6404122 cm 1.2528796 mm 7.2656354 cm 0 eV 19.200633 keV 304.98642 nm 145.48757 um Target muIoni + 4 -1.6404122 cm 1.2528796 mm 7.2656354 cm 0 eV 0 eV 0 fm 145.48757 um Target DecayWithSpin +Track (trackID 20, parentID 6) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.887017(mm),-1.9055472(mm),78.609146(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.015812(mm),-1.9191527(mm),79.291744(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2772,7 +3108,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.311848(mm),-0.65324903(mm),79.415872(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.617135(mm),3.0953811(mm),79.009388(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2781,7 +3117,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.401413(mm),0.43588917(mm),79.223752(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.324629(mm),-2.3107272(mm),78.531983(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2790,7 +3126,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.233928(mm),0.87079224(mm),78.371649(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.184458(mm),0.2833931(mm),78.909353(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2799,7 +3135,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.583852(mm),3.7196631(mm),78.838929(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.001592(mm),1.9097754(mm),79.294251(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2808,7 +3144,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.596104(mm),1.8023502(mm),79.013096(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.956321(mm),2.2155908(mm),78.94958(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2817,7 +3153,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.772861(mm),2.3942906(mm),79.158256(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.904921(mm),-1.742613(mm),78.253335(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2826,7 +3162,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.289981(mm),0.61771063(mm),79.067074(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.254303(mm),1.6413024(mm),78.368057(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2835,7 +3171,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.259065(mm),3.0144471(mm),79.072525(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.692686(mm),1.7833738(mm),79.34872(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2844,7 +3180,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.281163(mm),-0.18847712(mm),79.068628(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.258171(mm),3.0549754(mm),79.072683(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2853,7 +3189,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.401361(mm),2.5142652(mm),79.223761(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.63688(mm),-0.56580629(mm),79.182233(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2862,7 +3198,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.909151(mm),-3.3928327(mm),79.134224(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.828837(mm),0.24802891(mm),78.972059(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2871,7 +3207,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.746087(mm),1.2191921(mm),78.281342(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.207381(mm),-1.5801343(mm),78.728984(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2880,7 +3216,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.582129(mm),1.268697(mm),79.368214(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.669329(mm),0.28073153(mm),79.352838(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2889,7 +3225,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.669276(mm),-0.59196434(mm),78.294886(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.631019(mm),1.2976005(mm),78.830612(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2898,7 +3234,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.730495(mm),-1.2542253(mm),79.165726(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.950176(mm),3.6700397(mm),78.598009(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2907,7 +3243,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.656927(mm),-1.3526318(mm),78.649717(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.191281(mm),-1.9133797(mm),79.260804(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2916,7 +3252,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.549813(mm),0.031266034(mm),78.492277(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.864445(mm),-1.689278(mm),78.613126(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2925,7 +3261,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.121027(mm),0.99880835(mm),78.391557(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.525487(mm),0.78522704(mm),79.025548(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2934,7 +3270,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.773101(mm),-3.8265032(mm),78.981887(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.052078(mm),2.8814609(mm),78.756368(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2943,7 +3279,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.182686(mm),1.903835(mm),78.557012(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.594919(mm),3.2560955(mm),79.013305(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2952,7 +3288,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.640982(mm),1.0474488(mm),79.18151(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.459565(mm),1.4507947(mm),78.684518(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2961,7 +3297,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.981937(mm),2.6885494(mm),78.945063(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.211804(mm),-3.0594865(mm),78.728204(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2970,7 +3306,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.585908(mm),-0.55112334(mm),79.191221(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.051633(mm),0.73216878(mm),78.403793(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2979,7 +3315,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.656711(mm),-1.8679212(mm),79.355063(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.065986(mm),1.8388502(mm),78.930243(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2988,7 +3324,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.540611(mm),-1.5310991(mm),78.317573(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.131312(mm),2.1014729(mm),79.271378(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -2997,7 +3333,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.267772(mm),3.279719(mm),78.542009(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.801191(mm),-1.9534674(mm),78.62428(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3006,7 +3342,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.230441(mm),0.10808253(mm),79.430226(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.772935(mm),0.53310427(mm),78.276608(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3015,7 +3351,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.673022(mm),1.7855247(mm),78.646879(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.509717(mm),1.4693824(mm),79.028328(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3024,7 +3360,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.93218(mm),-2.8525503(mm),78.77751(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.874799(mm),1.9765997(mm),78.258647(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3033,7 +3369,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.455405(mm),1.4045264(mm),79.214232(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.625806(mm),-1.0528361(mm),78.478878(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3042,7 +3378,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.32278(mm),-3.0355437(mm),78.708636(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.643594(mm),-1.7350814(mm),79.004722(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3051,7 +3387,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.383453(mm),-1.6541862(mm),79.403246(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.605619(mm),2.0905217(mm),78.835091(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3060,7 +3396,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.269472(mm),-2.7038575(mm),78.894363(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.29578(mm),-2.9970595(mm),79.066051(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3069,7 +3405,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.591602(mm),3.3168027(mm),78.837563(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.970848(mm),1.9677545(mm),78.241711(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3078,7 +3414,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.01224(mm),-3.2857878(mm),78.93972(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.554744(mm),2.0356146(mm),79.196716(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3087,7 +3423,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.784189(mm),-2.166495(mm),78.627277(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.715193(mm),0.1550749(mm),78.81577(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3096,7 +3432,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.865776(mm),-3.5895404(mm),78.965546(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.315085(mm),1.1259983(mm),78.533666(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3105,7 +3441,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.349714(mm),0.87420816(mm),79.409195(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.170108(mm),-3.6679516(mm),78.55923(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3114,7 +3450,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.876343(mm),-3.6175548(mm),78.611028(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.990619(mm),1.6703454(mm),79.296186(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3123,7 +3459,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.388896(mm),2.3259522(mm),79.049632(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.84594(mm),-0.99606712(mm),79.14537(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3132,7 +3468,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.281124(mm),-1.5452744(mm),78.187(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.843745(mm),3.5227826(mm),78.616776(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3141,7 +3477,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.051107(mm),1.2185256(mm),79.285521(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.805746(mm),0.22652524(mm),79.328784(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3150,7 +3486,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.268865(mm),-0.50459529(mm),78.189162(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.358515(mm),0.17838006(mm),78.526008(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3159,7 +3495,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.058688(mm),-0.46380904(mm),78.755203(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.447314(mm),0.32514945(mm),78.157697(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3168,7 +3504,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.123934(mm),-2.0173106(mm),79.096352(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.532612(mm),-1.8742717(mm),78.49531(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3177,7 +3513,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.39565(mm),-1.5985987(mm),78.51946(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.868659(mm),2.4326851(mm),78.965037(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3186,7 +3522,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.40849(mm),-0.48184055(mm),78.693523(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.081355(mm),-1.5774541(mm),78.398552(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3195,7 +3531,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.840905(mm),-2.1293059(mm),78.969931(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.712845(mm),-3.2072589(mm),78.46353(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3204,7 +3540,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.623914(mm),2.8900126(mm),78.831865(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.245529(mm),-0.14727684(mm),78.369604(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3213,7 +3549,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.861493(mm),-1.2772375(mm),78.43732(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.251507(mm),-0.63090765(mm),78.36855(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3222,7 +3558,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.607245(mm),-1.3996092(mm),78.658477(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.312531(mm),0.00058270526(mm),78.710444(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3231,7 +3567,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.939022(mm),2.3959632(mm),79.128957(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.833602(mm),2.1918889(mm),78.618565(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3240,7 +3576,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.311041(mm),2.5400709(mm),78.887033(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.263921(mm),-2.3028367(mm),78.719015(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3249,7 +3585,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.216915(mm),2.266691(mm),78.90363(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.968276(mm),-2.8175811(mm),78.947472(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3258,7 +3594,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.157328(mm),-0.32561508(mm),79.266791(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.28573(mm),0.46822757(mm),78.186188(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3267,7 +3603,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.08615(mm),2.3512984(mm),78.750361(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.1718(mm),-1.0179062(mm),79.264239(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3276,7 +3612,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.184989(mm),-3.0822269(mm),78.90926(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.284491(mm),-2.6444149(mm),79.068042(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3285,7 +3621,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.860669(mm),-2.5398013(mm),78.261138(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.409833(mm),-2.682357(mm),79.222268(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3294,7 +3630,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.565463(mm),3.02359(mm),78.665845(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.805384(mm),-1.0791457(mm),79.152521(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3303,7 +3639,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.670296(mm),1.1064078(mm),79.176341(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.221534(mm),-3.0325855(mm),78.726489(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3312,7 +3648,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.237627(mm),-1.4852659(mm),78.723651(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.626467(mm),-1.6691837(mm),78.302434(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3321,7 +3657,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.65928(mm),2.0939728(mm),79.35461(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.679979(mm),-2.1255798(mm),79.174633(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3330,7 +3666,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.609974(mm),-3.1734298(mm),78.481669(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.461073(mm),1.4892689(mm),78.331598(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3339,7 +3675,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.119888(mm),0.58768157(mm),78.744412(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.943461(mm),0.04243528(mm),78.422867(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3348,7 +3684,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.326634(mm),-2.1931604(mm),78.355303(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.447301(mm),-1.3493016(mm),79.039334(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3357,7 +3693,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.832873(mm),-1.9286669(mm),78.79502(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.368779(mm),-0.17215977(mm),78.700526(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3366,7 +3702,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.551981(mm),-2.8783092(mm),78.491895(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.828543(mm),-1.3896391(mm),78.619457(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3375,7 +3711,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.670439(mm),-0.78264374(mm),78.118354(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.792923(mm),-3.0002046(mm),78.978391(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3384,7 +3720,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.470872(mm),2.2842628(mm),78.682524(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.784903(mm),-2.4210064(mm),78.627152(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3393,7 +3729,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.256317(mm),2.5996089(mm),78.544029(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.511421(mm),-1.0769507(mm),78.675374(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3402,7 +3738,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.520991(mm),-1.078336(mm),78.673687(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.39608(mm),2.3528301(mm),79.224693(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3411,7 +3747,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.512471(mm),3.6229904(mm),79.027843(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.538617(mm),-0.56150466(mm),79.375886(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3420,7 +3756,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.196587(mm),-0.19538376(mm),79.083542(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.468328(mm),-0.03429975(mm),79.035626(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3429,7 +3765,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.75947(mm),2.5733115(mm),79.160617(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.590696(mm),-3.1034002(mm),79.014049(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3438,7 +3774,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.207388(mm),-2.1264122(mm),78.90531(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.988267(mm),-1.2594139(mm),78.238639(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3447,7 +3783,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.521915(mm),-1.5979833(mm),79.202504(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.823512(mm),2.1577147(mm),79.149325(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3456,7 +3792,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.994269(mm),3.0036283(mm),79.119216(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.719425(mm),-2.5910708(mm),78.638697(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3465,7 +3801,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.594194(mm),-1.5956195(mm),79.18976(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.992741(mm),0.99539748(mm),78.943158(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3474,7 +3810,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.311812(mm),-1.7974256(mm),78.534243(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.318754(mm),-1.8384115(mm),78.533019(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3483,7 +3819,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.001555(mm),-3.7594836(mm),78.941604(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.880244(mm),3.5390346(mm),78.61034(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3492,7 +3828,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.084838(mm),1.3665515(mm),79.279573(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.705718(mm),-2.0450831(mm),79.170095(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3501,7 +3837,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.953319(mm),3.1248777(mm),78.597455(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.69609(mm),-0.16623227(mm),78.466485(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3510,7 +3846,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.960781(mm),3.5592769(mm),78.948794(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.878348(mm),0.67990416(mm),78.787002(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3519,7 +3855,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.74691(mm),-3.3418553(mm),78.986505(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.829997(mm),-1.7289394(mm),78.442873(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3528,7 +3864,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.25106(mm),-2.1696258(mm),79.073936(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.38896(mm),2.0700506(mm),78.696967(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3537,7 +3873,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.492963(mm),-0.95700443(mm),79.031283(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.256936(mm),1.967957(mm),79.249227(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3546,7 +3882,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.35045(mm),0.22951979(mm),79.409065(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.402359(mm),-1.8500328(mm),79.223585(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3555,7 +3891,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.442827(mm),2.4016182(mm),78.687469(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.652794(mm),-3.0021712(mm),78.474119(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3564,7 +3900,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.784089(mm),3.7632747(mm),78.627295(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.683422(mm),0.6148417(mm),78.116064(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3573,7 +3909,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.536067(mm),3.0552003(mm),79.023682(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.887778(mm),-3.2202642(mm),79.137993(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3582,7 +3918,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.112359(mm),-2.0181805(mm),78.216758(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.435533(mm),-0.3495275(mm),78.865082(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3591,7 +3927,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.665982(mm),-3.2324981(mm),78.471794(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.426219(mm),-1.5210761(mm),78.51407(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3600,7 +3936,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.914503(mm),-3.0268285(mm),78.780627(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.434981(mm),0.31608263(mm),79.217833(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3609,7 +3945,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.499494(mm),-1.2939892(mm),78.677477(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.63726(mm),2.7423693(mm),78.653185(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3618,7 +3954,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.729643(mm),-2.1652126(mm),78.813223(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.882789(mm),0.97081858(mm),78.786219(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3627,7 +3963,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.888481(mm),0.48635259(mm),78.256234(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.341251(mm),-0.34599397(mm),78.176399(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3636,7 +3972,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.283297(mm),1.1446009(mm),79.420906(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.251097(mm),-0.85393024(mm),79.07393(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3645,7 +3981,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.547367(mm),0.40873541(mm),79.02169(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.239658(mm),0.78835098(mm),79.252274(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3654,7 +3990,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.995904(mm),0.32262025(mm),78.237293(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.429561(mm),-1.0902322(mm),79.395116(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3663,7 +3999,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.407363(mm),-2.2788183(mm),79.222703(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.472324(mm),-3.5146026(mm),78.682268(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3672,7 +4008,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.716427(mm),-2.3678486(mm),78.99188(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.890681(mm),3.2647471(mm),78.6085(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3681,7 +4017,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.026932(mm),-0.62801877(mm),78.584475(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.280147(mm),-3.2926233(mm),78.892481(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3690,7 +4026,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.704383(mm),0.37765322(mm),78.465023(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.730893(mm),0.43446995(mm),78.813002(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3699,7 +4035,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.808581(mm),-0.5746442(mm),78.975631(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.155879(mm),0.32387552(mm),79.443373(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3708,7 +4044,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.026363(mm),-1.1469754(mm),78.408249(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.835642(mm),-1.7018326(mm),79.323513(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3717,7 +4053,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.157189(mm),-3.0695185(mm),79.090488(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.659659(mm),-1.5792328(mm),79.178216(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3726,7 +4062,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.433042(mm),-3.0467608(mm),79.218175(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.487776(mm),-2.8099828(mm),78.503216(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3735,7 +4071,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.11364(mm),0.3695624(mm),78.216533(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.834596(mm),-1.841946(mm),78.442062(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3744,7 +4080,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.497443(mm),3.3950013(mm),78.854166(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.277269(mm),2.7038305(mm),78.892988(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3753,7 +4089,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.943012(mm),3.3341187(mm),78.7756(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.274505(mm),2.799389(mm),78.364495(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3762,7 +4098,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.535159(mm),-1.2714103(mm),79.376496(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.327092(mm),0.43929137(mm),78.884203(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3771,7 +4107,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.540895(mm),1.5098339(mm),79.199158(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.142028(mm),1.3139571(mm),79.093162(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3780,7 +4116,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.870887(mm),-1.4532464(mm),78.259336(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.623197(mm),-0.56441215(mm),79.008319(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3789,7 +4125,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.303588(mm),2.1466362(mm),79.241001(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.268447(mm),-3.8575022(mm),78.894544(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3798,7 +4134,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.856837(mm),0.53010532(mm),78.790795(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.221994(mm),-0.33674648(mm),78.197427(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3807,7 +4143,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.662984(mm),1.6185712(mm),78.295995(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.587226(mm),-2.0582762(mm),78.662008(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3816,7 +4152,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.585896(mm),3.2846939(mm),79.014896(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.66754(mm),-0.53531567(mm),78.824173(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3825,7 +4161,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.115906(mm),2.8905089(mm),78.568787(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.792145(mm),-3.7286611(mm),78.978529(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3834,7 +4170,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.123282(mm),0.17016377(mm),78.391159(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.63916(mm),-1.4973075(mm),78.300196(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3843,7 +4179,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.763771(mm),2.9107891(mm),78.630878(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.580189(mm),0.20666055(mm),78.134267(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3852,7 +4188,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.715263(mm),-2.0945146(mm),78.286777(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.524042(mm),-2.097123(mm),78.496822(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3861,7 +4197,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.094076(mm),-2.4541969(mm),78.396309(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.132445(mm),0.79745375(mm),79.271179(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3870,7 +4206,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.704004(mm),-2.5282679(mm),79.170397(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.963915(mm),-3.0749152(mm),79.124568(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3879,7 +4215,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.318767(mm),-2.9591261(mm),78.885671(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.840114(mm),-1.7165846(mm),78.97007(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3888,7 +4224,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.01287(mm),-0.17498428(mm),79.115936(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.70677(mm),-1.1064318(mm),79.346236(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3897,7 +4233,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.767667(mm),0.34136944(mm),79.159172(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.313747(mm),1.7421881(mm),79.23921(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3906,7 +4242,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.266257(mm),-1.3496372(mm),79.071257(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.390831(mm),-1.5163272(mm),78.52031(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3915,7 +4251,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.669596(mm),1.8665116(mm),79.176464(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.379374(mm),3.6175867(mm),78.52233(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3924,7 +4260,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.121472(mm),-1.6726763(mm),78.391478(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.49867(mm),-0.61606283(mm),78.677622(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3933,7 +4269,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.487611(mm),1.9739195(mm),78.326918(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.20237(mm),1.1888254(mm),79.082522(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3942,7 +4278,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.5833(mm),3.6548343(mm),78.6627(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.794064(mm),-1.7002052(mm),78.801863(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3951,7 +4287,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.93828(mm),-0.76845708(mm),78.600107(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.230699(mm),-0.46810265(mm),78.548546(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3960,7 +4296,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.150441(mm),-0.56704564(mm),78.915351(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.190663(mm),2.8086551(mm),78.555605(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3969,7 +4305,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.461994(mm),1.860298(mm),78.507762(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.580368(mm),1.048861(mm),78.839544(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3978,7 +4314,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.75038(mm),0.12598059(mm),79.338547(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.146194(mm),2.6728007(mm),79.092427(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3987,7 +4323,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.385272(mm),-1.4617143(mm),78.697617(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.835576(mm),3.5969504(mm),78.970871(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -3996,7 +4332,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.367604(mm),-1.2330406(mm),79.406041(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.502933(mm),2.850534(mm),79.029525(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4005,7 +4341,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.056769(mm),-2.0784753(mm),78.402887(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.957091(mm),-0.140214(mm),78.59679(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4014,7 +4350,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.741439(mm),3.6501674(mm),78.987469(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.537798(mm),-3.8757553(mm),78.670723(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4023,7 +4359,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.406359(mm),3.3708702(mm),79.046553(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.652929(mm),-3.6072966(mm),79.003076(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4032,7 +4368,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.841516(mm),1.3537809(mm),78.969823(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.893362(mm),-2.79752(mm),79.137008(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4041,7 +4377,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.451755(mm),-1.3091894(mm),79.214876(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.466085(mm),-1.2964955(mm),78.330714(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4050,7 +4386,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.689032(mm),-3.148692(mm),79.173037(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.031396(mm),2.6070167(mm),79.288996(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4059,7 +4395,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.504725(mm),0.43628704(mm),78.147574(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.244852(mm),-0.37457111(mm),78.722377(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4068,7 +4404,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.769182(mm),3.0741071(mm),78.982578(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.249458(mm),-0.2634818(mm),79.250546(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4077,7 +4413,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.934428(mm),-1.0777869(mm),78.424459(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.443003(mm),-3.4561798(mm),79.040092(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4086,7 +4422,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.481473(mm),0.85187101(mm),78.328001(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.08725(mm),3.0351778(mm),78.926494(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4095,7 +4431,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.314131(mm),-0.13453266(mm),78.710161(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.65014(mm),2.7174132(mm),78.29826(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4104,7 +4440,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.719593(mm),0.6975108(mm),78.638668(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.742332(mm),3.158553(mm),79.163639(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4113,7 +4449,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.322351(mm),1.0557497(mm),79.41402(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.939094(mm),1.5437025(mm),78.776291(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4122,7 +4458,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.619408(mm),0.15868882(mm),78.480006(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.066074(mm),2.0144069(mm),78.577574(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4131,7 +4467,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.557226(mm),1.178841(mm),79.196278(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.210411(mm),3.4091311(mm),78.72845(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4140,7 +4476,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.305845(mm),1.9230287(mm),79.240603(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.19421(mm),-1.6345866(mm),78.907634(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4149,7 +4485,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.413999(mm),-3.9678817(mm),78.868879(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.524117(mm),-2.1573962(mm),79.202116(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4158,7 +4494,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.779917(mm),-0.86292832(mm),78.804358(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.166823(mm),-2.0113946(mm),78.207155(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4167,7 +4503,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.236535(mm),-1.6530712(mm),79.252825(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.149601(mm),2.8170156(mm),79.091826(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4176,7 +4512,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.292534(mm),-1.8558557(mm),79.066624(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.57703(mm),-1.5202879(mm),79.192786(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4185,7 +4521,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.798713(mm),0.12555264(mm),79.330025(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.363128(mm),0.016658149(mm),78.701522(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4194,7 +4530,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.397794(mm),-1.2294878(mm),79.22439(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.482051(mm),-1.7054812(mm),79.033207(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4203,16 +4539,46 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.089774(mm),2.1751263(mm),79.102376(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.533293(mm),-2.283583(mm),78.847844(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = pi+, Track ID = 4, Parent ID = 1 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -9.8 mm -2.31 mm 5.77 cm 16.6 MeV 0 eV 0 fm 0 fm Target initStep + 1 -9.5827192 mm -2.6779891 mm 5.7734998 cm 13.324916 MeV 3.2607397 MeV 436.1183 um 436.1183 um Target hIoni + 2 -9.3868716 mm -2.9455736 mm 5.7807009 cm 10.410002 MeV 2.9149149 MeV 343.68232 um 779.80062 um Target hIoni + 3 -9.2500211 mm -3.1669029 mm 5.7866453 cm 7.6597759 MeV 2.7502257 MeV 271.18167 um 1.0509823 mm Target hIoni + 4 -9.1146041 mm -3.3099946 mm 5.7921736 cm 4.6937607 MeV 2.9660152 MeV 209.07954 um 1.2600618 mm Target hIoni + 5 -9.046649 mm -3.3930505 mm 5.7996125 cm 1.3894068 MeV 3.3043538 MeV 135.18412 um 1.395246 mm Target hIoni + 6 -9.0354777 mm -3.4018646 mm 5.8002184 cm 49.026545 keV 1.3403803 MeV 16.024794 um 1.4112707 mm Target hIoni + 7 -9.0354235 mm -3.4019333 mm 5.8002167 cm 1.3877788e-08 meV 49.026545 keV 500.67448 nm 1.4117714 mm Target hIoni + 8 -9.0354235 mm -3.4019333 mm 5.8002167 cm 0 eV 1.3877788e-08 meV 8.1547565 fm 1.4117714 mm Target hIoni + 9 -9.0354235 mm -3.4019333 mm 5.8002167 cm 0 eV 0 eV 0 fm 1.4117714 mm Target Decay +Track (trackID 4, parentID 1) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = mu+, Track ID = 22, Parent ID = 4 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -9.04 mm -3.4 mm 5.8 cm 4.12 MeV 0 eV 0 fm 0 fm Target initStep + 1 -9.1194827 mm -3.4786107 mm 5.7994928 cm 1.1155396 MeV 3.0042731 MeV 133.4438 um 133.4438 um Target muIoni + 2 -9.1295404 mm -3.4822193 mm 5.7994425 cm 54.714373 keV 1.0608252 MeV 13.382935 um 146.82674 um Target muIoni + 3 -9.1296461 mm -3.4822353 mm 5.7994464 cm 6.9388939e-09 meV 54.714373 keV 531.62332 nm 147.35836 um Target muIoni + 4 -9.1296461 mm -3.4822353 mm 5.7994464 cm 0 eV 6.9388939e-09 meV 5.7662837 fm 147.35836 um Target muIoni + 5 -9.1296461 mm -3.4822353 mm 5.7994464 cm 0 eV 0 eV 0 fm 147.35836 um Target DecayWithSpin +Track (trackID 22, parentID 4) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.867221(mm),0.67502635(mm),78.788964(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.724229(mm),-0.24446867(mm),78.814177(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4221,7 +4587,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.503441(mm),-3.7077296(mm),78.853108(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.507816(mm),-1.2094678(mm),79.204991(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4230,7 +4596,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.6711(mm),-3.0232408(mm),78.470891(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.684708(mm),0.12692417(mm),78.292165(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4239,7 +4605,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.108051(mm),-1.337686(mm),78.393845(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.001775(mm),3.374504(mm),79.117892(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4248,7 +4614,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.871569(mm),2.4412522(mm),78.435543(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.59856(mm),1.7894379(mm),78.660009(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4257,7 +4623,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.165403(mm),-3.2305149(mm),79.08904(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.491861(mm),0.065081921(mm),79.207804(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4266,7 +4632,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.276826(mm),0.14064278(mm),78.187758(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.622692(mm),-2.3852599(mm),78.832081(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4275,7 +4641,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.306269(mm),-1.4369257(mm),79.416856(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.669122(mm),0.22041881(mm),78.118586(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4284,7 +4650,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.256465(mm),-2.7226053(mm),78.367676(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.585728(mm),2.4247733(mm),79.191253(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4293,7 +4659,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.547597(mm),-2.4255172(mm),79.197976(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.368236(mm),0.78620653(mm),78.700621(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4302,7 +4668,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.508977(mm),-0.48577292(mm),78.852132(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.101866(mm),0.48229233(mm),79.452897(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4311,7 +4677,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.66017(mm),1.4777922(mm),78.296491(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.299435(mm),1.5446672(mm),78.360099(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4320,7 +4686,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.499584(mm),3.2007251(mm),78.853788(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.243131(mm),3.2952384(mm),79.075335(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4329,7 +4695,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.013156(mm),-0.11701357(mm),79.468539(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.996647(mm),-1.4471176(mm),78.237161(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4338,7 +4704,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.073821(mm),2.4264553(mm),78.752535(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.808167(mm),-2.0138606(mm),78.446723(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4347,7 +4713,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.810822(mm),-1.9169396(mm),78.446254(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.700739(mm),-2.1981146(mm),78.641992(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4356,7 +4722,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.703604(mm),-1.8006785(mm),78.46516(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.607715(mm),0.48457596(mm),78.834722(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4365,7 +4731,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.138104(mm),0.78920236(mm),79.093854(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.638402(mm),-2.164277(mm),79.005638(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4374,7 +4740,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.718511(mm),2.8170423(mm),78.991512(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.118077(mm),3.5529942(mm),79.097385(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4383,7 +4749,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.082666(mm),3.5459101(mm),78.574648(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.180679(mm),-0.025579003(mm),78.557366(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4392,7 +4758,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.966236(mm),3.2815526(mm),79.124159(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.025754(mm),0.3047052(mm),79.466318(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4401,7 +4767,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.12553(mm),0.58031524(mm),79.096071(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.913906(mm),2.2956124(mm),79.133386(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4410,7 +4776,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.939878(mm),-2.4344617(mm),78.247171(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.068342(mm),-3.1082003(mm),79.106155(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4419,7 +4785,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.331552(mm),2.3689784(mm),78.70709(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.595878(mm),0.11469661(mm),79.36579(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4428,7 +4794,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.382425(mm),-3.0548584(mm),78.345465(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.62848(mm),-1.3391942(mm),78.83106(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4437,7 +4803,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.826803(mm),0.99691997(mm),78.443437(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.680796(mm),0.13534802(mm),78.645509(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4446,7 +4812,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.769945(mm),-0.72280993(mm),78.277135(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.006618(mm),-0.55188027(mm),78.940711(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4455,7 +4821,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.227577(mm),1.899535(mm),78.549096(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.913071(mm),0.70641936(mm),78.780879(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4464,7 +4830,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.206515(mm),-2.6185606(mm),78.55281(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.447597(mm),-2.6413818(mm),78.510301(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4473,7 +4839,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.400872(mm),-1.6461028(mm),78.694867(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.408162(mm),-0.59733912(mm),79.046235(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4482,7 +4848,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.082951(mm),-0.44631777(mm),78.750925(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.040782(mm),2.555866(mm),79.111014(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4492,152 +4858,157 @@ Track (trackID 1, parentID 0) is processed with stopping code 2 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process - 0 -1.4 cm -446 um 7.84 cm 80.1 MeV 0 eV 0 fm 0 fm Target initStep - 1 -1.6952585 cm 369.32648 um 7.6170283 cm 70.18479 MeV 9.9269395 MeV 3.7853634 mm 3.7853634 mm Target CoulombScat - 2 -1.7365204 cm 594.47647 um 7.5703698 cm 68.619233 MeV 1.5655574 MeV 663.11927 um 4.4484826 mm Target Transportation - 3 6.9567324 cm 6.1746918 cm -1.8219385 m 68.619249 MeV1.0168458e-13 meV 2.5808246 m 2.5852731 m CaptureMgnt Decay + 0 -1.13 cm 2.55 mm 7.52 cm 77.6 MeV 0 eV 0 fm 0 fm Target initStep + 1 -9.1683674 mm 201.80838 um 7.5002142 cm 67.823104 MeV 9.8096039 MeV 3.2254865 mm 3.2254865 mm Target Transportation + 2 -1.3819242 cm 3.5520571 mm 6.7780919 cm 67.823104 MeV5.1671771e-14 meV 1.2802966 m 1.2835221 m CaptureMgnt Transportation + 3 -1.1326996 cm 1.7555747 mm 6.776359 cm 58.56588 MeV 9.2572239 MeV 3.0935523 mm 1.2866157 m Target hIoni + 4 -9.4223739 mm 185.65807 um 6.79131 cm 48.003159 MeV 10.562721 MeV 2.490292 mm 1.2891059 m Target hIoni + 5 -8.0664213 mm -1.0526305 mm 6.7785819 cm 41.481761 MeV 6.5213979 MeV 1.8542095 mm 1.2909602 m Target hIoni + 6 -8.0406585 mm -1.078939 mm 6.7782119 cm 41.35493 MeV 126.83131 keV 37.012256 um 1.2909972 m Target Transportation + 7 -5.8282458 cm -16.193735 cm -2 m 41.354945 MeV9.8307562e-13 meV 18.376627 m 19.667624 m CaptureMgnt Transportation + 8 -7.1362378 cm -17.581178 cm -2.0021593 m 41.348799 MeV 4.7968929 keV 1.9189759 cm 19.686814 m World hIoni + 9 -8.7207185 cm -19.263404 cm -2.0048049 m 41.341335 MeV 5.8445867 keV 2.3260405 cm 19.710074 m World hIoni + 10 -10.349331 cm -20.993628 cm -2.0075138 m 41.334905 MeV 5.0528211 keV 2.3915345 cm 19.733989 m World hIoni + 11 -11.644918 cm -22.366823 cm -2.009672 m 41.329215 MeV 3.8558671 keV 1.9002081 cm 19.752991 m World hIoni + 12 -12.185802 cm -22.940398 cm -2.0105749 m 41.324354 MeV 3.2886209 keV 7.9353319 mm 19.760927 m World hIoni + 13 -12.922439 cm -23.72043 cm -2.0117923 m 41.320211 MeV 2.9182264 keV 1.0797714 cm 19.771724 m World hIoni + 14 -13.324078 cm -24.145394 cm -2.0124611 m 41.316153 MeV 1.693992 keV 5.8854137 mm 19.77761 m World hIoni + 15 -16.894437 cm -27.925975 cm -2.0184163 m 41.302564 MeV 12.592199 keV 5.2340196 cm 19.82995 m World hIoni + 16 -18.591571 cm -29.716098 cm -2.021211 m 41.294465 MeV 8.0994304 keV 2.4825218 cm 19.854775 m World hIoni + 17 -24.325023 cm -35.754476 cm -2.0306565 m 41.273867 MeV 18.865975 keV 8.3801499 cm 19.938577 m World hIoni + 18 -26.281465 cm -37.807527 cm -2.0338904 m 41.166208 MeV 11.693602 keV 2.8543429 cm 19.96712 m World hIoni + 19 -29.232436 cm -40.888008 cm -2.0387578 m 41.15397 MeV 10.883544 keV 4.2935455 cm 20.010056 m World hIoni + 20 -30.233368 cm -41.932388 cm -2.0404099 m 41.147907 MeV 2.6590434 keV 1.4559841 cm 20.024616 m World hIoni + 21 -43.427255 cm -55.728259 cm -2.062131 m 41.094293 MeV 53.613835 keV 19.21266 cm 20.216742 m World hIoni + 22 -45.152178 cm -57.548253 cm -2.0650518 m 41.083204 MeV 7.9503572 keV 2.5244906 cm 20.241987 m World hIoni + 23 -50.644445 cm -63.34058 cm -2.074219 m 41.06131 MeV 19.597916 keV 8.0347158 cm 20.322334 m World hIoni + 24 -61.262064 cm -74.49337 cm -2.092307 m 41.019502 MeV 37.802766 keV 15.504584 cm 20.47738 m World hIoni + 25 -63.295159 cm -76.617701 cm -2.0957536 m 41.006225 MeV 11.95637 keV 2.9605833 cm 20.506986 m World hIoni + 26 -68.594447 cm -82.155858 cm -2.1047418 m 40.983403 MeV 20.142562 keV 7.7176234 cm 20.584162 m World hIoni + 27 -75.513086 cm -89.362711 cm -2.1165802 m 40.951841 MeV 27.736797 keV 10.060231 cm 20.684764 m World hIoni + 28 -79.083504 cm -93.052172 cm -2.1226128 m 40.936699 MeV 14.144864 keV 5.1695241 cm 20.73646 m World hIoni + 29 -79.957235 cm -93.952916 cm -2.1240884 m 40.926496 MeV 2.6345639 keV 1.2635363 cm 20.749095 m World hIoni + 30 -80.139621 cm -94.141086 cm -2.1243966 m 40.925045 MeV 252.73451 eV 2.6386064 mm 20.751734 m World hIoni + 31 -82.222505 cm -96.290786 cm -2.127913 m 40.91804 MeV 7.0044173 keV 3.0138474 cm 20.781872 m World hIoni + 32 -88.46505 cm -1.0274494 m -2.1385534 m 40.887977 MeV 20.096572 keV 9.0420101 cm 20.872292 m World hIoni + 33 -90.602133 cm -1.0495012 m -2.1422535 m 40.871494 MeV 8.5741861 keV 3.0930374 cm 20.903223 m World hIoni + 34 -93.920727 cm -1.0837642 m -2.1480224 m 40.858135 MeV 13.358697 keV 4.8047288 cm 20.95127 m World hIoni + 35 -94.637848 cm -1.0911888 m -2.1492613 m 40.856079 MeV 2.0556816 keV 1.0396408 cm 20.961666 m World hIoni + 36 -94.689888 cm -1.0917266 m -2.1493512 m 40.85466 MeV 93.08412 eV 753.76526 um 20.96242 m World hIoni + 37 -94.73511 cm -1.0921942 m -2.1494294 m 40.853212 MeV 175.53691 eV 655.21422 um 20.963075 m World hIoni + 38 -1.0264734 m -1.1740585 m -2.1631363 m 40.825808 MeV 24.256966 keV 11.467367 cm 21.077749 m World hIoni + 39 -1.0377337 m -1.1856983 m -2.1650997 m 40.820439 MeV 4.2769505 keV 1.6313625 cm 21.094063 m World hIoni + 40 -1.1345155 m -1.2856588 m -2.1819017 m 40.788115 MeV 32.323291 keV 14.014726 cm 21.23421 m World hIoni + 41 -1.1390731 m -1.2903604 m -2.1826766 m 40.783172 MeV 2.649366 keV 6.5937519 mm 21.240804 m World hIoni + 42 -1.1797918 m -1.332325 m -2.1895974 m 40.764854 MeV 17.104699 keV 5.8880729 cm 21.299684 m World hIoni + 43 -1.2077857 m -1.3611971 m -2.1942702 m 40.751344 MeV 10.808798 keV 4.0485733 cm 21.34017 m World hIoni + 44 -1.2106158 m -1.3641277 m -2.194749 m 40.747856 MeV 796.39408 eV 4.102119 mm 21.344272 m World hIoni + 45 -1.253503 m -1.4085143 m -2.2020428 m 40.729357 MeV 11.404994 keV 6.2150549 cm 21.406423 m World hIoni + 46 -1.2589152 m -1.414102 m -2.2029397 m 40.727028 MeV 728.78866 eV 7.8306399 mm 21.414253 m World hIoni + 47 -1.3081608 m -1.4649636 m -2.2110972 m 40.6984 MeV 19.397784 keV 7.1264253 cm 21.485518 m World hIoni + 48 -1.4347579 m -1.5958442 m -2.2321292 m 40.640057 MeV 56.917962 keV 18.330082 cm 21.668818 m World hIoni + 49 -1.4413889 m -1.6027035 m -2.2332381 m 40.637319 MeV 1.735051 keV 9.604748 mm 21.678423 m World hIoni + 50 -1.4432364 m -1.6046121 m -2.2335466 m 40.634818 MeV 732.4597 eV 2.6741368 mm 21.681097 m World hIoni + 51 -1.4459891 m -1.6074574 m -2.2340059 m 40.631805 MeV 415.15236 eV 3.9854798 mm 21.685083 m World hIoni + 52 -1.4664539 m -1.6286267 m -2.2374308 m 40.621592 MeV 9.1323237 keV 2.9642539 cm 21.714725 m World hIoni + 53 -1.4729293 m -1.635339 m -2.2385101 m 40.618464 MeV 1.3191597 keV 9.388875 mm 21.724114 m World hIoni + 54 -1.5923122 m -1.7591749 m -2.2587109 m 40.577546 MeV 38.903582 keV 17.319331 cm 21.897307 m World hIoni + 55 -1.6201261 m -1.7881522 m -2.2631764 m 40.566871 MeV 9.3720352 keV 4.0413409 cm 21.937721 m World hIoni + 56 -1.6204168 m -1.7884544 m -2.2632239 m 40.565086 MeV 78.377385 eV 422.02193 um 21.938143 m World hIoni + 57 -1.6209093 m -1.7889668 m -2.2633043 m 40.563539 MeV 121.52471 eV 715.21898 um 21.938858 m World hIoni + 58 -1.7067751 m -1.8782514 m -2.2772843 m 40.539091 MeV 23.405618 keV 12.466039 cm 22.063519 m World hIoni + 59 -1.7388602 m -1.9118646 m -2.2826154 m 40.523745 MeV 14.10615 keV 4.6773056 cm 22.110292 m World hIoni + 60 -1.7751755 m -1.9498919 m -2.2886014 m 40.510279 MeV 12.314092 keV 5.2921784 cm 22.163213 m World hIoni + 61 -1.7940468 m -1.9695567 m -2.2916269 m 40.501206 MeV 6.9036891 keV 2.7422406 cm 22.190636 m World hIoni + 62 -1.8147131 m -1.9911157 m -2.2949059 m 40.489091 MeV 8.3482675 keV 3.0043987 cm 22.22068 m World hIoni + 63 -1.8394557 m -2.0169633 m -2.2987695 m 40.479611 MeV 7.3928733 keV 3.5989116 cm 22.256669 m World hIoni + 64 -1.8444836 m -2.0222127 m -2.2995522 m 40.475098 MeV 2.9533913 keV 7.310969 mm 22.26398 m World hIoni + 65 -1.868957 m -2.0477561 m -2.3033594 m 40.459461 MeV 10.739595 keV 3.5579546 cm 22.299559 m World hIoni + 66 -1.8696826 m -2.0485157 m -2.3034724 m 40.433571 MeV 16.828005 eV 1.0565634 mm 22.300616 m World hIoni + 67 -1.9021668 m -2.0824569 m -2.3085572 m 40.411934 MeV 8.8431897 keV 4.7255533 cm 22.347871 m World hIoni + 68 -1.93691 m -2.1188055 m -2.3139335 m 40.399962 MeV 10.600843 keV 5.0568995 cm 22.39844 m World hIoni + 69 -1.9468167 m -2.129184 m -2.3154685 m 40.394498 MeV 4.1630768 keV 1.4429558 cm 22.41287 m World hIoni + 70 -1.973408 m -2.1569497 m -2.31951 m 40.373273 MeV 12.369545 keV 3.8656997 cm 22.451527 m World hIoni + 71 -1.9774223 m -2.1611401 m -2.3201304 m 40.370849 MeV 1.2236838 keV 5.8360121 mm 22.457363 m World hIoni + 72 -1.9883924 m -2.1725836 m -2.3218263 m 40.362252 MeV 3.840729 keV 1.5942835 cm 22.473306 m World hIoni + 73 -2.0088824 m -2.1939583 m -2.3249999 m 40.355652 MeV 6.5995953 keV 2.9779025 cm 22.503085 m World hIoni + 74 -2.0127119 m -2.1979574 m -2.32559 m 40.353319 MeV 1.1820225 keV 5.5683306 mm 22.508653 m World hIoni + 75 -2.084564 m -2.2730812 m -2.336706 m 40.32899 MeV 22.914262 keV 10.45463 cm 22.6132 m World hIoni + 76 -2.1866795 m -2.3794324 m -2.3517746 m 40.280722 MeV 39.882038 keV 14.820712 cm 22.761407 m World hIoni + 77 -2.2405019 m -2.4359209 m -2.359965 m 40.244451 MeV 17.32624 keV 7.8453306 cm 22.83986 m World hIoni + 78 -2.2571563 m -2.4532397 m -2.3625899 m 40.228547 MeV 8.3387976 keV 2.4170241 cm 22.86403 m World hIoni + 79 -2.2765033 m -2.4734477 m -2.3656786 m 40.21945 MeV 7.7360845 keV 2.814621 cm 22.892176 m World hIoni + 80 -2.3042025 m -2.5022918 m -2.370074 m 40.205341 MeV 12.516023 keV 4.0231236 cm 22.932408 m World hIoni + 81 -2.3232405 m -2.5220971 m -2.3730752 m 40.197203 MeV 6.8875571 keV 2.763515 cm 22.960043 m World hIoni + 82 -2.3272307 m -2.5262654 m -2.3737072 m 40.187384 MeV 1.0227539 keV 5.8048362 mm 22.965848 m World hIoni + 83 -2.3296436 m -2.5287841 m -2.3740907 m 40.18412 MeV 837.69918 eV 3.5090358 mm 22.969357 m World hIoni + 84 -2.3410356 m -2.5406681 m -2.3759051 m 40.177973 MeV 4.9646032 keV 1.6561976 cm 22.985919 m World hIoni + 85 -2.3842578 m -2.5856969 m -2.3827632 m 40.157929 MeV 15.654681 keV 6.2791676 cm 23.04871 m World hIoni + 86 -2.4672153 m -2.6718927 m -2.3960003 m 40.126064 MeV 31.864914 keV 12.036177 cm 23.169072 m World Decay Track (trackID 3, parentID 1) is processed with stopping code 2 ********************************************************************************************************* -* G4Track Information: Particle = mu+, Track ID = 12, Parent ID = 3 +* G4Track Information: Particle = mu+, Track ID = 82, Parent ID = 3 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process - 0 6.96 cm 6.17 cm -1.82 m 80 MeV 0 eV 0 fm 0 fm CaptureMgnt initStep - 1 -870.14641 um 14.333611 cm -2 m 80.020703 MeV7.2955995e-15 meV 22.107334 cm 22.107334 cm CaptureMgnt Transportation - 2 1.1763919 cm 17.712441 cm -2.049023 m 80.005614 MeV 5.8732381 keV 6.0864787 cm 28.193812 cm World muIoni - 3 1.218317 cm 17.825443 cm -2.0506571 m 80.004267 MeV 131.21389 eV 2.0305707 mm 28.39687 cm World muIoni - 4 1.4182535 cm 18.363499 cm -2.058441 m 80.000621 MeV 2.4614134 keV 9.6714069 mm 29.36401 cm World muIoni - 5 2.0677793 cm 20.110827 cm -2.0837019 m 79.995218 MeV 3.6478373 keV 3.1394536 cm 32.503464 cm World muIoni - 6 3.8248705 cm 24.840492 cm -2.1519355 m 79.979988 MeV 10.75365 keV 8.4861895 cm 40.989653 cm World muIoni - 7 4.6973104 cm 27.193958 cm -2.1858961 m 79.968962 MeV 9.5636271 keV 4.2229422 cm 45.212595 cm World muIoni - 8 5.3367858 cm 28.923371 cm -2.2108116 m 79.962046 MeV 5.8544652 keV 3.0996138 cm 48.312209 cm World muIoni - 9 6.079589 cm 30.940184 cm -2.2398431 m 79.95374 MeV 5.2917768 keV 3.6121463 cm 51.924356 cm World muIoni - 10 6.782071 cm 32.844995 cm -2.2672198 m 79.946027 MeV 5.4396454 keV 3.4083104 cm 55.332666 cm World muIoni - 11 7.6094609 cm 35.081502 cm -2.2993958 m 79.935662 MeV 7.9001264 keV 4.004936 cm 59.337602 cm World muIoni - 12 11.584478 cm 45.745455 cm -2.452698 m 79.907917 MeV 26.690573 keV 19.092862 cm 78.430464 cm World muIoni - 13 12.71524 cm 48.774639 cm -2.4961375 m 79.895993 MeV 10.260058 keV 5.4152079 cm 83.845672 cm World muIoni - 14 15.814822 cm 57.037647 cm -2.615034 m 79.860915 MeV 23.869551 keV 14.807064 cm 98.652736 cm World muIoni - 15 16.250649 cm 58.190959 cm -2.6315344 m 79.855416 MeV 2.8491077 keV 2.059785 cm 1.0071252 m World muIoni - 16 17.936219 cm 62.645407 cm -2.695196 m 79.839604 MeV 14.724423 keV 7.9505483 cm 1.0866307 m World muIoni - 17 18.318667 cm 63.653959 cm -2.7096263 m 79.837862 MeV 1.7411703 keV 1.80161 cm 1.1046468 m World muIoni - 18 18.719876 cm 64.71324 cm -2.7247604 m 79.83186 MeV 3.3660597 keV 1.8903596 cm 1.1235504 m World muIoni - 19 20.466053 cm 69.334831 cm -2.7907755 m 79.810415 MeV 15.555356 keV 8.2454936 cm 1.2060053 m World muIoni - 20 21.25674 cm 71.414409 cm -2.8204503 m 79.799231 MeV 9.9963831 keV 3.7088794 cm 1.2430941 m World muIoni - 21 22.097596 cm 73.631013 cm -2.8519657 m 79.787812 MeV 10.303371 keV 3.9436797 cm 1.2825309 m World muIoni - 22 23.963983 cm 78.548839 cm -2.9219892 m 79.771518 MeV 12.89163 keV 8.7579286 cm 1.3701102 m World muIoni - 23 25.122241 cm 81.587581 cm -2.9651498 m 79.759726 MeV 7.3237625 keV 5.4040662 cm 1.4241509 m World muIoni - 24 27.277501 cm 87.272553 cm -3.0458039 m 79.320824 MeV 15.100554 keV 10.100248 cm 1.5251533 m World muIoni - 25 34.111212 cm 1.0513679 m -3.2998182 m 79.266698 MeV 52.583687 keV 31.79743 cm 1.8431277 m World muIoni - 26 36.637278 cm 1.1185842 m -3.3956673 m 79.246443 MeV 18.181036 keV 11.976311 cm 1.9628908 m World muIoni - 27 37.209609 cm 1.1336247 m -3.417128 m 79.235013 MeV 3.3932043 keV 2.6824176 cm 1.9897149 m World muIoni - 28 39.324809 cm 1.1892618 m -3.4966235 m 79.205288 MeV 15.940075 keV 9.9309768 cm 2.0890247 m World muIoni - 29 39.926245 cm 1.2050042 m -3.5190315 m 79.198358 MeV 5.9252741 keV 2.803778 cm 2.1170625 m World muIoni - 30 40.26644 cm 1.2138911 m -3.5317037 m 79.194333 MeV 1.3735691 keV 1.5847216 cm 2.1329097 m World muIoni - 31 40.976188 cm 1.2323864 m -3.5580921 m 79.185217 MeV 5.8310345 keV 3.2996948 cm 2.1659066 m World muIoni - 32 41.353972 cm 1.2422519 m -3.5721826 m 79.13308 MeV 4.5168405 keV 1.7610858 cm 2.1835175 m World muIoni - 33 41.523902 cm 1.2466582 m -3.5784843 m 79.131639 MeV 1.4408797 keV 7.874933 mm 2.1913924 m World muIoni - 34 41.763806 cm 1.2528729 m -3.5873828 m 79.125675 MeV 3.7971249 keV 1.111576 cm 2.2025082 m World muIoni - 35 43.560464 cm 1.2994586 m -3.6540959 m 79.100533 MeV 12.053734 keV 8.3328736 cm 2.2858369 m World muIoni - 36 45.214461 cm 1.3426562 m -3.7160647 m 79.077697 MeV 13.595443 keV 7.7328806 cm 2.3631657 m World muIoni - 37 45.472029 cm 1.3493571 m -3.7256727 m 79.074362 MeV 1.4477839 keV 1.1993716 cm 2.3751595 m World muIoni - 38 49.770998 cm 1.4609651 m -3.8856955 m 79.042813 MeV 30.29249 keV 19.977962 cm 2.5749391 m World muIoni - 39 51.406543 cm 1.5038051 m -3.9467636 m 79.02946 MeV 12.297011 keV 7.6368069 cm 2.6513071 m World muIoni - 40 51.700816 cm 1.5115775 m -3.9577953 m 79.024373 MeV 2.9585593 keV 1.3811957 cm 2.6651191 m World muIoni - 41 51.824843 cm 1.5148671 m -3.9624612 m 79.018096 MeV 1.7093349 keV 5.8420626 mm 2.6709612 m World muIoni - 42 53.966954 cm 1.5717454 m -4.0431832 m 78.996629 MeV 18.031548 keV 10.104485 cm 2.772006 m World muIoni - 43 54.421748 cm 1.5838991 m -4.0604121 m 78.990922 MeV 2.8757532 keV 2.156917 cm 2.7935752 m World muIoni - 44 55.10775 cm 1.602217 m -4.0863796 m 78.983207 MeV 4.207063 keV 3.2510308 cm 2.8260855 m World muIoni - 45 55.320555 cm 1.6078868 m -4.0944076 m 78.980143 MeV 1.9090101 keV 1.0056048 cm 2.8361415 m World muIoni - 46 55.386732 cm 1.6096496 m -4.0969043 m 78.976509 MeV 1.1950824 keV 3.1271497 mm 2.8392687 m World muIoni - 47 63.873479 cm 1.8361579 m -4.4176333 m 78.908346 MeV 66.351797 keV 40.171721 cm 3.2409859 m World muIoni - 48 65.279595 cm 1.8740531 m -4.4714207 m 78.897363 MeV 8.7155734 keV 6.7281873 cm 3.3082678 m World muIoni - 49 65.427915 cm 1.8780474 m -4.4770919 m 78.894065 MeV 1.2850661 keV 7.0934274 mm 3.3153612 m World muIoni - 50 67.051509 cm 1.9217556 m -4.5391262 m 78.878992 MeV 11.775803 keV 7.7603365 cm 3.3929646 m World muIoni - 51 67.191374 cm 1.9255285 m -4.5444813 m 78.871786 MeV 479.5199 eV 6.6983382 mm 3.3996629 m World muIoni - 52 67.75734 cm 1.9408226 m -4.5662005 m 78.867777 MeV 2.4884624 keV 2.7159969 cm 3.4268229 m World muIoni - 53 67.817817 cm 1.942449 m -4.5685093 m 78.864938 MeV 288.03672 eV 2.8882029 mm 3.4297111 m World muIoni - 54 68.667064 cm 1.9652533 m -4.6008773 m 78.858971 MeV 5.9675503 keV 4.0494972 cm 3.470206 m World muIoni - 55 68.873937 cm 1.9708051 m -4.6087615 m 78.808469 MeV 2.0921573 keV 9.8621675 mm 3.4800682 m World muIoni - 56 68.924614 cm 1.9721549 m -4.6106812 m 78.806385 MeV 217.74777 eV 2.4008875 mm 3.4824691 m World muIoni - 57 70.936607 cm 2.0258198 m -4.6869771 m 78.789336 MeV 13.527876 keV 9.5424368 cm 3.5778935 m World muIoni - 58 72.75814 cm 2.0743735 m -4.7559127 m 78.774899 MeV 13.2508 keV 8.6263462 cm 3.6641569 m World muIoni - 59 72.801294 cm 2.0755163 m -4.7575386 m 78.770015 MeV 121.58791 eV 2.0336151 mm 3.6661905 m World muIoni - 60 73.466655 cm 2.0931232 m -4.7826259 m 78.758674 MeV 5.5714492 keV 3.1363166 cm 3.6975537 m World muIoni - 61 74.040697 cm 2.1083359 m -4.8043954 m 78.753246 MeV 4.1405928 keV 2.7171529 cm 3.7247252 m World muIoni - 62 74.304163 cm 2.1153338 m -4.8144059 m 78.750207 MeV 1.4201813 keV 1.2494909 cm 3.7372201 m World muIoni - 63 77.061206 cm 2.1885943 m -4.9192015 m 78.727573 MeV 20.311918 keV 13.080278 cm 3.8680229 m World muIoni - 64 77.563465 cm 2.2020172 m -4.9383556 m 78.721322 MeV 3.2030367 keV 2.3922352 cm 3.8919453 m World muIoni - 65 80.928634 cm 2.2914767 m -5.0662824 m 78.688269 MeV 31.707931 keV 15.968958 cm 4.0516349 m World muIoni - 66 82.999701 cm 2.3461133 m -5.1446969 m 78.671061 MeV 16.074281 keV 9.7790331 cm 4.1494252 m World muIoni - 67 83.030414 cm 2.3469173 m -5.1458508 m 78.658386 MeV 277.3661 eV 1.4395447 mm 4.1508647 m World muIoni - 68 83.193655 cm 2.3512122 m -5.1520138 m 78.656583 MeV 700.02109 eV 7.6872022 mm 4.1585519 m World muIoni - 69 84.033361 cm 2.3733136 m -5.1837107 m 78.641065 MeV 6.8317238 keV 3.9543346 cm 4.1980953 m World muIoni - 70 84.075836 cm 2.3744308 m -5.185307 m 78.639853 MeV 205.89989 eV 1.9941811 mm 4.2000895 m World muIoni - 71 84.71648 cm 2.3912694 m -5.2093594 m 78.614055 MeV 3.973926 keV 3.0051597 cm 4.2301411 m World muIoni - 72 86.468936 cm 2.4371535 m -5.2750765 m 78.600891 MeV 10.653252 keV 8.2043967 cm 4.312185 m World muIoni - 73 87.449112 cm 2.4624368 m -5.3113394 m 78.586058 MeV 9.5883158 keV 4.5280375 cm 4.3574654 m World muIoni - 74 90.909701 cm 2.5524834 m -5.4401384 m 78.557117 MeV 27.198529 keV 16.09199 cm 4.5183853 m World muIoni - 75 90.945576 cm 2.5534313 m -5.4414954 m 78.555398 MeV 206.25393 eV 1.6937206 mm 4.520079 m World muIoni - 76 91.196183 cm 2.5600419 m -5.4509515 m 78.548187 MeV 3.1723821 keV 1.1806739 cm 4.5318858 m World muIoni - 77 91.5686 cm 2.5698541 m -5.464978 m 78.544186 MeV 3.0078827 keV 1.7518272 cm 4.549404 m World muIoni - 78 94.049873 cm 2.6352175 m -5.5584061 m 78.522256 MeV 20.935866 keV 11.669143 cm 4.6660955 m World muIoni - 79 94.678711 cm 2.6519191 m -5.5823248 m 78.515734 MeV 4.322469 keV 2.9842763 cm 4.6959382 m World muIoni - 80 96.019427 cm 2.6874977 m -5.6332806 m 78.504003 MeV 8.7769269 keV 6.3577347 cm 4.7595156 m World muIoni - 81 96.351685 cm 2.6962802 m -5.6458879 m 78.501008 MeV 1.8111092 keV 1.5719916 cm 4.7752355 m World muIoni - 82 99.545438 cm 2.780892 m -5.7673797 m 78.46736 MeV 23.390403 keV 15.145786 cm 4.9266933 m World muIoni - 83 99.910753 cm 2.7906198 m -5.7813743 m 78.463575 MeV 2.5505253 keV 1.743062 cm 4.944124 m World muIoni - 84 1.0113618 m 2.8233404 m -5.8284756 m 78.424436 MeV 7.4356488 keV 5.8645872 cm 5.0027698 m World muIoni - 85 1.0385732 m 2.8965335 m -5.933807 m 78.398788 MeV 19.175917 keV 13.111988 cm 5.1338897 m World muIoni - 86 1.0455247 m 2.9151569 m -5.9606657 m 78.391324 MeV 6.3018501 keV 3.3414742 cm 5.1673045 m World muIoni - 87 1.0760352 m 2.996648 m -6.0784675 m 78.365685 MeV 24.049574 keV 14.645479 cm 5.3137592 m World muIoni - 88 1.092132 m 3.0394303 m -6.1404858 m 78.346606 MeV 13.214841 keV 7.7043566 cm 5.3908028 m World muIoni - 89 1.0962249 m 3.0503101 m -6.1562896 m 78.34302 MeV 2.1264595 keV 1.9618356 cm 5.4104212 m World muIoni - 90 1.1150759 m 3.1002961 m -6.2290583 m 78.327568 MeV 14.428918 keV 9.0273213 cm 5.5006944 m World muIoni - 91 1.1208445 m 3.1155585 m -6.2513453 m 78.321702 MeV 4.6215916 keV 2.7621192 cm 5.5283156 m World muIoni - 92 1.1300626 m 3.1399351 m -6.2868718 m 78.314548 MeV 4.9454044 keV 4.4060423 cm 5.572376 m World muIoni - 93 1.1468575 m 3.1845132 m -6.3519152 m 78.302892 MeV 11.655987 keV 8.0622107 cm 5.6529981 m World muIoni - 94 1.1503078 m 3.193678 m -6.365304 m 78.29965 MeV 1.4318231 keV 1.6587984 cm 5.6695861 m World muIoni - 95 1.2137662 m 3.3624713 m -6.6125285 m 78.254654 MeV 42.978423 keV 30.600425 cm 5.9755903 m World muIoni - 96 1.2285656 m 3.4021776 m -6.6700391 m 78.242165 MeV 11.186107 keV 7.143588 cm 6.0470262 m World muIoni - 97 1.2287204 m 3.4025912 m -6.6706405 m 78.240377 MeV 80.164856 eV 746.06153 um 6.0477723 m World muIoni - 98 1.2289824 m 3.4032923 m -6.6716595 m 78.238827 MeV 124.20797 eV 1.2644092 mm 6.0490367 m World muIoni - 99 1.274713 m 3.5255139 m -6.8492567 m 78.21161 MeV 26.175003 keV 22.03868 cm 6.2694235 m World muIoni - 100 1.2916178 m 3.5713784 m -6.9159796 m 78.195059 MeV 15.311087 keV 8.271198 cm 6.3521355 m World muIoni - 101 1.3107813 m 3.6233233 m -6.9914492 m 78.180372 MeV 13.534387 keV 9.3601212 cm 6.4457367 m World muIoni - 102 1.3208285 m 3.650292 m -7.030498 m 78.17059 MeV 7.6092716 keV 4.8508426 cm 6.4942451 m World muIoni - 103 1.3318302 m 3.6798876 m -7.0732544 m 78.157722 MeV 9.0919536 keV 5.3151216 cm 6.5473963 m World muIoni - 104 1.3450038 m 3.7154232 m -7.1244257 m 78.147392 MeV 8.2394424 keV 6.3677514 cm 6.6110738 m World muIoni - 105 1.3476832 m 3.722645 m -7.1348197 m 78.132715 MeV 4.7714603 keV 1.293705 cm 6.6240109 m World muIoni - 106 1.3483232 m 3.7243722 m -7.1373022 m 78.132167 MeV 548.05145 eV 3.0912845 mm 6.6271022 m World muIoni - 107 1.4113431 m 3.8944232 m -7.3816142 m 78.080703 MeV 49.121896 keV 30.426579 cm 6.931368 m World muIoni - 108 1.4468862 m 3.9906826 m -7.5203817 m 78.048968 MeV 28.184724 keV 17.258531 cm 7.1039533 m World muIoni - 109 1.4589867 m 4.0230615 m -7.5672971 m 78.037853 MeV 8.7301692 keV 5.8274149 cm 7.1622274 m World muIoni - 110 1.4651458 m 4.039463 m -7.5910136 m 78.030623 MeV 6.1362703 keV 2.9485906 cm 7.1917133 m World muIoni - 111 1.4665684 m 4.0432611 m -7.5964596 m 78.027464 MeV 738.15981 eV 6.7903181 mm 7.1985036 m World muIoni - 112 1.470936 m 4.0549015 m -7.6131625 m 78.016379 MeV 3.9820927 keV 2.0822209 cm 7.2193259 m World muIoni - 113 1.4985824 m 4.1286579 m -7.7187339 m 77.994127 MeV 20.45748 keV 13.171819 cm 7.351044 m World muIoni - 114 1.5342278 m 4.2230945 m -7.8546507 m 77.960781 MeV 31.532244 keV 16.93003 cm 7.5203443 m World muIoni - 115 1.5374365 m 4.231625 m -7.8669908 m 77.95688 MeV 1.9949264 keV 1.5340928 cm 7.5356853 m World muIoni - 116 1.5790545 m 4.3420412 m -8.0269902 m 77.898348 MeV 27.633298 keV 19.880569 cm 7.734491 m World muIoni - 117 1.5811329 m 4.3475538 m -8.0348966 m 77.887483 MeV 885.10191 eV 9.8600158 mm 7.744351 m World muIoni - 118 1.5822176 m 4.3504318 m -8.0390216 m 77.886204 MeV 138.7437 eV 5.1454229 mm 7.7494964 m World muIoni - 119 1.6072237 m 4.4167139 m -8.1340313 m 77.868067 MeV 16.723793 keV 11.851363 cm 7.86801 m World muIoni - 120 1.6177577 m 4.4446062 m -8.1740742 m 77.858645 MeV 8.0604762 keV 4.9923818 cm 7.9179339 m World muIoni - 121 1.6328359 m 4.4844548 m -8.2313634 m 77.843477 MeV 13.573407 keV 7.1395493 cm 7.9893293 m World muIoni - 122 1.6432194 m 4.511844 m -8.2707069 m 77.83474 MeV 7.4869518 keV 4.9049941 cm 8.0383793 m World muIoni - 123 1.6453845 m 4.5176019 m -8.2789731 m 77.829429 MeV 1.4922477 keV 1.0304015 cm 8.0486833 m World muIoni - 124 1.6673856 m 4.5760875 m -8.3628741 m 77.809993 MeV 17.006063 keV 10.461353 cm 8.1532968 m World muIoni - 125 1.6736094 m 4.5924508 m -8.3864947 m 77.803286 MeV 5.4386041 keV 2.9401146 cm 8.182698 m World muIoni - 126 1.6796656 m 4.6083394 m -8.4094463 m 77.794106 MeV 4.7759325 keV 2.8563982 cm 8.211262 m World muIoni - 127 1.7135851 m 4.6971934 m -8.5378677 m 77.767819 MeV 26.286613 keV 15.980516 cm 8.3710671 m OutOfWorld Transportation -Track (trackID 12, parentID 3) is processed with stopping code 2 + 0 -2.47 m -2.67 m -2.4 m 24.1 MeV 0 eV 0 fm 0 fm World initStep + 1 -2.4856947 m -2.6807625 m -2.3984346 m 24.07782 MeV 5.2253101 keV 2.0641957 cm 2.0641957 cm World muIoni + 2 -2.4954208 m -2.6854179 m -2.399726 m 24.072401 MeV 3.0836748 keV 1.08599 cm 3.1501856 cm World muIoni + 3 -2.5024974 m -2.6888134 m -2.4006562 m 24.06815 MeV 1.7541398 keV 7.904017 mm 3.9405873 cm World muIoni + 4 -2.5686566 m -2.7206247 m -2.4091094 m 24.039449 MeV 23.639534 keV 7.3895919 cm 11.330179 cm World muIoni + 5 -2.6120593 m -2.7414344 m -2.4140542 m 24.024939 MeV 14.510105 keV 4.8387066 cm 16.168886 cm World muIoni + 6 -2.6291123 m -2.7496648 m -2.415936 m 24.016083 MeV 5.5423666 keV 1.9028542 cm 18.07174 cm World muIoni + 7 -2.7609272 m -2.8133202 m -2.4305981 m 23.968855 MeV 44.140702 keV 14.711415 cm 32.783155 cm World muIoni + 8 -2.7702974 m -2.8178679 m -2.4316338 m 23.96526 MeV 2.5361479 keV 1.0466852 cm 33.829841 cm World muIoni + 9 -2.7794353 m -2.8223009 m -2.4326528 m 23.959026 MeV 2.8617145 keV 1.0207501 cm 34.850591 cm World muIoni + 10 -2.7873996 m -2.8261769 m -2.433546 m 23.954001 MeV 3.6193135 keV 8.9023323 mm 35.740824 cm World muIoni + 11 -2.7937828 m -2.8292824 m -2.4342682 m 23.947078 MeV 2.13041 keV 7.1351513 mm 36.454339 cm World muIoni + 12 -2.8062833 m -2.835365 m -2.4356774 m 23.927944 MeV 4.8519133 keV 1.3972995 cm 37.851639 cm World muIoni + 13 -2.8170803 m -2.840594 m -2.4368846 m 23.922873 MeV 2.7847444 keV 1.2057263 cm 39.057365 cm World muIoni + 14 -2.821159 m -2.8425685 m -2.4373511 m 23.90894 MeV 1.84373 keV 4.555427 mm 39.512908 cm World muIoni + 15 -2.9015416 m -2.8815381 m -2.4466721 m 23.874403 MeV 34.537433 keV 8.9816265 cm 48.494534 cm World muIoni + 16 -2.9088415 m -2.8850828 m -2.4475448 m 23.857529 MeV 1.7485152 keV 8.1618244 mm 49.310716 cm World muIoni + 17 -2.9314232 m -2.8960374 m -2.4502244 m 23.843459 MeV 5.9285962 keV 2.5241207 cm 51.834837 cm World muIoni + 18 -2.9413562 m -2.90086 m -2.4513846 m 23.839546 MeV 2.4334426 keV 1.1102638 cm 52.945101 cm World muIoni + 19 -2.9414581 m -2.9009095 m -2.4513964 m 23.837936 MeV 68.469501 eV 113.84 um 52.956485 cm World muIoni + 20 -2.941707 m -2.9010305 m -2.4514253 m 23.836523 MeV 0 eV 278.31434 um 52.984316 cm World muIoni + 21 -2.9532601 m -2.9066421 m -2.4527667 m 23.833318 MeV 3.2050092 keV 1.2913717 cm 54.275688 cm World muIoni + 22 -2.9580787 m -2.9089817 m -2.4533405 m 23.829324 MeV 1.1131185 keV 5.3871598 mm 54.814404 cm World muIoni + 23 -3.0179095 m -2.9381091 m -2.4604307 m 23.803418 MeV 20.277926 keV 6.6921101 cm 61.506514 cm World muIoni + 24 -3.0356019 m -2.9466983 m -2.4624996 m 23.795044 MeV 6.9452678 keV 1.9775695 cm 63.484084 cm World muIoni + 25 -3.0769865 m -2.9666578 m -2.4673245 m 23.777762 MeV 17.281581 keV 4.6199085 cm 68.103992 cm World muIoni + 26 -3.0792429 m -2.9677434 m -2.4675739 m 23.776004 MeV 1.7579539 keV 2.5163593 mm 68.355628 cm World muIoni + 27 -3.0912346 m -2.9735102 m -2.4689004 m 23.733889 MeV 4.4733013 keV 1.3372213 cm 69.692849 cm World muIoni + 28 -3.1006041 m -2.9780256 m -2.4699361 m 23.729921 MeV 3.9676545 keV 1.0452268 cm 70.738076 cm World muIoni + 29 -3.1026912 m -2.9790294 m -2.4701657 m 23.72711 MeV 271.45482 eV 2.3273275 mm 70.970809 cm World muIoni + 30 -3.1163916 m -2.985617 m -2.4716641 m 23.720896 MeV 6.2144506 keV 1.5275577 cm 72.498367 cm World muIoni + 31 -3.1285104 m -2.9914382 m -2.4729809 m 23.715028 MeV 3.2601239 keV 1.350867 cm 73.849234 cm World muIoni + 32 -3.1534377 m -3.0034497 m -2.4756873 m 23.705061 MeV 8.7629467 keV 2.780246 cm 76.62948 cm World muIoni + 33 -3.1666767 m -3.009798 m -2.4771401 m 23.698914 MeV 4.7384769 keV 1.4754047 cm 78.104884 cm World muIoni + 34 -3.1706611 m -3.0117093 m -2.47757 m 23.688196 MeV 1.3203982 keV 4.4399358 mm 78.548878 cm World muIoni + 35 -3.1747638 m -3.0136772 m -2.4780111 m 23.68708 MeV 1.115979 keV 4.5716176 mm 79.00604 cm World muIoni + 36 -3.2218066 m -3.0362441 m -2.4830923 m 23.664213 MeV 14.476982 keV 5.242262 cm 84.248302 cm World muIoni + 37 -3.2852665 m -3.0666062 m -2.4898469 m 23.641399 MeV 21.506811 keV 7.0673086 cm 91.31561 cm World muIoni + 38 -3.292209 m -3.0698967 m -2.4905951 m 23.636435 MeV 1.7492696 keV 7.7190953 mm 92.08752 cm World muIoni + 39 -3.4322906 m -3.1361606 m -2.5057583 m 23.582823 MeV 51.936411 keV 15.57056 cm 1.0765808 m World muIoni + 40 -3.5540943 m -3.1945119 m -2.518669 m 23.532309 MeV 48.977327 keV 13.567624 cm 1.212257 m World muIoni + 41 -3.5951298 m -3.2143418 m -2.5229698 m 23.516628 MeV 13.702325 keV 4.5778276 cm 1.2580353 m World muIoni + 42 -3.6001955 m -3.2168075 m -2.5234972 m 23.513102 MeV 990.14626 eV 5.6585369 mm 1.2636939 m World muIoni + 43 -3.6396271 m -3.2360376 m -2.5276189 m 23.49756 MeV 14.058158 keV 4.4064085 cm 1.3077579 m World muIoni + 44 -3.6488061 m -3.2405201 m -2.5286111 m 23.492823 MeV 3.0804711 keV 1.0263118 cm 1.3180211 m World muIoni + 45 -3.694791 m -3.262861 m -2.5336557 m 23.474222 MeV 18.600465 keV 5.1373078 cm 1.3693941 m World muIoni + 46 -3.7048582 m -3.2677976 m -2.5347587 m 23.468476 MeV 2.7308413 keV 1.1266526 cm 1.3806607 m World muIoni + 47 -3.7456359 m -3.2876986 m -2.5393134 m 23.45171 MeV 15.550698 keV 4.5602948 cm 1.4262636 m World muIoni + 48 -3.7534955 m -3.2915264 m -2.5401968 m 23.447856 MeV 2.8269705 keV 8.7866989 mm 1.4350503 m World muIoni + 49 -3.7606909 m -3.2950272 m -2.5409955 m 23.445673 MeV 2.182531 keV 8.0415304 mm 1.4430918 m OutOfWorld Transportation +Track (trackID 82, parentID 3) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.775379375104(mm),-0.083034449318056(mm),79.157811858951(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.125795403813(mm),-2.0209539086861(mm),78.567043116491(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4646,7 +5017,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.049749(mm),2.6273744(mm),78.580452(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.820576(mm),0.40023717(mm),78.444535(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4655,7 +5026,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.653928(mm),1.0431014(mm),78.826573(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.42464(mm),1.2678634(mm),78.338022(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4664,7 +5035,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.206067(mm),-0.051631157(mm),78.905543(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.232347(mm),1.3625211(mm),78.195601(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4673,7 +5044,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.418828(mm),0.1858195(mm),79.220681(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.407269(mm),-1.6050218(mm),79.046393(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4682,7 +5053,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.261728(mm),0.35653476(mm),79.072056(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.935866(mm),-0.79675278(mm),78.424206(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4691,7 +5062,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.565196(mm),-0.74742991(mm),78.842219(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.372736(mm),-3.2333225(mm),78.699828(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4700,7 +5071,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.73073(mm),2.0830047(mm),79.342012(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.120257(mm),3.4382818(mm),78.744347(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4709,7 +5080,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.041972(mm),3.5313902(mm),78.758151(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.162175(mm),2.907207(mm),78.913282(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4718,7 +5089,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.559531(mm),0.51292927(mm),78.666891(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.322498(mm),-1.1144776(mm),78.532359(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4727,7 +5098,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.106489(mm),-3.4280144(mm),78.570447(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.46701(mm),-0.4361475(mm),78.154224(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4736,7 +5107,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.309793(mm),1.224645(mm),78.358272(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.212376(mm),-1.784537(mm),79.257085(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4745,7 +5116,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.27076(mm),-0.26925494(mm),78.365155(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.619214(mm),-1.3939674(mm),79.009021(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4754,7 +5125,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.529469(mm),-3.3236896(mm),78.848519(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.773454(mm),-1.1135329(mm),79.158151(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4763,7 +5134,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.317635(mm),-0.80897499(mm),79.238525(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.33356(mm),-1.5849252(mm),78.883063(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4772,7 +5143,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.470539(mm),0.75872313(mm),79.38789(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.831046(mm),3.5149262(mm),78.619015(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4781,7 +5152,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.732251(mm),0.18900923(mm),79.165417(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.877159(mm),3.3549715(mm),79.139865(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4790,7 +5161,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.857491(mm),0.56053863(mm),79.143333(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.809667(mm),-3.2096585(mm),78.975439(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4799,7 +5170,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.342165(mm),1.0840907(mm),79.234199(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.384121(mm),0.027581896(mm),78.521493(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4808,7 +5179,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.489901(mm),0.4347056(mm),79.031822(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.311228(mm),1.9737903(mm),78.358019(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4817,7 +5188,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.091522(mm),0.40772369(mm),78.92574(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.123613(mm),0.92531282(mm),78.214774(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4826,7 +5197,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.09252(mm),3.8426891(mm),78.925564(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.300311(mm),-0.93545011(mm),78.359944(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4835,7 +5206,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.123097(mm),-0.14659618(mm),78.567519(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.544588(mm),-1.6612795(mm),79.198507(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4844,7 +5215,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.861676(mm),0.13042082(mm),78.966268(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.519798(mm),-1.758804(mm),79.026551(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4853,7 +5224,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.653909(mm),-0.15666794(mm),79.002903(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.8248(mm),0.48722299(mm),78.267463(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4862,7 +5233,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.557277(mm),0.047970623(mm),78.138307(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.341362(mm),1.7853993(mm),78.176379(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4871,7 +5242,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.023727(mm),0.75000143(mm),78.58504(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.121449(mm),-0.85332252(mm),79.273117(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4880,7 +5251,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.343821(mm),0.84452508(mm),78.175945(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.362418(mm),3.2288192(mm),78.877974(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4889,7 +5260,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.97922(mm),0.49817558(mm),78.592888(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.940143(mm),1.4582725(mm),79.305087(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -4898,211 +5269,16 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.034427(mm),-0.98272724(mm),78.2305(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.25563(mm),2.1373272(mm),78.720477(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 - -********************************************************************************************************* -* G4Track Information: Particle = pi+, Track ID = 3, Parent ID = 1 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process - 0 -1.01 cm -952 um 3.99 cm 57.1 MeV 0 eV 0 fm 0 fm Target initStep - 1 -9.7466312 mm -2.6189681 mm 3.8175308 cm 49.971046 MeV 7.1047047 MeV 2.43218 mm 2.43218 mm Target hIoni - 2 -9.7481763 mm -2.6674555 mm 3.8119383 cm 49.7797 MeV 191.3462 keV 74.049008 um 2.506229 mm Target Transportation - 3 -7.5209006 cm 6.5479362 cm -57.075622 cm 49.779715 MeV3.7068706e-14 meV 79.623618 cm 79.874241 cm CaptureMgnt Decay -Track (trackID 3, parentID 1) is processed with stopping code 2 - -********************************************************************************************************* -* G4Track Information: Particle = mu+, Track ID = 16, Parent ID = 3 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process - 0 -7.52 cm 6.55 cm -57.1 cm 54.6 MeV 0 eV 0 fm 0 fm CaptureMgnt initStep - 1 -11.690684 cm 6.4838288 cm -2 m 54.574466 MeV6.8899464e-14 meV 1.7893398 m 1.7893398 m CaptureMgnt Transportation - 2 -11.181775 cm 6.2708214 cm -2.0073229 m 54.570322 MeV 1.4594202 keV 9.1684774 mm 1.7985083 m World muIoni - 3 -6.0121468 cm 4.1065769 cm -2.0817815 m 54.545118 MeV 19.440478 keV 9.3193365 cm 1.8917017 m World muIoni - 4 -5.4558689 cm 3.875501 cm -2.0898067 m 54.541542 MeV 2.0257455 keV 1.0034366 cm 1.901736 m World muIoni - 5 2.0267954 cm 7.6805379 mm -2.1977722 m 54.50611 MeV 25.521477 keV 13.498615 cm 2.0367222 m World muIoni - 6 2.1727462 cm 7.0649622 mm -2.1998712 m 54.473923 MeV 296.64725 eV 2.6296073 mm 2.0393518 m World muIoni - 7 10.188868 cm -2.6680264 cm -2.3154621 m 54.446451 MeV 25.751562 keV 14.46579 cm 2.1840097 m World muIoni - 8 12.346653 cm -3.5837744 cm -2.3466813 m 54.435656 MeV 10.794438 keV 3.9039775 cm 2.2230495 m World muIoni - 9 13.297985 cm -3.9877002 cm -2.360426 m 54.431095 MeV 2.8939227 keV 1.719695 cm 2.2402464 m World muIoni - 10 14.846599 cm -4.6439862 cm -2.3828018 m 54.424326 MeV 6.768711 keV 2.7992318 cm 2.2682387 m World muIoni - 11 15.236256 cm -4.80941 cm -2.3884052 m 54.422499 MeV 781.95238 eV 7.0226564 mm 2.2752614 m World muIoni - 12 18.85413 cm -6.3446813 cm -2.4402901 m 54.405013 MeV 15.321071 keV 6.50896 cm 2.340351 m World muIoni - 13 18.897911 cm -6.3633494 cm -2.4409156 m 54.40333 MeV 142.93291 eV 786.05056 um 2.341137 m World muIoni - 14 19.421714 cm -6.5869483 cm -2.4484019 m 54.398732 MeV 3.2226262 keV 9.4064575 mm 2.3505435 m World muIoni - 15 21.013079 cm -7.2651407 cm -2.4711314 m 54.391897 MeV 5.0447262 keV 2.856339 cm 2.3791069 m World muIoni - 16 24.87967 cm -8.9120246 cm -2.5265283 m 54.371826 MeV 16.458901 keV 6.9534851 cm 2.4486417 m World muIoni - 17 28.531934 cm -10.457446 cm -2.5788446 m 54.35572 MeV 14.803176 keV 6.5648654 cm 2.5142904 m World muIoni - 18 29.033567 cm -10.670034 cm -2.5860592 m 54.351702 MeV 1.4159033 keV 9.0406169 mm 2.523331 m World muIoni - 19 30.280492 cm -11.199457 cm -2.6039929 m 54.342982 MeV 4.253095 keV 2.2475126 cm 2.5458061 m World muIoni - 20 35.151919 cm -13.266151 cm -2.6742049 m 54.324957 MeV 16.819944 keV 8.7920111 cm 2.6337263 m World muIoni - 21 36.372179 cm -13.783364 cm -2.6917236 m 54.320726 MeV 2.2502909 keV 2.1967181 cm 2.6556934 m World muIoni - 22 39.4853 cm -15.100729 cm -2.7364918 m 54.307449 MeV 11.462803 keV 5.6097179 cm 2.7117906 m World muIoni - 23 49.448214 cm -19.324127 cm -2.8802232 m 54.27168 MeV 33.639888 keV 17.991266 cm 2.8917033 m World muIoni - 24 58.840472 cm -23.336052 cm -3.0151484 m 54.238396 MeV 31.298654 keV 16.922165 cm 3.0609249 m World muIoni - 25 61.094385 cm -24.313585 cm -3.047169 m 54.104628 MeV 6.7244879 keV 4.0359557 cm 3.1012845 m World muIoni - 26 65.607727 cm -26.292319 cm -3.1108962 m 54.041388 MeV 17.433809 keV 8.0558837 cm 3.1818433 m World muIoni - 27 66.663442 cm -26.757017 cm -3.125791 m 54.033333 MeV 2.7349025 keV 1.883886 cm 3.2006822 m World muIoni - 28 69.24557 cm -27.897413 cm -3.1622848 m 54.025279 MeV 6.6344622 keV 4.6136648 cm 3.2468188 m World muIoni - 29 72.087962 cm -29.157373 cm -3.2025049 m 54.014662 MeV 8.7953835 keV 5.0836342 cm 3.2976552 m World muIoni - 30 72.681895 cm -29.42028 cm -3.210923 m 54.005494 MeV 2.3597589 keV 1.0632598 cm 3.3082878 m World muIoni - 31 73.715066 cm -29.87626 cm -3.2255567 m 53.999584 MeV 3.5563283 keV 1.8484625 cm 3.3267724 m World muIoni - 32 75.114556 cm -30.495202 cm -3.2453849 m 53.993075 MeV 3.8405255 keV 2.5046419 cm 3.3518188 m World muIoni - 33 77.731389 cm -31.648803 cm -3.2825446 m 53.957731 MeV 7.6772523 keV 4.689035 cm 3.3987091 m World muIoni - 34 78.308126 cm -31.900974 cm -3.2907343 m 53.953852 MeV 1.7393457 keV 1.0329212 cm 3.4090384 m World muIoni - 35 78.533703 cm -31.99952 cm -3.2939347 m 53.952096 MeV 624.92916 eV 4.0375998 mm 3.413076 m World muIoni - 36 78.76011 cm -32.098338 cm -3.297148 m 53.94147 MeV 942.83672 eV 4.0531729 mm 3.4171291 m World muIoni - 37 83.658647 cm -34.236253 cm -3.3668009 m 53.91822 MeV 15.108639 keV 8.7796183 cm 3.5049253 m World muIoni - 38 84.11025 cm -34.433223 cm -3.3732414 m 53.91727 MeV 949.26886 eV 8.1088971 mm 3.5130342 m World muIoni - 39 85.893801 cm -35.211309 cm -3.3986817 m 53.907643 MeV 6.8666223 keV 3.2029043 cm 3.5450633 m World muIoni - 40 96.79228 cm -39.977006 cm -3.5544142 m 53.870028 MeV 33.819561 keV 19.596356 cm 3.7410268 m World muIoni - 41 1.0007641 m -41.434596 cm -3.6013462 m 53.856531 MeV 12.145177 keV 5.9106935 cm 3.8001337 m World muIoni - 42 1.0048682 m -41.614958 cm -3.6072066 m 53.845155 MeV 1.1680888 keV 7.3784003 mm 3.8075121 m World muIoni - 43 1.0373837 m -43.04834 cm -3.6536019 m 53.831796 MeV 11.731878 keV 5.8440088 cm 3.8659522 m World muIoni - 44 1.0661625 m -44.321878 cm -3.6947192 m 53.819223 MeV 11.401844 keV 5.1778749 cm 3.917731 m World muIoni - 45 1.0757718 m -44.745788 cm -3.7084127 m 53.815152 MeV 2.8327496 keV 1.7257567 cm 3.9349886 m World muIoni - 46 1.1869914 m -49.659413 cm -3.8670116 m 53.772685 MeV 40.926915 keV 19.984498 cm 4.1348335 m World muIoni - 47 1.1921013 m -49.887959 cm -3.8743353 m 53.765668 MeV 1.3146887 keV 9.2179927 mm 4.1440515 m World muIoni - 48 1.229948 m -51.583945 cm -3.9286303 m 53.750256 MeV 14.157556 keV 6.8322512 cm 4.212374 m World muIoni - 49 1.2464861 m -52.323819 cm -3.952435 m 53.743249 MeV 5.4579852 keV 2.9915129 cm 4.2422892 m World muIoni - 50 1.2598248 m -52.915989 cm -3.9716099 m 53.73778 MeV 4.4394651 keV 2.4096929 cm 4.2663861 m World muIoni - 51 1.2709804 m -53.411737 cm -3.9876213 m 53.73437 MeV 3.410499 keV 2.0134316 cm 4.2865204 m World muIoni - 52 1.2909826 m -54.299392 cm -4.0162134 m 53.726817 MeV 5.8071134 keV 3.6005444 cm 4.3225259 m World muIoni - 53 1.3618309 m -57.447047 cm -4.1176385 m 53.702041 MeV 24.776318 keV 12.766113 cm 4.450187 m World muIoni - 54 1.3802539 m -58.261439 cm -4.1440119 m 53.697716 MeV 4.3245011 keV 3.3185656 cm 4.4833726 m World muIoni - 55 1.3980612 m -59.049618 cm -4.1695142 m 53.684403 MeV 4.1582604 keV 3.2087215 cm 4.5154599 m World muIoni - 56 1.4191368 m -59.97989 cm -4.1996596 m 53.674433 MeV 8.5247641 keV 3.7940277 cm 4.5534001 m World muIoni - 57 1.4208975 m -60.057283 cm -4.2021776 m 53.66105 MeV 2.0776659 keV 3.1685032 mm 4.5565686 m World muIoni - 58 1.4311274 m -60.505378 cm -4.2167791 m 53.655444 MeV 3.961759 keV 1.8382988 cm 4.5749516 m World muIoni - 59 1.4822231 m -62.733475 cm -4.289613 m 53.630784 MeV 20.522757 keV 9.1716992 cm 4.6666686 m World muIoni - 60 1.5193763 m -64.368553 cm -4.3426656 m 53.619085 MeV 8.5292235 keV 6.680047 cm 4.7334691 m World muIoni - 61 1.5436464 m -65.451556 cm -4.3770468 m 53.605941 MeV 8.7475295 keV 4.3455688 cm 4.7769248 m World muIoni - 62 1.5724097 m -66.732757 cm -4.4177846 m 53.59789 MeV 8.0506886 keV 5.1488336 cm 4.8284131 m World muIoni - 63 1.5959255 m -67.786166 cm -4.4511372 m 53.590093 MeV 7.7968196 keV 4.2146952 cm 4.8705601 m World muIoni - 64 1.6449472 m -70.00821 cm -4.5206429 m 53.563654 MeV 18.425173 keV 8.7908682 cm 4.9584687 m World muIoni - 65 1.6648541 m -70.910238 cm -4.54886 m 53.555917 MeV 6.622053 keV 3.5691155 cm 4.9941599 m World muIoni - 66 1.6696978 m -71.132185 cm -4.5557292 m 53.553515 MeV 1.3264186 keV 8.6932952 mm 5.0028532 m World muIoni - 67 1.7920728 m -76.737204 cm -4.7292709 m 53.504256 MeV 49.259539 keV 21.962315 cm 5.2224763 m World muIoni - 68 1.8447851 m -79.106525 cm -4.8036936 m 53.483186 MeV 19.997167 keV 9.4226982 cm 5.3167033 m World muIoni - 69 1.8449565 m -79.114309 cm -4.8039367 m 53.482949 MeV 237.27591 eV 307.42611 um 5.3170108 m World muIoni - 70 1.8526303 m -79.462928 cm -4.8148228 m 53.480109 MeV 1.4113621 keV 1.3767608 cm 5.3307784 m World muIoni - 71 1.8675254 m -80.141143 cm -4.8359603 m 53.472375 MeV 6.4468803 keV 2.6733085 cm 5.3575114 m World muIoni - 72 1.8897153 m -81.149734 cm -4.8673818 m 53.462606 MeV 7.4329146 keV 3.9767189 cm 5.3972786 m World muIoni - 73 1.9436903 m -83.606983 cm -4.9439469 m 53.442624 MeV 18.041411 keV 9.6847076 cm 5.4941257 m World muIoni - 74 1.9456828 m -83.697452 cm -4.9467872 m 53.442261 MeV 362.32129 eV 3.5854428 mm 5.4977112 m World muIoni - 75 1.952125 m -83.990373 cm -4.9559809 m 53.43876 MeV 2.1489927 keV 1.1601988 cm 5.5093131 m World muIoni - 76 1.9679447 m -84.713764 cm -4.9786092 m 53.432986 MeV 4.542873 keV 2.8541789 cm 5.5378549 m World muIoni - 77 1.9824792 m -85.37416 cm -4.9993427 m 53.426018 MeV 4.2931815 keV 2.616761 cm 5.5640225 m World muIoni - 78 1.988314 m -85.637769 cm -5.0076639 m 53.423029 MeV 1.9152274 keV 1.0499331 cm 5.5745219 m World muIoni - 79 2.003714 m -86.332531 cm -5.029624 m 53.416684 MeV 5.2082488 keV 2.770696 cm 5.6022288 m World muIoni - 80 2.0120666 m -86.707169 cm -5.0415094 m 53.413043 MeV 1.4566801 keV 1.5002163 cm 5.617231 m World muIoni - 81 2.0498427 m -88.399216 cm -5.095264 m 53.400418 MeV 11.044652 keV 6.7844704 cm 5.6850757 m World muIoni - 82 2.0809023 m -89.78709 cm -5.139448 m 53.390442 MeV 9.9759673 keV 5.5763274 cm 5.740839 m World muIoni - 83 2.0870087 m -90.061203 cm -5.1481566 m 53.387067 MeV 1.969257 keV 1.0983726 cm 5.7518227 m World muIoni - 84 2.234497 m -96.683756 cm -5.3587195 m 53.340174 MeV 45.515881 keV 26.547315 cm 6.0172959 m World muIoni - 85 2.2617165 m -97.936681 cm -5.3974654 m 53.329041 MeV 7.9481443 keV 4.8980859 cm 6.0662767 m World muIoni - 86 2.2808998 m -98.817531 cm -5.4246707 m 53.311312 MeV 7.3728801 keV 3.4434299 cm 6.100711 m World muIoni - 87 2.2821278 m -98.873986 cm -5.4264131 m 53.309579 MeV 357.39502 eV 2.2051131 mm 6.1029161 m World muIoni - 88 2.2861077 m -99.057167 cm -5.4320646 m 53.30714 MeV 1.2946252 keV 7.1508231 mm 6.1100669 m World muIoni - 89 2.2864522 m -99.073022 cm -5.432554 m 53.306087 MeV 0 eV 619.16732 um 6.1106861 m World muIoni - 90 2.3548561 m -1.0221755 m -5.5296956 m 53.2626 MeV 23.84802 keV 12.290016 cm 6.2335863 m World muIoni - 91 2.3919101 m -1.039136 m -5.582612 m 53.245614 MeV 15.681993 keV 6.6789267 cm 6.3003755 m World muIoni - 92 2.4001462 m -1.0429111 m -5.594413 m 53.239907 MeV 3.3483138 keV 1.4877763 cm 6.3152533 m World muIoni - 93 2.4186246 m -1.0513671 m -5.6208841 m 53.230186 MeV 7.043459 keV 3.3371827 cm 6.3486251 m World muIoni - 94 2.5030964 m -1.0899083 m -5.7417206 m 53.203139 MeV 25.829536 keV 15.238917 cm 6.5010143 m World muIoni - 95 2.5058537 m -1.0911439 m -5.7456513 m 53.199944 MeV 1.4728287 keV 4.9578543 mm 6.5059722 m World muIoni - 96 2.5119782 m -1.0938903 m -5.7543899 m 53.192267 MeV 686.7867 eV 1.1018843 cm 6.516991 m World muIoni - 97 2.5476491 m -1.1097059 m -5.8050169 m 53.174044 MeV 16.496886 keV 6.3919234 cm 6.5809102 m World muIoni - 98 2.5942761 m -1.1302898 m -5.870903 m 53.155209 MeV 16.627674 keV 8.3299228 cm 6.6642095 m World muIoni - 99 2.6064863 m -1.1356475 m -5.8881056 m 53.149384 MeV 4.1595578 keV 2.1765157 cm 6.6859746 m World muIoni - 100 2.6781776 m -1.1670999 m -5.9889672 m 53.126695 MeV 22.688624 keV 12.767937 cm 6.813654 m World muIoni - 101 2.6934888 m -1.1737975 m -6.0104429 m 53.115151 MeV 4.5598897 keV 2.7212193 cm 6.8408662 m World muIoni - 102 2.762412 m -1.2040791 m -6.107165 m 53.093197 MeV 21.953237 keV 12.256663 cm 6.9634328 m World muIoni - 103 2.7741352 m -1.20922 m -6.1236743 m 53.086726 MeV 3.3532868 keV 2.0890727 cm 6.9843235 m World muIoni - 104 2.7915931 m -1.216835 m -6.1482197 m 52.971109 MeV 5.2616492 keV 3.1068348 cm 7.0153919 m World muIoni - 105 2.8705554 m -1.2517111 m -6.2593265 m 52.93676 MeV 30.033511 keV 14.069892 cm 7.1560908 m World muIoni - 106 2.8780516 m -1.2549919 m -6.2698682 m 52.932032 MeV 2.3261948 keV 1.3344875 cm 7.1694357 m World muIoni - 107 2.8879979 m -1.2593312 m -6.2838243 m 52.925076 MeV 4.6986501 keV 1.7678549 cm 7.1871142 m World muIoni - 108 2.8998678 m -1.2645089 m -6.3005008 m 52.918061 MeV 5.471142 keV 2.1114167 cm 7.2082284 m World muIoni - 109 2.9001992 m -1.2646537 m -6.3009669 m 52.917899 MeV 161.7581 eV 589.9021 um 7.2088183 m World muIoni - 110 2.9721364 m -1.2960823 m -6.402138 m 52.887371 MeV 23.593693 keV 12.80562 cm 7.3368745 m World muIoni - 111 3.041825 m -1.3265981 m -6.4997318 m 52.85825 MeV 24.294282 keV 12.374292 cm 7.4606174 m World muIoni - 112 3.045711 m -1.3283267 m -6.5052085 m 52.83933 MeV 649.57565 eV 6.9342185 mm 7.4675516 m World muIoni - 113 3.0836165 m -1.3451772 m -6.5587363 m 52.821406 MeV 12.508451 keV 6.7720027 cm 7.5352717 m World muIoni - 114 3.0860721 m -1.3462711 m -6.5622048 m 52.799294 MeV 715.41486 eV 4.3883028 mm 7.53966 m World muIoni - 115 3.1101107 m -1.3569231 m -6.5961778 m 52.789925 MeV 8.3768259 keV 4.2959131 cm 7.5826191 m World muIoni - 116 3.1196049 m -1.3611652 m -6.609597 m 52.784792 MeV 2.1476017 keV 1.6976695 cm 7.5995958 m World muIoni - 117 3.1345338 m -1.3678333 m -6.6307036 m 52.77914 MeV 4.4829175 keV 2.6698781 cm 7.6262946 m World muIoni - 118 3.1356887 m -1.3683447 m -6.6323325 m 52.776634 MeV 69.928798 eV 2.0612123 mm 7.6283558 m World muIoni - 119 3.1487879 m -1.3741497 m -6.6507981 m 52.772086 MeV 2.5631359 keV 2.3372368 cm 7.6517282 m World muIoni - 120 3.2319539 m -1.410909 m -6.7679263 m 52.74316 MeV 27.669058 keV 14.827998 cm 7.8000081 m World muIoni - 121 3.2434134 m -1.4159277 m -6.7841391 m 52.738154 MeV 3.85431 keV 2.0478348 cm 7.8204865 m World muIoni - 122 3.3197579 m -1.4492788 m -6.89185 m 52.626666 MeV 25.424022 keV 13.617078 cm 7.9566573 m World muIoni - 123 3.3297879 m -1.4535599 m -6.906061 m 52.622305 MeV 3.0388656 keV 1.7913215 cm 7.9745705 m World muIoni - 124 3.3314864 m -1.4542854 m -6.9084709 m 52.620434 MeV 633.40443 eV 3.0362214 mm 7.9776067 m World muIoni - 125 3.3903329 m -1.4794315 m -6.9920032 m 52.598584 MeV 20.514286 keV 10.522797 cm 8.0828347 m World muIoni - 126 3.4024917 m -1.4845865 m -7.0091963 m 52.596165 MeV 2.419579 keV 2.1679734 cm 8.1045144 m World muIoni - 127 3.4304631 m -1.4964552 m -7.0488113 m 52.582487 MeV 7.7118863 keV 4.992613 cm 8.1544405 m World muIoni - 128 3.4556202 m -1.5070892 m -7.0844734 m 52.569031 MeV 7.4815301 keV 4.491939 cm 8.1993599 m World muIoni - 129 3.4851969 m -1.5195147 m -7.126301 m 52.553878 MeV 9.7830368 keV 5.2713632 cm 8.2520736 m World muIoni - 130 3.5084073 m -1.5292931 m -7.1591307 m 52.527421 MeV 9.5706447 keV 4.1377908 cm 8.2934515 m World muIoni - 131 3.5108329 m -1.5303167 m -7.1625624 m 52.52494 MeV 550.16263 eV 4.3252807 mm 8.2977767 m World muIoni - 132 3.5228655 m -1.5353891 m -7.1795774 m 52.520139 MeV 3.756564 keV 2.144814 cm 8.3192249 m World muIoni - 133 3.6427286 m -1.5857702 m -7.34901 m 52.478072 MeV 40.378279 keV 21.357235 cm 8.5327972 m World muIoni - 134 3.660663 m -1.5932794 m -7.3744168 m 52.469978 MeV 4.1665477 keV 3.1992724 cm 8.56479 m World muIoni - 135 3.6638352 m -1.5946265 m -7.3789215 m 52.466774 MeV 757.83324 eV 5.6718686 mm 8.5704618 m World muIoni - 136 3.6760178 m -1.5998121 m -7.3962187 m 52.458572 MeV 3.774257 keV 2.1783047 cm 8.5922449 m World muIoni - 137 3.6991807 m -1.6096533 m -7.4291183 m 52.449415 MeV 8.0619369 keV 4.1421641 cm 8.6336665 m World muIoni - 138 3.7250943 m -1.6206983 m -7.4658513 m 52.440785 MeV 7.64012 keV 4.6290561 cm 8.6799571 m World muIoni - 139 3.7476209 m -1.6302959 m -7.4977362 m 52.426461 MeV 13.095687 keV 4.0202182 cm 8.7201593 m World muIoni - 140 3.7821693 m -1.644945 m -7.546502 m 52.412051 MeV 13.294776 keV 6.1532916 cm 8.7816922 m World muIoni - 141 3.8334335 m -1.6667162 m -7.6190129 m 52.390369 MeV 19.184671 keV 9.1432189 cm 8.8731244 m World muIoni - 142 3.8921255 m -1.6919756 m -7.7027746 m 52.370904 MeV 17.122049 keV 10.535104 cm 8.9784754 m World muIoni - 143 3.9138668 m -1.7013223 m -7.7336328 m 52.364342 MeV 5.5539545 keV 3.888802 cm 9.0173634 m World muIoni - 144 3.9259763 m -1.706518 m -7.7507636 m 52.35901 MeV 5.3324412 keV 2.161247 cm 9.0389759 m World muIoni - 145 3.9469529 m -1.7155088 m -7.7804383 m 52.343715 MeV 8.6104201 keV 3.7435893 cm 9.0764118 m World muIoni - 146 3.9681551 m -1.7245657 m -7.8105463 m 52.33341 MeV 5.6905612 keV 3.7921687 cm 9.1143335 m World muIoni - 147 3.9728223 m -1.7265561 m -7.8171568 m 52.328873 MeV 1.9460905 keV 8.333248 mm 9.1226667 m World muIoni - 148 3.9954037 m -1.736196 m -7.849121 m 52.317652 MeV 9.4039181 keV 4.0305785 cm 9.1629725 m World muIoni - 149 4.0117565 m -1.743211 m -7.872329 m 52.310546 MeV 5.032328 keV 2.9244487 cm 9.192217 m World muIoni - 150 4.0218787 m -1.7475771 m -7.8867704 m 52.301711 MeV 4.3647311 keV 1.8167915 cm 9.2103849 m World muIoni - 151 4.0265818 m -1.7496026 m -7.8934967 m 52.291187 MeV 1.7523754 keV 8.4536694 mm 9.2188386 m World muIoni - 152 4.0292768 m -1.7507598 m -7.8973512 m 52.288418 MeV 767.5279 eV 4.8435241 mm 9.2236821 m World muIoni - 153 4.0415051 m -1.7560029 m -7.9148514 m 52.284937 MeV 2.0955527 keV 2.1983563 cm 9.2456657 m World muIoni - 154 4.0523101 m -1.7606525 m -7.9303205 m 52.279143 MeV 4.7990987 keV 1.9433519 cm 9.2650992 m World muIoni - 155 4.0780681 m -1.7717335 m -7.9672349 m 52.263705 MeV 10.774329 keV 4.6356688 cm 9.3114559 m World muIoni - 156 4.1155129 m -1.7878296 m -8.0208277 m 52.252248 MeV 10.129082 keV 6.7330457 cm 9.3787863 m World muIoni - 157 4.1273991 m -1.7929437 m -8.0378132 m 52.245551 MeV 3.7084771 keV 2.135282 cm 9.4001392 m World muIoni - 158 4.1686392 m -1.8105982 m -8.096721 m 52.197469 MeV 15.044165 keV 7.4044397 cm 9.4741835 m World muIoni - 159 4.1918706 m -1.820629 m -8.1296951 m 52.188108 MeV 8.3544363 keV 4.1564501 cm 9.515748 m World muIoni - 160 4.2177843 m -1.831813 m -8.1664481 m 52.15221 MeV 10.250362 keV 4.6339894 cm 9.5620879 m World muIoni - 161 4.2469078 m -1.8444148 m -8.2078135 m 52.141364 MeV 8.4308616 keV 5.2135221 cm 9.6142232 m World muIoni - 162 4.2473243 m -1.8445947 m -8.2084053 m 52.139518 MeV 694.17278 eV 745.67877 um 9.6149688 m World muIoni - 163 4.2673617 m -1.8532438 m -8.2368718 m 52.122495 MeV 7.4480263 keV 3.5869901 cm 9.6508387 m World muIoni - 164 4.293922 m -1.8647372 m -8.2744526 m 52.108949 MeV 9.6879898 keV 4.7432721 cm 9.6982715 m World muIoni - 165 4.3314346 m -1.8810251 m -8.3275223 m 52.093977 MeV 12.486394 keV 6.6999293 cm 9.7652708 m World muIoni - 166 4.3493365 m -1.888752 m -8.3529276 m 52.081975 MeV 5.9347303 keV 3.2025061 cm 9.7972958 m World muIoni - 167 4.3701608 m -1.8977734 m -8.3825397 m 52.072305 MeV 8.5795209 keV 3.7308424 cm 9.8346042 m World muIoni - 168 4.3828849 m -1.9033059 m -8.4006234 m 52.067633 MeV 3.3967478 keV 2.2793209 cm 9.8573975 m World muIoni - 169 4.4734175 m -1.9427579 m -8.5294216 m 52.036589 MeV 28.181848 keV 16.230141 cm 10.019699 m World muIoni - 170 4.475811 m -1.9438169 m -8.5328675 m 52.03412 MeV 924.11345 eV 4.3271701 mm 10.024026 m World muIoni - 171 4.5235397 m -1.9649116 m -8.6015548 m 52.015655 MeV 16.926757 keV 8.6261116 cm 10.110287 m World muIoni - 172 4.5428397 m -1.9734442 m -8.6293355 m 52.006707 MeV 7.748817 keV 3.4886444 cm 10.145174 m World muIoni - 173 4.5581959 m -1.9802786 m -8.6514798 m 51.996188 MeV 6.8438778 keV 2.7800979 cm 10.172975 m World muIoni - 174 4.5658169 m -1.9836701 m -8.6624902 m 51.98733 MeV 3.2704812 keV 1.38134 cm 10.186788 m World muIoni - 175 4.5674247 m -1.9843848 m -8.6648198 m 51.976433 MeV 510.95835 eV 2.9193413 mm 10.189707 m World muIoni - 176 4.5858256 m -1.9925369 m -8.6914942 m 51.969841 MeV 6.5921864 keV 3.3415217 cm 10.223123 m OutOfWorld Transportation -Track (trackID 16, parentID 3) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.863447968186(mm),2.6340033018249(mm),78.78962902842(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.860415(mm),-2.5569653(mm),78.43751(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5111,7 +5287,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.93735(mm),-0.35580345(mm),79.129252(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.618235(mm),-1.1684194(mm),79.185521(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5120,7 +5296,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.023542(mm),1.1555331(mm),78.7614(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.980741(mm),0.69147363(mm),78.416293(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5129,7 +5305,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.573204(mm),2.6476435(mm),79.193461(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.713712(mm),-1.306392(mm),78.992358(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5138,7 +5314,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.545779(mm),3.4033493(mm),78.845643(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.221406(mm),-1.4086351(mm),78.550184(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5147,7 +5323,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.915338(mm),2.9727425(mm),79.133133(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.281271(mm),-0.70344669(mm),78.715956(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5156,7 +5332,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.750701(mm),1.6327078(mm),79.33849(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.562092(mm),-0.72247488(mm),79.371747(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5165,7 +5341,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.730938(mm),1.0200037(mm),78.46034(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.657098(mm),-2.7522545(mm),79.002341(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5174,7 +5350,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.680948(mm),-3.109999(mm),78.469155(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.888539(mm),2.5451715(mm),78.785205(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5183,7 +5359,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.210173(mm),2.2879325(mm),78.552165(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.872051(mm),-0.22810652(mm),78.788112(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5192,7 +5368,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.247394(mm),3.2889563(mm),78.721929(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.354156(mm),-0.61164063(mm),78.703104(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5201,7 +5377,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.799223(mm),-2.1261994(mm),79.153608(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.420853(mm),2.1783619(mm),78.867671(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5210,7 +5386,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.811349(mm),3.0019343(mm),78.622488(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.099793(mm),0.6772836(mm),78.395301(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5219,7 +5395,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.778298(mm),2.5203601(mm),78.451989(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.458628(mm),0.22961768(mm),78.332029(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5228,7 +5404,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.789006(mm),-3.6396675(mm),78.979082(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.628059(mm),1.652972(mm),79.007461(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5237,7 +5413,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.173763(mm),-2.5153507(mm),78.911239(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.547466(mm),-3.6370728(mm),79.021672(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5246,7 +5422,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.78014(mm),0.26930876(mm),78.980646(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.273478(mm),-2.5587596(mm),78.541003(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5255,7 +5431,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.58615(mm),-0.32691855(mm),78.662197(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.621319(mm),1.1619925(mm),78.655996(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5264,7 +5440,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.936066(mm),3.4129593(mm),78.953152(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.95827(mm),2.134459(mm),79.125563(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5273,7 +5449,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.46098(mm),0.81559149(mm),78.860595(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.158018(mm),-1.6875168(mm),79.266669(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5282,7 +5458,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.369943(mm),0.62968462(mm),79.229301(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.039873(mm),-0.20006301(mm),79.463829(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5291,7 +5467,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.621421(mm),2.9594353(mm),78.832305(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.792346(mm),1.159972(mm),78.449512(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5300,7 +5476,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.256646(mm),2.061016(mm),78.543971(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.760648(mm),2.8752281(mm),78.455102(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5309,7 +5485,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.957518(mm),3.1078052(mm),78.596715(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.256709(mm),1.3056294(mm),78.896613(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5318,7 +5494,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.15571(mm),2.0251865(mm),78.738095(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.162807(mm),0.56366435(mm),78.736844(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5327,7 +5503,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.710327(mm),2.2564793(mm),78.287647(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.836584(mm),-0.20786211(mm),78.970693(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5336,7 +5512,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.699185(mm),0.42025242(mm),79.171247(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.241494(mm),2.6965649(mm),78.370315(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5345,7 +5521,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.177086(mm),-2.8497816(mm),79.263307(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.551677(mm),-2.9843944(mm),79.197257(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5354,7 +5530,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.465758(mm),0.051311812(mm),78.154445(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.011327(mm),-1.6384554(mm),78.763554(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5363,7 +5539,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.367032(mm),0.44206345(mm),79.053488(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.873777(mm),2.0608032(mm),79.316789(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5372,7 +5548,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.232844(mm),-1.841537(mm),78.900822(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.278412(mm),2.4534223(mm),78.71646(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5381,7 +5557,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.8402(mm),2.266118(mm),79.146382(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.361111(mm),0.36212144(mm),78.349224(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5390,7 +5566,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.692646(mm),-2.0602361(mm),78.290765(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.853996(mm),2.5484878(mm),78.614969(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5399,7 +5575,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.896949(mm),1.9421002(mm),79.136376(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.14618(mm),-2.112052(mm),78.739776(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5408,7 +5584,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.670002(mm),0.79646108(mm),78.823739(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.476897(mm),0.2103292(mm),79.210442(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5417,7 +5593,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.722113(mm),2.8580043(mm),79.167204(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.934202(mm),-2.770903(mm),78.424499(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5426,7 +5602,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.039753(mm),0.80886795(mm),79.46385(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.040406(mm),0.32017955(mm),78.758427(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5435,7 +5611,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.877131(mm),-1.1371201(mm),79.316197(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.226889(mm),-2.4017578(mm),78.372891(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5444,7 +5620,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.566815(mm),0.36865759(mm),78.136625(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.811907(mm),-1.6595399(mm),78.975044(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5453,7 +5629,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.038145(mm),1.7388232(mm),79.111479(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.865205(mm),-0.2621324(mm),78.436665(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5462,7 +5638,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.716779(mm),2.3446969(mm),78.639164(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.846001(mm),0.059464976(mm),78.616378(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5471,7 +5647,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.113871(mm),-1.6722945(mm),78.9218(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.287708(mm),3.1964363(mm),78.714821(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5480,7 +5656,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.994996(mm),-2.8712866(mm),79.119088(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.555588(mm),1.5532492(mm),79.02024(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5489,7 +5665,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.442844(mm),-2.9837803(mm),78.863793(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.731056(mm),-0.69933612(mm),78.9893(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5498,7 +5674,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.275386(mm),-1.2909847(mm),78.540666(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.504626(mm),0.45112708(mm),78.676572(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5507,7 +5683,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.955918(mm),2.4173318(mm),78.949651(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.312549(mm),3.1237332(mm),78.886767(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5516,7 +5692,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.25729(mm),1.4701202(mm),79.072838(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.016228(mm),-1.097832(mm),78.233709(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5525,7 +5701,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.040356(mm),-3.5771987(mm),78.758435(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.012162(mm),0.72796645(mm),78.234426(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5534,7 +5710,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.004623(mm),0.82703477(mm),78.412082(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.429571(mm),-1.9856185(mm),79.04246(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5543,7 +5719,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.276678(mm),-0.53041247(mm),78.364112(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.612713(mm),1.2887629(mm),79.010167(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5552,7 +5728,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.907282(mm),0.87074805(mm),79.134554(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.487013(mm),1.2034652(mm),78.503351(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5561,7 +5737,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.97425(mm),2.7139934(mm),78.593765(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.982669(mm),2.3894663(mm),78.944934(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5570,7 +5746,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.925213(mm),0.89089083(mm),78.955065(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.791027(mm),3.8614688(mm),78.626072(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5579,16 +5755,45 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.887719(mm),0.75316841(mm),79.31433(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.254471(mm),3.0580936(mm),78.897008(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = pi+, Track ID = 4, Parent ID = 1 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -1.27 cm 3.06 mm 7.59 cm 23.1 MeV 0 eV 0 fm 0 fm Target initStep + 1 -1.2469511 cm 2.5710263 mm 7.5603935 cm 19.48702 MeV 3.5654551 MeV 654.72676 um 654.72676 um Target hIoni + 2 -1.217386 cm 2.1909543 mm 7.5398756 cm 16.029046 MeV 3.4579746 MeV 528.61473 um 1.1833415 mm Target hIoni + 3 -1.1939998 cm 1.9158735 mm 7.5194516 cm 12.639656 MeV 3.3893895 MeV 419.46269 um 1.6028042 mm Target hIoni + 4 -1.1716883 cm 1.7259351 mm 7.5062169 cm 9.7280661 MeV 2.91159 MeV 325.82434 um 1.9286285 mm Target hIoni + 5 -1.1522221 cm 1.5982492 mm 7.4968051 cm 6.5263955 MeV 3.2016706 MeV 255.38538 um 2.1840139 mm Target hIoni + 6 -1.1385291 cm 1.5087286 mm 7.4911994 cm 3.3161471 MeV 3.2102484 MeV 183.56049 um 2.3675744 mm Target hIoni + 7 -1.1318758 cm 1.4780745 mm 7.489306 cm 73.55754 keV 3.2425896 MeV 78.568422 um 2.4461428 mm Target hIoni + 8 -1.1318594 cm 1.4780142 mm 7.4893012 cm 0 eV 73.55754 keV 626.9704 nm 2.4467698 mm Target hIoni + 9 -1.1318594 cm 1.4780142 mm 7.4893012 cm 0 eV 0 eV 0 fm 2.4467698 mm Target Decay +Track (trackID 4, parentID 1) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = mu+, Track ID = 14, Parent ID = 4 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -1.13 cm 1.48 mm 7.49 cm 4.12 MeV 0 eV 0 fm 0 fm Target initStep + 1 -1.1396925 cm 1.4816822 mm 7.4954584 cm 1.1514728 MeV 2.9683398 MeV 133.4438 um 133.4438 um Target muIoni + 2 -1.1406635 cm 1.4802142 mm 7.4958439 cm 2.220446e-07 meV 1.1514728 MeV 14.173096 um 147.6169 um Target muIoni + 3 -1.1406635 cm 1.4802142 mm 7.4958439 cm 0 eV 2.220446e-07 meV 32.619026 fm 147.6169 um Target muIoni + 4 -1.1406635 cm 1.4802142 mm 7.4958439 cm 0 eV 0 eV 0 fm 147.6169 um Target DecayWithSpin +Track (trackID 14, parentID 4) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.999102(mm),-1.1965484(mm),78.942037(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.051333(mm),0.3085434(mm),79.285481(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5597,7 +5802,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.271521(mm),-2.933191(mm),78.365021(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.00061(mm),-1.0511869(mm),78.765444(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5606,7 +5811,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.093205(mm),-3.0894712(mm),78.396463(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.708382(mm),-0.60467538(mm),78.640644(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5615,7 +5820,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.638685(mm),-0.39388861(mm),78.30028(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.854978(mm),-2.0923566(mm),79.143777(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5624,7 +5829,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.194887(mm),2.3454629(mm),78.55486(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.409551(mm),2.4736618(mm),79.04599(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5633,7 +5838,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.46081(mm),2.1794053(mm),78.331644(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.464767(mm),-1.1467054(mm),78.507273(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5642,7 +5847,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.90571(mm),-0.18102112(mm),79.134831(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.423058(mm),1.7961632(mm),79.396263(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5651,7 +5856,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.782383(mm),3.2149197(mm),78.627596(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.484514(mm),0.54822055(mm),79.209099(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5660,7 +5865,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.178488(mm),0.64015313(mm),78.734079(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.19359(mm),0.59759427(mm),78.907743(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5669,45 +5874,16 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.385646(mm),-3.0040049(mm),79.050205(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.955113(mm),2.0317812(mm),78.949793(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 - -********************************************************************************************************* -* G4Track Information: Particle = pi+, Track ID = 5, Parent ID = 1 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process - 0 -8.66 mm -3.02 mm 5.84 cm 15.5 MeV 0 eV 0 fm 0 fm Target initStep - 1 -8.9273112 mm -3.2600095 mm 5.8610945 cm 12.50737 MeV 3.0308259 MeV 418.80585 um 418.80585 um Target hIoni - 2 -9.167733 mm -3.4152819 mm 5.8774468 cm 9.4482111 MeV 3.0591586 MeV 334.26008 um 753.06593 um Target hIoni - 3 -9.3287319 mm -3.5526133 mm 5.8915759 cm 6.9460892 MeV 2.5021219 MeV 259.11014 um 1.0121761 mm Target hIoni - 4 -9.4318058 mm -3.6590593 mm 5.9046563 cm 3.6725276 MeV 3.2735616 MeV 202.69112 um 1.2148672 mm Target hIoni - 5 -9.3980886 mm -3.7270424 mm 5.9076255 cm 402.80615 keV 3.2697215 MeV 111.38269 um 1.3262499 mm Target hIoni - 6 -9.3970237 mm -3.7287232 mm 5.9077276 cm 31.943585 keV 370.86256 keV 3.5179265 um 1.3297678 mm Target hIoni - 7 -9.3970273 mm -3.7287635 mm 5.9077277 cm 6.9388939e-09 meV 31.943585 keV 185.41432 nm 1.3299532 mm Target hIoni - 8 -9.3970273 mm -3.7287635 mm 5.9077277 cm 0 eV 6.9388939e-09 meV 2.2239643 fm 1.3299532 mm Target hIoni - 9 -9.3970273 mm -3.7287635 mm 5.9077277 cm 0 eV 0 eV 0 fm 1.3299532 mm Target Decay -Track (trackID 5, parentID 1) is processed with stopping code 2 - -********************************************************************************************************* -* G4Track Information: Particle = mu+, Track ID = 17, Parent ID = 5 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process - 0 -9.4 mm -3.73 mm 5.91 cm 4.12 MeV 0 eV 0 fm 0 fm Target initStep - 1 -9.4183823 mm -3.7955751 mm 5.8978369 cm 1.314548 MeV 2.8052647 MeV 143.89929 um 143.89929 um Target muIoni - 2 -9.4164957 mm -3.8001937 mm 5.8961043 cm 182.4414 keV 1.1321066 MeV 24.594761 um 168.49405 um Target muIoni - 3 -9.416287 mm -3.8002867 mm 5.8960562 cm 0 eV 182.4414 keV 1.31308 um 169.80713 um Target muIoni - 4 -9.416287 mm -3.8002867 mm 5.8960562 cm 0 eV 0 eV 0 fm 169.80713 um Target DecayWithSpin -Track (trackID 17, parentID 5) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.392021(mm),-1.4665328(mm),79.225408(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.458046(mm),1.8877106(mm),79.213766(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5716,7 +5892,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.093106(mm),-2.8007477(mm),78.749134(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.915905(mm),-1.8495506(mm),78.251398(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5725,7 +5901,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.251056(mm),0.49159821(mm),78.192302(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.633495(mm),-0.37907052(mm),79.18283(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5734,7 +5910,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.30742(mm),0.81036016(mm),78.711345(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.48627(mm),0.04948984(mm),79.385117(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5743,7 +5919,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.918337(mm),-0.93651887(mm),78.603624(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.893717(mm),-1.6298825(mm),79.313273(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5752,7 +5928,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.376292(mm),-0.20460476(mm),79.228182(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.23609(mm),2.1060438(mm),78.371268(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5761,7 +5937,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.029038(mm),-2.3775455(mm),78.23145(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.115267(mm),0.54955228(mm),78.568899(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5770,151 +5946,16 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.674772(mm),0.22634132(mm),78.11759(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.789183(mm),2.126913(mm),78.626397(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 - -********************************************************************************************************* -* G4Track Information: Particle = pi+, Track ID = 3, Parent ID = 1 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process - 0 -1.72 cm 226 um 7.52 cm 64.3 MeV 0 eV 0 fm 0 fm Target initStep - 1 -1.5806272 cm -2.2630661 mm 7.5712586 cm 56.027746 MeV 8.2598388 MeV 2.8967656 mm 2.8967656 mm Target hIoni - 2 -1.5372492 cm -3.5007558 mm 7.6037794 cm 52.163396 MeV 3.8643503 MeV 1.3565895 mm 4.2533551 mm Target Transportation - 3 -15.079109 cm 10.159742 cm 58.921654 cm 52.163416 MeV1.4173602e-13 meV 3.1244488 m 3.1287021 m CaptureMgnt Decay -Track (trackID 3, parentID 1) is processed with stopping code 2 - -********************************************************************************************************* -* G4Track Information: Particle = mu+, Track ID = 22, Parent ID = 3 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process - 0 -15.1 cm 10.2 cm 58.9 cm 36.6 MeV 0 eV 0 fm 0 fm CaptureMgnt initStep - 1 -24.031374 cm 3.8411112 cm 2 m 36.580154 MeV2.5903341e-13 meV 5.4706854 m 5.4706854 m CaptureMgnt Transportation - 2 -21.502613 cm 8.5400055 cm 2.0142426 m 36.567021 MeV 11.378492 keV 5.5229369 cm 5.5259148 m World muIoni - 3 -20.902887 cm 9.6549326 cm 2.0176408 m 36.561819 MeV 4.0976394 keV 1.3108062 cm 5.5390228 m World muIoni - 4 -19.800052 cm 11.702175 cm 2.0239027 m 36.555377 MeV 4.8127098 keV 2.4082297 cm 5.5631051 m World muIoni - 5 -17.934572 cm 15.159141 cm 2.0344127 m 36.416638 MeV 8.7255938 keV 4.0663582 cm 5.6037687 m World muIoni - 6 -16.256321 cm 18.249668 cm 2.0437777 m 36.405762 MeV 7.0279478 keV 3.6393603 cm 5.6401623 m World muIoni - 7 -15.610778 cm 19.440816 cm 2.0473857 m 36.3994 MeV 2.2128862 keV 1.4020466 cm 5.6541828 m World muIoni - 8 -13.436754 cm 23.469983 cm 2.0596387 m 36.387486 MeV 10.402358 keV 4.7394079 cm 5.7015769 m World muIoni - 9 -12.358204 cm 25.465074 cm 2.0656771 m 36.379705 MeV 7.781885 keV 2.3469726 cm 5.7250466 m World muIoni - 10 -11.747997 cm 26.592168 cm 2.0690934 m 36.375357 MeV 2.7666104 keV 1.3264268 cm 5.7383109 m World muIoni - 11 -10.54278 cm 28.820224 cm 2.0758447 m 36.370321 MeV 3.3869346 keV 2.6215637 cm 5.7645265 m World muIoni - 12 -6.0722658 cm 37.027593 cm 2.1007024 m 36.34453 MeV 23.372685 keV 9.6708818 cm 5.8612353 m World muIoni - 13 -5.8301775 cm 37.473702 cm 2.1020585 m 36.340741 MeV 2.2307209 keV 5.2536719 mm 5.866489 m World muIoni - 14 -2.4400758 cm 43.727448 cm 2.1210789 m 36.321586 MeV 17.175282 keV 7.3634312 cm 5.9401233 m World muIoni - 15 -7.0677418 mm 46.956035 cm 2.1309514 m 36.310725 MeV 8.41721 keV 3.7951022 cm 5.9780743 m World muIoni - 16 2.2633465 cm 52.437028 cm 2.147911 m 36.294979 MeV 13.390585 keV 6.4606111 cm 6.0426804 m World muIoni - 17 4.2231227 cm 56.067445 cm 2.1590879 m 36.281968 MeV 12.013742 keV 4.2743412 cm 6.0854238 m World muIoni - 18 4.41757 cm 56.428564 cm 2.1601893 m 36.280803 MeV 1.1650993 keV 4.2467392 mm 6.0896706 m World muIoni - 19 6.3042932 cm 59.934686 cm 2.1708899 m 36.269389 MeV 8.8004764 keV 4.1228238 cm 6.1308988 m World muIoni - 20 9.9363488 cm 66.718369 cm 2.1916896 m 36.244762 MeV 15.59624 keV 7.9709942 cm 6.2106088 m World muIoni - 21 9.9855698 cm 66.810485 cm 2.1919735 m 36.242506 MeV 97.278047 eV 1.0823078 mm 6.2116911 m World muIoni - 22 11.994008 cm 70.566703 cm 2.2035632 m 36.228904 MeV 10.662584 keV 4.4143247 cm 6.2558343 m World muIoni - 23 13.58045 cm 73.532207 cm 2.2126324 m 36.218807 MeV 6.7248178 keV 3.4833277 cm 6.2906676 m World muIoni - 24 17.569192 cm 80.971932 cm 2.2355002 m 36.199666 MeV 17.836342 keV 8.7458172 cm 6.3781258 m World muIoni - 25 17.796697 cm 81.397192 cm 2.2368277 m 36.197091 MeV 1.1156665 keV 5.0022613 mm 6.383128 m World muIoni - 26 21.058401 cm 87.56082 cm 2.2559088 m 36.177467 MeV 17.8937 keV 7.2298246 cm 6.4554263 m World muIoni - 27 21.958402 cm 89.28514 cm 2.2611498 m 36.170861 MeV 5.1576893 keV 2.0144391 cm 6.4755707 m World muIoni - 28 22.686638 cm 90.679414 cm 2.2653859 m 36.165791 MeV 4.0061617 keV 1.6290402 cm 6.4918611 m World muIoni - 29 22.823215 cm 90.940424 cm 2.2661829 m 36.162393 MeV 275.08018 eV 3.0517499 mm 6.4949128 m World muIoni - 30 23.436254 cm 92.111823 cm 2.2697684 m 36.153821 MeV 3.9059811 keV 1.369875 cm 6.5086116 m World muIoni - 31 25.312891 cm 95.691706 cm 2.2807363 m 36.140196 MeV 10.474759 keV 4.1881147 cm 6.5504927 m World muIoni - 32 25.541442 cm 96.129548 cm 2.2820785 m 36.135109 MeV 1.2648429 keV 5.1181695 mm 6.5556109 m World muIoni - 33 30.572188 cm 1.0579007 m 2.3116571 m 36.104341 MeV 27.365987 keV 11.28645 cm 6.6684754 m World muIoni - 34 30.741202 cm 1.0611617 m 2.3126469 m 36.102083 MeV 458.64199 eV 3.8039362 mm 6.6722793 m World muIoni - 35 30.913599 cm 1.0644863 m 2.3136578 m 36.093399 MeV 1.8898307 keV 3.879087 mm 6.6761584 m World muIoni - 36 34.698222 cm 1.1375675 m 2.3358084 m 36.072866 MeV 20.533135 keV 8.5228435 cm 6.7613868 m World muIoni - 37 36.957132 cm 1.1808947 m 2.3489971 m 36.059447 MeV 12.274552 keV 5.0610892 cm 6.8119977 m World muIoni - 38 39.286252 cm 1.2254294 m 2.362512 m 36.048144 MeV 10.19174 keV 5.2043222 cm 6.864041 m World muIoni - 39 42.371393 cm 1.2840891 m 2.3804694 m 36.028347 MeV 18.118914 keV 6.8667667 cm 6.9327086 m World muIoni - 40 46.467095 cm 1.3611012 m 2.4044887 m 36.006174 MeV 17.953942 keV 9.0472746 cm 7.0231814 m World muIoni - 41 47.195035 cm 1.374792 m 2.4088066 m 35.999677 MeV 3.0993615 keV 1.6095683 cm 7.0392771 m World muIoni - 42 49.533936 cm 1.418971 m 2.4227875 m 35.986108 MeV 10.846479 keV 5.1906704 cm 7.0911838 m World muIoni - 43 50.099762 cm 1.4295861 m 2.4261552 m 35.981127 MeV 3.5553197 keV 1.2491522 cm 7.1036753 m World muIoni - 44 51.532971 cm 1.4564008 m 2.4346508 m 35.973144 MeV 6.8941039 keV 3.1569175 cm 7.1352445 m World muIoni - 45 55.781105 cm 1.5356552 m 2.4597635 m 35.948438 MeV 23.164198 keV 9.3362822 cm 7.2286073 m World muIoni - 46 58.604095 cm 1.5880049 m 2.476301 m 35.928701 MeV 17.896799 keV 6.1732645 cm 7.2903399 m World muIoni - 47 61.901177 cm 1.6492401 m 2.4955231 m 35.910145 MeV 18.556181 keV 7.21549 cm 7.3624948 m World muIoni - 48 64.259589 cm 1.6932398 m 2.5092706 m 35.899201 MeV 9.8778325 keV 5.1780213 cm 7.414275 m World muIoni - 49 67.379348 cm 1.7515604 m 2.5274071 m 35.88398 MeV 13.714505 keV 6.8582356 cm 7.4828574 m World muIoni - 50 71.954157 cm 1.8354791 m 2.5531872 m 35.856033 MeV 27.946818 keV 9.8995178 cm 7.5818526 m World muIoni - 51 73.171622 cm 1.8577384 m 2.560007 m 35.837944 MeV 5.8151999 keV 2.6271805 cm 7.6081244 m World muIoni - 52 73.513555 cm 1.8639831 m 2.5619152 m 35.832653 MeV 2.8057268 keV 7.3709083 mm 7.6154953 m World muIoni - 53 74.002251 cm 1.8729014 m 2.5646449 m 35.829185 MeV 2.1466595 keV 1.0529429 cm 7.6260247 m World muIoni - 54 74.790927 cm 1.8872941 m 2.5690661 m 35.821404 MeV 5.925335 keV 1.6996992 cm 7.6430217 m World muIoni - 55 76.04969 cm 1.910303 m 2.5761083 m 35.816243 MeV 5.1610649 keV 2.7156093 cm 7.6701778 m World muIoni - 56 77.416767 cm 1.9352172 m 2.5837369 m 35.809043 MeV 5.8297715 keV 2.9424551 cm 7.6996023 m World muIoni - 57 89.111342 cm 2.1478669 m 2.6490385 m 35.748814 MeV 60.229606 keV 25.131971 cm 7.9509221 m World muIoni - 58 94.682147 cm 2.2506974 m 2.6804377 m 35.72051 MeV 27.20744 keV 12.109298 cm 8.072015 m World muIoni - 59 96.233045 cm 2.2791567 m 2.6891325 m 35.707431 MeV 7.7013206 keV 3.3556924 cm 8.105572 m World muIoni - 60 96.989813 cm 2.2930236 m 2.6933666 m 35.701042 MeV 3.2106633 keV 1.6355041 cm 8.121927 m World muIoni - 61 98.736202 cm 2.3249285 m 2.7031193 m 35.690026 MeV 9.4486001 keV 3.7656731 cm 8.1595837 m World muIoni - 62 1.0231511 m 2.3903222 m 2.7230834 m 35.674493 MeV 14.534918 keV 7.7173685 cm 8.2367574 m World muIoni - 63 1.0310276 m 2.4047057 m 2.7274906 m 35.668994 MeV 3.9790587 keV 1.6980861 cm 8.2537383 m World muIoni - 64 1.0417599 m 2.4242911 m 2.7334767 m 35.653353 MeV 5.9844764 keV 2.3121463 cm 8.2768597 m World muIoni - 65 1.0495114 m 2.4384599 m 2.7377964 m 35.647875 MeV 4.478838 keV 1.6718316 cm 8.2935781 m World muIoni - 66 1.1316031 m 2.5888501 m 2.7835168 m 35.599792 MeV 44.48733 keV 17.733293 cm 8.470911 m World muIoni - 67 1.1400241 m 2.6039366 m 2.7879645 m 35.594148 MeV 5.6441556 keV 1.7840948 cm 8.4887519 m World muIoni - 68 1.1579537 m 2.6360347 m 2.7974317 m 35.582764 MeV 9.7330571 keV 3.7965599 cm 8.5267175 m World muIoni - 69 1.1620895 m 2.6434943 m 2.7996444 m 35.575196 MeV 1.4150661 keV 8.8117047 mm 8.5355292 m World muIoni - 70 1.1724649 m 2.6622263 m 2.8052211 m 35.570744 MeV 3.4160919 keV 2.2127774 cm 8.557657 m World muIoni - 71 1.2416284 m 2.7867928 m 2.8425035 m 35.53392 MeV 34.300429 keV 14.727814 cm 8.7049351 m World muIoni - 72 1.3221356 m 2.9277024 m 2.8858271 m 35.494184 MeV 38.605381 keV 16.797067 cm 8.8729058 m World muIoni - 73 1.3629589 m 2.9975848 m 2.9075564 m 35.46525 MeV 21.889077 keV 8.379917 cm 8.956705 m World muIoni - 74 1.3816407 m 3.0294976 m 2.9174818 m 35.445897 MeV 9.0304845 keV 3.8287776 cm 8.9949928 m World muIoni - 75 1.4010607 m 3.0623805 m 2.9277228 m 35.415857 MeV 7.8195647 keV 3.953862 cm 9.0345314 m World muIoni - 76 1.4077604 m 3.0737246 m 2.9313239 m 35.384119 MeV 4.6101044 keV 1.365799 cm 9.0481894 m World muIoni - 77 1.4093109 m 3.0763544 m 2.9321629 m 35.379474 MeV 487.69503 eV 3.1660767 mm 9.0513555 m World muIoni - 78 1.4236419 m 3.1006895 m 2.9399096 m 35.369151 MeV 4.6731831 keV 2.9284602 cm 9.0806401 m World muIoni - 79 1.4727087 m 3.1836507 m 2.9664647 m 35.345115 MeV 24.036105 keV 9.9976734 cm 9.1806168 m World muIoni - 80 1.4874456 m 3.2086028 m 2.9744429 m 35.332942 MeV 8.1257981 keV 3.0057191 cm 9.210674 m World muIoni - 81 1.4919599 m 3.2162867 m 2.9769038 m 35.331497 MeV 1.4447097 keV 9.2453975 mm 9.2199194 m World muIoni - 82 1.4926793 m 3.2175115 m 2.977296 m 35.330863 MeV 633.933 eV 1.4736557 mm 9.221393 m World muIoni - 83 1.5005769 m 3.2309592 m 2.9816033 m 35.326818 MeV 4.0449499 keV 1.6179176 cm 9.2375722 m World muIoni - 84 1.5918201 m 3.3863663 m 3.0315871 m 35.276371 MeV 48.616214 keV 18.701739 cm 9.4245896 m World muIoni - 85 1.6240467 m 3.441789 m 3.0495396 m 35.259903 MeV 16.468077 keV 6.6577238 cm 9.4911668 m World muIoni - 86 1.6424501 m 3.4732096 m 3.0597013 m 35.250181 MeV 9.7219558 keV 3.7804839 cm 9.5289717 m World muIoni - 87 1.6503644 m 3.4867753 m 3.0640482 m 35.244787 MeV 3.4447836 keV 1.6296045 cm 9.5452677 m World muIoni - 88 1.6573645 m 3.498775 m 3.067907 m 35.242185 MeV 2.6019986 keV 1.4418168 cm 9.5596859 m World muIoni - 89 1.6630791 m 3.5085592 m 3.0710589 m 35.237046 MeV 4.066408 keV 1.1761099 cm 9.571447 m World muIoni - 90 1.6747469 m 3.5285767 m 3.0775049 m 35.230771 MeV 5.0074268 keV 2.4049671 cm 9.5954967 m World muIoni - 91 1.6846686 m 3.5456409 m 3.0829777 m 35.221497 MeV 3.3077561 keV 2.0483586 cm 9.6159802 m World muIoni - 92 1.7144243 m 3.5968666 m 3.0993639 m 35.200358 MeV 17.094298 keV 6.1465475 cm 9.6774457 m World muIoni - 93 1.7623212 m 3.6794767 m 3.1256542 m 35.178485 MeV 21.873588 keV 9.9044333 cm 9.77649 m World muIoni - 94 1.7647766 m 3.6837381 m 3.1270046 m 35.176064 MeV 552.67187 eV 5.1001866 mm 9.7815902 m World muIoni - 95 1.7774375 m 3.7057245 m 3.1339578 m 35.171698 MeV 4.366814 keV 2.6306827 cm 9.8078971 m World muIoni - 96 1.8244509 m 3.7874992 m 3.1598932 m 35.144685 MeV 25.965127 keV 9.7826675 cm 9.9057237 m World muIoni - 97 1.8597398 m 3.8490711 m 3.1790904 m 35.125907 MeV 18.778104 keV 7.3518407 cm 9.9792421 m World muIoni - 98 1.860604 m 3.8505673 m 3.1795538 m 35.125568 MeV 338.83945 eV 1.7889701 mm 9.9810311 m World muIoni - 99 1.8683955 m 3.8640671 m 3.1837324 m 35.119554 MeV 3.437733 keV 1.6137334 cm 9.9971684 m World muIoni - 100 1.8695907 m 3.866143 m 3.1843739 m 35.114854 MeV 1.0381568 keV 2.4797588 mm 9.9996482 m World muIoni - 101 1.8893312 m 3.9004731 m 3.194956 m 34.75897 MeV 6.3016949 keV 4.0990615 cm 10.040639 m World muIoni - 102 1.8915068 m 3.9042476 m 3.1961394 m 34.756247 MeV 1.6122785 keV 4.5144794 mm 10.045153 m World muIoni - 103 1.9475721 m 4.0015336 m 3.2266893 m 34.725961 MeV 27.992623 keV 11.636693 cm 10.16152 m World muIoni - 104 1.9587012 m 4.0206558 m 3.2326546 m 34.718639 MeV 5.1226082 keV 2.2915108 cm 10.184435 m World muIoni - 105 1.9626296 m 4.0273916 m 3.2347447 m 34.715421 MeV 1.6277566 keV 8.0729305 mm 10.192508 m World muIoni - 106 2.0020779 m 4.0949494 m 3.2557292 m 34.694073 MeV 18.423834 keV 8.0997535 cm 10.273506 m World muIoni - 107 2.0032781 m 4.097016 m 3.2563647 m 34.68986 MeV 1.0216878 keV 2.4729133 mm 10.275979 m World muIoni - 108 2.0567019 m 4.1889535 m 3.2846005 m 34.661514 MeV 28.345858 keV 11.001798 cm 10.385997 m World muIoni - 109 2.0575019 m 4.1903435 m 3.2850353 m 34.659079 MeV 347.37329 eV 1.6616926 mm 10.387658 m World muIoni - 110 2.0695156 m 4.2112288 m 3.2915807 m 34.649004 MeV 7.2670693 keV 2.4967304 cm 10.412626 m World muIoni - 111 2.1028622 m 4.2691247 m 3.3097632 m 34.633326 MeV 12.159064 keV 6.9242757 cm 10.481868 m World muIoni - 112 2.1603555 m 4.3694426 m 3.3411503 m 34.603163 MeV 27.64151 keV 11.980989 cm 10.601678 m World muIoni - 113 2.1609406 m 4.370473 m 3.3414699 m 34.601743 MeV 187.2933 eV 1.2273235 mm 10.602906 m World muIoni - 114 2.1909488 m 4.4232733 m 3.357898 m 34.580836 MeV 17.976691 keV 6.291467 cm 10.66582 m World muIoni - 115 2.2170598 m 4.4691242 m 3.3724132 m 34.525888 MeV 14.434021 keV 5.4724679 cm 10.720545 m World muIoni - 116 2.2226073 m 4.478841 m 3.3755207 m 34.523505 MeV 2.3826768 keV 1.1612451 cm 10.732157 m OutOfWorld Transportation -Track (trackID 22, parentID 3) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.094909127662(mm),1.2726680253883(mm),78.925143161727(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.454143(mm),-3.7622291(mm),78.8618(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5923,7 +5964,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.480304(mm),3.5728394(mm),78.857188(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.270723(mm),-1.9398025(mm),79.246796(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5932,7 +5973,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.462263(mm),-1.6163344(mm),79.213023(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.384702(mm),-1.2138146(mm),78.345064(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5941,7 +5982,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.102075(mm),-2.7039479(mm),78.394899(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.156464(mm),-2.3973059(mm),79.090616(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5950,7 +5991,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.082976(mm),-2.6995349(mm),78.398266(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.278414(mm),-3.1369749(mm),78.716459(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5959,7 +6000,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.0047(mm),1.7380296(mm),78.412069(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.923224(mm),-0.095356692(mm),78.955416(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5968,7 +6009,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.857963(mm),-2.21688(mm),79.319577(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.429771(mm),2.023621(mm),79.218752(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5977,7 +6018,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.930739(mm),-0.45258504(mm),78.601437(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.877912(mm),-1.9516576(mm),78.610752(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5986,7 +6027,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.802674(mm),2.3453161(mm),78.624018(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.884679(mm),-2.0223503(mm),78.433231(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -5995,7 +6036,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.009706(mm),-0.52030481(mm),78.76384(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.644219(mm),0.92393157(mm),79.180939(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6004,7 +6045,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.568634(mm),-1.2091956(mm),79.370594(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.30249(mm),-1.2953779(mm),79.417522(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6013,7 +6054,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.689483(mm),0.7519794(mm),79.172958(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.131438(mm),-0.29099652(mm),79.447683(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6022,7 +6063,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.143159(mm),1.1325724(mm),79.269289(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.868313(mm),2.1561159(mm),79.317752(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6031,7 +6072,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.622422(mm),-1.9853983(mm),79.361109(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.232303(mm),1.2229623(mm),78.548263(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6040,7 +6081,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.593132(mm),1.3341109(mm),78.131985(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.461693(mm),0.37170492(mm),78.331488(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6049,7 +6090,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.009951(mm),1.519455(mm),78.234816(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.585381(mm),0.83006948(mm),78.133352(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6058,16 +6099,49 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.293502(mm),-3.1503979(mm),78.713799(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.140325(mm),1.1046992(mm),78.388154(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = pi+, Track ID = 4, Parent ID = 1 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -1.05 cm 931 um 4.61 cm 30.4 MeV 0 eV 0 fm 0 fm Target initStep + 1 -9.5890711 mm 1.0168524 mm 4.5880711 cm 26.046271 MeV 4.3424844 MeV 954.0397 um 954.0397 um Target hIoni + 2 -8.83398 mm 946.29365 um 4.5973508 cm 22.082965 MeV 3.9633058 MeV 770.66766 um 1.7247074 mm Target hIoni + 3 -8.2377838 mm 802.2689 um 4.5981717 cm 18.256374 MeV 3.8265913 MeV 619.11704 um 2.3438244 mm Target hIoni + 4 -7.7637943 mm 715.66704 um 4.6018703 cm 15.163793 MeV 3.0925804 MeV 488.23625 um 2.8320606 mm Target hIoni + 5 -7.4028076 mm 595.50772 um 4.6103297 cm 12.187433 MeV 2.9763601 MeV 394.28546 um 3.2263461 mm Target hIoni + 6 -7.129304 mm 520.46644 um 4.6228556 cm 9.1838186 MeV 3.0036147 MeV 314.32614 um 3.5406722 mm Target hIoni + 7 -6.9527813 mm 447.85281 um 4.6369174 cm 6.3222394 MeV 2.8615793 MeV 243.01626 um 3.7836885 mm Target hIoni + 8 -6.8514533 mm 332.26722 um 4.6451018 cm 3.2669027 MeV 3.0553367 MeV 178.79782 um 3.9624863 mm Target hIoni + 9 -6.7994706 mm 281.08927 um 4.6460981 cm 17.203092 keV 3.2496996 MeV 76.450373 um 4.0389367 mm Target hIoni + 10 -6.7994622 mm 281.07921 um 4.6460983 cm 6.9388939e-09 meV 17.203092 keV 288.20164 nm 4.0392249 mm Target hIoni + 11 -6.7994622 mm 281.07921 um 4.6460983 cm 0 eV 6.9388939e-09 meV 5.7662837 fm 4.0392249 mm Target hIoni + 12 -6.7994622 mm 281.07921 um 4.6460983 cm 0 eV 0 eV 0 fm 4.0392249 mm Target Decay +Track (trackID 4, parentID 1) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = mu+, Track ID = 19, Parent ID = 4 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -6.8 mm 281 um 4.65 cm 4.12 MeV 0 eV 0 fm 0 fm Target initStep + 1 -6.8386084 mm 390.59647 um 4.6433613 cm 1.2605691 MeV 2.8592435 MeV 133.4438 um 133.4438 um Target muIoni + 2 -6.8349826 mm 403.07887 um 4.6430223 cm 45.319677 keV 1.2152495 MeV 16.701926 um 150.14573 um Target muIoni + 3 -6.8349367 mm 403.11906 um 4.643017 cm 6.9388939e-09 meV 45.319677 keV 479.78034 nm 150.62551 um Target muIoni + 4 -6.8349367 mm 403.11906 um 4.643017 cm 0 eV 6.9388939e-09 meV 5.7662837 fm 150.62551 um Target muIoni + 5 -6.8349367 mm 403.11906 um 4.643017 cm 0 eV 0 eV 0 fm 150.62551 um Target DecayWithSpin +Track (trackID 19, parentID 4) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.303937(mm),-2.9756535(mm),78.711959(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.41816(mm),0.52284739(mm),78.515491(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6076,7 +6150,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.695637(mm),-0.60444919(mm),78.113911(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.682009(mm),-2.7000859(mm),78.821622(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6085,7 +6159,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.87118(mm),-3.0719278(mm),78.435612(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.813808(mm),-1.4691544(mm),78.445728(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6094,7 +6168,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.751879(mm),-1.997458(mm),79.161956(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.761952(mm),2.9592481(mm),78.631199(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6103,7 +6177,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.114962(mm),-0.18059156(mm),78.921607(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.047159(mm),-2.5748006(mm),78.757236(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6112,7 +6186,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.124907(mm),1.5534424(mm),79.096181(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.442218(mm),-1.3160702(mm),78.511249(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6121,7 +6195,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.510708(mm),-0.54916165(mm),78.851827(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.390488(mm),3.1394794(mm),78.873025(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6130,7 +6204,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.835246(mm),-2.6122281(mm),78.794602(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.696774(mm),-1.8943227(mm),78.819018(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6139,7 +6213,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.603849(mm),0.92540327(mm),79.01173(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.994066(mm),0.84033776(mm),78.413944(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6148,7 +6222,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.184604(mm),-0.043442826(mm),79.085654(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.624316(mm),-3.7093451(mm),78.831795(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6157,16 +6231,40 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.390177(mm),-0.096800044(mm),78.344099(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.778519(mm),-0.93894869(mm),78.275623(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = pi+, Track ID = 6, Parent ID = 1 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -1.64 cm -939 um 7.62 cm 5.48 MeV 0 eV 0 fm 0 fm Target initStep + 1 -1.6304673 cm -983.82098 um 7.6152207 cm 2.1776716 MeV 3.3015663 MeV 157.91654 um 157.91654 um Target hIoni + 2 -1.6284093 cm -990.27099 um 7.6124526 cm 0 eV 2.1776716 MeV 36.403173 um 194.31971 um Target hIoni + 3 -1.6284093 cm -990.27099 um 7.6124526 cm 0 eV 0 eV 0 fm 194.31971 um Target Decay +Track (trackID 6, parentID 1) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = mu+, Track ID = 23, Parent ID = 6 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -1.63 cm -990 um 7.61 cm 4.12 MeV 0 eV 0 fm 0 fm Target initStep + 1 -1.622756 cm -979.12707 um 7.6031813 cm 1.1961475 MeV 2.9236652 MeV 133.4438 um 133.4438 um Target muIoni + 2 -1.6219785 cm -987.96098 um 7.603051 cm 160.45489 keV 1.0356926 MeV 15.185348 um 148.62915 um Target muIoni + 3 -1.6219533 cm -988.35029 um 7.6030171 cm 18.01912 keV 142.43577 keV 973.49948 nm 149.60265 um Target muIoni + 4 -1.6219546 cm -988.35455 um 7.6030163 cm 0 eV 18.01912 keV 295.15697 nm 149.89781 um Target muIoni + 5 -1.6219546 cm -988.35455 um 7.6030163 cm 0 eV 0 eV 0 fm 149.89781 um Target DecayWithSpin +Track (trackID 23, parentID 6) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.021259(mm),-0.4326254(mm),78.585476(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.094936(mm),-0.58942918(mm),79.101465(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6175,7 +6273,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.881243(mm),3.7508969(mm),78.610164(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.698096(mm),0.6682064(mm),78.818785(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6184,7 +6282,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.723554(mm),-2.302765(mm),79.16695(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.897922(mm),-1.2669662(mm),78.959877(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6193,7 +6291,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.378716(mm),2.3945434(mm),78.8751(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.014827(mm),2.9000067(mm),78.762937(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6202,7 +6300,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.833546(mm),1.66798(mm),79.323882(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.020276(mm),-2.5450363(mm),78.585649(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6211,7 +6309,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.498469(mm),1.3689936(mm),78.325004(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.912306(mm),1.6152583(mm),78.781014(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6220,7 +6318,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.665758(mm),-0.37670573(mm),78.64816(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.868017(mm),-1.1438109(mm),78.259843(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6229,7 +6327,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.747503(mm),1.9385995(mm),78.281092(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.634897(mm),2.9272795(mm),79.182583(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6238,7 +6336,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.358967(mm),-2.453932(mm),78.525929(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.323043(mm),-1.6561082(mm),78.355936(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6247,7 +6345,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.274113(mm),-1.8819276(mm),78.188237(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.932578(mm),0.53896673(mm),79.130094(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6256,7 +6354,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.159286(mm),-0.00071994058(mm),78.561138(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.904127(mm),-1.5096052(mm),78.253475(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6265,7 +6363,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.431191(mm),2.141383(mm),78.865848(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.450804(mm),-1.8970163(mm),78.686062(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6274,7 +6372,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.306659(mm),-3.6791556(mm),78.535152(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.265195(mm),2.3179406(mm),78.366136(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6283,7 +6381,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.616558(mm),-3.0408546(mm),78.480508(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.095921(mm),3.2922622(mm),78.748638(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6292,7 +6390,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.710358(mm),-3.0094107(mm),78.99295(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.128128(mm),-1.3871551(mm),78.390305(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6301,7 +6399,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.31694(mm),-1.9578894(mm),78.357012(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.239032(mm),-1.5862338(mm),78.89973(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6310,7 +6408,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.375809(mm),0.80583506(mm),78.875613(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.248554(mm),1.948778(mm),78.721724(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6319,7 +6417,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.72158(mm),-0.87335781(mm),78.46199(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.382442(mm),0.0068584809(mm),79.05077(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6328,7 +6426,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.984078(mm),2.9785751(mm),78.768359(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.801539(mm),-1.0894174(mm),78.447891(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6337,7 +6435,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.43077(mm),0.71699685(mm),78.160614(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.340327(mm),-1.7429732(mm),78.352888(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6346,7 +6444,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.143663(mm),0.069255533(mm),78.211239(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.120831(mm),1.1880535(mm),79.273226(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6355,7 +6453,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.309602(mm),1.4930234(mm),78.181979(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.340547(mm),-2.128117(mm),78.529177(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6364,7 +6462,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.473304(mm),-3.4474684(mm),78.682095(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.338215(mm),2.1054886(mm),78.529588(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6373,7 +6471,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.697143(mm),1.0153824(mm),78.289972(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.976807(mm),2.3630691(mm),78.593314(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6382,7 +6480,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.376729(mm),1.0982859(mm),78.34647(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.253319(mm),-2.9846202(mm),78.897211(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6391,7 +6489,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.167147(mm),-0.96911604(mm),78.559752(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.392184(mm),0.37379339(mm),79.22538(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6400,7 +6498,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.468278(mm),1.3854873(mm),78.330327(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.737447(mm),-1.4963273(mm),78.635519(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6409,7 +6507,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.274042(mm),-3.0201145(mm),78.71723(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.949094(mm),-0.97381075(mm),78.950854(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6418,7 +6516,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.906843(mm),2.1999043(mm),78.252996(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.721018(mm),-3.363318(mm),78.638416(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6427,7 +6525,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.391364(mm),1.5526458(mm),78.87287(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.586863(mm),-3.0329044(mm),79.014725(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6436,7 +6534,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.345604(mm),0.89873758(mm),79.233593(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.683304(mm),0.45706648(mm),78.821393(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6445,7 +6543,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.146328(mm),-1.3689457(mm),79.092404(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.014879(mm),0.037829376(mm),78.586601(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6454,7 +6552,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.341213(mm),1.8587836(mm),78.705386(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.555334(mm),2.9416812(mm),78.667631(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6463,7 +6561,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.914638(mm),-1.6742696(mm),79.309584(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.562786(mm),0.99695591(mm),79.371625(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6472,7 +6570,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.527446(mm),-0.82877452(mm),79.377856(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.042628(mm),1.4940894(mm),79.110689(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6481,7 +6579,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.759374(mm),-0.39969093(mm),78.455326(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.286034(mm),-3.1460363(mm),79.06777(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6490,7 +6588,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.949352(mm),1.0074084(mm),78.245501(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.8007(mm),0.10292555(mm),78.271712(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6499,7 +6597,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.261044(mm),-3.4739962(mm),78.719522(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.1416(mm),-0.11918946(mm),79.093237(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6508,7 +6606,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.218111(mm),-3.2539439(mm),79.079746(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.256668(mm),-3.0998311(mm),78.720294(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6517,7 +6615,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.221505(mm),-0.26379066(mm),79.079148(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.363614(mm),-3.884622(mm),78.701436(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6526,7 +6624,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.39054(mm),-0.91968086(mm),79.225669(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.1682(mm),-0.35350787(mm),79.264874(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6535,7 +6633,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.852149(mm),-2.4279612(mm),78.967948(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.2506(mm),-0.81892669(mm),79.074018(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6544,7 +6642,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.63522(mm),-1.3412831(mm),79.006199(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.323072(mm),2.5879169(mm),78.708585(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6553,7 +6651,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.493182(mm),2.503994(mm),78.854917(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.651849(mm),-3.2631308(mm),79.003267(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6562,7 +6660,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.382741(mm),-1.5799683(mm),79.050718(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.116723(mm),3.1187317(mm),78.921297(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6571,7 +6669,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.125277(mm),-3.1438738(mm),79.096115(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.646163(mm),-0.62124409(mm),79.180596(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6580,7 +6678,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.684879(mm),0.0021700784(mm),78.644789(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.7884(mm),1.5305043(mm),79.155516(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6589,7 +6687,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.763068(mm),2.1575642(mm),78.278348(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.186069(mm),-2.6160905(mm),78.380088(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6598,7 +6696,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.337646(mm),-0.37293673(mm),79.411323(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.847796(mm),-0.80558475(mm),78.263408(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6607,7 +6705,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.472941(mm),1.4603473(mm),78.329505(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.599108(mm),0.26901028(mm),78.307258(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6616,7 +6714,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.931463(mm),-2.4538896(mm),78.248655(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.440826(mm),0.56135738(mm),78.511495(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6625,7 +6723,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.841477(mm),3.399789(mm),78.793503(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.577181(mm),-1.4181043(mm),79.016433(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6634,7 +6732,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.357615(mm),1.781192(mm),78.878821(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.195383(mm),-0.51080525(mm),79.436408(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6643,7 +6741,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.289846(mm),-0.7451995(mm),79.243424(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.940267(mm),3.7307927(mm),78.952411(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6652,7 +6750,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.701153(mm),1.5466843(mm),79.1709(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.59521(mm),-0.69359859(mm),78.6606(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6661,7 +6759,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.288147(mm),1.9662294(mm),79.243724(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.44129(mm),0.33374618(mm),78.335086(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6670,7 +6768,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.656741(mm),3.4146829(mm),78.826077(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.077799(mm),0.86273663(mm),78.575506(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6679,7 +6777,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.311897(mm),-0.093993037(mm),78.534228(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.868498(mm),-1.9143482(mm),78.612412(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6688,7 +6786,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.266581(mm),0.60118122(mm),78.189565(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.271598(mm),0.83248218(mm),78.18868(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6697,7 +6795,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.379295(mm),0.74735241(mm),78.16969(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.113724(mm),2.0724407(mm),78.216518(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6706,7 +6804,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.588741(mm),0.84486802(mm),79.014394(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.521581(mm),1.9712003(mm),78.497255(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6715,7 +6813,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.350638(mm),-2.305945(mm),79.056378(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.134346(mm),1.5219579(mm),78.389208(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6724,7 +6822,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.294296(mm),1.75077(mm),78.889986(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.959765(mm),2.0182009(mm),78.772646(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6733,7 +6831,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.703878(mm),-0.25615498(mm),78.465111(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.482667(mm),-2.7303613(mm),78.680444(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6742,7 +6840,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.634866(mm),1.412351(mm),78.47728(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.049349(mm),0.55644609(mm),79.462158(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6751,7 +6849,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.112877(mm),-0.65103817(mm),78.921975(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.98799(mm),-0.39670119(mm),79.120323(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6760,7 +6858,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.323869(mm),-2.1453185(mm),79.237425(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.718764(mm),-0.81286878(mm),78.815141(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6769,7 +6867,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.910532(mm),1.9804313(mm),78.252346(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.480103(mm),-1.5123928(mm),78.504569(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6778,7 +6876,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.916286(mm),0.85241163(mm),78.956639(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.561145(mm),0.2193809(mm),79.01926(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6787,7 +6885,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.31579(mm),0.57670243(mm),79.23885(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.265505(mm),-1.0703594(mm),79.424043(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6796,7 +6894,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.036411(mm),1.7715138(mm),78.23015(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.25465(mm),2.3181703(mm),79.249631(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6805,7 +6903,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.553513(mm),2.3583757(mm),78.315298(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.957887(mm),1.2225695(mm),78.420323(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6814,7 +6912,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.727766(mm),-0.56045282(mm),79.342534(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.00993(mm),-1.3668197(mm),79.292781(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6823,7 +6921,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.029015(mm),1.2245275(mm),78.936762(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.82219(mm),-0.068684015(mm),79.149558(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6832,7 +6930,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.749979(mm),-0.3331704(mm),78.456983(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.397949(mm),-0.83507107(mm),78.519055(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6841,7 +6939,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.055874(mm),0.66390767(mm),78.403045(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.668755(mm),3.8103701(mm),78.647632(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6850,7 +6948,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.707954(mm),-2.5318281(mm),78.464393(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.719231(mm),3.2117838(mm),78.638731(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6859,7 +6957,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.90086(mm),3.960592(mm),78.783032(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.237603(mm),2.8259395(mm),78.547328(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6868,7 +6966,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.980898(mm),2.086869(mm),78.592592(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.330572(mm),1.1753079(mm),78.707263(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6877,7 +6975,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.279438(mm),2.0306158(mm),78.539952(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.940656(mm),1.6179061(mm),78.423361(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6886,7 +6984,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.352801(mm),-0.043603606(mm),79.408651(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.877449(mm),-1.2564486(mm),79.316141(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6895,7 +6993,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.806507(mm),0.62801877(mm),78.975996(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.432936(mm),2.6210429(mm),79.218194(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6904,7 +7002,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.209663(mm),-0.86437631(mm),78.375928(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.210288(mm),0.11107929(mm),78.728472(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6913,7 +7011,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.371765(mm),1.2600024(mm),78.347345(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.70446(mm),-1.7188226(mm),78.817663(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6922,7 +7020,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.459425(mm),-2.8665191(mm),78.860869(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.08711(mm),2.9619596(mm),78.926518(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6931,7 +7029,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.258063(mm),3.4051181(mm),78.896375(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.351603(mm),3.1688585(mm),78.879881(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6940,7 +7038,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.115739(mm),0.78421239(mm),79.274124(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.531272(mm),0.45779844(mm),78.848201(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6949,7 +7047,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.355505(mm),0.6695408(mm),78.526539(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.557008(mm),-3.2530414(mm),78.667336(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6958,7 +7056,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.136778(mm),-2.0739187(mm),79.270414(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.225566(mm),-0.74282453(mm),78.373124(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6967,7 +7065,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.266356(mm),-3.0314387(mm),78.365932(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.334008(mm),1.4863437(mm),79.235638(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6976,7 +7074,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.274863(mm),3.1670706(mm),79.069739(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.905018(mm),-1.1776058(mm),78.429645(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6985,7 +7083,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.094882(mm),0.52034544(mm),78.925148(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.907632(mm),1.4059184(mm),79.310819(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -6994,7 +7092,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.874475(mm),-2.176524(mm),78.611358(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.263053(mm),-2.8451656(mm),79.248149(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7003,7 +7101,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.451927(mm),2.60931(mm),79.214845(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.5691(mm),-1.080644(mm),78.841531(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7012,7 +7110,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.203243(mm),-0.090674243(mm),78.729714(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.169031(mm),-1.9773232(mm),79.264727(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7021,7 +7119,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.803388(mm),0.78819926(mm),78.447565(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.454779(mm),-1.3267575(mm),78.332707(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7030,7 +7128,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.172249(mm),1.3814224(mm),78.382525(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.540328(mm),2.4853126(mm),79.022931(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7039,7 +7137,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.885299(mm),-0.32558004(mm),78.785776(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.540589(mm),-1.7063802(mm),78.846558(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7048,7 +7146,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.851816(mm),-1.1086325(mm),78.262699(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.772961(mm),0.48656381(mm),78.45293(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7057,7 +7155,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.587889(mm),-0.61514575(mm),78.485563(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.139192(mm),-1.0645135(mm),78.388354(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7066,7 +7164,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.174362(mm),-0.79228977(mm),78.55848(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.384916(mm),-0.69883894(mm),78.168699(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7075,7 +7173,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.196817(mm),-0.40395639(mm),78.201866(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.455905(mm),-3.0326648(mm),78.86149(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7084,7 +7182,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.871821(mm),-2.4119517(mm),78.788153(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.054538(mm),1.1824956(mm),78.226954(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7093,7 +7191,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.313509(mm),1.3533988(mm),79.415579(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.696284(mm),-3.1673508(mm),79.171758(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7102,7 +7200,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.269479(mm),0.89705113(mm),79.423343(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.663689(mm),0.924038(mm),79.353833(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7111,7 +7209,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.029407(mm),-2.0859406(mm),79.11302(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.809353(mm),-0.95309167(mm),78.975494(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7120,7 +7218,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.736711(mm),-0.094489013(mm),78.106668(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.130786(mm),3.123452(mm),78.74249(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7129,7 +7227,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.252574(mm),-0.90449026(mm),78.897343(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.747545(mm),-0.85936166(mm),78.810066(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7138,7 +7236,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.046376(mm),2.5715971(mm),78.757374(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.221467(mm),-3.5224085(mm),78.902828(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7147,7 +7245,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.486123(mm),1.5580631(mm),78.327181(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.46503(mm),1.1332217(mm),79.036208(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7156,7 +7254,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.743082(mm),0.15541377(mm),78.458199(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.504749(mm),-2.5685976(mm),79.205531(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7165,7 +7263,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.114135(mm),0.66846839(mm),78.392772(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.548725(mm),3.1398732(mm),79.197777(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7174,7 +7272,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.809693(mm),-3.5030096(mm),78.62278(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.676965(mm),0.14493313(mm),78.822511(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7183,7 +7281,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.837035(mm),1.9030522(mm),78.265305(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.367313(mm),-1.8477723(mm),78.877111(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7192,7 +7290,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.152279(mm),-0.85771408(mm),78.915027(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.881349(mm),-0.80174427(mm),78.610146(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7201,7 +7299,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.765604(mm),-0.2975775(mm),78.454228(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.563181(mm),1.5814764(mm),78.842574(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7210,7 +7308,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.906056(mm),-0.11285698(mm),78.429462(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.384973(mm),-2.9234158(mm),78.69767(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7219,48 +7317,16 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.074979(mm),-1.8171963(mm),79.104984(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.331581(mm),0.19848397(mm),78.707085(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 - -********************************************************************************************************* -* G4Track Information: Particle = pi+, Track ID = 3, Parent ID = 1 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process - 0 -4.48 mm -2.64 mm 3.05 cm 31.2 MeV 0 eV 0 fm 0 fm Target initStep - 1 -4.1954842 mm -2.6992297 mm 2.957751 cm 26.288255 MeV 4.9377137 MeV 1.014392 mm 1.014392 mm Target hIoni - 2 -4.0982366 mm -2.7076193 mm 2.878988 cm 22.22047 MeV 4.0677851 MeV 800.71112 um 1.8151031 mm Target hIoni - 3 -3.9476555 mm -2.6414567 mm 2.8175607 cm 17.888718 MeV 4.3317526 MeV 642.00495 um 2.4571081 mm Target hIoni - 4 -3.8910382 mm -2.6620117 mm 2.7692884 cm 15.145729 MeV 2.7429889 MeV 491.72072 um 2.9488288 mm Target hIoni - 5 -3.8015248 mm -2.7491302 mm 2.7310371 cm 12.130745 MeV 3.0149839 MeV 407.25227 um 3.3560811 mm Target hIoni - 6 -3.6611505 mm -2.8292581 mm 2.703434 cm 9.0534556 MeV 3.0772892 MeV 324.49269 um 3.6805737 mm Target hIoni - 7 -3.5007714 mm -2.9014858 mm 2.6863333 cm 6.3556628 MeV 2.6977928 MeV 250.01612 um 3.9305899 mm Target hIoni - 8 -3.3646922 mm -2.9585503 mm 2.6753174 cm 3.4699276 MeV 2.8857352 MeV 189.33308 um 4.1199229 mm Target hIoni - 9 -3.3234 mm -3.0068653 mm 2.6700868 cm 237.08981 keV 3.2328378 MeV 102.31907 um 4.222242 mm Target hIoni - 10 -3.3230769 mm -3.0077011 mm 2.6700483 cm 0 eV 237.08981 keV 1.6800831 um 4.2239221 mm Target hIoni - 11 -3.3230769 mm -3.0077011 mm 2.6700483 cm 0 eV 0 eV 0 fm 4.2239221 mm Target Decay -Track (trackID 3, parentID 1) is processed with stopping code 2 - -********************************************************************************************************* -* G4Track Information: Particle = mu+, Track ID = 23, Parent ID = 3 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process - 0 -3.32 mm -3.01 mm 2.67 cm 4.12 MeV 0 eV 0 fm 0 fm Target initStep - 1 -3.3686738 mm -2.9412546 mm 2.6794096 cm 1.3111661 MeV 2.8086465 MeV 143.89929 um 143.89929 um Target muIoni - 2 -3.3848592 mm -2.9322244 mm 2.6792743 cm 151.87968 keV 1.1592864 MeV 24.493527 um 168.39281 um Target muIoni - 3 -3.3849255 mm -2.9317332 mm 2.6792677 cm 27.707372 keV 124.17231 keV 1.0342493 um 169.42706 um Target muIoni - 4 -3.3849276 mm -2.9317003 mm 2.6792678 cm 0 eV 27.707372 keV 156.19345 nm 169.58325 um Target muIoni - 5 -3.3849276 mm -2.9317003 mm 2.6792678 cm 0 eV 0 eV 0 fm 169.58325 um Target DecayWithSpin -Track (trackID 23, parentID 3) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.262167(mm),-3.4013577(mm),78.542997(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.95373(mm),-2.6304953(mm),78.421056(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7269,7 +7335,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.550038(mm),3.8293711(mm),78.668565(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.190313(mm),-2.1346788(mm),78.555667(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7278,7 +7344,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.132543(mm),-0.23855887(mm),78.213199(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.985381(mm),1.801928(mm),78.768129(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7287,7 +7353,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.773522(mm),1.4692018(mm),78.629158(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.050557(mm),-1.5714968(mm),79.285618(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7296,7 +7362,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.984038(mm),3.7669348(mm),78.592039(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.404904(mm),2.0431537(mm),79.223137(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7305,7 +7371,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.228847(mm),2.4381981(mm),78.901526(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.672604(mm),0.23927193(mm),78.82328(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7314,7 +7380,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.598681(mm),-0.7437726(mm),78.483661(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.65388(mm),3.7573547(mm),78.650254(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7323,7 +7389,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.335528(mm),0.13352734(mm),79.23537(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.538785(mm),3.563426(mm),79.023203(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7332,7 +7398,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.716468(mm),-0.68957048(mm),78.286565(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.372655(mm),-3.0184002(mm),79.228823(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7341,7 +7407,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.304557(mm),-1.6722513(mm),79.24083(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.023416(mm),-0.98579869(mm),78.585095(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7350,7 +7416,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.53017(mm),0.56282747(mm),79.201049(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.565471(mm),-1.2082051(mm),78.136863(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7359,7 +7425,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.09671(mm),-0.96160055(mm),79.453807(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.900715(mm),-1.7120145(mm),78.959385(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7368,7 +7434,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.223823(mm),0.91221124(mm),78.373431(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.573151(mm),-0.82338148(mm),78.311835(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7377,7 +7443,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.385345(mm),-2.3228248(mm),78.873931(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.126855(mm),-1.3554898(mm),78.91951(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7386,7 +7452,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.434579(mm),-3.4099101(mm),79.041577(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.631339(mm),-1.2742692(mm),78.477902(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7395,7 +7461,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.945877(mm),-2.8036973(mm),78.598768(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.86512(mm),-1.8146845(mm),78.789334(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7404,7 +7470,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.277067(mm),0.96387841(mm),78.364043(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.665202(mm),2.6735681(mm),79.000912(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7413,7 +7479,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.743922(mm),-0.65393376(mm),79.339686(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.409195(mm),1.8501198(mm),78.517072(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7422,7 +7488,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.384412(mm),2.9020082(mm),78.521442(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.594853(mm),-0.71167241(mm),78.83699(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7431,7 +7497,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.994941(mm),-0.48680416(mm),78.413789(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.506958(mm),2.7186055(mm),79.028815(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7440,7 +7506,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.763898(mm),0.0069119509(mm),78.278201(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.988966(mm),0.045425497(mm),79.120151(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7449,7 +7515,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.809835(mm),-2.466635(mm),78.799082(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.60278(mm),1.1708549(mm),78.306611(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7458,7 +7524,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.896293(mm),2.924353(mm),78.431184(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.051608(mm),2.129997(mm),79.285432(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7467,7 +7533,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.683847(mm),0.7582324(mm),78.64497(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.981642(mm),3.4717824(mm),79.121442(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7476,7 +7542,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.036861(mm),-2.3735123(mm),78.406398(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.767601(mm),-3.2543524(mm),78.982856(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7485,7 +7551,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.004427(mm),-1.9783337(mm),78.23579(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.633685(mm),-2.8241778(mm),79.006469(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7494,7 +7560,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.492186(mm),0.8779483(mm),79.207747(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.797679(mm),-0.053012856(mm),78.272245(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7503,7 +7569,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.991046(mm),-3.6886728(mm),78.590803(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.113705(mm),-1.7476393(mm),78.921829(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7512,7 +7578,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.878169(mm),1.2500056(mm),78.96336(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.922663(mm),0.4580791(mm),78.602861(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7521,7 +7587,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.111409(mm),2.2365783(mm),79.274888(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.687256(mm),0.99024358(mm),78.64437(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7530,7 +7596,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.402019(mm),-0.95585583(mm),79.047318(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.839889(mm),-2.3942554(mm),78.264802(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7539,7 +7605,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.580039(mm),0.22956276(mm),78.486948(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.292883(mm),-0.044107684(mm),78.361254(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7548,7 +7614,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.332439(mm),-1.5014155(mm),78.354279(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.987078(mm),-2.3512784(mm),78.944157(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7557,7 +7623,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.42879(mm),0.27815504(mm),78.160963(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.599931(mm),-1.5645365(mm),79.365075(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7566,7 +7632,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.450497(mm),-0.61561377(mm),78.157136(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.101379(mm),0.16503642(mm),79.452983(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7575,7 +7641,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.806292(mm),1.0809999(mm),78.62338(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.039221(mm),-1.0925523(mm),78.934962(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7584,7 +7650,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.529017(mm),2.6991426(mm),78.495944(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.428843(mm),-2.0854143(mm),78.689935(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7593,7 +7659,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.923196(mm),0.16117871(mm),79.131748(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.266526(mm),0.92146775(mm),79.247536(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7602,7 +7668,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.652936(mm),-0.84139977(mm),78.12144(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.415055(mm),-3.6637782(mm),79.04502(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7611,7 +7677,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.419691(mm),-1.5874787(mm),78.338894(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.915273(mm),2.3101084(mm),78.25151(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7620,7 +7686,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.749137(mm),1.2677604(mm),78.986112(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.20027(mm),-1.3527692(mm),79.435546(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7629,7 +7695,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.310895(mm),0.59459995(mm),78.710732(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.778233(mm),3.0146014(mm),79.157309(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7638,7 +7704,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.186991(mm),-3.9861555(mm),78.73258(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.912627(mm),-0.72885418(mm),78.428304(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7647,7 +7713,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.334195(mm),3.1324786(mm),78.35397(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.218847(mm),2.876774(mm),78.903289(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7656,7 +7722,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.7622(mm),-1.1242659(mm),78.807482(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.651497(mm),-2.9839299(mm),78.650675(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7665,7 +7731,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.078014(mm),1.3214589(mm),78.575468(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.808636(mm),-2.3917077(mm),79.328275(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7674,7 +7740,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.075106(mm),-0.79486746(mm),78.928635(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.099217(mm),2.1695031(mm),78.219076(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7683,7 +7749,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.125086(mm),-2.5422001(mm),78.390841(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.649201(mm),2.579911(mm),79.180061(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7692,7 +7758,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.497333(mm),-1.8757027(mm),78.854185(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.156965(mm),-1.4404342(mm),78.914201(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7701,7 +7767,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.134255(mm),-1.8843103(mm),78.565551(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.683832(mm),-0.044971566(mm),78.292319(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7710,7 +7776,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.574699(mm),0.83048322(mm),78.311562(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.931588(mm),-1.2291516(mm),78.953941(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7719,7 +7785,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.298532(mm),1.1745818(mm),78.712912(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.293479(mm),-1.9472127(mm),78.184822(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7728,7 +7794,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.950689(mm),1.7334454(mm),78.421592(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.806258(mm),1.1626231(mm),78.799713(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7737,7 +7803,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.33174(mm),1.1146445(mm),79.236037(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.235679(mm),0.34987577(mm),78.195014(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7746,7 +7812,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.474306(mm),-1.1385449(mm),78.681918(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.57617(mm),1.9764794(mm),79.192938(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7755,7 +7821,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.768734(mm),-2.4068398(mm),78.277349(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.247086(mm),-1.5053617(mm),78.89831(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7764,7 +7830,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.3237(mm),2.3195366(mm),78.532147(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.628067(mm),1.1108039(mm),79.360114(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7773,7 +7839,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.117832(mm),0.75080988(mm),79.450082(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.878751(mm),-1.7704938(mm),78.963258(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7782,7 +7848,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.147084(mm),-3.29892(mm),78.739616(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.668039(mm),0.046298939(mm),78.647758(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7791,7 +7857,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.529498(mm),-2.7517281(mm),78.848513(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.51061(mm),0.5537324(mm),78.851844(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7800,7 +7866,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.589403(mm),-1.3932795(mm),78.837951(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.015201(mm),1.2449501(mm),78.939198(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7809,7 +7875,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.115244(mm),3.394164(mm),79.097884(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.045408(mm),-2.1994778(mm),79.286526(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7818,7 +7884,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.160454(mm),-0.87266237(mm),78.560932(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.020725(mm),0.066949667(mm),78.409243(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7827,7 +7893,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.396892(mm),0.90591531(mm),79.400876(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.351853(mm),-3.6965242(mm),78.70351(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7836,7 +7902,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.36492(mm),3.0749309(mm),78.348552(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.778472(mm),3.3631199(mm),79.157266(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7845,7 +7911,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.490681(mm),2.2030434(mm),78.326377(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.431193(mm),0.88053703(mm),78.513193(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7854,7 +7920,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.898973(mm),1.5599993(mm),78.254384(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.59197(mm),0.40056604(mm),78.308517(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7863,7 +7929,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.371077(mm),-0.52105111(mm),78.347466(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.635283(mm),2.1501864(mm),79.358842(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7872,7 +7938,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.842962(mm),0.055090141(mm),78.793241(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.259261(mm),-2.6768198(mm),79.07249(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7881,7 +7947,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.837523(mm),-2.7999973(mm),78.617873(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.062576(mm),-2.1288924(mm),78.401863(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7890,7 +7956,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.97973(mm),0.89754843(mm),79.298106(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.571739(mm),1.7278081(mm),78.488411(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7899,7 +7965,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.367941(mm),0.29970182(mm),79.229654(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.742772(mm),-3.6115568(mm),78.810908(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7908,7 +7974,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.66535(mm),-1.4933657(mm),78.648232(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.407756(mm),0.40840106(mm),79.222634(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7917,7 +7983,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.948196(mm),0.86776952(mm),78.598359(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.302648(mm),-2.9978081(mm),78.535859(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7926,16 +7992,205 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.165823(mm),-1.8472971(mm),78.207331(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.304255(mm),1.4681323(mm),78.711903(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = pi+, Track ID = 2, Parent ID = 1 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -1.22 cm 1.46 mm 6.68 cm 99.7 MeV 0 eV 0 fm 0 fm Target initStep + 1 -7.8422595 mm 1.8280596 mm 6.4964426 cm 86.356014 MeV 13.297552 MeV 4.770348 mm 4.770348 mm Target Transportation + 2 -6.780886 cm -7.245217 cm -58.278904 cm 86.356035 MeV4.3938186e-14 meV 1.2164137 m 1.221184 m CaptureMgnt Decay +Track (trackID 2, parentID 1) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = mu+, Track ID = 20, Parent ID = 2 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -6.78 cm -7.25 cm -58.3 cm 42.9 MeV 0 eV 0 fm 0 fm CaptureMgnt initStep + 1 -1.8270761 cm -6.5937812 cm -1.0358899 m 42.856468 MeV3.0596308e-14 meV 68.769584 cm 68.769584 cm CaptureMgnt Transportation + 2 4.3865798 cm -13.750492 cm -1.4820256 m 42.856493 MeV3.0125971e-14 meV 67.712452 cm 1.3648204 m CaptureMgnt Transportation + 3 -5.8581884 cm -16.751603 cm -1.9147221 m 42.856526 MeV2.9218473e-14 meV 65.672741 cm 2.0215478 m CaptureMgnt Transportation + 4 -3.6019779 cm -8.638191 cm -2 m 42.856532 MeV5.7585172e-15 meV 12.943105 cm 2.1509788 m CaptureMgnt Transportation + 5 -3.2817429 cm -8.5118809 cm -2.0030157 m 42.853488 MeV 1.5021776 keV 4.5765482 mm 2.1555554 m World muIoni + 6 -1.7558279 cm -7.910638 cm -2.0173848 m 42.8307 MeV 7.1493848 keV 2.1805109 cm 2.1773605 m World muIoni + 7 7.9692442 mm -6.9033404 cm -2.0414903 m 42.821752 MeV 5.6649379 keV 3.6526687 cm 2.2138872 m World muIoni + 8 3.9330092 cm -5.6658857 cm -2.0711195 m 42.810374 MeV 9.2061494 keV 4.4883421 cm 2.2587706 m World muIoni + 9 5.6567605 cm -4.981937 cm -2.0874133 m 42.803856 MeV 5.3563871 keV 2.4686046 cm 2.2834566 m World muIoni + 10 6.650592 cm -4.5880777 cm -2.0968051 m 42.79205 MeV 2.3186689 keV 1.4229838 cm 2.2976865 m World muIoni + 11 10.390621 cm -3.113923 cm -2.1320976 m 42.778959 MeV 9.919285 keV 5.3494486 cm 2.351181 m World muIoni + 12 10.55826 cm -3.0475062 cm -2.1336865 m 42.776515 MeV 440.06339 eV 2.4032942 mm 2.3535843 m World muIoni + 13 10.675657 cm -3.0008649 cm -2.134799 m 42.774885 MeV 293.71657 eV 1.6832842 mm 2.3552675 m World muIoni + 14 11.265266 cm -2.7663866 cm -2.1403831 m 42.774164 MeV 720.71846 eV 8.452461 mm 2.36372 m World muIoni + 15 13.579787 cm -1.8459626 cm -2.162306 m 42.764579 MeV 7.8260304 keV 3.3181875 cm 2.3969019 m World muIoni + 16 14.57543 cm -1.4493099 cm -2.1717304 m 42.758762 MeV 3.1366733 keV 1.4271713 cm 2.4111736 m World muIoni + 17 15.764747 cm -9.767911 mm -2.1830135 m 42.744065 MeV 4.3083547 keV 1.7061196 cm 2.4282348 m World muIoni + 18 20.600636 cm 9.4727336 mm -2.2289228 m 42.725273 MeV 15.468886 keV 6.9400707 cm 2.4976355 m World muIoni + 19 22.055613 cm 1.5185784 cm -2.2425732 m 42.718142 MeV 4.2531083 keV 2.0752621 cm 2.5183881 m World muIoni + 20 22.292364 cm 1.6103842 cm -2.2447823 m 42.71657 MeV 423.77717 eV 3.365726 mm 2.5217538 m World muIoni + 21 25.140522 cm 2.7134328 cm -2.2713502 m 42.707852 MeV 8.71846 keV 4.0481184 cm 2.562235 m World muIoni + 22 27.074513 cm 3.4649349 cm -2.289406 m 42.702132 MeV 4.5591101 keV 2.7504953 cm 2.58974 m World muIoni + 23 27.251557 cm 3.5338284 cm -2.2910613 m 42.699249 MeV 321.79325 eV 2.519695 mm 2.5922597 m World muIoni + 24 29.397412 cm 4.3673181 cm -2.3111356 m 42.690367 MeV 7.8104079 keV 3.0543707 cm 2.6228034 m World muIoni + 25 31.205063 cm 5.0696679 cm -2.3280842 m 42.683224 MeV 7.1430497 keV 2.5755524 cm 2.6485589 m World muIoni + 26 34.917439 cm 6.5061319 cm -2.3628201 m 42.669238 MeV 12.487424 keV 5.2830905 cm 2.7013898 m World muIoni + 27 45.641944 cm 10.708244 cm -2.4628529 m 42.640181 MeV 29.057309 keV 15.255821 cm 2.853948 m World muIoni + 28 46.666809 cm 11.103118 cm -2.4724349 m 42.594584 MeV 2.8725354 keV 1.4575415 cm 2.8685234 m World muIoni + 29 46.974494 cm 11.22149 cm -2.4753102 m 42.588451 MeV 150.52502 eV 4.3744025 mm 2.8728978 m World muIoni + 30 52.55962 cm 13.362513 cm -2.5274396 m 42.564129 MeV 20.610405 keV 7.9342672 cm 2.9522405 m World muIoni + 31 58.887489 cm 15.779371 cm -2.5865786 m 42.548309 MeV 14.581239 keV 8.992084 cm 3.0421613 m World muIoni + 32 62.416058 cm 17.143496 cm -2.6194684 m 42.540337 MeV 6.2596029 keV 5.0128895 cm 3.0922902 m World muIoni + 33 62.461929 cm 17.1612 cm -2.619893 m 42.534828 MeV 95.900108 eV 649.70603 um 3.0929399 m World muIoni + 34 65.858791 cm 18.473961 cm -2.651391 m 42.522422 MeV 12.406327 keV 4.8149025 cm 3.141089 m World muIoni + 35 66.047843 cm 18.546808 cm -2.6531618 m 42.520673 MeV 748.32655 eV 2.6907993 mm 3.1437798 m World muIoni + 36 72.34457 cm 20.976371 cm -2.7121228 m 42.495677 MeV 17.746696 keV 8.961912 cm 3.2333989 m World muIoni + 37 75.246517 cm 22.103967 cm -2.7393148 m 42.490481 MeV 5.1961097 keV 4.1336264 cm 3.2747352 m World muIoni + 38 81.234705 cm 24.430151 cm -2.7956128 m 42.463362 MeV 15.592203 keV 8.5419184 cm 3.3601543 m World muIoni + 39 82.809434 cm 25.043017 cm -2.8104061 m 42.458092 MeV 3.6539946 keV 2.2458382 cm 3.3826127 m World muIoni + 40 83.458186 cm 25.294128 cm -2.8165137 m 42.455225 MeV 1.327247 keV 9.2572715 mm 3.39187 m World muIoni + 41 91.028271 cm 28.226261 cm -2.8878374 m 42.429245 MeV 24.522636 keV 10.806239 cm 3.4999324 m World muIoni + 42 95.800852 cm 30.092388 cm -2.9329944 m 42.382871 MeV 14.357576 keV 6.8302203 cm 3.5682346 m World muIoni + 43 99.963026 cm 31.726336 cm -2.9728553 m 42.367002 MeV 13.389756 keV 5.9902013 cm 3.6281366 m World muIoni + 44 1.0225093 m 32.619902 cm -2.9946648 m 42.35769 MeV 5.6222898 keV 3.2847403 cm 3.660984 m World muIoni + 45 1.0269265 m 32.791399 cm -2.9988751 m 42.355028 MeV 945.22974 eV 6.3387293 mm 3.6673227 m World muIoni + 46 1.0458199 m 33.525673 cm -3.0168906 m 42.347078 MeV 4.8075364 keV 2.7118901 cm 3.6944416 m World muIoni + 47 1.0588482 m 34.029057 cm -3.0293151 m 42.344144 MeV 1.9273265 keV 1.8693374 cm 3.713135 m World muIoni + 48 1.1476097 m 37.473344 cm -3.1140044 m 42.313847 MeV 29.051252 keV 12.742569 cm 3.8405607 m World muIoni + 49 1.1696374 m 38.319424 cm -3.135003 m 42.305725 MeV 4.9174565 keV 3.1587132 cm 3.8721478 m World muIoni + 50 1.1846552 m 38.892799 cm -3.1492869 m 42.300839 MeV 4.8856536 keV 2.1504411 cm 3.8936522 m World muIoni + 51 1.2278286 m 40.544785 cm -3.1902753 m 42.289208 MeV 11.630798 keV 6.1781096 cm 3.9554333 m World muIoni + 52 1.2390136 m 40.974933 cm -3.2008775 m 42.271449 MeV 3.4222414 keV 1.6000465 cm 3.9714338 m World muIoni + 53 1.2642421 m 41.94224 cm -3.2247405 m 42.263712 MeV 5.9341849 keV 3.6048426 cm 4.0074822 m World muIoni + 54 1.2682812 m 42.096991 cm -3.2285704 m 42.261277 MeV 937.8757 eV 5.7772783 mm 4.0132595 m World muIoni + 55 1.2783625 m 42.484091 cm -3.2381481 m 42.25533 MeV 2.9699299 keV 1.4434377 cm 4.0276939 m World muIoni + 56 1.2869292 m 42.812821 cm -3.2462701 m 42.250964 MeV 3.2780242 keV 1.2254047 cm 4.0399479 m World muIoni + 57 1.2923916 m 43.021825 cm -3.2514422 m 42.245837 MeV 978.07906 eV 7.8074508 mm 4.0477554 m World muIoni + 58 1.3062198 m 43.551646 cm -3.2645222 m 42.241039 MeV 3.6877035 keV 1.9757996 cm 4.0675134 m World muIoni + 59 1.3216983 m 44.141988 cm -3.279177 m 42.234118 MeV 3.942799 keV 2.2117754 cm 4.0896311 m World muIoni + 60 1.3465584 m 45.084407 cm -3.3027 m 42.22289 MeV 9.6199525 keV 3.5498947 cm 4.1251301 m World muIoni + 61 1.3844407 m 46.514881 cm -3.3385441 m 42.210709 MeV 11.001771 keV 5.4078629 cm 4.1792087 m World muIoni + 62 1.3949183 m 46.909764 cm -3.3484773 m 42.20859 MeV 2.1182838 keV 1.4968027 cm 4.1941767 m World muIoni + 63 1.4884224 m 50.433596 cm -3.4370387 m 42.174273 MeV 32.515406 keV 13.352153 cm 4.3276983 m World muIoni + 64 1.5435704 m 52.487891 cm -3.4890033 m 42.159222 MeV 13.491092 keV 7.8508969 cm 4.4062072 m World muIoni + 65 1.567487 m 53.384033 cm -3.5115428 m 42.152467 MeV 6.7544152 keV 3.4063701 cm 4.4402709 m World muIoni + 66 1.5685671 m 53.424372 cm -3.5125596 m 42.150602 MeV 303.46225 eV 1.5373071 mm 4.4418082 m World muIoni + 67 1.6090916 m 54.939919 cm -3.5506997 m 42.133235 MeV 12.50149 keV 5.7676721 cm 4.499485 m World muIoni + 68 1.6390052 m 56.061981 cm -3.5789195 m 42.119912 MeV 11.925794 keV 4.2627251 cm 4.5421122 m World muIoni + 69 1.6441581 m 56.255193 cm -3.5837625 m 42.116261 MeV 2.6297998 keV 7.3307906 mm 4.549443 m World muIoni + 70 1.6627144 m 56.951115 cm -3.6012072 m 42.104152 MeV 4.4692247 keV 2.6402316 cm 4.5758453 m World muIoni + 71 1.6740444 m 57.373566 cm -3.6118348 m 42.098115 MeV 2.6995922 keV 1.6098543 cm 4.5919439 m World muIoni + 72 1.7052685 m 58.54464 cm -3.6411342 m 42.088129 MeV 9.9855555 keV 4.4390831 cm 4.6363347 m World muIoni + 73 1.7106391 m 58.745809 cm -3.6461823 m 42.086285 MeV 1.8443175 keV 7.6401904 mm 4.6439749 m World muIoni + 74 1.7270784 m 59.363417 cm -3.6616554 m 42.066614 MeV 4.8927815 keV 2.3405418 cm 4.6673803 m World muIoni + 75 1.750532 m 60.242989 cm -3.683724 m 42.057157 MeV 7.7447514 keV 3.3383508 cm 4.7007638 m World muIoni + 76 1.7538752 m 60.368131 cm -3.6868631 m 42.053372 MeV 716.30443 eV 4.7536632 mm 4.7055175 m World muIoni + 77 1.7831505 m 61.464467 cm -3.7143798 m 42.046675 MeV 5.3978273 keV 4.1646226 cm 4.7471637 m World muIoni + 78 1.8027601 m 62.202434 cm -3.7327479 m 42.039048 MeV 6.3234331 keV 2.786369 cm 4.7750274 m World muIoni + 79 1.846436 m 63.839429 cm -3.7736855 m 42.022145 MeV 15.403007 keV 6.2060114 cm 4.8370875 m World muIoni + 80 1.876093 m 64.943648 cm -3.8014637 m 42.009868 MeV 9.1509448 keV 4.2108191 cm 4.8791957 m World muIoni + 81 1.8963588 m 65.697273 cm -3.8204397 m 41.999444 MeV 8.3979795 keV 2.8767797 cm 4.9079635 m World muIoni + 82 1.9275209 m 66.856088 cm -3.8495297 m 41.984058 MeV 11.932368 keV 4.4176832 cm 4.9521403 m World muIoni + 83 1.9456337 m 67.530724 cm -3.8664036 m 41.974986 MeV 7.4832968 keV 2.5657657 cm 4.977798 m World muIoni + 84 1.9504187 m 67.708477 cm -3.8708534 m 41.972663 MeV 1.2753032 keV 6.7717161 mm 4.9845697 m World muIoni + 85 1.9617218 m 68.128212 cm -3.8813608 m 41.969332 MeV 2.2590931 keV 1.5993227 cm 5.0005629 m World muIoni + 86 1.9672853 m 68.334775 cm -3.8865363 m 41.968432 MeV 900.22883 eV 7.8744072 mm 5.0084373 m World muIoni + 87 1.9882734 m 69.114317 cm -3.9060644 m 41.958946 MeV 8.3117485 keV 2.9708818 cm 5.0381462 m World muIoni + 88 2.0199435 m 70.291222 cm -3.9355252 m 41.944197 MeV 13.717167 keV 4.4826909 cm 5.0829731 m World muIoni + 89 2.0827081 m 72.649564 cm -3.9938179 m 41.923916 MeV 18.681699 keV 8.8846125 cm 5.1718192 m World muIoni + 90 2.0898576 m 72.919706 cm -4.0004784 m 41.923134 MeV 781.56552 eV 1.0137846 cm 5.181957 m World muIoni + 91 2.0958152 m 73.144047 cm -4.0060232 m 41.918928 MeV 2.8059701 keV 8.4421537 mm 5.1903992 m World muIoni + 92 2.134441 m 74.60118 cm -4.0419974 m 41.905697 MeV 11.380791 keV 5.4757925 cm 5.2451571 m World muIoni + 93 2.2348706 m 78.384323 cm -4.1350433 m 41.876683 MeV 27.877904 keV 14.203871 cm 5.3871958 m World muIoni + 94 2.2471959 m 78.851073 cm -4.1465237 m 41.869878 MeV 3.3112904 keV 1.7478514 cm 5.4046743 m World muIoni + 95 2.2690897 m 79.685618 cm -4.1668569 m 41.863913 MeV 4.8925528 keV 3.1023073 cm 5.4356974 m World muIoni + 96 2.3411819 m 82.41804 cm -4.2332268 m 41.844962 MeV 18.951061 keV 10.172962 cm 5.537427 m World muIoni + 97 2.4056893 m 84.863625 cm -4.2927314 m 41.821655 MeV 21.650268 keV 9.1104981 cm 5.628532 m World muIoni + 98 2.4541541 m 86.709238 cm -4.3372422 m 41.805411 MeV 15.039139 keV 6.8342441 cm 5.6968744 m World muIoni + 99 2.5373756 m 89.865323 cm -4.4138346 m 41.774467 MeV 28.760595 keV 11.742395 cm 5.8142984 m World muIoni + 100 2.540363 m 89.978103 cm -4.4166068 m 41.771955 MeV 758.361 eV 4.2286554 mm 5.8185271 m World muIoni + 101 2.6101092 m 92.613096 cm -4.4813843 m 41.752996 MeV 17.805757 keV 9.8767546 cm 5.9172946 m World muIoni + 102 2.6199222 m 92.986448 cm -4.4905284 m 41.746487 MeV 2.8981847 keV 1.3922951 cm 5.9312175 m World muIoni + 103 2.6251185 m 93.182564 cm -4.4953635 m 41.742727 MeV 1.7983817 keV 7.3637661 mm 5.9385813 m World muIoni + 104 2.6750122 m 95.066158 cm -4.541726 m 41.720935 MeV 18.923868 keV 7.0665942 cm 6.0092473 m World muIoni + 105 2.7943499 m 99.560511 cm -4.6522089 m 41.686858 MeV 32.597281 keV 16.872497 cm 6.1779722 m World muIoni + 106 2.806593 m 1.0002818 m -4.6636323 m 41.682494 MeV 3.1293948 keV 1.7385526 cm 6.1953578 m World muIoni + 107 2.8867339 m 1.0309017 m -4.7384524 m 41.652525 MeV 27.944875 keV 11.383438 cm 6.3091921 m World muIoni + 108 2.9187902 m 1.0433448 m -4.7682341 m 41.638962 MeV 11.734069 keV 4.549061 cm 6.3546827 m World muIoni + 109 2.9269886 m 1.046512 m -4.7758543 m 41.632765 MeV 2.8787504 keV 1.1632366 cm 6.3663151 m World muIoni + 110 2.9491744 m 1.055084 m -4.7964894 m 41.623659 MeV 9.1055444 keV 3.1487993 cm 6.3978031 m World muIoni + 111 3.0225597 m 1.0834057 m -4.864722 m 41.594692 MeV 25.907346 keV 10.413109 cm 6.5019342 m World muIoni + 112 3.0597558 m 1.0978474 m -4.8994346 m 41.578355 MeV 15.220896 keV 5.2887355 cm 6.5548216 m World muIoni + 113 3.1211784 m 1.1215025 m -4.9566598 m 41.56103 MeV 16.230674 keV 8.721847 cm 6.64204 m World muIoni + 114 3.1517534 m 1.1333075 m -4.9850819 m 41.551302 MeV 7.7192104 keV 4.3382045 cm 6.6854221 m World muIoni + 115 3.1549389 m 1.1345315 m -4.9880527 m 41.547538 MeV 288.79103 eV 4.5245591 mm 6.6899466 m World muIoni + 116 3.1708408 m 1.1406484 m -5.0029015 m 41.541031 MeV 5.2467704 keV 2.2600361 cm 6.712547 m World muIoni + 117 3.2373838 m 1.1663385 m -5.0649522 m 41.518788 MeV 19.211952 keV 9.4542461 cm 6.8070894 m World muIoni + 118 3.2560697 m 1.1735473 m -5.0823371 m 41.510447 MeV 5.4938042 keV 2.6520964 cm 6.8336104 m World muIoni + 119 3.2821866 m 1.1836284 m -5.1066117 m 41.493187 MeV 5.1788135 keV 3.7053758 cm 6.8706642 m World muIoni + 120 3.3121741 m 1.1951621 m -5.1346371 m 41.479685 MeV 6.6550192 keV 4.26346 cm 6.9132988 m World muIoni + 121 3.3165065 m 1.1968376 m -5.1386826 m 41.47772 MeV 912.02445 eV 6.1597283 mm 6.9194585 m World muIoni + 122 3.317078 m 1.1970584 m -5.1392167 m 41.476502 MeV 136.55238 eV 812.84079 um 6.9202713 m World muIoni + 123 3.3278804 m 1.2012337 m -5.1492757 m 41.471324 MeV 3.1931555 keV 1.5339788 cm 6.9356111 m World muIoni + 124 3.3370416 m 1.2047742 m -5.157823 m 41.468901 MeV 2.422801 keV 1.3019881 cm 6.948631 m World muIoni + 125 3.3434867 m 1.2072611 m -5.1638422 m 41.451486 MeV 1.3982223 keV 9.162732 mm 6.9577937 m World muIoni + 126 3.3765688 m 1.2199787 m -5.1947321 m 41.419669 MeV 5.1089283 keV 4.701432 cm 7.0048081 m World muIoni + 127 3.3789255 m 1.2208752 m -5.1969341 m 41.417982 MeV 663.15598 eV 3.3477181 mm 7.0081558 m World muIoni + 128 3.3845841 m 1.2230306 m -5.2022205 m 41.413633 MeV 2.3172042 keV 8.0381043 mm 7.0161939 m World muIoni + 129 3.4753936 m 1.2575771 m -5.2870415 m 41.335413 MeV 32.865081 keV 12.897488 cm 7.1451688 m World muIoni + 130 3.5492461 m 1.285782 m -5.3562038 m 41.309252 MeV 20.219361 keV 10.503903 cm 7.2502078 m World muIoni + 131 3.5799293 m 1.2975414 m -5.3849295 m 41.298177 MeV 9.4591836 keV 4.3645246 cm 7.293853 m World muIoni + 132 3.6024143 m 1.3062542 m -5.4060895 m 41.292031 MeV 4.5937692 keV 3.2081645 cm 7.3259347 m World muIoni + 133 3.678623 m 1.335877 m -5.4779266 m 41.267826 MeV 24.20466 keV 10.8839 cm 7.4347737 m World muIoni + 134 3.6928685 m 1.3414238 m -5.491289 m 41.264173 MeV 3.6527556 keV 2.030402 cm 7.4550777 m World muIoni + 135 3.722932 m 1.3531497 m -5.5194461 m 41.254321 MeV 9.8524588 keV 4.2826768 cm 7.4979045 m World muIoni + 136 3.7460142 m 1.3621117 m -5.5410034 m 41.24725 MeV 6.0140637 keV 3.2830288 cm 7.5307348 m World muIoni + 137 3.747472 m 1.3626795 m -5.5423704 m 41.245696 MeV 215.72513 eV 2.0775635 mm 7.5328123 m World muIoni + 138 3.7507352 m 1.3639515 m -5.5454317 m 41.243941 MeV 647.18911 eV 4.6516773 mm 7.537464 m World muIoni + 139 3.7606829 m 1.3678263 m -5.5547566 m 41.24023 MeV 2.6640831 keV 1.4174748 cm 7.5516388 m World muIoni + 140 3.7619131 m 1.3683061 m -5.555909 m 41.236987 MeV 531.70321 eV 1.7525923 mm 7.5533913 m World muIoni + 141 3.777847 m 1.3745253 m -5.5708242 m 41.231348 MeV 4.1889214 keV 2.2694355 cm 7.5760857 m World muIoni + 142 3.8029989 m 1.3843057 m -5.5944561 m 41.224076 MeV 7.2717758 keV 3.5871194 cm 7.6119569 m World muIoni + 143 3.8351483 m 1.3968398 m -5.6246657 m 41.21122 MeV 10.179579 keV 4.5861824 cm 7.6578187 m World muIoni + 144 3.8694586 m 1.4102288 m -5.6568452 m 41.197138 MeV 12.622633 keV 4.8907978 cm 7.7067267 m World muIoni + 145 3.8847884 m 1.4162087 m -5.6711991 m 41.185038 MeV 3.3459313 keV 2.1835638 cm 7.7285623 m World muIoni + 146 3.9160644 m 1.4285845 m -5.7004034 m 41.174405 MeV 9.5064256 keV 4.454493 cm 7.7731073 m World muIoni + 147 3.9307461 m 1.4343912 m -5.714095 m 41.167261 MeV 5.7163756 keV 2.0898044 cm 7.7940053 m World muIoni + 148 3.9342533 m 1.4357838 m -5.7173753 m 41.164398 MeV 1.7449536 keV 5.0000124 mm 7.7990053 m World muIoni + 149 3.9378873 m 1.4372242 m -5.7207736 m 41.162681 MeV 593.65359 eV 5.1797342 mm 7.8041851 m World muIoni + 150 3.9496137 m 1.4418747 m -5.7317501 m 41.155572 MeV 5.4118956 keV 1.6721749 cm 7.8209068 m World muIoni + 151 4.0885191 m 1.4969348 m -5.8616548 m 41.109756 MeV 44.482635 keV 19.799481 cm 8.0189016 m World muIoni + 152 4.0994374 m 1.5011905 m -5.8718135 m 41.103665 MeV 4.4464836 keV 1.5508693 cm 8.0344103 m World muIoni + 153 4.1191745 m 1.5089062 m -5.8902016 m 41.095875 MeV 4.7028494 keV 2.8057249 cm 8.0624676 m World muIoni + 154 4.1762594 m 1.5314055 m -5.9432719 m 41.073284 MeV 20.517053 keV 8.1125755 cm 8.1435933 m World muIoni + 155 4.2032952 m 1.5420662 m -5.9684205 m 41.059424 MeV 7.4794995 keV 3.843224 cm 8.1820256 m World muIoni + 156 4.216324 m 1.54719 m -5.9805286 m 41.050597 MeV 5.9254286 keV 1.8509761 cm 8.2005353 m World muIoni + 157 4.2444163 m 1.5582229 m -6.0067017 m 41.024998 MeV 11.708027 keV 3.9949135 cm 8.2404845 m World muIoni + 158 4.2631289 m 1.5655766 m -6.0240552 m 41.014541 MeV 6.3051022 keV 2.655907 cm 8.2670435 m World muIoni + 159 4.3324371 m 1.5929333 m -6.0883797 m 40.989264 MeV 24.020406 keV 9.8436277 cm 8.3654798 m World muIoni + 160 4.3353611 m 1.5940863 m -6.0911211 m 40.986025 MeV 313.5309 eV 4.1707064 mm 8.3696505 m World muIoni + 161 4.3396255 m 1.5957619 m -6.0951268 m 40.982931 MeV 1.6270097 keV 6.0858517 mm 8.3757364 m World muIoni + 162 4.3663 m 1.6062271 m -6.120176 m 40.975208 MeV 6.637151 keV 3.8059373 cm 8.4137957 m World muIoni + 163 4.4381061 m 1.6341306 m -6.1873687 m 40.949188 MeV 23.685678 keV 10.222348 cm 8.5160192 m World muIoni + 164 4.4434015 m 1.6361548 m -6.1923142 m 40.945827 MeV 1.5245205 keV 7.5230332 mm 8.5235422 m World muIoni + 165 4.4488663 m 1.638243 m -6.1974164 m 40.944805 MeV 1.0226207 keV 7.7625641 mm 8.5313048 m World muIoni + 166 4.4842706 m 1.6517814 m -6.2304811 m 40.928892 MeV 9.9408991 keV 5.0299457 cm 8.5816043 m World muIoni + 167 4.5501745 m 1.6769962 m -6.2921171 m 40.904497 MeV 22.041342 keV 9.3691708 cm 8.675296 m World muIoni + 168 4.6512423 m 1.7160047 m -6.3863283 m 40.872297 MeV 31.118215 keV 14.356967 cm 8.8188656 m World muIoni + 169 4.6544195 m 1.7172256 m -6.3892919 m 40.869206 MeV 2.0745313 keV 4.5131584 mm 8.8233788 m World muIoni + 170 4.6577132 m 1.7184894 m -6.3923615 m 40.867096 MeV 2.1102203 keV 4.6763495 mm 8.8280552 m World muIoni + 171 4.6907464 m 1.7311553 m -6.4231619 m 40.855189 MeV 11.907027 keV 4.6907175 cm 8.8749623 m OutOfWorld Transportation +Track (trackID 20, parentID 2) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.176375(mm),2.8621444(mm),79.263432(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.448329888981(mm),-0.27430849090671(mm),78.510171584547(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7944,7 +8199,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.113257(mm),1.2077711(mm),78.921908(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.023117(mm),-0.14072128(mm),78.761475(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7953,7 +8208,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.484643(mm),-1.7909857(mm),79.385403(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.181678(mm),0.97187331(mm),79.262497(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7962,7 +8217,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.788431(mm),-1.6997172(mm),78.626529(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.341975(mm),-3.0911905(mm),79.057906(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7971,7 +8226,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.470147(mm),-0.31785(mm),78.682652(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.990115(mm),1.0232022(mm),79.119948(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7980,7 +8235,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.13546(mm),1.0199164(mm),78.389012(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.26896(mm),-0.17296603(mm),78.365472(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7989,7 +8244,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.745785(mm),0.53150687(mm),79.339357(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.877093(mm),0.048904381(mm),78.610896(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -7998,7 +8253,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.77452(mm),-3.0008831(mm),79.157963(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.850252(mm),1.0683093(mm),78.968283(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8007,7 +8262,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.843886(mm),-2.0946405(mm),79.322059(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.442746(mm),-2.021783(mm),78.511156(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8016,7 +8271,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.559378(mm),-2.4332221(mm),78.490591(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.443773(mm),2.8812316(mm),78.863629(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8025,7 +8280,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.328697(mm),1.4289675(mm),78.707593(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.293478(mm),1.2645484(mm),78.361149(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8034,7 +8289,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.277507(mm),0.79982295(mm),78.540292(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.21522(mm),-1.2566863(mm),78.727602(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8043,7 +8298,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.132347(mm),2.8727064(mm),78.918542(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.682954(mm),1.9271187(mm),78.645128(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8052,7 +8307,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.630793(mm),-0.77205322(mm),78.125344(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.690373(mm),1.6991812(mm),78.467493(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8061,7 +8316,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.147244(mm),2.629457(mm),78.739588(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.012402(mm),1.7992349(mm),78.763364(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8070,7 +8325,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.290648(mm),2.7763444(mm),78.537975(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.641707(mm),-0.91308173(mm),79.005055(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8079,7 +8334,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.367177(mm),-0.042402428(mm),78.700808(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.606569(mm),1.6551909(mm),79.187578(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8088,7 +8343,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.970553(mm),-2.8649563(mm),79.123397(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.823638(mm),1.828854(mm),78.267668(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8097,7 +8352,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.077536(mm),3.1995197(mm),79.104533(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.436231(mm),-2.9402204(mm),78.864959(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8106,7 +8361,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.473818(mm),-1.3313158(mm),78.153023(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.696638(mm),-0.025979013(mm),79.348023(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8115,7 +8370,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.829344(mm),-2.92978(mm),78.619316(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.472753(mm),1.1348137(mm),78.858519(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8124,7 +8379,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.920715(mm),-2.876933(mm),78.955858(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.963648(mm),2.2149369(mm),78.24298(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8133,7 +8388,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.605502(mm),1.6157319(mm),78.482458(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.556278(mm),-1.5970608(mm),78.843791(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8142,7 +8397,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.616551(mm),-1.0454708(mm),78.656837(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.858398(mm),3.4668962(mm),78.966847(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8151,7 +8406,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.792798(mm),1.5974273(mm),78.449433(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.090019(mm),-2.3286889(mm),79.102332(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8160,7 +8415,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.57787(mm),-2.2799592(mm),78.311003(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.025194(mm),2.5406071(mm),78.408455(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8169,7 +8424,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.270804(mm),3.6946118(mm),78.894128(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.402304(mm),2.254093(mm),78.694614(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8178,7 +8433,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.223673(mm),1.2721031(mm),79.43142(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.166512(mm),-0.81512464(mm),78.383537(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8187,7 +8442,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.363039(mm),1.8826065(mm),78.525211(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.303254(mm),-0.50038582(mm),79.064733(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8196,7 +8451,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.672084(mm),-2.5120904(mm),78.647045(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.14014(mm),0.73967(mm),79.093495(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8205,7 +8460,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.992162(mm),-1.9089924(mm),78.237952(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.673305(mm),0.92018406(mm),79.17581(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8214,7 +8469,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.309915(mm),-3.7496485(mm),78.887232(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.487608(mm),-3.1346315(mm),79.032227(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8223,7 +8478,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.532897(mm),-2.1433018(mm),78.847914(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.182665(mm),-1.9905017(mm),78.204361(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8232,7 +8487,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.142281(mm),1.1590422(mm),78.211482(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.575765(mm),-0.75096158(mm),78.840355(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8241,7 +8496,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.104195(mm),-2.4802142(mm),79.27616(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.193941(mm),1.6315159(mm),78.731354(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8250,7 +8505,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.915211(mm),-2.1556281(mm),78.780502(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.350758(mm),0.91549209(mm),78.174722(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8259,7 +8514,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.848768(mm),0.25245351(mm),78.439564(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.925449(mm),1.6827108(mm),78.249716(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8268,7 +8523,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.379733(mm),0.72718289(mm),79.403902(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.022708(mm),1.8733151(mm),78.937874(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8277,7 +8532,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.414765(mm),1.9363119(mm),78.868744(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.590236(mm),-0.51550432(mm),78.837804(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8286,116 +8541,16 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.094785(mm),2.3403419(mm),79.101492(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.183444(mm),1.7230505(mm),79.262186(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 - -********************************************************************************************************* -* G4Track Information: Particle = pi+, Track ID = 2, Parent ID = 1 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process - 0 -8.05 mm 2.31 mm 5.62 cm 85.7 MeV 0 eV 0 fm 0 fm Target initStep - 1 -9.1605276 mm 3.9711998 mm 5.4711172 cm 76.928924 MeV 8.7767603 MeV 2.4783068 mm 2.4783068 mm Target Transportation - 2 10.81301 cm 3.7528379 cm -1.800506 m 76.928943 MeV1.0351321e-13 meV 2.7681561 m 2.7706344 m CaptureMgnt Decay -Track (trackID 2, parentID 1) is processed with stopping code 2 - -********************************************************************************************************* -* G4Track Information: Particle = mu+, Track ID = 19, Parent ID = 2 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process - 0 10.8 cm 3.75 cm -1.8 m 88.8 MeV 0 eV 0 fm 0 fm CaptureMgnt initStep - 1 9.1956586 cm 21.993789 cm -2 m 88.756705 MeV1.1117761e-14 meV 34.860637 cm 34.860637 cm CaptureMgnt Transportation - 2 10.029543 cm 22.061417 cm -2.0058383 m 88.753767 MeV 1.9238764 keV 1.0201958 cm 35.880833 cm World muIoni - 3 27.389317 cm 23.465027 cm -2.1273656 m 88.71979 MeV 31.457334 keV 21.237277 cm 57.11811 cm World muIoni - 4 42.789191 cm 24.646386 cm -2.2348347 m 88.688681 MeV 28.805391 keV 18.816181 cm 75.934291 cm World muIoni - 5 69.640928 cm 26.646766 cm -2.4217112 m 88.634991 MeV 50.603515 keV 32.77576 cm 1.0871005 m World muIoni - 6 74.543143 cm 26.97347 cm -2.4555066 m 88.625919 MeV 7.6088678 keV 5.963233 cm 1.1467328 m World muIoni - 7 88.402121 cm 27.88221 cm -2.5509867 m 88.599883 MeV 24.937139 keV 16.854185 cm 1.3152747 m World muIoni - 8 90.285753 cm 28.021482 cm -2.5640117 m 88.594333 MeV 1.8978507 keV 2.2943354 cm 1.338218 m World muIoni - 9 92.934484 cm 28.215973 cm -2.5823366 m 88.588529 MeV 4.1694716 keV 3.2267013 cm 1.3704851 m World muIoni - 10 94.046841 cm 28.295598 cm -2.5900436 m 88.577017 MeV 3.0560348 keV 1.3556022 cm 1.3840411 m World muIoni - 11 94.260962 cm 28.31101 cm -2.5915278 m 88.572859 MeV 1.5964667 keV 2.6098681 mm 1.3866509 m World muIoni - 12 1.1201447 m 29.590044 cm -2.7146778 m 88.535468 MeV 36.016468 keV 21.644485 cm 1.6030958 m World muIoni - 13 1.1427791 m 29.755865 cm -2.7304187 m 88.529407 MeV 4.5643325 keV 2.7619555 cm 1.6307153 m World muIoni - 14 1.1809868 m 30.038249 cm -2.7569758 m 88.521731 MeV 6.6684286 keV 4.6616285 cm 1.6773316 m World muIoni - 15 1.2138917 m 30.277356 cm -2.7798408 m 88.512938 MeV 6.8204036 keV 4.0140552 cm 1.7174722 m World muIoni - 16 1.2385473 m 30.456578 cm -2.7969955 m 88.507008 MeV 3.1396699 keV 3.0089735 cm 1.7475619 m World muIoni - 17 1.3106153 m 30.983153 cm -2.8471844 m 88.488171 MeV 12.756667 keV 8.7979888 cm 1.8355418 m World muIoni - 18 1.3540161 m 31.299414 cm -2.8774467 m 88.48002 MeV 8.1505618 keV 5.3004194 cm 1.888546 m World muIoni - 19 1.3676617 m 31.397258 cm -2.8869647 m 88.473431 MeV 2.6170576 keV 1.6665899 cm 1.9052119 m World muIoni - 20 1.4358394 m 31.881528 cm -2.9345888 m 88.458466 MeV 13.457826 keV 8.3304963 cm 1.9885169 m World muIoni - 21 1.4788137 m 32.184538 cm -2.9645802 m 88.452239 MeV 4.5102678 keV 5.2492436 cm 2.0410093 m World muIoni - 22 1.5838982 m 32.923865 cm -3.0377479 m 88.42967 MeV 19.003681 keV 12.826118 cm 2.1692705 m World muIoni - 23 1.7307292 m 33.953437 cm -3.1396898 m 88.398542 MeV 28.797252 keV 17.904634 cm 2.3483168 m World muIoni - 24 1.741183 m 34.027206 cm -3.1469477 m 88.392713 MeV 3.5717344 keV 1.274761 cm 2.3610644 m World muIoni - 25 1.8330463 m 34.679031 cm -3.2107192 m 88.340749 MeV 22.284642 keV 11.20187 cm 2.4730831 m World muIoni - 26 1.8557655 m 34.844283 cm -3.2264856 m 88.320003 MeV 3.3687653 keV 2.770324 cm 2.5007864 m World muIoni - 27 1.8888496 m 35.088936 cm -3.2494247 m 88.301262 MeV 7.8504646 keV 4.0333007 cm 2.5411194 m World muIoni - 28 1.8918026 m 35.1109 cm -3.2514778 m 88.299758 MeV 294.859 eV 3.6032843 mm 2.5447227 m World muIoni - 29 1.9507298 m 35.550685 cm -3.2924539 m 88.288052 MeV 10.6624 keV 7.1908212 cm 2.6166309 m World muIoni - 30 1.9526372 m 35.565025 cm -3.2937797 m 88.287693 MeV 358.96791 eV 2.3273926 mm 2.6189583 m World muIoni - 31 2.1351575 m 36.93752 cm -3.4207067 m 88.248781 MeV 37.489159 keV 22.273893 cm 2.8416972 m World muIoni - 32 2.143288 m 36.998161 cm -3.4263559 m 88.245746 MeV 1.4322064 keV 9.9190173 mm 2.8516162 m World muIoni - 33 2.1592756 m 37.116887 cm -3.4374675 m 88.241523 MeV 2.3014595 keV 1.950592 cm 2.8711221 m World muIoni - 34 2.1667065 m 37.171245 cm -3.4426342 m 88.239006 MeV 963.54903 eV 9.0668497 mm 2.880189 m World muIoni - 35 2.265757 m 37.894764 cm -3.5115307 m 88.189834 MeV 16.783475 keV 12.087231 cm 3.0010613 m World muIoni - 36 2.2834622 m 38.017075 cm -3.5238319 m 88.184248 MeV 3.2520058 keV 2.1593733 cm 3.022655 m World muIoni - 37 2.3284754 m 38.328026 cm -3.5550951 m 88.175025 MeV 7.5496906 keV 5.4893002 cm 3.077548 m World muIoni - 38 2.4904587 m 39.446964 cm -3.6678096 m 88.140481 MeV 33.282974 keV 19.765738 cm 3.2752054 m World muIoni - 39 2.5431005 m 39.815391 cm -3.7041016 m 88.125778 MeV 11.689506 keV 6.4045727 cm 3.3392511 m World muIoni - 40 2.5891186 m 40.13842 cm -3.7357477 m 88.1137 MeV 7.4769923 keV 5.5942585 cm 3.3951937 m World muIoni - 41 2.5968983 m 40.193462 cm -3.7411022 m 88.111708 MeV 972.51026 eV 9.4603923 mm 3.4046541 m World muIoni - 42 2.7579582 m 41.333298 cm -3.8519745 m 88.082844 MeV 27.72755 keV 19.586467 cm 3.6005188 m World muIoni - 43 2.7651571 m 41.383338 cm -3.8568997 m 88.080868 MeV 916.51632 eV 8.7368551 mm 3.6092556 m World muIoni - 44 2.8886501 m 42.241597 cm -3.9413286 m 88.06018 MeV 19.397912 keV 14.984139 cm 3.759097 m World muIoni - 45 2.9914092 m 42.954205 cm -4.0116307 m 88.038035 MeV 20.542351 keV 12.471022 cm 3.8838072 m World muIoni - 46 3.0493117 m 43.345417 cm -4.0513305 m 88.025436 MeV 11.001377 keV 7.031414 cm 3.9541214 m World muIoni - 47 3.0525864 m 43.367507 cm -4.0535679 m 88.021321 MeV 386.44658 eV 3.9721971 mm 3.9580936 m World muIoni - 48 3.132162 m 43.902239 cm -4.1079787 m 88.006013 MeV 15.307586 keV 9.654748 cm 4.054641 m World muIoni - 49 3.1398377 m 43.953105 cm -4.11321 m 88.001648 MeV 1.2351263 keV 9.3027751 mm 4.0639438 m World muIoni - 50 3.1718382 m 44.163129 cm -4.1350232 m 87.990939 MeV 6.7370451 keV 3.8784781 cm 4.1027286 m World muIoni - 51 3.248465 m 44.660501 cm -4.1873031 m 87.975169 MeV 14.720197 keV 9.2895634 cm 4.1956242 m World muIoni - 52 3.25886 m 44.726853 cm -4.194391 m 87.970791 MeV 3.0854773 keV 1.2599003 cm 4.2082232 m World muIoni - 53 3.3096161 m 45.047595 cm -4.2290073 m 87.961203 MeV 7.6217935 keV 6.1520447 cm 4.2697437 m World muIoni - 54 3.3169477 m 45.092738 cm -4.234014 m 87.95749 MeV 958.09255 eV 8.8895144 mm 4.2786332 m World muIoni - 55 3.3410569 m 45.241495 cm -4.2504665 m 87.950889 MeV 3.8876536 keV 2.9225851 cm 4.307859 m World muIoni - 56 3.3568175 m 45.341667 cm -4.2611904 m 87.943957 MeV 4.6553358 keV 1.9089303 cm 4.3269484 m World muIoni - 57 3.4163079 m 45.721235 cm -4.301636 m 87.929914 MeV 12.95496 keV 7.2037258 cm 4.3989856 m World muIoni - 58 3.5995919 m 46.883116 cm -4.4263129 m 87.894005 MeV 33.653823 keV 22.197405 cm 4.6209597 m World muIoni - 59 3.7225191 m 47.664267 cm -4.5101047 m 87.866184 MeV 26.094952 keV 14.897394 cm 4.7699336 m World muIoni - 60 3.7693498 m 47.96413 cm -4.5420032 m 87.857305 MeV 7.3659305 keV 5.674168 cm 4.8266753 m World muIoni - 61 3.8294494 m 48.350574 cm -4.5829081 m 87.845918 MeV 9.5009966 keV 7.2801887 cm 4.8994772 m World muIoni - 62 3.8545277 m 48.51127 cm -4.5999661 m 87.841932 MeV 3.9852832 keV 3.0372343 cm 4.9298495 m World muIoni - 63 3.9201989 m 48.927412 cm -4.6446941 m 87.826516 MeV 13.728526 keV 7.9565274 cm 5.0094148 m World muIoni - 64 4.0010451 m 49.46047 cm -4.6996765 m 87.807294 MeV 15.630676 keV 9.7916275 cm 5.1073311 m World muIoni - 65 4.0576559 m 49.838385 cm -4.7381669 m 87.793315 MeV 9.804814 keV 6.8560764 cm 5.1758918 m World muIoni - 66 4.1005029 m 50.126602 cm -4.7672547 m 87.788202 MeV 5.1132778 keV 5.1867778 cm 5.2277596 m World muIoni - 67 4.1122814 m 50.207087 cm -4.7752651 m 87.784736 MeV 2.3008648 keV 1.4267112 cm 5.2420267 m World muIoni - 68 4.1138497 m 50.218088 cm -4.7763378 m 87.783154 MeV 145.76326 eV 1.903212 mm 5.2439299 m World muIoni - 69 4.1182746 m 50.249154 cm -4.7793633 m 87.761084 MeV 627.66125 eV 5.3692844 mm 5.2492992 m World muIoni - 70 4.1794041 m 50.691713 cm -4.821016 m 87.747218 MeV 12.407986 keV 7.4103794 cm 5.323403 m World muIoni - 71 4.216547 m 50.963976 cm -4.8463355 m 87.738893 MeV 7.146304 keV 4.5034239 cm 5.3684372 m World muIoni - 72 4.2695872 m 51.359889 cm -4.8824932 m 87.728353 MeV 9.4977858 keV 6.4314248 cm 5.4327515 m World muIoni - 73 4.2925109 m 51.531435 cm -4.8981642 m 87.722488 MeV 4.5174564 keV 2.7821243 cm 5.4605727 m World muIoni - 74 4.2940646 m 51.542842 cm -4.899228 m 87.720729 MeV 422.58285 eV 1.8864069 mm 5.4624591 m World muIoni - 75 4.2941143 m 51.543208 cm -4.8992621 m 87.720719 MeV 9.5444207 eV 60.421508 um 5.4625196 m World muIoni - 76 4.3400053 m 51.881094 cm -4.9307112 m 87.710304 MeV 8.8598763 keV 5.5735491 cm 5.518255 m World muIoni - 77 4.3984983 m 52.300636 cm -4.9708179 m 87.69809 MeV 10.833985 keV 7.1046395 cm 5.5893014 m World muIoni - 78 4.4119933 m 52.399658 cm -4.9800721 m 87.587409 MeV 4.4119399 keV 1.6393147 cm 5.6056946 m World muIoni - 79 4.5260958 m 53.214027 cm -5.0584198 m 87.563504 MeV 22.691786 keV 13.865094 cm 5.7443455 m World muIoni - 80 4.6791199 m 54.361332 cm -5.1635552 m 87.526668 MeV 34.208648 keV 18.60149 cm 5.9303604 m World muIoni - 81 4.7301476 m 54.74126 cm -5.1984073 m 87.513484 MeV 11.352836 keV 6.1910773 cm 5.9922712 m World muIoni - 82 4.9679534 m 56.518958 cm -5.3603727 m 87.462056 MeV 51.428616 keV 28.827192 cm 6.2805431 m OutOfWorld Transportation -Track (trackID 19, parentID 2) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.396463863108(mm),1.6188470574844(mm),78.166663002874(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.768371(mm),-1.8211939(mm),78.982721(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8404,7 +8559,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.779495(mm),2.1062314(mm),78.451778(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.500036(mm),1.2756205(mm),79.206362(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8413,7 +8568,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.68652(mm),-0.34185932(mm),78.115518(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.7085(mm),0.55890373(mm),78.464297(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8422,7 +8577,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.278044(mm),0.3722191(mm),78.716525(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.625139(mm),-1.2714128(mm),79.007976(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8431,7 +8586,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.718794(mm),-1.1173713(mm),78.462481(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.296951(mm),-0.57022715(mm),78.713191(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8440,7 +8595,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.658069(mm),2.4288955(mm),78.473189(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.203549(mm),0.85127513(mm),78.905987(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8449,7 +8604,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.900904(mm),3.3375673(mm),78.959352(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.116207(mm),-0.66614627(mm),78.745061(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8458,7 +8613,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.935316(mm),-1.0974291(mm),78.247976(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.116596(mm),0.70359253(mm),78.921319(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8467,7 +8622,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.29141(mm),1.3671177(mm),78.537841(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.421516(mm),-2.5038054(mm),78.5149(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8476,7 +8631,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.152137(mm),3.1520676(mm),78.562398(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.902755(mm),3.736491(mm),78.959025(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8485,7 +8640,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.567322(mm),-2.8015348(mm),79.194498(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.574975(mm),3.5982216(mm),79.016822(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8494,7 +8649,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.564737(mm),2.7191729(mm),78.665973(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.894825(mm),0.76654443(mm),78.607769(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8503,7 +8658,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.778649(mm),-1.3722725(mm),78.2756(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.294221(mm),-0.35984582(mm),78.889999(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8512,7 +8667,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.792334(mm),-1.6229314(mm),78.802168(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.061993(mm),1.3691839(mm),78.401966(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8521,7 +8676,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.499155(mm),-1.1654266(mm),78.50121(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.616369(mm),3.2629973(mm),79.18585(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8530,7 +8685,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.709027(mm),-0.46316082(mm),78.993185(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.921234(mm),3.0216426(mm),78.77944(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8539,7 +8694,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.96187(mm),-0.60221391(mm),79.124929(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.590279(mm),2.3770552(mm),79.19045(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8548,7 +8703,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.990579(mm),0.35590944(mm),78.590885(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.387193(mm),-2.0240053(mm),79.22626(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8557,7 +8712,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.188998(mm),0.011939205(mm),79.437534(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.465708(mm),0.15741032(mm),78.683434(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8566,7 +8721,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.582702(mm),-2.5398469(mm),78.662805(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.28198(mm),-0.89164765(mm),79.421138(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8575,7 +8730,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.580956(mm),2.9857868(mm),79.192094(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.964611(mm),2.9638067(mm),78.595464(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8584,16 +8739,46 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.51738(mm),-3.657804(mm),78.85065(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.127636(mm),-0.28059262(mm),79.095699(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = pi+, Track ID = 3, Parent ID = 1 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -8.14 mm -312 um 5.65 cm 31 MeV 0 eV 0 fm 0 fm Target initStep + 1 -7.8020267 mm -409.47696 um 5.55783 cm 25.936945 MeV 5.0334784 MeV 979.89981 um 979.89981 um Target hIoni + 2 -7.5924952 mm -551.77602 um 5.4862091 cm 21.998153 MeV 3.938792 MeV 766.27878 um 1.7461786 mm Target hIoni + 3 -7.5333551 mm -637.69817 um 5.4260719 cm 18.872482 MeV 3.1256707 MeV 616.0481 um 2.3622267 mm Target hIoni + 4 -7.4587801 mm -744.14615 um 5.377464 cm 15.178534 MeV 3.6939477 MeV 508.24434 um 2.870471 mm Target hIoni + 5 -7.4269219 mm -790.96388 um 5.33886 cm 12.106301 MeV 3.0722328 MeV 394.70708 um 3.2651781 mm Target hIoni + 6 -7.430871 mm -831.36131 um 5.3083281 cm 9.1190632 MeV 2.9872382 MeV 312.28684 um 3.5774649 mm Target hIoni + 7 -7.4415385 mm -806.95986 um 5.2847536 cm 6.3674464 MeV 2.7516168 MeV 241.55675 um 3.8190217 mm Target hIoni + 8 -7.4518443 mm -824.78577 um 5.2673539 cm 3.3290104 MeV 3.038436 MeV 179.85951 um 3.9988812 mm Target hIoni + 9 -7.4751056 mm -841.19827 um 5.2602858 cm 0 eV 3.3290104 MeV 79.125907 um 4.0780071 mm Target hIoni + 10 -7.4751056 mm -841.19827 um 5.2602858 cm 0 eV 0 eV 0 fm 4.0780071 mm Target Decay +Track (trackID 3, parentID 1) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = mu+, Track ID = 16, Parent ID = 3 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -7.48 mm -841 um 5.26 cm 4.12 MeV 0 eV 0 fm 0 fm Target initStep + 1 -7.3666595 mm -804.6833 um 5.2622913 cm 1.2739868 MeV 2.8458259 MeV 133.4438 um 133.4438 um Target muIoni + 2 -7.3587287 mm -803.77119 um 5.2632599 cm 104.38984 keV 1.1695969 MeV 17.026062 um 150.46986 um Target muIoni + 3 -7.3587758 mm -803.84328 um 5.2632914 cm 0 eV 104.38984 keV 768.86219 nm 151.23873 um Target muIoni + 4 -7.3587758 mm -803.84328 um 5.2632914 cm 0 eV 0 eV 0 fm 151.23873 um Target DecayWithSpin +Track (trackID 16, parentID 3) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.825751(mm),3.0883976(mm),78.796276(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.749888(mm),0.61621358(mm),78.104345(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8602,7 +8787,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.12614(mm),2.7939299(mm),78.390655(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.60791(mm),-0.80077858(mm),78.129379(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8611,7 +8796,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.243399(mm),-0.75338469(mm),78.546306(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.279822(mm),0.22199556(mm),78.892538(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8620,7 +8805,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.461907(mm),-0.54441623(mm),78.507778(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.820773(mm),1.1493629(mm),78.4445(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8629,7 +8814,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.44037(mm),-0.5193998(mm),79.216883(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.381913(mm),-2.5407566(mm),79.050864(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8638,7 +8823,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.637563(mm),2.4583746(mm),78.476805(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.430688(mm),-0.073686701(mm),78.689609(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8647,7 +8832,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.915742(mm),-2.8883749(mm),78.427754(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.998241(mm),0.44258007(mm),78.23688(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8656,7 +8841,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.329063(mm),1.7187575(mm),78.354875(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.310346(mm),0.85112981(mm),78.358175(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8665,7 +8850,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.989064(mm),0.42565669(mm),78.238499(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.690878(mm),-2.8217638(mm),78.643731(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8674,7 +8859,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.452896(mm),2.5526255(mm),78.685693(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.952027(mm),2.1935878(mm),78.421356(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8683,7 +8868,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.45092(mm),3.2983232(mm),78.862369(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.004096(mm),2.8366716(mm),78.764829(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8692,7 +8877,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.998632(mm),-0.61787407(mm),78.236811(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.265326(mm),0.23916243(mm),78.54244(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8701,7 +8886,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.689872(mm),1.8031574(mm),78.291254(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.393939(mm),0.90747601(mm),79.22507(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8710,7 +8895,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.474922(mm),-1.2436318(mm),78.858137(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.966924(mm),1.6075076(mm),78.595056(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8719,7 +8904,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.270163(mm),3.5232438(mm),79.070568(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.330442(mm),1.4749(mm),78.530958(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8728,7 +8913,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.040388(mm),2.356003(mm),79.111084(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.783027(mm),-1.6009721(mm),78.627483(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8737,7 +8922,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.611208(mm),1.471484(mm),78.481452(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.619239(mm),0.74057623(mm),78.83269(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8746,7 +8931,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.699121(mm),0.7489661(mm),78.46595(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.748385(mm),2.5645665(mm),78.457264(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8755,7 +8940,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.275255(mm),1.487031(mm),78.540689(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.57964(mm),-2.2089682(mm),78.310691(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8764,7 +8949,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.930144(mm),1.3143598(mm),78.425215(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.932081(mm),1.8026225(mm),78.248546(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8773,7 +8958,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.75184(mm),-1.6187322(mm),79.338289(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.113986(mm),-3.0596677(mm),78.392798(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8782,7 +8967,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.222441(mm),3.080506(mm),78.726329(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.470426(mm),2.7362644(mm),78.329948(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8791,7 +8976,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.925174(mm),-1.0171678(mm),78.955072(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.428049(mm),-2.8253737(mm),78.337421(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8800,7 +8985,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.238414(mm),0.73439739(mm),79.076166(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.323002(mm),-3.217926(mm),78.884924(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8809,7 +8994,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.106084(mm),-0.82264862(mm),78.217865(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.043053(mm),-1.8565223(mm),78.581633(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8818,7 +9003,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.076162(mm),0.9999539(mm),78.928449(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.53606(mm),2.1954826(mm),78.671029(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8827,7 +9012,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.657636(mm),-0.43401589(mm),79.3549(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.197085(mm),-0.19884912(mm),79.083454(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8836,7 +9021,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.899268(mm),3.42464(mm),78.430659(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.962732(mm),-3.2950958(mm),78.419469(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8845,7 +9030,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.241392(mm),-2.5270862(mm),78.899314(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.992382(mm),-1.9004093(mm),79.295875(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8854,7 +9039,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.211297(mm),-2.0152592(mm),78.551967(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.475432(mm),-1.0401237(mm),79.034374(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8863,7 +9048,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.787353(mm),-0.18820684(mm),78.097739(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.010578(mm),-0.94254802(mm),78.234705(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8872,7 +9057,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.399758(mm),-2.4568191(mm),79.224044(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.691282(mm),2.397813(mm),78.467333(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8881,7 +9066,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.997995(mm),0.75724587(mm),79.118559(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.971425(mm),-3.2402568(mm),78.77059(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8890,7 +9075,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.773106(mm),3.6947101(mm),78.805559(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.798862(mm),-0.060254677(mm),78.801017(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8899,7 +9084,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.538911(mm),3.687082(mm),78.846854(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.404062(mm),0.38866531(mm),78.517977(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8908,7 +9093,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.286695(mm),0.40163598(mm),78.538672(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.706758(mm),-0.63705431(mm),78.464604(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8917,7 +9102,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.367626(mm),2.2692232(mm),78.348075(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.318712(mm),-2.7323475(mm),78.709354(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8926,7 +9111,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.066115(mm),3.7904266(mm),78.753893(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.733243(mm),-1.0001762(mm),78.812588(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8935,7 +9120,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.894402(mm),-1.75901(mm),78.607844(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.286656(mm),-1.3971544(mm),78.538679(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8944,7 +9129,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.500746(mm),-3.7027167(mm),79.02991(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.878553(mm),-0.43909887(mm),79.315947(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8953,7 +9138,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.407256(mm),0.47270994(mm),79.046395(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.217928(mm),1.8388554(mm),78.550798(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8962,7 +9147,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.742111(mm),3.1930259(mm),78.811024(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.928299(mm),-2.4032423(mm),79.130848(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8971,7 +9156,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.505033(mm),-0.12780408(mm),79.029154(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.886316(mm),-0.7613519(mm),78.256616(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8980,7 +9165,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.441038(mm),3.0423775(mm),78.864111(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.717696(mm),-3.2450491(mm),78.991656(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8989,7 +9174,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.848759(mm),-0.19384996(mm),78.792219(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.782413(mm),-3.44681(mm),78.980245(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -8998,7 +9183,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.803189(mm),-0.74869948(mm),78.976581(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.330248(mm),1.4883358(mm),78.883647(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9007,7 +9192,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.29835(mm),-0.96559401(mm),79.241925(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.053797(mm),1.11438(mm),78.227084(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9016,7 +9201,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.804377(mm),-2.2917312(mm),78.976372(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.998568(mm),2.6756261(mm),78.41315(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9025,7 +9210,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.56815(mm),-2.5767495(mm),78.312717(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.832041(mm),3.4107362(mm),78.971494(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9034,7 +9219,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.673839(mm),0.22131679(mm),78.294081(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.973681(mm),2.175891(mm),78.946519(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9043,7 +9228,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.799209(mm),2.9827451(mm),78.977283(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.401574(mm),-2.7159521(mm),78.342089(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9052,7 +9237,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.963493(mm),3.6157567(mm),78.595661(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.931329(mm),-2.2844252(mm),78.425006(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9061,7 +9246,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.021961(mm),1.4243344(mm),78.938006(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.795003(mm),1.9038359(mm),78.801698(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9070,7 +9255,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.600241(mm),-1.5240902(mm),78.483386(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.330625(mm),-0.14152293(mm),78.88358(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9079,7 +9264,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.680782(mm),3.5285566(mm),78.998165(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.9157(mm),-0.18340468(mm),78.251435(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9088,7 +9273,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.377435(mm),1.6572299(mm),79.22798(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.606627(mm),-2.9077804(mm),79.011241(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9097,7 +9282,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.357751(mm),0.50042554(mm),78.349816(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.385939(mm),-1.1683073(mm),79.050154(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9106,7 +9291,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.006734(mm),0.8500856(mm),78.235383(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.295723(mm),0.32962453(mm),78.889734(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9115,7 +9300,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.466071(mm),-1.297819(mm),79.212351(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.003558(mm),-2.3753742(mm),78.235943(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9124,7 +9309,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.828246(mm),3.5323328(mm),78.972163(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.513462(mm),-0.58307588(mm),78.498687(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9133,7 +9318,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.068588(mm),2.8041982(mm),78.929784(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.171097(mm),0.75405124(mm),78.735382(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9142,7 +9327,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.283783(mm),1.8412892(mm),78.362859(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.029125(mm),-1.9310498(mm),78.231435(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9151,7 +9336,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.900614(mm),0.7764898(mm),78.430422(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.343209(mm),0.86189071(mm),78.35238(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9160,7 +9345,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.504881(mm),2.3796436(mm),78.676527(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.024766(mm),-0.51746057(mm),78.232203(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9169,7 +9354,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.32748(mm),-2.368054(mm),79.236789(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.107427(mm),1.2270189(mm),78.570282(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9178,7 +9363,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.531738(mm),0.12405948(mm),78.319138(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.457859(mm),0.53047218(mm),78.155837(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9187,7 +9372,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.097827(mm),0.54145787(mm),78.395648(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.787343(mm),-0.11666912(mm),78.274067(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9196,7 +9381,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.494768(mm),-1.9727434(mm),78.501983(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.223046(mm),-3.8835019(mm),78.902549(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9205,7 +9390,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.853124(mm),2.1081925(mm),78.615122(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.865009(mm),1.243111(mm),78.965681(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9214,7 +9399,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.39005(mm),-1.3834913(mm),79.402083(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.562424(mm),3.1686576(mm),78.490054(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9223,7 +9408,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.340698(mm),1.4932321(mm),78.705477(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.976412(mm),-3.6374481(mm),78.593383(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9232,7 +9417,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.788822(mm),2.7612687(mm),78.802788(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.072352(mm),1.2890345(mm),78.223813(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9241,7 +9426,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.617651(mm),-0.098292624(mm),79.185624(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.081553(mm),-1.2161364(mm),78.927498(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9250,7 +9435,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.792308(mm),0.046177638(mm),78.096865(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.004924(mm),-1.338836(mm),78.94101(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9259,7 +9444,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.262957(mm),0.73641944(mm),79.424493(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.54347(mm),1.282188(mm),79.375031(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9268,7 +9453,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.727486(mm),2.206528(mm),78.460949(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.617871(mm),-2.4060631(mm),78.480277(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9277,7 +9462,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.398837(mm),1.9875768(mm),78.871552(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.410981(mm),-1.3700761(mm),78.693084(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9286,7 +9471,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.088322(mm),-0.43437198(mm),78.926305(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.155949(mm),-0.070502078(mm),78.738053(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9295,7 +9480,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.975982(mm),-2.6834306(mm),79.298767(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.706983(mm),0.69633089(mm),78.640891(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9304,7 +9489,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.030405(mm),1.6076731(mm),78.936517(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.794126(mm),-1.0336207(mm),78.449198(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9313,7 +9498,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.218188(mm),2.5019385(mm),78.550752(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.895511(mm),-2.943306(mm),78.960303(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9322,7 +9507,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.203566(mm),-0.76797185(mm),78.200676(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.153831(mm),-2.3328966(mm),79.091081(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9331,7 +9516,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.537683(mm),-1.1402492(mm),79.376051(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.086333(mm),0.33933504(mm),79.102982(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9340,7 +9525,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.433071(mm),-3.2715925(mm),78.689189(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.420457(mm),-0.81328789(mm),78.162432(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9349,7 +9534,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.598465(mm),3.4606478(mm),79.01268(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.350807(mm),-1.9401632(mm),79.232675(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9358,7 +9543,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.180306(mm),-0.73866628(mm),78.204778(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.160135(mm),3.8453031(mm),78.737315(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9367,7 +9552,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.509873(mm),0.13140503(mm),78.322993(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.016234(mm),-0.26010171(mm),78.410035(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9376,7 +9561,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.769617(mm),0.10703244(mm),78.100866(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.481209(mm),2.0659391(mm),79.209682(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9385,7 +9570,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.828658(mm),1.6761937(mm),78.619437(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.121436(mm),2.3024759(mm),78.567812(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9394,7 +9579,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.706722(mm),-2.0720273(mm),78.46461(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.331996(mm),1.4868119(mm),78.354357(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9403,7 +9588,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.324301(mm),0.50660436(mm),79.061022(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.559269(mm),-0.82076935(mm),78.666937(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9412,7 +9597,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.973682(mm),2.1122838(mm),78.241211(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.581284(mm),1.9551195(mm),78.310401(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9421,7 +9606,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.064305(mm),-1.9360223(mm),78.577886(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.842582(mm),-1.3796199(mm),78.616981(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9430,7 +9615,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.702241(mm),-0.1882529(mm),78.818054(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.664827(mm),0.036896806(mm),78.29567(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9439,7 +9624,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.816244(mm),-1.3812095(mm),78.445298(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.089292(mm),3.4747534(mm),79.102461(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9448,7 +9633,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.16383(mm),-3.2496945(mm),79.089318(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.694807(mm),-1.3206939(mm),78.466711(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9457,7 +9642,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.536603(mm),-1.5492644(mm),79.199915(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.289952(mm),1.931852(mm),78.890752(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9466,7 +9651,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.488147(mm),1.8270816(mm),78.326824(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.336631(mm),-2.656253(mm),78.35354(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9475,7 +9660,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.24421(mm),3.1897063(mm),78.546163(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.145572(mm),-0.79788961(mm),79.445191(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9484,7 +9669,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.230803(mm),-1.2480303(mm),78.724854(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.679325(mm),0.78648958(mm),78.822095(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9493,7 +9678,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.42952(mm),1.5297086(mm),78.160834(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.221299(mm),0.6923208(mm),78.72653(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9502,7 +9687,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.256553(mm),3.5959323(mm),78.543987(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.631206(mm),-1.4397455(mm),78.654253(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9511,7 +9696,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.901534(mm),-0.075469877(mm),78.43026(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.273854(mm),-2.8591378(mm),78.540936(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9520,7 +9705,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.149909(mm),2.9104969(mm),79.091772(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.354779(mm),-1.3439515(mm),79.408302(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9529,7 +9714,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.467825(mm),1.3928948(mm),78.330407(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.107219(mm),-3.7605767(mm),78.570319(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9538,7 +9723,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.536747(mm),-3.1396513(mm),78.494581(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.901413(mm),0.46147847(mm),78.430281(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9547,7 +9732,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.458358(mm),-3.2269674(mm),78.68473(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.60015(mm),2.8869907(mm),78.659729(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9556,7 +9741,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.60636(mm),-2.8778045(mm),78.30598(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.342881(mm),-0.58377627(mm),78.705092(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9565,7 +9750,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.626768(mm),-0.83691836(mm),79.007689(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.745362(mm),0.096096509(mm),79.339432(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9574,7 +9759,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.436791(mm),3.1462023(mm),78.688533(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.13016(mm),-2.3863131(mm),78.389947(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9583,7 +9768,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.942253(mm),-0.59268179(mm),78.42308(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.495396(mm),-0.6194943(mm),78.149219(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9592,7 +9777,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.841412(mm),0.52521862(mm),78.440861(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.651834(mm),3.9586789(mm),78.826942(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9601,7 +9786,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.119529(mm),-0.87499264(mm),79.449783(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.162348(mm),1.5483133(mm),78.207944(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9610,7 +9795,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.763414(mm),1.8559813(mm),79.336249(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.332573(mm),0.99723444(mm),78.354256(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9619,7 +9804,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.622183(mm),3.3226129(mm),78.479517(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.595535(mm),2.9703391(mm),78.484215(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9628,7 +9813,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.793873(mm),1.876107(mm),78.62557(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.596608(mm),-2.404411(mm),78.484026(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9637,7 +9822,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.655929(mm),-0.089054726(mm),78.297239(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.676353(mm),0.71620372(mm),78.822619(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9646,7 +9831,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.664563(mm),-3.6870088(mm),79.001025(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.155925(mm),0.55391062(mm),78.209077(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9655,7 +9840,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.108334(mm),3.2391858(mm),78.746449(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.073066(mm),-0.049891417(mm),78.223687(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9664,7 +9849,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.158908(mm),3.1751179(mm),78.384877(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.367(mm),-0.10153998(mm),78.348185(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9673,7 +9858,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.40024(mm),2.542482(mm),78.871305(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.146428(mm),-0.46637223(mm),78.563405(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9682,7 +9867,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.540033(mm),-1.6940337(mm),78.846656(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.195007(mm),0.34576909(mm),78.907493(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9691,7 +9876,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.690573(mm),0.53838122(mm),78.996439(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.922664(mm),1.9027515(mm),78.779188(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9700,7 +9885,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.752826(mm),1.2197065(mm),78.632808(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.884525(mm),0.94565825(mm),78.256932(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9709,7 +9894,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.992139(mm),1.4255918(mm),79.119591(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.607548(mm),3.350031(mm),78.482097(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9718,7 +9903,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.868415(mm),3.5627236(mm),78.788753(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.000643(mm),0.43316976(mm),78.941765(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9727,7 +9912,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.143194(mm),-1.5977904(mm),78.211321(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.704174(mm),1.4646148(mm),78.641386(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9736,7 +9921,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.913275(mm),-1.7982567(mm),78.251862(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.852281(mm),0.12451045(mm),78.438944(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9745,7 +9930,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.721616(mm),1.7616631(mm),78.638311(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.096737(mm),-0.96802119(mm),79.101148(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9754,7 +9939,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.756803(mm),-0.30889186(mm),78.98476(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.530332(mm),0.57752732(mm),78.672039(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9763,7 +9948,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.231201(mm),2.7056911(mm),78.724784(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.738451(mm),-1.2028057(mm),78.635342(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9772,7 +9957,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.065956(mm),-2.8687287(mm),78.577594(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.476534(mm),1.6107211(mm),78.857852(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9781,7 +9966,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.534361(mm),0.509872(mm),79.023983(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.548103(mm),-1.8695719(mm),78.316252(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9790,7 +9975,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.578709(mm),-2.3696987(mm),78.487182(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.466661(mm),-1.9986477(mm),78.506939(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9799,7 +9984,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.334259(mm),1.3236133(mm),79.235593(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.048247(mm),-3.608374(mm),78.757044(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9808,7 +9993,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.602837(mm),-1.5102033(mm),78.482928(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.638208(mm),-1.6231613(mm),78.476691(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9817,7 +10002,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.086202(mm),0.56206078(mm),79.103005(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.182172(mm),1.7444703(mm),78.909756(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9826,7 +10011,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.998255(mm),-3.680884(mm),78.589532(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.559104(mm),-2.1153007(mm),78.843293(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9835,7 +10020,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.801534(mm),-0.013984641(mm),78.976873(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.835461(mm),-2.0026796(mm),78.794564(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9844,7 +10029,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.031235(mm),2.0068692(mm),79.112698(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.157228(mm),1.7027274(mm),78.385174(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9853,7 +10038,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.089567(mm),-2.2009032(mm),78.573431(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.122159(mm),-0.98769625(mm),78.21503(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9862,7 +10047,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.011334(mm),2.4883847(mm),78.410899(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.903716(mm),0.53305237(mm),78.429875(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9871,7 +10056,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.827827(mm),2.1224743(mm),78.619583(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.344405(mm),-1.3145419(mm),79.410131(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9880,7 +10065,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.286993(mm),-3.0636464(mm),78.891274(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.255934(mm),-0.12631134(mm),78.720423(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9889,7 +10074,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.443864(mm),-2.0901688(mm),78.687286(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.038294(mm),-3.3893045(mm),78.582472(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9898,7 +10083,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.165998(mm),0.53734711(mm),78.912608(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.413786(mm),1.4275335(mm),78.69259(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9907,7 +10092,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.694054(mm),0.3550204(mm),79.348479(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.269501(mm),-2.2668827(mm),79.070685(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9916,7 +10101,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.532259(mm),-3.613269(mm),78.848027(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.720181(mm),3.1632622(mm),78.814891(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9925,7 +10110,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.45807(mm),-2.1681598(mm),79.037435(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.533046(mm),-0.93468885(mm),78.318907(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9934,7 +10119,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.222809(mm),-0.94863905(mm),79.431572(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.854854(mm),-2.8777166(mm),78.614817(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9943,7 +10128,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.136451(mm),0.6201016(mm),78.21251(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.774311(mm),2.3683271(mm),78.981673(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9952,7 +10137,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.973669(mm),2.186633(mm),78.593867(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.508474(mm),1.606049(mm),78.852221(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9961,7 +10146,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.29865(mm),1.7834539(mm),79.241872(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.454751(mm),1.1535762(mm),78.156385(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9970,7 +10155,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.880165(mm),-2.4085641(mm),78.434027(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.856902(mm),1.3369593(mm),78.261802(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9979,7 +10164,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.175984(mm),-3.561497(mm),78.558194(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.374952(mm),-2.1868979(mm),78.699437(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9988,7 +10173,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.662895(mm),0.92222564(mm),78.824992(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.359003(mm),2.7577929(mm),78.702249(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -9997,7 +10182,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.94886(mm),0.98456468(mm),78.950896(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.772567(mm),-2.1007511(mm),78.981981(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10006,7 +10191,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.606558(mm),-0.95911798(mm),78.658599(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.717948(mm),-0.14888353(mm),78.109977(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10015,7 +10200,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.576312(mm),0.42314968(mm),78.134951(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.467639(mm),-1.3052613(mm),78.154113(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10024,7 +10209,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.666463(mm),-0.41530525(mm),79.00069(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.167536(mm),2.5179704(mm),79.264991(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10033,7 +10218,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.961199(mm),1.3948111(mm),78.243412(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.220439(mm),1.9092885(mm),78.726682(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10042,7 +10227,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.236232(mm),-3.8879761(mm),78.723897(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.103723(mm),1.0247064(mm),78.570935(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10051,7 +10236,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.5324(mm),-2.2538552(mm),78.848002(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.639547(mm),-1.011048(mm),78.652782(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10060,7 +10245,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.853064(mm),1.7981146(mm),78.967787(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.08991(mm),-0.60026292(mm),78.220717(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10069,7 +10254,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.611847(mm),-3.0284953(mm),79.01032(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.385721(mm),2.4343703(mm),78.697538(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10078,7 +10263,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.922735(mm),-2.7377342(mm),78.426521(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.115847(mm),0.19466897(mm),78.568797(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10087,7 +10272,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.853229(mm),0.96840869(mm),78.438777(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.539465(mm),-2.9590821(mm),78.670429(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10096,7 +10281,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.392747(mm),2.9322325(mm),79.048953(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.749971(mm),-2.5149246(mm),78.456984(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10105,7 +10290,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.585704(mm),1.1857768(mm),78.485949(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.217582(mm),-2.8696942(mm),78.550859(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10114,7 +10299,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.732264(mm),3.0790897(mm),78.81276(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.141626(mm),1.631055(mm),78.211598(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10123,7 +10308,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.687397(mm),-2.2331706(mm),78.820672(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.968455(mm),1.8110307(mm),78.594786(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10132,7 +10317,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.598498(mm),-3.1116821(mm),79.012674(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.70049(mm),1.9144229(mm),79.171017(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10141,7 +10326,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.19526(mm),2.2659306(mm),79.083776(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.292751(mm),-3.1500578(mm),78.537604(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10150,7 +10335,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.242447(mm),1.2838215(mm),78.899128(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.436571(mm),-3.3669427(mm),78.688572(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10159,7 +10344,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.675412(mm),-0.99278883(mm),78.293804(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.566996(mm),1.9620168(mm),79.370882(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10168,7 +10353,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.913706(mm),-0.75797526(mm),79.133421(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.374943(mm),0.87201982(mm),78.523112(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10177,7 +10362,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.542205(mm),0.28299047(mm),78.493619(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.719525(mm),0.27442552(mm),78.991334(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10186,7 +10371,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.001506(mm),1.2266149(mm),78.765286(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.365495(mm),0.15840443(mm),78.348451(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10195,7 +10380,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.636475(mm),1.7184813(mm),79.358631(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.618581(mm),0.10685061(mm),79.361787(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10204,7 +10389,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.355002(mm),0.4941049(mm),79.231936(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.700899(mm),0.35398137(mm),79.170945(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10213,7 +10398,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.387681(mm),1.9392814(mm),78.87352(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.215698(mm),-0.4110489(mm),78.374864(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10222,7 +10407,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.093668(mm),-0.072862669(mm),79.454343(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.457953(mm),0.78126509(mm),79.037456(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10231,7 +10416,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.258499(mm),2.3176931(mm),78.543644(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.59074(mm),-0.3478595(mm),78.132407(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10240,7 +10425,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.747686(mm),-1.4581796(mm),78.986368(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.046837(mm),2.3493517(mm),79.286274(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10249,7 +10434,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.739221(mm),2.8374068(mm),78.635207(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.502714(mm),0.43438991(mm),79.029563(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10258,16 +10443,205 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.959044(mm),1.0005473(mm),78.772773(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.945507(mm),-1.2309486(mm),79.127814(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = pi+, Track ID = 4, Parent ID = 1 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -1.09 cm -1.23 mm 7.3 cm 33.6 MeV 0 eV 0 fm 0 fm Target initStep + 1 -1.0002636 cm -1.8934052 mm 7.3122618 cm 28.482482 MeV 5.1409065 MeV 1.1015431 mm 1.1015431 mm Target hIoni + 2 -9.4957517 mm -2.1654382 mm 7.3220778 cm 25.768524 MeV 2.7139582 MeV 586.76794 um 1.688311 mm Target Transportation + 3 4.2117754 cm -9.322381 cm 10.100556 cm 25.768548 MeV6.3414894e-14 meV 85.159143 cm 85.327974 cm CaptureMgnt Decay +Track (trackID 4, parentID 1) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = mu+, Track ID = 18, Parent ID = 4 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 4.21 cm -9.32 cm 10.1 cm 32.2 MeV 0 eV 0 fm 0 fm CaptureMgnt initStep + 1 -9.2130281 cm 2.0224212 cm 27.255708 cm 32.222642 MeV2.787631e-14 meV 52.886693 cm 52.886693 cm CaptureMgnt Transportation + 2 -17.702246 cm -12.035297 cm 45.020953 cm 32.222667 MeV2.886768e-14 meV 54.767539 cm 1.0765423 m CaptureMgnt Transportation + 3 -2.7987782 cm -19.305725 cm 62.704809 cm 32.222693 MeV2.8735425e-14 meV 54.516653 cm 1.6217089 m CaptureMgnt Transportation + 4 2.089806 cm -2.3661693 cm 79.829698 cm 32.222718 MeV2.7827128e-14 meV 52.793466 cm 2.1496435 m CaptureMgnt Transportation + 5 -15.068927 cm -1.2297793 cm 97.192165 cm 32.222743 MeV2.8213181e-14 meV 53.52591 cm 2.6849026 m CaptureMgnt Transportation + 6 -14.196584 cm -17.453427 cm 1.1504532 m 32.222769 MeV2.9010528e-14 meV 55.03866 cm 3.2352892 m CaptureMgnt Transportation + 7 2.5833606 cm -14.75102 cm 1.3251429 m 32.222794 MeV2.8386238e-14 meV 53.854286 cm 3.7738321 m CaptureMgnt Transportation + 8 -3.7597359 cm 1.7830933 cm 1.4959542 m 32.22282 MeV2.7756015e-14 meV 52.658655 cm 4.3004186 m CaptureMgnt Transportation + 9 -17.978394 cm -7.0210041 cm 1.6720664 m 32.222845 MeV2.8617381e-14 meV 54.292864 cm 4.8433473 m CaptureMgnt Transportation + 10 -8.1073464 cm -20.050888 cm 1.8500991 m 32.222871 MeV2.8929459e-14 meV 54.884966 cm 5.3921969 m CaptureMgnt Transportation + 11 1.5896967 cm -1.726574 cm 2 m 32.222892 MeV2.4358171e-14 meV 46.212342 cm 5.8543204 m CaptureMgnt Transportation + 12 3.3006469 cm -3.7592804 cm 2.009111 m 32.215061 MeV 7.8333442 keV 2.8088014 cm 5.8824084 m World muIoni + 13 6.39775 cm -7.4092732 cm 2.0255411 m 32.200965 MeV 11.576427 keV 5.0610345 cm 5.9330187 m World muIoni + 14 9.1513964 cm -10.656482 cm 2.0401379 m 32.191525 MeV 7.7850244 keV 4.5008498 cm 5.9780272 m World muIoni + 15 9.7759521 cm -11.391216 cm 2.043465 m 32.188521 MeV 1.7773042 keV 1.0200989 cm 5.9882282 m World muIoni + 16 10.310685 cm -12.020141 cm 2.0463126 m 32.1868 MeV 1.7217567 keV 8.73255 mm 5.9969608 m World muIoni + 17 10.316797 cm -12.027344 cm 2.0463452 m 32.17311 MeV 23.221213 eV 99.941024 um 5.9970607 m World muIoni + 18 17.508142 cm -20.52036 cm 2.0846575 m 32.140538 MeV 31.507693 keV 11.76972 cm 6.1147579 m World muIoni + 19 19.029793 cm -22.298042 cm 2.0927502 m 32.134524 MeV 4.775409 keV 2.4759861 cm 6.1395178 m World muIoni + 20 19.16517 cm -22.45613 cm 2.0934687 m 32.134233 MeV 290.68964 eV 2.2018217 mm 6.1417196 m World muIoni + 21 19.731259 cm -23.117185 cm 2.0964729 m 32.127887 MeV 2.9091249 keV 9.2071024 mm 6.1509267 m World muIoni + 22 20.009006 cm -23.44151 cm 2.0979448 m 32.12305 MeV 811.61683 eV 4.5165498 mm 6.1554432 m World muIoni + 23 23.763548 cm -27.822459 cm 2.1178574 m 32.106098 MeV 16.951594 keV 6.1036545 cm 6.2164798 m World muIoni + 24 23.849678 cm -27.923676 cm 2.1183143 m 32.102663 MeV 1.379542 keV 1.4053739 mm 6.2178851 m World muIoni + 25 25.004348 cm -29.279139 cm 2.1244345 m 32.095846 MeV 4.9381461 keV 1.8828471 cm 6.2367136 m World muIoni + 26 25.349125 cm -29.682785 cm 2.1262591 m 32.077228 MeV 2.1072201 keV 5.613326 mm 6.2423269 m World muIoni + 27 30.907202 cm -36.204885 cm 2.1557066 m 32.057414 MeV 18.556777 keV 9.0610199 cm 6.3329371 m World muIoni + 28 30.967446 cm -36.275689 cm 2.1560263 m 32.052728 MeV 60.017943 eV 983.08354 um 6.3339202 m World muIoni + 29 32.469598 cm -38.044246 cm 2.1640111 m 32.045475 MeV 4.2444755 keV 2.4539438 cm 6.3584597 m World muIoni + 30 32.498652 cm -38.078518 cm 2.1641672 m 32.043353 MeV 107.07072 eV 475.63884 um 6.3589353 m World muIoni + 31 33.286561 cm -39.00783 cm 2.1683943 m 32.039928 MeV 2.1180396 keV 1.2896157 cm 6.3718315 m World muIoni + 32 35.845238 cm -42.024095 cm 2.1820811 m 32.028162 MeV 11.765527 keV 4.1854537 cm 6.413686 m World muIoni + 33 36.686036 cm -43.013202 cm 2.1865477 m 32.024584 MeV 3.5786524 keV 1.3728703 cm 6.4274147 m World muIoni + 34 37.921389 cm -44.463831 cm 2.1931308 m 32.018137 MeV 3.8764138 keV 2.0158887 cm 6.4475736 m World muIoni + 35 40.08978 cm -47.018284 cm 2.2046289 m 32.007769 MeV 9.1634673 keV 3.5424905 cm 6.4829985 m World muIoni + 36 41.137737 cm -48.248542 cm 2.210185 m 32.002889 MeV 4.8798723 keV 1.7089317 cm 6.5000878 m World muIoni + 37 41.792423 cm -49.016534 cm 2.2136533 m 31.984819 MeV 3.6492103 keV 1.0671067 cm 6.5107589 m World muIoni + 38 44.976293 cm -52.752864 cm 2.2305143 m 31.97296 MeV 10.528819 keV 5.1903993 cm 6.5626629 m World muIoni + 39 49.313101 cm -57.870869 cm 2.2536151 m 31.952768 MeV 18.494052 keV 7.0949676 cm 6.6336125 m World muIoni + 40 50.873609 cm -59.717787 cm 2.261827 m 31.943744 MeV 7.4686478 keV 2.5535593 cm 6.6591481 m World muIoni + 41 53.74838 cm -63.110734 cm 2.2769873 m 31.904764 MeV 10.441936 keV 4.6983846 cm 6.706132 m World muIoni + 42 54.206469 cm -63.652275 cm 2.2794052 m 31.901738 MeV 1.9906196 keV 7.49382 mm 6.7136258 m World muIoni + 43 54.816387 cm -64.373616 cm 2.2826185 m 31.89906 MeV 1.1825378 keV 9.9778948 mm 6.7236037 m World muIoni + 44 55.083688 cm -64.689546 cm 2.2840227 m 31.896153 MeV 1.7230239 keV 4.3701289 mm 6.7279738 m World muIoni + 45 57.784613 cm -67.881377 cm 2.2982307 m 31.880085 MeV 14.743181 keV 4.4160496 cm 6.7721343 m World muIoni + 46 58.47296 cm -68.695757 cm 2.3018476 m 31.875089 MeV 3.4120586 keV 1.125994 cm 6.7833943 m World muIoni + 47 60.400156 cm -70.979249 cm 2.3119921 m 31.860146 MeV 9.1905596 keV 3.1555567 cm 6.8149498 m World muIoni + 48 62.197421 cm -73.09781 cm 2.3214125 m 31.851057 MeV 7.9083325 keV 2.9335842 cm 6.8442857 m World muIoni + 49 62.688387 cm -73.678493 cm 2.3239846 m 31.848566 MeV 1.4598417 keV 8.0274513 mm 6.8523131 m World muIoni + 50 62.883487 cm -73.909189 cm 2.3250057 m 31.843805 MeV 102.83567 eV 3.1892217 mm 6.8555023 m World muIoni + 51 63.537588 cm -74.681372 cm 2.3284279 m 31.839158 MeV 2.8983234 keV 1.0682808 cm 6.8661852 m World muIoni + 52 67.084302 cm -78.871423 cm 2.3469977 m 31.820461 MeV 16.381362 keV 5.7951919 cm 6.9241371 m World muIoni + 53 73.948166 cm -86.973206 cm 2.3830885 m 31.789228 MeV 30.152945 keV 11.21508 cm 7.0362879 m World muIoni + 54 76.77694 cm -90.297241 cm 2.3978795 m 31.774832 MeV 14.396676 keV 4.6085756 cm 7.0823736 m World muIoni + 55 79.987448 cm -94.070439 cm 2.4146089 m 31.758431 MeV 16.40002 keV 5.2290762 cm 7.1346644 m World muIoni + 56 81.060812 cm -95.330854 cm 2.4202351 m 31.739616 MeV 2.891087 keV 1.7485129 cm 7.1521495 m World muIoni + 57 84.902453 cm -99.853627 cm 2.4403703 m 31.723425 MeV 14.38923 keV 6.266428 cm 7.2148138 m World muIoni + 58 86.06023 cm -1.0120678 m 2.4464527 m 31.71811 MeV 4.1771471 keV 1.8818649 cm 7.2336324 m World muIoni + 59 89.005665 cm -1.0465027 m 2.4618674 m 31.704458 MeV 12.493083 keV 4.786384 cm 7.2814963 m World muIoni + 60 89.279614 cm -1.0497236 m 2.4632925 m 31.702129 MeV 1.1005366 keV 4.4620591 mm 7.2859583 m World muIoni + 61 89.482925 cm -1.0521121 m 2.4643507 m 31.696914 MeV 570.97812 eV 3.3103061 mm 7.2892686 m World muIoni + 62 91.28807 cm -1.0733364 m 2.4737297 m 31.686822 MeV 5.5976302 keV 2.9398878 cm 7.3186675 m World muIoni + 63 94.281981 cm -1.1085139 m 2.4894182 m 31.67215 MeV 12.913977 keV 4.8784643 cm 7.3674522 m World muIoni + 64 95.057665 cm -1.1175989 m 2.4934569 m 31.667324 MeV 3.3455549 keV 1.2610184 cm 7.3800624 m World muIoni + 65 97.170883 cm -1.1423643 m 2.5044254 m 31.657276 MeV 10.047851 keV 3.4354144 cm 7.4144165 m World muIoni + 66 99.8315 cm -1.173903 m 2.5182875 m 31.625122 MeV 13.387793 keV 4.3528839 cm 7.4579453 m World muIoni + 67 1.057653 m -1.2451545 m 2.5494823 m 31.596314 MeV 25.699223 keV 9.78313 cm 7.5557766 m World muIoni + 68 1.0651253 m -1.2540846 m 2.5534329 m 31.592154 MeV 3.0177393 keV 1.2295831 cm 7.5680725 m World muIoni + 69 1.0654666 m -1.2544925 m 2.5536127 m 31.590414 MeV 492.09297 eV 561.46079 um 7.5686339 m World muIoni + 70 1.0675904 m -1.2570324 m 2.5547332 m 31.588536 MeV 704.32138 eV 3.4952672 mm 7.5721292 m World muIoni + 71 1.1402243 m -1.3438491 m 2.5930756 m 31.55935 MeV 28.172896 keV 11.951196 cm 7.6916412 m World muIoni + 72 1.1501998 m -1.3558522 m 2.5983523 m 31.556109 MeV 3.2418517 keV 1.6475028 cm 7.7081162 m World muIoni + 73 1.169063 m -1.3784986 m 2.6083621 m 31.544894 MeV 10.215787 keV 3.1126826 cm 7.739243 m World muIoni + 74 1.1771069 m -1.3881412 m 2.6126161 m 31.517827 MeV 4.7262449 keV 1.3258287 cm 7.7525013 m World muIoni + 75 1.178548 m -1.3898615 m 2.6133739 m 31.508406 MeV 421.98608 eV 2.3685761 mm 7.7548699 m World muIoni + 76 1.2874767 m -1.5200188 m 2.6708697 m 31.465204 MeV 41.734937 keV 17.920005 cm 7.9340699 m World muIoni + 77 1.2956496 m -1.5297312 m 2.6751173 m 31.45981 MeV 2.6786097 keV 1.3385437 cm 7.9474554 m World muIoni + 78 1.3050984 m -1.540912 m 2.6800204 m 31.434469 MeV 3.9183251 keV 1.543791 cm 7.9628933 m World muIoni + 79 1.3236315 m -1.5627898 m 2.689731 m 31.42859 MeV 4.6240659 keV 3.0272288 cm 7.9931656 m World muIoni + 80 1.3303354 m -1.5707464 m 2.6932643 m 31.423761 MeV 2.8747463 keV 1.0987866 cm 8.0041534 m World muIoni + 81 1.3518471 m -1.5962398 m 2.7045835 m 31.406668 MeV 9.2842643 keV 3.5224998 cm 8.0393784 m World muIoni + 82 1.4120128 m -1.6679842 m 2.7367132 m 31.377687 MeV 27.70153 keV 9.8992738 cm 8.1383712 m World muIoni + 83 1.521805 m -1.7990504 m 2.7951282 m 31.32779 MeV 48.400498 keV 18.068062 cm 8.3190518 m World muIoni + 84 1.5513254 m -1.8340783 m 2.8111681 m 31.310084 MeV 11.410521 keV 4.8535462 cm 8.3675872 m World muIoni + 85 1.5601039 m -1.8445413 m 2.8160029 m 31.304206 MeV 4.1278777 keV 1.4488345 cm 8.3820756 m World muIoni + 86 1.6023468 m -1.8948962 m 2.8392427 m 31.28748 MeV 15.397111 keV 6.9715044 cm 8.4517906 m World muIoni + 87 1.6290077 m -1.9265598 m 2.8538556 m 31.274024 MeV 11.051404 keV 4.3896834 cm 8.4956875 m World muIoni + 88 1.6292542 m -1.9268521 m 2.8539893 m 31.273712 MeV 311.78968 eV 405.00476 um 8.4960925 m World muIoni + 89 1.6452581 m -1.9458293 m 2.8626725 m 31.263828 MeV 8.8423215 keV 2.6299461 cm 8.5223919 m World muIoni + 90 1.6490028 m -1.9502963 m 2.8646978 m 31.258507 MeV 1.6830489 keV 6.1707843 mm 8.5285627 m World muIoni + 91 1.6888422 m -1.9979226 m 2.8862489 m 31.239648 MeV 17.833693 keV 6.5726047 cm 8.5942888 m World muIoni + 92 1.6939911 m -2.004085 m 2.8890419 m 31.233237 MeV 931.69032 eV 8.5021864 mm 8.602791 m World muIoni + 93 1.7067534 m -2.0193455 m 2.8959633 m 31.228607 MeV 4.6301992 keV 2.1063364 cm 8.6238543 m World muIoni + 94 1.7111507 m -2.0246008 m 2.8983625 m 31.219718 MeV 2.817102 keV 7.2602164 mm 8.6311145 m World muIoni + 95 1.72215 m -2.0377532 m 2.9043499 m 31.215014 MeV 3.0215145 keV 1.8160987 cm 8.6492755 m World muIoni + 96 1.735688 m -2.0539802 m 2.911745 m 31.2041 MeV 9.7750634 keV 2.2389238 cm 8.6716648 m World muIoni + 97 1.7598939 m -2.0831 m 2.9249881 m 31.192695 MeV 10.389552 keV 4.0115748 cm 8.7117805 m World muIoni + 98 1.8145494 m -2.1488643 m 2.9548438 m 31.167665 MeV 22.5482 keV 9.0573621 cm 8.8023541 m World muIoni + 99 1.814765 m -2.1491241 m 2.9549607 m 31.165988 MeV 206.32029 eV 357.28276 um 8.8027114 m World muIoni + 100 1.8246692 m -2.1610471 m 2.9603248 m 31.156358 MeV 3.1752372 keV 1.6402054 cm 8.8191135 m World muIoni + 101 1.8344117 m -2.1727929 m 2.965609 m 31.151112 MeV 3.1520155 keV 1.6149362 cm 8.8352628 m World muIoni + 102 1.8606076 m -2.2042522 m 2.9797725 m 31.140123 MeV 8.5691149 keV 4.3318883 cm 8.8785817 m World muIoni + 103 1.8733906 m -2.2195637 m 2.9867068 m 31.130857 MeV 6.747603 keV 2.1117077 cm 8.8996988 m World muIoni + 104 1.9527746 m -2.3146627 m 3.0295781 m 31.091589 MeV 38.098527 keV 13.108682 cm 9.0307856 m World muIoni + 105 1.9585269 m -2.3216036 m 3.0327547 m 31.089034 MeV 2.5553623 keV 9.5580913 mm 9.0403437 m World muIoni + 106 1.9808141 m -2.3485062 m 3.0450808 m 31.075387 MeV 12.500699 keV 3.7046021 cm 9.0773897 m World muIoni + 107 1.998241 m -2.3695907 m 3.0548144 m 31.064912 MeV 7.9275749 keV 2.9034417 cm 9.1064241 m World muIoni + 108 2.0133891 m -2.3879114 m 3.0632823 m 31.055273 MeV 6.7183447 keV 2.5235243 cm 9.1316594 m World muIoni + 109 2.0748545 m -2.4621419 m 3.0977793 m 31.017328 MeV 31.208263 keV 10.23635 cm 9.2340229 m World muIoni + 110 2.107479 m -2.5020834 m 3.1169759 m 31.0015 MeV 14.112052 keV 5.5031693 cm 9.2890546 m World muIoni + 111 2.1171314 m -2.5140269 m 3.1228518 m 30.996103 MeV 4.2445025 keV 1.6442082 cm 9.3054967 m World muIoni + 112 2.1279525 m -2.5273818 m 3.1294408 m 30.99135 MeV 4.7530582 keV 1.8408228 cm 9.3239049 m World muIoni + 113 2.1356652 m -2.5369001 m 3.1341388 m 30.986574 MeV 2.8085005 keV 1.3120824 cm 9.3370257 m World muIoni + 114 2.1520002 m -2.5570666 m 3.1441132 m 30.977602 MeV 5.8744655 keV 2.780303 cm 9.3648287 m World muIoni + 115 2.1526292 m -2.5578413 m 3.1444951 m 30.960515 MeV 234.42631 eV 1.0684864 mm 9.3658972 m World muIoni + 116 2.1625543 m -2.5700901 m 3.1505476 m 30.940299 MeV 2.6240143 keV 1.6887085 cm 9.3827843 m World muIoni + 117 2.1739132 m -2.5841051 m 3.1574442 m 30.933864 MeV 5.4426482 keV 1.9313433 cm 9.4020977 m World muIoni + 118 2.1766257 m -2.5874379 m 3.1590894 m 30.93106 MeV 875.11883 eV 4.6013181 mm 9.4066991 m World muIoni + 119 2.1775353 m -2.5885559 m 3.1596406 m 30.929649 MeV 252.78406 eV 1.5430958 mm 9.4082422 m World muIoni + 120 2.1858658 m -2.5987903 m 3.1646909 m 30.923578 MeV 4.5603037 keV 1.4129601 cm 9.4223718 m World muIoni + 121 2.2082154 m -2.6262143 m 3.1782004 m 30.900046 MeV 10.888474 keV 3.7869383 cm 9.4602411 m World muIoni + 122 2.2389211 m -2.6636406 m 3.1967544 m 30.890386 MeV 9.6598094 keV 5.1844225 cm 9.5120854 m World muIoni + 123 2.2394487 m -2.6642869 m 3.1970734 m 30.888223 MeV 0 eV 893.24983 um 9.5129786 m World muIoni + 124 2.2506784 m -2.6780489 m 3.2038745 m 30.881053 MeV 5.5021341 keV 1.9019811 cm 9.5319984 m World muIoni + 125 2.2744264 m -2.7071836 m 3.2182859 m 30.867376 MeV 10.572324 keV 4.0255374 cm 9.5722538 m World muIoni + 126 2.2937841 m -2.731092 m 3.2301608 m 30.858113 MeV 8.1552515 keV 3.2974935 cm 9.6052287 m World muIoni + 127 2.3096151 m -2.7507666 m 3.2399246 m 30.809588 MeV 7.4962515 keV 2.707476 cm 9.6323035 m World muIoni + 128 2.320797 m -2.7646758 m 3.2468075 m 30.80036 MeV 5.8182249 keV 1.9127899 cm 9.6514314 m World muIoni + 129 2.336097 m -2.7837653 m 3.2562568 m 30.794343 MeV 6.0167914 keV 2.6225697 cm 9.6776571 m World muIoni + 130 2.3599537 m -2.8136958 m 3.2711903 m 30.780003 MeV 11.758902 keV 4.1085332 cm 9.7187424 m World muIoni + 131 2.3713497 m -2.8279826 m 3.2783422 m 30.770153 MeV 6.113943 keV 1.962471 cm 9.7383671 m World muIoni + 132 2.3746494 m -2.8321404 m 3.2804047 m 30.766626 MeV 2.1509081 keV 5.6946679 mm 9.7440618 m World muIoni + 133 2.4286765 m -2.9002036 m 3.3141629 m 30.742355 MeV 24.271562 keV 9.3226659 cm 9.8372885 m World muIoni + 134 2.442321 m -2.9174314 m 3.322737 m 30.736229 MeV 6.1258825 keV 2.3589981 cm 9.8608784 m World muIoni + 135 2.4432758 m -2.9186341 m 3.3233389 m 30.732494 MeV 1.7879659 keV 1.6493811 mm 9.8625278 m World muIoni + 136 2.4459441 m -2.9219959 m 3.3250245 m 30.72794 MeV 1.146342 keV 4.6111558 mm 9.867139 m World muIoni + 137 2.4703885 m -2.9528329 m 3.340497 m 30.714786 MeV 11.737572 keV 4.2283005 cm 9.909422 m World muIoni + 138 2.4746999 m -2.9582653 m 3.3432122 m 30.713847 MeV 939.00422 eV 7.4479676 mm 9.91687 m World muIoni + 139 2.5078192 m -3.0000087 m 3.3640705 m 30.696001 MeV 14.054473 keV 5.7223086 cm 9.974093 m World muIoni + 140 2.5607565 m -3.0668958 m 3.3975197 m 30.668314 MeV 26.509902 keV 9.1625013 cm 10.065718 m World muIoni + 141 2.567264 m -3.0751002 m 3.4015774 m 30.66333 MeV 1.4747246 keV 1.1230545 cm 10.076949 m World muIoni + 142 2.6310737 m -3.1555897 m 3.4413544 m 30.630036 MeV 33.294411 keV 11.014787 cm 10.187096 m World muIoni + 143 2.6626823 m -3.1953913 m 3.4612517 m 30.611997 MeV 16.934594 keV 5.4581888 cm 10.241678 m World muIoni + 144 2.6666742 m -3.2004294 m 3.4637619 m 30.605445 MeV 344.24234 eV 6.9006793 mm 10.248579 m World muIoni + 145 2.6694754 m -3.2039596 m 3.465521 m 30.603774 MeV 671.28141 eV 4.8377204 mm 10.253417 m World muIoni + 146 2.6706742 m -3.2054691 m 3.4662698 m 30.602195 MeV 344.54688 eV 2.0679083 mm 10.255485 m World muIoni + 147 2.7243148 m -3.2729597 m 3.499797 m 30.567331 MeV 29.199886 keV 9.250098 cm 10.347986 m World muIoni + 148 2.7342951 m -3.2855278 m 3.5060614 m 30.562435 MeV 3.6620892 keV 1.7228081 cm 10.365214 m World muIoni + 149 2.7532061 m -3.3093039 m 3.517931 m 30.549389 MeV 9.1081845 keV 3.2616277 cm 10.39783 m World muIoni + 150 2.7754711 m -3.3373113 m 3.5319722 m 30.53474 MeV 12.248209 keV 3.8435681 cm 10.436266 m World muIoni + 151 2.8128503 m -3.3845777 m 3.5556405 m 30.514931 MeV 17.673655 keV 6.4741955 cm 10.501008 m World muIoni + 152 2.8156297 m -3.3880905 m 3.5573931 m 30.511931 MeV 868.79741 eV 4.8100511 mm 10.505818 m World muIoni + 153 2.8395003 m -3.4182076 m 3.5724647 m 30.499079 MeV 11.242905 keV 4.1279612 cm 10.547097 m World muIoni + 154 2.847981 m -3.4289277 m 3.577852 m 30.492552 MeV 4.320979 keV 1.4692356 cm 10.56179 m World muIoni + 155 2.8932138 m -3.4861426 m 3.6065426 m 30.468732 MeV 22.257356 keV 7.837562 cm 10.640165 m World muIoni + 156 2.8935301 m -3.4865417 m 3.6067431 m 30.466594 MeV 144.85841 eV 547.36653 um 10.640713 m World muIoni + 157 2.9056855 m -3.5018907 m 3.6144621 m 30.457534 MeV 4.2332758 keV 2.1045847 cm 10.661758 m World muIoni + 158 2.9147022 m -3.5132184 m 3.6201646 m 30.436355 MeV 3.9848714 keV 1.5560759 cm 10.677319 m World muIoni + 159 2.9209898 m -3.5211352 m 3.6241336 m 30.431776 MeV 2.2314955 keV 1.0861011 cm 10.68818 m World muIoni + 160 2.95256 m -3.5608022 m 3.644059 m 30.420036 MeV 10.380657 keV 5.4471845 cm 10.742652 m World muIoni + 161 2.9554132 m -3.5643787 m 3.64585 m 30.416894 MeV 2.036225 keV 4.913215 mm 10.747565 m World muIoni + 162 3.0045653 m -3.6260383 m 3.6766769 m 30.387579 MeV 25.764177 keV 8.4665168 cm 10.83223 m World muIoni + 163 3.0343619 m -3.6632126 m 3.6951205 m 30.362202 MeV 16.87628 keV 5.1087617 cm 10.883318 m World muIoni + 164 3.0367559 m -3.6661952 m 3.6965953 m 30.3595 MeV 1.1160149 keV 4.0989714 mm 10.887417 m World muIoni + 165 3.0477251 m -3.6798715 m 3.703355 m 30.352883 MeV 5.1132839 keV 1.8789902 cm 10.906207 m World muIoni + 166 3.1433159 m -3.7987451 m 3.7621819 m 30.303117 MeV 47.485342 keV 16.349165 cm 11.069699 m World muIoni + 167 3.1613782 m -3.8208781 m 3.773131 m 30.291715 MeV 10.353409 keV 3.0594122 cm 11.100293 m World muIoni + 168 3.162317 m -3.8220251 m 3.7736992 m 30.290404 MeV 98.290143 eV 1.587467 mm 11.10188 m World muIoni + 169 3.1644541 m -3.8246345 m 3.7749881 m 30.285374 MeV 1.2046049 keV 3.6106729 mm 11.105491 m World muIoni + 170 3.1872519 m -3.852457 m 3.7886985 m 30.273898 MeV 11.475575 keV 3.8494339 cm 11.143985 m OutOfWorld Transportation +Track (trackID 18, parentID 4) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.617484(mm),-3.3993794(mm),78.656672(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.29005643454(mm),-3.1620269892284(mm),78.714406445604(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10276,7 +10650,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.073279(mm),0.61712985(mm),78.75263(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.058009(mm),-0.28153059(mm),79.107977(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10285,7 +10659,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.929474(mm),3.42991(mm),79.130641(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.849096(mm),1.4998326(mm),78.439506(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10294,7 +10668,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.604351(mm),1.9192576(mm),78.306334(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.415771(mm),1.2601821(mm),79.22122(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10303,7 +10677,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.610878(mm),0.65683253(mm),78.657837(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.503066(mm),-0.26201721(mm),79.205828(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10312,7 +10686,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.767341(mm),2.4079376(mm),78.806575(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.914012(mm),-3.7990085(mm),78.604386(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10321,7 +10695,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.663324(mm),2.6508521(mm),78.472262(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.599638(mm),-1.5554138(mm),79.012473(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10330,7 +10704,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.267261(mm),-3.0915684(mm),78.894753(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.252492(mm),-1.7058711(mm),78.544703(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10339,7 +10713,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.697607(mm),1.6781941(mm),78.818871(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.982541(mm),-2.0984207(mm),78.592303(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10348,7 +10722,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.820114(mm),3.1688121(mm),78.444616(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.812767(mm),3.5179011(mm),78.622238(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10357,7 +10731,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.953221(mm),1.0255233(mm),78.421146(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.834015(mm),-0.97924561(mm),78.265838(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10366,7 +10740,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.802709(mm),2.867517(mm),78.624012(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.272898(mm),2.1052079(mm),78.893759(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10375,7 +10749,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.808228(mm),-2.6075961(mm),78.975693(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.5559(mm),-2.2005523(mm),78.314877(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10384,7 +10758,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.516452(mm),-1.535328(mm),78.850814(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.942968(mm),0.23186302(mm),79.304588(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10393,7 +10767,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.849161(mm),-0.29260018(mm),78.792148(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.175662(mm),1.7685079(mm),79.263558(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10402,7 +10776,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.490229(mm),-1.3484167(mm),78.15013(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.06702(mm),2.9322493(mm),78.577407(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10411,7 +10785,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.221016(mm),-2.2137567(mm),79.079234(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.49368(mm),-0.99194494(mm),78.678502(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10420,7 +10794,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.686415(mm),-2.3235293(mm),78.644518(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.183753(mm),-2.6317466(mm),79.085805(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10429,7 +10803,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.622092(mm),0.56502147(mm),79.361168(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.999453(mm),-1.9365377(mm),79.294629(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10438,7 +10812,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.469026(mm),0.45917894(mm),79.035503(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.227558(mm),-3.205991(mm),78.901754(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10447,7 +10821,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.120582(mm),-0.2859517(mm),79.27327(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.099852(mm),1.1615706(mm),79.100599(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10456,7 +10830,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.811973(mm),-2.4386143(mm),78.798705(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.931772(mm),3.2212787(mm),78.601255(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10465,16 +10839,46 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.432274(mm),-3.3379955(mm),79.041984(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.984956(mm),0.21969186(mm),79.120858(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = pi+, Track ID = 4, Parent ID = 1 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -1.18 cm 220 um 7.81 cm 21.6 MeV 0 eV 0 fm 0 fm Target initStep + 1 -1.1369299 cm 418.25074 um 7.8477019 cm 17.918911 MeV 3.6997346 MeV 602.40742 um 602.40742 um Target hIoni + 2 -1.1013504 cm 587.51644 um 7.8737869 cm 14.774311 MeV 3.1446006 MeV 477.45543 um 1.0798629 mm Target hIoni + 3 -1.0734911 cm 736.88383 um 7.8946496 cm 11.857359 MeV 2.9169514 MeV 383.23751 um 1.4631004 mm Target hIoni + 4 -1.0523458 cm 861.83772 um 7.9121875 cm 9.480601 MeV 2.3767584 MeV 306.07341 um 1.7691738 mm Target hIoni + 5 -1.0386474 cm 1.0241518 mm 7.9244896 cm 6.7994862 MeV 2.6811148 MeV 249.73742 um 2.0189112 mm Target hIoni + 6 -1.0241143 cm 1.12268 mm 7.930392 cm 3.7223018 MeV 3.0771844 MeV 189.82206 um 2.2087333 mm Target hIoni + 7 -1.018235 cm 1.1884356 mm 7.9334614 cm 39.426296 keV 3.6828755 MeV 97.002392 um 2.3057356 mm Target hIoni + 8 -1.0182306 cm 1.1884766 mm 7.9334613 cm 0 eV 39.426296 keV 445.11463 nm 2.3061808 mm Target hIoni + 9 -1.0182306 cm 1.1884766 mm 7.9334613 cm 0 eV 0 eV 0 fm 2.3061808 mm Target Decay +Track (trackID 4, parentID 1) is processed with stopping code 2 + +********************************************************************************************************* +* G4Track Information: Particle = mu+, Track ID = 23, Parent ID = 4 +********************************************************************************************************* + +Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process + 0 -1.02 cm 1.19 mm 7.93 cm 4.12 MeV 0 eV 0 fm 0 fm Target initStep + 1 -1.0220669 cm 1.2253065 mm 7.9227764 cm 1.2507653 MeV 2.8690474 MeV 133.4438 um 133.4438 um Target muIoni + 2 -1.0224235 cm 1.2326794 mm 7.9216992 cm 56.91122 keV 1.1938541 MeV 16.466873 um 149.91067 um Target muIoni + 3 -1.0224281 cm 1.2327606 mm 7.9216914 cm 2.0816682e-08 meV 56.91122 keV 543.26724 nm 150.45394 um Target muIoni + 4 -1.0224281 cm 1.2327606 mm 7.9216914 cm 0 eV 2.0816682e-08 meV 9.9874963 fm 150.45394 um Target muIoni + 5 -1.0224281 cm 1.2327606 mm 7.9216914 cm 0 eV 0 eV 0 fm 150.45394 um Target DecayWithSpin +Track (trackID 23, parentID 4) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.953995(mm),-2.0596585(mm),78.773663(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.149133(mm),-0.52930498(mm),78.739255(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10483,7 +10887,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.503547(mm),-3.4213762(mm),78.676762(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.646424(mm),2.5735406(mm),78.651569(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10492,177 +10896,16 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.477482(mm),0.44338874(mm),79.034012(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.466973(mm),-2.2768049(mm),78.330557(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 - -********************************************************************************************************* -* G4Track Information: Particle = pi+, Track ID = 3, Parent ID = 1 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process - 0 -8.28 mm 350 um 5.49 cm 45.1 MeV 0 eV 0 fm 0 fm Target initStep - 1 -6.6363667 mm 694.45189 um 5.5231838 cm 38.784835 MeV 6.297886 MeV 1.7197484 mm 1.7197484 mm Target hIoni - 2 -5.7836265 mm 721.11762 um 5.5458238 cm 35.739751 MeV 3.0450846 MeV 886.96574 um 2.6067142 mm Target Transportation - 3 7.4073745 cm -26.34113 cm 30.368282 cm 35.739774 MeV7.396884e-14 meV 1.3005308 m 1.3031376 m CaptureMgnt Decay -Track (trackID 3, parentID 1) is processed with stopping code 2 - -********************************************************************************************************* -* G4Track Information: Particle = mu+, Track ID = 18, Parent ID = 3 -********************************************************************************************************* - -Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process - 0 7.41 cm -26.3 cm 30.4 cm 38.7 MeV 0 eV 0 fm 0 fm CaptureMgnt initStep - 1 -5.3518292 cm -7.6969733 cm 2 m 38.663396 MeV1.674033e-13 meV 3.6474375 m 3.6474375 m CaptureMgnt Transportation - 2 -5.2126725 cm -7.5438672 cm 2.0010868 m 38.662501 MeV 922.09874 eV 2.3370524 mm 3.6497745 m World muIoni - 3 -3.182796 mm -2.1574402 cm 2.0393205 m 38.638646 MeV 22.616357 keV 8.2211352 cm 3.7319859 m World muIoni - 4 7.8497293 mm -9.4096746 mm 2.0478897 m 38.633087 MeV 4.0819532 keV 1.8523757 cm 3.7505096 m World muIoni - 5 2.5469194 cm 9.9826184 mm 2.0614865 m 38.624641 MeV 7.39319 keV 2.9519142 cm 3.7800288 m World muIoni - 6 2.8336786 cm 1.31327 cm 2.0636938 m 38.617295 MeV 1.4754554 keV 4.7977217 mm 3.7848265 m World muIoni - 7 4.6742634 cm 3.3344147 cm 2.0778407 m 38.609301 MeV 7.0000357 keV 3.0780112 cm 3.8156066 m World muIoni - 8 4.8350357 cm 3.5100574 cm 2.0790732 m 38.604363 MeV 705.17021 eV 2.6812223 mm 3.8182878 m World muIoni - 9 5.5478164 cm 4.2894631 cm 2.0845342 m 38.600397 MeV 2.6966501 keV 1.1890127 cm 3.830178 m World muIoni - 10 7.9141785 cm 6.8741945 cm 2.1026784 m 38.579469 MeV 9.5370805 keV 3.9462224 cm 3.8696402 m World muIoni - 11 10.192218 cm 9.3669546 cm 2.1200881 m 38.567746 MeV 8.5076609 keV 3.7992505 cm 3.9076327 m World muIoni - 12 10.76209 cm 9.9924985 cm 2.124424 m 38.564166 MeV 2.3986979 keV 9.5082034 mm 3.9171409 m World muIoni - 13 12.132884 cm 11.497786 cm 2.1348627 m 38.557759 MeV 6.4065925 keV 2.2879331 cm 3.9400202 m World muIoni - 14 16.790977 cm 16.60987 cm 2.1703653 m 38.542979 MeV 14.780275 keV 7.7740462 cm 4.0177607 m World muIoni - 15 20.392346 cm 20.564254 cm 2.1976604 m 38.531025 MeV 10.17945 keV 6.0047755 cm 4.0778084 m World muIoni - 16 23.85738 cm 24.378092 cm 2.2240881 m 38.521487 MeV 9.5379734 keV 5.7910441 cm 4.1357189 m World muIoni - 17 27.707685 cm 28.619935 cm 2.2535975 m 38.437846 MeV 10.260828 keV 6.4440846 cm 4.2001597 m World muIoni - 18 28.392415 cm 29.378917 cm 2.2588192 m 38.435501 MeV 2.3443735 keV 1.1478544 cm 4.2116383 m World muIoni - 19 28.975841 cm 30.025865 cm 2.2632709 m 38.431933 MeV 2.0058637 keV 9.783206 mm 4.2214215 m World muIoni - 20 29.01425 cm 30.068417 cm 2.2635643 m 38.429794 MeV 144.9746 eV 643.92817 um 4.2220654 m World muIoni - 21 30.491237 cm 31.703777 cm 2.274852 m 38.420707 MeV 4.253507 keV 2.4758902 cm 4.2468243 m World muIoni - 22 31.580747 cm 32.915652 cm 2.2831936 m 38.399415 MeV 4.0006128 keV 1.8307099 cm 4.2651314 m World muIoni - 23 32.342513 cm 33.761291 cm 2.2890054 m 38.394826 MeV 2.2406177 keV 1.2779513 cm 4.2779109 m World muIoni - 24 36.158491 cm 38.005411 cm 2.3181741 m 38.383023 MeV 10.442863 keV 6.4095634 cm 4.3420066 m World muIoni - 25 36.502511 cm 38.388849 cm 2.320799 m 38.379876 MeV 2.0419248 keV 5.7816597 mm 4.3477882 m World muIoni - 26 42.434225 cm 44.995711 cm 2.3659982 m 38.350429 MeV 25.891542 keV 9.9632337 cm 4.4474205 m World muIoni - 27 46.009551 cm 48.997783 cm 2.3931201 m 38.324958 MeV 16.948501 keV 6.012956 cm 4.5075501 m World muIoni - 28 46.296421 cm 49.319305 cm 2.3952916 m 38.322252 MeV 1.1192874 keV 4.8251844 mm 4.5123753 m World muIoni - 29 47.611999 cm 50.792792 cm 2.405245 m 38.315609 MeV 5.1393473 keV 2.2119273 cm 4.5344946 m World muIoni - 30 59.044054 cm 63.627012 cm 2.4918642 m 38.265614 MeV 47.713133 keV 19.24687 cm 4.7269633 m World muIoni - 31 61.169921 cm 66.045804 cm 2.5080192 m 38.254169 MeV 10.397252 keV 3.6027427 cm 4.7629907 m World muIoni - 32 61.280069 cm 66.171457 cm 2.5088577 m 38.252857 MeV 98.367418 eV 1.8695195 mm 4.7648602 m World muIoni - 33 61.530622 cm 66.457471 cm 2.5107612 m 38.247823 MeV 1.2050969 keV 4.2522321 mm 4.7691124 m World muIoni - 34 72.916662 cm 79.460253 cm 2.5971219 m 38.195055 MeV 47.205675 keV 19.320979 cm 4.9623222 m World muIoni - 35 76.015985 cm 83.02209 cm 2.6210517 m 38.179728 MeV 13.957662 keV 5.2932881 cm 5.0152551 m World muIoni - 36 76.320787 cm 83.373125 cm 2.6234285 m 38.177694 MeV 686.33548 eV 5.2213431 mm 5.0204765 m World muIoni - 37 77.427897 cm 84.646798 cm 2.6320622 m 38.17237 MeV 4.1816608 keV 1.8956111 cm 5.0394326 m World muIoni - 38 82.533148 cm 90.521648 cm 2.671839 m 38.148585 MeV 22.628936 keV 8.7406915 cm 5.1268395 m World muIoni - 39 83.11335 cm 91.194404 cm 2.676363 m 38.147261 MeV 1.3246222 keV 9.9694928 mm 5.136809 m World muIoni - 40 83.545183 cm 91.6958 cm 2.6797254 m 38.143538 MeV 2.5643958 keV 7.4224845 mm 5.1442315 m World muIoni - 41 84.317623 cm 92.592941 cm 2.6857372 m 38.141655 MeV 1.8830604 keV 1.3277605 cm 5.1575091 m World muIoni - 42 85.385154 cm 93.831667 cm 2.6940403 m 38.13598 MeV 2.6805916 keV 1.833978 cm 5.1758488 m World muIoni - 43 87.563097 cm 96.365632 cm 2.7109574 m 38.121759 MeV 8.0178023 keV 3.7451726 cm 5.2133006 m World muIoni - 44 88.335308 cm 97.259931 cm 2.7169472 m 38.117192 MeV 2.6393945 keV 1.3247132 cm 5.2265477 m World muIoni - 45 92.903174 cm 1.0254951 m 2.7522931 m 38.097218 MeV 18.937265 keV 7.8318976 cm 5.3048667 m World muIoni - 46 93.116877 cm 1.0279694 m 2.7539401 m 38.085443 MeV 3.4389745 keV 3.6608448 mm 5.3085275 m World muIoni - 47 93.190516 cm 1.0288205 m 2.7545069 m 38.085312 MeV 130.80779 eV 1.2600567 mm 5.3097876 m World muIoni - 48 93.53107 cm 1.032756 m 2.7571296 m 38.079377 MeV 3.3152293 keV 5.8279572 mm 5.3156155 m World muIoni - 49 96.426252 cm 1.0662455 m 2.7794566 m 38.066454 MeV 9.9502522 keV 4.9580793 cm 5.3651963 m World muIoni - 50 97.5156 cm 1.0788418 m 2.7879054 m 38.057683 MeV 2.9446087 keV 1.8673946 cm 5.3838703 m World muIoni - 51 1.0211106 m 1.131919 m 2.8235681 m 38.0411 MeV 14.566551 keV 7.8745582 cm 5.4626159 m World muIoni - 52 1.0487854 m 1.1640158 m 2.8451524 m 38.032063 MeV 7.9829849 keV 4.7560378 cm 5.5101762 m World muIoni - 53 1.054123 m 1.1702035 m 2.8493069 m 38.0247 MeV 3.9150571 keV 9.1671868 mm 5.5193434 m World muIoni - 54 1.0551955 m 1.1714463 m 2.8501413 m 38.02291 MeV 95.477668 eV 1.8414425 mm 5.5211849 m World muIoni - 55 1.0844776 m 1.2053536 m 2.8730744 m 38.007239 MeV 13.789669 keV 5.0329959 cm 5.5715148 m World muIoni - 56 1.142732 m 1.2728797 m 2.9188543 m 37.983288 MeV 21.861198 keV 10.024568 cm 5.6717605 m World muIoni - 57 1.2037285 m 1.3432393 m 2.9664397 m 37.946275 MeV 19.756359 keV 10.457278 cm 5.7763333 m World muIoni - 58 1.2412623 m 1.3864226 m 2.995656 m 37.925921 MeV 15.354168 keV 6.424322 cm 5.8405765 m World muIoni - 59 1.2762233 m 1.4266949 m 3.0227681 m 37.910471 MeV 11.930342 keV 5.9826509 cm 5.900403 m World muIoni - 60 1.292648 m 1.4457428 m 3.0355608 m 37.902538 MeV 6.1455894 keV 2.8217826 cm 5.9286208 m World muIoni - 61 1.3001605 m 1.4544267 m 3.0413681 m 37.896564 MeV 4.6937239 keV 1.2867524 cm 5.9414884 m World muIoni - 62 1.305079 m 1.4601169 m 3.0451766 m 37.894682 MeV 588.02233 eV 8.4305697 mm 5.9499189 m World muIoni - 63 1.3244346 m 1.4825062 m 3.060197 m 37.885222 MeV 9.4600438 keV 3.3189358 cm 5.9831083 m World muIoni - 64 1.3565824 m 1.5195387 m 3.0850396 m 37.870664 MeV 13.214694 keV 5.4973245 cm 6.0380815 m World muIoni - 65 1.3893435 m 1.5575502 m 3.11061 m 37.854885 MeV 13.369994 keV 5.6320647 cm 6.0944022 m World muIoni - 66 1.4640144 m 1.6446474 m 3.1693848 m 37.8191 MeV 28.208305 keV 12.890408 cm 6.2233063 m World muIoni - 67 1.5529755 m 1.7473743 m 3.2392419 m 37.781221 MeV 36.872252 keV 15.279753 cm 6.3761038 m World muIoni - 68 1.5881643 m 1.7880943 m 3.2674554 m 37.766722 MeV 13.449379 keV 6.0765003 cm 6.4368688 m World muIoni - 69 1.5887291 m 1.7887511 m 3.267911 m 37.766702 MeV 20.78411 eV 978.73956 um 6.4378475 m World muIoni - 70 1.609659 m 1.8130909 m 3.2847939 m 37.755458 MeV 5.2486892 keV 3.6270161 cm 6.4741177 m World muIoni - 71 1.6169409 m 1.8215744 m 3.2907045 m 37.752486 MeV 1.9155725 keV 1.264643 cm 6.4867641 m World muIoni - 72 1.6570425 m 1.868229 m 3.3232909 m 37.7302 MeV 19.885739 keV 6.9618043 cm 6.5563822 m World muIoni - 73 1.6647196 m 1.8772433 m 3.329525 m 37.720672 MeV 3.1675283 keV 1.338137 cm 6.5697635 m World muIoni - 74 1.6717919 m 1.8855142 m 3.3352512 m 37.714485 MeV 1.5772055 keV 1.2296954 cm 6.5820605 m World muIoni - 75 1.6763715 m 1.890862 m 3.3389429 m 37.712163 MeV 1.3108851 keV 7.9498524 mm 6.5900104 m World muIoni - 76 1.6798672 m 1.8949493 m 3.3417599 m 37.710018 MeV 2.1449078 keV 6.0713293 mm 6.5960817 m World muIoni - 77 1.704262 m 1.9234835 m 3.3614398 m 37.70269 MeV 7.3276222 keV 4.2386422 cm 6.6384681 m World muIoni - 78 1.7616763 m 1.990391 m 3.4077252 m 37.675324 MeV 18.111199 keV 9.9576147 cm 6.7380443 m World muIoni - 79 1.7630422 m 1.9919804 m 3.4088332 m 37.674834 MeV 490.52564 eV 2.3705643 mm 6.7404148 m World muIoni - 80 1.7877101 m 2.0206769 m 3.4288407 m 37.664714 MeV 7.8886843 keV 4.2805323 cm 6.7832201 m World muIoni - 81 1.8043379 m 2.0401675 m 3.4422933 m 37.6549 MeV 4.7049451 keV 2.8936882 cm 6.812157 m World muIoni - 82 1.8075507 m 2.043919 m 3.4448903 m 37.55315 MeV 1.4678983 keV 5.580314 mm 6.8177373 m World muIoni - 83 1.8324382 m 2.0728523 m 3.4650505 m 37.539876 MeV 9.6553155 keV 4.3162012 cm 6.8608993 m World muIoni - 84 1.8430917 m 2.0851864 m 3.473693 m 37.533515 MeV 4.1378356 keV 1.8447857 cm 6.8793472 m World muIoni - 85 1.8490996 m 2.0921499 m 3.4785818 m 37.522636 MeV 2.1844777 keV 1.0415559 cm 6.8897628 m World muIoni - 86 1.8727508 m 2.1194766 m 3.4978236 m 37.50754 MeV 13.654882 keV 4.0943667 cm 6.9307064 m World muIoni - 87 1.9302614 m 2.1858446 m 3.5446029 m 37.471171 MeV 23.730441 keV 9.9501446 cm 7.0302079 m World muIoni - 88 1.9620596 m 2.2222982 m 3.5704327 m 37.457088 MeV 12.614337 keV 5.4837733 cm 7.0850456 m World muIoni - 89 1.9746327 m 2.236762 m 3.5806191 m 37.449433 MeV 4.9569153 keV 2.1703658 cm 7.1067493 m World muIoni - 90 1.9921353 m 2.2569412 m 3.5947673 m 37.429023 MeV 8.3345208 keV 3.0227622 cm 7.1369769 m World muIoni - 91 2.1107127 m 2.392623 m 3.6901428 m 37.380388 MeV 43.36861 keV 20.388023 cm 7.3408571 m World muIoni - 92 2.1200606 m 2.403183 m 3.6976288 m 37.375909 MeV 2.6506705 keV 1.5966809 cm 7.3568239 m World muIoni - 93 2.1357936 m 2.4209865 m 3.7102407 m 37.369125 MeV 5.5568748 keV 2.6898972 cm 7.3837229 m World muIoni - 94 2.1652105 m 2.4542274 m 3.7337671 m 37.354657 MeV 12.830692 keV 5.0237504 cm 7.4339604 m World muIoni - 95 2.1790535 m 2.4698606 m 3.7447745 m 37.347018 MeV 6.3812554 keV 2.3604789 cm 7.4575652 m World muIoni - 96 2.2014786 m 2.4951653 m 3.7625449 m 37.33509 MeV 10.536 keV 3.8196965 cm 7.4957622 m World muIoni - 97 2.2280933 m 2.5251067 m 3.7837091 m 37.321816 MeV 11.462609 keV 4.530733 cm 7.5410695 m World muIoni - 98 2.228409 m 2.5254607 m 3.7839595 m 37.310321 MeV 0 eV 536.36193 um 7.5416058 m World muIoni - 99 2.2652476 m 2.5668686 m 3.8132077 m 37.298324 MeV 9.9225198 keV 6.2667139 cm 7.604273 m World muIoni - 100 2.2781672 m 2.5814402 m 3.8234987 m 37.290237 MeV 4.9677769 keV 2.2026188 cm 7.6262992 m World muIoni - 101 2.2987401 m 2.6046096 m 3.8397901 m 37.279163 MeV 8.0299691 keV 3.5006752 cm 7.6613059 m World muIoni - 102 2.3502003 m 2.6629927 m 3.8807856 m 37.253611 MeV 21.761225 keV 8.7964812 cm 7.7492707 m World muIoni - 103 2.369789 m 2.6862924 m 3.8968325 m 37.247037 MeV 5.3905593 keV 3.4410722 cm 7.7836815 m World muIoni - 104 2.3721859 m 2.6891372 m 3.8987952 m 37.21788 MeV 225.09281 eV 4.2059859 mm 7.7878874 m World muIoni - 105 2.3749083 m 2.6923818 m 3.9010291 m 37.214976 MeV 1.9027214 keV 4.7884522 mm 7.7926759 m World muIoni - 106 2.3797918 m 2.6982093 m 3.9050361 m 37.201779 MeV 2.2194458 keV 8.5944628 mm 7.8012704 m World muIoni - 107 2.4892727 m 2.8287483 m 3.9946634 m 37.158318 MeV 43.461362 keV 19.250967 cm 7.99378 m World muIoni - 108 2.5115405 m 2.8551986 m 4.0129575 m 37.149798 MeV 7.4676511 keV 3.9117151 cm 8.0328972 m World muIoni - 109 2.5285517 m 2.8753966 m 4.0269551 m 37.142255 MeV 5.6607016 keV 2.9887704 cm 8.0627849 m World muIoni - 110 2.5362843 m 2.8845939 m 4.0333426 m 37.137938 MeV 2.9920873 keV 1.3608209 cm 8.0763931 m World muIoni - 111 2.5369919 m 2.8854362 m 4.033929 m 37.132767 MeV 221.16961 eV 1.2466263 mm 8.0776397 m World muIoni - 112 2.5800956 m 2.9367223 m 4.0697047 m 37.099081 MeV 27.263641 keV 7.5948064 cm 8.1535878 m World muIoni - 113 2.6388012 m 3.0067854 m 4.1184492 m 37.073669 MeV 25.411898 keV 10.359193 cm 8.2571797 m World muIoni - 114 2.650122 m 3.0203258 m 4.1277968 m 37.066798 MeV 3.2917852 keV 1.9971937 cm 8.2771516 m World muIoni - 115 2.6669608 m 3.0404667 m 4.1416842 m 37.055804 MeV 7.2326516 keV 2.9699597 cm 8.3068512 m World muIoni - 116 2.6681217 m 3.0418605 m 4.1426436 m 37.052452 MeV 665.53951 eV 2.0519832 mm 8.3089032 m World muIoni - 117 2.6751398 m 3.0502988 m 4.14845 m 37.048149 MeV 2.6637976 keV 1.2416711 cm 8.3213199 m World muIoni - 118 2.7050718 m 3.0863853 m 4.1732558 m 37.031829 MeV 15.174249 keV 5.3042328 cm 8.3743623 m World muIoni - 119 2.7166278 m 3.1003452 m 4.182868 m 37.026794 MeV 3.5070726 keV 2.0513747 cm 8.394876 m World muIoni - 120 2.7178092 m 3.1017777 m 4.1838556 m 37.026673 MeV 120.53684 eV 2.1031671 mm 8.3969792 m World muIoni - 121 2.7217958 m 3.1066117 m 4.1871831 m 37.018438 MeV 1.5778294 keV 7.0945414 mm 8.4040737 m World muIoni - 122 2.7570933 m 3.1494523 m 4.2166872 m 36.995853 MeV 12.454175 keV 6.286284 cm 8.4669366 m World muIoni - 123 2.7630522 m 3.1566803 m 4.2216592 m 36.988368 MeV 3.5928197 keV 1.0605373 cm 8.4775419 m World muIoni - 124 2.7813239 m 3.1788686 m 4.2368852 m 36.981764 MeV 5.3198859 keV 3.2527139 cm 8.5100691 m World muIoni - 125 2.8056174 m 3.2084101 m 4.2570826 m 36.971647 MeV 8.8741605 keV 4.3252892 cm 8.553322 m World muIoni - 126 2.8629661 m 3.2782589 m 4.3045523 m 36.943299 MeV 26.006341 keV 10.208406 cm 8.655406 m World muIoni - 127 2.8888199 m 3.3096457 m 4.3258028 m 36.932745 MeV 9.127085 keV 4.5881728 cm 8.7012878 m World muIoni - 128 2.8890116 m 3.3098795 m 4.325961 m 36.932699 MeV 45.990456 eV 341.26844 um 8.701629 m World muIoni - 129 2.8891817 m 3.3100868 m 4.3261014 m 36.931103 MeV 51.403551 eV 302.68602 um 8.7019317 m World muIoni - 130 2.9005164 m 3.3239199 m 4.3354589 m 36.925356 MeV 4.5675754 keV 2.0183997 cm 8.7221157 m World muIoni - 131 2.909022 m 3.3343623 m 4.3424998 m 36.921695 MeV 2.1823236 keV 1.5197485 cm 8.7373132 m World muIoni - 132 2.9112166 m 3.3370516 m 4.3443152 m 36.919875 MeV 816.70508 eV 3.9171643 mm 8.7412304 m World muIoni - 133 2.9116531 m 3.3375867 m 4.344676 m 36.917936 MeV 838.74578 eV 779.13091 um 8.7420095 m World muIoni - 134 3.0024311 m 3.4488806 m 4.4196498 m 36.881158 MeV 35.598179 keV 16.201328 cm 8.9040228 m World muIoni - 135 3.0232404 m 3.4741979 m 4.436699 m 36.871687 MeV 8.4704719 keV 3.6941485 cm 8.9409643 m World muIoni - 136 3.0455738 m 3.5013279 m 4.4549993 m 36.862333 MeV 8.0910043 keV 3.9619715 cm 8.980584 m World muIoni - 137 3.0823351 m 3.5460888 m 4.4851438 m 36.812524 MeV 18.3072 keV 6.5296505 cm 9.0458805 m World muIoni - 138 3.0980196 m 3.5652399 m 4.498042 m 36.802958 MeV 7.9979828 keV 2.7912965 cm 9.0737934 m World muIoni - 139 3.1033247 m 3.571728 m 4.5024093 m 36.792558 MeV 2.8383799 keV 9.4505462 mm 9.083244 m World muIoni - 140 3.20654 m 3.6976561 m 4.5873717 m 36.75191 MeV 37.238966 keV 18.365803 cm 9.266902 m World muIoni - 141 3.2281211 m 3.7238378 m 4.6050052 m 36.738507 MeV 9.1433929 keV 3.8238278 cm 9.3051403 m World muIoni - 142 3.2736727 m 3.7792945 m 4.6421639 m 36.7169 MeV 21.606609 keV 8.0815839 cm 9.3859561 m OutOfWorld Transportation -Track (trackID 18, parentID 3) is processed with stopping code 2 NULL returned from G4StackManager. Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.243830531153(mm),-1.8022040151929(mm),79.075211280995(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.254907(mm),-2.7300109(mm),79.249585(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10671,7 +10914,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.77514(mm),2.8680917(mm),78.452546(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.408299(mm),0.38512695(mm),79.398865(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10680,7 +10923,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.043418(mm),1.285554(mm),78.934222(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.915591(mm),2.8561081(mm),78.956762(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10689,7 +10932,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.729925(mm),2.4725127(mm),79.165827(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.515048(mm),0.20747371(mm),78.145753(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10698,7 +10941,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.051509(mm),-1.8031461(mm),78.756469(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.264182(mm),0.86037697(mm),78.895296(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10707,7 +10950,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.884357(mm),1.1203923(mm),78.433288(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.585272(mm),1.4296663(mm),78.486025(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10716,7 +10959,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.622614(mm),2.1171545(mm),78.479441(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.73327(mm),-0.23442557(mm),78.107275(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10725,7 +10968,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.47384(mm),1.0414091(mm),78.329347(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.524339(mm),0.33103029(mm),78.673096(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10734,7 +10977,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.398582(mm),0.53169303(mm),79.047924(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.586623(mm),1.6521695(mm),79.191095(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10743,7 +10986,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.268172(mm),-2.5172978(mm),79.247246(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.25926(mm),0.54061953(mm),78.190856(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10752,7 +10995,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.349632(mm),0.12020673(mm),79.056556(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.79418(mm),-0.51656729(mm),78.97817(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10761,7 +11004,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.521095(mm),1.9558181(mm),79.202649(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.36555(mm),2.5574749(mm),79.230076(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10770,7 +11013,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.340502(mm),0.62300613(mm),79.410819(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.288772(mm),-2.290813(mm),78.361979(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10779,7 +11022,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.108849(mm),-0.061267732(mm),79.275339(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.709582(mm),-0.12195846(mm),79.345741(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10788,7 +11031,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.726843(mm),-2.9066914(mm),78.461062(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.244035(mm),1.8488203(mm),78.369867(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10797,7 +11040,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.133318(mm),2.1765053(mm),79.271025(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.105196(mm),2.4915498(mm),79.275983(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10806,7 +11049,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.24998(mm),0.041511287(mm),78.545146(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.946625(mm),-2.2495874(mm),78.245982(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10815,7 +11058,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.372166(mm),1.8344489(mm),78.347274(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.276287(mm),-2.3166547(mm),78.36418(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10824,7 +11067,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.342493(mm),1.3797569(mm),78.528833(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.69726(mm),2.5497411(mm),78.289951(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10833,7 +11076,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-17.180465(mm),-0.96394811(mm),78.204749(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.617239(mm),-2.1822464(mm),78.656715(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10842,7 +11085,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.275396(mm),0.59706139(mm),79.422299(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.959386(mm),0.013500256(mm),79.301693(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10851,7 +11094,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.854818(mm),-0.43421817(mm),78.791151(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.532361(mm),0.75758904(mm),78.495355(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10860,7 +11103,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.763921(mm),-0.50990551(mm),78.454524(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.7583(mm),0.96499601(mm),78.455515(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10869,7 +11112,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.169788(mm),-2.7528352(mm),79.088267(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.035794(mm),3.4031223(mm),78.75924(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10878,7 +11121,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.969091(mm),0.75670699(mm),78.594674(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-17.015773(mm),-1.7460677(mm),78.233789(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10887,7 +11130,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.349047(mm),0.053682181(mm),78.880332(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.223287(mm),3.3228065(mm),79.078834(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10896,7 +11139,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.585331(mm),1.1293675(mm),79.014996(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.346948(mm),-0.27688506(mm),78.351721(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10905,7 +11148,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.438784(mm),2.6454431(mm),79.040836(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.004896(mm),1.784067(mm),79.293669(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10914,7 +11157,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.775196(mm),-3.3856862(mm),78.981517(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-15.326498(mm),-0.37844408(mm),78.531654(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10923,7 +11166,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.14876(mm),3.7844234(mm),78.915648(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.816244(mm),0.82202116(mm),79.150606(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10932,7 +11175,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.928958(mm),1.5599522(mm),79.130732(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-12.860528(mm),-3.5712044(mm),78.966471(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10941,7 +11184,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-16.811248(mm),1.3164332(mm),78.269852(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.004154(mm),-2.4236897(mm),78.764819(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10950,7 +11193,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.536712(mm),-3.862165(mm),78.670914(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.349477(mm),3.4917999(mm),78.880256(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10959,7 +11202,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.568775(mm),-2.6880364(mm),79.017915(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.030222(mm),1.8213652(mm),78.760222(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -10989,12 +11232,12 @@ G4NistMaterialBuilder::FindOrBuildMaterial G4_W --------- Ranecu engine status --------- Initial seed (index) = 159 - Current couple of seeds = 410479912, 913535478 + Current couple of seeds = 692674455, 1965445508 ---------------------------------------- ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.239259(mm),-0.81717263(mm),78.547037(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.447128(mm),-2.9458986(mm),78.334057(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -11003,7 +11246,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.372883(mm),-0.18229139(mm),79.40511(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.897495(mm),0.81833924(mm),79.312607(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -11012,7 +11255,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.543495(mm),2.3542306(mm),79.022372(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.893181(mm),-2.7300215(mm),79.13704(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -11021,7 +11264,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-13.359532(mm),0.1128721(mm),78.878483(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.938943(mm),0.079604639(mm),78.59999(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -11030,7 +11273,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.552909(mm),-2.3949384(mm),78.668058(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-14.129206(mm),-2.2302669(mm),78.742769(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -11039,7 +11282,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-14.840369(mm),2.453485(mm),78.617371(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-11.700742(mm),3.1599635(mm),79.170972(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -11048,7 +11291,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-11.715979(mm),-0.32560442(mm),79.168286(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.017195(mm),-2.9726435(mm),78.938846(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -11057,7 +11300,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-15.16392(mm),3.387398(mm),78.560321(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-10.517752(mm),0.87150485(mm),79.379566(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -11066,7 +11309,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-12.964465(mm),-0.26390496(mm),78.948144(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.122952(mm),-2.1200383(mm),78.391217(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -11075,7 +11318,7 @@ Terminate current event processing. ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.390675(mm),1.6415892(mm),79.401973(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-16.215696(mm),1.9946968(mm),78.374864(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 @@ -11098,12 +11341,12 @@ G4NistMaterialBuilder::FindOrBuildMaterial G4_W --------- Ranecu engine status --------- Initial seed (index) = 159 - Current couple of seeds = 1843193648, 944827155 + Current couple of seeds = 1809936269, 389554294 ---------------------------------------- ===================================== G4EventManager::ProcessOneEvent() ===================================== -G4PrimaryTransformer::PrimaryVertex (-10.673839(mm),-2.0755643(mm),79.352043(mm),0(nsec)) +G4PrimaryTransformer::PrimaryVertex (-13.138311(mm),-3.8162617(mm),78.91749(mm),0(nsec)) 1 primaries are passed from G4EventTransformer. !!!!!!! Now start processing an event !!!!!!! Track (trackID 1, parentID 0) is processed with stopping code 2 diff --git a/examples/extended/field/field05/field05.out b/examples/extended/field/field05/field05.out index 99409d1c083..74faac2b12a 100644 --- a/examples/extended/field/field05/field05.out +++ b/examples/extended/field/field05/field05.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -55,7 +55,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -93,6 +95,7 @@ Some /vis commands (optionally) take a string to specify colour. # # Initialize G4 kernel /run/initialize + G4ChordFinder: stepperDriverId: 2 # # Run one event /run/beamOn 1 diff --git a/examples/extended/field/field06/field06.out b/examples/extended/field/field06/field06.out index b04f4c15e92..c1445a38ffd 100644 --- a/examples/extended/field/field06/field06.out +++ b/examples/extended/field/field06/field06.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -68,7 +68,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -2324,7 +2326,7 @@ Terminate current event processing. Run terminated. Run Summary Number of events processed : 1 - User=0.020000s Real=0.019958s Sys=0.010000s + User=0.020000s Real=0.018834s Sys=0.010000s Graphics systems deleted. Visualization Manager deleting... ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/examples/extended/g3tog4/clGeometry/clGeometry.out b/examples/extended/g3tog4/clGeometry/clGeometry.out index 7b0ee53f985..1f4722e4601 100644 --- a/examples/extended/g3tog4/clGeometry/clGeometry.out +++ b/examples/extended/g3tog4/clGeometry/clGeometry.out @@ -14,7 +14,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -49,7 +49,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -258,7 +260,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -290,7 +292,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -322,7 +324,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -335,7 +337,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -381,7 +382,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -413,7 +414,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -445,7 +446,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -477,7 +478,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -509,7 +510,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -541,7 +542,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -573,7 +574,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -959,12 +960,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ### G4LevelReader: broken transition 0 from level 24 to 24 for isotope Z= 89 A= 219 - use ground level ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1039,7 +1049,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000374s Sys=0.000000s + User=0.000000s Real=0.000328s Sys=0.000000s Region -- -- appears in world volume This region is in the mass world. @@ -1069,7 +1079,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000041s Sys=0.000000s + User=0.000000s Real=0.000048s Sys=0.000000s Region -- -- appears in world volume This region is in the mass world. @@ -1099,7 +1109,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000045s Sys=0.000000s + User=0.000000s Real=0.000053s Sys=0.000000s Region -- -- appears in world volume This region is in the mass world. @@ -1129,7 +1139,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000036s Sys=0.000000s + User=0.000000s Real=0.000034s Sys=0.000000s Region -- -- appears in world volume This region is in the mass world. @@ -1159,7 +1169,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.010000s Real=0.000092s Sys=0.000000s + User=0.000000s Real=0.000071s Sys=0.000000s Region -- -- appears in world volume This region is in the mass world. @@ -1189,7 +1199,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000049s Sys=0.000000s + User=0.000000s Real=0.000039s Sys=0.000000s Region -- -- appears in world volume This region is in the mass world. @@ -1219,7 +1229,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000044s Sys=0.000000s + User=0.000000s Real=0.000037s Sys=0.000000s Region -- -- appears in world volume This region is in the mass world. @@ -1249,7 +1259,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000041s Sys=0.000000s + User=0.000000s Real=0.000034s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. diff --git a/examples/extended/geometry/transforms/batch.out b/examples/extended/geometry/transforms/batch.out index d20c8846a0f..4f3cd9ffed3 100644 --- a/examples/extended/geometry/transforms/batch.out +++ b/examples/extended/geometry/transforms/batch.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 diff --git a/examples/extended/geometry/vecGeomNavigation/CMakeLists.txt b/examples/extended/geometry/vecGeomNavigation/CMakeLists.txt index 2de17d2a29d..5fa0b7edd2c 100644 --- a/examples/extended/geometry/vecGeomNavigation/CMakeLists.txt +++ b/examples/extended/geometry/vecGeomNavigation/CMakeLists.txt @@ -23,7 +23,7 @@ if(BUILTIN_G4VECGEOMNAV) FetchContent_Declare( g4vecgeomnav GIT_REPOSITORY https://gitlab.cern.ch/VecGeom/g4vecgeomnav.git - GIT_TAG 0.2.1 + GIT_TAG master ) FetchContent_GetProperties(g4vecgeomnav) diff --git a/examples/extended/geometry/vecGeomNavigation/History b/examples/extended/geometry/vecGeomNavigation/History index 9e2782b5a30..f284793d51a 100644 --- a/examples/extended/geometry/vecGeomNavigation/History +++ b/examples/extended/geometry/vecGeomNavigation/History @@ -6,10 +6,7 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-06-06 Gabriele Cosmo (VecGeomNavigation-V11-00-05) -- Stick to VecGeom v1 compatible version 0.2.1 of G4VecGeomNav package. - -## 2023-01-09 Ben Morgan (VecGeomNavigation-V11-00-04) +## 2023-01-09 Ben Morgan (VecGeomNavigation-V11-01-00) - Use PROJECT_ scoped _SOURCE/BINARY_DIR variables in place of CMAKE_ scope version to ease use of Geant4 as a CMake subproject. - Fixes [GitHub PR #52](https://github.com/Geant4/geant4/pull/52) diff --git a/examples/extended/geometry/vecGeomNavigation/vecGeomNav.out b/examples/extended/geometry/vecGeomNavigation/vecGeomNav.out index 74be756afed..56add8ccff5 100644 --- a/examples/extended/geometry/vecGeomNavigation/vecGeomNav.out +++ b/examples/extended/geometry/vecGeomNavigation/vecGeomNav.out @@ -18,7 +18,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -43,71 +43,75 @@ G4GDML: Reading userinfo... G4GDML: Reading setup... G4GDML: Reading 'TestNTST.gdml' done! Stripping off GDML names of materials, solids and volumes ... -Enabled Check mode in G4Navigator +Enabled Check mode in G4Navigator G4ChordFinder: stepperDriverId: 2 + *** SETTING MAGNETIC FIELD in Z direction : fieldValue = 2 tesla *** -*** Conversion of G4 -> VecGeom finished (0.00168722 s) *** -*** Closing VecGeom geometry finished (0.000493848 s) *** -*** Setup of syncing lookup structure finished (2.5367e-05 s) *** +*** Conversion of G4 -> VecGeom finished (0.00759464 s) *** +*** Closing VecGeom geometry finished (0.00174486 s) *** +*** Setup of syncing lookup structure finished (3.1382e-05 s) *** TG4VecGeomNavigator created and registered to G4TransportationManager Setting up safety voxels for Svt_log with 340 daughters Uncontained capacity for Svt_log: 8.83002e+07 units +Uncontained capacity for Svt_log: 8.83002e+07 units -VolUtil: FillUncontPts: Volume +The examples are at the process (interaction) level, but a physics list +(G4_HP_CernFLUKAHadronInelastic_PhysicsList) is also made available.
+The interface to `FLUKA` itself is also included. + \link ExampleNeutronSource NeutronSource \endlink NeutronSource is an example of neutrons production. It illustrates the cooperative work diff --git a/examples/extended/hadronic/FissionFragment/FissionFragment.out b/examples/extended/hadronic/FissionFragment/FissionFragment.out index ee607874777..28ff533e305 100644 --- a/examples/extended/hadronic/FissionFragment/FissionFragment.out +++ b/examples/extended/hadronic/FissionFragment/FissionFragment.out @@ -12,7 +12,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -407,7 +407,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -581,7 +583,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -621,7 +623,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -653,7 +655,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -739,7 +741,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -771,7 +773,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -803,7 +805,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -835,7 +837,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -867,7 +869,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV NeutronHP: /Capture file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Capture/CrossSection/6_nat_Carbon @@ -885,6 +887,7 @@ NeutronHP: /Elastic file for Z = 6, A = 12 is not found and NeutronHP will use / ProduceFissionFragments ? 1 UseWendtFissionModel ? 0 UseNRESP71Model ? 0 + UseDBRC ? 0 ======================================================= @@@ G4ParticleHPInelastic instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic @@ -922,7 +925,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -954,7 +957,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV ====================================================================== @@ -1364,12 +1367,21 @@ Threshold for very long decay time at rest 3.171e+10 y ================================================================ ### G4LevelReader: broken transition 0 from level 24 to 24 for isotope Z= 89 A= 219 - use ground level ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/hadronic/FlukaCern/.README.txt b/examples/extended/hadronic/FlukaCern/.README.txt new file mode 100644 index 00000000000..1aace215c9f --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/.README.txt @@ -0,0 +1,43 @@ +///\file "hadronic/FlukaCern/.README.txt" +///\brief Examples FlukaCern README + +/*! \page Examples_FlukaCern Category : hadronic/FlukaCern + + + Examples in this directory demonstrate how to make use of + the interface to `FLUKA` hadron inelastic physics in a G4 application. + + The `FLUKA` interface itself is included, + and located in the `FlukaInterface` subdirectory. + + There are 2 independent G4 examples at the process (interaction) level, + in order to study XS and final state respectively (in `ProcessLevel`), + and instructions at the physics list level (in `PhysicsListLevel`). + + All examples benefit from `G4H1` extension (in `utils`), + allowing to make any G4 histogram also compatible with `Flair`. + + +\link exFlukaCernCrossSection ProcessLevel/CrossSection \endlink + +This example allows the study of G4 cross-sections, +and in addition, of the `FLUKA` hadron-nucleus reaction cross sections.
+The G4HadronicProcessStore is used to access cross sections.
+The resulting XS can be plotted via `ROOT` or `Flair`. + + +\link exFlukaCernFinalState ProcessLevel/FinalState \endlink + +This example shows how to simulate inelastic hadron-nucleus interactions, +using G4 or `FLUKA` models.
+The resulting final states can be plotted via `ROOT` or `Flair`.
+Note that the Geant4 run manager is not used. + + +\link exFlukaCernPhysicsList PhysicsListLevel \endlink + +A `README.md` details how to select a physics list +with hadron inelastic physics from FLUKA. + + +*/ diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/README.md b/examples/extended/hadronic/FlukaCern/FlukaInterface/README.md new file mode 100644 index 00000000000..2bf0fb92d55 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/README.md @@ -0,0 +1,140 @@ +# Interface to `FLUKA` physics models + +This is an interface to the `FLUKA` CERN hadron inelastic physics. +It can be used by ANY G4 application (including the experimental frameworks, provided they are relying on G4 physics lists already). + +Note that this is a generic guide to be able to use the `FLUKA` interface from *any* G4 application. +If you are trying to build / run the G4 examples included in `FlukaCern` with `FLUKA`, +please directly follow the `README.md` files included in +`ProcessLevel/CrossSection` and `ProcessLevel/FinalState`. + + +# Description + +The `FLUKA` hadron inelastic physics are accessible both through a `CrossSectionDataSet` and `HadronicInteraction`. +The `CrossSectionDataSet` and `HadronicInteraction` can be used to define processes, themselves used to form a `FLUKAHadronInelasticPhysicsConstructor`. +The `FLUKAHadronInelasticPhysicsConstructor` can in turn be used to form any `G4PhysicsList`. One example of `G4PhysicsList` is provided (initially `FTFP_BERT_HP`, but with hadron inelastic physics from `FLUKA` instead). +Note that for consistency, all calls to the random engine rely on the G4 random engine (including the calls from within the downloaded `FLUKA` release; see the `FlukaInterface` `Makefile` to see how this is handled). + + +# Structure + +The project contains: +- `fluka4_wrapper`: wrapper to `FLUKA`. +- `cpp_fortran_bridges`: fortran <-> C++ interfacing tools. +- `cpp_utils`: general project helpers (C++ string manipulation, etc). +- `fluka5`: interface to `FLUKA` inelastic hadron-nucleus interactions. +- `fluka_G4_physics_list`: `ModularPhysicsList`, `PhysicsConstructor`, `CrossSectionDataSet`, `HadronicInteraction` to make up a G4 physics list. +- `fluka_G4_bridges`: conversion tools to switch between `FLUKA` and G4 worlds (particles, random numbers, etc). + + +# Dependency + +### Environment +- **gcc** >= 7 (Linux) and **gcc** >= 9 (MacOS) +In practice, a recent version is recommended, at least `gcc >=10`. +``` +gcc --version +``` + +- **CMake** >= 3.16...3.21 +``` +cmake3 --version +``` + +- **G4** >= 11.0.3 (Not tested on older G4 releases: might still work, but with no guarantee). +IMPORTANT: YOU NEED TO SOURCE YOUR G4 ENVIRONMENT. +It needs to be sourced in whichever terminal you want to build / run a G4 application with the `FLUKA` interface. +``` +source path_to_geant4/install/bin/geant4.sh +which geant4-config # NB: Your geant4-config should support the modern CMake way of building G4. +``` + +- **Easy setup on lxplus** (lxplus7): +All you need to do on lxplus, to setup an environment satisfying all the conditions above, is, for example: +``` +source /cvmfs/sft.cern.ch/lcg/releases/gcc/10.1.0/x86_64-centos7/setup.sh +source /cvmfs/geant4.cern.ch/geant4/11.1/x86_64-centos7-gcc10-optdeb-MT/CMake-setup.sh +# NB: Your geant4.sh is at: /cvmfs/geant4.cern.ch/geant4/11.1/x86_64-centos7-gcc10-optdeb-MT/bin/geant4.sh +``` + +### `FLUKA4` +Release: >= **4-3.2** + +Please install the latest `FLUKA` release. +(1) You first need to register (and accept the licence when relevant): https://fluka.cern/download/registration +(2) You can then download the `binary libraries` (or potentially the `source code` package, depending on your case): +https://fluka.cern/download/latest-fluka-release. +(3) Follow the `FLUKA` installation instructions: https://fluka.cern/documentation/installation +In particular, for a Linux/MacOS install: https://fluka.cern/documentation/installation/fluka-linux-macos +They will show you how to setup `FLUKA`. +If (and only if) you went for the source code package option, you will need to build `fluka`, and, in addition, to do `make cpp_headers` at `path_to_fluka/src`. +(4) Eventually, all you need are the headers `fluka_repo/include`, libraries `fluka_repo/lib`, and data `fluka_repo/data`. Check that they are not empty. +Do not forget to add `/path_to_fluka/bin` to your `PATH`. Check with `which fluka`. + +### `FlukaInterface` +A version of the G4-FLUKA interface (`FLUKA` hadron-nucleus inelastic physics) +is located at `geant4/examples/extended/hadronic/FlukaCern/FlukaInterface`. +You will first need to build the interface to `FLUKA`, and create the environment scripts. +```bash +$ cd geant4/examples/extended/hadronic/FlukaCern/FlukaInterface/ +# Check with `which fluka` that fluka executable is added to your `PATH`. +$ source path_to_geant4/install/bin/geant4.sh +$ make interface +$ make env # Creates `env_FLUKA.sh` and `env_FLUKA_G4_interface.sh` +``` +IMPORTANT: `env_FLUKA_G4_interface.sh` needs to be sourced in whichever terminal +you want to compile / run a G4 application with the `FLUKA` interface. + + +# Use as a FLUKA physics list (in ANY G4 application) +Reminder: this is a generic guide to be able to use the `FLUKA` interface from *any* G4 application. +If you are trying to build / run the G4 examples included in `FlukaCern` with `FLUKA`, you can directly follow the `README.md` files included in those examples. +Notably, the file in `cmake/Modules` is already included in those examples (the rest of the procedure is the same). + +```bash +$ cd G4_application +``` + +- Edit your G4 application's `CMakeLists.txt`: +You need to add the `FLUKA` module dependency. You need to add the following (for example, after the `project` line): +```bash +#---------------------------------------------------------------------------- +# FindFLUKAInterface.cmake is located at your_path_to_geant4/cmake/Modules/FindFLUKAInterface.cmake +# Check that FindFLUKAInterface.cmake can be found from $CMAKE_MODULE_PATH +message(STATUS "CMAKE_MODULE_PATH = ${CMAKE_MODULE_PATH}") +# Otherwise, you can always prepend it to the cmake module search path with: +# set(CMAKE_MODULE_PATH my_path_to_find_fluka ${CMAKE_MODULE_PATH}) + +#---------------------------------------------------------------------------- +# Check whether FLUKA should be used or not +set(G4_USE_FLUKA OFF CACHE BOOL "Using FLUKA") +if(G4_USE_FLUKA) + message(STATUS "G4_USE_FLUKA=ON : Using FLUKA interface for building ${PROJECT_SOURCE_DIR}") + add_definitions(-DG4_USE_FLUKA) + find_package(FLUKAInterface REQUIRED) + if(FLUKAInterface_FOUND) + message(STATUS "FLUKA cmake module was found : ${CMAKE_MODULE_PATH}") + else() + message(FATAL_ERROR "FLUKA cmake module was NOT found! Please add one.") + endif() +else() + message(STATUS "G4_USE_FLUKA=OFF : NOT using FLUKA interface for building ${PROJECT_SOURCE_DIR}. \n \ + If ever you want to use the FLUKA interface, please repeat cmake command with -DG4_USE_FLUKA=1") +endif() +``` +Additionally, add: +`${FLUKAInterface_INCLUDE_DIR}` to the `include_directories` line. +`${FLUKAInterface_LIBRARIES}` to the `target_link_libraries` line. + +- You can now compile and run your G4 application: +```bash +# Check with `which fluka` that fluka executable is added to your `PATH`. +$ source path_to_geant4/install/bin/geant4.sh +$ source path_to_FlukaInterface/env_FLUKA_G4_interface.sh # Carefully follow the setup instructions if anything fails. +$ cd build +$ cmake3 -DGeant4_DIR=your_path_to_geant4 -DG4_USE_FLUKA=1 ../ +$ make -j8 +$ ./G4_executable +``` + diff --git a/source/digits_hits/digits/src/G4VDigi.cc b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/flush.cc similarity index 86% rename from source/digits_hits/digits/src/G4VDigi.cc rename to examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/flush.cc index fc1f5316936..83c610af29a 100644 --- a/source/digits_hits/digits/src/G4VDigi.cc +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/flush.cc @@ -22,23 +22,22 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// +#ifdef G4_USE_FLUKA -// G4VDigi -#include "G4VDigi.hh" -#include "globals.hh" +#include "flush.h" + + +extern "C" { + extern void flushf_(); +} -G4VDigi::G4VDigi() { ; } +namespace cpp_to_fortran { -G4VDigi::~G4VDigi() { ; } + void flush() { + flushf_(); + } -G4bool G4VDigi::operator==(const G4VDigi& right) const -{ - return (this == &right); } -void G4VDigi::Draw() { ; } -void G4VDigi::Print() { ; } +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/flush.h b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/flush.h new file mode 100644 index 00000000000..ef65b63702d --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/flush.h @@ -0,0 +1,47 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This allows to flush the I/O buffers: +// the fortran and C++ buffers are distinct, +// leading to meaningless printout ordering (race condition) +// if this function is not used. +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef FLUSH_H +#define FLUSH_H + + +namespace cpp_to_fortran { + + void flush(); + +} + + +#endif +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/string_conversion.cc b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/string_conversion.cc new file mode 100644 index 00000000000..fbd50020265 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/string_conversion.cc @@ -0,0 +1,55 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +#ifdef G4_USE_FLUKA + + +#include "string_conversion.h" + + +namespace cpp_to_fortran { + + std::vector convertStringNoSizeNeeded(const std::string& cString) { + std::vector fString(cString.c_str(), cString.c_str() + cString.size()); + return fString; + } + +} + + +namespace fortran_to_cpp { + + std::string convertString(const char* fString, const int fStringLength) { + + std::string cString(fStringLength, ' '); + for (int charIndex = 0; charIndex < fStringLength - 1; ++charIndex) { + cString[charIndex] = *(fString + charIndex); + } + return cString; + } + +} + + +#endif // G4_USE_FLUKA diff --git a/source/visualization/Vtk/include/G4VtkQtViewer.hh b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/string_conversion.h similarity index 74% rename from source/visualization/Vtk/include/G4VtkQtViewer.hh rename to examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/string_conversion.h index ba2bfb85dd6..da07ddceafb 100644 --- a/source/visualization/Vtk/include/G4VtkQtViewer.hh +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/string_conversion.h @@ -22,31 +22,36 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** +// +// Few string manipulation utilities for fortran <-> C++ conversion. +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef STRING_CONVERSION_H +#define STRING_CONVERSION_H + + +#include +#include + -#ifndef G4VTKQTVIEWER_HH -#define G4VTKQTVIEWER_HH +// C++ -> Fortran +namespace cpp_to_fortran { -// #define G4VTKDEBUG // Comment this out to suppress debug code. + std::vector convertStringNoSizeNeeded(const std::string& cString); -#include "G4VViewer.hh" +} -class G4UIManager; -class G4UIQt; -#include "QVTKOpenGLNativeWidget.h" -#include "G4VtkViewer.hh" +// Fortran -> C++ +namespace fortran_to_cpp { -class G4VtkQtViewer: public QVTKOpenGLNativeWidget, public G4VtkViewer { -public: - G4VtkQtViewer(G4VSceneHandler &, const G4String &name); - virtual ~G4VtkQtViewer(); - void Initialise(); - virtual void CreateMainWindow(QVTKOpenGLNativeWidget*, const QString&); - void FinishView(); + std::string convertString(const char* fString, const int fStringLength); - private: +} - G4UIQt* fUiQt; -}; #endif +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/types.h b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/types.h new file mode 100644 index 00000000000..bb02620986f --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/cpp/types.h @@ -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. * +// ******************************************************************** +// +// Declare custom type for fortran <-> C/C++ conversion. +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef TYPES_H +#define TYPES_H + + +#ifdef __cplusplus +extern "C" { +#else +// At least C99 +#include +#endif + +// *************************************************************************** +// BOOLEAN +// *************************************************************************** +// Fortran LOGICAL typically takes 4 bytes by default, +// while C99+ / C++ bolean typically takes 1 byte. +// +// Hence, one could directly convert any Fortran LOGICAL to an int32_t, +// but for obvious readability and maintanability reasons +// (keep track of booleans), +// we declare here our custom 'logical' type. +// +// Important NB: Careful! The fact that a FORTRAN LOGICAL takes 4 bytes by default, +// is obviously NOT guaranteed by any FORTRAN standard though! +// A more portable approach would be to use ISO_C_BINDING +// (but requires changes in FLUKA Fortran sources). + +typedef int32_t logical; +// typedef instead of using, to be compatible with C. + +#ifdef __cplusplus +} +#endif + + +#endif +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/fortran/closef.f b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/fortran/closef.f new file mode 100644 index 00000000000..7b09dde4bb6 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/fortran/closef.f @@ -0,0 +1,7 @@ + subroutine closef (ifile) + + close ( unit = ifile ) + + return +*=== end of subroutine closef =========================================* + end diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/fortran/flushf.f b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/fortran/flushf.f new file mode 100644 index 00000000000..d99ecc7d705 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_fortran_bridges/fortran/flushf.f @@ -0,0 +1,7 @@ + subroutine flushf() + + call flush() + + return + end + diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_utils/string_print.cc b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_utils/string_print.cc new file mode 100644 index 00000000000..49eaf446bd2 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_utils/string_print.cc @@ -0,0 +1,65 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +#ifdef G4_USE_FLUKA + + +#include "string_print.h" + +#include +#include +#include +#include + + +namespace cpp_utils { + + // *************************************************************************** + // String format like printf() for strings. + // *************************************************************************** + std::string sformat(const char* fmt, ...) { + std::unique_ptr formatted; + int n = (int)strlen(fmt) * 2; // Reserve two times as much as the length of the fmt_str + while (true) { + // Wrap the plain char array into the unique_ptr + formatted.reset(new char[n]); + strcpy(&formatted[0], fmt); + va_list ap; + va_start(ap, fmt); + int final_n = vsnprintf(&formatted[0], n, fmt, ap); + va_end(ap); + if (final_n < 0 || final_n >= n) { + n += std::abs(final_n - n + 1); + } + else { + break; + } + } + return std::string(formatted.get()); + } + +} // namespace cpp_utils + + +#endif // G4_USE_FLUKA diff --git a/source/tracking/src/G4VTrajectoryPoint.cc b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_utils/string_print.h similarity index 75% rename from source/tracking/src/G4VTrajectoryPoint.cc rename to examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_utils/string_print.h index ea517b3e81c..5025bfd8a9c 100644 --- a/source/tracking/src/G4VTrajectoryPoint.cc +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/cpp_utils/string_print.h @@ -23,25 +23,28 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// G4VTrajectoryPoint class implementation +// Gathers few utilities. // -// Contact: -// Questions and comments to this code should be sent to -// Katsuya Amako (e-mail: Katsuya.Amako@kek.jp) -// Takashi Sasaki (e-mail: Takashi.Sasaki@kek.jp) -// -------------------------------------------------------------------- +// Author: V. Vlachoudis, 31 March 2010 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef STRING_PRINT_H +#define STRING_PRINT_H -#include "G4VTrajectoryPoint.hh" -G4VTrajectoryPoint::G4VTrajectoryPoint() -{ -} +#include -G4VTrajectoryPoint::~G4VTrajectoryPoint() -{ -} -G4bool G4VTrajectoryPoint::operator==(const G4VTrajectoryPoint& right) const -{ - return (this==&right); +namespace cpp_utils { + + // *************************************************************************** + // String format like printf() for strings. + // *************************************************************************** + std::string sformat(const char* fmt, ...); + } + + +#endif +#endif // G4_USE_FLUKA diff --git a/source/run/src/G4PhysicsListOrderingParamater.cc b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/cpp/procedures/flabrt.cc similarity index 74% rename from source/run/src/G4PhysicsListOrderingParamater.cc rename to examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/cpp/procedures/flabrt.cc index faf00f3e002..2d0271a1e86 100644 --- a/source/run/src/G4PhysicsListOrderingParamater.cc +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/cpp/procedures/flabrt.cc @@ -23,21 +23,32 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// G4PhysicsListOrderingParameter implementation +// Kills the FLUKA run. // -// Author: H.Kurashige, 29 April 2011 -// -------------------------------------------------------------------- +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA + +#include "flabrt.h" -#include "G4PhysicsListOrderingParameter.hh" -// -------------------------------------------------------------------- -G4PhysicsListOrderingParameter::G4PhysicsListOrderingParameter() -{ - for(std::size_t i = 0; i < 3; ++i) - ordering[i] = -1; +extern "C" { + // OWN HELPER FUNCTION + extern void flabrw_(const char* cOut, const int& lenOut, const char* cMes, const int& lenMes); } -// -------------------------------------------------------------------- -G4PhysicsListOrderingParameter::~G4PhysicsListOrderingParameter() -{ + +namespace fluka_cpp_wrapper { + + void flabrt(const std::string& CHROUT, const std::string& CHMESS) { + const int lenOut = CHROUT.size(); + const int lenMes = CHMESS.size(); + + flabrw_(CHROUT.c_str(), lenOut, CHMESS.c_str(), lenMes); + } + } + + +#endif // G4_USE_FLUKA diff --git a/source/particles/management/src/G4VUserPrimaryVertexInformation.cc b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/cpp/procedures/flabrt.h similarity index 82% rename from source/particles/management/src/G4VUserPrimaryVertexInformation.cc rename to examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/cpp/procedures/flabrt.h index 57dc9c5486c..f7f334580c3 100644 --- a/source/particles/management/src/G4VUserPrimaryVertexInformation.cc +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/cpp/procedures/flabrt.h @@ -23,17 +23,25 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// G4VUserPrimaryVertexInformation class implementation +// Kills the FLUKA run. // -// Author: M.Asai (SLAC) -// -------------------------------------------------------------------- +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef FLABRT_H +#define FLABRT_H -#include "G4VUserPrimaryVertexInformation.hh" -G4VUserPrimaryVertexInformation::G4VUserPrimaryVertexInformation() -{ -} +#include + + +namespace fluka_cpp_wrapper { + + void flabrt(const std::string& CHROUT, const std::string& CHMESS); -G4VUserPrimaryVertexInformation::~G4VUserPrimaryVertexInformation() -{ } + + +#endif +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/cpp/procedures/oauxf.cc b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/cpp/procedures/oauxf.cc new file mode 100644 index 00000000000..befd432945e --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/cpp/procedures/oauxf.cc @@ -0,0 +1,55 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Open FLUKA's auxiliary file. +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA + +#include "oauxf.h" + + +extern "C" { + // OWN HELPER FUNCTION + extern void oauxfw_(const char* cFile, const int& lenFil, const int& IONUMB, const char* cForm, const int& lenFor, int& IERR); +} + + +namespace fluka_cpp_wrapper { + + void oauxf(const std::string& FILE, const int& IONUMB, + const std::string& CHSTTS, int& IERR) { + const int lenFil = FILE.size(); + const int lenFor = CHSTTS.size(); + + oauxfw_( FILE.c_str(), lenFil, IONUMB, CHSTTS.c_str(), lenFor, IERR); + } + +} + + +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/cpp/procedures/oauxf.h b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/cpp/procedures/oauxf.h new file mode 100644 index 00000000000..1ff10121e59 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/cpp/procedures/oauxf.h @@ -0,0 +1,48 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Open FLUKA's auxiliary file. +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef OAUXF_H +#define OAUXF_H + + +#include + + +namespace fluka_cpp_wrapper { + + void oauxf(const std::string& FILE, const int& IONUMB, + const std::string& CHSTTS, int& IERR); + +} + + +#endif +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/fortran/procedures/flabrw.f b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/fortran/procedures/flabrw.f new file mode 100644 index 00000000000..c8b9b1813d6 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/fortran/procedures/flabrw.f @@ -0,0 +1,19 @@ + subroutine flabrw(cOut, lenOut, cMes, lenMes) + + character(*), intent(in) :: cOut + integer, intent(in) :: lenOut + character(lenOut) :: CHROUT + + character(*), intent(in) :: cMes + integer, intent(in) :: lenMes + character(lenMes) :: CHRMESS + + CHROUT = cOut + CHRMESS = cMes + + + call flabrt(CHROUT, CHMESS) + + return + end subroutine flabrw + diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/fortran/procedures/oauxfw.f b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/fortran/procedures/oauxfw.f new file mode 100644 index 00000000000..045af53e29b --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka4_wrapper/fortran/procedures/oauxfw.f @@ -0,0 +1,18 @@ + subroutine oauxfw(cFile, lenFil, IONUMB, cForm, lenFor, IERR) + + character(*), intent(in) :: cFile + integer, intent(in) :: lenFil + character(lenFil) :: FILE + + character(*), intent(in) :: cForm + integer, intent(in) :: lenFor + character(lenFor) :: CHSTTS + + FILE = cFile + CHSTTS = cForm + + + call oauxfi(FILE, IONUMB, CHSTTS, IERR) + + return + end subroutine oauxfw diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/cmcyl.hh b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/cmcyl.hh new file mode 100644 index 00000000000..7f3bd522679 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/cmcyl.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. * +// ******************************************************************** +// +// Gathers FLUKA run cycle info (just here for consistency). +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef CMCYL_HH +#define CMCYL_HH + + +#ifdef __cplusplus +extern "C" { +#endif + extern struct { + G4int npcycl[6][IDMAXP]; + G4int ievt; + G4int lout; + } cmcycl_; +#ifdef __cplusplus +} +#endif + + +#endif +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/fluka_common_dependencies.hh b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/fluka_common_dependencies.hh new file mode 100644 index 00000000000..d37720c9bd1 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/fluka_common_dependencies.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. * +// ******************************************************************** +// +// Gathers all dependencies to FLUKA INCLUDE FILES, +// as needed by the G4 <-> FLUKA interface. +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef FLUKA_COMMON_DEPENDENCIES_HH +#define FLUKA_COMMON_DEPENDENCIES_HH + + +#include "dblprc.h" +#include "dimpar.h" +#include "iounit.h" +#include "beamcm.h" +#include "blnkcm.h" +#include "caslim.h" +#include "cmelds.h" +#include "cmphnu.h" +#include "ctitle.h" +#include "currpt.h" +#include "evaflg.h" +#include "evapix.h" +#include "fheavy.h" +#include "flkmat.h" +#include "genflg.h" +#include "genstk.h" +#include "genthr.h" +#include "isotop.h" +#include "ncsfta.h" +#include "ndnicm.h" +#include "nucdat.h" +#include "nucflg.h" +#include "nucgeo.h" +#include "nucpot.h" +#include "nuinfo.h" +#include "paprop.h" +#include "parevt.h" +#include "part2.h" +#include "phnccm.h" +#include "resnuc.h" +#include "sgtbcm.h" +#include "sumcou.h" +#include "thrscm.h" +#include "usryld.h" + + +#endif +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/fluka_dependencies.hh b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/fluka_dependencies.hh new file mode 100644 index 00000000000..f25e91ea7db --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/fluka_dependencies.hh @@ -0,0 +1,95 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Gathers all dependencies to FLUKA, +// as needed by the G4 <-> FLUKA interface. +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef FLUKA_DEPENDENCIES_HH +#define FLUKA_DEPENDENCIES_HH + + +// WRAPPERS TO FLUKA INCLUDES +#include "fluka_common_dependencies.hh" + +// C++ WRAPPERS TO FLUKA PROCEDURES +#include "oauxf.h" +#include "flabrt.h" + +// FLUKA PROCEDURES +extern "C" { + extern void cmsppr_(); + extern void zeroin_(); + + extern void phycrd_(G4double* what, const char* sdum); + + extern void dcdion_(G4int& ionid); + extern void setion_(G4int& ionid); + + extern G4double exmsaz_(G4double& aa, G4double& z, const logical& lncmss, G4int& izz0); + extern G4double amnama_(G4double& amn, const G4int& ia, const G4int& iz); + extern G4double enknow_(G4double& a, G4double& z, G4int& izz0); + + extern G4double xeldis_(G4int& kproj, G4double& pproj, G4int& mmat, G4double& sgmdis); + + extern void evvini_(G4double* what, const char* sdum); + + extern void wstoap_(G4int& niso, G4int* iaiso, G4int* iziso, G4int* iiiso, + logical& lrmsch, logical& lrdhlp, logical& ltrasp, + const G4int& lout); + + extern void ncdcyi_(G4int& ij, G4int& ijij, G4int& imat); + extern void ncdcyr_(); + + extern void rnread_(G4int& inseed, G4int& ijklin, logical& lseedi); + extern void rnwrit_(const G4int& ioseed); + + extern void phncvr_(G4int& kprj, G4int& mmat, G4double& ekin, G4double& pla, G4double& dedxph); + extern void cksigi_(const G4int& mmat); + extern void siginm_(G4int& it, G4int& mmat, G4double& ekin, G4double& poo, G4double& sine, G4double& ainl); + extern void pphcho_(G4double& ekin, G4int& mmat, G4double& pphnsg, const G4double& lpphch); + + extern void phnvev_(G4int& kproj, G4double& pla, G4double& ekin, + G4double& txx, G4double& tyy, G4double& tzz, + const G4double& txxpol, const G4double& tyypol, const G4double& tzzpol, + G4double& wee, + G4int& mmat, G4double& sigphn, const G4double& biaine); + + extern void eventv_(G4int& ijij, G4double& pooo, G4double& ekee, + G4double& txx, G4double& tyy, G4double& tzz, + G4double& we, + G4int& imat); + + extern void scrprx_(G4double& eke, G4double& porenu, G4double& am, G4int& iptflg, G4double& gamcms, + G4double& etacms, G4double& omcsmn, G4double& omcsmx, G4double& sgscor, const G4double& tzz, + const logical& lpzcms); +} + + +#endif +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/fluka_interface.cc b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/fluka_interface.cc new file mode 100644 index 00000000000..dba63de6a76 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/fluka_interface.cc @@ -0,0 +1,1110 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +#ifdef G4_USE_FLUKA + + +#include "fluka_interface.hh" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +// CPP UTILS +#include "string_print.h" + +// CPP TO FORTRAN UTILS +#include "types.h" +#include "string_conversion.h" +#include "flush.h" + +// FLUKA DEPENDENCIES +#include "fluka_dependencies.hh" +#include "FLUKAParticleTable.hh" +#include "cmcyl.hh" + +// G4 +#include "Randomize.hh" +#include "G4DynamicParticle.hh" +#include "G4ParticleDefinition.hh" +#include "G4HadProjectile.hh" +#include "G4Nucleus.hh" +#include "G4HadFinalState.hh" +#include "G4LorentzVector.hh" + +#include "G4IonTable.hh" +#include "G4SystemOfUnits.hh" + + +#define DEBUG false + + + +namespace fluka_interface { + + + static G4bool initializeMaterial = true; + static std::unordered_map encounteredMaterials; + + + // *************************************************************************** + // Call the necessary FLUKA initialization routines, + // initialize the necessary FLUKA COMMONs, + // set physics options as requested. + // *************************************************************************** + void initialize(bool activateCoalescence, + G4bool activateHeavyFragmentsEvaporation) { + G4cout << " !!!!!!!!!!!!! fluka_interface::initialize()" << G4endl; + + // CHECK THAT THE FLUKA-G4 INTERFACE ENV HAS BEEN SOURCED + if (std::getenv("FLUKA_PATH") == nullptr) { + G4Exception("fluka_interface", + "FLUKA-G4 interface environment", + FatalException, + "FLUKA-G4 interface environment was not sourced.\n" \ + "NB: Do not forget to first compile the FLUKA interface itself.\n" \ + "For example: cd geant4/examples/extended/hadronic/FlukaCern/FlukaInterface/ " \ + "&& make interface && make env\n" \ + "FlukaInterface/env_FLUKA_G4_interface.sh then needs to be sourced\n" \ + "in whichever terminal you want to use the FLUKA interface.\n"); + } + + // FLUKA ZEROING AND INITIALIZATION ROUTINES. + G4cout << "CALL CMSPPR" << G4endl; + cmsppr_(); + G4cout << "CALL ZEROIN" << G4endl; + zeroin_(); + + + // FLUKA COMMONS INITIALIZATION + // Note: obviously, only initlialize the ones needed later on! + parevt_.lheavy = true; + parevt_.lgdhpr = true; + + // hadronic interaction GENerator FLaGs + genflg_.levpgn = true; + // hadronic interaction GENerator THResholds + genthr_.peanct = AINFNT; + genthr_.peapit = AINFNT; + genthr_.peakat = AINFNT; + genthr_.peakbt = AINFNT; + genthr_.peahyt = AINFNT; + genthr_.peaaht = AINFNT; + genthr_.peaant = AINFNT; + cmcycl_.lout = 7; + + // NB: mmat is dummy here. + // All needed commons (including the material common) + // are set properly at mmax index on the fly at run time. + G4int mmat = 3; + // FLuKa MATerial properties and atomic data + flkmat_.icomp [mmat - 1] = 0; + flkmat_.rho [mmat - 1] = ONEONE; + + // PHotoNuClear interaction + phnccm_.rhphnc[mmat - 1] = ONEONE; + phnccm_.ifphnc[mmat - 1] = 1111; + + // BEAM properties CoMmon + G4double txx = ZERZER; + G4double tyy = ZERZER; + G4double tzz = ONEONE; + beamcm_.ubeam = txx; + beamcm_.vbeam = tyy; + beamcm_.wbeam = tzz; + + + // PHYSICS CARDS: + std::array what; + G4String sdum; + + // IMPORTANT + // ACTIVATE COALESCENCE AND HEAVY FRAGMENTS EVAPORATION HERE!! + // NB: THEY ARE NOT ACTIVATED BY DEFAULT IN G4!! + if (activateCoalescence) { + // ACTIVATE COALESCENCE + what[0] = 1.; + what[1] = 0.; + what[2] = 0.; + what[3] = 0.; + what[4] = 0.; + what[5] = 0.; + sdum = "COALESCE"; + G4cout << "CALL PHYCRD, sdum = " << sdum << G4endl; + phycrd_( what.data(), cpp_to_fortran::convertStringNoSizeNeeded(sdum).data() ); + } + + // IMPORTANT + // ACTIVATE HEAVY FRAGMENTS EVAPORATION + // NB: THEY ARE NOT ACTIVATED BY DEFAULT IN G4!! (right?) + if (activateHeavyFragmentsEvaporation) { + what[0] = 3.; + what[1] = 0.; + what[2] = 0.; + what[3] = 0.; + what[4] = 0.; + what[5] = 0.; + sdum = "EVAPORAT"; + G4cout << "CALL PHYCRD, sdum = " << sdum << G4endl; + phycrd_( what.data(), cpp_to_fortran::convertStringNoSizeNeeded(sdum).data() ); + } + + // IMPORTANT + // ACTIVATE CHARMED HADRONS TRANSPORT + // This prevents charmed hadron decays in FLUKA. + // Unfortunately, as a result, FLUKA also returns charmed Xi resonances, + // which do not exist in G4, hence prevents the full use of this option. + // + // Could circumvent this issue by activating only the charmed Xi resonances decays in FLUKA, + // (it is a resonance anyway!!), but this was a hack inside FLUKA code + // (not possible from an offical FLUKA release). + const G4bool activateCharmedHadronTransport = false; + if (activateCharmedHadronTransport) { + what[0] = 1.; + what[1] = 0.; + what[2] = 0.; + what[3] = 0.; + what[4] = 0.; + what[5] = 0.; + sdum = "CHARMDEC"; + G4cout << "CALL PHYCRD, sdum = " << sdum << G4endl; + phycrd_( what.data(), cpp_to_fortran::convertStringNoSizeNeeded(sdum).data() ); + } + + + // INITIALIZES THE FLUKA QUARK MODELS AND EVAPORATION MODULE + G4cout << "CALL EVVINI" << G4endl; + sdum = "DUMMY"; + evvini_(what.data(), cpp_to_fortran::convertStringNoSizeNeeded(sdum).data()); + + + // Needed because the printout buffers from C++ and fortran are distinct!! + // Hence synchronize them, in order to get a meaningful printout order. + cpp_to_fortran::flush(); + + + G4cout << " !!!!!!!!!!!!! END OF fluka_interface::initialize()" << G4endl; + } + + + // *************************************************************************** + // Returns FLUKA hadron nucleus inelastic XS. + // + // IMPORTANT note: if targetA is not passed as argument, it is set to 0 by default. + // In that case, FLUKA will loop on the element's natural isotopic composition, + // (composition defined in FLUKA data). + // *************************************************************************** + G4double computeInelasticScatteringXS(const G4DynamicParticle* projectile, + const G4int targetZ, + const G4int targetA) { + + const G4ParticleDefinition* const projectileDefinition = projectile->GetDefinition(); + + const G4bool projectileIsGenericHeavyIon = (projectileDefinition->IsGeneralIon() + && projectileDefinition->GetAtomicNumber() > 2); + const G4int projectileFLUKAId = (projectileIsGenericHeavyIon ? + -2 + : fluka_particle_table::geant2fluka(projectileDefinition)); + const G4double projectileKineticEnergy = projectile->GetKineticEnergy() / GeV; + + + // RENAME INTO FLUKA-WORLD VARIABLES + G4int kproj = projectileFLUKAId; + G4double ekproj = projectileKineticEnergy; + + // Transformations needed (extracted from FLUKA code) + updateFLUKAProjectileId(kproj); + transformNonSupportedHadrons(kproj, ekproj); + + auto [ekin, pproj] = getKineticEnergyAndMomentum(ekproj, kproj); + + G4int ibtar = targetA; + G4int ichtar = targetZ; + + + // PRINTOUT INTERACTION INFO +#if DEBUG + G4cout << " !!!!!!!!!!!!! Call computeInelasticScatteringXS:" + << " kproj = " << kproj + << ", ekproj [GeV] = " << ekproj + << ", pproj = " << pproj + << ", ibtar = " << ibtar + << ", ichtar = " << ichtar + << G4endl; +#endif + + + // SET MATERIAL PROPERTIES + G4int mmat = 3; + flkmat_.ztar[mmat - 1] = std::abs(ichtar); + + ichtar = std::fabs(ichtar); // 'hole' freezing + G4double atmss = 0.; + + // proton or neutron target: + if ( ibtar == 1 ) { + flkmat_.mssnum [mmat - 1] = ibtar; + atmss = static_cast (ibtar); + } + // single isotope: + else if ( ibtar > 0 ) { + flkmat_.mssnum [mmat - 1] = ibtar; + G4double bbtar = ibtar; +#if DEBUG + G4cout << "CALL exmsaz" << G4endl; +#endif + G4int izdumm; + logical lncmss = false; + resnuc_.ammtar = bbtar * AMUGEV + EMVGEV * exmsaz_ ( bbtar, flkmat_.ztar [mmat - 1], lncmss, izdumm ); + atmss = resnuc_.ammtar / AMUGEV; + } + // element: + else { + flkmat_.mssnum [mmat - 1] = 0; + atmss = ZERZER; + // Loop on the stable isotopes + for (G4int is = (isotop_.isondx[ichtar-1][0] - 1); is <= (isotop_.isondx[ichtar-1][1] - 1); ++is) { + G4double bbtar = isotop_.isomnm [is]; +#if DEBUG + G4cout << "CALL exmsaz" << G4endl; +#endif + G4int izdumm; + logical lncmss = false; + resnuc_.ammtar = bbtar * AMUGEV + EMVGEV * exmsaz_ ( bbtar, flkmat_.ztar [mmat - 1], lncmss, izdumm ); + atmss = atmss + resnuc_.ammtar / AMUGEV * isotop_.abuiso [is]; + } + } + + flkmat_.amss[mmat - 1] = atmss; + +#if DEBUG + G4cout << "flkmat_.amss [mmat - 1] = " << flkmat_.amss [mmat - 1] + << ", flkmat_.msindx [mmat - 1] = " << flkmat_.msindx [mmat - 1] + << G4endl; +#endif + + + // COMPUTES XS + G4double sigrea = 0.; + + // electron / positron + if ( kproj == 3 || kproj == 4 ) { + sigrea = ZERZER; + } + // photon + else if ( kproj == 7 ) { +#if DEBUG + G4cout << "CALL PPHCHO" << G4endl; +#endif + G4double pphnsg = ZERZER; + pphcho_(ekin, mmat, pphnsg, false); + sigrea = pphnsg / flkmat_.rho [mmat - 1] * flkmat_.amss [mmat - 1] / AVOGAD * 1.E+27; + } + // standard case + else { +#if DEBUG + G4cout << "CALL SIGINM" << G4endl; +#endif + + const G4double projectileKineticEnergyPerNucleon = projectileKineticEnergy * (paprop_.ibarch[kproj+6] <= 1 ? + 1. + : 1. / paprop_.ibarch[kproj+6]); + + // Assign sgtbcm_.lblsgi: + // recognize inelastic XS which should not be set to 0 when kE/n < EKSIG0. + cksigi_(mmat); + + // VERY IMPORTANT: In FLUKA, all inelastic XS (except the cases below), + // are set to 0 when kE/n < EKSIG0. + // See SIGTAB->SGTINL (initialization) and the runtime calls to SGTTOT (from KASKAD). + if (projectileKineticEnergyPerNucleon < EKSIG0 + && kproj != 12 && kproj != 19 && kproj != 24 && kproj != 25 // neutron kaons + && kproj != 9 // antineutron + && kproj != -3 // deuteron + && !sgtbcm_.lblsgi[sgtbcm_.ijsigi[kproj+6] - 1][mmat - 1] + ) { + sigrea = 0.; + } + else { + G4double zldum = ZERZER; + siginm_(kproj, mmat, ekin, pproj, sigrea, zldum); + } + } + +#if DEBUG + G4cout << " Adopted reaction sigma :" + << cpp_utils::sformat("%#9.4f", sigrea) + << "[mb]." + << G4endl; +#endif + + + // FLUKA returned XS in mb + return sigrea * millibarn; + } + + + // *************************************************************************** + // Computes the FLUKA hadron nucleus inelastic interaction final state, + // and set its to the G4HadFinalState object passed as argument. + // *************************************************************************** + void setNuclearInelasticFinalState(G4HadFinalState* const finalState, + const G4HadProjectile& projectile, + const G4Nucleus& targetNucleus) { + + const G4ParticleDefinition* const projectileDefinition = projectile.GetDefinition(); + + const G4bool projectileIsGenericHeavyIon = (projectileDefinition->IsGeneralIon() + && projectileDefinition->GetAtomicNumber() > 2); + const G4int projectileFLUKAId = (projectileIsGenericHeavyIon ? + -2 + : fluka_particle_table::geant2fluka(projectileDefinition)); + const G4int projectileA = (projectileIsGenericHeavyIon ? + projectileDefinition->GetAtomicMass() + : 0); + const G4int projectileZ = (projectileIsGenericHeavyIon ? + projectileDefinition->GetAtomicNumber() + : 0); + const G4double projectileKineticEnergy = projectile.GetKineticEnergy() / GeV; + const G4int targetA = targetNucleus.GetA_asInt(); + const G4int targetZ = targetNucleus.GetZ_asInt(); + + const auto& projectileDirection = projectile.GetMomentumDirection(); + G4double txx = projectileDirection.x(); + G4double tyy = projectileDirection.y(); + G4double tzz = projectileDirection.z(); + + + // RENAME INTO FLUKA-WORLD VARIABLES + G4int kproj = projectileFLUKAId; + G4double ekproj = projectileKineticEnergy; + + const G4int iaproj = projectileA; + const G4int izproj = projectileZ; + G4int ibtar = targetA; + G4int ichtar = targetZ; + + + // PRINTOUT INTERACTION INFO +#if DEBUG + G4cout << std::setprecision(16) << " !!!!!!!!!!!!! Call setNuclearInelasticFinalState:" + << " kproj = " << kproj + << ", ekproj [GeV] = " << ekproj + //<< ", pproj = " << pproj + << ", ibtar = " << ibtar + << ", ichtar = " << ichtar + << G4endl; +#endif + + + // Some initialization magic directly taken from FLUKA + if (kproj == -1 || kproj == -8 || + kproj == -9 || kproj == -13 || kproj == -14 || + kproj == -23 || kproj == -15 || kproj == -16 || + kproj == -24 || kproj == -25 || kproj == -11 || + kproj == -7 ) { + if ( -kproj != 7 ) { + parevt_.lpreex = false; + parevt_.lhlfix = false; + } + } + else if ( kproj >= 94 && kproj < 49999 ) { + if ( (kproj - 100) != 7 ) { + parevt_.lpreex = false; + parevt_.lhlfix = false; + } + } + updateFLUKAProjectileId(kproj); + + + // ION CASE + if ( kproj == -2 ) { +#if DEBUG + G4cout << "iaproj = " << iaproj << ", izproj = " << izproj << G4endl; +#endif + beamcm_.ijhion = izproj * 1000 + iaproj; + } + + + // BEAM PROPERTIES COMMON + beamcm_.ijbeam = kproj; + + parevt_.lparwv = false; + + G4double ekmax = 10000.; + beamcm_.pbeam = -ekmax; + + + // ION CASE + if ( kproj == -2 ) { + beamcm_.ijhion = izproj * 1000 + iaproj; + beamcm_.ijhion = beamcm_.ijhion * 100 + KXHEAV; + G4int ionid = beamcm_.ijhion; +#if DEBUG + G4cout << "CALL DCDION" << G4endl; +#endif + dcdion_(ionid); +#if DEBUG + G4cout << "CALL SETION" << G4endl; +#endif + setion_(ionid); + beamcm_.ijbeam = ionid; + thrscm_.lhvtrn = true; + parevt_.lheavy = true; + thrscm_.khvtrn = 6; + } + + + // CHECK WHETHER THE MATERIAL WAS ALREADY ENCOUNTERED + // - If (targetZ, targetA) has never been encountered: + // associate it to a mmat, and initialize the relevant materials COMMONS at mmat index. + // - If (targetZ, targetA) has already been encountered: + // just return the associated mmat index. + // Values from the materials COMMONS are read with mmat index. + // - IMPORTANT NB: In ANY case, before EACH event, LIKE IS DONE IN FLUKA eventv, + // mssnum and icriso(2) are always set properly + G4int mmat = -1; + const G4int targetLinearizedIndex = targetZ * 100000 + targetA; + const auto& foundMaterial = encounteredMaterials.find(targetLinearizedIndex); + if (foundMaterial == encounteredMaterials.end()) { + initializeMaterial = true; + mmat = 4 + encounteredMaterials.size(); + encounteredMaterials.insert(std::make_pair(targetLinearizedIndex, mmat)); + } + else { + initializeMaterial = false; + mmat = foundMaterial->second; + } +#if DEBUG + G4cout << "targetZ = " << targetZ << G4endl; + G4cout << "targetA = " << targetA << G4endl; + G4cout << "initializeMaterial = " << initializeMaterial << G4endl; + G4cout << "mmat = " << mmat << G4endl; +#endif + + + // INITIALIZE MATERIAL IF NEEDED. + if (initializeMaterial) { + // This was also placed in initialization (but for dummy mmat = 3) + // FLuKa MATerial properties and atomic data + flkmat_.icomp [mmat - 1] = 0; + flkmat_.rho [mmat - 1] = ONEONE; + // PHotoNuClear interaction + phnccm_.rhphnc[mmat - 1] = ONEONE; + phnccm_.ifphnc[mmat - 1] = 1111; + + + flkmat_.ztar[mmat - 1] = std::abs(ichtar); + + // No hole freezing: + if (ichtar > 0) { + parevt_.lhlfix = false; + } + // "Hole" freezing: + else { + parevt_.lhlfix = true; + ichtar = -ichtar; + } + + + // SET MATERIAL PROPERTIES + std::vector iaiso; + std::vector iziso; + std::vector iiiso; + + logical lrmsch = false; + logical lrd1o2 = true; + logical ltrasp = true; + + G4double atmss = 0.; + // Proton or neutron target: + if ( ibtar == 1 ) { + flkmat_.mssnum [mmat - 1] = ibtar; + + atmss = static_cast (ibtar); + + G4double bbres = ibtar; + G4double zzres = ichtar; +#if DEBUG + G4cout << "CALL exmsaz" << G4endl; +#endif + G4int izdum; + logical lncmss = true; + resnuc_.amnres = bbres * AMUC12 + EMVGEV * exmsaz_( bbres, zzres, lncmss, izdum ); +#if DEBUG + G4cout << "CALL amnama" << G4endl; +#endif + resnuc_.ammres = amnama_ ( resnuc_.amnres, ibtar, ichtar ); + G4int niso = 0; + +#if DEBUG + G4cout << "PROTON / NEUTRON CALL WSTOAP" << G4endl; +#endif + wstoap_(niso, iaiso.data(), iziso.data(), iiiso.data(), + lrmsch, lrd1o2, ltrasp, + 0); // 8 +#if DEBUG + cpp_to_fortran::flush(); +#endif + } + // Single isotope: + else if ( ibtar > 0 ) { + logical setIsotope = false; + + flkmat_.mssnum [mmat - 1] = ibtar; + G4double bbtar = ibtar; +#if DEBUG + G4cout << "CALL exmsaz" << G4endl; +#endif + G4int izdumm; + logical lncmss = false; + resnuc_.ammtar = bbtar * AMUGEV + EMVGEV * exmsaz_ ( bbtar, flkmat_.ztar [mmat - 1], lncmss, izdumm ); + + atmss = resnuc_.ammtar / AMUGEV; + + nucgid_.rhotab [ibtar - 2] = ZERZER; + G4int niso = 1; + iaiso.emplace_back(ibtar); + iziso.emplace_back(ichtar); + iiiso.resize(1); + + // Loop on the stable isotopes + for (G4int is = (isotop_.isondx[ichtar-1][0] - 1); is <= (isotop_.isondx[ichtar-1][1] - 1); ++is) { + if ( isotop_.isomnm [is] == ibtar ) { + iiiso [0] = is + 1; + setIsotope = true; + break; + } + } + if (!setIsotope) { + // Loop on the "quasi" stable isotopes + for (G4int iq = (isotop_.isqndx[ichtar-1][0] - 1); iq <= (isotop_.isqndx[ichtar-1][1] - 1); ++iq) { + if ( isotop_.isqmnm [iq] == ibtar ) { + iiiso [0] = NSTBIS + iq + 1; + setIsotope = true; + break; + } + } + } + if (!setIsotope) { + iiiso [0] = NTSTIS + 1; + } + + const G4int isindx = iiiso [0]; + flkmat_.msindx [mmat - 1] = isindx; + + // Initialize nuclear geometry data + // WARNING: This call is extremely time-consuming + // (hence the need to call it only the first time the material is encountered). + if (nucgid_.rhotab [ibtar - 2] < 0.1 ) { +#if DEBUG + G4cout << "ISOTOPE CALL WSTOAP" << G4endl; +#endif + wstoap_(niso, iaiso.data(), iziso.data(), iiiso.data(), + lrmsch, lrd1o2, ltrasp, + 0); + } + } + // Element: + else { + flkmat_.mssnum [mmat - 1] = 0; + + atmss = ZERZER; + + G4int niso = 0; + G4int iwstop = 0; + // Loop on the stable isotopes + for (G4int is = (isotop_.isondx[ichtar-1][0] - 1); is <= (isotop_.isondx[ichtar-1][1] - 1); ++is) { + G4double bbtar = isotop_.isomnm [is]; +#if DEBUG + G4cout << "CALL exmsaz" << G4endl; +#endif + G4int izdumm; + logical lncmss = false; + resnuc_.ammtar = bbtar * AMUGEV + EMVGEV * exmsaz_ ( bbtar, flkmat_.ztar [mmat - 1], lncmss, izdumm ); + + atmss = atmss + resnuc_.ammtar / AMUGEV * isotop_.abuiso [is]; + + if ( isotop_.isomnm [is] > 1 ) { + nucgid_.rhotab [isotop_.isomnm[is] - 2] = ZERZER; + niso = niso + 1; + iaiso.emplace_back(isotop_.isomnm[is]); + iziso.emplace_back(ichtar); + iiiso.emplace_back(is + 1); + if ( nucgid_.rhotab [isotop_.isomnm[is] - 2] < 0.1 ) { iwstop = iwstop + 1; } + } + } + // Initialize nuclear geometry data + if ( iwstop > 0 ) { +#if DEBUG + G4cout << "ELEMENT CALL WSTOAP" << G4endl; +#endif + wstoap_( niso, iaiso.data(), iziso.data(), iiiso.data(), + lrmsch, lrd1o2, ltrasp, 0); // 8 +#if DEBUG + cpp_to_fortran::flush(); +#endif + } + + } + + + flkmat_.amss[mmat - 1] = atmss; + } // end of MATERIAL INITIALIZE + + + // NUCLEON DECAY INITIALIZATION + G4int kkproj = kproj; + if ( kkproj >= 312500000 ) { +#if DEBUG + G4cout << "CALL NCDCYI" << G4endl; +#endif + ncdcyi_(kproj, kkproj, mmat); +#if DEBUG + G4cout << G4endl; + G4cout << " " << chpprp_.prname [ndnicm_.ndnitr + 6] << " decay into:" << G4endl; + G4cout << G4endl; + for (G4int is = 1; is <= ndnicm_.ncdcsc; ++is) { + G4cout << " " << chpprp_.prname[ndnicm_.kncdcs[is] + 6] << G4endl; + } + G4cout << G4endl; + G4cout << "CALL NCDCYR" << G4endl; +#endif + ncdcyr_(); + } + else if ( kkproj >= 49999 ) { + const G4double ahelp = kkproj; + const G4int iahelp = std::round( ahelp * 1.E-04 ) * 10000; + kproj = iahelp / 10000; + } + else { + ndnicm_.ndnitr = 0; + ndnicm_.ncdcsc = 0; + } + + + // STATUS SUMMARY +#if DEBUG + if (parevt_.lpreex) { + G4cout << " Most energetic intranuclear interactions treated explicitly" << G4endl; + } + else { + G4cout << " No explicit treatment of intranuclear interactions" << G4endl; + } + + if (parevt_.lhlfix) { + G4cout << G4endl; + G4cout << " Explicitly treated holes frozen " << G4endl; + } + if (parevt_.lparwv) { + G4cout << G4endl; + G4cout << " De Broglie w.l. applied " << G4endl; + } + if (incpot_.lrhfl1 [currpt_.iptcur - 1]) { + G4cout << G4endl; + G4cout << " Target nucleon center distribution unfolded and used" << G4endl; + } + if (incpot_.lrhfl2 [currpt_.iptcur - 1]) { + G4cout << G4endl; + G4cout << " Projectile RMS radius folded with the density distribution" << G4endl; + } + if (incpot_.lrhfl3 [currpt_.iptcur - 1]) { + G4cout << G4endl; + G4cout << " Effective range for pion-nuc. G4int. folded in the pion pot." << G4endl; + } +#endif + + + // ELD + if (paprop_.ichrge [kproj + 6] == 0) { cmelds_.leldss = false; } + + + // BEAM AND GEOEMTRY EXTRA SETS + auto [ekin, pproj] = getKineticEnergyAndMomentum(ekproj, kproj); +#if DEBUG + G4cout << "pproj = " << pproj << G4endl; +#endif + beamcm_.pbeam = pproj; + // SUMmary COUnters + sumcou_.weipri = ZERZER; + caslim_.ncase = 0; + // NUClear Geometry Input data + nucge3_.ievpre = 0; + +#if DEBUG + G4cout << G4endl; + const G4String particleName = fortran_to_cpp::convertString(chpprp_.prname[kproj + 6], 8); + + G4cout << " Projectile: " << particleName + << " E =" << cpp_utils::sformat("%#9.4f", ekin) << " GeV" + << G4endl; +#endif + + + G4double wee = ONEONE; + G4int iev = 1; + + cmcycl_.ievt = iev; + parevt_.levfin = false; + + +#if DEBUG + cpp_to_fortran::flush(); +#endif + /////////////////////////////////////////////////////////////////////////////////// + // IMPORTANT + // FLUKA HADRONIC EVENT GENERATOR!! + eventv_(kkproj, pproj, ekin, + txx, tyy, tzz, + wee, + mmat); + /////////////////////////////////////////////////////////////////////////////////// +#if DEBUG + cpp_to_fortran::flush(); +#endif + + if (resnuc_.lfkevt) { + nucge2_.opacty = AINFNT; + } + + + /////////////////////////////////////////////////////////////////////////////////// + // IMPORTANT: + // LOOP ON ALL SECONDARIES, THE HEAVY FRAGMENTS AND THE RESNUC + // AND ADD THEM TO FINAL STATE + /////////////////////////////////////////////////////////////////////////////////// + + + // SECONDARIES +#if DEBUG + G4cout << "Number of secondaries = " << genstk_.np << G4endl; +#endif + for (G4int secondaryIndex = 0; secondaryIndex < genstk_.np; ++secondaryIndex) { + + const G4int flukaId = genstk_.kpart[secondaryIndex]; + + // Map FLUKA Id to G4 id. + const G4ParticleDefinition* const definition = fluka_particle_table::fluka2geant(flukaId); + if (!definition) { + G4cout << "ERROR! FLUKA to G4 particle id conversion." + << " Could not find FLUKA id = " << flukaId + << G4endl; + } + + //const G4double momentum = genstk_.plr[secondaryIndex] * GeV; // GeV/c in FLUKA + const G4double momentumX = genstk_.cxr[secondaryIndex]; + const G4double momentumY = genstk_.cyr[secondaryIndex]; + const G4double momentumZ = genstk_.czr[secondaryIndex]; + const G4double kineticEnergy = genstk_.tki[secondaryIndex] * GeV; // GeV in FLUKA + +#if DEBUG + G4cout << "FLUKA id = " << flukaId << G4endl; + G4cout << "kineticEnergy [MeV] = " << kineticEnergy + //<< ", momentum = " << momentum + << ", momentumX = " << momentumX + << ", momentumY = " << momentumY + << ", momentumZ = " << momentumZ + << G4endl; +#endif + + const G4ThreeVector momentumDirection = G4ThreeVector(momentumX, + momentumY, + momentumZ); + + G4DynamicParticle* const secondaryParticle = new G4DynamicParticle(definition, + momentumDirection, + kineticEnergy); + finalState->AddSecondary(secondaryParticle); + } + + + // HEAVY FRAGMENTS +#if DEBUG + G4cout << G4endl; + G4cout << "Number of heavy fragments = " << fheavy_.npheav << G4endl; +#endif + for (G4int fragmentIndex = 0; fragmentIndex < fheavy_.npheav; ++fragmentIndex) { + + const G4int flukaId = -fheavy_.kheavy[fragmentIndex]; + + // Map FLUKA Id to G4 id. + const G4ParticleDefinition* definition = nullptr; + if (flukaId >= -6 && flukaId <= -3) { + definition = fluka_particle_table::fluka2geant(flukaId); +#if DEBUG + G4cout << "fluka_particle_table::fluka2geant(flukaId) = " << fluka_particle_table::fluka2geant(flukaId) << G4endl; +#endif + } + else { + const G4int A = fheavy_.ibheav[-flukaId - 1]; + const G4int Z = fheavy_.icheav[-flukaId - 1]; + definition = G4IonTable::GetIonTable()->GetIon(Z, A); + } + if (!definition) { + G4cout << "ERROR! FLUKA to G4 particle id conversion." + << " Could not find FLUKA id = " << flukaId + << G4endl; + } + + //const G4double momentum = fheavy_.pheavy[fragmentIndex] * GeV; // GeV/c in FLUKA + const G4double momentumX = fheavy_.cxheav[fragmentIndex]; + const G4double momentumY = fheavy_.cyheav[fragmentIndex]; + const G4double momentumZ = fheavy_.czheav[fragmentIndex]; + const G4double kineticEnergy = fheavy_.tkheav[fragmentIndex] * GeV; // GeV in FLUKA + +#if DEBUG + G4cout << "FLUKA id = " << flukaId << G4endl; + G4cout << "kineticEnergy [MeV] = " << kineticEnergy + //<< ", momentum = " << momentum + << ", momentumX = " << momentumX + << ", momentumY = " << momentumY + << ", momentumZ = " << momentumZ + << G4endl; +#endif + + const G4ThreeVector momentumDirection = G4ThreeVector(momentumX, + momentumY, + momentumZ); + + G4DynamicParticle* const heavyFragment = new G4DynamicParticle(definition, + momentumDirection, + kineticEnergy); + + finalState->AddSecondary(heavyFragment); + } + + + // RESNUC + const G4int residualNucleusA = resnuc_.ibres; + const G4int residualNucleusZ = resnuc_.icres; + + if (residualNucleusA > 0 && residualNucleusZ != 0) { + + // Map FLUKA Id to G4 id. + const G4ParticleDefinition* const definition = G4IonTable::GetIonTable()->GetIon(residualNucleusZ, + residualNucleusA); + if (!definition) { + G4cout << "ERROR! FLUKA to G4 particle id conversion." + << " Could not find residual nucleus A = " << residualNucleusA + << ", Z = " << residualNucleusZ + << G4endl; + } + + const G4double momentum = resnuc_.ptres * GeV; // GeV/c in FLUKA + const G4double momentumX = resnuc_.pxres * GeV; // GeV/c in FLUKA + const G4double momentumY = resnuc_.pyres * GeV; // GeV/c in FLUKA + const G4double momentumZ = resnuc_.pzres * GeV; // GeV/c in FLUKA + const G4double kineticEnergy = resnuc_.ekres * GeV; // GeV in FLUKA + +#if DEBUG + G4cout << G4endl; + G4cout << "Residual nucleus A = " << residualNucleusA + << ", Z = " << residualNucleusZ + << ", kineticEnergy [MeV] = " << resnuc_.ekres + << ", momentum [MeV] = " << resnuc_.ptres + << G4endl; +#endif + + const G4ThreeVector momentumDirection = G4ThreeVector(momentumX / momentum, + momentumY / momentum, + momentumZ / momentum); + + G4DynamicParticle* const residualNucleus = new G4DynamicParticle(definition, + momentumDirection, + kineticEnergy); + + finalState->AddSecondary(residualNucleus); + } + +#if DEBUG + G4cout << G4endl; +#endif + + + // IMPORTANT: + // NOW RESET PARTS OF THE COMMONS (as done in FLUKA) + genstk_.np = 0; + genstk_.np0 = 0; + fheavy_.npheav = 0; + genstk_.tv = 0.; + genstk_.tvcms = 0.; + genstk_.tvrecl = 0.; + genstk_.tvheav = 0.; + genstk_.tvbind = 0.; + resnuc_.ibres = 0; + resnuc_.icres = 0; + } + + + // *************************************************************************** + // Awful shenanigan from FLUKA to play with particleId, + // kept exactly as-is. + // *************************************************************************** + void updateFLUKAProjectileId(G4int& kproj) { + if (kproj == -1 || kproj == -8 + || kproj == -9 || kproj == -13 || kproj == -14 + || kproj == -23 || kproj == -15 || kproj == -16 + || kproj == -24 || kproj == -25 || kproj == -11 + || kproj == -7 + ) { + kproj = - kproj; + } + else if ( kproj >= 94 && kproj < 49999 ) { + kproj = kproj - 100; + } + } + + + // *************************************************************************** + // A few particles are converted BEFORE the hadronic interaction, + // to sth FLUKA hadronic event generator can digest. + // *************************************************************************** + void transformNonSupportedHadrons(G4int& kproj, G4double& ekproj) { + + // K0S or K0L -> K0 or K0bar + if (kproj == 12 || kproj == 19) { + if (G4UniformRand() > 0.5) { kproj = 24; } + else { kproj = 25; } + // NB: No need to modify kinetic energy / momentum here, + // since the mass is unchanged. + } + // Special FLUKA K0 should be a K0 + else if (kproj == 26) { + kproj = 23; + } + else if (kproj == 17 + || kproj == 18 + || kproj == 20 + || kproj == 21 + || kproj == 22 + || kproj == 30 + || kproj == 31 + || kproj == 32 + || kproj == 33 + || kproj == 34 + || kproj == 35 + || kproj == 36 + || kproj == 37 + || kproj == 38 + || kproj == 39) { + // Boolean used to signal that we are changing particle id. + // LCHTYP = true; + + // Initial atomic mass (before updating the particle id). + const G4double amIni = paprop_.am [kproj + 6]; + + // change particle: see eventv + + // lambda -> neutron + if (kproj == 17) { + kproj = 8; + } + // antilambda -> antineutron + else if (kproj == 18) { + kproj = 9; + } + // sigma- -> neutron + else if (kproj == 20) { + kproj = 8; + } + // sigma+ -> proton + else if (kproj == 21) { + kproj = 1; + } + // sigma0 -> neutron + else if (kproj == 22) { + kproj = 8; + } + // virtual vector meson -> pi0 + else if (kproj == 30) { + kproj = 23; + } + // antisigma- -> antiproton + else if (kproj == 31) { + kproj = 2; + } + // antiSigma0 -> antineutron + else if (kproj == 32) { + kproj = 9; + } + // antiSigma+ -> antineutron + else if (kproj == 33) { + kproj = 9; + } + // xsi0 -> neutron + else if (kproj == 34) { + kproj = 8; + } + // antixsi0 -> antineutron + else if (kproj == 35) { + kproj = 9; + } + // xsi- -> proton + else if (kproj == 36) { + kproj = 1; + } + // antiXsi+ -> antiproton + else if (kproj == 37) { + kproj = 2; + } + // omega- -> proton + else if (kproj == 38) { + kproj = 1; + } + // antiomega+ -> antiproton + else if (kproj == 39) { + kproj = 2; + } + + // IMPORTANT + // Update kinetic energy. + ekproj += amIni - paprop_.am [kproj + 6]; + + // NB: Momentum is computed later on, with getKineticEnergyAndMomentum + } + } + + + // *************************************************************************** + // Kinetic energy and momentum utility from FLUKA. + // *************************************************************************** + std::pair getKineticEnergyAndMomentum(const G4double ekproj, const G4int kproj) { + const G4double ekin = ekproj * (kproj != -2 + ? 1. + : paprop_.am [-2 + 6] / AMUC12); + const G4double pproj = std::sqrt(ekin * ( ekin + TWOTWO * paprop_.am [kproj + 6])); + return {ekin, pproj}; + } + +} // namespace fluka_interface + + +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/fluka_interface.hh b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/fluka_interface.hh new file mode 100644 index 00000000000..28b6e21c82e --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/interface_to_G4/fluka_interface.hh @@ -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. * +// ******************************************************************** +// +// Interface to FLUKA hadron inelastic physics. +// +// XS and final states are accessed independently, +// to match the G4 needs +// (G4VCrossSectionDataSet for XS + G4HadronicInteraction for FS). +// +// FLUKA inelastic hadron-nucleus interactions: +// Hadron-NUCLEON interaction models are based on resonance production and decay below a few GeV, +// and on the Dual Parton model above. +// Hadron-NUCLEUS interactions: the PEANUT package includes +// a detailed Generalised Intra-Nuclear Cascade (GINC) and a preequilibrium stage, +// followed by equilibrium processes: evaporation, fission, Fermi break-up, gamma deexcitation. +// A. Ferrari and P. Sala, “The Physics of High Energy Reactions,” in Proc. Workshop on Nuclear Reaction Data and Nuclear Reactors Physics, Design and Safety, p. 424, World Scientific, 1998. +// A. Ferrari and P. Sala, “Nuclear reactions in Monte Carlo codes,” Radiat. Prot. Dosimetry, vol. 99, no. 1-4, pp. 29–38, 2002. +// +// +// NB 1: The user can choose, directly in G4 client code, to: +// - activate coalescence. +// - activate heavy fragments evaporation. +// One can simply pass the relevant booleans +// as parameters to fluka_interface::initialize(...). +// +// NB 2: This interface also provides support for photonuclear reactions, +// though use in this context has been less extensively debugged. +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef FLUKA_INTERFACE_HH +#define FLUKA_INTERFACE_HH + + +#include +// G4 +#include "globals.hh" + + +class G4DynamicParticle; +class G4HadProjectile; +class G4Nucleus; +class G4HadFinalState; + + +namespace fluka_interface { + + void initialize(bool activateCoalescence = false, + G4bool activateHeavyFragmentsEvaporation = false); + G4double computeInelasticScatteringXS(const G4DynamicParticle* projectile, + const G4int targetZ, + const G4int targetA = 0); + void setNuclearInelasticFinalState(G4HadFinalState* const finalState, + const G4HadProjectile& projectile, + const G4Nucleus& targetNucleus); + + // HELPERS + void updateFLUKAProjectileId(G4int& kproj); + void transformNonSupportedHadrons(G4int& kproj, G4double& ekproj); + std::pair getKineticEnergyAndMomentum(const G4double ekproj, const G4int kproj); +} + + +#endif +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/test/interface_to_G4/test_interface.cc b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/test/interface_to_G4/test_interface.cc new file mode 100644 index 00000000000..46d65011d73 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka5/hadronic_interactions/test/interface_to_G4/test_interface.cc @@ -0,0 +1,146 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Standalone test of the G4 <-> FLUKA interface. +// One can simply set the hadronic interaction of interest, +// and gets in return the XS and final state. +// +// Note that this is just a test and NOT A PROPER G4 APPLICATION +// (no UI, no G4 event loop, NO CALL TO run/initialize etc). +// +// It relies on the fact that the physics processes are created +// at physics list construction time anyway, +// and that the physics initialization happens +// with runManager->SetUserInitialization(physicsList). +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA + + +// G4 +#include "globals.hh" +#include "G4ThreeVector.hh" +#include "G4SystemOfUnits.hh" +#include "G4Nucleus.hh" +#include "G4HadFinalState.hh" +#include "G4DynamicParticle.hh" +//#include "G4ParticleDefinition.hh" +#include "G4HadProjectile.hh" +// G4 +//#include "G4PionMinus.hh" +#include "G4Proton.hh" +// G4 +#include "G4RunManagerFactory.hh" +#include "G4RunManager.hh" +#include "G4VModularPhysicsList.hh" + +#include "fluka_interface.hh" +#include "FLUKAParticleTable.hh" +#include "G4_HP_CernFLUKAHadronInelastic_PhysicsList.hh" + + +G4int main() { + + G4cout << "Starting test_interface" << G4endl; + + // Construct a serial RUN MANAGER. + std::unique_ptr runManager(G4RunManagerFactory::CreateRunManager(G4RunManagerType::SerialOnly)); + + // Create physics list with hadron inelastic processes from FLUKA. + G4VModularPhysicsList* physicsList = new G4_HP_CernFLUKAHadronInelastic_PhysicsList(); + runManager->SetUserInitialization(physicsList); + fluka_particle_table::initialize(); + //const auto& ionTable = G4ParticleTable::GetParticleTable()->GetIonTable(); + + + // TUNE HERE: PARTICLE + //const auto particleKind = G4PionMinus::PionMinus(); + const auto particleKind = G4Proton::Proton(); + + // TUNE HERE: KINETIC ENERGY + const G4int numEvents = 1; + const G4double minKineticEnergy = 1. * CLHEP::GeV; + const G4double maxKineticEnergy = 1. * CLHEP::GeV; + + const G4double deltaKineticEnergy = (numEvents == 1 ? 0. + : (maxKineticEnergy - minKineticEnergy) / (numEvents - 1)); + G4double kineticEnergy = minKineticEnergy; + + // TUNE HERE: DIRECTION + const G4ThreeVector momentumDirection = G4ThreeVector(0., 0., 1.); + + // TUNE HERE: TARGET MATERIAL + const G4int targetA = 28; + const G4int targetZ = 14; + const G4Nucleus targetNucleus = G4Nucleus(targetA, targetZ); + + G4HadFinalState finalState = G4HadFinalState(); + + // PRINTOUT REQUESTED INTERACTION(S) + G4cout << "particle = " << particleKind->GetParticleName() << G4endl; + G4cout << "numEvents = " << numEvents << G4endl; + G4cout << "minKineticEnergy = " << minKineticEnergy << G4endl; + G4cout << "maxKineticEnergy = " << maxKineticEnergy << G4endl; + G4cout << "deltaKineticEnergy = " << deltaKineticEnergy << G4endl; + G4cout << "momentumDirection = " << momentumDirection << G4endl; + G4cout << "targetA = " << targetA << G4endl; + G4cout << "targetZ = " << targetZ << G4endl; + + + // Event loop + for (G4int eventIndex = 0; eventIndex < numEvents; ++eventIndex) { + + G4cout << "Start event index = " << eventIndex << G4endl; + + const G4DynamicParticle dynamicParticle = G4DynamicParticle(particleKind, + momentumDirection, + kineticEnergy); + + // XS + const G4double inelasticXS = fluka_interface::computeInelasticScatteringXS(&dynamicParticle, + targetZ, + targetA); + + G4cout << "fluka_interface::computeInelasticScatteringXS, inelasticXS = " << inelasticXS/barn << " [barn]." << G4endl; + + // FS + finalState.Clear(); + finalState.SetStatusChange(stopAndKill); + const G4HadProjectile projectile = G4HadProjectile(dynamicParticle); + + fluka_interface::setNuclearInelasticFinalState(&finalState, + projectile, + targetNucleus); + + // Update kinetic energy for the next event + kineticEnergy += deltaKineticEnergy; + } + +} + + +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/FLUKAParticleTable.cc b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/FLUKAParticleTable.cc new file mode 100644 index 00000000000..2acc4e4b204 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/FLUKAParticleTable.cc @@ -0,0 +1,367 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +#ifdef G4_USE_FLUKA + + +#include "FLUKAParticleTable.hh" + +// G4 +#include "G4ParticleTable.hh" + + +namespace fluka_particle_table { + + static G4bool fIsInitialized = false; + + // FLUKA + static std::map fFlukaIdtoFlukaName = { + { -6, "4-HELIUM" }, + { -5, "3-HELIUM" }, + { -4, "TRITON" }, + { -3, "DEUTERON" }, + { -2, "HEAVYION" }, + { -1, "OPTIPHOT" }, + { 0, "RAY" }, + { 1, "PROTON" }, + { 2, "APROTON" }, + { 3, "ELECTRON" }, + { 4, "POSITRON" }, + { 5, "NEUTRIE" }, + { 6, "ANEUTRIE" }, + { 7, "PHOTON" }, + { 8, "NEUTRON" }, + { 9, "ANEUTRON" }, + { 10, "MUON+" }, + { 11, "MUON-" }, + { 12, "KAONLONG" }, + { 13, "PION+" }, + { 14, "PION-" }, + { 15, "KAON+" }, + { 16, "KAON-" }, + { 17, "LAMBDA" }, + { 18, "ALAMBDA" }, + { 19, "KAONSHRT" }, + { 20, "SIGMA-" }, + { 21, "SIGMA+" }, + { 22, "SIGMAZER" }, + { 23, "PIZERO" }, + { 24, "KAONZERO" }, + { 25, "AKAONZER" }, + { 27, "NEUTRIM" }, + { 28, "ANEUTRIM" }, + { 31, "ASIGMA-" }, + { 32, "ASIGMAZE" }, + { 33, "ASIGMA+" }, + { 34, "XSIZERO" }, + { 35, "AXSIZERO" }, + { 36, "XSI-" }, + { 37, "AXSI+" }, + { 38, "OMEGA-" }, + { 39, "AOMEGA+" }, + { 40, "WWLOWNEU" }, + { 41, "TAU+" }, + { 42, "TAU-" }, + { 43, "NEUTRIT" }, + { 44, "ANEUTRIT" }, + { 45, "D+" }, + { 46, "D-" }, + { 47, "D0" }, + { 48, "D0BAR" }, + { 49, "DS+" }, + { 50, "DS-" }, + { 51, "LAMBDAC+" }, + { 52, "XSIC+" }, + { 53, "XSIC0" }, + { 54, "XSIPC+" }, + { 55, "XSIPC0" }, + { 56, "OMEGAC0" }, + { 57, "ALAMBDC-" }, + { 58, "AXSIC-" }, + { 59, "AXSIC0" }, + { 60, "AXSIPC-" }, + { 61, "AXSIPC0" }, + { 62, "AOMEGAC0" }, + { 64, "@LASTPAR" }, + { 99, "ISOTOPE" }, + {201, "ALL-PART" }, + {202, "ALL-CHAR" }, + {203, "ALL-NEUT" }, + {204, "ALL-NEGA" }, + {205, "ALL-POSI" }, + {206, "NUCLEONS" }, + {207, "NUC&PI+-" }, + {208, "ENERGY" }, + {209, "PIONS+-" }, + {210, "BEAMPART" }, + {211, "EM-ENRGY" }, + {212, "MUONS" }, + {213, "E+&E-" }, + {214, "AP&AN" }, + {215, "KAONS" }, + {216, "STRANGE" }, + {217, "KAONS+-" }, + {218, "HAD-CHAR" }, + {219, "FISSIONS" }, + {220, "HE-FISS" }, + {221, "LE-FISS" }, + {222, "NEU-BALA" }, + {223, "HAD-NEUT" }, + {224, "KAONS0" }, + {225, "C-MESONS" }, + {226, "C-(A)BAR" }, + {227, "CHARMED" }, + {228, "DOSE" }, + {229, "UNB-ENER" }, + {230, "UNB-EMEN" }, + {231, "X-MOMENT" }, + {232, "Y-MOMENT" }, + {233, "Z-MOMENT" }, + {234, "ACTIVITY" }, + {235, "ACTOMASS" }, + {236, "SI1MEVNE" }, + {237, "HADGT20M" }, + {238, "NIEL-DEP" }, + {239, "DPA-SCO" }, + {240, "DOSE-EQ" }, + {241, "DOSE-EM" }, + {242, "NET-CHRG" }, + {243, "DOSEQLET" }, + {244, "RES-NIEL" }, + {245, "DPA-NRES" }, + {246, "LOWENNEU" }, + {247, "NTLOWENE" }, + {248, "ALL-IONS" }, + {249, "HEHAD-EQ" }, + {250, "THNEU-EQ" }, + {251, "RES-NUCL" }, + {252, "DOSE-H2O" }, + {253, "ALPHA-D" }, + {254, "SQBETA-D" }, + {255, "LGH-IONS" }, + {256, "HVY-IONS" }, + {257, "E+E-GAMM" }, + {258, "ANNIHRST" } + }; + + static std::map fFlukaIdToPdgId = { + { 1 , 2212 }, + { 2 , -2212 }, + { 3 , 11 }, + { 4 , -11 }, + { 5 , 12 }, + { 6 , -12 }, + { 7 , 22 }, + { 8 , 2112 }, + { 9 , -2112 }, + { 10 , -13 }, + { 11 , 13 }, + { 12 , 130 }, + { 13 , 211 }, + { 14 , -211 }, + { 15 , 321 }, + { 16 , -321 }, + { 17 , 3122 }, + { 18 , -3122 }, + { 19 , 310 }, + { 20 , 3112 }, + { 21 , 3222 }, + { 22 , 3212 }, + { 23 , 111 }, + { 24 , 311 }, + { 25 , -311 }, + { 27 , 14 }, + { 28 , -14 }, + { 31 , -3222 }, + { 32 , -3212 }, + { 33 , -3112 }, + { 34 , 3322 }, + { 35 , -3322 }, + { 36 , 3312 }, + { 37 , -3312 }, + { 38 , 3334 }, + { 39 , -3334 }, + { 41 , -15 }, + { 42 , 15 }, + { 43 , 16 }, + { 44 , -16 }, + { 45 , 411 }, + { 46 , -411 }, + { 47 , 421 }, + { 48 , -421 }, + { 49 , 431 }, + { 50 , -431 }, + { 51 , 4122 }, + { 52 , 4232 }, + { 53 , 4132 }, + { 54 , 4322 }, + { 55 , 4312 }, + { 56 , 4332 }, + { 57 , -4122 }, + { 58 , -4232 }, + { 59 , -4132 }, + { 60 , -4322 }, + { 61 , -4312 }, + { 62 , -4332 } + }; + + // FLUKA -> G4 + static std::unordered_map fFlukaIdToG4Particle; + static std::map fFlukaNameToG4Particle; + static std::map fFlukaNameToG4Name = { + {"4-HELIUM", "alpha" }, + {"3-HELIUM", "He3" }, + {"TRITON" , "triton" }, + {"DEUTERON", "deuteron" }, + {"HEAVYION", "ion" }, + {"OPTIPHOT", "opticalphoton" }, + {"RAY" , "geantino" }, + {"PROTON" , "proton" }, + {"APROTON" , "anti_proton" }, + {"ELECTRON", "e-" }, + {"POSITRON", "e+" }, + {"NEUTRIE" , "nu_e" }, + {"ANEUTRIE", "anti_nu_e" }, + {"PHOTON" , "gamma" }, + {"NEUTRON" , "neutron" }, + {"ANEUTRON", "anti_neutron" }, + {"MUON+" , "mu+" }, + {"MUON-" , "mu-" }, + {"KAONLONG", "kaon0L" }, + {"PION+" , "pi+" }, + {"PION-" , "pi-" }, + {"KAON+" , "kaon+" }, + {"KAON-" , "kaon-" }, + {"LAMBDA" , "lambda" }, + {"ALAMBDA" , "anti_lambda" }, + {"KAONSHRT", "kaon0S" }, + {"SIGMA-" , "sigma-" }, + {"SIGMA+" , "sigma+" }, + {"SIGMAZER", "sigma0" }, + {"PIZERO" , "pi0" }, + {"KAONZERO", "kaon0" }, + {"AKAONZER", "anti_kaon0" }, + {"NEUTRIM" , "nu_mu" }, + {"ANEUTRIM", "anti_nu_mu" }, + {"ASIGMA-" , "anti_sigma-" }, + {"ASIGMAZE", "anti_sigma0" }, + {"ASIGMA+" , "anti_sigma+" }, + {"XSIZERO" , "xi0" }, + {"AXSIZERO", "anti_xi0" }, + {"XSI-" , "xi-" }, + {"AXSI+" , "anti_xi-" }, + {"OMEGA-" , "omega-" }, + {"AOMEGA+" , "anti_omega-" }, + {"TAU+" , "tau+" }, + {"TAU-" , "tau-" }, + {"NEUTRIT" , "nu_tau" }, + {"ANEUTRIT", "anti_nu_tau" }, + {"D+" , "D+" }, + {"D-" , "D-" }, + {"D0" , "D0" }, + {"D0BAR" , "anti_D0" }, + {"DS+" , "Ds+" }, + {"DS-" , "Ds-" }, + {"LAMBDAC+", "lambda_c+" }, + {"XSIC+" , "xi_c+" }, + {"XSIC0" , "xi_c0" }, + {"OMEGAC0" , "omega_c0" }, + {"ALAMBDC-", "anti_lambda_c-"}, + {"AXSIC-" , "anti_xi_c-" }, + {"AXSIC0" , "anti_xi_c0" }, + {"AOMEGAC0", "anti_omega_c0" } + }; + + // G4 -> FLUKA + static std::unordered_map fG4ParticleToFlukaId; + static std::unordered_map fG4ParticleToFlukaName; + + // *************************************************************************** + // Initialize all conversion tables. + // Note that the starting data is the one from FLUKA. + // *************************************************************************** + void initialize() { + if (fIsInitialized) return; + fIsInitialized = true; + + G4cout << "" << G4endl; + G4cout << "fluka_particle_table::initialize()" << G4endl; + + const auto particleTable = G4ParticleTable::GetParticleTable(); + + // Loop on all particles + for (const auto& particleIt : fFlukaIdtoFlukaName) { + + const G4int flukaId = particleIt.first; + const G4String& flukaName = particleIt.second; + + const G4String& geantName = fFlukaNameToG4Name[flukaName]; + auto particle = particleTable->FindParticle(geantName); + + // If particle was not found in G4 table (via its name), + // try to find it via the PDG id + if (!particle) { + const auto& found = fFlukaIdToPdgId.find(flukaId); + if (found != fFlukaIdToPdgId.end()) { + const G4int pdgId = found->second; + particle = particleTable->FindParticle(pdgId); + } + } + + if (particle) { + fFlukaIdToG4Particle.insert(std::make_pair(flukaId, particle)); + fFlukaNameToG4Particle[flukaName] = particle; + fG4ParticleToFlukaId.insert(std::make_pair(particle, flukaId)); + fG4ParticleToFlukaName.insert(std::make_pair(particle, flukaName)); + //G4cout << "Fluka2Geant: " << flukaId << ' ' << flukaName << ' ' << geantName + // << " particle " << particle->GetParticleName() << G4endl; + } + else { + G4cout << "" << G4endl; + G4cout << "INFO: fluka_particle_table::initialize():" << G4endl; + G4cout << "FLUKA particle, or category, named = " << flukaName + << " is not found as a particle in G4ParticleTable." + << G4endl; + G4cout << "Should not be needed. If ever needed, an exception will be thrown at run time." << G4endl; + } + } + } + + + const G4String& fluka2name(const G4int id) { return fFlukaIdtoFlukaName[id]; } + + // FLUKA -> G4 + const G4ParticleDefinition* fluka2geant(const G4int ij) { return fFlukaIdToG4Particle[ij]; } + const G4String& fluka2geantName(const G4String& name) { return fFlukaNameToG4Name[name]; } + const G4ParticleDefinition* fluka2geant(const G4String& name) { return fFlukaNameToG4Particle[name]; } + + // G4 -> FLUKA + G4int geant2fluka(const G4ParticleDefinition* def) { return fG4ParticleToFlukaId[def]; } + const G4String& geant2flukaName(const G4ParticleDefinition* def) { return fG4ParticleToFlukaName[def]; } + + +} + + +#endif // G4_USE_FLUKA diff --git a/source/global/management/include/G4strstreambuf.hh b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/FLUKAParticleTable.hh similarity index 56% rename from source/global/management/include/G4strstreambuf.hh rename to examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/FLUKAParticleTable.hh index 2dc08588e54..7ead49102a7 100644 --- a/source/global/management/include/G4strstreambuf.hh +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/FLUKAParticleTable.hh @@ -23,66 +23,53 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// G4strstreambuf +// Convert particles FLUKA <-> G4 worlds. // -// Class description: +// NB 1: Conversion tables are created at initialization time, +// and only accessed at run time. // -// Buffer for cout/cerr streaming +// NB 2: At run time, if ever a particle returned from the FLUKA interface +// is not found in the G4 particle table, an exception is thrown. +// +// NB 3: There are FLUKA particles categories, +// which are in the FLUKA particles tables, and which do not make sense to convert here, +// since they should not be retuned from the FLUKA interface as final state secondaries anyway! +// +// Author: V.Vlachoudis, G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef FLUKA_PARTICLE_TABLE_HH +#define FLUKA_PARTICLE_TABLE_HH -// Authors: H.Yoshida, M.Nagamatu - November 1998 -// Revisions: G.Cosmo, 1998-2013 -// -------------------------------------------------------------------- -#ifndef G4STRSTREAMBUF_HH -#define G4STRSTREAMBUF_HH 1 -#include +#include +#include -#include "G4coutDestination.hh" +// G4 #include "globals.hh" -class G4strstreambuf; -#ifdef G4MULTITHREADED +class G4ParticleDefinition; -extern G4GLOB_DLL G4strstreambuf*& _G4coutbuf_p(); -extern G4GLOB_DLL G4strstreambuf*& _G4cerrbuf_p(); -# define G4coutbuf (*_G4coutbuf_p()) -# define G4cerrbuf (*_G4cerrbuf_p()) -#else // Sequential +namespace fluka_particle_table { -extern G4GLOB_DLL G4strstreambuf G4coutbuf; -extern G4GLOB_DLL G4strstreambuf G4cerrbuf; - -#endif - -class G4strstreambuf : public std::basic_streambuf -{ - public: - G4strstreambuf(); - ~G4strstreambuf() override; - - G4int overflow(G4int c = EOF) override; - G4int sync() override; - -#ifdef WIN32 - virtual G4int underflow(); -#endif + void initialize(); - void SetDestination(G4coutDestination* dest); - inline G4coutDestination* GetDestination() const; - inline G4int ReceiveString(); + // FLUKA + const G4String& fluka2name(const G4int id); - private: - char* buffer = nullptr; - G4int count = 0, size = 0; - G4coutDestination* destination = nullptr; + // FLUKA -> G4 + const G4ParticleDefinition* fluka2geant(const G4int ij); + const G4String& fluka2geantName(const G4String& name); + const G4ParticleDefinition* fluka2geant(const G4String& name); - // hidden... - G4strstreambuf(const G4strstreambuf&); - G4strstreambuf& operator=(const G4strstreambuf&); -}; + // G4 -> FLUKA + G4int geant2fluka(const G4ParticleDefinition* def); + const G4String& geant2flukaName(const G4ParticleDefinition* def); +} -#include "G4strstreambuf.icc" #endif +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrndm.cc b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrndm.cc new file mode 100644 index 00000000000..fe16a993667 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrndm.cc @@ -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. * +// ******************************************************************** +// +// IMPORTANT: This is a trick that allows to use +// G4 random engine even WITHIN the FLUKA INTERNAL functions. +// The idea is to provide a function with the same signature as the FLUKA one, +// but that relies on G4 random engine. +// +// The FLUKA flrndm object file is replaced +// by the object generated after compilation of this file +// (see FlukaInterface Makefile). +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA + + +#include "flrndm.hh" + +#include "Randomize.hh" + + +G4double flrndm_(const G4double&) { + + return G4UniformRand(); +} + + +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrndm.hh b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrndm.hh new file mode 100644 index 00000000000..9d63b82fd85 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrndm.hh @@ -0,0 +1,54 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// IMPORTANT: This is a trick that allows to use +// G4 random engine even WITHIN the FLUKA INTERNAL functions. +// The idea is to provide a function with the same signature as the FLUKA one, +// but that relies on G4 random engine. +// +// The FLUKA flrndm object file is replaced +// by the object generated after compilation of this file +// (see FlukaInterface Makefile). +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef FLRNDM_HH +#define FLRNDM_HH + + +#include "globals.hh" + + +extern "C" { + + G4double flrndm_(const G4double&); + +} + + +#endif +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrnlp.cc b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrnlp.cc new file mode 100644 index 00000000000..28a2ebbefdf --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrnlp.cc @@ -0,0 +1,54 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// IMPORTANT: This is a trick that allows to use +// G4 random engine even WITHIN the FLUKA INTERNAL functions. +// The idea is to provide a function with the same signature as the FLUKA one, +// but that relies on G4 random engine. +// +// The FLUKA flrnlp object file is replaced +// by the object generated after compilation of this file +// (see FlukaInterface Makefile). +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA + +#include "flrnlp.hh" +// G4 +#include "Randomize.hh" + + +void flrnlp_(G4double rndvec[], const G4int& nvect) { + + for (G4int randomNumberIndex = 0; randomNumberIndex < nvect; ++randomNumberIndex) { + rndvec[randomNumberIndex] = G4UniformRand(); + } + +} + + +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrnlp.hh b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrnlp.hh new file mode 100644 index 00000000000..347865a1d00 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrnlp.hh @@ -0,0 +1,54 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// IMPORTANT: This is a trick that allows to use +// G4 random engine even WITHIN the FLUKA INTERNAL functions. +// The idea is to provide a function with the same signature as the FLUKA one, +// but that relies on G4 random engine. +// +// The FLUKA flrnlp object file is replaced +// by the object generated after compilation of this file +// (see FlukaInterface Makefile). +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef FLRNLP_HH +#define FLRNLP_HH + + +#include "globals.hh" + + +extern "C" { + + void flrnlp_(G4double rndvec[], const G4int& nvect); + +} + + +#endif +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrnoc.cc b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrnoc.cc new file mode 100644 index 00000000000..b4de106ef89 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrnoc.cc @@ -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. * +// ******************************************************************** +// +#ifdef G4_USE_FLUKA + + +#include "flrnoc.hh" + +#include "Randomize.hh" +#include "G4Exception.hh" + + +void flrnoc_(const G4int& /*dummySeed1*/, const G4int& /*dummySeed2*/, + G4int& randomCallMod1BCounter, const G4int& /*dummyRandomCallBillionCounter*/) { + + randomCallMod1BCounter = 1; + + G4Exception("flrnoc_", + "Calls to flrnoc are not supported.\n" \ + "Would require access to G4 random engine internal status (number of generated numbers).\n" \ + "This would be overkill, because:\n" \ + "(1) Display of random engine internal status should be done through FL64WR anyway (calling G4Random).\n" \ + "(2) External use of random engine internal status is bad practice. To trace back where a call is from, could just use booleans passed as arguments.\n", + FatalException, + "Unsupported function call."); + +} + + +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrnoc.hh b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrnoc.hh new file mode 100644 index 00000000000..0268fa23f19 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_bridges/flrnoc.hh @@ -0,0 +1,48 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// FLUKA flrnoc should never be called. +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef FLRNOC_HH +#define FLRNOC_HH + + +#include "globals.hh" + + +extern "C" { + + void flrnoc_(const G4int& /*dummySeed1*/, const G4int& /*dummySeed2*/, + G4int& randomCallMod1BCounter, const G4int& /*dummyRandomCallBillionCounter*/); + +} + + +#endif +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKAHadronInelasticPhysicsConstructor.cc b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKAHadronInelasticPhysicsConstructor.cc new file mode 100644 index 00000000000..c19888a64bc --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKAHadronInelasticPhysicsConstructor.cc @@ -0,0 +1,271 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +#ifdef G4_USE_FLUKA + + +#include "FLUKAHadronInelasticPhysicsConstructor.hh" + +// G4 +#include "G4MesonConstructor.hh" +#include "G4BaryonConstructor.hh" +#include "G4ShortLivedConstructor.hh" +// G4 +#include "G4ParticleDefinition.hh" +#include "G4PhysicsListHelper.hh" +// G4 +#include "G4HadParticles.hh" +#include "G4HadronicParameters.hh" +// G4 +#include "G4NeutronCaptureProcess.hh" +#include "G4ParticleHPCaptureData.hh" +#include "G4ParticleHPCapture.hh" +#include "G4NeutronRadCapture.hh" +// G4 +#include "G4HadronInelasticProcess.hh" +#include "G4ParticleHPInelasticData.hh" +#include "G4ParticleHPInelastic.hh" +// G4 +#include "G4NeutronFissionProcess.hh" +#include "G4ParticleHPFissionData.hh" +#include "G4ParticleHPFission.hh" +#include "G4LFission.hh" + +#include "build_G4_process_helpers.hh" + +#include "FLUKAInelasticScatteringXS.hh" +#include "FLUKANuclearInelasticModel.hh" + + +// DEBUG: CHERRY PICK FTFP_BERT XS / MODELS INSTEAD +//#include "G4BGGNucleonInelasticXS.hh" +//#include "G4TheoFSGenerator.hh" +//#include "G4GeneratorPrecompoundInterface.hh" +//#include "G4FTFModel.hh" +//#include "G4ExcitedStringDecay.hh" +//#include "G4QuasiElasticChannel.hh" + + +// *************************************************************************** +// Construct hadron inelastic physics processes with FLUKA.CERN XS and models. +// *************************************************************************** +FLUKAHadronInelasticPhysicsConstructor::FLUKAHadronInelasticPhysicsConstructor(G4int verbose) +: G4VPhysicsConstructor("hInelastic FLUKA"), +// HP only: + fNeutronHPMaxE(20*CLHEP::MeV), +//fNeutronFLUKAMinE(19.9*CLHEP::MeV), + fNeutronFLUKAMinE(20*CLHEP::MeV) +{ + if (verbose > 1) { + G4cout << "### FLUKA Hadron Inelastic Physics" << G4endl; + } + + const auto param = G4HadronicParameters::Instance(); + param->SetEnableBCParticles(true); +} + + +// *************************************************************************** +// Construct particles. +// *************************************************************************** +void FLUKAHadronInelasticPhysicsConstructor::ConstructParticle() { + G4MesonConstructor pMesonConstructor; + pMesonConstructor.ConstructParticle(); + + G4BaryonConstructor pBaryonConstructor; + pBaryonConstructor.ConstructParticle(); + + G4ShortLivedConstructor pShortLivedConstructor; + pShortLivedConstructor.ConstructParticle(); +} + + +// *************************************************************************** +// For each particle of interest, +// processes are created, assigned XS and models, and registered to the process manager. +// +// IMPORTANT NB: The XS (G4VCrossSectionDataSet), models (G4HadronicInteraction), +// and even processes (G4HadronInelasticProcess) +// are constructed in a similar way as for any other G4 physics list in G4 source code. +// They do not seem to be OWNED by the G4CrossSectionDataStore, G4EnergyRangeManager +// and G4ProcessManager respectively, HENCE THEY ARE NEVER DELETED +// (true for ANY physics list). +// Should not matter too much though, because the destructions +// should have happened at the very end of the run anyway. +// *************************************************************************** +void FLUKAHadronInelasticPhysicsConstructor::ConstructProcess() { + + const auto helper = G4PhysicsListHelper::GetPhysicsListHelper(); + + // FLUKA hadron - nucleus inelastic XS + const auto flukaInelasticScatteringXS = new FLUKAInelasticScatteringXS(); + + // FLUKA hadron - nucleus model + const auto flukaModel = new FLUKANuclearInelasticModel(); + + + // PROTON + build_G4_process_helpers::buildInelasticProcess(G4Proton::Proton(), + helper, + flukaInelasticScatteringXS, + flukaModel); + + // DEBUG: CHERRY PICK G4 XS / MODELS INSTEAD + /*auto protonInelasticProcess = new G4HadronInelasticProcess("protonInelastic", G4Proton::Proton()); + helper->RegisterProcess(protonInelasticProcess, G4Proton::Proton()); + protonInelasticProcess->AddDataSet(flukaInelasticScatteringXS); + //auto BGG = new G4BGGNucleonInelasticXS(G4Proton::Proton()); + //protonInelasticProcess->AddDataSet(BGG); + + protonInelasticProcess->RegisterMe(flukaModel); + //auto theModel = new G4TheoFSGenerator("FTFP"); + //auto theStringModel = new G4FTFModel(); + //theStringModel->SetFragmentationModel(new G4ExcitedStringDecay()); + //theModel->SetHighEnergyGenerator(theStringModel); + //theModel->SetQuasiElasticChannel(new G4QuasiElasticChannel()); + //auto theCascade = new G4GeneratorPrecompoundInterface(); + //theModel->SetTransport(theCascade); + //theModel->SetMinEnergy(G4HadronicParameters::Instance()->GetMinEnergyTransitionFTF_Cascade()); + //theModel->SetMaxEnergy(G4HadronicParameters::Instance()->GetMaxEnergy()); + //protonInelasticProcess->RegisterMe(theModel); + */ + + + // NEUTRON + const auto neutron = G4Neutron::Neutron(); + + // NEUTRON INELASTIC + const auto neutronInelasticProcess = new G4HadronInelasticProcess("neutronInelastic", neutron); + // NB: No XS is set by default in the G4HadronInelasticProcess constructor. + helper->RegisterProcess(neutronInelasticProcess, neutron); + + // Also non-HP: FLUKA neutron inelastic + // IMPORTANT NB: Since flukaInelasticScatteringXS is SetForAllAtomsAndEnergies, + // it needs to be set first (would erase any previously defined dataset, + // see G4CrossSectionDataStore::AddDataSet). + neutronInelasticProcess->AddDataSet(flukaInelasticScatteringXS); + const auto flukaNeutronModel = new FLUKANuclearInelasticModel(); + flukaNeutronModel->SetMinEnergy(fNeutronFLUKAMinE); + neutronInelasticProcess->RegisterMe(flukaNeutronModel); + + // HP only: G4 neutron HP inelastic + const auto neutronHPInelasticXS = new G4ParticleHPInelasticData(neutron); + neutronInelasticProcess->AddDataSet(neutronHPInelasticXS); + const auto neutronHPInelasticModel = new G4ParticleHPInelastic(neutron, "NeutronHPInelastic"); + neutronHPInelasticModel->SetMaxEnergy(fNeutronHPMaxE); + neutronInelasticProcess->RegisterMe(neutronHPInelasticModel); + + + // TO DO: Not elegant to have G4 neutron capture and fission included in FLUKA inelastic. + // Create a Physics constructor just for it? + // (NB: CANNOT use the neutron builders, + // because they would ALSO create a G4HadronInelasticProcess, while we use the FLUKA one). + + + // NEUTRON CAPTURE + const auto neutronCaptureProcess = new G4NeutronCaptureProcess(); + // NB: XS (G4NeutronCaptureXS) is already added, in G4NeutronCaptureProcess constructor. + helper->RegisterProcess(neutronCaptureProcess, neutron); + + // Also non-HP: neutron rad capture + const auto neutronRadCaptureModel = new G4NeutronRadCapture(); + neutronRadCaptureModel->SetMinEnergy(fNeutronFLUKAMinE); // HP only + neutronCaptureProcess->RegisterMe(neutronRadCaptureModel); + + // HP only: neutron HP capture + const auto neutronHPCaptureXS = new G4ParticleHPCaptureData(); + neutronCaptureProcess->AddDataSet(neutronHPCaptureXS); + const auto neutronHPCaptureModel = new G4ParticleHPCapture(); + neutronHPCaptureModel->SetMaxEnergy(fNeutronHPMaxE); + neutronCaptureProcess->RegisterMe(neutronHPCaptureModel); + + + // NEUTRON FISSION + const auto neutronFissionProcess = new G4NeutronFissionProcess(); + // NB: XS (G4ZeroXS) is already added, in the process's constructor. + helper->RegisterProcess(neutronFissionProcess, neutron); + + // HP only: neutron fission + const auto neutronLEPFissionModel = new G4LFission(); + neutronLEPFissionModel->SetMinEnergy(fNeutronFLUKAMinE); + neutronLEPFissionModel->SetMaxEnergy(G4HadronicParameters::Instance()->GetMaxEnergy()); + neutronFissionProcess->RegisterMe(neutronLEPFissionModel); + + // HP only: neutron HP fission + const auto neutronHPFissionXS = new G4ParticleHPFissionData(); + neutronFissionProcess->AddDataSet(neutronHPFissionXS); + const auto neutronHPFissionModel = new G4ParticleHPFission(); + neutronHPFissionModel->SetMaxEnergy(fNeutronHPMaxE); + neutronFissionProcess->RegisterMe(neutronHPFissionModel); + + + // PI+, PI- + build_G4_process_helpers::buildInelasticProcess(G4PionPlus::PionPlus(), + helper, + flukaInelasticScatteringXS, + flukaModel); + build_G4_process_helpers::buildInelasticProcess(G4PionMinus::PionMinus(), + helper, + flukaInelasticScatteringXS, + flukaModel); + + + // KAONS + build_G4_process_helpers::buildInelasticProcessForEachParticle(G4HadParticles::GetKaons(), + helper, + flukaInelasticScatteringXS, + flukaModel); + + + const auto param = G4HadronicParameters::Instance(); + if (param->GetMaxEnergy() > param->EnergyThresholdForHeavyHadrons()) { + + // HYPERONS, ANTI-HYPERONS + build_G4_process_helpers::buildInelasticProcessForEachParticle(G4HadParticles::GetHyperons(), + helper, + flukaInelasticScatteringXS, + flukaModel); + build_G4_process_helpers::buildInelasticProcessForEachParticle(G4HadParticles::GetAntiHyperons(), + helper, + flukaInelasticScatteringXS, + flukaModel); + + // LIGHT ANTI-IONS: PBAR, NBAR, ANTI LIGHT IONS + build_G4_process_helpers::buildInelasticProcessForEachParticle(G4HadParticles::GetLightAntiIons(), + helper, + flukaInelasticScatteringXS, + flukaModel); + + // B-, C- BARYONS AND MESONS + if (G4HadronicParameters::Instance()->EnableBCParticles() ) { + build_G4_process_helpers::buildInelasticProcessForEachParticle(G4HadParticles::GetBCHadrons(), + helper, + flukaInelasticScatteringXS, + flukaModel); + } + } +} + + +#endif // G4_USE_FLUKA diff --git a/source/processes/electromagnetic/dna/utils/include/G4DNACPA100WaterExcitationStructure.hh b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKAHadronInelasticPhysicsConstructor.hh similarity index 64% rename from source/processes/electromagnetic/dna/utils/include/G4DNACPA100WaterExcitationStructure.hh rename to examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKAHadronInelasticPhysicsConstructor.hh index 022bb64d0e6..b0d06eece2d 100644 --- a/source/processes/electromagnetic/dna/utils/include/G4DNACPA100WaterExcitationStructure.hh +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKAHadronInelasticPhysicsConstructor.hh @@ -23,47 +23,41 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// Based on the work of M. Terrissol and M. C. Bordage +// Construct hadron inelastic physics processes with FLUKA.CERN XS and models. // -// Users are requested to cite the following papers: -// - M. Terrissol, A. Baudre, Radiat. Prot. Dosim. 31 (1990) 175-177 -// - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries, -// M. Bardies, N. Lampe, S. Incerti, Phys. Med. 32 (2016) 1833-1840 +// NB 1: Neutron HP treatment is the one from G4. // -// Authors of this class: -// M.C. Bordage, M. Terrissol, S. Edel, J. Bordes, S. Incerti +// NB 2: Neutron capture and fission processes are also defined here in this constructor +// (as is done in the G4 physics lists), and are from G4. // -// 15.01.2014: creation +// Author: G.Hugo, 01 August 2022 // +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef FLUKA_HADRON_INELASTIC_PHYSICS_CONSTRUCTOR_HH +#define FLUKA_HADRON_INELASTIC_PHYSICS_CONSTRUCTOR_HH -#ifndef G4DNACPA100WaterExcitationStructure_hh -#define G4DNACPA100WaterExcitationStructure_hh 1 - + +// G4 +#include "CLHEP/Units/SystemOfUnits.h" #include "globals.hh" -#include +#include "G4VPhysicsConstructor.hh" + + +class FLUKAHadronInelasticPhysicsConstructor final : public G4VPhysicsConstructor { - -class G4DNACPA100WaterExcitationStructure -{ public: - - G4DNACPA100WaterExcitationStructure(); - - virtual ~G4DNACPA100WaterExcitationStructure(); - - G4double ExcitationEnergy(G4int level); + FLUKAHadronInelasticPhysicsConstructor(G4int verbose = 1); - G4int NumberOfLevels() { return nLevels; } - - // Copy constructor and assignment operator to be added here - -private: - - // Number of excitation levels of the water molecule - G4int nLevels; + virtual void ConstructParticle() override; + virtual void ConstructProcess() override; - std::vector energyConstant; - + +private: + G4double fNeutronHPMaxE = 20*CLHEP::MeV; + G4double fNeutronFLUKAMinE = 20*CLHEP::MeV; }; + #endif +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKAInelasticScatteringXS.cc b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKAInelasticScatteringXS.cc new file mode 100644 index 00000000000..8d88704f1a3 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKAInelasticScatteringXS.cc @@ -0,0 +1,159 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +#ifdef G4_USE_FLUKA + + +#include "FLUKAInelasticScatteringXS.hh" + +// G4 +#include "G4DynamicParticle.hh" +#include "G4ElementTable.hh" +#include "G4Element.hh" +#include "G4Material.hh" +#include "G4IsotopeList.hh" +#include "G4SystemOfUnits.hh" + +#include "fluka_interface.hh" + + +#define DEBUG false + + +// *************************************************************************** +// FLUKA hadron nucleus inelastic XS. +// *************************************************************************** +FLUKAInelasticScatteringXS::FLUKAInelasticScatteringXS() + : G4VCrossSectionDataSet("FLUKAInelasticScatteringXS") +{ + verboseLevel = 0; + if (verboseLevel > 0) { + G4cout << "FLUKAInelasticScatteringXS::FLUKAInelasticScatteringXS constructor." << G4endl; + } + + SetForAllAtomsAndEnergies(true); +} + + +// *************************************************************************** +// Basic description. +// *************************************************************************** +void FLUKAInelasticScatteringXS::CrossSectionDescription(std::ostream& outFile) const { + outFile << "FLUKAInelasticScatteringXS: Fluka9x/200x" + << " to compute inelastic scattering lengths and cross sections.\n"; +} + + +// *************************************************************************** +// Make an element non-applicable, +// so that the element's considered isotopic composition is always the G4 one. +// *************************************************************************** +G4bool FLUKAInelasticScatteringXS::IsElementApplicable(const G4DynamicParticle*, + G4int, + const G4Material*) { + + // For ions, get kinetic energy per nucleon + /*if (std::abs(particle->GetDefinition()->GetBaryonNumber()) > 1) { + const G4double kineticEnergyPerNucleon = particle->GetKineticEnergy() / + std::abs(particle->GetDefinition()->GetBaryonNumber()); + if (kineticEnergyPerNucleon > GetMaxKinEnergy()) { + + G4cout << "Particle kinetic energy = " << particle->GetKineticEnergy() << G4endl; + G4cout << "GetMaxKinEnergy() = " << GetMaxKinEnergy() << G4endl; + G4cout << "particle->GetDefinition()->GetBaryonNumber() = " << particle->GetDefinition()->GetBaryonNumber() << G4endl; + G4cout << "No inelastic interaction model will be available for this ion" << G4endl; + G4cout << "########################################" + << "########################################" << G4endl; + return false; + } + }*/ + + return false; +} + + +// *************************************************************************** +// The XS is eventually called at the isotope level. +// *************************************************************************** +G4bool FLUKAInelasticScatteringXS::IsIsoApplicable(const G4DynamicParticle*, + G4int, G4int, + const G4Element*, + const G4Material*) { + + return true; +} + + +// *************************************************************************** +// Access point to FLUKA XS at the ELEMENT level +// (to make it available, depending on the choice made in sElementApplicable). +// *************************************************************************** +G4double FLUKAInelasticScatteringXS::GetElementCrossSection(const G4DynamicParticle* aParticle, + G4int targetZ, + const G4Material*) { + + // GET INELASTIC XS FROM FLUKA INTERFACE + const G4double xs = fluka_interface::computeInelasticScatteringXS(aParticle, + targetZ); +#if DEBUG + G4cout << "GetElementCrossSection" + << ", Ekin[MeV] = " << aParticle->GetKineticEnergy() / CLHEP::MeV + << ", targetZ = " << targetZ + << ", xs[barn] = " << xs / CLHEP::barn + << G4endl; + G4cout << G4endl; +#endif + + return xs; +} + + +// *************************************************************************** +// Access point to FLUKA XS at the ISOTOPE level +// *************************************************************************** +G4double FLUKAInelasticScatteringXS::GetIsoCrossSection(const G4DynamicParticle* aParticle, + G4int targetZ, G4int targetA, + const G4Isotope*, + const G4Element*, + const G4Material*) { + + // GET INELASTIC XS FROM FLUKA INTERFACE + const G4double xs = fluka_interface::computeInelasticScatteringXS(aParticle, + targetZ, + targetA); + +#if DEBUG + G4cout << "GetIsoCrossSection" + << ", Ekin[MeV] = " << aParticle->GetKineticEnergy() / CLHEP::MeV + << ", targetZ = " << targetZ << ", targetA = " << targetA + << ", xs[barn] = " << xs / CLHEP::barn + << G4endl; + G4cout << G4endl; +#endif + + return xs; +} + + +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKAInelasticScatteringXS.hh b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKAInelasticScatteringXS.hh new file mode 100644 index 00000000000..21663e14139 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKAInelasticScatteringXS.hh @@ -0,0 +1,81 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// FLUKA hadron nucleus inelastic XS. +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef FLUKA_INELASTIC_SCATTERING_XS_HH +#define FLUKA_INELASTIC_SCATTERING_XS_HH + + +// G4 +#include "globals.hh" +#include "G4VCrossSectionDataSet.hh" +#include "G4ElementData.hh" +#include "G4PhysicsVector.hh" + + +class G4DynamicParticle; +class G4ParticleDefinition; +class G4Element; +class G4Meterial; +class G4Isotope; + + +class FLUKAInelasticScatteringXS final : public G4VCrossSectionDataSet { + + public: + explicit FLUKAInelasticScatteringXS(); + + void CrossSectionDescription(std::ostream&) const; + + virtual G4bool IsElementApplicable(const G4DynamicParticle*, + G4int Z, + const G4Material*) override; + + virtual G4bool IsIsoApplicable(const G4DynamicParticle*, + G4int Z, G4int A, + const G4Element*, const G4Material*) override; + + virtual G4double GetElementCrossSection(const G4DynamicParticle*, + G4int Z, + const G4Material*) override; + + virtual G4double GetIsoCrossSection(const G4DynamicParticle*, + G4int Z, G4int A, + const G4Isotope* iso, + const G4Element* elm, + const G4Material* mat) override; + + FLUKAInelasticScatteringXS & operator=(const FLUKAInelasticScatteringXS &right) = delete; + FLUKAInelasticScatteringXS(const FLUKAInelasticScatteringXS&) = delete; +}; + + +#endif +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKANuclearInelasticModel.cc b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKANuclearInelasticModel.cc new file mode 100644 index 00000000000..6bb368bb0fe --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKANuclearInelasticModel.cc @@ -0,0 +1,66 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +#ifdef G4_USE_FLUKA + + +#include "FLUKANuclearInelasticModel.hh" + +// G4 +#include "G4HadFinalState.hh" +#include "G4HadProjectile.hh" +#include "G4Nucleus.hh" + +#include "fluka_interface.hh" + + +// *************************************************************************** +// FLUKA hadron inelastic physics final state. +// *************************************************************************** +FLUKANuclearInelasticModel::FLUKANuclearInelasticModel() + : G4HadronicInteraction("FLUKANuclearInelasticModel"), + finalState_(std::make_unique()) +{} + + +// *************************************************************************** +// FLUKA hadron inelastic physics: returns final state from FLUKA. +// *************************************************************************** +G4HadFinalState* FLUKANuclearInelasticModel::ApplyYourself(const G4HadProjectile& projectile, + G4Nucleus& targetNucleus) { + + // Clean-up final state. + finalState_->Clear(); + finalState_->SetStatusChange(stopAndKill); + + // GET FINAL STATE FROM FLUKA INTERFACE + fluka_interface::setNuclearInelasticFinalState(finalState_.get(), + projectile, + targetNucleus); + + return finalState_.get(); +} + + +#endif //G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKANuclearInelasticModel.hh b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKANuclearInelasticModel.hh new file mode 100644 index 00000000000..0ce0232df5e --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/FLUKANuclearInelasticModel.hh @@ -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. * +// ******************************************************************** +// +// FLUKA hadron inelastic physics: returns final state from FLUKA. +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef FLUKA_NuclearInelasticModel_hh +#define FLUKA_NuclearInelasticModel_hh + + +// G4 +#include "globals.hh" +#include "G4HadronicInteraction.hh" + + +class G4HadFinalState; +class G4HadProjectile; +class G4Nucleus; + + +class FLUKANuclearInelasticModel final : public G4HadronicInteraction { + + public: + FLUKANuclearInelasticModel(); + + virtual G4HadFinalState* ApplyYourself(const G4HadProjectile& projectile, + G4Nucleus& targetNucleus) override; + + private: + std::unique_ptr finalState_; +}; + + +#endif +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/G4_HP_CernFLUKAHadronInelastic_PhysicsList.cc b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/G4_HP_CernFLUKAHadronInelastic_PhysicsList.cc new file mode 100644 index 00000000000..b6a5d8cf863 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/G4_HP_CernFLUKAHadronInelastic_PhysicsList.cc @@ -0,0 +1,129 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +#ifdef G4_USE_FLUKA + + +#include "G4_HP_CernFLUKAHadronInelastic_PhysicsList.hh" + +// G4 +//#include "G4EmStandardPhysics.hh" +#include "G4EmLivermorePhysics.hh" // LIV +#include "G4EmExtraPhysics.hh" +// G4 +#include "G4DecayPhysics.hh" +#include "G4RadioactiveDecayPhysics.hh" // HP +// G4 +//#include "G4HadronElasticPhysics.hh" +#include "G4HadronElasticPhysicsHP.hh" // HP +// G4 +//#include "G4HadronPhysicsFTFP_BERT_HP.hh" +#include "FLUKAHadronInelasticPhysicsConstructor.hh" +// G4 +#include "G4IonPhysics.hh" +// G4 +#include "G4StoppingPhysics.hh" +//#include "G4NeutronTrackingCut.hh" // when NOT HP +// G4 +#include "CLHEP/Units/SystemOfUnits.h" + +#include "fluka_interface.hh" + + +// *************************************************************************** +// A physics list based on FTFP_BERT_HP LIV, +// but with full hadron inelastic physics replaced by the one from FLUKA.CERN. +// *************************************************************************** +G4_HP_CernFLUKAHadronInelastic_PhysicsList::G4_HP_CernFLUKAHadronInelastic_PhysicsList(G4int verbose) { + + if (verbose > 0) { + G4cout << "<<< Geant4 Physics List simulation engine: G4_HP_CernFLUKAHadronInelastic_PhysicsList" + << G4endl << G4endl; + } + SetVerboseLevel(verbose); + + // IMPORTANT: The default production cut is set here. + defaultCutValue = 0.7*CLHEP::mm; + + + // EM PHYSICS + //RegisterPhysics( new G4EmStandardPhysics(ver) ); + RegisterPhysics( new G4EmLivermorePhysics( verbose ) ); // LIV + + // SYNCHROTON RADIATION & GN PHYSICS + RegisterPhysics( new G4EmExtraPhysics(verbose) ); + + // DECAYS + RegisterPhysics( new G4DecayPhysics(verbose) ); + RegisterPhysics( new G4RadioactiveDecayPhysics(verbose) ); // HP + + // HADRON ELASTIC SCATTERING + //RegisterPhysics( new G4HadronElasticPhysics(verbose) ); + RegisterPhysics( new G4HadronElasticPhysicsHP(verbose) ); // HP + + // HADRON INELASTIC PHYSICS + //RegisterPhysics( new G4HadronPhysicsFTFP_BERT_HP(verbose) ); + RegisterPhysics( new FLUKAHadronInelasticPhysicsConstructor( verbose ) ); + + // ION PHYSICS + RegisterPhysics( new G4IonPhysics(verbose) ); + + // STOPPING PHYSICS + RegisterPhysics( new G4StoppingPhysics(verbose) ); + // NEUTRON TRACKING CUT + // NB: Not in FTFP_BERT_HP! + //RegisterPhysics( new G4NeutronTrackingCut( verbose ) ); // when NOT HP + + + // IMPORTANT: Initialize the FLUKA interface here. + // Both activation switches should be set to TRUE to provide the most comprehensive results. + // NB: COMPARISON WITH G4 DOES NOT SEEM MEANINGFUL + // WHEN COALESCENCE IS ACTIVATED IN BOTH FLUKA AND G4. + // Freedom to choose & see the effect of these switches is hence provided here. + const G4bool activateCoalescence = true; + const G4bool activateHeavyFragmentsEvaporation = true; + fluka_interface::initialize(activateCoalescence, + activateHeavyFragmentsEvaporation); +} + + +// *************************************************************************** +// IMPORTANT: Set production cuts here: add a 0. cut for proton production. +// *************************************************************************** +void G4_HP_CernFLUKAHadronInelastic_PhysicsList::SetCuts() { + + if (verboseLevel > 1) { G4cout << "G4_HP_CernFLUKAHadronInelastic_PhysicsList::SetCuts:"; } + + // G4VUserPhysicsList::SetCutsWithDefault sets + // the default cut value for all particle types. + SetCutsWithDefault(); + + // Set proton cut value to 0, for producing low energy recoil nucleus. + SetCutValue(0., "proton"); + G4cout << "Proton production cut: " << GetCutValue("proton") << G4endl; +} + + +#endif // G4_USE_FLUKA + diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/G4_HP_CernFLUKAHadronInelastic_PhysicsList.hh b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/G4_HP_CernFLUKAHadronInelastic_PhysicsList.hh new file mode 100644 index 00000000000..63238cfc80c --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/G4_HP_CernFLUKAHadronInelastic_PhysicsList.hh @@ -0,0 +1,55 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// A physics list based on FTFP_BERT_HP LIV, +// but with full hadron inelastic physics replaced by the one from FLUKA.CERN. +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef G4_HP_CERNFLUKAHADRONINELASTIC_PHYSICSLIST_HH +#define G4_HP_CERNFLUKAHADRONINELASTIC_PHYSICSLIST_HH + + +// G4 +#include "globals.hh" +#include "G4VModularPhysicsList.hh" + + +class G4_HP_CernFLUKAHadronInelastic_PhysicsList final : public G4VModularPhysicsList { + +public: + G4_HP_CernFLUKAHadronInelastic_PhysicsList(G4int verbose = 1); + + G4_HP_CernFLUKAHadronInelastic_PhysicsList(const G4_HP_CernFLUKAHadronInelastic_PhysicsList&) = delete; + G4_HP_CernFLUKAHadronInelastic_PhysicsList& operator=(const G4_HP_CernFLUKAHadronInelastic_PhysicsList&) = delete; + + virtual void SetCuts(); +}; + + +#endif +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/build_G4_process_helpers.cc b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/build_G4_process_helpers.cc new file mode 100644 index 00000000000..9aafdbcdd4c --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/build_G4_process_helpers.cc @@ -0,0 +1,93 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +#ifdef G4_USE_FLUKA + + +#include "build_G4_process_helpers.hh" + +// G4 +#include "G4ParticleDefinition.hh" +#include "G4PhysicsListHelper.hh" +//#include "G4HadronicParameters.hh" +//#include "G4ProcessManager.hh" +#include "G4VCrossSectionDataSet.hh" +#include "G4HadronicInteraction.hh" +#include "G4HadronInelasticProcess.hh" + + +// *************************************************************************** +// Helpers: +// Construct a G4HadronInelasticProcess (could be templated on process class), +// assign XS and model to the process, +// and register the process to the process manager. +// *************************************************************************** +namespace build_G4_process_helpers { + + // *************************************************************************** + // For all particles. + // *************************************************************************** + void buildInelasticProcessForEachParticle(const std::vector& allParticlesPDGIds, + G4PhysicsListHelper* const helper, + G4VCrossSectionDataSet* const xs, + /*const G4double xsFactor,*/ + G4HadronicInteraction* const hadronicModel) { + + const auto particlesTable = G4ParticleTable::GetParticleTable(); + + // Loop on all particles + for (const auto& particlePDGId : allParticlesPDGIds) { + + const auto particle = particlesTable->FindParticle(particlePDGId); + if (!particle) { continue; } + + buildInelasticProcess(particle, + helper, + xs, + //xsFactor, + hadronicModel); + } + } + + + // *************************************************************************** + // For a specific particle. + // *************************************************************************** + void buildInelasticProcess(G4ParticleDefinition* const particle, + G4PhysicsListHelper* const helper, + G4VCrossSectionDataSet* const xs, + //const G4double xsFactor, + G4HadronicInteraction* const hadronicModel) { + + const auto process = new G4HadronInelasticProcess(particle->GetParticleName() + "HadronInelastic", particle); + process->AddDataSet(xs); + process->RegisterMe(hadronicModel); + //if (param->ApplyFactorXS()) ((G4HadronicProcess*)process)->MultiplyCrossSectionBy(xsFactor); + helper->RegisterProcess(process, particle); + } + +} // namespace build_G4_process_helpers + + +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/build_G4_process_helpers.hh b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/build_G4_process_helpers.hh new file mode 100644 index 00000000000..e3ce28beb5c --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/FlukaInterface/source/fluka_G4_physics_list/build_G4_process_helpers.hh @@ -0,0 +1,69 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Helper: +// Construct a G4HadronInelasticProcess (could be templated on process class), +// assign XS and model to the process, +// and register the process to the process manager. +// +// Author: G.Hugo, 01 August 2022 +// +// *************************************************************************** +#ifdef G4_USE_FLUKA +#ifndef BUILD_G4_PROCESS_HELPERS_HH +#define BUILD_G4_PROCESS_HELPERS_HH + + +#include + +// G4 +#include "globals.hh" + + +class G4ParticleDefinition; +class G4PhysicsListHelper; +class G4VCrossSectionDataSet; +class G4HadronicInteraction; + + +namespace build_G4_process_helpers { + + void buildInelasticProcessForEachParticle(const std::vector& partList, + G4PhysicsListHelper* ph, + G4VCrossSectionDataSet* xs, + //const G4double xsFactor, + G4HadronicInteraction* hadronicModel); + + + void buildInelasticProcess(G4ParticleDefinition* particle, + G4PhysicsListHelper* ph, + G4VCrossSectionDataSet* xs, + //const G4double xsFactor, + G4HadronicInteraction* hadronicModel); +} + + +#endif +#endif // G4_USE_FLUKA diff --git a/examples/extended/hadronic/FlukaCern/PhysicsListLevel/.README.txt b/examples/extended/hadronic/FlukaCern/PhysicsListLevel/.README.txt new file mode 100644 index 00000000000..690370160d9 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/PhysicsListLevel/.README.txt @@ -0,0 +1,25 @@ +/// @file "hadronic/FlukaCern/PhysicsListLevel/.README.txt" +/// @brief Example exFlukaCernPhysicsList README + +/*! \page exFlukaCernPhysicsList Example : exFlukaCernPhysicsList + + +Note that this is a *generic* guide, allowing the use of the `FLUKA` interface in *any* G4 application.
+If you are interested in studying the XS and final states at the interaction level, +or if you have never used the interface to `FLUKA` before, +please directly follow the `README.md` files included in +`ProcessLevel/CrossSection` and `ProcessLevel/FinalState`. + +If you want to integrate a physics list including FLUKA hadron-nucleus inelastic models into your G4 application, +please follow `FlukaCern/FlukaInterface/README.md`.
+You will find there a generic guide, allowing you to use the `FLUKA` interface in *any* G4 application.
+It notably contains a list of dependencies, how to setup your environment, +and how to adapt your build system. + +In order to include the `G4_HP_CernFLUKAHadronInelastic_PhysicsList` into the source of your application, +you can then follow what has been done in `FlukaCern/ProcessLevel/CrossSection/HadronNucleusXS.cc`.
+Note that the integration of that `PhysicsList` is similar to the integration of any other custom PhysicsList, +with, in addition, the `G4_USE_FLUKA` treatment, and the necessary call to `fluka_particle_table::initialize()`. + + +*/ diff --git a/examples/extended/hadronic/FlukaCern/PhysicsListLevel/README.md b/examples/extended/hadronic/FlukaCern/PhysicsListLevel/README.md new file mode 100644 index 00000000000..0b14c643d1d --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/PhysicsListLevel/README.md @@ -0,0 +1,16 @@ +Note that this is a *generic* guide, allowing the use of the `FLUKA` interface in *any* G4 application. +If you are interested in studying the XS and final states at the interaction level, +or if you have never used the interface to `FLUKA` before, +please directly follow the `README.md` files included in +`ProcessLevel/CrossSection` and `ProcessLevel/FinalState`. + +If you want to integrate a physics list including FLUKA hadron-nucleus inelastic models into your G4 application, +please follow `FlukaCern/FlukaInterface/README.md`. +You will find there a generic guide, allowing you to use the `FLUKA` interface in *any* G4 application. +It notably contains a list of dependencies, how to setup your environment, +and how to adapt your build system. + +In order to include the `G4_HP_CernFLUKAHadronInelastic_PhysicsList` into the source of your application, +you can then follow what has been done in `FlukaCern/ProcessLevel/CrossSection/HadronNucleusXS.cc`. +Note that the integration of that `PhysicsList` is similar to the integration of any other custom PhysicsList, +with, in addition, the `G4_USE_FLUKA` treatment, and the necessary call to `fluka_particle_table::initialize()`. \ No newline at end of file diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/.README.txt b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/.README.txt new file mode 100644 index 00000000000..1da07e2dc4b --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/.README.txt @@ -0,0 +1,169 @@ +/// @file "hadronic/FlukaCern/ProcessLevel/CrossSection/.README.txt" +/// @brief Example exFlukaCernCrossSection README + +/*! \page exFlukaCernCrossSection Example : exFlukaCernCrossSection + + +# Description + +This example allows the study of G4 cross-sections, +and in addition, of the `FLUKA` hadron-nucleus reaction cross sections. + +The user can printout any particle-material XS.
+The XS are exactly the ones defined in any G4 physicsList chosen by the user, +or from `FLUKA` (hadron-nucleus inelastic case). + +In the input file, the user can set: +- projectile. +- target material (element, compound or even mixture). +- plotting options. + +All plots (created via the G4 analysis manager) can be dumped +to any of the usually supported formats (e.g. `ROOT` format), +but also in a Flair-compatible format.
+Regarding the extension of `G4H1` to insure `Flair` compatibility, +see `geant4/examples/extended/hadronic/FlukaCern/utils`. + +Note that the Geant4 SERIAL run manager is used, since `FLUKA` is single-threaded +(in actual `FLUKA` runs, parallelism is achieved via a multi-processing approach). + +Before you can access the `FLUKA` hadron-nucleus inelastic model in this example, +you will need to install and setup `FLUKA` and its interface.
+See "Dependencies" paragraph below. + +A version of the interface to `FLUKA` is directly located at `geant4/examples/extended/hadronic/FlukaCern/FlukaInterface`. + + +# Dependencies + +### Environment +- **gcc** >= 7 (Linux) and **gcc** >= 9 (MacOS)
+In practice, a recent version is recommended, at least `gcc >=10`. +\verbatim +gcc --version +\endverbatim +
+ +- **CMake** >= 3.16...3.21
+\verbatim +cmake3 --version +\endverbatim +
+ +- **G4** >= 11.0.3 (Not tested on older G4 releases: might still work, but with no guarantee).
+IMPORTANT: YOU NEED TO SOURCE YOUR G4 ENVIRONMENT.
+It needs to be sourced in whichever terminal you want to build / run a G4 application with the `FLUKA` interface. +\verbatim +source path_to_geant4/install/bin/geant4.sh +which geant4-config # NB: Your geant4-config should support the modern CMake way of building G4. +\endverbatim +
+ +- **Easy setup on lxplus** (lxplus7):
+All you need to do on lxplus, to setup an environment satisfying all the conditions above, is, for example: +\verbatim +source /cvmfs/sft.cern.ch/lcg/releases/gcc/10.1.0/x86_64-centos7/setup.sh +source /cvmfs/geant4.cern.ch/geant4/11.1/x86_64-centos7-gcc10-optdeb-MT/CMake-setup.sh +# NB: Your geant4.sh is at: /cvmfs/geant4.cern.ch/geant4/11.1/x86_64-centos7-gcc10-optdeb-MT/bin/geant4.sh +\endverbatim +
+ +### FLUKA4 +Release: >= **4-3.2** + +Please install the latest `FLUKA` release.
+(1) You first need to register (and accept the licence when relevant): https://fluka.cern/download/registration
+(2) You can then download the `binary libraries` (or potentially the `source code` package, depending on your case): +https://fluka.cern/download/latest-fluka-release.
+(3) Follow the `FLUKA` installation instructions: https://fluka.cern/documentation/installation
+In particular, for a Linux/MacOS install: https://fluka.cern/documentation/installation/fluka-linux-macos
+They will show you how to setup `FLUKA`.
+If (and only if) you went for the source code package option, you will need to build `fluka`, and, in addition, to do `make cpp_headers` at `path_to_fluka/src`.
+(4) Eventually, all you need are the headers `fluka_repo/include`, libraries `fluka_repo/lib`, and data `fluka_repo/data`. Check that they are not empty.
+Do not forget to add `/path_to_fluka/bin` to your `PATH`. Check with `which fluka`. + +### FlukaInterface +A version of the G4-FLUKA interface (`FLUKA` hadron-nucleus inelastic physics) +is located at `geant4/examples/extended/hadronic/FlukaCern/FlukaInterface`.
+You will first need to build the interface to `FLUKA`, and create the environment scripts.
+\verbatim +cd geant4/examples/extended/hadronic/FlukaCern/FlukaInterface/ +# Check with `which fluka` that fluka executable is added to your `PATH`. +source path_to_geant4/install/bin/geant4.sh +make interface +make env # Creates `env_FLUKA.sh` and `env_FLUKA_G4_interface.sh` +\endverbatim +IMPORTANT: `env_FLUKA_G4_interface.sh` needs to be sourced in whichever terminal +you want to build / run a G4 application with the `FLUKA` interface. + + +# Build this example + +\verbatim +cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/ +# Check with `which fluka` that fluka executable is added to your `PATH`. +source path_to_geant4/install/bin/geant4.sh +source ../../FlukaInterface/env_FLUKA_G4_interface.sh +mkdir build +cd build +cmake3 -DG4_USE_FLUKA=1 .. +make -j8 +\endverbatim + + +# Run this example + +\verbatim +cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/ +# Check with `which fluka` that fluka executable is added to your `PATH`. +source path_to_geant4/install/bin/geant4.sh +source ../../FlukaInterface/env_FLUKA_G4_interface.sh +# Edit all_XS.in (choice of particle, material, energy range...) +# XS used by FTFP_BERT_HP physics list: +./build/HadronNucleusXS all_XS.in FTFP_BERT_HP +# XS used by G4_HP_CernFLUKAHadronInelastic_PhysicsList physics list: +./build/HadronNucleusXS all_XS.in G4_HP_CFLUKAHI +\endverbatim + + +# Study the cross-sections +All plots are dumped at the end of the run in `all_XS.ext`.
+2 formats are supported: `ROOT` and `Flair`. + +- You can use `ROOT`:
+\verbatim +cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/ +root all_XS.root +\endverbatim +
+- Alternatively, the use of `Flair` is also supported.
+Please see http://flair.web.cern.ch/flair/download.html for `Flair` download.
+`Flair` tutorials are also available from that website.
+You can download the package corresponding to your distribution at the top of the page +(no need for `geoviewer`, which is for geometry display). Then look at the requirements & installation instructions at the bottom of the page.
+If you face issues installing `Flair`, you can get support at: https://fluka-forum.web.cern.ch/c/installation/ +

+An example file, showing how to directly visualize all XS with `Flair`, +is provided in this G4 example.
+By default, it directly provides comparison plots: +`FTFP_BERT_HP` versus `G4_HP_CernFLUKAHadronInelastic`.
+One can very easily adapt it (directly from `Flair` GUI) to any study of interest. +\verbatim +cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/ +mkdir -p results/FTFP_BERT_HP results/G4_HP_CernFLUKAHadronInelastic +# First run the example for FTFP_BERT, G4_HP_CernFLUKAHadronInelastic, and move the results! +./build/HadronNucleusXS all_XS.in FTFP_BERT_HP +mv all_XS.hist results/FTFP_BERT_HP +./build/HadronNucleusXS all_XS.in G4_HP_CFLUKAHI +mv all_XS.hist results/G4_HP_CernFLUKAHadronInelastic + +flair study_all_XS.flair & +\endverbatim +In the `Plot` tab, you can select the plot of interest in the left column, +and then click `Plot` (top banner, yellow button).
+You can select a physics list by clicking on its name in the `Detectors` box (center). You can then decide to change its color, line width (`Options` box). You can decide to plot it or not, by selecting / unselecting `graph` in the `Show` box (in the center).
+You can change the path of the data file by clicking on the folder button (button on the right).
+You can set the plots extrema, as well as select or unselect the log format, in the top right corner. + + +*/ diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/CMakeLists.txt b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/CMakeLists.txt new file mode 100644 index 00000000000..fac0844b69d --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/CMakeLists.txt @@ -0,0 +1,76 @@ +#---------------------------------------------------------------------------- +# Setup the project +cmake_minimum_required(VERSION 3.16...3.21) +project(HadronNucleusXS) + +#---------------------------------------------------------------------------- +# Find Geant4 package, activating all available UI and Vis drivers by default +# You can set WITH_GEANT4_UIVIS to OFF via the command line or ccmake/cmake-gui +# to build a batch mode only executable +# +option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON) +if(WITH_GEANT4_UIVIS) + find_package(Geant4 REQUIRED ui_all vis_all) +else() + find_package(Geant4 REQUIRED) +endif() + +#---------------------------------------------------------------------------- +# Setup Geant4 include directories and compile definitions +# +include(${Geant4_USE_FILE}) + +#---------------------------------------------------------------------------- +# Check whether FLUKA should be used or not +set(G4_USE_FLUKA OFF CACHE BOOL "Using FLUKA") +if(G4_USE_FLUKA) + message(STATUS "G4_USE_FLUKA=ON : Using FLUKA interface for building ${PROJECT_SOURCE_DIR}") + add_definitions(-DG4_USE_FLUKA) + find_package(FLUKAInterface REQUIRED) + if(FLUKAInterface_FOUND) + message(STATUS "FLUKA cmake module was found : ${CMAKE_MODULE_PATH}") + else() + message(FATAL_ERROR "FLUKA cmake module was NOT found! Please add one.") + endif() +else() + message(STATUS "G4_USE_FLUKA=OFF : NOT using FLUKA interface for building ${PROJECT_SOURCE_DIR}. \n \ + If ever you want to use the FLUKA interface, please repeat cmake command with -DG4_USE_FLUKA=1") +endif() + +#---------------------------------------------------------------------------- +# Locate sources and headers for this project +# +include_directories(${PROJECT_SOURCE_DIR}/include + ${PROJECT_SOURCE_DIR}/../../utils/include + ${FLUKAInterface_INCLUDE_DIR} + ${Geant4_INCLUDE_DIR}) +file(GLOB sources ${PROJECT_SOURCE_DIR}/../../utils/src/*.cc ${PROJECT_SOURCE_DIR}/src/*.cc) +file(GLOB headers ${PROJECT_SOURCE_DIR}/../../utils/include/*.hh ${PROJECT_SOURCE_DIR}/include/*.hh) + +#---------------------------------------------------------------------------- +# Add the executable, and link it to the Geant4 libraries +# +add_executable(HadronNucleusXS HadronNucleusXS.cc ${sources} ${headers}) +target_link_libraries(HadronNucleusXS ${FLUKAInterface_LIBRARIES} ${Geant4_LIBRARIES} ) + +#---------------------------------------------------------------------------- +# Copy all scripts to the build directory, i.e. the directory in which we +# build HadronNucleusXS. This is so that we can run the executable directly because it +# relies on these scripts being in the current working directory. +# +set(HadronNucleusXS_SCRIPTS + all_XS.in + ) + +foreach(_script ${HadronNucleusXS_SCRIPTS}) + configure_file( + ${PROJECT_SOURCE_DIR}/${_script} + ${PROJECT_BINARY_DIR}/${_script} + COPYONLY + ) +endforeach() + +#---------------------------------------------------------------------------- +# Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX +# +install(TARGETS HadronNucleusXS DESTINATION bin) diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/HadronNucleusXS.cc b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/HadronNucleusXS.cc new file mode 100644 index 00000000000..be9af334e71 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/HadronNucleusXS.cc @@ -0,0 +1,184 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file HadronicNucleusXS.cc +/// \brief Main program, +/// hadronic/FlukaCern/ProcessLevel/CrossSection example. +// +// Author: G.Hugo, 06 January 2023 +// +// ------------------------------------------------------------- +// +// GEANT4 HadronNucleusXS +// +/// This application allows the study of G4 cross-sections, +/// and in addition, of the FLUKA hadron-nucleus inelastic cross sections. +/// +/// The user can printout any particle-material XS. +/// The XS are exactly the ones defined in any default G4 PhysicsList chosen by the user, +/// or from FLUKA (hadron-nucleus inelastic case). +/// +/// In the input file, the user can set: +/// - projectile. +/// - target material (element, compound or even mixture). +/// - plotting options. +/// +/// All plots (created via the G4 analysis manager) can be dumped +/// to any of the usually supported formats (e.g. ROOT format), +/// but also in a Flair-compatible format. +/// +/// NB 1: Unlike the FlukaCern/ProcessLevel/FinalState example, +/// the choice here is to directly use physics lists +/// (hence under the hood, the processes they define), +/// instead of 'hardcoding' processes of interest. +/// This allows to directly study ALL XS, with no possible discrepancy +/// with respect to what is defined inside the physics lists. +/// +/// NB 2: Note that here, the application is completely independent +/// from the event loop, gun, detector etc: +/// the XS printout happend outside of the event loop anyway. +/// Hence, the fakeRun mode is used (setting number of events to 0). +/// This implies that no ActionInitialization is needed +/// (nor would be used anyway, if ever constructed), +/// and that the detector is a dummy, empty one. + +/// Use: build/HadronNucleusXS all_XS.in FTFP_BERT_HP +/// build/HadronNucleusXS all_XS.in G4_HP_CFLUKAHI +// +// ------------------------------------------------------------- +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include "G4RunManagerFactory.hh" +#include "G4RunManager.hh" +#include "DetectorConstruction.hh" + +#include "G4PhysListFactory.hh" +#include "G4VModularPhysicsList.hh" + +#ifdef G4_USE_FLUKA +#include "G4_HP_CernFLUKAHadronInelastic_PhysicsList.hh" +#include "FLUKAParticleTable.hh" +#endif + +#include "XSHistoManager.hh" + +#include "G4Exception.hh" +#include "G4UImanager.hh" + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4int main(G4int argc, char** argv) { + + // Check number of arguments + if (argc != 3) { + G4Exception("HadronNucleusXS (main)", + "Wrong number of input arguments.", + FatalException, + "Example use: build/HadronNucleusXS all_XS.in FTFP_BERT_HP"); + } + + // Construct a serial RUN MANAGER. + std::unique_ptr runManager( + G4RunManagerFactory::CreateRunManager(G4RunManagerType::SerialOnly)); + + + // Empty DETECTOR (compulsory). + const auto dummyDetector = new DetectorConstruction(); + // The detector is owned by G4RunManager. + runManager->SetUserInitialization(dummyDetector); + + + // Get PHYSICS LIST from command line argument. + // Default: G4_HP_CFLUKAHI. + const G4String physicsListName = (argc >= 3 ? argv[2] : "G4_HP_CFLUKAHI"); + const G4bool isFLUKAPhysicsList = (physicsListName == "G4_HP_CFLUKAHI"); + + G4VModularPhysicsList* physicsList = nullptr; + + // Create physics list with hadron inelastic processes from FLUKA. + if (isFLUKAPhysicsList) { +#ifdef G4_USE_FLUKA + physicsList = new G4_HP_CernFLUKAHadronInelastic_PhysicsList(); +#else + G4Exception("HadronNucleusXS.cc", + "Wrong compilation mode.", + FatalException, + "Requested G4_HP_CernFLUKAHadronInelastic physics list.\n" \ + "This requires COMPILATION in FLUKA mode.\n" \ + "Please fully recompile the example with G4_USE_FLUKA=yes.\n" \ + "For example:\n" \ + "source geant4/examples/extended/hadronic/FlukaCern/FlukaInterface/" \ + "env_FLUKA_G4_interface.sh\n" \ + "cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/\n" \ + "mkdir build\n" \ + "cd build\n" \ + "cmake -DGeant4_DIR=your_path_to_geant4 -DG4_USE_FLUKA=1 .. \n" \ + "make -j8 G4_USE_FLUKA=1\n" \ + "NB: First time use of FLUKA interface:\n" \ + "Do not forget to first compile the FLUKA interface itself.\n" \ + "For example: cd geant4/examples/extended/hadronic/FlukaCern/FlukaInterface/ " \ + "&& make interface && make env\n" \ + "FlukaInterface/env_FLUKA_G4_interface.sh then needs to be sourced\n" \ + "in whichever terminal you want to use the FLUKA interface.\n"); +#endif + } + // Create G4 physics list from available catalog. + else { + auto factory = G4PhysListFactory(); + physicsList = factory.GetReferencePhysList(physicsListName); + } + + // The physics list is owned by G4RunManager. + runManager->SetUserInitialization(physicsList); + +#ifdef G4_USE_FLUKA + if (isFLUKAPhysicsList) { + // Initialize FLUKA <-> G4 particles conversions tables. + fluka_particle_table::initialize(); + } +#endif + + + // Create HISTO MANAGER (and its messenger). + auto histoManager = XSHistoManager(); + + + // User interface manager (owned by G4RunManagerKernel). + const auto uiManager = G4UImanager::GetUIpointer(); + // BATCH MODE. + const G4String command = "/control/execute "; + const G4String fileName = argv[1]; + uiManager->ApplyCommand(command + fileName); + + + // CREATE HISTOGRAMS AND FILL THEM (independent from event loop!). + histoManager.Book(); + histoManager.EndOfRun(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/History b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/History new file mode 100644 index 00000000000..ed5ef86423c --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/History @@ -0,0 +1,19 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + HadronNucleusXS History file + ------------------- +This file should be used by the G4 example coordinator to briefly +summarize all major modifications introduced in the code and keep +track of all tags. + + ---------------------------------------------------------- + * Reverse chronological order (last date on top), please * + ---------------------------------------------------------- + +06-01-23 Gabrielle Hugo (HadronNucleusXS-V11-01-00) +- Created this example. + diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/ProcessLevel-CrossSection.out b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/ProcessLevel-CrossSection.out new file mode 100644 index 00000000000..c95b56eb91d --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/ProcessLevel-CrossSection.out @@ -0,0 +1,38 @@ + + ############################################ + !!! WARNING - FPE detection is activated !!! + ############################################ + + + ################################ + !!! G4Backtrace is activated !!! + ################################ + + +************************************************************** + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) + Copyright : Geant4 Collaboration + References : NIM A 506 (2003), 250-303 + : IEEE-TNS 53 (2006), 270-278 + : NIM A 835 (2016), 186-225 + WWW : http://geant4.org/ +************************************************************** + +G4PhysListFactory::GetReferencePhysList EMoption= 0 +<<< Geant4 Physics List simulation engine: FTFP_BERT_HP + + +/process/had/verbose 0 +/process/em/verbose 0 +/allXS/outputFileName all_XS +/allXS/particleName neutron +/allXS/elementName Pb +/allXS/numBins 1000 +/allXS/minKineticEnergy 1. keV +/allXS/maxKineticEnergy 10. TeV +/run/initialize +/run/beamOn 0 +### XSHistoManager::Book: Successfully opened file all_XS.root for dumping profiles. +### XSHistoManager::EndOfRun: Compute & fill XS for neutron in Pb +### All profiles saved to all_XS.root +### All profiles saved to all_XS.hist diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/README.md b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/README.md new file mode 100644 index 00000000000..58ccd1ef35e --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/README.md @@ -0,0 +1,158 @@ +# Description + +This example allows the study of G4 cross-sections, +and in addition, of the `FLUKA` hadron-nucleus reaction cross sections. + +The user can printout any particle-material XS. +The XS are exactly the ones defined in any G4 physicsList chosen by the user, +or from `FLUKA` (hadron-nucleus inelastic case). + +In the input file, the user can set: +- projectile. +- target material (element, compound or even mixture). +- plotting options. + +All plots (created via the G4 analysis manager) can be dumped +to any of the usually supported formats (e.g. `ROOT` format), +but also in a Flair-compatible format. +Regarding the extension of `G4H1` to insure `Flair` compatibility, +see `geant4/examples/extended/hadronic/FlukaCern/utils`. + +Note that the Geant4 run SERIAL manager is used, since `FLUKA` is single-threaded +(in actual `FLUKA` runs, parallelism is achieved via a multi-processing approach). + +Before you can access the `FLUKA` hadron-nucleus inelastic model in this example, +you will need to install and setup `FLUKA` and its interface. +See "Dependencies" paragraph below. + +A version of the interface to `FLUKA` is directly located at `geant4/examples/extended/hadronic/FlukaCern/FlukaInterface`. + + +# Dependencies + +### Environment +- **gcc** >= 7 (Linux) and **gcc** >= 9 (MacOS) +In practice, a recent version is recommended, at least `gcc >=10`. +``` +gcc --version +``` + +- **CMake** >= 3.16...3.21 +``` +cmake3 --version +``` + +- **G4** >= 11.0.3 (Not tested on older G4 releases: might still work, but with no guarantee). +IMPORTANT: YOU NEED TO SOURCE YOUR G4 ENVIRONMENT. +It needs to be sourced in whichever terminal you want to build / run a G4 application with the `FLUKA` interface. +``` +source path_to_geant4/install/bin/geant4.sh +which geant4-config # NB: Your geant4-config should support the modern CMake way of building G4. +``` + +- **Easy setup on lxplus** (lxplus7): +All you need to do on lxplus, to setup an environment satisfying all the conditions above, is, for example: +``` +source /cvmfs/sft.cern.ch/lcg/releases/gcc/10.1.0/x86_64-centos7/setup.sh +source /cvmfs/geant4.cern.ch/geant4/11.1/x86_64-centos7-gcc10-optdeb-MT/CMake-setup.sh +# NB: Your geant4.sh is at: /cvmfs/geant4.cern.ch/geant4/11.1/x86_64-centos7-gcc10-optdeb-MT/bin/geant4.sh +``` + +### `FLUKA4` +Release: >= **4-3.2** + +Please install the latest `FLUKA` release. +(1) You first need to register (and accept the licence when relevant): https://fluka.cern/download/registration +(2) You can then download the `binary libraries` (or potentially the `source code` package, depending on your case): +https://fluka.cern/download/latest-fluka-release. +(3) Follow the `FLUKA` installation instructions: https://fluka.cern/documentation/installation +In particular, for a Linux/MacOS install: https://fluka.cern/documentation/installation/fluka-linux-macos +They will show you how to setup `FLUKA`. +If (and only if) you went for the source code package option, you will need to build `fluka`, and, in addition, to do `make cpp_headers` at `path_to_fluka/src`. +(4) Eventually, all you need are the headers `fluka_repo/include`, libraries `fluka_repo/lib`, and data `fluka_repo/data`. Check that they are not empty. +Do not forget to add `/path_to_fluka/bin` to your `PATH`. Check with `which fluka`. + +### `FlukaInterface` +A version of the G4-FLUKA interface (`FLUKA` hadron-nucleus inelastic physics) +is located at `geant4/examples/extended/hadronic/FlukaCern/FlukaInterface`. +You will first need to build the interface to `FLUKA`, and create the environment scripts. +```bash +$ cd geant4/examples/extended/hadronic/FlukaCern/FlukaInterface/ +# Check with `which fluka` that fluka executable is added to your `PATH`. +$ source path_to_geant4/install/bin/geant4.sh +$ make interface +$ make env # Creates `env_FLUKA.sh` and `env_FLUKA_G4_interface.sh` +``` +IMPORTANT: `env_FLUKA_G4_interface.sh` needs to be sourced in whichever terminal +you want to build / run a G4 application with the `FLUKA` interface. + + +# Build this example +```bash +$ cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/ +# Check with `which fluka` that fluka executable is added to your `PATH`. +$ source path_to_geant4/install/bin/geant4.sh +$ source ../../FlukaInterface/env_FLUKA_G4_interface.sh +$ mkdir build +$ cd build +$ cmake3 -DG4_USE_FLUKA=1 .. +$ make -j8 +``` + + +# Run this example +```bash +$ cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/ +# Check with `which fluka` that fluka executable is added to your `PATH`. +$ source path_to_geant4/install/bin/geant4.sh +$ source ../../FlukaInterface/env_FLUKA_G4_interface.sh +# Edit all_XS.in (choice of particle, material, energy range...) +# XS used by FTFP_BERT_HP physics list: +$ ./build/HadronNucleusXS all_XS.in FTFP_BERT_HP +# XS used by G4_HP_CernFLUKAHadronInelastic_PhysicsList physics list: +$ ./build/HadronNucleusXS all_XS.in G4_HP_CFLUKAHI +``` + + +# Study the cross-sections +All plots are dumped at the end of the run in `all_XS.ext`. +2 formats are supported: `ROOT` and `Flair`. + + +- You can use `ROOT`: +```bash +$ cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/ +$ root all_XS.root +``` + +- Alternatively, the use of `Flair` is also supported. +Please see http://flair.web.cern.ch/flair/download.html for `Flair` download. +`Flair` tutorials are also available from that website. +You can download the package corresponding to your distribution at the top of the page +(no need for `geoviewer`, which is for geometry display). Then look at the requirements & installation instructions at the bottom of the page. +If you face issues installing `Flair`, you can get support at: https://fluka-forum.web.cern.ch/c/installation/ + +An example file, showing how to directly visualize all XS with `Flair`, +is provided in this G4 example. +By default, it directly provides comparison plots: +`FTFP_BERT_HP` versus `G4_HP_CernFLUKAHadronInelastic`. +One can very easily adapt it (directly from `Flair` GUI) to any study of interest. +```bash +$ cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/ +$ mkdir -p results/FTFP_BERT_HP results/G4_HP_CernFLUKAHadronInelastic +$ # First run the example for FTFP_BERT, G4_HP_CernFLUKAHadronInelastic, and move the results! +$ ./build/HadronNucleusXS all_XS.in FTFP_BERT_HP +$ mv all_XS.hist results/FTFP_BERT_HP +$ ./build/HadronNucleusXS all_XS.in G4_HP_CFLUKAHI +$ mv all_XS.hist results/G4_HP_CernFLUKAHadronInelastic +$ +$ flair study_all_XS.flair & +``` +In the `Plot` tab, you can select the plot of interest in the left column, +and then click `Plot` (top banner, yellow button). +You can select a physics list by clicking on its name in the `Detectors` box (center). You can then decide to change its color, line width (`Options` box). You can decide to plot it or not, by selecting / unselecting `graph` in the `Show` box (in the center). +You can change the path of the data file by clicking on the folder button (button on the right). +You can set the plots extrema, as well as select or unselect the log format, in the top right corner. + + + diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/all_XS.in b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/all_XS.in new file mode 100644 index 00000000000..56b419047db --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/all_XS.in @@ -0,0 +1,14 @@ +/control/verbose 1 +/process/had/verbose 0 +/process/em/verbose 0 + +/allXS/outputFileName all_XS +/allXS/particleName neutron +/allXS/elementName Pb +#/allXS/nonElementaryMaterialName WATER +/allXS/numBins 1000 +/allXS/minKineticEnergy 1. keV +/allXS/maxKineticEnergy 10. TeV + +/run/initialize +/run/beamOn 0 diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/include/DetectorConstruction.hh b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/include/DetectorConstruction.hh new file mode 100644 index 00000000000..ca982b26158 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/include/DetectorConstruction.hh @@ -0,0 +1,59 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file DetectorConstruction.hh +/// \brief Example of empty world volume. +// +// Author: G.Hugo, 06 January 2023 +// +// *************************************************************************** +// +/// DetectorConstruction +// +// Example of empty world volume. +// +// *************************************************************************** + +#ifndef DETECTOR_CONSTRUCTION_HH +#define DETECTOR_CONSTRUCTION_HH + +#include "G4VUserDetectorConstruction.hh" +#include "globals.hh" + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class DetectorConstruction : public G4VUserDetectorConstruction { + +public: + + DetectorConstruction() = default; + virtual G4VPhysicalVolume* Construct() override; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + + +#endif diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/include/XSHistoManager.hh b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/include/XSHistoManager.hh new file mode 100644 index 00000000000..34ce8737dfc --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/include/XSHistoManager.hh @@ -0,0 +1,128 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XSHistoManager.hh +/// \brief Create a set of profiles for XS study. +// +// Adapted from hadronic/Hadr00/include/HistoManager.hh +// Author: G.Hugo, 06 January 2023 +// +// *************************************************************************** +// +// XSHistoManager +// +/// Create a set of profiles for XS study. +/// +/// All profiles are G4H1. +/// They are created and filled via G4VAnalysisManager. +/// +/// The profiles can be dumped to all usual formats, including ROOT +/// (via G4VAnalysisManager). +/// An interesting added feature here, is that the plots, while being allocated +/// and filled via G4VAnalysisManager, are also dumped +/// in a Flair-compatible format (via tools::histo::flair). +/// +/// NB: tools::histo::flair code, which allows the dump of any G4H1 +/// into Flair-compatible format, is fully application-agnostic, +/// and is placed in FlukaCern/utils. +/// It could also be added as an extension of core G4 Analysis Manager. +// +// *************************************************************************** + +#ifndef XS_HISTO_MANAGER_HH +#define XS_HISTO_MANAGER_HH + +#include + +#include "globals.hh" + +#include "G4SystemOfUnits.hh" + +#include "XSHistoManagerMessenger.hh" + + +class G4ParticleDefinition; +class G4Element; +class G4Material; +class G4VAnalysisManager; + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class XSHistoManager { + +public: + XSHistoManager(); + + void SetOutputFileName(const G4String& outputFileName); + void SetParticle(const G4String& particleName); + void SetElement(const G4String& elementName); + void SetMaterial(const G4String& materialName); + void SetNumberOfBins(const G4int numBins) { fNumBins = numBins; } + void SetMinKinEnergy(const G4double minKineticEnergy) { fMinKineticEnergy = minKineticEnergy; } + void SetMaxKinEnergy(const G4double maxKineticEnergy) { fMaxKineticEnergy = maxKineticEnergy; } + + void Book(); + void EndOfRun(); + + +private: + void CheckInput(); + void DumpAllG4H1IntoRootFile() const; + void DumpAllG4H1IntoFlairFile() const; + + XSHistoManagerMessenger* fMessenger = nullptr; + + G4String fOutputFileName = "all_XS"; + G4String fRootOutputFileName = "all_XS.root"; + G4String fFlairOutputFileName = "all_XS.hist"; + const G4ParticleDefinition* fParticle = nullptr; + const G4Element* fElement = nullptr; + const G4Material* fMaterial = nullptr; + G4int fNumBins = 10000; + G4double fMinKineticEnergy = 1.*keV; + G4double fMaxKineticEnergy = 10.*TeV; + G4String fFunctionName = "none"; + G4String fBinSchemeName = "log"; + G4String fRootEnergyUnit = "MeV"; + + G4VAnalysisManager* fAnalysisManager = nullptr; + std::unordered_map fXSProfileIndex; // key: XS index + // value: histo index from G4VAnalysisManager + + G4int fElasticXSIndex = 0; + G4int fInelasticXSIndex = 1; + G4int fCaptureXSIndex = 2; + G4int fFissionXSIndex = 3; + G4int fChargeExchangeXSIndex = 4; + G4int fTotalXSIndex = 5; + G4int fElasticPerVolumeXSIndex = 6; + G4int fInelasticPerVolumeXSIndex = 7; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#endif diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/include/XSHistoManagerMessenger.hh b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/include/XSHistoManagerMessenger.hh new file mode 100644 index 00000000000..7cd2ad8b346 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/include/XSHistoManagerMessenger.hh @@ -0,0 +1,83 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XSHistoManagerMessenger.hh +/// \brief UI commands for XS study. +// +// Author: G.Hugo, 06 January 2023 +// +// *************************************************************************** +// +// XSHistoManagerMessenger +// +/// UI commands for XS study. +// +// NB: Note that it is not necessary to have POINTERS to the UI commands. +// +// *************************************************************************** + +#ifndef HISTO_MANAGER_MESSENGER_HH +#define HISTO_MANAGER_MESSENGER_HH + +#include "globals.hh" +#include "G4UImessenger.hh" + +#include "G4UIdirectory.hh" +#include "G4UIcmdWithAString.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" + + +class XSHistoManager; + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class XSHistoManagerMessenger: public G4UImessenger { + +public: + + XSHistoManagerMessenger(XSHistoManager* const histoManager); + + virtual void SetNewValue(G4UIcommand*, G4String) override; + + +private: + + XSHistoManager* fHisto = nullptr; + + G4UIcmdWithAString fOutputFileNameCmd; + G4UIcmdWithAString fParticleNameCmd; + G4UIcmdWithAString fElementNameCmd; + G4UIcmdWithAString fNonElementaryMaterialNameCmd; + G4UIcmdWithAnInteger fNumBinsCmd; + G4UIcmdWithADoubleAndUnit fMinKineticEnergyCmd; + G4UIcmdWithADoubleAndUnit fMaxKineticEnergyCmd; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#endif diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/src/DetectorConstruction.cc b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/src/DetectorConstruction.cc new file mode 100644 index 00000000000..9dcf191a3a9 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/src/DetectorConstruction.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. * +// ******************************************************************** +// +/// \file DetectorConstruction.cc +/// \brief Example of empty world volume. +// +// Author: G.Hugo, 06 January 2023 +// +// *************************************************************************** +// +/// DetectorConstruction +// +// Example of empty world volume. +// +// *************************************************************************** + +#include "DetectorConstruction.hh" + +#include "G4Box.hh" +#include "G4NistManager.hh" +#include "G4Material.hh" +#include "G4LogicalVolume.hh" +#include "G4VPhysicalVolume.hh" +#include "G4PVPlacement.hh" + +#include "G4SystemOfUnits.hh" + + +// *************************************************************************** +// Returns a 1-cm sided box filled with G4_Galactic. +// *************************************************************************** +G4VPhysicalVolume* DetectorConstruction::Construct() { + + + G4Box* const worldSolid = new G4Box("World", 1.*CLHEP::cm, 1.*CLHEP::cm, 1.*CLHEP::cm); + + G4Material* const worldMaterial = G4NistManager::Instance()->FindOrBuildMaterial("G4_Galactic"); + G4LogicalVolume* const worldLogicalVol = new G4LogicalVolume(worldSolid, worldMaterial, "World"); + // NB: G4LogicalVolumeStore owns all logical volumes. + + G4VPhysicalVolume* const worldPhysicalVol = new G4PVPlacement(nullptr, + G4ThreeVector(), + worldLogicalVol, + "World", + nullptr, + false, + 0); + // NB: G4PhysicalVolumeStore owns all physical volumes. + + return worldPhysicalVol; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/src/XSHistoManager.cc b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/src/XSHistoManager.cc new file mode 100644 index 00000000000..849aee75b80 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/src/XSHistoManager.cc @@ -0,0 +1,463 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XSHistoManager.cc +/// \brief Create a set of profiles for XS study. +// +// Adapted from hadronic/Hadr00/src/HistoManager.cc +// Author: G.Hugo, 06 January 2023 +// +// *************************************************************************** +// +// XSHistoManager +// +/// Create a set of profiles for XS study. +/// +/// All profiles are G4H1. +/// They are created and filled via G4VAnalysisManager. +/// +/// The profiles can be dumped to all usual formats, including ROOT +/// (via G4VAnalysisManager). +/// They are also dumped in a format compatible with Flair +/// (via tools::histo::flair). +// +// *************************************************************************** + +#include "XSHistoManager.hh" + +#include "G4ios.hh" + +#include "G4ParticleDefinition.hh" +#include "G4ParticleTable.hh" + +#include "G4NistManager.hh" +#include "G4Element.hh" +#include "G4Material.hh" + +#include "G4HadronicProcessStore.hh" + +//#include "G4AnalysisManager.hh" +#include "G4RootAnalysisManager.hh" + +#include "tools_histo_flair.hh" + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +XSHistoManager::XSHistoManager() : + fMessenger(new XSHistoManagerMessenger(this)), + fOutputFileName("all_XS"), + fRootOutputFileName("all_XS.root"), + fFlairOutputFileName("all_XS.hist"), + fParticle(nullptr), + fElement(nullptr), + fMaterial(nullptr), + fNumBins(10000), + fMinKineticEnergy(1.*keV), + fMaxKineticEnergy(10.*TeV), + fFunctionName("none"), + fBinSchemeName("log"), + fRootEnergyUnit("MeV"), + fAnalysisManager(G4RootAnalysisManager::Instance()), + fElasticXSIndex(0), + fInelasticXSIndex(1), + fCaptureXSIndex(2), + fFissionXSIndex(3), + fChargeExchangeXSIndex(4), + fTotalXSIndex(5), + fElasticPerVolumeXSIndex(6), + fInelasticPerVolumeXSIndex(7) +{ + //G4NistManager::Instance()->ListMaterials("all"); +} + + +// *************************************************************************** +// Set output files names: 2 formats supported, ROOT and Flair. +// *************************************************************************** +void XSHistoManager::SetOutputFileName(const G4String& outputFileName) { + fOutputFileName = outputFileName; + fRootOutputFileName = outputFileName + ".root"; + fFlairOutputFileName = outputFileName + ".hist"; +} + + +// *************************************************************************** +// Set the particle considered for XS study. +// *************************************************************************** +void XSHistoManager::SetParticle(const G4String& particleName) { + fParticle = G4ParticleTable::GetParticleTable()->FindParticle(particleName); +} + + +// *************************************************************************** +// Set the target element considered for XS study. +// *************************************************************************** +void XSHistoManager::SetElement(const G4String& elementName) { + fElement = G4NistManager::Instance()->FindOrBuildElement(elementName); + // Also needs to set material! + SetMaterial(elementName); +} + + +// *************************************************************************** +// Set the target material considered for XS study. +// *************************************************************************** +void XSHistoManager::SetMaterial(const G4String& materialName) { + + // Check that material is not set already. + if (fMaterial) { + G4ExceptionDescription msg; + msg << "Please use UI command /allXS/elementName" + << " OR UI command /allXS/nonElementaryMaterialName," + << " BUT NOT BOTH!" + << G4endl; + G4Exception("XSHistoManager::SetMaterial", + "A target material is already defined.", + FatalException, + msg); + } + + fMaterial = G4NistManager::Instance()->FindOrBuildMaterial("G4_" + materialName); +} + + +// *************************************************************************** +// Open output file + create all profiles considered for XS study. +// All profiles are G4H1, created via G4VAnalysisManager. +// *************************************************************************** +void XSHistoManager::Book() { + + // Check all XSHistoManager data is set properly. + CheckInput(); + + // Open file. + if (!fAnalysisManager->OpenFile(fRootOutputFileName)) { + + G4ExceptionDescription msg; + msg << "Booking profiles: cannot open file " << fRootOutputFileName + << G4endl; + G4Exception("XSHistoManager::Book", + "Cannot open file", + FatalException, + msg); + } + G4cout << "### XSHistoManager::Book: Successfully opened file " + << fRootOutputFileName + << " for dumping profiles." + << G4endl; + + // Create all G4H1, and keep track of each histo index in fXSProfileIndex. + const G4int elasticXSProfileIndex = fAnalysisManager->CreateH1("ElasticXS", + "Elastic XS", + fNumBins, + fMinKineticEnergy, + fMaxKineticEnergy, + fRootEnergyUnit, + fFunctionName, + fBinSchemeName); + fXSProfileIndex.insert(std::make_pair(fElasticXSIndex, + elasticXSProfileIndex)); + + const G4int inelasticXSProfileIndex = fAnalysisManager->CreateH1("InelasticXS", + "Inelastic XS", + fNumBins, + fMinKineticEnergy, + fMaxKineticEnergy, + fRootEnergyUnit, + fFunctionName, + fBinSchemeName); + fXSProfileIndex.insert(std::make_pair(fInelasticXSIndex, + inelasticXSProfileIndex)); + + const G4int captureXSProfileIndex = fAnalysisManager->CreateH1("CaptureXS", + "Capture XS", + fNumBins, + fMinKineticEnergy, + fMaxKineticEnergy, + fRootEnergyUnit, + fFunctionName, + fBinSchemeName); + fXSProfileIndex.insert(std::make_pair(fCaptureXSIndex, + captureXSProfileIndex)); + + const G4int fissionXSProfileIndex = fAnalysisManager->CreateH1("FissionXS", + "Fission XS", + fNumBins, + fMinKineticEnergy, + fMaxKineticEnergy, + fRootEnergyUnit, + fFunctionName, + fBinSchemeName); + fXSProfileIndex.insert(std::make_pair(fFissionXSIndex, + fissionXSProfileIndex)); + + const G4int chargeExchangeXSProfileIndex = fAnalysisManager->CreateH1("ChargeExchangeXS", + "Charge exchange XS", + fNumBins, + fMinKineticEnergy, + fMaxKineticEnergy, + fRootEnergyUnit, + fFunctionName, + fBinSchemeName); + fXSProfileIndex.insert(std::make_pair(fChargeExchangeXSIndex, + chargeExchangeXSProfileIndex)); + + const G4int totalXSProfileIndex = fAnalysisManager->CreateH1("TotalXS", + "Total XS", + fNumBins, + fMinKineticEnergy, + fMaxKineticEnergy, + fRootEnergyUnit, + fFunctionName, + fBinSchemeName); + fXSProfileIndex.insert(std::make_pair(fTotalXSIndex, + totalXSProfileIndex)); + + const G4int elasticPerVolumeXSProfileIndex = fAnalysisManager->CreateH1("ElasticPerVolumeXS", + "Elastic XS per volume", + fNumBins, + fMinKineticEnergy, + fMaxKineticEnergy, + fRootEnergyUnit, + fFunctionName, + fBinSchemeName); + fXSProfileIndex.insert(std::make_pair(fElasticPerVolumeXSIndex, + elasticPerVolumeXSProfileIndex)); + + const G4int inelasticPerVolumeXSProfileIndex = fAnalysisManager->CreateH1("InelasticPerVolumeXS", + "Inelastic XS per volume", + fNumBins, + fMinKineticEnergy, + fMaxKineticEnergy, + fRootEnergyUnit, + fFunctionName, + fBinSchemeName); + fXSProfileIndex.insert(std::make_pair(fInelasticPerVolumeXSIndex, + inelasticPerVolumeXSProfileIndex)); +} + + +// *************************************************************************** +// Fill all plots, then dump them into relevant formats. +// *************************************************************************** +void XSHistoManager::EndOfRun() { + G4cout << "### XSHistoManager::EndOfRun: Compute & fill XS for " + << fParticle->GetParticleName() + << " in " << (fElement ? fElement->GetName() : fMaterial->GetName()) + << G4endl; + + G4HadronicProcessStore* const store = G4HadronicProcessStore::Instance(); + + // Fill XS profiles. + const G4double logMinKineticEnergy = std::log10(fMinKineticEnergy); + const G4double logMaxKineticEnergy = std::log10(fMaxKineticEnergy); + const G4double deltaLogKineticEnergy = (logMaxKineticEnergy - logMinKineticEnergy) / fNumBins; + + G4double logKineticEnergy = logMinKineticEnergy - deltaLogKineticEnergy/2.; + + // Loop on all kinetic energies of interest. + for (G4int binIndex = 0; binIndex < fNumBins; ++binIndex) { + + logKineticEnergy += deltaLogKineticEnergy; + const G4double kineticEnergy = std::pow(10., logKineticEnergy) * MeV; + + G4double totalXS = 0.; + if (fElement) { + // ELASTIC (ELEMENTARY MATERIAL) + const G4double elasticXS = store->GetElasticCrossSectionPerAtom(fParticle, + kineticEnergy, + fElement, + fMaterial); + fAnalysisManager->FillH1(fXSProfileIndex[fElasticXSIndex], + kineticEnergy, + elasticXS/barn); + totalXS += elasticXS; + + // INELASTIC (ELEMENTARY MATERIAL) + const G4double inelasticXS = store->GetInelasticCrossSectionPerAtom(fParticle, + kineticEnergy, + fElement, + fMaterial); + fAnalysisManager->FillH1(fXSProfileIndex[fInelasticXSIndex], + kineticEnergy, + inelasticXS/barn); + totalXS += inelasticXS; + + if (fParticle == G4Neutron::Definition()) { + // NEUTRON CAPTURE (ELEMENTARY MATERIAL) + const G4double captureXS = store->GetCaptureCrossSectionPerAtom(fParticle, + kineticEnergy, + fElement, + fMaterial); + fAnalysisManager->FillH1(fXSProfileIndex[fCaptureXSIndex], + kineticEnergy, + captureXS/barn); + totalXS += captureXS; + + // FISSION (ELEMENTARY MATERIAL) + const G4double fissionXS = store->GetFissionCrossSectionPerAtom(fParticle, + kineticEnergy, + fElement, + fMaterial); + totalXS += fissionXS; + fAnalysisManager->FillH1(fXSProfileIndex[fFissionXSIndex], + kineticEnergy, + fissionXS/barn); + } + + // CHARGE EXCHANGE (ELEMENTARY MATERIAL) + const G4double chargeExchangeXS = + store->GetChargeExchangeCrossSectionPerAtom(fParticle, + kineticEnergy, + fElement, + fMaterial); + fAnalysisManager->FillH1(fXSProfileIndex[fChargeExchangeXSIndex], + kineticEnergy, + chargeExchangeXS/barn); + totalXS += chargeExchangeXS; + + // TOTAL (ELEMENTARY MATERIAL) + fAnalysisManager->FillH1(fXSProfileIndex[fTotalXSIndex], + kineticEnergy, + totalXS/barn); + } + + if (fMaterial) { + const G4double materialSurfacicDensity = (fMaterial ? + fMaterial->GetDensity() / (g/cm2) + : 1.); + + // ELASTIC + const G4double elasticPerVolumeXS = + store->GetElasticCrossSectionPerVolume(fParticle, + kineticEnergy, + fMaterial); + fAnalysisManager->FillH1(fXSProfileIndex[fElasticPerVolumeXSIndex], + kineticEnergy, + elasticPerVolumeXS/materialSurfacicDensity); + + // INELASTIC + const G4double inelasticPerVolumeXS = + store->GetInelasticCrossSectionPerVolume(fParticle, + kineticEnergy, + fMaterial); + fAnalysisManager->FillH1(fXSProfileIndex[fInelasticPerVolumeXSIndex], + kineticEnergy, + inelasticPerVolumeXS/materialSurfacicDensity); + } + + } + + + // DUMP G4H1 PLOTS INTO ROOT FILE + DumpAllG4H1IntoRootFile(); + + // DUMP G4H1 PLOTS INTO FLAIR FILE + DumpAllG4H1IntoFlairFile(); + + + // Close and clear fAnalysisManager. + fAnalysisManager->CloseFile(); + fAnalysisManager->Clear(); +} + + +// *************************************************************************** +// Checks that particle and material are set +// (all others have relevant default values). +// *************************************************************************** +void XSHistoManager::CheckInput() { + + if (!fParticle) { + G4ExceptionDescription msg; + msg << "Please add a particle to study XS: UI command /allXS/particleName" + << G4endl; + G4Exception("XSHistoManager::CheckInput()", + "Print XS: no input particle defined.", + FatalException, + msg); + } + + if (!fMaterial) { + G4ExceptionDescription msg; + msg << "Please add a material to study XS:" + << " UI command /allXS/elementName for an elementary material," + << " or UI command /allXS/nonElementaryMaterialName for a compound/mixture material." + << G4endl; + G4Exception("XSHistoManager::CheckInput()", + "Print XS: no target material defined.", + FatalException, + msg); + } +} + + +// *************************************************************************** +// DUMP G4H1 PLOTS INTO ROOT FILE (via G4VAnalysisManager). +// *************************************************************************** +void XSHistoManager::DumpAllG4H1IntoRootFile() const { + + if (!fAnalysisManager->Write()) { + G4ExceptionDescription message; + message << "Could not write ROOT file."; + G4Exception("XSHistoManager::EndOfRun()", + "I/O Error", + FatalException, + message); + } + G4cout << "### All profiles saved to " << fRootOutputFileName << G4endl; +} + + +// *************************************************************************** +// DUMP G4H1 PLOTS INTO FLAIR FILE (via tools::histo::flair). +// *************************************************************************** +void XSHistoManager::DumpAllG4H1IntoFlairFile() const { + + std::ofstream output; + output.open(fFlairOutputFileName, std::ios_base::out); + auto const rootAnalysisManager = dynamic_cast(fAnalysisManager); + + G4int indexInOutputFile = 1; + for (G4int xsIndex = fElasticXSIndex; xsIndex <= fInelasticPerVolumeXSIndex; ++xsIndex) { + + const G4int histoIndex = fXSProfileIndex.at(xsIndex); + const G4String& histoName = fAnalysisManager->GetH1Name(histoIndex); + const auto& histo = rootAnalysisManager->GetH1(histoIndex); + + tools::histo::flair::dumpG4H1ProfileInFlairFormat(output, + indexInOutputFile, + histoName, + histo, + tools::histo::flair::Abscissa::KineticEnergy, + fBinSchemeName); + ++indexInOutputFile; + } + output.close(); + G4cout << "### All profiles saved to " << fFlairOutputFileName << G4endl; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/src/XSHistoManagerMessenger.cc b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/src/XSHistoManagerMessenger.cc new file mode 100644 index 00000000000..892b5f9e0f8 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/src/XSHistoManagerMessenger.cc @@ -0,0 +1,112 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file XSHistoManagerMessenger.cc +/// \brief UI commands for XS study. +// +// Author: G.Hugo, 06 January 2023 +// +// *************************************************************************** +// +// XSHistoManagerMessenger +// +/// UI commands for XS study. +// +// *************************************************************************** + +#include "XSHistoManagerMessenger.hh" + +#include "XSHistoManager.hh" + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +XSHistoManagerMessenger::XSHistoManagerMessenger(XSHistoManager* const histoManager) + : fHisto(histoManager), + fOutputFileNameCmd(G4UIcmdWithAString("/allXS/outputFileName", this)), + fParticleNameCmd(G4UIcmdWithAString("/allXS/particleName", this)), + fElementNameCmd(G4UIcmdWithAString("/allXS/elementName", this)), + fNonElementaryMaterialNameCmd(G4UIcmdWithAString("/allXS/nonElementaryMaterialName", this)), + fNumBinsCmd(G4UIcmdWithAnInteger("/allXS/numBins", this)), + fMinKineticEnergyCmd(G4UIcmdWithADoubleAndUnit("/allXS/minKineticEnergy", this)), + fMaxKineticEnergyCmd(G4UIcmdWithADoubleAndUnit("/allXS/maxKineticEnergy", this)) +{ + fOutputFileNameCmd.SetGuidance("Set output file name (histograms)."); + + fParticleNameCmd.SetGuidance("Set particle name."); + fParticleNameCmd.SetParameterName("particleName", false); + fParticleNameCmd.AvailableForStates(G4State_PreInit, G4State_Idle); + + fElementNameCmd.SetGuidance("Set target element name."); + fElementNameCmd.SetParameterName("elementName", false); + fElementNameCmd.AvailableForStates(G4State_PreInit, G4State_Idle); + + fNonElementaryMaterialNameCmd.SetGuidance("Set target material name (in case not elementary)."); + fNonElementaryMaterialNameCmd.SetParameterName("nonElementaryMaterialName", false); + fNonElementaryMaterialNameCmd.AvailableForStates(G4State_PreInit, G4State_Idle); + + fNumBinsCmd.SetGuidance("Set number of bins in kinetic energy."); + fNumBinsCmd.SetParameterName("numBins", false); + fNumBinsCmd.AvailableForStates(G4State_PreInit, G4State_Idle); + + fMinKineticEnergyCmd.SetGuidance("Set min kinetic energy"); + fMinKineticEnergyCmd.SetParameterName("MinKineticEnergy", false); + fMinKineticEnergyCmd.SetUnitCategory("Energy"); + fMinKineticEnergyCmd.AvailableForStates(G4State_PreInit, G4State_Idle); + + fMaxKineticEnergyCmd.SetGuidance("Set max kinetic energy"); + fMaxKineticEnergyCmd.SetParameterName("MaxKineticEnergy", false); + fMaxKineticEnergyCmd.SetUnitCategory("Energy"); + fMaxKineticEnergyCmd.AvailableForStates(G4State_PreInit, G4State_Idle); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void XSHistoManagerMessenger::SetNewValue(G4UIcommand* command, G4String value) { + + if (command == &fOutputFileNameCmd) { + fHisto->SetOutputFileName(value); + } + else if (command == &fParticleNameCmd) { + fHisto->SetParticle(value); + } + else if (command == &fElementNameCmd) { + fHisto->SetElement(value); + } + else if (command == &fNonElementaryMaterialNameCmd) { + fHisto->SetMaterial(value); + } + else if (command == &fNumBinsCmd) { + fHisto->SetNumberOfBins(fNumBinsCmd.GetNewIntValue(value)); + } + else if (command == &fMinKineticEnergyCmd) { + fHisto->SetMinKinEnergy(fMinKineticEnergyCmd.GetNewDoubleValue(value)); + } + else if (command == &fMaxKineticEnergyCmd) { + fHisto->SetMaxKinEnergy(fMaxKineticEnergyCmd.GetNewDoubleValue(value)); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/study_all_XS.flair b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/study_all_XS.flair new file mode 100644 index 00000000000..92fbc66a493 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/study_all_XS.flair @@ -0,0 +1,248 @@ +# flair project file +Version: 300 +Mode: fluka +Title: Study all XS. +md5: d41d8cd98f00b204e9800998ecf8427e +Input: +EndInput + +Page: Flair +plotengine: Gnuplot + +Plot: elastic_XS_elementary_material + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + |set ytics add ('1pb' 1e-12, '10pb' 1e-11, '100pb' 1e-10, '1nb' 1e-9, '10nb' 1e-8,'100nb' 1e-7,'1ub' 1e-6, '10ub' 1e-5, '100ub' 1e-4, '1mb' 1e-3, '10mb' 0.01, '100mb' 0.1, '1b' 1, '2b' 2, '3b' 3, '10b' 10, '100b' 100, '1kb' 1000, '10kb' 1e4, '100kb' 1e5, '1Mb' 1e6) + file.0: results/G4_HP_CernFLUKAHadronInelastic/all_XS.hist + file.1: results/FTFP_BERT_HP/all_XS.hist + grid: 1 + index: 1 + lc.0: green + lc.1: dark-blue + lw.0: 2 + name.0: G4_HP_CernFLUKAHadronInelastic + name.1: FTFP_BERT_HP + ndetectors: 2 + title: Proton on Pb: Elastic XS + with.0: histogram + with.1: histogram + xlabel: Kinetic Energy + xlog: 1 + xmin: 1E-3 + y.0: 2 + y.1: 2 + ylabel: XS + ylog: 1 + ymax: 10 + ymin: 1 +End +Plot: inelastic_XS_elementary_material + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + |set ytics add ('1pb' 1e-12, '10pb' 1e-11, '100pb' 1e-10, '1nb' 1e-9, '10nb' 1e-8,'100nb' 1e-7,'1ub' 1e-6, '10ub' 1e-5, '100ub' 1e-4, '1mb' 1e-3, '10mb' 0.01, '100mb' 0.1, '1b' 1, '2b' 2, '3b' 3, '10b' 10, '100b' 100, '1kb' 1000, '10kb' 1e4, '100kb' 1e5, '1Mb' 1e6) + det.0: 1 + det.1: 1 + file.0: results/G4_HP_CernFLUKAHadronInelastic/all_XS.hist + file.1: results/FTFP_BERT_HP/all_XS.hist + grid: 1 + index: 2 + lc.0: green + lc.1: dark-blue + lw.0: 2 + name.0: G4_HP_CernFLUKAHadronInelastic + name.1: FTFP_BERT_HP + ndetectors: 2 + title: Proton on Pb: Inelastic XS + with.0: histogram + with.1: histogram + xlabel: Kinetic Energy + xlog: 1 + xmin: 1E-3 + y.0: 2 + y.1: 2 + ylabel: XS + ylog: 1 + ymax: 3 + ymin: 1 +End +Plot: capture_XS_elementary_material + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + |set ytics add ('1pb' 1e-12, '10pb' 1e-11, '100pb' 1e-10, '1nb' 1e-9, '10nb' 1e-8,'100nb' 1e-7,'1ub' 1e-6, '10ub' 1e-5, '100ub' 1e-4, '1mb' 1e-3, '10mb' 0.01, '100mb' 0.1, '1b' 1, '2b' 2, '3b' 3, '10b' 10, '100b' 100, '1kb' 1000, '10kb' 1e4, '100kb' 1e5, '1Mb' 1e6) + det.0: 2 + det.1: 2 + file.0: results/G4_HP_CernFLUKAHadronInelastic/all_XS.hist + file.1: results/FTFP_BERT_HP/all_XS.hist + grid: 1 + index: 3 + lc.0: green + lc.1: dark-blue + lw.0: 2 + name.0: G4_HP_CernFLUKAHadronInelastic + name.1: FTFP_BERT_HP + ndetectors: 2 + title: Proton on Pb: Capture XS + with.0: histogram + with.1: histogram + xlabel: Kinetic Energy + xlog: 1 + xmin: 1E-3 + y.0: 2 + y.1: 2 + ylabel: XS +End +Plot: fission_XS_elementary_material + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + |set ytics add ('1pb' 1e-12, '10pb' 1e-11, '100pb' 1e-10, '1nb' 1e-9, '10nb' 1e-8,'100nb' 1e-7,'1ub' 1e-6, '10ub' 1e-5, '100ub' 1e-4, '1mb' 1e-3, '10mb' 0.01, '100mb' 0.1, '1b' 1, '2b' 2, '3b' 3, '10b' 10, '100b' 100, '1kb' 1000, '10kb' 1e4, '100kb' 1e5, '1Mb' 1e6) + det.0: 3 + det.1: 3 + file.0: results/G4_HP_CernFLUKAHadronInelastic/all_XS.hist + file.1: results/FTFP_BERT_HP/all_XS.hist + grid: 1 + index: 4 + lc.0: green + lc.1: dark-blue + lw.0: 2 + name.0: G4_HP_CernFLUKAHadronInelastic + name.1: FTFP_BERT_HP + ndetectors: 2 + title: Proton on Pb: Fission XS + with.0: histogram + with.1: histogram + xlabel: Kinetic Energy + xlog: 1 + xmin: 1E-3 + y.0: 2 + y.1: 2 + ylabel: XS +End +Plot: charge_exchange_XS_elementary_material + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + |set ytics add ('1pb' 1e-12, '10pb' 1e-11, '100pb' 1e-10, '1nb' 1e-9, '10nb' 1e-8,'100nb' 1e-7,'1ub' 1e-6, '10ub' 1e-5, '100ub' 1e-4, '1mb' 1e-3, '10mb' 0.01, '100mb' 0.1, '1b' 1, '2b' 2, '3b' 3, '10b' 10, '100b' 100, '1kb' 1000, '10kb' 1e4, '100kb' 1e5, '1Mb' 1e6) + det.0: 4 + det.1: 4 + file.0: results/G4_HP_CernFLUKAHadronInelastic/all_XS.hist + file.1: results/FTFP_BERT_HP/all_XS.hist + grid: 1 + index: 5 + lc.0: green + lc.1: dark-blue + lw.0: 2 + name.0: G4_HP_CernFLUKAHadronInelastic + name.1: FTFP_BERT_HP + ndetectors: 2 + title: Proton on Pb: Charge exchange XS + with.0: histogram + with.1: histogram + xlabel: Kinetic Energy + xlog: 1 + xmin: 1E-3 + y.0: 2 + y.1: 2 + ylabel: XS +End +Plot: total_XS_elementary_material + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + |set ytics add ('1pb' 1e-12, '10pb' 1e-11, '100pb' 1e-10, '1nb' 1e-9, '10nb' 1e-8,'100nb' 1e-7,'1ub' 1e-6, '10ub' 1e-5, '100ub' 1e-4, '1mb' 1e-3, '10mb' 0.01, '100mb' 0.1, '1b' 1, '2b' 2, '3b' 3, '10b' 10, '100b' 100, '1kb' 1000, '10kb' 1e4, '100kb' 1e5, '1Mb' 1e6) + det.0: 5 + det.1: 5 + file.0: results/G4_HP_CernFLUKAHadronInelastic/all_XS.hist + file.1: results/FTFP_BERT_HP/all_XS.hist + grid: 1 + index: 6 + lc.0: green + lc.1: dark-blue + lw.0: 2 + name.0: G4_HP_CernFLUKAHadronInelastic + name.1: FTFP_BERT_HP + ndetectors: 2 + title: Proton on Pb: Total XS + with.0: histogram + with.1: histogram + xlabel: Kinetic Energy + xlog: 1 + xmin: 1E-6 + y.0: 2 + y.1: 2 + ylabel: XS + ylog: 1 +End +Plot: elastic_XS_volume + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 6 + det.1: 6 + file.0: results/G4_HP_CernFLUKAHadronInelastic/all_XS.hist + file.1: results/FTFP_BERT_HP/all_XS.hist + grid: 1 + index: 7 + lc.0: green + lc.1: dark-blue + lw.0: 2 + name.0: G4_HP_CernFLUKAHadronInelastic + name.1: FTFP_BERT_HP + ndetectors: 2 + title: Proton on Pb: Elastic XS in volume (scaled by density) + with.0: histogram + with.1: histogram + xlabel: Kinetic Energy + xlog: 1 + xmin: 1E-6 + y.0: 2 + y.1: 2 + ylabel: XS [barn / (g/cm2)] + ylog: 1 +End +Plot: inelastic_XS_volume + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 7 + det.1: 7 + file.0: results/G4_HP_CernFLUKAHadronInelastic/all_XS.hist + file.1: results/FTFP_BERT_HP/all_XS.hist + grid: 1 + index: 8 + lc.0: green + lc.1: dark-blue + lw.0: 2 + name.0: G4_HP_CernFLUKAHadronInelastic + name.1: FTFP_BERT_HP + ndetectors: 2 + title: Proton on Pb: Inelastic XS in volume (scaled by density) + with.0: histogram + with.1: histogram + xlabel: Kinetic Energy + xlog: 1 + xmin: 1E-6 + y.0: 2 + y.1: 2 + ylabel: XS [barn / (g/cm2)] + ylog: 1 +End diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/.README.txt b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/.README.txt new file mode 100644 index 00000000000..c9066447d34 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/.README.txt @@ -0,0 +1,190 @@ +/// @file "hadronic/FlukaCern/ProcessLevel/FinalState/.README.txt" +/// @brief Example exFlukaCernFinalState README + +/*! \page exFlukaCernFinalState Example : exFlukaCernFinalState + + +# Description + +This example allows the simulation of hadron-nucleus inelastic nuclear interactions, +and the study of the resulting final states. + +It is an adaptation of `Hadr09` example.
+It offers all `Hadr09` features, and adds the possibility +of accessing hadron-nucleus inelastic nuclear interaction final states FROM `FLUKA`. + +With respect to the `Hadr09` example, the program also adds +the possibility of PLOTTING the final state: +secondaries energy spectra, and residual nuclei distributions.
+All plots (created via the G4 analysis manager) can be dumped +to any of the usually supported formats (e.g. ROOT format), +as well as in a Flair-compatible format.
+Regarding the extension of `G4H1` to insure `Flair` compatibility, +see `geant4/examples/extended/hadronic/FlukaCern/utils`. + +The class `HadronicGenerator` is the "generator".
+The main hadronic models (`CernFLUKAHadronInelastic`, `FTFP`, `QGSP`, `BERT`, `BIC`, `IonBIC`, `INCL`) are available.
+See `include/HadronicGenerator.hh` for more detailed information.
+In the `HadronicGenerator`, one can activate/desactivate coalescence and heavy fragments evaporation for `CernFLUKAHadronInelastic`. + +The main, `HadNucIneEvents.cc`, shows an example of how to use the event generator.
+In `HadNucIneEvents.cc`, one can select the physics models, +as well as the projectile hadron, its energy, its direction, the target material, and the number of collisions. + +Note that the Geant4 run manager is not used. + +Before you can access the `FLUKA` hadron-nucleus inelastic models in this example, +you will need to install and setup `FLUKA` and its interface.
+See the compulsory "Dependencies" paragraph below. + +A version of the interface to `FLUKA` is directly located at `geant4/examples/extended/hadronic/FlukaCern/FlukaInterface`.
+Note that for consistency, all calls to the random engine rely on the G4 random engine (including the calls from within the downloaded `FLUKA` release; see the `FlukaInterface` `Makefile` to see how this is handled). + + +# FLUKA inelastic hadron-nucleus interactions + +Hadron-NUCLEON interaction models are based on resonance production and decay below a few GeV, +and on the Dual Parton model above.
+Hadron-NUCLEUS interactions: the PEANUT package includes +a detailed Generalised Intra-Nuclear Cascade (GINC) and a preequilibrium stage, +followed by equilibrium processes: evaporation, fission, Fermi break-up, gamma deexcitation. +\verbatim +A. Ferrari and P. Sala, “The Physics of High Energy Reactions,” in Proc. Workshop on Nuclear Reaction Data and Nuclear Reactors Physics, Design and Safety, p. 424, World Scientific, 1998. +A. Ferrari and P. Sala, “Nuclear reactions in Monte Carlo codes,” Radiat. Prot. Dosimetry, vol. 99, no. 1-4, pp. 29–38, 2002. +\endverbatim + + +# Dependencies + +### Environment +- **gcc** >= 7 (Linux) and **gcc** >= 9 (MacOS)
+In practice, a recent version is recommended, at least `gcc >=10`. +\verbatim +gcc --version +\endverbatim +
+ +- **CMake** >= 3.16...3.21
+\verbatim +cmake3 --version +\endverbatim +
+ +- **G4** >= 11.0.3 (Not tested on older G4 releases: might still work, but with no guarantee).
+IMPORTANT: YOU NEED TO SOURCE YOUR G4 ENVIRONMENT.
+It needs to be sourced in whichever terminal you want to build / run a G4 application with the `FLUKA` interface. +\verbatim +source path_to_geant4/install/bin/geant4.sh +which geant4-config # NB: Your geant4-config should support the modern CMake way of building G4. +\endverbatim +
+ +- **Easy setup on lxplus** (lxplus7):
+All you need to do on lxplus, to setup an environment satisfying all the conditions above, is, for example: +\verbatim +source /cvmfs/sft.cern.ch/lcg/releases/gcc/10.1.0/x86_64-centos7/setup.sh +source /cvmfs/geant4.cern.ch/geant4/11.1/x86_64-centos7-gcc10-optdeb-MT/CMake-setup.sh +# NB: Your geant4.sh is at: /cvmfs/geant4.cern.ch/geant4/11.1/x86_64-centos7-gcc10-optdeb-MT/bin/geant4.sh +\endverbatim +
+ +### FLUKA4 +Release: >= **4-3.2** + +Please install the latest `FLUKA` release.
+(1) You first need to register (and accept the licence when relevant): https://fluka.cern/download/registration
+(2) You can then download the `binary libraries` (or potentially the `source code` package, depending on your case): +https://fluka.cern/download/latest-fluka-release.
+(3) Follow the `FLUKA` installation instructions: https://fluka.cern/documentation/installation
+In particular, for a Linux/MacOS install: https://fluka.cern/documentation/installation/fluka-linux-macos
+They will show you how to setup `FLUKA`.
+If (and only if) you went for the source code package option, you will need to build `fluka`, and, in addition, to do `make cpp_headers` at `path_to_fluka/src`.
+(4) Eventually, all you need are the headers `fluka_repo/include`, libraries `fluka_repo/lib`, and data `fluka_repo/data`. Check that they are not empty.
+Do not forget to add `/path_to_fluka/bin` to your `PATH`. Check with `which fluka`. + +### FlukaInterface +A version of the G4-FLUKA interface (`FLUKA` hadron-nucleus inelastic physics) +is located at `geant4/examples/extended/hadronic/FlukaCern/FlukaInterface`.
+You will first need to build the interface to `FLUKA`, and create the environment scripts.
+\verbatim +cd geant4/examples/extended/hadronic/FlukaCern/FlukaInterface/ +# Check with `which fluka` that fluka executable is added to your `PATH`. +source path_to_geant4/install/bin/geant4.sh +make interface +make env # Creates `env_FLUKA.sh` and `env_FLUKA_G4_interface.sh` +\endverbatim +IMPORTANT: `env_FLUKA_G4_interface.sh` needs to be sourced in whichever terminal +you want to build / run a G4 application with the `FLUKA` interface. + + +# Build this example + +\verbatim +cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/ +# Check with `which fluka` that fluka executable is added to your `PATH`. +source path_to_geant4/install/bin/geant4.sh +source ../../FlukaInterface/env_FLUKA_G4_interface.sh +mkdir build +cd build +cmake3 -DG4_USE_FLUKA=1 .. +make -j8 +\endverbatim + + +# Run this example + +\verbatim +cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/ +# Check with `which fluka` that fluka executable is added to your `PATH`. +source path_to_geant4/install/bin/geant4.sh +source ../../FlukaInterface/env_FLUKA_G4_interface.sh +./build/HadNucIneEvents +\endverbatim + +# Study the final states +All plots are dumped at the end of the run in `all_secondaries.ext`.
+2 formats are supported: `ROOT` and `Flair`. + +- You can use `ROOT`: +\verbatim +cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/ +root all_secondaries.root +\endverbatim +
+- Alternatively, the use of `Flair` is also supported.
+Please see http://flair.web.cern.ch/flair/download.html for `Flair` download.
+`Flair` tutorials are also available from that website.
+You can download the package corresponding to your distribution at the top of the page +(no need for `geoviewer`, which is for geometry display). Then look at the requirements & installation instructions at the bottom of the page.
+If you face issues installing `Flair`, you can get support at: https://fluka-forum.web.cern.ch/c/installation/ +

+An example file, showing how to directly visualize the final states with Flair, is provided in this G4 example.
+By default, it directly provides comparison plots: +`FTFP_BERT` versus `QGSP_BERT` versus `CernFLUKAHadronInelastic`, 7TeV proton on C.
+You can very easily adapt it to any study of interest (choice of physics models, choice of secondaries, etc). +\verbatim +cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/ +mkdir -p results/FLUKAHadronInelastic results/FTFP_BERT results/QGSP_BERT + +# Choose physics case (modify HadNucIneEvents.cc), compile the G4 example, then run physics case: +cd results/FLUKAHadronInelastic +../../build/HadNucIneEvents +# Etc for EACH physics case: FLUKAHadronInelastic, FTFP_BERT, QGSP_BERT. + +cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/ +./update_final_state_flair_file.sh # Update `Det` indices in Flair file, to the ones observed in your simulation. +flair study_final_state.flair & +\endverbatim +In the `Plot` tab, you can select the plot of interest in the left column, +and then click `Plot` (top banner, yellow button).
+You can select a physics case by clicking on its name in the `Detectors` box (center). You can then decide to change its color, line width (`Options` box). You can decide to plot it or not, by selecting / unselecting `graph` in the `Show` box (in the center).
+IMPORTANT: You can select any secondary data (or residual nuclei data) which was created, +by chosing in the `Det` selection (button on the right).
+IMPORTANT: If a secondary does not appear in the `Det` drop-down menu, it means it is not part of the final state. In that case, you will want to unselect `graph`, so that no other secondary (see `Det`) is plotted.
+You can change the path of the data file by clicking on the folder button (button on the right).
+You can set the plots extrema, as well as select or unselect the log format, in the top right corner. + + +*/ + + diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/CMakeLists.txt b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/CMakeLists.txt new file mode 100644 index 00000000000..f1bd435e070 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/CMakeLists.txt @@ -0,0 +1,72 @@ +#---------------------------------------------------------------------------- +# Setup the project +cmake_minimum_required(VERSION 3.16...3.21) +project(HadNucIneEvents) + +#---------------------------------------------------------------------------- +# Find Geant4 package, activating all available UI and Vis drivers by default +# You can set WITH_GEANT4_UIVIS to OFF via the command line or ccmake/cmake-gui +# to build a batch mode only executable +# +option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON) +if(WITH_GEANT4_UIVIS) + find_package(Geant4 REQUIRED ui_all vis_all) +else() + find_package(Geant4 REQUIRED) +endif() + +#---------------------------------------------------------------------------- +# Setup Geant4 include directories and compile definitions +# +include(${Geant4_USE_FILE}) + +#---------------------------------------------------------------------------- +# Check whether FLUKA should be used or not +set(G4_USE_FLUKA OFF CACHE BOOL "Using FLUKA") +if(G4_USE_FLUKA) + message(STATUS "G4_USE_FLUKA=ON : Using FLUKA interface for building ${PROJECT_SOURCE_DIR}") + add_definitions(-DG4_USE_FLUKA) + find_package(FLUKAInterface REQUIRED) + if(FLUKAInterface_FOUND) + message(STATUS "FLUKA cmake module was found : ${CMAKE_MODULE_PATH}") + else() + message(FATAL_ERROR "FLUKA cmake module was NOT found! Please add one.") + endif() +else() + message(STATUS "G4_USE_FLUKA=OFF : NOT using FLUKA interface for building ${PROJECT_SOURCE_DIR}. \n \ + If ever you want to use the FLUKA interface, please repeat cmake command with -DG4_USE_FLUKA=1") +endif() + +#---------------------------------------------------------------------------- +# Locate sources and headers for this project +# +include_directories(${PROJECT_SOURCE_DIR}/include + ${PROJECT_SOURCE_DIR}/../../utils/include + ${FLUKAInterface_INCLUDE_DIR} + ${Geant4_INCLUDE_DIR}) +file(GLOB sources ${PROJECT_SOURCE_DIR}/../../utils/src/*.cc ${PROJECT_SOURCE_DIR}/src/*.cc) +file(GLOB headers ${PROJECT_SOURCE_DIR}/../../utils/include/*.hh ${PROJECT_SOURCE_DIR}/include/*.hh) + +#---------------------------------------------------------------------------- +# Add the executable, and link it to the Geant4 libraries +# +add_executable(HadNucIneEvents HadNucIneEvents.cc ${sources} ${headers}) +target_link_libraries(HadNucIneEvents ${FLUKAInterface_LIBRARIES} ${Geant4_LIBRARIES}) + +#---------------------------------------------------------------------------- +# Copy all scripts to the build directory, i.e. the directory in which we +# build HadNucIneEvents. This is so that we can run the executable directly because it +# relies on these scripts being in the current working directory. +# +foreach(_script ${HadNucIneEvents_SCRIPTS}) + configure_file( + ${PROJECT_SOURCE_DIR}/${_script} + ${PROJECT_BINARY_DIR}/${_script} + COPYONLY + ) +endforeach() + +#---------------------------------------------------------------------------- +# Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX +# +install(TARGETS HadNucIneEvents DESTINATION bin) diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/HadNucIneEvents.cc b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/HadNucIneEvents.cc new file mode 100644 index 00000000000..900c621370b --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/HadNucIneEvents.cc @@ -0,0 +1,441 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +/// \file HadNucIneEvents.cc +/// \brief Main program, +/// hadronic/FlukaCern/ProcessLevel/FinalState example. +// +// Author: A. Ribbon, 8 November 2020 +// Modified: G. Hugo, 8 December 2022 +// +//------------------------------------------------------------------------ +// +// HadNucIneEvents +// +/// This program is an adaptation of Hadr09 example. +/// It offers all Hadr09 features, and adds the possibility of +/// accessing hadron-nucleus inelastic interactions final states from FLUKA. +/// +/// With respect to the Hadr09 example, +/// the program also adds the possibility of plotting the final state: +/// all encountered secondaries spectra are automatically plotted, +/// as well as the residual nuclei distributions. +/// All plots (created via the G4 analysis manager) can be dumped +/// to any of the usually supported formats (e.g. ROOT format), +/// but also in a Flair-compatible format. +/// +/// The final states (i.e. secondary particles) produced by +/// hadron-nuclear inelastic collisions are handled by HadronicGenerator. +/// +/// The use of the class Hadronic Generator is very simple: +/// the constructor needs to be invoked only once - specifying the name +/// of the "physics case" to consider ("CFLUKAHI" will be +/// considered as default if the name is not specified) - and then one +/// method needs to be called at each collision, specifying the type of +/// collision (hadron, energy, direction, material) to be simulated. +/// The class HadronicGenerator is expected to work also in a +/// multi-threaded environment with "external" threads (i.e. threads +/// that are not necessarily managed by Geant4 run-manager): +/// each thread should have its own instance of the class. +/// +/// See the string "***LOOKHERE***" below for the setting of parameters +/// of this example: the "physics case", the set of possibilities from +/// which to sample the projectile +/// a list of hadrons is possible from which to sample at each collision), +/// the kinetic energy of the projectile (which can be sampled within +/// an interval), whether the direction of the projectile is fixed or +/// sampled at each collision, the target material (a list of materials +/// is possible, from which the target material can be sampled at each +/// collision, and then from this target material, the target nucleus +/// will be chosen randomly by Geant4 itself), and whether to print out +/// some information or not and how frequently. +/// Once a well-defined type of hadron-nucleus +/// inelastic collision has been chosen, the method +/// HadronicGenerator::GenerateInteraction +/// returns the secondaries produced by that interaction (in the form +/// of a G4VParticleChange object). +/// +/// Here by default, an already well-defined type of hadron-nucleus +/// inelastic collision is selected +/// (specific hadron, at a given kinetic energy and direction, +/// on a specific material). +/// The initial random seed is not set randomly, +/// so that results are reproducible from one simulation to the next. +/// +/// Use: build/HadNucIneEvents +// +//------------------------------------------------------------------------ + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include +#include + +#include "globals.hh" +#include "G4ios.hh" +#include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" +#include "G4Material.hh" +#include "G4NistManager.hh" +#include "G4VParticleChange.hh" +#include "G4UnitsTable.hh" +#include "G4SystemOfUnits.hh" +#include "HadronicGenerator.hh" +#include "G4GenericIon.hh" +#include "G4ProcessManager.hh" +#include "G4ParticleTable.hh" +#include "G4IonTable.hh" +#include "CLHEP/Random/Randomize.h" +#include "CLHEP/Random/Ranlux64Engine.h" +#include "FinalStateHistoManager.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4int main(G4int argc, char** argv) { + + G4cout << "=== Test of the HadronicGenerator ===" << G4endl; + + // See the HadronicGenerator class for the possibilities and meaning of the "physics cases". + // ( In short, it is the name of the Geant4 hadronic model used for the simulation of + // the collision, with the possibility of having a transition between two models in + // a given energy interval, as in physics lists. ) + + //***LOOKHERE*** PHYSICS CASE + G4String namePhysics = "CFLUKAHI"; + //const G4String namePhysics = "FTFP_BERT"; + //const G4String namePhysics = "FTFP_BERT_ATL"; + //const G4String namePhysics = "QGSP_BERT"; + //const G4String namePhysics = "QGSP_BIC"; + //const G4String namePhysics = "FTFP_INCLXX"; + //const G4String namePhysics = "FTFP"; + //const G4String namePhysics = "QGSP"; + //const G4String namePhysics = "BERT"; + //const G4String namePhysics = "BIC"; + //const G4String namePhysics = "IonBIC"; + //const G4String namePhysics = "INCL"; + + // The kinetic energy of the projectile will be sampled randomly, with flat probability + // in the interval [minEnergy, maxEnergy]. + G4double minEnergy = 7.*CLHEP::TeV; //***LOOKHERE*** HADRON PROJECTILE MIN Ekin + G4double maxEnergy = 7.*CLHEP::TeV; //***LOOKHERE*** HADRON PROJECTILE MAX Ekin + + G4int numCollisions = 100000; //***LOOKHERE*** NUMBER OF COLLISIONS + //const G4int numCollisions = 100; // DEBUG + + // IMPORTANT - TESTING ONLY: + // OVERWRITES DEFAULT PHYSICS CASE AND NUMBER OF EVENTS + std::vector args(argv, argv + argc); + if (args.size() == 2 && args[1] == "--test") { + namePhysics = G4String("FTFP_BERT"); + numCollisions = 10; + } + + // Enable or disable the print out of this program: if enabled, the number of secondaries + // produced in each collisions is printed out; moreover, once every "printingGap" + // collisions, the list of secondaries is printed out. + const G4bool isPrintingEnabled = true; //***LOOKHERE*** PRINT OUT ON/OFF + const G4int printingGap = 100; //***LOOKHERE*** GAP IN PRINTING + + // Vector of Geant4 names of hadron projectiles: one of this will be sampled randomly + // (with uniform probability) for each collision, when the projectile is not an ion. + // Note: comment out the corresponding line in order to exclude a particle. + std::vector< G4String > vecProjectiles; //***LOOKHERE*** POSSIBLE HADRON PROJECTILES + //vecProjectiles.push_back( "pi-" ); + //Note: vecProjectiles.push_back( "pi0" ); // Excluded because too short-lived + //vecProjectiles.push_back( "pi+" ); + //vecProjectiles.push_back( "kaon-" ); + //vecProjectiles.push_back( "kaon+" ); + //vecProjectiles.push_back( "kaon0L" ); + //vecProjectiles.push_back( "kaon0S" ); + //Note: vecProjectiles.push_back( "eta" ); // Excluded because too short-lived + //Note: vecProjectiles.push_back( "eta_prime" ); // Excluded because too short-lived + vecProjectiles.push_back( "proton" ); + //vecProjectiles.push_back( "neutron" ); + //vecProjectiles.push_back( "deuteron" ); + //vecProjectiles.push_back( "triton" ); + //vecProjectiles.push_back( "He3" ); + //vecProjectiles.push_back( "alpha" ); + //vecProjectiles.push_back( "lambda" ); + //vecProjectiles.push_back( "sigma-" ); + //Note: vecProjectiles.push_back( "sigma0" ); // Excluded because too short-lived + //vecProjectiles.push_back( "sigma+" ); + //vecProjectiles.push_back( "xi-" ); + //vecProjectiles.push_back( "xi0" ); + //vecProjectiles.push_back( "omega-" ); + //vecProjectiles.push_back( "anti_proton" ); + //vecProjectiles.push_back( "anti_neutron" ); + //vecProjectiles.push_back( "anti_lambda" ); + //vecProjectiles.push_back( "anti_sigma-" ); + //Note: vecProjectiles.push_back( "anti_sigma0" ); // Excluded because too short-lived + //vecProjectiles.push_back( "anti_sigma+" ); + //vecProjectiles.push_back( "anti_xi-" ); + //vecProjectiles.push_back( "anti_xi0" ); + //vecProjectiles.push_back( "anti_omega-" ); + //vecProjectiles.push_back( "anti_deuteron" ); + //vecProjectiles.push_back( "anti_triton" ); + //vecProjectiles.push_back( "anti_He3" ); + //vecProjectiles.push_back( "anti_alpha" ); + // Charm and bottom hadrons + //vecProjectiles.push_back( "D+" ); + //vecProjectiles.push_back( "D-" ); + //vecProjectiles.push_back( "D0" ); + //vecProjectiles.push_back( "anti_D0" ); + //vecProjectiles.push_back( "Ds+" ); + //vecProjectiles.push_back( "Ds-" ); + //Note: vecProjectiles.push_back( "etac" ); // Excluded because too short-lived + //Note: vecProjectiles.push_back( "J/psi" ); // Excluded because too short-lived + //vecProjectiles.push_back( "B+" ); + //vecProjectiles.push_back( "B-" ); + //vecProjectiles.push_back( "B0" ); + //vecProjectiles.push_back( "anti_B0" ); + //vecProjectiles.push_back( "Bs0" ); + //vecProjectiles.push_back( "anti_Bs0" ); + //vecProjectiles.push_back( "Bc+" ); + //vecProjectiles.push_back( "Bc-" ); + //Note: vecProjectiles.push_back( "Upsilon" ); // Excluded because too short-lived + //vecProjectiles.push_back( "lambda_c+" ); + //vecProjectiles.push_back( "anti_lambda_c+" ); + //Note: vecProjectiles.push_back( "sigma_c+" ); // Excluded because too short-lived + //Note: vecProjectiles.push_back( "anti_sigma_c+" ); // Excluded because too short-lived + //Note: vecProjectiles.push_back( "sigma_c0" ); // Excluded because too short-lived + //Note: vecProjectiles.push_back( "anti_sigma_c0" ); // Excluded because too short-lived + //Note: vecProjectiles.push_back( "sigma_c++" ); // Excluded because too short-lived + //Note: vecProjectiles.push_back( "anti_sigma_c++" ); // Excluded because too short-lived + //vecProjectiles.push_back( "xi_c+" ); + //vecProjectiles.push_back( "anti_xi_c+" ); + //vecProjectiles.push_back( "xi_c0" ); + //vecProjectiles.push_back( "anti_xi_c0" ); + //vecProjectiles.push_back( "omega_c0" ); + //vecProjectiles.push_back( "anti_omega_c0" ); + //vecProjectiles.push_back( "lambda_b" ); + //vecProjectiles.push_back( "anti_lambda_b" ); + //Note: vecProjectiles.push_back( "sigma_b+" ); // Excluded because too short-lived + //Note: vecProjectiles.push_back( "anti_sigma_b+" ); // Excluded because too short-lived + //Note: vecProjectiles.push_back( "sigma_b0" ); // Excluded because too short-lived + //Note: vecProjectiles.push_back( "sigma_b0" ); // Excluded because too short-lived + //Note: vecProjectiles.push_back( "sigma_b-" ); // Excluded because too short-lived + //Note: vecProjectiles.push_back( "anti_sigma_b-" ); // Excluded because too short-lived + //vecProjectiles.push_back( "xi_b0" ); + //vecProjectiles.push_back( "anti_xi_b0" ); + //vecProjectiles.push_back( "xi_b-" ); + //vecProjectiles.push_back( "anti_xi_b-" ); + //vecProjectiles.push_back( "omega_b-" ); + //vecProjectiles.push_back( "anti_omega_b-" ); + + G4ParticleDefinition* projectileNucleus = nullptr; + G4GenericIon* gion = G4GenericIon::GenericIon(); + gion->SetProcessManager( new G4ProcessManager( gion ) ); + G4ParticleTable* partTable = G4ParticleTable::GetParticleTable(); + G4IonTable* ions = partTable->GetIonTable(); + partTable->SetReadiness(); + ions->CreateAllIon(); + ions->CreateAllIsomer(); + + //***LOOKHERE*** HADRON (false) OR ION (true) PROJECTILE ? + const G4bool isProjectileIon = false; + if ( isProjectileIon ) { + minEnergy = 40.0*13.0*CLHEP::GeV; //***LOOKHERE*** ION PROJECTILE MIN Ekin + maxEnergy = 40.0*13.0*CLHEP::GeV; //***LOOKHERE*** ION PROJECTILE MAX Ekin + G4int ionZ = 18, ionA = 40; //***LOOKHERE*** ION PROJECTILE (Z, A) + projectileNucleus = partTable->GetIonTable()->GetIon( ionZ, ionA, 0.0 ); + } + + // Vector of Geant4 NIST names of materials: one of this will be sampled randomly + // (with uniform probability) for each collision and used as target material. + // Note: comment out the corresponding line in order to exclude a material; + // or, vice versa, add a new line to extend the list with another material. + std::vector< G4String > vecMaterials; //***LOOKHERE*** : NIST TARGET MATERIALS + //vecMaterials.push_back( "G4_H" ); + //vecMaterials.push_back( "G4_He" ); + //vecMaterials.push_back( "G4_Be" ); + vecMaterials.push_back( "G4_C" ); + //vecMaterials.push_back( "G4_Al" ); + //vecMaterials.push_back( "G4_Si" ); + //vecMaterials.push_back( "G4_Sc" ); + //vecMaterials.push_back( "G4_Ar" ); + //vecMaterials.push_back( "G4_Fe" ); + //vecMaterials.push_back( "G4_Cu" ); + //vecMaterials.push_back( "G4_W" ); + //vecMaterials.push_back( "G4_Pb" ); + + const G4int numProjectiles = vecProjectiles.size(); + const G4int numMaterials = vecMaterials.size(); + + G4cout << G4endl + << "================= Configuration ==================" << G4endl + << "Model: " << namePhysics << G4endl + << "Ekin: [ " << minEnergy/CLHEP::GeV << " , " << maxEnergy/CLHEP::GeV + << " ] GeV" << G4endl + << "Number of collisions: " << numCollisions << G4endl + << "Number of hadron projectiles: " << numProjectiles << G4endl + << "Number of materials: " << numMaterials << G4endl + << "IsIonProjectile: " << ( projectileNucleus != nullptr ? "true \t" : "false" ) + << ( projectileNucleus != nullptr ? projectileNucleus->GetParticleName() : "") << G4endl + << "===================================================" << G4endl + << G4endl; + + CLHEP::Ranlux64Engine defaultEngine( 1234567, 4 ); + CLHEP::HepRandom::setTheEngine( &defaultEngine ); + //***LOOKHERE*** RANDOM ENGINE START SEED + //G4int seed = time( NULL ); + //CLHEP::HepRandom::setTheSeed( seed ); + //G4cout << G4endl << " Initial seed = " << seed << G4endl << G4endl; + + // Set up histo manager. + auto histoManager = FinalStateHistoManager(); + histoManager.Book(); + + // Instanciate the HadronicGenerator providing the name of the "physics case" + HadronicGenerator* theHadronicGenerator = new HadronicGenerator( namePhysics ); + //**************************************************************************** + + if ( theHadronicGenerator == nullptr ) { + G4cerr << "ERROR: theHadronicGenerator is NULL !" << G4endl; + return 1; + } else if ( ! theHadronicGenerator->IsPhysicsCaseSupported() ) { + G4cerr << "ERROR: this physics case is NOT supported !" << G4endl; + return 2; + } + + + // Start timing + auto start = std::chrono::high_resolution_clock::now(); + + // Loop over the collisions + G4double rnd1, rnd2, rnd3, rnd4, rnd5, rnd6, normalization, projectileEnergy; + G4VParticleChange* aChange = nullptr; + for ( G4int i = 0; i < numCollisions; ++i ) { + histoManager.BeginOfEvent(); + + // Draw some random numbers to select the hadron-nucleus interaction: + // projectile hadron, projectile kinetic energy, projectile direction, and target material. + rnd1 = CLHEP::HepRandom::getTheEngine()->flat(); + rnd2 = CLHEP::HepRandom::getTheEngine()->flat(); + rnd3 = CLHEP::HepRandom::getTheEngine()->flat(); + rnd4 = CLHEP::HepRandom::getTheEngine()->flat(); + rnd5 = CLHEP::HepRandom::getTheEngine()->flat(); + rnd6 = CLHEP::HepRandom::getTheEngine()->flat(); + // Sample the projectile kinetic energy + projectileEnergy = minEnergy + rnd1*( maxEnergy - minEnergy ); + if ( projectileEnergy <= 0.0 ) projectileEnergy = minEnergy; + // Sample the projectile direction + normalization = 1.0 / std::sqrt( rnd2*rnd2 + rnd3*rnd3 + rnd4*rnd4 ); + //***LOOKHERE*** IF true THEN SMEAR DIRECTION + const G4bool isOnSmearingDirection = false ; + //***LOOKHERE*** ELSE USE THIS FIXED DIRECTION + G4ThreeVector aDirection = G4ThreeVector( 0.0, 0.0, 1.0 ); + if ( isOnSmearingDirection ) { + aDirection = G4ThreeVector( normalization*rnd2, normalization*rnd3, normalization*rnd4 ); + } + // Sample the projectile hadron from the vector vecProjectiles + G4int index_projectile = std::trunc( rnd5*numProjectiles ); + G4String nameProjectile = vecProjectiles[ index_projectile ]; + G4ParticleDefinition* projectile = partTable->FindParticle( nameProjectile ); + if ( projectileNucleus ) { + nameProjectile = projectileNucleus->GetParticleName(); + projectile = projectileNucleus; + } + // Sample the target material from the vector vecMaterials + // (Note: the target nucleus will be sampled by Geant4) + G4int index_material = std::trunc( rnd6*numMaterials ); + G4String nameMaterial = vecMaterials[ index_material ]; + G4Material* material = G4NistManager::Instance()->FindOrBuildMaterial( nameMaterial ); + if ( material == nullptr ) { + G4cerr << "ERROR: Material " << nameMaterial << " is not found !" << G4endl; + return 3; + } + if ( isPrintingEnabled ) { + G4cout << "\t Collision " << i << " ; projectile=" << nameProjectile; + if ( projectileNucleus ) { + G4cout << " ; Ekin[MeV]/nucleon=" << projectileEnergy / + static_cast< G4double >( std::abs( projectileNucleus->GetBaryonNumber() ) ); + } else { + G4cout << " ; Ekin[MeV]=" << projectileEnergy; + } + G4cout << " ; direction=" << aDirection << " ; material=" << nameMaterial; + } + + // Call here the "hadronic generator" to get the secondaries produced by the hadronic collision + aChange = theHadronicGenerator->GenerateInteraction( projectile, projectileEnergy, + /* ********************************************** */ aDirection, material ); + + G4int nsec = aChange ? aChange->GetNumberOfSecondaries() : 0; + G4bool isPrintingOfSecondariesEnabled = false; + if ( isPrintingEnabled ) { + G4cout << G4endl << "\t --> #secondaries=" << nsec + << " ; impactParameter[fm]=" + << theHadronicGenerator->GetImpactParameter() / fermi + << " ; #projectileSpectatorNucleons=" + << theHadronicGenerator->GetNumberOfProjectileSpectatorNucleons() + << " ; #targetSpectatorNucleons=" + << theHadronicGenerator->GetNumberOfTargetSpectatorNucleons() + << " ; #NNcollisions=" + << theHadronicGenerator->GetNumberOfNNcollisions() + << G4endl; + if ( i % printingGap == 0 ) { + isPrintingOfSecondariesEnabled = true; + G4cout << "\t \t List of produced secondaries: " << G4endl; + } + } + // Loop over produced secondaries and eventually print out some information. + for ( G4int j = 0; j < nsec; ++j ) { + const G4DynamicParticle* sec = aChange->GetSecondary(j)->GetDynamicParticle(); + if ( isPrintingOfSecondariesEnabled ) { + G4cout << "\t \t \t j=" << j << "\t" << sec->GetDefinition()->GetParticleName() + << "\t p=" << sec->Get4Momentum() << " MeV" << G4endl; + } + + // Store each secondary. + histoManager.ScoreSecondary(sec); + + delete aChange->GetSecondary(j); + } + if ( aChange ) aChange->Clear(); + histoManager.EndOfEvent(); + } + + histoManager.EndOfRun(); + + + G4cout << G4endl << " Final random number = " << CLHEP::HepRandom::getTheEngine()->flat() + << G4endl; + + const auto stop = std::chrono::high_resolution_clock::now(); + const auto diff = stop - start; + const auto time = static_cast( + std::chrono::duration_cast(diff).count()) / 1e6; + G4cout << G4endl; + G4cout << "Processed " << numCollisions << " events (collisions) in " + << std::scientific << time << " seconds." + << " Average: " << std::defaultfloat << (time * 1E3 / numCollisions) << " ms / event." + << G4endl; + G4cout << G4endl; + + G4cout << "=== End of test ===" << G4endl; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/History b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/History new file mode 100644 index 00000000000..558188f6821 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/History @@ -0,0 +1,19 @@ +------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + HadNucIneEvents History file + ------------------- +This file should be used by the G4 example coordinator to briefly +summarize all major modifications introduced in the code and keep +track of all tags. + + ---------------------------------------------------------- + * Reverse chronological order (last date on top), please * + ---------------------------------------------------------- + +08-12-22 Gabrielle Hugo (exHadNucIneEvents-V11-01-00) +- Created this example (from `Hadr09`). + diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/ProcessLevel-FinalState.out b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/ProcessLevel-FinalState.out new file mode 100644 index 00000000000..a86b489e1f7 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/ProcessLevel-FinalState.out @@ -0,0 +1,151 @@ +=== Test of the HadronicGenerator === + +================= Configuration ================== +Model: FTFP_BERT +Ekin: [ 7000 , 7000 ] GeV +Number of collisions: 10 +Number of hadron projectiles: 1 +Number of materials: 1 +IsIonProjectile: false +=================================================== + +### FinalStateHistoManager::Book: Successfully opended file all_secondaries.root for dumping histograms. + +================================================================================ + INCL++ WARNING +INCL++/G4ExcitationHandler could not use its own level-density parameter for fission +================================================================================ + + Collision 0 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C======================================================================= +====== Geant4 Native Pre-compound Model Parameters ======== +======================================================================= +Type of pre-compound inverse x-section 3 +Pre-compound model active 1 +Pre-compound excitation low energy 100 keV +Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= +Type of de-excitation inverse x-section 3 +Type of de-excitation factory Evaporation+GEM +Number of de-excitation channels 68 +Min excitation energy 10 eV +Min energy per nucleon for multifragmentation 200 GeV +Limit excitation energy for Fermi BreakUp 20 MeV +Level density (1/MeV) 0.075 +Use simple level density model 1 +Use discrete excitation energy of the residual 1 +Time limit for long lived isomeres 1 ns +Isomer production flag 1 +Internal e- conversion flag 1 +Store e- internal conversion data 0 +Correlated gamma emission flag 0 +Max 2J for sampling of angular correlations 10 +======================================================================= + + --> #secondaries=44 impactParameter[fm]=2.20708 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 + List of produced secondaries: + j=0 pi0 p=(-278.056,-54.2443,249603249603) MeV + j=1 pi+ p=(230.029,220.459,171303171304) MeV + j=2 pi0 p=(-469.822,62.0587,83597.283598.7) MeV + j=3 kaon0L p=(-807.182,-630.872,7481.167567.36) MeV + j=4 pi+ p=(-18.2834,94.391,4761.174764.19) MeV + j=5 pi- p=(-65.525,38.2802,21213.921214.5) MeV + j=6 kaon+ p=(902.744,526.473,225354225357) MeV + j=7 pi- p=(-25.0614,-160.697,62327.162327.5) MeV + j=8 proton p=(457.791,307.539,357.451145.55) MeV + j=9 pi+ p=(187.049,258.114,13773.813778.2) MeV + j=10 eta_prime p=(407.557,161.798,29438.329457.2) MeV + j=11 pi- p=(129.938,-141.881,4209.444216.15) MeV + j=12 pi0 p=(71.0042,453.782,6627.166644.43) MeV + j=13 neutron p=(-16.419,129.541,310.001997.965) MeV + j=14 proton p=(135.377,-168.25,28.0742963.212) MeV + j=15 pi0 p=(125.272,-388.858,1.53492e+061.53492e+06) MeV + j=16 neutron p=(-255.463,71.5904,3.54864e+063.54864e+06) MeV + j=17 pi0 p=(117.323,-60.3735,-34.8848191.951) MeV + j=18 neutron p=(446.611,-171.762,1383.281739.32) MeV + j=19 pi- p=(210.496,175.307,1032.121076.94) MeV + j=20 kaon+ p=(690.16,73.5808,9055.49095.37) MeV + j=21 pi- p=(177.308,-219.884,3488.423502.62) MeV + j=22 pi0 p=(-53.4748,65.7408,2602.062606.93) MeV + j=23 pi+ p=(-144.662,198.791,3725.553736.26) MeV + j=24 pi- p=(429.909,309.238,52688.552691.4) MeV + j=25 pi+ p=(-15.7564,-416.423,91345.391346.3) MeV + j=26 pi- p=(-35.5745,175.967,45452.845453.3) MeV + j=27 pi+ p=(-361.018,-259.16,2125021255.1) MeV + j=28 pi- p=(-1222.43,64.7139,89625.989634.4) MeV + j=29 pi0 p=(-295.877,103.056,27493.927496) MeV + j=30 pi+ p=(-308.863,130.216,5371453715.3) MeV + j=31 pi0 p=(-106.131,119.136,43773.943774.4) MeV + j=32 kaon0S p=(810.072,-3.24422,165782165785) MeV + j=33 pi0 p=(-115.05,-174.435,1450.991472.16) MeV + j=34 pi- p=(291.714,445.213,3613.763655.41) MeV + j=35 pi+ p=(72.3103,36.167,1728917289.7) MeV + j=36 anti_proton p=(-817.196,-1045.02,300634300639) MeV + j=37 pi0 p=(11.2051,-189.687,20817.620818.9) MeV + j=38 proton p=(-249.068,59.6892,80867.280873) MeV + j=39 He3 p=(117.034,-199.489,-159.672822.42) MeV + j=40 deuteron p=(-211.988,-209.404,-136.1621904.01) MeV + j=41 neutron p=(23.8186,-71.9476,-141.265953.144) MeV + j=42 neutron p=(-190.541,431.213,494.9871161.91) MeV + j=43 proton p=(18.7242,-146.424,-86.6639953.759) MeV + Collision 1 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C + --> #secondaries=37 impactParameter[fm]=2.60398 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 2 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C + --> #secondaries=31 impactParameter[fm]=3.28119 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 3 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C + --> #secondaries=46 impactParameter[fm]=3.13666 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 + Collision 4 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C + --> #secondaries=7 impactParameter[fm]=3.17708 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 5 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C + --> #secondaries=21 impactParameter[fm]=3.03126 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 6 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C + --> #secondaries=63 impactParameter[fm]=1.55971 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=3 + Collision 7 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C + --> #secondaries=6 impactParameter[fm]=2.7974 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 8 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C + --> #secondaries=26 impactParameter[fm]=2.42631 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 9 projectile=proton Ekin[MeV]=7e+06 direction=(0,0,1) material=G4_C + --> #secondaries=42 impactParameter[fm]=2.60456 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 +======================================================== +Number of events 10 + +Average (per event) number of B10[718.380] 0.1 +Average (per event) number of He3 0.3 +Average (per event) number of alpha 0.8 +Average (per event) number of anti_lambda 0.1 +Average (per event) number of anti_proton 0.4 +Average (per event) number of deuteron 0.8 +Average (per event) number of eta 0.8 +Average (per event) number of eta_prime 0.9 +Average (per event) number of gamma 0.3 +Average (per event) number of kaon+ 0.9 +Average (per event) number of kaon- 0.4 +Average (per event) number of kaon0L 0.7 +Average (per event) number of kaon0S 1 +Average (per event) number of lambda 0.1 +Average (per event) number of neutron 2.2 +Average (per event) number of pi+ 6.4 +Average (per event) number of pi- 6.2 +Average (per event) number of pi0 6 +Average (per event) number of proton 3 +Average (per event) number of sigma+ 0.1 +Average (per event) number of sigma- 0.2 +Average (per event) number of sigma0 0.3 +Average (per event) number of triton 0.3 +======================================================== + +### All histograms saved to all_secondaries.root +### All histograms saved to all_secondaries.hist + + Final random number = 0.957412 + +Processed 10 events (collisions) in 2.706730e-01 seconds. Average: 27.0673 ms / event. + +=== End of test === diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/README.md b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/README.md new file mode 100644 index 00000000000..787db08553d --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/README.md @@ -0,0 +1,181 @@ +# Description + +This example allows the simulation of hadron-nucleus inelastic nuclear interactions, +and the study of the resulting final states. + +It is an adaptation of `Hadr09` example. +It offers all `Hadr09` features, and adds the possibility +of accessing hadron-nucleus inelastic nuclear interaction final states FROM `FLUKA`. + +With respect to the `Hadr09` example, the program also adds +the possibility of PLOTTING the final state: +secondaries energy spectra, and residual nuclei distributions. +All plots (created via the G4 analysis manager) can be dumped +to any of the usually supported formats (e.g. ROOT format), +as well as in a Flair-compatible format. +Regarding the extension of `G4H1` to insure `Flair` compatibility, +see `geant4/examples/extended/hadronic/FlukaCern/utils`. + +The class `HadronicGenerator` is the "generator". +The main hadronic models (`CernFLUKAHadronInelastic`, `FTFP`, `QGSP`, `BERT`, `BIC`, `IonBIC`, `INCL`) are available. +See `include/HadronicGenerator.hh` for more detailed information. +In the `HadronicGenerator`, one can activate/desactivate coalescence and heavy fragments evaporation for `CernFLUKAHadronInelastic`. + +The main, `HadNucIneEvents.cc`, shows an example of how to use the event generator. +In `HadNucIneEvents.cc`, one can select the physics models, +as well as the projectile hadron, its energy, its direction, the target material, and the number of collisions. + +Note that the Geant4 run manager is not used. + +Before you can access the `FLUKA` hadron-nucleus inelastic models in this example, +you will need to install and setup `FLUKA` and its interface. +See the compulsory "Dependencies" paragraph below. + +A version of the interface to `FLUKA` is directly located at `geant4/examples/extended/hadronic/FlukaCern/FlukaInterface`. +Note that for consistency, all calls to the random engine rely on the G4 random engine (including the calls from within the downloaded `FLUKA` release; see the `FlukaInterface` `Makefile` to see how this is handled). + + +# FLUKA inelastic hadron-nucleus interactions + +Hadron-NUCLEON interaction models are based on resonance production and decay below a few GeV, +and on the Dual Parton model above. +Hadron-NUCLEUS interactions: the PEANUT package includes +a detailed Generalised Intra-Nuclear Cascade (GINC) and a preequilibrium stage, +followed by equilibrium processes: evaporation, fission, Fermi break-up, gamma deexcitation. +``` +A. Ferrari and P. Sala, “The Physics of High Energy Reactions,” in Proc. Workshop on Nuclear Reaction Data and Nuclear Reactors Physics, Design and Safety, p. 424, World Scientific, 1998. +A. Ferrari and P. Sala, “Nuclear reactions in Monte Carlo codes,” Radiat. Prot. Dosimetry, vol. 99, no. 1-4, pp. 29–38, 2002. +``` + + +# Dependencies + +### Environment +- **gcc** >= 7 (Linux) and **gcc** >= 9 (MacOS) +In practice, a recent version is recommended, at least `gcc >=10`. +``` +gcc --version +``` + +- **CMake** >= 3.16...3.21 +``` +cmake3 --version +``` + +- **G4** >= 11.0.3 (Not tested on older G4 releases: might still work, but with no guarantee). +IMPORTANT: YOU NEED TO SOURCE YOUR G4 ENVIRONMENT. +It needs to be sourced in whichever terminal you want to build / run a G4 application with the `FLUKA` interface. +``` +source path_to_geant4/install/bin/geant4.sh +which geant4-config # NB: Your geant4-config should support the modern CMake way of building G4. +``` + +- **Easy setup on lxplus** (lxplus7): +All you need to do on lxplus, to setup an environment satisfying all the conditions above, is, for example: +``` +source /cvmfs/sft.cern.ch/lcg/releases/gcc/10.1.0/x86_64-centos7/setup.sh +source /cvmfs/geant4.cern.ch/geant4/11.1/x86_64-centos7-gcc10-optdeb-MT/CMake-setup.sh +# NB: Your geant4.sh is at: /cvmfs/geant4.cern.ch/geant4/11.1/x86_64-centos7-gcc10-optdeb-MT/bin/geant4.sh +``` + +### `FLUKA4` +Release: >= **4-3.2** + +Please install the latest `FLUKA` release. +(1) You first need to register (and accept the licence when relevant): https://fluka.cern/download/registration +(2) You can then download the `binary libraries` (or potentially the `source code` package, depending on your case): +https://fluka.cern/download/latest-fluka-release. +(3) Follow the `FLUKA` installation instructions: https://fluka.cern/documentation/installation +In particular, for a Linux/MacOS install: https://fluka.cern/documentation/installation/fluka-linux-macos +They will show you how to setup `FLUKA`. +If (and only if) you went for the source code package option, you will need to build `fluka`, and, in addition, to do `make cpp_headers` at `path_to_fluka/src`. +(4) Eventually, all you need are the headers `fluka_repo/include`, libraries `fluka_repo/lib`, and data `fluka_repo/data`. Check that they are not empty. +Do not forget to add `/path_to_fluka/bin` to your `PATH`. Check with `which fluka`. + +### `FlukaInterface` +A version of the G4-FLUKA interface (`FLUKA` hadron-nucleus inelastic physics) +is located at `geant4/examples/extended/hadronic/FlukaCern/FlukaInterface`. +You will first need to build the interface to `FLUKA`, and create the environment scripts. +```bash +$ cd geant4/examples/extended/hadronic/FlukaCern/FlukaInterface/ +# Check with `which fluka` that fluka executable is added to your `PATH`. +$ source path_to_geant4/install/bin/geant4.sh +$ make interface +$ make env # Creates `env_FLUKA.sh` and `env_FLUKA_G4_interface.sh` +``` +IMPORTANT: `env_FLUKA_G4_interface.sh` needs to be sourced in whichever terminal +you want to build / run a G4 application with the `FLUKA` interface. + + +# Build this example +```bash +$ cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/ +# Check with `which fluka` that fluka executable is added to your `PATH`. +$ source path_to_geant4/install/bin/geant4.sh +$ source ../../FlukaInterface/env_FLUKA_G4_interface.sh +$ mkdir build +$ cd build +$ cmake3 -DG4_USE_FLUKA=1 .. +$ make -j8 +``` + + +# Run this example +```bash +$ cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/ +# Check with `which fluka` that fluka executable is added to your `PATH`. +$ source path_to_geant4/install/bin/geant4.sh +$ source ../../FlukaInterface/env_FLUKA_G4_interface.sh +$ ./build/HadNucIneEvents +``` + + +# Study the final states +All plots are dumped at the end of the run in `all_secondaries.ext`. +2 formats are supported: `ROOT` and `Flair`. + + +- You can use `ROOT`: +```bash +$ cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/ +$ root all_secondaries.root +``` + +- Alternatively, the use of `Flair` is also supported. +Please see http://flair.web.cern.ch/flair/download.html for `Flair` download. +`Flair` tutorials are also available from that website. +You can download the package corresponding to your distribution at the top of the page +(no need for `geoviewer`, which is for geometry display). Then look at the requirements & installation instructions at the bottom of the page. +If you face issues installing `Flair`, you can get support at: https://fluka-forum.web.cern.ch/c/installation/ + +An example file, showing how to directly visualize the final states with Flair, is provided in this G4 example. +By default, it directly provides comparison plots: +`FTFP_BERT` versus `QGSP_BERT` versus `CernFLUKAHadronInelastic`, 7TeV proton on C. +You can very easily adapt it to any study of interest (choice of physics models, choice of secondaries, etc). +```bash +$ cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/ +$ mkdir -p results/FLUKAHadronInelastic results/FTFP_BERT results/QGSP_BERT +$ +$ # Choose physics case (modify HadNucIneEvents.cc), compile the G4 example, then run physics case: +$ cd results/FLUKAHadronInelastic +$ ../../build/HadNucIneEvents +$ # Etc for EACH physics case: FLUKAHadronInelastic, FTFP_BERT, QGSP_BERT. +$ +$ cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/ +$ ./update_final_state_flair_file.sh # Update `Det` indices in Flair file, to the ones observed in your simulation. +$ flair study_final_state.flair & +``` +In the `Plot` tab, you can select the plot of interest in the left column, +and then click `Plot` (top banner, yellow button). +You can select a physics case by clicking on its name in the `Detectors` box (center). You can then decide to change its color, line width (`Options` box). You can decide to plot it or not, by selecting / unselecting `graph` in the `Show` box (in the center). +IMPORTANT: You can select any secondary data (or residual nuclei data) which was created, +by chosing in the `Det` selection (button on the right). +IMPORTANT: If a secondary does not appear in the `Det` drop-down menu, it means it is not part of the final state. In that case, you will want to unselect `graph`, so that no other secondary (see `Det`) is plotted. +You can change the path of the data file by clicking on the folder button (button on the right). +You can set the plots extrema, as well as select or unselect the log format, in the top right corner. + + + + + + diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/include/FinalStateHistoManager.hh b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/include/FinalStateHistoManager.hh new file mode 100644 index 00000000000..28f31c5a87e --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/include/FinalStateHistoManager.hh @@ -0,0 +1,129 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file FinalStateHistoManager.hh +/// \brief Create a set of histos for final state study. +// +// Author: G.Hugo, 08 December 2022 +// +// *************************************************************************** +// +// FinalStateHistoManager +// +/// Create a set of histos for final state study. +/// In practice, the interactions studied here are hadron nuclear inelastic interactions +/// (though the code is fully generic). +/// +/// Energy spectra are plotted for all encountered secondaries +/// (one histo per secondary). +/// In addition, the residual nuclei Z and A distributions are plotted. +/// +/// All histograms are G4H1. +/// They are created and filled via the G4VAnalysisManager. +/// +/// The histograms can be dumped to all usual formats, including ROOT +/// (via G4VAnalysisManager). +/// An interesting added feature here, is that the plots, while being allocated +/// and filled via G4VAnalysisManager, are also dumped +/// in a Flair-compatible format (via tools::histo::flair). +/// +/// NB 1: Note that instead of a hardcoded number associated to a hardcoded set of particles, +/// particle PDG IDs are used to index the histos. +/// This allows a dynamic storage of all particles encountered in the final states. +/// +/// NB 2: tools::histo::flair code, which allows the dump of any G4H1 +/// into Flair-compatible format, is fully application-agnostic, +/// and is placed in FlukaCern/utils. +/// It could also be added as an extension of core G4 Analysis Manager. +// +// *************************************************************************** + +#ifndef FINAL_STATE_HISTO_MANAGER_HH +#define FINAL_STATE_HISTO_MANAGER_HH + +#include +#include +#include + +#include "globals.hh" + +#include "G4SystemOfUnits.hh" + +#include "G4H1Wrapper.hh" + + +class G4DynamicParticle; +class G4VAnalysisManager; + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +class FinalStateHistoManager { + +public: + FinalStateHistoManager(); + + void Book(); + void BeginOfEvent(); + void ScoreSecondary(const G4DynamicParticle* const secondary); + void EndOfEvent(); + void EndOfRun() const; + + +private: + void DumpAllG4H1IntoRootFile() const; + void DumpAllG4H1IntoFlairFile(const std::map& particlesHistos) const; + + G4String fOutputFileName = "all_secondaries"; + G4String fRootOutputFileName = fOutputFileName + ".root"; + G4String fFlairOutputFileName = fOutputFileName + ".hist"; + + G4int fNumBins = 90; + G4double fMinKineticEnergy = 10. * keV; + G4double fMaxKineticEnergy = 10. * TeV; + G4String fFunctionName = "none"; + G4String fBinSchemeName = "log"; + G4String fRootEnergyUnit = "MeV"; + + G4int fNucleiZMax = 25; + G4int fNucleiAMax = 50; + + G4int fNumEvents = 0; + + G4VAnalysisManager* fAnalysisManager = nullptr; + + // key is particle PDG ID: + std::unordered_map> fParticleData; + // key is nuclei Z or A score index: + std::unordered_map> fNucleiData; + G4int fNucleiZScoreIndex = 0; + G4int fNucleiAScoreIndex = 1; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + + +#endif diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/include/HadronicGenerator.hh b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/include/HadronicGenerator.hh new file mode 100644 index 00000000000..110b0e0b2bd --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/include/HadronicGenerator.hh @@ -0,0 +1,183 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file HadronicGenerator.hh +/// \brief Definition of the HadronicGenerator class +// +//------------------------------------------------------------------------ +// Class: HadronicGenerator +// Author: Alberto Ribon (CERN EP/SFT), May 2020 +// Modified: G. Hugo, 8 December 2022 +// +/// This class shows how to use Geant4 as a generator for simulating +/// inelastic hadron-nuclear interactions. +/// Some of the most used hadronic models are currently supported in +/// this class: +/// - the hadronic string models Fritiof (FTF) and Quark-Gluon-String (QGS) +/// coupled with Precompound/de-excitation +/// - the intranuclear cascade models: Bertini (BERT), Binary Cascade (BIC), +/// and Liege (INCL) +/// Combinations of two models - in a transition energy interval, with a +/// linear probability as a function of the energy - are also available to +/// "mimic" the transition between hadronic models as in the most common +/// Geant4 reference physics lists. +/// +/// The current version of this class does NOT support: +/// - hadron elastic interactions +/// - neutron capture and fission +/// - precise low-energy inelastic interactions of neutrons and +/// charged particles (i.e. ParticleHP) +/// - gamma/lepton-nuclear inelastic interactions +/// +/// This class does NOT use the Geant4 run-manager, and therefore should +/// be usable in a multi-threaded application, with one instance of this +/// class in each thread. +/// +/// This class has been inspired by test30 (whose author is Vladimir +/// Ivanchenko), with various simplifications and restricted to hadronic +/// inelastic interactions. +//------------------------------------------------------------------------ + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#ifndef HadronicGenerator_h +#define HadronicGenerator_h 1 + +#include +#include "globals.hh" +#include "G4ios.hh" +#include "G4ThreeVector.hh" +#include +#include "G4HadronicProcess.hh" + +class G4ParticleDefinition; +class G4VParticleChange; +class G4ParticleTable; +class G4Material; +class G4HadronicInteraction; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class HadronicGenerator { + // This class provides the functionality of a "hadronic generator" + // for Geant4 final-state inelastic hadronic collisions. + // Only a few of the available Geant4 final-state hadronic inelastic + // "physics cases" are currently available in this class - but it can + // be extended to other cases if needed. + // It is important to notice that this class does NOT use the Geant4 + // run-manager, so it should work fine in a multi-threaded environment, + // with a separate instance of this class in each thread. + public: + + explicit HadronicGenerator( const G4String physicsCase = "FTFP_BERT_ATL" ); + // Currently supported final-state hadronic inelastic "physics cases": + // - Hadronic models : CernFLUKAHadronInelastic, + // BERT, BIC, IonBIC, INCL, FTFP, QGSP + // - "Physics-list proxies" : FTFP_BERT_ATL (default), FTFP_BERT, + // QGSP_BERT, QGSP_BIC, FTFP_INCLXX + // (i.e. they are not real, complete physics lists - for instance + // they do not have: transportation, electromagnetic physics, + // hadron elastic scattering, neutron fission and capture, etc. - + // however, they cover all hadron types and all energies by + // combining different hadronic models, i.e. there are transitions + // between two hadronic models in well-defined energy intervals, + // e.g. "FTFP_BERT" has the transition between BERT and FTFP + // hadronic models; moreover, the transition intervals used in + // our "physics cases"might not be the same as in the corresponding + // physics lists). + + ~HadronicGenerator(); + + inline G4bool IsPhysicsCaseSupported() const; + // Returns "true" if the physicsCase is supported; "false" otherwise. + + G4bool IsApplicable( const G4String &nameProjectile, const G4double projectileEnergy ) const; + G4bool IsApplicable( G4ParticleDefinition* projectileDefinition, + const G4double projectileEnergy ) const; + // Returns "true" if the specified projectile (either by name or particle definition) + // of given energy is applicable, "false" otherwise. + + G4VParticleChange* GenerateInteraction( const G4String &nameProjectile, + const G4double projectileEnergy, + const G4ThreeVector &projectileDirection , + G4Material* targetMaterial ); + G4VParticleChange* GenerateInteraction( G4ParticleDefinition* projectileDefinition, + const G4double projectileEnergy, + const G4ThreeVector &projectileDirection , + G4Material* targetMaterial ); + // This is the main method provided by the class: + // in input it receives the projectile (either by name or particle definition), + // its energy, its direction and the target material, and it returns one sampled + // final-state of the inelastic hadron-nuclear collision as modelled by the + // final-state hadronic inelastic "physics case" specified in the constructor. + // If the required hadronic collision is not possible, then the method returns + // immediately an empty "G4VParticleChange", i.e. without secondaries produced. + + const std::map& getAllHadronicProcesses() const { + return fProcessMap; + } + inline G4HadronicProcess* GetHadronicProcess() const; + inline G4HadronicInteraction* GetHadronicInteraction() const; + // Returns the hadronic process and the hadronic interaction, respectively, + // that handled the last call of "GenerateInteraction". + + G4double GetImpactParameter() const; + G4int GetNumberOfTargetSpectatorNucleons() const; + G4int GetNumberOfProjectileSpectatorNucleons() const; + G4int GetNumberOfNNcollisions() const; + // In the case of hadronic interactions handled by the FTF model, returns, + // respectively, the impact parameter, the number of target/projectile + // spectator nucleons, and the number of nucleon-nucleon collisions, + // else, returns a negative value (-999). + + private: + + G4String fPhysicsCase; + G4bool fPhysicsCaseIsSupported = false; + G4HadronicProcess* fLastHadronicProcess = nullptr; + G4ParticleTable* fPartTable = nullptr; + std::map< G4ParticleDefinition*, G4HadronicProcess* > fProcessMap; +}; + + +inline G4bool HadronicGenerator::IsPhysicsCaseSupported() const { + return fPhysicsCaseIsSupported; +} + + +inline G4HadronicProcess* HadronicGenerator::GetHadronicProcess() const { + return fLastHadronicProcess; +} + + +inline G4HadronicInteraction* HadronicGenerator::GetHadronicInteraction() const { + return fLastHadronicProcess == nullptr ? nullptr + : fLastHadronicProcess->GetHadronicInteraction(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/src/FinalStateHistoManager.cc b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/src/FinalStateHistoManager.cc new file mode 100644 index 00000000000..281527a1876 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/src/FinalStateHistoManager.cc @@ -0,0 +1,373 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file FinalStateHistoManager.hh +/// \brief Create a set of histos for final state study. +// +// Author: G.Hugo, 08 December 2022 +// +// *************************************************************************** +// +// FinalStateHistoManager +// +/// Create a set of histos for final state study. +/// In practice, the interactions studied here are hadron nuclear inelastic interactions +/// (though the code is fully generic). +/// +/// Energy spectra are plotted for all encountered secondaries +/// (one histo per secondary). +/// In addition, the residual nuclei Z and A distributions are plotted. +/// +/// All histograms are G4H1. +/// They are created and filled solely via G4VAnalysisManager. +/// +/// The histograms can be dumped to all usual formats, including ROOT +/// (via G4VAnalysisManager). +/// An interesting added feature here, is that the plots, while being allocated +/// and filled via G4VAnalysisManager, are also dumped +/// in a Flair-compatible format (via tools::histo::flair). +/// +/// NB 1: Note that instead of a hardcoded number associated to a hardcoded set of particles, +/// particle PDG IDs are used to index the histos. +/// This allows a dynamic storage of all particles encountered in the final states. +/// +/// NB 2: tools::histo::flair code, which allows the dump of any G4H1 +/// into Flair-compatible format, is fully application-agnostic, +/// and is placed in FlukaCern/utils. +/// It could also be added as an extension of core G4 Analysis Manager. +// +// *************************************************************************** + +#include "FinalStateHistoManager.hh" + +#include "G4RootAnalysisManager.hh" +//#include "G4AnalysisManager.hh" + +#include "G4ParticleTable.hh" +#include "G4DynamicParticle.hh" + +#include "G4ios.hh" +#include "G4Exception.hh" + +#include "g4hntools_defs.hh" +#include "tools_histo_flair.hh" + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +FinalStateHistoManager::FinalStateHistoManager() : + fOutputFileName("all_secondaries"), + fRootOutputFileName(fOutputFileName + ".root"), + fFlairOutputFileName(fOutputFileName + ".hist"), + fNumBins(90), + fMinKineticEnergy(10. * keV), + fMaxKineticEnergy(10. * TeV), + fFunctionName("none"), + fBinSchemeName("log"), + fRootEnergyUnit("MeV"), + fNucleiZMax(25), + fNucleiAMax(50), + fNumEvents(0), + fAnalysisManager(G4RootAnalysisManager::Instance()), + fNucleiZScoreIndex(0), + fNucleiAScoreIndex(1) +{ + //fAnalysisManager = G4AnalysisManager::Instance(); + //fAnalysisManager->SetDefaultFileType("root"); + //fAnalysisManager->SetVerboseLevel(0); + //fOutputFileName += fAnalysisManager->GetFileType(); +} + + +// *************************************************************************** +// Open output file + create residual nuclei histograms considered for final state study. +// The histograms are G4H1, created via G4VAnalysisManager. +// *************************************************************************** +void FinalStateHistoManager::Book() { + + // Open file. + if(!fAnalysisManager->OpenFile(fRootOutputFileName)) { + + G4ExceptionDescription msg; + msg << "Booking histograms: cannot open file " + << fRootOutputFileName + << G4endl; + G4Exception("FinalStateHistoManager::Book", + "Cannot open file", + FatalException, + msg); + } + G4cout << "### FinalStateHistoManager::Book: Successfully opended file " + << fRootOutputFileName + << " for dumping histograms." + << G4endl; + + + // Create the residual nuclei distributions (in Z and A). + const G4int nucleiZHistoIndex = fAnalysisManager->CreateH1("nucleiZ", + "Residual nuclei distribution in Z", + fNucleiZMax, + 0.5, + fNucleiZMax + 0.5); + auto nucleiZHistoWrapper = std::make_unique(fAnalysisManager, + nucleiZHistoIndex); + fNucleiData.insert(std::make_pair(fNucleiZScoreIndex, std::move(nucleiZHistoWrapper))); + + + const G4int nucleiAHistoIndex = fAnalysisManager->CreateH1("nucleiA", + "Residual nuclei distribution in A", + fNucleiAMax, + 0.5, + fNucleiAMax + 0.5); + auto nucleiAHistoWrapper = std::make_unique(fAnalysisManager, + nucleiAHistoIndex); + fNucleiData.insert(std::make_pair(fNucleiAScoreIndex, std::move(nucleiAHistoWrapper))); +} + + +// *************************************************************************** +// Keep track of the total number of events (used later on for normalization). +// *************************************************************************** +void FinalStateHistoManager::BeginOfEvent() { + fNumEvents++; +} + + +// *************************************************************************** +// Fill all plots (WITHIN event, ie the interaction). +// *************************************************************************** +void FinalStateHistoManager::ScoreSecondary(const G4DynamicParticle* const secondary) { + + // SELECT SPECIFIC SECONDARIES ONLY + // Select by angle with beam direction + /* if ( (std::pow(secondary->GetMomentumDirection().x(), 2.) + + std::pow(secondary->GetMomentumDirection().y(), 2.)) + <= 0.0001 ) {*/ + + // Select by production tag + /* if (secondary->GetProductionTag() == 6) {*/ + + // Primary track + /* if(track->GetParentID() == 0) {*/ + + const auto& particle = secondary->GetDefinition(); + + + // SECONDARIES ENERGY SPECTRA + // Dynamic creation of histos, so that all encountered particles have their own histos. + + // Check whether a particle has already been encountered. + const auto found = fParticleData.find(secondary->GetPDGcode()); + + G4H1Wrapper* particleHistoWrapper = nullptr; + // If the particle has already been encountered, use the corresponding histos. + if (found != fParticleData.end()) { + particleHistoWrapper = found->second.get(); + } + // Otherwise, create histos for that particle. + else { + const G4String& particleName = particle->GetParticleName(); + const G4int particlePDG = secondary->GetPDGcode(); + + const G4String histoTitle = (particlePDG == 0 ? + "Particle pdg==0 spectrum" + : G4String(particleName + " spectrum")); + const G4int histoIndex = fAnalysisManager->CreateH1(particleName, + histoTitle, + fNumBins, + fMinKineticEnergy, + fMaxKineticEnergy, + fRootEnergyUnit, + fFunctionName, + fBinSchemeName); + auto histoWrapper = std::make_unique(fAnalysisManager, + histoIndex); + particleHistoWrapper = histoWrapper.get(); + fParticleData.insert(std::make_pair(particlePDG, std::move(histoWrapper))); + } + + // Fill the G4H1Wrapper. + const G4double kineticEnergy = secondary->GetKineticEnergy(); + particleHistoWrapper->Fill(kineticEnergy, 1.); + + + // NUCLEI DISTRIBUTIONS IN Z AND A + if (particle->GetParticleType() == "nucleus") { + // Fill the G4H1Wrapper. + const G4double Z = particle->GetPDGCharge() / eplus; + fNucleiData[fNucleiZScoreIndex]->Fill(Z, 1.); + + // Fill the G4H1Wrapper. + const G4double A = particle->GetBaryonNumber(); + fNucleiData[fNucleiAScoreIndex]->Fill(A, 1.); + } + + //} // select secondaries +} + + +// *************************************************************************** +// End of event: all event-level G4H1 are flushed into the Analysis Manager G4H1. +// *************************************************************************** +void FinalStateHistoManager::EndOfEvent() { + + for (const auto& particleIt : fParticleData) { + particleIt.second->EndOfEvent(); + } + for (const auto& nucleiScoreIt : fNucleiData) { + nucleiScoreIt.second->EndOfEvent(); + } +} + + +// *************************************************************************** +// Printout secondary counts + dump all plots into relevant formats. +// *************************************************************************** +void FinalStateHistoManager::EndOfRun() const { + + // PRINTOUT SECONDARYS COUNTS (FULL ENERGY RANGE). + + // Order the histos by particles names. + std::map particlesHistos; + + for (const auto& particleIt : fParticleData) { + const G4int particlePdg = particleIt.first; + const G4String particleName = G4ParticleTable::GetParticleTable() + ->FindParticle(particlePdg)->GetParticleName(); + + const G4H1Wrapper* const particleHisto = particleIt.second.get(); + particlesHistos.insert(std::make_pair(particleName, particleHisto)); + } + + // Printout secondarys counts (full energy range) + // Values are averaged over the number of events. + G4cout << "========================================================" << G4endl; + G4cout << "Number of events " << fNumEvents << G4endl << G4endl; + for (const auto& particleIt : particlesHistos) { + + // Note that the info is directly obtained from the histogram: + // it is the integral over the full energy range. + const G4int count = particleIt.second->GetG4H1()->sum_all_bin_heights(); + + const G4double averageCount = static_cast(count) / fNumEvents; + + G4cout << "Average (per event) number of " << particleIt.first + << " " << averageCount + << G4endl; + } + G4cout << "========================================================" << G4endl; + G4cout << G4endl; + + + // DUMP G4H1 PLOTS INTO ROOT FILE + DumpAllG4H1IntoRootFile(); + + // DUMP G4H1 PLOTS INTO FLAIR FILE + DumpAllG4H1IntoFlairFile(particlesHistos); + + + // Close and clear fAnalysisManager. + fAnalysisManager->CloseFile(); + fAnalysisManager->Clear(); +} + + +// *************************************************************************** +// DUMP G4H1 PLOTS INTO ROOT FILE (via G4VAnalysisManager). +// *************************************************************************** +void FinalStateHistoManager::DumpAllG4H1IntoRootFile() const { + + if (!fAnalysisManager->Write()) { + G4ExceptionDescription message; + message << "Could not write ROOT file."; + G4Exception("FinalStateHistoManager::EndOfRun()", + "I/O Error", + FatalException, + message); + } + G4cout << "### All histograms saved to " << fRootOutputFileName << G4endl; +} + + +// *************************************************************************** +// DUMP G4H1 PLOTS INTO FLAIR FILE (via tools::histo::flair). +// *************************************************************************** +void FinalStateHistoManager::DumpAllG4H1IntoFlairFile( + const std::map& particlesHistos) const { + + std::ofstream output; + output.open(fFlairOutputFileName, std::ios_base::out); + G4int indexInOutputFile = 1; + + // SECONDARIES ENERGY SPECTRA + for (const auto& particleIt : particlesHistos) { + + const G4String& histoName = particleIt.first; + const auto& histo = particleIt.second->GetG4H1(); + + tools::histo::flair::dumpG4H1HistoInFlairFormat(output, + indexInOutputFile, + histoName, + histo, + tools::histo::flair::Abscissa::KineticEnergy, + fBinSchemeName, + fNumEvents, + particleIt.second + ->GetSumSquaredEventTotals(), + particleIt.second + ->GetSumSquaredEventInRangeTotals()); + ++indexInOutputFile; + } + + // RESIDUAL NUCLEI DISTRIBUTIONS + for (const auto& plotIt : fNucleiData) { + + const auto& histo = plotIt.second->GetG4H1(); + const G4String& histoName = (plotIt.first == fNucleiZScoreIndex ? + "nucleiZ" + : "nucleiA"); + const auto& abscissaKind = (plotIt.first == fNucleiZScoreIndex ? + tools::histo::flair::Abscissa::Z + : tools::histo::flair::Abscissa::A); + + tools::histo::flair::dumpG4H1HistoInFlairFormat(output, + indexInOutputFile, + histoName, + histo, + abscissaKind, + fBinSchemeName, + fNumEvents, + plotIt.second + ->GetSumSquaredEventTotals(), + plotIt.second + ->GetSumSquaredEventInRangeTotals()); + ++indexInOutputFile; + } + + output.close(); + G4cout << "### All histograms saved to " << fFlairOutputFileName << G4endl; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/src/HadronicGenerator.cc b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/src/HadronicGenerator.cc new file mode 100644 index 00000000000..d9262dc4b7b --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/src/HadronicGenerator.cc @@ -0,0 +1,1328 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file HadronicGenerator.cc +/// \brief Implementation of the HadronicGenerator class +// +//------------------------------------------------------------------------ +// Class: HadronicGenerator +// Author: Alberto Ribon (CERN EP/SFT), May 2020 +// Modified: G. Hugo, 8 December 2022 +//------------------------------------------------------------------------ + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include "HadronicGenerator.hh" +#include +#include "globals.hh" +#include "G4ios.hh" +#include "G4PhysicalConstants.hh" +#include "G4Material.hh" +#include "G4ProcessManager.hh" +#include "G4VParticleChange.hh" +#include "G4ParticleTable.hh" +#include "G4IonTable.hh" +#include "G4DynamicParticle.hh" +#include "G4DecayPhysics.hh" +#include "G4Box.hh" +#include "G4PVPlacement.hh" +#include "G4Step.hh" +#include "G4UnitsTable.hh" +#include "G4SystemOfUnits.hh" +#include "G4StateManager.hh" +#include "G4TouchableHistory.hh" +#include "G4TransportationManager.hh" + +#include "G4PionMinus.hh" +#include "G4PionPlus.hh" +#include "G4KaonMinus.hh" +#include "G4KaonPlus.hh" +#include "G4KaonZeroLong.hh" +#include "G4KaonZeroShort.hh" +#include "G4Proton.hh" +#include "G4Neutron.hh" +#include "G4Deuteron.hh" +#include "G4Triton.hh" +#include "G4He3.hh" +#include "G4Alpha.hh" +#include "G4Lambda.hh" +#include "G4SigmaPlus.hh" +#include "G4SigmaZero.hh" +#include "G4SigmaMinus.hh" +#include "G4XiMinus.hh" +#include "G4XiZero.hh" +#include "G4OmegaMinus.hh" +#include "G4AntiProton.hh" +#include "G4AntiNeutron.hh" +#include "G4AntiDeuteron.hh" +#include "G4AntiTriton.hh" +#include "G4AntiHe3.hh" +#include "G4AntiAlpha.hh" +#include "G4AntiLambda.hh" +#include "G4AntiSigmaPlus.hh" +#include "G4AntiSigmaZero.hh" +#include "G4AntiSigmaMinus.hh" +#include "G4AntiXiMinus.hh" +#include "G4AntiXiZero.hh" +#include "G4AntiOmegaMinus.hh" +#include "G4GenericIon.hh" + +#include "G4DMesonPlus.hh" +#include "G4DMesonMinus.hh" +#include "G4DMesonZero.hh" +#include "G4AntiDMesonZero.hh" +#include "G4DsMesonPlus.hh" +#include "G4DsMesonMinus.hh" +#include "G4BMesonPlus.hh" +#include "G4BMesonMinus.hh" +#include "G4BMesonZero.hh" +#include "G4AntiBMesonZero.hh" +#include "G4BsMesonZero.hh" +#include "G4AntiBsMesonZero.hh" +#include "G4BcMesonPlus.hh" +#include "G4BcMesonMinus.hh" +#include "G4LambdacPlus.hh" +#include "G4AntiLambdacPlus.hh" +#include "G4XicPlus.hh" +#include "G4AntiXicPlus.hh" +#include "G4XicZero.hh" +#include "G4AntiXicZero.hh" +#include "G4OmegacZero.hh" +#include "G4AntiOmegacZero.hh" +#include "G4Lambdab.hh" +#include "G4AntiLambdab.hh" +#include "G4XibZero.hh" +#include "G4AntiXibZero.hh" +#include "G4XibMinus.hh" +#include "G4AntiXibMinus.hh" +#include "G4OmegabMinus.hh" +#include "G4AntiOmegabMinus.hh" + +#include "G4HadronInelasticProcess.hh" +#include "G4HadronicParameters.hh" + +#include "G4CascadeInterface.hh" +#include "G4TheoFSGenerator.hh" +#include "G4GeneratorPrecompoundInterface.hh" +#include "G4ExcitationHandler.hh" +#include "G4PreCompoundModel.hh" +#include "G4LundStringFragmentation.hh" +#include "G4ExcitedStringDecay.hh" +#include "G4FTFModel.hh" +#include "G4BinaryCascade.hh" +#include "G4BinaryLightIonReaction.hh" +#include "G4INCLXXInterface.hh" +#include "G4AblaInterface.hh" +#include "G4QuasiElasticChannel.hh" +#include "G4QGSMFragmentation.hh" +#include "G4QGSModel.hh" +#include "G4QGSParticipants.hh" + +#include "G4VCrossSectionDataSet.hh" +#include "G4CrossSectionInelastic.hh" +#include "G4BGGNucleonInelasticXS.hh" +#include "G4NeutronInelasticXS.hh" +#include "G4BGGPionInelasticXS.hh" +#include "G4ComponentGGHadronNucleusXsc.hh" +#include "G4ChipsHyperonInelasticXS.hh" +#include "G4ComponentAntiNuclNuclearXS.hh" +#include "G4ComponentGGNuclNuclXsc.hh" + +// FLUKA ADAPTATION +#ifdef G4_USE_FLUKA +#include "fluka_interface.hh" +#include "FLUKAParticleTable.hh" +#include "FLUKAInelasticScatteringXS.hh" +#include "FLUKANuclearInelasticModel.hh" +#endif + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +HadronicGenerator::HadronicGenerator( const G4String physicsCase ) : + fPhysicsCase( physicsCase ), fPhysicsCaseIsSupported( false ), + fLastHadronicProcess( nullptr ), fPartTable( nullptr ) +{ + // The constructor set-ups all the particles, models, cross sections and + // hadronic inelastic processes. + // This should be done only once for each application. + // In the case of a multi-threaded application using this class, + // the constructor should be invoked for each thread, + // i.e. one instance of the class should be kept per thread. + // The particles and processes that are created in this constructor + // will then be used by the method GenerateInteraction at each interaction. + // Notes: + // - Neither the hadronic models nor the cross sections are used directly + // by the method GenerateInteraction, but they are associated to the + // hadronic processes and used by Geant4 to simulate the collision; + // - Although the class generates only final states, but not free mean paths, + // inelastic hadron-nuclear cross sections are needed by Geant4 to sample + // the target nucleus from the target material. + + // Definition of particles + G4GenericIon* gion = G4GenericIon::Definition(); + gion->SetProcessManager( new G4ProcessManager( gion ) ); + G4DecayPhysics* decays = new G4DecayPhysics; + decays->ConstructParticle(); + fPartTable = G4ParticleTable::GetParticleTable(); + fPartTable->SetReadiness(); + G4IonTable* ions = fPartTable->GetIonTable(); + ions->CreateAllIon(); + ions->CreateAllIsomer(); + + // FLUKA ADAPTATION + if (fPhysicsCase == "CFLUKAHI") { +#ifdef G4_USE_FLUKA + + // IMPORTANT: Initialize the FLUKA interface here. + // Both activation switches should be set to TRUE to provide the most comprehensive results. + // NB: COMPARISON WITH G4 DOES NOT SEEM MEANINGFUL + // WHEN COALESCENCE IS ACTIVATED IN BOTH FLUKA AND G4. + // Freedom to choose & see the effect of these switches is hence provided here. + const G4bool activateCoalescence = true; + const G4bool activateHeavyFragmentsEvaporation = true; + fluka_interface::initialize(activateCoalescence, + activateHeavyFragmentsEvaporation); + + // Initialize FLUKA <-> G4 particles conversions tables. + fluka_particle_table::initialize(); +#else + G4Exception("HadronicGenerator.cc", + "Wrong compilation mode.", + FatalException, + "Requested G4_HP_CernFLUKAHadronInelastic physics list.\n" \ + "This requires COMPILATION in FLUKA mode.\n" \ + "Please fully recompile the example with G4_USE_FLUKA=yes.\n" \ + "For example:\n" \ + "source geant4/examples/extended/hadronic/FlukaCern/FlukaInterface/" \ + "env_FLUKA_G4_interface.sh\n" \ + "cd geant4/examples/extended/hadronic/FlukaCern/ProcessLevel/CrossSection/\n" \ + "mkdir build\n" \ + "cd build\n" \ + "cmake -DGeant4_DIR=your_path_to_geant4 -DG4_USE_FLUKA=1 .. \n" \ + "make -j8 G4_USE_FLUKA=1\n" \ + "NB: First time use of FLUKA interface:\n" \ + "Do not forget to first compile the FLUKA interface itself.\n" \ + "For example: cd geant4/examples/extended/hadronic/FlukaCern/FlukaInterface/ " \ + "&& make interface && make env\n" \ + "FlukaInterface/env_FLUKA_G4_interface.sh then needs to be sourced\n" \ + "in whichever terminal you want to use the FLUKA interface.\n"); +#endif + } + + // Build BERT model + G4CascadeInterface* theBERTmodel = new G4CascadeInterface; + + // Build BIC model + G4BinaryCascade* theBICmodel = new G4BinaryCascade; + G4PreCompoundModel* thePreEquilib = new G4PreCompoundModel( new G4ExcitationHandler ); + theBICmodel->SetDeExcitation( thePreEquilib ); + + // Build BinaryLightIon model + G4PreCompoundModel* thePreEquilibBis = new G4PreCompoundModel( new G4ExcitationHandler ); + G4BinaryLightIonReaction* theIonBICmodel = new G4BinaryLightIonReaction( thePreEquilibBis ); + + // Build the INCL model + G4INCLXXInterface* theINCLmodel = new G4INCLXXInterface; + const G4bool useAblaDeExcitation = false; // By default INCL uses Preco: set "true" to use + // ABLA DeExcitation + if ( theINCLmodel && useAblaDeExcitation ) { + G4AblaInterface* theAblaInterface = new G4AblaInterface; + theINCLmodel->SetDeExcitation( theAblaInterface ); + } + + // Build the FTFP model (FTF/Preco) : 4 instances with different kinetic energy intervals. + // (Notice that these kinetic energy intervals are applied per nucleons, so they are fine + // for all types of hadron and ion projectile). + // Model instance without energy constraint. + // (Used for the case of FTFP model, and for light anti-ions in all physics lists.) + G4TheoFSGenerator* theFTFPmodel = new G4TheoFSGenerator( "FTFP" ); + theFTFPmodel->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() ); + G4GeneratorPrecompoundInterface* theCascade = new G4GeneratorPrecompoundInterface; + theCascade->SetDeExcitation( thePreEquilib ); + theFTFPmodel->SetTransport( theCascade ); + G4LundStringFragmentation* theLundFragmentation = new G4LundStringFragmentation; + G4ExcitedStringDecay* theStringDecay = new G4ExcitedStringDecay( theLundFragmentation ); + G4FTFModel* theStringModel = new G4FTFModel; + theStringModel->SetFragmentationModel( theStringDecay ); + + // If the following line is set, then the square of the impact parameter is sampled + // randomly from a flat distribution in the range [ Bmin*Bmin, Bmax*Bmax ] + //theStringModel->SetBminBmax( 0.0, 2.0*fermi ); + //***LOOKHERE*** CHOOSE IMPACT PARAMETER MIN & MAX + + theFTFPmodel->SetHighEnergyGenerator( theStringModel ); + // Model instance with constraint to be above a kinetic energy threshold. + // (Used for ions in all physics lists, and, in the case of non-QGS-based physics lists, + // also for pions, kaons, nucleons and hyperons.) + G4TheoFSGenerator* theFTFPmodel_aboveThreshold = new G4TheoFSGenerator( "FTFP" ); + theFTFPmodel_aboveThreshold->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() ); + theFTFPmodel_aboveThreshold->SetTransport( theCascade ); + theFTFPmodel_aboveThreshold->SetHighEnergyGenerator( theStringModel ); + // Model instance with constraint to be within two kinetic energy thresholds. + // (Used in the case of QGS-based physics lists for pions, kaons, nucleons and hyperons.) + G4TheoFSGenerator* theFTFPmodel_constrained = new G4TheoFSGenerator( "FTFP" ); + theFTFPmodel_constrained->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() ); + theFTFPmodel_constrained->SetTransport( theCascade ); + theFTFPmodel_constrained->SetHighEnergyGenerator( theStringModel ); + // Model instance to be used down to zero kinetic energy, with eventual constraint + // - in the case of QGS-based physics lists - to be below a kinetic energy threshold. + // (Used for anti-baryons, anti-hyperons, and charmed and bottom hadrons.) + G4TheoFSGenerator* theFTFPmodel_belowThreshold = new G4TheoFSGenerator( "FTFP" ); + theFTFPmodel_belowThreshold->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() ); + theFTFPmodel_belowThreshold->SetTransport( theCascade ); + theFTFPmodel_belowThreshold->SetHighEnergyGenerator( theStringModel ); + + // Build the QGSP model (QGS/Preco) + G4TheoFSGenerator* theQGSPmodel = new G4TheoFSGenerator( "QGSP" ); + theQGSPmodel->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() ); + theQGSPmodel->SetTransport( theCascade ); + G4QGSMFragmentation* theQgsmFragmentation = new G4QGSMFragmentation; + G4ExcitedStringDecay* theQgsmStringDecay = new G4ExcitedStringDecay( theQgsmFragmentation ); + G4VPartonStringModel* theQgsmStringModel = new G4QGSModel< G4QGSParticipants >; + theQgsmStringModel->SetFragmentationModel( theQgsmStringDecay ); + theQGSPmodel->SetHighEnergyGenerator( theQgsmStringModel ); + G4QuasiElasticChannel* theQuasiElastic = new G4QuasiElasticChannel; // QGSP uses quasi-elastic + theQGSPmodel->SetQuasiElasticChannel( theQuasiElastic ); + + // For the case of "physics-list proxies", select the energy range for each hadronic model. + // Note: the transition energy between hadronic models vary between physics lists, + // type of hadrons, and version of Geant4. Here, for simplicity, we use an uniform + // energy transition for all types of hadrons and regardless of the Geant4 version; + // moreover, for "FTFP_INCLXX" we use a different energy transition range + // between FTFP and INCL than in the real physics list. + if ( fPhysicsCase == "FTFP_BERT_ATL" || + fPhysicsCase == "FTFP_BERT" || + fPhysicsCase == "FTFP_INCLXX" || + fPhysicsCase == "QGSP_BERT" || + fPhysicsCase == "QGSP_BIC" ) { + const G4double ftfpMinE + = G4HadronicParameters::Instance()->GetMinEnergyTransitionFTF_Cascade(); + const G4double bertMaxE + = G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade(); + const G4double ftfpMinE_ATL = 9.0*CLHEP::GeV; + const G4double bertMaxE_ATL = 12.0*CLHEP::GeV; + const G4double ftfpMaxE = G4HadronicParameters::Instance()->GetMaxEnergyTransitionQGS_FTF(); + const G4double qgspMinE = G4HadronicParameters::Instance()->GetMinEnergyTransitionQGS_FTF(); + theFTFPmodel->SetMinEnergy( 0.0 ); + theFTFPmodel_belowThreshold->SetMinEnergy( 0.0 ); + if ( fPhysicsCase == "FTFP_BERT_ATL" ) { + theBERTmodel->SetMaxEnergy( bertMaxE_ATL ); + theIonBICmodel->SetMaxEnergy( bertMaxE_ATL ); + theFTFPmodel_aboveThreshold->SetMinEnergy( ftfpMinE_ATL ); + theFTFPmodel_constrained->SetMinEnergy( ftfpMinE_ATL ); + } else { + theBERTmodel->SetMaxEnergy( bertMaxE ); + theIonBICmodel->SetMaxEnergy( bertMaxE ); + theFTFPmodel_aboveThreshold->SetMinEnergy( ftfpMinE ); + theFTFPmodel_constrained->SetMinEnergy( ftfpMinE ); + } + if ( fPhysicsCase == "FTFP_INCLXX" ) { + theINCLmodel->SetMaxEnergy( bertMaxE ); + } + if ( fPhysicsCase == "QGSP_BERT" || + fPhysicsCase == "QGSP_BIC" ) { + theFTFPmodel_constrained->SetMaxEnergy( ftfpMaxE ); + theFTFPmodel_belowThreshold->SetMaxEnergy( ftfpMaxE ); + theQGSPmodel->SetMinEnergy( qgspMinE ); + theBICmodel->SetMaxEnergy( bertMaxE ); + } + } + + // Cross sections (needed by Geant4 to sample the target nucleus from the target material) + G4VCrossSectionDataSet* thePionMinusXSdata = + new G4BGGPionInelasticXS( G4PionMinus::Definition() ); + thePionMinusXSdata->BuildPhysicsTable( *(G4PionMinus::Definition()) ); + G4VCrossSectionDataSet* thePionPlusXSdata = + new G4BGGPionInelasticXS( G4PionPlus::Definition() ); + thePionPlusXSdata->BuildPhysicsTable( *(G4PionPlus::Definition()) ); + G4VCrossSectionDataSet* theKaonXSdata = + new G4CrossSectionInelastic( new G4ComponentGGHadronNucleusXsc ); + theKaonXSdata->BuildPhysicsTable( *(G4KaonMinus::Definition()) ); + theKaonXSdata->BuildPhysicsTable( *(G4KaonPlus::Definition()) ); + theKaonXSdata->BuildPhysicsTable( *(G4KaonZeroLong::Definition()) ); + theKaonXSdata->BuildPhysicsTable( *(G4KaonZeroShort::Definition()) ); + G4VCrossSectionDataSet* theProtonXSdata = new G4BGGNucleonInelasticXS( G4Proton::Proton() ); + theProtonXSdata->BuildPhysicsTable( *(G4Proton::Definition()) ); + G4VCrossSectionDataSet* theNeutronXSdata = new G4NeutronInelasticXS; + theNeutronXSdata->BuildPhysicsTable( *(G4Neutron::Definition()) ); + // For hyperon and anti-hyperons we can use either Chips or, for G4 >= 10.5, + // Glauber-Gribov cross sections + //G4VCrossSectionDataSet* theHyperonsXSdata = new G4ChipsHyperonInelasticXS; + G4VCrossSectionDataSet* theHyperonsXSdata = + new G4CrossSectionInelastic( new G4ComponentGGHadronNucleusXsc ); + G4VCrossSectionDataSet* theAntibaryonsXSdata = + new G4CrossSectionInelastic( new G4ComponentAntiNuclNuclearXS ); + G4VCrossSectionDataSet* theNuclNuclXSdata = + new G4CrossSectionInelastic( new G4ComponentGGNuclNuclXsc ); + + // Set up inelastic processes : store them in a map (with particle definition as key) + // for convenience + typedef std::pair< G4ParticleDefinition*, G4HadronicProcess* > ProcessPair; + G4HadronicProcess* thePionMinusInelasticProcess = + new G4HadronInelasticProcess( "pi-Inelastic", G4PionMinus::Definition() ); + fProcessMap.insert( ProcessPair( G4PionMinus::Definition(), thePionMinusInelasticProcess ) ); + G4HadronicProcess* thePionPlusInelasticProcess = + new G4HadronInelasticProcess( "pi+Inelastic", G4PionPlus::Definition() ); + fProcessMap.insert( ProcessPair( G4PionPlus::Definition(), thePionPlusInelasticProcess ) ); + G4HadronicProcess* theKaonMinusInelasticProcess = + new G4HadronInelasticProcess( "kaon-Inelastic", G4KaonMinus::Definition() ); + fProcessMap.insert( ProcessPair( G4KaonMinus::Definition(), theKaonMinusInelasticProcess ) ); + G4HadronicProcess* theKaonPlusInelasticProcess = + new G4HadronInelasticProcess( "kaon+Inelastic", G4KaonPlus::Definition() ); + fProcessMap.insert( ProcessPair( G4KaonPlus::Definition(), theKaonPlusInelasticProcess ) ); + G4HadronicProcess* theKaonZeroLInelasticProcess = + new G4HadronInelasticProcess( "kaon0LInelastic", G4KaonZeroLong::Definition() ); + fProcessMap.insert( ProcessPair( G4KaonZeroLong::Definition(), theKaonZeroLInelasticProcess)); + G4HadronicProcess* theKaonZeroSInelasticProcess = + new G4HadronInelasticProcess( "kaon0SInelastic", G4KaonZeroShort::Definition() ); + fProcessMap.insert( ProcessPair( G4KaonZeroShort::Definition(), theKaonZeroSInelasticProcess)); + G4HadronicProcess* theProtonInelasticProcess = + new G4HadronInelasticProcess( "protonInelastic", G4Proton::Definition() ); + fProcessMap.insert( ProcessPair( G4Proton::Definition(), theProtonInelasticProcess ) ); + G4HadronicProcess* theNeutronInelasticProcess = + new G4HadronInelasticProcess( "neutronInelastic", G4Neutron::Definition() ); + fProcessMap.insert( ProcessPair( G4Neutron::Definition(), theNeutronInelasticProcess ) ); + G4HadronicProcess* theDeuteronInelasticProcess = + new G4HadronInelasticProcess( "dInelastic", G4Deuteron::Definition() ); + fProcessMap.insert( ProcessPair( G4Deuteron::Definition(), theDeuteronInelasticProcess ) ); + G4HadronicProcess* theTritonInelasticProcess = + new G4HadronInelasticProcess( "tInelastic", G4Triton::Definition() ); + fProcessMap.insert( ProcessPair( G4Triton::Definition(), theTritonInelasticProcess ) ); + G4HadronicProcess* theHe3InelasticProcess = + new G4HadronInelasticProcess( "he3Inelastic", G4He3::Definition() ); + fProcessMap.insert( ProcessPair( G4He3::Definition(), theHe3InelasticProcess ) ); + G4HadronicProcess* theAlphaInelasticProcess = + new G4HadronInelasticProcess( "alphaInelastic", G4Alpha::Definition() ); + fProcessMap.insert( ProcessPair( G4Alpha::Definition(), theAlphaInelasticProcess ) ); + G4HadronicProcess* theIonInelasticProcess = + new G4HadronInelasticProcess( "ionInelastic", G4GenericIon::Definition() ); + fProcessMap.insert( ProcessPair( G4GenericIon::Definition(), theIonInelasticProcess ) ); + G4HadronicProcess* theLambdaInelasticProcess = + new G4HadronInelasticProcess( "lambdaInelastic", G4Lambda::Definition() ); + fProcessMap.insert( ProcessPair( G4Lambda::Definition(), theLambdaInelasticProcess ) ); + G4HadronicProcess* theSigmaMinusInelasticProcess = + new G4HadronInelasticProcess( "sigma-Inelastic", G4SigmaMinus::Definition() ); + fProcessMap.insert( ProcessPair( G4SigmaMinus::Definition(), theSigmaMinusInelasticProcess ) ); + G4HadronicProcess* theSigmaPlusInelasticProcess = + new G4HadronInelasticProcess( "sigma+Inelastic", G4SigmaPlus::Definition() ); + fProcessMap.insert( ProcessPair( G4SigmaPlus::Definition(), theSigmaPlusInelasticProcess ) ); + G4HadronicProcess* theXiMinusInelasticProcess = + new G4HadronInelasticProcess( "xi-Inelastic", G4XiMinus::Definition() ); + fProcessMap.insert( ProcessPair( G4XiMinus::Definition(), theXiMinusInelasticProcess ) ); + G4HadronicProcess* theXiZeroInelasticProcess = + new G4HadronInelasticProcess( "xi0Inelastic", G4XiZero::Definition() ); + fProcessMap.insert( ProcessPair( G4XiZero::Definition(), theXiZeroInelasticProcess ) ); + G4HadronicProcess* theOmegaMinusInelasticProcess = + new G4HadronInelasticProcess( "omega-Inelastic", G4OmegaMinus::Definition() ); + fProcessMap.insert( ProcessPair( G4OmegaMinus::Definition(), theOmegaMinusInelasticProcess)); + G4HadronicProcess* theAntiProtonInelasticProcess = + new G4HadronInelasticProcess( "anti_protonInelastic", G4AntiProton::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiProton::Definition(), theAntiProtonInelasticProcess ) ); + G4HadronicProcess* theAntiNeutronInelasticProcess = + new G4HadronInelasticProcess( "anti_neutronInelastic", G4AntiNeutron::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiNeutron::Definition(), theAntiNeutronInelasticProcess)); + G4HadronicProcess* theAntiDeuteronInelasticProcess = + new G4HadronInelasticProcess( "anti_deuteronInelastic", G4AntiDeuteron::Definition()); + fProcessMap.insert( ProcessPair( G4AntiDeuteron::Definition(), + theAntiDeuteronInelasticProcess ) ); + G4HadronicProcess* theAntiTritonInelasticProcess = + new G4HadronInelasticProcess( "anti_tritonInelastic", G4AntiTriton::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiTriton::Definition(), theAntiTritonInelasticProcess ) ); + G4HadronicProcess* theAntiHe3InelasticProcess = + new G4HadronInelasticProcess( "anti_He3Inelastic", G4AntiHe3::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiHe3::Definition(), theAntiHe3InelasticProcess ) ); + G4HadronicProcess* theAntiAlphaInelasticProcess = + new G4HadronInelasticProcess( "anti_alphaInelastic", G4AntiAlpha::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiAlpha::Definition(), theAntiAlphaInelasticProcess ) ); + G4HadronicProcess* theAntiLambdaInelasticProcess = + new G4HadronInelasticProcess( "anti-lambdaInelastic", G4AntiLambda::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiLambda::Definition(), theAntiLambdaInelasticProcess ) ); + G4HadronicProcess* theAntiSigmaMinusInelasticProcess = + new G4HadronInelasticProcess( "anti_sigma-Inelastic", G4AntiSigmaMinus::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiSigmaMinus::Definition(), + theAntiSigmaMinusInelasticProcess ) ); + G4HadronicProcess* theAntiSigmaPlusInelasticProcess = + new G4HadronInelasticProcess( "anti_sigma+Inelastic", G4AntiSigmaPlus::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiSigmaPlus::Definition(), + theAntiSigmaPlusInelasticProcess ) ); + G4HadronicProcess* theAntiXiMinusInelasticProcess = + new G4HadronInelasticProcess( "anti_xi-Inelastic", G4AntiXiMinus::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiXiMinus::Definition(), theAntiXiMinusInelasticProcess)); + G4HadronicProcess* theAntiXiZeroInelasticProcess = + new G4HadronInelasticProcess( "anti_xi0Inelastic", G4AntiXiZero::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiXiZero::Definition(), theAntiXiZeroInelasticProcess ) ); + G4HadronicProcess* theAntiOmegaMinusInelasticProcess = + new G4HadronInelasticProcess( "anti_omega-Inelastic", G4AntiOmegaMinus::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiOmegaMinus::Definition(), + theAntiOmegaMinusInelasticProcess ) ); + + G4HadronicProcess* theDPlusInelasticProcess = + new G4HadronInelasticProcess( "D+Inelastic", G4DMesonPlus::Definition() ); + fProcessMap.insert( ProcessPair( G4DMesonPlus::Definition(), theDPlusInelasticProcess ) ); + G4HadronicProcess* theDMinusInelasticProcess = + new G4HadronInelasticProcess( "D-Inelastic", G4DMesonMinus::Definition() ); + fProcessMap.insert( ProcessPair( G4DMesonMinus::Definition(), theDMinusInelasticProcess ) ); + G4HadronicProcess* theDZeroInelasticProcess = + new G4HadronInelasticProcess( "D0Inelastic", G4DMesonZero::Definition() ); + fProcessMap.insert( ProcessPair( G4DMesonZero::Definition(), theDZeroInelasticProcess ) ); + G4HadronicProcess* theAntiDZeroInelasticProcess = + new G4HadronInelasticProcess( "anti_D0Inelastic", G4AntiDMesonZero::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiDMesonZero::Definition(), + theAntiDZeroInelasticProcess ) ); + G4HadronicProcess* theDsPlusInelasticProcess = + new G4HadronInelasticProcess( "Ds+Inelastic", G4DsMesonPlus::Definition() ); + fProcessMap.insert( ProcessPair( G4DsMesonPlus::Definition(), theDsPlusInelasticProcess ) ); + G4HadronicProcess* theDsMinusInelasticProcess = + new G4HadronInelasticProcess( "Ds-Inelastic", G4DsMesonMinus::Definition() ); + fProcessMap.insert( ProcessPair( G4DsMesonMinus::Definition(), theDsMinusInelasticProcess ) ); + G4HadronicProcess* theBPlusInelasticProcess = + new G4HadronInelasticProcess( "B+Inelastic", G4BMesonPlus::Definition() ); + fProcessMap.insert( ProcessPair( G4BMesonPlus::Definition(), theBPlusInelasticProcess ) ); + G4HadronicProcess* theBMinusInelasticProcess = + new G4HadronInelasticProcess( "B-Inelastic", G4BMesonMinus::Definition() ); + fProcessMap.insert( ProcessPair( G4BMesonMinus::Definition(), theBMinusInelasticProcess ) ); + G4HadronicProcess* theBZeroInelasticProcess = + new G4HadronInelasticProcess( "B0Inelastic", G4BMesonZero::Definition() ); + fProcessMap.insert( ProcessPair( G4BMesonZero::Definition(), theBZeroInelasticProcess ) ); + G4HadronicProcess* theAntiBZeroInelasticProcess = + new G4HadronInelasticProcess( "anti_B0Inelastic", G4AntiBMesonZero::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiBMesonZero::Definition(), + theAntiBZeroInelasticProcess ) ); + G4HadronicProcess* theBsZeroInelasticProcess = + new G4HadronInelasticProcess( "Bs0Inelastic", G4BsMesonZero::Definition() ); + fProcessMap.insert( ProcessPair( G4BsMesonZero::Definition(), theBsZeroInelasticProcess ) ); + G4HadronicProcess* theAntiBsZeroInelasticProcess = + new G4HadronInelasticProcess( "anti_Bs0Inelastic", G4AntiBsMesonZero::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiBsMesonZero::Definition(), + theAntiBsZeroInelasticProcess ) ); + G4HadronicProcess* theBcPlusInelasticProcess = + new G4HadronInelasticProcess( "Bc+Inelastic", G4BcMesonPlus::Definition() ); + fProcessMap.insert( ProcessPair( G4BcMesonPlus::Definition(), theBcPlusInelasticProcess ) ); + G4HadronicProcess* theBcMinusInelasticProcess = + new G4HadronInelasticProcess( "Bc-Inelastic", G4BcMesonMinus::Definition() ); + fProcessMap.insert( ProcessPair( G4BcMesonMinus::Definition(), theBcMinusInelasticProcess ) ); + G4HadronicProcess* theLambdacPlusInelasticProcess = + new G4HadronInelasticProcess( "lambda_c+Inelastic", G4LambdacPlus::Definition() ); + fProcessMap.insert( ProcessPair( G4LambdacPlus::Definition(), + theLambdacPlusInelasticProcess ) ); + G4HadronicProcess* theAntiLambdacPlusInelasticProcess = + new G4HadronInelasticProcess( "anti_lambda_c+Inelastic", G4AntiLambdacPlus::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiLambdacPlus::Definition(), + theAntiLambdacPlusInelasticProcess ) ); + G4HadronicProcess* theXicPlusInelasticProcess = + new G4HadronInelasticProcess( "xi_c+Inelastic", G4XicPlus::Definition() ); + fProcessMap.insert( ProcessPair( G4XicPlus::Definition(), theXicPlusInelasticProcess ) ); + G4HadronicProcess* theAntiXicPlusInelasticProcess = + new G4HadronInelasticProcess( "anti_xi_c+Inelastic", G4AntiXicPlus::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiXicPlus::Definition(), + theAntiXicPlusInelasticProcess ) ); + G4HadronicProcess* theXicZeroInelasticProcess = + new G4HadronInelasticProcess( "xi_c0Inelastic", G4XicZero::Definition() ); + fProcessMap.insert( ProcessPair( G4XicZero::Definition(), theXicZeroInelasticProcess ) ); + G4HadronicProcess* theAntiXicZeroInelasticProcess = + new G4HadronInelasticProcess( "anti_xi_c0Inelastic", G4AntiXicZero::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiXicZero::Definition(), + theAntiXicZeroInelasticProcess ) ); + G4HadronicProcess* theOmegacZeroInelasticProcess = + new G4HadronInelasticProcess( "omega_c0Inelastic", G4OmegacZero::Definition() ); + fProcessMap.insert( ProcessPair( G4OmegacZero::Definition(), theOmegacZeroInelasticProcess ) ); + G4HadronicProcess* theAntiOmegacZeroInelasticProcess = + new G4HadronInelasticProcess( "anti_omega_c0Inelastic", G4AntiOmegacZero::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiOmegacZero::Definition(), + theAntiOmegacZeroInelasticProcess ) ); + G4HadronicProcess* theLambdabInelasticProcess = + new G4HadronInelasticProcess( "lambda_bInelastic", G4Lambdab::Definition() ); + fProcessMap.insert( ProcessPair( G4Lambdab::Definition(), theLambdabInelasticProcess ) ); + G4HadronicProcess* theAntiLambdabInelasticProcess = + new G4HadronInelasticProcess( "anti_lambda_bInelastic", G4AntiLambdab::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiLambdab::Definition(), + theAntiLambdabInelasticProcess ) ); + G4HadronicProcess* theXibZeroInelasticProcess = + new G4HadronInelasticProcess( "xi_b0Inelastic", G4XibZero::Definition() ); + fProcessMap.insert( ProcessPair( G4XibZero::Definition(), theXibZeroInelasticProcess ) ); + G4HadronicProcess* theAntiXibZeroInelasticProcess = + new G4HadronInelasticProcess( "anti_xi_b0Inelastic", G4AntiXibZero::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiXibZero::Definition(), + theAntiXibZeroInelasticProcess ) ); + G4HadronicProcess* theXibMinusInelasticProcess = + new G4HadronInelasticProcess( "xi_b-Inelastic", G4XibMinus::Definition() ); + fProcessMap.insert( ProcessPair( G4XibMinus::Definition(), theXibMinusInelasticProcess ) ); + G4HadronicProcess* theAntiXibMinusInelasticProcess = + new G4HadronInelasticProcess( "anti_xi_b-Inelastic", G4AntiXibMinus::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiXibMinus::Definition(), + theAntiXibMinusInelasticProcess ) ); + G4HadronicProcess* theOmegabMinusInelasticProcess = + new G4HadronInelasticProcess( "omega_b-Inelastic", G4OmegabMinus::Definition() ); + fProcessMap.insert( ProcessPair( G4OmegabMinus::Definition(), + theOmegabMinusInelasticProcess ) ); + G4HadronicProcess* theAntiOmegabMinusInelasticProcess = + new G4HadronInelasticProcess( "anti_omega_b-Inelastic", G4AntiOmegabMinus::Definition() ); + fProcessMap.insert( ProcessPair( G4AntiOmegabMinus::Definition(), + theAntiOmegabMinusInelasticProcess ) ); + + + // FLUKA ADAPTATION + if ( fPhysicsCase == "CFLUKAHI") { +#ifdef G4_USE_FLUKA + fPhysicsCaseIsSupported = true; + + // FLUKA HADRON - NUCLEUS INELASTIC XS + auto flukaInelasticScatteringXS = new FLUKAInelasticScatteringXS(); + + theProtonInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiProtonInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theNeutronInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiNeutronInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + thePionMinusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + thePionPlusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theKaonMinusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theKaonPlusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theKaonZeroLInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theKaonZeroSInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + + // * Hyperons and anti-hyperons + // NB: Could have used G4HadParticles::GetHyperons() and G4HadParticles::GetAntiHyperons(). + // * BC hadrons + // NB: Could have used G4HadParticles::GetBCHadrons. + theLambdaInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theSigmaMinusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theSigmaPlusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theXiMinusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theXiZeroInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theOmegaMinusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiLambdaInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiSigmaMinusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiSigmaPlusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiXiMinusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiXiZeroInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiOmegaMinusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theDPlusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theDMinusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theDZeroInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiDZeroInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theDsPlusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theDsMinusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theBPlusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theBMinusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theBZeroInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiBZeroInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theBsZeroInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiBsZeroInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theBcPlusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theBcMinusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theLambdacPlusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiLambdacPlusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theXicPlusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiXicPlusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theXicZeroInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiXicZeroInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theOmegacZeroInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiOmegacZeroInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theLambdabInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiLambdabInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theXibZeroInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiXibZeroInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theXibMinusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiXibMinusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theOmegabMinusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiOmegabMinusInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + + // * Light ions + // NB: Could have used G4HadParticles::GetLightIons(). + theDeuteronInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theTritonInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theHe3InelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAlphaInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + + // * Light anti-ions + // NB: Could have used G4HadParticles::GetLightAntiIons(). + theAntiDeuteronInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiTritonInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiHe3InelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + theAntiAlphaInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); + + // * Ions + // NB: Could have used G4GenericIon::GenericIon(). + theIonInelasticProcess->AddDataSet( flukaInelasticScatteringXS ); +#endif + } + // G4 XS + else { + // Add the cross sections to the corresponding hadronic processes + thePionMinusInelasticProcess->AddDataSet( thePionMinusXSdata ); + thePionPlusInelasticProcess->AddDataSet( thePionPlusXSdata ); + theKaonMinusInelasticProcess->AddDataSet( theKaonXSdata ); + theKaonPlusInelasticProcess->AddDataSet( theKaonXSdata ); + theKaonZeroLInelasticProcess->AddDataSet( theKaonXSdata ); + theKaonZeroSInelasticProcess->AddDataSet( theKaonXSdata ); + theProtonInelasticProcess->AddDataSet( theProtonXSdata ); + theNeutronInelasticProcess->AddDataSet( theNeutronXSdata ); + theDeuteronInelasticProcess->AddDataSet( theNuclNuclXSdata ); + theTritonInelasticProcess->AddDataSet( theNuclNuclXSdata ); + theHe3InelasticProcess->AddDataSet( theNuclNuclXSdata ); + theAlphaInelasticProcess->AddDataSet( theNuclNuclXSdata ); + theIonInelasticProcess->AddDataSet( theNuclNuclXSdata ); + theLambdaInelasticProcess->AddDataSet( theHyperonsXSdata ); + theSigmaMinusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theSigmaPlusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theXiMinusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theXiZeroInelasticProcess->AddDataSet( theHyperonsXSdata ); + theOmegaMinusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theAntiProtonInelasticProcess->AddDataSet( theAntibaryonsXSdata ); + theAntiNeutronInelasticProcess->AddDataSet( theAntibaryonsXSdata ); + theAntiDeuteronInelasticProcess->AddDataSet( theAntibaryonsXSdata ); + theAntiTritonInelasticProcess->AddDataSet( theAntibaryonsXSdata ); + theAntiHe3InelasticProcess->AddDataSet( theAntibaryonsXSdata ); + theAntiAlphaInelasticProcess->AddDataSet( theHyperonsXSdata ); + theAntiLambdaInelasticProcess->AddDataSet( theHyperonsXSdata ); + theAntiSigmaMinusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theAntiSigmaPlusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theAntiXiMinusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theAntiXiZeroInelasticProcess->AddDataSet( theHyperonsXSdata ); + theAntiOmegaMinusInelasticProcess->AddDataSet( theHyperonsXSdata ); + + theDPlusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theDMinusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theDZeroInelasticProcess->AddDataSet( theHyperonsXSdata ); + theAntiDZeroInelasticProcess->AddDataSet( theHyperonsXSdata ); + theDsPlusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theDsMinusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theBPlusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theBMinusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theBZeroInelasticProcess->AddDataSet( theHyperonsXSdata ); + theAntiBZeroInelasticProcess->AddDataSet( theHyperonsXSdata ); + theBsZeroInelasticProcess->AddDataSet( theHyperonsXSdata ); + theAntiBsZeroInelasticProcess->AddDataSet( theHyperonsXSdata ); + theBcPlusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theBcMinusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theLambdacPlusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theAntiLambdacPlusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theXicPlusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theAntiXicPlusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theXicZeroInelasticProcess->AddDataSet( theHyperonsXSdata ); + theAntiXicZeroInelasticProcess->AddDataSet( theHyperonsXSdata ); + theOmegacZeroInelasticProcess->AddDataSet( theHyperonsXSdata ); + theAntiOmegacZeroInelasticProcess->AddDataSet( theHyperonsXSdata ); + theLambdabInelasticProcess->AddDataSet( theHyperonsXSdata ); + theAntiLambdabInelasticProcess->AddDataSet( theHyperonsXSdata ); + theXibZeroInelasticProcess->AddDataSet( theHyperonsXSdata ); + theAntiXibZeroInelasticProcess->AddDataSet( theHyperonsXSdata ); + theXibMinusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theAntiXibMinusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theOmegabMinusInelasticProcess->AddDataSet( theHyperonsXSdata ); + theAntiOmegabMinusInelasticProcess->AddDataSet( theHyperonsXSdata ); + } + + + // FLUKA HADRON - NUCLEUS INELASTIC MODEL + if ( fPhysicsCase == "CFLUKAHI" ) { +#ifdef G4_USE_FLUKA + + // FLUKA HADRON - NUCLEUS INELASTIC MODEL + FLUKANuclearInelasticModel* flukaModel = new FLUKANuclearInelasticModel(); + + theProtonInelasticProcess->RegisterMe( flukaModel ); + theAntiProtonInelasticProcess->RegisterMe( flukaModel ); + theNeutronInelasticProcess->RegisterMe( flukaModel ); + theAntiNeutronInelasticProcess->RegisterMe( flukaModel ); + thePionMinusInelasticProcess->RegisterMe( flukaModel ); + thePionPlusInelasticProcess->RegisterMe( flukaModel ); + theKaonMinusInelasticProcess->RegisterMe( flukaModel ); + theKaonPlusInelasticProcess->RegisterMe( flukaModel ); + theKaonZeroLInelasticProcess->RegisterMe( flukaModel ); + theKaonZeroSInelasticProcess->RegisterMe( flukaModel ); + + // * Hyperons and anti-hyperons + // NB: Could have used G4HadParticles::GetHyperons() and G4HadParticles::GetAntiHyperons(). + // * BC hadrons + // NB: Could have used G4HadParticles::GetBCHadrons. + theLambdaInelasticProcess->RegisterMe( flukaModel ); + theAntiLambdaInelasticProcess->RegisterMe( flukaModel ); + theSigmaMinusInelasticProcess->RegisterMe( flukaModel ); + theAntiSigmaMinusInelasticProcess->RegisterMe( flukaModel ); + theSigmaPlusInelasticProcess->RegisterMe( flukaModel ); + theAntiSigmaPlusInelasticProcess->RegisterMe( flukaModel ); + theXiMinusInelasticProcess->RegisterMe( flukaModel ); + theAntiXiMinusInelasticProcess->RegisterMe( flukaModel ); + theXiZeroInelasticProcess->RegisterMe( flukaModel ); + theAntiXiZeroInelasticProcess->RegisterMe( flukaModel ); + theOmegaMinusInelasticProcess->RegisterMe( flukaModel ); + theAntiOmegaMinusInelasticProcess->RegisterMe( flukaModel ); + theDPlusInelasticProcess->RegisterMe( flukaModel ); + theDMinusInelasticProcess->RegisterMe( flukaModel ); + theDZeroInelasticProcess->RegisterMe( flukaModel ); + theAntiDZeroInelasticProcess->RegisterMe( flukaModel ); + theDsPlusInelasticProcess->RegisterMe( flukaModel ); + theDsMinusInelasticProcess->RegisterMe( flukaModel ); + theBPlusInelasticProcess->RegisterMe( flukaModel ); + theBMinusInelasticProcess->RegisterMe( flukaModel ); + theBZeroInelasticProcess->RegisterMe( flukaModel ); + theAntiBZeroInelasticProcess->RegisterMe( flukaModel ); + theBsZeroInelasticProcess->RegisterMe( flukaModel ); + theAntiBsZeroInelasticProcess->RegisterMe( flukaModel ); + theBcPlusInelasticProcess->RegisterMe( flukaModel ); + theBcMinusInelasticProcess->RegisterMe( flukaModel ); + theLambdacPlusInelasticProcess->RegisterMe( flukaModel ); + theAntiLambdacPlusInelasticProcess->RegisterMe( flukaModel ); + theXicPlusInelasticProcess->RegisterMe( flukaModel ); + theAntiXicPlusInelasticProcess->RegisterMe( flukaModel ); + theXicZeroInelasticProcess->RegisterMe( flukaModel ); + theAntiXicZeroInelasticProcess->RegisterMe( flukaModel ); + theOmegacZeroInelasticProcess->RegisterMe( flukaModel ); + theAntiOmegacZeroInelasticProcess->RegisterMe( flukaModel ); + theLambdabInelasticProcess->RegisterMe( flukaModel ); + theAntiLambdabInelasticProcess->RegisterMe( flukaModel ); + theXibZeroInelasticProcess->RegisterMe( flukaModel ); + theAntiXibZeroInelasticProcess->RegisterMe( flukaModel ); + theXibMinusInelasticProcess->RegisterMe( flukaModel ); + theAntiXibMinusInelasticProcess->RegisterMe( flukaModel ); + theOmegabMinusInelasticProcess->RegisterMe( flukaModel ); + theAntiOmegabMinusInelasticProcess->RegisterMe( flukaModel ); + + // * Light ions + // NB: Could have used G4HadParticles::GetLightIons(). + theDeuteronInelasticProcess->RegisterMe( flukaModel ); + theTritonInelasticProcess->RegisterMe( flukaModel ); + theHe3InelasticProcess->RegisterMe( flukaModel ); + theAlphaInelasticProcess->RegisterMe( flukaModel ); + + // * Light anti-ions + // NB: Could have used G4HadParticles::GetLightAntiIons(). + theAntiDeuteronInelasticProcess->RegisterMe( flukaModel ); + theAntiTritonInelasticProcess->RegisterMe( flukaModel ); + theAntiHe3InelasticProcess->RegisterMe( flukaModel ); + theAntiAlphaInelasticProcess->RegisterMe( flukaModel ); + + // * Ions + // NB: Could have used G4GenericIon::GenericIon(). + theIonInelasticProcess->RegisterMe( flukaModel ); +#endif + } + + // G4 MODELS + // Register the proper hadronic model(s) to the corresponding hadronic processes. + // Note: hadronic models ("BERT", "BIC", "IonBIC", "INCL", "FTFP", "QGSP") are + // used for the hadrons and energies they are applicable + // (exception for INCL, which in recent versions of Geant4 can handle + // more hadron types and higher energies than considered here). + // For "physics-list proxies" ("FTFP_BERT", "FTFP_BERT_ATL", "QGSP_BERT", + // "QGSP_BIC", "FTFP_INCLXX"), all hadron types and all energies are covered + // by combining different hadronic models - similarly (but not identically) + // to the corresponding physics lists. + if ( fPhysicsCase == "BIC" || + fPhysicsCase == "QGSP_BIC" ) { + // The BIC model is applicable to nucleons and pions, + // whereas in the physics list QGSP_BIC it is used only for nucleons + fPhysicsCaseIsSupported = true; + theProtonInelasticProcess->RegisterMe( theBICmodel ); + theNeutronInelasticProcess->RegisterMe( theBICmodel ); + if ( fPhysicsCase == "BIC" ) { + thePionMinusInelasticProcess->RegisterMe( theBICmodel ); + thePionPlusInelasticProcess->RegisterMe( theBICmodel ); + } else { + thePionMinusInelasticProcess->RegisterMe( theBERTmodel ); + thePionPlusInelasticProcess->RegisterMe( theBERTmodel ); + } + } else if ( fPhysicsCase == "INCL" || + fPhysicsCase == "FTFP_INCLXX" ) { + // We consider here for simplicity only nucleons and pions + // (although recent versions of INCL can handle others particles as well) + fPhysicsCaseIsSupported = true; + thePionMinusInelasticProcess->RegisterMe( theINCLmodel ); + thePionPlusInelasticProcess->RegisterMe( theINCLmodel ); + theProtonInelasticProcess->RegisterMe( theINCLmodel ); + theNeutronInelasticProcess->RegisterMe( theINCLmodel ); + } + if ( fPhysicsCase == "IonBIC" || + fPhysicsCase == "FTFP_BERT_ATL" || + fPhysicsCase == "FTFP_BERT" || + fPhysicsCase == "FTFP_INCLXX" || + fPhysicsCase == "QGSP_BERT" || + fPhysicsCase == "QGSP_BIC" ) { + // The Binary Light Ion model is used for ions in all physics lists + fPhysicsCaseIsSupported = true; + theDeuteronInelasticProcess->RegisterMe( theIonBICmodel ); + theTritonInelasticProcess->RegisterMe( theIonBICmodel ); + theHe3InelasticProcess->RegisterMe( theIonBICmodel ); + theAlphaInelasticProcess->RegisterMe( theIonBICmodel ); + theIonInelasticProcess->RegisterMe( theIonBICmodel ); + } + if ( fPhysicsCase == "QGSP" || + fPhysicsCase == "QGSP_BERT" || + fPhysicsCase == "QGSP_BIC" ) { + fPhysicsCaseIsSupported = true; + thePionMinusInelasticProcess->RegisterMe( theQGSPmodel ); + thePionPlusInelasticProcess->RegisterMe( theQGSPmodel ); + theKaonMinusInelasticProcess->RegisterMe( theQGSPmodel ); + theKaonPlusInelasticProcess->RegisterMe( theQGSPmodel ); + theKaonZeroLInelasticProcess->RegisterMe( theQGSPmodel ); + theKaonZeroSInelasticProcess->RegisterMe( theQGSPmodel ); + theProtonInelasticProcess->RegisterMe( theQGSPmodel ); + theNeutronInelasticProcess->RegisterMe( theQGSPmodel ); + theLambdaInelasticProcess->RegisterMe( theQGSPmodel ); + theSigmaMinusInelasticProcess->RegisterMe( theQGSPmodel ); + theSigmaPlusInelasticProcess->RegisterMe( theQGSPmodel ); + theXiMinusInelasticProcess->RegisterMe( theQGSPmodel ); + theXiZeroInelasticProcess->RegisterMe( theQGSPmodel ); + theOmegaMinusInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiProtonInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiNeutronInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiLambdaInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiSigmaMinusInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiSigmaPlusInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiXiMinusInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiXiZeroInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiOmegaMinusInelasticProcess->RegisterMe( theQGSPmodel ); + theDPlusInelasticProcess->RegisterMe( theQGSPmodel ); + theDMinusInelasticProcess->RegisterMe( theQGSPmodel ); + theDZeroInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiDZeroInelasticProcess->RegisterMe( theQGSPmodel ); + theDsPlusInelasticProcess->RegisterMe( theQGSPmodel ); + theDsMinusInelasticProcess->RegisterMe( theQGSPmodel ); + theBPlusInelasticProcess->RegisterMe( theQGSPmodel ); + theBMinusInelasticProcess->RegisterMe( theQGSPmodel ); + theBZeroInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiBZeroInelasticProcess->RegisterMe( theQGSPmodel ); + theBsZeroInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiBsZeroInelasticProcess->RegisterMe( theQGSPmodel ); + theBcPlusInelasticProcess->RegisterMe( theQGSPmodel ); + theBcMinusInelasticProcess->RegisterMe( theQGSPmodel ); + theLambdacPlusInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiLambdacPlusInelasticProcess->RegisterMe( theQGSPmodel ); + theXicPlusInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiXicPlusInelasticProcess->RegisterMe( theQGSPmodel ); + theXicZeroInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiXicZeroInelasticProcess->RegisterMe( theQGSPmodel ); + theOmegacZeroInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiOmegacZeroInelasticProcess->RegisterMe( theQGSPmodel ); + theLambdabInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiLambdabInelasticProcess->RegisterMe( theQGSPmodel ); + theXibZeroInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiXibZeroInelasticProcess->RegisterMe( theQGSPmodel ); + theXibMinusInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiXibMinusInelasticProcess->RegisterMe( theQGSPmodel ); + theOmegabMinusInelasticProcess->RegisterMe( theQGSPmodel ); + theAntiOmegabMinusInelasticProcess->RegisterMe( theQGSPmodel ); + } + if ( fPhysicsCase == "BERT" || + fPhysicsCase == "FTFP_BERT_ATL" || + fPhysicsCase == "FTFP_BERT" || + fPhysicsCase == "QGSP_BERT" ) { + // The BERT model is used for pions and nucleons in all Bertini-based physics lists + fPhysicsCaseIsSupported = true; + thePionMinusInelasticProcess->RegisterMe( theBERTmodel ); + thePionPlusInelasticProcess->RegisterMe( theBERTmodel ); + theProtonInelasticProcess->RegisterMe( theBERTmodel ); + theNeutronInelasticProcess->RegisterMe( theBERTmodel ); + } + if ( fPhysicsCase == "BERT" || + fPhysicsCase == "FTFP_BERT_ATL" || + fPhysicsCase == "FTFP_BERT" || + fPhysicsCase == "FTFP_INCLXX" || + fPhysicsCase == "QGSP_BERT" || + fPhysicsCase == "QGSP_BIC" ) { + // The BERT model is used for kaons and hyperons in all physics lists + fPhysicsCaseIsSupported = true; + theKaonMinusInelasticProcess->RegisterMe( theBERTmodel ); + theKaonPlusInelasticProcess->RegisterMe( theBERTmodel ); + theKaonZeroLInelasticProcess->RegisterMe( theBERTmodel ); + theKaonZeroSInelasticProcess->RegisterMe( theBERTmodel ); + theLambdaInelasticProcess->RegisterMe( theBERTmodel ); + theSigmaMinusInelasticProcess->RegisterMe( theBERTmodel ); + theSigmaPlusInelasticProcess->RegisterMe( theBERTmodel ); + theXiMinusInelasticProcess->RegisterMe( theBERTmodel ); + theXiZeroInelasticProcess->RegisterMe( theBERTmodel ); + theOmegaMinusInelasticProcess->RegisterMe( theBERTmodel ); + } + if ( fPhysicsCase == "FTFP" || + fPhysicsCase == "FTFP_BERT_ATL" || + fPhysicsCase == "FTFP_BERT" || + fPhysicsCase == "FTFP_INCLXX" || + fPhysicsCase == "QGSP_BERT" || + fPhysicsCase == "QGSP_BIC" ) { + // The FTFP model is applied for all hadrons, but in different energy intervals according + // whether it is consider as a stand-alone hadronic model, or within physics lists + fPhysicsCaseIsSupported = true; + theAntiDeuteronInelasticProcess->RegisterMe( theFTFPmodel ); + theAntiTritonInelasticProcess->RegisterMe( theFTFPmodel ); + theAntiHe3InelasticProcess->RegisterMe( theFTFPmodel ); + theAntiAlphaInelasticProcess->RegisterMe( theFTFPmodel ); + G4TheoFSGenerator* theFTFPmodelToBeUsed = theFTFPmodel_aboveThreshold; + if ( fPhysicsCase == "FTFP" ) { + theFTFPmodelToBeUsed = theFTFPmodel; + } else if ( fPhysicsCase == "QGSP_BERT" || fPhysicsCase == "QGSP_BIC" ) { + theFTFPmodelToBeUsed = theFTFPmodel_constrained; + } + thePionMinusInelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + thePionPlusInelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + theKaonMinusInelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + theKaonPlusInelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + theKaonZeroLInelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + theKaonZeroSInelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + theProtonInelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + theAntiProtonInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theNeutronInelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + theAntiNeutronInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theLambdaInelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + theAntiLambdaInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theSigmaMinusInelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + theAntiSigmaMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theSigmaPlusInelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + theAntiSigmaPlusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theXiMinusInelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + theAntiXiMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theXiZeroInelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + theAntiXiZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theOmegaMinusInelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + theAntiOmegaMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theDPlusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theDMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theDZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theAntiDZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theDsPlusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theDsMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theBPlusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theBMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theBZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theAntiBZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theBsZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theAntiBsZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theBcPlusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theBcMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theLambdacPlusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theAntiLambdacPlusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theXicPlusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theAntiXicPlusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theXicZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theAntiXicZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theOmegacZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theAntiOmegacZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theLambdabInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theAntiLambdabInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theXibZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theAntiXibZeroInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theXibMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theAntiXibMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theOmegabMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theAntiOmegabMinusInelasticProcess->RegisterMe( theFTFPmodel_belowThreshold ); + theFTFPmodelToBeUsed = theFTFPmodel_aboveThreshold; + if ( fPhysicsCase == "FTFP" ) theFTFPmodelToBeUsed = theFTFPmodel; + theDeuteronInelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + theTritonInelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + theHe3InelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + theAlphaInelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + theIonInelasticProcess->RegisterMe( theFTFPmodelToBeUsed ); + } + + if ( ! fPhysicsCaseIsSupported ) { + G4cerr << "ERROR: Not supported final-state hadronic inelastic physics case !" + << fPhysicsCase << G4endl + << "\t Re-try by choosing one of the following:" << G4endl + << "\t - Hadronic models : BERT, BIC, IonBIC, INCL, FTFP, QGSP" << G4endl + << "\t - \"Physics-list proxies\" : FTFP_BERT (default), FTFP_BERT_ATL, \ + QGSP_BERT, QGSP_BIC, FTFP_INCLXX" + << G4endl; + } + +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +HadronicGenerator::~HadronicGenerator() { + fPartTable->DeleteAllParticles(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4bool HadronicGenerator::IsApplicable( const G4String &nameProjectile, + const G4double projectileEnergy ) const { + G4ParticleDefinition* projectileDefinition = fPartTable->FindParticle( nameProjectile ); + return IsApplicable( projectileDefinition, projectileEnergy ); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4bool HadronicGenerator::IsApplicable( G4ParticleDefinition* projectileDefinition, + const G4double projectileEnergy ) const { + if ( projectileDefinition == nullptr ) return false; + G4bool isApplicable = true; + // No restrictions for "physics list proxies" because they cover all hadron types and energies. + // For the individual models, instead, we need to consider their limitations. + if ( fPhysicsCase == "BERT" ) { + // We consider BERT model below 15 GeV + if ( ( ( projectileDefinition != G4PionMinus::Definition() ) && + ( projectileDefinition != G4PionPlus::Definition() ) && + ( projectileDefinition != G4Proton::Definition() ) && + ( projectileDefinition != G4Neutron::Definition() ) && + ( projectileDefinition != G4Lambda::Definition() ) && + ( projectileDefinition != G4SigmaMinus::Definition() ) && + ( projectileDefinition != G4SigmaPlus::Definition() ) && + ( projectileDefinition != G4XiMinus::Definition() ) && + ( projectileDefinition != G4XiZero::Definition() ) && + ( projectileDefinition != G4OmegaMinus::Definition() ) ) || + ( projectileEnergy > 15.0*CLHEP::GeV ) ) { + isApplicable = false; + } + } else if ( fPhysicsCase == "QGSP" ) { + // We consider QGSP above 2 GeV and not for ions or anti-ions + if ( projectileEnergy < 2.0*CLHEP::GeV || + projectileDefinition == G4Deuteron::Definition() || + projectileDefinition == G4Triton::Definition() || + projectileDefinition == G4He3::Definition() || + projectileDefinition == G4Alpha::Definition() || + projectileDefinition == G4GenericIon::Definition() || + projectileDefinition == G4AntiDeuteron::Definition() || + projectileDefinition == G4AntiTriton::Definition() || + projectileDefinition == G4AntiHe3::Definition() || + projectileDefinition == G4AntiAlpha::Definition() ) { + isApplicable = false; + } + } else if ( fPhysicsCase == "BIC" || fPhysicsCase == "INCL" ) { + // We consider BIC and INCL models only for pions and nucleons below 10 GeV + // (although in recent versions INCL is capable of handling more hadrons + // and up to higher energies) + if ( ( ( projectileDefinition != G4PionMinus::Definition() ) && + ( projectileDefinition != G4PionPlus::Definition() ) && + ( projectileDefinition != G4Proton::Definition() ) && + ( projectileDefinition != G4Neutron::Definition() ) ) || + ( projectileEnergy > 10.0*CLHEP::GeV ) ) { + isApplicable = false; + } + } else if ( fPhysicsCase == "IonBIC" ) { + // We consider IonBIC models only for deuteron, triton, He3, alpha + // with energies below 10 GeV / nucleon + if ( ! ( ( projectileDefinition == G4Deuteron::Definition() && + projectileEnergy < 2*10.0*CLHEP::GeV ) || + ( projectileDefinition == G4Triton::Definition() && + projectileEnergy < 3*10.0*CLHEP::GeV ) || + ( projectileDefinition == G4He3::Definition() && + projectileEnergy < 3*10.0*CLHEP::GeV ) || + ( projectileDefinition == G4Alpha::Definition() && + projectileEnergy < 4*10.0*CLHEP::GeV ) ) ) { + isApplicable = false; + } + } + return isApplicable; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4VParticleChange* HadronicGenerator:: +GenerateInteraction( const G4String &nameProjectile, const G4double projectileEnergy, + const G4ThreeVector &projectileDirection, G4Material* targetMaterial ) { + G4ParticleDefinition* projectileDefinition = fPartTable->FindParticle( nameProjectile ); + return GenerateInteraction( projectileDefinition, projectileEnergy, + projectileDirection, targetMaterial ); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4VParticleChange* HadronicGenerator:: +GenerateInteraction( G4ParticleDefinition* projectileDefinition, const G4double projectileEnergy, + const G4ThreeVector &projectileDirection, G4Material* targetMaterial ) { + // This is the most important method of the HadronicGenerator class: + // the method performs the specified hadronic interaction + // (by invoking the "PostStepDoIt" method of the corresponding hadronic process) + // and returns the final state, i.e. the secondaries produced by the collision. + // It is a relatively short method because the heavy load of setting up all + // possible hadronic processes - with their hadronic models, transition regions, + // and cross sections (the latter is needed for sampling the target nucleus from + // the target material) - was already done by the constructor of the class. + G4VParticleChange* aChange = nullptr; + + if ( projectileDefinition == nullptr ) { + G4cerr << "ERROR: projectileDefinition is NULL !" << G4endl; + return aChange; + } + + // Debugging print-out + //G4cout << "\t" << projectileDefinition->GetParticleName() + // << "\t" << projectileEnergy/CLHEP::GeV + // << " GeV \t" << projectileDirection + // << "\t" << ( targetMaterial ? targetMaterial->GetName() : "NULL" ); + if ( ! IsApplicable( projectileDefinition, projectileEnergy ) ) { + //G4cout << " -> NOT applicable !" ; //<< G4endl; // Debugging print-out + return aChange; + } + //G4cout << G4endl; + + // Check Geant4 state (not strictly needed) + //if ( ! G4StateManager::GetStateManager()->SetNewState( G4State_PreInit ) ) { + // G4cerr << "ERROR: No possible to set G4State_PreInit !" << G4endl; + // return aChange; + //} + + // Geometry definition (not strictly needed) + //const G4double dimX = 1.0*mm; + //const G4double dimY = 1.0*mm; + //const G4double dimZ = 1.0*mm; + //G4Box* sFrame = new G4Box( "Box", dimX, dimY, dimZ ); + //G4LogicalVolume* lFrame = new G4LogicalVolume( sFrame, targetMaterial, "Box", 0, 0, 0 ); + //G4PVPlacement* pFrame = new G4PVPlacement( 0, G4ThreeVector(), "Box", lFrame, 0, false, 0 ); + //G4TransportationManager::GetTransportationManager()->SetWorldForTracking( pFrame ); + + // Projectile track & step + G4DynamicParticle dParticle( projectileDefinition, projectileDirection, projectileEnergy ); + const G4double aTime = 0.0; + const G4ThreeVector aPosition = G4ThreeVector( 0.0, 0.0, 0.0 ); + G4Track* gTrack = new G4Track( &dParticle, aTime, aPosition ); + G4TouchableHandle fpTouchable( new G4TouchableHistory ); // Not strictly needed + gTrack->SetTouchableHandle( fpTouchable ); // Not strictly needed + G4Step* step = new G4Step; + step->SetTrack( gTrack ); + gTrack->SetStep( step ); + G4StepPoint* aPoint = new G4StepPoint; + aPoint->SetPosition( aPosition ); + aPoint->SetMaterial( targetMaterial ); + step->SetPreStepPoint( aPoint ); + dParticle.SetKineticEnergy( projectileEnergy ); + gTrack->SetStep( step ); + gTrack->SetKineticEnergy( projectileEnergy ); + + // Change Geant4 state: from "PreInit" to "Idle" (not strictly needed) + //if ( ! G4StateManager::GetStateManager()->SetNewState( G4State_Idle ) ) { + // G4cerr << "ERROR: No possible to set G4State_Idle !" << G4endl; + // return aChange; + //} + + // Finally, the hadronic interaction: hadron projectile and ion projectile + // need to be treated slightly differently + G4HadronicProcess* theProcess = nullptr; + G4ParticleDefinition* theProjectileDef = nullptr; + if ( projectileDefinition->IsGeneralIon() ) { + theProjectileDef = G4GenericIon::Definition(); + } else { + theProjectileDef = projectileDefinition; + } + auto mapIndex = fProcessMap.find( theProjectileDef ); + if ( mapIndex != fProcessMap.end() ) theProcess = mapIndex->second; + if ( theProcess != nullptr ) { + aChange = theProcess->PostStepDoIt( *gTrack, *step ); + //************************************************** + } else { + G4cerr << "ERROR: theProcess is nullptr !" << G4endl; + } + fLastHadronicProcess = theProcess; + //delete pFrame; + //delete lFrame; + //delete sFrame; + + return aChange; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double HadronicGenerator::GetImpactParameter() const { + G4double impactParameter = -999.0 * fermi; + G4HadronicProcess* hadProcess = GetHadronicProcess(); + G4HadronicInteraction* hadInteraction = GetHadronicInteraction(); + G4HadronicInteraction* wantedHadInteraction = + const_cast< G4HadronicProcess* >( hadProcess )->GetHadronicModel( "FTFP" ); + if ( hadInteraction != nullptr && hadInteraction == wantedHadInteraction ) { + // FTFP has handled the inelastic hadronic interaction. + G4TheoFSGenerator* theoFSGenerator = dynamic_cast< G4TheoFSGenerator* >( hadInteraction ); + if ( theoFSGenerator != nullptr ) { + const G4FTFModel* ftfModel + = dynamic_cast(theoFSGenerator->GetHighEnergyGenerator()); + if ( ftfModel != nullptr ) { + // ftfModel points to the G4FTFModel object instance that handled the + // inelastic hadronic interaction. + impactParameter = ftfModel->GetImpactParameter(); + //G4cout << "\t impactParameter = " << impactParameter/fermi << " fm" << G4endl; + } + } + } + return impactParameter; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4int HadronicGenerator::GetNumberOfProjectileSpectatorNucleons() const { + G4double numProjectileSpectatorNucleons = -999; + G4HadronicProcess* hadProcess = GetHadronicProcess(); + G4HadronicInteraction* hadInteraction = GetHadronicInteraction(); + G4HadronicInteraction* wantedHadInteraction = + const_cast< G4HadronicProcess* >( hadProcess )->GetHadronicModel( "FTFP" ); + if ( hadInteraction != nullptr && hadInteraction == wantedHadInteraction ) { + G4TheoFSGenerator* theoFSGenerator = dynamic_cast< G4TheoFSGenerator* >( hadInteraction ); + if ( theoFSGenerator != nullptr ) { + const G4FTFModel* ftfModel + = dynamic_cast(theoFSGenerator->GetHighEnergyGenerator()); + if ( ftfModel != nullptr ) { + numProjectileSpectatorNucleons = ftfModel->GetNumberOfProjectileSpectatorNucleons(); + //G4cout << "\t numProjectileSpectatorNucleons = " + // << numProjectileSpectatorNucleons << G4endl; + } + } + } + return numProjectileSpectatorNucleons; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4int HadronicGenerator::GetNumberOfTargetSpectatorNucleons() const { + G4double numTargetSpectatorNucleons = -999; + G4HadronicProcess* hadProcess = GetHadronicProcess(); + G4HadronicInteraction* hadInteraction = GetHadronicInteraction(); + G4HadronicInteraction* wantedHadInteraction = + const_cast< G4HadronicProcess* >( hadProcess )->GetHadronicModel( "FTFP" ); + if ( hadInteraction != nullptr && hadInteraction == wantedHadInteraction ) { + G4TheoFSGenerator* theoFSGenerator = dynamic_cast< G4TheoFSGenerator* >( hadInteraction ); + if ( theoFSGenerator != nullptr ) { + const G4FTFModel* ftfModel + = dynamic_cast(theoFSGenerator->GetHighEnergyGenerator()); + if ( ftfModel != nullptr ) { + numTargetSpectatorNucleons = ftfModel->GetNumberOfTargetSpectatorNucleons(); + //G4cout << "\t numTargetSpectatorNucleons = " << numTargetSpectatorNucleons << G4endl; + } + } + } + return numTargetSpectatorNucleons; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4int HadronicGenerator::GetNumberOfNNcollisions() const { + G4double numNNcollisions = -999; + G4HadronicProcess* hadProcess = GetHadronicProcess(); + G4HadronicInteraction* hadInteraction = GetHadronicInteraction(); + G4HadronicInteraction* wantedHadInteraction = + const_cast< G4HadronicProcess* >( hadProcess )->GetHadronicModel( "FTFP" ); + if ( hadInteraction != nullptr && hadInteraction == wantedHadInteraction ) { + G4TheoFSGenerator* theoFSGenerator = dynamic_cast< G4TheoFSGenerator* >( hadInteraction ); + if ( theoFSGenerator != nullptr ) { + const G4FTFModel* ftfModel + = dynamic_cast(theoFSGenerator->GetHighEnergyGenerator()); + if ( ftfModel != nullptr ) { + numNNcollisions = ftfModel->GetNumberOfNNcollisions(); + //G4cout << "\t numNNcollisions = " << numNNcollisions << G4endl; + } + } + } + return numNNcollisions; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/study_final_state.flair b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/study_final_state.flair new file mode 100644 index 00000000000..faf53b14de8 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/study_final_state.flair @@ -0,0 +1,734 @@ +# flair project file +Version: 300 +Mode: fluka +Title: Study interactions final state: secondaries energy spectra + residual nuclei distribution (0.1M events). +md5: d41d8cd98f00b204e9800998ecf8427e +Input: +EndInput + +Page: Plot +plotengine: Gnuplot + +# Run information +Run: + queue: *Default +End +Geometry: Geometry + Frame.tsplit: 1.0 +End + +# Plots information +Plot: proton + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 43 + det.1: 44 + det.2: 51 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 1 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + title: 7 TeV proton - C nucleus collisions secondaries: Protons spectrum (0.1M events) + xlabel: Kinetic Energy + xlog: 1 + xmax: 1E4 + xmin: 1E-5 + y.0: 1 + y.1: 1 + y.2: 1 + ylabel: dN / d(logE) [1/pr] + ylog: 1 + ymin: 1E-5 +End +Plot: anti_proton + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 23 + det.1: 24 + det.2: 26 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 2 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + title: 7 TeV proton - C nucleus collisions secondaries: Antiprotons spectrum (0.1M events) + xlabel: Kinetic Energy + xlog: 1 + xmax: 1E4 + xmin: 1E-5 + y.0: 1 + y.1: 1 + y.2: 1 + ylabel: dN / d(logE) [1/pr] + ylog: 1 + ymin: 1E-5 +End +Plot: neutron + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 38 + det.1: 39 + det.2: 43 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 3 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + title: 7 TeV proton - C nucleus collisions secondaries: Neutrons spectrum (0.1M events) + xlabel: Kinetic Energy + xlog: 1 + xmax: 1E4 + xmin: 1E-5 + y.0: 1 + y.1: 1 + y.2: 1 + ylabel: dN / d(logE) [1/pr] + ylog: 1 + ymin: 1E-5 +End +Plot: anti_neutron + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 21 + det.1: 22 + det.2: 21 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 4 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + title: 7 TeV proton - C nucleus collisions secondaries: Antineutrons spectrum (0.1M events) + xlabel: Kinetic Energy + xlog: 1 + xmax: 1E4 + xmin: 1E-5 + y.0: 1 + y.1: 1 + y.2: 1 + ylabel: dN / d(logE) [1/pr] + ylog: 1 + ymin: 1E-5 +End +Plot: pi+ + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 40 + det.1: 41 + det.2: 48 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 5 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + title: 7 TeV proton - C nucleus collisions secondaries: Pi+ spectrum (0.1M events) + xlabel: Kinetic Energy + xlog: 1 + xmax: 1E4 + xmin: 1E-5 + y.0: 1 + y.1: 1 + y.2: 1 + ylabel: dN / d(logE) [1/pr] + ylog: 1 + ymin: 1E-5 +End +Plot: pi- + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 41 + det.1: 42 + det.2: 49 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 6 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + title: 7 TeV proton - C nucleus collisions secondaries: Pi- spectrum (0.1M events) + xlabel: Kinetic Energy + xlog: 1 + xmax: 1E4 + xmin: 1E-5 + y.0: 1 + y.1: 1 + y.2: 1 + ylabel: dN / d(logE) [1/pr] + ylog: 1 + ymin: 1E-5 +End +Plot: pi0 + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 42 + det.1: 43 + det.2: 50 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 7 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + title: 7 TeV proton - C nucleus collisions secondaries: Pi0 spectrum (0.1M events) + xlabel: Kinetic Energy + xlog: 1 + xmax: 1E4 + xmin: 1E-5 + y.0: 1 + y.1: 1 + y.2: 1 + ylabel: dN / d(logE) [1/pr] + ylog: 1 + ymin: 1E-5 +End +Plot: kaon+ + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 33 + det.1: 34 + det.2: 36 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 8 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + title: 7 TeV proton - C nucleus collisions secondaries: Kaon+ spectrum (0.1M events) + xlabel: Kinetic Energy + xlog: 1 + xmax: 1E4 + xmin: 1E-5 + y.0: 1 + y.1: 1 + y.2: 1 + ylabel: dN / d(logE) [1/pr] + ylog: 1 + ymin: 1E-5 +End +Plot: kaon- + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 34 + det.1: 35 + det.2: 37 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 9 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + title: 7 TeV proton - C nucleus collisions secondaries: Kaon- spectrum (0.1M events) + xlabel: Kinetic Energy + xlog: 1 + xmax: 1E4 + xmin: 1E-5 + y.0: 1 + y.1: 1 + y.2: 1 + ylabel: dN / d(logE) [1/pr] + ylog: 1 + ymin: 1E-5 +End +Plot: kaon0L + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 35 + det.1: 36 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 10 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + show.2: 0 + title: 7 GeV proton - Al nucleus collisions secondaries: kaon0L spectrum (0.1M events) + xlabel: Kinetic Energy + xlog: 1 + xmax: 1E4 + xmin: 1E-5 + y.0: 1 + y.1: 1 + y.2: 1 + ylabel: dN / d(logE) [1/pr] + ylog: 1 + ymin: 1E-5 +End +Plot: kaon0S + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 36 + det.1: 37 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 11 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + show.2: 0 + title: 7 GeV proton - Al nucleus collisions secondaries: kaon0S spectrum (0.1M events) + xlabel: Kinetic Energy + xlog: 1 + xmax: 1E4 + xmin: 1E-5 + y.0: 1 + y.1: 1 + y.2: 1 + ylabel: dN / d(logE) [1/pr] + ylog: 1 + ymin: 1E-5 +End +Plot: deuteron + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 29 + det.1: 30 + det.2: 32 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 12 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + title: 7 TeV proton - C nucleus collisions secondaries: Deuterons spectrum (0.1M events) + xlabel: Kinetic Energy + xlog: 1 + xmax: 1E4 + xmin: 1E-5 + y.0: 1 + y.1: 1 + y.2: 1 + ylabel: dN / d(logE) [1/pr] + ylog: 1 + ymin: 1E-5 +End +Plot: triton + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 47 + det.1: 48 + det.2: 55 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 13 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + title: 7 TeV proton - C nucleus collisions secondaries: Tritons spectrum (0.1M events) + xlabel: Kinetic Energy + xlog: 1 + xmax: 1E4 + xmin: 1E-5 + y.0: 1 + y.1: 1 + y.2: 1 + ylabel: dN / d(logE) [1/pr] + ylog: 1 + ymin: 1E-5 +End +Plot: He3 + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 14 + det.1: 14 + det.2: 12 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 14 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + title: 7 TeV proton - C nucleus collisions secondaries: He3 spectrum (0.1M events) + xlabel: Kinetic Energy + xlog: 1 + xmax: 1E4 + xmin: 1E-5 + y.0: 1 + y.1: 1 + y.2: 1 + ylabel: dN / d(logE) [1/pr] + ylog: 1 + ymin: 1E-5 +End +Plot: alpha + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 19 + det.1: 20 + det.2: 19 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 15 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + title: 7 TeV proton - C nucleus collisions secondaries: Alphas spectrum (0.1M events) + xlabel: Kinetic Energy + xlog: 1 + xmax: 1E4 + xmin: 1E-5 + y.0: 1 + y.1: 1 + y.2: 1 + ylabel: dN / d(logE) [1/pr] + ylog: 1 + ymin: 1E-5 +End +Plot: Li6 + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 16 + det.1: 16 + det.2: 15 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 16 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + title: 7 TeV proton - C nucleus collisions secondaries: Li6 spectrum (0.1M events) + xlabel: Kinetic Energy + xlog: 1 + xmax: 1E4 + xmin: 1E-5 + y.0: 1 + y.1: 1 + y.2: 1 + ylabel: dN / d(logE) [1/pr] + ylog: 1 + ymin: 1E-5 +End +Plot: e- + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.2: 34 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 17 + key.0: 0 + key.1: 0 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + show.0: 0 + show.1: 0 + title: 7 TeV proton - C nucleus collisions secondaries: Electrons spectrum (0.1M events) + xlabel: Kinetic Energy + xlog: 1 + xmax: 1E4 + xmin: 1E-5 + y.0: 1 + y.1: 1 + y.2: 1 + ylabel: dN / d(logE) [1/pr] + ylog: 1 + ymin: 1E-5 +End +Plot: gamma + Type: USR-1D + cbtics: 1 + commands: + |set xtics add ('1meV' 1e-12, '10meV' 1e-11, '100meV' 1e-10, '1eV' 1e-9, '10eV' 1e-8,'100eV' 1e-7,'1keV' 1e-6, '10keV' 1e-5, '100keV' 1e-4, '1MeV' 1e-3, '10MeV' 0.01, '100MeV' 0.1, '1GeV' 1, '10GeV' 10, '100GeV' 100, '1TeV' 1000, '10TeV' 1e4, '100TeV' 1e5) + |set mxtics 10 + det.0: 32 + det.1: 33 + det.2: 35 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 18 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + title: 7 TeV proton - C nucleus collisions secondaries: Gammas spectrum (0.1M events) + xlabel: Kinetic Energy + xlog: 1 + xmax: 1E4 + xmin: 1E-5 + y.0: 1 + y.1: 1 + y.2: 1 + ylabel: dN / d(logE) [1/pr] + ylog: 1 + ymin: 1E-5 +End +Plot: nucleiA + Type: USR-1D + cbtics: 1 + commands: set mxtics 10 + det.0: 50 + det.1: 51 + det.2: 58 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 19 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + title: 7 TeV proton - C nucleus collisions secondaries: Residual nuclei spectrum (0.1M events) + xlabel: A + xmax: 50.5 + xmin: 0 + y.0: 0 + y.1: 0 + y.2: 0 + ylabel: N [1/pr] + ymin: 1E-5 +End +Plot: nucleiZ + Type: USR-1D + cbtics: 1 + commands: set mxtics 5 + det.0: 51 + det.1: 52 + det.2: 59 + file.0: results/FTFP_BERT/all_secondaries.hist + file.1: results/QGSP_BERT/all_secondaries.hist + file.2: results/FLUKAHadronInelastic/all_secondaries.hist + grid: 1 + index: 20 + lc.0: dark-blue + lc.1: light-blue + lc.2: green + lw.0: 2 + lw.1: 2 + lw.2: 2 + name.0: FTFP BERT + name.1: QGSP BERT + name.2: FLUKA + ndetectors: 3 + title: 7 TeV proton - C nucleus collisions secondaries: Residual nuclei spectrum (0.1M events) + xlabel: Z + xmax: 25.5 + xmin: 0 + y.0: 0 + y.1: 0 + y.2: 0 + ylabel: N [1/pr] + ymin: 1E-5 +End diff --git a/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/update_final_state_flair_file.sh b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/update_final_state_flair_file.sh new file mode 100755 index 00000000000..8ef17fed3bf --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/ProcessLevel/FinalState/update_final_state_flair_file.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash + +# This script updates the `Det` fields in the Flair file, to the ones observed during the simulations. +# This is needed because the observed particles in the final state are DYNAMICALLY observed: +# the number of particles changes from one simulation to the next, depending on the physics scenario, the number of events, etc. +# Hence, one needs to look what is the index of the `protons` histogram in the .hist file, etc. +# The use of this script is not needed in the XS G4 example case, because there, a FIXED number of XS are printed in the .hist files. + +# Choose input files / number of comparison plots here +flair_file="study_final_state.flair" +num_comparison_plots=3 +plot_block_max_length=100 + + +# All plots +all_particles=$(cat $flair_file | grep "Plot:" | cut -d' ' -f2) + +# Loop on all plots +for particle in ${all_particles[@]}; do + + echo "particle=$particle"; + + # Line number of the "Plot: " block. + plot_line_number=$(grep -n -m1 "Plot: $particle" $flair_file | cut -d':' -f1) + echo "plot_line_number=$plot_line_number" + + # Find out if last plot block in the flair file. + next_plot=$(grep -A$plot_block_max_length "Plot: $particle" $flair_file | grep -n -m2 "Plot: " | wc -l) + if [ "$next_plot" -eq "2" ]; then + has_next_plot=true + else + has_next_plot=false + fi + echo "has_next_plot=$has_next_plot"; + + # Line number of the next "Plot: " block. + if [ "$has_next_plot" = true ] ; then + next_plot_line_number=$(grep -A$plot_block_max_length "Plot: $particle" $flair_file | grep -n -m2 "Plot: " | tail -n1 | cut -d':' -f1) + # (next_plot_line_number - 1) is the extra number of lines taken by the plot block. + next_plot_line_number=$(($plot_line_number + $next_plot_line_number - 1)) + else + # Last line in the flair file. + next_plot_line_number=$(cat $flair_file | wc -l) + fi + echo "next_plot_line_number=$next_plot_line_number" + + # Loop on all comparison plots. + for ((i=0; i < $num_comparison_plots; i++)); do + data_file=$(sed -n "$plot_line_number,$next_plot_line_number p" $flair_file | grep "file\.$i" | cut -d' ' -f2) + echo "data_file=$data_file" + # Data file not found: do nothing. + if [ -z "$data_file" ]; then + echo "Warning: Tried to look for data file $data_file, which does not exist! Field is not updated for this file." + # Found the data file. + else + # Get detector value in the data file. + data_det=$(grep "# Detector:.* $particle" $data_file | cut -d' ' -f4) + data_det=$(($data_det - 1)) # An extra -1 because Flair detector indexing starts from 0. + echo "data_det=$data_det" + + # Found detector value in data file. + if [ ! -z "$data_det" ]; then + + # Look for detector field in the flair file. + flair_det=$(sed -n "$plot_line_number,$next_plot_line_number p" $flair_file | grep "det\.$i") + echo "flair_det=$flair_det" + + # Update value in detector field in flair file. + if [ ! -z "$flair_det" ]; then + sed -i "$plot_line_number,$next_plot_line_number s/det\.$i.*/det\.$i: $data_det/g" $flair_file + # Flair file has no detector field in that plot: do not update field. + else + #sed -i "/file\.$i/i \ \tdet\.$i: $data_det" $flair_file + echo "Warning: No det.$i defined for plot $particle, file $data_file: field was not updated." + fi + + # Detector not found in data file: remove value in detector field in flair file. + else + sed -i "$plot_line_number,$next_plot_line_number s/det\.$i.*//" $flair_file + fi + fi + done + +done diff --git a/examples/extended/hadronic/FlukaCern/README.md b/examples/extended/hadronic/FlukaCern/README.md new file mode 100644 index 00000000000..5922dc90106 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/README.md @@ -0,0 +1,47 @@ + + Geant4 extended examples - Hadronic processes + FlukaCern examples + ---------------------------------------------- + + Examples in this directory demonstrate how to make use of + the interface to `FLUKA` hadron inelastic physics in a G4 application. + + The `FLUKA` interface itself is included, + and located in the `FlukaInterface` subdirectory. + + There are 2 independent G4 examples at the process (interaction) level, + in order to study XS and final state respectively (in `ProcessLevel`), + and instructions at the physics list level (in `PhysicsListLevel`). + + All examples benefit from `G4H1` extension (in `utils`), + allowing to make any G4 histogram also compatible with `Flair`. + + Please directly follow `ProcessLevel/CrossSection/README.md` + and `ProcessLevel/FinalState/README.md`. + The `main` are included in `HadronNucleusXS.cc` + and `HadNucIneEvents.cc` respectively. + + +ProcessLevel/CrossSection +------ + +This example allows the study of G4 cross-sections, +and in addition, of the `FLUKA` hadron-nucleus reaction cross sections. +The G4HadronicProcessStore is used to access cross sections. +The resulting XS can be plotted via `ROOT` or `Flair`. + + +ProcessLevel/FinalState/ +------ + +This example shows how to simulate inelastic hadron-nucleus interactions, +using G4 or `FLUKA` models. +The resulting final states can be plotted via `ROOT` or `Flair`. +Note that the Geant4 run-manager is not used. + + +PhysicsListLevel +------ + +A `README.md` details how to select a physics list +with hadron inelastic physics from FLUKA. diff --git a/examples/extended/hadronic/FlukaCern/utils/include/G4H1Wrapper.hh b/examples/extended/hadronic/FlukaCern/utils/include/G4H1Wrapper.hh new file mode 100644 index 00000000000..a0b7210581d --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/utils/include/G4H1Wrapper.hh @@ -0,0 +1,90 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file G4H1Wrapper.hh +/// \brief This allows statistics compatible with FLUKA. +/// It is fully relying on G4VAnalysisManager's G4H1. +// +// Author: G.Hugo, 08 December 2022 +// +// *************************************************************************** +// +// G4H1Wrapper +// +/// This allows event-level statistics. +/// This is necessary IN THIS SPECIFIC CASE ONLY, to be able to compare errors on results +/// with e.g. FLUKA, MCNP, PENELOPE, SERPENT, which all use an event-based error approach. +/// +/// It is fully relying on G4VAnalysisManager's G4H1. +/// Collects info within an event, then flush it to G4VAnalysisManager's G4H1. +// +// *************************************************************************** + +#ifndef G4H1_WRAPPER_HH +#define G4H1_WRAPPER_HH + +#include + +#include "globals.hh" +#include "g4hntools_defs.hh" + +class G4VAnalysisManager; + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class G4H1Wrapper { + +public: + G4H1Wrapper(G4VAnalysisManager* const analysisManager, + const G4int histoIndex); + + void Fill(const G4double abscissaValue, + const G4double weight); + void EndOfEvent(); + + G4double GetSumSquaredEventTotals() const { return fSumSquaredEventTotals; } + G4double GetSumSquaredEventInRangeTotals() const { return fSumSquaredEventInRangeTotals; } + G4H1* GetG4H1() const { return fHisto; } // RUN DATA (G4H1 from G4VAnalysisManager) + + +private: + G4VAnalysisManager* fAnalysisManager = nullptr; + G4int fHistoIndex; + G4H1* fHisto = nullptr; + G4int fNumBins; + + G4bool fIsSet; + G4double fUnderflow; + G4double fOverflow; + G4double fSumSquaredEventTotals; + G4double fSumSquaredEventInRangeTotals; + std::vector fEventData; // EVENT DATA (data stored on the fly WITHIN the event) +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#endif diff --git a/examples/extended/hadronic/FlukaCern/utils/include/tools_histo_flair.hh b/examples/extended/hadronic/FlukaCern/utils/include/tools_histo_flair.hh new file mode 100644 index 00000000000..6dba40d3034 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/utils/include/tools_histo_flair.hh @@ -0,0 +1,109 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file tools_histo_flair.hh +/// \brief Tools to dump any G4H1 into Flair-compatible format. +// +// Author: G.Hugo, 08 December 2022 +// +// *************************************************************************** +// +// tools_histo_flair +// +/// Tools to dump any G4H1 into Flair-compatible format. +/// +/// These tools are fully application-agnostic, +/// and could also be placed outside of the G4 examples, +/// as a core G4 Analysis Manager extension. +// +// *************************************************************************** + +#ifndef TOOLS_HISTO_FLAIR_HH +#define TOOLS_HISTO_FLAIR_HH + +#include "globals.hh" +#include "g4hntools_defs.hh" + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +namespace tools { + namespace histo { + namespace flair { + + // Supported abscissa types (can be extended) + enum Abscissa { + KineticEnergy, + Z, + A + }; + + G4String getAbscissaName(const Abscissa abscissaKind); + G4String getAbscissaUnit(const Abscissa abscissaKind); + G4double getAbscissaUnitValue(const Abscissa abscissaKind); + + G4String sformat(const char* fmt, ...); + + G4double computeError(const G4double mean, + const G4double sumSquares, + const G4int numEvents); + + // Dump G4H1 (histo mode) to a Flair-compatible format. + void dumpG4H1HistoInFlairFormat(std::ofstream& output, + const G4int indexInOutputFile, + const G4String& histoName, + G4H1* const histo, + const Abscissa abscissaKind, + const G4String& binSchemeName, + const G4int numEvents, + const G4double sumSquaredEventTotals = 0., + const G4double sumSquaredEventInRangeTotals = 0.); + + // Dump G4H1 (profile mode, ie no stats) to a Flair-compatible format. + void dumpG4H1ProfileInFlairFormat(std::ofstream& output, + const G4int indexInOutputFile, + const G4String& histoName, + G4H1* const histo, + const Abscissa abscissaKind, + const G4String& binSchemeName); + + void dumpG4H1InFlairFormat(std::ofstream& output, + const G4int indexInOutputFile, + const G4String& histoName, + G4H1* const histo, + const Abscissa abscissaKind, + const G4String& binSchemeName, + const G4int numEvents, + const G4bool isProfile = false, + const G4double sumSquaredEventTotals = 0., + const G4double sumSquaredEventInRangeTotals = 0.); + } + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +#endif diff --git a/examples/extended/hadronic/FlukaCern/utils/src/G4H1Wrapper.cc b/examples/extended/hadronic/FlukaCern/utils/src/G4H1Wrapper.cc new file mode 100644 index 00000000000..1c40f51ca16 --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/utils/src/G4H1Wrapper.cc @@ -0,0 +1,147 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file G4H1Wrapper.cc +/// \brief This allows statistics compatible with FLUKA. +/// It is fully relying on G4VAnalysisManager's G4H1. +// +// Author: G.Hugo, 08 December 2022 +// +// *************************************************************************** +// +// G4H1Wrapper +// +/// This allows event-level statistics. +/// This is necessary IN THIS SPECIFIC CASE ONLY, to be able to compare errors on results +/// with e.g. FLUKA, MCNP, PENELOPE, SERPENT, which all use an event-based error approach. +/// +/// It is fully relying on G4VAnalysisManager's G4H1. +/// Collects info within an event, then flush it to G4VAnalysisManager's G4H1. +// +// *************************************************************************** + +#include "G4H1Wrapper.hh" + +#include "G4RootAnalysisManager.hh" + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4H1Wrapper::G4H1Wrapper(G4VAnalysisManager* const analysisManager, + const G4int histoIndex) : + fAnalysisManager(analysisManager), + fHistoIndex(histoIndex), + fHisto(dynamic_cast(analysisManager)->GetH1(histoIndex)), + //fAxis(fHisto->axis()), + fNumBins(fHisto->axis().bins()), + fIsSet(false), + fUnderflow(0.), + fOverflow(0.), + fSumSquaredEventTotals(0.), + fSumSquaredEventInRangeTotals(0.) +{ + fEventData.assign(fNumBins, 0.); +} + + +// *************************************************************************** +// Fill data WITHIN THE EVENT. Can be called an arbitrary number of times. +// *************************************************************************** +void G4H1Wrapper::Fill(const G4double abscissaValue, + const G4double weight) { + if (!fIsSet) { fIsSet = true; } + + const G4int binIndex = fHisto->axis().coord_to_index(abscissaValue); + + // underflow + // See external/g4tools/include/tools/histo/axis. + if (binIndex == tools::histo::axis_UNDERFLOW_BIN) { + fUnderflow += weight; + } + // overflow + // See external/g4tools/include/tools/histo/axis. + else if (binIndex == tools::histo::axis_OVERFLOW_BIN) { + fOverflow += weight; + } + // in range + else { + fEventData[binIndex] += weight; + } +} + + +// *************************************************************************** +// End of event: flush all data collected during the event +// to G4VAnalysisManager's G4H1, then reset event data. +// *************************************************************************** +void G4H1Wrapper::EndOfEvent() { + + // Only do the flush if there was at least one fill during the event. + if (fIsSet) { + + G4double eventTotal = 0.; + // FLUSH IN RANGE DATA. + for (G4int binIndex = 0; binIndex < fNumBins; ++binIndex) { + + if (fEventData[binIndex] > 0.) { + + const G4double binKineticEnergy = fHisto->axis().bin_center(binIndex); + const G4double binEventWeight = fEventData[binIndex]; + fAnalysisManager->FillH1(fHistoIndex, + binKineticEnergy, + binEventWeight); + eventTotal += binEventWeight; + + fEventData[binIndex] = 0.; + } + } + // Also keep track of the event's total (INTEGRAL over abscissa range). + const G4double squaredEventTotal = eventTotal * eventTotal; + fSumSquaredEventInRangeTotals += squaredEventTotal; + fSumSquaredEventTotals += squaredEventTotal; + + // FLUSH UNDERFLOW DATA. + if (fUnderflow > 0.) { + fAnalysisManager->FillH1(fHistoIndex, + fHisto->axis().lower_edge() - 1., + fUnderflow); + fSumSquaredEventTotals += fUnderflow; + fUnderflow = 0.; + } + + // FLUSH OVERFLOW DATA. + if (fOverflow > 0.) { + fAnalysisManager->FillH1(fHistoIndex, + fHisto->axis().upper_edge() + 1., + fOverflow); + fSumSquaredEventTotals += fOverflow; + fOverflow = 0.; + } + + fIsSet = false; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/FlukaCern/utils/src/tools_histo_flair.cc b/examples/extended/hadronic/FlukaCern/utils/src/tools_histo_flair.cc new file mode 100644 index 00000000000..32fb980bf4e --- /dev/null +++ b/examples/extended/hadronic/FlukaCern/utils/src/tools_histo_flair.cc @@ -0,0 +1,331 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file tools_histo_flair.cc +/// \brief Tools to dump any G4H1 into Flair-compatible format. +// +// Author: G.Hugo, 08 December 2022 +// +// *************************************************************************** +// +// tools_histo_flair +// +/// Tools to dump any G4H1 into Flair-compatible format. +/// +/// These tools are fully application-agnostic, +/// and could also be placed outside of the G4 examples, +/// as a core G4 Analysis Manager extension. +// +// *************************************************************************** + +#include "tools_histo_flair.hh" + +#include +#include + +#include +#include +#include +#include + +#include "G4UnitsTable.hh" +#include "G4SystemOfUnits.hh" +#include "G4ios.hh" + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +namespace tools { + namespace histo { + namespace flair { + + // *************************************************************************** + // Returns abscissa name. + // *************************************************************************** + G4String getAbscissaName(const Abscissa abscissaKind) { + G4String abscissaName = ""; + if (abscissaKind == Abscissa::KineticEnergy) { + abscissaName = "kE"; + } + else if (abscissaKind == Abscissa::Z) { + abscissaName = "Z"; + } + else if (abscissaKind == Abscissa::A) { + abscissaName = "A"; + } + return abscissaName; + } + + + // *************************************************************************** + // Returns abscissa unit. + // *************************************************************************** + G4String getAbscissaUnit(const Abscissa abscissaKind) { + G4String abscissaUnit = ""; + if (abscissaKind == Abscissa::KineticEnergy) { + abscissaUnit = "GeV"; + } + return abscissaUnit; + } + + + // *************************************************************************** + // Returns abscissa unit value. + // *************************************************************************** + G4double getAbscissaUnitValue(const Abscissa abscissaKind) { + G4double abscissaUnitValue = 1.; + if (abscissaKind == Abscissa::KineticEnergy) { + abscissaUnitValue = G4UnitDefinition::GetValueOf(getAbscissaUnit(Abscissa::KineticEnergy)); + } + return abscissaUnitValue; + } + + + // *************************************************************************** + // String format like printf() for strings. + // This sformat function is extracted as-is from geoviewer, + // and was written by V. Vlachoudis in 2010. + // *************************************************************************** + G4String sformat(const char* fmt, ...) { + std::unique_ptr formatted; + G4int n = (G4int)strlen(fmt) * 2; // Reserve two times as much as the length of the fmt_str. + while (true) { + // Wrap the plain char array into the unique_ptr. + formatted.reset(new char[n]); + strcpy(&formatted[0], fmt); + va_list ap; + va_start(ap, fmt); + G4int final_n = vsnprintf(&formatted[0], n, fmt, ap); + va_end(ap); + if (final_n < 0 || final_n >= n) { + n += std::abs(final_n - n + 1); + } + else { + break; + } + } + return G4String(formatted.get()); + } + + + // *************************************************************************** + // Returns MC error. + // *************************************************************************** + G4double computeError(const G4double mean, + const G4double sumSquares, + const G4int numEvents) { + + const G4double var = std::max(0., sumSquares / numEvents - mean*mean); + const G4double err = ((mean != 0. && numEvents > 1) ? + std::sqrt(var / (numEvents-1)) / mean + : 1.); + + return err * 100.; + } + + + // *************************************************************************** + // Dump G4H1 (histo mode) to a Flair-compatible format. + // *************************************************************************** + void dumpG4H1HistoInFlairFormat(std::ofstream& output, + const G4int indexInOutputFile, + const G4String& histoName, + G4H1* const histo, + const Abscissa abscissaKind, + const G4String& binSchemeName, + const G4int numEvents, + const G4double sumSquaredEventTotals, + const G4double sumSquaredEventInRangeTotals) { + + const G4bool isProfile = false; + dumpG4H1InFlairFormat(output, + indexInOutputFile, + histoName, + histo, + abscissaKind, + binSchemeName, + numEvents, + isProfile, + sumSquaredEventTotals, + sumSquaredEventInRangeTotals); + } + + + // *************************************************************************** + // Dump G4H1 (profile mode, ie no stats) to a Flair-compatible format. + // *************************************************************************** + void dumpG4H1ProfileInFlairFormat(std::ofstream& output, + const G4int indexInOutputFile, + const G4String& histoName, + G4H1* const histo, + const Abscissa abscissaKind, + const G4String& binSchemeName) { + + const G4bool isProfile = true; + const G4int numEvents = 1; + dumpG4H1InFlairFormat(output, + indexInOutputFile, + histoName, + histo, + abscissaKind, + binSchemeName, + numEvents, + isProfile); + } + + + // *************************************************************************** + // Dump G4H1 (profile + histo modes) to a Flair-compatible format. + // *************************************************************************** + void dumpG4H1InFlairFormat(std::ofstream& output, + const G4int indexInOutputFile, + const G4String& histoName, + G4H1* const histo, + const Abscissa abscissaKind, + const G4String& binSchemeName, + const G4int numEvents, + const G4bool isProfile, + const G4double sumSquaredEventTotals, + const G4double sumSquaredEventInRangeTotals) { + + const G4int numBins = histo->axis().bins(); + const G4double minAbscissa = histo->axis().lower_edge(); + const G4double maxAbscissa = histo->axis().upper_edge(); + + const G4String abscissaName = getAbscissaName(abscissaKind); + const G4String abscissaUnit = getAbscissaUnit(abscissaKind); + const G4double abscissaUnitValue = getAbscissaUnitValue(abscissaKind); + + + // START HEADER. + if (indexInOutputFile != 1) { output << G4endl << G4endl; } + output << std::left << std::setw(13) << "# Detector: " << indexInOutputFile + << " " << histoName << G4endl; + output << std::left << std::setw(13) << "# Dim: " << histo->get_dimension() << G4endl; + output << std::left << std::setw(13) << "# Entries: " << numEvents << G4endl; + + if (!isProfile) { + // Total integral + const G4double total = static_cast(histo->sum_all_bin_heights()) / numEvents; + const G4double totalError = computeError(total, + sumSquaredEventTotals, + numEvents); + output << std::left << std::setw(13) << "# Total: " + << sformat("%-15g [1/pr] +/- %6.2f [%] \n", + total, + totalError); + + // In range integral + const G4double inRange = static_cast(histo->sum_bin_heights()) / numEvents; + const G4double inRangeError = computeError(inRange, + sumSquaredEventInRangeTotals, + numEvents); + output << std::left << std::setw(13) << "# InRange: " + << sformat("%-15g [1/pr] +/- %6.2f [%] \n", + inRange, + inRangeError); + + // Underflow + const G4double underflow = static_cast(histo->bins_sum_w().at(0)) / numEvents; + const G4double underflowError = computeError(underflow, + histo->bins_sum_w2().at(0), + numEvents); + output << std::left << std::setw(13) << "# Under: " + << sformat("%-15g [1/pr] +/- %6.2f [%] \n", + underflow, + underflowError); + + // Overflow + const G4double overflow = static_cast(histo->bins_sum_w().at(numBins+1)) / numEvents; + const G4double overflowError = computeError(overflow, + histo->bins_sum_w2().at(numBins+1), + numEvents); + output << std::left << std::setw(13) << "# Over: " + << sformat("%-15g [1/pr] +/- %6.2f [%] \n", + overflow, + overflowError); + } + + // END HEADER. + output << std::left << std::setw(13) << "# Log: " << binSchemeName << G4endl; + output << std::left << std::setw(13) << "# Histogram: " + << numBins + << " " << minAbscissa / abscissaUnitValue + << " " << maxAbscissa / abscissaUnitValue + << " [" << abscissaUnit << "]" + << G4endl; + + output << std::left << std::setw(13) << "# Column: " + << "1 " << abscissaName << "_min " + << "[" << abscissaUnit << "]" + << G4endl; + output << std::left << std::setw(13) << "# Column: " + << "2 " << abscissaName << "_max " + << "[" << abscissaUnit << "]" + << G4endl; + output << std::left << std::setw(13) << "# Column: " + << "3 dN/d(" << abscissaName << ") " + << "[1" << (abscissaUnit.empty() ? "" : ("/" + abscissaUnit)) << "/pr]" + << G4endl; + if (!isProfile) { + output << std::left << std::setw(13) << "# Column: " + << "4 error " + << "[%]" + << G4endl; + } + + + // HISTO / PROFILE DATA. + for (G4int binIndex = 0; binIndex < numBins; ++binIndex) { + + const G4double mean = histo->bin_height(binIndex) / numEvents; + const G4double err = computeError(mean, + histo->bins_sum_w2().at(binIndex+1), + numEvents); + + // histo mode + if (!isProfile) { + output << sformat("%15g %15g %15g %6.2f\n", + histo->axis().bin_lower_edge(binIndex) / abscissaUnitValue, + histo->axis().bin_upper_edge(binIndex) / abscissaUnitValue, + mean / histo->axis().bin_width(binIndex) * abscissaUnitValue, + err); + } + // profile mode + else { + output << sformat("%15g %15g %15g\n", + histo->axis().bin_lower_edge(binIndex) / abscissaUnitValue, + histo->axis().bin_upper_edge(binIndex) / abscissaUnitValue, + mean / histo->axis().bin_width(binIndex) * abscissaUnitValue); + } + } // loop on all bins + } // dumpG4H1InFlairFormat + + + } // namespace flair + } // namespace histo +} // namespace tools + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr00/hadr00.out b/examples/extended/hadronic/Hadr00/hadr00.out index 9bf67aa088f..b72b790e326 100644 --- a/examples/extended/hadronic/Hadr00/hadr00.out +++ b/examples/extended/hadronic/Hadr00/hadr00.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -200,7 +200,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -232,7 +232,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -264,7 +264,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -277,7 +277,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -340,7 +339,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -372,7 +371,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -404,7 +403,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -436,7 +435,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -468,7 +467,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -500,7 +499,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -532,7 +531,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV ====================================================================== @@ -938,12 +937,21 @@ Threshold for very long decay time at rest 3.171e+10 y ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -986,7 +994,7 @@ EventAction: Event # 0 started Run terminated. Run Summary Number of events processed : 10 - User=0.020000s Real=0.113868s Sys=0.000000s + User=0.020000s Real=0.099343s Sys=0.000000s RunAction: End of run actions are started HistoManager: End of run actions are started ### Fill Cross Sections for proton off Al @@ -1797,5 +1805,5 @@ HistoManager: End of run actions are started ### proton 5 GeV on G4_Al xs/X0= 4.09201 ================== Deleting memory pools =================== Number of memory pools allocated: 11 of which, static: 0 -Dynamic pools deleted: 11 / Total memory freed: 0.043 MB +Dynamic pools deleted: 11 / Total memory freed: 0.042 MB ============================================================ diff --git a/examples/extended/hadronic/Hadr01/History b/examples/extended/hadronic/Hadr01/History index 7fd36f2ebdf..3fb5aaaee9e 100644 --- a/examples/extended/hadronic/Hadr01/History +++ b/examples/extended/hadronic/Hadr01/History @@ -4,6 +4,11 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-05-22 V. Ivanchenko (exhadr01-V11-01-01) +- HistoManager - added protection agains secondary zero-energy particles + +## 2022-12-30 V. Ivanchenko (exhadr01-V11-01-00) +- Added UI commands to enable neutron general process and extra macro file ## 2022-12-18 V. Ivanchenko (exhadr01-V11-00-01) - Added UI commands to enable b- and c- particle physics and diff --git a/examples/extended/hadronic/Hadr01/hadr01.out b/examples/extended/hadronic/Hadr01/hadr01.out index 10da19e7c60..032fdd50e3d 100644 --- a/examples/extended/hadronic/Hadr01/hadr01.out +++ b/examples/extended/hadronic/Hadr01/hadr01.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -243,7 +243,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -275,7 +275,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -307,7 +307,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -320,7 +320,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -366,7 +365,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -398,7 +397,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -430,7 +429,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -462,7 +461,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -494,7 +493,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -526,7 +525,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -558,7 +557,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -950,12 +949,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1021,7 +1029,7 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics 100.00 10k 1 197 200 0.00 Check ### Run 0 starts. ### Run 0 start -Initialisation time: User=1.730000s Real=7.652657s Sys=0.170000s +Initialisation time: User=1.680000s Real=15.012639s Sys=0.100000s EventAction: Event # 0 started EventAction: Event # 10 started EventAction: Event # 20 started @@ -1035,33 +1043,33 @@ EventAction: Event # 90 started Run terminated. Run Summary Number of events processed : 100 - User=1.170000s Real=1.182756s Sys=0.000000s -RunAction::EndOfRunAction: User=1.170000s Real=1.182892s Sys=0.000000s + User=0.820000s Real=0.828541s Sys=0.000000s +RunAction::EndOfRunAction: User=0.820000s Real=0.828608s Sys=0.000000s RunAction: End of run actions are started HistoManager: End of run actions are started ======================================================== Beam particle proton Beam Energy(MeV) 3000 Number of events 100 -Average energy deposit (MeV) 639.9 RMS(MeV) 395.4 -Average number of steps 1071 -Average number of gamma 70.07 -Average number of e- 87.49 -Average number of e+ 5.06 -Average number of neutrons 27.29 -Average number of protons 5.74 +Average energy deposit (MeV) 569.3 RMS(MeV) 371.4 +Average number of steps 864.8 +Average number of gamma 55.57 +Average number of e- 70.29 +Average number of e+ 3.96 +Average number of neutrons 20.9 +Average number of protons 4.18 Average number of antiprotons 0 -Average number of pi+ & pi- 0.56 -Average number of pi0 0.36 -Average number of kaons 0.04 -Average number of muons 0.09 -Average number of deuterons+tritons 2.76 -Average number of He3+alpha 1.31 -Average number of ions 6.77 -Average number of forward neutrons 0.84 -Average number of reflected neutrons 20.34 -Average number of leaked neutrons 1.33 -Average number of proton leak 1.12 +Average number of pi+ & pi- 0.49 +Average number of pi0 0.33 +Average number of kaons 0.01 +Average number of muons 0.04 +Average number of deuterons+tritons 2.3 +Average number of He3+alpha 0.98 +Average number of ions 5.12 +Average number of forward neutrons 0.68 +Average number of reflected neutrons 15.7 +Average number of leaked neutrons 0.83 +Average number of proton leak 0.96 Average number of pion leak 0.34 ======================================================== @@ -1079,25 +1087,25 @@ G4SDManager deleted. EventManager deleted. Units table cleared. TransportationManager deleted. -Total navigation history collections cleaned: 33 +Total navigation history collections cleaned: 26 G4RNGHelper object is deleted. ================== Deleting memory pools =================== -Pool ID '20G4NavigationLevelRep', size : 0.049 MB +Pool ID '20G4NavigationLevelRep', size : 0.0385 MB Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB -Pool ID '17G4DynamicParticle', size : 0.0144 MB +Pool ID '17G4DynamicParticle', size : 0.0135 MB Pool ID '16G4SmartVoxelNode', size : 0.00673 MB Pool ID '17G4SmartVoxelProxy', size : 0.00385 MB Pool ID '7G4Event', size : 0.000961 MB Pool ID '15G4PrimaryVertex', size : 0.000961 MB Pool ID '17G4PrimaryParticle', size : 0.000961 MB Pool ID '15G4HCofThisEvent', size : 0.000961 MB -Pool ID '7G4Track', size : 0.0279 MB -Pool ID '18G4TouchableHistory', size : 0.00385 MB +Pool ID '7G4Track', size : 0.0269 MB +Pool ID '18G4TouchableHistory', size : 0.00288 MB Pool ID '15G4CountedObjectIvE', size : 0.000961 MB Pool ID '10G4Fragment', size : 0.00769 MB Pool ID '17G4ReactionProduct', size : 0.00769 MB Number of memory pools allocated: 14 of which, static: 0 -Dynamic pools deleted: 14 / Total memory freed: 0.13 MB +Dynamic pools deleted: 14 / Total memory freed: 0.11 MB ============================================================ G4Allocator objects are deleted. UImanager deleted. diff --git a/examples/extended/hadronic/Hadr01/include/DetectorMessenger.hh b/examples/extended/hadronic/Hadr01/include/DetectorMessenger.hh index 2a9f48fbef2..7f5033e2f98 100644 --- a/examples/extended/hadronic/Hadr01/include/DetectorMessenger.hh +++ b/examples/extended/hadronic/Hadr01/include/DetectorMessenger.hh @@ -81,6 +81,7 @@ private: G4UIcmdWithABool* fBeamCmd; G4UIcmdWithABool* fBCCmd; G4UIcmdWithABool* fHNCmd; + G4UIcmdWithABool* fNGPCmd; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr01/neutronGP.in b/examples/extended/hadronic/Hadr01/neutronGP.in new file mode 100644 index 00000000000..2ab9135a59c --- /dev/null +++ b/examples/extended/hadronic/Hadr01/neutronGP.in @@ -0,0 +1,29 @@ +#================================================ +# Macro file for Hadr01 +# 27.12.2022 V.Ivanchneko +#================================================ +/control/verbose 2 +/run/verbose 1 +/tracking/verbose 0 +# +/testhadr/TargetMat G4_PbWO4 +/testhadr/TargetRadius 20 cm +/testhadr/TargetLength 50 cm +/testhadr/NumberDivZ 1000 +/testhadr/NumberOfBinsE 1000 +/testhadr/PrintModulo 100 +#/testhadr/DebugEvent 2169 +# +/run/setCut 2 mm +#/testhadr/Physics PHYSLIST +# +/testhadr/NeutronGeneralProcess true +/run/initialize +/testhadr/HistoName p_pbwo4_10gev_ngp +/testhadr/MaxEdep 2 GeV +#/process/list +# +/gun/particle proton +/gun/energy 10. GeV +/run/beamOn 10000 +# diff --git a/examples/extended/hadronic/Hadr01/run.csh b/examples/extended/hadronic/Hadr01/run.csh index 961f73e97d5..d0c1f56ec28 100644 --- a/examples/extended/hadronic/Hadr01/run.csh +++ b/examples/extended/hadronic/Hadr01/run.csh @@ -1,31 +1,11 @@ #/bin/csh - -setenv HISTODIR 20140131 -mkdir -p $HISTODIR - -setenv PHYSLIST QGSP_BERT_EMV -$G4MY/Hadr01 p_pb.in >& $HISTODIR/$PHYSLIST.out - -setenv PHYSLIST QGSP_BERT_EMX -$G4MY/Hadr01 p_pb.in >& $HISTODIR/$PHYSLIST.out - -setenv PHYSLIST QGSP_BERT -$G4MY/Hadr01 p_pb.in >& $HISTODIR/$PHYSLIST.out - -setenv PHYSLIST QGSP_BIC -$G4MY/Hadr01 p_pb.in >& $HISTODIR/$PHYSLIST.out - -setenv PHYSLIST QBBC -$G4MY/Hadr01 p_pb.in >& $HISTODIR/$PHYSLIST.out - -setenv PHYSLIST QBBC_EMZ -$G4MY/Hadr01 p_pb.in >& $HISTODIR/$PHYSLIST.out - -setenv PHYSLIST FTFP_BERT -$G4MY/Hadr01 p_pb.in >& $HISTODIR/$PHYSLIST.out - -setenv PHYSLIST QGSP_FTFP_BERT -$G4MY/Hadr01 p_pb.in >& $HISTODIR/$PHYSLIST.out - -echo "Done!" +#================================================ +# Macro file for Hadr01 +# 29.12.2022 V.Ivanchneko +#================================================ + +#$G4BWORK/Hadr01 neutronGP.in QBBC >& p_pbwo4_10gev_ngp.out +#$G4BWORK/Hadr01 tq.in QBBC >& p_pbwo4_10gev.out +$G4BWORK/Hadr01 tq1.in QBBC >& p_w_10gev_ngp_1.out +$G4BWORK/Hadr01 tq2.in QBBC >& p_w_10gev_1.out # diff --git a/examples/extended/hadronic/Hadr01/src/DetectorMessenger.cc b/examples/extended/hadronic/Hadr01/src/DetectorMessenger.cc index dc782306081..3249d6b6a9e 100644 --- a/examples/extended/hadronic/Hadr01/src/DetectorMessenger.cc +++ b/examples/extended/hadronic/Hadr01/src/DetectorMessenger.cc @@ -130,6 +130,11 @@ DetectorMessenger::DetectorMessenger(DetectorConstruction * Det) fHNCmd->SetGuidance("Enable hyper-nuclei hadronic physics"); fHNCmd->SetParameterName("HyperNuclei",false); fHNCmd->AvailableForStates(G4State_PreInit); + + fNGPCmd = new G4UIcmdWithABool("/testhadr/NeutronGeneralProcess",this); + fNGPCmd->SetGuidance("Enable neutron general process"); + fNGPCmd->SetParameterName("NeutronGeneralProcess",false); + fNGPCmd->AvailableForStates(G4State_PreInit); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -148,6 +153,7 @@ DetectorMessenger::~DetectorMessenger() delete fEdepCmd; delete fBCCmd; delete fHNCmd; + delete fNGPCmd; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -177,6 +183,8 @@ void DetectorMessenger::SetNewValue(G4UIcommand* command, G4String newValue) G4HadronicParameters::Instance()->SetEnableBCParticles(fBCCmd->GetNewBoolValue(newValue)); } else if( command == fHNCmd ) { G4HadronicParameters::Instance()->SetEnableHyperNuclei(fHNCmd->GetNewBoolValue(newValue)); + } else if( command == fNGPCmd ) { + G4HadronicParameters::Instance()->SetEnableNeutronGeneralProcess(fNGPCmd->GetNewBoolValue(newValue)); } } diff --git a/examples/extended/hadronic/Hadr01/src/HistoManager.cc b/examples/extended/hadronic/Hadr01/src/HistoManager.cc index 9c8b3a0f99f..f96ec212954 100644 --- a/examples/extended/hadronic/Hadr01/src/HistoManager.cc +++ b/examples/extended/hadronic/Hadr01/src/HistoManager.cc @@ -349,7 +349,7 @@ void HistoManager::ScoreNewTrack(const G4Track* track) << "; pos(mm)= " << track->GetPosition()/mm << "; dir= " << track->GetMomentumDirection() << G4endl; - e = std::log10(e/MeV); + e = (e > 0.0) ? std::log10(e/MeV) : -100.; if(pd == G4Gamma::Gamma()) { fNgam++; fHisto->Fill(1,e,1.0); @@ -463,8 +463,17 @@ void HistoManager::AddTargetStep(const G4Step* step) void HistoManager::AddLeakingParticle(const G4Track* track) { const G4ParticleDefinition* pd = track->GetDefinition(); - const G4StepPoint* sp = track->GetStep()->GetPreStepPoint(); - G4double e = std::log10(sp->GetKineticEnergy()/CLHEP::MeV); + const G4StepPoint* sp = track->GetStep()->GetPreStepPoint(); + const G4double ekin = sp->GetKineticEnergy(); + G4double e = -100.; + if(ekin > 0.0) { + e = std::log10(ekin/CLHEP::MeV); + } else { + G4cout << "### HistoManager::AddLeakingParticle " << pd->GetParticleName() + << " Eprestep(MeV)=" << ekin << " trackID=" << track->GetTrackID() + << G4endl; + return; + } const G4ThreeVector& pos = sp->GetPosition(); const G4ThreeVector& dir = sp->GetMomentumDirection(); diff --git a/examples/extended/hadronic/Hadr02/hadr02.out b/examples/extended/hadronic/Hadr02/hadr02.out index ed6e3e95f7f..9ae07d30703 100644 --- a/examples/extended/hadronic/Hadr02/hadr02.out +++ b/examples/extended/hadronic/Hadr02/hadr02.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -238,7 +240,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -270,7 +272,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -302,7 +304,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -315,7 +317,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -361,7 +362,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -393,7 +394,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -425,7 +426,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -457,7 +458,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -489,7 +490,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -521,7 +522,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -553,7 +554,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -945,12 +946,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1004,33 +1014,33 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 100 - User=0.090000s Real=0.094907s Sys=0.000000s + User=0.090000s Real=0.100501s Sys=0.000000s RunAction: End of run action is starting HistoManager: End of run actions are started ======================================================== Beam particle S32 Beam Energy(GeV) 200 Number of events 100 -Average energy deposit (GeV) 7.073 RMS(GeV) 3.998 -Average number of steps 61.25 -Average number of gamma 0.55 +Average energy deposit (GeV) 6.609 RMS(GeV) 3.954 +Average number of steps 57.43 +Average number of gamma 0.61 Average number of e- 0 Average number of e+ 0 -Average number of neutrons 11.96 -Average number of protons 11.37 +Average number of neutrons 13.05 +Average number of protons 12.38 Average number of antiprotons 0 -Average number of pi+ & pi- 6.88 -Average number of pi0 3.6 -Average number of kaons 0.04 +Average number of pi+ & pi- 7.79 +Average number of pi0 3.7 +Average number of kaons 0.09 Average number of muons 0 -Average number of deuterons+tritons 2.44 -Average number of He3+alpha 1.6 -Average number of ions 0.47 +Average number of deuterons+tritons 2.46 +Average number of He3+alpha 1.55 +Average number of ions 0.48 ======================================================== Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== Number of memory pools allocated: 14 of which, static: 0 -Dynamic pools deleted: 14 / Total memory freed: 0.097 MB +Dynamic pools deleted: 14 / Total memory freed: 0.094 MB ============================================================ diff --git a/examples/extended/hadronic/Hadr03/.README.txt b/examples/extended/hadronic/Hadr03/.README.txt index d8d185b9340..37a658dfc61 100644 --- a/examples/extended/hadronic/Hadr03/.README.txt +++ b/examples/extended/hadronic/Hadr03/.README.txt @@ -43,7 +43,7 @@ \section Hadr03_s4 PHYSICS - An event is killed at the first interaction of the incident paticle. + An event is killed at the first interaction of the incident particle. 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 diff --git a/examples/extended/hadronic/Hadr03/Hadr03.cc b/examples/extended/hadronic/Hadr03/Hadr03.cc index 2a393703aa0..abd8c3d2856 100644 --- a/examples/extended/hadronic/Hadr03/Hadr03.cc +++ b/examples/extended/hadronic/Hadr03/Hadr03.cc @@ -79,7 +79,7 @@ int main(int argc,char** argv) { G4ParticleHPManager::GetInstance()->SetDoNotAdjustFinalState( true ); G4ParticleHPManager::GetInstance()->SetUseOnlyPhotoEvaporation( true ); G4ParticleHPManager::GetInstance()->SetNeglectDoppler( false ); - G4ParticleHPManager::GetInstance()->SetProduceFissionFragments( false ); + G4ParticleHPManager::GetInstance()->SetProduceFissionFragments( true ); G4ParticleHPManager::GetInstance()->SetUseWendtFissionModel( false ); G4ParticleHPManager::GetInstance()->SetUseNRESP71Model( false ); diff --git a/examples/extended/hadronic/Hadr03/History b/examples/extended/hadronic/Hadr03/History index 4704be1dac6..4ed696b3466 100644 --- a/examples/extended/hadronic/Hadr03/History +++ b/examples/extended/hadronic/Hadr03/History @@ -4,6 +4,16 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-04-22 Michel Maire (exhadr03-V11-01-01) +- continue revision of all header files +- add a comment in nFission.mac + +## 2023-01-03 Michel Maire (exhadr03-V11-01-00) +- Hadr03.cc : set ProduceFissionFragments = true +- PhysicsList: go back to QGSP_BIC_HP +- SteppingAction: add a protection against secondaries +- Run::EndOfRun(): format adjustement, line 334. +- revision of all header files ## 2022-11-17 V. Ivanchenko (exhadr03-V11-00-02) - Hadr03.cc - removed RanecuEngine diff --git a/examples/extended/hadronic/Hadr03/README b/examples/extended/hadronic/Hadr03/README index 7b46f5368e2..0908865c3f3 100644 --- a/examples/extended/hadronic/Hadr03/README +++ b/examples/extended/hadronic/Hadr03/README @@ -45,7 +45,7 @@ 4- PHYSICS - An event is killed at the first interaction of the incident paticle. + An event is killed at the first interaction of the incident particle. 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 diff --git a/examples/extended/hadronic/Hadr03/hadr03.out b/examples/extended/hadronic/Hadr03/hadr03.out index 1f4fd6e2c61..ccb218d4d8f 100644 --- a/examples/extended/hadronic/Hadr03/hadr03.out +++ b/examples/extended/hadronic/Hadr03/hadr03.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -40,10 +40,12 @@ Command is ignored. ---> Isotope: Mo98 Z = 42 N = 98 A = 97.91 g/mole abundance: 100.000 % ElmMassFraction: 100.00 % ElmAbundance 100.00 % -### HadronInelasticQBBC Construct Process: - Emin(FTFP)= 3 GeV Emax(FTFP)= 100000 GeV - Emin(BERT)= 1 GeV Emax(BERT)= 6 GeV Emax(BERTpions)= 12 GeV - Emin(BIC) = 0 GeV Emax(BIC)= 1.5 GeV. +/cvmfs/geant4.cern.ch/share/data/G4NDL4.7 +@@@ G4ParticleHPInelastic instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic +@@@ G4ParticleHPInelasticData instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7 +NeutronHP: /Capture file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Capture/CrossSection/6_nat_Carbon +NeutronHP: /Elastic file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Elastic/CrossSection/6_nat_Carbon +NeutronHP: /Inelastic file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic/CrossSection/6_nat_Carbon ======================================================================= ====== Electromagnetic Physics Parameters ======== ======================================================================= @@ -151,6 +153,25 @@ Use Bearden atomic level energies 0 Use ANSTO fluorescence model 0 Threshold for very long decay time at rest 3.171e+10 y ====================================================================== + +======================================================= +====== ParticleHP Physics Parameters ======== +======================================================= + UseOnlyPhotoEvaporation ? 1 + SkipMissingIsotopes ? 0 + NeglectDoppler ? 0 + DoNotAdjustFinalState ? 1 + ProduceFissionFragments ? 1 + UseWendtFissionModel ? 0 + UseNRESP71Model ? 0 + UseDBRC ? 0 +======================================================= + +@@@ G4ParticleHPInelastic instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic +NeutronHP: /Capture file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Capture/CrossSection/6_nat_Carbon +NeutronHP: /Elastic file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Elastic/CrossSection/6_nat_Carbon +NeutronHP: /Inelastic file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic/CrossSection/6_nat_Carbon +NeutronHP: /Capture file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Capture/CrossSection/6_nat_Carbon ====================================================================== ====== Radioactive Decay Physics Parameters ======= ====================================================================== @@ -172,32 +193,6 @@ Threshold for very long decay time at rest 3.171e+10 y ==================================================================== HADRONIC PROCESSES SUMMARY (verbose level 1) ---------------------------------------------------- - Hadronic Processes for B- - - Process: hadElastic - Model: hElasticLHEP: 0 eV ---> 100 TeV - Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV - - - Process: B-Inelastic - Model: FTFP: 0 eV ---> 100 TeV - Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV - - ---------------------------------------------------- - Hadronic Processes for D- - - Process: hadElastic - Model: hElasticLHEP: 0 eV ---> 100 TeV - Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV - - - Process: D-Inelastic - Model: FTFP: 0 eV ---> 100 TeV - Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV - - --------------------------------------------------- Hadronic Processes for GenericIon @@ -295,7 +290,8 @@ Threshold for very long decay time at rest 3.171e+10 y Process: anti_lambdaInelastic - Model: FTFP: 0 eV ---> 100 TeV + Model: QGSP: 12 GeV ---> 100 TeV + Model: FTFP: 0 eV ---> 25 GeV Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV @@ -373,7 +369,8 @@ Threshold for very long decay time at rest 3.171e+10 y Process: kaon+Inelastic - Model: FTFP: 3 GeV ---> 100 TeV + Model: QGSP: 12 GeV ---> 100 TeV + Model: FTFP: 3 GeV ---> 25 GeV Model: BertiniCascade: 0 eV ---> 6 GeV Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV @@ -387,7 +384,8 @@ Threshold for very long decay time at rest 3.171e+10 y Process: kaon-Inelastic - Model: FTFP: 3 GeV ---> 100 TeV + Model: QGSP: 12 GeV ---> 100 TeV + Model: FTFP: 3 GeV ---> 25 GeV Model: BertiniCascade: 0 eV ---> 6 GeV Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV @@ -401,7 +399,8 @@ Threshold for very long decay time at rest 3.171e+10 y Process: lambdaInelastic - Model: FTFP: 3 GeV ---> 100 TeV + Model: QGSP: 12 GeV ---> 100 TeV + Model: FTFP: 3 GeV ---> 25 GeV Model: BertiniCascade: 0 eV ---> 6 GeV Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV @@ -415,17 +414,31 @@ Threshold for very long decay time at rest 3.171e+10 y Process: neutronInelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 1 GeV ---> 6 GeV - Model: Binary Cascade: 0 eV ---> 1.5 GeV + Model: QGSP: 12 GeV ---> 100 TeV + Model: FTFP: 3 GeV ---> 25 GeV + Model: Binary Cascade: 19.9 MeV ---> 6 GeV + Model: NeutronHPInelastic: 0 eV ---> 20 MeV + Cr_sctns: NeutronHPInelasticXS: 0 eV ---> 20 MeV + Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV Process: nCapture - Model: nRadCapture: 0 eV ---> 100 TeV + Model: NeutronHPCapture: 0 eV ---> 20 MeV + Model: nRadCapture: 19.9 MeV ---> 100 TeV + Cr_sctns: NeutronHPCaptureXS: 0 eV ---> 20 MeV + Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV + Process: nFission + Model: NeutronHPFission: 0 eV ---> 20 MeV + Model: G4LFission: 19.9 MeV ---> 100 TeV + Cr_sctns: NeutronHPFissionXS: 0 eV ---> 20 MeV + + Cr_sctns: ZeroXS: 0 eV ---> 100 TeV + + --------------------------------------------------- Hadronic Processes for pi+ @@ -435,9 +448,9 @@ Threshold for very long decay time at rest 3.171e+10 y Process: pi+Inelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 1 GeV ---> 12 GeV - Model: Binary Cascade: 0 eV ---> 1.5 GeV + Model: QGSP: 12 GeV ---> 100 TeV + Model: FTFP: 3 GeV ---> 25 GeV + Model: BertiniCascade: 0 eV ---> 6 GeV Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV @@ -450,9 +463,9 @@ Threshold for very long decay time at rest 3.171e+10 y Process: pi-Inelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 1 GeV ---> 12 GeV - Model: Binary Cascade: 0 eV ---> 1.5 GeV + Model: QGSP: 12 GeV ---> 100 TeV + Model: FTFP: 3 GeV ---> 25 GeV + Model: BertiniCascade: 0 eV ---> 6 GeV Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV @@ -465,10 +478,10 @@ Threshold for very long decay time at rest 3.171e+10 y Process: protonInelastic - Model: FTFP: 3 GeV ---> 100 TeV - Model: BertiniCascade: 1 GeV ---> 6 GeV - Model: Binary Cascade: 0 eV ---> 1.5 GeV - Cr_sctns: G4ParticleInelasticXS: 0 eV ---> 100 TeV + Model: QGSP: 12 GeV ---> 100 TeV + Model: FTFP: 3 GeV ---> 25 GeV + Model: Binary Cascade: 0 eV ---> 6 GeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV --------------------------------------------------- @@ -480,7 +493,8 @@ Threshold for very long decay time at rest 3.171e+10 y Process: sigma-Inelastic - Model: FTFP: 3 GeV ---> 100 TeV + Model: QGSP: 12 GeV ---> 100 TeV + Model: FTFP: 3 GeV ---> 25 GeV Model: BertiniCascade: 0 eV ---> 6 GeV Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV @@ -501,12 +515,21 @@ Threshold for very long decay time at rest 3.171e+10 y ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -555,76 +578,77 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 10000 - User=0.180000s Real=0.179937s Sys=0.000000s + User=0.110000s Real=0.113135s Sys=0.000000s The run is 10000 proton of 10 MeV through 10 m of Molybdenum98 (density: 10.28 g/cm3 ) Process calls frequency: - hadElastic= 7798 protonInelastic= 2202 + hadElastic= 8144 protonInelastic= 1856 - MeanFreePath: 4.765 cm +- 4.6997 cm massic: 48.985 g/cm2 - CrossSection: 0.20986 cm^-1 massic: 2.0415 mm2/g - crossSection per atom: 3.3189 barn + MeanFreePath: 4.957 cm +- 4.8581 cm massic: 50.958 g/cm2 + CrossSection: 0.20173 cm^-1 massic: 1.9624 mm2/g + crossSection per atom: 3.1904 barn Verification: crossSections from G4HadronicProcessStore hadElastic = 1.5946 mm2/g 2.5924 barn - protonInelastic = 449.13 um2/mg 730.17 mbarn total = 2.0437 mm2/g 3.3226 barn + protonInelastic = 371.67 um2/mg 604.25 mbarn + total = 1.9663 mm2/g 3.1967 barn List of nuclear reactions: - proton + Mo98 --> N gamma or e- + Tc99[142.683]: 2 Q = 6.3518 MeV - proton + Mo98 --> N gamma or e- + neutron + Tc98: 1931 Q = -2.4772 MeV - proton + Mo98 --> N gamma or e- + neutron + Tc98[138.550]: 35 Q = -2.6116 MeV - proton + Mo98 --> N gamma or e- + neutron + Tc98[152.090]: 18 Q = -2.6246 MeV - proton + Mo98 --> N gamma or e- + neutron + Tc98[190.210]: 49 Q = -2.6627 MeV - proton + Mo98 --> N gamma or e- + neutron + Tc98[203.670]: 25 Q = -2.6762 MeV - proton + Mo98 --> N gamma or e- + neutron + Tc98[21.800]: 44 Q = -2.4943 MeV - proton + Mo98 --> N gamma or e- + neutron + Tc98[65.430]: 64 Q = -2.5386 MeV - proton + Mo98 --> N gamma or e- + neutron + Tc98[81.680]: 4 Q = -2.5542 MeV - proton + Mo98 --> N gamma or e- + proton + Mo98: 6 Q = -0.0039177 meV - proton + Mo98 --> N gamma or e- + proton + Mo98[1432.206]: 6 Q = -1.4322 MeV - proton + Mo98 --> N gamma or e- + proton + Mo98[1510.039]: 6 Q = -1.51 MeV - proton + Mo98 --> N gamma or e- + proton + Mo98[1758.480]: 1 Q = -1.7585 MeV + proton + Mo98 --> N gamma or e- + Tc99[142.683]: 1 Q = 6.3518 MeV + proton + Mo98 --> N gamma or e- + Tc99[181.094]: 1 Q = 6.3134 MeV + proton + Mo98 --> N gamma or e- + neutron + Tc98: 1634 Q = -2.4771 MeV + proton + Mo98 --> N gamma or e- + neutron + Tc98[138.550]: 26 Q = -2.6135 MeV + proton + Mo98 --> N gamma or e- + neutron + Tc98[152.090]: 22 Q = -2.6246 MeV + proton + Mo98 --> N gamma or e- + neutron + Tc98[190.210]: 37 Q = -2.6627 MeV + proton + Mo98 --> N gamma or e- + neutron + Tc98[203.670]: 20 Q = -2.6762 MeV + proton + Mo98 --> N gamma or e- + neutron + Tc98[21.800]: 31 Q = -2.4943 MeV + proton + Mo98 --> N gamma or e- + neutron + Tc98[65.430]: 58 Q = -2.539 MeV + proton + Mo98 --> N gamma or e- + neutron + Tc98[81.680]: 5 Q = -2.5542 MeV + proton + Mo98 --> N gamma or e- + proton + Mo98: 3 Q = 0.0024297 meV + proton + Mo98 --> N gamma or e- + proton + Mo98[1432.206]: 1 Q = -1.4322 MeV + proton + Mo98 --> N gamma or e- + proton + Mo98[1510.039]: 7 Q = -1.51 MeV + proton + Mo98 --> N gamma or e- + proton + Mo98[1758.480]: 3 Q = -1.7585 MeV proton + Mo98 --> N gamma or e- + proton + Mo98[2017.520]: 1 Q = -2.0175 MeV proton + Mo98 --> N gamma or e- + proton + Mo98[2343.610]: 1 Q = -2.3436 MeV - proton + Mo98 --> N gamma or e- + proton + Mo98[734.750]: 4 Q = -734.75 keV proton + Mo98 --> N gamma or e- + proton + Mo98[787.384]: 5 Q = -787.38 keV - proton + Mo98 --> proton + Mo98: 7798 Q = -0.0056297 meV + proton + Mo98 --> proton + Mo98: 8144 Q = -0.005614 meV number of gamma or e- (ic): N = 1 --> 10 List of generated particles: - Mo98: 7804 Emean = 31.206 keV ( 1.3422 eV --> 403.53 keV) - Mo98[1432.206]: 6 Emean = 224.21 keV ( 126.73 keV --> 300.52 keV) - Mo98[1510.039]: 6 Emean = 150.39 keV ( 18.524 keV --> 272.04 keV) - Mo98[1758.480]: 1 Emean = 181.72 keV ( 181.72 keV --> 181.72 keV) - Mo98[2017.520]: 1 Emean = 193.92 keV ( 193.92 keV --> 193.92 keV) - Mo98[2343.610]: 1 Emean = 62.403 keV ( 62.403 keV --> 62.403 keV) - Mo98[734.750]: 4 Emean = 142.52 keV ( 29.751 keV --> 241.27 keV) - Mo98[787.384]: 5 Emean = 103.65 keV ( 10.408 keV --> 313.8 keV) - Tc98: 1931 Emean = 117.14 keV ( 14.665 keV --> 291.04 keV) - Tc98[138.550]: 35 Emean = 133.94 keV ( 40.69 keV --> 320.52 keV) - Tc98[152.090]: 18 Emean = 110.93 keV ( 25.339 keV --> 255.09 keV) - Tc98[190.210]: 49 Emean = 146.49 keV ( 21.929 keV --> 315.76 keV) - Tc98[203.670]: 25 Emean = 131.06 keV ( 26.511 keV --> 298.43 keV) - Tc98[21.800]: 44 Emean = 126.59 keV ( 28.388 keV --> 242.12 keV) - Tc98[65.430]: 64 Emean = 124.32 keV ( 22.251 keV --> 257.01 keV) - Tc98[81.680]: 4 Emean = 216.27 keV ( 164.12 keV --> 266.07 keV) - Tc99[142.683]: 2 Emean = 106.3 keV ( 101.81 keV --> 110.79 keV) - e-: 495 Emean = 107 keV ( 84.731 keV --> 700.33 keV) - gamma: 12934 Emean = 960.48 keV ( 2.3247 keV --> 12.215 MeV) - neutron: 2170 Emean = 1.6875 MeV ( 38.554 keV --> 7.0739 MeV) - proton: 30 Emean = 6.6805 MeV ( 4.2667 MeV --> 9.5255 MeV) - - Momentum balance: Pmean = 37.746 eV ( 0.0014549 meV --> 1.8102 keV) + Mo98: 8147 Emean = 31.679 keV ( 4.4249 eV --> 404 keV) + Mo98[1432.206]: 1 Emean = 142.76 keV ( 142.76 keV --> 142.76 keV) + Mo98[1510.039]: 7 Emean = 215.3 keV ( 67.991 keV --> 319.8 keV) + Mo98[1758.480]: 3 Emean = 183.27 keV ( 9.3232 keV --> 328.62 keV) + Mo98[2017.520]: 1 Emean = 44.561 keV ( 44.561 keV --> 44.561 keV) + Mo98[2343.610]: 1 Emean = 30.522 keV ( 30.522 keV --> 30.522 keV) + Mo98[787.384]: 5 Emean = 148.62 keV ( 13.737 keV --> 298.46 keV) + Tc98: 1634 Emean = 118.81 keV ( 15.507 keV --> 294.83 keV) + Tc98[138.550]: 26 Emean = 114.99 keV ( 44.835 keV --> 227.42 keV) + Tc98[152.090]: 22 Emean = 111.89 keV ( 33.372 keV --> 240.75 keV) + Tc98[190.210]: 37 Emean = 129.77 keV ( 25.167 keV --> 272.11 keV) + Tc98[203.670]: 20 Emean = 129.18 keV ( 26.511 keV --> 254.64 keV) + Tc98[21.800]: 31 Emean = 137.47 keV ( 61.885 keV --> 242.12 keV) + Tc98[65.430]: 58 Emean = 123.68 keV ( 22.251 keV --> 244.03 keV) + Tc98[81.680]: 5 Emean = 128.72 keV ( 45.091 keV --> 181.98 keV) + Tc99[142.683]: 1 Emean = 101.81 keV ( 101.81 keV --> 101.81 keV) + Tc99[181.094]: 1 Emean = 90.296 keV ( 90.296 keV --> 90.296 keV) + e-: 416 Emean = 111.71 keV ( 84.731 keV --> 806.59 keV) + gamma: 10837 Emean = 966.62 keV ( 2.3247 keV --> 12.226 MeV) + neutron: 1833 Emean = 1.6927 MeV ( 38.554 keV --> 7.2244 MeV) + proton: 21 Emean = 6.5307 MeV ( 3.6209 MeV --> 9.4583 MeV) + + Momentum balance: Pmean = 32.252 eV ( 0.0016166 meV --> 1.8102 keV) ------- MixMaxRng engine status ------- Current state vector is: mixmax state, file version 1.0 -N=17 V[N]={281867578912529177, 1008169992557050867, 441141655812162890, 1421161416840085828, 90532170532765785, 585143957149682564, 1181430029626050153, 701892136130618154, 1862493997955616835, 91359392859621772, 701770584419271747, 836724647394341620, 988989190233214407, 1854690824141859109, 1102135435508942143, 1416033946703855256, 503802136449408912} counter= 4sumtot= 1234281037944913513 +N=17 V[N]={1024654384305314725, 644488902768034011, 1562697228540292339, 1034026876863034268, 902897481518050190, 59505662661066005, 2183794580965626493, 1071177302881947550, 2073658324021058431, 2254535023994851456, 1515752590739686176, 1471585028231342711, 1999763787128631212, 585402749987955496, 2101654079403325269, 2102793297211840045, 1242207189510216212} counter= 17sumtot= 772164398595333079 --------------------------------------- ================== Deleting memory pools =================== Number of memory pools allocated: 11 of which, static: 0 diff --git a/examples/extended/hadronic/Hadr03/include/ActionInitialization.hh b/examples/extended/hadronic/Hadr03/include/ActionInitialization.hh index baee59702ac..e97ff7b3551 100644 --- a/examples/extended/hadronic/Hadr03/include/ActionInitialization.hh +++ b/examples/extended/hadronic/Hadr03/include/ActionInitialization.hh @@ -40,14 +40,14 @@ class DetectorConstruction; class ActionInitialization : public G4VUserActionInitialization { public: - ActionInitialization(DetectorConstruction* detector); - virtual ~ActionInitialization(); + ActionInitialization(DetectorConstruction*); + ~ActionInitialization() override = default; - virtual void BuildForMaster() const; - virtual void Build() const; + void BuildForMaster() const override; + void Build() const override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; }; #endif diff --git a/examples/extended/hadronic/Hadr03/include/DetectorConstruction.hh b/examples/extended/hadronic/Hadr03/include/DetectorConstruction.hh index 2f825598cf7..21f9ca20755 100644 --- a/examples/extended/hadronic/Hadr03/include/DetectorConstruction.hh +++ b/examples/extended/hadronic/Hadr03/include/DetectorConstruction.hh @@ -48,11 +48,11 @@ class DetectorConstruction : public G4VUserDetectorConstruction public: DetectorConstruction(); - ~DetectorConstruction(); + ~DetectorConstruction() override; public: - virtual G4VPhysicalVolume* Construct(); + G4VPhysicalVolume* Construct() override; G4Material* MaterialWithSingleIsotope(G4String, G4String, G4double, G4int, G4int); @@ -72,13 +72,13 @@ class DetectorConstruction : public G4VUserDetectorConstruction private: - G4VPhysicalVolume* fPBox; - G4LogicalVolume* fLBox; + G4VPhysicalVolume* fPBox = nullptr; + G4LogicalVolume* fLBox = nullptr; - G4double fBoxSize; - G4Material* fMaterial; + G4double fBoxSize = 0.; + G4Material* fMaterial = nullptr; - DetectorMessenger* fDetectorMessenger; + DetectorMessenger* fDetectorMessenger = nullptr; private: diff --git a/examples/extended/hadronic/Hadr03/include/DetectorMessenger.hh b/examples/extended/hadronic/Hadr03/include/DetectorMessenger.hh index 511d7b509dd..c6ccc74d0de 100644 --- a/examples/extended/hadronic/Hadr03/include/DetectorMessenger.hh +++ b/examples/extended/hadronic/Hadr03/include/DetectorMessenger.hh @@ -50,19 +50,19 @@ class DetectorMessenger: public G4UImessenger public: DetectorMessenger(DetectorConstruction* ); - ~DetectorMessenger(); + ~DetectorMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; - G4UIdirectory* fTesthadDir; - G4UIdirectory* fDetDir; - G4UIcmdWithAString* fMaterCmd; - G4UIcmdWithADoubleAndUnit* fSizeCmd; - G4UIcommand* fIsotopeCmd; + G4UIdirectory* fTesthadDir = nullptr; + G4UIdirectory* fDetDir = nullptr; + G4UIcmdWithAString* fMaterCmd = nullptr; + G4UIcmdWithADoubleAndUnit* fSizeCmd = nullptr; + G4UIcommand* fIsotopeCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr03/include/GammaNuclearPhysics.hh b/examples/extended/hadronic/Hadr03/include/GammaNuclearPhysics.hh index 750579ec703..5d54b537c11 100644 --- a/examples/extended/hadronic/Hadr03/include/GammaNuclearPhysics.hh +++ b/examples/extended/hadronic/Hadr03/include/GammaNuclearPhysics.hh @@ -27,7 +27,6 @@ /// \brief Definition of the GammaNuclearPhysics class // // - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #ifndef GammaNuclearPhysics_h @@ -42,7 +41,7 @@ class GammaNuclearPhysics : public G4VPhysicsConstructor { public: GammaNuclearPhysics(const G4String& name="gamma"); - ~GammaNuclearPhysics() override; + ~GammaNuclearPhysics() override = default; public: void ConstructParticle() override { }; diff --git a/examples/extended/hadronic/Hadr03/include/GammaNuclearPhysicsLEND.hh b/examples/extended/hadronic/Hadr03/include/GammaNuclearPhysicsLEND.hh index ae360528c64..0169c550ed9 100644 --- a/examples/extended/hadronic/Hadr03/include/GammaNuclearPhysicsLEND.hh +++ b/examples/extended/hadronic/Hadr03/include/GammaNuclearPhysicsLEND.hh @@ -27,7 +27,6 @@ /// \brief Definition of the GammaNuclearPhysics class // // - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #ifndef GammaNuclearPhysicsLEND_h @@ -42,7 +41,7 @@ class GammaNuclearPhysicsLEND : public G4VPhysicsConstructor { public: GammaNuclearPhysicsLEND(const G4String& name="gamma"); - ~GammaNuclearPhysicsLEND() override; + ~GammaNuclearPhysicsLEND() override = default; public: void ConstructParticle() override { }; diff --git a/examples/extended/hadronic/Hadr03/include/HistoManager.hh b/examples/extended/hadronic/Hadr03/include/HistoManager.hh index df91d5d01e5..06bf395ca36 100644 --- a/examples/extended/hadronic/Hadr03/include/HistoManager.hh +++ b/examples/extended/hadronic/Hadr03/include/HistoManager.hh @@ -42,11 +42,11 @@ class HistoManager { public: HistoManager(); - ~HistoManager(); + ~HistoManager() = default; private: void Book(); - G4String fFileName; + G4String fFileName = "hadr03"; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr03/include/PhysicsList.hh b/examples/extended/hadronic/Hadr03/include/PhysicsList.hh index 2bad03a4472..ccc0c27c49a 100644 --- a/examples/extended/hadronic/Hadr03/include/PhysicsList.hh +++ b/examples/extended/hadronic/Hadr03/include/PhysicsList.hh @@ -40,7 +40,7 @@ class PhysicsList: public G4VModularPhysicsList { public: PhysicsList(); - ~PhysicsList() override; + ~PhysicsList() = default; public: void ConstructParticle() override; diff --git a/examples/extended/hadronic/Hadr03/include/PrimaryGeneratorAction.hh b/examples/extended/hadronic/Hadr03/include/PrimaryGeneratorAction.hh index 234741c1cfb..8bb69c16229 100644 --- a/examples/extended/hadronic/Hadr03/include/PrimaryGeneratorAction.hh +++ b/examples/extended/hadronic/Hadr03/include/PrimaryGeneratorAction.hh @@ -46,15 +46,15 @@ class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: PrimaryGeneratorAction(DetectorConstruction*); - ~PrimaryGeneratorAction(); + ~PrimaryGeneratorAction() override; public: - virtual void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; G4ParticleGun* GetParticleGun() {return fParticleGun;}; private: - G4ParticleGun* fParticleGun; - DetectorConstruction* fDetector; + G4ParticleGun* fParticleGun = nullptr; + DetectorConstruction* fDetector = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr03/include/Run.hh b/examples/extended/hadronic/Hadr03/include/Run.hh index 121f5b1cdb8..4f38cea6c95 100644 --- a/examples/extended/hadronic/Hadr03/include/Run.hh +++ b/examples/extended/hadronic/Hadr03/include/Run.hh @@ -50,7 +50,7 @@ class Run : public G4Run { public: Run(DetectorConstruction*); - ~Run(); + ~Run() override = default; public: void SetPrimary(G4ParticleDefinition* particle, G4double energy); @@ -62,7 +62,7 @@ class Run : public G4Run void Balance(G4double); void CountGamma(G4int); - virtual void Merge(const G4Run*); + void Merge(const G4Run*) override; void EndOfRun(G4bool); private: @@ -92,21 +92,21 @@ class Run : public G4Run }; private: - DetectorConstruction* fDetector; - G4ParticleDefinition* fParticle; - G4double fEkin; + DetectorConstruction* fDetector = nullptr; + G4ParticleDefinition* fParticle = nullptr; + G4double fEkin = 0.; std::map fProcCounter; - G4int fTotalCount; //all processes counter - G4int fGammaCount; //nb of events with gamma - G4double fSumTrack; //sum of trackLength - G4double fSumTrack2; //sum of trackLength*trackLength + G4int fTotalCount = 0; //all processes counter + G4int fGammaCount = 0; //nb of events with gamma + G4double fSumTrack = 0.; //sum of trackLength + G4double fSumTrack2 = 0.; //sum of trackLength*trackLength std::map fNuclChannelMap; std::map fParticleDataMap; - G4bool fTargetXXX; + G4bool fTargetXXX = false; G4double fPbalance[3]; G4int fNbGamma[3]; }; diff --git a/examples/extended/hadronic/Hadr03/include/RunAction.hh b/examples/extended/hadronic/Hadr03/include/RunAction.hh index e89a9e62b51..574a9dd4166 100644 --- a/examples/extended/hadronic/Hadr03/include/RunAction.hh +++ b/examples/extended/hadronic/Hadr03/include/RunAction.hh @@ -53,23 +53,23 @@ class RunAction : public G4UserRunAction { public: RunAction(DetectorConstruction*, PrimaryGeneratorAction*); - ~RunAction(); + ~RunAction() override; public: - virtual G4Run* GenerateRun(); - virtual void BeginOfRunAction(const G4Run*); - virtual void EndOfRunAction(const G4Run*); + G4Run* GenerateRun() override; + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; void SetPrintFlag(G4bool); private: - DetectorConstruction* fDetector; - PrimaryGeneratorAction* fPrimary; - Run* fRun; - HistoManager* fHistoManager; - RunMessenger* fRunMessenger; + DetectorConstruction* fDetector = nullptr; + PrimaryGeneratorAction* fPrimary = nullptr; + Run* fRun = nullptr; + HistoManager* fHistoManager = nullptr; + RunMessenger* fRunMessenger = nullptr; - G4bool fPrint; //optional printing + G4bool fPrint = true; //optional printing }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr03/include/RunMessenger.hh b/examples/extended/hadronic/Hadr03/include/RunMessenger.hh index e0e8a113f90..5fee84bd628 100644 --- a/examples/extended/hadronic/Hadr03/include/RunMessenger.hh +++ b/examples/extended/hadronic/Hadr03/include/RunMessenger.hh @@ -46,15 +46,15 @@ class RunMessenger: public G4UImessenger { public: RunMessenger(RunAction*); - virtual ~RunMessenger(); + ~RunMessenger() override; - void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - RunAction* fRun; + RunAction* fRun = nullptr; - G4UIdirectory* fRunDir; - G4UIcmdWithABool* fPrintCmd; + G4UIdirectory* fRunDir = nullptr; + G4UIcmdWithABool* fPrintCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr03/include/SteppingAction.hh b/examples/extended/hadronic/Hadr03/include/SteppingAction.hh index 0a0500ffe37..0aa546946eb 100644 --- a/examples/extended/hadronic/Hadr03/include/SteppingAction.hh +++ b/examples/extended/hadronic/Hadr03/include/SteppingAction.hh @@ -44,10 +44,10 @@ class G4ParticleDefinition; class SteppingAction : public G4UserSteppingAction { public: - SteppingAction(); - ~SteppingAction(); + SteppingAction() = default; + ~SteppingAction() override = default; - virtual void UserSteppingAction(const G4Step*); + void UserSteppingAction(const G4Step*) override; private: std::map fParticleFlag; diff --git a/examples/extended/hadronic/Hadr03/nFission.mac b/examples/extended/hadronic/Hadr03/nFission.mac index 4a743bd8f7a..69aa08ff960 100644 --- a/examples/extended/hadronic/Hadr03/nFission.mac +++ b/examples/extended/hadronic/Hadr03/nFission.mac @@ -1,5 +1,5 @@ # -# Macro file for "Hadr03.cc" +# Macro for "Hadr03.cc" # # NB. for neutronHP, do not forget to activate the fission fragment model # via one, and only one, of the following two UI commands: @@ -9,18 +9,21 @@ # - To use the alternative Wendt fission model: #/process/had/particle_hp/use_Wendt_fission_model true # +# alternatively, this is done in Hadr03.cc +# /control/verbose 2 /run/verbose 2 # /testhadr/det/setIsotopeMat U235 92 235 19.05 g/cm3 /testhadr/det/setSize 10 m # +/process/had/verbose 1 +# /run/initialize # /gun/particle neutron /gun/energy 1 eV # -/process/list /process/inactivate hadElastic ###/process/inactivate neutronInelastic /process/inactivate nCapture @@ -32,7 +35,8 @@ /analysis/h1/set 11 100 150 250 MeV #Q /analysis/h1/set 13 200 1 200 none #A # -/run/printProgress 1000 +# optional, to avoid excessive printing. /testhadr/run/printStat false # +/run/printProgress 1000 /run/beamOn 10000 diff --git a/examples/extended/hadronic/Hadr03/src/ActionInitialization.cc b/examples/extended/hadronic/Hadr03/src/ActionInitialization.cc index 4a268cbb752..9ad5fa96ccd 100644 --- a/examples/extended/hadronic/Hadr03/src/ActionInitialization.cc +++ b/examples/extended/hadronic/Hadr03/src/ActionInitialization.cc @@ -35,14 +35,8 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ActionInitialization::ActionInitialization(DetectorConstruction* detector) - : G4VUserActionInitialization(), - fDetector(detector) -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -ActionInitialization::~ActionInitialization() -{} + : fDetector(detector) +{ } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr03/src/DetectorConstruction.cc b/examples/extended/hadronic/Hadr03/src/DetectorConstruction.cc index 611e73ef5c8..86f86c54045 100644 --- a/examples/extended/hadronic/Hadr03/src/DetectorConstruction.cc +++ b/examples/extended/hadronic/Hadr03/src/DetectorConstruction.cc @@ -53,8 +53,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorConstruction::DetectorConstruction() -:G4VUserDetectorConstruction(), - fPBox(0), fLBox(0), fMaterial(0), fDetectorMessenger(0) { fBoxSize = 10*m; DefineMaterials(); diff --git a/examples/extended/hadronic/Hadr03/src/DetectorMessenger.cc b/examples/extended/hadronic/Hadr03/src/DetectorMessenger.cc index 6e9b151fadb..d2bef7d6caa 100644 --- a/examples/extended/hadronic/Hadr03/src/DetectorMessenger.cc +++ b/examples/extended/hadronic/Hadr03/src/DetectorMessenger.cc @@ -43,9 +43,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorMessenger::DetectorMessenger(DetectorConstruction * Det) -:G4UImessenger(), - fDetector(Det), fTesthadDir(0), fDetDir(0), fMaterCmd(0), fSizeCmd(0), - fIsotopeCmd(0) +:fDetector(Det) { fTesthadDir = new G4UIdirectory("/testhadr/"); fTesthadDir->SetGuidance("commands specific to this example"); diff --git a/examples/extended/hadronic/Hadr03/src/GammaNuclearPhysics.cc b/examples/extended/hadronic/Hadr03/src/GammaNuclearPhysics.cc index fec3e1cda0d..66c5156ba60 100644 --- a/examples/extended/hadronic/Hadr03/src/GammaNuclearPhysics.cc +++ b/examples/extended/hadronic/Hadr03/src/GammaNuclearPhysics.cc @@ -27,7 +27,6 @@ /// \brief Implementation of the GammaNuclearPhysics class // // - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "GammaNuclearPhysics.hh" @@ -53,11 +52,6 @@ GammaNuclearPhysics::GammaNuclearPhysics(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GammaNuclearPhysics::~GammaNuclearPhysics() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void GammaNuclearPhysics::ConstructProcess() { G4HadronInelasticProcess* process = new G4HadronInelasticProcess( "photonNuclear", G4Gamma::Definition() ); diff --git a/examples/extended/hadronic/Hadr03/src/GammaNuclearPhysicsLEND.cc b/examples/extended/hadronic/Hadr03/src/GammaNuclearPhysicsLEND.cc index 1d0f20ed67e..25d484a29b5 100644 --- a/examples/extended/hadronic/Hadr03/src/GammaNuclearPhysicsLEND.cc +++ b/examples/extended/hadronic/Hadr03/src/GammaNuclearPhysicsLEND.cc @@ -53,11 +53,6 @@ GammaNuclearPhysicsLEND::GammaNuclearPhysicsLEND(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GammaNuclearPhysicsLEND::~GammaNuclearPhysicsLEND() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void GammaNuclearPhysicsLEND::ConstructProcess() { G4ProcessManager* pManager = G4Gamma::Gamma()->GetProcessManager(); diff --git a/examples/extended/hadronic/Hadr03/src/HistoManager.cc b/examples/extended/hadronic/Hadr03/src/HistoManager.cc index 5b1ccdff858..ab1cc1b5e99 100644 --- a/examples/extended/hadronic/Hadr03/src/HistoManager.cc +++ b/examples/extended/hadronic/Hadr03/src/HistoManager.cc @@ -36,19 +36,12 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... HistoManager::HistoManager() - : fFileName("Hadr03") { Book(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -HistoManager::~HistoManager() -{ -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void HistoManager::Book() { // Create or get analysis manager diff --git a/examples/extended/hadronic/Hadr03/src/PhysicsList.cc b/examples/extended/hadronic/Hadr03/src/PhysicsList.cc index 36c72e2159e..daac510fc34 100644 --- a/examples/extended/hadronic/Hadr03/src/PhysicsList.cc +++ b/examples/extended/hadronic/Hadr03/src/PhysicsList.cc @@ -71,7 +71,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysicsList::PhysicsList() -:G4VModularPhysicsList() { G4int verb = 1; SetVerboseLevel(verb); @@ -94,10 +93,10 @@ PhysicsList::PhysicsList() // Hadron Inelastic physics // ////RegisterPhysics( new G4HadronPhysicsFTFP_BERT_HP(verb)); - // RegisterPhysics( new G4HadronPhysicsQGSP_BIC_HP(verb)); + RegisterPhysics( new G4HadronPhysicsQGSP_BIC_HP(verb)); ////RegisterPhysics( new G4HadronPhysicsQGSP_BIC_AllHP(verb)); ////RegisterPhysics( new G4HadronPhysicsQGSP_BIC(verb)); - RegisterPhysics( new G4HadronInelasticQBBC(verb)); + ////RegisterPhysics( new G4HadronInelasticQBBC(verb)); ////RegisterPhysics( new G4HadronPhysicsINCLXX(verb)); ////RegisterPhysics( new G4HadronPhysicsShielding(verb)); @@ -123,11 +122,6 @@ PhysicsList::PhysicsList() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::~PhysicsList() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysicsList::ConstructParticle() { G4BosonConstructor pBosonConstructor; diff --git a/examples/extended/hadronic/Hadr03/src/PrimaryGeneratorAction.cc b/examples/extended/hadronic/Hadr03/src/PrimaryGeneratorAction.cc index d036c24be47..1308e20a640 100644 --- a/examples/extended/hadronic/Hadr03/src/PrimaryGeneratorAction.cc +++ b/examples/extended/hadronic/Hadr03/src/PrimaryGeneratorAction.cc @@ -43,8 +43,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PrimaryGeneratorAction::PrimaryGeneratorAction(DetectorConstruction* det) -:G4VUserPrimaryGeneratorAction(), - fParticleGun(0), fDetector(det) +:fDetector(det) { fParticleGun = new G4ParticleGun(1); G4ParticleDefinition* particle diff --git a/examples/extended/hadronic/Hadr03/src/Run.cc b/examples/extended/hadronic/Hadr03/src/Run.cc index 59206142674..a18ac1b8851 100644 --- a/examples/extended/hadronic/Hadr03/src/Run.cc +++ b/examples/extended/hadronic/Hadr03/src/Run.cc @@ -45,21 +45,13 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... Run::Run(DetectorConstruction* det) -: G4Run(), - fDetector(det), fParticle(0), fEkin(0.), - fTotalCount(0), fGammaCount(0), - fSumTrack(0.), fSumTrack2(0.), - fTargetXXX(false) +: fDetector(det) { for (G4int i=0; i<3; i++) { fPbalance[i] = 0. ; } for (G4int i=0; i<3; i++) { fNbGamma[i] = 0 ; } fPbalance[1] = DBL_MAX; fNbGamma[1] = 10000; } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -Run::~Run() -{ } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -331,7 +323,7 @@ void Run::EndOfRun(G4bool print) PrintXS(process, material, element, store, density, sumc1, sumc2); } if(sumc1 > 0.0) { - G4cout << std::setw(20) << "total" << " = " + G4cout << "\n" << std::setw(20) << "total" << " = " << G4BestUnit(sumc1, "Surface/Mass") << "\t"; if(sumc2 > 0.0) { G4cout << G4BestUnit(sumc2, "Surface"); } G4cout << G4endl; diff --git a/examples/extended/hadronic/Hadr03/src/RunAction.cc b/examples/extended/hadronic/Hadr03/src/RunAction.cc index 4fc7e0dff19..d68388b3020 100644 --- a/examples/extended/hadronic/Hadr03/src/RunAction.cc +++ b/examples/extended/hadronic/Hadr03/src/RunAction.cc @@ -47,9 +47,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... RunAction::RunAction(DetectorConstruction* det, PrimaryGeneratorAction* prim) - : G4UserRunAction(), - fDetector(det), fPrimary(prim), fRun(0), fHistoManager(0), - fRunMessenger(0), fPrint(true) + : fDetector(det), fPrimary(prim) { fHistoManager = new HistoManager(); fRunMessenger = new RunMessenger(this); diff --git a/examples/extended/hadronic/Hadr03/src/RunMessenger.cc b/examples/extended/hadronic/Hadr03/src/RunMessenger.cc index de38e6e7c07..35d40d76180 100644 --- a/examples/extended/hadronic/Hadr03/src/RunMessenger.cc +++ b/examples/extended/hadronic/Hadr03/src/RunMessenger.cc @@ -39,9 +39,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... RunMessenger::RunMessenger(RunAction* run) -:G4UImessenger(),fRun(run), - fRunDir(0), - fPrintCmd(0) +:fRun(run) { fRunDir = new G4UIdirectory("/testhadr/run/"); fRunDir->SetGuidance("run commands"); diff --git a/examples/extended/hadronic/Hadr03/src/SteppingAction.cc b/examples/extended/hadronic/Hadr03/src/SteppingAction.cc index 53924baea54..75fdc4bd764 100644 --- a/examples/extended/hadronic/Hadr03/src/SteppingAction.cc +++ b/examples/extended/hadronic/Hadr03/src/SteppingAction.cc @@ -40,19 +40,20 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -SteppingAction::SteppingAction() -: G4UserSteppingAction() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -SteppingAction::~SteppingAction() -{ } +//SteppingAction::SteppingAction() +//: G4UserSteppingAction() +//{ } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void SteppingAction::UserSteppingAction(const G4Step* aStep) { + //check trackID and stepNumber + G4int trackID = aStep->GetTrack()->GetTrackID(); + G4int stepNb = aStep->GetTrack()->GetCurrentStepNumber(); + if (trackID*stepNb != 1) return; + //ok, we are at first interaction of the primary particle + Run* run = static_cast(G4RunManager::GetRunManager()->GetNonConstCurrentRun()); diff --git a/examples/extended/hadronic/Hadr04/History b/examples/extended/hadronic/Hadr04/History index d8478bdf64a..04e6561c8cd 100644 --- a/examples/extended/hadronic/Hadr04/History +++ b/examples/extended/hadronic/Hadr04/History @@ -4,6 +4,9 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-05-28 Michel Maire (exhadr04-V11-01-00) +- revision of all headers +- PhysicsList : remove definition of meV ## 2021-12-10 Ben Morgan (exhadr04-V11-00-00) - Change to new Markdown History format diff --git a/examples/extended/hadronic/Hadr04/hadr04.out b/examples/extended/hadronic/Hadr04/hadr04.out index 7888b7682ce..0fceee4f135 100644 --- a/examples/extended/hadronic/Hadr04/hadr04.out +++ b/examples/extended/hadronic/Hadr04/hadr04.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -128,6 +128,7 @@ Element TS_C_of_Graphite, internal thermal scattering id 2 ProduceFissionFragments ? 0 UseWendtFissionModel ? 0 UseNRESP71Model ? 0 + UseDBRC ? 0 ======================================================= @@@ G4ParticleHPInelastic instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic @@ -181,7 +182,7 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 1000 - User=9.590000s Real=9.674644s Sys=0.000000s + User=8.540000s Real=9.526629s Sys=0.000000s The run is 1000 neutron of 2 MeV through 50 cm of Water_ts (density: 1 g/cm3 ) diff --git a/examples/extended/hadronic/Hadr04/include/ActionInitialization.hh b/examples/extended/hadronic/Hadr04/include/ActionInitialization.hh index 797b2917e78..41bf4b1d511 100644 --- a/examples/extended/hadronic/Hadr04/include/ActionInitialization.hh +++ b/examples/extended/hadronic/Hadr04/include/ActionInitialization.hh @@ -41,13 +41,13 @@ class ActionInitialization : public G4VUserActionInitialization { public: ActionInitialization(DetectorConstruction* detector); - virtual ~ActionInitialization(); + ~ActionInitialization() override = default; - virtual void BuildForMaster() const; - virtual void Build() const; + void BuildForMaster() const override; + void Build() const override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; }; #endif diff --git a/examples/extended/hadronic/Hadr04/include/DetectorConstruction.hh b/examples/extended/hadronic/Hadr04/include/DetectorConstruction.hh index 2237954917b..5471badccce 100644 --- a/examples/extended/hadronic/Hadr04/include/DetectorConstruction.hh +++ b/examples/extended/hadronic/Hadr04/include/DetectorConstruction.hh @@ -27,7 +27,6 @@ /// \brief Definition of the DetectorConstruction class // // - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -48,11 +47,11 @@ class DetectorConstruction : public G4VUserDetectorConstruction public: DetectorConstruction(); - ~DetectorConstruction(); + ~DetectorConstruction() override; public: - virtual G4VPhysicalVolume* Construct(); + G4VPhysicalVolume* Construct() override; G4Material* MaterialWithSingleIsotope(G4String, G4String, G4double, G4int, G4int); @@ -72,13 +71,13 @@ class DetectorConstruction : public G4VUserDetectorConstruction private: - G4VPhysicalVolume* fPBox; - G4LogicalVolume* fLBox; + G4VPhysicalVolume* fPBox = nullptr; + G4LogicalVolume* fLBox = nullptr; - G4double fBoxSize; - G4Material* fMaterial; + G4double fBoxSize = 0.; + G4Material* fMaterial = nullptr; - DetectorMessenger* fDetectorMessenger; + DetectorMessenger* fDetectorMessenger = nullptr; private: diff --git a/examples/extended/hadronic/Hadr04/include/DetectorMessenger.hh b/examples/extended/hadronic/Hadr04/include/DetectorMessenger.hh index e17fee12f18..bd0efcc1d91 100644 --- a/examples/extended/hadronic/Hadr04/include/DetectorMessenger.hh +++ b/examples/extended/hadronic/Hadr04/include/DetectorMessenger.hh @@ -50,19 +50,19 @@ class DetectorMessenger: public G4UImessenger public: DetectorMessenger(DetectorConstruction* ); - ~DetectorMessenger(); + ~DetectorMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; - G4UIdirectory* fTestemDir; - G4UIdirectory* fDetDir; - G4UIcmdWithAString* fMaterCmd; - G4UIcmdWithADoubleAndUnit* fSizeCmd; - G4UIcommand* fIsotopeCmd; + G4UIdirectory* fTestemDir = nullptr; + G4UIdirectory* fDetDir = nullptr; + G4UIcmdWithAString* fMaterCmd = nullptr; + G4UIcmdWithADoubleAndUnit* fSizeCmd = nullptr; + G4UIcommand* fIsotopeCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr04/include/HistoManager.hh b/examples/extended/hadronic/Hadr04/include/HistoManager.hh index a2ba04f186b..3ce8d642523 100644 --- a/examples/extended/hadronic/Hadr04/include/HistoManager.hh +++ b/examples/extended/hadronic/Hadr04/include/HistoManager.hh @@ -42,11 +42,11 @@ class HistoManager { public: HistoManager(); - ~HistoManager(); + ~HistoManager() = default; private: void Book(); - G4String fFileName; + G4String fFileName = "Hadr04"; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr04/include/NeutronHPphysics.hh b/examples/extended/hadronic/Hadr04/include/NeutronHPphysics.hh index 83925c3c50f..c0179095156 100644 --- a/examples/extended/hadronic/Hadr04/include/NeutronHPphysics.hh +++ b/examples/extended/hadronic/Hadr04/include/NeutronHPphysics.hh @@ -27,7 +27,6 @@ /// \brief Definition of the NeutronHPphysics class // // - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #ifndef NeutronHPphysics_h @@ -44,17 +43,17 @@ class NeutronHPphysics : public G4VPhysicsConstructor { public: NeutronHPphysics(const G4String& name="neutron"); - ~NeutronHPphysics(); + ~NeutronHPphysics() override; public: void ConstructParticle() override { }; - void ConstructProcess() override; + void ConstructProcess() override; private: void DefineCommands(); - G4bool fThermal; - G4GenericMessenger* fMessenger; + G4bool fThermal = true; + G4GenericMessenger* fMessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr04/include/PhysicsList.hh b/examples/extended/hadronic/Hadr04/include/PhysicsList.hh index df0a198981f..e764c199642 100644 --- a/examples/extended/hadronic/Hadr04/include/PhysicsList.hh +++ b/examples/extended/hadronic/Hadr04/include/PhysicsList.hh @@ -40,11 +40,11 @@ class PhysicsList: public G4VModularPhysicsList { public: PhysicsList(); - ~PhysicsList(); + ~PhysicsList() override = default; public: - virtual void ConstructParticle(); - virtual void SetCuts(); + void ConstructParticle() override; + void SetCuts() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr04/include/PrimaryGeneratorAction.hh b/examples/extended/hadronic/Hadr04/include/PrimaryGeneratorAction.hh index c4c5a5707b1..115d04897d1 100644 --- a/examples/extended/hadronic/Hadr04/include/PrimaryGeneratorAction.hh +++ b/examples/extended/hadronic/Hadr04/include/PrimaryGeneratorAction.hh @@ -27,9 +27,6 @@ /// \brief Definition of the PrimaryGeneratorAction class // // -// -// - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -48,14 +45,14 @@ class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: PrimaryGeneratorAction(); - ~PrimaryGeneratorAction(); + ~PrimaryGeneratorAction() override; public: - virtual void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; G4ParticleGun* GetParticleGun() {return fParticleGun;}; private: - G4ParticleGun* fParticleGun; //pointer a to G4 service class + G4ParticleGun* fParticleGun = nullptr; //pointer a to G4 service class }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr04/include/Run.hh b/examples/extended/hadronic/Hadr04/include/Run.hh index abb293059a0..b0e5e71fff2 100644 --- a/examples/extended/hadronic/Hadr04/include/Run.hh +++ b/examples/extended/hadronic/Hadr04/include/Run.hh @@ -47,7 +47,7 @@ class Run : public G4Run { public: Run(DetectorConstruction*); - ~Run(); + ~Run() override = default; public: void CountProcesses(const G4VProcess* process); @@ -57,7 +57,7 @@ class Run : public G4Run void SetPrimary(G4ParticleDefinition* particle, G4double energy); void EndOfRun(); - virtual void Merge(const G4Run*); + void Merge(const G4Run*) override; private: struct ParticleData { @@ -72,16 +72,16 @@ class Run : public G4Run }; private: - DetectorConstruction* fDetector; - G4ParticleDefinition* fParticle; - G4double fEkin; + DetectorConstruction* fDetector = nullptr; + G4ParticleDefinition* fParticle = nullptr; + G4double fEkin = 0.; std::map fProcCounter; std::map fParticleDataMap; - G4int fNbStep1, fNbStep2; - G4double fTrackLen1, fTrackLen2; - G4double fTime1, fTime2; + G4int fNbStep1 = 0, fNbStep2 = 0; + G4double fTrackLen1 = 0., fTrackLen2 = 0.; + G4double fTime1 = 0., fTime2 = 0.; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr04/include/RunAction.hh b/examples/extended/hadronic/Hadr04/include/RunAction.hh index 1c59a56e2e2..584b12de51a 100644 --- a/examples/extended/hadronic/Hadr04/include/RunAction.hh +++ b/examples/extended/hadronic/Hadr04/include/RunAction.hh @@ -49,18 +49,18 @@ class RunAction : public G4UserRunAction { public: RunAction(DetectorConstruction*, PrimaryGeneratorAction*); - ~RunAction(); + ~RunAction() override; public: - virtual G4Run* GenerateRun(); - virtual void BeginOfRunAction(const G4Run*); - virtual void EndOfRunAction(const G4Run*); + G4Run* GenerateRun() override; + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; private: - DetectorConstruction* fDetector; - PrimaryGeneratorAction* fPrimary; - Run* fRun; - HistoManager* fHistoManager; + DetectorConstruction* fDetector = nullptr; + PrimaryGeneratorAction* fPrimary = nullptr; + Run* fRun = nullptr; + HistoManager* fHistoManager = nullptr; }; diff --git a/examples/extended/hadronic/Hadr04/include/StackingAction.hh b/examples/extended/hadronic/Hadr04/include/StackingAction.hh index ad7c00a0174..fcd2c65bfa7 100644 --- a/examples/extended/hadronic/Hadr04/include/StackingAction.hh +++ b/examples/extended/hadronic/Hadr04/include/StackingAction.hh @@ -41,10 +41,10 @@ class StackingAction : public G4UserStackingAction { public: - StackingAction(); - ~StackingAction(); + StackingAction() = default; + ~StackingAction() override = default; - virtual G4ClassificationOfNewTrack ClassifyNewTrack(const G4Track*); + G4ClassificationOfNewTrack ClassifyNewTrack(const G4Track*) override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr04/include/SteppingAction.hh b/examples/extended/hadronic/Hadr04/include/SteppingAction.hh index 83b6e1df3f6..9d1a8f7f525 100644 --- a/examples/extended/hadronic/Hadr04/include/SteppingAction.hh +++ b/examples/extended/hadronic/Hadr04/include/SteppingAction.hh @@ -44,12 +44,12 @@ class SteppingAction : public G4UserSteppingAction { public: SteppingAction(TrackingAction*); - ~SteppingAction(); + ~SteppingAction() override = default; - virtual void UserSteppingAction(const G4Step*); + void UserSteppingAction(const G4Step*) override; private: - TrackingAction* fTrackingAction; + TrackingAction* fTrackingAction = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr04/include/TrackingAction.hh b/examples/extended/hadronic/Hadr04/include/TrackingAction.hh index 752c82bc2dd..34463925d73 100644 --- a/examples/extended/hadronic/Hadr04/include/TrackingAction.hh +++ b/examples/extended/hadronic/Hadr04/include/TrackingAction.hh @@ -41,18 +41,18 @@ class TrackingAction : public G4UserTrackingAction { public: - TrackingAction(); - ~TrackingAction() {}; + TrackingAction() = default; + ~TrackingAction() override = default; - virtual void PreUserTrackingAction(const G4Track*); - virtual void PostUserTrackingAction(const G4Track*); + void PreUserTrackingAction(const G4Track*) override; + void PostUserTrackingAction(const G4Track*) override; void UpdateTrackInfo(G4double, G4double, G4double); private: - G4int fNbStep1, fNbStep2; - G4double fTrackLen1, fTrackLen2; - G4double fTime1, fTime2; + G4int fNbStep1 = 0, fNbStep2 = 0; + G4double fTrackLen1 = 0., fTrackLen2 = 0.; + G4double fTime1 = 0., fTime2 = 0.; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr04/src/ActionInitialization.cc b/examples/extended/hadronic/Hadr04/src/ActionInitialization.cc index 367ac8b8b21..d0ef619cee6 100644 --- a/examples/extended/hadronic/Hadr04/src/ActionInitialization.cc +++ b/examples/extended/hadronic/Hadr04/src/ActionInitialization.cc @@ -37,20 +37,14 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ActionInitialization::ActionInitialization(DetectorConstruction* detector) - : G4VUserActionInitialization(), - fDetector(detector) -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -ActionInitialization::~ActionInitialization() + : fDetector(detector) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ActionInitialization::BuildForMaster() const { - RunAction* runAction = new RunAction(fDetector, 0); + RunAction* runAction = new RunAction(fDetector, nullptr); SetUserAction(runAction); } diff --git a/examples/extended/hadronic/Hadr04/src/DetectorConstruction.cc b/examples/extended/hadronic/Hadr04/src/DetectorConstruction.cc index 67c474c8d96..5d4d6a50d19 100644 --- a/examples/extended/hadronic/Hadr04/src/DetectorConstruction.cc +++ b/examples/extended/hadronic/Hadr04/src/DetectorConstruction.cc @@ -52,8 +52,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorConstruction::DetectorConstruction() -:G4VUserDetectorConstruction(), - fPBox(0), fLBox(0), fMaterial(0), fDetectorMessenger(0) { fBoxSize = 1*m; DefineMaterials(); diff --git a/examples/extended/hadronic/Hadr04/src/DetectorMessenger.cc b/examples/extended/hadronic/Hadr04/src/DetectorMessenger.cc index b994c7dd3f2..cfeb912b77f 100644 --- a/examples/extended/hadronic/Hadr04/src/DetectorMessenger.cc +++ b/examples/extended/hadronic/Hadr04/src/DetectorMessenger.cc @@ -43,9 +43,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorMessenger::DetectorMessenger(DetectorConstruction * Det) -:G4UImessenger(), - fDetector(Det), fTestemDir(0), fDetDir(0), fMaterCmd(0), fSizeCmd(0), - fIsotopeCmd(0) +: fDetector(Det) { fTestemDir = new G4UIdirectory("/testhadr/"); fTestemDir->SetGuidance("commands specific to this example"); diff --git a/examples/extended/hadronic/Hadr04/src/HistoManager.cc b/examples/extended/hadronic/Hadr04/src/HistoManager.cc index a6feb9f19b1..90d31fdccdb 100644 --- a/examples/extended/hadronic/Hadr04/src/HistoManager.cc +++ b/examples/extended/hadronic/Hadr04/src/HistoManager.cc @@ -36,19 +36,12 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... HistoManager::HistoManager() - : fFileName("Hadr04") { Book(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -HistoManager::~HistoManager() -{ -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void HistoManager::Book() { // Create or get analysis manager diff --git a/examples/extended/hadronic/Hadr04/src/NeutronHPphysics.cc b/examples/extended/hadronic/Hadr04/src/NeutronHPphysics.cc index 2fe1da61de8..7ee67b5e181 100644 --- a/examples/extended/hadronic/Hadr04/src/NeutronHPphysics.cc +++ b/examples/extended/hadronic/Hadr04/src/NeutronHPphysics.cc @@ -27,7 +27,6 @@ /// \brief Implementation of the NeutronHPphysics class // // - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "NeutronHPphysics.hh" @@ -63,7 +62,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... NeutronHPphysics::NeutronHPphysics(const G4String& name) -: G4VPhysicsConstructor(name), fThermal(true), fMessenger(nullptr) +: G4VPhysicsConstructor(name) { // define commands for this class DefineCommands(); diff --git a/examples/extended/hadronic/Hadr04/src/PhysicsList.cc b/examples/extended/hadronic/Hadr04/src/PhysicsList.cc index 8c7b21bd179..17c6704df9d 100644 --- a/examples/extended/hadronic/Hadr04/src/PhysicsList.cc +++ b/examples/extended/hadronic/Hadr04/src/PhysicsList.cc @@ -49,13 +49,11 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysicsList::PhysicsList() -:G4VModularPhysicsList() { SetVerboseLevel(1); //add new units // - new G4UnitDefinition( "millielectronVolt", "meV", "Energy", 1.e-3*eV); new G4UnitDefinition( "mm2/g", "mm2/g", "Surface/Mass", mm2/g); new G4UnitDefinition( "um2/mg", "um2/mg","Surface/Mass", um*um/mg); @@ -65,11 +63,6 @@ PhysicsList::PhysicsList() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::~PhysicsList() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysicsList::ConstructParticle() { G4BosonConstructor pBosonConstructor; diff --git a/examples/extended/hadronic/Hadr04/src/PrimaryGeneratorAction.cc b/examples/extended/hadronic/Hadr04/src/PrimaryGeneratorAction.cc index 1f2b79a13b8..1f46c84a010 100644 --- a/examples/extended/hadronic/Hadr04/src/PrimaryGeneratorAction.cc +++ b/examples/extended/hadronic/Hadr04/src/PrimaryGeneratorAction.cc @@ -27,9 +27,6 @@ /// \brief Implementation of the PrimaryGeneratorAction class // // -// -// - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -45,7 +42,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PrimaryGeneratorAction::PrimaryGeneratorAction() -: G4VUserPrimaryGeneratorAction(),fParticleGun(0) { G4int n_particle = 1; fParticleGun = new G4ParticleGun(n_particle); diff --git a/examples/extended/hadronic/Hadr04/src/Run.cc b/examples/extended/hadronic/Hadr04/src/Run.cc index fb596419c74..dad05cff5d1 100644 --- a/examples/extended/hadronic/Hadr04/src/Run.cc +++ b/examples/extended/hadronic/Hadr04/src/Run.cc @@ -41,15 +41,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... Run::Run(DetectorConstruction* det) -: G4Run(), - fDetector(det), fParticle(0), fEkin(0.), - fNbStep1(0), fNbStep2(0), - fTrackLen1(0.), fTrackLen2(0.), - fTime1(0.),fTime2(0.) -{ } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -Run::~Run() +: fDetector(det) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr04/src/RunAction.cc b/examples/extended/hadronic/Hadr04/src/RunAction.cc index f5431250ad1..65560f82b7b 100644 --- a/examples/extended/hadronic/Hadr04/src/RunAction.cc +++ b/examples/extended/hadronic/Hadr04/src/RunAction.cc @@ -46,8 +46,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... RunAction::RunAction(DetectorConstruction* det, PrimaryGeneratorAction* prim) - : G4UserRunAction(), - fDetector(det), fPrimary(prim), fRun(0), fHistoManager(0) + : fDetector(det), fPrimary(prim) { // Book predefined histograms fHistoManager = new HistoManager(); diff --git a/examples/extended/hadronic/Hadr04/src/StackingAction.cc b/examples/extended/hadronic/Hadr04/src/StackingAction.cc index b08750a5b97..95c1766fa94 100644 --- a/examples/extended/hadronic/Hadr04/src/StackingAction.cc +++ b/examples/extended/hadronic/Hadr04/src/StackingAction.cc @@ -38,17 +38,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -StackingAction::StackingAction() -:G4UserStackingAction() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -StackingAction::~StackingAction() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - G4ClassificationOfNewTrack StackingAction::ClassifyNewTrack(const G4Track* aTrack) { diff --git a/examples/extended/hadronic/Hadr04/src/SteppingAction.cc b/examples/extended/hadronic/Hadr04/src/SteppingAction.cc index bb4b3b0d5bb..23538842920 100644 --- a/examples/extended/hadronic/Hadr04/src/SteppingAction.cc +++ b/examples/extended/hadronic/Hadr04/src/SteppingAction.cc @@ -40,12 +40,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... SteppingAction::SteppingAction(TrackingAction* TrAct) -: G4UserSteppingAction(),fTrackingAction(TrAct) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -SteppingAction::~SteppingAction() +: fTrackingAction(TrAct) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr04/src/TrackingAction.cc b/examples/extended/hadronic/Hadr04/src/TrackingAction.cc index 2f17288d57d..bef72803317 100644 --- a/examples/extended/hadronic/Hadr04/src/TrackingAction.cc +++ b/examples/extended/hadronic/Hadr04/src/TrackingAction.cc @@ -41,13 +41,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -TrackingAction::TrackingAction() -:G4UserTrackingAction(), - fNbStep1(0),fNbStep2(0),fTrackLen1(0.),fTrackLen2(0.),fTime1(0.),fTime2(0.) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void TrackingAction::PreUserTrackingAction(const G4Track*) { fNbStep1 = fNbStep2 = 0; diff --git a/examples/extended/hadronic/Hadr05/.README.txt b/examples/extended/hadronic/Hadr05/.README.txt index b1c174b74b2..79fd5e8f9d3 100644 --- a/examples/extended/hadronic/Hadr05/.README.txt +++ b/examples/extended/hadronic/Hadr05/.README.txt @@ -155,8 +155,11 @@ Idle> exit ...etc........... histo 21 : energy flow (MeV/event) - histo 22 : lateral energy leak (MeV/event) - + + histo 22 : total energy deposited + histo 23 : total energy leakage + histo 24 : total energy released : Edep + Eleak + NB. Numbering scheme for histograms: layer : from 1 to NbOfLayers (included) absorbers : from 1 to NbOfAbsor (included) diff --git a/examples/extended/hadronic/Hadr05/Cu-lAr.mac b/examples/extended/hadronic/Hadr05/Cu-lAr.mac index 8ff778fe0c5..bfc0526bd36 100644 --- a/examples/extended/hadronic/Hadr05/Cu-lAr.mac +++ b/examples/extended/hadronic/Hadr05/Cu-lAr.mac @@ -23,11 +23,14 @@ # /analysis/setFileName Cu-lAr /analysis/h1/set 1 100 3. 5. GeV #edep in absor1 -/analysis/h1/set 2 100 0. 500. MeV #edep in absor2 +/analysis/h1/set 2 100 0. 300. MeV #edep in absor2 /analysis/h1/set 11 52 0. 52. none #long. profile in absor1 /analysis/h1/set 12 52 0. 52. none #long. profile in absor2 /analysis/h1/set 21 102 0. 102. none #energy flow +/analysis/h1/set 22 100 1.1 5.1 GeV #energy deposit +/analysis/h1/set 23 100 0. 1.5 GeV #energy leakage +/analysis/h1/set 24 100 3.1 5.1 GeV #energy total # -/run/printProgress 100 -/run/beamOn 1000 +/run/printProgress 400 +/run/beamOn 4000 diff --git a/examples/extended/hadronic/Hadr05/Fe-Sci.mac b/examples/extended/hadronic/Hadr05/Fe-Sci.mac index f50b8e1ee02..85203582b82 100644 --- a/examples/extended/hadronic/Hadr05/Fe-Sci.mac +++ b/examples/extended/hadronic/Hadr05/Fe-Sci.mac @@ -22,12 +22,15 @@ /gun/energy 5 GeV # /analysis/setFileName Fe-Sci -/analysis/h1/set 1 100 3. 5. GeV #edep in absor1 -/analysis/h1/set 2 100 0. 500. MeV #edep in absor2 +/analysis/h1/set 1 100 3.1 5.1 GeV #edep in absor1 +/analysis/h1/set 2 100 0. 500. MeV #edep in absor2 /analysis/h1/set 11 52 0. 52. none #long. profile in absor1 /analysis/h1/set 12 52 0. 52. none #long. profile in absor2 /analysis/h1/set 21 102 0. 102. none #energy flow +/analysis/h1/set 22 100 3.1 5.1 GeV #energy deposit +/analysis/h1/set 23 100 0. 500. MeV #energy leakage +/analysis/h1/set 24 100 3.1 5.1 GeV #energy total # -/run/printProgress 100 -/run/beamOn 1000 +/run/printProgress 1000 +/run/beamOn 10000 diff --git a/examples/extended/hadronic/Hadr05/History b/examples/extended/hadronic/Hadr05/History index 1a0f5ed957c..97a1a88cfb5 100644 --- a/examples/extended/hadronic/Hadr05/History +++ b/examples/extended/hadronic/Hadr05/History @@ -4,6 +4,8 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-01-03 mma (exhadr05-V11-01-00) +- compute and plot Edep, Eleak, Etotal=Edep+Eleak ## 2022-04-01 mma (exhadr05-V11-00-02) - PhysicsList: add G4NuclideTable::SetThresholdOfHalfLife(1ns*log2) diff --git a/examples/extended/hadronic/Hadr05/Pb-lAr-em.mac b/examples/extended/hadronic/Hadr05/Pb-lAr-em.mac index 92869bc0cda..72c468c3f11 100644 --- a/examples/extended/hadronic/Hadr05/Pb-lAr-em.mac +++ b/examples/extended/hadronic/Hadr05/Pb-lAr-em.mac @@ -22,12 +22,15 @@ /gun/energy 1 GeV # /analysis/setFileName Pb-lAr-em -/analysis/h1/set 1 100 700. 1000. MeV #edep in absor1 -/analysis/h1/set 2 100 0. 300. MeV #edep in absor2 -/analysis/h1/set 11 52 0. 52. none #long. profile in absor1 -/analysis/h1/set 12 52 0. 52. none #long. profile in absor2 -/analysis/h1/set 21 102 0. 102. none #energy flow -# -/run/printProgress 100 -/run/beamOn 1000 +/analysis/h1/set 1 110 700. 1100. MeV #edep in absor1 +/analysis/h1/set 2 100 0. 300. MeV #edep in absor2 +/analysis/h1/set 11 52 0. 52. none #long. profile in absor1 +/analysis/h1/set 12 52 0. 52. none #long. profile in absor2 +/analysis/h1/set 21 102 0. 102. none #energy flow +/analysis/h1/set 22 110 700. 1100. MeV #energy deposit +/analysis/h1/set 23 100 0. 50. MeV #energy leakage +/analysis/h1/set 24 110 700. 1100. MeV #energy total +# +/run/printProgress 1000 +/run/beamOn 10000 diff --git a/examples/extended/hadronic/Hadr05/Pb-lAr.mac b/examples/extended/hadronic/Hadr05/Pb-lAr.mac index 791afd68797..52cefcbdc2b 100644 --- a/examples/extended/hadronic/Hadr05/Pb-lAr.mac +++ b/examples/extended/hadronic/Hadr05/Pb-lAr.mac @@ -22,12 +22,15 @@ /gun/energy 5 GeV # /analysis/setFileName Pb-lAr -/analysis/h1/set 1 100 3. 5. GeV #edep in absor1 +/analysis/h1/set 1 100 1. 5. GeV #edep in absor1 /analysis/h1/set 2 100 0. 500. MeV #edep in absor2 /analysis/h1/set 11 52 0. 52. none #long. profile in absor1 /analysis/h1/set 12 52 0. 52. none #long. profile in absor2 /analysis/h1/set 21 102 0. 102. none #energy flow +/analysis/h1/set 22 100 1 5. GeV #energy deposit +/analysis/h1/set 23 100 0. 1. GeV #energy leakage +/analysis/h1/set 24 100 1. 5. GeV #energy total # -/run/printProgress 100 -/run/beamOn 1000 +/run/printProgress 200 +/run/beamOn 2000 diff --git a/examples/extended/hadronic/Hadr05/README b/examples/extended/hadronic/Hadr05/README index cfa50997384..29b512d431f 100644 --- a/examples/extended/hadronic/Hadr05/README +++ b/examples/extended/hadronic/Hadr05/README @@ -149,8 +149,11 @@ ...etc........... histo 21 : energy flow (MeV/event) - histo 22 : lateral energy leak (MeV/event) - + + histo 22 : total energy deposited + histo 23 : total energy leakage + histo 24 : total energy released : Edep + Eleak + NB. Numbering scheme for histograms: layer : from 1 to NbOfLayers (included) absorbers : from 1 to NbOfAbsor (included) diff --git a/examples/extended/hadronic/Hadr05/W-lAr.mac b/examples/extended/hadronic/Hadr05/W-lAr.mac index f4f762f550e..b801d5f897f 100644 --- a/examples/extended/hadronic/Hadr05/W-lAr.mac +++ b/examples/extended/hadronic/Hadr05/W-lAr.mac @@ -22,12 +22,15 @@ /gun/energy 5 GeV # /analysis/setFileName W-lAr -/analysis/h1/set 1 100 3. 5. GeV #edep in absor1 -/analysis/h1/set 2 100 0. 500. MeV #edep in absor2 +/analysis/h1/set 1 100 1.1 5.1 GeV #edep in absor1 +/analysis/h1/set 2 100 0. 300. MeV #edep in absor2 /analysis/h1/set 11 52 0. 52. none #long. profile in absor1 /analysis/h1/set 12 52 0. 52. none #long. profile in absor2 /analysis/h1/set 21 102 0. 102. none #energy flow +/analysis/h1/set 22 100 1.1 5.1 GeV #energy deposit +/analysis/h1/set 23 100 0. 1.5 GeV #energy leakage +/analysis/h1/set 24 100 3.1 5.1 GeV #energy total # -/run/printProgress 100 -/run/beamOn 1000 +/run/printProgress 400 +/run/beamOn 4000 diff --git a/examples/extended/hadronic/Hadr05/hadr05.out b/examples/extended/hadronic/Hadr05/hadr05.out index 269883adfc1..7a832d3b596 100644 --- a/examples/extended/hadronic/Hadr05/hadr05.out +++ b/examples/extended/hadronic/Hadr05/hadr05.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -119,33 +119,33 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=83.910000s Real=85.936146s Sys=0.020000s + User=70.650000s Real=74.393096s Sys=0.010000s ---> The run is 1000 proton of 5 GeV through calorimeter Process calls frequency : - Decay= 3730 He3Inelastic= 1 NoProcess= 4122582 - Radioactivation= 81890 Rayl= 223237 Transportation= 4053295 - annihil= 58934 compt= 2695444 conv= 55455 - dInelastic= 89 eBrem= 392438 eIoni= 6274590 - hBertiniCaptureAtRest= 482 hIoni= 1445613 hadElastic= 4572052 - ionIoni= 4217032 kaon+Inelastic= 5 kaon0LInelastic= 10 - kaon0SInelastic= 3 lambdaInelastic= 6 msc= 262497 - muIoni= 7971 muMinusCaptureAtRest= 6 nCapture= 53661 - neutronInelastic= 93586 phot= 861246 photonNuclear= 217 - pi+Inelastic= 1020 pi-Inelastic= 925 protonInelastic= 4092 - sigma+Inelastic= 2 sigma-Inelastic= 1 tInelastic= 8 + Decay= 3697 He3Inelastic= 2 NoProcess= 4085800 + Radioactivation= 81421 Rayl= 219000 Transportation= 4010458 + alphaInelastic= 1 annihil= 57655 compt= 2646668 + conv= 54274 dInelastic= 100 eBrem= 381243 + eIoni= 6155268 hBertiniCaptureAtRest= 493 hIoni= 1450949 + hadElastic= 4530517 ionIoni= 4180268 kaon+Inelastic= 13 + kaon0LInelastic= 13 kaon0SInelastic= 3 lambdaInelastic= 7 + msc= 257189 muIoni= 6852 muMinusCaptureAtRest= 11 + nCapture= 53318 neutronInelastic= 93105 phot= 845133 + photonNuclear= 200 pi+Inelastic= 1056 pi-Inelastic= 901 + protonInelastic= 4153 sigma+Inelastic= 1 tInelastic= 16 ------------------------------------------------------------ material Edep rmsE sqrt(E0(GeV))*rmsE/Edep total tracklen - 1 Iron 4.0433 GeV 295.9 MeV 16.36 +- 0.517 % 2.159 m +- 49.2 cm - 2 Scintillator 114.26 MeV 32.13 MeV 62.87 +- 1.99 % 22.28 cm +- 7.2 cm + 1 Iron 4.0378 GeV 272.5 MeV 15.09 +- 0.477 % 2.135 m +- 45.2 cm + 2 Scintillator 113.38 MeV 30.02 MeV 59.2 +- 1.87 % 21.97 cm +- 6.06 cm - Total Edep = 4.158 GeV - Leakage : primary = 0 eV secondaries = 188.1 MeV ---> total = 188.1 MeV - Total energy released : Edep + Eleak = 4.346 GeV + Total energy deposited = 4.151 GeV +- 273.3 MeV + Leakage : primary = 0 eV secondaries = 185 MeV ---> total = 185 MeV +- 158.8 MeV + Total energy released : Edep + Eleak = 4.336 GeV +- 186.3 MeV ------------------------------------------------------------ ================== Deleting memory pools =================== Number of memory pools allocated: 13 of which, static: 0 diff --git a/examples/extended/hadronic/Hadr05/include/EventAction.hh b/examples/extended/hadronic/Hadr05/include/EventAction.hh index 1e66397505f..59b87448825 100644 --- a/examples/extended/hadronic/Hadr05/include/EventAction.hh +++ b/examples/extended/hadronic/Hadr05/include/EventAction.hh @@ -48,14 +48,15 @@ class EventAction : public G4UserEventAction void BeginOfEventAction(const G4Event*) override; void EndOfEventAction(const G4Event*) override; - void SumEnergy(G4int k, G4double de, G4double dl) - {fEnergyDeposit[k] += de; fTrackLengthCh[k] += dl;}; - + void SumEnergy(G4int k, G4double de, G4double dl); + void SumEnergyLeak (G4double eleak, G4int index); + private: DetectorConstruction* fDetector; G4double fEnergyDeposit[kMaxAbsor]; G4double fTrackLengthCh[kMaxAbsor]; + G4double fEnergyLeak[2]; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr05/include/HistoManager.hh b/examples/extended/hadronic/Hadr05/include/HistoManager.hh index 81d4506368d..c8ba0379b95 100644 --- a/examples/extended/hadronic/Hadr05/include/HistoManager.hh +++ b/examples/extended/hadronic/Hadr05/include/HistoManager.hh @@ -37,7 +37,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "DetectorConstruction.hh" - const G4int kMaxHisto = 2*kMaxAbsor + 2; + const G4int kMaxHisto = 2*kMaxAbsor + 5; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr05/include/Run.hh b/examples/extended/hadronic/Hadr05/include/Run.hh index c72fc3064ef..07b66534e34 100644 --- a/examples/extended/hadronic/Hadr05/include/Run.hh +++ b/examples/extended/hadronic/Hadr05/include/Run.hh @@ -54,8 +54,8 @@ class Run : public G4Run public: void SetPrimary(G4ParticleDefinition* particle, G4double energy); void CountProcesses(const G4VProcess* process); - void FillPerEvent(G4int,G4double,G4double); - void AddEnergyLeak (G4double eleak, G4int index); + void SumEdepPerAbsorber(G4int,G4double,G4double); + void SumEnergies (G4double edeptot, G4double eleak0, G4double eleak1); void SumEnergyFlow (G4int plane, G4double Eflow); void Merge(const G4Run*) override; @@ -69,7 +69,12 @@ class Run : public G4Run G4double fSumEAbs [kMaxAbsor], fSum2EAbs [kMaxAbsor]; G4double fSumLAbs [kMaxAbsor], fSum2LAbs [kMaxAbsor]; + G4double fEdepTot, fEdepTot2; + G4double fEnergyLeak[2]; + G4double fEleakTot, fEleakTot2; + + G4double fEtotal, fEtotal2; std::map fProcCounter; std::vector fEnergyFlow; diff --git a/examples/extended/hadronic/Hadr05/include/TrackingAction.hh b/examples/extended/hadronic/Hadr05/include/TrackingAction.hh index 5bc1869bd49..e1c638d8d10 100644 --- a/examples/extended/hadronic/Hadr05/include/TrackingAction.hh +++ b/examples/extended/hadronic/Hadr05/include/TrackingAction.hh @@ -37,13 +37,14 @@ #include "globals.hh" class DetectorConstruction; +class EventAction; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... class TrackingAction : public G4UserTrackingAction { public: - TrackingAction(DetectorConstruction*); + TrackingAction(DetectorConstruction*, EventAction*); ~TrackingAction() override {}; void PreUserTrackingAction(const G4Track*) override; @@ -51,6 +52,7 @@ class TrackingAction : public G4UserTrackingAction { private: DetectorConstruction* fDetector; + EventAction* fEventAct; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr05/plotHisto.C b/examples/extended/hadronic/Hadr05/plotHisto.C index ac9dc1156b9..64bf0165062 100644 --- a/examples/extended/hadronic/Hadr05/plotHisto.C +++ b/examples/extended/hadronic/Hadr05/plotHisto.C @@ -4,7 +4,7 @@ // Draw histos filled by Geant4 simulation // ///TFile f("hadr05.root"); - TFile f("W-lAr.root"); + TFile f("Fe-Sci.root"); TCanvas* c1 = new TCanvas("c1", " "); TH1D* hist1 = (TH1D*)f.Get("1"); @@ -13,15 +13,24 @@ TH1D* hist2 = (TH1D*)f.Get("2"); hist2->Draw("HIST"); - TH1D* hist3 = (TH1D*)f.Get("11"); + TH1D* hist11 = (TH1D*)f.Get("11"); c1->SetLogy(0); c1->cd(); c1->Update(); - hist3->Draw("HIST"); + hist11->Draw("HIST"); - TH1D* hist4 = (TH1D*)f.Get("12"); - hist4->Draw("HIST"); + TH1D* hist12 = (TH1D*)f.Get("12"); + hist12->Draw("HIST"); - TH1D* hist5 = (TH1D*)f.Get("21"); - hist5->Draw("HIST"); + TH1D* hist21 = (TH1D*)f.Get("21"); + hist21->Draw("HIST"); + + TH1D* hist22 = (TH1D*)f.Get("22"); + hist22->Draw("HIST"); + + TH1D* hist23 = (TH1D*)f.Get("23"); + hist23->Draw("HIST"); + + TH1D* hist24 = (TH1D*)f.Get("24"); + hist24->Draw("HIST"); } diff --git a/examples/extended/hadronic/Hadr05/src/ActionInitialization.cc b/examples/extended/hadronic/Hadr05/src/ActionInitialization.cc index cbbad13f87a..2a84289a125 100644 --- a/examples/extended/hadronic/Hadr05/src/ActionInitialization.cc +++ b/examples/extended/hadronic/Hadr05/src/ActionInitialization.cc @@ -67,7 +67,7 @@ void ActionInitialization::Build() const EventAction* event = new EventAction(fDetector); SetUserAction(event); - SetUserAction(new TrackingAction(fDetector)); + SetUserAction(new TrackingAction(fDetector,event)); SetUserAction(new SteppingAction(fDetector,event)); } diff --git a/examples/extended/hadronic/Hadr05/src/EventAction.cc b/examples/extended/hadronic/Hadr05/src/EventAction.cc index 5b52ad1af3e..a9fa9bf1bbf 100644 --- a/examples/extended/hadronic/Hadr05/src/EventAction.cc +++ b/examples/extended/hadronic/Hadr05/src/EventAction.cc @@ -32,6 +32,7 @@ #include "EventAction.hh" +#include "DetectorConstruction.hh" #include "Run.hh" #include "HistoManager.hh" @@ -58,6 +59,25 @@ void EventAction::BeginOfEventAction(const G4Event*) for (G4int k=0; k( G4RunManager::GetRunManager()->GetNonConstCurrentRun()); - + + G4AnalysisManager* analysis = G4AnalysisManager::Instance(); + + G4double EdepTot = 0.; for (G4int k=1; k<=fDetector->GetNbOfAbsor(); k++) { - run->FillPerEvent(k,fEnergyDeposit[k],fTrackLengthCh[k]); - if (fEnergyDeposit[k] > 0.) - G4AnalysisManager::Instance()->FillH1(k, fEnergyDeposit[k]); + run->SumEdepPerAbsorber(k,fEnergyDeposit[k],fTrackLengthCh[k]); + if (fEnergyDeposit[k] > 0.) analysis->FillH1(k, fEnergyDeposit[k]); + EdepTot += fEnergyDeposit[k]; } + run->SumEnergies(EdepTot, fEnergyLeak[0], fEnergyLeak[1]); + + G4double EleakTot = fEnergyLeak[0] + fEnergyLeak[1]; + G4double ETot = EdepTot + EleakTot; + G4int id = 2*kMaxAbsor+1; + analysis->FillH1(++id, EdepTot); + analysis->FillH1(++id, EleakTot); + analysis->FillH1(++id, ETot); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr05/src/HistoManager.cc b/examples/extended/hadronic/Hadr05/src/HistoManager.cc index 7901e0033c4..ab3915de6de 100644 --- a/examples/extended/hadronic/Hadr05/src/HistoManager.cc +++ b/examples/extended/hadronic/Hadr05/src/HistoManager.cc @@ -63,7 +63,7 @@ void HistoManager::Book() const G4String id[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10","11","12","13","14","15","16","17","18","19", - "20","21"}; + "20","21","22","23","24"}; G4String title; // Default values (to be reset via /analysis/h1/set command) @@ -78,6 +78,9 @@ void HistoManager::Book() if (k > kMaxAbsor) title = "Edep longit. profile (MeV/event) in absorber " + id[k-kMaxAbsor]; if (k == 2*kMaxAbsor+1) title = "energy flow (MeV/event)"; + if (k == 2*kMaxAbsor+2) title = "total energy deposited"; + if (k == 2*kMaxAbsor+3) title = "total energy leakage"; + if (k == 2*kMaxAbsor+4) title = "total energy relased : Edep + Eleak"; G4int ih = analysisManager->CreateH1(id[k], title, nbins, vmin, vmax); analysisManager->SetH1Activation(ih, false); } diff --git a/examples/extended/hadronic/Hadr05/src/Run.cc b/examples/extended/hadronic/Hadr05/src/Run.cc index f16feff5b40..17f95d27c73 100644 --- a/examples/extended/hadronic/Hadr05/src/Run.cc +++ b/examples/extended/hadronic/Hadr05/src/Run.cc @@ -50,16 +50,25 @@ Run::Run(DetectorConstruction* det) fDetector(det), fParticle(nullptr), fEkin(0.) { - //initialize cumulative quantities + //initialize energy deposited per absorber // for (G4int k=0; kGetNbOfLayers())*(fDetector->GetNbOfAbsor()) + 2; @@ -97,7 +106,7 @@ void Run::CountProcesses(const G4VProcess* process) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Run::FillPerEvent(G4int kAbs, G4double EAbs, G4double LAbs) +void Run::SumEdepPerAbsorber(G4int kAbs, G4double EAbs, G4double LAbs) { //accumulate statistic with restriction // @@ -107,9 +116,16 @@ void Run::FillPerEvent(G4int kAbs, G4double EAbs, G4double LAbs) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Run::AddEnergyLeak(G4double eleak, G4int index) +void Run::SumEnergies(G4double edeptot, G4double eleak0, G4double eleak1) { - fEnergyLeak[index] += eleak; + fEdepTot += edeptot; fEdepTot2 += edeptot*edeptot; + + fEnergyLeak[0] += eleak0; fEnergyLeak[1] += eleak1; + G4double eleaktot = eleak0 + eleak1; + fEleakTot += eleaktot; fEleakTot2 += eleaktot*eleaktot; + + G4double etotal = edeptot + eleaktot; + fEtotal += etotal; fEtotal2 += etotal*etotal; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -137,10 +153,19 @@ void Run::Merge(const G4Run* run) fSumLAbs[k] += localRun->fSumLAbs[k]; fSum2LAbs[k] += localRun->fSum2LAbs[k]; } - + + fEdepTot += localRun->fEdepTot; + fEdepTot2 += localRun->fEdepTot2; + fEnergyLeak[0] += localRun->fEnergyLeak[0]; fEnergyLeak[1] += localRun->fEnergyLeak[1]; - + + fEleakTot += localRun->fEleakTot; + fEleakTot2 += localRun->fEleakTot2; + + fEtotal += localRun->fEtotal; + fEtotal2 += localRun->fEtotal2; + G4int nbPlanes = (fDetector->GetNbOfLayers())*(fDetector->GetNbOfAbsor()) + 2; for (G4int k=0; kfEnergyFlow[k]; @@ -193,14 +218,13 @@ void Run::EndOfRun() if(norm > 0) norm = 1./norm; G4double qnorm = std::sqrt(norm); - //compute and print statistic + //energy deposit per absorber // G4double beamEnergy = fEkin; G4double sqbeam = std::sqrt(beamEnergy/GeV); G4double MeanEAbs,MeanEAbs2,rmsEAbs,resolution,rmsres; G4double MeanLAbs,MeanLAbs2,rmsLAbs; - G4double EdepTot = 0.; std::ios::fmtflags mode = G4cout.flags(); G4int prec = G4cout.precision(2); @@ -215,8 +239,6 @@ void Run::EndOfRun() MeanEAbs = fSumEAbs[k]*norm; MeanEAbs2 = fSum2EAbs[k]*norm; rmsEAbs = std::sqrt(std::abs(MeanEAbs2 - MeanEAbs*MeanEAbs)); - - EdepTot += MeanEAbs; resolution= 100.*sqbeam*rmsEAbs/MeanEAbs; rmsres = resolution*qnorm; @@ -243,25 +265,41 @@ void Run::EndOfRun() << std::setw(5) << G4BestUnit( rmsLAbs,"Length") << G4endl; } - - G4cout << "\n Total Edep = " << std::setprecision(4) - << G4BestUnit(EdepTot,"Energy") << G4endl; + + //total energy deposited + // + fEdepTot /= nEvt; + fEdepTot2 /= nEvt; + G4double rmsEdep = std::sqrt(std::abs(fEdepTot2 - fEdepTot*fEdepTot)); + G4cout << "\n Total energy deposited = " << std::setprecision(4) + << G4BestUnit(fEdepTot,"Energy") + << " +- " << G4BestUnit(rmsEdep, "Energy") << G4endl; + //Energy leakage // fEnergyLeak[0] /= nEvt; fEnergyLeak[1] /= nEvt; - G4double EleakTot = fEnergyLeak[0] + fEnergyLeak[1]; + fEleakTot /= nEvt; + fEleakTot2 /= nEvt; + G4double rmsEleak = std::sqrt(std::abs(fEleakTot2 - fEleakTot*fEleakTot)); - G4cout << " Leakage : primary = " + G4cout << " Leakage : primary = " << G4BestUnit(fEnergyLeak[0],"Energy") << " secondaries = " << G4BestUnit(fEnergyLeak[1],"Energy") - << " ---> total = " << G4BestUnit(EleakTot, "Energy") << G4endl; - - G4cout << " Total energy released : Edep + Eleak = " - << G4BestUnit(EdepTot + EleakTot,"Energy") << G4endl; + << " ---> total = " << G4BestUnit(fEleakTot, "Energy") + << " +- " << G4BestUnit(rmsEleak, "Energy") << G4endl; + + //total energy released + // + fEtotal /= nEvt; + fEtotal2 /= nEvt; + G4double rmsEtotal = std::sqrt(std::abs(fEtotal2 - fEtotal*fEtotal)); + G4cout << " Total energy released : Edep + Eleak = " + << G4BestUnit(fEtotal,"Energy") + << " +- " << G4BestUnit(rmsEtotal, "Energy") << G4endl; G4cout << "------------------------------------------------------------\n"; //Energy flow @@ -269,12 +307,12 @@ void Run::EndOfRun() G4AnalysisManager* analysis = G4AnalysisManager::Instance(); G4int Idmax = (fDetector->GetNbOfLayers())*(fDetector->GetNbOfAbsor()); for (G4int Id=1; Id<=Idmax+1; Id++) { - analysis->FillH1(2*kMaxAbsor+1, (G4double)Id, fEnergyFlow[Id]); + analysis->FillH1(2*kMaxAbsor+1, (G4double)Id, fEnergyFlow[Id]/nEvt); } //normalize histograms // - for (G4int ih = kMaxAbsor+1; ih < kMaxHisto; ih++) { + for (G4int ih = kMaxAbsor+1; ih < 2*kMaxAbsor+1; ih++) { analysis->ScaleH1(ih,norm/MeV); } diff --git a/examples/extended/hadronic/Hadr05/src/TrackingAction.cc b/examples/extended/hadronic/Hadr05/src/TrackingAction.cc index 40624378633..3bf7baf2885 100644 --- a/examples/extended/hadronic/Hadr05/src/TrackingAction.cc +++ b/examples/extended/hadronic/Hadr05/src/TrackingAction.cc @@ -34,16 +34,15 @@ #include "DetectorConstruction.hh" #include "Run.hh" +#include "EventAction.hh" #include "G4RunManager.hh" #include "G4StepStatus.hh" -///#include "G4Positron.hh" -///#include "G4PhysicalConstants.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -TrackingAction::TrackingAction(DetectorConstruction* det) -:G4UserTrackingAction(),fDetector(det) +TrackingAction::TrackingAction(DetectorConstruction* det, EventAction* evt) +:G4UserTrackingAction(),fDetector(det),fEventAct(evt) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -79,18 +78,14 @@ void TrackingAction::PreUserTrackingAction(const G4Track* track ) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void TrackingAction::PostUserTrackingAction(const G4Track* aTrack) -{ - //get Run - Run* run = static_cast( - G4RunManager::GetRunManager()->GetNonConstCurrentRun()); - +{ // energy leakage G4StepStatus status = aTrack->GetStep()->GetPostStepPoint()->GetStepStatus(); if (status == fWorldBoundary) { G4int parentID = aTrack->GetParentID(); G4int index = 0; if (parentID > 0) index = 1; //primary=0, secondaries=1 G4double eleak = aTrack->GetKineticEnergy(); - run->AddEnergyLeak(eleak,index); + fEventAct->SumEnergyLeak(eleak,index); } } diff --git a/examples/extended/hadronic/Hadr06/.README.txt b/examples/extended/hadronic/Hadr06/.README.txt index f754e6b3097..dd121b215d6 100644 --- a/examples/extended/hadronic/Hadr06/.README.txt +++ b/examples/extended/hadronic/Hadr06/.README.txt @@ -67,12 +67,7 @@ \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). + The test contains 24 built-in 1D histograms : 1 "total energy deposit" 2 "Edep (MeV/mm) profile along radius" @@ -96,14 +91,15 @@ 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)" + 23 "energy spectrum of all others emerging leptons (neutrinos)" + 24 "total energy released : edep + eflow" 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..) + 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 diff --git a/examples/extended/hadronic/Hadr06/History b/examples/extended/hadronic/Hadr06/History index 0c079077f8f..41ca71193e9 100644 --- a/examples/extended/hadronic/Hadr06/History +++ b/examples/extended/hadronic/Hadr06/History @@ -4,7 +4,14 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! -## 2022-04-01 mma (exhadr6-V11-00-01) +## 2023-06-04 Michel Maire (exhadr06-V11-01-01) +- revision of all headers + +## 2022-12-19 mma (exhadr06-V11-01-00) +- Run.hh, Run.cc, EventAction.cc, HistoManager.cc : + compute and plot total energy released + +## 2022-04-01 mma (exhadr06-V11-00-01) - PhysicsList: add G4NuclideTable::SetThresholdOfHalfLife(1ns*log2) - TrackingAction: print ions with meanLife = 0 diff --git a/examples/extended/hadronic/Hadr06/README b/examples/extended/hadronic/Hadr06/README index e643ea50f2f..4aa691e629f 100644 --- a/examples/extended/hadronic/Hadr06/README +++ b/examples/extended/hadronic/Hadr06/README @@ -68,12 +68,7 @@ 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). + The test contains 24 built-in 1D histograms: 1 "total energy deposit" 2 "Edep (MeV/mm) profile along radius" @@ -98,11 +93,12 @@ 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)" + 24 "total energy released : edep + eflow" 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..) + 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 Hadr06) diff --git a/examples/extended/hadronic/Hadr06/hadr06.out b/examples/extended/hadronic/Hadr06/hadr06.out index 7a8364bcda5..d7c386dfd29 100644 --- a/examples/extended/hadronic/Hadr06/hadr06.out +++ b/examples/extended/hadronic/Hadr06/hadr06.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -41,6 +41,12 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ---> Isotope: Li7 Z = 3 N = 7 A = 7.02 g/mole abundance: 100.000 % ElmMassFraction: 100.00 % ElmAbundance 100.00 % +/cvmfs/geant4.cern.ch/share/data/G4NDL4.7 +@@@ G4ParticleHPInelastic instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic +@@@ G4ParticleHPInelasticData instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7 +NeutronHP: /Capture file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Capture/CrossSection/6_nat_Carbon +NeutronHP: /Elastic file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Elastic/CrossSection/6_nat_Carbon +NeutronHP: /Inelastic file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic/CrossSection/6_nat_Carbon # /gun/particle neutron /gun/energy 14.1 MeV @@ -69,6 +75,22 @@ NeutronHP: /Elastic file for Z = 6, A = 12 is not found and NeutronHP will use / NeutronHP: /Inelastic file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic/CrossSection/6_nat_Carbon NeutronHP: /Elastic file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Elastic/CrossSection/6_nat_Carbon +======================================================= +====== ParticleHP Physics Parameters ======== +======================================================= + UseOnlyPhotoEvaporation ? 1 + SkipMissingIsotopes ? 0 + NeglectDoppler ? 0 + DoNotAdjustFinalState ? 1 + ProduceFissionFragments ? 0 + UseWendtFissionModel ? 0 + UseNRESP71Model ? 0 + UseDBRC ? 0 +======================================================= + +@@@ G4ParticleHPInelastic instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic +NeutronHP: /Capture file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Capture/CrossSection/6_nat_Carbon + ==================================================================== HADRONIC PROCESSES SUMMARY (verbose level 1) @@ -322,15 +344,29 @@ NeutronHP: /Elastic file for Z = 6, A = 12 is not found and NeutronHP will use / Process: neutronInelastic Model: QGSP: 12 GeV ---> 100 TeV Model: FTFP: 3 GeV ---> 25 GeV - Model: Binary Cascade: 0 eV ---> 6 GeV + Model: Binary Cascade: 19.9 MeV ---> 6 GeV + Model: NeutronHPInelastic: 0 eV ---> 20 MeV + Cr_sctns: NeutronHPInelasticXS: 0 eV ---> 20 MeV + Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV Process: nCapture - Model: nRadCapture: 0 eV ---> 100 TeV + Model: NeutronHPCapture: 0 eV ---> 20 MeV + Model: nRadCapture: 19.9 MeV ---> 100 TeV + Cr_sctns: NeutronHPCaptureXS: 0 eV ---> 20 MeV + Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV + Process: nFission + Model: NeutronHPFission: 0 eV ---> 20 MeV + Model: G4LFission: 19.9 MeV ---> 100 TeV + Cr_sctns: NeutronHPFissionXS: 0 eV ---> 20 MeV + + Cr_sctns: ZeroXS: 0 eV ---> 100 TeV + + --------------------------------------------------- Hadronic Processes for pi+ @@ -411,12 +447,21 @@ NeutronHP: /Elastic file for Z = 6, A = 12 is not found and NeutronHP will use / ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -471,47 +516,49 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=3.880000s Real=3.908559s Sys=0.000000s + User=6.350000s Real=6.608354s Sys=0.000000s The run is 10000 neutron of 14.1 MeV through 30 cm of Li7 (density: 1.85 g/cm3 ) Process calls frequency : - Decay= 8078 NoProcess= 180871 Radioactivation= 46 - Rayl= 2124 Transportation= 23740 annihil= 1 - compt= 38820 conv= 1 eIoni= 43017 - hIoni= 36222 hadElastic= 172708 ionIoni= 251987 - msc= 1 nCapture= 23 neutronInelastic= 16258 - phot= 805 tInelastic= 18 + NoProcess= 197755 Radioactivation= 216 Rayl= 9044 + Transportation= 46808 annihil= 189 compt= 171698 + conv= 194 eIoni= 261416 hIoni= 148 + hadElastic= 182104 ionIoni= 284298 msc= 18 + nCapture= 34 neutronInelastic= 16504 phot= 3293 + - Mean energy deposit per event = 11.049 MeV rms = 2.6384 MeV - Mean energy leakage per event = 1.0705 MeV rms = 2.9128 MeV + Mean energy deposit per event = 8.7887 MeV rms = 3.8172 MeV + Mean energy leakage per event = 2.7789 MeV rms = 3.2737 MeV - total energy: Edep + Eleak = 12.119 MeV + Mean energy total per event = 11.568 MeV rms = 3.2785 MeV List of particles at creation : - Be8[3030.000]: 23 Emean = 6.2483 keV ( 1.0025 keV --> 12.031 keV) mean life = 0 ps - Be9: 1 Emean = 2.9094 MeV ( 2.9094 MeV --> 2.9094 MeV) stable - Li6: 58 Emean = 1.4756 MeV ( 138.04 keV --> 3.4689 MeV) stable - Li7: 180812 Emean = 303.53 keV ( 0.35712 meV --> 7.5016 MeV) stable - Li8: 23 Emean = 2.3542 keV ( 16.663 eV --> 21.75 keV) mean life = 1.2117 s - alpha: 8176 Emean = 2.7362 MeV ( 4.7576 keV --> 9.8947 MeV) stable - anti_nu_e: 23 Emean = 7.2735 MeV ( 3.7049 MeV --> 11.915 MeV) stable - e+: 1 Emean = 211.75 keV ( 211.75 keV --> 211.75 keV) stable - e-: 38534 Emean = 29.329 keV ( 100.01 eV --> 9.2658 MeV) stable - gamma: 2583 Emean = 489.37 keV ( 458.04 keV --> 2.033 MeV) stable - neutron: 16351 Emean = 3.5595 MeV ( 4.2641 keV --> 14.098 MeV) mean life = 14.67 min - triton: 8096 Emean = 3.9652 MeV ( 18.185 keV --> 10.263 MeV) mean life = 17.774 y + Be8[3030.000]: 34 Emean = 7.4575 keV ( 1.6435 keV --> 11.905 keV) mean life = 0 ps + He6: 148 Emean = 1.2919 MeV ( 957.89 keV --> 1.3372 MeV) mean life = 1.1638 s + Li6: 148 Emean = 817.23 eV ( 15.464 eV --> 1.4062 keV) stable + Li7: 197607 Emean = 329.34 keV ( 0.32128 meV --> 6.2166 MeV) stable + Li8: 34 Emean = 427.73 eV ( 5.0673 eV --> 2.1847 keV) mean life = 1.2117 s + alpha: 349 Emean = 1.2717 MeV ( 15.576 keV --> 3.8026 MeV) stable + anti_nu_e: 182 Emean = 2.7141 MeV ( 140.02 keV --> 10.456 MeV) stable + deuteron: 148 Emean = 431.62 keV ( 320.39 keV --> 446.7 keV) stable + e+: 194 Emean = 1.7417 MeV ( 91.817 keV --> 3.4472 MeV) stable + e-: 170512 Emean = 128.76 keV ( 100.01 eV --> 10.043 MeV) stable + gamma: 15932 Emean = 2.412 MeV ( 331.35 keV --> 4.628 MeV) stable + neutron: 17210 Emean = 3.3912 MeV ( 8.1889 keV --> 13.61 MeV) mean life = 14.67 min List of particles emerging from the absorber : - anti_nu_e: 23 Emean = 7.2735 MeV ( 3.7049 MeV --> 11.915 MeV) Eleak/event = 16.729 keV - gamma: 1777 Emean = 148.29 keV ( 12.769 keV --> 1.4957 MeV) Eleak/event = 26.351 keV - neutron: 10070 Emean = 1.0203 MeV ( 13.538 meV --> 14.1 MeV) Eleak/event = 1.0274 MeV + anti_nu_e: 182 Emean = 2.7141 MeV ( 140.02 keV --> 10.456 MeV) Eleak/event = 49.397 keV + e+: 5 Emean = 1.5677 MeV ( 993.55 keV --> 2.319 MeV) Eleak/event = 783.84 eV + e-: 100 Emean = 1.8368 MeV ( 40.854 keV --> 4.3466 MeV) Eleak/event = 18.368 keV + gamma: 12445 Emean = 1.3179 MeV ( 12.38 keV --> 4.628 MeV) Eleak/event = 1.6401 MeV + neutron: 10672 Emean = 1.0029 MeV ( 22.809 meV --> 14.1 MeV) Eleak/event = 1.0703 MeV --------- Ranecu engine status --------- Initial seed (index) = 0 - Current couple of seeds = 1633816349, 971962660 + Current couple of seeds = 1373913855, 517227169 ---------------------------------------- ================== Deleting memory pools =================== Number of memory pools allocated: 11 of which, static: 0 -Dynamic pools deleted: 11 / Total memory freed: 0.072 MB +Dynamic pools deleted: 11 / Total memory freed: 0.063 MB ============================================================ diff --git a/examples/extended/hadronic/Hadr06/include/ActionInitialization.hh b/examples/extended/hadronic/Hadr06/include/ActionInitialization.hh index 996947211b5..83f0f319b27 100644 --- a/examples/extended/hadronic/Hadr06/include/ActionInitialization.hh +++ b/examples/extended/hadronic/Hadr06/include/ActionInitialization.hh @@ -41,13 +41,13 @@ class ActionInitialization : public G4VUserActionInitialization { public: ActionInitialization(DetectorConstruction*); - virtual ~ActionInitialization(); + ~ActionInitialization() override = default; - virtual void BuildForMaster() const; - virtual void Build() const; + void BuildForMaster() const override; + void Build() const override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; }; #endif diff --git a/examples/extended/hadronic/Hadr06/include/DetectorConstruction.hh b/examples/extended/hadronic/Hadr06/include/DetectorConstruction.hh index b62e0853dac..0f998ab9582 100644 --- a/examples/extended/hadronic/Hadr06/include/DetectorConstruction.hh +++ b/examples/extended/hadronic/Hadr06/include/DetectorConstruction.hh @@ -27,7 +27,6 @@ /// \brief Definition of the DetectorConstruction class // // - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -48,11 +47,11 @@ class DetectorConstruction : public G4VUserDetectorConstruction public: DetectorConstruction(); - ~DetectorConstruction(); + ~DetectorConstruction() override; public: - virtual G4VPhysicalVolume* Construct(); + G4VPhysicalVolume* Construct() override; G4Material* MaterialWithSingleIsotope(G4String, G4String, G4double, G4int, G4int); @@ -69,15 +68,15 @@ class DetectorConstruction : public G4VUserDetectorConstruction private: - G4double fRadius; - G4Material* fMaterial; - G4LogicalVolume* fLAbsor; + G4double fRadius = 0.; + G4Material* fMaterial = nullptr; + G4LogicalVolume* fLAbsor = nullptr; - G4double fWorldSize; - G4Material* fWorldMat; - G4VPhysicalVolume* fPWorld; + G4double fWorldSize = 0.; + G4Material* fWorldMat = nullptr; + G4VPhysicalVolume* fPWorld = nullptr; - DetectorMessenger* fDetectorMessenger; + DetectorMessenger* fDetectorMessenger = nullptr; private: diff --git a/examples/extended/hadronic/Hadr06/include/DetectorMessenger.hh b/examples/extended/hadronic/Hadr06/include/DetectorMessenger.hh index e17fee12f18..bd0efcc1d91 100644 --- a/examples/extended/hadronic/Hadr06/include/DetectorMessenger.hh +++ b/examples/extended/hadronic/Hadr06/include/DetectorMessenger.hh @@ -50,19 +50,19 @@ class DetectorMessenger: public G4UImessenger public: DetectorMessenger(DetectorConstruction* ); - ~DetectorMessenger(); + ~DetectorMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - DetectorConstruction* fDetector; + DetectorConstruction* fDetector = nullptr; - G4UIdirectory* fTestemDir; - G4UIdirectory* fDetDir; - G4UIcmdWithAString* fMaterCmd; - G4UIcmdWithADoubleAndUnit* fSizeCmd; - G4UIcommand* fIsotopeCmd; + G4UIdirectory* fTestemDir = nullptr; + G4UIdirectory* fDetDir = nullptr; + G4UIcmdWithAString* fMaterCmd = nullptr; + G4UIcmdWithADoubleAndUnit* fSizeCmd = nullptr; + G4UIcommand* fIsotopeCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr06/include/ElectromagneticPhysics.hh b/examples/extended/hadronic/Hadr06/include/ElectromagneticPhysics.hh index 71cd04dee9e..8c072320762 100644 --- a/examples/extended/hadronic/Hadr06/include/ElectromagneticPhysics.hh +++ b/examples/extended/hadronic/Hadr06/include/ElectromagneticPhysics.hh @@ -42,7 +42,7 @@ class ElectromagneticPhysics : public G4VPhysicsConstructor { public: ElectromagneticPhysics(const G4String& name = "standard"); - ~ElectromagneticPhysics() override; + ~ElectromagneticPhysics() override = default; public: // This method is dummy for physics diff --git a/examples/extended/hadronic/Hadr06/include/EventAction.hh b/examples/extended/hadronic/Hadr06/include/EventAction.hh index 38b2ffd1b98..cbd84913e12 100644 --- a/examples/extended/hadronic/Hadr06/include/EventAction.hh +++ b/examples/extended/hadronic/Hadr06/include/EventAction.hh @@ -27,7 +27,6 @@ /// \brief Definition of the EventAction class // // - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -42,19 +41,19 @@ class EventAction : public G4UserEventAction { public: - EventAction(); - ~EventAction(); + EventAction() = default; + ~EventAction() override = default; public: - virtual void BeginOfEventAction(const G4Event*); - virtual void EndOfEventAction(const G4Event*); + void BeginOfEventAction(const G4Event*) override; + void EndOfEventAction(const G4Event*) override; void AddEdep (G4double Edep); void AddEflow(G4double Eflow); private: - G4double fTotalEnergyDeposit; - G4double fTotalEnergyFlow; + G4double fTotalEnergyDeposit = 0.; + G4double fTotalEnergyFlow = 0.; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr06/include/GammaNuclearPhysics.hh b/examples/extended/hadronic/Hadr06/include/GammaNuclearPhysics.hh index 750579ec703..456455f6c7e 100644 --- a/examples/extended/hadronic/Hadr06/include/GammaNuclearPhysics.hh +++ b/examples/extended/hadronic/Hadr06/include/GammaNuclearPhysics.hh @@ -27,7 +27,6 @@ /// \brief Definition of the GammaNuclearPhysics class // // - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #ifndef GammaNuclearPhysics_h @@ -42,12 +41,12 @@ class GammaNuclearPhysics : public G4VPhysicsConstructor { public: GammaNuclearPhysics(const G4String& name="gamma"); - ~GammaNuclearPhysics() override; + ~GammaNuclearPhysics() override = default; public: void ConstructParticle() override { }; - void ConstructProcess() override; -}; + void ConstructProcess() override; +}; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr06/include/GammaNuclearPhysicsLEND.hh b/examples/extended/hadronic/Hadr06/include/GammaNuclearPhysicsLEND.hh index ae360528c64..d51c2dc5faf 100644 --- a/examples/extended/hadronic/Hadr06/include/GammaNuclearPhysicsLEND.hh +++ b/examples/extended/hadronic/Hadr06/include/GammaNuclearPhysicsLEND.hh @@ -27,7 +27,6 @@ /// \brief Definition of the GammaNuclearPhysics class // // - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #ifndef GammaNuclearPhysicsLEND_h @@ -42,11 +41,11 @@ class GammaNuclearPhysicsLEND : public G4VPhysicsConstructor { public: GammaNuclearPhysicsLEND(const G4String& name="gamma"); - ~GammaNuclearPhysicsLEND() override; + ~GammaNuclearPhysicsLEND() override = default; public: void ConstructParticle() override { }; - void ConstructProcess() override; + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr06/include/HadronElasticPhysicsHP.hh b/examples/extended/hadronic/Hadr06/include/HadronElasticPhysicsHP.hh index fa5f17a43be..25b05fdc8ba 100644 --- a/examples/extended/hadronic/Hadr06/include/HadronElasticPhysicsHP.hh +++ b/examples/extended/hadronic/Hadr06/include/HadronElasticPhysicsHP.hh @@ -52,8 +52,8 @@ class HadronElasticPhysicsHP : public G4HadronElasticPhysics private: void DefineCommands(); - G4GenericMessenger* fMessenger; - G4bool fThermal; + G4GenericMessenger* fMessenger = nullptr; + G4bool fThermal = false; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr06/include/HistoManager.hh b/examples/extended/hadronic/Hadr06/include/HistoManager.hh index a2ba04f186b..7c7b350faa1 100644 --- a/examples/extended/hadronic/Hadr06/include/HistoManager.hh +++ b/examples/extended/hadronic/Hadr06/include/HistoManager.hh @@ -42,11 +42,11 @@ class HistoManager { public: HistoManager(); - ~HistoManager(); + ~HistoManager() = default; private: void Book(); - G4String fFileName; + G4String fFileName = "Hadr06"; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr06/include/PhysicsList.hh b/examples/extended/hadronic/Hadr06/include/PhysicsList.hh index 5b31e7f44e5..8c24a9ede7a 100644 --- a/examples/extended/hadronic/Hadr06/include/PhysicsList.hh +++ b/examples/extended/hadronic/Hadr06/include/PhysicsList.hh @@ -40,7 +40,7 @@ class PhysicsList: public G4VModularPhysicsList { public: PhysicsList(); - ~PhysicsList() override; + ~PhysicsList() override = default; public: void SetCuts() override; diff --git a/examples/extended/hadronic/Hadr06/include/PrimaryGeneratorAction.hh b/examples/extended/hadronic/Hadr06/include/PrimaryGeneratorAction.hh index c4c5a5707b1..3fb2a911bbd 100644 --- a/examples/extended/hadronic/Hadr06/include/PrimaryGeneratorAction.hh +++ b/examples/extended/hadronic/Hadr06/include/PrimaryGeneratorAction.hh @@ -27,9 +27,6 @@ /// \brief Definition of the PrimaryGeneratorAction class // // -// -// - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -48,14 +45,14 @@ class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: PrimaryGeneratorAction(); - ~PrimaryGeneratorAction(); + ~PrimaryGeneratorAction() override; public: - virtual void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; G4ParticleGun* GetParticleGun() {return fParticleGun;}; private: - G4ParticleGun* fParticleGun; //pointer a to G4 service class + G4ParticleGun* fParticleGun = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr06/include/RadioactiveDecayPhysics.hh b/examples/extended/hadronic/Hadr06/include/RadioactiveDecayPhysics.hh index 5a00ee41146..72908f89a24 100644 --- a/examples/extended/hadronic/Hadr06/include/RadioactiveDecayPhysics.hh +++ b/examples/extended/hadronic/Hadr06/include/RadioactiveDecayPhysics.hh @@ -38,12 +38,11 @@ class RadioactiveDecayPhysics : public G4VPhysicsConstructor { public: RadioactiveDecayPhysics(const G4String& name = "radioactiveDecay"); - ~RadioactiveDecayPhysics() override; + ~RadioactiveDecayPhysics() override = default; public: void ConstructParticle() override; - void ConstructProcess() override; - + void ConstructProcess() override; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr06/include/Run.hh b/examples/extended/hadronic/Hadr06/include/Run.hh index 554d152baaa..ab6f74f3d5b 100644 --- a/examples/extended/hadronic/Hadr06/include/Run.hh +++ b/examples/extended/hadronic/Hadr06/include/Run.hh @@ -47,14 +47,13 @@ class Run : public G4Run { public: Run(DetectorConstruction*); - ~Run(); + ~Run() override = default; public: void SetPrimary(G4ParticleDefinition* particle, G4double energy); void CountProcesses(const G4VProcess* process); void ParticleCount(G4String, G4double, G4double); - void AddEdep (G4double edep); - void AddEflow (G4double eflow); + void SumEnergies (G4double edep, G4double eflow, G4double etot); void ParticleFlux(G4String, G4double); void Merge(const G4Run*) override; @@ -76,12 +75,13 @@ class Run : public G4Run }; private: - DetectorConstruction* fDetector; - G4ParticleDefinition* fParticle; - G4double fEkin; + DetectorConstruction* fDetector = nullptr; + G4ParticleDefinition* fParticle = nullptr; + G4double fEkin = 0.; - G4double fEnergyDeposit, fEnergyDeposit2; - G4double fEnergyFlow, fEnergyFlow2; + G4double fEnergyDeposit = 0., fEnergyDeposit2 = 0.; + G4double fEnergyFlow = 0., fEnergyFlow2 = 0.; + G4double fEnergyTotal = 0., fEnergyTotal2 = 0.; std::map fProcCounter; std::map fParticleDataMap1; std::map fParticleDataMap2; diff --git a/examples/extended/hadronic/Hadr06/include/RunAction.hh b/examples/extended/hadronic/Hadr06/include/RunAction.hh index 1c59a56e2e2..584b12de51a 100644 --- a/examples/extended/hadronic/Hadr06/include/RunAction.hh +++ b/examples/extended/hadronic/Hadr06/include/RunAction.hh @@ -49,18 +49,18 @@ class RunAction : public G4UserRunAction { public: RunAction(DetectorConstruction*, PrimaryGeneratorAction*); - ~RunAction(); + ~RunAction() override; public: - virtual G4Run* GenerateRun(); - virtual void BeginOfRunAction(const G4Run*); - virtual void EndOfRunAction(const G4Run*); + G4Run* GenerateRun() override; + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; private: - DetectorConstruction* fDetector; - PrimaryGeneratorAction* fPrimary; - Run* fRun; - HistoManager* fHistoManager; + DetectorConstruction* fDetector = nullptr; + PrimaryGeneratorAction* fPrimary = nullptr; + Run* fRun = nullptr; + HistoManager* fHistoManager = nullptr; }; diff --git a/examples/extended/hadronic/Hadr06/include/SteppingAction.hh b/examples/extended/hadronic/Hadr06/include/SteppingAction.hh index c3a1bb098e4..87a064ef1cc 100644 --- a/examples/extended/hadronic/Hadr06/include/SteppingAction.hh +++ b/examples/extended/hadronic/Hadr06/include/SteppingAction.hh @@ -44,12 +44,12 @@ class SteppingAction : public G4UserSteppingAction { public: SteppingAction(EventAction*); - ~SteppingAction(); + ~SteppingAction() override = default; - virtual void UserSteppingAction(const G4Step*); + void UserSteppingAction(const G4Step*) override; private: - EventAction* fEventAction; + EventAction* fEventAction = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr06/include/TrackingAction.hh b/examples/extended/hadronic/Hadr06/include/TrackingAction.hh index 5176de64463..e00d046a3ff 100644 --- a/examples/extended/hadronic/Hadr06/include/TrackingAction.hh +++ b/examples/extended/hadronic/Hadr06/include/TrackingAction.hh @@ -54,11 +54,11 @@ class TrackingAction : public G4UserTrackingAction { void SetKillNeutrons(G4bool flag) { fKillNeutron = flag;}; private: - EventAction* fEventAction; - TrackingMessenger* fTrackMessenger; + EventAction* fEventAction = nullptr; + TrackingMessenger* fTrackMessenger = nullptr; - G4bool fParticleCount; - G4bool fKillNeutron; + G4bool fParticleCount = true; + G4bool fKillNeutron = false; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr06/include/TrackingMessenger.hh b/examples/extended/hadronic/Hadr06/include/TrackingMessenger.hh index 6a2a2bf36e8..bd5f4579673 100644 --- a/examples/extended/hadronic/Hadr06/include/TrackingMessenger.hh +++ b/examples/extended/hadronic/Hadr06/include/TrackingMessenger.hh @@ -51,11 +51,11 @@ class TrackingMessenger: public G4UImessenger void SetNewValue(G4UIcommand*, G4String) override; private: - TrackingAction* fTrackingAction; + TrackingAction* fTrackingAction = nullptr; - G4UIdirectory* fTrackingDir; - G4UIcmdWithABool* fCountCmd; - G4UIcmdWithABool* fKillCmd; + G4UIdirectory* fTrackingDir = nullptr; + G4UIcmdWithABool* fCountCmd = nullptr; + G4UIcmdWithABool* fKillCmd = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr06/run1.mac b/examples/extended/hadronic/Hadr06/run1.mac index 004882da9b5..d4251ce6b15 100644 --- a/examples/extended/hadronic/Hadr06/run1.mac +++ b/examples/extended/hadronic/Hadr06/run1.mac @@ -11,19 +11,23 @@ # ###/testhadr/phys/thermalScattering true # +/process/em/verbose 0 +/process/had/verbose 0 +# /run/initialize # /gun/particle neutron /gun/energy 14.1 MeV # /analysis/setFileName run1 -/analysis/h1/set 1 100 0. 15. MeV #Edep +/analysis/h1/set 1 100 0. 20. MeV #Edep /analysis/h1/set 2 100 0. 30. cm #Edep profile -/analysis/h1/set 3 100 0. 15. MeV #Eflow -/analysis/h1/set 14 100 0. 15. MeV #emerging gamma +/analysis/h1/set 3 100 0. 20. MeV #Eflow +/analysis/h1/set 14 100 0. 20. MeV #emerging gamma /analysis/h1/set 16 200 0.001 20. MeV log10 #emerging neutrons -/analysis/h1/set 19 100 0. 15. MeV #emerging alphas -/analysis/h1/set 20 100 0. 15. MeV #emerging generic ions +/analysis/h1/set 19 100 0. 20. MeV #emerging alphas +/analysis/h1/set 20 100 0. 20. MeV #emerging generic ions +/analysis/h1/set 24 100 0. 20. MeV #Etot # /run/printProgress 10000 /run/beamOn 100000 diff --git a/examples/extended/hadronic/Hadr06/src/ActionInitialization.cc b/examples/extended/hadronic/Hadr06/src/ActionInitialization.cc index dbab5207c2c..9214a3471a9 100644 --- a/examples/extended/hadronic/Hadr06/src/ActionInitialization.cc +++ b/examples/extended/hadronic/Hadr06/src/ActionInitialization.cc @@ -37,20 +37,14 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ActionInitialization::ActionInitialization(DetectorConstruction* detector) - : G4VUserActionInitialization(), - fDetector(detector) -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -ActionInitialization::~ActionInitialization() + : fDetector(detector) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ActionInitialization::BuildForMaster() const { - RunAction* runAction = new RunAction(fDetector, 0); + RunAction* runAction = new RunAction(fDetector, nullptr); SetUserAction(runAction); } diff --git a/examples/extended/hadronic/Hadr06/src/DetectorConstruction.cc b/examples/extended/hadronic/Hadr06/src/DetectorConstruction.cc index 73bf4e3138f..b0dc42b1b28 100644 --- a/examples/extended/hadronic/Hadr06/src/DetectorConstruction.cc +++ b/examples/extended/hadronic/Hadr06/src/DetectorConstruction.cc @@ -27,7 +27,6 @@ /// \brief Implementation of the DetectorConstruction class // // - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -54,8 +53,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorConstruction::DetectorConstruction() -:G4VUserDetectorConstruction(), - fMaterial(0), fLAbsor(0), fWorldMat(0), fPWorld(0), fDetectorMessenger(0) { fRadius = 30*cm; fWorldSize = 1.1*fRadius; diff --git a/examples/extended/hadronic/Hadr06/src/DetectorMessenger.cc b/examples/extended/hadronic/Hadr06/src/DetectorMessenger.cc index 5e87d23ff9b..dff53a98cfe 100644 --- a/examples/extended/hadronic/Hadr06/src/DetectorMessenger.cc +++ b/examples/extended/hadronic/Hadr06/src/DetectorMessenger.cc @@ -43,9 +43,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorMessenger::DetectorMessenger(DetectorConstruction * Det) -:G4UImessenger(), - fDetector(Det), fTestemDir(0), fDetDir(0), fMaterCmd(0), fSizeCmd(0), - fIsotopeCmd(0) +: fDetector(Det) { fTestemDir = new G4UIdirectory("/testhadr/"); fTestemDir->SetGuidance("commands specific to this example"); diff --git a/examples/extended/hadronic/Hadr06/src/ElectromagneticPhysics.cc b/examples/extended/hadronic/Hadr06/src/ElectromagneticPhysics.cc index a698a96d326..ad3280fc59c 100644 --- a/examples/extended/hadronic/Hadr06/src/ElectromagneticPhysics.cc +++ b/examples/extended/hadronic/Hadr06/src/ElectromagneticPhysics.cc @@ -69,7 +69,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ElectromagneticPhysics::ElectromagneticPhysics(const G4String& name) - : G4VPhysicsConstructor(name) +: G4VPhysicsConstructor(name) { SetPhysicsType(bElectromagnetic); @@ -84,11 +84,6 @@ ElectromagneticPhysics::ElectromagneticPhysics(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ElectromagneticPhysics::~ElectromagneticPhysics() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void ElectromagneticPhysics::ConstructProcess() { G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); diff --git a/examples/extended/hadronic/Hadr06/src/EventAction.cc b/examples/extended/hadronic/Hadr06/src/EventAction.cc index b9236123a13..722c5f824c8 100644 --- a/examples/extended/hadronic/Hadr06/src/EventAction.cc +++ b/examples/extended/hadronic/Hadr06/src/EventAction.cc @@ -27,7 +27,6 @@ /// \brief Implementation of the EventAction class // // - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -42,18 +41,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -EventAction::EventAction() -:G4UserEventAction(), - fTotalEnergyDeposit(0.), fTotalEnergyFlow(0.) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -EventAction::~EventAction() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void EventAction::BeginOfEventAction(const G4Event*) { fTotalEnergyDeposit = 0.; @@ -80,12 +67,12 @@ void EventAction::EndOfEventAction(const G4Event*) { Run* run = static_cast( G4RunManager::GetRunManager()->GetNonConstCurrentRun()); - - run->AddEdep (fTotalEnergyDeposit); - run->AddEflow(fTotalEnergyFlow); - + + G4double totalEnergy = fTotalEnergyDeposit + fTotalEnergyFlow; + run->SumEnergies(fTotalEnergyDeposit,fTotalEnergyFlow, totalEnergy); G4AnalysisManager::Instance()->FillH1(1,fTotalEnergyDeposit); - G4AnalysisManager::Instance()->FillH1(3,fTotalEnergyFlow); + G4AnalysisManager::Instance()->FillH1(3,fTotalEnergyFlow); + G4AnalysisManager::Instance()->FillH1(24,totalEnergy); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr06/src/GammaNuclearPhysics.cc b/examples/extended/hadronic/Hadr06/src/GammaNuclearPhysics.cc index f1af9648680..d4821c6104f 100644 --- a/examples/extended/hadronic/Hadr06/src/GammaNuclearPhysics.cc +++ b/examples/extended/hadronic/Hadr06/src/GammaNuclearPhysics.cc @@ -27,7 +27,6 @@ /// \brief Implementation of the GammaNuclearPhysics class // // - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "GammaNuclearPhysics.hh" @@ -53,11 +52,6 @@ GammaNuclearPhysics::GammaNuclearPhysics(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GammaNuclearPhysics::~GammaNuclearPhysics() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void GammaNuclearPhysics::ConstructProcess() { G4HadronInelasticProcess* process diff --git a/examples/extended/hadronic/Hadr06/src/GammaNuclearPhysicsLEND.cc b/examples/extended/hadronic/Hadr06/src/GammaNuclearPhysicsLEND.cc index 16a58a359a9..6c066545bb2 100644 --- a/examples/extended/hadronic/Hadr06/src/GammaNuclearPhysicsLEND.cc +++ b/examples/extended/hadronic/Hadr06/src/GammaNuclearPhysicsLEND.cc @@ -28,7 +28,6 @@ // // $Id: GammaNuclearPhysics.cc 66587 2012-12-21 11:06:44Z ihrivnac $ // - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "GammaNuclearPhysicsLEND.hh" @@ -53,11 +52,6 @@ GammaNuclearPhysicsLEND::GammaNuclearPhysicsLEND(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -GammaNuclearPhysicsLEND::~GammaNuclearPhysicsLEND() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void GammaNuclearPhysicsLEND::ConstructProcess() { G4ProcessManager* pManager = G4Gamma::Gamma()->GetProcessManager(); diff --git a/examples/extended/hadronic/Hadr06/src/HadronElasticPhysicsHP.cc b/examples/extended/hadronic/Hadr06/src/HadronElasticPhysicsHP.cc index 0281a99c60f..ffb7e27ec80 100644 --- a/examples/extended/hadronic/Hadr06/src/HadronElasticPhysicsHP.cc +++ b/examples/extended/hadronic/Hadr06/src/HadronElasticPhysicsHP.cc @@ -46,8 +46,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... HadronElasticPhysicsHP::HadronElasticPhysicsHP(G4int ver) -: G4HadronElasticPhysics(ver), - fMessenger(nullptr), fThermal(false) +: G4HadronElasticPhysics(ver) { // define commands for this class DefineCommands(); diff --git a/examples/extended/hadronic/Hadr06/src/HistoManager.cc b/examples/extended/hadronic/Hadr06/src/HistoManager.cc index f42a3fd6e4e..103f9f93f95 100644 --- a/examples/extended/hadronic/Hadr06/src/HistoManager.cc +++ b/examples/extended/hadronic/Hadr06/src/HistoManager.cc @@ -36,19 +36,12 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... HistoManager::HistoManager() - : fFileName("Hadr06") { Book(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -HistoManager::~HistoManager() -{ -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void HistoManager::Book() { // Create or get analysis manager @@ -61,10 +54,10 @@ void HistoManager::Book() analysisManager->SetActivation(true); //enable inactivation of histograms // Define histograms start values - const G4int kMaxHisto = 24; + const G4int kMaxHisto = 25; const G4String id[] = {"0","1","2","3","4","5","6","7","8","9", "10","11","12","13","14","15","16","17","18","19", - "20","21","22","23" }; + "20","21","22","23","24" }; const G4String title[] = { "dummy", //0 "total energy deposit", //1 @@ -89,7 +82,8 @@ void HistoManager::Book() "energy spectrum of all others emerging ions", //20 "energy spectrum of all others emerging baryons", //21 "energy spectrum of all others emerging mesons", //22 - "energy spectrum of all others emerging leptons (neutrinos)" //23 + "energy spectrum of all others emerging leptons (neutrinos)", //23 + "total energy released : edep + eflow" //24 }; // Default values (to be reset via /analysis/h1/set command) diff --git a/examples/extended/hadronic/Hadr06/src/PhysicsList.cc b/examples/extended/hadronic/Hadr06/src/PhysicsList.cc index a2a111cb55c..ca27603433f 100644 --- a/examples/extended/hadronic/Hadr06/src/PhysicsList.cc +++ b/examples/extended/hadronic/Hadr06/src/PhysicsList.cc @@ -61,7 +61,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PhysicsList::PhysicsList() -:G4VModularPhysicsList() { G4int verb = 1; SetVerboseLevel(verb); @@ -82,7 +81,7 @@ PhysicsList::PhysicsList() // Hadron Inelastic Physics ////RegisterPhysics( new G4HadronPhysicsFTFP_BERT_HP(verb)); - RegisterPhysics( new G4HadronPhysicsQGSP_BIC(verb)); + RegisterPhysics( new G4HadronPhysicsQGSP_BIC_HP(verb)); ////RegisterPhysics( new G4HadronPhysicsQGSP_BIC_AllHP(verb)); ////RegisterPhysics( new G4HadronInelasticQBBC(verb)); ////RegisterPhysics( new G4HadronPhysicsINCLXX(verb)); @@ -116,11 +115,6 @@ PhysicsList::PhysicsList() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::~PhysicsList() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void PhysicsList::SetCuts() { SetCutValue(0*mm, "proton"); diff --git a/examples/extended/hadronic/Hadr06/src/PrimaryGeneratorAction.cc b/examples/extended/hadronic/Hadr06/src/PrimaryGeneratorAction.cc index f10a427fb03..e590aa6b6b5 100644 --- a/examples/extended/hadronic/Hadr06/src/PrimaryGeneratorAction.cc +++ b/examples/extended/hadronic/Hadr06/src/PrimaryGeneratorAction.cc @@ -27,9 +27,6 @@ /// \brief Implementation of the PrimaryGeneratorAction class // // -// -// - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -45,7 +42,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PrimaryGeneratorAction::PrimaryGeneratorAction() -: G4VUserPrimaryGeneratorAction(),fParticleGun(0) { G4int n_particle = 1; fParticleGun = new G4ParticleGun(n_particle); @@ -58,7 +54,6 @@ PrimaryGeneratorAction::PrimaryGeneratorAction() fParticleGun->SetParticleMomentumDirection(G4ThreeVector(1.,0.,0.)); fParticleGun->SetParticleEnergy(14*MeV); fParticleGun->SetParticlePosition(G4ThreeVector(0.*cm,0.*cm,0.*cm)); - } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr06/src/RadioactiveDecayPhysics.cc b/examples/extended/hadronic/Hadr06/src/RadioactiveDecayPhysics.cc index 60cd86c8ade..32df6e411bd 100644 --- a/examples/extended/hadronic/Hadr06/src/RadioactiveDecayPhysics.cc +++ b/examples/extended/hadronic/Hadr06/src/RadioactiveDecayPhysics.cc @@ -58,11 +58,6 @@ RadioactiveDecayPhysics::RadioactiveDecayPhysics(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -RadioactiveDecayPhysics::~RadioactiveDecayPhysics() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void RadioactiveDecayPhysics::ConstructParticle() { G4GenericIon::GenericIon(); diff --git a/examples/extended/hadronic/Hadr06/src/Run.cc b/examples/extended/hadronic/Hadr06/src/Run.cc index 4178c277100..b0a27c0ea0a 100644 --- a/examples/extended/hadronic/Hadr06/src/Run.cc +++ b/examples/extended/hadronic/Hadr06/src/Run.cc @@ -41,16 +41,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... Run::Run(DetectorConstruction* det) -: G4Run(), - fDetector(det), fParticle(0), fEkin(0.) -{ - fEnergyDeposit = fEnergyDeposit2 = 0.; - fEnergyFlow = fEnergyFlow2 = 0.; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -Run::~Run() +: fDetector(det) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -99,19 +90,18 @@ void Run::ParticleCount(G4String name, G4double Ekin, G4double meanLife) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Run::AddEdep(G4double edep) +void Run::SumEnergies(G4double edep, G4double eflow, G4double etot) { fEnergyDeposit += edep; fEnergyDeposit2 += edep*edep; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Run::AddEflow(G4double eflow) -{ fEnergyFlow += eflow; fEnergyFlow2 += eflow*eflow; -} + + fEnergyTotal += etot; + fEnergyTotal2 += etot*etot; +} + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void Run::ParticleFlux(G4String name, G4double Ekin) @@ -150,7 +140,9 @@ void Run::Merge(const G4Run* run) fEnergyDeposit2 += localRun->fEnergyDeposit2; fEnergyFlow += localRun->fEnergyFlow; fEnergyFlow2 += localRun->fEnergyFlow2; - + fEnergyTotal += localRun->fEnergyTotal; + fEnergyTotal2 += localRun->fEnergyTotal2; + //map: processes count std::map::const_iterator itp; for ( itp = localRun->fProcCounter.begin(); @@ -285,10 +277,16 @@ void Run::EndOfRun() //energy balance // - G4double Etot = fEnergyDeposit + fEnergyFlow; - G4cout << "\n total energy: Edep + Eleak = " << G4BestUnit(Etot, "Energy") - << G4endl; - + fEnergyTotal /= TotNbofEvents; fEnergyTotal2 /= TotNbofEvents; + G4double rmsEtotal = fEnergyTotal2 - fEnergyTotal*fEnergyTotal; + if (rmsEtotal>0.) rmsEtotal = std::sqrt(rmsEtotal); + else rmsEflow = 0.; + + G4cout << "\n Mean energy total per event = " + << G4BestUnit(fEnergyTotal,"Energy") << "; rms = " + << G4BestUnit(rmsEtotal, "Energy") + << G4endl; + //particles at creation // if (fParticleDataMap1.size() > 0) { diff --git a/examples/extended/hadronic/Hadr06/src/RunAction.cc b/examples/extended/hadronic/Hadr06/src/RunAction.cc index e274144de43..046e26bfc06 100644 --- a/examples/extended/hadronic/Hadr06/src/RunAction.cc +++ b/examples/extended/hadronic/Hadr06/src/RunAction.cc @@ -46,8 +46,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... RunAction::RunAction(DetectorConstruction* det, PrimaryGeneratorAction* prim) - : G4UserRunAction(), - fDetector(det), fPrimary(prim), fRun(0), fHistoManager(0) + : fDetector(det), fPrimary(prim) { // Book predefined histograms fHistoManager = new HistoManager(); diff --git a/examples/extended/hadronic/Hadr06/src/SteppingAction.cc b/examples/extended/hadronic/Hadr06/src/SteppingAction.cc index ddd0e89b33d..3a5b39fac20 100644 --- a/examples/extended/hadronic/Hadr06/src/SteppingAction.cc +++ b/examples/extended/hadronic/Hadr06/src/SteppingAction.cc @@ -40,12 +40,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... SteppingAction::SteppingAction(EventAction* event) -: G4UserSteppingAction(), fEventAction(event) -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -SteppingAction::~SteppingAction() +: fEventAction(event) { } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr06/src/TrackingAction.cc b/examples/extended/hadronic/Hadr06/src/TrackingAction.cc index 7c189b546a0..e9ccaac24c3 100644 --- a/examples/extended/hadronic/Hadr06/src/TrackingAction.cc +++ b/examples/extended/hadronic/Hadr06/src/TrackingAction.cc @@ -48,8 +48,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... TrackingAction::TrackingAction(EventAction* event) -:G4UserTrackingAction(), fEventAction(event), fTrackMessenger(nullptr), - fParticleCount(true) , fKillNeutron(false) +: fEventAction(event) { fTrackMessenger = new TrackingMessenger(this); } diff --git a/examples/extended/hadronic/Hadr06/src/TrackingMessenger.cc b/examples/extended/hadronic/Hadr06/src/TrackingMessenger.cc index 793223cd828..16dfa1e8c55 100644 --- a/examples/extended/hadronic/Hadr06/src/TrackingMessenger.cc +++ b/examples/extended/hadronic/Hadr06/src/TrackingMessenger.cc @@ -39,8 +39,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... TrackingMessenger::TrackingMessenger(TrackingAction* trackA) -:G4UImessenger(),fTrackingAction(trackA), - fTrackingDir(nullptr),fCountCmd(nullptr),fKillCmd(nullptr) +: fTrackingAction(trackA) { fTrackingDir = new G4UIdirectory("/testhadr/tracking/"); fTrackingDir->SetGuidance("tracking commands"); diff --git a/examples/extended/hadronic/Hadr07/.README.txt b/examples/extended/hadronic/Hadr07/.README.txt index b6ecc7da6a5..f32efb87a57 100644 --- a/examples/extended/hadronic/Hadr07/.README.txt +++ b/examples/extended/hadronic/Hadr07/.README.txt @@ -91,6 +91,9 @@ ........................................... 9 "total energy deposited in absorber 9 10 "Edep (MeV/mm) profile along absorbers" + 11 "total Energy deposited in all absorbers" + 12 "total Energy leakage" + 13 "total Energy released" One can control the name of the histograms file with the command: \verbatim diff --git a/examples/extended/hadronic/Hadr07/History b/examples/extended/hadronic/Hadr07/History index 7319f6962cf..a5394b4edba 100644 --- a/examples/extended/hadronic/Hadr07/History +++ b/examples/extended/hadronic/Hadr07/History @@ -4,6 +4,9 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-01-10 mma (exhadr07-V11-01-00) +- compute and plot Edep, Eleak, Etotal=Edep+Eleak + ## 2022-04-01 mma (exhadr07-V11-00-01) - PhysicsList: add G4NuclideTable::SetThresholdOfHalfLife(1ns*log2) - TrackingAction: print ions with meanLife = 0 diff --git a/examples/extended/hadronic/Hadr07/README b/examples/extended/hadronic/Hadr07/README index 60ef384935b..ea1d5e7c4b6 100644 --- a/examples/extended/hadronic/Hadr07/README +++ b/examples/extended/hadronic/Hadr07/README @@ -44,12 +44,12 @@ 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. + 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. + HadronElasticPhysicsHP include a model for thermalized neutrons, + under the control of a comman defined in NeutronHPMesseger. GammmaNuclearPhysics is a subset of G4BertiniElectroNuclearBuilder. @@ -92,7 +92,10 @@ ........................................... 9 "total energy deposited in absorber 9 10 "Edep (MeV/mm) profile along absorbers" - + 11 "total Energy deposited in all absorbers" + 12 "total Energy leakage" + 13 "total Energy released" + One can control the name of the histograms file with the command: /analysis/setFileName name (default Hadr07) diff --git a/examples/extended/hadronic/Hadr07/hadr07.out b/examples/extended/hadronic/Hadr07/hadr07.out index d7372f76c67..6cffb033e27 100644 --- a/examples/extended/hadronic/Hadr07/hadr07.out +++ b/examples/extended/hadronic/Hadr07/hadr07.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -85,6 +85,7 @@ NeutronHP: /Elastic file for Z = 6, A = 12 is not found and NeutronHP will use / ProduceFissionFragments ? 0 UseWendtFissionModel ? 0 UseNRESP71Model ? 0 + UseDBRC ? 0 ======================================================= @@@ G4ParticleHPInelastic instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic @@ -416,12 +417,21 @@ NeutronHP: /Capture file for Z = 6, A = 12 is not found and NeutronHP will use / ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -476,7 +486,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=4.640000s Real=4.678793s Sys=0.010000s + User=4.090000s Real=4.116175s Sys=0.000000s ======================== run summary ===================== @@ -484,41 +494,45 @@ Run Summary 1 30 cm of Li7 (density: 1.85 g/cm3 ) Process calls frequency : - NoProcess= 99541 Radioactivation= 170 Rayl= 1529 - Transportation= 58664 annihil= 141 compt= 52959 - conv= 144 eBrem= 685 eIoni= 108206 - hIoni= 170 hadElastic= 86087 ionIoni= 162191 - msc= 38 neutronInelastic= 14275 phot= 742 - + NoProcess= 100622 Radioactivation= 160 Rayl= 1622 + Transportation= 58828 annihil= 131 compt= 54278 + conv= 135 eBrem= 697 eIoni= 110574 + hIoni= 158 hadElastic= 87130 ionIoni= 173454 + msc= 53 nCapture= 1 neutronInelastic= 14346 + phot= 747 - Edep in absorber 1 = 6.9 MeV (5.22 keV-->14.1 MeV) + Edep in absorber 1 = 6.96 MeV (2.4 keV-->14.8 MeV) + Energy leakage = 4.65 MeV (2.54 keV-->14.1 MeV) + Energy total = 11.6 MeV (844 keV-->25.6 MeV) List of created particles in absorber 1: - He6: 170 Emean = 1.29 MeV ( 920 keV --> 1.34 MeV) mean life = 1.16 s - Li6: 170 Emean = 785 eV ( 74.3 eV --> 1.39 keV) stable - Li7: 99371 Emean = 562 keV ( 64.8 meV --> 6.22 MeV) stable - alpha: 260 Emean = 1.14 MeV ( 50.5 keV --> 3.75 MeV) stable - anti_nu_e: 170 Emean = 1.95 MeV ( 122 keV --> 3.42 MeV) stable - deuteron: 170 Emean = 430 keV ( 308 keV --> 447 keV) stable - e+: 144 Emean = 1.83 MeV ( 34.9 keV --> 3.53 MeV) stable - e-: 53654 Emean = 242 keV ( 100 eV --> 4.39 MeV) stable - gamma: 14219 Emean = 2.52 MeV ( 1.51 keV --> 4.63 MeV) stable - neutron: 14927 Emean = 3.68 MeV ( 6.72 keV --> 13.6 MeV) mean life = 14.7 min + Be8[3030.000]: 1 Emean = 10.2 keV ( 10.2 keV --> 10.2 keV) mean life = 0 ps + He6: 158 Emean = 1.29 MeV ( 955 keV --> 1.34 MeV) mean life = 1.16 s + Li6: 158 Emean = 777 eV ( 33.4 eV --> 1.4 keV) stable + Li7: 100464 Emean = 558 keV ( 151 meV --> 6.22 MeV) stable + Li8: 1 Emean = 1.5 keV ( 1.5 keV --> 1.5 keV) mean life = 1.21 s + alpha: 301 Emean = 1.16 MeV ( 57.4 keV --> 3.99 MeV) stable + anti_nu_e: 159 Emean = 1.84 MeV ( 327 keV --> 5.82 MeV) stable + deuteron: 158 Emean = 431 keV ( 319 keV --> 447 keV) stable + e+: 135 Emean = 1.78 MeV ( 164 keV --> 3.57 MeV) stable + e-: 54921 Emean = 244 keV ( 100 eV --> 7.15 MeV) stable + gamma: 14274 Emean = 2.5 MeV ( 1.52 keV --> 4.63 MeV) stable + neutron: 15042 Emean = 3.62 MeV ( 5.1 keV --> 13.6 MeV) mean life = 14.7 min List of particles emerging from absorbers : - anti_nu_e: 170 Emean = 1.95 MeV ( 122 keV --> 3.42 MeV) - e+: 3 Emean = 1.99 MeV ( 795 keV --> 3 MeV) - e-: 171 Emean = 1.73 MeV ( 25.7 keV --> 4.22 MeV) - gamma: 13333 Emean = 1.73 MeV ( 6.31 keV --> 4.63 MeV) - neutron: 10652 Emean = 2.19 MeV ( 7.34 eV --> 14.1 MeV) + anti_nu_e: 159 Emean = 1.84 MeV ( 327 keV --> 5.82 MeV) + e+: 4 Emean = 2.08 MeV ( 1.55 MeV --> 2.91 MeV) + e-: 164 Emean = 1.91 MeV ( 46.9 keV --> 4.29 MeV) + gamma: 13392 Emean = 1.69 MeV ( 5.3 keV --> 4.63 MeV) + neutron: 10695 Emean = 2.18 MeV ( 10.2 eV --> 14.1 MeV) - Nb of events with primary absorbed = 87 %, transmit = 6.6 %, reflected = 6.1 % + Nb of events with primary absorbed = 87 %, transmit = 6.8 %, reflected = 6.1 % --------- Ranecu engine status --------- Initial seed (index) = 0 - Current couple of seeds = 241992494, 156324279 + Current couple of seeds = 598463, 1277652208 ---------------------------------------- ================== Deleting memory pools =================== -Number of memory pools allocated: 10 of which, static: 0 -Dynamic pools deleted: 10 / Total memory freed: 0.039 MB +Number of memory pools allocated: 11 of which, static: 0 +Dynamic pools deleted: 11 / Total memory freed: 0.043 MB ============================================================ diff --git a/examples/extended/hadronic/Hadr07/include/EventAction.hh b/examples/extended/hadronic/Hadr07/include/EventAction.hh index 7bba2a9b950..bb4b145ad2c 100644 --- a/examples/extended/hadronic/Hadr07/include/EventAction.hh +++ b/examples/extended/hadronic/Hadr07/include/EventAction.hh @@ -43,18 +43,20 @@ class EventAction : public G4UserEventAction { public: EventAction(DetectorConstruction*); - ~EventAction(); + ~EventAction() override; public: - virtual void BeginOfEventAction(const G4Event*); - virtual void EndOfEventAction(const G4Event*); + void BeginOfEventAction(const G4Event*) override; + void EndOfEventAction(const G4Event*) override; - void AddEdep(G4int k, G4double edep) { fEdepAbsor[k] += edep; } + void AddEdep(G4int k, G4double edep); + void AddEleak (G4double eleak); private: DetectorConstruction* fDetector; G4double fEdepAbsor[kMaxAbsor]; + G4double fEnergyLeak; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr07/include/Run.hh b/examples/extended/hadronic/Hadr07/include/Run.hh index cc5dfdc3608..5934a7663a7 100644 --- a/examples/extended/hadronic/Hadr07/include/Run.hh +++ b/examples/extended/hadronic/Hadr07/include/Run.hh @@ -55,9 +55,11 @@ class Run : public G4Run void SetPrimary(G4ParticleDefinition* particle, G4double energy); void CountProcesses(const G4VProcess* process); void ParticleCount(G4int, G4String, G4double, G4double); - void AddEdep (G4int i, G4double e); - void AddTotEdep (G4double e); - void AddTrackStatus (G4int i); + void AddEdep (G4int, G4double); + void AddTotEdep (G4double); + void AddEleak (G4double); + void AddEtotal (G4double); + void AddTrackStatus (G4int); void Merge(const G4Run*) override; void EndOfRun(); @@ -84,8 +86,8 @@ private: G4int fStatus[3]; G4double fEdeposit[kMaxAbsor], fEmin[kMaxAbsor], fEmax[kMaxAbsor]; - G4double fTotEdep[3]; - + G4double fTotEdep[3], fEleak[3], fEtotal[3]; + std::map fProcCounter; std::map fParticleDataMap[kMaxAbsor]; }; diff --git a/examples/extended/hadronic/Hadr07/include/TrackingAction.hh b/examples/extended/hadronic/Hadr07/include/TrackingAction.hh index 0de65c5ea70..8ce0fe8922b 100644 --- a/examples/extended/hadronic/Hadr07/include/TrackingAction.hh +++ b/examples/extended/hadronic/Hadr07/include/TrackingAction.hh @@ -37,13 +37,14 @@ #include "globals.hh" class TrackingMessenger; +class EventAction; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... class TrackingAction : public G4UserTrackingAction { public: - TrackingAction(); + TrackingAction(EventAction*); ~TrackingAction() override; void PreUserTrackingAction(const G4Track*) override; @@ -53,7 +54,8 @@ class TrackingAction : public G4UserTrackingAction { private: TrackingMessenger* fTrackMessenger; - + EventAction* fEventAct; + G4bool fParticleCount; }; diff --git a/examples/extended/hadronic/Hadr07/multiLayers.mac b/examples/extended/hadronic/Hadr07/multiLayers.mac index 3c6f85b5706..b26e760fe63 100644 --- a/examples/extended/hadronic/Hadr07/multiLayers.mac +++ b/examples/extended/hadronic/Hadr07/multiLayers.mac @@ -20,7 +20,9 @@ # /analysis/setFileName bone /analysis/h1/set 10 300 0. 300. mm #edep profile +/analysis/h1/set 11 110 0. 6.1 MeV #total edep +/analysis/h1/set 12 110 0. 6.1 MeV #total eleak +/analysis/h1/set 13 110 0. 6.1 MeV #total energy # /run/printProgress 10000 -# /run/beamOn 100000 diff --git a/examples/extended/hadronic/Hadr07/plotHisto.C b/examples/extended/hadronic/Hadr07/plotHisto.C index 103d231b6fa..e4b1e0ef5ff 100644 --- a/examples/extended/hadronic/Hadr07/plotHisto.C +++ b/examples/extended/hadronic/Hadr07/plotHisto.C @@ -9,16 +9,16 @@ c1->cd(); c1->Update(); - TH1D* hist1 = (TH1D*)f.Get("10"); - hist1->Draw("HIST"); -/* - TH1D* hist3 = (TH1D*)f.Get("3"); - hist3->Draw("HIST"); + TH1D* hist10 = (TH1D*)f.Get("10"); + hist10->Draw("HIST"); + + TH1D* hist11 = (TH1D*)f.Get("11"); + hist11->Draw("HIST"); - TH1D* hist4 = (TH1D*)f.Get("4"); - hist4->Draw("HIST"); + TH1D* hist12 = (TH1D*)f.Get("12"); + hist12->Draw("HIST"); - TH1D* hist5 = (TH1D*)f.Get("5"); - hist5->Draw("HIST"); -*/ + TH1D* hist13 = (TH1D*)f.Get("13"); + hist13->Draw("HIST"); + } diff --git a/examples/extended/hadronic/Hadr07/src/ActionInitialization.cc b/examples/extended/hadronic/Hadr07/src/ActionInitialization.cc index b4280e61c21..ed3a68c6f2b 100644 --- a/examples/extended/hadronic/Hadr07/src/ActionInitialization.cc +++ b/examples/extended/hadronic/Hadr07/src/ActionInitialization.cc @@ -66,7 +66,7 @@ void ActionInitialization::Build() const EventAction* eventAction = new EventAction(fDetector); SetUserAction(eventAction); - SetUserAction(new TrackingAction()); + SetUserAction(new TrackingAction(eventAction)); SetUserAction(new SteppingAction(fDetector, eventAction)); } diff --git a/examples/extended/hadronic/Hadr07/src/EventAction.cc b/examples/extended/hadronic/Hadr07/src/EventAction.cc index afa7335b5c6..977b722672a 100644 --- a/examples/extended/hadronic/Hadr07/src/EventAction.cc +++ b/examples/extended/hadronic/Hadr07/src/EventAction.cc @@ -56,6 +56,23 @@ void EventAction::BeginOfEventAction(const G4Event*) { //energy deposited per event for (G4int k=0; kGetNbOfAbsor(); k++) { if (fEdepAbsor[k] > 0.) { run->AddEdep(k,fEdepAbsor[k]); - G4AnalysisManager::Instance()->FillH1(k, fEdepAbsor[k]); + analysis->FillH1(k, fEdepAbsor[k]); TotalEdep += fEdepAbsor[k]; } } - if (TotalEdep > 0.) { - run->AddTotEdep(TotalEdep); - } + if (TotalEdep > 0.) run->AddTotEdep(TotalEdep); + if (fEnergyLeak > 0.) run->AddEleak(fEnergyLeak); + G4double Etotal = TotalEdep + fEnergyLeak; + if (Etotal > 0.) run->AddEtotal(Etotal); + + analysis->FillH1(11,TotalEdep); + analysis->FillH1(12,fEnergyLeak); + analysis->FillH1(13,Etotal); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/hadronic/Hadr07/src/HistoManager.cc b/examples/extended/hadronic/Hadr07/src/HistoManager.cc index 4569197b836..cb339135ea1 100644 --- a/examples/extended/hadronic/Hadr07/src/HistoManager.cc +++ b/examples/extended/hadronic/Hadr07/src/HistoManager.cc @@ -63,7 +63,7 @@ void HistoManager::Book() analysisManager->SetActivation(true); // Define histograms start values - const G4int kMaxHisto = 11; + const G4int kMaxHisto = 14; const G4String id[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10","11","12","13","14","15","16","17","18","19", "20","21","22"}; @@ -79,7 +79,10 @@ void HistoManager::Book() "total Energy deposited in absorber 7", //7 "total Energy deposited in absorber 8", //8 "total Energy deposited in absorber 9", //9 - "Edep (MeV/mm) along absorbers" //10 + "Edep (MeV/mm) along absorbers", //10 + "total Energy deposited in all absorbers", //11 + "total Energy leakage", //12 + "total Energy released" //13 }; // Default values (to be reset via /analysis/h1/set command) diff --git a/examples/extended/hadronic/Hadr07/src/Run.cc b/examples/extended/hadronic/Hadr07/src/Run.cc index e07ef3fa042..dba920624b4 100644 --- a/examples/extended/hadronic/Hadr07/src/Run.cc +++ b/examples/extended/hadronic/Hadr07/src/Run.cc @@ -50,8 +50,11 @@ Run::Run(DetectorConstruction* detector) fDetector(detector), fParticle(0), fEkin(0.) { - for (G4int i=0; i<3; ++i) { fStatus[i] = 0; fTotEdep[i] = 0.; } - fTotEdep[1] = joule; + for (G4int i=0; i<3; ++i) { + fStatus[i] = 0; fTotEdep[i] = fEleak[i] = fEtotal[i] = 0.; + } + fTotEdep[1] = fEleak[1] = fEtotal[1] = joule; + for (G4int i=0; i 0.) { + fEleak[0] += e; + if (e < fEleak[1]) fEleak[1] = e; + if (e > fEleak[2]) fEleak[2] = e; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void Run::AddEtotal (G4double e) +{ + if (e > 0.) { + fEtotal[0] += e; + if (e < fEtotal[1]) fEtotal[1] = e; + if (e > fEtotal[2]) fEtotal[2] = e; + } +} + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void Run::AddTrackStatus (G4int i) @@ -165,7 +190,19 @@ void Run::Merge(const G4Run* run) min = localRun->fTotEdep[1]; max = localRun->fTotEdep[2]; if (fTotEdep[1] > min) fTotEdep[1] = min; if (fTotEdep[2] < max) fTotEdep[2] = max; - + + // Eleak + fEleak[0] += localRun->fEleak[0]; + min = localRun->fEleak[1]; max = localRun->fEleak[2]; + if (fEleak[1] > min) fEleak[1] = min; + if (fEleak[2] < max) fEleak[2] = max; + + // Etotal + fEtotal[0] += localRun->fEtotal[0]; + min = localRun->fEtotal[1]; max = localRun->fEtotal[2]; + if (fEtotal[1] > min) fEtotal[1] = min; + if (fEtotal[2] < max) fEtotal[2] = max; + //map: processes count std::map::const_iterator itp; for ( itp = localRun->fProcCounter.begin(); @@ -275,12 +312,30 @@ void Run::EndOfRun() if (nbOfAbsor > 1) { fTotEdep[0] /= numberOfEvent; G4cout - << "\n Edep in all absorbers = " << G4BestUnit(fTotEdep[0],"Energy") + << "\n Edep in all absorb = " << G4BestUnit(fTotEdep[0],"Energy") << "\t(" << G4BestUnit(fTotEdep[1], "Energy") << "-->" << G4BestUnit(fTotEdep[2], "Energy") << ")" << G4endl; } - + + //Eleak + // + fEleak[0] /= numberOfEvent; + G4cout + << " Energy leakage = " << G4BestUnit(fEleak[0],"Energy") + << "\t(" << G4BestUnit(fEleak[1], "Energy") + << "-->" << G4BestUnit(fEleak[2], "Energy") + << ")" << G4endl; + + //Etotal + // + fEtotal[0] /= numberOfEvent; + G4cout + << " Energy total = " << G4BestUnit(fEtotal[0],"Energy") + << "\t(" << G4BestUnit(fEtotal[1], "Energy") + << "-->" << G4BestUnit(fEtotal[2], "Energy") + << ")" << G4endl; + //particles count in absorbers // for (G4int k=1; k<= nbOfAbsor; k++) { diff --git a/examples/extended/hadronic/Hadr07/src/TrackingAction.cc b/examples/extended/hadronic/Hadr07/src/TrackingAction.cc index d259757c65f..bcf1442ec21 100644 --- a/examples/extended/hadronic/Hadr07/src/TrackingAction.cc +++ b/examples/extended/hadronic/Hadr07/src/TrackingAction.cc @@ -33,6 +33,7 @@ #include "TrackingAction.hh" #include "Run.hh" +#include "EventAction.hh" #include "HistoManager.hh" #include "TrackingMessenger.hh" @@ -42,8 +43,8 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -TrackingAction::TrackingAction() -:G4UserTrackingAction(), fTrackMessenger(nullptr), +TrackingAction::TrackingAction(EventAction* evt) +:G4UserTrackingAction(), fTrackMessenger(nullptr),fEventAct(evt), fParticleCount(true) { fTrackMessenger = new TrackingMessenger(this); @@ -105,6 +106,7 @@ void TrackingAction::PostUserTrackingAction(const G4Track* track) G4double meanLife = particle->GetPDGLifeTime(); G4double energy = track->GetKineticEnergy(); run->ParticleCount(0,name,energy,meanLife); + fEventAct->AddEleak(energy); ////G4AnalysisManager* analysisManager = G4AnalysisManager::Instance(); } diff --git a/examples/extended/hadronic/Hadr08/hadr08.out b/examples/extended/hadronic/Hadr08/hadr08.out index dbfe5bc6f7d..7a2d45ef458 100644 --- a/examples/extended/hadronic/Hadr08/hadr08.out +++ b/examples/extended/hadronic/Hadr08/hadr08.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -157,7 +157,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -189,7 +189,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -221,7 +221,7 @@ hPairProd: for proton XStype:3 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -234,7 +234,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -280,7 +279,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -312,7 +311,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -344,7 +343,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -376,7 +375,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -408,7 +407,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -440,7 +439,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -472,7 +471,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -857,12 +856,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -916,8 +924,8 @@ Index : 3 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=5.720000s Real=5.779015s Sys=0.010000s + User=5.030000s Real=5.072318s Sys=0.000000s ================== Deleting memory pools =================== Number of memory pools allocated: 13 of which, static: 0 -Dynamic pools deleted: 13 / Total memory freed: 0.1 MB +Dynamic pools deleted: 13 / Total memory freed: 0.19 MB ============================================================ diff --git a/examples/extended/hadronic/Hadr09/hadr09.out b/examples/extended/hadronic/Hadr09/hadr09.out index 5392feeb643..9e48c92c90f 100644 --- a/examples/extended/hadronic/Hadr09/hadr09.out +++ b/examples/extended/hadronic/Hadr09/hadr09.out @@ -10,7 +10,7 @@ IsIonProjectile: false =================================================== - Initial seed = 1686680519 + Initial seed = 1687914917 ================================================================================ @@ -18,64 +18,22 @@ IsIonProjectile: false INCL++/G4ExcitationHandler could not use its own level-density parameter for fission ================================================================================ - Collision 0 projectile=anti_alpha Ekin[MeV]=13687.8 direction=(0.36091,0.562571,0.743813) material=G4_Ar======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== + Collision 0 projectile=He3 Ekin[MeV]=16229 direction=(0.874979,0.282366,0.393297) material=G4_Fe======================================================================= +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV -Type of de-excitation inverse x-section 3 -Type of de-excitation factory Evaporation+GEM -Number of de-excitation channels 68 -Min excitation energy 10 eV -Min energy per nucleon for multifragmentation 200 GeV -Limit excitation energy for Fermi BreakUp 20 MeV -Level density (1/MeV) 0.075 -Use simple level density model 1 -Use discrete excitation energy of the residual 1 -Time limit for long lived isomeres 1 ns -Isomer production flag 1 -Internal e- conversion flag 1 -Store e- internal conversion data 0 -Correlated gamma emission flag 0 -Max 2J for sampling of angular correlations 10 +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 ======================================================================= - - --> #secondaries=17 impactParameter[fm]=5.17893 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=40 #NNcollisions=2 - List of produced secondaries: - j=0 pi- p=(63.8479,203.111,308.997400.362) MeV - j=1 proton p=(908.377,306.798,562.7881454.77) MeV - j=2 anti_proton p=(379.893,1456.73,1751.922493.18) MeV - j=3 pi+ p=(46.5576,15.7787,100.121178.663) MeV - j=4 pi+ p=(186.871,658.512,529.653876.682) MeV - j=5 anti_proton p=(1165.34,1724.95,2526.223405.23) MeV - j=6 proton p=(478.499,-135.892,-20.81241062.18) MeV - j=7 neutron p=(70.0207,49.5652,10.3287943.53) MeV - j=8 deuteron p=(77.2443,40.9793,0.5565581877.65) MeV - j=9 neutron p=(26.0231,52.4079,62.4283943.453) MeV - j=10 neutron p=(-11.0102,-70.5796,-23.8145942.578) MeV - j=11 neutron p=(47.4857,-32.9041,47.2437942.525) MeV - j=12 gamma p=(-0.375382,-1.97466,0.1713722.01731) MeV - j=13 gamma p=(-0.274074,0.116011,0.4253760.519153) MeV - j=14 P32 p=(-611.415,274.141,-8.0857629783.4) MeV - j=15 anti_proton p=(1387.19,2891.31,3776.835042.69) MeV - j=16 anti_neutron p=(1925.37,2137.15,3028.434281.19) MeV - Collision 1 projectile=B- Ekin[MeV]=16444 direction=(0.640741,0.528182,0.557203) material=G4_Ar - --> #secondaries=20 impactParameter[fm]=1.39538 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=37 #NNcollisions=1 - Collision 2 projectile=xi_c0 Ekin[MeV]=23569.7 direction=(0.0521985,0.893223,0.446573) material=G4_C - --> #secondaries=10 impactParameter[fm]=1.81259 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 - Collision 3 projectile=alpha Ekin[MeV]=17658.9 direction=(0.347296,0.762463,0.545926) material=G4_Ar - --> #secondaries=26 impactParameter[fm]=4.7697 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=38 #NNcollisions=1 - Collision 4 projectile=kaon0L Ekin[MeV]=2822.12 direction=(0.594979,0.740356,0.312847) material=G4_Pb - --> #secondaries=43 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 5 projectile=He3 Ekin[MeV]=9311.83 direction=(0.589486,0.577575,0.564724) material=G4_W======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Nuclear De-excitation Module Parameters ======== ======================================================================= -Type of pre-compound inverse x-section 3 -Pre-compound model active 1 -Pre-compound excitation low energy 100 keV -Pre-compound excitation high energy 30 MeV Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -93,2323 +51,2354 @@ Correlated gamma emission flag 0 Max 2J for sampling of angular correlations 10 ======================================================================= - --> #secondaries=57 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 6 projectile=sigma+ Ekin[MeV]=13219 direction=(0.558084,0.197302,0.805987) material=G4_H - --> #secondaries=3 impactParameter[fm]=0.112745 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 7 projectile=anti_doublehyperH4 Ekin[MeV]=1519.8 direction=(0.860406,0.481617,0.166574) material=G4_Si - --> #secondaries=29 impactParameter[fm]=1.97228 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=4 - Collision 8 projectile=lambda Ekin[MeV]=17633.4 direction=(0.513802,0.232918,0.825685) material=G4_H - --> #secondaries=4 impactParameter[fm]=1.24637 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 9 projectile=anti_D0 Ekin[MeV]=21298.2 direction=(0.0546121,0.445243,0.893743) material=G4_Al - --> #secondaries=14 impactParameter[fm]=0.706234 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 10 projectile=anti_D0 Ekin[MeV]=7310.46 direction=(0.0871887,0.866025,0.492341) material=G4_Fe - --> #secondaries=16 impactParameter[fm]=1.46944 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 11 projectile=anti_B0 Ekin[MeV]=18409.4 direction=(0.377642,0.15329,0.913175) material=G4_Fe - --> #secondaries=12 impactParameter[fm]=5.01523 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 12 projectile=anti_sigma- Ekin[MeV]=19992.6 direction=(0.995826,0.0283854,0.086746) material=G4_H - --> #secondaries=5 impactParameter[fm]=0.22198 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 13 projectile=anti_triton Ekin[MeV]=11649.5 direction=(0.0380131,0.994764,0.0948653) material=G4_Be - --> #secondaries=14 impactParameter[fm]=3.7303 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=8 #NNcollisions=2 - Collision 14 projectile=triton Ekin[MeV]=4192.93 direction=(0.408914,0.709395,0.574063) material=G4_Al - --> #secondaries=16 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 15 projectile=anti_xi- Ekin[MeV]=12530.2 direction=(0.0878241,0.590006,0.802608) material=G4_He - --> #secondaries=7 impactParameter[fm]=0.51975 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 - Collision 16 projectile=D0 Ekin[MeV]=4956.83 direction=(0.105678,0.969442,0.221391) material=G4_H - --> #secondaries=3 impactParameter[fm]=1.11072 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 17 projectile=lambda Ekin[MeV]=25217.6 direction=(0.675856,0.498092,0.543253) material=G4_Si - --> #secondaries=26 impactParameter[fm]=2.71435 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 18 projectile=alpha Ekin[MeV]=13385.4 direction=(0.253964,0.062656,0.965182) material=G4_H - --> #secondaries=5 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 19 projectile=anti_hyperalpha Ekin[MeV]=15264.1 direction=(0.650898,0.751294,0.109037) material=G4_W - --> #secondaries=80 impactParameter[fm]=6.52795 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=177 #NNcollisions=3 - Collision 20 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=26361.9 direction=(0.799839,0.0760468,0.595378) material=G4_Al - --> #secondaries=11 impactParameter[fm]=4.84679 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 21 projectile=anti_triton Ekin[MeV]=27952.4 direction=(0.294646,0.327912,0.897584) material=G4_Cu - --> #secondaries=86 impactParameter[fm]=2.35417 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=12 - Collision 22 projectile=hyperalpha Ekin[MeV]=2192.59 direction=(0.970069,0.00809182,0.242695) material=G4_Pb - --> #secondaries=23 impactParameter[fm]=7.26951 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=204 #NNcollisions=0 - Collision 23 projectile=xi_c+ Ekin[MeV]=22964.2 direction=(0.43697,0.884624,0.162778) material=G4_Cu - --> #secondaries=16 impactParameter[fm]=4.51856 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 24 projectile=anti_doublehyperH4 Ekin[MeV]=22163.3 direction=(0.658813,0.341183,0.670492) material=G4_He - --> #secondaries=9 impactParameter[fm]=3.31339 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 25 projectile=anti_He3 Ekin[MeV]=23831 direction=(0.0166544,0.777785,0.628309) material=G4_Si - --> #secondaries=19 impactParameter[fm]=3.54345 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 26 projectile=Ds- Ekin[MeV]=23260.8 direction=(0.521159,0.430889,0.736701) material=G4_H - --> #secondaries=9 impactParameter[fm]=0.844469 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 27 projectile=sigma+ Ekin[MeV]=20591.4 direction=(0.911173,0.38334,0.151045) material=G4_Be - --> #secondaries=10 impactParameter[fm]=3.69864 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 28 projectile=anti_xi_b- Ekin[MeV]=26438 direction=(0.945848,0.230617,0.228446) material=G4_Si - --> #secondaries=23 impactParameter[fm]=2.55808 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 29 projectile=Bc+ Ekin[MeV]=5193.97 direction=(0.14134,0.639073,0.756048) material=G4_He - --> #secondaries=4 impactParameter[fm]=0.416173 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 30 projectile=anti_triton Ekin[MeV]=29595.8 direction=(0.651281,0.714978,0.254244) material=G4_Al - --> #secondaries=16 impactParameter[fm]=3.49183 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 31 projectile=anti_lambda_b Ekin[MeV]=4731.63 direction=(0.380802,0.0404419,0.923772) material=G4_Be - --> #secondaries=5 impactParameter[fm]=1.52896 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 32 projectile=anti_hypertriton Ekin[MeV]=9367.06 direction=(0.521721,0.603824,0.602663) material=G4_Al - --> #secondaries=33 impactParameter[fm]=2.24346 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=23 #NNcollisions=4 - Collision 33 projectile=Bc- Ekin[MeV]=27544.7 direction=(0.408704,0.738285,0.53656) material=G4_C - --> #secondaries=9 impactParameter[fm]=0.66269 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 34 projectile=neutron Ekin[MeV]=14208.4 direction=(0.650225,0.460661,0.604151) material=G4_Fe - --> #secondaries=21 impactParameter[fm]=3.88557 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=1 - Collision 35 projectile=anti_xi_c0 Ekin[MeV]=7540.17 direction=(0.293038,0.932527,0.211004) material=G4_Ar - --> #secondaries=20 impactParameter[fm]=2.44278 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=1 - Collision 36 projectile=sigma+ Ekin[MeV]=13935.4 direction=(0.347791,0.352366,0.868838) material=G4_Be - --> #secondaries=11 impactParameter[fm]=2.62807 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 37 projectile=B0 Ekin[MeV]=19588 direction=(0.229918,0.382544,0.894873) material=G4_Pb - --> #secondaries=12 impactParameter[fm]=6.92576 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=1 - Collision 38 projectile=anti_hyperHe5 Ekin[MeV]=3200.77 direction=(0.00634953,0.67948,0.733666) material=G4_C - --> #secondaries=18 impactParameter[fm]=2.74346 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=9 #NNcollisions=3 - Collision 39 projectile=xi0 Ekin[MeV]=23904.6 direction=(0.770953,0.440668,0.45983) material=G4_Pb - --> #secondaries=62 impactParameter[fm]=6.605 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=2 - Collision 40 projectile=D+ Ekin[MeV]=19021.5 direction=(0.383834,0.510956,0.769152) material=G4_Al - --> #secondaries=4 impactParameter[fm]=4.07112 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 41 projectile=anti_hyperHe5 Ekin[MeV]=26774.4 direction=(0.822346,0.501757,0.268304) material=G4_Si - --> #secondaries=24 impactParameter[fm]=5.88416 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=27 #NNcollisions=2 - Collision 42 projectile=anti_lambda_b Ekin[MeV]=2173 direction=(0.655219,0.565477,0.500923) material=G4_C - --> #secondaries=7 impactParameter[fm]=3.15544 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 43 projectile=anti_alpha Ekin[MeV]=21640.8 direction=(0.236878,0.425256,0.873525) material=G4_He - --> #secondaries=17 impactParameter[fm]=1.62253 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=2 #NNcollisions=2 - Collision 44 projectile=B0 Ekin[MeV]=26936 direction=(0.0355926,0.204073,0.978308) material=G4_W - --> #secondaries=45 impactParameter[fm]=4.33228 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=179 #NNcollisions=2 - Collision 45 projectile=Bs0 Ekin[MeV]=3231.61 direction=(0.328936,0.895259,0.30052) material=G4_Be - --> #secondaries=5 impactParameter[fm]=0.723719 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 46 projectile=kaon0S Ekin[MeV]=22276.6 direction=(0.889142,0.0494399,0.454952) material=G4_Pb - --> #secondaries=57 impactParameter[fm]=2.63399 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=204 #NNcollisions=2 - Collision 47 projectile=Bs0 Ekin[MeV]=21776.5 direction=(0.406669,0.501059,0.763911) material=G4_Be - --> #secondaries=12 impactParameter[fm]=0.85756 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 48 projectile=xi- Ekin[MeV]=16658 direction=(0.407783,0.639942,0.651296) material=G4_Al - --> #secondaries=10 impactParameter[fm]=3.02782 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 49 projectile=Bc- Ekin[MeV]=17732.6 direction=(0.432569,0.87374,0.222401) material=G4_C - --> #secondaries=5 impactParameter[fm]=2.88779 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 50 projectile=anti_He3 Ekin[MeV]=23762.9 direction=(0.493914,0.67325,0.550257) material=G4_Be - --> #secondaries=11 impactParameter[fm]=2.97932 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=9 #NNcollisions=1 - Collision 51 projectile=anti_proton Ekin[MeV]=17865.2 direction=(0.276276,0.522614,0.806564) material=G4_H - --> #secondaries=13 impactParameter[fm]=1.67585 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 52 projectile=anti_lambda_c+ Ekin[MeV]=7938.21 direction=(0.392712,0.328379,0.859037) material=G4_Al - --> #secondaries=28 impactParameter[fm]=2.28569 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=3 - Collision 53 projectile=anti_sigma- Ekin[MeV]=20569.6 direction=(0.641315,0.69326,0.328794) material=G4_Al - --> #secondaries=14 impactParameter[fm]=4.44402 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 54 projectile=hyperHe5 Ekin[MeV]=1009.42 direction=(0.552212,0.0213841,0.83343) material=G4_W - --> #secondaries=31 impactParameter[fm]=6.16614 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=175 #NNcollisions=0 - Collision 55 projectile=kaon- Ekin[MeV]=4351.93 direction=(0.742347,0.487764,0.459356) material=G4_Fe - --> #secondaries=5 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 56 projectile=kaon0S Ekin[MeV]=13234 direction=(0.682539,0.42573,0.594049) material=G4_W - --> #secondaries=76 impactParameter[fm]=1.2072 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=179 #NNcollisions=4 - Collision 57 projectile=doublehyperdoubleneutron Ekin[MeV]=29992.9 direction=(0.00620555,0.852442,0.522785) material=G4_Al - --> #secondaries=32 impactParameter[fm]=3.86599 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=21 #NNcollisions=3 - Collision 58 projectile=anti_xi_b0 Ekin[MeV]=2838.27 direction=(0.623126,0.458981,0.633286) material=G4_Si - --> #secondaries=19 impactParameter[fm]=0.714403 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=0 - Collision 59 projectile=proton Ekin[MeV]=16275.5 direction=(0.379696,0.65789,0.650394) material=G4_He - --> #secondaries=8 impactParameter[fm]=2.03853 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 60 projectile=lambda_c+ Ekin[MeV]=20381.3 direction=(0.617281,0.593469,0.516486) material=G4_Pb - --> #secondaries=28 impactParameter[fm]=7.53762 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=1 - Collision 61 projectile=sigma- Ekin[MeV]=13833.7 direction=(0.584598,0.529986,0.614296) material=G4_Cu - --> #secondaries=27 impactParameter[fm]=4.37207 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=3 - Collision 62 projectile=lambda_c+ Ekin[MeV]=5399.39 direction=(0.651856,0.620973,0.435288) material=G4_Al - --> #secondaries=13 impactParameter[fm]=2.22104 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 63 projectile=anti_triton Ekin[MeV]=10121.8 direction=(0.735346,0.301599,0.606881) material=G4_H - --> #secondaries=8 impactParameter[fm]=0.850712 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=1 #NNcollisions=1 - Collision 64 projectile=anti_xi_c+ Ekin[MeV]=24126.8 direction=(0.395585,0.299277,0.8683) material=G4_He - --> #secondaries=9 impactParameter[fm]=0.845367 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=1 - Collision 65 projectile=anti_proton Ekin[MeV]=8891.38 direction=(0.0431221,0.658377,0.751452) material=G4_Fe - --> #secondaries=15 impactParameter[fm]=5.25146 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 66 projectile=Ds+ Ekin[MeV]=19020.5 direction=(0.761366,0.137941,0.633478) material=G4_Si - --> #secondaries=12 impactParameter[fm]=2.17774 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 67 projectile=alpha Ekin[MeV]=12345.3 direction=(0.500737,0.559584,0.6604) material=G4_Pb - --> #secondaries=100 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 68 projectile=omega_b- Ekin[MeV]=18016.2 direction=(0.563678,0.82431,0.0527357) material=G4_C - --> #secondaries=9 impactParameter[fm]=1.41505 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 - Collision 69 projectile=sigma+ Ekin[MeV]=24692.5 direction=(0.456005,0.763201,0.457804) material=G4_Fe - --> #secondaries=20 impactParameter[fm]=2.78016 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=1 - Collision 70 projectile=anti_xi_c+ Ekin[MeV]=18841.2 direction=(0.446679,0.810554,0.378787) material=G4_Al - --> #secondaries=21 impactParameter[fm]=2.21159 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 71 projectile=anti_omega_c0 Ekin[MeV]=5762.82 direction=(0.680225,0.342537,0.648045) material=G4_Pb - --> #secondaries=8 impactParameter[fm]=7.70459 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=0 - Collision 72 projectile=xi- Ekin[MeV]=22978.7 direction=(0.59657,0.800495,0.057542) material=G4_Be - --> #secondaries=9 impactParameter[fm]=2.86411 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 73 projectile=doublehyperH4 Ekin[MeV]=13765.6 direction=(0.424519,0.672696,0.606022) material=G4_He - --> #secondaries=10 impactParameter[fm]=2.6063 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 74 projectile=anti_triton Ekin[MeV]=22001 direction=(0.361762,0.710667,0.603391) material=G4_H - --> #secondaries=12 impactParameter[fm]=1.10908 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 75 projectile=xi_c+ Ekin[MeV]=8989.07 direction=(0.56184,0.283085,0.777302) material=G4_Be - --> #secondaries=9 impactParameter[fm]=3.35484 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 76 projectile=anti_xi_b0 Ekin[MeV]=7679.93 direction=(0.967915,0.137075,0.210595) material=G4_C - --> #secondaries=16 impactParameter[fm]=1.01528 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=2 - Collision 77 projectile=Bc+ Ekin[MeV]=28471.1 direction=(0.506308,0.535329,0.676073) material=G4_W - --> #secondaries=39 impactParameter[fm]=4.88771 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=184 #NNcollisions=1 - Collision 78 projectile=Ds- Ekin[MeV]=2018.81 direction=(0.928106,0.372173,0.0103274) material=G4_W - --> #secondaries=23 impactParameter[fm]=1.43034 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=179 #NNcollisions=2 - Collision 79 projectile=sigma+ Ekin[MeV]=15846 direction=(0.96355,0.261022,0.0586471) material=G4_Be - --> #secondaries=12 impactParameter[fm]=2.02038 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 80 projectile=Bc- Ekin[MeV]=8128.45 direction=(0.139664,0.943307,0.301108) material=G4_C - --> #secondaries=8 impactParameter[fm]=1.77345 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 81 projectile=anti_deuteron Ekin[MeV]=6320.91 direction=(0.13117,0.812596,0.567875) material=G4_Be - --> #secondaries=15 impactParameter[fm]=0.748283 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 82 projectile=sigma- Ekin[MeV]=13899.3 direction=(0.249649,0.723149,0.643996) material=G4_C - --> #secondaries=15 impactParameter[fm]=1.48985 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=2 - Collision 83 projectile=kaon0S Ekin[MeV]=20019.1 direction=(0.854409,0.493148,0.163675) material=G4_W - --> #secondaries=46 impactParameter[fm]=6.4572 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=183 #NNcollisions=1 - Collision 84 projectile=anti_xi0 Ekin[MeV]=19337.8 direction=(0.67545,0.444631,0.588278) material=G4_Be - --> #secondaries=13 impactParameter[fm]=0.931199 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 85 projectile=Bc+ Ekin[MeV]=2265.36 direction=(0.762483,0.321432,0.561516) material=G4_Pb - --> #secondaries=25 impactParameter[fm]=4.04826 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=0 - Collision 86 projectile=doublehyperdoubleneutron Ekin[MeV]=22278.1 direction=(0.795612,0.588945,0.141938) material=G4_Ar - --> #secondaries=50 impactParameter[fm]=1.23839 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=30 #NNcollisions=7 - Collision 87 projectile=anti_xi_c0 Ekin[MeV]=5847.97 direction=(0.656439,0.499586,0.565244) material=G4_He - --> #secondaries=6 impactParameter[fm]=0.614135 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 88 projectile=anti_xi_c+ Ekin[MeV]=26869.3 direction=(0.114404,0.97689,0.180549) material=G4_Fe - --> #secondaries=36 impactParameter[fm]=3.16685 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 89 projectile=anti_hyperalpha Ekin[MeV]=22090.2 direction=(0.401551,0.570672,0.716303) material=G4_Pb - --> #secondaries=102 impactParameter[fm]=5.54645 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=7 - Collision 90 projectile=deuteron Ekin[MeV]=17182.3 direction=(0.953049,0.271482,0.134146) material=G4_Be - --> #secondaries=9 impactParameter[fm]=3.44897 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 91 projectile=Ds+ Ekin[MeV]=16310.8 direction=(0.322858,0.945715,0.0372401) material=G4_Al - --> #secondaries=8 impactParameter[fm]=1.37196 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 92 projectile=B0 Ekin[MeV]=7822.02 direction=(0.553445,0.498122,0.667512) material=G4_He - --> #secondaries=4 impactParameter[fm]=0.936584 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 93 projectile=hypertriton Ekin[MeV]=18909.1 direction=(0.121834,0.941343,0.314689) material=G4_Fe - --> #secondaries=54 impactParameter[fm]=2.35844 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=51 #NNcollisions=4 - Collision 94 projectile=kaon- Ekin[MeV]=12165.1 direction=(0.398784,0.910549,0.108959) material=G4_Fe - --> #secondaries=15 impactParameter[fm]=3.03479 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 95 projectile=omega- Ekin[MeV]=10698.9 direction=(0.699821,0.702007,0.132047) material=G4_C - --> #secondaries=14 impactParameter[fm]=0.517687 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 96 projectile=Ds+ Ekin[MeV]=20045.3 direction=(0.402691,0.900826,0.162335) material=G4_He - --> #secondaries=10 impactParameter[fm]=1.01596 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 97 projectile=omega- Ekin[MeV]=20538.9 direction=(0.18725,0.982304,0.00397414) material=G4_Al - --> #secondaries=14 impactParameter[fm]=2.74189 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 98 projectile=B+ Ekin[MeV]=28456.8 direction=(0.852639,0.276382,0.443418) material=G4_W - --> #secondaries=59 impactParameter[fm]=4.87014 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=184 #NNcollisions=2 - Collision 99 projectile=omega_b- Ekin[MeV]=26525 direction=(0.525987,0.635668,0.565035) material=G4_Al - --> #secondaries=7 impactParameter[fm]=4.0635 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 100 projectile=anti_xi- Ekin[MeV]=20814.3 direction=(0.655971,0.487366,0.576347) material=G4_C - --> #secondaries=20 impactParameter[fm]=2.60903 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + --> #secondaries=35 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 List of produced secondaries: - j=0 pi0 p=(35.7439,221.828,172.567313.821) MeV - j=1 pi- p=(194.269,172.149,104.404312.659) MeV - j=2 pi+ p=(266.003,608.14,382.635778.769) MeV - j=3 pi0 p=(1659.08,1398,1713.482767.89) MeV - j=4 kaon+ p=(2286.1,1529.38,1937.193400.25) MeV - j=5 pi- p=(277.768,66.1863,69.6229325.366) MeV - j=6 neutron p=(-108.097,-50.3769,61.5767949.104) MeV - j=7 kaon0S p=(3303.26,2740.15,2715.095102.87) MeV - j=8 pi0 p=(2983.03,1735.79,1747.213870.71) MeV - j=9 pi+ p=(549.533,155.913,671.765892.773) MeV - j=10 pi- p=(336.339,254.632,740.541863.621) MeV - j=11 pi+ p=(360.712,-191.186,26.5626432.262) MeV - j=12 pi- p=(502.089,197.612,718.488909.312) MeV - j=13 pi+ p=(1685.84,1811.8,1658.372982.34) MeV - j=14 deuteron p=(39.7614,-11.596,-177.3541884.43) MeV - j=15 neutron p=(-21.0147,70.2788,62.2954944.481) MeV - j=16 proton p=(-36.2027,-96.6362,54.7544945.517) MeV - j=17 proton p=(-38.281,101.031,63.0233946.572) MeV - j=18 proton p=(195.654,25.0268,56.7854960.461) MeV - j=19 alpha p=(23.1966,31.0359,-43.64923727.84) MeV - Collision 101 projectile=anti_xi0 Ekin[MeV]=19429 direction=(0.520814,0.372077,0.768317) material=G4_Al - --> #secondaries=24 impactParameter[fm]=3.88548 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 102 projectile=alpha Ekin[MeV]=18085.5 direction=(0.666353,0.0245708,0.745231) material=G4_C + j=0 pi0 p=(83.4722,-55.0296,-154.578228.274) MeV + j=1 pi- p=(518.19,8.34251,273.417602.351) MeV + j=2 proton p=(4222.31,1290.6,1815.234865.08) MeV + j=3 pi+ p=(162.54,612.289,89.0534654.773) MeV + j=4 pi0 p=(1909.62,314.401,742.0542077.11) MeV + j=5 proton p=(2249.77,1317.84,1222.623028.74) MeV + j=6 proton p=(3979.35,1473.72,1237.294518.67) MeV + j=7 pi0 p=(-102.356,184.731,-181.302309.34) MeV + j=8 pi- p=(220.465,174.498,341.804464.073) MeV + j=9 neutron p=(-109.946,365.695,150.0071025.23) MeV + j=10 neutron p=(420.79,221.159,-110.0251058.71) MeV + j=11 pi- p=(48.695,171.085,137.374264.561) MeV + j=12 pi+ p=(-226.639,7.20792,-72.9594276.08) MeV + j=13 pi0 p=(69.2644,83.1076,87.6489193.921) MeV + j=14 neutron p=(381.707,-20.9267,402.3781091.25) MeV + j=15 proton p=(397.647,-59.3918,-183.8281037.21) MeV + j=16 proton p=(270.593,-12.0656,438.5791070.55) MeV + j=17 proton p=(364.117,-63.2967,356.0171069.43) MeV + j=18 neutron p=(179.842,-182.294,157.116986.429) MeV + j=19 neutron p=(127.433,137.506,119.595965.522) MeV + j=20 neutron p=(-102.444,-247.935,-30.428977.587) MeV + j=21 proton p=(37.0211,149.816,231.274978.6) MeV + j=22 pi+ p=(140.008,-87.0232,32.4577218.423) MeV + j=23 proton p=(-118.025,53.6073,-351.2411010.21) MeV + j=24 neutron p=(-36.656,-379.647,199.9311033.55) MeV + j=25 Mg25[585.045] p=(1015.79,-460.424,-90.14223295.5) MeV + j=26 proton p=(137.629,155.22,18.5088961.11) MeV + j=27 He3 p=(12.185,-103.046,274.932823.72) MeV + j=28 neutron p=(-5.19184,46.2457,-36.2044941.414) MeV + j=29 B11 p=(114.009,306.115,227.18210260.3) MeV + j=30 neutron p=(12.9317,-115.908,98.6401951.901) MeV + j=31 neutron p=(53.6483,31.8728,20.1178941.85) MeV + j=32 neutron p=(45.8967,-1.04135,-55.6187942.329) MeV + j=33 gamma p=(1.2831,0.457302,0.3501521.40644) MeV + j=34 gamma p=(0.0936052,-0.797121,-1.835232.00305) MeV + Collision 1 projectile=Bc+ Ekin[MeV]=7185.67 direction=(0.783876,0.0954663,0.613534) material=G4_Pb + --> #secondaries=13 impactParameter[fm]=6.36939 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=1 + Collision 2 projectile=doublehyperdoubleneutron Ekin[MeV]=7813.19 direction=(0.970508,0.238004,0.0383049) material=G4_C + --> #secondaries=14 impactParameter[fm]=2.1003 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=4 #NNcollisions=1 + Collision 3 projectile=pi+ Ekin[MeV]=14223.7 direction=(0.25094,0.661952,0.706292) material=G4_Pb + --> #secondaries=60 impactParameter[fm]=5.83235 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=3 + Collision 4 projectile=anti_xi_c+ Ekin[MeV]=24381.4 direction=(0.677939,0.645689,0.351404) material=G4_Ar + --> #secondaries=33 impactParameter[fm]=0.855239 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=2 + Collision 5 projectile=hyperHe5 Ekin[MeV]=25041.7 direction=(0.706127,0.497624,0.503741) material=G4_Ar + --> #secondaries=31 impactParameter[fm]=4.66696 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=37 #NNcollisions=3 + Collision 6 projectile=lambda_c+ Ekin[MeV]=11627.5 direction=(0.871007,0.364514,0.329356) material=G4_Al + --> #secondaries=23 impactParameter[fm]=0.806869 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=2 + Collision 7 projectile=D0 Ekin[MeV]=27972.7 direction=(0.47317,0.790292,0.389292) material=G4_Cu + --> #secondaries=15 impactParameter[fm]=3.32651 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 8 projectile=D0 Ekin[MeV]=12159.8 direction=(0.574523,0.645396,0.503376) material=G4_Al + --> #secondaries=11 impactParameter[fm]=4.8231 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 9 projectile=B0 Ekin[MeV]=19084.8 direction=(0.941026,0.280108,0.189761) material=G4_W + --> #secondaries=46 impactParameter[fm]=4.4142 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=182 #NNcollisions=1 + Collision 10 projectile=anti_xi_b- Ekin[MeV]=14478 direction=(0.634414,0.645389,0.42543) material=G4_W + --> #secondaries=56 impactParameter[fm]=5.51648 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=3 + Collision 11 projectile=xi- Ekin[MeV]=17006.7 direction=(0.182116,0.877997,0.442667) material=G4_Si + --> #secondaries=14 impactParameter[fm]=4.66112 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=28 #NNcollisions=1 + Collision 12 projectile=anti_xi- Ekin[MeV]=16171.8 direction=(0.272673,0.541872,0.795) material=G4_Si + --> #secondaries=27 impactParameter[fm]=2.54232 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 13 projectile=omega_c0 Ekin[MeV]=11323.2 direction=(0.370578,0.607693,0.702411) material=G4_Cu + --> #secondaries=25 impactParameter[fm]=3.36189 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=1 + Collision 14 projectile=anti_lambda_c+ Ekin[MeV]=12547.5 direction=(0.734449,0.610378,0.296688) material=G4_H + --> #secondaries=4 impactParameter[fm]=1.41662 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 15 projectile=hypertriton Ekin[MeV]=9241.45 direction=(0.510117,0.792265,0.334809) material=G4_W + --> #secondaries=118 impactParameter[fm]=3.40202 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=166 #NNcollisions=2 + Collision 16 projectile=D0 Ekin[MeV]=2676.67 direction=(0.865304,0.41565,0.280149) material=G4_Be + --> #secondaries=8 impactParameter[fm]=1.90799 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 17 projectile=anti_neutron Ekin[MeV]=2571.5 direction=(0.838443,0.0187937,0.544665) material=G4_Be + --> #secondaries=8 impactParameter[fm]=2.09484 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 18 projectile=anti_hypertriton Ekin[MeV]=7261.34 direction=(0.360912,0.717409,0.595875) material=G4_Al + --> #secondaries=32 impactParameter[fm]=3.41925 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=3 + Collision 19 projectile=anti_doublehyperH4 Ekin[MeV]=11869.4 direction=(0.693939,0.00636647,0.720006) material=G4_Ar + --> #secondaries=15 impactParameter[fm]=5.07141 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=40 #NNcollisions=1 + Collision 20 projectile=doublehyperH4 Ekin[MeV]=11732.2 direction=(0.79767,0.0841539,0.597194) material=G4_He + --> #secondaries=7 impactParameter[fm]=1.42598 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=3 #NNcollisions=2 + Collision 21 projectile=anti_hyperH4 Ekin[MeV]=16389.9 direction=(0.381329,0.88541,0.265777) material=G4_C + --> #secondaries=7 impactParameter[fm]=4.55155 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 22 projectile=hypertriton Ekin[MeV]=4179.4 direction=(0.713904,0.699479,0.0327254) material=G4_Cu + --> #secondaries=47 impactParameter[fm]=2.21447 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=46 #NNcollisions=1 + Collision 23 projectile=kaon- Ekin[MeV]=26069.1 direction=(0.0637278,0.815109,0.575791) material=G4_C + --> #secondaries=17 impactParameter[fm]=1.82492 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=10 #NNcollisions=2 + Collision 24 projectile=anti_triton Ekin[MeV]=6830.15 direction=(0.0827769,0.0435044,0.995618) material=G4_Al + --> #secondaries=35 impactParameter[fm]=1.75067 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=3 + Collision 25 projectile=lambda Ekin[MeV]=24225.2 direction=(0.682598,0.0245923,0.73038) material=G4_Cu + --> #secondaries=6 impactParameter[fm]=4.81388 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 26 projectile=doublehyperdoubleneutron Ekin[MeV]=14837.3 direction=(0.931488,0.245728,0.268231) material=G4_W + --> #secondaries=38 impactParameter[fm]=6.57701 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=1 + Collision 27 projectile=xi_c+ Ekin[MeV]=6102.01 direction=(0.602567,0.357888,0.713323) material=G4_W + --> #secondaries=22 impactParameter[fm]=4.93615 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=1 + Collision 28 projectile=kaon+ Ekin[MeV]=7663.98 direction=(0.168892,0.960318,0.221955) material=G4_Cu + --> #secondaries=19 impactParameter[fm]=3.69936 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=2 + Collision 29 projectile=xi_b0 Ekin[MeV]=19551.2 direction=(0.564357,0.608619,0.557749) material=G4_Pb + --> #secondaries=40 impactParameter[fm]=3.93797 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 30 projectile=anti_lambda_c+ Ekin[MeV]=16346 direction=(0.683662,0.716983,0.136167) material=G4_W + --> #secondaries=37 impactParameter[fm]=5.93814 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=1 + Collision 31 projectile=D0 Ekin[MeV]=29571.2 direction=(0.310801,0.706765,0.63552) material=G4_Fe + --> #secondaries=28 impactParameter[fm]=3.9614 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=52 #NNcollisions=2 + Collision 32 projectile=lambda Ekin[MeV]=8956.92 direction=(0.725803,0.680821,0.0984529) material=G4_W + --> #secondaries=79 impactParameter[fm]=3.59766 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=177 #NNcollisions=4 + Collision 33 projectile=anti_alpha Ekin[MeV]=18025.3 direction=(0.320692,0.943991,0.0777014) material=G4_Pb + --> #secondaries=11 impactParameter[fm]=10.1036 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 34 projectile=anti_He3 Ekin[MeV]=10997.1 direction=(0.519894,0.461337,0.718942) material=G4_Pb + --> #secondaries=93 impactParameter[fm]=2.99596 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=200 #NNcollisions=6 + Collision 35 projectile=anti_doublehyperH4 Ekin[MeV]=26061.4 direction=(0.83048,0.453591,0.323356) material=G4_Cu + --> #secondaries=65 impactParameter[fm]=1.37183 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=8 + Collision 36 projectile=xi_c+ Ekin[MeV]=13283.6 direction=(0.574181,0.0182808,0.818524) material=G4_H + --> #secondaries=6 impactParameter[fm]=1.11058 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 37 projectile=alpha Ekin[MeV]=22594.4 direction=(0.541398,0.828698,0.141946) material=G4_W + --> #secondaries=86 impactParameter[fm]=4.88068 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=176 #NNcollisions=8 + Collision 38 projectile=xi- Ekin[MeV]=19750 direction=(0.0398147,0.718981,0.693888) material=G4_Ar + --> #secondaries=11 impactParameter[fm]=4.39641 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 39 projectile=hyperHe5 Ekin[MeV]=17339.7 direction=(0.785363,0.601751,0.145261) material=G4_He + --> #secondaries=16 impactParameter[fm]=0.889901 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=0 #NNcollisions=3 + Collision 40 projectile=hyperH4 Ekin[MeV]=19315.5 direction=(0.134488,0.737382,0.661953) material=G4_W + --> #secondaries=46 impactParameter[fm]=7.33661 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=182 #NNcollisions=2 + Collision 41 projectile=Ds+ Ekin[MeV]=15394 direction=(0.797311,0.577864,0.174264) material=G4_H + --> #secondaries=4 impactParameter[fm]=0.793512 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 42 projectile=anti_lambda Ekin[MeV]=19264 direction=(0.34856,0.860993,0.370402) material=G4_Cu + --> #secondaries=59 impactParameter[fm]=1.90829 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=59 #NNcollisions=3 + Collision 43 projectile=anti_B0 Ekin[MeV]=28687.3 direction=(0.717172,0.0655522,0.693806) material=G4_W + --> #secondaries=42 impactParameter[fm]=6.7235 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=1 + Collision 44 projectile=anti_omega- Ekin[MeV]=12932.3 direction=(0.884441,0.37049,0.283727) material=G4_Cu + --> #secondaries=18 impactParameter[fm]=3.65079 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 45 projectile=Bc- Ekin[MeV]=20450.6 direction=(0.857466,0.514421,0.0111302) material=G4_Al + --> #secondaries=6 impactParameter[fm]=1.90434 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 46 projectile=D+ Ekin[MeV]=29082 direction=(0.696395,0.163028,0.698896) material=G4_Be + --> #secondaries=11 impactParameter[fm]=1.76125 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 47 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=25271.4 direction=(0.573445,0.16516,0.802424) material=G4_C + --> #secondaries=36 impactParameter[fm]=2.34874 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=8 + Collision 48 projectile=anti_B0 Ekin[MeV]=17699.4 direction=(0.710204,0.670799,0.213632) material=G4_C + --> #secondaries=10 impactParameter[fm]=1.66143 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 49 projectile=anti_B0 Ekin[MeV]=26882.2 direction=(0.628008,0.532566,0.567432) material=G4_Fe + --> #secondaries=12 impactParameter[fm]=3.93473 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 50 projectile=xi0 Ekin[MeV]=7762.78 direction=(0.100351,0.845183,0.524972) material=G4_H + --> #secondaries=3 impactParameter[fm]=1.07925 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 51 projectile=Bs0 Ekin[MeV]=11401.6 direction=(0.783176,0.542083,0.304599) material=G4_H + --> #secondaries=2 impactParameter[fm]=0.962658 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 52 projectile=sigma+ Ekin[MeV]=7772.69 direction=(0.702192,0.599919,0.383437) material=G4_Cu + --> #secondaries=40 impactParameter[fm]=3.43714 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=57 #NNcollisions=3 + Collision 53 projectile=doublehyperH4 Ekin[MeV]=1515.13 direction=(0.137966,0.977548,0.159264) material=G4_Pb + --> #secondaries=35 impactParameter[fm]=2.11701 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=198 #NNcollisions=0 + Collision 54 projectile=anti_Bs0 Ekin[MeV]=22113.6 direction=(0.126041,0.394058,0.910402) material=G4_Pb + --> #secondaries=50 impactParameter[fm]=2.11356 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=207 #NNcollisions=1 + Collision 55 projectile=alpha Ekin[MeV]=27357.8 direction=(0.141978,0.443456,0.88498) material=G4_Cu + --> #secondaries=64 impactParameter[fm]=2.29362 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=54 #NNcollisions=7 + Collision 56 projectile=D0 Ekin[MeV]=25657.1 direction=(0.753061,0.183873,0.631736) material=G4_H + --> #secondaries=7 impactParameter[fm]=0.50404 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 57 projectile=anti_Bs0 Ekin[MeV]=10071.6 direction=(0.496499,0.259902,0.828215) material=G4_Pb + --> #secondaries=36 impactParameter[fm]=6.04395 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=1 + Collision 58 projectile=anti_xi_b- Ekin[MeV]=22081.8 direction=(0.188112,0.0785688,0.979) material=G4_Ar + --> #secondaries=34 impactParameter[fm]=2.36145 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=3 + Collision 59 projectile=sigma- Ekin[MeV]=2008.12 direction=(0.438764,0.714956,0.544357) material=G4_Fe --> #secondaries=11 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 103 projectile=anti_D0 Ekin[MeV]=27175.3 direction=(0.849667,0.520731,0.0830985) material=G4_Al - --> #secondaries=9 impactParameter[fm]=3.09533 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 104 projectile=omega_b- Ekin[MeV]=1375.11 direction=(0.0601496,0.857083,0.511656) material=G4_Pb - --> #secondaries=27 impactParameter[fm]=4.22177 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=0 - Collision 105 projectile=Bc- Ekin[MeV]=13184.2 direction=(0.969848,0.240028,0.042207) material=G4_H - --> #secondaries=3 impactParameter[fm]=1.27495 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 106 projectile=xi- Ekin[MeV]=21875.4 direction=(0.477808,0.812885,0.333043) material=G4_Pb - --> #secondaries=17 impactParameter[fm]=8.64293 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=1 - Collision 107 projectile=xi_c+ Ekin[MeV]=13871.6 direction=(0.360467,0.892373,0.271539) material=G4_Al - --> #secondaries=23 impactParameter[fm]=0.363462 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 108 projectile=He3 Ekin[MeV]=8581.18 direction=(0.350567,0.71015,0.610565) material=G4_W - --> #secondaries=37 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 109 projectile=xi_b- Ekin[MeV]=8596.54 direction=(0.177336,0.943604,0.279577) material=G4_Fe - --> #secondaries=18 impactParameter[fm]=2.65861 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=1 - Collision 110 projectile=pi- Ekin[MeV]=12561.4 direction=(0.590611,0.579029,0.562053) material=G4_Fe - --> #secondaries=30 impactParameter[fm]=3.01661 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 111 projectile=He3 Ekin[MeV]=4870.23 direction=(0.403256,0.43217,0.806606) material=G4_Cu - --> #secondaries=12 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 112 projectile=Ds+ Ekin[MeV]=20344 direction=(0.394433,0.297602,0.8694) material=G4_Si - --> #secondaries=6 impactParameter[fm]=3.88 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 113 projectile=xi_c+ Ekin[MeV]=20084.1 direction=(0.138699,0.943357,0.301396) material=G4_Cu - --> #secondaries=23 impactParameter[fm]=3.93056 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=0 - Collision 114 projectile=pi- Ekin[MeV]=3668.83 direction=(0.425608,0.683052,0.593546) material=G4_Fe - --> #secondaries=23 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 115 projectile=xi_b- Ekin[MeV]=1664.65 direction=(0.859601,0.201671,0.469484) material=G4_He - --> #secondaries=4 impactParameter[fm]=1.89865 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 116 projectile=lambda Ekin[MeV]=14911.8 direction=(0.439682,0.616402,0.653244) material=G4_Pb - --> #secondaries=33 impactParameter[fm]=6.48993 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=2 - Collision 117 projectile=Ds- Ekin[MeV]=7636.67 direction=(0.0487137,0.982194,0.181442) material=G4_H - --> #secondaries=6 impactParameter[fm]=1.47213 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 118 projectile=triton Ekin[MeV]=24156.7 direction=(0.15398,0.775888,0.611791) material=G4_W - --> #secondaries=60 impactParameter[fm]=5.43013 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=177 #NNcollisions=7 - Collision 119 projectile=D0 Ekin[MeV]=4863.06 direction=(0.567858,0.238632,0.787777) material=G4_Cu - --> #secondaries=19 impactParameter[fm]=1.63559 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=60 #NNcollisions=3 - Collision 120 projectile=hyperH4 Ekin[MeV]=18775.4 direction=(0.992855,0.0518464,0.107474) material=G4_Si - --> #secondaries=18 impactParameter[fm]=6.53384 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 121 projectile=doublehyperH4 Ekin[MeV]=2434.73 direction=(0.528285,0.635029,0.563607) material=G4_Cu - --> #secondaries=36 impactParameter[fm]=0.753004 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=51 #NNcollisions=0 - Collision 122 projectile=xi_b0 Ekin[MeV]=22137 direction=(0.648419,0.425271,0.631425) material=G4_Al - --> #secondaries=13 impactParameter[fm]=0.493808 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=1 - Collision 123 projectile=B0 Ekin[MeV]=5273.79 direction=(0.591276,0.712221,0.37833) material=G4_He - --> #secondaries=5 impactParameter[fm]=2.17368 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 124 projectile=D+ Ekin[MeV]=9567.39 direction=(0.617036,0.529211,0.582411) material=G4_Ar - --> #secondaries=8 impactParameter[fm]=3.09041 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 125 projectile=anti_xi_b0 Ekin[MeV]=9919.15 direction=(0.308995,0.731123,0.608261) material=G4_W - --> #secondaries=40 impactParameter[fm]=1.98983 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=178 #NNcollisions=4 - Collision 126 projectile=anti_lambda_b Ekin[MeV]=8179.22 direction=(0.941835,0.160322,0.295369) material=G4_W - --> #secondaries=42 impactParameter[fm]=4.1441 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=4 - Collision 127 projectile=anti_hyperalpha Ekin[MeV]=8377 direction=(0.585441,0.604265,0.540484) material=G4_C - --> #secondaries=24 impactParameter[fm]=2.91475 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=10 #NNcollisions=3 - Collision 128 projectile=anti_hyperalpha Ekin[MeV]=20208.4 direction=(0.346992,0.908609,0.232435) material=G4_Cu - --> #secondaries=23 impactParameter[fm]=4.45178 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=62 #NNcollisions=2 - Collision 129 projectile=anti_sigma- Ekin[MeV]=2593.69 direction=(0.0356614,0.939121,0.341732) material=G4_Ar - --> #secondaries=11 impactParameter[fm]=2.28312 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 130 projectile=anti_proton Ekin[MeV]=8704.3 direction=(0.148849,0.864637,0.47984) material=G4_C - --> #secondaries=17 impactParameter[fm]=0.589521 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 131 projectile=omega_b- Ekin[MeV]=26394.3 direction=(0.196814,0.773808,0.602068) material=G4_W - --> #secondaries=26 impactParameter[fm]=6.85937 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=1 - Collision 132 projectile=Ds- Ekin[MeV]=12052.4 direction=(0.639331,0.578465,0.50659) material=G4_Pb - --> #secondaries=61 impactParameter[fm]=4.54795 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=203 #NNcollisions=4 - Collision 133 projectile=anti_hypertriton Ekin[MeV]=28181.1 direction=(0.428597,0.542549,0.722458) material=G4_Si - --> #secondaries=51 impactParameter[fm]=1.31356 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=4 - Collision 134 projectile=anti_D0 Ekin[MeV]=9683.16 direction=(0.298166,0.157908,0.941362) material=G4_Al - --> #secondaries=10 impactParameter[fm]=3.03037 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 135 projectile=anti_deuteron Ekin[MeV]=13025.9 direction=(0.287673,0.23149,0.929331) material=G4_Be - --> #secondaries=11 impactParameter[fm]=3.18975 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 136 projectile=lambda Ekin[MeV]=9547.46 direction=(0.918777,0.393601,0.030439) material=G4_H - --> #secondaries=4 impactParameter[fm]=0.476195 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 137 projectile=omega_c0 Ekin[MeV]=12450.9 direction=(0.271175,0.687868,0.673277) material=G4_C - --> #secondaries=9 impactParameter[fm]=2.18526 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 - Collision 138 projectile=xi_b0 Ekin[MeV]=23927.5 direction=(0.958245,0.263892,0.110125) material=G4_C - --> #secondaries=9 impactParameter[fm]=1.03492 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 139 projectile=lambda_c+ Ekin[MeV]=14380.2 direction=(0.612062,0.470058,0.635945) material=G4_Be - --> #secondaries=8 impactParameter[fm]=4.00116 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 140 projectile=anti_neutron Ekin[MeV]=27635.6 direction=(0.117724,0.961058,0.250019) material=G4_H - --> #secondaries=11 impactParameter[fm]=1.27394 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=1 - Collision 141 projectile=Ds- Ekin[MeV]=14320.6 direction=(0.45785,0.266837,0.84804) material=G4_Be - --> #secondaries=15 impactParameter[fm]=0.328628 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=6 #NNcollisions=3 - Collision 142 projectile=lambda_c+ Ekin[MeV]=19886.4 direction=(0.533134,0.309718,0.787301) material=G4_Pb - --> #secondaries=65 impactParameter[fm]=4.36405 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=3 - Collision 143 projectile=anti_xi_c0 Ekin[MeV]=17652.9 direction=(0.905184,0.0749444,0.418361) material=G4_H - --> #secondaries=6 impactParameter[fm]=0.86156 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 144 projectile=anti_lambda Ekin[MeV]=20232.1 direction=(0.865951,0.173179,0.469189) material=G4_H - --> #secondaries=13 impactParameter[fm]=1.01967 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 145 projectile=anti_D0 Ekin[MeV]=6656.02 direction=(0.813152,0.568492,0.124905) material=G4_Be - --> #secondaries=10 impactParameter[fm]=0.202416 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 146 projectile=anti_omega_b- Ekin[MeV]=13405.4 direction=(0.873582,0.443366,0.200701) material=G4_H - --> #secondaries=5 impactParameter[fm]=0.684176 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 147 projectile=D0 Ekin[MeV]=18114.7 direction=(0.299781,0.116981,0.946809) material=G4_W - --> #secondaries=74 impactParameter[fm]=0.387143 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=182 #NNcollisions=3 - Collision 148 projectile=He3 Ekin[MeV]=29642.9 direction=(0.708128,0.705627,0.0253944) material=G4_Ar - --> #secondaries=39 impactParameter[fm]=2.74401 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=34 #NNcollisions=6 - Collision 149 projectile=Ds- Ekin[MeV]=12884.9 direction=(0.185942,0.806169,0.56171) material=G4_Al - --> #secondaries=12 impactParameter[fm]=1.62183 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 150 projectile=anti_lambda_b Ekin[MeV]=18867.3 direction=(0.362763,0.871457,0.3301) material=G4_W - --> #secondaries=41 impactParameter[fm]=5.94057 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=3 - Collision 151 projectile=anti_lambda_c+ Ekin[MeV]=23502.8 direction=(0.104332,0.779665,0.617444) material=G4_Al - --> #secondaries=24 impactParameter[fm]=2.37823 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 152 projectile=pi- Ekin[MeV]=13318.3 direction=(0.676283,0.306934,0.669651) material=G4_C - --> #secondaries=9 impactParameter[fm]=2.49224 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 153 projectile=proton Ekin[MeV]=9475.17 direction=(0.383104,0.716557,0.582904) material=G4_Cu - --> #secondaries=42 impactParameter[fm]=3.23516 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=2 - Collision 154 projectile=D- Ekin[MeV]=4277.09 direction=(0.764544,0.525431,0.373356) material=G4_Cu - --> #secondaries=8 impactParameter[fm]=2.07386 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=0 - Collision 155 projectile=anti_lambda Ekin[MeV]=8661.63 direction=(0.815446,0.456436,0.355969) material=G4_Si - --> #secondaries=15 impactParameter[fm]=2.40547 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 156 projectile=lambda_c+ Ekin[MeV]=12482.6 direction=(0.449433,0.88521,0.120054) material=G4_Ar - --> #secondaries=11 impactParameter[fm]=4.25237 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 157 projectile=omega_b- Ekin[MeV]=27695.3 direction=(0.655373,0.633976,0.41056) material=G4_W - --> #secondaries=24 impactParameter[fm]=4.97341 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=184 #NNcollisions=1 - Collision 158 projectile=anti_lambda Ekin[MeV]=24922.6 direction=(0.720807,0.667736,0.18592) material=G4_Al - --> #secondaries=21 impactParameter[fm]=2.94723 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 159 projectile=B0 Ekin[MeV]=5696.3 direction=(0.840368,0.151552,0.520397) material=G4_Cu - --> #secondaries=11 impactParameter[fm]=5.89652 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=64 #NNcollisions=1 - Collision 160 projectile=lambda Ekin[MeV]=16870.2 direction=(0.372188,0.633836,0.678033) material=G4_H - --> #secondaries=5 impactParameter[fm]=0.868529 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 161 projectile=omega_b- Ekin[MeV]=12363.8 direction=(0.565819,0.656678,0.498621) material=G4_H - --> #secondaries=4 impactParameter[fm]=0.830972 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 162 projectile=anti_He3 Ekin[MeV]=16393.5 direction=(0.656916,0.728217,0.195347) material=G4_C - --> #secondaries=27 impactParameter[fm]=3.14057 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=8 #NNcollisions=6 - Collision 163 projectile=pi- Ekin[MeV]=4308.95 direction=(0.824455,0.337332,0.454401) material=G4_C - --> #secondaries=14 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 164 projectile=omega- Ekin[MeV]=10018.8 direction=(0.653757,0.141451,0.743367) material=G4_Al - --> #secondaries=23 impactParameter[fm]=2.00823 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=1 - Collision 165 projectile=anti_hyperH4 Ekin[MeV]=20090.5 direction=(0.177995,0.826105,0.534666) material=G4_C - --> #secondaries=16 impactParameter[fm]=3.49726 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 166 projectile=anti_xi_c+ Ekin[MeV]=26017.6 direction=(0.00600597,0.999229,0.0388054) material=G4_W - --> #secondaries=86 impactParameter[fm]=3.25098 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=4 - Collision 167 projectile=pi+ Ekin[MeV]=25918.9 direction=(0.584511,0.804349,0.106628) material=G4_Al - --> #secondaries=20 impactParameter[fm]=4.39856 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 168 projectile=hypertriton Ekin[MeV]=17587.6 direction=(0.604341,0.794828,0.054951) material=G4_Pb - --> #secondaries=17 impactParameter[fm]=8.22158 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=207 #NNcollisions=1 - Collision 169 projectile=anti_deuteron Ekin[MeV]=10333.6 direction=(0.166954,0.74298,0.648156) material=G4_Pb - --> #secondaries=65 impactParameter[fm]=6.34395 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=5 - Collision 170 projectile=B- Ekin[MeV]=14196.1 direction=(0.55498,0.493086,0.669973) material=G4_Al - --> #secondaries=8 impactParameter[fm]=1.90767 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 171 projectile=xi0 Ekin[MeV]=28635.6 direction=(0.690925,0.662052,0.29036) material=G4_Ar - --> #secondaries=17 impactParameter[fm]=5.12207 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 172 projectile=D+ Ekin[MeV]=6510.86 direction=(0.0316135,0.552553,0.832878) material=G4_Si - --> #secondaries=21 impactParameter[fm]=3.45667 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 173 projectile=doublehyperdoubleneutron Ekin[MeV]=27145.2 direction=(0.23614,0.808761,0.538649) material=G4_C - --> #secondaries=17 impactParameter[fm]=2.71673 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=10 #NNcollisions=1 - Collision 174 projectile=hyperHe5 Ekin[MeV]=16695.6 direction=(0.233201,0.328348,0.915317) material=G4_Be - --> #secondaries=9 impactParameter[fm]=6.72557 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 175 projectile=anti_lambda Ekin[MeV]=21881.8 direction=(0.604497,0.646305,0.465697) material=G4_Al - --> #secondaries=32 impactParameter[fm]=2.50367 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 176 projectile=anti_xi_b0 Ekin[MeV]=24196.7 direction=(0.751908,0.449697,0.482087) material=G4_Be - --> #secondaries=10 impactParameter[fm]=1.94015 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 177 projectile=anti_xi_c0 Ekin[MeV]=22359.9 direction=(0.473232,0.249294,0.844928) material=G4_C - --> #secondaries=17 impactParameter[fm]=2.23216 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 178 projectile=anti_xi0 Ekin[MeV]=8903.43 direction=(0.862536,0.0396108,0.504443) material=G4_He - --> #secondaries=8 impactParameter[fm]=0.391479 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 179 projectile=hyperalpha Ekin[MeV]=5186.86 direction=(0.460448,0.315927,0.829565) material=G4_Fe - --> #secondaries=33 impactParameter[fm]=2.87401 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=48 #NNcollisions=1 - Collision 180 projectile=Bs0 Ekin[MeV]=27536.7 direction=(0.573278,0.550683,0.606712) material=G4_W - --> #secondaries=52 impactParameter[fm]=3.24786 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=1 - Collision 181 projectile=He3 Ekin[MeV]=2123.72 direction=(0.0280198,0.397343,0.917242) material=G4_W - --> #secondaries=27 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 182 projectile=anti_xi_c0 Ekin[MeV]=27810.3 direction=(0.947268,0.177687,0.266666) material=G4_Cu - --> #secondaries=16 impactParameter[fm]=3.88883 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 183 projectile=xi_c+ Ekin[MeV]=10327.5 direction=(0.949165,0.10016,0.298419) material=G4_Si - --> #secondaries=8 impactParameter[fm]=2.05272 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 184 projectile=xi_c0 Ekin[MeV]=18239.4 direction=(0.551133,0.738883,0.38769) material=G4_Ar - --> #secondaries=12 impactParameter[fm]=2.84405 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=0 - Collision 185 projectile=kaon0L Ekin[MeV]=4542.34 direction=(0.626804,0.413822,0.660203) material=G4_Pb - --> #secondaries=52 impactParameter[fm]=6.75347 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=3 - Collision 186 projectile=kaon- Ekin[MeV]=18848.7 direction=(0.347801,0.93129,0.108321) material=G4_Be - --> #secondaries=14 impactParameter[fm]=0.735204 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=7 #NNcollisions=1 - Collision 187 projectile=B0 Ekin[MeV]=15679.1 direction=(0.758489,0.551078,0.347862) material=G4_Pb - --> #secondaries=45 impactParameter[fm]=5.22906 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=202 #NNcollisions=3 - Collision 188 projectile=anti_xi_c+ Ekin[MeV]=11188 direction=(0.897217,0.0308535,0.440511) material=G4_Ar - --> #secondaries=18 impactParameter[fm]=3.35959 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 189 projectile=Bc+ Ekin[MeV]=4840.92 direction=(0.211857,0.650797,0.729095) material=G4_Al - --> #secondaries=7 impactParameter[fm]=0.475403 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 190 projectile=pi+ Ekin[MeV]=8578.89 direction=(0.433154,0.70763,0.558245) material=G4_Pb - --> #secondaries=55 impactParameter[fm]=4.35121 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=2 - Collision 191 projectile=sigma- Ekin[MeV]=1688.48 direction=(0.754372,0.373296,0.539976) material=G4_Al - --> #secondaries=18 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 192 projectile=D0 Ekin[MeV]=3120.76 direction=(0.526848,0.826641,0.197727) material=G4_W - --> #secondaries=51 impactParameter[fm]=3.6568 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=179 #NNcollisions=0 - Collision 193 projectile=lambda_c+ Ekin[MeV]=12643.5 direction=(0.631758,0.220995,0.742995) material=G4_Al - --> #secondaries=20 impactParameter[fm]=2.20675 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=0 - Collision 194 projectile=Ds- Ekin[MeV]=27032.5 direction=(0.611827,0.670607,0.41947) material=G4_Ar - --> #secondaries=12 impactParameter[fm]=3.98606 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 195 projectile=anti_xi_b- Ekin[MeV]=21259.7 direction=(0.418877,0.907654,0.0265633) material=G4_C - --> #secondaries=16 impactParameter[fm]=0.908786 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 196 projectile=sigma- Ekin[MeV]=17216.9 direction=(0.199257,0.979647,0.0242402) material=G4_W - --> #secondaries=90 impactParameter[fm]=1.94084 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=178 #NNcollisions=6 - Collision 197 projectile=anti_hyperalpha Ekin[MeV]=23944.1 direction=(0.0159788,0.702002,0.711996) material=G4_He - --> #secondaries=5 impactParameter[fm]=2.71218 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=4 #NNcollisions=1 - Collision 198 projectile=Bc- Ekin[MeV]=2186.43 direction=(0.46909,0.630381,0.618525) material=G4_Fe - --> #secondaries=14 impactParameter[fm]=4.22552 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=0 - Collision 199 projectile=B+ Ekin[MeV]=28921.3 direction=(0.457062,0.693453,0.556972) material=G4_He - --> #secondaries=4 impactParameter[fm]=1.32649 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 200 projectile=anti_He3 Ekin[MeV]=22481.9 direction=(0.624055,0.742877,0.242258) material=G4_H - --> #secondaries=7 impactParameter[fm]=0.291447 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=0 #NNcollisions=1 - List of produced secondaries: - j=0 pi0 p=(2107.3,3287.11,509.3693939.99) MeV - j=1 pi+ p=(351.367,490.032,-113.208629.195) MeV - j=2 proton p=(429.803,158.136,187.3251060.75) MeV - j=3 pi- p=(1068.95,950.853,749.5291621.13) MeV - j=4 anti_proton p=(2435.48,2509.97,1246.553829.59) MeV - j=5 anti_proton p=(4974.07,6044.11,1696.098064.1) MeV - j=6 anti_neutron p=(4317.9,5231.12,1813.227083.74) MeV - Collision 201 projectile=proton Ekin[MeV]=25948.6 direction=(0.389908,0.711762,0.584266) material=G4_W - --> #secondaries=73 impactParameter[fm]=4.29734 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=174 #NNcollisions=7 - Collision 202 projectile=xi_b- Ekin[MeV]=16795.5 direction=(0.401285,0.707785,0.581387) material=G4_Pb - --> #secondaries=32 impactParameter[fm]=6.29318 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 - Collision 203 projectile=anti_omega- Ekin[MeV]=6952 direction=(0.202388,0.607203,0.768338) material=G4_H - --> #secondaries=8 impactParameter[fm]=0.929531 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 204 projectile=Bs0 Ekin[MeV]=12467.5 direction=(0.271383,0.6781,0.683031) material=G4_C - --> #secondaries=10 impactParameter[fm]=1.63016 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=10 #NNcollisions=2 - Collision 205 projectile=anti_sigma+ Ekin[MeV]=18118.7 direction=(0.274849,0.260177,0.925617) material=G4_Si - --> #secondaries=11 impactParameter[fm]=1.31642 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 206 projectile=anti_xi_b0 Ekin[MeV]=24049.2 direction=(0.817569,0.101657,0.566787) material=G4_He - --> #secondaries=6 impactParameter[fm]=2.1916 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=3 - Collision 207 projectile=anti_neutron Ekin[MeV]=12811.6 direction=(0.971826,0.235412,0.0116058) material=G4_W - --> #secondaries=59 impactParameter[fm]=5.09346 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=1 - Collision 208 projectile=xi_c0 Ekin[MeV]=21459.9 direction=(0.216244,0.972938,0.0814224) material=G4_Fe - --> #secondaries=29 impactParameter[fm]=1.6765 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 209 projectile=anti_proton Ekin[MeV]=10336.1 direction=(0.138468,0.156606,0.977907) material=G4_Al - --> #secondaries=19 impactParameter[fm]=3.17651 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 210 projectile=kaon+ Ekin[MeV]=16113.1 direction=(0.858626,0.449137,0.247057) material=G4_Si - --> #secondaries=20 impactParameter[fm]=1.10919 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 211 projectile=anti_alpha Ekin[MeV]=12074 direction=(0.0440759,0.561834,0.826075) material=G4_Pb - --> #secondaries=122 impactParameter[fm]=4.64404 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=4 - Collision 212 projectile=anti_xi_b- Ekin[MeV]=19339.1 direction=(0.184965,0.934569,0.303924) material=G4_Fe - --> #secondaries=33 impactParameter[fm]=3.92119 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=3 - Collision 213 projectile=anti_xi_b0 Ekin[MeV]=15023.1 direction=(0.584534,0.569371,0.578046) material=G4_C - --> #secondaries=13 impactParameter[fm]=0.569101 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 - Collision 214 projectile=anti_D0 Ekin[MeV]=17491.1 direction=(0.420813,0.794432,0.437943) material=G4_H - --> #secondaries=5 impactParameter[fm]=1.35924 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 215 projectile=anti_D0 Ekin[MeV]=3714.6 direction=(0.782504,0.621325,0.0405321) material=G4_C - --> #secondaries=6 impactParameter[fm]=3.21679 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 216 projectile=anti_omega_b- Ekin[MeV]=5164.15 direction=(0.823964,0.227558,0.518943) material=G4_W - --> #secondaries=13 impactParameter[fm]=6.2718 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=1 - Collision 217 projectile=anti_lambda_c+ Ekin[MeV]=13083.9 direction=(0.207495,0.748272,0.630106) material=G4_H - --> #secondaries=7 impactParameter[fm]=1.06744 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 218 projectile=kaon- Ekin[MeV]=23759.3 direction=(0.760703,0.563292,0.322541) material=G4_H - --> #secondaries=6 impactParameter[fm]=0.73856 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 219 projectile=He3 Ekin[MeV]=18128.9 direction=(0.684933,0.615943,0.389205) material=G4_Pb - --> #secondaries=158 impactParameter[fm]=3.66937 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=190 #NNcollisions=7 - Collision 220 projectile=lambda Ekin[MeV]=18681 direction=(0.441114,0.186083,0.877947) material=G4_H - --> #secondaries=4 impactParameter[fm]=0.148594 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 221 projectile=anti_hyperH4 Ekin[MeV]=21600.1 direction=(0.642376,0.3662,0.673239) material=G4_H - --> #secondaries=7 impactParameter[fm]=2.68994 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 222 projectile=B0 Ekin[MeV]=17507.8 direction=(0.216665,0.2758,0.936478) material=G4_C - --> #secondaries=13 impactParameter[fm]=1.51396 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 223 projectile=anti_sigma+ Ekin[MeV]=8520.78 direction=(0.60114,0.796737,0.0619808) material=G4_Pb - --> #secondaries=100 impactParameter[fm]=3.14877 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=2 - Collision 224 projectile=anti_He3 Ekin[MeV]=10552.5 direction=(0.262779,0.652456,0.710808) material=G4_Ar - --> #secondaries=17 impactParameter[fm]=5.31484 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 225 projectile=omega_c0 Ekin[MeV]=13807.4 direction=(0.40374,0.721354,0.56271) material=G4_W - --> #secondaries=32 impactParameter[fm]=3.04462 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=1 - Collision 226 projectile=anti_omega_b- Ekin[MeV]=11007.6 direction=(0.569456,0.583846,0.578657) material=G4_Be - --> #secondaries=6 impactParameter[fm]=3.79348 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 227 projectile=anti_proton Ekin[MeV]=18693.9 direction=(0.957122,0.0197493,0.289012) material=G4_Fe - --> #secondaries=15 impactParameter[fm]=5.51147 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 228 projectile=anti_hypertriton Ekin[MeV]=24099.1 direction=(0.716413,0.0196257,0.6974) material=G4_Be - --> #secondaries=18 impactParameter[fm]=1.36074 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=8 #NNcollisions=2 - Collision 229 projectile=kaon+ Ekin[MeV]=27426.2 direction=(0.565524,0.776262,0.278568) material=G4_Fe - --> #secondaries=37 impactParameter[fm]=3.29583 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=53 #NNcollisions=3 - Collision 230 projectile=anti_xi_b0 Ekin[MeV]=14499.4 direction=(0.710316,0.193474,0.676772) material=G4_Pb - --> #secondaries=66 impactParameter[fm]=3.62066 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=2 - Collision 231 projectile=B+ Ekin[MeV]=17163.9 direction=(0.120855,0.562186,0.818133) material=G4_Si - --> #secondaries=7 impactParameter[fm]=3.84526 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 232 projectile=xi_c0 Ekin[MeV]=21665 direction=(0.675653,0.29644,0.674994) material=G4_He - --> #secondaries=9 impactParameter[fm]=0.983519 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 - Collision 233 projectile=neutron Ekin[MeV]=12345.8 direction=(0.334807,0.491887,0.803711) material=G4_W - --> #secondaries=49 impactParameter[fm]=4.98685 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=178 #NNcollisions=2 - Collision 234 projectile=hypertriton Ekin[MeV]=29483.5 direction=(0.512581,0.823194,0.244159) material=G4_H - --> #secondaries=5 impactParameter[fm]=1.91289 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 235 projectile=B+ Ekin[MeV]=1021.06 direction=(0.453652,0.362461,0.814138) material=G4_He - --> #secondaries=4 impactParameter[fm]=1.32623 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 236 projectile=anti_sigma- Ekin[MeV]=16662.6 direction=(0.646902,0.707945,0.283429) material=G4_Al - --> #secondaries=21 impactParameter[fm]=1.78565 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 237 projectile=D+ Ekin[MeV]=22091.9 direction=(0.759078,0.648925,0.0519342) material=G4_H - --> #secondaries=7 impactParameter[fm]=1.35613 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 238 projectile=anti_He3 Ekin[MeV]=10905.8 direction=(0.0289858,0.885962,0.46285) material=G4_Pb - --> #secondaries=50 impactParameter[fm]=6.8769 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=3 - Collision 239 projectile=pi+ Ekin[MeV]=5566.79 direction=(0.574811,0.783499,0.236052) material=G4_Ar - --> #secondaries=16 impactParameter[fm]=2.47982 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=0 - Collision 240 projectile=hyperalpha Ekin[MeV]=22674.1 direction=(0.140376,0.83218,0.536443) material=G4_Be - --> #secondaries=12 impactParameter[fm]=3.32849 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 241 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=28028.5 direction=(0.365793,0.762177,0.534118) material=G4_Pb - --> #secondaries=105 impactParameter[fm]=4.49755 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=208 #NNcollisions=4 - Collision 242 projectile=deuteron Ekin[MeV]=29642.1 direction=(0.0482764,0.428536,0.902234) material=G4_Si - --> #secondaries=14 impactParameter[fm]=3.1785 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 243 projectile=kaon- Ekin[MeV]=6300.44 direction=(0.6483,0.753043,0.112399) material=G4_Fe - --> #secondaries=25 impactParameter[fm]=3.53577 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=53 #NNcollisions=3 - Collision 244 projectile=lambda_b Ekin[MeV]=13381.5 direction=(0.425601,0.581712,0.693163) material=G4_He - --> #secondaries=6 impactParameter[fm]=2.18565 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 245 projectile=lambda_b Ekin[MeV]=20533.4 direction=(0.260637,0.581658,0.770547) material=G4_Pb - --> #secondaries=59 impactParameter[fm]=2.28912 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=197 #NNcollisions=4 - Collision 246 projectile=doublehyperH4 Ekin[MeV]=25523.5 direction=(0.840981,0.220274,0.494197) material=G4_He - --> #secondaries=13 impactParameter[fm]=1.10981 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=1 #NNcollisions=2 - Collision 247 projectile=lambda Ekin[MeV]=14560.7 direction=(0.357629,0.767133,0.532548) material=G4_H - --> #secondaries=4 impactParameter[fm]=1.31215 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 248 projectile=triton Ekin[MeV]=23760.7 direction=(0.71852,0.646236,0.257115) material=G4_Pb - --> #secondaries=118 impactParameter[fm]=3.82286 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=190 #NNcollisions=10 - Collision 249 projectile=anti_lambda Ekin[MeV]=9133.91 direction=(0.518012,0.684951,0.512353) material=G4_W - --> #secondaries=41 impactParameter[fm]=6.00183 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=2 - Collision 250 projectile=Ds+ Ekin[MeV]=8036.4 direction=(0.860031,0.509827,0.0205832) material=G4_Be - --> #secondaries=5 impactParameter[fm]=2.16788 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 251 projectile=B- Ekin[MeV]=20083 direction=(0.735038,0.257769,0.627116) material=G4_Al - --> #secondaries=20 impactParameter[fm]=2.49618 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=24 #NNcollisions=1 - Collision 252 projectile=anti_doublehyperH4 Ekin[MeV]=16807.3 direction=(0.594953,0.396787,0.698992) material=G4_Cu - --> #secondaries=50 impactParameter[fm]=3.09253 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=6 - Collision 253 projectile=lambda_c+ Ekin[MeV]=22291.1 direction=(0.174587,0.173041,0.969317) material=G4_Ar - --> #secondaries=12 impactParameter[fm]=4.25581 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 254 projectile=Ds- Ekin[MeV]=15004.1 direction=(0.624715,0.556182,0.548081) material=G4_Be - --> #secondaries=8 impactParameter[fm]=2.70576 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 255 projectile=anti_xi0 Ekin[MeV]=28261.8 direction=(0.54978,0.526937,0.648135) material=G4_W - --> #secondaries=30 impactParameter[fm]=6.83855 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=185 #NNcollisions=1 - Collision 256 projectile=anti_xi0 Ekin[MeV]=28898.3 direction=(0.58077,0.498343,0.643708) material=G4_Pb - --> #secondaries=57 impactParameter[fm]=5.1754 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=3 - Collision 257 projectile=omega_c0 Ekin[MeV]=16729.4 direction=(0.473848,0.649029,0.595171) material=G4_Be - --> #secondaries=7 impactParameter[fm]=2.49372 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 258 projectile=anti_xi0 Ekin[MeV]=13918.7 direction=(0.951749,0.265147,0.154501) material=G4_Fe - --> #secondaries=16 impactParameter[fm]=5.36854 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 259 projectile=hyperalpha Ekin[MeV]=5979.55 direction=(0.690106,0.452559,0.564752) material=G4_C - --> #secondaries=15 impactParameter[fm]=0.409411 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=5 #NNcollisions=1 - Collision 260 projectile=B0 Ekin[MeV]=16694.4 direction=(0.475269,0.589939,0.652757) material=G4_Fe - --> #secondaries=14 impactParameter[fm]=5.66507 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 261 projectile=hypertriton Ekin[MeV]=9638.29 direction=(0.535698,0.633053,0.558812) material=G4_Cu - --> #secondaries=14 impactParameter[fm]=6.83442 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 262 projectile=lambda Ekin[MeV]=2074.77 direction=(0.594651,0.344541,0.726417) material=G4_He - --> #secondaries=7 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 263 projectile=deuteron Ekin[MeV]=24328 direction=(0.322888,0.914893,0.242312) material=G4_Pb - --> #secondaries=119 impactParameter[fm]=4.72407 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=197 #NNcollisions=8 - Collision 264 projectile=anti_hypertriton Ekin[MeV]=4960.7 direction=(0.483308,0.1378,0.864537) material=G4_Ar - --> #secondaries=42 impactParameter[fm]=1.43254 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=3 - Collision 265 projectile=anti_omega_c0 Ekin[MeV]=12018.8 direction=(0.489298,0.502232,0.712987) material=G4_C - --> #secondaries=13 impactParameter[fm]=1.5881 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 - Collision 266 projectile=anti_B0 Ekin[MeV]=12796.6 direction=(0.59389,0.717838,0.363323) material=G4_Pb - --> #secondaries=45 impactParameter[fm]=2.76855 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=3 - Collision 267 projectile=xi_b- Ekin[MeV]=15952.5 direction=(0.298509,0.797067,0.524954) material=G4_Si - --> #secondaries=26 impactParameter[fm]=0.37986 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=3 - Collision 268 projectile=neutron Ekin[MeV]=11050.6 direction=(0.0280411,0.994792,0.0979889) material=G4_Be - --> #secondaries=9 impactParameter[fm]=3.12514 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 269 projectile=anti_alpha Ekin[MeV]=9143.21 direction=(0.502063,0.69512,0.51453) material=G4_Si - --> #secondaries=27 impactParameter[fm]=3.02462 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=2 - Collision 270 projectile=pi+ Ekin[MeV]=28702.7 direction=(0.49334,0.811034,0.314387) material=G4_C - --> #secondaries=17 impactParameter[fm]=2.21176 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=10 #NNcollisions=2 - Collision 271 projectile=anti_xi_b- Ekin[MeV]=16849.2 direction=(0.442884,0.0594612,0.894605) material=G4_C - --> #secondaries=10 impactParameter[fm]=1.04091 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=0 - Collision 272 projectile=triton Ekin[MeV]=23911.2 direction=(0.787943,0.0944551,0.608461) material=G4_Be - --> #secondaries=10 impactParameter[fm]=4.41572 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=8 #NNcollisions=2 - Collision 273 projectile=B+ Ekin[MeV]=6462.72 direction=(0.805973,0.544141,0.233063) material=G4_H - --> #secondaries=3 impactParameter[fm]=0.555877 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 274 projectile=lambda_c+ Ekin[MeV]=6732.47 direction=(0.759189,0.648506,0.0554315) material=G4_Ar - --> #secondaries=26 impactParameter[fm]=3.33642 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=2 - Collision 275 projectile=anti_sigma- Ekin[MeV]=21767.4 direction=(0.809729,0.413794,0.416069) material=G4_C - --> #secondaries=19 impactParameter[fm]=0.140668 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=2 - Collision 276 projectile=anti_B0 Ekin[MeV]=27700 direction=(0.63123,0.772957,0.0639295) material=G4_C - --> #secondaries=18 impactParameter[fm]=0.859876 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=10 #NNcollisions=2 - Collision 277 projectile=xi0 Ekin[MeV]=18765.2 direction=(0.260558,0.829746,0.49359) material=G4_He - --> #secondaries=9 impactParameter[fm]=0.959815 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 278 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=19105.5 direction=(0.392846,0.261697,0.881582) material=G4_Ar - --> #secondaries=53 impactParameter[fm]=0.312688 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=5 - Collision 279 projectile=anti_triton Ekin[MeV]=10921 direction=(0.891701,0.329339,0.310492) material=G4_He - --> #secondaries=9 impactParameter[fm]=2.67471 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 280 projectile=anti_hyperH4 Ekin[MeV]=11691.8 direction=(0.755044,0.513318,0.407937) material=G4_W - --> #secondaries=137 impactParameter[fm]=1.65487 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=5 - Collision 281 projectile=kaon0S Ekin[MeV]=5991.97 direction=(0.00809043,0.806969,0.590539) material=G4_W - --> #secondaries=56 impactParameter[fm]=1.61238 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=178 #NNcollisions=3 - Collision 282 projectile=anti_hyperHe5 Ekin[MeV]=28352.8 direction=(0.653625,0.721165,0.229554) material=G4_C - --> #secondaries=32 impactParameter[fm]=0.772083 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=9 #NNcollisions=4 - Collision 283 projectile=D0 Ekin[MeV]=4688.1 direction=(0.705384,0.663708,0.248848) material=G4_He - --> #secondaries=7 impactParameter[fm]=0.536232 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=2 - Collision 284 projectile=xi_b- Ekin[MeV]=2328.04 direction=(0.542039,0.706305,0.455331) material=G4_H - --> #secondaries=2 impactParameter[fm]=0.581691 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 285 projectile=anti_omega_c0 Ekin[MeV]=24001.5 direction=(0.756905,0.387799,0.52603) material=G4_W - --> #secondaries=72 impactParameter[fm]=1.86901 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=2 - Collision 286 projectile=anti_triton Ekin[MeV]=16750.7 direction=(0.462259,0.601774,0.651295) material=G4_Fe - --> #secondaries=32 impactParameter[fm]=4.72115 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=55 #NNcollisions=3 - Collision 287 projectile=anti_hyperH4 Ekin[MeV]=1062.16 direction=(0.208887,0.899627,0.383455) material=G4_Ar - --> #secondaries=12 impactParameter[fm]=7.21142 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=40 #NNcollisions=1 - Collision 288 projectile=anti_B0 Ekin[MeV]=16736.4 direction=(0.767525,0.541677,0.34277) material=G4_C - --> #secondaries=12 impactParameter[fm]=2.17608 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 289 projectile=kaon+ Ekin[MeV]=6421.91 direction=(0.00734305,0.0725778,0.997336) material=G4_Be - --> #secondaries=6 impactParameter[fm]=2.68329 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 290 projectile=anti_xi_b0 Ekin[MeV]=21213.2 direction=(0.641007,0.661873,0.388631) material=G4_He - --> #secondaries=4 impactParameter[fm]=1.02925 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 291 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=2730.87 direction=(0.260448,0.017518,0.965329) material=G4_He - --> #secondaries=18 impactParameter[fm]=0.339529 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=3 - Collision 292 projectile=Ds- Ekin[MeV]=27232.3 direction=(0.646358,0.667108,0.370389) material=G4_W - --> #secondaries=34 impactParameter[fm]=5.88371 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=185 #NNcollisions=1 - Collision 293 projectile=D- Ekin[MeV]=15191.5 direction=(0.482717,0.464336,0.742547) material=G4_W - --> #secondaries=43 impactParameter[fm]=1.90331 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=180 #NNcollisions=2 - Collision 294 projectile=hyperalpha Ekin[MeV]=19862.3 direction=(0.736139,0.655337,0.169211) material=G4_Si - --> #secondaries=8 impactParameter[fm]=4.66776 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 295 projectile=anti_xi_b0 Ekin[MeV]=11877.7 direction=(0.605169,0.586939,0.537841) material=G4_Al - --> #secondaries=10 impactParameter[fm]=3.03432 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 296 projectile=anti_xi_b0 Ekin[MeV]=18401.1 direction=(0.919691,0.319137,0.228736) material=G4_C - --> #secondaries=11 impactParameter[fm]=3.34484 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 297 projectile=anti_He3 Ekin[MeV]=7433 direction=(0.388686,0.645162,0.657791) material=G4_Cu - --> #secondaries=60 impactParameter[fm]=1.15366 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=3 - Collision 298 projectile=kaon- Ekin[MeV]=27184 direction=(0.221952,0.555275,0.801503) material=G4_Pb - --> #secondaries=39 impactParameter[fm]=6.59834 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 - Collision 299 projectile=anti_xi_b0 Ekin[MeV]=24881.6 direction=(0.570831,0.526778,0.629807) material=G4_Be - --> #secondaries=7 impactParameter[fm]=1.73748 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 300 projectile=kaon0S Ekin[MeV]=26085.6 direction=(0.399676,0.506972,0.7637) material=G4_Cu - --> #secondaries=27 impactParameter[fm]=2.44211 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 60 projectile=anti_hyperHe5 Ekin[MeV]=16883.7 direction=(0.0125615,0.824419,0.565841) material=G4_Ar + --> #secondaries=63 impactParameter[fm]=1.15145 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=36 #NNcollisions=7 + Collision 61 projectile=anti_lambda Ekin[MeV]=26261.8 direction=(0.199366,0.468766,0.86053) material=G4_C + --> #secondaries=8 impactParameter[fm]=2.83021 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 62 projectile=Ds+ Ekin[MeV]=26283.1 direction=(0.252404,0.688467,0.679931) material=G4_C + --> #secondaries=9 impactParameter[fm]=2.03335 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 63 projectile=anti_sigma+ Ekin[MeV]=3239.69 direction=(0.951627,0.166843,0.258011) material=G4_He + --> #secondaries=7 impactParameter[fm]=2.15272 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 64 projectile=anti_omega_b- Ekin[MeV]=14273.5 direction=(0.916089,0.232966,0.326355) material=G4_Fe + --> #secondaries=19 impactParameter[fm]=3.15785 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=2 + Collision 65 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=4535.96 direction=(0.490537,0.509068,0.707265) material=G4_Pb + --> #secondaries=73 impactParameter[fm]=4.82611 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=4 + Collision 66 projectile=anti_xi_c+ Ekin[MeV]=16125.2 direction=(0.486174,0.74112,0.463007) material=G4_Al + --> #secondaries=13 impactParameter[fm]=1.73647 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 67 projectile=xi_c+ Ekin[MeV]=5019.42 direction=(0.531008,0.84655,0.0371911) material=G4_Ar + --> #secondaries=23 impactParameter[fm]=0.547482 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=1 + Collision 68 projectile=anti_xi_c+ Ekin[MeV]=4562.95 direction=(0.634804,0.767887,0.08587) material=G4_W + --> #secondaries=20 impactParameter[fm]=4.56719 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=2 + Collision 69 projectile=anti_hypertriton Ekin[MeV]=28215.8 direction=(0.840816,0.171303,0.513501) material=G4_Cu + --> #secondaries=29 impactParameter[fm]=5.63401 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=61 #NNcollisions=3 + Collision 70 projectile=hyperHe5 Ekin[MeV]=5073.59 direction=(0.151042,0.76535,0.62564) material=G4_Al + --> #secondaries=29 impactParameter[fm]=1.72337 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=15 #NNcollisions=1 + Collision 71 projectile=xi_c0 Ekin[MeV]=26671.5 direction=(0.710585,0.527846,0.465239) material=G4_Al + --> #secondaries=7 impactParameter[fm]=4.83195 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 + Collision 72 projectile=xi_b- Ekin[MeV]=17630.8 direction=(0.78036,0.138803,0.609731) material=G4_Si + --> #secondaries=16 impactParameter[fm]=1.00528 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 73 projectile=lambda_b Ekin[MeV]=9217.98 direction=(0.132456,0.880163,0.455816) material=G4_H + --> #secondaries=3 impactParameter[fm]=0.827371 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 74 projectile=anti_omega- Ekin[MeV]=19441.5 direction=(0.644164,0.167813,0.746252) material=G4_Ar + --> #secondaries=19 impactParameter[fm]=3.6903 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 75 projectile=anti_hyperalpha Ekin[MeV]=4500.88 direction=(0.565719,0.794465,0.220878) material=G4_C + --> #secondaries=18 impactParameter[fm]=1.96103 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=3 + Collision 76 projectile=anti_lambda_b Ekin[MeV]=10364.2 direction=(0.342995,0.498468,0.796168) material=G4_H + --> #secondaries=3 impactParameter[fm]=0.530433 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 77 projectile=anti_neutron Ekin[MeV]=9136.11 direction=(0.53515,0.496556,0.683408) material=G4_Ar + --> #secondaries=13 impactParameter[fm]=4.36291 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 78 projectile=proton Ekin[MeV]=11120.6 direction=(0.623942,0.482247,0.614926) material=G4_He + --> #secondaries=12 impactParameter[fm]=2.28534 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 79 projectile=anti_xi_c+ Ekin[MeV]=26883.3 direction=(0.952676,0.0734087,0.294992) material=G4_Ar + --> #secondaries=18 impactParameter[fm]=3.88848 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 80 projectile=alpha Ekin[MeV]=11235.6 direction=(0.686643,0.168736,0.707142) material=G4_Cu + --> #secondaries=29 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 81 projectile=D+ Ekin[MeV]=21379.3 direction=(0.836883,0.0511428,0.544987) material=G4_He + --> #secondaries=7 impactParameter[fm]=2.94165 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 82 projectile=hyperHe5 Ekin[MeV]=6578.33 direction=(0.0675907,0.713825,0.697054) material=G4_Pb + --> #secondaries=62 impactParameter[fm]=6.13362 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=192 #NNcollisions=2 + Collision 83 projectile=B0 Ekin[MeV]=1618.81 direction=(0.408405,0.871813,0.270457) material=G4_He + --> #secondaries=4 impactParameter[fm]=1.71591 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 84 projectile=omega_c0 Ekin[MeV]=18661.8 direction=(0.407998,0.539399,0.736605) material=G4_Al + --> #secondaries=15 impactParameter[fm]=3.81236 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 85 projectile=xi_b0 Ekin[MeV]=22434.2 direction=(0.249027,0.226804,0.941566) material=G4_Cu + --> #secondaries=57 impactParameter[fm]=1.61157 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=58 #NNcollisions=1 + Collision 86 projectile=anti_hyperHe5 Ekin[MeV]=26482.8 direction=(0.692794,0.2446,0.678386) material=G4_Be + --> #secondaries=11 impactParameter[fm]=3.7449 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 87 projectile=anti_D0 Ekin[MeV]=11758 direction=(0.141562,0.903706,0.404075) material=G4_Be + --> #secondaries=8 impactParameter[fm]=1.80572 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 88 projectile=anti_doublehyperH4 Ekin[MeV]=16964.7 direction=(0.530073,0.384344,0.755846) material=G4_Al + --> #secondaries=50 impactParameter[fm]=0.934423 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=4 + Collision 89 projectile=Ds- Ekin[MeV]=7623.25 direction=(0.672891,0.73894,0.0344247) material=G4_Cu + --> #secondaries=10 impactParameter[fm]=5.32359 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 90 projectile=anti_omega- Ekin[MeV]=25380.1 direction=(0.758538,0.651198,0.0236722) material=G4_Pb + --> #secondaries=16 impactParameter[fm]=6.42736 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=1 + Collision 91 projectile=anti_xi_b0 Ekin[MeV]=14039.3 direction=(0.077878,0.942709,0.324398) material=G4_W + --> #secondaries=20 impactParameter[fm]=7.01427 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=185 #NNcollisions=1 + Collision 92 projectile=anti_lambda_b Ekin[MeV]=14008.8 direction=(0.735583,0.577866,0.353536) material=G4_Cu + --> #secondaries=12 impactParameter[fm]=5.90016 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 93 projectile=hyperH4 Ekin[MeV]=1671.7 direction=(0.799042,0.145696,0.583356) material=G4_C + --> #secondaries=12 impactParameter[fm]=1.87161 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 94 projectile=anti_sigma+ Ekin[MeV]=5010.47 direction=(0.270045,0.960291,0.0701215) material=G4_Fe + --> #secondaries=32 impactParameter[fm]=1.37511 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 95 projectile=Ds+ Ekin[MeV]=22489.7 direction=(0.262261,0.698731,0.665578) material=G4_Fe + --> #secondaries=23 impactParameter[fm]=1.58837 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 96 projectile=xi- Ekin[MeV]=28678.5 direction=(0.855103,0.38888,0.342885) material=G4_H + --> #secondaries=4 impactParameter[fm]=1.03782 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 97 projectile=anti_lambda_c+ Ekin[MeV]=20603.7 direction=(0.257496,0.0347724,0.965653) material=G4_Ar + --> #secondaries=18 impactParameter[fm]=5.02611 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 98 projectile=xi- Ekin[MeV]=19210.5 direction=(0.762051,0.396401,0.512) material=G4_Si + --> #secondaries=25 impactParameter[fm]=2.42186 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 99 projectile=xi_c0 Ekin[MeV]=25184.1 direction=(0.528845,0.697607,0.483392) material=G4_He + --> #secondaries=5 impactParameter[fm]=1.67128 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 100 projectile=proton Ekin[MeV]=25225 direction=(0.688328,0.656666,0.308211) material=G4_Al + --> #secondaries=20 impactParameter[fm]=3.52928 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 List of produced secondaries: - j=0 pi- p=(489.51,944.301,1189.381601.69) MeV - j=1 proton p=(504.441,49.9228,418.5561145.64) MeV - j=2 pi- p=(-72.2409,217.062,362.812451.051) MeV - j=3 neutron p=(218.634,-27.9608,131.693974.017) MeV - j=4 proton p=(-81.218,-177.844,-150.693970.2) MeV - j=5 proton p=(268.628,29.6338,-40.1395977.243) MeV - j=6 pi0 p=(6013.25,7308.63,11207.214669.5) MeV - j=7 kaon+ p=(3318.88,4358.14,6467.318489.88) MeV - j=8 proton p=(235.14,-342.735,10.2111026.26) MeV - j=9 deuteron p=(328.108,-377.552,-833.8942112.7) MeV - j=10 neutron p=(53.1087,423.495,427.1741116.88) MeV - j=11 neutron p=(-52.5302,-90.4818,-538.7541088.11) MeV - j=12 proton p=(68.4405,4.50883,186.991959.179) MeV - j=13 proton p=(-137.182,113.744,39.2279955.85) MeV - j=14 deuteron p=(59.6156,-174.055,52.50631885.35) MeV - j=15 neutron p=(68.1892,28.0879,120.775950.162) MeV - j=16 deuteron p=(-245.985,18.5296,-62.65531892.8) MeV - j=17 proton p=(159.531,77.6753,39.7282955.728) MeV - j=18 neutron p=(49.9063,172.628,65.3215958.823) MeV - j=19 deuteron p=(109.989,77.652,5.740681880.45) MeV - j=20 alpha p=(-75.4776,421.749,-6.766053751.93) MeV - j=21 neutron p=(-6.64896,-63.3641,78.2827944.971) MeV - j=22 proton p=(108.485,86.9067,-33.4544949.102) MeV - j=23 neutron p=(7.28003,49.0861,-16.0861941.012) MeV - j=24 neutron p=(-14.8612,-7.10464,25.3454940.051) MeV - j=25 gamma p=(-0.406915,1.52871,-1.14571.95324) MeV - j=26 S35 p=(-751.809,352.355,1153.3532596.3) MeV - Collision 301 projectile=B- Ekin[MeV]=8147.14 direction=(0.506241,0.545584,0.667876) material=G4_Fe - --> #secondaries=10 impactParameter[fm]=2.73384 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=1 - Collision 302 projectile=lambda_c+ Ekin[MeV]=25837.7 direction=(0.0993966,0.776116,0.622707) material=G4_Si - --> #secondaries=16 impactParameter[fm]=2.91016 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 303 projectile=anti_sigma- Ekin[MeV]=19929 direction=(0.959848,0.269108,0.0791999) material=G4_C - --> #secondaries=16 impactParameter[fm]=0.925068 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 304 projectile=anti_deuteron Ekin[MeV]=18097.9 direction=(0.618445,0.189188,0.762715) material=G4_C - --> #secondaries=16 impactParameter[fm]=1.64785 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=12 #NNcollisions=3 - Collision 305 projectile=anti_hypertriton Ekin[MeV]=7709.8 direction=(0.000396999,0.167756,0.985828) material=G4_Ar - --> #secondaries=18 impactParameter[fm]=3.16124 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=39 #NNcollisions=2 - Collision 306 projectile=B- Ekin[MeV]=19185.3 direction=(0.495621,0.327665,0.80436) material=G4_Fe - --> #secondaries=6 impactParameter[fm]=4.31649 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 307 projectile=Bc+ Ekin[MeV]=7698.44 direction=(0.175449,0.984081,0.0283177) material=G4_Ar - --> #secondaries=5 impactParameter[fm]=2.75722 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=0 - Collision 308 projectile=anti_sigma- Ekin[MeV]=4020.72 direction=(0.18835,0.979492,0.0715493) material=G4_He - --> #secondaries=4 impactParameter[fm]=1.00818 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 309 projectile=anti_triton Ekin[MeV]=11091.8 direction=(0.422457,0.338749,0.840701) material=G4_W - --> #secondaries=74 impactParameter[fm]=5.73015 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=177 #NNcollisions=4 - Collision 310 projectile=Ds+ Ekin[MeV]=16561.7 direction=(0.541302,0.597508,0.591588) material=G4_Be - --> #secondaries=6 impactParameter[fm]=2.59642 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 311 projectile=anti_He3 Ekin[MeV]=1622.03 direction=(0.779663,0.258145,0.570514) material=G4_He - --> #secondaries=14 impactParameter[fm]=1.66119 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=2 #NNcollisions=2 - Collision 312 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=21698.7 direction=(0.0503322,0.334501,0.94105) material=G4_C - --> #secondaries=15 impactParameter[fm]=3.10032 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=12 #NNcollisions=1 - Collision 313 projectile=B- Ekin[MeV]=3327.69 direction=(0.474117,0.504219,0.721787) material=G4_H - --> #secondaries=4 impactParameter[fm]=2.78808 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 314 projectile=xi_b0 Ekin[MeV]=4371.83 direction=(0.14877,0.748952,0.645708) material=G4_W - --> #secondaries=17 impactParameter[fm]=7.02266 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=185 #NNcollisions=0 - Collision 315 projectile=anti_lambda_c+ Ekin[MeV]=10479 direction=(0.597949,0.639592,0.483094) material=G4_Fe - --> #secondaries=43 impactParameter[fm]=0.323702 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=51 #NNcollisions=4 - Collision 316 projectile=anti_xi_b0 Ekin[MeV]=1729.28 direction=(0.129186,0.851983,0.507381) material=G4_He - --> #secondaries=4 impactParameter[fm]=2.47785 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 317 projectile=anti_hyperH4 Ekin[MeV]=17371.5 direction=(0.286606,0.417134,0.862471) material=G4_Cu - --> #secondaries=15 impactParameter[fm]=6.50145 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=64 #NNcollisions=1 - Collision 318 projectile=doublehyperdoubleneutron Ekin[MeV]=6168.46 direction=(0.721228,0.686601,0.0916986) material=G4_Cu - --> #secondaries=39 impactParameter[fm]=2.42167 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=51 #NNcollisions=2 - Collision 319 projectile=anti_hyperH4 Ekin[MeV]=6819.18 direction=(0.181657,0.0574413,0.981683) material=G4_He - --> #secondaries=11 impactParameter[fm]=2.13046 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=4 #NNcollisions=2 - Collision 320 projectile=anti_hyperH4 Ekin[MeV]=15691.9 direction=(0.305131,0.932916,0.191214) material=G4_Cu - --> #secondaries=61 impactParameter[fm]=1.28773 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=58 #NNcollisions=5 - Collision 321 projectile=anti_sigma+ Ekin[MeV]=23097.7 direction=(0.157993,0.732044,0.662683) material=G4_He - --> #secondaries=9 impactParameter[fm]=1.1622 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=4 #NNcollisions=1 - Collision 322 projectile=alpha Ekin[MeV]=9684.99 direction=(0.860136,0.386578,0.332751) material=G4_He - --> #secondaries=8 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 323 projectile=hyperalpha Ekin[MeV]=9630.29 direction=(0.0791856,0.0952557,0.992298) material=G4_Al - --> #secondaries=32 impactParameter[fm]=1.46911 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=16 #NNcollisions=3 - Collision 324 projectile=anti_lambda_b Ekin[MeV]=2687.16 direction=(0.301305,0.743562,0.596935) material=G4_Ar - --> #secondaries=13 impactParameter[fm]=4.14308 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=1 - Collision 325 projectile=xi_c0 Ekin[MeV]=22851.8 direction=(0.581512,0.700529,0.413647) material=G4_Ar - --> #secondaries=27 impactParameter[fm]=1.43936 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 - Collision 326 projectile=anti_xi_c+ Ekin[MeV]=12850.2 direction=(0.68793,0.204538,0.696359) material=G4_Pb - --> #secondaries=40 impactParameter[fm]=6.07893 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=2 - Collision 327 projectile=xi_b0 Ekin[MeV]=16918.9 direction=(0.757381,0.62103,0.201733) material=G4_Al - --> #secondaries=21 impactParameter[fm]=1.07657 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=1 - Collision 328 projectile=xi_b0 Ekin[MeV]=10181.1 direction=(0.846419,0.268557,0.459839) material=G4_C - --> #secondaries=10 impactParameter[fm]=2.02669 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=1 - Collision 329 projectile=lambda_b Ekin[MeV]=15263.3 direction=(0.544041,0.484527,0.68502) material=G4_Pb - --> #secondaries=43 impactParameter[fm]=5.23088 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 - Collision 330 projectile=Ds+ Ekin[MeV]=9328.16 direction=(0.585598,0.776818,0.23158) material=G4_Fe - --> #secondaries=12 impactParameter[fm]=1.11255 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 331 projectile=anti_xi_c0 Ekin[MeV]=13433.6 direction=(0.420898,0.593788,0.685755) material=G4_Cu - --> #secondaries=37 impactParameter[fm]=3.5953 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=2 - Collision 332 projectile=xi_b0 Ekin[MeV]=26069.9 direction=(0.647786,0.24993,0.719659) material=G4_Al - --> #secondaries=22 impactParameter[fm]=1.59425 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=1 - Collision 333 projectile=anti_xi_b- Ekin[MeV]=5442.31 direction=(0.550612,0.471278,0.689001) material=G4_Pb - --> #secondaries=25 impactParameter[fm]=4.32364 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=2 - Collision 334 projectile=Bs0 Ekin[MeV]=8614.45 direction=(0.578761,0.418277,0.700057) material=G4_Pb - --> #secondaries=24 impactParameter[fm]=4.00494 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=204 #NNcollisions=1 - Collision 335 projectile=alpha Ekin[MeV]=11596.4 direction=(0.546593,0.471456,0.692073) material=G4_Pb - --> #secondaries=94 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 336 projectile=D0 Ekin[MeV]=25413.6 direction=(0.598578,0.646937,0.472415) material=G4_Cu - --> #secondaries=9 impactParameter[fm]=4.7413 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=64 #NNcollisions=1 - Collision 337 projectile=xi0 Ekin[MeV]=13235.7 direction=(0.572804,0.337658,0.746915) material=G4_Pb - --> #secondaries=85 impactParameter[fm]=0.827681 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=199 #NNcollisions=5 - Collision 338 projectile=xi_c0 Ekin[MeV]=14872.2 direction=(0.699519,0.698868,0.149185) material=G4_Al - --> #secondaries=8 impactParameter[fm]=3.45718 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 339 projectile=triton Ekin[MeV]=14602 direction=(0.587175,0.651945,0.479784) material=G4_C - --> #secondaries=13 impactParameter[fm]=2.82197 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 340 projectile=anti_hypertriton Ekin[MeV]=15482.2 direction=(0.665455,0.351651,0.658415) material=G4_W - --> #secondaries=91 impactParameter[fm]=3.13749 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=5 - Collision 341 projectile=Ds+ Ekin[MeV]=16341.2 direction=(0.111728,0.820671,0.560371) material=G4_W - --> #secondaries=26 impactParameter[fm]=5.43845 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=183 #NNcollisions=1 - Collision 342 projectile=deuteron Ekin[MeV]=16799.2 direction=(0.718543,0.259934,0.645082) material=G4_H - --> #secondaries=5 impactParameter[fm]=2.26408 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 343 projectile=anti_hyperalpha Ekin[MeV]=18429.2 direction=(0.70198,0.0827283,0.707375) material=G4_Al - --> #secondaries=35 impactParameter[fm]=0.823429 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=21 #NNcollisions=5 - Collision 344 projectile=triton Ekin[MeV]=6838.93 direction=(0.230761,0.138579,0.963092) material=G4_Be + j=0 pi0 p=(1071.6,1050.77,620.3891629.59) MeV + j=1 pi+ p=(1067.76,1330.98,970.8771968.17) MeV + j=2 neutron p=(624.656,680.844,-170.5291328.76) MeV + j=3 eta_prime p=(2961.35,2124.41,1324.93994.43) MeV + j=4 pi+ p=(215.479,217.772,-29.1479337.913) MeV + j=5 pi- p=(595.31,490.061,298.092838.387) MeV + j=6 pi- p=(2214.54,2139.73,942.1153223.3) MeV + j=7 proton p=(4545.42,4424.57,1889.336684.88) MeV + j=8 pi- p=(1511.48,1471.79,753.0572244.4) MeV + j=9 pi0 p=(2494.41,2535.02,1307.653791.65) MeV + j=10 pi+ p=(694.863,635.728,151.502964.064) MeV + j=11 O18 p=(-141.287,269.453,195.58116765.9) MeV + j=12 deuteron p=(-12.8592,73.6886,-196.9431887.41) MeV + j=13 alpha p=(177.565,-276.199,49.3873742.14) MeV + j=14 proton p=(-39.8444,-49.2657,4.16446940.418) MeV + j=15 proton p=(15.6673,52.6676,-52.153941.325) MeV + j=16 gamma p=(0.944896,-1.59372,1.478052.3701) MeV + j=17 gamma p=(-0.75253,0.0162851,-0.3359430.824272) MeV + j=18 gamma p=(-1.06114,-1.10163,-0.5797221.63575) MeV + j=19 gamma p=(1.93931,-0.0139675,-0.2952721.96171) MeV + Collision 101 projectile=anti_hyperH4 Ekin[MeV]=2993.23 direction=(0.365754,0.754745,0.544596) material=G4_W + --> #secondaries=45 impactParameter[fm]=7.66467 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=185 #NNcollisions=3 + Collision 102 projectile=Bs0 Ekin[MeV]=12773.7 direction=(0.32324,0.196055,0.925785) material=G4_Be + --> #secondaries=8 impactParameter[fm]=1.5701 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 103 projectile=Bc- Ekin[MeV]=4582.14 direction=(0.784724,0.586016,0.201974) material=G4_Cu + --> #secondaries=13 impactParameter[fm]=3.62575 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=63 #NNcollisions=2 + Collision 104 projectile=anti_lambda Ekin[MeV]=9344.88 direction=(0.00503763,0.565914,0.824449) material=G4_Fe + --> #secondaries=17 impactParameter[fm]=4.92582 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 105 projectile=omega- Ekin[MeV]=18178.6 direction=(0.81871,0.295151,0.492543) material=G4_Ar + --> #secondaries=8 impactParameter[fm]=5.58175 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 106 projectile=anti_hyperH4 Ekin[MeV]=21031.9 direction=(0.608022,0.653811,0.450378) material=G4_He + --> #secondaries=11 impactParameter[fm]=4.09896 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=4 #NNcollisions=1 + Collision 107 projectile=hyperalpha Ekin[MeV]=13648.3 direction=(0.0679706,0.624469,0.778087) material=G4_Cu + --> #secondaries=13 impactParameter[fm]=6.87297 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=62 #NNcollisions=0 + Collision 108 projectile=Bc- Ekin[MeV]=23993.1 direction=(0.695768,0.039653,0.717172) material=G4_Cu + --> #secondaries=21 impactParameter[fm]=4.07985 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 109 projectile=anti_Bs0 Ekin[MeV]=12657.7 direction=(0.419752,0.75652,0.501483) material=G4_C + --> #secondaries=8 impactParameter[fm]=2.50906 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 110 projectile=omega- Ekin[MeV]=25607.5 direction=(0.238281,0.83676,0.493006) material=G4_W + --> #secondaries=36 impactParameter[fm]=5.6671 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=1 + Collision 111 projectile=anti_sigma+ Ekin[MeV]=26804.7 direction=(0.609994,0.300293,0.733302) material=G4_Ar + --> #secondaries=45 impactParameter[fm]=2.86395 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=34 #NNcollisions=3 + Collision 112 projectile=kaon0L Ekin[MeV]=6520.44 direction=(0.943656,0.294863,0.150232) material=G4_Si + --> #secondaries=15 impactParameter[fm]=2.26878 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 113 projectile=anti_sigma+ Ekin[MeV]=22241.4 direction=(0.873783,0.424846,0.236662) material=G4_Al + --> #secondaries=24 impactParameter[fm]=3.5833 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 114 projectile=triton Ekin[MeV]=25676.9 direction=(0.341084,0.737506,0.582878) material=G4_Al + --> #secondaries=29 impactParameter[fm]=2.86797 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=23 #NNcollisions=4 + Collision 115 projectile=omega- Ekin[MeV]=29833.9 direction=(0.27128,0.0874789,0.958517) material=G4_He + --> #secondaries=8 impactParameter[fm]=0.152427 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 + Collision 116 projectile=anti_omega_c0 Ekin[MeV]=24430.7 direction=(0.699714,0.429794,0.570682) material=G4_C + --> #secondaries=17 impactParameter[fm]=0.831264 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 + Collision 117 projectile=anti_Bs0 Ekin[MeV]=21599.6 direction=(0.48066,0.0721061,0.873938) material=G4_H + --> #secondaries=4 impactParameter[fm]=0.787841 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 118 projectile=B- Ekin[MeV]=24774.3 direction=(0.971206,0.129766,0.199798) material=G4_Cu + --> #secondaries=23 impactParameter[fm]=1.90924 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=63 #NNcollisions=2 + Collision 119 projectile=kaon0S Ekin[MeV]=26852.7 direction=(0.157059,0.348868,0.923917) material=G4_Fe + --> #secondaries=29 impactParameter[fm]=0.6911 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 120 projectile=B+ Ekin[MeV]=9989.6 direction=(0.921969,0.377269,0.0874102) material=G4_Pb + --> #secondaries=45 impactParameter[fm]=5.25743 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=203 #NNcollisions=2 + Collision 121 projectile=xi_b0 Ekin[MeV]=29014.4 direction=(0.613507,0.0387937,0.788736) material=G4_Pb + --> #secondaries=96 impactParameter[fm]=4.13458 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=199 #NNcollisions=3 + Collision 122 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=3577.41 direction=(0.0717377,0.631407,0.772126) material=G4_Al + --> #secondaries=36 impactParameter[fm]=2.17548 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=4 + Collision 123 projectile=anti_doublehyperH4 Ekin[MeV]=2921.52 direction=(0.590634,0.758435,0.275551) material=G4_Al + --> #secondaries=24 impactParameter[fm]=4.20047 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=25 #NNcollisions=3 + Collision 124 projectile=doublehyperdoubleneutron Ekin[MeV]=12423.8 direction=(0.814999,0.544239,0.198946) material=G4_Pb + --> #secondaries=69 impactParameter[fm]=5.46938 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=200 #NNcollisions=4 + Collision 125 projectile=D+ Ekin[MeV]=8288.42 direction=(0.615393,0.0780075,0.784351) material=G4_Si + --> #secondaries=21 impactParameter[fm]=1.03803 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=3 + Collision 126 projectile=B- Ekin[MeV]=12661.2 direction=(0.493372,0.41222,0.765937) material=G4_Be + --> #secondaries=6 impactParameter[fm]=0.781064 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 127 projectile=anti_hyperHe5 Ekin[MeV]=4462.53 direction=(0.821428,0.411517,0.394853) material=G4_Ar + --> #secondaries=14 impactParameter[fm]=4.0413 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 128 projectile=anti_hypertriton Ekin[MeV]=15667.5 direction=(0.131753,0.948773,0.287179) material=G4_Ar + --> #secondaries=28 impactParameter[fm]=4.97231 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=3 + Collision 129 projectile=anti_hyperH4 Ekin[MeV]=12994.9 direction=(0.64676,0.393903,0.653102) material=G4_Si + --> #secondaries=13 impactParameter[fm]=5.05126 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 130 projectile=xi_b- Ekin[MeV]=28890.7 direction=(0.213601,0.580092,0.786046) material=G4_He + --> #secondaries=4 impactParameter[fm]=1.40698 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 131 projectile=Ds+ Ekin[MeV]=14222.3 direction=(0.722786,0.470068,0.506574) material=G4_He + --> #secondaries=4 impactParameter[fm]=2.16195 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 132 projectile=lambda_b Ekin[MeV]=8209.58 direction=(0.492461,0.279752,0.824148) material=G4_H + --> #secondaries=2 impactParameter[fm]=0.941112 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 133 projectile=anti_hypertriton Ekin[MeV]=8612.31 direction=(0.466535,0.783153,0.411116) material=G4_He + --> #secondaries=12 impactParameter[fm]=1.64301 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=3 #NNcollisions=2 + Collision 134 projectile=anti_xi_c0 Ekin[MeV]=20393.1 direction=(0.174368,0.644233,0.744687) material=G4_Al + --> #secondaries=12 impactParameter[fm]=2.08006 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 135 projectile=lambda_b Ekin[MeV]=12787 direction=(0.103486,0.80204,0.588237) material=G4_H + --> #secondaries=4 impactParameter[fm]=1.37921 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 136 projectile=triton Ekin[MeV]=15206 direction=(0.86091,0.102746,0.498274) material=G4_Pb + --> #secondaries=109 impactParameter[fm]=2.3565 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=196 #NNcollisions=8 + Collision 137 projectile=omega- Ekin[MeV]=3209.51 direction=(0.680246,0.425133,0.597099) material=G4_Si + --> #secondaries=25 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 138 projectile=proton Ekin[MeV]=25590.7 direction=(0.996565,0.0106308,0.0821341) material=G4_He + --> #secondaries=8 impactParameter[fm]=1.79594 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 139 projectile=lambda_c+ Ekin[MeV]=7870.23 direction=(0.156341,0.366758,0.917086) material=G4_Ar + --> #secondaries=14 impactParameter[fm]=3.23719 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 140 projectile=anti_lambda_c+ Ekin[MeV]=18834.4 direction=(0.62431,0.658975,0.419511) material=G4_C + --> #secondaries=15 impactParameter[fm]=0.350869 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 + Collision 141 projectile=neutron Ekin[MeV]=26503.6 direction=(0.106181,0.976268,0.18875) material=G4_H + --> #secondaries=8 impactParameter[fm]=0.895517 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 142 projectile=anti_sigma- Ekin[MeV]=18685.9 direction=(0.455557,0.454369,0.765517) material=G4_Si + --> #secondaries=18 impactParameter[fm]=3.00934 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 143 projectile=anti_deuteron Ekin[MeV]=1606.94 direction=(0.147131,0.0893919,0.985069) material=G4_Si + --> #secondaries=7 impactParameter[fm]=4.67309 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=28 #NNcollisions=1 + Collision 144 projectile=doublehyperdoubleneutron Ekin[MeV]=11340.5 direction=(0.0336935,0.752519,0.657708) material=G4_W + --> #secondaries=53 impactParameter[fm]=5.93804 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=176 #NNcollisions=3 + Collision 145 projectile=anti_hypertriton Ekin[MeV]=13603.2 direction=(0.0366077,0.731025,0.681368) material=G4_C + --> #secondaries=20 impactParameter[fm]=1.38195 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=3 + Collision 146 projectile=hypertriton Ekin[MeV]=4523.01 direction=(0.63216,0.434031,0.641865) material=G4_W + --> #secondaries=48 impactParameter[fm]=5.58958 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=1 + Collision 147 projectile=kaon- Ekin[MeV]=3992.64 direction=(0.824369,0.518474,0.22716) material=G4_Al + --> #secondaries=11 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 148 projectile=anti_xi_c0 Ekin[MeV]=8175.68 direction=(0.288134,0.475331,0.831287) material=G4_Ar + --> #secondaries=12 impactParameter[fm]=5.0408 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 149 projectile=anti_omega- Ekin[MeV]=21483.3 direction=(0.754936,0.655175,0.0285755) material=G4_Cu + --> #secondaries=55 impactParameter[fm]=0.862514 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=1 + Collision 150 projectile=anti_xi_c+ Ekin[MeV]=18880 direction=(0.265002,0.663431,0.699738) material=G4_C + --> #secondaries=13 impactParameter[fm]=0.303482 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 + Collision 151 projectile=hyperalpha Ekin[MeV]=6567.68 direction=(0.416401,0.0341874,0.908538) material=G4_Al + --> #secondaries=12 impactParameter[fm]=6.32696 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 152 projectile=lambda Ekin[MeV]=25734.9 direction=(0.512773,0.824716,0.238553) material=G4_W + --> #secondaries=23 impactParameter[fm]=5.04242 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=1 + Collision 153 projectile=kaon- Ekin[MeV]=22483.3 direction=(0.989993,0.00471923,0.141036) material=G4_Cu + --> #secondaries=29 impactParameter[fm]=1.90882 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 154 projectile=anti_hypertriton Ekin[MeV]=8374.55 direction=(0.609818,0.60242,0.514988) material=G4_H + --> #secondaries=5 impactParameter[fm]=1.68953 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=1 #NNcollisions=1 + Collision 155 projectile=xi_b- Ekin[MeV]=5528.04 direction=(0.138463,0.782855,0.606601) material=G4_C + --> #secondaries=7 impactParameter[fm]=2.13335 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 156 projectile=Ds- Ekin[MeV]=2712 direction=(0.258589,0.649257,0.71526) material=G4_Al + --> #secondaries=10 impactParameter[fm]=2.98278 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 157 projectile=neutron Ekin[MeV]=7438.81 direction=(0.481231,0.32669,0.813443) material=G4_Si + --> #secondaries=21 impactParameter[fm]=1.95591 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=0 + Collision 158 projectile=anti_xi_c+ Ekin[MeV]=27277.9 direction=(0.0875386,0.492198,0.866071) material=G4_Ar + --> #secondaries=21 impactParameter[fm]=2.47914 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 159 projectile=xi0 Ekin[MeV]=24349.9 direction=(0.290921,0.351062,0.890011) material=G4_C + --> #secondaries=10 impactParameter[fm]=0.649222 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=0 + Collision 160 projectile=hyperHe5 Ekin[MeV]=16377.3 direction=(0.621202,0.108407,0.776116) material=G4_Cu + --> #secondaries=65 impactParameter[fm]=1.42171 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=48 #NNcollisions=5 + Collision 161 projectile=Ds+ Ekin[MeV]=14779.4 direction=(0.0161553,0.70444,0.709579) material=G4_Be + --> #secondaries=11 impactParameter[fm]=0.712481 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 162 projectile=hypertriton Ekin[MeV]=3143.21 direction=(0.553894,0.817812,0.156155) material=G4_Pb + --> #secondaries=71 impactParameter[fm]=2.69064 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=188 #NNcollisions=0 + Collision 163 projectile=He3 Ekin[MeV]=13839.3 direction=(0.805691,0.0913957,0.585243) material=G4_Si + --> #secondaries=20 impactParameter[fm]=4.29713 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 164 projectile=anti_hypertriton Ekin[MeV]=23121.1 direction=(0.383304,0.698575,0.604211) material=G4_Fe + --> #secondaries=44 impactParameter[fm]=3.57759 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=4 + Collision 165 projectile=D- Ekin[MeV]=10921.7 direction=(0.574717,0.645725,0.502733) material=G4_W + --> #secondaries=30 impactParameter[fm]=3.44758 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=185 #NNcollisions=1 + Collision 166 projectile=kaon+ Ekin[MeV]=11158.7 direction=(0.0183028,0.632222,0.774571) material=G4_Fe + --> #secondaries=16 impactParameter[fm]=0.607572 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 167 projectile=anti_lambda_b Ekin[MeV]=26525.8 direction=(0.496715,0.592111,0.63457) material=G4_Pb + --> #secondaries=57 impactParameter[fm]=5.09541 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=199 #NNcollisions=5 + Collision 168 projectile=anti_He3 Ekin[MeV]=21430.8 direction=(0.480224,0.422252,0.768823) material=G4_C + --> #secondaries=12 impactParameter[fm]=2.94182 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=12 #NNcollisions=1 + Collision 169 projectile=alpha Ekin[MeV]=23836.4 direction=(0.235279,0.947374,0.217087) material=G4_Cu + --> #secondaries=45 impactParameter[fm]=5.8149 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=59 #NNcollisions=5 + Collision 170 projectile=lambda Ekin[MeV]=4577.81 direction=(0.548556,0.834467,0.0524468) material=G4_Ar + --> #secondaries=5 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 171 projectile=pi- Ekin[MeV]=22009.4 direction=(0.301185,0.216589,0.928642) material=G4_Fe + --> #secondaries=29 impactParameter[fm]=4.5207 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 172 projectile=Ds+ Ekin[MeV]=25439.9 direction=(0.946299,0.104008,0.306106) material=G4_Al + --> #secondaries=21 impactParameter[fm]=2.28478 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 173 projectile=lambda Ekin[MeV]=1326.44 direction=(0.639573,0.26974,0.719852) material=G4_Al + --> #secondaries=13 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 174 projectile=Bc- Ekin[MeV]=3896.54 direction=(0.563016,0.492051,0.664002) material=G4_Pb + --> #secondaries=25 impactParameter[fm]=2.29463 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=0 + Collision 175 projectile=xi_b0 Ekin[MeV]=2407.77 direction=(0.667091,0.228798,0.708972) material=G4_Ar + --> #secondaries=15 impactParameter[fm]=2.69034 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=35 #NNcollisions=2 + Collision 176 projectile=alpha Ekin[MeV]=23723.8 direction=(0.174941,0.972405,0.154351) material=G4_W + --> #secondaries=87 impactParameter[fm]=5.54868 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=177 #NNcollisions=8 + Collision 177 projectile=B+ Ekin[MeV]=26871.5 direction=(0.00201932,0.998715,0.0506313) material=G4_Be + --> #secondaries=7 impactParameter[fm]=1.11438 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 178 projectile=Bc- Ekin[MeV]=12185 direction=(0.414967,0.547092,0.726975) material=G4_C + --> #secondaries=6 impactParameter[fm]=2.0218 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 179 projectile=neutron Ekin[MeV]=14153.6 direction=(0.784478,0.598666,0.161844) material=G4_W + --> #secondaries=71 impactParameter[fm]=3.87771 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=177 #NNcollisions=4 + Collision 180 projectile=anti_deuteron Ekin[MeV]=29386.6 direction=(0.056155,0.606807,0.792863) material=G4_Si + --> #secondaries=18 impactParameter[fm]=3.5764 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 181 projectile=anti_He3 Ekin[MeV]=19952.7 direction=(0.484573,0.8741,0.033734) material=G4_He + --> #secondaries=11 impactParameter[fm]=3.09169 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=4 #NNcollisions=1 + Collision 182 projectile=anti_proton Ekin[MeV]=3218.19 direction=(0.527458,0.41201,0.742992) material=G4_C + --> #secondaries=10 impactParameter[fm]=0.387848 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=12 #NNcollisions=1 + Collision 183 projectile=B0 Ekin[MeV]=22416.8 direction=(0.75488,0.651259,0.0775741) material=G4_Al + --> #secondaries=14 impactParameter[fm]=1.16919 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 184 projectile=He3 Ekin[MeV]=19614 direction=(0.0740241,0.800825,0.594306) material=G4_Pb + --> #secondaries=82 impactParameter[fm]=4.24814 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=198 #NNcollisions=9 + Collision 185 projectile=anti_triton Ekin[MeV]=24792.2 direction=(0.822032,0.553196,0.135045) material=G4_Fe + --> #secondaries=24 impactParameter[fm]=4.17632 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=55 #NNcollisions=2 + Collision 186 projectile=anti_xi_b0 Ekin[MeV]=22325.8 direction=(0.259889,0.188938,0.946974) material=G4_Fe + --> #secondaries=22 impactParameter[fm]=3.07003 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=3 + Collision 187 projectile=omega_b- Ekin[MeV]=11364.4 direction=(0.629757,0.729695,0.266368) material=G4_C + --> #secondaries=4 impactParameter[fm]=3.59666 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 188 projectile=anti_He3 Ekin[MeV]=6513.13 direction=(0.816896,0.0172853,0.576526) material=G4_Al + --> #secondaries=9 impactParameter[fm]=6.09508 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 189 projectile=anti_omega_c0 Ekin[MeV]=20054 direction=(0.528566,0.517345,0.673032) material=G4_H + --> #secondaries=2 impactParameter[fm]=0.820472 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 190 projectile=D- Ekin[MeV]=19675 direction=(0.845034,0.412183,0.340622) material=G4_C + --> #secondaries=12 impactParameter[fm]=1.54412 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 191 projectile=pi- Ekin[MeV]=12087.8 direction=(0.831188,0.51254,0.215475) material=G4_Ar + --> #secondaries=13 impactParameter[fm]=3.49185 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 192 projectile=anti_D0 Ekin[MeV]=16330.9 direction=(0.808333,0.116894,0.577004) material=G4_W + --> #secondaries=76 impactParameter[fm]=2.88682 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=176 #NNcollisions=6 + Collision 193 projectile=anti_hypertriton Ekin[MeV]=13688.6 direction=(0.0045155,0.584681,0.81125) material=G4_He + --> #secondaries=18 impactParameter[fm]=0.47866 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=3 + Collision 194 projectile=lambda_c+ Ekin[MeV]=5477.53 direction=(0.314042,0.932803,0.176796) material=G4_Si + --> #secondaries=10 impactParameter[fm]=2.59005 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 195 projectile=anti_lambda_b Ekin[MeV]=22805.5 direction=(0.234272,0.9439,0.232741) material=G4_Be + --> #secondaries=10 impactParameter[fm]=0.902797 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 + Collision 196 projectile=anti_Bs0 Ekin[MeV]=23256.2 direction=(0.409438,0.648489,0.641734) material=G4_Al + --> #secondaries=15 impactParameter[fm]=0.453878 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 197 projectile=anti_D0 Ekin[MeV]=16563.9 direction=(0.753121,0.281681,0.594529) material=G4_Be + --> #secondaries=7 impactParameter[fm]=1.79964 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 198 projectile=pi- Ekin[MeV]=3970.98 direction=(0.13361,0.388509,0.911707) material=G4_Ar --> #secondaries=8 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 345 projectile=sigma+ Ekin[MeV]=4819.03 direction=(0.336731,0.772751,0.538023) material=G4_He - --> #secondaries=4 impactParameter[fm]=1.60298 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 346 projectile=D+ Ekin[MeV]=13650 direction=(0.42609,0.904401,0.022484) material=G4_Fe - --> #secondaries=16 impactParameter[fm]=3.09857 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=0 - Collision 347 projectile=omega- Ekin[MeV]=24145.4 direction=(0.336973,0.21884,0.915728) material=G4_Pb - --> #secondaries=34 impactParameter[fm]=6.10515 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=2 - Collision 348 projectile=hyperHe5 Ekin[MeV]=14671.3 direction=(0.670437,0.283565,0.685642) material=G4_H - --> #secondaries=3 impactParameter[fm]=2.83117 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=0 #NNcollisions=0 - Collision 349 projectile=doublehyperH4 Ekin[MeV]=9259.92 direction=(0.753172,0.481271,0.448454) material=G4_C - --> #secondaries=15 impactParameter[fm]=0.528707 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=0 - Collision 350 projectile=anti_omega- Ekin[MeV]=19202.8 direction=(0.899572,0.0238251,0.436122) material=G4_H - --> #secondaries=3 impactParameter[fm]=0.0687334 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 351 projectile=Bc+ Ekin[MeV]=15504.2 direction=(0.219956,0.761952,0.609138) material=G4_Al - --> #secondaries=10 impactParameter[fm]=2.64131 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 352 projectile=anti_B0 Ekin[MeV]=15932.7 direction=(0.890488,0.451412,0.0570811) material=G4_He - --> #secondaries=5 impactParameter[fm]=1.61672 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 353 projectile=He3 Ekin[MeV]=5247.4 direction=(0.406623,0.160009,0.899475) material=G4_Fe - --> #secondaries=23 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 354 projectile=Ds+ Ekin[MeV]=20769.8 direction=(0.506463,0.612208,0.607204) material=G4_C - --> #secondaries=22 impactParameter[fm]=1.58495 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=9 #NNcollisions=3 - Collision 355 projectile=kaon- Ekin[MeV]=27618.2 direction=(0.331177,0.865427,0.375976) material=G4_He - --> #secondaries=13 impactParameter[fm]=1.41729 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=2 #NNcollisions=2 - Collision 356 projectile=kaon+ Ekin[MeV]=20280.6 direction=(0.504597,0.863345,0.00415638) material=G4_Be - --> #secondaries=5 impactParameter[fm]=1.5608 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 357 projectile=anti_sigma+ Ekin[MeV]=27250.1 direction=(0.658059,0.0532171,0.751084) material=G4_C - --> #secondaries=11 impactParameter[fm]=4.80471 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=12 #NNcollisions=1 - Collision 358 projectile=lambda_b Ekin[MeV]=17990.8 direction=(0.320762,0.754913,0.57203) material=G4_W - --> #secondaries=56 impactParameter[fm]=5.37084 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=2 - Collision 359 projectile=anti_xi_c0 Ekin[MeV]=26757.3 direction=(0.459556,0.570001,0.681107) material=G4_He - --> #secondaries=8 impactParameter[fm]=1.37639 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 360 projectile=kaon+ Ekin[MeV]=4970.61 direction=(0.626041,0.747854,0.220878) material=G4_Ar - --> #secondaries=34 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 361 projectile=anti_sigma+ Ekin[MeV]=21793.8 direction=(0.809399,0.230199,0.540261) material=G4_He - --> #secondaries=10 impactParameter[fm]=2.58964 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 362 projectile=xi_c+ Ekin[MeV]=9170.02 direction=(0.30853,0.799377,0.515563) material=G4_W - --> #secondaries=83 impactParameter[fm]=0.667636 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=177 #NNcollisions=4 - Collision 363 projectile=anti_hyperHe5 Ekin[MeV]=15309.8 direction=(0.0409412,0.312762,0.948949) material=G4_Ar - --> #secondaries=9 impactParameter[fm]=6.75461 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 364 projectile=anti_lambda_b Ekin[MeV]=5523.7 direction=(0.528404,0.68227,0.50527) material=G4_C - --> #secondaries=11 impactParameter[fm]=1.31808 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 - Collision 365 projectile=xi- Ekin[MeV]=5056.91 direction=(0.423341,0.488352,0.763083) material=G4_Fe - --> #secondaries=52 impactParameter[fm]=1.38253 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=48 #NNcollisions=2 - Collision 366 projectile=anti_Bs0 Ekin[MeV]=15094.8 direction=(0.709379,0.0312591,0.704134) material=G4_Fe - --> #secondaries=9 impactParameter[fm]=3.7203 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=53 #NNcollisions=1 - Collision 367 projectile=anti_omega_b- Ekin[MeV]=9815.47 direction=(0.448224,0.0431633,0.892878) material=G4_He - --> #secondaries=5 impactParameter[fm]=1.1497 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 - Collision 368 projectile=hypertriton Ekin[MeV]=7561.63 direction=(0.214794,0.647483,0.731183) material=G4_He - --> #secondaries=9 impactParameter[fm]=2.24652 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=1 #NNcollisions=2 - Collision 369 projectile=B0 Ekin[MeV]=29733.2 direction=(0.201547,0.821106,0.534007) material=G4_Si - --> #secondaries=24 impactParameter[fm]=1.4979 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 370 projectile=anti_xi_b- Ekin[MeV]=20690.6 direction=(0.990295,0.129182,0.051261) material=G4_Al - --> #secondaries=12 impactParameter[fm]=4.5263 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 371 projectile=kaon0L Ekin[MeV]=16484.3 direction=(0.705064,0.707009,0.0549853) material=G4_H - --> #secondaries=5 impactParameter[fm]=1.13675 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 372 projectile=anti_omega_b- Ekin[MeV]=16854.2 direction=(0.406147,0.854148,0.324771) material=G4_Be - --> #secondaries=8 impactParameter[fm]=1.1199 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 373 projectile=D+ Ekin[MeV]=26649.1 direction=(0.524036,0.688097,0.501905) material=G4_Ar - --> #secondaries=9 impactParameter[fm]=5.48382 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 374 projectile=anti_Bs0 Ekin[MeV]=22812.2 direction=(0.967608,0.0067009,0.25237) material=G4_Cu - --> #secondaries=11 impactParameter[fm]=2.97702 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 375 projectile=lambda_c+ Ekin[MeV]=17811.3 direction=(0.686942,0.472583,0.552065) material=G4_Ar - --> #secondaries=21 impactParameter[fm]=3.83535 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 - Collision 376 projectile=anti_lambda_b Ekin[MeV]=4401.19 direction=(0.308826,0.217725,0.925863) material=G4_H - --> #secondaries=3 impactParameter[fm]=0.966712 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 377 projectile=omega_c0 Ekin[MeV]=16187.6 direction=(0.774951,0.630948,0.0368056) material=G4_Al - --> #secondaries=10 impactParameter[fm]=3.49959 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 378 projectile=D0 Ekin[MeV]=17625.2 direction=(0.693742,0.720201,0.00574147) material=G4_Ar - --> #secondaries=19 impactParameter[fm]=2.45256 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=1 - Collision 379 projectile=anti_lambda_b Ekin[MeV]=24286.6 direction=(0.349689,0.912994,0.210142) material=G4_C - --> #secondaries=17 impactParameter[fm]=1.19223 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=3 - Collision 380 projectile=anti_deuteron Ekin[MeV]=5335.46 direction=(0.444751,0.824055,0.350898) material=G4_Al - --> #secondaries=25 impactParameter[fm]=3.57329 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 381 projectile=anti_xi- Ekin[MeV]=23105.4 direction=(0.702438,0.707587,0.0768181) material=G4_Si - --> #secondaries=15 impactParameter[fm]=3.629 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 382 projectile=anti_doublehyperH4 Ekin[MeV]=2263.81 direction=(0.273711,0.903059,0.331009) material=G4_Be - --> #secondaries=17 impactParameter[fm]=1.98684 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 383 projectile=anti_lambda_b Ekin[MeV]=22617.4 direction=(0.53392,0.0987772,0.839745) material=G4_Pb - --> #secondaries=44 impactParameter[fm]=6.68631 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=1 - Collision 384 projectile=doublehyperH4 Ekin[MeV]=16528.7 direction=(0.493134,0.77688,0.391505) material=G4_Cu - --> #secondaries=61 impactParameter[fm]=2.11003 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=48 #NNcollisions=7 - Collision 385 projectile=hyperH4 Ekin[MeV]=25659 direction=(0.223781,0.948373,0.224746) material=G4_Al - --> #secondaries=30 impactParameter[fm]=2.97761 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=21 #NNcollisions=5 - Collision 386 projectile=anti_hyperH4 Ekin[MeV]=26655.5 direction=(0.229419,0.771209,0.593804) material=G4_Si - --> #secondaries=12 impactParameter[fm]=5.7649 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 387 projectile=anti_sigma+ Ekin[MeV]=21450.6 direction=(0.803527,0.160031,0.573354) material=G4_C - --> #secondaries=24 impactParameter[fm]=1.17267 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=4 - Collision 388 projectile=B0 Ekin[MeV]=28246.7 direction=(0.675219,0.487503,0.553552) material=G4_Cu - --> #secondaries=12 impactParameter[fm]=1.59526 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=63 #NNcollisions=2 - Collision 389 projectile=doublehyperH4 Ekin[MeV]=20304.8 direction=(0.543051,0.833525,0.101641) material=G4_H - --> #secondaries=7 impactParameter[fm]=1.17613 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 390 projectile=anti_omega_c0 Ekin[MeV]=27968.9 direction=(0.00503049,0.947165,0.320708) material=G4_W - --> #secondaries=52 impactParameter[fm]=5.20254 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=4 - Collision 391 projectile=kaon- Ekin[MeV]=23035 direction=(0.845404,0.500943,0.185333) material=G4_C - --> #secondaries=11 impactParameter[fm]=2.568 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 392 projectile=proton Ekin[MeV]=13512.1 direction=(0.610462,0.700109,0.370383) material=G4_Pb - --> #secondaries=63 impactParameter[fm]=5.92364 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=3 - Collision 393 projectile=D+ Ekin[MeV]=25669.9 direction=(0.496434,0.416825,0.761453) material=G4_Pb - --> #secondaries=74 impactParameter[fm]=5.03613 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=3 - Collision 394 projectile=Bs0 Ekin[MeV]=24260.9 direction=(0.157082,0.781875,0.603321) material=G4_H - --> #secondaries=4 impactParameter[fm]=1.40366 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 395 projectile=xi0 Ekin[MeV]=21497.3 direction=(0.750024,0.0726008,0.657414) material=G4_Pb - --> #secondaries=89 impactParameter[fm]=2.85113 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=5 - Collision 396 projectile=anti_sigma+ Ekin[MeV]=6207.21 direction=(0.774076,0.620226,0.126986) material=G4_Be - --> #secondaries=11 impactParameter[fm]=2.70931 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 397 projectile=anti_xi_c+ Ekin[MeV]=21996.7 direction=(0.0686495,0.808217,0.58487) material=G4_W - --> #secondaries=74 impactParameter[fm]=3.02781 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=0 - Collision 398 projectile=kaon- Ekin[MeV]=27940.1 direction=(0.712835,0.373233,0.593771) material=G4_Be - --> #secondaries=24 impactParameter[fm]=0.571352 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=6 #NNcollisions=3 - Collision 399 projectile=triton Ekin[MeV]=4353.27 direction=(0.883421,0.457162,0.102809) material=G4_Pb - --> #secondaries=37 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 400 projectile=doublehyperdoubleneutron Ekin[MeV]=5533.1 direction=(0.529028,0.3995,0.748685) material=G4_H - --> #secondaries=3 impactParameter[fm]=2.50162 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 199 projectile=xi- Ekin[MeV]=6903.49 direction=(0.842527,0.538338,0.0184556) material=G4_Ar + --> #secondaries=29 impactParameter[fm]=2.85954 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=36 #NNcollisions=3 + Collision 200 projectile=hyperalpha Ekin[MeV]=12176.6 direction=(0.724238,0.47282,0.501917) material=G4_Cu + --> #secondaries=28 impactParameter[fm]=3.64166 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=59 #NNcollisions=1 List of produced secondaries: - j=0 proton p=(474.268,269.323,896.2131407.49) MeV - j=1 sigma0 p=(250.218,331.079,285.6241294.68) MeV - j=2 hypertriton p=(3930.12,2914.04,5403.817879.45) MeV - Collision 401 projectile=He3 Ekin[MeV]=28456.1 direction=(0.528674,0.803795,0.272797) material=G4_Pb - --> #secondaries=116 impactParameter[fm]=3.65842 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=193 #NNcollisions=11 - Collision 402 projectile=doublehyperdoubleneutron Ekin[MeV]=6062.8 direction=(0.946687,0.268951,0.177339) material=G4_H - --> #secondaries=3 impactParameter[fm]=0.707017 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=0 - Collision 403 projectile=kaon0S Ekin[MeV]=27919.6 direction=(0.0736044,0.312414,0.94709) material=G4_Pb - --> #secondaries=43 impactParameter[fm]=6.38725 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 - Collision 404 projectile=deuteron Ekin[MeV]=23478.1 direction=(0.816392,0.43731,0.37718) material=G4_H - --> #secondaries=6 impactParameter[fm]=0.918071 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 405 projectile=anti_sigma+ Ekin[MeV]=27988.9 direction=(0.595644,0.770387,0.227403) material=G4_Pb - --> #secondaries=39 impactParameter[fm]=6.74396 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=1 - Collision 406 projectile=xi_c0 Ekin[MeV]=27415.2 direction=(0.222676,0.577813,0.785206) material=G4_He - --> #secondaries=5 impactParameter[fm]=2.53653 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 407 projectile=Bc+ Ekin[MeV]=8712.46 direction=(0.608199,0.234678,0.758301) material=G4_Ar - --> #secondaries=7 impactParameter[fm]=2.74991 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=0 - Collision 408 projectile=anti_hypertriton Ekin[MeV]=4217.74 direction=(0.776191,0.244171,0.581299) material=G4_Pb - --> #secondaries=92 impactParameter[fm]=4.26583 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=3 - Collision 409 projectile=anti_triton Ekin[MeV]=12014.8 direction=(0.560389,0.739295,0.373374) material=G4_Cu - --> #secondaries=52 impactParameter[fm]=3.94752 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=59 #NNcollisions=4 - Collision 410 projectile=anti_xi_b- Ekin[MeV]=20692.2 direction=(0.703844,0.0390428,0.709281) material=G4_Ar - --> #secondaries=9 impactParameter[fm]=5.76595 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 411 projectile=B0 Ekin[MeV]=17439.7 direction=(0.594162,0.477463,0.647303) material=G4_W - --> #secondaries=35 impactParameter[fm]=1.62782 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=182 #NNcollisions=1 - Collision 412 projectile=hyperHe5 Ekin[MeV]=10482.8 direction=(0.800365,0.595316,0.0708103) material=G4_Cu - --> #secondaries=20 impactParameter[fm]=5.54114 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=59 #NNcollisions=1 - Collision 413 projectile=anti_xi- Ekin[MeV]=6477.95 direction=(0.434515,0.735497,0.519847) material=G4_Si - --> #secondaries=30 impactParameter[fm]=2.66961 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=2 - Collision 414 projectile=hypertriton Ekin[MeV]=4543.28 direction=(0.511596,0.673462,0.53359) material=G4_Pb - --> #secondaries=25 impactParameter[fm]=8.5927 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=206 #NNcollisions=0 - Collision 415 projectile=anti_lambda_b Ekin[MeV]=15146.9 direction=(0.599823,0.640126,0.480053) material=G4_Pb - --> #secondaries=22 impactParameter[fm]=6.38766 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=0 - Collision 416 projectile=lambda_c+ Ekin[MeV]=23016.3 direction=(0.790423,0.36351,0.493044) material=G4_H - --> #secondaries=3 impactParameter[fm]=1.47558 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 417 projectile=lambda_b Ekin[MeV]=26166.6 direction=(0.290885,0.354702,0.888579) material=G4_W - --> #secondaries=31 impactParameter[fm]=6.06685 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=0 - Collision 418 projectile=anti_lambda Ekin[MeV]=20658.1 direction=(0.667628,0.683241,0.295728) material=G4_Pb - --> #secondaries=73 impactParameter[fm]=2.29865 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=198 #NNcollisions=6 - Collision 419 projectile=Bs0 Ekin[MeV]=22009.7 direction=(0.293516,0.866688,0.403361) material=G4_Cu - --> #secondaries=10 impactParameter[fm]=4.65246 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=0 - Collision 420 projectile=xi_c+ Ekin[MeV]=6905.11 direction=(0.167856,0.721692,0.671554) material=G4_Fe - --> #secondaries=23 impactParameter[fm]=4.05654 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 421 projectile=B+ Ekin[MeV]=5899.36 direction=(0.671714,0.175924,0.719618) material=G4_W - --> #secondaries=38 impactParameter[fm]=5.75265 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=178 #NNcollisions=3 - Collision 422 projectile=anti_doublehyperH4 Ekin[MeV]=12909.7 direction=(0.364883,0.402497,0.839557) material=G4_Fe - --> #secondaries=11 impactParameter[fm]=7.64198 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 423 projectile=xi_b- Ekin[MeV]=22208.4 direction=(0.600016,0.690297,0.404316) material=G4_Si - --> #secondaries=13 impactParameter[fm]=2.59401 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 424 projectile=proton Ekin[MeV]=11376.6 direction=(0.583666,0.697201,0.416227) material=G4_Be - --> #secondaries=11 impactParameter[fm]=2.96271 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 425 projectile=kaon0S Ekin[MeV]=4340.47 direction=(0.2022,0.830935,0.518327) material=G4_Be - --> #secondaries=8 impactParameter[fm]=2.84042 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 426 projectile=anti_omega- Ekin[MeV]=9198.44 direction=(0.148002,0.711828,0.686584) material=G4_Be - --> #secondaries=8 impactParameter[fm]=3.18778 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 427 projectile=anti_triton Ekin[MeV]=23403 direction=(0.964829,0.0518928,0.257704) material=G4_Si - --> #secondaries=34 impactParameter[fm]=2.41603 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 428 projectile=anti_hyperH4 Ekin[MeV]=4321.24 direction=(0.374936,0.076242,0.92391) material=G4_He - --> #secondaries=5 impactParameter[fm]=3.11324 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=4 #NNcollisions=1 - Collision 429 projectile=lambda Ekin[MeV]=16139.7 direction=(0.498211,0.689925,0.525156) material=G4_Al - --> #secondaries=7 impactParameter[fm]=4.80559 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 430 projectile=anti_sigma+ Ekin[MeV]=26464.9 direction=(0.357078,0.867862,0.345415) material=G4_Al - --> #secondaries=16 impactParameter[fm]=3.7298 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 431 projectile=sigma+ Ekin[MeV]=11932.3 direction=(0.750283,0.645406,0.143271) material=G4_Si - --> #secondaries=18 impactParameter[fm]=3.69212 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 432 projectile=pi+ Ekin[MeV]=23509.1 direction=(0.340589,0.783129,0.520296) material=G4_W - --> #secondaries=67 impactParameter[fm]=3.37436 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=178 #NNcollisions=3 - Collision 433 projectile=He3 Ekin[MeV]=15990.6 direction=(0.534137,0.0884555,0.840758) material=G4_Pb - --> #secondaries=43 impactParameter[fm]=8.44775 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=206 #NNcollisions=2 - Collision 434 projectile=D0 Ekin[MeV]=17142 direction=(0.262461,0.360061,0.895249) material=G4_W - --> #secondaries=44 impactParameter[fm]=1.91345 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=2 - Collision 435 projectile=Ds- Ekin[MeV]=18020.1 direction=(0.632313,0.43205,0.64305) material=G4_Be - --> #secondaries=12 impactParameter[fm]=2.29444 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 436 projectile=anti_deuteron Ekin[MeV]=19487.7 direction=(0.597227,0.529938,0.602068) material=G4_Pb - --> #secondaries=109 impactParameter[fm]=2.62016 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=2 - Collision 437 projectile=anti_He3 Ekin[MeV]=3245.53 direction=(0.0255115,0.268236,0.963015) material=G4_Pb - --> #secondaries=52 impactParameter[fm]=6.61744 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=3 - Collision 438 projectile=anti_proton Ekin[MeV]=1412.04 direction=(0.572662,0.0561454,0.817866) material=G4_Be - --> #secondaries=9 impactParameter[fm]=1.60005 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=2 - Collision 439 projectile=anti_xi- Ekin[MeV]=23712.6 direction=(0.54982,0.676232,0.490314) material=G4_Al - --> #secondaries=25 impactParameter[fm]=0.635287 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=3 - Collision 440 projectile=alpha Ekin[MeV]=15623.2 direction=(0.770101,0.410819,0.488029) material=G4_He - --> #secondaries=8 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 441 projectile=B- Ekin[MeV]=26419.2 direction=(0.610278,0.184392,0.770429) material=G4_Be - --> #secondaries=10 impactParameter[fm]=2.36604 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 442 projectile=lambda_c+ Ekin[MeV]=24195.1 direction=(0.0437734,0.755432,0.653764) material=G4_H - --> #secondaries=4 impactParameter[fm]=0.733116 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 443 projectile=hyperHe5 Ekin[MeV]=29001.4 direction=(0.153815,0.74767,0.646011) material=G4_Ar - --> #secondaries=62 impactParameter[fm]=2.2207 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=6 - Collision 444 projectile=anti_sigma+ Ekin[MeV]=24062.2 direction=(0.508475,0.797454,0.324838) material=G4_W - --> #secondaries=52 impactParameter[fm]=5.74031 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=184 #NNcollisions=2 - Collision 445 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=15289.1 direction=(0.696981,0.674237,0.244175) material=G4_He - --> #secondaries=5 impactParameter[fm]=2.76553 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 446 projectile=anti_xi_c+ Ekin[MeV]=5373.93 direction=(0.92915,0.140665,0.341898) material=G4_Si - --> #secondaries=16 impactParameter[fm]=1.82988 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 447 projectile=doublehyperdoubleneutron Ekin[MeV]=7002.35 direction=(0.798129,0.559532,0.223415) material=G4_H - --> #secondaries=3 impactParameter[fm]=0.735581 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=0 - Collision 448 projectile=xi0 Ekin[MeV]=23851.5 direction=(0.685945,0.453742,0.568857) material=G4_Ar - --> #secondaries=23 impactParameter[fm]=3.90884 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 449 projectile=anti_He3 Ekin[MeV]=11105 direction=(0.64988,0.367605,0.665224) material=G4_Pb - --> #secondaries=57 impactParameter[fm]=7.54644 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=203 #NNcollisions=1 - Collision 450 projectile=D0 Ekin[MeV]=3559.42 direction=(0.960492,0.276857,0.028375) material=G4_Pb - --> #secondaries=23 impactParameter[fm]=7.29628 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=204 #NNcollisions=1 - Collision 451 projectile=deuteron Ekin[MeV]=14650.9 direction=(0.681033,0.219661,0.698529) material=G4_C - --> #secondaries=12 impactParameter[fm]=1.98218 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 452 projectile=kaon0L Ekin[MeV]=1141.09 direction=(0.697035,0.289058,0.656192) material=G4_Be + j=0 lambda p=(1049.49,300.628,412.6791614.58) MeV + j=1 proton p=(2571.16,1624.96,1132.053378.35) MeV + j=2 neutron p=(2704.72,1713.04,2087.083935.57) MeV + j=3 proton p=(-27.1186,474.088,834.5761342.52) MeV + j=4 proton p=(1302.27,-266.176,265.9771648.59) MeV + j=5 pi- p=(363.152,34.5732,254.567466.217) MeV + j=6 proton p=(-4.29874,977.003,206.8741370.29) MeV + j=7 proton p=(58.0813,550.239,209.0261109.14) MeV + j=8 neutron p=(-164.202,-58.0858,-71.1481958.218) MeV + j=9 neutron p=(-109.366,-385.104,321.9211070.83) MeV + j=10 proton p=(224.289,-396.512,98.01541047.61) MeV + j=11 proton p=(130.334,-135.176,-223.667982.67) MeV + j=12 deuteron p=(699.069,-659.32,247.3342121.91) MeV + j=13 proton p=(-23.0115,-170.903,84.1804957.694) MeV + j=14 S34 p=(-222.668,1493.11,-174.31131669.2) MeV + j=15 neutron p=(161.908,20.2042,-96.7645958.524) MeV + j=16 neutron p=(82.3479,50.152,81.1999947.984) MeV + j=17 proton p=(-42.0686,68.8062,-127.883950.375) MeV + j=18 triton p=(-243.529,203.241,-27.40912826.91) MeV + j=19 alpha p=(132.842,-25.7165,201.3653735.27) MeV + j=20 neutron p=(11.0733,83.3096,-18.698943.502) MeV + j=21 neutron p=(-97.3891,29.8826,-3.66028945.079) MeV + j=22 alpha p=(-203.009,-24.5151,160.2443736.42) MeV + j=23 neutron p=(18.9768,-35.5023,9.8772940.479) MeV + j=24 neutron p=(56.3104,-12.7527,7.63457941.369) MeV + j=25 gamma p=(7.0873,-3.82586,-3.352898.72404) MeV + j=26 gamma p=(-0.968659,-1.54532,0.9446362.05394) MeV + j=27 proton p=(2872.34,1934.24,19684092.06) MeV + Collision 201 projectile=neutron Ekin[MeV]=12417.5 direction=(0.741838,0.529424,0.411566) material=G4_H + --> #secondaries=10 impactParameter[fm]=0.466172 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 202 projectile=proton Ekin[MeV]=12616.8 direction=(0.286449,0.443756,0.849134) material=G4_C + --> #secondaries=20 impactParameter[fm]=1.93311 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=4 + Collision 203 projectile=anti_sigma- Ekin[MeV]=9713.01 direction=(0.786099,0.61693,0.0380159) material=G4_Cu + --> #secondaries=29 impactParameter[fm]=4.86025 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=2 + Collision 204 projectile=anti_xi0 Ekin[MeV]=22828.3 direction=(0.0894284,0.187679,0.978151) material=G4_He + --> #secondaries=5 impactParameter[fm]=2.42423 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 205 projectile=anti_alpha Ekin[MeV]=7279.15 direction=(0.573696,0.698138,0.428342) material=G4_Al + --> #secondaries=28 impactParameter[fm]=3.36102 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=27 #NNcollisions=3 + Collision 206 projectile=anti_neutron Ekin[MeV]=29628.4 direction=(0.479845,0.430286,0.764593) material=G4_Be + --> #secondaries=8 impactParameter[fm]=2.9639 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 207 projectile=anti_doublehyperH4 Ekin[MeV]=8110.07 direction=(0.70206,0.50515,0.501932) material=G4_Be + --> #secondaries=18 impactParameter[fm]=3.01794 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=8 #NNcollisions=3 + Collision 208 projectile=anti_hyperalpha Ekin[MeV]=23369.2 direction=(0.874657,0.410438,0.257907) material=G4_Fe + --> #secondaries=42 impactParameter[fm]=5.86915 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=52 #NNcollisions=3 + Collision 209 projectile=D+ Ekin[MeV]=6952.62 direction=(0.611946,0.628055,0.480696) material=G4_He + --> #secondaries=8 impactParameter[fm]=1.27001 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 210 projectile=anti_xi_b0 Ekin[MeV]=17648.4 direction=(0.734823,0.225442,0.639697) material=G4_Be + --> #secondaries=9 impactParameter[fm]=2.33661 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 + Collision 211 projectile=anti_Bs0 Ekin[MeV]=27410.5 direction=(0.372702,0.699181,0.610114) material=G4_Si + --> #secondaries=19 impactParameter[fm]=3.21496 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 212 projectile=anti_alpha Ekin[MeV]=29083.6 direction=(0.026924,0.802347,0.596251) material=G4_Ar + --> #secondaries=36 impactParameter[fm]=2.35374 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=37 #NNcollisions=4 + Collision 213 projectile=anti_omega_c0 Ekin[MeV]=16430.2 direction=(0.0703257,0.0465253,0.996439) material=G4_Pb + --> #secondaries=87 impactParameter[fm]=1.21525 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=3 + Collision 214 projectile=xi0 Ekin[MeV]=10778.5 direction=(0.865048,0.370901,0.337823) material=G4_H + --> #secondaries=6 impactParameter[fm]=0.497563 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 215 projectile=anti_proton Ekin[MeV]=17680.7 direction=(0.627615,0.341729,0.699515) material=G4_He + --> #secondaries=8 impactParameter[fm]=1.52302 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 216 projectile=sigma+ Ekin[MeV]=7764.51 direction=(0.0284922,0.815567,0.57796) material=G4_C + --> #secondaries=15 impactParameter[fm]=1.34661 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 + Collision 217 projectile=omega_b- Ekin[MeV]=18416.6 direction=(0.311586,0.505337,0.804704) material=G4_He + --> #secondaries=5 impactParameter[fm]=0.857185 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=1 + Collision 218 projectile=He3 Ekin[MeV]=10239.8 direction=(0.501148,0.688554,0.52416) material=G4_Si + --> #secondaries=15 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 219 projectile=deuteron Ekin[MeV]=18855.5 direction=(0.741375,0.127299,0.658906) material=G4_Si + --> #secondaries=16 impactParameter[fm]=4.76896 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 220 projectile=xi_b- Ekin[MeV]=26117.5 direction=(0.583848,0.638192,0.501829) material=G4_Fe + --> #secondaries=17 impactParameter[fm]=5.06021 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 221 projectile=D+ Ekin[MeV]=3664.79 direction=(0.152814,0.905936,0.394877) material=G4_Ar + --> #secondaries=11 impactParameter[fm]=2.6656 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=0 + Collision 222 projectile=anti_omega_c0 Ekin[MeV]=26020.9 direction=(0.873737,0.397555,0.280238) material=G4_He + --> #secondaries=5 impactParameter[fm]=1.19443 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=1 + Collision 223 projectile=anti_xi_c+ Ekin[MeV]=26347.6 direction=(0.696854,0.575438,0.428095) material=G4_W + --> #secondaries=46 impactParameter[fm]=2.23155 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=1 + Collision 224 projectile=anti_xi_c+ Ekin[MeV]=23244.6 direction=(0.430748,0.217144,0.875959) material=G4_C + --> #secondaries=14 impactParameter[fm]=3.05093 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 225 projectile=kaon0L Ekin[MeV]=12598.8 direction=(0.143254,0.170458,0.974896) material=G4_C + --> #secondaries=10 impactParameter[fm]=1.88047 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 226 projectile=Bc+ Ekin[MeV]=9757.02 direction=(0.771501,0.448732,0.451027) material=G4_Be + --> #secondaries=5 impactParameter[fm]=2.60908 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 227 projectile=B+ Ekin[MeV]=7005.75 direction=(0.380865,0.42601,0.820644) material=G4_W + --> #secondaries=37 impactParameter[fm]=4.5897 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=180 #NNcollisions=1 + Collision 228 projectile=proton Ekin[MeV]=12567.2 direction=(0.494694,0.348245,0.796243) material=G4_Al + --> #secondaries=18 impactParameter[fm]=4.84967 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 229 projectile=anti_sigma+ Ekin[MeV]=9159.08 direction=(0.867283,0.488807,0.094277) material=G4_W + --> #secondaries=23 impactParameter[fm]=7.71315 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=1 + Collision 230 projectile=anti_alpha Ekin[MeV]=20719.4 direction=(0.344282,0.117098,0.931535) material=G4_C + --> #secondaries=9 impactParameter[fm]=4.72814 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 231 projectile=anti_He3 Ekin[MeV]=6470.17 direction=(0.333401,0.832465,0.442545) material=G4_He + --> #secondaries=16 impactParameter[fm]=1.10985 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=3 #NNcollisions=2 + Collision 232 projectile=anti_xi0 Ekin[MeV]=25249.7 direction=(0.662667,0.642073,0.385505) material=G4_He + --> #secondaries=10 impactParameter[fm]=1.33811 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 233 projectile=kaon+ Ekin[MeV]=8663.54 direction=(0.246071,0.725817,0.642369) material=G4_He + --> #secondaries=9 impactParameter[fm]=1.71134 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 234 projectile=He3 Ekin[MeV]=6199.94 direction=(0.55538,0.610763,0.564377) material=G4_Al + --> #secondaries=12 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 235 projectile=pi- Ekin[MeV]=7283.71 direction=(0.727235,0.686384,0.00255563) material=G4_Pb + --> #secondaries=49 impactParameter[fm]=2.73941 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=204 #NNcollisions=3 + Collision 236 projectile=lambda_c+ Ekin[MeV]=6355.59 direction=(0.593461,0.634637,0.495015) material=G4_C + --> #secondaries=12 impactParameter[fm]=0.50819 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 + Collision 237 projectile=kaon+ Ekin[MeV]=18249 direction=(0.389436,0.169794,0.905268) material=G4_Pb + --> #secondaries=83 impactParameter[fm]=4.25581 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=200 #NNcollisions=4 + Collision 238 projectile=D+ Ekin[MeV]=10880.6 direction=(0.614699,0.512073,0.599939) material=G4_C + --> #secondaries=18 impactParameter[fm]=1.3147 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=6 #NNcollisions=3 + Collision 239 projectile=doublehyperdoubleneutron Ekin[MeV]=3682.76 direction=(0.0647009,0.309327,0.948752) material=G4_He + --> #secondaries=8 impactParameter[fm]=0.117713 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=1 + Collision 240 projectile=kaon- Ekin[MeV]=16830.5 direction=(0.472966,0.354279,0.806716) material=G4_Ar + --> #secondaries=20 impactParameter[fm]=2.99228 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 241 projectile=D- Ekin[MeV]=12354.9 direction=(0.336298,0.924716,0.178336) material=G4_C + --> #secondaries=13 impactParameter[fm]=1.06922 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 242 projectile=anti_omega_b- Ekin[MeV]=6493.58 direction=(0.449622,0.885229,0.119204) material=G4_Ar + --> #secondaries=14 impactParameter[fm]=3.19057 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 243 projectile=xi- Ekin[MeV]=26109.3 direction=(0.499047,0.340277,0.796971) material=G4_C + --> #secondaries=22 impactParameter[fm]=1.90167 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 + Collision 244 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=7594.63 direction=(0.565622,0.45219,0.689635) material=G4_Ar + --> #secondaries=16 impactParameter[fm]=4.7531 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=40 #NNcollisions=1 + Collision 245 projectile=hyperH4 Ekin[MeV]=7096.31 direction=(0.610946,0.584879,0.533537) material=G4_Ar + --> #secondaries=19 impactParameter[fm]=3.97024 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=36 #NNcollisions=0 + Collision 246 projectile=anti_sigma- Ekin[MeV]=2044.41 direction=(0.942278,0.0411985,0.332286) material=G4_Fe + --> #secondaries=10 impactParameter[fm]=5.16014 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=0 + Collision 247 projectile=alpha Ekin[MeV]=28042.6 direction=(0.182026,0.946346,0.267011) material=G4_Pb + --> #secondaries=23 impactParameter[fm]=8.95675 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 248 projectile=anti_alpha Ekin[MeV]=14252.3 direction=(0.654165,0.652849,0.381911) material=G4_Fe + --> #secondaries=9 impactParameter[fm]=6.89517 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=53 #NNcollisions=0 + Collision 249 projectile=xi_c0 Ekin[MeV]=19784.8 direction=(0.640044,0.606644,0.471516) material=G4_Si + --> #secondaries=35 impactParameter[fm]=2.90855 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 250 projectile=kaon+ Ekin[MeV]=18216.4 direction=(0.373988,0.839216,0.394777) material=G4_Be + --> #secondaries=10 impactParameter[fm]=2.57119 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 251 projectile=anti_xi- Ekin[MeV]=22230.5 direction=(0.563337,0.826205,0.00602157) material=G4_C + --> #secondaries=17 impactParameter[fm]=2.69044 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 252 projectile=Ds+ Ekin[MeV]=5336.78 direction=(0.826707,0.478858,0.295383) material=G4_Si + --> #secondaries=6 impactParameter[fm]=0.321469 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 253 projectile=lambda_b Ekin[MeV]=16083.5 direction=(0.382968,0.018257,0.923581) material=G4_C + --> #secondaries=12 impactParameter[fm]=1.22184 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=2 + Collision 254 projectile=anti_He3 Ekin[MeV]=13496.6 direction=(0.698108,0.64638,0.30796) material=G4_Fe + --> #secondaries=43 impactParameter[fm]=2.72798 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=50 #NNcollisions=4 + Collision 255 projectile=lambda Ekin[MeV]=8041.6 direction=(0.531245,0.409455,0.741705) material=G4_C + --> #secondaries=8 impactParameter[fm]=1.79724 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 256 projectile=Bs0 Ekin[MeV]=29622.1 direction=(0.340106,0.756067,0.559188) material=G4_Al + --> #secondaries=14 impactParameter[fm]=1.29339 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=0 + Collision 257 projectile=lambda_b Ekin[MeV]=7563.62 direction=(0.817334,0.444596,0.366469) material=G4_He + --> #secondaries=4 impactParameter[fm]=2.48061 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 258 projectile=anti_lambda_b Ekin[MeV]=13991.6 direction=(0.484211,0.312245,0.817339) material=G4_C + --> #secondaries=7 impactParameter[fm]=1.65391 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 259 projectile=kaon- Ekin[MeV]=29953.9 direction=(0.892028,0.4508,0.0326443) material=G4_Pb + --> #secondaries=78 impactParameter[fm]=3.14168 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=204 #NNcollisions=4 + Collision 260 projectile=hyperalpha Ekin[MeV]=24566.7 direction=(0.570543,0.809469,0.13871) material=G4_H + --> #secondaries=8 impactParameter[fm]=2.3055 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 261 projectile=kaon- Ekin[MeV]=18131.3 direction=(0.594295,0.77667,0.2088) material=G4_He + --> #secondaries=11 impactParameter[fm]=0.225138 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=2 #NNcollisions=1 + Collision 262 projectile=anti_hypertriton Ekin[MeV]=2151.01 direction=(0.662956,0.577429,0.476514) material=G4_Al + --> #secondaries=23 impactParameter[fm]=3.12 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=3 + Collision 263 projectile=B- Ekin[MeV]=19421.5 direction=(0.925147,0.374429,0.0624973) material=G4_H + --> #secondaries=3 impactParameter[fm]=0.484835 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 264 projectile=anti_proton Ekin[MeV]=13048 direction=(0.617103,0.594506,0.515507) material=G4_Cu + --> #secondaries=31 impactParameter[fm]=3.97056 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=65 #NNcollisions=1 + Collision 265 projectile=doublehyperH4 Ekin[MeV]=18250.1 direction=(0.798633,0.275194,0.535214) material=G4_He + --> #secondaries=11 impactParameter[fm]=2.54759 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 266 projectile=Ds+ Ekin[MeV]=23417.2 direction=(0.0490128,0.852629,0.520214) material=G4_Fe + --> #secondaries=18 impactParameter[fm]=1.31128 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 267 projectile=neutron Ekin[MeV]=22642.4 direction=(0.855259,0.388163,0.34331) material=G4_C + --> #secondaries=14 impactParameter[fm]=3.08734 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 268 projectile=xi_c0 Ekin[MeV]=18496.2 direction=(0.315989,0.664288,0.677401) material=G4_He + --> #secondaries=7 impactParameter[fm]=0.648978 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 + Collision 269 projectile=Ds+ Ekin[MeV]=23754.7 direction=(0.200671,0.709326,0.675712) material=G4_He + --> #secondaries=7 impactParameter[fm]=1.82312 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 270 projectile=neutron Ekin[MeV]=2524.9 direction=(0.332616,0.868525,0.367467) material=G4_H + --> #secondaries=4 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 271 projectile=anti_xi- Ekin[MeV]=16147.2 direction=(0.808005,0.340237,0.481005) material=G4_H + --> #secondaries=6 impactParameter[fm]=1.04826 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 272 projectile=Bc+ Ekin[MeV]=8452.67 direction=(0.628726,0.277884,0.726281) material=G4_H + --> #secondaries=3 impactParameter[fm]=0.208621 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 273 projectile=kaon- Ekin[MeV]=7169.74 direction=(0.310481,0.948504,0.0627847) material=G4_Si + --> #secondaries=7 impactParameter[fm]=2.16849 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 274 projectile=alpha Ekin[MeV]=5951.54 direction=(0.34633,0.935846,0.0651718) material=G4_Ar + --> #secondaries=9 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 275 projectile=omega_b- Ekin[MeV]=16586 direction=(0.673665,0.621314,0.400181) material=G4_H + --> #secondaries=2 impactParameter[fm]=1.13937 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 276 projectile=omega- Ekin[MeV]=6398.01 direction=(0.649198,0.6986,0.300833) material=G4_Ar + --> #secondaries=29 impactParameter[fm]=0.856333 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=33 #NNcollisions=4 + Collision 277 projectile=lambda Ekin[MeV]=2356.95 direction=(0.791164,0.20884,0.574844) material=G4_C --> #secondaries=5 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 453 projectile=doublehyperdoubleneutron Ekin[MeV]=29806.6 direction=(0.641987,0.167306,0.748239) material=G4_He - --> #secondaries=13 impactParameter[fm]=3.07443 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=3 #NNcollisions=3 - Collision 454 projectile=anti_lambda_b Ekin[MeV]=6752.29 direction=(0.465699,0.88491,0.00763601) material=G4_Cu - --> #secondaries=11 impactParameter[fm]=5.14975 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 455 projectile=anti_xi_c+ Ekin[MeV]=22298.6 direction=(0.883705,0.432571,0.17874) material=G4_C - --> #secondaries=15 impactParameter[fm]=1.56863 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 456 projectile=B+ Ekin[MeV]=19444.2 direction=(0.814349,0.487138,0.315487) material=G4_Pb - --> #secondaries=16 impactParameter[fm]=7.71875 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 - Collision 457 projectile=anti_hyperalpha Ekin[MeV]=7424.34 direction=(0.661928,0.45978,0.591991) material=G4_H - --> #secondaries=9 impactParameter[fm]=0.864608 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 458 projectile=xi_b- Ekin[MeV]=17389.6 direction=(0.236724,0.951526,0.196366) material=G4_C - --> #secondaries=15 impactParameter[fm]=0.655477 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=3 - Collision 459 projectile=anti_proton Ekin[MeV]=10657.7 direction=(0.841846,0.535909,0.0640075) material=G4_Ar - --> #secondaries=14 impactParameter[fm]=4.72901 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 460 projectile=anti_xi0 Ekin[MeV]=10223.4 direction=(0.358159,0.816852,0.452189) material=G4_W - --> #secondaries=36 impactParameter[fm]=7.27394 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=185 #NNcollisions=1 - Collision 461 projectile=Ds+ Ekin[MeV]=22353 direction=(0.0832702,0.613873,0.785) material=G4_C - --> #secondaries=13 impactParameter[fm]=2.07986 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 462 projectile=kaon0S Ekin[MeV]=29569.3 direction=(0.106159,0.913137,0.393588) material=G4_Pb - --> #secondaries=88 impactParameter[fm]=3.5745 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=204 #NNcollisions=1 - Collision 463 projectile=anti_xi_b0 Ekin[MeV]=5192.4 direction=(0.176727,0.978876,0.102805) material=G4_W - --> #secondaries=14 impactParameter[fm]=8.86772 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=0 - Collision 464 projectile=omega_b- Ekin[MeV]=1811.12 direction=(0.527791,0.831199,0.174769) material=G4_Pb - --> #secondaries=28 impactParameter[fm]=5.26215 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=0 - Collision 465 projectile=anti_lambda_c+ Ekin[MeV]=16844.4 direction=(0.48438,0.626893,0.61023) material=G4_Be - --> #secondaries=6 impactParameter[fm]=2.04779 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 466 projectile=D- Ekin[MeV]=15783.1 direction=(0.143388,0.747959,0.648072) material=G4_He - --> #secondaries=4 impactParameter[fm]=1.13493 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 467 projectile=kaon+ Ekin[MeV]=16890.5 direction=(0.0435622,0.989281,0.139375) material=G4_Al - --> #secondaries=21 impactParameter[fm]=1.37758 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 468 projectile=B- Ekin[MeV]=12533.4 direction=(0.712789,0.299205,0.634357) material=G4_Be - --> #secondaries=8 impactParameter[fm]=2.60438 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 469 projectile=omega- Ekin[MeV]=17240.3 direction=(0.917265,0.345695,0.19779) material=G4_Be - --> #secondaries=10 impactParameter[fm]=0.669822 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=1 - Collision 470 projectile=Bc+ Ekin[MeV]=26713.7 direction=(0.589915,0.686846,0.424551) material=G4_C - --> #secondaries=8 impactParameter[fm]=1.95916 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 471 projectile=xi_b0 Ekin[MeV]=23840.6 direction=(0.786032,0.173655,0.593293) material=G4_W - --> #secondaries=64 impactParameter[fm]=4.58153 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=3 - Collision 472 projectile=anti_D0 Ekin[MeV]=1702.86 direction=(0.608834,0.788842,0.0839544) material=G4_Cu - --> #secondaries=19 impactParameter[fm]=3.27748 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=59 #NNcollisions=0 - Collision 473 projectile=alpha Ekin[MeV]=20615.5 direction=(0.189222,0.88526,0.424865) material=G4_Be - --> #secondaries=17 impactParameter[fm]=1.10798 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=5 #NNcollisions=4 - Collision 474 projectile=anti_xi_c+ Ekin[MeV]=13637.2 direction=(0.685852,0.488253,0.539644) material=G4_He - --> #secondaries=9 impactParameter[fm]=2.68835 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 475 projectile=xi_b- Ekin[MeV]=19050.3 direction=(0.522189,0.804833,0.282068) material=G4_Si - --> #secondaries=12 impactParameter[fm]=2.86315 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 476 projectile=anti_neutron Ekin[MeV]=22986.1 direction=(0.212507,0.553048,0.805592) material=G4_Cu - --> #secondaries=30 impactParameter[fm]=3.98362 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=2 - Collision 477 projectile=anti_D0 Ekin[MeV]=23085.4 direction=(0.0296379,0.517376,0.855245) material=G4_Al - --> #secondaries=11 impactParameter[fm]=2.44095 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 478 projectile=xi0 Ekin[MeV]=27418.8 direction=(0.934971,0.0852288,0.344332) material=G4_Al - --> #secondaries=20 impactParameter[fm]=2.15399 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 479 projectile=anti_xi0 Ekin[MeV]=16601.5 direction=(0.00853622,0.999913,0.0101007) material=G4_W - --> #secondaries=67 impactParameter[fm]=2.30743 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=176 #NNcollisions=3 - Collision 480 projectile=xi_c+ Ekin[MeV]=29566.8 direction=(0.325649,0.444366,0.834561) material=G4_Cu - --> #secondaries=30 impactParameter[fm]=0.264969 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=1 - Collision 481 projectile=anti_He3 Ekin[MeV]=9538.78 direction=(0.868396,0.347242,0.353992) material=G4_Al - --> #secondaries=17 impactParameter[fm]=7.59545 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 482 projectile=anti_Bs0 Ekin[MeV]=3532.36 direction=(0.379883,0.782277,0.493692) material=G4_Pb - --> #secondaries=13 impactParameter[fm]=7.56542 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=207 #NNcollisions=0 - Collision 483 projectile=anti_lambda Ekin[MeV]=22343.6 direction=(0.474589,0.406861,0.780532) material=G4_Fe - --> #secondaries=23 impactParameter[fm]=4.48655 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 484 projectile=omega- Ekin[MeV]=21619.9 direction=(0.772629,0.570193,0.279149) material=G4_Fe - --> #secondaries=41 impactParameter[fm]=2.17073 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=4 - Collision 485 projectile=omega_b- Ekin[MeV]=13451.3 direction=(0.0108593,0.46271,0.886443) material=G4_Be - --> #secondaries=5 impactParameter[fm]=1.9686 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 486 projectile=Bc+ Ekin[MeV]=4692.51 direction=(0.75834,0.477921,0.443296) material=G4_H - --> #secondaries=2 impactParameter[fm]=0.731657 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 487 projectile=anti_D0 Ekin[MeV]=15186.1 direction=(0.606838,0.0113278,0.794745) material=G4_Ar - --> #secondaries=35 impactParameter[fm]=1.64562 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=35 #NNcollisions=4 - Collision 488 projectile=anti_B0 Ekin[MeV]=12143.4 direction=(0.347089,0.188621,0.918668) material=G4_C - --> #secondaries=5 impactParameter[fm]=2.06407 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 489 projectile=anti_hyperHe5 Ekin[MeV]=17066.3 direction=(0.563042,0.656019,0.502617) material=G4_W - --> #secondaries=149 impactParameter[fm]=2.74572 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=5 - Collision 490 projectile=anti_xi_c0 Ekin[MeV]=18161.6 direction=(0.813343,0.562083,0.150119) material=G4_Al - --> #secondaries=22 impactParameter[fm]=2.05478 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 491 projectile=doublehyperH4 Ekin[MeV]=17950.8 direction=(0.825021,0.565064,0.00654394) material=G4_Pb - --> #secondaries=121 impactParameter[fm]=2.98173 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=193 #NNcollisions=12 - Collision 492 projectile=anti_Bs0 Ekin[MeV]=26267.1 direction=(0.545316,0.819711,0.175225) material=G4_Fe - --> #secondaries=12 impactParameter[fm]=3.50715 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=53 #NNcollisions=1 - Collision 493 projectile=D- Ekin[MeV]=17736.5 direction=(0.969449,0.244696,0.0171264) material=G4_C - --> #secondaries=19 impactParameter[fm]=1.02257 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=9 #NNcollisions=3 - Collision 494 projectile=lambda_c+ Ekin[MeV]=24624.8 direction=(0.354713,0.197682,0.913838) material=G4_He - --> #secondaries=4 impactParameter[fm]=2.95303 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 495 projectile=D0 Ekin[MeV]=25468.1 direction=(0.26539,0.844097,0.465906) material=G4_Fe - --> #secondaries=14 impactParameter[fm]=3.68437 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=56 #NNcollisions=1 - Collision 496 projectile=anti_deuteron Ekin[MeV]=28047.8 direction=(0.850112,0.513112,0.118433) material=G4_Cu - --> #secondaries=26 impactParameter[fm]=4.92914 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=62 #NNcollisions=2 - Collision 497 projectile=xi_c+ Ekin[MeV]=26991.8 direction=(0.880389,0.454868,0.1342) material=G4_Cu - --> #secondaries=43 impactParameter[fm]=3.36224 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=59 #NNcollisions=3 - Collision 498 projectile=Ds- Ekin[MeV]=2363.25 direction=(0.444015,0.541753,0.713691) material=G4_Al - --> #secondaries=9 impactParameter[fm]=3.17359 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 499 projectile=anti_hyperH4 Ekin[MeV]=23063.2 direction=(0.484789,0.37105,0.792024) material=G4_Al - --> #secondaries=13 impactParameter[fm]=7.02106 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 500 projectile=anti_lambda_b Ekin[MeV]=28398 direction=(0.412489,0.117212,0.90339) material=G4_Si - --> #secondaries=15 impactParameter[fm]=3.53407 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=29 #NNcollisions=1 + Collision 278 projectile=lambda_b Ekin[MeV]=12292.2 direction=(0.516939,0.36917,0.772326) material=G4_W + --> #secondaries=46 impactParameter[fm]=3.3596 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=4 + Collision 279 projectile=lambda Ekin[MeV]=22069.1 direction=(0.0560618,0.869784,0.490238) material=G4_Cu + --> #secondaries=11 impactParameter[fm]=5.46164 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=1 + Collision 280 projectile=Ds+ Ekin[MeV]=15663.4 direction=(0.290279,0.840829,0.456886) material=G4_Cu + --> #secondaries=41 impactParameter[fm]=2.88234 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=2 + Collision 281 projectile=pi- Ekin[MeV]=18502.2 direction=(0.991072,0.132581,0.0140671) material=G4_Be + --> #secondaries=14 impactParameter[fm]=0.503132 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=7 #NNcollisions=2 + Collision 282 projectile=triton Ekin[MeV]=8747.93 direction=(0.650977,0.381414,0.656317) material=G4_Si + --> #secondaries=21 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 283 projectile=sigma- Ekin[MeV]=19434.5 direction=(0.553223,0.403552,0.728759) material=G4_He + --> #secondaries=7 impactParameter[fm]=2.13744 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 284 projectile=sigma- Ekin[MeV]=2099.09 direction=(0.261609,0.651601,0.712023) material=G4_H + --> #secondaries=2 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 285 projectile=anti_hyperH4 Ekin[MeV]=27866.3 direction=(0.294639,0.247269,0.923063) material=G4_Be + --> #secondaries=10 impactParameter[fm]=3.19281 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 286 projectile=pi+ Ekin[MeV]=22340.4 direction=(0.925508,0.131829,0.355043) material=G4_Be + --> #secondaries=17 impactParameter[fm]=1.26318 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 287 projectile=lambda Ekin[MeV]=26938.8 direction=(0.931733,0.060284,0.358106) material=G4_Si + --> #secondaries=14 impactParameter[fm]=4.32213 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 288 projectile=anti_lambda_b Ekin[MeV]=25086.7 direction=(0.56524,0.502896,0.653911) material=G4_He + --> #secondaries=8 impactParameter[fm]=1.11011 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=3 + Collision 289 projectile=sigma+ Ekin[MeV]=15062.3 direction=(0.75056,0.237863,0.616508) material=G4_Si + --> #secondaries=28 impactParameter[fm]=1.97272 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=3 + Collision 290 projectile=xi_c+ Ekin[MeV]=23071.9 direction=(0.738868,0.548446,0.391512) material=G4_Al + --> #secondaries=16 impactParameter[fm]=1.75603 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 291 projectile=lambda Ekin[MeV]=1266.08 direction=(0.789525,0.56926,0.229332) material=G4_C + --> #secondaries=7 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 292 projectile=anti_deuteron Ekin[MeV]=4318.65 direction=(0.193594,0.867333,0.458536) material=G4_H + --> #secondaries=5 impactParameter[fm]=2.48574 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 293 projectile=xi_c0 Ekin[MeV]=6625.05 direction=(0.495744,0.756841,0.425945) material=G4_He + --> #secondaries=4 impactParameter[fm]=1.825 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 294 projectile=anti_proton Ekin[MeV]=13820.1 direction=(0.635036,0.0436457,0.771249) material=G4_C + --> #secondaries=11 impactParameter[fm]=2.55592 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 295 projectile=B0 Ekin[MeV]=2071.42 direction=(0.173123,0.911662,0.372695) material=G4_Fe + --> #secondaries=23 impactParameter[fm]=3.10599 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=51 #NNcollisions=1 + Collision 296 projectile=anti_Bs0 Ekin[MeV]=10411.3 direction=(0.281438,0.100511,0.954301) material=G4_Pb + --> #secondaries=39 impactParameter[fm]=5.00713 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=203 #NNcollisions=1 + Collision 297 projectile=kaon0L Ekin[MeV]=7710.72 direction=(0.639963,0.449491,0.623221) material=G4_He + --> #secondaries=4 impactParameter[fm]=1.4838 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 298 projectile=anti_hyperalpha Ekin[MeV]=18131.1 direction=(0.143852,0.519829,0.842072) material=G4_Si + --> #secondaries=10 impactParameter[fm]=5.53357 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=28 #NNcollisions=1 + Collision 299 projectile=anti_xi0 Ekin[MeV]=26101 direction=(0.43435,0.0294895,0.900261) material=G4_Be + --> #secondaries=13 impactParameter[fm]=1.81106 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=1 + Collision 300 projectile=anti_sigma+ Ekin[MeV]=25503.3 direction=(0.953233,0.000696359,0.302234) material=G4_W + --> #secondaries=76 impactParameter[fm]=3.1209 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=178 #NNcollisions=5 List of produced secondaries: - j=0 anti_lambda_b p=(10621.3,2609.04,22753.725863.7) MeV - j=1 pi+ p=(14.3858,145.093,700.251728.759) MeV - j=2 pi0 p=(423.935,18.4529,897.6491002.02) MeV - j=3 pi- p=(707.065,479.034,2234.142395.89) MeV - j=4 proton p=(147.471,-115.073,104.993962.48) MeV - j=5 pi0 p=(531.164,-163.645,275.317634.77) MeV - j=6 pi- p=(866.342,696.234,2144.242419.21) MeV - j=7 pi0 p=(179.495,99.7825,234.081339.393) MeV - j=8 proton p=(325.641,61.5051,1061.511454.99) MeV - j=9 Mg24 p=(-78.785,-22.4125,60.773622336) MeV - j=10 neutron p=(37.8095,-67.5929,-134.974952.365) MeV - j=11 deuteron p=(87.77,175.692,-29.21221886.09) MeV - j=12 neutron p=(-21.3646,14.4814,16.6939940.068) MeV - j=13 gamma p=(-6.91137,0.753048,-8.6689311.1124) MeV - j=14 gamma p=(3.8298,1.17084,-1.33144.22029) MeV - Collision 501 projectile=anti_neutron Ekin[MeV]=27686.4 direction=(0.935768,0.349342,0.047948) material=G4_Be - --> #secondaries=11 impactParameter[fm]=2.68152 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 502 projectile=anti_hyperH4 Ekin[MeV]=22631 direction=(0.637522,0.463609,0.615331) material=G4_C - --> #secondaries=13 impactParameter[fm]=3.37503 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 503 projectile=anti_xi_c0 Ekin[MeV]=10719.7 direction=(0.541759,0.572629,0.615299) material=G4_Cu - --> #secondaries=34 impactParameter[fm]=1.97557 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=2 - Collision 504 projectile=Ds+ Ekin[MeV]=5200.58 direction=(0.177934,0.237719,0.954897) material=G4_C - --> #secondaries=8 impactParameter[fm]=2.49762 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 505 projectile=xi0 Ekin[MeV]=1340.15 direction=(0.70223,0.234302,0.672292) material=G4_Ar - --> #secondaries=22 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 506 projectile=D0 Ekin[MeV]=17008.9 direction=(0.904145,0.42365,0.0551638) material=G4_W - --> #secondaries=26 impactParameter[fm]=5.24116 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=1 - Collision 507 projectile=lambda_c+ Ekin[MeV]=1033.39 direction=(0.678168,0.694144,0.241354) material=G4_W - --> #secondaries=38 impactParameter[fm]=2.47038 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=0 - Collision 508 projectile=xi_b0 Ekin[MeV]=25850.6 direction=(0.313551,0.765179,0.562304) material=G4_He - --> #secondaries=5 impactParameter[fm]=0.8606 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 509 projectile=doublehyperdoubleneutron Ekin[MeV]=6806.77 direction=(0.728729,0.276806,0.626365) material=G4_Pb - --> #secondaries=56 impactParameter[fm]=4.7178 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=199 #NNcollisions=2 - Collision 510 projectile=hypertriton Ekin[MeV]=22237.4 direction=(0.130691,0.653955,0.745159) material=G4_Ar - --> #secondaries=49 impactParameter[fm]=2.7995 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=35 #NNcollisions=4 - Collision 511 projectile=B+ Ekin[MeV]=14407.2 direction=(0.580244,0.188121,0.792419) material=G4_Ar - --> #secondaries=11 impactParameter[fm]=1.8524 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=2 - Collision 512 projectile=omega_b- Ekin[MeV]=20943.2 direction=(0.703834,0.588484,0.397874) material=G4_Al - --> #secondaries=19 impactParameter[fm]=3.14838 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=0 - Collision 513 projectile=anti_omega_b- Ekin[MeV]=14069.4 direction=(0.620098,0.61745,0.483977) material=G4_Fe - --> #secondaries=24 impactParameter[fm]=2.60987 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 514 projectile=Bs0 Ekin[MeV]=25706.6 direction=(0.442278,0.555706,0.703975) material=G4_Fe - --> #secondaries=15 impactParameter[fm]=2.39628 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=1 - Collision 515 projectile=anti_xi_b- Ekin[MeV]=14495.6 direction=(0.125926,0.139087,0.982241) material=G4_He - --> #secondaries=6 impactParameter[fm]=2.32768 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 516 projectile=anti_lambda_c+ Ekin[MeV]=3325.23 direction=(0.291209,0.704492,0.647215) material=G4_Pb - --> #secondaries=23 impactParameter[fm]=6.07602 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 - Collision 517 projectile=hypertriton Ekin[MeV]=27582.2 direction=(0.283922,0.637237,0.716461) material=G4_Ar - --> #secondaries=12 impactParameter[fm]=5.66879 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=39 #NNcollisions=0 - Collision 518 projectile=doublehyperdoubleneutron Ekin[MeV]=18976.8 direction=(0.170976,0.306898,0.936259) material=G4_H - --> #secondaries=7 impactParameter[fm]=1.62089 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 519 projectile=anti_proton Ekin[MeV]=1759.94 direction=(0.679055,0.367196,0.63565) material=G4_Fe - --> #secondaries=23 impactParameter[fm]=3.2319 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 520 projectile=pi+ Ekin[MeV]=17500.9 direction=(0.61308,0.135222,0.778362) material=G4_Al - --> #secondaries=21 impactParameter[fm]=0.482862 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=24 #NNcollisions=3 - Collision 521 projectile=D- Ekin[MeV]=20011.4 direction=(0.864741,0.00443069,0.502199) material=G4_Fe - --> #secondaries=37 impactParameter[fm]=1.70761 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 522 projectile=anti_sigma+ Ekin[MeV]=2293.91 direction=(0.812731,0.539207,0.220735) material=G4_Ar - --> #secondaries=7 impactParameter[fm]=3.79518 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=0 - Collision 523 projectile=D0 Ekin[MeV]=27056.5 direction=(0.607119,0.166502,0.776971) material=G4_Fe - --> #secondaries=13 impactParameter[fm]=0.76614 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 524 projectile=pi- Ekin[MeV]=22862.2 direction=(0.549023,0.428474,0.717624) material=G4_W - --> #secondaries=44 impactParameter[fm]=5.83544 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=180 #NNcollisions=2 - Collision 525 projectile=anti_deuteron Ekin[MeV]=20433.6 direction=(0.772313,0.512989,0.374666) material=G4_H - --> #secondaries=5 impactParameter[fm]=0.481407 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=1 #NNcollisions=1 - Collision 526 projectile=Ds+ Ekin[MeV]=1951.69 direction=(0.510746,0.579002,0.635527) material=G4_C - --> #secondaries=6 impactParameter[fm]=3.14726 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 527 projectile=anti_xi_b0 Ekin[MeV]=26281.2 direction=(0.0423361,0.741504,0.669612) material=G4_Al - --> #secondaries=30 impactParameter[fm]=1.60838 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=3 - Collision 528 projectile=kaon0L Ekin[MeV]=17409.1 direction=(0.341588,0.885047,0.316244) material=G4_Cu - --> #secondaries=13 impactParameter[fm]=2.47089 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 529 projectile=alpha Ekin[MeV]=13807.4 direction=(0.460215,0.366815,0.808485) material=G4_C - --> #secondaries=11 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 530 projectile=xi- Ekin[MeV]=10366.2 direction=(0.261052,0.556808,0.788554) material=G4_W - --> #secondaries=49 impactParameter[fm]=3.1447 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=3 - Collision 531 projectile=alpha Ekin[MeV]=20333.1 direction=(0.380909,0.263923,0.886145) material=G4_H - --> #secondaries=5 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 532 projectile=anti_Bs0 Ekin[MeV]=17172.2 direction=(0.186871,0.982122,0.0227096) material=G4_Pb - --> #secondaries=44 impactParameter[fm]=3.45435 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=203 #NNcollisions=1 - Collision 533 projectile=anti_neutron Ekin[MeV]=21688 direction=(0.32945,0.335396,0.882594) material=G4_Be - --> #secondaries=6 impactParameter[fm]=1.65929 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 534 projectile=anti_xi- Ekin[MeV]=14950 direction=(0.179348,0.859872,0.477969) material=G4_Al - --> #secondaries=24 impactParameter[fm]=1.91809 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 535 projectile=Ds- Ekin[MeV]=6516.99 direction=(0.809094,0.160116,0.565446) material=G4_Al - --> #secondaries=11 impactParameter[fm]=3.29164 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 536 projectile=kaon+ Ekin[MeV]=17396.2 direction=(0.361073,0.0691326,0.929972) material=G4_Fe - --> #secondaries=16 impactParameter[fm]=3.97659 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 537 projectile=kaon0S Ekin[MeV]=6882.01 direction=(0.832543,0.290045,0.471961) material=G4_Cu - --> #secondaries=23 impactParameter[fm]=2.46327 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=2 - Collision 538 projectile=omega_b- Ekin[MeV]=23334.9 direction=(0.861529,0.461216,0.212243) material=G4_C - --> #secondaries=11 impactParameter[fm]=0.640524 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 539 projectile=anti_omega- Ekin[MeV]=7626.76 direction=(0.795263,0.537738,0.279991) material=G4_He - --> #secondaries=5 impactParameter[fm]=2.34683 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 540 projectile=sigma+ Ekin[MeV]=10502.4 direction=(0.0108941,0.993616,0.112284) material=G4_Fe - --> #secondaries=41 impactParameter[fm]=2.85165 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=51 #NNcollisions=5 - Collision 541 projectile=sigma+ Ekin[MeV]=19174.3 direction=(0.113689,0.537827,0.835354) material=G4_C - --> #secondaries=15 impactParameter[fm]=1.12594 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 542 projectile=anti_xi0 Ekin[MeV]=6487.14 direction=(0.720102,0.615636,0.320072) material=G4_Cu - --> #secondaries=40 impactParameter[fm]=4.84102 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=1 - Collision 543 projectile=Ds+ Ekin[MeV]=14589.4 direction=(0.935921,0.348778,0.0490445) material=G4_He - --> #secondaries=6 impactParameter[fm]=2.88031 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 544 projectile=anti_hyperHe5 Ekin[MeV]=5208.05 direction=(0.496822,0.860342,0.113922) material=G4_Al - --> #secondaries=26 impactParameter[fm]=4.93183 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 545 projectile=alpha Ekin[MeV]=17396.9 direction=(0.144786,0.938511,0.313423) material=G4_Cu - --> #secondaries=33 impactParameter[fm]=4.92803 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=62 #NNcollisions=3 - Collision 546 projectile=hyperH4 Ekin[MeV]=4690.06 direction=(0.626172,0.394875,0.672296) material=G4_Cu - --> #secondaries=27 impactParameter[fm]=5.06687 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=0 - Collision 547 projectile=anti_lambda Ekin[MeV]=26024.8 direction=(0.581483,0.514129,0.630514) material=G4_W - --> #secondaries=39 impactParameter[fm]=6.99275 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=1 - Collision 548 projectile=hyperalpha Ekin[MeV]=25835.6 direction=(0.494309,0.607026,0.622237) material=G4_C - --> #secondaries=29 impactParameter[fm]=0.873785 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=7 - Collision 549 projectile=kaon0S Ekin[MeV]=17339 direction=(0.320031,0.629092,0.708395) material=G4_C - --> #secondaries=14 impactParameter[fm]=0.992124 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=10 #NNcollisions=1 - Collision 550 projectile=Ds- Ekin[MeV]=29465.4 direction=(0.0424982,0.997652,0.0537102) material=G4_He - --> #secondaries=10 impactParameter[fm]=0.461135 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 551 projectile=D0 Ekin[MeV]=14963.7 direction=(0.393406,0.678918,0.619921) material=G4_Al - --> #secondaries=13 impactParameter[fm]=3.68893 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 552 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=9685.73 direction=(0.644415,0.546054,0.535308) material=G4_H - --> #secondaries=4 impactParameter[fm]=1.93475 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 553 projectile=omega_b- Ekin[MeV]=5605.14 direction=(0.464301,0.799001,0.382127) material=G4_Ar - --> #secondaries=9 impactParameter[fm]=4.19798 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 554 projectile=Bs0 Ekin[MeV]=29049.8 direction=(0.737582,0.41467,0.532936) material=G4_W - --> #secondaries=19 impactParameter[fm]=7.16851 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=185 #NNcollisions=1 - Collision 555 projectile=anti_alpha Ekin[MeV]=10713.4 direction=(0.586045,0.709793,0.390826) material=G4_Si - --> #secondaries=33 impactParameter[fm]=3.0572 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=4 - Collision 556 projectile=anti_deuteron Ekin[MeV]=8715.61 direction=(0.581138,0.545649,0.603777) material=G4_Pb - --> #secondaries=64 impactParameter[fm]=5.45457 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=2 - Collision 557 projectile=sigma+ Ekin[MeV]=19077.5 direction=(0.544108,0.121534,0.830166) material=G4_He - --> #secondaries=9 impactParameter[fm]=1.81466 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 558 projectile=deuteron Ekin[MeV]=17598.3 direction=(0.407192,0.905307,0.120893) material=G4_C - --> #secondaries=12 impactParameter[fm]=2.17766 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 559 projectile=lambda_c+ Ekin[MeV]=11790.2 direction=(0.868365,0.114148,0.482609) material=G4_Si - --> #secondaries=25 impactParameter[fm]=2.34006 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=3 - Collision 560 projectile=xi_b0 Ekin[MeV]=10749.3 direction=(0.730451,0.520666,0.441982) material=G4_Ar - --> #secondaries=28 impactParameter[fm]=1.40873 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=1 - Collision 561 projectile=doublehyperdoubleneutron Ekin[MeV]=13994.1 direction=(0.800406,0.546815,0.245649) material=G4_Al - --> #secondaries=26 impactParameter[fm]=4.01676 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=23 #NNcollisions=3 - Collision 562 projectile=anti_hyperHe5 Ekin[MeV]=1414.36 direction=(0.403691,0.896295,0.183546) material=G4_H - --> #secondaries=5 impactParameter[fm]=1.78951 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=1 #NNcollisions=1 - Collision 563 projectile=anti_xi- Ekin[MeV]=1352.3 direction=(0.1507,0.53681,0.830135) material=G4_Si - --> #secondaries=12 impactParameter[fm]=2.9102 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=28 #NNcollisions=1 - Collision 564 projectile=hyperHe5 Ekin[MeV]=4318.32 direction=(0.393965,0.517445,0.759633) material=G4_Fe - --> #secondaries=11 impactParameter[fm]=5.59206 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=54 #NNcollisions=0 - Collision 565 projectile=pi- Ekin[MeV]=20994.7 direction=(0.629463,0.399223,0.666631) material=G4_Al - --> #secondaries=10 impactParameter[fm]=1.51876 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 566 projectile=pi+ Ekin[MeV]=11868.7 direction=(0.914063,0.23783,0.32852) material=G4_Pb - --> #secondaries=34 impactParameter[fm]=3.4638 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=0 - Collision 567 projectile=anti_neutron Ekin[MeV]=19931.4 direction=(0.780597,0.5603,0.277005) material=G4_Ar - --> #secondaries=17 impactParameter[fm]=6.01971 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 568 projectile=anti_lambda Ekin[MeV]=5112.75 direction=(0.864691,0.285872,0.413021) material=G4_Pb - --> #secondaries=11 impactParameter[fm]=6.77733 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 - Collision 569 projectile=proton Ekin[MeV]=14066.9 direction=(0.460311,0.887754,0.00261904) material=G4_W - --> #secondaries=17 impactParameter[fm]=5.8661 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=1 - Collision 570 projectile=anti_Bs0 Ekin[MeV]=16625.6 direction=(0.738021,0.550749,0.389873) material=G4_Cu - --> #secondaries=13 impactParameter[fm]=2.4627 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 571 projectile=lambda_b Ekin[MeV]=10406.5 direction=(0.181043,0.113778,0.976872) material=G4_Cu - --> #secondaries=19 impactParameter[fm]=1.22241 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=2 - Collision 572 projectile=neutron Ekin[MeV]=20515.3 direction=(0.634143,0.20773,0.744789) material=G4_W - --> #secondaries=47 impactParameter[fm]=5.59275 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=2 - Collision 573 projectile=anti_lambda Ekin[MeV]=8978.89 direction=(0.077511,0.84082,0.535737) material=G4_Si - --> #secondaries=26 impactParameter[fm]=1.93974 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 574 projectile=Bc- Ekin[MeV]=2551.81 direction=(0.0882136,0.375047,0.922799) material=G4_H - --> #secondaries=2 impactParameter[fm]=1.12464 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=0 - Collision 575 projectile=Bc+ Ekin[MeV]=12362.7 direction=(0.909036,0.367415,0.196621) material=G4_Be - --> #secondaries=5 impactParameter[fm]=1.25806 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 576 projectile=lambda Ekin[MeV]=7349.95 direction=(0.714853,0.697653,0.047592) material=G4_Pb - --> #secondaries=57 impactParameter[fm]=6.51658 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=2 - Collision 577 projectile=B+ Ekin[MeV]=25492.3 direction=(0.139331,0.615007,0.776114) material=G4_W - --> #secondaries=60 impactParameter[fm]=4.14147 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=180 #NNcollisions=3 - Collision 578 projectile=anti_sigma- Ekin[MeV]=6120.87 direction=(0.828346,0.524415,0.197058) material=G4_Al - --> #secondaries=14 impactParameter[fm]=1.32491 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 579 projectile=omega_b- Ekin[MeV]=15125.4 direction=(0.647437,0.687431,0.329036) material=G4_H - --> #secondaries=3 impactParameter[fm]=0.579815 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 580 projectile=lambda_b Ekin[MeV]=12156 direction=(0.119321,0.652179,0.748615) material=G4_W - --> #secondaries=32 impactParameter[fm]=5.5948 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=3 - Collision 581 projectile=anti_xi- Ekin[MeV]=16963.2 direction=(0.843054,0.534963,0.0554442) material=G4_H - --> #secondaries=4 impactParameter[fm]=0.17372 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=1 - Collision 582 projectile=He3 Ekin[MeV]=4914.93 direction=(0.294393,0.737476,0.607834) material=G4_Fe + j=0 anti_lambda p=(2542.33,26.2906,865.1962908.17) MeV + j=1 pi- p=(417.755,-188.275,-84.9905486.488) MeV + j=2 eta p=(1121.02,-236.606,748.81474.29) MeV + j=3 proton p=(1109.4,-23.2198,432.1861516.06) MeV + j=4 pi- p=(470.583,-37.97,286.952569.835) MeV + j=5 pi+ p=(-9.68263,163.344,50.7188220.969) MeV + j=6 pi- p=(1706.23,-176.995,285.1091744.51) MeV + j=7 pi+ p=(2560.33,202.073,724.5362672.18) MeV + j=8 pi0 p=(260.582,-102.674,104.716328.068) MeV + j=9 pi+ p=(66.9431,19.8473,-8.45801156.29) MeV + j=10 pi0 p=(432.762,100.626,129.693482.128) MeV + j=11 pi0 p=(6703.09,279.723,2372.417117.31) MeV + j=12 proton p=(589.975,70.6044,16.33661110.71) MeV + j=13 pi- p=(731.057,-44.3731,136.959758.057) MeV + j=14 proton p=(754.318,690.931,38.72791388.61) MeV + j=15 neutron p=(12.5959,-31.3024,176.181956.536) MeV + j=16 proton p=(-27.7534,7.97039,48.6166939.974) MeV + j=17 neutron p=(445.588,-128.227,81.09091050.88) MeV + j=18 neutron p=(-74.7861,63.1312,-109.002950.917) MeV + j=19 pi0 p=(455.488,-505.227,12.3805693.611) MeV + j=20 pi- p=(1080.21,-61.5279,60.31061092.59) MeV + j=21 pi+ p=(184.403,230.698,329.843464.222) MeV + j=22 neutron p=(454.723,561.491,237.6711208.85) MeV + j=23 pi0 p=(205.733,153.431,-55.2966295.201) MeV + j=24 neutron p=(1311.09,-128.257,757.4111786.58) MeV + j=25 pi0 p=(115.415,4.47791,126.982218.366) MeV + j=26 pi- p=(188.648,-208.848,-4.63754314.176) MeV + j=27 pi- p=(-113.035,168.76,59.6866253.572) MeV + j=28 neutron p=(122.379,-24.341,256.948982.026) MeV + j=29 deuteron p=(596.001,44.8363,284.1111988.94) MeV + j=30 proton p=(178.496,253.286,-122.233995.645) MeV + j=31 neutron p=(57.0916,-24.4408,-85.7842945.515) MeV + j=32 neutron p=(309.5,-166.183,-307.2941049.1) MeV + j=33 neutron p=(-147.531,174.63,37.6634967.71) MeV + j=34 proton p=(105.722,-245.459,-286.2721016.73) MeV + j=35 proton p=(-258.728,8.38357,-241.8541002.92) MeV + j=36 neutron p=(-294.814,64.0468,189.6881004.88) MeV + j=37 neutron p=(-23.5542,137.563,64.4777952.06) MeV + j=38 neutron p=(49.7352,-141.733,-316.9051002.88) MeV + j=39 proton p=(283.456,375.633,16.65471049.8) MeV + j=40 deuteron p=(286.851,-506.274,68.22391964.99) MeV + j=41 proton p=(-40.2024,88.4496,82.5566946.895) MeV + j=42 neutron p=(9.7616,-68.7449,-333.714999.484) MeV + j=43 neutron p=(-34.7076,328.226,-124.5231003.61) MeV + j=44 neutron p=(-169.477,130.503,192.107982.569) MeV + j=45 proton p=(248.248,-47.0168,-41.764972.592) MeV + j=46 neutron p=(167.422,-147.56,313.021015.17) MeV + j=47 neutron p=(-371.458,234.858,28.90611037.67) MeV + j=48 neutron p=(-8.20275,-109.659,137.609955.935) MeV + j=49 neutron p=(133.911,-385.046,37.04021024.86) MeV + j=50 proton p=(-204.775,-145.843,46.8223972.497) MeV + j=51 neutron p=(-37.0806,31.233,174.021956.774) MeV + j=52 neutron p=(-8.48112,27.2309,133.064949.37) MeV + j=53 proton p=(-26.2492,-9.18482,-139.636949.013) MeV + j=54 neutron p=(-58.9642,41.9614,47.7957943.56) MeV + j=55 neutron p=(61.2011,145.957,87.4366956.806) MeV + j=56 He3 p=(-215.19,191.14,-225.3672832.08) MeV + j=57 deuteron p=(6.20675,-231.791,71.73591891.25) MeV + j=58 proton p=(-59.284,-121.296,57.6664949.688) MeV + j=59 neutron p=(30.1241,86.6882,-20.3064944.255) MeV + j=60 alpha p=(27.5578,-34.0466,-432.3243752.62) MeV + j=61 neutron p=(20.7323,57.1599,58.8636943.369) MeV + j=62 alpha p=(-39.3244,-377.528,-129.5543748.89) MeV + j=63 proton p=(-72.0259,81.9197,-98.0616949.668) MeV + j=64 neutron p=(-57.5937,-25.7212,33.3997942.272) MeV + j=65 neutron p=(128.899,28.3387,-1.31411948.79) MeV + j=66 neutron p=(-8.96353,-33.9757,58.6162942.048) MeV + j=67 neutron p=(-54.6883,-69.643,17.9961943.9) MeV + j=68 neutron p=(-104.655,44.0837,21.6705946.651) MeV + j=69 neutron p=(-41.2666,-57.1612,-23.3319942.496) MeV + j=70 neutron p=(-49.3489,-3.5184,15.0063940.987) MeV + j=71 neutron p=(-24.918,-21.7254,-11.7582940.22) MeV + j=72 neutron p=(28.8178,-27.7206,22.7523940.691) MeV + j=73 gamma p=(-2.08517,1.91523,-2.775543.9648) MeV + j=74 gamma p=(-0.11434,-0.00744725,0.05836510.128591) MeV + j=75 I118 p=(1285.48,-403.759,628.104109818) MeV + Collision 301 projectile=xi0 Ekin[MeV]=17586.5 direction=(0.429723,0.76466,0.480244) material=G4_Ar + --> #secondaries=22 impactParameter[fm]=3.21875 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 302 projectile=anti_lambda_c+ Ekin[MeV]=20037 direction=(0.0131627,0.0753082,0.997073) material=G4_Ar + --> #secondaries=18 impactParameter[fm]=3.58631 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 303 projectile=anti_hyperHe5 Ekin[MeV]=1822.81 direction=(0.301332,0.615837,0.727973) material=G4_Al + --> #secondaries=23 impactParameter[fm]=4.18158 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=24 #NNcollisions=2 + Collision 304 projectile=deuteron Ekin[MeV]=18918.7 direction=(0.598255,0.507241,0.620321) material=G4_W + --> #secondaries=44 impactParameter[fm]=7.55573 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=180 #NNcollisions=0 + Collision 305 projectile=kaon- Ekin[MeV]=25657.5 direction=(0.482665,0.800571,0.355135) material=G4_Fe + --> #secondaries=19 impactParameter[fm]=3.64592 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 306 projectile=B+ Ekin[MeV]=4946.16 direction=(0.596608,0.489802,0.63573) material=G4_Si + --> #secondaries=6 impactParameter[fm]=1.05368 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 307 projectile=anti_xi_b0 Ekin[MeV]=17874 direction=(0.635028,0.222301,0.739812) material=G4_He + --> #secondaries=5 impactParameter[fm]=1.35717 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 308 projectile=deuteron Ekin[MeV]=5419.44 direction=(0.617657,0.706273,0.345946) material=G4_W + --> #secondaries=53 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 309 projectile=Bc- Ekin[MeV]=6073.82 direction=(0.146947,0.922984,0.355679) material=G4_H + --> #secondaries=2 impactParameter[fm]=0.322555 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 310 projectile=hyperHe5 Ekin[MeV]=14905.4 direction=(0.768185,0.235488,0.595346) material=G4_C + --> #secondaries=19 impactParameter[fm]=1.76008 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=5 #NNcollisions=3 + Collision 311 projectile=anti_hyperalpha Ekin[MeV]=18098.1 direction=(0.426854,0.774745,0.466439) material=G4_He + --> #secondaries=7 impactParameter[fm]=3.61098 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=4 #NNcollisions=1 + Collision 312 projectile=doublehyperdoubleneutron Ekin[MeV]=8148.52 direction=(0.797386,0.349104,0.492242) material=G4_Si + --> #secondaries=15 impactParameter[fm]=6.15411 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=25 #NNcollisions=0 + Collision 313 projectile=Ds- Ekin[MeV]=15694 direction=(0.235892,0.233486,0.943313) material=G4_C + --> #secondaries=6 impactParameter[fm]=2.83203 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 314 projectile=Ds+ Ekin[MeV]=18601.2 direction=(0.60452,0.647053,0.464627) material=G4_He + --> #secondaries=4 impactParameter[fm]=0.810534 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 315 projectile=pi+ Ekin[MeV]=3672.51 direction=(0.727857,0.612637,0.308057) material=G4_Si + --> #secondaries=26 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 316 projectile=anti_He3 Ekin[MeV]=19763.6 direction=(0.637591,0.36136,0.680365) material=G4_Si + --> #secondaries=7 impactParameter[fm]=6.89426 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 317 projectile=anti_deuteron Ekin[MeV]=2704.51 direction=(0.46206,0.678907,0.570601) material=G4_W + --> #secondaries=61 impactParameter[fm]=5.0321 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=2 + Collision 318 projectile=omega_c0 Ekin[MeV]=5651.3 direction=(0.464358,0.528832,0.710429) material=G4_H + --> #secondaries=4 impactParameter[fm]=1.51378 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 319 projectile=neutron Ekin[MeV]=27151 direction=(0.681159,0.396249,0.615637) material=G4_W + --> #secondaries=101 impactParameter[fm]=2.90975 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=175 #NNcollisions=7 + Collision 320 projectile=Ds+ Ekin[MeV]=11334.2 direction=(0.666003,0.745902,0.00840808) material=G4_Be + --> #secondaries=9 impactParameter[fm]=2.686 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 321 projectile=anti_omega- Ekin[MeV]=21791.3 direction=(0.46161,0.597375,0.655789) material=G4_Fe + --> #secondaries=58 impactParameter[fm]=2.01968 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=51 #NNcollisions=4 + Collision 322 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=10303.2 direction=(0.00513448,0.633783,0.773494) material=G4_H + --> #secondaries=6 impactParameter[fm]=3.24148 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 323 projectile=hyperH4 Ekin[MeV]=22817.2 direction=(0.191197,0.940972,0.279312) material=G4_Fe + --> #secondaries=45 impactParameter[fm]=2.71073 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=48 #NNcollisions=6 + Collision 324 projectile=anti_xi_c+ Ekin[MeV]=1396.04 direction=(0.0577116,0.0554856,0.99679) material=G4_Be + --> #secondaries=6 impactParameter[fm]=2.61758 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 325 projectile=Ds+ Ekin[MeV]=2760.72 direction=(0.693094,0.243922,0.678323) material=G4_Ar + --> #secondaries=6 impactParameter[fm]=2.34987 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 326 projectile=xi_b0 Ekin[MeV]=19218.9 direction=(0.733509,0.640063,0.228655) material=G4_Al + --> #secondaries=17 impactParameter[fm]=2.20022 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 327 projectile=D0 Ekin[MeV]=20212.4 direction=(0.160781,0.702529,0.693255) material=G4_Al + --> #secondaries=12 impactParameter[fm]=1.63213 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=0 + Collision 328 projectile=sigma+ Ekin[MeV]=13995 direction=(0.620095,0.188449,0.761557) material=G4_Al + --> #secondaries=26 impactParameter[fm]=2.57413 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 329 projectile=anti_xi_b- Ekin[MeV]=17962.4 direction=(0.579,0.790224,0.200761) material=G4_Cu + --> #secondaries=16 impactParameter[fm]=4.9719 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=0 + Collision 330 projectile=xi0 Ekin[MeV]=17433.6 direction=(0.712037,0.509163,0.483483) material=G4_W + --> #secondaries=60 impactParameter[fm]=5.18119 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=3 + Collision 331 projectile=anti_omega- Ekin[MeV]=1312.52 direction=(0.631674,0.585967,0.507573) material=G4_Al + --> #secondaries=10 impactParameter[fm]=4.13837 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 332 projectile=xi_b0 Ekin[MeV]=10039.5 direction=(0.594282,0.491212,0.63682) material=G4_H + --> #secondaries=2 impactParameter[fm]=0.930503 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 333 projectile=He3 Ekin[MeV]=8427.4 direction=(0.23286,0.169528,0.95762) material=G4_C --> #secondaries=9 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 583 projectile=anti_omega_b- Ekin[MeV]=18398.4 direction=(0.697765,0.0411067,0.715147) material=G4_Cu - --> #secondaries=40 impactParameter[fm]=3.13372 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=3 - Collision 584 projectile=anti_sigma- Ekin[MeV]=15275.9 direction=(0.586012,0.80653,0.0781001) material=G4_Pb - --> #secondaries=20 impactParameter[fm]=8.09989 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 - Collision 585 projectile=xi_b- Ekin[MeV]=29399.5 direction=(0.303125,0.299356,0.904711) material=G4_Si - --> #secondaries=5 impactParameter[fm]=3.62312 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 586 projectile=xi0 Ekin[MeV]=17406.1 direction=(0.612087,0.788798,0.056097) material=G4_Pb - --> #secondaries=76 impactParameter[fm]=2.86083 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=3 - Collision 587 projectile=Ds- Ekin[MeV]=13673.2 direction=(0.0298209,0.53219,0.8461) material=G4_Pb - --> #secondaries=47 impactParameter[fm]=2.86177 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=2 - Collision 588 projectile=anti_hypertriton Ekin[MeV]=22748.5 direction=(0.871508,0.0393904,0.488797) material=G4_Be - --> #secondaries=12 impactParameter[fm]=4.67511 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=9 #NNcollisions=1 - Collision 589 projectile=doublehyperdoubleneutron Ekin[MeV]=16563.8 direction=(0.600984,0.799259,0.00181318) material=G4_H - --> #secondaries=4 impactParameter[fm]=3.17684 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 590 projectile=He3 Ekin[MeV]=15588.8 direction=(0.235134,0.688362,0.6862) material=G4_C - --> #secondaries=22 impactParameter[fm]=1.38984 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=6 #NNcollisions=5 - Collision 591 projectile=hyperHe5 Ekin[MeV]=9357.16 direction=(0.977869,0.207403,0.0275148) material=G4_C - --> #secondaries=10 impactParameter[fm]=3.03663 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 592 projectile=proton Ekin[MeV]=18536.9 direction=(0.654976,0.357076,0.66596) material=G4_Fe - --> #secondaries=58 impactParameter[fm]=1.37201 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=50 #NNcollisions=6 - Collision 593 projectile=xi0 Ekin[MeV]=21277.5 direction=(0.235485,0.771302,0.591304) material=G4_Al - --> #secondaries=24 impactParameter[fm]=3.57059 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 594 projectile=anti_hypertriton Ekin[MeV]=27158.3 direction=(0.50501,0.842642,0.186864) material=G4_H - --> #secondaries=6 impactParameter[fm]=0.472228 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 595 projectile=anti_hyperH4 Ekin[MeV]=4011.21 direction=(0.67074,0.108011,0.733786) material=G4_He - --> #secondaries=20 impactParameter[fm]=1.92198 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=3 - Collision 596 projectile=Bs0 Ekin[MeV]=7561.51 direction=(0.888033,0.351421,0.29648) material=G4_W - --> #secondaries=14 impactParameter[fm]=5.27592 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=182 #NNcollisions=1 - Collision 597 projectile=anti_sigma- Ekin[MeV]=5998.51 direction=(0.0714175,0.184019,0.980325) material=G4_Cu - --> #secondaries=30 impactParameter[fm]=3.57493 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=1 - Collision 598 projectile=sigma- Ekin[MeV]=17246.7 direction=(0.54809,0.215934,0.808066) material=G4_Cu - --> #secondaries=9 impactParameter[fm]=1.6449 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=0 - Collision 599 projectile=anti_He3 Ekin[MeV]=16282.3 direction=(0.853605,0.421524,0.306067) material=G4_W - --> #secondaries=67 impactParameter[fm]=6.64098 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=181 #NNcollisions=2 - Collision 600 projectile=hypertriton Ekin[MeV]=2854.8 direction=(0.630617,0.483446,0.607125) material=G4_Ar - --> #secondaries=27 impactParameter[fm]=2.09214 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=30 #NNcollisions=0 + Collision 334 projectile=Bs0 Ekin[MeV]=18144.3 direction=(0.719186,0.55717,0.415131) material=G4_Cu + --> #secondaries=15 impactParameter[fm]=5.15733 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 335 projectile=omega- Ekin[MeV]=24028.4 direction=(0.801448,0.0948041,0.590503) material=G4_Ar + --> #secondaries=36 impactParameter[fm]=3.65322 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=1 + Collision 336 projectile=kaon- Ekin[MeV]=29231.6 direction=(0.934468,0.223911,0.276826) material=G4_He + --> #secondaries=12 impactParameter[fm]=2.1077 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 337 projectile=anti_hyperalpha Ekin[MeV]=26156.7 direction=(0.0229421,0.171958,0.984837) material=G4_Fe + --> #secondaries=74 impactParameter[fm]=1.06871 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=4 + Collision 338 projectile=kaon0L Ekin[MeV]=14305.1 direction=(0.557249,0.823313,0.10784) material=G4_C + --> #secondaries=6 impactParameter[fm]=2.89577 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 339 projectile=anti_xi_c0 Ekin[MeV]=28355.2 direction=(0.769311,0.601236,0.216046) material=G4_Pb + --> #secondaries=70 impactParameter[fm]=4.16502 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=4 + Collision 340 projectile=anti_hypertriton Ekin[MeV]=25883.3 direction=(0.793397,0.606522,0.0514999) material=G4_Pb + --> #secondaries=169 impactParameter[fm]=2.95669 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=4 + Collision 341 projectile=xi_c+ Ekin[MeV]=25734 direction=(0.557837,0.497419,0.664374) material=G4_W + --> #secondaries=32 impactParameter[fm]=0.208532 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=1 + Collision 342 projectile=lambda_c+ Ekin[MeV]=22533.6 direction=(0.78996,0.182302,0.58543) material=G4_He + --> #secondaries=8 impactParameter[fm]=0.411148 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 + Collision 343 projectile=hyperalpha Ekin[MeV]=22133.2 direction=(0.25582,0.301285,0.918577) material=G4_H + --> #secondaries=7 impactParameter[fm]=0.372381 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=0 #NNcollisions=2 + Collision 344 projectile=B0 Ekin[MeV]=18423.2 direction=(0.2685,0.570933,0.77585) material=G4_Pb + --> #secondaries=40 impactParameter[fm]=3.90918 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=2 + Collision 345 projectile=anti_xi_c0 Ekin[MeV]=8852.72 direction=(0.619828,0.701444,0.351837) material=G4_Fe + --> #secondaries=9 impactParameter[fm]=4.87027 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 346 projectile=D- Ekin[MeV]=11719 direction=(0.280898,0.629905,0.724097) material=G4_Cu + --> #secondaries=24 impactParameter[fm]=3.26797 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=2 + Collision 347 projectile=anti_He3 Ekin[MeV]=7320.72 direction=(0.857229,0.199219,0.474837) material=G4_Fe + --> #secondaries=15 impactParameter[fm]=5.34696 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=55 #NNcollisions=2 + Collision 348 projectile=anti_alpha Ekin[MeV]=29223.7 direction=(0.79727,0.42403,0.429603) material=G4_Ar + --> #secondaries=34 impactParameter[fm]=5.06978 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=40 #NNcollisions=2 + Collision 349 projectile=omega- Ekin[MeV]=13295 direction=(0.371686,0.614383,0.695976) material=G4_Si + --> #secondaries=22 impactParameter[fm]=1.55244 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 350 projectile=Bc+ Ekin[MeV]=13238 direction=(0.714754,0.507932,0.480762) material=G4_Be + --> #secondaries=5 impactParameter[fm]=2.45983 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 351 projectile=sigma- Ekin[MeV]=5625.67 direction=(0.644722,0.257669,0.71968) material=G4_He + --> #secondaries=7 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 352 projectile=anti_proton Ekin[MeV]=27988.5 direction=(0.0458764,0.417774,0.907392) material=G4_Ar + --> #secondaries=24 impactParameter[fm]=4.39306 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 353 projectile=anti_lambda Ekin[MeV]=29870.5 direction=(0.112443,0.992467,0.0486439) material=G4_Si + --> #secondaries=9 impactParameter[fm]=4.76898 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=29 #NNcollisions=0 + Collision 354 projectile=anti_hyperH4 Ekin[MeV]=29901.4 direction=(0.0550548,0.698827,0.713169) material=G4_Cu + --> #secondaries=35 impactParameter[fm]=4.30396 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=60 #NNcollisions=4 + Collision 355 projectile=omega_c0 Ekin[MeV]=17494.3 direction=(0.18948,0.954036,0.232192) material=G4_Be + --> #secondaries=7 impactParameter[fm]=2.11683 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=1 + Collision 356 projectile=neutron Ekin[MeV]=28170.5 direction=(0.509599,0.5703,0.644256) material=G4_Pb + --> #secondaries=46 impactParameter[fm]=6.18426 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=2 + Collision 357 projectile=anti_xi_c0 Ekin[MeV]=16229.2 direction=(0.250422,0.860955,0.442769) material=G4_Cu + --> #secondaries=34 impactParameter[fm]=2.05131 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=2 + Collision 358 projectile=anti_proton Ekin[MeV]=26203.9 direction=(0.528981,0.622239,0.577059) material=G4_Be + --> #secondaries=6 impactParameter[fm]=1.3821 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 359 projectile=Bc+ Ekin[MeV]=24595.1 direction=(0.410093,0.660995,0.628418) material=G4_Cu + --> #secondaries=21 impactParameter[fm]=3.14336 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=64 #NNcollisions=0 + Collision 360 projectile=anti_xi- Ekin[MeV]=21453 direction=(0.289055,0.624754,0.725348) material=G4_Pb + --> #secondaries=55 impactParameter[fm]=5.86743 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=2 + Collision 361 projectile=kaon+ Ekin[MeV]=21034.8 direction=(0.50912,0.518479,0.687005) material=G4_Be + --> #secondaries=10 impactParameter[fm]=1.56929 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 362 projectile=anti_D0 Ekin[MeV]=12915.7 direction=(0.739805,0.60543,0.293503) material=G4_H + --> #secondaries=8 impactParameter[fm]=0.646863 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 363 projectile=hyperHe5 Ekin[MeV]=17506.6 direction=(0.594404,0.561114,0.576052) material=G4_Pb + --> #secondaries=30 impactParameter[fm]=7.88232 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=205 #NNcollisions=2 + Collision 364 projectile=hypertriton Ekin[MeV]=3735.07 direction=(0.0928752,0.637168,0.765109) material=G4_Cu + --> #secondaries=25 impactParameter[fm]=4.75945 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=56 #NNcollisions=1 + Collision 365 projectile=hyperH4 Ekin[MeV]=27290.8 direction=(0.385506,0.61853,0.684693) material=G4_W + --> #secondaries=43 impactParameter[fm]=6.71216 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=184 #NNcollisions=3 + Collision 366 projectile=xi- Ekin[MeV]=7949 direction=(0.765346,0.448615,0.461509) material=G4_Cu + --> #secondaries=22 impactParameter[fm]=4.92378 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 367 projectile=Bc- Ekin[MeV]=12353 direction=(0.118133,0.633486,0.764683) material=G4_Cu + --> #secondaries=21 impactParameter[fm]=4.02811 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=2 + Collision 368 projectile=anti_xi_b0 Ekin[MeV]=19051 direction=(0.77797,0.59352,0.206144) material=G4_Fe + --> #secondaries=24 impactParameter[fm]=0.986061 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=51 #NNcollisions=3 + Collision 369 projectile=pi+ Ekin[MeV]=26775.7 direction=(0.308242,0.932969,0.185891) material=G4_Si + --> #secondaries=20 impactParameter[fm]=1.98624 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 370 projectile=lambda Ekin[MeV]=20894.3 direction=(0.447945,0.201873,0.870972) material=G4_Pb + --> #secondaries=71 impactParameter[fm]=1.74824 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=199 #NNcollisions=6 + Collision 371 projectile=Bs0 Ekin[MeV]=20783 direction=(0.78765,0.409057,0.460739) material=G4_W + --> #secondaries=12 impactParameter[fm]=3.7154 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=185 #NNcollisions=1 + Collision 372 projectile=D- Ekin[MeV]=23115 direction=(0.402534,0.0901805,0.910952) material=G4_Al + --> #secondaries=17 impactParameter[fm]=3.6315 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 373 projectile=proton Ekin[MeV]=3483.4 direction=(0.701233,0.414116,0.580328) material=G4_Al + --> #secondaries=22 impactParameter[fm]=2.60573 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=22 #NNcollisions=2 + Collision 374 projectile=lambda_b Ekin[MeV]=7850.03 direction=(0.536931,0.837996,0.0973013) material=G4_Ar + --> #secondaries=8 impactParameter[fm]=4.35319 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 375 projectile=proton Ekin[MeV]=4316.01 direction=(0.0472046,0.943551,0.327847) material=G4_Fe + --> #secondaries=17 impactParameter[fm]=3.3526 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=0 + Collision 376 projectile=anti_proton Ekin[MeV]=25397.9 direction=(0.624828,0.780302,0.0268062) material=G4_Cu + --> #secondaries=37 impactParameter[fm]=1.20584 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=1 + Collision 377 projectile=anti_xi_b0 Ekin[MeV]=10759.1 direction=(0.701525,0.702615,0.119139) material=G4_Cu + --> #secondaries=19 impactParameter[fm]=3.55072 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=1 + Collision 378 projectile=neutron Ekin[MeV]=15025.1 direction=(0.602663,0.532824,0.59405) material=G4_Si + --> #secondaries=28 impactParameter[fm]=1.62509 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=4 + Collision 379 projectile=hyperHe5 Ekin[MeV]=23244.8 direction=(0.695265,0.360063,0.622062) material=G4_C + --> #secondaries=16 impactParameter[fm]=2.64298 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=9 #NNcollisions=2 + Collision 380 projectile=pi- Ekin[MeV]=15384.5 direction=(0.661385,0.396337,0.636778) material=G4_H + --> #secondaries=5 impactParameter[fm]=1.28668 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 381 projectile=triton Ekin[MeV]=6072.2 direction=(0.352913,0.935587,0.0113934) material=G4_He + --> #secondaries=7 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 382 projectile=hyperHe5 Ekin[MeV]=17649.6 direction=(0.845717,0.0873439,0.526434) material=G4_Cu + --> #secondaries=32 impactParameter[fm]=5.51172 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=60 #NNcollisions=3 + Collision 383 projectile=anti_doublehyperH4 Ekin[MeV]=15565.1 direction=(0.896176,0.424603,0.128764) material=G4_W + --> #secondaries=74 impactParameter[fm]=4.14562 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=5 + Collision 384 projectile=anti_omega- Ekin[MeV]=24364 direction=(0.661422,0.417181,0.623283) material=G4_Al + --> #secondaries=20 impactParameter[fm]=4.14706 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 385 projectile=anti_deuteron Ekin[MeV]=9642.38 direction=(0.7867,0.372224,0.492495) material=G4_Al + --> #secondaries=29 impactParameter[fm]=2.58477 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 386 projectile=anti_lambda_b Ekin[MeV]=29732.3 direction=(0.280821,0.856595,0.432879) material=G4_C + --> #secondaries=18 impactParameter[fm]=2.16976 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 + Collision 387 projectile=sigma+ Ekin[MeV]=11511.8 direction=(0.201043,0.785094,0.58584) material=G4_Pb + --> #secondaries=75 impactParameter[fm]=4.40058 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=6 + Collision 388 projectile=Bs0 Ekin[MeV]=19662.7 direction=(0.642281,0.52021,0.562901) material=G4_Be + --> #secondaries=6 impactParameter[fm]=0.702388 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 389 projectile=anti_neutron Ekin[MeV]=24257.8 direction=(0.435146,0.284137,0.85435) material=G4_He + --> #secondaries=13 impactParameter[fm]=1.18755 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=4 #NNcollisions=1 + Collision 390 projectile=xi_b- Ekin[MeV]=6966.92 direction=(0.683088,0.704264,0.193397) material=G4_Be + --> #secondaries=6 impactParameter[fm]=2.47426 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 391 projectile=kaon+ Ekin[MeV]=15403.7 direction=(0.331106,0.550397,0.766441) material=G4_Fe + --> #secondaries=20 impactParameter[fm]=4.22958 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 392 projectile=anti_xi- Ekin[MeV]=2707.34 direction=(0.68402,0.710484,0.165318) material=G4_H + --> #secondaries=3 impactParameter[fm]=0.469645 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 393 projectile=doublehyperH4 Ekin[MeV]=3259.28 direction=(0.622288,0.778085,0.0856784) material=G4_Al + --> #secondaries=15 impactParameter[fm]=3.66834 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 394 projectile=Bc+ Ekin[MeV]=11013.5 direction=(0.917636,0.37934,0.118512) material=G4_He + --> #secondaries=9 impactParameter[fm]=0.952177 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=2 #NNcollisions=2 + Collision 395 projectile=D+ Ekin[MeV]=1104.61 direction=(0.833671,0.486557,0.261257) material=G4_C + --> #secondaries=8 impactParameter[fm]=1.08905 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=10 #NNcollisions=1 + Collision 396 projectile=omega_c0 Ekin[MeV]=26542.7 direction=(0.587771,0.742408,0.321491) material=G4_Al + --> #secondaries=32 impactParameter[fm]=0.619296 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=3 + Collision 397 projectile=kaon0L Ekin[MeV]=26051.8 direction=(0.259241,0.525371,0.81042) material=G4_Cu + --> #secondaries=8 impactParameter[fm]=5.34018 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=0 + Collision 398 projectile=anti_hyperalpha Ekin[MeV]=16795.8 direction=(0.0441302,0.590751,0.805646) material=G4_C + --> #secondaries=20 impactParameter[fm]=1.20266 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=4 + Collision 399 projectile=pi- Ekin[MeV]=13339.9 direction=(0.81432,0.0795206,0.574943) material=G4_H + --> #secondaries=4 impactParameter[fm]=1.07569 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 400 projectile=anti_hyperHe5 Ekin[MeV]=18614.7 direction=(0.596272,0.212717,0.774087) material=G4_H + --> #secondaries=6 impactParameter[fm]=2.18626 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=0 #NNcollisions=1 List of produced secondaries: - j=0 neutron p=(579.927,529.277,1038.421605.47) MeV - j=1 lambda p=(577.879,38.6403,97.87681260.86) MeV - j=2 proton p=(702.326,605.307,435.5451389.14) MeV - j=3 neutron p=(126.913,461.575,405.7031129.84) MeV - j=4 neutron p=(252.442,-112.757,383.6261051.85) MeV - j=5 proton p=(104.154,587.36,204.3351130.46) MeV - j=6 neutron p=(97.5468,210.19,69.5483970.214) MeV - j=7 neutron p=(582.238,-98.1986,366.2621168.58) MeV - j=8 neutron p=(-302.301,-21.8106,100.932992.387) MeV - j=9 proton p=(45.5416,149.711,-10.9147951.294) MeV - j=10 deuteron p=(-363.507,-645.53,319.262041.74) MeV - j=11 proton p=(52.1429,-37.6041,-249.574973.023) MeV - j=12 deuteron p=(373.333,131.845,124.391920.98) MeV - j=13 alpha p=(-221.993,39.5721,269.3493743.9) MeV - j=14 deuteron p=(64.3884,417.739,-223.8431935.63) MeV - j=15 deuteron p=(-170.597,281.905,94.39541906.67) MeV - j=16 proton p=(-53.3889,-93.2071,172.401960.007) MeV - j=17 neutron p=(12.2786,-27.0501,89.976944.331) MeV - j=18 neutron p=(117.547,-185.014,1.41157964.797) MeV - j=19 triton p=(-41.1983,102.061,-146.5422814.89) MeV - j=20 proton p=(141.101,170.365,-94.2495968.592) MeV - j=21 neutron p=(-49.55,72.7375,102.456949.224) MeV - j=22 proton p=(-115.632,-1.6562,-16.833945.522) MeV - j=23 alpha p=(371.467,32.9282,-213.8573752.09) MeV - j=24 deuteron p=(153.164,-39.3137,145.91887.91) MeV - j=25 neutron p=(88.3926,-112.208,6.78903950.386) MeV - j=26 alpha p=(42.834,-28.6224,-423.3083751.69) MeV - Collision 601 projectile=anti_lambda Ekin[MeV]=5100.12 direction=(0.705752,0.600792,0.375451) material=G4_Fe - --> #secondaries=27 impactParameter[fm]=3.79352 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 602 projectile=anti_neutron Ekin[MeV]=7091.95 direction=(0.922507,0.368925,0.11347) material=G4_Pb - --> #secondaries=76 impactParameter[fm]=5.138 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=2 - Collision 603 projectile=anti_omega_b- Ekin[MeV]=8491.19 direction=(0.810721,0.416237,0.411677) material=G4_Be - --> #secondaries=5 impactParameter[fm]=2.15753 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 604 projectile=xi_b- Ekin[MeV]=4234.98 direction=(0.363511,0.336657,0.868632) material=G4_Ar - --> #secondaries=12 impactParameter[fm]=0.754831 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=0 - Collision 605 projectile=anti_hyperHe5 Ekin[MeV]=21989.6 direction=(0.786204,0.0671284,0.614311) material=G4_C - --> #secondaries=11 impactParameter[fm]=5.66023 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 606 projectile=omega- Ekin[MeV]=25144.8 direction=(0.503045,0.82508,0.257273) material=G4_C - --> #secondaries=11 impactParameter[fm]=3.45635 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 607 projectile=triton Ekin[MeV]=25475.7 direction=(0.456707,0.804494,0.379746) material=G4_Cu - --> #secondaries=42 impactParameter[fm]=4.16841 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=61 #NNcollisions=7 - Collision 608 projectile=anti_neutron Ekin[MeV]=7715.59 direction=(0.714439,0.626991,0.310579) material=G4_Be - --> #secondaries=17 impactParameter[fm]=2.04539 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=3 - Collision 609 projectile=anti_He3 Ekin[MeV]=5484.78 direction=(0.327682,0.648325,0.68724) material=G4_Al - --> #secondaries=13 impactParameter[fm]=4.59753 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 610 projectile=lambda Ekin[MeV]=1344.63 direction=(0.988102,0.145056,0.0511168) material=G4_Cu - --> #secondaries=22 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 611 projectile=deuteron Ekin[MeV]=2821.4 direction=(0.379227,0.747852,0.54489) material=G4_H - --> #secondaries=3 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 612 projectile=xi_c+ Ekin[MeV]=1687.48 direction=(0.581044,0.0806073,0.809871) material=G4_Ar - --> #secondaries=8 impactParameter[fm]=3.47275 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=0 - Collision 613 projectile=anti_alpha Ekin[MeV]=27398.6 direction=(0.881451,0.243706,0.404538) material=G4_Fe - --> #secondaries=28 impactParameter[fm]=5.33402 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=52 #NNcollisions=2 - Collision 614 projectile=anti_doublehyperH4 Ekin[MeV]=6293.07 direction=(0.353933,0.835437,0.420449) material=G4_H - --> #secondaries=7 impactParameter[fm]=3.06129 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=1 #NNcollisions=1 - Collision 615 projectile=anti_sigma+ Ekin[MeV]=7265.14 direction=(0.22739,0.913475,0.337429) material=G4_Al - --> #secondaries=6 impactParameter[fm]=2.088 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 616 projectile=anti_neutron Ekin[MeV]=15929.3 direction=(0.817549,0.218072,0.532971) material=G4_He - --> #secondaries=11 impactParameter[fm]=2.5079 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 617 projectile=anti_hyperalpha Ekin[MeV]=8498.27 direction=(0.0395242,0.968768,0.2448) material=G4_C - --> #secondaries=19 impactParameter[fm]=2.69052 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=10 #NNcollisions=2 - Collision 618 projectile=lambda_b Ekin[MeV]=23988 direction=(0.639497,0.429296,0.637769) material=G4_W - --> #secondaries=41 impactParameter[fm]=5.59635 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=178 #NNcollisions=3 - Collision 619 projectile=anti_B0 Ekin[MeV]=2890.63 direction=(0.343157,0.938864,0.0278797) material=G4_Si - --> #secondaries=10 impactParameter[fm]=3.99476 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 620 projectile=anti_neutron Ekin[MeV]=21896.4 direction=(0.587963,0.706679,0.393579) material=G4_H - --> #secondaries=9 impactParameter[fm]=0.944268 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=1 - Collision 621 projectile=D0 Ekin[MeV]=5539.41 direction=(0.589479,0.702078,0.3995) material=G4_Be - --> #secondaries=7 impactParameter[fm]=2.61064 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 622 projectile=anti_deuteron Ekin[MeV]=10457 direction=(0.158484,0.953151,0.257654) material=G4_C - --> #secondaries=18 impactParameter[fm]=1.4332 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=12 #NNcollisions=3 - Collision 623 projectile=anti_xi_b0 Ekin[MeV]=1852.67 direction=(0.434286,0.888011,0.151103) material=G4_Pb - --> #secondaries=11 impactParameter[fm]=7.38308 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=0 - Collision 624 projectile=hyperalpha Ekin[MeV]=8227.75 direction=(0.493938,0.112317,0.862212) material=G4_Pb - --> #secondaries=62 impactParameter[fm]=6.0805 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=198 #NNcollisions=2 - Collision 625 projectile=hyperHe5 Ekin[MeV]=7529.36 direction=(0.813266,0.15747,0.560179) material=G4_He - --> #secondaries=7 impactParameter[fm]=2.73305 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=2 #NNcollisions=0 - Collision 626 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=26030.6 direction=(0.524687,0.773489,0.355553) material=G4_H - --> #secondaries=3 impactParameter[fm]=1.63231 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=0 - Collision 627 projectile=anti_alpha Ekin[MeV]=16772.9 direction=(0.90243,0.241956,0.356478) material=G4_C - --> #secondaries=18 impactParameter[fm]=3.44913 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=10 #NNcollisions=2 - Collision 628 projectile=anti_deuteron Ekin[MeV]=1365.06 direction=(0.483093,0.628939,0.609145) material=G4_He - --> #secondaries=11 impactParameter[fm]=2.43975 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=2 - Collision 629 projectile=proton Ekin[MeV]=20636.1 direction=(0.775801,0.596864,0.204661) material=G4_Ar - --> #secondaries=34 impactParameter[fm]=1.49487 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=3 - Collision 630 projectile=lambda Ekin[MeV]=13475 direction=(0.048989,0.975814,0.213041) material=G4_Cu - --> #secondaries=38 impactParameter[fm]=3.66873 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=4 - Collision 631 projectile=xi- Ekin[MeV]=21330.9 direction=(0.765592,0.214147,0.606638) material=G4_Ar - --> #secondaries=19 impactParameter[fm]=2.17991 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=0 - Collision 632 projectile=anti_xi- Ekin[MeV]=20288.7 direction=(0.649525,0.515064,0.559309) material=G4_Pb - --> #secondaries=45 impactParameter[fm]=7.42117 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=2 - Collision 633 projectile=D0 Ekin[MeV]=4821.35 direction=(0.659494,0.579631,0.478639) material=G4_He - --> #secondaries=5 impactParameter[fm]=1.15445 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 634 projectile=Ds+ Ekin[MeV]=9825.18 direction=(0.814353,0.188093,0.549045) material=G4_He - --> #secondaries=7 impactParameter[fm]=2.52366 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 635 projectile=anti_hypertriton Ekin[MeV]=15984.2 direction=(0.633348,0.636713,0.439848) material=G4_Be - --> #secondaries=21 impactParameter[fm]=0.964563 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=3 - Collision 636 projectile=anti_omega_b- Ekin[MeV]=25630.5 direction=(0.571516,0.45316,0.684116) material=G4_Si - --> #secondaries=13 impactParameter[fm]=3.4445 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 637 projectile=sigma- Ekin[MeV]=20546.3 direction=(0.249602,0.923389,0.291635) material=G4_Pb - --> #secondaries=89 impactParameter[fm]=5.50065 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=3 - Collision 638 projectile=He3 Ekin[MeV]=5934.31 direction=(0.940778,0.301858,0.154335) material=G4_Cu + j=0 pi- p=(253.437,266.158,220.028450.514) MeV + j=1 pi+ p=(2033.07,661.521,2725.913467.14) MeV + j=2 pi+ p=(705.34,297.285,876.6181172.1) MeV + j=3 pi- p=(-247.442,-0.736735,-274.882395.307) MeV + j=4 pi0 p=(174.482,-184.222,65.4491294.761) MeV + j=5 anti_hyperH4 p=(10767.6,3842.57,14154.818613.2) MeV + Collision 401 projectile=lambda_c+ Ekin[MeV]=4160.36 direction=(0.46302,0.786184,0.4093) material=G4_C + --> #secondaries=9 impactParameter[fm]=1.06205 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 402 projectile=anti_alpha Ekin[MeV]=13530.5 direction=(0.884569,0.39425,0.24921) material=G4_H + --> #secondaries=13 impactParameter[fm]=1.03532 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 403 projectile=anti_sigma- Ekin[MeV]=5741.09 direction=(0.0900125,0.368461,0.925275) material=G4_C + --> #secondaries=12 impactParameter[fm]=1.39358 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=12 #NNcollisions=1 + Collision 404 projectile=D0 Ekin[MeV]=10372.1 direction=(0.0520893,0.684293,0.727344) material=G4_Ar + --> #secondaries=32 impactParameter[fm]=1.92865 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=37 #NNcollisions=2 + Collision 405 projectile=proton Ekin[MeV]=14037.6 direction=(0.216289,0.548321,0.807814) material=G4_He + --> #secondaries=7 impactParameter[fm]=0.641012 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=1 + Collision 406 projectile=anti_xi_c0 Ekin[MeV]=7282.84 direction=(0.629725,0.724118,0.281248) material=G4_C + --> #secondaries=14 impactParameter[fm]=1.82214 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 407 projectile=doublehyperdoubleneutron Ekin[MeV]=14011.8 direction=(0.529588,0.675071,0.51363) material=G4_He + --> #secondaries=5 impactParameter[fm]=2.88405 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 408 projectile=anti_doublehyperH4 Ekin[MeV]=24579.3 direction=(0.151193,0.87533,0.459279) material=G4_H + --> #secondaries=10 impactParameter[fm]=1.34742 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=1 #NNcollisions=1 + Collision 409 projectile=anti_alpha Ekin[MeV]=22926.4 direction=(0.501161,0.0514058,0.863826) material=G4_Ar + --> #secondaries=27 impactParameter[fm]=4.25151 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=39 #NNcollisions=2 + Collision 410 projectile=xi_b0 Ekin[MeV]=3564.59 direction=(0.742697,0.243719,0.6237) material=G4_H + --> #secondaries=2 impactParameter[fm]=1.06491 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=0 + Collision 411 projectile=xi_c+ Ekin[MeV]=7327 direction=(0.400453,0.408776,0.820085) material=G4_W + --> #secondaries=24 impactParameter[fm]=7.01574 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=185 #NNcollisions=1 + Collision 412 projectile=deuteron Ekin[MeV]=17352.9 direction=(0.695785,0.0106797,0.718171) material=G4_Al + --> #secondaries=34 impactParameter[fm]=2.97084 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=23 #NNcollisions=3 + Collision 413 projectile=omega_c0 Ekin[MeV]=22842.7 direction=(0.0320248,0.221979,0.974525) material=G4_H + --> #secondaries=6 impactParameter[fm]=1.91832 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 414 projectile=hyperalpha Ekin[MeV]=13338.4 direction=(0.429601,0.637872,0.639189) material=G4_Cu + --> #secondaries=16 impactParameter[fm]=5.73844 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=63 #NNcollisions=2 + Collision 415 projectile=anti_sigma+ Ekin[MeV]=17309 direction=(0.868071,0.234452,0.437591) material=G4_He + --> #secondaries=7 impactParameter[fm]=1.49671 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 416 projectile=anti_sigma+ Ekin[MeV]=21603.6 direction=(0.158204,0.706519,0.689785) material=G4_Ar + --> #secondaries=19 impactParameter[fm]=4.56396 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 417 projectile=anti_lambda Ekin[MeV]=27654.5 direction=(0.144327,0.281698,0.948586) material=G4_Ar + --> #secondaries=45 impactParameter[fm]=2.83951 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=4 + Collision 418 projectile=anti_xi_c0 Ekin[MeV]=22099.1 direction=(0.594523,0.339801,0.728751) material=G4_Be + --> #secondaries=11 impactParameter[fm]=3.19854 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 419 projectile=anti_proton Ekin[MeV]=18408.2 direction=(0.812528,0.581168,0.0451991) material=G4_W + --> #secondaries=37 impactParameter[fm]=7.41288 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=1 + Collision 420 projectile=anti_sigma- Ekin[MeV]=23148.8 direction=(0.539525,0.629649,0.558977) material=G4_Si + --> #secondaries=31 impactParameter[fm]=0.184263 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=3 + Collision 421 projectile=anti_lambda_b Ekin[MeV]=26517.9 direction=(0.17582,0.984311,0.0148099) material=G4_Pb + --> #secondaries=19 impactParameter[fm]=6.47543 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=1 + Collision 422 projectile=anti_alpha Ekin[MeV]=27257.6 direction=(0.543373,0.530648,0.650507) material=G4_Be + --> #secondaries=14 impactParameter[fm]=3.5714 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 423 projectile=lambda_b Ekin[MeV]=29277.9 direction=(0.0278065,0.934178,0.355723) material=G4_Fe + --> #secondaries=24 impactParameter[fm]=3.21467 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 424 projectile=He3 Ekin[MeV]=14669.1 direction=(0.3222,0.899928,0.293798) material=G4_Ar --> #secondaries=9 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 639 projectile=anti_xi_b- Ekin[MeV]=3710.02 direction=(0.316632,0.770816,0.552799) material=G4_Si - --> #secondaries=12 impactParameter[fm]=0.424117 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 640 projectile=anti_neutron Ekin[MeV]=10697.2 direction=(0.0855635,0.892326,0.443208) material=G4_Ar - --> #secondaries=20 impactParameter[fm]=2.37889 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=40 #NNcollisions=1 - Collision 641 projectile=anti_deuteron Ekin[MeV]=3012.69 direction=(0.395929,0.76674,0.505323) material=G4_Al - --> #secondaries=19 impactParameter[fm]=3.01606 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 642 projectile=lambda_c+ Ekin[MeV]=4900.17 direction=(0.701934,0.649014,0.293377) material=G4_Fe - --> #secondaries=34 impactParameter[fm]=2.67173 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=1 - Collision 643 projectile=Bc- Ekin[MeV]=24546.2 direction=(0.801483,0.592543,0.0807357) material=G4_Cu - --> #secondaries=17 impactParameter[fm]=3.53723 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=64 #NNcollisions=1 - Collision 644 projectile=anti_D0 Ekin[MeV]=22251.6 direction=(0.565784,0.565907,0.599699) material=G4_Cu - --> #secondaries=12 impactParameter[fm]=3.85111 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 645 projectile=He3 Ekin[MeV]=17648.8 direction=(0.269925,0.943241,0.193488) material=G4_Fe - --> #secondaries=40 impactParameter[fm]=3.63286 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=4 - Collision 646 projectile=anti_xi_b0 Ekin[MeV]=11406.8 direction=(0.0424936,0.856524,0.514355) material=G4_Fe - --> #secondaries=31 impactParameter[fm]=3.2331 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=3 - Collision 647 projectile=anti_deuteron Ekin[MeV]=1988.13 direction=(0.796107,0.5953,0.108772) material=G4_Fe - --> #secondaries=33 impactParameter[fm]=2.68726 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=2 - Collision 648 projectile=xi0 Ekin[MeV]=22531.4 direction=(0.629183,0.598165,0.496313) material=G4_Fe - --> #secondaries=41 impactParameter[fm]=2.52881 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=2 - Collision 649 projectile=lambda_b Ekin[MeV]=26520.9 direction=(0.0478809,0.28646,0.956895) material=G4_Si - --> #secondaries=13 impactParameter[fm]=3.2536 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 650 projectile=kaon- Ekin[MeV]=19226.3 direction=(0.668545,0.698718,0.25464) material=G4_Be - --> #secondaries=10 impactParameter[fm]=1.99355 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 651 projectile=Ds+ Ekin[MeV]=25031.1 direction=(0.179148,0.391715,0.902477) material=G4_W - --> #secondaries=65 impactParameter[fm]=0.508387 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=183 #NNcollisions=2 - Collision 652 projectile=kaon- Ekin[MeV]=6210.08 direction=(0.554716,0.368708,0.745885) material=G4_Pb - --> #secondaries=77 impactParameter[fm]=2.11099 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=203 #NNcollisions=2 - Collision 653 projectile=anti_xi_c0 Ekin[MeV]=28970.8 direction=(0.0922243,0.453319,0.886564) material=G4_Be - --> #secondaries=11 impactParameter[fm]=2.02573 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 654 projectile=xi_b0 Ekin[MeV]=18280.7 direction=(0.0588146,0.69436,0.717221) material=G4_He - --> #secondaries=4 impactParameter[fm]=1.74826 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 655 projectile=anti_omega_c0 Ekin[MeV]=22358.5 direction=(0.00664243,0.298826,0.954284) material=G4_Ar - --> #secondaries=37 impactParameter[fm]=2.19557 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 - Collision 656 projectile=pi+ Ekin[MeV]=13305.9 direction=(0.420178,0.778372,0.466463) material=G4_C - --> #secondaries=16 impactParameter[fm]=0.939151 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=9 #NNcollisions=3 - Collision 657 projectile=He3 Ekin[MeV]=2042.78 direction=(0.448594,0.831418,0.327883) material=G4_He - --> #secondaries=7 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 658 projectile=anti_xi_b0 Ekin[MeV]=20879.2 direction=(0.680415,0.273669,0.67981) material=G4_H - --> #secondaries=7 impactParameter[fm]=1.74954 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 659 projectile=He3 Ekin[MeV]=16613.9 direction=(0.179312,0.746071,0.641268) material=G4_Fe - --> #secondaries=43 impactParameter[fm]=2.21862 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=51 #NNcollisions=3 - Collision 660 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=14362.2 direction=(0.655537,0.674207,0.340171) material=G4_Pb - --> #secondaries=120 impactParameter[fm]=2.27438 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=7 - Collision 661 projectile=anti_sigma+ Ekin[MeV]=14429.5 direction=(0.676855,0.586293,0.445115) material=G4_Al - --> #secondaries=21 impactParameter[fm]=3.40187 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 662 projectile=anti_alpha Ekin[MeV]=28660.3 direction=(0.252541,0.485686,0.836859) material=G4_Ar - --> #secondaries=17 impactParameter[fm]=7.03673 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=40 #NNcollisions=1 - Collision 663 projectile=alpha Ekin[MeV]=26368.5 direction=(0.289031,0.509446,0.81051) material=G4_He - --> #secondaries=17 impactParameter[fm]=1.24122 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=1 #NNcollisions=4 - Collision 664 projectile=anti_omega_b- Ekin[MeV]=19712.3 direction=(0.589514,0.326705,0.738741) material=G4_H - --> #secondaries=5 impactParameter[fm]=1.9822 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 665 projectile=B0 Ekin[MeV]=21943.5 direction=(0.466454,0.173935,0.867276) material=G4_He - --> #secondaries=6 impactParameter[fm]=0.443471 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 666 projectile=omega_c0 Ekin[MeV]=26443.2 direction=(0.690931,0.0667331,0.719834) material=G4_C - --> #secondaries=11 impactParameter[fm]=2.22419 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 667 projectile=B0 Ekin[MeV]=18345.5 direction=(0.415226,0.280171,0.865501) material=G4_Pb - --> #secondaries=40 impactParameter[fm]=5.82162 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=2 - Collision 668 projectile=anti_xi_c0 Ekin[MeV]=18467 direction=(0.366414,0.705222,0.606962) material=G4_He - --> #secondaries=6 impactParameter[fm]=1.20949 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 669 projectile=xi0 Ekin[MeV]=12590.2 direction=(0.742647,0.0915384,0.663398) material=G4_Si - --> #secondaries=9 impactParameter[fm]=5.38601 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 670 projectile=anti_proton Ekin[MeV]=22309.6 direction=(0.188187,0.732669,0.654051) material=G4_Al - --> #secondaries=28 impactParameter[fm]=1.0659 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 671 projectile=hypertriton Ekin[MeV]=17920.3 direction=(0.0465778,0.271801,0.961226) material=G4_C - --> #secondaries=18 impactParameter[fm]=1.70289 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 672 projectile=hypertriton Ekin[MeV]=20566 direction=(0.238585,0.100893,0.965866) material=G4_C - --> #secondaries=16 impactParameter[fm]=2.05852 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=10 #NNcollisions=2 - Collision 673 projectile=hyperH4 Ekin[MeV]=29860.2 direction=(0.21264,0.498078,0.840656) material=G4_Si - --> #secondaries=44 impactParameter[fm]=0.402087 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=17 #NNcollisions=13 - Collision 674 projectile=pi- Ekin[MeV]=26681.7 direction=(0.02876,0.6439,0.764569) material=G4_Fe - --> #secondaries=18 impactParameter[fm]=5.31074 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 675 projectile=B- Ekin[MeV]=5888.37 direction=(0.668489,0.0312629,0.743065) material=G4_W - --> #secondaries=32 impactParameter[fm]=3.33484 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=178 #NNcollisions=3 - Collision 676 projectile=xi_b0 Ekin[MeV]=21827.8 direction=(0.287491,0.312974,0.905205) material=G4_Si - --> #secondaries=14 impactParameter[fm]=3.14289 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 677 projectile=D+ Ekin[MeV]=16534.4 direction=(0.439081,0.196385,0.876722) material=G4_W - --> #secondaries=28 impactParameter[fm]=5.85718 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=3 - Collision 678 projectile=anti_lambda_b Ekin[MeV]=13943.1 direction=(0.632137,0.494252,0.596756) material=G4_Pb - --> #secondaries=8 impactParameter[fm]=8.01478 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=0 - Collision 679 projectile=pi- Ekin[MeV]=14182.3 direction=(0.896243,0.362247,0.255979) material=G4_Pb - --> #secondaries=28 impactParameter[fm]=6.75576 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 - Collision 680 projectile=hyperalpha Ekin[MeV]=14939.7 direction=(0.815113,0.402338,0.416792) material=G4_Si - --> #secondaries=10 impactParameter[fm]=6.4078 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 681 projectile=anti_lambda Ekin[MeV]=25332.4 direction=(0.559717,0.669827,0.487902) material=G4_Fe - --> #secondaries=24 impactParameter[fm]=3.02361 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 682 projectile=anti_alpha Ekin[MeV]=16885 direction=(0.589978,0.001533,0.807418) material=G4_Al - --> #secondaries=24 impactParameter[fm]=2.13468 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 683 projectile=kaon- Ekin[MeV]=11825 direction=(0.958738,0.258641,0.118009) material=G4_He - --> #secondaries=9 impactParameter[fm]=1.29753 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 684 projectile=anti_neutron Ekin[MeV]=27393.4 direction=(0.223461,0.677043,0.701197) material=G4_Cu - --> #secondaries=17 impactParameter[fm]=6.0947 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=1 - Collision 685 projectile=pi+ Ekin[MeV]=19364.9 direction=(0.247641,0.952894,0.175118) material=G4_Pb - --> #secondaries=68 impactParameter[fm]=3.93627 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=203 #NNcollisions=2 - Collision 686 projectile=sigma- Ekin[MeV]=21262.6 direction=(0.479022,0.552838,0.681842) material=G4_H - --> #secondaries=9 impactParameter[fm]=0.193933 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 687 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=12340.1 direction=(0.0105517,0.638712,0.769373) material=G4_C - --> #secondaries=22 impactParameter[fm]=2.87931 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=4 - Collision 688 projectile=xi0 Ekin[MeV]=7855.44 direction=(0.705681,0.707836,0.0313437) material=G4_H - --> #secondaries=3 impactParameter[fm]=0.601206 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 689 projectile=triton Ekin[MeV]=6954.33 direction=(0.0529127,0.637579,0.768565) material=G4_H - --> #secondaries=6 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 690 projectile=lambda Ekin[MeV]=14591.6 direction=(0.0341787,0.675333,0.736721) material=G4_Be - --> #secondaries=13 impactParameter[fm]=0.999019 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=3 - Collision 691 projectile=proton Ekin[MeV]=8570.42 direction=(0.560131,0.126497,0.818689) material=G4_Pb - --> #secondaries=36 impactParameter[fm]=7.18121 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=2 - Collision 692 projectile=triton Ekin[MeV]=27942.7 direction=(0.725721,0.0339744,0.68715) material=G4_Ar - --> #secondaries=48 impactParameter[fm]=2.94778 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=34 #NNcollisions=5 - Collision 693 projectile=anti_hyperalpha Ekin[MeV]=26806 direction=(0.568402,0.504155,0.65019) material=G4_Ar - --> #secondaries=27 impactParameter[fm]=3.65019 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=38 #NNcollisions=2 - Collision 694 projectile=Ds- Ekin[MeV]=1428.48 direction=(0.284511,0.599336,0.748231) material=G4_Al - --> #secondaries=8 impactParameter[fm]=2.96455 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 695 projectile=omega_b- Ekin[MeV]=27703.7 direction=(0.056604,0.409747,0.910441) material=G4_He - --> #secondaries=4 impactParameter[fm]=1.4706 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 696 projectile=Bs0 Ekin[MeV]=19474.3 direction=(0.168065,0.824837,0.539813) material=G4_Cu - --> #secondaries=7 impactParameter[fm]=2.02111 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 697 projectile=hypertriton Ekin[MeV]=5618.06 direction=(0.818925,0.57044,0.0629279) material=G4_Si - --> #secondaries=23 impactParameter[fm]=4.5255 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 698 projectile=proton Ekin[MeV]=13437.4 direction=(0.705233,0.0975837,0.702227) material=G4_Fe - --> #secondaries=21 impactParameter[fm]=3.28728 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 699 projectile=doublehyperH4 Ekin[MeV]=19088.1 direction=(0.505216,0.826613,0.247928) material=G4_Al - --> #secondaries=36 impactParameter[fm]=0.278242 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=20 #NNcollisions=5 - Collision 700 projectile=deuteron Ekin[MeV]=27933.4 direction=(0.704532,0.0314971,0.708973) material=G4_Pb - --> #secondaries=119 impactParameter[fm]=3.30088 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=195 #NNcollisions=9 + Collision 425 projectile=sigma- Ekin[MeV]=6670.12 direction=(0.208438,0.600343,0.772103) material=G4_Ar + --> #secondaries=12 impactParameter[fm]=4.6008 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 426 projectile=D- Ekin[MeV]=19562.4 direction=(0.862229,0.488055,0.135509) material=G4_H + --> #secondaries=6 impactParameter[fm]=0.138433 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 427 projectile=hyperH4 Ekin[MeV]=7944.76 direction=(0.644204,0.452605,0.616563) material=G4_He + --> #secondaries=5 impactParameter[fm]=4.23867 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 428 projectile=doublehyperdoubleneutron Ekin[MeV]=6703.85 direction=(0.832515,0.532034,0.154463) material=G4_Fe + --> #secondaries=39 impactParameter[fm]=1.94633 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=44 #NNcollisions=1 + Collision 429 projectile=D- Ekin[MeV]=13823.1 direction=(0.906547,0.421847,0.0147783) material=G4_Fe + --> #secondaries=13 impactParameter[fm]=3.47472 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 430 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=28888.6 direction=(0.189771,0.531563,0.825486) material=G4_Al + --> #secondaries=17 impactParameter[fm]=5.28175 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=26 #NNcollisions=3 + Collision 431 projectile=omega_b- Ekin[MeV]=12033.9 direction=(0.548508,0.293678,0.782874) material=G4_Si + --> #secondaries=8 impactParameter[fm]=2.33542 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 432 projectile=anti_B0 Ekin[MeV]=25192.8 direction=(0.820659,0.209128,0.531774) material=G4_Si + --> #secondaries=11 impactParameter[fm]=2.32715 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 433 projectile=doublehyperH4 Ekin[MeV]=25939.3 direction=(0.0439824,0.414545,0.908965) material=G4_Si + --> #secondaries=25 impactParameter[fm]=2.99704 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=24 #NNcollisions=3 + Collision 434 projectile=anti_omega_c0 Ekin[MeV]=25524.8 direction=(0.199961,0.312857,0.928513) material=G4_Si + --> #secondaries=7 impactParameter[fm]=4.03092 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 435 projectile=kaon0L Ekin[MeV]=8374.81 direction=(0.544141,0.556341,0.628009) material=G4_C + --> #secondaries=5 impactParameter[fm]=0.627044 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 436 projectile=anti_B0 Ekin[MeV]=4722.9 direction=(0.643067,0.42048,0.640048) material=G4_H + --> #secondaries=2 impactParameter[fm]=0.869781 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 437 projectile=B0 Ekin[MeV]=13583 direction=(0.338533,0.564605,0.752739) material=G4_Pb + --> #secondaries=9 impactParameter[fm]=4.89501 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=0 + Collision 438 projectile=anti_omega_c0 Ekin[MeV]=20429.2 direction=(0.945525,0.286992,0.153681) material=G4_Fe + --> #secondaries=45 impactParameter[fm]=0.337262 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=4 + Collision 439 projectile=anti_omega- Ekin[MeV]=9394.67 direction=(0.251863,0.279787,0.926436) material=G4_Al + --> #secondaries=11 impactParameter[fm]=2.97214 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 + Collision 440 projectile=anti_He3 Ekin[MeV]=3135.75 direction=(0.868237,0.416395,0.269777) material=G4_Ar + --> #secondaries=35 impactParameter[fm]=3.46942 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 441 projectile=sigma- Ekin[MeV]=19812.2 direction=(0.404768,0.608581,0.68249) material=G4_Pb + --> #secondaries=107 impactParameter[fm]=2.76821 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=199 #NNcollisions=8 + Collision 442 projectile=anti_hyperHe5 Ekin[MeV]=13660.5 direction=(0.694417,0.713782,0.0911039) material=G4_He + --> #secondaries=20 impactParameter[fm]=1.77362 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=3 #NNcollisions=4 + Collision 443 projectile=proton Ekin[MeV]=23059 direction=(0.628467,0.444544,0.638287) material=G4_Ar + --> #secondaries=13 impactParameter[fm]=2.73761 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=0 + Collision 444 projectile=anti_hyperH4 Ekin[MeV]=10957.8 direction=(0.619599,0.245049,0.745686) material=G4_Ar + --> #secondaries=52 impactParameter[fm]=1.98194 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=35 #NNcollisions=5 + Collision 445 projectile=xi_c0 Ekin[MeV]=27338.9 direction=(0.702482,0.474728,0.530237) material=G4_C + --> #secondaries=15 impactParameter[fm]=1.76055 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 + Collision 446 projectile=doublehyperH4 Ekin[MeV]=15426.9 direction=(0.43944,0.673671,0.594189) material=G4_Be + --> #secondaries=15 impactParameter[fm]=1.17565 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=4 #NNcollisions=5 + Collision 447 projectile=xi- Ekin[MeV]=2660.21 direction=(0.204812,0.464085,0.861787) material=G4_Ar + --> #secondaries=15 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 448 projectile=anti_omega_c0 Ekin[MeV]=17872.6 direction=(0.699136,0.329112,0.63474) material=G4_He + --> #secondaries=4 impactParameter[fm]=0.401972 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 449 projectile=pi+ Ekin[MeV]=22727.1 direction=(0.461357,0.354339,0.813384) material=G4_Fe + --> #secondaries=26 impactParameter[fm]=2.78136 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=53 #NNcollisions=2 + Collision 450 projectile=kaon- Ekin[MeV]=16598.5 direction=(0.915024,0.332919,0.227809) material=G4_Fe + --> #secondaries=19 impactParameter[fm]=5.20585 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 451 projectile=anti_hyperHe5 Ekin[MeV]=13455.4 direction=(0.613927,0.641668,0.459735) material=G4_C + --> #secondaries=14 impactParameter[fm]=3.62862 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=12 #NNcollisions=1 + Collision 452 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=25697.3 direction=(0.632651,0.380719,0.674393) material=G4_Cu + --> #secondaries=24 impactParameter[fm]=4.33553 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=63 #NNcollisions=2 + Collision 453 projectile=Bc- Ekin[MeV]=1836.21 direction=(0.706136,0.504018,0.497331) material=G4_W + --> #secondaries=11 impactParameter[fm]=6.32861 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=0 + Collision 454 projectile=kaon0L Ekin[MeV]=2874.91 direction=(0.803552,0.5878,0.0937797) material=G4_H + --> #secondaries=4 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 455 projectile=omega_b- Ekin[MeV]=12115.3 direction=(0.806841,0.189141,0.559672) material=G4_Fe + --> #secondaries=24 impactParameter[fm]=2.4863 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=1 + Collision 456 projectile=kaon0S Ekin[MeV]=15839.5 direction=(0.347926,0.61137,0.710756) material=G4_W + --> #secondaries=64 impactParameter[fm]=5.37381 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=179 #NNcollisions=2 + Collision 457 projectile=B0 Ekin[MeV]=23988.2 direction=(0.764594,0.348238,0.542333) material=G4_Si + --> #secondaries=8 impactParameter[fm]=4.87885 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 458 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=22068.4 direction=(0.00974466,0.606241,0.795222) material=G4_Cu + --> #secondaries=73 impactParameter[fm]=3.97404 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=59 #NNcollisions=6 + Collision 459 projectile=He3 Ekin[MeV]=12890.8 direction=(0.42434,0.267778,0.865003) material=G4_C + --> #secondaries=20 impactParameter[fm]=3.33574 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=10 #NNcollisions=2 + Collision 460 projectile=D- Ekin[MeV]=24886.6 direction=(0.651736,0.379657,0.656583) material=G4_Cu + --> #secondaries=22 impactParameter[fm]=4.80295 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=2 + Collision 461 projectile=anti_neutron Ekin[MeV]=6221.35 direction=(0.512413,0.722843,0.463607) material=G4_W + --> #secondaries=112 impactParameter[fm]=3.85843 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=1 + Collision 462 projectile=lambda Ekin[MeV]=26672.7 direction=(0.56302,0.507957,0.651911) material=G4_Ar + --> #secondaries=19 impactParameter[fm]=4.76066 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 463 projectile=anti_omega- Ekin[MeV]=14161.2 direction=(0.403561,0.00630091,0.914931) material=G4_Ar + --> #secondaries=23 impactParameter[fm]=2.64644 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=1 + Collision 464 projectile=doublehyperdoubleneutron Ekin[MeV]=9345.93 direction=(0.419401,0.366305,0.830616) material=G4_Si + --> #secondaries=9 impactParameter[fm]=5.51256 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 465 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=21868.5 direction=(0.256464,0.709847,0.656006) material=G4_Cu + --> #secondaries=54 impactParameter[fm]=2.56038 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=4 + Collision 466 projectile=sigma- Ekin[MeV]=4681.46 direction=(0.0916661,0.922557,0.374814) material=G4_H + --> #secondaries=4 impactParameter[fm]=0.736469 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 467 projectile=anti_triton Ekin[MeV]=19279.2 direction=(0.753552,0.597319,0.274536) material=G4_Al + --> #secondaries=36 impactParameter[fm]=2.41604 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=3 + Collision 468 projectile=anti_deuteron Ekin[MeV]=28214.1 direction=(0.632267,0.73234,0.252817) material=G4_W + --> #secondaries=100 impactParameter[fm]=3.74557 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=3 + Collision 469 projectile=anti_xi- Ekin[MeV]=1712.49 direction=(0.550602,0.831261,0.0764384) material=G4_Al + --> #secondaries=22 impactParameter[fm]=1.89732 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 470 projectile=anti_xi0 Ekin[MeV]=26396.6 direction=(0.860668,0.417885,0.290898) material=G4_Ar + --> #secondaries=17 impactParameter[fm]=2.47421 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 471 projectile=anti_lambda_b Ekin[MeV]=26837.5 direction=(0.323779,0.588319,0.740977) material=G4_Pb + --> #secondaries=71 impactParameter[fm]=4.74171 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=3 + Collision 472 projectile=anti_sigma+ Ekin[MeV]=11583.4 direction=(0.439513,0.13894,0.887425) material=G4_H + --> #secondaries=7 impactParameter[fm]=0.84411 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=1 + Collision 473 projectile=anti_doublehyperH4 Ekin[MeV]=16063.5 direction=(0.337266,0.892067,0.300779) material=G4_W + --> #secondaries=71 impactParameter[fm]=6.52387 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=185 #NNcollisions=2 + Collision 474 projectile=D- Ekin[MeV]=3766.07 direction=(0.200987,0.345665,0.916581) material=G4_W + --> #secondaries=13 impactParameter[fm]=7.65592 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=185 #NNcollisions=0 + Collision 475 projectile=B0 Ekin[MeV]=25387.7 direction=(0.23795,0.43011,0.870853) material=G4_Cu + --> #secondaries=18 impactParameter[fm]=3.04933 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=64 #NNcollisions=1 + Collision 476 projectile=sigma- Ekin[MeV]=20419.4 direction=(0.364927,0.550614,0.750768) material=G4_C + --> #secondaries=14 impactParameter[fm]=2.15657 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 477 projectile=neutron Ekin[MeV]=1234.78 direction=(0.270394,0.596211,0.755923) material=G4_Pb + --> #secondaries=14 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 478 projectile=anti_xi0 Ekin[MeV]=25258.7 direction=(0.835743,0.541258,0.0925963) material=G4_H + --> #secondaries=2 impactParameter[fm]=0.595994 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 479 projectile=anti_xi_c0 Ekin[MeV]=25464.9 direction=(0.582186,0.170838,0.794905) material=G4_Si + --> #secondaries=8 impactParameter[fm]=3.74489 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=28 #NNcollisions=1 + Collision 480 projectile=anti_xi_b- Ekin[MeV]=26090.7 direction=(0.445832,0.494778,0.745941) material=G4_Al + --> #secondaries=30 impactParameter[fm]=2.26866 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=3 + Collision 481 projectile=anti_proton Ekin[MeV]=22953 direction=(0.315046,0.496152,0.809061) material=G4_Ar + --> #secondaries=23 impactParameter[fm]=3.34413 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 482 projectile=anti_xi_c+ Ekin[MeV]=11540.4 direction=(0.862921,0.124661,0.489721) material=G4_C + --> #secondaries=19 impactParameter[fm]=1.14924 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=4 + Collision 483 projectile=doublehyperdoubleneutron Ekin[MeV]=14348.1 direction=(0.245924,0.929578,0.274603) material=G4_H + --> #secondaries=5 impactParameter[fm]=0.498482 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=0 #NNcollisions=0 + Collision 484 projectile=anti_B0 Ekin[MeV]=18377.3 direction=(0.66415,0.694706,0.276204) material=G4_He + --> #secondaries=5 impactParameter[fm]=1.14534 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 485 projectile=anti_lambda_b Ekin[MeV]=15140.6 direction=(0.206007,0.764045,0.611389) material=G4_Fe + --> #secondaries=31 impactParameter[fm]=1.56632 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=51 #NNcollisions=4 + Collision 486 projectile=lambda_c+ Ekin[MeV]=18201.7 direction=(0.438514,0.842206,0.31368) material=G4_H + --> #secondaries=9 impactParameter[fm]=0.700172 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 487 projectile=kaon- Ekin[MeV]=13883.8 direction=(0.588572,0.616202,0.523334) material=G4_H + --> #secondaries=10 impactParameter[fm]=1.23533 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 488 projectile=anti_B0 Ekin[MeV]=2513.71 direction=(0.343938,0.639479,0.687585) material=G4_H + --> #secondaries=3 impactParameter[fm]=1.34679 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 489 projectile=anti_xi_c+ Ekin[MeV]=27501.1 direction=(0.548309,0.752038,0.365781) material=G4_Al + --> #secondaries=21 impactParameter[fm]=1.79871 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 490 projectile=anti_lambda_b Ekin[MeV]=13482.5 direction=(0.588199,0.176652,0.789187) material=G4_Be + --> #secondaries=13 impactParameter[fm]=0.20317 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=3 + Collision 491 projectile=anti_xi_c+ Ekin[MeV]=3730.28 direction=(0.135019,0.141584,0.980675) material=G4_C + --> #secondaries=11 impactParameter[fm]=0.623453 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 + Collision 492 projectile=pi+ Ekin[MeV]=7020.31 direction=(0.819535,0.567671,0.0781816) material=G4_H + --> #secondaries=5 impactParameter[fm]=1.47916 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 493 projectile=anti_xi_b0 Ekin[MeV]=22077.1 direction=(0.614443,0.556447,0.559309) material=G4_He + --> #secondaries=6 impactParameter[fm]=1.41009 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 494 projectile=anti_deuteron Ekin[MeV]=25960.3 direction=(0.61391,0.0803873,0.785273) material=G4_He + --> #secondaries=16 impactParameter[fm]=1.63264 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=2 + Collision 495 projectile=lambda_c+ Ekin[MeV]=6786.67 direction=(0.080238,0.725501,0.683528) material=G4_C + --> #secondaries=8 impactParameter[fm]=2.69596 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 496 projectile=B+ Ekin[MeV]=12417.8 direction=(0.924561,0.22795,0.30533) material=G4_He + --> #secondaries=6 impactParameter[fm]=1.57978 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 497 projectile=Ds- Ekin[MeV]=2928.71 direction=(0.0487793,0.458677,0.887263) material=G4_C + --> #secondaries=8 impactParameter[fm]=1.00291 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=9 #NNcollisions=1 + Collision 498 projectile=anti_xi_c0 Ekin[MeV]=26916.9 direction=(0.75228,0.489989,0.440439) material=G4_Fe + --> #secondaries=17 impactParameter[fm]=5.59798 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 499 projectile=B+ Ekin[MeV]=22141.2 direction=(0.57915,0.292551,0.76092) material=G4_C + --> #secondaries=7 impactParameter[fm]=2.41716 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 500 projectile=xi_c0 Ekin[MeV]=21035 direction=(0.049536,0.712449,0.699974) material=G4_Al + --> #secondaries=17 impactParameter[fm]=3.21193 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 List of produced secondaries: - j=0 neutron p=(1511.2,-11.7734,1168.152128.67) MeV - j=1 pi0 p=(-22.9125,8.57886,187.629232.426) MeV - j=2 proton p=(1575.47,-233.722,1569.472424.94) MeV - j=3 pi+ p=(29.7606,4.09159,-74.1735160.885) MeV - j=4 neutron p=(2030.31,167.741,1530.642715.87) MeV - j=5 pi+ p=(817.408,-25.9205,897.4241222.16) MeV - j=6 neutron p=(-273.301,193.198,700.2881218.69) MeV - j=7 pi0 p=(269.617,-154.731,312.721461.137) MeV - j=8 proton p=(175.934,-99.737,-321.4111012.21) MeV - j=9 proton p=(-49.6628,-338.047,772.7661262.64) MeV - j=10 proton p=(1211.97,42.129,668.8271672.82) MeV - j=11 pi- p=(798.699,38.9499,441.715924.137) MeV - j=12 proton p=(145.545,416.143,38.86931037.41) MeV - j=13 pi- p=(374.056,93.3206,249.892480.159) MeV - j=14 proton p=(400.524,190.734,-295.7641079.18) MeV - j=15 proton p=(-397.399,-446.544,-677.1581302.39) MeV - j=16 neutron p=(39.3529,274.577,365.7721045.71) MeV - j=17 neutron p=(65.3919,-81.4001,68.1055947.799) MeV - j=18 pi0 p=(489.344,343.07,441.416755.13) MeV - j=19 pi- p=(384.391,-53.9251,447.466608.58) MeV - j=20 neutron p=(92.3004,180.149,-106.963967.056) MeV - j=21 proton p=(443.038,-216.227,451.6851152.13) MeV - j=22 neutron p=(-152.513,-282.728,165.8341006.72) MeV - j=23 neutron p=(436.163,175.532,348.1411106.81) MeV - j=24 neutron p=(-82.6637,-303.306,-164.8321004.38) MeV - j=25 neutron p=(186.004,212.566,-70.6132983.642) MeV - j=26 neutron p=(-67.9113,-184.526,-52.7091961.365) MeV - j=27 proton p=(69.5194,525.464,-69.13541079.85) MeV - j=28 proton p=(-290.573,-139.258,63.8229994.109) MeV - j=29 neutron p=(161.46,-366.367,-58.46941022.98) MeV - j=30 pi0 p=(3754.95,458.851,3903.585437.5) MeV - j=31 pi- p=(642.572,-137.299,1011.911214.58) MeV - j=32 pi- p=(-88.9942,-1.69678,-45.7315171.738) MeV - j=33 neutron p=(-409.764,198.691,-24.96551044.41) MeV - j=34 pi- p=(16.5979,125.159,233.141299.625) MeV - j=35 pi+ p=(1934.67,118.071,1851.592684.17) MeV - j=36 pi+ p=(245.016,-226.012,425.515558.262) MeV - j=37 neutron p=(844.871,-348.163,896.6521588.02) MeV - j=38 pi0 p=(-12.1046,-122.025,94.1428205.227) MeV - j=39 pi- p=(-119.766,-91.2217,143.493250.47) MeV - j=40 proton p=(179.43,22.6226,-191.212974.486) MeV - j=41 deuteron p=(-74.6486,354.199,638.882014.23) MeV - j=42 neutron p=(329.634,-209.995,-195.2431036.18) MeV - j=43 neutron p=(-298.446,296.459,-203.421049.34) MeV - j=44 neutron p=(148.765,273.558,-12.7389989.904) MeV - j=45 neutron p=(18.7028,164.742,-23.4559954.37) MeV - j=46 neutron p=(544.428,262.874,296.6641155.98) MeV - j=47 neutron p=(180.636,429.931,-169.4281062.52) MeV - j=48 neutron p=(-288.641,-81.1003,-6.72544986.265) MeV - j=49 neutron p=(52.7979,78.4717,-333.9571001.63) MeV - j=50 proton p=(292.695,225.084,-198.171027.6) MeV - j=51 proton p=(-8.4267,146.368,543.1011093.99) MeV - j=52 neutron p=(276.859,92.1289,10.4124983.885) MeV - j=53 neutron p=(75.6928,383.452,192.6161035.69) MeV - j=54 neutron p=(2.16574,-62.1624,-271.811980.068) MeV - j=55 neutron p=(294,13.6268,-207.0951006.13) MeV - j=56 proton p=(229.238,-29.2843,-38.8079967.092) MeV - j=57 neutron p=(-293.826,-48.2726,-82.182989.04) MeV - j=58 neutron p=(573.372,179.43,203.7521133.69) MeV - j=59 proton p=(25.4675,-34.5767,-542.3611084.6) MeV - j=60 neutron p=(-92.5711,-138.89,-306.9161002.42) MeV - j=61 neutron p=(-183.964,160.961,260.5641005.2) MeV - j=62 neutron p=(-84.1753,-92.8015,-198.934968.533) MeV - j=63 neutron p=(-21.9454,202.731,-29.4704961.89) MeV - j=64 proton p=(-37.5268,-5.17871,-100.659944.416) MeV - j=65 proton p=(138.81,-149.532,2.96912960.204) MeV - j=66 neutron p=(238.929,-90.7211,148.047984.895) MeV - j=67 neutron p=(-73.5316,-94.042,-83.1086950.758) MeV - j=68 proton p=(133.395,-203.502,-193.674988.469) MeV - j=69 proton p=(-225.554,115.274,124.11979.755) MeV - j=70 neutron p=(93.0853,-288.437,230.9471013.89) MeV - j=71 proton p=(197.325,-19.7194,216.555983.146) MeV - j=72 proton p=(-108.919,178.131,-205.346982.912) MeV - j=73 neutron p=(18.3637,47.907,-291.616985.117) MeV - j=74 proton p=(-7.13656,17.7634,-241.587969.064) MeV - j=75 proton p=(-284.983,-74.3383,22.2137983.661) MeV - j=76 neutron p=(-158.285,35.0547,74.4391956.351) MeV - j=77 neutron p=(-105.632,175.894,-46.0094962.807) MeV - j=78 neutron p=(-1056.75,-105.596,128.6581423.8) MeV - j=79 Pd102 p=(1710.93,-208.254,3179.4994970) MeV - j=80 neutron p=(-86.3387,-18.2279,82.7956947.325) MeV - j=81 neutron p=(-25.2001,0.332304,124.508948.114) MeV - j=82 proton p=(-94.1901,-79.5195,7.13156946.362) MeV - j=83 Li6 p=(407.782,-356.94,203.6995631.36) MeV - j=84 neutron p=(-79.1075,-5.07063,4.80916942.916) MeV - j=85 neutron p=(17.8279,-70.4056,-20.6226942.594) MeV - j=86 He3 p=(77.5325,-68.228,391.0942837.37) MeV - j=87 neutron p=(54.5641,-14.0716,138.647951.41) MeV - j=88 He3 p=(120.803,13.5984,490.5962853.51) MeV - j=89 triton p=(37.581,160.464,-91.60052815.24) MeV - j=90 neutron p=(-2.4317,-77.7534,60.5706944.724) MeV - j=91 neutron p=(75.88,-4.6399,77.4302945.811) MeV - j=92 proton p=(207.323,4.65384,-8.19406960.951) MeV - j=93 He3 p=(110.85,186.195,-140.262820.23) MeV - j=94 neutron p=(-33.4027,24.1985,-68.835942.986) MeV - j=95 neutron p=(95.4607,19.5173,102.809950.182) MeV - j=96 neutron p=(54.5563,-119.663,11.6438948.796) MeV - j=97 neutron p=(90.6755,-125.425,20.3577952.445) MeV - j=98 deuteron p=(56.1289,49.7873,-123.7011881.18) MeV - j=99 neutron p=(5.15846,-10.7335,-111.531946.237) MeV - j=100 neutron p=(-4.43101,-62.6378,-15.6128941.791) MeV - j=101 neutron p=(-38.7289,30.0608,113.535947.669) MeV - j=102 neutron p=(104.157,-76.2703,120.472956.014) MeV - j=103 neutron p=(-22.6254,19.6441,-90.9393944.431) MeV - j=104 proton p=(-71.2346,-35.4076,174.232957.622) MeV - j=105 neutron p=(133.679,6.39197,-54.2967950.601) MeV - j=106 alpha p=(239.758,-268.245,111.563746.36) MeV - j=107 gamma p=(-1.18088,-2.44202,0.884072.85299) MeV - j=108 gamma p=(0.769899,-0.66641,0.6910171.23059) MeV - j=109 gamma p=(-0.300235,-0.343367,0.9720151.07371) MeV - j=110 gamma p=(0.707602,0.661953,0.1215710.976556) MeV - j=111 gamma p=(-0.625341,0.485632,-0.4353220.903546) MeV - j=112 gamma p=(-0.452066,-0.554018,-0.2001420.742534) MeV - j=113 gamma p=(0.477232,-0.180789,-0.4702430.693948) MeV - j=114 gamma p=(0.241211,-0.0906883,0.1150.282192) MeV - j=115 gamma p=(-0.399856,-0.0426416,-0.1452570.427554) MeV - j=116 gamma p=(-0.0502381,0.227722,0.2516580.343093) MeV - j=117 gamma p=(-0.357983,-0.788475,-1.265461.53337) MeV - j=118 gamma p=(-0.281142,0.41069,-0.2166690.542819) MeV - Collision 701 projectile=kaon- Ekin[MeV]=12504.7 direction=(0.176348,0.410776,0.894519) material=G4_Al - --> #secondaries=19 impactParameter[fm]=2.26486 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 702 projectile=anti_xi0 Ekin[MeV]=26310.5 direction=(0.578139,0.25282,0.775782) material=G4_He - --> #secondaries=14 impactParameter[fm]=0.311721 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 - Collision 703 projectile=anti_xi0 Ekin[MeV]=29364 direction=(0.638444,0.0692411,0.766547) material=G4_Cu - --> #secondaries=25 impactParameter[fm]=4.18221 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=0 - Collision 704 projectile=anti_xi_c0 Ekin[MeV]=19728 direction=(0.530042,0.589784,0.609271) material=G4_Ar - --> #secondaries=34 impactParameter[fm]=1.66602 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=2 - Collision 705 projectile=proton Ekin[MeV]=20982.6 direction=(0.481884,0.824788,0.295824) material=G4_H - --> #secondaries=8 impactParameter[fm]=0.273001 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 706 projectile=hypertriton Ekin[MeV]=20594.5 direction=(0.526167,0.258751,0.810059) material=G4_Al - --> #secondaries=33 impactParameter[fm]=1.11585 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=19 #NNcollisions=5 - Collision 707 projectile=doublehyperdoubleneutron Ekin[MeV]=11549.2 direction=(0.293877,0.92084,0.256301) material=G4_Ar - --> #secondaries=40 impactParameter[fm]=3.58138 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=34 #NNcollisions=4 - Collision 708 projectile=anti_hyperalpha Ekin[MeV]=4123.51 direction=(0.523763,0.533805,0.663871) material=G4_Fe - --> #secondaries=36 impactParameter[fm]=4.80308 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=3 - Collision 709 projectile=hyperalpha Ekin[MeV]=1785.71 direction=(0.156966,0.603497,0.781763) material=G4_He - --> #secondaries=5 impactParameter[fm]=3.09362 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 710 projectile=anti_lambda Ekin[MeV]=19614.7 direction=(0.650291,0.113967,0.751088) material=G4_He - --> #secondaries=16 impactParameter[fm]=1.16988 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=3 - Collision 711 projectile=anti_Bs0 Ekin[MeV]=4709.67 direction=(0.731575,0.199159,0.652023) material=G4_H - --> #secondaries=2 impactParameter[fm]=0.362906 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 712 projectile=anti_xi0 Ekin[MeV]=23294.5 direction=(0.671889,0.0963108,0.734363) material=G4_Si - --> #secondaries=38 impactParameter[fm]=1.89887 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=3 - Collision 713 projectile=omega_b- Ekin[MeV]=24730.4 direction=(0.187668,0.526645,0.829112) material=G4_Pb - --> #secondaries=44 impactParameter[fm]=2.50203 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=2 - Collision 714 projectile=xi0 Ekin[MeV]=13996.2 direction=(0.58794,0.559432,0.584263) material=G4_H - --> #secondaries=3 impactParameter[fm]=1.23385 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 715 projectile=anti_hypertriton Ekin[MeV]=7176.38 direction=(0.226905,0.582764,0.780321) material=G4_Be - --> #secondaries=10 impactParameter[fm]=1.34863 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=8 #NNcollisions=2 - Collision 716 projectile=anti_deuteron Ekin[MeV]=17535.4 direction=(0.73325,0.488239,0.473251) material=G4_Cu - --> #secondaries=58 impactParameter[fm]=0.437543 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=5 - Collision 717 projectile=He3 Ekin[MeV]=4485.55 direction=(0.525435,0.572548,0.62937) material=G4_Pb - --> #secondaries=11 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 718 projectile=anti_He3 Ekin[MeV]=25344.8 direction=(0.132921,0.636877,0.759421) material=G4_W - --> #secondaries=83 impactParameter[fm]=4.98974 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=178 #NNcollisions=3 - Collision 719 projectile=alpha Ekin[MeV]=2557.6 direction=(0.268231,0.797562,0.540321) material=G4_Ar - --> #secondaries=10 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 720 projectile=proton Ekin[MeV]=16664.7 direction=(0.0616766,0.302117,0.951273) material=G4_W - --> #secondaries=51 impactParameter[fm]=6.15416 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=3 - Collision 721 projectile=kaon0L Ekin[MeV]=12546.3 direction=(0.866085,0.0581657,0.496501) material=G4_Al - --> #secondaries=22 impactParameter[fm]=2.82802 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 722 projectile=xi- Ekin[MeV]=1955.18 direction=(0.611652,0.687679,0.391126) material=G4_Fe - --> #secondaries=16 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 723 projectile=anti_doublehyperH4 Ekin[MeV]=13248.8 direction=(0.127336,0.704653,0.698033) material=G4_Si - --> #secondaries=24 impactParameter[fm]=3.60827 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=23 #NNcollisions=2 - Collision 724 projectile=anti_xi_b0 Ekin[MeV]=9931.91 direction=(0.864774,0.269412,0.423773) material=G4_Be - --> #secondaries=4 impactParameter[fm]=2.12443 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 725 projectile=anti_proton Ekin[MeV]=1182.92 direction=(0.8575,0.49538,0.138898) material=G4_Be - --> #secondaries=7 impactParameter[fm]=3.80076 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=1 - Collision 726 projectile=anti_doublehyperH4 Ekin[MeV]=7790.33 direction=(0.33462,0.424825,0.841162) material=G4_Pb - --> #secondaries=86 impactParameter[fm]=5.96093 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=201 #NNcollisions=4 - Collision 727 projectile=Ds- Ekin[MeV]=9359.95 direction=(0.884896,0.308593,0.348898) material=G4_Al - --> #secondaries=13 impactParameter[fm]=3.82713 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 728 projectile=anti_triton Ekin[MeV]=25438.6 direction=(0.73237,0.552573,0.397867) material=G4_H - --> #secondaries=8 impactParameter[fm]=2.4917 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 729 projectile=pi- Ekin[MeV]=26232.8 direction=(0.963341,0.0817144,0.255534) material=G4_Si - --> #secondaries=14 impactParameter[fm]=2.53894 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 730 projectile=B- Ekin[MeV]=15344.1 direction=(0.80987,0.584387,0.0510163) material=G4_C - --> #secondaries=7 impactParameter[fm]=0.651117 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=10 #NNcollisions=1 - Collision 731 projectile=Ds+ Ekin[MeV]=19072.7 direction=(0.464044,0.349046,0.814144) material=G4_Cu - --> #secondaries=20 impactParameter[fm]=4.51698 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=64 #NNcollisions=1 - Collision 732 projectile=anti_omega_c0 Ekin[MeV]=19067.1 direction=(0.141136,0.873178,0.46652) material=G4_Ar - --> #secondaries=20 impactParameter[fm]=1.14034 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 733 projectile=xi_c0 Ekin[MeV]=11851.9 direction=(0.688757,0.496696,0.528116) material=G4_He - --> #secondaries=9 impactParameter[fm]=2.75251 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 734 projectile=B- Ekin[MeV]=1051.58 direction=(0.590699,0.504589,0.629654) material=G4_He - --> #secondaries=4 impactParameter[fm]=1.84948 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 735 projectile=proton Ekin[MeV]=20504.1 direction=(0.293914,0.806423,0.513124) material=G4_He - --> #secondaries=6 impactParameter[fm]=3.17493 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 736 projectile=anti_lambda_b Ekin[MeV]=6772.47 direction=(0.780802,0.509269,0.361931) material=G4_Fe - --> #secondaries=11 impactParameter[fm]=2.13681 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 737 projectile=xi_c+ Ekin[MeV]=21217.6 direction=(0.720051,0.0864332,0.688517) material=G4_Pb - --> #secondaries=91 impactParameter[fm]=2.5572 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=197 #NNcollisions=6 - Collision 738 projectile=lambda Ekin[MeV]=8933.05 direction=(0.426123,0.509693,0.747417) material=G4_Al - --> #secondaries=13 impactParameter[fm]=4.85318 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 739 projectile=omega_b- Ekin[MeV]=4784.42 direction=(0.659538,0.492857,0.56754) material=G4_W - --> #secondaries=30 impactParameter[fm]=3.84061 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=1 - Collision 740 projectile=anti_xi_b0 Ekin[MeV]=18985.9 direction=(0.789178,0.512929,0.337791) material=G4_Cu - --> #secondaries=12 impactParameter[fm]=4.45776 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=0 - Collision 741 projectile=anti_xi_c+ Ekin[MeV]=7450.58 direction=(0.562732,0.361922,0.743199) material=G4_Ar - --> #secondaries=20 impactParameter[fm]=2.51406 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 - Collision 742 projectile=anti_neutron Ekin[MeV]=19128.5 direction=(0.944565,0.00608214,0.328267) material=G4_Fe - --> #secondaries=13 impactParameter[fm]=4.41368 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 743 projectile=xi_c+ Ekin[MeV]=26100 direction=(0.519636,0.463077,0.71801) material=G4_Si - --> #secondaries=9 impactParameter[fm]=4.43353 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 - Collision 744 projectile=anti_lambda_b Ekin[MeV]=6325.28 direction=(0.855367,0.382589,0.349247) material=G4_Ar - --> #secondaries=17 impactParameter[fm]=4.41232 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=1 - Collision 745 projectile=anti_xi_b- Ekin[MeV]=3227.83 direction=(0.761618,0.551653,0.340026) material=G4_Cu - --> #secondaries=11 impactParameter[fm]=5.30405 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=0 - Collision 746 projectile=anti_sigma- Ekin[MeV]=22578.4 direction=(0.722348,0.685921,0.0879004) material=G4_Pb - --> #secondaries=62 impactParameter[fm]=5.53636 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=201 #NNcollisions=5 - Collision 747 projectile=anti_doublehyperH4 Ekin[MeV]=21293.8 direction=(0.635972,0.317898,0.703193) material=G4_W - --> #secondaries=110 impactParameter[fm]=5.21398 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=7 - Collision 748 projectile=xi_b0 Ekin[MeV]=10534.5 direction=(0.187746,0.614375,0.766352) material=G4_W - --> #secondaries=53 impactParameter[fm]=2.53321 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=176 #NNcollisions=2 - Collision 749 projectile=sigma+ Ekin[MeV]=24901.3 direction=(0.635586,0.520139,0.570514) material=G4_Ar - --> #secondaries=5 impactParameter[fm]=2.52184 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 750 projectile=pi- Ekin[MeV]=10808.9 direction=(0.758106,0.332083,0.561245) material=G4_Fe - --> #secondaries=19 impactParameter[fm]=2.02577 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=1 - Collision 751 projectile=anti_omega_c0 Ekin[MeV]=19248.2 direction=(0.214331,0.538723,0.814764) material=G4_Be - --> #secondaries=7 impactParameter[fm]=1.64354 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=1 - Collision 752 projectile=anti_hypertriton Ekin[MeV]=24884.4 direction=(0.536321,0.358885,0.763912) material=G4_Si - --> #secondaries=46 impactParameter[fm]=1.73443 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=5 - Collision 753 projectile=anti_sigma+ Ekin[MeV]=3965.2 direction=(0.57374,0.576663,0.58162) material=G4_C - --> #secondaries=7 impactParameter[fm]=0.62589 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=0 - Collision 754 projectile=anti_omega_b- Ekin[MeV]=21540.5 direction=(0.848021,0.527758,0.0482821) material=G4_C - --> #secondaries=9 impactParameter[fm]=1.85197 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 755 projectile=xi_b0 Ekin[MeV]=1262.01 direction=(0.679084,0.621235,0.39104) material=G4_Be - --> #secondaries=5 impactParameter[fm]=1.86803 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 756 projectile=hyperalpha Ekin[MeV]=29947.3 direction=(0.759444,0.470385,0.449425) material=G4_Cu - --> #secondaries=29 impactParameter[fm]=5.28337 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=61 #NNcollisions=2 - Collision 757 projectile=kaon0S Ekin[MeV]=15979.1 direction=(0.653236,0.482359,0.58362) material=G4_Cu - --> #secondaries=32 impactParameter[fm]=1.64245 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=1 - Collision 758 projectile=Bc- Ekin[MeV]=10202.2 direction=(0.602624,0.0816758,0.793835) material=G4_Ar - --> #secondaries=12 impactParameter[fm]=2.95598 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=2 - Collision 759 projectile=doublehyperH4 Ekin[MeV]=2251.63 direction=(0.612654,0.633122,0.473087) material=G4_H - --> #secondaries=3 impactParameter[fm]=2.30372 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=0 - Collision 760 projectile=xi_b0 Ekin[MeV]=19328.1 direction=(0.277815,0.81079,0.515208) material=G4_Be - --> #secondaries=7 impactParameter[fm]=1.28963 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 761 projectile=kaon- Ekin[MeV]=9305.96 direction=(0.795065,0.401811,0.454334) material=G4_Fe - --> #secondaries=23 impactParameter[fm]=3.53676 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 762 projectile=hyperHe5 Ekin[MeV]=25559.6 direction=(0.558022,0.124081,0.820497) material=G4_Fe - --> #secondaries=36 impactParameter[fm]=4.93061 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=51 #NNcollisions=2 - Collision 763 projectile=lambda_b Ekin[MeV]=15483.3 direction=(0.921334,0.164523,0.352245) material=G4_Fe - --> #secondaries=21 impactParameter[fm]=2.59559 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=2 - Collision 764 projectile=anti_B0 Ekin[MeV]=10631.3 direction=(0.675228,0.434283,0.596209) material=G4_H - --> #secondaries=3 impactParameter[fm]=0.724213 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 765 projectile=proton Ekin[MeV]=25008.6 direction=(0.916373,0.399809,0.0203101) material=G4_Cu - --> #secondaries=51 impactParameter[fm]=3.13606 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=59 #NNcollisions=3 - Collision 766 projectile=deuteron Ekin[MeV]=8688.76 direction=(0.435413,0.641465,0.631615) material=G4_He - --> #secondaries=7 impactParameter[fm]=2.01296 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=3 - Collision 767 projectile=Bc- Ekin[MeV]=28755 direction=(0.862849,0.488184,0.131029) material=G4_Ar - --> #secondaries=10 impactParameter[fm]=3.91027 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 768 projectile=anti_deuteron Ekin[MeV]=11378.8 direction=(0.684864,0.386173,0.617926) material=G4_Fe - --> #secondaries=17 impactParameter[fm]=6.22247 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=56 #NNcollisions=1 - Collision 769 projectile=D- Ekin[MeV]=11295.1 direction=(0.789754,0.608707,0.0759248) material=G4_Be - --> #secondaries=9 impactParameter[fm]=3.60891 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 770 projectile=xi_b0 Ekin[MeV]=5888.42 direction=(0.947716,0.306141,0.0900697) material=G4_C - --> #secondaries=8 impactParameter[fm]=1.76173 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 771 projectile=anti_neutron Ekin[MeV]=23693.7 direction=(0.408075,0.423056,0.809011) material=G4_Al - --> #secondaries=24 impactParameter[fm]=3.84328 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 772 projectile=lambda Ekin[MeV]=10664.9 direction=(0.0912705,0.782949,0.615354) material=G4_Al - --> #secondaries=13 impactParameter[fm]=3.92928 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 773 projectile=neutron Ekin[MeV]=11808 direction=(0.163657,0.891624,0.422164) material=G4_Ar - --> #secondaries=40 impactParameter[fm]=2.47602 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=35 #NNcollisions=3 - Collision 774 projectile=anti_proton Ekin[MeV]=14419.4 direction=(0.6383,0.726295,0.255085) material=G4_Ar - --> #secondaries=9 impactParameter[fm]=4.48461 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 775 projectile=anti_sigma- Ekin[MeV]=18281.3 direction=(0.777773,0.433033,0.455577) material=G4_H - --> #secondaries=8 impactParameter[fm]=0.746525 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=1 - Collision 776 projectile=B- Ekin[MeV]=12694.4 direction=(0.601881,0.60553,0.520646) material=G4_C - --> #secondaries=9 impactParameter[fm]=1.42485 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 777 projectile=anti_hyperH4 Ekin[MeV]=25936.2 direction=(0.153136,0.577504,0.801897) material=G4_Fe - --> #secondaries=66 impactParameter[fm]=1.537 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=51 #NNcollisions=7 - Collision 778 projectile=anti_lambda_c+ Ekin[MeV]=28931.1 direction=(0.0889537,0.995354,0.0368482) material=G4_Be - --> #secondaries=8 impactParameter[fm]=1.69629 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=0 - Collision 779 projectile=B0 Ekin[MeV]=10136.5 direction=(0.436078,0.89227,0.117005) material=G4_H - --> #secondaries=2 impactParameter[fm]=0.948219 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 780 projectile=triton Ekin[MeV]=3929.76 direction=(0.576974,0.816762,0.0003506) material=G4_Be - --> #secondaries=12 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 781 projectile=anti_hyperH4 Ekin[MeV]=27950 direction=(0.787636,0.0835245,0.610453) material=G4_Al - --> #secondaries=42 impactParameter[fm]=2.50037 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=5 - Collision 782 projectile=B- Ekin[MeV]=29594.3 direction=(0.470124,0.542962,0.695827) material=G4_Be - --> #secondaries=10 impactParameter[fm]=1.05554 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 783 projectile=xi- Ekin[MeV]=19635.1 direction=(0.799447,0.000469727,0.600737) material=G4_Fe - --> #secondaries=15 impactParameter[fm]=2.65016 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 784 projectile=triton Ekin[MeV]=4136.4 direction=(0.54146,0.395713,0.741777) material=G4_He - --> #secondaries=7 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 785 projectile=anti_sigma- Ekin[MeV]=26482.6 direction=(0.58714,0.615219,0.526091) material=G4_Pb - --> #secondaries=16 impactParameter[fm]=8.34952 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 - Collision 786 projectile=xi_c0 Ekin[MeV]=10634 direction=(0.442344,0.711303,0.546242) material=G4_H - --> #secondaries=4 impactParameter[fm]=2.04135 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 787 projectile=lambda_b Ekin[MeV]=24349.6 direction=(0.129903,0.65987,0.740065) material=G4_Al - --> #secondaries=25 impactParameter[fm]=1.86582 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=3 - Collision 788 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=12179.1 direction=(0.359245,0.679416,0.639795) material=G4_C - --> #secondaries=5 impactParameter[fm]=5.06411 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 789 projectile=anti_xi_b0 Ekin[MeV]=6368.41 direction=(0.35789,0.832846,0.422235) material=G4_Fe - --> #secondaries=24 impactParameter[fm]=1.29625 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=4 - Collision 790 projectile=lambda_b Ekin[MeV]=5793.7 direction=(0.477441,0.384478,0.790081) material=G4_H - --> #secondaries=2 impactParameter[fm]=0.417056 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=0 - Collision 791 projectile=lambda Ekin[MeV]=11760.2 direction=(0.887136,0.453408,0.0860827) material=G4_Fe - --> #secondaries=12 impactParameter[fm]=5.50769 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 792 projectile=anti_D0 Ekin[MeV]=23865.5 direction=(0.773628,0.262572,0.576676) material=G4_Be - --> #secondaries=6 impactParameter[fm]=2.40749 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 793 projectile=pi+ Ekin[MeV]=22451.7 direction=(0.506567,0.725632,0.465669) material=G4_Al - --> #secondaries=13 impactParameter[fm]=1.8138 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 794 projectile=anti_D0 Ekin[MeV]=29044.5 direction=(0.447024,0.237892,0.862309) material=G4_Al - --> #secondaries=20 impactParameter[fm]=3.22881 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 795 projectile=anti_xi_c0 Ekin[MeV]=17079.1 direction=(0.484564,0.607946,0.628967) material=G4_Fe - --> #secondaries=41 impactParameter[fm]=2.82834 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=3 - Collision 796 projectile=B0 Ekin[MeV]=29542.5 direction=(0.316739,0.658249,0.682923) material=G4_Cu - --> #secondaries=17 impactParameter[fm]=3.39437 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 797 projectile=anti_proton Ekin[MeV]=13803.1 direction=(0.0360928,0.994836,0.0948627) material=G4_C - --> #secondaries=18 impactParameter[fm]=1.3641 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 - Collision 798 projectile=anti_xi- Ekin[MeV]=21922.5 direction=(0.631005,0.618105,0.468805) material=G4_Ar - --> #secondaries=12 impactParameter[fm]=3.70847 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 799 projectile=anti_omega- Ekin[MeV]=5460.39 direction=(0.375204,0.791438,0.482543) material=G4_Al - --> #secondaries=20 impactParameter[fm]=2.33094 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 800 projectile=sigma- Ekin[MeV]=22626.1 direction=(0.781454,0.0464876,0.622228) material=G4_W - --> #secondaries=91 impactParameter[fm]=1.89837 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=175 #NNcollisions=6 + j=0 lambda_c+ p=(-523.244,7316.63,6904.5910330) MeV + j=1 pi0 p=(-247.145,329.761,196.924476.257) MeV + j=2 neutron p=(-22.5314,-126.588,385.9411023.85) MeV + j=3 pi+ p=(-76.1375,219.372,247.733367.114) MeV + j=4 neutron p=(1074.43,1536.52,1759.322737.38) MeV + j=5 kaon0L p=(-306.383,1215.49,1198.491804.24) MeV + j=6 kaon0L p=(229.027,3662.37,3482.245083.2) MeV + j=7 proton p=(-197.253,-43.9297,-105.698965.591) MeV + j=8 pi- p=(481.055,479.501,292.644752.632) MeV + j=9 kaon0S p=(753.225,1570.68,1949.792661.52) MeV + j=10 neutron p=(-107.471,283.456,53.9466988.732) MeV + j=11 Ne21 p=(86.0859,181.455,-86.754319551.8) MeV + j=12 neutron p=(-52.0735,22.6818,44.5942942.336) MeV + j=13 proton p=(64.059,9.42867,42.8613941.48) MeV + j=14 gamma p=(2.34934,-1.69224,-2.308923.70327) MeV + j=15 gamma p=(0.127864,-1.29768,-2.056562.43511) MeV + j=16 gamma p=(-0.175787,0.232321,0.1961660.35122) MeV + Collision 501 projectile=xi_b- Ekin[MeV]=25849.2 direction=(0.703643,0.381273,0.599598) material=G4_Ar + --> #secondaries=12 impactParameter[fm]=5.04011 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 502 projectile=kaon+ Ekin[MeV]=28095.5 direction=(0.415012,0.907299,0.0676229) material=G4_C + --> #secondaries=18 impactParameter[fm]=1.01696 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=10 #NNcollisions=2 + Collision 503 projectile=omega_c0 Ekin[MeV]=24498.4 direction=(0.161252,0.906829,0.389435) material=G4_Pb + --> #secondaries=49 impactParameter[fm]=4.89886 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=2 + Collision 504 projectile=D0 Ekin[MeV]=14817.1 direction=(0.326967,0.691691,0.643938) material=G4_Cu + --> #secondaries=15 impactParameter[fm]=4.6337 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 505 projectile=alpha Ekin[MeV]=9733.3 direction=(0.934574,0.289352,0.206994) material=G4_Be + --> #secondaries=8 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 506 projectile=xi_c0 Ekin[MeV]=22567.2 direction=(0.283265,0.953589,0.102119) material=G4_Ar + --> #secondaries=19 impactParameter[fm]=3.85376 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=0 + Collision 507 projectile=doublehyperH4 Ekin[MeV]=14218.1 direction=(0.530761,0.77976,0.332065) material=G4_He + --> #secondaries=13 impactParameter[fm]=0.493755 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=0 #NNcollisions=5 + Collision 508 projectile=anti_neutron Ekin[MeV]=5531.76 direction=(0.63607,0.27359,0.721501) material=G4_Ar + --> #secondaries=34 impactParameter[fm]=0.102525 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 509 projectile=anti_hyperHe5 Ekin[MeV]=27756.4 direction=(0.119028,0.809598,0.574791) material=G4_He + --> #secondaries=12 impactParameter[fm]=3.74516 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 510 projectile=xi_b0 Ekin[MeV]=17926.3 direction=(0.730101,0.568128,0.379714) material=G4_Si + --> #secondaries=12 impactParameter[fm]=3.94642 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 511 projectile=anti_xi_c0 Ekin[MeV]=21859.4 direction=(0.837662,0.536913,0.100238) material=G4_He + --> #secondaries=9 impactParameter[fm]=0.574919 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 + Collision 512 projectile=anti_xi0 Ekin[MeV]=25312.9 direction=(0.802767,0.590239,0.0847555) material=G4_W + --> #secondaries=82 impactParameter[fm]=3.57279 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=176 #NNcollisions=5 + Collision 513 projectile=He3 Ekin[MeV]=19543 direction=(0.181061,0.530469,0.828142) material=G4_Fe + --> #secondaries=25 impactParameter[fm]=4.51418 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=55 #NNcollisions=2 + Collision 514 projectile=anti_He3 Ekin[MeV]=20107.6 direction=(0.856796,0.296506,0.421883) material=G4_W + --> #secondaries=43 impactParameter[fm]=7.38558 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=186 #NNcollisions=2 + Collision 515 projectile=xi_b0 Ekin[MeV]=7047.07 direction=(0.650738,0.49088,0.57929) material=G4_Be + --> #secondaries=7 impactParameter[fm]=2.62301 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 516 projectile=sigma- Ekin[MeV]=12562.4 direction=(0.660985,0.384995,0.64411) material=G4_Be + --> #secondaries=11 impactParameter[fm]=3.71617 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 517 projectile=omega_c0 Ekin[MeV]=13270.5 direction=(0.375141,0.556412,0.7414) material=G4_C + --> #secondaries=8 impactParameter[fm]=3.37747 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=12 #NNcollisions=1 + Collision 518 projectile=anti_hyperalpha Ekin[MeV]=27692 direction=(0.658058,0.732384,0.17485) material=G4_W + --> #secondaries=11 impactParameter[fm]=9.20043 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=181 #NNcollisions=0 + Collision 519 projectile=D- Ekin[MeV]=18669.8 direction=(0.215494,0.81738,0.534278) material=G4_Cu + --> #secondaries=16 impactParameter[fm]=4.72424 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 520 projectile=anti_xi_c+ Ekin[MeV]=14995.6 direction=(0.901866,0.148583,0.405661) material=G4_C + --> #secondaries=18 impactParameter[fm]=2.24079 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=3 + Collision 521 projectile=kaon0S Ekin[MeV]=29263.9 direction=(0.906297,0.129391,0.402347) material=G4_Pb + --> #secondaries=94 impactParameter[fm]=2.40519 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=201 #NNcollisions=6 + Collision 522 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=13638.7 direction=(0.463225,0.587898,0.663173) material=G4_H + --> #secondaries=8 impactParameter[fm]=1.53949 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 523 projectile=anti_hypertriton Ekin[MeV]=18709 direction=(0.391303,0.822859,0.412051) material=G4_Pb + --> #secondaries=61 impactParameter[fm]=6.05 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=207 #NNcollisions=2 + Collision 524 projectile=anti_hyperH4 Ekin[MeV]=7523.16 direction=(0.798959,0.557021,0.226699) material=G4_Pb + --> #secondaries=127 impactParameter[fm]=2.37287 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=4 + Collision 525 projectile=anti_xi_c0 Ekin[MeV]=28739 direction=(0.484447,0.695209,0.531033) material=G4_He + --> #secondaries=8 impactParameter[fm]=1.79785 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 526 projectile=anti_xi_b0 Ekin[MeV]=13411.1 direction=(0.906549,0.0314925,0.420924) material=G4_H + --> #secondaries=4 impactParameter[fm]=0.441076 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 527 projectile=anti_alpha Ekin[MeV]=17079.4 direction=(0.790489,0.343873,0.506832) material=G4_Be + --> #secondaries=17 impactParameter[fm]=3.23886 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=8 #NNcollisions=3 + Collision 528 projectile=kaon- Ekin[MeV]=17849.1 direction=(0.447674,0.872391,0.196268) material=G4_Fe + --> #secondaries=36 impactParameter[fm]=3.96784 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=52 #NNcollisions=3 + Collision 529 projectile=anti_doublehyperH4 Ekin[MeV]=27264 direction=(0.474829,0.496692,0.726522) material=G4_Cu + --> #secondaries=18 impactParameter[fm]=5.53456 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=64 #NNcollisions=1 + Collision 530 projectile=Bs0 Ekin[MeV]=4770.56 direction=(0.361201,0.597629,0.715803) material=G4_Fe + --> #secondaries=9 impactParameter[fm]=2.74307 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 531 projectile=pi- Ekin[MeV]=12948.2 direction=(0.58918,0.0549084,0.806134) material=G4_Pb + --> #secondaries=83 impactParameter[fm]=1.68928 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=204 #NNcollisions=2 + Collision 532 projectile=D- Ekin[MeV]=12782.6 direction=(0.625295,0.0490342,0.778846) material=G4_Be + --> #secondaries=11 impactParameter[fm]=2.73306 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 533 projectile=xi_c0 Ekin[MeV]=26573.4 direction=(0.704009,0.229507,0.672084) material=G4_Fe + --> #secondaries=19 impactParameter[fm]=4.2821 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 534 projectile=B+ Ekin[MeV]=18684.5 direction=(0.250677,0.967701,0.026767) material=G4_Si + --> #secondaries=20 impactParameter[fm]=1.84604 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 535 projectile=xi0 Ekin[MeV]=9944.77 direction=(0.718392,0.304906,0.625256) material=G4_H + --> #secondaries=6 impactParameter[fm]=0.71998 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 536 projectile=anti_xi_b- Ekin[MeV]=9293.49 direction=(0.986069,0.116472,0.118752) material=G4_H + --> #secondaries=4 impactParameter[fm]=0.716665 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 537 projectile=doublehyperdoubleneutron Ekin[MeV]=29912 direction=(0.116196,0.316774,0.941357) material=G4_Fe + --> #secondaries=26 impactParameter[fm]=6.33597 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 538 projectile=anti_hyperHe5 Ekin[MeV]=18106.7 direction=(0.463333,0.729803,0.502703) material=G4_Pb + --> #secondaries=105 impactParameter[fm]=5.62533 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=199 #NNcollisions=8 + Collision 539 projectile=anti_omega- Ekin[MeV]=1800.4 direction=(0.0989268,0.58262,0.806702) material=G4_C + --> #secondaries=10 impactParameter[fm]=1.24706 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 + Collision 540 projectile=doublehyperH4 Ekin[MeV]=6226.57 direction=(0.886992,0.163456,0.431889) material=G4_Al + --> #secondaries=24 impactParameter[fm]=3.34633 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=22 #NNcollisions=1 + Collision 541 projectile=lambda Ekin[MeV]=7492.09 direction=(0.295963,0.863234,0.408941) material=G4_He + --> #secondaries=4 impactParameter[fm]=2.16263 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 542 projectile=anti_xi_c+ Ekin[MeV]=26790.6 direction=(0.666274,0.717448,0.203341) material=G4_Al + --> #secondaries=28 impactParameter[fm]=1.10401 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 543 projectile=anti_hyperalpha Ekin[MeV]=20818.6 direction=(0.694782,0.279615,0.662641) material=G4_He + --> #secondaries=8 impactParameter[fm]=2.22734 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 544 projectile=anti_sigma- Ekin[MeV]=4762.66 direction=(0.181612,0.594847,0.783054) material=G4_Pb + --> #secondaries=70 impactParameter[fm]=3.17641 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 545 projectile=doublehyperdoubleneutron Ekin[MeV]=26164.8 direction=(0.929005,0.0450448,0.367315) material=G4_Si + --> #secondaries=32 impactParameter[fm]=3.42585 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=23 #NNcollisions=2 + Collision 546 projectile=lambda_c+ Ekin[MeV]=6465.11 direction=(0.392146,0.90238,0.178694) material=G4_C + --> #secondaries=9 impactParameter[fm]=1.94381 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 + Collision 547 projectile=anti_neutron Ekin[MeV]=29745.3 direction=(0.641149,0.386829,0.662791) material=G4_Ar + --> #secondaries=23 impactParameter[fm]=4.4148 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 548 projectile=lambda_b Ekin[MeV]=12106.2 direction=(0.222612,0.92976,0.293241) material=G4_Pb + --> #secondaries=44 impactParameter[fm]=5.88038 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=1 + Collision 549 projectile=anti_sigma- Ekin[MeV]=5985.38 direction=(0.827045,0.217941,0.518168) material=G4_Be + --> #secondaries=6 impactParameter[fm]=0.618472 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 550 projectile=anti_xi- Ekin[MeV]=8771.72 direction=(0.87151,0.0605456,0.486625) material=G4_Al + --> #secondaries=22 impactParameter[fm]=1.72804 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 551 projectile=Ds- Ekin[MeV]=17015.7 direction=(0.592412,0.662547,0.458344) material=G4_Fe + --> #secondaries=20 impactParameter[fm]=3.12614 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 552 projectile=Bs0 Ekin[MeV]=29953.4 direction=(0.93519,0.341706,0.0930447) material=G4_Al + --> #secondaries=18 impactParameter[fm]=0.820467 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=24 #NNcollisions=3 + Collision 553 projectile=He3 Ekin[MeV]=5862.6 direction=(0.266762,0.360617,0.893752) material=G4_Al + --> #secondaries=28 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 554 projectile=pi- Ekin[MeV]=22663.6 direction=(0.301956,0.951869,0.0526038) material=G4_He + --> #secondaries=15 impactParameter[fm]=1.58521 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 555 projectile=anti_lambda_b Ekin[MeV]=4022 direction=(0.304969,0.744259,0.594199) material=G4_W + --> #secondaries=44 impactParameter[fm]=3.69529 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=173 #NNcollisions=0 + Collision 556 projectile=anti_lambda_c+ Ekin[MeV]=29107.1 direction=(0.282479,0.600764,0.747856) material=G4_Al + --> #secondaries=17 impactParameter[fm]=2.86568 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 557 projectile=pi- Ekin[MeV]=28006.2 direction=(0.583726,0.565472,0.582672) material=G4_C + --> #secondaries=16 impactParameter[fm]=2.43322 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 558 projectile=hypertriton Ekin[MeV]=14716 direction=(0.531175,0.842931,0.0855553) material=G4_Si + --> #secondaries=15 impactParameter[fm]=6.48867 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 559 projectile=anti_hyperHe5 Ekin[MeV]=25884.1 direction=(0.846591,0.313208,0.43033) material=G4_C + --> #secondaries=35 impactParameter[fm]=0.933246 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=8 #NNcollisions=6 + Collision 560 projectile=doublehyperH4 Ekin[MeV]=1078.44 direction=(0.826535,0.54055,0.156989) material=G4_C + --> #secondaries=12 impactParameter[fm]=0.717928 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 561 projectile=doublehyperH4 Ekin[MeV]=11987 direction=(0.882495,0.433549,0.182314) material=G4_W + --> #secondaries=54 impactParameter[fm]=5.13301 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=4 + Collision 562 projectile=anti_omega_b- Ekin[MeV]=21461.3 direction=(0.514534,0.725839,0.456523) material=G4_W + --> #secondaries=60 impactParameter[fm]=4.02425 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=177 #NNcollisions=4 + Collision 563 projectile=doublehyperdoubleneutron Ekin[MeV]=6196.87 direction=(0.457366,0.136856,0.878685) material=G4_Al + --> #secondaries=29 impactParameter[fm]=0.438432 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=15 #NNcollisions=1 + Collision 564 projectile=Ds+ Ekin[MeV]=8000.38 direction=(0.500705,0.682773,0.532086) material=G4_C + --> #secondaries=11 impactParameter[fm]=2.49331 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 565 projectile=xi_b- Ekin[MeV]=21746.5 direction=(0.13172,0.0439956,0.99031) material=G4_Al + --> #secondaries=15 impactParameter[fm]=2.03315 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 566 projectile=anti_He3 Ekin[MeV]=16254.6 direction=(0.658785,0.742304,0.12242) material=G4_Si + --> #secondaries=25 impactParameter[fm]=3.57012 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=27 #NNcollisions=3 + Collision 567 projectile=anti_hyperH4 Ekin[MeV]=23362.5 direction=(0.193285,0.5917,0.782644) material=G4_He + --> #secondaries=10 impactParameter[fm]=2.82402 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=4 #NNcollisions=1 + Collision 568 projectile=anti_xi_c0 Ekin[MeV]=17617.7 direction=(0.821106,0.555281,0.132092) material=G4_Al + --> #secondaries=18 impactParameter[fm]=4.13633 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 569 projectile=anti_xi_c0 Ekin[MeV]=17971.1 direction=(0.125791,0.855169,0.502854) material=G4_Fe + --> #secondaries=30 impactParameter[fm]=3.07279 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 570 projectile=D- Ekin[MeV]=12289 direction=(0.855641,0.515254,0.048911) material=G4_Si + --> #secondaries=17 impactParameter[fm]=3.23995 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 571 projectile=anti_D0 Ekin[MeV]=7069.25 direction=(0.908293,0.0794384,0.410723) material=G4_Fe + --> #secondaries=7 impactParameter[fm]=4.94191 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 572 projectile=deuteron Ekin[MeV]=6255.8 direction=(0.795207,0.0307469,0.605558) material=G4_Be + --> #secondaries=6 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 573 projectile=He3 Ekin[MeV]=3044.54 direction=(0.113171,0.0297188,0.993131) material=G4_Ar + --> #secondaries=23 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 574 projectile=Ds- Ekin[MeV]=14093.3 direction=(0.5602,0.496727,0.662901) material=G4_He + --> #secondaries=4 impactParameter[fm]=1.75459 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 575 projectile=anti_xi0 Ekin[MeV]=26680.1 direction=(0.591289,0.102857,0.799874) material=G4_H + --> #secondaries=4 impactParameter[fm]=2.24803 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 576 projectile=He3 Ekin[MeV]=19964.8 direction=(0.462359,0.771371,0.437276) material=G4_Pb + --> #secondaries=90 impactParameter[fm]=3.83391 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=194 #NNcollisions=7 + Collision 577 projectile=lambda Ekin[MeV]=16564.2 direction=(0.112518,0.0634571,0.991621) material=G4_Si + --> #secondaries=16 impactParameter[fm]=2.57854 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 578 projectile=anti_lambda Ekin[MeV]=26933.5 direction=(0.674111,0.0410207,0.73749) material=G4_H + --> #secondaries=6 impactParameter[fm]=0.985784 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 579 projectile=anti_sigma- Ekin[MeV]=13302.4 direction=(0.810971,0.0876274,0.578488) material=G4_C + --> #secondaries=12 impactParameter[fm]=2.29784 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=12 #NNcollisions=1 + Collision 580 projectile=doublehyperdoubleneutron Ekin[MeV]=12283.2 direction=(0.212588,0.00165828,0.977141) material=G4_Ar + --> #secondaries=9 impactParameter[fm]=5.69133 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 581 projectile=Ds+ Ekin[MeV]=13140 direction=(0.651895,0.668493,0.357982) material=G4_H + --> #secondaries=3 impactParameter[fm]=0.449382 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 582 projectile=anti_sigma- Ekin[MeV]=19985.6 direction=(0.426949,0.592701,0.68295) material=G4_C + --> #secondaries=15 impactParameter[fm]=3.15775 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 583 projectile=xi_c0 Ekin[MeV]=11892.6 direction=(0.970455,0.109274,0.215119) material=G4_Ar + --> #secondaries=15 impactParameter[fm]=4.33773 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 584 projectile=B+ Ekin[MeV]=28628.2 direction=(0.58748,0.439718,0.679349) material=G4_Cu + --> #secondaries=15 impactParameter[fm]=2.71698 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=0 + Collision 585 projectile=lambda_b Ekin[MeV]=13114.5 direction=(0.39459,0.486883,0.779258) material=G4_H + --> #secondaries=5 impactParameter[fm]=1.47951 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 586 projectile=anti_xi- Ekin[MeV]=2475.16 direction=(0.471196,0.505466,0.722827) material=G4_Ar + --> #secondaries=15 impactParameter[fm]=3.60058 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=0 + Collision 587 projectile=D0 Ekin[MeV]=24651.5 direction=(0.153357,0.658183,0.737073) material=G4_Pb + --> #secondaries=63 impactParameter[fm]=5.23106 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=201 #NNcollisions=5 + Collision 588 projectile=kaon+ Ekin[MeV]=13185.8 direction=(0.869622,0.18543,0.457574) material=G4_Si + --> #secondaries=16 impactParameter[fm]=1.13133 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 589 projectile=lambda_b Ekin[MeV]=3422.77 direction=(0.533965,0.717632,0.447086) material=G4_H + --> #secondaries=2 impactParameter[fm]=1.20208 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 590 projectile=anti_lambda_b Ekin[MeV]=1926.26 direction=(0.732235,0.638812,0.236115) material=G4_W + --> #secondaries=45 impactParameter[fm]=4.8328 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=0 + Collision 591 projectile=xi_c0 Ekin[MeV]=3818.41 direction=(0.693102,0.190826,0.695123) material=G4_Pb + --> #secondaries=43 impactParameter[fm]=2.45733 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=1 + Collision 592 projectile=anti_xi_c+ Ekin[MeV]=13688.5 direction=(0.748249,0.505619,0.429503) material=G4_He + --> #secondaries=5 impactParameter[fm]=1.25962 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 593 projectile=neutron Ekin[MeV]=24017.5 direction=(0.161477,0.730987,0.66301) material=G4_Pb + --> #secondaries=86 impactParameter[fm]=2.26872 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=5 + Collision 594 projectile=anti_xi0 Ekin[MeV]=24977.9 direction=(0.517669,0.800201,0.302814) material=G4_He + --> #secondaries=4 impactParameter[fm]=2.22237 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 595 projectile=B0 Ekin[MeV]=8009.84 direction=(0.916565,0.292978,0.272161) material=G4_H + --> #secondaries=3 impactParameter[fm]=0.717336 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 596 projectile=kaon0S Ekin[MeV]=22030.2 direction=(0.406351,0.744296,0.530002) material=G4_Al + --> #secondaries=24 impactParameter[fm]=2.40026 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 597 projectile=D- Ekin[MeV]=25221.1 direction=(0.508095,0.308752,0.80406) material=G4_W + --> #secondaries=67 impactParameter[fm]=4.24956 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=182 #NNcollisions=4 + Collision 598 projectile=kaon0L Ekin[MeV]=10182.9 direction=(0.288512,0.438976,0.850918) material=G4_Fe + --> #secondaries=15 impactParameter[fm]=2.70127 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 599 projectile=anti_xi0 Ekin[MeV]=17397.8 direction=(0.594158,0.585798,0.551196) material=G4_Pb + --> #secondaries=34 impactParameter[fm]=7.47331 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=1 + Collision 600 projectile=xi- Ekin[MeV]=17132.6 direction=(0.659489,0.713523,0.236557) material=G4_Fe + --> #secondaries=42 impactParameter[fm]=3.05667 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=51 #NNcollisions=5 List of produced secondaries: - j=0 proton p=(1742.49,335.819,1706.982634.99) MeV - j=1 pi- p=(103.075,3.39715,282.166331.26) MeV - j=2 pi0 p=(10.7446,6.67969,36.7251140.455) MeV - j=3 neutron p=(-252.785,106.9,-204.9021000.05) MeV - j=4 sigma0 p=(218.715,435.291,587.4291415.9) MeV - j=5 neutron p=(1051.67,-694.49,631.5051694.08) MeV - j=6 pi+ p=(952.932,461.47,1037.731489.09) MeV - j=7 pi- p=(1938.59,451.161,1910.92762.74) MeV - j=8 pi+ p=(2081.5,299.868,2108.542981.28) MeV - j=9 neutron p=(-223,-228.269,175.3691007.66) MeV - j=10 pi0 p=(191.057,-58.4065,193.383309.079) MeV - j=11 neutron p=(367.967,466.58,19.50141111.87) MeV - j=12 pi0 p=(356.176,35.7821,262.069463.725) MeV - j=13 neutron p=(-148.841,-85.3745,252.627987.95) MeV - j=14 neutron p=(-32.3798,66.7586,-237.24971.891) MeV - j=15 neutron p=(1.99806,-359.59,221.2181030.06) MeV - j=16 proton p=(139.109,172.309,-136.305973.64) MeV - j=17 proton p=(138.269,-67.6395,-348.2411012.58) MeV - j=18 proton p=(72.0366,208.639,80.5732967.247) MeV - j=19 proton p=(-32.6597,230.027,283.8041007.41) MeV - j=20 proton p=(10.8858,-233.247,-252.526999.323) MeV - j=21 neutron p=(50.6254,-251.589,167.584988.295) MeV - j=22 neutron p=(4.11295,-123.91,170.229962.877) MeV - j=23 neutron p=(-72.4515,-35.761,-374.0141014.49) MeV - j=24 proton p=(516.494,-72.1858,372.3161136.2) MeV - j=25 neutron p=(141.064,128.962,167.728973.368) MeV - j=26 proton p=(244.431,-202.54,-95.1631995.078) MeV - j=27 pi- p=(25.2885,76.2846,264.813309.943) MeV - j=28 pi0 p=(969.332,-59.3382,680.0711193.25) MeV - j=29 pi+ p=(424.825,-74.2117,400.026604.553) MeV - j=30 pi0 p=(2121.16,-23.162,840.2482285.63) MeV - j=31 pi- p=(892.216,-125.405,758.1161185.75) MeV - j=32 pi- p=(128.877,-432.08,64.695476.411) MeV - j=33 neutron p=(280.417,-258.841,-145.8381024.54) MeV - j=34 pi- p=(108.653,4.81225,-310.398357.289) MeV - j=35 neutron p=(819.428,-233.962,147.11276.96) MeV - j=36 neutron p=(-167.949,5.11468,383.4251028.61) MeV - j=37 neutron p=(307.506,43.5076,21.6579989.801) MeV - j=38 neutron p=(276.364,-79.8313,-281.7271022.21) MeV - j=39 neutron p=(320.011,-249.815,626.0671199.82) MeV - j=40 neutron p=(-4.92897,-203.988,-266.449997.704) MeV - j=41 neutron p=(500.208,-196.088,324.1881129.84) MeV - j=42 proton p=(283.135,-214.321,166.5471016.95) MeV - j=43 proton p=(315.767,-487.39,-312.4051146.83) MeV - j=44 neutron p=(196.987,187.615,63.7938980.233) MeV - j=45 proton p=(235.606,263.575,-29.781003.11) MeV - j=46 proton p=(20.7835,447.784,223.3041063.56) MeV - j=47 proton p=(-99.4209,-177.702,-316.5531010.95) MeV - j=48 deuteron p=(-30.1421,291.687,588.4411987.51) MeV - j=49 proton p=(-72.9049,187.201,-43.5327960.525) MeV - j=50 neutron p=(-478.079,-83.7455,171.3381071.31) MeV - j=51 proton p=(193.15,-191.746,420.9211063.77) MeV - j=52 proton p=(25.5452,90.335,-32.0263943.5) MeV - j=53 neutron p=(393.077,26.1831,-69.96741021.21) MeV - j=54 neutron p=(69.9919,-244.731,48.6005974.647) MeV - j=55 neutron p=(440.52,229.823,-57.18481064.39) MeV - j=56 proton p=(-2.99724,282.294,274.5811017.57) MeV - j=57 proton p=(-375.16,698.093,994.8991580.59) MeV - j=58 neutron p=(115.692,-67.4881,-24.5276949.381) MeV - j=59 neutron p=(-125.669,131.939,-10.7417957.131) MeV - j=60 neutron p=(-13.2731,64.1631,-72.725944.651) MeV - j=61 neutron p=(77.0626,-1.09921,75.8723945.769) MeV - j=62 proton p=(-159.484,15.3414,-37.5016952.592) MeV - j=63 neutron p=(34.4175,-61.9453,-154.266954.779) MeV - j=64 deuteron p=(-95.4088,-199.65,56.41081889.46) MeV - j=65 neutron p=(-5.10483,166.487,65.6338956.47) MeV - j=66 neutron p=(75.1981,112.027,124.464957.329) MeV - j=67 proton p=(-203.053,26.6567,68.3041962.788) MeV - j=68 neutron p=(-44.5633,-24.685,165.191955.336) MeV - j=69 alpha p=(128.125,306.283,267.0543751.65) MeV - j=70 proton p=(21.859,-3.24609,-140.329948.965) MeV - j=71 proton p=(-43.7148,72.7712,107.375948.204) MeV - j=72 neutron p=(103.546,-39.4988,15.9708946.214) MeV - j=73 neutron p=(-67.1174,84.5955,-29.3239946.205) MeV - j=74 neutron p=(-19.9946,-8.71685,-88.5432943.98) MeV - j=75 proton p=(-93.5486,81.3991,84.8804950.23) MeV - j=76 neutron p=(69.1266,9.10274,3.55722942.156) MeV - j=77 neutron p=(-38.3687,81.8748,15.5881944.035) MeV - j=78 neutron p=(14.1741,107.504,-6.11802945.822) MeV - j=79 neutron p=(1.47827,16.8626,73.7765942.609) MeV - j=80 neutron p=(-20.7311,56.2183,21.0481941.709) MeV - j=81 neutron p=(-25.2973,-5.22928,1.13513939.921) MeV - j=82 neutron p=(-7.47733,28.1603,-109.213946.34) MeV - j=83 neutron p=(6.51091,-49.7506,-69.9004943.497) MeV - j=84 neutron p=(-14.4191,11.2121,9.24193939.788) MeV - j=85 gamma p=(0.232702,-0.908265,-0.8138721.24156) MeV - j=86 gamma p=(0.0461113,0.828708,0.05640470.831904) MeV - j=87 gamma p=(-0.276006,0.445589,0.01338670.524317) MeV - j=88 gamma p=(-0.10759,-0.0199584,-0.1820730.212425) MeV - j=89 gamma p=(0.148752,-0.229164,-1.090631.12433) MeV - j=90 In108 p=(1234.48,-299.893,-222.243100501) MeV - Collision 801 projectile=anti_He3 Ekin[MeV]=6535.7 direction=(0.585895,0.593134,0.552196) material=G4_Fe - --> #secondaries=38 impactParameter[fm]=3.40838 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 802 projectile=lambda Ekin[MeV]=17296.5 direction=(0.940806,0.321726,0.106663) material=G4_Pb - --> #secondaries=95 impactParameter[fm]=1.57637 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=4 - Collision 803 projectile=xi_c+ Ekin[MeV]=6406.14 direction=(0.972312,0.158875,0.171374) material=G4_Cu - --> #secondaries=12 impactParameter[fm]=4.89476 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=0 - Collision 804 projectile=anti_lambda_c+ Ekin[MeV]=20510.2 direction=(0.994637,0.0241985,0.100555) material=G4_Pb - --> #secondaries=65 impactParameter[fm]=4.93988 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=201 #NNcollisions=5 - Collision 805 projectile=anti_omega- Ekin[MeV]=5552.62 direction=(0.0725284,0.526257,0.847227) material=G4_He - --> #secondaries=5 impactParameter[fm]=0.663517 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 806 projectile=xi_b- Ekin[MeV]=12275 direction=(0.326741,0.928073,0.178661) material=G4_Fe - --> #secondaries=15 impactParameter[fm]=4.10185 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=0 - Collision 807 projectile=hyperH4 Ekin[MeV]=9377.67 direction=(0.486859,0.350468,0.800088) material=G4_Pb - --> #secondaries=8 impactParameter[fm]=10.5854 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=206 #NNcollisions=1 - Collision 808 projectile=anti_He3 Ekin[MeV]=10297.4 direction=(0.0450945,0.83014,0.555728) material=G4_W - --> #secondaries=89 impactParameter[fm]=5.42806 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=176 #NNcollisions=7 - Collision 809 projectile=anti_xi_b- Ekin[MeV]=28406 direction=(0.36579,0.811053,0.456499) material=G4_Si - --> #secondaries=16 impactParameter[fm]=3.05292 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 810 projectile=He3 Ekin[MeV]=4156.76 direction=(0.323018,0.889211,0.323982) material=G4_Si + j=0 lambda p=(1872.97,1895.28,1333.473181.67) MeV + j=1 pi0 p=(-76.5564,174.506,-165.515286.229) MeV + j=2 sigma0 p=(529.46,111.243,-370.8491361.11) MeV + j=3 neutron p=(872.811,308.148,139.1911326.24) MeV + j=4 pi+ p=(439.819,997.995,185.4881115.04) MeV + j=5 pi- p=(87.3551,315.894,248.436434.304) MeV + j=6 pi0 p=(1061.34,1386.76,438.4321805.54) MeV + j=7 neutron p=(-110.707,384.717,-66.34951023.45) MeV + j=8 pi+ p=(165.344,91.1288,-31.0505236.827) MeV + j=9 pi- p=(792.888,1748.06,494.111986.96) MeV + j=10 pi0 p=(539.665,452.026,32.5835717.528) MeV + j=11 pi- p=(734.111,691.117,408.5631096.8) MeV + j=12 neutron p=(-23.1087,548.929,-184.0331103.86) MeV + j=13 neutron p=(101.467,100.305,399.891031.04) MeV + j=14 neutron p=(-205.272,-201.174,-106.044988.249) MeV + j=15 pi- p=(659.556,786.355,654.6011225.3) MeV + j=16 pi0 p=(375.476,640.796,82.7628759.388) MeV + j=17 pi+ p=(654.81,702.884,252.0331002.91) MeV + j=18 pi+ p=(990.702,675.604,223.0191227.66) MeV + j=19 neutron p=(1496.22,740.598,491.8221977.83) MeV + j=20 pi+ p=(89.8746,-89.2584,-160.855247.787) MeV + j=21 proton p=(416.231,297.967,-103.6361073.84) MeV + j=22 neutron p=(-218.537,-362.093,-459.5361128.2) MeV + j=23 proton p=(-240.829,70.8107,404.4461052.11) MeV + j=24 neutron p=(111.766,45.778,-41.6483948.211) MeV + j=25 neutron p=(-22.9181,12.6392,-88.9579944.13) MeV + j=26 neutron p=(147.805,95.1603,122.719963.714) MeV + j=27 neutron p=(154.696,-94.9993,-84.5907960.674) MeV + j=28 alpha p=(224.361,-110.248,-207.5163741.51) MeV + j=29 deuteron p=(-101.659,-88.5947,157.5671887.04) MeV + j=30 alpha p=(-96.1866,98.8587,-330.1983744.52) MeV + j=31 proton p=(43.3342,210.081,131.399971.407) MeV + j=32 proton p=(-49.3923,209.293,-64.2929964.744) MeV + j=33 alpha p=(-123.045,201.631,193.5153739.87) MeV + j=34 neutron p=(-104.952,-34.1359,-27.3019946.419) MeV + j=35 alpha p=(98.22,-146.539,1.953013731.55) MeV + j=36 neutron p=(63.0438,-42.4948,14.6749942.751) MeV + j=37 proton p=(15.3311,-24.6116,92.3138943.248) MeV + j=38 gamma p=(-0.0556199,3.04123,3.095674.33997) MeV + j=39 gamma p=(0.830654,-0.932818,0.07065431.25105) MeV + j=40 gamma p=(-0.0608722,-0.254522,-0.0496210.266363) MeV + j=41 Ne19 p=(772.817,331.345,340.49517718.3) MeV + Collision 601 projectile=anti_proton Ekin[MeV]=18477.5 direction=(0.327203,0.88019,0.343807) material=G4_Si + --> #secondaries=28 impactParameter[fm]=3.18588 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 602 projectile=anti_xi_c+ Ekin[MeV]=19355.6 direction=(0.690738,0.149462,0.70749) material=G4_Be + --> #secondaries=10 impactParameter[fm]=1.96926 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 603 projectile=hypertriton Ekin[MeV]=20583.9 direction=(0.448204,0.360501,0.818017) material=G4_Be + --> #secondaries=9 impactParameter[fm]=6.39193 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 604 projectile=doublehyperdoubleneutron Ekin[MeV]=24030.8 direction=(0.240134,0.628513,0.739802) material=G4_H + --> #secondaries=8 impactParameter[fm]=1.55509 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=0 #NNcollisions=2 + Collision 605 projectile=anti_lambda_b Ekin[MeV]=4602.89 direction=(0.427092,0.37888,0.821001) material=G4_Cu + --> #secondaries=19 impactParameter[fm]=3.86205 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=59 #NNcollisions=1 + Collision 606 projectile=xi_b0 Ekin[MeV]=14282.2 direction=(0.64283,0.509244,0.572223) material=G4_Cu + --> #secondaries=10 impactParameter[fm]=4.51218 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=0 + Collision 607 projectile=anti_xi_c+ Ekin[MeV]=10079.7 direction=(0.963415,0.225292,0.14517) material=G4_C + --> #secondaries=10 impactParameter[fm]=2.91875 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 608 projectile=xi0 Ekin[MeV]=8382.42 direction=(0.646319,0.690322,0.325158) material=G4_Be + --> #secondaries=5 impactParameter[fm]=2.48553 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 609 projectile=neutron Ekin[MeV]=1276.84 direction=(0.579474,0.655373,0.484455) material=G4_C + --> #secondaries=5 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 610 projectile=anti_lambda Ekin[MeV]=6844.82 direction=(0.207273,0.825014,0.525727) material=G4_Ar + --> #secondaries=34 impactParameter[fm]=4.23344 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 611 projectile=anti_doublehyperH4 Ekin[MeV]=21087.2 direction=(0.325138,0.628927,0.706212) material=G4_Cu + --> #secondaries=57 impactParameter[fm]=3.8316 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=58 #NNcollisions=6 + Collision 612 projectile=omega- Ekin[MeV]=22512 direction=(0.128859,0.63524,0.761489) material=G4_W + --> #secondaries=70 impactParameter[fm]=5.1454 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=179 #NNcollisions=5 + Collision 613 projectile=alpha Ekin[MeV]=29898.6 direction=(0.409638,0.467175,0.783545) material=G4_Be + --> #secondaries=22 impactParameter[fm]=2.4465 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=4 #NNcollisions=7 + Collision 614 projectile=anti_triton Ekin[MeV]=28912.5 direction=(0.734207,0.29418,0.611881) material=G4_H + --> #secondaries=5 impactParameter[fm]=2.04264 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=1 #NNcollisions=1 + Collision 615 projectile=xi- Ekin[MeV]=6011.55 direction=(0.519861,0.556856,0.647809) material=G4_Si + --> #secondaries=13 impactParameter[fm]=3.02046 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=29 #NNcollisions=1 + Collision 616 projectile=anti_neutron Ekin[MeV]=25627.8 direction=(0.853392,0.132297,0.504201) material=G4_Fe + --> #secondaries=25 impactParameter[fm]=1.9468 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=2 + Collision 617 projectile=anti_D0 Ekin[MeV]=2821.94 direction=(0.742546,0.579254,0.336289) material=G4_Ar + --> #secondaries=8 impactParameter[fm]=2.60216 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 618 projectile=xi- Ekin[MeV]=3311.12 direction=(0.148843,0.63112,0.761271) material=G4_He + --> #secondaries=6 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 619 projectile=anti_xi_b- Ekin[MeV]=7900.03 direction=(0.968554,0.238288,0.0715732) material=G4_Cu + --> #secondaries=14 impactParameter[fm]=3.60766 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=0 + Collision 620 projectile=anti_xi_b- Ekin[MeV]=22638.3 direction=(0.802976,0.396364,0.445114) material=G4_Be + --> #secondaries=11 impactParameter[fm]=0.823551 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=1 + Collision 621 projectile=doublehyperH4 Ekin[MeV]=7518.81 direction=(0.114758,0.725429,0.678663) material=G4_Al + --> #secondaries=25 impactParameter[fm]=3.45176 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=19 #NNcollisions=0 + Collision 622 projectile=deuteron Ekin[MeV]=2276.7 direction=(0.240085,0.301804,0.922645) material=G4_Si + --> #secondaries=13 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 623 projectile=B- Ekin[MeV]=14230.6 direction=(0.663406,0.0200891,0.74799) material=G4_Be + --> #secondaries=9 impactParameter[fm]=3.32623 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 624 projectile=B- Ekin[MeV]=8491.65 direction=(0.202342,0.671067,0.713251) material=G4_Si + --> #secondaries=8 impactParameter[fm]=2.83761 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=28 #NNcollisions=1 + Collision 625 projectile=He3 Ekin[MeV]=13559 direction=(0.468569,0.686687,0.555792) material=G4_Fe + --> #secondaries=56 impactParameter[fm]=1.65989 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=42 #NNcollisions=6 + Collision 626 projectile=anti_hyperalpha Ekin[MeV]=6107.01 direction=(0.827707,0.0642827,0.557466) material=G4_Cu + --> #secondaries=28 impactParameter[fm]=5.6226 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=64 #NNcollisions=2 + Collision 627 projectile=anti_sigma+ Ekin[MeV]=8934.29 direction=(0.992389,0.0593838,0.10788) material=G4_Cu + --> #secondaries=47 impactParameter[fm]=1.86036 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=59 #NNcollisions=3 + Collision 628 projectile=anti_lambda Ekin[MeV]=6312.25 direction=(0.571212,0.591082,0.569507) material=G4_Pb + --> #secondaries=77 impactParameter[fm]=3.67596 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 629 projectile=anti_Bs0 Ekin[MeV]=21958.6 direction=(0.695461,0.505508,0.510681) material=G4_Cu + --> #secondaries=31 impactParameter[fm]=1.3623 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=1 + Collision 630 projectile=anti_lambda_c+ Ekin[MeV]=13522 direction=(0.654784,0.657957,0.371954) material=G4_H + --> #secondaries=4 impactParameter[fm]=0.764119 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 631 projectile=omega- Ekin[MeV]=21036.6 direction=(0.669082,0.544367,0.505959) material=G4_Be + --> #secondaries=17 impactParameter[fm]=1.43647 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=5 #NNcollisions=3 + Collision 632 projectile=xi_b- Ekin[MeV]=2198.42 direction=(0.694224,0.69419,0.190138) material=G4_Si + --> #secondaries=9 impactParameter[fm]=2.31778 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 + Collision 633 projectile=doublehyperdoubleneutron Ekin[MeV]=20441.2 direction=(0.284273,0.268541,0.920367) material=G4_Al + --> #secondaries=13 impactParameter[fm]=3.98965 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 634 projectile=omega- Ekin[MeV]=24589.8 direction=(0.478912,0.877275,0.0321304) material=G4_Si + --> #secondaries=19 impactParameter[fm]=3.80087 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 635 projectile=B+ Ekin[MeV]=9092.1 direction=(0.138388,0.338965,0.930565) material=G4_Si + --> #secondaries=11 impactParameter[fm]=2.99098 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 636 projectile=deuteron Ekin[MeV]=12337.6 direction=(0.892975,0.228015,0.388079) material=G4_H + --> #secondaries=3 impactParameter[fm]=1.97452 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=0 #NNcollisions=0 + Collision 637 projectile=anti_He3 Ekin[MeV]=4672.94 direction=(0.0706206,0.80752,0.585597) material=G4_H + --> #secondaries=9 impactParameter[fm]=1.12966 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=1 #NNcollisions=1 + Collision 638 projectile=Bc+ Ekin[MeV]=28563.4 direction=(0.682181,0.671944,0.288306) material=G4_Be + --> #secondaries=14 impactParameter[fm]=1.15302 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=7 #NNcollisions=2 + Collision 639 projectile=D+ Ekin[MeV]=3185.07 direction=(0.128988,0.75331,0.644893) material=G4_Si + --> #secondaries=12 impactParameter[fm]=2.864 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 640 projectile=D+ Ekin[MeV]=23846.8 direction=(0.934069,0.258359,0.246508) material=G4_Be + --> #secondaries=12 impactParameter[fm]=0.81548 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 641 projectile=anti_omega- Ekin[MeV]=13694.7 direction=(0.592232,0.326035,0.73686) material=G4_Fe + --> #secondaries=21 impactParameter[fm]=4.26197 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 642 projectile=sigma- Ekin[MeV]=4345.94 direction=(0.97777,0.0167531,0.209008) material=G4_Ar + --> #secondaries=28 impactParameter[fm]=0.783452 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=36 #NNcollisions=1 + Collision 643 projectile=sigma- Ekin[MeV]=3707.88 direction=(0.164587,0.86005,0.482933) material=G4_C --> #secondaries=8 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 811 projectile=anti_omega_c0 Ekin[MeV]=9510.74 direction=(0.86471,0.482544,0.139383) material=G4_Cu - --> #secondaries=9 impactParameter[fm]=5.12392 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 812 projectile=xi_c0 Ekin[MeV]=27963.3 direction=(0.159893,0.273204,0.948575) material=G4_Al - --> #secondaries=27 impactParameter[fm]=2.48992 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=2 - Collision 813 projectile=anti_D0 Ekin[MeV]=9198.46 direction=(0.808423,0.251283,0.532268) material=G4_He - --> #secondaries=7 impactParameter[fm]=0.469458 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=2 #NNcollisions=1 - Collision 814 projectile=anti_hypertriton Ekin[MeV]=1662.23 direction=(0.463447,0.69619,0.548212) material=G4_Cu - --> #secondaries=10 impactParameter[fm]=5.7972 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 815 projectile=anti_D0 Ekin[MeV]=14028.2 direction=(0.706075,0.541485,0.456347) material=G4_W - --> #secondaries=40 impactParameter[fm]=6.62007 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=1 - Collision 816 projectile=anti_sigma- Ekin[MeV]=15305.1 direction=(0.818573,0.574395,0.00309163) material=G4_W - --> #secondaries=51 impactParameter[fm]=5.60754 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=1 - Collision 817 projectile=anti_He3 Ekin[MeV]=3070.57 direction=(0.210087,0.676921,0.705437) material=G4_Be - --> #secondaries=20 impactParameter[fm]=0.344889 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=5 #NNcollisions=3 - Collision 818 projectile=anti_deuteron Ekin[MeV]=1854.29 direction=(0.698161,0.17162,0.695067) material=G4_Ar - --> #secondaries=23 impactParameter[fm]=1.68521 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=2 - Collision 819 projectile=doublehyperH4 Ekin[MeV]=29794.4 direction=(0.668941,0.50465,0.545753) material=G4_H - --> #secondaries=9 impactParameter[fm]=1.44074 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=0 #NNcollisions=2 - Collision 820 projectile=anti_omega_c0 Ekin[MeV]=25653.2 direction=(0.601766,0.561623,0.567854) material=G4_Al - --> #secondaries=13 impactParameter[fm]=0.782478 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 821 projectile=omega_b- Ekin[MeV]=11018.5 direction=(0.651049,0.00975699,0.758973) material=G4_He - --> #secondaries=4 impactParameter[fm]=2.03431 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 822 projectile=D+ Ekin[MeV]=9684.13 direction=(0.596223,0.551969,0.582965) material=G4_C - --> #secondaries=8 impactParameter[fm]=1.99112 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 823 projectile=anti_xi- Ekin[MeV]=10948.3 direction=(0.202692,0.724122,0.659214) material=G4_Pb - --> #secondaries=90 impactParameter[fm]=2.87043 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=2 - Collision 824 projectile=anti_hyperH4 Ekin[MeV]=6786.74 direction=(0.222135,0.914757,0.337454) material=G4_Si - --> #secondaries=19 impactParameter[fm]=5.29557 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 825 projectile=D- Ekin[MeV]=11219.6 direction=(0.646833,0.750918,0.133152) material=G4_Pb - --> #secondaries=84 impactParameter[fm]=2.43617 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=203 #NNcollisions=5 - Collision 826 projectile=Ds- Ekin[MeV]=9334.26 direction=(0.475148,0.677044,0.562002) material=G4_Ar - --> #secondaries=6 impactParameter[fm]=4.16882 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=0 - Collision 827 projectile=anti_xi_b- Ekin[MeV]=12837.1 direction=(0.295992,0.772264,0.562136) material=G4_Cu - --> #secondaries=15 impactParameter[fm]=4.67729 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=0 - Collision 828 projectile=alpha Ekin[MeV]=4372.19 direction=(0.421298,0.812605,0.402716) material=G4_Cu + Collision 644 projectile=deuteron Ekin[MeV]=28848.9 direction=(0.633246,0.642879,0.430936) material=G4_Si + --> #secondaries=16 impactParameter[fm]=4.79604 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=29 #NNcollisions=1 + Collision 645 projectile=kaon0L Ekin[MeV]=12944.6 direction=(0.942325,0.0481523,0.331216) material=G4_Al + --> #secondaries=13 impactParameter[fm]=2.54527 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 646 projectile=kaon+ Ekin[MeV]=28482.8 direction=(0.861395,0.505131,0.0533019) material=G4_Be + --> #secondaries=4 impactParameter[fm]=1.60363 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 647 projectile=omega_b- Ekin[MeV]=12761.9 direction=(0.321301,0.168218,0.931917) material=G4_H + --> #secondaries=6 impactParameter[fm]=1.91714 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 648 projectile=lambda Ekin[MeV]=13626.9 direction=(0.543901,0.722822,0.426263) material=G4_Pb + --> #secondaries=31 impactParameter[fm]=6.15116 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=0 + Collision 649 projectile=anti_doublehyperH4 Ekin[MeV]=15694.1 direction=(0.250574,0.93063,0.266721) material=G4_H + --> #secondaries=9 impactParameter[fm]=0.46511 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=1 #NNcollisions=1 + Collision 650 projectile=anti_xi_b0 Ekin[MeV]=19613 direction=(0.9461,0.275114,0.170898) material=G4_Fe + --> #secondaries=38 impactParameter[fm]=0.81491 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=53 #NNcollisions=3 + Collision 651 projectile=anti_D0 Ekin[MeV]=22779.7 direction=(0.559557,0.0087226,0.828746) material=G4_Al + --> #secondaries=13 impactParameter[fm]=1.93825 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 652 projectile=anti_xi_c0 Ekin[MeV]=6042.46 direction=(0.56223,0.803115,0.197243) material=G4_Fe + --> #secondaries=38 impactParameter[fm]=1.72129 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=1 + Collision 653 projectile=anti_xi_b- Ekin[MeV]=23284.3 direction=(0.627973,0.730925,0.267206) material=G4_H + --> #secondaries=5 impactParameter[fm]=2.06516 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 654 projectile=anti_hyperHe5 Ekin[MeV]=29560.7 direction=(0.169222,0.854025,0.49194) material=G4_W + --> #secondaries=15 impactParameter[fm]=8.49777 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=185 #NNcollisions=0 + Collision 655 projectile=anti_neutron Ekin[MeV]=4909.23 direction=(0.326156,0.007352,0.945287) material=G4_Pb + --> #secondaries=85 impactParameter[fm]=2.70224 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=1 + Collision 656 projectile=B- Ekin[MeV]=17987.1 direction=(0.413193,0.526632,0.742921) material=G4_Pb + --> #secondaries=47 impactParameter[fm]=4.35875 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=2 + Collision 657 projectile=anti_hyperalpha Ekin[MeV]=9737.7 direction=(0.305283,0.864288,0.399761) material=G4_C + --> #secondaries=15 impactParameter[fm]=4.02243 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=12 #NNcollisions=1 + Collision 658 projectile=B0 Ekin[MeV]=4058.15 direction=(0.938499,0.0461894,0.342179) material=G4_Al + --> #secondaries=9 impactParameter[fm]=3.28634 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 659 projectile=anti_xi_b- Ekin[MeV]=22522.5 direction=(0.725054,0.679979,0.109205) material=G4_H + --> #secondaries=6 impactParameter[fm]=1.13863 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 660 projectile=anti_xi_c0 Ekin[MeV]=26290.8 direction=(0.509227,0.444458,0.736984) material=G4_H + --> #secondaries=4 impactParameter[fm]=0.823817 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 661 projectile=hyperalpha Ekin[MeV]=6630.07 direction=(0.707677,0.272293,0.651959) material=G4_Cu + --> #secondaries=6 impactParameter[fm]=7.33303 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=62 #NNcollisions=0 + Collision 662 projectile=anti_sigma+ Ekin[MeV]=17318.2 direction=(0.488181,0.797884,0.353638) material=G4_Be + --> #secondaries=11 impactParameter[fm]=1.36066 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 663 projectile=hypertriton Ekin[MeV]=10466 direction=(0.771329,0.565894,0.291231) material=G4_Ar + --> #secondaries=26 impactParameter[fm]=2.69368 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=34 #NNcollisions=1 + Collision 664 projectile=xi_c0 Ekin[MeV]=12565.7 direction=(0.716028,0.642035,0.274035) material=G4_He + --> #secondaries=7 impactParameter[fm]=2.41823 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 665 projectile=lambda_b Ekin[MeV]=26941.7 direction=(0.657239,0.0398942,0.752626) material=G4_Si + --> #secondaries=19 impactParameter[fm]=2.48266 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 666 projectile=hyperH4 Ekin[MeV]=15398.4 direction=(0.6604,0.524809,0.537074) material=G4_H + --> #secondaries=9 impactParameter[fm]=1.24037 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=0 #NNcollisions=2 + Collision 667 projectile=anti_triton Ekin[MeV]=26800.6 direction=(0.653412,0.755227,0.051812) material=G4_Cu + --> #secondaries=37 impactParameter[fm]=4.65511 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=62 #NNcollisions=3 + Collision 668 projectile=omega_b- Ekin[MeV]=6153.26 direction=(0.252639,0.807544,0.53296) material=G4_Pb + --> #secondaries=38 impactParameter[fm]=2.49883 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=4 + Collision 669 projectile=He3 Ekin[MeV]=5724.94 direction=(0.488505,0.721767,0.490321) material=G4_W + --> #secondaries=15 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 670 projectile=B+ Ekin[MeV]=18393.9 direction=(0.560329,0.520189,0.644542) material=G4_Pb + --> #secondaries=32 impactParameter[fm]=5.74814 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 671 projectile=sigma+ Ekin[MeV]=17179.3 direction=(0.980095,0.19219,0.0497768) material=G4_Fe + --> #secondaries=23 impactParameter[fm]=3.3298 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 672 projectile=xi_b- Ekin[MeV]=4739.19 direction=(0.761858,0.544425,0.35096) material=G4_Al + --> #secondaries=5 impactParameter[fm]=4.27348 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 + Collision 673 projectile=lambda_c+ Ekin[MeV]=2469.22 direction=(0.71507,0.343717,0.608714) material=G4_H + --> #secondaries=3 impactParameter[fm]=0.286528 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 674 projectile=anti_sigma+ Ekin[MeV]=5548.34 direction=(0.611493,0.52606,0.591048) material=G4_Be + --> #secondaries=7 impactParameter[fm]=0.931014 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=1 + Collision 675 projectile=kaon0L Ekin[MeV]=7954.36 direction=(0.620376,0.617542,0.483503) material=G4_Pb + --> #secondaries=56 impactParameter[fm]=5.14785 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=200 #NNcollisions=4 + Collision 676 projectile=hyperH4 Ekin[MeV]=9674.32 direction=(0.365629,0.0844899,0.926918) material=G4_Al + --> #secondaries=16 impactParameter[fm]=5.3986 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 677 projectile=doublehyperdoubleneutron Ekin[MeV]=10666.7 direction=(0.4524,0.687897,0.567567) material=G4_C + --> #secondaries=15 impactParameter[fm]=1.70476 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=9 #NNcollisions=3 + Collision 678 projectile=kaon- Ekin[MeV]=4219.31 direction=(0.432668,0.739299,0.51598) material=G4_He + --> #secondaries=6 impactParameter[fm]=1.32605 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 679 projectile=xi_b- Ekin[MeV]=25721.7 direction=(0.814648,0.261282,0.517764) material=G4_H + --> #secondaries=3 impactParameter[fm]=0.331665 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 680 projectile=B- Ekin[MeV]=1845.04 direction=(0.23527,0.955351,0.178755) material=G4_Be + --> #secondaries=6 impactParameter[fm]=2.09362 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 681 projectile=anti_hypertriton Ekin[MeV]=15357.8 direction=(0.664789,0.000972244,0.74703) material=G4_W + --> #secondaries=59 impactParameter[fm]=7.44228 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=181 #NNcollisions=2 + Collision 682 projectile=xi_c+ Ekin[MeV]=15119 direction=(0.861909,0.037942,0.505641) material=G4_C + --> #secondaries=14 impactParameter[fm]=1.41716 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=2 + Collision 683 projectile=xi_b0 Ekin[MeV]=13059.2 direction=(0.47874,0.662637,0.575951) material=G4_Ar + --> #secondaries=14 impactParameter[fm]=2.37673 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=0 + Collision 684 projectile=anti_omega_b- Ekin[MeV]=20655.8 direction=(0.18716,0.857537,0.479167) material=G4_Pb + --> #secondaries=75 impactParameter[fm]=1.946 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=200 #NNcollisions=4 + Collision 685 projectile=anti_xi_b0 Ekin[MeV]=10138.9 direction=(0.610898,0.771816,0.176362) material=G4_Pb + --> #secondaries=12 impactParameter[fm]=6.45847 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 686 projectile=lambda_b Ekin[MeV]=17930 direction=(0.872789,0.0179903,0.487765) material=G4_H + --> #secondaries=4 impactParameter[fm]=0.959244 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 687 projectile=lambda_c+ Ekin[MeV]=19289.7 direction=(0.7871,0.61642,0.0223757) material=G4_Pb + --> #secondaries=47 impactParameter[fm]=5.67878 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=3 + Collision 688 projectile=anti_xi_c0 Ekin[MeV]=26263.9 direction=(0.698717,0.503069,0.508641) material=G4_Ar + --> #secondaries=14 impactParameter[fm]=4.41592 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 689 projectile=anti_xi_c0 Ekin[MeV]=23668.9 direction=(0.703929,0.538721,0.462886) material=G4_Be + --> #secondaries=8 impactParameter[fm]=3.25834 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 690 projectile=Bc+ Ekin[MeV]=8547.99 direction=(0.643825,0.390091,0.658269) material=G4_Pb + --> #secondaries=36 impactParameter[fm]=4.04353 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=204 #NNcollisions=3 + Collision 691 projectile=anti_xi_b- Ekin[MeV]=5453 direction=(0.450247,0.0679902,0.890312) material=G4_H + --> #secondaries=3 impactParameter[fm]=0.485273 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 692 projectile=xi- Ekin[MeV]=7513.38 direction=(0.877501,0.0391609,0.477972) material=G4_Al + --> #secondaries=12 impactParameter[fm]=3.05149 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 693 projectile=pi- Ekin[MeV]=28898.8 direction=(0.0245177,0.232295,0.972336) material=G4_Pb + --> #secondaries=38 impactParameter[fm]=6.85885 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 694 projectile=anti_D0 Ekin[MeV]=16821.1 direction=(0.633569,0.478195,0.60821) material=G4_H + --> #secondaries=5 impactParameter[fm]=0.842005 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 695 projectile=xi_b0 Ekin[MeV]=6906.18 direction=(0.0966462,0.795342,0.598407) material=G4_Pb + --> #secondaries=13 impactParameter[fm]=3.36188 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=1 + Collision 696 projectile=kaon- Ekin[MeV]=20397.8 direction=(0.136992,0.12656,0.982454) material=G4_W + --> #secondaries=44 impactParameter[fm]=6.11219 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=183 #NNcollisions=3 + Collision 697 projectile=neutron Ekin[MeV]=17463.2 direction=(0.121332,0.946403,0.299333) material=G4_H + --> #secondaries=6 impactParameter[fm]=0.168909 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 698 projectile=Bc- Ekin[MeV]=21074.4 direction=(0.906654,0.00638729,0.421827) material=G4_Al + --> #secondaries=7 impactParameter[fm]=5.57209 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 699 projectile=anti_lambda_c+ Ekin[MeV]=4857.63 direction=(0.608788,0.49357,0.621101) material=G4_He + --> #secondaries=6 impactParameter[fm]=1.10472 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 700 projectile=anti_Bs0 Ekin[MeV]=15992.4 direction=(0.264228,0.672791,0.691039) material=G4_C + --> #secondaries=12 impactParameter[fm]=0.621148 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + List of produced secondaries: + j=0 kaon+ p=(997.702,1716.49,1821.232739.04) MeV + j=1 pi- p=(62.035,223.831,341.922436.279) MeV + j=2 anti_B0 p=(4163.25,10967.6,10273.116463) MeV + j=3 pi- p=(126.648,328.814,473.557606.543) MeV + j=4 pi+ p=(33.7207,35.1118,318.941351.53) MeV + j=5 proton p=(137.887,448.922,1054.611487.65) MeV + j=6 neutron p=(74.1478,305.773,-119.013997.969) MeV + j=7 alpha p=(-50.2821,-305.122,163.3043743.75) MeV + j=8 neutron p=(60.7303,57.0356,-80.4563946.677) MeV + j=9 proton p=(193.164,-20.8883,24.3875958.487) MeV + j=10 He3 p=(-131.72,0.71317,-151.4052815.55) MeV + j=11 neutron p=(-204.658,150.912,166.313987.473) MeV + Collision 701 projectile=hyperalpha Ekin[MeV]=26851.2 direction=(0.32768,0.241609,0.913373) material=G4_Al + --> #secondaries=39 impactParameter[fm]=4.16204 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=22 #NNcollisions=5 + Collision 702 projectile=D0 Ekin[MeV]=21427.1 direction=(0.631147,0.719831,0.288958) material=G4_Ar + --> #secondaries=12 impactParameter[fm]=4.04362 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 703 projectile=D0 Ekin[MeV]=25801.2 direction=(0.178697,0.679046,0.712014) material=G4_Cu + --> #secondaries=44 impactParameter[fm]=1.86064 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=60 #NNcollisions=3 + Collision 704 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=7466.08 direction=(0.23813,0.950373,0.200212) material=G4_Fe + --> #secondaries=53 impactParameter[fm]=2.67833 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=56 #NNcollisions=4 + Collision 705 projectile=triton Ekin[MeV]=11822.7 direction=(0.737628,0.646168,0.195887) material=G4_Pb + --> #secondaries=17 impactParameter[fm]=7.79133 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=205 #NNcollisions=0 + Collision 706 projectile=xi- Ekin[MeV]=21382.6 direction=(0.389855,0.715374,0.579874) material=G4_Ar + --> #secondaries=30 impactParameter[fm]=2.37761 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=1 + Collision 707 projectile=anti_lambda_b Ekin[MeV]=29451 direction=(0.723345,0.620923,0.302038) material=G4_Cu + --> #secondaries=71 impactParameter[fm]=2.66805 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=59 #NNcollisions=4 + Collision 708 projectile=D- Ekin[MeV]=29737.5 direction=(0.436059,0.627344,0.645208) material=G4_Al + --> #secondaries=35 impactParameter[fm]=1.68671 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=23 #NNcollisions=4 + Collision 709 projectile=anti_omega- Ekin[MeV]=21031.8 direction=(0.289794,0.635978,0.715228) material=G4_C + --> #secondaries=19 impactParameter[fm]=2.45033 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 710 projectile=kaon0L Ekin[MeV]=13593.2 direction=(0.36289,0.538622,0.760393) material=G4_Fe + --> #secondaries=27 impactParameter[fm]=2.06512 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 711 projectile=hypertriton Ekin[MeV]=29432.4 direction=(0.0172961,0.622532,0.782403) material=G4_Be + --> #secondaries=12 impactParameter[fm]=3.16162 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=7 #NNcollisions=2 + Collision 712 projectile=anti_omega- Ekin[MeV]=19518.9 direction=(0.339344,0.844,0.415343) material=G4_H + --> #secondaries=8 impactParameter[fm]=1.41397 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 713 projectile=deuteron Ekin[MeV]=22839.1 direction=(0.733186,0.636393,0.239673) material=G4_Al + --> #secondaries=35 impactParameter[fm]=2.26029 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=21 #NNcollisions=5 + Collision 714 projectile=xi0 Ekin[MeV]=29368 direction=(0.905485,0.0447773,0.422009) material=G4_He + --> #secondaries=9 impactParameter[fm]=0.825161 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 715 projectile=anti_alpha Ekin[MeV]=10505.6 direction=(0.184052,0.0244291,0.982613) material=G4_W + --> #secondaries=33 impactParameter[fm]=9.11961 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=181 #NNcollisions=1 + Collision 716 projectile=deuteron Ekin[MeV]=13884.7 direction=(0.374273,0.660272,0.651122) material=G4_Fe + --> #secondaries=16 impactParameter[fm]=4.02911 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 717 projectile=anti_triton Ekin[MeV]=20356.1 direction=(0.82614,0.537715,0.168391) material=G4_Si + --> #secondaries=29 impactParameter[fm]=3.5775 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=4 + Collision 718 projectile=anti_hyperalpha Ekin[MeV]=13644.2 direction=(0.774745,0.552214,0.307943) material=G4_Si + --> #secondaries=28 impactParameter[fm]=4.80468 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 719 projectile=omega_b- Ekin[MeV]=14969.1 direction=(0.793659,0.442241,0.417765) material=G4_Al + --> #secondaries=11 impactParameter[fm]=2.17028 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 720 projectile=anti_deuteron Ekin[MeV]=6072.45 direction=(0.278557,0.923729,0.262928) material=G4_Si + --> #secondaries=19 impactParameter[fm]=3.86739 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 721 projectile=kaon+ Ekin[MeV]=24463.8 direction=(0.215229,0.861122,0.460593) material=G4_Pb + --> #secondaries=35 impactParameter[fm]=6.666 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=207 #NNcollisions=1 + Collision 722 projectile=anti_omega_b- Ekin[MeV]=2517.25 direction=(0.00865436,0.545571,0.83802) material=G4_Si + --> #secondaries=14 impactParameter[fm]=2.04214 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 + Collision 723 projectile=doublehyperH4 Ekin[MeV]=19212.4 direction=(0.729699,0.500408,0.465972) material=G4_Si + --> #secondaries=29 impactParameter[fm]=0.11482 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=20 #NNcollisions=2 + Collision 724 projectile=anti_He3 Ekin[MeV]=20501.5 direction=(0.416503,0.838118,0.352255) material=G4_Ar + --> #secondaries=39 impactParameter[fm]=3.02017 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=3 + Collision 725 projectile=anti_neutron Ekin[MeV]=29319.5 direction=(0.416071,0.318548,0.851711) material=G4_W + --> #secondaries=79 impactParameter[fm]=1.47498 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=7 + Collision 726 projectile=Bc+ Ekin[MeV]=21911.8 direction=(0.236967,0.907086,0.347909) material=G4_Al + --> #secondaries=13 impactParameter[fm]=1.37822 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 727 projectile=anti_omega_b- Ekin[MeV]=12856.2 direction=(0.651743,0.758121,0.0219932) material=G4_H + --> #secondaries=2 impactParameter[fm]=0.852658 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 728 projectile=anti_xi_c+ Ekin[MeV]=6290.52 direction=(0.1998,0.180475,0.963072) material=G4_Cu + --> #secondaries=19 impactParameter[fm]=2.36787 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 729 projectile=xi_b0 Ekin[MeV]=14127 direction=(0.359856,0.580302,0.730584) material=G4_C + --> #secondaries=9 impactParameter[fm]=2.41104 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 + Collision 730 projectile=B+ Ekin[MeV]=16996.9 direction=(0.727468,0.510369,0.4586) material=G4_Si + --> #secondaries=10 impactParameter[fm]=2.31089 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 731 projectile=neutron Ekin[MeV]=4443.17 direction=(0.73972,0.650555,0.172025) material=G4_Ar + --> #secondaries=31 impactParameter[fm]=1.31444 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=36 #NNcollisions=2 + Collision 732 projectile=doublehyperdoubleneutron Ekin[MeV]=7323.05 direction=(0.628952,0.772365,0.0887228) material=G4_Pb + --> #secondaries=69 impactParameter[fm]=5.31407 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=196 #NNcollisions=4 + Collision 733 projectile=anti_omega_c0 Ekin[MeV]=5138.15 direction=(0.37833,0.923761,0.0594261) material=G4_H + --> #secondaries=3 impactParameter[fm]=1.35239 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 734 projectile=anti_hyperalpha Ekin[MeV]=19769.5 direction=(0.183282,0.255688,0.949227) material=G4_Si + --> #secondaries=47 impactParameter[fm]=0.401402 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=22 #NNcollisions=6 + Collision 735 projectile=anti_xi_c+ Ekin[MeV]=6054.28 direction=(0.706945,0.0593587,0.704773) material=G4_He + --> #secondaries=8 impactParameter[fm]=1.69865 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=1 + Collision 736 projectile=B+ Ekin[MeV]=5726.42 direction=(0.749552,0.557036,0.357608) material=G4_Fe + --> #secondaries=13 impactParameter[fm]=3.93281 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=1 + Collision 737 projectile=xi_c+ Ekin[MeV]=28742.3 direction=(0.648183,0.0094488,0.761426) material=G4_Pb + --> #secondaries=45 impactParameter[fm]=5.47863 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=1 + Collision 738 projectile=anti_hypertriton Ekin[MeV]=24847.7 direction=(0.274747,0.959583,0.0609514) material=G4_He + --> #secondaries=19 impactParameter[fm]=1.46948 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=1 #NNcollisions=4 + Collision 739 projectile=anti_xi- Ekin[MeV]=24345.6 direction=(0.359667,0.586085,0.726046) material=G4_H + --> #secondaries=12 impactParameter[fm]=0.583125 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 740 projectile=xi0 Ekin[MeV]=7713.79 direction=(0.403245,0.733825,0.546713) material=G4_C + --> #secondaries=14 impactParameter[fm]=2.31758 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 741 projectile=anti_xi_c0 Ekin[MeV]=22042.2 direction=(0.407191,0.585726,0.700801) material=G4_Si + --> #secondaries=12 impactParameter[fm]=3.61699 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 742 projectile=anti_alpha Ekin[MeV]=26102.3 direction=(0.529588,0.755619,0.385457) material=G4_He + --> #secondaries=5 impactParameter[fm]=3.74046 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=4 #NNcollisions=1 + Collision 743 projectile=He3 Ekin[MeV]=9334.92 direction=(0.609637,0.542031,0.578399) material=G4_Al + --> #secondaries=7 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 744 projectile=pi- Ekin[MeV]=19549.9 direction=(0.309477,0.811233,0.496109) material=G4_Al + --> #secondaries=16 impactParameter[fm]=3.05686 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=2 + Collision 745 projectile=anti_hypertriton Ekin[MeV]=24371.6 direction=(0.397882,0.862775,0.311944) material=G4_H + --> #secondaries=6 impactParameter[fm]=2.13593 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=1 #NNcollisions=1 + Collision 746 projectile=anti_lambda_b Ekin[MeV]=22990.2 direction=(0.743455,0.327945,0.58286) material=G4_Al + --> #secondaries=16 impactParameter[fm]=2.23639 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 747 projectile=lambda_c+ Ekin[MeV]=29147.4 direction=(0.0646575,0.501835,0.862543) material=G4_C + --> #secondaries=19 impactParameter[fm]=2.46139 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 + Collision 748 projectile=Bc+ Ekin[MeV]=28075.2 direction=(0.341913,0.106819,0.933641) material=G4_H + --> #secondaries=4 impactParameter[fm]=0.558977 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 749 projectile=anti_sigma+ Ekin[MeV]=17636.6 direction=(0.389731,0.915201,0.102552) material=G4_Ar + --> #secondaries=39 impactParameter[fm]=2.48734 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=3 + Collision 750 projectile=anti_xi_b0 Ekin[MeV]=22538.6 direction=(0.725157,0.126249,0.67691) material=G4_Si + --> #secondaries=22 impactParameter[fm]=2.18717 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 751 projectile=anti_neutron Ekin[MeV]=5053.26 direction=(0.613339,0.435283,0.659048) material=G4_Be + --> #secondaries=10 impactParameter[fm]=2.19499 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 752 projectile=anti_hyperalpha Ekin[MeV]=15293.9 direction=(0.682918,0.729611,0.0359165) material=G4_H + --> #secondaries=6 impactParameter[fm]=4.07164 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 753 projectile=pi+ Ekin[MeV]=19073.5 direction=(0.826036,0.522182,0.212108) material=G4_Si + --> #secondaries=6 impactParameter[fm]=5.25022 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=28 #NNcollisions=0 + Collision 754 projectile=neutron Ekin[MeV]=26088.2 direction=(0.748333,0.0914913,0.656984) material=G4_H + --> #secondaries=10 impactParameter[fm]=2.22809 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 755 projectile=omega- Ekin[MeV]=9962.83 direction=(0.565059,0.630104,0.532614) material=G4_Be + --> #secondaries=6 impactParameter[fm]=4.49586 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 756 projectile=D- Ekin[MeV]=16050.4 direction=(0.670974,0.288773,0.682938) material=G4_He + --> #secondaries=10 impactParameter[fm]=0.681488 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 757 projectile=anti_hyperHe5 Ekin[MeV]=6704.43 direction=(0.158768,0.644112,0.748273) material=G4_W + --> #secondaries=78 impactParameter[fm]=5.30137 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=185 #NNcollisions=5 + Collision 758 projectile=alpha Ekin[MeV]=14551 direction=(0.322906,0.250687,0.912627) material=G4_Ar --> #secondaries=27 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 829 projectile=D+ Ekin[MeV]=12147.8 direction=(0.339435,0.425858,0.838707) material=G4_Pb - --> #secondaries=49 impactParameter[fm]=5.96932 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=3 - Collision 830 projectile=lambda_c+ Ekin[MeV]=23445 direction=(0.159945,0.985066,0.0637439) material=G4_W - --> #secondaries=76 impactParameter[fm]=4.31195 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=3 - Collision 831 projectile=kaon+ Ekin[MeV]=1055.14 direction=(0.650207,0.730885,0.207458) material=G4_Cu - --> #secondaries=21 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 832 projectile=anti_hyperHe5 Ekin[MeV]=12006.9 direction=(0.86417,0.232657,0.446186) material=G4_Si - --> #secondaries=32 impactParameter[fm]=4.03392 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 833 projectile=kaon- Ekin[MeV]=13705.1 direction=(0.11813,0.346416,0.930613) material=G4_Cu - --> #secondaries=29 impactParameter[fm]=3.14569 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=63 #NNcollisions=2 - Collision 834 projectile=xi_c+ Ekin[MeV]=28116.6 direction=(0.933572,0.184373,0.307326) material=G4_Be - --> #secondaries=12 impactParameter[fm]=3.16297 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 835 projectile=B+ Ekin[MeV]=3368.96 direction=(0.353511,0.935322,0.0142487) material=G4_Si - --> #secondaries=14 impactParameter[fm]=3.28897 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 836 projectile=He3 Ekin[MeV]=28562.1 direction=(0.357011,0.819081,0.449054) material=G4_He - --> #secondaries=12 impactParameter[fm]=4.07993 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 837 projectile=anti_Bs0 Ekin[MeV]=18602 direction=(0.0219032,0.433806,0.90074) material=G4_Fe - --> #secondaries=20 impactParameter[fm]=2.05565 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=52 #NNcollisions=1 - Collision 838 projectile=deuteron Ekin[MeV]=24359.9 direction=(0.540716,0.472556,0.695929) material=G4_Be - --> #secondaries=12 impactParameter[fm]=2.40299 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 839 projectile=Bs0 Ekin[MeV]=16748.6 direction=(0.696194,0.400502,0.595744) material=G4_C - --> #secondaries=7 impactParameter[fm]=1.04685 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 840 projectile=xi0 Ekin[MeV]=19768.2 direction=(0.734679,0.672906,0.0862775) material=G4_W - --> #secondaries=47 impactParameter[fm]=5.07205 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=2 - Collision 841 projectile=anti_omega_c0 Ekin[MeV]=11560.7 direction=(0.218585,0.959995,0.175016) material=G4_He - --> #secondaries=7 impactParameter[fm]=2.67589 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 842 projectile=anti_omega_c0 Ekin[MeV]=23736.7 direction=(0.364676,0.506371,0.781409) material=G4_C - --> #secondaries=19 impactParameter[fm]=1.19039 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=3 - Collision 843 projectile=anti_omega- Ekin[MeV]=16245.6 direction=(0.771268,0.545743,0.327581) material=G4_Cu - --> #secondaries=14 impactParameter[fm]=4.12522 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=1 - Collision 844 projectile=anti_triton Ekin[MeV]=9249.43 direction=(0.529895,0.713191,0.458878) material=G4_Pb - --> #secondaries=61 impactParameter[fm]=6.14975 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=202 #NNcollisions=4 - Collision 845 projectile=Bs0 Ekin[MeV]=12075.1 direction=(0.687846,0.395822,0.608434) material=G4_Cu - --> #secondaries=12 impactParameter[fm]=1.8257 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 846 projectile=anti_lambda_b Ekin[MeV]=16283.9 direction=(0.61696,0.460321,0.63833) material=G4_Si - --> #secondaries=13 impactParameter[fm]=2.02887 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 847 projectile=anti_D0 Ekin[MeV]=13079.4 direction=(0.744118,0.210636,0.633972) material=G4_W - --> #secondaries=56 impactParameter[fm]=2.82963 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=4 - Collision 848 projectile=B0 Ekin[MeV]=18684.2 direction=(0.548891,0.200037,0.811605) material=G4_He - --> #secondaries=7 impactParameter[fm]=1.34906 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 849 projectile=doublehyperH4 Ekin[MeV]=16044.2 direction=(0.071168,0.764093,0.641169) material=G4_Al - --> #secondaries=28 impactParameter[fm]=3.35293 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=22 #NNcollisions=5 - Collision 850 projectile=anti_xi_b- Ekin[MeV]=3818.21 direction=(0.931478,0.139933,0.335808) material=G4_He - --> #secondaries=5 impactParameter[fm]=1.53465 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=0 - Collision 851 projectile=lambda_b Ekin[MeV]=3059.5 direction=(0.209861,0.962259,0.173249) material=G4_He - --> #secondaries=6 impactParameter[fm]=1.14598 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 - Collision 852 projectile=xi_b0 Ekin[MeV]=5040.62 direction=(0.768775,0.177541,0.614381) material=G4_Cu - --> #secondaries=15 impactParameter[fm]=4.13562 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 853 projectile=hyperalpha Ekin[MeV]=18121.9 direction=(0.67042,0.385122,0.634206) material=G4_H - --> #secondaries=8 impactParameter[fm]=2.65522 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 854 projectile=anti_sigma+ Ekin[MeV]=27204.9 direction=(0.424551,0.632609,0.647736) material=G4_Cu - --> #secondaries=54 impactParameter[fm]=3.42522 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=59 #NNcollisions=2 - Collision 855 projectile=Bc+ Ekin[MeV]=18487.2 direction=(0.355314,0.930591,0.0880487) material=G4_W - --> #secondaries=32 impactParameter[fm]=5.53499 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=185 #NNcollisions=1 - Collision 856 projectile=anti_xi_b- Ekin[MeV]=22764.9 direction=(0.355922,0.93396,0.0322113) material=G4_Ar - --> #secondaries=37 impactParameter[fm]=1.71792 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=3 - Collision 857 projectile=sigma+ Ekin[MeV]=26672.9 direction=(0.0351152,0.899144,0.436241) material=G4_C - --> #secondaries=10 impactParameter[fm]=3.25002 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 - Collision 858 projectile=anti_hyperH4 Ekin[MeV]=20312.5 direction=(0.605615,0.788903,0.104228) material=G4_Ar - --> #secondaries=59 impactParameter[fm]=2.85509 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=34 #NNcollisions=5 - Collision 859 projectile=Ds+ Ekin[MeV]=26419.9 direction=(0.830068,0.534403,0.159377) material=G4_H - --> #secondaries=5 impactParameter[fm]=0.381978 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 860 projectile=anti_hypertriton Ekin[MeV]=4960.58 direction=(0.737756,0.454804,0.498868) material=G4_Cu - --> #secondaries=54 impactParameter[fm]=3.99394 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=3 - Collision 861 projectile=anti_proton Ekin[MeV]=15027 direction=(0.694691,0.520704,0.496257) material=G4_Al - --> #secondaries=9 impactParameter[fm]=3.61786 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 862 projectile=xi_b0 Ekin[MeV]=5221.13 direction=(0.0203804,0.746988,0.664525) material=G4_Cu - --> #secondaries=14 impactParameter[fm]=3.38925 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=1 - Collision 863 projectile=anti_lambda Ekin[MeV]=14091.6 direction=(0.19173,0.474191,0.859292) material=G4_He - --> #secondaries=10 impactParameter[fm]=0.920318 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 864 projectile=omega- Ekin[MeV]=28519.6 direction=(0.459136,0.314052,0.831003) material=G4_Al - --> #secondaries=19 impactParameter[fm]=3.96071 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 865 projectile=hypertriton Ekin[MeV]=5723.3 direction=(0.258737,0.580004,0.772431) material=G4_Ar - --> #secondaries=8 impactParameter[fm]=5.10849 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 866 projectile=anti_B0 Ekin[MeV]=17929.7 direction=(0.588914,0.806806,0.0473729) material=G4_C - --> #secondaries=6 impactParameter[fm]=1.78093 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 867 projectile=hyperalpha Ekin[MeV]=17614.2 direction=(0.872201,0.351026,0.340654) material=G4_W - --> #secondaries=37 impactParameter[fm]=7.40267 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=181 #NNcollisions=3 - Collision 868 projectile=anti_deuteron Ekin[MeV]=12980.4 direction=(0.856692,0.26994,0.439557) material=G4_Be - --> #secondaries=16 impactParameter[fm]=3.00866 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 869 projectile=anti_omega_c0 Ekin[MeV]=3148.72 direction=(0.733885,0.14316,0.664016) material=G4_Cu - --> #secondaries=10 impactParameter[fm]=4.5278 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=0 - Collision 870 projectile=triton Ekin[MeV]=18973.6 direction=(0.453873,0.863685,0.2192) material=G4_Fe - --> #secondaries=58 impactParameter[fm]=0.811284 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=46 #NNcollisions=6 - Collision 871 projectile=lambda_c+ Ekin[MeV]=19124.2 direction=(0.70363,0.710214,0.0223823) material=G4_Fe - --> #secondaries=51 impactParameter[fm]=1.67255 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=51 #NNcollisions=5 - Collision 872 projectile=anti_D0 Ekin[MeV]=24337.4 direction=(0.420923,0.636459,0.646331) material=G4_W - --> #secondaries=33 impactParameter[fm]=6.33336 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=185 #NNcollisions=0 - Collision 873 projectile=hypertriton Ekin[MeV]=5194.13 direction=(0.495713,0.790739,0.359168) material=G4_Cu - --> #secondaries=32 impactParameter[fm]=2.83241 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=57 #NNcollisions=2 - Collision 874 projectile=anti_deuteron Ekin[MeV]=20582.7 direction=(0.279955,0.633652,0.721186) material=G4_Be - --> #secondaries=23 impactParameter[fm]=1.63802 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=3 - Collision 875 projectile=anti_xi- Ekin[MeV]=29322.7 direction=(0.167093,0.25315,0.952888) material=G4_Ar - --> #secondaries=52 impactParameter[fm]=1.23396 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=34 #NNcollisions=5 - Collision 876 projectile=anti_hyperHe5 Ekin[MeV]=1529.07 direction=(0.92412,0.248304,0.290425) material=G4_Be - --> #secondaries=8 impactParameter[fm]=4.60228 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 877 projectile=anti_alpha Ekin[MeV]=22801.9 direction=(0.250651,0.735389,0.629585) material=G4_Ar - --> #secondaries=14 impactParameter[fm]=5.00311 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 878 projectile=pi+ Ekin[MeV]=10023.3 direction=(0.547703,0.674062,0.495643) material=G4_Si - --> #secondaries=11 impactParameter[fm]=5.45288 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 879 projectile=kaon+ Ekin[MeV]=23180.2 direction=(0.380908,0.66423,0.643201) material=G4_W - --> #secondaries=44 impactParameter[fm]=5.66031 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=184 #NNcollisions=2 - Collision 880 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=5157.09 direction=(0.557584,0.829568,0.0302958) material=G4_H - --> #secondaries=7 impactParameter[fm]=1.12699 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=1 #NNcollisions=1 - Collision 881 projectile=kaon0L Ekin[MeV]=5336.66 direction=(0.412399,0.675777,0.610944) material=G4_He - --> #secondaries=10 impactParameter[fm]=2.70669 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 882 projectile=B- Ekin[MeV]=8810.65 direction=(0.732597,0.651263,0.197885) material=G4_C - --> #secondaries=11 impactParameter[fm]=2.78695 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=10 #NNcollisions=2 - Collision 883 projectile=kaon0S Ekin[MeV]=14602.4 direction=(0.627292,0.517713,0.581788) material=G4_Al - --> #secondaries=15 impactParameter[fm]=4.7786 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 884 projectile=hyperHe5 Ekin[MeV]=6884.01 direction=(0.833375,0.394204,0.387414) material=G4_Cu - --> #secondaries=46 impactParameter[fm]=3.49661 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=51 #NNcollisions=0 - Collision 885 projectile=Ds- Ekin[MeV]=10016.9 direction=(0.260547,0.958714,0.11394) material=G4_Cu - --> #secondaries=26 impactParameter[fm]=1.4186 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=2 - Collision 886 projectile=doublehyperH4 Ekin[MeV]=15867.8 direction=(0.689815,0.63765,0.342868) material=G4_H - --> #secondaries=3 impactParameter[fm]=0.96224 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=0 - Collision 887 projectile=D0 Ekin[MeV]=1219.82 direction=(0.550385,0.344815,0.760381) material=G4_H - --> #secondaries=3 impactParameter[fm]=1.40567 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 888 projectile=anti_sigma+ Ekin[MeV]=3542.61 direction=(0.00208229,0.979646,0.200724) material=G4_W - --> #secondaries=52 impactParameter[fm]=5.13799 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=182 #NNcollisions=1 - Collision 889 projectile=Ds+ Ekin[MeV]=25112.1 direction=(0.483574,0.0232431,0.874995) material=G4_H - --> #secondaries=6 impactParameter[fm]=0.620615 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 890 projectile=xi0 Ekin[MeV]=6157.29 direction=(0.586409,0.793826,0.161135) material=G4_W - --> #secondaries=61 impactParameter[fm]=3.88436 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=178 #NNcollisions=4 - Collision 891 projectile=lambda Ekin[MeV]=29525.9 direction=(0.811028,0.551334,0.195612) material=G4_H - --> #secondaries=4 impactParameter[fm]=1.46142 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 892 projectile=Bc+ Ekin[MeV]=2204.2 direction=(0.295952,0.706731,0.642607) material=G4_He - --> #secondaries=5 impactParameter[fm]=0.902982 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=2 #NNcollisions=0 - Collision 893 projectile=kaon- Ekin[MeV]=15541.3 direction=(0.26686,0.66351,0.698956) material=G4_Si - --> #secondaries=23 impactParameter[fm]=3.3103 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 894 projectile=anti_hyperalpha Ekin[MeV]=19777.4 direction=(0.340033,0.779189,0.526538) material=G4_Fe - --> #secondaries=65 impactParameter[fm]=0.985825 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=50 #NNcollisions=8 - Collision 895 projectile=kaon- Ekin[MeV]=9351.79 direction=(0.856405,0.196996,0.477246) material=G4_Fe - --> #secondaries=19 impactParameter[fm]=2.27192 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 896 projectile=anti_omega_c0 Ekin[MeV]=24059.6 direction=(0.36491,0.199992,0.90931) material=G4_Al - --> #secondaries=13 impactParameter[fm]=5.25771 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 897 projectile=neutron Ekin[MeV]=2379.84 direction=(0.415086,0.198657,0.887828) material=G4_Be - --> #secondaries=10 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 898 projectile=anti_lambda_b Ekin[MeV]=23380.2 direction=(0.754484,0.284175,0.591606) material=G4_H - --> #secondaries=6 impactParameter[fm]=1.50693 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 899 projectile=kaon- Ekin[MeV]=29729.6 direction=(0.712127,0.698956,0.065846) material=G4_W - --> #secondaries=76 impactParameter[fm]=3.61201 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=180 #NNcollisions=2 - Collision 900 projectile=Bs0 Ekin[MeV]=17121.9 direction=(0.433135,0.72738,0.532271) material=G4_Si - --> #secondaries=10 impactParameter[fm]=2.46868 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 759 projectile=D0 Ekin[MeV]=26023 direction=(0.0240116,0.633341,0.7735) material=G4_Al + --> #secondaries=16 impactParameter[fm]=2.64667 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 760 projectile=anti_xi_c0 Ekin[MeV]=11764.1 direction=(0.860465,0.379626,0.339831) material=G4_Fe + --> #secondaries=18 impactParameter[fm]=3.75912 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 761 projectile=anti_proton Ekin[MeV]=27320.6 direction=(0.698447,0.700335,0.147318) material=G4_Fe + --> #secondaries=12 impactParameter[fm]=5.3546 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 762 projectile=anti_sigma- Ekin[MeV]=12471.3 direction=(0.1248,0.81599,0.564434) material=G4_Fe + --> #secondaries=46 impactParameter[fm]=0.391066 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 763 projectile=anti_xi_c0 Ekin[MeV]=25356.5 direction=(0.476579,0.490052,0.729878) material=G4_Pb + --> #secondaries=31 impactParameter[fm]=6.31494 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=0 + Collision 764 projectile=lambda_b Ekin[MeV]=22092.6 direction=(0.528875,0.61691,0.582849) material=G4_Si + --> #secondaries=8 impactParameter[fm]=2.1336 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 765 projectile=xi- Ekin[MeV]=3951.31 direction=(0.680961,0.661688,0.313785) material=G4_C + --> #secondaries=9 impactParameter[fm]=2.62016 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 766 projectile=lambda_b Ekin[MeV]=28720.8 direction=(0.0246607,0.931108,0.363909) material=G4_He + --> #secondaries=9 impactParameter[fm]=0.686087 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 + Collision 767 projectile=anti_B0 Ekin[MeV]=10968.8 direction=(0.716572,0.0213099,0.697187) material=G4_Al + --> #secondaries=6 impactParameter[fm]=0.859436 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 768 projectile=Bc+ Ekin[MeV]=19426.3 direction=(0.330378,0.815837,0.474617) material=G4_Si + --> #secondaries=14 impactParameter[fm]=2.19448 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 769 projectile=B+ Ekin[MeV]=24690.3 direction=(0.731932,0.110966,0.672281) material=G4_Ar + --> #secondaries=21 impactParameter[fm]=2.26526 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 770 projectile=lambda_b Ekin[MeV]=21173 direction=(0.479555,0.0719372,0.874558) material=G4_C + --> #secondaries=11 impactParameter[fm]=1.39976 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=2 + Collision 771 projectile=anti_xi_c0 Ekin[MeV]=27435.4 direction=(0.589637,0.805274,0.0621435) material=G4_W + --> #secondaries=33 impactParameter[fm]=7.14122 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=184 #NNcollisions=2 + Collision 772 projectile=anti_lambda Ekin[MeV]=15497.7 direction=(0.204081,0.928666,0.309726) material=G4_Be + --> #secondaries=15 impactParameter[fm]=1.81524 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=2 + Collision 773 projectile=anti_deuteron Ekin[MeV]=13031.8 direction=(0.281258,0.606632,0.743567) material=G4_Cu + --> #secondaries=12 impactParameter[fm]=4.97368 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 774 projectile=anti_omega_c0 Ekin[MeV]=16883.7 direction=(0.504815,0.816786,0.279326) material=G4_He + --> #secondaries=5 impactParameter[fm]=0.667825 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 775 projectile=xi- Ekin[MeV]=25597.2 direction=(0.714491,0.0496693,0.69788) material=G4_C + --> #secondaries=16 impactParameter[fm]=1.32712 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 776 projectile=anti_xi_b0 Ekin[MeV]=24978.7 direction=(0.487002,0.867005,0.105507) material=G4_W + --> #secondaries=92 impactParameter[fm]=3.02707 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=175 #NNcollisions=7 + Collision 777 projectile=anti_lambda Ekin[MeV]=25785.3 direction=(0.783709,0.224747,0.579042) material=G4_He + --> #secondaries=10 impactParameter[fm]=1.12984 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 778 projectile=lambda Ekin[MeV]=21398.6 direction=(0.74838,0.582352,0.317481) material=G4_Ar + --> #secondaries=44 impactParameter[fm]=2.00869 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=34 #NNcollisions=4 + Collision 779 projectile=hyperHe5 Ekin[MeV]=15309.4 direction=(0.502323,0.387802,0.77284) material=G4_He + --> #secondaries=6 impactParameter[fm]=1.67799 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 780 projectile=triton Ekin[MeV]=28173.8 direction=(0.244578,0.549067,0.799191) material=G4_Pb + --> #secondaries=92 impactParameter[fm]=4.00786 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=197 #NNcollisions=15 + Collision 781 projectile=D- Ekin[MeV]=16095.3 direction=(0.571049,0.302734,0.763056) material=G4_Be + --> #secondaries=11 impactParameter[fm]=2.54527 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 782 projectile=pi+ Ekin[MeV]=1838.33 direction=(0.39248,0.571856,0.720375) material=G4_He + --> #secondaries=7 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 783 projectile=anti_hypertriton Ekin[MeV]=4270.53 direction=(0.190322,0.508237,0.839924) material=G4_He + --> #secondaries=9 impactParameter[fm]=2.68353 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 + Collision 784 projectile=doublehyperdoubleneutron Ekin[MeV]=3478.88 direction=(0.454554,0.0390843,0.889861) material=G4_Al + --> #secondaries=16 impactParameter[fm]=3.40586 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=24 #NNcollisions=1 + Collision 785 projectile=omega_c0 Ekin[MeV]=28354.5 direction=(0.455772,0.440047,0.773712) material=G4_W + --> #secondaries=78 impactParameter[fm]=2.2253 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=178 #NNcollisions=4 + Collision 786 projectile=anti_deuteron Ekin[MeV]=2167.17 direction=(0.402503,0.688482,0.603311) material=G4_Ar + --> #secondaries=25 impactParameter[fm]=5.16696 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=2 + Collision 787 projectile=lambda_c+ Ekin[MeV]=27623.8 direction=(0.316034,0.705828,0.633979) material=G4_H + --> #secondaries=7 impactParameter[fm]=1.40423 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 788 projectile=sigma+ Ekin[MeV]=27952 direction=(0.584587,0.336717,0.738159) material=G4_C + --> #secondaries=23 impactParameter[fm]=1.96099 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=1 + Collision 789 projectile=lambda_c+ Ekin[MeV]=4470.79 direction=(0.383314,0.919539,0.0867068) material=G4_Pb + --> #secondaries=35 impactParameter[fm]=5.2345 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=1 + Collision 790 projectile=anti_hyperHe5 Ekin[MeV]=18373.3 direction=(0.779221,0.323648,0.536719) material=G4_W + --> #secondaries=30 impactParameter[fm]=7.17996 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=183 #NNcollisions=1 + Collision 791 projectile=deuteron Ekin[MeV]=8504.6 direction=(0.546138,0.602048,0.58247) material=G4_Si + --> #secondaries=9 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 792 projectile=anti_hyperH4 Ekin[MeV]=8724.31 direction=(0.676307,0.602413,0.423919) material=G4_Al + --> #secondaries=21 impactParameter[fm]=3.65542 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=24 #NNcollisions=2 + Collision 793 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=29397.1 direction=(0.747774,0.00642059,0.663922) material=G4_Pb + --> #secondaries=71 impactParameter[fm]=6.23547 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=203 #NNcollisions=4 + Collision 794 projectile=deuteron Ekin[MeV]=21886.4 direction=(0.0642525,0.539178,0.839737) material=G4_Al + --> #secondaries=25 impactParameter[fm]=0.944799 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=3 + Collision 795 projectile=xi_b0 Ekin[MeV]=5422.67 direction=(0.514879,0.317111,0.796455) material=G4_H + --> #secondaries=3 impactParameter[fm]=0.280491 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 796 projectile=hypertriton Ekin[MeV]=28922.5 direction=(0.555517,0.831207,0.0222886) material=G4_He + --> #secondaries=17 impactParameter[fm]=0.994222 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=6 + Collision 797 projectile=xi_b0 Ekin[MeV]=2723.6 direction=(0.460605,0.853946,0.242115) material=G4_H + --> #secondaries=2 impactParameter[fm]=0.434411 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 798 projectile=Ds+ Ekin[MeV]=20424.8 direction=(0.0817389,0.641596,0.762675) material=G4_Cu + --> #secondaries=13 impactParameter[fm]=3.23203 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=64 #NNcollisions=1 + Collision 799 projectile=D- Ekin[MeV]=9432.57 direction=(0.695051,0.236256,0.679034) material=G4_Fe + --> #secondaries=9 impactParameter[fm]=0.433302 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=0 + Collision 800 projectile=pi+ Ekin[MeV]=15849 direction=(0.807335,0.256586,0.531388) material=G4_Pb + --> #secondaries=93 impactParameter[fm]=1.82024 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=202 #NNcollisions=6 List of produced secondaries: - j=0 B+ p=(5755.42,10723.9,7741.0515359.7) MeV - j=1 kaon- p=(354.263,496.369,296.563838.779) MeV - j=2 pi- p=(2526.94,3344.31,2483.164873.95) MeV - j=3 proton p=(531.761,393.827,467.121239.53) MeV - j=4 pi+ p=(349.138,772.638,574.7521033.77) MeV - j=5 neutron p=(-163.565,-91.907,17.9847958.283) MeV - j=6 alpha p=(-211.703,65.4808,-49.48313734.29) MeV - j=7 alpha p=(213.081,65.0395,-61.38453734.54) MeV - j=8 gamma p=(1.33174,-2.23471,3.646214.4791) MeV - j=9 F18 p=(102.559,117.793,150.8416764.6) MeV - Collision 901 projectile=xi_c+ Ekin[MeV]=25946.6 direction=(0.370179,0.683837,0.628756) material=G4_Pb - --> #secondaries=78 impactParameter[fm]=4.58477 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=3 - Collision 902 projectile=Bc+ Ekin[MeV]=28356.7 direction=(0.679638,0.301417,0.66876) material=G4_C - --> #secondaries=10 impactParameter[fm]=0.851488 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 903 projectile=xi_c+ Ekin[MeV]=1918.03 direction=(0.0579241,0.903978,0.423638) material=G4_H - --> #secondaries=2 impactParameter[fm]=0.82006 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 904 projectile=lambda_c+ Ekin[MeV]=17485.6 direction=(0.772189,0.635347,0.00764561) material=G4_Si - --> #secondaries=22 impactParameter[fm]=1.14252 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 905 projectile=hyperHe5 Ekin[MeV]=2404.55 direction=(0.391801,0.590951,0.705173) material=G4_Fe - --> #secondaries=8 impactParameter[fm]=7.58442 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=53 #NNcollisions=0 - Collision 906 projectile=Bc+ Ekin[MeV]=14869.4 direction=(0.689476,0.51314,0.511185) material=G4_Al - --> #secondaries=12 impactParameter[fm]=0.779883 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=2 - Collision 907 projectile=xi_c+ Ekin[MeV]=4133.63 direction=(0.449656,0.509663,0.733521) material=G4_Si - --> #secondaries=15 impactParameter[fm]=3.79504 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 908 projectile=doublehyperH4 Ekin[MeV]=3156.97 direction=(0.130845,0.628244,0.766935) material=G4_W - --> #secondaries=69 impactParameter[fm]=3.6636 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=162 #NNcollisions=1 - Collision 909 projectile=xi- Ekin[MeV]=7212.8 direction=(0.261459,0.948827,0.177107) material=G4_Si - --> #secondaries=12 impactParameter[fm]=3.34819 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=28 #NNcollisions=1 - Collision 910 projectile=anti_hyperHe5 Ekin[MeV]=23573.2 direction=(0.596668,0.699944,0.392512) material=G4_Fe - --> #secondaries=28 impactParameter[fm]=4.65269 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=55 #NNcollisions=3 - Collision 911 projectile=pi+ Ekin[MeV]=5811.48 direction=(0.339121,0.568922,0.749216) material=G4_He - --> #secondaries=4 impactParameter[fm]=2.7715 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 912 projectile=hypertriton Ekin[MeV]=16486.7 direction=(0.780684,0.620503,0.0742235) material=G4_Ar - --> #secondaries=48 impactParameter[fm]=1.26738 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=11 - Collision 913 projectile=lambda_b Ekin[MeV]=27301.1 direction=(0.372222,0.928142,0.0018051) material=G4_Al - --> #secondaries=19 impactParameter[fm]=3.40214 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 914 projectile=anti_xi_b- Ekin[MeV]=10390.2 direction=(0.512338,0.704271,0.491439) material=G4_Fe - --> #secondaries=22 impactParameter[fm]=2.07547 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 915 projectile=omega- Ekin[MeV]=25044.3 direction=(0.91774,0.397111,0.00752334) material=G4_Si - --> #secondaries=18 impactParameter[fm]=1.94159 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=2 - Collision 916 projectile=anti_alpha Ekin[MeV]=29257.3 direction=(0.763845,0.358996,0.536342) material=G4_W - --> #secondaries=80 impactParameter[fm]=6.33396 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=177 #NNcollisions=11 - Collision 917 projectile=B- Ekin[MeV]=13128.1 direction=(0.544962,0.471849,0.693091) material=G4_Ar - --> #secondaries=5 impactParameter[fm]=4.61627 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 918 projectile=B+ Ekin[MeV]=14896.6 direction=(0.594853,0.706929,0.382624) material=G4_He - --> #secondaries=6 impactParameter[fm]=2.30499 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 919 projectile=anti_sigma- Ekin[MeV]=29263.1 direction=(0.611097,0.437258,0.659823) material=G4_Pb - --> #secondaries=34 impactParameter[fm]=8.37781 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=2 - Collision 920 projectile=anti_lambda_c+ Ekin[MeV]=18500.6 direction=(0.856858,0.246924,0.452574) material=G4_C - --> #secondaries=11 impactParameter[fm]=3.20467 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 921 projectile=lambda Ekin[MeV]=6229.53 direction=(0.11284,0.500535,0.858331) material=G4_Al - --> #secondaries=22 impactParameter[fm]=2.45103 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=2 - Collision 922 projectile=anti_omega_c0 Ekin[MeV]=5533.46 direction=(0.768673,0.551446,0.324114) material=G4_H - --> #secondaries=5 impactParameter[fm]=1.35693 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 923 projectile=pi+ Ekin[MeV]=14492.7 direction=(0.282078,0.833775,0.474607) material=G4_Al - --> #secondaries=23 impactParameter[fm]=2.68668 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=1 - Collision 924 projectile=neutron Ekin[MeV]=2389.41 direction=(0.897462,0.310581,0.313213) material=G4_Pb - --> #secondaries=63 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 925 projectile=hyperalpha Ekin[MeV]=29678.3 direction=(0.274857,0.300161,0.913431) material=G4_Pb - --> #secondaries=69 impactParameter[fm]=6.62835 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=202 #NNcollisions=8 - Collision 926 projectile=anti_xi_c+ Ekin[MeV]=1578.34 direction=(0.765032,0.380197,0.519785) material=G4_H - --> #secondaries=2 impactParameter[fm]=1.16486 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=0 - Collision 927 projectile=anti_deuteron Ekin[MeV]=17371.5 direction=(0.394757,0.690547,0.606062) material=G4_Si - --> #secondaries=16 impactParameter[fm]=3.66359 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=28 #NNcollisions=1 - Collision 928 projectile=alpha Ekin[MeV]=22747.4 direction=(0.0692587,0.742112,0.666688) material=G4_C - --> #secondaries=8 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 929 projectile=neutron Ekin[MeV]=15210.1 direction=(0.620064,0.300775,0.724607) material=G4_Pb - --> #secondaries=83 impactParameter[fm]=2.83556 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=194 #NNcollisions=6 - Collision 930 projectile=hypertriton Ekin[MeV]=7362.8 direction=(0.508441,0.566841,0.648213) material=G4_Pb - --> #secondaries=47 impactParameter[fm]=7.05644 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=202 #NNcollisions=2 - Collision 931 projectile=xi_c0 Ekin[MeV]=21761 direction=(0.333707,0.258852,0.906441) material=G4_W - --> #secondaries=25 impactParameter[fm]=6.08951 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=1 - Collision 932 projectile=hyperalpha Ekin[MeV]=24240.2 direction=(0.970406,0.024253,0.240257) material=G4_Fe - --> #secondaries=53 impactParameter[fm]=3.41434 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=49 #NNcollisions=5 - Collision 933 projectile=anti_deuteron Ekin[MeV]=19784 direction=(0.779633,0.421409,0.463236) material=G4_Al - --> #secondaries=16 impactParameter[fm]=4.35139 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 934 projectile=D+ Ekin[MeV]=10264.1 direction=(0.550988,0.547769,0.629573) material=G4_Pb - --> #secondaries=37 impactParameter[fm]=4.31313 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=1 - Collision 935 projectile=lambda_c+ Ekin[MeV]=11029.8 direction=(0.897438,0.170456,0.406878) material=G4_Cu - --> #secondaries=29 impactParameter[fm]=3.85601 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=59 #NNcollisions=3 - Collision 936 projectile=Bc+ Ekin[MeV]=10851.2 direction=(0.547328,0.828154,0.120798) material=G4_W - --> #secondaries=14 impactParameter[fm]=4.59989 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=1 - Collision 937 projectile=kaon0L Ekin[MeV]=18179.6 direction=(0.62707,0.729325,0.273619) material=G4_Cu - --> #secondaries=27 impactParameter[fm]=4.53286 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 938 projectile=xi_c+ Ekin[MeV]=7285.45 direction=(0.543329,0.793763,0.273377) material=G4_He - --> #secondaries=6 impactParameter[fm]=1.02297 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=1 - Collision 939 projectile=kaon0L Ekin[MeV]=24971.8 direction=(0.571567,0.473863,0.6699) material=G4_C - --> #secondaries=17 impactParameter[fm]=1.48536 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=10 #NNcollisions=2 - Collision 940 projectile=deuteron Ekin[MeV]=4169.54 direction=(0.256648,0.106548,0.960614) material=G4_Fe + j=0 pi+ p=(572.825,-1.84153,107.786599.357) MeV + j=1 eta p=(981.32,-326.582,-32.36251170.83) MeV + j=2 pi+ p=(1221.73,297.611,977.0651598.54) MeV + j=3 pi0 p=(262.365,84.1558,348.137464.043) MeV + j=4 pi0 p=(783.487,92.0842,458.575922.41) MeV + j=5 neutron p=(727.595,185.647,584.7121337.36) MeV + j=6 pi0 p=(180.67,-101.597,-247.781350.11) MeV + j=7 pi+ p=(60.5893,-148.554,200.336292.154) MeV + j=8 proton p=(-585.957,79.4035,236.7311134.04) MeV + j=9 neutron p=(73.3346,136.241,235.993981.028) MeV + j=10 neutron p=(-458.064,-107.308,-252.8241080.76) MeV + j=11 neutron p=(-163.02,169.721,-238.916997.619) MeV + j=12 neutron p=(-9.53102,-60.4432,-55.8754943.212) MeV + j=13 neutron p=(-366.069,-213.391,-190.3231048.12) MeV + j=14 proton p=(376.619,128.184,-323.0831069.12) MeV + j=15 proton p=(-202.789,74.6718,75.5406965.795) MeV + j=16 neutron p=(-290.623,80.8165,154.152998.769) MeV + j=17 neutron p=(87.8346,-83.3646,12.7967947.424) MeV + j=18 proton p=(-184.128,-75.2395,274.133997.531) MeV + j=19 neutron p=(523.6,246.231,129.621111.02) MeV + j=20 neutron p=(304.004,280.168,-144.1651036.57) MeV + j=21 neutron p=(120.759,-136.097,-281.365997.524) MeV + j=22 proton p=(32.015,-66.8338,191.425960.463) MeV + j=23 neutron p=(-197.583,-171.431,-208.417997.321) MeV + j=24 proton p=(-248.636,364.93,-5.492061037) MeV + j=25 proton p=(336.156,-201.143,-90.60381020.8) MeV + j=26 pi- p=(119.066,207.068,155.97317.585) MeV + j=27 pi0 p=(1346.4,424.218,1052.561766.03) MeV + j=28 pi+ p=(803.703,206.186,487.727972.527) MeV + j=29 pi- p=(115.071,27.5495,48.5671189.312) MeV + j=30 neutron p=(1210.78,141.836,1132.681910.98) MeV + j=31 pi0 p=(275.84,-22.0813,477.971568.551) MeV + j=32 pi- p=(200.129,210.869,53.0749326.824) MeV + j=33 neutron p=(-10.1095,114.361,-69.3524949.091) MeV + j=34 pi- p=(-48.0029,-138.08,-124.437237.349) MeV + j=35 proton p=(-11.3405,471.428,-43.83441051.02) MeV + j=36 neutron p=(-427.211,419.533,15.65761114.25) MeV + j=37 proton p=(347.631,-75.7749,-71.19741005.99) MeV + j=38 neutron p=(213.046,20.0581,-104.299969.253) MeV + j=39 neutron p=(-186.541,39.8695,113.919965.478) MeV + j=40 proton p=(579.748,246.3,345.8371181.83) MeV + j=41 neutron p=(355.736,286.25,113.5111050.79) MeV + j=42 neutron p=(288.429,-420.012,-338.0551121.01) MeV + j=43 neutron p=(175.29,86.9892,317.4571010.87) MeV + j=44 neutron p=(1029.53,-681.966,707.1831705.26) MeV + j=45 proton p=(0.793789,-180.652,45.2188956.575) MeV + j=46 proton p=(-1.2969,263.677,341.9561032.87) MeV + j=47 proton p=(-173.003,1.75778,477.9571067.11) MeV + j=48 neutron p=(229.247,-122.42,85.5379978.591) MeV + j=49 proton p=(-56.5918,-234.077,-83.1068972.243) MeV + j=50 neutron p=(182.006,-86.2424,-122.644968.705) MeV + j=51 neutron p=(-188.626,-105.631,73.228966.894) MeV + j=52 proton p=(-151.589,191.102,41.7928970.361) MeV + j=53 proton p=(181.361,181.414,-41.9538973.61) MeV + j=54 neutron p=(-161.584,-42.9775,-194.093973.864) MeV + j=55 neutron p=(263.58,156.404,71.002990.839) MeV + j=56 proton p=(-140.914,95.6526,-152.826965.772) MeV + j=57 proton p=(-24.6878,0.849479,-139.953948.974) MeV + j=58 neutron p=(-184.085,-72.8686,-19.0366960.387) MeV + j=59 neutron p=(159.559,5.63831,129.217961.754) MeV + j=60 proton p=(200.851,-32.3412,-374.5631030.55) MeV + j=61 proton p=(-173.039,-12.0393,-177.99970.63) MeV + j=62 Sn115 p=(1753.85,1772.8,1598.22107047) MeV + j=63 neutron p=(54.5147,-108.183,18.0329947.514) MeV + j=64 triton p=(130.764,-298.712,122.7252830.45) MeV + j=65 proton p=(89.1508,-50.7712,-160.2957.363) MeV + j=66 neutron p=(136.326,-56.911,95.802955.921) MeV + j=67 neutron p=(-47.7173,-19.266,-144.9952.065) MeV + j=68 neutron p=(-45.9472,20.5365,-92.24945.423) MeV + j=69 alpha p=(-28.3477,49.1277,435.9513753.22) MeV + j=70 neutron p=(-39.0213,-53.6926,7.49239941.937) MeV + j=71 neutron p=(-25.2356,-60.263,-13.8855941.936) MeV + j=72 deuteron p=(194.29,-179.97,-14.70091894.27) MeV + j=73 triton p=(251.757,-62.5278,210.1452828.69) MeV + j=74 neutron p=(129.019,81.9237,-61.64953.908) MeV + j=75 alpha p=(70.1476,-202.757,-266.5633743.05) MeV + j=76 neutron p=(95.1039,55.9181,13.9008946.123) MeV + j=77 triton p=(19.9625,401.08,186.1512843.58) MeV + j=78 deuteron p=(55.6855,237.158,215.6281903.62) MeV + j=79 neutron p=(-1.8716,-35.816,7.92389940.283) MeV + j=80 neutron p=(11.7536,-105.011,83.0816949.132) MeV + j=81 neutron p=(3.94049,61.0217,48.6513942.809) MeV + j=82 neutron p=(30.7296,153.029,-18.848952.628) MeV + j=83 neutron p=(59.2016,-30.3334,50.0131943.244) MeV + j=84 deuteron p=(-92.6171,155.137,20.09131884.4) MeV + j=85 neutron p=(36.4042,97.2547,75.405948.289) MeV + j=86 neutron p=(-36.072,34.4115,-47.0126942.061) MeV + j=87 neutron p=(32.2895,41.7195,-2.46179941.048) MeV + j=88 alpha p=(-251.799,86.2868,-1.841333736.87) MeV + j=89 neutron p=(44.825,21.5537,-14.2519940.989) MeV + j=90 gamma p=(0.0712518,0.692327,-1.167021.3588) MeV + j=91 gamma p=(-0.390271,-0.906076,1.117891.49096) MeV + j=92 gamma p=(-0.852544,-0.148807,-1.34181.59668) MeV + Collision 801 projectile=kaon0L Ekin[MeV]=25405 direction=(0.0711357,0.746479,0.661596) material=G4_H + --> #secondaries=8 impactParameter[fm]=1.13809 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 802 projectile=B- Ekin[MeV]=29945.5 direction=(0.955191,0.176405,0.237678) material=G4_Si + --> #secondaries=17 impactParameter[fm]=1.48682 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 803 projectile=Ds+ Ekin[MeV]=15524.4 direction=(0.592376,0.745014,0.306668) material=G4_Si + --> #secondaries=12 impactParameter[fm]=3.0073 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=28 #NNcollisions=1 + Collision 804 projectile=sigma+ Ekin[MeV]=8939.54 direction=(0.362991,0.209498,0.907936) material=G4_He + --> #secondaries=4 impactParameter[fm]=2.37504 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 805 projectile=deuteron Ekin[MeV]=11501.9 direction=(0.27544,0.885592,0.373979) material=G4_W + --> #secondaries=76 impactParameter[fm]=1.31 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=176 #NNcollisions=4 + Collision 806 projectile=alpha Ekin[MeV]=20666 direction=(0.942269,0.313583,0.117454) material=G4_W + --> #secondaries=143 impactParameter[fm]=2.44557 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=162 #NNcollisions=9 + Collision 807 projectile=xi_c+ Ekin[MeV]=16587.9 direction=(0.942556,0.331056,0.0446089) material=G4_Pb + --> #secondaries=28 impactParameter[fm]=6.10843 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 808 projectile=anti_D0 Ekin[MeV]=29854.4 direction=(0.308218,0.284708,0.907713) material=G4_C + --> #secondaries=16 impactParameter[fm]=2.26209 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 809 projectile=anti_hyperalpha Ekin[MeV]=27421.8 direction=(0.619042,0.308244,0.722338) material=G4_Al + --> #secondaries=13 impactParameter[fm]=2.88817 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=26 #NNcollisions=2 + Collision 810 projectile=B0 Ekin[MeV]=1433.02 direction=(0.687485,0.547498,0.477085) material=G4_Fe + --> #secondaries=9 impactParameter[fm]=7.41346 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=0 + Collision 811 projectile=lambda_b Ekin[MeV]=28076.8 direction=(0.663853,0.511351,0.545728) material=G4_Ar + --> #secondaries=19 impactParameter[fm]=2.59693 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 812 projectile=B- Ekin[MeV]=25714.1 direction=(0.175731,0.806552,0.564439) material=G4_Al + --> #secondaries=27 impactParameter[fm]=2.66658 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=24 #NNcollisions=2 + Collision 813 projectile=anti_omega_b- Ekin[MeV]=12062.6 direction=(0.493086,0.481835,0.724363) material=G4_Al + --> #secondaries=17 impactParameter[fm]=2.84206 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=2 + Collision 814 projectile=anti_D0 Ekin[MeV]=9288.86 direction=(0.960427,0.0469916,0.274539) material=G4_H + --> #secondaries=5 impactParameter[fm]=1.01739 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 815 projectile=anti_hyperalpha Ekin[MeV]=9214.84 direction=(0.757148,0.517241,0.398985) material=G4_Al + --> #secondaries=14 impactParameter[fm]=4.3709 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 816 projectile=anti_lambda Ekin[MeV]=8206.94 direction=(0.814765,0.577222,0.0545265) material=G4_Pb + --> #secondaries=63 impactParameter[fm]=5.20909 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=2 + Collision 817 projectile=doublehyperdoubleneutron Ekin[MeV]=18382.8 direction=(0.596612,0.48176,0.641842) material=G4_Ar + --> #secondaries=46 impactParameter[fm]=1.77988 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=31 #NNcollisions=9 + Collision 818 projectile=kaon0L Ekin[MeV]=5411.46 direction=(0.384916,0.660857,0.644288) material=G4_He + --> #secondaries=6 impactParameter[fm]=2.63121 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 819 projectile=D- Ekin[MeV]=25127.8 direction=(0.624133,0.262007,0.736077) material=G4_Fe + --> #secondaries=21 impactParameter[fm]=2.0989 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 820 projectile=pi+ Ekin[MeV]=12560.5 direction=(0.722002,0.054969,0.689704) material=G4_Si + --> #secondaries=15 impactParameter[fm]=3.77771 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 821 projectile=anti_xi0 Ekin[MeV]=29662.9 direction=(0.310264,0.752907,0.580402) material=G4_H + --> #secondaries=4 impactParameter[fm]=1.17469 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 822 projectile=anti_xi0 Ekin[MeV]=9784.62 direction=(0.277955,0.949677,0.144413) material=G4_Fe + --> #secondaries=41 impactParameter[fm]=2.68757 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=2 + Collision 823 projectile=anti_B0 Ekin[MeV]=22579 direction=(0.74971,0.415214,0.515299) material=G4_Be + --> #secondaries=9 impactParameter[fm]=1.88705 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 824 projectile=anti_lambda_b Ekin[MeV]=24637.4 direction=(0.8238,0.546947,0.149002) material=G4_Fe + --> #secondaries=21 impactParameter[fm]=4.44611 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=51 #NNcollisions=3 + Collision 825 projectile=anti_hyperHe5 Ekin[MeV]=19994 direction=(0.0933571,0.0273556,0.995257) material=G4_Ar + --> #secondaries=45 impactParameter[fm]=3.26828 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=37 #NNcollisions=7 + Collision 826 projectile=hyperalpha Ekin[MeV]=7488.57 direction=(0.773228,0.322444,0.54603) material=G4_Si + --> #secondaries=21 impactParameter[fm]=3.4828 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=24 #NNcollisions=2 + Collision 827 projectile=D+ Ekin[MeV]=1634.12 direction=(0.718884,0.326268,0.613803) material=G4_Fe + --> #secondaries=5 impactParameter[fm]=4.46418 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=0 + Collision 828 projectile=xi_c+ Ekin[MeV]=22561.3 direction=(0.224369,0.870667,0.437718) material=G4_Pb + --> #secondaries=37 impactParameter[fm]=6.77206 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 829 projectile=deuteron Ekin[MeV]=18037.2 direction=(0.00470972,0.740661,0.671862) material=G4_Al + --> #secondaries=10 impactParameter[fm]=5.127 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=26 #NNcollisions=0 + Collision 830 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=28643.7 direction=(0.43389,0.190063,0.88069) material=G4_Pb + --> #secondaries=95 impactParameter[fm]=7.18784 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=6 + Collision 831 projectile=anti_proton Ekin[MeV]=23935.5 direction=(0.728325,0.661286,0.179563) material=G4_Ar + --> #secondaries=13 impactParameter[fm]=2.85461 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=0 + Collision 832 projectile=anti_sigma- Ekin[MeV]=1579.88 direction=(0.963806,0.229139,0.136283) material=G4_Al + --> #secondaries=19 impactParameter[fm]=2.26266 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 833 projectile=anti_doublehyperH4 Ekin[MeV]=28826.7 direction=(0.576855,0.551788,0.602303) material=G4_C + --> #secondaries=15 impactParameter[fm]=2.94468 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=10 #NNcollisions=1 + Collision 834 projectile=anti_doublehyperH4 Ekin[MeV]=19550.5 direction=(0.446689,0.823189,0.35047) material=G4_Be + --> #secondaries=14 impactParameter[fm]=3.27446 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=7 #NNcollisions=1 + Collision 835 projectile=hyperHe5 Ekin[MeV]=12958 direction=(0.454674,0.539556,0.708626) material=G4_Fe + --> #secondaries=45 impactParameter[fm]=2.53359 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=45 #NNcollisions=3 + Collision 836 projectile=He3 Ekin[MeV]=22364.1 direction=(0.526935,0.529928,0.664467) material=G4_Pb + --> #secondaries=30 impactParameter[fm]=7.93208 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=206 #NNcollisions=0 + Collision 837 projectile=anti_omega_b- Ekin[MeV]=24230.3 direction=(0.590779,0.63841,0.493369) material=G4_Ar + --> #secondaries=9 impactParameter[fm]=3.29186 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=0 + Collision 838 projectile=He3 Ekin[MeV]=8625.33 direction=(0.145671,0.848948,0.508003) material=G4_Cu --> #secondaries=12 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 941 projectile=alpha Ekin[MeV]=21135 direction=(0.722127,0.516952,0.459666) material=G4_Pb - --> #secondaries=39 impactParameter[fm]=7.01254 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=203 #NNcollisions=6 - Collision 942 projectile=omega_c0 Ekin[MeV]=5249.39 direction=(0.500508,0.502659,0.704858) material=G4_W - --> #secondaries=63 impactParameter[fm]=2.59072 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=176 #NNcollisions=0 - Collision 943 projectile=hypertriton Ekin[MeV]=8769.69 direction=(0.625559,0.637171,0.450209) material=G4_Ar - --> #secondaries=24 impactParameter[fm]=3.42914 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=36 #NNcollisions=1 - Collision 944 projectile=anti_D0 Ekin[MeV]=9474.31 direction=(0.553538,0.327952,0.765534) material=G4_Ar - --> #secondaries=20 impactParameter[fm]=3.23747 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=2 - Collision 945 projectile=anti_xi_b0 Ekin[MeV]=16050.6 direction=(0.610346,0.663991,0.431965) material=G4_Pb - --> #secondaries=63 impactParameter[fm]=2.37857 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=4 - Collision 946 projectile=kaon+ Ekin[MeV]=2733.83 direction=(0.513917,0.610077,0.603072) material=G4_He - --> #secondaries=7 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 947 projectile=triton Ekin[MeV]=4237.42 direction=(0.0739396,0.218283,0.97308) material=G4_Pb - --> #secondaries=65 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 948 projectile=omega_b- Ekin[MeV]=4401.64 direction=(0.569498,0.241264,0.785789) material=G4_Be - --> #secondaries=6 impactParameter[fm]=2.55238 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 949 projectile=neutron Ekin[MeV]=6518.07 direction=(0.681183,0.549098,0.484233) material=G4_Fe - --> #secondaries=26 impactParameter[fm]=4.36674 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=2 - Collision 950 projectile=lambda_c+ Ekin[MeV]=7220.58 direction=(0.825487,0.386882,0.410967) material=G4_Si - --> #secondaries=15 impactParameter[fm]=3.03764 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 - Collision 951 projectile=Bc+ Ekin[MeV]=3145.21 direction=(0.939473,0.0630634,0.336768) material=G4_Ar - --> #secondaries=5 impactParameter[fm]=2.44766 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 952 projectile=anti_proton Ekin[MeV]=23878.2 direction=(0.646728,0.672343,0.360136) material=G4_Fe - --> #secondaries=26 impactParameter[fm]=2.86135 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 953 projectile=anti_D0 Ekin[MeV]=28018.1 direction=(0.531563,0.841288,0.0983619) material=G4_W - --> #secondaries=82 impactParameter[fm]=2.34992 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=183 #NNcollisions=2 - Collision 954 projectile=anti_triton Ekin[MeV]=18838.2 direction=(0.0565161,0.492539,0.868454) material=G4_Ar - --> #secondaries=10 impactParameter[fm]=4.0793 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=40 #NNcollisions=1 - Collision 955 projectile=sigma+ Ekin[MeV]=8631.14 direction=(0.864792,0.47922,0.149941) material=G4_Cu - --> #secondaries=34 impactParameter[fm]=1.48316 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=59 #NNcollisions=4 - Collision 956 projectile=deuteron Ekin[MeV]=28195.5 direction=(0.70429,0.705226,0.0814386) material=G4_He - --> #secondaries=12 impactParameter[fm]=3.34625 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 957 projectile=Bc+ Ekin[MeV]=25333.5 direction=(0.0785898,0.239611,0.967683) material=G4_Si - --> #secondaries=6 impactParameter[fm]=4.15557 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 958 projectile=anti_D0 Ekin[MeV]=9278.32 direction=(0.651333,0.247301,0.717362) material=G4_Cu - --> #secondaries=21 impactParameter[fm]=3.7954 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=1 - Collision 959 projectile=proton Ekin[MeV]=16853 direction=(0.906214,0.0855588,0.414073) material=G4_He - --> #secondaries=8 impactParameter[fm]=1.00561 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=1 - Collision 960 projectile=proton Ekin[MeV]=27432.6 direction=(0.797951,0.102348,0.593969) material=G4_Be - --> #secondaries=10 impactParameter[fm]=4.77571 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 961 projectile=xi- Ekin[MeV]=21724.1 direction=(0.278731,0.605942,0.74508) material=G4_C - --> #secondaries=15 impactParameter[fm]=0.858282 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=2 - Collision 962 projectile=triton Ekin[MeV]=2287.02 direction=(0.160682,0.97119,0.175988) material=G4_Ar - --> #secondaries=20 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 - Collision 963 projectile=Bc+ Ekin[MeV]=18046.6 direction=(0.711996,0.696601,0.0883678) material=G4_Cu - --> #secondaries=16 impactParameter[fm]=1.54145 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=0 - Collision 964 projectile=anti_proton Ekin[MeV]=9600.13 direction=(0.760228,0.332282,0.55825) material=G4_Si - --> #secondaries=16 impactParameter[fm]=4.31287 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=28 #NNcollisions=1 - Collision 965 projectile=anti_deuteron Ekin[MeV]=7183.6 direction=(0.400567,0.916057,0.0196234) material=G4_C - --> #secondaries=17 impactParameter[fm]=0.854682 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=3 - Collision 966 projectile=anti_omega_b- Ekin[MeV]=15707.9 direction=(0.772489,0.526025,0.35575) material=G4_W - --> #secondaries=21 impactParameter[fm]=5.5761 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=1 - Collision 967 projectile=xi0 Ekin[MeV]=11941.2 direction=(0.881384,0.292556,0.370909) material=G4_Si - --> #secondaries=18 impactParameter[fm]=4.90357 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 968 projectile=doublehyperH4 Ekin[MeV]=24544.9 direction=(0.401446,0.818114,0.411742) material=G4_He - --> #secondaries=11 impactParameter[fm]=2.56312 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=2 #NNcollisions=2 - Collision 969 projectile=B- Ekin[MeV]=24950.7 direction=(0.885655,0.18232,0.427053) material=G4_C - --> #secondaries=7 impactParameter[fm]=2.59759 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=10 #NNcollisions=1 - Collision 970 projectile=kaon0S Ekin[MeV]=9115.08 direction=(0.496783,0.596959,0.629957) material=G4_Pb - --> #secondaries=44 impactParameter[fm]=3.31723 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=1 - Collision 971 projectile=proton Ekin[MeV]=11859.5 direction=(0.685046,0.456433,0.567787) material=G4_Cu - --> #secondaries=13 impactParameter[fm]=5.21669 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 - Collision 972 projectile=sigma- Ekin[MeV]=7828.3 direction=(0.328944,0.794199,0.510924) material=G4_Ar - --> #secondaries=16 impactParameter[fm]=3.98148 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 - Collision 973 projectile=anti_proton Ekin[MeV]=14372.3 direction=(0.137934,0.00675262,0.990418) material=G4_Be - --> #secondaries=5 impactParameter[fm]=3.54919 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 - Collision 974 projectile=lambda_c+ Ekin[MeV]=25692.7 direction=(0.949745,0.248624,0.190186) material=G4_Be - --> #secondaries=18 impactParameter[fm]=0.486566 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 975 projectile=anti_omega_b- Ekin[MeV]=5347.88 direction=(0.543936,0.127844,0.829331) material=G4_Fe - --> #secondaries=14 impactParameter[fm]=3.29505 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=1 - Collision 976 projectile=Ds+ Ekin[MeV]=23862.9 direction=(0.0271202,0.932567,0.359977) material=G4_C - --> #secondaries=14 impactParameter[fm]=1.16782 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 - Collision 977 projectile=kaon0S Ekin[MeV]=19396.6 direction=(0.673372,0.653605,0.345501) material=G4_W - --> #secondaries=39 impactParameter[fm]=6.45944 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=185 #NNcollisions=1 - Collision 978 projectile=proton Ekin[MeV]=23415.3 direction=(0.232518,0.570361,0.787797) material=G4_Ar - --> #secondaries=11 impactParameter[fm]=3.67782 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=0 - Collision 979 projectile=anti_xi_b0 Ekin[MeV]=4983.81 direction=(0.627839,0.239939,0.740437) material=G4_Al - --> #secondaries=12 impactParameter[fm]=1.48105 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 - Collision 980 projectile=anti_lambda_c+ Ekin[MeV]=12174.5 direction=(0.785797,0.11236,0.608192) material=G4_C - --> #secondaries=15 impactParameter[fm]=0.898274 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=10 #NNcollisions=2 - Collision 981 projectile=kaon0L Ekin[MeV]=18688.1 direction=(0.819914,0.569584,0.0575721) material=G4_Si - --> #secondaries=23 impactParameter[fm]=2.40262 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 - Collision 982 projectile=doublehyperdoubleneutron Ekin[MeV]=15151.3 direction=(0.473308,0.83677,0.275311) material=G4_Ar - --> #secondaries=44 impactParameter[fm]=0.171458 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=30 #NNcollisions=4 - Collision 983 projectile=anti_omega_b- Ekin[MeV]=29111.9 direction=(0.416608,0.799955,0.431867) material=G4_H - --> #secondaries=3 impactParameter[fm]=0.158072 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 984 projectile=omega- Ekin[MeV]=29938.3 direction=(0.304391,0.893168,0.331053) material=G4_W - --> #secondaries=36 impactParameter[fm]=7.02342 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=180 #NNcollisions=1 - Collision 985 projectile=anti_hyperH4 Ekin[MeV]=10336.9 direction=(0.242722,0.285367,0.927174) material=G4_Ar - --> #secondaries=48 impactParameter[fm]=1.50967 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=36 #NNcollisions=5 - Collision 986 projectile=pi- Ekin[MeV]=17534.6 direction=(0.349141,0.684442,0.640031) material=G4_Ar - --> #secondaries=35 impactParameter[fm]=2.386 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=35 #NNcollisions=5 - Collision 987 projectile=B+ Ekin[MeV]=12467.4 direction=(0.564099,0.286395,0.774449) material=G4_Fe - --> #secondaries=11 impactParameter[fm]=2.94205 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=53 #NNcollisions=1 - Collision 988 projectile=anti_omega_b- Ekin[MeV]=11791 direction=(0.195336,0.669499,0.716669) material=G4_Cu - --> #secondaries=42 impactParameter[fm]=1.53968 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=58 #NNcollisions=7 - Collision 989 projectile=Bc+ Ekin[MeV]=16151.5 direction=(0.80953,0.0113845,0.586968) material=G4_Fe - --> #secondaries=10 impactParameter[fm]=4.06166 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=1 - Collision 990 projectile=xi0 Ekin[MeV]=21806.5 direction=(0.924778,0.300784,0.233054) material=G4_He - --> #secondaries=4 impactParameter[fm]=2.49927 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 991 projectile=kaon- Ekin[MeV]=10395.9 direction=(0.46647,0.882581,0.0587966) material=G4_H - --> #secondaries=4 impactParameter[fm]=0.265262 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 992 projectile=xi_b- Ekin[MeV]=12039.3 direction=(0.256219,0.870502,0.420213) material=G4_H - --> #secondaries=3 impactParameter[fm]=0.342728 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 - Collision 993 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=20785.1 direction=(0.141317,0.755513,0.63971) material=G4_Ar - --> #secondaries=41 impactParameter[fm]=2.65514 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=6 - Collision 994 projectile=anti_He3 Ekin[MeV]=14249.3 direction=(0.809451,0.42793,0.402074) material=G4_Si - --> #secondaries=21 impactParameter[fm]=2.9325 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=2 - Collision 995 projectile=lambda Ekin[MeV]=10807.4 direction=(0.743158,0.657665,0.123259) material=G4_Be - --> #secondaries=8 impactParameter[fm]=1.78455 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 - Collision 996 projectile=anti_hypertriton Ekin[MeV]=15916.5 direction=(0.915314,0.366212,0.167597) material=G4_Be - --> #secondaries=14 impactParameter[fm]=3.3849 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=7 #NNcollisions=2 - Collision 997 projectile=anti_hyperHe5 Ekin[MeV]=4718.24 direction=(0.659962,0.306083,0.686122) material=G4_He - --> #secondaries=5 impactParameter[fm]=3.37071 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=3 #NNcollisions=0 - Collision 998 projectile=omega_c0 Ekin[MeV]=11640.9 direction=(0.452664,0.750653,0.481264) material=G4_Pb - --> #secondaries=50 impactParameter[fm]=2.77063 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=3 - Collision 999 projectile=anti_sigma- Ekin[MeV]=22643.7 direction=(0.0498587,0.659319,0.750208) material=G4_Be - --> #secondaries=12 impactParameter[fm]=2.61899 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 839 projectile=Bc- Ekin[MeV]=12860.7 direction=(0.694763,0.490574,0.525968) material=G4_W + --> #secondaries=27 impactParameter[fm]=2.20911 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=183 #NNcollisions=1 + Collision 840 projectile=anti_omega- Ekin[MeV]=18119.1 direction=(0.866908,0.24782,0.432499) material=G4_Cu + --> #secondaries=18 impactParameter[fm]=5.60522 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=1 + Collision 841 projectile=xi_c+ Ekin[MeV]=26297.2 direction=(0.331801,0.425432,0.841971) material=G4_Pb + --> #secondaries=31 impactParameter[fm]=6.71991 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=2 + Collision 842 projectile=B0 Ekin[MeV]=24633.7 direction=(0.896359,0.265334,0.35516) material=G4_Cu + --> #secondaries=13 impactParameter[fm]=4.98933 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 843 projectile=B- Ekin[MeV]=20708.8 direction=(0.0759867,0.822305,0.56395) material=G4_Cu + --> #secondaries=14 impactParameter[fm]=2.9335 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=2 + Collision 844 projectile=anti_xi_b- Ekin[MeV]=12381.9 direction=(0.508673,0.677185,0.53167) material=G4_Pb + --> #secondaries=29 impactParameter[fm]=5.36466 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=4 + Collision 845 projectile=Ds- Ekin[MeV]=27254.3 direction=(0.571507,0.536732,0.620724) material=G4_Si + --> #secondaries=13 impactParameter[fm]=4.41393 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 846 projectile=B- Ekin[MeV]=16825.4 direction=(0.723895,0.664549,0.185339) material=G4_Pb + --> #secondaries=32 impactParameter[fm]=6.39972 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 847 projectile=B+ Ekin[MeV]=9982.53 direction=(0.326257,0.7681,0.55098) material=G4_He + --> #secondaries=4 impactParameter[fm]=1.23903 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 848 projectile=D- Ekin[MeV]=27034.1 direction=(0.529374,0.824481,0.199989) material=G4_W + --> #secondaries=66 impactParameter[fm]=2.73459 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=180 #NNcollisions=3 + Collision 849 projectile=Bs0 Ekin[MeV]=19278.7 direction=(0.245573,0.6749,0.695848) material=G4_Si + --> #secondaries=13 impactParameter[fm]=1.52238 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 850 projectile=omega_c0 Ekin[MeV]=27676.9 direction=(0.0504441,0.437852,0.897631) material=G4_Pb + --> #secondaries=78 impactParameter[fm]=3.56116 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=199 #NNcollisions=7 + Collision 851 projectile=anti_Bs0 Ekin[MeV]=27306.7 direction=(0.0736696,0.433216,0.898274) material=G4_Be + --> #secondaries=10 impactParameter[fm]=0.705082 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=7 #NNcollisions=2 + Collision 852 projectile=kaon+ Ekin[MeV]=7226.56 direction=(0.659655,0.413681,0.627474) material=G4_W + --> #secondaries=43 impactParameter[fm]=1.59842 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=2 + Collision 853 projectile=Ds- Ekin[MeV]=4081.49 direction=(0.592212,0.772928,0.227742) material=G4_H + --> #secondaries=3 impactParameter[fm]=1.14472 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 854 projectile=anti_xi_c0 Ekin[MeV]=20680.9 direction=(0.65068,0.366032,0.665309) material=G4_Be + --> #secondaries=10 impactParameter[fm]=2.23883 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 855 projectile=anti_omega_c0 Ekin[MeV]=10971.3 direction=(0.621199,0.613301,0.487826) material=G4_W + --> #secondaries=43 impactParameter[fm]=3.2486 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=3 + Collision 856 projectile=anti_B0 Ekin[MeV]=16987.9 direction=(0.638197,0.752589,0.162214) material=G4_W + --> #secondaries=26 impactParameter[fm]=3.27435 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=1 + Collision 857 projectile=kaon- Ekin[MeV]=6341.31 direction=(0.801377,0.47496,0.363605) material=G4_Pb + --> #secondaries=54 impactParameter[fm]=3.25442 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=206 #NNcollisions=0 + Collision 858 projectile=anti_omega_b- Ekin[MeV]=29935.8 direction=(0.651827,0.00610632,0.758343) material=G4_Fe + --> #secondaries=9 impactParameter[fm]=4.721 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 859 projectile=Bc- Ekin[MeV]=28320.9 direction=(0.437375,0.178331,0.88142) material=G4_Be + --> #secondaries=6 impactParameter[fm]=1.61355 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 860 projectile=anti_sigma- Ekin[MeV]=24756.5 direction=(0.624484,0.399894,0.670898) material=G4_Be + --> #secondaries=11 impactParameter[fm]=0.895985 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 861 projectile=anti_lambda_c+ Ekin[MeV]=29763.2 direction=(0.383211,0.771318,0.508152) material=G4_Be + --> #secondaries=15 impactParameter[fm]=0.789149 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=7 #NNcollisions=2 + Collision 862 projectile=anti_lambda Ekin[MeV]=1218.63 direction=(0.472875,0.844768,0.250511) material=G4_Ar + --> #secondaries=16 impactParameter[fm]=2.00829 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=40 #NNcollisions=1 + Collision 863 projectile=D+ Ekin[MeV]=20620.7 direction=(0.409902,0.69047,0.596014) material=G4_Cu + --> #secondaries=24 impactParameter[fm]=4.75259 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=64 #NNcollisions=1 + Collision 864 projectile=anti_lambda_c+ Ekin[MeV]=1590.74 direction=(0.15707,0.513163,0.843797) material=G4_Pb + --> #secondaries=41 impactParameter[fm]=4.56013 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=202 #NNcollisions=0 + Collision 865 projectile=anti_doublehyperH4 Ekin[MeV]=23509 direction=(0.396954,0.53283,0.747342) material=G4_Cu + --> #secondaries=20 impactParameter[fm]=5.72434 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 866 projectile=anti_doublehyperdoubleneutron Ekin[MeV]=1157.12 direction=(0.703792,0.445562,0.553309) material=G4_W + --> #secondaries=46 impactParameter[fm]=3.98315 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=178 #NNcollisions=4 + Collision 867 projectile=kaon- Ekin[MeV]=10816.6 direction=(0.677528,0.733978,0.0472428) material=G4_Be + --> #secondaries=17 impactParameter[fm]=0.975361 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=6 #NNcollisions=3 + Collision 868 projectile=anti_hyperHe5 Ekin[MeV]=19114.3 direction=(0.528175,0.166533,0.832645) material=G4_Pb + --> #secondaries=93 impactParameter[fm]=5.78432 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=203 #NNcollisions=4 + Collision 869 projectile=xi_c+ Ekin[MeV]=14039 direction=(0.391435,0.573958,0.719271) material=G4_Ar + --> #secondaries=26 impactParameter[fm]=2.7262 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=37 #NNcollisions=1 + Collision 870 projectile=proton Ekin[MeV]=19468.4 direction=(0.824048,0.469208,0.317472) material=G4_Si + --> #secondaries=6 impactParameter[fm]=3.03784 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 871 projectile=Bc+ Ekin[MeV]=21439.2 direction=(0.89988,0.255767,0.353269) material=G4_W + --> #secondaries=27 impactParameter[fm]=5.51343 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=184 #NNcollisions=2 + Collision 872 projectile=kaon- Ekin[MeV]=11440 direction=(0.432579,0.227238,0.87249) material=G4_Fe + --> #secondaries=25 impactParameter[fm]=3.38303 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 873 projectile=anti_Bs0 Ekin[MeV]=10619.2 direction=(0.720102,0.438835,0.537473) material=G4_Pb + --> #secondaries=22 impactParameter[fm]=5.22099 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=207 #NNcollisions=1 + Collision 874 projectile=anti_doublehyperH4 Ekin[MeV]=17331.3 direction=(0.024667,0.463966,0.88551) material=G4_Pb + --> #secondaries=86 impactParameter[fm]=4.85842 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=5 + Collision 875 projectile=deuteron Ekin[MeV]=6819.92 direction=(0.426912,0.60061,0.676028) material=G4_Si + --> #secondaries=12 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 876 projectile=kaon0L Ekin[MeV]=25979.8 direction=(0.674212,0.0285275,0.737987) material=G4_C + --> #secondaries=12 impactParameter[fm]=2.06855 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 877 projectile=anti_lambda_b Ekin[MeV]=4045.39 direction=(0.431809,0.848164,0.306853) material=G4_Cu + --> #secondaries=11 impactParameter[fm]=5.51542 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 878 projectile=hyperHe5 Ekin[MeV]=15891.4 direction=(0.753621,0.594286,0.280855) material=G4_Fe + --> #secondaries=13 impactParameter[fm]=5.40955 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=55 #NNcollisions=2 + Collision 879 projectile=anti_xi_c+ Ekin[MeV]=4790.58 direction=(0.681699,0.464623,0.565165) material=G4_Be + --> #secondaries=4 impactParameter[fm]=3.18777 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 880 projectile=anti_alpha Ekin[MeV]=23908.4 direction=(0.172087,0.958706,0.226426) material=G4_Fe + --> #secondaries=67 impactParameter[fm]=1.69301 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=46 #NNcollisions=6 + Collision 881 projectile=Bc+ Ekin[MeV]=6270.81 direction=(0.252701,0.94277,0.217547) material=G4_Fe + --> #secondaries=10 impactParameter[fm]=1.53431 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=52 #NNcollisions=1 + Collision 882 projectile=He3 Ekin[MeV]=9774.3 direction=(0.438719,0.569007,0.695526) material=G4_Ar + --> #secondaries=14 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 883 projectile=xi_b- Ekin[MeV]=25902.3 direction=(0.480732,0.620144,0.619933) material=G4_W + --> #secondaries=76 impactParameter[fm]=1.68313 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=176 #NNcollisions=4 + Collision 884 projectile=omega- Ekin[MeV]=12912 direction=(0.777058,0.401164,0.485023) material=G4_Cu + --> #secondaries=43 impactParameter[fm]=2.66204 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=57 #NNcollisions=1 + Collision 885 projectile=anti_omega_b- Ekin[MeV]=4538.02 direction=(0.357086,0.838261,0.412078) material=G4_He + --> #secondaries=5 impactParameter[fm]=0.508993 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=1 #NNcollisions=0 + Collision 886 projectile=anti_xi0 Ekin[MeV]=1854.47 direction=(0.572839,0.527728,0.627183) material=G4_Al + --> #secondaries=16 impactParameter[fm]=3.77622 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 887 projectile=anti_xi0 Ekin[MeV]=19950.3 direction=(0.7272,0.539269,0.424698) material=G4_C + --> #secondaries=22 impactParameter[fm]=0.576781 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=4 + Collision 888 projectile=alpha Ekin[MeV]=11567.6 direction=(0.624981,0.373662,0.685401) material=G4_C + --> #secondaries=22 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 889 projectile=Bs0 Ekin[MeV]=18113.4 direction=(0.729405,0.103939,0.67614) material=G4_Fe + --> #secondaries=5 impactParameter[fm]=4.68853 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=55 #NNcollisions=0 + Collision 890 projectile=doublehyperH4 Ekin[MeV]=21562.8 direction=(0.529702,0.236472,0.814553) material=G4_H + --> #secondaries=5 impactParameter[fm]=0.781435 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=0 + Collision 891 projectile=alpha Ekin[MeV]=18108.9 direction=(0.118306,0.895636,0.428766) material=G4_C + --> #secondaries=18 impactParameter[fm]=1.91423 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=10 #NNcollisions=1 + Collision 892 projectile=anti_omega_c0 Ekin[MeV]=9349.64 direction=(0.0430882,0.896076,0.441805) material=G4_Pb + --> #secondaries=27 impactParameter[fm]=7.14596 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=206 #NNcollisions=1 + Collision 893 projectile=proton Ekin[MeV]=9046.73 direction=(0.534078,0.790395,0.300062) material=G4_Be + --> #secondaries=15 impactParameter[fm]=1.46039 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=3 + Collision 894 projectile=xi_b0 Ekin[MeV]=20510.8 direction=(0.524882,0.779117,0.342747) material=G4_H + --> #secondaries=3 impactParameter[fm]=0.328714 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 895 projectile=B+ Ekin[MeV]=29039.9 direction=(0.839979,0.404573,0.361603) material=G4_Be + --> #secondaries=7 impactParameter[fm]=0.529509 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 896 projectile=anti_xi_b- Ekin[MeV]=14449.4 direction=(0.580218,0.651274,0.48907) material=G4_Ar + --> #secondaries=11 impactParameter[fm]=4.24853 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 897 projectile=anti_xi_b0 Ekin[MeV]=29996.4 direction=(0.566525,0.480725,0.669293) material=G4_Cu + --> #secondaries=37 impactParameter[fm]=3.06884 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=2 + Collision 898 projectile=anti_hyperHe5 Ekin[MeV]=2844.12 direction=(0.553188,0.833042,0.00494338) material=G4_He + --> #secondaries=9 impactParameter[fm]=3.79524 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 899 projectile=Bc- Ekin[MeV]=7158.25 direction=(0.21189,0.57548,0.789889) material=G4_Si + --> #secondaries=9 impactParameter[fm]=2.93157 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 900 projectile=B0 Ekin[MeV]=6949.12 direction=(0.0876026,0.612924,0.785271) material=G4_Cu + --> #secondaries=10 impactParameter[fm]=5.1642 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=62 #NNcollisions=1 + List of produced secondaries: + j=0 B+ p=(598.181,6779.94,8423.9112048.2) MeV + j=1 neutron p=(387.979,-197.89,166.4551048.89) MeV + j=2 neutron p=(-62.702,5.17546,-27.1121942.06) MeV + j=3 neutron p=(55.6859,92.9861,29.8609946.267) MeV + j=4 proton p=(11.2875,28.6894,129.667947.691) MeV + j=5 neutron p=(-61.5436,-25.4025,-7.5543941.952) MeV + j=6 gamma p=(-0.976064,0.159112,-2.991893.1511) MeV + j=7 gamma p=(-0.89635,0.412416,-0.2641651.02143) MeV + j=8 gamma p=(0.103064,-0.00610668,-0.04306330.111866) MeV + j=9 Co58 p=(39.1643,76.6769,-50.145653953.1) MeV + Collision 901 projectile=D- Ekin[MeV]=15871.9 direction=(0.334275,0.288651,0.897185) material=G4_H + --> #secondaries=6 impactParameter[fm]=1.12193 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 902 projectile=lambda_b Ekin[MeV]=8759.46 direction=(0.640546,0.747701,0.175052) material=G4_Pb + --> #secondaries=21 impactParameter[fm]=7.02268 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=0 + Collision 903 projectile=D0 Ekin[MeV]=5333.56 direction=(0.617495,0.370012,0.694112) material=G4_He + --> #secondaries=5 impactParameter[fm]=1.93231 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 904 projectile=neutron Ekin[MeV]=8132.91 direction=(0.270883,0.727633,0.630216) material=G4_Al + --> #secondaries=17 impactParameter[fm]=1.57301 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=1 + Collision 905 projectile=D+ Ekin[MeV]=9477.06 direction=(0.49431,0.716148,0.492737) material=G4_He + --> #secondaries=4 impactParameter[fm]=1.64568 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 906 projectile=kaon+ Ekin[MeV]=28883.9 direction=(0.46004,0.562439,0.687041) material=G4_H + --> #secondaries=10 impactParameter[fm]=1.05523 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 907 projectile=He3 Ekin[MeV]=7642.09 direction=(0.534562,0.357856,0.765626) material=G4_Al + --> #secondaries=13 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 908 projectile=lambda Ekin[MeV]=9592.16 direction=(0.634125,0.190656,0.749357) material=G4_H + --> #secondaries=5 impactParameter[fm]=1.03325 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 909 projectile=xi_b0 Ekin[MeV]=8050.4 direction=(0.370214,0.35635,0.857879) material=G4_He + --> #secondaries=4 impactParameter[fm]=1.22074 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 910 projectile=anti_B0 Ekin[MeV]=19877.7 direction=(0.681476,0.655113,0.326216) material=G4_W + --> #secondaries=45 impactParameter[fm]=4.0273 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=181 #NNcollisions=1 + Collision 911 projectile=anti_xi_b0 Ekin[MeV]=22958.9 direction=(0.92643,0.0613037,0.371443) material=G4_Cu + --> #secondaries=30 impactParameter[fm]=5.08692 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=61 #NNcollisions=1 + Collision 912 projectile=kaon- Ekin[MeV]=16244.2 direction=(0.730866,0.502211,0.462189) material=G4_W + --> #secondaries=34 impactParameter[fm]=3.18947 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=183 #NNcollisions=1 + Collision 913 projectile=hyperH4 Ekin[MeV]=20826.1 direction=(0.269487,0.509452,0.817212) material=G4_Fe + --> #secondaries=44 impactParameter[fm]=4.60235 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=49 #NNcollisions=6 + Collision 914 projectile=kaon0L Ekin[MeV]=3519.44 direction=(0.400918,0.762254,0.508167) material=G4_Cu + --> #secondaries=9 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 915 projectile=kaon- Ekin[MeV]=26176.6 direction=(0.0849322,0.73468,0.673077) material=G4_Fe + --> #secondaries=40 impactParameter[fm]=1.73598 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=52 #NNcollisions=3 + Collision 916 projectile=anti_xi- Ekin[MeV]=13906.6 direction=(0.0684024,0.294031,0.953345) material=G4_Fe + --> #secondaries=30 impactParameter[fm]=3.93081 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=54 #NNcollisions=1 + Collision 917 projectile=anti_lambda Ekin[MeV]=2404.92 direction=(0.65967,0.496101,0.564552) material=G4_C + --> #secondaries=14 impactParameter[fm]=0.955687 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=12 #NNcollisions=1 + Collision 918 projectile=anti_omega_c0 Ekin[MeV]=1424.1 direction=(0.484385,0.809625,0.331479) material=G4_C + --> #secondaries=4 impactParameter[fm]=1.62196 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 919 projectile=anti_omega_c0 Ekin[MeV]=19794.4 direction=(0.64389,0.415149,0.642695) material=G4_Ar + --> #secondaries=32 impactParameter[fm]=2.77833 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=38 #NNcollisions=2 + Collision 920 projectile=B0 Ekin[MeV]=4330.42 direction=(0.633943,0.53064,0.562616) material=G4_Cu + --> #secondaries=12 impactParameter[fm]=2.77891 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=61 #NNcollisions=1 + Collision 921 projectile=hyperalpha Ekin[MeV]=25579.9 direction=(0.0572566,0.134875,0.989207) material=G4_Ar + --> #secondaries=43 impactParameter[fm]=4.15844 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=37 #NNcollisions=4 + Collision 922 projectile=anti_xi_b0 Ekin[MeV]=29621.6 direction=(0.35206,0.699357,0.622056) material=G4_Cu + --> #secondaries=41 impactParameter[fm]=2.66872 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=63 #NNcollisions=2 + Collision 923 projectile=omega_b- Ekin[MeV]=17450.3 direction=(0.698924,0.672256,0.244083) material=G4_Cu + --> #secondaries=19 impactParameter[fm]=2.85307 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 924 projectile=xi_c+ Ekin[MeV]=11748.9 direction=(0.740071,0.67019,0.0560385) material=G4_Fe + --> #secondaries=6 impactParameter[fm]=4.65514 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=1 + Collision 925 projectile=alpha Ekin[MeV]=12247.8 direction=(0.534815,0.238598,0.810583) material=G4_Fe + --> #secondaries=28 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 926 projectile=He3 Ekin[MeV]=7046.21 direction=(0.686664,0.676755,0.26551) material=G4_He + --> #secondaries=6 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 927 projectile=omega- Ekin[MeV]=3551.14 direction=(0.879956,0.138984,0.45427) material=G4_H + --> #secondaries=4 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 928 projectile=anti_xi_b0 Ekin[MeV]=22108.8 direction=(0.612995,0.494613,0.616113) material=G4_Ar + --> #secondaries=9 impactParameter[fm]=4.51619 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=0 + Collision 929 projectile=D- Ekin[MeV]=12479.7 direction=(0.310121,0.694519,0.649206) material=G4_C + --> #secondaries=5 impactParameter[fm]=0.925003 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=1 + Collision 930 projectile=anti_xi_b0 Ekin[MeV]=1725.6 direction=(0.335948,0.670106,0.661889) material=G4_Pb + --> #secondaries=31 impactParameter[fm]=6.10808 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=0 + Collision 931 projectile=anti_sigma- Ekin[MeV]=15495.1 direction=(0.741258,0.648959,0.17143) material=G4_Cu + --> #secondaries=23 impactParameter[fm]=6.83118 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=64 #NNcollisions=1 + Collision 932 projectile=anti_omega_b- Ekin[MeV]=9479.74 direction=(0.935716,0.0170596,0.352341) material=G4_Pb + --> #secondaries=24 impactParameter[fm]=7.7983 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=207 #NNcollisions=1 + Collision 933 projectile=anti_sigma- Ekin[MeV]=5904.17 direction=(0.935125,0.0474258,0.35113) material=G4_H + --> #secondaries=5 impactParameter[fm]=0.0587995 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 934 projectile=Bs0 Ekin[MeV]=10079 direction=(0.706319,0.193249,0.681005) material=G4_Fe + --> #secondaries=15 impactParameter[fm]=2.43121 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=54 #NNcollisions=2 + Collision 935 projectile=hyperHe5 Ekin[MeV]=1163.52 direction=(0.825902,0.435193,0.358459) material=G4_Be + --> #secondaries=7 impactParameter[fm]=3.73926 #projectileSpectatorNucleons=4 #targetSpectatorNucleons=8 #NNcollisions=0 + Collision 936 projectile=Ds+ Ekin[MeV]=13204.2 direction=(0.620255,0.622439,0.477341) material=G4_H + --> #secondaries=5 impactParameter[fm]=0.652076 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 937 projectile=He3 Ekin[MeV]=28544.8 direction=(0.756927,0.403678,0.513912) material=G4_Cu + --> #secondaries=11 impactParameter[fm]=5.70224 #projectileSpectatorNucleons=2 #targetSpectatorNucleons=62 #NNcollisions=0 + Collision 938 projectile=anti_He3 Ekin[MeV]=13475.9 direction=(0.0518593,0.722694,0.68922) material=G4_Si + --> #secondaries=17 impactParameter[fm]=5.60456 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=29 #NNcollisions=2 + Collision 939 projectile=B+ Ekin[MeV]=1749.67 direction=(0.282957,0.640151,0.714243) material=G4_He + --> #secondaries=4 impactParameter[fm]=3.14663 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 940 projectile=xi_b0 Ekin[MeV]=22765.3 direction=(0.413286,0.755112,0.508921) material=G4_H + --> #secondaries=6 impactParameter[fm]=1.35115 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 941 projectile=Ds- Ekin[MeV]=22993.1 direction=(0.448197,0.119807,0.88587) material=G4_Be + --> #secondaries=5 impactParameter[fm]=1.33567 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 942 projectile=lambda_c+ Ekin[MeV]=28192.5 direction=(0.783883,0.601848,0.152664) material=G4_W + --> #secondaries=57 impactParameter[fm]=3.90686 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=177 #NNcollisions=5 + Collision 943 projectile=anti_lambda Ekin[MeV]=5019.99 direction=(0.655348,0.75007,0.0889589) material=G4_Fe + --> #secondaries=44 impactParameter[fm]=0.856943 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=55 #NNcollisions=2 + Collision 944 projectile=anti_proton Ekin[MeV]=13243.4 direction=(0.252726,0.318269,0.913693) material=G4_Be + --> #secondaries=8 impactParameter[fm]=2.52995 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=9 #NNcollisions=1 + Collision 945 projectile=anti_lambda_c+ Ekin[MeV]=3821.88 direction=(0.692846,0.184964,0.696959) material=G4_Al + --> #secondaries=11 impactParameter[fm]=2.97219 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 946 projectile=pi- Ekin[MeV]=7246.77 direction=(0.809921,0.553491,0.194102) material=G4_He + --> #secondaries=9 impactParameter[fm]=1.79457 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 947 projectile=Ds+ Ekin[MeV]=2939.78 direction=(0.753931,0.316772,0.575537) material=G4_Al + --> #secondaries=13 impactParameter[fm]=2.06151 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 948 projectile=lambda Ekin[MeV]=21966.3 direction=(0.677164,0.0830378,0.731132) material=G4_Al + --> #secondaries=29 impactParameter[fm]=3.86387 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=24 #NNcollisions=2 + Collision 949 projectile=alpha Ekin[MeV]=7721 direction=(0.576511,0.33176,0.746706) material=G4_C + --> #secondaries=13 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 950 projectile=xi_b- Ekin[MeV]=6457.13 direction=(0.720997,0.238428,0.650627) material=G4_Ar + --> #secondaries=10 impactParameter[fm]=0.876094 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 951 projectile=doublehyperdoubleneutron Ekin[MeV]=3093.1 direction=(0.657034,0.72504,0.206454) material=G4_W + --> #secondaries=72 impactParameter[fm]=2.31791 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=166 #NNcollisions=1 + Collision 952 projectile=xi_c+ Ekin[MeV]=2489.36 direction=(0.487108,0.681427,0.546244) material=G4_Ar + --> #secondaries=19 impactParameter[fm]=1.95056 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=36 #NNcollisions=0 + Collision 953 projectile=anti_omega_c0 Ekin[MeV]=22382.4 direction=(0.153382,0.392549,0.906851) material=G4_Cu + --> #secondaries=22 impactParameter[fm]=4.95043 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 954 projectile=hyperalpha Ekin[MeV]=13093.8 direction=(0.364949,0.930633,0.0270909) material=G4_Fe + --> #secondaries=45 impactParameter[fm]=3.64539 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=50 #NNcollisions=5 + Collision 955 projectile=anti_doublehyperH4 Ekin[MeV]=13352.5 direction=(0.626093,0.697351,0.348868) material=G4_He + --> #secondaries=14 impactParameter[fm]=1.47884 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=4 #NNcollisions=3 + Collision 956 projectile=xi_b0 Ekin[MeV]=22020.6 direction=(0.203291,0.348445,0.915019) material=G4_Si + --> #secondaries=13 impactParameter[fm]=2.94251 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=1 + Collision 957 projectile=anti_neutron Ekin[MeV]=27782.6 direction=(0.668619,0.742286,0.0442634) material=G4_W + --> #secondaries=71 impactParameter[fm]=4.30708 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=181 #NNcollisions=1 + Collision 958 projectile=kaon0L Ekin[MeV]=22027.8 direction=(0.713523,0.601223,0.359744) material=G4_C + --> #secondaries=6 impactParameter[fm]=3.03829 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 959 projectile=Bs0 Ekin[MeV]=22423.3 direction=(0.168148,0.898211,0.406132) material=G4_C + --> #secondaries=5 impactParameter[fm]=0.968371 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=11 #NNcollisions=0 + Collision 960 projectile=lambda_b Ekin[MeV]=19187.5 direction=(0.57978,0.0505612,0.813203) material=G4_Cu + --> #secondaries=22 impactParameter[fm]=5.19247 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 961 projectile=omega_c0 Ekin[MeV]=16583.7 direction=(0.652749,0.269791,0.707906) material=G4_Si + --> #secondaries=19 impactParameter[fm]=2.36098 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=25 #NNcollisions=3 + Collision 962 projectile=anti_sigma- Ekin[MeV]=26678.4 direction=(0.527676,0.629603,0.570226) material=G4_H + --> #secondaries=7 impactParameter[fm]=1.16563 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 963 projectile=anti_proton Ekin[MeV]=6310.93 direction=(0.42291,0.752539,0.504809) material=G4_Cu + --> #secondaries=24 impactParameter[fm]=4.5186 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=2 + Collision 964 projectile=anti_omega- Ekin[MeV]=13188.5 direction=(0.718888,0.393034,0.573345) material=G4_Cu + --> #secondaries=55 impactParameter[fm]=2.52153 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=60 #NNcollisions=3 + Collision 965 projectile=anti_proton Ekin[MeV]=19219.3 direction=(0.820811,0.552729,0.144082) material=G4_Pb + --> #secondaries=22 impactParameter[fm]=8.2024 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=205 #NNcollisions=1 + Collision 966 projectile=kaon- Ekin[MeV]=23327.2 direction=(0.153717,0.297425,0.942289) material=G4_Fe + --> #secondaries=27 impactParameter[fm]=0.428877 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=53 #NNcollisions=1 + Collision 967 projectile=doublehyperdoubleneutron Ekin[MeV]=11921.7 direction=(0.409408,0.507334,0.758286) material=G4_Be + --> #secondaries=13 impactParameter[fm]=1.58855 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=6 #NNcollisions=3 + Collision 968 projectile=anti_doublehyperH4 Ekin[MeV]=14618.3 direction=(0.884441,0.408161,0.226207) material=G4_Al + --> #secondaries=29 impactParameter[fm]=3.64061 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=22 #NNcollisions=2 + Collision 969 projectile=sigma+ Ekin[MeV]=10996.9 direction=(0.688038,0.532619,0.49287) material=G4_Al + --> #secondaries=10 impactParameter[fm]=3.70355 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=26 #NNcollisions=0 + Collision 970 projectile=Bc- Ekin[MeV]=12455.5 direction=(0.893459,0.150247,0.423269) material=G4_Al + --> #secondaries=11 impactParameter[fm]=0.987178 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=25 #NNcollisions=1 + Collision 971 projectile=anti_xi_b0 Ekin[MeV]=1097.12 direction=(0.40086,0.759981,0.511606) material=G4_Si + --> #secondaries=5 impactParameter[fm]=3.32291 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=27 #NNcollisions=0 + Collision 972 projectile=doublehyperdoubleneutron Ekin[MeV]=15619.3 direction=(0.932605,0.344387,0.107912) material=G4_Cu + --> #secondaries=15 impactParameter[fm]=4.52537 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=61 #NNcollisions=1 + Collision 973 projectile=alpha Ekin[MeV]=28563.8 direction=(0.51701,0.845982,0.130441) material=G4_Fe + --> #secondaries=65 impactParameter[fm]=2.92344 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=48 #NNcollisions=5 + Collision 974 projectile=doublehyperH4 Ekin[MeV]=18667.1 direction=(0.373502,0.87431,0.309964) material=G4_Cu + --> #secondaries=17 impactParameter[fm]=6.19965 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=62 #NNcollisions=0 + Collision 975 projectile=anti_sigma- Ekin[MeV]=23128.7 direction=(0.942574,0.331923,0.0371665) material=G4_W + --> #secondaries=91 impactParameter[fm]=1.40224 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=183 #NNcollisions=1 + Collision 976 projectile=xi_b- Ekin[MeV]=7313.57 direction=(0.38546,0.0174968,0.922559) material=G4_Ar + --> #secondaries=10 impactParameter[fm]=4.05324 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=39 #NNcollisions=1 + Collision 977 projectile=anti_sigma+ Ekin[MeV]=26769.6 direction=(0.504811,0.605325,0.615424) material=G4_Cu + --> #secondaries=27 impactParameter[fm]=3.7942 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=62 #NNcollisions=1 + Collision 978 projectile=xi_b- Ekin[MeV]=10919.2 direction=(0.23025,0.929535,0.288011) material=G4_He + --> #secondaries=5 impactParameter[fm]=0.666863 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 + Collision 979 projectile=Ds+ Ekin[MeV]=26319.2 direction=(0.0272269,0.40125,0.915564) material=G4_He + --> #secondaries=12 impactParameter[fm]=1.80553 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 980 projectile=anti_B0 Ekin[MeV]=2576.71 direction=(0.732512,0.335864,0.592134) material=G4_H + --> #secondaries=3 impactParameter[fm]=0.371657 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 981 projectile=hyperH4 Ekin[MeV]=20944.4 direction=(0.608858,0.793116,0.0160953) material=G4_H + --> #secondaries=4 impactParameter[fm]=2.68433 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=0 #NNcollisions=0 + Collision 982 projectile=Ds+ Ekin[MeV]=9087.23 direction=(0.503122,0.863361,0.0384122) material=G4_H + --> #secondaries=4 impactParameter[fm]=1.434 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=0 #NNcollisions=1 + Collision 983 projectile=Bs0 Ekin[MeV]=26923.9 direction=(0.479329,0.7624,0.434729) material=G4_Ar + --> #secondaries=15 impactParameter[fm]=2.03693 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=38 #NNcollisions=1 + Collision 984 projectile=kaon- Ekin[MeV]=1384.34 direction=(0.584888,0.74551,0.319563) material=G4_Pb + --> #secondaries=49 impactParameter[fm]=-999 #projectileSpectatorNucleons=-999 #targetSpectatorNucleons=-999 #NNcollisions=-999 + Collision 985 projectile=B+ Ekin[MeV]=19997.7 direction=(0.923938,0.245825,0.293103) material=G4_He + --> #secondaries=6 impactParameter[fm]=1.74485 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=3 #NNcollisions=1 + Collision 986 projectile=anti_B0 Ekin[MeV]=17444.7 direction=(0.599987,0.623224,0.501606) material=G4_W + --> #secondaries=54 impactParameter[fm]=1.84004 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=177 #NNcollisions=1 + Collision 987 projectile=xi_c+ Ekin[MeV]=29098.1 direction=(0.280328,0.526773,0.80245) material=G4_Pb + --> #secondaries=76 impactParameter[fm]=4.26652 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=203 #NNcollisions=2 + Collision 988 projectile=anti_lambda Ekin[MeV]=20823 direction=(0.918419,0.36192,0.159753) material=G4_He + --> #secondaries=12 impactParameter[fm]=1.03013 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=2 + Collision 989 projectile=anti_xi0 Ekin[MeV]=12807.2 direction=(0.211521,0.457927,0.863459) material=G4_He + --> #secondaries=9 impactParameter[fm]=0.838447 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=1 + Collision 990 projectile=anti_B0 Ekin[MeV]=27580.9 direction=(0.529235,0.497695,0.687175) material=G4_Cu + --> #secondaries=30 impactParameter[fm]=1.18611 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=59 #NNcollisions=1 + Collision 991 projectile=anti_B0 Ekin[MeV]=29466.8 direction=(0.139003,0.99004,0.0223467) material=G4_Al + --> #secondaries=14 impactParameter[fm]=0.972048 #projectileSpectatorNucleons=-1 #targetSpectatorNucleons=26 #NNcollisions=1 + Collision 992 projectile=sigma+ Ekin[MeV]=28188.8 direction=(0.923399,0.381578,0.0416272) material=G4_Be + --> #secondaries=15 impactParameter[fm]=1.94068 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=8 #NNcollisions=1 + Collision 993 projectile=lambda Ekin[MeV]=26544.2 direction=(0.914527,0.340964,0.217677) material=G4_Fe + --> #secondaries=26 impactParameter[fm]=3.67179 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=52 #NNcollisions=2 + Collision 994 projectile=anti_hyperH4 Ekin[MeV]=9027.45 direction=(0.477922,0.663883,0.575196) material=G4_Fe + --> #secondaries=32 impactParameter[fm]=3.54543 #projectileSpectatorNucleons=1 #targetSpectatorNucleons=55 #NNcollisions=3 + Collision 995 projectile=omega_b- Ekin[MeV]=17361.5 direction=(0.393349,0.792379,0.466274) material=G4_Pb + --> #secondaries=50 impactParameter[fm]=2.06432 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=204 #NNcollisions=3 + Collision 996 projectile=anti_hyperalpha Ekin[MeV]=8093.02 direction=(0.0986285,0.89419,0.436689) material=G4_He + --> #secondaries=6 impactParameter[fm]=4.06445 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=3 #NNcollisions=0 + Collision 997 projectile=triton Ekin[MeV]=20438 direction=(0.536757,0.820816,0.195327) material=G4_He + --> #secondaries=13 impactParameter[fm]=1.14306 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=2 #NNcollisions=3 + Collision 998 projectile=anti_lambda Ekin[MeV]=11209.9 direction=(0.739098,0.642186,0.203304) material=G4_C + --> #secondaries=10 impactParameter[fm]=3.37723 #projectileSpectatorNucleons=0 #targetSpectatorNucleons=12 #NNcollisions=1 + Collision 999 projectile=anti_hyperalpha Ekin[MeV]=29218.7 direction=(0.272314,0.215328,0.937805) material=G4_He + --> #secondaries=9 impactParameter[fm]=3.12567 #projectileSpectatorNucleons=3 #targetSpectatorNucleons=2 #NNcollisions=1 - Final random number = 0.465773 + Final random number = 0.458 === End of test === diff --git a/examples/extended/hadronic/Hadr10/History b/examples/extended/hadronic/Hadr10/History index ef1987cee8c..be3897eddcc 100644 --- a/examples/extended/hadronic/Hadr10/History +++ b/examples/extended/hadronic/Hadr10/History @@ -6,14 +6,14 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-02-03 Gabriele Cosmo (exhadr10-V11-00-02) +## 2023-02-03 Gabriele Cosmo (exhadr10-V11-01-01) - DetectorMessenger: define "/mydet/update" command also for PreInit state and call "/run/initialize" after geometry update in hadr10.in script, to avoid run-time warning messages in output: "Start re-initialization because Geometry has been modified since last Run." repeated many times in MT mode. -## 2023-02-01 Alberto Ribon (exhadr10-V11-00-01) +## 2023-01-30 Alberto Ribon (exhadr10-V11-01-00) - SteppingAction: protect the argument of acos to be within -1 and +1 (in system testing we have seen recently cases of crashes caused by the argument of acos being outside that interval). diff --git a/examples/extended/hadronic/Hadr10/hadr10.in b/examples/extended/hadronic/Hadr10/hadr10.in index 706d043d205..9af89165639 100644 --- a/examples/extended/hadronic/Hadr10/hadr10.in +++ b/examples/extended/hadronic/Hadr10/hadr10.in @@ -3,6 +3,7 @@ # /run/verbose 1 /event/verbose 0 +#======================= LAYER =========================== # #--- "Beam pipe" : 2-mm-thick layer of Beryllium ###/mydet/targetMaterial G4_Be diff --git a/examples/extended/hadronic/Hadr10/hadr10.out b/examples/extended/hadronic/Hadr10/hadr10.out index a8f58e9a27c..fd41eb8966a 100644 --- a/examples/extended/hadronic/Hadr10/hadr10.out +++ b/examples/extended/hadronic/Hadr10/hadr10.out @@ -1,6 +1,6 @@ ===================================================== - Initial seed = 1686680522 + Initial seed = 1687914918 ===================================================== Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Forcing G4RunManager type... @@ -16,7 +16,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -30,6 +30,7 @@ G4PhysListFactory::GetReferencePhysList EMoption= 0 <<< Geant4 Physics List simulation engine: FTFP_BERT + G4ChordFinder: stepperDriverId: 2 ------ DetectorConstruction::PrintParameters() ------ @@ -78,20 +79,20 @@ Index : 1 used in the geometry : Yes ### Run 0 starts. ### Run 0 starts. - Event#=0 t[ns]=0.0928108 r[mm]=27.8238 deltaR[mum]=3.82503e-06 deltaEkin[MeV]=7.42218 deltaAngle(deg)=0.0040657 - Event#=1000 t[ns]=0.120501 r[mm]=36.1252 deltaR[mum]=9.80798e-06 deltaEkin[MeV]=7.24955 deltaAngle(deg)=0.00481286 - Event#=2000 t[ns]=0.0047063 r[mm]=1.41091 deltaR[mum]=6.68576e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.000193175 - Event#=3000 t[ns]=0.0149536 r[mm]=4.48296 deltaR[mum]=2.14406e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000613785 - Event#=4000 t[ns]=0.0182474 r[mm]=5.4704 deltaR[mum]=3.89573e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000748981 - Event#=5000 t[ns]=0.0123706 r[mm]=3.70858 deltaR[mum]=1.21387e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000507761 - Event#=6000 t[ns]=0.0486999 r[mm]=14.5998 deltaR[mum]=6.97938e-07 deltaEkin[MeV]=1.9852 deltaAngle(deg)=0.00198423 - Event#=7000 t[ns]=0.0125469 r[mm]=3.76144 deltaR[mum]=1.26654e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000514999 - Event#=8000 t[ns]=0.0263924 r[mm]=7.91219 deltaR[mum]=1.17875e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.0010833 - Event#=9000 t[ns]=0.0148737 r[mm]=4.459 deltaR[mum]=2.10987e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000610505 + Event#=0 t[ns]=0.171822 r[mm]=51.5107 deltaR[mum]=2.70414e-05 deltaEkin[MeV]=6.75387 deltaAngle(deg)=0.00720774 + Event#=1000 t[ns]=0.202189 r[mm]=60.6145 deltaR[mum]=5.32149e-05 deltaEkin[MeV]=8.11527 deltaAngle(deg)=0.00858464 + Event#=2000 t[ns]=0.0661462 r[mm]=19.83 deltaR[mum]=1.42874e-06 deltaEkin[MeV]=3.65505 deltaAngle(deg)=0.00255994 + Event#=3000 t[ns]=0.212374 r[mm]=63.6676 deltaR[mum]=5.19583e-05 deltaEkin[MeV]=12.8881 deltaAngle(deg)=0.0079361 + Event#=4000 t[ns]=0.085278 r[mm]=25.5655 deltaR[mum]=2.81891e-06 deltaEkin[MeV]=5.90831 deltaAngle(deg)=0.00397225 + Event#=5000 t[ns]=0.21496 r[mm]=64.443 deltaR[mum]=6.96652e-05 deltaEkin[MeV]=13.8032 deltaAngle(deg)=0.00927955 + Event#=6000 t[ns]=0.0522647 r[mm]=15.6685 deltaR[mum]=8.17881e-07 deltaEkin[MeV]=2.30017 deltaAngle(deg)=0.00252967 + Event#=7000 t[ns]=0.0406779 r[mm]=12.1948 deltaR[mum]=4.62624e-07 deltaEkin[MeV]=1.19604 deltaAngle(deg)=0.00173229 + Event#=8000 t[ns]=0.0947978 r[mm]=28.4195 deltaR[mum]=3.82829e-06 deltaEkin[MeV]=6.59336 deltaAngle(deg)=0.00386639 + Event#=9000 t[ns]=0.0258071 r[mm]=7.73673 deltaR[mum]=1.10208e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.00105928 Run terminated. Run Summary Number of events processed : 10000 - User=0.180000s Real=0.176319s Sys=0.000000s + User=0.150000s Real=0.147347s Sys=0.000000s ============ Run::printInfo() =============== RunID = 0 @@ -113,40 +114,40 @@ Run Summary (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=9.65867e-06 mean=0.0808637 max=0.696659 - decay R [mm] : min=0.00289558 mean=24.2422 max=208.852 - decay X [mm] : min=0.00289558 mean=24.2422 max=208.852 - decay Y [mm] : min=1.00187e-11 mean=0.00163365 max=0.0529288 - decay Z [mm] : min=-0.00610477 mean=-1.57708e-06 max=0.00333378 - Delta decay R [mm] : min=-3.46945e-18 mean=2.00558e-08 max=2.09766e-06 - deflection angle [deg] : min=0 mean=0.00334666 max=0.0286424 - Delta Ekin [MeV] : min=0 mean=4.51923 max=527.248 - decay Ekin [GeV] : min=499.473 mean=499.995 max=500 - decay Px [GeV] : min=501.246 mean=501.769 max=501.774 - decay Py [GeV] : min=-0.0117059 mean=0.0290732 max=0.250791 - decay Pz [GeV] : min=-0.0439489 mean=3.80223e-05 max=0.0578608 - decay Etot violation [MeV] : min=-9.38884e-06 mean=5.5174e-06 max=2.61723e-05 - decay Px violation [MeV] : min=-9.38884e-06 mean=5.51742e-06 max=2.61724e-05 - decay Py violation [MeV] : min=-1.09819e-09 mean=4.52281e-10 max=6.96599e-09 - decay Pz violation [MeV] : min=-9.2631e-10 mean=7.99439e-13 max=8.55252e-10 + decay T [ns] : min=1.29833e-05 mean=0.0817239 max=0.950628 + decay R [mm] : min=0.00389226 mean=24.5001 max=284.989 + decay X [mm] : min=0.00389226 mean=24.5001 max=284.989 + decay Y [mm] : min=1.81029e-11 mean=0.00167795 max=0.085965 + decay Z [mm] : min=-0.00884098 mean=-4.13323e-07 max=0.00362517 + Delta decay R [mm] : min=-1.73472e-18 mean=2.15476e-08 max=5.20424e-06 + deflection angle [deg] : min=0 mean=0.00339054 max=0.0365868 + Delta Ekin [MeV] : min=0 mean=5.0651 max=4619.83 + decay Ekin [GeV] : min=495.38 mean=499.995 max=500 + decay Px [GeV] : min=497.154 mean=501.769 max=501.774 + decay Py [GeV] : min=-0.00992534 mean=0.0294533 max=0.319969 + decay Pz [GeV] : min=-0.0463096 mean=5.9008e-05 max=0.0396556 + decay Etot violation [MeV] : min=-9.3889e-06 mean=5.62193e-06 max=2.8405e-05 + decay Px violation [MeV] : min=-9.38884e-06 mean=5.62195e-06 max=2.8405e-05 + decay Py violation [MeV] : min=-1.55593e-09 mean=4.61667e-10 max=1.27436e-08 + decay Pz violation [MeV] : min=-1.63321e-09 mean=1.32286e-12 max=1.09844e-09 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.40972e-05 , 0.0615967 (mean=0.0100322) - maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 4.86727e-09 , 4.86727e-09 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.40972e-05 , 0.0615967 (mean=0.0100822) + maxBeta_deltaMax{1,2} = 3.33067e-16 , 5.55112e-16 + maxGamma_deltaMax{1,2,3} = 0 , 4.73744e-09 , 4.73744e-09 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 8.52651e-11 (mean=5.39129e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=5.42608e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -17.895 (mean=-0.203456) (#above threshold = 82) - maxOverestimated_mc_truth_rPos_delta [mum] = 40.2559 (mean=0.1816) (#above threshold = 367) - minUnderestimated_rDeltaPos [mum] = -17.8945 (mean=-0.203436) (#above threshold = 82) - maxOverestimated_rDeltaPos [mum] = 40.2564 (mean=0.18162) (#above threshold = 367) + minUnderestimated_mc_truth_rPos_delta [mum] = -210.142 (mean=-0.228148) (#above threshold = 89) + maxOverestimated_mc_truth_rPos_delta [mum] = 50.067 (mean=0.179621) (#above threshold = 406) + minUnderestimated_rDeltaPos [mum] = -210.142 (mean=-0.228126) (#above threshold = 89) + maxOverestimated_rDeltaPos [mum] = 50.0677 (mean=0.179643) (#above threshold = 406) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0325112 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0339725 ============================================= @@ -170,20 +171,20 @@ Index : 1 used in the geometry : Yes ### Run 1 starts. ### Run 1 starts. - Event#=0 t[ns]=0.177731 r[mm]=53.282 deltaR[mum]=4.46726e-05 deltaEkin[MeV]=8.55281 deltaAngle(deg)=0.00810021 - Event#=1000 t[ns]=0.0345851 r[mm]=10.3683 deltaR[mum]=2.99536e-07 deltaEkin[MeV]=0.433094 deltaAngle(deg)=0.00142393 - Event#=2000 t[ns]=0.0457267 r[mm]=13.7084 deltaR[mum]=1.14816e-06 deltaEkin[MeV]=18.3623 deltaAngle(deg)=0.00186326 - Event#=3000 t[ns]=0.0581915 r[mm]=17.4453 deltaR[mum]=1.09697e-06 deltaEkin[MeV]=4.36038 deltaAngle(deg)=0.00196242 - Event#=4000 t[ns]=0.0703176 r[mm]=21.0805 deltaR[mum]=1.6696e-06 deltaEkin[MeV]=4.55124 deltaAngle(deg)=0.00301497 - Event#=5000 t[ns]=0.028663 r[mm]=8.59289 deltaR[mum]=1.50992e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.0011765 - Event#=6000 t[ns]=0.0101911 r[mm]=3.05518 deltaR[mum]=6.78657e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000418301 - Event#=7000 t[ns]=0.0886734 r[mm]=26.5834 deltaR[mum]=3.15155e-06 deltaEkin[MeV]=6.2162 deltaAngle(deg)=0.00400527 - Event#=8000 t[ns]=0.220654 r[mm]=66.1501 deltaR[mum]=4.56789e-05 deltaEkin[MeV]=6.52618 deltaAngle(deg)=0.00832141 - Event#=9000 t[ns]=0.152359 r[mm]=45.6759 deltaR[mum]=2.68206e-05 deltaEkin[MeV]=7.0475 deltaAngle(deg)=0.00724207 + Event#=0 t[ns]=0.0983111 r[mm]=29.4727 deltaR[mum]=4.35407e-06 deltaEkin[MeV]=6.40859 deltaAngle(deg)=0.00320806 + Event#=1000 t[ns]=0.0281032 r[mm]=8.42506 deltaR[mum]=1.42315e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.00115352 + Event#=2000 t[ns]=0.0281343 r[mm]=8.43439 deltaR[mum]=1.42789e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.0011548 + Event#=3000 t[ns]=0.112323 r[mm]=33.6735 deltaR[mum]=2.06378e-05 deltaEkin[MeV]=32.4925 deltaAngle(deg)=0.00532748 + Event#=4000 t[ns]=0.215446 r[mm]=64.5886 deltaR[mum]=5.63494e-05 deltaEkin[MeV]=8.42403 deltaAngle(deg)=0.00872685 + Event#=5000 t[ns]=0.0668819 r[mm]=20.0506 deltaR[mum]=3.11915e-06 deltaEkin[MeV]=10.9786 deltaAngle(deg)=0.00360404 + Event#=6000 t[ns]=0.0838047 r[mm]=25.1239 deltaR[mum]=2.68349e-06 deltaEkin[MeV]=5.97615 deltaAngle(deg)=0.00370663 + Event#=7000 t[ns]=0.0417396 r[mm]=12.5131 deltaR[mum]=4.918e-07 deltaEkin[MeV]=1.17207 deltaAngle(deg)=0.00188823 + Event#=8000 t[ns]=0.0158723 r[mm]=4.75836 deltaR[mum]=2.5639e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000651492 + Event#=9000 t[ns]=0.0169217 r[mm]=5.07298 deltaR[mum]=3.10676e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000694568 Run terminated. Run Summary Number of events processed : 10000 - User=0.170000s Real=0.175422s Sys=0.000000s + User=0.150000s Real=0.148904s Sys=0.000000s ============ Run::printInfo() =============== RunID = 1 @@ -205,40 +206,40 @@ Run Summary (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=2.91552e-07 mean=0.0824313 max=0.865715 - decay R [mm] : min=8.74046e-05 mean=24.7121 max=259.533 - decay X [mm] : min=8.74046e-05 mean=24.7121 max=259.533 - decay Y [mm] : min=-0.0739068 mean=-0.00169357 max=-9.12875e-15 - decay Z [mm] : min=-0.00514943 mean=-2.36793e-06 max=0.0063526 - Delta decay R [mm] : min=-3.46945e-18 mean=2.20402e-08 max=4.02056e-06 - deflection angle [deg] : min=0 mean=0.00341144 max=0.0339347 - Delta Ekin [MeV] : min=0 mean=4.75654 max=779.186 - decay Ekin [GeV] : min=499.221 mean=499.995 max=500 - decay Px [GeV] : min=500.995 mean=501.769 max=501.774 - decay Py [GeV] : min=-0.297096 mean=-0.0296422 max=0.00560865 - decay Pz [GeV] : min=-0.0339487 mean=-6.5316e-05 max=0.0539951 - decay Etot violation [MeV] : min=-9.38884e-06 mean=5.64113e-06 max=2.5801e-05 - decay Px violation [MeV] : min=-9.38878e-06 mean=5.64115e-06 max=2.58009e-05 - decay Py violation [MeV] : min=-9.37035e-09 mean=-4.58638e-10 max=1.12585e-09 - decay Pz violation [MeV] : min=-7.19416e-10 mean=-7.51709e-13 max=1.41161e-09 + decay T [ns] : min=1.07597e-05 mean=0.0814981 max=1.04515 + decay R [mm] : min=0.00322565 mean=24.4324 max=313.326 + decay X [mm] : min=0.00322565 mean=24.4324 max=313.326 + decay Y [mm] : min=-0.117952 mean=-0.00163607 max=-1.24331e-11 + decay Z [mm] : min=-0.00629936 mean=4.6671e-07 max=0.00371469 + Delta decay R [mm] : min=-3.46945e-18 mean=2.07371e-08 max=7.26151e-06 + deflection angle [deg] : min=0 mean=0.00337173 max=0.0429438 + Delta Ekin [MeV] : min=0 mean=4.988 max=1439.6 + decay Ekin [GeV] : min=498.56 mean=499.995 max=500 + decay Px [GeV] : min=500.334 mean=501.769 max=501.774 + decay Py [GeV] : min=-0.376088 mean=-0.0292934 max=0.00289415 + decay Pz [GeV] : min=-0.0393284 mean=2.92978e-05 max=0.040609 + decay Etot violation [MeV] : min=-9.79105e-06 mean=5.64017e-06 max=2.48138e-05 + decay Px violation [MeV] : min=-9.79099e-06 mean=5.64019e-06 max=2.48139e-05 + decay Py violation [MeV] : min=-9.02321e-09 mean=-4.50298e-10 max=1.02381e-09 + decay Pz violation [MeV] : min=-9.8796e-10 mean=7.23554e-13 max=1.02849e-09 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.40972e-05 , 0.0615967 (mean=0.010145) - maxBeta_deltaMax{1,2} = 3.33067e-16 , 5.55112e-16 - maxGamma_deltaMax{1,2,3} = 0 , 4.84937e-09 , 4.84937e-09 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.40972e-05 , 0.0615967 (mean=0.00995867) + maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 + maxGamma_deltaMax{1,2,3} = 0 , 4.77371e-09 , 4.77371e-09 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 1.13687e-10 (mean=5.49654e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 1.13687e-10 (mean=5.44011e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -39.0816 (mean=-0.21281) (#above threshold = 92) - maxOverestimated_mc_truth_rPos_delta [mum] = 64.9637 (mean=0.184995) (#above threshold = 380) - minUnderestimated_rDeltaPos [mum] = -39.0811 (mean=-0.212788) (#above threshold = 92) - maxOverestimated_rDeltaPos [mum] = 64.9646 (mean=0.185017) (#above threshold = 380) + minUnderestimated_mc_truth_rPos_delta [mum] = -79.1022 (mean=-0.224622) (#above threshold = 89) + maxOverestimated_mc_truth_rPos_delta [mum] = 245.465 (mean=0.21075) (#above threshold = 387) + minUnderestimated_rDeltaPos [mum] = -79.0986 (mean=-0.224601) (#above threshold = 89) + maxOverestimated_rDeltaPos [mum] = 245.469 (mean=0.21077) (#above threshold = 387) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0650557 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0377791 ============================================= @@ -262,20 +263,20 @@ Index : 1 used in the geometry : Yes ### Run 2 starts. ### Run 2 starts. - Event#=0 t[ns]=0.700565 r[mm]=210.023 deltaR[mum]=0.00211727 deltaEkin[MeV]=8.5207 deltaAngle(deg)=0.0273701 - Event#=1000 t[ns]=1.21516 r[mm]=364.293 deltaR[mum]=0.0116126 deltaEkin[MeV]=7.88155 deltaAngle(deg)=0.0500707 - Event#=2000 t[ns]=0.747048 r[mm]=223.958 deltaR[mum]=0.00266498 deltaEkin[MeV]=7.34469 deltaAngle(deg)=0.0308836 - Event#=3000 t[ns]=0.0711811 r[mm]=21.3394 deltaR[mum]=1.72274e-06 deltaEkin[MeV]=4.11686 deltaAngle(deg)=0.00340874 - Event#=4000 t[ns]=0.0181258 r[mm]=5.43395 deltaR[mum]=3.81695e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000743854 - Event#=5000 t[ns]=0.0553728 r[mm]=16.6002 deltaR[mum]=1.26046e-06 deltaEkin[MeV]=3.50182 deltaAngle(deg)=0.00260492 - Event#=6000 t[ns]=0.0109297 r[mm]=3.27662 deltaR[mum]=8.36842e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000448537 - Event#=7000 t[ns]=0.638074 r[mm]=191.288 deltaR[mum]=0.00163252 deltaEkin[MeV]=10.1701 deltaAngle(deg)=0.0257368 - Event#=8000 t[ns]=0.106005 r[mm]=31.7794 deltaR[mum]=9.11755e-06 deltaEkin[MeV]=11.1209 deltaAngle(deg)=0.00415471 - Event#=9000 t[ns]=0.0462191 r[mm]=13.856 deltaR[mum]=6.20627e-07 deltaEkin[MeV]=1.78812 deltaAngle(deg)=0.0018559 + Event#=0 t[ns]=0.23827 r[mm]=71.4311 deltaR[mum]=8.62435e-05 deltaEkin[MeV]=8.05107 deltaAngle(deg)=0.0102465 + Event#=1000 t[ns]=0.209943 r[mm]=62.9388 deltaR[mum]=4.317e-05 deltaEkin[MeV]=6.94629 deltaAngle(deg)=0.00843818 + Event#=2000 t[ns]=0.161458 r[mm]=48.4037 deltaR[mum]=2.20582e-05 deltaEkin[MeV]=7.10039 deltaAngle(deg)=0.00651734 + Event#=3000 t[ns]=0.314323 r[mm]=94.231 deltaR[mum]=0.00015121 deltaEkin[MeV]=7.41743 deltaAngle(deg)=0.0132484 + Event#=4000 t[ns]=0.0240231 r[mm]=7.20188 deltaR[mum]=8.88623e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000985866 + Event#=5000 t[ns]=0.278471 r[mm]=83.4829 deltaR[mum]=0.000121988 deltaEkin[MeV]=8.8931 deltaAngle(deg)=0.0116408 + Event#=6000 t[ns]=0.262628 r[mm]=78.7333 deltaR[mum]=7.14214e-05 deltaEkin[MeV]=7.57878 deltaAngle(deg)=0.00938017 + Event#=7000 t[ns]=0.358467 r[mm]=107.465 deltaR[mum]=0.000289191 deltaEkin[MeV]=7.37614 deltaAngle(deg)=0.0144885 + Event#=8000 t[ns]=0.490015 r[mm]=146.902 deltaR[mum]=0.000692684 deltaEkin[MeV]=6.6562 deltaAngle(deg)=0.0193032 + Event#=9000 t[ns]=0.311932 r[mm]=93.5141 deltaR[mum]=0.00013554 deltaEkin[MeV]=6.53243 deltaAngle(deg)=0.0126789 Run terminated. Run Summary Number of events processed : 10000 - User=0.370000s Real=0.372593s Sys=0.000000s + User=0.320000s Real=0.328711s Sys=0.000000s ============ Run::printInfo() =============== RunID = 2 @@ -292,45 +293,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9786 + # Decays = 9777 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=3.82098e-06 mean=0.280966 max=2.74862 - decay R [mm] : min=0.00114549 mean=84.2309 max=824.009 - decay X [mm] : min=0.00114549 mean=84.2309 max=824.008 - decay Y [mm] : min=-0.812662 mean=-0.0173566 max=0.00575161 - decay Z [mm] : min=-0.0565498 mean=-1.26412e-05 max=0.030015 - Delta decay R [mm] : min=0 mean=8.60687e-07 max=0.000133313 - deflection angle [deg] : min=8.53688e-07 mean=0.0115743 max=0.112905 - Delta Ekin [MeV] : min=0 mean=10.3961 max=17177 - decay Ekin [GeV] : min=482.823 mean=499.99 max=500 - decay Px [GeV] : min=484.689 mean=501.856 max=501.866 - decay Py [GeV] : min=-0.989043 mean=-0.101056 max=0.050498 - decay Pz [GeV] : min=-0.178705 mean=-3.64885e-05 max=0.118505 - decay Etot violation [MeV] : min=-8.71846e-06 mean=1.15039e-05 max=2.76922e-05 - decay Px violation [MeV] : min=-8.71852e-06 mean=1.1504e-05 max=2.76924e-05 - decay Py violation [MeV] : min=-3.76111e-08 mean=-2.61494e-09 max=1.28519e-09 - decay Pz violation [MeV] : min=-3.32183e-09 mean=-9.60435e-13 max=3.01161e-09 + decay T [ns] : min=2.45293e-06 mean=0.278418 max=2.72586 + decay R [mm] : min=0.000735365 mean=83.467 max=817.186 + decay X [mm] : min=0.000735365 mean=83.467 max=817.185 + decay Y [mm] : min=-0.82739 mean=-0.0172554 max=0.00886763 + decay Z [mm] : min=-0.0724906 mean=2.55265e-05 max=0.0791993 + Delta decay R [mm] : min=-3.46945e-18 mean=8.58788e-07 max=0.000130714 + deflection angle [deg] : min=8.53688e-07 mean=0.0114825 max=0.114033 + Delta Ekin [MeV] : min=0 mean=8.59206 max=1954.53 + decay Ekin [GeV] : min=498.045 mean=499.991 max=500 + decay Px [GeV] : min=499.912 mean=501.857 max=501.866 + decay Py [GeV] : min=-0.998535 mean=-0.100068 max=0.275496 + decay Pz [GeV] : min=-0.219097 mean=6.95783e-05 max=0.209697 + decay Etot violation [MeV] : min=-8.7184e-06 mean=1.14674e-05 max=2.95287e-05 + decay Px violation [MeV] : min=-8.71852e-06 mean=1.14676e-05 max=2.9529e-05 + decay Py violation [MeV] : min=-2.91741e-08 mean=-2.5889e-09 max=1.0112e-08 + decay Pz violation [MeV] : min=-8.04255e-09 mean=2.01147e-12 max=6.48987e-09 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.0499883 (mean=0.0113152) + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.0499883 (mean=0.0112248) maxBeta_deltaMax{1,2} = 4.44089e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 4.10603e-09 , 4.10603e-09 + maxGamma_deltaMax{1,2,3} = 0 , 4.28071e-09 , 4.28071e-09 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -624.713 (mean=-0.459257) (#above threshold = 194) - maxOverestimated_mc_truth_rPos_delta [mum] = 4826.13 (mean=1.89243) (#above threshold = 3499) - minUnderestimated_rDeltaPos [mum] = -624.644 (mean=-0.458396) (#above threshold = 193) - maxOverestimated_rDeltaPos [mum] = 4826.2 (mean=1.8933) (#above threshold = 3499) + minUnderestimated_mc_truth_rPos_delta [mum] = -108.67 (mean=-0.40762) (#above threshold = 178) + maxOverestimated_mc_truth_rPos_delta [mum] = 686.276 (mean=1.40725) (#above threshold = 3448) + minUnderestimated_rDeltaPos [mum] = -108.668 (mean=-0.406761) (#above threshold = 178) + maxOverestimated_rDeltaPos [mum] = 686.332 (mean=1.40811) (#above threshold = 3448) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.130057 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.108162 ============================================= @@ -354,20 +355,20 @@ Index : 1 used in the geometry : Yes ### Run 3 starts. ### Run 3 starts. - Event#=0 t[ns]=0.486905 r[mm]=145.97 deltaR[mum]=0.000829514 deltaEkin[MeV]=7.13454 deltaAngle(deg)=0.0211777 - Event#=1000 t[ns]=0.0317201 r[mm]=9.50938 deltaR[mum]=2.21508e-07 deltaEkin[MeV]=0.458966 deltaAngle(deg)=0.00135174 - Event#=2000 t[ns]=0.0141543 r[mm]=4.24332 deltaR[mum]=1.81766e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000580868 - Event#=3000 t[ns]=0.125515 r[mm]=37.6283 deltaR[mum]=1.27321e-05 deltaEkin[MeV]=7.15681 deltaAngle(deg)=0.00548081 - Event#=4000 t[ns]=0.414164 r[mm]=124.162 deltaR[mum]=0.000443322 deltaEkin[MeV]=14.4998 deltaAngle(deg)=0.0161339 - Event#=5000 t[ns]=0.0719969 r[mm]=21.584 deltaR[mum]=6.64745e-06 deltaEkin[MeV]=28.2053 deltaAngle(deg)=0.00351527 - Event#=6000 t[ns]=0.20273 r[mm]=60.7764 deltaR[mum]=4.32587e-05 deltaEkin[MeV]=7.94474 deltaAngle(deg)=0.007668 - Event#=7000 t[ns]=0.667678 r[mm]=200.163 deltaR[mum]=0.0019028 deltaEkin[MeV]=7.24312 deltaAngle(deg)=0.0270884 - Event#=8000 t[ns]=0.0506288 r[mm]=15.178 deltaR[mum]=7.61094e-07 deltaEkin[MeV]=2.12569 deltaAngle(deg)=0.00219449 - Event#=9000 t[ns]=0.39614 r[mm]=118.759 deltaR[mum]=0.000409926 deltaEkin[MeV]=7.5051 deltaAngle(deg)=0.0164096 + Event#=0 t[ns]=0.123535 r[mm]=37.0346 deltaR[mum]=1.34641e-05 deltaEkin[MeV]=6.97845 deltaAngle(deg)=0.00567484 + Event#=1000 t[ns]=0.0439622 r[mm]=13.1795 deltaR[mum]=5.54243e-07 deltaEkin[MeV]=1.44481 deltaAngle(deg)=0.0017994 + Event#=2000 t[ns]=0.13592 r[mm]=40.7476 deltaR[mum]=1.86141e-05 deltaEkin[MeV]=7.54308 deltaAngle(deg)=0.00596446 + Event#=3000 t[ns]=0.214152 r[mm]=64.2006 deltaR[mum]=6.4921e-05 deltaEkin[MeV]=8.48823 deltaAngle(deg)=0.00932124 + Event#=4000 t[ns]=0.0442974 r[mm]=13.2799 deltaR[mum]=5.63901e-07 deltaEkin[MeV]=1.68347 deltaAngle(deg)=0.0020076 + Event#=5000 t[ns]=0.122182 r[mm]=36.6288 deltaR[mum]=1.45821e-05 deltaEkin[MeV]=7.42189 deltaAngle(deg)=0.00551002 + Event#=6000 t[ns]=0.699096 r[mm]=209.582 deltaR[mum]=0.00221888 deltaEkin[MeV]=19.7611 deltaAngle(deg)=0.0277553 + Event#=7000 t[ns]=0.0892368 r[mm]=26.7523 deltaR[mum]=3.20841e-06 deltaEkin[MeV]=6.25312 deltaAngle(deg)=0.00309364 + Event#=8000 t[ns]=0.239912 r[mm]=71.9234 deltaR[mum]=8.07716e-05 deltaEkin[MeV]=8.82418 deltaAngle(deg)=0.00989763 + Event#=9000 t[ns]=0.105309 r[mm]=31.5706 deltaR[mum]=8.85268e-06 deltaEkin[MeV]=11.538 deltaAngle(deg)=0.00414989 Run terminated. Run Summary Number of events processed : 10000 - User=0.350000s Real=0.352409s Sys=0.000000s + User=0.310000s Real=0.307005s Sys=0.000000s ============ Run::printInfo() =============== RunID = 3 @@ -384,45 +385,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9821 + # Decays = 9809 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=9.58183e-05 mean=0.276666 max=2.65312 - decay R [mm] : min=0.0287254 mean=82.9417 max=795.379 - decay X [mm] : min=0.0287254 mean=82.9417 max=795.379 - decay Y [mm] : min=-0.0109853 mean=0.0169847 max=0.770502 - decay Z [mm] : min=-0.0411726 mean=-2.55e-06 max=0.0421817 - Delta decay R [mm] : min=1.04083e-17 mean=8.3741e-07 max=0.000120311 - deflection angle [deg] : min=4.00415e-06 mean=0.0113944 max=0.109972 - Delta Ekin [MeV] : min=0 mean=8.88203 max=5599.7 - decay Ekin [GeV] : min=494.4 mean=499.991 max=500 - decay Px [GeV] : min=496.266 mean=501.857 max=501.866 - decay Py [GeV] : min=-0.0873908 mean=0.0994577 max=0.963341 - decay Pz [GeV] : min=-0.146023 mean=-4.65696e-05 max=0.105031 - decay Etot violation [MeV] : min=-8.71834e-06 mean=1.14905e-05 max=2.81091e-05 - decay Px violation [MeV] : min=-8.71834e-06 mean=1.14907e-05 max=2.81093e-05 - decay Py violation [MeV] : min=-1.76709e-09 mean=2.5775e-09 max=3.3273e-08 - decay Pz violation [MeV] : min=-4.52499e-09 mean=-1.74044e-12 max=4.42688e-09 + decay T [ns] : min=1.77486e-05 mean=0.276263 max=3.07336 + decay R [mm] : min=0.00532087 mean=82.8209 max=921.362 + decay X [mm] : min=0.00532087 mean=82.8208 max=921.362 + decay Y [mm] : min=-0.00380925 mean=0.0168955 max=1.01487 + decay Z [mm] : min=-0.0430043 mean=2.0172e-06 max=0.0789931 + Delta decay R [mm] : min=0 mean=8.4264e-07 max=0.000185556 + deflection angle [deg] : min=0 mean=0.01139 max=0.126126 + Delta Ekin [MeV] : min=0 mean=9.95667 max=16414 + decay Ekin [GeV] : min=483.586 mean=499.99 max=500 + decay Px [GeV] : min=485.452 mean=501.856 max=501.866 + decay Py [GeV] : min=-0.0696069 mean=0.099388 max=1.10484 + decay Pz [GeV] : min=-0.12647 mean=4.59063e-05 max=0.115342 + decay Etot violation [MeV] : min=-8.71834e-06 mean=1.15026e-05 max=3.07901e-05 + decay Px violation [MeV] : min=-8.71834e-06 mean=1.15027e-05 max=3.07904e-05 + decay Py violation [MeV] : min=-1.80211e-09 mean=2.57415e-09 max=3.07973e-08 + decay Pz violation [MeV] : min=-4.91015e-09 mean=1.83295e-13 max=3.02605e-09 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.0499883 (mean=0.0110968) + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.0499883 (mean=0.0111777) maxBeta_deltaMax{1,2} = 4.44089e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 4.29299e-09 , 4.29299e-09 + maxGamma_deltaMax{1,2,3} = 0 , 4.31919e-09 , 4.31919e-09 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -302.304 (mean=-0.424644) (#above threshold = 187) - maxOverestimated_mc_truth_rPos_delta [mum] = 1119.3 (mean=1.41948) (#above threshold = 3498) - minUnderestimated_rDeltaPos [mum] = -302.289 (mean=-0.423807) (#above threshold = 187) - maxOverestimated_rDeltaPos [mum] = 1119.33 (mean=1.42031) (#above threshold = 3499) + minUnderestimated_mc_truth_rPos_delta [mum] = -420.182 (mean=-0.432871) (#above threshold = 155) + maxOverestimated_mc_truth_rPos_delta [mum] = 3519.22 (mean=1.69697) (#above threshold = 3512) + minUnderestimated_rDeltaPos [mum] = -420.132 (mean=-0.432029) (#above threshold = 155) + maxOverestimated_rDeltaPos [mum] = 3519.27 (mean=1.69781) (#above threshold = 3512) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.119096 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.106876 ============================================= @@ -446,20 +447,20 @@ Index : 1 used in the geometry : Yes ### Run 4 starts. ### Run 4 starts. - Event#=0 t[ns]=0.220255 r[mm]=66.0305 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.193565 r[mm]=58.0291 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.0540003 r[mm]=16.1888 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.013878 r[mm]=4.1605 deltaR[mum]=8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.183389 r[mm]=54.9782 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.221377 r[mm]=66.3666 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.0153047 r[mm]=4.58819 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.134331 r[mm]=40.2712 deltaR[mum]=-7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.113946 r[mm]=34.16 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.00560698 r[mm]=1.68092 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=0 t[ns]=0.0792288 r[mm]=23.752 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0182671 r[mm]=5.4763 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.245201 r[mm]=73.5088 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.102851 r[mm]=30.8337 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.31067 r[mm]=93.1358 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0129348 r[mm]=3.87772 deltaR[mum]=4.44089e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.169032 r[mm]=50.6742 deltaR[mum]=0.000368295 deltaEkin[MeV]=0.282231 deltaAngle(deg)=0.0138434 + Event#=7000 t[ns]=0.214412 r[mm]=64.2786 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.0266023 r[mm]=7.97511 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.278426 r[mm]=83.4693 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 Run terminated. Run Summary Number of events processed : 10000 - User=0.180000s Real=0.183967s Sys=0.000000s + User=0.160000s Real=0.169127s Sys=0.000000s ============ Run::printInfo() =============== RunID = 4 @@ -476,43 +477,43 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9839 + # Decays = 9827 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=1.31469e-05 mean=0.110378 max=1.03508 - decay R [mm] : min=0.00394132 mean=33.0902 max=310.306 - decay X [mm] : min=0.00394132 mean=33.0902 max=310.306 - decay Y [mm] : min=-0.0159117 mean=1.70711e-08 max=0.0281757 - decay Z [mm] : min=-0.0186077 mean=-1.42389e-06 max=0.0141135 - Delta decay R [mm] : min=-2.84217e-14 mean=9.23878e-10 max=9.95086e-07 - deflection angle [deg] : min=0 mean=5.52142e-05 max=0.0187015 - Delta Ekin [MeV] : min=0 mean=0.000952472 max=0.515076 - decay Ekin [GeV] : min=499.999 mean=500 max=500 - decay Px [GeV] : min=501.861 mean=501.861 max=501.861 - decay Py [GeV] : min=-0.127766 mean=-3.96709e-05 max=0.16373 - decay Pz [GeV] : min=-0.142291 mean=-2.43766e-05 max=0.134881 - decay Etot violation [MeV] : min=-1.01732e-05 mean=2.92424e-06 max=1.1808e-05 - decay Px violation [MeV] : min=-1.0173e-05 mean=2.92432e-06 max=1.18081e-05 - decay Py violation [MeV] : min=-2.60393e-09 mean=-1.86813e-13 max=1.7306e-09 - decay Pz violation [MeV] : min=-1.08805e-09 mean=6.41007e-13 max=1.89104e-09 + decay T [ns] : min=2.03345e-05 mean=0.109713 max=1.04883 + decay R [mm] : min=0.00609608 mean=32.891 max=314.428 + decay X [mm] : min=0.00609608 mean=32.891 max=314.428 + decay Y [mm] : min=-0.0189224 mean=-1.03329e-07 max=0.0469477 + decay Z [mm] : min=-0.0139472 mean=6.26613e-06 max=0.0248455 + Delta decay R [mm] : min=-2.84217e-14 mean=1.39969e-09 max=5.23239e-06 + deflection angle [deg] : min=0 mean=5.86065e-05 max=0.0569127 + Delta Ekin [MeV] : min=0 mean=0.00145557 max=4.77016 + decay Ekin [GeV] : min=499.995 mean=500 max=500 + decay Px [GeV] : min=501.856 mean=501.861 max=501.861 + decay Py [GeV] : min=-0.125162 mean=3.84728e-05 max=0.282013 + decay Pz [GeV] : min=-0.165927 mean=8.82456e-05 max=0.411123 + decay Etot violation [MeV] : min=-7.42741e-06 mean=2.93265e-06 max=1.15493e-05 + decay Px violation [MeV] : min=-7.42747e-06 mean=2.93274e-06 max=1.15495e-05 + decay Py violation [MeV] : min=-1.53813e-09 mean=1.30226e-13 max=2.69586e-09 + decay Pz violation [MeV] : min=-2.30798e-09 mean=1.88101e-13 max=1.89038e-09 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.54659e-05 , 0.0453235 (mean=0.00380718) + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.54659e-05 , 0.0365001 (mean=0.00382458) maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 - maxGamma_deltaMax{1,2,3} = 0 , 3.33057e-09 , 3.33057e-09 + maxGamma_deltaMax{1,2,3} = 0 , 3.14225e-09 , 3.14225e-09 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=3.6521e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=3.67406e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0244203 (mean=-3.59069e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.0886369 (mean=5.64973e-05) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0234252 (mean=-3.4983e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.089632 (mean=5.74212e-05) (#above threshold = 0) + minUnderestimated_mc_truth_rPos_delta [mum] = -0.274543 (mean=-6.04611e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.231029 (mean=9.39376e-05) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.269311 (mean=-5.90615e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.232414 (mean=9.53373e-05) (#above threshold = 0) --- float instead of double --- fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 ============================================= @@ -538,20 +539,20 @@ Index : 1 used in the geometry : Yes ### Run 5 starts. ### Run 5 starts. - Event#=0 t[ns]=0.0964146 r[mm]=28.9042 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0622608 r[mm]=18.6652 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.0681288 r[mm]=20.4244 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.193357 r[mm]=57.9667 deltaR[mum]=-7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.0565492 r[mm]=16.9529 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.0724846 r[mm]=21.7302 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.00924882 r[mm]=2.77271 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.170388 r[mm]=51.0806 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.285795 r[mm]=85.6787 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.130728 r[mm]=39.1911 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=0 t[ns]=0.0803995 r[mm]=24.103 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0671632 r[mm]=20.1349 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.0482962 r[mm]=14.4787 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.100751 r[mm]=30.2041 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.0765819 r[mm]=22.9585 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0579072 r[mm]=17.36 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.156452 r[mm]=46.9027 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.172774 r[mm]=51.796 deltaR[mum]=1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.105491 r[mm]=31.6252 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.0843191 r[mm]=25.2781 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 Run terminated. Run Summary Number of events processed : 10000 - User=0.180000s Real=0.175680s Sys=0.000000s + User=0.150000s Real=0.152131s Sys=0.010000s ============ Run::printInfo() =============== RunID = 5 @@ -568,45 +569,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9850 + # Decays = 9857 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=6.76159e-06 mean=0.109768 max=0.852031 - decay R [mm] : min=0.00202706 mean=32.9073 max=255.431 - decay X [mm] : min=0.00202706 mean=32.9073 max=255.431 - decay Y [mm] : min=-0.0122519 mean=-1.35837e-06 max=0.0313001 - decay Z [mm] : min=-0.0113711 mean=4.55984e-06 max=0.013398 - Delta decay R [mm] : min=-2.84217e-14 mean=7.96669e-10 max=6.74328e-07 - deflection angle [deg] : min=0 mean=5.3114e-05 max=0.0210939 - Delta Ekin [MeV] : min=0 mean=0.000876205 max=0.655285 + decay T [ns] : min=2.13856e-06 mean=0.108479 max=1.27466 + decay R [mm] : min=0.00064112 mean=32.5209 max=382.13 + decay X [mm] : min=0.00064112 mean=32.5209 max=382.13 + decay Y [mm] : min=-0.010784 mean=2.12858e-06 max=0.0135674 + decay Z [mm] : min=-0.0252046 mean=4.07924e-06 max=0.0398814 + Delta decay R [mm] : min=-2.84217e-14 mean=9.36135e-10 max=8.80233e-07 + deflection angle [deg] : min=0 mean=4.68171e-05 max=0.0262074 + Delta Ekin [MeV] : min=0 mean=0.000867158 max=1.0115 decay Ekin [GeV] : min=499.999 mean=500 max=500 - decay Px [GeV] : min=501.861 mean=501.861 max=501.861 - decay Py [GeV] : min=-0.176693 mean=-7.70752e-05 max=0.130994 - decay Pz [GeV] : min=-0.146738 mean=6.7127e-05 max=0.175829 - decay Etot violation [MeV] : min=-8.66165e-06 mean=2.89975e-06 max=1.30806e-05 - decay Px violation [MeV] : min=-8.66159e-06 mean=2.89984e-06 max=1.30807e-05 - decay Py violation [MeV] : min=-1.71667e-09 mean=1.02282e-13 max=1.52588e-09 - decay Pz violation [MeV] : min=-1.17114e-09 mean=3.67483e-13 max=1.21968e-09 + decay Px [GeV] : min=501.86 mean=501.861 max=501.861 + decay Py [GeV] : min=-0.131203 mean=2.3439e-05 max=0.222225 + decay Pz [GeV] : min=-0.138456 mean=5.71507e-06 max=0.140558 + decay Etot violation [MeV] : min=-9.25484e-06 mean=2.91466e-06 max=1.18553e-05 + decay Px violation [MeV] : min=-9.25484e-06 mean=2.91475e-06 max=1.18552e-05 + decay Py violation [MeV] : min=-2.58123e-09 mean=-7.53999e-13 max=2.53763e-09 + decay Pz violation [MeV] : min=-2.51029e-09 mean=-4.63477e-13 max=1.72373e-09 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.54659e-05 , 0.0453235 (mean=0.0038272) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 3.73831e-09 , 3.73831e-09 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.54659e-05 , 0.0453235 (mean=0.00382518) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 + maxGamma_deltaMax{1,2,3} = 0 , 3.04857e-09 , 3.04857e-09 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=3.66676e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=3.62853e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0238673 (mean=-3.01836e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.079368 (mean=4.97495e-05) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.023193 (mean=-2.9387e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.0799549 (mean=5.05461e-05) (#above threshold = 0) + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0277981 (mean=-3.15426e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.101286 (mean=6.30477e-05) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0270252 (mean=-3.06065e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.102167 (mean=6.39839e-05) (#above threshold = 0) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305203 ============================================= @@ -630,20 +631,20 @@ Index : 1 used in the geometry : Yes ### Run 6 starts. ### Run 6 starts. - Event#=0 t[ns]=0.0747209 r[mm]=22.4006 deltaR[mum]=1.95725e-06 deltaEkin[MeV]=4.73105 deltaAngle(deg)=0.00370252 - Event#=1000 t[ns]=0.270334 r[mm]=81.0436 deltaR[mum]=0.000133058 deltaEkin[MeV]=7.07503 deltaAngle(deg)=0.0120053 - Event#=2000 t[ns]=0.182258 r[mm]=54.639 deltaR[mum]=4.43846e-05 deltaEkin[MeV]=9.51836 deltaAngle(deg)=0.00763155 - Event#=3000 t[ns]=0.162223 r[mm]=48.6329 deltaR[mum]=2.26854e-05 deltaEkin[MeV]=6.66507 deltaAngle(deg)=0.00667739 - Event#=4000 t[ns]=0.0564591 r[mm]=16.9259 deltaR[mum]=9.7506e-07 deltaEkin[MeV]=2.4632 deltaAngle(deg)=0.00201961 - Event#=5000 t[ns]=0.224736 r[mm]=67.3737 deltaR[mum]=6.96061e-05 deltaEkin[MeV]=7.74543 deltaAngle(deg)=0.00928237 - Event#=6000 t[ns]=0.0265274 r[mm]=7.95266 deltaR[mum]=1.19603e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.00108843 - Event#=7000 t[ns]=0.0143715 r[mm]=4.30844 deltaR[mum]=1.90177e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000589667 - Event#=8000 t[ns]=0.0118563 r[mm]=3.55439 deltaR[mum]=1.06786e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000486466 - Event#=9000 t[ns]=0.00663669 r[mm]=1.98962 deltaR[mum]=1.87295e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000272306 + Event#=0 t[ns]=0.163241 r[mm]=48.938 deltaR[mum]=4.20345e-05 deltaEkin[MeV]=7.56504 deltaAngle(deg)=0.00821105 + Event#=1000 t[ns]=0.153051 r[mm]=45.8832 deltaR[mum]=2.0592e-05 deltaEkin[MeV]=6.41432 deltaAngle(deg)=0.00649183 + Event#=2000 t[ns]=0.363359 r[mm]=108.931 deltaR[mum]=0.000299545 deltaEkin[MeV]=7.26971 deltaAngle(deg)=0.0145354 + Event#=3000 t[ns]=0.0583785 r[mm]=17.5013 deltaR[mum]=1.05425e-06 deltaEkin[MeV]=3.61282 deltaAngle(deg)=0.00250039 + Event#=4000 t[ns]=0.218883 r[mm]=65.6191 deltaR[mum]=5.99379e-05 deltaEkin[MeV]=13.9836 deltaAngle(deg)=0.00824821 + Event#=5000 t[ns]=0.358507 r[mm]=107.477 deltaR[mum]=0.000413263 deltaEkin[MeV]=6.86843 deltaAngle(deg)=0.0166546 + Event#=6000 t[ns]=0.00694611 r[mm]=2.08238 deltaR[mum]=2.14762e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000285001 + Event#=7000 t[ns]=0.0887838 r[mm]=26.6165 deltaR[mum]=2.39466e-05 deltaEkin[MeV]=42.7105 deltaAngle(deg)=0.00413186 + Event#=8000 t[ns]=0.0602939 r[mm]=18.0755 deltaR[mum]=1.13811e-06 deltaEkin[MeV]=3.20865 deltaAngle(deg)=0.00233038 + Event#=9000 t[ns]=0.0844454 r[mm]=25.3159 deltaR[mum]=8.10428e-06 deltaEkin[MeV]=16.4245 deltaAngle(deg)=0.0035731 Run terminated. Run Summary Number of events processed : 10000 - User=0.290000s Real=0.293989s Sys=0.000000s + User=0.240000s Real=0.243530s Sys=0.000000s ============ Run::printInfo() =============== RunID = 6 @@ -660,45 +661,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9864 + # Decays = 9878 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=4.31328e-06 mean=0.125286 max=1.1032 - decay R [mm] : min=0.00129308 mean=37.5596 max=330.729 - decay X [mm] : min=0.00129308 mean=37.5596 max=330.729 - decay Y [mm] : min=-0.126916 mean=-0.00369749 max=0.00184229 - decay Z [mm] : min=-0.0131991 mean=-8.30477e-06 max=0.00799689 - Delta decay R [mm] : min=0 mean=8.06999e-08 max=3.14119e-05 - deflection angle [deg] : min=8.53688e-07 mean=0.00518706 max=0.0445536 - Delta Ekin [MeV] : min=0 mean=8.16127 max=19889.9 - decay Ekin [GeV] : min=480.11 mean=499.992 max=500 - decay Px [GeV] : min=482.074 mean=501.956 max=501.964 - decay Py [GeV] : min=-0.390361 mean=-0.045103 max=0.0566181 - decay Pz [GeV] : min=-0.139719 mean=-0.000141808 max=0.0909819 - decay Etot violation [MeV] : min=-1.03295e-05 mean=3.19755e-06 max=1.96049e-05 - decay Px violation [MeV] : min=-1.03294e-05 mean=3.1976e-06 max=1.96049e-05 - decay Py violation [MeV] : min=-6.87828e-09 mean=-3.59447e-10 max=2.63731e-09 - decay Pz violation [MeV] : min=-1.04257e-09 mean=-5.80905e-13 max=2.30858e-09 + decay T [ns] : min=1.64218e-05 mean=0.125937 max=1.20141 + decay R [mm] : min=0.0049231 mean=37.7545 max=360.17 + decay X [mm] : min=0.0049231 mean=37.7545 max=360.17 + decay Y [mm] : min=-0.152255 mean=-0.00373475 max=0.00504079 + decay Z [mm] : min=-0.0223142 mean=-5.76112e-06 max=0.00786437 + Delta decay R [mm] : min=-3.46945e-18 mean=7.90697e-08 max=1.10886e-05 + deflection angle [deg] : min=1.2073e-06 mean=0.00521751 max=0.0488321 + Delta Ekin [MeV] : min=0 mean=7.15783 max=6415.21 + decay Ekin [GeV] : min=493.585 mean=499.993 max=500 + decay Px [GeV] : min=495.549 mean=501.957 max=501.964 + decay Py [GeV] : min=-0.427816 mean=-0.0453475 max=0.130692 + decay Pz [GeV] : min=-0.0896411 mean=-6.36489e-05 max=0.0583481 + decay Etot violation [MeV] : min=-9.44489e-06 mean=3.24188e-06 max=1.74147e-05 + decay Px violation [MeV] : min=-9.44495e-06 mean=3.24193e-06 max=1.74147e-05 + decay Py violation [MeV] : min=-8.14816e-09 mean=-3.72211e-10 max=2.55824e-09 + decay Pz violation [MeV] : min=-1.33349e-09 mean=2.75171e-13 max=1.453e-09 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.86446e-05 , 0.0562266 (mean=0.0120237) - maxBeta_deltaMax{1,2} = 4.44089e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 3.28384e-09 , 3.28384e-09 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.86446e-05 , 0.0484742 (mean=0.0119888) + maxBeta_deltaMax{1,2} = 3.33067e-16 , 5.55112e-16 + maxGamma_deltaMax{1,2,3} = 0 , 3.39435e-09 , 3.39435e-09 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -677.933 (mean=-0.346608) (#above threshold = 121) - maxOverestimated_mc_truth_rPos_delta [mum] = 1965.64 (mean=0.630091) (#above threshold = 1077) - minUnderestimated_rDeltaPos [mum] = -677.901 (mean=-0.346527) (#above threshold = 121) - maxOverestimated_rDeltaPos [mum] = 1965.67 (mean=0.630172) (#above threshold = 1077) + minUnderestimated_mc_truth_rPos_delta [mum] = -182.098 (mean=-0.309576) (#above threshold = 124) + maxOverestimated_mc_truth_rPos_delta [mum] = 344.187 (mean=0.433713) (#above threshold = 1091) + minUnderestimated_rDeltaPos [mum] = -182.093 (mean=-0.309497) (#above threshold = 124) + maxOverestimated_rDeltaPos [mum] = 344.193 (mean=0.433792) (#above threshold = 1091) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0678607 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0659802 ============================================= @@ -722,20 +723,20 @@ Index : 1 used in the geometry : Yes ### Run 7 starts. ### Run 7 starts. - Event#=0 t[ns]=0.147063 r[mm]=44.088 deltaR[mum]=2.77861e-05 deltaEkin[MeV]=8.72543 deltaAngle(deg)=0.00661953 - Event#=1000 t[ns]=0.108336 r[mm]=32.4781 deltaR[mum]=6.33485e-06 deltaEkin[MeV]=8.2449 deltaAngle(deg)=0.0037891 - Event#=2000 t[ns]=0.0480361 r[mm]=14.4007 deltaR[mum]=6.7633e-07 deltaEkin[MeV]=2.48388 deltaAngle(deg)=0.00153032 - Event#=3000 t[ns]=0.127215 r[mm]=38.1377 deltaR[mum]=4.72496e-05 deltaEkin[MeV]=64.2462 deltaAngle(deg)=0.00597096 - Event#=4000 t[ns]=0.142093 r[mm]=42.598 deltaR[mum]=2.33516e-05 deltaEkin[MeV]=7.2175 deltaAngle(deg)=0.00682874 - Event#=5000 t[ns]=0.0493263 r[mm]=14.7875 deltaR[mum]=7.1763e-07 deltaEkin[MeV]=1.92699 deltaAngle(deg)=0.00202523 - Event#=6000 t[ns]=0.0150021 r[mm]=4.49748 deltaR[mum]=2.16334e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.00061554 - Event#=7000 t[ns]=0.197952 r[mm]=59.3441 deltaR[mum]=3.85583e-05 deltaEkin[MeV]=8.79115 deltaAngle(deg)=0.00759623 - Event#=8000 t[ns]=0.205294 r[mm]=61.5451 deltaR[mum]=4.67215e-05 deltaEkin[MeV]=7.84178 deltaAngle(deg)=0.00813662 - Event#=9000 t[ns]=0.103641 r[mm]=31.0706 deltaR[mum]=6.07148e-06 deltaEkin[MeV]=7.06265 deltaAngle(deg)=0.00388992 + Event#=0 t[ns]=0 r[mm]=0 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0476397 r[mm]=14.2819 deltaR[mum]=6.63912e-07 deltaEkin[MeV]=2.2675 deltaAngle(deg)=0.00208777 + Event#=2000 t[ns]=0.286542 r[mm]=85.9024 deltaR[mum]=0.000150422 deltaEkin[MeV]=6.68178 deltaAngle(deg)=0.0123002 + Event#=3000 t[ns]=0.225811 r[mm]=67.696 deltaR[mum]=4.83523e-05 deltaEkin[MeV]=7.28612 deltaAngle(deg)=0.00846898 + Event#=4000 t[ns]=0.09099 r[mm]=27.2779 deltaR[mum]=4.9106e-06 deltaEkin[MeV]=9.19742 deltaAngle(deg)=0.00286516 + Event#=5000 t[ns]=0.0992394 r[mm]=29.751 deltaR[mum]=4.54868e-06 deltaEkin[MeV]=6.79218 deltaAngle(deg)=0.00339499 + Event#=6000 t[ns]=0.161729 r[mm]=48.4849 deltaR[mum]=2.44413e-05 deltaEkin[MeV]=7.21581 deltaAngle(deg)=0.00641372 + Event#=7000 t[ns]=0.0365236 r[mm]=10.9494 deltaR[mum]=3.50937e-07 deltaEkin[MeV]=0.82798 deltaAngle(deg)=0.0017342 + Event#=8000 t[ns]=0.140071 r[mm]=41.9919 deltaR[mum]=1.52009e-05 deltaEkin[MeV]=7.56295 deltaAngle(deg)=0.00569791 + Event#=9000 t[ns]=0.00148082 r[mm]=0.443935 deltaR[mum]=2.08167e-11 deltaEkin[MeV]=0 deltaAngle(deg)=6.07499e-05 Run terminated. Run Summary Number of events processed : 10000 - User=0.290000s Real=0.286957s Sys=0.000000s + User=0.240000s Real=0.240459s Sys=0.000000s ============ Run::printInfo() =============== RunID = 7 @@ -752,45 +753,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9877 + # Decays = 9883 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=5.93182e-05 mean=0.128599 max=1.00382 - decay R [mm] : min=0.017783 mean=38.5527 max=300.934 - decay X [mm] : min=0.017783 mean=38.5527 max=300.934 - decay Y [mm] : min=-0.0031643 mean=0.00386704 max=0.11536 - decay Z [mm] : min=-0.0262195 mean=1.2528e-06 max=0.0127349 - Delta decay R [mm] : min=0 mean=8.12026e-08 max=6.73256e-06 - deflection angle [deg] : min=2.56106e-06 mean=0.00533882 max=0.0638482 - Delta Ekin [MeV] : min=0 mean=6.36569 max=1733.37 - decay Ekin [GeV] : min=498.267 mean=499.994 max=500 - decay Px [GeV] : min=500.231 mean=501.958 max=501.964 - decay Py [GeV] : min=-0.0652731 mean=0.0463259 max=0.373774 - decay Pz [GeV] : min=-0.555591 mean=-1.61686e-05 max=0.296271 - decay Etot violation [MeV] : min=-1.04945e-05 mean=3.20503e-06 max=1.73695e-05 - decay Px violation [MeV] : min=-1.04945e-05 mean=3.20508e-06 max=1.73697e-05 - decay Py violation [MeV] : min=-2.95739e-09 mean=3.70304e-10 max=7.9441e-09 - decay Pz violation [MeV] : min=-2.90561e-09 mean=8.53312e-13 max=6.45372e-09 + decay T [ns] : min=1.92841e-05 mean=0.126531 max=1.2961 + decay R [mm] : min=0.00578118 mean=37.9329 max=388.558 + decay X [mm] : min=0.00578118 mean=37.9329 max=388.558 + decay Y [mm] : min=-0.00900559 mean=0.00384347 max=0.17857 + decay Z [mm] : min=-0.0104935 mean=1.65101e-06 max=0.00957118 + Delta decay R [mm] : min=-3.46945e-18 mean=8.53616e-08 max=1.38766e-05 + deflection angle [deg] : min=1.2073e-06 mean=0.00522551 max=0.0528593 + Delta Ekin [MeV] : min=0 mean=6.48401 max=3738.88 + decay Ekin [GeV] : min=496.261 mean=499.994 max=500 + decay Px [GeV] : min=498.225 mean=501.958 max=501.964 + decay Py [GeV] : min=-0.0960305 mean=0.0454433 max=0.463119 + decay Pz [GeV] : min=-0.108306 mean=-1.51984e-05 max=0.109708 + decay Etot violation [MeV] : min=-1.02859e-05 mean=3.12005e-06 max=1.87549e-05 + decay Px violation [MeV] : min=-1.02858e-05 mean=3.12009e-06 max=1.87549e-05 + decay Py violation [MeV] : min=-4.28275e-09 mean=3.57734e-10 max=6.75476e-09 + decay Pz violation [MeV] : min=-7.3554e-10 mean=5.51834e-14 max=7.45658e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.86446e-05 , 0.0484742 (mean=0.0119959) - maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 3.25426e-09 , 3.25426e-09 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.86446e-05 , 0.0562266 (mean=0.0120421) + maxBeta_deltaMax{1,2} = 3.33067e-16 , 5.55112e-16 + maxGamma_deltaMax{1,2,3} = 0 , 3.37414e-09 , 3.37414e-09 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -35.6838 (mean=-0.288862) (#above threshold = 128) - maxOverestimated_mc_truth_rPos_delta [mum] = 275.421 (mean=0.430893) (#above threshold = 1168) - minUnderestimated_rDeltaPos [mum] = -35.6838 (mean=-0.28878) (#above threshold = 128) - maxOverestimated_rDeltaPos [mum] = 275.426 (mean=0.430974) (#above threshold = 1168) + minUnderestimated_mc_truth_rPos_delta [mum] = -151.948 (mean=-0.297715) (#above threshold = 119) + maxOverestimated_mc_truth_rPos_delta [mum] = 148.458 (mean=0.448918) (#above threshold = 1099) + minUnderestimated_rDeltaPos [mum] = -151.946 (mean=-0.297629) (#above threshold = 119) + maxOverestimated_rDeltaPos [mum] = 148.461 (mean=0.449004) (#above threshold = 1099) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0470179 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0680609 ============================================= @@ -814,20 +815,20 @@ Index : 1 used in the geometry : Yes ### Run 8 starts. ### Run 8 starts. - Event#=0 t[ns]=0.00902245 r[mm]=2.70472 deltaR[mum]=4.6434e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000367768 - Event#=1000 t[ns]=0.128326 r[mm]=38.4691 deltaR[mum]=2.56746e-05 deltaEkin[MeV]=6.68601 deltaAngle(deg)=0.00564234 - Event#=2000 t[ns]=0.235226 r[mm]=70.5153 deltaR[mum]=0.00015844 deltaEkin[MeV]=8.25123 deltaAngle(deg)=0.010779 - Event#=3000 t[ns]=0.351886 r[mm]=105.487 deltaR[mum]=0.000387973 deltaEkin[MeV]=7.19871 deltaAngle(deg)=0.0141153 - Event#=4000 t[ns]=0.334127 r[mm]=100.163 deltaR[mum]=0.00041321 deltaEkin[MeV]=13.257 deltaAngle(deg)=0.0133083 - Event#=5000 t[ns]=0.0269111 r[mm]=8.06729 deltaR[mum]=1.23231e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.00109693 - Event#=6000 t[ns]=0.155924 r[mm]=46.7423 deltaR[mum]=9.984e-05 deltaEkin[MeV]=7.04642 deltaAngle(deg)=0.010233 - Event#=7000 t[ns]=0.0390003 r[mm]=11.6914 deltaR[mum]=4.11482e-07 deltaEkin[MeV]=1.05163 deltaAngle(deg)=0.00180816 - Event#=8000 t[ns]=0.0454244 r[mm]=13.6171 deltaR[mum]=5.88846e-07 deltaEkin[MeV]=1.55841 deltaAngle(deg)=0.00163802 - Event#=9000 t[ns]=0.046116 r[mm]=13.8245 deltaR[mum]=6.09205e-07 deltaEkin[MeV]=1.532 deltaAngle(deg)=0.00212113 + Event#=0 t[ns]=0.0397508 r[mm]=11.9163 deltaR[mum]=4.3141e-07 deltaEkin[MeV]=1.5277 deltaAngle(deg)=0.00173403 + Event#=1000 t[ns]=0.105853 r[mm]=31.7321 deltaR[mum]=4.31452e-05 deltaEkin[MeV]=10.5061 deltaAngle(deg)=0.00653554 + Event#=2000 t[ns]=0.224489 r[mm]=67.2965 deltaR[mum]=0.00013341 deltaEkin[MeV]=7.47728 deltaAngle(deg)=0.00929248 + Event#=3000 t[ns]=0.190234 r[mm]=57.0276 deltaR[mum]=8.68374e-05 deltaEkin[MeV]=8.27503 deltaAngle(deg)=0.00711341 + Event#=4000 t[ns]=0.204704 r[mm]=61.3653 deltaR[mum]=0.000109993 deltaEkin[MeV]=8.25537 deltaAngle(deg)=0.00869669 + Event#=5000 t[ns]=0.0789158 r[mm]=23.6571 deltaR[mum]=2.2393e-06 deltaEkin[MeV]=5.00176 deltaAngle(deg)=0.00282516 + Event#=6000 t[ns]=0.3924 r[mm]=117.632 deltaR[mum]=0.000498527 deltaEkin[MeV]=6.92766 deltaAngle(deg)=0.0162417 + Event#=7000 t[ns]=0.103345 r[mm]=30.9802 deltaR[mum]=8.05212e-06 deltaEkin[MeV]=6.42586 deltaAngle(deg)=0.00410239 + Event#=8000 t[ns]=0.0111437 r[mm]=3.34061 deltaR[mum]=8.74989e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000454232 + Event#=9000 t[ns]=0.1023 r[mm]=30.667 deltaR[mum]=7.96657e-06 deltaEkin[MeV]=6.88218 deltaAngle(deg)=0.00460089 Run terminated. Run Summary Number of events processed : 10000 - User=0.320000s Real=0.329677s Sys=0.000000s + User=0.270000s Real=0.277538s Sys=0.000000s ============ Run::printInfo() =============== RunID = 8 @@ -844,45 +845,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9820 + # Decays = 9823 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=2.93179e-05 mean=0.155054 max=1.48637 - decay R [mm] : min=0.00878881 mean=46.4814 max=445.577 - decay X [mm] : min=0.00878881 mean=46.4814 max=445.577 - decay Y [mm] : min=-0.241124 mean=-0.00552093 max=0.00478037 - decay Z [mm] : min=-0.0368888 mean=-1.27826e-05 max=0.0179186 - Delta decay R [mm] : min=0 mean=1.94215e-07 max=2.15359e-05 - deflection angle [deg] : min=1.2073e-06 mean=0.00637185 max=0.0613115 - Delta Ekin [MeV] : min=0 mean=6.61674 max=772.435 - decay Ekin [GeV] : min=499.228 mean=499.993 max=500 - decay Px [GeV] : min=504.479 mean=505.245 max=505.252 - decay Py [GeV] : min=-0.540621 mean=-0.0557869 max=0.114529 - decay Pz [GeV] : min=-0.195545 mean=-5.70001e-05 max=0.127113 - decay Etot violation [MeV] : min=-1.49052e-06 mean=3.98932e-07 max=2.52225e-06 - decay Px violation [MeV] : min=-1.49052e-06 mean=3.98915e-07 max=2.5222e-06 - decay Py violation [MeV] : min=-1.23583e-09 mean=-5.09421e-11 max=4.9198e-10 - decay Pz violation [MeV] : min=-3.8068e-10 mean=-1.07282e-13 max=2.47638e-10 + decay T [ns] : min=4.30266e-06 mean=0.157864 max=1.48058 + decay R [mm] : min=0.00128984 mean=47.3239 max=443.841 + decay X [mm] : min=0.00128984 mean=47.3239 max=443.841 + decay Y [mm] : min=-0.229874 mean=-0.00569593 max=0.00551668 + decay Z [mm] : min=-0.027372 mean=-2.98546e-06 max=0.0249561 + Delta decay R [mm] : min=2.1684e-19 mean=2.09296e-07 max=2.10796e-05 + deflection angle [deg] : min=0 mean=0.00648613 max=0.0598113 + Delta Ekin [MeV] : min=0 mean=7.09383 max=2214.84 + decay Ekin [GeV] : min=497.785 mean=499.993 max=500 + decay Px [GeV] : min=503.037 mean=505.245 max=505.252 + decay Py [GeV] : min=-0.52748 mean=-0.0567943 max=0.0833954 + decay Pz [GeV] : min=-0.195781 mean=-6.05727e-05 max=0.139494 + decay Etot violation [MeV] : min=-1.84524e-06 mean=4.0891e-07 max=2.53151e-06 + decay Px violation [MeV] : min=-1.84524e-06 mean=4.08893e-07 max=2.53151e-06 + decay Py violation [MeV] : min=-1.48424e-09 mean=-5.27115e-11 max=6.18741e-10 + decay Pz violation [MeV] : min=-3.29777e-10 mean=-8.3982e-14 max=2.3249e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.0218188 (mean=0.00447522) - maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.76286e-10 , 1.76286e-10 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.0218188 (mean=0.00446266) + maxBeta_deltaMax{1,2} = 4.44089e-16 , 5.55112e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.68299e-10 , 1.68299e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 1.7053e-10 (mean=1.02282e-11) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 1.7053e-10 (mean=1.06175e-11) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -38.8775 (mean=-0.307064) (#above threshold = 143) - maxOverestimated_mc_truth_rPos_delta [mum] = 76.0652 (mean=0.523762) (#above threshold = 1602) - minUnderestimated_rDeltaPos [mum] = -38.8757 (mean=-0.30687) (#above threshold = 143) - maxOverestimated_rDeltaPos [mum] = 76.0735 (mean=0.523956) (#above threshold = 1602) + minUnderestimated_mc_truth_rPos_delta [mum] = -118.507 (mean=-0.328366) (#above threshold = 142) + maxOverestimated_mc_truth_rPos_delta [mum] = 114.433 (mean=0.595867) (#above threshold = 1638) + minUnderestimated_rDeltaPos [mum] = -118.495 (mean=-0.328156) (#above threshold = 142) + maxOverestimated_rDeltaPos [mum] = 114.449 (mean=0.596076) (#above threshold = 1639) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0563219 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0755217 ============================================= @@ -906,20 +907,20 @@ Index : 1 used in the geometry : Yes ### Run 9 starts. ### Run 9 starts. - Event#=0 t[ns]=0.66509 r[mm]=199.378 deltaR[mum]=0.0020757 deltaEkin[MeV]=7.15438 deltaAngle(deg)=0.0269153 - Event#=1000 t[ns]=0.0408323 r[mm]=12.2405 deltaR[mum]=9.57092e-07 deltaEkin[MeV]=2.06657 deltaAngle(deg)=0.00178923 - Event#=2000 t[ns]=0.946342 r[mm]=283.691 deltaR[mum]=0.00597712 deltaEkin[MeV]=7.93341 deltaAngle(deg)=0.0397338 - Event#=3000 t[ns]=0.0125366 r[mm]=3.75816 deltaR[mum]=1.24585e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000511007 - Event#=4000 t[ns]=0.0953239 r[mm]=28.5758 deltaR[mum]=9.46719e-06 deltaEkin[MeV]=8.52307 deltaAngle(deg)=0.0039016 - Event#=5000 t[ns]=0.372458 r[mm]=111.654 deltaR[mum]=0.000590533 deltaEkin[MeV]=13.1575 deltaAngle(deg)=0.0156097 - Event#=6000 t[ns]=0.0598889 r[mm]=17.9533 deltaR[mum]=3.29983e-06 deltaEkin[MeV]=3.9099 deltaAngle(deg)=0.00278039 - Event#=7000 t[ns]=0.174987 r[mm]=52.4568 deltaR[mum]=8.53455e-05 deltaEkin[MeV]=8.61151 deltaAngle(deg)=0.0077276 - Event#=8000 t[ns]=0.348058 r[mm]=104.34 deltaR[mum]=0.000370147 deltaEkin[MeV]=7.9866 deltaAngle(deg)=0.0141563 - Event#=9000 t[ns]=0.319767 r[mm]=95.8586 deltaR[mum]=0.000292696 deltaEkin[MeV]=6.88166 deltaAngle(deg)=0.0136692 + Event#=0 t[ns]=0.00836396 r[mm]=2.50731 deltaR[mum]=3.69971e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000340926 + Event#=1000 t[ns]=0.141623 r[mm]=42.4551 deltaR[mum]=4.66011e-05 deltaEkin[MeV]=7.55229 deltaAngle(deg)=0.00719875 + Event#=2000 t[ns]=0.251346 r[mm]=75.3475 deltaR[mum]=0.000148887 deltaEkin[MeV]=6.84089 deltaAngle(deg)=0.0099727 + Event#=3000 t[ns]=0.0412668 r[mm]=12.3708 deltaR[mum]=3.06759e-06 deltaEkin[MeV]=5.08929 deltaAngle(deg)=0.00162446 + Event#=4000 t[ns]=0.0962214 r[mm]=28.8449 deltaR[mum]=3.94506e-06 deltaEkin[MeV]=7.07096 deltaAngle(deg)=0.00476842 + Event#=5000 t[ns]=0.186602 r[mm]=55.9387 deltaR[mum]=7.27107e-05 deltaEkin[MeV]=7.28457 deltaAngle(deg)=0.00793187 + Event#=6000 t[ns]=0.0722942 r[mm]=21.6721 deltaR[mum]=1.03841e-05 deltaEkin[MeV]=7.52303 deltaAngle(deg)=0.00306817 + Event#=7000 t[ns]=0.1226 r[mm]=36.7525 deltaR[mum]=1.99986e-05 deltaEkin[MeV]=6.86992 deltaAngle(deg)=0.00465643 + Event#=8000 t[ns]=0.0394587 r[mm]=11.8288 deltaR[mum]=4.23636e-07 deltaEkin[MeV]=0.909989 deltaAngle(deg)=0.00190654 + Event#=9000 t[ns]=0.177397 r[mm]=53.1793 deltaR[mum]=9.2864e-05 deltaEkin[MeV]=7.69197 deltaAngle(deg)=0.00871118 Run terminated. Run Summary Number of events processed : 10000 - User=0.320000s Real=0.317638s Sys=0.000000s + User=0.300000s Real=0.299230s Sys=0.000000s ============ Run::printInfo() =============== RunID = 9 @@ -936,45 +937,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9840 + # Decays = 9795 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=3.96463e-05 mean=0.157876 max=1.48532 - decay R [mm] : min=0.011885 mean=47.3274 max=445.262 - decay X [mm] : min=0.011885 mean=47.3274 max=445.262 - decay Y [mm] : min=-0.0032279 mean=0.0056909 max=0.241207 - decay Z [mm] : min=-0.0315938 mean=2.6878e-06 max=0.0259969 - Delta decay R [mm] : min=-1.73472e-18 mean=2.0877e-07 max=3.0622e-05 - deflection angle [deg] : min=1.47863e-06 mean=0.0064802 max=0.0613344 - Delta Ekin [MeV] : min=0 mean=7.46046 max=4582.55 - decay Ekin [GeV] : min=495.417 mean=499.993 max=500 - decay Px [GeV] : min=500.669 mean=505.244 max=505.252 - decay Py [GeV] : min=-0.0718595 mean=0.0567005 max=0.54091 - decay Pz [GeV] : min=-0.143474 mean=7.52333e-05 max=0.142006 - decay Etot violation [MeV] : min=-1.43377e-06 mean=3.97786e-07 max=2.6701e-06 - decay Px violation [MeV] : min=-1.43365e-06 mean=3.9777e-07 max=2.67016e-06 - decay Py violation [MeV] : min=-6.16609e-10 mean=5.24738e-11 max=1.34412e-09 - decay Pz violation [MeV] : min=-3.09086e-10 mean=-1.52936e-14 max=2.42494e-10 + decay T [ns] : min=5.30562e-05 mean=0.157172 max=2.09221 + decay R [mm] : min=0.015905 mean=47.1165 max=627.195 + decay X [mm] : min=0.015905 mean=47.1165 max=627.194 + decay Y [mm] : min=-0.00311156 mean=0.00577637 max=0.472652 + decay Z [mm] : min=-0.0109918 mean=-8.84764e-06 max=0.0127765 + Delta decay R [mm] : min=0 mean=2.20136e-07 max=5.90324e-05 + deflection angle [deg] : min=2.0911e-06 mean=0.00645418 max=0.0858296 + Delta Ekin [MeV] : min=0 mean=7.13567 max=2012.99 + decay Ekin [GeV] : min=497.987 mean=499.993 max=500 + decay Px [GeV] : min=503.239 mean=505.245 max=505.252 + decay Py [GeV] : min=-0.11613 mean=0.0564612 max=0.756935 + decay Pz [GeV] : min=-0.125058 mean=-4.90153e-06 max=0.234793 + decay Etot violation [MeV] : min=-1.52702e-06 mean=3.93414e-07 max=2.55893e-06 + decay Px violation [MeV] : min=-1.5269e-06 mean=3.93397e-07 max=2.55904e-06 + decay Py violation [MeV] : min=-5.54451e-10 mean=5.08417e-11 max=1.47725e-09 + decay Pz violation [MeV] : min=-1.89658e-10 mean=-8.36134e-14 max=2.4086e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.0218188 (mean=0.00445129) - maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.62075e-10 , 1.62075e-10 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.0247082 (mean=0.00452136) + maxBeta_deltaMax{1,2} = 4.44089e-16 , 5.55112e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.67248e-10 , 1.67248e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 1.13687e-10 (mean=1.04395e-11) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 1.7053e-10 (mean=1.04149e-11) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -142.81 (mean=-0.335994) (#above threshold = 139) - maxOverestimated_mc_truth_rPos_delta [mum] = 278.551 (mean=0.602683) (#above threshold = 1679) - minUnderestimated_rDeltaPos [mum] = -142.779 (mean=-0.335785) (#above threshold = 139) - maxOverestimated_rDeltaPos [mum] = 278.582 (mean=0.602892) (#above threshold = 1679) + minUnderestimated_mc_truth_rPos_delta [mum] = -82.6878 (mean=-0.325271) (#above threshold = 117) + maxOverestimated_mc_truth_rPos_delta [mum] = 299.772 (mean=0.580975) (#above threshold = 1576) + minUnderestimated_rDeltaPos [mum] = -82.6547 (mean=-0.325051) (#above threshold = 117) + maxOverestimated_rDeltaPos [mum] = 299.805 (mean=0.581195) (#above threshold = 1578) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0561262 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0886541 ============================================= @@ -998,20 +999,20 @@ Index : 1 used in the geometry : Yes ### Run 10 starts. ### Run 10 starts. - Event#=0 t[ns]=0.0816078 r[mm]=24.4641 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.182484 r[mm]=54.7044 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.0232024 r[mm]=6.95551 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.0767898 r[mm]=23.0197 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.23616 r[mm]=70.7951 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.195957 r[mm]=58.7433 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.0379741 r[mm]=11.3837 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.0179829 r[mm]=5.39085 deltaR[mum]=8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.346587 r[mm]=103.898 deltaR[mum]=1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.243758 r[mm]=73.0729 deltaR[mum]=1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=0 t[ns]=0.0347341 r[mm]=10.4125 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0860315 r[mm]=25.7902 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.0565715 r[mm]=16.9588 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.0189392 r[mm]=5.67751 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.00393448 r[mm]=1.17946 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0576133 r[mm]=17.2711 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.0782934 r[mm]=23.4705 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.524075 r[mm]=157.105 deltaR[mum]=2.84217e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.0573071 r[mm]=17.1793 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.0477455 r[mm]=14.313 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 Run terminated. Run Summary Number of events processed : 10000 - User=0.180000s Real=0.184774s Sys=0.000000s + User=0.170000s Real=0.165991s Sys=0.000000s ============ Run::printInfo() =============== RunID = 10 @@ -1028,45 +1029,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9845 + # Decays = 9843 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=4.31454e-05 mean=0.144397 max=1.30514 - decay R [mm] : min=0.012934 mean=43.2868 max=391.25 - decay X [mm] : min=0.012934 mean=43.2868 max=391.25 - decay Y [mm] : min=-0.0157599 mean=6.30304e-06 max=0.0433693 - decay Z [mm] : min=-0.0169114 mean=6.22092e-06 max=0.0455282 - Delta decay R [mm] : min=-5.68434e-14 mean=5.76843e-10 max=8.8843e-07 - deflection angle [deg] : min=0 mean=3.55147e-05 max=0.018761 - Delta Ekin [MeV] : min=0 mean=0.000522453 max=0.525386 + decay T [ns] : min=3.14715e-06 mean=0.145101 max=1.55204 + decay R [mm] : min=0.000943439 mean=43.4977 max=465.265 + decay X [mm] : min=0.000943439 mean=43.4977 max=465.265 + decay Y [mm] : min=-0.0237628 mean=-4.53691e-07 max=0.0235304 + decay Z [mm] : min=-0.0175327 mean=6.73968e-06 max=0.026433 + Delta decay R [mm] : min=-5.68434e-14 mean=1.1872e-09 max=1.78982e-06 + deflection angle [deg] : min=0 mean=5.38803e-05 max=0.0291633 + Delta Ekin [MeV] : min=0 mean=0.000999087 max=1.26952 decay Ekin [GeV] : min=499.999 mean=500 max=500 decay Px [GeV] : min=505.251 mean=505.252 max=505.252 - decay Py [GeV] : min=-0.0848709 mean=2.87411e-05 max=0.128902 - decay Pz [GeV] : min=-0.144887 mean=5.32779e-06 max=0.123347 - decay Etot violation [MeV] : min=-1.57626e-06 mean=-1.76813e-07 max=1.1354e-06 - decay Px violation [MeV] : min=-1.57632e-06 mean=-1.76838e-07 max=1.1354e-06 - decay Py violation [MeV] : min=-2.12424e-10 mean=-5.84101e-14 max=1.43757e-10 - decay Pz violation [MeV] : min=-2.02064e-10 mean=-2.47923e-14 max=2.07649e-10 + decay Py [GeV] : min=-0.133328 mean=2.07357e-06 max=0.252959 + decay Pz [GeV] : min=-0.217437 mean=3.67582e-06 max=0.114777 + decay Etot violation [MeV] : min=-2.02673e-06 mean=-1.74735e-07 max=1.34279e-06 + decay Px violation [MeV] : min=-2.02673e-06 mean=-1.74758e-07 max=1.34279e-06 + decay Py violation [MeV] : min=-3.39597e-10 mean=8.31874e-14 max=2.23736e-10 + decay Pz violation [MeV] : min=-4.41233e-10 mean=-1.41287e-13 max=1.43402e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.36424e-05 , 0.0110194 (mean=0.00235553) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 2.22045e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.36495e-10 , 1.36495e-10 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.36424e-05 , 0.0110194 (mean=0.00235939) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.24302e-10 , 1.24302e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0262061 (mean=-1.77273e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.136753 (mean=5.43453e-05) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0253176 (mean=-1.71505e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.137126 (mean=5.49222e-05) (#above threshold = 0) + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0520369 (mean=-3.63379e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.115254 (mean=9.47074e-05) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0502471 (mean=-3.51507e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.11658 (mean=9.58946e-05) (#above threshold = 0) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0307275 ============================================= @@ -1090,20 +1091,20 @@ Index : 1 used in the geometry : Yes ### Run 11 starts. ### Run 11 starts. - Event#=0 t[ns]=0.0962066 r[mm]=28.8404 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0218627 r[mm]=6.55391 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.00850889 r[mm]=2.55076 deltaR[mum]=4.44089e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.0809168 r[mm]=24.2569 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.167983 r[mm]=50.3573 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.22028 r[mm]=66.0345 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.108903 r[mm]=32.6466 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.166694 r[mm]=49.9709 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.130904 r[mm]=39.2418 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.173166 r[mm]=51.9111 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=0 t[ns]=0.121718 r[mm]=36.4882 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0100608 r[mm]=3.01599 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.0659767 r[mm]=19.7782 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.127246 r[mm]=38.1452 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.267893 r[mm]=80.3078 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.00979534 r[mm]=2.93641 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.267117 r[mm]=80.0754 deltaR[mum]=1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.00126165 r[mm]=0.378212 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.32209 r[mm]=96.5548 deltaR[mum]=1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.0233942 r[mm]=7.01303 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 Run terminated. Run Summary Number of events processed : 10000 - User=0.180000s Real=0.181945s Sys=0.000000s + User=0.150000s Real=0.155917s Sys=0.000000s ============ Run::printInfo() =============== RunID = 11 @@ -1120,43 +1121,43 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9845 + # Decays = 9860 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=9.19118e-06 mean=0.144894 max=1.8338 - decay R [mm] : min=0.0027553 mean=43.4358 max=549.729 - decay X [mm] : min=0.0027553 mean=43.4358 max=549.729 - decay Y [mm] : min=-0.0525354 mean=-4.29314e-06 max=0.0196508 - decay Z [mm] : min=-0.0139713 mean=1.04462e-05 max=0.0181475 - Delta decay R [mm] : min=-5.68434e-14 mean=9.72479e-10 max=2.65736e-06 - deflection angle [deg] : min=0 mean=4.77157e-05 max=0.0412601 - Delta Ekin [MeV] : min=0 mean=0.000925108 max=2.54112 - decay Ekin [GeV] : min=499.997 mean=500 max=500 - decay Px [GeV] : min=505.249 mean=505.252 max=505.252 - decay Py [GeV] : min=-0.348036 mean=-3.12253e-05 max=0.0904957 - decay Pz [GeV] : min=-0.151972 mean=6.16103e-05 max=0.106202 - decay Etot violation [MeV] : min=-1.44885e-06 mean=-1.79048e-07 max=1.24256e-06 - decay Px violation [MeV] : min=-1.44896e-06 mean=-1.79073e-07 max=1.24238e-06 - decay Py violation [MeV] : min=-1.79909e-10 mean=1.96438e-14 max=1.9881e-10 - decay Pz violation [MeV] : min=-2.00899e-10 mean=5.36681e-14 max=2.57103e-10 + decay T [ns] : min=2.08906e-06 mean=0.145554 max=1.33194 + decay R [mm] : min=0.00062625 mean=43.6335 max=399.284 + decay X [mm] : min=0.00062625 mean=43.6335 max=399.284 + decay Y [mm] : min=-0.038466 mean=1.62453e-07 max=0.0360999 + decay Z [mm] : min=-0.0267806 mean=-3.68698e-07 max=0.0161233 + Delta decay R [mm] : min=-5.68434e-14 mean=8.94927e-10 max=6.20046e-07 + deflection angle [deg] : min=0 mean=4.7494e-05 max=0.0187083 + Delta Ekin [MeV] : min=0 mean=0.000829101 max=0.522441 + decay Ekin [GeV] : min=499.999 mean=500 max=500 + decay Px [GeV] : min=505.251 mean=505.252 max=505.252 + decay Py [GeV] : min=-0.131179 mean=1.02153e-06 max=0.124993 + decay Pz [GeV] : min=-0.128176 mean=-6.25629e-06 max=0.139603 + decay Etot violation [MeV] : min=-1.45333e-06 mean=-1.77802e-07 max=1.12847e-06 + decay Px violation [MeV] : min=-1.45356e-06 mean=-1.77825e-07 max=1.12847e-06 + decay Py violation [MeV] : min=-1.58138e-10 mean=2.86897e-14 max=1.66494e-10 + decay Pz violation [MeV] : min=-2.91038e-10 mean=5.54689e-15 max=1.94603e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.36424e-05 , 0.0167993 (mean=0.00235946) + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.36424e-05 , 0.0167993 (mean=0.00236582) maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.11555e-10 , 1.11555e-10 + maxGamma_deltaMax{1,2,3} = 0 , 1.54614e-10 , 1.54614e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0584963 (mean=-3.08841e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.383557 (mean=9.45744e-05) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0558389 (mean=-2.99116e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.386214 (mean=9.55469e-05) (#above threshold = 0) + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0149136 (mean=-2.61548e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.0972829 (mean=7.97662e-05) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0144427 (mean=-2.52598e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.0978829 (mean=8.06611e-05) (#above threshold = 0) --- float instead of double --- fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 ============================================= @@ -1182,20 +1183,20 @@ Index : 1 used in the geometry : Yes ### Run 12 starts. ### Run 12 starts. - Event#=0 t[ns]=0.0500172 r[mm]=14.9939 deltaR[mum]=1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0982253 r[mm]=29.4455 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.210299 r[mm]=63.0426 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.379923 r[mm]=113.892 deltaR[mum]=1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.00183418 r[mm]=0.549842 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.00998822 r[mm]=2.99422 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.0237476 r[mm]=7.11895 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.319204 r[mm]=95.6896 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.0958353 r[mm]=28.7291 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.0129129 r[mm]=3.87097 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=0 t[ns]=0.0159427 r[mm]=4.77922 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0582623 r[mm]=17.4656 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.0282811 r[mm]=8.47799 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.0995063 r[mm]=29.8296 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.371596 r[mm]=111.395 deltaR[mum]=1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0768301 r[mm]=23.0318 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.0709508 r[mm]=21.2693 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.271883 r[mm]=81.5038 deltaR[mum]=1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.00181476 r[mm]=0.54402 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.103961 r[mm]=31.165 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 Run terminated. Run Summary Number of events processed : 10000 - User=0.170000s Real=0.173480s Sys=0.000000s + User=0.150000s Real=0.151328s Sys=0.000000s ============ Run::printInfo() =============== RunID = 12 @@ -1212,45 +1213,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9851 + # Decays = 9858 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=1.12467e-07 mean=0.139178 max=1.20757 - decay R [mm] : min=3.37148e-05 mean=41.7221 max=362 - decay X [mm] : min=3.37148e-05 mean=41.7221 max=362 - decay Y [mm] : min=-0.00908181 mean=1.40134e-05 max=0.108537 - decay Z [mm] : min=-0.0175736 mean=2.18043e-06 max=0.0251025 - Delta decay R [mm] : min=-5.68434e-14 mean=9.04734e-10 max=4.096e-06 - deflection angle [deg] : min=0 mean=3.10637e-05 max=0.048982 - Delta Ekin [MeV] : min=0 mean=0.000830245 max=3.5825 - decay Ekin [GeV] : min=499.996 mean=500 max=500 - decay Px [GeV] : min=505.335 mean=505.338 max=505.338 - decay Py [GeV] : min=-0.153525 mean=4.25049e-05 max=0.396908 - decay Pz [GeV] : min=-0.151866 mean=-1.02557e-05 max=0.170687 - decay Etot violation [MeV] : min=-1.32871e-06 mean=2.83098e-08 max=1.22748e-06 - decay Px violation [MeV] : min=-1.32859e-06 mean=2.82885e-08 max=1.22742e-06 - decay Py violation [MeV] : min=-1.42975e-10 mean=-6.76147e-15 max=4.16662e-10 - decay Pz violation [MeV] : min=-2.30841e-10 mean=-4.5606e-14 max=1.79028e-10 + decay T [ns] : min=3.02515e-06 mean=0.140464 max=1.39167 + decay R [mm] : min=0.000906866 mean=42.1077 max=417.187 + decay X [mm] : min=0.000906866 mean=42.1077 max=417.187 + decay Y [mm] : min=-0.0585837 mean=-1.35467e-05 max=0.00592291 + decay Z [mm] : min=-0.00641763 mean=5.04973e-06 max=0.0220389 + Delta decay R [mm] : min=-5.68434e-14 mean=6.97099e-10 max=3.15676e-06 + deflection angle [deg] : min=0 mean=2.52086e-05 max=0.0312464 + Delta Ekin [MeV] : min=0 mean=0.000540785 max=1.45786 + decay Ekin [GeV] : min=499.999 mean=500 max=500 + decay Px [GeV] : min=505.337 mean=505.338 max=505.338 + decay Py [GeV] : min=-0.267527 mean=-6.29066e-05 max=0.147966 + decay Pz [GeV] : min=-0.0772199 mean=2.91224e-05 max=0.0970452 + decay Etot violation [MeV] : min=-1.17515e-06 mean=2.35181e-08 max=1.15926e-06 + decay Px violation [MeV] : min=-1.17527e-06 mean=2.34969e-08 max=1.15932e-06 + decay Py violation [MeV] : min=-9.70815e-11 mean=4.74282e-14 max=1.81785e-10 + decay Pz violation [MeV] : min=-1.43807e-10 mean=-2.3092e-14 max=3.97904e-11 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.45519e-05 , 0.00902037 (mean=0.000500431) + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.45519e-05 , 0.0108821 (mean=0.000499251) maxBeta_deltaMax{1,2} = 1.11022e-16 , 2.22045e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.2335e-10 , 1.2335e-10 + maxGamma_deltaMax{1,2,3} = 0 , 1.27486e-10 , 1.27486e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.1919 (mean=-3.61575e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.409259 (mean=8.61957e-05) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.187804 (mean=-3.52527e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.41104 (mean=8.71004e-05) (#above threshold = 0) + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0740771 (mean=-1.97635e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.331061 (mean=6.63942e-05) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0709203 (mean=-1.90664e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.334217 (mean=6.70913e-05) (#above threshold = 0) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0322985 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 ============================================= @@ -1274,20 +1275,20 @@ Index : 1 used in the geometry : Yes ### Run 13 starts. ### Run 13 starts. - Event#=0 t[ns]=0.0115361 r[mm]=3.45825 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0744778 r[mm]=22.3266 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.00560907 r[mm]=1.68146 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.127557 r[mm]=38.2386 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.309837 r[mm]=92.8815 deltaR[mum]=1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.0687499 r[mm]=20.6095 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.0925618 r[mm]=27.7478 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.273412 r[mm]=81.9621 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.104262 r[mm]=31.2551 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.0612382 r[mm]=18.3577 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=0 t[ns]=0.198436 r[mm]=59.4863 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.00919095 r[mm]=2.75522 deltaR[mum]=4.44089e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.129394 r[mm]=38.789 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.453658 r[mm]=135.996 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.0525915 r[mm]=15.7657 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0914506 r[mm]=27.4147 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.0164315 r[mm]=4.92576 deltaR[mum]=8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.0212998 r[mm]=6.38516 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.20594 r[mm]=61.7357 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.0426919 r[mm]=12.798 deltaR[mum]=1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 Run terminated. Run Summary Number of events processed : 10000 - User=0.160000s Real=0.160860s Sys=0.000000s + User=0.160000s Real=0.162726s Sys=0.000000s ============ Run::printInfo() =============== RunID = 13 @@ -1304,43 +1305,43 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9870 + # Decays = 9846 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=1.2691e-05 mean=0.142772 max=1.10174 - decay R [mm] : min=0.00380445 mean=42.7995 max=330.276 - decay X [mm] : min=0.00380445 mean=42.7995 max=330.276 - decay Y [mm] : min=-0.0130092 mean=4.92825e-06 max=0.0141478 - decay Z [mm] : min=-0.0201602 mean=-3.50997e-06 max=0.0252754 - Delta decay R [mm] : min=-5.68434e-14 mean=5.74074e-10 max=9.80471e-07 - deflection angle [deg] : min=0 mean=2.3799e-05 max=0.0207184 - Delta Ekin [MeV] : min=0 mean=0.000462824 max=0.615194 - decay Ekin [GeV] : min=499.999 mean=500 max=500 + decay T [ns] : min=9.04291e-06 mean=0.143145 max=1.71122 + decay R [mm] : min=0.00271084 mean=42.9114 max=512.981 + decay X [mm] : min=0.00271084 mean=42.9114 max=512.981 + decay Y [mm] : min=-0.00844438 mean=1.54807e-06 max=0.020264 + decay Z [mm] : min=-0.00417116 mean=1.09168e-05 max=0.0257017 + Delta decay R [mm] : min=-2.84217e-14 mean=3.70027e-10 max=6.34545e-07 + deflection angle [deg] : min=0 mean=2.34015e-05 max=0.0173644 + Delta Ekin [MeV] : min=0 mean=0.000369659 max=0.450229 + decay Ekin [GeV] : min=500 mean=500 max=500 decay Px [GeV] : min=505.338 mean=505.338 max=505.338 - decay Py [GeV] : min=-0.110677 mean=8.83955e-05 max=0.177924 - decay Pz [GeV] : min=-0.133681 mean=-2.99479e-05 max=0.105119 - decay Etot violation [MeV] : min=-1.19908e-06 mean=2.6549e-08 max=1.17463e-06 - decay Px violation [MeV] : min=-1.19914e-06 mean=2.65266e-08 max=1.17457e-06 - decay Py violation [MeV] : min=-2.26123e-10 mean=-2.08417e-14 max=1.90965e-10 - decay Pz violation [MeV] : min=-1.42336e-10 mean=-7.32388e-15 max=1.13189e-10 + decay Py [GeV] : min=-0.0993362 mean=-1.96289e-05 max=0.091856 + decay Pz [GeV] : min=-0.152434 mean=3.78373e-05 max=0.134732 + decay Etot violation [MeV] : min=-1.22347e-06 mean=2.68699e-08 max=1.25705e-06 + decay Px violation [MeV] : min=-1.22364e-06 mean=2.68485e-08 max=1.25711e-06 + decay Py violation [MeV] : min=-2.35531e-10 mean=-4.55885e-14 max=1.31479e-10 + decay Pz violation [MeV] : min=-1.29376e-10 mean=6.81186e-15 max=1.00357e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.45519e-05 , 0.0108821 (mean=0.000501158) + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.45519e-05 , 0.00803902 (mean=0.000499271) maxBeta_deltaMax{1,2} = 1.11022e-16 , 2.22045e-16 - maxGamma_deltaMax{1,2,3} = 0 , 9.9817e-11 , 9.9817e-11 + maxGamma_deltaMax{1,2,3} = 0 , 1.08841e-10 , 1.08841e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0267902 (mean=-1.84961e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.0644949 (mean=3.731e-05) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0258097 (mean=-1.7922e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.0651044 (mean=3.78841e-05) (#above threshold = 0) + minUnderestimated_mc_truth_rPos_delta [mum] = -0.015269 (mean=-1.35618e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.0602276 (mean=3.27985e-05) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0146344 (mean=-1.31918e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.0608622 (mean=3.31685e-05) (#above threshold = 0) --- float instead of double --- fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 ============================================= @@ -1366,20 +1367,20 @@ Index : 1 used in the geometry : Yes ### Run 14 starts. ### Run 14 starts. - Event#=0 t[ns]=0.00388377 r[mm]=1.16424 deltaR[mum]=3.69038e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.000157994 - Event#=1000 t[ns]=0.0715634 r[mm]=21.4525 deltaR[mum]=1.71665e-06 deltaEkin[MeV]=4.23182 deltaAngle(deg)=0.00352406 - Event#=2000 t[ns]=0.0500472 r[mm]=15.0026 deltaR[mum]=7.28756e-07 deltaEkin[MeV]=1.92841 deltaAngle(deg)=0.00225842 - Event#=3000 t[ns]=0.00482792 r[mm]=1.44726 deltaR[mum]=7.08766e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.000196406 - Event#=4000 t[ns]=0.0788408 r[mm]=23.634 deltaR[mum]=9.33132e-06 deltaEkin[MeV]=7.56753 deltaAngle(deg)=0.00406692 - Event#=5000 t[ns]=0.0527458 r[mm]=15.8116 deltaR[mum]=1.22603e-05 deltaEkin[MeV]=8.2518 deltaAngle(deg)=0.00205043 - Event#=6000 t[ns]=0.0360142 r[mm]=10.7959 deltaR[mum]=3.31664e-07 deltaEkin[MeV]=0.513637 deltaAngle(deg)=0.00187713 - Event#=7000 t[ns]=0.0760018 r[mm]=22.783 deltaR[mum]=9.84202e-06 deltaEkin[MeV]=7.3875 deltaAngle(deg)=0.00363586 - Event#=8000 t[ns]=0.0067139 r[mm]=2.01262 deltaR[mum]=1.90603e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000273129 - Event#=9000 t[ns]=0.0404417 r[mm]=12.1232 deltaR[mum]=4.48107e-07 deltaEkin[MeV]=1.05951 deltaAngle(deg)=0.00151798 + Event#=0 t[ns]=0.00922114 r[mm]=2.76422 deltaR[mum]=4.93827e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000375126 + Event#=1000 t[ns]=0.00141101 r[mm]=0.422977 deltaR[mum]=1.7597e-11 deltaEkin[MeV]=0 deltaAngle(deg)=5.73942e-05 + Event#=2000 t[ns]=0.048404 r[mm]=14.51 deltaR[mum]=6.76298e-07 deltaEkin[MeV]=1.7754 deltaAngle(deg)=0.00160213 + Event#=3000 t[ns]=0.00546706 r[mm]=1.63886 deltaR[mum]=1.02918e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000222405 + Event#=4000 t[ns]=0.0167641 r[mm]=5.02536 deltaR[mum]=2.96723e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000681983 + Event#=5000 t[ns]=0.0576563 r[mm]=17.2836 deltaR[mum]=1.00653e-06 deltaEkin[MeV]=2.97957 deltaAngle(deg)=0.00261894 + Event#=6000 t[ns]=0.0377376 r[mm]=11.3126 deltaR[mum]=3.76703e-07 deltaEkin[MeV]=0.707476 deltaAngle(deg)=0.00152725 + Event#=7000 t[ns]=0.12402 r[mm]=37.1775 deltaR[mum]=3.46586e-05 deltaEkin[MeV]=8.20161 deltaAngle(deg)=0.00485916 + Event#=8000 t[ns]=0.00707992 r[mm]=2.12234 deltaR[mum]=2.23555e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000288019 + Event#=9000 t[ns]=0.0461072 r[mm]=13.8215 deltaR[mum]=1.27308e-06 deltaEkin[MeV]=2.38914 deltaAngle(deg)=0.00181194 Run terminated. Run Summary Number of events processed : 10000 - User=0.160000s Real=0.157674s Sys=0.000000s + User=0.120000s Real=0.125645s Sys=0.000000s ============ Run::printInfo() =============== RunID = 14 @@ -1396,45 +1397,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9964 + # Decays = 9978 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=1.4183e-06 mean=0.0415426 max=0.356599 - decay R [mm] : min=0.000425162 mean=12.4532 max=106.897 - decay X [mm] : min=0.000425162 mean=12.4532 max=106.897 - decay Y [mm] : min=-0.015133 mean=-0.000442631 max=0.00123586 - decay Z [mm] : min=-0.00179419 mean=2.05147e-07 max=0.00224501 - Delta decay R [mm] : min=-3.46945e-18 mean=8.23829e-09 max=3.0242e-06 - deflection angle [deg] : min=0 mean=0.00171803 max=0.0188031 - Delta Ekin [MeV] : min=0 mean=2.35021 max=293.737 - decay Ekin [GeV] : min=499.706 mean=499.998 max=500 - decay Px [GeV] : min=505.942 mean=506.234 max=506.236 - decay Py [GeV] : min=-0.159567 mean=-0.0149905 max=0.0371857 - decay Pz [GeV] : min=-0.12034 mean=-7.45316e-05 max=0.0673907 - decay Etot violation [MeV] : min=-1.83971e-06 mean=1.4364e-07 max=1.55106e-06 - decay Px violation [MeV] : min=-1.83965e-06 mean=1.4366e-07 max=1.55088e-06 - decay Py violation [MeV] : min=-1.75774e-10 mean=-6.42412e-13 max=2.08516e-10 - decay Pz violation [MeV] : min=-4.2288e-11 mean=2.76336e-14 max=1.34698e-10 + decay T [ns] : min=4.57362e-06 mean=0.0404496 max=0.314857 + decay R [mm] : min=0.00137103 mean=12.1256 max=94.3846 + decay X [mm] : min=0.00137103 mean=12.1256 max=94.3846 + decay Y [mm] : min=-0.0119807 mean=-0.000419887 max=0.000679306 + decay Z [mm] : min=-0.00167665 mean=-7.1178e-07 max=0.0016583 + Delta decay R [mm] : min=-3.46945e-18 mean=8.05795e-09 max=1.0069e-05 + deflection angle [deg] : min=0 mean=0.00166046 max=0.0174987 + Delta Ekin [MeV] : min=0 mean=2.28812 max=992.168 + decay Ekin [GeV] : min=499.008 mean=499.998 max=500 + decay Px [GeV] : min=505.244 mean=506.234 max=506.236 + decay Py [GeV] : min=-0.137253 mean=-0.0144843 max=0.121646 + decay Pz [GeV] : min=-0.0930445 mean=-1.78136e-05 max=0.03968 + decay Etot violation [MeV] : min=-1.62621e-06 mean=1.49411e-07 max=1.39483e-06 + decay Px violation [MeV] : min=-1.62626e-06 mean=1.49432e-07 max=1.395e-06 + decay Py violation [MeV] : min=-1.22952e-10 mean=-1.02856e-12 max=1.86816e-10 + decay Pz violation [MeV] : min=-8.61888e-11 mean=3.48086e-14 max=5.53442e-11 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.0178006 (mean=0.0031448) - maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.00954e-10 , 1.00954e-10 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.0202326 (mean=0.00309479) + maxBeta_deltaMax{1,2} = 4.44089e-16 , 4.44089e-16 + maxGamma_deltaMax{1,2,3} = 0 , 9.5298e-11 , 9.5298e-11 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 4.26326e-11 (mean=2.74279e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 4.26326e-11 (mean=2.71467e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -14.8343 (mean=-0.0969359) (#above threshold = 39) - maxOverestimated_mc_truth_rPos_delta [mum] = 19.4895 (mean=0.0388988) (#above threshold = 42) - minUnderestimated_rDeltaPos [mum] = -14.8325 (mean=-0.0969277) (#above threshold = 39) - maxOverestimated_rDeltaPos [mum] = 19.4925 (mean=0.0389071) (#above threshold = 42) + minUnderestimated_mc_truth_rPos_delta [mum] = -43.3633 (mean=-0.0950448) (#above threshold = 33) + maxOverestimated_mc_truth_rPos_delta [mum] = 65.2071 (mean=0.0394669) (#above threshold = 28) + minUnderestimated_rDeltaPos [mum] = -43.3532 (mean=-0.0950367) (#above threshold = 33) + maxOverestimated_rDeltaPos [mum] = 65.2172 (mean=0.0394749) (#above threshold = 28) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0155099 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.00797069 ============================================= @@ -1458,20 +1459,20 @@ Index : 1 used in the geometry : Yes ### Run 15 starts. ### Run 15 starts. - Event#=0 t[ns]=0.0764648 r[mm]=22.9218 deltaR[mum]=2.04698e-06 deltaEkin[MeV]=4.80856 deltaAngle(deg)=0.00316522 - Event#=1000 t[ns]=0.0902393 r[mm]=27.051 deltaR[mum]=3.25609e-06 deltaEkin[MeV]=6.1413 deltaAngle(deg)=0.00338202 - Event#=2000 t[ns]=0.0659947 r[mm]=19.7832 deltaR[mum]=4.166e-06 deltaEkin[MeV]=4.71449 deltaAngle(deg)=0.00246962 - Event#=3000 t[ns]=0.0036724 r[mm]=1.10087 deltaR[mum]=3.11751e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.0001494 - Event#=4000 t[ns]=0.142277 r[mm]=42.6503 deltaR[mum]=4.1245e-05 deltaEkin[MeV]=7.26967 deltaAngle(deg)=0.0049125 - Event#=5000 t[ns]=0.00517754 r[mm]=1.55207 deltaR[mum]=8.7419e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.000210627 - Event#=6000 t[ns]=0.00416115 r[mm]=1.24739 deltaR[mum]=4.53859e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.000169278 - Event#=7000 t[ns]=0.0203769 r[mm]=6.10838 deltaR[mum]=5.32854e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000828958 - Event#=8000 t[ns]=0.0921168 r[mm]=27.6138 deltaR[mum]=3.45698e-06 deltaEkin[MeV]=6.46793 deltaAngle(deg)=0.00265454 - Event#=9000 t[ns]=0.00434435 r[mm]=1.3023 deltaR[mum]=5.16476e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.000176732 + Event#=0 t[ns]=0.00539593 r[mm]=1.61754 deltaR[mum]=9.88987e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.000219512 + Event#=1000 t[ns]=0.00237443 r[mm]=0.71178 deltaR[mum]=8.43769e-11 deltaEkin[MeV]=0 deltaAngle(deg)=9.65913e-05 + Event#=2000 t[ns]=0.0485459 r[mm]=14.5526 deltaR[mum]=6.80741e-07 deltaEkin[MeV]=2.09585 deltaAngle(deg)=0.00163721 + Event#=3000 t[ns]=0.0136965 r[mm]=4.10579 deltaR[mum]=1.61817e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.00055719 + Event#=4000 t[ns]=0.0146203 r[mm]=4.3827 deltaR[mum]=1.96829e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000594769 + Event#=5000 t[ns]=0.00247331 r[mm]=0.741423 deltaR[mum]=9.52571e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0.000100616 + Event#=6000 t[ns]=0.124304 r[mm]=37.2625 deltaR[mum]=2.84854e-05 deltaEkin[MeV]=7.44185 deltaAngle(deg)=0.00471801 + Event#=7000 t[ns]=0.00858854 r[mm]=2.57458 deltaR[mum]=3.99014e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000349392 + Event#=8000 t[ns]=0.0230008 r[mm]=6.89494 deltaR[mum]=7.66347e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.0009357 + Event#=9000 t[ns]=0.00634675 r[mm]=1.90256 deltaR[mum]=1.61005e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000258192 Run terminated. Run Summary Number of events processed : 10000 - User=0.150000s Real=0.149933s Sys=0.000000s + User=0.140000s Real=0.135581s Sys=0.000000s ============ Run::printInfo() =============== RunID = 15 @@ -1488,45 +1489,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9973 + # Decays = 9960 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=7.1684e-06 mean=0.0408645 max=0.334643 - decay R [mm] : min=0.00214887 mean=12.2499 max=100.316 - decay X [mm] : min=0.00214887 mean=12.2499 max=100.316 - decay Y [mm] : min=-0.000938196 mean=0.00042859 max=0.0131172 - decay Z [mm] : min=-0.00187123 mean=-6.75708e-07 max=0.00117876 - Delta decay R [mm] : min=-3.46945e-18 mean=7.53187e-09 max=4.57514e-06 - deflection angle [deg] : min=0 mean=0.00167908 max=0.0163476 - Delta Ekin [MeV] : min=0 mean=2.1636 max=175.51 - decay Ekin [GeV] : min=499.824 mean=499.998 max=500 - decay Px [GeV] : min=506.06 mean=506.234 max=506.236 - decay Py [GeV] : min=-0.0391753 mean=0.014622 max=0.132239 - decay Pz [GeV] : min=-0.0788728 mean=-1.14614e-05 max=0.0963834 - decay Etot violation [MeV] : min=-1.9985e-06 mean=1.4109e-07 max=1.69472e-06 - decay Px violation [MeV] : min=-1.99879e-06 mean=1.41112e-07 max=1.69472e-06 - decay Py violation [MeV] : min=-2.08829e-10 mean=5.09787e-13 max=2.84018e-10 - decay Pz violation [MeV] : min=-3.98828e-11 mean=1.4704e-14 max=5.59908e-11 + decay T [ns] : min=1.50789e-06 mean=0.0406358 max=0.341973 + decay R [mm] : min=0.000452018 mean=12.1814 max=102.513 + decay X [mm] : min=0.000452018 mean=12.1814 max=102.513 + decay Y [mm] : min=-5.42245e-05 mean=0.000428306 max=0.0138965 + decay Z [mm] : min=-0.00212458 mean=5.26924e-07 max=0.00119687 + Delta decay R [mm] : min=-3.46945e-18 mean=7.47981e-09 max=4.29029e-06 + deflection angle [deg] : min=0 mean=0.00167022 max=0.0146347 + Delta Ekin [MeV] : min=0 mean=2.24421 max=1159.03 + decay Ekin [GeV] : min=498.841 mean=499.998 max=500 + decay Px [GeV] : min=505.077 mean=506.234 max=506.236 + decay Py [GeV] : min=-0.0900662 mean=0.0145452 max=0.129273 + decay Pz [GeV] : min=-0.0734851 mean=2.88037e-08 max=0.0350841 + decay Etot violation [MeV] : min=-1.55589e-06 mean=1.41505e-07 max=1.4964e-06 + decay Px violation [MeV] : min=-1.55607e-06 mean=1.41526e-07 max=1.4964e-06 + decay Py violation [MeV] : min=-1.79753e-10 mean=5.96468e-13 max=1.59517e-10 + decay Pz violation [MeV] : min=-2.82814e-11 mean=-1.2168e-14 max=8.69989e-11 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.0162436 (mean=0.00318653) - maxBeta_deltaMax{1,2} = 4.44089e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 9.69607e-11 , 9.69607e-11 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.0178006 (mean=0.00311302) + maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 + maxGamma_deltaMax{1,2,3} = 0 , 9.72733e-11 , 9.72733e-11 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 2.84217e-11 (mean=2.73936e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 4.26326e-11 (mean=2.69352e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -6.13696 (mean=-0.0896812) (#above threshold = 41) - maxOverestimated_mc_truth_rPos_delta [mum] = 28.6547 (mean=0.0352702) (#above threshold = 35) - minUnderestimated_rDeltaPos [mum] = -6.13238 (mean=-0.0896737) (#above threshold = 41) - maxOverestimated_rDeltaPos [mum] = 28.6593 (mean=0.0352777) (#above threshold = 35) + minUnderestimated_mc_truth_rPos_delta [mum] = -43.6061 (mean=-0.0918663) (#above threshold = 35) + maxOverestimated_mc_truth_rPos_delta [mum] = 27.7979 (mean=0.0351278) (#above threshold = 30) + minUnderestimated_rDeltaPos [mum] = -43.6018 (mean=-0.0918588) (#above threshold = 35) + maxOverestimated_rDeltaPos [mum] = 27.8022 (mean=0.0351353) (#above threshold = 30) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.00811148 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0156044 ============================================= @@ -1550,20 +1551,20 @@ Index : 1 used in the geometry : Yes ### Run 16 starts. ### Run 16 starts. - Event#=0 t[ns]=0.00203719 r[mm]=0.610727 deltaR[mum]=5.40679e-11 deltaEkin[MeV]=0 deltaAngle(deg)=8.3535e-05 - Event#=1000 t[ns]=0.090568 r[mm]=27.1513 deltaR[mum]=3.34326e-06 deltaEkin[MeV]=6.01217 deltaAngle(deg)=0.00371776 - Event#=2000 t[ns]=0.042278 r[mm]=12.6745 deltaR[mum]=5.05736e-07 deltaEkin[MeV]=1.21477 deltaAngle(deg)=0.00174538 - Event#=3000 t[ns]=0.00957145 r[mm]=2.86942 deltaR[mum]=5.61018e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.00039247 - Event#=4000 t[ns]=0.0734873 r[mm]=22.0307 deltaR[mum]=2.52625e-06 deltaEkin[MeV]=4.90507 deltaAngle(deg)=0.00277833 - Event#=5000 t[ns]=0.00370676 r[mm]=1.11125 deltaR[mum]=3.25961e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.000151992 - Event#=6000 t[ns]=0.0549339 r[mm]=16.4686 deltaR[mum]=9.14202e-07 deltaEkin[MeV]=2.37641 deltaAngle(deg)=0.00253609 - Event#=7000 t[ns]=0.0729329 r[mm]=21.8645 deltaR[mum]=0.000219904 deltaEkin[MeV]=5.77787 deltaAngle(deg)=0.018187 - Event#=8000 t[ns]=0.092822 r[mm]=27.8271 deltaR[mum]=4.81965e-06 deltaEkin[MeV]=7.46373 deltaAngle(deg)=0.00377194 - Event#=9000 t[ns]=0.060301 r[mm]=18.0776 deltaR[mum]=1.25333e-06 deltaEkin[MeV]=3.84752 deltaAngle(deg)=0.00180027 + Event#=0 t[ns]=0.0894457 r[mm]=26.8149 deltaR[mum]=3.22477e-06 deltaEkin[MeV]=6.23266 deltaAngle(deg)=0.0038664 + Event#=1000 t[ns]=4.52314e-05 r[mm]=0.0135599 deltaR[mum]=-1.73472e-15 deltaEkin[MeV]=0 deltaAngle(deg)=1.9089e-06 + Event#=2000 t[ns]=0.0228762 r[mm]=6.85804 deltaR[mum]=7.66054e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000938021 + Event#=3000 t[ns]=0.0367899 r[mm]=11.0292 deltaR[mum]=3.57556e-07 deltaEkin[MeV]=0.70004 deltaAngle(deg)=0.00144851 + Event#=4000 t[ns]=0.00524384 r[mm]=1.57205 deltaR[mum]=9.22151e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.000215021 + Event#=5000 t[ns]=0.0127982 r[mm]=3.83676 deltaR[mum]=1.34137e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.00052478 + Event#=6000 t[ns]=0.000696354 r[mm]=0.208759 deltaR[mum]=2.22045e-12 deltaEkin[MeV]=0 deltaAngle(deg)=2.85571e-05 + Event#=7000 t[ns]=0.0191912 r[mm]=5.75333 deltaR[mum]=4.52287e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000786922 + Event#=8000 t[ns]=0.0541211 r[mm]=16.2249 deltaR[mum]=8.83542e-07 deltaEkin[MeV]=2.55074 deltaAngle(deg)=0.00197301 + Event#=9000 t[ns]=0.0394257 r[mm]=11.8194 deltaR[mum]=4.2782e-07 deltaEkin[MeV]=0.90729 deltaAngle(deg)=0.0020791 Run terminated. Run Summary Number of events processed : 10000 - User=0.230000s Real=0.231650s Sys=0.000000s + User=0.200000s Real=0.204319s Sys=0.000000s ============ Run::printInfo() =============== RunID = 16 @@ -1580,45 +1581,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9899 + # Decays = 9901 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=2.71596e-06 mean=0.0429661 max=0.400391 - decay R [mm] : min=0.000814216 mean=12.8808 max=120.033 - decay X [mm] : min=0.000814216 mean=12.8808 max=120.033 - decay Y [mm] : min=-0.0176133 mean=-0.000476184 max=0.0047702 - decay Z [mm] : min=-0.0142582 mean=-1.9795e-06 max=0.00975473 - Delta decay R [mm] : min=-3.46945e-18 mean=4.52066e-09 max=7.04823e-06 - deflection angle [deg] : min=0 mean=0.00180154 max=0.0261201 - Delta Ekin [MeV] : min=0 mean=2.81675 max=2548.57 - decay Ekin [GeV] : min=497.451 mean=499.997 max=500 - decay Px [GeV] : min=499.733 mean=502.278 max=502.281 - decay Py [GeV] : min=-0.228683 mean=-0.0154115 max=0.101338 - decay Pz [GeV] : min=-0.140838 mean=-0.000113862 max=0.132855 - decay Etot violation [MeV] : min=-1.23204e-05 mean=-8.08826e-07 max=8.93837e-06 - decay Px violation [MeV] : min=-1.23203e-05 mean=-8.08816e-07 max=8.93843e-06 - decay Py violation [MeV] : min=-1.13427e-09 mean=4.2949e-11 max=1.63189e-09 - decay Pz violation [MeV] : min=-1.03773e-09 mean=6.06907e-13 max=1.41033e-09 + decay T [ns] : min=5.19836e-06 mean=0.0440142 max=0.453528 + decay R [mm] : min=0.00155841 mean=13.195 max=135.963 + decay X [mm] : min=0.00155841 mean=13.195 max=135.963 + decay Y [mm] : min=-0.0235586 mean=-0.000497047 max=0.0218914 + decay Z [mm] : min=-0.00641872 mean=7.53502e-08 max=0.00876621 + Delta decay R [mm] : min=-3.46945e-18 mean=3.84859e-09 max=1.23308e-06 + deflection angle [deg] : min=0 mean=0.00185267 max=0.019818 + Delta Ekin [MeV] : min=0 mean=2.54755 max=1196.13 + decay Ekin [GeV] : min=498.804 mean=499.997 max=500 + decay Px [GeV] : min=501.085 mean=502.279 max=502.281 + decay Py [GeV] : min=-0.169962 mean=-0.0158502 max=0.171109 + decay Pz [GeV] : min=-0.110801 mean=-1.0931e-05 max=0.148847 + decay Etot violation [MeV] : min=-1.19312e-05 mean=-8.5895e-07 max=8.97271e-06 + decay Px violation [MeV] : min=-1.19313e-05 mean=-8.58937e-07 max=8.97277e-06 + decay Py violation [MeV] : min=-1.07218e-09 mean=4.47177e-11 max=2.16374e-09 + decay Pz violation [MeV] : min=-1.12578e-09 mean=-1.38329e-13 max=8.97472e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.0475902 (mean=0.00983777) + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.0475902 (mean=0.00969406) maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.80864e-09 , 1.80864e-09 + maxGamma_deltaMax{1,2,3} = 0 , 1.69828e-09 , 1.69828e-09 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -46.9982 (mean=-0.108218) (#above threshold = 33) - maxOverestimated_mc_truth_rPos_delta [mum] = 333.279 (mean=0.0725877) (#above threshold = 40) - minUnderestimated_rDeltaPos [mum] = -46.9911 (mean=-0.108213) (#above threshold = 33) - maxOverestimated_rDeltaPos [mum] = 333.286 (mean=0.0725922) (#above threshold = 40) + minUnderestimated_mc_truth_rPos_delta [mum] = -64.4965 (mean=-0.108052) (#above threshold = 40) + maxOverestimated_mc_truth_rPos_delta [mum] = 12.8271 (mean=0.041392) (#above threshold = 38) + minUnderestimated_rDeltaPos [mum] = -64.4965 (mean=-0.108048) (#above threshold = 40) + maxOverestimated_rDeltaPos [mum] = 12.8274 (mean=0.0413959) (#above threshold = 38) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.00797182 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.00886247 ============================================= @@ -1642,20 +1643,20 @@ Index : 1 used in the geometry : Yes ### Run 17 starts. ### Run 17 starts. - Event#=0 t[ns]=0.0854033 r[mm]=25.603 deltaR[mum]=2.82492e-06 deltaEkin[MeV]=5.57778 deltaAngle(deg)=0.00309287 - Event#=1000 t[ns]=0.113361 r[mm]=33.9844 deltaR[mum]=2.46748e-05 deltaEkin[MeV]=34.1699 deltaAngle(deg)=0.00445182 - Event#=2000 t[ns]=0.0231498 r[mm]=6.94007 deltaR[mum]=7.93854e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000949241 - Event#=3000 t[ns]=0.0327332 r[mm]=9.81305 deltaR[mum]=2.48992e-07 deltaEkin[MeV]=0.334804 deltaAngle(deg)=0.00123532 - Event#=4000 t[ns]=0.0217085 r[mm]=6.50798 deltaR[mum]=6.54641e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.00089014 - Event#=5000 t[ns]=0.110892 r[mm]=33.2441 deltaR[mum]=1.20722e-05 deltaEkin[MeV]=8.06228 deltaAngle(deg)=0.00528734 - Event#=6000 t[ns]=0.0935943 r[mm]=28.0586 deltaR[mum]=3.67968e-06 deltaEkin[MeV]=6.79591 deltaAngle(deg)=0.00450044 - Event#=7000 t[ns]=0.0173664 r[mm]=5.20626 deltaR[mum]=3.35154e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000712095 - Event#=8000 t[ns]=0.074467 r[mm]=22.3244 deltaR[mum]=1.9371e-06 deltaEkin[MeV]=4.48926 deltaAngle(deg)=0.00348728 - Event#=9000 t[ns]=0.169345 r[mm]=50.7679 deltaR[mum]=2.9547e-05 deltaEkin[MeV]=7.5816 deltaAngle(deg)=0.00675 + Event#=0 t[ns]=0.0359944 r[mm]=10.7907 deltaR[mum]=3.36447e-07 deltaEkin[MeV]=0.56424 deltaAngle(deg)=0.00107132 + Event#=1000 t[ns]=0.0756691 r[mm]=22.6848 deltaR[mum]=2.02193e-06 deltaEkin[MeV]=4.74742 deltaAngle(deg)=0.00247159 + Event#=2000 t[ns]=0.0209055 r[mm]=6.26725 deltaR[mum]=5.84643e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000857215 + Event#=3000 t[ns]=0.0488663 r[mm]=14.6496 deltaR[mum]=7.01856e-07 deltaEkin[MeV]=1.94464 deltaAngle(deg)=0.00217373 + Event#=4000 t[ns]=0.0978338 r[mm]=29.3295 deltaR[mum]=4.80223e-06 deltaEkin[MeV]=7.58587 deltaAngle(deg)=0.00259196 + Event#=5000 t[ns]=0.0120977 r[mm]=3.62678 deltaR[mum]=1.13287e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000496059 + Event#=6000 t[ns]=0.00605419 r[mm]=1.81498 deltaR[mum]=1.41975e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000248247 + Event#=7000 t[ns]=0.0125669 r[mm]=3.76743 deltaR[mum]=1.27001e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000515297 + Event#=8000 t[ns]=0.084449 r[mm]=25.3169 deltaR[mum]=4.00204e-06 deltaEkin[MeV]=6.99678 deltaAngle(deg)=0.00395137 + Event#=9000 t[ns]=0.0602626 r[mm]=18.0661 deltaR[mum]=2.32237e-06 deltaEkin[MeV]=5.74345 deltaAngle(deg)=0.00269594 Run terminated. Run Summary Number of events processed : 10000 - User=0.220000s Real=0.220768s Sys=0.000000s + User=0.200000s Real=0.205061s Sys=0.000000s ============ Run::printInfo() =============== RunID = 17 @@ -1672,45 +1673,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9916 + # Decays = 9905 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=1.8784e-06 mean=0.0437345 max=0.413853 - decay R [mm] : min=0.000563124 mean=13.1111 max=124.069 - decay X [mm] : min=0.000563124 mean=13.1111 max=124.069 - decay Y [mm] : min=-0.0299661 mean=0.000493561 max=0.0234905 - decay Z [mm] : min=-0.0128423 mean=-1.11474e-06 max=0.0101137 - Delta decay R [mm] : min=-1.73472e-18 mean=4.33305e-09 max=1.72574e-06 - deflection angle [deg] : min=0 mean=0.00184815 max=0.0273836 - Delta Ekin [MeV] : min=0 mean=2.48865 max=604.564 - decay Ekin [GeV] : min=499.395 mean=499.998 max=500 - decay Px [GeV] : min=501.677 mean=502.279 max=502.281 - decay Py [GeV] : min=-0.193383 mean=0.0157251 max=0.239805 - decay Pz [GeV] : min=-0.153496 mean=-1.8057e-05 max=0.153456 - decay Etot violation [MeV] : min=-1.25223e-05 mean=-8.3124e-07 max=8.95886e-06 - decay Px violation [MeV] : min=-1.25223e-05 mean=-8.31227e-07 max=8.95903e-06 - decay Py violation [MeV] : min=-1.61884e-09 mean=-4.24749e-11 max=1.69038e-09 - decay Pz violation [MeV] : min=-7.09079e-10 mean=2.41457e-13 max=1.47186e-09 + decay T [ns] : min=4.10639e-06 mean=0.0436471 max=0.512239 + decay R [mm] : min=0.00123105 mean=13.0849 max=153.564 + decay X [mm] : min=0.00123105 mean=13.0849 max=153.564 + decay Y [mm] : min=-0.00383431 mean=0.000493259 max=0.026249 + decay Z [mm] : min=-0.00699639 mean=-3.05051e-06 max=0.00446093 + Delta decay R [mm] : min=-3.46945e-18 mean=3.95999e-09 max=8.60203e-07 + deflection angle [deg] : min=0 mean=0.00183796 max=0.0392551 + Delta Ekin [MeV] : min=0 mean=3.43549 max=9168.3 + decay Ekin [GeV] : min=490.832 mean=499.997 max=500 + decay Px [GeV] : min=493.113 mean=502.278 max=502.281 + decay Py [GeV] : min=-0.0702218 mean=0.0157527 max=0.176756 + decay Pz [GeV] : min=-0.339199 mean=-7.76964e-05 max=0.128186 + decay Etot violation [MeV] : min=-1.12514e-05 mean=-8.17292e-07 max=1.06819e-05 + decay Px violation [MeV] : min=-1.12514e-05 mean=-8.1728e-07 max=1.06819e-05 + decay Py violation [MeV] : min=-1.74791e-09 mean=-4.34488e-11 max=2.20011e-09 + decay Pz violation [MeV] : min=-7.90578e-10 mean=5.7831e-13 max=1.65414e-09 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.0542641 (mean=0.00975343) + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.09184e-05 , 0.0409168 (mean=0.00972262) maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.82303e-09 , 1.82303e-09 + maxGamma_deltaMax{1,2,3} = 0 , 1.88282e-09 , 1.88282e-09 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -11.5541 (mean=-0.102466) (#above threshold = 35) - maxOverestimated_mc_truth_rPos_delta [mum] = 34.2894 (mean=0.0473665) (#above threshold = 50) - minUnderestimated_rDeltaPos [mum] = -11.5539 (mean=-0.102462) (#above threshold = 35) - maxOverestimated_rDeltaPos [mum] = 34.2903 (mean=0.0473709) (#above threshold = 50) + minUnderestimated_mc_truth_rPos_delta [mum] = -340.259 (mean=-0.140217) (#above threshold = 43) + maxOverestimated_mc_truth_rPos_delta [mum] = 39.317 (mean=0.0475609) (#above threshold = 47) + minUnderestimated_rDeltaPos [mum] = -340.258 (mean=-0.140213) (#above threshold = 43) + maxOverestimated_rDeltaPos [mum] = 39.3179 (mean=0.0475649) (#above threshold = 47) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0154645 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0161057 ============================================= @@ -1734,20 +1735,20 @@ Index : 1 used in the geometry : Yes ### Run 18 starts. ### Run 18 starts. - Event#=0 t[ns]=0.183301 r[mm]=54.9514 deltaR[mum]=4.36119e-05 deltaEkin[MeV]=7.38397 deltaAngle(deg)=0.00783811 - Event#=1000 t[ns]=0.00830211 r[mm]=2.48888 deltaR[mum]=3.6593e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000340298 - Event#=2000 t[ns]=0.091325 r[mm]=27.3782 deltaR[mum]=4.74231e-06 deltaEkin[MeV]=8.64271 deltaAngle(deg)=0.00323019 - Event#=3000 t[ns]=0.0677095 r[mm]=20.2985 deltaR[mum]=1.87652e-06 deltaEkin[MeV]=7.59369 deltaAngle(deg)=0.00189185 - Event#=4000 t[ns]=0.0744526 r[mm]=22.3201 deltaR[mum]=1.9347e-06 deltaEkin[MeV]=4.88755 deltaAngle(deg)=0.00378605 - Event#=5000 t[ns]=0.176198 r[mm]=52.8222 deltaR[mum]=3.25137e-05 deltaEkin[MeV]=7.49737 deltaAngle(deg)=0.00729373 - Event#=6000 t[ns]=0.10144 r[mm]=30.4106 deltaR[mum]=6.14532e-06 deltaEkin[MeV]=6.70133 deltaAngle(deg)=0.00497141 - Event#=7000 t[ns]=0.161744 r[mm]=48.4889 deltaR[mum]=2.85042e-05 deltaEkin[MeV]=6.90008 deltaAngle(deg)=0.0071278 - Event#=8000 t[ns]=0.114989 r[mm]=34.4724 deltaR[mum]=8.0666e-06 deltaEkin[MeV]=7.70745 deltaAngle(deg)=0.00333603 - Event#=9000 t[ns]=0.0307068 r[mm]=9.20557 deltaR[mum]=1.926e-07 deltaEkin[MeV]=0.0893246 deltaAngle(deg)=0.0012879 + Event#=0 t[ns]=0.170215 r[mm]=51.0285 deltaR[mum]=3.85461e-05 deltaEkin[MeV]=7.42001 deltaAngle(deg)=0.00740355 + Event#=1000 t[ns]=0.00588235 r[mm]=1.76346 deltaR[mum]=1.30096e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000241112 + Event#=2000 t[ns]=0.00422472 r[mm]=1.26652 deltaR[mum]=4.82059e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.000173168 + Event#=3000 t[ns]=0.0779066 r[mm]=23.3555 deltaR[mum]=4.62371e-06 deltaEkin[MeV]=6.58385 deltaAngle(deg)=0.0035561 + Event#=4000 t[ns]=0.0431649 r[mm]=12.9403 deltaR[mum]=5.30228e-07 deltaEkin[MeV]=1.2636 deltaAngle(deg)=0.0019125 + Event#=5000 t[ns]=0.00958593 r[mm]=2.87376 deltaR[mum]=5.63238e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000392922 + Event#=6000 t[ns]=0.10729 r[mm]=32.1645 deltaR[mum]=7.90919e-06 deltaEkin[MeV]=7.20219 deltaAngle(deg)=0.00480492 + Event#=7000 t[ns]=0.0457327 r[mm]=13.7101 deltaR[mum]=6.04599e-07 deltaEkin[MeV]=1.53008 deltaAngle(deg)=0.00185902 + Event#=8000 t[ns]=0.0385598 r[mm]=11.5598 deltaR[mum]=4.04336e-07 deltaEkin[MeV]=0.928922 deltaAngle(deg)=0.00201793 + Event#=9000 t[ns]=0.123748 r[mm]=37.0982 deltaR[mum]=1.83786e-05 deltaEkin[MeV]=11.3862 deltaAngle(deg)=0.00525589 Run terminated. Run Summary Number of events processed : 10000 - User=0.330000s Real=0.331500s Sys=0.000000s + User=0.290000s Real=0.285153s Sys=0.000000s ============ Run::printInfo() =============== RunID = 18 @@ -1764,45 +1765,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9820 + # Decays = 9826 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=8.06877e-07 mean=0.0885239 max=0.777139 - decay R [mm] : min=0.000241893 mean=26.5385 max=232.978 - decay X [mm] : min=0.000241893 mean=26.5385 max=232.978 - decay Y [mm] : min=-0.0637214 mean=-0.00191847 max=0.0045153 - decay Z [mm] : min=-0.00837843 mean=2.82783e-06 max=0.0245063 - Delta decay R [mm] : min=-3.46945e-18 mean=2.87235e-08 max=3.05178e-06 - deflection angle [deg] : min=0 mean=0.00370044 max=0.0315681 - Delta Ekin [MeV] : min=0 mean=4.92254 max=1005.54 - decay Ekin [GeV] : min=498.994 mean=499.995 max=500 - decay Px [GeV] : min=501.456 mean=502.457 max=502.462 - decay Py [GeV] : min=-0.276858 mean=-0.0318724 max=0.11001 - decay Pz [GeV] : min=-0.164824 mean=-6.43383e-05 max=0.14903 - decay Etot violation [MeV] : min=-9.14605e-06 mean=-1.79343e-07 max=8.02096e-06 - decay Px violation [MeV] : min=-9.146e-06 mean=-1.79371e-07 max=8.02084e-06 - decay Py violation [MeV] : min=-1.8249e-09 mean=3.09286e-11 max=2.93781e-09 - decay Pz violation [MeV] : min=-1.78457e-09 mean=2.96427e-13 max=1.16452e-09 + decay T [ns] : min=7.73292e-06 mean=0.0894249 max=0.802697 + decay R [mm] : min=0.00231824 mean=26.8086 max=240.64 + decay X [mm] : min=0.00231824 mean=26.8086 max=240.64 + decay Y [mm] : min=-0.0695538 mean=-0.00199759 max=0.00378208 + decay Z [mm] : min=-0.0146882 mean=6.77366e-06 max=0.0472109 + Delta decay R [mm] : min=-3.46945e-18 mean=3.20601e-08 max=3.27375e-06 + deflection angle [deg] : min=0 mean=0.00374818 max=0.0367501 + Delta Ekin [MeV] : min=0 mean=4.98158 max=1521.97 + decay Ekin [GeV] : min=498.478 mean=499.995 max=500 + decay Px [GeV] : min=500.94 mean=502.457 max=502.462 + decay Py [GeV] : min=-0.322209 mean=-0.032212 max=0.12409 + decay Pz [GeV] : min=-0.180857 mean=7.64043e-05 max=0.221074 + decay Etot violation [MeV] : min=-1.06276e-05 mean=-1.43916e-07 max=9.28901e-06 + decay Px violation [MeV] : min=-1.06277e-05 mean=-1.43945e-07 max=9.28889e-06 + decay Py violation [MeV] : min=-2.27436e-09 mean=3.02992e-11 max=2.81318e-09 + decay Pz violation [MeV] : min=-1.15419e-09 mean=-3.00881e-13 max=1.05632e-09 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 4.54747e-06 , 0.0404316 (mean=0.00854785) + maxMass_deltaMax{1,2,3} [eV] = 0 , 4.54747e-06 , 0.0404316 (mean=0.00859381) maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.44803e-09 , 1.44803e-09 + maxGamma_deltaMax{1,2,3} = 0 , 1.48515e-09 , 1.48515e-09 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 8.52651e-11 (mean=5.84507e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 8.52651e-11 (mean=5.94999e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -44.8156 (mean=-0.223897) (#above threshold = 81) - maxOverestimated_mc_truth_rPos_delta [mum] = 35.2005 (mean=0.210705) (#above threshold = 469) - minUnderestimated_rDeltaPos [mum] = -44.815 (mean=-0.223869) (#above threshold = 81) - maxOverestimated_rDeltaPos [mum] = 35.2015 (mean=0.210733) (#above threshold = 469) + minUnderestimated_mc_truth_rPos_delta [mum] = -36.6355 (mean=-0.22232) (#above threshold = 99) + maxOverestimated_mc_truth_rPos_delta [mum] = 64.6036 (mean=0.216886) (#above threshold = 493) + minUnderestimated_rDeltaPos [mum] = -36.6339 (mean=-0.222288) (#above threshold = 99) + maxOverestimated_rDeltaPos [mum] = 64.6052 (mean=0.216918) (#above threshold = 493) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0175838 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0324829 ============================================= @@ -1826,20 +1827,20 @@ Index : 1 used in the geometry : Yes ### Run 19 starts. ### Run 19 starts. - Event#=0 t[ns]=0.100724 r[mm]=30.1959 deltaR[mum]=6.28662e-06 deltaEkin[MeV]=7.79071 deltaAngle(deg)=0.00537878 - Event#=1000 t[ns]=0.0349713 r[mm]=10.484 deltaR[mum]=3.09017e-07 deltaEkin[MeV]=0.448676 deltaAngle(deg)=0.0017156 - Event#=2000 t[ns]=0.0590575 r[mm]=17.7048 deltaR[mum]=1.08125e-06 deltaEkin[MeV]=2.90345 deltaAngle(deg)=0.00232913 - Event#=3000 t[ns]=0.0561524 r[mm]=16.8339 deltaR[mum]=9.60906e-07 deltaEkin[MeV]=2.63275 deltaAngle(deg)=0.00218359 - Event#=4000 t[ns]=0.0229412 r[mm]=6.87751 deltaR[mum]=7.72031e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000940346 - Event#=5000 t[ns]=0.0807642 r[mm]=24.2122 deltaR[mum]=4.10694e-06 deltaEkin[MeV]=15.24 deltaAngle(deg)=0.00241833 - Event#=6000 t[ns]=0.00972484 r[mm]=2.9154 deltaR[mum]=5.88019e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000398614 - Event#=7000 t[ns]=0.241144 r[mm]=72.2923 deltaR[mum]=8.97032e-05 deltaEkin[MeV]=6.68932 deltaAngle(deg)=0.0102648 - Event#=8000 t[ns]=0.0127735 r[mm]=3.82935 deltaR[mum]=1.33249e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000523578 - Event#=9000 t[ns]=0.0196613 r[mm]=5.89425 deltaR[mum]=4.86002e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000805906 + Event#=0 t[ns]=0.0273057 r[mm]=8.18593 deltaR[mum]=1.30182e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.00111924 + Event#=1000 t[ns]=0.285927 r[mm]=85.7177 deltaR[mum]=0.000116444 deltaEkin[MeV]=6.80672 deltaAngle(deg)=0.011563 + Event#=2000 t[ns]=0.133496 r[mm]=40.0206 deltaR[mum]=2.5187e-05 deltaEkin[MeV]=8.87934 deltaAngle(deg)=0.00659171 + Event#=3000 t[ns]=0.311836 r[mm]=93.4848 deltaR[mum]=0.000198527 deltaEkin[MeV]=9.86774 deltaAngle(deg)=0.012862 + Event#=4000 t[ns]=0.00805548 r[mm]=2.41494 deltaR[mum]=3.34177e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.00033019 + Event#=5000 t[ns]=0.144854 r[mm]=43.4255 deltaR[mum]=2.15334e-05 deltaEkin[MeV]=7.25436 deltaAngle(deg)=0.00633382 + Event#=6000 t[ns]=0.0698756 r[mm]=20.9479 deltaR[mum]=2.77144e-06 deltaEkin[MeV]=5.53471 deltaAngle(deg)=0.00307542 + Event#=7000 t[ns]=0.0574585 r[mm]=17.2254 deltaR[mum]=1.01367e-06 deltaEkin[MeV]=3.12727 deltaAngle(deg)=0.00277214 + Event#=8000 t[ns]=0.0549749 r[mm]=16.4809 deltaR[mum]=1.19536e-06 deltaEkin[MeV]=3.48692 deltaAngle(deg)=0.00212058 + Event#=9000 t[ns]=0.0159322 r[mm]=4.7763 deltaR[mum]=2.58584e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000653052 Run terminated. Run Summary Number of events processed : 10000 - User=0.320000s Real=0.319325s Sys=0.000000s + User=0.280000s Real=0.282627s Sys=0.000000s ============ Run::printInfo() =============== RunID = 19 @@ -1856,45 +1857,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9838 + # Decays = 9839 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=5.38532e-06 mean=0.0894474 max=0.797615 - decay R [mm] : min=0.00161446 mean=26.8153 max=239.116 - decay X [mm] : min=0.00161446 mean=26.8153 max=239.116 - decay Y [mm] : min=-0.00193917 mean=0.00196537 max=0.0693086 - decay Z [mm] : min=-0.0137515 mean=8.49732e-06 max=0.0101902 - Delta decay R [mm] : min=-3.46945e-18 mean=3.00038e-08 max=3.36166e-06 - deflection angle [deg] : min=0 mean=0.00372957 max=0.0333058 - Delta Ekin [MeV] : min=0 mean=4.73661 max=315.988 - decay Ekin [GeV] : min=499.684 mean=499.995 max=500 - decay Px [GeV] : min=502.146 mean=502.457 max=502.462 - decay Py [GeV] : min=-0.106815 mean=0.0321979 max=0.290017 - decay Pz [GeV] : min=-0.159071 mean=3.60763e-05 max=0.100977 - decay Etot violation [MeV] : min=-9.26392e-06 mean=-1.71528e-07 max=8.34867e-06 - decay Px violation [MeV] : min=-9.26387e-06 mean=-1.71555e-07 max=8.34867e-06 - decay Py violation [MeV] : min=-3.65887e-09 mean=-3.27977e-11 max=1.74435e-09 - decay Pz violation [MeV] : min=-9.35643e-10 mean=3.02742e-13 max=1.09021e-09 + decay T [ns] : min=5.2777e-06 mean=0.0895606 max=0.905927 + decay R [mm] : min=0.00158219 mean=26.8493 max=271.587 + decay X [mm] : min=0.00158219 mean=26.8493 max=271.587 + decay Y [mm] : min=-0.00351134 mean=0.0019749 max=0.0862279 + decay Z [mm] : min=-0.0413122 mean=6.55232e-06 max=0.0180127 + Delta decay R [mm] : min=-3.46945e-18 mean=3.1457e-08 max=5.22518e-06 + deflection angle [deg] : min=0 mean=0.00373534 max=0.0367158 + Delta Ekin [MeV] : min=0 mean=5.59922 max=5044.09 + decay Ekin [GeV] : min=494.956 mean=499.994 max=500 + decay Px [GeV] : min=497.418 mean=502.456 max=502.462 + decay Py [GeV] : min=-0.0822281 mean=0.0322622 max=0.322011 + decay Pz [GeV] : min=-0.1573 mean=0.000110026 max=0.146814 + decay Etot violation [MeV] : min=-9.98774e-06 mean=-1.20322e-07 max=7.76158e-06 + decay Px violation [MeV] : min=-9.98762e-06 mean=-1.20348e-07 max=7.76153e-06 + decay Py violation [MeV] : min=-2.75907e-09 mean=-2.6547e-11 max=2.60704e-09 + decay Pz violation [MeV] : min=-9.43672e-10 mean=2.20187e-13 max=8.7816e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 4.54747e-06 , 0.0399473 (mean=0.00846473) + maxMass_deltaMax{1,2,3} [eV] = 0 , 4.54747e-06 , 0.0342488 (mean=0.0084091) maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.58923e-09 , 1.58923e-09 + maxGamma_deltaMax{1,2,3} = 0 , 1.5244e-09 , 1.5244e-09 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=5.92427e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 8.52651e-11 (mean=5.94415e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -13.6604 (mean=-0.215329) (#above threshold = 99) - maxOverestimated_mc_truth_rPos_delta [mum] = 35.9351 (mean=0.207235) (#above threshold = 474) - minUnderestimated_rDeltaPos [mum] = -13.6601 (mean=-0.215299) (#above threshold = 99) - maxOverestimated_rDeltaPos [mum] = 35.9364 (mean=0.207265) (#above threshold = 474) + minUnderestimated_mc_truth_rPos_delta [mum] = -199.325 (mean=-0.251309) (#above threshold = 105) + maxOverestimated_mc_truth_rPos_delta [mum] = 211.234 (mean=0.235945) (#above threshold = 496) + minUnderestimated_rDeltaPos [mum] = -199.32 (mean=-0.251278) (#above threshold = 105) + maxOverestimated_rDeltaPos [mum] = 211.239 (mean=0.235977) (#above threshold = 496) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0174989 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0352988 ============================================= @@ -1918,20 +1919,20 @@ Index : 1 used in the geometry : Yes ### Run 20 starts. ### Run 20 starts. - Event#=0 t[ns]=0.0374309 r[mm]=11.2214 deltaR[mum]=1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0718885 r[mm]=21.5514 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.0466115 r[mm]=13.9736 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.0248856 r[mm]=7.46044 deltaR[mum]=8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.025592 r[mm]=7.6722 deltaR[mum]=8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.0157494 r[mm]=4.72148 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.0206132 r[mm]=6.17962 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.00844975 r[mm]=2.53314 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.0813155 r[mm]=24.3775 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.0366401 r[mm]=10.9843 deltaR[mum]=1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=0 t[ns]=0.0085382 r[mm]=2.55966 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0600039 r[mm]=17.9885 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.0127068 r[mm]=3.80935 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.022032 r[mm]=6.60496 deltaR[mum]=8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.00769111 r[mm]=2.30571 deltaR[mum]=4.44089e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.000380361 r[mm]=0.114028 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.0159742 r[mm]=4.78889 deltaR[mum]=8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.0204841 r[mm]=6.1409 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.0132971 r[mm]=3.98633 deltaR[mum]=4.44089e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.0387821 r[mm]=11.6264 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 Run terminated. Run Summary Number of events processed : 10000 - User=0.110000s Real=0.114121s Sys=0.000000s + User=0.110000s Real=0.109695s Sys=0.000000s ============ Run::printInfo() =============== RunID = 20 @@ -1948,43 +1949,43 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9954 + # Decays = 9947 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=2.12302e-06 mean=0.0316819 max=0.280252 - decay R [mm] : min=0.000636457 mean=9.49787 max=84.0165 - decay X [mm] : min=0.000636457 mean=9.49787 max=84.0165 - decay Y [mm] : min=-0.00111177 mean=7.6849e-07 max=0.00265151 - decay Z [mm] : min=-0.00211309 mean=1.34342e-07 max=0.00270523 - Delta decay R [mm] : min=-7.10543e-15 mean=1.15733e-10 max=3.16671e-07 - deflection angle [deg] : min=0 mean=1.46781e-05 max=0.0199447 - Delta Ekin [MeV] : min=0 mean=0.000208949 max=0.587244 - decay Ekin [GeV] : min=499.999 mean=500 max=500 + decay T [ns] : min=4.81395e-07 mean=0.0307463 max=0.267595 + decay R [mm] : min=0.000144317 mean=9.21739 max=80.2221 + decay X [mm] : min=0.000144317 mean=9.21739 max=80.2221 + decay Y [mm] : min=-0.00266557 mean=7.13378e-07 max=0.00341222 + decay Z [mm] : min=-0.00380381 mean=-4.04831e-07 max=0.00253103 + Delta decay R [mm] : min=-1.42109e-14 mean=1.37788e-10 max=2.68588e-07 + deflection angle [deg] : min=0 mean=1.46444e-05 max=0.0149945 + Delta Ekin [MeV] : min=0 mean=0.000216968 max=0.331916 + decay Ekin [GeV] : min=500 mean=500 max=500 decay Px [GeV] : min=502.464 mean=502.465 max=502.465 - decay Py [GeV] : min=-0.0591016 mean=2.37271e-05 max=0.138769 - decay Pz [GeV] : min=-0.120014 mean=8.59487e-06 max=0.0871953 - decay Etot violation [MeV] : min=-1.12527e-06 mean=1.56675e-06 max=1.19209e-05 - decay Px violation [MeV] : min=-1.12533e-06 mean=1.56676e-06 max=1.19211e-05 - decay Py violation [MeV] : min=-6.41059e-10 mean=2.85887e-13 max=9.25823e-10 - decay Pz violation [MeV] : min=-9.0705e-10 mean=3.40079e-13 max=8.07987e-10 + decay Py [GeV] : min=-0.0953672 mean=2.7269e-05 max=0.0864369 + decay Pz [GeV] : min=-0.0860952 mean=-2.33187e-05 max=0.090554 + decay Etot violation [MeV] : min=-1.12533e-06 mean=1.47606e-06 max=1.11953e-05 + decay Px violation [MeV] : min=-1.12533e-06 mean=1.47608e-06 max=1.11955e-05 + decay Py violation [MeV] : min=-1.09416e-09 mean=4.17143e-13 max=1.90701e-09 + decay Pz violation [MeV] : min=-1.74875e-09 mean=-2.93634e-13 max=1.20296e-09 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.31921e-05 , 0.0239611 (mean=0.00543929) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 2.22045e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.09193e-09 , 1.09193e-09 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.31921e-05 , 0.036312 (mean=0.00544568) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 + maxGamma_deltaMax{1,2,3} = 0 , 9.06851e-10 , 9.06851e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0166541 (mean=-6.3755e-06) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.0112205 (mean=3.87526e-06) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0164197 (mean=-6.25977e-06) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.0115372 (mean=3.99099e-06) (#above threshold = 0) + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0117072 (mean=-7.66101e-06) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.00927712 (mean=5.03386e-06) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0114386 (mean=-7.52322e-06) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.00954571 (mean=5.17165e-06) (#above threshold = 0) --- float instead of double --- fMaxFloat_rDeltaPos_deltaMax [mum] = 0.00762939 ============================================= @@ -2010,20 +2011,20 @@ Index : 1 used in the geometry : Yes ### Run 21 starts. ### Run 21 starts. - Event#=0 t[ns]=0.0156944 r[mm]=4.705 deltaR[mum]=8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0551834 r[mm]=16.5434 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.00255163 r[mm]=0.764951 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.0298509 r[mm]=8.94897 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.000667863 r[mm]=0.200218 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.0315798 r[mm]=9.46727 deltaR[mum]=1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.0193953 r[mm]=5.8145 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.0542791 r[mm]=16.2723 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.0193203 r[mm]=5.79201 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.00329322 r[mm]=0.987271 deltaR[mum]=1.11022e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=0 t[ns]=0.0358798 r[mm]=10.7564 deltaR[mum]=1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.00233794 r[mm]=0.700889 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.10694 r[mm]=32.0593 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.0063084 r[mm]=1.89119 deltaR[mum]=2.22045e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.0494127 r[mm]=14.8134 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0164995 r[mm]=4.94636 deltaR[mum]=8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.0748889 r[mm]=22.4508 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.0192774 r[mm]=5.77915 deltaR[mum]=-8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.0483134 r[mm]=14.4838 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.00179576 r[mm]=0.538348 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 Run terminated. Run Summary Number of events processed : 10000 - User=0.130000s Real=0.133907s Sys=0.000000s + User=0.110000s Real=0.110210s Sys=0.000000s ============ Run::printInfo() =============== RunID = 21 @@ -2040,45 +2041,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9925 + # Decays = 9946 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=4.80372e-06 mean=0.0307477 max=0.255393 - decay R [mm] : min=0.0014401 mean=9.21782 max=76.5641 - decay X [mm] : min=0.0014401 mean=9.21782 max=76.5641 - decay Y [mm] : min=-0.00405523 mean=6.44596e-07 max=0.00501242 - decay Z [mm] : min=-0.00375704 mean=-3.3866e-07 max=0.00277605 - Delta decay R [mm] : min=-7.10543e-15 mean=1.81116e-10 max=4.9074e-07 - deflection angle [deg] : min=0 mean=2.32347e-05 max=0.0196218 - Delta Ekin [MeV] : min=0 mean=0.000367777 max=0.568383 + decay T [ns] : min=7.58286e-08 mean=0.0312227 max=0.260229 + decay R [mm] : min=2.27326e-05 mean=9.36021 max=78.0138 + decay X [mm] : min=2.27326e-05 mean=9.36021 max=78.0138 + decay Y [mm] : min=-0.00561356 mean=-4.12593e-07 max=0.0057367 + decay Z [mm] : min=-0.00123619 mean=7.43811e-07 max=0.00346785 + Delta decay R [mm] : min=-1.42109e-14 mean=1.51624e-10 max=2.53301e-07 + deflection angle [deg] : min=0 mean=1.83429e-05 max=0.0210981 + Delta Ekin [MeV] : min=0 mean=0.000308329 max=0.657129 decay Ekin [GeV] : min=499.999 mean=500 max=500 decay Px [GeV] : min=502.464 mean=502.465 max=502.465 - decay Py [GeV] : min=-0.131551 mean=4.66362e-05 max=0.144688 - decay Pz [GeV] : min=-0.0974364 mean=5.3468e-06 max=0.094872 - decay Etot violation [MeV] : min=-1.12515e-06 mean=1.49645e-06 max=1.14316e-05 - decay Px violation [MeV] : min=-1.12521e-06 mean=1.49647e-06 max=1.14319e-05 - decay Py violation [MeV] : min=-1.45054e-09 mean=7.26676e-13 max=2.17889e-09 - decay Pz violation [MeV] : min=-1.49824e-09 mean=2.6665e-13 max=1.43967e-09 + decay Py [GeV] : min=-0.10171 mean=-2.05586e-05 max=0.131906 + decay Pz [GeV] : min=-0.129774 mean=9.61332e-08 max=0.0796282 + decay Etot violation [MeV] : min=-1.12539e-06 mean=1.53548e-06 max=1.10945e-05 + decay Px violation [MeV] : min=-1.12533e-06 mean=1.5355e-06 max=1.10946e-05 + decay Py violation [MeV] : min=-1.56716e-09 mean=-3.38422e-13 max=1.41401e-09 + decay Pz violation [MeV] : min=-1.68801e-09 mean=-1.19714e-13 max=9.68043e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.31921e-05 , 0.0192676 (mean=0.00544257) + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.31921e-05 , 0.0239611 (mean=0.00544491) maxBeta_deltaMax{1,2} = 1.11022e-16 , 2.22045e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.24135e-09 , 1.24135e-09 + maxGamma_deltaMax{1,2,3} = 0 , 1.07644e-09 , 1.07644e-09 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0204318 (mean=-1.31027e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.0181874 (mean=6.34647e-06) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0203213 (mean=-1.29216e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.0186782 (mean=6.52758e-06) (#above threshold = 0) + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0147938 (mean=-8.0569e-06) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.0151391 (mean=5.9518e-06) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0145656 (mean=-7.90527e-06) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.0153924 (mean=6.10342e-06) (#above threshold = 0) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.00769037 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.00762939 ============================================= @@ -2102,20 +2103,20 @@ Index : 1 used in the geometry : Yes ### Run 22 starts. ### Run 22 starts. - Event#=0 t[ns]=0.0912857 r[mm]=27.3664 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0283311 r[mm]=8.49333 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.0123035 r[mm]=3.68844 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.093092 r[mm]=27.9079 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.0323501 r[mm]=9.69818 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.0176326 r[mm]=5.28605 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.00676636 r[mm]=2.02847 deltaR[mum]=-4.44089e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.0315293 r[mm]=9.45212 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.0439085 r[mm]=13.1632 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.00250906 r[mm]=0.752185 deltaR[mum]=-1.11022e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=0 t[ns]=0.0741433 r[mm]=22.2273 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.238993 r[mm]=71.6472 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.0375731 r[mm]=11.264 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.0606545 r[mm]=18.1835 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.0591889 r[mm]=17.7441 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0328957 r[mm]=9.86173 deltaR[mum]=1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.0110838 r[mm]=3.32278 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.00711239 r[mm]=2.13221 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.0287176 r[mm]=8.60918 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.0258565 r[mm]=7.75146 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 Run terminated. Run Summary Number of events processed : 10000 - User=0.150000s Real=0.150146s Sys=0.000000s + User=0.120000s Real=0.129330s Sys=0.000000s ============ Run::printInfo() =============== RunID = 22 @@ -2132,45 +2133,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9909 + # Decays = 9917 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=6.83783e-07 mean=0.0496281 max=0.439282 - decay R [mm] : min=0.00020499 mean=14.8779 max=131.691 - decay X [mm] : min=0.00020499 mean=14.8779 max=131.691 - decay Y [mm] : min=-0.00475941 mean=1.67987e-06 max=0.0154402 - decay Z [mm] : min=-0.00650589 mean=9.89795e-07 max=0.00497644 - Delta decay R [mm] : min=-2.84217e-14 mean=4.3152e-10 max=9.64048e-07 - deflection angle [deg] : min=0 mean=3.37048e-05 max=0.0276725 - Delta Ekin [MeV] : min=0 mean=0.000701914 max=1.13147 + decay T [ns] : min=9.30841e-06 mean=0.0498428 max=0.439217 + decay R [mm] : min=0.00279055 mean=14.9423 max=131.672 + decay X [mm] : min=0.00279055 mean=14.9423 max=131.672 + decay Y [mm] : min=-0.00766273 mean=-2.02377e-07 max=0.00544424 + decay Z [mm] : min=-0.00805514 mean=-8.46806e-07 max=0.00229695 + Delta decay R [mm] : min=-2.84217e-14 mean=2.88863e-10 max=3.98461e-07 + deflection angle [deg] : min=0 mean=3.20359e-05 max=0.0220203 + Delta Ekin [MeV] : min=0 mean=0.000531781 max=0.716465 decay Ekin [GeV] : min=499.999 mean=500 max=500 decay Px [GeV] : min=502.687 mean=502.688 max=502.688 - decay Py [GeV] : min=-0.187851 mean=5.80861e-05 max=0.186684 - decay Pz [GeV] : min=-0.148902 mean=5.96231e-05 max=0.157241 - decay Etot violation [MeV] : min=-5.68246e-06 mean=-4.39349e-07 max=3.85131e-06 - decay Px violation [MeV] : min=-5.68258e-06 mean=-4.39366e-07 max=3.85143e-06 - decay Py violation [MeV] : min=-9.40247e-10 mean=-2.30713e-13 max=7.87637e-10 - decay Pz violation [MeV] : min=-5.99229e-10 mean=-4.39072e-14 max=4.74884e-10 + decay Py [GeV] : min=-0.192077 mean=-1.27287e-05 max=0.126324 + decay Pz [GeV] : min=-0.15973 mean=-1.64615e-05 max=0.0948619 + decay Etot violation [MeV] : min=-5.15388e-06 mean=-4.34032e-07 max=3.84374e-06 + decay Px violation [MeV] : min=-5.15406e-06 mean=-4.34046e-07 max=3.84403e-06 + decay Py violation [MeV] : min=-5.64754e-10 mean=2.66317e-14 max=5.95094e-10 + decay Pz violation [MeV] : min=-2.14733e-10 mean=1.48821e-13 max=5.69372e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.18234e-05 , 0.0210603 (mean=0.00160573) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 - maxGamma_deltaMax{1,2,3} = 0 , 8.38071e-10 , 8.38071e-10 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.18234e-05 , 0.0185696 (mean=0.00160468) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 2.22045e-16 + maxGamma_deltaMax{1,2,3} = 0 , 7.12078e-10 , 7.12078e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0599775 (mean=-2.24768e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.0309597 (mean=1.93945e-05) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0590135 (mean=-2.20453e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.0312555 (mean=1.9826e-05) (#above threshold = 0) + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0397955 (mean=-1.79175e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.0160894 (mean=1.14524e-05) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0393971 (mean=-1.76287e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.016235 (mean=1.17413e-05) (#above threshold = 0) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0152588 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.00762939 ============================================= @@ -2194,20 +2195,20 @@ Index : 1 used in the geometry : Yes ### Run 23 starts. ### Run 23 starts. - Event#=0 t[ns]=0.186412 r[mm]=55.8841 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0172959 r[mm]=5.18509 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.078062 r[mm]=23.4021 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.00486829 r[mm]=1.45946 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.0651274 r[mm]=19.5244 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.0530909 r[mm]=15.916 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.156164 r[mm]=46.816 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.0378222 r[mm]=11.3387 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.0390327 r[mm]=11.7015 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.0125154 r[mm]=3.75198 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=0 t[ns]=0.0425996 r[mm]=12.7709 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.043183 r[mm]=12.9457 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.000727056 r[mm]=0.217963 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.0414164 r[mm]=12.4161 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.0183554 r[mm]=5.50274 deltaR[mum]=-8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.00961031 r[mm]=2.88106 deltaR[mum]=-4.44089e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.0981172 r[mm]=29.4144 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.0322083 r[mm]=9.65567 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.0685579 r[mm]=20.5528 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.024092 r[mm]=7.22251 deltaR[mum]=-8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 Run terminated. Run Summary Number of events processed : 10000 - User=0.140000s Real=0.143618s Sys=0.000000s + User=0.140000s Real=0.132114s Sys=0.000000s ============ Run::printInfo() =============== RunID = 23 @@ -2224,45 +2225,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9909 + # Decays = 9914 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=6.22002e-06 mean=0.0489816 max=0.405361 - decay R [mm] : min=0.00186469 mean=14.6841 max=121.522 - decay X [mm] : min=0.00186469 mean=14.6841 max=121.522 - decay Y [mm] : min=-0.00384733 mean=1.24104e-06 max=0.0118005 - decay Z [mm] : min=-0.00277336 mean=1.8661e-06 max=0.00940505 - Delta decay R [mm] : min=-2.84217e-14 mean=4.30994e-10 max=1.697e-06 - deflection angle [deg] : min=0 mean=3.29195e-05 max=0.0305345 - Delta Ekin [MeV] : min=0 mean=0.000654484 max=2.04721 - decay Ekin [GeV] : min=499.998 mean=500 max=500 - decay Px [GeV] : min=502.686 mean=502.688 max=502.688 - decay Py [GeV] : min=-0.107539 mean=6.13879e-05 max=0.223522 - decay Pz [GeV] : min=-0.109139 mean=5.21314e-05 max=0.183085 - decay Etot violation [MeV] : min=-5.92251e-06 mean=-4.42009e-07 max=3.98781e-06 - decay Px violation [MeV] : min=-5.92263e-06 mean=-4.42024e-07 max=3.98787e-06 - decay Py violation [MeV] : min=-1.72511e-09 mean=-6.3162e-14 max=1.2636e-09 - decay Pz violation [MeV] : min=-1.14014e-09 mean=6.37552e-15 max=7.88049e-10 + decay T [ns] : min=3.15324e-06 mean=0.0499266 max=0.454921 + decay R [mm] : min=0.000945305 mean=14.9674 max=136.38 + decay X [mm] : min=0.000945305 mean=14.9674 max=136.38 + decay Y [mm] : min=-0.00854134 mean=-5.47668e-07 max=0.00507564 + decay Z [mm] : min=-0.00810125 mean=-2.5315e-07 max=0.0105238 + Delta decay R [mm] : min=-2.84217e-14 mean=4.04238e-10 max=7.88115e-07 + deflection angle [deg] : min=0 mean=3.08049e-05 max=0.0203067 + Delta Ekin [MeV] : min=0 mean=0.000546277 max=0.609295 + decay Ekin [GeV] : min=499.999 mean=500 max=500 + decay Px [GeV] : min=502.687 mean=502.688 max=502.688 + decay Py [GeV] : min=-0.140335 mean=-3.03602e-05 max=0.116567 + decay Pz [GeV] : min=-0.175964 mean=-4.51674e-05 max=0.0864876 + decay Etot violation [MeV] : min=-5.53305e-06 mean=-4.41777e-07 max=3.95498e-06 + decay Px violation [MeV] : min=-5.53299e-06 mean=-4.41792e-07 max=3.95509e-06 + decay Py violation [MeV] : min=-8.61874e-10 mean=1.30434e-13 max=1.06124e-09 + decay Pz violation [MeV] : min=-2.68784e-10 mean=2.64755e-13 max=1.25826e-09 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.18234e-05 , 0.0298928 (mean=0.0016198) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 - maxGamma_deltaMax{1,2,3} = 0 , 9.74211e-10 , 9.74211e-10 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.18234e-05 , 0.0298928 (mean=0.00160622) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 2.22045e-16 + maxGamma_deltaMax{1,2,3} = 0 , 8.17948e-10 , 8.17948e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0751502 (mean=-2.12131e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.111674 (mean=2.1361e-05) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0734532 (mean=-2.07821e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.113371 (mean=2.1792e-05) (#above threshold = 0) + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0324841 (mean=-1.80646e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.0285345 (mean=1.71662e-05) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.031696 (mean=-1.76604e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.0293226 (mean=1.75704e-05) (#above threshold = 0) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.00762939 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.00782879 ============================================= @@ -2286,20 +2287,20 @@ Index : 1 used in the geometry : Yes ### Run 24 starts. ### Run 24 starts. - Event#=0 t[ns]=0.218711 r[mm]=65.5637 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0959093 r[mm]=28.7511 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.0532575 r[mm]=15.9652 deltaR[mum]=1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.0251289 r[mm]=7.53298 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.166132 r[mm]=49.802 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.0368893 r[mm]=11.0584 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.207413 r[mm]=62.1771 deltaR[mum]=-7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.198036 r[mm]=59.3659 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.175612 r[mm]=52.6438 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.0640927 r[mm]=19.2133 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=0 t[ns]=0.0692383 r[mm]=20.7558 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.35228 r[mm]=105.604 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.00984763 r[mm]=2.95206 deltaR[mum]=-4.44089e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.147876 r[mm]=44.3295 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.00751601 r[mm]=2.2531 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0484993 r[mm]=14.5388 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.015494 r[mm]=4.64471 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.15917 r[mm]=47.7151 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.490703 r[mm]=147.1 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.140946 r[mm]=42.2518 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 Run terminated. Run Summary Number of events processed : 10000 - User=0.250000s Real=0.250062s Sys=0.000000s + User=0.240000s Real=0.242356s Sys=0.000000s ============ Run::printInfo() =============== RunID = 24 @@ -2316,43 +2317,43 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9790 + # Decays = 9773 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=3.73259e-06 mean=0.128771 max=1.28553 - decay R [mm] : min=0.00111893 mean=38.6021 max=385.369 - decay X [mm] : min=0.00111893 mean=38.6021 max=385.369 - decay Y [mm] : min=-0.0239894 mean=-1.02899e-05 max=0.0136116 - decay Z [mm] : min=-0.0389554 mean=-1.42717e-05 max=0.0313991 - Delta decay R [mm] : min=-5.68434e-14 mean=1.8699e-09 max=1.95012e-06 - deflection angle [deg] : min=0 mean=9.44701e-05 max=0.0304568 - Delta Ekin [MeV] : min=0 mean=0.00174753 max=1.38648 - decay Ekin [GeV] : min=499.999 mean=500 max=500 - decay Px [GeV] : min=505.587 mean=505.588 max=505.588 - decay Py [GeV] : min=-0.180994 mean=-0.000129583 max=0.136043 - decay Pz [GeV] : min=-0.243782 mean=-0.000154121 max=0.141749 - decay Etot violation [MeV] : min=-1.60141e-06 mean=-3.68582e-07 max=9.48552e-07 - decay Px violation [MeV] : min=-1.60123e-06 mean=-3.68481e-07 max=9.48727e-07 - decay Py violation [MeV] : min=-2.43404e-10 mean=1.62704e-13 max=2.40604e-10 - decay Pz violation [MeV] : min=-1.59616e-10 mean=8.44702e-14 max=3.44414e-10 + decay T [ns] : min=1.13587e-06 mean=0.131957 max=1.19335 + decay R [mm] : min=0.000340504 mean=39.5573 max=357.735 + decay X [mm] : min=0.000340504 mean=39.5573 max=357.735 + decay Y [mm] : min=-0.0193797 mean=5.47713e-06 max=0.0397187 + decay Z [mm] : min=-0.0304947 mean=-2.6209e-06 max=0.0567151 + Delta decay R [mm] : min=-5.68434e-14 mean=2.42645e-09 max=4.26303e-06 + deflection angle [deg] : min=0 mean=9.54051e-05 max=0.057619 + Delta Ekin [MeV] : min=0 mean=0.00245905 max=4.96218 + decay Ekin [GeV] : min=499.995 mean=500 max=500 + decay Px [GeV] : min=505.583 mean=505.588 max=505.588 + decay Py [GeV] : min=-0.140827 mean=6.67509e-05 max=0.50643 + decay Pz [GeV] : min=-0.204803 mean=-5.08888e-05 max=0.48041 + decay Etot violation [MeV] : min=-1.58366e-06 mean=-3.71324e-07 max=9.51928e-07 + decay Px violation [MeV] : min=-1.58377e-06 mean=-3.71224e-07 max=9.51986e-07 + decay Py violation [MeV] : min=-2.77055e-10 mean=2.78525e-14 max=1.90681e-10 + decay Pz violation [MeV] : min=-1.66693e-10 mean=5.77334e-14 max=2.17042e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.016631 (mean=0.0030647) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.17495e-10 , 1.17495e-10 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.0139153 (mean=0.00305999) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 4.44089e-16 + maxGamma_deltaMax{1,2,3} = 0 , 9.79128e-11 , 9.79128e-11 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0471044 (mean=-6.24715e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.18208 (mean=0.000134114) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0451542 (mean=-6.06016e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.18403 (mean=0.000135984) (#above threshold = 0) + minUnderestimated_mc_truth_rPos_delta [mum] = -0.133392 (mean=-7.62524e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.527136 (mean=0.000206676) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.129839 (mean=-7.3826e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.531399 (mean=0.000209102) (#above threshold = 0) --- float instead of double --- fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0610352 ============================================= @@ -2378,20 +2379,20 @@ Index : 1 used in the geometry : Yes ### Run 25 starts. ### Run 25 starts. - Event#=0 t[ns]=0.0158704 r[mm]=4.75753 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0623222 r[mm]=18.6826 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.0722517 r[mm]=21.6592 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.0866382 r[mm]=25.9719 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.207561 r[mm]=62.2214 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.0499815 r[mm]=14.9832 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.0493252 r[mm]=14.7864 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.00322385 r[mm]=0.966426 deltaR[mum]=-1.11022e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.0265936 r[mm]=7.97206 deltaR[mum]=-8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.127543 r[mm]=38.2342 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=0 t[ns]=0.182402 r[mm]=54.6795 deltaR[mum]=-1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0139008 r[mm]=4.16711 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.20913 r[mm]=62.6917 deltaR[mum]=-7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.0217542 r[mm]=6.52134 deltaR[mum]=-8.88178e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.188565 r[mm]=56.5268 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.0958773 r[mm]=28.7415 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.0738715 r[mm]=22.1448 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.0608893 r[mm]=18.253 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.173505 r[mm]=52.0123 deltaR[mum]=-7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.473627 r[mm]=141.981 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 Run terminated. Run Summary Number of events processed : 10000 - User=0.270000s Real=0.265832s Sys=0.000000s + User=0.230000s Real=0.234649s Sys=0.000000s ============ Run::printInfo() =============== RunID = 25 @@ -2408,43 +2409,43 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9768 + # Decays = 9789 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=3.25835e-05 mean=0.131721 max=1.24908 - decay R [mm] : min=0.00976769 mean=39.4866 max=374.441 - decay X [mm] : min=0.00976769 mean=39.4866 max=374.441 - decay Y [mm] : min=-0.137781 mean=-9.08311e-06 max=0.0622882 - decay Z [mm] : min=-0.0491134 mean=-1.1086e-05 max=0.0387218 - Delta decay R [mm] : min=-5.68434e-14 mean=2.22433e-09 max=3.98221e-06 - deflection angle [deg] : min=0 mean=9.83692e-05 max=0.0402738 - Delta Ekin [MeV] : min=0 mean=0.00187773 max=2.42432 - decay Ekin [GeV] : min=499.998 mean=500 max=500 - decay Px [GeV] : min=505.586 mean=505.588 max=505.588 - decay Py [GeV] : min=-0.334784 mean=9.3621e-06 max=0.156162 - decay Pz [GeV] : min=-0.179941 mean=-6.11988e-05 max=0.160381 - decay Etot violation [MeV] : min=-1.6563e-06 mean=-3.74924e-07 max=1.07294e-06 - decay Px violation [MeV] : min=-1.65624e-06 mean=-3.74824e-07 max=1.07294e-06 - decay Py violation [MeV] : min=-2.3573e-10 mean=3.14114e-14 max=5.67866e-10 - decay Pz violation [MeV] : min=-4.07596e-10 mean=-5.50502e-14 max=2.0222e-10 + decay T [ns] : min=7.7067e-06 mean=0.129502 max=1.21702 + decay R [mm] : min=0.00231027 mean=38.8214 max=364.832 + decay X [mm] : min=0.00231027 mean=38.8214 max=364.832 + decay Y [mm] : min=-0.0311082 mean=-5.62323e-06 max=0.021884 + decay Z [mm] : min=-0.0276546 mean=-2.99424e-07 max=0.0219041 + Delta decay R [mm] : min=-5.68434e-14 mean=1.54557e-09 max=1.23129e-06 + deflection angle [deg] : min=0 mean=8.97563e-05 max=0.0243491 + Delta Ekin [MeV] : min=0 mean=0.00154582 max=0.886157 + decay Ekin [GeV] : min=499.999 mean=500 max=500 + decay Px [GeV] : min=505.587 mean=505.588 max=505.588 + decay Py [GeV] : min=-0.13045 mean=3.81765e-05 max=0.192153 + decay Pz [GeV] : min=-0.214847 mean=1.87493e-05 max=0.137827 + decay Etot violation [MeV] : min=-1.66608e-06 mean=-3.7032e-07 max=8.60891e-07 + decay Px violation [MeV] : min=-1.66608e-06 mean=-3.7022e-07 max=8.61008e-07 + decay Py violation [MeV] : min=-2.69068e-10 mean=6.35519e-14 max=2.68543e-10 + decay Pz violation [MeV] : min=-1.28395e-10 mean=1.50706e-13 max=3.36826e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.0139153 (mean=0.00306083) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.13644e-10 , 1.13644e-10 + maxMass_deltaMax{1,2,3} [eV] = 0 , 1.63709e-05 , 0.0139153 (mean=0.0030683) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 4.44089e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.22284e-10 , 1.22284e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0810918 (mean=-6.72812e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.997671 (mean=0.000264529) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0771096 (mean=-6.50569e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 1.00165 (mean=0.000266753) (#above threshold = 1) + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0392881 (mean=-5.51571e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.108502 (mean=0.000117407) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0380568 (mean=-5.36115e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.109075 (mean=0.000118953) (#above threshold = 0) --- float instead of double --- fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0610352 ============================================= @@ -2470,20 +2471,20 @@ Index : 1 used in the geometry : Yes ### Run 26 starts. ### Run 26 starts. - Event#=0 t[ns]=0.222205 r[mm]=66.6111 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.0411794 r[mm]=12.3445 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.190366 r[mm]=57.0666 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.225301 r[mm]=67.5392 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.405816 r[mm]=121.653 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.278519 r[mm]=83.4925 deltaR[mum]=1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.0496294 r[mm]=14.8776 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.0602069 r[mm]=18.0484 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.187682 r[mm]=56.262 deltaR[mum]=7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.00253678 r[mm]=0.760458 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=0 t[ns]=0.263467 r[mm]=78.9801 deltaR[mum]=-1.42109e-11 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0703449 r[mm]=21.0875 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.0338641 r[mm]=10.1515 deltaR[mum]=-1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.177991 r[mm]=53.3567 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.103212 r[mm]=30.9402 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.00309524 r[mm]=0.927869 deltaR[mum]=-1.11022e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.0910502 r[mm]=27.2944 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.138954 r[mm]=41.6547 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.0658881 r[mm]=19.7515 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.0345768 r[mm]=10.3652 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 Run terminated. Run Summary Number of events processed : 10000 - User=0.210000s Real=0.212970s Sys=0.000000s + User=0.230000s Real=0.229157s Sys=0.000000s ============ Run::printInfo() =============== RunID = 26 @@ -2500,43 +2501,43 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9821 + # Decays = 9780 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=9.98573e-06 mean=0.126164 max=1.30049 - decay R [mm] : min=0.00299345 mean=37.8205 max=389.851 - decay X [mm] : min=0.00299345 mean=37.8205 max=389.851 - decay Y [mm] : min=-0.0360209 mean=-6.53386e-06 max=0.0144196 - decay Z [mm] : min=-0.019615 mean=-5.85527e-06 max=0.0073795 - Delta decay R [mm] : min=-5.68434e-14 mean=1.38244e-09 max=1.54946e-06 - deflection angle [deg] : min=0 mean=7.63102e-05 max=0.0280112 - Delta Ekin [MeV] : min=0 mean=0.00144967 max=1.17355 - decay Ekin [GeV] : min=499.999 mean=500 max=500 - decay Px [GeV] : min=505.758 mean=505.759 max=505.759 - decay Py [GeV] : min=-0.24026 mean=-0.000117866 max=0.138099 - decay Pz [GeV] : min=-0.24695 mean=-4.73594e-05 max=0.152477 - decay Etot violation [MeV] : min=-5.50819e-07 mean=6.2145e-07 max=2.02813e-06 - decay Px violation [MeV] : min=-5.50819e-07 mean=6.21475e-07 max=2.02848e-06 - decay Py violation [MeV] : min=-4.49432e-10 mean=-1.27794e-13 max=2.56392e-10 - decay Pz violation [MeV] : min=-5.44048e-10 mean=-1.23399e-13 max=2.99565e-10 + decay T [ns] : min=9.31249e-06 mean=0.127436 max=1.45848 + decay R [mm] : min=0.00279163 mean=38.2019 max=437.213 + decay X [mm] : min=0.00279163 mean=38.2019 max=437.213 + decay Y [mm] : min=-0.0135598 mean=3.34288e-06 max=0.0134299 + decay Z [mm] : min=-0.0162077 mean=7.63538e-06 max=0.0408114 + Delta decay R [mm] : min=-5.68434e-14 mean=1.30627e-09 max=8.97985e-07 + deflection angle [deg] : min=0 mean=6.75489e-05 max=0.0367736 + Delta Ekin [MeV] : min=0 mean=0.00145255 max=2.0226 + decay Ekin [GeV] : min=499.998 mean=500 max=500 + decay Px [GeV] : min=505.757 mean=505.759 max=505.759 + decay Py [GeV] : min=-0.184126 mean=1.46876e-05 max=0.252854 + decay Pz [GeV] : min=-0.148801 mean=5.20883e-05 max=0.275156 + decay Etot violation [MeV] : min=-2.80212e-07 mean=6.31602e-07 max=1.98104e-06 + decay Px violation [MeV] : min=-2.80153e-07 mean=6.31628e-07 max=1.98116e-06 + decay Py violation [MeV] : min=-4.70692e-10 mean=4.63744e-14 max=5.98078e-10 + decay Pz violation [MeV] : min=-3.51747e-10 mean=6.62158e-14 max=4.78735e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.011908 (mean=0.00139125) - maxBeta_deltaMax{1,2} = 1.11022e-16 , 2.22045e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.15065e-10 , 1.15065e-10 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.011908 (mean=0.00138922) + maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.18675e-10 , 1.18675e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=4.19938e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=4.30518e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.0439089 (mean=-4.98349e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.172108 (mean=9.14608e-05) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.0423595 (mean=-4.84524e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.173172 (mean=9.28432e-05) (#above threshold = 0) + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0908754 (mean=-5.65627e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.125533 (mean=8.92624e-05) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0900524 (mean=-5.52564e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.126416 (mean=9.05686e-05) (#above threshold = 0) --- float instead of double --- fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 ============================================= @@ -2562,20 +2563,20 @@ Index : 1 used in the geometry : Yes ### Run 27 starts. ### Run 27 starts. - Event#=0 t[ns]=0.171154 r[mm]=51.3074 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=1000 t[ns]=0.182279 r[mm]=54.6422 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=2000 t[ns]=0.0337037 r[mm]=10.1035 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=3000 t[ns]=0.0646296 r[mm]=19.3742 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=4000 t[ns]=0.0116994 r[mm]=3.50717 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=5000 t[ns]=0.0865292 r[mm]=25.9391 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=6000 t[ns]=0.105399 r[mm]=31.5959 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=7000 t[ns]=0.0815347 r[mm]=24.4419 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=8000 t[ns]=0.0824886 r[mm]=24.7278 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 - Event#=9000 t[ns]=0.0962235 r[mm]=28.8452 deltaR[mum]=3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=0 t[ns]=0.178927 r[mm]=53.6374 deltaR[mum]=-7.10543e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=1000 t[ns]=0.0456196 r[mm]=13.6755 deltaR[mum]=1.77636e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=2000 t[ns]=0.0656453 r[mm]=19.6787 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=3000 t[ns]=0.419896 r[mm]=125.873 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=4000 t[ns]=0.0687048 r[mm]=20.5958 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=5000 t[ns]=0.00491821 r[mm]=1.47435 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=6000 t[ns]=0.12983 r[mm]=38.9196 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=7000 t[ns]=0.0227301 r[mm]=6.81387 deltaR[mum]=0 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=8000 t[ns]=0.0125052 r[mm]=3.74872 deltaR[mum]=-4.44089e-13 deltaEkin[MeV]=0 deltaAngle(deg)=0 + Event#=9000 t[ns]=0.078374 r[mm]=23.4944 deltaR[mum]=-3.55271e-12 deltaEkin[MeV]=0 deltaAngle(deg)=0 Run terminated. Run Summary Number of events processed : 10000 - User=0.240000s Real=0.238501s Sys=0.000000s + User=0.210000s Real=0.210295s Sys=0.000000s ============ Run::printInfo() =============== RunID = 27 @@ -2592,43 +2593,43 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9792 + # Decays = 9808 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=4.79195e-06 mean=0.128257 max=1.28847 - decay R [mm] : min=0.0014365 mean=38.4479 max=386.249 - decay X [mm] : min=0.0014365 mean=38.4479 max=386.249 - decay Y [mm] : min=-0.022252 mean=5.5671e-06 max=0.0202343 - decay Z [mm] : min=-0.0229171 mean=-6.23536e-06 max=0.0206746 - Delta decay R [mm] : min=-5.68434e-14 mean=1.87906e-09 max=1.82314e-06 - deflection angle [deg] : min=0 mean=9.58173e-05 max=0.0569417 - Delta Ekin [MeV] : min=0 mean=0.00220258 max=4.84947 - decay Ekin [GeV] : min=499.995 mean=500 max=500 - decay Px [GeV] : min=505.754 mean=505.759 max=505.759 - decay Py [GeV] : min=-0.395242 mean=-3.75489e-05 max=0.245128 - decay Pz [GeV] : min=-0.180551 mean=-4.18985e-05 max=0.310595 - decay Etot violation [MeV] : min=-4.97734e-07 mean=6.21428e-07 max=1.96416e-06 - decay Px violation [MeV] : min=-4.97501e-07 mean=6.21452e-07 max=1.96433e-06 - decay Py violation [MeV] : min=-3.50809e-10 mean=-2.26594e-14 max=6.89028e-10 - decay Pz violation [MeV] : min=-4.55088e-10 mean=-1.14441e-14 max=8.18773e-10 + decay T [ns] : min=6.46955e-07 mean=0.126325 max=1.44482 + decay R [mm] : min=0.000193939 mean=37.8687 max=433.119 + decay X [mm] : min=0.000193939 mean=37.8687 max=433.119 + decay Y [mm] : min=-0.00861688 mean=1.59009e-05 max=0.155284 + decay Z [mm] : min=-0.120647 mean=-4.49902e-06 max=0.0235022 + Delta decay R [mm] : min=-5.68434e-14 mean=1.44369e-09 max=2.57822e-06 + deflection angle [deg] : min=0 mean=6.69851e-05 max=0.0359671 + Delta Ekin [MeV] : min=0 mean=0.00137576 max=1.93485 + decay Ekin [GeV] : min=499.998 mean=500 max=500 + decay Px [GeV] : min=505.757 mean=505.759 max=505.759 + decay Py [GeV] : min=-0.197821 mean=-1.71677e-05 max=0.317514 + decay Pz [GeV] : min=-0.148639 mean=4.41172e-05 max=0.191075 + decay Etot violation [MeV] : min=-7.07747e-07 mean=6.18009e-07 max=1.89233e-06 + decay Px violation [MeV] : min=-7.07805e-07 mean=6.18033e-07 max=1.89233e-06 + decay Py violation [MeV] : min=-3.86251e-10 mean=-1.58779e-13 max=2.94079e-10 + decay Pz violation [MeV] : min=-2.3654e-10 mean=3.03996e-14 max=3.19517e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.011908 (mean=0.00139015) + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.011908 (mean=0.00139405) maxBeta_deltaMax{1,2} = 1.11022e-16 , 3.33067e-16 - maxGamma_deltaMax{1,2,3} = 0 , 9.82823e-11 , 9.82823e-11 + maxGamma_deltaMax{1,2,3} = 0 , 9.10916e-11 , 9.10916e-11 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 1.13687e-10 (mean=4.19801e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=4.18093e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -0.10222 (mean=-7.07132e-05) (#above threshold = 0) - maxOverestimated_mc_truth_rPos_delta [mum] = 0.0801118 (mean=0.000116027) (#above threshold = 0) - minUnderestimated_rDeltaPos [mum] = -0.100397 (mean=-6.88342e-05) (#above threshold = 0) - maxOverestimated_rDeltaPos [mum] = 0.0812437 (mean=0.000117906) (#above threshold = 0) + minUnderestimated_mc_truth_rPos_delta [mum] = -0.0633904 (mean=-5.06973e-05) (#above threshold = 0) + maxOverestimated_mc_truth_rPos_delta [mum] = 0.914239 (mean=0.000166315) (#above threshold = 0) + minUnderestimated_rDeltaPos [mum] = -0.0620165 (mean=-4.92536e-05) (#above threshold = 0) + maxOverestimated_rDeltaPos [mum] = 0.916817 (mean=0.000167759) (#above threshold = 0) --- float instead of double --- fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0305176 ============================================= @@ -2654,20 +2655,20 @@ Index : 1 used in the geometry : Yes ### Run 28 starts. ### Run 28 starts. - Event#=0 t[ns]=0.179537 r[mm]=53.8204 deltaR[mum]=8.54688e-05 deltaEkin[MeV]=7.78433 deltaAngle(deg)=0.00736975 - Event#=1000 t[ns]=0.121554 r[mm]=36.4384 deltaR[mum]=2.06941e-05 deltaEkin[MeV]=6.89062 deltaAngle(deg)=0.00414842 - Event#=2000 t[ns]=0.11126 r[mm]=33.3526 deltaR[mum]=3.49556e-05 deltaEkin[MeV]=8.29122 deltaAngle(deg)=0.00610823 - Event#=3000 t[ns]=0.0697135 r[mm]=20.8982 deltaR[mum]=1.60692e-06 deltaEkin[MeV]=3.93895 deltaAngle(deg)=0.00288439 - Event#=4000 t[ns]=0.113966 r[mm]=34.1638 deltaR[mum]=3.08546e-05 deltaEkin[MeV]=8.60652 deltaAngle(deg)=0.00358709 - Event#=5000 t[ns]=0.128954 r[mm]=38.6568 deltaR[mum]=4.30584e-05 deltaEkin[MeV]=9.05244 deltaAngle(deg)=0.00445713 - Event#=6000 t[ns]=0.0319585 r[mm]=9.58029 deltaR[mum]=2.24567e-07 deltaEkin[MeV]=0.14715 deltaAngle(deg)=0.00116243 - Event#=7000 t[ns]=0.0256342 r[mm]=7.68445 deltaR[mum]=1.06292e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.00104382 - Event#=8000 t[ns]=0.0521092 r[mm]=15.6209 deltaR[mum]=7.99533e-07 deltaEkin[MeV]=2.54274 deltaAngle(deg)=0.00239221 - Event#=9000 t[ns]=0.117561 r[mm]=35.2415 deltaR[mum]=4.16031e-05 deltaEkin[MeV]=11.0658 deltaAngle(deg)=0.00446799 + Event#=0 t[ns]=0.200988 r[mm]=60.2509 deltaR[mum]=0.000121777 deltaEkin[MeV]=9.83452 deltaAngle(deg)=0.00678966 + Event#=1000 t[ns]=0.257378 r[mm]=77.1549 deltaR[mum]=0.000279428 deltaEkin[MeV]=11.4994 deltaAngle(deg)=0.011265 + Event#=2000 t[ns]=0.0353395 r[mm]=10.5938 deltaR[mum]=3.14618e-07 deltaEkin[MeV]=0.567676 deltaAngle(deg)=0.00160605 + Event#=3000 t[ns]=0.074687 r[mm]=22.3891 deltaR[mum]=1.92534e-06 deltaEkin[MeV]=5.16664 deltaAngle(deg)=0.00374711 + Event#=4000 t[ns]=0.00704198 r[mm]=2.11099 deltaR[mum]=2.20401e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.00028675 + Event#=5000 t[ns]=0.35126 r[mm]=105.298 deltaR[mum]=0.000360131 deltaEkin[MeV]=7.33141 deltaAngle(deg)=0.0134172 + Event#=6000 t[ns]=0.275238 r[mm]=82.509 deltaR[mum]=0.0002237 deltaEkin[MeV]=8.15888 deltaAngle(deg)=0.0107678 + Event#=7000 t[ns]=0.054131 r[mm]=16.227 deltaR[mum]=8.7168e-07 deltaEkin[MeV]=2.45352 deltaAngle(deg)=0.0019023 + Event#=8000 t[ns]=0.517113 r[mm]=155.016 deltaR[mum]=0.00113135 deltaEkin[MeV]=9.62296 deltaAngle(deg)=0.0199761 + Event#=9000 t[ns]=0.139443 r[mm]=41.8013 deltaR[mum]=7.85395e-05 deltaEkin[MeV]=11.268 deltaAngle(deg)=0.00507508 Run terminated. Run Summary Number of events processed : 10000 - User=0.370000s Real=0.381523s Sys=0.000000s + User=0.300000s Real=0.308784s Sys=0.000000s ============ Run::printInfo() =============== RunID = 28 @@ -2684,45 +2685,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9779 + # Decays = 9813 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=1.76171e-05 mean=0.137931 max=1.21179 - decay R [mm] : min=0.00528114 mean=41.3481 max=363.262 - decay X [mm] : min=0.00528114 mean=41.3481 max=363.262 - decay Y [mm] : min=-0.00307723 mean=0.00442482 max=0.157103 - decay Z [mm] : min=-0.0207667 mean=1.46444e-05 max=0.0234491 - Delta decay R [mm] : min=8.67362e-19 mean=1.56243e-07 max=2.86522e-05 - deflection angle [deg] : min=0 mean=0.00568081 max=0.0533037 - Delta Ekin [MeV] : min=0 mean=6.42321 max=1451.3 - decay Ekin [GeV] : min=498.549 mean=499.994 max=500 - decay Px [GeV] : min=504.31 mean=505.755 max=505.761 - decay Py [GeV] : min=-0.0646645 mean=0.0495541 max=0.469785 - decay Pz [GeV] : min=-0.151233 mean=0.00016216 max=0.1552 - decay Etot violation [MeV] : min=-1.75787e-06 mean=-8.44081e-08 max=1.53563e-06 - decay Px violation [MeV] : min=-1.7577e-06 mean=-8.44083e-08 max=1.53563e-06 - decay Py violation [MeV] : min=-7.51641e-10 mean=-8.98829e-12 max=7.21684e-10 - decay Pz violation [MeV] : min=-1.94532e-10 mean=2.41315e-14 max=2.928e-10 + decay T [ns] : min=6.37355e-06 mean=0.136152 max=1.44116 + decay R [mm] : min=0.00191062 mean=40.8146 max=432.02 + decay X [mm] : min=0.00191062 mean=40.8146 max=432.02 + decay Y [mm] : min=-0.0102331 mean=0.00434032 max=0.217759 + decay Z [mm] : min=-0.0181042 mean=1.14637e-05 max=0.0209752 + Delta decay R [mm] : min=0 mean=1.54559e-07 max=1.95168e-05 + deflection angle [deg] : min=8.53688e-07 mean=0.00561941 max=0.058186 + Delta Ekin [MeV] : min=0 mean=6.31843 max=1934.65 + decay Ekin [GeV] : min=498.065 mean=499.994 max=500 + decay Px [GeV] : min=503.827 mean=505.755 max=505.761 + decay Py [GeV] : min=-0.178548 mean=0.0489637 max=0.513657 + decay Pz [GeV] : min=-0.134847 mean=8.24011e-05 max=0.222252 + decay Etot violation [MeV] : min=-1.87242e-06 mean=-7.10697e-08 max=1.85205e-06 + decay Px violation [MeV] : min=-1.87242e-06 mean=-7.10693e-08 max=1.85217e-06 + decay Py violation [MeV] : min=-8.67374e-10 mean=-8.1567e-12 max=4.95334e-10 + decay Pz violation [MeV] : min=-3.12838e-10 mean=-1.16712e-13 max=1.59844e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 0 , 0.0157997 (mean=0.00343736) + maxMass_deltaMax{1,2,3} [eV] = 0 , 0 , 0.0157997 (mean=0.00350515) maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.14923e-10 , 1.14923e-10 + maxGamma_deltaMax{1,2,3} = 0 , 1.15207e-10 , 1.15207e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -78.6434 (mean=-0.292902) (#above threshold = 120) - maxOverestimated_mc_truth_rPos_delta [mum] = 216.894 (mean=0.458788) (#above threshold = 1273) - minUnderestimated_rDeltaPos [mum] = -78.626 (mean=-0.292745) (#above threshold = 120) - maxOverestimated_rDeltaPos [mum] = 216.923 (mean=0.458945) (#above threshold = 1273) + minUnderestimated_mc_truth_rPos_delta [mum] = -84.4981 (mean=-0.291248) (#above threshold = 135) + maxOverestimated_mc_truth_rPos_delta [mum] = 112.454 (mean=0.456188) (#above threshold = 1227) + minUnderestimated_rDeltaPos [mum] = -84.4927 (mean=-0.291094) (#above threshold = 135) + maxOverestimated_rDeltaPos [mum] = 112.469 (mean=0.456343) (#above threshold = 1227) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0421178 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0491979 ============================================= @@ -2746,20 +2747,20 @@ Index : 1 used in the geometry : Yes ### Run 29 starts. ### Run 29 starts. - Event#=0 t[ns]=0.0496468 r[mm]=14.8828 deltaR[mum]=7.17124e-07 deltaEkin[MeV]=2.04955 deltaAngle(deg)=0.00266936 - Event#=1000 t[ns]=0.0192964 r[mm]=5.78455 deltaR[mum]=4.5338e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000785748 - Event#=2000 t[ns]=0.0754768 r[mm]=22.6259 deltaR[mum]=1.98033e-06 deltaEkin[MeV]=4.45515 deltaAngle(deg)=0.00257704 - Event#=3000 t[ns]=0.145915 r[mm]=43.7413 deltaR[mum]=7.67524e-05 deltaEkin[MeV]=13.3871 deltaAngle(deg)=0.00647296 - Event#=4000 t[ns]=0.411116 r[mm]=123.241 deltaR[mum]=0.000707896 deltaEkin[MeV]=9.74728 deltaAngle(deg)=0.0172364 - Event#=5000 t[ns]=0.0157172 r[mm]=4.7116 deltaR[mum]=2.45022e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000640004 - Event#=6000 t[ns]=0.0375722 r[mm]=11.2631 deltaR[mum]=4.05704e-07 deltaEkin[MeV]=4.46 deltaAngle(deg)=0.00110123 - Event#=7000 t[ns]=0.0122827 r[mm]=3.68203 deltaR[mum]=1.16933e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000500151 - Event#=8000 t[ns]=0.0232776 r[mm]=6.978 deltaR[mum]=7.95879e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000947862 - Event#=9000 t[ns]=0.0334701 r[mm]=10.0334 deltaR[mum]=2.65253e-07 deltaEkin[MeV]=0.329174 deltaAngle(deg)=0.00128945 + Event#=0 t[ns]=0.168932 r[mm]=50.6412 deltaR[mum]=9.26312e-05 deltaEkin[MeV]=10.4956 deltaAngle(deg)=0.00704028 + Event#=1000 t[ns]=0.0215438 r[mm]=6.45825 deltaR[mum]=6.30971e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000877261 + Event#=2000 t[ns]=0.134763 r[mm]=40.3983 deltaR[mum]=5.53524e-05 deltaEkin[MeV]=9.38258 deltaAngle(deg)=0.00559715 + Event#=3000 t[ns]=0.11704 r[mm]=35.0855 deltaR[mum]=7.58404e-05 deltaEkin[MeV]=15.5394 deltaAngle(deg)=0.00547495 + Event#=4000 t[ns]=0.149556 r[mm]=44.8328 deltaR[mum]=7.19912e-05 deltaEkin[MeV]=8.77253 deltaAngle(deg)=0.00666017 + Event#=5000 t[ns]=0.0407737 r[mm]=12.2228 deltaR[mum]=4.57867e-07 deltaEkin[MeV]=1.38082 deltaAngle(deg)=0.0019357 + Event#=6000 t[ns]=0.0484396 r[mm]=14.5209 deltaR[mum]=6.78703e-07 deltaEkin[MeV]=2.01466 deltaAngle(deg)=0.0017954 + Event#=7000 t[ns]=0.232404 r[mm]=69.6685 deltaR[mum]=0.000134955 deltaEkin[MeV]=6.76493 deltaAngle(deg)=0.00979244 + Event#=8000 t[ns]=0.0301483 r[mm]=9.03765 deltaR[mum]=1.74328e-07 deltaEkin[MeV]=0.01513 deltaAngle(deg)=0.00123929 + Event#=9000 t[ns]=0.0100194 r[mm]=3.00353 deltaR[mum]=6.34692e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.000407988 Run terminated. Run Summary Number of events processed : 10000 - User=0.370000s Real=0.372656s Sys=0.000000s + User=0.330000s Real=0.339876s Sys=0.000000s ============ Run::printInfo() =============== RunID = 29 @@ -2776,45 +2777,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9788 + # Decays = 9767 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=5.18431e-07 mean=0.135518 max=1.57442 - decay R [mm] : min=0.000155411 mean=40.6247 max=471.968 - decay X [mm] : min=0.000155411 mean=40.6247 max=471.968 - decay Y [mm] : min=-0.264543 mean=-0.0043403 max=0.0084473 - decay Z [mm] : min=-0.0147605 mean=6.11071e-06 max=0.02549 - Delta decay R [mm] : min=2.71051e-20 mean=1.59784e-07 max=3.82326e-05 - deflection angle [deg] : min=8.53688e-07 mean=0.00557529 max=0.0641568 - Delta Ekin [MeV] : min=0 mean=6.64359 max=2696.03 - decay Ekin [GeV] : min=497.304 mean=499.993 max=500 - decay Px [GeV] : min=503.065 mean=505.755 max=505.761 - decay Py [GeV] : min=-0.566349 mean=-0.0486443 max=0.166452 - decay Pz [GeV] : min=-0.125426 mean=1.39582e-05 max=0.145267 - decay Etot violation [MeV] : min=-1.76625e-06 mean=-7.07047e-08 max=1.73616e-06 - decay Px violation [MeV] : min=-1.7662e-06 mean=-7.0704e-08 max=1.73616e-06 - decay Py violation [MeV] : min=-1.16978e-09 mean=7.77058e-12 max=7.03437e-10 - decay Pz violation [MeV] : min=-1.5558e-10 mean=3.68567e-14 max=2.22798e-10 + decay T [ns] : min=3.48323e-05 mean=0.134479 max=1.04785 + decay R [mm] : min=0.0104418 mean=40.313 max=314.116 + decay X [mm] : min=0.0104418 mean=40.313 max=314.116 + decay Y [mm] : min=-0.189295 mean=-0.00416164 max=0.00346352 + decay Z [mm] : min=-0.0400256 mean=5.85917e-06 max=0.0377761 + Delta decay R [mm] : min=0 mean=1.46035e-07 max=2.12022e-05 + deflection angle [deg] : min=1.2073e-06 mean=0.0055452 max=0.0578704 + Delta Ekin [MeV] : min=0 mean=6.445 max=929.215 + decay Ekin [GeV] : min=499.071 mean=499.994 max=500 + decay Px [GeV] : min=504.832 mean=505.755 max=505.761 + decay Py [GeV] : min=-0.505892 mean=-0.0483532 max=0.102329 + decay Pz [GeV] : min=-0.209991 mean=0.000124868 max=0.139231 + decay Etot violation [MeV] : min=-1.62079e-06 mean=-7.56644e-08 max=1.72225e-06 + decay Px violation [MeV] : min=-1.62085e-06 mean=-7.56628e-08 max=1.72225e-06 + decay Py violation [MeV] : min=-4.98119e-10 mean=7.71875e-12 max=6.25164e-10 + decay Pz violation [MeV] : min=-1.43444e-10 mean=-3.26818e-16 max=1.58082e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 0 , 0.0157997 (mean=0.00347214) + maxMass_deltaMax{1,2,3} [eV] = 0 , 0 , 0.0157997 (mean=0.00344347) maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.18902e-10 , 1.18902e-10 + maxGamma_deltaMax{1,2,3} = 0 , 1.2399e-10 , 1.2399e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 maxMc_truth_rPos_deltaMax [mum] = 0 (mean=0) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -77.7545 (mean=-0.29761) (#above threshold = 121) - maxOverestimated_mc_truth_rPos_delta [mum] = 290.121 (mean=0.472692) (#above threshold = 1209) - minUnderestimated_rDeltaPos [mum] = -77.7163 (mean=-0.29745) (#above threshold = 121) - maxOverestimated_rDeltaPos [mum] = 290.159 (mean=0.472852) (#above threshold = 1209) + minUnderestimated_mc_truth_rPos_delta [mum] = -33.5805 (mean=-0.296007) (#above threshold = 133) + maxOverestimated_mc_truth_rPos_delta [mum] = 159.88 (mean=0.466856) (#above threshold = 1223) + minUnderestimated_rDeltaPos [mum] = -33.5727 (mean=-0.295861) (#above threshold = 133) + maxOverestimated_rDeltaPos [mum] = 159.901 (mean=0.467002) (#above threshold = 1223) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0415942 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0381606 ============================================= @@ -2838,20 +2839,20 @@ Index : 1 used in the geometry : Yes ### Run 30 starts. ### Run 30 starts. - Event#=0 t[ns]=0.310036 r[mm]=92.9397 deltaR[mum]=0.00054728 deltaEkin[MeV]=18.3799 deltaAngle(deg)=0.0126234 - Event#=1000 t[ns]=0.184462 r[mm]=55.2962 deltaR[mum]=7.92354e-05 deltaEkin[MeV]=7.04937 deltaAngle(deg)=0.00440478 - Event#=2000 t[ns]=0.10489 r[mm]=31.443 deltaR[mum]=2.76977e-05 deltaEkin[MeV]=10.9036 deltaAngle(deg)=0.00283461 - Event#=3000 t[ns]=0.00576351 r[mm]=1.72773 deltaR[mum]=1.20637e-09 deltaEkin[MeV]=0 deltaAngle(deg)=0.00023457 - Event#=4000 t[ns]=0.374522 r[mm]=112.271 deltaR[mum]=0.000665436 deltaEkin[MeV]=12.8148 deltaAngle(deg)=0.015613 - Event#=5000 t[ns]=0.17536 r[mm]=52.5679 deltaR[mum]=6.59913e-05 deltaEkin[MeV]=6.47067 deltaAngle(deg)=0.00703774 - Event#=6000 t[ns]=0.122036 r[mm]=36.583 deltaR[mum]=2.2254e-05 deltaEkin[MeV]=7.17378 deltaAngle(deg)=0.00444854 - Event#=7000 t[ns]=0.388165 r[mm]=116.361 deltaR[mum]=0.000540048 deltaEkin[MeV]=6.57324 deltaAngle(deg)=0.0161482 - Event#=8000 t[ns]=0.0353705 r[mm]=10.603 deltaR[mum]=3.81061e-07 deltaEkin[MeV]=1.58531 deltaAngle(deg)=0.00133461 - Event#=9000 t[ns]=0.024593 r[mm]=7.37227 deltaR[mum]=9.37641e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.00100093 + Event#=0 t[ns]=0.0365378 r[mm]=10.953 deltaR[mum]=3.45656e-07 deltaEkin[MeV]=1.01587 deltaAngle(deg)=0.00135079 + Event#=1000 t[ns]=0.15468 r[mm]=46.3687 deltaR[mum]=5.02153e-05 deltaEkin[MeV]=6.94929 deltaAngle(deg)=0.00544002 + Event#=2000 t[ns]=0.191436 r[mm]=57.3871 deltaR[mum]=0.000109622 deltaEkin[MeV]=7.45626 deltaAngle(deg)=0.00876866 + Event#=3000 t[ns]=0.25982 r[mm]=77.8865 deltaR[mum]=0.000162701 deltaEkin[MeV]=6.73648 deltaAngle(deg)=0.0104306 + Event#=4000 t[ns]=0.0514527 r[mm]=15.424 deltaR[mum]=7.7622e-07 deltaEkin[MeV]=2.56315 deltaAngle(deg)=0.00210107 + Event#=5000 t[ns]=0.441523 r[mm]=132.356 deltaR[mum]=0.000998976 deltaEkin[MeV]=13.5482 deltaAngle(deg)=0.0186999 + Event#=6000 t[ns]=0.0630068 r[mm]=18.8876 deltaR[mum]=4.76844e-06 deltaEkin[MeV]=4.43199 deltaAngle(deg)=0.00265613 + Event#=7000 t[ns]=0.0414733 r[mm]=12.4325 deltaR[mum]=4.76289e-07 deltaEkin[MeV]=1.43994 deltaAngle(deg)=0.00187458 + Event#=8000 t[ns]=0.0508007 r[mm]=15.2286 deltaR[mum]=7.54284e-07 deltaEkin[MeV]=2.08524 deltaAngle(deg)=0.00237014 + Event#=9000 t[ns]=0.0993651 r[mm]=29.7868 deltaR[mum]=6.27467e-06 deltaEkin[MeV]=6.83806 deltaAngle(deg)=0.00459312 Run terminated. Run Summary Number of events processed : 10000 - User=0.360000s Real=0.363263s Sys=0.000000s + User=0.290000s Real=0.501874s Sys=0.000000s ============ Run::printInfo() =============== RunID = 30 @@ -2868,45 +2869,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9794 + # Decays = 9842 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=9.07131e-06 mean=0.138547 max=1.32362 - decay R [mm] : min=0.00271932 mean=41.5324 max=396.783 - decay X [mm] : min=0.00271932 mean=41.5324 max=396.783 - decay Y [mm] : min=-0.00433321 mean=0.00442806 max=0.187595 - decay Z [mm] : min=-0.0133677 mean=1.03483e-05 max=0.0255915 - Delta decay R [mm] : min=-3.46945e-18 mean=1.64869e-07 max=1.93597e-05 - deflection angle [deg] : min=0 mean=0.00569115 max=0.0540355 - Delta Ekin [MeV] : min=0 mean=6.85569 max=1569.41 - decay Ekin [GeV] : min=498.431 mean=499.993 max=500 - decay Px [GeV] : min=504.44 mean=506.003 max=506.01 - decay Py [GeV] : min=-0.131331 mean=0.0498329 max=0.477243 - decay Pz [GeV] : min=-0.0898716 mean=-2.91522e-05 max=0.138156 - decay Etot violation [MeV] : min=-1.21188e-06 mean=1.48985e-07 max=1.75147e-06 - decay Px violation [MeV] : min=-1.21188e-06 mean=1.48969e-07 max=1.75158e-06 - decay Py violation [MeV] : min=-5.66843e-10 mean=1.11202e-11 max=6.85873e-10 - decay Pz violation [MeV] : min=-9.69607e-11 mean=-4.56525e-14 max=1.77693e-10 + decay T [ns] : min=7.21522e-06 mean=0.137149 max=1.16014 + decay R [mm] : min=0.00216291 mean=41.1134 max=347.775 + decay X [mm] : min=0.00216291 mean=41.1134 max=347.775 + decay Y [mm] : min=-0.00228388 mean=0.00435593 max=0.146296 + decay Z [mm] : min=-0.0324392 mean=-4.10747e-06 max=0.031557 + Delta decay R [mm] : min=-3.46945e-18 mean=1.53534e-07 max=1.12702e-05 + deflection angle [deg] : min=0 mean=0.00563747 max=0.0480347 + Delta Ekin [MeV] : min=0 mean=6.11204 max=418.97 + decay Ekin [GeV] : min=499.581 mean=499.994 max=500 + decay Px [GeV] : min=505.591 mean=506.004 max=506.01 + decay Py [GeV] : min=-0.0397693 mean=0.0493928 max=0.423942 + decay Pz [GeV] : min=-0.172271 mean=-5.30344e-05 max=0.107991 + decay Etot violation [MeV] : min=-2.00875e-06 mean=1.54061e-07 max=1.66235e-06 + decay Px violation [MeV] : min=-2.0088e-06 mean=1.54044e-07 max=1.66235e-06 + decay Py violation [MeV] : min=-5.1142e-10 mean=1.10069e-11 max=6.60407e-10 + decay Pz violation [MeV] : min=-2.23679e-10 mean=-1.37833e-13 max=1.46997e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.0208966 (mean=0.0044369) - maxBeta_deltaMax{1,2} = 3.33067e-16 , 5.55112e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.10802e-10 , 1.10802e-10 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.0158498 (mean=0.00439393) + maxBeta_deltaMax{1,2} = 3.33067e-16 , 4.44089e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.09708e-10 , 1.09708e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 1.13687e-10 (mean=4.65181e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 1.13687e-10 (mean=4.53596e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -57.9186 (mean=-0.307552) (#above threshold = 109) - maxOverestimated_mc_truth_rPos_delta [mum] = 123.231 (mean=0.490235) (#above threshold = 1250) - minUnderestimated_rDeltaPos [mum] = -57.9109 (mean=-0.307387) (#above threshold = 109) - maxOverestimated_rDeltaPos [mum] = 123.25 (mean=0.4904) (#above threshold = 1250) + minUnderestimated_mc_truth_rPos_delta [mum] = -13.5867 (mean=-0.282596) (#above threshold = 119) + maxOverestimated_mc_truth_rPos_delta [mum] = 36.0533 (mean=0.429637) (#above threshold = 1267) + minUnderestimated_rDeltaPos [mum] = -13.5835 (mean=-0.282443) (#above threshold = 119) + maxOverestimated_rDeltaPos [mum] = 36.0586 (mean=0.429791) (#above threshold = 1267) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0398055 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0679674 ============================================= @@ -2930,20 +2931,20 @@ Index : 1 used in the geometry : Yes ### Run 31 starts. ### Run 31 starts. - Event#=0 t[ns]=0.00441713 r[mm]=1.32413 deltaR[mum]=5.42899e-10 deltaEkin[MeV]=0 deltaAngle(deg)=0.000179774 - Event#=1000 t[ns]=0.0361539 r[mm]=10.8379 deltaR[mum]=3.35618e-07 deltaEkin[MeV]=0.550993 deltaAngle(deg)=0.00135904 - Event#=2000 t[ns]=0.071583 r[mm]=21.4585 deltaR[mum]=1.11111e-05 deltaEkin[MeV]=7.15067 deltaAngle(deg)=0.00298299 - Event#=3000 t[ns]=0.0138727 r[mm]=4.15864 deltaR[mum]=1.68292e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000564613 - Event#=4000 t[ns]=0.0473539 r[mm]=14.1953 deltaR[mum]=6.4451e-07 deltaEkin[MeV]=1.92107 deltaAngle(deg)=0.0015973 - Event#=5000 t[ns]=0.0559313 r[mm]=16.7666 deltaR[mum]=9.38748e-07 deltaEkin[MeV]=2.94127 deltaAngle(deg)=0.00228459 - Event#=6000 t[ns]=0.0889985 r[mm]=26.6792 deltaR[mum]=3.13125e-06 deltaEkin[MeV]=5.75065 deltaAngle(deg)=0.00285973 - Event#=7000 t[ns]=0.046569 r[mm]=13.96 deltaR[mum]=6.2083e-07 deltaEkin[MeV]=1.69698 deltaAngle(deg)=0.00199272 - Event#=8000 t[ns]=0.0658646 r[mm]=19.7443 deltaR[mum]=6.30567e-06 deltaEkin[MeV]=5.48293 deltaAngle(deg)=0.00225057 - Event#=9000 t[ns]=0.0351136 r[mm]=10.526 deltaR[mum]=7.11109e-07 deltaEkin[MeV]=1.33959 deltaAngle(deg)=0.0015098 + Event#=0 t[ns]=0.0189491 r[mm]=5.68038 deltaR[mum]=4.2891e-08 deltaEkin[MeV]=0 deltaAngle(deg)=0.000771219 + Event#=1000 t[ns]=0.0286268 r[mm]=8.5815 deltaR[mum]=1.47883e-07 deltaEkin[MeV]=0 deltaAngle(deg)=0.0011651 + Event#=2000 t[ns]=0.208074 r[mm]=62.3745 deltaR[mum]=0.000145719 deltaEkin[MeV]=8.19378 deltaAngle(deg)=0.00953396 + Event#=3000 t[ns]=0.163565 r[mm]=49.0321 deltaR[mum]=6.47372e-05 deltaEkin[MeV]=7.11146 deltaAngle(deg)=0.00698154 + Event#=4000 t[ns]=0.0444521 r[mm]=13.3254 deltaR[mum]=5.59032e-07 deltaEkin[MeV]=1.82449 deltaAngle(deg)=0.00184047 + Event#=5000 t[ns]=0.0891836 r[mm]=26.7347 deltaR[mum]=3.15006e-06 deltaEkin[MeV]=6.48869 deltaAngle(deg)=0.00274405 + Event#=6000 t[ns]=0.0638938 r[mm]=19.1535 deltaR[mum]=6.69558e-06 deltaEkin[MeV]=5.8236 deltaAngle(deg)=0.00264195 + Event#=7000 t[ns]=0.0865486 r[mm]=25.9448 deltaR[mum]=2.89042e-06 deltaEkin[MeV]=6.57903 deltaAngle(deg)=0.00294752 + Event#=8000 t[ns]=0.0572072 r[mm]=17.149 deltaR[mum]=1.06794e-05 deltaEkin[MeV]=14.4716 deltaAngle(deg)=0.00280429 + Event#=9000 t[ns]=0.13391 r[mm]=40.1423 deltaR[mum]=3.69779e-05 deltaEkin[MeV]=7.33091 deltaAngle(deg)=0.00595765 Run terminated. Run Summary Number of events processed : 10000 - User=0.340000s Real=0.349562s Sys=0.000000s + User=0.300000s Real=0.348784s Sys=0.000000s ============ Run::printInfo() =============== RunID = 31 @@ -2960,45 +2961,45 @@ Run Summary isPreassignedDecayEnabled = 1 isBoostToLabEnabled = 1 # Events = 10000 - # Decays = 9808 + # Decays = 9817 (# Bad decays = 0 ) (# Unexpected decays = 0 ) # E violations = 0 # P violations = 0 - decay T [ns] : min=1.77716e-05 mean=0.134397 max=1.30498 - decay R [mm] : min=0.00532742 mean=40.2883 max=391.196 - decay X [mm] : min=0.00532742 mean=40.2883 max=391.196 - decay Y [mm] : min=-0.185463 mean=-0.00420823 max=0.0057132 - decay Z [mm] : min=-0.0426246 mean=-1.35727e-05 max=0.0324221 - Delta decay R [mm] : min=-3.46945e-18 mean=1.50283e-07 max=1.50098e-05 - deflection angle [deg] : min=0 mean=0.0055403 max=0.0537571 - Delta Ekin [MeV] : min=0 mean=6.17529 max=1062.66 - decay Ekin [GeV] : min=498.937 mean=499.994 max=500 - decay Px [GeV] : min=504.947 mean=506.004 max=506.01 - decay Py [GeV] : min=-0.474798 mean=-0.0484172 max=0.0838615 - decay Pz [GeV] : min=-0.338394 mean=-3.42067e-05 max=0.255965 - decay Etot violation [MeV] : min=-1.34885e-06 mean=1.50699e-07 max=1.59221e-06 - decay Px violation [MeV] : min=-1.34879e-06 mean=1.50682e-07 max=1.59215e-06 - decay Py violation [MeV] : min=-7.09804e-10 mean=-1.02396e-11 max=4.7703e-10 - decay Pz violation [MeV] : min=-1.93154e-10 mean=-4.41046e-14 max=2.00444e-10 + decay T [ns] : min=3.63293e-06 mean=0.137152 max=1.2788 + decay R [mm] : min=0.00108905 mean=41.1141 max=383.347 + decay X [mm] : min=0.00108905 mean=41.1141 max=383.347 + decay Y [mm] : min=-0.174998 mean=-0.00437874 max=0.00820348 + decay Z [mm] : min=-0.0167145 mean=-1.66487e-06 max=0.0182056 + Delta decay R [mm] : min=-3.46945e-18 mean=1.74835e-07 max=8.8636e-05 + deflection angle [deg] : min=0 mean=0.00562374 max=0.0521831 + Delta Ekin [MeV] : min=0 mean=6.97978 max=2107.61 + decay Ekin [GeV] : min=497.892 mean=499.993 max=500 + decay Px [GeV] : min=503.902 mean=506.003 max=506.01 + decay Py [GeV] : min=-0.460867 mean=-0.0491823 max=0.163742 + decay Pz [GeV] : min=-0.101942 mean=-1.29601e-05 max=0.259215 + decay Etot violation [MeV] : min=-1.30106e-06 mean=1.46045e-07 max=1.8602e-06 + decay Px violation [MeV] : min=-1.30112e-06 mean=1.46029e-07 max=1.86026e-06 + decay Py violation [MeV] : min=-8.56005e-10 mean=-1.02961e-11 max=8.39179e-10 + decay Pz violation [MeV] : min=-1.25311e-10 mean=-1.86e-14 max=1.78375e-10 --- Consistency checks --- maxEkin_deltaMax [eV] = 0 maxEtot_deltaMax [eV] = 0 maxP_deltaMax [eV] = 0 maxPdir_deltaMax = 0 - maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.0208966 (mean=0.00440648) - maxBeta_deltaMax{1,2} = 4.44089e-16 , 4.44089e-16 - maxGamma_deltaMax{1,2,3} = 0 , 1.04166e-10 , 1.04166e-10 + maxMass_deltaMax{1,2,3} [eV] = 0 , 2.36469e-05 , 0.0183736 (mean=0.00442046) + maxBeta_deltaMax{1,2} = 3.33067e-16 , 5.55112e-16 + maxGamma_deltaMax{1,2,3} = 0 , 1.06084e-10 , 1.06084e-10 maxT_proper_deltaMax [fs] = 0 maxT_lab_deltaMax [fs] = 0 - maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=4.48405e-12) (# above threshold = 0) + maxMc_truth_rPos_deltaMax [mum] = 5.68434e-11 (mean=4.54667e-12) (# above threshold = 0) --- Extra checks --- - minUnderestimated_mc_truth_rPos_delta [mum] = -46.5217 (mean=-0.282242) (#above threshold = 120) - maxOverestimated_mc_truth_rPos_delta [mum] = 95.5949 (mean=0.440012) (#above threshold = 1245) - minUnderestimated_rDeltaPos [mum] = -46.51 (mean=-0.282091) (#above threshold = 120) - maxOverestimated_rDeltaPos [mum] = 95.6092 (mean=0.440162) (#above threshold = 1245) + minUnderestimated_mc_truth_rPos_delta [mum] = -81.6947 (mean=-0.316123) (#above threshold = 132) + maxOverestimated_mc_truth_rPos_delta [mum] = 612.938 (mean=0.551714) (#above threshold = 1248) + minUnderestimated_rDeltaPos [mum] = -81.6915 (mean=-0.315949) (#above threshold = 132) + maxOverestimated_rDeltaPos [mum] = 613.027 (mean=0.551889) (#above threshold = 1249) --- float instead of double --- - fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0661318 + fMaxFloat_rDeltaPos_deltaMax [mum] = 0.0658629 ============================================= ================== Deleting memory pools =================== diff --git a/examples/extended/hadronic/History b/examples/extended/hadronic/History index b6c0365d592..0cb82a30620 100644 --- a/examples/extended/hadronic/History +++ b/examples/extended/hadronic/History @@ -4,6 +4,10 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2022-05-09 G. Hugo (exHadronic-V11-01-00) +- Add a G4-FLUKA interface and two G4 hadronic examples, +providing access to FLUKA hadron-nucleus inelastic physics. + ## 2022-10-25 I. Hrivnacova (exHadronic-V11-00-02) - Fixed link to new ParticleFluence example in Doxygen documentation diff --git a/examples/extended/hadronic/NeutronSource/NeutronSource.out b/examples/extended/hadronic/NeutronSource/NeutronSource.out index b80bac1d728..27c68140a9f 100644 --- a/examples/extended/hadronic/NeutronSource/NeutronSource.out +++ b/examples/extended/hadronic/NeutronSource/NeutronSource.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -118,6 +118,7 @@ Threshold for very long decay time at rest 3.171e+10 y ProduceFissionFragments ? 0 UseWendtFissionModel ? 0 UseNRESP71Model ? 0 + UseDBRC ? 0 ======================================================= @@@ G4ParticleHPInelastic instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic @@ -448,12 +449,21 @@ Threshold for very long decay time at rest 3.171e+10 y ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -515,68 +525,70 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=3.410000s Real=3.472338s Sys=0.000000s + User=2.770000s Real=3.300536s Sys=0.000000s The run is 10000 Am241 of 0 eV within BeO (D = 3 cm L = 6 cm ) Process calls frequency : - NoProcess= 10007 Radioactivation= 225454 Rayl= 2505 - Transportation= 170294 alphaInelastic= 9 annihil= 1 - compt= 22331 conv= 1 eIoni= 195387 - ionIoni= 323940 msc= 10714 neutronInelastic= 1 - phot= 13070 + NoProcess= 10002 Radioactivation= 225289 Rayl= 2498 + Transportation= 169747 alphaInelastic= 5 annihil= 1 + compt= 22373 conv= 1 eIoni= 195762 + ionIoni= 323991 msc= 10456 phot= 13087 + List of generated particles (with meanLife != 0) : - Ac225: 9997 Emean = 162.13 meV ( 1.8626 meV --> 1.1284 eV ) mean life = 14.427 d - Ac225[40.090]: 6972 Emean = 379.13 meV ( 1.4843 meV --> 993.6 meV) mean life = 1.0387 ns - At217: 9986 Emean = 116.36 keV ( 106.36 keV --> 117.05 keV) mean life = 46.599 ms - Bi209: 10000 Emean = 1.222 eV ( 3.7544 meV --> 2.7426 eV ) stable - Bi213: 9985 Emean = 132.93 keV ( 8.9853 eV --> 132.95 keV) mean life = 1.0962 h - C12: 7 Emean = 1.5461 MeV ( 371.87 keV --> 2.8528 MeV) stable - Fr221: 9999 Emean = 77.345 keV ( 3.2596 meV --> 105.65 keV) mean life = 7.0692 min - Fr221[36.640]: 2632 Emean = 104.45 keV ( 95.458 keV --> 105 keV) mean life = 2.164 ns - Np237: 10000 Emean = 680.51 eV ( 2.5029 meV --> 93.678 keV) mean life = 3.0953e+06 y - Np237[59.541]: 9927 Emean = 92.561 keV ( 87.355 keV --> 92.688 keV) mean life = 96.949 ns - Pa233: 10000 Emean = 36.339 keV ( 7.5088 meV --> 83.776 keV) mean life = 38.917 d - Pa233[86.468]: 5565 Emean = 81.965 keV ( 78.476 keV --> 82.314 keV) mean life = 51.504 ns - Pb209: 10000 Emean = 156.78 keV ( 1.5582 eV --> 160.59 keV) mean life = 4.6931 h - Pb209[2149.430]: 230 Emean = 7.1456 eV ( 214.82 meV --> 12.714 eV ) mean life = 5.7131 ns + Ac225: 9999 Emean = 161.58 meV ( 3.4051 meV --> 1.1521 eV ) mean life = 14.427 d + Ac225[40.090]: 7014 Emean = 375.31 meV ( 1.397 meV --> 995.35 meV) mean life = 1.0387 ns + At217: 9988 Emean = 116.33 keV ( 101.67 keV --> 117.05 keV) mean life = 46.599 ms + Bi209: 10000 Emean = 1.2129 eV ( 2.9686 meV --> 2.7137 eV ) stable + Bi213: 9989 Emean = 132.93 keV ( 1.4517 eV --> 132.95 keV) mean life = 1.0962 h + C12: 2 Emean = 2.2692 MeV ( 1.3724 MeV --> 3.166 MeV) stable + Fr221: 9999 Emean = 77.282 keV ( 3.2596 meV --> 105.65 keV) mean life = 7.0692 min + Fr221[36.640]: 2642 Emean = 104.39 keV ( 94.645 keV --> 105 keV) mean life = 2.164 ns + Np237: 10000 Emean = 671.68 eV ( 2.5029 meV --> 93.678 keV) mean life = 3.0953e+06 y + Np237[59.541]: 9928 Emean = 92.565 keV ( 88.441 keV --> 92.688 keV) mean life = 96.949 ns + Pa233: 10000 Emean = 37.162 keV ( 7.5088 meV --> 83.776 keV) mean life = 38.917 d + Pa233[86.468]: 5466 Emean = 81.938 keV ( 78.476 keV --> 82.314 keV) mean life = 51.504 ns + Pb209: 10000 Emean = 157.26 keV ( 1.5582 eV --> 160.59 keV) mean life = 4.6931 h + Pb209[1423.000]: 2 Emean = 8.4493 eV ( 6.9681 eV --> 9.9306 eV ) mean life = 2.0198 ns + Pb209[2149.430]: 200 Emean = 7.2558 eV ( 424.86 meV --> 13.282 eV ) mean life = 5.7131 ns Pb213: 1 Emean = 122.98 keV ( 122.98 keV --> 122.98 keV) mean life = 14.715 min - Po213: 9763 Emean = 226.96 eV ( 9.4878 meV --> 145.62 keV) mean life = 5.3668 us + Po213: 9793 Emean = 166.8 eV ( 35.187 meV --> 145.62 keV) mean life = 5.3668 us Po217: 1 Emean = 111.69 keV ( 111.69 keV --> 111.69 keV) mean life = 2.1063 s - Ra221: 13 Emean = 294.02 meV ( 45.78 meV --> 605.8 meV) mean life = 40.395 s - Ra225: 10000 Emean = 783.9 eV ( 1.5425 meV --> 314.6 keV) mean life = 21.496 d - Ra225[25.410]: 8098 Emean = 66.268 keV ( 0.7276 meV --> 342.22 keV) mean life = 1.2696 ns - Ra225[31.560]: 523 Emean = 94.788 keV ( 4.4038 keV --> 334.13 keV) mean life = 3.0297 ns - Ra225[42.770]: 3880 Emean = 96.849 keV ( 237.52 meV --> 335.98 keV) mean life = 4.3281 ns - Rn217: 15 Emean = 41.571 keV ( 41.531 meV --> 124.71 keV) mean life = 779.06 us - Rn217[149.180]: 4 Emean = 122.01 keV ( 122.01 keV --> 122.01 keV) mean life = 2.164 ns - Rn217[93.020]: 4 Emean = 122.61 keV ( 121.36 keV --> 123.03 keV) mean life = 5.7708 ns - Rn221: 3 Emean = 90.535 keV ( 90.177 keV --> 90.714 keV) mean life = 36.067 min - Th229: 8776 Emean = 84.319 keV ( 80.433 keV --> 84.358 keV) mean life = 11376 y - Tl209: 237 Emean = 111.94 keV ( 106.13 keV --> 112.51 keV) mean life = 3.1739 min - U233: 10000 Emean = 352.5 meV ( 3.7544 meV --> 1.996 eV ) mean life = 2.2983e+05 y - alpha: 80000 Emean = 5.9262 MeV ( 4.4847 MeV --> 8.3755 MeV) stable - anti_nu_e: 40000 Emean = 423.4 keV ( 5.5193 keV --> 1.8008 MeV) stable - e+: 1 Emean = 437.82 keV ( 437.82 keV --> 437.82 keV) stable - e-: 155511 Emean = 83.311 keV ( 1.2255 eV --> 4.2356 MeV) stable - gamma: 25125 Emean = 200.94 keV ( 5.6567 keV --> 4.5015 MeV) stable - neutron: 9 Emean = 3.4135 MeV ( 327.61 keV --> 5.5948 MeV) mean life = 14.67 min - - Mean energy deposit per event = 49.569 MeV rms = 490.95 keV - Mean energy flow per event = 2.0346 MeV rms = 534.76 keV + Ra221: 11 Emean = 338.59 meV ( 79.57 meV --> 768.31 meV) mean life = 40.395 s + Ra225: 10000 Emean = 1.0269 keV ( 2.3865 meV --> 330.28 keV) mean life = 21.496 d + Ra225[25.410]: 8077 Emean = 65.368 keV ( 0.7276 meV --> 341.2 keV) mean life = 1.2696 ns + Ra225[31.560]: 516 Emean = 96.298 keV ( 10.681 meV --> 337.8 keV) mean life = 3.0297 ns + Ra225[42.770]: 3942 Emean = 96.078 keV ( 7.9744 meV --> 336.73 keV) mean life = 4.3281 ns + Rn217: 11 Emean = 45.35 keV ( 21.42 meV --> 124.71 keV) mean life = 779.06 us + Rn217[149.180]: 6 Emean = 121.9 keV ( 121.39 keV --> 122.01 keV) mean life = 2.164 ns + Rn217[174.300]: 1 Emean = 121.55 keV ( 121.55 keV --> 121.55 keV) mean life = 2.164 ns + Rn217[93.020]: 1 Emean = 99.972 meV ( 99.972 meV --> 99.972 meV) mean life = 5.7708 ns + Rn221: 1 Emean = 90.204 keV ( 90.204 keV --> 90.204 keV) mean life = 36.067 min + Th229: 8734 Emean = 84.326 keV ( 80.731 keV --> 84.358 keV) mean life = 11376 y + Tl209: 207 Emean = 111.94 keV ( 106.08 keV --> 112.51 keV) mean life = 3.1739 min + U233: 10000 Emean = 360.18 meV ( 3.7544 meV --> 1.9473 eV ) mean life = 2.2983e+05 y + alpha: 80000 Emean = 5.9272 MeV ( 4.4847 MeV --> 8.3755 MeV) stable + anti_nu_e: 40000 Emean = 423.6 keV ( 5.0486 keV --> 1.8213 MeV) stable + e+: 1 Emean = 682.87 keV ( 682.87 keV --> 682.87 keV) stable + e-: 155519 Emean = 83.314 keV ( 650.31 meV --> 1.6218 MeV) stable + gamma: 24993 Emean = 195.87 keV ( 5.4363 keV --> 9.5148 MeV) stable + neutron: 2 Emean = 6.5182 MeV ( 569.68 keV --> 12.467 MeV) mean life = 14.67 min + + Mean energy deposit per event = 49.578 MeV rms = 472.88 keV + Mean energy flow per event = 2.0232 MeV rms = 498.2 keV List of particles emerging from the container : - anti_nu_e: 40000 Emean = 423.4 keV ( 5.5193 keV --> 1.8008 MeV) Eflow/event = 1.6936 MeV - e-: 13 Emean = 240.17 keV ( 50.07 keV --> 1.2262 MeV) Eflow/event = 312.22 eV - gamma: 12054 Emean = 280.35 keV ( 40.09 keV --> 4.5015 MeV) Eflow/event = 337.93 keV - neutron: 8 Emean = 3.4284 MeV ( 327.61 keV --> 5.5948 MeV) Eflow/event = 2.7427 keV + anti_nu_e: 40000 Emean = 423.6 keV ( 5.0486 keV --> 1.8213 MeV) Eflow/event = 1.6944 MeV + e-: 14 Emean = 153.86 keV ( 18.982 keV --> 421.47 keV) Eflow/event = 215.4 eV + gamma: 11905 Emean = 274.89 keV ( 40.09 keV --> 9.5148 MeV) Eflow/event = 327.26 keV + neutron: 2 Emean = 6.5182 MeV ( 569.68 keV --> 12.467 MeV) Eflow/event = 1.3036 keV --------- Ranecu engine status --------- Initial seed (index) = 0 - Current couple of seeds = 1050100780, 998776150 + Current couple of seeds = 2144625660, 172261950 ---------------------------------------- ================== Deleting memory pools =================== Number of memory pools allocated: 11 of which, static: 0 -Dynamic pools deleted: 11 / Total memory freed: 0.032 MB +Dynamic pools deleted: 11 / Total memory freed: 0.033 MB ============================================================ diff --git a/examples/extended/hadronic/ParticleFluence/Calo/Calo.out b/examples/extended/hadronic/ParticleFluence/Calo/Calo.out index 0c14f4b6ec2..5ad3ace9042 100644 --- a/examples/extended/hadronic/ParticleFluence/Calo/Calo.out +++ b/examples/extended/hadronic/ParticleFluence/Calo/Calo.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -175,7 +175,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -207,7 +207,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -239,7 +239,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -252,7 +252,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -298,7 +297,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -330,7 +329,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -362,7 +361,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -394,7 +393,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -426,7 +425,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -458,7 +457,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -490,7 +489,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -876,12 +875,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ### G4LevelReader: broken transition 0 from level 24 to 24 for isotope Z= 89 A= 219 - use ground level ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -946,7 +954,7 @@ Index : 3 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=53.000000s Real=53.429357s Sys=0.030000s + User=44.760000s Real=45.256144s Sys=0.020000s =============== Run::PrintInfo() =============== RunID = 0 @@ -960,143 +968,143 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.000442131 - case= 1 downstream electron 2.10248e-06 - case= 2 downstream gamma 0.000142605 - case= 3 downstream muon 0 - case= 4 downstream neutrino 6.52107e-05 - case= 5 downstream pion 6.6959e-07 - case= 6 downstream neutron 0.000230249 - case= 7 downstream proton 7.03382e-07 + case= 0 downstream all 0.000534531 + case= 1 downstream electron 3.26208e-06 + case= 2 downstream gamma 0.000135739 + case= 3 downstream muon 6.2069e-07 + case= 4 downstream neutrino 6.22869e-05 + case= 5 downstream pion 2.66425e-06 + case= 6 downstream neutron 0.000327911 + case= 7 downstream proton 2.04657e-06 case= 8 downstream ion 0 - case= 9 downstream otherMeson 5.91033e-07 + case= 9 downstream otherMeson 0 case= 10 downstream otherBaryon 0 - case= 11 downstream below 20 MeV all 0.000362245 - case= 12 downstream below 20 MeV electron 2.10248e-06 - case= 13 downstream below 20 MeV gamma 0.000142027 + case= 11 downstream below 20 MeV all 0.000429067 + case= 12 downstream below 20 MeV electron 3.26208e-06 + case= 13 downstream below 20 MeV gamma 0.000135059 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 7.49331e-06 + case= 15 downstream below 20 MeV neutrino 3.57828e-06 case= 16 downstream below 20 MeV pion 0 - case= 17 downstream below 20 MeV neutron 0.000210622 + case= 17 downstream below 20 MeV neutron 0.000287168 case= 18 downstream below 20 MeV proton 0 case= 19 downstream below 20 MeV ion 0 case= 20 downstream below 20 MeV otherMeson 0 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 7.98859e-05 + case= 22 downstream above 20 MeV all 0.000105463 case= 23 downstream above 20 MeV electron 0 - case= 24 downstream above 20 MeV gamma 5.77292e-07 - case= 25 downstream above 20 MeV muon 0 - case= 26 downstream above 20 MeV neutrino 5.77174e-05 - case= 27 downstream above 20 MeV pion 6.6959e-07 - case= 28 downstream above 20 MeV neutron 1.96272e-05 - case= 29 downstream above 20 MeV proton 7.03382e-07 + case= 24 downstream above 20 MeV gamma 6.79929e-07 + case= 25 downstream above 20 MeV muon 6.2069e-07 + case= 26 downstream above 20 MeV neutrino 5.87086e-05 + case= 27 downstream above 20 MeV pion 2.66425e-06 + case= 28 downstream above 20 MeV neutron 4.07432e-05 + case= 29 downstream above 20 MeV proton 2.04657e-06 case= 30 downstream above 20 MeV ion 0 - case= 31 downstream above 20 MeV otherMeson 5.91033e-07 + case= 31 downstream above 20 MeV otherMeson 0 case= 32 downstream above 20 MeV otherBaryon 0 - case= 33 side all 0.0006658 - case= 34 side electron 4.13627e-06 - case= 35 side gamma 0.000117138 + case= 33 side all 0.000595201 + case= 34 side electron 1.70985e-06 + case= 35 side gamma 0.000100359 case= 36 side muon 0 - case= 37 side neutrino 0.000127658 + case= 37 side neutrino 0.000113819 case= 38 side pion 0 - case= 39 side neutron 0.000416266 - case= 40 side proton 6.01308e-07 + case= 39 side neutron 0.000378833 + case= 40 side proton 4.80419e-07 case= 41 side ion 0 case= 42 side otherMeson 0 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.000514693 - case= 45 side below 20 MeV electron 4.13627e-06 - case= 46 side below 20 MeV gamma 0.000117138 + case= 44 side below 20 MeV all 0.000462175 + case= 45 side below 20 MeV electron 1.70985e-06 + case= 46 side below 20 MeV gamma 0.000100253 case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 9.95571e-06 + case= 48 side below 20 MeV neutrino 1.02201e-05 case= 49 side below 20 MeV pion 0 - case= 50 side below 20 MeV neutron 0.000383308 - case= 51 side below 20 MeV proton 1.55278e-07 + case= 50 side below 20 MeV neutron 0.000349731 + case= 51 side below 20 MeV proton 2.60861e-07 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000151106 + case= 55 side above 20 MeV all 0.000133026 case= 56 side above 20 MeV electron 0 - case= 57 side above 20 MeV gamma 0 + case= 57 side above 20 MeV gamma 1.05538e-07 case= 58 side above 20 MeV muon 0 - case= 59 side above 20 MeV neutrino 0.000117702 + case= 59 side above 20 MeV neutrino 0.000103599 case= 60 side above 20 MeV pion 0 - case= 61 side above 20 MeV neutron 3.29584e-05 - case= 62 side above 20 MeV proton 4.4603e-07 + case= 61 side above 20 MeV neutron 2.91019e-05 + case= 62 side above 20 MeV proton 2.19558e-07 case= 63 side above 20 MeV ion 0 case= 64 side above 20 MeV otherMeson 0 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.00522814 - case= 67 upstream electron 2.57165e-05 - case= 68 upstream gamma 0.00151163 + case= 66 upstream all 0.00445826 + case= 67 upstream electron 5.08463e-06 + case= 68 upstream gamma 0.0011685 case= 69 upstream muon 0 - case= 70 upstream neutrino 0.000297924 - case= 71 upstream pion 2.89588e-06 - case= 72 upstream neutron 0.00338517 - case= 73 upstream proton 4.80436e-06 + case= 70 upstream neutrino 0.000283777 + case= 71 upstream pion 2.83511e-06 + case= 72 upstream neutron 0.00299617 + case= 73 upstream proton 1.89644e-06 case= 74 upstream ion 0 case= 75 upstream otherMeson 0 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.00471685 - case= 78 upstream below 20 MeV electron 2.26541e-05 - case= 79 upstream below 20 MeV gamma 0.00150161 + case= 77 upstream below 20 MeV all 0.00403448 + case= 78 upstream below 20 MeV electron 5.08463e-06 + case= 79 upstream below 20 MeV gamma 0.00116106 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 1.70106e-05 + case= 81 upstream below 20 MeV neutrino 2.35117e-05 case= 82 upstream below 20 MeV pion 0 - case= 83 upstream below 20 MeV neutron 0.00317558 + case= 83 upstream below 20 MeV neutron 0.00284482 case= 84 upstream below 20 MeV proton 0 case= 85 upstream below 20 MeV ion 0 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 0.000511289 - case= 89 upstream above 20 MeV electron 3.06234e-06 - case= 90 upstream above 20 MeV gamma 1.00233e-05 + case= 88 upstream above 20 MeV all 0.00042378 + case= 89 upstream above 20 MeV electron 0 + case= 90 upstream above 20 MeV gamma 7.43497e-06 case= 91 upstream above 20 MeV muon 0 - case= 92 upstream above 20 MeV neutrino 0.000280913 - case= 93 upstream above 20 MeV pion 2.89588e-06 - case= 94 upstream above 20 MeV neutron 0.00020959 - case= 95 upstream above 20 MeV proton 4.80436e-06 + case= 92 upstream above 20 MeV neutrino 0.000260265 + case= 93 upstream above 20 MeV pion 2.83511e-06 + case= 94 upstream above 20 MeV neutron 0.000151348 + case= 95 upstream above 20 MeV proton 1.89644e-06 case= 96 upstream above 20 MeV ion 0 case= 97 upstream above 20 MeV otherMeson 0 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 calorimeter all 65658.4 4.02455 264245 - case= 1 calorimeter electron 48622.3 1.56913 76294.7 - case= 2 calorimeter gamma 14259.1 5.24169 74742.1 - case= 3 calorimeter muon 4.91 24.0334 118.004 - case= 4 calorimeter neutrino 14.66 39.5879 580.358 - case= 5 calorimeter pion 51.24 1266.54 64897.6 - case= 6 calorimeter neutron 1049 18.7997 19720.9 - case= 7 calorimeter proton 239.36 62.1747 14882.1 - case= 8 calorimeter ion 1411.99 0.92985 1312.94 - case= 9 calorimeter otherMeson 4.55 2399.64 10918.4 - case= 10 calorimeter otherBaryon 1.17 664.954 777.997 - case= 11 calorimeter below 20 MeV all 64545.6 0.662423 42756.5 - case= 12 calorimeter below 20 MeV electron 48200.7 0.447886 21588.4 - case= 13 calorimeter below 20 MeV gamma 13879.5 1.21431 16854 - case= 14 calorimeter below 20 MeV muon 4.37 4.14233 18.102 - case= 15 calorimeter below 20 MeV neutrino 1.2 14.7559 17.7071 - case= 16 calorimeter below 20 MeV pion 0.95 12.6206 11.9895 - case= 17 calorimeter below 20 MeV neutron 906.44 2.65102 2402.99 - case= 18 calorimeter below 20 MeV proton 153.6 8.14966 1251.79 - case= 19 calorimeter below 20 MeV ion 1398.62 0.435755 609.455 - case= 20 calorimeter below 20 MeV otherMeson 0.2 7.93814 1.58763 - case= 21 calorimeter below 20 MeV otherBaryon 0.04 12.2879 0.491514 - case= 22 calorimeter above 20 MeV all 1112.79 199.039 221489 - case= 23 calorimeter above 20 MeV electron 421.69 129.731 54706.3 - case= 24 calorimeter above 20 MeV gamma 379.64 152.481 57888.1 - case= 25 calorimeter above 20 MeV muon 0.54 185.004 99.902 - case= 26 calorimeter above 20 MeV neutrino 13.46 41.8017 562.651 - case= 27 calorimeter above 20 MeV pion 50.29 1290.23 64885.6 - case= 28 calorimeter above 20 MeV neutron 142.56 121.478 17317.9 - case= 29 calorimeter above 20 MeV proton 85.76 158.936 13630.4 - case= 30 calorimeter above 20 MeV ion 13.37 52.6166 703.484 - case= 31 calorimeter above 20 MeV otherMeson 4.35 2509.61 10916.8 - case= 32 calorimeter above 20 MeV otherBaryon 1.13 688.058 777.505 + case= 0 calorimeter all 66343.9 4.11798 273203 + case= 1 calorimeter electron 49233.1 1.66854 82147.4 + case= 2 calorimeter gamma 14488.2 5.5621 80584.9 + case= 3 calorimeter muon 4.51 30.8084 138.946 + case= 4 calorimeter neutrino 13.42 40.0476 537.439 + case= 5 calorimeter pion 48.2 1302.35 62773.4 + case= 6 calorimeter neutron 988.92 18.8879 18678.6 + case= 7 calorimeter proton 226.71 57.029 12929 + case= 8 calorimeter ion 1334.87 0.957437 1278.05 + case= 9 calorimeter otherMeson 4.8 2694.8 12935.1 + case= 10 calorimeter otherBaryon 1.2 999.876 1199.85 + case= 11 calorimeter below 20 MeV all 65212.5 0.663331 43257.5 + case= 12 calorimeter below 20 MeV electron 48792.6 0.452265 22067.2 + case= 13 calorimeter below 20 MeV gamma 14091.8 1.21489 17119.9 + case= 14 calorimeter below 20 MeV muon 4 4.1591 16.6364 + case= 15 calorimeter below 20 MeV neutrino 1.16 14.9349 17.3245 + case= 16 calorimeter below 20 MeV pion 0.9 12.2925 11.0632 + case= 17 calorimeter below 20 MeV neutron 853.18 2.65097 2261.75 + case= 18 calorimeter below 20 MeV proton 146.23 8.08978 1182.97 + case= 19 calorimeter below 20 MeV ion 1322.39 0.437 577.885 + case= 20 calorimeter below 20 MeV otherMeson 0.14 10.203 1.42843 + case= 21 calorimeter below 20 MeV otherBaryon 0.1 12.6395 1.26395 + case= 22 calorimeter above 20 MeV all 1131.42 203.236 229945 + case= 23 calorimeter above 20 MeV electron 440.42 136.416 60080.2 + case= 24 calorimeter above 20 MeV gamma 396.47 160.075 63465 + case= 25 calorimeter above 20 MeV muon 0.51 239.822 122.309 + case= 26 calorimeter above 20 MeV neutrino 12.26 42.4237 520.114 + case= 27 calorimeter above 20 MeV pion 47.3 1326.9 62762.4 + case= 28 calorimeter above 20 MeV neutron 135.74 120.943 16416.9 + case= 29 calorimeter above 20 MeV proton 80.48 145.95 11746.1 + case= 30 calorimeter above 20 MeV ion 12.48 56.1033 700.17 + case= 31 calorimeter above 20 MeV otherMeson 4.66 2775.46 12933.6 + case= 32 calorimeter above 20 MeV otherBaryon 1.1 1089.62 1198.59 ============================================================= ================== Deleting memory pools =================== Number of memory pools allocated: 13 of which, static: 0 -Dynamic pools deleted: 13 / Total memory freed: 0.24 MB +Dynamic pools deleted: 13 / Total memory freed: 0.25 MB ============================================================ diff --git a/examples/extended/hadronic/ParticleFluence/Calo/History b/examples/extended/hadronic/ParticleFluence/Calo/History index b26a6cb8d7e..71c4a65724d 100644 --- a/examples/extended/hadronic/ParticleFluence/Calo/History +++ b/examples/extended/hadronic/ParticleFluence/Calo/History @@ -5,6 +5,13 @@ which **must** added in reverse chronological order (newest at the top). It must be used as a substitute for writing good git commit messages! +## 2023-05-08 Alberto Ribon (exhadrParticleFluenceCalo-V11-01-00) +- Run, TrackingAction : replaced G4int with G4long for keeping the information + on the multiplicity of particle production. + (This avoids rare cases of negative multiplicities due to integer overflow, + seen for runs with at least 4000 events, in particular with heavy materials, + such as Tungsten and Lead.) + ## 2022-09-07 Alberto Ribon (exhadrParticleFluenceCalo-V11-00-02) - Added complementary information on particle production (multiplicity, kinetic energy, and total energy flow) in the calorimeter. diff --git a/examples/extended/hadronic/ParticleFluence/Calo/include/Run.hh b/examples/extended/hadronic/ParticleFluence/Calo/include/Run.hh index 65277615a65..84ad9462e92 100644 --- a/examples/extended/hadronic/ParticleFluence/Calo/include/Run.hh +++ b/examples/extended/hadronic/ParticleFluence/Calo/include/Run.hh @@ -100,9 +100,9 @@ class Run : public G4Run { // Accessor methods useful to transfer information collected by the stepping-action // into this Run class - void SetTrackingArray1( const std::array< G4int, + void SetTrackingArray1( const std::array< G4long, TrackingAction::fkNumberCombinations >& inputArray ); - std::array< G4int, TrackingAction::fkNumberCombinations > GetTrackingArray1() const + std::array< G4long, TrackingAction::fkNumberCombinations > GetTrackingArray1() const { return fTrackingArray1; } void SetTrackingArray2( const std::array< G4double, TrackingAction::fkNumberCombinations >& inputArray ); @@ -121,7 +121,7 @@ class Run : public G4Run { G4double fCubicVolumeScoringUpDown; G4double fCubicVolumeScoringSide; std::array< G4double, SteppingAction::fkNumberCombinations > fSteppingArray; - std::array< G4int, TrackingAction::fkNumberCombinations > fTrackingArray1; + std::array< G4long, TrackingAction::fkNumberCombinations > fTrackingArray1; std::array< G4double, TrackingAction::fkNumberCombinations > fTrackingArray2; }; diff --git a/examples/extended/hadronic/ParticleFluence/Calo/include/TrackingAction.hh b/examples/extended/hadronic/ParticleFluence/Calo/include/TrackingAction.hh index a039273cd2c..050d8524413 100644 --- a/examples/extended/hadronic/ParticleFluence/Calo/include/TrackingAction.hh +++ b/examples/extended/hadronic/ParticleFluence/Calo/include/TrackingAction.hh @@ -81,7 +81,7 @@ class TrackingAction : public G4UserTrackingAction { private: Run* fRunPtr; // Pointer to the Run object - std::array< G4int, fkNumberCombinations > fArrayMultiplicities; + std::array< G4long, fkNumberCombinations > fArrayMultiplicities; std::array< G4double, fkNumberCombinations > fArraySumKineticEnergies; // Keep record of the fkNumber of particles and their kinetic energy at production, // according to the particle type and their kinetic energy range (below/above 20 MeV). diff --git a/examples/extended/hadronic/ParticleFluence/Calo/src/Run.cc b/examples/extended/hadronic/ParticleFluence/Calo/src/Run.cc index 671056b2268..76dd50c4a8c 100644 --- a/examples/extended/hadronic/ParticleFluence/Calo/src/Run.cc +++ b/examples/extended/hadronic/ParticleFluence/Calo/src/Run.cc @@ -161,7 +161,7 @@ void Run::SetSteppingArray( const std::array< G4double, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Run::SetTrackingArray1( const std::array< G4int, +void Run::SetTrackingArray1( const std::array< G4long, TrackingAction::fkNumberCombinations >& inputArray ) { for ( G4int i = 0; i < TrackingAction::fkNumberCombinations; ++i ) { fTrackingArray1[i] = inputArray[i]; diff --git a/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/ConcentricSpheres.out b/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/ConcentricSpheres.out index ce83f2cddc8..9b6ee05ab4a 100644 --- a/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/ConcentricSpheres.out +++ b/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/ConcentricSpheres.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -203,7 +203,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -235,7 +235,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -267,7 +267,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -280,7 +280,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -326,7 +325,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -358,7 +357,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -390,7 +389,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -422,7 +421,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -454,7 +453,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -486,7 +485,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -518,7 +517,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -903,12 +902,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -973,7 +981,7 @@ Index : 3 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=56.760000s Real=57.237606s Sys=0.020000s + User=46.960000s Real=47.680359s Sys=0.010000s =============== Run::PrintInfo() =============== RunID = 0 @@ -989,198 +997,198 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 tracker forward all 0.0719107 - case= 1 tracker forward electron 0.000846109 - case= 2 tracker forward gamma 0.0156546 - case= 3 tracker forward muon 3.54796e-06 - case= 4 tracker forward neutrino 0.000497906 - case= 5 tracker forward pion 0.000575954 - case= 6 tracker forward neutron 0.0542067 - case= 7 tracker forward proton 9.65849e-05 - case= 8 tracker forward ion 0 - case= 9 tracker forward otherMeson 2.45157e-05 - case= 10 tracker forward otherBaryon 4.89953e-06 - case= 11 tracker backward all 0.0098854 - case= 12 tracker backward electron 8.85577e-05 - case= 13 tracker backward gamma 0.00365388 + case= 0 tracker forward all 0.0744085 + case= 1 tracker forward electron 0.000562224 + case= 2 tracker forward gamma 0.0160186 + case= 3 tracker forward muon 3.52918e-06 + case= 4 tracker forward neutrino 0.00051189 + case= 5 tracker forward pion 0.000592336 + case= 6 tracker forward neutron 0.0565386 + case= 7 tracker forward proton 0.000148034 + case= 8 tracker forward ion 3.11517e-06 + case= 9 tracker forward otherMeson 2.76738e-05 + case= 10 tracker forward otherBaryon 2.47157e-06 + case= 11 tracker backward all 0.0093093 + case= 12 tracker backward electron 4.60773e-05 + case= 13 tracker backward gamma 0.00334192 case= 14 tracker backward muon 0 - case= 15 tracker backward neutrino 0.000185715 + case= 15 tracker backward neutrino 0.000185028 case= 16 tracker backward pion 0 - case= 17 tracker backward neutron 0.00595404 - case= 18 tracker backward proton 3.20371e-06 + case= 17 tracker backward neutron 0.00573628 + case= 18 tracker backward proton 0 case= 19 tracker backward ion 0 case= 20 tracker backward otherMeson 0 case= 21 tracker backward otherBaryon 0 - case= 22 tracker below 20 MeV forward all 0.0690082 - case= 23 tracker below 20 MeV forward electron 0.000663682 - case= 24 tracker below 20 MeV forward gamma 0.0150727 + case= 22 tracker below 20 MeV forward all 0.0714908 + case= 23 tracker below 20 MeV forward electron 0.000424996 + case= 24 tracker below 20 MeV forward gamma 0.0156209 case= 25 tracker below 20 MeV forward muon 0 - case= 26 tracker below 20 MeV forward neutrino 5.88041e-05 - case= 27 tracker below 20 MeV forward pion 3.10541e-06 - case= 28 tracker below 20 MeV forward neutron 0.0532068 - case= 29 tracker below 20 MeV forward proton 3.13868e-06 + case= 26 tracker below 20 MeV forward neutrino 1.06358e-05 + case= 27 tracker below 20 MeV forward pion 5.12784e-06 + case= 28 tracker below 20 MeV forward neutron 0.0553893 + case= 29 tracker below 20 MeV forward proton 3.97737e-05 case= 30 tracker below 20 MeV forward ion 0 case= 31 tracker below 20 MeV forward otherMeson 0 case= 32 tracker below 20 MeV forward otherBaryon 0 - case= 33 tracker below 20 MeV backward all 0.00951426 - case= 34 tracker below 20 MeV backward electron 8.00082e-05 - case= 35 tracker below 20 MeV backward gamma 0.00363909 + case= 33 tracker below 20 MeV backward all 0.00892623 + case= 34 tracker below 20 MeV backward electron 4.60773e-05 + case= 35 tracker below 20 MeV backward gamma 0.00333638 case= 36 tracker below 20 MeV backward muon 0 - case= 37 tracker below 20 MeV backward neutrino 1.07823e-05 + case= 37 tracker below 20 MeV backward neutrino 7.05829e-06 case= 38 tracker below 20 MeV backward pion 0 - case= 39 tracker below 20 MeV backward neutron 0.00578118 - case= 40 tracker below 20 MeV backward proton 3.20371e-06 + case= 39 tracker below 20 MeV backward neutron 0.00553671 + case= 40 tracker below 20 MeV backward proton 0 case= 41 tracker below 20 MeV backward ion 0 case= 42 tracker below 20 MeV backward otherMeson 0 case= 43 tracker below 20 MeV backward otherBaryon 0 - case= 44 tracker above 20 MeV forward all 0.00290251 - case= 45 tracker above 20 MeV forward electron 0.000182427 - case= 46 tracker above 20 MeV forward gamma 0.000581858 - case= 47 tracker above 20 MeV forward muon 3.54796e-06 - case= 48 tracker above 20 MeV forward neutrino 0.000439102 - case= 49 tracker above 20 MeV forward pion 0.000572848 - case= 50 tracker above 20 MeV forward neutron 0.000999868 - case= 51 tracker above 20 MeV forward proton 9.34462e-05 - case= 52 tracker above 20 MeV forward ion 0 - case= 53 tracker above 20 MeV forward otherMeson 2.45157e-05 - case= 54 tracker above 20 MeV forward otherBaryon 4.89953e-06 - case= 55 tracker above 20 MeV backward all 0.000371143 - case= 56 tracker above 20 MeV backward electron 8.54946e-06 - case= 57 tracker above 20 MeV backward gamma 1.47975e-05 + case= 44 tracker above 20 MeV forward all 0.00291773 + case= 45 tracker above 20 MeV forward electron 0.000137228 + case= 46 tracker above 20 MeV forward gamma 0.000397661 + case= 47 tracker above 20 MeV forward muon 3.52918e-06 + case= 48 tracker above 20 MeV forward neutrino 0.000501254 + case= 49 tracker above 20 MeV forward pion 0.000587208 + case= 50 tracker above 20 MeV forward neutron 0.00114933 + case= 51 tracker above 20 MeV forward proton 0.00010826 + case= 52 tracker above 20 MeV forward ion 3.11517e-06 + case= 53 tracker above 20 MeV forward otherMeson 2.76738e-05 + case= 54 tracker above 20 MeV forward otherBaryon 2.47157e-06 + case= 55 tracker above 20 MeV backward all 0.000383076 + case= 56 tracker above 20 MeV backward electron 0 + case= 57 tracker above 20 MeV backward gamma 5.54255e-06 case= 58 tracker above 20 MeV backward muon 0 - case= 59 tracker above 20 MeV backward neutrino 0.000174933 + case= 59 tracker above 20 MeV backward neutrino 0.00017797 case= 60 tracker above 20 MeV backward pion 0 - case= 61 tracker above 20 MeV backward neutron 0.000172864 + case= 61 tracker above 20 MeV backward neutron 0.000199563 case= 62 tracker above 20 MeV backward proton 0 case= 63 tracker above 20 MeV backward ion 0 case= 64 tracker above 20 MeV backward otherMeson 0 case= 65 tracker above 20 MeV backward otherBaryon 0 - case= 66 emCalo forward all 0.0797108 - case= 67 emCalo forward electron 0.000890921 - case= 68 emCalo forward gamma 0.0187618 - case= 69 emCalo forward muon 3.17974e-06 - case= 70 emCalo forward neutrino 0.000371744 - case= 71 emCalo forward pion 0.000211936 - case= 72 emCalo forward neutron 0.0593538 - case= 73 emCalo forward proton 9.65581e-05 - case= 74 emCalo forward ion 2.84874e-06 - case= 75 emCalo forward otherMeson 1.45872e-05 - case= 76 emCalo forward otherBaryon 3.46621e-06 - case= 77 emCalo backward all 0.0048011 - case= 78 emCalo backward electron 2.79283e-05 - case= 79 emCalo backward gamma 0.000664527 + case= 66 emCalo forward all 0.091784 + case= 67 emCalo forward electron 0.00148634 + case= 68 emCalo forward gamma 0.0251445 + case= 69 emCalo forward muon 2.38735e-06 + case= 70 emCalo forward neutrino 0.000360942 + case= 71 emCalo forward pion 0.000259948 + case= 72 emCalo forward neutron 0.0643982 + case= 73 emCalo forward proton 0.000107894 + case= 74 emCalo forward ion 2.73596e-06 + case= 75 emCalo forward otherMeson 1.87623e-05 + case= 76 emCalo forward otherBaryon 2.29115e-06 + case= 77 emCalo backward all 0.00495844 + case= 78 emCalo backward electron 2.42057e-05 + case= 79 emCalo backward gamma 0.000750513 case= 80 emCalo backward muon 0 - case= 81 emCalo backward neutrino 9.02811e-05 + case= 81 emCalo backward neutrino 9.2539e-05 case= 82 emCalo backward pion 0 - case= 83 emCalo backward neutron 0.00401836 + case= 83 emCalo backward neutron 0.00409119 case= 84 emCalo backward proton 0 case= 85 emCalo backward ion 0 case= 86 emCalo backward otherMeson 0 case= 87 emCalo backward otherBaryon 0 - case= 88 emCalo below 20 MeV forward all 0.0776967 - case= 89 emCalo below 20 MeV forward electron 0.000755442 - case= 90 emCalo below 20 MeV forward gamma 0.0184619 - case= 91 emCalo below 20 MeV forward muon 4.46952e-07 - case= 92 emCalo below 20 MeV forward neutrino 3.02602e-05 - case= 93 emCalo below 20 MeV forward pion 1.86982e-06 - case= 94 emCalo below 20 MeV forward neutron 0.0584435 - case= 95 emCalo below 20 MeV forward proton 2.8134e-06 + case= 88 emCalo below 20 MeV forward all 0.0891748 + case= 89 emCalo below 20 MeV forward electron 0.00124231 + case= 90 emCalo below 20 MeV forward gamma 0.0246043 + case= 91 emCalo below 20 MeV forward muon 0 + case= 92 emCalo below 20 MeV forward neutrino 2.81986e-05 + case= 93 emCalo below 20 MeV forward pion 9.72202e-07 + case= 94 emCalo below 20 MeV forward neutron 0.0632957 + case= 95 emCalo below 20 MeV forward proton 3.26914e-06 case= 96 emCalo below 20 MeV forward ion 0 - case= 97 emCalo below 20 MeV forward otherMeson 4.73588e-07 + case= 97 emCalo below 20 MeV forward otherMeson 0 case= 98 emCalo below 20 MeV forward otherBaryon 0 - case= 99 emCalo below 20 MeV backward all 0.00469569 - case=100 emCalo below 20 MeV backward electron 2.79283e-05 - case=101 emCalo below 20 MeV backward gamma 0.000664527 + case= 99 emCalo below 20 MeV backward all 0.00485287 + case=100 emCalo below 20 MeV backward electron 2.42057e-05 + case=101 emCalo below 20 MeV backward gamma 0.000750513 case=102 emCalo below 20 MeV backward muon 0 - case=103 emCalo below 20 MeV backward neutrino 7.91466e-06 + case=103 emCalo below 20 MeV backward neutrino 8.00186e-06 case=104 emCalo below 20 MeV backward pion 0 - case=105 emCalo below 20 MeV backward neutron 0.00399532 + case=105 emCalo below 20 MeV backward neutron 0.00407015 case=106 emCalo below 20 MeV backward proton 0 case=107 emCalo below 20 MeV backward ion 0 case=108 emCalo below 20 MeV backward otherMeson 0 case=109 emCalo below 20 MeV backward otherBaryon 0 - case=110 emCalo above 20 MeV forward all 0.00201412 - case=111 emCalo above 20 MeV forward electron 0.000135479 - case=112 emCalo above 20 MeV forward gamma 0.000299891 - case=113 emCalo above 20 MeV forward muon 2.73279e-06 - case=114 emCalo above 20 MeV forward neutrino 0.000341484 - case=115 emCalo above 20 MeV forward pion 0.000210067 - case=116 emCalo above 20 MeV forward neutron 0.000910291 - case=117 emCalo above 20 MeV forward proton 9.37447e-05 - case=118 emCalo above 20 MeV forward ion 2.84874e-06 - case=119 emCalo above 20 MeV forward otherMeson 1.41136e-05 - case=120 emCalo above 20 MeV forward otherBaryon 3.46621e-06 - case=121 emCalo above 20 MeV backward all 0.000105408 + case=110 emCalo above 20 MeV forward all 0.0026092 + case=111 emCalo above 20 MeV forward electron 0.000244024 + case=112 emCalo above 20 MeV forward gamma 0.000540216 + case=113 emCalo above 20 MeV forward muon 2.38735e-06 + case=114 emCalo above 20 MeV forward neutrino 0.000332744 + case=115 emCalo above 20 MeV forward pion 0.000258976 + case=116 emCalo above 20 MeV forward neutron 0.00110244 + case=117 emCalo above 20 MeV forward proton 0.000104625 + case=118 emCalo above 20 MeV forward ion 2.73596e-06 + case=119 emCalo above 20 MeV forward otherMeson 1.87623e-05 + case=120 emCalo above 20 MeV forward otherBaryon 2.29115e-06 + case=121 emCalo above 20 MeV backward all 0.000105576 case=122 emCalo above 20 MeV backward electron 0 case=123 emCalo above 20 MeV backward gamma 0 case=124 emCalo above 20 MeV backward muon 0 - case=125 emCalo above 20 MeV backward neutrino 8.23664e-05 + case=125 emCalo above 20 MeV backward neutrino 8.45371e-05 case=126 emCalo above 20 MeV backward pion 0 - case=127 emCalo above 20 MeV backward neutron 2.30413e-05 + case=127 emCalo above 20 MeV backward neutron 2.10385e-05 case=128 emCalo above 20 MeV backward proton 0 case=129 emCalo above 20 MeV backward ion 0 case=130 emCalo above 20 MeV backward otherMeson 0 case=131 emCalo above 20 MeV backward otherBaryon 0 - case=132 hadCalo forward all 0.000285621 - case=133 hadCalo forward electron 5.6202e-06 - case=134 hadCalo forward gamma 8.94469e-05 + case=132 hadCalo forward all 0.000177373 + case=133 hadCalo forward electron 9.71299e-07 + case=134 hadCalo forward gamma 3.1882e-05 case=135 hadCalo forward muon 0 - case=136 hadCalo forward neutrino 6.30201e-05 - case=137 hadCalo forward pion 1.1968e-06 - case=138 hadCalo forward neutron 0.000124947 - case=139 hadCalo forward proton 1.07371e-06 + case=136 hadCalo forward neutrino 6.00432e-05 + case=137 hadCalo forward pion 9.97744e-07 + case=138 hadCalo forward neutron 8.29053e-05 + case=139 hadCalo forward proton 3.48208e-07 case=140 hadCalo forward ion 0 - case=141 hadCalo forward otherMeson 2.44456e-07 - case=142 hadCalo forward otherBaryon 7.1472e-08 - case=143 hadCalo backward all 2.42354e-05 + case=141 hadCalo forward otherMeson 2.25362e-07 + case=142 hadCalo forward otherBaryon 0 + case=143 hadCalo backward all 2.40879e-05 case=144 hadCalo backward electron 0 - case=145 hadCalo backward gamma 0 + case=145 hadCalo backward gamma 5.56107e-08 case=146 hadCalo backward muon 0 - case=147 hadCalo backward neutrino 2.42354e-05 + case=147 hadCalo backward neutrino 2.35061e-05 case=148 hadCalo backward pion 0 - case=149 hadCalo backward neutron 0 + case=149 hadCalo backward neutron 5.26165e-07 case=150 hadCalo backward proton 0 case=151 hadCalo backward ion 0 case=152 hadCalo backward otherMeson 0 case=153 hadCalo backward otherBaryon 0 - case=154 hadCalo below 20 MeV forward all 0.000205766 - case=155 hadCalo below 20 MeV forward electron 4.39014e-06 - case=156 hadCalo below 20 MeV forward gamma 8.6739e-05 + case=154 hadCalo below 20 MeV forward all 0.000110267 + case=155 hadCalo below 20 MeV forward electron 8.31772e-07 + case=156 hadCalo below 20 MeV forward gamma 3.17628e-05 case=157 hadCalo below 20 MeV forward muon 0 - case=158 hadCalo below 20 MeV forward neutrino 4.47356e-06 + case=158 hadCalo below 20 MeV forward neutrino 5.31469e-06 case=159 hadCalo below 20 MeV forward pion 0 - case=160 hadCalo below 20 MeV forward neutron 0.000110164 + case=160 hadCalo below 20 MeV forward neutron 7.23576e-05 case=161 hadCalo below 20 MeV forward proton 0 case=162 hadCalo below 20 MeV forward ion 0 case=163 hadCalo below 20 MeV forward otherMeson 0 case=164 hadCalo below 20 MeV forward otherBaryon 0 - case=165 hadCalo below 20 MeV backward all 2.61512e-06 + case=165 hadCalo below 20 MeV backward all 2.81893e-06 case=166 hadCalo below 20 MeV backward electron 0 - case=167 hadCalo below 20 MeV backward gamma 0 + case=167 hadCalo below 20 MeV backward gamma 5.56107e-08 case=168 hadCalo below 20 MeV backward muon 0 - case=169 hadCalo below 20 MeV backward neutrino 2.61512e-06 + case=169 hadCalo below 20 MeV backward neutrino 2.23716e-06 case=170 hadCalo below 20 MeV backward pion 0 - case=171 hadCalo below 20 MeV backward neutron 0 + case=171 hadCalo below 20 MeV backward neutron 5.26165e-07 case=172 hadCalo below 20 MeV backward proton 0 case=173 hadCalo below 20 MeV backward ion 0 case=174 hadCalo below 20 MeV backward otherMeson 0 case=175 hadCalo below 20 MeV backward otherBaryon 0 - case=176 hadCalo above 20 MeV forward all 7.98543e-05 - case=177 hadCalo above 20 MeV forward electron 1.23006e-06 - case=178 hadCalo above 20 MeV forward gamma 2.70784e-06 + case=176 hadCalo above 20 MeV forward all 6.71062e-05 + case=177 hadCalo above 20 MeV forward electron 1.39527e-07 + case=178 hadCalo above 20 MeV forward gamma 1.19181e-07 case=179 hadCalo above 20 MeV forward muon 0 - case=180 hadCalo above 20 MeV forward neutrino 5.85465e-05 - case=181 hadCalo above 20 MeV forward pion 1.1968e-06 - case=182 hadCalo above 20 MeV forward neutron 1.47834e-05 - case=183 hadCalo above 20 MeV forward proton 1.07371e-06 + case=180 hadCalo above 20 MeV forward neutrino 5.47285e-05 + case=181 hadCalo above 20 MeV forward pion 9.97744e-07 + case=182 hadCalo above 20 MeV forward neutron 1.05477e-05 + case=183 hadCalo above 20 MeV forward proton 3.48208e-07 case=184 hadCalo above 20 MeV forward ion 0 - case=185 hadCalo above 20 MeV forward otherMeson 2.44456e-07 - case=186 hadCalo above 20 MeV forward otherBaryon 7.1472e-08 - case=187 hadCalo above 20 MeV backward all 2.16203e-05 + case=185 hadCalo above 20 MeV forward otherMeson 2.25362e-07 + case=186 hadCalo above 20 MeV forward otherBaryon 0 + case=187 hadCalo above 20 MeV backward all 2.1269e-05 case=188 hadCalo above 20 MeV backward electron 0 case=189 hadCalo above 20 MeV backward gamma 0 case=190 hadCalo above 20 MeV backward muon 0 - case=191 hadCalo above 20 MeV backward neutrino 2.16203e-05 + case=191 hadCalo above 20 MeV backward neutrino 2.1269e-05 case=192 hadCalo above 20 MeV backward pion 0 case=193 hadCalo above 20 MeV backward neutron 0 case=194 hadCalo above 20 MeV backward proton 0 @@ -1189,105 +1197,105 @@ Run Summary case=197 hadCalo above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 tracker all 192.57 70.4302 13562.7 - case= 1 tracker electron 107.83 7.67051 827.112 - case= 2 tracker gamma 13.27 191.705 2543.92 - case= 3 tracker muon 0.04 4.11981 0.164793 - case= 4 tracker neutrino 0.14 33.7299 4.72218 - case= 5 tracker pion 2.72 2842.01 7730.26 - case= 6 tracker neutron 2.09 122.013 255.006 - case= 7 tracker proton 48.16 6.75032 325.096 - case= 8 tracker ion 17.98 1.27235 22.8769 - case= 9 tracker otherMeson 0.32 5028.07 1608.98 - case= 10 tracker otherBaryon 0.02 12230 244.6 - case= 11 tracker below 20 MeV all 184.08 0.560535 103.183 - case= 12 tracker below 20 MeV electron 106.81 0.348878 37.2636 - case= 13 tracker below 20 MeV gamma 10.62 1.31747 13.9915 - case= 14 tracker below 20 MeV muon 0.04 4.11981 0.164793 - case= 15 tracker below 20 MeV neutrino 0.02 10.9934 0.219869 - case= 16 tracker below 20 MeV pion 0.03 17.189 0.515671 - case= 17 tracker below 20 MeV neutron 1.37 5.13488 7.03478 - case= 18 tracker below 20 MeV proton 47.38 0.625877 29.654 - case= 19 tracker below 20 MeV ion 17.81 0.805108 14.339 + case= 0 tracker all 192.34 67.0029 12887.3 + case= 1 tracker electron 107.5 2.89737 311.468 + case= 2 tracker gamma 12.33 196.364 2421.17 + case= 3 tracker muon 0.06 30.1791 1.81074 + case= 4 tracker neutrino 0.16 36.045 5.76719 + case= 5 tracker pion 2.44 3095.77 7553.69 + case= 6 tracker neutron 2.47 280.335 692.427 + case= 7 tracker proton 48.71 5.19348 252.974 + case= 8 tracker ion 18.35 1.43509 26.3339 + case= 9 tracker otherMeson 0.31 5130.42 1590.43 + case= 10 tracker otherBaryon 0.01 3125.81 31.2581 + case= 11 tracker below 20 MeV all 185.39 0.61234 113.522 + case= 12 tracker below 20 MeV electron 106.82 0.333937 35.6712 + case= 13 tracker below 20 MeV gamma 10.51 1.42609 14.9882 + case= 14 tracker below 20 MeV muon 0.05 4.11981 0.205991 + case= 15 tracker below 20 MeV neutrino 0.01 15.5027 0.155027 + case= 16 tracker below 20 MeV pion 0.01 2.88183 0.0288183 + case= 17 tracker below 20 MeV neutron 1.7 6.3257 10.7537 + case= 18 tracker below 20 MeV proton 48.12 0.724084 34.8429 + case= 19 tracker below 20 MeV ion 18.17 0.928778 16.8759 case= 20 tracker below 20 MeV otherMeson 0 0 0 case= 21 tracker below 20 MeV otherBaryon 0 0 0 - case= 22 tracker above 20 MeV all 8.49 1585.34 13459.6 - case= 23 tracker above 20 MeV electron 1.02 774.361 789.848 - case= 24 tracker above 20 MeV gamma 2.65 954.691 2529.93 - case= 25 tracker above 20 MeV muon 0 0 0 - case= 26 tracker above 20 MeV neutrino 0.12 37.5193 4.50231 - case= 27 tracker above 20 MeV pion 2.69 2873.51 7729.75 - case= 28 tracker above 20 MeV neutron 0.72 344.405 247.971 - case= 29 tracker above 20 MeV proton 0.78 378.771 295.442 - case= 30 tracker above 20 MeV ion 0.17 50.2233 8.53795 - case= 31 tracker above 20 MeV otherMeson 0.32 5028.07 1608.98 - case= 32 tracker above 20 MeV otherBaryon 0.02 12230 244.6 - case= 33 emCalo all 24704.9 5.42039 133910 - case= 34 emCalo electron 14988.5 2.87911 43153.7 - case= 35 emCalo gamma 8142.59 5.22868 42575 - case= 36 emCalo muon 1.44 19.4434 27.9985 - case= 37 emCalo neutrino 4.23 39.0163 165.039 - case= 38 emCalo pion 19.23 1556.07 29923.3 - case= 39 emCalo neutron 556.59 11.6335 6475.12 - case= 40 emCalo proton 46.49 95.2053 4426.09 - case= 41 emCalo ion 943.09 0.71042 669.99 - case= 42 emCalo otherMeson 1.82 2966.78 5399.54 - case= 43 emCalo otherBaryon 0.85 1287.26 1094.17 - case= 44 emCalo below 20 MeV all 24138.4 0.981307 23687.2 - case= 45 emCalo below 20 MeV electron 14753.4 0.801472 11824.4 - case= 46 emCalo below 20 MeV gamma 7917.32 1.29805 10277.1 - case= 47 emCalo below 20 MeV muon 1.28 4.27575 5.47296 - case= 48 emCalo below 20 MeV neutrino 0.34 14.0765 4.78601 - case= 49 emCalo below 20 MeV pion 0.37 13.2532 4.90368 - case= 50 emCalo below 20 MeV neutron 508.73 2.03624 1035.9 - case= 51 emCalo below 20 MeV proton 20.39 9.91295 202.125 - case= 52 emCalo below 20 MeV ion 936.43 0.353855 331.361 - case= 53 emCalo below 20 MeV otherMeson 0.13 6.25286 0.812871 - case= 54 emCalo below 20 MeV otherBaryon 0.03 11.4827 0.344482 - case= 55 emCalo above 20 MeV all 566.46 194.582 110223 - case= 56 emCalo above 20 MeV electron 235.15 133.231 31329.3 - case= 57 emCalo above 20 MeV gamma 225.27 143.375 32298 - case= 58 emCalo above 20 MeV muon 0.16 140.785 22.5256 - case= 59 emCalo above 20 MeV neutrino 3.89 41.1961 160.253 - case= 60 emCalo above 20 MeV pion 18.86 1586.34 29918.4 - case= 61 emCalo above 20 MeV neutron 47.86 113.649 5439.22 - case= 62 emCalo above 20 MeV proton 26.1 161.838 4223.97 - case= 63 emCalo above 20 MeV ion 6.66 50.8452 338.629 - case= 64 emCalo above 20 MeV otherMeson 1.69 3194.51 5398.72 - case= 65 emCalo above 20 MeV otherBaryon 0.82 1333.94 1093.83 - case= 66 hadCalo all 40294.7 3.02489 121887 - case= 67 hadCalo electron 29716.9 1.17023 34775.7 - case= 68 hadCalo gamma 8395.44 3.92466 32949.2 - case= 69 hadCalo muon 3.13 22.7029 71.0601 - case= 70 hadCalo neutrino 9.45 41.4795 391.982 - case= 71 hadCalo pion 26.81 971.623 26049.2 - case= 72 hadCalo neutron 809.54 15.231 12330.1 - case= 73 hadCalo proton 175.59 49.2736 8651.96 - case= 74 hadCalo ion 1154.4 0.774207 893.744 - case= 75 hadCalo otherMeson 2.55 1968.06 5018.55 - case= 76 hadCalo otherBaryon 0.95 795.625 755.844 - case= 77 hadCalo below 20 MeV all 39733.4 0.644612 25612.6 - case= 78 hadCalo below 20 MeV electron 29527.6 0.419867 12397.7 - case= 79 hadCalo below 20 MeV gamma 8230.56 1.21724 10018.5 - case= 80 hadCalo below 20 MeV muon 2.77 4.13693 11.4593 - case= 81 hadCalo below 20 MeV neutrino 0.78 14.7033 11.4686 - case= 82 hadCalo below 20 MeV pion 0.6 12.0663 7.23976 - case= 83 hadCalo below 20 MeV neutron 707.78 2.52883 1789.86 - case= 84 hadCalo below 20 MeV proton 117.14 8.06086 944.249 - case= 85 hadCalo below 20 MeV ion 1145.83 0.374923 429.598 - case= 86 hadCalo below 20 MeV otherMeson 0.21 6.24985 1.31247 - case= 87 hadCalo below 20 MeV otherBaryon 0.09 13.4515 1.21064 - case= 88 hadCalo above 20 MeV all 561.34 171.509 96274.7 - case= 89 hadCalo above 20 MeV electron 189.24 118.252 22378 - case= 90 hadCalo above 20 MeV gamma 164.88 139.075 22930.7 - case= 91 hadCalo above 20 MeV muon 0.36 165.558 59.6008 - case= 92 hadCalo above 20 MeV neutrino 8.67 43.8885 380.513 - case= 93 hadCalo above 20 MeV pion 26.21 993.589 26042 - case= 94 hadCalo above 20 MeV neutron 101.76 103.579 10540.2 - case= 95 hadCalo above 20 MeV proton 58.45 131.868 7707.71 - case= 96 hadCalo above 20 MeV ion 8.57 54.1594 464.146 - case= 97 hadCalo above 20 MeV otherMeson 2.34 2144.12 5017.24 - case= 98 hadCalo above 20 MeV otherBaryon 0.86 877.481 754.633 + case= 22 tracker above 20 MeV all 6.95 1837.96 12773.8 + case= 23 tracker above 20 MeV electron 0.68 405.583 275.796 + case= 24 tracker above 20 MeV gamma 1.82 1322.08 2406.18 + case= 25 tracker above 20 MeV muon 0.01 160.475 1.60475 + case= 26 tracker above 20 MeV neutrino 0.15 37.4144 5.61217 + case= 27 tracker above 20 MeV pion 2.43 3108.5 7553.66 + case= 28 tracker above 20 MeV neutron 0.77 885.29 681.674 + case= 29 tracker above 20 MeV proton 0.59 369.714 218.131 + case= 30 tracker above 20 MeV ion 0.18 52.5443 9.45797 + case= 31 tracker above 20 MeV otherMeson 0.31 5130.42 1590.43 + case= 32 tracker above 20 MeV otherBaryon 0.01 3125.81 31.2581 + case= 33 emCalo all 26643.6 5.61271 149543 + case= 34 emCalo electron 16171.2 2.99366 48411.2 + case= 35 emCalo gamma 8841.95 5.45919 48269.9 + case= 36 emCalo muon 1.5 18.9456 28.4184 + case= 37 emCalo neutrino 4.49 37.9279 170.296 + case= 38 emCalo pion 22.25 1476.28 32847.1 + case= 39 emCalo neutron 573.96 12.538 7196.32 + case= 40 emCalo proton 48.36 94.2839 4559.57 + case= 41 emCalo ion 977.3 0.718589 702.277 + case= 42 emCalo otherMeson 2.05 3273.04 6709.73 + case= 43 emCalo otherBaryon 0.49 1322.2 647.88 + case= 44 emCalo below 20 MeV all 26014.2 0.985172 25628.5 + case= 45 emCalo below 20 MeV electron 15909 0.802856 12772.6 + case= 46 emCalo below 20 MeV gamma 8588.22 1.30659 11221.2 + case= 47 emCalo below 20 MeV muon 1.34 4.11981 5.52055 + case= 48 emCalo below 20 MeV neutrino 0.33 15.1547 5.00104 + case= 49 emCalo below 20 MeV pion 0.24 11.9199 2.86077 + case= 50 emCalo below 20 MeV neutron 524.11 2.05899 1079.14 + case= 51 emCalo below 20 MeV proton 20.76 9.99786 207.556 + case= 52 emCalo below 20 MeV ion 970.15 0.344342 334.063 + case= 53 emCalo below 20 MeV otherMeson 0.05 8.84686 0.442343 + case= 54 emCalo below 20 MeV otherBaryon 0 0 0 + case= 55 emCalo above 20 MeV all 629.39 196.88 123914 + case= 56 emCalo above 20 MeV electron 262.24 135.901 35638.6 + case= 57 emCalo above 20 MeV gamma 253.73 146.016 37048.6 + case= 58 emCalo above 20 MeV muon 0.16 143.111 22.8978 + case= 59 emCalo above 20 MeV neutrino 4.16 39.7345 165.295 + case= 60 emCalo above 20 MeV pion 22.01 1492.24 32844.3 + case= 61 emCalo above 20 MeV neutron 49.85 122.712 6117.18 + case= 62 emCalo above 20 MeV proton 27.6 157.682 4352.02 + case= 63 emCalo above 20 MeV ion 7.15 51.4984 368.214 + case= 64 emCalo above 20 MeV otherMeson 2 3354.64 6709.28 + case= 65 emCalo above 20 MeV otherBaryon 0.49 1322.2 647.88 + case= 66 hadCalo all 38613.6 2.71009 104646 + case= 67 hadCalo electron 28496 1.05974 30198.4 + case= 68 hadCalo gamma 7929.99 3.49397 27707.2 + case= 69 hadCalo muon 2.96 23.229 68.7579 + case= 70 hadCalo neutrino 8.92 38.7465 345.619 + case= 71 hadCalo pion 24.07 843.419 20301.1 + case= 72 hadCalo neutron 810.95 14.8878 12073.3 + case= 73 hadCalo proton 170.82 47.1808 8059.42 + case= 74 hadCalo ion 1167.07 0.741418 865.287 + case= 75 hadCalo otherMeson 2.08 2172.77 4519.36 + case= 76 hadCalo otherBaryon 0.76 668.237 507.86 + case= 77 hadCalo below 20 MeV all 38115.6 0.639302 24367.4 + case= 78 hadCalo below 20 MeV electron 28334 0.415653 11777.1 + case= 79 hadCalo below 20 MeV gamma 7793.3 1.21249 9449.27 + case= 80 hadCalo below 20 MeV muon 2.64 4.11981 10.8763 + case= 81 hadCalo below 20 MeV neutrino 0.88 14.6501 12.8921 + case= 82 hadCalo below 20 MeV pion 0.47 11.8669 5.57745 + case= 83 hadCalo below 20 MeV neutron 709.21 2.51444 1783.26 + case= 84 hadCalo below 20 MeV proton 115.74 7.99575 925.428 + case= 85 hadCalo below 20 MeV ion 1159.12 0.346015 401.072 + case= 86 hadCalo below 20 MeV otherMeson 0.11 7.35221 0.808743 + case= 87 hadCalo below 20 MeV otherBaryon 0.07 15.1109 1.05777 + case= 88 hadCalo above 20 MeV all 497.98 161.209 80278.9 + case= 89 hadCalo above 20 MeV electron 161.9 113.782 18421.3 + case= 90 hadCalo above 20 MeV gamma 136.69 133.572 18257.9 + case= 91 hadCalo above 20 MeV muon 0.32 180.88 57.8816 + case= 92 hadCalo above 20 MeV neutrino 8.04 41.384 332.727 + case= 93 hadCalo above 20 MeV pion 23.6 859.98 20295.5 + case= 94 hadCalo above 20 MeV neutron 101.74 101.14 10290 + case= 95 hadCalo above 20 MeV proton 55.08 129.521 7133.99 + case= 96 hadCalo above 20 MeV ion 7.95 58.3917 464.214 + case= 97 hadCalo above 20 MeV otherMeson 1.97 2293.68 4518.55 + case= 98 hadCalo above 20 MeV otherBaryon 0.69 734.496 506.802 ============================================================= @@ -1388,7 +1396,7 @@ Index : 6 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=80.210000s Real=80.852678s Sys=0.030000s + User=67.080000s Real=67.642036s Sys=0.030000s =============== Run::PrintInfo() =============== RunID = 1 @@ -1404,198 +1412,198 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 tracker forward all 0.356148 - case= 1 tracker forward electron 0.000737463 - case= 2 tracker forward gamma 0.0131539 - case= 3 tracker forward muon 0 - case= 4 tracker forward neutrino 0.000368276 - case= 5 tracker forward pion 0.000455508 - case= 6 tracker forward neutron 0.341332 - case= 7 tracker forward proton 8.39138e-05 - case= 8 tracker forward ion 3.12752e-06 - case= 9 tracker forward otherMeson 1.15438e-05 - case= 10 tracker forward otherBaryon 2.44997e-06 - case= 11 tracker backward all 0.231709 - case= 12 tracker backward electron 6.43596e-05 - case= 13 tracker backward gamma 0.00311299 + case= 0 tracker forward all 0.321905 + case= 1 tracker forward electron 0.000606443 + case= 2 tracker forward gamma 0.0122836 + case= 3 tracker forward muon 2.68424e-06 + case= 4 tracker forward neutrino 0.000311019 + case= 5 tracker forward pion 0.000513787 + case= 6 tracker forward neutron 0.30812 + case= 7 tracker forward proton 4.68698e-05 + case= 8 tracker forward ion 0 + case= 9 tracker forward otherMeson 1.76058e-05 + case= 10 tracker forward otherBaryon 2.44848e-06 + case= 11 tracker backward all 0.207378 + case= 12 tracker backward electron 0.000164458 + case= 13 tracker backward gamma 0.00279377 case= 14 tracker backward muon 0 - case= 15 tracker backward neutrino 0.00017365 - case= 16 tracker backward pion 0 - case= 17 tracker backward neutron 0.228358 + case= 15 tracker backward neutrino 0.000175752 + case= 16 tracker backward pion 3.50112e-06 + case= 17 tracker backward neutron 0.20424 case= 18 tracker backward proton 0 case= 19 tracker backward ion 0 case= 20 tracker backward otherMeson 0 case= 21 tracker backward otherBaryon 0 - case= 22 tracker below 20 MeV forward all 0.35307 - case= 23 tracker below 20 MeV forward electron 0.0004957 - case= 24 tracker below 20 MeV forward gamma 0.0127879 - case= 25 tracker below 20 MeV forward muon 0 - case= 26 tracker below 20 MeV forward neutrino 2.2917e-05 - case= 27 tracker below 20 MeV forward pion 3.06679e-06 - case= 28 tracker below 20 MeV forward neutron 0.339761 - case= 29 tracker below 20 MeV forward proton 0 + case= 22 tracker below 20 MeV forward all 0.31935 + case= 23 tracker below 20 MeV forward electron 0.000451039 + case= 24 tracker below 20 MeV forward gamma 0.0119464 + case= 25 tracker below 20 MeV forward muon 2.68424e-06 + case= 26 tracker below 20 MeV forward neutrino 3.74782e-05 + case= 27 tracker below 20 MeV forward pion 8.76789e-06 + case= 28 tracker below 20 MeV forward neutron 0.306894 + case= 29 tracker below 20 MeV forward proton 9.50208e-06 case= 30 tracker below 20 MeV forward ion 0 case= 31 tracker below 20 MeV forward otherMeson 0 case= 32 tracker below 20 MeV forward otherBaryon 0 - case= 33 tracker below 20 MeV backward all 0.23127 - case= 34 tracker below 20 MeV backward electron 6.43596e-05 - case= 35 tracker below 20 MeV backward gamma 0.00311299 + case= 33 tracker below 20 MeV backward all 0.206995 + case= 34 tracker below 20 MeV backward electron 0.000164458 + case= 35 tracker below 20 MeV backward gamma 0.00279117 case= 36 tracker below 20 MeV backward muon 0 - case= 37 tracker below 20 MeV backward neutrino 2.5278e-05 + case= 37 tracker below 20 MeV backward neutrino 1.64311e-05 case= 38 tracker below 20 MeV backward pion 0 - case= 39 tracker below 20 MeV backward neutron 0.228068 + case= 39 tracker below 20 MeV backward neutron 0.204023 case= 40 tracker below 20 MeV backward proton 0 case= 41 tracker below 20 MeV backward ion 0 case= 42 tracker below 20 MeV backward otherMeson 0 case= 43 tracker below 20 MeV backward otherBaryon 0 - case= 44 tracker above 20 MeV forward all 0.00307764 - case= 45 tracker above 20 MeV forward electron 0.000241763 - case= 46 tracker above 20 MeV forward gamma 0.000366025 + case= 44 tracker above 20 MeV forward all 0.00255467 + case= 45 tracker above 20 MeV forward electron 0.000155404 + case= 46 tracker above 20 MeV forward gamma 0.000337227 case= 47 tracker above 20 MeV forward muon 0 - case= 48 tracker above 20 MeV forward neutrino 0.000345359 - case= 49 tracker above 20 MeV forward pion 0.000452441 - case= 50 tracker above 20 MeV forward neutron 0.00157102 - case= 51 tracker above 20 MeV forward proton 8.39138e-05 - case= 52 tracker above 20 MeV forward ion 3.12752e-06 - case= 53 tracker above 20 MeV forward otherMeson 1.15438e-05 - case= 54 tracker above 20 MeV forward otherBaryon 2.44997e-06 - case= 55 tracker above 20 MeV backward all 0.000439177 + case= 48 tracker above 20 MeV forward neutrino 0.000273541 + case= 49 tracker above 20 MeV forward pion 0.000505019 + case= 50 tracker above 20 MeV forward neutron 0.00122605 + case= 51 tracker above 20 MeV forward proton 3.73677e-05 + case= 52 tracker above 20 MeV forward ion 0 + case= 53 tracker above 20 MeV forward otherMeson 1.76058e-05 + case= 54 tracker above 20 MeV forward otherBaryon 2.44848e-06 + case= 55 tracker above 20 MeV backward all 0.000382575 case= 56 tracker above 20 MeV backward electron 0 - case= 57 tracker above 20 MeV backward gamma 0 + case= 57 tracker above 20 MeV backward gamma 2.59261e-06 case= 58 tracker above 20 MeV backward muon 0 - case= 59 tracker above 20 MeV backward neutrino 0.000148372 - case= 60 tracker above 20 MeV backward pion 0 - case= 61 tracker above 20 MeV backward neutron 0.000290805 + case= 59 tracker above 20 MeV backward neutrino 0.000159321 + case= 60 tracker above 20 MeV backward pion 3.50112e-06 + case= 61 tracker above 20 MeV backward neutron 0.00021716 case= 62 tracker above 20 MeV backward proton 0 case= 63 tracker above 20 MeV backward ion 0 case= 64 tracker above 20 MeV backward otherMeson 0 case= 65 tracker above 20 MeV backward otherBaryon 0 - case= 66 emCalo forward all 0.202462 - case= 67 emCalo forward electron 0.000948279 - case= 68 emCalo forward gamma 0.0189754 - case= 69 emCalo forward muon 9.80499e-07 - case= 70 emCalo forward neutrino 0.000386097 - case= 71 emCalo forward pion 0.000233258 - case= 72 emCalo forward neutron 0.181784 - case= 73 emCalo forward proton 0.000112197 - case= 74 emCalo forward ion 2.98111e-06 - case= 75 emCalo forward otherMeson 1.61531e-05 - case= 76 emCalo forward otherBaryon 2.31791e-06 - case= 77 emCalo backward all 0.0469547 - case= 78 emCalo backward electron 0.000128531 - case= 79 emCalo backward gamma 0.0017588 + case= 66 emCalo forward all 0.189347 + case= 67 emCalo forward electron 0.000684741 + case= 68 emCalo forward gamma 0.0163007 + case= 69 emCalo forward muon 3.43387e-06 + case= 70 emCalo forward neutrino 0.000413612 + case= 71 emCalo forward pion 0.000193593 + case= 72 emCalo forward neutron 0.171633 + case= 73 emCalo forward proton 9.47476e-05 + case= 74 emCalo forward ion 1.10631e-06 + case= 75 emCalo forward otherMeson 2.09635e-05 + case= 76 emCalo forward otherBaryon 1.37611e-06 + case= 77 emCalo backward all 0.0422733 + case= 78 emCalo backward electron 0.000106982 + case= 79 emCalo backward gamma 0.00184522 case= 80 emCalo backward muon 0 - case= 81 emCalo backward neutrino 8.04444e-05 + case= 81 emCalo backward neutrino 8.20075e-05 case= 82 emCalo backward pion 0 - case= 83 emCalo backward neutron 0.0449869 + case= 83 emCalo backward neutron 0.040239 case= 84 emCalo backward proton 0 case= 85 emCalo backward ion 0 case= 86 emCalo backward otherMeson 0 case= 87 emCalo backward otherBaryon 0 - case= 88 emCalo below 20 MeV forward all 0.200282 - case= 89 emCalo below 20 MeV forward electron 0.000826984 - case= 90 emCalo below 20 MeV forward gamma 0.0187167 - case= 91 emCalo below 20 MeV forward muon 0 - case= 92 emCalo below 20 MeV forward neutrino 2.55994e-05 - case= 93 emCalo below 20 MeV forward pion 1.05393e-05 - case= 94 emCalo below 20 MeV forward neutron 0.180699 - case= 95 emCalo below 20 MeV forward proton 2.44582e-06 - case= 96 emCalo below 20 MeV forward ion 5.66177e-07 + case= 88 emCalo below 20 MeV forward all 0.187274 + case= 89 emCalo below 20 MeV forward electron 0.000622463 + case= 90 emCalo below 20 MeV forward gamma 0.0161233 + case= 91 emCalo below 20 MeV forward muon 2.05798e-06 + case= 92 emCalo below 20 MeV forward neutrino 2.55533e-05 + case= 93 emCalo below 20 MeV forward pion 1.04928e-06 + case= 94 emCalo below 20 MeV forward neutron 0.170485 + case= 95 emCalo below 20 MeV forward proton 1.37187e-05 + case= 96 emCalo below 20 MeV forward ion 4.73384e-07 case= 97 emCalo below 20 MeV forward otherMeson 0 case= 98 emCalo below 20 MeV forward otherBaryon 0 - case= 99 emCalo below 20 MeV backward all 0.0468623 - case=100 emCalo below 20 MeV backward electron 0.000128531 - case=101 emCalo below 20 MeV backward gamma 0.0017588 + case= 99 emCalo below 20 MeV backward all 0.0421868 + case=100 emCalo below 20 MeV backward electron 0.000106982 + case=101 emCalo below 20 MeV backward gamma 0.00184522 case=102 emCalo below 20 MeV backward muon 0 - case=103 emCalo below 20 MeV backward neutrino 5.72237e-06 + case=103 emCalo below 20 MeV backward neutrino 9.6751e-06 case=104 emCalo below 20 MeV backward pion 0 - case=105 emCalo below 20 MeV backward neutron 0.0449693 + case=105 emCalo below 20 MeV backward neutron 0.0402249 case=106 emCalo below 20 MeV backward proton 0 case=107 emCalo below 20 MeV backward ion 0 case=108 emCalo below 20 MeV backward otherMeson 0 case=109 emCalo below 20 MeV backward otherBaryon 0 - case=110 emCalo above 20 MeV forward all 0.00218005 - case=111 emCalo above 20 MeV forward electron 0.000121295 - case=112 emCalo above 20 MeV forward gamma 0.000258673 - case=113 emCalo above 20 MeV forward muon 9.80499e-07 - case=114 emCalo above 20 MeV forward neutrino 0.000360497 - case=115 emCalo above 20 MeV forward pion 0.000222718 - case=116 emCalo above 20 MeV forward neutron 0.00108525 - case=117 emCalo above 20 MeV forward proton 0.000109751 - case=118 emCalo above 20 MeV forward ion 2.41493e-06 - case=119 emCalo above 20 MeV forward otherMeson 1.61531e-05 - case=120 emCalo above 20 MeV forward otherBaryon 2.31791e-06 - case=121 emCalo above 20 MeV backward all 9.23867e-05 + case=110 emCalo above 20 MeV forward all 0.00207351 + case=111 emCalo above 20 MeV forward electron 6.22772e-05 + case=112 emCalo above 20 MeV forward gamma 0.000177363 + case=113 emCalo above 20 MeV forward muon 1.3759e-06 + case=114 emCalo above 20 MeV forward neutrino 0.000388059 + case=115 emCalo above 20 MeV forward pion 0.000192543 + case=116 emCalo above 20 MeV forward neutron 0.00114789 + case=117 emCalo above 20 MeV forward proton 8.10289e-05 + case=118 emCalo above 20 MeV forward ion 6.32931e-07 + case=119 emCalo above 20 MeV forward otherMeson 2.09635e-05 + case=120 emCalo above 20 MeV forward otherBaryon 1.37611e-06 + case=121 emCalo above 20 MeV backward all 8.64994e-05 case=122 emCalo above 20 MeV backward electron 0 case=123 emCalo above 20 MeV backward gamma 0 case=124 emCalo above 20 MeV backward muon 0 - case=125 emCalo above 20 MeV backward neutrino 7.4722e-05 + case=125 emCalo above 20 MeV backward neutrino 7.23324e-05 case=126 emCalo above 20 MeV backward pion 0 - case=127 emCalo above 20 MeV backward neutron 1.76646e-05 + case=127 emCalo above 20 MeV backward neutron 1.4167e-05 case=128 emCalo above 20 MeV backward proton 0 case=129 emCalo above 20 MeV backward ion 0 case=130 emCalo above 20 MeV backward otherMeson 0 case=131 emCalo above 20 MeV backward otherBaryon 0 - case=132 hadCalo forward all 0.000380216 - case=133 hadCalo forward electron 1.00032e-05 - case=134 hadCalo forward gamma 0.000111609 - case=135 hadCalo forward muon 0 - case=136 hadCalo forward neutrino 5.46855e-05 - case=137 hadCalo forward pion 1.34058e-06 - case=138 hadCalo forward neutron 0.000201222 - case=139 hadCalo forward proton 9.22348e-07 + case=132 hadCalo forward all 0.000479507 + case=133 hadCalo forward electron 5.41372e-06 + case=134 hadCalo forward gamma 0.000128059 + case=135 hadCalo forward muon 5.85685e-08 + case=136 hadCalo forward neutrino 6.1647e-05 + case=137 hadCalo forward pion 1.89406e-06 + case=138 hadCalo forward neutron 0.000280144 + case=139 hadCalo forward proton 2.04289e-06 case=140 hadCalo forward ion 0 - case=141 hadCalo forward otherMeson 2.99139e-07 - case=142 hadCalo forward otherBaryon 1.34161e-07 - case=143 hadCalo backward all 2.4097e-05 + case=141 hadCalo forward otherMeson 2.47246e-07 + case=142 hadCalo forward otherBaryon 0 + case=143 hadCalo backward all 2.55016e-05 case=144 hadCalo backward electron 0 - case=145 hadCalo backward gamma 2.08519e-07 + case=145 hadCalo backward gamma 6.46211e-07 case=146 hadCalo backward muon 0 - case=147 hadCalo backward neutrino 1.99153e-05 + case=147 hadCalo backward neutrino 2.13914e-05 case=148 hadCalo backward pion 0 - case=149 hadCalo backward neutron 3.97312e-06 + case=149 hadCalo backward neutron 3.46398e-06 case=150 hadCalo backward proton 0 case=151 hadCalo backward ion 0 case=152 hadCalo backward otherMeson 0 case=153 hadCalo backward otherBaryon 0 - case=154 hadCalo below 20 MeV forward all 0.000305576 - case=155 hadCalo below 20 MeV forward electron 6.22299e-06 - case=156 hadCalo below 20 MeV forward gamma 0.000103929 + case=154 hadCalo below 20 MeV forward all 0.000393303 + case=155 hadCalo below 20 MeV forward electron 3.51426e-06 + case=156 hadCalo below 20 MeV forward gamma 0.000124494 case=157 hadCalo below 20 MeV forward muon 0 - case=158 hadCalo below 20 MeV forward neutrino 4.50562e-06 + case=158 hadCalo below 20 MeV forward neutrino 4.23908e-06 case=159 hadCalo below 20 MeV forward pion 0 - case=160 hadCalo below 20 MeV forward neutron 0.000190918 + case=160 hadCalo below 20 MeV forward neutron 0.000261056 case=161 hadCalo below 20 MeV forward proton 0 case=162 hadCalo below 20 MeV forward ion 0 case=163 hadCalo below 20 MeV forward otherMeson 0 case=164 hadCalo below 20 MeV forward otherBaryon 0 - case=165 hadCalo below 20 MeV backward all 5.62898e-06 + case=165 hadCalo below 20 MeV backward all 6.22517e-06 case=166 hadCalo below 20 MeV backward electron 0 - case=167 hadCalo below 20 MeV backward gamma 2.08519e-07 + case=167 hadCalo below 20 MeV backward gamma 6.46211e-07 case=168 hadCalo below 20 MeV backward muon 0 - case=169 hadCalo below 20 MeV backward neutrino 1.44734e-06 + case=169 hadCalo below 20 MeV backward neutrino 2.11498e-06 case=170 hadCalo below 20 MeV backward pion 0 - case=171 hadCalo below 20 MeV backward neutron 3.97312e-06 + case=171 hadCalo below 20 MeV backward neutron 3.46398e-06 case=172 hadCalo below 20 MeV backward proton 0 case=173 hadCalo below 20 MeV backward ion 0 case=174 hadCalo below 20 MeV backward otherMeson 0 case=175 hadCalo below 20 MeV backward otherBaryon 0 - case=176 hadCalo above 20 MeV forward all 7.46396e-05 - case=177 hadCalo above 20 MeV forward electron 3.78023e-06 - case=178 hadCalo above 20 MeV forward gamma 7.67945e-06 - case=179 hadCalo above 20 MeV forward muon 0 - case=180 hadCalo above 20 MeV forward neutrino 5.01799e-05 - case=181 hadCalo above 20 MeV forward pion 1.34058e-06 - case=182 hadCalo above 20 MeV forward neutron 1.03038e-05 - case=183 hadCalo above 20 MeV forward proton 9.22348e-07 + case=176 hadCalo above 20 MeV forward all 8.62037e-05 + case=177 hadCalo above 20 MeV forward electron 1.89946e-06 + case=178 hadCalo above 20 MeV forward gamma 3.56501e-06 + case=179 hadCalo above 20 MeV forward muon 5.85685e-08 + case=180 hadCalo above 20 MeV forward neutrino 5.74079e-05 + case=181 hadCalo above 20 MeV forward pion 1.89406e-06 + case=182 hadCalo above 20 MeV forward neutron 1.90885e-05 + case=183 hadCalo above 20 MeV forward proton 2.04289e-06 case=184 hadCalo above 20 MeV forward ion 0 - case=185 hadCalo above 20 MeV forward otherMeson 2.99139e-07 - case=186 hadCalo above 20 MeV forward otherBaryon 1.34161e-07 - case=187 hadCalo above 20 MeV backward all 1.8468e-05 + case=185 hadCalo above 20 MeV forward otherMeson 2.47246e-07 + case=186 hadCalo above 20 MeV forward otherBaryon 0 + case=187 hadCalo above 20 MeV backward all 1.92764e-05 case=188 hadCalo above 20 MeV backward electron 0 case=189 hadCalo above 20 MeV backward gamma 0 case=190 hadCalo above 20 MeV backward muon 0 - case=191 hadCalo above 20 MeV backward neutrino 1.8468e-05 + case=191 hadCalo above 20 MeV backward neutrino 1.92764e-05 case=192 hadCalo above 20 MeV backward pion 0 case=193 hadCalo above 20 MeV backward neutron 0 case=194 hadCalo above 20 MeV backward proton 0 @@ -1604,105 +1612,105 @@ Run Summary case=197 hadCalo above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 tracker all 220.05 43.1366 9492.21 - case= 1 tracker electron 117.69 7.49792 882.43 - case= 2 tracker gamma 35.6 70.0338 2493.2 - case= 3 tracker muon 0.05 4.11981 0.205991 - case= 4 tracker neutrino 0.15 28.8731 4.33096 - case= 5 tracker pion 1.52 3490.93 5306.21 - case= 6 tracker neutron 10.36 22.2735 230.754 - case= 7 tracker proton 0.88 124.976 109.979 - case= 8 tracker ion 53.6 0.261601 14.0218 - case= 9 tracker otherMeson 0.16 1849.37 295.899 - case= 10 tracker otherBaryon 0.04 3879.43 155.177 - case= 11 tracker below 20 MeV all 213.42 0.557251 118.929 - case= 12 tracker below 20 MeV electron 116.3 0.354983 41.2846 - case= 13 tracker below 20 MeV gamma 33.54 1.21991 40.9157 - case= 14 tracker below 20 MeV muon 0.05 4.11981 0.205991 - case= 15 tracker below 20 MeV neutrino 0.03 13.7903 0.413708 - case= 16 tracker below 20 MeV pion 0 0 0 - case= 17 tracker below 20 MeV neutron 9.5 2.14386 20.3666 - case= 18 tracker below 20 MeV proton 0.5 9.61528 4.80764 - case= 19 tracker below 20 MeV ion 53.5 0.204378 10.9342 + case= 0 tracker all 200.7 44.1671 8864.35 + case= 1 tracker electron 109.84 6.92102 760.204 + case= 2 tracker gamma 32.5 56.3028 1829.84 + case= 3 tracker muon 0.03 5.28789 0.158637 + case= 4 tracker neutrino 0.07 37.653 2.63571 + case= 5 tracker pion 1.39 3656.1 5081.98 + case= 6 tracker neutron 9.67 41.4707 401.022 + case= 7 tracker proton 1.02 148.496 151.466 + case= 8 tracker ion 46.07 0.29592 13.633 + case= 9 tracker otherMeson 0.1 5229.04 522.904 + case= 10 tracker otherBaryon 0.01 10050.3 100.503 + case= 11 tracker below 20 MeV all 195.23 0.583885 113.992 + case= 12 tracker below 20 MeV electron 108.9 0.364702 39.716 + case= 13 tracker below 20 MeV gamma 30.92 1.20637 37.301 + case= 14 tracker below 20 MeV muon 0.03 5.28789 0.158637 + case= 15 tracker below 20 MeV neutrino 0 0 0 + case= 16 tracker below 20 MeV pion 0.02 10.6546 0.213092 + case= 17 tracker below 20 MeV neutron 8.8 2.3226 20.4389 + case= 18 tracker below 20 MeV proton 0.58 9.08801 5.27105 + case= 19 tracker below 20 MeV ion 45.98 0.236912 10.8932 case= 20 tracker below 20 MeV otherMeson 0 0 0 case= 21 tracker below 20 MeV otherBaryon 0 0 0 - case= 22 tracker above 20 MeV all 6.63 1413.77 9373.28 - case= 23 tracker above 20 MeV electron 1.39 605.141 841.146 - case= 24 tracker above 20 MeV gamma 2.06 1190.43 2452.29 + case= 22 tracker above 20 MeV all 5.47 1599.7 8750.36 + case= 23 tracker above 20 MeV electron 0.94 766.477 720.488 + case= 24 tracker above 20 MeV gamma 1.58 1134.52 1792.54 case= 25 tracker above 20 MeV muon 0 0 0 - case= 26 tracker above 20 MeV neutrino 0.12 32.6438 3.91725 - case= 27 tracker above 20 MeV pion 1.52 3490.93 5306.21 - case= 28 tracker above 20 MeV neutron 0.86 244.636 210.387 - case= 29 tracker above 20 MeV proton 0.38 276.766 105.171 - case= 30 tracker above 20 MeV ion 0.1 30.8758 3.08758 - case= 31 tracker above 20 MeV otherMeson 0.16 1849.37 295.899 - case= 32 tracker above 20 MeV otherBaryon 0.04 3879.43 155.177 - case= 33 emCalo all 28691.9 5.54657 159142 - case= 34 emCalo electron 17322 2.9506 51110.4 - case= 35 emCalo gamma 10040.9 5.03925 50598.7 - case= 36 emCalo muon 1.59 19.5867 31.1428 - case= 37 emCalo neutrino 4.72 35.4876 167.502 - case= 38 emCalo pion 23.91 1466.1 35054.5 - case= 39 emCalo neutron 820.11 11.7919 9670.64 - case= 40 emCalo proton 54.92 114.288 6276.72 - case= 41 emCalo ion 421.37 1.7182 723.999 - case= 42 emCalo otherMeson 1.82 2783.44 5065.86 - case= 43 emCalo otherBaryon 0.51 867.197 442.271 - case= 44 emCalo below 20 MeV all 27999.2 1.02586 28723.4 - case= 45 emCalo below 20 MeV electron 17042.2 0.837075 14265.6 - case= 46 emCalo below 20 MeV gamma 9772.65 1.26777 12389.5 + case= 26 tracker above 20 MeV neutrino 0.07 37.653 2.63571 + case= 27 tracker above 20 MeV pion 1.37 3709.32 5081.77 + case= 28 tracker above 20 MeV neutron 0.87 437.452 380.583 + case= 29 tracker above 20 MeV proton 0.44 332.261 146.195 + case= 30 tracker above 20 MeV ion 0.09 30.4427 2.73985 + case= 31 tracker above 20 MeV otherMeson 0.1 5229.04 522.904 + case= 32 tracker above 20 MeV otherBaryon 0.01 10050.3 100.503 + case= 33 emCalo all 25877.1 5.68167 147025 + case= 34 emCalo electron 15625.5 2.87409 44909 + case= 35 emCalo gamma 9017.99 5.00889 45170.1 + case= 36 emCalo muon 1.6 14.4129 23.0606 + case= 37 emCalo neutrino 4.76 36.1257 171.958 + case= 38 emCalo pion 21.73 1573.45 34191.2 + case= 39 emCalo neutron 761.75 11.5952 8832.67 + case= 40 emCalo proton 52.08 97.2099 5062.69 + case= 41 emCalo ion 388.96 1.69856 660.674 + case= 42 emCalo otherMeson 2.16 3519.53 7602.19 + case= 43 emCalo otherBaryon 0.59 680.854 401.704 + case= 44 emCalo below 20 MeV all 25251.7 1.023 25832.5 + case= 45 emCalo below 20 MeV electron 15376.1 0.834379 12829.5 + case= 46 emCalo below 20 MeV gamma 8778.43 1.25926 11054.4 case= 47 emCalo below 20 MeV muon 1.5 4.11981 6.17972 - case= 48 emCalo below 20 MeV neutrino 0.36 14.2214 5.1197 - case= 49 emCalo below 20 MeV pion 0.43 12.2661 5.27441 - case= 50 emCalo below 20 MeV neutron 752.25 2.17788 1638.31 - case= 51 emCalo below 20 MeV proton 18.32 12.6315 231.409 - case= 52 emCalo below 20 MeV ion 411.42 0.441123 181.487 - case= 53 emCalo below 20 MeV otherMeson 0.05 6.4334 0.32167 - case= 54 emCalo below 20 MeV otherBaryon 0.02 12.5053 0.250105 - case= 55 emCalo above 20 MeV all 692.71 188.273 130418 - case= 56 emCalo above 20 MeV electron 279.84 131.664 36844.8 - case= 57 emCalo above 20 MeV gamma 268.27 142.428 38209.2 - case= 58 emCalo above 20 MeV muon 0.09 277.368 24.9631 - case= 59 emCalo above 20 MeV neutrino 4.36 37.2436 162.382 - case= 60 emCalo above 20 MeV pion 23.48 1492.72 35049.2 - case= 61 emCalo above 20 MeV neutron 67.86 118.366 8032.33 - case= 62 emCalo above 20 MeV proton 36.6 165.172 6045.31 - case= 63 emCalo above 20 MeV ion 9.95 54.5238 542.512 - case= 64 emCalo above 20 MeV otherMeson 1.77 2861.89 5065.54 - case= 65 emCalo above 20 MeV otherBaryon 0.49 902.082 442.02 - case= 66 hadCalo all 37377.4 2.38186 89027.7 - case= 67 hadCalo electron 27820.5 0.926458 25774.5 - case= 68 hadCalo gamma 7143.75 3.45317 24668.6 - case= 69 hadCalo muon 2.38 19.017 45.2604 - case= 70 hadCalo neutrino 7.24 37.8783 274.239 - case= 71 hadCalo pion 20.11 886.797 17833.5 - case= 72 hadCalo neutron 796.38 12.0375 9586.42 - case= 73 hadCalo proton 131.39 51.7667 6801.63 - case= 74 hadCalo ion 1453.65 0.491048 713.812 - case= 75 hadCalo otherMeson 1.61 1877.28 3022.42 - case= 76 hadCalo otherBaryon 0.48 640.317 307.352 - case= 77 hadCalo below 20 MeV all 36978.9 0.614805 22734.8 - case= 78 hadCalo below 20 MeV electron 27693.5 0.391884 10852.6 - case= 79 hadCalo below 20 MeV gamma 7033.94 1.31768 9268.48 - case= 80 hadCalo below 20 MeV muon 2.14 4.11981 8.8164 - case= 81 hadCalo below 20 MeV neutrino 0.58 14.9572 8.67517 - case= 82 hadCalo below 20 MeV pion 0.33 11.552 3.81215 - case= 83 hadCalo below 20 MeV neutron 713.17 2.13919 1525.61 - case= 84 hadCalo below 20 MeV proton 87.7 7.82604 686.344 - case= 85 hadCalo below 20 MeV ion 1447.35 0.261396 378.331 - case= 86 hadCalo below 20 MeV otherMeson 0.15 8.01069 1.2016 - case= 87 hadCalo below 20 MeV otherBaryon 0.06 14.9954 0.899723 - case= 88 hadCalo above 20 MeV all 398.55 166.335 66292.9 - case= 89 hadCalo above 20 MeV electron 126.98 117.513 14921.8 - case= 90 hadCalo above 20 MeV gamma 109.81 140.243 15400.1 - case= 91 hadCalo above 20 MeV muon 0.24 151.85 36.444 - case= 92 hadCalo above 20 MeV neutrino 6.66 39.8744 265.564 - case= 93 hadCalo above 20 MeV pion 19.78 901.4 17829.7 - case= 94 hadCalo above 20 MeV neutron 83.21 96.8732 8060.82 - case= 95 hadCalo above 20 MeV proton 43.69 139.97 6115.29 - case= 96 hadCalo above 20 MeV ion 6.3 53.2509 335.481 - case= 97 hadCalo above 20 MeV otherMeson 1.46 2069.33 3021.22 - case= 98 hadCalo above 20 MeV otherBaryon 0.42 729.649 306.452 + case= 48 emCalo below 20 MeV neutrino 0.4 13.7757 5.51028 + case= 49 emCalo below 20 MeV pion 0.33 11.9609 3.9471 + case= 50 emCalo below 20 MeV neutron 698.64 2.22664 1555.62 + case= 51 emCalo below 20 MeV proton 17.18 12.4605 214.071 + case= 52 emCalo below 20 MeV ion 378.86 0.426896 161.734 + case= 53 emCalo below 20 MeV otherMeson 0.11 7.80704 0.858774 + case= 54 emCalo below 20 MeV otherBaryon 0.08 8.29926 0.663941 + case= 55 emCalo above 20 MeV all 625.42 193.778 121193 + case= 56 emCalo above 20 MeV electron 249.33 128.663 32079.4 + case= 57 emCalo above 20 MeV gamma 239.56 142.41 34115.7 + case= 58 emCalo above 20 MeV muon 0.1 168.809 16.8809 + case= 59 emCalo above 20 MeV neutrino 4.36 38.1761 166.448 + case= 60 emCalo above 20 MeV pion 21.4 1597.53 34187.2 + case= 61 emCalo above 20 MeV neutron 63.11 115.307 7277.05 + case= 62 emCalo above 20 MeV proton 34.9 138.929 4848.62 + case= 63 emCalo above 20 MeV ion 10.1 49.4 498.94 + case= 64 emCalo above 20 MeV otherMeson 2.05 3707.97 7601.33 + case= 65 emCalo above 20 MeV otherBaryon 0.51 786.352 401.04 + case= 66 hadCalo all 41385.2 2.65454 109859 + case= 67 hadCalo electron 30831.7 1.08617 33488.3 + case= 68 hadCalo gamma 8075.87 3.95746 31960 + case= 69 hadCalo muon 2.77 20.7421 57.4556 + case= 70 hadCalo neutrino 8.34 39.334 328.046 + case= 71 hadCalo pion 23.77 900.51 21405.1 + case= 72 hadCalo neutron 824.4 13.3041 10967.9 + case= 73 hadCalo proton 139.57 53.2724 7435.23 + case= 74 hadCalo ion 1476.66 0.486003 717.662 + case= 75 hadCalo otherMeson 1.74 1765.93 3072.72 + case= 76 hadCalo otherBaryon 0.47 907.588 426.566 + case= 77 hadCalo below 20 MeV all 40894.1 0.619312 25326.2 + case= 78 hadCalo below 20 MeV electron 30663.9 0.400265 12273.7 + case= 79 hadCalo below 20 MeV gamma 7928.79 1.30359 10335.9 + case= 80 hadCalo below 20 MeV muon 2.49 4.11981 10.2583 + case= 81 hadCalo below 20 MeV neutrino 0.65 13.3887 8.70266 + case= 82 hadCalo below 20 MeV pion 0.51 11.576 5.90374 + case= 83 hadCalo below 20 MeV neutron 736.14 2.15563 1586.84 + case= 84 hadCalo below 20 MeV proton 91.05 7.74284 704.986 + case= 85 hadCalo below 20 MeV ion 1470.41 0.271278 398.89 + case= 86 hadCalo below 20 MeV otherMeson 0.13 6.1318 0.797134 + case= 87 hadCalo below 20 MeV otherBaryon 0.02 10.8624 0.217249 + case= 88 hadCalo above 20 MeV all 491.19 172.098 84532.8 + case= 89 hadCalo above 20 MeV electron 167.79 126.435 21214.6 + case= 90 hadCalo above 20 MeV gamma 147.08 147.023 21624.1 + case= 91 hadCalo above 20 MeV muon 0.28 168.562 47.1973 + case= 92 hadCalo above 20 MeV neutrino 7.69 41.5271 319.343 + case= 93 hadCalo above 20 MeV pion 23.26 920 21399.2 + case= 94 hadCalo above 20 MeV neutron 88.26 106.289 9381.09 + case= 95 hadCalo above 20 MeV proton 48.52 138.711 6730.25 + case= 96 hadCalo above 20 MeV ion 6.25 51.0035 318.772 + case= 97 hadCalo above 20 MeV otherMeson 1.61 1908.02 3071.92 + case= 98 hadCalo above 20 MeV otherBaryon 0.45 947.443 426.349 ============================================================= @@ -1811,7 +1819,7 @@ Index : 8 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=109.960000s Real=110.859160s Sys=0.010000s + User=92.250000s Real=93.257418s Sys=0.020000s =============== Run::PrintInfo() =============== RunID = 2 @@ -1827,198 +1835,198 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 tracker forward all 0.218983 - case= 1 tracker forward electron 0.00206275 - case= 2 tracker forward gamma 0.0381342 - case= 3 tracker forward muon 2.64665e-06 - case= 4 tracker forward neutrino 0.000886022 - case= 5 tracker forward pion 0.000702067 - case= 6 tracker forward neutron 0.176971 - case= 7 tracker forward proton 0.000162867 - case= 8 tracker forward ion 2.72848e-06 - case= 9 tracker forward otherMeson 4.93953e-05 - case= 10 tracker forward otherBaryon 9.01957e-06 - case= 11 tracker backward all 0.0734736 - case= 12 tracker backward electron 0.000331998 - case= 13 tracker backward gamma 0.00701705 + case= 0 tracker forward all 0.214328 + case= 1 tracker forward electron 0.0032806 + case= 2 tracker forward gamma 0.0452736 + case= 3 tracker forward muon 4.61269e-06 + case= 4 tracker forward neutrino 0.000842023 + case= 5 tracker forward pion 0.000795268 + case= 6 tracker forward neutron 0.163972 + case= 7 tracker forward proton 0.000107722 + case= 8 tracker forward ion 0 + case= 9 tracker forward otherMeson 3.96436e-05 + case= 10 tracker forward otherBaryon 1.22991e-05 + case= 11 tracker backward all 0.066603 + case= 12 tracker backward electron 0.000255251 + case= 13 tracker backward gamma 0.00677858 case= 14 tracker backward muon 0 - case= 15 tracker backward neutrino 0.000275802 - case= 16 tracker backward pion 0 - case= 17 tracker backward neutron 0.0658358 - case= 18 tracker backward proton 1.29483e-05 + case= 15 tracker backward neutrino 0.00024393 + case= 16 tracker backward pion 2.60378e-06 + case= 17 tracker backward neutron 0.0593182 + case= 18 tracker backward proton 0 case= 19 tracker backward ion 0 - case= 20 tracker backward otherMeson 0 + case= 20 tracker backward otherMeson 4.42759e-06 case= 21 tracker backward otherBaryon 0 - case= 22 tracker below 20 MeV forward all 0.213319 - case= 23 tracker below 20 MeV forward electron 0.00143159 - case= 24 tracker below 20 MeV forward gamma 0.0369812 + case= 22 tracker below 20 MeV forward all 0.207567 + case= 23 tracker below 20 MeV forward electron 0.00217385 + case= 24 tracker below 20 MeV forward gamma 0.0433031 case= 25 tracker below 20 MeV forward muon 0 - case= 26 tracker below 20 MeV forward neutrino 6.30327e-05 - case= 27 tracker below 20 MeV forward pion 1.03917e-05 - case= 28 tracker below 20 MeV forward neutron 0.174812 - case= 29 tracker below 20 MeV forward proton 2.02871e-05 + case= 26 tracker below 20 MeV forward neutrino 2.55267e-05 + case= 27 tracker below 20 MeV forward pion 0 + case= 28 tracker below 20 MeV forward neutron 0.162065 + case= 29 tracker below 20 MeV forward proton 0 case= 30 tracker below 20 MeV forward ion 0 case= 31 tracker below 20 MeV forward otherMeson 0 case= 32 tracker below 20 MeV forward otherBaryon 0 - case= 33 tracker below 20 MeV backward all 0.0729312 - case= 34 tracker below 20 MeV backward electron 0.000304725 - case= 35 tracker below 20 MeV backward gamma 0.00700898 + case= 33 tracker below 20 MeV backward all 0.0660522 + case= 34 tracker below 20 MeV backward electron 0.000252775 + case= 35 tracker below 20 MeV backward gamma 0.00677612 case= 36 tracker below 20 MeV backward muon 0 - case= 37 tracker below 20 MeV backward neutrino 1.99311e-05 + case= 37 tracker below 20 MeV backward neutrino 8.55058e-06 case= 38 tracker below 20 MeV backward pion 0 - case= 39 tracker below 20 MeV backward neutron 0.0655976 + case= 39 tracker below 20 MeV backward neutron 0.0590148 case= 40 tracker below 20 MeV backward proton 0 case= 41 tracker below 20 MeV backward ion 0 case= 42 tracker below 20 MeV backward otherMeson 0 case= 43 tracker below 20 MeV backward otherBaryon 0 - case= 44 tracker above 20 MeV forward all 0.00566421 - case= 45 tracker above 20 MeV forward electron 0.000631152 - case= 46 tracker above 20 MeV forward gamma 0.00115302 - case= 47 tracker above 20 MeV forward muon 2.64665e-06 - case= 48 tracker above 20 MeV forward neutrino 0.00082299 - case= 49 tracker above 20 MeV forward pion 0.000691675 - case= 50 tracker above 20 MeV forward neutron 0.002159 - case= 51 tracker above 20 MeV forward proton 0.00014258 - case= 52 tracker above 20 MeV forward ion 2.72848e-06 - case= 53 tracker above 20 MeV forward otherMeson 4.93953e-05 - case= 54 tracker above 20 MeV forward otherBaryon 9.01957e-06 - case= 55 tracker above 20 MeV backward all 0.000542423 - case= 56 tracker above 20 MeV backward electron 2.72729e-05 - case= 57 tracker above 20 MeV backward gamma 8.06879e-06 + case= 44 tracker above 20 MeV forward all 0.00676085 + case= 45 tracker above 20 MeV forward electron 0.00110675 + case= 46 tracker above 20 MeV forward gamma 0.00197056 + case= 47 tracker above 20 MeV forward muon 4.61269e-06 + case= 48 tracker above 20 MeV forward neutrino 0.000816497 + case= 49 tracker above 20 MeV forward pion 0.000795268 + case= 50 tracker above 20 MeV forward neutron 0.00190749 + case= 51 tracker above 20 MeV forward proton 0.000107722 + case= 52 tracker above 20 MeV forward ion 0 + case= 53 tracker above 20 MeV forward otherMeson 3.96436e-05 + case= 54 tracker above 20 MeV forward otherBaryon 1.22991e-05 + case= 55 tracker above 20 MeV backward all 0.00055083 + case= 56 tracker above 20 MeV backward electron 2.47521e-06 + case= 57 tracker above 20 MeV backward gamma 2.45509e-06 case= 58 tracker above 20 MeV backward muon 0 - case= 59 tracker above 20 MeV backward neutrino 0.000255871 - case= 60 tracker above 20 MeV backward pion 0 - case= 61 tracker above 20 MeV backward neutron 0.000238262 - case= 62 tracker above 20 MeV backward proton 1.29483e-05 + case= 59 tracker above 20 MeV backward neutrino 0.000235379 + case= 60 tracker above 20 MeV backward pion 2.60378e-06 + case= 61 tracker above 20 MeV backward neutron 0.000303489 + case= 62 tracker above 20 MeV backward proton 0 case= 63 tracker above 20 MeV backward ion 0 - case= 64 tracker above 20 MeV backward otherMeson 0 + case= 64 tracker above 20 MeV backward otherMeson 4.42759e-06 case= 65 tracker above 20 MeV backward otherBaryon 0 - case= 66 emCalo forward all 0.0733266 - case= 67 emCalo forward electron 0.000637006 - case= 68 emCalo forward gamma 0.00992512 - case= 69 emCalo forward muon 4.68673e-06 - case= 70 emCalo forward neutrino 0.000500106 - case= 71 emCalo forward pion 9.98995e-05 - case= 72 emCalo forward neutron 0.0620801 - case= 73 emCalo forward proton 6.38958e-05 - case= 74 emCalo forward ion 2.13274e-06 - case= 75 emCalo forward otherMeson 1.32241e-05 - case= 76 emCalo forward otherBaryon 4.3625e-07 - case= 77 emCalo backward all 0.00239993 - case= 78 emCalo backward electron 2.60424e-05 - case= 79 emCalo backward gamma 0.000217258 + case= 66 emCalo forward all 0.0711069 + case= 67 emCalo forward electron 0.000556489 + case= 68 emCalo forward gamma 0.00974398 + case= 69 emCalo forward muon 0 + case= 70 emCalo forward neutrino 0.000528562 + case= 71 emCalo forward pion 0.000119522 + case= 72 emCalo forward neutron 0.0600868 + case= 73 emCalo forward proton 6.00492e-05 + case= 74 emCalo forward ion 5.1992e-07 + case= 75 emCalo forward otherMeson 9.60924e-06 + case= 76 emCalo forward otherBaryon 1.3198e-06 + case= 77 emCalo backward all 0.0025037 + case= 78 emCalo backward electron 2.54675e-05 + case= 79 emCalo backward gamma 0.000188669 case= 80 emCalo backward muon 0 - case= 81 emCalo backward neutrino 0.000117184 + case= 81 emCalo backward neutrino 0.000102769 case= 82 emCalo backward pion 0 - case= 83 emCalo backward neutron 0.00203944 + case= 83 emCalo backward neutron 0.00218679 case= 84 emCalo backward proton 0 case= 85 emCalo backward ion 0 case= 86 emCalo backward otherMeson 0 case= 87 emCalo backward otherBaryon 0 - case= 88 emCalo below 20 MeV forward all 0.0716132 - case= 89 emCalo below 20 MeV forward electron 0.000563997 - case= 90 emCalo below 20 MeV forward gamma 0.00978144 + case= 88 emCalo below 20 MeV forward all 0.0695045 + case= 89 emCalo below 20 MeV forward electron 0.000522515 + case= 90 emCalo below 20 MeV forward gamma 0.00965538 case= 91 emCalo below 20 MeV forward muon 0 - case= 92 emCalo below 20 MeV forward neutrino 4.23407e-05 - case= 93 emCalo below 20 MeV forward pion 5.98014e-07 - case= 94 emCalo below 20 MeV forward neutron 0.0612243 - case= 95 emCalo below 20 MeV forward proton 4.8621e-07 + case= 92 emCalo below 20 MeV forward neutrino 4.11335e-05 + case= 93 emCalo below 20 MeV forward pion 1.4623e-06 + case= 94 emCalo below 20 MeV forward neutron 0.0592821 + case= 95 emCalo below 20 MeV forward proton 1.92458e-06 case= 96 emCalo below 20 MeV forward ion 0 case= 97 emCalo below 20 MeV forward otherMeson 0 case= 98 emCalo below 20 MeV forward otherBaryon 0 - case= 99 emCalo below 20 MeV backward all 0.00228795 - case=100 emCalo below 20 MeV backward electron 2.60424e-05 - case=101 emCalo below 20 MeV backward gamma 0.000217258 + case= 99 emCalo below 20 MeV backward all 0.00240302 + case=100 emCalo below 20 MeV backward electron 2.54675e-05 + case=101 emCalo below 20 MeV backward gamma 0.000188669 case=102 emCalo below 20 MeV backward muon 0 - case=103 emCalo below 20 MeV backward neutrino 8.98064e-06 + case=103 emCalo below 20 MeV backward neutrino 6.53533e-06 case=104 emCalo below 20 MeV backward pion 0 - case=105 emCalo below 20 MeV backward neutron 0.00203567 + case=105 emCalo below 20 MeV backward neutron 0.00218235 case=106 emCalo below 20 MeV backward proton 0 case=107 emCalo below 20 MeV backward ion 0 case=108 emCalo below 20 MeV backward otherMeson 0 case=109 emCalo below 20 MeV backward otherBaryon 0 - case=110 emCalo above 20 MeV forward all 0.00171341 - case=111 emCalo above 20 MeV forward electron 7.30081e-05 - case=112 emCalo above 20 MeV forward gamma 0.000143677 - case=113 emCalo above 20 MeV forward muon 4.68673e-06 - case=114 emCalo above 20 MeV forward neutrino 0.000457765 - case=115 emCalo above 20 MeV forward pion 9.93015e-05 - case=116 emCalo above 20 MeV forward neutron 0.000855769 - case=117 emCalo above 20 MeV forward proton 6.34096e-05 - case=118 emCalo above 20 MeV forward ion 2.13274e-06 - case=119 emCalo above 20 MeV forward otherMeson 1.32241e-05 - case=120 emCalo above 20 MeV forward otherBaryon 4.3625e-07 - case=121 emCalo above 20 MeV backward all 0.000111972 + case=110 emCalo above 20 MeV forward all 0.00160232 + case=111 emCalo above 20 MeV forward electron 3.39742e-05 + case=112 emCalo above 20 MeV forward gamma 8.86013e-05 + case=113 emCalo above 20 MeV forward muon 0 + case=114 emCalo above 20 MeV forward neutrino 0.000487428 + case=115 emCalo above 20 MeV forward pion 0.00011806 + case=116 emCalo above 20 MeV forward neutron 0.000804681 + case=117 emCalo above 20 MeV forward proton 5.81246e-05 + case=118 emCalo above 20 MeV forward ion 5.1992e-07 + case=119 emCalo above 20 MeV forward otherMeson 9.60924e-06 + case=120 emCalo above 20 MeV forward otherBaryon 1.3198e-06 + case=121 emCalo above 20 MeV backward all 0.000100683 case=122 emCalo above 20 MeV backward electron 0 case=123 emCalo above 20 MeV backward gamma 0 case=124 emCalo above 20 MeV backward muon 0 - case=125 emCalo above 20 MeV backward neutrino 0.000108204 + case=125 emCalo above 20 MeV backward neutrino 9.62336e-05 case=126 emCalo above 20 MeV backward pion 0 - case=127 emCalo above 20 MeV backward neutron 3.76868e-06 + case=127 emCalo above 20 MeV backward neutron 4.44935e-06 case=128 emCalo above 20 MeV backward proton 0 case=129 emCalo above 20 MeV backward ion 0 case=130 emCalo above 20 MeV backward otherMeson 0 case=131 emCalo above 20 MeV backward otherBaryon 0 - case=132 hadCalo forward all 4.65812e-05 + case=132 hadCalo forward all 5.44439e-05 case=133 hadCalo forward electron 0 - case=134 hadCalo forward gamma 8.90346e-08 + case=134 hadCalo forward gamma 3.32196e-07 case=135 hadCalo forward muon 0 - case=136 hadCalo forward neutrino 4.41306e-05 - case=137 hadCalo forward pion 0 - case=138 hadCalo forward neutron 2.36154e-06 + case=136 hadCalo forward neutrino 4.87701e-05 + case=137 hadCalo forward pion 5.80891e-08 + case=138 hadCalo forward neutron 5.28347e-06 case=139 hadCalo forward proton 0 case=140 hadCalo forward ion 0 case=141 hadCalo forward otherMeson 0 case=142 hadCalo forward otherBaryon 0 - case=143 hadCalo backward all 2.51289e-05 + case=143 hadCalo backward all 2.33048e-05 case=144 hadCalo backward electron 0 case=145 hadCalo backward gamma 0 case=146 hadCalo backward muon 0 - case=147 hadCalo backward neutrino 2.51289e-05 + case=147 hadCalo backward neutrino 2.33048e-05 case=148 hadCalo backward pion 0 case=149 hadCalo backward neutron 0 case=150 hadCalo backward proton 0 case=151 hadCalo backward ion 0 case=152 hadCalo backward otherMeson 0 case=153 hadCalo backward otherBaryon 0 - case=154 hadCalo below 20 MeV forward all 6.79357e-06 + case=154 hadCalo below 20 MeV forward all 9.51995e-06 case=155 hadCalo below 20 MeV forward electron 0 - case=156 hadCalo below 20 MeV forward gamma 8.90346e-08 + case=156 hadCalo below 20 MeV forward gamma 3.32196e-07 case=157 hadCalo below 20 MeV forward muon 0 - case=158 hadCalo below 20 MeV forward neutrino 4.58883e-06 + case=158 hadCalo below 20 MeV forward neutrino 4.48148e-06 case=159 hadCalo below 20 MeV forward pion 0 - case=160 hadCalo below 20 MeV forward neutron 2.1157e-06 + case=160 hadCalo below 20 MeV forward neutron 4.70628e-06 case=161 hadCalo below 20 MeV forward proton 0 case=162 hadCalo below 20 MeV forward ion 0 case=163 hadCalo below 20 MeV forward otherMeson 0 case=164 hadCalo below 20 MeV forward otherBaryon 0 - case=165 hadCalo below 20 MeV backward all 1.62186e-06 + case=165 hadCalo below 20 MeV backward all 1.75726e-06 case=166 hadCalo below 20 MeV backward electron 0 case=167 hadCalo below 20 MeV backward gamma 0 case=168 hadCalo below 20 MeV backward muon 0 - case=169 hadCalo below 20 MeV backward neutrino 1.62186e-06 + case=169 hadCalo below 20 MeV backward neutrino 1.75726e-06 case=170 hadCalo below 20 MeV backward pion 0 case=171 hadCalo below 20 MeV backward neutron 0 case=172 hadCalo below 20 MeV backward proton 0 case=173 hadCalo below 20 MeV backward ion 0 case=174 hadCalo below 20 MeV backward otherMeson 0 case=175 hadCalo below 20 MeV backward otherBaryon 0 - case=176 hadCalo above 20 MeV forward all 3.97876e-05 + case=176 hadCalo above 20 MeV forward all 4.49239e-05 case=177 hadCalo above 20 MeV forward electron 0 case=178 hadCalo above 20 MeV forward gamma 0 case=179 hadCalo above 20 MeV forward muon 0 - case=180 hadCalo above 20 MeV forward neutrino 3.95418e-05 - case=181 hadCalo above 20 MeV forward pion 0 - case=182 hadCalo above 20 MeV forward neutron 2.45832e-07 + case=180 hadCalo above 20 MeV forward neutrino 4.42886e-05 + case=181 hadCalo above 20 MeV forward pion 5.80891e-08 + case=182 hadCalo above 20 MeV forward neutron 5.77196e-07 case=183 hadCalo above 20 MeV forward proton 0 case=184 hadCalo above 20 MeV forward ion 0 case=185 hadCalo above 20 MeV forward otherMeson 0 case=186 hadCalo above 20 MeV forward otherBaryon 0 - case=187 hadCalo above 20 MeV backward all 2.3507e-05 + case=187 hadCalo above 20 MeV backward all 2.15475e-05 case=188 hadCalo above 20 MeV backward electron 0 case=189 hadCalo above 20 MeV backward gamma 0 case=190 hadCalo above 20 MeV backward muon 0 - case=191 hadCalo above 20 MeV backward neutrino 2.3507e-05 + case=191 hadCalo above 20 MeV backward neutrino 2.15475e-05 case=192 hadCalo above 20 MeV backward pion 0 case=193 hadCalo above 20 MeV backward neutron 0 case=194 hadCalo above 20 MeV backward proton 0 @@ -2027,108 +2035,108 @@ Run Summary case=197 hadCalo above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 tracker all 584.2 45.0528 26319.8 - case= 1 tracker electron 433.35 6.28102 2721.88 - case= 2 tracker gamma 79.73 73.3748 5850.17 - case= 3 tracker muon 0.12 23.5354 2.82425 - case= 4 tracker neutrino 0.34 44.5141 15.1348 - case= 5 tracker pion 4.3 3037.82 13062.6 - case= 6 tracker neutron 12.18 38.6052 470.211 - case= 7 tracker proton 5.32 126.261 671.711 - case= 8 tracker ion 48.23 0.918062 44.2781 - case= 9 tracker otherMeson 0.53 5969.72 3163.95 - case= 10 tracker otherBaryon 0.1 3170.3 317.03 - case= 11 tracker below 20 MeV all 563.62 0.594961 335.332 - case= 12 tracker below 20 MeV electron 429.11 0.328665 141.033 - case= 13 tracker below 20 MeV gamma 72.93 1.4832 108.17 - case= 14 tracker below 20 MeV muon 0.09 4.11981 0.370783 - case= 15 tracker below 20 MeV neutrino 0.03 14.7592 0.442777 - case= 16 tracker below 20 MeV pion 0.05 9.55964 0.477982 - case= 17 tracker below 20 MeV neutron 9.76 3.24906 31.7109 - case= 18 tracker below 20 MeV proton 3.85 6.49298 24.998 - case= 19 tracker below 20 MeV ion 47.79 0.587889 28.0952 - case= 20 tracker below 20 MeV otherMeson 0.01 3.29314 0.0329314 + case= 0 tracker all 711.63 42.2184 30043.9 + case= 1 tracker electron 532.5 7.96197 4239.75 + case= 2 tracker gamma 114.66 68.9138 7901.66 + case= 3 tracker muon 0.1 4.29515 0.429515 + case= 4 tracker neutrino 0.31 33.4944 10.3833 + case= 5 tracker pion 4.82 2698.08 13004.7 + case= 6 tracker neutron 11.13 41.1189 457.653 + case= 7 tracker proton 4.72 96.1811 453.975 + case= 8 tracker ion 42.74 1.03757 44.3455 + case= 9 tracker otherMeson 0.56 5721.76 3204.18 + case= 10 tracker otherBaryon 0.09 8075.03 726.753 + case= 11 tracker below 20 MeV all 681.96 0.619228 422.289 + case= 12 tracker below 20 MeV electron 524.79 0.356262 186.963 + case= 13 tracker below 20 MeV gamma 102.4 1.51581 155.219 + case= 14 tracker below 20 MeV muon 0.1 4.29515 0.429515 + case= 15 tracker below 20 MeV neutrino 0.02 19.6943 0.393887 + case= 16 tracker below 20 MeV pion 0.03 17.0482 0.511447 + case= 17 tracker below 20 MeV neutron 9 3.47274 31.2547 + case= 18 tracker below 20 MeV proton 3.34 6.54166 21.8491 + case= 19 tracker below 20 MeV ion 42.28 0.607108 25.6685 + case= 20 tracker below 20 MeV otherMeson 0 0 0 case= 21 tracker below 20 MeV otherBaryon 0 0 0 - case= 22 tracker above 20 MeV all 20.58 1262.61 25984.5 - case= 23 tracker above 20 MeV electron 4.24 608.69 2580.85 - case= 24 tracker above 20 MeV gamma 6.8 844.412 5742 - case= 25 tracker above 20 MeV muon 0.03 81.7821 2.45346 - case= 26 tracker above 20 MeV neutrino 0.31 47.3936 14.692 - case= 27 tracker above 20 MeV pion 4.25 3073.45 13062.2 - case= 28 tracker above 20 MeV neutron 2.42 181.199 438.501 - case= 29 tracker above 20 MeV proton 1.47 439.941 646.713 - case= 30 tracker above 20 MeV ion 0.44 36.7793 16.1829 - case= 31 tracker above 20 MeV otherMeson 0.52 6084.46 3163.92 - case= 32 tracker above 20 MeV otherBaryon 0.1 3170.3 317.03 - case= 33 emCalo all 54787.9 3.81567 209053 - case= 34 emCalo electron 32689 2.13963 69942.4 - case= 35 emCalo gamma 17381.2 3.93186 68340.4 - case= 36 emCalo muon 2.91 18.5547 53.9942 - case= 37 emCalo neutrino 8.71 36.8444 320.914 - case= 38 emCalo pion 30.53 1293.35 39485.8 - case= 39 emCalo neutron 2288.05 6.17524 14129.3 - case= 40 emCalo proton 88.61 88.1624 7812.07 - case= 41 emCalo ion 2295.01 0.45832 1051.85 - case= 42 emCalo otherMeson 3.09 2462.84 7610.19 - case= 43 emCalo otherBaryon 0.83 368.428 305.795 - case= 44 emCalo below 20 MeV all 53860.2 0.897624 48346.2 - case= 45 emCalo below 20 MeV electron 32323.7 0.720267 23281.7 - case= 46 emCalo below 20 MeV gamma 17035.1 1.25811 21432.1 - case= 47 emCalo below 20 MeV muon 2.7 4.11981 11.1235 - case= 48 emCalo below 20 MeV neutrino 0.82 14.6802 12.0377 - case= 49 emCalo below 20 MeV pion 0.71 12.5347 8.89964 - case= 50 emCalo below 20 MeV neutron 2182.42 1.32024 2881.31 - case= 51 emCalo below 20 MeV proton 32.38 12.3795 400.847 - case= 52 emCalo below 20 MeV ion 2282.07 0.138473 316.006 - case= 53 emCalo below 20 MeV otherMeson 0.17 4.66363 0.792817 - case= 54 emCalo below 20 MeV otherBaryon 0.11 12.6251 1.38876 - case= 55 emCalo above 20 MeV all 927.69 173.233 160706 - case= 56 emCalo above 20 MeV electron 365.28 127.74 46660.7 - case= 57 emCalo above 20 MeV gamma 346.05 135.553 46908.3 - case= 58 emCalo above 20 MeV muon 0.21 204.146 42.8707 - case= 59 emCalo above 20 MeV neutrino 7.89 39.1479 308.877 - case= 60 emCalo above 20 MeV pion 29.82 1323.84 39476.9 - case= 61 emCalo above 20 MeV neutron 105.63 106.484 11248 - case= 62 emCalo above 20 MeV proton 56.23 131.802 7411.22 - case= 63 emCalo above 20 MeV ion 12.94 56.8657 735.842 - case= 64 emCalo above 20 MeV otherMeson 2.92 2605.96 7609.39 - case= 65 emCalo above 20 MeV otherBaryon 0.72 422.787 304.407 - case= 66 hadCalo all 19739.8 2.12333 41914.1 - case= 67 hadCalo electron 11320.3 1.13234 12818.4 - case= 68 hadCalo gamma 5779.18 2.24232 12958.8 - case= 69 hadCalo muon 1 15.319 15.319 - case= 70 hadCalo neutrino 3.06 38.2345 116.998 - case= 71 hadCalo pion 7.62 743.995 5669.24 - case= 72 hadCalo neutron 1237.61 4.65157 5756.83 - case= 73 hadCalo proton 35.25 80.7217 2845.44 - case= 74 hadCalo ion 1354.73 0.279207 378.25 - case= 75 hadCalo otherMeson 0.76 1416.15 1076.27 - case= 76 hadCalo otherBaryon 0.31 898.743 278.61 - case= 77 hadCalo below 20 MeV all 19551.2 0.782538 15299.6 - case= 78 hadCalo below 20 MeV electron 11265.8 0.60478 6813.34 - case= 79 hadCalo below 20 MeV gamma 5730.86 1.17912 6757.38 - case= 80 hadCalo below 20 MeV muon 0.92 4.11981 3.79023 - case= 81 hadCalo below 20 MeV neutrino 0.24 14.8003 3.55206 - case= 82 hadCalo below 20 MeV pion 0.3 9.85892 2.95768 - case= 83 hadCalo below 20 MeV neutron 1189.66 1.20114 1428.95 - case= 84 hadCalo below 20 MeV proton 13.35 12.5544 167.602 - case= 85 hadCalo below 20 MeV ion 1349.98 0.0896442 121.018 - case= 86 hadCalo below 20 MeV otherMeson 0.05 6.69215 0.334607 - case= 87 hadCalo below 20 MeV otherBaryon 0.04 16.1845 0.64738 - case= 88 hadCalo above 20 MeV all 188.58 141.131 26614.6 - case= 89 hadCalo above 20 MeV electron 54.46 110.265 6005.04 - case= 90 hadCalo above 20 MeV gamma 48.32 128.341 6201.42 - case= 91 hadCalo above 20 MeV muon 0.08 144.109 11.5287 - case= 92 hadCalo above 20 MeV neutrino 2.82 40.229 113.446 - case= 93 hadCalo above 20 MeV pion 7.32 774.082 5666.28 - case= 94 hadCalo above 20 MeV neutron 47.95 90.2582 4327.88 - case= 95 hadCalo above 20 MeV proton 21.9 122.276 2677.84 - case= 96 hadCalo above 20 MeV ion 4.75 54.1541 257.232 - case= 97 hadCalo above 20 MeV otherMeson 0.71 1515.41 1075.94 - case= 98 hadCalo above 20 MeV otherBaryon 0.27 1029.49 277.963 + case= 22 tracker above 20 MeV all 29.67 998.368 29621.6 + case= 23 tracker above 20 MeV electron 7.71 525.653 4052.79 + case= 24 tracker above 20 MeV gamma 12.26 631.846 7746.44 + case= 25 tracker above 20 MeV muon 0 0 0 + case= 26 tracker above 20 MeV neutrino 0.29 34.4462 9.98939 + case= 27 tracker above 20 MeV pion 4.79 2714.87 13004.2 + case= 28 tracker above 20 MeV neutron 2.13 200.187 426.399 + case= 29 tracker above 20 MeV proton 1.38 313.135 432.126 + case= 30 tracker above 20 MeV ion 0.46 40.6022 18.677 + case= 31 tracker above 20 MeV otherMeson 0.56 5721.76 3204.18 + case= 32 tracker above 20 MeV otherBaryon 0.09 8075.03 726.753 + case= 33 emCalo all 53328.7 3.66069 195220 + case= 34 emCalo electron 31895.1 2.10638 67183.2 + case= 35 emCalo gamma 16958.9 3.83139 64976.1 + case= 36 emCalo muon 2.82 16.2402 45.7974 + case= 37 emCalo neutrino 8.41 36.8505 309.913 + case= 38 emCalo pion 28.66 1181.75 33869 + case= 39 emCalo neutron 2165.85 5.87993 12735 + case= 40 emCalo proton 84.41 92.956 7846.42 + case= 41 emCalo ion 2180.46 0.437644 954.265 + case= 42 emCalo otherMeson 3.25 2110.68 6859.7 + case= 43 emCalo otherBaryon 0.9 488.979 440.081 + case= 44 emCalo below 20 MeV all 52428.7 0.901084 47242.6 + case= 45 emCalo below 20 MeV electron 31536.4 0.724511 22848.5 + case= 46 emCalo below 20 MeV gamma 16623 1.26159 20971.4 + case= 47 emCalo below 20 MeV muon 2.6 4.12435 10.7233 + case= 48 emCalo below 20 MeV neutrino 0.68 15.3266 10.4221 + case= 49 emCalo below 20 MeV pion 0.6 12.1292 7.27749 + case= 50 emCalo below 20 MeV neutron 2066.33 1.31499 2717.2 + case= 51 emCalo below 20 MeV proton 30.45 12.35 376.058 + case= 52 emCalo below 20 MeV ion 2168.29 0.137451 298.033 + case= 53 emCalo below 20 MeV otherMeson 0.23 7.45555 1.71478 + case= 54 emCalo below 20 MeV otherBaryon 0.1 12.6806 1.26806 + case= 55 emCalo above 20 MeV all 900 164.419 147977 + case= 56 emCalo above 20 MeV electron 358.65 123.616 44334.7 + case= 57 emCalo above 20 MeV gamma 335.87 131.017 44004.6 + case= 58 emCalo above 20 MeV muon 0.22 159.428 35.0741 + case= 59 emCalo above 20 MeV neutrino 7.73 38.744 299.491 + case= 60 emCalo above 20 MeV pion 28.06 1206.76 33861.8 + case= 61 emCalo above 20 MeV neutron 99.52 100.662 10017.8 + case= 62 emCalo above 20 MeV proton 53.96 138.442 7470.36 + case= 63 emCalo above 20 MeV ion 12.17 53.9221 656.232 + case= 64 emCalo above 20 MeV otherMeson 3.02 2270.86 6857.99 + case= 65 emCalo above 20 MeV otherBaryon 0.8 548.516 438.813 + case= 66 hadCalo all 20383.9 2.25855 46038.1 + case= 67 hadCalo electron 11674.4 1.12489 13132.4 + case= 68 hadCalo gamma 5953.48 2.23946 13332.6 + case= 69 hadCalo muon 1.26 18.2281 22.9674 + case= 70 hadCalo neutrino 3.79 38.1607 144.629 + case= 71 hadCalo pion 8.78 909.235 7983.09 + case= 72 hadCalo neutron 1296.39 4.70488 6099.36 + case= 73 hadCalo proton 39.17 80.2154 3142.04 + case= 74 hadCalo ion 1405.33 0.313425 440.465 + case= 75 hadCalo otherMeson 1.06 1442.96 1529.53 + case= 76 hadCalo otherBaryon 0.19 1110.65 211.024 + case= 77 hadCalo below 20 MeV all 20183.8 0.78152 15774.1 + case= 78 hadCalo below 20 MeV electron 11618.9 0.602529 7000.7 + case= 79 hadCalo below 20 MeV gamma 5902.58 1.17252 6920.9 + case= 80 hadCalo below 20 MeV muon 1.12 4.11981 4.61419 + case= 81 hadCalo below 20 MeV neutrino 0.37 14.3733 5.31811 + case= 82 hadCalo below 20 MeV pion 0.17 12.7641 2.16989 + case= 83 hadCalo below 20 MeV neutron 1245.48 1.21209 1509.63 + case= 84 hadCalo below 20 MeV proton 15.18 12.7207 193.1 + case= 85 hadCalo below 20 MeV ion 1399.99 0.0978612 137.005 + case= 86 hadCalo below 20 MeV otherMeson 0.07 7.24933 0.507453 + case= 87 hadCalo below 20 MeV otherBaryon 0.02 5.67525 0.113505 + case= 88 hadCalo above 20 MeV all 200.06 151.275 30264 + case= 89 hadCalo above 20 MeV electron 55.59 110.303 6131.73 + case= 90 hadCalo above 20 MeV gamma 50.9 125.966 6411.67 + case= 91 hadCalo above 20 MeV muon 0.14 131.094 18.3532 + case= 92 hadCalo above 20 MeV neutrino 3.42 40.7342 139.311 + case= 93 hadCalo above 20 MeV pion 8.61 926.936 7980.92 + case= 94 hadCalo above 20 MeV neutron 50.91 90.1537 4589.73 + case= 95 hadCalo above 20 MeV proton 23.99 122.924 2948.94 + case= 96 hadCalo above 20 MeV ion 5.34 56.8279 303.461 + case= 97 hadCalo above 20 MeV otherMeson 0.99 1544.47 1529.03 + case= 98 hadCalo above 20 MeV otherBaryon 0.17 1240.65 210.91 ============================================================= ================== Deleting memory pools =================== Number of memory pools allocated: 13 of which, static: 0 -Dynamic pools deleted: 13 / Total memory freed: 0.14 MB +Dynamic pools deleted: 13 / Total memory freed: 0.15 MB ============================================================ diff --git a/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/History b/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/History index c40aa310f64..5575d957464 100644 --- a/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/History +++ b/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/History @@ -5,6 +5,13 @@ which **must** added in reverse chronological order (newest at the top). It must be used as a substitute for writing good git commit messages! +## 2023-05-08 Alberto Ribon (exhadrParticleFluenceConcentricSpheres-V11-01-00) +- Run, TrackingAction : replaced G4int with G4long for keeping the information + on the multiplicity of particle production. + (This avoids rare cases of negative multiplicities due to integer overflow, + seen for runs with at least 4000 events, in particular with heavy materials, + such as Tungsten and Lead.) + ## 2022-09-07 Alberto Ribon (exhadrParticleFluenceConcentricSpheres-V11-00-02) - Added complementary information on particle production (multiplicity, kinetic energy, and total energy flow) in each of the three targets. diff --git a/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/include/Run.hh b/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/include/Run.hh index 96124bcbb45..88d3741bd45 100644 --- a/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/include/Run.hh +++ b/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/include/Run.hh @@ -107,9 +107,9 @@ class Run : public G4Run { // Accessor methods useful to transfer information collected by the stepping-action // into this Run class - void SetTrackingArray1( const std::array< G4int, + void SetTrackingArray1( const std::array< G4long, TrackingAction::fkNumberCombinations >& inputArray ); - std::array< G4int, TrackingAction::fkNumberCombinations > GetTrackingArray1() const + std::array< G4long, TrackingAction::fkNumberCombinations > GetTrackingArray1() const { return fTrackingArray1; } void SetTrackingArray2( const std::array< G4double, TrackingAction::fkNumberCombinations >& inputArray ); @@ -130,7 +130,7 @@ class Run : public G4Run { G4double fCubicVolumeScoringEmCaloShell; G4double fCubicVolumeScoringHadCaloShell; std::array< G4double, SteppingAction::fkNumberCombinations > fSteppingArray; - std::array< G4int, TrackingAction::fkNumberCombinations > fTrackingArray1; + std::array< G4long, TrackingAction::fkNumberCombinations > fTrackingArray1; std::array< G4double, TrackingAction::fkNumberCombinations > fTrackingArray2; }; diff --git a/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/include/TrackingAction.hh b/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/include/TrackingAction.hh index 8c0a99eea5d..84b75a2517f 100644 --- a/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/include/TrackingAction.hh +++ b/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/include/TrackingAction.hh @@ -82,7 +82,7 @@ class TrackingAction : public G4UserTrackingAction { private: Run* fRunPtr; // Pointer to the Run object - std::array< G4int, fkNumberCombinations > fArrayMultiplicities; + std::array< G4long, fkNumberCombinations > fArrayMultiplicities; std::array< G4double, fkNumberCombinations > fArraySumKineticEnergies; // Keep record of the number of particles and their kinetic energy at production, // according to the particle type and their kinetic energy range (below/above 20 MeV). diff --git a/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/src/Run.cc b/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/src/Run.cc index da02bbd150b..735b9dfb73e 100644 --- a/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/src/Run.cc +++ b/examples/extended/hadronic/ParticleFluence/ConcentricSpheres/src/Run.cc @@ -177,7 +177,7 @@ void Run::SetSteppingArray( const std::array< G4double, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Run::SetTrackingArray1( const std::array< G4int, +void Run::SetTrackingArray1( const std::array< G4long, TrackingAction::fkNumberCombinations >& inputArray ) { for ( G4int i = 0; i < TrackingAction::fkNumberCombinations; ++i ) { fTrackingArray1[i] = inputArray[i]; diff --git a/examples/extended/hadronic/ParticleFluence/Layer/History b/examples/extended/hadronic/ParticleFluence/Layer/History index ed26dc68252..95b37057328 100644 --- a/examples/extended/hadronic/ParticleFluence/Layer/History +++ b/examples/extended/hadronic/ParticleFluence/Layer/History @@ -4,6 +4,12 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-05-08 Alberto Ribon (exhadrParticleFluenceLayer-V11-01-00) +- Run, TrackingAction : replaced G4int with G4long for keeping the information + on the multiplicity of particle production. + (This avoids rare cases of negative multiplicities due to integer overflow, + seen for runs with at least 4000 events, in particular with heavy materials, + such as Tungsten and Lead.) ## 2022-09-07 Alberto Ribon (exhadrParticleFluenceLayer-V11-00-02) - Added complementary information on particle production (multiplicity, diff --git a/examples/extended/hadronic/ParticleFluence/Layer/Layer.out b/examples/extended/hadronic/ParticleFluence/Layer/Layer.out index 61bc7dfef8a..793d60e5469 100644 --- a/examples/extended/hadronic/ParticleFluence/Layer/Layer.out +++ b/examples/extended/hadronic/ParticleFluence/Layer/Layer.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -184,7 +184,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -216,7 +216,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -248,7 +248,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -261,7 +261,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -307,7 +306,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -339,7 +338,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -371,7 +370,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -403,7 +402,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -435,7 +434,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -467,7 +466,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -499,7 +498,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -884,12 +883,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -940,7 +948,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=1.250000s Real=1.268155s Sys=0.010000s + User=1.210000s Real=2.769242s Sys=0.020000s =============== Run::PrintInfo() =============== RunID = 0 @@ -953,140 +961,140 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.0169133 - case= 1 downstream electron 0.00218624 - case= 2 downstream gamma 0.0131196 - case= 3 downstream muon 4.42863e-06 - case= 4 downstream neutrino 0.000115221 - case= 5 downstream pion 0.000660786 - case= 6 downstream neutron 0.000551992 - case= 7 downstream proton 0.00020693 - case= 8 downstream ion 3.64388e-06 - case= 9 downstream otherMeson 6.30073e-05 - case= 10 downstream otherBaryon 1.48567e-06 - case= 11 downstream below 20 MeV all 0.0117425 - case= 12 downstream below 20 MeV electron 0.000906536 - case= 13 downstream below 20 MeV gamma 0.010667 + case= 0 downstream all 0.0173511 + case= 1 downstream electron 0.00198515 + case= 2 downstream gamma 0.0136576 + case= 3 downstream muon 1.35075e-05 + case= 4 downstream neutrino 0.000123324 + case= 5 downstream pion 0.000728961 + case= 6 downstream neutron 0.000581473 + case= 7 downstream proton 0.000211392 + case= 8 downstream ion 6.19472e-06 + case= 9 downstream otherMeson 4.21909e-05 + case= 10 downstream otherBaryon 1.2848e-06 + case= 11 downstream below 20 MeV all 0.0121527 + case= 12 downstream below 20 MeV electron 0.000831977 + case= 13 downstream below 20 MeV gamma 0.0111278 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 8.18896e-06 - case= 16 downstream below 20 MeV pion 4.73908e-06 - case= 17 downstream below 20 MeV neutron 0.000156035 - case= 18 downstream below 20 MeV proton 0 - case= 19 downstream below 20 MeV ion 0 + case= 15 downstream below 20 MeV neutrino 1.1164e-05 + case= 16 downstream below 20 MeV pion 1.33288e-06 + case= 17 downstream below 20 MeV neutron 0.000166696 + case= 18 downstream below 20 MeV proton 1.17214e-05 + case= 19 downstream below 20 MeV ion 1.97021e-06 case= 20 downstream below 20 MeV otherMeson 0 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.00517074 - case= 23 downstream above 20 MeV electron 0.00127971 - case= 24 downstream above 20 MeV gamma 0.0024525 - case= 25 downstream above 20 MeV muon 4.42863e-06 - case= 26 downstream above 20 MeV neutrino 0.000107032 - case= 27 downstream above 20 MeV pion 0.000656047 - case= 28 downstream above 20 MeV neutron 0.000395958 - case= 29 downstream above 20 MeV proton 0.00020693 - case= 30 downstream above 20 MeV ion 3.64388e-06 - case= 31 downstream above 20 MeV otherMeson 6.30073e-05 - case= 32 downstream above 20 MeV otherBaryon 1.48567e-06 - case= 33 side all 0.00128777 - case= 34 side electron 7.32453e-05 - case= 35 side gamma 0.00103368 - case= 36 side muon 3.81463e-07 - case= 37 side neutrino 5.26612e-05 - case= 38 side pion 2.04526e-05 - case= 39 side neutron 9.7129e-05 - case= 40 side proton 9.35674e-06 + case= 22 downstream above 20 MeV all 0.00519839 + case= 23 downstream above 20 MeV electron 0.00115317 + case= 24 downstream above 20 MeV gamma 0.00252978 + case= 25 downstream above 20 MeV muon 1.35075e-05 + case= 26 downstream above 20 MeV neutrino 0.00011216 + case= 27 downstream above 20 MeV pion 0.000727628 + case= 28 downstream above 20 MeV neutron 0.000414776 + case= 29 downstream above 20 MeV proton 0.000199671 + case= 30 downstream above 20 MeV ion 4.22451e-06 + case= 31 downstream above 20 MeV otherMeson 4.21909e-05 + case= 32 downstream above 20 MeV otherBaryon 1.2848e-06 + case= 33 side all 0.00145159 + case= 34 side electron 7.26962e-05 + case= 35 side gamma 0.00118056 + case= 36 side muon 1.39982e-06 + case= 37 side neutrino 6.90001e-05 + case= 38 side pion 1.87256e-05 + case= 39 side neutron 0.000102263 + case= 40 side proton 5.84157e-06 case= 41 side ion 0 - case= 42 side otherMeson 8.65287e-07 + case= 42 side otherMeson 1.10206e-06 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.00102616 - case= 45 side below 20 MeV electron 3.80737e-05 - case= 46 side below 20 MeV gamma 0.000949437 + case= 44 side below 20 MeV all 0.00117491 + case= 45 side below 20 MeV electron 3.87305e-05 + case= 46 side below 20 MeV gamma 0.00109537 case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 3.03076e-06 - case= 49 side below 20 MeV pion 0 - case= 50 side below 20 MeV neutron 3.39819e-05 - case= 51 side below 20 MeV proton 1.63912e-06 + case= 48 side below 20 MeV neutrino 6.34758e-06 + case= 49 side below 20 MeV pion 1.08172e-06 + case= 50 side below 20 MeV neutron 3.33835e-05 + case= 51 side below 20 MeV proton 0 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000261606 - case= 56 side above 20 MeV electron 3.51717e-05 - case= 57 side above 20 MeV gamma 8.42399e-05 - case= 58 side above 20 MeV muon 3.81463e-07 - case= 59 side above 20 MeV neutrino 4.96305e-05 - case= 60 side above 20 MeV pion 2.04526e-05 - case= 61 side above 20 MeV neutron 6.31471e-05 - case= 62 side above 20 MeV proton 7.71761e-06 + case= 55 side above 20 MeV all 0.00027668 + case= 56 side above 20 MeV electron 3.39657e-05 + case= 57 side above 20 MeV gamma 8.51956e-05 + case= 58 side above 20 MeV muon 1.39982e-06 + case= 59 side above 20 MeV neutrino 6.26525e-05 + case= 60 side above 20 MeV pion 1.76439e-05 + case= 61 side above 20 MeV neutron 6.88792e-05 + case= 62 side above 20 MeV proton 5.84157e-06 case= 63 side above 20 MeV ion 0 - case= 64 side above 20 MeV otherMeson 8.65287e-07 + case= 64 side above 20 MeV otherMeson 1.10206e-06 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.000661071 - case= 67 upstream electron 1.98385e-05 - case= 68 upstream gamma 0.000534403 - case= 69 upstream muon 0 - case= 70 upstream neutrino 3.94799e-05 - case= 71 upstream pion 1.17524e-05 - case= 72 upstream neutron 5.40396e-05 - case= 73 upstream proton 0 - case= 74 upstream ion 1.55731e-06 + case= 66 upstream all 0.000662143 + case= 67 upstream electron 2.38168e-05 + case= 68 upstream gamma 0.000520863 + case= 69 upstream muon 2.04687e-06 + case= 70 upstream neutrino 5.28927e-05 + case= 71 upstream pion 2.10911e-06 + case= 72 upstream neutron 5.89259e-05 + case= 73 upstream proton 1.48823e-06 + case= 74 upstream ion 0 case= 75 upstream otherMeson 0 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.000540785 - case= 78 upstream below 20 MeV electron 6.43105e-06 - case= 79 upstream below 20 MeV gamma 0.000506968 + case= 77 upstream below 20 MeV all 0.000503296 + case= 78 upstream below 20 MeV electron 1.47295e-05 + case= 79 upstream below 20 MeV gamma 0.000462952 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 4.59451e-06 + case= 81 upstream below 20 MeV neutrino 3.70767e-06 case= 82 upstream below 20 MeV pion 0 - case= 83 upstream below 20 MeV neutron 2.27909e-05 + case= 83 upstream below 20 MeV neutron 2.19062e-05 case= 84 upstream below 20 MeV proton 0 case= 85 upstream below 20 MeV ion 0 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 0.000120286 - case= 89 upstream above 20 MeV electron 1.34075e-05 - case= 90 upstream above 20 MeV gamma 2.74347e-05 - case= 91 upstream above 20 MeV muon 0 - case= 92 upstream above 20 MeV neutrino 3.48854e-05 - case= 93 upstream above 20 MeV pion 1.17524e-05 - case= 94 upstream above 20 MeV neutron 3.12487e-05 - case= 95 upstream above 20 MeV proton 0 - case= 96 upstream above 20 MeV ion 1.55731e-06 + case= 88 upstream above 20 MeV all 0.000158847 + case= 89 upstream above 20 MeV electron 9.0873e-06 + case= 90 upstream above 20 MeV gamma 5.79112e-05 + case= 91 upstream above 20 MeV muon 2.04687e-06 + case= 92 upstream above 20 MeV neutrino 4.9185e-05 + case= 93 upstream above 20 MeV pion 2.10911e-06 + case= 94 upstream above 20 MeV neutron 3.70197e-05 + case= 95 upstream above 20 MeV proton 1.48823e-06 + case= 96 upstream above 20 MeV ion 0 case= 97 upstream above 20 MeV otherMeson 0 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 layer all 1829.19 43.4224 79427.8 - case= 1 layer electron 1481.29 7.2915 10800.8 - case= 2 layer gamma 234.76 87.1802 20466.4 - case= 3 layer muon 0.74 36.9134 27.3159 - case= 4 layer neutrino 2.14 37.7692 80.826 - case= 5 layer pion 17.37 2017.43 35042.7 - case= 6 layer neutron 16.67 135.161 2253.13 - case= 7 layer proton 37.45 60.7398 2274.7 - case= 8 layer ion 37.05 5.359 198.551 - case= 9 layer otherMeson 1.53 5288.45 8091.33 - case= 10 layer otherBaryon 0.19 1010.77 192.047 - case= 11 layer below 20 MeV all 1734.78 0.605704 1050.76 - case= 12 layer below 20 MeV electron 1458.88 0.338072 493.206 - case= 13 layer below 20 MeV gamma 201.46 1.52992 308.217 - case= 14 layer below 20 MeV muon 0.69 4.11981 2.84267 - case= 15 layer below 20 MeV neutrino 0.13 15.3453 1.99488 - case= 16 layer below 20 MeV pion 0.3 7.3379 2.20137 - case= 17 layer below 20 MeV neutron 8.44 6.67916 56.3721 - case= 18 layer below 20 MeV proton 29.61 2.90882 86.1302 - case= 19 layer below 20 MeV ion 35.26 2.83009 99.7891 - case= 20 layer below 20 MeV otherMeson 0.01 0.937294 0.00937294 - case= 21 layer below 20 MeV otherBaryon 0 0 0 - case= 22 layer above 20 MeV all 94.41 830.177 78377.1 - case= 23 layer above 20 MeV electron 22.41 459.956 10307.6 - case= 24 layer above 20 MeV gamma 33.3 605.351 20158.2 - case= 25 layer above 20 MeV muon 0.05 489.464 24.4732 - case= 26 layer above 20 MeV neutrino 2.01 39.2195 78.8312 - case= 27 layer above 20 MeV pion 17.07 2052.75 35040.5 - case= 28 layer above 20 MeV neutron 8.23 266.921 2196.76 - case= 29 layer above 20 MeV proton 7.84 279.155 2188.57 - case= 30 layer above 20 MeV ion 1.79 55.1743 98.762 - case= 31 layer above 20 MeV otherMeson 1.52 5323.24 8091.32 - case= 32 layer above 20 MeV otherBaryon 0.19 1010.77 192.047 + case= 0 layer all 2061.92 36.9508 76189.6 + case= 1 layer electron 1687.62 6.32602 10675.9 + case= 2 layer gamma 256.45 71.7119 18390.5 + case= 3 layer muon 0.94 104.563 98.2888 + case= 4 layer neutrino 2.54 46.0113 116.869 + case= 5 layer pion 17.1 2122.3 36291.4 + case= 6 layer neutron 17.35 160.601 2786.43 + case= 7 layer proton 38.78 66.5071 2579.14 + case= 8 layer ion 39.63 5.04891 200.088 + case= 9 layer otherMeson 1.32 3712.57 4900.6 + case= 10 layer otherBaryon 0.19 791.487 150.383 + case= 11 layer below 20 MeV all 1965.75 0.583028 1146.09 + case= 12 layer below 20 MeV electron 1664.49 0.329969 549.229 + case= 13 layer below 20 MeV gamma 222.27 1.51716 337.219 + case= 14 layer below 20 MeV muon 0.77 4.11981 3.17226 + case= 15 layer below 20 MeV neutrino 0.21 14.2738 2.9975 + case= 16 layer below 20 MeV pion 0.4 10.0484 4.01938 + case= 17 layer below 20 MeV neutron 8.66 6.2999 54.5572 + case= 18 layer below 20 MeV proton 31.18 2.8427 88.6355 + case= 19 layer below 20 MeV ion 37.75 2.81114 106.121 + case= 20 layer below 20 MeV otherMeson 0.01 3.28858 0.0328858 + case= 21 layer below 20 MeV otherBaryon 0.01 10.3968 0.103968 + case= 22 layer above 20 MeV all 96.17 780.322 75043.5 + case= 23 layer above 20 MeV electron 23.13 437.816 10126.7 + case= 24 layer above 20 MeV gamma 34.18 528.183 18053.3 + case= 25 layer above 20 MeV muon 0.17 559.509 95.1166 + case= 26 layer above 20 MeV neutrino 2.33 48.8718 113.871 + case= 27 layer above 20 MeV pion 16.7 2172.89 36287.3 + case= 28 layer above 20 MeV neutron 8.69 314.37 2731.87 + case= 29 layer above 20 MeV proton 7.6 327.699 2490.51 + case= 30 layer above 20 MeV ion 1.88 49.9827 93.9674 + case= 31 layer above 20 MeV otherMeson 1.31 3740.89 4900.57 + case= 32 layer above 20 MeV otherBaryon 0.18 834.881 150.279 ============================================================= @@ -1151,7 +1159,7 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=6.000000s Real=6.065186s Sys=0.020000s + User=6.810000s Real=7.984195s Sys=0.020000s =============== Run::PrintInfo() =============== RunID = 1 @@ -1164,140 +1172,140 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.0443533 - case= 1 downstream electron 0.00399231 - case= 2 downstream gamma 0.0367384 - case= 3 downstream muon 1.81511e-05 - case= 4 downstream neutrino 0.000395596 - case= 5 downstream pion 0.000745884 - case= 6 downstream neutron 0.00214075 - case= 7 downstream proton 0.000237652 - case= 8 downstream ion 3.55828e-06 - case= 9 downstream otherMeson 7.25052e-05 - case= 10 downstream otherBaryon 8.46609e-06 - case= 11 downstream below 20 MeV all 0.0348844 - case= 12 downstream below 20 MeV electron 0.00195607 - case= 13 downstream below 20 MeV gamma 0.0317525 + case= 0 downstream all 0.0481722 + case= 1 downstream electron 0.00467628 + case= 2 downstream gamma 0.0396556 + case= 3 downstream muon 1.14832e-05 + case= 4 downstream neutrino 0.000362995 + case= 5 downstream pion 0.000756358 + case= 6 downstream neutron 0.00233311 + case= 7 downstream proton 0.000303628 + case= 8 downstream ion 5.1958e-06 + case= 9 downstream otherMeson 6.4298e-05 + case= 10 downstream otherBaryon 3.28914e-06 + case= 11 downstream below 20 MeV all 0.0385548 + case= 12 downstream below 20 MeV electron 0.00248591 + case= 13 downstream below 20 MeV gamma 0.034692 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 2.73523e-05 - case= 16 downstream below 20 MeV pion 1.30207e-06 - case= 17 downstream below 20 MeV neutron 0.0011382 - case= 18 downstream below 20 MeV proton 9.03985e-06 - case= 19 downstream below 20 MeV ion 0 + case= 15 downstream below 20 MeV neutrino 1.57781e-05 + case= 16 downstream below 20 MeV pion 7.45471e-06 + case= 17 downstream below 20 MeV neutron 0.00134027 + case= 18 downstream below 20 MeV proton 9.55731e-06 + case= 19 downstream below 20 MeV ion 3.88639e-06 case= 20 downstream below 20 MeV otherMeson 0 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.00946891 - case= 23 downstream above 20 MeV electron 0.00203625 - case= 24 downstream above 20 MeV gamma 0.00498599 - case= 25 downstream above 20 MeV muon 1.81511e-05 - case= 26 downstream above 20 MeV neutrino 0.000368243 - case= 27 downstream above 20 MeV pion 0.000744582 - case= 28 downstream above 20 MeV neutron 0.00100255 - case= 29 downstream above 20 MeV proton 0.000228612 - case= 30 downstream above 20 MeV ion 3.55828e-06 - case= 31 downstream above 20 MeV otherMeson 7.25052e-05 - case= 32 downstream above 20 MeV otherBaryon 8.46609e-06 - case= 33 side all 0.0026318 - case= 34 side electron 0.000112191 - case= 35 side gamma 0.00183025 - case= 36 side muon 9.21653e-07 - case= 37 side neutrino 0.000209758 - case= 38 side pion 1.91867e-05 - case= 39 side neutron 0.000453577 - case= 40 side proton 4.87075e-06 + case= 22 downstream above 20 MeV all 0.00961738 + case= 23 downstream above 20 MeV electron 0.00219037 + case= 24 downstream above 20 MeV gamma 0.0049636 + case= 25 downstream above 20 MeV muon 1.14832e-05 + case= 26 downstream above 20 MeV neutrino 0.000347217 + case= 27 downstream above 20 MeV pion 0.000748903 + case= 28 downstream above 20 MeV neutron 0.000992839 + case= 29 downstream above 20 MeV proton 0.000294071 + case= 30 downstream above 20 MeV ion 1.30941e-06 + case= 31 downstream above 20 MeV otherMeson 6.4298e-05 + case= 32 downstream above 20 MeV otherBaryon 3.28914e-06 + case= 33 side all 0.00301391 + case= 34 side electron 0.000111668 + case= 35 side gamma 0.0021088 + case= 36 side muon 1.42731e-06 + case= 37 side neutrino 0.000230986 + case= 38 side pion 1.6189e-05 + case= 39 side neutron 0.000533405 + case= 40 side proton 1.01507e-05 case= 41 side ion 0 - case= 42 side otherMeson 1.0474e-06 + case= 42 side otherMeson 1.27767e-06 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.00208512 - case= 45 side below 20 MeV electron 6.77044e-05 - case= 46 side below 20 MeV gamma 0.00169523 + case= 44 side below 20 MeV all 0.00242206 + case= 45 side below 20 MeV electron 6.64543e-05 + case= 46 side below 20 MeV gamma 0.0019691 case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 1.90887e-05 - case= 49 side below 20 MeV pion 7.93003e-07 - case= 50 side below 20 MeV neutron 0.000301966 - case= 51 side below 20 MeV proton 3.41319e-07 + case= 48 side below 20 MeV neutrino 2.45855e-05 + case= 49 side below 20 MeV pion 0 + case= 50 side below 20 MeV neutron 0.000361554 + case= 51 side below 20 MeV proton 3.67268e-07 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000546682 - case= 56 side above 20 MeV electron 4.44869e-05 - case= 57 side above 20 MeV gamma 0.000135022 - case= 58 side above 20 MeV muon 9.21653e-07 - case= 59 side above 20 MeV neutrino 0.000190669 - case= 60 side above 20 MeV pion 1.83937e-05 - case= 61 side above 20 MeV neutron 0.000151611 - case= 62 side above 20 MeV proton 4.52943e-06 + case= 55 side above 20 MeV all 0.000591845 + case= 56 side above 20 MeV electron 4.52133e-05 + case= 57 side above 20 MeV gamma 0.000139702 + case= 58 side above 20 MeV muon 1.42731e-06 + case= 59 side above 20 MeV neutrino 0.000206401 + case= 60 side above 20 MeV pion 1.6189e-05 + case= 61 side above 20 MeV neutron 0.000171852 + case= 62 side above 20 MeV proton 9.78341e-06 case= 63 side above 20 MeV ion 0 - case= 64 side above 20 MeV otherMeson 1.0474e-06 + case= 64 side above 20 MeV otherMeson 1.27767e-06 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.00235288 - case= 67 upstream electron 5.38066e-05 - case= 68 upstream gamma 0.00151711 + case= 66 upstream all 0.00199284 + case= 67 upstream electron 3.4107e-05 + case= 68 upstream gamma 0.00120073 case= 69 upstream muon 0 - case= 70 upstream neutrino 0.00017186 - case= 71 upstream pion 7.10616e-06 - case= 72 upstream neutron 0.000599184 - case= 73 upstream proton 2.10661e-06 - case= 74 upstream ion 1.69861e-06 - case= 75 upstream otherMeson 0 + case= 70 upstream neutrino 0.000233718 + case= 71 upstream pion 2.19411e-05 + case= 72 upstream neutron 0.000498355 + case= 73 upstream proton 2.68857e-06 + case= 74 upstream ion 0 + case= 75 upstream otherMeson 1.2994e-06 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.00196203 - case= 78 upstream below 20 MeV electron 2.1744e-05 - case= 79 upstream below 20 MeV gamma 0.00143464 + case= 77 upstream below 20 MeV all 0.00156539 + case= 78 upstream below 20 MeV electron 9.14757e-06 + case= 79 upstream below 20 MeV gamma 0.00113644 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 1.94342e-05 - case= 82 upstream below 20 MeV pion 0 - case= 83 upstream below 20 MeV neutron 0.000486215 + case= 81 upstream below 20 MeV neutrino 2.02009e-05 + case= 82 upstream below 20 MeV pion 5.56888e-06 + case= 83 upstream below 20 MeV neutron 0.000394033 case= 84 upstream below 20 MeV proton 0 case= 85 upstream below 20 MeV ion 0 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 0.000390843 - case= 89 upstream above 20 MeV electron 3.20627e-05 - case= 90 upstream above 20 MeV gamma 8.24733e-05 + case= 88 upstream above 20 MeV all 0.000427451 + case= 89 upstream above 20 MeV electron 2.49595e-05 + case= 90 upstream above 20 MeV gamma 6.42923e-05 case= 91 upstream above 20 MeV muon 0 - case= 92 upstream above 20 MeV neutrino 0.000152426 - case= 93 upstream above 20 MeV pion 7.10616e-06 - case= 94 upstream above 20 MeV neutron 0.000112969 - case= 95 upstream above 20 MeV proton 2.10661e-06 - case= 96 upstream above 20 MeV ion 1.69861e-06 - case= 97 upstream above 20 MeV otherMeson 0 + case= 92 upstream above 20 MeV neutrino 0.000213517 + case= 93 upstream above 20 MeV pion 1.63722e-05 + case= 94 upstream above 20 MeV neutron 0.000104322 + case= 95 upstream above 20 MeV proton 2.68857e-06 + case= 96 upstream above 20 MeV ion 0 + case= 97 upstream above 20 MeV otherMeson 1.2994e-06 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 layer all 11522.5 11.7691 135610 - case= 1 layer electron 9814.4 2.67133 26217.5 - case= 2 layer gamma 1166.61 29.7605 34718.9 - case= 3 layer muon 2.84 26.4153 75.0193 - case= 4 layer neutrino 8.34 37.5536 313.197 - case= 5 layer pion 35.15 1439.9 50612.5 - case= 6 layer neutron 72.53 87.9436 6378.55 - case= 7 layer proton 40.63 137.19 5574.03 - case= 8 layer ion 378.33 1.88287 712.345 - case= 9 layer otherMeson 2.97 3426.5 10176.7 - case= 10 layer otherBaryon 0.69 1204.11 830.836 - case= 11 layer below 20 MeV all 11231 0.424591 4768.59 - case= 12 layer below 20 MeV electron 9725.45 0.240231 2336.36 - case= 13 layer below 20 MeV gamma 1065.68 1.40352 1495.7 - case= 14 layer below 20 MeV muon 2.61 4.11981 10.7527 - case= 15 layer below 20 MeV neutrino 0.75 13.4531 10.0898 - case= 16 layer below 20 MeV pion 0.54 12.8345 6.93064 - case= 17 layer below 20 MeV neutron 41.9 6.1455 257.496 - case= 18 layer below 20 MeV proton 20.14 7.64231 153.916 - case= 19 layer below 20 MeV ion 373.9 1.32829 496.649 - case= 20 layer below 20 MeV otherMeson 0.05 13.8039 0.690196 - case= 21 layer below 20 MeV otherBaryon 0 0 0 - case= 22 layer above 20 MeV all 291.47 448.901 130841 - case= 23 layer above 20 MeV electron 88.95 268.479 23881.2 - case= 24 layer above 20 MeV gamma 100.93 329.171 33223.2 - case= 25 layer above 20 MeV muon 0.23 279.42 64.2666 - case= 26 layer above 20 MeV neutrino 7.59 39.9351 303.107 - case= 27 layer above 20 MeV pion 34.61 1462.17 50605.6 - case= 28 layer above 20 MeV neutron 30.63 199.839 6121.05 - case= 29 layer above 20 MeV proton 20.49 264.525 5420.12 - case= 30 layer above 20 MeV ion 4.43 48.6897 215.696 - case= 31 layer above 20 MeV otherMeson 2.92 3484.94 10176 - case= 32 layer above 20 MeV otherBaryon 0.69 1204.11 830.836 + case= 0 layer all 12927 10.2903 133022 + case= 1 layer electron 10991.2 2.3032 25315 + case= 2 layer gamma 1300.35 23.9431 31134.4 + case= 3 layer muon 3.16 25.7393 81.3362 + case= 4 layer neutrino 9.25 35.7951 331.105 + case= 5 layer pion 38.31 1341.05 51375.7 + case= 6 layer neutron 85.5 77.2093 6601.39 + case= 7 layer proton 47.37 150.758 7141.39 + case= 8 layer ion 448.5 1.84156 825.937 + case= 9 layer otherMeson 2.6 3452.87 8977.47 + case= 10 layer otherBaryon 0.78 1588.01 1238.64 + case= 11 layer below 20 MeV all 12610.1 0.427379 5389.28 + case= 12 layer below 20 MeV electron 10894 0.241477 2630.65 + case= 13 layer below 20 MeV gamma 1193.67 1.39373 1663.65 + case= 14 layer below 20 MeV muon 2.85 4.19039 11.9426 + case= 15 layer below 20 MeV neutrino 0.83 13.9606 11.5873 + case= 16 layer below 20 MeV pion 0.69 11.9604 8.25265 + case= 17 layer below 20 MeV neutron 50.37 6.11945 308.237 + case= 18 layer below 20 MeV proton 24.07 7.47069 179.82 + case= 19 layer below 20 MeV ion 443.52 1.29503 574.374 + case= 20 layer below 20 MeV otherMeson 0.03 8.55307 0.256592 + case= 21 layer below 20 MeV otherBaryon 0.04 12.6165 0.504661 + case= 22 layer above 20 MeV all 316.97 402.666 127633 + case= 23 layer above 20 MeV electron 97.22 233.33 22684.3 + case= 24 layer above 20 MeV gamma 106.68 276.254 29470.8 + case= 25 layer above 20 MeV muon 0.31 223.85 69.3936 + case= 26 layer above 20 MeV neutrino 8.42 37.9475 319.518 + case= 27 layer above 20 MeV pion 37.62 1365.43 51367.5 + case= 28 layer above 20 MeV neutron 35.13 179.139 6293.16 + case= 29 layer above 20 MeV proton 23.3 298.78 6961.57 + case= 30 layer above 20 MeV ion 4.98 50.5149 251.564 + case= 31 layer above 20 MeV otherMeson 2.57 3493.08 8977.21 + case= 32 layer above 20 MeV otherBaryon 0.74 1673.16 1238.14 ============================================================= @@ -1367,7 +1375,7 @@ Index : 3 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=10.690000s Real=10.792871s Sys=0.020000s + User=7.960000s Real=8.104688s Sys=0.020000s =============== Run::PrintInfo() =============== RunID = 2 @@ -1380,140 +1388,140 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.0752019 - case= 1 downstream electron 0.00531156 - case= 2 downstream gamma 0.0655695 - case= 3 downstream muon 7.79646e-06 - case= 4 downstream neutrino 0.000268002 - case= 5 downstream pion 0.000636555 - case= 6 downstream neutron 0.00303979 - case= 7 downstream proton 0.000296422 - case= 8 downstream ion 5.49109e-06 - case= 9 downstream otherMeson 6.39295e-05 - case= 10 downstream otherBaryon 2.83384e-06 - case= 11 downstream below 20 MeV all 0.0663264 - case= 12 downstream below 20 MeV electron 0.00349605 - case= 13 downstream below 20 MeV gamma 0.0606728 + case= 0 downstream all 0.0697971 + case= 1 downstream electron 0.00514584 + case= 2 downstream gamma 0.0601827 + case= 3 downstream muon 1.13185e-05 + case= 4 downstream neutrino 0.000294311 + case= 5 downstream pion 0.000685834 + case= 6 downstream neutron 0.00315144 + case= 7 downstream proton 0.000260306 + case= 8 downstream ion 1.01354e-05 + case= 9 downstream otherMeson 5.25182e-05 + case= 10 downstream otherBaryon 2.64846e-06 + case= 11 downstream below 20 MeV all 0.0610889 + case= 12 downstream below 20 MeV electron 0.00330768 + case= 13 downstream below 20 MeV gamma 0.055506 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 2.09239e-05 - case= 16 downstream below 20 MeV pion 5.99244e-06 - case= 17 downstream below 20 MeV neutron 0.00211189 - case= 18 downstream below 20 MeV proton 1.88096e-05 - case= 19 downstream below 20 MeV ion 0 + case= 15 downstream below 20 MeV neutrino 1.30389e-05 + case= 16 downstream below 20 MeV pion 1.85215e-06 + case= 17 downstream below 20 MeV neutron 0.00225364 + case= 18 downstream below 20 MeV proton 5.01579e-06 + case= 19 downstream below 20 MeV ion 1.6607e-06 case= 20 downstream below 20 MeV otherMeson 0 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.00887551 - case= 23 downstream above 20 MeV electron 0.00181552 - case= 24 downstream above 20 MeV gamma 0.00489678 - case= 25 downstream above 20 MeV muon 7.79646e-06 - case= 26 downstream above 20 MeV neutrino 0.000247078 - case= 27 downstream above 20 MeV pion 0.000630562 - case= 28 downstream above 20 MeV neutron 0.000927908 - case= 29 downstream above 20 MeV proton 0.000277612 - case= 30 downstream above 20 MeV ion 5.49109e-06 - case= 31 downstream above 20 MeV otherMeson 6.39295e-05 - case= 32 downstream above 20 MeV otherBaryon 2.83384e-06 - case= 33 side all 0.003521 - case= 34 side electron 7.14441e-05 - case= 35 side gamma 0.00193845 - case= 36 side muon 1.5655e-06 - case= 37 side neutrino 0.000155322 - case= 38 side pion 1.53907e-05 - case= 39 side neutron 0.00133119 - case= 40 side proton 7.28281e-06 + case= 22 downstream above 20 MeV all 0.00870818 + case= 23 downstream above 20 MeV electron 0.00183816 + case= 24 downstream above 20 MeV gamma 0.00467672 + case= 25 downstream above 20 MeV muon 1.13185e-05 + case= 26 downstream above 20 MeV neutrino 0.000281272 + case= 27 downstream above 20 MeV pion 0.000683982 + case= 28 downstream above 20 MeV neutron 0.000897805 + case= 29 downstream above 20 MeV proton 0.00025529 + case= 30 downstream above 20 MeV ion 8.47467e-06 + case= 31 downstream above 20 MeV otherMeson 5.25182e-05 + case= 32 downstream above 20 MeV otherBaryon 2.64846e-06 + case= 33 side all 0.00309171 + case= 34 side electron 5.55059e-05 + case= 35 side gamma 0.00166089 + case= 36 side muon 1.16644e-06 + case= 37 side neutrino 0.000148356 + case= 38 side pion 1.12895e-05 + case= 39 side neutron 0.00121326 + case= 40 side proton 7.92019e-07 case= 41 side ion 0 - case= 42 side otherMeson 3.59277e-07 + case= 42 side otherMeson 4.46262e-07 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.0030973 - case= 45 side below 20 MeV electron 5.54455e-05 - case= 46 side below 20 MeV gamma 0.00188165 + case= 44 side below 20 MeV all 0.00272137 + case= 45 side below 20 MeV electron 4.24998e-05 + case= 46 side below 20 MeV gamma 0.00160878 case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 1.05714e-05 - case= 49 side below 20 MeV pion 0 - case= 50 side below 20 MeV neutron 0.00114924 - case= 51 side below 20 MeV proton 3.927e-07 + case= 48 side below 20 MeV neutrino 1.19669e-05 + case= 49 side below 20 MeV pion 3.26286e-07 + case= 50 side below 20 MeV neutron 0.00105779 + case= 51 side below 20 MeV proton 0 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000423705 - case= 56 side above 20 MeV electron 1.59986e-05 - case= 57 side above 20 MeV gamma 5.68001e-05 - case= 58 side above 20 MeV muon 1.5655e-06 - case= 59 side above 20 MeV neutrino 0.00014475 - case= 60 side above 20 MeV pion 1.53907e-05 - case= 61 side above 20 MeV neutron 0.00018195 - case= 62 side above 20 MeV proton 6.89011e-06 + case= 55 side above 20 MeV all 0.00037034 + case= 56 side above 20 MeV electron 1.30061e-05 + case= 57 side above 20 MeV gamma 5.21081e-05 + case= 58 side above 20 MeV muon 1.16644e-06 + case= 59 side above 20 MeV neutrino 0.000136389 + case= 60 side above 20 MeV pion 1.09632e-05 + case= 61 side above 20 MeV neutron 0.000155469 + case= 62 side above 20 MeV proton 7.92019e-07 case= 63 side above 20 MeV ion 0 - case= 64 side above 20 MeV otherMeson 3.59277e-07 + case= 64 side above 20 MeV otherMeson 4.46262e-07 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.00269802 - case= 67 upstream electron 2.33177e-05 - case= 68 upstream gamma 0.00130078 + case= 66 upstream all 0.00240171 + case= 67 upstream electron 2.79801e-05 + case= 68 upstream gamma 0.00111041 case= 69 upstream muon 0 - case= 70 upstream neutrino 0.000184532 - case= 71 upstream pion 1.36964e-05 - case= 72 upstream neutron 0.00117569 - case= 73 upstream proton 0 + case= 70 upstream neutrino 0.00011698 + case= 71 upstream pion 2.77734e-06 + case= 72 upstream neutron 0.00114166 + case= 73 upstream proton 1.90613e-06 case= 74 upstream ion 0 case= 75 upstream otherMeson 0 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.00236542 - case= 78 upstream below 20 MeV electron 1.6659e-05 - case= 79 upstream below 20 MeV gamma 0.00127005 + case= 77 upstream below 20 MeV all 0.00216241 + case= 78 upstream below 20 MeV electron 1.61123e-05 + case= 79 upstream below 20 MeV gamma 0.00108933 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 2.56537e-05 - case= 82 upstream below 20 MeV pion 1.34474e-06 - case= 83 upstream below 20 MeV neutron 0.00105171 - case= 84 upstream below 20 MeV proton 0 + case= 81 upstream below 20 MeV neutrino 1.42822e-05 + case= 82 upstream below 20 MeV pion 0 + case= 83 upstream below 20 MeV neutron 0.00104078 + case= 84 upstream below 20 MeV proton 1.90613e-06 case= 85 upstream below 20 MeV ion 0 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 0.000332593 - case= 89 upstream above 20 MeV electron 6.65871e-06 - case= 90 upstream above 20 MeV gamma 3.07252e-05 + case= 88 upstream above 20 MeV all 0.000239306 + case= 89 upstream above 20 MeV electron 1.18678e-05 + case= 90 upstream above 20 MeV gamma 2.10799e-05 case= 91 upstream above 20 MeV muon 0 - case= 92 upstream above 20 MeV neutrino 0.000158878 - case= 93 upstream above 20 MeV pion 1.23516e-05 - case= 94 upstream above 20 MeV neutron 0.00012398 + case= 92 upstream above 20 MeV neutrino 0.000102697 + case= 93 upstream above 20 MeV pion 2.77734e-06 + case= 94 upstream above 20 MeV neutron 0.000100883 case= 95 upstream above 20 MeV proton 0 case= 96 upstream above 20 MeV ion 0 case= 97 upstream above 20 MeV otherMeson 0 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 layer all 21480.6 7.35815 158057 - case= 1 layer electron 17320.3 2.43645 42200.1 - case= 2 layer gamma 3711.45 12.3841 45962.9 - case= 3 layer muon 2.17 18.5372 40.2256 - case= 4 layer neutrino 6.32 36.7741 232.413 - case= 5 layer pion 28.96 1588.51 46003.2 - case= 6 layer neutron 97.13 55.6271 5403.06 - case= 7 layer proton 69.18 81.5169 5639.34 - case= 8 layer ion 241.82 1.6964 410.224 - case= 9 layer otherMeson 2.78 4061.05 11289.7 - case= 10 layer otherBaryon 0.44 1990.77 875.937 - case= 11 layer below 20 MeV all 20987.4 0.548007 11501.2 - case= 12 layer below 20 MeV electron 17120.4 0.363657 6225.95 - case= 13 layer below 20 MeV gamma 3511.3 1.25419 4403.83 - case= 14 layer below 20 MeV muon 2 4.27112 8.54224 - case= 15 layer below 20 MeV neutrino 0.5 13.3511 6.67555 - case= 16 layer below 20 MeV pion 0.46 13.3117 6.12336 - case= 17 layer below 20 MeV neutron 68.78 4.39761 302.468 - case= 18 layer below 20 MeV proton 45.9 6.54711 300.512 - case= 19 layer below 20 MeV ion 237.99 1.03507 246.337 - case= 20 layer below 20 MeV otherMeson 0.09 8.00852 0.720767 - case= 21 layer below 20 MeV otherBaryon 0.01 9.44992 0.0944992 - case= 22 layer above 20 MeV all 493.17 297.171 146556 - case= 23 layer above 20 MeV electron 199.95 179.916 35974.2 - case= 24 layer above 20 MeV gamma 200.15 207.64 41559.1 - case= 25 layer above 20 MeV muon 0.17 186.373 31.6834 - case= 26 layer above 20 MeV neutrino 5.82 38.7864 225.737 - case= 27 layer above 20 MeV pion 28.5 1613.93 45997.1 - case= 28 layer above 20 MeV neutron 28.35 179.915 5100.59 - case= 29 layer above 20 MeV proton 23.28 229.331 5338.83 - case= 30 layer above 20 MeV ion 3.83 42.7904 163.887 - case= 31 layer above 20 MeV otherMeson 2.69 4196.66 11289 - case= 32 layer above 20 MeV otherBaryon 0.43 2036.84 875.843 + case= 0 layer all 18419 7.97234 146843 + case= 1 layer electron 14802.9 2.52366 37357.6 + case= 2 layer gamma 3190.23 12.9621 41352 + case= 3 layer muon 2.08 31.5154 65.5521 + case= 4 layer neutrino 6 36.2035 217.221 + case= 5 layer pion 27.44 1668.84 45793.1 + case= 6 layer neutron 92.69 64.6061 5988.34 + case= 7 layer proton 65.75 77.162 5073.4 + case= 8 layer ion 229.12 1.85407 424.804 + case= 9 layer otherMeson 2.26 4202.58 9497.84 + case= 10 layer otherBaryon 0.55 1951.16 1073.14 + case= 11 layer below 20 MeV all 17984.1 0.555162 9984.09 + case= 12 layer below 20 MeV electron 14630.7 0.364427 5331.83 + case= 13 layer below 20 MeV gamma 3015.75 1.26697 3820.87 + case= 14 layer below 20 MeV muon 1.89 4.17725 7.895 + case= 15 layer below 20 MeV neutrino 0.48 13.3524 6.40916 + case= 16 layer below 20 MeV pion 0.42 12.2935 5.16327 + case= 17 layer below 20 MeV neutron 65.47 4.38491 287.08 + case= 18 layer below 20 MeV proton 44.07 6.44338 283.96 + case= 19 layer below 20 MeV ion 225.25 1.06552 240.009 + case= 20 layer below 20 MeV otherMeson 0.03 15.716 0.47148 + case= 21 layer below 20 MeV otherBaryon 0.04 10.1948 0.40779 + case= 22 layer above 20 MeV all 434.94 314.661 136859 + case= 23 layer above 20 MeV electron 172.22 185.958 32025.7 + case= 24 layer above 20 MeV gamma 174.48 215.103 37531.1 + case= 25 layer above 20 MeV muon 0.19 303.458 57.6571 + case= 26 layer above 20 MeV neutrino 5.52 38.1905 210.812 + case= 27 layer above 20 MeV pion 27.02 1694.59 45787.9 + case= 28 layer above 20 MeV neutron 27.22 209.451 5701.26 + case= 29 layer above 20 MeV proton 21.68 220.915 4789.44 + case= 30 layer above 20 MeV ion 3.87 47.7505 184.795 + case= 31 layer above 20 MeV otherMeson 2.23 4258.91 9497.36 + case= 32 layer above 20 MeV otherBaryon 0.51 2103.4 1072.73 ============================================================= @@ -1588,7 +1596,7 @@ Index : 4 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=3.560000s Real=3.612911s Sys=0.020000s + User=2.880000s Real=2.984558s Sys=0.010000s =============== Run::PrintInfo() =============== RunID = 3 @@ -1601,140 +1609,140 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.0471382 - case= 1 downstream electron 0.00424842 - case= 2 downstream gamma 0.0395453 - case= 3 downstream muon 9.86667e-06 - case= 4 downstream neutrino 8.62929e-05 - case= 5 downstream pion 0.00062669 - case= 6 downstream neutron 0.00232 - case= 7 downstream proton 0.000253533 - case= 8 downstream ion 3.39278e-06 - case= 9 downstream otherMeson 4.41708e-05 - case= 10 downstream otherBaryon 5.83985e-07 - case= 11 downstream below 20 MeV all 0.0401605 - case= 12 downstream below 20 MeV electron 0.00239379 - case= 13 downstream below 20 MeV gamma 0.0360186 + case= 0 downstream all 0.0475061 + case= 1 downstream electron 0.00429097 + case= 2 downstream gamma 0.0398061 + case= 3 downstream muon 1.25897e-05 + case= 4 downstream neutrino 0.00012539 + case= 5 downstream pion 0.000593793 + case= 6 downstream neutron 0.00244348 + case= 7 downstream proton 0.000197917 + case= 8 downstream ion 1.32207e-06 + case= 9 downstream otherMeson 3.46298e-05 + case= 10 downstream otherBaryon 0 + case= 11 downstream below 20 MeV all 0.0407074 + case= 12 downstream below 20 MeV electron 0.00259106 + case= 13 downstream below 20 MeV gamma 0.0362682 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 4.52528e-06 - case= 16 downstream below 20 MeV pion 2.05683e-06 - case= 17 downstream below 20 MeV neutron 0.00174012 - case= 18 downstream below 20 MeV proton 1.36625e-06 + case= 15 downstream below 20 MeV neutrino 5.71757e-06 + case= 16 downstream below 20 MeV pion 0 + case= 17 downstream below 20 MeV neutron 0.00183203 + case= 18 downstream below 20 MeV proton 1.0376e-05 case= 19 downstream below 20 MeV ion 0 case= 20 downstream below 20 MeV otherMeson 0 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.00697777 - case= 23 downstream above 20 MeV electron 0.00185463 - case= 24 downstream above 20 MeV gamma 0.00352668 - case= 25 downstream above 20 MeV muon 9.86667e-06 - case= 26 downstream above 20 MeV neutrino 8.17676e-05 - case= 27 downstream above 20 MeV pion 0.000624633 - case= 28 downstream above 20 MeV neutron 0.000579881 - case= 29 downstream above 20 MeV proton 0.000252166 - case= 30 downstream above 20 MeV ion 3.39278e-06 - case= 31 downstream above 20 MeV otherMeson 4.41708e-05 - case= 32 downstream above 20 MeV otherBaryon 5.83985e-07 - case= 33 side all 0.00256056 - case= 34 side electron 5.11682e-05 - case= 35 side gamma 0.00158525 - case= 36 side muon 0 - case= 37 side neutrino 4.00534e-05 - case= 38 side pion 9.48686e-06 - case= 39 side neutron 0.00086893 - case= 40 side proton 4.0977e-06 - case= 41 side ion 0 - case= 42 side otherMeson 1.56464e-06 + case= 22 downstream above 20 MeV all 0.00679876 + case= 23 downstream above 20 MeV electron 0.0016999 + case= 24 downstream above 20 MeV gamma 0.00353786 + case= 25 downstream above 20 MeV muon 1.25897e-05 + case= 26 downstream above 20 MeV neutrino 0.000119672 + case= 27 downstream above 20 MeV pion 0.000593793 + case= 28 downstream above 20 MeV neutron 0.000611451 + case= 29 downstream above 20 MeV proton 0.000187541 + case= 30 downstream above 20 MeV ion 1.32207e-06 + case= 31 downstream above 20 MeV otherMeson 3.46298e-05 + case= 32 downstream above 20 MeV otherBaryon 0 + case= 33 side all 0.00300847 + case= 34 side electron 6.09104e-05 + case= 35 side gamma 0.00192041 + case= 36 side muon 1.18868e-06 + case= 37 side neutrino 4.45536e-05 + case= 38 side pion 1.50321e-05 + case= 39 side neutron 0.000960791 + case= 40 side proton 4.81854e-06 + case= 41 side ion 3.44836e-07 + case= 42 side otherMeson 4.21449e-07 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.0023537 - case= 45 side below 20 MeV electron 3.62781e-05 - case= 46 side below 20 MeV gamma 0.0015527 - case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 2.8438e-06 + case= 44 side below 20 MeV all 0.00277942 + case= 45 side below 20 MeV electron 4.51171e-05 + case= 46 side below 20 MeV gamma 0.00187422 + case= 47 side below 20 MeV muon 3.24241e-07 + case= 48 side below 20 MeV neutrino 2.23623e-06 case= 49 side below 20 MeV pion 0 - case= 50 side below 20 MeV neutron 0.00076188 + case= 50 side below 20 MeV neutron 0.000857524 case= 51 side below 20 MeV proton 0 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000206856 - case= 56 side above 20 MeV electron 1.48901e-05 - case= 57 side above 20 MeV gamma 3.2556e-05 - case= 58 side above 20 MeV muon 0 - case= 59 side above 20 MeV neutrino 3.72096e-05 - case= 60 side above 20 MeV pion 9.48686e-06 - case= 61 side above 20 MeV neutron 0.000107051 - case= 62 side above 20 MeV proton 4.0977e-06 - case= 63 side above 20 MeV ion 0 - case= 64 side above 20 MeV otherMeson 1.56464e-06 + case= 55 side above 20 MeV all 0.000229042 + case= 56 side above 20 MeV electron 1.57933e-05 + case= 57 side above 20 MeV gamma 4.61826e-05 + case= 58 side above 20 MeV muon 8.64437e-07 + case= 59 side above 20 MeV neutrino 4.23174e-05 + case= 60 side above 20 MeV pion 1.50321e-05 + case= 61 side above 20 MeV neutron 0.000103267 + case= 62 side above 20 MeV proton 4.81854e-06 + case= 63 side above 20 MeV ion 3.44836e-07 + case= 64 side above 20 MeV otherMeson 4.21449e-07 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.00125181 - case= 67 upstream electron 1.21836e-05 - case= 68 upstream gamma 0.000591713 + case= 66 upstream all 0.00154168 + case= 67 upstream electron 2.25614e-05 + case= 68 upstream gamma 0.000774236 case= 69 upstream muon 0 - case= 70 upstream neutrino 2.67003e-05 - case= 71 upstream pion 4.76475e-06 - case= 72 upstream neutron 0.00061645 - case= 73 upstream proton 0 + case= 70 upstream neutrino 3.36032e-05 + case= 71 upstream pion 2.05104e-06 + case= 72 upstream neutron 0.000707557 + case= 73 upstream proton 1.66998e-06 case= 74 upstream ion 0 case= 75 upstream otherMeson 0 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.00115668 - case= 78 upstream below 20 MeV electron 8.12453e-06 - case= 79 upstream below 20 MeV gamma 0.000586608 + case= 77 upstream below 20 MeV all 0.00141106 + case= 78 upstream below 20 MeV electron 1.63836e-05 + case= 79 upstream below 20 MeV gamma 0.000764378 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 1.57232e-06 + case= 81 upstream below 20 MeV neutrino 6.11104e-06 case= 82 upstream below 20 MeV pion 0 - case= 83 upstream below 20 MeV neutron 0.000560378 + case= 83 upstream below 20 MeV neutron 0.000624187 case= 84 upstream below 20 MeV proton 0 case= 85 upstream below 20 MeV ion 0 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 9.51292e-05 - case= 89 upstream above 20 MeV electron 4.0591e-06 - case= 90 upstream above 20 MeV gamma 5.10507e-06 + case= 88 upstream above 20 MeV all 0.000130619 + case= 89 upstream above 20 MeV electron 6.17777e-06 + case= 90 upstream above 20 MeV gamma 9.85813e-06 case= 91 upstream above 20 MeV muon 0 - case= 92 upstream above 20 MeV neutrino 2.5128e-05 - case= 93 upstream above 20 MeV pion 4.76475e-06 - case= 94 upstream above 20 MeV neutron 5.60723e-05 - case= 95 upstream above 20 MeV proton 0 + case= 92 upstream above 20 MeV neutrino 2.74922e-05 + case= 93 upstream above 20 MeV pion 2.05104e-06 + case= 94 upstream above 20 MeV neutron 8.33699e-05 + case= 95 upstream above 20 MeV proton 1.66998e-06 case= 96 upstream above 20 MeV ion 0 case= 97 upstream above 20 MeV otherMeson 0 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 layer all 4778.08 16.5404 79031.2 - case= 1 layer electron 3507.02 4.87954 17112.6 - case= 2 layer gamma 1103.34 19.7774 21821.2 - case= 3 layer muon 0.56 41.0771 23.0032 - case= 4 layer neutrino 1.57 41.2847 64.817 - case= 5 layer pion 13.08 2269.68 29687.5 - case= 6 layer neutron 53.93 49.3647 2662.24 - case= 7 layer proton 14.26 177.65 2533.28 - case= 8 layer ion 82.9 1.57691 130.726 - case= 9 layer otherMeson 1.23 3956.51 4866.51 - case= 10 layer otherBaryon 0.19 680.805 129.353 - case= 11 layer below 20 MeV all 4611.4 0.676872 3121.33 - case= 12 layer below 20 MeV electron 3447.39 0.438243 1510.79 - case= 13 layer below 20 MeV gamma 1032.05 1.2809 1321.95 - case= 14 layer below 20 MeV muon 0.47 4.11981 1.93631 - case= 15 layer below 20 MeV neutrino 0.09 16.2724 1.46451 - case= 16 layer below 20 MeV pion 0.05 12.5137 0.625684 - case= 17 layer below 20 MeV neutron 42.85 3.69593 158.371 - case= 18 layer below 20 MeV proton 6.81 8.43172 57.42 - case= 19 layer below 20 MeV ion 81.62 0.838219 68.4155 - case= 20 layer below 20 MeV otherMeson 0.06 5.38195 0.322917 - case= 21 layer below 20 MeV otherBaryon 0.01 2.57908 0.0257908 - case= 22 layer above 20 MeV all 166.68 455.423 75909.9 - case= 23 layer above 20 MeV electron 59.63 261.644 15601.8 - case= 24 layer above 20 MeV gamma 71.29 287.547 20499.2 - case= 25 layer above 20 MeV muon 0.09 234.076 21.0669 - case= 26 layer above 20 MeV neutrino 1.48 42.8057 63.3525 - case= 27 layer above 20 MeV pion 13.03 2278.35 29686.8 - case= 28 layer above 20 MeV neutron 11.08 225.981 2503.87 - case= 29 layer above 20 MeV proton 7.45 332.331 2475.86 - case= 30 layer above 20 MeV ion 1.28 48.6803 62.3108 - case= 31 layer above 20 MeV otherMeson 1.17 4159.13 4866.18 - case= 32 layer above 20 MeV otherBaryon 0.18 718.485 129.327 + case= 0 layer all 5140.12 14.5164 74616.2 + case= 1 layer electron 3780.9 4.34099 16412.9 + case= 2 layer gamma 1178.63 18.1736 21419.9 + case= 3 layer muon 0.71 111.114 78.8907 + case= 4 layer neutrino 1.88 60.744 114.199 + case= 5 layer pion 13.39 2013.38 26959.1 + case= 6 layer neutron 58.74 39.8858 2342.89 + case= 7 layer proton 15.15 126.028 1909.33 + case= 8 layer ion 89.4 1.80237 161.132 + case= 9 layer otherMeson 1.13 4420.68 4995.37 + case= 10 layer otherBaryon 0.19 1171.1 222.508 + case= 11 layer below 20 MeV all 4967.14 0.671887 3337.36 + case= 12 layer below 20 MeV electron 3719.49 0.434985 1617.92 + case= 13 layer below 20 MeV gamma 1104.48 1.26603 1398.31 + case= 14 layer below 20 MeV muon 0.53 4.39291 2.32824 + case= 15 layer below 20 MeV neutrino 0.14 13.3807 1.87329 + case= 16 layer below 20 MeV pion 0.12 13.0786 1.56943 + case= 17 layer below 20 MeV neutron 47.19 3.75975 177.423 + case= 18 layer below 20 MeV proton 7.37 8.43397 62.1584 + case= 19 layer below 20 MeV ion 87.79 0.859731 75.4758 + case= 20 layer below 20 MeV otherMeson 0.02 7.83413 0.156683 + case= 21 layer below 20 MeV otherBaryon 0.01 13.9762 0.139762 + case= 22 layer above 20 MeV all 172.98 412.064 71278.9 + case= 23 layer above 20 MeV electron 61.41 240.921 14794.9 + case= 24 layer above 20 MeV gamma 74.15 270.015 20021.6 + case= 25 layer above 20 MeV muon 0.18 425.347 76.5624 + case= 26 layer above 20 MeV neutrino 1.74 64.5549 112.326 + case= 27 layer above 20 MeV pion 13.27 2031.47 26957.6 + case= 28 layer above 20 MeV neutron 11.55 187.487 2165.47 + case= 29 layer above 20 MeV proton 7.78 237.426 1847.17 + case= 30 layer above 20 MeV ion 1.61 53.2026 85.6561 + case= 31 layer above 20 MeV otherMeson 1.11 4500.19 4995.21 + case= 32 layer above 20 MeV otherBaryon 0.18 1235.38 222.369 ============================================================= @@ -1814,7 +1822,7 @@ Index : 5 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=39.340000s Real=39.659110s Sys=0.020000s + User=38.360000s Real=38.666596s Sys=0.020000s =============== Run::PrintInfo() =============== RunID = 4 @@ -1827,140 +1835,140 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.0158153 - case= 1 downstream electron 0.000390688 - case= 2 downstream gamma 0.00717452 - case= 3 downstream muon 1.31424e-06 - case= 4 downstream neutrino 0.000360404 - case= 5 downstream pion 0.000137687 - case= 6 downstream neutron 0.00766423 - case= 7 downstream proton 7.21448e-05 + case= 0 downstream all 0.0143888 + case= 1 downstream electron 0.00032483 + case= 2 downstream gamma 0.00577779 + case= 3 downstream muon 3.58648e-06 + case= 4 downstream neutrino 0.000403655 + case= 5 downstream pion 0.000134971 + case= 6 downstream neutron 0.00766368 + case= 7 downstream proton 6.75161e-05 case= 8 downstream ion 0 - case= 9 downstream otherMeson 1.43263e-05 - case= 10 downstream otherBaryon 0 - case= 11 downstream below 20 MeV all 0.0141395 - case= 12 downstream below 20 MeV electron 0.000231432 - case= 13 downstream below 20 MeV gamma 0.00688418 + case= 9 downstream otherMeson 1.14988e-05 + case= 10 downstream otherBaryon 1.27395e-06 + case= 11 downstream below 20 MeV all 0.0128814 + case= 12 downstream below 20 MeV electron 0.000266748 + case= 13 downstream below 20 MeV gamma 0.0055706 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 3.00332e-05 - case= 16 downstream below 20 MeV pion 1.34502e-06 - case= 17 downstream below 20 MeV neutron 0.00699246 - case= 18 downstream below 20 MeV proton 0 + case= 15 downstream below 20 MeV neutrino 3.88817e-05 + case= 16 downstream below 20 MeV pion 0 + case= 17 downstream below 20 MeV neutron 0.00699595 + case= 18 downstream below 20 MeV proton 7.59211e-06 case= 19 downstream below 20 MeV ion 0 - case= 20 downstream below 20 MeV otherMeson 0 + case= 20 downstream below 20 MeV otherMeson 1.59465e-06 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.00167585 - case= 23 downstream above 20 MeV electron 0.000159256 - case= 24 downstream above 20 MeV gamma 0.000290337 - case= 25 downstream above 20 MeV muon 1.31424e-06 - case= 26 downstream above 20 MeV neutrino 0.000330371 - case= 27 downstream above 20 MeV pion 0.000136342 - case= 28 downstream above 20 MeV neutron 0.000671763 - case= 29 downstream above 20 MeV proton 7.21448e-05 + case= 22 downstream above 20 MeV all 0.00150744 + case= 23 downstream above 20 MeV electron 5.80819e-05 + case= 24 downstream above 20 MeV gamma 0.000207189 + case= 25 downstream above 20 MeV muon 3.58648e-06 + case= 26 downstream above 20 MeV neutrino 0.000364773 + case= 27 downstream above 20 MeV pion 0.000134971 + case= 28 downstream above 20 MeV neutron 0.000667732 + case= 29 downstream above 20 MeV proton 5.9924e-05 case= 30 downstream above 20 MeV ion 0 - case= 31 downstream above 20 MeV otherMeson 1.43263e-05 - case= 32 downstream above 20 MeV otherBaryon 0 - case= 33 side all 0.00506085 - case= 34 side electron 4.33164e-06 - case= 35 side gamma 0.000531974 + case= 31 downstream above 20 MeV otherMeson 9.9041e-06 + case= 32 downstream above 20 MeV otherBaryon 1.27395e-06 + case= 33 side all 0.00505949 + case= 34 side electron 4.48743e-06 + case= 35 side gamma 0.000609683 case= 36 side muon 0 - case= 37 side neutrino 0.000294034 - case= 38 side pion 0 - case= 39 side neutron 0.00422903 - case= 40 side proton 1.48131e-06 + case= 37 side neutrino 0.000297204 + case= 38 side pion 6.57837e-07 + case= 39 side neutron 0.00414667 + case= 40 side proton 7.94153e-07 case= 41 side ion 0 case= 42 side otherMeson 0 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.00464291 - case= 45 side below 20 MeV electron 4.33164e-06 - case= 46 side below 20 MeV gamma 0.000531974 + case= 44 side below 20 MeV all 0.00464631 + case= 45 side below 20 MeV electron 4.48743e-06 + case= 46 side below 20 MeV gamma 0.000609683 case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 2.04502e-05 + case= 48 side below 20 MeV neutrino 2.52355e-05 case= 49 side below 20 MeV pion 0 - case= 50 side below 20 MeV neutron 0.00408616 + case= 50 side below 20 MeV neutron 0.0040069 case= 51 side below 20 MeV proton 0 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000417939 + case= 55 side above 20 MeV all 0.000413184 case= 56 side above 20 MeV electron 0 case= 57 side above 20 MeV gamma 0 case= 58 side above 20 MeV muon 0 - case= 59 side above 20 MeV neutrino 0.000273583 - case= 60 side above 20 MeV pion 0 - case= 61 side above 20 MeV neutron 0.000142875 - case= 62 side above 20 MeV proton 1.48131e-06 + case= 59 side above 20 MeV neutrino 0.000271968 + case= 60 side above 20 MeV pion 6.57837e-07 + case= 61 side above 20 MeV neutron 0.000139764 + case= 62 side above 20 MeV proton 7.94153e-07 case= 63 side above 20 MeV ion 0 case= 64 side above 20 MeV otherMeson 0 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.0151432 - case= 67 upstream electron 0.000139721 - case= 68 upstream gamma 0.00310902 - case= 69 upstream muon 0 - case= 70 upstream neutrino 0.00044615 - case= 71 upstream pion 1.56383e-05 - case= 72 upstream neutron 0.0114278 - case= 73 upstream proton 4.81457e-06 + case= 66 upstream all 0.0128302 + case= 67 upstream electron 4.97679e-05 + case= 68 upstream gamma 0.00270875 + case= 69 upstream muon 6.78624e-06 + case= 70 upstream neutrino 0.000467338 + case= 71 upstream pion 2.05153e-05 + case= 72 upstream neutron 0.00957209 + case= 73 upstream proton 4.9756e-06 case= 74 upstream ion 0 case= 75 upstream otherMeson 0 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.0141631 - case= 78 upstream below 20 MeV electron 0.000139721 - case= 79 upstream below 20 MeV gamma 0.00307707 + case= 77 upstream below 20 MeV all 0.0120643 + case= 78 upstream below 20 MeV electron 4.07197e-05 + case= 79 upstream below 20 MeV gamma 0.00269121 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 3.7726e-05 - case= 82 upstream below 20 MeV pion 0 - case= 83 upstream below 20 MeV neutron 0.0109086 - case= 84 upstream below 20 MeV proton 0 + case= 81 upstream below 20 MeV neutrino 4.28801e-05 + case= 82 upstream below 20 MeV pion 1.31361e-06 + case= 83 upstream below 20 MeV neutron 0.00928619 + case= 84 upstream below 20 MeV proton 2.00813e-06 case= 85 upstream below 20 MeV ion 0 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 0.000980029 - case= 89 upstream above 20 MeV electron 0 - case= 90 upstream above 20 MeV gamma 3.19532e-05 - case= 91 upstream above 20 MeV muon 0 - case= 92 upstream above 20 MeV neutrino 0.000408424 - case= 93 upstream above 20 MeV pion 1.56383e-05 - case= 94 upstream above 20 MeV neutron 0.000519199 - case= 95 upstream above 20 MeV proton 4.81457e-06 + case= 88 upstream above 20 MeV all 0.000765902 + case= 89 upstream above 20 MeV electron 9.04823e-06 + case= 90 upstream above 20 MeV gamma 1.75392e-05 + case= 91 upstream above 20 MeV muon 6.78624e-06 + case= 92 upstream above 20 MeV neutrino 0.000424458 + case= 93 upstream above 20 MeV pion 1.92017e-05 + case= 94 upstream above 20 MeV neutron 0.000285902 + case= 95 upstream above 20 MeV proton 2.96747e-06 case= 96 upstream above 20 MeV ion 0 case= 97 upstream above 20 MeV otherMeson 0 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 layer all 56422.1 4.47216 252329 - case= 1 layer electron 42203.7 1.69935 71719 - case= 2 layer gamma 11894 5.90723 70260.5 - case= 3 layer muon 4.26 15.8126 67.3618 - case= 4 layer neutrino 12.71 37.6468 478.491 - case= 5 layer pion 50.58 1346.18 68089.9 - case= 6 layer neutron 886.86 19.1276 16963.5 - case= 7 layer proton 196.5 65.1045 12793 - case= 8 layer ion 1168.74 0.960656 1122.76 - case= 9 layer otherMeson 3.76 2625.28 9871.04 - case= 10 layer otherBaryon 1.03 935.162 963.217 - case= 11 layer below 20 MeV all 55382.6 0.654785 36263.7 - case= 12 layer below 20 MeV electron 41800 0.446971 18683.4 - case= 13 layer below 20 MeV gamma 11528.8 1.21699 14030.5 - case= 14 layer below 20 MeV muon 3.95 4.11981 16.2733 - case= 15 layer below 20 MeV neutrino 0.98 14.6208 14.3284 - case= 16 layer below 20 MeV pion 0.81 12.5192 10.1405 - case= 17 layer below 20 MeV neutron 768.04 2.55895 1965.37 - case= 18 layer below 20 MeV proton 122.33 8.01 979.863 - case= 19 layer below 20 MeV ion 1157.38 0.485009 561.34 - case= 20 layer below 20 MeV otherMeson 0.16 7.88089 1.26094 - case= 21 layer below 20 MeV otherBaryon 0.11 10.7256 1.17981 - case= 22 layer above 20 MeV all 1039.51 207.853 216065 - case= 23 layer above 20 MeV electron 403.68 131.38 53035.6 - case= 24 layer above 20 MeV gamma 365.15 153.992 56230 - case= 25 layer above 20 MeV muon 0.31 164.802 51.0886 - case= 26 layer above 20 MeV neutrino 11.73 39.5706 464.163 - case= 27 layer above 20 MeV pion 49.77 1367.89 68079.7 - case= 28 layer above 20 MeV neutron 118.82 126.226 14998.1 - case= 29 layer above 20 MeV proton 74.17 159.271 11813.2 - case= 30 layer above 20 MeV ion 11.36 49.4205 561.417 - case= 31 layer above 20 MeV otherMeson 3.6 2741.6 9869.78 - case= 32 layer above 20 MeV otherBaryon 0.92 1045.69 962.037 + case= 0 layer all 56139.2 4.42757 248560 + case= 1 layer electron 42061.7 1.74463 73382 + case= 2 layer gamma 11858.7 6.05404 71792.7 + case= 3 layer muon 4.3 19.8379 85.303 + case= 4 layer neutrino 12.81 38.582 494.235 + case= 5 layer pion 47.36 1271.47 60217.1 + case= 6 layer neutron 846.52 18.8098 15922.9 + case= 7 layer proton 191.11 69.0626 13198.6 + case= 8 layer ion 1111.42 0.979649 1088.8 + case= 9 layer otherMeson 4.18 2600.26 10869.1 + case= 10 layer otherBaryon 1.12 1347.93 1509.68 + case= 11 layer below 20 MeV all 55107.4 0.654734 36080.7 + case= 12 layer below 20 MeV electron 41655.2 0.448366 18676.8 + case= 13 layer below 20 MeV gamma 11491.6 1.21626 13976.7 + case= 14 layer below 20 MeV muon 3.88 4.11981 15.9849 + case= 15 layer below 20 MeV neutrino 1.08 14.7833 15.966 + case= 16 layer below 20 MeV pion 0.83 12.5926 10.4519 + case= 17 layer below 20 MeV neutron 731.45 2.55785 1870.94 + case= 18 layer below 20 MeV proton 121.26 8.0025 970.383 + case= 19 layer below 20 MeV ion 1101.77 0.490282 540.178 + case= 20 layer below 20 MeV otherMeson 0.3 7.4681 2.24043 + case= 21 layer below 20 MeV otherBaryon 0.08 14.4306 1.15445 + case= 22 layer above 20 MeV all 1031.74 205.943 212480 + case= 23 layer above 20 MeV electron 406.46 134.59 54705.3 + case= 24 layer above 20 MeV gamma 367.11 157.49 57816.1 + case= 25 layer above 20 MeV muon 0.42 165.043 69.3181 + case= 26 layer above 20 MeV neutrino 11.73 40.7732 478.269 + case= 27 layer above 20 MeV pion 46.53 1293.93 60206.6 + case= 28 layer above 20 MeV neutron 115.07 122.116 14051.9 + case= 29 layer above 20 MeV proton 69.85 175.063 12228.2 + case= 30 layer above 20 MeV ion 9.65 56.8522 548.623 + case= 31 layer above 20 MeV otherMeson 3.88 2800.74 10866.9 + case= 32 layer above 20 MeV otherBaryon 1.04 1450.5 1508.52 ============================================================= @@ -2045,7 +2053,7 @@ Index : 6 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=40.190000s Real=40.543463s Sys=0.030000s + User=40.770000s Real=41.119661s Sys=0.020000s =============== Run::PrintInfo() =============== RunID = 5 @@ -2058,140 +2066,140 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.00958762 - case= 1 downstream electron 0.000221558 - case= 2 downstream gamma 0.00421409 - case= 3 downstream muon 0 - case= 4 downstream neutrino 0.000391551 - case= 5 downstream pion 9.01384e-05 - case= 6 downstream neutron 0.00459989 - case= 7 downstream proton 5.51775e-05 - case= 8 downstream ion 1.38307e-06 - case= 9 downstream otherMeson 1.083e-05 - case= 10 downstream otherBaryon 3.00459e-06 - case= 11 downstream below 20 MeV all 0.00837522 - case= 12 downstream below 20 MeV electron 0.00018222 - case= 13 downstream below 20 MeV gamma 0.00408672 + case= 0 downstream all 0.0116505 + case= 1 downstream electron 0.000237704 + case= 2 downstream gamma 0.00531287 + case= 3 downstream muon 6.99118e-06 + case= 4 downstream neutrino 0.000445227 + case= 5 downstream pion 0.000105092 + case= 6 downstream neutron 0.00545476 + case= 7 downstream proton 6.9177e-05 + case= 8 downstream ion 0 + case= 9 downstream otherMeson 1.73719e-05 + case= 10 downstream otherBaryon 1.3309e-06 + case= 11 downstream below 20 MeV all 0.010146 + case= 12 downstream below 20 MeV electron 0.000164175 + case= 13 downstream below 20 MeV gamma 0.00518461 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 3.28396e-05 + case= 15 downstream below 20 MeV neutrino 2.88693e-05 case= 16 downstream below 20 MeV pion 0 - case= 17 downstream below 20 MeV neutron 0.00407057 - case= 18 downstream below 20 MeV proton 1.47996e-06 - case= 19 downstream below 20 MeV ion 1.38307e-06 + case= 17 downstream below 20 MeV neutron 0.00476685 + case= 18 downstream below 20 MeV proton 1.4573e-06 + case= 19 downstream below 20 MeV ion 0 case= 20 downstream below 20 MeV otherMeson 0 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.0012124 - case= 23 downstream above 20 MeV electron 3.93378e-05 - case= 24 downstream above 20 MeV gamma 0.000127368 - case= 25 downstream above 20 MeV muon 0 - case= 26 downstream above 20 MeV neutrino 0.000358712 - case= 27 downstream above 20 MeV pion 9.01384e-05 - case= 28 downstream above 20 MeV neutron 0.000529316 - case= 29 downstream above 20 MeV proton 5.36975e-05 + case= 22 downstream above 20 MeV all 0.00150455 + case= 23 downstream above 20 MeV electron 7.35292e-05 + case= 24 downstream above 20 MeV gamma 0.000128258 + case= 25 downstream above 20 MeV muon 6.99118e-06 + case= 26 downstream above 20 MeV neutrino 0.000416357 + case= 27 downstream above 20 MeV pion 0.000105092 + case= 28 downstream above 20 MeV neutron 0.000687903 + case= 29 downstream above 20 MeV proton 6.77197e-05 case= 30 downstream above 20 MeV ion 0 - case= 31 downstream above 20 MeV otherMeson 1.083e-05 - case= 32 downstream above 20 MeV otherBaryon 3.00459e-06 - case= 33 side all 0.0024131 - case= 34 side electron 3.61226e-06 - case= 35 side gamma 0.000533811 + case= 31 downstream above 20 MeV otherMeson 1.73719e-05 + case= 32 downstream above 20 MeV otherBaryon 1.3309e-06 + case= 33 side all 0.00239158 + case= 34 side electron 5.10995e-06 + case= 35 side gamma 0.000519895 case= 36 side muon 0 - case= 37 side neutrino 0.000312423 - case= 38 side pion 4.06079e-07 - case= 39 side neutron 0.00156099 - case= 40 side proton 1.85503e-06 + case= 37 side neutrino 0.000305745 + case= 38 side pion 0 + case= 39 side neutron 0.00155863 + case= 40 side proton 2.19572e-06 case= 41 side ion 0 case= 42 side otherMeson 0 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.00197622 - case= 45 side below 20 MeV electron 3.61226e-06 - case= 46 side below 20 MeV gamma 0.000533811 + case= 44 side below 20 MeV all 0.00197868 + case= 45 side below 20 MeV electron 5.10995e-06 + case= 46 side below 20 MeV gamma 0.000519895 case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 2.69745e-05 + case= 48 side below 20 MeV neutrino 2.65447e-05 case= 49 side below 20 MeV pion 0 - case= 50 side below 20 MeV neutron 0.00141136 - case= 51 side below 20 MeV proton 4.6599e-07 + case= 50 side below 20 MeV neutron 0.00142714 + case= 51 side below 20 MeV proton 0 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000436877 + case= 55 side above 20 MeV all 0.000412894 case= 56 side above 20 MeV electron 0 case= 57 side above 20 MeV gamma 0 case= 58 side above 20 MeV muon 0 - case= 59 side above 20 MeV neutrino 0.000285448 - case= 60 side above 20 MeV pion 4.06079e-07 - case= 61 side above 20 MeV neutron 0.000149634 - case= 62 side above 20 MeV proton 1.38904e-06 + case= 59 side above 20 MeV neutrino 0.0002792 + case= 60 side above 20 MeV pion 0 + case= 61 side above 20 MeV neutron 0.000131499 + case= 62 side above 20 MeV proton 2.19572e-06 case= 63 side above 20 MeV ion 0 case= 64 side above 20 MeV otherMeson 0 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.0115723 - case= 67 upstream electron 7.25629e-05 - case= 68 upstream gamma 0.00320282 - case= 69 upstream muon 1.63821e-06 - case= 70 upstream neutrino 0.000621492 - case= 71 upstream pion 5.88047e-06 - case= 72 upstream neutron 0.00766789 - case= 73 upstream proton 0 + case= 66 upstream all 0.011692 + case= 67 upstream electron 7.54307e-05 + case= 68 upstream gamma 0.00348162 + case= 69 upstream muon 0 + case= 70 upstream neutrino 0.000574928 + case= 71 upstream pion 3.17895e-06 + case= 72 upstream neutron 0.00754469 + case= 73 upstream proton 1.2121e-05 case= 74 upstream ion 0 case= 75 upstream otherMeson 0 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.0104918 - case= 78 upstream below 20 MeV electron 7.1083e-05 - case= 79 upstream below 20 MeV gamma 0.00317939 + case= 77 upstream below 20 MeV all 0.0107163 + case= 78 upstream below 20 MeV electron 6.68996e-05 + case= 79 upstream below 20 MeV gamma 0.00346568 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 5.04118e-05 + case= 81 upstream below 20 MeV neutrino 4.1129e-05 case= 82 upstream below 20 MeV pion 0 - case= 83 upstream below 20 MeV neutron 0.00719091 - case= 84 upstream below 20 MeV proton 0 + case= 83 upstream below 20 MeV neutron 0.00714119 + case= 84 upstream below 20 MeV proton 1.44918e-06 case= 85 upstream below 20 MeV ion 0 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 0.00108048 - case= 89 upstream above 20 MeV electron 1.4799e-06 - case= 90 upstream above 20 MeV gamma 2.34255e-05 - case= 91 upstream above 20 MeV muon 1.63821e-06 - case= 92 upstream above 20 MeV neutrino 0.00057108 - case= 93 upstream above 20 MeV pion 5.88047e-06 - case= 94 upstream above 20 MeV neutron 0.000476976 - case= 95 upstream above 20 MeV proton 0 + case= 88 upstream above 20 MeV all 0.000975616 + case= 89 upstream above 20 MeV electron 8.53107e-06 + case= 90 upstream above 20 MeV gamma 1.59417e-05 + case= 91 upstream above 20 MeV muon 0 + case= 92 upstream above 20 MeV neutrino 0.000533799 + case= 93 upstream above 20 MeV pion 3.17895e-06 + case= 94 upstream above 20 MeV neutron 0.000403494 + case= 95 upstream above 20 MeV proton 1.06718e-05 case= 96 upstream above 20 MeV ion 0 case= 97 upstream above 20 MeV otherMeson 0 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 layer all 60335.2 4.17324 251793 - case= 1 layer electron 44579.8 1.57923 70401.9 - case= 2 layer gamma 13248.4 5.21429 69081 - case= 3 layer muon 4.66 20.2298 94.2708 - case= 4 layer neutrino 13.92 38.3745 534.173 - case= 5 layer pion 49.41 1230.27 60787.6 - case= 6 layer neutron 973.09 18.5907 18090.4 - case= 7 layer proton 228.25 61.1658 13961.1 - case= 8 layer ion 1230.93 1.00929 1242.36 - case= 9 layer otherMeson 5.26 2775.73 14600.4 - case= 10 layer otherBaryon 1.52 1973.82 3000.2 - case= 11 layer below 20 MeV all 59286.5 0.671035 39783.3 - case= 12 layer below 20 MeV electron 44184.7 0.454651 20088.6 - case= 13 layer below 20 MeV gamma 12890.1 1.21624 15677.5 - case= 14 layer below 20 MeV muon 4.18 4.15484 17.3672 - case= 15 layer below 20 MeV neutrino 1.18 14.3147 16.8913 - case= 16 layer below 20 MeV pion 0.88 12.2817 10.8079 - case= 17 layer below 20 MeV neutron 838.7 2.64343 2217.04 - case= 18 layer below 20 MeV proton 147.69 8.10118 1196.46 - case= 19 layer below 20 MeV ion 1218.74 0.456326 556.143 - case= 20 layer below 20 MeV otherMeson 0.21 7.37595 1.54895 - case= 21 layer below 20 MeV otherBaryon 0.07 12.9149 0.904044 - case= 22 layer above 20 MeV all 1048.74 202.157 212010 - case= 23 layer above 20 MeV electron 395.05 127.359 50313.3 - case= 24 layer above 20 MeV gamma 358.3 149.047 53403.5 - case= 25 layer above 20 MeV muon 0.48 160.216 76.9036 - case= 26 layer above 20 MeV neutrino 12.74 40.6029 517.282 - case= 27 layer above 20 MeV pion 48.53 1252.36 60776.8 - case= 28 layer above 20 MeV neutron 134.39 118.114 15873.4 - case= 29 layer above 20 MeV proton 80.56 158.449 12764.6 - case= 30 layer above 20 MeV ion 12.19 56.2938 686.221 - case= 31 layer above 20 MeV otherMeson 5.05 2890.85 14598.8 - case= 32 layer above 20 MeV otherBaryon 1.45 2068.48 2999.3 + case= 0 layer all 61233.4 4.2193 258362 + case= 1 layer electron 45248.2 1.62593 73570.6 + case= 2 layer gamma 13486.7 5.35536 72226.1 + case= 3 layer muon 4.55 26.8675 122.247 + case= 4 layer neutrino 13.57 40.3002 546.874 + case= 5 layer pion 49.75 1283.64 63861 + case= 6 layer neutron 970.61 18.2846 17747.2 + case= 7 layer proton 228.04 56.6574 12920.2 + case= 8 layer ion 1225.18 0.942973 1155.31 + case= 9 layer otherMeson 5.46 2719.71 14849.6 + case= 10 layer otherBaryon 1.31 1040.4 1362.93 + case= 11 layer below 20 MeV all 60166.3 0.671868 40423.8 + case= 12 layer below 20 MeV electron 44840.6 0.455206 20411.7 + case= 13 layer below 20 MeV gamma 13119.4 1.21738 15971.4 + case= 14 layer below 20 MeV muon 4.09 4.11981 16.85 + case= 15 layer below 20 MeV neutrino 1.14 14.0849 16.0568 + case= 16 layer below 20 MeV pion 0.87 11.5245 10.0263 + case= 17 layer below 20 MeV neutron 837.97 2.67158 2238.71 + case= 18 layer below 20 MeV proton 147.94 8.0942 1197.46 + case= 19 layer below 20 MeV ion 1213.95 0.460682 559.245 + case= 20 layer below 20 MeV otherMeson 0.23 7.0344 1.61791 + case= 21 layer below 20 MeV otherBaryon 0.08 9.72238 0.77779 + case= 22 layer above 20 MeV all 1067.11 204.232 217938 + case= 23 layer above 20 MeV electron 407.65 130.403 53158.9 + case= 24 layer above 20 MeV gamma 367.26 153.174 56254.7 + case= 25 layer above 20 MeV muon 0.46 229.124 105.397 + case= 26 layer above 20 MeV neutrino 12.43 42.7045 530.817 + case= 27 layer above 20 MeV pion 48.88 1306.28 63851 + case= 28 layer above 20 MeV neutron 132.64 116.922 15508.5 + case= 29 layer above 20 MeV proton 80.1 146.351 11722.7 + case= 30 layer above 20 MeV ion 11.23 53.078 596.066 + case= 31 layer above 20 MeV otherMeson 5.23 2839 14848 + case= 32 layer above 20 MeV otherBaryon 1.23 1107.44 1362.15 ============================================================= @@ -2281,7 +2289,7 @@ Index : 7 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=101.930000s Real=102.892019s Sys=0.080000s + User=92.290000s Real=93.736122s Sys=0.070000s =============== Run::PrintInfo() =============== RunID = 6 @@ -2294,140 +2302,140 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.000600453 + case= 0 downstream all 0.000566305 case= 1 downstream electron 0 - case= 2 downstream gamma 2.39863e-05 + case= 2 downstream gamma 3.43599e-05 case= 3 downstream muon 0 - case= 4 downstream neutrino 0.000159929 - case= 5 downstream pion 0 - case= 6 downstream neutron 0.000416538 + case= 4 downstream neutrino 0.000143971 + case= 5 downstream pion 1.28046e-06 + case= 6 downstream neutron 0.000386693 case= 7 downstream proton 0 case= 8 downstream ion 0 case= 9 downstream otherMeson 0 case= 10 downstream otherBaryon 0 - case= 11 downstream below 20 MeV all 0.000429789 + case= 11 downstream below 20 MeV all 0.000400757 case= 12 downstream below 20 MeV electron 0 - case= 13 downstream below 20 MeV gamma 2.39863e-05 + case= 13 downstream below 20 MeV gamma 3.43599e-05 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 1.53672e-05 + case= 15 downstream below 20 MeV neutrino 5.84851e-06 case= 16 downstream below 20 MeV pion 0 - case= 17 downstream below 20 MeV neutron 0.000390435 + case= 17 downstream below 20 MeV neutron 0.000360549 case= 18 downstream below 20 MeV proton 0 case= 19 downstream below 20 MeV ion 0 case= 20 downstream below 20 MeV otherMeson 0 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.000170664 + case= 22 downstream above 20 MeV all 0.000165548 case= 23 downstream above 20 MeV electron 0 case= 24 downstream above 20 MeV gamma 0 case= 25 downstream above 20 MeV muon 0 - case= 26 downstream above 20 MeV neutrino 0.000144561 - case= 27 downstream above 20 MeV pion 0 - case= 28 downstream above 20 MeV neutron 2.61029e-05 + case= 26 downstream above 20 MeV neutrino 0.000138123 + case= 27 downstream above 20 MeV pion 1.28046e-06 + case= 28 downstream above 20 MeV neutron 2.61447e-05 case= 29 downstream above 20 MeV proton 0 case= 30 downstream above 20 MeV ion 0 case= 31 downstream above 20 MeV otherMeson 0 case= 32 downstream above 20 MeV otherBaryon 0 - case= 33 side all 0.000754034 - case= 34 side electron 0 - case= 35 side gamma 4.77925e-05 + case= 33 side all 0.00075526 + case= 34 side electron 8.97956e-07 + case= 35 side gamma 5.21109e-05 case= 36 side muon 0 - case= 37 side neutrino 0.000284723 + case= 37 side neutrino 0.000261642 case= 38 side pion 0 - case= 39 side neutron 0.000421062 - case= 40 side proton 4.57371e-07 + case= 39 side neutron 0.000440609 + case= 40 side proton 0 case= 41 side ion 0 case= 42 side otherMeson 0 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.000469041 - case= 45 side below 20 MeV electron 0 - case= 46 side below 20 MeV gamma 4.77925e-05 + case= 44 side below 20 MeV all 0.000487851 + case= 45 side below 20 MeV electron 8.97956e-07 + case= 46 side below 20 MeV gamma 5.21109e-05 case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 1.93852e-05 + case= 48 side below 20 MeV neutrino 2.5267e-05 case= 49 side below 20 MeV pion 0 - case= 50 side below 20 MeV neutron 0.000401406 - case= 51 side below 20 MeV proton 4.57371e-07 + case= 50 side below 20 MeV neutron 0.000409576 + case= 51 side below 20 MeV proton 0 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000284993 + case= 55 side above 20 MeV all 0.000267409 case= 56 side above 20 MeV electron 0 case= 57 side above 20 MeV gamma 0 case= 58 side above 20 MeV muon 0 - case= 59 side above 20 MeV neutrino 0.000265337 + case= 59 side above 20 MeV neutrino 0.000236375 case= 60 side above 20 MeV pion 0 - case= 61 side above 20 MeV neutron 1.96553e-05 + case= 61 side above 20 MeV neutron 3.10336e-05 case= 62 side above 20 MeV proton 0 case= 63 side above 20 MeV ion 0 case= 64 side above 20 MeV otherMeson 0 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.0299485 - case= 67 upstream electron 6.25888e-05 - case= 68 upstream gamma 0.00347336 + case= 66 upstream all 0.0338386 + case= 67 upstream electron 6.33368e-05 + case= 68 upstream gamma 0.0038616 case= 69 upstream muon 0 - case= 70 upstream neutrino 0.000756995 - case= 71 upstream pion 2.47004e-05 - case= 72 upstream neutron 0.0256095 - case= 73 upstream proton 1.99283e-05 - case= 74 upstream ion 1.37997e-06 + case= 70 upstream neutrino 0.000783558 + case= 71 upstream pion 1.77437e-05 + case= 72 upstream neutron 0.0290949 + case= 73 upstream proton 1.74283e-05 + case= 74 upstream ion 0 case= 75 upstream otherMeson 0 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.0281485 - case= 78 upstream below 20 MeV electron 5.96259e-05 - case= 79 upstream below 20 MeV gamma 0.00346639 + case= 77 upstream below 20 MeV all 0.0318994 + case= 78 upstream below 20 MeV electron 5.33855e-05 + case= 79 upstream below 20 MeV gamma 0.00385764 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 3.92651e-05 - case= 82 upstream below 20 MeV pion 0 - case= 83 upstream below 20 MeV neutron 0.0245832 - case= 84 upstream below 20 MeV proton 0 + case= 81 upstream below 20 MeV neutrino 6.60248e-05 + case= 82 upstream below 20 MeV pion 1.5432e-06 + case= 83 upstream below 20 MeV neutron 0.0279193 + case= 84 upstream below 20 MeV proton 1.5865e-06 case= 85 upstream below 20 MeV ion 0 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 0.00179993 - case= 89 upstream above 20 MeV electron 2.9629e-06 - case= 90 upstream above 20 MeV gamma 6.97141e-06 + case= 88 upstream above 20 MeV all 0.00193914 + case= 89 upstream above 20 MeV electron 9.95125e-06 + case= 90 upstream above 20 MeV gamma 3.9652e-06 case= 91 upstream above 20 MeV muon 0 - case= 92 upstream above 20 MeV neutrino 0.00071773 - case= 93 upstream above 20 MeV pion 2.47004e-05 - case= 94 upstream above 20 MeV neutron 0.00102626 - case= 95 upstream above 20 MeV proton 1.99283e-05 - case= 96 upstream above 20 MeV ion 1.37997e-06 + case= 92 upstream above 20 MeV neutrino 0.000717533 + case= 93 upstream above 20 MeV pion 1.62005e-05 + case= 94 upstream above 20 MeV neutron 0.00117565 + case= 95 upstream above 20 MeV proton 1.58418e-05 + case= 96 upstream above 20 MeV ion 0 case= 97 upstream above 20 MeV otherMeson 0 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 layer all 70982 3.67797 261070 - case= 1 layer electron 41791.5 1.92184 80316.7 - case= 2 layer gamma 22084.9 3.70778 81886.1 - case= 3 layer muon 4.16 16.8809 70.2246 - case= 4 layer neutrino 12.47 37.3846 466.186 - case= 5 layer pion 44.36 1201.85 53314.1 - case= 6 layer neutron 3457.41 5.98636 20697.3 - case= 7 layer proton 126.8 98.6617 12510.3 - case= 8 layer ion 3455.64 0.427744 1478.13 - case= 9 layer otherMeson 3.78 2501.55 9455.85 - case= 10 layer otherBaryon 0.91 961.306 874.789 - case= 11 layer below 20 MeV all 69867.9 0.869805 60771.5 - case= 12 layer below 20 MeV electron 41381.3 0.693468 28696.6 - case= 13 layer below 20 MeV gamma 21695 1.23138 26714.8 - case= 14 layer below 20 MeV muon 3.86 4.11981 15.9025 - case= 15 layer below 20 MeV neutrino 0.81 14.4699 11.7206 - case= 16 layer below 20 MeV pion 0.79 12.1856 9.62663 - case= 17 layer below 20 MeV neutron 3302.94 1.3056 4312.33 - case= 18 layer below 20 MeV proton 45.37 12.5275 568.373 - case= 19 layer below 20 MeV ion 3437.64 0.127961 439.885 - case= 20 layer below 20 MeV otherMeson 0.22 7.93549 1.74581 - case= 21 layer below 20 MeV otherBaryon 0.07 6.89222 0.482456 - case= 22 layer above 20 MeV all 1114.04 179.794 200298 - case= 23 layer above 20 MeV electron 410.26 125.823 51620.1 - case= 24 layer above 20 MeV gamma 389.95 141.483 55171.2 - case= 25 layer above 20 MeV muon 0.3 181.074 54.3221 - case= 26 layer above 20 MeV neutrino 11.66 38.9765 454.465 - case= 27 layer above 20 MeV pion 43.57 1223.42 53304.5 - case= 28 layer above 20 MeV neutron 154.47 106.072 16385 - case= 29 layer above 20 MeV proton 81.43 146.653 11941.9 - case= 30 layer above 20 MeV ion 18 57.6802 1038.24 - case= 31 layer above 20 MeV otherMeson 3.56 2655.65 9454.1 - case= 32 layer above 20 MeV otherBaryon 0.84 1040.84 874.306 + case= 0 layer all 71199.5 3.74316 266511 + case= 1 layer electron 42059.7 2.0021 84207.6 + case= 2 layer gamma 22241.5 3.86521 85968.2 + case= 3 layer muon 3.83 13.615 52.1455 + case= 4 layer neutrino 11.48 36.19 415.461 + case= 5 layer pion 41.95 1216.96 51051.5 + case= 6 layer neutron 3364.5 6.03847 20316.4 + case= 7 layer proton 124.16 90.3646 11219.7 + case= 8 layer ion 3347.26 0.421291 1410.17 + case= 9 layer otherMeson 3.82 2832.96 10821.9 + case= 10 layer otherBaryon 1.26 831.65 1047.88 + case= 11 layer below 20 MeV all 70064.1 0.875274 61325.3 + case= 12 layer below 20 MeV electron 41634.3 0.699291 29114.5 + case= 13 layer below 20 MeV gamma 21837.3 1.23695 27011.6 + case= 14 layer below 20 MeV muon 3.61 4.16195 15.0246 + case= 15 layer below 20 MeV neutrino 0.98 14.0281 13.7476 + case= 16 layer below 20 MeV pion 0.92 11.8147 10.8695 + case= 17 layer below 20 MeV neutron 3212.2 1.29877 4171.9 + case= 18 layer below 20 MeV proton 44.02 12.438 547.521 + case= 19 layer below 20 MeV ion 3330.53 0.131545 438.114 + case= 20 layer below 20 MeV otherMeson 0.2 6.20099 1.2402 + case= 21 layer below 20 MeV otherBaryon 0.08 10.6108 0.848862 + case= 22 layer above 20 MeV all 1135.32 180.729 205186 + case= 23 layer above 20 MeV electron 425.33 129.53 55093.1 + case= 24 layer above 20 MeV gamma 404.27 145.835 58956.6 + case= 25 layer above 20 MeV muon 0.22 168.731 37.1209 + case= 26 layer above 20 MeV neutrino 10.5 38.2585 401.714 + case= 27 layer above 20 MeV pion 41.03 1243.98 51040.6 + case= 28 layer above 20 MeV neutron 152.3 106.005 16144.5 + case= 29 layer above 20 MeV proton 80.14 133.169 10672.1 + case= 30 layer above 20 MeV ion 16.73 58.1025 972.056 + case= 31 layer above 20 MeV otherMeson 3.62 2989.14 10820.7 + case= 32 layer above 20 MeV otherBaryon 1.18 887.313 1047.03 ============================================================= @@ -2522,7 +2530,7 @@ Index : 8 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=66.610000s Real=67.205487s Sys=0.050000s + User=60.990000s Real=61.832543s Sys=0.030000s =============== Run::PrintInfo() =============== RunID = 7 @@ -2535,140 +2543,140 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.0342218 - case= 1 downstream electron 4.43206e-05 - case= 2 downstream gamma 0.00105838 - case= 3 downstream muon 1.27458e-06 - case= 4 downstream neutrino 0.000298174 - case= 5 downstream pion 7.26928e-05 - case= 6 downstream neutron 0.0326964 - case= 7 downstream proton 4.13503e-05 - case= 8 downstream ion 1.30303e-06 - case= 9 downstream otherMeson 7.91269e-06 - case= 10 downstream otherBaryon 0 - case= 11 downstream below 20 MeV all 0.0331348 - case= 12 downstream below 20 MeV electron 3.25391e-05 - case= 13 downstream below 20 MeV gamma 0.00103359 + case= 0 downstream all 0.0385767 + case= 1 downstream electron 0.00013273 + case= 2 downstream gamma 0.00178479 + case= 3 downstream muon 3.08241e-06 + case= 4 downstream neutrino 0.000258764 + case= 5 downstream pion 6.68238e-05 + case= 6 downstream neutron 0.036284 + case= 7 downstream proton 3.93626e-05 + case= 8 downstream ion 0 + case= 9 downstream otherMeson 6.83994e-06 + case= 10 downstream otherBaryon 2.56116e-07 + case= 11 downstream below 20 MeV all 0.0374815 + case= 12 downstream below 20 MeV electron 0.00010831 + case= 13 downstream below 20 MeV gamma 0.00173111 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 2.15554e-05 - case= 16 downstream below 20 MeV pion 1.54323e-06 - case= 17 downstream below 20 MeV neutron 0.0320456 - case= 18 downstream below 20 MeV proton 0 + case= 15 downstream below 20 MeV neutrino 1.62784e-05 + case= 16 downstream below 20 MeV pion 0 + case= 17 downstream below 20 MeV neutron 0.0356242 + case= 18 downstream below 20 MeV proton 1.57178e-06 case= 19 downstream below 20 MeV ion 0 case= 20 downstream below 20 MeV otherMeson 0 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.00108704 - case= 23 downstream above 20 MeV electron 1.17815e-05 - case= 24 downstream above 20 MeV gamma 2.47976e-05 - case= 25 downstream above 20 MeV muon 1.27458e-06 - case= 26 downstream above 20 MeV neutrino 0.000276619 - case= 27 downstream above 20 MeV pion 7.11496e-05 - case= 28 downstream above 20 MeV neutron 0.000650847 - case= 29 downstream above 20 MeV proton 4.13503e-05 - case= 30 downstream above 20 MeV ion 1.30303e-06 - case= 31 downstream above 20 MeV otherMeson 7.91269e-06 - case= 32 downstream above 20 MeV otherBaryon 0 - case= 33 side all 0.0307919 - case= 34 side electron 1.78013e-06 - case= 35 side gamma 0.000159835 - case= 36 side muon 0 - case= 37 side neutrino 0.000260314 + case= 22 downstream above 20 MeV all 0.00109521 + case= 23 downstream above 20 MeV electron 2.44193e-05 + case= 24 downstream above 20 MeV gamma 5.36794e-05 + case= 25 downstream above 20 MeV muon 3.08241e-06 + case= 26 downstream above 20 MeV neutrino 0.000242485 + case= 27 downstream above 20 MeV pion 6.68238e-05 + case= 28 downstream above 20 MeV neutron 0.000659837 + case= 29 downstream above 20 MeV proton 3.77908e-05 + case= 30 downstream above 20 MeV ion 0 + case= 31 downstream above 20 MeV otherMeson 6.83994e-06 + case= 32 downstream above 20 MeV otherBaryon 2.56116e-07 + case= 33 side all 0.0319098 + case= 34 side electron 8.9233e-07 + case= 35 side gamma 0.000160794 + case= 36 side muon 4.61289e-07 + case= 37 side neutrino 0.000281061 case= 38 side pion 0 - case= 39 side neutron 0.0303685 - case= 40 side proton 1.07491e-06 + case= 39 side neutron 0.0314665 + case= 40 side proton 0 case= 41 side ion 0 - case= 42 side otherMeson 3.77849e-07 + case= 42 side otherMeson 0 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.0303489 - case= 45 side below 20 MeV electron 1.78013e-06 - case= 46 side below 20 MeV gamma 0.000159835 + case= 44 side below 20 MeV all 0.0314714 + case= 45 side below 20 MeV electron 5.76111e-07 + case= 46 side below 20 MeV gamma 0.000160794 case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 1.79342e-05 + case= 48 side below 20 MeV neutrino 2.20242e-05 case= 49 side below 20 MeV pion 0 - case= 50 side below 20 MeV neutron 0.0301693 + case= 50 side below 20 MeV neutron 0.031288 case= 51 side below 20 MeV proton 0 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000443047 - case= 56 side above 20 MeV electron 0 + case= 55 side above 20 MeV all 0.000438337 + case= 56 side above 20 MeV electron 3.1622e-07 case= 57 side above 20 MeV gamma 0 - case= 58 side above 20 MeV muon 0 - case= 59 side above 20 MeV neutrino 0.00024238 + case= 58 side above 20 MeV muon 4.61289e-07 + case= 59 side above 20 MeV neutrino 0.000259037 case= 60 side above 20 MeV pion 0 - case= 61 side above 20 MeV neutron 0.000199214 - case= 62 side above 20 MeV proton 1.07491e-06 + case= 61 side above 20 MeV neutron 0.000178523 + case= 62 side above 20 MeV proton 0 case= 63 side above 20 MeV ion 0 - case= 64 side above 20 MeV otherMeson 3.77849e-07 + case= 64 side above 20 MeV otherMeson 0 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.0607432 - case= 67 upstream electron 5.6271e-05 - case= 68 upstream gamma 0.00167525 - case= 69 upstream muon 2.44086e-06 - case= 70 upstream neutrino 0.000499262 - case= 71 upstream pion 1.65951e-05 - case= 72 upstream neutron 0.0584684 - case= 73 upstream proton 2.27785e-05 + case= 66 upstream all 0.0626415 + case= 67 upstream electron 5.3201e-05 + case= 68 upstream gamma 0.00178632 + case= 69 upstream muon 0 + case= 70 upstream neutrino 0.000479089 + case= 71 upstream pion 1.05465e-05 + case= 72 upstream neutron 0.0602996 + case= 73 upstream proton 1.0441e-05 case= 74 upstream ion 0 - case= 75 upstream otherMeson 0 - case= 76 upstream otherBaryon 2.23139e-06 - case= 77 upstream below 20 MeV all 0.0593543 - case= 78 upstream below 20 MeV electron 4.84331e-05 - case= 79 upstream below 20 MeV gamma 0.00167525 + case= 75 upstream otherMeson 2.29278e-06 + case= 76 upstream otherBaryon 0 + case= 77 upstream below 20 MeV all 0.0614363 + case= 78 upstream below 20 MeV electron 4.47511e-05 + case= 79 upstream below 20 MeV gamma 0.00176841 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 5.58978e-05 - case= 82 upstream below 20 MeV pion 0 - case= 83 upstream below 20 MeV neutron 0.0575747 - case= 84 upstream below 20 MeV proton 0 + case= 81 upstream below 20 MeV neutrino 5.5511e-05 + case= 82 upstream below 20 MeV pion 1.51464e-06 + case= 83 upstream below 20 MeV neutron 0.059563 + case= 84 upstream below 20 MeV proton 3.04222e-06 case= 85 upstream below 20 MeV ion 0 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 0.00138894 - case= 89 upstream above 20 MeV electron 7.83784e-06 - case= 90 upstream above 20 MeV gamma 0 - case= 91 upstream above 20 MeV muon 2.44086e-06 - case= 92 upstream above 20 MeV neutrino 0.000443364 - case= 93 upstream above 20 MeV pion 1.65951e-05 - case= 94 upstream above 20 MeV neutron 0.000893696 - case= 95 upstream above 20 MeV proton 2.27785e-05 + case= 88 upstream above 20 MeV all 0.0012052 + case= 89 upstream above 20 MeV electron 8.4499e-06 + case= 90 upstream above 20 MeV gamma 1.79095e-05 + case= 91 upstream above 20 MeV muon 0 + case= 92 upstream above 20 MeV neutrino 0.000423578 + case= 93 upstream above 20 MeV pion 9.03189e-06 + case= 94 upstream above 20 MeV neutron 0.000736543 + case= 95 upstream above 20 MeV proton 7.39874e-06 case= 96 upstream above 20 MeV ion 0 - case= 97 upstream above 20 MeV otherMeson 0 - case= 98 upstream above 20 MeV otherBaryon 2.23139e-06 + case= 97 upstream above 20 MeV otherMeson 2.29278e-06 + case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 layer all 46300.5 5.15136 238510 - case= 1 layer electron 27338.4 2.63973 72165.9 - case= 2 layer gamma 15749.1 4.62562 72849.3 - case= 3 layer muon 3.82 25.8947 98.9176 - case= 4 layer neutrino 11.34 38.5818 437.517 - case= 5 layer pion 39.99 1250.01 49988 - case= 6 layer neutron 1979.12 9.81968 19434.3 - case= 7 layer proton 113.39 100.41 11385.5 - case= 8 layer ion 1060.67 1.31348 1393.17 - case= 9 layer otherMeson 3.66 2737.4 10018.9 - case= 10 layer otherBaryon 1.06 697.061 738.884 - case= 11 layer below 20 MeV all 45229.1 0.993752 44946.6 - case= 12 layer below 20 MeV electron 26938.8 0.802572 21620.3 - case= 13 layer below 20 MeV gamma 15371.3 1.21903 18738 - case= 14 layer below 20 MeV muon 3.5 4.12175 14.4261 - case= 15 layer below 20 MeV neutrino 0.85 15.1112 12.8445 - case= 16 layer below 20 MeV pion 0.86 13.4022 11.5259 - case= 17 layer below 20 MeV neutron 1833.62 2.02802 3718.63 - case= 18 layer below 20 MeV proton 37.25 12.6342 470.624 - case= 19 layer below 20 MeV ion 1042.67 0.343002 357.638 - case= 20 layer below 20 MeV otherMeson 0.21 4.9459 1.03864 - case= 21 layer below 20 MeV otherBaryon 0.11 13.267 1.45937 - case= 22 layer above 20 MeV all 1071.34 180.674 193564 - case= 23 layer above 20 MeV electron 399.54 126.51 50545.6 - case= 24 layer above 20 MeV gamma 377.82 143.22 54111.3 - case= 25 layer above 20 MeV muon 0.32 264.036 84.4915 - case= 26 layer above 20 MeV neutrino 10.49 40.4836 424.673 - case= 27 layer above 20 MeV pion 39.13 1277.19 49976.4 - case= 28 layer above 20 MeV neutron 145.5 108.012 15715.7 - case= 29 layer above 20 MeV proton 76.14 143.352 10914.8 - case= 30 layer above 20 MeV ion 18 57.5295 1035.53 - case= 31 layer above 20 MeV otherMeson 3.45 2903.72 10017.8 - case= 32 layer above 20 MeV otherBaryon 0.95 776.237 737.425 + case= 0 layer all 47325.9 5.08221 240520 + case= 1 layer electron 27892.6 2.5702 71689.6 + case= 2 layer gamma 16060.4 4.50087 72285.6 + case= 3 layer muon 3.96 21.5768 85.444 + case= 4 layer neutrino 11.79 37.1681 438.212 + case= 5 layer pion 42.42 1246.12 52860.2 + case= 6 layer neutron 2073.67 9.55891 19822 + case= 7 layer proton 117.39 94.2365 11062.4 + case= 8 layer ion 1118.5 1.39333 1558.44 + case= 9 layer otherMeson 4.18 2399.06 10028.1 + case= 10 layer otherBaryon 1.04 663.292 689.824 + case= 11 layer below 20 MeV all 46236.1 0.993479 45934.6 + case= 12 layer below 20 MeV electron 27488.6 0.797962 21934.9 + case= 13 layer below 20 MeV gamma 15679.6 1.21793 19096.6 + case= 14 layer below 20 MeV muon 3.61 4.15038 14.9829 + case= 15 layer below 20 MeV neutrino 0.97 14.2018 13.7757 + case= 16 layer below 20 MeV pion 0.94 11.9482 11.2313 + case= 17 layer below 20 MeV neutron 1926.03 2.05412 3956.29 + case= 18 layer below 20 MeV proton 39.89 12.5493 500.591 + case= 19 layer below 20 MeV ion 1096.02 0.368569 403.959 + case= 20 layer below 20 MeV otherMeson 0.36 5.19836 1.87141 + case= 21 layer below 20 MeV otherBaryon 0.02 17.7512 0.355023 + case= 22 layer above 20 MeV all 1089.76 178.558 194585 + case= 23 layer above 20 MeV electron 403.94 123.174 49754.7 + case= 24 layer above 20 MeV gamma 380.71 139.71 53188.9 + case= 25 layer above 20 MeV muon 0.35 201.317 70.4611 + case= 26 layer above 20 MeV neutrino 10.82 39.227 424.437 + case= 27 layer above 20 MeV pion 41.48 1274.08 52849 + case= 28 layer above 20 MeV neutron 147.64 107.462 15865.7 + case= 29 layer above 20 MeV proton 77.5 136.282 10561.8 + case= 30 layer above 20 MeV ion 22.48 51.3561 1154.48 + case= 31 layer above 20 MeV otherMeson 3.82 2624.66 10026.2 + case= 32 layer above 20 MeV otherBaryon 1.02 675.95 689.469 ============================================================= @@ -2768,7 +2776,7 @@ Index : 9 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=57.390000s Real=57.896878s Sys=0.030000s + User=48.950000s Real=49.424676s Sys=0.010000s =============== Run::PrintInfo() =============== RunID = 8 @@ -2781,143 +2789,143 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 downstream all 0.0201216 - case= 1 downstream electron 0.000359695 - case= 2 downstream gamma 0.00513182 - case= 3 downstream muon 6.59948e-06 - case= 4 downstream neutrino 0.000437937 - case= 5 downstream pion 0.000209811 - case= 6 downstream neutron 0.0138532 - case= 7 downstream proton 0.000113319 + case= 0 downstream all 0.0129792 + case= 1 downstream electron 7.7635e-05 + case= 2 downstream gamma 0.00219283 + case= 3 downstream muon 0 + case= 4 downstream neutrino 0.000402673 + case= 5 downstream pion 0.000131684 + case= 6 downstream neutron 0.0101049 + case= 7 downstream proton 6.45062e-05 case= 8 downstream ion 0 - case= 9 downstream otherMeson 9.20056e-06 + case= 9 downstream otherMeson 4.93521e-06 case= 10 downstream otherBaryon 0 - case= 11 downstream below 20 MeV all 0.0180094 - case= 12 downstream below 20 MeV electron 0.000248301 - case= 13 downstream below 20 MeV gamma 0.00493475 + case= 11 downstream below 20 MeV all 0.0116541 + case= 12 downstream below 20 MeV electron 6.76429e-05 + case= 13 downstream below 20 MeV gamma 0.00217379 case= 14 downstream below 20 MeV muon 0 - case= 15 downstream below 20 MeV neutrino 5.12813e-05 - case= 16 downstream below 20 MeV pion 1.55507e-06 - case= 17 downstream below 20 MeV neutron 0.0127706 - case= 18 downstream below 20 MeV proton 2.92248e-06 + case= 15 downstream below 20 MeV neutrino 2.9791e-05 + case= 16 downstream below 20 MeV pion 0 + case= 17 downstream below 20 MeV neutron 0.00937916 + case= 18 downstream below 20 MeV proton 3.71143e-06 case= 19 downstream below 20 MeV ion 0 case= 20 downstream below 20 MeV otherMeson 0 case= 21 downstream below 20 MeV otherBaryon 0 - case= 22 downstream above 20 MeV all 0.00211219 - case= 23 downstream above 20 MeV electron 0.000111393 - case= 24 downstream above 20 MeV gamma 0.000197069 - case= 25 downstream above 20 MeV muon 6.59948e-06 - case= 26 downstream above 20 MeV neutrino 0.000386655 - case= 27 downstream above 20 MeV pion 0.000208256 - case= 28 downstream above 20 MeV neutron 0.00108262 - case= 29 downstream above 20 MeV proton 0.000110396 + case= 22 downstream above 20 MeV all 0.00132506 + case= 23 downstream above 20 MeV electron 9.99215e-06 + case= 24 downstream above 20 MeV gamma 1.90404e-05 + case= 25 downstream above 20 MeV muon 0 + case= 26 downstream above 20 MeV neutrino 0.000372882 + case= 27 downstream above 20 MeV pion 0.000131684 + case= 28 downstream above 20 MeV neutron 0.000725735 + case= 29 downstream above 20 MeV proton 6.07948e-05 case= 30 downstream above 20 MeV ion 0 - case= 31 downstream above 20 MeV otherMeson 9.20056e-06 + case= 31 downstream above 20 MeV otherMeson 4.93521e-06 case= 32 downstream above 20 MeV otherBaryon 0 - case= 33 side all 0.00478623 - case= 34 side electron 8.26335e-06 - case= 35 side gamma 0.000503044 + case= 33 side all 0.00521211 + case= 34 side electron 7.29686e-06 + case= 35 side gamma 0.00050256 case= 36 side muon 0 - case= 37 side neutrino 0.000284444 - case= 38 side pion 7.4969e-07 - case= 39 side neutron 0.00398828 - case= 40 side proton 6.95577e-07 - case= 41 side ion 4.20367e-07 - case= 42 side otherMeson 3.25774e-07 + case= 37 side neutrino 0.000297012 + case= 38 side pion 8.90369e-07 + case= 39 side neutron 0.00440182 + case= 40 side proton 2.5355e-06 + case= 41 side ion 0 + case= 42 side otherMeson 0 case= 43 side otherBaryon 0 - case= 44 side below 20 MeV all 0.00430055 - case= 45 side below 20 MeV electron 8.26335e-06 - case= 46 side below 20 MeV gamma 0.000503044 + case= 44 side below 20 MeV all 0.00468615 + case= 45 side below 20 MeV electron 7.29686e-06 + case= 46 side below 20 MeV gamma 0.00050256 case= 47 side below 20 MeV muon 0 - case= 48 side below 20 MeV neutrino 2.18207e-05 + case= 48 side below 20 MeV neutrino 2.27263e-05 case= 49 side below 20 MeV pion 0 - case= 50 side below 20 MeV neutron 0.00376742 + case= 50 side below 20 MeV neutron 0.00415357 case= 51 side below 20 MeV proton 0 case= 52 side below 20 MeV ion 0 case= 53 side below 20 MeV otherMeson 0 case= 54 side below 20 MeV otherBaryon 0 - case= 55 side above 20 MeV all 0.000485679 + case= 55 side above 20 MeV all 0.00052596 case= 56 side above 20 MeV electron 0 case= 57 side above 20 MeV gamma 0 case= 58 side above 20 MeV muon 0 - case= 59 side above 20 MeV neutrino 0.000262623 - case= 60 side above 20 MeV pion 7.4969e-07 - case= 61 side above 20 MeV neutron 0.000220865 - case= 62 side above 20 MeV proton 6.95577e-07 - case= 63 side above 20 MeV ion 4.20367e-07 - case= 64 side above 20 MeV otherMeson 3.25774e-07 + case= 59 side above 20 MeV neutrino 0.000274285 + case= 60 side above 20 MeV pion 8.90369e-07 + case= 61 side above 20 MeV neutron 0.000248249 + case= 62 side above 20 MeV proton 2.5355e-06 + case= 63 side above 20 MeV ion 0 + case= 64 side above 20 MeV otherMeson 0 case= 65 side above 20 MeV otherBaryon 0 - case= 66 upstream all 0.0172947 - case= 67 upstream electron 0.00011249 - case= 68 upstream gamma 0.00220436 + case= 66 upstream all 0.0227939 + case= 67 upstream electron 3.20999e-05 + case= 68 upstream gamma 0.00290379 case= 69 upstream muon 0 - case= 70 upstream neutrino 0.000414346 - case= 71 upstream pion 2.09811e-05 - case= 72 upstream neutron 0.0145325 - case= 73 upstream proton 7.57679e-06 - case= 74 upstream ion 2.43708e-06 + case= 70 upstream neutrino 0.000490994 + case= 71 upstream pion 2.40207e-05 + case= 72 upstream neutron 0.0193306 + case= 73 upstream proton 7.39888e-06 + case= 74 upstream ion 4.97398e-06 case= 75 upstream otherMeson 0 case= 76 upstream otherBaryon 0 - case= 77 upstream below 20 MeV all 0.0162696 - case= 78 upstream below 20 MeV electron 0.000107896 - case= 79 upstream below 20 MeV gamma 0.00218144 + case= 77 upstream below 20 MeV all 0.0214679 + case= 78 upstream below 20 MeV electron 3.20999e-05 + case= 79 upstream below 20 MeV gamma 0.0028986 case= 80 upstream below 20 MeV muon 0 - case= 81 upstream below 20 MeV neutrino 2.48965e-05 + case= 81 upstream below 20 MeV neutrino 3.71301e-05 case= 82 upstream below 20 MeV pion 0 - case= 83 upstream below 20 MeV neutron 0.0139554 + case= 83 upstream below 20 MeV neutron 0.0185001 case= 84 upstream below 20 MeV proton 0 case= 85 upstream below 20 MeV ion 0 case= 86 upstream below 20 MeV otherMeson 0 case= 87 upstream below 20 MeV otherBaryon 0 - case= 88 upstream above 20 MeV all 0.0010251 - case= 89 upstream above 20 MeV electron 4.59419e-06 - case= 90 upstream above 20 MeV gamma 2.29257e-05 + case= 88 upstream above 20 MeV all 0.00132593 + case= 89 upstream above 20 MeV electron 0 + case= 90 upstream above 20 MeV gamma 5.19093e-06 case= 91 upstream above 20 MeV muon 0 - case= 92 upstream above 20 MeV neutrino 0.00038945 - case= 93 upstream above 20 MeV pion 2.09811e-05 - case= 94 upstream above 20 MeV neutron 0.00057714 - case= 95 upstream above 20 MeV proton 7.57679e-06 - case= 96 upstream above 20 MeV ion 2.43708e-06 + case= 92 upstream above 20 MeV neutrino 0.000453864 + case= 93 upstream above 20 MeV pion 2.40207e-05 + case= 94 upstream above 20 MeV neutron 0.000830485 + case= 95 upstream above 20 MeV proton 7.39888e-06 + case= 96 upstream above 20 MeV ion 4.97398e-06 case= 97 upstream above 20 MeV otherMeson 0 case= 98 upstream above 20 MeV otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 layer all 53249.4 4.8411 257786 - case= 1 layer electron 31803.6 2.5114 79871.6 - case= 2 layer gamma 16927.4 4.76101 80591.4 - case= 3 layer muon 4.16 21.6715 90.1536 - case= 4 layer neutrino 12.33 37.6509 464.236 - case= 5 layer pion 43.48 1346.25 58534.8 - case= 6 layer neutron 1547.07 10.557 16332.4 - case= 7 layer proton 118.18 92.8186 10969.3 - case= 8 layer ion 2788.87 0.58129 1621.14 - case= 9 layer otherMeson 3.47 2507.85 8702.25 - case= 10 layer otherBaryon 0.92 661.756 608.815 - case= 11 layer below 20 MeV all 52165.4 0.943815 49234.5 - case= 12 layer below 20 MeV electron 31380 0.767667 24089.4 - case= 13 layer below 20 MeV gamma 16528.6 1.27142 21014.9 - case= 14 layer below 20 MeV muon 3.81 4.15828 15.8431 - case= 15 layer below 20 MeV neutrino 0.99 14.8305 14.6822 - case= 16 layer below 20 MeV pion 0.9 12.4727 11.2254 - case= 17 layer below 20 MeV neutron 1425.46 1.93188 2753.81 - case= 18 layer below 20 MeV proton 50.67 9.56346 484.58 - case= 19 layer below 20 MeV ion 2774.63 0.305527 847.725 - case= 20 layer below 20 MeV otherMeson 0.27 6.335 1.71045 - case= 21 layer below 20 MeV otherBaryon 0.07 9.17986 0.64259 - case= 22 layer above 20 MeV all 1084.01 192.389 208552 - case= 23 layer above 20 MeV electron 423.57 131.695 55782.2 - case= 24 layer above 20 MeV gamma 398.76 149.405 59576.5 - case= 25 layer above 20 MeV muon 0.35 212.316 74.3106 - case= 26 layer above 20 MeV neutrino 11.34 39.6432 449.554 - case= 27 layer above 20 MeV pion 42.58 1374.44 58523.6 - case= 28 layer above 20 MeV neutron 121.61 111.656 13578.5 - case= 29 layer above 20 MeV proton 67.51 155.306 10484.7 - case= 30 layer above 20 MeV ion 14.24 54.313 773.418 - case= 31 layer above 20 MeV otherMeson 3.2 2718.92 8700.54 - case= 32 layer above 20 MeV otherBaryon 0.85 715.497 608.173 + case= 0 layer all 54479.3 4.6814 255040 + case= 1 layer electron 32424.9 2.43222 78864.3 + case= 2 layer gamma 17210.9 4.61569 79440 + case= 3 layer muon 4.31 17.7005 76.289 + case= 4 layer neutrino 12.91 37.0876 478.801 + case= 5 layer pion 43.74 1255.04 54895.4 + case= 6 layer neutron 1664.69 10.6674 17757.9 + case= 7 layer proton 121.38 85.808 10415.4 + case= 8 layer ion 2991.59 0.59473 1779.19 + case= 9 layer otherMeson 3.82 2653.17 10135.1 + case= 10 layer otherBaryon 1.1 1088.21 1197.03 + case= 11 layer below 20 MeV all 53393 0.937707 50067 + case= 12 layer below 20 MeV electron 32004.7 0.761917 24385 + case= 13 layer below 20 MeV gamma 16817.3 1.26703 21308.1 + case= 14 layer below 20 MeV muon 4.03 4.15425 16.7416 + case= 15 layer below 20 MeV neutrino 1 14.1982 14.1982 + case= 16 layer below 20 MeV pion 0.89 12.7774 11.3719 + case= 17 layer below 20 MeV neutron 1536.15 1.90618 2928.17 + case= 18 layer below 20 MeV proton 53.63 9.54569 511.936 + case= 19 layer below 20 MeV ion 2974.99 0.299037 889.633 + case= 20 layer below 20 MeV otherMeson 0.19 6.07858 1.15493 + case= 21 layer below 20 MeV otherBaryon 0.06 12.5302 0.75181 + case= 22 layer above 20 MeV all 1086.3 188.689 204973 + case= 23 layer above 20 MeV electron 420.13 129.673 54479.4 + case= 24 layer above 20 MeV gamma 393.57 147.704 58132 + case= 25 layer above 20 MeV muon 0.28 212.669 59.5473 + case= 26 layer above 20 MeV neutrino 11.91 39.0095 464.603 + case= 27 layer above 20 MeV pion 42.85 1280.84 54884 + case= 28 layer above 20 MeV neutron 128.54 115.371 14829.8 + case= 29 layer above 20 MeV proton 67.75 146.176 9903.44 + case= 30 layer above 20 MeV ion 16.6 53.5876 889.554 + case= 31 layer above 20 MeV otherMeson 3.63 2791.72 10134 + case= 32 layer above 20 MeV otherBaryon 1.04 1150.27 1196.28 ============================================================= ================== Deleting memory pools =================== Number of memory pools allocated: 13 of which, static: 0 -Dynamic pools deleted: 13 / Total memory freed: 0.14 MB +Dynamic pools deleted: 13 / Total memory freed: 0.13 MB ============================================================ diff --git a/examples/extended/hadronic/ParticleFluence/Layer/include/Run.hh b/examples/extended/hadronic/ParticleFluence/Layer/include/Run.hh index c619e690a45..b2d7711e1a9 100644 --- a/examples/extended/hadronic/ParticleFluence/Layer/include/Run.hh +++ b/examples/extended/hadronic/ParticleFluence/Layer/include/Run.hh @@ -97,9 +97,9 @@ class Run : public G4Run { // Accessor methods useful to transfer information collected by the stepping-action // into this Run class - void SetTrackingArray1( const std::array< G4int, + void SetTrackingArray1( const std::array< G4long, TrackingAction::fkNumberCombinations >& inputArray ); - std::array< G4int, TrackingAction::fkNumberCombinations > GetTrackingArray1() const + std::array< G4long, TrackingAction::fkNumberCombinations > GetTrackingArray1() const { return fTrackingArray1; } void SetTrackingArray2( const std::array< G4double, TrackingAction::fkNumberCombinations >& inputArray ); @@ -117,7 +117,7 @@ class Run : public G4Run { G4double fCubicVolumeScoringUpDown; G4double fCubicVolumeScoringSide; std::array< G4double, SteppingAction::fkNumberCombinations > fSteppingArray; - std::array< G4int, TrackingAction::fkNumberCombinations > fTrackingArray1; + std::array< G4long, TrackingAction::fkNumberCombinations > fTrackingArray1; std::array< G4double, TrackingAction::fkNumberCombinations > fTrackingArray2; }; diff --git a/examples/extended/hadronic/ParticleFluence/Layer/include/TrackingAction.hh b/examples/extended/hadronic/ParticleFluence/Layer/include/TrackingAction.hh index d234fa65e51..02c8e6d8355 100644 --- a/examples/extended/hadronic/ParticleFluence/Layer/include/TrackingAction.hh +++ b/examples/extended/hadronic/ParticleFluence/Layer/include/TrackingAction.hh @@ -81,7 +81,7 @@ class TrackingAction : public G4UserTrackingAction { private: Run* fRunPtr; // Pointer to the Run object - std::array< G4int, fkNumberCombinations > fArrayMultiplicities; + std::array< G4long, fkNumberCombinations > fArrayMultiplicities; std::array< G4double, fkNumberCombinations > fArraySumKineticEnergies; // Keep record of the fkNumber of particles and their kinetic energy at production, // according to the particle type and their kinetic energy range (below/above 20 MeV). diff --git a/examples/extended/hadronic/ParticleFluence/Layer/src/Run.cc b/examples/extended/hadronic/ParticleFluence/Layer/src/Run.cc index 921d4759d47..891cac199e0 100644 --- a/examples/extended/hadronic/ParticleFluence/Layer/src/Run.cc +++ b/examples/extended/hadronic/ParticleFluence/Layer/src/Run.cc @@ -159,7 +159,7 @@ void Run::SetSteppingArray( const std::array< G4double, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Run::SetTrackingArray1( const std::array< G4int, +void Run::SetTrackingArray1( const std::array< G4long, TrackingAction::fkNumberCombinations >& inputArray ) { for ( G4int i = 0; i < TrackingAction::fkNumberCombinations; ++i ) { fTrackingArray1[i] = inputArray[i]; diff --git a/examples/extended/hadronic/ParticleFluence/Sphere/History b/examples/extended/hadronic/ParticleFluence/Sphere/History index 9e3c085b155..edae3a21394 100644 --- a/examples/extended/hadronic/ParticleFluence/Sphere/History +++ b/examples/extended/hadronic/ParticleFluence/Sphere/History @@ -4,6 +4,12 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-05-08 Alberto Ribon (exhadrParticleFluenceSphere-V11-01-00) +- Run, TrackingAction : replaced G4int with G4long for keeping the information + on the multiplicity of particle production. + (This avoids rare cases of negative multiplicities due to integer overflow, + seen for runs with at least 4000 events, in particular with heavy materials, + such as Tungsten and Lead.) ## 2022-09-07 Alberto Ribon (exhadrParticleFluenceSphere-V11-00-02) - Added complementary information on particle production (multiplicity, diff --git a/examples/extended/hadronic/ParticleFluence/Sphere/Sphere.out b/examples/extended/hadronic/ParticleFluence/Sphere/Sphere.out index f9f219c7f33..074e91ef81c 100644 --- a/examples/extended/hadronic/ParticleFluence/Sphere/Sphere.out +++ b/examples/extended/hadronic/ParticleFluence/Sphere/Sphere.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -173,7 +173,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -205,7 +205,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -237,7 +237,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -250,7 +250,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -296,7 +295,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -328,7 +327,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -360,7 +359,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -392,7 +391,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -424,7 +423,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -456,7 +455,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -488,7 +487,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -873,12 +872,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -929,7 +937,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=1.050000s Real=1.069107s Sys=0.010000s + User=1.260000s Real=1.321068s Sys=0.010000s =============== Run::PrintInfo() =============== RunID = 0 @@ -941,107 +949,107 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 forward all 0.00177877 - case= 1 forward electron 0.000186299 - case= 2 forward gamma 0.00136682 - case= 3 forward muon 1.01882e-06 - case= 4 forward neutrino 3.34715e-05 - case= 5 forward pion 7.50603e-05 - case= 6 forward neutron 8.79602e-05 - case= 7 forward proton 2.30453e-05 - case= 8 forward ion 1.9519e-07 - case= 9 forward otherMeson 4.64992e-06 - case= 10 forward otherBaryon 2.46917e-07 - case= 11 backward all 3.73969e-05 - case= 12 backward electron 7.78462e-07 - case= 13 backward gamma 2.25163e-05 + case= 0 forward all 0.00253191 + case= 1 forward electron 0.00027435 + case= 2 forward gamma 0.00195155 + case= 3 forward muon 1.78579e-06 + case= 4 forward neutrino 5.67564e-05 + case= 5 forward pion 8.7674e-05 + case= 6 forward neutron 0.000126277 + case= 7 forward proton 2.71605e-05 + case= 8 forward ion 3.92505e-07 + case= 9 forward otherMeson 5.48633e-06 + case= 10 forward otherBaryon 4.75786e-07 + case= 11 backward all 6.23016e-05 + case= 12 backward electron 4.07215e-06 + case= 13 backward gamma 4.22236e-05 case= 14 backward muon 0 - case= 15 backward neutrino 1.20847e-05 - case= 16 backward pion 0 - case= 17 backward neutron 1.8557e-06 - case= 18 backward proton 1.61666e-07 + case= 15 backward neutrino 1.24216e-05 + case= 16 backward pion 2.9124e-07 + case= 17 backward neutron 2.9103e-06 + case= 18 backward proton 3.82691e-07 case= 19 backward ion 0 case= 20 backward otherMeson 0 case= 21 backward otherBaryon 0 - case= 22 below 20 MeV forward all 0.00124887 - case= 23 below 20 MeV forward electron 8.21758e-05 - case= 24 below 20 MeV forward gamma 0.00113651 + case= 22 below 20 MeV forward all 0.00179798 + case= 23 below 20 MeV forward electron 0.000115728 + case= 24 below 20 MeV forward gamma 0.00163562 case= 25 below 20 MeV forward muon 0 - case= 26 below 20 MeV forward neutrino 2.31625e-06 - case= 27 below 20 MeV forward pion 0 - case= 28 below 20 MeV forward neutron 2.68167e-05 - case= 29 below 20 MeV forward proton 1.04831e-06 - case= 30 below 20 MeV forward ion 0 + case= 26 below 20 MeV forward neutrino 5.41121e-06 + case= 27 below 20 MeV forward pion 5.23552e-07 + case= 28 below 20 MeV forward neutron 3.9729e-05 + case= 29 below 20 MeV forward proton 7.43543e-07 + case= 30 below 20 MeV forward ion 2.30352e-07 case= 31 below 20 MeV forward otherMeson 0 case= 32 below 20 MeV forward otherBaryon 0 - case= 33 below 20 MeV backward all 2.09785e-05 - case= 34 below 20 MeV backward electron 2.65702e-07 - case= 35 below 20 MeV backward gamma 1.94884e-05 + case= 33 below 20 MeV backward all 4.39337e-05 + case= 34 below 20 MeV backward electron 2.4237e-06 + case= 35 below 20 MeV backward gamma 3.97182e-05 case= 36 below 20 MeV backward muon 0 - case= 37 below 20 MeV backward neutrino 1.22441e-06 + case= 37 below 20 MeV backward neutrino 1.35297e-06 case= 38 below 20 MeV backward pion 0 - case= 39 below 20 MeV backward neutron 0 + case= 39 below 20 MeV backward neutron 4.3884e-07 case= 40 below 20 MeV backward proton 0 case= 41 below 20 MeV backward ion 0 case= 42 below 20 MeV backward otherMeson 0 case= 43 below 20 MeV backward otherBaryon 0 - case= 44 above 20 MeV forward all 0.000529901 - case= 45 above 20 MeV forward electron 0.000104123 - case= 46 above 20 MeV forward gamma 0.000230311 - case= 47 above 20 MeV forward muon 1.01882e-06 - case= 48 above 20 MeV forward neutrino 3.11552e-05 - case= 49 above 20 MeV forward pion 7.50603e-05 - case= 50 above 20 MeV forward neutron 6.11435e-05 - case= 51 above 20 MeV forward proton 2.1997e-05 - case= 52 above 20 MeV forward ion 1.9519e-07 - case= 53 above 20 MeV forward otherMeson 4.64992e-06 - case= 54 above 20 MeV forward otherBaryon 2.46917e-07 - case= 55 above 20 MeV backward all 1.64183e-05 - case= 56 above 20 MeV backward electron 5.1276e-07 - case= 57 above 20 MeV backward gamma 3.02788e-06 + case= 44 above 20 MeV forward all 0.000733925 + case= 45 above 20 MeV forward electron 0.000158623 + case= 46 above 20 MeV forward gamma 0.000315932 + case= 47 above 20 MeV forward muon 1.78579e-06 + case= 48 above 20 MeV forward neutrino 5.13452e-05 + case= 49 above 20 MeV forward pion 8.71504e-05 + case= 50 above 20 MeV forward neutron 8.65481e-05 + case= 51 above 20 MeV forward proton 2.64169e-05 + case= 52 above 20 MeV forward ion 1.62153e-07 + case= 53 above 20 MeV forward otherMeson 5.48633e-06 + case= 54 above 20 MeV forward otherBaryon 4.75786e-07 + case= 55 above 20 MeV backward all 1.83679e-05 + case= 56 above 20 MeV backward electron 1.64845e-06 + case= 57 above 20 MeV backward gamma 2.50544e-06 case= 58 above 20 MeV backward muon 0 - case= 59 above 20 MeV backward neutrino 1.08603e-05 - case= 60 above 20 MeV backward pion 0 - case= 61 above 20 MeV backward neutron 1.8557e-06 - case= 62 above 20 MeV backward proton 1.61666e-07 + case= 59 above 20 MeV backward neutrino 1.10686e-05 + case= 60 above 20 MeV backward pion 2.9124e-07 + case= 61 above 20 MeV backward neutron 2.47146e-06 + case= 62 above 20 MeV backward proton 3.82691e-07 case= 63 above 20 MeV backward ion 0 case= 64 above 20 MeV backward otherMeson 0 case= 65 above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 sphere all 1648.43 64.9378 107045 - case= 1 sphere electron 1367.19 4.7469 6489.91 - case= 2 sphere gamma 185.91 68.7989 12790.4 - case= 3 sphere muon 0.82 30.1413 24.7159 - case= 4 sphere neutrino 2.34 37.2056 87.061 - case= 5 sphere pion 14.02 5537.09 77630 - case= 6 sphere neutron 14.07 161.001 2265.28 - case= 7 sphere proton 31.19 68.859 2147.71 - case= 8 sphere ion 31.77 4.76582 151.41 - case= 9 sphere otherMeson 0.94 5278.83 4962.1 - case= 10 sphere otherBaryon 0.18 2760 496.799 - case= 11 sphere below 20 MeV all 1578.41 0.534242 843.253 - case= 12 sphere below 20 MeV electron 1350.96 0.296097 400.016 - case= 13 sphere below 20 MeV gamma 162.97 1.39138 226.754 - case= 14 sphere below 20 MeV muon 0.72 4.1626 2.99707 - case= 15 sphere below 20 MeV neutrino 0.19 15.2163 2.89109 - case= 16 sphere below 20 MeV pion 0.27 7.17237 1.93654 - case= 17 sphere below 20 MeV neutron 7.52 6.91487 51.9998 - case= 18 sphere below 20 MeV proton 25.37 2.88918 73.2986 - case= 19 sphere below 20 MeV ion 30.38 2.73612 83.1233 - case= 20 sphere below 20 MeV otherMeson 0.03 7.88707 0.236612 - case= 21 sphere below 20 MeV otherBaryon 0 0 0 - case= 22 sphere above 20 MeV all 70.02 1516.74 106202 - case= 23 sphere above 20 MeV electron 16.23 375.224 6089.89 - case= 24 sphere above 20 MeV gamma 22.94 547.674 12563.7 - case= 25 sphere above 20 MeV muon 0.1 217.188 21.7188 - case= 26 sphere above 20 MeV neutrino 2.15 39.1488 84.1699 - case= 27 sphere above 20 MeV pion 13.75 5645.68 77628.1 - case= 28 sphere above 20 MeV neutron 6.55 337.905 2213.28 - case= 29 sphere above 20 MeV proton 5.82 356.428 2074.41 - case= 30 sphere above 20 MeV ion 1.39 49.1273 68.2869 - case= 31 sphere above 20 MeV otherMeson 0.91 5452.6 4961.87 - case= 32 sphere above 20 MeV otherBaryon 0.18 2760 496.799 + case= 0 sphere all 2245.25 55.1968 123931 + case= 1 sphere electron 1852.58 4.93538 9143.19 + case= 2 sphere gamma 260.18 65.3803 17010.7 + case= 3 sphere muon 1.14 105.777 120.586 + case= 4 sphere neutrino 3.21 38.4758 123.507 + case= 5 sphere pion 18.39 4516.19 83052.8 + case= 6 sphere neutron 19.49 128.684 2508.05 + case= 7 sphere proton 44.2 72.8745 3221.05 + case= 8 sphere ion 44.4 5.08305 225.688 + case= 9 sphere otherMeson 1.38 5344.74 7375.75 + case= 10 sphere otherBaryon 0.28 4105.12 1149.43 + case= 11 sphere below 20 MeV all 2146.87 0.551371 1183.72 + case= 12 sphere below 20 MeV electron 1829.21 0.303932 555.956 + case= 13 sphere below 20 MeV gamma 227.87 1.45299 331.094 + case= 14 sphere below 20 MeV muon 0.96 4.11981 3.95502 + case= 15 sphere below 20 MeV neutrino 0.28 15.6722 4.38822 + case= 16 sphere below 20 MeV pion 0.41 8.36417 3.42931 + case= 17 sphere below 20 MeV neutron 9.95 6.63482 66.0165 + case= 18 sphere below 20 MeV proton 35.8 2.74344 98.2151 + case= 19 sphere below 20 MeV ion 42.35 2.84115 120.323 + case= 20 sphere below 20 MeV otherMeson 0.03 7.40933 0.22228 + case= 21 sphere below 20 MeV otherBaryon 0.01 12.3993 0.123993 + case= 22 sphere above 20 MeV all 98.38 1247.68 122747 + case= 23 sphere above 20 MeV electron 23.37 367.447 8587.23 + case= 24 sphere above 20 MeV gamma 32.31 516.235 16679.6 + case= 25 sphere above 20 MeV muon 0.18 647.95 116.631 + case= 26 sphere above 20 MeV neutrino 2.93 40.6549 119.119 + case= 27 sphere above 20 MeV pion 17.98 4618.98 83049.3 + case= 28 sphere above 20 MeV neutron 9.54 255.978 2442.03 + case= 29 sphere above 20 MeV proton 8.4 371.767 3122.84 + case= 30 sphere above 20 MeV ion 2.05 51.3975 105.365 + case= 31 sphere above 20 MeV otherMeson 1.35 5463.35 7375.52 + case= 32 sphere above 20 MeV otherBaryon 0.27 4256.7 1149.31 ============================================================= @@ -1100,7 +1108,7 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=6.830000s Real=6.899890s Sys=0.010000s + User=6.270000s Real=8.645559s Sys=0.010000s =============== Run::PrintInfo() =============== RunID = 1 @@ -1112,107 +1120,107 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 forward all 0.00633905 - case= 1 forward electron 0.0005446 - case= 2 forward gamma 0.00519458 - case= 3 forward muon 1.90562e-06 - case= 4 forward neutrino 0.000127406 - case= 5 forward pion 8.38583e-05 - case= 6 forward neutron 0.000348442 - case= 7 forward proton 3.11015e-05 - case= 8 forward ion 1.92653e-07 - case= 9 forward otherMeson 6.64966e-06 - case= 10 forward otherBaryon 3.19164e-07 - case= 11 backward all 7.46965e-05 - case= 12 backward electron 1.6155e-07 - case= 13 backward gamma 2.52376e-05 + case= 0 forward all 0.00660935 + case= 1 forward electron 0.000559957 + case= 2 forward gamma 0.00532837 + case= 3 forward muon 1.40022e-06 + case= 4 forward neutrino 0.000144194 + case= 5 forward pion 9.69693e-05 + case= 6 forward neutron 0.0004323 + case= 7 forward proton 3.89844e-05 + case= 8 forward ion 0 + case= 9 forward otherMeson 6.24469e-06 + case= 10 forward otherBaryon 9.33685e-07 + case= 11 backward all 9.29775e-05 + case= 12 backward electron 1.92311e-06 + case= 13 backward gamma 3.73232e-05 case= 14 backward muon 0 - case= 15 backward neutrino 4.11874e-05 + case= 15 backward neutrino 4.75157e-05 case= 16 backward pion 0 - case= 17 backward neutron 8.10989e-06 + case= 17 backward neutron 6.21554e-06 case= 18 backward proton 0 case= 19 backward ion 0 case= 20 backward otherMeson 0 case= 21 backward otherBaryon 0 - case= 22 below 20 MeV forward all 0.00502252 - case= 23 below 20 MeV forward electron 0.000267664 - case= 24 below 20 MeV forward gamma 0.00454512 - case= 25 below 20 MeV forward muon 0 - case= 26 below 20 MeV forward neutrino 1.51432e-05 - case= 27 below 20 MeV forward pion 5.06922e-07 - case= 28 below 20 MeV forward neutron 0.000193853 - case= 29 below 20 MeV forward proton 2.33354e-07 + case= 22 below 20 MeV forward all 0.00520818 + case= 23 below 20 MeV forward electron 0.000270686 + case= 24 below 20 MeV forward gamma 0.0046793 + case= 25 below 20 MeV forward muon 2.61939e-07 + case= 26 below 20 MeV forward neutrino 1.56523e-05 + case= 27 below 20 MeV forward pion 7.23869e-07 + case= 28 below 20 MeV forward neutron 0.000240031 + case= 29 below 20 MeV forward proton 1.52298e-06 case= 30 below 20 MeV forward ion 0 case= 31 below 20 MeV forward otherMeson 0 case= 32 below 20 MeV forward otherBaryon 0 - case= 33 below 20 MeV backward all 3.20867e-05 - case= 34 below 20 MeV backward electron 1.6155e-07 - case= 35 below 20 MeV backward gamma 2.28905e-05 + case= 33 below 20 MeV backward all 4.29223e-05 + case= 34 below 20 MeV backward electron 1.05918e-06 + case= 35 below 20 MeV backward gamma 3.51317e-05 case= 36 below 20 MeV backward muon 0 - case= 37 below 20 MeV backward neutrino 3.18572e-06 + case= 37 below 20 MeV backward neutrino 4.07364e-06 case= 38 below 20 MeV backward pion 0 - case= 39 below 20 MeV backward neutron 5.84894e-06 + case= 39 below 20 MeV backward neutron 2.65783e-06 case= 40 below 20 MeV backward proton 0 case= 41 below 20 MeV backward ion 0 case= 42 below 20 MeV backward otherMeson 0 case= 43 below 20 MeV backward otherBaryon 0 - case= 44 above 20 MeV forward all 0.00131653 - case= 45 above 20 MeV forward electron 0.000276937 - case= 46 above 20 MeV forward gamma 0.000649459 - case= 47 above 20 MeV forward muon 1.90562e-06 - case= 48 above 20 MeV forward neutrino 0.000112263 - case= 49 above 20 MeV forward pion 8.33514e-05 - case= 50 above 20 MeV forward neutron 0.000154588 - case= 51 above 20 MeV forward proton 3.08681e-05 - case= 52 above 20 MeV forward ion 1.92653e-07 - case= 53 above 20 MeV forward otherMeson 6.64966e-06 - case= 54 above 20 MeV forward otherBaryon 3.19164e-07 - case= 55 above 20 MeV backward all 4.26098e-05 - case= 56 above 20 MeV backward electron 0 - case= 57 above 20 MeV backward gamma 2.34713e-06 + case= 44 above 20 MeV forward all 0.00140118 + case= 45 above 20 MeV forward electron 0.000289271 + case= 46 above 20 MeV forward gamma 0.000649072 + case= 47 above 20 MeV forward muon 1.13828e-06 + case= 48 above 20 MeV forward neutrino 0.000128541 + case= 49 above 20 MeV forward pion 9.62454e-05 + case= 50 above 20 MeV forward neutron 0.000192269 + case= 51 above 20 MeV forward proton 3.74614e-05 + case= 52 above 20 MeV forward ion 0 + case= 53 above 20 MeV forward otherMeson 6.24469e-06 + case= 54 above 20 MeV forward otherBaryon 9.33685e-07 + case= 55 above 20 MeV backward all 5.00552e-05 + case= 56 above 20 MeV backward electron 8.63939e-07 + case= 57 above 20 MeV backward gamma 2.19151e-06 case= 58 above 20 MeV backward muon 0 - case= 59 above 20 MeV backward neutrino 3.80017e-05 + case= 59 above 20 MeV backward neutrino 4.3442e-05 case= 60 above 20 MeV backward pion 0 - case= 61 above 20 MeV backward neutron 2.26095e-06 + case= 61 above 20 MeV backward neutron 3.55771e-06 case= 62 above 20 MeV backward proton 0 case= 63 above 20 MeV backward ion 0 case= 64 above 20 MeV backward otherMeson 0 case= 65 above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 sphere all 12649.4 14.7622 186732 - case= 1 sphere electron 10814.2 2.53719 27437.7 - case= 2 sphere gamma 1251.51 28.1868 35276.1 - case= 3 sphere muon 2.93 38.309 112.246 - case= 4 sphere neutrino 8.56 36.4787 312.258 - case= 5 sphere pion 34.2 2899.9 99176.5 - case= 6 sphere neutron 75.99 77.6309 5899.17 - case= 7 sphere proton 40.38 128.98 5208.19 - case= 8 sphere ion 418.44 1.7554 734.529 - case= 9 sphere otherMeson 2.57 4588.18 11791.6 - case= 10 sphere otherBaryon 0.55 1425.19 783.857 - case= 11 sphere below 20 MeV all 12349.2 0.416415 5142.38 - case= 12 sphere below 20 MeV electron 10719 0.238336 2554.72 - case= 13 sphere below 20 MeV gamma 1147.03 1.40967 1616.94 - case= 14 sphere below 20 MeV muon 2.64 4.21745 11.1341 - case= 15 sphere below 20 MeV neutrino 0.88 14.1278 12.4325 - case= 16 sphere below 20 MeV pion 0.56 11.7091 6.55712 - case= 17 sphere below 20 MeV neutron 45.22 6.09682 275.698 - case= 18 sphere below 20 MeV proton 19.82 7.59282 150.49 - case= 19 sphere below 20 MeV ion 414.01 1.24172 514.086 - case= 20 sphere below 20 MeV otherMeson 0 0 0 - case= 21 sphere below 20 MeV otherBaryon 0.03 10.8257 0.324772 - case= 22 sphere above 20 MeV all 300.2 604.896 181590 - case= 23 sphere above 20 MeV electron 95.26 261.211 24883 - case= 24 sphere above 20 MeV gamma 104.48 322.159 33659.1 - case= 25 sphere above 20 MeV muon 0.29 348.66 101.111 - case= 26 sphere above 20 MeV neutrino 7.68 39.0398 299.825 - case= 27 sphere above 20 MeV pion 33.64 2947.98 99169.9 - case= 28 sphere above 20 MeV neutron 30.77 182.758 5623.48 - case= 29 sphere above 20 MeV proton 20.56 245.997 5057.7 - case= 30 sphere above 20 MeV ion 4.43 49.7615 220.443 - case= 31 sphere above 20 MeV otherMeson 2.57 4588.18 11791.6 - case= 32 sphere above 20 MeV otherBaryon 0.52 1506.79 783.532 + case= 0 sphere all 13472.4 13.9629 188115 + case= 1 sphere electron 11438.5 2.1495 24587.1 + case= 2 sphere gamma 1309.55 24.9479 32670.5 + case= 3 sphere muon 3.26 26.978 87.9482 + case= 4 sphere neutrino 9.65 35.6787 344.3 + case= 5 sphere pion 40.22 2615.99 105215 + case= 6 sphere neutron 94.52 74.6295 7053.98 + case= 7 sphere proton 50.03 140.542 7031.3 + case= 8 sphere ion 523.21 1.68396 881.063 + case= 9 sphere otherMeson 2.77 3396.67 9408.78 + case= 10 sphere otherBaryon 0.73 1143.5 834.752 + case= 11 sphere below 20 MeV all 13150.2 0.421447 5542.1 + case= 12 sphere below 20 MeV electron 11341.3 0.234181 2655.93 + case= 13 sphere below 20 MeV gamma 1204.01 1.39115 1674.95 + case= 14 sphere below 20 MeV muon 2.98 4.13096 12.3103 + case= 15 sphere below 20 MeV neutrino 0.98 14.3201 14.0337 + case= 16 sphere below 20 MeV pion 0.61 11.7054 7.14031 + case= 17 sphere below 20 MeV neutron 56.77 6.15291 349.301 + case= 18 sphere below 20 MeV proton 25.25 7.30779 184.522 + case= 19 sphere below 20 MeV ion 518.07 1.23987 642.337 + case= 20 sphere below 20 MeV otherMeson 0.09 8.20028 0.738025 + case= 21 sphere below 20 MeV otherBaryon 0.06 13.9024 0.834141 + case= 22 sphere above 20 MeV all 322.28 566.503 182573 + case= 23 sphere above 20 MeV electron 97.16 225.722 21931.2 + case= 24 sphere above 20 MeV gamma 105.54 293.685 30995.5 + case= 25 sphere above 20 MeV muon 0.28 270.135 75.6379 + case= 26 sphere above 20 MeV neutrino 8.67 38.093 330.266 + case= 27 sphere above 20 MeV pion 39.61 2656.09 105208 + case= 28 sphere above 20 MeV neutron 37.75 177.607 6704.68 + case= 29 sphere above 20 MeV proton 24.78 276.303 6846.78 + case= 30 sphere above 20 MeV ion 5.14 46.4448 238.726 + case= 31 sphere above 20 MeV otherMeson 2.68 3510.46 9408.04 + case= 32 sphere above 20 MeV otherBaryon 0.67 1244.65 833.918 ============================================================= @@ -1276,7 +1284,7 @@ Index : 3 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=10.160000s Real=10.249042s Sys=0.010000s + User=8.320000s Real=8.470849s Sys=0.010000s =============== Run::PrintInfo() =============== RunID = 2 @@ -1288,107 +1296,107 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 forward all 0.00986381 - case= 1 forward electron 0.000607279 - case= 2 forward gamma 0.00804709 - case= 3 forward muon 1.7491e-06 - case= 4 forward neutrino 9.07431e-05 - case= 5 forward pion 8.94882e-05 - case= 6 forward neutron 0.000981916 - case= 7 forward proton 3.41086e-05 - case= 8 forward ion 8.02292e-07 - case= 9 forward otherMeson 1.03178e-05 - case= 10 forward otherBaryon 3.18269e-07 - case= 11 backward all 0.000200479 - case= 12 backward electron 0 - case= 13 backward gamma 1.54974e-05 + case= 0 forward all 0.00956257 + case= 1 forward electron 0.000605568 + case= 2 forward gamma 0.00773355 + case= 3 forward muon 2.09351e-06 + case= 4 forward neutrino 9.16513e-05 + case= 5 forward pion 9.52166e-05 + case= 6 forward neutron 0.000993959 + case= 7 forward proton 3.27915e-05 + case= 8 forward ion 1.74807e-07 + case= 9 forward otherMeson 6.88444e-06 + case= 10 forward otherBaryon 6.81197e-07 + case= 11 backward all 0.000213019 + case= 12 backward electron 4.10615e-07 + case= 13 backward gamma 2.29522e-05 case= 14 backward muon 0 - case= 15 backward neutrino 2.45125e-05 + case= 15 backward neutrino 2.42336e-05 case= 16 backward pion 0 - case= 17 backward neutron 0.000160469 + case= 17 backward neutron 0.000165423 case= 18 backward proton 0 case= 19 backward ion 0 case= 20 backward otherMeson 0 case= 21 backward otherBaryon 0 - case= 22 below 20 MeV forward all 0.00866547 - case= 23 below 20 MeV forward electron 0.000387569 - case= 24 below 20 MeV forward gamma 0.00746187 + case= 22 below 20 MeV forward all 0.00836265 + case= 23 below 20 MeV forward electron 0.00037442 + case= 24 below 20 MeV forward gamma 0.00715745 case= 25 below 20 MeV forward muon 0 - case= 26 below 20 MeV forward neutrino 7.19202e-06 - case= 27 below 20 MeV forward pion 1.77238e-07 - case= 28 below 20 MeV forward neutron 0.000808005 - case= 29 below 20 MeV forward proton 4.34672e-07 + case= 26 below 20 MeV forward neutrino 1.03875e-05 + case= 27 below 20 MeV forward pion 3.58674e-07 + case= 28 below 20 MeV forward neutron 0.0008195 + case= 29 below 20 MeV forward proton 5.31748e-07 case= 30 below 20 MeV forward ion 0 - case= 31 below 20 MeV forward otherMeson 2.15907e-07 + case= 31 below 20 MeV forward otherMeson 0 case= 32 below 20 MeV forward otherBaryon 0 - case= 33 below 20 MeV backward all 0.000173397 - case= 34 below 20 MeV backward electron 0 - case= 35 below 20 MeV backward gamma 1.54974e-05 + case= 33 below 20 MeV backward all 0.000186048 + case= 34 below 20 MeV backward electron 4.10615e-07 + case= 35 below 20 MeV backward gamma 2.25995e-05 case= 36 below 20 MeV backward muon 0 - case= 37 below 20 MeV backward neutrino 2.3526e-06 + case= 37 below 20 MeV backward neutrino 2.05488e-06 case= 38 below 20 MeV backward pion 0 - case= 39 below 20 MeV backward neutron 0.000155547 + case= 39 below 20 MeV backward neutron 0.000160983 case= 40 below 20 MeV backward proton 0 case= 41 below 20 MeV backward ion 0 case= 42 below 20 MeV backward otherMeson 0 case= 43 below 20 MeV backward otherBaryon 0 - case= 44 above 20 MeV forward all 0.00119834 - case= 45 above 20 MeV forward electron 0.00021971 - case= 46 above 20 MeV forward gamma 0.000585213 - case= 47 above 20 MeV forward muon 1.7491e-06 - case= 48 above 20 MeV forward neutrino 8.35511e-05 - case= 49 above 20 MeV forward pion 8.9311e-05 - case= 50 above 20 MeV forward neutron 0.000173911 - case= 51 above 20 MeV forward proton 3.36739e-05 - case= 52 above 20 MeV forward ion 8.02292e-07 - case= 53 above 20 MeV forward otherMeson 1.01019e-05 - case= 54 above 20 MeV forward otherBaryon 3.18269e-07 - case= 55 above 20 MeV backward all 2.70815e-05 + case= 44 above 20 MeV forward all 0.00119992 + case= 45 above 20 MeV forward electron 0.000231148 + case= 46 above 20 MeV forward gamma 0.000576099 + case= 47 above 20 MeV forward muon 2.09351e-06 + case= 48 above 20 MeV forward neutrino 8.12637e-05 + case= 49 above 20 MeV forward pion 9.48579e-05 + case= 50 above 20 MeV forward neutron 0.000174459 + case= 51 above 20 MeV forward proton 3.22597e-05 + case= 52 above 20 MeV forward ion 1.74807e-07 + case= 53 above 20 MeV forward otherMeson 6.88444e-06 + case= 54 above 20 MeV forward otherBaryon 6.81197e-07 + case= 55 above 20 MeV backward all 2.69709e-05 case= 56 above 20 MeV backward electron 0 - case= 57 above 20 MeV backward gamma 0 + case= 57 above 20 MeV backward gamma 3.52733e-07 case= 58 above 20 MeV backward muon 0 - case= 59 above 20 MeV backward neutrino 2.21599e-05 + case= 59 above 20 MeV backward neutrino 2.21787e-05 case= 60 above 20 MeV backward pion 0 - case= 61 above 20 MeV backward neutron 4.9216e-06 + case= 61 above 20 MeV backward neutron 4.43945e-06 case= 62 above 20 MeV backward proton 0 case= 63 above 20 MeV backward ion 0 case= 64 above 20 MeV backward otherMeson 0 case= 65 above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 sphere all 20802.7 9.93669 206710 - case= 1 sphere electron 16741.8 2.42433 40587.5 - case= 2 sphere gamma 3547.79 12.4479 44162.5 - case= 3 sphere muon 1.9 27.4647 52.1829 - case= 4 sphere neutrino 5.53 43.3979 239.991 - case= 5 sphere pion 29.5 3336.39 98423.4 - case= 6 sphere neutron 105.65 52.3781 5533.74 - case= 7 sphere proton 72.66 80.5156 5850.26 - case= 8 sphere ion 294.45 1.61388 475.206 - case= 9 sphere otherMeson 2.78 3870.5 10760 - case= 10 sphere otherBaryon 0.69 906.179 625.264 - case= 11 sphere below 20 MeV all 20327.3 0.547125 11121.6 - case= 12 sphere below 20 MeV electron 16550.9 0.360656 5969.16 - case= 13 sphere below 20 MeV gamma 3358.93 1.2543 4213.1 - case= 14 sphere below 20 MeV muon 1.69 4.11981 6.96248 - case= 15 sphere below 20 MeV neutrino 0.46 13.5074 6.21341 - case= 16 sphere below 20 MeV pion 0.34 12.4177 4.22202 - case= 17 sphere below 20 MeV neutron 75.43 4.32793 326.456 - case= 18 sphere below 20 MeV proton 48.94 6.46936 316.61 - case= 19 sphere below 20 MeV ion 290.49 0.95528 277.499 - case= 20 sphere below 20 MeV otherMeson 0.05 10.4079 0.520393 - case= 21 sphere below 20 MeV otherBaryon 0.07 11.6152 0.813063 - case= 22 sphere above 20 MeV all 475.44 411.384 195588 - case= 23 sphere above 20 MeV electron 190.89 181.352 34618.3 - case= 24 sphere above 20 MeV gamma 188.86 211.529 39949.4 - case= 25 sphere above 20 MeV muon 0.21 215.336 45.2205 - case= 26 sphere above 20 MeV neutrino 5.07 46.1099 233.777 - case= 27 sphere above 20 MeV pion 29.16 3375.14 98419.2 - case= 28 sphere above 20 MeV neutron 30.22 172.313 5207.29 - case= 29 sphere above 20 MeV proton 23.72 233.291 5533.65 - case= 30 sphere above 20 MeV ion 3.96 49.9259 197.707 - case= 31 sphere above 20 MeV otherMeson 2.73 3941.2 10759.5 - case= 32 sphere above 20 MeV otherBaryon 0.62 1007.18 624.451 + case= 0 sphere all 19662.4 10.3156 202830 + case= 1 sphere electron 15794.6 2.41348 38119.9 + case= 2 sphere gamma 3345.62 12.7201 42556.8 + case= 3 sphere muon 1.97 59.1446 116.515 + case= 4 sphere neutrino 5.67 38.4734 218.144 + case= 5 sphere pion 30.62 3221.78 98650.9 + case= 6 sphere neutron 107.55 57.8473 6221.48 + case= 7 sphere proton 72.51 81.0086 5873.93 + case= 8 sphere ion 301.06 1.58833 478.184 + case= 9 sphere otherMeson 2.23 4139.76 9231.67 + case= 10 sphere otherBaryon 0.61 2234.35 1362.95 + case= 11 sphere below 20 MeV all 19208.3 0.550873 10581.3 + case= 12 sphere below 20 MeV electron 15615.4 0.36089 5635.45 + case= 13 sphere below 20 MeV gamma 3166.51 1.26034 3990.86 + case= 14 sphere below 20 MeV muon 1.76 4.12622 7.26215 + case= 15 sphere below 20 MeV neutrino 0.54 15.1673 8.19034 + case= 16 sphere below 20 MeV pion 0.35 10.6015 3.71052 + case= 17 sphere below 20 MeV neutron 76.91 4.26355 327.91 + case= 18 sphere below 20 MeV proton 49.43 6.50789 321.685 + case= 19 sphere below 20 MeV ion 297.31 0.961586 285.889 + case= 20 sphere below 20 MeV otherMeson 0.02 9.14346 0.182869 + case= 21 sphere below 20 MeV otherBaryon 0.01 17.4595 0.174595 + case= 22 sphere above 20 MeV all 454.16 423.307 192249 + case= 23 sphere above 20 MeV electron 179.16 181.315 32484.4 + case= 24 sphere above 20 MeV gamma 179.11 215.32 38565.9 + case= 25 sphere above 20 MeV muon 0.21 520.251 109.253 + case= 26 sphere above 20 MeV neutrino 5.13 40.9267 209.954 + case= 27 sphere above 20 MeV pion 30.27 3258.91 98647.2 + case= 28 sphere above 20 MeV neutron 30.64 192.349 5893.57 + case= 29 sphere above 20 MeV proton 23.08 240.565 5552.25 + case= 30 sphere above 20 MeV ion 3.75 51.2786 192.295 + case= 31 sphere above 20 MeV otherMeson 2.21 4177.14 9231.48 + case= 32 sphere above 20 MeV otherBaryon 0.6 2271.3 1362.78 ============================================================= @@ -1457,7 +1465,7 @@ Index : 4 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=3.440000s Real=3.491362s Sys=0.010000s + User=2.950000s Real=3.121023s Sys=0.010000s =============== Run::PrintInfo() =============== RunID = 3 @@ -1469,107 +1477,107 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 forward all 0.00658587 - case= 1 forward electron 0.000464341 - case= 2 forward gamma 0.00516346 - case= 3 forward muon 1.26954e-06 - case= 4 forward neutrino 3.27391e-05 - case= 5 forward pion 8.26332e-05 - case= 6 forward neutron 0.000807377 - case= 7 forward proton 2.44629e-05 - case= 8 forward ion 1.71403e-06 - case= 9 forward otherMeson 7.22217e-06 - case= 10 forward otherBaryon 6.51364e-07 - case= 11 backward all 0.00017875 - case= 12 backward electron 6.36576e-07 - case= 13 backward gamma 2.67574e-05 + case= 0 forward all 0.00623131 + case= 1 forward electron 0.000477919 + case= 2 forward gamma 0.00486246 + case= 3 forward muon 1.00275e-06 + case= 4 forward neutrino 1.76412e-05 + case= 5 forward pion 7.26144e-05 + case= 6 forward neutron 0.00077043 + case= 7 forward proton 2.2871e-05 + case= 8 forward ion 1.0368e-06 + case= 9 forward otherMeson 5.32971e-06 + case= 10 forward otherBaryon 0 + case= 11 backward all 0.000181683 + case= 12 backward electron 5.54037e-07 + case= 13 backward gamma 3.10964e-05 case= 14 backward muon 0 - case= 15 backward neutrino 8.44444e-06 - case= 16 backward pion 0 - case= 17 backward neutron 0.000142752 - case= 18 backward proton 1.59701e-07 + case= 15 backward neutrino 5.9573e-06 + case= 16 backward pion 1.88049e-07 + case= 17 backward neutron 0.000143712 + case= 18 backward proton 1.75204e-07 case= 19 backward ion 0 case= 20 backward otherMeson 0 case= 21 backward otherBaryon 0 - case= 22 below 20 MeV forward all 0.00572657 - case= 23 below 20 MeV forward electron 0.000280512 - case= 24 below 20 MeV forward gamma 0.00476214 + case= 22 below 20 MeV forward all 0.00539669 + case= 23 below 20 MeV forward electron 0.000280154 + case= 24 below 20 MeV forward gamma 0.00445791 case= 25 below 20 MeV forward muon 0 - case= 26 below 20 MeV forward neutrino 2.55492e-06 - case= 27 below 20 MeV forward pion 3.293e-07 - case= 28 below 20 MeV forward neutron 0.00068021 - case= 29 below 20 MeV forward proton 6.20432e-07 - case= 30 below 20 MeV forward ion 2.02337e-07 + case= 26 below 20 MeV forward neutrino 1.62758e-06 + case= 27 below 20 MeV forward pion 6.27143e-07 + case= 28 below 20 MeV forward neutron 0.000655757 + case= 29 below 20 MeV forward proton 6.1783e-07 + case= 30 below 20 MeV forward ion 0 case= 31 below 20 MeV forward otherMeson 0 case= 32 below 20 MeV forward otherBaryon 0 - case= 33 below 20 MeV backward all 0.000164642 - case= 34 below 20 MeV backward electron 6.36576e-07 - case= 35 below 20 MeV backward gamma 2.67574e-05 + case= 33 below 20 MeV backward all 0.000166892 + case= 34 below 20 MeV backward electron 2.07317e-07 + case= 35 below 20 MeV backward gamma 3.02967e-05 case= 36 below 20 MeV backward muon 0 - case= 37 below 20 MeV backward neutrino 5.4417e-07 + case= 37 below 20 MeV backward neutrino 5.0294e-07 case= 38 below 20 MeV backward pion 0 - case= 39 below 20 MeV backward neutron 0.000136704 + case= 39 below 20 MeV backward neutron 0.000135885 case= 40 below 20 MeV backward proton 0 case= 41 below 20 MeV backward ion 0 case= 42 below 20 MeV backward otherMeson 0 case= 43 below 20 MeV backward otherBaryon 0 - case= 44 above 20 MeV forward all 0.000859303 - case= 45 above 20 MeV forward electron 0.000183829 - case= 46 above 20 MeV forward gamma 0.000401322 - case= 47 above 20 MeV forward muon 1.26954e-06 - case= 48 above 20 MeV forward neutrino 3.01842e-05 - case= 49 above 20 MeV forward pion 8.23039e-05 - case= 50 above 20 MeV forward neutron 0.000127167 - case= 51 above 20 MeV forward proton 2.38425e-05 - case= 52 above 20 MeV forward ion 1.51169e-06 - case= 53 above 20 MeV forward otherMeson 7.22217e-06 - case= 54 above 20 MeV forward otherBaryon 6.51364e-07 - case= 55 above 20 MeV backward all 1.41079e-05 - case= 56 above 20 MeV backward electron 0 - case= 57 above 20 MeV backward gamma 0 + case= 44 above 20 MeV forward all 0.000834615 + case= 45 above 20 MeV forward electron 0.000197765 + case= 46 above 20 MeV forward gamma 0.000404555 + case= 47 above 20 MeV forward muon 1.00275e-06 + case= 48 above 20 MeV forward neutrino 1.60137e-05 + case= 49 above 20 MeV forward pion 7.19873e-05 + case= 50 above 20 MeV forward neutron 0.000114673 + case= 51 above 20 MeV forward proton 2.22532e-05 + case= 52 above 20 MeV forward ion 1.0368e-06 + case= 53 above 20 MeV forward otherMeson 5.32971e-06 + case= 54 above 20 MeV forward otherBaryon 0 + case= 55 above 20 MeV backward all 1.47912e-05 + case= 56 above 20 MeV backward electron 3.46721e-07 + case= 57 above 20 MeV backward gamma 7.99703e-07 case= 58 above 20 MeV backward muon 0 - case= 59 above 20 MeV backward neutrino 7.90027e-06 - case= 60 above 20 MeV backward pion 0 - case= 61 above 20 MeV backward neutron 6.04789e-06 - case= 62 above 20 MeV backward proton 1.59701e-07 + case= 59 above 20 MeV backward neutrino 5.45436e-06 + case= 60 above 20 MeV backward pion 1.88049e-07 + case= 61 above 20 MeV backward neutron 7.82714e-06 + case= 62 above 20 MeV backward proton 1.75204e-07 case= 63 above 20 MeV backward ion 0 case= 64 above 20 MeV backward otherMeson 0 case= 65 above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 sphere all 5473.81 22.6342 123895 - case= 1 sphere electron 4040.36 3.77088 15235.7 - case= 2 sphere gamma 1200.33 15.9876 19190.4 - case= 3 sphere muon 0.71 35.4036 25.1366 - case= 4 sphere neutrino 2 35.4514 70.9027 - case= 5 sphere pion 14.56 5385.92 78419 - case= 6 sphere neutron 69.8 38.5954 2693.96 - case= 7 sphere proton 16.27 134.583 2189.67 - case= 8 sphere ion 128.19 1.18775 152.258 - case= 9 sphere otherMeson 1.25 4141.56 5176.95 - case= 10 sphere otherBaryon 0.34 2180.58 741.397 - case= 11 sphere below 20 MeV all 5302.59 0.652723 3461.12 - case= 12 sphere below 20 MeV electron 3980.16 0.423708 1686.43 - case= 13 sphere below 20 MeV gamma 1129.87 1.2493 1411.55 - case= 14 sphere below 20 MeV muon 0.62 4.06467 2.5201 - case= 15 sphere below 20 MeV neutrino 0.13 14.2915 1.85789 - case= 16 sphere below 20 MeV pion 0.17 11.0655 1.88113 - case= 17 sphere below 20 MeV neutron 56.64 3.59769 203.773 - case= 18 sphere below 20 MeV proton 8.19 8.10255 66.3599 - case= 19 sphere below 20 MeV ion 126.8 0.68327 86.6386 - case= 20 sphere below 20 MeV otherMeson 0 0 0 - case= 21 sphere below 20 MeV otherBaryon 0.01 11.8161 0.118161 - case= 22 sphere above 20 MeV all 171.22 703.389 120434 - case= 23 sphere above 20 MeV electron 60.2 225.071 13549.3 - case= 24 sphere above 20 MeV gamma 70.46 252.325 17778.8 - case= 25 sphere above 20 MeV muon 0.09 251.294 22.6165 - case= 26 sphere above 20 MeV neutrino 1.87 36.9224 69.0449 - case= 27 sphere above 20 MeV pion 14.39 5449.42 78417.1 - case= 28 sphere above 20 MeV neutron 13.16 189.224 2490.18 - case= 29 sphere above 20 MeV proton 8.08 262.786 2123.31 - case= 30 sphere above 20 MeV ion 1.39 47.2081 65.6192 - case= 31 sphere above 20 MeV otherMeson 1.25 4141.56 5176.95 - case= 32 sphere above 20 MeV otherBaryon 0.33 2246.3 741.279 + case= 0 sphere all 5173.14 23.8423 123339 + case= 1 sphere electron 3818.05 4.18573 15981.3 + case= 2 sphere gamma 1130.34 18.2844 20667.6 + case= 3 sphere muon 0.44 62.7549 27.6121 + case= 4 sphere neutrino 1.2 39.2512 47.1015 + case= 5 sphere pion 13.26 5657.82 75022.7 + case= 6 sphere neutron 67.48 37.7272 2545.83 + case= 7 sphere proton 15.76 130.667 2059.31 + case= 8 sphere ion 125 1.4069 175.862 + case= 9 sphere otherMeson 1.44 4631.52 6669.39 + case= 10 sphere otherBaryon 0.17 839.882 142.78 + case= 11 sphere below 20 MeV all 5008.28 0.65317 3271.26 + case= 12 sphere below 20 MeV electron 3760.32 0.424868 1597.64 + case= 13 sphere below 20 MeV gamma 1061.69 1.25681 1334.34 + case= 14 sphere below 20 MeV muon 0.36 4.54088 1.63472 + case= 15 sphere below 20 MeV neutrino 0.11 13.5301 1.48831 + case= 16 sphere below 20 MeV pion 0.12 8.66632 1.03996 + case= 17 sphere below 20 MeV neutron 54.47 3.52462 191.986 + case= 18 sphere below 20 MeV proton 7.84 8.22931 64.5178 + case= 19 sphere below 20 MeV ion 123.35 0.636839 78.5541 + case= 20 sphere below 20 MeV otherMeson 0.02 2.86451 0.0572902 + case= 21 sphere below 20 MeV otherBaryon 0 0 0 + case= 22 sphere above 20 MeV all 164.86 728.304 120068 + case= 23 sphere above 20 MeV electron 57.73 249.154 14383.7 + case= 24 sphere above 20 MeV gamma 68.65 281.62 19333.2 + case= 25 sphere above 20 MeV muon 0.08 324.718 25.9774 + case= 26 sphere above 20 MeV neutrino 1.09 41.8469 45.6132 + case= 27 sphere above 20 MeV pion 13.14 5709.41 75021.6 + case= 28 sphere above 20 MeV neutron 13.01 180.926 2353.85 + case= 29 sphere above 20 MeV proton 7.92 251.868 1994.79 + case= 30 sphere above 20 MeV ion 1.65 58.9746 97.3081 + case= 31 sphere above 20 MeV otherMeson 1.42 4696.72 6669.34 + case= 32 sphere above 20 MeV otherBaryon 0.17 839.882 142.78 ============================================================= @@ -1643,7 +1651,7 @@ Index : 5 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=40.710000s Real=41.063006s Sys=0.020000s + User=33.340000s Real=33.804640s Sys=0.020000s =============== Run::PrintInfo() =============== RunID = 4 @@ -1655,107 +1663,107 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 forward all 0.00319395 - case= 1 forward electron 6.69103e-05 - case= 2 forward gamma 0.00122383 - case= 3 forward muon 1.65809e-07 - case= 4 forward neutrino 0.000154483 - case= 5 forward pion 2.48886e-05 - case= 6 forward neutron 0.00171014 - case= 7 forward proton 1.09576e-05 - case= 8 forward ion 5.23484e-07 - case= 9 forward otherMeson 1.77304e-06 - case= 10 forward otherBaryon 2.75109e-07 - case= 11 backward all 0.000107431 + case= 0 forward all 0.00327939 + case= 1 forward electron 6.78494e-05 + case= 2 forward gamma 0.00127927 + case= 3 forward muon 1.58188e-07 + case= 4 forward neutrino 0.000166143 + case= 5 forward pion 2.04876e-05 + case= 6 forward neutron 0.00173464 + case= 7 forward proton 9.67284e-06 + case= 8 forward ion 0 + case= 9 forward otherMeson 1.00822e-06 + case= 10 forward otherBaryon 1.67853e-07 + case= 11 backward all 0.000101751 case= 12 backward electron 0 - case= 13 backward gamma 9.01436e-06 + case= 13 backward gamma 8.96887e-06 case= 14 backward muon 0 - case= 15 backward neutrino 6.31857e-05 + case= 15 backward neutrino 5.80116e-05 case= 16 backward pion 0 - case= 17 backward neutron 3.52306e-05 + case= 17 backward neutron 3.47709e-05 case= 18 backward proton 0 case= 19 backward ion 0 case= 20 backward otherMeson 0 case= 21 backward otherBaryon 0 - case= 22 below 20 MeV forward all 0.00283933 - case= 23 below 20 MeV forward electron 4.92606e-05 - case= 24 below 20 MeV forward gamma 0.00118256 + case= 22 below 20 MeV forward all 0.00290779 + case= 23 below 20 MeV forward electron 5.01545e-05 + case= 24 below 20 MeV forward gamma 0.0012276 case= 25 below 20 MeV forward muon 0 - case= 26 below 20 MeV forward neutrino 1.29769e-05 - case= 27 below 20 MeV forward pion 0 - case= 28 below 20 MeV forward neutron 0.00159388 - case= 29 below 20 MeV forward proton 6.52426e-07 + case= 26 below 20 MeV forward neutrino 1.27234e-05 + case= 27 below 20 MeV forward pion 2.16247e-07 + case= 28 below 20 MeV forward neutron 0.0016171 + case= 29 below 20 MeV forward proton 0 case= 30 below 20 MeV forward ion 0 case= 31 below 20 MeV forward otherMeson 0 case= 32 below 20 MeV forward otherBaryon 0 - case= 33 below 20 MeV backward all 4.86018e-05 + case= 33 below 20 MeV backward all 4.80926e-05 case= 34 below 20 MeV backward electron 0 - case= 35 below 20 MeV backward gamma 9.01436e-06 + case= 35 below 20 MeV backward gamma 8.96887e-06 case= 36 below 20 MeV backward muon 0 - case= 37 below 20 MeV backward neutrino 4.74431e-06 + case= 37 below 20 MeV backward neutrino 4.95993e-06 case= 38 below 20 MeV backward pion 0 - case= 39 below 20 MeV backward neutron 3.48431e-05 + case= 39 below 20 MeV backward neutron 3.41638e-05 case= 40 below 20 MeV backward proton 0 case= 41 below 20 MeV backward ion 0 case= 42 below 20 MeV backward otherMeson 0 case= 43 below 20 MeV backward otherBaryon 0 - case= 44 above 20 MeV forward all 0.000354619 - case= 45 above 20 MeV forward electron 1.76497e-05 - case= 46 above 20 MeV forward gamma 4.12731e-05 - case= 47 above 20 MeV forward muon 1.65809e-07 - case= 48 above 20 MeV forward neutrino 0.000141506 - case= 49 above 20 MeV forward pion 2.48886e-05 - case= 50 above 20 MeV forward neutron 0.000116259 - case= 51 above 20 MeV forward proton 1.03052e-05 - case= 52 above 20 MeV forward ion 5.23484e-07 - case= 53 above 20 MeV forward otherMeson 1.77304e-06 - case= 54 above 20 MeV forward otherBaryon 2.75109e-07 - case= 55 above 20 MeV backward all 5.88289e-05 + case= 44 above 20 MeV forward all 0.000371602 + case= 45 above 20 MeV forward electron 1.7695e-05 + case= 46 above 20 MeV forward gamma 5.16693e-05 + case= 47 above 20 MeV forward muon 1.58188e-07 + case= 48 above 20 MeV forward neutrino 0.00015342 + case= 49 above 20 MeV forward pion 2.02714e-05 + case= 50 above 20 MeV forward neutron 0.00011754 + case= 51 above 20 MeV forward proton 9.67284e-06 + case= 52 above 20 MeV forward ion 0 + case= 53 above 20 MeV forward otherMeson 1.00822e-06 + case= 54 above 20 MeV forward otherBaryon 1.67853e-07 + case= 55 above 20 MeV backward all 5.36588e-05 case= 56 above 20 MeV backward electron 0 case= 57 above 20 MeV backward gamma 0 case= 58 above 20 MeV backward muon 0 - case= 59 above 20 MeV backward neutrino 5.84414e-05 + case= 59 above 20 MeV backward neutrino 5.30517e-05 case= 60 above 20 MeV backward pion 0 - case= 61 above 20 MeV backward neutron 3.87492e-07 + case= 61 above 20 MeV backward neutron 6.07147e-07 case= 62 above 20 MeV backward proton 0 case= 63 above 20 MeV backward ion 0 case= 64 above 20 MeV backward otherMeson 0 case= 65 above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 sphere all 57326.5 5.18354 297154 - case= 1 sphere electron 42948.7 1.65412 71042.2 - case= 2 sphere gamma 12005.6 5.79405 69560.9 - case= 3 sphere muon 4.01 21.9471 88.0077 - case= 4 sphere neutrino 12.02 38.4372 462.016 - case= 5 sphere pion 48.75 2308.24 112527 - case= 6 sphere neutron 881.14 19.0447 16781 - case= 7 sphere proton 192.64 68.5403 13203.6 - case= 8 sphere ion 1228.5 0.914098 1122.97 - case= 9 sphere otherMeson 4.13 2779.04 11477.4 - case= 10 sphere otherBaryon 0.96 926.085 889.041 - case= 11 sphere below 20 MeV all 56313.1 0.650356 36623.6 - case= 12 sphere below 20 MeV electron 42553.1 0.442039 18810.1 - case= 13 sphere below 20 MeV gamma 11648.6 1.22865 14312.1 - case= 14 sphere below 20 MeV muon 3.63 4.20229 15.2543 - case= 15 sphere below 20 MeV neutrino 0.93 14.5243 13.5076 - case= 16 sphere below 20 MeV pion 0.88 11.6406 10.2437 - case= 17 sphere below 20 MeV neutron 765.69 2.53736 1942.83 - case= 18 sphere below 20 MeV proton 121.85 7.97705 972.004 - case= 19 sphere below 20 MeV ion 1218.12 0.447938 545.642 - case= 20 sphere below 20 MeV otherMeson 0.16 6.3178 1.01085 - case= 21 sphere below 20 MeV otherBaryon 0.07 11.3923 0.797464 - case= 22 sphere above 20 MeV all 1013.34 257.101 260531 - case= 23 sphere above 20 MeV electron 395.59 132.036 52232.1 - case= 24 sphere above 20 MeV gamma 356.93 154.789 55248.8 - case= 25 sphere above 20 MeV muon 0.38 191.456 72.7534 - case= 26 sphere above 20 MeV neutrino 11.09 40.4426 448.508 - case= 27 sphere above 20 MeV pion 47.87 2350.46 112517 - case= 28 sphere above 20 MeV neutron 115.45 128.525 14838.2 - case= 29 sphere above 20 MeV proton 70.79 172.787 12231.6 - case= 30 sphere above 20 MeV ion 10.38 55.6192 577.327 - case= 31 sphere above 20 MeV otherMeson 3.97 2890.79 11476.4 - case= 32 sphere above 20 MeV otherBaryon 0.89 998.027 888.244 + case= 0 sphere all 54005.9 5.30108 286289 + case= 1 sphere electron 40461 1.67866 67920 + case= 2 sphere gamma 11328.8 5.87279 66531.9 + case= 3 sphere muon 4.04 20.5037 82.8348 + case= 4 sphere neutrino 12.08 37.8028 456.658 + case= 5 sphere pion 46.13 2446.35 112850 + case= 6 sphere neutron 827.29 17.9433 14844.3 + case= 7 sphere proton 179.68 65.3734 11746.3 + case= 8 sphere ion 1142.01 0.862289 984.743 + case= 9 sphere otherMeson 3.88 2521.02 9781.57 + case= 10 sphere otherBaryon 0.99 1102.04 1091.02 + case= 11 sphere below 20 MeV all 53047.1 0.650731 34519.4 + case= 12 sphere below 20 MeV electron 40087 0.443285 17769.9 + case= 13 sphere below 20 MeV gamma 10991.5 1.2277 13494.3 + case= 14 sphere below 20 MeV muon 3.7 4.18147 15.4714 + case= 15 sphere below 20 MeV neutrino 0.96 15.1272 14.5221 + case= 16 sphere below 20 MeV pion 0.96 11.9358 11.4583 + case= 17 sphere below 20 MeV neutron 716.92 2.51009 1799.53 + case= 18 sphere below 20 MeV proton 113.06 8.04694 909.787 + case= 19 sphere below 20 MeV ion 1132.71 0.443271 502.097 + case= 20 sphere below 20 MeV otherMeson 0.26 4.75757 1.23697 + case= 21 sphere below 20 MeV otherBaryon 0.09 11.7345 1.05611 + case= 22 sphere above 20 MeV all 958.76 262.6 251770 + case= 23 sphere above 20 MeV electron 374 134.091 50150.1 + case= 24 sphere above 20 MeV gamma 337.32 157.232 53037.5 + case= 25 sphere above 20 MeV muon 0.34 198.127 67.3633 + case= 26 sphere above 20 MeV neutrino 11.12 39.7604 442.135 + case= 27 sphere above 20 MeV pion 45.17 2498.09 112839 + case= 28 sphere above 20 MeV neutron 110.37 118.192 13044.8 + case= 29 sphere above 20 MeV proton 66.62 162.661 10836.5 + case= 30 sphere above 20 MeV ion 9.3 51.8974 482.646 + case= 31 sphere above 20 MeV otherMeson 3.62 2701.75 9780.33 + case= 32 sphere above 20 MeV otherBaryon 0.9 1211.07 1089.97 ============================================================= @@ -1834,7 +1842,7 @@ Index : 6 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=39.360000s Real=39.700149s Sys=0.020000s + User=35.290000s Real=35.555977s Sys=0.020000s =============== Run::PrintInfo() =============== RunID = 5 @@ -1846,107 +1854,107 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 forward all 0.00135587 - case= 1 forward electron 1.95425e-05 - case= 2 forward gamma 0.000441026 - case= 3 forward muon 1.59255e-07 - case= 4 forward neutrino 0.000155345 - case= 5 forward pion 9.99067e-06 - case= 6 forward neutron 0.000723878 - case= 7 forward proton 4.6093e-06 + case= 0 forward all 0.00199554 + case= 1 forward electron 4.47201e-05 + case= 2 forward gamma 0.000941286 + case= 3 forward muon 3.1769e-07 + case= 4 forward neutrino 0.000181099 + case= 5 forward pion 1.00526e-05 + case= 6 forward neutron 0.000808649 + case= 7 forward proton 7.69638e-06 case= 8 forward ion 0 - case= 9 forward otherMeson 1.16606e-06 - case= 10 forward otherBaryon 1.57682e-07 - case= 11 backward all 6.03749e-05 + case= 9 forward otherMeson 1.32533e-06 + case= 10 forward otherBaryon 3.94428e-07 + case= 11 backward all 7.70551e-05 case= 12 backward electron 0 - case= 13 backward gamma 8.61426e-07 + case= 13 backward gamma 1.10255e-06 case= 14 backward muon 0 - case= 15 backward neutrino 5.65859e-05 + case= 15 backward neutrino 7.25961e-05 case= 16 backward pion 0 - case= 17 backward neutron 2.92757e-06 + case= 17 backward neutron 3.35649e-06 case= 18 backward proton 0 case= 19 backward ion 0 case= 20 backward otherMeson 0 case= 21 backward otherBaryon 0 - case= 22 below 20 MeV forward all 0.00109051 - case= 23 below 20 MeV forward electron 1.28694e-05 - case= 24 below 20 MeV forward gamma 0.000427236 + case= 22 below 20 MeV forward all 0.00166959 + case= 23 below 20 MeV forward electron 3.33539e-05 + case= 24 below 20 MeV forward gamma 0.000912311 case= 25 below 20 MeV forward muon 0 - case= 26 below 20 MeV forward neutrino 1.29897e-05 - case= 27 below 20 MeV forward pion 1.60907e-07 - case= 28 below 20 MeV forward neutron 0.000637039 - case= 29 below 20 MeV forward proton 2.18186e-07 + case= 26 below 20 MeV forward neutrino 1.58665e-05 + case= 27 below 20 MeV forward pion 0 + case= 28 below 20 MeV forward neutron 0.000708057 + case= 29 below 20 MeV forward proton 0 case= 30 below 20 MeV forward ion 0 case= 31 below 20 MeV forward otherMeson 0 case= 32 below 20 MeV forward otherBaryon 0 - case= 33 below 20 MeV backward all 7.25596e-06 + case= 33 below 20 MeV backward all 9.59455e-06 case= 34 below 20 MeV backward electron 0 - case= 35 below 20 MeV backward gamma 8.61426e-07 + case= 35 below 20 MeV backward gamma 1.10255e-06 case= 36 below 20 MeV backward muon 0 - case= 37 below 20 MeV backward neutrino 3.46697e-06 + case= 37 below 20 MeV backward neutrino 5.45355e-06 case= 38 below 20 MeV backward pion 0 - case= 39 below 20 MeV backward neutron 2.92757e-06 + case= 39 below 20 MeV backward neutron 3.03845e-06 case= 40 below 20 MeV backward proton 0 case= 41 below 20 MeV backward ion 0 case= 42 below 20 MeV backward otherMeson 0 case= 43 below 20 MeV backward otherBaryon 0 - case= 44 above 20 MeV forward all 0.00026536 - case= 45 above 20 MeV forward electron 6.67306e-06 - case= 46 above 20 MeV forward gamma 1.37895e-05 - case= 47 above 20 MeV forward muon 1.59255e-07 - case= 48 above 20 MeV forward neutrino 0.000142355 - case= 49 above 20 MeV forward pion 9.82976e-06 - case= 50 above 20 MeV forward neutron 8.68385e-05 - case= 51 above 20 MeV forward proton 4.39111e-06 + case= 44 above 20 MeV forward all 0.000325952 + case= 45 above 20 MeV forward electron 1.13663e-05 + case= 46 above 20 MeV forward gamma 2.89746e-05 + case= 47 above 20 MeV forward muon 3.1769e-07 + case= 48 above 20 MeV forward neutrino 0.000165233 + case= 49 above 20 MeV forward pion 1.00526e-05 + case= 50 above 20 MeV forward neutron 0.000100591 + case= 51 above 20 MeV forward proton 7.69638e-06 case= 52 above 20 MeV forward ion 0 - case= 53 above 20 MeV forward otherMeson 1.16606e-06 - case= 54 above 20 MeV forward otherBaryon 1.57682e-07 - case= 55 above 20 MeV backward all 5.31189e-05 + case= 53 above 20 MeV forward otherMeson 1.32533e-06 + case= 54 above 20 MeV forward otherBaryon 3.94428e-07 + case= 55 above 20 MeV backward all 6.74606e-05 case= 56 above 20 MeV backward electron 0 case= 57 above 20 MeV backward gamma 0 case= 58 above 20 MeV backward muon 0 - case= 59 above 20 MeV backward neutrino 5.31189e-05 + case= 59 above 20 MeV backward neutrino 6.71426e-05 case= 60 above 20 MeV backward pion 0 - case= 61 above 20 MeV backward neutron 0 + case= 61 above 20 MeV backward neutron 3.1804e-07 case= 62 above 20 MeV backward proton 0 case= 63 above 20 MeV backward ion 0 case= 64 above 20 MeV backward otherMeson 0 case= 65 above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 sphere all 62498.7 4.9657 310350 - case= 1 sphere electron 46327.4 1.67789 77732.5 - case= 2 sphere gamma 13753.8 5.55623 76419.3 - case= 3 sphere muon 3.99 23.4711 93.6495 - case= 4 sphere neutrino 11.87 39.3898 467.557 - case= 5 sphere pion 47.08 2353.3 110793 - case= 6 sphere neutron 918.39 19.4758 17886.4 - case= 7 sphere proton 214.32 59.6845 12791.6 - case= 8 sphere ion 1216.28 0.894043 1087.41 - case= 9 sphere otherMeson 4.4 2743.48 12071.3 - case= 10 sphere otherBaryon 1.13 891.234 1007.09 - case= 11 sphere below 20 MeV all 61438.9 0.666393 40942.4 - case= 12 sphere below 20 MeV electron 45914.5 0.454363 20861.8 - case= 13 sphere below 20 MeV gamma 13379.9 1.21847 16303 - case= 14 sphere below 20 MeV muon 3.57 4.21564 15.0498 - case= 15 sphere below 20 MeV neutrino 0.92 14.2881 13.145 - case= 16 sphere below 20 MeV pion 0.67 12.0639 8.08278 - case= 17 sphere below 20 MeV neutron 794.21 2.6147 2076.62 - case= 18 sphere below 20 MeV proton 139.26 8.14139 1133.77 - case= 19 sphere below 20 MeV ion 1205.6 0.438444 528.588 - case= 20 sphere below 20 MeV otherMeson 0.23 8.70924 2.00312 - case= 21 sphere below 20 MeV otherBaryon 0.03 11.588 0.34764 - case= 22 sphere above 20 MeV all 1059.81 254.204 269407 - case= 23 sphere above 20 MeV electron 412.96 137.715 56870.7 - case= 24 sphere above 20 MeV gamma 373.88 160.79 60116.3 - case= 25 sphere above 20 MeV muon 0.42 187.142 78.5997 - case= 26 sphere above 20 MeV neutrino 10.95 41.4988 454.412 - case= 27 sphere above 20 MeV pion 46.41 2387.1 110785 - case= 28 sphere above 20 MeV neutron 124.18 127.313 15809.8 - case= 29 sphere above 20 MeV proton 75.06 155.313 11657.8 - case= 30 sphere above 20 MeV ion 10.68 52.3239 558.819 - case= 31 sphere above 20 MeV otherMeson 4.17 2894.32 12069.3 - case= 32 sphere above 20 MeV otherBaryon 1.1 915.224 1006.75 + case= 0 sphere all 64153.6 4.921 315700 + case= 1 sphere electron 47465.8 1.61527 76670.2 + case= 2 sphere gamma 14079.2 5.35374 75376.4 + case= 3 sphere muon 4.8 26.6801 128.065 + case= 4 sphere neutrino 14.36 38.0911 546.988 + case= 5 sphere pion 50.17 2270.61 113916 + case= 6 sphere neutron 993.63 19.0292 18908 + case= 7 sphere proton 229.25 58.0924 13317.7 + case= 8 sphere ion 1310.42 0.969264 1270.14 + case= 9 sphere otherMeson 4.96 2822.63 14000.2 + case= 10 sphere otherBaryon 1.08 1449.86 1565.84 + case= 11 sphere below 20 MeV all 63067.4 0.667442 42093.8 + case= 12 sphere below 20 MeV electron 47050.5 0.451866 21260.5 + case= 13 sphere below 20 MeV gamma 13702.8 1.22093 16730.3 + case= 14 sphere below 20 MeV muon 4.35 4.11981 17.9212 + case= 15 sphere below 20 MeV neutrino 1.22 14.4181 17.5901 + case= 16 sphere below 20 MeV pion 1.01 12.2657 12.3884 + case= 17 sphere below 20 MeV neutron 859.41 2.63469 2264.28 + case= 18 sphere below 20 MeV proton 149.48 8.12927 1215.16 + case= 19 sphere below 20 MeV ion 1298.43 0.442468 574.514 + case= 20 sphere below 20 MeV otherMeson 0.15 4.5062 0.67593 + case= 21 sphere below 20 MeV otherBaryon 0.06 8.24736 0.494842 + case= 22 sphere above 20 MeV all 1086.18 251.898 273606 + case= 23 sphere above 20 MeV electron 415.27 133.43 55409.6 + case= 24 sphere above 20 MeV gamma 376.35 155.829 58646.1 + case= 25 sphere above 20 MeV muon 0.45 244.763 110.143 + case= 26 sphere above 20 MeV neutrino 13.14 40.2891 529.398 + case= 27 sphere above 20 MeV pion 49.16 2317.01 113904 + case= 28 sphere above 20 MeV neutron 134.22 124.003 16643.7 + case= 29 sphere above 20 MeV proton 79.77 151.718 12102.5 + case= 30 sphere above 20 MeV ion 11.99 58.0175 695.629 + case= 31 sphere above 20 MeV otherMeson 4.81 2910.51 13999.6 + case= 32 sphere above 20 MeV otherBaryon 1.02 1534.66 1565.35 ============================================================= @@ -2030,7 +2038,7 @@ Index : 7 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=111.850000s Real=112.922000s Sys=0.100000s + User=99.000000s Real=100.327214s Sys=0.070000s =============== Run::PrintInfo() =============== RunID = 6 @@ -2042,66 +2050,66 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 forward all 0.000240221 + case= 0 forward all 0.00029993 case= 1 forward electron 0 - case= 2 forward gamma 1.51614e-05 + case= 2 forward gamma 2.456e-05 case= 3 forward muon 0 - case= 4 forward neutrino 0.000129451 - case= 5 forward pion 6.4463e-07 - case= 6 forward neutron 9.47753e-05 - case= 7 forward proton 1.88567e-07 + case= 4 forward neutrino 0.000127808 + case= 5 forward pion 1.68434e-07 + case= 6 forward neutron 0.000146777 + case= 7 forward proton 6.17514e-07 case= 8 forward ion 0 case= 9 forward otherMeson 0 case= 10 forward otherBaryon 0 - case= 11 backward all 7.37212e-05 + case= 11 backward all 7.47249e-05 case= 12 backward electron 0 case= 13 backward gamma 0 case= 14 backward muon 0 - case= 15 backward neutrino 7.35394e-05 + case= 15 backward neutrino 7.47249e-05 case= 16 backward pion 0 - case= 17 backward neutron 1.81823e-07 + case= 17 backward neutron 0 case= 18 backward proton 0 case= 19 backward ion 0 case= 20 backward otherMeson 0 case= 21 backward otherBaryon 0 - case= 22 below 20 MeV forward all 0.000113725 + case= 22 below 20 MeV forward all 0.000170759 case= 23 below 20 MeV forward electron 0 - case= 24 below 20 MeV forward gamma 1.50038e-05 + case= 24 below 20 MeV forward gamma 2.4182e-05 case= 25 below 20 MeV forward muon 0 - case= 26 below 20 MeV forward neutrino 1.17637e-05 + case= 26 below 20 MeV forward neutrino 8.4309e-06 case= 27 below 20 MeV forward pion 0 - case= 28 below 20 MeV forward neutron 8.69571e-05 + case= 28 below 20 MeV forward neutron 0.000138146 case= 29 below 20 MeV forward proton 0 case= 30 below 20 MeV forward ion 0 case= 31 below 20 MeV forward otherMeson 0 case= 32 below 20 MeV forward otherBaryon 0 - case= 33 below 20 MeV backward all 6.4283e-06 + case= 33 below 20 MeV backward all 8.83155e-06 case= 34 below 20 MeV backward electron 0 case= 35 below 20 MeV backward gamma 0 case= 36 below 20 MeV backward muon 0 - case= 37 below 20 MeV backward neutrino 6.24648e-06 + case= 37 below 20 MeV backward neutrino 8.83155e-06 case= 38 below 20 MeV backward pion 0 - case= 39 below 20 MeV backward neutron 1.81823e-07 + case= 39 below 20 MeV backward neutron 0 case= 40 below 20 MeV backward proton 0 case= 41 below 20 MeV backward ion 0 case= 42 below 20 MeV backward otherMeson 0 case= 43 below 20 MeV backward otherBaryon 0 - case= 44 above 20 MeV forward all 0.000126496 + case= 44 above 20 MeV forward all 0.000129172 case= 45 above 20 MeV forward electron 0 - case= 46 above 20 MeV forward gamma 1.57602e-07 + case= 46 above 20 MeV forward gamma 3.77935e-07 case= 47 above 20 MeV forward muon 0 - case= 48 above 20 MeV forward neutrino 0.000117687 - case= 49 above 20 MeV forward pion 6.4463e-07 - case= 50 above 20 MeV forward neutron 7.81822e-06 - case= 51 above 20 MeV forward proton 1.88567e-07 + case= 48 above 20 MeV forward neutrino 0.000119377 + case= 49 above 20 MeV forward pion 1.68434e-07 + case= 50 above 20 MeV forward neutron 8.63068e-06 + case= 51 above 20 MeV forward proton 6.17514e-07 case= 52 above 20 MeV forward ion 0 case= 53 above 20 MeV forward otherMeson 0 case= 54 above 20 MeV forward otherBaryon 0 - case= 55 above 20 MeV backward all 6.72929e-05 + case= 55 above 20 MeV backward all 6.58934e-05 case= 56 above 20 MeV backward electron 0 case= 57 above 20 MeV backward gamma 0 case= 58 above 20 MeV backward muon 0 - case= 59 above 20 MeV backward neutrino 6.72929e-05 + case= 59 above 20 MeV backward neutrino 6.58934e-05 case= 60 above 20 MeV backward pion 0 case= 61 above 20 MeV backward neutron 0 case= 62 above 20 MeV backward proton 0 @@ -2110,39 +2118,39 @@ Run Summary case= 65 above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 sphere all 74665.4 4.12045 307655 - case= 1 sphere electron 43733 1.74797 76443.8 - case= 2 sphere gamma 22940.6 3.40242 78053.7 - case= 3 sphere muon 4.13 22.1208 91.3591 - case= 4 sphere neutrino 12.4 38.2142 473.856 - case= 5 sphere pion 45.32 2318.68 105082 - case= 6 sphere neutron 3831.19 5.77977 22143.4 - case= 7 sphere proton 135.67 87.4314 11861.8 - case= 8 sphere ion 3957.94 0.395128 1563.89 - case= 9 sphere otherMeson 4 2751.64 11006.6 - case= 10 sphere otherBaryon 1.15 812.492 934.366 - case= 11 sphere below 20 MeV all 73587.9 0.85183 62684.3 - case= 12 sphere below 20 MeV electron 43351.1 0.674675 29247.9 - case= 13 sphere below 20 MeV gamma 22579.3 1.22363 27628.7 - case= 14 sphere below 20 MeV muon 3.74 4.16023 15.5592 - case= 15 sphere below 20 MeV neutrino 1.1 14.5626 16.0189 - case= 16 sphere below 20 MeV pion 1 12.4843 12.4843 - case= 17 sphere below 20 MeV neutron 3664.06 1.27392 4667.71 - case= 18 sphere below 20 MeV proton 48.91 12.5305 612.868 - case= 19 sphere below 20 MeV ion 3938.27 0.122074 480.76 - case= 20 sphere below 20 MeV otherMeson 0.28 5.30281 1.48479 - case= 21 sphere below 20 MeV otherBaryon 0.09 8.72237 0.785014 - case= 22 sphere above 20 MeV all 1077.52 227.347 244971 - case= 23 sphere above 20 MeV electron 381.87 123.591 47195.9 - case= 24 sphere above 20 MeV gamma 361.3 139.565 50424.9 - case= 25 sphere above 20 MeV muon 0.39 194.359 75.7998 - case= 26 sphere above 20 MeV neutrino 11.3 40.5166 457.837 - case= 27 sphere above 20 MeV pion 44.32 2370.71 105070 - case= 28 sphere above 20 MeV neutron 167.13 104.563 17475.7 - case= 29 sphere above 20 MeV proton 86.76 129.656 11248.9 - case= 30 sphere above 20 MeV ion 19.67 55.0652 1083.13 - case= 31 sphere above 20 MeV otherMeson 3.72 2958.35 11005.1 - case= 32 sphere above 20 MeV otherBaryon 1.06 880.737 933.581 + case= 0 sphere all 74673.9 4.07414 304232 + case= 1 sphere electron 43669.6 1.70213 74331.4 + case= 2 sphere gamma 22906.3 3.31609 75959.4 + case= 3 sphere muon 4.1 16.7552 68.6963 + case= 4 sphere neutrino 12.29 37.8939 465.716 + case= 5 sphere pion 46.39 2272.07 105401 + case= 6 sphere neutron 3883.51 5.70554 22157.5 + case= 7 sphere proton 137.94 96.1955 13269.2 + case= 8 sphere ion 4008.6 0.380886 1526.82 + case= 9 sphere otherMeson 4.14 2380.79 9856.45 + case= 10 sphere otherBaryon 1.08 1106.55 1195.08 + case= 11 sphere below 20 MeV all 73604.8 0.849776 62547.5 + case= 12 sphere below 20 MeV electron 43294.3 0.671976 29092.8 + case= 13 sphere below 20 MeV gamma 22552.5 1.22323 27587 + case= 14 sphere below 20 MeV muon 3.77 4.15078 15.6484 + case= 15 sphere below 20 MeV neutrino 1.06 14.5005 15.3705 + case= 16 sphere below 20 MeV pion 1.05 12.8057 13.446 + case= 17 sphere below 20 MeV neutron 3713.33 1.27579 4737.42 + case= 18 sphere below 20 MeV proton 48.57 12.4966 606.962 + case= 19 sphere below 20 MeV ion 3989.81 0.119487 476.732 + case= 20 sphere below 20 MeV otherMeson 0.25 4.64066 1.16017 + case= 21 sphere below 20 MeV otherBaryon 0.1 10.7838 1.07838 + case= 22 sphere above 20 MeV all 1069.16 226.05 241684 + case= 23 sphere above 20 MeV electron 375.23 120.562 45238.7 + case= 24 sphere above 20 MeV gamma 353.82 136.715 48372.4 + case= 25 sphere above 20 MeV muon 0.33 160.751 53.0478 + case= 26 sphere above 20 MeV neutrino 11.23 40.102 450.346 + case= 27 sphere above 20 MeV pion 45.34 2324.39 105388 + case= 28 sphere above 20 MeV neutron 170.18 102.363 17420.1 + case= 29 sphere above 20 MeV proton 89.37 141.683 12662.2 + case= 30 sphere above 20 MeV ion 18.79 55.8855 1050.09 + case= 31 sphere above 20 MeV otherMeson 3.89 2533.49 9855.29 + case= 32 sphere above 20 MeV otherBaryon 0.98 1218.37 1194 ============================================================= @@ -2231,7 +2239,7 @@ Index : 8 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=111.830000s Real=112.782035s Sys=0.050000s + User=101.730000s Real=102.696021s Sys=0.040000s =============== Run::PrintInfo() =============== RunID = 7 @@ -2243,107 +2251,107 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 forward all 0.0145794 - case= 1 forward electron 8.30243e-06 - case= 2 forward gamma 0.000303785 - case= 3 forward muon 3.89495e-07 - case= 4 forward neutrino 0.000134047 - case= 5 forward pion 9.07118e-06 - case= 6 forward neutron 0.0141167 - case= 7 forward proton 6.10049e-06 - case= 8 forward ion 1.62536e-07 - case= 9 forward otherMeson 8.38902e-07 + case= 0 forward all 0.0148405 + case= 1 forward electron 1.20876e-05 + case= 2 forward gamma 0.000231967 + case= 3 forward muon 1.95626e-07 + case= 4 forward neutrino 0.000122333 + case= 5 forward pion 7.39865e-06 + case= 6 forward neutron 0.0144588 + case= 7 forward proton 6.17415e-06 + case= 8 forward ion 1.88354e-07 + case= 9 forward otherMeson 1.30818e-06 case= 10 forward otherBaryon 0 - case= 11 backward all 0.00250829 - case= 12 backward electron 0 - case= 13 backward gamma 8.5345e-06 + case= 11 backward all 0.00265552 + case= 12 backward electron 5.57545e-07 + case= 13 backward gamma 7.66371e-06 case= 14 backward muon 0 - case= 15 backward neutrino 5.90444e-05 + case= 15 backward neutrino 6.82188e-05 case= 16 backward pion 0 - case= 17 backward neutron 0.00244071 + case= 17 backward neutron 0.00257908 case= 18 backward proton 0 case= 19 backward ion 0 case= 20 backward otherMeson 0 case= 21 backward otherBaryon 0 - case= 22 below 20 MeV forward all 0.0143293 - case= 23 below 20 MeV forward electron 7.38355e-06 - case= 24 below 20 MeV forward gamma 0.000299807 + case= 22 below 20 MeV forward all 0.014613 + case= 23 below 20 MeV forward electron 1.04385e-05 + case= 24 below 20 MeV forward gamma 0.00022863 case= 25 below 20 MeV forward muon 0 - case= 26 below 20 MeV forward neutrino 1.10936e-05 + case= 26 below 20 MeV forward neutrino 1.00697e-05 case= 27 below 20 MeV forward pion 0 - case= 28 below 20 MeV forward neutron 0.0140107 - case= 29 below 20 MeV forward proton 3.32369e-07 - case= 30 below 20 MeV forward ion 0 + case= 28 below 20 MeV forward neutron 0.0143632 + case= 29 below 20 MeV forward proton 4.43819e-07 + case= 30 below 20 MeV forward ion 1.88354e-07 case= 31 below 20 MeV forward otherMeson 0 case= 32 below 20 MeV forward otherBaryon 0 - case= 33 below 20 MeV backward all 0.00245446 - case= 34 below 20 MeV backward electron 0 - case= 35 below 20 MeV backward gamma 8.5345e-06 + case= 33 below 20 MeV backward all 0.00259278 + case= 34 below 20 MeV backward electron 5.57545e-07 + case= 35 below 20 MeV backward gamma 7.66371e-06 case= 36 below 20 MeV backward muon 0 - case= 37 below 20 MeV backward neutrino 6.04438e-06 + case= 37 below 20 MeV backward neutrino 6.43869e-06 case= 38 below 20 MeV backward pion 0 - case= 39 below 20 MeV backward neutron 0.00243988 + case= 39 below 20 MeV backward neutron 0.00257812 case= 40 below 20 MeV backward proton 0 case= 41 below 20 MeV backward ion 0 case= 42 below 20 MeV backward otherMeson 0 case= 43 below 20 MeV backward otherBaryon 0 - case= 44 above 20 MeV forward all 0.000250042 - case= 45 above 20 MeV forward electron 9.18877e-07 - case= 46 above 20 MeV forward gamma 3.97786e-06 - case= 47 above 20 MeV forward muon 3.89495e-07 - case= 48 above 20 MeV forward neutrino 0.000122953 - case= 49 above 20 MeV forward pion 9.07118e-06 - case= 50 above 20 MeV forward neutron 0.000105962 - case= 51 above 20 MeV forward proton 5.76812e-06 - case= 52 above 20 MeV forward ion 1.62536e-07 - case= 53 above 20 MeV forward otherMeson 8.38902e-07 + case= 44 above 20 MeV forward all 0.000227476 + case= 45 above 20 MeV forward electron 1.6491e-06 + case= 46 above 20 MeV forward gamma 3.33718e-06 + case= 47 above 20 MeV forward muon 1.95626e-07 + case= 48 above 20 MeV forward neutrino 0.000112263 + case= 49 above 20 MeV forward pion 7.39865e-06 + case= 50 above 20 MeV forward neutron 9.5594e-05 + case= 51 above 20 MeV forward proton 5.73033e-06 + case= 52 above 20 MeV forward ion 0 + case= 53 above 20 MeV forward otherMeson 1.30818e-06 case= 54 above 20 MeV forward otherBaryon 0 - case= 55 above 20 MeV backward all 5.38305e-05 + case= 55 above 20 MeV backward all 6.27368e-05 case= 56 above 20 MeV backward electron 0 case= 57 above 20 MeV backward gamma 0 case= 58 above 20 MeV backward muon 0 - case= 59 above 20 MeV backward neutrino 5.30001e-05 + case= 59 above 20 MeV backward neutrino 6.17802e-05 case= 60 above 20 MeV backward pion 0 - case= 61 above 20 MeV backward neutron 8.30489e-07 + case= 61 above 20 MeV backward neutron 9.566e-07 case= 62 above 20 MeV backward proton 0 case= 63 above 20 MeV backward ion 0 case= 64 above 20 MeV backward otherMeson 0 case= 65 above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 sphere all 51444.6 5.88323 302660 - case= 1 sphere electron 30426 2.48523 75615.5 - case= 2 sphere gamma 17402.5 4.39679 76515 - case= 3 sphere muon 3.71 25.111 93.1619 - case= 4 sphere neutrino 11.07 37.1215 410.935 - case= 5 sphere pion 41.87 2570.84 107641 - case= 6 sphere neutron 2098.42 9.05425 18999.6 - case= 7 sphere proton 114.51 98.3286 11259.6 - case= 8 sphere ion 1342.15 1.03848 1393.79 - case= 9 sphere otherMeson 3.44 2914.75 10026.7 - case= 10 sphere otherBaryon 0.96 733.962 704.604 - case= 11 sphere below 20 MeV all 50349.8 0.973254 49003.2 - case= 12 sphere below 20 MeV electron 30014.8 0.783907 23528.8 - case= 13 sphere below 20 MeV gamma 17013 1.21953 20747.9 - case= 14 sphere below 20 MeV muon 3.42 4.11981 14.0898 - case= 15 sphere below 20 MeV neutrino 1.01 15.068 15.2187 - case= 16 sphere below 20 MeV pion 0.73 11.9711 8.73893 - case= 17 sphere below 20 MeV neutron 1955.52 1.96203 3836.79 - case= 18 sphere below 20 MeV proton 37.82 12.5934 476.282 - case= 19 sphere below 20 MeV ion 1323.28 0.282195 373.422 - case= 20 sphere below 20 MeV otherMeson 0.17 5.59864 0.95177 - case= 21 sphere below 20 MeV otherBaryon 0.08 12.0708 0.965667 - case= 22 sphere above 20 MeV all 1094.71 231.711 253657 - case= 23 sphere above 20 MeV electron 411.15 126.685 52086.7 - case= 24 sphere above 20 MeV gamma 389.46 143.191 55767.1 - case= 25 sphere above 20 MeV muon 0.29 272.663 79.0721 - case= 26 sphere above 20 MeV neutrino 10.06 39.3356 395.716 - case= 27 sphere above 20 MeV pion 41.14 2616.24 107632 - case= 28 sphere above 20 MeV neutron 142.9 106.108 15162.8 - case= 29 sphere above 20 MeV proton 76.69 140.609 10783.3 - case= 30 sphere above 20 MeV ion 18.87 54.0737 1020.37 - case= 31 sphere above 20 MeV otherMeson 3.27 3065.99 10025.8 - case= 32 sphere above 20 MeV otherBaryon 0.88 799.589 703.638 + case= 0 sphere all 52877.2 5.76119 304636 + case= 1 sphere electron 31245.1 2.47438 77312.4 + case= 2 sphere gamma 17845.7 4.38359 78228.2 + case= 3 sphere muon 3.74 18.7562 70.1481 + case= 4 sphere neutrino 11.15 37.3188 416.105 + case= 5 sphere pion 43.24 2407.11 104083 + case= 6 sphere neutron 2197.74 8.68818 19094.4 + case= 7 sphere proton 115.33 94.6177 10912.3 + case= 8 sphere ion 1410.2 1.07391 1514.43 + case= 9 sphere otherMeson 3.91 2938.2 11488.4 + case= 10 sphere otherBaryon 1.11 1366.02 1516.28 + case= 11 sphere below 20 MeV all 51757.5 0.969791 50194 + case= 12 sphere below 20 MeV electron 30827.6 0.780943 24074.6 + case= 13 sphere below 20 MeV gamma 17449.7 1.21727 21240.9 + case= 14 sphere below 20 MeV muon 3.44 4.15476 14.2924 + case= 15 sphere below 20 MeV neutrino 0.94 14.5471 13.6743 + case= 16 sphere below 20 MeV pion 0.85 11.6678 9.91764 + case= 17 sphere below 20 MeV neutron 2049.74 1.95267 4002.47 + case= 18 sphere below 20 MeV proton 37.06 12.6469 468.693 + case= 19 sphere below 20 MeV ion 1387.83 0.264052 366.459 + case= 20 sphere below 20 MeV otherMeson 0.28 5.93031 1.66049 + case= 21 sphere below 20 MeV otherBaryon 0.11 12.1818 1.34 + case= 22 sphere above 20 MeV all 1119.73 227.235 254442 + case= 23 sphere above 20 MeV electron 417.51 127.513 53237.8 + case= 24 sphere above 20 MeV gamma 396.05 143.889 56987.3 + case= 25 sphere above 20 MeV muon 0.3 186.186 55.8557 + case= 26 sphere above 20 MeV neutrino 10.21 39.4154 402.431 + case= 27 sphere above 20 MeV pion 42.39 2455.14 104074 + case= 28 sphere above 20 MeV neutron 148 101.972 15091.9 + case= 29 sphere above 20 MeV proton 78.27 133.43 10443.6 + case= 30 sphere above 20 MeV ion 22.37 51.3174 1147.97 + case= 31 sphere above 20 MeV otherMeson 3.63 3164.38 11486.7 + case= 32 sphere above 20 MeV otherBaryon 1 1514.94 1514.94 ============================================================= @@ -2437,7 +2445,7 @@ Index : 9 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=64.560000s Real=65.095098s Sys=0.030000s + User=51.480000s Real=51.974546s Sys=0.020000s =============== Run::PrintInfo() =============== RunID = 8 @@ -2449,110 +2457,110 @@ Run Summary Number of events = 100 Conversion factor: fluence from mm^-2 to cm^-2 = 100 Particle fluence in unit of cm^-2 : - case= 0 forward all 0.00294123 - case= 1 forward electron 2.68513e-05 - case= 2 forward gamma 0.00058285 - case= 3 forward muon 0 - case= 4 forward neutrino 0.000175808 - case= 5 forward pion 2.15098e-05 - case= 6 forward neutron 0.00212274 - case= 7 forward proton 1.00895e-05 - case= 8 forward ion 2.44756e-07 - case= 9 forward otherMeson 1.13259e-06 + case= 0 forward all 0.00327114 + case= 1 forward electron 3.08162e-05 + case= 2 forward gamma 0.000646377 + case= 3 forward muon 5.40443e-07 + case= 4 forward neutrino 0.000159064 + case= 5 forward pion 2.06914e-05 + case= 6 forward neutron 0.0024023 + case= 7 forward proton 9.85684e-06 + case= 8 forward ion 0 + case= 9 forward otherMeson 1.49605e-06 case= 10 forward otherBaryon 0 - case= 11 backward all 9.71323e-05 + case= 11 backward all 8.78513e-05 case= 12 backward electron 0 - case= 13 backward gamma 3.73285e-06 + case= 13 backward gamma 1.47124e-06 case= 14 backward muon 0 - case= 15 backward neutrino 6.85251e-05 + case= 15 backward neutrino 6.57407e-05 case= 16 backward pion 0 - case= 17 backward neutron 2.48743e-05 + case= 17 backward neutron 2.06394e-05 case= 18 backward proton 0 case= 19 backward ion 0 case= 20 backward otherMeson 0 case= 21 backward otherBaryon 0 - case= 22 below 20 MeV forward all 0.0025593 - case= 23 below 20 MeV forward electron 2.0262e-05 - case= 24 below 20 MeV forward gamma 0.000566857 + case= 22 below 20 MeV forward all 0.00291236 + case= 23 below 20 MeV forward electron 2.68794e-05 + case= 24 below 20 MeV forward gamma 0.000635316 case= 25 below 20 MeV forward muon 0 - case= 26 below 20 MeV forward neutrino 1.65922e-05 - case= 27 below 20 MeV forward pion 1.68402e-07 - case= 28 below 20 MeV forward neutron 0.00195542 - case= 29 below 20 MeV forward proton 0 + case= 26 below 20 MeV forward neutrino 1.47977e-05 + case= 27 below 20 MeV forward pion 0 + case= 28 below 20 MeV forward neutron 0.00223485 + case= 29 below 20 MeV forward proton 5.20716e-07 case= 30 below 20 MeV forward ion 0 case= 31 below 20 MeV forward otherMeson 0 case= 32 below 20 MeV forward otherBaryon 0 - case= 33 below 20 MeV backward all 3.0852e-05 + case= 33 below 20 MeV backward all 2.74069e-05 case= 34 below 20 MeV backward electron 0 - case= 35 below 20 MeV backward gamma 3.73285e-06 + case= 35 below 20 MeV backward gamma 1.47124e-06 case= 36 below 20 MeV backward muon 0 - case= 37 below 20 MeV backward neutrino 5.30344e-06 + case= 37 below 20 MeV backward neutrino 7.09849e-06 case= 38 below 20 MeV backward pion 0 - case= 39 below 20 MeV backward neutron 2.18157e-05 + case= 39 below 20 MeV backward neutron 1.88372e-05 case= 40 below 20 MeV backward proton 0 case= 41 below 20 MeV backward ion 0 case= 42 below 20 MeV backward otherMeson 0 case= 43 below 20 MeV backward otherBaryon 0 - case= 44 above 20 MeV forward all 0.000381923 - case= 45 above 20 MeV forward electron 6.58935e-06 - case= 46 above 20 MeV forward gamma 1.59926e-05 - case= 47 above 20 MeV forward muon 0 - case= 48 above 20 MeV forward neutrino 0.000159216 - case= 49 above 20 MeV forward pion 2.13414e-05 - case= 50 above 20 MeV forward neutron 0.000167317 - case= 51 above 20 MeV forward proton 1.00895e-05 - case= 52 above 20 MeV forward ion 2.44756e-07 - case= 53 above 20 MeV forward otherMeson 1.13259e-06 + case= 44 above 20 MeV forward all 0.000358785 + case= 45 above 20 MeV forward electron 3.93672e-06 + case= 46 above 20 MeV forward gamma 1.10608e-05 + case= 47 above 20 MeV forward muon 5.40443e-07 + case= 48 above 20 MeV forward neutrino 0.000144266 + case= 49 above 20 MeV forward pion 2.06914e-05 + case= 50 above 20 MeV forward neutron 0.000167457 + case= 51 above 20 MeV forward proton 9.33612e-06 + case= 52 above 20 MeV forward ion 0 + case= 53 above 20 MeV forward otherMeson 1.49605e-06 case= 54 above 20 MeV forward otherBaryon 0 - case= 55 above 20 MeV backward all 6.62802e-05 + case= 55 above 20 MeV backward all 6.04443e-05 case= 56 above 20 MeV backward electron 0 case= 57 above 20 MeV backward gamma 0 case= 58 above 20 MeV backward muon 0 - case= 59 above 20 MeV backward neutrino 6.32216e-05 + case= 59 above 20 MeV backward neutrino 5.86422e-05 case= 60 above 20 MeV backward pion 0 - case= 61 above 20 MeV backward neutron 3.05862e-06 + case= 61 above 20 MeV backward neutron 1.80218e-06 case= 62 above 20 MeV backward proton 0 case= 63 above 20 MeV backward ion 0 case= 64 above 20 MeV backward otherMeson 0 case= 65 above 20 MeV backward otherBaryon 0 ------------------------------------------------------------- Extra information: particle production [MeV] - case= 0 sphere all 58357.4 5.26387 307186 - case= 1 sphere electron 34648.2 2.26957 78636.7 - case= 2 sphere gamma 18260.5 4.3491 79416.6 - case= 3 sphere muon 4.46 18.4863 82.4488 - case= 4 sphere neutrino 13.32 37.4206 498.442 - case= 5 sphere pion 46.02 2324.27 106963 - case= 6 sphere neutron 1799.74 10.2379 18425.6 - case= 7 sphere proton 126.84 81.258 10306.8 - case= 8 sphere ion 3453.84 0.529362 1828.33 - case= 9 sphere otherMeson 3.6 2866.36 10318.9 - case= 10 sphere otherBaryon 0.91 779.889 709.699 - case= 11 sphere below 20 MeV all 57262.1 0.925805 53013.5 - case= 12 sphere below 20 MeV electron 34229.7 0.748557 25622.9 - case= 13 sphere below 20 MeV gamma 17864.6 1.26995 22687.1 - case= 14 sphere below 20 MeV muon 4.07 4.14717 16.879 - case= 15 sphere below 20 MeV neutrino 1.17 14.4795 16.9411 - case= 16 sphere below 20 MeV pion 0.83 11.2049 9.30005 - case= 17 sphere below 20 MeV neutron 1667.32 1.88464 3142.3 - case= 18 sphere below 20 MeV proton 56.12 9.59082 538.237 - case= 19 sphere below 20 MeV ion 3437.98 0.284329 977.516 - case= 20 sphere below 20 MeV otherMeson 0.2 7.4689 1.49378 - case= 21 sphere below 20 MeV otherBaryon 0.07 12.3399 0.863795 - case= 22 sphere above 20 MeV all 1095.34 232.049 254173 - case= 23 sphere above 20 MeV electron 418.52 126.67 53013.8 - case= 24 sphere above 20 MeV gamma 395.85 143.311 56729.5 - case= 25 sphere above 20 MeV muon 0.39 168.128 65.5699 - case= 26 sphere above 20 MeV neutrino 12.15 39.6297 481.501 - case= 27 sphere above 20 MeV pion 45.19 2366.75 106953 - case= 28 sphere above 20 MeV neutron 132.42 115.415 15283.3 - case= 29 sphere above 20 MeV proton 70.72 138.13 9768.53 - case= 30 sphere above 20 MeV ion 15.86 53.6453 850.815 - case= 31 sphere above 20 MeV otherMeson 3.4 3034.53 10317.4 - case= 32 sphere above 20 MeV otherBaryon 0.84 843.851 708.835 + case= 0 sphere all 56354.3 5.37457 302880 + case= 1 sphere electron 33433.1 2.27605 76095.5 + case= 2 sphere gamma 17633.8 4.3537 76772.2 + case= 3 sphere muon 4.1 21.0474 86.2944 + case= 4 sphere neutrino 12.24 36.1266 442.189 + case= 5 sphere pion 44.42 2422.33 107600 + case= 6 sphere neutron 1759 9.65267 16979 + case= 7 sphere proton 123.8 83.5376 10342 + case= 8 sphere ion 3339.33 0.538898 1799.56 + case= 9 sphere otherMeson 3.67 3291.36 12079.3 + case= 10 sphere otherBaryon 0.89 769.325 684.699 + case= 11 sphere below 20 MeV all 55290.3 0.924592 51121 + case= 12 sphere below 20 MeV electron 33025.9 0.746876 24666.2 + case= 13 sphere below 20 MeV gamma 17251.9 1.26726 21862.5 + case= 14 sphere below 20 MeV muon 3.8 4.15304 15.7815 + case= 15 sphere below 20 MeV neutrino 1.23 15.0952 18.5671 + case= 16 sphere below 20 MeV pion 0.92 12.1949 11.2193 + case= 17 sphere below 20 MeV neutron 1628.9 1.89091 3080.1 + case= 18 sphere below 20 MeV proton 54.84 9.52394 522.293 + case= 19 sphere below 20 MeV ion 3322.57 0.283451 941.787 + case= 20 sphere below 20 MeV otherMeson 0.21 5.82203 1.22263 + case= 21 sphere below 20 MeV otherBaryon 0.09 13.6439 1.22795 + case= 22 sphere above 20 MeV all 1064.02 236.612 251759 + case= 23 sphere above 20 MeV electron 407.22 126.294 51429.3 + case= 24 sphere above 20 MeV gamma 381.91 143.776 54909.6 + case= 25 sphere above 20 MeV muon 0.3 235.043 70.5129 + case= 26 sphere above 20 MeV neutrino 11.01 38.4761 423.622 + case= 27 sphere above 20 MeV pion 43.5 2473.3 107588 + case= 28 sphere above 20 MeV neutron 130.1 106.833 13898.9 + case= 29 sphere above 20 MeV proton 68.96 142.397 9819.67 + case= 30 sphere above 20 MeV ion 16.76 51.1797 857.773 + case= 31 sphere above 20 MeV otherMeson 3.46 3490.77 12078.1 + case= 32 sphere above 20 MeV otherBaryon 0.8 854.339 683.471 ============================================================= ================== Deleting memory pools =================== Number of memory pools allocated: 13 of which, static: 0 -Dynamic pools deleted: 13 / Total memory freed: 0.13 MB +Dynamic pools deleted: 13 / Total memory freed: 0.12 MB ============================================================ diff --git a/examples/extended/hadronic/ParticleFluence/Sphere/include/Run.hh b/examples/extended/hadronic/ParticleFluence/Sphere/include/Run.hh index 3e4d366f9c2..418f2643185 100644 --- a/examples/extended/hadronic/ParticleFluence/Sphere/include/Run.hh +++ b/examples/extended/hadronic/ParticleFluence/Sphere/include/Run.hh @@ -94,9 +94,9 @@ class Run : public G4Run { // Accessor methods useful to transfer information collected by the stepping-action // into this Run class - void SetTrackingArray1( const std::array< G4int, + void SetTrackingArray1( const std::array< G4long, TrackingAction::fkNumberCombinations >& inputArray ); - std::array< G4int, TrackingAction::fkNumberCombinations > GetTrackingArray1() const + std::array< G4long, TrackingAction::fkNumberCombinations > GetTrackingArray1() const { return fTrackingArray1; } void SetTrackingArray2( const std::array< G4double, TrackingAction::fkNumberCombinations >& inputArray ); @@ -113,7 +113,7 @@ class Run : public G4Run { G4String fTargetMaterialName; G4double fCubicVolumeScoringShell; std::array< G4double, SteppingAction::fkNumberCombinations > fSteppingArray; - std::array< G4int, TrackingAction::fkNumberCombinations > fTrackingArray1; + std::array< G4long, TrackingAction::fkNumberCombinations > fTrackingArray1; std::array< G4double, TrackingAction::fkNumberCombinations > fTrackingArray2; }; diff --git a/examples/extended/hadronic/ParticleFluence/Sphere/include/TrackingAction.hh b/examples/extended/hadronic/ParticleFluence/Sphere/include/TrackingAction.hh index 41476fceba9..22c2414d14f 100644 --- a/examples/extended/hadronic/ParticleFluence/Sphere/include/TrackingAction.hh +++ b/examples/extended/hadronic/ParticleFluence/Sphere/include/TrackingAction.hh @@ -81,7 +81,7 @@ class TrackingAction : public G4UserTrackingAction { private: Run* fRunPtr; // Pointer to the Run object - std::array< G4int, fkNumberCombinations > fArrayMultiplicities; + std::array< G4long, fkNumberCombinations > fArrayMultiplicities; std::array< G4double, fkNumberCombinations > fArraySumKineticEnergies; // Keep record of the number of particles and their kinetic energy at production, // according to the particle type and their kinetic energy range (below/above 20 MeV). diff --git a/examples/extended/hadronic/ParticleFluence/Sphere/src/Run.cc b/examples/extended/hadronic/ParticleFluence/Sphere/src/Run.cc index dc39c78ec74..5f0dfa6b96b 100644 --- a/examples/extended/hadronic/ParticleFluence/Sphere/src/Run.cc +++ b/examples/extended/hadronic/ParticleFluence/Sphere/src/Run.cc @@ -153,7 +153,7 @@ void Run::SetSteppingArray( const std::array< G4double, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void Run::SetTrackingArray1( const std::array< G4int, +void Run::SetTrackingArray1( const std::array< G4long, TrackingAction::fkNumberCombinations >& inputArray ) { for ( G4int i = 0; i < TrackingAction::fkNumberCombinations; ++i ) { fTrackingArray1[i] = inputArray[i]; diff --git a/examples/extended/hadronic/README b/examples/extended/hadronic/README index e788571ffcc..283c3c37276 100644 --- a/examples/extended/hadronic/README +++ b/examples/extended/hadronic/README @@ -93,6 +93,14 @@ 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. +FlukaCern +------------- +A set of 2 examples, demonstrating how to make use of +the interface to `FLUKA` hadron-nucleus inelastic physics in a G4 application. +The examples are at the process (interaction) level, but a physics list +(G4_HP_CernFLUKAHadronInelastic_PhysicsList) is also made available. +The interface to `FLUKA` itself is also included. + NeutronSource ------------- NeutronSource is an example of neutrons production. It illustrates the cooperative work diff --git a/examples/extended/medical/DICOM/run.out b/examples/extended/medical/DICOM/run.out index f2cf10fb172..368c8ee5d6a 100644 --- a/examples/extended/medical/DICOM/run.out +++ b/examples/extended/medical/DICOM/run.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -24,6 +24,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo 3 test file 3.g4dcm ReadMaterialIndices 10 <<< Geant4 Physics List simulation engine: Shielding +<<< (Note that Shielding and Shielding_HP are equivalent!) Default materials of the DICOM Extended examples have been used DicomDetectorConstruction::ReadPhantomDataFile opening file 1.g4dcm DicomDetectorConstruction::ReadPhantomDataFile opening file 1.g4dcm @@ -91,7 +92,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -264,7 +267,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -296,7 +299,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -328,7 +331,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -341,7 +344,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -404,7 +406,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -436,7 +438,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -468,7 +470,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -500,7 +502,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -532,7 +534,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV NeutronHP: /Capture file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Capture/CrossSection/6_nat_Carbon @@ -550,6 +552,7 @@ NeutronHP: /Elastic file for Z = 6, A = 12 is not found and NeutronHP will use / ProduceFissionFragments ? 1 UseWendtFissionModel ? 0 UseNRESP71Model ? 0 + UseDBRC ? 0 ======================================================= @@@ G4ParticleHPInelastic instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic @@ -583,7 +586,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -615,7 +618,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV ====================================================================== @@ -1048,12 +1051,21 @@ Threshold for very long decay time at rest 3.171e+10 y ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1246,7 +1258,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 100 - User=0.020000s Real=0.025726s Sys=0.010000s + User=0.010000s Real=0.058529s Sys=0.000000s --------------------End of Global Run----------------------- The run was 100 events LOCAL TOTAL DOSE : 0 Gy diff --git a/examples/extended/medical/DICOM2/run.out b/examples/extended/medical/DICOM2/run.out index 2c27a541d5f..2294696d3d2 100644 --- a/examples/extended/medical/DICOM2/run.out +++ b/examples/extended/medical/DICOM2/run.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -29,6 +29,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo 3 test file 3.g4dcm ReadMaterialIndices 10 <<< Geant4 Physics List simulation engine: Shielding +<<< (Note that Shielding and Shielding_HP are equivalent!) Default materials of the DICOM Extended examples have been used DicomDetectorConstruction::ReadPhantomDataFile opening file 1.g4dcm DicomDetectorConstruction::ReadPhantomDataFile opening file 1.g4dcm @@ -96,7 +97,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -269,7 +272,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -301,7 +304,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -333,7 +336,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -346,7 +349,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -409,7 +411,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -441,7 +443,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -473,7 +475,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -505,7 +507,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -537,7 +539,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV NeutronHP: /Capture file for Z = 6, A = 12 is not found and NeutronHP will use /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Capture/CrossSection/6_nat_Carbon @@ -555,6 +557,7 @@ NeutronHP: /Elastic file for Z = 6, A = 12 is not found and NeutronHP will use / ProduceFissionFragments ? 1 UseWendtFissionModel ? 0 UseNRESP71Model ? 0 + UseDBRC ? 0 ======================================================= @@@ G4ParticleHPInelastic instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic @@ -588,7 +591,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -620,7 +623,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV ====================================================================== @@ -1053,12 +1056,21 @@ Threshold for very long decay time at rest 3.171e+10 y ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1252,7 +1264,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 100 - User=0.030000s Real=0.038661s Sys=0.010000s + User=0.030000s Real=0.036015s Sys=0.010000s [=========================================================== DICOM ===========================================================] @@ -1294,5 +1306,5 @@ Number of memory pools allocated: 10 of which, static: 0 Dynamic pools deleted: 10 / Total memory freed: 0.041 MB ============================================================ -[/build/jenkins/workspace/examples/extended/medical/DICOM2/dicom2] Primary execution time: User=8.520000s Real=9.714942s Sys=0.530000s +[/build/jenkins/workspace/examples/extended/medical/DICOM2/dicom2] Primary execution time: User=7.880000s Real=10.121648s Sys=0.400000s diff --git a/examples/extended/medical/GammaTherapy/GammaTherapy.out b/examples/extended/medical/GammaTherapy/GammaTherapy.out index c1cdf5b4e01..d6c68d03472 100644 --- a/examples/extended/medical/GammaTherapy/GammaTherapy.out +++ b/examples/extended/medical/GammaTherapy/GammaTherapy.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -283,7 +283,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 10 GeV, 10 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 10 GeV @@ -315,7 +315,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 10 GeV, 10 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 10 GeV @@ -347,7 +347,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 10 GeV, 10 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 10 GeV @@ -360,7 +360,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 10 eV to 10 GeV in 90 bins Lambda tables from threshold to 10 GeV, 10 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 10 GeV @@ -406,7 +405,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 10 GeV, 10 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 10 GeV @@ -438,7 +437,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 10 GeV, 10 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 10 GeV @@ -470,7 +469,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 10 GeV @@ -502,7 +501,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 10 GeV, 10 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 10 GeV @@ -534,7 +533,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 10 GeV @@ -566,7 +565,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 10 GeV, 10 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 10 GeV @@ -598,7 +597,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 10 GeV @@ -662,7 +661,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 10000 - User=3.310000s Real=3.336512s Sys=0.000000s + User=2.810000s Real=2.884976s Sys=0.000000s Histo: End of run actions are started ======================================================== Number of events 10000 diff --git a/examples/extended/medical/History b/examples/extended/medical/History index 79f372c7e33..1fdc3e95534 100644 --- a/examples/extended/medical/History +++ b/examples/extended/medical/History @@ -1,12 +1,10 @@ # Example medical History See `CONTRIBUTING.rst` for details of **required** info/format for each entry, -which **must** added in reverse chronological order (newest at the top). -It must **not** be used as a substitute for writing good git commit messages! +which **must** added in reverse chronological order (newest at the top). It must **not** +be used as a substitute for writing good git commit messages! -------------------------------------------------------------------------------- - -## 2023-01-09 Ben Morgan (exMedical-V11-00-01) +## 2023-01-09 Ben Morgan (exMedical-V11-01-00) - Use PROJECT_ scoped _SOURCE/BINARY_DIR variables in place of CMAKE_ scope version to ease use of Geant4 as a CMake subproject. - Fixes [GitHub PR #52](https://github.com/Geant4/geant4/pull/52) diff --git a/examples/extended/medical/dna/.README.txt b/examples/extended/medical/dna/.README.txt index 61126a32f8c..d419611220c 100644 --- a/examples/extended/medical/dna/.README.txt +++ b/examples/extended/medical/dna/.README.txt @@ -45,7 +45,9 @@ This directory contains a set of Geant4-DNA examples. - \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. + - \link ExampleUHDR UHDR \endlink Ultra High Dose Rate. +Ultra High Dose Rate \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. diff --git a/examples/extended/medical/dna/AuNP/AuNP.out b/examples/extended/medical/dna/AuNP/AuNP.out index 286647bedaf..6bc20050fd0 100644 --- a/examples/extended/medical/dna/AuNP/AuNP.out +++ b/examples/extended/medical/dna/AuNP/AuNP.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 diff --git a/examples/extended/medical/dna/History b/examples/extended/medical/dna/History index 2bafe2570b7..57e8f957274 100644 --- a/examples/extended/medical/dna/History +++ b/examples/extended/medical/dna/History @@ -4,6 +4,8 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2022-05-04 Hoang Tran (exdna-V11-01-01) +- add dna example UHDR ## 2022-10-03 Hoang Tran (exdna-V11-00-02) - add dna example jetcounter diff --git a/examples/extended/medical/dna/README b/examples/extended/medical/dna/README index 530a296c755..955787b78de 100644 --- a/examples/extended/medical/dna/README +++ b/examples/extended/medical/dna/README @@ -69,6 +69,7 @@ This directory contains a set of Geant4-DNA examples. and LET. - scavenger Activation of the scavenging process in chemistry + - UHDR Ultra High Dose Rate Geometry and other diff --git a/examples/extended/medical/dna/UHDR/.README.txt b/examples/extended/medical/dna/UHDR/.README.txt new file mode 100644 index 00000000000..449e37d5b58 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/.README.txt @@ -0,0 +1,140 @@ + +///\file "medical/dna/UHDR/.README.txt" +///\brief Example (UHDR) Ultra High Dose Rate README page + +/*! \page UHDR Example + + +/*! \page ExampleUHDR Example scavenger + +\ 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 UHDR_s0 INTRODUCTION + + This example shows how to activate the mesoscopic model in chemistry and + combine with SBS model (Tran et al.,Int. J. Mol. Sci. 22 (2021) 6023). + It allows to simulate chemical reactions longtime (beyond 1 us) of post-irradiation. + + To run the example: +\verbatim +mkdir UHRD-build +cd UHRD-build +cmake ../pathToExamples/UHRD +make +\endverbatim + +In batch mode, the macro beam.in can be used as follows: + \verbatim + ./UHRD beam.in + \endverbatim + or + \verbatim + ./UHRD beam.in 123 + \endverbatim +# 123 is the user's seed number + +\section UHDR_s1 GEOMETRY DEFINITION + + + The world volume is a simple water box 3.2 x 3.2 x 3.2 um3 for 0.01Gy of cut-off + absorbed dose and 1.6 x 1.6 x 1.6 um3 for 1 Gy. + This example is only limited at these geometries for these geometries. + + 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. pH is defined as scavengers of H3O^1, OH^-1. + In this example, we consider that chemical molecules diffuse and react in a + bounded volume (that is, limited by geometrical boundaries) which is also + the irradiated water box volume of the physical stage. + The bouncing of chemical molecules on the volume border is applied + for both SBS and mesoscopic models. + The bouncing is not applied for physical stage. + +\section UHDR_s2 PHYSICS LIST + + PhysicsList is Geant4 modular physics list using G4EmDNAPhysics_option2 + and EmDNAChemistry constructors (the chemistry constructor uses the + Step-by-step method). + +\section UHDR_s3 CHEMISTRY WORLD + + This object is controlled by DetectorContruction. It defines the chemistry volume, + scavengers and pH of water. + +\section UHDR_s4 AN EVENT: PRIMARY GENERATOR + +This example utilizes the G4SingleParticleSource. +Each event consists of multiple incident particles. +A large number has been chosen to ensure that the stack remains non-empty until the desired +energy deposition is achieved (which is then converted to a cutoff dose). +With each /run/beamOn command, a group of particles is emitted. The cutoff dose +(dose threshold) determined by users. +The actual dose is calculated based on the real energy deposited in the volume. + +\section UHDR_s5 DETECTOR RESPONSE : Scorer + + There is one G4MultiFunctionalDetector object which computes the + energy deposition and the number of species along time in order to + extract the G-value: + (Number of species X) / (100 eV of deposited energy). + + 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. + +\section UHDR_s6 PULSE ACTION + +This functionality is not available for this version. + +\section UHDR_s7 OUTPUT + +G-value + +\section UHDR_s8 RELEVANT MACRO COMMANDS AND MACRO FILE + +The user macro file is: beam.in + +\section UHDR_s9 - REACTION BUILDER + + Reaction lists are collected by builders for specific applications. + ChemNO2_NO3ScavengerBuilder is to build the reaction list with NO2-/NO3-. + ChemPureWaterBuilder is to build the reaction list with pH. + ChemOxygenWaterBuilder is to build the reaction list with ROS. + ChemFrickeReactionBuilder is to build the reaction list of Fricke Dosimeter. + +\section SCAVENGER_s11 PLOT + +The information about all the molecular species is scored in a ROOT +(https://root.cern) ntuple file Dose_xxx.root (xxx is seed number). +The ROOT program plot_time.C +can be used to plot the G values vs time for each species. + +Execute plot_time as: +\verbatim +root plot_time.C +\endverbatim + +or print G values to scorer.txt +\verbatim +root plot_time.C > scorer.txt +\endverbatim + +The results show the molecular species (G values) as a function of +time (ns). Please correct the dose in the TTree *tree = (TTree *) dir->Get("0.010000"); + + + +*/ diff --git a/examples/extended/medical/dna/UHDR/CMakeLists.txt b/examples/extended/medical/dna/UHDR/CMakeLists.txt new file mode 100644 index 00000000000..9511c79fc6b --- /dev/null +++ b/examples/extended/medical/dna/UHDR/CMakeLists.txt @@ -0,0 +1,58 @@ +#---------------------------------------------------------------------------- +# Setup the project +cmake_minimum_required(VERSION 3.16...3.21) +project(UHDR) + +#---------------------------------------------------------------------------- +# Find Geant4 package, activating all available UI and Vis drivers by default +# You can set WITH_GEANT4_UIVIS to OFF via the command line or ccmake/cmake-gui +# to build a batch mode only executable +# +option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON) +if(WITH_GEANT4_UIVIS) + find_package(Geant4 REQUIRED ui_all vis_all) +else() + find_package(Geant4 REQUIRED) +endif() + +#---------------------------------------------------------------------------- +# Setup Geant4 include directories and compile definitions +# +include(${Geant4_USE_FILE}) + +#---------------------------------------------------------------------------- +# Locate sources and headers for this project +# +include_directories(${PROJECT_SOURCE_DIR}/include + ${Geant4_INCLUDE_DIR}) +file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) +file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) + +#---------------------------------------------------------------------------- +# Add the executable, and link it to the Geant4 libraries +# +add_executable(UHDR UHDR.cc ${sources} ${headers}) +target_link_libraries(UHDR ${Geant4_LIBRARIES} ) + +#---------------------------------------------------------------------------- +# Copy all scripts to the build directory, i.e. the directory in which we +# build DNA_appli. This is so that we can run the executable directly because it +# relies on these scripts being in the current working directory. +# +set(UHDR_SCRIPTS + beam.in plotG_time.C pulseShape.dat + ) + +foreach(_script ${UHDR_SCRIPTS}) + configure_file( + ${PROJECT_SOURCE_DIR}/${_script} + ${PROJECT_BINARY_DIR}/${_script} + COPYONLY + ) +endforeach() + +#---------------------------------------------------------------------------- +# Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX +# +install(TARGETS UHDR DESTINATION bin) + diff --git a/examples/extended/medical/dna/UHDR/History b/examples/extended/medical/dna/UHDR/History new file mode 100644 index 00000000000..91cfd51b744 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/History @@ -0,0 +1,9 @@ + + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + +## 2023-05-04 H Tran (UHDR-V11-01-00) +- first commit, example is created on base of chem6 diff --git a/examples/extended/medical/dna/UHDR/README b/examples/extended/medical/dna/UHDR/README new file mode 100644 index 00000000000..97f5ec7d558 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/README @@ -0,0 +1,132 @@ + ------------------------------------------------------------------- + + ========================================================= + Geant4 - an Object-Oriented Toolkit for Simulation in HEP + ========================================================= + + UHDR (Ultra High Dose Rate) + -------------------------- + 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 mesoscopic model in chemistry and + combine with SBS model (Tran et al.,Int. J. Mol. Sci. 22 (2021) 6023). + It allows to simulate chemical reactions longtime (beyond 1 us) of post-irradiation. + + To run the example: + mkdir UHRD-build + cd UHRD-build + cmake ../pathToExamples/UHRD + make + + In batch mode, the macro beam.in can be used as follows: + ./UHRD beam.in + or + ./UHRD beam.in 123 + # 123 is the user's seed number + + 1 - GEOMETRY DEFINITION + + The world volume is a simple water box 3.2 x 3.2 x 3.2 um3 for 0.01 Gy of cut-off + absorbed dose and 1.6 x 1.6 x 1.6 um3 for 1 Gy. + This example is limited at these geometries for these geometries only. + + 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. pH is defined as scavengers of H3O^1, OH^-1. + In this example, we consider that chemical molecules diffuse and react in a + bounded volume (that is, limited by geometrical boundaries) which is also + the irradiated water box volume of the physical stage. + The bouncing of chemical molecules on the volume border is applied + for both SBS and mesoscopic models. + The bouncing is not applied for physical stage. + + 2 - PHYSICS LIST + + PhysicsList is Geant4 modular physics list using G4EmDNAPhysics_option2 + and EmDNAChemistry constructors (the chemistry constructor uses the + Step-by-step method). + + 3 - CHEMISTRY WORLD + + This object is controlled by DetectorContruction. It defines the chemistry volume, + scavengers and pH of water. + + 4 - AN EVENT: THE PRIMARY GENERATOR + + This example utilizes the G4SingleParticleSource. + Each event consists of multiple incident particles. + A large number has been chosen to ensure that the stack remains non-empty until the desired + energy deposition is achieved (which is then converted to a cutoff dose). + With each /run/beamOn command, a group of particles is emitted. The cutoff dose + (dose threshold) determined by users. + The actual dose is calculated based on the real energy deposited in the volume. + + 5 - DETECTOR RESPONSE: Scorer + + There is one G4MultiFunctionalDetector object which computes the + energy deposition and the number of species along time in order to + extract the G-value: + (Number of species X) / (100 eV of deposited energy). + + 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. + + + 6 - PULSE ACTION + + This functionality is not available for this version. + + 7 - OUTPUT + + G-value + + 8 - RELEVANT MACRO COMMANDS AND MACRO FILE + + The user macro file is: beam.in + + 9 - REACTION BUILDER + + Reaction lists are collected by builders for specific applications. + ChemNO2_NO3ScavengerBuilder is to build the reaction list with NO2-/NO3-. + ChemPureWaterBuilder is to build the reaction list with pH. + ChemOxygenWaterBuilder is to build the reaction list with ROS. + ChemFrickeReactionBuilder is to build the reaction list of Fricke Dosimeter. + + 10 - PLOT + + The information about all the molecular species is scored in a ROOT + (https://root.cern) ntuple file Dose_xxx.root (xxx is seed number). + The ROOT program plot_time + can be used to plot the G values vs time for each species. + + Execute plot_time as: + \verbatim + root plot_time.C + \endverbatim + + or print G values to scorer.txt + \verbatim + root plot_time.C > scorer.txt + \endverbatim + + The results show the molecular species (G values) as a function of + time (ns). Please correct the dose in the TTree *tree = (TTree *) dir->Get("0.010000"); + + Funding: FNS Synergia grant MAGIC-FNS CRSII5_186369. + Contact: H. Tran (tran@lp2i.in2p3.fr) + CNRS, lp2i, UMR 5797, Université de Bordeaux, F-33170 Gradignan, France diff --git a/examples/extended/medical/dna/UHDR/UHDR.cc b/examples/extended/medical/dna/UHDR/UHDR.cc new file mode 100644 index 00000000000..bfec53ec97d --- /dev/null +++ b/examples/extended/medical/dna/UHDR/UHDR.cc @@ -0,0 +1,81 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +#include "ActionInitialization.hh" +#include "DetectorConstruction.hh" +#include "G4AnalysisManager.hh" +#include "G4RunManagerFactory.hh" +#include "G4UImanager.hh" +#include "G4VisExecutive.hh" +#include "PhysicsList.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +int main(int argc, char **argv) { + G4int seed(0); + if (argc > 2) { + seed = std::stoi(argv[2]); + long enterseed = seed; + G4Random::setTheSeed(enterseed); + G4Random::showEngineStatus(); + G4cout << "seed number : " << seed << G4endl; + } + auto runManager = G4RunManagerFactory::CreateRunManager(); + // Set mandatory initialization classes + + auto pDetector = new DetectorConstruction(); + runManager->SetUserInitialization(pDetector); + runManager->SetUserInitialization(new PhysicsList(pDetector)); + runManager->SetUserInitialization(new ActionInitialization(pDetector)); + + /// + G4AnalysisManager *analysisManager = G4AnalysisManager::Instance(); + analysisManager->SetDefaultFileType("root"); + analysisManager->SetNtupleDirectoryName("ntuple"); + // open output file + // + std::string name = "Dose_" + std::to_string(seed); + G4bool fileOpen = analysisManager->OpenFile(name); + if (!fileOpen) { + G4cout << "\n---> HistoManager::book(): cannot open " << name << G4endl; + return 0; + } + analysisManager->SetFirstNtupleId(1); + /////// + G4UImanager *UI = G4UImanager::GetUIpointer(); + if (argc > 1) // batch mode + { + G4String command = "/control/execute "; + G4String fileName = argv[1]; + UI->ApplyCommand(command + fileName); + } else { + UI->ApplyCommand("/control/execute beam.in"); + } + analysisManager->Write(); + analysisManager->CloseFile(); + delete runManager; + return 0; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/UHDR/UHDR.out b/examples/extended/medical/dna/UHDR/UHDR.out new file mode 100644 index 00000000000..c0dd9e834e8 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/UHDR.out @@ -0,0 +1,679 @@ +Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Forcing G4RunManager type... + + ############################################ + !!! WARNING - FPE detection is activated !!! + ############################################ + + + ################################ + !!! G4Backtrace is activated !!! + ################################ + + +************************************************************** + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) + Copyright : Geant4 Collaboration + References : NIM A 506 (2003), 250-303 + : IEEE-TNS 53 (2006), 270-278 + : NIM A 835 (2016), 186-225 + WWW : http://geant4.org/ +************************************************************** + +G4DNAScavengerMaterial existed but empty +DetectorConstruction::world_sizeXYZ : 3.2 um +G4SDManager::AddNewCollection : the collection is registered at 1 +G4SDManager::AddNewCollection : the collection is registered at 2 +New sensitive detector is registered at / +Number of chemical species involved in reactions = 16 +Reaction Reaction Rate [dm3/(mol*s)] +----------------------------------------------------------------------------------- +H3O^1 + OH^-1 -> No product 1.13e+11 +----------------------------------------------------------------------------------- +H3O^1 + e_aq^-1 -> H^0 2.11e+10 +----------------------------------------------------------------------------------- +H3O^1 + O_3^-1 -> OH^0 + O_2^0 9e+10 +----------------------------------------------------------------------------------- +H3O^1 + O_2^-1 -> HO_2^0 4.78e+10 +----------------------------------------------------------------------------------- +H3O^1 + HO_2^-1 -> H2O2^0 4.78e+10 +----------------------------------------------------------------------------------- +H3O^1 + O^-1 -> OH^0 4.78e+10 +----------------------------------------------------------------------------------- +OH^0 + H^0 -> No product 1.55e+10 +----------------------------------------------------------------------------------- +OH^0 + OH^0 -> H2O2^0 5.5e+09 +----------------------------------------------------------------------------------- +OH^0 + e_aq^-1 -> OH^-1 2.95e+10 +----------------------------------------------------------------------------------- +OH^0 + O_2^-1 -> O_2^0 + OH^-1 1.07e+10 +----------------------------------------------------------------------------------- +OH^0 + OH^-1 -> O^-1 1.27e+10 +----------------------------------------------------------------------------------- +OH^0 + HO_2^0 -> O_2^0 7.9e+09 +----------------------------------------------------------------------------------- +OH^0 + HO_2^-1 -> HO_2^0 + OH^-1 8.32e+09 +----------------------------------------------------------------------------------- +OH^0 + O^-1 -> HO_2^-1 1e+09 +----------------------------------------------------------------------------------- +OH^0 + O_3^-1 -> O_2^-1 + HO_2^0 8.5e+09 +----------------------------------------------------------------------------------- +OH^0 + H2O2^0 -> HO_2^0 2.88e+07 +----------------------------------------------------------------------------------- +OH^0 + H_2^0 -> H^0 3.28e+07 +----------------------------------------------------------------------------------- +OH^0 + OH^-1 -> O^-1 1.27e+10 +----------------------------------------------------------------------------------- +OH^-1 + HO_2^0 -> O_2^-1 1.27e+10 +----------------------------------------------------------------------------------- +OH^-1 + H2O2^0 -> HO_2^-1 1.3e+10 +----------------------------------------------------------------------------------- +OH^-1 + H^0 -> e_aq^-1 2.51e+07 +----------------------------------------------------------------------------------- +e_aq^-1 + O_2^0 -> O_2^-1 2.3e+10 +----------------------------------------------------------------------------------- +e_aq^-1 + H^0 -> OH^-1 + H_2^0 2.5e+10 +----------------------------------------------------------------------------------- +e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 6.36e+09 +----------------------------------------------------------------------------------- +e_aq^-1 + H2O2^0 -> OH^-1 + OH^0 1.1e+10 +----------------------------------------------------------------------------------- +e_aq^-1 + O_2^-1 -> H2O2^0 + OH^-1 + OH^-1 1.3e+10 +----------------------------------------------------------------------------------- +e_aq^-1 + HO_2^-1 -> O^-1 + OH^-1 3.51e+09 +----------------------------------------------------------------------------------- +e_aq^-1 + O^-1 -> OH^-1 + OH^-1 2.31e+10 +----------------------------------------------------------------------------------- +e_aq^-1 + HO_2^0 -> HO_2^-1 1.29e+10 +----------------------------------------------------------------------------------- +e_aq^-1 + H2O^0 -> H^0 + OH^-1 1.58e-05 +----------------------------------------------------------------------------------- +e_aq^-1 + H3O^1 -> H^0 2.11e+10 +----------------------------------------------------------------------------------- +H^0 + O_2^0 -> HO_2^0 1.3e+10 +----------------------------------------------------------------------------------- +H^0 + H^0 -> H_2^0 5.03e+09 +----------------------------------------------------------------------------------- +H^0 + O^-1 -> OH^-1 2e+10 +----------------------------------------------------------------------------------- +H^0 + HO_2^0 -> H2O2^0 1e+10 +----------------------------------------------------------------------------------- +H^0 + O_2^-1 -> HO_2^-1 1e+10 +----------------------------------------------------------------------------------- +H^0 + H2O2^0 -> OH^0 3.5e+07 +----------------------------------------------------------------------------------- +H^0 + H2O^0 -> e_aq^-1 + H3O^1 6.32e-06 +----------------------------------------------------------------------------------- +H^0 + OH^-1 -> e_aq^-1 2.51e+07 +----------------------------------------------------------------------------------- +H_2^0 + O^-1 -> H^0 + OH^-1 1.21e+08 +----------------------------------------------------------------------------------- +H2O2^0 + O^-1 -> HO_2^0 + OH^-1 5.55e+08 +----------------------------------------------------------------------------------- +H2O2^0 + OH^-1 -> HO_2^-1 1.27e+10 +----------------------------------------------------------------------------------- +HO_2^0 + HO_2^0 -> H2O2^0 + O_2^0 980000 +----------------------------------------------------------------------------------- +HO_2^0 + O_2^-1 -> HO_2^-1 + O_2^0 9.7e+07 +----------------------------------------------------------------------------------- +HO_2^0 + H2O^0 -> H3O^1 + O_2^-1 0.758 +----------------------------------------------------------------------------------- +HO_2^0 + OH^-1 -> O_2^-1 1.27e+10 +----------------------------------------------------------------------------------- +HO_2^-1 + O^-1 -> O_2^-1 + OH^-1 3.5e+08 +----------------------------------------------------------------------------------- +HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 1.36 +----------------------------------------------------------------------------------- +O^-1 + O_2^0 -> O_3^-1 3.7e+09 +----------------------------------------------------------------------------------- +O^-1 + O_2^-1 -> O_2^0 + OH^-1 + OH^-1 6e+08 +----------------------------------------------------------------------------------- +O^-1 + O^-1 -> H2O2^0 + OH^-1 + OH^-1 1e+08 +----------------------------------------------------------------------------------- +O^-1 + O_3^-1 -> O_2^-1 + O_2^-1 7e+08 +----------------------------------------------------------------------------------- +O^-1 + H2O^0 -> OH^0 + OH^-1 1.36 +----------------------------------------------------------------------------------- +O_2^-1 + O_2^-1 -> H2O2^0 + O_2^0 + OH^-1 + OH^-1 100 +----------------------------------------------------------------------------------- +O_2^-1 + H2O^0 -> HO_2^0 + OH^-1 1.5e-07 +----------------------------------------------------------------------------------- +O_2^-1 + H3O^1 -> HO_2^0 4.78e+10 +----------------------------------------------------------------------------------- +O_3^-1 + H2O^0 -> O^-1 + O_2^0 0.00266 +----------------------------------------------------------------------------------- +======================================================================= +====== Electromagnetic Physics Parameters ======== +======================================================================= +LPM effect enabled 1 +Enable creation and use of sampling tables 0 +Apply cuts on all EM processes 0 +Use combined TransportationWithMsc Disabled +Use general process 0 +Enable linear polarisation for gamma 0 +Enable photoeffect sampling below K-shell 1 +Enable sampling of quantum entanglement 0 +X-section factor for integral approach 0.8 +Min kinetic energy for tables 10 eV +Max kinetic energy for tables 300 MeV +Number of bins per decade of a table 20 +Verbose level 1 +Verbose level for worker thread 0 +Bremsstrahlung energy threshold above which + primary e+- is added to the list of secondary 100 TeV +Bremsstrahlung energy threshold above which primary + muon/hadron is added to the list of secondary 100 TeV +Lowest triplet kinetic energy 1 MeV +Enable sampling of gamma linear polarisation 0 +5D gamma conversion model type 0 +5D gamma conversion model on isolated ion 0 +Livermore data directory epics_2017 +======================================================================= +====== Ionisation Parameters ======== +======================================================================= +Step function for e+- (0.2, 0.01 mm) +Step function for muons/hadrons (0.1, 0.05 mm) +Step function for light ions (0.1, 0.02 mm) +Step function for general ions (0.1, 0.001 mm) +Lowest e+e- kinetic energy 0 eV +Lowest muon/hadron kinetic energy 1 keV +Use ICRU90 data 1 +Fluctuations of dE/dx are enabled 1 +Type of fluctuation model for leptons and hadrons Universal +Use built-in Birks satuaration 0 +Build CSDA range enabled 0 +Use cut as a final range enabled 0 +Enable angular generator interface 1 +Max kinetic energy for CSDA tables 1 GeV +Max kinetic energy for NIEL computation 0 eV +Linear loss limit 0.01 +Read data from file for e+e- pair production by mu 0 +======================================================================= +====== Multiple Scattering Parameters ======== +======================================================================= +Type of msc step limit algorithm for e+- 2 +Type of msc step limit algorithm for muons/hadrons 0 +Msc lateral displacement for e+- enabled 1 +Msc lateral displacement for muons and hadrons 0 +Urban msc model lateral displacement alg96 1 +Range factor for msc step limit for e+- 0.08 +Range factor for msc step limit for muons/hadrons 0.2 +Geometry factor for msc step limitation of e+- 2.5 +Safety factor for msc step limit for e+- 0.6 +Skin parameter for msc step limitation of e+- 3 +Lambda limit for msc step limit for e+- 1 mm +Use Mott correction for e- scattering 1 +Factor used for dynamic computation of angular + limit between single and multiple scattering 1 +Fixed angular limit between single + and multiple scattering 3.1416 rad +Upper energy limit for e+- multiple scattering 100 MeV +Type of electron single scattering model 0 +Type of nuclear form-factor 1 +Screening factor 1 +======================================================================= +====== Atomic Deexcitation Parameters ======== +======================================================================= +Fluorescence enabled 1 +Directory in G4LEDATA for fluorescence data files fluor +Auger electron cascade enabled 1 +PIXE atomic de-excitation enabled 0 +De-excitation module ignores cuts 1 +Type of PIXE cross section for hadrons Empirical +Type of PIXE cross section for e+- Livermore +======================================================================= +====== DNA Physics Parameters ======== +======================================================================= +Use fast sampling in DNA models 1 +Use Stationary option in DNA models 0 +Use DNA with multiple scattering of e- 0 +Use DNA e- solvation model type 11003 +======================================================================= + +### === Deexcitation model UAtomDeexcitation is activated for 1 region: + DefaultRegionForTheWorld 1 1 0 +### === Auger flag: 1 +### === Ignore cuts flag: 1 + +phot: for gamma SubType=12 BuildTable=0 + LambdaPrime table from 200 keV to 300 MeV in 59 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermorePhElectric : Emin= 0 eV Emax= 300 MeV SauterGavrila Fluo + +compt: for gamma SubType=13 BuildTable=1 + Lambda table from 10 eV to 1 MeV, 19 bins/decade, spline: 1 + LambdaPrime table from 1 MeV to 300 MeV in 46 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LowEPComptonModel : Emin= 0 eV Emax= 20 MeV Fluo + KleinNishina : Emin= 20 MeV Emax= 300 MeV Fluo + +conv: for gamma SubType=14 BuildTable=1 + Lambda table from 1.022 MeV to 300 MeV, 30 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + BetheHeitlerLPM : Emin= 0 eV Emax= 300 MeV ModifiedTsai + +Rayl: for gamma SubType=11 BuildTable=1 + Lambda table from 10 eV to 150 keV, 19 bins/decade, spline: 0 + LambdaPrime table from 150 keV to 300 MeV in 62 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermoreRayleigh : Emin= 0 eV Emax= 300 MeV CullenGenerator + +msc: for e- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + GoudsmitSaunderson : Emin= 1 MeV Emax= 300 MeV Nbins=40 1 MeV - 300 MeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +eIoni: for e- XStype:3 SubType=2 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + StepFunction=(0.2, 0.01 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MollerBhabha : Emin= 1 MeV Emax= 300 MeV deltaVI + +eBrem: for e- XStype:4 SubType=3 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + LPM flag: 1 for E > 0.3 GeV, VertexHighEnergyTh(GeV)= 100000 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eBremSB : Emin= 1 MeV Emax= 300 MeV AngularGen2BS + +e-_G4DNAElectronSolvation: for e- SubType=58 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNAOneStepThermalizationModel_Meesungnoen2002 : Emin= 0 eV Emax= 7.4 eV + DummyModel : Emin= 7.4 eV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +e-_G4DNAElastic: for e- SubType=51 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNAChampionElasticModel : Emin= 0 eV Emax= 1 MeV + DummyModel : Emin= 1 MeV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +e-_G4DNAExcitation: for e- SubType=52 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNABornExcitationModel : Emin= 0 eV Emax= 1 MeV + DummyModel : Emin= 1 MeV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +e-_G4DNAIonisation: for e- SubType=53 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNABornIonisationModel : Emin= 0 eV Emax= 1 MeV deltaBorn Fluo + DummyModel : Emin= 1 MeV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +e-_G4DNAVibExcitation: for e- SubType=54 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNASancheExcitationModel : Emin= 0 eV Emax= 100 eV + DummyModel : Emin= 100 eV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +e-_G4DNAAttachment: for e- SubType=55 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNAMeltonAttachmentModel : Emin= 0 eV Emax= 13 eV + DummyModel : Emin= 13 eV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +msc: for e+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + GoudsmitSaunderson : Emin= 0 eV Emax= 300 MeV Nbins=120 100 eV - 300 MeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +eIoni: for e+ XStype:3 SubType=2 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + StepFunction=(0.2, 0.01 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MollerBhabha : Emin= 0 eV Emax= 300 MeV deltaVI + +eBrem: for e+ XStype:4 SubType=3 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + LPM flag: 1 for E > 0.3 GeV, VertexHighEnergyTh(GeV)= 100000 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eBremSB : Emin= 0 eV Emax= 300 MeV AngularGen2BS + +annihil: for e+ XStype:2 SubType=5 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eplus2gg : Emin= 0 eV Emax= 300 MeV + +proton_G4DNAElastic: for proton SubType=51 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DNAIonElasticModel : Emin= 0 eV Emax= 1 MeV + DummyModel : Emin= 1 MeV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +proton_G4DNAExcitation: for proton SubType=52 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 500 keV +DNABornExcitationModel : Emin= 500 keV Emax= 100 MeV +DNARPWBAExcitationModel : Emin= 100 MeV Emax= 300 MeV + +proton_G4DNAIonisation: for proton SubType=53 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 500 keV deltaRudd Fluo +DNABornIonisationModel : Emin= 500 keV Emax= 100 MeV deltaBorn Fluo +DNARPWBAIonisationModel : Emin= 100 MeV Emax= 300 MeV deltaBorn Fluo + +proton_G4DNAChargeDecrease: for proton SubType=56 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 300 MeV + +GenericIon_G4DNAIonisation: for GenericIon SubType=53 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 eV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm +DNARuddIonisationExtendedModel : Emin= 100 eV Emax= 300 MeV deltaRudd Fluo + +alpha_G4DNAElastic: for alpha SubType=51 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DNAIonElasticModel : Emin= 0 eV Emax= 1 MeV + DummyModel : Emin= 1 MeV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +alpha_G4DNAExcitation: for alpha SubType=52 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV + +alpha_G4DNAIonisation: for alpha SubType=53 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 eV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm +DNARuddIonisationExtendedModel : Emin= 100 eV Emax= 300 MeV deltaRudd Fluo + +alpha_G4DNAChargeDecrease: for alpha SubType=56 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 300 MeV + +alpha+_G4DNAElastic: for alpha+ SubType=51 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DNAIonElasticModel : Emin= 0 eV Emax= 1 MeV + DummyModel : Emin= 1 MeV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +alpha+_G4DNAExcitation: for alpha+ SubType=52 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV + +alpha+_G4DNAIonisation: for alpha+ SubType=53 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 eV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm +DNARuddIonisationExtendedModel : Emin= 100 eV Emax= 300 MeV deltaRudd Fluo + +alpha+_G4DNAChargeIncrease: for alpha+ SubType=57 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 300 MeV + +alpha+_G4DNAChargeDecrease: for alpha+ SubType=56 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 300 MeV + +msc: for anti_proton SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 300 MeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +hIoni: for anti_proton XStype:3 SubType=2 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax= 2 MeV deltaVI + BetheBloch : Emin= 2 MeV Emax= 300 MeV deltaVI + +helium_G4DNAElastic: for helium SubType=51 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DNAIonElasticModel : Emin= 0 eV Emax= 1 MeV + DummyModel : Emin= 1 MeV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +helium_G4DNAExcitation: for helium SubType=52 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV + +helium_G4DNAIonisation: for helium SubType=53 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 eV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm +DNARuddIonisationExtendedModel : Emin= 100 eV Emax= 300 MeV deltaRudd Fluo + +helium_G4DNAChargeIncrease: for helium SubType=57 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 300 MeV + +hydrogen_G4DNAElastic: for hydrogen SubType=51 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DNAIonElasticModel : Emin= 0 eV Emax= 1 MeV + DummyModel : Emin= 1 MeV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hydrogen_G4DNAExcitation: for hydrogen SubType=52 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV + +hydrogen_G4DNAIonisation: for hydrogen SubType=53 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 eV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm +DNARuddIonisationExtendedModel : Emin= 100 eV Emax= 300 MeV deltaRudd Fluo + +hydrogen_G4DNAChargeIncrease: for hydrogen SubType=57 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 300 MeV + +msc: for kaon+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 300 MeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +hIoni: for kaon+ XStype:3 SubType=2 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=1.05231 MeV deltaVI + BetheBloch : Emin=1.05231 MeV Emax= 300 MeV deltaVI + +msc: for kaon- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 300 MeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +hIoni: for kaon- XStype:3 SubType=2 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=1.05231 MeV deltaVI + BetheBloch : Emin=1.05231 MeV Emax= 300 MeV deltaVI + +msc: for mu+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 300 MeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +hIoni: for mu+ XStype:3 SubType=2 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=225.219 keV deltaVI + BetheBloch : Emin=225.219 keV Emax= 300 MeV deltaVI + +msc: for mu- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 300 MeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +hIoni: for mu- XStype:3 SubType=2 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=225.219 keV deltaVI + BetheBloch : Emin=225.219 keV Emax= 300 MeV deltaVI + +msc: for pi+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 300 MeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +hIoni: for pi+ XStype:3 SubType=2 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=297.505 keV deltaVI + BetheBloch : Emin=297.505 keV Emax= 300 MeV deltaVI + +msc: for pi- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 300 MeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +hIoni: for pi- XStype:3 SubType=2 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=297.505 keV deltaVI + BetheBloch : Emin=297.505 keV Emax= 300 MeV deltaVI +### Run 0 starts. +### Run 0 starts. +--> Event 0 starts. +_____________________________________________________________________________ +Stop this beam line (e-, 0.999 MeV) at actual dose: 0.0195835 Gy. Cut-off dose: 0.01 Gy +The beam of 6 tracks in a volume of 32.768 um3. Total deposit energy: 4005.57 eV. +_____________________________________________________________________________ +Number of chemical species involved in reactions = 16 +Reaction Reaction Rate [dm3/(mol*s)] Interaction Range for chosen reaction model [nm] +------------------------------------------------------------------------------------------------------------------------------------- +H3O^1 + OH^-1 -> No product 1.13e+11 1.01165 +------------------------------------------------------------------------------------------------------------------------------------- +H3O^1 + e_aq^-1 -> H^0 2.11e+10 0.194163 +------------------------------------------------------------------------------------------------------------------------------------- +H3O^1 + O_3^-1 -> OH^0 + O_2^0 9e+10 1.03776 +------------------------------------------------------------------------------------------------------------------------------------- +H3O^1 + O_2^-1 -> HO_2^0 4.78e+10 0.563458 +------------------------------------------------------------------------------------------------------------------------------------- +H3O^1 + HO_2^-1 -> H2O2^0 4.78e+10 0.581617 +------------------------------------------------------------------------------------------------------------------------------------- +H3O^1 + O^-1 -> OH^0 4.78e+10 0.551166 +------------------------------------------------------------------------------------------------------------------------------------- +OH^0 + H^0 -> No product 1.55e+10 0.22263 +------------------------------------------------------------------------------------------------------------------------------------- +OH^0 + OH^0 -> H2O2^0 5.5e+09 0.330354 +------------------------------------------------------------------------------------------------------------------------------------- +OH^0 + e_aq^-1 -> OH^-1 2.95e+10 0.549039 +------------------------------------------------------------------------------------------------------------------------------------- +OH^0 + O_2^-1 -> O_2^0 + OH^-1 1.07e+10 0.357953 +------------------------------------------------------------------------------------------------------------------------------------- +OH^0 + OH^-1 -> O^-1 1.27e+10 0.22376 +------------------------------------------------------------------------------------------------------------------------------------- +OH^0 + HO_2^0 -> O_2^0 7.9e+09 0.231982 +------------------------------------------------------------------------------------------------------------------------------------- +OH^0 + HO_2^-1 -> HO_2^0 + OH^-1 8.32e+09 0.305394 +------------------------------------------------------------------------------------------------------------------------------------- +OH^0 + O^-1 -> HO_2^-1 1e+09 0.0314623 +------------------------------------------------------------------------------------------------------------------------------------- +OH^0 + O_3^-1 -> O_2^-1 + HO_2^0 8.5e+09 0.267429 +------------------------------------------------------------------------------------------------------------------------------------- +OH^0 + H2O2^0 -> HO_2^0 2.88e+07 0.000845706 +------------------------------------------------------------------------------------------------------------------------------------- +OH^0 + H_2^0 -> H^0 3.28e+07 0.000619177 +------------------------------------------------------------------------------------------------------------------------------------- +OH^0 + OH^-1 -> O^-1 1.27e+10 0.22376 +------------------------------------------------------------------------------------------------------------------------------------- +OH^-1 + HO_2^0 -> O_2^-1 1.27e+10 0.220815 +------------------------------------------------------------------------------------------------------------------------------------- +OH^-1 + H2O2^0 -> HO_2^-1 1.3e+10 0.226032 +------------------------------------------------------------------------------------------------------------------------------------- +OH^-1 + H^0 -> e_aq^-1 2.51e+07 0.000269655 +------------------------------------------------------------------------------------------------------------------------------------- +e_aq^-1 + O_2^0 -> O_2^-1 2.3e+10 0.416336 +------------------------------------------------------------------------------------------------------------------------------------- +e_aq^-1 + H^0 -> OH^-1 + H_2^0 2.5e+10 0.277608 +------------------------------------------------------------------------------------------------------------------------------------- +e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 6.36e+09 0.171514 +------------------------------------------------------------------------------------------------------------------------------------- +e_aq^-1 + H2O2^0 -> OH^-1 + OH^0 1.1e+10 0.201883 +------------------------------------------------------------------------------------------------------------------------------------- +e_aq^-1 + O_2^-1 -> H2O2^0 + OH^-1 + OH^-1 1.3e+10 0.258322 +------------------------------------------------------------------------------------------------------------------------------------- +e_aq^-1 + HO_2^-1 -> O^-1 + OH^-1 3.51e+09 0.0736217 +------------------------------------------------------------------------------------------------------------------------------------- +e_aq^-1 + O^-1 -> OH^-1 + OH^-1 2.31e+10 0.442387 +------------------------------------------------------------------------------------------------------------------------------------- +e_aq^-1 + HO_2^0 -> HO_2^-1 1.29e+10 0.236754 +------------------------------------------------------------------------------------------------------------------------------------- +e_aq^-1 + H2O^0 -> H^0 + OH^-1 1.58e-05 3.02585e-16 +------------------------------------------------------------------------------------------------------------------------------------- +e_aq^-1 + H3O^1 -> H^0 2.11e+10 0.194163 +------------------------------------------------------------------------------------------------------------------------------------- +H^0 + O_2^0 -> HO_2^0 1.3e+10 0.182749 +------------------------------------------------------------------------------------------------------------------------------------- +H^0 + H^0 -> H_2^0 5.03e+09 0.0949531 +------------------------------------------------------------------------------------------------------------------------------------- +H^0 + O^-1 -> OH^-1 2e+10 0.293648 +------------------------------------------------------------------------------------------------------------------------------------- +H^0 + HO_2^0 -> H2O2^0 1e+10 0.142088 +------------------------------------------------------------------------------------------------------------------------------------- +H^0 + O_2^-1 -> HO_2^-1 1e+10 0.151019 +------------------------------------------------------------------------------------------------------------------------------------- +H^0 + H2O2^0 -> OH^0 3.5e+07 0.000497307 +------------------------------------------------------------------------------------------------------------------------------------- +H^0 + H2O^0 -> e_aq^-1 + H3O^1 6.32e-06 9.27927e-17 +------------------------------------------------------------------------------------------------------------------------------------- +H^0 + OH^-1 -> e_aq^-1 2.51e+07 0.000269655 +------------------------------------------------------------------------------------------------------------------------------------- +H_2^0 + O^-1 -> H^0 + OH^-1 1.21e+08 0.00235134 +------------------------------------------------------------------------------------------------------------------------------------- +H2O2^0 + O^-1 -> HO_2^0 + OH^-1 5.55e+08 0.0170555 +------------------------------------------------------------------------------------------------------------------------------------- +H2O2^0 + OH^-1 -> HO_2^-1 1.27e+10 0.220815 +------------------------------------------------------------------------------------------------------------------------------------- +HO_2^0 + HO_2^0 -> H2O2^0 + O_2^0 980000 5.63038e-05 +------------------------------------------------------------------------------------------------------------------------------------- +HO_2^0 + O_2^-1 -> HO_2^-1 + O_2^0 9.7e+07 0.00316487 +------------------------------------------------------------------------------------------------------------------------------------- +HO_2^0 + H2O^0 -> H3O^1 + O_2^-1 0.758 2.32938e-11 +------------------------------------------------------------------------------------------------------------------------------------- +HO_2^0 + OH^-1 -> O_2^-1 1.27e+10 0.220815 +------------------------------------------------------------------------------------------------------------------------------------- +HO_2^-1 + O^-1 -> O_2^-1 + OH^-1 3.5e+08 0.0136028 +------------------------------------------------------------------------------------------------------------------------------------- +HO_2^-1 + H2O^0 -> H2O2^0 + OH^-1 1.36 5.28566e-11 +------------------------------------------------------------------------------------------------------------------------------------- +O^-1 + O_2^0 -> O_3^-1 3.7e+09 0.111119 +------------------------------------------------------------------------------------------------------------------------------------- +O^-1 + O_2^-1 -> O_2^0 + OH^-1 + OH^-1 6e+08 0.0211426 +------------------------------------------------------------------------------------------------------------------------------------- +O^-1 + O^-1 -> H2O2^0 + OH^-1 + OH^-1 1e+08 0.00660708 +------------------------------------------------------------------------------------------------------------------------------------- +O^-1 + O_3^-1 -> O_2^-1 + O_2^-1 7e+08 0.0231248 +------------------------------------------------------------------------------------------------------------------------------------- +O^-1 + H2O^0 -> OH^0 + OH^-1 1.36 4.49281e-11 +------------------------------------------------------------------------------------------------------------------------------------- +O_2^-1 + O_2^-1 -> H2O2^0 + O_2^0 + OH^-1 + OH^-1 100 7.55094e-09 +------------------------------------------------------------------------------------------------------------------------------------- +O_2^-1 + H2O^0 -> HO_2^0 + OH^-1 1.5e-07 5.28566e-18 +------------------------------------------------------------------------------------------------------------------------------------- +O_2^-1 + H3O^1 -> HO_2^0 4.78e+10 0.563458 +------------------------------------------------------------------------------------------------------------------------------------- +O_3^-1 + H2O^0 -> O^-1 + O_2^0 0.00266 8.78741e-14 +------------------------------------------------------------------------------------------------------------------------------------- +DNAMolecularStepByStepModel will be used +_____________________________________________________________________________ +Stop this beam line (e-, 0.999 MeV) at actual dose: 0.010791 Gy. Cut-off dose: 0.01 Gy +The beam of 2 tracks in a volume of 32.768 um3. Total deposit energy: 2207.2 eV. +_____________________________________________________________________________ + +--------------------------End of Local Run------------------------------ +The run has 2 events. Scavenger info: +************************************************************** +Scavenger:O_2^0 : 0.000247 (M) with : 4874086 (molecules)in: 32.768 (um3) +Scavenger:H3O^1 : 3.1623e-06 (M) with : 62402 (molecules)in: 32.768 (um3) +Scavenger:OH^-1 : 3.1419e-09 (M) with : 62 (molecules)in: 32.768 (um3) +Scavenger:H2O^0 : 55.3 (M) with : 1091254301582 (molecules)in: 32.768 (um3) +************************************************************** +Total energy deposited in the world volume : 6.2128 keV +------------------------------------------------------------------------- + diff --git a/examples/extended/medical/dna/UHDR/beam.in b/examples/extended/medical/dna/UHDR/beam.in new file mode 100644 index 00000000000..365164c08b7 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/beam.in @@ -0,0 +1,38 @@ +#/run/numberOfThreads 10 +/process/dna/e-SolvationSubType Meesungnoen2002 +#/process/dna/e-SolvationSubType Ritchie1994 +#/process/dna/e-SolvationSubType Terrisol1990 + +# Set the simulation volume (half Side Length) +#/UHDR/env/volume 0.8 um # for UHDR +/UHDR/env/volume 1.6 um # for CONV + +/run/initialize + +# time structure (not available) +#/UHDR/pulse/activate true + +# pH and Scavenger +/UHDR/env/pH 5.5 + +# Oxygen concentration +/UHDR/env/scavenger O2 19 % + +/chem/reaction/print + +#/run/verbose 1 +/tracking/verbose 0 +/scheduler/verbose 0 +/scheduler/endTime 1 ms + +# set false if many beamOn in medium +/scheduler/ResetScavengerForEachBeamOn true + +/scorer/Gvalues/nOfTimeBins 80 + +/run/printProgress 10 + +/scorer/Dose/cutoff 0.01 Gy +/UHDR/source/particle e- +/UHDR/source/energy 0.999 MeV +/run/beamOn 2 diff --git a/examples/extended/medical/dna/UHDR/include/ActionInitialization.hh b/examples/extended/medical/dna/UHDR/include/ActionInitialization.hh new file mode 100644 index 00000000000..6ee5de768d9 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/include/ActionInitialization.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. * +// ******************************************************************** +// +/// \file ActionInitialization.hh +/// \brief Definition of the ActionInitialization class + +#ifndef ActionInitialization_h +#define ActionInitialization_h 1 + +#include "G4VUserActionInitialization.hh" + +class DetectorConstruction; + +class ActionInitialization : public G4VUserActionInitialization { +public: + explicit ActionInitialization(DetectorConstruction *pDetector); + + ~ActionInitialization() override = default; + + void BuildForMaster() const override; + + void Build() const override; + +private: + DetectorConstruction *fpDetector = nullptr; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/UHDR/include/BoundedBrownianAction.hh b/examples/extended/medical/dna/UHDR/include/BoundedBrownianAction.hh new file mode 100644 index 00000000000..51c95d2c8db --- /dev/null +++ b/examples/extended/medical/dna/UHDR/include/BoundedBrownianAction.hh @@ -0,0 +1,57 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + +#ifndef BoundedBrownianAction_hh +#define BoundedBrownianAction_hh + +#include "G4VUserBrownianAction.hh" + +class G4DNABoundingBox; + +class BoundedBrownianAction : public G4VUserBrownianAction { +public: + BoundedBrownianAction(); + + ~BoundedBrownianAction() override = default; + + G4double GetDistanceToBoundary(const G4Track &) override; + + void Transport(G4ThreeVector &, G4Track *) override; + + void BouncingAction(G4ThreeVector &) const; + + inline void SetBoundary(const G4DNABoundingBox &); + +private: + const G4DNABoundingBox *fpBoundingBox = nullptr; +}; + +inline void +BoundedBrownianAction::SetBoundary(const G4DNABoundingBox &boudingBox) { + fpBoundingBox = &boudingBox; +} + +#endif // BoundedBrownianAction_hh diff --git a/source/particles/management/src/G4VUserPrimaryParticleInformation.cc b/examples/extended/medical/dna/UHDR/include/ChemFrickeReactionBuilder.hh similarity index 83% rename from source/particles/management/src/G4VUserPrimaryParticleInformation.cc rename to examples/extended/medical/dna/UHDR/include/ChemFrickeReactionBuilder.hh index c7807dae2e1..0f18fe7064d 100644 --- a/source/particles/management/src/G4VUserPrimaryParticleInformation.cc +++ b/examples/extended/medical/dna/UHDR/include/ChemFrickeReactionBuilder.hh @@ -23,17 +23,19 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// G4VUserPrimaryParticleInformation -// -// Author: M.Asai (SLAC) -// -------------------------------------------------------------------- -#include "G4VUserPrimaryParticleInformation.hh" -G4VUserPrimaryParticleInformation::G4VUserPrimaryParticleInformation() -{ -} +#ifndef CHEMFRICKEREACTIONBUILDER_HH +#define CHEMFRICKEREACTIONBUILDER_HH + +class G4DNAMolecularReactionTable; + +class ChemFrickeReactionBuilder { +public: + ChemFrickeReactionBuilder() = default; + ~ChemFrickeReactionBuilder() = default; -G4VUserPrimaryParticleInformation::~G4VUserPrimaryParticleInformation() -{ -} + static void FrickeDosimeterReaction( + G4DNAMolecularReactionTable *pReactionTable); +}; +#endif diff --git a/examples/extended/medical/dna/UHDR/include/ChemNO2_NO3ScavengerBuilder.hh b/examples/extended/medical/dna/UHDR/include/ChemNO2_NO3ScavengerBuilder.hh new file mode 100644 index 00000000000..3f385e9efe5 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/include/ChemNO2_NO3ScavengerBuilder.hh @@ -0,0 +1,41 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + +#ifndef ChemNO2_NO3ScavengerBuilder_hh +#define ChemNO2_NO3ScavengerBuilder_hh + +class G4DNAMolecularReactionTable; + +class ChemNO2_NO3ScavengerBuilder { +public: + ChemNO2_NO3ScavengerBuilder() = default; + ~ChemNO2_NO3ScavengerBuilder() = default; + + static void NO2_NO3ScavengerReaction( + G4DNAMolecularReactionTable *pReactionTable); +}; + +#endif // diff --git a/examples/extended/medical/dna/UHDR/include/ChemOxygenWaterBuilder.hh b/examples/extended/medical/dna/UHDR/include/ChemOxygenWaterBuilder.hh new file mode 100644 index 00000000000..c973c1b11b0 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/include/ChemOxygenWaterBuilder.hh @@ -0,0 +1,45 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + +#ifndef ChemOxygenWaterBuilder_hh +#define ChemOxygenWaterBuilder_hh + +class G4DNAMolecularReactionTable; + +class ChemOxygenWaterBuilder { +public: + ChemOxygenWaterBuilder() = default; + + ~ChemOxygenWaterBuilder() = default; + + static void SecondOrderReactionExtended( + G4DNAMolecularReactionTable *pReactionTable); + + static void OxygenScavengerReaction(G4DNAMolecularReactionTable + *pReactionTable); +}; + +#endif // diff --git a/examples/extended/medical/dna/UHDR/include/ChemPureWaterBuilder.hh b/examples/extended/medical/dna/UHDR/include/ChemPureWaterBuilder.hh new file mode 100644 index 00000000000..a8ff7b92832 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/include/ChemPureWaterBuilder.hh @@ -0,0 +1,42 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + +#ifndef CHEMPUREWATERBUILDER_HH +#define CHEMPUREWATERBUILDER_HH + +class G4DNAMolecularReactionTable; + +class ChemPureWaterBuilder { +public: + ChemPureWaterBuilder() = default; + + ~ChemPureWaterBuilder() = default; + + static void + WaterScavengerReaction(G4DNAMolecularReactionTable *pReactionTable); +}; + +#endif \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/include/ChemistryWorld.hh b/examples/extended/medical/dna/UHDR/include/ChemistryWorld.hh new file mode 100644 index 00000000000..71aea94c145 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/include/ChemistryWorld.hh @@ -0,0 +1,59 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + +#ifndef CHEMISTRYWORLD_HH +#define CHEMISTRYWORLD_HH + +#include "G4UIcmdWithADouble.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcmdWithAString.hh" +#include "G4UImessenger.hh" +#include "G4VChemistryWorld.hh" +#include "G4DNABoundingBox.hh" +#include "G4SystemOfUnits.hh" + +class ChemistryWorld : public G4VChemistryWorld, public G4UImessenger { +public: + ChemistryWorld(); + + ~ChemistryWorld() override = default; + + void ConstructChemistryBoundary() override; + + void ConstructChemistryComponents() override; + + void SetNewValue(G4UIcommand *, G4String) override; + +private: + std::unique_ptr fpChemWoldDir; + std::unique_ptr fpAddpH; + std::unique_ptr fpAddScavengerName; + std::unique_ptr fpTargetVolume; + G4double fpH = 7; + G4double fHalfBox = 1.6 * um; +}; + +#endif diff --git a/examples/extended/medical/dna/UHDR/include/DetectorConstruction.hh b/examples/extended/medical/dna/UHDR/include/DetectorConstruction.hh new file mode 100644 index 00000000000..954a6e31d59 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/include/DetectorConstruction.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. * +// ******************************************************************** + +#ifndef DetectorConstruction_h +#define DetectorConstruction_h 1 + +#include "G4VUserDetectorConstruction.hh" +#include + +class G4VPhysicalVolume; +class G4VChemistryWorld; +class G4VPrimitiveScorer; +class DetectorConstruction : public G4VUserDetectorConstruction { +public: + DetectorConstruction(); + ~DetectorConstruction() override = default; + + G4VPhysicalVolume *Construct() final; + void ConstructSDandField() final; + G4VChemistryWorld* GetChemistryWorld() const { return fpChemistryWorld.get(); } + +private: + std::unique_ptr fpChemistryWorld; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/UHDR/include/EmDNAChemistry.hh b/examples/extended/medical/dna/UHDR/include/EmDNAChemistry.hh new file mode 100644 index 00000000000..ed9bd16d18d --- /dev/null +++ b/examples/extended/medical/dna/UHDR/include/EmDNAChemistry.hh @@ -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. * +// ******************************************************************** +// +#ifndef G4EmDNAChemistry_optionx_hh +#define G4EmDNAChemistry_optionx_hh 1 + +#include "G4DNABoundingBox.hh" +#include "G4VPhysicsConstructor.hh" +#include "G4VUserChemistryList.hh" +#include "globals.hh" + +class G4DNAMolecularReactionTable; +class G4VChemistryWorld; +class EmDNAChemistry : public G4VUserChemistryList, + public G4VPhysicsConstructor { +public: + EmDNAChemistry(); + ~EmDNAChemistry() override; + + void ConstructParticle() override { ConstructMolecule(); } + void ConstructMolecule() final; + void ConstructProcess() final; + + void ConstructDissociationChannels() final; + void ConstructReactionTable(G4DNAMolecularReactionTable *reactionTable) final; + void ConstructTimeStepModel(G4DNAMolecularReactionTable *reactionTable) final; + + void SetChemistryWorld(G4VChemistryWorld &chemistryWorld) { + fpChemistryWorld = &chemistryWorld; + } + +private: + G4VChemistryWorld *fpChemistryWorld = nullptr; +}; + +#endif diff --git a/examples/extended/medical/dna/UHDR/include/PhysicsList.hh b/examples/extended/medical/dna/UHDR/include/PhysicsList.hh new file mode 100644 index 00000000000..d2ef94fa099 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/include/PhysicsList.hh @@ -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. * +// ******************************************************************** +// +// 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 publication: +// Med. Phys. 37 (2010) 4692-4708 +// J. Comput. Phys. 274 (2014) 841-882 +// Phys. Med. Biol. 63(10) (2018) 105014-12pp +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// +/// \file PhysicsList.hh +/// \brief Definition of the PhysicsList class + +#ifndef _PhysicsList_h +#define _PhysicsList_h 1 + +#include "G4EmDNAChemistry.hh" +#include "G4EmDNAChemistry_option3.hh" +#include "EmDNAChemistry.hh" +#include "G4VModularPhysicsList.hh" +#include "globals.hh" +#include +class G4VPhysicsConstructor; +class DetectorConstruction; +class PhysicsList : public G4VModularPhysicsList { +public: + explicit PhysicsList(DetectorConstruction *det); + ~PhysicsList() override = default; + + void ConstructParticle() final; + void ConstructProcess() final; + +private: + std::unique_ptr fEmDNAPhysicsList; + std::unique_ptr fEmDNAChemistryList; +}; +#endif diff --git a/examples/extended/medical/dna/UHDR/include/PrimaryGeneratorAction.hh b/examples/extended/medical/dna/UHDR/include/PrimaryGeneratorAction.hh new file mode 100644 index 00000000000..2079ee3d8c4 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/include/PrimaryGeneratorAction.hh @@ -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. * +// ******************************************************************** +// +// 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 publication: +// Med. Phys. 37 (2010) 4692-4708 +// J. Comput. Phys. 274 (2014) 841-882 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// $Id$ +// +/// \file PrimaryGeneratorAction.hh +/// \brief Definition of the PrimaryGeneratorAction class + +#ifndef PrimaryGeneratorAction_h +#define PrimaryGeneratorAction_h 1 + +#include "G4VUserPrimaryGeneratorAction.hh" +#include + +class G4SingleParticleSource; +class G4Event; +class DetectorConstruction; +class PrimaryGeneratorMessenger; + +class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { +public: + explicit PrimaryGeneratorAction(DetectorConstruction* pDet); + ~PrimaryGeneratorAction() override = default; + void GeneratePrimaries(G4Event *) override; + + inline G4SingleParticleSource* GetSPGun() const + { + return fParticleGun.get(); + } + +private: + std::unique_ptr fParticleGun; + DetectorConstruction* fpDetector = nullptr; + std::unique_ptr fpMessenger; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/source/visualization/Vtk/include/G4VtkMessenger.hh b/examples/extended/medical/dna/UHDR/include/PrimaryGeneratorMessenger.hh similarity index 76% rename from source/visualization/Vtk/include/G4VtkMessenger.hh rename to examples/extended/medical/dna/UHDR/include/PrimaryGeneratorMessenger.hh index 427e90d0e74..a481f92d1cc 100644 --- a/source/visualization/Vtk/include/G4VtkMessenger.hh +++ b/examples/extended/medical/dna/UHDR/include/PrimaryGeneratorMessenger.hh @@ -22,35 +22,34 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** - -#ifndef G4GVTKMESSENGER_HH -#define G4GVTKMESSENGER_HH 1 - +// #include "G4UImessenger.hh" -#include class G4UIdirectory; -class G4UIcmdWithABool; + class G4UIcmdWithAString; -class G4UIcommand; -class G4UIcmdWithoutParameter; -class G4VtkMessenger : public G4UImessenger { +class G4UIcmdWithADoubleAndUnit; +class PrimaryGeneratorAction; + +#ifndef PRIMARYGENERATORMESSENGER_HH +#define PRIMARYGENERATORMESSENGER_HH + +class PrimaryGeneratorMessenger : public G4UImessenger { public: + explicit PrimaryGeneratorMessenger(PrimaryGeneratorAction *); - static G4VtkMessenger* GetInstance(); - virtual ~G4VtkMessenger(); + ~PrimaryGeneratorMessenger() override; - virtual G4String GetCurrentValue(G4UIcommand * command); - virtual void SetNewValue(G4UIcommand * command, G4String newValue); + void SetNewValue(G4UIcommand *, G4String) override; private: - static G4VtkMessenger* fpInstance; - G4VtkMessenger(); - G4UIdirectory* fpDirectory; - G4UIcommand* fpCommandExport; - G4UIcmdWithABool* fpCommandWarnings; + PrimaryGeneratorAction *fpPrimaryGenerator = nullptr; + std::unique_ptr fparticle; + std::unique_ptr fenergy; + }; -#endif \ No newline at end of file + +#endif diff --git a/examples/extended/medical/dna/UHDR/include/PulseAction.hh b/examples/extended/medical/dna/UHDR/include/PulseAction.hh new file mode 100644 index 00000000000..2db4c5da3c3 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/include/PulseAction.hh @@ -0,0 +1,98 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// author: hoang tran + +#ifndef PULSE_PULSEACTION_HH +#define PULSE_PULSEACTION_HH + +#include "G4UserTrackingAction.hh" +#include +#include "G4VUserTrackInformation.hh" +#include "G4VUserPulseInfo.hh" +#include "G4MoleculeCounter.hh" +#include + +class G4ParticleDefinition; + +class PulseActionMessenger; + +class PulseInfo : public G4VUserPulseInfo { +public: + explicit PulseInfo(G4double delayedTime); + + ~PulseInfo() override; + + G4double GetDelayedTime() const override; + +private: + G4double fDelayedTime = 0; +}; + +class PulseAction : public G4UserTrackingAction { +public: + using PulseMap = std::map; + + PulseAction(); + + ~PulseAction() override; + + void Initialize(); + + void PreUserTrackingAction(const G4Track *) override; + + G4double RandomizeInPulse(); + + G4double PulseSpectrum(G4double); + + static G4double Interpolate(const std::array& dat); + + G4double GetLonggestDelayedTime() const; + + inline void SetPulse(const G4bool& pulse) + { + fActivePulse = pulse; + if(fActivePulse){ + G4MoleculeCounter::Instance()->Use(false); + } + } + + inline G4bool IsActivedPulse() const + { + return fActivePulse; + } + +private: + std::unique_ptr fpPulseInfo; + G4double fPulseLarger = 74.16666667; + G4double fDelayedTime = 0; + PulseMap fPulseData; + std::vector fPulseVector; + G4double fLonggestDelayedTime = 0; + std::unique_ptr fpMessenger; + G4bool fActivePulse = false; +}; + +#endif diff --git a/source/visualization/Vtk/include/G4VtkQtSceneHandler.hh b/examples/extended/medical/dna/UHDR/include/PulseActionMessenger.hh similarity index 78% rename from source/visualization/Vtk/include/G4VtkQtSceneHandler.hh rename to examples/extended/medical/dna/UHDR/include/PulseActionMessenger.hh index 16cad3dc47b..2dc0bd1ec6e 100644 --- a/source/visualization/Vtk/include/G4VtkQtSceneHandler.hh +++ b/examples/extended/medical/dna/UHDR/include/PulseActionMessenger.hh @@ -22,28 +22,32 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** +// +// author: hoang tran -#ifndef G4VTKQTSCENEHANDLER_HH -#define G4VTKQTSCENEHANDLER_HH - +#include "G4UImessenger.hh" -#include "G4VSceneHandler.hh" +class G4UIdirectory; -#include -#include +class G4UIcmdWithABool; -#include "G4VtkQtViewer.hh" -#include "G4VtkSceneHandler.hh" +class PulseAction; -class G4VtkQtSceneHandler: public G4VtkSceneHandler { - friend class G4VtkQtViewer; +#ifndef PULSEACTIONMESSENGER_H +#define PULSEACTIONMESSENGER_H +class PulseActionMessenger : public G4UImessenger { public: - G4VtkQtSceneHandler(G4VGraphicsSystem& system, const G4String& name); - virtual ~G4VtkQtSceneHandler(); + explicit PulseActionMessenger(PulseAction *); + + ~PulseActionMessenger() override; -protected: - static G4int fSceneIdCount; // Counter for Vtk scene handlers. + void SetNewValue(G4UIcommand *, G4String) override; + +private: + PulseAction *fpPulse = nullptr; + std::unique_ptr fListCmd; }; + #endif diff --git a/examples/extended/medical/dna/UHDR/include/Run.hh b/examples/extended/medical/dna/UHDR/include/Run.hh new file mode 100644 index 00000000000..1491c11d75c --- /dev/null +++ b/examples/extended/medical/dna/UHDR/include/Run.hh @@ -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. * +// ******************************************************************** +// + +#ifndef Run_h +#define Run_h 1 + +#include "G4Run.hh" +#include "G4THitsMap.hh" +#include "Scorer.hh" + +class Run : public G4Run { +public: + Run(); + + ~Run() override = default; + + void RecordEvent(const G4Event *) override; + + void Merge(const G4Run *) final; + + inline G4double GetSumDose() const { return fSumEne; } + + inline G4VPrimitiveScorer *GetSumDoseLimit() const { return fpDose; } + + inline G4VPrimitiveScorer *GetGvaluesScorer() const { return fpGvalues; } + +private: + G4double fSumEne = 0; + G4VPrimitiveScorer *fpGvalues = nullptr; + G4VPrimitiveScorer *fpDose = nullptr; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/UHDR/include/RunAction.hh b/examples/extended/medical/dna/UHDR/include/RunAction.hh new file mode 100644 index 00000000000..b9d959d7911 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/include/RunAction.hh @@ -0,0 +1,70 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// 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 publication: +// Med. Phys. 37 (2010) 4692-4708 +// J. Comput. Phys. 274 (2014) 841-882 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// $Id$ +// +/// \file RunAction.hh +/// \brief Definition of the RunAction class + +#ifndef _RunAction_h +#define _RunAction_h 1 + +#include "G4THitsMap.hh" +#include "G4UserRunAction.hh" + +class G4Run; + +class DetectorConstruction; + +class G4DNAEventScheduler; + +class RunAction : public G4UserRunAction { +public: + RunAction(); + + ~RunAction() override = default; + + G4Run *GenerateRun() final; + + void BeginOfRunAction(const G4Run *) final; + + void EndOfRunAction(const G4Run *) final; + + void SetEventScheduler(G4DNAEventScheduler *pEventScheduler); + +private: + G4DNAEventScheduler *fpEventScheduler = nullptr; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/UHDR/include/Scorer.hh b/examples/extended/medical/dna/UHDR/include/Scorer.hh new file mode 100644 index 00000000000..4c72006ea9a --- /dev/null +++ b/examples/extended/medical/dna/UHDR/include/Scorer.hh @@ -0,0 +1,173 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +#ifndef scorer_h +#define scorer_h + +#include "G4DNAMesh.hh" +#include "G4THitsMap.hh" +#include "G4UIcmdWith3VectorAndUnit.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcmdWithAString.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIdirectory.hh" +#include "G4UImessenger.hh" +#include "G4VPrimitiveScorer.hh" +#include +#include + +class G4DNAEventScheduler; + +class G4VAnalysisManager; + +class G4MolecularConfiguration; + +class G4VChemistryWorld; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +struct Dose : public G4UImessenger { + Dose(); + + ~Dose() override = default; + + void SetNewValue(G4UIcommand *, G4String) final; + + std::unique_ptr fpDoseDir; + std::unique_ptr fpAddDoseCutOff; + G4double fDosesCutOff = 0; + G4double fCumulatedDose = 0; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +struct Gvalues : public G4UImessenger { + Gvalues(); + + ~Gvalues() override = default; + + void SetNewValue(G4UIcommand *, G4String) final; + + G4int fHCID = -1; + G4double fTimeLimit; + std::unique_ptr fSpeciesdir; + std::unique_ptr fTimeBincmd; + std::unique_ptr fAddTimeToRecordcmd; + + G4int fNEvent = 0; + G4double fEdep = 0; + + inline void AddTimeToRecord(double time) { fTimeToRecord.insert(time); } + + void WriteWithAnalysisManager(G4VAnalysisManager *, const std::string &out); + + struct SpeciesInfo { + SpeciesInfo() = default; + + SpeciesInfo(const SpeciesInfo &right) = default; + + SpeciesInfo &operator=(const SpeciesInfo &right) = default; + + int64_t fNumber = 0; + G4double fG = 0; + G4double fG2 = 0; + }; + + inline auto GetNumberOfRecordedEvents() const { return fNEvent; } + + using Species = const G4MolecularConfiguration; + using InnerSpeciesMap = std::map; + using SpeciesMap = std::map; + SpeciesMap fSpeciesInfoPerTime; + std::set fTimeToRecord; + G4int fRunID = 1; + + inline auto GetSpeciesInfo() const { return fSpeciesInfoPerTime; } +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +template +class Scorer : public G4VPrimitiveScorer { +public: // with description + Scorer(); + + ~Scorer() override = default; + + void Initialize(G4HCofThisEvent *) override; + + void EndOfEvent(G4HCofThisEvent *) override; + + void clear() override; + + G4bool ProcessHits(G4Step *, G4TouchableHistory *) override; + + G4THitsMap *GetEventMap() const; + + void AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer *); + + void OutputAndClear(const std::string &out); + + TR *GetpScorer(); + + void SetChemistryWorld(G4VChemistryWorld *); + + G4VChemistryWorld *GetChemistryWorld() const; + + void SaveScavengerChange(); + + void SaveMoleculeCounter(); + + void SetEventScheduler(G4DNAEventScheduler *pEventScheduler) { + fpEventScheduler = pEventScheduler; + } + +private: + std::unique_ptr fpScorer; + G4int fHCID = -1; + G4THitsMap *fpEvtMap = nullptr; + G4VChemistryWorld *fpChemistryWorld = nullptr; + G4DNAEventScheduler *fpEventScheduler = nullptr; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +template +Scorer::Scorer() + : G4VPrimitiveScorer(typeid(TR).name()), fpScorer(new TR){} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +template +TR *Scorer::GetpScorer() { return fpScorer.get(); } + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +template +G4THitsMap *Scorer::GetEventMap() const { + return fpEvtMap; +} + +#endif \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/include/StackingAction.hh b/examples/extended/medical/dna/UHDR/include/StackingAction.hh new file mode 100644 index 00000000000..269a1e808a2 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/include/StackingAction.hh @@ -0,0 +1,43 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#ifndef StackingAction_h +#define StackingAction_h 1 + +#include "G4UserStackingAction.hh" +#include + +class StackingAction : public G4UserStackingAction { +public: + StackingAction(); + + ~StackingAction() override = default; + + void NewStage() override; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/UHDR/include/TimeStepAction.hh b/examples/extended/medical/dna/UHDR/include/TimeStepAction.hh new file mode 100644 index 00000000000..363753c5d6c --- /dev/null +++ b/examples/extended/medical/dna/UHDR/include/TimeStepAction.hh @@ -0,0 +1,78 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +#ifndef TimeStepAction_h +#define TimeStepAction_h + +#include "G4DNAMesh.hh" +#include "G4UserTimeStepAction.hh" +#include + +class G4DNAEventScheduler; + +class G4VPrimitiveScorer; + +class PulseAction; + +class G4VChemistryWorld; + +class TimeStepAction : public G4UserTimeStepAction { +public: + explicit TimeStepAction(const G4VChemistryWorld*, PulseAction* pPulse = nullptr); + + ~TimeStepAction() override = default; + + TimeStepAction(const TimeStepAction &other) = delete; + + TimeStepAction &operator=(const TimeStepAction &other) = delete; + + void StartProcessing() override { ; } + + void UserPreTimeStepAction() override; + + void UserPostTimeStepAction() override; + + void UserReactionAction(const G4Track & /*trackA*/, + const G4Track & /*trackB*/, + const std::vector * /*products*/) override; + + void EndProcessing() override; + + G4DNAEventScheduler *GetEventScheduler() const; + + void SetInitialPixel(); + +private: + std::unique_ptr fpEventScheduler; + + void CompartmentBased(); + + PulseAction* fpPulse = nullptr; + const G4VChemistryWorld* fpChemWorld = nullptr; + G4int fPixel = 0; + +}; + +#endif diff --git a/examples/extended/medical/dna/UHDR/plotG_time.C b/examples/extended/medical/dna/UHDR/plotG_time.C new file mode 100644 index 00000000000..6a1aa83ec98 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/plotG_time.C @@ -0,0 +1,233 @@ +// from chem6 example +struct SpeciesInfoAOS { + SpeciesInfoAOS() { + fNEvent = 0; + fNumber = 0; + fG = 0.; + fG2 = 0.; + } + + SpeciesInfoAOS(const SpeciesInfoAOS &right) // Species A(B); + { + fNEvent = right.fNEvent; + fNumber = right.fNumber; + fG = right.fG; + fG2 = right.fG2; + fName = right.fName; + } + + SpeciesInfoAOS &operator=(const SpeciesInfoAOS &right) // A = B + { + if (&right == this) return *this; + fNEvent = right.fNEvent; + fNumber = right.fNumber; + fG = right.fG; + fG2 = right.fG2; + fName = right.fName; + return *this; + } + + Int_t fNEvent; + Int_t fNumber; + Double_t fG; + Double_t fG2; + string fName; +}; + +//------------------------------------------------------------------------ + +struct SpeciesInfoSOA { + SpeciesInfoSOA() { + fRelatErr = 0; + } + + SpeciesInfoSOA(const SpeciesInfoSOA &right) : + fG(right.fG), + fGerr(right.fGerr), + fTime(right.fTime), + fRelatErr(right.fRelatErr), + fName(right.fName) {} + + SpeciesInfoSOA &operator=(const SpeciesInfoSOA &right) { + if (this == &right) return *this; + fG = right.fG; + fGerr = right.fGerr; + fTime = right.fTime; + fRelatErr = right.fRelatErr; + fName = right.fName; + return *this; + } + + std::vector fG; + std::vector fGerr; + std::vector fTime; + Double_t fRelatErr; + Double_t fMin, fMax; + string fName; +}; + +const char *filetypes[] = { + "PostScript", "*.ps", + "Encapsulated PostScript", "*.eps", + "PDF files", "*.pdf", + "Gif files", "*.gif", + "PNG files", "*.png", + "All files", "*", + 0, 0 +}; + +TGTab *gTab = nullptr; + +void Save() +{ + TGFileInfo fi; + fi.fFileTypes = filetypes; + + new TGFileDialog(gClient->GetRoot(),gClient->GetRoot(),kFDSave,&fi); + gROOT->GetListOfCanvases()->At(gTab->GetCurrent())->SaveAs(fi.fFilename); +} + +void plotG_time() { + + gROOT->SetStyle("Plain"); + gStyle->SetPalette(1); + gStyle->SetCanvasBorderMode(0); + gStyle->SetFrameBorderMode(0); + gStyle->SetPadTickX(1); + gStyle->SetPadTickY(1); + + TGMainFrame *main = new TGMainFrame(gClient->GetRoot(), 200, 200); + TGTab *fTab = new TGTab(main, 200, 200); + + Double_t timeA, sumG, sumG2; + Int_t speciesID, number, nEvent; + char speciesName[500]; + + + TFile *file = new TFile; + file = TFile::Open("Dose_0.root"); + + TDirectoryFile *dir = dynamic_cast(file->Get("ntuple")); + TTree *tree = (TTree *) dir->Get("0.010000"); + tree->SetBranchAddress("speciesID", &speciesID); + tree->SetBranchAddress("number", &number); + tree->SetBranchAddress("nEvent", &nEvent); + tree->SetBranchAddress("speciesName", &speciesName); + tree->SetBranchAddress("time", &timeA); + tree->SetBranchAddress("sumG", &sumG); + tree->SetBranchAddress("sumG2", &sumG2); + + Long64_t nentries = tree->GetEntries(); + + if (nentries == 0) { + cout << "No entries found in the tree species contained in the file " + << file->GetPath() << endl; + exit(1); + } + + std::map> speciesTimeInfo; + + for (Int_t j = 0; j < nentries; j++) { + tree->GetEntry(j); + + SpeciesInfoAOS &infoAOS = speciesTimeInfo[speciesID][timeA]; + + infoAOS.fNumber += number; + infoAOS.fG += sumG; + infoAOS.fG2 += sumG2; + infoAOS.fNEvent += nEvent; + infoAOS.fName = speciesName; + } + + std::map speciesInfo; + + auto it_SOA = speciesTimeInfo.begin(); + auto end_SOA = speciesTimeInfo.end(); + + + for (; it_SOA != end_SOA; ++it_SOA) { + const Int_t _speciesID = it_SOA->first; + SpeciesInfoSOA &info = speciesInfo[_speciesID]; + + auto it2 = it_SOA->second.begin(); + auto end2 = it_SOA->second.end(); + + info.fName = it2->second.fName; + const size_t size2 = it_SOA->second.size(); + info.fG.resize(size2); + info.fGerr.resize(size2); + info.fTime.resize(size2); + + Int_t color = (2 + _speciesID) % TColor::GetNumberOfColors(); + if (color == 5 || color == 10 || color == 0) ++color; + + for (int i2 = 0; it2 != end2; ++it2, ++i2) { + SpeciesInfoAOS &infoAOS = it2->second; + + Double_t _SumG2 = infoAOS.fG2; + Double_t _MeanG = infoAOS.fG / infoAOS.fNEvent; + Double_t _Gerr = sqrt((_SumG2 / infoAOS.fNEvent - pow(_MeanG, 2)) + / (infoAOS.fNEvent - 1)); + + info.fG[i2] = _MeanG; + info.fGerr[i2] = _Gerr; + info.fTime[i2] = it2->first; + + info.fRelatErr += _Gerr / (_MeanG + 1e-30); + if(info.fG[i2] != 0) + { + std::cout<AddTab(info.fName.c_str()); + TGCompositeFrame *frame = new TGCompositeFrame(tf, 60, 60, + kHorizontalFrame); + + tf->AddFrame(frame, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, + 10, 10, 10, 2)); + + TRootEmbeddedCanvas *c1 = new TRootEmbeddedCanvas(info.fName.c_str(), + frame, 700, 500); + frame->AddFrame(c1, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY, + 10, 10, 10, 2)); + c1->GetCanvas()->SetLogx(); + + TGHorizontalFrame *hframe = new TGHorizontalFrame(tf, 200, 40); + + TGTextButton *save = new TGTextButton(hframe, "&Save as ...", + "Save()"); + hframe->AddFrame(save, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4)); + + TGTextButton *exit = new TGTextButton(hframe, "&Exit ", + "gApplication->Terminate()"); + hframe->AddFrame(exit, new TGLayoutHints(kLHintsCenterX, 5, 5, 3, 4)); + + tf->AddFrame(hframe, new TGLayoutHints(kLHintsCenterX, 2, 2, 2, 2)); + + gSpecies->SetTitle(info.fName.c_str()); + gSpecies->SetMarkerStyle(20 + _speciesID); + gSpecies->SetMarkerColor(color); + gSpecies->SetLineColor(color); + gSpecies->GetXaxis()->SetTitle("Time (ns)"); + gSpecies->GetXaxis()->SetTitleOffset(1.1); + gSpecies->GetYaxis()->SetTitle("G value (molecules/100 eV)"); + gSpecies->GetYaxis()->SetTitleOffset(1.2); + gSpecies->Draw("ALP"); + } + + main->AddFrame(fTab, new TGLayoutHints(kLHintsBottom | kLHintsExpandX | + kLHintsExpandY, 2, 2, 5, 1)); + + main->MapSubwindows(); + main->Resize(); // resize to default size + main->MapWindow(); + +} + diff --git a/examples/extended/medical/dna/UHDR/pulseShape.dat b/examples/extended/medical/dna/UHDR/pulseShape.dat new file mode 100644 index 00000000000..312ad84b35f --- /dev/null +++ b/examples/extended/medical/dna/UHDR/pulseShape.dat @@ -0,0 +1,95 @@ +0.833333333 2.62655 +1.666666667 6.83524 +2.5 12.553 +3.333333333 17.0223 +4.166666667 24.7406 +5 32.4819 +5.833333333 42.8519 +6.666666667 48.6027 +7.5 56.4824 +8.333333333 62.09 +9.166666667 69.1621 +10 74.3751 +10.83333333 80.2126 +11.66666667 83.9005 +12.5 87.5853 +13.33333333 89.5126 +14.16666667 91.5201 +15 92.4811 +15.83333333 92.9938 +16.66666667 93.4008 +17.5 93.3343 +18.33333333 93.0633 +19.16666667 92.4693 +20 91.6022 +20.83333333 90.8025 +21.66666667 90.1 +22.5 89.1324 +23.33333333 88.3259 +24.16666667 87.0589 +25 85.7656 +25.83333333 84.1971 +26.66666667 83.1376 +27.5 82.2867 +28.33333333 81.4951 +29.16666667 80.594 +30 79.6264 +30.83333333 78.6214 +31.66666667 77.5289 +32.5 76.521 +33.33333333 75.6933 +34.16666667 75.028 +35 74.2267 +35.83333333 73.3055 +36.66666667 72.6401 +37.5 72.0123 +38.33333333 71.4163 +39.16666667 70.8578 +40 70.3184 +40.83333333 69.7047 +41.66666667 69.1162 +42.5 68.7255 +43.33333333 68.2682 +44.16666667 67.7121 +45 67.311 +45.83333333 66.9099 +46.66666667 66.5897 +47.5 66.3253 +48.33333333 66.0608 +49.16666667 65.7764 +50 65.453 +50.83333333 65.1296 +51.66666667 64.8234 +52.5 64.5258 +53.33333333 64.2282 +54.16666667 63.9305 +55 63.6328 +55.83333333 63.079 +56.66666667 60.5713 +57.5 37.4664 +58.33333333 40.3387 +59.16666667 43.7965 +60 45.9804 +60.83333333 36.3683 +61.66666667 29.7977 +62.5 30.6857 +63.33333333 30.2191 +64.16666667 26.0506 +65 19.788 +65.83333333 18.1777 +66.66666667 16.052 +67.5 13.2789 +68.33333333 10.394 +69.16666667 8.90658 +70 6.26689 +70.83333333 4.90529 +71.66666667 3.5856 +72.5 2.12792 +73.33333333 1.50895 +74.16666667 0.889984 +75 0 +75.83333333 0 +76.66666667 0 +77.5 0 +78.33333333 0 +79.16666667 0 \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/src/ActionInitialization.cc b/examples/extended/medical/dna/UHDR/src/ActionInitialization.cc new file mode 100644 index 00000000000..2b44391f2b5 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/ActionInitialization.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. * +// ******************************************************************** + +#include "ActionInitialization.hh" +#include "ChemistryWorld.hh" +#include "DetectorConstruction.hh" +#include "G4DNAChemistryManager.hh" +#include "G4DNAEventScheduler.hh" +#include "G4DNAScavengerMaterial.hh" +#include "G4H2O.hh" +#include "G4Molecule.hh" +#include "G4MoleculeCounter.hh" +#include "G4MoleculeGun.hh" +#include "G4Scheduler.hh" +#include "PrimaryGeneratorAction.hh" +#include "RunAction.hh" +#include "StackingAction.hh" +#include "TimeStepAction.hh" +#include "PulseAction.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +ActionInitialization::ActionInitialization(DetectorConstruction *pDetector) + : G4VUserActionInitialization(), fpDetector(pDetector) {} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ActionInitialization::BuildForMaster() const { + SetUserAction(new RunAction()); + G4DNAChemistryManager::Instance()->ResetCounterWhenRunEnds(false); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ActionInitialization::Build() const { + G4MoleculeCounter::Instance()->Use(true); + G4MoleculeCounter::Instance()->DontRegister(G4H2O::Definition()); + G4MoleculeCounter::Instance()->SetVerbose(0); + G4MoleculeCounter::Instance()->CheckTimeForConsistency(false); + auto pPulseAction = new PulseAction(); + SetUserAction(pPulseAction); + SetUserAction(new PrimaryGeneratorAction(fpDetector)); + auto pRunAction = new RunAction(); + SetUserAction(pRunAction); + SetUserAction(new StackingAction()); + auto pChemWorld = fpDetector->GetChemistryWorld(); + auto pScavenger = + std::make_unique(pChemWorld); + // To counter Scavenger + dynamic_cast(pScavenger.get()) + ->SetCounterAgainstTime(); + G4Scheduler::Instance()->SetScavengerMaterial(std::move(pScavenger)); + auto timeStepAction = new TimeStepAction(pChemWorld, pPulseAction); + auto eventScheduler = timeStepAction->GetEventScheduler(); + pRunAction->SetEventScheduler(eventScheduler); + G4Scheduler::Instance()->SetUserAction(timeStepAction); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/UHDR/src/BoundedBrownianAction.cc b/examples/extended/medical/dna/UHDR/src/BoundedBrownianAction.cc new file mode 100644 index 00000000000..5ca48640942 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/BoundedBrownianAction.cc @@ -0,0 +1,86 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + +#include "BoundedBrownianAction.hh" +#include "G4DNABoundingBox.hh" +#include "G4Molecule.hh" +#include "G4Track.hh" + +BoundedBrownianAction::BoundedBrownianAction() + : G4VUserBrownianAction() {} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double BoundedBrownianAction::GetDistanceToBoundary(const G4Track &track) { + if (!fpBoundingBox->contains(track.GetPosition())) { + G4ExceptionDescription errMsg; + errMsg << "Point is out of box : " << *fpBoundingBox + << " of particle : " << GetIT(track)->GetName() << "(" + << track.GetTrackID() << ") : " << track.GetPosition(); + G4Exception("BoundedBrownianAction::GetDistanceToBoundary" + "BoundedBrownianAction", + "BoundedBrownianAction", FatalErrorInArgument, + errMsg); + } + + auto dx = std::min(track.GetPosition().getX() - fpBoundingBox->Getxlo(), + fpBoundingBox->Getxhi() - track.GetPosition().getX()); + auto dy = std::min(track.GetPosition().getY() - fpBoundingBox->Getylo(), + fpBoundingBox->Getyhi() - track.GetPosition().getY()); + auto dz = std::min(track.GetPosition().getZ() - fpBoundingBox->Getzlo(), + fpBoundingBox->Getzhi() - track.GetPosition().getZ()); + return std::min({dx, dy, dz}); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void BoundedBrownianAction::Transport(G4ThreeVector &nextposition, G4Track *) { + BouncingAction(nextposition); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void BoundedBrownianAction::BouncingAction(G4ThreeVector &nextposition) const { + if (nextposition.getX() <= fpBoundingBox->Getxlo()) { + nextposition.setX(2 * fpBoundingBox->Getxlo() - nextposition.getX()); + } + if (nextposition.getX() >= fpBoundingBox->Getxhi()) { + nextposition.setX(2 * fpBoundingBox->Getxhi() - nextposition.getX()); + } + if (nextposition.getY() <= fpBoundingBox->Getylo()) { + nextposition.setY(2 * fpBoundingBox->Getylo() - nextposition.getY()); + } + if (nextposition.getY() >= fpBoundingBox->Getyhi()) { + nextposition.setY(2 * fpBoundingBox->Getyhi() - nextposition.getY()); + } + if (nextposition.getZ() <= fpBoundingBox->Getzlo()) { + nextposition.setZ(2 * fpBoundingBox->Getzlo() - nextposition.getZ()); + } + if (nextposition.getZ() >= fpBoundingBox->Getzhi()) { + nextposition.setZ(2 * fpBoundingBox->Getzhi() - nextposition.getZ()); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/UHDR/src/ChemFrickeReactionBuilder.cc b/examples/extended/medical/dna/UHDR/src/ChemFrickeReactionBuilder.cc new file mode 100644 index 00000000000..b3b088d9767 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/ChemFrickeReactionBuilder.cc @@ -0,0 +1,85 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + + +#include "ChemFrickeReactionBuilder.hh" +#include "G4DNAMolecularReactionTable.hh" +#include "G4MoleculeTable.hh" +#include "G4SystemOfUnits.hh" + +void ChemFrickeReactionBuilder::FrickeDosimeterReaction(G4DNAMolecularReactionTable *pReactionTable) { + auto OH = G4MoleculeTable::Instance()->GetConfiguration("OH"); + auto OHm = G4MoleculeTable::Instance()->GetConfiguration("OHm"); + + G4MolecularConfiguration *H2O2 = + G4MoleculeTable::Instance()->GetConfiguration("H2O2"); + G4MolecularConfiguration *HO2 = + G4MoleculeTable::Instance()->GetConfiguration("HO2"); + G4MolecularConfiguration *HO2m = + G4MoleculeTable::Instance()->GetConfiguration("HO2m"); + G4MolecularConfiguration *Fepp = + G4MoleculeTable::Instance()->GetConfiguration("Fepp"); + G4MolecularConfiguration *Feppp = + G4MoleculeTable::Instance()->GetConfiguration("Feppp"); + + G4MolecularConfiguration *HSO4m = + G4MoleculeTable::Instance()->GetConfiguration("HSO4m"); + G4MolecularConfiguration *SO4m = + G4MoleculeTable::Instance()->GetConfiguration("SO4m"); + + G4DNAMolecularReactionData *reactionData = nullptr; + +//------------------------------------------------------------------ +//Fepp(B) + OH -> Feppp + OHm + reactionData = new G4DNAMolecularReactionData( + 3.4e8 * (1e-3 * m3 / (mole * s)), Fepp, OH); + reactionData->AddProduct(Feppp); + reactionData->AddProduct(OHm); + pReactionTable->SetReaction(reactionData); +//------------------------------------------------------------------ +//Fepp(B) + HO2 -> Feppp + HO2m + reactionData = new G4DNAMolecularReactionData( + 7.9e5 * (1e-3 * m3 / (mole * s)), Fepp, HO2); + reactionData->AddProduct(Feppp); + reactionData->AddProduct(HO2m); + pReactionTable->SetReaction(reactionData); +//------------------------------------------------------------------ +//Fepp(B) + H2O2 -> Feppp + OH + OHm + reactionData = new G4DNAMolecularReactionData( + 52 * (1e-3 * m3 / (mole * s)), Fepp, H2O2); + reactionData->AddProduct(Feppp); + reactionData->AddProduct(OH); + reactionData->AddProduct(OHm); + pReactionTable->SetReaction(reactionData); +//------------------------------------------------------------------ + +//HSO4m(B) + OH -> SO4- + H2O + reactionData = new G4DNAMolecularReactionData( + 1.5e5 * (1e-3 * m3 / (mole * s)), HSO4m, OH); + reactionData->AddProduct(SO4m); + pReactionTable->SetReaction(reactionData); + +} \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/src/ChemNO2_NO3ScavengerBuilder.cc b/examples/extended/medical/dna/UHDR/src/ChemNO2_NO3ScavengerBuilder.cc new file mode 100644 index 00000000000..5e50ff4e46c --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/ChemNO2_NO3ScavengerBuilder.cc @@ -0,0 +1,66 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + + +#include "ChemNO2_NO3ScavengerBuilder.hh" +#include "G4DNAMolecularReactionTable.hh" +#include "G4MoleculeTable.hh" +#include "G4SystemOfUnits.hh" + +void ChemNO2_NO3ScavengerBuilder + ::NO2_NO3ScavengerReaction( + G4DNAMolecularReactionTable *pReactionTable) { + auto e_aq = G4MoleculeTable::Instance()->GetConfiguration("e_aq"); + auto OH = G4MoleculeTable::Instance()->GetConfiguration("OH"); + auto OHm = G4MoleculeTable::Instance()->GetConfiguration("OHm"); + auto NO2 = G4MoleculeTable::Instance()->GetConfiguration("NO2"); + auto NO2m = G4MoleculeTable::Instance()->GetConfiguration("NO2m"); + auto NO2mm = G4MoleculeTable::Instance()->GetConfiguration("NO2mm"); + auto NO3m = G4MoleculeTable::Instance()->GetConfiguration("NO3m"); + auto NO3mm = G4MoleculeTable::Instance()->GetConfiguration("NO3mm"); + + G4DNAMolecularReactionData *reactionData = nullptr; + //------------------------------------------------------------------ + // e_aq + NO2- -> NO2-- + reactionData = new G4DNAMolecularReactionData( + 3.5e9 * (1e-3 * m3 / (mole * s)), e_aq, NO2m); + reactionData->AddProduct(NO2mm); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // OH + NO2- -> NO2 + OH- + reactionData = + new G4DNAMolecularReactionData(8e9 * (1e-3 * m3 / (mole * s)), OH, NO2m); + reactionData->AddProduct(NO2); + reactionData->AddProduct(OHm); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // e_aq + NO3- -> NO3-- + reactionData = new G4DNAMolecularReactionData( + 9.7e9 * (1e-3 * m3 / (mole * s)), e_aq, NO3m); + reactionData->AddProduct(NO3mm); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ +} \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/src/ChemOxygenWaterBuilder.cc b/examples/extended/medical/dna/UHDR/src/ChemOxygenWaterBuilder.cc new file mode 100644 index 00000000000..9ac64490c82 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/ChemOxygenWaterBuilder.cc @@ -0,0 +1,383 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + +#include "ChemOxygenWaterBuilder.hh" +#include "G4DNAMolecularReactionTable.hh" +#include "G4MoleculeTable.hh" +#include "G4SystemOfUnits.hh" + +void ChemOxygenWaterBuilder::OxygenScavengerReaction + (G4DNAMolecularReactionTable *pReactionTable) { + //----------------------------------- + // Get the molecular configuration + G4MolecularConfiguration *e_aq = + G4MoleculeTable::Instance()->GetConfiguration("e_aq"); + G4MolecularConfiguration *H = + G4MoleculeTable::Instance()->GetConfiguration("H"); + G4MolecularConfiguration *HO2 = + G4MoleculeTable::Instance()->GetConfiguration("HO2"); + G4MolecularConfiguration *Om = + G4MoleculeTable::Instance()->GetConfiguration("Om"); + G4MolecularConfiguration *O2 = + G4MoleculeTable::Instance()->GetConfiguration("O2"); + G4MolecularConfiguration *O2m = + G4MoleculeTable::Instance()->GetConfiguration("O2m"); + G4MolecularConfiguration *O3m = + G4MoleculeTable::Instance()->GetConfiguration("O3m"); + + G4DNAMolecularReactionData *reactionData = nullptr; + // Oxygen concentration + // e_aq + O2(B) -> O2- + reactionData = new G4DNAMolecularReactionData( + 2.3e10 * (1e-3 * m3 / (mole * s)), e_aq, O2); + reactionData->AddProduct(O2m); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // H + O2(B) -> HO2 + reactionData = + new G4DNAMolecularReactionData(1.3e10 * (1e-3 * m3 / (mole * s)), H, O2); + reactionData->AddProduct(HO2); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // O- + O2(B) -> O3- + reactionData = + new G4DNAMolecularReactionData(3.7e9 * (1e-3 * m3 / (mole * s)), Om, O2); + reactionData->AddProduct(O3m); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ +} + +void ChemOxygenWaterBuilder::SecondOrderReactionExtended( + G4DNAMolecularReactionTable *pReactionTable) { + //----------------------------------- + // Get the molecular configuration + G4MolecularConfiguration *OH = + G4MoleculeTable::Instance()->GetConfiguration("OH"); + G4MolecularConfiguration *OHm = + G4MoleculeTable::Instance()->GetConfiguration("OHm"); + G4MolecularConfiguration *e_aq = + G4MoleculeTable::Instance()->GetConfiguration("e_aq"); + G4MolecularConfiguration *H2 = + G4MoleculeTable::Instance()->GetConfiguration("H2"); + G4MolecularConfiguration *H3Op = + G4MoleculeTable::Instance()->GetConfiguration("H3Op"); + G4MolecularConfiguration *H = + G4MoleculeTable::Instance()->GetConfiguration("H"); + G4MolecularConfiguration *H2O2 = + G4MoleculeTable::Instance()->GetConfiguration("H2O2"); + + G4MolecularConfiguration *HO2 = + G4MoleculeTable::Instance()->GetConfiguration("HO2"); + G4MolecularConfiguration *HO2m = + G4MoleculeTable::Instance()->GetConfiguration("HO2m"); + G4MolecularConfiguration *Om = + G4MoleculeTable::Instance()->GetConfiguration("Om"); + G4MolecularConfiguration *O2 = + G4MoleculeTable::Instance()->GetConfiguration("O2"); + G4MolecularConfiguration *O2m = + G4MoleculeTable::Instance()->GetConfiguration("O2m"); + G4MolecularConfiguration *O3m = + G4MoleculeTable::Instance()->GetConfiguration("O3m"); + + // second order + G4DNAMolecularReactionData *reactionData = nullptr; + // Type I + //------------------------------------------------------------------ + // *H + *H -> H2 + reactionData = + new G4DNAMolecularReactionData(0.503e10 * (1e-3 * m3 / (mole * s)), H, H); + reactionData->AddProduct(H2); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // e_aq + H* + H2O -> H2 + OH- + reactionData = new G4DNAMolecularReactionData( + 2.50e10 * (1e-3 * m3 / (mole * s)), e_aq, H); + reactionData->AddProduct(OHm); + reactionData->AddProduct(H2); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // e_aq + e_aq + 2H2O -> H2 + 2OH- + reactionData = new G4DNAMolecularReactionData( + 0.636e10 * (1e-3 * m3 / (mole * s)), e_aq, e_aq); + reactionData->AddProduct(OHm); + reactionData->AddProduct(OHm); + reactionData->AddProduct(H2); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // H3O+ + OH- -> 2H2O + reactionData = new G4DNAMolecularReactionData( + 1.13e11 * (1e-3 * m3 / (mole * s)), H3Op, OHm); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // *OH + *H -> H2O + reactionData = + new G4DNAMolecularReactionData(1.55e10 * (1e-3 * m3 / (mole * s)), OH, H); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // *OH + *OH -> H2O2 + reactionData = new G4DNAMolecularReactionData( + 0.55e10 * (1e-3 * m3 / (mole * s)), OH, OH); + reactionData->AddProduct(H2O2); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // e_aq + *OH -> OH- + reactionData = new G4DNAMolecularReactionData( + 2.95e10 * (1e-3 * m3 / (mole * s)), e_aq, OH); + reactionData->AddProduct(OHm); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // e_aq + H2O2 -> OH- + *OH + reactionData = new G4DNAMolecularReactionData( + 1.10e10 * (1e-3 * m3 / (mole * s)), e_aq, H2O2); + reactionData->AddProduct(OHm); + reactionData->AddProduct(OH); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // e_aq + H3O+ -> H* + H2O + reactionData = new G4DNAMolecularReactionData( + 2.11e10 * (1e-3 * m3 / (mole * s)), e_aq, H3Op); + reactionData->AddProduct(H); + pReactionTable->SetReaction(reactionData); + + // extended + //------------------------------------------------------------------ + // H + O- -> OH- + reactionData = + new G4DNAMolecularReactionData(2.00e10 * (1e-3 * m3 / (mole * s)), H, Om); + reactionData->AddProduct(OHm); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // H3O+ + O3- -> OH + O2 + reactionData = new G4DNAMolecularReactionData( + 9.0e10 * (1e-3 * m3 / (mole * s)), H3Op, O3m); + reactionData->AddProduct(OH); + reactionData->AddProduct(O2); // add to Scavenger + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // H + HO2 -> H2O2 + reactionData = new G4DNAMolecularReactionData( + 1.00e10 * (1e-3 * m3 / (mole * s)), H, HO2); + reactionData->AddProduct(H2O2); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // H + O2- -> HO2- + reactionData = new G4DNAMolecularReactionData( + 1.00e10 * (1e-3 * m3 / (mole * s)), H, O2m); + reactionData->AddProduct(HO2m); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // OH + O2- -> O2 + OH- + reactionData = new G4DNAMolecularReactionData( + 1.07e10 * (1e-3 * m3 / (mole * s)), OH, O2m); + reactionData->AddProduct(O2); // added to Scavenger + reactionData->AddProduct(OHm); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // e_aq + O2- -> H2O2 + OH- + OH- + reactionData = new G4DNAMolecularReactionData( + 1.3e10 * (1e-3 * m3 / (mole * s)), e_aq, O2m); + reactionData->AddProduct(H2O2); + reactionData->AddProduct(OHm); + reactionData->AddProduct(OHm); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // e_aq + HO2- -> O- + OH- + reactionData = new G4DNAMolecularReactionData( + 3.51e9 * (1e-3 * m3 / (mole * s)), e_aq, HO2m); + reactionData->AddProduct(Om); + reactionData->AddProduct(OHm); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // e_aq + O- -> OH- + OH- + reactionData = new G4DNAMolecularReactionData( + 2.31e10 * (1e-3 * m3 / (mole * s)), e_aq, Om); + reactionData->AddProduct(OHm); + reactionData->AddProduct(OHm); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // H3O+ + O2- -> HO2 + reactionData = new G4DNAMolecularReactionData( + 4.78e10 * (1e-3 * m3 / (mole * s)), H3Op, O2m); + reactionData->AddProduct(HO2); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // H3O+ + HO2- -> H2O2 + reactionData = new G4DNAMolecularReactionData( + 4.78e10 * (1e-3 * m3 / (mole * s)), H3Op, HO2m); + reactionData->AddProduct(H2O2); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // H3O+ + O- -> OH + reactionData = new G4DNAMolecularReactionData( + 4.78e10 * (1e-3 * m3 / (mole * s)), H3Op, Om); + reactionData->AddProduct(OH); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // eaq + HO2 -> HO2- + reactionData = new G4DNAMolecularReactionData( + 1.29e10 * (1e-3 * m3 / (mole * s)), e_aq, HO2); + reactionData->AddProduct(HO2m); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // OH + OH- -> O- + reactionData = new G4DNAMolecularReactionData( + 1.27e10 * (1e-3 * m3 / (mole * s)), OH, OHm); + reactionData->AddProduct(Om); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // OH + HO2 -> O2 + reactionData = new G4DNAMolecularReactionData( + 7.90e9 * (1e-3 * m3 / (mole * s)), OH, HO2); + reactionData->AddProduct(O2); // added to Scavenger + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // OH + HO2- -> HO2 + OH- + reactionData = new G4DNAMolecularReactionData( + 8.32e9 * (1e-3 * m3 / (mole * s)), OH, HO2m); + reactionData->AddProduct(HO2); + reactionData->AddProduct(OHm); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // OH + O- -> HO2- + reactionData = + new G4DNAMolecularReactionData(1.00e9 * (1e-3 * m3 / (mole * s)), OH, Om); + reactionData->AddProduct(HO2m); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // OH + O3- -> O2- + HO2 + reactionData = new G4DNAMolecularReactionData( + 8.50e9 * (1e-3 * m3 / (mole * s)), OH, O3m); + reactionData->AddProduct(O2m); + reactionData->AddProduct(HO2); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // OH- + HO2 -> O2- + reactionData = new G4DNAMolecularReactionData( + 1.27e10 * (1e-3 * m3 / (mole * s)), OHm, HO2);//Frongillo 1.27e10 + reactionData->AddProduct(O2m); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // H2O2 + OH- -> HO2- + reactionData = + new G4DNAMolecularReactionData( + 1.3e10 * (1e-3 * m3 / (mole * s)), H2O2, + OHm); // Elliot 1.3e10, Plante 4.71e8 + reactionData->AddProduct(HO2m); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // H2O2 + O- -> HO2 + OH- + reactionData = new G4DNAMolecularReactionData( + 5.55e8 * (1e-3 * m3 / (mole * s)), H2O2, Om); + reactionData->AddProduct(HO2); + reactionData->AddProduct(OHm); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // H2 + O- -> H + OH- + reactionData = + new G4DNAMolecularReactionData( + 1.21e8 * (1e-3 * m3 / (mole * s)), H2, Om); + reactionData->AddProduct(H); + reactionData->AddProduct(OHm); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // O2- + O- -> O2 + OH- + OH- + reactionData = new G4DNAMolecularReactionData( + 6.00e8 * (1e-3 * m3 / (mole * s)), O2m, Om); + reactionData->AddProduct(O2); + reactionData->AddProduct(OHm); + reactionData->AddProduct(OHm); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // HO2- + O- -> O2- + OH- + reactionData = new G4DNAMolecularReactionData( + 3.50e8 * (1e-3 * m3 / (mole * s)), HO2m, Om); + reactionData->AddProduct(O2m); + reactionData->AddProduct(OHm); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // O- + O- -> H2O2 + OH- + OH- + reactionData = + new G4DNAMolecularReactionData(1.00e8 * (1e-3 * m3 / (mole * s)), Om, Om); + reactionData->AddProduct(H2O2); + reactionData->AddProduct(OHm); + reactionData->AddProduct(OHm); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // O- + O3- -> O2- + O2- + reactionData = new G4DNAMolecularReactionData( + 7.00e8 * (1e-3 * m3 / (mole * s)), Om, O3m); + reactionData->AddProduct(O2m); + reactionData->AddProduct(O2m); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // H + OH- -> eaq- + reactionData = + new G4DNAMolecularReactionData(2.51e7 * (1e-3 * m3 / (mole * s)), H, OHm); + reactionData->AddProduct(e_aq); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // H + H2O2 -> OH + reactionData = new G4DNAMolecularReactionData( + 3.50e7 * (1e-3 * m3 / (mole * s)), H, H2O2); + reactionData->AddProduct(OH); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // OH + H2O2 -> HO2 + reactionData = new G4DNAMolecularReactionData( + 2.88e7 * (1e-3 * m3 / (mole * s)), OH, H2O2); + reactionData->AddProduct(HO2); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // OH + H2 -> H + reactionData = + new G4DNAMolecularReactionData(3.28e7 * (1e-3 * m3 / (mole * s)), OH, H2); + reactionData->AddProduct(H); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // HO2 + HO2 -> H2O2 + O2 + reactionData = new G4DNAMolecularReactionData( + 9.80e5 * (1e-3 * m3 / (mole * s)), HO2, HO2); + reactionData->AddProduct(H2O2); + reactionData->AddProduct(O2); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // HO2 + O2- -> HO2- + O2 + + reactionData = new G4DNAMolecularReactionData( + 9.70e7 * (1e-3 * m3 / (mole * s)), HO2, O2m); + reactionData->AddProduct(HO2m); + reactionData->AddProduct(O2); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // hoang added. this must be rare + // O2- + O2- -> H2O2 + O2 + 2 OH- + reactionData = new G4DNAMolecularReactionData( + 1.0e2 * (1e-3 * m3 / (mole * s)), O2m, O2m); + reactionData->AddProduct(H2O2); + reactionData->AddProduct(O2); + reactionData->AddProduct(OHm); + reactionData->AddProduct(OHm); + pReactionTable->SetReaction(reactionData); +} \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/src/ChemPureWaterBuilder.cc b/examples/extended/medical/dna/UHDR/src/ChemPureWaterBuilder.cc new file mode 100644 index 00000000000..ad3e852c78f --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/ChemPureWaterBuilder.cc @@ -0,0 +1,164 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + +#include "ChemPureWaterBuilder.hh" +#include "G4DNAMolecularReactionTable.hh" +#include "G4MoleculeTable.hh" +#include "G4SystemOfUnits.hh" + +void ChemPureWaterBuilder::WaterScavengerReaction( + G4DNAMolecularReactionTable *pReactionTable) { + // Get the molecular configuration + G4MolecularConfiguration *OH = + G4MoleculeTable::Instance()->GetConfiguration("OH"); + G4MolecularConfiguration *e_aq = + G4MoleculeTable::Instance()->GetConfiguration("e_aq"); + G4MolecularConfiguration *H = + G4MoleculeTable::Instance()->GetConfiguration("H"); + G4MolecularConfiguration *H2O2 = + G4MoleculeTable::Instance()->GetConfiguration("H2O2"); + G4MolecularConfiguration *HO2 = + G4MoleculeTable::Instance()->GetConfiguration("HO2"); + G4MolecularConfiguration *HO2m = + G4MoleculeTable::Instance()->GetConfiguration("HO2m"); + G4MolecularConfiguration *Om = + G4MoleculeTable::Instance()->GetConfiguration("Om"); + G4MolecularConfiguration *O2 = + G4MoleculeTable::Instance()->GetConfiguration("O2"); + G4MolecularConfiguration *O2m = + G4MoleculeTable::Instance()->GetConfiguration("O2m"); + G4MolecularConfiguration *O3m = + G4MoleculeTable::Instance()->GetConfiguration("O3m"); + + G4MolecularConfiguration *H2O = + G4MoleculeTable::Instance()->GetConfiguration("H2O"); + G4MolecularConfiguration *H3OpB = + G4MoleculeTable::Instance()->GetConfiguration("H3Op(B)"); + G4MolecularConfiguration *OHmB = + G4MoleculeTable::Instance()->GetConfiguration("OHm(B)"); + + // Type VI + // First order reaction + //------------------------------------------------------------------ + // O3- + H2OB -> O- + O2 + auto reactionData = new G4DNAMolecularReactionData(2.66e3 / s, O3m, H2O); + reactionData->AddProduct(Om); + reactionData->AddProduct(O2); + pReactionTable->SetReaction(reactionData); + + //------------------------------------------------------------------ + // HO2 + H2O -> H3O+ + O2- + //4.78e10*std::pow(10, -pka) = 757578.95 + reactionData = new G4DNAMolecularReactionData(7.58e5 / s, HO2, H2O); + reactionData->AddProduct(H3OpB); + reactionData->AddProduct(O2m); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // H + H2O -> eaq- + H3O+ 5.94 / s + reactionData = new G4DNAMolecularReactionData(6.32e0 / s, H, H2O);//6.32e0 * + reactionData->AddProduct(e_aq); + reactionData->AddProduct(H3OpB); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // eaq- + H2O -> H + OH- 15.8 / s + reactionData = new G4DNAMolecularReactionData(1.58e1 / s, e_aq, H2O); + reactionData->AddProduct(H); + reactionData->AddProduct(OHmB); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // O2- + H2O -> HO2 + OH- 0.15 / s ?????????????????? + reactionData = new G4DNAMolecularReactionData(0.15 / s, O2m, + H2O); // 0.15 or 1.36e6(Elliot) + reactionData->AddProduct(HO2); + reactionData->AddProduct(OHmB); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // HO2- + H2O -> H2O2 + OH- 1.36e6 / s + reactionData = new G4DNAMolecularReactionData(1.36e6 / s, HO2m, H2O); // + reactionData->AddProduct(H2O2); + reactionData->AddProduct(OHmB); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // O- + H2O -> OH + OH- 1.36e6 / s + reactionData = new G4DNAMolecularReactionData(1.36e6 / s, Om, H2O); + reactionData->AddProduct(OH); + reactionData->AddProduct(OHmB); + pReactionTable->SetReaction(reactionData); + + // pH + + //------------------------------------------------------------------ + // eaq- + H3O+(B) -> H + H2O 2.09e3 / s + reactionData = new G4DNAMolecularReactionData( + 2.11e10 * (1e-3 * m3 / (mole * s)), e_aq, + H3OpB); // 2.11e10 (e_aq + H3O+) * 1.0e-7 (Ph=7) = 2.09e3 + reactionData->AddProduct(H); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // O2- + H3O+(B) -> HO2 + H2O 4.73e3 / s + reactionData = new G4DNAMolecularReactionData( + 4.78e10 * (1e-3 * m3 / (mole * s)), O2m, + H3OpB); // 4.78e10(O2- + H3O+) * 1e-7(pH7) = 4.73e3 + reactionData->AddProduct(HO2); + pReactionTable->SetReaction(reactionData); + + //------------------------------------------------------------------ + // H + OH-(B) -> H2O + eaq- 2.49e3 / s + reactionData = new G4DNAMolecularReactionData( + 2.51e7 * (1e-3 * m3 / (mole * s)), H, + OHmB); // 2.51e7 (H + OH-)* 1e-7 (pH) = 2.48e0 + reactionData->AddProduct(e_aq); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // OH + OH-(B) -> O- + H2O 6.24e2 / s + reactionData = new G4DNAMolecularReactionData( + 1.27e10 * (1e-3 * m3 / (mole * s)), OH, + OHmB); // 6.30e9 (OH + OH-) * 1e-7 (pH) = 6.24e2 + reactionData->AddProduct(Om); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // H2O2 + OH-(B) -> HO2- + H2O 4.66e2 / s + reactionData = new G4DNAMolecularReactionData( + 1.27e10 * (1e-3 * m3 / (mole * s)), H2O2, + OHmB); // 4.71e8 (H2O2 + OH-) * 1e-7 (pH) = 4.66e1 + reactionData->AddProduct(HO2m); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // HO2 + OH-(B) -> O2- + H2O 6.24e2 / s + //Frongillo 1.27e10 + reactionData = new G4DNAMolecularReactionData( + 1.27e10 * (1e-3 * m3 / (mole * s)), HO2, + OHmB); // 6.30e9(HO2 + OH-)*1e-7 (pH) = 6.24e2 + reactionData->AddProduct(O2m); + pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // O(3p) + OH-(B) -> HO2- 4.16e1 / s + // reactionData = new G4DNAMolecularReactionData( + // 4.16e1 / s, O,OHmB);// + // reactionData->AddProduct(HO2m); + // pReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ +} \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/src/ChemistryWorld.cc b/examples/extended/medical/dna/UHDR/src/ChemistryWorld.cc new file mode 100644 index 00000000000..7c115b8fd4b --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/ChemistryWorld.cc @@ -0,0 +1,124 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + +#include "ChemistryWorld.hh" +#include "G4DNABoundingBox.hh" +#include "G4DNAMolecularReactionTable.hh" +#include "G4MoleculeTable.hh" + +ChemistryWorld::ChemistryWorld() : G4VChemistryWorld(), G4UImessenger() { + fpChemWoldDir = std::make_unique("/UHDR/env/", false); + fpChemWoldDir->SetGuidance("chemistry environment commands"); + + fpAddpH = std::make_unique("/UHDR/env/pH", this); + fpAddpH->SetGuidance("Add pH for water."); + fpAddpH->SetParameterName("pH", false); + fpAddpH->SetToBeBroadcasted(false); + + fpAddScavengerName = + std::make_unique("/UHDR/env/scavenger", this); + fpAddScavengerName->SetToBeBroadcasted(false); + + fpTargetVolume = std::make_unique("/UHDR/env/volume", this); + fpTargetVolume->SetGuidance("Volume of water."); + fpTargetVolume->SetParameterName("Volume", false); + fpTargetVolume->AvailableForStates(G4State_PreInit); + fpTargetVolume->SetToBeBroadcasted(false); +} + +void ChemistryWorld::ConstructChemistryBoundary() { + fHalfBox = 1.6 * um; // halfBox + std::initializer_list l{fHalfBox, -fHalfBox, fHalfBox, + -fHalfBox, fHalfBox, -fHalfBox}; + fpChemistryBoundary = std::make_unique(l); +} + +void ChemistryWorld::SetNewValue(G4UIcommand *command, G4String newValue) { + if (command == fpAddpH.get()) { + fpH = fpAddpH->GetNewDoubleValue(newValue); + ConstructChemistryComponents(); + } else if (command == fpAddScavengerName.get()) { + std::istringstream iss(newValue); + G4String species; + iss >> species; + auto scavengerConf = G4MoleculeTable::Instance()->GetConfiguration(species); + G4double concentraion; + iss >> concentraion; + G4String unit; + iss >> unit; + if (unit == "M") { + G4double ConcentrationInM = concentraion / (mole * liter); + fpChemicalComponent[scavengerConf] = ConcentrationInM; + } else if (unit == "mM") { + G4double ConcentrationInM = concentraion / (mole * liter * 1e3); + fpChemicalComponent[scavengerConf] = ConcentrationInM; + } else if (unit == "uM") { + G4double ConcentrationInM = concentraion / (mole * liter * 1e6); + fpChemicalComponent[scavengerConf] = ConcentrationInM; + } else if (unit == "%") // only for O2 + { + G4double ConcentrationInM = + (concentraion / 100) * 0.0013 / (mole * liter); + fpChemicalComponent[scavengerConf] = ConcentrationInM; + } else { + throw std::runtime_error("Unit should be in Molarity"); + } + }else if (command == fpTargetVolume.get()) { + fHalfBox = G4UIcmdWithADoubleAndUnit::GetNewDoubleValue(newValue); + std::initializer_list l{fHalfBox, -fHalfBox, fHalfBox, + -fHalfBox, fHalfBox, -fHalfBox}; + fpChemistryBoundary = std::make_unique(l); + } + +} + +void ChemistryWorld::ConstructChemistryComponents() { + auto O2 = G4MoleculeTable::Instance()->GetConfiguration("O2"); + auto H2O = G4MoleculeTable::Instance()->GetConfiguration("H2O"); + auto H3Op = G4MoleculeTable::Instance()->GetConfiguration("H3Op(B)"); + auto OHm = G4MoleculeTable::Instance()->GetConfiguration("OHm(B)"); + +//////////////////////////////////////////////////////////////////// +// Water is defined from NIST material database +// water 55.3 M, 9.9x10-8 M, and 9.9x10-8 M +// water density = 18.01528 g/mol * 55.3 M = 996.24498 g/l +// H3OpB density = 1 g/mol * 9.9x10-8 M +// OHmB density = 17.01528 g/mol * 9.9x10-8 M +// O2B density = 15.999 g/mol * 2.58e-4 M +///////////////////////////////////////////////////////////////// + G4double pKw = 14; // at 25°C pK of water is 14 + G4double waterMolarity = 55.3 / (mole * liter); // 55.3 M + fpChemicalComponent[H2O] = waterMolarity; + + G4double H3OpBMolarity = std::pow(10, -fpH) / (mole * liter); // pH = 7 + fpChemicalComponent[H3Op] = H3OpBMolarity; + + G4double OHmBMolarity = std::pow(10, -(pKw - fpH)) / (mole * liter); // pH = 7 + fpChemicalComponent[OHm] = OHmBMolarity; + // oxygen + G4double O2Molarity = (0. / 100) * 0.0013 / (mole * liter); + fpChemicalComponent[O2] = O2Molarity; +} \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/src/DetectorConstruction.cc b/examples/extended/medical/dna/UHDR/src/DetectorConstruction.cc new file mode 100644 index 00000000000..a24cf36b925 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/DetectorConstruction.cc @@ -0,0 +1,90 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#include "DetectorConstruction.hh" +#include "ChemistryWorld.hh" +#include "G4Box.hh" +#include "G4Electron_aq.hh" +#include "G4LogicalVolume.hh" +#include "G4MultiFunctionalDetector.hh" +#include "G4NistManager.hh" +#include "G4PVPlacement.hh" +#include "G4SDManager.hh" +#include "G4UnitsTable.hh" +#include "G4VChemistryWorld.hh" +#include "G4VPrimitiveScorer.hh" +#include "G4VisAttributes.hh" +#include "Scorer.hh" + +DetectorConstruction::DetectorConstruction() : G4VUserDetectorConstruction() { + fpChemistryWorld = std::make_unique(); + fpChemistryWorld->ConstructChemistryBoundary(); +} + +G4VPhysicalVolume *DetectorConstruction::Construct() { + auto water = G4NistManager::Instance()->FindOrBuildMaterial("G4_WATER"); + auto boudingBox = fpChemistryWorld->GetChemistryBoundary(); + G4double world_sizeXYZ = 2 * boudingBox->halfSideLengthInY(); + + G4cout << "DetectorConstruction::world_sizeXYZ : " + << G4BestUnit(world_sizeXYZ, "Length") << G4endl; + + auto solidWorld = new G4Box("World", 0.5 * world_sizeXYZ, 0.5 * world_sizeXYZ, + 0.5 * world_sizeXYZ); + + auto logicWorld = new G4LogicalVolume(solidWorld, water, "World"); + + G4VPhysicalVolume *physWorld = + new G4PVPlacement(nullptr, // no rotation + G4ThreeVector(), // its position at (0,0,0) + logicWorld, // its logical volume + "World", // its name + nullptr, // its mother volume + false, // no boolean operation + 0, // copy number + true); // checking overlaps + + return physWorld; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void DetectorConstruction::ConstructSDandField() { + G4SDManager::GetSDMpointer()->SetVerboseLevel(1); + auto mfDetector = new G4MultiFunctionalDetector("mfDetector"); + //the order of G4VPrimitiveScorer to define ID number + G4VPrimitiveScorer *pDose = new Scorer(); + dynamic_cast *>(pDose)->SetChemistryWorld( + fpChemistryWorld.get()); + mfDetector->RegisterPrimitive(pDose); + G4VPrimitiveScorer *gValues = new Scorer(); + dynamic_cast *>(gValues)->SetChemistryWorld( + fpChemistryWorld.get()); + mfDetector->RegisterPrimitive(gValues); + G4SDManager::GetSDMpointer()->AddNewDetector(mfDetector); + SetSensitiveDetector("World", mfDetector); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/UHDR/src/EmDNAChemistry.cc b/examples/extended/medical/dna/UHDR/src/EmDNAChemistry.cc new file mode 100644 index 00000000000..35edec0f2a7 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/EmDNAChemistry.cc @@ -0,0 +1,505 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +#include "EmDNAChemistry.hh" +#include "G4DNAChemistryManager.hh" +#include "G4DNAWaterDissociationDisplacer.hh" +#include "G4ProcessManager.hh" +#include "G4SystemOfUnits.hh" + +// *** Processes and models for Geant4-DNA + +#include "BoundedBrownianAction.hh" +#include "G4DNABrownianTransportation.hh" +#include "G4DNAElectronHoleRecombination.hh" +#include "G4DNAElectronSolvation.hh" +#include "G4DNAMolecularDissociation.hh" +#include "G4DNAMolecularReactionTable.hh" +#include "G4DNAMolecularStepByStepModel.hh" +#include "G4DNASmoluchowskiReactionModel.hh" +#include "G4DNASancheExcitationModel.hh" +#include "G4DNAVibExcitation.hh" +// particles + +#include "G4Electron.hh" + +#include "G4Electron_aq.hh" +#include "G4H2O.hh" +#include "G4H2O2.hh" +#include "G4H3O.hh" +#include "G4HO2.hh" +#include "G4Hydrogen.hh" +#include "G4MoleculeTable.hh" +#include "G4O2.hh" +#include "G4O3.hh" +#include "G4OH.hh" +#include "G4Oxygen.hh" +#include "G4PhysicsListHelper.hh" +/****/ +#include "G4DNAMoleculeEncounterStepper.hh" +#include "G4DNAScavengerProcess.hh" +#include "G4MolecularConfiguration.hh" +#include "G4ProcessTable.hh" +#include "G4VChemistryWorld.hh" +/****/ +#include "G4ChemicalMoleculeFinder.hh" +// factory +#include "G4PhysicsConstructorFactory.hh" + +#include "ChemPureWaterBuilder.hh" + +#include "G4ChemDissociationChannels_option1.hh" +#include "ChemOxygenWaterBuilder.hh" + +G4_DECLARE_PHYSCONSTR_FACTORY(EmDNAChemistry); + +EmDNAChemistry::EmDNAChemistry() + : G4VUserChemistryList(true) { + G4DNAChemistryManager::Instance()->SetChemistryList(this); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +EmDNAChemistry::~EmDNAChemistry() = default; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void EmDNAChemistry::ConstructMolecule() { + + G4ChemDissociationChannels_option1::ConstructMolecule(); + + auto H3OpB = G4MoleculeTable::Instance()->GetConfiguration("H3Op(B)"); + H3OpB->SetDiffusionCoefficient(9.46e-9 * (m2 / s)); + + auto OHm = G4MoleculeTable::Instance()->GetConfiguration("OHm(B)"); + OHm->SetDiffusionCoefficient(5.3e-9 * (m2 / s)); + G4MoleculeTable::Instance()->CreateConfiguration("H2O", G4H2O::Definition()); + + auto G4NO2 = new G4MoleculeDefinition("NO_2",/*mass*/ 30, + /*D*/ 0 * (m * m / s), + /*charge*/0, + /*electronL*/0, + /*radius*/0.17 * nm);//should be corrected + + auto G4NO3 = new G4MoleculeDefinition("NO_3",/*mass*/ 38, + /*D*/ 0 * (m * m / s), + /*charge*/0, + /*electronL*/0, + /*radius*/0.17 * nm);//should be corrected + + G4MoleculeTable::Instance()->CreateConfiguration("NO2", G4NO2); + G4MoleculeTable::Instance()->CreateConfiguration("NO2m", + G4NO2, + -1, // charge + 0 * (m2 / s)); + G4MoleculeTable::Instance()-> + CreateConfiguration("NO2mm", + G4NO2, + -2, // charge + 0 * (m2 / s)); + + G4MoleculeTable::Instance()-> + CreateConfiguration("NO3m", + G4NO3, + -1, // charge + 0 * (m2 / s)); + + G4MoleculeTable::Instance()-> + CreateConfiguration("NO3mm", + G4NO3, + -2, // charge + 0 * (m2 / s)); + + //FrickeDosimeter + auto G4Fe = new G4MoleculeDefinition("Fe", + /*mass*/ 55.84 * g / Avogadro * c_squared, + /*D*/ 0 * (m * m / s), + /*charge*/ 0, + /*electronL*/ 0, + /*radius*/ 0.35 * nm); // can be adjusted + + G4MoleculeTable::Instance()->CreateConfiguration("Fe0",G4Fe); + + G4MoleculeTable::Instance()->CreateConfiguration("Feppp", + G4Fe, + 3, // charge + 4.86e-10 * (m2 /s));//Michael Spiro* and Andrew M. Creeth + + G4MoleculeTable::Instance()->CreateConfiguration("Fepp", + G4Fe, + 2, // charge + 5.78e-10 * (m2/s)); + //HSO4- + auto G4HSO4 = new G4MoleculeDefinition("HSO4", + /*mass*/ 55.84 * g / Avogadro * c_squared, + /*D*/ 0 * (m * m / s), + /*charge*/ 0, + /*electronL*/ 0, + /*radius*/ 0.35 * nm); // can be adjusted + G4MoleculeTable::Instance()->CreateConfiguration("HSO4m", + G4HSO4, + -1, // charge + 0 * (m2/s)); + + //SO4- + auto G4SO4 = new G4MoleculeDefinition("SO4", + /*mass*/ 55.84 * g / Avogadro * c_squared, + /*D*/ 0 * (m * m / s), + /*charge*/ 0, + /*electronL*/ 0, + /*radius*/ 0.35 * nm); // can be adjusted + G4MoleculeTable::Instance()->CreateConfiguration("SO4m", + G4SO4, + -1, // charge + 0 * (m2/s)); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void EmDNAChemistry::ConstructDissociationChannels() { + G4ChemDissociationChannels_option1::ConstructDissociationChannels(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void EmDNAChemistry::ConstructReactionTable( + G4DNAMolecularReactionTable *pReactionTable) { + ChemOxygenWaterBuilder::OxygenScavengerReaction(pReactionTable); + ChemOxygenWaterBuilder::SecondOrderReactionExtended(pReactionTable); + ChemPureWaterBuilder::WaterScavengerReaction(pReactionTable); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void EmDNAChemistry::ConstructProcess() { + auto O2 = G4MoleculeTable::Instance()->GetConfiguration("O2"); + auto O2m = G4MoleculeTable::Instance()->GetConfiguration("O2m"); + auto HO2 = G4MoleculeTable::Instance()->GetConfiguration("HO2"); + + auto e_aq = G4MoleculeTable::Instance()->GetConfiguration("e_aq"); + auto OH = G4MoleculeTable::Instance()->GetConfiguration("OH"); + auto OHm = G4MoleculeTable::Instance()->GetConfiguration("OHm"); + + auto NO2 = G4MoleculeTable::Instance()->GetConfiguration("NO2"); + auto NO2m = G4MoleculeTable::Instance()->GetConfiguration("NO2m"); + auto NO2mm = G4MoleculeTable::Instance()->GetConfiguration("NO2mm"); + auto NO3m = G4MoleculeTable::Instance()->GetConfiguration("NO3m"); + auto NO3mm = G4MoleculeTable::Instance()->GetConfiguration("NO3mm"); + + auto H2O2 = G4MoleculeTable::Instance()->GetConfiguration("H2O2"); + auto H = G4MoleculeTable::Instance()->GetConfiguration("H"); + + G4MolecularConfiguration *H3OpB = + G4MoleculeTable::Instance()->GetConfiguration("H3Op(B)"); + G4MolecularConfiguration *OHmB = + G4MoleculeTable::Instance()->GetConfiguration("OHm(B)"); + G4MolecularConfiguration *HO2m = + G4MoleculeTable::Instance()->GetConfiguration("HO2m"); + G4MolecularConfiguration *Om = + G4MoleculeTable::Instance()->GetConfiguration("Om"); + G4MolecularConfiguration *O3m = + G4MoleculeTable::Instance()->GetConfiguration("O3m"); + G4MolecularConfiguration *H3Op = + G4MoleculeTable::Instance()->GetConfiguration("H3Op"); + + fpChemistryWorld->ConstructChemistryComponents(); + auto confinedBox = fpChemistryWorld->GetChemistryBoundary(); + + G4PhysicsListHelper *ph = G4PhysicsListHelper::GetPhysicsListHelper(); + + //=============================================================== + // Extend vibrational to low energy + // Anyway, solvation of electrons is taken into account from 7.4 eV + // So below this threshold, for now, no accurate modeling is done + // + G4VProcess *process = G4ProcessTable::GetProcessTable()->FindProcess( + "e-_G4DNAVibExcitation", "e-"); + + if (process) { + auto vibExcitation = (G4DNAVibExcitation *)process; + G4VEmModel *model = vibExcitation->EmModel(); + auto sancheExcitationMod = + dynamic_cast(model); + if (sancheExcitationMod) { + sancheExcitationMod->ExtendLowEnergyLimit(0.025 * eV); + } + } + + //=============================================================== + // *** Electron Solvatation *** + // + process = G4ProcessTable::GetProcessTable()->FindProcess( + "e-_G4DNAElectronSolvation", "e-"); + + if (process == nullptr) { + ph->RegisterProcess(new G4DNAElectronSolvation("e-_G4DNAElectronSolvation"), + G4Electron::Definition()); + } + + //=============================================================== + // Define processes for molecules + // + G4MoleculeTable *theMoleculeTable = G4MoleculeTable::Instance(); + G4MoleculeDefinitionIterator iterator = + theMoleculeTable->GetDefintionIterator(); + iterator.reset(); + + while (iterator()) { + G4MoleculeDefinition *moleculeDef = iterator.value(); + + if (moleculeDef != G4H2O::Definition()) { + auto brown = new G4DNABrownianTransportation("BrowianTransportation"); + // hoang exp + auto brownTransport = new BoundedBrownianAction(); + brownTransport->SetBoundary(*confinedBox); + brown->SetUserBrownianAction(brownTransport); + // hoang exp + + ph->RegisterProcess(brown, moleculeDef); + } else { + moleculeDef->GetProcessManager()->AddRestProcess( + new G4DNAElectronHoleRecombination(), 2); + auto brownTransport = new BoundedBrownianAction(); + brownTransport->SetBoundary(*confinedBox); + auto dissociationProcess = + new G4DNAMolecularDissociation("H2O_DNAMolecularDecay", fDecay); + dissociationProcess->SetUserBrownianAction(brownTransport); + dissociationProcess->SetDisplacer(moleculeDef, + new G4DNAWaterDissociationDisplacer); + moleculeDef->GetProcessManager()->AddRestProcess(dissociationProcess, 1); + } + + if (moleculeDef == G4Hydrogen::Definition()) { + // O2 + auto scanvergerProcess = + new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); + //------------------------------------------------------------------ + // H + O2(B) -> HO2 + auto reactionData = new G4DNAMolecularReactionData( + 1.3e10 * (1e-3 * m3 / (mole * s)), H, O2); + reactionData->AddProduct(HO2); + scanvergerProcess->SetReaction(H, reactionData); + //------------------------------------------------------------------ + // H + OH-(B) -> H2O + eaq- 2.49e3 / s + reactionData = new G4DNAMolecularReactionData( + 2.49e7 * (1e-3 * m3 / (mole * s)), H, + OHmB); // 2.51e7 (H + OH-)* 1e-7 (pH) = 2.48e0 + reactionData->AddProduct(e_aq); + scanvergerProcess->SetReaction(H, reactionData); + + // H2O2 + //------------------------------------------------------------------ + // H + H202 -> OH + H20 + // reactionData = new G4DNAMolecularReactionData( + // 9.0e7 * (1e-3 * m3 / (mole * s)), H,H2O2); + // reactionData->AddProduct(OH); + // scanvergerProcess->SetReaction(H,reactionData); + ph->RegisterProcess(scanvergerProcess, moleculeDef); + } + if (moleculeDef == G4Electron_aq::Definition()) { + auto scanvergerProcess = + new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); + G4DNAMolecularReactionData *reactionData = nullptr; + //------------------------------------------------------------------ + // e_aq + O2(B) -> O2- + reactionData = new G4DNAMolecularReactionData( + 2.3e10 * (1e-3 * m3 / (mole * s)), e_aq, O2); + reactionData->AddProduct(O2m); + scanvergerProcess->SetReaction(e_aq, reactionData); + //------------------------------------------------------------------ + // eaq- + H3O+(B) -> H + H2O 2.09e3 / s + reactionData = new G4DNAMolecularReactionData( + 2.25e10 * (1e-3 * m3 / (mole * s)), e_aq, + H3OpB); // 2.11e10 (e_aq + H3O+) * 1.0e-7 (Ph=7) = 2.09e3 + reactionData->AddProduct(H); + scanvergerProcess->SetReaction(e_aq, reactionData); + //------------------------------------------------------------------ + // e_aq + NO2- -> NO2-- + reactionData = new G4DNAMolecularReactionData( + 3.5e9 * (1e-3 * m3 / (mole * s)), e_aq, NO2m); + reactionData->AddProduct(NO2mm); + scanvergerProcess->SetReaction(e_aq, reactionData); + //------------------------------------------------------------------ + // e_aq + NO3- -> NO3-- + reactionData = new G4DNAMolecularReactionData( + 9.7e9 * (1e-3 * m3 / (mole * s)), e_aq, NO3m); + reactionData->AddProduct(NO3mm); + scanvergerProcess->SetReaction(e_aq, reactionData); + //------------------------------------------------------------------ + + // H2O2 + e aq → OHm + OH + // reactionData = new G4DNAMolecularReactionData( + // 1.1e10 * (1e-3 * m3 / (mole * s)), e_aq, H2O2);//or + // reactionData->AddProduct(OHm); + // reactionData->AddProduct(OH); + // scanvergerProcess->SetReaction(e_aq,reactionData); + + ph->RegisterProcess(scanvergerProcess, moleculeDef); + } + if (moleculeDef == G4O2::Definition()) { + auto scanvergerProcess = + new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); + G4DNAMolecularReactionData *reactionData = nullptr; + //------------------------------------------------------------------ + // O2- + H3O+(B) -> HO2 + H2O 4.73e3 / s + reactionData = new G4DNAMolecularReactionData( + 4.78e10 * (1e-3 * m3 / (mole * s)), O2m, + H3OpB); // 4.78e10(O2- + H3O+) * 1e-7(pH7) = 4.73e3 + reactionData->AddProduct(HO2); + scanvergerProcess->SetReaction(O2m, reactionData); + ph->RegisterProcess(scanvergerProcess, moleculeDef); + } + if (moleculeDef == + G4ParticleTable::GetParticleTable()->FindParticle("OHm")) { + auto scanvergerProcess = + new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); + G4DNAMolecularReactionData *reactionData = nullptr; + //------------------------------------------------------------------ + // OH- + H3O+(B) -> 2H2O 1.11e4 / s + reactionData = new G4DNAMolecularReactionData( + 1.13e11 * (1e-3 * m3 / (mole * s)), OHm, + H3OpB); // 1.13e11 (H3O+ + OH-) * 1e-7 (pH=7) =1.12e4 + scanvergerProcess->SetReaction(OHm, reactionData); + ph->RegisterProcess(scanvergerProcess, moleculeDef); + } + if (moleculeDef == G4OH::Definition()) { + auto scanvergerProcess = + new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); + G4DNAMolecularReactionData *reactionData = nullptr; + + //------------------------------------------------------------------ + // OH + OH-(B) -> O- + H2O 6.24e2 / s + reactionData = new G4DNAMolecularReactionData( + 1.27e10 * (1e-3 * m3 / (mole * s)), OH, + OHmB); // 6.30e9 (OH + OH-) * 1e-7 (pH) = 6.24e2 + reactionData->AddProduct(Om); + scanvergerProcess->SetReaction(OH, reactionData); + + //------------------------------------------------------------------ + // OH + NO2- -> NO2 + OH- + reactionData = new G4DNAMolecularReactionData( + 8e9 * (1e-3 * m3 / (mole * s)), OH, NO2m); + reactionData->AddProduct(NO2); + reactionData->AddProduct(OHm); + scanvergerProcess->SetReaction(OH, reactionData); + ph->RegisterProcess(scanvergerProcess, moleculeDef); + } + if (moleculeDef == + G4ParticleTable::GetParticleTable()->FindParticle("HO_2m")) { + auto scanvergerProcess = + new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); + G4DNAMolecularReactionData *reactionData = nullptr; + //------------------------------------------------------------------ + // HO2- + H3O+(B) -> H2O2 + H2O 4.98e3 / s + reactionData = new G4DNAMolecularReactionData( + 4.78e10 * (1e-3 * m3 / (mole * s)), HO2m, + H3OpB); // 5.00e10 (H3O+ + HO2-) * 1e-7(pH) = 4.95e3 + reactionData->AddProduct(H2O2); + scanvergerProcess->SetReaction(HO2m, reactionData); + ph->RegisterProcess(scanvergerProcess, moleculeDef); + } + + if (moleculeDef == G4HO2::Definition()) { + auto scanvergerProcess = + new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); + G4DNAMolecularReactionData *reactionData = nullptr; + //------------------------------------------------------------------ + // HO2 + OH-(B) -> O2- + H2O 6.24e2 / s + reactionData = new G4DNAMolecularReactionData( + 1.27e10 * (1e-3 * m3 / (mole * s)), HO2, + OHmB); // 6.30e9(HO2 + OH-)*1e-7 (pH) = 6.24e2 + reactionData->AddProduct(O2m); + scanvergerProcess->SetReaction(HO2, reactionData); + //------------------------------------------------------------------ + ph->RegisterProcess(scanvergerProcess, moleculeDef); + } + if (moleculeDef == G4Oxygen::Definition()) { + auto scanvergerProcess = + new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); + G4DNAMolecularReactionData *reactionData = nullptr; + //------------------------------------------------------------------ + // O- + H3O+(B) -> OH + H2O 4.73e3 / s + reactionData = new G4DNAMolecularReactionData( + 4.78e10 * (1e-3 * m3 / (mole * s)), Om, + H3OpB); // 4.78e10 (H3O+ + O2-) * 1e-7(pH) = 4.73e3 + reactionData->AddProduct(OH); + scanvergerProcess->SetReaction(Om, reactionData); + ph->RegisterProcess(scanvergerProcess, moleculeDef); + } + if (moleculeDef == G4O3::Definition()) { + auto scanvergerProcess = + new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); + G4DNAMolecularReactionData *reactionData = nullptr; + //------------------------------------------------------------------ + // O3- + H3O+(B) -> OH + O2 + H2O 8.91e3 / s + reactionData = new G4DNAMolecularReactionData( + 9.0e10 * (1e-3 * m3 / (mole * s)), O3m, + H3OpB); // 9.0e10 (O3- + H3O+) * 1e-7(pH) = 8.91e3 + reactionData->AddProduct(OH); + reactionData->AddProduct(O2); + //------------------------------------------------------------------ + scanvergerProcess->SetReaction(O3m, reactionData); + ph->RegisterProcess(scanvergerProcess, moleculeDef); + } + if (moleculeDef == G4H3O::Definition()) { + auto scanvergerProcess = + new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); + G4DNAMolecularReactionData *reactionData = nullptr; + //------------------------------------------------------------------ + // H3O+ + OH-(B) -> 2H2O 1.11e4 / s + reactionData = new G4DNAMolecularReactionData( + 1.13e11 * (1e-3 * m3 / (mole * s)), H3Op, + OHmB); // 1.13e11 (H3O+ + OH-) * 1e-7 (pH=7) = 1.12e4 + scanvergerProcess->SetReaction(H3Op, reactionData); + ph->RegisterProcess(scanvergerProcess, moleculeDef); + } + if (moleculeDef == G4H2O2::Definition()) { + auto scanvergerProcess = + new G4DNAScavengerProcess("G4DNAScavengerProcess", *confinedBox); + G4DNAMolecularReactionData *reactionData = nullptr; + //------------------------------------------------------------------ + // H2O2 + OH-(B) -> HO2- + H2O 4.66e2 / s + reactionData = new G4DNAMolecularReactionData( + 1.27e10 * (1e-3 * m3 / (mole * s)), H2O2, + OHmB); // 4.71e8 (H2O2 + OH-) * 1e-7 (pH) = 4.66e1 + reactionData->AddProduct(HO2m); + scanvergerProcess->SetReaction(H2O2, reactionData); + ph->RegisterProcess(scanvergerProcess, moleculeDef); + } + } + G4DNAChemistryManager::Instance()->Initialize(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void EmDNAChemistry::ConstructTimeStepModel( + G4DNAMolecularReactionTable *reactionTable) { + auto reactionRadiusComputer = new G4DNASmoluchowskiReactionModel(); + reactionTable->PrintTable(reactionRadiusComputer); + auto stepByStep = new G4DNAMolecularStepByStepModel(); + stepByStep->SetReactionModel(reactionRadiusComputer); + RegisterTimeStepModel(stepByStep, 0); +} + diff --git a/examples/extended/medical/dna/UHDR/src/PhysicsList.cc b/examples/extended/medical/dna/UHDR/src/PhysicsList.cc new file mode 100644 index 00000000000..691a6a414a8 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/PhysicsList.cc @@ -0,0 +1,67 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +#include "PhysicsList.hh" +#include "DetectorConstruction.hh" +#include "EmDNAChemistry.hh" +#include "G4EmDNAPhysics_option2.hh" +#include "G4PhysicsConstructorRegistry.hh" +#include "G4SystemOfUnits.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PhysicsList::PhysicsList(DetectorConstruction *pDetector) + : G4VModularPhysicsList(), + fEmDNAPhysicsList(new G4EmDNAPhysics_option2(verboseLevel)), + fEmDNAChemistryList(new EmDNAChemistry) { + G4double currentDefaultCut = 0.01 * mm; + G4ProductionCutsTable::GetProductionCutsTable()->SetEnergyRange(100 * eV, + 1 * GeV); + SetDefaultCutValue(currentDefaultCut); + fEmDNAChemistryList->SetChemistryWorld(*(pDetector->GetChemistryWorld())); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PhysicsList::ConstructParticle() { + if (fEmDNAPhysicsList != nullptr) { + fEmDNAPhysicsList->ConstructParticle(); + } + if (fEmDNAChemistryList != nullptr) { + fEmDNAChemistryList->ConstructParticle(); + } +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PhysicsList::ConstructProcess() { + AddTransportation(); + if (fEmDNAPhysicsList != nullptr) { + fEmDNAPhysicsList->ConstructProcess(); + } + if (fEmDNAChemistryList != nullptr) { + fEmDNAChemistryList->ConstructProcess(); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/src/PrimaryGeneratorAction.cc b/examples/extended/medical/dna/UHDR/src/PrimaryGeneratorAction.cc new file mode 100644 index 00000000000..9132176dfe9 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/PrimaryGeneratorAction.cc @@ -0,0 +1,94 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#include "PrimaryGeneratorAction.hh" +#include "ChemistryWorld.hh" +#include "DetectorConstruction.hh" +#include "G4Event.hh" +#include "G4ParticleDefinition.hh" +#include "G4ParticleGun.hh" +#include "G4ParticleTable.hh" +#include "G4SingleParticleSource.hh" +#include "G4SystemOfUnits.hh" +#include "PrimaryGeneratorMessenger.hh" +#include "G4Electron.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +PrimaryGeneratorAction::PrimaryGeneratorAction(DetectorConstruction *pDet) + : G4VUserPrimaryGeneratorAction(), fpDetector(pDet) { + fpMessenger = std::make_unique(this); + fParticleGun = std::make_unique(); + G4ParticleDefinition *particle = G4Electron::Definition(); + fParticleGun->SetParticleDefinition(particle); + fParticleGun->SetNumberOfParticles(1000000); // by user + + auto pPosDist = fParticleGun->GetPosDist(); + pPosDist->SetPosDisType("Plane"); + pPosDist->SetPosDisShape("Square"); + auto faceSiez = fpDetector->GetChemistryWorld() + ->GetChemistryBoundary() + ->halfSideLengthInY(); + pPosDist->SetCentreCoords(G4ThreeVector(0, 0, -faceSiez)); + pPosDist->SetHalfX(faceSiez); + pPosDist->SetHalfY(faceSiez); + + auto pAngleDist = fParticleGun->GetAngDist(); + pAngleDist->SetParticleMomentumDirection(G4ThreeVector(0., 0., 1.)); + + auto pEnergyDis = fParticleGun->GetEneDist(); + pEnergyDis->SetMonoEnergy(0.9999 * MeV); +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void PrimaryGeneratorAction::GeneratePrimaries(G4Event *anEvent) { + G4ParticleDefinition *particle = fParticleGun->GetParticleDefinition(); + auto NumberOfParticlesToBeGenerated = fParticleGun->GetNumberOfParticles(); + auto pPosDist = fParticleGun->GetPosDist(); + auto pAngleDist = fParticleGun->GetAngDist(); + auto pEnDist = fParticleGun->GetEneDist(); + auto rnd = fParticleGun->GetBiasRndm(); + auto charge = particle->GetPDGCharge(); + + for (G4int i = 0; i < NumberOfParticlesToBeGenerated; i++) { + auto angle = pAngleDist->GenerateOne(); + auto energy = pEnDist->GenerateOne(particle); + auto pos = pPosDist->GenerateOne(); + auto mass = particle->GetPDGMass(); + auto p = new G4PrimaryParticle(particle); + auto vertex = new G4PrimaryVertex(pos, 0); + p->SetKineticEnergy(energy); + p->SetMass(mass); + p->SetMomentumDirection(angle); + p->SetCharge(charge); + p->SetPolarization(0., 0., 0.); + + G4double weight = pEnDist->GetWeight() * rnd->GetBiasWeight(); + p->SetWeight(weight); + vertex->SetPrimary(p); + anEvent->AddPrimaryVertex(vertex); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/UHDR/src/PrimaryGeneratorMessenger.cc b/examples/extended/medical/dna/UHDR/src/PrimaryGeneratorMessenger.cc new file mode 100644 index 00000000000..01626be2ff5 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/PrimaryGeneratorMessenger.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. * +// ******************************************************************** +// +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#include "PrimaryGeneratorAction.hh" +#include "G4UIdirectory.hh" +#include "G4UIcmdWithAString.hh" +#include "PrimaryGeneratorMessenger.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4SingleParticleSource.hh" +#include "G4ParticleTable.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PrimaryGeneratorMessenger::PrimaryGeneratorMessenger(PrimaryGeneratorAction *pPrimaryGenerator) + : G4UImessenger(), fpPrimaryGenerator(pPrimaryGenerator) { + fparticle = std::make_unique("/UHDR/source/particle", this); + fparticle->SetGuidance("Add time structure."); + fparticle->SetGuidance("e-, proton, alpha"); + + fenergy = std::make_unique("/UHDR/source/energy", this); + fenergy->SetGuidance("Sets a monocromatic energy (same as gps/energy)"); + fenergy->SetParameterName("monoenergy", false, false); + fenergy->SetDefaultUnit("keV"); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PrimaryGeneratorMessenger::~PrimaryGeneratorMessenger() = default; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PrimaryGeneratorMessenger::SetNewValue(G4UIcommand *command, G4String newValue) { + auto particleGun = fpPrimaryGenerator->GetSPGun(); + if (command == fparticle.get()) { + G4ExceptionDescription ed; + G4ParticleDefinition *pd = G4ParticleTable::GetParticleTable()->FindParticle(newValue); + if (pd != nullptr) { + particleGun->SetParticleDefinition(pd); + } else { + ed << "Particle [" << newValue << "] is not found."; + command->CommandFailed(ed); + } + } else if (command == fenergy.get()) { + auto pEnergyDis = particleGun->GetEneDist(); + pEnergyDis->SetMonoEnergy(fenergy->GetNewDoubleValue(newValue)); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/src/PulseAction.cc b/examples/extended/medical/dna/UHDR/src/PulseAction.cc new file mode 100644 index 00000000000..ca4d20b8de2 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/PulseAction.cc @@ -0,0 +1,193 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// author: hoang tran + +#include + +#include "PulseAction.hh" +#include "G4Track.hh" +#include "Randomize.hh" +#include "PulseActionMessenger.hh" +#include "G4UnitsTable.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PulseAction::PulseAction() : + G4UserTrackingAction() { + fpPulseInfo = std::make_unique(0); + fpMessenger = std::make_unique(this); + Initialize(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PulseInfo::PulseInfo(G4double delayedTime) + : G4VUserPulseInfo(), fDelayedTime(delayedTime) { +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double PulseInfo::GetDelayedTime() const { + return fDelayedTime; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PulseInfo::~PulseInfo() = default; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PulseAction::~PulseAction() = default; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PulseAction::PreUserTrackingAction(const G4Track *pTrack) { + if(fActivePulse) + { + if (pTrack->GetParentID() == 0) { + fDelayedTime = RandomizeInPulse(); + fpPulseInfo = std::make_unique(fDelayedTime); + + G4cout<<"Particle comes at : "<GetDelayedTime(),"Time")<SetUserInformation(pPulseInfo); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double PulseAction::Interpolate(const std::array& data){ + G4double e1 = data[0]; + G4double e2 = data[1]; + G4double e = data[2]; + G4double xs1 = data[3]; + G4double xs2 = data[4]; + G4double value = 0.; + if ((std::log10(e2) - std::log10(e1)) != 0) { + G4double a = (std::log10(xs2) - std::log10(xs1)) + / (std::log10(e2) - std::log10(e1)); + G4double b = std::log10(xs2) - a * std::log10(e2); + G4double sigma = a * std::log10(e) + b; + value = (std::pow(10., sigma)); + } + + if ((e2 - e1) != 0) { + G4double d1 = xs1; + G4double d2 = xs2; + value = (d1 + (d2 - d1) * (e - e1) / (e2 - e1)); + } + return value; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PulseAction::Initialize() { + std::ostringstream FileName; + FileName << "pulseShape.dat"; + std::ifstream input(FileName.str().c_str()); + + if (!input.is_open()) { + G4ExceptionDescription exception; + exception << "pulseShape.dat file not found. Please, provide"; + G4Exception("PulseAction::Initialize()", "PulseAction01", + FatalException, exception); + } + + fPulseVector.clear(); + fPulseVector.push_back(0.); + while (!input.eof()) { + double aTDummy; + double pTDummy; + input >> aTDummy; + if (aTDummy != fPulseVector.back()) { + fPulseVector.push_back(aTDummy); + } + input >> pTDummy; + fPulseData[aTDummy] = pTDummy; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + + +G4double PulseAction::RandomizeInPulse() { + const G4double minTime = 0.; + const G4double maxTime = fPulseLarger;// ns + + G4double MaximumPulse = 0.; + G4int nSteps = 50; + G4double value(minTime); + + for (G4int i = 0; i < nSteps; i++) { + G4double PulseNumber = PulseSpectrum(value); + if (PulseNumber >= MaximumPulse) { + MaximumPulse = PulseNumber; + } + value += maxTime / nSteps; + } + + G4double selectedPulse = 0.; + do { + selectedPulse = G4UniformRand() * (maxTime - minTime); + } while (G4UniformRand() * MaximumPulse > PulseSpectrum(selectedPulse)); + + return selectedPulse; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +double PulseAction::PulseSpectrum(G4double time) { + G4double pulse = 0.; + G4double valueT1 = 0; + G4double valueT2 = 0; + G4double xs1 = 0; + G4double xs2 = 0; + auto t2 = std::upper_bound(fPulseVector.begin(), fPulseVector.end(), time); + auto t1 = t2 - 1; + valueT1 = *t1; + valueT2 = *t2; + xs1 = fPulseData[valueT1]; + xs2 = fPulseData[valueT2]; + G4double xsProduct = xs1 * xs2; + if (xsProduct != 0.) { + std::array a = {valueT1, valueT2, time,xs1,xs2}; + pulse = Interpolate(a); + } + return pulse; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4double PulseAction::GetLonggestDelayedTime() const { + return fLonggestDelayedTime; +} + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/UHDR/src/PulseActionMessenger.cc b/examples/extended/medical/dna/UHDR/src/PulseActionMessenger.cc new file mode 100644 index 00000000000..4e001972f69 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/PulseActionMessenger.cc @@ -0,0 +1,55 @@ +// +// ******************************************************************** +// * 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...... + +#include "PulseAction.hh" +#include "G4UIdirectory.hh" +#include "G4UIcmdWithABool.hh" +#include "PulseActionMessenger.hh" + + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PulseActionMessenger::PulseActionMessenger(PulseAction *pPulse) + : G4UImessenger(), fpPulse(pPulse) { + fListCmd = std::make_unique("/UHDR/pulse/activate", this); + fListCmd->SetGuidance("Add time structure."); + fListCmd->SetDefaultValue(false); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PulseActionMessenger::~PulseActionMessenger() = default; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PulseActionMessenger::SetNewValue(G4UIcommand* command, G4String newValue){ + if (command == fListCmd.get()) { + fpPulse->SetPulse(fListCmd->GetNewBoolValue(newValue)); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/src/Run.cc b/examples/extended/medical/dna/UHDR/src/Run.cc new file mode 100644 index 00000000000..1f01bce2cdb --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/Run.cc @@ -0,0 +1,84 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file Run.cc +/// \brief Implementation of the Run class + +#include "Run.hh" +#include "G4Event.hh" +#include "G4HCofThisEvent.hh" +#include "G4RunManager.hh" +#include "G4SDManager.hh" +#include "Scorer.hh" +#include + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +Run::Run() : G4Run() { + auto mfdet = dynamic_cast( + G4SDManager::GetSDMpointer()->FindSensitiveDetector("mfDetector")); + fpDose = mfdet->GetPrimitive(0);//Dose + fpGvalues = mfdet->GetPrimitive(1);//G-values +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void Run::RecordEvent(const G4Event *event) { + if (event->IsAborted()) { + return; + } + // Hits collections + // + G4HCofThisEvent *pHCE = event->GetHCofThisEvent(); + if (!pHCE) { + return; + } + + auto evtMap = dynamic_cast *>(fpGvalues)->GetEventMap(); + + std::map::iterator itr; + + for (itr = evtMap->GetMap()->begin(); itr != evtMap->GetMap()->end(); itr++) { + G4double edep = *(itr->second); + fSumEne += edep; + } + G4Run::RecordEvent(event); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void Run::Merge(const G4Run *aRun) { + if (aRun == this) { + return; + } + const Run *localRun = dynamic_cast(aRun); + fSumEne += localRun->fSumEne; + auto masterScorer = dynamic_cast *>(this->fpGvalues); + auto localScorer = dynamic_cast *>(localRun->fpGvalues); + masterScorer->AbsorbResultsFromWorkerScorer(localScorer); + G4Run::Merge(aRun); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/UHDR/src/RunAction.cc b/examples/extended/medical/dna/UHDR/src/RunAction.cc new file mode 100644 index 00000000000..74408a9cda0 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/RunAction.cc @@ -0,0 +1,117 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +#include "RunAction.hh" +#include "G4AnalysisManager.hh" +#include "G4DNAEventScheduler.hh" +#include "G4DNAScavengerMaterial.hh" +#include "G4Run.hh" +#include "G4RunManager.hh" +#include "G4Scheduler.hh" +#include "G4SystemOfUnits.hh" +#include "G4VChemistryWorld.hh" +#include "Run.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +RunAction::RunAction() : G4UserRunAction() {} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void RunAction::SetEventScheduler(G4DNAEventScheduler *pEventScheduler) { + fpEventScheduler = pEventScheduler; +} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +G4Run *RunAction::GenerateRun() { + Run *run = new Run(); + return run; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void RunAction::BeginOfRunAction(const G4Run *run) { + G4cout << "### Run " << run->GetRunID() << " starts." << G4endl; + if (G4Threading::IsMultithreadedApplication() && IsMaster()) { + return; + } + auto runInfo = dynamic_cast(run); + auto GvaluesScorer = + dynamic_cast *>(runInfo->GetGvaluesScorer()); + + if (fpEventScheduler != nullptr) { + for (const auto &it: GvaluesScorer->GetpScorer()->fTimeToRecord) { + fpEventScheduler->AddTimeToRecord(it); + } + } + GvaluesScorer->SetEventScheduler(fpEventScheduler); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void RunAction::EndOfRunAction(const G4Run *run) { + G4int nofEvents = run->GetNumberOfEvent(); + if (nofEvents == 0) { + return; + } + auto chem6Run = dynamic_cast(run); + G4double sumDose = chem6Run->GetSumDose(); + + if (G4Threading::IsMultithreadedApplication() && IsMaster()) { + G4cout << G4endl + << "--------------------------End of Global Run------------------------------" + << G4endl << "The run has " << nofEvents << " events " << G4endl; + + auto masterGvaluesScorer = + dynamic_cast *>(chem6Run->GetGvaluesScorer()); + + auto masterDoseLimite = + dynamic_cast *>(chem6Run->GetSumDoseLimit()); + + G4cout << "Number of events recorded by the species scorer : " + << masterGvaluesScorer->GetpScorer()->GetNumberOfRecordedEvents() + << " events " << G4endl; + G4double dose_mean = masterDoseLimite->GetpScorer()->fDosesCutOff / gray; + auto boundingBox = + masterDoseLimite->GetChemistryWorld()->GetChemistryBoundary(); + G4double V = boundingBox->Volume() / cm3; + G4double DoseInGray = (sumDose / eV) / (0.001 * V * 6.242e+18); + G4cout << "Cut-off dose for each beam line : " << dose_mean << " Gy " << G4endl; + G4cout << "Actual dose : " << DoseInGray << " Gy for " << nofEvents + << " events. Actual average dose : " << DoseInGray / nofEvents << " Gy" << G4endl; + masterGvaluesScorer->OutputAndClear(std::to_string(dose_mean)); + + } else { + G4cout << G4endl + << "--------------------------End of Local Run------------------------------" + << G4endl << "The run has " << nofEvents << " events. Scavenger info:" << G4endl; + auto pScavengerMaterial = dynamic_cast( + G4Scheduler::Instance()->GetScavengerMaterial()); + pScavengerMaterial->PrintInfo(); + } + + G4cout << "Total energy deposited in the world volume : " << sumDose / keV + << " keV" << G4endl + << "-------------------------------------------------------------------------" + << G4endl << G4endl; +} \ No newline at end of file diff --git a/examples/extended/medical/dna/UHDR/src/Scorer.cc b/examples/extended/medical/dna/UHDR/src/Scorer.cc new file mode 100644 index 00000000000..63d4bf14d73 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/Scorer.cc @@ -0,0 +1,463 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#include "Scorer.hh" +#include "G4AnalysisManager.hh" +#include "G4DNAEventScheduler.hh" +#include "G4DNAScavengerMaterial.hh" +#include "G4Event.hh" +#include "G4MoleculeTable.hh" +#include "G4PhysicalConstants.hh" +#include "G4RunManager.hh" +#include "G4Scheduler.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4VChemistryWorld.hh" +#include "TimeStepAction.hh" +#include +#include +#include +#include +#include +#include "PrimaryGeneratorAction.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +// Dose +Dose::Dose() + : G4UImessenger(), fpDoseDir(new G4UIdirectory("/scorer/Dose/")), + fpAddDoseCutOff( + new G4UIcmdWithADoubleAndUnit("/scorer/Dose/cutoff", this)) { + fpDoseDir->SetGuidance("Dose scorer commands"); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void Dose::SetNewValue(G4UIcommand *command, G4String newValue) { + if (command == fpAddDoseCutOff.get()) { + fDosesCutOff = G4UIcmdWithADoubleAndUnit::GetNewDoubleValue(newValue); + } +} + +template<> +void Scorer::SetChemistryWorld(G4VChemistryWorld *pChemistryWorld) { + fpChemistryWorld = pChemistryWorld; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +template<> +G4VChemistryWorld *Scorer::GetChemistryWorld() const { + return fpChemistryWorld; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +template<> +void Scorer::clear() { fpScorer->fCumulatedDose = 0.; } + +template<> +void Scorer::Initialize(G4HCofThisEvent *HCE) { + clear(); + fpEvtMap = new G4THitsMap(GetMultiFunctionalDetector()->GetName(), + GetName()); + if (fHCID < 0) { + fHCID = GetCollectionID(0); + } + HCE->AddHitsCollection(fHCID, (G4VHitsCollection *) fpEvtMap); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +template<> +void Scorer::EndOfEvent(G4HCofThisEvent *) { + if (!G4RunManager::GetRunManager()->GetCurrentEvent()->IsAborted()) { + fpEvtMap->add(0, fpScorer->fDosesCutOff); + } + fpScorer->fCumulatedDose = 0.; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +template<> +G4bool Scorer::ProcessHits(G4Step *aStep, G4TouchableHistory *) { + auto currentEvent = G4EventManager::GetEventManager(); + const G4Track *track = aStep->GetTrack(); + auto boundingBox = fpChemistryWorld->GetChemistryBoundary(); + G4double V = boundingBox->Volume() / cm3; + G4double edep = aStep->GetTotalEnergyDeposit(); + if (edep == 0.) { + return false; + } + (fpScorer->fCumulatedDose) += edep; + if (track->GetParentID() == 0 && track->GetCurrentStepNumber() == 1) { + G4double DoseInGray = + ((fpScorer->fCumulatedDose) / eV) / (0.001 * V * 6.242e+18); + if (DoseInGray > fpScorer->fDosesCutOff / gray) { + G4cout << "_____________________________________________________________________________" << G4endl; + auto name = currentEvent->GetConstCurrentEvent()-> + GetPrimaryVertex()->GetPrimary()->GetParticleDefinition()->GetParticleName(); + auto energy = currentEvent->GetConstCurrentEvent()-> + GetPrimaryVertex()->GetPrimary()->GetKineticEnergy(); + G4cout << "Stop this beam line (" << name << ", " << energy << " MeV) at actual dose: " << DoseInGray + << " Gy. Cut-off dose: " << fpScorer->fDosesCutOff / gray + << " Gy" << G4endl; + G4cout << "The beam of "<<1000000 - currentEvent + ->GetStackManager() + ->GetNUrgentTrack() - 1 << " tracks" + << " in a volume of " << V * 1e+12 //convert cm3 to um3 + << " um3. Total deposit energy: " << fpScorer->fCumulatedDose / eV + << " eV. " << G4endl; + G4cout << "_____________________________________________________________________________" << G4endl; + auto myTrack = ((G4Track *) track); + myTrack->SetTrackStatus(fStopAndKill); + auto secondaries = track->GetStep()->GetSecondaryInCurrentStep(); + if (!secondaries->empty()) { + for (auto it: *(secondaries)) { + if (it != nullptr) { + ((G4Track *) it)->SetTrackStatus(fStopAndKill); + } + } + } + currentEvent->GetStackManager()->ClearUrgentStack(); + } + } + return true; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +// Gvalues +Gvalues::Gvalues() + : G4UImessenger(), + fTimeLimit(G4Scheduler::Instance()->GetEndTime()), + fSpeciesdir(new G4UIdirectory("/scorer/Gvalues/")), + fTimeBincmd( + new G4UIcmdWithAnInteger("/scorer/Gvalues/nOfTimeBins", this)), + fAddTimeToRecordcmd(new G4UIcmdWithADoubleAndUnit( + "/scorer/Gvalues/addTimeToRecord", this)){ + fSpeciesdir->SetGuidance("ScoreSpecies commands"); + G4MoleculeCounter::Instance()->ResetCounter(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void Gvalues::SetNewValue(G4UIcommand *command, G4String newValue) { + if (command == fAddTimeToRecordcmd.get()) { + G4double cmdTime = fAddTimeToRecordcmd->GetNewDoubleValue(newValue); + if (fTimeLimit >= cmdTime) { + AddTimeToRecord(cmdTime); + } else { + AddTimeToRecord(fTimeLimit); + } + } + if (command == fTimeBincmd.get()) { + G4int cmdBins = fTimeBincmd->GetNewIntValue(newValue); + G4double timeMin = 1 * ps; + G4double timeMax = G4Scheduler::Instance()->GetEndTime() - timeMin; + G4double timeLogMin = std::log10(timeMin); + G4double timeLogMax = std::log10(timeMax); + for (int i = 0; i <= cmdBins; i++) { + AddTimeToRecord( + std::pow(10, timeLogMin + i * (timeLogMax - timeLogMin) / cmdBins)); + } + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void Gvalues::WriteWithAnalysisManager(G4VAnalysisManager *analysisManager, + const std::string &out) { + analysisManager->CreateNtuple(out, out); + G4cout << "NtupleID : " << fRunID << " name : " << out << G4endl; + analysisManager->CreateNtupleIColumn(fRunID, "speciesID"); + analysisManager->CreateNtupleIColumn(fRunID, "number"); + analysisManager->CreateNtupleIColumn(fRunID, "nEvent"); + analysisManager->CreateNtupleSColumn(fRunID, "speciesName"); + analysisManager->CreateNtupleDColumn(fRunID, "time"); + analysisManager->CreateNtupleDColumn(fRunID, "sumG"); + analysisManager->CreateNtupleDColumn(fRunID, "sumG2"); + analysisManager->FinishNtuple(fRunID); + + for (const auto &it_map1: fSpeciesInfoPerTime) { + const InnerSpeciesMap &map2 = it_map1.second; + for (auto it_map2: map2) { + double time = it_map1.first; + auto species = it_map2.first; + const G4String &name = species->GetName(); + int molID = it_map2.first->GetMoleculeID(); + auto number = it_map2.second.fNumber; + double G = it_map2.second.fG; + double G2 = it_map2.second.fG2; + + analysisManager->FillNtupleIColumn(fRunID, 0, molID); // MolID + analysisManager->FillNtupleIColumn(fRunID, 1, number); // Number + analysisManager->FillNtupleIColumn(fRunID, 2, fNEvent); // Total nb events + analysisManager->FillNtupleSColumn(fRunID, 3, name); // molName + analysisManager->FillNtupleDColumn(fRunID, 4, time); // time + analysisManager->FillNtupleDColumn(fRunID, 5, G); // G + analysisManager->FillNtupleDColumn(fRunID, 6, G2); // G2 + analysisManager->AddNtupleRow(fRunID); + } + } + fRunID++; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +template<> +void Scorer::clear() { + fpEvtMap->clear(); + fpScorer->fNEvent = 0; + fpScorer->fEdep = 0; + fpScorer->fSpeciesInfoPerTime.clear(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +template<> +void Scorer::Initialize(G4HCofThisEvent *HCE) { + fpEvtMap = new G4THitsMap(GetMultiFunctionalDetector()->GetName(), + GetName()); + if (fHCID < 0) { + fHCID = GetCollectionID(0); + } + HCE->AddHitsCollection(fHCID, (G4VHitsCollection *) fpEvtMap); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +template<> +void Scorer::SetChemistryWorld(G4VChemistryWorld *pChemistryWorld) { + fpChemistryWorld = pChemistryWorld; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +template<> +G4VChemistryWorld *Scorer::GetChemistryWorld() const { + return fpChemistryWorld; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +template<> +G4bool Scorer::ProcessHits(G4Step *aStep, G4TouchableHistory *) { + G4double edep = aStep->GetTotalEnergyDeposit(); + if (edep == 0.) { + return FALSE; + } + edep *= aStep->GetPreStepPoint()->GetWeight(); // (Particle Weight) + G4int index = GetIndex(aStep); + fpEvtMap->add(index, edep); + (fpScorer->fEdep) += edep; + return TRUE; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +template<> +void Scorer::SaveScavengerChange() { + auto pScavengerMaterial = dynamic_cast( + G4Scheduler::Instance()->GetScavengerMaterial()); + if (pScavengerMaterial == nullptr) { + G4ExceptionDescription errMsg; + errMsg << "pScavengerMaterial == nullptr"; + G4Exception("Scorer::SaveScavengerChange()", "SaveScavengerChange", + FatalErrorInArgument, errMsg); + } + auto scavengerList = pScavengerMaterial->GetScavengerList(); + auto V = fpChemistryWorld->GetChemistryBoundary()->Volume(); + + for (const auto &it: scavengerList) { + if (it == G4MoleculeTable::Instance()->GetConfiguration("H2O") + || + G4MoleculeTable::Instance()->GetConfiguration("H3Op(B)") == it || + G4MoleculeTable::Instance()->GetConfiguration("OHm(B)") == it) { + continue; + } + for (auto time_mol: fpScorer->fTimeToRecord) { + int64_t n_mol = pScavengerMaterial->GetNMoleculesAtTime(it, time_mol); + if (n_mol < 0) { + G4cerr << "SaveScavengerChange()::N molecules not valid < 0 : " + << it->GetName() << " N : " << n_mol << G4endl; + G4Exception("", "N<0", FatalException, ""); + } + + Gvalues::SpeciesInfo &molInfo = + fpScorer->fSpeciesInfoPerTime[time_mol][it]; + molInfo.fNumber += n_mol; + G4double gValue = n_mol / (Avogadro * V * 1.0e-6 /*mm3 to L*/); + molInfo.fG += gValue; + molInfo.fG2 += gValue * gValue; + } + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +template<> +void Scorer::SaveMoleculeCounter() { + if (fpEventScheduler == nullptr) { + G4Exception("fpEventScheduler == nullptr", + "Scorer::SaveMoleculeCounter()", FatalException, ""); + } else { + auto counterMap = fpEventScheduler->GetCounterMap(); + if (counterMap.empty()) { + if (!G4MoleculeCounter::Instance()->InUse()) { + G4Exception("No counter", + "Scorer::SaveMoleculeCounter()", JustWarning, ""); + return; + } + + G4MoleculeCounter::RecordedMolecules species; + species = G4MoleculeCounter::Instance()->GetRecordedMolecules(); + + if (species.get() == nullptr) { + return; + } else if (species->empty()) { + G4cout << "No molecule recorded, energy deposited" << G4endl; + ++(fpScorer->fNEvent); + fpScorer->fEdep = 0.; + G4MoleculeCounter::Instance()->ResetCounter(); + return; + } + for (auto molecule: *species) { + for (auto time_mol: fpScorer->fTimeToRecord) { + int n_mol = + G4MoleculeCounter::Instance()->GetNMoleculesAtTime(molecule, + time_mol); + + if (n_mol < 0) { + G4cerr << "N molecules not valid < 0 " << G4endl; + G4Exception("", "N<0", FatalException, ""); + } + + Gvalues::SpeciesInfo &molInfo = fpScorer->fSpeciesInfoPerTime[time_mol][molecule]; + molInfo.fNumber += n_mol; + G4double gValue = (n_mol / (fpScorer->fEdep / eV)) * 100.; + molInfo.fG += gValue; + molInfo.fG2 += gValue * gValue; + } + } + + + } else { + for (const auto &map_mol: counterMap) { + auto time_mol = map_mol.first; + for (auto it_mol: map_mol.second) { + auto molecule = it_mol.first; + int n_mol = it_mol.second; + + if (n_mol < 0) { + G4cerr << "N molecules not valid < 0 " + << " molecule : " << it_mol.first->GetName() << " N : " << n_mol + << G4endl; + G4Exception("", "N<0", FatalException, ""); + } + + Gvalues::SpeciesInfo &molInfo = + fpScorer->fSpeciesInfoPerTime[time_mol][molecule]; + molInfo.fNumber += n_mol; + G4double gValue = (n_mol / (fpScorer->fEdep / eV)) * 100.; + molInfo.fG += gValue; + molInfo.fG2 += gValue * gValue; + } + } + } + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +template<> +void Scorer::EndOfEvent(G4HCofThisEvent *) { + if (G4EventManager::GetEventManager()->GetConstCurrentEvent()->IsAborted()) { + fpScorer->fEdep = 0.; + G4MoleculeCounter::Instance()->ResetCounter(); + return; + } + + SaveScavengerChange(); + SaveMoleculeCounter(); + + ++(fpScorer->fNEvent); + fpScorer->fEdep = 0.; + + G4MoleculeCounter::Instance()->ResetCounter(); + G4MoleculeCounter::Instance()->Use(true); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +template<> +void Scorer::AbsorbResultsFromWorkerScorer( + G4VPrimitiveScorer *workerScorer) { + auto right = dynamic_cast *>( + dynamic_cast(workerScorer)); + + if (right == nullptr) { + return; + } + if (right == this) { + return; + } + auto it_map1 = right->fpScorer->fSpeciesInfoPerTime.begin(); + auto end_map1 = right->fpScorer->fSpeciesInfoPerTime.end(); + + for (; it_map1 != end_map1; ++it_map1) { + Gvalues::InnerSpeciesMap &map2 = it_map1->second; + auto it_map2 = map2.begin(); + auto end_map2 = map2.end(); + + for (; it_map2 != end_map2; ++it_map2) { + Gvalues::SpeciesInfo &molInfo = + fpScorer->fSpeciesInfoPerTime[it_map1->first][it_map2->first]; + molInfo.fNumber += it_map2->second.fNumber; + molInfo.fG += it_map2->second.fG; + molInfo.fG2 += it_map2->second.fG2; + } + } + right->fpScorer->fSpeciesInfoPerTime.clear(); + fpScorer->fNEvent += right->fpScorer->fNEvent; + right->fpScorer->fNEvent = 0; + right->fpScorer->fEdep = 0.; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +template<> +void Scorer::OutputAndClear(const std::string &dose) { + if (G4Threading::IsWorkerThread()) { + return; + } + G4VAnalysisManager *analysisManager = G4AnalysisManager::Instance(); + if (analysisManager != nullptr) { + this->fpScorer->WriteWithAnalysisManager(analysisManager, dose); + } + fpScorer->fNEvent = 0; + fpScorer->fSpeciesInfoPerTime.clear(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/UHDR/src/StackingAction.cc b/examples/extended/medical/dna/UHDR/src/StackingAction.cc new file mode 100644 index 00000000000..f92b3e51850 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/StackingAction.cc @@ -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. * +// ******************************************************************** +// +// 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 publication: +// Med. Phys. 37 (2010) 4692-4708 +// J. Comput. Phys. 274 (2014) 841-882 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +/// \file StackingAction.cc +/// \brief Implementation of the StackingAction class + +#include "StackingAction.hh" +#include "G4DNAChemistryManager.hh" +#include "G4StackManager.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +StackingAction::StackingAction() : G4UserStackingAction() {} +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void StackingAction::NewStage() { + if (stackManager->GetNTotalTrack() == 0) { + G4DNAChemistryManager::Instance()->Run(); // starts chemistry + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/UHDR/src/TimeStepAction.cc b/examples/extended/medical/dna/UHDR/src/TimeStepAction.cc new file mode 100644 index 00000000000..b20b69cabe7 --- /dev/null +++ b/examples/extended/medical/dna/UHDR/src/TimeStepAction.cc @@ -0,0 +1,97 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +#include "TimeStepAction.hh" +#include "G4DNAEventScheduler.hh" +#include "G4DNAGillespieDirectMethod.hh" +#include "G4DNAMolecularReactionTable.hh" +#include "G4ITLeadingTracks.hh" +#include "G4ITTransportationManager.hh" +#include "G4SystemOfUnits.hh" +#include "G4Track.hh" +#include "G4VPrimitiveScorer.hh" +#include "G4Scheduler.hh" +#include "PulseAction.hh" +#include "G4MoleculeCounter.hh" +#include "G4VChemistryWorld.hh" + +TimeStepAction::TimeStepAction(const G4VChemistryWorld *pChemWorld, PulseAction *pPulse) + : G4UserTimeStepAction(), fpPulse(pPulse), fpChemWorld(pChemWorld) { + fpEventScheduler = std::make_unique(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void TimeStepAction::UserPreTimeStepAction() {} + +void TimeStepAction::UserPostTimeStepAction() { + G4double T1 = 5 * CLHEP::ns; + if (fpPulse != nullptr && fpPulse->IsActivedPulse()) { + G4MoleculeCounter::Instance()->Use(false); + //we don't count molecules during the pulse + T1 = fpPulse->GetLonggestDelayedTime() + 5 * CLHEP::ns; + } + // T1: time to start mesoscopic model + if (G4Scheduler::Instance()->GetGlobalTime() >= T1) { + CompartmentBased(); + } +} + +void TimeStepAction::UserReactionAction( + const G4Track & /*a*/, const G4Track & /*b*/, + const std::vector * /*products*/) {} + +void TimeStepAction::EndProcessing() {} + +void TimeStepAction::CompartmentBased() { + SetInitialPixel(); + fpEventScheduler->SetVerbose(G4Scheduler::Instance()->GetVerbose()); + fpEventScheduler->SetStartTime(G4Scheduler::Instance()->GetGlobalTime()); // continue from globalTime + fpEventScheduler->SetEndTime(G4Scheduler::Instance()->GetEndTime() - 1 * ps); + fpEventScheduler->SetChangeMesh(true); + fpEventScheduler->Initialize(*fpChemWorld->GetChemistryBoundary(), fPixel); + fpEventScheduler->Run(); + G4Scheduler::Instance()->Stop(); +} + +G4DNAEventScheduler *TimeStepAction::GetEventScheduler() const { + return fpEventScheduler.get(); +} + +void TimeStepAction::SetInitialPixel() { + auto pBoundingBox = fpChemWorld->GetChemistryBoundary(); + G4double Box = pBoundingBox->halfSideLengthInX(); + if (Box == 1.6 * um) { + fPixel = 512;// for CONV + } else if (Box == 0.8 * um) { + fPixel = 256;// for FLASH + } else { + G4cout << "Box : " << *pBoundingBox << " Pixel : " << fPixel << G4endl; + G4Exception("This chem volume is not optimized and the result may be incorrect.", + "TimeStepAction::TimeStepAction", FatalException, ""); + } + // 512 : for conventional dose rate + // 256 : for higher dose rate +} diff --git a/examples/extended/medical/dna/chem1/chem1.out b/examples/extended/medical/dna/chem1/chem1.out index 07f1b9ef75e..95ed94a50f0 100644 --- a/examples/extended/medical/dna/chem1/chem1.out +++ b/examples/extended/medical/dna/chem1/chem1.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -749,7 +749,7 @@ ___________________________________ Run terminated. Run Summary Number of events processed : 1 - User=90.350000s Real=90.901522s Sys=0.020000s + User=81.900000s Real=82.295350s Sys=0.010000s G4 kernel has come to Quit state. UserDetectorConstruction deleted. UserPhysicsList deleted. diff --git a/examples/extended/medical/dna/chem2/chem2.out b/examples/extended/medical/dna/chem2/chem2.out index 044f0e2db57..e6b2ab6d8cb 100644 --- a/examples/extended/medical/dna/chem2/chem2.out +++ b/examples/extended/medical/dna/chem2/chem2.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 diff --git a/examples/extended/medical/dna/chem3/chem3.out b/examples/extended/medical/dna/chem3/chem3.out index 6e300f0f533..b8bba66dc09 100644 --- a/examples/extended/medical/dna/chem3/chem3.out +++ b/examples/extended/medical/dna/chem3/chem3.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... diff --git a/examples/extended/medical/dna/chem4/chem4.out b/examples/extended/medical/dna/chem4/chem4.out index 37827b01726..575e48aa33a 100644 --- a/examples/extended/medical/dna/chem4/chem4.out +++ b/examples/extended/medical/dna/chem4/chem4.out @@ -1,4 +1,4 @@ -Seed used : 1686681246 +Seed used : 1687915050 Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Forcing G4RunManager type... ############################################ @@ -12,7 +12,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -50,7 +50,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -586,7 +588,7 @@ H^0 + H^0 -> H_2^0 1.2e+10 0.2265 DNAMolecularStepByStepModel will be used Start event 1 * PrimaryKiller: aborts event 1, energy loss is too large. - * Energy loss by primary is: 2.8357 keV. Event is aborted if the Eloss is > 2 keV + * Energy loss by primary is: 4.945 keV. Event is aborted if the Eloss is > 2 keV Start event 2 Start event 3 Start event 4 @@ -599,7 +601,7 @@ Start event 9 --------------------End of Global Run----------------------- The run has 9 events Number of events recorded by the species scorer = 9 - Total energy deposited in the world volume : 9876.1 eV + Total energy deposited in the world volume : 9218.2 eV ------------------------------------------------------------ Graphics systems deleted. diff --git a/examples/extended/medical/dna/chem5/chem5.out b/examples/extended/medical/dna/chem5/chem5.out index fb8eb5978b9..b06bf8d8269 100644 --- a/examples/extended/medical/dna/chem5/chem5.out +++ b/examples/extended/medical/dna/chem5/chem5.out @@ -1,4 +1,4 @@ -Seed used : 1686681275 +Seed used : 1687915051 Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Forcing G4RunManager type... ############################################ @@ -12,7 +12,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -140,7 +140,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... diff --git a/examples/extended/medical/dna/chem6/chem6.out b/examples/extended/medical/dna/chem6/chem6.out index 1e9e570365a..7fed168d8e3 100644 --- a/examples/extended/medical/dna/chem6/chem6.out +++ b/examples/extended/medical/dna/chem6/chem6.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -546,9 +546,9 @@ Number of events recorded by the species scorer = 6 --> Event 0 starts. --------------------End of Global Run----------------------- - The run has 7 events -Number of events recorded by the species scorer = 7 - Total energy deposited in the world volume : 16154 eV + The run has 9 events +Number of events recorded by the species scorer = 9 + Total energy deposited in the world volume : 20793 eV ------------------------------------------------------------ ### Run 3 starts. @@ -556,9 +556,9 @@ Number of events recorded by the species scorer = 7 --> Event 0 starts. --------------------End of Global Run----------------------- - The run has 1 events -Number of events recorded by the species scorer = 1 - Total energy deposited in the world volume : 3838 eV + The run has 3 events +Number of events recorded by the species scorer = 3 + Total energy deposited in the world volume : 11419 eV ------------------------------------------------------------ ### Run 4 starts. @@ -566,14 +566,28 @@ Number of events recorded by the species scorer = 1 --> Event 0 starts. --------------------End of Global Run----------------------- - The run has 2 events -Number of events recorded by the species scorer = 2 - Total energy deposited in the world volume : 12069 eV + The run has 3 events +Number of events recorded by the species scorer = 3 + Total energy deposited in the world volume : 18037 eV ------------------------------------------------------------ ### Run 5 starts. ### Run 5 starts. --> Event 0 starts. + +--------------------End of Global Run----------------------- + The run has 1 events +Number of events recorded by the species scorer = 1 + Total energy deposited in the world volume : 8002.4 eV + ------------------------------------------------------------ + ### Run 6 starts. ### Run 6 starts. --> Event 0 starts. + +--------------------End of Global Run----------------------- + The run has 2 events +Number of events recorded by the species scorer = 2 + Total energy deposited in the world volume : 20017 eV + ------------------------------------------------------------ + diff --git a/examples/extended/medical/dna/clustering/clustering.out b/examples/extended/medical/dna/clustering/clustering.out index 56dfdf0c7b5..497007bf4e3 100644 --- a/examples/extended/medical/dna/clustering/clustering.out +++ b/examples/extended/medical/dna/clustering/clustering.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -43,7 +43,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... diff --git a/examples/extended/medical/dna/dnadamage1/dnadamage1.out b/examples/extended/medical/dna/dnadamage1/dnadamage1.out index 7efb059c584..d501690f75b 100644 --- a/examples/extended/medical/dna/dnadamage1/dnadamage1.out +++ b/examples/extended/medical/dna/dnadamage1/dnadamage1.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -520,17 +522,17 @@ Start closing geometry. G4GeometryManager::ReportVoxelStats -- Voxel Statistics Total memory consumed for geometry optimisation: 2913 kByte - Total CPU time elapsed for geometry optimisation: 8.7 seconds + Total CPU time elapsed for geometry optimisation: 6.9 seconds Voxelisation: top CPU users: Percent Total CPU System CPU Memory Volume ------- ---------- ---------- -------- ---------- - 99.31 8.60 0.01 2914k VoxelStraight_logic + 98.98 6.81 0.01 2914k VoxelStraight_logic Voxelisation: top memory users: Percent Memory Heads Nodes Pointers Total CPU Volume ------- -------- ------ ------ -------- ---------- ---------- - 100.00 2913k 20884 21735 54614 8.60 VoxelStraight_logic + 100.00 2913k 20884 21735 54614 6.81 VoxelStraight_logic G4VisManager: Using G4TrajectoryDrawByCharge as fallback trajectory model. See commands in /vis/modeling/trajectories/ for other options. ### Run 0 starts. @@ -638,7 +640,7 @@ At time : 376.29 ps Reaction : Histone^0 (-6454) + H3O^1 (-14525) -> Histone^0 At time : 385.29 ps Reaction : Adenine^0 (-2623) + OH^0 (-14530) -> Damaged_Adenine^0 (-14666) At time : 400.29 ps Reaction : H^0 (-14539) + OH^0 (-14631) -> No product At time : 406.29 ps Reaction : H^0 (-14569) + Histone^0 (-7255) -> Histone^0 (-14667) -At time : 409.29 ps Reaction : Thymine^0 (-6901) + H^0 (-14612) -> Damaged_Thymine^0 (-14668) +At time : 409.29 ps Reaction : H^0 (-14612) + Thymine^0 (-6901) -> Damaged_Thymine^0 (-14668) At time : 461.8 ps Reaction : Histone^0 (-14667) + H^0 (-14559) -> Histone^0 (-14669) At time : 470.8 ps Reaction : H^0 (-14555) + Deoxyribose^0 (-12250) -> Damaged_Deoxyribose^0 (-14670) At time : 556.82 ps Reaction : H^0 (-14597) + OH^0 (-14606) -> No product @@ -654,7 +656,7 @@ At time : 785.45 ps Reaction : Histone^0 (-2449) + H3O^1 (-14534) -> Histone^0 At time : 788.45 ps Reaction : H^0 (-14579) + Deoxyribose^0 (-2065) -> Damaged_Deoxyribose^0 (-14680) At time : 804.05 ps Reaction : OH^0 (-14553) + Thymine^0 (-12208) -> Damaged_Thymine^0 (-14681) At time : 983.44 ps Reaction : OH^0 (-14542) + H^0 (-14620) -> No product -At time : 1.0364 ns Reaction : H_2^0 (-14654) + Histone^0 (-14676) -> Histone^0 (-14682) +At time : 1.0364 ns Reaction : Histone^0 (-14676) + H_2^0 (-14654) -> Histone^0 (-14682) At time : 1.4601 ns Reaction : OH^0 (-14578) + Guanine^0 (-2939) -> Damaged_Guanine^0 (-14683) At time : 1.4701 ns Reaction : H^0 (-14589) + Deoxyribose^0 (-2049) -> Damaged_Deoxyribose^0 (-14684) At time : 1.4901 ns Reaction : H_2^0 (-14562) + Histone^0 (-14674) -> Histone^0 (-14685) @@ -754,7 +756,7 @@ ___________________________________ Run terminated. Run Summary Number of events processed : 2 - User=134.760000s Real=135.644230s Sys=0.090000s + User=129.940000s Real=130.978560s Sys=0.060000s ----> Histograms are saved Graphics systems deleted. diff --git a/examples/extended/medical/dna/dnadamage2/.README.txt b/examples/extended/medical/dna/dnadamage2/.README.txt new file mode 100644 index 00000000000..10809b03830 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/.README.txt @@ -0,0 +1,321 @@ +///\file "medical/dna/dnadamage2/.README.txt" +///\brief Example dnadamage2 README page + +/*! \page Examplednadamage2 Example dnadamage2 + +This is a new dnadamage example and it may contain bugs. +It was developed by J. Naoki D-Kondo. +If you find a bug, please contact IRSN: +yann.perrot@irsn.fr, carmen.villagrasa@irsn.fr + + +\section dnadamage2_s0 INTRODUCTION + +This examples provides scoring of plasmid DNA strand breaks using +the IRT method [2]. The DNADAMAGE2 example extends the chem6 example +by adding DNA molecule information and the scoring of Strand Breaks. +Experimental conditions are considered such as oxygen and DMSO molar +concentrations. + +The details are described in the following papers [1][2] for both +the IRT method and this example's validation. + +Any report or published results obtained using this example shall +cite the following publications: + +[1] J.N. D-Kondo, et al., (2021) DNA damage modeled with Geant4-DNA: effects of +plasmid DNA conformation and experimental conditions. +Physics in Medicine and Biology, 66 (24). https://doi.org/10.1088/1361-6560/ac3a22 + +[2] J. Ramos-Méndez, et al., (2020). Independent reaction times method in Geant4-DNA: +Implementation and performance.Medical Physics, 47(11), 5919–5930. +https://doi.org/10.1002/mp.14490 + +In addition, cite the main Geant4-DNA collaboration publications: + +[3] J. Appl. Phys. 125 (2019) 104301 +[4] Med. Phys. 45 (2018) e722-e739 +[5] Phys. Med. 31 (2015) 861-874 +[6] Med. Phys. 37 (2010) 4692-4708 +[7] Int. J. Model. Simul. Sci . Comput. 1 (2010) 157-178 + +\section dnadamage2_s1 GEOMETRY SET-UP + +The geometry is composed of three main components: +- The world: A 2 um water cube which hostess the rest of the components. +- The Plasmid Envelope: A water sphere of 1 um in diameter by default. + This envelope can be resized using the "/det/setSize" + command. So users can modify their DNA concentration + without increasing the number of plasmids, but by lowering + the amount of water. +- The Plasmids: Plasmids must be supplied to the geometry. The plasmid file must + be in ASCII format. Three columns which represent the X, Y and + Z position of the plasmid vertices (bps). To control the + parameters to setup the plasmid geomtery, the following commands + shall be used: + + /det/NbOfPlasmids :Set the number of plasmid copies. G4Box Volumes + are used to enclose the plasmid. + + /det/OffSetFile : The file format is ASCII. It contains three columns + indicating the X, Y and Z position of the center of + the plasmid envelopes (G4Box volumes enclosing the plasmid) + + /det/PlasmidFile : Set the ASCII file name containing the plasmid + information. + + /det/UseDNAVolumes : Boolean to activate/deactivate the solid + volumes defining the DNA nucleotides. If set to false, + virtual molecules are created from the DNA nucleotides + position for simulating indirect strand breaks. See + reference [2]. + +The definition of the sensitive volumes is also made in the Geometry Definition. +Inside the method ConstructSDandField() (see section 5). + +\section dnadamage2_s2 PHYSICS AND CHEMISTRY LISTS + +By default, if no Physics list is assigned using the "/physics/SetPhysics" the simulation +will run using: + + + G4EmDNAPhysics_option4 constructor + +The full list of physics lists available for the user are: +- G4EmDNAPhysics_option1 +- G4EmDNAPhysics_option2 +- G4EmDNAPhysics_option3 +- G4EmDNAPhysics_option4 +- G4EmDNAPhysics_option5 +- G4EmDNAPhysics_option6 +- G4EmDNAPhysics_option7 +- G4EmDNAPhysics_option8 + +By default, if no chemistry list is assigned using the "/physics/SetChemistry" +the simulation will run using: + +- G4EmDNAChemistry_ForPlasmids + + Custom chemistry constructor based on the G4EmDNAChemistry_option3 + constructor. + + It includes DNA reactions as well as DMSO and oxygen background reactions. + + The chemistry constructor is based on the pre-chemical stage of PARTRAC + and chemical parameters of RITRACKS. + + This chemistry constructor uses the Independent Reaction Times method. + +By using this Chemistry List, users can set oxygen and DMSO concentration +with the following commands "/chem/scavenger/DMSO" and "/chem/scavenger/Oxygen". +The concentrations unit must be given as molar concentaration M (mol/dm3). + +*Of note, while other chemistry modules are also available, only the + G4EmDNAChemistry_ForPlasmids is capable of scoring DNA strand breaks. + +\section dnadamage2_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. + +The following actions are initialized in this example: +- PrimaryGenerationAction: The primary particle gun. +- RunAction: Defines the actions conducted at the start and end of each + Geant4 Run. It contains the call to the output functions of + the scorers. +- StackingAction: Needed in order to start the chemistry (See section 7) +- TimeStepAction: Defines actions conducted at each Step-By-Step (SBS) + Chemistry algorithm step (see section 6). + +\section dnadamage2_s4 THE PRIMARY GENERATOR + +The primary kinematic consists of N electrons with random position and +momentum in the water sphere. The kinetic energy of the electrons are +sampled from an energy spectrum suplied by the user using the "/fpGun/SourceFile" +command. The user can set the number of primary electrons per event in order +to accumulate a certain dose before running the chemistry. + +This example provides the specrum of the kinetic energy of secondary electrons +at the time they were produced by cobalt-60/cesium-137 gamma rays (see section 11 +and [1] for more information). + +The chemistry module is triggered in the StackingAction class when all +physical tracks have been processed (see section 7). + +\section dnadamage2_s5 SCORERS + +Species scorer +This scorer computes the energy deposition and the number of species along +time in order to extract the radiochemical yields as in chem6 or chem4 examples. + +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(). + +The following macro commands can be used to control the scoring time: + +/scheduler/endTime : IRT chemistry time end, must be acompanied by time units. + +/scorer/species/addTimeToRecord : Adds a specific time point to report. + +/scorer/species/nOfTimeBins : Sets the number of time bins separated + logaritmically even from 1 ps to the endTime + specified. + +The information about all the molecular species is scored and can be saved +in a ASCII, ROOT or BINARY file, as specified by the user. The specific name +of the file can also be specified by the user by using the following commands: +-/scorer/species/OutputFile +-/scorer/species/OutputFormat + +ASCII results are given in a 5 column file which are: +- Time +- GValues per 100 eV +- GValues Error +- GValues number of molecules +- Molecule name + +ROOT or BINARY use the Geant4 Analysis Manager with the following columns: +- Species ID +- Number +- Number of Event +- Species Name +- Time +- Sum of G Value +- Sum of G2 Value + +LET scorer +An restricted, dose-averaged LET scorer is provided with this example, +it is the same scorer from the chem6 example. For more details visit the +chem6 example + +A macro command can be used to control the energy cut of the scorer: +/scorer/LET/cutoff + +DNA Strand Break Scorer +The DNA Strand Breaks are obtained by this class, both direct and indirect. +This class needs access to the DetectorConstruction class in order to obtain +the DNA position information. + +Contained within this scorer is a "MoleculeGun" as a mean to insert the DNA +molecules and keep track of them in order to know where a strand break occurs. +This helps to calculate SSBs, DSBs and other more complex DNA Strand Breaks. +The user is responsible for the Strand Break classification since this example +doesn't include any analysis tool. + +Users can change the output type and output file name in the same way of the +"ScoreSpecies" scorer, with the commands: +-/scorer/StrandBreak/OutputFile +-/scorer/StrandBreak/OutputFormat + +The output formats available are the same as with the ScoreSpecies scorer: +ASCII, ROOT and BINARY. + +The number of direct Strand Breaks are scored when a certain energy +threshold is reached for a certain deoxyribose + phosphate geometry. Users can +change the direct energy treshold by using the following command: +-/scorer/StrandBreak/BreakEnergy + +Of note, the following parameter must be set to true to score the breaks produced +by direct effect +-/det/UseDNAVolumes true + +The BreakEnergy is set to 17.5 eV by default. + +The "ScoreStrandBreak" class takes the LET value at the end of the simulation from +5.2 and saves it into the file of the ASCII output, so that users may get the number +of Strand Breaks as a function of LET if so they desire. +The current example only allows the use of electron sources, but the user is free to +use different electron energies. + +\section dnadamage2_s6 IRT SPECIFIC DETAILS + +The IRT is run after the few step-by-step (SBS) steps following the water dissociation +(pre-chemical) stage have finished (between 2 to 3 SBS steps), see UserPreTimeStepAction() +and UserPostTimeStepAction(). At that point, +SBS is stopped and the position of molecules and DNA molecules are passed to the IRT +method. No DNA radiolysis is considered, so every specie created inside the DNA +nucleotide territory is exclude by using the UserPreTimeStepAction as a filters, see +justification in [1] + +In sumary: +The following two method are called before and after every SBS time step to pass molecules +to the IRT method: +-TimeStepAction::UserPreTimeStepAction() +-TimeStepAction::UserPostTimeStepAction() + +\section dnadamage2_s7 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 dnadamage2_s8 OUTPUT + +The same output specifications from the chem6 example applies here, with the +following remarkable differences: +-Both the ScoreSpecies and the ScoreStrandBreaks scorers have their own + output methods. Both call OutputAndClear(), which writes the output + files and cleans all the information currently stored in the scorers, + in preparation for the next run. +-The OutputAndClear() method is called in the RunAction::EndOfRunAction() + method. + +\section dnadamage2_s9 RELEVANT MACRO FILES + +Two user macro files can be used: +- RunExample.in + + Single Run example. + + 100 repetitions of 880 electrons (~5 Gys) in a 1 um diameter volume + containing 1 plasmids. + + Caesium source. + +- RunDoseDependance.in + + This macro will repproduce results from S2 [1] (SBs Dose dependance). + + DMSO conentration is set to 2.28E-4 M. + + Oxygen Concentration is set to 0.27E-3 M. + + Absorbed dose will be between ~1 - ~100 Gy. + + 5 plasmids (28.1 ug/ml DNA concentration). + + To reduce simulation time, the number of repetitions was lowered to 10. + + Currently, only 1 Thread is used. Users are advised to increase the number + of threads. + + Simulation time can take up to a couple of days depending on the specific PC. + +- init_vis.in + + Default macro file to be used if user doesn't specify any macro file at run. + + It calls the vis.in macro which will draw the OpenGL visualizer. + +- vis.in + + Visualization parameters for the default macro file. 1 plasmid will be draw at the center. + +\section dnadamage2_s10 PLOT + +No PLOT/Analysis files are prodived due to the default ASCII output. +ASCII files can be handled by most of the plot tools. + +\section dnadamage2_s11 EXTRA FILES + +- CaesiumSource.src + + Sample electron spectrum for the simulation. + + Secondary electrons generated by a Caesium Gamma Source [1]. + +- CobaltSource.src + + Sample electron spectrum for the simulation. + + Secondary electrons generated by a Cobalt Gamma Source [1]. + +- pUC19.xyz + + A sample pUC19 (2686 base pairs) plasmid with -0.03 super helix density generated at 20 C. + The plasmid file has the position of each individual base pair. Values are given in nm + +- PlasmidOffsets.txt + + A sample plasmid centroid file. Users can change this values manually as long + as they do not fall outside of the water sphere. In this way is possible to move + the plasmids generated in the simulation. Values are given in nm. + +*/ diff --git a/examples/extended/medical/dna/dnadamage2/CMakeLists.txt b/examples/extended/medical/dna/dnadamage2/CMakeLists.txt new file mode 100644 index 00000000000..321b206b746 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/CMakeLists.txt @@ -0,0 +1,72 @@ +cmake_minimum_required(VERSION 3.16...3.21) + +#---------------------------------------------------------------------------- + +project(dnadamage2) + +#---------------------------------------------------------------------------- +# Find Geant4 package, activating all available UI and Vis drivers by default +# You can set WITH_GEANT4_UIVIS to OFF via the command line or ccmake/cmake-gui +# to build a batch mode only executable +# +option(WITH_GEANT4_UIVIS "Build example with Geant4 UI and Vis drivers" ON) +if(WITH_GEANT4_UIVIS) + find_package(Geant4 REQUIRED ui_all vis_all) +else() + find_package(Geant4 REQUIRED) +endif() + +#---------------------------------------------------------------------------- +# Setup Geant4 include directories and compile definitions +# Setup include directory for this project +# +include_directories(${PROJECT_SOURCE_DIR}/include) + +include(${Geant4_USE_FILE}) + +#---------------------------------------------------------------------------- +# Locate sources and headers for this project +# NB: headers are included so they will show up in IDEs +# +file(GLOB sources ${PROJECT_SOURCE_DIR}/src/*.cc) + +file(GLOB headers ${PROJECT_SOURCE_DIR}/include/*.hh) + +#---------------------------------------------------------------------------- +# Add the executable, and link it to the Geant4 libraries +# +add_executable(dnadamage2 dnadamage2.cc ${sources} ${headers}) +target_link_libraries(dnadamage2 ${Geant4_LIBRARIES}) + +#---------------------------------------------------------------------------- +# Copy all scripts to the build directory, i.e. the directory in which we +# build dnadamage2_proj. This is so that we can run the executable directly because +# it relies on these scripts being in the current working directory. +# +file(GLOB dnadamage2_SCRIPTS + ${PROJECT_SOURCE_DIR}/*.in + ${PROJECT_SOURCE_DIR}/*.mac + ${PROJECT_SOURCE_DIR}/*.xyz + ${PROJECT_SOURCE_DIR}/*.txt + ${PROJECT_SOURCE_DIR}/*.src) +#message(STATUS dnadamage2_SCRIPTS " ${dnadamage2_SCRIPTS}") + +foreach(_script ${dnadamage2_SCRIPTS}) + configure_file( + ${_script} + ${PROJECT_BINARY_DIR}/. + COPYONLY + ) +endforeach() + +#---------------------------------------------------------------------------- +# Install the executable to 'bin' directory under CMAKE_INSTALL_PREFIX +# +install(TARGETS dnadamage2 DESTINATION bin ) + +#---------------------------------------------------------------------------- +# For internal Geant4 use - but has no effect if you build this +# example standalone +# +project(dnadamage2_proj) +add_custom_target(dnadamage2_proj DEPENDS dnadamage2) diff --git a/examples/extended/medical/dna/dnadamage2/CaesiumSource.src b/examples/extended/medical/dna/dnadamage2/CaesiumSource.src new file mode 100644 index 00000000000..72858fdc9f6 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/CaesiumSource.src @@ -0,0 +1,19 @@ +0.0144 0.0390783123151 +0.0432 0.0543671181691 +0.072 0.06184026156 +0.1008 0.0681924334423 +0.1296 0.0715242098708 +0.1584 0.0722092480149 +0.1872 0.0736727385957 +0.216 0.0742020862525 +0.2448 0.0756967149307 +0.2736 0.0726763194769 +0.3024 0.0699673049977 +0.3312 0.0678187762728 +0.36 0.0644558617468 +0.3888 0.0555815039701 +0.4176 0.0456795889771 +0.4464 0.0270901447922 +0.4752 0.00588510042036 +0.504 3.11380974622e-05 +0.5328 3.11380974622e-05 \ No newline at end of file diff --git a/examples/extended/medical/dna/dnadamage2/CobaltSource.src b/examples/extended/medical/dna/dnadamage2/CobaltSource.src new file mode 100644 index 00000000000..b0cedffeca3 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/CobaltSource.src @@ -0,0 +1,28 @@ +1.2974e-1 0.13799300643 +1.9119e-1 0.0790671555366 +2.4534e-1 0.066617945988 +3.0311e-1 0.0561247787453 +3.6447e-1 0.049355979644 +4.1863e-1 0.0415837840363 +4.7999e-1 0.0381694232249 +5.3772e-1 0.0381694232249 +5.9547e-1 0.035035108483 +6.5682e-1 0.0335657838 +7.1457e-1 0.0308099592698 +7.7232e-1 0.0282797613763 +8.5166e-1 0.0335657838 +8.7690e-1 0.0381694232249 +9.0216e-1 0.0365686358675 +9.2744e-1 0.0335657838 +9.4909e-1 0.0321582160014 +9.7437e-1 0.0295179563338 +9.9964e-1 0.0282797613763 +1.0213e+0 0.0238265397092 +1.0430e+0 0.0238265397092 +1.0719e+0 0.0218698859491 +1.0935e+0 0.0218698859491 +1.1188e+0 0.0169134373931 +1.1441e+0 0.0125311444248 +1.1695e+0 0.00749459535544 +1.1985e+0 0.00377628061154 +1.2203e+0 0.00129402073515 \ No newline at end of file diff --git a/examples/extended/medical/dna/dnadamage2/History b/examples/extended/medical/dna/dnadamage2/History new file mode 100644 index 00000000000..c0c54e67b38 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/History @@ -0,0 +1,8 @@ +# Example dnadamage2-V11-01-00 History + +See `CONTRIBUTING.rst` for details of **required** info/format for each entry, +which **must** added in reverse chronological order (newest at the top). It must **not** +be used as a substitute for writing good git commit messages! + +## 2022-11-07 D-Kondo N (dnadamage2-V11-01-00) +- Created and adapted from chem6 \ No newline at end of file diff --git a/examples/extended/medical/dna/dnadamage2/PlasmidOffsets.txt b/examples/extended/medical/dna/dnadamage2/PlasmidOffsets.txt new file mode 100644 index 00000000000..22e5bcb7865 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/PlasmidOffsets.txt @@ -0,0 +1,27 @@ +0.0 0.0 0.0 +300 0.0 0.0 +-300 0.0 0.0 +0.0 300 0.0 +0.0 -300 0.0 +0.0 0.0 300 +0.0 0.0 -300 +300 300 0.0 +300 -300 0.0 +-300 300 0.0 +-300 -300 0.0 +300 0.0 300 +300 0.0 -300 +-300 0.0 300 +-300 0.0 -300 +0.0 300 300 +0.0 300 -300 +0.0 -300 300 +0.0 -300 -300 +300 300 300 +300 300 -300 +300 -300 300 +300 -300 -300 +-300 300 300 +-300 300 -300 +-300 -300 300 +-300 -300 -300 \ No newline at end of file diff --git a/examples/extended/medical/dna/dnadamage2/README.txt b/examples/extended/medical/dna/dnadamage2/README.txt new file mode 100644 index 00000000000..669aadeb8d8 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/README.txt @@ -0,0 +1,336 @@ +$Id: $ +------------------------------------------------------------------- + + ========================================================= + Geant4 - dnadamage2 example + ========================================================= + + DNADAMAGE2 + ---------- + +CORRESPONDING AUTHORS +J. Naoki D. Kondo +J. Ramos-Mendez +B. Faddegon +(a) JorgeNaoki _ DominguezKondo _ ucsf _ edu +(b) Jose _ RamosMendez _ ucsf _ edu +(c) Bruce _ Faddegon _ ucsf _ edu + +CONTACT EMAIL +JorgeNaoki.DominguezKondo@ucsf.edu + +This example is provided by the Geant4-DNA collaboration. +(http://geant4-dna.org) + +Any report or published results obtained using this example shall +cite the following publications: + +[1] J.N. D-Kondo, et al., (2021) DNA damage modeled with Geant4-DNA: effects of +plasmid DNA conformation and experimental conditions. +Physics in Medicine and Biology, 66 (24). https://doi.org/10.1088/1361-6560/ac3a22 + +[2] J. Ramos-Méndez, et al., (2020). Independent reaction times method in Geant4-DNA: +Implementation and performance.Medical Physics, 47(11), 5919–5930. +https://doi.org/10.1002/mp.14490 + +In addition, cite the main Geant4-DNA collaboration publications: + +[3] J. Appl. Phys. 125 (2019) 104301 +[4] Med. Phys. 45 (2018) e722-e739 +[5] Phys. Med. 31 (2015) 861-874 +[6] Med. Phys. 37 (2010) 4692-4708 +[7] Int. J. Model. Simul. Sci . Comput. 1 (2010) 157-178 + + 0 - INTRODUCTION + This examples provides scoring of plasmid DNA strand breaks using + the IRT method [2]. The DNADAMAGE2 example extends the chem6 example + by adding DNA molecule information and the scoring of Strand Breaks. + Experimental conditions are considered such as oxygen and DMSO molar + concentrations. + + The details are described in the following papers [1][2] for both + the IRT method and this example's validation. + + 1 - GEOMETRY DEFINITION + + The geometry is composed of three main components: + - The world: A 2 um water cube which hostess the rest of the components. + - The Plasmid Envelope: A water sphere of 1 um in diameter by default. + This envelope can be resized using the "/det/setSize" + command. So users can modify their DNA concentration + without increasing the number of plasmids, but by lowering + the amount of water. + - The Plasmids: Plasmids must be supplied to the geometry. The plasmid file must + be in ASCII format. Three columns which represent the X, Y and + Z position of the plasmid vertices (bps). To control the + parameters to setup the plasmid geomtery, the following commands + shall be used: + + /det/NbOfPlasmids :Set the number of plasmid copies. G4Box Volumes + are used to enclose the plasmid. + + /det/OffSetFile : The file format is ASCII. It contains three columns + indicating the X, Y and Z position of the center of + the plasmid envelopes (G4Box volumes enclosing the plasmid) + + /det/PlasmidFile : Set the ASCII file name containing the plasmid + information. + + /det/UseDNAVolumes : Boolean to activate/deactivate the solid + volumes defining the DNA nucleotides. If set to false, + virtual molecules are created from the DNA nucleotides + position for simulating indirect strand breaks. See + reference [2]. + + The definition of the sensitive volumes is also made in the Geometry Definition. + Inside the method ConstructSDandField() (see section 5). + + 2 - PHYSICS AND CHEMISTRY LISTS + + By default, if no Physics list is assigned using the "/physics/SetPhysics" the simulation + will run using: + + + G4EmDNAPhysics_option4 constructor + + The full list of physics lists available for the user are: + + G4EmDNAPhysics_option1 + + G4EmDNAPhysics_option2 + + G4EmDNAPhysics_option3 + + G4EmDNAPhysics_option4 + + G4EmDNAPhysics_option5 + + G4EmDNAPhysics_option6 + + G4EmDNAPhysics_option7 + + G4EmDNAPhysics_option8 + + By default, if no chemistry list is assigned using the "/physics/SetChemistry" + the simulation will run using: + + + G4EmDNAChemistry_ForPlasmids + - Custom chemistry constructor based on the G4EmDNAChemistry_option3 + constructor. + - It includes DNA reactions as well as DMSO and oxygen background reactions. + - The chemistry constructor is based on the pre-chemical stage of PARTRAC + and chemical parameters of RITRACKS. + - This chemistry constructor uses the Independent Reaction Times method. + + By using this Chemistry List, users can set oxygen and DMSO concentration + with the following commands "/chem/scavenger/DMSO" and "/chem/scavenger/Oxygen". + The concentrations unit must be given as molar concentaration M (mol/dm3). + + *Of note, while other chemistry modules are also available, only the + G4EmDNAChemistry_ForPlasmids is capable of scoring DNA strand breaks. + + 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. + + The following actions are initialized in this example: + + PrimaryGenerationAction: The primary particle gun. + + RunAction: Defines the actions conducted at the start and end of each + Geant4 Run. It contains the call to the output functions of + the scorers. + + StackingAction: Needed in order to start the chemistry (See section 7) + + TimeStepAction: Defines actions conducted at each Step-By-Step (SBS) + Chemistry algorithm step (see section 6). + + 4 - AN EVENT: THE PRIMARY GENERATOR + + The primary kinematic consists of N electrons with random position and + momentum in the water sphere. The kinetic energy of the electrons are + sampled from an energy spectrum suplied by the user using the "/fpGun/SourceFile" + command. The user can set the number of primary electrons per event in order + to accumulate a certain dose before running the chemistry. + + This example provides the specrum of the kinetic energy of secondary electrons + at the time they were produced by cobalt-60/cesium-137 gamma rays (see section 11 + and [1] for more information). + + The chemistry module is triggered in the StackingAction class when all + physical tracks have been processed (see section 7). + + 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 chem6 or chem4 examples. + + 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(). + + The following macro commands can be used to control the scoring time: + + /scheduler/endTime : IRT chemistry time end, must be acompanied by time units. + + /scorer/species/addTimeToRecord : Adds a specific time point to report. + + /scorer/species/nOfTimeBins : Sets the number of time bins separated + logaritmically even from 1 ps to the endTime + specified. + + The information about all the molecular species is scored and can be saved + in a ASCII, ROOT or BINARY file, as specified by the user. The specific name + of the file can also be specified by the user by using the following commands: + -/scorer/species/OutputFile + -/scorer/species/OutputFormat + + ASCII results are given in a 5 column file which are: + - Time + - GValues per 100 eV + - GValues Error + - GValues number of molecules + - Molecule name + + ROOT or BINARY use the Geant4 Analysis Manager with the following columns: + - Species ID + - Number + - Number of Event + - Species Name + - Time + - Sum of G Value + - Sum of G2 Value + + 5.2. - LET scorer + + An restricted, dose-averaged LET scorer is provided with this example, + it is the same scorer from the chem6 example. For more details visit the + chem6 example + + A macro command can be used to control the energy cut of the scorer: + /scorer/LET/cutoff + + 5.4. - DNA Strand Break Scorer + + The DNA Strand Breaks are obtained by this class, both direct and indirect. + This class needs access to the DetectorConstruction class in order to obtain + the DNA position information. + + Contained within this scorer is a "MoleculeGun" as a mean to insert the DNA + molecules and keep track of them in order to know where a strand break occurs. + This helps to calculate SSBs, DSBs and other more complex DNA Strand Breaks. + The user is responsible for the Strand Break classification since this example + doesn't include any analysis tool. + + Users can change the output type and output file name in the same way of the + "ScoreSpecies" scorer, with the commands: + -/scorer/StrandBreak/OutputFile + -/scorer/StrandBreak/OutputFormat + + The output formats available are the same as with the ScoreSpecies scorer: + ASCII, ROOT and BINARY. + + The number of direct Strand Breaks are scored when a certain energy + threshold is reached for a certain deoxyribose + phosphate geometry. Users can + change the direct energy treshold by using the following command: + -/scorer/StrandBreak/BreakEnergy + + Of note, the following parameter must be set to true to score the breaks produced + by direct effect + -/det/UseDNAVolumes true + + The BreakEnergy is set to 17.5 eV by default. + + The "ScoreStrandBreak" class takes the LET value at the end of the simulation from + 5.2 and saves it into the file of the ASCII output, so that users may get the number + of Strand Breaks as a function of LET if so they desire. + The current example only allows the use of electron sources, but the user is free to + use different electron energies. + + 6 - IRT specific details + + The IRT is run after the few step-by-step (SBS) steps following the water dissociation + (pre-chemical) stage have finished (between 2 to 3 SBS steps), see UserPreTimeStepAction() + and UserPostTimeStepAction(). At that point, + SBS is stopped and the position of molecules and DNA molecules are passed to the IRT + method. No DNA radiolysis is considered, so every specie created inside the DNA + nucleotide territory is exclude by using the UserPreTimeStepAction as a filters, see + justification in [1] + + In sumary: + The following two method are called before and after every SBS time step to pass molecules + to the IRT method: + + TimeStepAction::UserPreTimeStepAction() + + TimeStepAction::UserPostTimeStepAction() + + 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 + + The same output specifications from the chem6 example applies here, with the + following remarkable differences: + + Both the ScoreSpecies and the ScoreStrandBreaks scorers have their own + output methods. Both call OutputAndClear(), which writes the output + files and cleans all the information currently stored in the scorers, + in preparation for the next run. + + The OutputAndClear() method is called in the RunAction::EndOfRunAction() + method. + + 9 - RELEVANT MACRO FILES + + Two user macro files can be used: + + - RunExample.in + + Single Run example. + + 100 repetitions of 880 electrons (~5 Gys) in a 1 um diameter volume + containing 1 plasmids. + + Caesium source. + + - RunDoseDependance.in + + This macro will repproduce results from S2 [1] (SBs Dose dependance). + + DMSO conentration is set to 2.28E-4 M. + + Oxygen Concentration is set to 0.27E-3 M. + + Absorbed dose will be between ~1 - ~100 Gy. + + 5 plasmids (28.1 ug/ml DNA concentration). + + To reduce simulation time, the number of repetitions was lowered to 10. + + Currently, only 1 Thread is used. Users are advised to increase the number + of threads. + + Simulation time can take up to a couple of days depending on the specific PC. + + - init_vis.in + + Default macro file to be used if user doesn't specify any macro file at run. + + It calls the vis.in macro which will draw the OpenGL visualizer. + + - vis.in + + Visualization parameters for the default macro file. 1 plasmid will be draw at the center. + +10 - PLOT + + - No PLOT/Analysis files are prodived due to the default ASCII output. + - ASCII files can be handled by most of the plot tools. + +11 - EXTRA FILES + + - CaesiumSource.src + + Sample electron spectrum for the simulation. + + Secondary electrons generated by a Caesium Gamma Source [1]. + + - CobaltSource.src + + Sample electron spectrum for the simulation. + + Secondary electrons generated by a Cobalt Gamma Source [1]. + + - pUC19.xyz + + A sample pUC19 (2686 base pairs) plasmid with -0.03 super helix density generated at 20 C. + The plasmid file has the position of each individual base pair. Values are given in nm + + - PlasmidOffsets.txt + + A sample plasmid centroid file. Users can change this values manually as long + as they do not fall outside of the water sphere. In this way is possible to move + the plasmids generated in the simulation. Values are given in nm. + diff --git a/examples/extended/medical/dna/dnadamage2/RunDoseDependance.in b/examples/extended/medical/dna/dnadamage2/RunDoseDependance.in new file mode 100644 index 00000000000..973b75bcd77 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/RunDoseDependance.in @@ -0,0 +1,97 @@ +# Set Number of Threads +/run/numberOfThreads 1 + +# Set electron solvation process: "Meesungnoen2002", "Ritchie1994", "Terrisol1990" +/process/dna/e-SolvationSubType Meesungnoen2002 + +# Chemistry Scavenger Cocentrations +# Units are assumed to be mol/dm3 (M) +/chem/scavenger/DMSO 2.28e-4 +/chem/scavenger/Oxygen 0.27e-3 + +# Register Physics and Chemistries +/physics/SetPhysics G4EmDNAPhysics_option2 +/physics/SetChemistry G4EmDNAChemistryForPlasmids + +# Plasmid DNA Settings (Befor Initialize) +/det/PlasmidFile pUC19.xyz +/det/OffSetFile PlasmidOffsets.txt +/det/UseDNAVolumes True +/det/NbOfPlasmids 5 + +/run/initialize + +# World Size Settings +/det/setSize 1 um + +# Spectrum source settings +/fpGun/SourceFile CobaltSource.src + +# Chemistry Scheduler Settings +/scheduler/endTime 100 microsecond +/scorer/species/nOfTimeBins 100 +/scorer/species/addTimeToRecord 1 microsecond +/scorer/species/addTimeToRecord 10 microsecond + +# GValues: Output Options +/scorer/species/OutputFormat ASCII + +# SB: Output Options +/scorer/StrandBreak/OutputFormat ASCII +/scorer/StrandBreak/BreakEnergy 17.5 eV + +# Verbose Settings +/tracking/verbose 0 +/scheduler/verbose 0 + +# Print Chemistry +/chem/reaction/print + +# Console Output Progess +/run/printProgress 1 + +# Run +/fpGun/PrimariesPerEvent 50 +/scorer/species/OutputFile SpeciesInfo_50 +/scorer/StrandBreak/OutputFile StrandBreakInfo_50 +/run/beamOn 10 + +/fpGun/PrimariesPerEvent 100 +/scorer/species/OutputFile SpeciesInfo_100 +/scorer/StrandBreak/OutputFile StrandBreakInfo_100 +/run/beamOn 10 + +/fpGun/PrimariesPerEvent 200 +/scorer/species/OutputFile SpeciesInfo_200 +/scorer/StrandBreak/OutputFile StrandBreakInfo_200 +/run/beamOn 10 + +/fpGun/PrimariesPerEvent 400 +/scorer/species/OutputFile SpeciesInfo_400 +/scorer/StrandBreak/OutputFile StrandBreakInfo_400 +/run/beamOn 10 + +/fpGun/PrimariesPerEvent 800 +/scorer/species/OutputFile SpeciesInfo_800 +/scorer/StrandBreak/OutputFile StrandBreakInfo_800 +/run/beamOn 10 + +/fpGun/PrimariesPerEvent 1000 +/scorer/species/OutputFile SpeciesInfo_1000 +/scorer/StrandBreak/OutputFile StrandBreakInfo_1000 +/run/beamOn 10 + +/fpGun/PrimariesPerEvent 2000 +/scorer/species/OutputFile SpeciesInfo_2000 +/scorer/StrandBreak/OutputFile StrandBreakInfo_2000 +/run/beamOn 10 + +/fpGun/PrimariesPerEvent 4000 +/scorer/species/OutputFile SpeciesInfo_4000 +/scorer/StrandBreak/OutputFile StrandBreakInfo_4000 +/run/beamOn 10 + +/fpGun/PrimariesPerEvent 6000 +/scorer/species/OutputFile SpeciesInfo_6000 +/scorer/StrandBreak/OutputFile StrandBreakInfo_6000 +/run/beamOn 10 diff --git a/examples/extended/medical/dna/dnadamage2/dnadamage2.cc b/examples/extended/medical/dna/dnadamage2/dnadamage2.cc new file mode 100644 index 00000000000..50485d079c6 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/dnadamage2.cc @@ -0,0 +1,129 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// chem6 example is derived from chem4 and chem5 examples +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// Jose Ramos-Mendez and Bruce Faddegon (UCSF, US) +// +/// \file dnadamage2.cc +/// \brief DnaDamage2 example + +#include "DetectorConstruction.hh" +#include "PhysicsList.hh" +#include "ActionInitialization.hh" + +#include "G4RunManagerFactory.hh" + +#include "G4DNAChemistryManager.hh" +#include "G4UImanager.hh" +#include "G4UIExecutive.hh" +#include "G4VisExecutive.hh" + +/* + * WARNING : Geant4 was initially not intended for this kind of application + * This code is delivered as a prototype + * We will be happy to hear from you, do not hesitate to send your feedback + * and communicate on the difficulties you may encounter + * The user interface may change in the next releases since a reiteration of + * the code has started + */ + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +G4int fSeed = 1234; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +int main(int argc, char** argv) +{ + G4UIExecutive* ui = 0; + if ( argc == 1 ) { + ui = new G4UIExecutive(argc, argv); + } + + G4Random::setTheEngine(new CLHEP::RanecuEngine); + + auto* runManager= G4RunManagerFactory::CreateRunManager(); + + // Set mandatory initialization classes + DetectorConstruction* fpDetector = new DetectorConstruction(); + ActionInitialization* fpActionIni = new ActionInitialization(); + + runManager->SetUserInitialization(new PhysicsList()); + runManager->SetUserInitialization(fpDetector); + runManager->SetUserInitialization(fpActionIni); + + //get the pointer to the User Interface manager + G4UImanager* UI = G4UImanager::GetUIpointer(); + G4VisManager* vM = new G4VisExecutive; + + G4String fileName = ""; + G4String command = "/control/execute "; + + if (argc == 1) { + vM->Initialize(); + G4Random::setTheSeed(fSeed); + UI->ApplyCommand("/control/execute init_vis.in"); + ui->SessionStart(); + delete ui; + } + + else if (argc == 2) // batch mode + { + fileName = argv[1]; + } + + else if (argc > 2) + { + fileName = argv[1]; + fSeed = atoi(argv[2]); + } + + if (argc > 1) { + G4Random::setTheSeed(fSeed); + UI->ApplyCommand(command+fileName); + } + + // Job termination + // Free the store: user actions, physics_list and detector_description are + // owned and deleted by the run manager, so they should not be deleted + // in the main() program ! + delete runManager; + delete vM; + return 0; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/dnadamage2/dnadamage2.in b/examples/extended/medical/dna/dnadamage2/dnadamage2.in new file mode 100644 index 00000000000..0f2911596d3 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/dnadamage2.in @@ -0,0 +1,59 @@ +# Set Number of Threads +/run/numberOfThreads 1 + +# Set electron solvation process: "Meesungnoen2002", "Ritchie1994", "Terrisol1990" +/process/dna/e-SolvationSubType Meesungnoen2002 + +# Chemistry Scavenger Cocentrations +# Units are assumed to be mol/dm3 (M) +/chem/scavenger/DMSO 5e-4 +/chem/scavenger/Oxygen 0.27e-3 + +# Register Physics and Chemistries +/physics/SetPhysics G4EmDNAPhysics_option2 +/physics/SetChemistry G4EmDNAChemistryForPlasmids + +# Plasmid DNA Settings (Befor Initialize) +/det/PlasmidFile pUC19.xyz +/det/OffSetFile PlasmidOffsets.txt +/det/UseDNAVolumes True +/det/NbOfPlasmids 1 + +/run/initialize + +# World Size Settings +/det/setSize 1 um + +# Spectrum source settings +/fpGun/SourceFile CaesiumSource.src + +# Number of primaries per event +# Correlates with accumulated dose. +/fpGun/PrimariesPerEvent 145 + +# Chemistry Scheduler Settings +/scheduler/endTime 100 microsecond +/scorer/species/nOfTimeBins 100 +/scorer/species/addTimeToRecord 1 microsecond +/scorer/species/addTimeToRecord 10 microsecond + +# GValues: Output Options +/scorer/species/OutputFile SpeciesInfo +/scorer/species/OutputFormat ASCII + +# SB: Output Options +/scorer/StrandBreak/OutputFile StrandBreakInfo +/scorer/StrandBreak/OutputFormat ASCII +/scorer/StrandBreak/BreakEnergy 17.5 eV + +# Verbose Settings +/tracking/verbose 0 +/scheduler/verbose 0 + +# Print Chemistry +/chem/reaction/print + +# Run +/run/printProgress 10 +/run/beamOn 10 + diff --git a/examples/extended/medical/dna/dnadamage2/dnadamage2.out b/examples/extended/medical/dna/dnadamage2/dnadamage2.out new file mode 100644 index 00000000000..9c9a9421fb7 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/dnadamage2.out @@ -0,0 +1,486 @@ +Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Forcing G4RunManager type... + + ############################################ + !!! WARNING - FPE detection is activated !!! + ############################################ + + + ################################ + !!! G4Backtrace is activated !!! + ################################ + + +************************************************************** + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) + Copyright : Geant4 Collaboration + References : NIM A 506 (2003), 250-303 + : IEEE-TNS 53 (2006), 270-278 + : NIM A 835 (2016), 186-225 + WWW : http://geant4.org/ +************************************************************** + +===== Register Physics constructor ==== G4EmDNAPhysics_option2 +===== Register Chemistry constructor ==== G4EmDNAChemistryForPlasmids +Visualization Manager instantiating with verbosity "warnings (3)"... +*** /run/numberOfThreads command is issued in sequential mode. +Command is ignored. +===== Register Chemistry constructor ==== G4EmDNAChemistryForPlasmids +G4SDManager::AddNewCollection : the collection is registered at 1 +G4SDManager::AddNewCollection : the collection is registered at 2 +G4SDManager::AddNewCollection : the collection is registered at 3 +New sensitive detector is registered at / +#### the geometry has been modified +Number of chemical species involved in reactions = 11 +Reaction Reaction Rate [dm3/(mol*s)] +-------------------------------------------------------------------------------------------- +H3O^1 + OH^-1 -> No product 1.13e+11 +-------------------------------------------------------------------------------------------- +H3O^1 + e_aq^-1 -> OH^-1 + H_2^0 2.5e+10 +-------------------------------------------------------------------------------------------- +H3O^1 + e_aq^-1 -> OH^-1 + H_2^0 2.5e+10 +-------------------------------------------------------------------------------------------- +OH^0 + e_aq^-1 -> OH^-1 2.95e+10 +-------------------------------------------------------------------------------------------- +OH^0 + H^0 -> No product 1.55e+10 +-------------------------------------------------------------------------------------------- +OH^0 + OH^0 -> H2O2^0 5.5e+09 +-------------------------------------------------------------------------------------------- +OH^0 + DMSO^0^0 -> No product 3.55 +-------------------------------------------------------------------------------------------- +OH^0 + DNA_Deoxyribose^0 -> DNA_DamagedDeoxyriboseOH^0 1.04747e+09 +-------------------------------------------------------------------------------------------- +OH^0 + HO_2^0 -> O_2^0 7.9e+09 +-------------------------------------------------------------------------------------------- +e_aq^-1 + H2O2^0 -> OH^-1 + OH^0 1.1e+10 +-------------------------------------------------------------------------------------------- +e_aq^-1 + e_aq^-1 -> OH^-1 + OH^-1 + H_2^0 6.36e+09 +-------------------------------------------------------------------------------------------- +e_aq^-1 + DMSO^0^0 -> No product 0.0019 +-------------------------------------------------------------------------------------------- +e_aq^-1 + DNA_Deoxyribose^0 -> DNA_DamagedDeoxyriboseEAQ^0 1e+07 +-------------------------------------------------------------------------------------------- +e_aq^-1 + Oxygen(B)^0 -> O_2^-1 5.13 +-------------------------------------------------------------------------------------------- +e_aq^-1 + O_2^0 -> O_2^-1 1.9e+10 +-------------------------------------------------------------------------------------------- +H^0 + H2O2^0 -> OH^0 9e+07 +-------------------------------------------------------------------------------------------- +H^0 + H^0 -> H_2^0 5.03e+09 +-------------------------------------------------------------------------------------------- +H^0 + DMSO^0^0 -> No product 0.0135 +-------------------------------------------------------------------------------------------- +H^0 + DNA_Deoxyribose^0 -> DNA_DamagedDeoxyriboseH^0 3e+07 +-------------------------------------------------------------------------------------------- +H^0 + Oxygen(B)^0 -> HO_2^0 5.67 +-------------------------------------------------------------------------------------------- +H^0 + O_2^0 -> HO_2^0 2.1e+10 +-------------------------------------------------------------------------------------------- +======================================================================= +====== Electromagnetic Physics Parameters ======== +======================================================================= +LPM effect enabled 1 +Enable creation and use of sampling tables 0 +Apply cuts on all EM processes 0 +Use combined TransportationWithMsc Disabled +Use general process 0 +Enable linear polarisation for gamma 0 +Enable photoeffect sampling below K-shell 1 +Enable sampling of quantum entanglement 0 +X-section factor for integral approach 0.8 +Min kinetic energy for tables 10 eV +Max kinetic energy for tables 300 MeV +Number of bins per decade of a table 20 +Verbose level 1 +Verbose level for worker thread 0 +Bremsstrahlung energy threshold above which + primary e+- is added to the list of secondary 100 TeV +Bremsstrahlung energy threshold above which primary + muon/hadron is added to the list of secondary 100 TeV +Lowest triplet kinetic energy 1 MeV +Enable sampling of gamma linear polarisation 0 +5D gamma conversion model type 0 +5D gamma conversion model on isolated ion 0 +Livermore data directory epics_2017 +======================================================================= +====== Ionisation Parameters ======== +======================================================================= +Step function for e+- (0.2, 0.01 mm) +Step function for muons/hadrons (0.1, 0.05 mm) +Step function for light ions (0.1, 0.02 mm) +Step function for general ions (0.1, 0.001 mm) +Lowest e+e- kinetic energy 0 eV +Lowest muon/hadron kinetic energy 1 keV +Use ICRU90 data 1 +Fluctuations of dE/dx are enabled 1 +Type of fluctuation model for leptons and hadrons Universal +Use built-in Birks satuaration 0 +Build CSDA range enabled 0 +Use cut as a final range enabled 0 +Enable angular generator interface 1 +Max kinetic energy for CSDA tables 1 GeV +Max kinetic energy for NIEL computation 0 eV +Linear loss limit 0.01 +Read data from file for e+e- pair production by mu 0 +======================================================================= +====== Multiple Scattering Parameters ======== +======================================================================= +Type of msc step limit algorithm for e+- 2 +Type of msc step limit algorithm for muons/hadrons 0 +Msc lateral displacement for e+- enabled 1 +Msc lateral displacement for muons and hadrons 0 +Urban msc model lateral displacement alg96 1 +Range factor for msc step limit for e+- 0.08 +Range factor for msc step limit for muons/hadrons 0.2 +Geometry factor for msc step limitation of e+- 2.5 +Safety factor for msc step limit for e+- 0.6 +Skin parameter for msc step limitation of e+- 3 +Lambda limit for msc step limit for e+- 1 mm +Use Mott correction for e- scattering 1 +Factor used for dynamic computation of angular + limit between single and multiple scattering 1 +Fixed angular limit between single + and multiple scattering 3.1416 rad +Upper energy limit for e+- multiple scattering 100 MeV +Type of electron single scattering model 0 +Type of nuclear form-factor 1 +Screening factor 1 +======================================================================= +====== Atomic Deexcitation Parameters ======== +======================================================================= +Fluorescence enabled 1 +Directory in G4LEDATA for fluorescence data files fluor +Auger electron cascade enabled 1 +PIXE atomic de-excitation enabled 0 +De-excitation module ignores cuts 1 +Type of PIXE cross section for hadrons Empirical +Type of PIXE cross section for e+- Livermore +======================================================================= +====== DNA Physics Parameters ======== +======================================================================= +Use fast sampling in DNA models 1 +Use Stationary option in DNA models 0 +Use DNA with multiple scattering of e- 0 +Use DNA e- solvation model type 11003 +======================================================================= + +### === Deexcitation model UAtomDeexcitation is activated for 1 region: + DefaultRegionForTheWorld 1 1 0 +### === Auger flag: 1 +### === Ignore cuts flag: 1 + +phot: for gamma SubType=12 BuildTable=0 + LambdaPrime table from 200 keV to 300 MeV in 59 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermorePhElectric : Emin= 0 eV Emax= 300 MeV SauterGavrila Fluo + +compt: for gamma SubType=13 BuildTable=1 + Lambda table from 10 eV to 1 MeV, 19 bins/decade, spline: 1 + LambdaPrime table from 1 MeV to 300 MeV in 46 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LowEPComptonModel : Emin= 0 eV Emax= 20 MeV Fluo + KleinNishina : Emin= 20 MeV Emax= 300 MeV Fluo + +conv: for gamma SubType=14 BuildTable=1 + Lambda table from 1.022 MeV to 300 MeV, 30 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + BetheHeitlerLPM : Emin= 0 eV Emax= 300 MeV ModifiedTsai + +Rayl: for gamma SubType=11 BuildTable=1 + Lambda table from 10 eV to 150 keV, 19 bins/decade, spline: 0 + LambdaPrime table from 150 keV to 300 MeV in 62 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermoreRayleigh : Emin= 0 eV Emax= 300 MeV CullenGenerator + +msc: for e- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + GoudsmitSaunderson : Emin= 1 MeV Emax= 300 MeV Nbins=40 1 MeV - 300 MeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +eIoni: for e- XStype:3 SubType=2 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + StepFunction=(0.2, 0.01 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MollerBhabha : Emin= 1 MeV Emax= 300 MeV deltaVI + +eBrem: for e- XStype:4 SubType=3 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + LPM flag: 1 for E > 0.3 GeV, VertexHighEnergyTh(GeV)= 100000 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eBremSB : Emin= 1 MeV Emax= 300 MeV AngularGen2BS + +e-_G4DNAElectronSolvation: for e- SubType=58 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNAOneStepThermalizationModel_Meesungnoen2002 : Emin= 0 eV Emax= 7.4 eV + DummyModel : Emin= 7.4 eV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +e-_G4DNAElastic: for e- SubType=51 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNAChampionElasticModel : Emin= 0 eV Emax= 1 MeV + DummyModel : Emin= 1 MeV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +e-_G4DNAExcitation: for e- SubType=52 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNABornExcitationModel : Emin= 0 eV Emax= 1 MeV + DummyModel : Emin= 1 MeV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +e-_G4DNAIonisation: for e- SubType=53 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNABornIonisationModel : Emin= 0 eV Emax= 1 MeV deltaBorn Fluo + DummyModel : Emin= 1 MeV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +e-_G4DNAVibExcitation: for e- SubType=54 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNASancheExcitationModel : Emin= 0 eV Emax= 100 eV + DummyModel : Emin= 100 eV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +e-_G4DNAAttachment: for e- SubType=55 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNAMeltonAttachmentModel : Emin= 0 eV Emax= 13 eV + DummyModel : Emin= 13 eV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +msc: for e+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + GoudsmitSaunderson : Emin= 0 eV Emax= 300 MeV Nbins=120 100 eV - 300 MeV + StepLim=SafetyPlus Rfact=0.08 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=3 Llim=1 mm + +eIoni: for e+ XStype:3 SubType=2 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + StepFunction=(0.2, 0.01 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MollerBhabha : Emin= 0 eV Emax= 300 MeV deltaVI + +eBrem: for e+ XStype:4 SubType=3 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + LPM flag: 1 for E > 0.3 GeV, VertexHighEnergyTh(GeV)= 100000 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eBremSB : Emin= 0 eV Emax= 300 MeV AngularGen2BS + +annihil: for e+ XStype:2 SubType=5 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eplus2gg : Emin= 0 eV Emax= 300 MeV + +proton_G4DNAElastic: for proton SubType=51 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DNAIonElasticModel : Emin= 0 eV Emax= 1 MeV + DummyModel : Emin= 1 MeV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +proton_G4DNAExcitation: for proton SubType=52 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 500 keV +DNABornExcitationModel : Emin= 500 keV Emax= 100 MeV +DNARPWBAExcitationModel : Emin= 100 MeV Emax= 300 MeV + +proton_G4DNAIonisation: for proton SubType=53 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNARuddIonisationExtendedModel : Emin= 0 eV Emax= 500 keV deltaRudd Fluo +DNABornIonisationModel : Emin= 500 keV Emax= 100 MeV deltaBorn Fluo +DNARPWBAIonisationModel : Emin= 100 MeV Emax= 300 MeV deltaBorn Fluo + +proton_G4DNAChargeDecrease: for proton SubType=56 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 300 MeV + +GenericIon_G4DNAIonisation: for GenericIon SubType=53 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 eV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm +DNARuddIonisationExtendedModel : Emin= 100 eV Emax= 300 MeV deltaRudd Fluo + +alpha_G4DNAElastic: for alpha SubType=51 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DNAIonElasticModel : Emin= 0 eV Emax= 1 MeV + DummyModel : Emin= 1 MeV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +alpha_G4DNAExcitation: for alpha SubType=52 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV + +alpha_G4DNAIonisation: for alpha SubType=53 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 eV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm +DNARuddIonisationExtendedModel : Emin= 100 eV Emax= 300 MeV deltaRudd Fluo + +alpha_G4DNAChargeDecrease: for alpha SubType=56 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 300 MeV + +alpha+_G4DNAElastic: for alpha+ SubType=51 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DNAIonElasticModel : Emin= 0 eV Emax= 1 MeV + DummyModel : Emin= 1 MeV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +alpha+_G4DNAExcitation: for alpha+ SubType=52 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV + +alpha+_G4DNAIonisation: for alpha+ SubType=53 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 eV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm +DNARuddIonisationExtendedModel : Emin= 100 eV Emax= 300 MeV deltaRudd Fluo + +alpha+_G4DNAChargeIncrease: for alpha+ SubType=57 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 300 MeV + +alpha+_G4DNAChargeDecrease: for alpha+ SubType=56 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNADingfelderChargeDecreaseModel : Emin= 0 eV Emax= 300 MeV + +msc: for anti_proton SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 300 MeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +hIoni: for anti_proton XStype:3 SubType=2 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax= 2 MeV deltaVI + BetheBloch : Emin= 2 MeV Emax= 300 MeV deltaVI + +helium_G4DNAElastic: for helium SubType=51 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DNAIonElasticModel : Emin= 0 eV Emax= 1 MeV + DummyModel : Emin= 1 MeV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +helium_G4DNAExcitation: for helium SubType=52 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV + +helium_G4DNAIonisation: for helium SubType=53 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 eV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm +DNARuddIonisationExtendedModel : Emin= 100 eV Emax= 300 MeV deltaRudd Fluo + +helium_G4DNAChargeIncrease: for helium SubType=57 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 300 MeV + +hydrogen_G4DNAElastic: for hydrogen SubType=51 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DNAIonElasticModel : Emin= 0 eV Emax= 1 MeV + DummyModel : Emin= 1 MeV Emax= 300 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +hydrogen_G4DNAExcitation: for hydrogen SubType=52 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNAMillerGreenExcitationModel : Emin= 0 eV Emax= 300 MeV + +hydrogen_G4DNAIonisation: for hydrogen SubType=53 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + DummyModel : Emin= 0 eV Emax= 100 eV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm +DNARuddIonisationExtendedModel : Emin= 100 eV Emax= 300 MeV deltaRudd Fluo + +hydrogen_G4DNAChargeIncrease: for hydrogen SubType=57 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== +DNADingfelderChargeIncreaseModel : Emin= 0 eV Emax= 300 MeV + +msc: for kaon+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 300 MeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +hIoni: for kaon+ XStype:3 SubType=2 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=1.05231 MeV deltaVI + BetheBloch : Emin=1.05231 MeV Emax= 300 MeV deltaVI + +msc: for kaon- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 300 MeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +hIoni: for kaon- XStype:3 SubType=2 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=1.05231 MeV deltaVI + BetheBloch : Emin=1.05231 MeV Emax= 300 MeV deltaVI + +msc: for mu+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 300 MeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +hIoni: for mu+ XStype:3 SubType=2 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=225.219 keV deltaVI + BetheBloch : Emin=225.219 keV Emax= 300 MeV deltaVI + +msc: for mu- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 300 MeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +hIoni: for mu- XStype:3 SubType=2 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=225.219 keV deltaVI + BetheBloch : Emin=225.219 keV Emax= 300 MeV deltaVI + +msc: for pi+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 300 MeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +hIoni: for pi+ XStype:3 SubType=2 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=297.505 keV deltaVI + BetheBloch : Emin=297.505 keV Emax= 300 MeV deltaVI + +msc: for pi- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 300 MeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=3 Llim=1 mm + +hIoni: for pi- XStype:3 SubType=2 + dE/dx and range tables from 10 eV to 300 MeV in 140 bins + Lambda tables from threshold to 300 MeV, 20 bins/decade, spline: 1 + StepFunction=(0.1, 0.05 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=297.505 keV deltaVI + BetheBloch : Emin=297.505 keV Emax= 300 MeV deltaVI +G4VisManager: Using G4TrajectoryDrawByCharge as fallback trajectory model. +See commands in /vis/modeling/trajectories/ for other options. +### Run 0 starts. +--> Event 0 starts. +DNAMolecularIRTModel will be used + +--------------------End of Global Run----------------------- + The run has 10 events +Number of events recorded by the species scorer = 10 + Total energy deposited in the world volume : 1.4726e+05 eV + ------------------------------------------------------------ + +Graphics systems deleted. +Visualization Manager deleting... diff --git a/examples/extended/medical/dna/dnadamage2/include/ActionInitialization.hh b/examples/extended/medical/dna/dnadamage2/include/ActionInitialization.hh new file mode 100644 index 00000000000..f7c7ab13d31 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/include/ActionInitialization.hh @@ -0,0 +1,64 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// DNADAMAGE2 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +/// \file ActionInitialization.hh +/// \brief Definition of the ActionInitialization class + +#ifndef DNADAMAGE2_ActionInitialization_h +#define DNADAMAGE2_ActionInitialization_h 1 + +#include "G4VUserActionInitialization.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class ActionInitialization : public G4VUserActionInitialization +{ +public: + ActionInitialization(); + ~ActionInitialization() override = default; + + void BuildForMaster() const override; + void Build() const override; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/dnadamage2/include/DetectorConstruction.hh b/examples/extended/medical/dna/dnadamage2/include/DetectorConstruction.hh new file mode 100644 index 00000000000..aa71e2bd1ad --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/include/DetectorConstruction.hh @@ -0,0 +1,113 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// DNADAMAGE2 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +/// \file DetectorConstruction.hh +/// \brief Definition of the DetectorConstruction class + +#ifndef DNADAMAGE2_DetectorConstruction_h +#define DNADAMAGE2_DetectorConstruction_h 1 + +#include "G4VUserDetectorConstruction.hh" +#include "G4UImessenger.hh" +#include "G4Orb.hh" +#include "G4MoleculeGun.hh" +#include "G4UIcmdWithAString.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcmdWithABool.hh" +#include "PhysGeoImport.hh" +#include "StackingAction.hh" + +class G4VPhysicalVolume; +class G4LogicalVolume; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class DetectorConstruction : public G4VUserDetectorConstruction, + public G4UImessenger +{ +public: + DetectorConstruction(); + ~DetectorConstruction() override; + void SetNewValue(G4UIcommand*,G4String) override; + void SetSize(G4double); + + G4VPhysicalVolume* Construct() override; + void ConstructSDandField() override; + void ReadOffsetFile(G4String); + void AddDNAInformation(G4int, G4ThreeVector); + void SetStacking(StackingAction* stack) {fpStacking = stack;} + StackingAction* GetStacking() {return fpStacking;} + + std::vector GetDNANames() {return fDNANames;} + std::vector GetDNAPositions() {return fDNAPositions;} + std::vector> GetDNADetails() {return fDNADetails;} + +private: + G4UIdirectory* fDetDir = nullptr; + G4UIcmdWithAString* fpOffSetFileUI = nullptr; + G4UIcmdWithAString* fpPlasmidFile = nullptr; + G4UIcmdWithAnInteger* fpPlasmidNbUI = nullptr; + G4UIcmdWithADoubleAndUnit* fSizeCmd = nullptr; + G4UIcmdWithABool* fpUseDNA = nullptr; + + G4Orb* fPlasmidEnvelope = nullptr; + G4double fWorldSize = 1 * um; + + G4int fNbOfPlasmids = 0; + G4String fPlasmidFile = "VoxelStraight.fab2g4dna"; + G4bool fUseDNAVolumes = false; + std::vector fVOffset; + + std::vector fDNANames; + std::vector fDNAPositions; + std::vector> fDNADetails; + + std::vector fSampleDNANames; + std::vector fSampleDNAPositions; + std::vector> fSampleDNADetails; + + StackingAction* fpStacking = nullptr; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/dnadamage2/include/G4EmDNAChemistryForPlasmids.hh b/examples/extended/medical/dna/dnadamage2/include/G4EmDNAChemistryForPlasmids.hh new file mode 100644 index 00000000000..bb976ab10e4 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/include/G4EmDNAChemistryForPlasmids.hh @@ -0,0 +1,81 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file G4EmDNAChemistryForPlasmids.hh +/// \brief Definition of the Chemistry parameters with DNA reactions +/* + * G4EmDNAChemistryForPlasmids.hh + * + * Created on: Feb 10, 2021 + * Author: J. Naoki D. Kondo + * W. G. Shin, J. Ramos-Mendez and B. Faddegon +*/ + +#ifndef DNADAMAGE2_ChemistryForPlasmids_hh +#define DNADAMAGE2_ChemistryForPlasmids_hh 1 + +#include "G4UIcmdWithADouble.hh" +#include "G4VPhysicsConstructor.hh" +#include "G4VUserChemistryList.hh" +#include +#include "globals.hh" + +class G4DNAMolecularReactionTable; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class G4EmDNAChemistryForPlasmids:public G4VUserChemistryList, + public G4VPhysicsConstructor +{ +public: + G4EmDNAChemistryForPlasmids(); + G4EmDNAChemistryForPlasmids(G4double, G4double); + ~G4EmDNAChemistryForPlasmids() override = default; + + void ConstructParticle() override + { + ConstructMolecule(); + } + + void ConstructMolecule() override; + void ConstructProcess() override; + + void ConstructDissociationChannels() override; + void ConstructReactionTable(G4DNAMolecularReactionTable*) override; + void ConstructTimeStepModel(G4DNAMolecularReactionTable*) override; + + void DeclareDMSOAndDNAReactions(G4DNAMolecularReactionTable*); + void DeclareOxygenReactions(G4DNAMolecularReactionTable*); + +private: + G4double fDMSO = 1E-4; + G4double fOxygen = 0.25E-3; + + //G4DNAMolecularReactionTable* fReactionTable = nullptr; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/dnadamage2/include/MoleculeInserter.hh b/examples/extended/medical/dna/dnadamage2/include/MoleculeInserter.hh new file mode 100644 index 00000000000..96afc6a786b --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/include/MoleculeInserter.hh @@ -0,0 +1,108 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This class was made using G4MoleculeGun as a base +// G4MoleculeGun Author: Mathieu Karamitros +// +// The code is developed in the framework of the ESA AO7146 +// +// We would be very happy hearing from you, send us your feedback! :) +// +// In order for Geant4-DNA to be maintained and still open-source, +// article citations are crucial. +// If you use Geant4-DNA chemistry and you publish papers about your software, +// in addition to the general paper on Geant4-DNA: +// +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// we would be very happy if you could please also cite the following +// reference papers on chemistry: +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +// J. Comput. Phys. 274 (2014) 841-882 +// Prog. Nucl. Sci. Tec. 2 (2011) 503-508 +// +/// \file MoleculeInserter.hh +/// \brief Definition of the DNA chemical species inserter for IRT + +#ifndef DNADAMAGE2_moleculeinserter_h +#define DNADAMAGE2_moleculeinserter_h 1 + +#include "G4ITGun.hh" +#include "globals.hh" +#include "G4ThreeVector.hh" +#include +#include +#include + +class G4Track; +class MoleculeInserter; +class G4Molecule; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class MoleculeShoot { +public: + MoleculeShoot(); + ~MoleculeShoot() = default; + void Shoot(MoleculeInserter*); + +public: + G4int fNumber = 0; + G4String fMoleculeName = "None"; + G4double fTime = 1; + G4ThreeVector fPosition = G4ThreeVector(); +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class MoleculeInserter : public G4ITGun { +public: + MoleculeInserter(); + MoleculeInserter(G4bool); + ~MoleculeInserter() = default; + void DefineTracks() override; + void AddMolecule(const G4String& moleculeName, + const G4ThreeVector& position, double time = 0); + void PushToChemistry(G4Molecule*, G4double, G4ThreeVector); + void CreateMolecule(G4Molecule*, G4double, G4ThreeVector); + void CreateMolecule(G4String, G4double, G4ThreeVector); + void Clean(); + + std::vector const GetInsertedTracks() {return fInsertedTracks;} + +private: + G4bool fSaveTrackID = true; + std::vector fInsertedTracks; + +protected: + std::vector fShoots; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/dnadamage2/include/PhysGeoImport.hh b/examples/extended/medical/dna/dnadamage2/include/PhysGeoImport.hh new file mode 100644 index 00000000000..167490895e7 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/include/PhysGeoImport.hh @@ -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. * +// ******************************************************************** +// +// Authors: S. Meylan and C. Villagrasa (IRSN, France) +// Update: H. Tran (IRSN, France) :20/12/2018 +// J. Naoki D. Kondo (UCSF, US): 10/10/2021 +// +/// \file PhysGeoImport.hh +/// \brief Definition of the plasmid load methods for the geometry + +#ifndef DNADAMAGE2_GeoImport_h +#define DNADAMAGE2_GeoImport_h 1 + +#include +#include +#include + +#include "G4String.hh" +#include "G4ThreeVector.hh" +#include "G4Orb.hh" +#include "G4VSolid.hh" +#include "G4Box.hh" +#include "G4SystemOfUnits.hh" +#include "G4SubtractionSolid.hh" +#include "G4LogicalVolume.hh" +#include "G4PVPlacement.hh" +#include "G4NistManager.hh" +#include "G4VisAttributes.hh" +#include +#include "G4H2O.hh" +#include "G4Electron_aq.hh" + +class G4VPhysicalVolume; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +struct Molecule +{ + Molecule(G4String name, G4int copyNumber, G4ThreeVector position, + G4double radius, G4double waterRadius, std::string material, G4int strand) + { + fName = name; + fMaterial = material; + fCopyNumber = copyNumber; + fPosition = position; + fRadius = radius; + fRadiusWater = waterRadius; + fStrand = strand; + } + + G4String fName = "none"; + G4String fMaterial = "none"; + + G4int fCopyNumber = -1; + G4int fStrand = -1; + + G4ThreeVector fPosition = G4ThreeVector(); + + G4double fRadius = 1; + G4double fRadiusWater = 1; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class PhysGeoImport +{ +public: + PhysGeoImport(); + ~PhysGeoImport() = default; + + G4LogicalVolume* CreateLogicVolumeXYZ(G4String fileName); + + std::vector GetMoleculesNames() {return fSampleDNANames;} + std::vector GetMoleculesPositions() {return fSampleDNAPositions;} + std::vector> GetMoleculesDetails() {return fSampleDNADetails;} + +private: + std::string fGeoName = "VoxelStraight"; + + std::map fRadiusMap; + std::map fWaterRadiusMap; + + std::vector fMolecules; + + // Materials + G4Material* fpWater = nullptr; + G4Material* fEnvelopeWater = nullptr; + + void ReadFile(G4String fileName); + + G4double fOffsetX = 0; + G4double fOffsetY = 0; + G4double fOffsetZ = 0; + G4double fXMin = 1000; + G4double fXMax = -1000; + G4double fYMin = 1000; + G4double fYMax = -1000; + G4double fZMin = 1000; + G4double fZMax = -1000; + std::ofstream fOutDNA; + + std::vector fVertexes; + + std::vector fSampleDNANames; + std::vector fSampleDNAPositions; + std::vector> fSampleDNADetails; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/dnadamage2/include/PhysicsList.hh b/examples/extended/medical/dna/dnadamage2/include/PhysicsList.hh new file mode 100644 index 00000000000..c7cfec125c5 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/include/PhysicsList.hh @@ -0,0 +1,90 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// DNADAMAGE2 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Author: J. Naoki D. Kondo (UCSF, US) +// +/// \file PhysicsList.hh +/// \brief Definition of the PhysicsList class + +#ifndef DNADAMAGE2_PhysicsList_h +#define DNADAMAGE2_PhysicsList_h 1 + +#include "G4VModularPhysicsList.hh" +#include "globals.hh" +#include +#include "G4UIcmdWithAString.hh" +#include "G4UIcmdWithADouble.hh" + +class G4VPhysicsConstructor; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class PhysicsList: public G4VModularPhysicsList, + public G4UImessenger +{ +public: + explicit PhysicsList(); + ~PhysicsList() override = default; + + void ConstructParticle() override; + void ConstructProcess() override; + + void SetNewValue(G4UIcommand * command, G4String newValue) override; + + void RegisterPhysicsConstructor(const G4String& name); + void RegisterChemistryConstructor(const G4String& name); + +private: + G4VPhysicsConstructor* fEmDNAPhysicsList = nullptr; + G4VPhysicsConstructor* fEmDNAChemistryList = nullptr; + G4String fPhysDNAName = ""; + G4String fChemDNAName = ""; + + G4UIcmdWithAString* fpPhysicsUI = nullptr; + G4UIcmdWithAString* fpChemistryUI = nullptr; + + G4UIcmdWithADouble* fpDMSOUI = nullptr; + G4UIcmdWithADouble* fpOxygenUI = nullptr; + + G4double fDMSO = 1E-2; + G4double fOxygen = 0.27E-3; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/dnadamage2/include/PlasmidMolecules.hh b/examples/extended/medical/dna/dnadamage2/include/PlasmidMolecules.hh new file mode 100644 index 00000000000..481ba382512 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/include/PlasmidMolecules.hh @@ -0,0 +1,116 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// This example is provided by the Geant4-DNA collaboration +// DNADAMAGE2 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// The code is developed in the framework of the ESA AO7146 +// +// We would be very happy hearing from you, send us your feedback! :) +// +// In order for Geant4-DNA to be maintained and still open-source, +// article citations are crucial. +// If you use Geant4-DNA chemistry and you publish papers about your software, +// in addition to the general paper on Geant4-DNA: +// +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// we would be very happy if you could please also cite the following +// reference papers on chemistry: +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +// J. Comput. Phys. 274 (2014) 841-882 +// Prog. Nucl. Sci. Tec. 2 (2011) 503-508 +// +/// \file PlasmidMolecules.hh +/// \brief Definition of the additional Plasmid DNA molecules + +#ifndef DNADAMAGE2_PlasmidMolecules_h +#define DNADAMAGE2_PlasmidMolecules_h 1 + +#include "globals.hh" +#include "G4ios.hh" +#include "G4ParticleDefinition.hh" +#include "G4MoleculeDefinition.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class G4DNA_Deoxyribose : public G4MoleculeDefinition +{ +private: + static /*G4ThreadLocal*/ G4DNA_Deoxyribose* fDeoxyriboseInstance; + G4DNA_Deoxyribose() {} + ~G4DNA_Deoxyribose() override = default; + +public: + static G4DNA_Deoxyribose* Definition(); +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class G4DNA_DamagedDeoxyriboseOH : public G4MoleculeDefinition +{ +private: + static /*G4ThreadLocal*/ G4DNA_DamagedDeoxyriboseOH* fDamagedDeoxyriboseOHInstance; + G4DNA_DamagedDeoxyriboseOH() {} + ~G4DNA_DamagedDeoxyriboseOH() override = default; + +public: + static G4DNA_DamagedDeoxyriboseOH* Definition(); +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class G4DNA_DamagedDeoxyriboseH : public G4MoleculeDefinition +{ +private: + static /*G4ThreadLocal*/ G4DNA_DamagedDeoxyriboseH* fDamagedDeoxyriboseHInstance; + G4DNA_DamagedDeoxyriboseH() {} + ~G4DNA_DamagedDeoxyriboseH() override = default; + +public: + static G4DNA_DamagedDeoxyriboseH* Definition(); +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class G4DNA_DamagedDeoxyriboseEAQ : public G4MoleculeDefinition +{ +private: + static /*G4ThreadLocal*/ G4DNA_DamagedDeoxyriboseEAQ* fDamagedDeoxyriboseEAQInstance; + G4DNA_DamagedDeoxyriboseEAQ() {} + ~G4DNA_DamagedDeoxyriboseEAQ() override = default; + +public: + static G4DNA_DamagedDeoxyriboseEAQ* Definition(); +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/dnadamage2/include/PrimaryGeneratorAction.hh b/examples/extended/medical/dna/dnadamage2/include/PrimaryGeneratorAction.hh new file mode 100644 index 00000000000..094348d6488 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/include/PrimaryGeneratorAction.hh @@ -0,0 +1,83 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// 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 publication: +// Med. Phys. 37 (2010) 4692-4708 +// J. Comput. Phys. 274 (2014) 841-882 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +/// \file PrimaryGeneratorAction.hh +/// \brief Definition of the PrimaryGeneratorAction class + +#ifndef DNADAMAGE2_PrimaryGeneratorAction_h +#define DNADAMAGE2_PrimaryGeneratorAction_h 1 + +#include "G4VUserPrimaryGeneratorAction.hh" +#include "G4ParticleGun.hh" +#include +#include "G4UIcmdWithAString.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "globals.hh" + +class G4ParticleGun; +class G4Event; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction, + public G4UImessenger +{ +public: + PrimaryGeneratorAction(); + ~PrimaryGeneratorAction() override; + void GeneratePrimaries(G4Event*) override; + const G4ParticleGun* GetParticleGun() const { return fParticleGun; } + void SetNewValue(G4UIcommand * command, G4String newValue) override; + +private: + void LoadSpectrum(); + G4double SampleSpectrum(); + G4double SampleProbability(G4double); + G4ThreeVector SamplePosition(); + +private: + G4ParticleGun* fParticleGun = nullptr; + G4UIcmdWithAString* fpSourceFileUI = nullptr; + G4UIcmdWithAnInteger* fpVertexUI = nullptr; + G4String fSourceFile = ""; + G4int fVertex = 1; + std::vector fEnergyWeights; + std::vector fEnergies; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/dnadamage2/include/Run.hh b/examples/extended/medical/dna/dnadamage2/include/Run.hh new file mode 100644 index 00000000000..b995f1634fc --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/include/Run.hh @@ -0,0 +1,81 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// DNADAMAGE2 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +/// \file Run.hh +/// \brief Definition of the Run class + +#ifndef DNADAMAGE2_Run_h +#define DNADAMAGE2_Run_h 1 + +#include "G4Run.hh" +#include "G4THitsMap.hh" + +#include "ScoreSpecies.hh" +#include "ScoreStrandBreaks.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class G4VPrimitiveScorer; +class Run : public G4Run +{ +public: + Run(); + ~Run() override = default; + + void RecordEvent(const G4Event*) override; + void Merge(const G4Run*) override; + + G4double GetSumDose() const { return fSumEne; } + G4VPrimitiveScorer* GetPrimitiveScorer() const { return fScorerRun;} + G4VPrimitiveScorer* GetSBScorer() const {return fStrandBreakRun;} + G4THitsMap* GetLET() {return fTotalLET;} + +private: + G4double fSumEne = 0; + G4VPrimitiveScorer* fScorerRun = nullptr; + G4VPrimitiveScorer* fLETScorerRun = nullptr; + G4VPrimitiveScorer* fStrandBreakRun = nullptr; + G4THitsMap* fTotalLET = nullptr; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/dnadamage2/include/RunAction.hh b/examples/extended/medical/dna/dnadamage2/include/RunAction.hh new file mode 100644 index 00000000000..ecde2f663e5 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/include/RunAction.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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// dnadamage3 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +// +/// \file RunAction.hh +/// \brief Definition of the RunAction class + +#ifndef DNADAMAGE2_RunAction_h +#define DNADAMAGE2_RunAction_h 1 + +#include "G4UserRunAction.hh" +#include "G4THitsMap.hh" + +class G4Run; +class DetectorConstruction; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class RunAction : public G4UserRunAction +{ +public: + RunAction(); + // TIPs: please avoid constructors with arguments + // all data can be retrieved from G4RunManager + // or others: G4SDManager::FindSensitiveDetector + ~RunAction() override = default; + + G4Run* GenerateRun() override; + void BeginOfRunAction(const G4Run*) override; + void EndOfRunAction(const G4Run*) override; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/dnadamage2/include/ScavengerMolecules.hh b/examples/extended/medical/dna/dnadamage2/include/ScavengerMolecules.hh new file mode 100644 index 00000000000..cfc23f9709d --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/include/ScavengerMolecules.hh @@ -0,0 +1,81 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// In order for Geant4-DNA to be maintained and still open-source, +// article citations are crucial. +// If you use Geant4-DNA chemistry and you publish papers about your software, +// in addition to the general paper on Geant4-DNA: +// +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178 +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +// we would be very happy if you could please also cite the following +// reference papers on chemistry: +// +// J. Comput. Phys. 274 (2014) 841-882 +// Prog. Nucl. Sci. Tec. 2 (2011) 503-508 +// +/// \file ScavengerMolecules.hh +/// \brief Definition of the Background Scavenber chemical species + +#ifndef DNADAMAGE2_ScavengerMolecules_h +#define DNADAMAGE2_ScavengerMolecules_h 1 + +#include "globals.hh" +#include "G4ios.hh" +#include "G4ParticleDefinition.hh" +#include "G4MoleculeDefinition.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class G4DMSO : public G4MoleculeDefinition +{ +private: + static /*G4ThreadLocal*/ G4DMSO* fDMSOInstance; + G4DMSO() {} + ~G4DMSO() override = default; + +public: + static G4DMSO* Definition(); +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class G4OxygenB : public G4MoleculeDefinition +{ +private: + static /*G4ThreadLocal*/ G4OxygenB* fOxygenBInstance; + G4OxygenB() {} + ~G4OxygenB() override = default; + +public: + static G4OxygenB* Definition(); +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/dnadamage2/include/ScoreLET.hh b/examples/extended/medical/dna/dnadamage2/include/ScoreLET.hh new file mode 100644 index 00000000000..d6f7fc70084 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/include/ScoreLET.hh @@ -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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// chem6 example is derived from chem4 and chem5 examples +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// W. G. Shin and S. Incerti (CENBG, France) +// +// $Id$ +// +/// \file ScoreLET.hh +/// \brief Definition of the ScoreLET class + +#ifndef DNADAMAGE2_ScoreLET_h +#define DNADAMAGE2_ScoreLET_h 1 + +#include "G4VPrimitiveScorer.hh" +#include "G4THitsMap.hh" +#include "G4UImessenger.hh" +#include "G4UIdirectory.hh" +#include "G4UIcmdWithAString.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class ScoreLET : public G4VPrimitiveScorer, + public G4UImessenger +{ +public: // with description + ScoreLET(G4String name); + ~ScoreLET() override; + void Initialize(G4HCofThisEvent*) override; + void EndOfEvent(G4HCofThisEvent*) override; + void OutputAndClear(); + + G4bool ProcessHits(G4Step*,G4TouchableHistory*) override; + G4int GetIndex(G4Step*) override; + void SetNewValue(G4UIcommand*, G4String) override; + +private: + G4UIdirectory* fpLETDir = nullptr; + G4UIcmdWithADoubleAndUnit* fpCutoff = nullptr; + + G4double fCutoff = DBL_MAX; + G4int fNEvent = 0; + G4double fLET = 0; + G4double fEdep = 0; + G4double fStepL = 0; + G4int fTrackID = 1; + + G4THitsMap* fEvtMap = nullptr; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/dnadamage2/include/ScoreSpecies.hh b/examples/extended/medical/dna/dnadamage2/include/ScoreSpecies.hh new file mode 100644 index 00000000000..e199461a6d7 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/include/ScoreSpecies.hh @@ -0,0 +1,167 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// dnadamage3 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// +/// \file ScoreSpecies.hh +/// \brief Definition of the ScoreSpecies class +// Description: +// This is a primitive scorer class for scoring the radiolitic species +// produced after irradiation in a water volume +// +// Created: 2015-10-27 by M. Karamitros, +// modified: 2016-03-16 by P. Piersimoni +// modified: 2022-01-2022 by J. Naoki D. Kondo + +#ifndef DNADAMAGE2_ScoreSpecies_h +#define DNADAMAGE2_ScoreSpecies_h 1 + +#include "G4VPrimitiveScorer.hh" +#include "G4THitsMap.hh" +#include +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIcmdWithAString.hh" +#include "G4UImessenger.hh" + +class G4VAnalysisManager; +class G4MolecularConfiguration; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class ScoreSpecies : public G4VPrimitiveScorer, + public G4UImessenger +{ +public: + ScoreSpecies(G4String name, G4int depth=0); + ~ScoreSpecies() override; + + /** Add a time at which the number of species should be recorded. + Default times are set up to 1 microsecond.*/ + inline void AddTimeToRecord(double time) + { + fTimeToRecord.insert(time); + } + + /** Remove all times to record, must be reset by user.*/ + inline void ClearTimeToRecord() + { + fTimeToRecord.clear(); + } + + /** Get number of recorded events*/ + inline int GetNumberOfRecordedEvents() const + { + return fNEvent; + } + + /** Write results to whatever chosen file format*/ + void WriteWithAnalysisManager(G4VAnalysisManager*); + + struct SpeciesInfo + { + SpeciesInfo() {} + SpeciesInfo(const SpeciesInfo& right) // Species A(B); + { + fNumber = right.fNumber; + fNumber2 = right.fNumber2; + fG = right.fG; + fG2 = right.fG2; + } + SpeciesInfo& operator=(const SpeciesInfo& right) // A = B + { + if(&right == this) return *this; + fNumber2 = right.fNumber2; + fNumber = right.fNumber; + fG = right.fG; + fG2 = right.fG2; + return *this; + } + int fNumber = 0; + int fNumber2 = 0; + double fG = 0; + double fG2 = 0; + }; + + +private: + typedef const G4MolecularConfiguration Species; + typedef std::map InnerSpeciesMap; + typedef std::map SpeciesMap; + SpeciesMap fSpeciesInfoPerTime; + + std::set fTimeToRecord; + + int fNEvent = 0; // number of processed events + double fEdep = 0; // total energy deposition + G4String fOutputType; // output type + +protected: + G4bool ProcessHits(G4Step*,G4TouchableHistory*) override; + +public: + void Initialize(G4HCofThisEvent*) override; + void EndOfEvent(G4HCofThisEvent*) override; + void DrawAll() override; + void PrintAll() override; + /** Method used in multithreading mode in order to merge + the results*/ + void AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer* ); + void OutputAndClear(); + void SetNewValue(G4UIcommand*, G4String) override; + void OutputToASCII(); + + SpeciesMap GetSpeciesInfo() {return fSpeciesInfoPerTime;} + +private: + G4int fHCID; + G4THitsMap* fEvtMap = nullptr; + + G4int fRunID = 0; + G4UIdirectory* fSpeciesdir = nullptr; + G4UIcmdWithAnInteger* fTimeBincmd = nullptr; + G4UIcmdWithADoubleAndUnit* fAddTimeToRecordcmd = nullptr; + + G4UIcmdWithAString* fOutputTypeUI = nullptr; + G4UIcmdWithAString* fOutputFileUI = nullptr; + + G4String fOutputFile = "Species_Info"; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/dnadamage2/include/ScoreStrandBreaks.hh b/examples/extended/medical/dna/dnadamage2/include/ScoreStrandBreaks.hh new file mode 100644 index 00000000000..c694405df02 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/include/ScoreStrandBreaks.hh @@ -0,0 +1,114 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// dnadamage3 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// 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 +// J. Comput. Phys. 274 (2014) 841-882 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +/// \file ScoreStrandBreaks.hh +/// \brief Definition of the ScoreStrandBreaks class + +#ifndef DNADAMAGE2_ScoreSB_h +#define DNADAMAGE2_ScoreSB_h 1 + +#include "G4VPrimitiveScorer.hh" +#include "G4THitsMap.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIcmdWithAString.hh" +#include "G4UImessenger.hh" +#include "G4DNAIRT.hh" +#include "DetectorConstruction.hh" +#include "MoleculeInserter.hh" + +class G4VAnalysisManager; +class G4MolecularConfiguration; + +typedef std::map>>> EnergyDepositMap; +typedef std::map>> DamageMap; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class ScoreStrandBreaks : public G4VPrimitiveScorer, + public G4UImessenger +{ +public: + ScoreStrandBreaks(G4String name,DetectorConstruction*,G4double*); + ~ScoreStrandBreaks() override; + + void WriteWithAnalysisManager(G4VAnalysisManager*); + DamageMap GetDamageMap() { return fDirectDamageMap; } + void ClearDamageMap() { fDirectDamageMap.clear(); } + + void Initialize(G4HCofThisEvent*) override; + void EndOfEvent(G4HCofThisEvent*) override; + void Clear(); + void DrawAll() override; + void PrintAll() override; + void AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer* ); + void OutputAndClear(G4double, G4double); + void SetNewValue(G4UIcommand*, G4String) override; + + void ASCII(G4double, G4double); + +private: + G4int fnbOfEvents = 0; + G4bool fDNAInserted = false; + G4double fBreakEnergy = 17.5 * eV; + G4double fEnergyDeposit = 0; + G4double* fRadius = nullptr; + + G4String fOutputName = "DirectDamageInfo"; + G4String fOutputType = "ascii"; + DamageMap fDirectDamageMap; + DamageMap fIndirectDamageMap; + EnergyDepositMap fEnergyDepositMap; + + G4UIcmdWithAString* fpOutputFileUI = nullptr; + G4UIcmdWithAString* fpOutputTypeUI = nullptr; + G4UIcmdWithADoubleAndUnit* fpBreakEnergyUI = nullptr; + + DetectorConstruction* fpDetector = nullptr; + std::map fDoseArray; + + MoleculeInserter* fpGun = nullptr; + +protected: + G4bool ProcessHits(G4Step*,G4TouchableHistory*) override; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/dnadamage2/include/StackingAction.hh b/examples/extended/medical/dna/dnadamage2/include/StackingAction.hh new file mode 100644 index 00000000000..762b2460988 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/include/StackingAction.hh @@ -0,0 +1,65 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// dnadamage3 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +/// \file StackingAction.hh +/// \brief Definition of the StackingAction class : manage the newly +/// generated particles + +#ifndef DNADAMAGE2_StackingAction_h +#define DNADAMAGE2_StackingAction_h 1 + +#include "G4UserStackingAction.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class DetectorConstruction; +class StackingAction : public G4UserStackingAction +{ +public: + StackingAction(); + ~StackingAction() override; + + void NewStage() override; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/dnadamage2/include/TimeStepAction.hh b/examples/extended/medical/dna/dnadamage2/include/TimeStepAction.hh new file mode 100644 index 00000000000..c91ea985d94 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/include/TimeStepAction.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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// dnadamage3 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +// +/// \file TimeStepAction.hh +/// \brief Definition of the TimeStepAction class + +#ifndef DNADAMAGE2_TimeStepAction_h +#define DNADAMAGE2_TimeStepAction_h 1 + +#include "G4UserTimeStepAction.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class TimeStepAction : public G4UserTimeStepAction +{ +public: + TimeStepAction(); + ~TimeStepAction() override = default; + TimeStepAction(const TimeStepAction& other); + TimeStepAction& operator=(const TimeStepAction& other); + + void StartProcessing() override {} + void UserPreTimeStepAction() override; + void UserPostTimeStepAction() override; + + void UserReactionAction(const G4Track& /*trackA*/, + const G4Track& /*trackB*/, + const std::vector* /*products*/) override; + + void EndProcessing() override {} + void Clear() {} +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/dnadamage2/init_vis.in b/examples/extended/medical/dna/dnadamage2/init_vis.in new file mode 100644 index 00000000000..7e4fda8f52f --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/init_vis.in @@ -0,0 +1,59 @@ +# Set Number of Threads +/run/numberOfThreads 1 + +# Set electron solvation process: "Meesungnoen2002", "Ritchie1994", "Terrisol1990" +/process/dna/e-SolvationSubType Ritchie1994 + +# Chemistry Scavenger Settings +/chem/scavenger/DMSO 5e-4 +/chem/scavenger/Oxygen 0.27e-3 + +# Register Physics and Chemistries +/physics/SetPhysics G4EmDNAPhysics_option4 +/physics/SetChemistry G4EmDNAChemistry_ForPlasmids + +# Plasmid DNA Settings (Befor Initialize) +/det/PlasmidFile pUC19.xyz +/det/OffSetFile PlasmidOffsets.txt +/det/UseDNAVolumes True +/det/NbOfPlasmids 1 + +/run/initialize + +# World Size Settings +/det/setSize 1 um + +# Spectrum source settings +/fpGun/SourceFile CaesiumSource.src + +# Number of primaries per event +# Correlates with Dose per Event. +/fpGun/PrimariesPerEvent 1 + +# Chemistry Scheduler Settings +/scheduler/endTime 100 microsecond +/scorer/species/nOfTimeBins 100 +/scorer/species/addTimeToRecord 1 microsecond +/scorer/species/addTimeToRecord 10 microsecond + +# GValues: Output Options +/scorer/species/OutputFile SpeciesInfo +/scorer/species/OutputFormat ASCII + +# SB: Output Options +/scorer/StrandBreak/OutputFile StrandBreakInfo +/scorer/StrandBreak/OutputFormat ASCII +/scorer/StrandBreak/BreakEnergy 17.5 eV + +# Verbose Settings +/tracking/verbose 0 +/scheduler/verbose 0 + +# Print Chemistry +/chem/reaction/print + +/control/execute vis.in + +# Run +/run/printProgress 1 +/run/beamOn 0 \ No newline at end of file diff --git a/examples/extended/medical/dna/dnadamage2/pUC19.xyz b/examples/extended/medical/dna/dnadamage2/pUC19.xyz new file mode 100644 index 00000000000..fbe33fd11b2 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/pUC19.xyz @@ -0,0 +1,2686 @@ +125.66 -19.502 -114.82 +125.52 -19.384 -115.11 +125.37 -19.268 -115.39 +125.21 -19.156 -115.67 +125.05 -19.049 -115.95 +124.89 -18.947 -116.23 +124.72 -18.85 -116.51 +124.55 -18.76 -116.79 +124.37 -18.675 -117.07 +124.2 -18.597 -117.35 +124.02 -18.525 -117.63 +123.84 -18.46 -117.91 +123.66 -18.402 -118.19 +123.47 -18.351 -118.48 +123.29 -18.308 -118.76 +123.11 -18.272 -119.04 +122.92 -18.245 -119.33 +122.74 -18.225 -119.62 +122.57 -18.213 -119.9 +122.39 -18.209 -120.2 +122.21 -18.213 -120.49 +122.04 -18.225 -120.78 +121.88 -18.246 -121.08 +121.72 -18.276 -121.38 +121.57 -18.314 -121.68 +121.43 -18.362 -121.98 +121.3 -18.419 -122.29 +121.18 -18.485 -122.6 +121.07 -18.558 -122.92 +120.97 -18.639 -123.23 +120.87 -18.726 -123.55 +120.78 -18.821 -123.86 +120.7 -18.922 -124.17 +120.62 -19.03 -124.49 +120.54 -19.145 -124.8 +120.47 -19.266 -125.11 +120.41 -19.394 -125.42 +120.35 -19.528 -125.72 +120.29 -19.668 -126.03 +120.23 -19.815 -126.33 +120.18 -19.967 -126.63 +120.14 -20.125 -126.93 +120.09 -20.288 -127.22 +120.05 -20.457 -127.51 +120.01 -20.631 -127.8 +119.97 -20.812 -128.09 +119.94 -20.998 -128.37 +119.91 -21.19 -128.65 +119.88 -21.388 -128.92 +119.85 -21.592 -129.19 +119.82 -21.801 -129.46 +119.79 -22.016 -129.72 +119.77 -22.237 -129.98 +119.74 -22.464 -130.23 +119.72 -22.697 -130.48 +119.69 -22.936 -130.72 +119.66 -23.182 -130.95 +119.62 -23.436 -131.17 +119.59 -23.698 -131.39 +119.55 -23.967 -131.59 +119.51 -24.242 -131.79 +119.48 -24.523 -131.98 +119.44 -24.809 -132.16 +119.41 -25.1 -132.33 +119.39 -25.395 -132.5 +119.37 -25.693 -132.66 +119.35 -25.995 -132.81 +119.34 -26.301 -132.96 +119.34 -26.609 -133.11 +119.34 -26.919 -133.25 +119.35 -27.232 -133.38 +119.36 -27.546 -133.51 +119.38 -27.861 -133.63 +119.41 -28.178 -133.75 +119.45 -28.495 -133.87 +119.5 -28.812 -133.98 +119.55 -29.129 -134.09 +119.62 -29.445 -134.2 +119.69 -29.759 -134.31 +119.78 -30.071 -134.41 +119.87 -30.38 -134.52 +119.98 -30.688 -134.62 +120.08 -30.994 -134.72 +120.2 -31.298 -134.82 +120.32 -31.6 -134.92 +120.44 -31.9 -135.02 +120.57 -32.199 -135.12 +120.71 -32.496 -135.21 +120.85 -32.792 -135.31 +120.99 -33.085 -135.4 +121.14 -33.377 -135.49 +121.29 -33.667 -135.58 +121.45 -33.954 -135.67 +121.62 -34.24 -135.75 +121.78 -34.524 -135.84 +121.96 -34.805 -135.92 +122.13 -35.085 -136 +122.31 -35.363 -136.08 +122.5 -35.639 -136.15 +122.68 -35.912 -136.23 +122.87 -36.183 -136.3 +123.07 -36.452 -136.37 +123.27 -36.718 -136.44 +123.47 -36.982 -136.51 +123.68 -37.244 -136.58 +123.89 -37.502 -136.65 +124.1 -37.758 -136.72 +124.32 -38.012 -136.78 +124.54 -38.263 -136.85 +124.76 -38.511 -136.91 +124.99 -38.757 -136.98 +125.21 -39.001 -137.04 +125.44 -39.242 -137.11 +125.68 -39.481 -137.18 +125.91 -39.718 -137.25 +126.15 -39.952 -137.31 +126.39 -40.183 -137.38 +126.63 -40.41 -137.45 +126.88 -40.633 -137.52 +127.13 -40.853 -137.59 +127.38 -41.069 -137.65 +127.64 -41.28 -137.72 +127.9 -41.487 -137.78 +128.17 -41.689 -137.84 +128.44 -41.887 -137.9 +128.72 -42.079 -137.96 +128.99 -42.267 -138.01 +129.28 -42.45 -138.06 +129.56 -42.628 -138.11 +129.85 -42.801 -138.16 +130.14 -42.968 -138.2 +130.44 -43.129 -138.24 +130.74 -43.283 -138.28 +131.04 -43.432 -138.31 +131.35 -43.573 -138.34 +131.66 -43.708 -138.37 +131.98 -43.835 -138.4 +132.29 -43.955 -138.42 +132.61 -44.067 -138.44 +132.94 -44.17 -138.45 +133.26 -44.265 -138.46 +133.59 -44.35 -138.47 +133.93 -44.423 -138.48 +134.26 -44.484 -138.48 +134.6 -44.535 -138.47 +134.93 -44.576 -138.46 +135.27 -44.607 -138.45 +135.61 -44.631 -138.44 +135.95 -44.646 -138.42 +136.29 -44.653 -138.39 +136.63 -44.653 -138.37 +136.97 -44.645 -138.33 +137.3 -44.632 -138.3 +137.64 -44.611 -138.25 +137.98 -44.583 -138.21 +138.31 -44.549 -138.16 +138.64 -44.509 -138.1 +138.98 -44.463 -138.04 +139.3 -44.411 -137.98 +139.63 -44.353 -137.91 +139.96 -44.29 -137.83 +140.28 -44.222 -137.75 +140.6 -44.15 -137.67 +140.92 -44.073 -137.58 +141.24 -43.993 -137.48 +141.55 -43.907 -137.38 +141.86 -43.818 -137.27 +142.17 -43.726 -137.16 +142.47 -43.631 -137.04 +142.77 -43.534 -136.91 +143.07 -43.436 -136.78 +143.36 -43.336 -136.64 +143.65 -43.238 -136.49 +143.94 -43.142 -136.33 +144.22 -43.047 -136.17 +144.5 -42.952 -136 +144.78 -42.856 -135.83 +145.05 -42.759 -135.65 +145.32 -42.661 -135.47 +145.59 -42.56 -135.28 +145.85 -42.458 -135.09 +146.11 -42.353 -134.9 +146.36 -42.246 -134.7 +146.61 -42.136 -134.49 +146.86 -42.023 -134.29 +147.1 -41.907 -134.08 +147.33 -41.788 -133.87 +147.57 -41.666 -133.65 +147.8 -41.542 -133.43 +148.02 -41.413 -133.21 +148.24 -41.282 -132.99 +148.46 -41.146 -132.77 +148.67 -41.006 -132.54 +148.88 -40.863 -132.31 +149.08 -40.716 -132.08 +149.28 -40.565 -131.85 +149.47 -40.41 -131.61 +149.65 -40.252 -131.38 +149.84 -40.089 -131.14 +150.01 -39.923 -130.9 +150.18 -39.753 -130.66 +150.35 -39.579 -130.42 +150.51 -39.401 -130.18 +150.66 -39.219 -129.94 +150.81 -39.032 -129.7 +150.95 -38.841 -129.45 +151.09 -38.646 -129.21 +151.22 -38.446 -128.97 +151.34 -38.241 -128.73 +151.46 -38.03 -128.49 +151.56 -37.813 -128.25 +151.66 -37.59 -128.01 +151.75 -37.362 -127.77 +151.83 -37.129 -127.54 +151.9 -36.891 -127.31 +151.97 -36.649 -127.08 +152.02 -36.403 -126.85 +152.07 -36.153 -126.62 +152.11 -35.9 -126.4 +152.14 -35.643 -126.18 +152.16 -35.382 -125.96 +152.18 -35.119 -125.75 +152.19 -34.853 -125.54 +152.19 -34.584 -125.33 +152.19 -34.314 -125.12 +152.17 -34.04 -124.92 +152.15 -33.765 -124.72 +152.13 -33.487 -124.53 +152.09 -33.207 -124.34 +152.05 -32.925 -124.16 +152 -32.641 -123.97 +151.94 -32.355 -123.8 +151.88 -32.067 -123.63 +151.81 -31.778 -123.47 +151.73 -31.487 -123.31 +151.64 -31.195 -123.16 +151.55 -30.902 -123.01 +151.45 -30.607 -122.88 +151.34 -30.312 -122.75 +151.22 -30.016 -122.63 +151.1 -29.72 -122.51 +150.98 -29.424 -122.4 +150.85 -29.127 -122.3 +150.71 -28.831 -122.2 +150.57 -28.536 -122.11 +150.43 -28.241 -122.02 +150.28 -27.946 -121.93 +150.13 -27.652 -121.85 +149.98 -27.358 -121.78 +149.82 -27.065 -121.71 +149.66 -26.773 -121.64 +149.5 -26.482 -121.58 +149.33 -26.191 -121.52 +149.16 -25.901 -121.47 +148.99 -25.612 -121.42 +148.81 -25.324 -121.37 +148.64 -25.037 -121.33 +148.46 -24.75 -121.29 +148.28 -24.464 -121.25 +148.1 -24.178 -121.22 +147.91 -23.893 -121.19 +147.73 -23.608 -121.16 +147.55 -23.324 -121.13 +147.36 -23.039 -121.11 +147.18 -22.755 -121.09 +146.99 -22.471 -121.06 +146.81 -22.186 -121.04 +146.62 -21.901 -121.02 +146.44 -21.615 -120.99 +146.26 -21.327 -120.96 +146.09 -21.038 -120.93 +145.92 -20.746 -120.89 +145.75 -20.453 -120.85 +145.59 -20.158 -120.8 +145.42 -19.863 -120.75 +145.26 -19.567 -120.71 +145.1 -19.271 -120.67 +144.94 -18.975 -120.63 +144.78 -18.679 -120.59 +144.61 -18.383 -120.57 +144.44 -18.087 -120.54 +144.28 -17.792 -120.52 +144.11 -17.499 -120.51 +143.93 -17.206 -120.51 +143.76 -16.916 -120.51 +143.58 -16.627 -120.52 +143.39 -16.341 -120.54 +143.21 -16.058 -120.57 +143.02 -15.779 -120.61 +142.83 -15.504 -120.66 +142.63 -15.233 -120.73 +142.44 -14.967 -120.81 +142.24 -14.709 -120.91 +142.04 -14.459 -121.02 +141.84 -14.22 -121.16 +141.64 -13.993 -121.31 +141.44 -13.786 -121.5 +141.25 -13.599 -121.71 +141.06 -13.43 -121.94 +140.88 -13.277 -122.18 +140.7 -13.137 -122.43 +140.52 -13.01 -122.69 +140.35 -12.895 -122.96 +140.18 -12.791 -123.24 +140.01 -12.697 -123.52 +139.84 -12.611 -123.8 +139.68 -12.535 -124.09 +139.51 -12.467 -124.37 +139.34 -12.407 -124.67 +139.18 -12.354 -124.96 +139.01 -12.307 -125.25 +138.85 -12.264 -125.54 +138.68 -12.227 -125.84 +138.51 -12.194 -126.13 +138.33 -12.164 -126.42 +138.16 -12.138 -126.71 +137.98 -12.114 -127 +137.79 -12.093 -127.28 +137.6 -12.075 -127.56 +137.4 -12.058 -127.84 +137.2 -12.04 -128.11 +136.98 -12.022 -128.37 +136.76 -12.001 -128.63 +136.52 -11.976 -128.87 +136.28 -11.945 -129.1 +136.01 -11.903 -129.31 +135.73 -11.854 -129.5 +135.45 -11.801 -129.67 +135.15 -11.745 -129.84 +134.85 -11.688 -129.99 +134.55 -11.629 -130.13 +134.24 -11.57 -130.27 +133.94 -11.513 -130.4 +133.62 -11.456 -130.52 +133.31 -11.401 -130.64 +132.99 -11.347 -130.75 +132.68 -11.295 -130.86 +132.36 -11.245 -130.97 +132.04 -11.197 -131.07 +131.72 -11.153 -131.18 +131.4 -11.113 -131.29 +131.08 -11.075 -131.39 +130.76 -11.041 -131.5 +130.43 -11.01 -131.6 +130.11 -10.984 -131.71 +129.79 -10.961 -131.82 +129.47 -10.941 -131.93 +129.15 -10.926 -132.04 +128.83 -10.915 -132.16 +128.51 -10.909 -132.28 +128.2 -10.909 -132.41 +127.89 -10.915 -132.54 +127.58 -10.928 -132.69 +127.28 -10.95 -132.84 +126.98 -10.98 -133 +126.69 -11.015 -133.18 +126.4 -11.056 -133.35 +126.12 -11.102 -133.53 +125.84 -11.152 -133.72 +125.56 -11.207 -133.91 +125.29 -11.265 -134.11 +125.02 -11.327 -134.31 +124.76 -11.392 -134.51 +124.49 -11.461 -134.71 +124.23 -11.533 -134.92 +123.98 -11.607 -135.14 +123.73 -11.685 -135.35 +123.48 -11.765 -135.57 +123.23 -11.847 -135.78 +122.98 -11.931 -136 +122.74 -12.018 -136.22 +122.5 -12.106 -136.45 +122.26 -12.197 -136.67 +122.03 -12.289 -136.9 +121.8 -12.382 -137.13 +121.57 -12.478 -137.37 +121.35 -12.574 -137.6 +121.13 -12.673 -137.84 +120.91 -12.772 -138.09 +120.7 -12.872 -138.33 +120.49 -12.972 -138.58 +120.29 -13.073 -138.84 +120.09 -13.174 -139.09 +119.9 -13.273 -139.36 +119.71 -13.372 -139.62 +119.53 -13.469 -139.9 +119.36 -13.567 -140.17 +119.19 -13.664 -140.45 +119.02 -13.762 -140.73 +118.86 -13.86 -141.01 +118.7 -13.959 -141.3 +118.54 -14.059 -141.58 +118.39 -14.16 -141.87 +118.24 -14.262 -142.15 +118.09 -14.364 -142.44 +117.94 -14.467 -142.73 +117.79 -14.571 -143.01 +117.64 -14.676 -143.3 +117.49 -14.782 -143.59 +117.34 -14.889 -143.87 +117.19 -14.997 -144.16 +117.04 -15.108 -144.44 +116.89 -15.22 -144.73 +116.74 -15.334 -145.01 +116.58 -15.45 -145.29 +116.42 -15.569 -145.56 +116.26 -15.691 -145.84 +116.1 -15.816 -146.11 +115.93 -15.945 -146.37 +115.76 -16.079 -146.63 +115.58 -16.219 -146.89 +115.4 -16.365 -147.13 +115.21 -16.516 -147.38 +115.02 -16.669 -147.61 +114.83 -16.824 -147.84 +114.63 -16.98 -148.07 +114.43 -17.138 -148.3 +114.23 -17.296 -148.52 +114.02 -17.453 -148.74 +113.81 -17.61 -148.96 +113.6 -17.766 -149.17 +113.39 -17.922 -149.39 +113.17 -18.076 -149.6 +112.95 -18.229 -149.81 +112.72 -18.381 -150.01 +112.5 -18.531 -150.22 +112.27 -18.68 -150.42 +112.04 -18.827 -150.62 +111.8 -18.971 -150.82 +111.57 -19.112 -151.02 +111.33 -19.25 -151.22 +111.08 -19.382 -151.41 +110.84 -19.51 -151.61 +110.59 -19.634 -151.81 +110.34 -19.752 -152 +110.08 -19.865 -152.2 +109.82 -19.97 -152.39 +109.56 -20.068 -152.59 +109.3 -20.158 -152.78 +109.03 -20.238 -152.98 +108.77 -20.306 -153.18 +108.5 -20.361 -153.38 +108.23 -20.398 -153.59 +107.97 -20.414 -153.8 +107.7 -20.414 -154.01 +107.44 -20.401 -154.23 +107.17 -20.377 -154.43 +106.9 -20.343 -154.64 +106.63 -20.3 -154.84 +106.36 -20.252 -155.04 +106.08 -20.197 -155.23 +105.8 -20.137 -155.42 +105.52 -20.072 -155.6 +105.24 -20.004 -155.77 +104.95 -19.934 -155.94 +104.66 -19.864 -156.1 +104.36 -19.794 -156.25 +104.06 -19.723 -156.39 +103.76 -19.653 -156.52 +103.45 -19.582 -156.64 +103.13 -19.512 -156.75 +102.81 -19.443 -156.85 +102.49 -19.375 -156.93 +102.17 -19.309 -157 +101.84 -19.246 -157.05 +101.5 -19.187 -157.09 +101.17 -19.131 -157.1 +100.83 -19.081 -157.09 +100.5 -19.036 -157.05 +100.16 -18.996 -157 +99.831 -18.96 -156.94 +99.501 -18.928 -156.86 +99.175 -18.902 -156.77 +98.851 -18.881 -156.66 +98.53 -18.866 -156.55 +98.213 -18.856 -156.43 +97.898 -18.853 -156.3 +97.587 -18.856 -156.16 +97.28 -18.866 -156.02 +96.976 -18.882 -155.87 +96.677 -18.904 -155.71 +96.381 -18.933 -155.54 +96.089 -18.969 -155.37 +95.801 -19.01 -155.2 +95.517 -19.057 -155.02 +95.235 -19.109 -154.83 +94.957 -19.166 -154.65 +94.683 -19.232 -154.46 +94.413 -19.306 -154.26 +94.148 -19.389 -154.07 +93.889 -19.483 -153.87 +93.635 -19.586 -153.67 +93.387 -19.7 -153.46 +93.146 -19.823 -153.26 +92.911 -19.958 -153.05 +92.684 -20.105 -152.85 +92.465 -20.265 -152.64 +92.255 -20.438 -152.44 +92.054 -20.625 -152.24 +91.865 -20.826 -152.04 +91.688 -21.044 -151.85 +91.526 -21.279 -151.66 +91.39 -21.541 -151.49 +91.281 -21.825 -151.34 +91.195 -22.124 -151.21 +91.13 -22.434 -151.08 +91.083 -22.752 -150.97 +91.051 -23.075 -150.87 +91.03 -23.402 -150.78 +91.022 -23.732 -150.7 +91.023 -24.064 -150.63 +91.032 -24.397 -150.56 +91.047 -24.732 -150.5 +91.067 -25.068 -150.45 +91.088 -25.404 -150.4 +91.11 -25.74 -150.36 +91.131 -26.077 -150.32 +91.149 -26.414 -150.28 +91.164 -26.752 -150.25 +91.172 -27.09 -150.21 +91.171 -27.428 -150.18 +91.159 -27.766 -150.14 +91.13 -28.101 -150.09 +91.079 -28.432 -150.03 +91.004 -28.756 -149.96 +90.913 -29.073 -149.88 +90.809 -29.386 -149.79 +90.693 -29.694 -149.71 +90.565 -29.998 -149.62 +90.428 -30.297 -149.54 +90.283 -30.594 -149.46 +90.129 -30.888 -149.39 +89.968 -31.18 -149.32 +89.799 -31.468 -149.26 +89.622 -31.752 -149.2 +89.439 -32.034 -149.15 +89.25 -32.313 -149.1 +89.057 -32.591 -149.07 +88.858 -32.865 -149.04 +88.655 -33.137 -149.02 +88.446 -33.405 -149.01 +88.232 -33.67 -149.02 +88.014 -33.929 -149.05 +87.791 -34.183 -149.09 +87.565 -34.431 -149.14 +87.337 -34.671 -149.22 +87.108 -34.902 -149.31 +86.88 -35.124 -149.43 +86.657 -35.333 -149.58 +86.443 -35.525 -149.76 +86.248 -35.691 -149.99 +86.073 -35.829 -150.24 +85.914 -35.94 -150.52 +85.768 -36.029 -150.82 +85.632 -36.096 -151.12 +85.502 -36.145 -151.43 +85.377 -36.178 -151.75 +85.256 -36.196 -152.06 +85.138 -36.199 -152.38 +85.022 -36.189 -152.7 +84.904 -36.168 -153.02 +84.784 -36.138 -153.34 +84.658 -36.1 -153.65 +84.524 -36.055 -153.96 +84.379 -36.006 -154.26 +84.223 -35.953 -154.56 +84.054 -35.897 -154.85 +83.866 -35.843 -155.13 +83.657 -35.793 -155.39 +83.422 -35.752 -155.63 +83.157 -35.728 -155.84 +82.864 -35.727 -156.02 +82.557 -35.738 -156.16 +82.241 -35.759 -156.28 +81.918 -35.785 -156.39 +81.591 -35.814 -156.47 +81.26 -35.847 -156.55 +80.927 -35.88 -156.61 +80.592 -35.912 -156.65 +80.256 -35.941 -156.7 +79.919 -35.969 -156.73 +79.581 -35.994 -156.75 +79.242 -36.017 -156.77 +78.903 -36.035 -156.78 +78.563 -36.049 -156.79 +78.223 -36.056 -156.8 +77.883 -36.056 -156.8 +77.543 -36.05 -156.81 +77.204 -36.035 -156.82 +76.864 -36.013 -156.82 +76.526 -35.982 -156.83 +76.188 -35.943 -156.84 +75.852 -35.894 -156.85 +75.517 -35.837 -156.87 +75.185 -35.769 -156.89 +74.855 -35.69 -156.92 +74.53 -35.599 -156.95 +74.21 -35.494 -157 +73.897 -35.376 -157.06 +73.593 -35.243 -157.14 +73.306 -35.091 -157.23 +73.035 -34.924 -157.35 +72.779 -34.745 -157.49 +72.537 -34.554 -157.63 +72.309 -34.354 -157.78 +72.095 -34.144 -157.95 +71.895 -33.927 -158.11 +71.706 -33.701 -158.28 +71.529 -33.468 -158.46 +71.364 -33.229 -158.63 +71.211 -32.983 -158.81 +71.069 -32.731 -158.99 +70.938 -32.474 -159.17 +70.818 -32.212 -159.35 +70.706 -31.946 -159.53 +70.6 -31.675 -159.71 +70.503 -31.401 -159.88 +70.414 -31.122 -160.05 +70.336 -30.838 -160.22 +70.267 -30.55 -160.39 +70.209 -30.258 -160.56 +70.161 -29.962 -160.72 +70.124 -29.663 -160.87 +70.097 -29.36 -161.03 +70.082 -29.054 -161.17 +70.077 -28.745 -161.31 +70.084 -28.433 -161.45 +70.103 -28.118 -161.58 +70.134 -27.8 -161.69 +70.179 -27.48 -161.8 +70.241 -27.159 -161.89 +70.317 -26.836 -161.96 +70.404 -26.514 -162.03 +70.502 -26.193 -162.09 +70.607 -25.874 -162.13 +70.72 -25.556 -162.17 +70.839 -25.239 -162.21 +70.963 -24.924 -162.24 +71.09 -24.609 -162.26 +71.222 -24.296 -162.28 +71.357 -23.984 -162.29 +71.495 -23.674 -162.3 +71.634 -23.364 -162.31 +71.776 -23.055 -162.31 +71.92 -22.747 -162.31 +72.064 -22.439 -162.31 +72.207 -22.13 -162.31 +72.347 -21.82 -162.31 +72.484 -21.509 -162.31 +72.617 -21.197 -162.31 +72.747 -20.882 -162.3 +72.871 -20.566 -162.3 +72.988 -20.247 -162.3 +73.096 -19.924 -162.3 +73.195 -19.599 -162.31 +73.279 -19.27 -162.31 +73.348 -18.937 -162.33 +73.393 -18.601 -162.35 +73.411 -18.263 -162.38 +73.407 -17.925 -162.42 +73.387 -17.588 -162.46 +73.353 -17.253 -162.51 +73.307 -16.92 -162.56 +73.251 -16.589 -162.61 +73.188 -16.259 -162.66 +73.117 -15.931 -162.72 +73.04 -15.606 -162.78 +72.956 -15.282 -162.84 +72.869 -14.959 -162.9 +72.779 -14.637 -162.96 +72.688 -14.316 -163.03 +72.594 -13.995 -163.09 +72.5 -13.675 -163.16 +72.404 -13.356 -163.22 +72.307 -13.037 -163.29 +72.209 -12.719 -163.36 +72.112 -12.401 -163.43 +72.017 -12.082 -163.5 +71.923 -11.764 -163.58 +71.834 -11.445 -163.65 +71.751 -11.124 -163.73 +71.674 -10.802 -163.81 +71.604 -10.48 -163.89 +71.537 -10.157 -163.97 +71.473 -9.8328 -164.05 +71.412 -9.5087 -164.13 +71.354 -9.1843 -164.22 +71.299 -8.8595 -164.3 +71.246 -8.5344 -164.39 +71.196 -8.209 -164.47 +71.147 -7.8834 -164.56 +71.1 -7.5575 -164.64 +71.055 -7.2314 -164.73 +71.012 -6.905 -164.81 +70.971 -6.5784 -164.9 +70.931 -6.2517 -164.98 +70.892 -5.9248 -165.07 +70.854 -5.598 -165.15 +70.815 -5.2711 -165.24 +70.778 -4.9441 -165.32 +70.742 -4.6168 -165.41 +70.708 -4.2892 -165.49 +70.676 -3.9611 -165.57 +70.647 -3.6326 -165.66 +70.62 -3.3036 -165.74 +70.596 -2.9742 -165.82 +70.574 -2.6444 -165.9 +70.555 -2.314 -165.98 +70.54 -1.9831 -166.05 +70.528 -1.6516 -166.13 +70.521 -1.3195 -166.2 +70.518 -0.98676 -166.27 +70.521 -0.65341 -166.34 +70.531 -0.31944 -166.4 +70.551 0.015097 -166.46 +70.579 0.34988 -166.51 +70.614 0.68465 -166.56 +70.653 1.0193 -166.6 +70.696 1.3539 -166.65 +70.742 1.6883 -166.69 +70.79 2.0227 -166.73 +70.837 2.3571 -166.76 +70.885 2.6916 -166.8 +70.933 3.0262 -166.84 +70.981 3.3608 -166.87 +71.028 3.6956 -166.91 +71.073 4.0305 -166.95 +71.116 4.3654 -166.99 +71.157 4.7004 -167.03 +71.195 5.0354 -167.07 +71.229 5.3707 -167.12 +71.258 5.7064 -167.16 +71.281 6.0423 -167.21 +71.299 6.3783 -167.26 +71.31 6.7145 -167.31 +71.314 7.0506 -167.36 +71.311 7.3866 -167.41 +71.297 7.7222 -167.47 +71.273 8.0571 -167.52 +71.237 8.3909 -167.57 +71.186 8.7228 -167.63 +71.118 9.0519 -167.68 +71.033 9.3777 -167.72 +70.936 9.7003 -167.77 +70.829 10.02 -167.82 +70.713 10.336 -167.86 +70.589 10.648 -167.91 +70.458 10.958 -167.97 +70.319 11.263 -168.02 +70.175 11.565 -168.08 +70.025 11.864 -168.14 +69.87 12.159 -168.21 +69.71 12.451 -168.28 +69.545 12.739 -168.35 +69.376 13.023 -168.43 +69.203 13.303 -168.52 +69.027 13.579 -168.61 +68.848 13.851 -168.71 +68.666 14.12 -168.81 +68.484 14.386 -168.91 +68.299 14.648 -169.03 +68.113 14.905 -169.15 +67.925 15.157 -169.28 +67.736 15.404 -169.42 +67.546 15.644 -169.57 +67.354 15.878 -169.72 +67.163 16.104 -169.89 +66.97 16.324 -170.06 +66.778 16.536 -170.24 +66.587 16.739 -170.44 +66.398 16.932 -170.65 +66.211 17.115 -170.86 +66.028 17.286 -171.09 +65.849 17.444 -171.33 +65.676 17.587 -171.59 +65.511 17.711 -171.86 +65.356 17.817 -172.14 +65.209 17.908 -172.44 +65.069 17.985 -172.74 +64.936 18.049 -173.04 +64.81 18.101 -173.35 +64.691 18.142 -173.67 +64.579 18.171 -173.99 +64.473 18.191 -174.31 +64.373 18.202 -174.64 +64.279 18.204 -174.96 +64.192 18.198 -175.29 +64.11 18.183 -175.62 +64.035 18.161 -175.95 +63.966 18.13 -176.28 +63.902 18.093 -176.62 +63.845 18.05 -176.95 +63.793 18.001 -177.28 +63.745 17.947 -177.61 +63.703 17.888 -177.94 +63.666 17.825 -178.28 +63.634 17.757 -178.61 +63.607 17.685 -178.94 +63.585 17.61 -179.27 +63.568 17.531 -179.6 +63.556 17.448 -179.93 +63.549 17.362 -180.26 +63.547 17.273 -180.59 +63.551 17.182 -180.91 +63.558 17.089 -181.24 +63.57 16.994 -181.57 +63.586 16.898 -181.89 +63.606 16.802 -182.22 +63.629 16.706 -182.54 +63.655 16.611 -182.87 +63.683 16.517 -183.2 +63.711 16.428 -183.52 +63.741 16.341 -183.85 +63.775 16.256 -184.18 +63.814 16.173 -184.5 +63.859 16.091 -184.83 +63.909 16.009 -185.16 +63.966 15.929 -185.48 +64.03 15.849 -185.81 +64.102 15.77 -186.13 +64.182 15.691 -186.45 +64.269 15.613 -186.77 +64.364 15.536 -187.09 +64.468 15.46 -187.4 +64.58 15.384 -187.71 +64.7 15.308 -188.02 +64.829 15.232 -188.33 +64.967 15.156 -188.63 +65.115 15.08 -188.93 +65.272 15.007 -189.22 +65.439 14.936 -189.51 +65.617 14.868 -189.79 +65.804 14.803 -190.06 +66.001 14.742 -190.33 +66.208 14.684 -190.6 +66.425 14.631 -190.85 +66.653 14.585 -191.1 +66.892 14.544 -191.34 +67.141 14.51 -191.57 +67.401 14.486 -191.79 +67.672 14.471 -191.99 +67.956 14.472 -192.18 +68.249 14.484 -192.35 +68.55 14.506 -192.51 +68.857 14.534 -192.65 +69.171 14.569 -192.78 +69.489 14.609 -192.89 +69.811 14.654 -192.99 +70.136 14.701 -193.07 +70.465 14.75 -193.15 +70.795 14.802 -193.21 +71.127 14.856 -193.26 +71.461 14.911 -193.29 +71.796 14.967 -193.31 +72.131 15.022 -193.33 +72.467 15.076 -193.33 +72.802 15.129 -193.32 +73.138 15.181 -193.3 +73.473 15.23 -193.27 +73.807 15.277 -193.23 +74.14 15.321 -193.17 +74.471 15.362 -193.11 +74.8 15.399 -193.03 +75.128 15.431 -192.95 +75.452 15.458 -192.85 +75.774 15.479 -192.74 +76.092 15.492 -192.62 +76.407 15.496 -192.49 +76.716 15.489 -192.35 +77.021 15.473 -192.2 +77.322 15.449 -192.05 +77.618 15.419 -191.88 +77.911 15.383 -191.71 +78.199 15.342 -191.54 +78.483 15.296 -191.36 +78.764 15.245 -191.17 +79.04 15.19 -190.98 +79.313 15.131 -190.79 +79.582 15.068 -190.59 +79.847 15.001 -190.39 +80.109 14.93 -190.18 +80.366 14.856 -189.97 +80.621 14.778 -189.76 +80.872 14.698 -189.55 +81.119 14.615 -189.33 +81.364 14.53 -189.11 +81.605 14.443 -188.89 +81.843 14.354 -188.66 +82.079 14.262 -188.43 +82.313 14.168 -188.2 +82.544 14.07 -187.98 +82.774 13.97 -187.75 +83.002 13.866 -187.52 +83.228 13.759 -187.28 +83.452 13.65 -187.05 +83.675 13.537 -186.82 +83.897 13.42 -186.59 +84.119 13.3 -186.37 +84.341 13.176 -186.14 +84.563 13.048 -185.92 +84.785 12.917 -185.7 +85.01 12.781 -185.48 +85.236 12.64 -185.27 +85.466 12.492 -185.07 +85.699 12.34 -184.87 +85.933 12.183 -184.68 +86.167 12.023 -184.49 +86.402 11.86 -184.31 +86.637 11.694 -184.13 +86.872 11.526 -183.95 +87.106 11.355 -183.77 +87.34 11.184 -183.59 +87.573 11.01 -183.42 +87.806 10.836 -183.24 +88.037 10.66 -183.06 +88.268 10.484 -182.89 +88.498 10.307 -182.71 +88.727 10.129 -182.53 +88.954 9.9506 -182.35 +89.18 9.7721 -182.17 +89.404 9.5938 -181.99 +89.627 9.4159 -181.8 +89.848 9.2387 -181.62 +90.069 9.0626 -181.43 +90.289 8.8878 -181.24 +90.508 8.7143 -181.04 +90.726 8.5424 -180.85 +90.943 8.3721 -180.65 +91.159 8.2042 -180.44 +91.374 8.0392 -180.24 +91.588 7.8774 -180.03 +91.801 7.7192 -179.82 +92.013 7.5656 -179.6 +92.224 7.4172 -179.38 +92.434 7.2758 -179.15 +92.642 7.1443 -178.92 +92.848 7.021 -178.68 +93.052 6.9048 -178.43 +93.253 6.795 -178.18 +93.451 6.6911 -177.92 +93.645 6.5926 -177.66 +93.837 6.4988 -177.4 +94.025 6.4098 -177.13 +94.209 6.3255 -176.86 +94.39 6.2458 -176.58 +94.567 6.1701 -176.3 +94.74 6.098 -176.02 +94.909 6.029 -175.73 +95.074 5.9635 -175.44 +95.234 5.9017 -175.15 +95.39 5.8436 -174.85 +95.541 5.7891 -174.55 +95.687 5.7386 -174.25 +95.827 5.6918 -173.94 +95.963 5.6486 -173.63 +96.093 5.6089 -173.32 +96.217 5.5726 -173.01 +96.335 5.5395 -172.69 +96.446 5.5096 -172.37 +96.552 5.4817 -172.05 +96.654 5.4558 -171.72 +96.751 5.432 -171.4 +96.844 5.4103 -171.07 +96.934 5.3906 -170.74 +97.019 5.3729 -170.42 +97.099 5.3573 -170.09 +97.176 5.3438 -169.75 +97.249 5.3323 -169.42 +97.318 5.3228 -169.09 +97.383 5.3153 -168.76 +97.444 5.3097 -168.42 +97.501 5.3061 -168.09 +97.553 5.3043 -167.75 +97.602 5.3044 -167.41 +97.646 5.3063 -167.08 +97.687 5.3101 -166.74 +97.723 5.3155 -166.4 +97.755 5.3228 -166.06 +97.783 5.3318 -165.72 +97.807 5.3425 -165.39 +97.828 5.3549 -165.05 +97.845 5.3689 -164.71 +97.858 5.3846 -164.37 +97.868 5.4019 -164.03 +97.873 5.4208 -163.69 +97.876 5.4413 -163.35 +97.876 5.4633 -163.01 +97.872 5.4868 -162.67 +97.866 5.5119 -162.33 +97.857 5.5384 -161.99 +97.847 5.5665 -161.65 +97.835 5.5961 -161.32 +97.823 5.6275 -160.98 +97.809 5.6605 -160.64 +97.792 5.6951 -160.3 +97.771 5.731 -159.96 +97.747 5.7684 -159.63 +97.717 5.807 -159.29 +97.683 5.8469 -158.96 +97.644 5.8879 -158.62 +97.599 5.93 -158.29 +97.548 5.9731 -157.95 +97.491 6.017 -157.62 +97.428 6.0617 -157.29 +97.359 6.107 -156.96 +97.283 6.1527 -156.63 +97.201 6.1985 -156.3 +97.112 6.2443 -155.98 +97.016 6.2903 -155.66 +96.912 6.3367 -155.34 +96.8 6.3835 -155.02 +96.681 6.4307 -154.7 +96.553 6.4783 -154.39 +96.418 6.5262 -154.08 +96.274 6.5743 -153.78 +96.121 6.6226 -153.48 +95.96 6.6716 -153.18 +95.79 6.7209 -152.89 +95.61 6.7709 -152.61 +95.42 6.8217 -152.33 +95.219 6.8738 -152.06 +95.007 6.9281 -151.8 +94.784 6.9838 -151.55 +94.551 7.0399 -151.31 +94.309 7.0955 -151.08 +94.059 7.15 -150.86 +93.802 7.2031 -150.64 +93.537 7.2542 -150.43 +93.266 7.3026 -150.23 +92.989 7.3481 -150.04 +92.706 7.3906 -149.86 +92.418 7.4299 -149.68 +92.124 7.4657 -149.51 +91.826 7.498 -149.35 +91.524 7.5268 -149.2 +91.218 7.552 -149.05 +90.908 7.5733 -148.92 +90.595 7.59 -148.78 +90.279 7.6012 -148.66 +89.96 7.6062 -148.54 +89.638 7.6046 -148.43 +89.313 7.5963 -148.33 +88.986 7.5814 -148.24 +88.658 7.5591 -148.16 +88.328 7.528 -148.08 +87.997 7.4877 -148.01 +87.666 7.4377 -147.95 +87.336 7.376 -147.9 +87.007 7.3016 -147.86 +86.68 7.2114 -147.83 +86.358 7.1049 -147.81 +86.04 6.9856 -147.79 +85.726 6.856 -147.79 +85.415 6.7177 -147.79 +85.108 6.5718 -147.8 +84.805 6.4188 -147.82 +84.505 6.26 -147.84 +84.209 6.0966 -147.87 +83.915 5.9286 -147.9 +83.625 5.7564 -147.95 +83.338 5.5803 -147.99 +83.053 5.4006 -148.04 +82.772 5.2178 -148.1 +82.493 5.0325 -148.16 +82.217 4.8453 -148.22 +81.942 4.6565 -148.29 +81.669 4.4664 -148.36 +81.398 4.2752 -148.43 +81.128 4.0835 -148.51 +80.859 3.8913 -148.59 +80.592 3.699 -148.67 +80.325 3.5065 -148.76 +80.059 3.3139 -148.85 +79.793 3.1223 -148.94 +79.526 2.9323 -149.03 +79.259 2.7443 -149.12 +78.99 2.5591 -149.22 +78.718 2.3777 -149.31 +78.444 2.2015 -149.41 +78.164 2.0331 -149.5 +77.881 1.8712 -149.6 +77.595 1.7139 -149.69 +77.307 1.5602 -149.79 +77.017 1.4092 -149.88 +76.727 1.2604 -149.98 +76.435 1.1135 -150.07 +76.143 0.96751 -150.17 +75.85 0.822 -150.26 +75.557 0.67704 -150.35 +75.264 0.53249 -150.45 +74.97 0.3882 -150.54 +74.677 0.24383 -150.63 +74.383 0.098971 -150.72 +74.09 -0.046788 -150.82 +73.798 -0.194 -150.91 +73.507 -0.34257 -151 +73.215 -0.49257 -151.09 +72.925 -0.64413 -151.18 +72.634 -0.79739 -151.27 +72.343 -0.95246 -151.35 +72.053 -1.1095 -151.44 +71.763 -1.2683 -151.52 +71.474 -1.4291 -151.59 +71.185 -1.5926 -151.66 +70.896 -1.7589 -151.73 +70.608 -1.9283 -151.79 +70.32 -2.1013 -151.85 +70.034 -2.2782 -151.9 +69.749 -2.4597 -151.94 +69.466 -2.6462 -151.96 +69.185 -2.8366 -151.98 +68.906 -3.0303 -151.99 +68.628 -3.2271 -151.99 +68.353 -3.4265 -151.99 +68.08 -3.6286 -151.99 +67.808 -3.8331 -151.98 +67.538 -4.0399 -151.98 +67.27 -4.249 -151.97 +67.004 -4.4604 -151.96 +66.74 -4.6739 -151.95 +66.477 -4.8894 -151.94 +66.216 -5.1069 -151.92 +65.956 -5.3261 -151.91 +65.698 -5.5466 -151.9 +65.44 -5.7684 -151.89 +65.184 -5.992 -151.89 +64.93 -6.2175 -151.88 +64.677 -6.4453 -151.88 +64.427 -6.6752 -151.88 +64.179 -6.9073 -151.88 +63.932 -7.1417 -151.89 +63.688 -7.3781 -151.91 +63.447 -7.6169 -151.93 +63.209 -7.858 -151.95 +62.974 -8.1015 -151.98 +62.743 -8.3473 -152.03 +62.516 -8.5955 -152.08 +62.295 -8.846 -152.14 +62.083 -9.0986 -152.22 +61.877 -9.3526 -152.32 +61.678 -9.6073 -152.42 +61.483 -9.8621 -152.53 +61.294 -10.117 -152.66 +61.108 -10.371 -152.78 +60.926 -10.625 -152.92 +60.746 -10.879 -153.06 +60.568 -11.131 -153.2 +60.393 -11.383 -153.34 +60.219 -11.634 -153.49 +60.047 -11.884 -153.65 +59.877 -12.134 -153.8 +59.709 -12.383 -153.96 +59.541 -12.632 -154.12 +59.375 -12.881 -154.28 +59.209 -13.129 -154.44 +59.043 -13.377 -154.61 +58.876 -13.624 -154.77 +58.706 -13.869 -154.94 +58.535 -14.112 -155.1 +58.361 -14.353 -155.26 +58.185 -14.593 -155.43 +58.006 -14.831 -155.59 +57.823 -15.066 -155.76 +57.633 -15.298 -155.92 +57.438 -15.526 -156.08 +57.235 -15.75 -156.23 +57.023 -15.967 -156.39 +56.799 -16.178 -156.53 +56.559 -16.375 -156.67 +56.305 -16.562 -156.8 +56.043 -16.741 -156.92 +55.775 -16.915 -157.03 +55.502 -17.084 -157.15 +55.226 -17.25 -157.26 +54.948 -17.415 -157.36 +54.67 -17.58 -157.47 +54.391 -17.745 -157.57 +54.112 -17.911 -157.67 +53.833 -18.078 -157.77 +53.556 -18.248 -157.87 +53.28 -18.42 -157.97 +53.007 -18.595 -158.07 +52.738 -18.776 -158.17 +52.473 -18.962 -158.28 +52.213 -19.156 -158.38 +51.96 -19.358 -158.48 +51.715 -19.568 -158.59 +51.476 -19.786 -158.69 +51.248 -20.015 -158.8 +51.033 -20.256 -158.91 +50.832 -20.509 -159.01 +50.65 -20.776 -159.12 +50.492 -21.057 -159.22 +50.364 -21.355 -159.33 +50.258 -21.662 -159.43 +50.171 -21.976 -159.52 +50.099 -22.293 -159.62 +50.041 -22.615 -159.72 +49.994 -22.938 -159.81 +49.96 -23.263 -159.9 +49.937 -23.59 -160 +49.923 -23.917 -160.09 +49.918 -24.244 -160.18 +49.919 -24.572 -160.27 +49.928 -24.899 -160.36 +49.945 -25.226 -160.45 +49.968 -25.552 -160.55 +49.997 -25.878 -160.64 +50.032 -26.204 -160.73 +50.072 -26.528 -160.82 +50.115 -26.852 -160.92 +50.161 -27.175 -161.01 +50.209 -27.498 -161.11 +50.26 -27.819 -161.21 +50.313 -28.14 -161.31 +50.369 -28.459 -161.41 +50.427 -28.777 -161.51 +50.487 -29.094 -161.62 +50.549 -29.41 -161.73 +50.612 -29.725 -161.84 +50.677 -30.038 -161.96 +50.743 -30.349 -162.08 +50.81 -30.659 -162.2 +50.877 -30.968 -162.33 +50.943 -31.274 -162.46 +51.008 -31.579 -162.59 +51.07 -31.882 -162.74 +51.131 -32.182 -162.88 +51.188 -32.479 -163.04 +51.239 -32.772 -163.2 +51.283 -33.061 -163.38 +51.322 -33.344 -163.56 +51.356 -33.623 -163.75 +51.387 -33.898 -163.95 +51.413 -34.168 -164.16 +51.435 -34.435 -164.37 +51.453 -34.697 -164.58 +51.468 -34.956 -164.8 +51.479 -35.212 -165.02 +51.487 -35.464 -165.25 +51.491 -35.712 -165.49 +51.492 -35.956 -165.72 +51.49 -36.198 -165.96 +51.487 -36.437 -166.2 +51.481 -36.673 -166.45 +51.471 -36.905 -166.69 +51.456 -37.135 -166.95 +51.436 -37.362 -167.2 +51.41 -37.585 -167.45 +51.378 -37.805 -167.71 +51.34 -38.021 -167.97 +51.294 -38.234 -168.23 +51.24 -38.444 -168.49 +51.178 -38.65 -168.76 +51.105 -38.853 -169.02 +51.022 -39.051 -169.28 +50.923 -39.246 -169.54 +50.81 -39.435 -169.8 +50.687 -39.621 -170.06 +50.556 -39.803 -170.31 +50.418 -39.981 -170.57 +50.274 -40.155 -170.82 +50.124 -40.326 -171.08 +49.97 -40.493 -171.33 +49.813 -40.657 -171.58 +49.653 -40.818 -171.83 +49.489 -40.977 -172.09 +49.322 -41.132 -172.34 +49.153 -41.284 -172.59 +48.982 -41.434 -172.84 +48.81 -41.581 -173.1 +48.636 -41.725 -173.35 +48.462 -41.867 -173.61 +48.287 -42.007 -173.86 +48.113 -42.145 -174.12 +47.94 -42.282 -174.38 +47.768 -42.418 -174.64 +47.597 -42.552 -174.9 +47.428 -42.686 -175.16 +47.261 -42.819 -175.43 +47.097 -42.952 -175.69 +46.937 -43.086 -175.96 +46.782 -43.22 -176.23 +46.633 -43.356 -176.51 +46.492 -43.493 -176.79 +46.362 -43.635 -177.07 +46.244 -43.78 -177.35 +46.135 -43.928 -177.64 +46.032 -44.077 -177.92 +45.936 -44.227 -178.21 +45.845 -44.377 -178.5 +45.757 -44.527 -178.8 +45.674 -44.677 -179.09 +45.594 -44.826 -179.38 +45.515 -44.973 -179.68 +45.439 -45.12 -179.98 +45.365 -45.265 -180.28 +45.292 -45.409 -180.58 +45.221 -45.552 -180.88 +45.151 -45.693 -181.18 +45.082 -45.832 -181.48 +45.012 -45.969 -181.78 +44.943 -46.105 -182.09 +44.872 -46.238 -182.39 +44.801 -46.369 -182.7 +44.729 -46.497 -183 +44.656 -46.622 -183.31 +44.583 -46.745 -183.62 +44.508 -46.864 -183.93 +44.431 -46.98 -184.24 +44.354 -47.093 -184.55 +44.275 -47.203 -184.86 +44.194 -47.309 -185.18 +44.111 -47.41 -185.49 +44.024 -47.507 -185.8 +43.935 -47.599 -186.12 +43.842 -47.686 -186.43 +43.744 -47.766 -186.75 +43.64 -47.837 -187.07 +43.529 -47.898 -187.38 +43.413 -47.951 -187.7 +43.291 -47.996 -188.01 +43.164 -48.034 -188.32 +43.034 -48.066 -188.64 +42.9 -48.092 -188.95 +42.763 -48.114 -189.26 +42.622 -48.131 -189.57 +42.478 -48.143 -189.87 +42.331 -48.151 -190.18 +42.181 -48.156 -190.49 +42.029 -48.158 -190.79 +41.875 -48.157 -191.09 +41.718 -48.153 -191.39 +41.559 -48.147 -191.69 +41.397 -48.139 -191.99 +41.232 -48.128 -192.29 +41.065 -48.116 -192.59 +40.895 -48.101 -192.88 +40.722 -48.085 -193.17 +40.546 -48.067 -193.46 +40.367 -48.048 -193.75 +40.185 -48.028 -194.04 +40 -48.008 -194.32 +39.811 -47.988 -194.6 +39.619 -47.969 -194.88 +39.423 -47.949 -195.16 +39.224 -47.93 -195.44 +39.023 -47.911 -195.71 +38.818 -47.892 -195.98 +38.611 -47.873 -196.25 +38.402 -47.855 -196.52 +38.191 -47.837 -196.78 +37.977 -47.819 -197.05 +37.761 -47.802 -197.31 +37.543 -47.786 -197.57 +37.324 -47.77 -197.83 +37.103 -47.755 -198.09 +36.881 -47.74 -198.34 +36.657 -47.726 -198.6 +36.431 -47.714 -198.85 +36.204 -47.704 -199.11 +35.974 -47.696 -199.36 +35.742 -47.69 -199.61 +35.509 -47.686 -199.85 +35.273 -47.686 -200.1 +35.035 -47.688 -200.34 +34.795 -47.695 -200.58 +34.551 -47.707 -200.82 +34.304 -47.724 -201.05 +34.055 -47.745 -201.28 +33.804 -47.77 -201.51 +33.551 -47.798 -201.73 +33.298 -47.828 -201.96 +33.044 -47.86 -202.18 +32.79 -47.895 -202.41 +32.536 -47.932 -202.63 +32.282 -47.97 -202.85 +32.029 -48.01 -203.08 +31.775 -48.051 -203.3 +31.523 -48.094 -203.52 +31.271 -48.138 -203.75 +31.02 -48.183 -203.97 +30.77 -48.23 -204.2 +30.52 -48.279 -204.42 +30.272 -48.328 -204.65 +30.024 -48.379 -204.88 +29.778 -48.431 -205.11 +29.534 -48.483 -205.34 +29.292 -48.536 -205.57 +29.052 -48.589 -205.8 +28.816 -48.642 -206.04 +28.582 -48.696 -206.28 +28.351 -48.75 -206.53 +28.123 -48.804 -206.77 +27.899 -48.857 -207.02 +27.68 -48.909 -207.28 +27.466 -48.96 -207.54 +27.258 -49.01 -207.8 +27.057 -49.057 -208.07 +26.863 -49.101 -208.35 +26.681 -49.139 -208.63 +26.51 -49.173 -208.92 +26.35 -49.202 -209.22 +26.197 -49.229 -209.53 +26.052 -49.254 -209.83 +25.913 -49.279 -210.14 +25.78 -49.303 -210.45 +25.653 -49.327 -210.77 +25.529 -49.353 -211.08 +25.408 -49.379 -211.4 +25.292 -49.407 -211.72 +25.179 -49.437 -212.04 +25.069 -49.468 -212.36 +24.962 -49.501 -212.68 +24.857 -49.536 -213 +24.754 -49.574 -213.32 +24.652 -49.615 -213.64 +24.551 -49.659 -213.97 +24.451 -49.707 -214.29 +24.352 -49.76 -214.61 +24.252 -49.816 -214.93 +24.153 -49.878 -215.25 +24.054 -49.945 -215.57 +23.954 -50.017 -215.88 +23.854 -50.094 -216.2 +23.753 -50.178 -216.51 +23.65 -50.269 -216.82 +23.544 -50.367 -217.13 +23.436 -50.474 -217.43 +23.324 -50.591 -217.73 +23.207 -50.718 -218.03 +23.083 -50.86 -218.31 +22.954 -51.014 -218.58 +22.821 -51.178 -218.85 +22.685 -51.35 -219.11 +22.548 -51.53 -219.36 +22.408 -51.716 -219.61 +22.268 -51.909 -219.85 +22.126 -52.106 -220.09 +21.984 -52.309 -220.32 +21.842 -52.516 -220.55 +21.699 -52.728 -220.78 +21.556 -52.944 -221 +21.413 -53.163 -221.22 +21.271 -53.385 -221.43 +21.13 -53.61 -221.64 +20.989 -53.837 -221.85 +20.849 -54.066 -222.06 +20.71 -54.298 -222.27 +20.571 -54.533 -222.47 +20.432 -54.769 -222.67 +20.293 -55.008 -222.87 +20.155 -55.249 -223.06 +20.017 -55.492 -223.26 +19.879 -55.737 -223.45 +19.742 -55.983 -223.64 +19.605 -56.23 -223.83 +19.468 -56.479 -224.02 +19.331 -56.729 -224.2 +19.193 -56.979 -224.39 +19.055 -57.231 -224.57 +18.918 -57.483 -224.75 +18.781 -57.736 -224.93 +18.645 -57.989 -225.11 +18.51 -58.242 -225.3 +18.375 -58.496 -225.48 +18.242 -58.75 -225.66 +18.109 -59.004 -225.84 +17.978 -59.258 -226.03 +17.848 -59.511 -226.21 +17.72 -59.765 -226.4 +17.592 -60.018 -226.59 +17.467 -60.271 -226.78 +17.342 -60.523 -226.97 +17.22 -60.776 -227.16 +17.099 -61.027 -227.35 +16.98 -61.278 -227.55 +16.863 -61.527 -227.75 +16.749 -61.774 -227.95 +16.636 -62.02 -228.16 +16.527 -62.263 -228.37 +16.419 -62.505 -228.58 +16.315 -62.744 -228.8 +16.214 -62.98 -229.03 +16.117 -63.212 -229.25 +16.023 -63.44 -229.49 +15.933 -63.664 -229.73 +15.848 -63.881 -229.98 +15.769 -64.091 -230.23 +15.696 -64.294 -230.49 +15.626 -64.492 -230.76 +15.56 -64.685 -231.03 +15.498 -64.873 -231.31 +15.439 -65.058 -231.59 +15.384 -65.238 -231.87 +15.331 -65.414 -232.16 +15.282 -65.587 -232.45 +15.235 -65.757 -232.74 +15.19 -65.923 -233.03 +15.149 -66.086 -233.33 +15.109 -66.246 -233.62 +15.073 -66.403 -233.92 +15.039 -66.557 -234.22 +15.007 -66.708 -234.53 +14.977 -66.857 -234.83 +14.949 -67.004 -235.14 +14.923 -67.15 -235.44 +14.899 -67.293 -235.75 +14.877 -67.435 -236.06 +14.857 -67.574 -236.37 +14.839 -67.71 -236.68 +14.822 -67.845 -236.99 +14.807 -67.977 -237.3 +14.794 -68.107 -237.62 +14.782 -68.235 -237.93 +14.772 -68.361 -238.25 +14.763 -68.484 -238.56 +14.756 -68.605 -238.88 +14.75 -68.725 -239.2 +14.745 -68.842 -239.52 +14.74 -68.957 -239.84 +14.737 -69.07 -240.16 +14.733 -69.181 -240.48 +14.729 -69.289 -240.8 +14.726 -69.395 -241.13 +14.724 -69.499 -241.45 +14.723 -69.601 -241.77 +14.723 -69.702 -242.1 +14.724 -69.802 -242.42 +14.727 -69.9 -242.75 +14.731 -69.998 -243.08 +14.737 -70.095 -243.4 +14.744 -70.192 -243.73 +14.754 -70.288 -244.05 +14.764 -70.383 -244.38 +14.777 -70.478 -244.71 +14.791 -70.573 -245.03 +14.807 -70.668 -245.36 +14.825 -70.761 -245.68 +14.844 -70.855 -246.01 +14.865 -70.95 -246.34 +14.889 -71.045 -246.66 +14.914 -71.142 -246.99 +14.942 -71.24 -247.31 +14.972 -71.34 -247.63 +15.004 -71.442 -247.96 +15.039 -71.546 -248.28 +15.075 -71.653 -248.6 +15.115 -71.763 -248.92 +15.158 -71.877 -249.24 +15.203 -71.996 -249.55 +15.252 -72.12 -249.86 +15.306 -72.251 -250.17 +15.364 -72.391 -250.48 +15.425 -72.537 -250.78 +15.489 -72.687 -251.08 +15.556 -72.842 -251.37 +15.625 -72.999 -251.67 +15.696 -73.159 -251.96 +15.768 -73.321 -252.25 +15.842 -73.484 -252.54 +15.917 -73.649 -252.82 +15.993 -73.814 -253.11 +16.071 -73.98 -253.4 +16.149 -74.147 -253.68 +16.228 -74.315 -253.97 +16.308 -74.483 -254.25 +16.389 -74.651 -254.54 +16.471 -74.818 -254.82 +16.553 -74.985 -255.11 +16.637 -75.151 -255.39 +16.72 -75.316 -255.68 +16.803 -75.479 -255.96 +16.886 -75.642 -256.25 +16.968 -75.802 -256.54 +17.049 -75.961 -256.83 +17.129 -76.118 -257.12 +17.208 -76.273 -257.41 +17.285 -76.426 -257.7 +17.36 -76.575 -258 +17.432 -76.721 -258.3 +17.501 -76.863 -258.6 +17.566 -77.001 -258.9 +17.625 -77.133 -259.21 +17.677 -77.258 -259.52 +17.721 -77.375 -259.84 +17.758 -77.485 -260.16 +17.791 -77.59 -260.48 +17.82 -77.69 -260.8 +17.847 -77.785 -261.13 +17.872 -77.877 -261.46 +17.894 -77.966 -261.78 +17.916 -78.051 -262.11 +17.938 -78.133 -262.44 +17.959 -78.213 -262.77 +17.981 -78.291 -263.1 +18.004 -78.366 -263.43 +18.027 -78.438 -263.76 +18.051 -78.509 -264.1 +18.076 -78.576 -264.43 +18.104 -78.642 -264.76 +18.133 -78.706 -265.09 +18.165 -78.768 -265.43 +18.2 -78.828 -265.76 +18.238 -78.886 -266.09 +18.28 -78.944 -266.42 +18.325 -79 -266.76 +18.373 -79.056 -267.09 +18.425 -79.111 -267.42 +18.481 -79.166 -267.75 +18.542 -79.221 -268.08 +18.606 -79.274 -268.41 +18.675 -79.328 -268.74 +18.749 -79.383 -269.07 +18.829 -79.439 -269.39 +18.915 -79.497 -269.72 +19.007 -79.557 -270.04 +19.105 -79.62 -270.36 +19.211 -79.687 -270.67 +19.326 -79.761 -270.98 +19.45 -79.843 -271.29 +19.584 -79.929 -271.59 +19.726 -80.018 -271.89 +19.877 -80.107 -272.18 +20.035 -80.196 -272.46 +20.201 -80.285 -272.75 +20.374 -80.371 -273.03 +20.555 -80.454 -273.3 +20.743 -80.534 -273.57 +20.938 -80.61 -273.84 +21.141 -80.682 -274.11 +21.35 -80.75 -274.36 +21.566 -80.812 -274.62 +21.788 -80.869 -274.87 +22.017 -80.92 -275.12 +22.251 -80.964 -275.36 +22.492 -80.999 -275.6 +22.739 -81.027 -275.83 +22.992 -81.044 -276.06 +23.251 -81.052 -276.28 +23.515 -81.05 -276.49 +23.784 -81.037 -276.7 +24.058 -81.013 -276.9 +24.335 -80.975 -277.09 +24.616 -80.923 -277.27 +24.899 -80.856 -277.45 +25.183 -80.771 -277.62 +25.466 -80.667 -277.77 +25.746 -80.539 -277.92 +26.022 -80.39 -278.05 +26.294 -80.224 -278.17 +26.562 -80.045 -278.28 +26.826 -79.853 -278.37 +27.086 -79.65 -278.45 +27.343 -79.438 -278.52 +27.596 -79.218 -278.58 +27.844 -78.991 -278.62 +28.089 -78.757 -278.65 +28.329 -78.517 -278.67 +28.564 -78.271 -278.68 +28.795 -78.022 -278.68 +29.022 -77.769 -278.66 +29.245 -77.514 -278.63 +29.465 -77.257 -278.59 +29.68 -76.999 -278.54 +29.891 -76.739 -278.48 +30.097 -76.48 -278.41 +30.299 -76.22 -278.32 +30.497 -75.961 -278.23 +30.69 -75.703 -278.12 +30.878 -75.447 -278 +31.062 -75.194 -277.86 +31.242 -74.944 -277.72 +31.418 -74.7 -277.56 +31.591 -74.461 -277.39 +31.761 -74.23 -277.21 +31.93 -74.009 -277.01 +32.095 -73.799 -276.8 +32.256 -73.596 -276.58 +32.412 -73.401 -276.35 +32.563 -73.214 -276.11 +32.708 -73.033 -275.86 +32.848 -72.858 -275.61 +32.981 -72.689 -275.35 +33.108 -72.526 -275.08 +33.229 -72.368 -274.8 +33.344 -72.215 -274.52 +33.453 -72.068 -274.23 +33.555 -71.926 -273.94 +33.651 -71.787 -273.65 +33.741 -71.652 -273.35 +33.824 -71.521 -273.04 +33.902 -71.394 -272.74 +33.973 -71.27 -272.43 +34.038 -71.15 -272.12 +34.098 -71.033 -271.81 +34.152 -70.92 -271.49 +34.2 -70.81 -271.17 +34.243 -70.702 -270.85 +34.281 -70.597 -270.53 +34.313 -70.494 -270.21 +34.339 -70.393 -269.88 +34.36 -70.293 -269.56 +34.375 -70.193 -269.24 +34.386 -70.093 -268.91 +34.392 -69.994 -268.59 +34.393 -69.895 -268.26 +34.391 -69.797 -267.93 +34.385 -69.7 -267.61 +34.375 -69.604 -267.28 +34.362 -69.508 -266.96 +34.346 -69.413 -266.63 +34.327 -69.319 -266.3 +34.305 -69.225 -265.98 +34.28 -69.132 -265.65 +34.252 -69.039 -265.33 +34.222 -68.947 -265 +34.189 -68.855 -264.68 +34.153 -68.764 -264.35 +34.115 -68.675 -264.02 +34.075 -68.585 -263.7 +34.033 -68.496 -263.37 +33.989 -68.406 -263.05 +33.945 -68.315 -262.72 +33.899 -68.223 -262.4 +33.853 -68.13 -262.08 +33.807 -68.036 -261.75 +33.76 -67.941 -261.43 +33.713 -67.843 -261.11 +33.668 -67.743 -260.78 +33.623 -67.641 -260.46 +33.58 -67.535 -260.14 +33.54 -67.425 -259.82 +33.504 -67.31 -259.51 +33.474 -67.188 -259.19 +33.448 -67.062 -258.88 +33.424 -66.931 -258.56 +33.403 -66.797 -258.25 +33.383 -66.661 -257.94 +33.364 -66.522 -257.63 +33.346 -66.381 -257.32 +33.328 -66.239 -257.01 +33.309 -66.096 -256.71 +33.289 -65.952 -256.4 +33.269 -65.807 -256.09 +33.248 -65.661 -255.78 +33.226 -65.513 -255.48 +33.202 -65.366 -255.17 +33.177 -65.217 -254.87 +33.15 -65.068 -254.56 +33.121 -64.919 -254.26 +33.089 -64.769 -253.96 +33.055 -64.62 -253.65 +33.018 -64.472 -253.35 +32.979 -64.325 -253.05 +32.937 -64.178 -252.74 +32.892 -64.033 -252.44 +32.844 -63.889 -252.13 +32.794 -63.747 -251.83 +32.74 -63.607 -251.52 +32.682 -63.47 -251.22 +32.621 -63.336 -250.91 +32.555 -63.206 -250.6 +32.485 -63.082 -250.3 +32.411 -62.964 -249.99 +32.33 -62.857 -249.67 +32.244 -62.758 -249.36 +32.152 -62.665 -249.05 +32.056 -62.577 -248.73 +31.955 -62.492 -248.42 +31.85 -62.41 -248.11 +31.74 -62.33 -247.79 +31.626 -62.25 -247.48 +31.507 -62.171 -247.17 +31.384 -62.092 -246.87 +31.257 -62.013 -246.56 +31.125 -61.934 -246.26 +30.989 -61.854 -245.96 +30.849 -61.773 -245.66 +30.706 -61.691 -245.36 +30.56 -61.607 -245.07 +30.409 -61.52 -244.77 +30.254 -61.431 -244.49 +30.095 -61.337 -244.2 +29.931 -61.239 -243.92 +29.763 -61.136 -243.64 +29.59 -61.028 -243.37 +29.413 -60.915 -243.1 +29.231 -60.795 -242.84 +29.045 -60.668 -242.59 +28.854 -60.531 -242.34 +28.659 -60.385 -242.1 +28.46 -60.228 -241.88 +28.257 -60.056 -241.67 +28.051 -59.866 -241.47 +27.843 -59.665 -241.29 +27.634 -59.455 -241.13 +27.422 -59.238 -240.97 +27.21 -59.016 -240.83 +26.996 -58.789 -240.69 +26.781 -58.559 -240.56 +26.565 -58.327 -240.44 +26.348 -58.094 -240.32 +26.129 -57.858 -240.21 +25.909 -57.621 -240.11 +25.689 -57.383 -240.01 +25.467 -57.144 -239.91 +25.244 -56.905 -239.81 +25.021 -56.666 -239.72 +24.796 -56.428 -239.63 +24.57 -56.19 -239.54 +24.342 -55.954 -239.45 +24.112 -55.721 -239.36 +23.879 -55.49 -239.27 +23.644 -55.262 -239.18 +23.406 -55.037 -239.09 +23.166 -54.816 -238.99 +22.922 -54.6 -238.9 +22.674 -54.391 -238.79 +22.423 -54.19 -238.69 +22.167 -53.998 -238.57 +21.906 -53.819 -238.45 +21.639 -53.657 -238.31 +21.368 -53.514 -238.16 +21.095 -53.383 -238.01 +20.82 -53.262 -237.85 +20.545 -53.15 -237.68 +20.27 -53.044 -237.52 +19.995 -52.945 -237.34 +19.72 -52.85 -237.17 +19.447 -52.758 -236.99 +19.174 -52.668 -236.8 +18.902 -52.58 -236.62 +18.631 -52.493 -236.43 +18.362 -52.408 -236.24 +18.094 -52.323 -236.05 +17.827 -52.238 -235.86 +17.562 -52.152 -235.67 +17.298 -52.064 -235.47 +17.036 -51.973 -235.27 +16.776 -51.879 -235.08 +16.518 -51.782 -234.88 +16.263 -51.68 -234.68 +16.011 -51.573 -234.47 +15.762 -51.461 -234.27 +15.517 -51.343 -234.07 +15.275 -51.22 -233.86 +15.038 -51.09 -233.66 +14.805 -50.953 -233.45 +14.578 -50.807 -233.24 +14.356 -50.651 -233.04 +14.142 -50.485 -232.83 +13.937 -50.306 -232.63 +13.741 -50.114 -232.43 +13.558 -49.904 -232.23 +13.389 -49.678 -232.04 +13.233 -49.44 -231.86 +13.087 -49.192 -231.68 +12.951 -48.935 -231.5 +12.826 -48.671 -231.33 +12.71 -48.4 -231.16 +12.603 -48.123 -230.99 +12.504 -47.842 -230.83 +12.413 -47.557 -230.67 +12.331 -47.267 -230.51 +12.257 -46.974 -230.35 +12.19 -46.677 -230.2 +12.132 -46.378 -230.05 +12.08 -46.076 -229.9 +12.035 -45.773 -229.76 +11.995 -45.469 -229.61 +11.961 -45.164 -229.46 +11.934 -44.857 -229.32 +11.912 -44.549 -229.18 +11.898 -44.24 -229.04 +11.889 -43.93 -228.9 +11.887 -43.619 -228.76 +11.89 -43.306 -228.63 +11.901 -42.994 -228.49 +11.917 -42.68 -228.36 +11.938 -42.366 -228.23 +11.966 -42.052 -228.11 +11.998 -41.737 -227.98 +12.036 -41.422 -227.86 +12.079 -41.107 -227.74 +12.126 -40.791 -227.62 +12.178 -40.475 -227.51 +12.233 -40.158 -227.4 +12.293 -39.842 -227.29 +12.357 -39.526 -227.18 +12.426 -39.211 -227.07 +12.499 -38.897 -226.97 +12.577 -38.584 -226.86 +12.658 -38.272 -226.75 +12.744 -37.962 -226.64 +12.834 -37.652 -226.53 +12.928 -37.345 -226.42 +13.026 -37.039 -226.31 +13.128 -36.735 -226.2 +13.234 -36.433 -226.08 +13.344 -36.133 -225.97 +13.458 -35.835 -225.85 +13.576 -35.539 -225.73 +13.698 -35.246 -225.61 +13.823 -34.956 -225.48 +13.952 -34.669 -225.36 +14.084 -34.384 -225.22 +14.22 -34.103 -225.09 +14.358 -33.825 -224.95 +14.499 -33.551 -224.81 +14.643 -33.281 -224.66 +14.789 -33.014 -224.51 +14.938 -32.752 -224.35 +15.089 -32.495 -224.19 +15.241 -32.242 -224.02 +15.396 -31.995 -223.84 +15.551 -31.754 -223.66 +15.706 -31.52 -223.47 +15.861 -31.293 -223.27 +16.015 -31.075 -223.06 +16.169 -30.866 -222.84 +16.323 -30.663 -222.61 +16.478 -30.469 -222.38 +16.634 -30.281 -222.14 +16.79 -30.101 -221.9 +16.947 -29.929 -221.65 +17.105 -29.764 -221.4 +17.264 -29.605 -221.15 +17.424 -29.455 -220.89 +17.585 -29.311 -220.62 +17.746 -29.175 -220.36 +17.909 -29.046 -220.09 +18.072 -28.924 -219.82 +18.236 -28.808 -219.54 +18.401 -28.699 -219.27 +18.567 -28.597 -218.99 +18.734 -28.501 -218.71 +18.901 -28.414 -218.42 +19.07 -28.334 -218.14 +19.239 -28.261 -217.85 +19.41 -28.196 -217.57 +19.58 -28.139 -217.28 +19.751 -28.09 -216.99 +19.923 -28.05 -216.7 +20.096 -28.017 -216.41 +20.27 -27.994 -216.12 +20.445 -27.978 -215.82 +20.621 -27.972 -215.53 +20.798 -27.976 -215.24 +20.977 -27.99 -214.96 +21.158 -28.015 -214.67 +21.339 -28.048 -214.38 +21.521 -28.089 -214.1 +21.703 -28.139 -213.82 +21.884 -28.196 -213.53 +22.065 -28.26 -213.25 +22.245 -28.33 -212.97 +22.425 -28.407 -212.69 +22.602 -28.49 -212.42 +22.779 -28.579 -212.14 +22.955 -28.674 -211.87 +23.129 -28.774 -211.59 +23.301 -28.88 -211.32 +23.472 -28.99 -211.05 +23.642 -29.106 -210.77 +23.809 -29.226 -210.5 +23.975 -29.351 -210.23 +24.139 -29.48 -209.97 +24.3 -29.612 -209.7 +24.46 -29.748 -209.43 +24.617 -29.888 -209.16 +24.772 -30.031 -208.9 +24.925 -30.176 -208.63 +25.075 -30.325 -208.36 +25.223 -30.476 -208.1 +25.368 -30.63 -207.83 +25.51 -30.785 -207.56 +25.65 -30.941 -207.3 +25.786 -31.098 -207.03 +25.919 -31.255 -206.76 +26.047 -31.411 -206.48 +26.171 -31.565 -206.21 +26.291 -31.718 -205.93 +26.408 -31.873 -205.65 +26.521 -32.028 -205.37 +26.631 -32.184 -205.09 +26.738 -32.342 -204.8 +26.843 -32.502 -204.52 +26.944 -32.664 -204.24 +27.043 -32.829 -203.96 +27.14 -32.995 -203.68 +27.234 -33.164 -203.4 +27.326 -33.335 -203.12 +27.417 -33.509 -202.84 +27.505 -33.685 -202.57 +27.592 -33.865 -202.29 +27.678 -34.048 -202.02 +27.762 -34.233 -201.75 +27.843 -34.422 -201.48 +27.923 -34.613 -201.21 +28.001 -34.807 -200.94 +28.077 -35.004 -200.67 +28.151 -35.204 -200.41 +28.223 -35.406 -200.14 +28.292 -35.612 -199.88 +28.36 -35.821 -199.62 +28.425 -36.033 -199.36 +28.486 -36.248 -199.11 +28.545 -36.467 -198.86 +28.599 -36.69 -198.6 +28.649 -36.917 -198.36 +28.698 -37.147 -198.11 +28.745 -37.38 -197.87 +28.791 -37.615 -197.63 +28.836 -37.854 -197.39 +28.88 -38.096 -197.15 +28.926 -38.34 -196.92 +28.972 -38.587 -196.69 +29.018 -38.837 -196.47 +29.065 -39.089 -196.24 +29.113 -39.343 -196.02 +29.162 -39.6 -195.81 +29.212 -39.859 -195.59 +29.264 -40.12 -195.38 +29.318 -40.383 -195.17 +29.374 -40.648 -194.96 +29.434 -40.915 -194.76 +29.498 -41.185 -194.57 +29.565 -41.456 -194.37 +29.637 -41.73 -194.18 +29.713 -42.005 -194 +29.794 -42.283 -193.82 +29.882 -42.562 -193.65 +29.976 -42.842 -193.48 +30.079 -43.124 -193.32 +30.19 -43.407 -193.17 +30.314 -43.69 -193.03 +30.448 -43.973 -192.89 +30.59 -44.255 -192.77 +30.738 -44.537 -192.65 +30.893 -44.818 -192.54 +31.052 -45.099 -192.43 +31.215 -45.379 -192.33 +31.382 -45.658 -192.23 +31.552 -45.937 -192.13 +31.725 -46.215 -192.04 +31.901 -46.493 -191.96 +32.079 -46.77 -191.87 +32.26 -47.046 -191.79 +32.443 -47.321 -191.71 +32.628 -47.596 -191.63 +32.815 -47.869 -191.56 +33.003 -48.143 -191.48 +33.192 -48.415 -191.41 +33.382 -48.687 -191.33 +33.573 -48.959 -191.26 +33.765 -49.231 -191.19 +33.956 -49.503 -191.12 +34.148 -49.774 -191.05 +34.34 -50.045 -190.98 +34.532 -50.317 -190.9 +34.724 -50.588 -190.83 +34.914 -50.86 -190.76 +35.103 -51.132 -190.68 +35.29 -51.406 -190.6 +35.474 -51.68 -190.52 +35.654 -51.956 -190.44 +35.828 -52.235 -190.35 +35.995 -52.517 -190.26 +36.156 -52.8 -190.17 +36.314 -53.083 -190.06 +36.47 -53.367 -189.96 +36.624 -53.65 -189.85 +36.776 -53.933 -189.74 +36.93 -54.214 -189.63 +37.083 -54.494 -189.51 +37.237 -54.772 -189.39 +37.392 -55.049 -189.27 +37.548 -55.323 -189.14 +37.706 -55.595 -189.01 +37.866 -55.864 -188.88 +38.027 -56.131 -188.74 +38.192 -56.394 -188.6 +38.36 -56.654 -188.46 +38.532 -56.909 -188.32 +38.707 -57.16 -188.17 +38.886 -57.406 -188.02 +39.068 -57.647 -187.86 +39.255 -57.881 -187.7 +39.447 -58.109 -187.54 +39.644 -58.329 -187.37 +39.848 -58.54 -187.2 +40.058 -58.741 -187.02 +40.277 -58.929 -186.84 +40.505 -59.101 -186.66 +40.739 -59.261 -186.47 +40.978 -59.41 -186.28 +41.222 -59.549 -186.09 +41.468 -59.678 -185.89 +41.718 -59.798 -185.69 +41.969 -59.911 -185.5 +42.222 -60.017 -185.29 +42.476 -60.114 -185.09 +42.731 -60.204 -184.88 +42.988 -60.287 -184.68 +43.245 -60.363 -184.47 +43.503 -60.432 -184.26 +43.761 -60.494 -184.05 +44.019 -60.551 -183.83 +44.277 -60.601 -183.62 +44.534 -60.648 -183.4 +44.79 -60.691 -183.18 +45.045 -60.729 -182.96 +45.299 -60.764 -182.73 +45.552 -60.796 -182.51 +45.803 -60.826 -182.28 +46.052 -60.855 -182.05 +46.299 -60.885 -181.82 +46.543 -60.917 -181.59 +46.783 -60.955 -181.35 +47.018 -61.003 -181.11 +47.25 -61.056 -180.86 +47.479 -61.112 -180.62 +47.706 -61.169 -180.37 +47.931 -61.226 -180.12 +48.155 -61.282 -179.87 +48.377 -61.336 -179.62 +48.598 -61.388 -179.37 +48.819 -61.436 -179.12 +49.04 -61.478 -178.86 +49.26 -61.516 -178.6 +49.479 -61.549 -178.35 +49.698 -61.577 -178.09 +49.917 -61.6 -177.83 +50.135 -61.617 -177.57 +50.353 -61.628 -177.31 +50.571 -61.632 -177.05 +50.789 -61.63 -176.79 +51.007 -61.622 -176.52 +51.224 -61.605 -176.26 +51.441 -61.58 -176 +51.658 -61.544 -175.74 +51.874 -61.497 -175.49 +52.09 -61.438 -175.23 +52.304 -61.368 -174.97 +52.516 -61.287 -174.72 +52.728 -61.193 -174.47 +52.937 -61.087 -174.23 +53.143 -60.965 -173.99 +53.346 -60.827 -173.75 +53.545 -60.672 -173.52 +53.738 -60.5 -173.3 +53.926 -60.308 -173.09 +54.104 -60.095 -172.9 +54.269 -59.855 -172.72 +54.417 -59.587 -172.58 +54.549 -59.3 -172.45 +54.667 -58.999 -172.34 +54.772 -58.689 -172.26 +54.865 -58.37 -172.18 +54.949 -58.046 -172.12 +55.024 -57.718 -172.08 +55.091 -57.387 -172.04 +55.151 -57.053 -172.01 +55.204 -56.718 -171.99 +55.251 -56.381 -171.98 +55.294 -56.044 -171.98 +55.334 -55.706 -171.98 +55.371 -55.368 -171.98 +55.407 -55.03 -171.99 +55.442 -54.692 -172 +55.477 -54.354 -172.01 +55.513 -54.016 -172.02 +55.549 -53.678 -172.03 +55.588 -53.34 -172.03 +55.63 -53.003 -172.04 +55.677 -52.666 -172.03 +55.73 -52.331 -172.03 +55.792 -51.997 -172 +55.864 -51.667 -171.97 +55.951 -51.343 -171.91 +56.054 -51.029 -171.84 +56.167 -50.722 -171.74 +56.289 -50.422 -171.64 +56.418 -50.128 -171.53 +56.554 -49.84 -171.41 +56.696 -49.556 -171.29 +56.842 -49.276 -171.16 +56.994 -49 -171.03 +57.149 -48.727 -170.9 +57.309 -48.457 -170.77 +57.473 -48.191 -170.64 +57.64 -47.925 -170.51 +57.809 -47.661 -170.38 +57.981 -47.397 -170.25 +58.155 -47.133 -170.12 +58.333 -46.871 -170 +58.515 -46.609 -169.88 +58.7 -46.348 -169.77 +58.89 -46.088 -169.66 +59.083 -45.83 -169.55 +59.28 -45.571 -169.45 +59.482 -45.314 -169.36 +59.687 -45.056 -169.27 +59.897 -44.798 -169.2 +60.111 -44.541 -169.14 +60.329 -44.283 -169.1 +60.55 -44.027 -169.07 +60.772 -43.771 -169.05 +60.997 -43.516 -169.04 +61.223 -43.261 -169.03 +61.45 -43.008 -169.03 +61.677 -42.756 -169.04 +61.906 -42.505 -169.05 +62.135 -42.254 -169.07 +62.365 -42.004 -169.09 +62.595 -41.755 -169.11 +62.825 -41.506 -169.14 +63.055 -41.258 -169.17 +63.286 -41.011 -169.21 +63.517 -40.764 -169.24 +63.748 -40.517 -169.28 +63.979 -40.272 -169.32 +64.211 -40.026 -169.36 +64.443 -39.781 -169.41 +64.674 -39.536 -169.45 +64.905 -39.29 -169.49 +65.135 -39.044 -169.54 +65.365 -38.797 -169.58 +65.593 -38.549 -169.63 +65.82 -38.3 -169.67 +66.046 -38.05 -169.72 +66.271 -37.799 -169.76 +66.494 -37.545 -169.8 +66.714 -37.29 -169.85 +66.932 -37.032 -169.89 +67.148 -36.772 -169.92 +67.359 -36.508 -169.96 +67.566 -36.239 -169.98 +67.767 -35.966 -170.01 +67.963 -35.688 -170.02 +68.154 -35.408 -170.03 +68.342 -35.124 -170.04 +68.528 -34.839 -170.05 +68.71 -34.553 -170.05 +68.891 -34.265 -170.05 +69.07 -33.976 -170.05 +69.248 -33.686 -170.05 +69.425 -33.396 -170.05 +69.602 -33.105 -170.04 +69.778 -32.814 -170.04 +69.953 -32.523 -170.03 +70.127 -32.231 -170.03 +70.301 -31.939 -170.02 +70.476 -31.648 -170.01 +70.65 -31.356 -170 +70.824 -31.064 -169.99 +71 -30.773 -169.98 +71.175 -30.482 -169.98 +71.352 -30.192 -169.97 +71.531 -29.903 -169.96 +71.711 -29.614 -169.95 +71.893 -29.327 -169.94 +72.076 -29.041 -169.94 +72.262 -28.756 -169.93 +72.449 -28.472 -169.92 +72.639 -28.19 -169.92 +72.832 -27.911 -169.91 +73.029 -27.634 -169.91 +73.23 -27.359 -169.91 +73.435 -27.088 -169.91 +73.646 -26.821 -169.91 +73.863 -26.559 -169.92 +74.089 -26.306 -169.94 +74.322 -26.059 -169.95 +74.56 -25.818 -169.97 +74.803 -25.581 -170 +75.05 -25.348 -170.02 +75.299 -25.119 -170.05 +75.551 -24.892 -170.08 +75.805 -24.667 -170.1 +76.06 -24.444 -170.13 +76.317 -24.223 -170.15 +76.576 -24.003 -170.17 +76.835 -23.785 -170.2 +77.095 -23.567 -170.22 +77.356 -23.349 -170.24 +77.617 -23.132 -170.26 +77.877 -22.914 -170.27 +78.137 -22.695 -170.28 +78.397 -22.476 -170.29 +78.656 -22.256 -170.3 +78.914 -22.034 -170.3 +79.171 -21.811 -170.3 +79.426 -21.587 -170.29 +79.68 -21.362 -170.28 +79.932 -21.134 -170.27 +80.181 -20.903 -170.25 +80.427 -20.67 -170.22 +80.669 -20.434 -170.19 +80.905 -20.193 -170.14 +81.135 -19.948 -170.09 +81.355 -19.698 -170.02 +81.569 -19.444 -169.95 +81.776 -19.188 -169.87 +81.978 -18.929 -169.78 +82.175 -18.669 -169.68 +82.367 -18.407 -169.58 +82.554 -18.145 -169.47 +82.738 -17.881 -169.36 +82.918 -17.616 -169.25 +83.094 -17.351 -169.13 +83.267 -17.085 -169 +83.436 -16.819 -168.88 +83.603 -16.552 -168.75 +83.769 -16.287 -168.62 +83.933 -16.021 -168.48 +84.094 -15.755 -168.34 +84.253 -15.489 -168.2 +84.409 -15.222 -168.06 +84.562 -14.954 -167.92 +84.712 -14.686 -167.77 +84.86 -14.417 -167.63 +85.005 -14.147 -167.48 +85.147 -13.876 -167.33 +85.285 -13.603 -167.18 +85.42 -13.329 -167.04 +85.552 -13.052 -166.89 +85.679 -12.771 -166.74 +85.801 -12.487 -166.6 +85.919 -12.199 -166.47 +86.034 -11.91 -166.33 +86.148 -11.621 -166.19 +86.26 -11.33 -166.06 +86.371 -11.039 -165.92 +86.482 -10.748 -165.78 +86.592 -10.458 -165.64 +86.704 -10.169 -165.5 +86.816 -9.8803 -165.36 +86.928 -9.5928 -165.22 +87.042 -9.3065 -165.08 +87.157 -9.0216 -164.93 +87.274 -8.7385 -164.78 +87.392 -8.4574 -164.63 +87.512 -8.1785 -164.48 +87.634 -7.9023 -164.32 +87.759 -7.6289 -164.16 +87.887 -7.3587 -164 +88.02 -7.0919 -163.84 +88.157 -6.8289 -163.67 +88.298 -6.5697 -163.5 +88.443 -6.3147 -163.33 +88.593 -6.0642 -163.16 +88.749 -5.8189 -162.98 +88.912 -5.5796 -162.8 +89.081 -5.3466 -162.62 +89.257 -5.1209 -162.44 +89.442 -4.9033 -162.25 +89.636 -4.6953 -162.07 +89.842 -4.4993 -161.88 +90.059 -4.3155 -161.7 +90.283 -4.1427 -161.51 +90.515 -3.9801 -161.32 +90.752 -3.8275 -161.13 +90.994 -3.6852 -160.94 +91.24 -3.5527 -160.74 +91.49 -3.4293 -160.55 +91.742 -3.3154 -160.35 +91.998 -3.2112 -160.15 +92.255 -3.1164 -159.95 +92.515 -3.031 -159.75 +92.776 -2.9549 -159.55 +93.038 -2.8876 -159.34 +93.3 -2.8282 -159.13 +93.563 -2.7771 -158.92 +93.825 -2.7355 -158.71 +94.087 -2.7032 -158.5 +94.348 -2.6806 -158.28 +94.608 -2.6679 -158.06 +94.865 -2.6653 -157.84 +95.121 -2.6727 -157.61 +95.374 -2.6902 -157.39 +95.624 -2.7185 -157.16 +95.87 -2.7574 -156.93 +96.111 -2.8069 -156.69 +96.346 -2.8676 -156.46 +96.573 -2.9402 -156.21 +96.792 -3.0249 -155.97 +97.002 -3.1198 -155.72 +97.206 -3.2238 -155.47 +97.403 -3.3365 -155.21 +97.595 -3.4572 -154.96 +97.781 -3.5856 -154.71 +97.961 -3.7214 -154.45 +98.136 -3.8643 -154.2 +98.306 -4.0137 -153.94 +98.472 -4.1695 -153.69 +98.633 -4.3315 -153.44 +98.789 -4.4996 -153.19 +98.94 -4.6734 -152.94 +99.087 -4.8529 -152.69 +99.23 -5.0377 -152.44 +99.369 -5.2275 -152.2 +99.505 -5.4222 -151.95 +99.636 -5.6215 -151.71 +99.765 -5.8252 -151.47 +99.89 -6.0332 -151.23 +100.01 -6.2453 -151 +100.13 -6.4615 -150.76 +100.24 -6.6815 -150.53 +100.36 -6.9052 -150.3 +100.47 -7.1325 -150.07 +100.57 -7.3633 -149.85 +100.68 -7.5973 -149.62 +100.78 -7.8343 -149.4 +100.88 -8.0742 -149.18 +100.97 -8.3168 -148.96 +101.07 -8.5619 -148.75 +101.17 -8.8092 -148.54 +101.27 -9.0584 -148.33 +101.36 -9.3097 -148.12 +101.46 -9.5633 -147.92 +101.56 -9.8193 -147.71 +101.65 -10.078 -147.52 +101.75 -10.339 -147.32 +101.84 -10.602 -147.12 +101.93 -10.868 -146.93 +102.01 -11.136 -146.74 +102.1 -11.407 -146.55 +102.18 -11.68 -146.37 +102.26 -11.955 -146.18 +102.33 -12.232 -146 +102.4 -12.511 -145.82 +102.47 -12.792 -145.64 +102.54 -13.074 -145.46 +102.6 -13.358 -145.29 +102.66 -13.644 -145.11 +102.72 -13.932 -144.94 +102.77 -14.222 -144.77 +102.82 -14.512 -144.6 +102.86 -14.805 -144.44 +102.91 -15.099 -144.27 +102.94 -15.394 -144.1 +102.98 -15.69 -143.94 +103.01 -15.988 -143.78 +103.03 -16.287 -143.62 +103.05 -16.587 -143.46 +103.06 -16.889 -143.31 +103.06 -17.192 -143.15 +103.06 -17.496 -143 +103.05 -17.801 -142.85 +103.03 -18.106 -142.7 +103.01 -18.412 -142.55 +102.99 -18.718 -142.41 +102.96 -19.023 -142.26 +102.93 -19.329 -142.11 +102.9 -19.634 -141.97 +102.86 -19.939 -141.82 +102.83 -20.244 -141.68 +102.79 -20.549 -141.53 +102.75 -20.853 -141.38 +102.71 -21.157 -141.24 +102.67 -21.46 -141.09 +102.63 -21.763 -140.94 +102.59 -22.065 -140.79 +102.55 -22.366 -140.63 +102.51 -22.666 -140.48 +102.47 -22.965 -140.32 +102.43 -23.263 -140.16 +102.4 -23.559 -140 +102.37 -23.854 -139.83 +102.34 -24.146 -139.66 +102.31 -24.436 -139.48 +102.29 -24.723 -139.3 +102.28 -25.005 -139.11 +102.27 -25.283 -138.92 +102.27 -25.558 -138.72 +102.27 -25.83 -138.51 +102.27 -26.099 -138.31 +102.28 -26.366 -138.1 +102.29 -26.63 -137.88 +102.31 -26.892 -137.67 +102.33 -27.153 -137.45 +102.35 -27.411 -137.23 +102.37 -27.667 -137.01 +102.4 -27.921 -136.78 +102.43 -28.174 -136.56 +102.46 -28.425 -136.33 +102.49 -28.674 -136.1 +102.53 -28.923 -135.87 +102.57 -29.169 -135.64 +102.62 -29.415 -135.41 +102.66 -29.659 -135.18 +102.71 -29.902 -134.95 +102.76 -30.144 -134.71 +102.82 -30.385 -134.48 +102.88 -30.625 -134.25 +102.94 -30.865 -134.01 +103.01 -31.104 -133.78 +103.08 -31.343 -133.55 +103.15 -31.583 -133.32 +103.22 -31.824 -133.09 +103.3 -32.066 -132.87 +103.38 -32.308 -132.64 +103.46 -32.55 -132.42 +103.55 -32.791 -132.19 +103.64 -33.032 -131.97 +103.73 -33.272 -131.75 +103.82 -33.511 -131.52 +103.92 -33.749 -131.3 +104.02 -33.986 -131.08 +104.12 -34.221 -130.85 +104.22 -34.455 -130.63 +104.33 -34.688 -130.41 +104.44 -34.919 -130.18 +104.55 -35.148 -129.96 +104.67 -35.375 -129.73 +104.79 -35.6 -129.51 +104.91 -35.822 -129.28 +105.03 -36.043 -129.05 +105.16 -36.261 -128.82 +105.29 -36.477 -128.6 +105.42 -36.69 -128.37 +105.56 -36.901 -128.14 +105.69 -37.109 -127.91 +105.84 -37.314 -127.68 +105.98 -37.517 -127.45 +106.13 -37.717 -127.22 +106.29 -37.914 -126.99 +106.44 -38.108 -126.75 +106.61 -38.298 -126.52 +106.77 -38.484 -126.29 +106.94 -38.667 -126.06 +107.12 -38.846 -125.84 +107.3 -39.019 -125.61 +107.49 -39.189 -125.38 +107.69 -39.354 -125.16 +107.88 -39.516 -124.93 +108.08 -39.673 -124.7 +108.29 -39.827 -124.48 +108.49 -39.976 -124.25 +108.7 -40.121 -124.02 +108.91 -40.263 -123.8 +109.12 -40.4 -123.57 +109.33 -40.534 -123.34 +109.54 -40.663 -123.11 +109.75 -40.789 -122.87 +109.97 -40.91 -122.64 +110.18 -41.028 -122.4 +110.4 -41.141 -122.17 +110.62 -41.25 -121.93 +110.83 -41.355 -121.69 +111.05 -41.455 -121.45 +111.27 -41.552 -121.2 +111.48 -41.645 -120.96 +111.7 -41.734 -120.71 +111.91 -41.818 -120.46 +112.12 -41.898 -120.2 +112.33 -41.975 -119.95 +112.54 -42.047 -119.69 +112.74 -42.115 -119.42 +112.94 -42.179 -119.15 +113.13 -42.239 -118.88 +113.32 -42.296 -118.61 +113.51 -42.349 -118.33 +113.68 -42.399 -118.04 +113.85 -42.445 -117.74 +114 -42.488 -117.44 +114.15 -42.526 -117.14 +114.29 -42.56 -116.83 +114.43 -42.588 -116.52 +114.56 -42.611 -116.21 +114.69 -42.628 -115.89 +114.81 -42.64 -115.58 +114.93 -42.645 -115.26 +115.05 -42.645 -114.94 +115.17 -42.638 -114.62 +115.28 -42.626 -114.3 +115.4 -42.606 -113.98 +115.51 -42.581 -113.66 +115.62 -42.549 -113.35 +115.73 -42.51 -113.03 +115.85 -42.465 -112.71 +115.96 -42.412 -112.39 +116.07 -42.352 -112.08 +116.19 -42.285 -111.76 +116.3 -42.21 -111.45 +116.41 -42.128 -111.14 +116.53 -42.038 -110.84 +116.65 -41.94 -110.53 +116.76 -41.834 -110.23 +116.88 -41.72 -109.93 +117 -41.597 -109.64 +117.13 -41.465 -109.35 +117.25 -41.324 -109.07 +117.38 -41.173 -108.8 +117.52 -41.012 -108.53 +117.65 -40.841 -108.27 +117.79 -40.662 -108.02 +117.94 -40.475 -107.77 +118.08 -40.281 -107.53 +118.23 -40.079 -107.3 +118.37 -39.87 -107.08 +118.52 -39.655 -106.86 +118.67 -39.434 -106.65 +118.83 -39.207 -106.45 +118.98 -38.974 -106.25 +119.13 -38.735 -106.06 +119.29 -38.491 -105.88 +119.44 -38.242 -105.71 +119.59 -37.987 -105.55 +119.75 -37.728 -105.39 +119.9 -37.465 -105.24 +120.06 -37.198 -105.1 +120.22 -36.927 -104.97 +120.38 -36.653 -104.84 +120.54 -36.376 -104.73 +120.7 -36.095 -104.62 +120.86 -35.813 -104.52 +121.02 -35.528 -104.44 +121.19 -35.241 -104.36 +121.35 -34.953 -104.29 +121.52 -34.665 -104.23 +121.69 -34.376 -104.17 +121.87 -34.089 -104.13 +122.05 -33.803 -104.09 +122.23 -33.517 -104.06 +122.42 -33.232 -104.04 +122.6 -32.947 -104.03 +122.79 -32.661 -104.03 +122.97 -32.376 -104.03 +123.15 -32.091 -104.04 +123.34 -31.805 -104.05 +123.52 -31.519 -104.08 +123.7 -31.233 -104.11 +123.88 -30.948 -104.15 +124.06 -30.662 -104.2 +124.24 -30.377 -104.26 +124.41 -30.091 -104.32 +124.58 -29.806 -104.39 +124.75 -29.522 -104.47 +124.91 -29.237 -104.56 +125.08 -28.954 -104.65 +125.24 -28.67 -104.75 +125.39 -28.387 -104.86 +125.54 -28.106 -104.97 +125.69 -27.825 -105.1 +125.83 -27.545 -105.23 +125.97 -27.266 -105.36 +126.1 -26.989 -105.51 +126.23 -26.713 -105.66 +126.35 -26.439 -105.82 +126.47 -26.167 -105.99 +126.58 -25.896 -106.16 +126.68 -25.628 -106.35 +126.77 -25.362 -106.53 +126.86 -25.099 -106.73 +126.94 -24.838 -106.94 +127.01 -24.581 -107.15 +127.06 -24.328 -107.37 +127.1 -24.081 -107.6 +127.14 -23.837 -107.83 +127.16 -23.599 -108.07 +127.18 -23.367 -108.32 +127.19 -23.139 -108.57 +127.18 -22.917 -108.83 +127.18 -22.7 -109.09 +127.16 -22.489 -109.36 +127.14 -22.283 -109.63 +127.1 -22.083 -109.9 +127.07 -21.889 -110.18 +127.02 -21.701 -110.46 +126.97 -21.519 -110.74 +126.92 -21.343 -111.03 +126.86 -21.173 -111.31 +126.79 -21.008 -111.6 +126.72 -20.848 -111.89 +126.64 -20.693 -112.19 +126.55 -20.543 -112.48 +126.46 -20.399 -112.77 +126.37 -20.26 -113.07 +126.26 -20.125 -113.36 +126.16 -19.994 -113.66 +126.04 -19.867 -113.95 +125.92 -19.743 -114.24 +125.79 -19.622 -114.54 diff --git a/examples/extended/medical/dna/dnadamage2/src/ActionInitialization.cc b/examples/extended/medical/dna/dnadamage2/src/ActionInitialization.cc new file mode 100644 index 00000000000..85beb81ee81 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/src/ActionInitialization.cc @@ -0,0 +1,92 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// dnadamage3 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +/// \file ActionInitialization.cc +/// \brief Implementation of the ActionInitialization class + +#include "ActionInitialization.hh" +#include "PrimaryGeneratorAction.hh" +#include "RunAction.hh" +#include "StackingAction.hh" +#include "TimeStepAction.hh" + +#include "G4DNAChemistryManager.hh" +#include "G4MoleculeCounter.hh" +#include "G4Scheduler.hh" + +#include "G4H2O.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +ActionInitialization::ActionInitialization() + : G4VUserActionInitialization() +{ +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ActionInitialization::BuildForMaster() const +{ + SetUserAction(new RunAction()); + G4DNAChemistryManager::Instance()->ResetCounterWhenRunEnds(false); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ActionInitialization::Build() const +{ + + G4MoleculeCounter::Instance()->Use(); + + G4MoleculeCounter::Instance()->DontRegister(G4H2O::Definition()); + + // sequential mode + if(G4Threading::IsMultithreadedApplication() == false) { + G4DNAChemistryManager::Instance()->ResetCounterWhenRunEnds(false); + } + + SetUserAction(new PrimaryGeneratorAction()); + SetUserAction(new RunAction()); + SetUserAction(new StackingAction()); + G4Scheduler::Instance()->SetUserAction(new TimeStepAction()); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/dnadamage2/src/DetectorConstruction.cc b/examples/extended/medical/dna/dnadamage2/src/DetectorConstruction.cc new file mode 100644 index 00000000000..980252877f2 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/src/DetectorConstruction.cc @@ -0,0 +1,294 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// dnadamage2 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +/// \file DetectorConstruction.cc +/// \brief Implementation of the DetectorConstruction class + +#include "DetectorConstruction.hh" + +#include "G4NistManager.hh" +#include "G4Box.hh" +#include "G4LogicalVolume.hh" +#include "G4PVPlacement.hh" + +#include "G4VisAttributes.hh" +#include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" +#include "G4GeometryManager.hh" +#include "G4RunManager.hh" +#include "G4LogicalVolumeStore.hh" + +#include "G4SDManager.hh" +#include "G4MultiFunctionalDetector.hh" +#include "G4VPrimitiveScorer.hh" + +#include "ScoreSpecies.hh" +#include "ScoreLET.hh" +#include "ScoreStrandBreaks.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +DetectorConstruction::DetectorConstruction() +: G4VUserDetectorConstruction() +{ + fDetDir = new G4UIdirectory("/det/"); + fDetDir->SetGuidance("Detector control."); + + fSizeCmd = new G4UIcmdWithADoubleAndUnit("/det/setSize",this); + fSizeCmd->SetDefaultUnit("um"); + + fpOffSetFileUI = new G4UIcmdWithAString("/det/OffSetFile", this); + fpPlasmidNbUI = new G4UIcmdWithAnInteger("/det/NbOfPlasmids", this); + + fpPlasmidFile = new G4UIcmdWithAString("/det/PlasmidFile", this); + fpUseDNA = new G4UIcmdWithABool("/det/UseDNAVolumes", this); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +DetectorConstruction::~DetectorConstruction() +{ + delete fSizeCmd; + delete fpOffSetFileUI; + delete fpPlasmidFile; + delete fpUseDNA; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void DetectorConstruction::SetNewValue(G4UIcommand* command, G4String newValue) +{ + if(command == fSizeCmd) + { + G4double size = fSizeCmd->GetNewDoubleValue(newValue); + SetSize(size); + } + + if (command == fpPlasmidNbUI) + { + fNbOfPlasmids = fpPlasmidNbUI->GetNewIntValue(newValue); + } + + if (command == fpOffSetFileUI) + { + G4String File = newValue; + ReadOffsetFile(File); + } + + if (command == fpPlasmidFile) + { + fPlasmidFile = newValue; + } + + if (command == fpUseDNA) + { + fUseDNAVolumes = fpUseDNA->GetNewBoolValue(newValue); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void DetectorConstruction::SetSize(G4double size) +{ + + G4GeometryManager::GetInstance()->OpenGeometry(); + fPlasmidEnvelope->SetRadius(size/2); + G4RunManager::GetRunManager()->GeometryHasBeenModified(); + G4cout << "#### the geometry has been modified " << G4endl; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +G4VPhysicalVolume* DetectorConstruction::Construct() +{ + // Clear DNA information Containers + fSampleDNANames.clear(); + fSampleDNAPositions.clear(); + fSampleDNADetails.clear(); + fDNANames.clear(); + fDNAPositions.clear(); + fDNADetails.clear(); + + // Water is defined from NIST material database + G4NistManager * man = G4NistManager::Instance(); + G4Material* normalWater = man->FindOrBuildMaterial("G4_WATER"); + G4Material* waterWorld = man->BuildMaterialWithNewDensity("G4_WATER_WORLD", + "G4_WATER", + 1.0*g/cm/cm/cm); + + // + // World + G4Box* solidWenvelope = new G4Box("SWorld", 1 * um, 1 * um, 1 * um); + G4LogicalVolume* logicWorld = new G4LogicalVolume(solidWenvelope, + waterWorld, + "LWorld"); + G4VPhysicalVolume* physWorld = new G4PVPlacement(0, + G4ThreeVector(), + "PWorld", + logicWorld, + 0, + false, + 0); + + // Molecule + fPlasmidEnvelope = new G4Orb("plasmidEnvelope", 0.5*fWorldSize); + + G4LogicalVolume* tlogicPlasmid = new G4LogicalVolume(fPlasmidEnvelope, + normalWater, + "PlasmidVolume"); + new G4PVPlacement(0, + G4ThreeVector(), + tlogicPlasmid, + "plasmid", + logicWorld, + false, + 0); + + // World Vis Attributes + G4VisAttributes worldVis(G4Colour(0.0, 0.0, 1.0) ); + logicWorld->SetVisAttributes(worldVis); + + PhysGeoImport GeoImport = PhysGeoImport(); + + G4LogicalVolume* logicStraightVoxel; + + logicStraightVoxel = GeoImport.CreateLogicVolumeXYZ(fPlasmidFile); + + fSampleDNANames = GeoImport.GetMoleculesNames(); + fSampleDNAPositions = GeoImport.GetMoleculesPositions(); + fSampleDNADetails = GeoImport.GetMoleculesDetails(); + + for ( int i = 0; i < fNbOfPlasmids; i++ ) { + if (fUseDNAVolumes) + new G4PVPlacement(0, + fVOffset[i], + logicStraightVoxel, + "VoxelStraight", + logicWorld, + true, + i); + AddDNAInformation(i,fVOffset[i]); + } + + //always return the physical World + return physWorld; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void DetectorConstruction::ConstructSDandField() +{ + G4SDManager::GetSDMpointer()->SetVerboseLevel(1); + + // declare World as a MultiFunctionalDetector scorer + // + G4MultiFunctionalDetector* mfDetector = + new G4MultiFunctionalDetector("mfDetector"); + + // LET scorer: + // - scores restricted or unrestricted LET + + ScoreLET* LET = new ScoreLET("LET"); + mfDetector->RegisterPrimitive(LET); + + // Species scorer: + // - scores number of species over time + // - compute the radiochemical yields (G values) + + G4VPrimitiveScorer* primitivSpecies = new ScoreSpecies("Species"); + mfDetector->RegisterPrimitive(primitivSpecies); + + // SB Scorer: Requires access to Geometry + // - scores number of Direct SB + // - scores number of Indirect SB + + G4VPrimitiveScorer* primitiveSB = new ScoreStrandBreaks("StrandBreaks", + this,&fWorldSize); + mfDetector->RegisterPrimitive(primitiveSB); + + // Attach Detectors to Plasmid Volumes + G4LogicalVolumeStore* theLogicalVolumes = G4LogicalVolumeStore::GetInstance(); + for ( size_t t = 0; t < theLogicalVolumes->size(); t++ ) { + G4String lVolumeName = (*theLogicalVolumes)[t]->GetName(); + if (lVolumeName != "LWorld") { + (*theLogicalVolumes)[t]->SetSensitiveDetector(mfDetector); + } + } + G4SDManager::GetSDMpointer()->AddNewDetector(mfDetector); + +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void DetectorConstruction::ReadOffsetFile(G4String file) { + if (fVOffset.size() > 0) + fVOffset.clear(); + + std::ifstream OffSetFile; + OffSetFile.open(file); + G4double x, y, z; + + if (!OffSetFile) { + G4cout << "Plasmid Offset positions file not found!!!" << G4endl; + exit(1); + } + + else { + while (OffSetFile >> x >> y >> z) { + fVOffset.push_back(G4ThreeVector(x*nm,y*nm,z*nm)); + } + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void DetectorConstruction::AddDNAInformation(G4int copy, G4ThreeVector offset) { + for(size_t i = 0; i < fSampleDNANames.size(); i++) { + fDNANames.push_back(fSampleDNANames[i]); + fDNAPositions.push_back(fSampleDNAPositions[i] + offset); + + std::vector Details = fSampleDNADetails[i]; + Details[0] = copy; + fDNADetails.push_back(Details); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/dnadamage2/src/G4EmDNAChemistryForPlasmids.cc b/examples/extended/medical/dna/dnadamage2/src/G4EmDNAChemistryForPlasmids.cc new file mode 100644 index 00000000000..d397e3650e7 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/src/G4EmDNAChemistryForPlasmids.cc @@ -0,0 +1,911 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// G4EmDNAChemistryForPlasmids.cc +// +// Created on: Feb 10, 2021 +// Authors: J. Naoki D. Kondo +// W. G. Shin, J. Ramos-Mendez and B. Faddegon +// +/// \file G4EmDNAChemistryForPlasmids.cc +/// \brief Implementation of the Chemistry parameters with DNA reactions + +#include "G4EmDNAChemistryForPlasmids.hh" + +#include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" + +#include "G4DNAWaterDissociationDisplacer.hh" +#include "G4DNAChemistryManager.hh" +#include "G4DNAWaterExcitationStructure.hh" +#include "G4ProcessManager.hh" + +#include "G4DNAGenericIonsManager.hh" + +// *** Processes and models for Geant4-DNA + +#include "G4DNAElectronSolvation.hh" + +#include "G4DNAAttachment.hh" +#include "G4DNAVibExcitation.hh" + +#include "G4DNAElastic.hh" +#include "G4DNAChampionElasticModel.hh" +#include "G4DNAScreenedRutherfordElasticModel.hh" +#include "G4DNAUeharaScreenedRutherfordElasticModel.hh" +#include "G4DNASancheExcitationModel.hh" + +#include "G4DNAMolecularDissociation.hh" +#include "G4DNABrownianTransportation.hh" +#include "G4DNAMolecularReactionTable.hh" + +#include "G4DNAMolecularStepByStepModel.hh" +#include "G4DNAMolecularIRTModel.hh" + +#include "G4VDNAReactionModel.hh" +#include "G4DNASmoluchowskiReactionModel.hh" + +#include "G4DNAIRT.hh" + +#include "G4DNAElectronHoleRecombination.hh" + +// particles + +#include "G4Electron.hh" +#include "G4Proton.hh" +#include "G4GenericIon.hh" + +#include "G4MoleculeTable.hh" +#include "G4H2O.hh" +#include "G4H2.hh" +#include "G4Hydrogen.hh" +#include "G4OH.hh" +#include "G4H3O.hh" +#include "G4Electron_aq.hh" + +#include "G4Oxygen.hh" +#include "G4H2O2.hh" +#include "G4O2.hh" +#include "G4HO2.hh" +#include "G4O3.hh" +#include "G4FakeMolecule.hh" +#include "PlasmidMolecules.hh" +#include "ScavengerMolecules.hh" + +#include "G4PhysicsListHelper.hh" +#include "G4BuilderType.hh" + +/****/ +#include "G4DNAMoleculeEncounterStepper.hh" +#include "G4ProcessVector.hh" +#include "G4ProcessTable.hh" +#include "G4DNASecondOrderReaction.hh" +#include "G4MolecularConfiguration.hh" +/****/ + +#include "G4Scheduler.hh" + +// factory +#include "G4PhysicsConstructorFactory.hh" + +G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistryForPlasmids); + +#include "G4Threading.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +G4EmDNAChemistryForPlasmids::G4EmDNAChemistryForPlasmids() : + G4VUserChemistryList(true) +{ + G4DNAChemistryManager::Instance()->SetChemistryList(this); + + fDMSO = 0; + fOxygen = 0; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +G4EmDNAChemistryForPlasmids::G4EmDNAChemistryForPlasmids(G4double dmso, + G4double oxygen): + G4VUserChemistryList(true) +{ + G4DNAChemistryManager::Instance()->SetChemistryList(this); + + fDMSO = dmso; + fOxygen = oxygen; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4EmDNAChemistryForPlasmids::ConstructMolecule() +{ + //----------------------------------- + // G4Electron::Definition(); // safety + + //----------------------------------- + // Create the definition + + G4H2O::Definition(); + G4Hydrogen::Definition(); + G4H3O::Definition(); + G4OH::Definition(); + G4Electron_aq::Definition(); + G4H2O2::Definition(); + G4H2::Definition(); + + G4O2::Definition(); + G4HO2::Definition(); + G4Oxygen::Definition(); + G4O3::Definition(); + + //____________________________________________________________________________ + + G4MoleculeTable::Instance()->CreateConfiguration("H3Op", G4H3O::Definition()); + G4MoleculeTable::Instance()->GetConfiguration("H3Op")->SetDiffusionCoefficient( + 9.46e-9 * (m2/s)); + G4MoleculeTable::Instance()-> + GetConfiguration("H3Op")->SetVanDerVaalsRadius(0.25*nm); + + G4MoleculeTable::Instance()->CreateConfiguration("OH", G4OH::Definition()); + G4MoleculeTable::Instance()-> + GetConfiguration("OH")->SetDiffusionCoefficient(2.2e-9 * (m2/s)); + G4MoleculeTable::Instance()-> + GetConfiguration("OH")->SetVanDerVaalsRadius(0.22*nm); + + G4MolecularConfiguration* OHm = G4MoleculeTable::Instance()-> + CreateConfiguration("OHm", + G4OH::Definition(), + -1, + 5.3e-9 * (m2 / s)); + OHm->SetMass(17.0079 * g / Avogadro * c_squared); + OHm->SetVanDerVaalsRadius(0.33*nm); + + G4MolecularConfiguration* O2m = G4MoleculeTable::Instance()-> + CreateConfiguration("O2m", + G4O2::Definition(), + -1, + 1.75e-9 * (m2 / s)); + O2m->SetMass(31.99602 * g / Avogadro * c_squared); + O2m->SetVanDerVaalsRadius(0.22*nm); + + G4MoleculeTable::Instance()-> + CreateConfiguration("e_aq",G4Electron_aq::Definition()); + G4MoleculeTable::Instance()-> + GetConfiguration("e_aq")->SetVanDerVaalsRadius(0.50*nm); + + G4MoleculeTable::Instance()-> + CreateConfiguration("H",G4Hydrogen::Definition()); + G4MoleculeTable::Instance()-> + GetConfiguration("H")->SetVanDerVaalsRadius(0.19*nm); + + G4MolecularConfiguration* H2 = G4MoleculeTable::Instance()-> + CreateConfiguration("H2", G4H2::Definition()); + H2->SetDiffusionCoefficient(4.8e-9 * (m2/s)); + H2->SetVanDerVaalsRadius(0.14*nm); + H2->SetMass(2.01588 * g / Avogadro * c_squared); + + G4MoleculeTable::Instance()->CreateConfiguration("H2O2", G4H2O2::Definition()); + G4MoleculeTable::Instance()-> + GetConfiguration("H2O2")->SetDiffusionCoefficient(2.3e-9 * (m2/s)); + G4MoleculeTable::Instance()-> + GetConfiguration("H2O2")->SetVanDerVaalsRadius(0.21*nm); + + // molecules extension (RITRACKS) + + G4MoleculeTable::Instance()->CreateConfiguration("HO2",G4HO2::Definition()); + G4MoleculeTable::Instance()-> + GetConfiguration("HO2")->SetVanDerVaalsRadius(0.21*nm); + + G4MolecularConfiguration* HO2m = G4MoleculeTable::Instance()-> + CreateConfiguration("HO2m", + G4HO2::Definition(), + -1, + 1.4e-9 * (m2 / s)); + HO2m->SetMass(33.00396 * g / Avogadro * c_squared); + HO2m->SetVanDerVaalsRadius(0.25*nm); + + G4MoleculeTable::Instance()->CreateConfiguration("NoneM", + G4FakeMolecule::Definition()); + + G4MoleculeTable::Instance()-> + CreateConfiguration("DMSO", + G4DMSO::Definition(), + 0, + 0 * (m2 / s)); + + G4MoleculeTable::Instance()->CreateConfiguration("O2",G4O2::Definition()); + G4MoleculeTable::Instance()->GetConfiguration("O2")->SetVanDerVaalsRadius(0.17*nm); + + G4MoleculeTable::Instance()-> + CreateConfiguration("Oxygen", + G4OxygenB::Definition(), + 0, + 0 * (m2 / s)); + + G4MoleculeTable::Instance()-> + CreateConfiguration("Deoxyribose", + G4DNA_Deoxyribose::Definition(), + 0, + 1E-150 * (m2 / s)); + + G4MoleculeTable::Instance()-> + CreateConfiguration("Damaged_DeoxyriboseOH", + G4DNA_DamagedDeoxyriboseOH::Definition(), + 0, + 1E-150 * (m2 / s)); + + G4MoleculeTable::Instance()-> + CreateConfiguration("Damaged_DeoxyriboseH", + G4DNA_DamagedDeoxyriboseH::Definition(), + 0, + 1E-150 * (m2 / s)); + + G4MoleculeTable::Instance()-> + CreateConfiguration("Damaged_DeoxyriboseEAQ", + G4DNA_DamagedDeoxyriboseEAQ::Definition(), + 0, + 1E-150 * (m2 / s)); + +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4EmDNAChemistryForPlasmids::ConstructDissociationChannels() +{ + //----------------------------------- + //Get the molecular configuration + G4MolecularConfiguration* OH = + G4MoleculeTable::Instance()->GetConfiguration("OH"); + G4MolecularConfiguration* OHm = + G4MoleculeTable::Instance()->GetConfiguration("OHm"); + G4MolecularConfiguration* e_aq = + G4MoleculeTable::Instance()->GetConfiguration("e_aq"); + G4MolecularConfiguration* H2 = + G4MoleculeTable::Instance()->GetConfiguration("H2"); + G4MolecularConfiguration* H3O = + G4MoleculeTable::Instance()->GetConfiguration("H3Op"); + G4MolecularConfiguration* H = + G4MoleculeTable::Instance()->GetConfiguration("H"); + + //------------------------------------- + //Define the decay channels + G4MoleculeDefinition* water = G4H2O::Definition(); + G4MolecularDissociationChannel* decCh1; + G4MolecularDissociationChannel* decCh2; + G4MolecularDissociationChannel* decCh3; + G4MolecularDissociationChannel* decCh4; + G4MolecularDissociationChannel* decCh5; + + G4ElectronOccupancy* occ = new G4ElectronOccupancy( + *(water->GetGroundStateElectronOccupancy())); + + ////////////////////////////////////////////////////////// + // EXCITATIONS // + ////////////////////////////////////////////////////////// + G4DNAWaterExcitationStructure waterExcitation; + //-------------------------------------------------------- + //---------------Excitation on the fifth layer------------ + + decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relaxation"); + decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociativeDecay"); + //Decay 1 : OH + H + decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0)); + decCh1->SetProbability(0.35); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::NoDisplacement); + + decCh2->AddProduct(OH); + decCh2->AddProduct(H); + decCh2->SetProbability(0.65); + decCh2->SetDisplacementType( + G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay); + + occ->RemoveElectron(4, 1); // this is the transition form ground state to + occ->AddElectron(5, 1); // the first unoccupied orbital: A^1B_1 + + water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ); + water->AddDecayChannel("A^1B_1", decCh1); + water->AddDecayChannel("A^1B_1", decCh2); + + //-------------------------------------------------------- + //---------------Excitation on the fourth layer----------- + decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relaxation_Channel"); + decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociativeDecay"); + decCh3 = new G4MolecularDissociationChannel("B^1A_1_AutoIonisation_Channel"); + decCh4 = new G4MolecularDissociationChannel("A^1B_1_DissociativeDecay"); + decCh5 = new G4MolecularDissociationChannel("B^1A_1_DissociativeDecay2"); + + //Decay 1 : energy + decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1)); + decCh1->SetProbability(0.175); + + //Decay 2 : 2OH + H_2 + decCh2->AddProduct(H2); + decCh2->AddProduct(OH); + decCh2->AddProduct(OH); + decCh2->SetProbability(0.0325); + decCh2->SetDisplacementType( + G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay); + + //Decay 3 : OH + H_3Op + e_aq + decCh3->AddProduct(OH); + decCh3->AddProduct(H3O); + decCh3->AddProduct(e_aq); + decCh3->SetProbability(0.50); + decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); + + //Decay 4 : H + OH + decCh4->AddProduct(H); + decCh4->AddProduct(OH); + decCh4->SetProbability(0.2535); + decCh4->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay); + + //Decay 5 : 2H + O + decCh5->AddProduct(H); + decCh5->AddProduct(H); + decCh5->SetProbability(0.039); + decCh5->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay2); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(3); // this is the transition form ground state to + occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1 + + water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ); + water->AddDecayChannel("B^1A_1", decCh1); + water->AddDecayChannel("B^1A_1", decCh2); + water->AddDecayChannel("B^1A_1", decCh3); + water->AddDecayChannel("B^1A_1", decCh4); + water->AddDecayChannel("B^1A_1", decCh5); + + //------------------------------------------------------- + //-------------------Excitation of 3rd layer----------------- + decCh1 = new G4MolecularDissociationChannel( + "Excitation3rdLayer_AutoIonisation_Channel"); + decCh2 = new G4MolecularDissociationChannel( + "Excitation3rdLayer_Relaxation_Channel"); + + //Decay channel 1 : : OH + H_3Op + e_aq + decCh1->AddProduct(OH); + decCh1->AddProduct(H3O); + decCh1->AddProduct(e_aq); + + decCh1->SetProbability(0.5); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); + + //Decay channel 2 : energy + decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2)); + decCh2->SetProbability(0.5); + + //Electronic configuration of this decay + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(2, 1); + occ->AddElectron(5, 1); + + //Configure the water molecule + water->NewConfigurationWithElectronOccupancy("Excitation3rdLayer", *occ); + water->AddDecayChannel("Excitation3rdLayer", decCh1); + water->AddDecayChannel("Excitation3rdLayer", decCh2); + + //------------------------------------------------------- + //-------------------Excitation of 2nd layer----------------- + decCh1 = new G4MolecularDissociationChannel( + "Excitation2ndLayer_AutoIonisation_Channel"); + decCh2 = new G4MolecularDissociationChannel( + "Excitation2ndLayer_Relaxation_Channel"); + + //Decay Channel 1 : : OH + H_3Op + e_aq + decCh1->AddProduct(OH); + decCh1->AddProduct(H3O); + decCh1->AddProduct(e_aq); + + decCh1->SetProbability(0.5); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); + + //Decay channel 2 : energy + decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3)); + decCh2->SetProbability(0.5); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(1, 1); + occ->AddElectron(5, 1); + + water->NewConfigurationWithElectronOccupancy("Excitation2ndLayer", *occ); + water->AddDecayChannel("Excitation2ndLayer", decCh1); + water->AddDecayChannel("Excitation2ndLayer", decCh2); + + //------------------------------------------------------- + //-------------------Excitation of 1st layer----------------- + decCh1 = new G4MolecularDissociationChannel( + "Excitation1stLayer_AutoIonisation_Channel"); + decCh2 = new G4MolecularDissociationChannel( + "Excitation1stLayer_Relaxation_Channel"); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(0, 1); + occ->AddElectron(5, 1); + + //Decay Channel 1 : : OH + H_3Op + e_aq + decCh1->AddProduct(OH); + decCh1->AddProduct(H3O); + decCh1->AddProduct(e_aq); + decCh1->SetProbability(0.5); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); + + //Decay channel 2 : energy + decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4)); + decCh2->SetProbability(0.5); + + water->NewConfigurationWithElectronOccupancy("Excitation1stLayer", *occ); + water->AddDecayChannel("Excitation1stLayer", decCh1); + water->AddDecayChannel("Excitation1stLayer", decCh2); + + ///////////////////////////////////////////////////////// + // IONISATION // + ///////////////////////////////////////////////////////// + //-------------------------------------------------------- + //------------------- Ionisation ------------------------- + + decCh1 = new G4MolecularDissociationChannel("Ionisation_Channel"); + + //Decay Channel 1 : : OH + H_3Op + decCh1->AddProduct(H3O); + decCh1->AddProduct(OH); + decCh1->SetProbability(1); + decCh1->SetDisplacementType( + G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(4, 1); + // this is a ionized h2O with a hole in its last orbital + water->NewConfigurationWithElectronOccupancy("Ionisation5", *occ); + water->AddDecayChannel("Ionisation5", + decCh1); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(3, 1); + water->NewConfigurationWithElectronOccupancy("Ionisation4", *occ); + water->AddDecayChannel("Ionisation4", + new G4MolecularDissociationChannel(*decCh1)); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(2, 1); + water->NewConfigurationWithElectronOccupancy("Ionisation3", *occ); + water->AddDecayChannel("Ionisation3", + new G4MolecularDissociationChannel(*decCh1)); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(1, 1); + water->NewConfigurationWithElectronOccupancy("Ionisation2", *occ); + water->AddDecayChannel("Ionisation2", + new G4MolecularDissociationChannel(*decCh1)); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(0, 1); + water->NewConfigurationWithElectronOccupancy("Ionisation1", *occ); + water->AddDecayChannel("Ionisation1", + new G4MolecularDissociationChannel(*decCh1)); + + ////////////////////////////////////////////////////////// + // Dissociative Attachment // + ////////////////////////////////////////////////////////// + decCh1 = new G4MolecularDissociationChannel("DissociativeAttachment_ch1"); + + //Decay 1 : OHm + H + decCh1->AddProduct(H2); + decCh1->AddProduct(OHm); + decCh1->AddProduct(OH); + decCh1->SetProbability(1); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer:: + DissociativeAttachment); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->AddElectron(5,1); // H_2O^- + + water->NewConfigurationWithElectronOccupancy("DissociativeAttachment_ch1", *occ); + water->AddDecayChannel("DissociativeAttachment_ch1", decCh1); + + ////////////////////////////////////////////////////////// + // Electron-hole recombination // + ////////////////////////////////////////////////////////// + decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay1"); + decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay2"); + decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay3"); + decCh4 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay4"); + + //Decay 1 : 2OH + H_2 + decCh1->AddProduct(H2); + decCh1->AddProduct(OH); + decCh1->AddProduct(OH); + decCh1->SetProbability(0.1365); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer:: + B1A1_DissociationDecay); + + //Decay 2 : OH + H + decCh2->AddProduct(OH); + decCh2->AddProduct(H); + decCh2->SetProbability(0.3575); + decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer:: + A1B1_DissociationDecay); + + //Decay 3 : 2H + O(3p) + decCh3->AddProduct(H); + decCh3->AddProduct(H); + decCh3->SetProbability(0.156); + decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer:: + B1A1_DissociationDecay2); + + //Decay 4 : relaxation + decCh4->SetProbability(0.35); + + const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib"); + assert(pH2Ovib != nullptr); + + water->AddDecayChannel(pH2Ovib, decCh1); + water->AddDecayChannel(pH2Ovib, decCh2); + water->AddDecayChannel(pH2Ovib, decCh3); + water->AddDecayChannel(pH2Ovib, decCh4); + + delete occ; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4EmDNAChemistryForPlasmids::ConstructReactionTable(G4DNAMolecularReactionTable* + theReactionTable) +{ + //fReactionTable = theReactionTable; + + //----------------------------------- + //Get the molecular configuration + G4MolecularConfiguration* OH = + G4MoleculeTable::Instance()->GetConfiguration("OH"); + G4MolecularConfiguration* OHm = + G4MoleculeTable::Instance()->GetConfiguration("OHm"); + G4MolecularConfiguration* e_aq = + G4MoleculeTable::Instance()->GetConfiguration("e_aq"); + G4MolecularConfiguration* H2 = + G4MoleculeTable::Instance()->GetConfiguration("H2"); + G4MolecularConfiguration* H3Op = + G4MoleculeTable::Instance()->GetConfiguration("H3Op"); + G4MolecularConfiguration* H = + G4MoleculeTable::Instance()->GetConfiguration("H"); + G4MolecularConfiguration* H2O2 = + G4MoleculeTable::Instance()->GetConfiguration("H2O2"); + + //----------------------------------------------------------------// + // Type II // + //----------------------------------------------------------------// + // e_aq + *OH -> OH- prob: 0.49 + G4DNAMolecularReactionData* reactionData = + new G4DNAMolecularReactionData(2.95e10 * (1e-3 * m3 / (mole * s)), e_aq, OH); + reactionData->AddProduct(OHm); + reactionData->SetReactionType(1); + theReactionTable->SetReaction(reactionData); + //----------------------------------------------------------------// + // e_aq + H2O2 -> OH- + *OH prob: 0.11 + reactionData = + new G4DNAMolecularReactionData(1.10e10 * (1e-3 * m3 / (mole * s)), e_aq, H2O2); + reactionData->AddProduct(OHm); + reactionData->AddProduct(OH); + reactionData->SetReactionType(1); + theReactionTable->SetReaction(reactionData); + //----------------------------------------------------------------// + // *OH + *H -> H2O prob: 0.33 + reactionData = + new G4DNAMolecularReactionData(1.55e10 * (1e-3 * m3 / (mole * s)), OH, H); + reactionData->SetReactionType(1); + theReactionTable->SetReaction(reactionData); + //----------------------------------------------------------------// + // H + H2O2 -> OH prob: 0.00 + reactionData = + new G4DNAMolecularReactionData(0.009e10 * (1e-3 * m3 / (mole * s)), H, H2O2); + reactionData->AddProduct(OH); + reactionData->SetReactionType(1); + theReactionTable->SetReaction(reactionData); + //----------------------------------------------------------------// + // *OH + *OH -> H2O2 prob: 0.55 + reactionData = + new G4DNAMolecularReactionData(0.55e10 * (1e-3 * m3 / (mole * s)), OH, OH); + reactionData->AddProduct(H2O2); + reactionData->SetReactionType(1); + theReactionTable->SetReaction(reactionData); + //----------------------------------------------------------------// + + //----------------------------------------------------------------// + // Type III // + //----------------------------------------------------------------// + // e_aq + e_aq + 2H2O -> H2 + 2OH- + reactionData = + new G4DNAMolecularReactionData(0.636e10 * (1e-3 * m3 / (mole * s)), e_aq, e_aq); + reactionData->AddProduct(OHm); + reactionData->AddProduct(OHm); + reactionData->AddProduct(H2); + reactionData->SetReactionType(0); + theReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // H3O+ + OH- -> 2H2O + reactionData = + new G4DNAMolecularReactionData(11.3e10 * (1e-3 * m3 / (mole * s)), H3Op, OHm); + reactionData->SetReactionType(0); + theReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + + //----------------------------------------------------------------// + // Type IV // + //----------------------------------------------------------------// + // e_aq + H3O+ -> H* + H2O prob: 0.04 + reactionData = + new G4DNAMolecularReactionData(2.11e10 * (1e-3 * m3 / (mole * s)), e_aq, H3Op); + reactionData->AddProduct(H); + reactionData->SetReactionType(1); + theReactionTable->SetReaction(reactionData); + //----------------------------------------------------------------// + + //----------------------------------------------------------------// + // Type V // + // First order reaction // + //----------------------------------------------------------------// + // e_aq + *H -> OH- + H2 + reactionData = + new G4DNAMolecularReactionData(2.5e10 * (1e-3 * m3 / (mole * s)), e_aq, H3Op); + reactionData->AddProduct(OHm); + reactionData->AddProduct(H2); + reactionData->SetReactionType(0); + theReactionTable->SetReaction(reactionData); + //----------------------------------------------------------------// + // *H + *H -> H2 + reactionData = + new G4DNAMolecularReactionData(0.503e10 * (1e-3 * m3 / (mole * s)), H, H); + reactionData->AddProduct(H2); + reactionData->SetReactionType(0); + theReactionTable->SetReaction(reactionData); + + if (fDMSO > 0) + DeclareDMSOAndDNAReactions(theReactionTable); + + if (fOxygen > 0) + DeclareOxygenReactions(theReactionTable); + +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4EmDNAChemistryForPlasmids::ConstructProcess() +{ + G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); + + //=============================================================== + // Extend vibrational to low energy + // Anyway, solvation of electrons is taken into account from 7.4 eV + // So below this threshold, for now, no accurate modeling is done + // + G4VProcess* process = + G4ProcessTable::GetProcessTable()-> + FindProcess("e-_G4DNAVibExcitation", "e-"); + + if (process) + { + G4DNAVibExcitation* vibExcitation = (G4DNAVibExcitation*) process; + G4VEmModel* model = vibExcitation->EmModel(); + G4DNASancheExcitationModel* sancheExcitationMod = + dynamic_cast(model); + if(sancheExcitationMod) + { + sancheExcitationMod->ExtendLowEnergyLimit(0.025 * eV); + } + } + + //=============================================================== + // *** Electron Solvatation *** + // + process = + G4ProcessTable::GetProcessTable()-> + FindProcess("e-_G4DNAElectronSolvation", "e-"); + + if (process == 0) + { + ph->RegisterProcess( + new G4DNAElectronSolvation("e-_G4DNAElectronSolvation"), + G4Electron::Definition()); + } + + //=============================================================== + // Define processes for molecules + // + G4MoleculeTable* theMoleculeTable = G4MoleculeTable::Instance(); + G4MoleculeDefinitionIterator iterator = + theMoleculeTable->GetDefintionIterator(); + iterator.reset(); + while (iterator()) + { + G4MoleculeDefinition* moleculeDef = iterator.value(); + + if (moleculeDef != G4H2O::Definition()) + { + // G4cout << "Brownian motion added for: "<< moleculeDef->GetName() << G4endl; +// G4DNABrownianTransportation* brown = new G4DNABrownianTransportation(); +// ph->RegisterProcess(brown, moleculeDef); + } + else + { + moleculeDef->GetProcessManager() + ->AddRestProcess(new G4DNAElectronHoleRecombination(), 2); + G4DNAMolecularDissociation* dissociationProcess = + new G4DNAMolecularDissociation("H2O_DNAMolecularDecay"); + dissociationProcess->SetDisplacer( + moleculeDef, new G4DNAWaterDissociationDisplacer); + dissociationProcess->SetVerboseLevel(3); + + moleculeDef->GetProcessManager() + ->AddRestProcess(dissociationProcess, 1); + } + /* + * Warning : end of particles and processes are needed by + * EM Physics builders + */ + } + + G4DNAChemistryManager::Instance()->Initialize(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4EmDNAChemistryForPlasmids::ConstructTimeStepModel(G4DNAMolecularReactionTable* + /*reactionTable*/) +{ + RegisterTimeStepModel(new G4DNAMolecularIRTModel(), 0); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4EmDNAChemistryForPlasmids::DeclareDMSOAndDNAReactions(G4DNAMolecularReactionTable* + theReactionTable) +{ + G4MolecularConfiguration* DMSO = + G4MoleculeTable::Instance()->GetConfiguration("DMSO"); + + G4MolecularConfiguration* OH = + G4MoleculeTable::Instance()->GetConfiguration("OH"); + + G4MolecularConfiguration* H = + G4MoleculeTable::Instance()->GetConfiguration("H"); + + G4MolecularConfiguration* e_aq = + G4MoleculeTable::Instance()->GetConfiguration("e_aq"); + + G4MolecularConfiguration* deoxyribose = + G4MoleculeTable::Instance()->GetConfiguration("Deoxyribose"); + + G4MolecularConfiguration* damage_deoxyribose_OH = + G4MoleculeTable::Instance()->GetConfiguration("Damaged_DeoxyriboseOH"); + + G4MolecularConfiguration* damage_deoxyribose_H = + G4MoleculeTable::Instance()->GetConfiguration("Damaged_DeoxyriboseH"); + + G4MolecularConfiguration* damage_deoxyribose_eaq = + G4MoleculeTable::Instance()->GetConfiguration("Damaged_DeoxyriboseEAQ"); + + G4double DNA_OH_Rate = 1.32E7 * std::pow(fDMSO * 7.1E9, 0.29); + + // DMSO Reactions + // OH + DMSO + G4DNAMolecularReactionData* reactionData = + new G4DNAMolecularReactionData(fDMSO * 7.1E9 / s, OH,DMSO); + theReactionTable->SetReaction(reactionData); + //----------------------------------------------------------------// + // H + DMSO + reactionData = new G4DNAMolecularReactionData(fDMSO * 2.7E7 / s, H,DMSO); + theReactionTable->SetReaction(reactionData); + //----------------------------------------------------------------// + // e-_aq + DMSO + reactionData = new G4DNAMolecularReactionData(fDMSO * 3.8E6 / s, e_aq,DMSO); + theReactionTable->SetReaction(reactionData); + //----------------------------------------------------------------// + + //----------------------------------------------------------------// + // DNA Type // + //----------------------------------------------------------------// + // DNA + OH -> Damage + reactionData = + new G4DNAMolecularReactionData(DNA_OH_Rate*(1e-3*m3/(mole*s)), deoxyribose, OH); + reactionData->AddProduct(damage_deoxyribose_OH); + theReactionTable->SetReaction(reactionData); + //----------------------------------------------------------------// + // DNA + H + reactionData = + new G4DNAMolecularReactionData(0.03e9*(1e-3*m3/(mole*s)), deoxyribose, H); + reactionData->AddProduct(damage_deoxyribose_H); + theReactionTable->SetReaction(reactionData); + //----------------------------------------------------------------// + // DNA + e-_aq + reactionData = + new G4DNAMolecularReactionData(0.01e9*(1e-3*m3/(mole*s)), deoxyribose, e_aq); + reactionData->AddProduct(damage_deoxyribose_eaq); + theReactionTable->SetReaction(reactionData); + //----------------------------------------------------------------// +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4EmDNAChemistryForPlasmids::DeclareOxygenReactions(G4DNAMolecularReactionTable* + theReactionTable) +{ + G4MolecularConfiguration* Oxygen = + G4MoleculeTable::Instance()->GetConfiguration("Oxygen"); + + G4MolecularConfiguration* H = + G4MoleculeTable::Instance()->GetConfiguration("H"); + + G4MolecularConfiguration* e_aq = + G4MoleculeTable::Instance()->GetConfiguration("e_aq"); + + G4MolecularConfiguration* O2m = + G4MoleculeTable::Instance()->GetConfiguration("O2m"); + + G4MolecularConfiguration* HO2 = + G4MoleculeTable::Instance()->GetConfiguration("HO2"); + + G4MolecularConfiguration* O2 = + G4MoleculeTable::Instance()->GetConfiguration("O2"); + + G4MolecularConfiguration* OH = + G4MoleculeTable::Instance()->GetConfiguration("OH"); + + // Oxygen Reactions + // e_aq + O2B + G4DNAMolecularReactionData* reactionData = + new G4DNAMolecularReactionData((fOxygen * 1.9E10) / s, e_aq, Oxygen); + reactionData->AddProduct(O2m); + theReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // H + O2B + reactionData = new G4DNAMolecularReactionData((fOxygen * 2.1E10) / s, H, Oxygen); + reactionData->AddProduct(HO2); + theReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // e_aq + O2 + reactionData = + new G4DNAMolecularReactionData(1.9E10 * (1e-3 * m3 / (mole * s)), e_aq, O2); + reactionData->AddProduct(O2m); + reactionData->SetReactionType(1); + theReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // H + O2 + reactionData = + new G4DNAMolecularReactionData(2.1E10 * (1e-3 * m3 / (mole * s)), H, O2); + reactionData->AddProduct(HO2); + reactionData->SetReactionType(1); + theReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ + // OH + HO2 + reactionData = + new G4DNAMolecularReactionData(7.9E9 * (1e-3 * m3 / (mole * s)), OH, HO2); + reactionData->AddProduct(O2); + reactionData->SetReactionType(1); + theReactionTable->SetReaction(reactionData); + //------------------------------------------------------------------ +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/dnadamage2/src/MoleculeInserter.cc b/examples/extended/medical/dna/dnadamage2/src/MoleculeInserter.cc new file mode 100644 index 00000000000..7626a0db749 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/src/MoleculeInserter.cc @@ -0,0 +1,159 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// MoleculeInserter.cc +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +/// \file MoleculeInserter.cc +/// \brief Implementation of the DNA chemical species inserter for IRT + +#include "MoleculeInserter.hh" +#include "G4MoleculeTable.hh" +#include "G4Molecule.hh" +#include "G4PhysicalVolumeStore.hh" +#include "G4VPhysicalVolume.hh" +#include +#include "Randomize.hh" +#include "G4MolecularConfiguration.hh" +#include "G4Track.hh" +#include "G4Molecule.hh" +#include "G4ITTrackHolder.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +MoleculeInserter::MoleculeInserter():fSaveTrackID(false) +{} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +MoleculeInserter::MoleculeInserter(G4bool save):fSaveTrackID(save) +{} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void MoleculeShoot::Shoot(MoleculeInserter* gun) +{ + for(int i = 0; i < fNumber; ++i) { + G4MolecularConfiguration* conf = + G4MoleculeTable::Instance()->GetConfiguration(fMoleculeName); + + if (conf == 0) { + G4String msg = "Chemistry Error: Molecule " + fMoleculeName + " don't exists."; + G4Exception("MoleculeInserter::Shoot()", "Invalid_Value", FatalException, msg); + } + + G4Molecule* molecule = new G4Molecule(conf); + gun->PushToChemistry(molecule, fTime, fPosition); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void MoleculeInserter::CreateMolecule(G4Molecule* molecule, + G4double time, G4ThreeVector pos) +{ + G4Track* MolTrack = molecule->BuildTrack(time, pos); + PushTrack(MolTrack); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void MoleculeInserter::CreateMolecule(G4String molecule, + G4double time, G4ThreeVector pos) +{ + G4MolecularConfiguration* conf = + G4MoleculeTable::Instance()->GetConfiguration(molecule); + + if (conf == 0) { + G4String msg = "Chemistry Error: Molecule " + molecule + " don't exists."; + G4Exception("MoleculeInserter::CreateMolecule()", + "Invalid_Value", FatalException, msg); + } + + G4Molecule* gmolecule = new G4Molecule(conf); + G4Track* MolTrack = gmolecule->BuildTrack(time, pos); + PushTrack(MolTrack); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void MoleculeInserter::PushToChemistry(G4Molecule* mol, + G4double time, G4ThreeVector position) +{ + G4Track* MolTrack = mol->BuildTrack(time, position); + PushTrack(MolTrack); + + if (fSaveTrackID) { + fInsertedTracks.push_back(MolTrack); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void MoleculeInserter::DefineTracks() +{ + if (fInsertedTracks.size() != 0) {fInsertedTracks.clear();} + + for (size_t i = 0; i < fShoots.size(); i++) { + fShoots[i].Shoot(this); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void MoleculeInserter::AddMolecule(const G4String& name, + const G4ThreeVector& position, double time) +{ + MoleculeShoot shoot; + shoot.fMoleculeName = name; + shoot.fPosition = position; + shoot.fTime = time; + fShoots.push_back(shoot); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +MoleculeShoot::MoleculeShoot() +{ + fMoleculeName = ""; + fTime = 0; + fNumber = 1; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void MoleculeInserter::Clean() +{ + if (fShoots.size() != 0) + fShoots.clear(); + + if (fInsertedTracks.size() != 0) + fInsertedTracks.clear(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/dnadamage2/src/PhysGeoImport.cc b/examples/extended/medical/dna/dnadamage2/src/PhysGeoImport.cc new file mode 100644 index 00000000000..013c30054bf --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/src/PhysGeoImport.cc @@ -0,0 +1,382 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Authors: J. Naoki D. Kondo (UCSF, US) : 10/10/2021 +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +/// \file PhysGeoImport.cc +/// \brief Implementation of the plasmid load methods for the geometry + +#include "PhysGeoImport.hh" +#include "G4DNAChemistryManager.hh" +#include "G4VPhysicalVolume.hh" +#include "G4Ellipsoid.hh" +#include "Randomize.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +PhysGeoImport::PhysGeoImport() +{} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +G4LogicalVolume* PhysGeoImport::CreateLogicVolumeXYZ(G4String fileName) { + G4NistManager * man = G4NistManager::Instance(); + fEnvelopeWater = man->FindOrBuildMaterial("G4_WATER"); + fpWater = man->BuildMaterialWithNewDensity("G4_WATER_MODIFIED", + "G4_WATER",1.0*g/cm/cm/cm); + + ReadFile(fileName); + + G4double des1 = 1.1344640137963142; + G4double des2 = des1 + (CLHEP::pi*.5); + G4double ang = 0.6283185307179586; + G4double bet1 = 0.6283185307179586 * 2; + G4double posi = 1.0471975511965976; + G4double sep = .1*angstrom; + //Geometries Sizes + G4double PxRs = 2.9389169420478556 * angstrom; + G4double PyRs = 2.9389169420478556 * angstrom; + G4double PzRs = 2.9389169420478556 * angstrom; + G4double PxYs = 2.7 * angstrom; + G4double PyYs = 2.7 * angstrom; + G4double PzYs = 2.7 * angstrom; + G4double PxBp = 2.45 * angstrom; + G4double PyBp = 2.45 * angstrom; + G4double PzBp = 2.45 * angstrom; + + + G4double xin = -170 * angstrom; + G4double yin = -170 * angstrom; + G4double zin = -170 * angstrom; + G4double xfn = 170 * angstrom; + G4double yfn = 170 * angstrom; + G4double zfn = 170 * angstrom; + + G4int nVertex = fVertexes.size(); + + // Envelope + + std::string boxNameSolid = fGeoName + "_solid"; + G4Box* box_solid = new G4Box(boxNameSolid, 0.5*(fXMax-fXMin)+0.5*3.4*nm, + 0.5*(fYMax-fYMin)+0.5*3.4*nm, + 0.5*(fZMax-fZMin)+0.5*3.4*nm); + + G4String boxNameLogic = fGeoName + "_logic"; + G4LogicalVolume* box_logic = new G4LogicalVolume(box_solid, + fEnvelopeWater, + boxNameLogic, 0,0,0); + + //Desoxyribose + + G4Ellipsoid *RSolidSugar = new G4Ellipsoid("sdeoxyribose", + PxRs, + PyRs, + PzRs, -PzRs, .445*PzRs); + G4LogicalVolume* RSugar = new G4LogicalVolume(RSolidSugar, + fpWater, + "ldeoxyribose", + 0,0,0); + G4VisAttributes* MyVisAtt_Rs = new G4VisAttributes(G4Colour(G4Colour::Red())); + MyVisAtt_Rs->SetForceSolid(true); + RSugar->SetVisAttributes(MyVisAtt_Rs); + + //Phosphoric Acid + + G4Ellipsoid *YSolidSugar = new G4Ellipsoid("sphosphate", + PxYs, + PyYs, + PzYs, + -PzYs, + .9 * angstrom); + + G4LogicalVolume* YSugar = new G4LogicalVolume(YSolidSugar, + fpWater, + "lphosphate", + 0,0,0); + G4VisAttributes* MyVisAtt_Ys = new G4VisAttributes(G4Colour(G4Colour::Yellow())); + MyVisAtt_Ys->SetForceSolid(true); + YSugar->SetVisAttributes(MyVisAtt_Ys); + + //Base Pairs + + G4Ellipsoid* Base1a = new G4Ellipsoid("BasePair1a", + PxBp, + PyBp, + PzBp, + -PzBp, + 1.15 * angstrom); + G4LogicalVolume* BaseP1a = new G4LogicalVolume(Base1a, fpWater, "BasePair1a", 0,0,0); + G4VisAttributes* MyVisAtt_Bp1a = new G4VisAttributes(G4Colour(G4Colour::Green())); + MyVisAtt_Bp1a->SetForceSolid(true); + BaseP1a->SetVisAttributes(MyVisAtt_Bp1a); + + G4Ellipsoid* Base1b= new G4Ellipsoid("BasePair1b", + PxBp, + PyBp, + PzBp, + 1.15 * angstrom, + PzBp); + G4LogicalVolume* BaseP1b = new G4LogicalVolume(Base1b, fpWater, "BasePair1b", 0,0,0); + + G4VisAttributes* MyVisAtt_Bp1b = new G4VisAttributes(G4Colour(G4Colour::Green())); + MyVisAtt_Bp1b->SetForceSolid(true); + BaseP1b->SetVisAttributes(MyVisAtt_Bp1b); + + G4int index = 0; + G4double cAngle = 0; + G4double pi = CLHEP::pi; + for (int vertex = 0; vertex < nVertex - 1; vertex++ ) { + xin = fVertexes[vertex][0]-fOffsetX; + yin = fVertexes[vertex][1]-fOffsetY; + zin = fVertexes[vertex][2]-fOffsetZ; + xfn = fVertexes[vertex+1][0]-fOffsetX; + yfn = fVertexes[vertex+1][1]-fOffsetY; + zfn = fVertexes[vertex+1][2]-fOffsetZ; + + G4double phi0 = std::atan2(zfn-zin,std::sqrt(((xfn-xin)*(xfn-xin))+ + ((yfn-yin)*(yfn-yin)))); + G4double theta0 = std::atan2(xfn-xin,yfn-yin); + G4double lenght = std::sqrt(((xfn-xin)*(xfn-xin))+ + ((yfn-yin)*(yfn-yin))+ + ((zfn-zin)*(zfn-zin))); + G4double dl = 1.0 / (lenght / (3.4*angstrom)); + G4int nChain = (fVertexes[vertex] - fVertexes[vertex+1]).mag() / (0.34 * nm); + + for (G4int nseg = 0; nseg < nChain ; nseg++) { + cAngle += ang; + + G4double theta = cAngle; + G4double x1 = 0; + G4double y1 = 0; + G4double z1 = ((2*PzBp) + PzRs + sep); + + G4double x2 = 0; + G4double y2 = 0; + G4double z2 = ((2*PzBp) + PzRs + sep); + + G4ThreeVector plus2 = G4ThreeVector(0,0,(.5 * PzRs) + PzYs); + plus2.rotateX(-des1); + plus2.rotateZ(-posi); + + G4ThreeVector plus2alt = G4ThreeVector(0,0,(.5 * PzRs) + PzYs); + plus2alt.rotateX(-des1); + plus2alt.rotateZ(posi); + + G4double x3 = 0; + G4double y3 = 0; + G4double z3 = PzBp + sep; + + G4ThreeVector position1i = G4ThreeVector(x1,y1,z1); + G4ThreeVector position2i = G4ThreeVector(x2,y2,z2)+plus2; + G4ThreeVector position2ialt = G4ThreeVector(x2,y2,-z2)-plus2alt; + G4ThreeVector position3i = G4ThreeVector(x3,y3,z3); + + position1i.rotateY(theta); + position2i.rotateY(theta); + position2ialt.rotateY(theta); + position3i.rotateY(theta); + + G4double x = dl*nseg*(xfn-xin)+xin; + G4double y = dl*nseg*(yfn-yin)+yin; + G4double z = dl*nseg*(zfn-zin)+zin; + + position1i.rotateX(phi0); + position2i.rotateX(phi0); + position2ialt.rotateX(phi0); + position3i.rotateX(phi0); + + position1i.rotateZ(-theta0); + position2i.rotateZ(-theta0); + position2ialt.rotateZ(-theta0); + position3i.rotateZ(-theta0); + + G4double yrot1 = theta; + G4double xrot1 = -des1; + G4RotationMatrix rotm1 = G4RotationMatrix(); + rotm1.rotateX(xrot1); + rotm1.rotateZ(-posi); + rotm1.rotateY(yrot1); + rotm1.rotateX(phi0); + rotm1.rotateZ(-theta0); + G4ThreeVector position1 = position1i + G4ThreeVector(x,y,z); + G4Transform3D transform1(rotm1, position1); + + G4double yrot1alt = theta + pi; + G4double xrot1alt = des1; + G4RotationMatrix rotm1alt = G4RotationMatrix(); + rotm1alt.rotateX(xrot1alt); + rotm1alt.rotateZ(-posi); + rotm1alt.rotateY(yrot1alt); + rotm1alt.rotateX(phi0); + rotm1alt.rotateZ(-theta0); + G4ThreeVector position1alt = -position1i + G4ThreeVector(x,y,z); + G4Transform3D transform1alt(rotm1alt,position1alt); + + G4double yrot2 = theta; + G4double xrot2 = -des2; + G4RotationMatrix rotm2 = G4RotationMatrix(); + rotm2.rotateX(xrot2); + rotm2.rotateY(yrot2 - bet1 + 0.8726646259971648); + rotm2.rotateX(phi0); + rotm2.rotateZ(-theta0); + G4ThreeVector position2 = position2i + G4ThreeVector(x,y,z); + G4Transform3D transform2(rotm2,position2); + + G4double yrot2alt = theta + pi; + G4double xrot2alt = des2; + G4RotationMatrix rotm2alt = G4RotationMatrix(); + rotm2alt.rotateX(xrot2alt); + rotm2alt.rotateY(yrot2alt + bet1 - 0.8726646259971648); + rotm2alt.rotateX(phi0); + rotm2alt.rotateZ(-theta0); + G4ThreeVector position2alt = position2ialt + G4ThreeVector(x,y,z); + G4Transform3D transform2alt(rotm2alt,position2alt); + + G4double yrot3 = theta; + G4RotationMatrix rotm3 = G4RotationMatrix(); + rotm3.rotateX(-pi/2); + rotm3.rotateZ(-ang); + rotm3.rotateY(yrot3); + rotm3.rotateX(phi0); + rotm3.rotateZ(-theta0); + G4ThreeVector position3 = position3i + G4ThreeVector(x,y,z); + G4Transform3D transform3(rotm3,position3); + + G4double yrot3alt = theta + pi; + G4RotationMatrix rotm3alt = G4RotationMatrix(); + rotm3alt.rotateX(pi/2); + rotm3alt.rotateZ(-ang); + rotm3alt.rotateY(yrot3alt); + rotm3alt.rotateX(phi0); + rotm3alt.rotateZ(-theta0); + G4ThreeVector position3alt = -position3i + G4ThreeVector(x,y,z); + G4Transform3D transform3alt(rotm3alt,position3alt); + + + new G4PVPlacement(transform1, + RSugar, + "deoxyribose1", + box_logic, + false, + index, + false); + + new G4PVPlacement(transform1alt, + RSugar, + "deoxyribose2", + box_logic, + false, + index, + false); + + new G4PVPlacement(transform3, + BaseP1a, + "BasePair1", + box_logic, + false, + index, + false); + + new G4PVPlacement(transform3alt, + BaseP1a, + "BasePair2", + box_logic, + false, + index, + false); + + new G4PVPlacement(transform2, + YSugar, + "phosphate1", + box_logic, + false, + index, + false); + + new G4PVPlacement(transform2alt, + YSugar, + "phosphate2", + box_logic, + false, + index, + false); + + G4ThreeVector Deoxy1 = position1; + G4ThreeVector Deoxy2 = position1alt; + + fSampleDNAPositions.push_back(Deoxy1); + fSampleDNAPositions.push_back(Deoxy2); + fSampleDNANames.push_back("Deoxyribose"); + fSampleDNANames.push_back("Deoxyribose"); + fSampleDNADetails.push_back({-1,index,1}); + fSampleDNADetails.push_back({-1,index,2}); + + index++; + + } + } + + return box_logic; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void PhysGeoImport::ReadFile(G4String fileName) { + G4double x, y, z; + fXMin = 1*mm, fYMin = 1*mm, fZMin = 1*mm; + fXMax =-1*mm, fYMax =-1*mm, fZMax =-1*mm; + std::ifstream plasmidFile(fileName); + while(true) { + plasmidFile >> x >> y >> z; + if ( !plasmidFile.good() ) break; + x *= nm; + y *= nm; + z *= nm; + fVertexes.push_back(G4ThreeVector(x, y, z)); + if ( fXMin > x ) fXMin = x; + if ( fXMax < x ) fXMax = x; + if ( fYMin > y ) fYMin = y; + if ( fYMax < y ) fYMax = y; + if ( fZMin > z ) fZMin = z; + if ( fZMax < z ) fZMax = z; + } + plasmidFile.close(); + fOffsetX = (fXMin + fXMax)*0.5; + fOffsetY = (fYMin + fYMax)*0.5; + fOffsetZ = (fZMin + fZMax)*0.5; + + std::vector VertRed; + for(size_t i = 0; i < fVertexes.size(); i++) { + if (i % 15 == 0) + VertRed.push_back(fVertexes[i]); + } + + VertRed.push_back(fVertexes[0]); + + fVertexes = VertRed; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/dnadamage2/src/PhysicsList.cc b/examples/extended/medical/dna/dnadamage2/src/PhysicsList.cc new file mode 100644 index 00000000000..5a4295678b1 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/src/PhysicsList.cc @@ -0,0 +1,266 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// dnadamage3 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +/// \file PhysicsList.cc +/// \brief Implementation of the PhysicsList class + +#include +#include "PhysicsList.hh" +#include "G4SystemOfUnits.hh" +#include "G4EmDNAChemistry.hh" +#include "G4EmDNAChemistry_option1.hh" +#include "G4EmDNAChemistry_option2.hh" +#include "G4EmDNAChemistry_option3.hh" +#include "G4EmDNAChemistryForPlasmids.hh" +#include "G4EmDNAPhysics.hh" +#include "G4EmDNAPhysics_option1.hh" +#include "G4EmDNAPhysics_option2.hh" +#include "G4EmDNAPhysics_option3.hh" +#include "G4EmDNAPhysics_option4.hh" +#include "G4EmDNAPhysics_option5.hh" +#include "G4EmDNAPhysics_option6.hh" +#include "G4EmDNAPhysics_option7.hh" +#include "G4EmDNAPhysics_option8.hh" +#include "G4PhysicsConstructorRegistry.hh" +#include "G4EmParameters.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PhysicsList::PhysicsList() + : G4VModularPhysicsList() +{ + G4double currentDefaultCut = 1.*nanometer; + // fixe lower limit for cut + G4ProductionCutsTable::GetProductionCutsTable()-> + SetEnergyRange(100*eV, 1*GeV); + SetDefaultCutValue(currentDefaultCut); + SetVerboseLevel(1); + + RegisterPhysicsConstructor("G4EmDNAPhysics_option2"); + RegisterChemistryConstructor("G4EmDNAChemistryForPlasmids"); + + fpPhysicsUI = new G4UIcmdWithAString("/physics/SetPhysics", this); + fpPhysicsUI->AvailableForStates(G4State_PreInit); + + fpChemistryUI = new G4UIcmdWithAString("/physics/SetChemistry", this); + fpChemistryUI->AvailableForStates(G4State_PreInit); + + fpDMSOUI = new G4UIcmdWithADouble("/chem/scavenger/DMSO",this); + fpDMSOUI->AvailableForStates(G4State_PreInit); + + fpOxygenUI = new G4UIcmdWithADouble("/chem/scavenger/Oxygen",this); + fpOxygenUI->AvailableForStates(G4State_PreInit); + +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PhysicsList::ConstructParticle() +{ + if(fEmDNAPhysicsList != nullptr) + { + fEmDNAPhysicsList->ConstructParticle(); + } + if(fEmDNAChemistryList != nullptr) + { + fEmDNAChemistryList->ConstructParticle(); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PhysicsList::ConstructProcess() +{ + AddTransportation(); + if(fEmDNAPhysicsList != nullptr) + { + fEmDNAPhysicsList->ConstructProcess(); + } + if(fEmDNAChemistryList != nullptr) + { + fEmDNAChemistryList->ConstructProcess(); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PhysicsList::RegisterPhysicsConstructor(const G4String& name) +{ + if(name == fPhysDNAName) { return; } + if(verboseLevel > 0) + { + G4cout << "===== Register Physics constructor ==== " << name << G4endl; + } + if(name == "G4EmDNAPhysics") + { + delete fEmDNAPhysicsList; + fEmDNAPhysicsList = new G4EmDNAPhysics(verboseLevel); + fPhysDNAName = name; + } + else if(name == "G4EmDNAPhysics_option1") + { + delete fEmDNAPhysicsList; + fEmDNAPhysicsList = new G4EmDNAPhysics_option1(verboseLevel); + fPhysDNAName = name; + } + else if(name == "G4EmDNAPhysics_option2") + { + delete fEmDNAPhysicsList; + fEmDNAPhysicsList = new G4EmDNAPhysics_option2(verboseLevel); + fPhysDNAName = name; + } + else if(name == "G4EmDNAPhysics_option3") + { + delete fEmDNAPhysicsList; + fEmDNAPhysicsList = new G4EmDNAPhysics_option3(verboseLevel); + fPhysDNAName = name; + } + else if(name == "G4EmDNAPhysics_option4") + { + delete fEmDNAPhysicsList; + fEmDNAPhysicsList = new G4EmDNAPhysics_option4(verboseLevel); + fPhysDNAName = name; + } + else if(name == "G4EmDNAPhysics_option5") + { + delete fEmDNAPhysicsList; + fEmDNAPhysicsList = new G4EmDNAPhysics_option5(verboseLevel); + fPhysDNAName = name; + } + else if(name == "G4EmDNAPhysics_option6") + { + delete fEmDNAPhysicsList; + fEmDNAPhysicsList = new G4EmDNAPhysics_option6(verboseLevel); + fPhysDNAName = name; + } + else if(name == "G4EmDNAPhysics_option7") + { + delete fEmDNAPhysicsList; + fEmDNAPhysicsList = new G4EmDNAPhysics_option7(verboseLevel); + fPhysDNAName = name; + } + else if(name == "G4EmDNAPhysics_option8") + { + delete fEmDNAPhysicsList; + fEmDNAPhysicsList = new G4EmDNAPhysics_option8(verboseLevel); + fPhysDNAName = name; + } + else + { + G4cout << "PhysicsList::RegisterPhysicsConstructor: <" << name << ">" + << " fails - name is not defined" + << G4endl; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PhysicsList::RegisterChemistryConstructor(const G4String& name) +{ + if(verboseLevel > 0) + { + G4cout << "===== Register Chemistry constructor ==== " << name << G4endl; + } + if(name == "G4EmDNAChemistry") + { + delete fEmDNAChemistryList; + fEmDNAChemistryList = new G4EmDNAChemistry(); + fEmDNAChemistryList->SetVerboseLevel(verboseLevel); + fChemDNAName = name; + } + else if(name == "G4EmDNAChemistry_option1") + { + delete fEmDNAChemistryList; + fEmDNAChemistryList = new G4EmDNAChemistry_option1(); + fEmDNAChemistryList->SetVerboseLevel(verboseLevel); + fChemDNAName = name; + } + else if(name == "G4EmDNAChemistry_option2") + { + delete fEmDNAChemistryList; + fEmDNAChemistryList = new G4EmDNAChemistry_option2(); + fEmDNAChemistryList->SetVerboseLevel(verboseLevel); + fChemDNAName = name; + } + else if(name == "G4EmDNAChemistry_option3") + { + delete fEmDNAChemistryList; + fEmDNAChemistryList = new G4EmDNAChemistry_option3(); + fEmDNAChemistryList->SetVerboseLevel(verboseLevel); + fChemDNAName = name; + } + else if(name == "G4EmDNAChemistryForPlasmids") + { + delete fEmDNAChemistryList; + fEmDNAChemistryList = new G4EmDNAChemistryForPlasmids(fDMSO,fOxygen); + fEmDNAChemistryList->SetVerboseLevel(verboseLevel); + fChemDNAName = name; + } + else + { + G4cout << "PhysicsList::RegisterChemistryConstructor: <" << name << ">" + << " fails - name is not defined" + << G4endl; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PhysicsList::SetNewValue(G4UIcommand * command, G4String newValue) +{ + if (command == fpPhysicsUI) { + RegisterPhysicsConstructor(newValue); + } + + if (command == fpChemistryUI) { + RegisterChemistryConstructor(newValue); + } + + if (command == fpDMSOUI) { + fDMSO = fpDMSOUI->GetNewDoubleValue(newValue); + } + + else if (command == fpOxygenUI) { + fOxygen = fpOxygenUI->GetNewDoubleValue(newValue); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/dnadamage2/src/PlasmidMolecules.cc b/examples/extended/medical/dna/dnadamage2/src/PlasmidMolecules.cc new file mode 100644 index 00000000000..27cfa3ee280 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/src/PlasmidMolecules.cc @@ -0,0 +1,146 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +// +/// \file PlasmidMolecules.cc +/// \brief Implementation of the additional Plasmid DNA molecules + +#include "PlasmidMolecules.hh" +#include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" +#include "G4ParticleTable.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... +// Deoxyribose + +G4DNA_Deoxyribose* G4DNA_Deoxyribose::fDeoxyriboseInstance = 0; +G4DNA_Deoxyribose* G4DNA_Deoxyribose::Definition() +{ + + if (fDeoxyriboseInstance != 0) return fDeoxyriboseInstance; + const G4String name = "DNA_Deoxyribose"; + + G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); + G4ParticleDefinition* anInstance = pTable->FindParticle(name); + if (anInstance == 0) { + const G4String formatedName = "DNA_Deoxy^{0}"; + + G4double mass = 31.99546 * g / Avogadro * c_squared; + anInstance = new G4MoleculeDefinition(name, mass, 1e-150 * (m * m / s), 0, 0, + 1.7 * angstrom, 2); + + ((G4MoleculeDefinition*) anInstance)->SetLevelOccupation(0); + ((G4MoleculeDefinition*) anInstance)->SetFormatedName(formatedName); + } + fDeoxyriboseInstance = static_cast(anInstance); + return fDeoxyriboseInstance; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... +// OH_Damamged_Deoxyribose + +G4DNA_DamagedDeoxyriboseOH* + G4DNA_DamagedDeoxyriboseOH::fDamagedDeoxyriboseOHInstance = 0; +G4DNA_DamagedDeoxyriboseOH* G4DNA_DamagedDeoxyriboseOH::Definition() +{ + if (fDamagedDeoxyriboseOHInstance != 0) return fDamagedDeoxyriboseOHInstance; + const G4String name = "DNA_DamagedDeoxyriboseOH"; + + G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); + G4ParticleDefinition* anInstance = pTable->FindParticle(name); + if (anInstance == 0) { + const G4String formatedName = "DamagedDeoxyriboseOH^{0}"; + + G4double mass = 31.99546 * g / Avogadro * c_squared; + anInstance = new G4MoleculeDefinition(name, mass, 1e-150 * (m * m / s), 0, 0, + 1.7 * angstrom, 2); + + ((G4MoleculeDefinition*) anInstance)->SetLevelOccupation(0); + ((G4MoleculeDefinition*) anInstance)->SetFormatedName(formatedName); + } + fDamagedDeoxyriboseOHInstance = + static_cast(anInstance); + return fDamagedDeoxyriboseOHInstance; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... +// H_Damamged_Deoxyribose + +G4DNA_DamagedDeoxyriboseH* + G4DNA_DamagedDeoxyriboseH::fDamagedDeoxyriboseHInstance = 0; +G4DNA_DamagedDeoxyriboseH* G4DNA_DamagedDeoxyriboseH::Definition() +{ + if (fDamagedDeoxyriboseHInstance != 0) return fDamagedDeoxyriboseHInstance; + const G4String name = "DNA_DamagedDeoxyriboseH"; + + G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); + G4ParticleDefinition* anInstance = pTable->FindParticle(name); + if (anInstance == 0) { + const G4String formatedName = "DamagedDeoxyriboseH^{0}"; + + G4double mass = 31.99546 * g / Avogadro * c_squared; + anInstance = new G4MoleculeDefinition(name, mass, 1e-150 * (m * m / s), 0, 0, + 1.7 * angstrom, 2); + + ((G4MoleculeDefinition*) anInstance)->SetLevelOccupation(0); + ((G4MoleculeDefinition*) anInstance)->SetFormatedName(formatedName); + } + fDamagedDeoxyriboseHInstance = + static_cast(anInstance); + return fDamagedDeoxyriboseHInstance; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... +// Eaq_Damamged_Deoxyribose + +G4DNA_DamagedDeoxyriboseEAQ* + G4DNA_DamagedDeoxyriboseEAQ::fDamagedDeoxyriboseEAQInstance = 0; +G4DNA_DamagedDeoxyriboseEAQ* G4DNA_DamagedDeoxyriboseEAQ::Definition() +{ + if (fDamagedDeoxyriboseEAQInstance != 0) return fDamagedDeoxyriboseEAQInstance; + const G4String name = "DNA_DamagedDeoxyriboseEAQ"; + // search in particle table] + G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); + G4ParticleDefinition* anInstance = pTable->FindParticle(name); + if (anInstance == 0) { + const G4String formatedName = "DamagedDeoxyriboseEAQ^{0}"; + + G4double mass = 31.99546 * g / Avogadro * c_squared; + anInstance = new G4MoleculeDefinition(name, mass, 1e-150 * (m * m / s), 0, 0, + 1.7 * angstrom, 2); + + ((G4MoleculeDefinition*) anInstance)->SetLevelOccupation(0); + ((G4MoleculeDefinition*) anInstance)->SetFormatedName(formatedName); + } + fDamagedDeoxyriboseEAQInstance = + static_cast(anInstance); + return fDamagedDeoxyriboseEAQInstance; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/dnadamage2/src/PrimaryGeneratorAction.cc b/examples/extended/medical/dna/dnadamage2/src/PrimaryGeneratorAction.cc new file mode 100644 index 00000000000..e7d5c851506 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/src/PrimaryGeneratorAction.cc @@ -0,0 +1,211 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// 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 publication: +// Med. Phys. 37 (2010) 4692-4708 +// J. Comput. Phys. 274 (2014) 841-882 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +/// \file PrimaryGeneratorAction.cc +/// \brief Implementation of the PrimaryGeneratorAction class + +#include "PrimaryGeneratorAction.hh" + +#include "G4ParticleGun.hh" +#include "G4ParticleTable.hh" +#include "G4ParticleDefinition.hh" +#include "G4SystemOfUnits.hh" +#include "G4RandomDirection.hh" +#include "Randomize.hh" + +#include "G4VoxelLimits.hh" +#include "G4VSolid.hh" +#include "G4LogicalVolumeStore.hh" + +#include "G4AffineTransform.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +PrimaryGeneratorAction::PrimaryGeneratorAction() + : G4VUserPrimaryGeneratorAction(), + fParticleGun(0) +{ + G4int n_particle = 1; + fParticleGun = new G4ParticleGun(n_particle); + + // default particle kinematic + G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable(); + G4ParticleDefinition* particle= + particleTable->FindParticle("e-"); + fParticleGun->SetParticleDefinition(particle); + fParticleGun->SetParticlePosition(G4ThreeVector(0.,0.,0.)); + fParticleGun->SetParticleEnergy(100*keV); + fParticleGun->SetParticleMomentumDirection(G4ThreeVector(0.,0.,1.)); + + fpSourceFileUI = new G4UIcmdWithAString("/fpGun/SourceFile",this); + fpSourceFileUI->SetGuidance("Select the secondary e- source data file."); + + fpVertexUI = new G4UIcmdWithAnInteger("/fpGun/PrimariesPerEvent", this); + fpVertexUI->SetGuidance("Number of primary particles per event."); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +PrimaryGeneratorAction::~PrimaryGeneratorAction() +{ + delete fpVertexUI; + delete fParticleGun; + delete fpSourceFileUI; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) +{ + for(G4int i = 0; i < fVertex ; i++) { + G4ThreeVector Position = SamplePosition(); + G4double Energy = SampleSpectrum(); + G4ThreeVector Direction = G4RandomDirection(); + + fParticleGun->SetParticleMomentumDirection(Direction); + fParticleGun->SetParticlePosition(Position); + fParticleGun->SetParticleEnergy(Energy); + fParticleGun->GeneratePrimaryVertex(anEvent); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void PrimaryGeneratorAction::SetNewValue(G4UIcommand * command, + G4String newValue) +{ + if(command == fpSourceFileUI){ + fSourceFile = newValue; + LoadSpectrum(); + } + + if(command == fpVertexUI) { + fVertex = fpVertexUI->GetNewIntValue(newValue); + + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void PrimaryGeneratorAction::LoadSpectrum() +{ + fEnergyWeights.clear(); + fEnergies.clear(); + + std::ifstream SpectrumFile; + SpectrumFile.open(fSourceFile); + G4double x, y; + + if(!SpectrumFile){ + std::cout << "Source File: " + fSourceFile + " not found!!!" << std::endl; + exit(1); + } + + else { + while (SpectrumFile >> x >> y) { + fEnergies.push_back(x); + fEnergyWeights.push_back(y); + } + } + +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +G4double PrimaryGeneratorAction::SampleSpectrum() +{ + G4double Energy = 1 * eV; + G4int Bins = fEnergyWeights.size(); + + while (true) { + G4double X = ((fEnergies[Bins - 1] - fEnergies[0]) * G4UniformRand()) + + fEnergies[0]; + G4double Y = SampleProbability(X); + if (G4UniformRand() < Y) { + Energy = X * MeV; + break; + } + } + + if (Energy > 1 * MeV) + Energy = 0.9999999 * MeV; + + return Energy; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +G4double PrimaryGeneratorAction::SampleProbability(G4double X) +{ + G4double Y = 0; + + for(std::size_t i = 0; i < fEnergies.size() - 1; i++) { + if (fEnergies[i] < X && X < fEnergies[i+1]) { + G4double M = (fEnergyWeights[i+1] - fEnergyWeights[i]) / + (fEnergies[i+1] - fEnergies[i]); + G4double B = fEnergyWeights[i] - (M*fEnergies[i]); + Y = M*X + B; + } + } + + return Y; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +G4ThreeVector PrimaryGeneratorAction::SamplePosition() { + G4VSolid* solid = G4LogicalVolumeStore::GetInstance() + ->GetVolume("PlasmidVolume")->GetSolid(); + G4VoxelLimits voxelLimits; + G4AffineTransform dontUse; + G4double testX, testY, testZ; + G4double xmin, xmax, ymin, ymax, zmin, zmax; + solid->CalculateExtent(kXAxis, voxelLimits, dontUse, xmin, xmax); + solid->CalculateExtent(kYAxis, voxelLimits, dontUse, ymin, ymax); + solid->CalculateExtent(kZAxis, voxelLimits, dontUse, zmin, zmax); + + while (true) { + testX = G4RandFlat::shoot(xmin, xmax); + testY = G4RandFlat::shoot(ymin, ymax); + testZ = G4RandFlat::shoot(zmin, zmax); + if ( solid->Inside(G4ThreeVector(testX,testY,testZ)) == kInside ) { + break; + } + } + + return G4ThreeVector(testX, testY, testZ); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... \ No newline at end of file diff --git a/examples/extended/medical/dna/dnadamage2/src/Run.cc b/examples/extended/medical/dna/dnadamage2/src/Run.cc new file mode 100644 index 00000000000..e2053e681bd --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/src/Run.cc @@ -0,0 +1,160 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// dnadamage3 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +/// \file Run.cc +/// \brief Implementation of the Run class + +#include "Run.hh" +#include "RunAction.hh" + +#include "G4RunManager.hh" +#include "G4Event.hh" +#include "G4SDManager.hh" +#include "G4HCofThisEvent.hh" +#include "G4THitsMap.hh" +#include "G4SystemOfUnits.hh" +#include "G4VSensitiveDetector.hh" + +#include + +#include "ScoreSpecies.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +Run::Run(): G4Run() +{ + G4MultiFunctionalDetector* mfdet = dynamic_cast + (G4SDManager::GetSDMpointer()->FindSensitiveDetector("mfDetector")); + G4int CollectionIDspecies = + G4SDManager::GetSDMpointer()->GetCollectionID("mfDetector/Species"); + G4int CollectionIDLET = + G4SDManager::GetSDMpointer()->GetCollectionID("mfDetector/LET"); + G4int CollectionSB = + G4SDManager::GetSDMpointer()->GetCollectionID("mfDetector/StrandBreaks"); + + fTotalLET = new G4THitsMap("mfDetector","LET"); + fScorerRun = mfdet->GetPrimitive(CollectionIDspecies); + fLETScorerRun = mfdet->GetPrimitive(CollectionIDLET); + fStrandBreakRun = mfdet->GetPrimitive(CollectionSB); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void Run::RecordEvent(const G4Event* event) +{ + if(event->IsAborted()) return; + + G4int CollectionID = + G4SDManager::GetSDMpointer()->GetCollectionID("mfDetector/Species"); + + G4int CollectionIDLET = + G4SDManager::GetSDMpointer()->GetCollectionID("mfDetector/LET"); + + //Hits collections + // + G4HCofThisEvent* HCE = event->GetHCofThisEvent(); + if(!HCE) return; + + G4THitsMap* evtMap = + static_cast*>(HCE->GetHC(CollectionID)); + + G4THitsMap* evtLET = + static_cast*> (HCE->GetHC(CollectionIDLET)); + + G4int nOfMap = evtLET->entries(); + + G4int nOftotal = fTotalLET->entries(); + + for (G4int i=0; iadd(nOftotal+i, *LET); + } + + std::map::iterator itr; + + for (itr = evtMap->GetMap()->begin(); + itr != evtMap->GetMap()->end(); itr++){ + G4double edep = *(itr->second); + fSumEne+=edep; + } + + G4Run::RecordEvent(event); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void Run::Merge(const G4Run* aRun) +{ + if(aRun == this){ + return; + } + + const Run* localRun = static_cast(aRun); + fSumEne += localRun->fSumEne; + + G4int nOfMaster = fTotalLET->entries(); + G4int nOfLocal = localRun->fTotalLET->entries(); + for(G4int i=0;ifTotalLET)[i]; + if(!LET) continue; + fTotalLET->add(nOfMaster+i,*LET); + } + + ScoreSpecies* masterSpeciesScorer = + dynamic_cast(this->fScorerRun); + + ScoreSpecies* localSpeciesScorer = + dynamic_cast(localRun->fScorerRun); + + masterSpeciesScorer->AbsorbResultsFromWorkerScorer(localSpeciesScorer); + + ScoreStrandBreaks* masterSBScorer = + dynamic_cast(this->fStrandBreakRun); + + ScoreStrandBreaks* localSBScorer = + dynamic_cast(localRun->fStrandBreakRun); + + masterSBScorer->AbsorbResultsFromWorkerScorer(localSBScorer); + + G4Run::Merge(aRun); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/dnadamage2/src/RunAction.cc b/examples/extended/medical/dna/dnadamage2/src/RunAction.cc new file mode 100644 index 00000000000..ed939c7061a --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/src/RunAction.cc @@ -0,0 +1,149 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// dnadamage3 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +// +/// \file RunAction.cc +/// \brief Implementation of the RunAction class + +#include "RunAction.hh" +#include "Run.hh" + +#include "G4Run.hh" +#include "G4RunManager.hh" +#include "G4UnitsTable.hh" +#include "G4SystemOfUnits.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +RunAction::RunAction() + : G4UserRunAction() +{ +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +G4Run* RunAction::GenerateRun() +{ + Run* run = new Run(); + return run; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void RunAction::BeginOfRunAction(const G4Run*) +{ + // informs the runManager to save random number seed + G4RunManager::GetRunManager()->SetRandomNumberStore(false); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void RunAction::EndOfRunAction(const G4Run* run) +{ + G4int nofEvents = run->GetNumberOfEvent(); + if (nofEvents == 0) return; + + // results + // + const Run* dnadamage3Run = static_cast(run); + G4double sumDose = dnadamage3Run->GetSumDose(); + + // print + // + if (IsMaster()) + { + + G4cout + << G4endl + << "--------------------End of Global Run-----------------------" + << G4endl + << " The run has " << nofEvents << " events " + << G4endl; + + ScoreSpecies* masterScorer= + dynamic_cast(dnadamage3Run->GetPrimitiveScorer()); + + ScoreStrandBreaks* masterSBScorer= + dynamic_cast(dnadamage3Run->GetSBScorer()); + + G4cout << "Number of events recorded by the species scorer = " + << masterScorer->GetNumberOfRecordedEvents() + << G4endl; + + // LET + Run* aRun = (Run*)run; + G4THitsMap* totLET = aRun->GetLET(); + G4int nOfEvent = totLET->entries(); + G4double LET_mean = 0; + G4double LET_square = 0; + for(G4int i=0;iOutputAndClear(); + masterSBScorer->OutputAndClear(LET_mean,LET_square); + + } + else + { + G4cout + << G4endl + << "--------------------End of Local Run------------------------" + << G4endl + << " The run has " << nofEvents << " events" + << G4endl; + } + + G4cout + << " Total energy deposited in the world volume : " + << sumDose/eV << " eV" + << G4endl + << " ------------------------------------------------------------" + << G4endl + << G4endl; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/dnadamage2/src/ScavengerMolecules.cc b/examples/extended/medical/dna/dnadamage2/src/ScavengerMolecules.cc new file mode 100644 index 00000000000..e7c3883d060 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/src/ScavengerMolecules.cc @@ -0,0 +1,88 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +/// \file ScavengerMolecules.cc +/// \brief Implementation of the Background Scavenber chemical species + +#include "ScavengerMolecules.hh" +#include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" +#include "G4ParticleTable.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +G4DMSO* G4DMSO::fDMSOInstance = 0; + +G4DMSO* G4DMSO::Definition() +{ + if (fDMSOInstance != 0) return fDMSOInstance; + const G4String name = "DMSO^0"; + // search in particle table] + G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); + G4ParticleDefinition* anInstance = pTable->FindParticle(name); + if (anInstance == 0) { + const G4String formatedName = "DMSO^{0}"; + + G4double mass = 31.99546 * g / Avogadro * c_squared; + anInstance = new G4MoleculeDefinition(name, mass, 2.4e-9 * (m * m / s), 0, 0, + 1.7 * angstrom, 2); + + ((G4MoleculeDefinition*) anInstance)->SetLevelOccupation(0); // not implemented + ((G4MoleculeDefinition*) anInstance)->SetFormatedName(formatedName); + } + fDMSOInstance = static_cast(anInstance); + return fDMSOInstance; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +G4OxygenB* G4OxygenB::fOxygenBInstance = 0; + +G4OxygenB* G4OxygenB::Definition() +{ + if (fOxygenBInstance != 0) return fOxygenBInstance; + const G4String name = "Oxygen(B)"; + // search in particle table] + G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); + G4ParticleDefinition* anInstance = pTable->FindParticle(name); + if (anInstance == 0) { + const G4String formatedName = "Oxygen(B)^{0}"; + + G4double mass = 31.99546 * g / Avogadro * c_squared; + anInstance = new G4MoleculeDefinition(name, mass, 2.4e-9 * (m * m / s), 0, 0, + 1.7 * angstrom, 2); + + ((G4MoleculeDefinition*) anInstance)->SetLevelOccupation(0); // not implemented + ((G4MoleculeDefinition*) anInstance)->SetFormatedName(formatedName); + } + fOxygenBInstance = static_cast(anInstance); + return fOxygenBInstance; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/dnadamage2/src/ScoreLET.cc b/examples/extended/medical/dna/dnadamage2/src/ScoreLET.cc new file mode 100644 index 00000000000..b034ce9dfd9 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/src/ScoreLET.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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// chem6 example is derived from chem4 and chem5 examples +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: W. G. Shin and S. Incerti (CENBG, France) +// +// $Id$ +// +/// \file ScoreLET.cc +/// \brief Implementation of the ScoreLET class + +#include "ScoreLET.hh" +#include "G4RunManager.hh" +#include "G4SystemOfUnits.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +ScoreLET::ScoreLET(G4String name) + :G4VPrimitiveScorer(name),G4UImessenger(),fEvtMap(0) +{ + fpLETDir = new G4UIdirectory("/scorer/LET/"); + fpLETDir->SetGuidance("LET scorer commands"); + + fpCutoff = new G4UIcmdWithADoubleAndUnit("/scorer/LET/cutoff", this); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +ScoreLET::~ScoreLET() +{ + delete fpLETDir; + delete fpCutoff; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ScoreLET::SetNewValue(G4UIcommand* command, G4String newValue){ + if(command == fpCutoff) fCutoff = atof(newValue); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +G4bool ScoreLET::ProcessHits(G4Step* aStep,G4TouchableHistory* /*TH*/) +{ + // In order to follow the primary track + // regardless charge increasing or decreasing + if(aStep->GetTrack()->GetTrackID() != 1 && + aStep->GetTrack()->GetParticleDefinition()->GetPDGEncoding() != 11){ + G4int subType = aStep->GetTrack()->GetCreatorProcess() + ->GetProcessSubType(); + if(subType == 56 || subType == 57){ + fTrackID = aStep->GetTrack()->GetTrackID(); + } + } + + // Ignore the step if it is not primary. + if(aStep->GetTrack()->GetTrackID() != fTrackID) return false; + else{ + fStepL += aStep->GetStepLength()/um; + fEdep += aStep->GetTotalEnergyDeposit()/keV; + + G4int subType = aStep->GetPostStepPoint()-> + GetProcessDefinedStep()->GetProcessSubType(); + + // Don't add the kinetic energy of primary particle + if(subType == 56 || subType == 57) return false; + + const std::vector* secondary = + aStep->GetSecondaryInCurrentStep(); + + size_t nbtrk = (*secondary).size(); + + if(nbtrk){ + for(size_t lp=0;lpGetKineticEnergy()/eVGetKineticEnergy()/keV; + } + } + } + } + return true; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ScoreLET::Initialize(G4HCofThisEvent* HCE) +{ + fEvtMap = new G4THitsMap(GetMultiFunctionalDetector()->GetName(), + GetName()); + + fEvtMap->clear(); + fNEvent = 0; +static G4int HCID = -1; + if(HCID < 0) {HCID = GetCollectionID(0);} + HCE->AddHitsCollection(HCID, (G4VHitsCollection*)fEvtMap); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ScoreLET::EndOfEvent(G4HCofThisEvent*) +{ + if (fStepL > 0) { + fLET = fEdep / fStepL; + if(!G4RunManager::GetRunManager()->GetCurrentEvent()->IsAborted()) + { + fEvtMap->add(fNEvent,fLET); + fNEvent++; + } + } + fTrackID = 1; + fLET = 0; + fEdep = 0; + fStepL = 0; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +G4int ScoreLET::GetIndex(G4Step* /*aStep*/) +{ + return 0; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/dnadamage2/src/ScoreSpecies.cc b/examples/extended/medical/dna/dnadamage2/src/ScoreSpecies.cc new file mode 100644 index 00000000000..ce80d0ea0b1 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/src/ScoreSpecies.cc @@ -0,0 +1,410 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// dnadamage3 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +/// \file ScoreSpecies.cc +/// \brief Implementation of the ScoreSpecies class +/// +/// This is a primitive scorer class for molecular species. +/// The number of species is recorded for all times (predetermined or +/// user chosen). It also scores the energy deposition in order to compute the +/// radiochemical yields. + +#include "ScoreSpecies.hh" + +#include +#include +#include +#include +#include +#include "G4UnitsTable.hh" +#include "G4Scheduler.hh" +#include "G4AnalysisManager.hh" +#include "G4Event.hh" +#include "G4UImessenger.hh" +#include "G4TScoreNtupleWriter.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +ScoreSpecies::ScoreSpecies(G4String name, G4int depth) +: G4VPrimitiveScorer(name,depth), + G4UImessenger(), + fOutputType("root"), // other options: "csv", "hdf5", "xml" + fHCID(-1) +{ + fSpeciesdir = new G4UIdirectory("/scorer/species/"); + fSpeciesdir->SetGuidance("ScoreSpecies commands"); + + fAddTimeToRecordcmd = + new G4UIcmdWithADoubleAndUnit("/scorer/species/addTimeToRecord",this); + + fTimeBincmd = new G4UIcmdWithAnInteger("/scorer/species/nOfTimeBins",this); + + fOutputTypeUI = new G4UIcmdWithAString("/scorer/species/OutputFormat",this); + fOutputFileUI = new G4UIcmdWithAString("/scorer/species/OutputFile",this); + + G4MoleculeCounter::Instance()->ResetCounter(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +ScoreSpecies::~ScoreSpecies() +{ + delete fSpeciesdir; + delete fAddTimeToRecordcmd; + delete fTimeBincmd; + delete fOutputTypeUI; + delete fOutputFileUI; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ScoreSpecies::SetNewValue(G4UIcommand* command, G4String newValue) +{ + if(command == fAddTimeToRecordcmd){ + G4double cmdTime = fAddTimeToRecordcmd->GetNewDoubleValue(newValue); + AddTimeToRecord(cmdTime); + } + if(command == fTimeBincmd){ + ClearTimeToRecord(); + G4int cmdBins = fTimeBincmd->GetNewIntValue(newValue); + G4double timeMin = 1*ps; + G4double timeMax = G4Scheduler::Instance()->GetEndTime() - 1*ps; + G4double timeLogMin = std::log10(timeMin); + G4double timeLogMax = std::log10(timeMax); + for(G4int i=0;iGetTotalEnergyDeposit(); + + if ( edep == 0. ) return FALSE; + + edep *= aStep->GetPreStepPoint()->GetWeight(); + G4int index = GetIndex(aStep); + fEvtMap->add(index,edep); + fEdep+=edep; + + return TRUE; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ScoreSpecies::Initialize(G4HCofThisEvent* HCE) +{ + fEvtMap = new G4THitsMap(GetMultiFunctionalDetector()->GetName(), + GetName()); + + if(fHCID < 0) + { + fHCID = GetCollectionID(0); + } + + HCE->AddHitsCollection(fHCID, (G4VHitsCollection*)fEvtMap); + G4MoleculeCounter::Instance()->ResetCounter(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ScoreSpecies::EndOfEvent(G4HCofThisEvent*) +{ + if(G4EventManager::GetEventManager()->GetConstCurrentEvent()->IsAborted()) + { + fEdep = 0.; + G4MoleculeCounter::Instance()->ResetCounter(); + return; + } + + auto species = G4MoleculeCounter::Instance()->GetRecordedMolecules(); + + if(species.get() == 0 || species->size() == 0) + { + G4cout << "No molecule recorded, energy deposited= " + << G4BestUnit(fEdep, "Energy") << G4endl; + ++fNEvent; + fEdep = 0.; + G4MoleculeCounter::Instance()->ResetCounter(); + return; + } + + for(auto molecule: *species) + { + for(auto time_mol: fTimeToRecord) + { + double n_mol = + G4MoleculeCounter::Instance()->GetNMoleculesAtTime(molecule, + time_mol); + + if(n_mol < 0) + { + G4cerr << "N molecules not valid < 0 " << G4endl; + G4Exception("","N<0",FatalException,""); + } + + SpeciesInfo& molInfo = fSpeciesInfoPerTime[time_mol][molecule]; + molInfo.fNumber += n_mol; + molInfo.fNumber2 += n_mol*n_mol; + double gValue = (n_mol/(fEdep/eV)) * 100.; + molInfo.fG += gValue; + molInfo.fG2 += gValue*gValue; + } + } + + ++fNEvent; + + fEdep = 0.; + G4MoleculeCounter::Instance()->ResetCounter(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void +ScoreSpecies::AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer* workerScorer) +{ + ScoreSpecies* right = dynamic_cast(workerScorer); + + if(right == 0) + { + return; + } + if(right == this) + { + return; + } + + SpeciesMap::iterator it_map1 = right->fSpeciesInfoPerTime.begin(); + SpeciesMap::iterator end_map1 = right->fSpeciesInfoPerTime.end(); + + for(; it_map1 != end_map1; ++it_map1) + { + InnerSpeciesMap& map2 = it_map1->second; + InnerSpeciesMap::iterator it_map2 = map2.begin(); + InnerSpeciesMap::iterator end_map2 = map2.end(); + + for(; it_map2 != end_map2; ++it_map2) + { + SpeciesInfo& molInfo = + fSpeciesInfoPerTime[it_map1->first][it_map2->first]; + molInfo.fNumber += it_map2->second.fNumber; + molInfo.fNumber2 += it_map2->second.fNumber2; + molInfo.fG += it_map2->second.fG; + molInfo.fG2 += it_map2->second.fG2; + } + } + right->fSpeciesInfoPerTime.clear(); + + fNEvent += right->fNEvent; + right->fNEvent = 0; + right->fEdep = 0.; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ScoreSpecies::DrawAll() +{ +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ScoreSpecies::PrintAll() +{ + G4cout << " MultiFunctionalDet " << detector->GetName() << G4endl; + G4cout << " PrimitiveScorer " << GetName() << G4endl; + G4cout << " Number of events " << fNEvent << G4endl; + G4cout << " Number of energy deposition recorded " + << fEvtMap->entries() << G4endl; + + for(auto itr : *fEvtMap->GetMap()) { + G4cout << " copy no.: " << itr.first + << " energy deposit: " + << *(itr.second)/GetUnitValue() + << " [" << GetUnit()<<"]" + << G4endl; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ScoreSpecies::OutputAndClear() +{ + if(G4Threading::IsWorkerThread()) return; + + //--------------------------------------------------------------------------- + // Save results + + if(fOutputType != "ascii") + { + G4AnalysisManager* analysisManager = G4AnalysisManager::Instance(); + analysisManager->SetDefaultFileType(fOutputType); + + if(analysisManager) + { + this->WriteWithAnalysisManager(analysisManager); + } + } + else + OutputToASCII(); + + fNEvent = 0; + fSpeciesInfoPerTime.clear(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void +ScoreSpecies::WriteWithAnalysisManager(G4VAnalysisManager* analysisManager) +{ + analysisManager->OpenFile(fOutputFile); + int fNtupleID = analysisManager->CreateNtuple("species", "species"); + analysisManager->CreateNtupleIColumn(fNtupleID, "speciesID"); + analysisManager->CreateNtupleIColumn(fNtupleID, "number"); + analysisManager->CreateNtupleIColumn(fNtupleID, "nEvent"); + analysisManager->CreateNtupleSColumn(fNtupleID, "speciesName"); + analysisManager->CreateNtupleDColumn(fNtupleID, "time"); + analysisManager->CreateNtupleDColumn(fNtupleID, "sumG"); + analysisManager->CreateNtupleDColumn(fNtupleID, "sumG2"); + analysisManager->FinishNtuple(fNtupleID); + + for(auto it_map1: fSpeciesInfoPerTime) + { + InnerSpeciesMap& map2 = it_map1.second; + + for(auto it_map2 : map2) + { + double time = it_map1.first; + auto species = it_map2.first; + const G4String& name = species->GetName(); + int molID = it_map2.first->GetMoleculeID(); + int number = it_map2.second.fNumber; + double G = it_map2.second.fG; + double G2 = it_map2.second.fG2; + + analysisManager->FillNtupleIColumn(fNtupleID, 0, molID); + analysisManager->FillNtupleIColumn(fNtupleID, 1, number); + analysisManager->FillNtupleIColumn(fNtupleID, + 2, fNEvent); + analysisManager->FillNtupleSColumn(fNtupleID, 3, name); + analysisManager->FillNtupleDColumn(fNtupleID, 4, time); + analysisManager->FillNtupleDColumn(fNtupleID, 5, G); + analysisManager->FillNtupleDColumn(fNtupleID, 6, G2); + analysisManager->AddNtupleRow(fNtupleID); + } + } + + analysisManager->Write(); + analysisManager->CloseFile(); + fRunID++; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ScoreSpecies::OutputToASCII(){ + + std::ofstream SpeciesOutput; + SpeciesOutput.open(fOutputFile+".txt"); + + std::map>> mol; + + for(auto it_map1: fSpeciesInfoPerTime) { + InnerSpeciesMap& map2 = it_map1.second; + G4double time = it_map1.first/ps; + + for(auto it_map2: map2) { + G4double G = it_map2.second.fG; + G4double G2 = it_map2.second.fG2; + G4double Nb = it_map2.second.fNumber; + G4double Nb2 = it_map2.second.fNumber2; + G4double N = fNEvent; + if (N > 0) { + G /= N; + Nb /= N; + } + + if ( N == 1 ) { + G2 = 0.0; + Nb2 = 0.0; + } + + else if (N > 0) { + G2 = std::sqrt( N/(N-1) * ( G2/N - G*G) ); + Nb2 = std::sqrt( N/(N-1) * ( Nb2/N - Nb*Nb) ); + } + + mol[it_map2.first->GetName()][time].push_back(G); + mol[it_map2.first->GetName()][time].push_back(G2); + mol[it_map2.first->GetName()][time].push_back(Nb); + mol[it_map2.first->GetName()][time].push_back(Nb2); + } + } + + SpeciesOutput << "# Species Scorer Output " << G4endl; + SpeciesOutput << "# " << std::setw(10) << "Time [ps]" << + std::setw(15) << "Gx(/100 eV)" << + std::setw(15) << "RMS" << + std::setw(15) << "Gx(#Mols)" << + std::setw(20) << "Molecule" << G4endl; + + for ( auto it1 : mol ) + for ( auto it2 : it1.second ) + SpeciesOutput << std::setw(12) << it2.first + << " " << std::setw(12) << it2.second[0] + << " " << std::setw(12) << it2.second[1] + << " " << std::setw(12) << it2.second[2] + << " " << std::setw(17) << it1.first << G4endl; + + SpeciesOutput.close(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/dnadamage2/src/ScoreStrandBreaks.cc b/examples/extended/medical/dna/dnadamage2/src/ScoreStrandBreaks.cc new file mode 100644 index 00000000000..a629ac8a192 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/src/ScoreStrandBreaks.cc @@ -0,0 +1,400 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// 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 publication: +// Med. Phys. 37 (2010) 4692-4708 +// J. Comput. Phys. 274 (2014) 841-882 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +/// \file ScoreStrandBreaks.cc +/// \brief Implementation of the ScoreStrandBreaks class + +#include "ScoreStrandBreaks.hh" + +#include +#include +#include +#include "G4UnitsTable.hh" +#include "G4Scheduler.hh" +#include "G4AnalysisManager.hh" +#include "G4Event.hh" +#include "G4UImessenger.hh" +#include "G4EventManager.hh" +#include "G4DNAChemistryManager.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +ScoreStrandBreaks::ScoreStrandBreaks(G4String name, + DetectorConstruction* detect, G4double* radius) +: G4VPrimitiveScorer(name), + G4UImessenger(), + fpDetector(detect) +{ + fpOutputFileUI = new G4UIcmdWithAString("/scorer/StrandBreak/OutputFile", this); + fpOutputFileUI->SetGuidance("Set output file name"); + + fpOutputTypeUI = new G4UIcmdWithAString("/scorer/StrandBreak/OutputFormat", this); + fpOutputTypeUI->SetGuidance("Set output file format: ASCII by default"); + + fpBreakEnergyUI = + new G4UIcmdWithADoubleAndUnit("/scorer/StrandBreak/BreakEnergy", this); + fpBreakEnergyUI->SetDefaultUnit("eV"); + fpBreakEnergyUI->SetGuidance("Direct SSB energy treshold"); + + fRadius = radius; + fpGun = new MoleculeInserter(true); + //G4DNAChemistryManager::Instance()->SetGun(fpGun); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +ScoreStrandBreaks::~ScoreStrandBreaks() +{ + delete fpOutputFileUI; + delete fpBreakEnergyUI; + delete fpOutputTypeUI; + delete fpGun; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ScoreStrandBreaks::SetNewValue(G4UIcommand* command, G4String newValue) +{ + if (command == fpOutputFileUI) { + fOutputName = newValue; + } + + if (command == fpBreakEnergyUI) { + fBreakEnergy = fpBreakEnergyUI->GetNewDoubleValue(newValue); + } + + if (command == fpOutputTypeUI) { + fOutputType = newValue; + G4StrUtil::to_lower(fOutputType); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +G4bool ScoreStrandBreaks::ProcessHits(G4Step* aStep,G4TouchableHistory*) +{ + G4double edep = aStep->GetTotalEnergyDeposit(); + if (edep <= 0) { return FALSE; } + fEnergyDeposit += edep; + + G4StepPoint* aStepPoint = aStep->GetTrack()->GetStep()->GetPreStepPoint(); + G4TouchableHandle aTouchable = aStepPoint->GetTouchableHandle(); + G4String volumeName = aTouchable->GetVolume()->GetName(); + G4StrUtil::to_lower(volumeName); + G4int strand = 0; + + if (G4StrUtil::contains(volumeName, "deoxyribose") || + G4StrUtil::contains(volumeName, "phosphate")) { + if (G4StrUtil::contains(volumeName,"1")) + strand = 1; + else if (G4StrUtil::contains(volumeName,"2")) + strand = 2; + + G4int StrandID = strand; + G4int BaseID = aTouchable->GetReplicaNumber(0); + G4int PlasmidID = aTouchable->GetReplicaNumber(1); + G4int EventID = G4EventManager::GetEventManager()-> + GetConstCurrentEvent()->GetEventID(); + + fEnergyDepositMap[EventID][PlasmidID][BaseID][StrandID]+=edep; + return TRUE; + } + + if (!fDNAInserted) { + // Insert DNA molecules + std::vector> DNADetails = fpDetector->GetDNADetails(); + std::vector DNAPositions = fpDetector->GetDNAPositions(); + std::vector DNAMolecules = fpDetector->GetDNANames(); + + fpGun->Clean(); + for(size_t i = 0; i < DNAPositions.size(); i++) { + fpGun->AddMolecule(DNAMolecules[i],DNAPositions[i],1.0*ps); + } + fpGun->DefineTracks(); + + fDNAInserted = true; + } + return FALSE; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ScoreStrandBreaks::Initialize(G4HCofThisEvent*) +{ +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ScoreStrandBreaks::EndOfEvent(G4HCofThisEvent*) +{ + // Get EventID + G4int EventID = G4EventManager::GetEventManager()-> + GetConstCurrentEvent()->GetEventID(); + + // Absorbed Dose + G4double volume = 4.0/3 * 3.14159 * (*fRadius) * (*fRadius) * (*fRadius) / 8; + G4double density = 1.0 * g/cm3; + G4double mass = density * volume; + G4double Dose = fEnergyDeposit / mass; + fDoseArray[EventID] = Dose / gray; + + // Direct Strand Breaks + for( auto EventAndElse : fEnergyDepositMap) { + G4int event = EventAndElse.first; + for ( auto PlasmidAndElse : EventAndElse.second) { + G4int plasmid = PlasmidAndElse.first; + for ( auto BaseAndElse : PlasmidAndElse.second) { + G4int base = BaseAndElse.first; + for ( auto StrandAndEdep : BaseAndElse.second) { + G4int strand = StrandAndEdep.first; + G4double edep = StrandAndEdep.second; + if (edep > fBreakEnergy) + fDirectDamageMap[event].push_back({plasmid,base,strand}); + } + } + } + } + fEnergyDepositMap.clear(); + + // Indirect Strand Breaks + std::vector> DNADetails = fpDetector->GetDNADetails(); + std::vector InsertedTracks = fpGun->GetInsertedTracks(); + std::vector> IndirectBreaks; + + for(size_t i = 0; i < InsertedTracks.size(); i++) { + if(InsertedTracks[i]->GetTrackStatus() == fStopAndKill) + IndirectBreaks.push_back(DNADetails[i]); + } + + for(size_t i = 0; i < IndirectBreaks.size(); i++) { + fIndirectDamageMap[EventID].push_back(IndirectBreaks[i]); + } + + fEnergyDeposit = 0; + fDNAInserted = false; + fnbOfEvents++; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void +ScoreStrandBreaks::AbsorbResultsFromWorkerScorer(G4VPrimitiveScorer* workerScorer) +{ + ScoreStrandBreaks* right = + dynamic_cast(dynamic_cast(workerScorer)); + + if (right == 0) + return; + if (right == this) + return; + + DamageMap WorkerDirectDamageMap = right->fDirectDamageMap; + DamageMap WorkerIndirectDamageMap = right->fIndirectDamageMap; + std::map WorkerDose = right->fDoseArray; + + for ( auto EventAndBreaks : WorkerDirectDamageMap) { + G4int EventID = EventAndBreaks.first; + std::vector> Breaks = EventAndBreaks.second; + for (size_t i = 0; i < Breaks.size(); i++) { + fDirectDamageMap[EventID].push_back(Breaks[i]); + } + } + + for ( auto EventAndBreaks : WorkerIndirectDamageMap) { + G4int EventID = EventAndBreaks.first; + std::vector> Breaks = EventAndBreaks.second; + for (size_t i = 0; i < Breaks.size(); i++) { + fIndirectDamageMap[EventID].push_back(Breaks[i]); + } + } + + for ( auto EventAndDose : WorkerDose) { + G4int EventID = EventAndDose.first; + G4double dose = EventAndDose.second; + fDoseArray[EventID] = dose; + } + + fnbOfEvents += right->fnbOfEvents; + right->Clear(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ScoreStrandBreaks::Clear() +{ + if (fDirectDamageMap.size() != 0) + fDirectDamageMap.clear(); + + if (fIndirectDamageMap.size() != 0) + fIndirectDamageMap.clear(); + + if (fEnergyDepositMap.size() != 0) + fEnergyDepositMap.clear(); + + if (fDoseArray.size() != 0) + fDoseArray.clear(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ScoreStrandBreaks::DrawAll() +{ +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ScoreStrandBreaks::PrintAll() +{ +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void ScoreStrandBreaks::OutputAndClear(G4double LET, G4double LET_STD) +{ + if(G4Threading::IsWorkerThread()) return; + + if (fOutputType != "ascii") { + + G4AnalysisManager* analysisManager = G4AnalysisManager::Instance(); + + if (fOutputType == "csv") + analysisManager->SetDefaultFileType("csv"); + + else if (fOutputType == "root") + analysisManager->SetDefaultFileType("root"); + + else if (fOutputType == "xml") + analysisManager->SetDefaultFileType("xml"); + + WriteWithAnalysisManager(analysisManager); + } + + else + ASCII(LET, LET_STD); + + Clear(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void +ScoreStrandBreaks::WriteWithAnalysisManager(G4VAnalysisManager* analysisManager) +{ + analysisManager->OpenFile(fOutputName); + int fNtupleID = analysisManager->CreateNtuple("SB","Direct And Indirect SBs"); + analysisManager->CreateNtupleIColumn(fNtupleID, "EventID"); + analysisManager->CreateNtupleIColumn(fNtupleID, "PlasmidID"); + analysisManager->CreateNtupleIColumn(fNtupleID, "StrandID"); + analysisManager->CreateNtupleIColumn(fNtupleID, "BaseID"); + analysisManager->CreateNtupleIColumn(fNtupleID, "DamageID"); + analysisManager->CreateNtupleIColumn(fNtupleID, "BreakID"); + analysisManager->FinishNtuple(fNtupleID); + + for (G4int i = 0; i < fnbOfEvents; i++) { + if (fDirectDamageMap.find(i) != fDirectDamageMap.end()) { + for(size_t j = 0; j < fDirectDamageMap[i].size(); j++) { + std::vector Break = fDirectDamageMap[i][j]; + analysisManager->FillNtupleIColumn(fNtupleID, 0, i); + analysisManager->FillNtupleIColumn(fNtupleID, 1, Break[0]); + analysisManager->FillNtupleIColumn(fNtupleID, 2, Break[1]); + analysisManager->FillNtupleIColumn(fNtupleID, 3, Break[2]); + analysisManager->FillNtupleIColumn(fNtupleID, 4, 1); + analysisManager->AddNtupleRow(fNtupleID); + } + } + + if (fIndirectDamageMap.find(i) != fIndirectDamageMap.end()) { + for(size_t j = 0; j < fIndirectDamageMap[i].size(); j++) { + std::vector Break = fIndirectDamageMap[i][j]; + analysisManager->FillNtupleIColumn(fNtupleID, 0, i); + analysisManager->FillNtupleIColumn(fNtupleID, 1, Break[0]); + analysisManager->FillNtupleIColumn(fNtupleID, 2, Break[1]); + analysisManager->FillNtupleIColumn(fNtupleID, 3, Break[2]); + analysisManager->FillNtupleIColumn(fNtupleID, 4, 2); + analysisManager->AddNtupleRow(fNtupleID); + } + } + } + + analysisManager->Write(); + analysisManager->CloseFile(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void ScoreStrandBreaks::ASCII(G4double LET, G4double LET_STD) +{ + std::ofstream dna(fOutputName+".txt"); + + dna << "# DNA SB Map File" << G4endl; + dna << "# LET = " << LET / (keV / um) << " +- " + << LET_STD / (keV / um) << " keV / um" << G4endl; + dna << "#" << std::setw(11) << "Event-ID" + << std::setw(12) << "Plasmid-ID" + << std::setw(12) << "BP-ID" + << std::setw(12) << "Strand-ID" + << std::setw(10) << "Break-ID" + << std::setw(12) << "Dose (Gy) "<< G4endl; + + for (G4int i = 0; i < fnbOfEvents; i++) { + if (fDirectDamageMap.find(i) != fDirectDamageMap.end()) { + for(size_t j = 0; j < fDirectDamageMap[i].size(); j++) { + std::vector Break = fDirectDamageMap[i][j]; + dna << std::setw(12) << i + << std::setw(12) << Break[0] + << std::setw(12) << Break[1] + << std::setw(12) << Break[2] + << std::setw(10) << 1 + << std::setw(12) << fDoseArray[i] << G4endl; + } + } + + if (fIndirectDamageMap.find(i) != fIndirectDamageMap.end()) { + for(size_t j = 0; j < fIndirectDamageMap[i].size(); j++) { + std::vector Break = fIndirectDamageMap[i][j]; + dna << std::setw(12) << i + << std::setw(12) << Break[0] + << std::setw(12) << Break[1] + << std::setw(12) << Break[2] + << std::setw(10) << 2 + << std::setw(12) << fDoseArray[i] << G4endl; + } + } + } + + dna.close(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... \ No newline at end of file diff --git a/examples/extended/medical/dna/dnadamage2/src/StackingAction.cc b/examples/extended/medical/dna/dnadamage2/src/StackingAction.cc new file mode 100644 index 00000000000..de6ffc44264 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/src/StackingAction.cc @@ -0,0 +1,81 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// dnadamage3 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +// +/// \file StackingAction.cc +/// \brief Implementation of the StackingAction class + +#include "StackingAction.hh" +#include "DetectorConstruction.hh" + +#include "G4StackManager.hh" +#include "G4DNAChemistryManager.hh" +#include "G4SDManager.hh" +#include "G4SystemOfUnits.hh" +#include "G4Track.hh" +#include "G4ITTrackHolder.hh" +#include "G4ManyFastLists.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +StackingAction::StackingAction() + : G4UserStackingAction() +{ +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +StackingAction::~StackingAction() +{ +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void StackingAction::NewStage() +{ + if(stackManager->GetNTotalTrack() == 0) + { + // Run Chemistry + G4DNAChemistryManager::Instance()->Run(); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... \ No newline at end of file diff --git a/examples/extended/medical/dna/dnadamage2/src/TimeStepAction.cc b/examples/extended/medical/dna/dnadamage2/src/TimeStepAction.cc new file mode 100644 index 00000000000..5537664cdb1 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/src/TimeStepAction.cc @@ -0,0 +1,112 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// This example is provided by the Geant4-DNA collaboration +// dnadamage3 example is derived from the chem6 example +// chem6 example authors: W. G. Shin and S. Incerti (CENBG, France) +// +// Any report or published results obtained using the Geant4-DNA software +// shall cite the following Geant4-DNA collaboration publication: +// J. Appl. Phys. 125 (2019) 104301 +// Med. Phys. 45 (2018) e722-e739 +// J. Comput. Phys. 274 (2014) 841-882 +// Med. Phys. 37 (2010) 4692-4708 +// Int. J. Model. Simul. Sci. Comput. 1 (2010) 157-178 +// The Geant4-DNA web site is available at http://geant4-dna.org +// +// Authors: J. Naoki D. Kondo (UCSF, US) +// J. Ramos-Mendez and B. Faddegon (UCSF, US) +// +// +/// \file TimeStepAction.hh +/// \brief Implementation of the TimeStepAction class +/// Filtering of molecules by material at the beggining of the chemical stage + +#include "TimeStepAction.hh" +#include "G4Scheduler.hh" +#include "G4UnitsTable.hh" +#include "G4SystemOfUnits.hh" +#include "G4Track.hh" +#include "G4Molecule.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +TimeStepAction::TimeStepAction() : G4UserTimeStepAction() +{ +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +TimeStepAction::TimeStepAction(const TimeStepAction& other) : + G4UserTimeStepAction(other) +{ +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +TimeStepAction& +TimeStepAction::operator=(const TimeStepAction& rhs) +{ + if (this == &rhs) return *this; // handle self assignment + //assignment operator + return *this; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... +void TimeStepAction::UserPreTimeStepAction() +{ + G4int Steps = G4Scheduler::Instance()->GetNbSteps(); + + if (Steps == 1) { + G4TrackManyList* trackList = G4ITTrackHolder::Instance()->GetMainList(); + G4ManyFastLists::iterator it_begin = trackList->begin(); + G4ManyFastLists::iterator it_end = trackList->end(); + + for(;it_begin!=it_end;++it_begin) { + G4String Material = it_begin->GetStep()-> + GetPreStepPoint()->GetMaterial()->GetName(); + G4String MoleculeName = GetMolecule(*it_begin)->GetName(); + if (Material != "G4_WATER" && !G4StrUtil::contains(MoleculeName,"DNA")) { + it_begin->SetTrackStatus(fStopAndKill); + } + } + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void TimeStepAction::UserPostTimeStepAction() +{ +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... + +void TimeStepAction::UserReactionAction(const G4Track& /*trackA*/, + const G4Track& /*trackB*/, + const std::vector* /*products*/) +{ +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/examples/extended/medical/dna/dnadamage2/vis.in b/examples/extended/medical/dna/dnadamage2/vis.in new file mode 100644 index 00000000000..6feaa9e4423 --- /dev/null +++ b/examples/extended/medical/dna/dnadamage2/vis.in @@ -0,0 +1,43 @@ +# OpenGL visualization +/vis/open OGL 600x600-0+0 + +# Disable auto refresh and quieten vis messages whilst scene and +# trajectories are established: +/vis/viewer/set/autoRefresh true +/vis/verbose errors + +# Draw geometry: +/vis/drawVolume + +# Specify view angle: +/vis/viewer/set/viewpointVector -1 0 0 +/vis/viewer/set/lightsVector -1 0 0 + +# Specify style (surface, wireframe, auxiliary edges,...) +/vis/viewer/set/style wireframe +/vis/viewer/set/auxiliaryEdge true +/vis/viewer/set/lineSegmentsPerCircle 100 + +# Draw smooth trajectories at end of event, showing trajectory points +# as markers 2 pixels wide: +/vis/scene/add/trajectories smooth +/vis/modeling/trajectories/create/drawByCharge +/vis/modeling/trajectories/drawByCharge-0/default/setDrawStepPts true +/vis/modeling/trajectories/drawByCharge-0/default/setStepPtsSize 2 + +# To superimpose all of the events from a given run: +/vis/scene/endOfEventAction accumulate + +# Make the "World" box invisible +/vis/geometry/set/visibility LWorld 0 false +/vis/geometry/set/visibility VoxelStraight_logic 0 false + +# "Envelope" is transparent blue to represent water +/vis/geometry/set/colour PlasmidVolume 0 0 0 1 .3 +/vis/viewer/set/style surface +/vis/viewer/set/hiddenMarker true +/vis/viewer/set/viewpointThetaPhi 0 0 + +# Re-establish auto refreshing and verbosity: +/vis/viewer/set/autoRefresh true +/vis/verbose warnings \ No newline at end of file diff --git a/examples/extended/medical/dna/dnaphysics/dnaphysics.out b/examples/extended/medical/dna/dnaphysics/dnaphysics.out index 27f9637bae0..b88cb61dec5 100644 --- a/examples/extended/medical/dna/dnaphysics/dnaphysics.out +++ b/examples/extended/medical/dna/dnaphysics/dnaphysics.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -19,7 +19,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo WWW : http://geant4.org/ ************************************************************** -##### Create analysis manager 0x1011330 +##### Create analysis manager 0x225f540 Using analysis manager /run/numberOfThreads 2 *** /run/numberOfThreads command is issued in sequential mode. @@ -229,7 +229,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 1 GeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 1 GeV @@ -304,7 +304,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 1 GeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 1 GeV @@ -323,7 +323,7 @@ hIoni: for proton XStype:3 SubType=2 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 1 GeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 1 GeV @@ -484,7 +484,7 @@ hIoni: for anti_proton XStype:3 SubType=2 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 1 GeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 1 GeV @@ -547,7 +547,7 @@ hIoni: for kaon+ XStype:3 SubType=2 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 1 GeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 1 GeV @@ -566,7 +566,7 @@ hIoni: for kaon- XStype:3 SubType=2 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 1 GeV @@ -585,7 +585,7 @@ muIoni: for mu+ XStype:3 SubType=2 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 1 GeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 1 GeV @@ -604,7 +604,7 @@ muIoni: for mu- XStype:3 SubType=2 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 1 GeV @@ -623,7 +623,7 @@ hIoni: for pi+ XStype:3 SubType=2 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 1 GeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 1 GeV @@ -642,7 +642,7 @@ hIoni: for pi- XStype:3 SubType=2 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 1 GeV ====================================================================== @@ -709,7 +709,7 @@ Setting was ignored. Run terminated. Run Summary Number of events processed : 2 - User=4.370000s Real=4.474954s Sys=0.070000s + User=4.010000s Real=4.093932s Sys=0.050000s ... write file : dna.root - done ... close file : dna.root - done G4 kernel has come to Quit state. diff --git a/examples/extended/medical/dna/icsd/History b/examples/extended/medical/dna/icsd/History index 13f3ac7786b..49f87e20d5d 100644 --- a/examples/extended/medical/dna/icsd/History +++ b/examples/extended/medical/dna/icsd/History @@ -4,6 +4,13 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-03-24 H. Tran (exicsd-V11-01-01) +- Physics list: delete G4DNAVacuumModel + +## 2023-01-27 H. Tran (exicsd-V11-01-00) +- Physics list: deleted unused models, +apdated RegisterModel function with new structure + ## 2022-11-02 Y. Perrot (exicsd-V11-00-01) - Physics list: use of nitrogen material - Geometry: propose two geometries, nanodosimeter (N2) diff --git a/examples/extended/medical/dna/icsd/icsd.mac b/examples/extended/medical/dna/icsd/icsd.mac index da7e8e95289..eec0399671e 100644 --- a/examples/extended/medical/dna/icsd/icsd.mac +++ b/examples/extended/medical/dna/icsd/icsd.mac @@ -4,4 +4,4 @@ /run/initialize /gun/particle e- /gun/energy 500 eV -/run/beamOn 75 +/run/beamOn 1 diff --git a/examples/extended/medical/dna/icsd/icsd.out b/examples/extended/medical/dna/icsd/icsd.out index a5ca2631682..49194e21ae4 100644 --- a/examples/extended/medical/dna/icsd/icsd.out +++ b/examples/extended/medical/dna/icsd/icsd.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -19,7 +19,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo WWW : http://geant4.org/ ************************************************************** -##### Create analysis manager 0x18bf3e0 +##### Create analysis manager 0x9ccda0 Using analysis manager e-_G4DNAPTBAugerModel is constructed ======================================================================= @@ -100,18 +100,36 @@ Screening factor 1 *** This is just a warning message. *** -------- WWWW -------- G4Exception-END --------- WWWW ------- +======================================= Materials of DNA_e-_elastic ================================================ + Material# Particle Model LowLimit(MeV) HighLimit(MeV) Fast Stationary Chemistry + G4_WATER e- DNAScreenedRutherfordElasticModel 0 1 no no no + THF e- DNAPTBElasticModel 1e-05 0.001 no no no + N2 e- DNAPTBElasticModel 1e-05 1.02 no no no +========================================================================================================================================== +======================================= Materials of DNA_e-_excitation ================================================ + Material# Particle Model LowLimit(MeV) HighLimit(MeV) Fast Stationary Chemistry + G4_WATER e- DNAEmfietzoglouExcitationModel 8e-06 0.01 no no no + THF e- DNAPTBExcitationModel 9e-06 0.001 no no no + N2 e- DNAPTBExcitationModel 1.3e-05 1.02 no no no +========================================================================================================================================== +======================================= Materials of DNA_e-_ionisation ================================================ + Material# Particle Model LowLimit(MeV) HighLimit(MeV) Fast Stationary Chemistry + G4_WATER e- DNAEmfietzoglouIonisationModel 1e-05 0.01 no no no + THF e- DNAPTBIonisationModel 1.2e-05 0.001 no no no + N2 e- DNAPTBIonisationModel 1.55e-05 1.02 no no no +========================================================================================================================================== e-_G4DNAElastic: for e- SubType=51 BuildTable=0 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -e-_elastic_interaction : Emin= 0 eV Emax= 100 TeV + DNA_e-_elastic : Emin= 0 eV Emax= 100 TeV e-_G4DNAExcitation: for e- SubType=52 BuildTable=0 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -e-_excitation_interaction : Emin= 0 eV Emax= 100 TeV + DNA_e-_excitation : Emin= 0 eV Emax= 100 TeV e-_G4DNAIonisation: for e- SubType=53 BuildTable=0 ===== EM models for the G4Region DefaultRegionForTheWorld ====== -e-_ionisation_interaction : Emin= 0 eV Emax= 100 TeV + DNA_e-_ionisation : Emin= 0 eV Emax= 100 TeV -------- WWWW ------- G4Exception-START -------- WWWW ------- *** G4Exception : Analysis_W001 diff --git a/examples/extended/medical/dna/icsd/src/PhysicsList.cc b/examples/extended/medical/dna/icsd/src/PhysicsList.cc index 511abbf8aa0..53b60f6b4d8 100644 --- a/examples/extended/medical/dna/icsd/src/PhysicsList.cc +++ b/examples/extended/medical/dna/icsd/src/PhysicsList.cc @@ -181,46 +181,40 @@ void PhysicsList::ConstructEM() new G4DNAEmfietzoglouIonisationModel(); G4DNAEmfietzoglouExcitationModel* e_modelDNAEmfietzoglouExcitation = new G4DNAEmfietzoglouExcitationModel(); - // G4DNAMeltonAttachmentModel* e_modelDNAAttachement= - new G4DNAMeltonAttachmentModel(); - // G4DNASancheExcitationModel* e_modelDNAVibra= - new G4DNASancheExcitationModel(); G4DNAPTBElasticModel* modelDNAPTBElastic = - new G4DNAPTBElasticModel("THF/TMP/PY/N2", particle); + new G4DNAPTBElasticModel(); G4DNAPTBIonisationModel* modelDNAPTBIonisation = - new G4DNAPTBIonisationModel("THF/TMP/PY/N2",particle); + new G4DNAPTBIonisationModel(); G4DNAPTBExcitationModel* modelDNAPTBExcitation = - new G4DNAPTBExcitationModel("THF/TMP/PY/N2",particle); + new G4DNAPTBExcitationModel(); // Register models in the model interface //for elastics in three types of materials G4DNAModelInterface* e_elasticInteraction = - new G4DNAModelInterface("e-_elastic_interaction"); - e_elasticInteraction-> - RegisterModel(e_modelDNARutherfordElastic, particle); + new G4DNAModelInterface("DNA_e-_elastic"); + e_elasticInteraction->RegisterModel(modelDNAPTBElastic); - e_elasticInteraction->RegisterModel(new G4DNAVacuumModel()); + e_elasticInteraction-> + RegisterModel(e_modelDNARutherfordElastic); //for ionization in three types of material G4DNAModelInterface* e_ionisationInteraction= - new G4DNAModelInterface("e-_ionisation_interaction"); - e_ionisationInteraction-> - RegisterModel(e_modelDNAEmfietzoglouIonisation,particle); - e_ionisationInteraction->RegisterModel(modelDNAPTBIonisation); - e_ionisationInteraction->RegisterModel(new G4DNAVacuumModel()); + new G4DNAModelInterface("DNA_e-_ionisation"); + e_ionisationInteraction->RegisterModel(modelDNAPTBIonisation); + e_ionisationInteraction-> + RegisterModel(e_modelDNAEmfietzoglouIonisation); //for excitation in three types of material G4DNAModelInterface* e_excitationInteraction= - new G4DNAModelInterface("e-_excitation_interaction"); + new G4DNAModelInterface("DNA_e-_excitation"); e_excitationInteraction-> - RegisterModel(e_modelDNAEmfietzoglouExcitation,particle); + RegisterModel(e_modelDNAEmfietzoglouExcitation); e_excitationInteraction->RegisterModel(modelDNAPTBExcitation); - e_excitationInteraction->RegisterModel(new G4DNAVacuumModel()); //Instanciate Processes // Elastic @@ -235,13 +229,6 @@ void PhysicsList::ConstructEM() G4DNAExcitation* e_DNAExcitationProcess = new G4DNAExcitation("e-_G4DNAExcitation"); e_DNAExcitationProcess->SetEmModel(e_excitationInteraction); - /* G4DNAAttachment* e_DNAAttachementProcess= - new G4DNAAttachment("e-_G4DNAAttachement"); - e_DNAAttachementProcess->SetEmModel(e_attachementInteraction); - G4DNAVibExcitation* e_DNAVibraProcess= - new G4DNAVibExcitation("e-_G4DNAVibraExci"); - e_DNAVibraProcess->SetEmModel(e_VibInteraction);*/ - // ********************************************************** // Add previous process diff --git a/examples/extended/medical/dna/jetcounter/jetcounter.out b/examples/extended/medical/dna/jetcounter/jetcounter.out index 21b758c471a..fbfbf0c8e06 100644 --- a/examples/extended/medical/dna/jetcounter/jetcounter.out +++ b/examples/extended/medical/dna/jetcounter/jetcounter.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -183,7 +183,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -252,7 +252,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -290,7 +290,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -492,7 +492,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -580,7 +580,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -612,7 +612,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -644,7 +644,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -676,7 +676,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -708,7 +708,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -740,8 +740,8 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV ### Run 0 start. -number of event = 40 User=3.760000s Real=3.779136s Sys=0.000000s +number of event = 40 User=4.260000s Real=4.303794s Sys=0.010000s diff --git a/examples/extended/medical/dna/mfp/mfp.out b/examples/extended/medical/dna/mfp/mfp.out index cc290217c25..2d79e0d823e 100644 --- a/examples/extended/medical/dna/mfp/mfp.out +++ b/examples/extended/medical/dna/mfp/mfp.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -42,7 +42,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... diff --git a/examples/extended/medical/dna/microdosimetry/microdosimetry.out b/examples/extended/medical/dna/microdosimetry/microdosimetry.out index b9da01a79fd..c521822533e 100644 --- a/examples/extended/medical/dna/microdosimetry/microdosimetry.out +++ b/examples/extended/medical/dna/microdosimetry/microdosimetry.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -43,7 +43,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -209,7 +211,7 @@ msc: for proton SubType= 10 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV ===== EM models for the G4Region Target ====== @@ -264,7 +266,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -372,7 +373,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 2 - User=24.840000s Real=24.990761s Sys=0.010000s + User=23.670000s Real=23.782441s Sys=0.000000s Number and type of particles created outside region "Target" : N e- : 729 _______________________ diff --git a/examples/extended/medical/dna/microprox/microprox.out b/examples/extended/medical/dna/microprox/microprox.out index e73c400de79..23b2b8bf2fb 100644 --- a/examples/extended/medical/dna/microprox/microprox.out +++ b/examples/extended/medical/dna/microprox/microprox.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -19,7 +19,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo WWW : http://geant4.org/ ************************************************************** -##### Create analysis manager 0xfaca50 +##### Create analysis manager 0x2328b50 Using analysis manager Visualization Manager instantiating with verbosity "warnings (3)"... Visualization Manager initialising... @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... diff --git a/examples/extended/medical/dna/microyz/microyz.out b/examples/extended/medical/dna/microyz/microyz.out index 8f3bf54df7b..05cba4b69cb 100644 --- a/examples/extended/medical/dna/microyz/microyz.out +++ b/examples/extended/medical/dna/microyz/microyz.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -19,7 +19,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo WWW : http://geant4.org/ ************************************************************** -##### Create analysis manager 0x1957690 +##### Create analysis manager 0x17c4720 Using analysis manager Visualization Manager instantiating with verbosity "warnings (3)"... Visualization Manager initialising... @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... diff --git a/examples/extended/medical/dna/moleculardna/.README.txt b/examples/extended/medical/dna/moleculardna/.README.txt index 926dd655502..adf86c4bd17 100644 --- a/examples/extended/medical/dna/moleculardna/.README.txt +++ b/examples/extended/medical/dna/moleculardna/.README.txt @@ -13,7 +13,7 @@ al 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 +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 @@ -133,6 +133,7 @@ Setting "useParallelPhysicsWorld = false" means that particles will only interac with the water volume. Energy deposition in water caused by direct damage is recorded using octree data structures associated with DNA volumes. + \endverbatim \section MOLECULARDNA_s2 PHYSICS LIST @@ -196,7 +197,7 @@ Several ROOT macro files are provided in the analysis directory: root cylinders.C # to plot damage from cylinders geometry -root ecoli.C +root ecoli.C # to plot damage from ecoli geometry root human_cell.C @@ -204,27 +205,37 @@ root human_cell.C # A python macro file is provided to modify ROOT output in SDD file format: -python createSDD.py +python createSDD.py # to use it, insert the command "python3 createSDD.py". # If error with root, simply source /path/to/root/bin/thisroot.(c)sh, # do "pip install pyroot" and try again. -# A python macro file to calculate repair kinetics is located in the folder +# A python macro file to calculate repair kinetics is located in the folder # repair_survival_models. This script can be used with the output of the mac -# file human_cell (10^5 primaries) to reproduced data published in -# https://arxiv.org/abs/2210.01564 +# file human_cell (10^5 primaries) to reproduced data published in +# https://arxiv.org/abs/2210.01564 molecularDNArepair.py # to use it, insert the command "python3 molecularDNArepair.py". -# The molecular-dna.root is also needed to run it, as produced by +# The molecular-dna.root is also needed to run it, as produced by # the human-cell.mac. - -# A python macro file to calculate the survival probability of cells is located -# in the folder repair_survival_models. This script is early released and needs to be optimized + +# A python macro file to calculate the survival probability of cells is located +# in the folder repair_survival_models. This script is early released and needs to be optimized # to fit any data. -molecularDNAsurvival.py +molecularDNAsurvival.py # to use it, insert the command "python3 molecularDNAsurnival.py". -# The molecular-dna.root is needed to run it, as produced by +# The molecular-dna.root is needed to run it, as produced by # the human-cell.mac. \endverbatim +\section MOLECULARDNA_s6 PHASE SPACE READING + +\verbatim +The example can read a phase space file as source for the primary generation, +defined in the csv format used by the GRAS Two-Stage Analysis [1]. +An example of phase space file and the macro to read it are provided in the +"/phase_space" subdirectory. This simple phase space file only provides 20 electrons +with an energy of 45 keV on a randomly shaped surface based on the cylinders.mac macro file. +\endverbatim + */ diff --git a/examples/extended/medical/dna/moleculardna/CMakeLists.txt b/examples/extended/medical/dna/moleculardna/CMakeLists.txt index 601bdfd7fce..65d7ebbb222 100644 --- a/examples/extended/medical/dna/moleculardna/CMakeLists.txt +++ b/examples/extended/medical/dna/moleculardna/CMakeLists.txt @@ -28,8 +28,8 @@ set(GEOMETRY_FILE_NAME "geometries.tar.gz") set(GEOMETRY_FOlDER_NAME "geometries") set(GEOMETRY_LOCAL_FILENAME "${PROJECT_BINARY_DIR}/${GEOMETRY_FILE_NAME}") set(GEOMETRY_DATASETS_URL - "http://geant4-dna.in2p3.fr/geometries/molecularDNA/${GEOMETRY_FILE_NAME}") -set(HASH_MD5 "3e28151dc4c4647af3ae37d0385fc443") + "https://cern.ch/geant4-data/datasets/examples/extended/medical/dna/moleculardna/${GEOMETRY_FILE_NAME}") +set(HASH_MD5 "cbe6ac77f46d33865cf7d6ea2c94ef67") if (EXISTS "${GEOMETRY_FOlDER_NAME}") set(GEOMETRY_NEEDS_DOWNLOAD FALSE) diff --git a/examples/extended/medical/dna/moleculardna/History b/examples/extended/medical/dna/moleculardna/History index 38b0b2d6cbc..067567d190e 100644 --- a/examples/extended/medical/dna/moleculardna/History +++ b/examples/extended/medical/dna/moleculardna/History @@ -6,12 +6,22 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-02-07 Hoang Tran (molecularDNA-V11-00-13) +## 2023-05-31 Hoang Tran (molecularDNA-V11-01-04) +- restore the correction of the material bug + +## 2023-04-20 Ronny Stanzani (molecularDNA-V11-01-03) +- Add the ability to read particles from a space phase file (csv) +- Overall code revision with clang-tidy + +## 2023-02-07 Hoang Tran (molecularDNA-V11-01-02) - correct the material bug in moleculardna example - add /scheduler/endTime 1 us in ecoli.mac and cylinders.mac -## 2022-12-12 Hoang Tran (molecularDNA-V11-00-12) -- update ecoli.mac file (Nathanael's parameters) +## 2023-01-13 Ben Morgan (molecularDNA-V11-01-01) +- Migrate data download to CERN EOS area for examples + +## 2022-12-12 Hoang Tran (molecularDNA-V11-01-00) +- update ecoli.mac file (Nathanael's parameter) ## 2022-11-15 Hoang Tran (molecularDNA-V11-00-11) - correct ecoli.mac file diff --git a/examples/extended/medical/dna/moleculardna/README b/examples/extended/medical/dna/moleculardna/README index c8127d40e3c..65a063c0dd1 100644 --- a/examples/extended/medical/dna/moleculardna/README +++ b/examples/extended/medical/dna/moleculardna/README @@ -11,8 +11,9 @@ A Geant4-DNA application for simulating DNA damage. AUTHORS -N. Lampe, M. Karamitros, D. Sakata, W. G. Shin, M. Dordevic, K. Chatzipapas, H. -N. Tran (*) et al. +N. Lampe, M. Karamitros, D. Sakata, W. G. Shin, M. Dordevic, K. Chatzipapas, +P.Dondero, R.Stanzani, H.N. Tran (*) et al. + (*) contact: tran@cenbg.in2p3.fr This example is provided by the Geant4-DNA collaboration. @@ -120,7 +121,7 @@ http://geant4-dna.org # DNA geometries are only ever placed in a chromosome /chromosome/add cylinder sphere 3000 0 0 0 nm - + # For the visualisation of DNA geometries, the following line can be used /control/execute vis.mac # More specifically, start moleculardna using the command ./molecular, to @@ -195,26 +196,39 @@ http://geant4-dna.org - ecoli.C : to plot damage from ecoli geometry - human_cell.C : to plot damage and fragments distribution from human_cell geometry - + A python macro file is provided to modify ROOT output in SDD file format: - createSDD.py : to use it, insert the command "python3 createSDD.py". - If error with root, simply + If error with root, simply source /path/to/root/bin/thisroot.(c)sh, do "pip install pyroot" and try again. - - A python macro file to calculate repair kinetics is located in the folder + + A python macro file to calculate repair kinetics is located in the folder repair_survival_models. This script can be used with the output of the mac - file human_cell (10^5 primaries) to reproduced data published in - https://arxiv.org/abs/2210.01564 + file human_cell (10^5 primaries) to reproduced data published in + https://arxiv.org/abs/2210.01564 - molecularDNArepair.py : to use it, insert the command "python3 molecularDNArepair.py". - The molecular-dna.root is also needed to run it, as produced by + The molecular-dna.root is also needed to run it, as produced by the human-cell.mac. - - A python macro file to calculate the survival probability of cells is located - in the folder repair_survival_models. This script is early released and needs to be optimized + + A python macro file to calculate the survival probability of cells is located + in the folder repair_survival_models. This script is early released and needs to be optimized to fit any data. - molecularDNAsurvival.py : to use it, insert the command "python3 molecularDNAsurnival.py". - The molecular-dna.root is needed to run it, as produced by + The molecular-dna.root is needed to run it, as produced by the human-cell.mac. - - + + +6 - PHASE SPACE READING + + The example can read a phase space file as source for the primary generation, + defined in the csv format used by the GRAS Two-Stage Analysis [1]. + An example of phase space file and the macro to read it are provided in the + "/phase_space" subdirectory. + This simple phase space file only provides 20 electrons with an energy of + 45 keV on a randomly shaped surface based on the cylinders.mac macro file. + + +Reference +[1] https://spitfire.estec.esa.int/trac/GRAS/wiki/GRAS/GRAS-05-02/UserGuideTwoStage + diff --git a/examples/extended/medical/dna/moleculardna/include/ActionInitialization.hh b/examples/extended/medical/dna/moleculardna/include/ActionInitialization.hh index 178231a6dce..3014947f0ce 100644 --- a/examples/extended/medical/dna/moleculardna/include/ActionInitialization.hh +++ b/examples/extended/medical/dna/moleculardna/include/ActionInitialization.hh @@ -38,9 +38,9 @@ class ActionInitialization : public G4VUserActionInitialization { public: - ActionInitialization(); + ActionInitialization() = default; - ~ActionInitialization() override; + ~ActionInitialization() override = default; void BuildForMaster() const override; diff --git a/examples/extended/medical/dna/moleculardna/include/AnalysisManager.hh b/examples/extended/medical/dna/moleculardna/include/AnalysisManager.hh index 04542333cb3..6a6e8e79660 100644 --- a/examples/extended/medical/dna/moleculardna/include/AnalysisManager.hh +++ b/examples/extended/medical/dna/moleculardna/include/AnalysisManager.hh @@ -107,9 +107,8 @@ struct DamageClassification class DamageRecord { public: - DamageRecord(G4String , const int64_t&, const G4int&, - const G4int&); // dousatsu - virtual ~DamageRecord(); + DamageRecord(const G4String&, int64_t, G4int, G4int); // dousatsu + ~DamageRecord(); void AddBasePairDamage(BasePairDamageRecord* bp, const G4ThreeVector& pos) { @@ -117,7 +116,7 @@ class DamageRecord fPositions.push_back(pos); }; - void AddEmptyBPDamage(const int64_t& ii); + void AddEmptyBPDamage(int64_t ii); void AddStrandHit(const G4MoleculeDefinition* mol); @@ -207,7 +206,7 @@ class BinaryTree void Insert(const DNAHit*); - DNAHit* Search(const int64_t&); + DNAHit* Search(int64_t); void Destroy_tree(); @@ -222,11 +221,11 @@ class BinaryTree void Insert_(DNAHit*, Node*); - DNAHit* Search_(const int64_t&, Node*); + DNAHit* Search_(int64_t, Node*); DNAHit* First_(Node*) const; - DNAHit* Next_(const int64_t&, Node*) const; + DNAHit* Next_(int64_t, Node*) const; Node* fRoot; }; @@ -254,11 +253,11 @@ class AnalysisManager inline void SetStrandDirectory(const G4String& dir) { fStrandDirectory = dir; }; - inline void SetFragmentGap(const G4int& gap) { fFragmentGap = gap; }; + inline void SetFragmentGap(G4int gap) { fFragmentGap = gap; }; - inline void SetDSBDistance(const G4int& gap) { fDSBDistance = gap; }; + inline void SetDSBDistance(G4int gap) { fDSBDistance = gap; }; - inline void SetChainToSave(const G4int& i) { fChainToSave = i; }; + inline void SetChainToSave(G4int i) { fChainToSave = i; }; inline void SetFileName(const G4String& name) { fFileName = name; }; diff --git a/examples/extended/medical/dna/moleculardna/include/ChromosomeHit.hh b/examples/extended/medical/dna/moleculardna/include/ChromosomeHit.hh index 8459184879e..c2fdc8ea59b 100644 --- a/examples/extended/medical/dna/moleculardna/include/ChromosomeHit.hh +++ b/examples/extended/medical/dna/moleculardna/include/ChromosomeHit.hh @@ -41,11 +41,11 @@ class ChromosomeHit : public G4VHit { public: - explicit ChromosomeHit(G4String key); + explicit ChromosomeHit(const G4String& key); ChromosomeHit(const ChromosomeHit&); - ~ChromosomeHit() override; + ~ChromosomeHit() override = default; // operators inline void* operator new(size_t); diff --git a/examples/extended/medical/dna/moleculardna/include/CylindricalChromosome.hh b/examples/extended/medical/dna/moleculardna/include/CylindricalChromosome.hh index e54911d53a4..45f6c00a4f5 100644 --- a/examples/extended/medical/dna/moleculardna/include/CylindricalChromosome.hh +++ b/examples/extended/medical/dna/moleculardna/include/CylindricalChromosome.hh @@ -41,12 +41,12 @@ class CylindricalChromosome : public VirtualChromosome { public: - CylindricalChromosome(const G4String&, G4ThreeVector, const G4double&, + CylindricalChromosome(const G4String&, const G4ThreeVector&, const G4double&, const G4double&); - CylindricalChromosome(const G4String& name, G4ThreeVector pos, + CylindricalChromosome(const G4String& name, const G4ThreeVector& pos, const G4double& radius, const G4double& height, - G4RotationMatrix rot); + const G4RotationMatrix& rot); ~CylindricalChromosome() override = default; diff --git a/examples/extended/medical/dna/moleculardna/include/DNAHashing.hh b/examples/extended/medical/dna/moleculardna/include/DNAHashing.hh index 13094d657b7..15e074c8715 100644 --- a/examples/extended/medical/dna/moleculardna/include/DNAHashing.hh +++ b/examples/extended/medical/dna/moleculardna/include/DNAHashing.hh @@ -35,6 +35,7 @@ #ifndef MolecularDNAHashing_h #define MolecularDNAHashing_h +#include #include #include #include @@ -112,7 +113,7 @@ namespace G4::hashing template constexpr uint32_t Hash(const char (&str)[len]) { - return detail::Crc32(str) ^ 0xFFFFFFFF; + return (detail::Crc32(str)) ^ 0xFFFFFFFF; } //-------------------------------------------------------------------------- diff --git a/examples/extended/medical/dna/moleculardna/include/DNAHit.hh b/examples/extended/medical/dna/moleculardna/include/DNAHit.hh index 427d5118cfd..e700c169290 100644 --- a/examples/extended/medical/dna/moleculardna/include/DNAHit.hh +++ b/examples/extended/medical/dna/moleculardna/include/DNAHit.hh @@ -48,26 +48,26 @@ class DNAHit : public G4VHit { public: // Main constructors - DNAHit(); + DNAHit() = default; - DNAHit(const molecule&, const G4int&, const G4int&, const G4int&, - const int64_t&, - G4ThreeVector, // dousatsu - G4ThreeVector, const G4double&, const G4double&, G4String, // dousatsu + DNAHit(const molecule&, G4int, G4int, G4int, + int64_t, + const G4ThreeVector&, // dousatsu + const G4ThreeVector&, const G4double&, const G4double&, const G4String&, // dousatsu const G4MolecularConfiguration*); // dousatsu // Constructor delegation // Physical Hit - DNAHit(const molecule& mol, const G4int& placement_idx, const G4int& chain, - const G4int& strand, const int64_t& bp, const G4ThreeVector& pos, + DNAHit(const molecule& mol, G4int placement_idx, G4int chain, + G4int strand, int64_t bp, const G4ThreeVector& pos, const G4ThreeVector& localpos, G4double energy, G4double d, G4String chromo) : DNAHit(mol, placement_idx, chain, strand, bp, pos, localpos, energy, d, std::move(chromo), nullptr){}; // Chemical hit - DNAHit(const molecule& mol, const G4int& placement_idx, const G4int& chain, - const G4int& strand, const int64_t& bp, const G4ThreeVector& pos, + DNAHit(const molecule& mol, G4int placement_idx, G4int chain, + G4int strand, int64_t bp, const G4ThreeVector& pos, const G4ThreeVector& localpos, G4String chromo, const G4MolecularConfiguration* radical) : DNAHit(mol, placement_idx, chain, strand, bp, pos, localpos, 0, 0, @@ -75,7 +75,7 @@ class DNAHit : public G4VHit DNAHit(const DNAHit&); - ~DNAHit() override; + ~DNAHit() override = default; // Add Method, not as an operator to prevent people making mistakes void AddHit(const DNAHit&); @@ -94,13 +94,13 @@ class DNAHit : public G4VHit // the computed quantites void SetMolecule(const molecule& mol) { fMoleculeEnum = mol; }; - void SetPlacementIdx(const G4int& place_idx) { fPlacementIdx = place_idx; }; + void SetPlacementIdx(G4int place_idx) { fPlacementIdx = place_idx; }; - void SetChainIdx(const G4int& chainidx) { fChainIdx = chainidx; }; + void SetChainIdx(G4int chainidx) { fChainIdx = chainidx; }; - void SetStrandIdx(const G4int& strandidx) { fStrandIdx = strandidx; }; + void SetStrandIdx(G4int strandidx) { fStrandIdx = strandidx; }; - void SetBasePairIdx(const int64_t& bpidx) + void SetBasePairIdx(int64_t bpidx) { fBasePairIdx = bpidx; }; // dousatsu diff --git a/examples/extended/medical/dna/moleculardna/include/EllipticalChromosome.hh b/examples/extended/medical/dna/moleculardna/include/EllipticalChromosome.hh index 462a7f4b6f7..634ef23eaa4 100644 --- a/examples/extended/medical/dna/moleculardna/include/EllipticalChromosome.hh +++ b/examples/extended/medical/dna/moleculardna/include/EllipticalChromosome.hh @@ -42,11 +42,11 @@ class EllipticalChromosome : public VirtualChromosome { public: - EllipticalChromosome(const G4String&, G4ThreeVector, const G4double&, + EllipticalChromosome(const G4String&, const G4ThreeVector&, const G4double&, const G4double&, const G4double&); - EllipticalChromosome(const G4String&, G4ThreeVector, const G4double&, - const G4double&, const G4double&, G4RotationMatrix); + EllipticalChromosome(const G4String&, const G4ThreeVector&, const G4double&, + const G4double&, const G4double&, const G4RotationMatrix&); ~EllipticalChromosome() override; diff --git a/examples/extended/medical/dna/moleculardna/include/EventAction.hh b/examples/extended/medical/dna/moleculardna/include/EventAction.hh index 8c77b5ee507..a97276782db 100644 --- a/examples/extended/medical/dna/moleculardna/include/EventAction.hh +++ b/examples/extended/medical/dna/moleculardna/include/EventAction.hh @@ -51,7 +51,7 @@ class EventAction : public G4UserEventAction public: explicit EventAction(AnalysisManager*); - ~EventAction() override; + ~EventAction() override = default; void BeginOfEventAction(const G4Event*) override; diff --git a/examples/extended/medical/dna/moleculardna/include/OctreeNode.hh b/examples/extended/medical/dna/moleculardna/include/OctreeNode.hh index 3ae71a8b0a6..e9498de438d 100644 --- a/examples/extended/medical/dna/moleculardna/include/OctreeNode.hh +++ b/examples/extended/medical/dna/moleculardna/include/OctreeNode.hh @@ -41,9 +41,9 @@ class OctreeNode { public: // Uniform divisions constructor along each axis - OctreeNode(G4ThreeVector, G4ThreeVector, G4int, OctreeNode* parent = nullptr); + OctreeNode(const G4ThreeVector&, const G4ThreeVector&, G4int, OctreeNode* parent = nullptr); - virtual ~OctreeNode(); + ~OctreeNode(); inline G4bool HasChildren() const { diff --git a/examples/extended/medical/dna/moleculardna/include/ParallelWorldPhysics.hh b/examples/extended/medical/dna/moleculardna/include/ParallelWorldPhysics.hh index 9e8c31250a5..47ca3b3c064 100644 --- a/examples/extended/medical/dna/moleculardna/include/ParallelWorldPhysics.hh +++ b/examples/extended/medical/dna/moleculardna/include/ParallelWorldPhysics.hh @@ -40,7 +40,7 @@ class ParallelWorldPhysics : public G4VPhysicsConstructor explicit ParallelWorldPhysics(const G4String& name = "ParallelWP", G4bool layerdMass = false); - ~ParallelWorldPhysics() override; + ~ParallelWorldPhysics() override = default; void ConstructProcess() override; diff --git a/examples/extended/medical/dna/moleculardna/include/PhysicsList.hh b/examples/extended/medical/dna/moleculardna/include/PhysicsList.hh index 12aaa3a0028..84de01e8189 100644 --- a/examples/extended/medical/dna/moleculardna/include/PhysicsList.hh +++ b/examples/extended/medical/dna/moleculardna/include/PhysicsList.hh @@ -40,9 +40,9 @@ class G4VPhysicsConstructor; class PhysicsList : public G4VModularPhysicsList { public: - explicit PhysicsList(const G4int& list); + explicit PhysicsList(G4int list); - ~PhysicsList() override; + ~PhysicsList() override = default; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/moleculardna/include/PrimaryGeneratorAction.hh b/examples/extended/medical/dna/moleculardna/include/PrimaryGeneratorAction.hh index b108acdfa37..42d349b11f5 100644 --- a/examples/extended/medical/dna/moleculardna/include/PrimaryGeneratorAction.hh +++ b/examples/extended/medical/dna/moleculardna/include/PrimaryGeneratorAction.hh @@ -32,22 +32,39 @@ #include "G4VUserPrimaryGeneratorAction.hh" #include "globals.hh" +#include "PrimaryGeneratorMessenger.hh" class G4GeneralParticleSource; +class PrimaryGeneratorSourceGRASCSV; +class PrimaryGeneratorMessenger; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... class PrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { - public: - PrimaryGeneratorAction(); + public: + PrimaryGeneratorAction(); - ~PrimaryGeneratorAction() override; + ~PrimaryGeneratorAction() override; - void GeneratePrimaries(G4Event* anEvent) override; + void GeneratePrimaries(G4Event* anEvent) override; - private: - G4GeneralParticleSource* fParticleGun = nullptr; + // Generate events from Phase Space file + void SetInputFileName(const G4String& filename) + { + fMyInputFileName = filename; + } + + private: + G4GeneralParticleSource* fParticleGun = nullptr; + + // parameters for input from file + G4String fMyInputFileName; + static PrimaryGeneratorSourceGRASCSV* fPrimarySource; + G4bool fFirstEvent; + + // class messenger + PrimaryGeneratorMessenger* fGunMessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/moleculardna/include/PrimaryGeneratorMessenger.hh b/examples/extended/medical/dna/moleculardna/include/PrimaryGeneratorMessenger.hh new file mode 100644 index 00000000000..c538d0a1289 --- /dev/null +++ b/examples/extended/medical/dna/moleculardna/include/PrimaryGeneratorMessenger.hh @@ -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. * +// ******************************************************************** +// +// +/// \file PrimaryGeneratorMessenger.hh +/// \brief Header file for Primary Generator Messenger for Molecular DNA simulation + +#ifndef MOLECULAR_PRIMARY_GENERATORMESSENGER_HH +#define MOLECULAR_PRIMARY_GENERATORMESSENGER_HH + +#include "G4UImessenger.hh" +#include "globals.hh" + +class PrimaryGeneratorAction; +class G4UIdirectory; +class G4UIcmdWithAString; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class PrimaryGeneratorMessenger: public G4UImessenger +{ + public: + PrimaryGeneratorMessenger(PrimaryGeneratorAction*); + ~PrimaryGeneratorMessenger(); + virtual void SetNewValue(G4UIcommand*, G4String); + + private: + PrimaryGeneratorAction* fAction = nullptr; + + // my file reader + G4UIdirectory* fMyPrimaryGenDir = nullptr; + G4UIcmdWithAString* fMyReadCmd = nullptr; +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif + diff --git a/examples/extended/medical/dna/moleculardna/include/PrimaryGeneratorSource.hh b/examples/extended/medical/dna/moleculardna/include/PrimaryGeneratorSource.hh new file mode 100644 index 00000000000..540149e9fa7 --- /dev/null +++ b/examples/extended/medical/dna/moleculardna/include/PrimaryGeneratorSource.hh @@ -0,0 +1,131 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +/// \file PrimaryGeneratorSource.hh +/// \brief Header file for Primary Generator Source class for Molecular DNA simulation + +#ifndef MOLECULAR_PRIMARY_GENERATORSOURCE_HH +#define MOLECULAR_PRIMARY_GENERATORSOURCE_HH + +#include +#include + +#include "G4ThreeVector.hh" +#include "G4ParticleDefinition.hh" +#include "G4ParticleTable.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +// - Abstract PrimaryGeneratorSource +// - pure virtual functions +// - Implementations: +// - PrimaryGeneratorSourceGRASCSV +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +// Class to handle Primary objects +class Primary +{ + public: + // Primary class constructor + Primary(){;} + + // Primary class destructor + ~Primary() = default; + + void SetName(const G4String& name) { fName = name; } + void SetName(G4int PDGnum) + { + if(PDGnum!=0) + { + G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); + G4ParticleDefinition* particle = pTable->FindParticle( PDGnum ); + fName = particle->GetParticleName(); + } + else + { + fName=""; + } + } + + G4String GetName() const { return fName; } + + void SetPosition(const G4ThreeVector& position) { fPosition = position; } + G4ThreeVector GetPosition() const { return fPosition; } + + void SetMomentum(const G4ThreeVector& momentum) { fMomentum = momentum; } + G4ThreeVector GetMomentum() const { return fMomentum; } + + void SetMomentumDirection(const G4ThreeVector& momentumDir) { fMomentumDir = momentumDir; } + G4ThreeVector GetMomentumDirection() const { return fMomentumDir; } + + void SetEnergy(const G4double& energy) { fEnergy = energy; } + G4double GetEnergy() const { return fEnergy; } + + G4ParticleDefinition* GetParticleDefinition() + { + G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); + G4ParticleDefinition* particle = pTable->FindParticle( fName.data() ); + return particle; + } + + void Print() + { + G4cout << " *** " << fName << " *** " << G4endl; + G4cout << " * Position: " << fPosition << G4endl; + G4cout << " * Momentum Direction: " << fMomentumDir << G4endl; + G4cout << " * Energy: " << fEnergy << G4endl; + G4cout << " *** *** ***" << G4endl; + } + + private: + + G4String fName; + G4ThreeVector fPosition; + G4ThreeVector fMomentum; + G4ThreeVector fMomentumDir; + G4double fEnergy; + +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +class PrimaryGeneratorSource +{ + public: + + // PrimaryGeneratorSource class destructor + virtual ~PrimaryGeneratorSource() = default; + + // Define Primary class within PrimaryGeneratorSource + virtual Primary* GetPrimary() = 0; + virtual void SetBufferSize( G4int ) = 0; + virtual void SetnParticles( G4int ) = 0; + +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif + diff --git a/examples/extended/medical/dna/moleculardna/include/PrimaryGeneratorSourceGRASCSV.hh b/examples/extended/medical/dna/moleculardna/include/PrimaryGeneratorSourceGRASCSV.hh new file mode 100644 index 00000000000..4c7cdaec48d --- /dev/null +++ b/examples/extended/medical/dna/moleculardna/include/PrimaryGeneratorSourceGRASCSV.hh @@ -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. * +// ******************************************************************** +// +// +/// \file PrimaryGeneratorSourceGRASCSV.hh +/// \brief Header file for Primary Generator source class implementation for GRAS CSV phase space for Molecular DNA simulation + +#ifndef MOLECULAR_PRIMARY_GENERATORSOURCEGRASCSV_HH +#define MOLECULAR_PRIMARY_GENERATORSOURCEGRASCSV_HH + +#include +#include + +#include "G4ThreeVector.hh" +#include "G4ParticleDefinition.hh" +#include "G4ParticleTable.hh" +#include "PrimaryGeneratorSource.hh" + +class PrimaryGeneratorSourceGRASCSV : public PrimaryGeneratorSource +{ + public: + + PrimaryGeneratorSourceGRASCSV(const G4String& filename); + ~PrimaryGeneratorSourceGRASCSV(); + + // Define Primary class within PrimaryGeneratorSourceGRASCSV + Primary* GetPrimary(); + + void SetBufferSize(G4int bufferSize){ fBufferSize = bufferSize; } + void SetnParticles(G4int nParticles){ fnParticles = nParticles; } + G4double RecomputeNParticles(); + + G4int nLineCounter; // number the line read from file + + private: + std::ifstream fInputFile; + std::list fPrimaryList; + G4int fBufferSize = 100; + G4int fnParticles = 2; // number of particles to be generated + G4bool fEndOfFile; + +}; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/medical/dna/moleculardna/include/RodChromosome.hh b/examples/extended/medical/dna/moleculardna/include/RodChromosome.hh index 97c2489e5ff..ff7d3e5a97f 100644 --- a/examples/extended/medical/dna/moleculardna/include/RodChromosome.hh +++ b/examples/extended/medical/dna/moleculardna/include/RodChromosome.hh @@ -42,11 +42,11 @@ class RodChromosome : public VirtualChromosome { public: - explicit RodChromosome(const G4String&, G4ThreeVector, const G4double&, + explicit RodChromosome(const G4String&, const G4ThreeVector&, const G4double&, const G4double&); - explicit RodChromosome(const G4String&, G4ThreeVector, const G4double&, - const G4double&, G4RotationMatrix); + explicit RodChromosome(const G4String&, const G4ThreeVector&, const G4double&, + const G4double&, const G4RotationMatrix&); ~RodChromosome() override; diff --git a/examples/extended/medical/dna/moleculardna/include/RunAction.hh b/examples/extended/medical/dna/moleculardna/include/RunAction.hh index 5a15f6da65c..c45081682d0 100644 --- a/examples/extended/medical/dna/moleculardna/include/RunAction.hh +++ b/examples/extended/medical/dna/moleculardna/include/RunAction.hh @@ -43,7 +43,7 @@ class RunAction : public G4UserRunAction public: explicit RunAction(AnalysisManager*); - ~RunAction() override; + ~RunAction() override = default; public: void BeginOfRunAction(const G4Run*) override; diff --git a/examples/extended/medical/dna/moleculardna/include/SphericalChromosome.hh b/examples/extended/medical/dna/moleculardna/include/SphericalChromosome.hh index cde529fd8f7..2265ac42556 100644 --- a/examples/extended/medical/dna/moleculardna/include/SphericalChromosome.hh +++ b/examples/extended/medical/dna/moleculardna/include/SphericalChromosome.hh @@ -40,10 +40,10 @@ class SphericalChromosome : public VirtualChromosome { public: - SphericalChromosome(const G4String&, G4ThreeVector, const G4double&); + SphericalChromosome(const G4String&, const G4ThreeVector&, const G4double&); - SphericalChromosome(const G4String&, G4ThreeVector, const G4double&, - G4RotationMatrix); + SphericalChromosome(const G4String&, const G4ThreeVector&, const G4double&, + const G4RotationMatrix&); ~SphericalChromosome() override; @@ -59,7 +59,7 @@ class SphericalChromosome : public VirtualChromosome inline void SetRotation(const G4RotationMatrix& rot) { - fRotation = rot; + fRotation = rot; fInverseRotation = fRotation.inverse(); }; diff --git a/examples/extended/medical/dna/moleculardna/include/StackingAction.hh b/examples/extended/medical/dna/moleculardna/include/StackingAction.hh index 159b4a000f9..cff5fc8e521 100644 --- a/examples/extended/medical/dna/moleculardna/include/StackingAction.hh +++ b/examples/extended/medical/dna/moleculardna/include/StackingAction.hh @@ -39,9 +39,9 @@ class StackingAction : public G4UserStackingAction { public: - StackingAction(); + StackingAction() = default; - ~StackingAction() override; + ~StackingAction() override = default; void NewStage() override; }; diff --git a/examples/extended/medical/dna/moleculardna/include/SteppingAction.hh b/examples/extended/medical/dna/moleculardna/include/SteppingAction.hh index 4479fb0c8bb..d55053c26bc 100644 --- a/examples/extended/medical/dna/moleculardna/include/SteppingAction.hh +++ b/examples/extended/medical/dna/moleculardna/include/SteppingAction.hh @@ -49,7 +49,7 @@ class SteppingAction : public G4UserSteppingAction public: explicit SteppingAction(EventAction*); - ~SteppingAction() override; + ~SteppingAction() override = default; void UserSteppingAction(const G4Step*) override; diff --git a/examples/extended/medical/dna/moleculardna/include/VirtualChromosome.hh b/examples/extended/medical/dna/moleculardna/include/VirtualChromosome.hh index dbeafda080d..9294c14e190 100644 --- a/examples/extended/medical/dna/moleculardna/include/VirtualChromosome.hh +++ b/examples/extended/medical/dna/moleculardna/include/VirtualChromosome.hh @@ -35,7 +35,7 @@ class VirtualChromosome { public: - explicit VirtualChromosome(G4String ); + explicit VirtualChromosome(const G4String&); virtual ~VirtualChromosome() = default; diff --git a/examples/extended/medical/dna/moleculardna/moleculardna.out b/examples/extended/medical/dna/moleculardna/moleculardna.out index 84bf359d3ae..8595537df23 100644 --- a/examples/extended/medical/dna/moleculardna/moleculardna.out +++ b/examples/extended/medical/dna/moleculardna/moleculardna.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -567,20 +567,20 @@ Start closing geometry. G4GeometryManager::ReportVoxelStats -- Voxel Statistics Total memory consumed for geometry optimisation: 84655 kByte - Total CPU time elapsed for geometry optimisation: 60 seconds + Total CPU time elapsed for geometry optimisation: 55 seconds Voxelisation: top CPU users: Percent Total CPU System CPU Memory Volume ------- ---------- ---------- -------- ---------- - 49.95 29.72 0.07 42138k CellLogical - 49.92 29.70 0.08 42138k DNAPhysLV + 50.06 27.55 0.09 42138k CellLogical + 49.79 27.40 0.07 42138k DNAPhysLV 0.07 0.04 0.00 380k prism Voxelisation: top memory users: Percent Memory Heads Nodes Pointers Total CPU Volume ------- -------- ------ ------ -------- ---------- ---------- - 49.78 42137k 311671 314256 703064 29.72 CellLogical - 49.78 42137k 311671 314256 703064 29.70 DNAPhysLV + 49.78 42137k 311671 314256 703064 27.55 CellLogical + 49.78 42137k 311671 314256 703064 27.40 DNAPhysLV 0.45 379k 1273 3780 14482 0.04 prism ### Run 0 starts. AnalysisManager::Initialize() GetRunID : 0 @@ -597,7 +597,7 @@ DNAIndependentReactionTimeModel will be used ========================== Run terminated. Run Summary Number of events processed : 2 - User=0.350000s Real=0.357864s Sys=0.000000s + User=0.320000s Real=0.317723s Sys=0.000000s ... write file : molecular-dna.root - done ... close file : molecular-dna.root - done G4 kernel has come to Quit state. diff --git a/examples/extended/medical/dna/moleculardna/phase_space/phase_space.csv b/examples/extended/medical/dna/moleculardna/phase_space/phase_space.csv new file mode 100644 index 00000000000..f2bcf116156 --- /dev/null +++ b/examples/extended/medical/dna/moleculardna/phase_space/phase_space.csv @@ -0,0 +1,94 @@ +'*', 4, 3, 0, 0, 0, 0, 0, 20003 +'TWO-STAGE PARTICLE PHASE SPACE OUTPUT FILE: HEADER INFORMATION' +'GRAS Version: UNDEFINED' +'Generated on: 2023-01-25.18:39:58' +'End of Block' +'*', 8, 3, 4, 0, 0, 0, 0, 20002 +'TWO-STAGE PARTICLE PHASE SPACE OUTPUT FILE: RUN INFORMATION' +'GRAS Version: UNDEFINED' +'Generated on: 2023-01-25.18:39:58' +'EVENT_ID_MAX', 1, 2e+07, ' ' +'EVENT_ID_MIN', 1, 0, ' ' +'EVENT_MODULO', 1, 1000, ' ' +'TOTAL_EVENTS', 1, 2e+07, ' ' +'End of Block' +'*', 13, 3, 6, 0, 3, 14, 4, 20001 +'TWO-STAGE PARTICLE PHASE SPACE OUTPUT FILE: VOLUME INFORMATION' +'GRAS Version: UNDEFINED' +'Generated on: 2023-01-25.18:39:58' +'NUM_ANTECEDENTS', 1, 2, ' ' +'NUM_VOLUMES', 1, 1, ' ' +'PV_COPY_NO', 3, 0, 0, 0, ' ' +'PV_INSTANCE_ID', 3, 1, 422, 783, ' ' +'PV_NAME', -3,'dummy','dummy_vol','WorldVOL_PV' +'SOLID_VOLUME_TYPE', -3,'solid','solid','solid' +'primary','', 1,'Is a primary PV' +'instanceID','', 1,'Instance ID of PV' +'transform','', 12,'Rotation and translation of PV' + 1, 1, 1.00000000000000000E+00, -0.00000000000000000E+00, 0.00000000000000000E+00, 0.00000000000000000E+00, 0.00000000000000000E+00, -1.60812264967663635E-16, -1.00000000000000000E+00, 0.00000000000000000E+00, 0.00000000000000000E+00, 1.00000000000000000E+00, -1.60812264967663635E-16, 0.00000000000000000E+00 + 0, 422, 5.55111512312578270E-17, 1.00000000000000000E+00, -1.16573417585641437E-15, -1.55362717181638205E-14, 6.16297582203915473E-32, 1.11022302462515654E-15, 1.00000000000000000E+00, -1.95198763321999999E-05, 1.00000000000000000E+00, -1.11022302462515703E-16, -5.55111512312576976E-17, -2.79877000000000407E+02 + 0, 783, 1.00000000000000000E+00, -0.00000000000000000E+00, 0.00000000000000000E+00, 0.00000000000000000E+00, -0.00000000000000000E+00, 1.00000000000000000E+00, -0.00000000000000000E+00, 0.00000000000000000E+00, 0.00000000000000000E+00, -0.00000000000000000E+00, 1.00000000000000000E+00, 0.00000000000000000E+00 + -1, 0, 5.55111512312578270E-17, 1.00000000000000000E+00, -1.16573417585641437E-15, -1.55362717181638205E-14, -1.00000000000000000E+00, 1.11022302462515531E-16, -1.05301113736405932E-16, 2.79877000000000407E+02, -1.60812264967663586E-16, 1.11022302462515654E-15, 1.00000000000000000E+00, -1.95198762871923452E-05 +'End of Block' +'*', 18, 3, 6, 0, 8, 8, 1, 20000 +'TWO-STAGE PARTICLE PHASE SPACE OUTPUT FILE: VOLUME INFORMATION' +'GRAS Version: UNDEFINED' +'Generated on: 2023-01-25.18:39:58' +'NUM_ANTECEDENTS', 1, 2, ' ' +'NUM_VOLUMES', 1, 1, ' ' +'PV_COPY_NO', 3, 0, 0, 0, ' ' +'PV_INSTANCE_ID', 3, 1, 422, 783, ' ' +'PV_NAME', -3,'dummy','dummy','dummy' +'SOLID_VOLUME_TYPE', -3,'solid','solid','solid' +'primary','', 1,'Is a primary PV' +'instanceID','', 1,'Instance ID of PV' +'X-min','mm', 1,'X-min extent of solid volume' +'X-max','mm', 1,'X-max extent of solid volume' +'Y-min','mm', 1,'Y-min extent of solid volume' +'Y-max','mm', 1,'Y-max extent of solid volume' +'Z-min','mm', 1,'Z-min extent of solid volume' +'Z-max','mm', 1,'Z-max extent of solid volume' + 1, 1, -2.86957580566406250E+02, 2.70750396728515625E+02, -1.36028457641601562E+02, 1.55231750488281250E+02, -8.78602294921875000E+02, 8.81444763183593750E+02 +'End of Block' +'*', 20, 3, 0, 0, 16, 24, 1, 19864 +'TWO-STAGE PARTICLE PHASE SPACE OUTPUT FILE: PARTICLE PHASE-SPACE INFORMATION' +'GRAS Version: UNDEFINED' +'Generated on: 2023-01-25.18:39:58' +'eventID','', 1,'Event ID' +'trackID','', 1,'Track ID' +'PDGEncoding','', 1,'PDG Encoding of particle type' +'Z','', 1,'Atomic number of nucleus' +'A','', 1,'Nucleon number of nucleus' +'Q','', 1,'Charge' +'excitation','MeV', 1,'Nuclear excitation energy' +'weight','', 1,'Particle weight' +'KE','MeV', 1,'Kinetic energy' +'T','s', 1,'Time coordinate' +'XG','mm', 3,'Position coordinate (global)' +'XL','mm', 3,'Position coordinate (local)' +'VG','', 3,'Direction cosine (global)' +'VL','', 3,'Direction cosine (local)' +'D','mm', 1,'Distance from last volume/scatter' +'instanceID','', 1,'Instance ID of PV' + 1, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, -0.00035587, -0.00017917, 6.8957e-06, -1, -1, -1, -0.85905, 0.42389, 0.28697, -1, -1, -1, 0, 1 + 2, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, -0.000043831, 1.5602e-06, 0.00016341, -1, -1, -1, -0.47292, -0.44752, -0.759, -1, -1, -1, 0, 1 + 3, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, 0.00018105, -0.00029968, 0.00011239, -1, -1, -1, -0.15002, -0.015256, 0.98856, -1, -1, -1, 0, 1 + 4, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, 0.00017949, -0.00021638, 0.00017033, -1, -1, -1, 0.69824, -0.42922, -0.57291, -1, -1, -1, 0, 1 + 5, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, 0.000043187, -0.00043292, -0.000078418, -1, -1, -1, 0.56671, -0.53972, 0.62252, -1, -1, -1, 0, 1 + 6, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, 0.00017268, 0.00005585, -0.00008954, -1, -1, -1, 0.63435, -0.16466, -0.75531, -1, -1, -1, 0, 1 + 7, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, -0.00021239, 0.0002013, -0.000012429, -1, -1, -1, -0.72814, 0.59416, 0.34174, -1, -1, -1, 0, 1 + 8, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, -0.00021239, 0.0002013, -0.000012429, -1, -1, -1, -0.72814, 0.59416, 0.34174, -1, -1, -1, 0, 1 + 9, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, 0.00001768, -0.00019291, -0.0002582, -1, -1, -1, -0.020055, -0.99076, -0.1341, -1, -1, -1, 0, 1 + 10, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, -0.000037393, -0.00013772, 0.00027996, -1, -1, -1, 0.66721, -0.44127, 0.60009, -1, -1, -1, 0, 1 + 11, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, -0.00011527, -0.000077819, 0.00025144, -1, -1, -1, 0.84832, 0.30664, -0.43166, -1, -1, -1, 0, 1 + 12, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, -0.00031577, 0.000025513, 0.0002389, -1, -1, -1, 0.12927, 0.9804, 0.14865, -1, -1, -1, 0, 1 + 13, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, 0.00030609, -0.00017451, -2.1749e-06, -1, -1, -1, -0.94726, 0.15412, 0.28097, -1, -1, -1, 0, 1 + 14, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, -0.00028417, 0.00001068, 0.00034976, -1, -1, -1, 0.060058, -0.99761, 0.034061, -1, -1, -1, 0, 1 + 15, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, -0.000027181, 0.00028436, -0.0003263, -1, -1, -1, -0.24936, 0.37933, 0.89103, -1, -1, -1, 0, 1 + 16, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, 0.000072198, -0.00036053, 0.00024016, -1, -1, -1, -0.77038, -0.036401, -0.63655, -1, -1, -1, 0, 1 + 17, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, -0.00020441, 0.000017435, -0.00030623, -1, -1, -1, -0.034493, 0.80103, -0.59763, -1, -1, -1, 0, 1 + 18, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, -0.000047118, 0.00037274, 0.000078782, -1, -1, -1, 0.076968, 0.58836, 0.80493, -1, -1, -1, 0, 1 + 19, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, 0.00019712, -0.00012245, -0.00031086, -1, -1, -1, -0.86022, -0.50985, -0.0085563, -1, -1, -1, 0, 1 + 20, 1, 11, 1, 1, -999, -999, -999, 0.0045, 0.00e+00, -0.00047218, 6.3749e-07, 0.000083075, -1, -1, -1, 0.3194, 0.22045, 0.92162, -1, -1, -1, 0, 1 +'End of Block' +'End of File' \ No newline at end of file diff --git a/examples/extended/medical/dna/moleculardna/phase_space/phase_space_test.mac b/examples/extended/medical/dna/moleculardna/phase_space/phase_space_test.mac new file mode 100644 index 00000000000..5b00a432cd6 --- /dev/null +++ b/examples/extended/medical/dna/moleculardna/phase_space/phase_space_test.mac @@ -0,0 +1,78 @@ +#/process/dna/e-SolvationSubType Meesungnoen2002 +#/process/dna/e-SolvationSubType Ritchie1994 +#/process/dna/e-SolvationSubType Terrisol1990 + +/run/numberOfThreads 1 +#/run/verbose 2 +#/control/verbose 1 +#/dnageom/verbose 1 +/tracking/verbose 2 + +/chem/activate true +/scheduler/verbose 0 +/material/verbose 2 + +/world/worldSize 10200 nm +/cell/radiusSize 3 3 3 um + +/dnageom/setSmartVoxels 1 +/dnageom/checkOverlaps false +/scheduler/endTime 1 us + +/dnageom/radicalKillDistance 9 nm +/dnageom/interactionDirectRange 7 angstrom + +/dnageom/placementSize 30 30 100 nm +/dnageom/fractalScaling 1 1 1 nm +/dnageom/definitionFile geometries/prisms200k_r3000.txt +/dnageom/placementVolume prism geometries/straight-216-0.txt + + +/dnageom/setVoxelPlacementAnglesAsMultiplesOfPi false +/dnageom/useCustomMoleculeSizes false + +# used default moleculeSize +#/dnageom/moleculeSize + +/dnageom/drawCellVolumes false +/dnageom/activateHistoneScavenging true + + +/chromosome/add cylinder sphere 3000 0 0 0 nm + +# Damage Model +/dnadamage/directDamageLower 17.5 eV +/dnadamage/directDamageUpper 17.5 eV + +/dnadamage/indirectOHBaseChance 1.0 +/dnadamage/indirectOHStrandChance 0.65 +/dnadamage/inductionOHChance 0.0 + +/dnadamage/indirectHBaseChance 1.0 +/dnadamage/indirectHStrandChance 0.65 +/dnadamage/inductionHChance 0.00 + +/dnadamage/indirectEaqBaseChance 1.0 +/dnadamage/indirectEaqStrandChance 0.65 +/dnadamage/inductionEaqChance 0.00 + +/analysisDNA/saveStrands false +/analysisDNA/fragmentGap 0 # do not join +#/analysisDNA/diagnosticChain + +/run/initialize + +# Uncomment the next line to visualize cylinder DNA geometry +#/control/execute vis.mac + +# unit tests +#/dnatests/uniqueid +#/dnatests/basepairs +#/dnatests/chromosome +#/analysisDNA/testClassifier +# end unit tests + +/run/printProgress 100 + +/primarygenerator/inputFile phase_space.csv +/run/beamOn 2 diff --git a/examples/extended/medical/dna/moleculardna/src/ActionInitialization.cc b/examples/extended/medical/dna/moleculardna/src/ActionInitialization.cc index b96d4f8ced1..6e48117e5c7 100644 --- a/examples/extended/medical/dna/moleculardna/src/ActionInitialization.cc +++ b/examples/extended/medical/dna/moleculardna/src/ActionInitialization.cc @@ -39,16 +39,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ActionInitialization::ActionInitialization() - : G4VUserActionInitialization() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -ActionInitialization::~ActionInitialization() = default; - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void ActionInitialization::BuildForMaster() const { auto man = new AnalysisManager(); diff --git a/examples/extended/medical/dna/moleculardna/src/AnalysisManager.cc b/examples/extended/medical/dna/moleculardna/src/AnalysisManager.cc index d2bca99288d..f373e96220e 100644 --- a/examples/extended/medical/dna/moleculardna/src/AnalysisManager.cc +++ b/examples/extended/medical/dna/moleculardna/src/AnalysisManager.cc @@ -715,7 +715,7 @@ void BinaryTree::Insert(const DNAHit* hit) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -DNAHit* BinaryTree::Search(const int64_t& index) // dousatsu +DNAHit* BinaryTree::Search(int64_t index) // dousatsu { return Search_(index, fRoot); } @@ -797,7 +797,7 @@ void BinaryTree::Insert_(DNAHit* hit, Node* node) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -DNAHit* BinaryTree::Search_(const int64_t& key, Node* node) // dousatsu check +DNAHit* BinaryTree::Search_(int64_t key, Node* node) // dousatsu check { if(node != nullptr) { @@ -880,7 +880,7 @@ DNAHit* BinaryTree::Next(const DNAHit* hit) const // Looks more complicated than it is // The interface to these functions with integer keys rather than node // objects makes this look more complicated than standard algorithms -DNAHit* BinaryTree::Next_(const int64_t& key, Node* node) const // dousatsu +DNAHit* BinaryTree::Next_(int64_t key, Node* node) const // dousatsu { if(key < node->fkey) { @@ -929,9 +929,9 @@ const char* DamageRecord::fHitNoDamageChar = "~"; const char* DamageRecord::fNotHitChar = "-"; const char* DamageRecord::fBothDamageChar = "X"; -DamageRecord::DamageRecord(G4String name, const int64_t& startIndex, - const G4int& place_idx, const G4int& chain_idx) - : fName(std::move(name)) +DamageRecord::DamageRecord(const G4String& name, int64_t startIndex, + G4int place_idx, G4int chain_idx) + : fName(name) , fStartIndex(startIndex) , fStartPlacement(place_idx) , fChainIdx(chain_idx) @@ -2193,7 +2193,7 @@ void AnalysisManager::TestClassification() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void DamageRecord::AddEmptyBPDamage(const int64_t& ii) // dousatsu +void DamageRecord::AddEmptyBPDamage(int64_t ii) // dousatsu { auto basePairNumber = ii; while(basePairNumber > 0) diff --git a/examples/extended/medical/dna/moleculardna/src/ChromosomeHit.cc b/examples/extended/medical/dna/moleculardna/src/ChromosomeHit.cc index d0cf66f2291..322c0f9a365 100644 --- a/examples/extended/medical/dna/moleculardna/src/ChromosomeHit.cc +++ b/examples/extended/medical/dna/moleculardna/src/ChromosomeHit.cc @@ -33,21 +33,16 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4ThreadLocal G4Allocator* MolecularChromosomeHitAllocator = - nullptr; +G4ThreadLocal G4Allocator* MolecularChromosomeHitAllocator = nullptr; -ChromosomeHit::ChromosomeHit(G4String name) - : G4VHit() - , fName(std::move(name)) +ChromosomeHit::ChromosomeHit(const G4String& name) + : fName(name) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ChromosomeHit::~ChromosomeHit() = default; - ChromosomeHit::ChromosomeHit(const ChromosomeHit& right) - : G4VHit() - , fName(right.GetName()) + : fName(right.GetName()) , fEdepChromosome(right.GetChromosomeEdep()) , fEdepDNA(right.GetDNAEdep()) { diff --git a/examples/extended/medical/dna/moleculardna/src/ChromosomeMessenger.cc b/examples/extended/medical/dna/moleculardna/src/ChromosomeMessenger.cc index 8877a80ee2d..c99faca4f22 100644 --- a/examples/extended/medical/dna/moleculardna/src/ChromosomeMessenger.cc +++ b/examples/extended/medical/dna/moleculardna/src/ChromosomeMessenger.cc @@ -33,8 +33,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ChromosomeMessenger::ChromosomeMessenger(ChromosomeMapper* mapper) - : G4UImessenger() - , fpChromosomeMapper(mapper) + : fpChromosomeMapper(mapper) , fpChromosomeDirectory(new G4UIdirectory("/chromosome/")) , fpAddChromosome(new G4UIcmdWithAString("/chromosome/add", this)) , fpSavePlotData(new G4UIcmdWithAString("/chromosome/plotData", this)) diff --git a/examples/extended/medical/dna/moleculardna/src/CylindricalChromosome.cc b/examples/extended/medical/dna/moleculardna/src/CylindricalChromosome.cc index 92d7a2829ab..a946c8de5e3 100644 --- a/examples/extended/medical/dna/moleculardna/src/CylindricalChromosome.cc +++ b/examples/extended/medical/dna/moleculardna/src/CylindricalChromosome.cc @@ -42,11 +42,11 @@ const G4String CylindricalChromosome::fShape = "cyl"; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... CylindricalChromosome::CylindricalChromosome(const G4String& name, - G4ThreeVector pos, + const G4ThreeVector& pos, const G4double& radius, const G4double& height) : VirtualChromosome(name) - , fCenter(std::move(pos)) + , fCenter(pos) , fRadius(radius) , fHeight(height) , fRotation(G4RotationMatrix()) @@ -57,15 +57,15 @@ CylindricalChromosome::CylindricalChromosome(const G4String& name, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... CylindricalChromosome::CylindricalChromosome(const G4String& name, - G4ThreeVector pos, + const G4ThreeVector& pos, const G4double& radius, const G4double& height, - G4RotationMatrix rot) + const G4RotationMatrix& rot) : VirtualChromosome(name) - , fCenter(std::move(pos)) + , fCenter(pos) , fRadius(radius) , fHeight(height) - , fRotation(std::move(rot)) + , fRotation(rot) { fInverseRotation = fRotation.inverse(); } diff --git a/examples/extended/medical/dna/moleculardna/src/DNAGeometry.cc b/examples/extended/medical/dna/moleculardna/src/DNAGeometry.cc index 997e0ce6e7d..87c2af8217d 100644 --- a/examples/extended/medical/dna/moleculardna/src/DNAGeometry.cc +++ b/examples/extended/medical/dna/moleculardna/src/DNAGeometry.cc @@ -59,7 +59,6 @@ G4bool compareLVByName::operator()(const G4LogicalVolume* lhs, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DNAGeometry::DNAGeometry() - : G4VDNAMolecularGeometry() { fpMessenger = new DNAGeometryMessenger(this); fpChromosomeMapper = new ChromosomeMapper(); diff --git a/examples/extended/medical/dna/moleculardna/src/DNAHashing.cc b/examples/extended/medical/dna/moleculardna/src/DNAHashing.cc index 431f6196c30..4de59d4a847 100644 --- a/examples/extended/medical/dna/moleculardna/src/DNAHashing.cc +++ b/examples/extended/medical/dna/moleculardna/src/DNAHashing.cc @@ -75,7 +75,7 @@ namespace G4::hashing size_t Hash(const char* str, unsigned int seed) { size_t hash = seed; - while(*str) + while(*str != 0) { hash = hash * 101 + *str++; } diff --git a/examples/extended/medical/dna/moleculardna/src/DNAHit.cc b/examples/extended/medical/dna/moleculardna/src/DNAHit.cc index 63200c55254..80de3876eff 100644 --- a/examples/extended/medical/dna/moleculardna/src/DNAHit.cc +++ b/examples/extended/medical/dna/moleculardna/src/DNAHit.cc @@ -33,31 +33,25 @@ G4ThreadLocal G4Allocator* MolecularDNAHitAllocator = nullptr; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -DNAHit::DNAHit() - : G4VHit() -{} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -DNAHit::DNAHit(const molecule& mol, const G4int& placement_idx, // ORG - const G4int& chain, const G4int& strand, // ORG - const int64_t& bp, G4ThreeVector pos, - G4ThreeVector localpos, // dousatsu - const G4double& energy, const G4double& d, G4String chromo, +DNAHit::DNAHit(const molecule& mol, G4int placement_idx, // ORG + G4int chain, G4int strand, // ORG + int64_t bp, const G4ThreeVector& pos, + const G4ThreeVector& localpos, // dousatsu + const G4double& energy, const G4double& d, const G4String& chromo, const G4MolecularConfiguration* radical) - : G4VHit() - , fMoleculeEnum(mol) + : fMoleculeEnum(mol) , fPlacementIdx(placement_idx) , fChainIdx(chain) , fStrandIdx(strand) , fBasePairIdx(bp) - , fPosition(std::move(pos)) - , fLocalPosition(std::move(localpos)) + , fPosition(pos) + , fLocalPosition(localpos) , fEnergy(energy) , fDistance(d) - , fChromosome(std::move(chromo)) + , fChromosome(chromo) , fRadical(radical) { // Computed quantities @@ -65,13 +59,13 @@ DNAHit::DNAHit(const molecule& mol, const G4int& placement_idx, // ORG { if((fMoleculeEnum == SUGAR) || (fMoleculeEnum == PHOSPHATE)) { - fStrand1Rad = fRadical; + fStrand1Rad = fRadical; fStrand1Energy = fEnergy; } else if((fMoleculeEnum == CYTOSINE) || (fMoleculeEnum == GUANINE) || (fMoleculeEnum == ADENINE) || (fMoleculeEnum == THYMINE)) { - fBase1Rad = fRadical; + fBase1Rad = fRadical; fBP1Energy = fEnergy; } else @@ -84,13 +78,13 @@ DNAHit::DNAHit(const molecule& mol, const G4int& placement_idx, // ORG { if((fMoleculeEnum == SUGAR) || (fMoleculeEnum == PHOSPHATE)) { - fStrand2Rad = fRadical; + fStrand2Rad = fRadical; fStrand2Energy = fEnergy; } else if((fMoleculeEnum == CYTOSINE) || (fMoleculeEnum == GUANINE) || (fMoleculeEnum == ADENINE) || (fMoleculeEnum == THYMINE)) { - fBase2Rad = fRadical; + fBase2Rad = fRadical; fBP2Energy = fEnergy; } else @@ -103,10 +97,6 @@ DNAHit::DNAHit(const molecule& mol, const G4int& placement_idx, // ORG //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -DNAHit::~DNAHit() = default; - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - // This method is used to combine the computed quantities of two hits. // It keeps the settable parameters of the current hit, but the computed // parameters come from both, letting the hit reflect what happened on each @@ -136,7 +126,6 @@ void DNAHit::AddHit(const DNAHit& right) } DNAHit::DNAHit(const DNAHit& right) - : G4VHit() { this->SetPlacementIdx(right.GetPlacementIdx()); this->SetMolecule(right.GetMolecule()); @@ -153,12 +142,12 @@ DNAHit::DNAHit(const DNAHit& right) // Computed Quantities, no setters. this->fStrand1Energy = right.GetStrand1Energy(); this->fStrand2Energy = right.GetStrand2Energy(); - this->fBP1Energy = right.GetBP1Energy(); - this->fBP2Energy = right.GetBP2Energy(); - this->fStrand1Rad = right.GetStrand1Rad(); - this->fBase1Rad = right.GetBase1Rad(); - this->fStrand2Rad = right.GetStrand2Rad(); - this->fBase2Rad = right.GetBase2Rad(); + this->fBP1Energy = right.GetBP1Energy(); + this->fBP2Energy = right.GetBP2Energy(); + this->fStrand1Rad = right.GetStrand1Rad(); + this->fBase1Rad = right.GetBase1Rad(); + this->fStrand2Rad = right.GetStrand2Rad(); + this->fBase2Rad = right.GetBase2Rad(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -179,12 +168,12 @@ const DNAHit& DNAHit::operator=(const DNAHit& right) this->fStrand1Energy = right.GetStrand1Energy(); this->fStrand2Energy = right.GetStrand2Energy(); - this->fBP1Energy = right.GetBP1Energy(); - this->fBP2Energy = right.GetBP2Energy(); - this->fStrand1Rad = right.GetStrand1Rad(); - this->fBase1Rad = right.GetBase1Rad(); - this->fStrand2Rad = right.GetStrand2Rad(); - this->fBase2Rad = right.GetBase2Rad(); + this->fBP1Energy = right.GetBP1Energy(); + this->fBP2Energy = right.GetBP2Energy(); + this->fStrand1Rad = right.GetStrand1Rad(); + this->fBase1Rad = right.GetBase1Rad(); + this->fStrand2Rad = right.GetStrand2Rad(); + this->fBase2Rad = right.GetBase2Rad(); return *this; } diff --git a/examples/extended/medical/dna/moleculardna/src/DamageModel.cc b/examples/extended/medical/dna/moleculardna/src/DamageModel.cc index c6473577898..009722ef0ca 100644 --- a/examples/extended/medical/dna/moleculardna/src/DamageModel.cc +++ b/examples/extended/medical/dna/moleculardna/src/DamageModel.cc @@ -40,48 +40,68 @@ DamageModel::DamageModel() G4bool DamageModel::IsDirectStrandBreak(const G4double& d) const { - if(d < fDirectDmgLower){ - return false; + G4bool bool_val = false; + if(d < fDirectDmgLower) + { + bool_val = false; } - else if(d >= fDirectDmgUpper){ - return true; + else if(d >= fDirectDmgUpper) + { + bool_val = true; } - else { - return (G4UniformRand() < - ((d - fDirectDmgLower) / (fDirectDmgUpper - fDirectDmgLower))); + else + { + bool_val = (G4UniformRand() < ((d - fDirectDmgLower) / (fDirectDmgUpper - fDirectDmgLower))); } + return bool_val; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool DamageModel::IsIndirectBaseDamage( - const G4MolecularConfiguration* mol) const +G4bool DamageModel::IsIndirectBaseDamage(const G4MolecularConfiguration* mol) const { - if(mol->GetDefinition() == fOH){ - return G4UniformRand() < fBaseOH; - }else if(mol->GetDefinition() == fH){ - return G4UniformRand() < fBaseH; - }else if(mol->GetDefinition() == fe_aq){ - return G4UniformRand() < fBaseEaq; - }else{ - return false; + G4bool bool_val = false; + if(mol->GetDefinition() == fOH) + { + bool_val = (G4UniformRand() < fBaseOH); + } + else if(mol->GetDefinition() == fH) + { + bool_val = (G4UniformRand() < fBaseH); } + else if(mol->GetDefinition() == fe_aq) + { + bool_val = (G4UniformRand() < fBaseEaq); + } + else + { + bool_val = false; + } + return bool_val; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool DamageModel::IsIndirectStrandDamage( - const G4MolecularConfiguration* mol) const +G4bool DamageModel::IsIndirectStrandDamage(const G4MolecularConfiguration* mol) const { - if(mol->GetDefinition() == fOH){ - return G4UniformRand() < fStrandOH; - }else if(mol->GetDefinition() == G4Hydrogen::Definition()){ - return G4UniformRand() < fStrandH; - }else if(mol->GetDefinition() == G4Electron_aq::Definition()){ - return G4UniformRand() < fStrandEaq; - }else{ - return false; + G4bool bool_val = false; + if(mol->GetDefinition() == fOH) + { + bool_val = (G4UniformRand() < fStrandOH); } + else if(mol->GetDefinition() == G4Hydrogen::Definition()) + { + bool_val = (G4UniformRand() < fStrandH); + } + else if(mol->GetDefinition() == G4Electron_aq::Definition()) + { + bool_val = (G4UniformRand() < fStrandEaq); + } + else + { + bool_val = false; + } + return bool_val; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -89,15 +109,24 @@ G4bool DamageModel::IsIndirectStrandDamage( G4bool DamageModel::IsInducedStrandBreak( const G4MolecularConfiguration* mol) const { - if(mol->GetDefinition() == fOH){ - return G4UniformRand() < fInductionOH; - }else if(mol->GetDefinition() == G4Hydrogen::Definition()){ - return G4UniformRand() < fInductionH; - }else if(mol->GetDefinition() == G4Electron_aq::Definition()){ - return G4UniformRand() < fInductionEaq; - }else{ - return false; + G4bool bool_val = false; + if(mol->GetDefinition() == fOH) + { + bool_val = (G4UniformRand() < fInductionOH); + } + else if(mol->GetDefinition() == G4Hydrogen::Definition()) + { + bool_val = (G4UniformRand() < fInductionH); + } + else if(mol->GetDefinition() == G4Electron_aq::Definition()) + { + bool_val = (G4UniformRand() < fInductionEaq); + } + else + { + bool_val = false; } + return bool_val; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/moleculardna/src/DetectorConstruction.cc b/examples/extended/medical/dna/moleculardna/src/DetectorConstruction.cc index 33d64eb6e93..890afd13737 100644 --- a/examples/extended/medical/dna/moleculardna/src/DetectorConstruction.cc +++ b/examples/extended/medical/dna/moleculardna/src/DetectorConstruction.cc @@ -45,9 +45,8 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... DetectorConstruction::DetectorConstruction() - : G4VUserDetectorConstruction() - , fpDNAGeometry(new DNAGeometry()) - , fpDetectorMessenger(new DetectorMessenger(this)) + : fpDNAGeometry(new DNAGeometry()), + fpDetectorMessenger(new DetectorMessenger(this)) { G4bool useParallelPhysicsWorld = false; if (useParallelPhysicsWorld) { diff --git a/examples/extended/medical/dna/moleculardna/src/DetectorMessenger.cc b/examples/extended/medical/dna/moleculardna/src/DetectorMessenger.cc index fbb44e5d529..46a9d807273 100644 --- a/examples/extended/medical/dna/moleculardna/src/DetectorMessenger.cc +++ b/examples/extended/medical/dna/moleculardna/src/DetectorMessenger.cc @@ -36,10 +36,10 @@ DetectorMessenger::DetectorMessenger(DetectorConstruction* detConstruction) : fpDetectorConstruction(detConstruction) - , fpWorldGeometryDirectory(0) - , fpWorldSideLength(0) - , fpCellGeometryDirectory(0) - , fpCellRadius(0) + , fpWorldGeometryDirectory(nullptr) + , fpWorldSideLength(nullptr) + , fpCellGeometryDirectory(nullptr) + , fpCellRadius(nullptr) { // World geometry fpWorldGeometryDirectory = new G4UIdirectory("/world/"); diff --git a/examples/extended/medical/dna/moleculardna/src/EllipticalChromosome.cc b/examples/extended/medical/dna/moleculardna/src/EllipticalChromosome.cc index 77c7a37105f..014a97304c9 100644 --- a/examples/extended/medical/dna/moleculardna/src/EllipticalChromosome.cc +++ b/examples/extended/medical/dna/moleculardna/src/EllipticalChromosome.cc @@ -37,12 +37,12 @@ const G4String EllipticalChromosome::fShape = "ellipse"; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... EllipticalChromosome::EllipticalChromosome(const G4String& name, - G4ThreeVector pos, + const G4ThreeVector& pos, const G4double& sx, const G4double& sy, const G4double& sz) : VirtualChromosome(name) - , fCenter(std::move(pos)) + , fCenter(pos) , fSemiX(std::abs(sx)) , fSemiY(std::abs(sy)) , fSemiZ(std::abs(sz)) @@ -53,14 +53,14 @@ EllipticalChromosome::EllipticalChromosome(const G4String& name, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... EllipticalChromosome::EllipticalChromosome( - const G4String& name, G4ThreeVector pos, const G4double& sx, - const G4double& sy, const G4double& sz, G4RotationMatrix rot) + const G4String& name, const G4ThreeVector& pos, const G4double& sx, + const G4double& sy, const G4double& sz, const G4RotationMatrix& rot) : VirtualChromosome(name) - , fCenter(std::move(pos)) + , fCenter(pos) , fSemiX(std::abs(sx)) , fSemiY(std::abs(sy)) , fSemiZ(std::abs(sz)) - , fRotation(std::move(rot)) + , fRotation(rot) { fInverseRotation = fRotation.inverse(); } diff --git a/examples/extended/medical/dna/moleculardna/src/EventAction.cc b/examples/extended/medical/dna/moleculardna/src/EventAction.cc index 66240232ac9..12b13ed8b8d 100644 --- a/examples/extended/medical/dna/moleculardna/src/EventAction.cc +++ b/examples/extended/medical/dna/moleculardna/src/EventAction.cc @@ -39,8 +39,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... EventAction::EventAction(AnalysisManager* man) - : G4UserEventAction() - , fAnalysisManager(man) + : fAnalysisManager(man) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -65,10 +64,6 @@ void EventAction::Initialize() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -EventAction::~EventAction() = default; - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void EventAction::BeginOfEventAction(const G4Event*) { if(!fInitialized) diff --git a/examples/extended/medical/dna/moleculardna/src/OctreeNode.cc b/examples/extended/medical/dna/moleculardna/src/OctreeNode.cc index 03940f58850..5615f9212b4 100644 --- a/examples/extended/medical/dna/moleculardna/src/OctreeNode.cc +++ b/examples/extended/medical/dna/moleculardna/src/OctreeNode.cc @@ -31,10 +31,10 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -OctreeNode::OctreeNode(G4ThreeVector position, G4ThreeVector halfLengths, +OctreeNode::OctreeNode(const G4ThreeVector& position, const G4ThreeVector& halfLengths, G4int maxContents, OctreeNode* parent) - : fPosition(std::move(position)) - , fHalfLengths(std::move(halfLengths)) + : fPosition(position) + , fHalfLengths(halfLengths) , fMaxContents(maxContents) , fParent(parent) , fChildren(std::array()) @@ -42,8 +42,6 @@ OctreeNode::OctreeNode(G4ThreeVector position, G4ThreeVector halfLengths, fHalfLengthsMag = fHalfLengths.mag(); } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - OctreeNode::~OctreeNode() { // Delete children diff --git a/examples/extended/medical/dna/moleculardna/src/ParallelWorldPhysics.cc b/examples/extended/medical/dna/moleculardna/src/ParallelWorldPhysics.cc index 7375ca35c8f..2054cc478c1 100644 --- a/examples/extended/medical/dna/moleculardna/src/ParallelWorldPhysics.cc +++ b/examples/extended/medical/dna/moleculardna/src/ParallelWorldPhysics.cc @@ -48,10 +48,6 @@ ParallelWorldPhysics::ParallelWorldPhysics(const G4String& name, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ParallelWorldPhysics::~ParallelWorldPhysics() = default; - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void ParallelWorldPhysics::ConstructParticle() { // stub diff --git a/examples/extended/medical/dna/moleculardna/src/PhysicsList.cc b/examples/extended/medical/dna/moleculardna/src/PhysicsList.cc index b5bcc6e4b5c..3f399626d92 100644 --- a/examples/extended/medical/dna/moleculardna/src/PhysicsList.cc +++ b/examples/extended/medical/dna/moleculardna/src/PhysicsList.cc @@ -43,8 +43,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::PhysicsList(const G4int& phylist) - : G4VModularPhysicsList() +PhysicsList::PhysicsList(G4int phylist) { SetDefaultCutValue(1.0 * micrometer); SetVerboseLevel(1); @@ -88,7 +87,3 @@ PhysicsList::PhysicsList(const G4int& phylist) } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -PhysicsList::~PhysicsList() = default; - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/moleculardna/src/PlacementVolumeInfo.cc b/examples/extended/medical/dna/moleculardna/src/PlacementVolumeInfo.cc index 934593ba482..3f48406f308 100644 --- a/examples/extended/medical/dna/moleculardna/src/PlacementVolumeInfo.cc +++ b/examples/extended/medical/dna/moleculardna/src/PlacementVolumeInfo.cc @@ -43,10 +43,16 @@ PlacementVolumeInfo::PlacementVolumeInfo(OctreeNode* octree, int64_t PlacementVolumeInfo::GetPairsOnChain(G4int idx) const { - if(fBasePairsInChain.find(idx) == fBasePairsInChain.end()) { - return 0; - } else { - return fBasePairsInChain.at(idx);} + int64_t val = 0; + if(fBasePairsInChain.find(idx) == fBasePairsInChain.end()) + { + val = 0; + } + else + { + val = fBasePairsInChain.at(idx); + } + return val; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/moleculardna/src/PrimaryGeneratorAction.cc b/examples/extended/medical/dna/moleculardna/src/PrimaryGeneratorAction.cc index 2fbda2a0e85..770b44ce297 100644 --- a/examples/extended/medical/dna/moleculardna/src/PrimaryGeneratorAction.cc +++ b/examples/extended/medical/dna/moleculardna/src/PrimaryGeneratorAction.cc @@ -30,24 +30,96 @@ #include "PrimaryGeneratorAction.hh" #include "G4GeneralParticleSource.hh" +#include "G4ParticleGun.hh" + +#include "PrimaryGeneratorSourceGRASCSV.hh" +#include "PrimaryGeneratorMessenger.hh" + +// define a Mutex to avoid concurrent reading in multi-thread +#include "G4AutoLock.hh" +namespace { G4Mutex PrimaryGeneratorMutex = G4MUTEX_INITIALIZER; } + +// instance of PrimaryGeneratorSource +PrimaryGeneratorSourceGRASCSV* PrimaryGeneratorAction::fPrimarySource = nullptr; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... PrimaryGeneratorAction::PrimaryGeneratorAction() - : G4VUserPrimaryGeneratorAction() { + G4AutoLock lock(&PrimaryGeneratorMutex); fParticleGun = new G4GeneralParticleSource(); + + fFirstEvent = true; + fGunMessenger = new PrimaryGeneratorMessenger(this); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PrimaryGeneratorAction::~PrimaryGeneratorAction() { delete fParticleGun; } +PrimaryGeneratorAction::~PrimaryGeneratorAction() +{ + G4AutoLock lock(&PrimaryGeneratorMutex); + delete fParticleGun; + if(fPrimarySource != nullptr) + { + delete fPrimarySource; + fPrimarySource = nullptr; + } + delete fGunMessenger; +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void PrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) { - fParticleGun->GeneratePrimaryVertex(anEvent); + if(fMyInputFileName != "") + { + G4AutoLock lock(&PrimaryGeneratorMutex); + // Read primaries from file + // Before first event, instantiate file reader if fInputFileName is not empty + if(fFirstEvent) + { + fPrimarySource = new PrimaryGeneratorSourceGRASCSV(fMyInputFileName); + fFirstEvent = false; + } + + auto *fpParticleGun = new G4ParticleGun(); + + // Get a new primary particle. + Primary* primary = fPrimarySource->GetPrimary(); + if(primary != nullptr) + { + G4String particleName = primary->GetName(); + G4ThreeVector pos = primary->GetPosition(); + G4ThreeVector momdir = primary->GetMomentumDirection(); + G4double energy = primary->GetEnergy(); + G4ParticleDefinition* particle = primary->GetParticleDefinition(); + //primary->Print(); // print of the data of the primary particle + + fpParticleGun->SetParticleDefinition( particle ); + fpParticleGun->SetParticlePosition( pos ); + fpParticleGun->SetParticleEnergy( energy*CLHEP::MeV ); + fpParticleGun->SetParticleMomentumDirection( momdir ); + fpParticleGun->GeneratePrimaryVertex( anEvent ); + } + else + { + // If primary is NULL, the end of file has been reached or the file format is not consistent + // A Geantino placed at kInfinity will be fired in this case + G4cout << "WARNING: The phase space source is ended. Maybe you reach the end of file, or your file is broken. A Geantino will be generated." << G4endl; + G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); + G4ParticleDefinition* particle = pTable->FindParticle( "geantino" ); + fpParticleGun->SetParticleDefinition( particle ); + G4ThreeVector pos = G4ThreeVector(kInfinity,kInfinity,kInfinity); + fpParticleGun->SetParticlePosition( pos ); + fpParticleGun->SetParticleEnergy( 0 ); + fpParticleGun->SetParticleMomentumDirection( pos ); + fpParticleGun->GeneratePrimaryVertex( anEvent ); + } + } + else + { + fParticleGun->GeneratePrimaryVertex(anEvent); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/moleculardna/src/PrimaryGeneratorMessenger.cc b/examples/extended/medical/dna/moleculardna/src/PrimaryGeneratorMessenger.cc new file mode 100644 index 00000000000..6e6783a3e4f --- /dev/null +++ b/examples/extended/medical/dna/moleculardna/src/PrimaryGeneratorMessenger.cc @@ -0,0 +1,69 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +/// \file PrimaryGeneratorMessenger.cc +/// \brief Primary Generator Messenger for Molecular DNA simulation + +#include "PrimaryGeneratorMessenger.hh" + +#include "PrimaryGeneratorAction.hh" +#include "G4UIdirectory.hh" +#include "G4UIcmdWithAString.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PrimaryGeneratorMessenger::PrimaryGeneratorMessenger(PrimaryGeneratorAction* Gun) +: fAction(Gun) +{ + fMyPrimaryGenDir = new G4UIdirectory( "/primarygenerator/" ); + fMyPrimaryGenDir->SetGuidance( "My primary generator from file" ); + + fMyReadCmd = new G4UIcmdWithAString( "/primarygenerator/inputFile", this ); + fMyReadCmd->SetGuidance( "Read from input file " ); + fMyReadCmd->SetParameterName( "fInputFileName", false ); + fMyReadCmd->AvailableForStates( G4State_PreInit,G4State_Idle ); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +PrimaryGeneratorMessenger::~PrimaryGeneratorMessenger() +{ + delete fMyReadCmd; + delete fMyPrimaryGenDir; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void PrimaryGeneratorMessenger::SetNewValue(G4UIcommand* command, G4String newValue) +{ + if(command == fMyReadCmd) + { + fAction->SetInputFileName(newValue); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + diff --git a/examples/extended/medical/dna/moleculardna/src/PrimaryGeneratorSourceGRASCSV.cc b/examples/extended/medical/dna/moleculardna/src/PrimaryGeneratorSourceGRASCSV.cc new file mode 100644 index 00000000000..7ba9c1f8dee --- /dev/null +++ b/examples/extended/medical/dna/moleculardna/src/PrimaryGeneratorSourceGRASCSV.cc @@ -0,0 +1,177 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +/// \file PrimaryGeneratorSourceGRASCSV.cc +/// \brief Primary Generator source class implementation for GRAS CSV phase space for Molecular DNA simulation + +#include "PrimaryGeneratorSourceGRASCSV.hh" + + +PrimaryGeneratorSourceGRASCSV::PrimaryGeneratorSourceGRASCSV(const G4String& filename) +{ + // set a default buffer size + fEndOfFile = false; + + // open file + fInputFile.open(filename); + if (fInputFile.is_open()) + { + G4cout << "*** Opening particle source file " << filename << " ***" << G4endl; + // find the starting particle source box + G4String line = ""; + G4int totalevents = 0; + while(std::getline(fInputFile, line)) + { + if (line.find("TOTAL_EVENTS") != std::string::npos) { + // Create a stringstream of the current line + std::stringstream ss(line); + G4String tmp = ""; + ss >> tmp >> tmp >> totalevents; + } + if (line.find("TWO-STAGE PARTICLE PHASE SPACE OUTPUT FILE: PARTICLE PHASE-SPACE INFORMATION") != std::string::npos) { + for(G4int i=0; i<18; i++) + { + std::getline(fInputFile, line); + // Print the header information + G4cout << line << G4endl; + } + break; + } + } + // set the number of particles + fnParticles = totalevents; + } + else + { + G4cout << "*** Warning: can't open particle source file in reading mode ***" << G4endl; + } +} + +PrimaryGeneratorSourceGRASCSV::~PrimaryGeneratorSourceGRASCSV() +{ + // close file and clear structures + if(fInputFile.is_open()) + { + fInputFile.close(); + } + fPrimaryList.clear(); +} + +G4double PrimaryGeneratorSourceGRASCSV::RecomputeNParticles() +{ + // to be implemented + // the variable in CSV has to be recomputed reading all the file + return fnParticles; +} + + +Primary* PrimaryGeneratorSourceGRASCSV::GetPrimary() +{ + if(fInputFile.peek() == EOF || fEndOfFile == true) + return nullptr; + // Read in primaries if the primary list is empty + if( fPrimaryList.size() == 0 ) + { + // Read 100 primaries at a time + G4int num = fBufferSize; + if (num > fnParticles) + { + num = fnParticles; + } + + for(G4int i = 0; i < num; i++ ) + { + if(fInputFile.peek() == EOF) + { + // End of file + fEndOfFile = true; + break; + } + G4String line = ""; + std::getline(fInputFile, line); + if (line.find("TWO-STAGE PARTICLE PHASE SPACE OUTPUT FILE: PARTICLE PHASE-SPACE INFORMATION") != std::string::npos) + { + const G4int lines = 18; + for(G4int j=0; j tempVect; + G4String tempString = ""; + while(ss>>tempString) tempVect.push_back(tempString); + + try + { + // Define position and momentum direction vectors + G4ThreeVector pos = G4ThreeVector( std::stod(tempVect.at(10)), std::stod(tempVect.at(11)), std::stod(tempVect.at(12))); + G4ThreeVector momDir = G4ThreeVector( std::stod(tempVect.at(16)), std::stod(tempVect.at(17)), std::stod(tempVect.at(18))); + G4int PDGEncoding = std::stoi(tempVect.at(2)); + G4double KE = 0; + KE = std::stod(tempVect.at(8)); + + // Generate primary particle + auto *primary = new Primary(); + primary->SetName( PDGEncoding ); + primary->SetPosition( pos ); + primary->SetMomentumDirection( momDir ); + primary->SetEnergy( KE ); + + // Populate the primaries list + fPrimaryList.push_back( primary ); + } + catch (const std::invalid_argument&) + { + G4cerr << "Phase Space reading error: invalid_argument"<< G4endl; + } + catch (const std::out_of_range&) + { + G4cerr << "Phase Space reading error: out_of_range"<< G4endl; + } + } + } + + // Get first element and delete it so it's not reused + Primary* primary = nullptr; + if( fPrimaryList.size() > 0 ) + { + primary = fPrimaryList.front(); + fPrimaryList.pop_front(); + } + return primary; +} + + + diff --git a/examples/extended/medical/dna/moleculardna/src/RodChromosome.cc b/examples/extended/medical/dna/moleculardna/src/RodChromosome.cc index 6b17c8c159d..0345326e9c6 100644 --- a/examples/extended/medical/dna/moleculardna/src/RodChromosome.cc +++ b/examples/extended/medical/dna/moleculardna/src/RodChromosome.cc @@ -38,10 +38,10 @@ const G4String RodChromosome::fShape = "rod"; -RodChromosome::RodChromosome(const G4String& name, G4ThreeVector pos, +RodChromosome::RodChromosome(const G4String& name, const G4ThreeVector& pos, const G4double& radius, const G4double& height) : VirtualChromosome(name) - , fCenter(std::move(pos)) + , fCenter(pos) , fRadius(radius) , fHeight(height) , fRotation(G4RotationMatrix()) @@ -51,14 +51,14 @@ RodChromosome::RodChromosome(const G4String& name, G4ThreeVector pos, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -RodChromosome::RodChromosome(const G4String& name, G4ThreeVector pos, +RodChromosome::RodChromosome(const G4String& name, const G4ThreeVector& pos, const G4double& radius, const G4double& height, - G4RotationMatrix rot) + const G4RotationMatrix& rot) : VirtualChromosome(name) - , fCenter(std::move(pos)) + , fCenter(pos) , fRadius(radius) , fHeight(height) - , fRotation(std::move(rot)) + , fRotation(rot) { fInverseRotation = fRotation.inverse(); } diff --git a/examples/extended/medical/dna/moleculardna/src/RunAction.cc b/examples/extended/medical/dna/moleculardna/src/RunAction.cc index 724806fa30f..ab7ac2f24c3 100644 --- a/examples/extended/medical/dna/moleculardna/src/RunAction.cc +++ b/examples/extended/medical/dna/moleculardna/src/RunAction.cc @@ -35,16 +35,11 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... RunAction::RunAction(AnalysisManager* man) - : G4UserRunAction() - , fAnalysisManager(man) + : fAnalysisManager(man) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -RunAction::~RunAction() = default; - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void RunAction::BeginOfRunAction(const G4Run*) { if(G4Threading::IsMultithreadedApplication() && IsMaster()) diff --git a/examples/extended/medical/dna/moleculardna/src/SphericalChromosome.cc b/examples/extended/medical/dna/moleculardna/src/SphericalChromosome.cc index 23c62a97917..8bdf82f34d3 100644 --- a/examples/extended/medical/dna/moleculardna/src/SphericalChromosome.cc +++ b/examples/extended/medical/dna/moleculardna/src/SphericalChromosome.cc @@ -38,10 +38,10 @@ const G4String SphericalChromosome::fShape = "sphere"; SphericalChromosome::SphericalChromosome(const G4String& name, - G4ThreeVector pos, + const G4ThreeVector& pos, const G4double& radius) : VirtualChromosome(name) - , fCenter(std::move(pos)) + , fCenter(pos) , fRadius(radius) , fRotation(G4RotationMatrix()) { @@ -51,13 +51,13 @@ SphericalChromosome::SphericalChromosome(const G4String& name, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... SphericalChromosome::SphericalChromosome(const G4String& name, - G4ThreeVector pos, + const G4ThreeVector& pos, const G4double& radius, - G4RotationMatrix rot) + const G4RotationMatrix& rot) : VirtualChromosome(name) - , fCenter(std::move(pos)) + , fCenter(pos) , fRadius(radius) - , fRotation(std::move(rot)) + , fRotation(rot) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/moleculardna/src/StackingAction.cc b/examples/extended/medical/dna/moleculardna/src/StackingAction.cc index 7bad284cf06..5a05f682dd7 100644 --- a/examples/extended/medical/dna/moleculardna/src/StackingAction.cc +++ b/examples/extended/medical/dna/moleculardna/src/StackingAction.cc @@ -33,16 +33,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -StackingAction::StackingAction() - : G4UserStackingAction() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -StackingAction::~StackingAction() = default; - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void StackingAction::NewStage() { if(stackManager->GetNTotalTrack() == 0) diff --git a/examples/extended/medical/dna/moleculardna/src/SteppingAction.cc b/examples/extended/medical/dna/moleculardna/src/SteppingAction.cc index f82320af1c0..3bf416fc490 100644 --- a/examples/extended/medical/dna/moleculardna/src/SteppingAction.cc +++ b/examples/extended/medical/dna/moleculardna/src/SteppingAction.cc @@ -50,8 +50,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... SteppingAction::SteppingAction(EventAction* evt) - : G4UserSteppingAction() - , fEventAction(evt) + : fEventAction(evt) { const auto* det = dynamic_cast( G4RunManager::GetRunManager()->GetUserDetectorConstruction()); @@ -61,15 +60,13 @@ SteppingAction::SteppingAction(EventAction* evt) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -SteppingAction::~SteppingAction() = default; - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void SteppingAction::UserSteppingAction(const G4Step* aStep) { G4double edep = aStep->GetTotalEnergyDeposit(); if(edep == 0) + { return; + } // Work out if we are in the Logical volume assigned to DNA const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable(); @@ -180,8 +177,10 @@ void SteppingAction::ProcessDNARegionHit(const G4Step* aStep) { G4String lvname = pv->GetLogicalVolume()->GetName(); G4String motherlvname; - if(lv) + if(lv != nullptr) + { motherlvname = lv->GetName(); + } G4cout << "Could not find octree for logical volume." << G4endl << "Particle in LV: " << lvname << ", with mother LV: " << motherlvname << G4endl; diff --git a/examples/extended/medical/dna/moleculardna/src/TimeStepAction.cc b/examples/extended/medical/dna/moleculardna/src/TimeStepAction.cc index 0a50d4a92f2..b2323df5752 100644 --- a/examples/extended/medical/dna/moleculardna/src/TimeStepAction.cc +++ b/examples/extended/medical/dna/moleculardna/src/TimeStepAction.cc @@ -39,10 +39,10 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... TimeStepAction::TimeStepAction(EventAction* event) - : G4UserTimeStepAction() - , fEventAction(event) - , fRadicalKillDistance(4.5 * nm) - , fpChemistryTrackHolder(G4ITTrackHolder::Instance()) + : G4UserTimeStepAction(), + fEventAction(event), + fRadicalKillDistance(4.5 * nm), + fpChemistryTrackHolder(G4ITTrackHolder::Instance()) { AddTimeStep(1 * picosecond, 0.5 * nanosecond); // ctor @@ -55,8 +55,7 @@ TimeStepAction::~TimeStepAction() = default; void TimeStepAction::StartProcessing() { - auto det = dynamic_cast( - G4RunManager::GetRunManager()->GetUserDetectorConstruction()); + auto det = dynamic_cast(G4RunManager::GetRunManager()->GetUserDetectorConstruction()); fDNAGeometry = det->GetDNAGeometry(); if(fDNAGeometry == nullptr) { @@ -98,10 +97,8 @@ void TimeStepAction::RadicalKillDistance() exceptionDescription); } G4Track* trackToKill; - G4TrackManyList::iterator it_begin = - fpChemistryTrackHolder->GetMainList()->begin(); - G4TrackManyList::iterator it_end = - fpChemistryTrackHolder->GetMainList()->end(); + G4TrackManyList::iterator it_begin = fpChemistryTrackHolder->GetMainList()->begin(); + G4TrackManyList::iterator it_end = fpChemistryTrackHolder->GetMainList()->end(); while(it_begin != it_end) { trackToKill = nullptr; diff --git a/examples/extended/medical/dna/moleculardna/src/UtilityFunctions.cc b/examples/extended/medical/dna/moleculardna/src/UtilityFunctions.cc index b55a9c85403..3fe1b391437 100644 --- a/examples/extended/medical/dna/moleculardna/src/UtilityFunctions.cc +++ b/examples/extended/medical/dna/moleculardna/src/UtilityFunctions.cc @@ -94,15 +94,13 @@ namespace utility G4bool Path_exists(const G4String& fname) { + G4bool bool_val = false; if(FILE* file = std::fopen(fname, "r")) { fclose(file); - return true; - } - else - { - return false; + bool_val = true; } + return bool_val; } // Memory safe multi-platform getcwd diff --git a/examples/extended/medical/dna/moleculardna/src/VirtualChromosome.cc b/examples/extended/medical/dna/moleculardna/src/VirtualChromosome.cc index 2264ae39e57..729819f40a6 100644 --- a/examples/extended/medical/dna/moleculardna/src/VirtualChromosome.cc +++ b/examples/extended/medical/dna/moleculardna/src/VirtualChromosome.cc @@ -29,8 +29,8 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -VirtualChromosome::VirtualChromosome(G4String name) - : fName(std::move(name)) +VirtualChromosome::VirtualChromosome(const G4String& name) + : fName(name) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/neuron/neuron.out b/examples/extended/medical/dna/neuron/neuron.out index 3b52ec224f7..21971dfd743 100644 --- a/examples/extended/medical/dna/neuron/neuron.out +++ b/examples/extended/medical/dna/neuron/neuron.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -77,7 +77,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -261,7 +263,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -300,7 +302,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -333,7 +335,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -403,7 +405,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -436,7 +438,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -469,7 +471,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -502,7 +504,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -535,7 +537,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -568,7 +570,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -601,7 +603,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV G4VisManager: Using G4TrajectoryDrawByCharge as fallback trajectory model. @@ -657,7 +659,7 @@ Physics stage ends Outputs of energy deposition per event written in data file: OutputPerEvent.out - Calculation time = 2.64091 s + Calculation time = 2.54758 s Graphics systems deleted. Visualization Manager deleting... diff --git a/examples/extended/medical/dna/pdb4dna/.gitignore b/examples/extended/medical/dna/pdb4dna/.gitignore deleted file mode 100644 index 30483b8e085..00000000000 --- a/examples/extended/medical/dna/pdb4dna/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Overwrite the top-level .gitignore that wants to ignore all *.pdb files. -!*.pdb diff --git a/examples/extended/medical/dna/pdb4dna/pdb4dna.out b/examples/extended/medical/dna/pdb4dna/pdb4dna.out index 50d68db790d..41ba95890a3 100644 --- a/examples/extended/medical/dna/pdb4dna/pdb4dna.out +++ b/examples/extended/medical/dna/pdb4dna/pdb4dna.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -44,7 +44,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... diff --git a/examples/extended/medical/dna/range/History b/examples/extended/medical/dna/range/History index cb9e4fd96e2..5bcb29c1ea3 100644 --- a/examples/extended/medical/dna/range/History +++ b/examples/extended/medical/dna/range/History @@ -4,6 +4,12 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-06-03 Vladimir Ivanchenko (range-V11-01-01) +- PhysicsList - simplified +- range.cc - use G4RunManagerFactory + +## 2023-05-23 Hoang Tran (range-V11-01-00) +- Change to add DNA materials ## 2021-12-10 Ben Morgan (range-V11-00-00) - Change to new Markdown History format diff --git a/examples/extended/medical/dna/range/range.cc b/examples/extended/medical/dna/range/range.cc index f348f3b02fb..0eebd1dba29 100644 --- a/examples/extended/medical/dna/range/range.cc +++ b/examples/extended/medical/dna/range/range.cc @@ -27,22 +27,15 @@ /// \brief Main program of the medical/dna/range example #include "G4Types.hh" -#ifdef G4MULTITHREADED - #include "G4MTRunManager.hh" -#else - #include "G4RunManager.hh" -#endif +#include "G4RunManagerFactory.hh" #include "G4UImanager.hh" #include "G4UIExecutive.hh" #include "G4VisExecutive.hh" -#include "Randomize.hh" - #include "DetectorConstruction.hh" #include "PhysicsList.hh" #include "ActionInitialization.hh" -#include "SteppingVerbose.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -57,22 +50,13 @@ int main(int argc,char** argv) { ui = new G4UIExecutive(argc, argv); } - //Construct the default run manager -#ifdef G4MULTITHREADED - G4MTRunManager* runManager = new G4MTRunManager(); - G4int nThreads = G4Threading::G4GetNumberOfCores(); - if (argc==3) - { - nThreads = G4UIcommand::ConvertToInt(argv[2]); - G4cout << argv[0] << " launched with " << nThreads - << " (may be overwritten by script)" - << G4endl; + //construct the run manager + auto runManager = G4RunManagerFactory::CreateRunManager(); + + if (argc==3) { + G4int nThreads = G4UIcommand::ConvertToInt(argv[2]); + runManager->SetNumberOfThreads(nThreads); } - runManager->SetNumberOfThreads(nThreads); -#else - G4VSteppingVerbose::SetInstance(new SteppingVerbose); - G4RunManager* runManager = new G4RunManager(); -#endif //set mandatory initialization classes runManager->SetUserInitialization(new DetectorConstruction()); diff --git a/examples/extended/medical/dna/range/range.out b/examples/extended/medical/dna/range/range.out index 3265bad04b2..d4be1755969 100644 --- a/examples/extended/medical/dna/range/range.out +++ b/examples/extended/medical/dna/range/range.out @@ -1,3 +1,4 @@ +Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Forcing G4RunManager type... ############################################ !!! WARNING - FPE detection is activated !!! @@ -10,7 +11,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -42,7 +43,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... diff --git a/examples/extended/medical/dna/range/src/DetectorConstruction.cc b/examples/extended/medical/dna/range/src/DetectorConstruction.cc index 8476ab5f64c..102158936a8 100644 --- a/examples/extended/medical/dna/range/src/DetectorConstruction.cc +++ b/examples/extended/medical/dna/range/src/DetectorConstruction.cc @@ -162,7 +162,8 @@ void DetectorConstruction::SetRadius(G4double value) void DetectorConstruction::SetMaterial(G4String materialChoice) { - // search the material by its name + G4NistManager::Instance()->FindOrBuildMaterial(materialChoice); + // search the material by its name G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice); if (pttoMaterial) fAbsorMaterial = pttoMaterial; G4RunManager::GetRunManager()->PhysicsHasBeenModified(); diff --git a/examples/extended/medical/dna/range/src/PhysicsList.cc b/examples/extended/medical/dna/range/src/PhysicsList.cc index dc406cbe0a7..e33f0d1b50d 100644 --- a/examples/extended/medical/dna/range/src/PhysicsList.cc +++ b/examples/extended/medical/dna/range/src/PhysicsList.cc @@ -44,22 +44,9 @@ #include "G4SystemOfUnits.hh" #include "G4UserSpecialCuts.hh" -// particles - -#include "G4BosonConstructor.hh" -#include "G4LeptonConstructor.hh" -#include "G4MesonConstructor.hh" -#include "G4BosonConstructor.hh" -#include "G4BaryonConstructor.hh" -#include "G4IonConstructor.hh" -#include "G4ShortLivedConstructor.hh" -#include "G4DNAGenericIonsManager.hh" - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::PhysicsList() : - G4VModularPhysicsList(), - fEmPhysicsList(0), fMessenger(0) +PhysicsList::PhysicsList() { fMessenger = new PhysicsListMessenger(this); @@ -81,30 +68,7 @@ PhysicsList::~PhysicsList() void PhysicsList::ConstructParticle() { - G4BosonConstructor pBosonConstructor; - pBosonConstructor.ConstructParticle(); - - G4LeptonConstructor pLeptonConstructor; - pLeptonConstructor.ConstructParticle(); - - G4MesonConstructor pMesonConstructor; - pMesonConstructor.ConstructParticle(); - - G4BaryonConstructor pBaryonConstructor; - pBaryonConstructor.ConstructParticle(); - - G4IonConstructor pIonConstructor; - pIonConstructor.ConstructParticle(); - - G4ShortLivedConstructor pShortLivedConstructor; - pShortLivedConstructor.ConstructParticle(); - - G4DNAGenericIonsManager* genericIonsManager; - genericIonsManager=G4DNAGenericIonsManager::Instance(); - genericIonsManager->GetIon("alpha++"); - genericIonsManager->GetIon("alpha+"); - genericIonsManager->GetIon("helium"); - genericIonsManager->GetIon("hydrogen"); + fEmPhysicsList->ConstructParticle(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -197,8 +161,9 @@ void PhysicsList::AddTrackingCut() while ((*particleIterator)()) { G4ParticleDefinition* particle = particleIterator->value(); - G4String particleName = particle->GetParticleName(); - - ph->RegisterProcess(new G4UserSpecialCuts(), particle); + if (particle->GetPDGCharge() != 0.0 && !particle->IsShortLived()) + { + ph->RegisterProcess(new G4UserSpecialCuts(), particle); + } } } diff --git a/examples/extended/medical/dna/scavenger/scavenger.out b/examples/extended/medical/dna/scavenger/scavenger.out index 2eab682c47b..453902e2d25 100644 --- a/examples/extended/medical/dna/scavenger/scavenger.out +++ b/examples/extended/medical/dna/scavenger/scavenger.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -42,7 +42,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -531,7 +533,7 @@ DNAMolecularIRTModel will be used Run terminated. Run Summary Number of events processed : 2 - User=0.550000s Real=0.563310s Sys=0.000000s + User=0.480000s Real=0.490744s Sys=0.020000s --------------------End of Global Run----------------------- The run has 1 events diff --git a/examples/extended/medical/dna/slowing/slowing.out b/examples/extended/medical/dna/slowing/slowing.out index 5a091bd4994..5499fc5c2ff 100644 --- a/examples/extended/medical/dna/slowing/slowing.out +++ b/examples/extended/medical/dna/slowing/slowing.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -44,7 +44,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... diff --git a/examples/extended/medical/dna/spower/History b/examples/extended/medical/dna/spower/History index 9620fe10993..560e1b147d3 100644 --- a/examples/extended/medical/dna/spower/History +++ b/examples/extended/medical/dna/spower/History @@ -4,6 +4,13 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-06-03 Vladimir Ivanchenko (spower-V11-01-01) +- PhysicsList - simplified +- alpha.in - added extra macro +- spower.cc - clean-up the code to avoid warnings + +## 2022-05-23 Hoang Tran (spower-V11-01-00) +- add DNA materials ## 2022-02-28 Vladimir Ivanchenko (spower-V11-00-01) - dnaphysics.cc - enable visualisation only in interactive mode, diff --git a/examples/extended/medical/dna/spower/alpha.in b/examples/extended/medical/dna/spower/alpha.in new file mode 100644 index 00000000000..334f13477e8 --- /dev/null +++ b/examples/extended/medical/dna/spower/alpha.in @@ -0,0 +1,36 @@ +# +/control/verbose 1 +/control/cout/ignoreThreadsExcept 0 +/run/numberOfThreads 8 +/run/verbose 1 +# +/spower/det/setMat G4_WATER +/spower/det/setRadius 1 m +# +# Register physics constructor +#/spower/phys/addPhysics dna_stat +/spower/phys/addPhysics dna_stat_opt2 +#/spower/phys/addPhysics dna_stat_opt4 +#/spower/phys/addPhysics dna_stat_opt6 +# +/run/initialize +# +/tracking/verbose 0 +# +/gun/particle alpha +# +/gun/energy 1 keV +#/run/beamOn 10000 +# +/gun/energy 10 keV +#/run/beamOn 10000 +# +/gun/energy 100 keV +#/run/beamOn 10000 +# +/gun/energy 1 MeV +/run/beamOn 10000 +# +/gun/energy 10 MeV +/run/beamOn 10000 +# diff --git a/examples/extended/medical/dna/spower/spower.cc b/examples/extended/medical/dna/spower/spower.cc index 1f89c89d1e3..24ec4de64eb 100644 --- a/examples/extended/medical/dna/spower/spower.cc +++ b/examples/extended/medical/dna/spower/spower.cc @@ -55,13 +55,18 @@ int main(int argc,char** argv) { } //construct the default run manager - auto* runManager = G4RunManagerFactory::CreateRunManager(); + auto runManager = G4RunManagerFactory::CreateRunManager(); + + if (argc==3) { + G4int nThreads = G4UIcommand::ConvertToInt(argv[2]); + runManager->SetNumberOfThreads(nThreads); + } //set mandatory initialization classes - DetectorConstruction* det = new DetectorConstruction; + auto det = new DetectorConstruction(); runManager->SetUserInitialization(det); - PhysicsList* phys = new PhysicsList; + auto phys = new PhysicsList(); runManager->SetUserInitialization(phys); runManager->SetUserInitialization(new ActionInitialization()); @@ -71,7 +76,7 @@ int main(int argc,char** argv) { G4VisManager* visManager = nullptr; // Get the pointer to the User Interface manager - G4UImanager* UImanager = G4UImanager::GetUIpointer(); + auto UImanager = G4UImanager::GetUIpointer(); // Process macro or start UI session // diff --git a/examples/extended/medical/dna/spower/spower.in b/examples/extended/medical/dna/spower/spower.in index 457c3781fba..6edacd72cdc 100644 --- a/examples/extended/medical/dna/spower/spower.in +++ b/examples/extended/medical/dna/spower/spower.in @@ -20,17 +20,17 @@ /gun/particle e- # /gun/energy 50 eV -/run/beamOn 10000 +/run/beamOn 1000 # /gun/energy 100 eV -/run/beamOn 10000 +/run/beamOn 1000 # /gun/energy 200 eV -/run/beamOn 10000 +/run/beamOn 1000 # /gun/energy 500 eV -/run/beamOn 10000 +/run/beamOn 1000 # /gun/energy 1000 eV -/run/beamOn 10000 +/run/beamOn 1000 # diff --git a/examples/extended/medical/dna/spower/spower.out b/examples/extended/medical/dna/spower/spower.out index 59a490c1caa..66f90e56bde 100644 --- a/examples/extended/medical/dna/spower/spower.out +++ b/examples/extended/medical/dna/spower/spower.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -53,7 +53,7 @@ PhysicsList::AddPhysicsList: /tracking/verbose 0 /gun/particle e- /gun/energy 50 eV -/run/beamOn 10000 +/run/beamOn 1000 ======================================================================= ====== Electromagnetic Physics Parameters ======== ======================================================================= @@ -464,16 +464,16 @@ Index : 0 used in the geometry : Yes ### Run 0 starts. Run terminated. Run Summary - Number of events processed : 10000 - User=25.710000s Real=25.864045s Sys=0.000000s + Number of events processed : 1000 + User=2.240000s Real=2.247607s Sys=0.000000s ======================== run summary ===================== - The run is 10000 e- of 50.00 eV through a sphere of radius 1.00 m of G4_WATER (density: 1.00 g/cm3 ) + The run is 1000 e- of 50.00 eV through a sphere of radius 1.00 m of G4_WATER (density: 1.00 g/cm3 ) - total Stopping Power (keV/um) = 14.26 +- 0.86 + total Stopping Power (keV/um) = 14.26 +- 0.83 /gun/energy 100 eV -/run/beamOn 10000 +/run/beamOn 1000 ========= Table of registered couples ============================ @@ -489,16 +489,16 @@ Index : 0 used in the geometry : Yes ### Run 1 starts. Run terminated. Run Summary - Number of events processed : 10000 - User=29.670000s Real=29.860430s Sys=0.000000s + Number of events processed : 1000 + User=2.490000s Real=2.504235s Sys=0.000000s ======================== run summary ===================== - The run is 10000 e- of 100.00 eV through a sphere of radius 1.00 m of G4_WATER (density: 1.00 g/cm3 ) + The run is 1000 e- of 100.00 eV through a sphere of radius 1.00 m of G4_WATER (density: 1.00 g/cm3 ) - total Stopping Power (keV/um) = 21.95 +- 1.15 + total Stopping Power (keV/um) = 21.98 +- 1.12 /gun/energy 200 eV -/run/beamOn 10000 +/run/beamOn 1000 ========= Table of registered couples ============================ @@ -514,16 +514,16 @@ Index : 0 used in the geometry : Yes ### Run 2 starts. Run terminated. Run Summary - Number of events processed : 10000 - User=32.760000s Real=32.945791s Sys=0.000000s + Number of events processed : 1000 + User=2.810000s Real=2.824085s Sys=0.000000s ======================== run summary ===================== - The run is 10000 e- of 200.00 eV through a sphere of radius 1.00 m of G4_WATER (density: 1.00 g/cm3 ) + The run is 1000 e- of 200.00 eV through a sphere of radius 1.00 m of G4_WATER (density: 1.00 g/cm3 ) - total Stopping Power (keV/um) = 21.68 +- 1.07 + total Stopping Power (keV/um) = 21.69 +- 1.05 /gun/energy 500 eV -/run/beamOn 10000 +/run/beamOn 1000 ========= Table of registered couples ============================ @@ -539,16 +539,16 @@ Index : 0 used in the geometry : Yes ### Run 3 starts. Run terminated. Run Summary - Number of events processed : 10000 - User=33.380000s Real=33.599619s Sys=0.010000s + Number of events processed : 1000 + User=2.850000s Real=2.853656s Sys=0.000000s ======================== run summary ===================== - The run is 10000 e- of 500.00 eV through a sphere of radius 1.00 m of G4_WATER (density: 1.00 g/cm3 ) + The run is 1000 e- of 500.00 eV through a sphere of radius 1.00 m of G4_WATER (density: 1.00 g/cm3 ) - total Stopping Power (keV/um) = 15.39 +- 0.84 + total Stopping Power (keV/um) = 15.39 +- 0.83 /gun/energy 1000 eV -/run/beamOn 10000 +/run/beamOn 1000 ========= Table of registered couples ============================ @@ -564,15 +564,15 @@ Index : 0 used in the geometry : Yes ### Run 4 starts. Run terminated. Run Summary - Number of events processed : 10000 - User=32.450000s Real=32.652198s Sys=0.000000s + Number of events processed : 1000 + User=2.800000s Real=2.824640s Sys=0.000000s ======================== run summary ===================== - The run is 10000 e- of 1.00 keV through a sphere of radius 1.00 m of G4_WATER (density: 1.00 g/cm3 ) + The run is 1000 e- of 1.00 keV through a sphere of radius 1.00 m of G4_WATER (density: 1.00 g/cm3 ) - total Stopping Power (keV/um) = 10.50 +- 0.68 + total Stopping Power (keV/um) = 10.53 +- 0.70 ================== Deleting memory pools =================== Number of memory pools allocated: 9 of which, static: 0 -Dynamic pools deleted: 9 / Total memory freed: 0.33 MB +Dynamic pools deleted: 9 / Total memory freed: 0.32 MB ============================================================ diff --git a/examples/extended/medical/dna/spower/src/DetectorConstruction.cc b/examples/extended/medical/dna/spower/src/DetectorConstruction.cc index 06925d58646..25f0174ba7d 100644 --- a/examples/extended/medical/dna/spower/src/DetectorConstruction.cc +++ b/examples/extended/medical/dna/spower/src/DetectorConstruction.cc @@ -136,7 +136,8 @@ void DetectorConstruction::SetRadius(G4double value) void DetectorConstruction::SetMaterial(G4String materialChoice) { - // search the material by its name + // search the material by its name + G4NistManager::Instance()->FindOrBuildMaterial(materialChoice); G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice); if (pttoMaterial) fAbsorMaterial = pttoMaterial; G4RunManager::GetRunManager()->PhysicsHasBeenModified(); diff --git a/examples/extended/medical/dna/spower/src/PhysicsList.cc b/examples/extended/medical/dna/spower/src/PhysicsList.cc index d6c919ea763..169f78a4960 100644 --- a/examples/extended/medical/dna/spower/src/PhysicsList.cc +++ b/examples/extended/medical/dna/spower/src/PhysicsList.cc @@ -36,24 +36,10 @@ #include "G4UnitsTable.hh" #include "G4SystemOfUnits.hh" -#include "G4UserSpecialCuts.hh" - -// particles - -#include "G4BosonConstructor.hh" -#include "G4LeptonConstructor.hh" -#include "G4MesonConstructor.hh" -#include "G4BosonConstructor.hh" -#include "G4BaryonConstructor.hh" -#include "G4IonConstructor.hh" -#include "G4ShortLivedConstructor.hh" -#include "G4DNAGenericIonsManager.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -PhysicsList::PhysicsList() : - G4VModularPhysicsList(), - fEmPhysicsList(0), fMessenger(0) +PhysicsList::PhysicsList() { fMessenger = new PhysicsListMessenger(this); @@ -75,30 +61,7 @@ PhysicsList::~PhysicsList() void PhysicsList::ConstructParticle() { - G4BosonConstructor pBosonConstructor; - pBosonConstructor.ConstructParticle(); - - G4LeptonConstructor pLeptonConstructor; - pLeptonConstructor.ConstructParticle(); - - G4MesonConstructor pMesonConstructor; - pMesonConstructor.ConstructParticle(); - - G4BaryonConstructor pBaryonConstructor; - pBaryonConstructor.ConstructParticle(); - - G4IonConstructor pIonConstructor; - pIonConstructor.ConstructParticle(); - - G4ShortLivedConstructor pShortLivedConstructor; - pShortLivedConstructor.ConstructParticle(); - - G4DNAGenericIonsManager* genericIonsManager; - genericIonsManager=G4DNAGenericIonsManager::Instance(); - genericIonsManager->GetIon("alpha++"); - genericIonsManager->GetIon("alpha+"); - genericIonsManager->GetIon("helium"); - genericIonsManager->GetIon("hydrogen"); + fEmPhysicsList->ConstructParticle(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/medical/dna/svalue/svalue.out b/examples/extended/medical/dna/svalue/svalue.out index 3de5426cdff..5b99af1f15e 100644 --- a/examples/extended/medical/dna/svalue/svalue.out +++ b/examples/extended/medical/dna/svalue/svalue.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -42,7 +42,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -565,7 +567,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 1000 - User=0.260000s Real=0.260562s Sys=0.000000s + User=0.230000s Real=0.235739s Sys=0.000000s ======================== run summary ===================== @@ -606,7 +608,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.460000s Real=0.464966s Sys=0.000000s + User=0.420000s Real=0.423479s Sys=0.000000s ======================== run summary ===================== @@ -647,7 +649,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.670000s Real=0.667770s Sys=0.000000s + User=0.610000s Real=0.611152s Sys=0.000000s ======================== run summary ===================== @@ -688,7 +690,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.860000s Real=0.868683s Sys=0.000000s + User=0.800000s Real=0.797564s Sys=0.000000s ======================== run summary ===================== @@ -729,7 +731,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=1.050000s Real=1.057352s Sys=0.000000s + User=0.960000s Real=0.965937s Sys=0.000000s ======================== run summary ===================== @@ -770,7 +772,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=1.280000s Real=1.282448s Sys=0.000000s + User=1.160000s Real=1.164032s Sys=0.000000s ======================== run summary ===================== @@ -811,7 +813,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=1.460000s Real=1.477738s Sys=0.000000s + User=1.340000s Real=1.347869s Sys=0.000000s ======================== run summary ===================== @@ -852,7 +854,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=1.680000s Real=1.684148s Sys=0.000000s + User=1.540000s Real=1.546781s Sys=0.000000s ======================== run summary ===================== @@ -893,7 +895,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=1.880000s Real=1.893920s Sys=0.000000s + User=1.710000s Real=1.720424s Sys=0.000000s ======================== run summary ===================== @@ -934,7 +936,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=2.360000s Real=2.377583s Sys=0.000000s + User=1.910000s Real=1.923085s Sys=0.000000s ======================== run summary ===================== @@ -975,7 +977,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=4.680000s Real=4.716696s Sys=0.000000s + User=3.800000s Real=3.811435s Sys=0.000000s ======================== run summary ===================== @@ -1016,7 +1018,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=6.430000s Real=6.470294s Sys=0.000000s + User=5.610000s Real=5.640624s Sys=0.000000s ======================== run summary ===================== @@ -1057,7 +1059,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=8.250000s Real=8.310158s Sys=0.000000s + User=7.480000s Real=7.516755s Sys=0.000000s ======================== run summary ===================== @@ -1098,7 +1100,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=10.220000s Real=10.271676s Sys=0.000000s + User=9.310000s Real=9.346249s Sys=0.000000s ======================== run summary ===================== @@ -1139,7 +1141,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=12.250000s Real=12.322462s Sys=0.000000s + User=11.120000s Real=11.163798s Sys=0.000000s ======================== run summary ===================== @@ -1180,7 +1182,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=14.230000s Real=14.322972s Sys=0.000000s + User=13.010000s Real=13.066670s Sys=0.000000s ======================== run summary ===================== @@ -1221,7 +1223,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=16.210000s Real=16.304684s Sys=0.000000s + User=14.980000s Real=15.045502s Sys=0.000000s ======================== run summary ===================== @@ -1262,7 +1264,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=18.290000s Real=18.402398s Sys=0.000000s + User=16.990000s Real=17.069615s Sys=0.000000s ======================== run summary ===================== @@ -1303,7 +1305,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=20.300000s Real=20.416030s Sys=0.000000s + User=18.720000s Real=18.807907s Sys=0.000000s ======================== run summary ===================== diff --git a/examples/extended/medical/dna/wholeNuclearDNA/wholeNuclearDNA.out b/examples/extended/medical/dna/wholeNuclearDNA/wholeNuclearDNA.out index 4ab5ddfd2fe..3c3f8d2d613 100644 --- a/examples/extended/medical/dna/wholeNuclearDNA/wholeNuclearDNA.out +++ b/examples/extended/medical/dna/wholeNuclearDNA/wholeNuclearDNA.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -90,7 +90,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... diff --git a/examples/extended/medical/dna/wvalue/wvalue.out b/examples/extended/medical/dna/wvalue/wvalue.out index 523c3cf0c75..2d31caa8def 100644 --- a/examples/extended/medical/dna/wvalue/wvalue.out +++ b/examples/extended/medical/dna/wvalue/wvalue.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -42,7 +42,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... diff --git a/examples/extended/medical/electronScattering/electronScattering.out b/examples/extended/medical/electronScattering/electronScattering.out index e797dee5230..082b784abaf 100644 --- a/examples/extended/medical/electronScattering/electronScattering.out +++ b/examples/extended/medical/electronScattering/electronScattering.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -316,7 +316,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -348,7 +348,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -380,7 +380,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -393,7 +393,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -439,7 +438,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -471,7 +470,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -503,7 +502,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -535,7 +534,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -567,7 +566,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -599,7 +598,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -631,7 +630,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -735,7 +734,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 100000 - User=4.980000s Real=5.019137s Sys=0.000000s + User=4.350000s Real=4.766457s Sys=0.000000s ======================== run summary ====================== diff --git a/examples/extended/medical/electronScattering2/electronScattering2.out b/examples/extended/medical/electronScattering2/electronScattering2.out index bb6d49d28a9..b772e2d1cdc 100644 --- a/examples/extended/medical/electronScattering2/electronScattering2.out +++ b/examples/extended/medical/electronScattering2/electronScattering2.out @@ -15,7 +15,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -290,7 +290,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -322,7 +322,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -354,7 +354,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -367,7 +367,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -413,7 +412,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -445,7 +444,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -477,7 +476,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -509,7 +508,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -541,7 +540,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -573,7 +572,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -605,7 +604,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV ### Run 0 starts. @@ -845,4 +844,4 @@ Number of Events Processed:20000 230 0.0092149 0.0036173 10 4 231 0.0030701 0.0007328 4 1 232 0.005447 0.0032813 7 4 -### deleting electronFilter 0x100b1e0 +### deleting electronFilter 0x18a5bf0 diff --git a/examples/extended/medical/fanoCavity/fanoCavity.out b/examples/extended/medical/fanoCavity/fanoCavity.out index 4ff8985d791..bf3cb9c226b 100644 --- a/examples/extended/medical/fanoCavity/fanoCavity.out +++ b/examples/extended/medical/fanoCavity/fanoCavity.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -297,7 +297,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 4000 - User=8.670000s Real=8.739868s Sys=0.000000s + User=7.200000s Real=7.260895s Sys=0.000000s ======================== run summary ====================== diff --git a/examples/extended/medical/fanoCavity2/fanoCavity2.out b/examples/extended/medical/fanoCavity2/fanoCavity2.out index b126a309fe0..3b9696a7a64 100644 --- a/examples/extended/medical/fanoCavity2/fanoCavity2.out +++ b/examples/extended/medical/fanoCavity2/fanoCavity2.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -314,7 +314,7 @@ N=17 V[N]={906770732717044781, 629165745432651234, 1235682547346241386, 68420008 Run terminated. Run Summary Number of events processed : 40000 - User=1.290000s Real=1.304379s Sys=0.000000s + User=1.210000s Real=1.211151s Sys=0.000000s Process calls frequency ---> eIoni= 328414 msc= 138727 Transportation= 22903 diff --git a/examples/extended/optical/LXe/LXe.out b/examples/extended/optical/LXe/LXe.out index 8dc9c86bfb8..9b815f9dc28 100644 --- a/examples/extended/optical/LXe/LXe.out +++ b/examples/extended/optical/LXe/LXe.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -252,7 +254,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -292,7 +294,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -324,7 +326,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -393,7 +395,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -425,7 +427,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -457,7 +459,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -489,7 +491,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -521,7 +523,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -553,7 +555,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -585,7 +587,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -970,12 +972,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1039,22 +1050,19 @@ See commands in /vis/modeling/trajectories/ for other options. --> Event 80 starts. --> Event 90 starts. --> Event 100 starts. -/control/shell cp ./currentEvent.rndm ./run0evt106.rndm -./currentEvent.rndm is copied to ./run0evt106.rndm--> Event 110 starts. -/control/shell cp ./currentEvent.rndm ./run0evt113.rndm -./currentEvent.rndm is copied to ./run0evt113.rndm--> Event 120 starts. +"./currentEvent.rndm" is copied to "./run0evt106.rndm--> Event 110 starts. +"./currentEvent.rndm" is copied to "./run0evt113.rndm--> Event 120 starts. --> Event 130 starts. --> Event 140 starts. --> Event 150 starts. --> Event 160 starts. --> Event 170 starts. -/control/shell cp ./currentEvent.rndm ./run0evt179.rndm -./currentEvent.rndm is copied to ./run0evt179.rndm--> Event 180 starts. +"./currentEvent.rndm" is copied to "./run0evt179.rndm--> Event 180 starts. --> Event 190 starts. Run terminated. Run Summary Number of events processed : 200 - User=7.790000s Real=7.912612s Sys=0.050000s + User=6.890000s Real=6.964815s Sys=0.030000s ======================== run summary ====================== The run was 200 events. @@ -1174,7 +1182,7 @@ Unaccounted for photons in this event : 0 Run terminated. Run Summary Number of events processed : 5 - User=0.200000s Real=0.199011s Sys=0.000000s + User=0.170000s Real=0.180598s Sys=0.000000s ======================== run summary ====================== The run was 5 events. @@ -2063,11 +2071,10 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Number of photons absorbed (OpAbsorption) in this event : 36 Number of photons absorbed at boundaries (OpBoundary) in this event : 0 Unaccounted for photons in this event : 0 -/control/shell cp ./currentEvent.rndm ./run2evt0.rndm -./currentEvent.rndm is copied to ./run2evt0.rndm Run terminated. +"./currentEvent.rndm" is copied to "./run2evt0.rndm Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.020477s Sys=0.010000s + User=0.010000s Real=0.004690s Sys=0.000000s ======================== run summary ====================== The run was 1 events. diff --git a/examples/extended/optical/LXe/cerenkov.out b/examples/extended/optical/LXe/cerenkov.out index aa65fb7cdf4..faa55fef307 100644 --- a/examples/extended/optical/LXe/cerenkov.out +++ b/examples/extended/optical/LXe/cerenkov.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -280,7 +282,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -320,7 +322,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -352,7 +354,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -421,7 +423,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -453,7 +455,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -485,7 +487,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -517,7 +519,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -549,7 +551,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -581,7 +583,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -613,7 +615,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -998,12 +1000,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1078,17 +1089,17 @@ WARNING: G4VisManager::IsValidView(): Attempt to draw when no graphics system Run terminated. Run Summary Number of events processed : 10000 - User=3.510000s Real=3.547442s Sys=0.000000s + User=2.930000s Real=2.960797s Sys=0.000000s ======================== run summary ====================== The run was 10000 events. -Number of hits per event: 13.77 +- 0.09876 -Number of hits per event above threshold: 12.3 +- 0.08387 +Number of hits per event: 13.45 +- 0.09684 +Number of hits per event above threshold: 12.03 +- 0.08297 Number of scintillation photons per event : 0 +- 0 -Number of Cerenkov photons per event: 54.28 +- 0.3482 -Number of absorbed photons per event : 33.94 +- 0.222 -Number of photons absorbed at boundary per event: 6.569 +- 0.04575 -Total energy deposition in scintillator per event: 6819 +- 40.4 keV. +Number of Cerenkov photons per event: 53.34 +- 0.3445 +Number of absorbed photons per event : 33.38 +- 0.2212 +Number of photons absorbed at boundary per event: 6.508 +- 0.04414 +Total energy deposition in scintillator per event: 6725 +- 40.08 keV. ... write file : cerenkov.root - done ... close file : cerenkov.root - done @@ -1099,5 +1110,5 @@ Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== Number of memory pools allocated: 17 of which, static: 0 -Dynamic pools deleted: 17 / Total memory freed: 0.42 MB +Dynamic pools deleted: 17 / Total memory freed: 0.38 MB ============================================================ diff --git a/examples/extended/optical/LXe/photon.out b/examples/extended/optical/LXe/photon.out index ed3b175f385..bc1a36f0461 100644 --- a/examples/extended/optical/LXe/photon.out +++ b/examples/extended/optical/LXe/photon.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -232,7 +234,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -272,7 +274,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -304,7 +306,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -373,7 +375,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -405,7 +407,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -437,7 +439,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -469,7 +471,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -501,7 +503,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -533,7 +535,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -565,7 +567,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -950,12 +952,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/optical/LXe/wls.out b/examples/extended/optical/LXe/wls.out index fb8935d1d37..6baf5dbe899 100644 --- a/examples/extended/optical/LXe/wls.out +++ b/examples/extended/optical/LXe/wls.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -276,7 +278,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -316,7 +318,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -348,7 +350,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -417,7 +419,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -449,7 +451,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -481,7 +483,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -513,7 +515,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -545,7 +547,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -577,7 +579,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -609,7 +611,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -994,12 +996,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1127,7 +1138,7 @@ LXeSteppingAction: No reallocation step after reflection!Something is wrong with Run terminated. Run Summary Number of events processed : 100 - User=31.510000s Real=31.715511s Sys=0.000000s + User=28.020000s Real=28.318159s Sys=0.060000s ======================== run summary ====================== The run was 100 events. diff --git a/examples/extended/optical/OpNovice/OpNovice.out b/examples/extended/optical/OpNovice/OpNovice.out index 08e6cce9222..25ed0c9fb67 100644 --- a/examples/extended/optical/OpNovice/OpNovice.out +++ b/examples/extended/optical/OpNovice/OpNovice.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -494,7 +494,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -534,7 +534,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -566,7 +566,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -635,7 +635,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -667,7 +667,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -699,7 +699,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -731,7 +731,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -763,7 +763,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV 2.034e-06MeV 857215mm @@ -827,7 +827,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -859,7 +859,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1244,12 +1244,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -13807,14 +13816,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu 13 60.1 90.9 87.8 0.0511 1.42e-05 11.4 476 Tank compt 14 88.6 63.8 96.5 0.0492 1.36e-05 40.3 517 Tank compt 15 180 63.8 105 0.0446 2.92e-05 91.5 608 Tank compt - 16 180 62.6 105 0.0432 2.92e-05 1.25 609 Tank compt - 17 249 34.3 117 0.038 1.42e-05 75.5 685 Tank compt - 18 209 -5.87 84 0.0336 0.000537 65.8 751 Tank compt - 19 220 -1.87 92.7 0 0.000538 14.9 766 Tank phot - -********************************************************************************************************* -* G4Track Information: Particle = e-, Track ID = 102, Parent ID = 51 -*********************************** + 16 180 62.6 ============================================================================================ ================= lines above cut to keep file within limits =============================== ============================================================================================ @@ -13828,7 +13830,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Run terminated. Run Summary Number of events processed : 1000 - User=1.600000s Real=1.616919s Sys=0.000000s + User=1.340000s Real=1.341841s Sys=0.000000s ======================== run summary ====================== Primary particle was: e+ with energy 500 keV. diff --git a/examples/extended/optical/OpNovice/opgdml.out b/examples/extended/optical/OpNovice/opgdml.out index 0a4c257c3e9..7fc853c6b01 100644 --- a/examples/extended/optical/OpNovice/opgdml.out +++ b/examples/extended/optical/OpNovice/opgdml.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -215,7 +215,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -255,7 +255,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -287,7 +287,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -356,7 +356,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -388,7 +388,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -420,7 +420,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -452,7 +452,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -484,7 +484,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV 2.034e-06MeV 857215mm @@ -548,7 +548,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -580,7 +580,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -965,12 +965,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -13577,14 +13586,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu 12 -5e+03 -126 2.33e+03 3.99e-06 0 0 3.44e+04 Tank_phys Transportation 13 4.45e+03 -2.94e+03 -3.39e+03 3.99e-06 3.99e-06 1.14e+04 4.58e+04 Tank_phys OpAbsorption -********************************************************************************************************* -* G4Track Information: Particle = opticalphoton, Track ID = 40, Parent ID = 1 -********************************************************************************************************* - -Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName - 0 1.28 0.187 0.296 2.52e-06 0 0 0 Tank_phys initStep - 1 5e+03 -4.53e+03 -4.01e+03 2.52e-06 0 7.85e+03 7.85e+03 expHall_phys Transportation - 2 5e+03 -4.53e+03 +********************************************************** ============================================================================================ ================= lines above cut to keep file within limits =============================== ============================================================================================ @@ -13598,7 +13600,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Run terminated. Run Summary Number of events processed : 1000 - User=1.940000s Real=1.954157s Sys=0.000000s + User=1.410000s Real=1.420690s Sys=0.000000s ======================== run summary ====================== Primary particle was: e+ with energy 500 keV. diff --git a/examples/extended/optical/OpNovice/optPhoton.out b/examples/extended/optical/OpNovice/optPhoton.out index cb97b6f805d..444af045e45 100644 --- a/examples/extended/optical/OpNovice/optPhoton.out +++ b/examples/extended/optical/OpNovice/optPhoton.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -485,7 +485,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -525,7 +525,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -557,7 +557,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -626,7 +626,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -658,7 +658,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -690,7 +690,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -722,7 +722,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -754,7 +754,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV 2.034e-06MeV 857215mm @@ -818,7 +818,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -850,7 +850,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1235,12 +1235,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1422,7 +1431,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.002209s Sys=0.000000s + User=0.000000s Real=0.001254s Sys=0.000000s ======================== run summary ====================== Primary particle was: opticalphoton with energy 3 eV . @@ -1462,7 +1471,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.220000s Real=0.222421s Sys=0.000000s + User=0.130000s Real=0.136303s Sys=0.000000s ======================== run summary ====================== Primary particle was: opticalphoton with energy 3 eV . diff --git a/examples/extended/optical/OpNovice2/OpNovice2.out b/examples/extended/optical/OpNovice2/OpNovice2.out index 01c10355f13..78ec79e27fb 100644 --- a/examples/extended/optical/OpNovice2/OpNovice2.out +++ b/examples/extended/optical/OpNovice2/OpNovice2.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -368,7 +370,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -408,7 +410,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -440,7 +442,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -509,7 +511,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -541,7 +543,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -573,7 +575,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -605,7 +607,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -637,7 +639,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -669,7 +671,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -701,7 +703,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1086,12 +1088,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1137,7 +1148,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 100000 - User=1.380000s Real=1.378697s Sys=0.000000s + User=1.200000s Real=1.209251s Sys=0.010000s Run Summary --------------------------------- diff --git a/examples/extended/optical/OpNovice2/boundary.out b/examples/extended/optical/OpNovice2/boundary.out index 35f43397784..1b154fb7978 100644 --- a/examples/extended/optical/OpNovice2/boundary.out +++ b/examples/extended/optical/OpNovice2/boundary.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -446,7 +448,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -486,7 +488,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -518,7 +520,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -587,7 +589,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -619,7 +621,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -651,7 +653,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -683,7 +685,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -715,7 +717,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -747,7 +749,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -779,7 +781,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1164,12 +1166,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1215,7 +1226,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 10000 - User=0.220000s Real=0.226244s Sys=0.000000s + User=0.190000s Real=0.199533s Sys=0.000000s Run Summary --------------------------------- @@ -1304,7 +1315,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.140000s Real=0.141733s Sys=0.000000s + User=0.110000s Real=0.115249s Sys=0.000000s Run Summary --------------------------------- @@ -1411,7 +1422,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.150000s Real=0.157517s Sys=0.000000s + User=0.130000s Real=0.126858s Sys=0.000000s Run Summary --------------------------------- @@ -1524,7 +1535,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.170000s Real=0.164746s Sys=0.000000s + User=0.130000s Real=0.145386s Sys=0.000000s Run Summary --------------------------------- @@ -1604,7 +1615,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.170000s Real=0.175957s Sys=0.000000s + User=0.150000s Real=0.148025s Sys=0.000000s Run Summary --------------------------------- @@ -1684,7 +1695,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.920000s Real=0.925466s Sys=0.010000s + User=0.720000s Real=0.727760s Sys=0.000000s Run Summary --------------------------------- @@ -1768,7 +1779,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.770000s Real=0.784344s Sys=0.000000s + User=0.710000s Real=0.721864s Sys=0.000000s Run Summary --------------------------------- @@ -1857,7 +1868,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.160000s Real=0.166605s Sys=0.000000s + User=0.180000s Real=0.180966s Sys=0.000000s Run Summary --------------------------------- @@ -1937,7 +1948,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.180000s Real=0.182741s Sys=0.000000s + User=0.140000s Real=0.149649s Sys=0.000000s Run Summary --------------------------------- @@ -2031,7 +2042,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.140000s Real=0.141658s Sys=0.000000s + User=0.110000s Real=0.124101s Sys=0.000000s Run Summary --------------------------------- @@ -2138,7 +2149,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.150000s Real=0.153029s Sys=0.000000s + User=0.130000s Real=0.162528s Sys=0.000000s Run Summary --------------------------------- @@ -2253,7 +2264,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.160000s Real=0.155437s Sys=0.000000s + User=0.130000s Real=0.134122s Sys=0.000000s Run Summary --------------------------------- @@ -2342,7 +2353,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.160000s Real=0.159616s Sys=0.000000s + User=0.130000s Real=0.131780s Sys=0.000000s Run Summary --------------------------------- @@ -2422,7 +2433,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.390000s Real=0.392357s Sys=0.000000s + User=0.330000s Real=0.332749s Sys=0.000000s Run Summary --------------------------------- @@ -2503,7 +2514,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.170000s Real=0.169873s Sys=0.000000s + User=0.140000s Real=0.142294s Sys=0.000000s Run Summary --------------------------------- @@ -2597,7 +2608,7 @@ Boundary scattering may be incorrect. Run terminated. Run Summary Number of events processed : 10000 - User=0.390000s Real=0.396015s Sys=0.000000s + User=0.340000s Real=0.340382s Sys=0.000000s Run Summary --------------------------------- @@ -2686,7 +2697,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.150000s Real=0.157772s Sys=0.000000s + User=0.130000s Real=0.130461s Sys=0.000000s Run Summary --------------------------------- @@ -2769,7 +2780,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.170000s Real=0.171465s Sys=0.000000s + User=0.210000s Real=0.221350s Sys=0.000000s Run Summary --------------------------------- @@ -2864,7 +2875,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=1.250000s Real=1.256509s Sys=0.000000s + User=1.020000s Real=1.030566s Sys=0.000000s Run Summary --------------------------------- @@ -2947,7 +2958,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.050000s Real=0.049109s Sys=0.000000s + User=0.040000s Real=0.042137s Sys=0.000000s Run Summary --------------------------------- @@ -3035,7 +3046,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.090000s Real=0.083436s Sys=0.000000s + User=0.070000s Real=0.069663s Sys=0.000000s Run Summary --------------------------------- diff --git a/examples/extended/optical/OpNovice2/coated.out b/examples/extended/optical/OpNovice2/coated.out index f73bcfe233c..44e0066771e 100644 --- a/examples/extended/optical/OpNovice2/coated.out +++ b/examples/extended/optical/OpNovice2/coated.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -340,7 +342,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -380,7 +382,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -412,7 +414,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -481,7 +483,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -513,7 +515,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -545,7 +547,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -577,7 +579,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -609,7 +611,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -641,7 +643,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -673,7 +675,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1058,12 +1060,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1114,7 +1125,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 500000 - User=3.060000s Real=3.076434s Sys=0.000000s + User=2.880000s Real=2.898216s Sys=0.000000s Run Summary --------------------------------- @@ -1193,7 +1204,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 500000 - User=3.400000s Real=3.417403s Sys=0.000000s + User=3.110000s Real=3.133778s Sys=0.000000s Run Summary --------------------------------- diff --git a/examples/extended/optical/OpNovice2/complexRindex.out b/examples/extended/optical/OpNovice2/complexRindex.out index d7ee9ed8a91..965d013dc50 100644 --- a/examples/extended/optical/OpNovice2/complexRindex.out +++ b/examples/extended/optical/OpNovice2/complexRindex.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -348,7 +350,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -388,7 +390,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -420,7 +422,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -489,7 +491,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -521,7 +523,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -553,7 +555,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -585,7 +587,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -617,7 +619,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -649,7 +651,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -681,7 +683,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1066,12 +1068,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/optical/OpNovice2/electron.out b/examples/extended/optical/OpNovice2/electron.out index 90ee4345b9b..db582a1964e 100644 --- a/examples/extended/optical/OpNovice2/electron.out +++ b/examples/extended/optical/OpNovice2/electron.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -923,7 +925,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -963,7 +965,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -995,7 +997,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1064,7 +1066,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1096,7 +1098,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1128,7 +1130,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1160,7 +1162,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1192,7 +1194,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1224,7 +1226,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1256,7 +1258,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1641,12 +1643,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1693,7 +1704,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 100 - User=2.910000s Real=2.927339s Sys=0.000000s + User=2.580000s Real=2.593166s Sys=0.000000s Run Summary --------------------------------- diff --git a/examples/extended/optical/OpNovice2/fresnel.out b/examples/extended/optical/OpNovice2/fresnel.out index a2dc0aecbd8..1196e4c0ce1 100644 --- a/examples/extended/optical/OpNovice2/fresnel.out +++ b/examples/extended/optical/OpNovice2/fresnel.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -323,7 +325,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -363,7 +365,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -395,7 +397,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -464,7 +466,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -496,7 +498,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -528,7 +530,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -560,7 +562,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -592,7 +594,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -624,7 +626,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -656,7 +658,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1041,12 +1043,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1097,7 +1108,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 500000 - User=3.780000s Real=3.805164s Sys=0.000000s + User=5.250000s Real=5.279245s Sys=0.000000s Run Summary --------------------------------- @@ -1177,7 +1188,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 500000 - User=4.190000s Real=4.223987s Sys=0.000000s + User=3.500000s Real=3.556863s Sys=0.000000s Run Summary --------------------------------- diff --git a/examples/extended/optical/OpNovice2/scint_by_particle.out b/examples/extended/optical/OpNovice2/scint_by_particle.out index f1ac8099d5d..b7993415cd0 100644 --- a/examples/extended/optical/OpNovice2/scint_by_particle.out +++ b/examples/extended/optical/OpNovice2/scint_by_particle.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -1282,7 +1284,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -1322,7 +1324,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -1354,7 +1356,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1423,7 +1425,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1455,7 +1457,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1487,7 +1489,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1519,7 +1521,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1551,7 +1553,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1583,7 +1585,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1615,7 +1617,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -2000,12 +2002,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -2051,7 +2062,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 100 - User=9.610000s Real=9.681412s Sys=0.010000s + User=8.080000s Real=8.160262s Sys=0.020000s Run Summary --------------------------------- @@ -2122,7 +2133,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.150000s Real=0.146899s Sys=0.000000s + User=0.130000s Real=0.122764s Sys=0.000000s Run Summary --------------------------------- @@ -2193,7 +2204,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=1.450000s Real=1.458808s Sys=0.000000s + User=1.240000s Real=1.254080s Sys=0.000000s Run Summary --------------------------------- @@ -2264,7 +2275,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.150000s Real=0.147756s Sys=0.010000s + User=0.120000s Real=0.124516s Sys=0.000000s Run Summary --------------------------------- @@ -2336,7 +2347,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100 - User=0.140000s Real=0.146474s Sys=0.000000s + User=0.120000s Real=0.135727s Sys=0.000000s Run Summary --------------------------------- @@ -2347,7 +2358,7 @@ Material of tank: G4_BGO Average energy of Cerenkov photons created per event: 0 eV. Average number of Cerenkov photons created per event: 0 -Average energy of scintillation photons created per event: 2.5e+03 eV. +Average energy of scintillation photons created per event: 2.4e+03 eV. Average number of scintillation photons created per event: 4.9e+02 Average energy per photon: 5 eV. Average number of photons absorbed by WLS per event: 0 @@ -2361,18 +2372,18 @@ Average number of OpAbsorption per event: 4.9e+02 Surface events (on +X surface, maximum one per photon) this run: # of primary particles: 1e+02 -OpAbsorption before surface: 24772 -Total # of surface events: 24694 +OpAbsorption before surface: 24719 +Total # of surface events: 24525 Surface events by process: Sum: 0 - Unaccounted for: 24694 + Unaccounted for: 24525 --------------------------------- Histogram statistics for the entire run: - Scintillation spectrum: mean = 4.96621 eV rms = 1.7292 eV. - Scintillation time: mean = 33.7391 ns rms = 40.8302 ns. + Scintillation spectrum: mean = 4.97206 eV rms = 1.7375 eV. + Scintillation time: mean = 33.5026 ns rms = 40.972 ns. ... write file : scint_by_particle.root - done ... close file : scint_by_particle.root - done diff --git a/examples/extended/optical/OpNovice2/wls.out b/examples/extended/optical/OpNovice2/wls.out index ef7d5dd34d3..8d798685f9d 100644 --- a/examples/extended/optical/OpNovice2/wls.out +++ b/examples/extended/optical/OpNovice2/wls.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -619,7 +621,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -659,7 +661,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -691,7 +693,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -760,7 +762,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -792,7 +794,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -824,7 +826,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -856,7 +858,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -888,7 +890,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -920,7 +922,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -952,7 +954,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1337,12 +1339,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1398,7 +1409,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 10000 - User=0.620000s Real=0.625391s Sys=0.010000s + User=0.550000s Real=0.553646s Sys=0.000000s Run Summary --------------------------------- diff --git a/examples/extended/optical/wls/electron.out b/examples/extended/optical/wls/electron.out index ccbe943cf27..7ef8c08cf13 100644 --- a/examples/extended/optical/wls/electron.out +++ b/examples/extended/optical/wls/electron.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -47,7 +47,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -331,7 +333,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -371,7 +373,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -403,7 +405,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -472,7 +474,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -504,7 +506,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -536,7 +538,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -568,7 +570,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -600,7 +602,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -632,7 +634,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -664,7 +666,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1049,12 +1051,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1332,7 +1343,7 @@ Arrival time: 39.151 ns Arrival position: (-8.89374 um , 509.083 um ) Exit posi Run terminated. Run Summary Number of events processed : 10 - User=16.570000s Real=16.644103s Sys=0.010000s + User=14.350000s Real=14.415669s Sys=0.000000s ----> print histograms statistics for the entire run diff --git a/examples/extended/parallel/MPI/History b/examples/extended/parallel/MPI/History index 9b2b563a283..f0789d86c8c 100644 --- a/examples/extended/parallel/MPI/History +++ b/examples/extended/parallel/MPI/History @@ -1,12 +1,10 @@ # Example MPI History See `CONTRIBUTING.rst` for details of **required** info/format for each entry, -which **must** added in reverse chronological order (newest at the top). -It must **not** be used as a substitute for writing good git commit messages! +which **must** added in reverse chronological order (newest at the top). It must **not** +be used as a substitute for writing good git commit messages! -------------------------------------------------------------------------------- - -## 2023-01-09 Ben Morgan (MPI-V11-00-04) +## 2023-01-09 Ben Morgan (MPI-V11-01-00) - Use PROJECT_ scoped _SOURCE/BINARY_DIR variables in place of CMAKE_ scope version to ease use of Geant4 as a CMake subproject. - Fixes [GitHub PR #52](https://github.com/Geant4/geant4/pull/52) diff --git a/examples/extended/parallel/ThreadsafeScorers/threadsafe-scorers.out b/examples/extended/parallel/ThreadsafeScorers/threadsafe-scorers.out index 728b68f86b5..a20662210e9 100644 --- a/examples/extended/parallel/ThreadsafeScorers/threadsafe-scorers.out +++ b/examples/extended/parallel/ThreadsafeScorers/threadsafe-scorers.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -56,7 +56,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -237,7 +239,7 @@ ePairProd: for e- XStype:1 SubType=4 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -277,7 +279,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -309,7 +311,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -395,7 +397,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -427,7 +429,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -459,7 +461,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -491,7 +493,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -523,7 +525,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -537,6 +539,7 @@ CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 ProduceFissionFragments ? 0 UseWendtFissionModel ? 0 UseNRESP71Model ? 0 + UseDBRC ? 0 ======================================================= @@@ G4ParticleHPInelastic instantiated for particle neutron data directory variable is G4NEUTRONHPDATA pointing to /cvmfs/geant4.cern.ch/share/data/G4NDL4.7/Inelastic @@ -569,7 +572,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 20 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -601,7 +604,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV ====================================================================== @@ -969,12 +972,21 @@ Threshold for very long decay time at rest 3.171e+10 y ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1026,781 +1038,776 @@ See commands in /vis/modeling/trajectories/ for other options. # Environment settings: # G4BACKTRACE = # G4FORCE_RUN_MANAGER_TYPE = Serial +# G4Hadronic_epReportLevel = 0 # G4RUN_MANAGER_TYPE = Tasking ########################################################################################## Run terminated. Run Summary Number of events processed : 10000 - User=21.670000s Real=23.101044s Sys=1.140000s + User=20.570000s Real=23.828126s Sys=0.940000s ###### EndOfTSRunAction ###### ============================================================ opened file mfd_tl_EnergyDeposit.out for output ============================================================ - 0 25.299195 keV - 1 680.095952 keV - 2 1132.761031 keV - 3 760.499785 keV - 4 235.459711 keV - 5 100.143618 keV - 6 118.059526 keV - 7 386.471966 keV - 8 213.898741 keV - 9 83.994002 keV - 10 1388.698599 keV - 11 974.647620 keV - 12 25.951656 keV - 13 1097.542231 keV - 14 2331.906741 keV - 15 537.225509 keV - 16 330.477185 keV - 17 1513.127832 keV - 18 72.469989 keV - 19 48.264662 keV - 20 3642.021939 keV - 21 1603.921237 keV - 22 1979.851675 keV - 23 171.658951 keV - 24 1317.511146 keV - 25 268.212008 keV - 26 5712.508762 keV - 27 7004.866765 keV - 28 1441.447673 keV - 29 1569.960590 keV - 30 2088.566144 keV - 31 6684.182602 keV - 32 6140.803793 keV - 33 670.699315 keV - 34 3065.720905 keV - 35 2225.329204 keV - 36 4992.942972 keV - 37 1680.273242 keV - 38 7353.309519 keV - 39 2807.065762 keV - 40 1791.863230 keV - 41 4202.859504 keV - 42 7543.093595 keV - 43 4697.303593 keV - 44 1905.013886 keV - 45 2104.505416 keV - 46 1648.239746 keV - 47 579.830952 keV - 48 4401.741160 keV - 49 3285.583780 keV - 50 9803.151519 keV - 51 5412.878658 keV - 52 12342.260914 keV - 53 5079.374483 keV - 54 7745.165189 keV - 55 8116.436261 keV - 56 23047.605342 keV - 57 28024.305489 keV - 58 24198.973536 keV - 59 10510.364748 keV - 60 9087.130307 keV - 61 24594.673164 keV - 62 17007.222968 keV - 63 18969.415843 keV - 64 5824.227576 keV - 65 2717.767589 keV - 66 14516.151916 keV - 67 16682.570690 keV - 68 26307.285179 keV - 69 6136.254684 keV - 70 6086.403245 keV - 71 13159.012927 keV - 72 8152.062121 keV - 73 7224.199930 keV - 74 8770.930524 keV - 75 21339.949572 keV - 76 34830.627186 keV - 77 40272.767801 keV - 78 39141.568335 keV - 79 26839.184715 keV - 80 35719.060315 keV - 81 335790.367584 keV - 82 337326.001703 keV - 83 388495.708026 keV - 84 29694.367910 keV - 85 33120.831708 keV - 86 316778.632908 keV - 87 243192.270840 keV - 88 318553.814884 keV - 89 27397.833723 keV - 90 31496.792533 keV - 91 331867.302792 keV - 92 341184.886514 keV - 93 396488.414386 keV - 94 31519.153338 keV - 95 25748.703707 keV - 96 31183.598020 keV - 97 46469.619463 keV - 98 27006.938349 keV - 99 29755.731543 keV - 100 330841.055091 keV - 101 363257.941569 keV - 102 368196.020916 keV - 103 344546.115033 keV - 104 322246.857137 keV - 105 390379.848249 keV - 106 358803.539757 keV - 107 388819.440446 keV - 108 423484.587441 keV - 109 348714.680797 keV - 110 347577.058050 keV - 111 401609.711997 keV - 112 396432.947359 keV - 113 412198.711495 keV - 114 348634.650720 keV - 115 361754.379885 keV - 116 389657.527246 keV - 117 397487.120671 keV - 118 430725.392381 keV - 119 322436.702956 keV - 120 322413.670001 keV - 121 368206.275297 keV - 122 389063.748841 keV - 123 342727.792339 keV - 124 324895.693187 keV - 0 25.2992 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: 0 | r2eff: 0 | hits: 1 ] keV - 1 680.096 [sigma: 120.113 | error: 0.3059 | coeff: 0.3059 | eff: 1 | fom: 0.485757 | r2int: 0.0623831 | r2eff: 0 | hits: 3 ] keV - 2 1132.76 [sigma: 147.35 | error: 0.31863 | coeff: 0.31863 | eff: 1 | fom: 0.447718 | r2int: 0.0846042 | r2eff: 0 | hits: 6 ] keV - 3 760.5 [sigma: 531.727 | error: 0.988792 | coeff: 0.988792 | eff: 1 | fom: 0.0464909 | r2int: 0.488854 | r2eff: 0 | hits: 2 ] keV - 4 235.46 [sigma: 82.8793 | error: 0.497788 | coeff: 0.497788 | eff: 1 | fom: 0.183438 | r2int: 0.123896 | r2eff: 0 | hits: 2 ] keV - 5 100.144 [sigma: 60.922 | error: 0.860332 | coeff: 0.860332 | eff: 1 | fom: 0.0614109 | r2int: 0.370086 | r2eff: 0 | hits: 2 ] keV - 6 118.06 [sigma: 18.6628 | error: 0.353477 | coeff: 0.353477 | eff: 1 | fom: 0.363793 | r2int: 0.099957 | r2eff: 0 | hits: 5 ] keV - 7 386.472 [sigma: 84.3294 | error: 0.436406 | coeff: 0.436406 | eff: 1 | fom: 0.238669 | r2int: 0.142838 | r2eff: 0 | hits: 4 ] keV - 8 213.899 [sigma: 33.6133 | error: 0.351389 | coeff: 0.351389 | eff: 1 | fom: 0.36813 | r2int: 0.0987795 | r2eff: 0 | hits: 5 ] keV - 9 83.994 [sigma: 5.37439 | error: 0.090489 | coeff: 0.090489 | eff: 1 | fom: 5.55118 | r2int: 0.00409413 | r2eff: 0 | hits: 2 ] keV - 10 1388.7 [sigma: 521.92 | error: 0.751667 | coeff: 0.751667 | eff: 1 | fom: 0.08045 | r2int: 0.423753 | r2eff: 0 | hits: 4 ] keV - 11 974.648 [sigma: 275.83 | error: 0.693217 | coeff: 0.693217 | eff: 1 | fom: 0.0945885 | r2int: 0.400459 | r2eff: 0 | hits: 6 ] keV - 12 25.9517 [sigma: 6.19148 | error: 0.477155 | coeff: 0.477155 | eff: 1 | fom: 0.199645 | r2int: 0.170758 | r2eff: 0 | hits: 4 ] keV - 13 1097.54 [sigma: 324.647 | error: 0.782598 | coeff: 0.782598 | eff: 1 | fom: 0.0742164 | r2int: 0.524965 | r2eff: 0 | hits: 7 ] keV - 14 2331.91 [sigma: 673.757 | error: 0.57786 | coeff: 0.57786 | eff: 1 | fom: 0.136123 | r2int: 0.250441 | r2eff: 0 | hits: 4 ] keV - 15 537.226 [sigma: 181.223 | error: 0.754297 | coeff: 0.754297 | eff: 1 | fom: 0.07989 | r2int: 0.455172 | r2eff: 0 | hits: 5 ] keV - 16 330.477 [sigma: 28.1701 | error: 0.269555 | coeff: 0.269555 | eff: 1 | fom: 0.62558 | r2int: 0.0653939 | r2eff: 0 | hits: 10 ] keV - 17 1513.13 [sigma: 519.797 | error: 0.908882 | coeff: 0.908882 | eff: 1 | fom: 0.0550253 | r2int: 0.708056 | r2eff: 0 | hits: 7 ] keV - 18 72.47 [sigma: 24.452 | error: 0.477167 | coeff: 0.477167 | eff: 1 | fom: 0.199635 | r2int: 0.113844 | r2eff: 0 | hits: 2 ] keV - 19 48.2647 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: 2.22045e-16 | r2eff: 0 | hits: 1 ] keV - 20 3642.02 [sigma: 1030.7 | error: 0.566007 | coeff: 0.566007 | eff: 1 | fom: 0.141884 | r2int: 0.240273 | r2eff: 0 | hits: 4 ] keV - 21 1603.92 [sigma: 704.885 | error: 0.878952 | coeff: 0.878952 | eff: 1 | fom: 0.0588365 | r2int: 0.579418 | r2eff: 0 | hits: 4 ] keV - 22 1979.85 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: 0 | r2eff: 0 | hits: 1 ] keV - 23 171.659 [sigma: 31.867 | error: 0.32154 | coeff: 0.32154 | eff: 1 | fom: 0.439651 | r2int: 0.0689252 | r2eff: 0 | hits: 3 ] keV - 24 1317.51 [sigma: 249.973 | error: 0.379462 | coeff: 0.379462 | eff: 1 | fom: 0.315675 | r2int: 0.107994 | r2eff: 0 | hits: 4 ] keV - 25 268.212 [sigma: 30.3114 | error: 0.339039 | coeff: 0.339039 | eff: 1 | fom: 0.395438 | r2int: 0.102176 | r2eff: 0 | hits: 9 ] keV - 26 5712.51 [sigma: 576.714 | error: 0.428322 | coeff: 0.428322 | eff: 1 | fom: 0.247764 | r2int: 0.173267 | r2eff: 0 | hits: 18 ] keV - 27 7004.87 [sigma: 533.741 | error: 0.340757 | coeff: 0.340757 | eff: 1 | fom: 0.391459 | r2int: 0.11031 | r2eff: 0 | hits: 20 ] keV - 28 1441.45 [sigma: 312.233 | error: 0.530586 | coeff: 0.530586 | eff: 1 | fom: 0.16146 | r2int: 0.234602 | r2eff: 0 | hits: 6 ] keV - 29 1569.96 [sigma: 233.858 | error: 0.394105 | coeff: 0.394105 | eff: 1 | fom: 0.292653 | r2int: 0.13313 | r2eff: 0 | hits: 7 ] keV - 30 2088.57 [sigma: 216.999 | error: 0.374612 | coeff: 0.374612 | eff: 1 | fom: 0.323902 | r2int: 0.129539 | r2eff: 0 | hits: 13 ] keV - 31 6684.18 [sigma: 499.188 | error: 0.37341 | coeff: 0.37341 | eff: 1 | fom: 0.325991 | r2int: 0.133858 | r2eff: 0 | hits: 25 ] keV - 32 6140.8 [sigma: 589.305 | error: 0.418304 | coeff: 0.418304 | eff: 1 | fom: 0.259773 | r2int: 0.165769 | r2eff: 0 | hits: 19 ] keV - 33 670.699 [sigma: 36.6042 | error: 0.196777 | coeff: 0.196777 | eff: 1 | fom: 1.17389 | r2int: 0.0357428 | r2eff: 0 | hits: 13 ] keV - 34 3065.72 [sigma: 324.868 | error: 0.423872 | coeff: 0.423872 | eff: 1 | fom: 0.252993 | r2int: 0.168438 | r2eff: 0 | hits: 16 ] keV - 35 2225.33 [sigma: 323.786 | error: 0.460112 | coeff: 0.460112 | eff: 1 | fom: 0.214709 | r2int: 0.190533 | r2eff: 0 | hits: 10 ] keV - 36 4992.94 [sigma: 472.023 | error: 0.453388 | coeff: 0.453388 | eff: 1 | fom: 0.221125 | r2int: 0.196623 | r2eff: 0 | hits: 23 ] keV - 37 1680.27 [sigma: 102.912 | error: 0.280671 | coeff: 0.280671 | eff: 1 | fom: 0.577008 | r2int: 0.0750251 | r2eff: 0 | hits: 21 ] keV - 38 7353.31 [sigma: 729.183 | error: 0.495819 | coeff: 0.495819 | eff: 1 | fom: 0.184897 | r2int: 0.236003 | r2eff: 0 | hits: 25 ] keV - 39 2807.07 [sigma: 570.516 | error: 0.67408 | coeff: 0.67408 | eff: 1 | fom: 0.100036 | r2int: 0.413076 | r2eff: 0 | hits: 11 ] keV - 40 1791.86 [sigma: 290.354 | error: 0.584244 | coeff: 0.584244 | eff: 1 | fom: 0.133164 | r2int: 0.315084 | r2eff: 0 | hits: 13 ] keV - 41 4202.86 [sigma: 473.523 | error: 0.503862 | coeff: 0.503862 | eff: 1 | fom: 0.179042 | r2int: 0.241183 | r2eff: 0 | hits: 20 ] keV - 42 7543.09 [sigma: 645.177 | error: 0.41902 | coeff: 0.41902 | eff: 1 | fom: 0.258885 | r2int: 0.168262 | r2eff: 0 | hits: 24 ] keV - 43 4697.3 [sigma: 439.309 | error: 0.428579 | coeff: 0.428579 | eff: 1 | fom: 0.247466 | r2int: 0.174933 | r2eff: 0 | hits: 21 ] keV - 44 1905.01 [sigma: 404.911 | error: 0.63765 | coeff: 0.63765 | eff: 1 | fom: 0.111792 | r2int: 0.36142 | r2eff: 0 | hits: 9 ] keV - 45 2104.51 [sigma: 439.773 | error: 0.552876 | coeff: 0.552876 | eff: 1 | fom: 0.148704 | r2int: 0.262004 | r2eff: 0 | hits: 7 ] keV - 46 1648.24 [sigma: 282.429 | error: 0.453355 | coeff: 0.453355 | eff: 1 | fom: 0.221157 | r2int: 0.176169 | r2eff: 0 | hits: 7 ] keV - 47 579.831 [sigma: 58.2379 | error: 0.317617 | coeff: 0.317617 | eff: 1 | fom: 0.450577 | r2int: 0.0907928 | r2eff: 0 | hits: 10 ] keV - 48 4401.74 [sigma: 610.442 | error: 0.500025 | coeff: 0.500025 | eff: 1 | fom: 0.1818 | r2int: 0.230792 | r2eff: 0 | hits: 13 ] keV - 49 3285.58 [sigma: 631.352 | error: 0.576474 | coeff: 0.576474 | eff: 1 | fom: 0.136778 | r2int: 0.295398 | r2eff: 0 | hits: 9 ] keV - 50 9803.15 [sigma: 633.944 | error: 0.316804 | coeff: 0.316804 | eff: 1 | fom: 0.452893 | r2int: 0.096183 | r2eff: 0 | hits: 24 ] keV - 51 5412.88 [sigma: 321.165 | error: 0.351022 | coeff: 0.351022 | eff: 1 | fom: 0.368901 | r2int: 0.119696 | r2eff: 0 | hits: 35 ] keV - 52 12342.3 [sigma: 462.763 | error: 0.251519 | coeff: 0.251519 | eff: 1 | fom: 0.718515 | r2int: 0.0618559 | r2eff: 0 | hits: 45 ] keV - 53 5079.37 [sigma: 184.48 | error: 0.238163 | coeff: 0.238163 | eff: 1 | fom: 0.801365 | r2int: 0.0554023 | r2eff: 0 | hits: 43 ] keV - 54 7745.17 [sigma: 435.241 | error: 0.30262 | coeff: 0.30262 | eff: 1 | fom: 0.496343 | r2int: 0.0884211 | r2eff: 0 | hits: 29 ] keV - 55 8116.44 [sigma: 385.968 | error: 0.300757 | coeff: 0.300757 | eff: 1 | fom: 0.502512 | r2int: 0.0881933 | r2eff: 0 | hits: 40 ] keV - 56 23047.6 [sigma: 719.41 | error: 0.235661 | coeff: 0.235661 | eff: 1 | fom: 0.818467 | r2int: 0.0545619 | r2eff: 0 | hits: 57 ] keV - 57 28024.3 [sigma: 720.824 | error: 0.231492 | coeff: 0.231492 | eff: 1 | fom: 0.848211 | r2int: 0.0529272 | r2eff: 0 | hits: 81 ] keV - 58 24199 [sigma: 683.815 | error: 0.236424 | coeff: 0.236424 | eff: 1 | fom: 0.813196 | r2int: 0.0550976 | r2eff: 0 | hits: 70 ] keV - 59 10510.4 [sigma: 454.357 | error: 0.289992 | coeff: 0.289992 | eff: 1 | fom: 0.540512 | r2int: 0.0822265 | r2eff: 0 | hits: 45 ] keV - 60 9087.13 [sigma: 478.223 | error: 0.336973 | coeff: 0.336973 | eff: 1 | fom: 0.400301 | r2int: 0.110781 | r2eff: 0 | hits: 41 ] keV - 61 24594.7 [sigma: 696.463 | error: 0.235224 | coeff: 0.235224 | eff: 1 | fom: 0.821514 | r2int: 0.0545284 | r2eff: 0 | hits: 69 ] keV - 62 17007.2 [sigma: 466.6 | error: 0.263151 | coeff: 0.263151 | eff: 1 | fom: 0.656398 | r2int: 0.0684957 | r2eff: 0 | hits: 92 ] keV - 63 18969.4 [sigma: 574.011 | error: 0.267247 | coeff: 0.267247 | eff: 1 | fom: 0.63643 | r2int: 0.0705055 | r2eff: 0 | hits: 78 ] keV - 64 5824.23 [sigma: 350.13 | error: 0.384931 | coeff: 0.384931 | eff: 1 | fom: 0.306769 | r2int: 0.144558 | r2eff: 0 | hits: 41 ] keV - 65 2717.77 [sigma: 172.787 | error: 0.365221 | coeff: 0.365221 | eff: 1 | fom: 0.340773 | r2int: 0.129345 | r2eff: 0 | hits: 33 ] keV - 66 14516.2 [sigma: 522.263 | error: 0.276353 | coeff: 0.276353 | eff: 1 | fom: 0.595183 | r2int: 0.0750763 | r2eff: 0 | hits: 59 ] keV - 67 16682.6 [sigma: 548.18 | error: 0.280751 | coeff: 0.280751 | eff: 1 | fom: 0.576679 | r2int: 0.0777415 | r2eff: 0 | hits: 73 ] keV - 68 26307.3 [sigma: 640.45 | error: 0.209423 | coeff: 0.209423 | eff: 1 | fom: 1.0364 | r2int: 0.0432655 | r2eff: 0 | hits: 74 ] keV - 69 6136.25 [sigma: 479.322 | error: 0.434915 | coeff: 0.434915 | eff: 1 | fom: 0.240308 | r2int: 0.18305 | r2eff: 0 | hits: 31 ] keV - 70 6086.4 [sigma: 532.275 | error: 0.410191 | coeff: 0.410191 | eff: 1 | fom: 0.270149 | r2int: 0.160609 | r2eff: 0 | hits: 22 ] keV - 71 13159 [sigma: 528.925 | error: 0.263576 | coeff: 0.263576 | eff: 1 | fom: 0.654285 | r2int: 0.0678565 | r2eff: 0 | hits: 43 ] keV - 72 8152.06 [sigma: 408.03 | error: 0.324377 | coeff: 0.324377 | eff: 1 | fom: 0.431994 | r2int: 0.102715 | r2eff: 0 | hits: 42 ] keV - 73 7224.2 [sigma: 386.99 | error: 0.351273 | coeff: 0.351273 | eff: 1 | fom: 0.368374 | r2int: 0.120523 | r2eff: 0 | hits: 43 ] keV - 74 8770.93 [sigma: 569.308 | error: 0.337275 | coeff: 0.337275 | eff: 1 | fom: 0.399586 | r2int: 0.109541 | r2eff: 0 | hits: 27 ] keV - 75 21339.9 [sigma: 376.849 | error: 0.195851 | coeff: 0.195851 | eff: 1 | fom: 1.18502 | r2int: 0.0380458 | r2eff: 0 | hits: 123 ] keV - 76 34830.6 [sigma: 488.078 | error: 0.169897 | coeff: 0.169897 | eff: 1 | fom: 1.57472 | r2int: 0.0286687 | r2eff: 0 | hits: 147 ] keV - 77 40272.8 [sigma: 444.481 | error: 0.14134 | coeff: 0.14134 | eff: 1 | fom: 2.27536 | r2int: 0.0198551 | r2eff: 0 | hits: 164 ] keV - 78 39141.6 [sigma: 458.254 | error: 0.148553 | coeff: 0.148553 | eff: 1 | fom: 2.05976 | r2int: 0.0219308 | r2eff: 0 | hits: 161 ] keV - 79 26839.2 [sigma: 487.426 | error: 0.186979 | coeff: 0.186979 | eff: 1 | fom: 1.30015 | r2int: 0.0346312 | r2eff: 0 | hits: 106 ] keV - 80 35719.1 [sigma: 450.633 | error: 0.153481 | coeff: 0.153481 | eff: 1 | fom: 1.92961 | r2int: 0.0233972 | r2eff: 0 | hits: 148 ] keV - 81 335790 [sigma: 1129.18 | error: 0.0522039 | coeff: 0.0522039 | eff: 1 | fom: 16.679 | r2int: 0.00271394 | r2eff: 0 | hits: 241 ] keV - 82 337326 [sigma: 1139.63 | error: 0.0569344 | coeff: 0.0569344 | eff: 1 | fom: 14.0226 | r2int: 0.00323011 | r2eff: 0 | hits: 284 ] keV - 83 388496 [sigma: 1103.94 | error: 0.0485567 | coeff: 0.0485567 | eff: 1 | fom: 19.2788 | r2int: 0.00234968 | r2eff: 0 | hits: 292 ] keV - 84 29694.4 [sigma: 351.382 | error: 0.14541 | coeff: 0.14541 | eff: 1 | fom: 2.14976 | r2int: 0.021004 | r2eff: 0 | hits: 151 ] keV - 85 33120.8 [sigma: 396.839 | error: 0.15297 | coeff: 0.15297 | eff: 1 | fom: 1.94251 | r2int: 0.0232564 | r2eff: 0 | hits: 163 ] keV - 86 316779 [sigma: 1133.65 | error: 0.0569223 | coeff: 0.0569223 | eff: 1 | fom: 14.0285 | r2int: 0.00322734 | r2eff: 0 | hits: 253 ] keV - 87 243192 [sigma: 1063.92 | error: 0.0718856 | coeff: 0.0718856 | eff: 1 | fom: 8.79616 | r2int: 0.0051484 | r2eff: 0 | hits: 270 ] keV - 88 318554 [sigma: 1138.38 | error: 0.0586114 | coeff: 0.0586114 | eff: 1 | fom: 13.2316 | r2int: 0.00342253 | r2eff: 0 | hits: 269 ] keV - 89 27397.8 [sigma: 372.361 | error: 0.172449 | coeff: 0.172449 | eff: 1 | fom: 1.52846 | r2int: 0.029554 | r2eff: 0 | hits: 161 ] keV - 90 31496.8 [sigma: 475.834 | error: 0.178753 | coeff: 0.178753 | eff: 1 | fom: 1.42256 | r2int: 0.0317243 | r2eff: 0 | hits: 140 ] keV - 91 331867 [sigma: 1147.87 | error: 0.0535839 | coeff: 0.0535839 | eff: 1 | fom: 15.831 | r2int: 0.00285927 | r2eff: 0 | hits: 240 ] keV - 92 341185 [sigma: 1147.47 | error: 0.0566776 | coeff: 0.0566776 | eff: 1 | fom: 14.1499 | r2int: 0.00320104 | r2eff: 0 | hits: 284 ] keV - 93 396488 [sigma: 1159.03 | error: 0.0494363 | coeff: 0.0494363 | eff: 1 | fom: 18.5989 | r2int: 0.0024354 | r2eff: 0 | hits: 286 ] keV - 94 31519.2 [sigma: 449.595 | error: 0.177014 | coeff: 0.177014 | eff: 1 | fom: 1.45065 | r2int: 0.0311304 | r2eff: 0 | hits: 154 ] keV - 95 25748.7 [sigma: 438.069 | error: 0.183238 | coeff: 0.183238 | eff: 1 | fom: 1.35377 | r2int: 0.0332867 | r2eff: 0 | hits: 116 ] keV - 96 31183.6 [sigma: 377.102 | error: 0.148108 | coeff: 0.148108 | eff: 1 | fom: 2.07215 | r2int: 0.0217897 | r2eff: 0 | hits: 150 ] keV - 97 46469.6 [sigma: 506.524 | error: 0.140438 | coeff: 0.140438 | eff: 1 | fom: 2.30466 | r2int: 0.0196041 | r2eff: 0 | hits: 166 ] keV - 98 27006.9 [sigma: 351.494 | error: 0.15726 | coeff: 0.15726 | eff: 1 | fom: 1.83797 | r2int: 0.0245615 | r2eff: 0 | hits: 146 ] keV - 99 29755.7 [sigma: 482.114 | error: 0.178226 | coeff: 0.178226 | eff: 1 | fom: 1.43098 | r2int: 0.0315022 | r2eff: 0 | hits: 121 ] keV - 100 330841 [sigma: 453.426 | error: 0.0335709 | coeff: 0.0335709 | eff: 1 | fom: 40.3322 | r2int: 0.00112512 | r2eff: 0 | hits: 600 ] keV - 101 363258 [sigma: 466.015 | error: 0.0341351 | coeff: 0.0341351 | eff: 1 | fom: 39.0099 | r2int: 0.00116356 | r2eff: 0 | hits: 708 ] keV - 102 368196 [sigma: 522.586 | error: 0.0380312 | coeff: 0.0380312 | eff: 1 | fom: 31.4265 | r2int: 0.00144436 | r2eff: 0 | hits: 718 ] keV - 103 344546 [sigma: 489.12 | error: 0.037046 | coeff: 0.037046 | eff: 1 | fom: 31.6803 | r2int: 0.00137039 | r2eff: 0 | hits: 681 ] keV - 104 322247 [sigma: 480.52 | error: 0.0362813 | coeff: 0.0362813 | eff: 1 | fom: 33.0298 | r2int: 0.00131411 | r2eff: 0 | hits: 592 ] keV - 105 390380 [sigma: 486.365 | error: 0.0336156 | coeff: 0.0336156 | eff: 1 | fom: 38.4761 | r2int: 0.00112846 | r2eff: 0 | hits: 728 ] keV - 106 358804 [sigma: 464.494 | error: 0.0372511 | coeff: 0.0372511 | eff: 1 | fom: 31.3324 | r2int: 0.00138597 | r2eff: 0 | hits: 828 ] keV - 107 388819 [sigma: 482.872 | error: 0.0365674 | coeff: 0.0365674 | eff: 1 | fom: 32.5151 | r2int: 0.00133563 | r2eff: 0 | hits: 867 ] keV - 108 423485 [sigma: 515.66 | error: 0.035957 | coeff: 0.035957 | eff: 1 | fom: 33.6283 | r2int: 0.00129143 | r2eff: 0 | hits: 872 ] keV - 109 348715 [sigma: 493.448 | error: 0.0367913 | coeff: 0.0367913 | eff: 1 | fom: 32.1205 | r2int: 0.00135159 | r2eff: 0 | hits: 676 ] keV - 110 347577 [sigma: 484.543 | error: 0.0369096 | coeff: 0.0369096 | eff: 1 | fom: 31.9148 | r2int: 0.00136038 | r2eff: 0 | hits: 701 ] keV - 111 401610 [sigma: 504.7 | error: 0.0364657 | coeff: 0.0364657 | eff: 1 | fom: 32.6966 | r2int: 0.00132817 | r2eff: 0 | hits: 842 ] keV - 112 396433 [sigma: 482.746 | error: 0.0366533 | coeff: 0.0366533 | eff: 1 | fom: 32.3629 | r2int: 0.00134198 | r2eff: 0 | hits: 906 ] keV - 113 412199 [sigma: 491.135 | error: 0.0352652 | coeff: 0.0352652 | eff: 1 | fom: 34.9606 | r2int: 0.00124222 | r2eff: 0 | hits: 876 ] keV - 114 348635 [sigma: 482.338 | error: 0.0356236 | coeff: 0.0356236 | eff: 1 | fom: 34.2608 | r2int: 0.00126713 | r2eff: 0 | hits: 663 ] keV - 115 361754 [sigma: 468.487 | error: 0.0343369 | coeff: 0.0343369 | eff: 1 | fom: 36.8764 | r2int: 0.00117735 | r2eff: 0 | hits: 703 ] keV - 116 389658 [sigma: 491.008 | error: 0.0364777 | coeff: 0.0364777 | eff: 1 | fom: 32.6752 | r2int: 0.00132903 | r2eff: 0 | hits: 838 ] keV - 117 397487 [sigma: 492.852 | error: 0.0361283 | coeff: 0.0361283 | eff: 1 | fom: 33.3102 | r2int: 0.00130372 | r2eff: 0 | hits: 849 ] keV - 118 430725 [sigma: 535.253 | error: 0.036506 | coeff: 0.036506 | eff: 1 | fom: 32.6246 | r2int: 0.00133114 | r2eff: 0 | hits: 863 ] keV - 119 322437 [sigma: 468.346 | error: 0.0380716 | coeff: 0.0380716 | eff: 1 | fom: 29.9965 | r2int: 0.00144734 | r2eff: 0 | hits: 687 ] keV - 120 322414 [sigma: 442.733 | error: 0.0333262 | coeff: 0.0333262 | eff: 1 | fom: 39.1471 | r2int: 0.00110875 | r2eff: 0 | hits: 589 ] keV - 121 368206 [sigma: 487.126 | error: 0.0352764 | coeff: 0.0352764 | eff: 1 | fom: 34.9384 | r2int: 0.00124268 | r2eff: 0 | hits: 711 ] keV - 122 389064 [sigma: 489.758 | error: 0.0341507 | coeff: 0.0341507 | eff: 1 | fom: 37.2798 | r2int: 0.00116469 | r2eff: 0 | hits: 736 ] keV - 123 342728 [sigma: 444.835 | error: 0.0341184 | coeff: 0.0341184 | eff: 1 | fom: 37.3503 | r2int: 0.00116238 | r2eff: 0 | hits: 691 ] keV - 124 324896 [sigma: 462.859 | error: 0.0341617 | coeff: 0.0341617 | eff: 1 | fom: 37.2558 | r2int: 0.00116499 | r2eff: 0 | hits: 575 ] keV + 0 88.719871 keV + 1 776.766151 keV + 2 1177.919322 keV + 3 826.950025 keV + 4 51.924281 keV + 5 3331.741627 keV + 6 1296.440221 keV + 7 1857.203736 keV + 8 1958.749170 keV + 9 2246.790484 keV + 10 1229.345835 keV + 11 2671.586663 keV + 12 500.989703 keV + 13 387.180211 keV + 14 1734.861783 keV + 15 1062.309890 keV + 16 261.123445 keV + 17 262.207448 keV + 18 921.081692 keV + 19 1955.867804 keV + 20 558.053553 keV + 22 84.483048 keV + 23 157.946800 keV + 25 4158.446079 keV + 26 3030.452457 keV + 27 1558.938689 keV + 28 96.064414 keV + 29 2962.506164 keV + 30 103.327636 keV + 31 1691.244999 keV + 32 6232.134967 keV + 33 1704.955379 keV + 34 164.353214 keV + 35 2630.683491 keV + 36 3447.898234 keV + 37 3905.074569 keV + 38 6612.646383 keV + 39 2888.089791 keV + 40 2822.176525 keV + 41 3613.954135 keV + 42 4969.576864 keV + 43 7437.044576 keV + 44 3804.505396 keV + 45 719.945469 keV + 46 1536.131521 keV + 47 220.788085 keV + 48 4816.190460 keV + 49 3409.897253 keV + 50 8835.517169 keV + 51 6920.831151 keV + 52 5354.521828 keV + 53 7027.597526 keV + 54 4316.746426 keV + 55 5329.292872 keV + 56 17575.398706 keV + 57 20873.707360 keV + 58 9469.584529 keV + 59 11976.553079 keV + 60 10290.256034 keV + 61 22417.486189 keV + 62 15320.864286 keV + 63 18440.267444 keV + 64 8313.119688 keV + 65 6461.236122 keV + 66 15221.570028 keV + 67 20201.494486 keV + 68 23222.832229 keV + 69 7611.507837 keV + 70 2337.211324 keV + 71 5827.100425 keV + 72 2532.629712 keV + 73 1817.295698 keV + 74 5129.290074 keV + 75 25395.348107 keV + 76 37719.952268 keV + 77 39743.603291 keV + 78 30742.916588 keV + 79 20829.519329 keV + 80 33220.672968 keV + 81 333767.550240 keV + 82 284889.080959 keV + 83 351861.044171 keV + 84 28056.984552 keV + 85 38136.956068 keV + 86 354314.691411 keV + 87 254665.234231 keV + 88 301140.705035 keV + 89 27413.836341 keV + 90 32398.297868 keV + 91 320878.879470 keV + 92 315535.202913 keV + 93 362850.895730 keV + 94 51008.636455 keV + 95 23080.884529 keV + 96 34515.877724 keV + 97 35889.349387 keV + 98 37898.058883 keV + 99 39339.249592 keV + 100 332010.381172 keV + 101 373035.542636 keV + 102 397770.342786 keV + 103 352870.834988 keV + 104 320182.297826 keV + 105 377147.678294 keV + 106 410985.379179 keV + 107 404994.000300 keV + 108 416911.716435 keV + 109 333784.217823 keV + 110 374280.503891 keV + 111 384258.864842 keV + 112 400854.337243 keV + 113 405866.647020 keV + 114 346000.263329 keV + 115 373019.100057 keV + 116 385833.534783 keV + 117 432821.352925 keV + 118 398735.273231 keV + 119 351341.528903 keV + 120 333087.828167 keV + 121 382007.346771 keV + 122 374601.585686 keV + 123 340236.902847 keV + 124 315394.395203 keV + 0 88.7199 [sigma: 19.6989 | error: 0.314004 | coeff: 0.314004 | eff: 1 | fom: 0.482959 | r2int: 0.0492993 | r2eff: 0 | hits: 2 ] keV + 1 776.766 [sigma: 357.718 | error: 0.921044 | coeff: 0.921044 | eff: 1 | fom: 0.0561332 | r2int: 0.636242 | r2eff: 0 | hits: 4 ] keV + 2 1177.92 [sigma: 309.733 | error: 0.525899 | coeff: 0.525899 | eff: 1 | fom: 0.172178 | r2int: 0.207427 | r2eff: 0 | hits: 4 ] keV + 3 826.95 [sigma: 560.907 | error: 0.959238 | coeff: 0.959238 | eff: 1 | fom: 0.051752 | r2int: 0.460069 | r2eff: 0 | hits: 2 ] keV + 4 51.9243 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: 0 | r2eff: 0 | hits: 1 ] keV + 5 3331.74 [sigma: 926.478 | error: 0.556153 | coeff: 0.556153 | eff: 1 | fom: 0.153955 | r2int: 0.231979 | r2eff: 0 | hits: 4 ] keV + 6 1296.44 [sigma: 860.688 | error: 0.938876 | coeff: 0.938876 | eff: 1 | fom: 0.0540212 | r2int: 0.440744 | r2eff: 0 | hits: 2 ] keV + 7 1857.2 [sigma: 583.899 | error: 0.770112 | coeff: 0.770112 | eff: 1 | fom: 0.0802921 | r2int: 0.494227 | r2eff: 0 | hits: 6 ] keV + 8 1958.75 [sigma: 879.105 | error: 0.897618 | coeff: 0.897618 | eff: 1 | fom: 0.0591013 | r2int: 0.604289 | r2eff: 0 | hits: 4 ] keV + 9 2246.79 [sigma: 761.327 | error: 0.830012 | coeff: 0.830012 | eff: 1 | fom: 0.0691214 | r2int: 0.574099 | r2eff: 0 | hits: 6 ] keV + 10 1229.35 [sigma: 242.496 | error: 0.441078 | coeff: 0.441078 | eff: 1 | fom: 0.244765 | r2int: 0.15564 | r2eff: 0 | hits: 5 ] keV + 11 2671.59 [sigma: 801.339 | error: 0.599898 | coeff: 0.599898 | eff: 1 | fom: 0.13232 | r2int: 0.269908 | r2eff: 0 | hits: 4 ] keV + 12 500.99 [sigma: 210.806 | error: 0.728811 | coeff: 0.728811 | eff: 1 | fom: 0.0896501 | r2int: 0.35411 | r2eff: 0 | hits: 3 ] keV + 13 387.18 [sigma: 95.216 | error: 0.602383 | coeff: 0.602383 | eff: 1 | fom: 0.131231 | r2int: 0.302387 | r2eff: 0 | hits: 6 ] keV + 14 1734.86 [sigma: 653.337 | error: 0.922461 | coeff: 0.922461 | eff: 1 | fom: 0.055961 | r2int: 0.709111 | r2eff: 0 | hits: 6 ] keV + 15 1062.31 [sigma: 334.373 | error: 0.703826 | coeff: 0.703826 | eff: 1 | fom: 0.0961281 | r2int: 0.396297 | r2eff: 0 | hits: 5 ] keV + 16 261.123 [sigma: 41.6371 | error: 0.356549 | coeff: 0.356549 | eff: 1 | fom: 0.374577 | r2int: 0.101702 | r2eff: 0 | hits: 5 ] keV + 17 262.207 [sigma: 26.3313 | error: 0.22455 | coeff: 0.22455 | eff: 1 | fom: 0.944398 | r2int: 0.0403381 | r2eff: 0 | hits: 5 ] keV + 18 921.082 [sigma: 204.656 | error: 0.544255 | coeff: 0.544255 | eff: 1 | fom: 0.160759 | r2int: 0.246845 | r2eff: 0 | hits: 6 ] keV + 19 1955.87 [sigma: 669.486 | error: 0.765397 | coeff: 0.765397 | eff: 1 | fom: 0.0812844 | r2int: 0.468666 | r2eff: 0 | hits: 5 ] keV + 20 558.054 [sigma: 356.279 | error: 0.902877 | coeff: 0.902877 | eff: 1 | fom: 0.0584148 | r2int: 0.407594 | r2eff: 0 | hits: 2 ] keV + 22 84.483 [sigma: 28.1298 | error: 0.744528 | coeff: 0.744528 | eff: 1 | fom: 0.0859049 | r2int: 0.443458 | r2eff: 0 | hits: 5 ] keV + 23 157.947 [sigma: 47.6631 | error: 0.522675 | coeff: 0.522675 | eff: 1 | fom: 0.174308 | r2int: 0.182126 | r2eff: 0 | hits: 3 ] keV + 25 4158.45 [sigma: 663.825 | error: 0.45151 | coeff: 0.45151 | eff: 1 | fom: 0.233585 | r2int: 0.178379 | r2eff: 0 | hits: 8 ] keV + 26 3030.45 [sigma: 390.25 | error: 0.464309 | coeff: 0.464309 | eff: 1 | fom: 0.220885 | r2int: 0.199 | r2eff: 0 | hits: 13 ] keV + 27 1558.94 [sigma: 257.674 | error: 0.495865 | coeff: 0.495865 | eff: 1 | fom: 0.193666 | r2int: 0.218562 | r2eff: 0 | hits: 9 ] keV + 28 96.0644 [sigma: 12.8267 | error: 0.298565 | coeff: 0.298565 | eff: 1 | fom: 0.5342 | r2int: 0.0713127 | r2eff: 0 | hits: 5 ] keV + 29 2962.51 [sigma: 776.647 | error: 0.642155 | coeff: 0.642155 | eff: 1 | fom: 0.115478 | r2int: 0.343636 | r2eff: 0 | hits: 6 ] keV + 30 103.328 [sigma: 18.4055 | error: 0.398306 | coeff: 0.398306 | eff: 1 | fom: 0.300157 | r2int: 0.126918 | r2eff: 0 | hits: 5 ] keV + 31 1691.24 [sigma: 120.689 | error: 0.30276 | coeff: 0.30276 | eff: 1 | fom: 0.519498 | r2int: 0.0865712 | r2eff: 0 | hits: 18 ] keV + 32 6232.13 [sigma: 824.934 | error: 0.576978 | coeff: 0.576978 | eff: 1 | fom: 0.143042 | r2int: 0.315382 | r2eff: 0 | hits: 19 ] keV + 33 1704.96 [sigma: 104.584 | error: 0.252916 | coeff: 0.252916 | eff: 1 | fom: 0.74444 | r2int: 0.0602036 | r2eff: 0 | hits: 17 ] keV + 34 164.353 [sigma: 27.2154 | error: 0.370272 | coeff: 0.370272 | eff: 1 | fom: 0.347327 | r2int: 0.109681 | r2eff: 0 | hits: 5 ] keV + 35 2630.68 [sigma: 360.905 | error: 0.531336 | coeff: 0.531336 | eff: 1 | fom: 0.168671 | r2int: 0.263497 | r2eff: 0 | hits: 15 ] keV + 36 3447.9 [sigma: 442.964 | error: 0.616139 | coeff: 0.616139 | eff: 1 | fom: 0.125437 | r2int: 0.363121 | r2eff: 0 | hits: 23 ] keV + 37 3905.07 [sigma: 371.728 | error: 0.521383 | coeff: 0.521383 | eff: 1 | fom: 0.175173 | r2int: 0.262779 | r2eff: 0 | hits: 30 ] keV + 38 6612.65 [sigma: 551.776 | error: 0.449352 | coeff: 0.449352 | eff: 1 | fom: 0.235835 | r2int: 0.194954 | r2eff: 0 | hits: 29 ] keV + 39 2888.09 [sigma: 299.739 | error: 0.401955 | coeff: 0.401955 | eff: 1 | fom: 0.294731 | r2int: 0.150797 | r2eff: 0 | hits: 15 ] keV + 40 2822.18 [sigma: 587.039 | error: 0.550341 | coeff: 0.550341 | eff: 1 | fom: 0.157224 | r2int: 0.259607 | r2eff: 0 | hits: 7 ] keV + 41 3613.95 [sigma: 579.31 | error: 0.577963 | coeff: 0.577963 | eff: 1 | fom: 0.142554 | r2int: 0.308346 | r2eff: 0 | hits: 13 ] keV + 42 4969.58 [sigma: 552.061 | error: 0.50907 | coeff: 0.50907 | eff: 1 | fom: 0.18375 | r2int: 0.246811 | r2eff: 0 | hits: 21 ] keV + 43 7437.04 [sigma: 576.855 | error: 0.363813 | coeff: 0.363813 | eff: 1 | fom: 0.35977 | r2int: 0.126343 | r2eff: 0 | hits: 22 ] keV + 44 3804.51 [sigma: 646.557 | error: 0.509835 | coeff: 0.509835 | eff: 1 | fom: 0.183198 | r2int: 0.231051 | r2eff: 0 | hits: 9 ] keV + 45 719.945 [sigma: 401.262 | error: 0.965361 | coeff: 0.965361 | eff: 1 | fom: 0.0510977 | r2int: 0.621281 | r2eff: 0 | hits: 3 ] keV + 46 1536.13 [sigma: 610.93 | error: 0.974179 | coeff: 0.974179 | eff: 1 | fom: 0.0501768 | r2int: 0.790854 | r2eff: 0 | hits: 6 ] keV + 47 220.788 [sigma: 15.7006 | error: 0.235851 | coeff: 0.235851 | eff: 1 | fom: 0.85606 | r2int: 0.050569 | r2eff: 0 | hits: 11 ] keV + 48 4816.19 [sigma: 619.761 | error: 0.426793 | coeff: 0.426793 | eff: 1 | fom: 0.261424 | r2int: 0.165593 | r2eff: 0 | hits: 11 ] keV + 49 3409.9 [sigma: 713.645 | error: 0.467979 | coeff: 0.467979 | eff: 1 | fom: 0.217435 | r2int: 0.175203 | r2eff: 0 | hits: 5 ] keV + 50 8835.52 [sigma: 587.335 | error: 0.297282 | coeff: 0.297282 | eff: 1 | fom: 0.53882 | r2int: 0.0839578 | r2eff: 0 | hits: 20 ] keV + 51 6920.83 [sigma: 394.325 | error: 0.351227 | coeff: 0.351227 | eff: 1 | fom: 0.386015 | r2int: 0.120114 | r2eff: 0 | hits: 38 ] keV + 52 5354.52 [sigma: 321.399 | error: 0.34481 | coeff: 0.34481 | eff: 1 | fom: 0.400517 | r2int: 0.115291 | r2eff: 0 | hits: 33 ] keV + 53 7027.6 [sigma: 409.194 | error: 0.32938 | coeff: 0.32938 | eff: 1 | fom: 0.43892 | r2int: 0.105101 | r2eff: 0 | hits: 32 ] keV + 54 4316.75 [sigma: 488.583 | error: 0.438356 | coeff: 0.438356 | eff: 1 | fom: 0.247814 | r2int: 0.179346 | r2eff: 0 | hits: 15 ] keV + 55 5329.29 [sigma: 405.557 | error: 0.416814 | coeff: 0.416814 | eff: 1 | fom: 0.274091 | r2int: 0.167943 | r2eff: 0 | hits: 30 ] keV + 56 17575.4 [sigma: 575.722 | error: 0.242935 | coeff: 0.242935 | eff: 1 | fom: 0.806867 | r2int: 0.0579442 | r2eff: 0 | hits: 55 ] keV + 57 20873.7 [sigma: 704.953 | error: 0.270178 | coeff: 0.270178 | eff: 1 | fom: 0.652349 | r2int: 0.0718557 | r2eff: 0 | hits: 64 ] keV + 58 9469.58 [sigma: 497.842 | error: 0.344743 | coeff: 0.344743 | eff: 1 | fom: 0.400673 | r2int: 0.116084 | r2eff: 0 | hits: 43 ] keV + 59 11976.6 [sigma: 680.487 | error: 0.321413 | coeff: 0.321413 | eff: 1 | fom: 0.460951 | r2int: 0.100078 | r2eff: 0 | hits: 32 ] keV + 60 10290.3 [sigma: 553.157 | error: 0.326981 | coeff: 0.326981 | eff: 1 | fom: 0.445384 | r2int: 0.104027 | r2eff: 0 | hits: 37 ] keV + 61 22417.5 [sigma: 671.318 | error: 0.252331 | coeff: 0.252331 | eff: 1 | fom: 0.747892 | r2int: 0.0627742 | r2eff: 0 | hits: 71 ] keV + 62 15320.9 [sigma: 509.211 | error: 0.265891 | coeff: 0.265891 | eff: 1 | fom: 0.673553 | r2int: 0.0695936 | r2eff: 0 | hits: 64 ] keV + 63 18440.3 [sigma: 477.802 | error: 0.2303 | coeff: 0.2303 | eff: 1 | fom: 0.897825 | r2int: 0.0523669 | r2eff: 0 | hits: 79 ] keV + 64 8313.12 [sigma: 517.516 | error: 0.357616 | coeff: 0.357616 | eff: 1 | fom: 0.372347 | r2int: 0.124013 | r2eff: 0 | hits: 33 ] keV + 65 6461.24 [sigma: 460.239 | error: 0.348958 | coeff: 0.348958 | eff: 1 | fom: 0.391052 | r2int: 0.116698 | r2eff: 0 | hits: 24 ] keV + 66 15221.6 [sigma: 608.026 | error: 0.298921 | coeff: 0.298921 | eff: 1 | fom: 0.532927 | r2int: 0.0877582 | r2eff: 0 | hits: 56 ] keV + 67 20201.5 [sigma: 579.97 | error: 0.250282 | coeff: 0.250282 | eff: 1 | fom: 0.760192 | r2int: 0.0618166 | r2eff: 0 | hits: 76 ] keV + 68 23222.8 [sigma: 710.502 | error: 0.24476 | coeff: 0.24476 | eff: 1 | fom: 0.794877 | r2int: 0.0589714 | r2eff: 0 | hits: 64 ] keV + 69 7611.51 [sigma: 477.03 | error: 0.365439 | coeff: 0.365439 | eff: 1 | fom: 0.356575 | r2int: 0.129618 | r2eff: 0 | hits: 34 ] keV + 70 2337.21 [sigma: 369.911 | error: 0.612979 | coeff: 0.612979 | eff: 1 | fom: 0.126733 | r2int: 0.350693 | r2eff: 0 | hits: 15 ] keV + 71 5827.1 [sigma: 317.735 | error: 0.293637 | coeff: 0.293637 | eff: 1 | fom: 0.552278 | r2int: 0.0832497 | r2eff: 0 | hits: 29 ] keV + 72 2532.63 [sigma: 150.183 | error: 0.330165 | coeff: 0.330165 | eff: 1 | fom: 0.436837 | r2int: 0.105492 | r2eff: 0 | hits: 31 ] keV + 73 1817.3 [sigma: 78.8124 | error: 0.233544 | coeff: 0.233544 | eff: 1 | fom: 0.873062 | r2int: 0.0526618 | r2eff: 0 | hits: 29 ] keV + 74 5129.29 [sigma: 393.476 | error: 0.35981 | coeff: 0.35981 | eff: 1 | fom: 0.36782 | r2int: 0.123578 | r2eff: 0 | hits: 22 ] keV + 75 25395.3 [sigma: 392.48 | error: 0.165734 | coeff: 0.165734 | eff: 1 | fom: 1.73363 | r2int: 0.027229 | r2eff: 0 | hits: 115 ] keV + 76 37720 [sigma: 418.157 | error: 0.137572 | coeff: 0.137572 | eff: 1 | fom: 2.51607 | r2int: 0.0188031 | r2eff: 0 | hits: 154 ] keV + 77 39743.6 [sigma: 478.899 | error: 0.15384 | coeff: 0.15384 | eff: 1 | fom: 2.01205 | r2int: 0.0235217 | r2eff: 0 | hits: 163 ] keV + 78 30742.9 [sigma: 397.964 | error: 0.162715 | coeff: 0.162715 | eff: 1 | fom: 1.79857 | r2int: 0.0263085 | r2eff: 0 | hits: 158 ] keV + 79 20829.5 [sigma: 419.217 | error: 0.207211 | coeff: 0.207211 | eff: 1 | fom: 1.10906 | r2int: 0.0425312 | r2eff: 0 | hits: 106 ] keV + 80 33220.7 [sigma: 444.972 | error: 0.1635 | coeff: 0.1635 | eff: 1 | fom: 1.78134 | r2int: 0.0265528 | r2eff: 0 | hits: 149 ] keV + 81 333768 [sigma: 1120.91 | error: 0.0518102 | coeff: 0.0518102 | eff: 1 | fom: 17.7399 | r2int: 0.00267301 | r2eff: 0 | hits: 238 ] keV + 82 284889 [sigma: 1126.74 | error: 0.0637726 | coeff: 0.0637726 | eff: 1 | fom: 11.7088 | r2int: 0.00405131 | r2eff: 0 | hits: 260 ] keV + 83 351861 [sigma: 1151.05 | error: 0.0508899 | coeff: 0.0508899 | eff: 1 | fom: 18.3873 | r2int: 0.00257908 | r2eff: 0 | hits: 242 ] keV + 84 28057 [sigma: 385.836 | error: 0.163872 | coeff: 0.163872 | eff: 1 | fom: 1.77325 | r2int: 0.0266651 | r2eff: 0 | hits: 142 ] keV + 85 38137 [sigma: 476.249 | error: 0.157466 | coeff: 0.157466 | eff: 1 | fom: 1.92047 | r2int: 0.0246396 | r2eff: 0 | hits: 159 ] keV + 86 354315 [sigma: 1145.33 | error: 0.0526217 | coeff: 0.0526217 | eff: 1 | fom: 17.1969 | r2int: 0.00275859 | r2eff: 0 | hits: 265 ] keV + 87 254665 [sigma: 1122.58 | error: 0.0710776 | coeff: 0.0710776 | eff: 1 | fom: 9.42574 | r2int: 0.00503259 | r2eff: 0 | hits: 260 ] keV + 88 301141 [sigma: 1135.83 | error: 0.058917 | coeff: 0.058917 | eff: 1 | fom: 13.7183 | r2int: 0.00345698 | r2eff: 0 | hits: 244 ] keV + 89 27413.8 [sigma: 398.59 | error: 0.175082 | coeff: 0.175082 | eff: 1 | fom: 1.55346 | r2int: 0.0304422 | r2eff: 0 | hits: 145 ] keV + 90 32398.3 [sigma: 457.67 | error: 0.172434 | coeff: 0.172434 | eff: 1 | fom: 1.60153 | r2int: 0.029534 | r2eff: 0 | hits: 149 ] keV + 91 320879 [sigma: 1109.06 | error: 0.0521891 | coeff: 0.0521891 | eff: 1 | fom: 17.4832 | r2int: 0.00271175 | r2eff: 0 | hits: 228 ] keV + 92 315535 [sigma: 1117.97 | error: 0.0570208 | coeff: 0.0570208 | eff: 1 | fom: 14.6458 | r2int: 0.00323882 | r2eff: 0 | hits: 259 ] keV + 93 362851 [sigma: 1125.08 | error: 0.0499005 | coeff: 0.0499005 | eff: 1 | fom: 19.1237 | r2int: 0.00248045 | r2eff: 0 | hits: 259 ] keV + 94 51008.6 [sigma: 523.725 | error: 0.135046 | coeff: 0.135046 | eff: 1 | fom: 2.61105 | r2int: 0.0181321 | r2eff: 0 | hits: 173 ] keV + 95 23080.9 [sigma: 445.518 | error: 0.204278 | coeff: 0.204278 | eff: 1 | fom: 1.14114 | r2int: 0.0413569 | r2eff: 0 | hits: 112 ] keV + 96 34515.9 [sigma: 457.816 | error: 0.166197 | coeff: 0.166197 | eff: 1 | fom: 1.724 | r2int: 0.0274453 | r2eff: 0 | hits: 157 ] keV + 97 35889.3 [sigma: 435.701 | error: 0.152115 | coeff: 0.152115 | eff: 1 | fom: 2.05795 | r2int: 0.0229917 | r2eff: 0 | hits: 157 ] keV + 98 37898.1 [sigma: 441.634 | error: 0.141768 | coeff: 0.141768 | eff: 1 | fom: 2.36934 | r2int: 0.0199622 | r2eff: 0 | hits: 148 ] keV + 99 39339.2 [sigma: 531.162 | error: 0.150353 | coeff: 0.150353 | eff: 1 | fom: 2.10648 | r2int: 0.0224237 | r2eff: 0 | hits: 124 ] keV + 100 332010 [sigma: 475.449 | error: 0.0348134 | coeff: 0.0348134 | eff: 1 | fom: 39.2906 | r2int: 0.00120992 | r2eff: 0 | hits: 591 ] keV + 101 373036 [sigma: 488.972 | error: 0.0346059 | coeff: 0.0346059 | eff: 1 | fom: 39.7631 | r2int: 0.00119585 | r2eff: 0 | hits: 697 ] keV + 102 397770 [sigma: 510.224 | error: 0.034538 | coeff: 0.034538 | eff: 1 | fom: 39.9195 | r2int: 0.00119123 | r2eff: 0 | hits: 725 ] keV + 103 352871 [sigma: 485.423 | error: 0.0361612 | coeff: 0.0361612 | eff: 1 | fom: 36.4162 | r2int: 0.00130574 | r2eff: 0 | hits: 691 ] keV + 104 320182 [sigma: 440.34 | error: 0.0332351 | coeff: 0.0332351 | eff: 1 | fom: 43.1108 | r2int: 0.00110268 | r2eff: 0 | hits: 584 ] keV + 105 377148 [sigma: 494.698 | error: 0.0350491 | coeff: 0.0350491 | eff: 1 | fom: 38.7638 | r2int: 0.00122672 | r2eff: 0 | hits: 714 ] keV + 106 410985 [sigma: 493.934 | error: 0.0349771 | coeff: 0.0349771 | eff: 1 | fom: 38.9236 | r2int: 0.00122195 | r2eff: 0 | hits: 847 ] keV + 107 404994 [sigma: 523.607 | error: 0.0365223 | coeff: 0.0365223 | eff: 1 | fom: 35.6997 | r2int: 0.00133221 | r2eff: 0 | hits: 798 ] keV + 108 416912 [sigma: 498.534 | error: 0.0345329 | coeff: 0.0345329 | eff: 1 | fom: 39.9313 | r2int: 0.00119109 | r2eff: 0 | hits: 834 ] keV + 109 333784 [sigma: 516.616 | error: 0.039186 | coeff: 0.039186 | eff: 1 | fom: 31.0112 | r2int: 0.00153315 | r2eff: 0 | hits: 641 ] keV + 110 374281 [sigma: 506 | error: 0.0355894 | coeff: 0.0355894 | eff: 1 | fom: 37.5959 | r2int: 0.00126477 | r2eff: 0 | hits: 693 ] keV + 111 384259 [sigma: 465.798 | error: 0.0352789 | coeff: 0.0352789 | eff: 1 | fom: 36.5213 | r2int: 0.00124313 | r2eff: 0 | hits: 847 ] keV + 112 400854 [sigma: 470.575 | error: 0.0353351 | coeff: 0.0353351 | eff: 1 | fom: 36.4053 | r2int: 0.00124719 | r2eff: 0 | hits: 906 ] keV + 113 405867 [sigma: 500.225 | error: 0.0360594 | coeff: 0.0360594 | eff: 1 | fom: 34.9575 | r2int: 0.00129876 | r2eff: 0 | hits: 856 ] keV + 114 346000 [sigma: 494.261 | error: 0.0364477 | coeff: 0.0364477 | eff: 1 | fom: 34.2166 | r2int: 0.0013264 | r2eff: 0 | hits: 651 ] keV + 115 373019 [sigma: 464.161 | error: 0.0333426 | coeff: 0.0333426 | eff: 1 | fom: 40.8864 | r2int: 0.00111018 | r2eff: 0 | hits: 718 ] keV + 116 385834 [sigma: 482.551 | error: 0.0357701 | coeff: 0.0357701 | eff: 1 | fom: 35.5252 | r2int: 0.00127794 | r2eff: 0 | hits: 818 ] keV + 117 432821 [sigma: 484.077 | error: 0.0335899 | coeff: 0.0335899 | eff: 1 | fom: 40.2864 | r2int: 0.00112703 | r2eff: 0 | hits: 902 ] keV + 118 398735 [sigma: 494.837 | error: 0.0367307 | coeff: 0.0367307 | eff: 1 | fom: 33.6913 | r2int: 0.00134761 | r2eff: 0 | hits: 876 ] keV + 119 351342 [sigma: 494.999 | error: 0.0363317 | coeff: 0.0363317 | eff: 1 | fom: 34.4355 | r2int: 0.00131801 | r2eff: 0 | hits: 665 ] keV + 120 333088 [sigma: 436.096 | error: 0.0315581 | coeff: 0.0315581 | eff: 1 | fom: 45.641 | r2int: 0.000994201 | r2eff: 0 | hits: 581 ] keV + 121 382007 [sigma: 480.146 | error: 0.0336559 | coeff: 0.0336559 | eff: 1 | fom: 40.1286 | r2int: 0.00113114 | r2eff: 0 | hits: 717 ] keV + 122 374602 [sigma: 510.834 | error: 0.0368192 | coeff: 0.0368192 | eff: 1 | fom: 33.5296 | r2int: 0.00135379 | r2eff: 0 | hits: 729 ] keV + 123 340237 [sigma: 469.93 | error: 0.0360698 | coeff: 0.0360698 | eff: 1 | fom: 34.9373 | r2int: 0.00129913 | r2eff: 0 | hits: 682 ] keV + 124 315394 [sigma: 441.684 | error: 0.0331103 | coeff: 0.0331103 | eff: 1 | fom: 41.462 | r2int: 0.00109433 | r2eff: 0 | hits: 559 ] keV ============================================================ closed file mfd_tl_EnergyDeposit.out for output ============================================================ opened file mfd_tg_EnergyDeposit.out for output ============================================================ - 0 25.299195 keV - 1 680.095952 keV - 2 1132.761031 keV - 3 760.499785 keV - 4 235.459711 keV - 5 100.143618 keV - 6 118.059526 keV - 7 386.471966 keV - 8 213.898741 keV - 9 83.994002 keV - 10 1388.698599 keV - 11 974.647620 keV - 12 25.951656 keV - 13 1097.542231 keV - 14 2331.906741 keV - 15 537.225509 keV - 16 330.477185 keV - 17 1513.127832 keV - 18 72.469989 keV - 19 48.264662 keV - 20 3642.021939 keV - 21 1603.921237 keV - 22 1979.851675 keV - 23 171.658951 keV - 24 1317.511146 keV - 25 268.212008 keV - 26 5712.508762 keV - 27 7004.866765 keV - 28 1441.447673 keV - 29 1569.960590 keV - 30 2088.566144 keV - 31 6684.182602 keV - 32 6140.803793 keV - 33 670.699315 keV - 34 3065.720905 keV - 35 2225.329204 keV - 36 4992.942972 keV - 37 1680.273242 keV - 38 7353.309519 keV - 39 2807.065762 keV - 40 1791.863230 keV - 41 4202.859504 keV - 42 7543.093595 keV - 43 4697.303593 keV - 44 1905.013886 keV - 45 2104.505416 keV - 46 1648.239746 keV - 47 579.830952 keV - 48 4401.741160 keV - 49 3285.583780 keV - 50 9803.151519 keV - 51 5412.878658 keV - 52 12342.260914 keV - 53 5079.374483 keV - 54 7745.165189 keV - 55 8116.436261 keV - 56 23047.605342 keV - 57 28024.305489 keV - 58 24198.973536 keV - 59 10510.364748 keV - 60 9087.130307 keV - 61 24594.673164 keV - 62 17007.222968 keV - 63 18969.415843 keV - 64 5824.227576 keV - 65 2717.767589 keV - 66 14516.151916 keV - 67 16682.570690 keV - 68 26307.285179 keV - 69 6136.254684 keV - 70 6086.403245 keV - 71 13159.012927 keV - 72 8152.062121 keV - 73 7224.199930 keV - 74 8770.930524 keV - 75 21339.949572 keV - 76 34830.627186 keV - 77 40272.767801 keV - 78 39141.568335 keV - 79 26839.184715 keV - 80 35719.060315 keV - 81 335790.367584 keV - 82 337326.001703 keV - 83 388495.708026 keV - 84 29694.367910 keV - 85 33120.831708 keV - 86 316778.632908 keV - 87 243192.270840 keV - 88 318553.814884 keV - 89 27397.833723 keV - 90 31496.792533 keV - 91 331867.302792 keV - 92 341184.886514 keV - 93 396488.414386 keV - 94 31519.153338 keV - 95 25748.703707 keV - 96 31183.598020 keV - 97 46469.619463 keV - 98 27006.938349 keV - 99 29755.731543 keV - 100 330841.055091 keV - 101 363257.941569 keV - 102 368196.020916 keV - 103 344546.115033 keV - 104 322246.857137 keV - 105 390379.848249 keV - 106 358803.539757 keV - 107 388819.440446 keV - 108 423484.587441 keV - 109 348714.680797 keV - 110 347577.058050 keV - 111 401609.711997 keV - 112 396432.947359 keV - 113 412198.711495 keV - 114 348634.650720 keV - 115 361754.379885 keV - 116 389657.527246 keV - 117 397487.120671 keV - 118 430725.392381 keV - 119 322436.702956 keV - 120 322413.670001 keV - 121 368206.275297 keV - 122 389063.748841 keV - 123 342727.792339 keV - 124 324895.693187 keV + 0 88.719871 keV + 1 776.766151 keV + 2 1177.919322 keV + 3 826.950025 keV + 4 51.924281 keV + 5 3331.741627 keV + 6 1296.440221 keV + 7 1857.203736 keV + 8 1958.749170 keV + 9 2246.790484 keV + 10 1229.345835 keV + 11 2671.586663 keV + 12 500.989703 keV + 13 387.180211 keV + 14 1734.861783 keV + 15 1062.309890 keV + 16 261.123445 keV + 17 262.207448 keV + 18 921.081692 keV + 19 1955.867804 keV + 20 558.053553 keV + 22 84.483048 keV + 23 157.946800 keV + 25 4158.446079 keV + 26 3030.452457 keV + 27 1558.938689 keV + 28 96.064414 keV + 29 2962.506164 keV + 30 103.327636 keV + 31 1691.244999 keV + 32 6232.134967 keV + 33 1704.955379 keV + 34 164.353214 keV + 35 2630.683491 keV + 36 3447.898234 keV + 37 3905.074569 keV + 38 6612.646383 keV + 39 2888.089791 keV + 40 2822.176525 keV + 41 3613.954135 keV + 42 4969.576864 keV + 43 7437.044576 keV + 44 3804.505396 keV + 45 719.945469 keV + 46 1536.131521 keV + 47 220.788085 keV + 48 4816.190460 keV + 49 3409.897253 keV + 50 8835.517169 keV + 51 6920.831151 keV + 52 5354.521828 keV + 53 7027.597526 keV + 54 4316.746426 keV + 55 5329.292872 keV + 56 17575.398706 keV + 57 20873.707360 keV + 58 9469.584529 keV + 59 11976.553079 keV + 60 10290.256034 keV + 61 22417.486189 keV + 62 15320.864286 keV + 63 18440.267444 keV + 64 8313.119688 keV + 65 6461.236122 keV + 66 15221.570028 keV + 67 20201.494486 keV + 68 23222.832229 keV + 69 7611.507837 keV + 70 2337.211324 keV + 71 5827.100425 keV + 72 2532.629712 keV + 73 1817.295698 keV + 74 5129.290074 keV + 75 25395.348107 keV + 76 37719.952268 keV + 77 39743.603291 keV + 78 30742.916588 keV + 79 20829.519329 keV + 80 33220.672968 keV + 81 333767.550240 keV + 82 284889.080959 keV + 83 351861.044171 keV + 84 28056.984552 keV + 85 38136.956068 keV + 86 354314.691411 keV + 87 254665.234231 keV + 88 301140.705035 keV + 89 27413.836341 keV + 90 32398.297868 keV + 91 320878.879470 keV + 92 315535.202913 keV + 93 362850.895730 keV + 94 51008.636455 keV + 95 23080.884529 keV + 96 34515.877724 keV + 97 35889.349387 keV + 98 37898.058883 keV + 99 39339.249592 keV + 100 332010.381172 keV + 101 373035.542636 keV + 102 397770.342786 keV + 103 352870.834988 keV + 104 320182.297826 keV + 105 377147.678294 keV + 106 410985.379179 keV + 107 404994.000300 keV + 108 416911.716435 keV + 109 333784.217823 keV + 110 374280.503891 keV + 111 384258.864842 keV + 112 400854.337243 keV + 113 405866.647020 keV + 114 346000.263329 keV + 115 373019.100057 keV + 116 385833.534783 keV + 117 432821.352925 keV + 118 398735.273231 keV + 119 351341.528903 keV + 120 333087.828167 keV + 121 382007.346771 keV + 122 374601.585686 keV + 123 340236.902847 keV + 124 315394.395203 keV ============================================================ closed file mfd_tg_EnergyDeposit.out for output ============================================================ opened file mfd_tl_NumberOfSteps.out for output ============================================================ - 0 13.000000 steps - 1 58.000000 steps - 2 81.000000 steps + 0 23.000000 steps + 1 49.000000 steps + 2 63.000000 steps 3 41.000000 steps - 4 32.000000 steps - 5 43.000000 steps - 6 52.000000 steps - 7 48.000000 steps - 8 73.000000 steps - 9 28.000000 steps - 10 70.000000 steps - 11 87.000000 steps - 12 33.000000 steps + 4 8.000000 steps + 5 93.000000 steps + 6 54.000000 steps + 7 101.000000 steps + 8 90.000000 steps + 9 91.000000 steps + 10 71.000000 steps + 11 79.000000 steps + 12 55.000000 steps 13 88.000000 steps - 14 112.000000 steps - 15 60.000000 steps - 16 125.000000 steps - 17 80.000000 steps - 18 26.000000 steps - 19 18.000000 steps - 20 76.000000 steps - 21 70.000000 steps - 22 44.000000 steps - 23 20.000000 steps - 24 91.000000 steps - 25 89.000000 steps - 26 242.000000 steps - 27 356.000000 steps - 28 85.000000 steps - 29 120.000000 steps - 30 207.000000 steps - 31 486.000000 steps - 32 360.000000 steps - 33 204.000000 steps - 34 344.000000 steps - 35 185.000000 steps - 36 386.000000 steps - 37 290.000000 steps - 38 418.000000 steps - 39 177.000000 steps - 40 130.000000 steps - 41 272.000000 steps - 42 401.000000 steps - 43 430.000000 steps - 44 131.000000 steps - 45 169.000000 steps - 46 136.000000 steps - 47 128.000000 steps - 48 225.000000 steps - 49 140.000000 steps - 50 600.000000 steps - 51 523.000000 steps - 52 1018.000000 steps - 53 699.000000 steps - 54 667.000000 steps - 55 575.000000 steps - 56 995.000000 steps - 57 1129.000000 steps - 58 1137.000000 steps - 59 806.000000 steps - 60 945.000000 steps - 61 1220.000000 steps - 62 1271.000000 steps - 63 1151.000000 steps - 64 731.000000 steps - 65 519.000000 steps - 66 885.000000 steps - 67 1065.000000 steps - 68 1116.000000 steps - 69 603.000000 steps - 70 536.000000 steps - 71 705.000000 steps - 72 824.000000 steps - 73 637.000000 steps - 74 645.000000 steps - 75 3083.000000 steps - 76 3832.000000 steps - 77 4735.000000 steps - 78 4054.000000 steps - 79 3076.000000 steps - 80 3927.000000 steps - 81 3838.000000 steps - 82 4422.000000 steps - 83 4972.000000 steps - 84 3804.000000 steps - 85 3958.000000 steps - 86 4105.000000 steps - 87 4609.000000 steps - 88 4439.000000 steps - 89 3175.000000 steps - 90 3974.000000 steps - 91 3891.000000 steps - 92 4465.000000 steps - 93 4490.000000 steps - 94 4161.000000 steps - 95 3032.000000 steps - 96 3460.000000 steps - 97 4201.000000 steps - 98 4647.000000 steps - 99 3187.000000 steps - 100 14516.000000 steps - 101 18071.000000 steps - 102 19715.000000 steps - 103 19248.000000 steps - 104 14509.000000 steps - 105 19554.000000 steps - 106 22913.000000 steps - 107 25372.000000 steps - 108 25207.000000 steps - 109 18199.000000 steps - 110 19639.000000 steps - 111 23658.000000 steps - 112 24077.000000 steps - 113 25233.000000 steps - 114 18017.000000 steps - 115 18352.000000 steps - 116 21495.000000 steps - 117 24898.000000 steps - 118 24617.000000 steps - 119 18472.000000 steps - 120 14245.000000 steps - 121 19034.000000 steps - 122 20690.000000 steps - 123 17916.000000 steps - 124 14756.000000 steps - 0 13 [sigma: 4.5 | error: 0.692308 | coeff: 0.692308 | eff: 1 | fom: 0.0907139 | r2int: 0.359467 | r2eff: 0 | hits: 4 ] steps - 1 58 [sigma: 9.78775 | error: 0.377346 | coeff: 0.377346 | eff: 1 | fom: 0.305346 | r2int: 0.113912 | r2eff: 0 | hits: 5 ] steps - 2 81 [sigma: 7.01911 | error: 0.245099 | coeff: 0.245099 | eff: 1 | fom: 0.72375 | r2int: 0.0525644 | r2eff: 0 | hits: 8 ] steps - 3 41 [sigma: 12.4325 | error: 0.742762 | coeff: 0.742762 | eff: 1 | fom: 0.0788084 | r2int: 0.459746 | r2eff: 0 | hits: 6 ] steps - 4 32 [sigma: 9.50438 | error: 0.51444 | coeff: 0.51444 | eff: 1 | fom: 0.164287 | r2int: 0.176432 | r2eff: 0 | hits: 3 ] steps - 5 43 [sigma: 12.3346 | error: 0.758938 | coeff: 0.758938 | eff: 1 | fom: 0.0754848 | r2int: 0.493703 | r2eff: 0 | hits: 7 ] steps - 6 52 [sigma: 5.8902 | error: 0.339819 | coeff: 0.339819 | eff: 1 | fom: 0.37651 | r2int: 0.102646 | r2eff: 0 | hits: 9 ] steps - 7 48 [sigma: 4.56937 | error: 0.356188 | coeff: 0.356188 | eff: 1 | fom: 0.3427 | r2int: 0.117808 | r2eff: 0 | hits: 14 ] steps - 8 73 [sigma: 7.25635 | error: 0.329679 | coeff: 0.329679 | eff: 1 | fom: 0.400027 | r2int: 0.0988076 | r2eff: 0 | hits: 11 ] steps - 9 28 [sigma: 9.07377 | error: 0.561294 | coeff: 0.561294 | eff: 1 | fom: 0.138004 | r2int: 0.210034 | r2eff: 0 | hits: 3 ] steps - 10 70 [sigma: 12.083 | error: 0.456696 | coeff: 0.456696 | eff: 1 | fom: 0.208457 | r2int: 0.178776 | r2eff: 0 | hits: 7 ] steps - 11 87 [sigma: 8.2334 | error: 0.299268 | coeff: 0.299268 | eff: 1 | fom: 0.485459 | r2int: 0.0806051 | r2eff: 0 | hits: 10 ] steps - 12 33 [sigma: 3 | error: 0.301511 | coeff: 0.301511 | eff: 1 | fom: 0.478261 | r2int: 0.0826446 | r2eff: 0 | hits: 11 ] steps - 13 88 [sigma: 7.90732 | error: 0.32398 | coeff: 0.32398 | eff: 1 | fom: 0.414225 | r2int: 0.0968889 | r2eff: 0 | hits: 13 ] steps - 14 112 [sigma: 19.8854 | error: 0.502182 | coeff: 0.502182 | eff: 1 | fom: 0.172405 | r2int: 0.220663 | r2eff: 0 | hits: 8 ] steps - 15 60 [sigma: 5.96571 | error: 0.358495 | coeff: 0.358495 | eff: 1 | fom: 0.338303 | r2int: 0.118632 | r2eff: 0 | hits: 13 ] steps - 16 125 [sigma: 8.04374 | error: 0.280495 | coeff: 0.280495 | eff: 1 | fom: 0.552615 | r2int: 0.0745364 | r2eff: 0 | hits: 19 ] steps - 17 80 [sigma: 10.1891 | error: 0.422419 | coeff: 0.422419 | eff: 1 | fom: 0.243661 | r2int: 0.162216 | r2eff: 0 | hits: 11 ] steps - 18 26 [sigma: 5.31395 | error: 0.540746 | coeff: 0.540746 | eff: 1 | fom: 0.148691 | r2int: 0.250634 | r2eff: 0 | hits: 7 ] steps - 19 18 [sigma: 4.42719 | error: 0.602464 | coeff: 0.602464 | eff: 1 | fom: 0.119787 | r2int: 0.302469 | r2eff: 0 | hits: 6 ] steps - 20 76 [sigma: 12.2093 | error: 0.393507 | coeff: 0.393507 | eff: 1 | fom: 0.280781 | r2int: 0.12904 | r2eff: 0 | hits: 6 ] steps - 21 70 [sigma: 16.0156 | error: 0.5116 | coeff: 0.5116 | eff: 1 | fom: 0.166116 | r2int: 0.209388 | r2eff: 0 | hits: 5 ] steps - 22 44 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: 0 | r2eff: 0 | hits: 1 ] steps - 23 20 [sigma: 2.73252 | error: 0.334664 | coeff: 0.334664 | eff: 1 | fom: 0.388199 | r2int: 0.0933333 | r2eff: 0 | hits: 6 ] steps - 24 91 [sigma: 13.5535 | error: 0.421264 | coeff: 0.421264 | eff: 1 | fom: 0.244999 | r2int: 0.15528 | r2eff: 0 | hits: 8 ] steps - 25 89 [sigma: 4.61835 | error: 0.207566 | coeff: 0.207566 | eff: 1 | fom: 1.00916 | r2int: 0.040391 | r2eff: 0 | hits: 16 ] steps - 26 242 [sigma: 11.2749 | error: 0.228246 | coeff: 0.228246 | eff: 1 | fom: 0.834578 | r2int: 0.0499254 | r2eff: 0 | hits: 24 ] steps - 27 356 [sigma: 12.8032 | error: 0.193672 | coeff: 0.193672 | eff: 1 | fom: 1.15915 | r2int: 0.0362154 | r2eff: 0 | hits: 29 ] steps - 28 85 [sigma: 8.07701 | error: 0.368025 | coeff: 0.368025 | eff: 1 | fom: 0.321009 | r2int: 0.126413 | r2eff: 0 | hits: 15 ] steps - 29 120 [sigma: 10.469 | error: 0.348967 | coeff: 0.348967 | eff: 1 | fom: 0.35703 | r2int: 0.114167 | r2eff: 0 | hits: 16 ] steps - 30 207 [sigma: 9 | error: 0.22592 | coeff: 0.22592 | eff: 1 | fom: 0.851852 | r2int: 0.0491493 | r2eff: 0 | hits: 27 ] steps - 31 486 [sigma: 18.7348 | error: 0.211142 | coeff: 0.211142 | eff: 1 | fom: 0.97527 | r2int: 0.0430947 | r2eff: 0 | hits: 30 ] steps - 32 360 [sigma: 11.3593 | error: 0.172827 | coeff: 0.172827 | eff: 1 | fom: 1.45563 | r2int: 0.0288735 | r2eff: 0 | hits: 30 ] steps - 33 204 [sigma: 9.97644 | error: 0.207483 | coeff: 0.207483 | eff: 1 | fom: 1.00997 | r2int: 0.0406574 | r2eff: 0 | hits: 18 ] steps - 34 344 [sigma: 23.8966 | error: 0.318337 | coeff: 0.318337 | eff: 1 | fom: 0.42904 | r2int: 0.0965129 | r2eff: 0 | hits: 21 ] steps - 35 185 [sigma: 13.123 | error: 0.300952 | coeff: 0.300952 | eff: 1 | fom: 0.480041 | r2int: 0.0855401 | r2eff: 0 | hits: 18 ] steps - 36 386 [sigma: 14.5833 | error: 0.206932 | coeff: 0.206932 | eff: 1 | fom: 1.01535 | r2int: 0.0413935 | r2eff: 0 | hits: 30 ] steps - 37 290 [sigma: 9.06046 | error: 0.171125 | coeff: 0.171125 | eff: 1 | fom: 1.48473 | r2int: 0.0283076 | r2eff: 0 | hits: 30 ] steps - 38 418 [sigma: 15.1223 | error: 0.198154 | coeff: 0.198154 | eff: 1 | fom: 1.1073 | r2int: 0.0379562 | r2eff: 0 | hits: 30 ] steps - 39 177 [sigma: 16.0665 | error: 0.374259 | coeff: 0.374259 | eff: 1 | fom: 0.310404 | r2int: 0.13183 | r2eff: 0 | hits: 17 ] steps - 40 130 [sigma: 5.74772 | error: 0.2166 | coeff: 0.2166 | eff: 1 | fom: 0.926738 | r2int: 0.0449606 | r2eff: 0 | hits: 24 ] steps - 41 272 [sigma: 8.9271 | error: 0.173668 | coeff: 0.173668 | eff: 1 | fom: 1.44155 | r2int: 0.0290835 | r2eff: 0 | hits: 28 ] steps - 42 401 [sigma: 12.6695 | error: 0.173052 | coeff: 0.173052 | eff: 1 | fom: 1.45185 | r2int: 0.0289486 | r2eff: 0 | hits: 30 ] steps - 43 430 [sigma: 18.4603 | error: 0.235142 | coeff: 0.235142 | eff: 1 | fom: 0.786342 | r2int: 0.0534487 | r2eff: 0 | hits: 30 ] steps - 44 131 [sigma: 8.43205 | error: 0.280568 | coeff: 0.280568 | eff: 1 | fom: 0.552326 | r2int: 0.0745755 | r2eff: 0 | hits: 19 ] steps - 45 169 [sigma: 17.3536 | error: 0.384209 | coeff: 0.384209 | eff: 1 | fom: 0.294535 | r2int: 0.137073 | r2eff: 0 | hits: 14 ] steps - 46 136 [sigma: 9.7018 | error: 0.294129 | coeff: 0.294129 | eff: 1 | fom: 0.502569 | r2int: 0.081423 | r2eff: 0 | hits: 17 ] steps - 47 128 [sigma: 7.77108 | error: 0.25032 | coeff: 0.25032 | eff: 1 | fom: 0.693873 | r2int: 0.0589743 | r2eff: 0 | hits: 17 ] steps - 48 225 [sigma: 11.0905 | error: 0.256125 | coeff: 0.256125 | eff: 1 | fom: 0.662778 | r2int: 0.0631704 | r2eff: 0 | hits: 27 ] steps - 49 140 [sigma: 11.159 | error: 0.308705 | coeff: 0.308705 | eff: 1 | fom: 0.456231 | r2int: 0.0889456 | r2eff: 0 | hits: 15 ] steps - 50 600 [sigma: 21.1432 | error: 0.196201 | coeff: 0.196201 | eff: 1 | fom: 1.12946 | r2int: 0.037253 | r2eff: 0 | hits: 31 ] steps - 51 523 [sigma: 11.13 | error: 0.163464 | coeff: 0.163464 | eff: 1 | fom: 1.62716 | r2int: 0.0262675 | r2eff: 0 | hits: 59 ] steps - 52 1018 [sigma: 20.522 | error: 0.179179 | coeff: 0.179179 | eff: 1 | fom: 1.35425 | r2int: 0.0316986 | r2eff: 0 | hits: 79 ] steps - 53 699 [sigma: 17.1838 | error: 0.219881 | coeff: 0.219881 | eff: 1 | fom: 0.899281 | r2int: 0.0477434 | r2eff: 0 | hits: 80 ] steps - 54 667 [sigma: 22.7934 | error: 0.255727 | coeff: 0.255727 | eff: 1 | fom: 0.664843 | r2int: 0.0642285 | r2eff: 0 | hits: 56 ] steps - 55 575 [sigma: 12.7817 | error: 0.184649 | coeff: 0.184649 | eff: 1 | fom: 1.2752 | r2int: 0.033601 | r2eff: 0 | hits: 69 ] steps - 56 995 [sigma: 12.207 | error: 0.11177 | coeff: 0.11177 | eff: 1 | fom: 3.48032 | r2int: 0.0123421 | r2eff: 0 | hits: 83 ] steps - 57 1129 [sigma: 10.4874 | error: 0.0928911 | coeff: 0.0928911 | eff: 1 | fom: 5.03876 | r2int: 0.00854248 | r2eff: 0 | hits: 100 ] steps - 58 1137 [sigma: 10.9096 | error: 0.0894966 | coeff: 0.0894966 | eff: 1 | fom: 5.42825 | r2int: 0.00791757 | r2eff: 0 | hits: 87 ] steps - 59 806 [sigma: 16.2862 | error: 0.165395 | coeff: 0.165395 | eff: 1 | fom: 1.58937 | r2int: 0.0269473 | r2eff: 0 | hits: 67 ] steps - 60 945 [sigma: 23.7343 | error: 0.218953 | coeff: 0.218953 | eff: 1 | fom: 0.906923 | r2int: 0.0473096 | r2eff: 0 | hits: 76 ] steps - 61 1220 [sigma: 13.6675 | error: 0.106868 | coeff: 0.106868 | eff: 1 | fom: 3.80693 | r2int: 0.0112953 | r2eff: 0 | hits: 91 ] steps - 62 1271 [sigma: 10.6382 | error: 0.0893669 | coeff: 0.0893669 | eff: 1 | fom: 5.444 | r2int: 0.00791639 | r2eff: 0 | hits: 114 ] steps - 63 1151 [sigma: 12.4192 | error: 0.104054 | coeff: 0.104054 | eff: 1 | fom: 4.0156 | r2int: 0.0107109 | r2eff: 0 | hits: 93 ] steps - 64 731 [sigma: 20.962 | error: 0.227607 | coeff: 0.227607 | eff: 1 | fom: 0.83927 | r2int: 0.0509825 | r2eff: 0 | hits: 63 ] steps - 65 519 [sigma: 13.0788 | error: 0.200019 | coeff: 0.200019 | eff: 1 | fom: 1.08675 | r2int: 0.0393725 | r2eff: 0 | hits: 63 ] steps - 66 885 [sigma: 12.5085 | error: 0.127988 | coeff: 0.127988 | eff: 1 | fom: 2.6542 | r2int: 0.0161811 | r2eff: 0 | hits: 82 ] steps - 67 1065 [sigma: 10.7001 | error: 0.100471 | coeff: 0.100471 | eff: 1 | fom: 4.3072 | r2int: 0.00999339 | r2eff: 0 | hits: 100 ] steps - 68 1116 [sigma: 10.2339 | error: 0.0903152 | coeff: 0.0903152 | eff: 1 | fom: 5.33029 | r2int: 0.00807274 | r2eff: 0 | hits: 97 ] steps - 69 603 [sigma: 18.9001 | error: 0.236637 | coeff: 0.236637 | eff: 1 | fom: 0.776436 | r2int: 0.0550149 | r2eff: 0 | hits: 57 ] steps - 70 536 [sigma: 21.0412 | error: 0.235535 | coeff: 0.235535 | eff: 1 | fom: 0.783719 | r2int: 0.0539359 | r2eff: 0 | hits: 36 ] steps - 71 705 [sigma: 13.5991 | error: 0.154316 | coeff: 0.154316 | eff: 1 | fom: 1.82578 | r2int: 0.0234414 | r2eff: 0 | hits: 64 ] steps - 72 824 [sigma: 20.116 | error: 0.19377 | coeff: 0.19377 | eff: 1 | fom: 1.15798 | r2int: 0.0369506 | r2eff: 0 | hits: 63 ] steps - 73 637 [sigma: 11.6912 | error: 0.15465 | coeff: 0.15465 | eff: 1 | fom: 1.81791 | r2int: 0.0235798 | r2eff: 0 | hits: 71 ] steps - 74 645 [sigma: 22.179 | error: 0.206316 | coeff: 0.206316 | eff: 1 | fom: 1.02142 | r2int: 0.0413839 | r2eff: 0 | hits: 36 ] steps - 75 3083 [sigma: 22.5201 | error: 0.0923967 | coeff: 0.0923967 | eff: 1 | fom: 5.09283 | r2int: 0.00848379 | r2eff: 0 | hits: 160 ] steps - 76 3832 [sigma: 22.7067 | error: 0.0862774 | coeff: 0.0862774 | eff: 1 | fom: 5.84087 | r2int: 0.00740869 | r2eff: 0 | hits: 212 ] steps - 77 4735 [sigma: 30.6073 | error: 0.0978189 | coeff: 0.0978189 | eff: 1 | fom: 4.54387 | r2int: 0.00952676 | r2eff: 0 | hits: 229 ] steps - 78 4054 [sigma: 22.2408 | error: 0.0811875 | coeff: 0.0811875 | eff: 1 | fom: 6.59619 | r2int: 0.00656132 | r2eff: 0 | hits: 219 ] steps - 79 3076 [sigma: 30.0943 | error: 0.122978 | coeff: 0.122978 | eff: 1 | fom: 2.87488 | r2int: 0.0150278 | r2eff: 0 | hits: 158 ] steps - 80 3927 [sigma: 28.8038 | error: 0.104762 | coeff: 0.104762 | eff: 1 | fom: 3.96155 | r2int: 0.0109213 | r2eff: 0 | hits: 204 ] steps - 81 3838 [sigma: 13.174 | error: 0.0585543 | coeff: 0.0585543 | eff: 1 | fom: 12.681 | r2int: 0.00341682 | r2eff: 0 | hits: 291 ] steps - 82 4422 [sigma: 11.5061 | error: 0.0492325 | coeff: 0.0492325 | eff: 1 | fom: 17.9377 | r2int: 0.00241707 | r2eff: 0 | hits: 358 ] steps - 83 4972 [sigma: 14.0897 | error: 0.0519446 | coeff: 0.0519446 | eff: 1 | fom: 16.1135 | r2int: 0.00269022 | r2eff: 0 | hits: 336 ] steps - 84 3804 [sigma: 26.7085 | error: 0.101988 | coeff: 0.101988 | eff: 1 | fom: 4.17997 | r2int: 0.0103523 | r2eff: 0 | hits: 211 ] steps - 85 3958 [sigma: 22.0115 | error: 0.0847068 | coeff: 0.0847068 | eff: 1 | fom: 6.05948 | r2int: 0.00714432 | r2eff: 0 | hits: 232 ] steps - 86 4105 [sigma: 12.4881 | error: 0.0527795 | coeff: 0.0527795 | eff: 1 | fom: 15.6078 | r2int: 0.00277642 | r2eff: 0 | hits: 301 ] steps - 87 4609 [sigma: 13.0336 | error: 0.0522963 | coeff: 0.0522963 | eff: 1 | fom: 15.8976 | r2int: 0.0027269 | r2eff: 0 | hits: 342 ] steps - 88 4439 [sigma: 12.054 | error: 0.0505835 | coeff: 0.0505835 | eff: 1 | fom: 16.9924 | r2int: 0.00255132 | r2eff: 0 | hits: 347 ] steps - 89 3175 [sigma: 19.3927 | error: 0.0891423 | coeff: 0.0891423 | eff: 1 | fom: 5.47147 | r2int: 0.00790905 | r2eff: 0 | hits: 213 ] steps - 90 3974 [sigma: 28.4493 | error: 0.103742 | coeff: 0.103742 | eff: 1 | fom: 4.03985 | r2int: 0.0107111 | r2eff: 0 | hits: 210 ] steps - 91 3891 [sigma: 12.2296 | error: 0.0543485 | coeff: 0.0543485 | eff: 1 | fom: 14.7197 | r2int: 0.00294388 | r2eff: 0 | hits: 299 ] steps - 92 4465 [sigma: 12.8189 | error: 0.0534032 | coeff: 0.0534032 | eff: 1 | fom: 15.2454 | r2int: 0.00284366 | r2eff: 0 | hits: 346 ] steps - 93 4490 [sigma: 13.1484 | error: 0.0544709 | coeff: 0.0544709 | eff: 1 | fom: 14.6535 | r2int: 0.00295851 | r2eff: 0 | hits: 346 ] steps - 94 4161 [sigma: 27.0779 | error: 0.0938532 | coeff: 0.0938532 | eff: 1 | fom: 4.93599 | r2int: 0.00876607 | r2eff: 0 | hits: 208 ] steps - 95 3032 [sigma: 28.887 | error: 0.119378 | coeff: 0.119378 | eff: 1 | fom: 3.05088 | r2int: 0.0141603 | r2eff: 0 | hits: 157 ] steps - 96 3460 [sigma: 21.8426 | error: 0.0908266 | coeff: 0.0908266 | eff: 1 | fom: 5.27043 | r2int: 0.00820961 | r2eff: 0 | hits: 207 ] steps - 97 4201 [sigma: 23.3662 | error: 0.0841693 | coeff: 0.0841693 | eff: 1 | fom: 6.13711 | r2int: 0.00705354 | r2eff: 0 | hits: 229 ] steps - 98 4647 [sigma: 33.3681 | error: 0.100784 | coeff: 0.100784 | eff: 1 | fom: 4.28045 | r2int: 0.0101058 | r2eff: 0 | hits: 197 ] steps - 99 3187 [sigma: 26.0412 | error: 0.101729 | coeff: 0.101729 | eff: 1 | fom: 4.20129 | r2int: 0.010282 | r2eff: 0 | hits: 155 ] steps - 100 14516 [sigma: 27.3208 | error: 0.0480953 | coeff: 0.0480953 | eff: 1 | fom: 18.796 | r2int: 0.00230962 | r2eff: 0 | hits: 653 ] steps - 101 18071 [sigma: 28.3232 | error: 0.0436888 | coeff: 0.0436888 | eff: 1 | fom: 22.7789 | r2int: 0.00190625 | r2eff: 0 | hits: 777 ] steps - 102 19715 [sigma: 31.6306 | error: 0.045066 | coeff: 0.045066 | eff: 1 | fom: 20.5159 | r2int: 0.00202837 | r2eff: 0 | hits: 789 ] steps - 103 19248 [sigma: 30.9783 | error: 0.0441641 | coeff: 0.0441641 | eff: 1 | fom: 21.3624 | r2int: 0.00194787 | r2eff: 0 | hits: 753 ] steps - 104 14509 [sigma: 27.161 | error: 0.0474326 | coeff: 0.0474326 | eff: 1 | fom: 18.5198 | r2int: 0.00224634 | r2eff: 0 | hits: 642 ] steps - 105 19554 [sigma: 30.3887 | error: 0.0441209 | coeff: 0.0441209 | eff: 1 | fom: 21.4043 | r2int: 0.00194423 | r2eff: 0 | hits: 806 ] steps - 106 22913 [sigma: 32.7438 | error: 0.0432745 | coeff: 0.0432745 | eff: 1 | fom: 22.2497 | r2int: 0.00187064 | r2eff: 0 | hits: 917 ] steps - 107 25372 [sigma: 35.7507 | error: 0.0443351 | coeff: 0.0443351 | eff: 1 | fom: 20.35 | r2int: 0.00196362 | r2eff: 0 | hits: 990 ] steps - 108 25207 [sigma: 31.708 | error: 0.0392378 | coeff: 0.0392378 | eff: 1 | fom: 25.9807 | r2int: 0.00153802 | r2eff: 0 | hits: 973 ] steps - 109 18199 [sigma: 31.3526 | error: 0.0479907 | coeff: 0.0479907 | eff: 1 | fom: 17.3678 | r2int: 0.00230014 | r2eff: 0 | hits: 776 ] steps - 110 19639 [sigma: 33.2694 | error: 0.0473425 | coeff: 0.0473425 | eff: 1 | fom: 17.8467 | r2int: 0.00223844 | r2eff: 0 | hits: 781 ] steps - 111 23658 [sigma: 31.4029 | error: 0.0409983 | coeff: 0.0409983 | eff: 1 | fom: 23.7973 | r2int: 0.0016791 | r2eff: 0 | hits: 954 ] steps - 112 24077 [sigma: 28.8991 | error: 0.0384088 | coeff: 0.0384088 | eff: 1 | fom: 27.1142 | r2int: 0.0014738 | r2eff: 0 | hits: 1024 ] steps - 113 25233 [sigma: 30.7123 | error: 0.0380833 | coeff: 0.0380833 | eff: 1 | fom: 27.5797 | r2int: 0.00144886 | r2eff: 0 | hits: 979 ] steps - 114 18017 [sigma: 30.0311 | error: 0.045373 | coeff: 0.045373 | eff: 1 | fom: 19.4296 | r2int: 0.00205593 | r2eff: 0 | hits: 741 ] steps - 115 18352 [sigma: 27.8754 | error: 0.0423398 | coeff: 0.0423398 | eff: 1 | fom: 22.3132 | r2int: 0.00179035 | r2eff: 0 | hits: 777 ] steps - 116 21495 [sigma: 28.2773 | error: 0.0403762 | coeff: 0.0403762 | eff: 1 | fom: 24.5363 | r2int: 0.00162851 | r2eff: 0 | hits: 942 ] steps - 117 24898 [sigma: 31.3589 | error: 0.0391255 | coeff: 0.0391255 | eff: 1 | fom: 26.13 | r2int: 0.00152922 | r2eff: 0 | hits: 965 ] steps - 118 24617 [sigma: 31.0869 | error: 0.0391475 | coeff: 0.0391475 | eff: 1 | fom: 26.1006 | r2int: 0.00153093 | r2eff: 0 | hits: 961 ] steps - 119 18472 [sigma: 30.529 | error: 0.0455323 | coeff: 0.0455323 | eff: 1 | fom: 19.294 | r2int: 0.00207045 | r2eff: 0 | hits: 759 ] steps - 120 14245 [sigma: 26.2139 | error: 0.0468081 | coeff: 0.0468081 | eff: 1 | fom: 18.2565 | r2int: 0.00218761 | r2eff: 0 | hits: 647 ] steps - 121 19034 [sigma: 30.8833 | error: 0.0457198 | coeff: 0.0457198 | eff: 1 | fom: 19.136 | r2int: 0.00208767 | r2eff: 0 | hits: 794 ] steps - 122 20690 [sigma: 32.654 | error: 0.0453317 | coeff: 0.0453317 | eff: 1 | fom: 18.7164 | r2int: 0.00205248 | r2eff: 0 | hits: 825 ] steps - 123 17916 [sigma: 29.08 | error: 0.0447466 | coeff: 0.0447466 | eff: 1 | fom: 19.2091 | r2int: 0.00199963 | r2eff: 0 | hits: 760 ] steps - 124 14756 [sigma: 28.3773 | error: 0.0476915 | coeff: 0.0476915 | eff: 1 | fom: 16.9101 | r2int: 0.00227078 | r2eff: 0 | hits: 615 ] steps + 14 115.000000 steps + 15 80.000000 steps + 16 62.000000 steps + 17 46.000000 steps + 18 74.000000 steps + 19 64.000000 steps + 20 36.000000 steps + 21 7.000000 steps + 22 32.000000 steps + 23 33.000000 steps + 24 6.000000 steps + 25 137.000000 steps + 26 148.000000 steps + 27 137.000000 steps + 28 50.000000 steps + 29 118.000000 steps + 30 49.000000 steps + 31 252.000000 steps + 32 234.000000 steps + 33 295.000000 steps + 34 74.000000 steps + 35 206.000000 steps + 36 299.000000 steps + 37 415.000000 steps + 38 468.000000 steps + 39 249.000000 steps + 40 101.000000 steps + 41 199.000000 steps + 42 350.000000 steps + 43 375.000000 steps + 44 206.000000 steps + 45 35.000000 steps + 46 90.000000 steps + 47 95.000000 steps + 48 186.000000 steps + 49 104.000000 steps + 50 429.000000 steps + 51 464.000000 steps + 52 423.000000 steps + 53 428.000000 steps + 54 343.000000 steps + 55 471.000000 steps + 56 1048.000000 steps + 57 964.000000 steps + 58 630.000000 steps + 59 557.000000 steps + 60 562.000000 steps + 61 910.000000 steps + 62 989.000000 steps + 63 1344.000000 steps + 64 601.000000 steps + 65 433.000000 steps + 66 842.000000 steps + 67 1097.000000 steps + 68 1011.000000 steps + 69 467.000000 steps + 70 273.000000 steps + 71 539.000000 steps + 72 455.000000 steps + 73 354.000000 steps + 74 413.000000 steps + 75 3038.000000 steps + 76 4065.000000 steps + 77 3866.000000 steps + 78 4313.000000 steps + 79 3259.000000 steps + 80 4636.000000 steps + 81 4111.000000 steps + 82 3873.000000 steps + 83 3617.000000 steps + 84 3268.000000 steps + 85 4265.000000 steps + 86 4107.000000 steps + 87 4165.000000 steps + 88 3984.000000 steps + 89 3895.000000 steps + 90 3552.000000 steps + 91 3784.000000 steps + 92 4231.000000 steps + 93 3940.000000 steps + 94 4017.000000 steps + 95 3055.000000 steps + 96 5471.000000 steps + 97 4372.000000 steps + 98 4194.000000 steps + 99 3157.000000 steps + 100 14604.000000 steps + 101 20881.000000 steps + 102 19068.000000 steps + 103 19813.000000 steps + 104 14232.000000 steps + 105 20021.000000 steps + 106 23000.000000 steps + 107 23663.000000 steps + 108 24442.000000 steps + 109 17801.000000 steps + 110 19311.000000 steps + 111 23832.000000 steps + 112 23975.000000 steps + 113 24596.000000 steps + 114 17695.000000 steps + 115 19536.000000 steps + 116 22931.000000 steps + 117 25088.000000 steps + 118 24776.000000 steps + 119 17989.000000 steps + 120 14358.000000 steps + 121 20360.000000 steps + 122 20257.000000 steps + 123 18061.000000 steps + 124 14105.000000 steps + 0 23 [sigma: 3.43188 | error: 0.447636 | coeff: 0.447636 | eff: 1 | fom: 0.226844 | r2int: 0.178114 | r2eff: 0 | hits: 9 ] steps + 1 49 [sigma: 10.0637 | error: 0.616144 | coeff: 0.616144 | eff: 1 | fom: 0.119733 | r2int: 0.337452 | r2eff: 0 | hits: 9 ] steps + 2 63 [sigma: 9.48683 | error: 0.451754 | coeff: 0.451754 | eff: 1 | fom: 0.222727 | r2int: 0.181406 | r2eff: 0 | hits: 9 ] steps + 3 41 [sigma: 9.88433 | error: 0.539074 | coeff: 0.539074 | eff: 1 | fom: 0.156416 | r2int: 0.232481 | r2eff: 0 | hits: 5 ] steps + 4 8 [sigma: 2.88675 | error: 0.625 | coeff: 0.625 | eff: 1 | fom: 0.116364 | r2int: 0.260417 | r2eff: 0 | hits: 3 ] steps + 5 93 [sigma: 15.6429 | error: 0.412012 | coeff: 0.412012 | eff: 1 | fom: 0.267768 | r2int: 0.141461 | r2eff: 0 | hits: 6 ] steps + 6 54 [sigma: 15.283 | error: 0.748799 | coeff: 0.748799 | eff: 1 | fom: 0.0810676 | r2int: 0.4806 | r2eff: 0 | hits: 7 ] steps + 7 101 [sigma: 15.1969 | error: 0.451392 | coeff: 0.451392 | eff: 1 | fom: 0.223085 | r2int: 0.181115 | r2eff: 0 | hits: 9 ] steps + 8 90 [sigma: 14.3999 | error: 0.452545 | coeff: 0.452545 | eff: 1 | fom: 0.221949 | r2int: 0.179198 | r2eff: 0 | hits: 8 ] steps + 9 91 [sigma: 12.9561 | error: 0.427125 | coeff: 0.427125 | eff: 1 | fom: 0.249154 | r2int: 0.162165 | r2eff: 0 | hits: 9 ] steps + 10 71 [sigma: 7.78927 | error: 0.36386 | coeff: 0.36386 | eff: 1 | fom: 0.343327 | r2int: 0.120359 | r2eff: 0 | hits: 11 ] steps + 11 79 [sigma: 13.8609 | error: 0.496261 | coeff: 0.496261 | eff: 1 | fom: 0.184569 | r2int: 0.21549 | r2eff: 0 | hits: 8 ] steps + 12 55 [sigma: 8.62554 | error: 0.52014 | coeff: 0.52014 | eff: 1 | fom: 0.168011 | r2int: 0.24595 | r2eff: 0 | hits: 11 ] steps + 13 88 [sigma: 8.71084 | error: 0.342901 | coeff: 0.342901 | eff: 1 | fom: 0.386581 | r2int: 0.107782 | r2eff: 0 | hits: 12 ] steps + 14 115 [sigma: 18.5061 | error: 0.580214 | coeff: 0.580214 | eff: 1 | fom: 0.135021 | r2int: 0.310752 | r2eff: 0 | hits: 13 ] steps + 15 80 [sigma: 19.6129 | error: 0.600521 | coeff: 0.600521 | eff: 1 | fom: 0.126044 | r2int: 0.300521 | r2eff: 0 | hits: 6 ] steps + 16 62 [sigma: 8.18942 | error: 0.417697 | coeff: 0.417697 | eff: 1 | fom: 0.260528 | r2int: 0.157024 | r2eff: 0 | hits: 10 ] steps + 17 46 [sigma: 5.25463 | error: 0.342693 | coeff: 0.342693 | eff: 1 | fom: 0.38705 | r2int: 0.10439 | r2eff: 0 | hits: 9 ] steps + 18 74 [sigma: 7.14567 | error: 0.334504 | coeff: 0.334504 | eff: 1 | fom: 0.406231 | r2int: 0.102569 | r2eff: 0 | hits: 12 ] steps + 19 64 [sigma: 7.96719 | error: 0.329363 | coeff: 0.329363 | eff: 1 | fom: 0.419014 | r2int: 0.0929827 | r2eff: 0 | hits: 7 ] steps + 20 36 [sigma: 9.55685 | error: 0.530936 | coeff: 0.530936 | eff: 1 | fom: 0.161248 | r2int: 0.21142 | r2eff: 0 | hits: 4 ] steps + 21 7 [sigma: 0.408248 | error: 0.142857 | coeff: 0.142857 | eff: 1 | fom: 2.22727 | r2int: 0.0170068 | r2eff: 0 | hits: 6 ] steps + 22 32 [sigma: 2.46798 | error: 0.255792 | coeff: 0.255792 | eff: 1 | fom: 0.694708 | r2int: 0.0594815 | r2eff: 0 | hits: 11 ] steps + 23 33 [sigma: 4.58063 | error: 0.392605 | coeff: 0.392605 | eff: 1 | fom: 0.294894 | r2int: 0.134871 | r2eff: 0 | hits: 8 ] steps + 24 6 [sigma: 0 | error: 0 | coeff: 0 | eff: 1 | fom: 1 | r2int: 0 | r2eff: 0 | hits: 6 ] steps + 25 137 [sigma: 11.5704 | error: 0.316003 | coeff: 0.316003 | eff: 1 | fom: 0.455193 | r2int: 0.0927251 | r2eff: 0 | hits: 14 ] steps + 26 148 [sigma: 5.80458 | error: 0.207533 | coeff: 0.207533 | eff: 1 | fom: 1.05536 | r2int: 0.0415319 | r2eff: 0 | hits: 28 ] steps + 27 137 [sigma: 9.33678 | error: 0.297066 | coeff: 0.297066 | eff: 1 | fom: 0.515075 | r2int: 0.0836037 | r2eff: 0 | hits: 19 ] steps + 28 50 [sigma: 4.41279 | error: 0.292711 | coeff: 0.292711 | eff: 1 | fom: 0.530515 | r2int: 0.0778909 | r2eff: 0 | hits: 11 ] steps + 29 118 [sigma: 12.6436 | error: 0.321448 | coeff: 0.321448 | eff: 1 | fom: 0.439902 | r2int: 0.0918478 | r2eff: 0 | hits: 9 ] steps + 30 49 [sigma: 4.3809 | error: 0.322359 | coeff: 0.322359 | eff: 1 | fom: 0.43742 | r2int: 0.0959216 | r2eff: 0 | hits: 13 ] steps + 31 252 [sigma: 9.31128 | error: 0.169324 | coeff: 0.169324 | eff: 1 | fom: 1.5854 | r2int: 0.0273054 | r2eff: 0 | hits: 21 ] steps + 32 234 [sigma: 11.4612 | error: 0.249748 | coeff: 0.249748 | eff: 1 | fom: 0.72874 | r2int: 0.0599752 | r2eff: 0 | hits: 26 ] steps + 33 295 [sigma: 12.3352 | error: 0.196127 | coeff: 0.196127 | eff: 1 | fom: 1.18169 | r2int: 0.0367172 | r2eff: 0 | hits: 22 ] steps + 34 74 [sigma: 6.34191 | error: 0.320665 | coeff: 0.320665 | eff: 1 | fom: 0.442052 | r2int: 0.0954816 | r2eff: 0 | hits: 14 ] steps + 35 206 [sigma: 12.9862 | error: 0.281923 | coeff: 0.281923 | eff: 1 | fom: 0.571894 | r2int: 0.0755066 | r2eff: 0 | hits: 20 ] steps + 36 299 [sigma: 10.084 | error: 0.175244 | coeff: 0.175244 | eff: 1 | fom: 1.4801 | r2int: 0.029573 | r2eff: 0 | hits: 27 ] steps + 37 415 [sigma: 13.3706 | error: 0.190606 | coeff: 0.190606 | eff: 1 | fom: 1.25113 | r2int: 0.0352927 | r2eff: 0 | hits: 35 ] steps + 38 468 [sigma: 15.0784 | error: 0.190609 | coeff: 0.190609 | eff: 1 | fom: 1.2511 | r2int: 0.0352937 | r2eff: 0 | hits: 35 ] steps + 39 249 [sigma: 10.6085 | error: 0.213022 | coeff: 0.213022 | eff: 1 | fom: 1.00168 | r2int: 0.0435632 | r2eff: 0 | hits: 25 ] steps + 40 101 [sigma: 11.8645 | error: 0.371474 | coeff: 0.371474 | eff: 1 | fom: 0.329397 | r2int: 0.124194 | r2eff: 0 | hits: 10 ] steps + 41 199 [sigma: 11.0623 | error: 0.242309 | coeff: 0.242309 | eff: 1 | fom: 0.774176 | r2int: 0.0556233 | r2eff: 0 | hits: 19 ] steps + 42 350 [sigma: 15.4542 | error: 0.220775 | coeff: 0.220775 | eff: 1 | fom: 0.932564 | r2int: 0.0467918 | r2eff: 0 | hits: 25 ] steps + 43 375 [sigma: 13.3629 | error: 0.191897 | coeff: 0.191897 | eff: 1 | fom: 1.23436 | r2int: 0.0355546 | r2eff: 0 | hits: 29 ] steps + 44 206 [sigma: 15.613 | error: 0.355493 | coeff: 0.355493 | eff: 1 | fom: 0.359679 | r2int: 0.120631 | r2eff: 0 | hits: 22 ] steps + 45 35 [sigma: 6.60808 | error: 0.499524 | coeff: 0.499524 | eff: 1 | fom: 0.182165 | r2int: 0.213878 | r2eff: 0 | hits: 7 ] steps + 46 90 [sigma: 9.75074 | error: 0.390631 | coeff: 0.390631 | eff: 1 | fom: 0.297882 | r2int: 0.140855 | r2eff: 0 | hits: 13 ] steps + 47 95 [sigma: 4.62118 | error: 0.217542 | coeff: 0.217542 | eff: 1 | fom: 0.960483 | r2int: 0.0449584 | r2eff: 0 | hits: 20 ] steps + 48 186 [sigma: 10.6362 | error: 0.262049 | coeff: 0.262049 | eff: 1 | fom: 0.661929 | r2int: 0.0653998 | r2eff: 0 | hits: 21 ] steps + 49 104 [sigma: 11.9182 | error: 0.362392 | coeff: 0.362392 | eff: 1 | fom: 0.346114 | r2int: 0.118195 | r2eff: 0 | hits: 10 ] steps + 50 429 [sigma: 14.7752 | error: 0.206646 | coeff: 0.206646 | eff: 1 | fom: 1.06444 | r2int: 0.0415166 | r2eff: 0 | hits: 36 ] steps + 51 464 [sigma: 8.29555 | error: 0.141905 | coeff: 0.141905 | eff: 1 | fom: 2.25726 | r2int: 0.0198174 | r2eff: 0 | hits: 63 ] steps + 52 423 [sigma: 9.67427 | error: 0.175672 | coeff: 0.175672 | eff: 1 | fom: 1.47289 | r2int: 0.0303378 | r2eff: 0 | hits: 59 ] steps + 53 428 [sigma: 8.12193 | error: 0.134184 | coeff: 0.134184 | eff: 1 | fom: 2.52451 | r2int: 0.0176452 | r2eff: 0 | hits: 50 ] steps + 54 343 [sigma: 23.6262 | error: 0.413287 | coeff: 0.413287 | eff: 1 | fom: 0.266118 | r2int: 0.166062 | r2eff: 0 | hits: 36 ] steps + 55 471 [sigma: 10.0634 | error: 0.154072 | coeff: 0.154072 | eff: 1 | fom: 1.91483 | r2int: 0.0232817 | r2eff: 0 | hits: 52 ] steps + 56 1048 [sigma: 15.6809 | error: 0.128714 | coeff: 0.128714 | eff: 1 | fom: 2.74363 | r2int: 0.0163434 | r2eff: 0 | hits: 74 ] steps + 57 964 [sigma: 11.4665 | error: 0.105051 | coeff: 0.105051 | eff: 1 | fom: 4.11887 | r2int: 0.0108942 | r2eff: 0 | hits: 78 ] steps + 58 630 [sigma: 10.7793 | error: 0.135807 | coeff: 0.135807 | eff: 1 | fom: 2.46454 | r2int: 0.0181507 | r2eff: 0 | hits: 63 ] steps + 59 557 [sigma: 13.4112 | error: 0.166815 | coeff: 0.166815 | eff: 1 | fom: 1.63346 | r2int: 0.0272474 | r2eff: 0 | hits: 48 ] steps + 60 562 [sigma: 9.52643 | error: 0.141822 | coeff: 0.141822 | eff: 1 | fom: 2.25991 | r2int: 0.0198261 | r2eff: 0 | hits: 70 ] steps + 61 910 [sigma: 8.69643 | error: 0.0906611 | coeff: 0.0906611 | eff: 1 | fom: 5.53013 | r2int: 0.00812811 | r2eff: 0 | hits: 90 ] steps + 62 989 [sigma: 11.7796 | error: 0.112365 | coeff: 0.112365 | eff: 1 | fom: 3.60011 | r2int: 0.012484 | r2eff: 0 | hits: 89 ] steps + 63 1344 [sigma: 13.6461 | error: 0.10204 | coeff: 0.10204 | eff: 1 | fom: 4.36556 | r2int: 0.010309 | r2eff: 0 | hits: 101 ] steps + 64 601 [sigma: 17.1238 | error: 0.227938 | coeff: 0.227938 | eff: 1 | fom: 0.874871 | r2int: 0.0511439 | r2eff: 0 | hits: 64 ] steps + 65 433 [sigma: 11.7518 | error: 0.182063 | coeff: 0.182063 | eff: 1 | fom: 1.37131 | r2int: 0.0324103 | r2eff: 0 | hits: 45 ] steps + 66 842 [sigma: 12.7264 | error: 0.130895 | coeff: 0.130895 | eff: 1 | fom: 2.65295 | r2int: 0.0169052 | r2eff: 0 | hits: 75 ] steps + 67 1097 [sigma: 9.74151 | error: 0.0847111 | coeff: 0.0847111 | eff: 1 | fom: 6.33428 | r2int: 0.00709711 | r2eff: 0 | hits: 91 ] steps + 68 1011 [sigma: 10.4546 | error: 0.0986455 | coeff: 0.0986455 | eff: 1 | fom: 4.67114 | r2int: 0.00962401 | r2eff: 0 | hits: 91 ] steps + 69 467 [sigma: 10.1268 | error: 0.163716 | coeff: 0.163716 | eff: 1 | fom: 1.69588 | r2int: 0.0263327 | r2eff: 0 | hits: 57 ] steps + 70 273 [sigma: 15.6895 | error: 0.319984 | coeff: 0.319984 | eff: 1 | fom: 0.443937 | r2int: 0.0990868 | r2eff: 0 | hits: 31 ] steps + 71 539 [sigma: 16.2993 | error: 0.211679 | coeff: 0.211679 | eff: 1 | fom: 1.01443 | r2int: 0.0438936 | r2eff: 0 | hits: 49 ] steps + 72 455 [sigma: 9.53225 | error: 0.16092 | coeff: 0.16092 | eff: 1 | fom: 1.75532 | r2int: 0.0254564 | r2eff: 0 | hits: 59 ] steps + 73 354 [sigma: 7.42549 | error: 0.161119 | coeff: 0.161119 | eff: 1 | fom: 1.75098 | r2int: 0.0255195 | r2eff: 0 | hits: 59 ] steps + 74 413 [sigma: 14.5042 | error: 0.210714 | coeff: 0.210714 | eff: 1 | fom: 1.02374 | r2int: 0.0431671 | r2eff: 0 | hits: 36 ] steps + 75 3038 [sigma: 23.9369 | error: 0.0984106 | coeff: 0.0984106 | eff: 1 | fom: 4.69347 | r2int: 0.00962256 | r2eff: 0 | hits: 156 ] steps + 76 4065 [sigma: 25.9001 | error: 0.0923316 | coeff: 0.0923316 | eff: 1 | fom: 5.33184 | r2int: 0.00848453 | r2eff: 0 | hits: 210 ] steps + 77 3866 [sigma: 25.1481 | error: 0.0975741 | coeff: 0.0975741 | eff: 1 | fom: 4.77429 | r2int: 0.00947839 | r2eff: 0 | hits: 225 ] steps + 78 4313 [sigma: 26.3332 | error: 0.0878435 | coeff: 0.0878435 | eff: 1 | fom: 5.89057 | r2int: 0.00767921 | r2eff: 0 | hits: 207 ] steps + 79 3259 [sigma: 30.1528 | error: 0.113316 | coeff: 0.113316 | eff: 1 | fom: 3.53996 | r2int: 0.0127548 | r2eff: 0 | hits: 150 ] steps + 80 4636 [sigma: 35.5031 | error: 0.110181 | coeff: 0.110181 | eff: 1 | fom: 3.74421 | r2int: 0.0120813 | r2eff: 0 | hits: 207 ] steps + 81 4111 [sigma: 12.5644 | error: 0.052671 | coeff: 0.052671 | eff: 1 | fom: 16.3845 | r2int: 0.00276489 | r2eff: 0 | hits: 297 ] steps + 82 3873 [sigma: 12.3304 | error: 0.0565944 | coeff: 0.0565944 | eff: 1 | fom: 14.1916 | r2int: 0.00319279 | r2eff: 0 | hits: 316 ] steps + 83 3617 [sigma: 12.6152 | error: 0.0594964 | coeff: 0.0594964 | eff: 1 | fom: 12.8409 | r2int: 0.00352766 | r2eff: 0 | hits: 291 ] steps + 84 3268 [sigma: 23.6062 | error: 0.100611 | coeff: 0.100611 | eff: 1 | fom: 4.49044 | r2int: 0.0100703 | r2eff: 0 | hits: 194 ] steps + 85 4265 [sigma: 24.0417 | error: 0.0862292 | coeff: 0.0862292 | eff: 1 | fom: 6.1132 | r2int: 0.0074037 | r2eff: 0 | hits: 234 ] steps + 86 4107 [sigma: 12.9183 | error: 0.0566178 | coeff: 0.0566178 | eff: 1 | fom: 14.1798 | r2int: 0.00319568 | r2eff: 0 | hits: 324 ] steps + 87 4165 [sigma: 13.507 | error: 0.0586433 | coeff: 0.0586433 | eff: 1 | fom: 13.2172 | r2int: 0.00342852 | r2eff: 0 | hits: 327 ] steps + 88 3984 [sigma: 14.279 | error: 0.0637121 | coeff: 0.0637121 | eff: 1 | fom: 11.1978 | r2int: 0.00404639 | r2eff: 0 | hits: 316 ] steps + 89 3895 [sigma: 30.5488 | error: 0.114735 | coeff: 0.114735 | eff: 1 | fom: 3.45294 | r2int: 0.0131025 | r2eff: 0 | hits: 214 ] steps + 90 3552 [sigma: 21.8973 | error: 0.0874008 | coeff: 0.0874008 | eff: 1 | fom: 5.9504 | r2int: 0.0076009 | r2eff: 0 | hits: 201 ] steps + 91 3784 [sigma: 13.9151 | error: 0.0621898 | coeff: 0.0621898 | eff: 1 | fom: 11.7527 | r2int: 0.00385405 | r2eff: 0 | hits: 286 ] steps + 92 4231 [sigma: 12.5651 | error: 0.0534559 | coeff: 0.0534559 | eff: 1 | fom: 15.9069 | r2int: 0.00284872 | r2eff: 0 | hits: 324 ] steps + 93 3940 [sigma: 12.0773 | error: 0.054662 | coeff: 0.054662 | eff: 1 | fom: 15.2127 | r2int: 0.00297854 | r2eff: 0 | hits: 318 ] steps + 94 4017 [sigma: 21.4926 | error: 0.0816706 | coeff: 0.0816706 | eff: 1 | fom: 6.81468 | r2int: 0.00664146 | r2eff: 0 | hits: 233 ] steps + 95 3055 [sigma: 30.1685 | error: 0.120945 | coeff: 0.120945 | eff: 1 | fom: 3.10742 | r2int: 0.0145302 | r2eff: 0 | hits: 150 ] steps + 96 5471 [sigma: 41.7523 | error: 0.109001 | coeff: 0.109001 | eff: 1 | fom: 3.82578 | r2int: 0.0118229 | r2eff: 0 | hits: 204 ] steps + 97 4372 [sigma: 27.4692 | error: 0.094035 | coeff: 0.094035 | eff: 1 | fom: 5.14042 | r2int: 0.0088031 | r2eff: 0 | hits: 224 ] steps + 98 4194 [sigma: 28.1204 | error: 0.094108 | coeff: 0.094108 | eff: 1 | fom: 5.13245 | r2int: 0.00881135 | r2eff: 0 | hits: 197 ] steps + 99 3157 [sigma: 27.101 | error: 0.107904 | coeff: 0.107904 | eff: 1 | fom: 3.9039 | r2int: 0.0115697 | r2eff: 0 | hits: 158 ] steps + 100 14604 [sigma: 27.4139 | error: 0.0476737 | coeff: 0.0476737 | eff: 1 | fom: 19.9995 | r2int: 0.00226926 | r2eff: 0 | hits: 645 ] steps + 101 20881 [sigma: 35.6456 | error: 0.0474311 | coeff: 0.0474311 | eff: 1 | fom: 20.2046 | r2int: 0.0022468 | r2eff: 0 | hits: 772 ] steps + 102 19068 [sigma: 28.42 | error: 0.042393 | coeff: 0.042393 | eff: 1 | fom: 25.2924 | r2int: 0.00179494 | r2eff: 0 | hits: 809 ] steps + 103 19813 [sigma: 31.0061 | error: 0.0431139 | coeff: 0.0431139 | eff: 1 | fom: 24.4536 | r2int: 0.00185636 | r2eff: 0 | hits: 759 ] steps + 104 14232 [sigma: 28.3468 | error: 0.0496745 | coeff: 0.0496745 | eff: 1 | fom: 18.4209 | r2int: 0.00246359 | r2eff: 0 | hits: 622 ] steps + 105 20021 [sigma: 32.1968 | error: 0.0452574 | coeff: 0.0452574 | eff: 1 | fom: 21.2272 | r2int: 0.00204565 | r2eff: 0 | hits: 792 ] steps + 106 23000 [sigma: 29.164 | error: 0.0389794 | coeff: 0.0389794 | eff: 1 | fom: 28.6155 | r2int: 0.00151779 | r2eff: 0 | hits: 945 ] steps + 107 23663 [sigma: 31.2707 | error: 0.0401485 | coeff: 0.0401485 | eff: 1 | fom: 26.9733 | r2int: 0.00161015 | r2eff: 0 | hits: 923 ] steps + 108 24442 [sigma: 30.1641 | error: 0.0377968 | coeff: 0.0377968 | eff: 1 | fom: 30.4341 | r2int: 0.00142708 | r2eff: 0 | hits: 938 ] steps + 109 17801 [sigma: 29.7257 | error: 0.0445895 | coeff: 0.0445895 | eff: 1 | fom: 21.8678 | r2int: 0.00198544 | r2eff: 0 | hits: 713 ] steps + 110 19311 [sigma: 30.8967 | error: 0.0445121 | coeff: 0.0445121 | eff: 1 | fom: 21.944 | r2int: 0.00197877 | r2eff: 0 | hits: 774 ] steps + 111 23832 [sigma: 29.9666 | error: 0.0392223 | coeff: 0.0392223 | eff: 1 | fom: 28.2622 | r2int: 0.00153681 | r2eff: 0 | hits: 973 ] steps + 112 23975 [sigma: 29.0457 | error: 0.0388247 | coeff: 0.0388247 | eff: 1 | fom: 28.844 | r2int: 0.00150589 | r2eff: 0 | hits: 1027 ] steps + 113 24596 [sigma: 33.2699 | error: 0.0422367 | coeff: 0.0422367 | eff: 1 | fom: 24.3721 | r2int: 0.00178211 | r2eff: 0 | hits: 975 ] steps + 114 17695 [sigma: 34.075 | error: 0.0522071 | coeff: 0.0522071 | eff: 1 | fom: 15.9519 | r2int: 0.00272187 | r2eff: 0 | hits: 735 ] steps + 115 19536 [sigma: 30.3969 | error: 0.0438985 | coeff: 0.0438985 | eff: 1 | fom: 22.5618 | r2int: 0.00192466 | r2eff: 0 | hits: 796 ] steps + 116 22931 [sigma: 31.6003 | error: 0.0420929 | coeff: 0.0420929 | eff: 1 | fom: 24.5388 | r2int: 0.00176991 | r2eff: 0 | hits: 933 ] steps + 117 25088 [sigma: 31.046 | error: 0.0394445 | coeff: 0.0394445 | eff: 1 | fom: 27.9447 | r2int: 0.00155434 | r2eff: 0 | hits: 1016 ] steps + 118 24776 [sigma: 30.4493 | error: 0.0382765 | coeff: 0.0382765 | eff: 1 | fom: 29.6762 | r2int: 0.00146358 | r2eff: 0 | hits: 970 ] steps + 119 17989 [sigma: 29.7099 | error: 0.0451393 | coeff: 0.0451393 | eff: 1 | fom: 21.3385 | r2int: 0.00203483 | r2eff: 0 | hits: 747 ] steps + 120 14358 [sigma: 27.5784 | error: 0.0478268 | coeff: 0.0478268 | eff: 1 | fom: 19.0077 | r2int: 0.00228371 | r2eff: 0 | hits: 620 ] steps + 121 20360 [sigma: 32.6812 | error: 0.0450306 | coeff: 0.0450306 | eff: 1 | fom: 21.4416 | r2int: 0.00202518 | r2eff: 0 | hits: 787 ] steps + 122 20257 [sigma: 31.9228 | error: 0.0446842 | coeff: 0.0446842 | eff: 1 | fom: 20.868 | r2int: 0.00199419 | r2eff: 0 | hits: 804 ] steps + 123 18061 [sigma: 31.2367 | error: 0.0476794 | coeff: 0.0476794 | eff: 1 | fom: 18.3285 | r2int: 0.00227033 | r2eff: 0 | hits: 760 ] steps + 124 14105 [sigma: 30.9104 | error: 0.0536793 | coeff: 0.0536793 | eff: 1 | fom: 14.4602 | r2int: 0.00287667 | r2eff: 0 | hits: 600 ] steps ============================================================ closed file mfd_tl_NumberOfSteps.out for output ============================================================ opened file mfd_tg_NumberOfSteps.out for output ============================================================ - 0 13.000000 steps - 1 58.000000 steps - 2 81.000000 steps + 0 23.000000 steps + 1 49.000000 steps + 2 63.000000 steps 3 41.000000 steps - 4 32.000000 steps - 5 43.000000 steps - 6 52.000000 steps - 7 48.000000 steps - 8 73.000000 steps - 9 28.000000 steps - 10 70.000000 steps - 11 87.000000 steps - 12 33.000000 steps + 4 8.000000 steps + 5 93.000000 steps + 6 54.000000 steps + 7 101.000000 steps + 8 90.000000 steps + 9 91.000000 steps + 10 71.000000 steps + 11 79.000000 steps + 12 55.000000 steps 13 88.000000 steps - 14 112.000000 steps - 15 60.000000 steps - 16 125.000000 steps - 17 80.000000 steps - 18 26.000000 steps - 19 18.000000 steps - 20 76.000000 steps - 21 70.000000 steps - 22 44.000000 steps - 23 20.000000 steps - 24 91.000000 steps - 25 89.000000 steps - 26 242.000000 steps - 27 356.000000 steps - 28 85.000000 steps - 29 120.000000 steps - 30 207.000000 steps - 31 486.000000 steps - 32 360.000000 steps - 33 204.000000 steps - 34 344.000000 steps - 35 185.000000 steps - 36 386.000000 steps - 37 290.000000 steps - 38 418.000000 steps - 39 177.000000 steps - 40 130.000000 steps - 41 272.000000 steps - 42 401.000000 steps - 43 430.000000 steps - 44 131.000000 steps - 45 169.000000 steps - 46 136.000000 steps - 47 128.000000 steps - 48 225.000000 steps - 49 140.000000 steps - 50 600.000000 steps - 51 523.000000 steps - 52 1018.000000 steps - 53 699.000000 steps - 54 667.000000 steps - 55 575.000000 steps - 56 995.000000 steps - 57 1129.000000 steps - 58 1137.000000 steps - 59 806.000000 steps - 60 945.000000 steps - 61 1220.000000 steps - 62 1271.000000 steps - 63 1151.000000 steps - 64 731.000000 steps - 65 519.000000 steps - 66 885.000000 steps - 67 1065.000000 steps - 68 1116.000000 steps - 69 603.000000 steps - 70 536.000000 steps - 71 705.000000 steps - 72 824.000000 steps - 73 637.000000 steps - 74 645.000000 steps - 75 3083.000000 steps - 76 3832.000000 steps - 77 4735.000000 steps - 78 4054.000000 steps - 79 3076.000000 steps - 80 3927.000000 steps - 81 3838.000000 steps - 82 4422.000000 steps - 83 4972.000000 steps - 84 3804.000000 steps - 85 3958.000000 steps - 86 4105.000000 steps - 87 4609.000000 steps - 88 4439.000000 steps - 89 3175.000000 steps - 90 3974.000000 steps - 91 3891.000000 steps - 92 4465.000000 steps - 93 4490.000000 steps - 94 4161.000000 steps - 95 3032.000000 steps - 96 3460.000000 steps - 97 4201.000000 steps - 98 4647.000000 steps - 99 3187.000000 steps - 100 14516.000000 steps - 101 18071.000000 steps - 102 19715.000000 steps - 103 19248.000000 steps - 104 14509.000000 steps - 105 19554.000000 steps - 106 22913.000000 steps - 107 25372.000000 steps - 108 25207.000000 steps - 109 18199.000000 steps - 110 19639.000000 steps - 111 23658.000000 steps - 112 24077.000000 steps - 113 25233.000000 steps - 114 18017.000000 steps - 115 18352.000000 steps - 116 21495.000000 steps - 117 24898.000000 steps - 118 24617.000000 steps - 119 18472.000000 steps - 120 14245.000000 steps - 121 19034.000000 steps - 122 20690.000000 steps - 123 17916.000000 steps - 124 14756.000000 steps + 14 115.000000 steps + 15 80.000000 steps + 16 62.000000 steps + 17 46.000000 steps + 18 74.000000 steps + 19 64.000000 steps + 20 36.000000 steps + 21 7.000000 steps + 22 32.000000 steps + 23 33.000000 steps + 24 6.000000 steps + 25 137.000000 steps + 26 148.000000 steps + 27 137.000000 steps + 28 50.000000 steps + 29 118.000000 steps + 30 49.000000 steps + 31 252.000000 steps + 32 234.000000 steps + 33 295.000000 steps + 34 74.000000 steps + 35 206.000000 steps + 36 299.000000 steps + 37 415.000000 steps + 38 468.000000 steps + 39 249.000000 steps + 40 101.000000 steps + 41 199.000000 steps + 42 350.000000 steps + 43 375.000000 steps + 44 206.000000 steps + 45 35.000000 steps + 46 90.000000 steps + 47 95.000000 steps + 48 186.000000 steps + 49 104.000000 steps + 50 429.000000 steps + 51 464.000000 steps + 52 423.000000 steps + 53 428.000000 steps + 54 343.000000 steps + 55 471.000000 steps + 56 1048.000000 steps + 57 964.000000 steps + 58 630.000000 steps + 59 557.000000 steps + 60 562.000000 steps + 61 910.000000 steps + 62 989.000000 steps + 63 1344.000000 steps + 64 601.000000 steps + 65 433.000000 steps + 66 842.000000 steps + 67 1097.000000 steps + 68 1011.000000 steps + 69 467.000000 steps + 70 273.000000 steps + 71 539.000000 steps + 72 455.000000 steps + 73 354.000000 steps + 74 413.000000 steps + 75 3038.000000 steps + 76 4065.000000 steps + 77 3866.000000 steps + 78 4313.000000 steps + 79 3259.000000 steps + 80 4636.000000 steps + 81 4111.000000 steps + 82 3873.000000 steps + 83 3617.000000 steps + 84 3268.000000 steps + 85 4265.000000 steps + 86 4107.000000 steps + 87 4165.000000 steps + 88 3984.000000 steps + 89 3895.000000 steps + 90 3552.000000 steps + 91 3784.000000 steps + 92 4231.000000 steps + 93 3940.000000 steps + 94 4017.000000 steps + 95 3055.000000 steps + 96 5471.000000 steps + 97 4372.000000 steps + 98 4194.000000 steps + 99 3157.000000 steps + 100 14604.000000 steps + 101 20881.000000 steps + 102 19068.000000 steps + 103 19813.000000 steps + 104 14232.000000 steps + 105 20021.000000 steps + 106 23000.000000 steps + 107 23663.000000 steps + 108 24442.000000 steps + 109 17801.000000 steps + 110 19311.000000 steps + 111 23832.000000 steps + 112 23975.000000 steps + 113 24596.000000 steps + 114 17695.000000 steps + 115 19536.000000 steps + 116 22931.000000 steps + 117 25088.000000 steps + 118 24776.000000 steps + 119 17989.000000 steps + 120 14358.000000 steps + 121 20360.000000 steps + 122 20257.000000 steps + 123 18061.000000 steps + 124 14105.000000 steps ============================================================ closed file mfd_tg_NumberOfSteps.out for output ============================================================ @@ -1812,5 +1819,5 @@ Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== Number of memory pools allocated: 14 of which, static: 0 -Dynamic pools deleted: 14 / Total memory freed: 0.1 MB +Dynamic pools deleted: 14 / Total memory freed: 0.098 MB ============================================================ diff --git a/examples/extended/parameterisations/Par01/examplePar01.out b/examples/extended/parameterisations/Par01/examplePar01.out index 1879e68b60c..dfedc10ac61 100644 --- a/examples/extended/parameterisations/Par01/examplePar01.out +++ b/examples/extended/parameterisations/Par01/examplePar01.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -67,7 +67,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -217,7 +219,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -249,7 +251,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -281,7 +283,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -294,7 +296,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -340,7 +341,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -372,7 +373,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -404,7 +405,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -436,7 +437,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -468,7 +469,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -500,7 +501,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -532,7 +533,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -917,12 +918,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/parameterisations/Par02/examplePar02.out b/examples/extended/parameterisations/Par02/examplePar02.out index c275b0a9abb..33734ff63cd 100644 --- a/examples/extended/parameterisations/Par02/examplePar02.out +++ b/examples/extended/parameterisations/Par02/examplePar02.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -29,6 +29,10 @@ G4GDML: Reading 'Par02FullDetector.gdml' done! Stripping off GDML names of materials, solids and volumes ... Geometry loaded from file .......Par02FullDetector.gdml +hcal !!! + +hcal !!! + ecal !!! tracker !!! @@ -45,10 +49,6 @@ hcal !!! hcal !!! -hcal !!! - -hcal !!! - hcal !!! Instantiating Visualization Manager....... Visualization Manager instantiating with verbosity "warnings (3)"... @@ -75,7 +75,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -108,6 +110,7 @@ End of Run User Vis Actions: none Some /vis commands (optionally) take a string to specify colour. "/vis/list" to see available colours. + G4ChordFinder: stepperDriverId: 2 Magnetic field is active, fieldValue = (0 0 1 T ). G4VisManager: Using G4TrajectoryDrawByCharge as fallback trajectory model. See commands in /vis/modeling/trajectories/ for other options. diff --git a/examples/extended/parameterisations/Par03/Par03.out b/examples/extended/parameterisations/Par03/Par03.out index fcb1d96e13c..8e6fcd5a904 100644 --- a/examples/extended/parameterisations/Par03/Par03.out +++ b/examples/extended/parameterisations/Par03/Par03.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -491,12 +493,21 @@ Checking overlaps for volume Detector:99 (G4Tubs) ... OK! ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/parameterisations/Par04/examplePar04.out b/examples/extended/parameterisations/Par04/examplePar04.out index 090a79983c7..9f0fb6d7e1a 100644 --- a/examples/extended/parameterisations/Par04/examplePar04.out +++ b/examples/extended/parameterisations/Par04/examplePar04.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -664,12 +666,21 @@ Model inferenceModel not found. ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/parameterisations/gflash/History b/examples/extended/parameterisations/gflash/History index 42c45928118..cd837f1bcd4 100644 --- a/examples/extended/parameterisations/gflash/History +++ b/examples/extended/parameterisations/gflash/History @@ -4,6 +4,17 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-06-13 I. Semeniouk (exgflash-V11-01-01) +- gflash1,2,3,a - replaces static with inline static and moveinitialization into .hh files +- gflasha - Use G4PhysListFactory for physics list initialization +- gflash2 - remove unused statics from Detector Construction class +- Update History and gflasha README files + +## 2023-04-19 I. Semeniouk (exgflash-V11-01-00) +- gflash1,2,3,a clang-tidy and clang format +- gflasha add cmpE.C macro +- gfalsh1,2,3 comment /run/beamOn commands +- Add History entry ## 2022-11-04 I. Hrivnacova (exgflash-V11-00-01) - Fixed Doxygen file descriptions in glash2 and gflash3 @@ -15,7 +26,7 @@ be used as a substitute for writing good git commit messages! # History entries prior to 11.0 -18-Oct-2021 I. Semeniouk (exgflash-V10-07-02) +18-Oct-2021 - clang-tidy and clang-format on code - remove local History file and power-off.png - test.mac run twice with and without gflash diff --git a/examples/extended/parameterisations/gflash/gflash1/ExGflash1.cc b/examples/extended/parameterisations/gflash/gflash1/ExGflash1.cc index 6efdd3b809a..039b9b55425 100644 --- a/examples/extended/parameterisations/gflash/gflash1/ExGflash1.cc +++ b/examples/extended/parameterisations/gflash/gflash1/ExGflash1.cc @@ -30,30 +30,28 @@ // Created by Joanna Weng 26.11.2004 // G4 includes -#include "G4Types.hh" -#include "G4ios.hh" +#include "G4RunManagerFactory.hh" #include "G4Timer.hh" +#include "G4Types.hh" #include "G4UImanager.hh" - -#include "G4RunManagerFactory.hh" +#include "G4ios.hh" // my project #include "ExGflash1DetectorConstruction.hh" #include "ExGflashActionInitialization.hh" - #include "FTFP_BERT.hh" -#include "G4FastSimulationPhysics.hh" -#include "G4VisExecutive.hh" +#include "G4FastSimulationPhysics.hh" #include "G4UIExecutive.hh" +#include "G4VisExecutive.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -int main(int argc,char** argv) +int main(int argc, char** argv) { // Instantiate G4UIExecutive if interactive mode G4UIExecutive* ui = nullptr; - if ( argc == 1 ) { + if (argc == 1) { ui = new G4UIExecutive(argc, argv); } @@ -61,17 +59,17 @@ int main(int argc,char** argv) G4Timer timer; timer.Start(); - G4cout<<"+-------------------------------------------------------+"<SetNumberOfThreads(1); // UserInitialization classes (mandatory) - G4cout<<"# GFlash Example: Detector Construction"<SetUserInitialization(new ExGflash1DetectorConstruction); // G4cout<<"# GFlash Example: Physics "<RegisterPhysics( fastSimulationPhysics ); + physicsList->RegisterPhysics(fastSimulationPhysics); runManager->SetUserInitialization(physicsList); // Action initialization: @@ -106,16 +104,16 @@ int main(int argc,char** argv) runManager->Initialize(); UImanager->ApplyCommand("/Step/Verbose 0"); - if (ui) // Define UI terminal for interactive mode + if (ui) // Define UI terminal for interactive mode { UImanager->ApplyCommand("/control/execute vis.mac"); ui->SessionStart(); delete ui; } - else // Batch mode + else // Batch mode { - G4String s=*(argv+1); - UImanager->ApplyCommand("/control/execute "+s); + G4String s = *(argv + 1); + UImanager->ApplyCommand("/control/execute " + s); } delete visManager; @@ -125,7 +123,7 @@ int main(int argc,char** argv) G4cout << G4endl; G4cout << "******************************************"; G4cout << G4endl; - G4cout << "Total Real Elapsed Time is: "<< timer.GetRealElapsed(); + G4cout << "Total Real Elapsed Time is: " << timer.GetRealElapsed(); G4cout << G4endl; G4cout << "Total System Elapsed Time: " << timer.GetSystemElapsed(); G4cout << G4endl; diff --git a/examples/extended/parameterisations/gflash/gflash1/include/ExGflash1DetectorConstruction.hh b/examples/extended/parameterisations/gflash/gflash1/include/ExGflash1DetectorConstruction.hh index c1b3a4780e9..7a143cfd850 100644 --- a/examples/extended/parameterisations/gflash/gflash1/include/ExGflash1DetectorConstruction.hh +++ b/examples/extended/parameterisations/gflash/gflash1/include/ExGflash1DetectorConstruction.hh @@ -44,47 +44,24 @@ class GFlashParticleBounds; class ExGflash1DetectorConstruction : public G4VUserDetectorConstruction { -public: - ExGflash1DetectorConstruction(); - ~ExGflash1DetectorConstruction(); - - virtual G4VPhysicalVolume* Construct(); - virtual void ConstructSDandField(); - - - const G4VPhysicalVolume* GetCristal(int aNumCrystal) - {return fCrystalPhys[aNumCrystal];}; - - -private: - G4LogicalVolume* fCrystalLog; - G4VPhysicalVolume* fCrystalPhys[100]; - G4Region* fRegion; - - static G4ThreadLocal GFlashShowerModel* fFastShowerModel; - static G4ThreadLocal GFlashHomoShowerParameterisation* fParameterisation; - static G4ThreadLocal GFlashParticleBounds* fParticleBounds; - static G4ThreadLocal GFlashHitMaker* fHitMaker; -}; - -#endif - - - - - - - - - - - - - - - + public: + ExGflash1DetectorConstruction(); + ~ExGflash1DetectorConstruction() override; + G4VPhysicalVolume* Construct() override; + void ConstructSDandField() override; + const G4VPhysicalVolume* GetCristal(int aNumCrystal) { return fCrystalPhys[aNumCrystal]; }; + private: + G4LogicalVolume* fCrystalLog{nullptr}; + G4VPhysicalVolume* fCrystalPhys[100]{}; + G4Region* fRegion{nullptr}; + inline static G4ThreadLocal GFlashShowerModel* fFastShowerModel = nullptr; + inline static G4ThreadLocal GFlashHomoShowerParameterisation* fParameterisation = nullptr; + inline static G4ThreadLocal GFlashParticleBounds* fParticleBounds = nullptr; + inline static G4ThreadLocal GFlashHitMaker* fHitMaker = nullptr; +}; +#endif diff --git a/examples/extended/parameterisations/gflash/gflash1/include/ExGflash1SensitiveDetector.hh b/examples/extended/parameterisations/gflash/gflash1/include/ExGflash1SensitiveDetector.hh index 218be63db5c..451e434f712 100644 --- a/examples/extended/parameterisations/gflash/gflash1/include/ExGflash1SensitiveDetector.hh +++ b/examples/extended/parameterisations/gflash/gflash1/include/ExGflash1SensitiveDetector.hh @@ -30,9 +30,10 @@ #ifndef EXGFLASH1SENSITIVEDETECTOR_H #define EXGFLASH1SENSITIVEDETECTOR_H -#include "G4VSensitiveDetector.hh" -#include "G4VGFlashSensitiveDetector.hh" #include "ExGflashHitsCollection.hh" + +#include "G4VGFlashSensitiveDetector.hh" +#include "G4VSensitiveDetector.hh" #include "globals.hh" class G4GFlashSpot; @@ -42,21 +43,21 @@ class G4Step; class G4HCofThisEvent; class G4TouchableHistory; -class ExGflash1SensitiveDetector: public G4VSensitiveDetector, - public G4VGFlashSensitiveDetector { -public: - ExGflash1SensitiveDetector(G4String, ExGflash1DetectorConstruction* det); - ~ExGflash1SensitiveDetector(); - - virtual void Initialize(G4HCofThisEvent*); - virtual G4bool ProcessHits(G4Step*,G4TouchableHistory*); - virtual G4bool ProcessHits(G4GFlashSpot*aSpot,G4TouchableHistory*); - virtual void EndOfEvent(G4HCofThisEvent*); - -private: - ExGflashHitsCollection* fCaloHitsCollection; - ExGflash1DetectorConstruction* fDetector; - G4int fHCID; +class ExGflash1SensitiveDetector : public G4VSensitiveDetector, public G4VGFlashSensitiveDetector +{ + public: + ExGflash1SensitiveDetector(G4String, ExGflash1DetectorConstruction* det); + ~ExGflash1SensitiveDetector() override; + + void Initialize(G4HCofThisEvent*) override; + G4bool ProcessHits(G4Step*, G4TouchableHistory*) override; + G4bool ProcessHits(G4GFlashSpot* aSpot, G4TouchableHistory*) override; + void EndOfEvent(G4HCofThisEvent*) override; + + private: + ExGflashHitsCollection* fCaloHitsCollection; + ExGflash1DetectorConstruction* fDetector; + G4int fHCID{-1}; }; #endif diff --git a/examples/extended/parameterisations/gflash/gflash1/include/ExGflashActionInitialization.hh b/examples/extended/parameterisations/gflash/gflash1/include/ExGflashActionInitialization.hh index 9c87e2f46da..8279ae5bc09 100644 --- a/examples/extended/parameterisations/gflash/gflash1/include/ExGflashActionInitialization.hh +++ b/examples/extended/parameterisations/gflash/gflash1/include/ExGflashActionInitialization.hh @@ -39,12 +39,10 @@ class ExGflashActionInitialization : public G4VUserActionInitialization { public: ExGflashActionInitialization(); - virtual ~ExGflashActionInitialization(); + ~ExGflashActionInitialization() override; - virtual void BuildForMaster() const; - virtual void Build() const; + void BuildForMaster() const override; + void Build() const override; }; #endif - - diff --git a/examples/extended/parameterisations/gflash/gflash1/include/ExGflashEventAction.hh b/examples/extended/parameterisations/gflash/gflash1/include/ExGflashEventAction.hh index 7d193460b43..733b010baed 100644 --- a/examples/extended/parameterisations/gflash/gflash1/include/ExGflashEventAction.hh +++ b/examples/extended/parameterisations/gflash/gflash1/include/ExGflashEventAction.hh @@ -30,22 +30,23 @@ #ifndef ExGflashEventAction_h #define ExGflashEventAction_h -#include "G4UserEventAction.hh" #include "G4Timer.hh" +#include "G4UserEventAction.hh" #include "globals.hh" -class ExGflashEventAction: public G4UserEventAction { -public: - ExGflashEventAction(); - ~ExGflashEventAction(); - - virtual void BeginOfEventAction(const G4Event*); - virtual void EndOfEventAction(const G4Event*); - -private: - G4int fNevent; - G4double fDtime; - G4int fCalorimeterCollectionId; - G4Timer fTimerIntern; +class ExGflashEventAction : public G4UserEventAction +{ + public: + ExGflashEventAction(); + ~ExGflashEventAction() override; + + void BeginOfEventAction(const G4Event*) override; + void EndOfEventAction(const G4Event*) override; + + private: + G4int fNevent{0}; + G4double fDtime{0.0}; + G4int fCalorimeterCollectionId{-1}; + G4Timer fTimerIntern; }; #endif diff --git a/examples/extended/parameterisations/gflash/gflash1/include/ExGflashHit.hh b/examples/extended/parameterisations/gflash/gflash1/include/ExGflashHit.hh index 8f1950f60c9..295d103b7e3 100644 --- a/examples/extended/parameterisations/gflash/gflash1/include/ExGflashHit.hh +++ b/examples/extended/parameterisations/gflash/gflash1/include/ExGflashHit.hh @@ -29,90 +29,72 @@ // #ifndef ExGflashHit_h #define ExGflashHit_h 1 - -#include "G4VHit.hh" -#include "G4THitsCollection.hh" + #include "G4Allocator.hh" -#include "G4ThreeVector.hh" #include "G4RotationMatrix.hh" +#include "G4THitsCollection.hh" +#include "G4ThreeVector.hh" +#include "G4VHit.hh" class G4LogicalVolume; class ExGflashHit : public G4VHit { public: - - ExGflashHit(); - ExGflashHit(G4LogicalVolume* logVol); - ~ExGflashHit(); - ExGflashHit(const ExGflashHit &right); - const ExGflashHit& operator=(const ExGflashHit &right); - G4bool operator==(const ExGflashHit &right) const; - - inline void *operator new(size_t); - inline void operator delete(void *aHit); - void *operator new(size_t,void*p){return p;} + ExGflashHit(); + ExGflashHit(G4LogicalVolume* logVol); + ~ExGflashHit() override; + ExGflashHit(const ExGflashHit& right); + const ExGflashHit& operator=(const ExGflashHit& right); + G4bool operator==(const ExGflashHit& right) const; + + inline void* operator new(size_t); + inline void operator delete(void* aHit); + void* operator new(size_t, void* p) { return p; } #ifndef G4NOT_ISO_DELETES - void operator delete(void *,void*){} + void operator delete(void*, void*) {} #endif - virtual void Draw(); - virtual void Print(); + void Draw() override; + void Print() override; private: - G4double fEdep; - G4ThreeVector fPos; - G4int fCrystalNumber; - G4ThreeVector fStart; - G4RotationMatrix fRot; - const G4LogicalVolume* fLogV; + G4double fEdep; + G4ThreeVector fPos; + G4int fCrystalNumber; + G4ThreeVector fStart; + G4RotationMatrix fRot; + const G4LogicalVolume* fLogV; public: - inline void SetEdep(G4double de) - { fEdep = de; }; - inline void AddEdep(G4double de) - { fEdep += de; }; - inline G4double GetEdep() - { return fEdep; }; - inline void SetPos(G4ThreeVector xyz) - { fPos = xyz; }; - inline G4int GetCrystalNum() - { return fCrystalNumber; }; - inline void SetCrystalNum(G4int num) - { fCrystalNumber=num; }; - inline G4ThreeVector GetPos() - { return fPos; }; - inline void SetStart(G4ThreeVector xyz) - { fStart = xyz; }; - inline G4ThreeVector GetStart() - { return fStart; }; - - inline void SetRot(G4RotationMatrix rmat) - { fRot = rmat; }; - inline G4RotationMatrix GetRot() - { return fRot; }; - inline const G4LogicalVolume * GetLogV() - { return fLogV; }; + inline void SetEdep(G4double de) { fEdep = de; }; + inline void AddEdep(G4double de) { fEdep += de; }; + inline G4double GetEdep() { return fEdep; }; + inline void SetPos(G4ThreeVector xyz) { fPos = xyz; }; + inline G4int GetCrystalNum() { return fCrystalNumber; }; + inline void SetCrystalNum(G4int num) { fCrystalNumber = num; }; + inline G4ThreeVector GetPos() { return fPos; }; + inline void SetStart(G4ThreeVector xyz) { fStart = xyz; }; + inline G4ThreeVector GetStart() { return fStart; }; + + inline void SetRot(G4RotationMatrix rmat) { fRot = rmat; }; + inline G4RotationMatrix GetRot() { return fRot; }; + inline const G4LogicalVolume* GetLogV() { return fLogV; }; }; -typedef G4THitsCollection ExGflashHitsCollection; +using ExGflashHitsCollection = G4THitsCollection; extern G4ThreadLocal G4Allocator* ExGflashHitAllocator; inline void* ExGflashHit::operator new(size_t) { - if(!ExGflashHitAllocator) ExGflashHitAllocator = new G4Allocator; - return (void *) ExGflashHitAllocator->MallocSingle(); + if (!ExGflashHitAllocator) ExGflashHitAllocator = new G4Allocator; + return (void*)ExGflashHitAllocator->MallocSingle(); } -inline void ExGflashHit::operator delete(void *aHit) +inline void ExGflashHit::operator delete(void* aHit) { - ExGflashHitAllocator->FreeSingle((ExGflashHit*) aHit); + ExGflashHitAllocator->FreeSingle((ExGflashHit*)aHit); } #endif - - - - - diff --git a/examples/extended/parameterisations/gflash/gflash1/include/ExGflashHitsCollection.hh b/examples/extended/parameterisations/gflash/gflash1/include/ExGflashHitsCollection.hh index b95fca20d73..51003c462f7 100644 --- a/examples/extended/parameterisations/gflash/gflash1/include/ExGflashHitsCollection.hh +++ b/examples/extended/parameterisations/gflash/gflash1/include/ExGflashHitsCollection.hh @@ -31,5 +31,5 @@ #define ExGflashHitsCollection_h #include "G4THitsCollection.hh" class ExGflashHit; -typedef G4THitsCollection ExGflashHitsCollection; +using ExGflashHitsCollection = G4THitsCollection; #endif diff --git a/examples/extended/parameterisations/gflash/gflash1/include/ExGflashPrimaryGeneratorAction.hh b/examples/extended/parameterisations/gflash/gflash1/include/ExGflashPrimaryGeneratorAction.hh index 33e5eeaab41..4f4a2cd17f5 100644 --- a/examples/extended/parameterisations/gflash/gflash1/include/ExGflashPrimaryGeneratorAction.hh +++ b/examples/extended/parameterisations/gflash/gflash1/include/ExGflashPrimaryGeneratorAction.hh @@ -35,18 +35,16 @@ class G4Event; class G4GeneralParticleSource; -class ExGflashPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction +class ExGflashPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: ExGflashPrimaryGeneratorAction(); - ~ExGflashPrimaryGeneratorAction(); + ~ExGflashPrimaryGeneratorAction() override; - virtual void GeneratePrimaries(G4Event* anEvent); + void GeneratePrimaries(G4Event* anEvent) override; private: - G4GeneralParticleSource* fParticleGun; + G4GeneralParticleSource* fParticleGun{nullptr}; }; #endif - - diff --git a/examples/extended/parameterisations/gflash/gflash1/include/ExGflashRunAction.hh b/examples/extended/parameterisations/gflash/gflash1/include/ExGflashRunAction.hh index c9a91e79105..1188e8cfd52 100644 --- a/examples/extended/parameterisations/gflash/gflash1/include/ExGflashRunAction.hh +++ b/examples/extended/parameterisations/gflash/gflash1/include/ExGflashRunAction.hh @@ -37,15 +37,15 @@ class G4Run; class ExGflashRunAction : public G4UserRunAction { -public: - ExGflashRunAction(); - ~ExGflashRunAction(); + public: + ExGflashRunAction(); + ~ExGflashRunAction() override; - virtual void BeginOfRunAction(const G4Run* aRun); - virtual void EndOfRunAction(const G4Run* aRun); + void BeginOfRunAction(const G4Run* aRun) override; + void EndOfRunAction(const G4Run* aRun) override; -private: - G4int fRunID; + private: + G4int fRunID{0}; }; #endif diff --git a/examples/extended/parameterisations/gflash/gflash1/src/ExGflash1DetectorConstruction.cc b/examples/extended/parameterisations/gflash/gflash1/src/ExGflash1DetectorConstruction.cc index 7f27125592d..af3fabbf0af 100644 --- a/examples/extended/parameterisations/gflash/gflash1/src/ExGflash1DetectorConstruction.cc +++ b/examples/extended/parameterisations/gflash/gflash1/src/ExGflash1DetectorConstruction.cc @@ -34,51 +34,44 @@ // User Classes #include "ExGflash1DetectorConstruction.hh" + #include "ExGflash1SensitiveDetector.hh" // G4 Classes -#include "G4NistManager.hh" +#include "G4AutoDelete.hh" +#include "G4Box.hh" +#include "G4Colour.hh" +#include "G4LogicalVolume.hh" #include "G4Material.hh" -#include "G4ThreeVector.hh" +#include "G4NistManager.hh" #include "G4PVPlacement.hh" -#include "G4VPhysicalVolume.hh" -#include "G4LogicalVolume.hh" -#include "G4Box.hh" #include "G4SDManager.hh" -#include "G4VisAttributes.hh" -#include "G4Colour.hh" #include "G4SystemOfUnits.hh" -#include "G4AutoDelete.hh" +#include "G4ThreeVector.hh" +#include "G4VPhysicalVolume.hh" +#include "G4VisAttributes.hh" #include "globals.hh" -//fast simulation -#include "GFlashHomoShowerParameterisation.hh" -#include "G4FastSimulationManager.hh" -#include "GFlashShowerModel.hh" +// fast simulation #include "GFlashHitMaker.hh" +#include "GFlashHomoShowerParameterisation.hh" #include "GFlashParticleBounds.hh" +#include "GFlashShowerModel.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4ThreadLocal GFlashShowerModel* ExGflash1DetectorConstruction::fFastShowerModel = 0; -G4ThreadLocal -GFlashHomoShowerParameterisation* ExGflash1DetectorConstruction::fParameterisation = 0; -G4ThreadLocal GFlashParticleBounds* ExGflash1DetectorConstruction::fParticleBounds = 0; -G4ThreadLocal GFlashHitMaker* ExGflash1DetectorConstruction::fHitMaker = 0; +#include "G4FastSimulationManager.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ExGflash1DetectorConstruction::ExGflash1DetectorConstruction() - :G4VUserDetectorConstruction(), fCrystalLog(nullptr), fCrystalPhys{}, fRegion(nullptr) { - G4cout<<"ExGflash1DetectorConstruction::Detector constructor"<FindOrBuildMaterial("G4_AIR"); + G4Material* air = nistManager->FindOrBuildMaterial("G4_AIR"); G4Material* pbWO4 = nistManager->FindOrBuildMaterial("G4_PbWO4"); - + /******************************* * The Experimental Hall * *******************************/ - G4double experimentalHall_x=1000.*cm; - G4double experimentalHall_y=1000.*cm; - G4double experimentalHall_z=1000.*cm; - - G4VSolid* experimentalHall_box - = new G4Box("expHall_box", // World Volume - experimentalHall_x, // x size - experimentalHall_y, // y size - experimentalHall_z); // z size - - G4LogicalVolume* experimentalHallLog - = new G4LogicalVolume(experimentalHall_box, - air, - "expHallLog", - 0, //opt: fieldManager - 0, //opt: SensitiveDetector - 0); //opt: UserLimits - G4VPhysicalVolume* experimentalHallPhys - = new G4PVPlacement(0, - G4ThreeVector(), //at (0,0,0) - "expHall", - experimentalHallLog, - 0, - false, - 0); - - - //------------------------------ + G4double experimentalHall_x = 1000. * cm; + G4double experimentalHall_y = 1000. * cm; + G4double experimentalHall_z = 1000. * cm; + + G4VSolid* experimentalHall_box = new G4Box("expHall_box", // World Volume + experimentalHall_x, // x size + experimentalHall_y, // y size + experimentalHall_z); // z size + + auto experimentalHallLog = new G4LogicalVolume(experimentalHall_box, air, "expHallLog", + nullptr, // opt: fieldManager + nullptr, // opt: SensitiveDetector + nullptr); // opt: UserLimits + G4VPhysicalVolume* experimentalHallPhys = + new G4PVPlacement(nullptr, + G4ThreeVector(), // at (0,0,0) + "expHall", experimentalHallLog, nullptr, false, 0); + + //------------------------------ // Calorimeter segments //------------------------------ - // Simplified `CMS-like` PbWO4 crystal calorimeter - - G4int nbOfCrystals = 10; // this are the crystals PER ROW in this example - // cube of 10 x 10 crystals - // don't change it @the moment, since - // the readout in event action assumes this - // dimensions and is not automatically adapted - // in this version of the example :-( - // Simplified `CMS-like` PbWO4 crystal calorimeter - G4double calo_xside = 31*cm; - G4double calo_yside = 31*cm; - G4double calo_zside = 24*cm; + // Simplified `CMS-like` PbWO4 crystal calorimeter + + G4int nbOfCrystals = 10; // this are the crystals PER ROW in this example + // cube of 10 x 10 crystals + // don't change it @the moment, since + // the readout in event action assumes this + // dimensions and is not automatically adapted + // in this version of the example :-( + // Simplified `CMS-like` PbWO4 crystal calorimeter + G4double calo_xside = 31 * cm; + G4double calo_yside = 31 * cm; + G4double calo_zside = 24 * cm; + + G4double crystalWidth = 3 * cm; + G4double crystalLength = 24 * cm; + + calo_xside = (crystalWidth * nbOfCrystals) + 1 * cm; + calo_yside = (crystalWidth * nbOfCrystals) + 1 * cm; + calo_zside = crystalLength; - G4double crystalWidth = 3*cm; - G4double crystalLength = 24*cm; + auto calo_box = new G4Box("CMS calorimeter", // its name + calo_xside / 2., // size + calo_yside / 2., calo_zside / 2.); + auto caloLog = new G4LogicalVolume(calo_box, // its solid + air, // its material + "calo log", // its name + nullptr, // opt: fieldManager + nullptr, // opt: SensitiveDetector + nullptr); // opt: UserLimit - calo_xside = (crystalWidth*nbOfCrystals)+1*cm; - calo_yside = (crystalWidth*nbOfCrystals)+1*cm; - calo_zside = crystalLength; - - G4Box* calo_box= new G4Box("CMS calorimeter", // its name - calo_xside/2., // size - calo_yside/2., - calo_zside/2.); - G4LogicalVolume* caloLog - = new G4LogicalVolume(calo_box, // its solid - air, // its material - "calo log", // its name - 0, // opt: fieldManager - 0, // opt: SensitiveDetector - 0); // opt: UserLimit - G4double xpos = 0.0; G4double ypos = 0.0; - G4double zpos = 100.0*cm; - new G4PVPlacement(0, - G4ThreeVector(xpos, ypos, zpos), - caloLog, - "calorimeter", - experimentalHallLog, - false, - 1); - + G4double zpos = 100.0 * cm; + new G4PVPlacement(nullptr, G4ThreeVector(xpos, ypos, zpos), caloLog, "calorimeter", + experimentalHallLog, false, 1); + // Crystals - G4VSolid* crystal_box - = new G4Box("Crystal", // its name - crystalWidth/2, - crystalWidth/2, - crystalLength/2); - // size - fCrystalLog - = new G4LogicalVolume(crystal_box, // its solid - pbWO4, // its material - "CrystalLog"); // its name - - for (G4int i=0; iSetVisAttributes(G4VisAttributes::GetInvisible()); - G4VisAttributes* caloVisAtt = new G4VisAttributes(G4Colour(1.0,1.0,1.0)); - G4VisAttributes* crystalVisAtt = new G4VisAttributes(G4Colour(1.0,1.0,0.0)); + auto caloVisAtt = new G4VisAttributes(G4Colour(1.0, 1.0, 1.0)); + auto crystalVisAtt = new G4VisAttributes(G4Colour(1.0, 1.0, 0.0)); caloLog->SetVisAttributes(caloVisAtt); fCrystalLog->SetVisAttributes(crystalVisAtt); @@ -220,7 +183,7 @@ G4VPhysicalVolume* ExGflash1DetectorConstruction::Construct() fRegion = new G4Region("crystals"); caloLog->SetRegion(fRegion); fRegion->AddRootLogicalVolume(caloLog); - + return experimentalHallPhys; } @@ -230,14 +193,13 @@ void ExGflash1DetectorConstruction::ConstructSDandField() { // -- sensitive detectors: G4SDManager* SDman = G4SDManager::GetSDMpointer(); - ExGflash1SensitiveDetector* CaloSD - = new ExGflash1SensitiveDetector("Calorimeter",this); + auto CaloSD = new ExGflash1SensitiveDetector("Calorimeter", this); SDman->AddNewDetector(CaloSD); fCrystalLog->SetSensitiveDetector(CaloSD); - + // Get nist material manager G4NistManager* nistManager = G4NistManager::Instance(); - G4Material* pbWO4 = nistManager->FindOrBuildMaterial("G4_PbWO4"); + G4Material* pbWO4 = nistManager->FindOrBuildMaterial("G4_PbWO4"); // -- fast simulation models: // ********************************************** // * Initializing shower modell @@ -252,7 +214,7 @@ void ExGflash1DetectorConstruction::ConstructSDandField() // Makes the EnergieSpots fHitMaker = new GFlashHitMaker(); fFastShowerModel->SetHitMaker(*fHitMaker); - G4cout<<"end shower parameterization."<AddHitsCollection( fHCID, fCaloHitsCollection ); + if (fHCID < 0) { + fHCID = GetCollectionID(0); + } + fCaloHitsCollection = + new ExGflashHitsCollection(SensitiveDetectorName, collectionName[0]); // first collection + HCE->AddHitsCollection(fHCID, fCaloHitsCollection); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void ExGflash1SensitiveDetector::EndOfEvent(G4HCofThisEvent*) -{} +void ExGflash1SensitiveDetector::EndOfEvent(G4HCofThisEvent*) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool ExGflash1SensitiveDetector::ProcessHits(G4Step* aStep,G4TouchableHistory* ROhist) +G4bool ExGflash1SensitiveDetector::ProcessHits(G4Step* aStep, G4TouchableHistory* ROhist) { - G4double e=aStep->GetTotalEnergyDeposit(); - if(e<=0.)return false; - - G4TouchableHistory* theTouchable - = (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable()); - + G4double e = aStep->GetTotalEnergyDeposit(); + if (e <= 0.) return false; + + auto theTouchable = (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable()); + // enrgy deposited -> make Hit - //const G4VPhysicalVolume* physVol= aStep->GetPreStepPoint()->GetPhysicalVolume(); - //G4TouchableHistory* theTouchable = + // const G4VPhysicalVolume* physVol= aStep->GetPreStepPoint()->GetPhysicalVolume(); + // G4TouchableHistory* theTouchable = // (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable()); - ExGflashHit* caloHit=new ExGflashHit(); + auto caloHit = new ExGflashHit(); caloHit->SetEdep(e); caloHit->SetPos(aStep->GetPreStepPoint()->GetPosition()); fCaloHitsCollection->insert(caloHit); - if (ROhist){;} + if (ROhist) { + ; + } G4VPhysicalVolume* physVol = theTouchable->GetVolume(); - G4int crystalnum=0; - for(int i=0;i<100;i++) //@@@@@@@ ExGflashSensitiveDetector:vorsichty - { - if(physVol == fDetector->GetCristal(i)) crystalnum= i; - } + G4int crystalnum = 0; + for (int i = 0; i < 100; i++) //@@@@@@@ ExGflashSensitiveDetector:vorsichty + { + if (physVol == fDetector->GetCristal(i)) crystalnum = i; + } caloHit->SetCrystalNum(crystalnum); - + return true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // Separate GFLASH interface -G4bool ExGflash1SensitiveDetector::ProcessHits(G4GFlashSpot*aSpot ,G4TouchableHistory* ROhist) -{ //cout<<"This is ProcessHits GFLASH"<GetEnergySpot()->GetEnergy(); - if(e<=0.)return false; - +G4bool ExGflash1SensitiveDetector::ProcessHits(G4GFlashSpot* aSpot, G4TouchableHistory* ROhist) +{ // cout<<"This is ProcessHits GFLASH"<GetEnergySpot()->GetEnergy(); + if (e <= 0.) return false; + G4VPhysicalVolume* pCurrentVolume = aSpot->GetTouchableHandle()->GetVolume(); - - ExGflashHit* caloHit=new ExGflashHit(); + + auto caloHit = new ExGflashHit(); caloHit->SetEdep(e); caloHit->SetPos(aSpot->GetEnergySpot()->GetPosition()); fCaloHitsCollection->insert(caloHit); - if (ROhist){;} - //cout <GetName() << endl; - G4int crystalnum=0; - for(int i=0;i<100;i++) //@@@@@@@ ExGflashSensitiveDetector:vorsichty - { - if(pCurrentVolume == fDetector->GetCristal(i)) crystalnum= i; - } + if (ROhist) { + ; + } + // cout <GetName() << endl; + G4int crystalnum = 0; + for (int i = 0; i < 100; i++) //@@@@@@@ ExGflashSensitiveDetector:vorsichty + { + if (pCurrentVolume == fDetector->GetCristal(i)) crystalnum = i; + } caloHit->SetCrystalNum(crystalnum); - + return true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - diff --git a/examples/extended/parameterisations/gflash/gflash1/src/ExGflashActionInitialization.cc b/examples/extended/parameterisations/gflash/gflash1/src/ExGflashActionInitialization.cc index 2c97e6ff6d9..f1725e20432 100644 --- a/examples/extended/parameterisations/gflash/gflash1/src/ExGflashActionInitialization.cc +++ b/examples/extended/parameterisations/gflash/gflash1/src/ExGflashActionInitialization.cc @@ -28,22 +28,18 @@ /// \brief Implementation of the ExGflashActionInitialization class #include "ExGflashActionInitialization.hh" + +#include "ExGflashEventAction.hh" #include "ExGflashPrimaryGeneratorAction.hh" #include "ExGflashRunAction.hh" -#include "ExGflashEventAction.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashActionInitialization::ExGflashActionInitialization() - : G4VUserActionInitialization() -{ -} +ExGflashActionInitialization::ExGflashActionInitialization() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashActionInitialization::~ExGflashActionInitialization() -{ -} +ExGflashActionInitialization::~ExGflashActionInitialization() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -59,6 +55,6 @@ void ExGflashActionInitialization::Build() const SetUserAction(new ExGflashPrimaryGeneratorAction); SetUserAction(new ExGflashRunAction); SetUserAction(new ExGflashEventAction); -} +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/parameterisations/gflash/gflash1/src/ExGflashEventAction.cc b/examples/extended/parameterisations/gflash/gflash1/src/ExGflashEventAction.cc index f8bfb58fd0c..6e989a86c9c 100644 --- a/examples/extended/parameterisations/gflash/gflash1/src/ExGflashEventAction.cc +++ b/examples/extended/parameterisations/gflash/gflash1/src/ExGflashEventAction.cc @@ -29,191 +29,170 @@ // // Created by Joanna Weng 26.11.2004 - #include "ExGflashEventAction.hh" + #include "ExGflashHit.hh" + +#include "G4Event.hh" #include "G4EventManager.hh" #include "G4SDManager.hh" -#include "G4UImanager.hh" -#include "G4TrajectoryContainer.hh" -#include "G4Event.hh" #include "G4SystemOfUnits.hh" -//std -#include +#include "G4TrajectoryContainer.hh" +#include "G4UImanager.hh" +// std #include -//Gflash +#include +// Gflash using namespace std; - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashEventAction::ExGflashEventAction() - : G4UserEventAction(), - fNevent(0),fDtime(0.0),fCalorimeterCollectionId(-1) -{ -} +ExGflashEventAction::ExGflashEventAction() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ExGflashEventAction::~ExGflashEventAction() { - if ( fNevent > 0 ) { - G4cout << "Internal Real Elapsed Time /event is: "<< fDtime /fNevent<< G4endl; + if (fNevent > 0) { + G4cout << "Internal Real Elapsed Time /event is: " << fDtime / fNevent << G4endl; } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void ExGflashEventAction::BeginOfEventAction(const G4Event *evt) +void ExGflashEventAction::BeginOfEventAction(const G4Event* evt) { fTimerIntern.Start(); - G4cout<<" ------ Start ExGflashEventAction ----- "<GetEventID(); - G4cout<<" Start generating event Nr "<GetEventID(); + G4cout << " Start generating event Nr " << fNevent << G4endl << G4endl; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void ExGflashEventAction::EndOfEventAction(const G4Event *evt) -{ +void ExGflashEventAction::EndOfEventAction(const G4Event* evt) +{ fTimerIntern.Stop(); G4cout << G4endl; G4cout << "******************************************"; G4cout << G4endl; - G4cout << "Internal Real Elapsed Time is: "<< fTimerIntern.GetRealElapsed(); + G4cout << "Internal Real Elapsed Time is: " << fTimerIntern.GetRealElapsed(); G4cout << G4endl; G4cout << "Internal System Elapsed Time: " << fTimerIntern.GetSystemElapsed(); G4cout << G4endl; G4cout << "Internal GetUserElapsed Time: " << fTimerIntern.GetUserElapsed(); G4cout << G4endl; - G4cout << "******************************************"<< G4endl; - fDtime+=fTimerIntern.GetRealElapsed(); - G4cout<<" ------ ExGflashEventAction::End of event nr. "<GetCollectionID(colNam="ExGflashCollection"); - if (fCalorimeterCollectionId<0) return; - G4HCofThisEvent * HCE = evt->GetHCofThisEvent(); - ExGflashHitsCollection* THC = 0; + fCalorimeterCollectionId = SDman->GetCollectionID(colNam = "ExGflashCollection"); + if (fCalorimeterCollectionId < 0) return; + G4HCofThisEvent* HCE = evt->GetHCofThisEvent(); + ExGflashHitsCollection* THC = nullptr; G4double totE = 0; // Read out of the crysta ECAL - THC=(ExGflashHitsCollection *)(HCE->GetHC(fCalorimeterCollectionId)); - if (THC) - { - /// Hits in sensitive Detector - int n_hit = THC->entries(); - G4cout<<" " << n_hit<< " hits are stored in ExGflashHitsCollection "<GetPrimaryVertex(); - ///Computing (x,y,z) of vertex of initial particles - G4ThreeVector vtx=pvertex->GetPosition(); - G4PrimaryParticle* pparticle=pvertex->GetPrimary(); + THC = (ExGflashHitsCollection*)(HCE->GetHC(fCalorimeterCollectionId)); + if (THC) { + /// Hits in sensitive Detector + int n_hit = THC->entries(); + G4cout << " " << n_hit << " hits are stored in ExGflashHitsCollection " << G4endl; + G4PrimaryVertex* pvertex = evt->GetPrimaryVertex(); + /// Computing (x,y,z) of vertex of initial particles + G4ThreeVector vtx = pvertex->GetPosition(); + G4PrimaryParticle* pparticle = pvertex->GetPrimary(); // direction of the Shower - G4ThreeVector mom=pparticle->GetMomentum()/pparticle->GetMomentum().mag(); - + G4ThreeVector mom = pparticle->GetMomentum() / pparticle->GetMomentum().mag(); + //@@@ ExGflashEventAction: Magicnumber G4double energyincrystal[100]; G4int hitsincrystal[100]; - for (int i=0;i<100;i++) energyincrystal[i]=0.; - for (int i=0;i<100;i++) hitsincrystal[i]=0.; - + for (int i = 0; i < 100; i++) + energyincrystal[i] = 0.; + for (int i = 0; i < 100; i++) + hitsincrystal[i] = 0.; + //@@@ ExGflashEventAction: Magicnumber /// For all Hits in sensitive detector - for (int i=0;iGetEdep()/GeV; - if (estep >0.0) - { - totE += (*THC)[i]->GetEdep()/GeV; - G4int num=(*THC)[i]->GetCrystalNum(); - - energyincrystal[num]+=(*THC)[i]->GetEdep()/GeV; - hitsincrystal[num]++; - //G4cout << num << G4endl; - // G4cout << " Crystal Nummer " << (*THC)[i]->GetCrystalNum() << G4endl; - // G4cout << (*THC)[i]->GetCrystalNum() /10 << - // " "<<(*THC)[i]->GetCrystalNum()%10 << G4endl; - - G4ThreeVector hitpos=(*THC)[i]->GetPos(); - G4ThreeVector l (hitpos.x(), hitpos.y(), hitpos.z()); - // distance from shower start - l = l - vtx; - // projection on shower axis = longitudinal profile - G4ThreeVector longitudinal = l; - // shower profiles (Radial) - G4ThreeVector radial = vtx.cross(l); - } + for (int i = 0; i < n_hit; i++) { + G4double estep = (*THC)[i]->GetEdep() / GeV; + if (estep > 0.0) { + totE += (*THC)[i]->GetEdep() / GeV; + G4int num = (*THC)[i]->GetCrystalNum(); + + energyincrystal[num] += (*THC)[i]->GetEdep() / GeV; + hitsincrystal[num]++; + // G4cout << num << G4endl; + // G4cout << " Crystal Nummer " << (*THC)[i]->GetCrystalNum() << G4endl; + // G4cout << (*THC)[i]->GetCrystalNum() /10 << + // " "<<(*THC)[i]->GetCrystalNum()%10 << G4endl; + + G4ThreeVector hitpos = (*THC)[i]->GetPos(); + G4ThreeVector l(hitpos.x(), hitpos.y(), hitpos.z()); + // distance from shower start + l = l - vtx; + // projection on shower axis = longitudinal profile + G4ThreeVector longitudinal = l; + // shower profiles (Radial) + G4ThreeVector radial = vtx.cross(l); } - G4double max = 0; - G4int index = 0; - //Find crystal with maximum energy - for (int i=0;i<100;i++) - { - //G4cout << i <<" " << energyincrystal[i] << G4endl; - if (max GetTrajectoryContainer(); + G4TrajectoryContainer* trajectoryContainer = evt->GetTrajectoryContainer(); G4int n_trajectories = 0; - if(trajectoryContainer){ n_trajectories = trajectoryContainer->entries(); } - G4cout << " " << n_trajectories << " trajectories stored in this event." << G4endl; - + if (trajectoryContainer) { + n_trajectories = trajectoryContainer->entries(); + } + G4cout << " " << n_trajectories << " trajectories stored in this event." << G4endl; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - - - - - - - - - - - - - diff --git a/examples/extended/parameterisations/gflash/gflash1/src/ExGflashHit.cc b/examples/extended/parameterisations/gflash/gflash1/src/ExGflashHit.cc index 333fde878b4..9ebcda15e88 100644 --- a/examples/extended/parameterisations/gflash/gflash1/src/ExGflashHit.cc +++ b/examples/extended/parameterisations/gflash/gflash1/src/ExGflashHit.cc @@ -30,42 +30,36 @@ #include "ExGflashHit.hh" -#include "G4VVisManager.hh" #include "G4Colour.hh" -#include "G4VisAttributes.hh" #include "G4LogicalVolume.hh" #include "G4Transform3D.hh" +#include "G4VVisManager.hh" +#include "G4VisAttributes.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4ThreadLocal G4Allocator* ExGflashHitAllocator=0; +G4ThreadLocal G4Allocator* ExGflashHitAllocator = nullptr; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashHit::ExGflashHit() -: G4VHit(), fLogV(0) -{} +ExGflashHit::ExGflashHit() : fLogV(nullptr) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashHit::ExGflashHit(G4LogicalVolume* logVol) -: G4VHit(), fLogV(logVol) -{} +ExGflashHit::ExGflashHit(G4LogicalVolume* logVol) : fLogV(logVol) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashHit::~ExGflashHit() -{} +ExGflashHit::~ExGflashHit() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashHit::ExGflashHit(const ExGflashHit &right) -: G4VHit(right) +ExGflashHit::ExGflashHit(const ExGflashHit& right) : G4VHit(right) //@@@ ExGflashHit:Is it right with the init? { fEdep = right.fEdep; - fPos = right.fPos; - fStart =right.fStart; + fPos = right.fPos; + fStart = right.fStart; fRot = right.fRot; fLogV = right.fLogV; fCrystalNumber = right.fCrystalNumber; @@ -73,11 +67,11 @@ ExGflashHit::ExGflashHit(const ExGflashHit &right) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -const ExGflashHit & ExGflashHit::operator=(const ExGflashHit &right) +const ExGflashHit& ExGflashHit::operator=(const ExGflashHit& right) { G4VHit::operator=(right); fEdep = right.fEdep; - fStart =right.fStart; + fStart = right.fStart; fPos = right.fPos; fRot = right.fRot; fLogV = right.fLogV; @@ -88,12 +82,13 @@ const ExGflashHit & ExGflashHit::operator=(const ExGflashHit &right) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool ExGflashHit::operator==(const ExGflashHit &right) const +G4bool ExGflashHit::operator==(const ExGflashHit& right) const { -// @@@@ return false; - if ((fPos==right.fPos) && (fEdep == right.fEdep)) return true; - else return false; - + // @@@@ return false; + if ((fPos == right.fPos) && (fEdep == right.fEdep)) + return true; + else + return false; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -101,31 +96,21 @@ G4bool ExGflashHit::operator==(const ExGflashHit &right) const void ExGflashHit::Draw() { G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); - if(pVVisManager) - { - G4Transform3D trans(fRot,fPos); + if (pVVisManager) { + G4Transform3D trans(fRot, fPos); G4VisAttributes attribs; const G4VisAttributes* pVA = fLogV->GetVisAttributes(); - if(pVA) attribs = *pVA; - G4Colour colour(1.,0.,0.); + if (pVA) attribs = *pVA; + G4Colour colour(1., 0., 0.); attribs.SetColour(colour); attribs.SetForceWireframe(false); attribs.SetForceSolid(true); - pVVisManager->Draw(*fLogV,attribs,trans); + pVVisManager->Draw(*fLogV, attribs, trans); } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void ExGflashHit::Print() -{} +void ExGflashHit::Print() {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - - - - - - - - diff --git a/examples/extended/parameterisations/gflash/gflash1/src/ExGflashPrimaryGeneratorAction.cc b/examples/extended/parameterisations/gflash/gflash1/src/ExGflashPrimaryGeneratorAction.cc index 9b1aaa6e7df..d61402990e2 100644 --- a/examples/extended/parameterisations/gflash/gflash1/src/ExGflashPrimaryGeneratorAction.cc +++ b/examples/extended/parameterisations/gflash/gflash1/src/ExGflashPrimaryGeneratorAction.cc @@ -29,15 +29,14 @@ // #include "ExGflashPrimaryGeneratorAction.hh" -#include "G4GeneralParticleSource.hh" #include "G4Event.hh" +#include "G4GeneralParticleSource.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ExGflashPrimaryGeneratorAction::ExGflashPrimaryGeneratorAction() - : G4VUserPrimaryGeneratorAction(), fParticleGun(0) { - fParticleGun=new G4GeneralParticleSource; + fParticleGun = new G4GeneralParticleSource; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -50,7 +49,7 @@ ExGflashPrimaryGeneratorAction::~ExGflashPrimaryGeneratorAction() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ExGflashPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) -{ +{ fParticleGun->GeneratePrimaryVertex(anEvent); } diff --git a/examples/extended/parameterisations/gflash/gflash1/src/ExGflashRunAction.cc b/examples/extended/parameterisations/gflash/gflash1/src/ExGflashRunAction.cc index 27350a725b6..94c387e55dd 100644 --- a/examples/extended/parameterisations/gflash/gflash1/src/ExGflashRunAction.cc +++ b/examples/extended/parameterisations/gflash/gflash1/src/ExGflashRunAction.cc @@ -28,46 +28,32 @@ /// \brief Implementation of the ExGflashRunAction class // #include "ExGflashRunAction.hh" + #include "G4Run.hh" #include "G4ios.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashRunAction::ExGflashRunAction() - : G4UserRunAction(), fRunID(0) -{} +ExGflashRunAction::ExGflashRunAction() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashRunAction::~ExGflashRunAction() -{} +ExGflashRunAction::~ExGflashRunAction() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ExGflashRunAction::BeginOfRunAction(const G4Run* aRun) -{ - ((G4Run *)(aRun))->SetRunID(fRunID++); - - G4cout << "### Run " << aRun->GetRunID() << " start." << G4endl; +{ + ((G4Run*)(aRun))->SetRunID(fRunID++); + + G4cout << "### Run " << aRun->GetRunID() << " start." << G4endl; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ExGflashRunAction::EndOfRunAction(const G4Run* aRun) -{ +{ G4cout << "number of event = " << aRun->GetNumberOfEvent() << G4endl; - } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - - - - - - - - - - - diff --git a/examples/extended/parameterisations/gflash/gflash1/test.out b/examples/extended/parameterisations/gflash/gflash1/test.out index 32d9c4078ed..1be756e6744 100644 --- a/examples/extended/parameterisations/gflash/gflash1/test.out +++ b/examples/extended/parameterisations/gflash/gflash1/test.out @@ -16,7 +16,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -52,7 +52,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -250,7 +252,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -282,7 +284,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -314,7 +316,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -327,7 +329,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -373,7 +374,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -405,7 +406,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -437,7 +438,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -469,7 +470,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -501,7 +502,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -533,7 +534,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -565,7 +566,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -950,12 +951,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -980,7 +990,7 @@ See commands in /vis/modeling/trajectories/ for other options. ****************************************** -Internal Real Elapsed Time is: 0.0116105 +Internal Real Elapsed Time is: 0.0102547 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -995,9 +1005,9 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00827896 +Internal Real Elapsed Time is: 0.00720305 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0.01 +Internal GetUserElapsed Time: 0 ****************************************** ------ ExGflashEventAction::End of event nr. 1 ----- 11955 hits are stored in ExGflashHitsCollection @@ -1010,7 +1020,7 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.0080732 +Internal Real Elapsed Time is: 0.00695702 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -1025,7 +1035,7 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00818595 +Internal Real Elapsed Time is: 0.00703268 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -1040,9 +1050,9 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00807074 +Internal Real Elapsed Time is: 0.00691925 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0 +Internal GetUserElapsed Time: 0.01 ****************************************** ------ ExGflashEventAction::End of event nr. 4 ----- 11944 hits are stored in ExGflashHitsCollection @@ -1055,9 +1065,9 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00805759 +Internal Real Elapsed Time is: 0.00694724 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0.01 +Internal GetUserElapsed Time: 0 ****************************************** ------ ExGflashEventAction::End of event nr. 5 ----- 11974 hits are stored in ExGflashHitsCollection @@ -1070,7 +1080,7 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00808066 +Internal Real Elapsed Time is: 0.00695236 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -1085,7 +1095,7 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00810415 +Internal Real Elapsed Time is: 0.00692901 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -1100,9 +1110,9 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.0080748 +Internal Real Elapsed Time is: 0.00693257 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0.01 +Internal GetUserElapsed Time: 0 ****************************************** ------ ExGflashEventAction::End of event nr. 8 ----- 11968 hits are stored in ExGflashHitsCollection @@ -1115,9 +1125,9 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.008183 +Internal Real Elapsed Time is: 0.0070249 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0 +Internal GetUserElapsed Time: 0.01 ****************************************** ------ ExGflashEventAction::End of event nr. 9 ----- 11983 hits are stored in ExGflashHitsCollection @@ -1128,10 +1138,10 @@ Internal GetUserElapsed Time: 0 number of event = 10 Graphics systems deleted. Visualization Manager deleting... -Internal Real Elapsed Time /event is: 0.00941329 +Internal Real Elapsed Time /event is: 0.00812809 ****************************************** -Total Real Elapsed Time is: 2.8072 -Total System Elapsed Time: 0.14 -Total GetUserElapsed Time: 2.5 +Total Real Elapsed Time is: 2.7507 +Total System Elapsed Time: 0.13 +Total GetUserElapsed Time: 2.32 ****************************************** diff --git a/examples/extended/parameterisations/gflash/gflash1/vis.mac b/examples/extended/parameterisations/gflash/gflash1/vis.mac index 95df0f235e0..e343912c599 100644 --- a/examples/extended/parameterisations/gflash/gflash1/vis.mac +++ b/examples/extended/parameterisations/gflash/gflash1/vis.mac @@ -79,6 +79,6 @@ # /tracking/verbose 0 /GFlash/flag 1 -/run/beamOn 2 +#/run/beamOn 2 diff --git a/examples/extended/parameterisations/gflash/gflash2/ExGflash2.cc b/examples/extended/parameterisations/gflash/gflash2/ExGflash2.cc index 1cf57ac376c..2b93957af1f 100644 --- a/examples/extended/parameterisations/gflash/gflash2/ExGflash2.cc +++ b/examples/extended/parameterisations/gflash/gflash2/ExGflash2.cc @@ -30,31 +30,29 @@ // Created by Joanna Weng 26.11.2004 // G4 includes -#include "G4Types.hh" -#include "G4ios.hh" +#include "G4RunManagerFactory.hh" #include "G4Timer.hh" +#include "G4Types.hh" #include "G4UImanager.hh" - -#include "G4RunManagerFactory.hh" +#include "G4ios.hh" // my project #include "ExGflash2DetectorConstruction.hh" #include "ExGflash2ParallelWorld.hh" #include "ExGflashActionInitialization.hh" - #include "FTFP_BERT.hh" -#include "G4FastSimulationPhysics.hh" -#include "G4VisExecutive.hh" +#include "G4FastSimulationPhysics.hh" #include "G4UIExecutive.hh" +#include "G4VisExecutive.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -int main(int argc,char** argv) +int main(int argc, char** argv) { // Instantiate G4UIExecutive if interactive mode G4UIExecutive* ui = nullptr; - if ( argc == 1 ) { + if (argc == 1) { ui = new G4UIExecutive(argc, argv); } @@ -62,17 +60,17 @@ int main(int argc,char** argv) G4Timer timer; timer.Start(); - G4cout<<"+-------------------------------------------------------+"<SetNumberOfThreads(1); // UserInitialization classes (mandatory) - G4cout<<"# GFlash Example: Detector Construction"<RegisterParallelWorld(new ExGflash2ParallelWorld("parallelWorld")); runManager->SetUserInitialization(detector); @@ -82,7 +80,7 @@ int main(int argc,char** argv) G4VModularPhysicsList* physicsList = new FTFP_BERT(); // -- Create a fast simulation physics constructor, used to augment // -- the above physics list to allow for fast simulation: - G4FastSimulationPhysics* fastSimulationPhysics = new G4FastSimulationPhysics(); + auto fastSimulationPhysics = new G4FastSimulationPhysics(); // -- We now configure the fastSimulationPhysics object. // -- The gflash model (GFlashShowerModel, see ExGflashDetectorConstruction.cc) // -- is applicable to e+ and e- : we augment the physics list for these @@ -95,7 +93,7 @@ int main(int argc,char** argv) // -- (will happen at initialization of the run manager) // -- for physics process construction, the fast simulation // -- configuration will be applied as well. - physicsList->RegisterPhysics( fastSimulationPhysics ); + physicsList->RegisterPhysics(fastSimulationPhysics); runManager->SetUserInitialization(physicsList); // Action initialization: @@ -109,16 +107,16 @@ int main(int argc,char** argv) runManager->Initialize(); UImanager->ApplyCommand("/Step/Verbose 0"); - if (ui) // Define UI terminal for interactive mode + if (ui) // Define UI terminal for interactive mode { UImanager->ApplyCommand("/control/execute vis.mac"); ui->SessionStart(); delete ui; } - else // Batch mode + else // Batch mode { - G4String s=*(argv+1); - UImanager->ApplyCommand("/control/execute "+s); + G4String s = *(argv + 1); + UImanager->ApplyCommand("/control/execute " + s); } delete visManager; @@ -128,7 +126,7 @@ int main(int argc,char** argv) G4cout << G4endl; G4cout << "******************************************"; G4cout << G4endl; - G4cout << "Total Real Elapsed Time is: "<< timer.GetRealElapsed(); + G4cout << "Total Real Elapsed Time is: " << timer.GetRealElapsed(); G4cout << G4endl; G4cout << "Total System Elapsed Time: " << timer.GetSystemElapsed(); G4cout << G4endl; diff --git a/examples/extended/parameterisations/gflash/gflash2/include/ExGflash2DetectorConstruction.hh b/examples/extended/parameterisations/gflash/gflash2/include/ExGflash2DetectorConstruction.hh index 41b8ec0d56a..d0c59bdfdd0 100644 --- a/examples/extended/parameterisations/gflash/gflash2/include/ExGflash2DetectorConstruction.hh +++ b/examples/extended/parameterisations/gflash/gflash2/include/ExGflash2DetectorConstruction.hh @@ -43,46 +43,18 @@ class GFlashParticleBounds; class ExGflash2DetectorConstruction : public G4VUserDetectorConstruction { -public: - ExGflash2DetectorConstruction(); - ~ExGflash2DetectorConstruction(); - - virtual G4VPhysicalVolume* Construct(); - virtual void ConstructSDandField(); - - - const G4VPhysicalVolume* GetCristal(int aNumCrystal) - {return fCrystalPhys[aNumCrystal];}; - - -private: - G4LogicalVolume* fCrystalLog; - G4VPhysicalVolume* fCrystalPhys[100]; - - static G4ThreadLocal GFlashShowerModel* fFastShowerModel; - static G4ThreadLocal GFlashHomoShowerParameterisation* fParameterisation; - static G4ThreadLocal GFlashParticleBounds* fParticleBounds; - static G4ThreadLocal GFlashHitMaker* fHitMaker; -}; - -#endif - - - - - - - - - - - - - - - - + public: + ExGflash2DetectorConstruction(); + ~ExGflash2DetectorConstruction() override; + G4VPhysicalVolume* Construct() override; + void ConstructSDandField() override; + const G4VPhysicalVolume* GetCristal(int aNumCrystal) { return fCrystalPhys[aNumCrystal]; }; + private: + G4LogicalVolume* fCrystalLog{nullptr}; + G4VPhysicalVolume* fCrystalPhys[100]{}; +}; +#endif diff --git a/examples/extended/parameterisations/gflash/gflash2/include/ExGflash2ParallelWorld.hh b/examples/extended/parameterisations/gflash/gflash2/include/ExGflash2ParallelWorld.hh index 8077def5b81..7500f164892 100644 --- a/examples/extended/parameterisations/gflash/gflash2/include/ExGflash2ParallelWorld.hh +++ b/examples/extended/parameterisations/gflash/gflash2/include/ExGflash2ParallelWorld.hh @@ -44,41 +44,20 @@ class GFlashParticleBounds; class ExGflash2ParallelWorld : public G4VUserParallelWorld { -public: - ExGflash2ParallelWorld(G4String aWorldName); - ~ExGflash2ParallelWorld(); - - virtual void Construct() final; - virtual void ConstructSD() final; - - -private: - G4Region* fRegion; - - static G4ThreadLocal GFlashShowerModel* fFastShowerModel; - static G4ThreadLocal GFlashHomoShowerParameterisation* fParameterisation; - static G4ThreadLocal GFlashParticleBounds* fParticleBounds; - static G4ThreadLocal GFlashHitMaker* fHitMaker; -}; - -#endif - - - - - - - - - - - - - - - - + public: + ExGflash2ParallelWorld(G4String aWorldName); + ~ExGflash2ParallelWorld() override; + void Construct() final; + void ConstructSD() final; + private: + G4Region* fRegion{nullptr}; + inline static G4ThreadLocal GFlashShowerModel* fFastShowerModel = nullptr; + inline static G4ThreadLocal GFlashHomoShowerParameterisation* fParameterisation = nullptr; + inline static G4ThreadLocal GFlashParticleBounds* fParticleBounds = nullptr; + inline static G4ThreadLocal GFlashHitMaker* fHitMaker = nullptr; +}; +#endif diff --git a/examples/extended/parameterisations/gflash/gflash2/include/ExGflash2SensitiveDetector.hh b/examples/extended/parameterisations/gflash/gflash2/include/ExGflash2SensitiveDetector.hh index 45ac82f8ab6..8fe5c7f370b 100644 --- a/examples/extended/parameterisations/gflash/gflash2/include/ExGflash2SensitiveDetector.hh +++ b/examples/extended/parameterisations/gflash/gflash2/include/ExGflash2SensitiveDetector.hh @@ -30,9 +30,10 @@ #ifndef EXGFLASH2SENSITIVEDETECTOR_H #define EXGFLASH2SENSITIVEDETECTOR_H -#include "G4VSensitiveDetector.hh" -#include "G4VGFlashSensitiveDetector.hh" #include "ExGflashHitsCollection.hh" + +#include "G4VGFlashSensitiveDetector.hh" +#include "G4VSensitiveDetector.hh" #include "globals.hh" class G4GFlashSpot; @@ -42,21 +43,21 @@ class G4Step; class G4HCofThisEvent; class G4TouchableHistory; -class ExGflash2SensitiveDetector: public G4VSensitiveDetector, - public G4VGFlashSensitiveDetector { -public: - ExGflash2SensitiveDetector(G4String, ExGflash2DetectorConstruction* det); - ~ExGflash2SensitiveDetector(); - - virtual void Initialize(G4HCofThisEvent*); - virtual G4bool ProcessHits(G4Step*,G4TouchableHistory*); - virtual G4bool ProcessHits(G4GFlashSpot*aSpot,G4TouchableHistory*); - virtual void EndOfEvent(G4HCofThisEvent*); - -private: - ExGflashHitsCollection* fCaloHitsCollection; - ExGflash2DetectorConstruction* fDetector; - G4int fHCID; +class ExGflash2SensitiveDetector : public G4VSensitiveDetector, public G4VGFlashSensitiveDetector +{ + public: + ExGflash2SensitiveDetector(G4String, ExGflash2DetectorConstruction* det); + ~ExGflash2SensitiveDetector() override; + + void Initialize(G4HCofThisEvent*) override; + G4bool ProcessHits(G4Step*, G4TouchableHistory*) override; + G4bool ProcessHits(G4GFlashSpot* aSpot, G4TouchableHistory*) override; + void EndOfEvent(G4HCofThisEvent*) override; + + private: + ExGflashHitsCollection* fCaloHitsCollection; + ExGflash2DetectorConstruction* fDetector; + G4int fHCID{-1}; }; #endif diff --git a/examples/extended/parameterisations/gflash/gflash2/include/ExGflashActionInitialization.hh b/examples/extended/parameterisations/gflash/gflash2/include/ExGflashActionInitialization.hh index 9c87e2f46da..8279ae5bc09 100644 --- a/examples/extended/parameterisations/gflash/gflash2/include/ExGflashActionInitialization.hh +++ b/examples/extended/parameterisations/gflash/gflash2/include/ExGflashActionInitialization.hh @@ -39,12 +39,10 @@ class ExGflashActionInitialization : public G4VUserActionInitialization { public: ExGflashActionInitialization(); - virtual ~ExGflashActionInitialization(); + ~ExGflashActionInitialization() override; - virtual void BuildForMaster() const; - virtual void Build() const; + void BuildForMaster() const override; + void Build() const override; }; #endif - - diff --git a/examples/extended/parameterisations/gflash/gflash2/include/ExGflashEventAction.hh b/examples/extended/parameterisations/gflash/gflash2/include/ExGflashEventAction.hh index 7d193460b43..733b010baed 100644 --- a/examples/extended/parameterisations/gflash/gflash2/include/ExGflashEventAction.hh +++ b/examples/extended/parameterisations/gflash/gflash2/include/ExGflashEventAction.hh @@ -30,22 +30,23 @@ #ifndef ExGflashEventAction_h #define ExGflashEventAction_h -#include "G4UserEventAction.hh" #include "G4Timer.hh" +#include "G4UserEventAction.hh" #include "globals.hh" -class ExGflashEventAction: public G4UserEventAction { -public: - ExGflashEventAction(); - ~ExGflashEventAction(); - - virtual void BeginOfEventAction(const G4Event*); - virtual void EndOfEventAction(const G4Event*); - -private: - G4int fNevent; - G4double fDtime; - G4int fCalorimeterCollectionId; - G4Timer fTimerIntern; +class ExGflashEventAction : public G4UserEventAction +{ + public: + ExGflashEventAction(); + ~ExGflashEventAction() override; + + void BeginOfEventAction(const G4Event*) override; + void EndOfEventAction(const G4Event*) override; + + private: + G4int fNevent{0}; + G4double fDtime{0.0}; + G4int fCalorimeterCollectionId{-1}; + G4Timer fTimerIntern; }; #endif diff --git a/examples/extended/parameterisations/gflash/gflash2/include/ExGflashHit.hh b/examples/extended/parameterisations/gflash/gflash2/include/ExGflashHit.hh index 8f1950f60c9..295d103b7e3 100644 --- a/examples/extended/parameterisations/gflash/gflash2/include/ExGflashHit.hh +++ b/examples/extended/parameterisations/gflash/gflash2/include/ExGflashHit.hh @@ -29,90 +29,72 @@ // #ifndef ExGflashHit_h #define ExGflashHit_h 1 - -#include "G4VHit.hh" -#include "G4THitsCollection.hh" + #include "G4Allocator.hh" -#include "G4ThreeVector.hh" #include "G4RotationMatrix.hh" +#include "G4THitsCollection.hh" +#include "G4ThreeVector.hh" +#include "G4VHit.hh" class G4LogicalVolume; class ExGflashHit : public G4VHit { public: - - ExGflashHit(); - ExGflashHit(G4LogicalVolume* logVol); - ~ExGflashHit(); - ExGflashHit(const ExGflashHit &right); - const ExGflashHit& operator=(const ExGflashHit &right); - G4bool operator==(const ExGflashHit &right) const; - - inline void *operator new(size_t); - inline void operator delete(void *aHit); - void *operator new(size_t,void*p){return p;} + ExGflashHit(); + ExGflashHit(G4LogicalVolume* logVol); + ~ExGflashHit() override; + ExGflashHit(const ExGflashHit& right); + const ExGflashHit& operator=(const ExGflashHit& right); + G4bool operator==(const ExGflashHit& right) const; + + inline void* operator new(size_t); + inline void operator delete(void* aHit); + void* operator new(size_t, void* p) { return p; } #ifndef G4NOT_ISO_DELETES - void operator delete(void *,void*){} + void operator delete(void*, void*) {} #endif - virtual void Draw(); - virtual void Print(); + void Draw() override; + void Print() override; private: - G4double fEdep; - G4ThreeVector fPos; - G4int fCrystalNumber; - G4ThreeVector fStart; - G4RotationMatrix fRot; - const G4LogicalVolume* fLogV; + G4double fEdep; + G4ThreeVector fPos; + G4int fCrystalNumber; + G4ThreeVector fStart; + G4RotationMatrix fRot; + const G4LogicalVolume* fLogV; public: - inline void SetEdep(G4double de) - { fEdep = de; }; - inline void AddEdep(G4double de) - { fEdep += de; }; - inline G4double GetEdep() - { return fEdep; }; - inline void SetPos(G4ThreeVector xyz) - { fPos = xyz; }; - inline G4int GetCrystalNum() - { return fCrystalNumber; }; - inline void SetCrystalNum(G4int num) - { fCrystalNumber=num; }; - inline G4ThreeVector GetPos() - { return fPos; }; - inline void SetStart(G4ThreeVector xyz) - { fStart = xyz; }; - inline G4ThreeVector GetStart() - { return fStart; }; - - inline void SetRot(G4RotationMatrix rmat) - { fRot = rmat; }; - inline G4RotationMatrix GetRot() - { return fRot; }; - inline const G4LogicalVolume * GetLogV() - { return fLogV; }; + inline void SetEdep(G4double de) { fEdep = de; }; + inline void AddEdep(G4double de) { fEdep += de; }; + inline G4double GetEdep() { return fEdep; }; + inline void SetPos(G4ThreeVector xyz) { fPos = xyz; }; + inline G4int GetCrystalNum() { return fCrystalNumber; }; + inline void SetCrystalNum(G4int num) { fCrystalNumber = num; }; + inline G4ThreeVector GetPos() { return fPos; }; + inline void SetStart(G4ThreeVector xyz) { fStart = xyz; }; + inline G4ThreeVector GetStart() { return fStart; }; + + inline void SetRot(G4RotationMatrix rmat) { fRot = rmat; }; + inline G4RotationMatrix GetRot() { return fRot; }; + inline const G4LogicalVolume* GetLogV() { return fLogV; }; }; -typedef G4THitsCollection ExGflashHitsCollection; +using ExGflashHitsCollection = G4THitsCollection; extern G4ThreadLocal G4Allocator* ExGflashHitAllocator; inline void* ExGflashHit::operator new(size_t) { - if(!ExGflashHitAllocator) ExGflashHitAllocator = new G4Allocator; - return (void *) ExGflashHitAllocator->MallocSingle(); + if (!ExGflashHitAllocator) ExGflashHitAllocator = new G4Allocator; + return (void*)ExGflashHitAllocator->MallocSingle(); } -inline void ExGflashHit::operator delete(void *aHit) +inline void ExGflashHit::operator delete(void* aHit) { - ExGflashHitAllocator->FreeSingle((ExGflashHit*) aHit); + ExGflashHitAllocator->FreeSingle((ExGflashHit*)aHit); } #endif - - - - - diff --git a/examples/extended/parameterisations/gflash/gflash2/include/ExGflashHitsCollection.hh b/examples/extended/parameterisations/gflash/gflash2/include/ExGflashHitsCollection.hh index b95fca20d73..51003c462f7 100644 --- a/examples/extended/parameterisations/gflash/gflash2/include/ExGflashHitsCollection.hh +++ b/examples/extended/parameterisations/gflash/gflash2/include/ExGflashHitsCollection.hh @@ -31,5 +31,5 @@ #define ExGflashHitsCollection_h #include "G4THitsCollection.hh" class ExGflashHit; -typedef G4THitsCollection ExGflashHitsCollection; +using ExGflashHitsCollection = G4THitsCollection; #endif diff --git a/examples/extended/parameterisations/gflash/gflash2/include/ExGflashPrimaryGeneratorAction.hh b/examples/extended/parameterisations/gflash/gflash2/include/ExGflashPrimaryGeneratorAction.hh index 33e5eeaab41..4f4a2cd17f5 100644 --- a/examples/extended/parameterisations/gflash/gflash2/include/ExGflashPrimaryGeneratorAction.hh +++ b/examples/extended/parameterisations/gflash/gflash2/include/ExGflashPrimaryGeneratorAction.hh @@ -35,18 +35,16 @@ class G4Event; class G4GeneralParticleSource; -class ExGflashPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction +class ExGflashPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: ExGflashPrimaryGeneratorAction(); - ~ExGflashPrimaryGeneratorAction(); + ~ExGflashPrimaryGeneratorAction() override; - virtual void GeneratePrimaries(G4Event* anEvent); + void GeneratePrimaries(G4Event* anEvent) override; private: - G4GeneralParticleSource* fParticleGun; + G4GeneralParticleSource* fParticleGun{nullptr}; }; #endif - - diff --git a/examples/extended/parameterisations/gflash/gflash2/include/ExGflashRunAction.hh b/examples/extended/parameterisations/gflash/gflash2/include/ExGflashRunAction.hh index c9a91e79105..1188e8cfd52 100644 --- a/examples/extended/parameterisations/gflash/gflash2/include/ExGflashRunAction.hh +++ b/examples/extended/parameterisations/gflash/gflash2/include/ExGflashRunAction.hh @@ -37,15 +37,15 @@ class G4Run; class ExGflashRunAction : public G4UserRunAction { -public: - ExGflashRunAction(); - ~ExGflashRunAction(); + public: + ExGflashRunAction(); + ~ExGflashRunAction() override; - virtual void BeginOfRunAction(const G4Run* aRun); - virtual void EndOfRunAction(const G4Run* aRun); + void BeginOfRunAction(const G4Run* aRun) override; + void EndOfRunAction(const G4Run* aRun) override; -private: - G4int fRunID; + private: + G4int fRunID{0}; }; #endif diff --git a/examples/extended/parameterisations/gflash/gflash2/src/ExGflash2DetectorConstruction.cc b/examples/extended/parameterisations/gflash/gflash2/src/ExGflash2DetectorConstruction.cc index ef9409a23dc..67e8e840f2d 100644 --- a/examples/extended/parameterisations/gflash/gflash2/src/ExGflash2DetectorConstruction.cc +++ b/examples/extended/parameterisations/gflash/gflash2/src/ExGflash2DetectorConstruction.cc @@ -34,36 +34,34 @@ // User Classes #include "ExGflash2DetectorConstruction.hh" + #include "ExGflash2SensitiveDetector.hh" // G4 Classes -#include "G4NistManager.hh" +#include "G4AutoDelete.hh" +#include "G4Box.hh" +#include "G4Colour.hh" +#include "G4LogicalVolume.hh" #include "G4Material.hh" -#include "G4ThreeVector.hh" +#include "G4NistManager.hh" #include "G4PVPlacement.hh" -#include "G4VPhysicalVolume.hh" -#include "G4LogicalVolume.hh" -#include "G4Box.hh" #include "G4SDManager.hh" -#include "G4VisAttributes.hh" -#include "G4Colour.hh" #include "G4SystemOfUnits.hh" -#include "G4AutoDelete.hh" +#include "G4ThreeVector.hh" +#include "G4VPhysicalVolume.hh" +#include "G4VisAttributes.hh" #include "globals.hh" - - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ExGflash2DetectorConstruction::ExGflash2DetectorConstruction() - :G4VUserDetectorConstruction(), fCrystalLog(nullptr), fCrystalPhys{} { - G4cout<<"ExGflash2DetectorConstruction::Detector constructor"<FindOrBuildMaterial("G4_AIR"); + G4Material* air = nistManager->FindOrBuildMaterial("G4_AIR"); G4Material* pbWO4 = nistManager->FindOrBuildMaterial("G4_PbWO4"); - + /******************************* * The Experimental Hall * *******************************/ - G4double experimentalHall_x=1000.*cm; - G4double experimentalHall_y=1000.*cm; - G4double experimentalHall_z=1000.*cm; - - G4VSolid* experimentalHall_box - = new G4Box("expHall_box", // World Volume - experimentalHall_x, // x size - experimentalHall_y, // y size - experimentalHall_z); // z size - - G4LogicalVolume* experimentalHallLog - = new G4LogicalVolume(experimentalHall_box, - air, - "expHallLog", - 0, //opt: fieldManager - 0, //opt: SensitiveDetector - 0); //opt: UserLimits - G4VPhysicalVolume* experimentalHallPhys - = new G4PVPlacement(0, - G4ThreeVector(), //at (0,0,0) - "expHall", - experimentalHallLog, - 0, - false, - 0); - - - //------------------------------ + G4double experimentalHall_x = 1000. * cm; + G4double experimentalHall_y = 1000. * cm; + G4double experimentalHall_z = 1000. * cm; + + G4VSolid* experimentalHall_box = new G4Box("expHall_box", // World Volume + experimentalHall_x, // x size + experimentalHall_y, // y size + experimentalHall_z); // z size + + auto experimentalHallLog = new G4LogicalVolume(experimentalHall_box, air, "expHallLog", + nullptr, // opt: fieldManager + nullptr, // opt: SensitiveDetector + nullptr); // opt: UserLimits + G4VPhysicalVolume* experimentalHallPhys = + new G4PVPlacement(nullptr, + G4ThreeVector(), // at (0,0,0) + "expHall", experimentalHallLog, nullptr, false, 0); + + //------------------------------ // Calorimeter segments //------------------------------ - // Simplified `CMS-like` PbWO4 crystal calorimeter - - G4int nbOfCrystals = 10; // this are the crystals PER ROW in this example - // cube of 10 x 10 crystals - // don't change it @the moment, since - // the readout in event action assumes this - // dimensions and is not automatically adapted - // in this version of the example :-( - // Simplified `CMS-like` PbWO4 crystal calorimeter - G4double calo_xside = 31*cm; - G4double calo_yside = 31*cm; - G4double calo_zside = 24*cm; - - G4double crystalWidth = 3*cm; - G4double crystalLength = 24*cm; - - calo_xside = (crystalWidth*nbOfCrystals)+1*cm; - calo_yside = (crystalWidth*nbOfCrystals)+1*cm; + // Simplified `CMS-like` PbWO4 crystal calorimeter + + G4int nbOfCrystals = 10; // this are the crystals PER ROW in this example + // cube of 10 x 10 crystals + // don't change it @the moment, since + // the readout in event action assumes this + // dimensions and is not automatically adapted + // in this version of the example :-( + // Simplified `CMS-like` PbWO4 crystal calorimeter + G4double calo_xside = 31 * cm; + G4double calo_yside = 31 * cm; + G4double calo_zside = 24 * cm; + + G4double crystalWidth = 3 * cm; + G4double crystalLength = 24 * cm; + + calo_xside = (crystalWidth * nbOfCrystals) + 1 * cm; + calo_yside = (crystalWidth * nbOfCrystals) + 1 * cm; calo_zside = crystalLength; - - G4Box* calo_box= new G4Box("CMS calorimeter", // its name - calo_xside/2., // size - calo_yside/2., - calo_zside/2.); - G4LogicalVolume* caloLog - = new G4LogicalVolume(calo_box, // its solid - air, // its material - "calo log", // its name - 0, // opt: fieldManager - 0, // opt: SensitiveDetector - 0); // opt: UserLimit - + + auto calo_box = new G4Box("CMS calorimeter", // its name + calo_xside / 2., // size + calo_yside / 2., calo_zside / 2.); + auto caloLog = new G4LogicalVolume(calo_box, // its solid + air, // its material + "calo log", // its name + nullptr, // opt: fieldManager + nullptr, // opt: SensitiveDetector + nullptr); // opt: UserLimit + G4double xpos = 0.0; G4double ypos = 0.0; - G4double zpos = 100.0*cm; - new G4PVPlacement(0, - G4ThreeVector(xpos, ypos, zpos), - caloLog, - "calorimeter", - experimentalHallLog, - false, - 1); - + G4double zpos = 100.0 * cm; + new G4PVPlacement(nullptr, G4ThreeVector(xpos, ypos, zpos), caloLog, "calorimeter", + experimentalHallLog, false, 1); + // Crystals - G4VSolid* crystal_box - = new G4Box("Crystal", // its name - crystalWidth/2, - crystalWidth/2, - crystalLength/2); - // size - fCrystalLog - = new G4LogicalVolume(crystal_box, // its solid - pbWO4, // its material - "CrystalLog"); // its name - - for (G4int i=0; iSetVisAttributes(G4VisAttributes::GetInvisible()); - G4VisAttributes* caloVisAtt = new G4VisAttributes(G4Colour(1.0,1.0,1.0)); - G4VisAttributes* crystalVisAtt = new G4VisAttributes(G4Colour(1.0,1.0,0.0)); + auto caloVisAtt = new G4VisAttributes(G4Colour(1.0, 1.0, 1.0)); + auto crystalVisAtt = new G4VisAttributes(G4Colour(1.0, 1.0, 0.0)); caloLog->SetVisAttributes(caloVisAtt); fCrystalLog->SetVisAttributes(crystalVisAtt); - // Parametrisation region defined in ExGflash2ParallelWorld - + return experimentalHallPhys; } @@ -209,11 +176,10 @@ void ExGflash2DetectorConstruction::ConstructSDandField() { // -- sensitive detectors: G4SDManager* SDman = G4SDManager::GetSDMpointer(); - ExGflash2SensitiveDetector* CaloSD - = new ExGflash2SensitiveDetector("Calorimeter",this); + auto CaloSD = new ExGflash2SensitiveDetector("Calorimeter", this); SDman->AddNewDetector(CaloSD); fCrystalLog->SetSensitiveDetector(CaloSD); - + // Fast simulation implemented in ExGflash2ParallelWorld } diff --git a/examples/extended/parameterisations/gflash/gflash2/src/ExGflash2ParallelWorld.cc b/examples/extended/parameterisations/gflash/gflash2/src/ExGflash2ParallelWorld.cc index b3dad57430f..f33b93f7df1 100644 --- a/examples/extended/parameterisations/gflash/gflash2/src/ExGflash2ParallelWorld.cc +++ b/examples/extended/parameterisations/gflash/gflash2/src/ExGflash2ParallelWorld.cc @@ -34,47 +34,40 @@ #include "ExGflash2ParallelWorld.hh" // G4 Classes -#include "G4NistManager.hh" +#include "G4AutoDelete.hh" +#include "G4Box.hh" +#include "G4Colour.hh" +#include "G4LogicalVolume.hh" #include "G4Material.hh" -#include "G4ThreeVector.hh" +#include "G4NistManager.hh" #include "G4PVPlacement.hh" +#include "G4SystemOfUnits.hh" +#include "G4ThreeVector.hh" #include "G4VPhysicalVolume.hh" -#include "G4LogicalVolume.hh" -#include "G4Box.hh" #include "G4VisAttributes.hh" -#include "G4Colour.hh" -#include "G4SystemOfUnits.hh" -#include "G4AutoDelete.hh" #include "globals.hh" -//fast simulation -#include "GFlashHomoShowerParameterisation.hh" -#include "G4FastSimulationManager.hh" -#include "GFlashShowerModel.hh" +// fast simulation #include "GFlashHitMaker.hh" +#include "GFlashHomoShowerParameterisation.hh" #include "GFlashParticleBounds.hh" +#include "GFlashShowerModel.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4ThreadLocal GFlashShowerModel* ExGflash2ParallelWorld::fFastShowerModel = 0; -G4ThreadLocal -GFlashHomoShowerParameterisation* ExGflash2ParallelWorld::fParameterisation = 0; -G4ThreadLocal GFlashParticleBounds* ExGflash2ParallelWorld::fParticleBounds = 0; -G4ThreadLocal GFlashHitMaker* ExGflash2ParallelWorld::fHitMaker = 0; +#include "G4FastSimulationManager.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ExGflash2ParallelWorld::ExGflash2ParallelWorld(G4String aWorldName) - :G4VUserParallelWorld(aWorldName), fRegion(nullptr) + : G4VUserParallelWorld(aWorldName) { - G4cout<<"ExGflash2ParallelWorld::Parralel world constructor"<GetLogicalVolume(); - + // Use part of the Ex1GflashDetectorConstruction (without individual crystals) - - G4int nbOfCrystals = 10; // this are the crystals PER ROW in this example - // cube of 10 x 10 crystals - // don't change it @the moment, since - // the readout in event action assumes this - // dimensions and is not automatically adapted - // in this version of the example :-( - // Simplified `CMS-like` PbWO4 crystal calorimeter - G4double calo_xside = 31*cm; - G4double calo_yside = 31*cm; - G4double calo_zside = 24*cm; - - G4double crystalWidth = 3*cm; - G4double crystalLength = 24*cm; - - calo_xside = (crystalWidth*nbOfCrystals)+1*cm; - calo_yside = (crystalWidth*nbOfCrystals)+1*cm; + + G4int nbOfCrystals = 10; // this are the crystals PER ROW in this example + // cube of 10 x 10 crystals + // don't change it @the moment, since + // the readout in event action assumes this + // dimensions and is not automatically adapted + // in this version of the example :-( + // Simplified `CMS-like` PbWO4 crystal calorimeter + G4double calo_xside = 31 * cm; + G4double calo_yside = 31 * cm; + G4double calo_zside = 24 * cm; + + G4double crystalWidth = 3 * cm; + G4double crystalLength = 24 * cm; + + calo_xside = (crystalWidth * nbOfCrystals) + 1 * cm; + calo_yside = (crystalWidth * nbOfCrystals) + 1 * cm; calo_zside = crystalLength; - - G4Box* calo_box= new G4Box("CMS calorimeter", // its name - calo_xside/2., // size - calo_yside/2., - calo_zside/2.); - G4LogicalVolume* calo_log - = new G4LogicalVolume(calo_box, // its solid - dummy, // its material - "calo log", // its name - 0, // opt: fieldManager - 0, // opt: SensitiveDetector - 0); // opt: UserLimit + + auto calo_box = new G4Box("CMS calorimeter", // its name + calo_xside / 2., // size + calo_yside / 2., calo_zside / 2.); + auto calo_log = new G4LogicalVolume(calo_box, // its solid + dummy, // its material + "calo log", // its name + nullptr, // opt: fieldManager + nullptr, // opt: SensitiveDetector + nullptr); // opt: UserLimit G4double xpos = 0.0; G4double ypos = 0.0; - G4double zpos = 100.0*cm; - new G4PVPlacement(0, - G4ThreeVector(xpos, ypos, zpos), - calo_log, - "calorimeter", - ghostLogicalVolume, - false, - 1); - - G4VisAttributes* caloVisAtt = new G4VisAttributes(G4Colour(1.0,1.0,1.0)); + G4double zpos = 100.0 * cm; + new G4PVPlacement(nullptr, G4ThreeVector(xpos, ypos, zpos), calo_log, "calorimeter", + ghostLogicalVolume, false, 1); + + auto caloVisAtt = new G4VisAttributes(G4Colour(1.0, 1.0, 1.0)); calo_log->SetVisAttributes(caloVisAtt); // define the fParameterisation region @@ -148,7 +134,7 @@ void ExGflash2ParallelWorld::ConstructSD() { // Get nist material manager G4NistManager* nistManager = G4NistManager::Instance(); - G4Material* pbWO4 = nistManager->FindOrBuildMaterial("G4_PbWO4"); + G4Material* pbWO4 = nistManager->FindOrBuildMaterial("G4_PbWO4"); // -- fast simulation models: // ********************************************** // * Initializing shower modell @@ -163,7 +149,7 @@ void ExGflash2ParallelWorld::ConstructSD() // Makes the EnergieSpots fHitMaker = new GFlashHitMaker(); fFastShowerModel->SetHitMaker(*fHitMaker); - G4cout<<"end shower parameterization."<AddHitsCollection( fHCID, fCaloHitsCollection ); + if (fHCID < 0) { + fHCID = GetCollectionID(0); + } + fCaloHitsCollection = + new ExGflashHitsCollection(SensitiveDetectorName, collectionName[0]); // first collection + HCE->AddHitsCollection(fHCID, fCaloHitsCollection); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void ExGflash2SensitiveDetector::EndOfEvent(G4HCofThisEvent*) -{} +void ExGflash2SensitiveDetector::EndOfEvent(G4HCofThisEvent*) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool ExGflash2SensitiveDetector::ProcessHits(G4Step* aStep,G4TouchableHistory* ROhist) +G4bool ExGflash2SensitiveDetector::ProcessHits(G4Step* aStep, G4TouchableHistory* ROhist) { - G4double e=aStep->GetTotalEnergyDeposit(); - if(e<=0.)return false; - - G4TouchableHistory* theTouchable - = (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable()); - + G4double e = aStep->GetTotalEnergyDeposit(); + if (e <= 0.) return false; + + auto theTouchable = (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable()); + // enrgy deposited -> make Hit - //const G4VPhysicalVolume* physVol= aStep->GetPreStepPoint()->GetPhysicalVolume(); - //G4TouchableHistory* theTouchable = + // const G4VPhysicalVolume* physVol= aStep->GetPreStepPoint()->GetPhysicalVolume(); + // G4TouchableHistory* theTouchable = // (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable()); - ExGflashHit* caloHit=new ExGflashHit(); + auto caloHit = new ExGflashHit(); caloHit->SetEdep(e); caloHit->SetPos(aStep->GetPreStepPoint()->GetPosition()); fCaloHitsCollection->insert(caloHit); - if (ROhist){;} + if (ROhist) { + ; + } G4VPhysicalVolume* physVol = theTouchable->GetVolume(); - G4int crystalnum=0; - for(int i=0;i<100;i++) //@@@@@@@ ExGflash2SensitiveDetector:vorsichty - { - if(physVol == fDetector->GetCristal(i)) crystalnum= i; - } + G4int crystalnum = 0; + for (int i = 0; i < 100; i++) //@@@@@@@ ExGflash2SensitiveDetector:vorsichty + { + if (physVol == fDetector->GetCristal(i)) crystalnum = i; + } caloHit->SetCrystalNum(crystalnum); - + return true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // Separate GFLASH interface -G4bool ExGflash2SensitiveDetector::ProcessHits(G4GFlashSpot*aSpot ,G4TouchableHistory* ROhist) -{ //cout<<"This is ProcessHits GFLASH"<GetEnergySpot()->GetEnergy(); - if(e<=0.)return false; - +G4bool ExGflash2SensitiveDetector::ProcessHits(G4GFlashSpot* aSpot, G4TouchableHistory* ROhist) +{ // cout<<"This is ProcessHits GFLASH"<GetEnergySpot()->GetEnergy(); + if (e <= 0.) return false; + G4VPhysicalVolume* pCurrentVolume = aSpot->GetTouchableHandle()->GetVolume(); - - ExGflashHit* caloHit=new ExGflashHit(); + + auto caloHit = new ExGflashHit(); caloHit->SetEdep(e); caloHit->SetPos(aSpot->GetEnergySpot()->GetPosition()); fCaloHitsCollection->insert(caloHit); - if (ROhist){;} - //cout <GetName() << endl; - G4int crystalnum=0; - for(int i=0;i<100;i++) //@@@@@@@ ExGflash2SensitiveDetector:vorsichty - { - if(pCurrentVolume == fDetector->GetCristal(i)) crystalnum= i; - } + if (ROhist) { + ; + } + // cout <GetName() << endl; + G4int crystalnum = 0; + for (int i = 0; i < 100; i++) //@@@@@@@ ExGflash2SensitiveDetector:vorsichty + { + if (pCurrentVolume == fDetector->GetCristal(i)) crystalnum = i; + } caloHit->SetCrystalNum(crystalnum); - + return true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - diff --git a/examples/extended/parameterisations/gflash/gflash2/src/ExGflashActionInitialization.cc b/examples/extended/parameterisations/gflash/gflash2/src/ExGflashActionInitialization.cc index 2c97e6ff6d9..f1725e20432 100644 --- a/examples/extended/parameterisations/gflash/gflash2/src/ExGflashActionInitialization.cc +++ b/examples/extended/parameterisations/gflash/gflash2/src/ExGflashActionInitialization.cc @@ -28,22 +28,18 @@ /// \brief Implementation of the ExGflashActionInitialization class #include "ExGflashActionInitialization.hh" + +#include "ExGflashEventAction.hh" #include "ExGflashPrimaryGeneratorAction.hh" #include "ExGflashRunAction.hh" -#include "ExGflashEventAction.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashActionInitialization::ExGflashActionInitialization() - : G4VUserActionInitialization() -{ -} +ExGflashActionInitialization::ExGflashActionInitialization() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashActionInitialization::~ExGflashActionInitialization() -{ -} +ExGflashActionInitialization::~ExGflashActionInitialization() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -59,6 +55,6 @@ void ExGflashActionInitialization::Build() const SetUserAction(new ExGflashPrimaryGeneratorAction); SetUserAction(new ExGflashRunAction); SetUserAction(new ExGflashEventAction); -} +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/parameterisations/gflash/gflash2/src/ExGflashEventAction.cc b/examples/extended/parameterisations/gflash/gflash2/src/ExGflashEventAction.cc index f8bfb58fd0c..6e989a86c9c 100644 --- a/examples/extended/parameterisations/gflash/gflash2/src/ExGflashEventAction.cc +++ b/examples/extended/parameterisations/gflash/gflash2/src/ExGflashEventAction.cc @@ -29,191 +29,170 @@ // // Created by Joanna Weng 26.11.2004 - #include "ExGflashEventAction.hh" + #include "ExGflashHit.hh" + +#include "G4Event.hh" #include "G4EventManager.hh" #include "G4SDManager.hh" -#include "G4UImanager.hh" -#include "G4TrajectoryContainer.hh" -#include "G4Event.hh" #include "G4SystemOfUnits.hh" -//std -#include +#include "G4TrajectoryContainer.hh" +#include "G4UImanager.hh" +// std #include -//Gflash +#include +// Gflash using namespace std; - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashEventAction::ExGflashEventAction() - : G4UserEventAction(), - fNevent(0),fDtime(0.0),fCalorimeterCollectionId(-1) -{ -} +ExGflashEventAction::ExGflashEventAction() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ExGflashEventAction::~ExGflashEventAction() { - if ( fNevent > 0 ) { - G4cout << "Internal Real Elapsed Time /event is: "<< fDtime /fNevent<< G4endl; + if (fNevent > 0) { + G4cout << "Internal Real Elapsed Time /event is: " << fDtime / fNevent << G4endl; } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void ExGflashEventAction::BeginOfEventAction(const G4Event *evt) +void ExGflashEventAction::BeginOfEventAction(const G4Event* evt) { fTimerIntern.Start(); - G4cout<<" ------ Start ExGflashEventAction ----- "<GetEventID(); - G4cout<<" Start generating event Nr "<GetEventID(); + G4cout << " Start generating event Nr " << fNevent << G4endl << G4endl; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void ExGflashEventAction::EndOfEventAction(const G4Event *evt) -{ +void ExGflashEventAction::EndOfEventAction(const G4Event* evt) +{ fTimerIntern.Stop(); G4cout << G4endl; G4cout << "******************************************"; G4cout << G4endl; - G4cout << "Internal Real Elapsed Time is: "<< fTimerIntern.GetRealElapsed(); + G4cout << "Internal Real Elapsed Time is: " << fTimerIntern.GetRealElapsed(); G4cout << G4endl; G4cout << "Internal System Elapsed Time: " << fTimerIntern.GetSystemElapsed(); G4cout << G4endl; G4cout << "Internal GetUserElapsed Time: " << fTimerIntern.GetUserElapsed(); G4cout << G4endl; - G4cout << "******************************************"<< G4endl; - fDtime+=fTimerIntern.GetRealElapsed(); - G4cout<<" ------ ExGflashEventAction::End of event nr. "<GetCollectionID(colNam="ExGflashCollection"); - if (fCalorimeterCollectionId<0) return; - G4HCofThisEvent * HCE = evt->GetHCofThisEvent(); - ExGflashHitsCollection* THC = 0; + fCalorimeterCollectionId = SDman->GetCollectionID(colNam = "ExGflashCollection"); + if (fCalorimeterCollectionId < 0) return; + G4HCofThisEvent* HCE = evt->GetHCofThisEvent(); + ExGflashHitsCollection* THC = nullptr; G4double totE = 0; // Read out of the crysta ECAL - THC=(ExGflashHitsCollection *)(HCE->GetHC(fCalorimeterCollectionId)); - if (THC) - { - /// Hits in sensitive Detector - int n_hit = THC->entries(); - G4cout<<" " << n_hit<< " hits are stored in ExGflashHitsCollection "<GetPrimaryVertex(); - ///Computing (x,y,z) of vertex of initial particles - G4ThreeVector vtx=pvertex->GetPosition(); - G4PrimaryParticle* pparticle=pvertex->GetPrimary(); + THC = (ExGflashHitsCollection*)(HCE->GetHC(fCalorimeterCollectionId)); + if (THC) { + /// Hits in sensitive Detector + int n_hit = THC->entries(); + G4cout << " " << n_hit << " hits are stored in ExGflashHitsCollection " << G4endl; + G4PrimaryVertex* pvertex = evt->GetPrimaryVertex(); + /// Computing (x,y,z) of vertex of initial particles + G4ThreeVector vtx = pvertex->GetPosition(); + G4PrimaryParticle* pparticle = pvertex->GetPrimary(); // direction of the Shower - G4ThreeVector mom=pparticle->GetMomentum()/pparticle->GetMomentum().mag(); - + G4ThreeVector mom = pparticle->GetMomentum() / pparticle->GetMomentum().mag(); + //@@@ ExGflashEventAction: Magicnumber G4double energyincrystal[100]; G4int hitsincrystal[100]; - for (int i=0;i<100;i++) energyincrystal[i]=0.; - for (int i=0;i<100;i++) hitsincrystal[i]=0.; - + for (int i = 0; i < 100; i++) + energyincrystal[i] = 0.; + for (int i = 0; i < 100; i++) + hitsincrystal[i] = 0.; + //@@@ ExGflashEventAction: Magicnumber /// For all Hits in sensitive detector - for (int i=0;iGetEdep()/GeV; - if (estep >0.0) - { - totE += (*THC)[i]->GetEdep()/GeV; - G4int num=(*THC)[i]->GetCrystalNum(); - - energyincrystal[num]+=(*THC)[i]->GetEdep()/GeV; - hitsincrystal[num]++; - //G4cout << num << G4endl; - // G4cout << " Crystal Nummer " << (*THC)[i]->GetCrystalNum() << G4endl; - // G4cout << (*THC)[i]->GetCrystalNum() /10 << - // " "<<(*THC)[i]->GetCrystalNum()%10 << G4endl; - - G4ThreeVector hitpos=(*THC)[i]->GetPos(); - G4ThreeVector l (hitpos.x(), hitpos.y(), hitpos.z()); - // distance from shower start - l = l - vtx; - // projection on shower axis = longitudinal profile - G4ThreeVector longitudinal = l; - // shower profiles (Radial) - G4ThreeVector radial = vtx.cross(l); - } + for (int i = 0; i < n_hit; i++) { + G4double estep = (*THC)[i]->GetEdep() / GeV; + if (estep > 0.0) { + totE += (*THC)[i]->GetEdep() / GeV; + G4int num = (*THC)[i]->GetCrystalNum(); + + energyincrystal[num] += (*THC)[i]->GetEdep() / GeV; + hitsincrystal[num]++; + // G4cout << num << G4endl; + // G4cout << " Crystal Nummer " << (*THC)[i]->GetCrystalNum() << G4endl; + // G4cout << (*THC)[i]->GetCrystalNum() /10 << + // " "<<(*THC)[i]->GetCrystalNum()%10 << G4endl; + + G4ThreeVector hitpos = (*THC)[i]->GetPos(); + G4ThreeVector l(hitpos.x(), hitpos.y(), hitpos.z()); + // distance from shower start + l = l - vtx; + // projection on shower axis = longitudinal profile + G4ThreeVector longitudinal = l; + // shower profiles (Radial) + G4ThreeVector radial = vtx.cross(l); } - G4double max = 0; - G4int index = 0; - //Find crystal with maximum energy - for (int i=0;i<100;i++) - { - //G4cout << i <<" " << energyincrystal[i] << G4endl; - if (max GetTrajectoryContainer(); + G4TrajectoryContainer* trajectoryContainer = evt->GetTrajectoryContainer(); G4int n_trajectories = 0; - if(trajectoryContainer){ n_trajectories = trajectoryContainer->entries(); } - G4cout << " " << n_trajectories << " trajectories stored in this event." << G4endl; - + if (trajectoryContainer) { + n_trajectories = trajectoryContainer->entries(); + } + G4cout << " " << n_trajectories << " trajectories stored in this event." << G4endl; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - - - - - - - - - - - - - diff --git a/examples/extended/parameterisations/gflash/gflash2/src/ExGflashHit.cc b/examples/extended/parameterisations/gflash/gflash2/src/ExGflashHit.cc index 333fde878b4..9ebcda15e88 100644 --- a/examples/extended/parameterisations/gflash/gflash2/src/ExGflashHit.cc +++ b/examples/extended/parameterisations/gflash/gflash2/src/ExGflashHit.cc @@ -30,42 +30,36 @@ #include "ExGflashHit.hh" -#include "G4VVisManager.hh" #include "G4Colour.hh" -#include "G4VisAttributes.hh" #include "G4LogicalVolume.hh" #include "G4Transform3D.hh" +#include "G4VVisManager.hh" +#include "G4VisAttributes.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4ThreadLocal G4Allocator* ExGflashHitAllocator=0; +G4ThreadLocal G4Allocator* ExGflashHitAllocator = nullptr; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashHit::ExGflashHit() -: G4VHit(), fLogV(0) -{} +ExGflashHit::ExGflashHit() : fLogV(nullptr) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashHit::ExGflashHit(G4LogicalVolume* logVol) -: G4VHit(), fLogV(logVol) -{} +ExGflashHit::ExGflashHit(G4LogicalVolume* logVol) : fLogV(logVol) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashHit::~ExGflashHit() -{} +ExGflashHit::~ExGflashHit() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashHit::ExGflashHit(const ExGflashHit &right) -: G4VHit(right) +ExGflashHit::ExGflashHit(const ExGflashHit& right) : G4VHit(right) //@@@ ExGflashHit:Is it right with the init? { fEdep = right.fEdep; - fPos = right.fPos; - fStart =right.fStart; + fPos = right.fPos; + fStart = right.fStart; fRot = right.fRot; fLogV = right.fLogV; fCrystalNumber = right.fCrystalNumber; @@ -73,11 +67,11 @@ ExGflashHit::ExGflashHit(const ExGflashHit &right) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -const ExGflashHit & ExGflashHit::operator=(const ExGflashHit &right) +const ExGflashHit& ExGflashHit::operator=(const ExGflashHit& right) { G4VHit::operator=(right); fEdep = right.fEdep; - fStart =right.fStart; + fStart = right.fStart; fPos = right.fPos; fRot = right.fRot; fLogV = right.fLogV; @@ -88,12 +82,13 @@ const ExGflashHit & ExGflashHit::operator=(const ExGflashHit &right) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool ExGflashHit::operator==(const ExGflashHit &right) const +G4bool ExGflashHit::operator==(const ExGflashHit& right) const { -// @@@@ return false; - if ((fPos==right.fPos) && (fEdep == right.fEdep)) return true; - else return false; - + // @@@@ return false; + if ((fPos == right.fPos) && (fEdep == right.fEdep)) + return true; + else + return false; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -101,31 +96,21 @@ G4bool ExGflashHit::operator==(const ExGflashHit &right) const void ExGflashHit::Draw() { G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); - if(pVVisManager) - { - G4Transform3D trans(fRot,fPos); + if (pVVisManager) { + G4Transform3D trans(fRot, fPos); G4VisAttributes attribs; const G4VisAttributes* pVA = fLogV->GetVisAttributes(); - if(pVA) attribs = *pVA; - G4Colour colour(1.,0.,0.); + if (pVA) attribs = *pVA; + G4Colour colour(1., 0., 0.); attribs.SetColour(colour); attribs.SetForceWireframe(false); attribs.SetForceSolid(true); - pVVisManager->Draw(*fLogV,attribs,trans); + pVVisManager->Draw(*fLogV, attribs, trans); } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void ExGflashHit::Print() -{} +void ExGflashHit::Print() {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - - - - - - - - diff --git a/examples/extended/parameterisations/gflash/gflash2/src/ExGflashPrimaryGeneratorAction.cc b/examples/extended/parameterisations/gflash/gflash2/src/ExGflashPrimaryGeneratorAction.cc index 9b1aaa6e7df..d61402990e2 100644 --- a/examples/extended/parameterisations/gflash/gflash2/src/ExGflashPrimaryGeneratorAction.cc +++ b/examples/extended/parameterisations/gflash/gflash2/src/ExGflashPrimaryGeneratorAction.cc @@ -29,15 +29,14 @@ // #include "ExGflashPrimaryGeneratorAction.hh" -#include "G4GeneralParticleSource.hh" #include "G4Event.hh" +#include "G4GeneralParticleSource.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ExGflashPrimaryGeneratorAction::ExGflashPrimaryGeneratorAction() - : G4VUserPrimaryGeneratorAction(), fParticleGun(0) { - fParticleGun=new G4GeneralParticleSource; + fParticleGun = new G4GeneralParticleSource; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -50,7 +49,7 @@ ExGflashPrimaryGeneratorAction::~ExGflashPrimaryGeneratorAction() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ExGflashPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) -{ +{ fParticleGun->GeneratePrimaryVertex(anEvent); } diff --git a/examples/extended/parameterisations/gflash/gflash2/src/ExGflashRunAction.cc b/examples/extended/parameterisations/gflash/gflash2/src/ExGflashRunAction.cc index 27350a725b6..94c387e55dd 100644 --- a/examples/extended/parameterisations/gflash/gflash2/src/ExGflashRunAction.cc +++ b/examples/extended/parameterisations/gflash/gflash2/src/ExGflashRunAction.cc @@ -28,46 +28,32 @@ /// \brief Implementation of the ExGflashRunAction class // #include "ExGflashRunAction.hh" + #include "G4Run.hh" #include "G4ios.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashRunAction::ExGflashRunAction() - : G4UserRunAction(), fRunID(0) -{} +ExGflashRunAction::ExGflashRunAction() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashRunAction::~ExGflashRunAction() -{} +ExGflashRunAction::~ExGflashRunAction() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ExGflashRunAction::BeginOfRunAction(const G4Run* aRun) -{ - ((G4Run *)(aRun))->SetRunID(fRunID++); - - G4cout << "### Run " << aRun->GetRunID() << " start." << G4endl; +{ + ((G4Run*)(aRun))->SetRunID(fRunID++); + + G4cout << "### Run " << aRun->GetRunID() << " start." << G4endl; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ExGflashRunAction::EndOfRunAction(const G4Run* aRun) -{ +{ G4cout << "number of event = " << aRun->GetNumberOfEvent() << G4endl; - } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - - - - - - - - - - - diff --git a/examples/extended/parameterisations/gflash/gflash2/test.out b/examples/extended/parameterisations/gflash/gflash2/test.out index 4d695695f2e..16af6f13e0f 100644 --- a/examples/extended/parameterisations/gflash/gflash2/test.out +++ b/examples/extended/parameterisations/gflash/gflash2/test.out @@ -16,7 +16,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -53,7 +53,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -252,7 +254,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -284,7 +286,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -316,7 +318,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -329,7 +331,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -375,7 +376,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -407,7 +408,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -439,7 +440,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -471,7 +472,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -503,7 +504,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -535,7 +536,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -567,7 +568,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -952,12 +953,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -982,7 +992,7 @@ See commands in /vis/modeling/trajectories/ for other options. ****************************************** -Internal Real Elapsed Time is: 0.0120142 +Internal Real Elapsed Time is: 0.0108488 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -997,9 +1007,9 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00829977 +Internal Real Elapsed Time is: 0.00736507 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0.01 +Internal GetUserElapsed Time: 0 ****************************************** ------ ExGflashEventAction::End of event nr. 1 ----- 11960 hits are stored in ExGflashHitsCollection @@ -1012,8 +1022,8 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00785603 -Internal System Elapsed Time: 0 +Internal Real Elapsed Time is: 0.00702815 +Internal System Elapsed Time: 0.01 Internal GetUserElapsed Time: 0.01 ****************************************** ------ ExGflashEventAction::End of event nr. 2 ----- @@ -1027,7 +1037,7 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00803378 +Internal Real Elapsed Time is: 0.00710307 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -1042,9 +1052,9 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00794252 +Internal Real Elapsed Time is: 0.00704083 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0 +Internal GetUserElapsed Time: 0.01 ****************************************** ------ ExGflashEventAction::End of event nr. 4 ----- 11960 hits are stored in ExGflashHitsCollection @@ -1057,9 +1067,9 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00802002 +Internal Real Elapsed Time is: 0.00710816 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0.01 +Internal GetUserElapsed Time: 0 ****************************************** ------ ExGflashEventAction::End of event nr. 5 ----- 11994 hits are stored in ExGflashHitsCollection @@ -1072,7 +1082,7 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00801884 +Internal Real Elapsed Time is: 0.00707724 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -1087,7 +1097,7 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00805833 +Internal Real Elapsed Time is: 0.00703098 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -1102,9 +1112,9 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00806485 +Internal Real Elapsed Time is: 0.0070981 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0.01 +Internal GetUserElapsed Time: 0 ****************************************** ------ ExGflashEventAction::End of event nr. 8 ----- 11990 hits are stored in ExGflashHitsCollection @@ -1117,7 +1127,7 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00880631 +Internal Real Elapsed Time is: 0.00776931 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -1130,10 +1140,10 @@ Internal GetUserElapsed Time: 0.01 number of event = 10 Graphics systems deleted. Visualization Manager deleting... -Internal Real Elapsed Time /event is: 0.00945718 +Internal Real Elapsed Time /event is: 0.00838552 ****************************************** -Total Real Elapsed Time is: 2.8938 -Total System Elapsed Time: 0.15 -Total GetUserElapsed Time: 2.5 +Total Real Elapsed Time is: 2.98826 +Total System Elapsed Time: 0.12 +Total GetUserElapsed Time: 2.37 ****************************************** diff --git a/examples/extended/parameterisations/gflash/gflash2/vis.mac b/examples/extended/parameterisations/gflash/gflash2/vis.mac index 95df0f235e0..e343912c599 100644 --- a/examples/extended/parameterisations/gflash/gflash2/vis.mac +++ b/examples/extended/parameterisations/gflash/gflash2/vis.mac @@ -79,6 +79,6 @@ # /tracking/verbose 0 /GFlash/flag 1 -/run/beamOn 2 +#/run/beamOn 2 diff --git a/examples/extended/parameterisations/gflash/gflash3/ExGflash3.cc b/examples/extended/parameterisations/gflash/gflash3/ExGflash3.cc index ca9895190a0..a2cb18e1c75 100644 --- a/examples/extended/parameterisations/gflash/gflash3/ExGflash3.cc +++ b/examples/extended/parameterisations/gflash/gflash3/ExGflash3.cc @@ -30,32 +30,30 @@ // Created by Joanna Weng 26.11.2004 // G4 includes -#include "G4Types.hh" -#include "G4ios.hh" +#include "G4RunManagerFactory.hh" #include "G4Timer.hh" +#include "G4Types.hh" #include "G4UImanager.hh" - -#include "G4RunManagerFactory.hh" +#include "G4ios.hh" // my project #include "ExGflash3DetectorConstruction.hh" #include "ExGflash3ParallelWorld.hh" #include "ExGflashActionInitialization.hh" - #include "FTFP_BERT.hh" + #include "G4FastSimulationPhysics.hh" #include "G4ParallelWorldPhysics.hh" - -#include "G4VisExecutive.hh" #include "G4UIExecutive.hh" +#include "G4VisExecutive.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -int main(int argc,char** argv) +int main(int argc, char** argv) { // Instantiate G4UIExecutive if interactive mode G4UIExecutive* ui = nullptr; - if ( argc == 1 ) { + if (argc == 1) { ui = new G4UIExecutive(argc, argv); } @@ -63,17 +61,17 @@ int main(int argc,char** argv) G4Timer timer; timer.Start(); - G4cout<<"+-------------------------------------------------------+"<SetNumberOfThreads(1); // UserInitialization classes (mandatory) - G4cout<<"# GFlash Example: Detector Construction"<RegisterParallelWorld(new ExGflash3ParallelWorld("parallelWorld")); runManager->SetUserInitialization(detector); @@ -83,7 +81,7 @@ int main(int argc,char** argv) G4VModularPhysicsList* physicsList = new FTFP_BERT(); // -- Create a fast simulation physics constructor, used to augment // -- the above physics list to allow for fast simulation: - G4FastSimulationPhysics* fastSimulationPhysics = new G4FastSimulationPhysics(); + auto fastSimulationPhysics = new G4FastSimulationPhysics(); // -- We now configure the fastSimulationPhysics object. // -- The gflash model (GFlashShowerModel, see ExGflashDetectorConstruction.cc) // -- is applicable to e+ and e- : we augment the physics list for these @@ -96,8 +94,8 @@ int main(int argc,char** argv) // -- (will happen at initialization of the run manager) // -- for physics process construction, the fast simulation // -- configuration will be applied as well. - physicsList->RegisterPhysics( new G4ParallelWorldPhysics("parallelWorld") ); - physicsList->RegisterPhysics( fastSimulationPhysics ); + physicsList->RegisterPhysics(new G4ParallelWorldPhysics("parallelWorld")); + physicsList->RegisterPhysics(fastSimulationPhysics); runManager->SetUserInitialization(physicsList); // Action initialization: @@ -111,16 +109,16 @@ int main(int argc,char** argv) runManager->Initialize(); UImanager->ApplyCommand("/Step/Verbose 0"); - if (ui) // Define UI terminal for interactive mode + if (ui) // Define UI terminal for interactive mode { UImanager->ApplyCommand("/control/execute vis.mac"); ui->SessionStart(); delete ui; } - else // Batch mode + else // Batch mode { - G4String s=*(argv+1); - UImanager->ApplyCommand("/control/execute "+s); + G4String s = *(argv + 1); + UImanager->ApplyCommand("/control/execute " + s); } delete visManager; @@ -130,7 +128,7 @@ int main(int argc,char** argv) G4cout << G4endl; G4cout << "******************************************"; G4cout << G4endl; - G4cout << "Total Real Elapsed Time is: "<< timer.GetRealElapsed(); + G4cout << "Total Real Elapsed Time is: " << timer.GetRealElapsed(); G4cout << G4endl; G4cout << "Total System Elapsed Time: " << timer.GetSystemElapsed(); G4cout << G4endl; diff --git a/examples/extended/parameterisations/gflash/gflash3/include/ExGflash3DetectorConstruction.hh b/examples/extended/parameterisations/gflash/gflash3/include/ExGflash3DetectorConstruction.hh index cb66e16ab24..20a973ebb53 100644 --- a/examples/extended/parameterisations/gflash/gflash3/include/ExGflash3DetectorConstruction.hh +++ b/examples/extended/parameterisations/gflash/gflash3/include/ExGflash3DetectorConstruction.hh @@ -44,41 +44,20 @@ class GFlashParticleBounds; class ExGflash3DetectorConstruction : public G4VUserDetectorConstruction { -public: - ExGflash3DetectorConstruction(); - ~ExGflash3DetectorConstruction(); - - virtual G4VPhysicalVolume* Construct(); - virtual void ConstructSDandField(); - - -private: - G4Region* fRegion; - - static G4ThreadLocal GFlashShowerModel* fFastShowerModel; - static G4ThreadLocal GFlashHomoShowerParameterisation* fParameterisation; - static G4ThreadLocal GFlashParticleBounds* fParticleBounds; - static G4ThreadLocal GFlashHitMaker* fHitMaker; -}; - -#endif - - - - - - - - - - - - - - - - + public: + ExGflash3DetectorConstruction(); + ~ExGflash3DetectorConstruction() override; + G4VPhysicalVolume* Construct() override; + void ConstructSDandField() override; + private: + G4Region* fRegion{nullptr}; + inline static G4ThreadLocal GFlashShowerModel* fFastShowerModel = nullptr; + inline static G4ThreadLocal GFlashHomoShowerParameterisation* fParameterisation = nullptr; + inline static G4ThreadLocal GFlashParticleBounds* fParticleBounds = nullptr; + inline static G4ThreadLocal GFlashHitMaker* fHitMaker = nullptr; +}; +#endif diff --git a/examples/extended/parameterisations/gflash/gflash3/include/ExGflash3ParallelWorld.hh b/examples/extended/parameterisations/gflash/gflash3/include/ExGflash3ParallelWorld.hh index 52b8447fb80..01b49469150 100644 --- a/examples/extended/parameterisations/gflash/gflash3/include/ExGflash3ParallelWorld.hh +++ b/examples/extended/parameterisations/gflash/gflash3/include/ExGflash3ParallelWorld.hh @@ -38,19 +38,18 @@ class G4VPhysicalVolume; class ExGflash3ParallelWorld : public G4VUserParallelWorld { -public: - ExGflash3ParallelWorld(G4String aWorldName); - ~ExGflash3ParallelWorld(); - - virtual void Construct() final; - virtual void ConstructSD() final; - - const G4VPhysicalVolume* GetCristal(int aNumCrystal) - {return fCrystalPhys[aNumCrystal];}; - -private: - G4LogicalVolume* fCrystalLog; - G4VPhysicalVolume* fCrystalPhys[100]; + public: + ExGflash3ParallelWorld(G4String aWorldName); + ~ExGflash3ParallelWorld() override; + + void Construct() final; + void ConstructSD() final; + + const G4VPhysicalVolume* GetCristal(int aNumCrystal) { return fCrystalPhys[aNumCrystal]; }; + + private: + G4LogicalVolume* fCrystalLog{nullptr}; + G4VPhysicalVolume* fCrystalPhys[100]{}; }; #endif diff --git a/examples/extended/parameterisations/gflash/gflash3/include/ExGflash3SensitiveDetector.hh b/examples/extended/parameterisations/gflash/gflash3/include/ExGflash3SensitiveDetector.hh index d6d7c913276..9d01b34caa3 100644 --- a/examples/extended/parameterisations/gflash/gflash3/include/ExGflash3SensitiveDetector.hh +++ b/examples/extended/parameterisations/gflash/gflash3/include/ExGflash3SensitiveDetector.hh @@ -30,9 +30,10 @@ #ifndef EX1GFLASHSENSITIVEDETECTOR_H #define EX1GFLASHSENSITIVEDETECTOR_H -#include "G4VSensitiveDetector.hh" -#include "G4VGFlashSensitiveDetector.hh" #include "ExGflashHitsCollection.hh" + +#include "G4VGFlashSensitiveDetector.hh" +#include "G4VSensitiveDetector.hh" #include "globals.hh" class G4GFlashSpot; @@ -42,21 +43,21 @@ class G4Step; class G4HCofThisEvent; class G4TouchableHistory; -class ExGflash3SensitiveDetector: public G4VSensitiveDetector, - public G4VGFlashSensitiveDetector { -public: - ExGflash3SensitiveDetector(G4String, ExGflash3ParallelWorld* det); - ~ExGflash3SensitiveDetector(); - - virtual void Initialize(G4HCofThisEvent*); - virtual G4bool ProcessHits(G4Step*,G4TouchableHistory*); - virtual G4bool ProcessHits(G4GFlashSpot*aSpot,G4TouchableHistory*); - virtual void EndOfEvent(G4HCofThisEvent*); - -private: - ExGflashHitsCollection* fCaloHitsCollection; - ExGflash3ParallelWorld* fDetector; - G4int fHCID; +class ExGflash3SensitiveDetector : public G4VSensitiveDetector, public G4VGFlashSensitiveDetector +{ + public: + ExGflash3SensitiveDetector(G4String, ExGflash3ParallelWorld* det); + ~ExGflash3SensitiveDetector() override; + + void Initialize(G4HCofThisEvent*) override; + G4bool ProcessHits(G4Step*, G4TouchableHistory*) override; + G4bool ProcessHits(G4GFlashSpot* aSpot, G4TouchableHistory*) override; + void EndOfEvent(G4HCofThisEvent*) override; + + private: + ExGflashHitsCollection* fCaloHitsCollection; + ExGflash3ParallelWorld* fDetector; + G4int fHCID{-1}; }; #endif diff --git a/examples/extended/parameterisations/gflash/gflash3/include/ExGflashActionInitialization.hh b/examples/extended/parameterisations/gflash/gflash3/include/ExGflashActionInitialization.hh index 9c87e2f46da..8279ae5bc09 100644 --- a/examples/extended/parameterisations/gflash/gflash3/include/ExGflashActionInitialization.hh +++ b/examples/extended/parameterisations/gflash/gflash3/include/ExGflashActionInitialization.hh @@ -39,12 +39,10 @@ class ExGflashActionInitialization : public G4VUserActionInitialization { public: ExGflashActionInitialization(); - virtual ~ExGflashActionInitialization(); + ~ExGflashActionInitialization() override; - virtual void BuildForMaster() const; - virtual void Build() const; + void BuildForMaster() const override; + void Build() const override; }; #endif - - diff --git a/examples/extended/parameterisations/gflash/gflash3/include/ExGflashEventAction.hh b/examples/extended/parameterisations/gflash/gflash3/include/ExGflashEventAction.hh index 7d193460b43..733b010baed 100644 --- a/examples/extended/parameterisations/gflash/gflash3/include/ExGflashEventAction.hh +++ b/examples/extended/parameterisations/gflash/gflash3/include/ExGflashEventAction.hh @@ -30,22 +30,23 @@ #ifndef ExGflashEventAction_h #define ExGflashEventAction_h -#include "G4UserEventAction.hh" #include "G4Timer.hh" +#include "G4UserEventAction.hh" #include "globals.hh" -class ExGflashEventAction: public G4UserEventAction { -public: - ExGflashEventAction(); - ~ExGflashEventAction(); - - virtual void BeginOfEventAction(const G4Event*); - virtual void EndOfEventAction(const G4Event*); - -private: - G4int fNevent; - G4double fDtime; - G4int fCalorimeterCollectionId; - G4Timer fTimerIntern; +class ExGflashEventAction : public G4UserEventAction +{ + public: + ExGflashEventAction(); + ~ExGflashEventAction() override; + + void BeginOfEventAction(const G4Event*) override; + void EndOfEventAction(const G4Event*) override; + + private: + G4int fNevent{0}; + G4double fDtime{0.0}; + G4int fCalorimeterCollectionId{-1}; + G4Timer fTimerIntern; }; #endif diff --git a/examples/extended/parameterisations/gflash/gflash3/include/ExGflashHit.hh b/examples/extended/parameterisations/gflash/gflash3/include/ExGflashHit.hh index 8f1950f60c9..295d103b7e3 100644 --- a/examples/extended/parameterisations/gflash/gflash3/include/ExGflashHit.hh +++ b/examples/extended/parameterisations/gflash/gflash3/include/ExGflashHit.hh @@ -29,90 +29,72 @@ // #ifndef ExGflashHit_h #define ExGflashHit_h 1 - -#include "G4VHit.hh" -#include "G4THitsCollection.hh" + #include "G4Allocator.hh" -#include "G4ThreeVector.hh" #include "G4RotationMatrix.hh" +#include "G4THitsCollection.hh" +#include "G4ThreeVector.hh" +#include "G4VHit.hh" class G4LogicalVolume; class ExGflashHit : public G4VHit { public: - - ExGflashHit(); - ExGflashHit(G4LogicalVolume* logVol); - ~ExGflashHit(); - ExGflashHit(const ExGflashHit &right); - const ExGflashHit& operator=(const ExGflashHit &right); - G4bool operator==(const ExGflashHit &right) const; - - inline void *operator new(size_t); - inline void operator delete(void *aHit); - void *operator new(size_t,void*p){return p;} + ExGflashHit(); + ExGflashHit(G4LogicalVolume* logVol); + ~ExGflashHit() override; + ExGflashHit(const ExGflashHit& right); + const ExGflashHit& operator=(const ExGflashHit& right); + G4bool operator==(const ExGflashHit& right) const; + + inline void* operator new(size_t); + inline void operator delete(void* aHit); + void* operator new(size_t, void* p) { return p; } #ifndef G4NOT_ISO_DELETES - void operator delete(void *,void*){} + void operator delete(void*, void*) {} #endif - virtual void Draw(); - virtual void Print(); + void Draw() override; + void Print() override; private: - G4double fEdep; - G4ThreeVector fPos; - G4int fCrystalNumber; - G4ThreeVector fStart; - G4RotationMatrix fRot; - const G4LogicalVolume* fLogV; + G4double fEdep; + G4ThreeVector fPos; + G4int fCrystalNumber; + G4ThreeVector fStart; + G4RotationMatrix fRot; + const G4LogicalVolume* fLogV; public: - inline void SetEdep(G4double de) - { fEdep = de; }; - inline void AddEdep(G4double de) - { fEdep += de; }; - inline G4double GetEdep() - { return fEdep; }; - inline void SetPos(G4ThreeVector xyz) - { fPos = xyz; }; - inline G4int GetCrystalNum() - { return fCrystalNumber; }; - inline void SetCrystalNum(G4int num) - { fCrystalNumber=num; }; - inline G4ThreeVector GetPos() - { return fPos; }; - inline void SetStart(G4ThreeVector xyz) - { fStart = xyz; }; - inline G4ThreeVector GetStart() - { return fStart; }; - - inline void SetRot(G4RotationMatrix rmat) - { fRot = rmat; }; - inline G4RotationMatrix GetRot() - { return fRot; }; - inline const G4LogicalVolume * GetLogV() - { return fLogV; }; + inline void SetEdep(G4double de) { fEdep = de; }; + inline void AddEdep(G4double de) { fEdep += de; }; + inline G4double GetEdep() { return fEdep; }; + inline void SetPos(G4ThreeVector xyz) { fPos = xyz; }; + inline G4int GetCrystalNum() { return fCrystalNumber; }; + inline void SetCrystalNum(G4int num) { fCrystalNumber = num; }; + inline G4ThreeVector GetPos() { return fPos; }; + inline void SetStart(G4ThreeVector xyz) { fStart = xyz; }; + inline G4ThreeVector GetStart() { return fStart; }; + + inline void SetRot(G4RotationMatrix rmat) { fRot = rmat; }; + inline G4RotationMatrix GetRot() { return fRot; }; + inline const G4LogicalVolume* GetLogV() { return fLogV; }; }; -typedef G4THitsCollection ExGflashHitsCollection; +using ExGflashHitsCollection = G4THitsCollection; extern G4ThreadLocal G4Allocator* ExGflashHitAllocator; inline void* ExGflashHit::operator new(size_t) { - if(!ExGflashHitAllocator) ExGflashHitAllocator = new G4Allocator; - return (void *) ExGflashHitAllocator->MallocSingle(); + if (!ExGflashHitAllocator) ExGflashHitAllocator = new G4Allocator; + return (void*)ExGflashHitAllocator->MallocSingle(); } -inline void ExGflashHit::operator delete(void *aHit) +inline void ExGflashHit::operator delete(void* aHit) { - ExGflashHitAllocator->FreeSingle((ExGflashHit*) aHit); + ExGflashHitAllocator->FreeSingle((ExGflashHit*)aHit); } #endif - - - - - diff --git a/examples/extended/parameterisations/gflash/gflash3/include/ExGflashHitsCollection.hh b/examples/extended/parameterisations/gflash/gflash3/include/ExGflashHitsCollection.hh index b95fca20d73..51003c462f7 100644 --- a/examples/extended/parameterisations/gflash/gflash3/include/ExGflashHitsCollection.hh +++ b/examples/extended/parameterisations/gflash/gflash3/include/ExGflashHitsCollection.hh @@ -31,5 +31,5 @@ #define ExGflashHitsCollection_h #include "G4THitsCollection.hh" class ExGflashHit; -typedef G4THitsCollection ExGflashHitsCollection; +using ExGflashHitsCollection = G4THitsCollection; #endif diff --git a/examples/extended/parameterisations/gflash/gflash3/include/ExGflashPrimaryGeneratorAction.hh b/examples/extended/parameterisations/gflash/gflash3/include/ExGflashPrimaryGeneratorAction.hh index 33e5eeaab41..4f4a2cd17f5 100644 --- a/examples/extended/parameterisations/gflash/gflash3/include/ExGflashPrimaryGeneratorAction.hh +++ b/examples/extended/parameterisations/gflash/gflash3/include/ExGflashPrimaryGeneratorAction.hh @@ -35,18 +35,16 @@ class G4Event; class G4GeneralParticleSource; -class ExGflashPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction +class ExGflashPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: ExGflashPrimaryGeneratorAction(); - ~ExGflashPrimaryGeneratorAction(); + ~ExGflashPrimaryGeneratorAction() override; - virtual void GeneratePrimaries(G4Event* anEvent); + void GeneratePrimaries(G4Event* anEvent) override; private: - G4GeneralParticleSource* fParticleGun; + G4GeneralParticleSource* fParticleGun{nullptr}; }; #endif - - diff --git a/examples/extended/parameterisations/gflash/gflash3/include/ExGflashRunAction.hh b/examples/extended/parameterisations/gflash/gflash3/include/ExGflashRunAction.hh index c9a91e79105..1188e8cfd52 100644 --- a/examples/extended/parameterisations/gflash/gflash3/include/ExGflashRunAction.hh +++ b/examples/extended/parameterisations/gflash/gflash3/include/ExGflashRunAction.hh @@ -37,15 +37,15 @@ class G4Run; class ExGflashRunAction : public G4UserRunAction { -public: - ExGflashRunAction(); - ~ExGflashRunAction(); + public: + ExGflashRunAction(); + ~ExGflashRunAction() override; - virtual void BeginOfRunAction(const G4Run* aRun); - virtual void EndOfRunAction(const G4Run* aRun); + void BeginOfRunAction(const G4Run* aRun) override; + void EndOfRunAction(const G4Run* aRun) override; -private: - G4int fRunID; + private: + G4int fRunID{0}; }; #endif diff --git a/examples/extended/parameterisations/gflash/gflash3/src/ExGflash3DetectorConstruction.cc b/examples/extended/parameterisations/gflash/gflash3/src/ExGflash3DetectorConstruction.cc index 1c54bdbb8e8..371d29e95f7 100644 --- a/examples/extended/parameterisations/gflash/gflash3/src/ExGflash3DetectorConstruction.cc +++ b/examples/extended/parameterisations/gflash/gflash3/src/ExGflash3DetectorConstruction.cc @@ -36,48 +36,40 @@ #include "ExGflash3DetectorConstruction.hh" // G4 Classes -#include "G4NistManager.hh" +#include "G4AutoDelete.hh" +#include "G4Box.hh" +#include "G4Colour.hh" +#include "G4LogicalVolume.hh" #include "G4Material.hh" -#include "G4ThreeVector.hh" +#include "G4NistManager.hh" #include "G4PVPlacement.hh" -#include "G4VPhysicalVolume.hh" -#include "G4LogicalVolume.hh" -#include "G4Box.hh" #include "G4SDManager.hh" -#include "G4VisAttributes.hh" -#include "G4Colour.hh" #include "G4SystemOfUnits.hh" -#include "G4AutoDelete.hh" +#include "G4ThreeVector.hh" +#include "G4VPhysicalVolume.hh" +#include "G4VisAttributes.hh" #include "globals.hh" -//fast simulation -#include "GFlashHomoShowerParameterisation.hh" -#include "G4FastSimulationManager.hh" -#include "GFlashShowerModel.hh" +// fast simulation #include "GFlashHitMaker.hh" +#include "GFlashHomoShowerParameterisation.hh" #include "GFlashParticleBounds.hh" +#include "GFlashShowerModel.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4ThreadLocal GFlashShowerModel* ExGflash3DetectorConstruction::fFastShowerModel = 0; -G4ThreadLocal -GFlashHomoShowerParameterisation* ExGflash3DetectorConstruction::fParameterisation = 0; -G4ThreadLocal GFlashParticleBounds* ExGflash3DetectorConstruction::fParticleBounds = 0; -G4ThreadLocal GFlashHitMaker* ExGflash3DetectorConstruction::fHitMaker = 0; +#include "G4FastSimulationManager.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ExGflash3DetectorConstruction::ExGflash3DetectorConstruction() - :G4VUserDetectorConstruction(), fRegion(nullptr) { - G4cout<<"ExGflash3DetectorConstruction::Detector constructor"<FindOrBuildMaterial("G4_AIR"); + G4Material* air = nistManager->FindOrBuildMaterial("G4_AIR"); G4Material* pbWO4 = nistManager->FindOrBuildMaterial("G4_PbWO4"); - + /******************************* * The Experimental Hall * *******************************/ - G4double experimentalHall_x=1000.*cm; - G4double experimentalHall_y=1000.*cm; - G4double experimentalHall_z=1000.*cm; - - G4VSolid* experimentalHall_box - = new G4Box("expHall_box", // World Volume - experimentalHall_x, // x size - experimentalHall_y, // y size - experimentalHall_z); // z size - - G4LogicalVolume* experimentalHallLog - = new G4LogicalVolume(experimentalHall_box, - air, - "expHallLog", - 0, //opt: fieldManager - 0, //opt: SensitiveDetector - 0); //opt: UserLimits - G4VPhysicalVolume* experimentalHall_phys - = new G4PVPlacement(0, - G4ThreeVector(), //at (0,0,0) - "expHall", - experimentalHallLog, - 0, - false, - 0); - - - //------------------------------ + G4double experimentalHall_x = 1000. * cm; + G4double experimentalHall_y = 1000. * cm; + G4double experimentalHall_z = 1000. * cm; + + G4VSolid* experimentalHall_box = new G4Box("expHall_box", // World Volume + experimentalHall_x, // x size + experimentalHall_y, // y size + experimentalHall_z); // z size + + auto experimentalHallLog = new G4LogicalVolume(experimentalHall_box, air, "expHallLog", + nullptr, // opt: fieldManager + nullptr, // opt: SensitiveDetector + nullptr); // opt: UserLimits + G4VPhysicalVolume* experimentalHall_phys = + new G4PVPlacement(nullptr, + G4ThreeVector(), // at (0,0,0) + "expHall", experimentalHallLog, nullptr, false, 0); + + //------------------------------ // Calorimeter segments //------------------------------ - // Simplified `CMS-like` PbWO4 crystal calorimeter - - G4int nbOfCrystals = 10; // this are the crystals PER ROW in this example - // cube of 10 x 10 crystals - // don't change it @the moment, since - // the readout in event action assumes this - // dimensions and is not automatically adapted - // in this version of the example :-( - // Simplified `CMS-like` PbWO4 crystal calorimeter - G4double calo_xside = 31*cm; - G4double calo_yside = 31*cm; - G4double calo_zside = 24*cm; - - G4double crystalWidth = 3*cm; - G4double crystalLength = 24*cm; - - calo_xside = (crystalWidth*nbOfCrystals)+1*cm; - calo_yside = (crystalWidth*nbOfCrystals)+1*cm; + // Simplified `CMS-like` PbWO4 crystal calorimeter + + G4int nbOfCrystals = 10; // this are the crystals PER ROW in this example + // cube of 10 x 10 crystals + // don't change it @the moment, since + // the readout in event action assumes this + // dimensions and is not automatically adapted + // in this version of the example :-( + // Simplified `CMS-like` PbWO4 crystal calorimeter + G4double calo_xside = 31 * cm; + G4double calo_yside = 31 * cm; + G4double calo_zside = 24 * cm; + + G4double crystalWidth = 3 * cm; + G4double crystalLength = 24 * cm; + + calo_xside = (crystalWidth * nbOfCrystals) + 1 * cm; + calo_yside = (crystalWidth * nbOfCrystals) + 1 * cm; calo_zside = crystalLength; - - G4Box* calo_box= new G4Box("CMS calorimeter", // its name - calo_xside/2., // size - calo_yside/2., - calo_zside/2.); - G4LogicalVolume* caloLog - = new G4LogicalVolume(calo_box, // its solid - pbWO4, // its material - "calo log", // its name - 0, // opt: fieldManager - 0, // opt: SensitiveDetector - 0); // opt: UserLimit - + + auto calo_box = new G4Box("CMS calorimeter", // its name + calo_xside / 2., // size + calo_yside / 2., calo_zside / 2.); + auto caloLog = new G4LogicalVolume(calo_box, // its solid + pbWO4, // its material + "calo log", // its name + nullptr, // opt: fieldManager + nullptr, // opt: SensitiveDetector + nullptr); // opt: UserLimit + G4double xpos = 0.0; G4double ypos = 0.0; - G4double zpos = 100.0*cm; - new G4PVPlacement(0, - G4ThreeVector(xpos, ypos, zpos), - caloLog, - "calorimeter", - experimentalHallLog, - false, - 1); + G4double zpos = 100.0 * cm; + new G4PVPlacement(nullptr, G4ThreeVector(xpos, ypos, zpos), caloLog, "calorimeter", + experimentalHallLog, false, 1); // Individual crystals are created as part of the readout geometry in the parallel world - + experimentalHallLog->SetVisAttributes(G4VisAttributes::GetInvisible()); - G4VisAttributes* caloVisAtt = new G4VisAttributes(G4Colour(1.0,1.0,1.0)); + auto caloVisAtt = new G4VisAttributes(G4Colour(1.0, 1.0, 1.0)); caloLog->SetVisAttributes(caloVisAtt); // define the fParameterisation region fRegion = new G4Region("crystals"); caloLog->SetRegion(fRegion); fRegion->AddRootLogicalVolume(caloLog); - + return experimentalHall_phys; } @@ -207,7 +183,7 @@ void ExGflash3DetectorConstruction::ConstructSDandField() // Important: use SD defined in different geometry fHitMaker->SetNameOfWorldWithSD("parallelWorld"); fFastShowerModel->SetHitMaker(*fHitMaker); - G4cout<<"end shower parameterization."<GetLogicalVolume(); - + // Use part of the Ex1GflashDetectorConstruction (without individual crystals) - - G4int nbOfCrystals = 10; // this are the crystals PER ROW in this example - // cube of 10 x 10 crystals - // don't change it @the moment, since - // the readout in event action assumes this - // dimensions and is not automatically adapted - // in this version of the example :-( - // Simplified `CMS-like` PbWO4 crystal calorimeter - G4double calo_xside = 31*cm; - G4double calo_yside = 31*cm; - G4double calo_zside = 24*cm; - - G4double crystalWidth = 3*cm; - G4double crystalLength = 24*cm; - - calo_xside = (crystalWidth*nbOfCrystals)+1*cm; - calo_yside = (crystalWidth*nbOfCrystals)+1*cm; + + G4int nbOfCrystals = 10; // this are the crystals PER ROW in this example + // cube of 10 x 10 crystals + // don't change it @the moment, since + // the readout in event action assumes this + // dimensions and is not automatically adapted + // in this version of the example :-( + // Simplified `CMS-like` PbWO4 crystal calorimeter + G4double calo_xside = 31 * cm; + G4double calo_yside = 31 * cm; + G4double calo_zside = 24 * cm; + + G4double crystalWidth = 3 * cm; + G4double crystalLength = 24 * cm; + + calo_xside = (crystalWidth * nbOfCrystals) + 1 * cm; + calo_yside = (crystalWidth * nbOfCrystals) + 1 * cm; calo_zside = crystalLength; - - G4Box* calo_box= new G4Box("CMS calorimeter", // its name - calo_xside/2., // size - calo_yside/2., - calo_zside/2.); - G4LogicalVolume* caloLog - = new G4LogicalVolume(calo_box, // its solid - dummy, // its material - "calo log", // its name - 0, // opt: fieldManager - 0, // opt: SensitiveDetector - 0); // opt: UserLimit + + auto calo_box = new G4Box("CMS calorimeter", // its name + calo_xside / 2., // size + calo_yside / 2., calo_zside / 2.); + auto caloLog = new G4LogicalVolume(calo_box, // its solid + dummy, // its material + "calo log", // its name + nullptr, // opt: fieldManager + nullptr, // opt: SensitiveDetector + nullptr); // opt: UserLimit G4double xpos = 0.0; G4double ypos = 0.0; - G4double zpos = 100.0*cm; - new G4PVPlacement(0, - G4ThreeVector(xpos, ypos, zpos), - caloLog, - "calorimeter", - ghostLogicalVolume, - false, - 1); - + G4double zpos = 100.0 * cm; + new G4PVPlacement(nullptr, G4ThreeVector(xpos, ypos, zpos), caloLog, "calorimeter", + ghostLogicalVolume, false, 1); + // Crystals - G4VSolid* crystal_box - = new G4Box("Crystal", // its name - crystalWidth/2, - crystalWidth/2, - crystalLength/2); - // size - fCrystalLog - = new G4LogicalVolume(crystal_box, // its solid - dummy, // its material - "CrystalLog"); // its name - - for (G4int i=0; iSetVisAttributes(caloVisAtt); fCrystalLog->SetVisAttributes(crystalVisAtt); - } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -166,8 +144,7 @@ void ExGflash3ParallelWorld::ConstructSD() { // -- sensitive detectors: G4SDManager* SDman = G4SDManager::GetSDMpointer(); - ExGflash3SensitiveDetector* CaloSD - = new ExGflash3SensitiveDetector("Calorimeter",this); + auto CaloSD = new ExGflash3SensitiveDetector("Calorimeter", this); SDman->AddNewDetector(CaloSD); fCrystalLog->SetSensitiveDetector(CaloSD); } diff --git a/examples/extended/parameterisations/gflash/gflash3/src/ExGflash3SensitiveDetector.cc b/examples/extended/parameterisations/gflash/gflash3/src/ExGflash3SensitiveDetector.cc index fc9afed3dfe..1c5a6ff2653 100644 --- a/examples/extended/parameterisations/gflash/gflash3/src/ExGflash3SensitiveDetector.cc +++ b/examples/extended/parameterisations/gflash/gflash3/src/ExGflash3SensitiveDetector.cc @@ -29,102 +29,105 @@ // // Created by Joanna Weng 26.11.2004 #include "ExGflash3SensitiveDetector.hh" -#include "ExGflashHit.hh" -#include "G4GFlashSpot.hh" + #include "ExGflash3DetectorConstruction.hh" #include "ExGflash3ParallelWorld.hh" -#include "G4VPhysicalVolume.hh" +#include "ExGflashHit.hh" + +#include "G4GFlashSpot.hh" #include "G4Step.hh" -#include "G4VTouchable.hh" #include "G4TouchableHistory.hh" +#include "G4VPhysicalVolume.hh" +#include "G4VTouchable.hh" -//WARNING : You have to use also G4VGFlashSensitiveDetector() as base class +// WARNING : You have to use also G4VGFlashSensitiveDetector() as base class //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflash3SensitiveDetector::ExGflash3SensitiveDetector(G4String name, - ExGflash3ParallelWorld* det) - : G4VSensitiveDetector(name), G4VGFlashSensitiveDetector(), fDetector(det), fHCID(-1) +ExGflash3SensitiveDetector::ExGflash3SensitiveDetector(G4String name, ExGflash3ParallelWorld* det) + : G4VSensitiveDetector(name), fDetector(det) { - G4String caloname="ExGflashCollection"; + G4String caloname = "ExGflashCollection"; collectionName.insert(caloname); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflash3SensitiveDetector::~ExGflash3SensitiveDetector() -{} +ExGflash3SensitiveDetector::~ExGflash3SensitiveDetector() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ExGflash3SensitiveDetector::Initialize(G4HCofThisEvent* HCE) { - if(fHCID<0){ fHCID = GetCollectionID(0); } - fCaloHitsCollection=new - ExGflashHitsCollection(SensitiveDetectorName,collectionName[0]); // first collection - HCE->AddHitsCollection( fHCID, fCaloHitsCollection ); + if (fHCID < 0) { + fHCID = GetCollectionID(0); + } + fCaloHitsCollection = + new ExGflashHitsCollection(SensitiveDetectorName, collectionName[0]); // first collection + HCE->AddHitsCollection(fHCID, fCaloHitsCollection); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void ExGflash3SensitiveDetector::EndOfEvent(G4HCofThisEvent*) -{} +void ExGflash3SensitiveDetector::EndOfEvent(G4HCofThisEvent*) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool ExGflash3SensitiveDetector::ProcessHits(G4Step* aStep,G4TouchableHistory* ROhist) +G4bool ExGflash3SensitiveDetector::ProcessHits(G4Step* aStep, G4TouchableHistory* ROhist) { - G4double e=aStep->GetTotalEnergyDeposit(); - if(e<=0.)return false; - - G4TouchableHistory* theTouchable - = (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable()); - + G4double e = aStep->GetTotalEnergyDeposit(); + if (e <= 0.) return false; + + auto theTouchable = (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable()); + // enrgy deposited -> make Hit - //const G4VPhysicalVolume* physVol= aStep->GetPreStepPoint()->GetPhysicalVolume(); - //G4TouchableHistory* theTouchable = + // const G4VPhysicalVolume* physVol= aStep->GetPreStepPoint()->GetPhysicalVolume(); + // G4TouchableHistory* theTouchable = // (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable()); - ExGflashHit* caloHit=new ExGflashHit(); + auto caloHit = new ExGflashHit(); caloHit->SetEdep(e); caloHit->SetPos(aStep->GetPreStepPoint()->GetPosition()); fCaloHitsCollection->insert(caloHit); - if (ROhist){;} + if (ROhist) { + ; + } G4VPhysicalVolume* physVol = theTouchable->GetVolume(); - G4int crystalnum=0; - for(int i=0;i<100;i++) //@@@@@@@ ExGflash3SensitiveDetector:vorsichty - { - if(physVol == fDetector->GetCristal(i)) crystalnum= i; - } + G4int crystalnum = 0; + for (int i = 0; i < 100; i++) //@@@@@@@ ExGflash3SensitiveDetector:vorsichty + { + if (physVol == fDetector->GetCristal(i)) crystalnum = i; + } caloHit->SetCrystalNum(crystalnum); - + return true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // Separate GFLASH interface -G4bool ExGflash3SensitiveDetector::ProcessHits(G4GFlashSpot*aSpot ,G4TouchableHistory* ROhist) -{ //cout<<"This is ProcessHits GFLASH"<GetEnergySpot()->GetEnergy(); - if(e<=0.)return false; - +G4bool ExGflash3SensitiveDetector::ProcessHits(G4GFlashSpot* aSpot, G4TouchableHistory* ROhist) +{ // cout<<"This is ProcessHits GFLASH"<GetEnergySpot()->GetEnergy(); + if (e <= 0.) return false; + G4VPhysicalVolume* pCurrentVolume = aSpot->GetTouchableHandle()->GetVolume(); - - ExGflashHit* caloHit=new ExGflashHit(); + + auto caloHit = new ExGflashHit(); caloHit->SetEdep(e); caloHit->SetPos(aSpot->GetEnergySpot()->GetPosition()); fCaloHitsCollection->insert(caloHit); - if (ROhist){;} - //cout <GetName() << endl; - G4int crystalnum=0; - for(int i=0;i<100;i++) //@@@@@@@ ExGflash3SensitiveDetector:vorsichty - { - if(pCurrentVolume == fDetector->GetCristal(i)) crystalnum= i; - } + if (ROhist) { + ; + } + // cout <GetName() << endl; + G4int crystalnum = 0; + for (int i = 0; i < 100; i++) //@@@@@@@ ExGflash3SensitiveDetector:vorsichty + { + if (pCurrentVolume == fDetector->GetCristal(i)) crystalnum = i; + } caloHit->SetCrystalNum(crystalnum); - + return true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - diff --git a/examples/extended/parameterisations/gflash/gflash3/src/ExGflashActionInitialization.cc b/examples/extended/parameterisations/gflash/gflash3/src/ExGflashActionInitialization.cc index 2c97e6ff6d9..f1725e20432 100644 --- a/examples/extended/parameterisations/gflash/gflash3/src/ExGflashActionInitialization.cc +++ b/examples/extended/parameterisations/gflash/gflash3/src/ExGflashActionInitialization.cc @@ -28,22 +28,18 @@ /// \brief Implementation of the ExGflashActionInitialization class #include "ExGflashActionInitialization.hh" + +#include "ExGflashEventAction.hh" #include "ExGflashPrimaryGeneratorAction.hh" #include "ExGflashRunAction.hh" -#include "ExGflashEventAction.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashActionInitialization::ExGflashActionInitialization() - : G4VUserActionInitialization() -{ -} +ExGflashActionInitialization::ExGflashActionInitialization() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashActionInitialization::~ExGflashActionInitialization() -{ -} +ExGflashActionInitialization::~ExGflashActionInitialization() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -59,6 +55,6 @@ void ExGflashActionInitialization::Build() const SetUserAction(new ExGflashPrimaryGeneratorAction); SetUserAction(new ExGflashRunAction); SetUserAction(new ExGflashEventAction); -} +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/parameterisations/gflash/gflash3/src/ExGflashEventAction.cc b/examples/extended/parameterisations/gflash/gflash3/src/ExGflashEventAction.cc index f8bfb58fd0c..6e989a86c9c 100644 --- a/examples/extended/parameterisations/gflash/gflash3/src/ExGflashEventAction.cc +++ b/examples/extended/parameterisations/gflash/gflash3/src/ExGflashEventAction.cc @@ -29,191 +29,170 @@ // // Created by Joanna Weng 26.11.2004 - #include "ExGflashEventAction.hh" + #include "ExGflashHit.hh" + +#include "G4Event.hh" #include "G4EventManager.hh" #include "G4SDManager.hh" -#include "G4UImanager.hh" -#include "G4TrajectoryContainer.hh" -#include "G4Event.hh" #include "G4SystemOfUnits.hh" -//std -#include +#include "G4TrajectoryContainer.hh" +#include "G4UImanager.hh" +// std #include -//Gflash +#include +// Gflash using namespace std; - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashEventAction::ExGflashEventAction() - : G4UserEventAction(), - fNevent(0),fDtime(0.0),fCalorimeterCollectionId(-1) -{ -} +ExGflashEventAction::ExGflashEventAction() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ExGflashEventAction::~ExGflashEventAction() { - if ( fNevent > 0 ) { - G4cout << "Internal Real Elapsed Time /event is: "<< fDtime /fNevent<< G4endl; + if (fNevent > 0) { + G4cout << "Internal Real Elapsed Time /event is: " << fDtime / fNevent << G4endl; } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void ExGflashEventAction::BeginOfEventAction(const G4Event *evt) +void ExGflashEventAction::BeginOfEventAction(const G4Event* evt) { fTimerIntern.Start(); - G4cout<<" ------ Start ExGflashEventAction ----- "<GetEventID(); - G4cout<<" Start generating event Nr "<GetEventID(); + G4cout << " Start generating event Nr " << fNevent << G4endl << G4endl; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void ExGflashEventAction::EndOfEventAction(const G4Event *evt) -{ +void ExGflashEventAction::EndOfEventAction(const G4Event* evt) +{ fTimerIntern.Stop(); G4cout << G4endl; G4cout << "******************************************"; G4cout << G4endl; - G4cout << "Internal Real Elapsed Time is: "<< fTimerIntern.GetRealElapsed(); + G4cout << "Internal Real Elapsed Time is: " << fTimerIntern.GetRealElapsed(); G4cout << G4endl; G4cout << "Internal System Elapsed Time: " << fTimerIntern.GetSystemElapsed(); G4cout << G4endl; G4cout << "Internal GetUserElapsed Time: " << fTimerIntern.GetUserElapsed(); G4cout << G4endl; - G4cout << "******************************************"<< G4endl; - fDtime+=fTimerIntern.GetRealElapsed(); - G4cout<<" ------ ExGflashEventAction::End of event nr. "<GetCollectionID(colNam="ExGflashCollection"); - if (fCalorimeterCollectionId<0) return; - G4HCofThisEvent * HCE = evt->GetHCofThisEvent(); - ExGflashHitsCollection* THC = 0; + fCalorimeterCollectionId = SDman->GetCollectionID(colNam = "ExGflashCollection"); + if (fCalorimeterCollectionId < 0) return; + G4HCofThisEvent* HCE = evt->GetHCofThisEvent(); + ExGflashHitsCollection* THC = nullptr; G4double totE = 0; // Read out of the crysta ECAL - THC=(ExGflashHitsCollection *)(HCE->GetHC(fCalorimeterCollectionId)); - if (THC) - { - /// Hits in sensitive Detector - int n_hit = THC->entries(); - G4cout<<" " << n_hit<< " hits are stored in ExGflashHitsCollection "<GetPrimaryVertex(); - ///Computing (x,y,z) of vertex of initial particles - G4ThreeVector vtx=pvertex->GetPosition(); - G4PrimaryParticle* pparticle=pvertex->GetPrimary(); + THC = (ExGflashHitsCollection*)(HCE->GetHC(fCalorimeterCollectionId)); + if (THC) { + /// Hits in sensitive Detector + int n_hit = THC->entries(); + G4cout << " " << n_hit << " hits are stored in ExGflashHitsCollection " << G4endl; + G4PrimaryVertex* pvertex = evt->GetPrimaryVertex(); + /// Computing (x,y,z) of vertex of initial particles + G4ThreeVector vtx = pvertex->GetPosition(); + G4PrimaryParticle* pparticle = pvertex->GetPrimary(); // direction of the Shower - G4ThreeVector mom=pparticle->GetMomentum()/pparticle->GetMomentum().mag(); - + G4ThreeVector mom = pparticle->GetMomentum() / pparticle->GetMomentum().mag(); + //@@@ ExGflashEventAction: Magicnumber G4double energyincrystal[100]; G4int hitsincrystal[100]; - for (int i=0;i<100;i++) energyincrystal[i]=0.; - for (int i=0;i<100;i++) hitsincrystal[i]=0.; - + for (int i = 0; i < 100; i++) + energyincrystal[i] = 0.; + for (int i = 0; i < 100; i++) + hitsincrystal[i] = 0.; + //@@@ ExGflashEventAction: Magicnumber /// For all Hits in sensitive detector - for (int i=0;iGetEdep()/GeV; - if (estep >0.0) - { - totE += (*THC)[i]->GetEdep()/GeV; - G4int num=(*THC)[i]->GetCrystalNum(); - - energyincrystal[num]+=(*THC)[i]->GetEdep()/GeV; - hitsincrystal[num]++; - //G4cout << num << G4endl; - // G4cout << " Crystal Nummer " << (*THC)[i]->GetCrystalNum() << G4endl; - // G4cout << (*THC)[i]->GetCrystalNum() /10 << - // " "<<(*THC)[i]->GetCrystalNum()%10 << G4endl; - - G4ThreeVector hitpos=(*THC)[i]->GetPos(); - G4ThreeVector l (hitpos.x(), hitpos.y(), hitpos.z()); - // distance from shower start - l = l - vtx; - // projection on shower axis = longitudinal profile - G4ThreeVector longitudinal = l; - // shower profiles (Radial) - G4ThreeVector radial = vtx.cross(l); - } + for (int i = 0; i < n_hit; i++) { + G4double estep = (*THC)[i]->GetEdep() / GeV; + if (estep > 0.0) { + totE += (*THC)[i]->GetEdep() / GeV; + G4int num = (*THC)[i]->GetCrystalNum(); + + energyincrystal[num] += (*THC)[i]->GetEdep() / GeV; + hitsincrystal[num]++; + // G4cout << num << G4endl; + // G4cout << " Crystal Nummer " << (*THC)[i]->GetCrystalNum() << G4endl; + // G4cout << (*THC)[i]->GetCrystalNum() /10 << + // " "<<(*THC)[i]->GetCrystalNum()%10 << G4endl; + + G4ThreeVector hitpos = (*THC)[i]->GetPos(); + G4ThreeVector l(hitpos.x(), hitpos.y(), hitpos.z()); + // distance from shower start + l = l - vtx; + // projection on shower axis = longitudinal profile + G4ThreeVector longitudinal = l; + // shower profiles (Radial) + G4ThreeVector radial = vtx.cross(l); } - G4double max = 0; - G4int index = 0; - //Find crystal with maximum energy - for (int i=0;i<100;i++) - { - //G4cout << i <<" " << energyincrystal[i] << G4endl; - if (max GetTrajectoryContainer(); + G4TrajectoryContainer* trajectoryContainer = evt->GetTrajectoryContainer(); G4int n_trajectories = 0; - if(trajectoryContainer){ n_trajectories = trajectoryContainer->entries(); } - G4cout << " " << n_trajectories << " trajectories stored in this event." << G4endl; - + if (trajectoryContainer) { + n_trajectories = trajectoryContainer->entries(); + } + G4cout << " " << n_trajectories << " trajectories stored in this event." << G4endl; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - - - - - - - - - - - - - diff --git a/examples/extended/parameterisations/gflash/gflash3/src/ExGflashHit.cc b/examples/extended/parameterisations/gflash/gflash3/src/ExGflashHit.cc index 333fde878b4..9ebcda15e88 100644 --- a/examples/extended/parameterisations/gflash/gflash3/src/ExGflashHit.cc +++ b/examples/extended/parameterisations/gflash/gflash3/src/ExGflashHit.cc @@ -30,42 +30,36 @@ #include "ExGflashHit.hh" -#include "G4VVisManager.hh" #include "G4Colour.hh" -#include "G4VisAttributes.hh" #include "G4LogicalVolume.hh" #include "G4Transform3D.hh" +#include "G4VVisManager.hh" +#include "G4VisAttributes.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4ThreadLocal G4Allocator* ExGflashHitAllocator=0; +G4ThreadLocal G4Allocator* ExGflashHitAllocator = nullptr; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashHit::ExGflashHit() -: G4VHit(), fLogV(0) -{} +ExGflashHit::ExGflashHit() : fLogV(nullptr) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashHit::ExGflashHit(G4LogicalVolume* logVol) -: G4VHit(), fLogV(logVol) -{} +ExGflashHit::ExGflashHit(G4LogicalVolume* logVol) : fLogV(logVol) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashHit::~ExGflashHit() -{} +ExGflashHit::~ExGflashHit() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashHit::ExGflashHit(const ExGflashHit &right) -: G4VHit(right) +ExGflashHit::ExGflashHit(const ExGflashHit& right) : G4VHit(right) //@@@ ExGflashHit:Is it right with the init? { fEdep = right.fEdep; - fPos = right.fPos; - fStart =right.fStart; + fPos = right.fPos; + fStart = right.fStart; fRot = right.fRot; fLogV = right.fLogV; fCrystalNumber = right.fCrystalNumber; @@ -73,11 +67,11 @@ ExGflashHit::ExGflashHit(const ExGflashHit &right) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -const ExGflashHit & ExGflashHit::operator=(const ExGflashHit &right) +const ExGflashHit& ExGflashHit::operator=(const ExGflashHit& right) { G4VHit::operator=(right); fEdep = right.fEdep; - fStart =right.fStart; + fStart = right.fStart; fPos = right.fPos; fRot = right.fRot; fLogV = right.fLogV; @@ -88,12 +82,13 @@ const ExGflashHit & ExGflashHit::operator=(const ExGflashHit &right) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool ExGflashHit::operator==(const ExGflashHit &right) const +G4bool ExGflashHit::operator==(const ExGflashHit& right) const { -// @@@@ return false; - if ((fPos==right.fPos) && (fEdep == right.fEdep)) return true; - else return false; - + // @@@@ return false; + if ((fPos == right.fPos) && (fEdep == right.fEdep)) + return true; + else + return false; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -101,31 +96,21 @@ G4bool ExGflashHit::operator==(const ExGflashHit &right) const void ExGflashHit::Draw() { G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); - if(pVVisManager) - { - G4Transform3D trans(fRot,fPos); + if (pVVisManager) { + G4Transform3D trans(fRot, fPos); G4VisAttributes attribs; const G4VisAttributes* pVA = fLogV->GetVisAttributes(); - if(pVA) attribs = *pVA; - G4Colour colour(1.,0.,0.); + if (pVA) attribs = *pVA; + G4Colour colour(1., 0., 0.); attribs.SetColour(colour); attribs.SetForceWireframe(false); attribs.SetForceSolid(true); - pVVisManager->Draw(*fLogV,attribs,trans); + pVVisManager->Draw(*fLogV, attribs, trans); } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void ExGflashHit::Print() -{} +void ExGflashHit::Print() {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - - - - - - - - diff --git a/examples/extended/parameterisations/gflash/gflash3/src/ExGflashPrimaryGeneratorAction.cc b/examples/extended/parameterisations/gflash/gflash3/src/ExGflashPrimaryGeneratorAction.cc index 9b1aaa6e7df..d61402990e2 100644 --- a/examples/extended/parameterisations/gflash/gflash3/src/ExGflashPrimaryGeneratorAction.cc +++ b/examples/extended/parameterisations/gflash/gflash3/src/ExGflashPrimaryGeneratorAction.cc @@ -29,15 +29,14 @@ // #include "ExGflashPrimaryGeneratorAction.hh" -#include "G4GeneralParticleSource.hh" #include "G4Event.hh" +#include "G4GeneralParticleSource.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ExGflashPrimaryGeneratorAction::ExGflashPrimaryGeneratorAction() - : G4VUserPrimaryGeneratorAction(), fParticleGun(0) { - fParticleGun=new G4GeneralParticleSource; + fParticleGun = new G4GeneralParticleSource; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -50,7 +49,7 @@ ExGflashPrimaryGeneratorAction::~ExGflashPrimaryGeneratorAction() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ExGflashPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) -{ +{ fParticleGun->GeneratePrimaryVertex(anEvent); } diff --git a/examples/extended/parameterisations/gflash/gflash3/src/ExGflashRunAction.cc b/examples/extended/parameterisations/gflash/gflash3/src/ExGflashRunAction.cc index 27350a725b6..94c387e55dd 100644 --- a/examples/extended/parameterisations/gflash/gflash3/src/ExGflashRunAction.cc +++ b/examples/extended/parameterisations/gflash/gflash3/src/ExGflashRunAction.cc @@ -28,46 +28,32 @@ /// \brief Implementation of the ExGflashRunAction class // #include "ExGflashRunAction.hh" + #include "G4Run.hh" #include "G4ios.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashRunAction::ExGflashRunAction() - : G4UserRunAction(), fRunID(0) -{} +ExGflashRunAction::ExGflashRunAction() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashRunAction::~ExGflashRunAction() -{} +ExGflashRunAction::~ExGflashRunAction() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ExGflashRunAction::BeginOfRunAction(const G4Run* aRun) -{ - ((G4Run *)(aRun))->SetRunID(fRunID++); - - G4cout << "### Run " << aRun->GetRunID() << " start." << G4endl; +{ + ((G4Run*)(aRun))->SetRunID(fRunID++); + + G4cout << "### Run " << aRun->GetRunID() << " start." << G4endl; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void ExGflashRunAction::EndOfRunAction(const G4Run* aRun) -{ +{ G4cout << "number of event = " << aRun->GetNumberOfEvent() << G4endl; - } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - - - - - - - - - - - diff --git a/examples/extended/parameterisations/gflash/gflash3/test.out b/examples/extended/parameterisations/gflash/gflash3/test.out index 76bb2a71730..e979bef58cd 100644 --- a/examples/extended/parameterisations/gflash/gflash3/test.out +++ b/examples/extended/parameterisations/gflash/gflash3/test.out @@ -16,7 +16,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -53,7 +53,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -229,7 +231,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -261,7 +263,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -293,7 +295,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -306,7 +308,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -352,7 +353,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -384,7 +385,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -416,7 +417,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -448,7 +449,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -480,7 +481,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -512,7 +513,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -544,7 +545,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -929,12 +930,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -959,7 +969,7 @@ See commands in /vis/modeling/trajectories/ for other options. ****************************************** -Internal Real Elapsed Time is: 0.0125632 +Internal Real Elapsed Time is: 0.0112462 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -974,9 +984,9 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00816273 +Internal Real Elapsed Time is: 0.00761703 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0 +Internal GetUserElapsed Time: 0.01 ****************************************** ------ ExGflashEventAction::End of event nr. 1 ----- 11979 hits are stored in ExGflashHitsCollection @@ -989,7 +999,7 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00799 +Internal Real Elapsed Time is: 0.00703841 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -1004,9 +1014,9 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00805504 +Internal Real Elapsed Time is: 0.0076913 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0.01 +Internal GetUserElapsed Time: 0 ****************************************** ------ ExGflashEventAction::End of event nr. 3 ----- 11984 hits are stored in ExGflashHitsCollection @@ -1019,7 +1029,7 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00790175 +Internal Real Elapsed Time is: 0.00696044 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -1034,7 +1044,7 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00812207 +Internal Real Elapsed Time is: 0.00802462 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -1049,7 +1059,7 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00800513 +Internal Real Elapsed Time is: 0.00704753 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0 ****************************************** @@ -1064,9 +1074,9 @@ Internal GetUserElapsed Time: 0 ****************************************** -Internal Real Elapsed Time is: 0.00801215 +Internal Real Elapsed Time is: 0.00698646 Internal System Elapsed Time: 0 -Internal GetUserElapsed Time: 0.01 +Internal GetUserElapsed Time: 0 ****************************************** ------ ExGflashEventAction::End of event nr. 7 ----- 11876 hits are stored in ExGflashHitsCollection @@ -1079,7 +1089,7 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00803614 +Internal Real Elapsed Time is: 0.00703536 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -1094,7 +1104,7 @@ Internal GetUserElapsed Time: 0.01 ****************************************** -Internal Real Elapsed Time is: 0.00804478 +Internal Real Elapsed Time is: 0.00699637 Internal System Elapsed Time: 0 Internal GetUserElapsed Time: 0.01 ****************************************** @@ -1107,10 +1117,10 @@ Internal GetUserElapsed Time: 0.01 number of event = 10 Graphics systems deleted. Visualization Manager deleting... -Internal Real Elapsed Time /event is: 0.00943255 +Internal Real Elapsed Time /event is: 0.00851597 ****************************************** -Total Real Elapsed Time is: 2.85631 -Total System Elapsed Time: 0.12 -Total GetUserElapsed Time: 2.55 +Total Real Elapsed Time is: 2.9304 +Total System Elapsed Time: 0.1 +Total GetUserElapsed Time: 2.37 ****************************************** diff --git a/examples/extended/parameterisations/gflash/gflash3/vis.mac b/examples/extended/parameterisations/gflash/gflash3/vis.mac index 95df0f235e0..c1abea40084 100644 --- a/examples/extended/parameterisations/gflash/gflash3/vis.mac +++ b/examples/extended/parameterisations/gflash/gflash3/vis.mac @@ -79,6 +79,4 @@ # /tracking/verbose 0 /GFlash/flag 1 -/run/beamOn 2 - - +#/run/beamOn 2 diff --git a/examples/extended/parameterisations/gflash/gflasha/.README.txt b/examples/extended/parameterisations/gflash/gflasha/.README.txt index eacc14e9262..415f437da95 100644 --- a/examples/extended/parameterisations/gflash/gflasha/.README.txt +++ b/examples/extended/parameterisations/gflash/gflasha/.README.txt @@ -18,6 +18,22 @@ include/ExGflashHomoShowerTuning.hh in this example. +\section gflasha_s0 Physics List + + +The Physics list factory is used in this example. +The default physics list is FTFP_BERT which has EM opt0. +Additionally the G4FastSimulationPhysics physics +constructor was created to insert the G4FastSimulationManagerProcess +that is making the interface between the fast simulation and the tracking. + +THe default PHYSICS list may be changed via setting of the PHYSLIST environment +variable, e.g: + +\verbatim +export PHYSLIST=FTFP_BERT_EMZ # for FTFP_BERT with opt 4 EM physics +\endverbatim + \section gflasha_s1 Geometry Definition In this example the calorimeter is a simple cube, @@ -29,18 +45,18 @@ Geometry, sensitive detector and hits are defined respectively in: - ExGflashHit Materials can be choosen from Nist Materials: G4_Air G4_WATER ... -eg: +eg: \verbatim -/exgflash/det/setMat G4_PbWO4 +/exgflash/det/setMat G4_PbWO4 \endverbatim -see also: csi1.mac +see also: csi1.mac \section gflasha_s2 Hit Scoring The virtual cylinder sliced longitudinally (slice) and radially (ring) was used. -The size of the slices and rings are expressed in radiation +The size of the slices and rings are expressed in radiation length units and can be changed. -eg: +eg: \verbatim /exgflash/det/setLbin 20 1. ---> 20 slices of 1. radl /exgflash/det/setRbin 5 0.25 ---> 5 rings of 0.25 radl @@ -110,7 +126,7 @@ 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 diff --git a/examples/extended/parameterisations/gflash/gflasha/CMakeLists.txt b/examples/extended/parameterisations/gflash/gflasha/CMakeLists.txt index 028311fa1fc..69c13c92b22 100644 --- a/examples/extended/parameterisations/gflash/gflasha/CMakeLists.txt +++ b/examples/extended/parameterisations/gflash/gflasha/CMakeLists.txt @@ -40,7 +40,7 @@ target_link_libraries(ExGflasha ${Geant4_LIBRARIES} ) # relies on these scripts being in the current working directory. # set(gflash_SCRIPTS - test.mac test0.mac test1.mac vis.mac csi1.mac run01.mac cmpL.C cmpR.C + test.mac test0.mac test1.mac vis.mac csi1.mac run01.mac cmpL.C cmpR.C cmpE.C ) foreach(_script ${gflash_SCRIPTS}) diff --git a/examples/extended/parameterisations/gflash/gflasha/ExGflasha.cc b/examples/extended/parameterisations/gflash/gflasha/ExGflasha.cc index f227478af2f..058fdae686e 100644 --- a/examples/extended/parameterisations/gflash/gflasha/ExGflasha.cc +++ b/examples/extended/parameterisations/gflash/gflasha/ExGflasha.cc @@ -30,20 +30,18 @@ // Created by Joanna Weng 26.11.2004 // G4 includes +#include "G4PhysListFactory.hh" +#include "G4RunManagerFactory.hh" #include "G4Timer.hh" #include "G4Types.hh" #include "G4UImanager.hh" #include "G4ios.hh" -#include "G4RunManagerFactory.hh" - // my project #include "ExGflashActionInitialization.hh" #include "ExGflashDetectorConstruction.hh" -#include "FTFP_BERT.hh" #include "G4FastSimulationPhysics.hh" - #include "G4UIExecutive.hh" #include "G4VisExecutive.hh" @@ -53,7 +51,7 @@ int main(int argc, char** argv) { // Instantiate G4UIExecutive if interactive mode G4UIExecutive* ui = nullptr; - if ( argc == 1 ) { + if (argc == 1) { ui = new G4UIExecutive(argc, argv); } @@ -61,16 +59,11 @@ int main(int argc, char** argv) G4Timer timer; timer.Start(); - G4cout << "+-------------------------------------------------------+" - << G4endl; - G4cout << "| |" - << G4endl; - G4cout << "| This is an example of Shower |" - << G4endl; - G4cout << "| Parameterization with GFLASH |" - << G4endl; - G4cout << "+-------------------------------------------------------+" - << G4endl; + G4cout << "+-------------------------------------------------------+" << G4endl; + G4cout << "| |" << G4endl; + G4cout << "| This is an example of Shower |" << G4endl; + G4cout << "| Parameterization with GFLASH |" << G4endl; + G4cout << "+-------------------------------------------------------+" << G4endl; auto* runManager = G4RunManagerFactory::CreateRunManager(); @@ -79,7 +72,16 @@ int main(int argc, char** argv) runManager->SetUserInitialization(detector); // -- Select a physics list: - G4VModularPhysicsList* physicsList = new FTFP_BERT(); + G4PhysListFactory listFactory; + G4String name; + auto list_name = std::getenv("PHYSLIST"); + if (list_name == nullptr || std::strlen(list_name) == 0 ) { + name = "FTFP_BERT"; + } else { + name = list_name; + } + G4VModularPhysicsList* physicsList = listFactory.GetReferencePhysList(name); + // -- Create a fast simulation physics constructor, used to augment // -- the above physics list to allow for fast simulation: auto fastSimulationPhysics = new G4FastSimulationPhysics(); @@ -111,7 +113,7 @@ int main(int argc, char** argv) runManager->Initialize(); UImanager->ApplyCommand("/Step/Verbose 0"); - if ( ui != nullptr ) // Define UI terminal for interactive mode + if (ui != nullptr) // Define UI terminal for interactive mode { UImanager->ApplyCommand("/control/execute vis.mac"); ui->SessionStart(); diff --git a/examples/extended/parameterisations/gflash/gflasha/README b/examples/extended/parameterisations/gflash/gflasha/README index 36baeee3c38..755b31017cd 100644 --- a/examples/extended/parameterisations/gflash/gflasha/README +++ b/examples/extended/parameterisations/gflash/gflasha/README @@ -2,7 +2,7 @@ Geant4 - an Object-Oriented Toolkit for Simulation in HEP ========================================================= - GFLASHa Example + GFLASHa Example --------------- The Example demonstrating usage 'gflash' shower parameterisation @@ -19,8 +19,23 @@ include/ExGflashHomoShowerTuning.hh in this example. +PHYSICS LIST +------------ + +The Physics list factory is used in this example. +The default physics list is FTFP_BERT which has EM opt0. +Additionally the G4FastSimulationPhysics physics +constructor was created to insert the G4FastSimulationManager Process +that is making the interface between the fast simulation and the tracking. + +THe default PHYSICS list may be changed via setting of the PHYSLIST environment +variable, e.g: + +export PHYSLIST=FTFP_BERT_EMZ # for FTFP_BERT with opt 4 EM physics + + GEOMETRY DEFINITION -------------------- +------------------- In this example the calorimeter is a simple cube, which consists of 10 x 10 crystals of PbWO4 (CMS like). @@ -31,25 +46,25 @@ Geometry, sensitive detector and hits are defined respectively in: ExGflashHit Materials can be choosen from Nist Materials: G4_Air G4_WATER ... -eg: /exgflash/det/setMat G4_PbWO4 see also: csi1.mac +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 +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) + (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/... @@ -103,7 +118,7 @@ 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 diff --git a/examples/extended/parameterisations/gflash/gflasha/cmpE.C b/examples/extended/parameterisations/gflash/gflasha/cmpE.C new file mode 100644 index 00000000000..e8eaa6e9e6c --- /dev/null +++ b/examples/extended/parameterisations/gflash/gflasha/cmpE.C @@ -0,0 +1,74 @@ +// Draw Longitudinal Shower Profile + +#include "TH1D.h" +#include "TFile.h" +#include "THStack.h" +#include "TCanvas.h" +#include "TString.h" +#include "TLegend.h" + +TCanvas* cmpE() +{ + // TString dataDir("/net/llrdata1.in2p3.fr/data/DATA/data.harpo/BH5D/"); + TString dataDir("./"); + + TString dataFile[2]; + dataFile[0] = "gflash00.root"; + dataFile[1] = "gflash01.root"; + + TFile* f[2]; + TH1D* p[2]; + // UInt_t col[] = { kRed, kBlue, kGreen, kViolet }; + UInt_t col[] = {kRed, kGreen, kBlue, kViolet}; + // UInt_t mark[] = { 20, 32, 21, 22}; + UInt_t mark[] = {20, 21, 32, 22}; + // + THStack* hs = new THStack("hs", ""); + + for ( UInt_t i = 0; i < 2; i++ ) { + TString tmp = dataDir + dataFile[i]; + f[i] = TFile::Open(tmp); + if ( ! f[i] ) return 0; + p[i] = (TH1D*)(f[i])->Get("h0"); + // ShiftUp(p[i],0.0); + // histogram + p[i]->SetFillColor(col[i]); + p[i]->SetLineStyle(i + 2); + p[i]->SetLineColor(col[i]); + p[i]->SetLineWidth(2); + p[i]->SetMarkerStyle(mark[i]); + p[i]->SetMarkerColor(col[i]); + p[i]->SetMarkerSize(1.5); + hs->Add(p[i]); + } + TCanvas* cst = new TCanvas("cst", "stacked hists", 10, 10, 800, 700); + // gPad->SetGrid(); + hs->Draw("p,nostack"); + hs->SetTitle("Total Energy"); + hs->GetXaxis()->SetTitle("E/E_{tot} (%)"); + // hs->GetYaxis()->SetTitle("No of events"); + + cst->RedrawAxis(); + cst->Update(); + + TLegend* legend = new TLegend(0.65, 0.84, 0.94, 0.94); + legend->AddEntry(p[0], + Form("full - E %5.3f #sigma %5.3f",p[0]->GetMean(),p[0]->GetRMS()),"p"); + legend->AddEntry(p[1], + Form("gflash - E %5.3f #sigma %5.3f",p[1]->GetMean(),p[1]->GetRMS()),"p"); + legend->Draw(); + cst->Update(); + + // img->FromPad(c, 10, 10, 300, 200); + + // TImage *img = TImage::Create(); + + // img->FromPad(cst); + + // img->WriteImage("hist0-640MeV-p.png"); + + // for (UInt_t i = 0; i < 4; i++) { + // f[i]->Close(); + // } + return cst; +} diff --git a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashActionInitialization.hh b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashActionInitialization.hh index b1616a79c4b..a55f2b31ba2 100644 --- a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashActionInitialization.hh +++ b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashActionInitialization.hh @@ -38,15 +38,15 @@ class ExGflashDetectorConstruction; class ExGflashActionInitialization : public G4VUserActionInitialization { - public: - ExGflashActionInitialization(ExGflashDetectorConstruction* det); - ~ExGflashActionInitialization() override; + public: + ExGflashActionInitialization(ExGflashDetectorConstruction* det); + ~ExGflashActionInitialization() override; - void BuildForMaster() const override; - void Build() const override; + void BuildForMaster() const override; + void Build() const override; - private: - ExGflashDetectorConstruction* fDetector; + private: + ExGflashDetectorConstruction* fDetector; }; #endif diff --git a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashDetectorConstruction.hh b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashDetectorConstruction.hh index ba98aeb46af..d2391b3bd27 100644 --- a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashDetectorConstruction.hh +++ b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashDetectorConstruction.hh @@ -30,6 +30,7 @@ #define ExGflashDetectorConstruction_h 1 #include "ExGflashSensitiveDetector.hh" + #include "G4Cache.hh" #include "G4ThreeVector.hh" #include "G4VUserDetectorConstruction.hh" @@ -48,68 +49,50 @@ class ExGflashMessenger; class ExGflashDetectorConstruction : public G4VUserDetectorConstruction { - public: - ExGflashDetectorConstruction(); - ~ExGflashDetectorConstruction() override; - - G4VPhysicalVolume* Construct() override; - void ConstructSDandField() override; - - void SetLBining(G4ThreeVector); - void SetRBining(G4ThreeVector); - void SetVerbose(G4int val) { fVerbose = val; } - - void SetMaterial(G4String mat); - - G4int GetVerbose() const - { - return fVerbose; - } - - G4int GetnLtot() const - { - return fNLtot; - } - G4int GetnRtot() const - { - return fNRtot; - } - G4double GetdLradl() const - { - return fDLradl; - } - G4double GetdRradl() const - { - return fDRradl; - } - - G4double GetSDRadLen() const - { - return fSDRadLen; - } - - private: - G4int fNbOfCrystals; // cube of nb x nb crystals - - G4double fCrystalWidth; // x,y size - G4double fCrystalLength; // z size - - G4LogicalVolume* fCrystal_log; - G4Material* fDetMat; - G4Region* fRegion; - - G4double fSDRadLen; // SD material Rad Lenght - - G4int fVerbose; - G4int fNLtot, fNRtot; // nb of bins: longitudinal and radial - G4double fDLradl, fDRradl; // bin thickness (in radl unit) - - ExGflashMessenger* fGflashMessenger; - - static G4ThreadLocal GFlashShowerModel* fFastShowerModel; - static G4ThreadLocal GFlashHomoShowerParameterisation* fParameterisation; - static G4ThreadLocal GFlashParticleBounds* fParticleBounds; - static G4ThreadLocal GFlashHitMaker* fHitMaker; + public: + ExGflashDetectorConstruction(); + ~ExGflashDetectorConstruction() override; + + G4VPhysicalVolume* Construct() override; + void ConstructSDandField() override; + + void SetLBining(G4ThreeVector); + void SetRBining(G4ThreeVector); + void SetVerbose(G4int val) { fVerbose = val; } + + void SetMaterial(G4String mat); + + G4int GetVerbose() const { return fVerbose; } + + G4int GetnLtot() const { return fNLtot; } + G4int GetnRtot() const { return fNRtot; } + G4double GetdLradl() const { return fDLradl; } + G4double GetdRradl() const { return fDRradl; } + + G4double GetSDRadLen() const { return fSDRadLen; } + + private: + G4int fNbOfCrystals{10}; // cube of nb x nb crystals + + G4double fCrystalWidth; // x,y size + G4double fCrystalLength; // z size + + G4LogicalVolume* fCrystal_log{nullptr}; + G4Material* fDetMat{nullptr}; + G4Region* fRegion{nullptr}; + + G4double fSDRadLen; // SD material Rad Lenght + + G4int fVerbose{0}; + G4int fNLtot{40}, fNRtot{50}; // nb of bins: longitudinal and radial + G4double fDLradl{0.5}, fDRradl{0.1}; // bin thickness (in radl unit) + + ExGflashMessenger* fGflashMessenger; + + inline static G4ThreadLocal GFlashShowerModel* fFastShowerModel = nullptr; + inline static G4ThreadLocal GFlashHomoShowerParameterisation* fParameterisation = nullptr; + inline static G4ThreadLocal GFlashParticleBounds* fParticleBounds = nullptr; + inline static G4ThreadLocal GFlashHitMaker* fHitMaker = nullptr; }; #endif diff --git a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashEventAction.hh b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashEventAction.hh index 4c12603e10e..6c2424c3151 100644 --- a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashEventAction.hh +++ b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashEventAction.hh @@ -37,15 +37,15 @@ class ExGflashDetectorConstruction; class ExGflashEventAction : public G4UserEventAction { - public: - ExGflashEventAction(ExGflashDetectorConstruction* det); - ~ExGflashEventAction() override; + public: + ExGflashEventAction(ExGflashDetectorConstruction* det); + ~ExGflashEventAction() override; - void BeginOfEventAction(const G4Event*) override; - void EndOfEventAction(const G4Event*) override; + void BeginOfEventAction(const G4Event*) override; + void EndOfEventAction(const G4Event*) override; - private: - G4int fCalorimeterCollectionId; - ExGflashDetectorConstruction* fDet; + private: + G4int fCalorimeterCollectionId{-1}; + ExGflashDetectorConstruction* fDet; }; #endif diff --git a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashHistoManager.hh b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashHistoManager.hh index bc9500d92a7..d9dead9b098 100644 --- a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashHistoManager.hh +++ b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashHistoManager.hh @@ -39,23 +39,23 @@ class ExGflashDetectorConstruction; class ExGflashHistoManager { - public: - ExGflashHistoManager(ExGflashDetectorConstruction* myDet); - ~ExGflashHistoManager(); + public: + ExGflashHistoManager(ExGflashDetectorConstruction* myDet); + ~ExGflashHistoManager(); - void InitializePerEvent(); - // void FillPerEvent(); + void InitializePerEvent(); + // void FillPerEvent(); - // inline void FillPerTrack(G4double, G4double); - // inline void FillPerStep(G4double, G4int, G4int); + // inline void FillPerTrack(G4double, G4double); + // inline void FillPerStep(G4double, G4int, G4int); - private: - void Book(); - G4String fFileName; + private: + void Book(); + G4String fFileName; - ExGflashDetectorConstruction* fDet; + ExGflashDetectorConstruction* fDet; - G4int fVerbose; + G4int fVerbose; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashHit.hh b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashHit.hh index 6906e08b86d..d3d97f67e63 100644 --- a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashHit.hh +++ b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashHit.hh @@ -40,48 +40,33 @@ class G4LogicalVolume; class ExGflashHit : public G4VHit { - public: - ExGflashHit(); - ~ExGflashHit() override; - ExGflashHit(const ExGflashHit& right); - ExGflashHit& operator=(const ExGflashHit& right); - G4bool operator==(const ExGflashHit& right) const; + public: + ExGflashHit(); + ~ExGflashHit() override; + ExGflashHit(const ExGflashHit& right); + ExGflashHit& operator=(const ExGflashHit& right); + G4bool operator==(const ExGflashHit& right) const; - inline void* operator new(size_t); - inline void operator delete(void* aHit); - void* operator new(size_t, void* p) { return p; } + inline void* operator new(size_t); + inline void operator delete(void* aHit); + void* operator new(size_t, void* p) { return p; } #ifndef G4NOT_ISO_DELETES - void operator delete(void*, void*) {} + void operator delete(void*, void*) {} #endif - void Draw() override; - void Print() override; + void Draw() override; + void Print() override; - private: - G4double fEdep; - G4ThreeVector fPos; + private: + G4double fEdep; + G4ThreeVector fPos; - public: - void SetEdep(G4double de) - { - fEdep = de; - }; - void AddEdep(G4double de) - { - fEdep += de; - }; - G4double GetEdep() - { - return fEdep; - }; - void SetPos(G4ThreeVector xyz) - { - fPos = xyz; - }; - G4ThreeVector GetPos() - { - return fPos; - }; + public: + void SetEdep(G4double de) { fEdep = de; }; + void AddEdep(G4double de) { fEdep += de; }; + G4double GetEdep() { return fEdep; }; + void SetPos(G4ThreeVector xyz) { fPos = xyz; }; + G4ThreeVector GetPos() { return fPos; }; }; using ExGflashHitsCollection = G4THitsCollection; @@ -90,8 +75,7 @@ extern G4ThreadLocal G4Allocator* ExGflashHitAllocator; inline void* ExGflashHit::operator new(size_t) { - if ( ExGflashHitAllocator == nullptr ) - ExGflashHitAllocator = new G4Allocator; + if (ExGflashHitAllocator == nullptr) ExGflashHitAllocator = new G4Allocator; return (void*)ExGflashHitAllocator->MallocSingle(); } diff --git a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashHomoShowerTuning.hh b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashHomoShowerTuning.hh index 390f0517582..674d7779660 100644 --- a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashHomoShowerTuning.hh +++ b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashHomoShowerTuning.hh @@ -64,84 +64,83 @@ class ExGflashHomoShowerTuning : public GVFlashHomoShowerTuning { -public: - ExGflashHomoShowerTuning() = default; - ~ExGflashHomoShowerTuning() override = default; - -public: // with description - - G4double ParAveT1() override { return -0.812;} // t1 - G4double ParAveA1() override { return 0.81; } // a1 - G4double ParAveA2() override { return 0.458; } // a2 - G4double ParAveA3() override { return 2.26; } // a3 - - G4double ParSigLogT1() override { return -1.4;} // t1 - G4double ParSigLogT2() override { return 1.26;} // t2 - // std::sqrt(var(ln(T))) = 1/(t+t2*ln(y)) - - G4double ParSigLogA1() override { return -0.58;} // a1 - G4double ParSigLogA2() override { return 0.86; } // a2 - // std::sqrt(var(ln(alpha))) = 1/(a1+a2*ln(y)) - - G4double ParRho1() override { return 0.705; } // r1 - G4double ParRho2() override { return -0.023;} // r2 - // Correlation(ln(T),ln(alpha))=r1+r2*ln(y) - - // Radial profiles - // f(r) := (1/dE(t))(dE(t,r)/dr) - // Ansatz: - // f(r) = p(2*r*Rc**2)/(r**2+Rc**2)**2+(1-p)*(2*r*Rt**2)/(r**2+Rt**2)**2, - // 0 = alpha_s/beta_s - // Ts = (alpha_s-1)/beta_s - // and - // Ts = T*(t1+t2*Z) - // alpha_s = alpha*(a1+a2*Z) - - G4double ParSpotT1() override { return 0.698; } // t1 - G4double ParSpotT2() override { return 0.00212;} // t2 - - G4double ParSpotA1() override { return 0.639; } //a1 - G4double ParSpotA2() override { return 0.00334;} //a2 + public: + ExGflashHomoShowerTuning() = default; + ~ExGflashHomoShowerTuning() override = default; + + public: // with description + G4double ParAveT1() override { return -0.812; } // t1 + G4double ParAveA1() override { return 0.81; } // a1 + G4double ParAveA2() override { return 0.458; } // a2 + G4double ParAveA3() override { return 2.26; } // a3 + + G4double ParSigLogT1() override { return -1.4; } // t1 + G4double ParSigLogT2() override { return 1.26; } // t2 + // std::sqrt(var(ln(T))) = 1/(t+t2*ln(y)) + + G4double ParSigLogA1() override { return -0.58; } // a1 + G4double ParSigLogA2() override { return 0.86; } // a2 + // std::sqrt(var(ln(alpha))) = 1/(a1+a2*ln(y)) + + G4double ParRho1() override { return 0.705; } // r1 + G4double ParRho2() override { return -0.023; } // r2 + // Correlation(ln(T),ln(alpha))=r1+r2*ln(y) + + // Radial profiles + // f(r) := (1/dE(t))(dE(t,r)/dr) + // Ansatz: + // f(r) = p(2*r*Rc**2)/(r**2+Rc**2)**2+(1-p)*(2*r*Rt**2)/(r**2+Rt**2)**2, + // 0 = alpha_s/beta_s + // Ts = (alpha_s-1)/beta_s + // and + // Ts = T*(t1+t2*Z) + // alpha_s = alpha*(a1+a2*Z) + + G4double ParSpotT1() override { return 0.698; } // t1 + G4double ParSpotT2() override { return 0.00212; } // t2 + + G4double ParSpotA1() override { return 0.639; } // a1 + G4double ParSpotA2() override { return 0.00334; } // a2 }; #endif diff --git a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashMessenger.hh b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashMessenger.hh index 43bc86a52ab..dcac5372fef 100644 --- a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashMessenger.hh +++ b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashMessenger.hh @@ -46,21 +46,21 @@ class G4UIcmdWith3Vector; class ExGflashMessenger : public G4UImessenger { - public: - ExGflashMessenger(ExGflashDetectorConstruction*); - ~ExGflashMessenger() override; + public: + ExGflashMessenger(ExGflashDetectorConstruction*); + ~ExGflashMessenger() override; - void SetNewValue(G4UIcommand*, G4String) override; + void SetNewValue(G4UIcommand*, G4String) override; - private: - ExGflashDetectorConstruction* fDetector; + private: + ExGflashDetectorConstruction* fDetector; - G4UIdirectory* fExGflashDir; - G4UIcmdWithAnInteger* fVerbose; - G4UIdirectory* fDetDir; - G4UIcmdWithAString* fMaterCmd; - G4UIcmdWith3Vector* fLBinCmd; - G4UIcmdWith3Vector* fRBinCmd; + G4UIdirectory* fExGflashDir; + G4UIcmdWithAnInteger* fVerbose; + G4UIdirectory* fDetDir; + G4UIcmdWithAString* fMaterCmd; + G4UIcmdWith3Vector* fLBinCmd; + G4UIcmdWith3Vector* fRBinCmd; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashPrimaryGeneratorAction.hh b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashPrimaryGeneratorAction.hh index a8321759440..4f4a2cd17f5 100644 --- a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashPrimaryGeneratorAction.hh +++ b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashPrimaryGeneratorAction.hh @@ -37,14 +37,14 @@ class G4GeneralParticleSource; class ExGflashPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { - public: - ExGflashPrimaryGeneratorAction(); - ~ExGflashPrimaryGeneratorAction() override; + public: + ExGflashPrimaryGeneratorAction(); + ~ExGflashPrimaryGeneratorAction() override; - void GeneratePrimaries(G4Event* anEvent) override; + void GeneratePrimaries(G4Event* anEvent) override; - private: - G4GeneralParticleSource* fParticleGun; + private: + G4GeneralParticleSource* fParticleGun{nullptr}; }; #endif diff --git a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashRunAction.hh b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashRunAction.hh index 775027b1390..c99eab41132 100644 --- a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashRunAction.hh +++ b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashRunAction.hh @@ -31,6 +31,7 @@ #define ExGflashRunAction_h #include "ExGflashHistoManager.hh" + #include "G4Timer.hh" #include "G4UserRunAction.hh" @@ -39,19 +40,19 @@ class ExGflashDetectorConstruction; class ExGflashRunAction : public G4UserRunAction { - public: - ExGflashRunAction(ExGflashDetectorConstruction* det); - ~ExGflashRunAction() override; + public: + ExGflashRunAction(ExGflashDetectorConstruction* det); + ~ExGflashRunAction() override; - void BeginOfRunAction(const G4Run* aRun) override; - void EndOfRunAction(const G4Run* aRun) override; + void BeginOfRunAction(const G4Run* aRun) override; + void EndOfRunAction(const G4Run* aRun) override; - private: - // G4int fRunID; - ExGflashHistoManager* fHistoManager; - ExGflashDetectorConstruction* fDetector; + private: + // G4int fRunID; + ExGflashHistoManager* fHistoManager; + ExGflashDetectorConstruction* fDetector; - G4Timer fRunTimer; + G4Timer fRunTimer; }; #endif diff --git a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashSensitiveDetector.hh b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashSensitiveDetector.hh index e43b9d11e96..1b461675bf0 100644 --- a/examples/extended/parameterisations/gflash/gflasha/include/ExGflashSensitiveDetector.hh +++ b/examples/extended/parameterisations/gflash/gflasha/include/ExGflashSensitiveDetector.hh @@ -31,8 +31,9 @@ #define EXGFLASHSENSITIVEDETECTOR_H #include "ExGflashHit.hh" -#include "G4VSensitiveDetector.hh" + #include "G4VGFlashSensitiveDetector.hh" +#include "G4VSensitiveDetector.hh" #include "globals.hh" class G4GFlashSpot; @@ -42,23 +43,21 @@ class G4Step; class G4HCofThisEvent; class G4TouchableHistory; -class ExGflashSensitiveDetector - : public G4VSensitiveDetector - , public G4VGFlashSensitiveDetector +class ExGflashSensitiveDetector : public G4VSensitiveDetector, public G4VGFlashSensitiveDetector { - public: - ExGflashSensitiveDetector(G4String, ExGflashDetectorConstruction* det); - ~ExGflashSensitiveDetector() override; + public: + ExGflashSensitiveDetector(G4String, ExGflashDetectorConstruction* det); + ~ExGflashSensitiveDetector() override; - void Initialize(G4HCofThisEvent*) override; - G4bool ProcessHits(G4Step*, G4TouchableHistory*) override; - G4bool ProcessHits(G4GFlashSpot* aSpot, G4TouchableHistory*) override; - void EndOfEvent(G4HCofThisEvent*) override; + void Initialize(G4HCofThisEvent*) override; + G4bool ProcessHits(G4Step*, G4TouchableHistory*) override; + G4bool ProcessHits(G4GFlashSpot* aSpot, G4TouchableHistory*) override; + void EndOfEvent(G4HCofThisEvent*) override; - private: - ExGflashHitsCollection* fCaloHitsCollection; - // ExGflashDetectorConstruction* fDetector; - G4int fHCID; + private: + ExGflashHitsCollection* fCaloHitsCollection; + // ExGflashDetectorConstruction* fDetector; + G4int fHCID{-1}; }; #endif diff --git a/examples/extended/parameterisations/gflash/gflasha/src/ExGflashActionInitialization.cc b/examples/extended/parameterisations/gflash/gflasha/src/ExGflashActionInitialization.cc index 0b24c78b49c..de9da8b9ad4 100644 --- a/examples/extended/parameterisations/gflash/gflasha/src/ExGflashActionInitialization.cc +++ b/examples/extended/parameterisations/gflash/gflasha/src/ExGflashActionInitialization.cc @@ -28,15 +28,15 @@ /// \brief Implementation of the ExGflashActionInitialization class #include "ExGflashActionInitialization.hh" + #include "ExGflashEventAction.hh" #include "ExGflashPrimaryGeneratorAction.hh" #include "ExGflashRunAction.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashActionInitialization::ExGflashActionInitialization( - ExGflashDetectorConstruction* det) - : G4VUserActionInitialization(), fDetector(det) +ExGflashActionInitialization::ExGflashActionInitialization(ExGflashDetectorConstruction* det) + : fDetector(det) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/parameterisations/gflash/gflasha/src/ExGflashDetectorConstruction.cc b/examples/extended/parameterisations/gflash/gflasha/src/ExGflashDetectorConstruction.cc index 5bd60952aa3..ffcd75e5dcf 100644 --- a/examples/extended/parameterisations/gflash/gflasha/src/ExGflashDetectorConstruction.cc +++ b/examples/extended/parameterisations/gflash/gflasha/src/ExGflashDetectorConstruction.cc @@ -33,6 +33,7 @@ // User Classes #include "ExGflashDetectorConstruction.hh" + #include "ExGflashHomoShowerTuning.hh" #include "ExGflashMessenger.hh" #include "ExGflashSensitiveDetector.hh" @@ -54,21 +55,12 @@ #include "globals.hh" // fast simulation -#include "G4FastSimulationManager.hh" #include "GFlashHitMaker.hh" #include "GFlashHomoShowerParameterisation.hh" #include "GFlashParticleBounds.hh" #include "GFlashShowerModel.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4ThreadLocal GFlashShowerModel* - ExGflashDetectorConstruction::fFastShowerModel = nullptr; -G4ThreadLocal GFlashHomoShowerParameterisation* - ExGflashDetectorConstruction::fParameterisation = nullptr; -G4ThreadLocal GFlashParticleBounds* - ExGflashDetectorConstruction::fParticleBounds = nullptr; -G4ThreadLocal GFlashHitMaker* ExGflashDetectorConstruction::fHitMaker = nullptr; +#include "G4FastSimulationManager.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -77,22 +69,12 @@ const G4int kMaxBin = 500; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ExGflashDetectorConstruction::ExGflashDetectorConstruction() - : G4VUserDetectorConstruction(), - fNbOfCrystals(10), - fCrystal_log(nullptr), - fDetMat(nullptr), - fRegion(nullptr), - fVerbose(0), - fNLtot(40), - fNRtot(50), - fDLradl(0.5), - fDRradl(0.1) { G4cout << "ExGflashDetectorConstruction::Detector constructor" << G4endl; fGflashMessenger = new ExGflashMessenger(this); // Crystall - fCrystalWidth = 3 * cm; + fCrystalWidth = 3 * cm; fCrystalLength = 24 * cm; } @@ -116,7 +98,7 @@ G4VPhysicalVolume* ExGflashDetectorConstruction::Construct() // Get nist material manager G4NistManager* nistManager = G4NistManager::Instance(); // Build materials - G4Material* air = nistManager->FindOrBuildMaterial("G4_AIR"); + G4Material* air = nistManager->FindOrBuildMaterial("G4_AIR"); G4Material* pbWO4 = nistManager->FindOrBuildMaterial("G4_PbWO4"); fDetMat = pbWO4; @@ -139,70 +121,66 @@ G4VPhysicalVolume* ExGflashDetectorConstruction::Construct() G4double experimentalHall_z = calo_zside * 4; G4VSolid* experimentalHall_box = new G4Box("expHall_box", // World Volume - experimentalHall_x, // x size - experimentalHall_y, // y size - experimentalHall_z); // z size - - auto experimentalHall_log = - new G4LogicalVolume(experimentalHall_box, air, "expHall_log", - nullptr, // opt: fieldManager - nullptr, // opt: SensitiveDetector - nullptr); // opt: UserLimits - G4VPhysicalVolume* experimentalHall_phys = new G4PVPlacement(nullptr, - G4ThreeVector(), // at (0,0,0) - "expHall", experimentalHall_log, nullptr, false, 0); - - G4Box* calo_box = new G4Box("Calorimeter", // its name - calo_xside / 2., // size - calo_yside / 2., calo_zside / 2.); - auto calo_log = new G4LogicalVolume(calo_box, // its solid - air, // its material - "calo_log", // its name - nullptr, // opt: fieldManager - nullptr, // opt: SensitiveDetector - nullptr); // opt: UserLimit + experimentalHall_x, // x size + experimentalHall_y, // y size + experimentalHall_z); // z size + + auto experimentalHall_log = new G4LogicalVolume(experimentalHall_box, air, "expHall_log", + nullptr, // opt: fieldManager + nullptr, // opt: SensitiveDetector + nullptr); // opt: UserLimits + G4VPhysicalVolume* experimentalHall_phys = + new G4PVPlacement(nullptr, + G4ThreeVector(), // at (0,0,0) + "expHall", experimentalHall_log, nullptr, false, 0); + + auto calo_box = new G4Box("Calorimeter", // its name + calo_xside / 2., // size + calo_yside / 2., calo_zside / 2.); + auto calo_log = new G4LogicalVolume(calo_box, // its solid + air, // its material + "calo_log", // its name + nullptr, // opt: fieldManager + nullptr, // opt: SensitiveDetector + nullptr); // opt: UserLimit G4double xpos = 0.0; G4double ypos = 0.0; G4double zpos = calo_zside / 2.; // face @ z= 0.0 - new G4PVPlacement(nullptr, G4ThreeVector(xpos, ypos, zpos), calo_log, - "calorimeter", experimentalHall_log, false, 1); + new G4PVPlacement(nullptr, G4ThreeVector(xpos, ypos, zpos), calo_log, "calorimeter", + experimentalHall_log, false, 1); // Crystals G4VSolid* crystal_box = new G4Box("Crystal", // its name - fCrystalWidth / 2, fCrystalWidth / 2, fCrystalLength / 2); + fCrystalWidth / 2, fCrystalWidth / 2, fCrystalLength / 2); // size fCrystal_log = new G4LogicalVolume(crystal_box, // its solid - fDetMat, // its material - "Crystal_log"); // its name - - for ( G4int i = 0; i < fNbOfCrystals; i++ ) { - for ( G4int j = 0; j < fNbOfCrystals; j++ ) { - G4int n = i * 10 + j; - G4ThreeVector crystalPos( - (i * fCrystalWidth) - (calo_xside - fCrystalWidth) / 2., - (j * fCrystalWidth) - (calo_yside - fCrystalWidth) / 2., 0); + fDetMat, // its material + "Crystal_log"); // its name + + for (G4int i = 0; i < fNbOfCrystals; i++) { + for (G4int j = 0; j < fNbOfCrystals; j++) { + G4int n = i * 10 + j; + G4ThreeVector crystalPos((i * fCrystalWidth) - (calo_xside - fCrystalWidth) / 2., + (j * fCrystalWidth) - (calo_yside - fCrystalWidth) / 2., 0); new G4PVPlacement(nullptr, // no rotation - crystalPos, // translation - fCrystal_log, - "crystal", // its name - calo_log, false, n); + crystalPos, // translation + fCrystal_log, + "crystal", // its name + calo_log, false, n); } } - G4cout << "There are " << fNbOfCrystals - << " crystals per row in the calorimeter, so in total " + G4cout << "There are " << fNbOfCrystals << " crystals per row in the calorimeter, so in total " << fNbOfCrystals * fNbOfCrystals << " crystals" << G4endl; - G4cout << "Total Calorimeter size" << calo_xside / cm << " cm x " - << calo_yside / cm << " cm x " << calo_zside / cm << " cm" << G4endl; - G4cout << "They have width of " << fCrystalWidth / cm - << " cm and a length of " << fCrystalLength / cm - << " cm. The Material is " << fDetMat - << " Total: " << fCrystalLength / fDetMat->GetRadlen() << " X0" - << G4endl; + G4cout << "Total Calorimeter size" << calo_xside / cm << " cm x " << calo_yside / cm << " cm x " + << calo_zside / cm << " cm" << G4endl; + G4cout << "They have width of " << fCrystalWidth / cm << " cm and a length of " + << fCrystalLength / cm << " cm. The Material is " << fDetMat + << " Total: " << fCrystalLength / fDetMat->GetRadlen() << " X0" << G4endl; experimentalHall_log->SetVisAttributes(G4VisAttributes::GetInvisible()); - auto caloVisAtt = new G4VisAttributes(G4Colour(1.0, 1.0, 1.0)); + auto caloVisAtt = new G4VisAttributes(G4Colour(1.0, 1.0, 1.0)); auto crystalVisAtt = new G4VisAttributes(G4Colour(1.0, 1.0, 0.0)); calo_log->SetVisAttributes(caloVisAtt); fCrystal_log->SetVisAttributes(crystalVisAtt); @@ -227,7 +205,7 @@ void ExGflashDetectorConstruction::ConstructSDandField() auto SD = new ExGflashSensitiveDetector("Calorimeter", this); SDman->AddNewDetector(SD); - if ( fCrystal_log != nullptr ) { + if (fCrystal_log != nullptr) { fCrystal_log->SetSensitiveDetector(SD); } @@ -236,9 +214,8 @@ void ExGflashDetectorConstruction::ConstructSDandField() // * Initializing shower modell // *********************************************** G4cout << "\n--> Creating shower parameterization models" << G4endl; - fFastShowerModel = new GFlashShowerModel("fFastShowerModel", fRegion); - fParameterisation = new GFlashHomoShowerParameterisation( - fDetMat, new ExGflashHomoShowerTuning()); + fFastShowerModel = new GFlashShowerModel("fFastShowerModel", fRegion); + fParameterisation = new GFlashHomoShowerParameterisation(fDetMat, new ExGflashHomoShowerTuning()); fFastShowerModel->SetParameterisation(*fParameterisation); // Energy Cuts to kill particles: fParticleBounds = new GFlashParticleBounds(); @@ -257,9 +234,9 @@ void ExGflashDetectorConstruction::ConstructSDandField() void ExGflashDetectorConstruction::SetLBining(G4ThreeVector Value) { fNLtot = (G4int)Value(0); - if ( fNLtot > kMaxBin ) { - G4cout << "\n ---> warning from SetLBining: " << fNLtot << " truncated to " - << kMaxBin << G4endl; + if (fNLtot > kMaxBin) { + G4cout << "\n ---> warning from SetLBining: " << fNLtot << " truncated to " << kMaxBin + << G4endl; fNLtot = kMaxBin; } fDLradl = Value(1); @@ -270,9 +247,9 @@ void ExGflashDetectorConstruction::SetLBining(G4ThreeVector Value) void ExGflashDetectorConstruction::SetRBining(G4ThreeVector Value) { fNRtot = (G4int)Value(0); - if ( fNRtot > kMaxBin ) { - G4cout << "\n ---> warning from SetRBining: " << fNRtot << " truncated to " - << kMaxBin << G4endl; + if (fNRtot > kMaxBin) { + G4cout << "\n ---> warning from SetRBining: " << fNRtot << " truncated to " << kMaxBin + << G4endl; fNRtot = kMaxBin; } fDRradl = Value(1); @@ -283,15 +260,14 @@ void ExGflashDetectorConstruction::SetRBining(G4ThreeVector Value) void ExGflashDetectorConstruction::SetMaterial(G4String mat) { // search the material by its name - G4Material* pttoMaterial = - G4NistManager::Instance()->FindOrBuildMaterial(mat); + G4Material* pttoMaterial = G4NistManager::Instance()->FindOrBuildMaterial(mat); - if ( pttoMaterial != nullptr && fDetMat != pttoMaterial ) { + if (pttoMaterial != nullptr && fDetMat != pttoMaterial) { fDetMat = pttoMaterial; - if ( fCrystal_log != nullptr ) { + if (fCrystal_log != nullptr) { fCrystal_log->SetMaterial(fDetMat); } - if ( fParameterisation != nullptr ) { + if (fParameterisation != nullptr) { fParameterisation->SetMaterial(fDetMat); fParameterisation->PrintMaterial(fDetMat); // Get Rad Len and R molere ? diff --git a/examples/extended/parameterisations/gflash/gflasha/src/ExGflashEventAction.cc b/examples/extended/parameterisations/gflash/gflasha/src/ExGflashEventAction.cc index 53d64e03cda..3044782c2f9 100644 --- a/examples/extended/parameterisations/gflash/gflasha/src/ExGflashEventAction.cc +++ b/examples/extended/parameterisations/gflash/gflasha/src/ExGflashEventAction.cc @@ -29,9 +29,11 @@ // #include "ExGflashEventAction.hh" + #include "ExGflashDetectorConstruction.hh" #include "ExGflashHistoManager.hh" #include "ExGflashHit.hh" + #include "G4Event.hh" #include "G4EventManager.hh" #include "G4SDManager.hh" @@ -49,9 +51,7 @@ using namespace std; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashEventAction::ExGflashEventAction(ExGflashDetectorConstruction* det) - : G4UserEventAction(), fCalorimeterCollectionId(-1), fDet(det) -{} +ExGflashEventAction::ExGflashEventAction(ExGflashDetectorConstruction* det) : fDet(det) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -66,29 +66,28 @@ void ExGflashEventAction::BeginOfEventAction(const G4Event* /* evt */) {} void ExGflashEventAction::EndOfEventAction(const G4Event* evt) { G4SDManager* SDman = G4SDManager::GetSDMpointer(); - G4String colNam; - fCalorimeterCollectionId = - SDman->GetCollectionID(colNam = "ExGflashCollection"); + G4String colNam; + fCalorimeterCollectionId = SDman->GetCollectionID(colNam = "ExGflashCollection"); - if ( fCalorimeterCollectionId < 0 ) { + if (fCalorimeterCollectionId < 0) { return; } - G4HCofThisEvent* HCE = evt->GetHCofThisEvent(); - ExGflashHitsCollection* THC = nullptr; - G4double totE = 0; + G4HCofThisEvent* HCE = evt->GetHCofThisEvent(); + ExGflashHitsCollection* THC = nullptr; + G4double totE = 0; // Read out of the crysta ECAL THC = (ExGflashHitsCollection*)(HCE->GetHC(fCalorimeterCollectionId)); - if ( THC != nullptr ) { + if (THC != nullptr) { /// Hits in sensitive Detector int n_hit = THC->entries(); // G4cout<<" " << n_hit<< " hits are stored in ExGflashHitsCollection // "<GetPrimaryVertex(); // Computing (x,y,z) of vertex of initial particles - G4ThreeVector vtx = pvertex->GetPosition(); + G4ThreeVector vtx = pvertex->GetPosition(); G4PrimaryParticle* pparticle = pvertex->GetPrimary(); // direction of the Shower G4ThreeVector mom = pparticle->GetMomentumDirection(); @@ -97,8 +96,8 @@ void ExGflashEventAction::EndOfEventAction(const G4Event* evt) G4double mass = pparticle->GetParticleDefinition()->GetPDGMass(); G4double Etot = Ekin / MeV + mass / MeV; - G4int nLbin = fDet->GetnLtot(); - G4int nRbin = fDet->GetnRtot(); + G4int nLbin = fDet->GetnLtot(); + G4int nRbin = fDet->GetnRtot(); G4double dLradl = fDet->GetdLradl(); G4double dRradl = fDet->GetdRradl(); @@ -111,12 +110,12 @@ void ExGflashEventAction::EndOfEventAction(const G4Event* evt) fAnalysisManager->FillH1(1, n_hit + 0.5); /// For all Hits in sensitive detector - for ( int i = 0; i < n_hit; i++ ) { + for (int i = 0; i < n_hit; i++) { G4double estep = (*THC)[i]->GetEdep(); fAnalysisManager->FillH1(2, estep / MeV); estep /= MeV; - if ( estep > 0.0 ) { + if (estep > 0.0) { totE += estep; G4ThreeVector hitpos = (*THC)[i]->GetPos(); @@ -128,24 +127,24 @@ void ExGflashEventAction::EndOfEventAction(const G4Event* evt) // shower profiles (Radial) G4ThreeVector radial = l - longitudinal; - G4int SlideNb = G4int((longitudinal.mag() / SDRadl) / dLradl); - G4int RingNb = G4int((radial.mag() / SDRadl) / dRradl); + auto SlideNb = G4int((longitudinal.mag() / SDRadl) / dLradl); + auto RingNb = G4int((radial.mag() / SDRadl) / dRradl); - if ( SlideNb >= 0 && SlideNb < nLbin ) dEdL[SlideNb] += estep; - if ( RingNb >= 0 && RingNb < nLbin ) dEdR[RingNb] += estep; + if (SlideNb >= 0 && SlideNb < nLbin) dEdL[SlideNb] += estep; + if (RingNb >= 0 && RingNb < nLbin) dEdR[RingNb] += estep; } } G4double Lnorm = 100. / dLradl / Etot; - G4double Lsum = 0.0; - for ( int i = 0; i < nLbin; i++ ) { // Slide + G4double Lsum = 0.0; + for (int i = 0; i < nLbin; i++) { // Slide fAnalysisManager->FillP1(0, (i + 0.5) * dLradl, dEdL[i] * Lnorm); Lsum += dEdL[i]; fAnalysisManager->FillP1(2, (i + 0.5) * dLradl, Lsum * Lnorm); } G4double Rnorm = 100. / dRradl / Etot; - G4double Rsum = 0.0; - for ( int i = 0; i < nRbin; i++ ) { // Ring + G4double Rsum = 0.0; + for (int i = 0; i < nRbin; i++) { // Ring fAnalysisManager->FillP1(1, (i + 0.5) * dRradl, dEdR[i] * Rnorm); Rsum += dEdR[i]; fAnalysisManager->FillP1(3, (i + 0.5) * dRradl, Rsum * Rnorm); diff --git a/examples/extended/parameterisations/gflash/gflasha/src/ExGflashHistoManager.cc b/examples/extended/parameterisations/gflash/gflasha/src/ExGflashHistoManager.cc index 603eb2985f1..395ace6a3d0 100644 --- a/examples/extended/parameterisations/gflash/gflasha/src/ExGflashHistoManager.cc +++ b/examples/extended/parameterisations/gflash/gflasha/src/ExGflashHistoManager.cc @@ -26,19 +26,21 @@ // /// \file ExGflashHistoManager.cc /// \brief Implementation of the ExGflasHistoManager class -// +// //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "ExGflashHistoManager.hh" + +#include "ExGflashDetectorConstruction.hh" + #include "G4SystemOfUnits.hh" #include "G4UnitsTable.hh" -#include "ExGflashDetectorConstruction.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ExGflashHistoManager::ExGflashHistoManager(ExGflashDetectorConstruction* myDet) - : fFileName("gflash01"),fDet(myDet) + : fFileName("gflash01"), fDet(myDet) { Book(); } @@ -61,16 +63,14 @@ void ExGflashHistoManager::Book() // // const G4int kMaxHisto = 9; // const G4int kMaxProf = 2; - G4int nLbin = fDet->GetnLtot(); - G4int nRbin = fDet->GetnRtot(); + G4int nLbin = fDet->GetnLtot(); + G4int nRbin = fDet->GetnRtot(); G4double dLradl = fDet->GetdLradl(); G4double dRradl = fDet->GetdRradl(); - fAnalysisManager->CreateH1( - "h0", "total energy deposit(percent of Einc)", 100, 95., 105.); + fAnalysisManager->CreateH1("h0", "total energy deposit(percent of Einc)", 100, 95., 105.); - fAnalysisManager->CreateH1( - "h1", "The number of Hits per event", 200, 0., 4.0e5); + fAnalysisManager->CreateH1("h1", "The number of Hits per event", 200, 0., 4.0e5); fAnalysisManager->CreateH1("h2", "The energy of Hit (in MeV)", 200, 0., 10.); @@ -80,17 +80,17 @@ void ExGflashHistoManager::Book() // fAnalysisManager->CreateH1( "h4","radial energy profile (% of E inc)", // nRbin,0.,nRbin*dRradl); - fAnalysisManager->CreateP1("p0", "longit energy profile (% of E inc)", nLbin, - 0., nLbin * dLradl, 0., 2000.); + fAnalysisManager->CreateP1("p0", "longit energy profile (% of E inc)", nLbin, 0., nLbin * dLradl, + 0., 2000.); - fAnalysisManager->CreateP1("p1", "radial energy profile (% of E inc)", nRbin, - 0., nRbin * dRradl, 0., 2000.); + fAnalysisManager->CreateP1("p1", "radial energy profile (% of E inc)", nRbin, 0., nRbin * dRradl, + 0., 2000.); - fAnalysisManager->CreateP1("p2", "Comul longit energy profile (% of E inc)", - nLbin, 0., nLbin * dLradl, 0., 20000.); + fAnalysisManager->CreateP1("p2", "Comul longit energy profile (% of E inc)", nLbin, 0., + nLbin * dLradl, 0., 20000.); - fAnalysisManager->CreateP1("p3", "Cuml radial energy profile (% of E inc)", - nRbin, 0., nRbin * dRradl, 0., 20000.); + fAnalysisManager->CreateP1("p3", "Cuml radial energy profile (% of E inc)", nRbin, 0., + nRbin * dRradl, 0., 20000.); // Create all histograms as inactivated // for (G4int k=0; k* ExGflashHitAllocator = nullptr; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashHit::ExGflashHit() : G4VHit() {} +ExGflashHit::ExGflashHit() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -54,7 +54,7 @@ ExGflashHit::ExGflashHit(const ExGflashHit& right) : G4VHit(right) //@@@ ExGflashHit:Is it right with the init? { fEdep = right.fEdep; - fPos = right.fPos; + fPos = right.fPos; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -79,11 +79,11 @@ G4bool ExGflashHit::operator==(const ExGflashHit& right) const void ExGflashHit::Draw() { G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); - if ( pVVisManager != nullptr ) { + if (pVVisManager != nullptr) { G4Circle circle(fPos); circle.SetScreenSize(0.04); circle.SetFillStyle(G4Circle::filled); - G4Colour colour(1., 0., 0.); + G4Colour colour(1., 0., 0.); G4VisAttributes attribs(colour); circle.SetVisAttributes(attribs); pVVisManager->Draw(circle); diff --git a/examples/extended/parameterisations/gflash/gflasha/src/ExGflashMessenger.cc b/examples/extended/parameterisations/gflash/gflasha/src/ExGflashMessenger.cc index 7ce60a8a211..9f8b2755c40 100644 --- a/examples/extended/parameterisations/gflash/gflasha/src/ExGflashMessenger.cc +++ b/examples/extended/parameterisations/gflash/gflasha/src/ExGflashMessenger.cc @@ -31,6 +31,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "ExGflashMessenger.hh" + #include "ExGflashDetectorConstruction.hh" #include "G4UIcmdWith3Vector.hh" @@ -42,8 +43,7 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashMessenger::ExGflashMessenger(ExGflashDetectorConstruction* Det) - : G4UImessenger(), fDetector(Det) +ExGflashMessenger::ExGflashMessenger(ExGflashDetectorConstruction* Det) : fDetector(Det) { fExGflashDir = new G4UIdirectory("/exgflash/"); fExGflashDir->SetGuidance(" Gflash example commands."); @@ -99,19 +99,19 @@ ExGflashMessenger::~ExGflashMessenger() void ExGflashMessenger::SetNewValue(G4UIcommand* command, G4String newValue) { - if ( command == fMaterCmd ) { + if (command == fMaterCmd) { fDetector->SetMaterial(newValue); } - if ( command == fVerbose ) { + if (command == fVerbose) { fDetector->SetVerbose(fVerbose->GetNewIntValue(newValue)); } - if ( command == fLBinCmd ) { + if (command == fLBinCmd) { fDetector->SetLBining(fLBinCmd->GetNew3VectorValue(newValue)); } - if ( command == fRBinCmd ) { + if (command == fRBinCmd) { fDetector->SetRBining(fRBinCmd->GetNew3VectorValue(newValue)); } } diff --git a/examples/extended/parameterisations/gflash/gflasha/src/ExGflashPrimaryGeneratorAction.cc b/examples/extended/parameterisations/gflash/gflasha/src/ExGflashPrimaryGeneratorAction.cc index e1ae85d95c5..b0bf32bb54d 100644 --- a/examples/extended/parameterisations/gflash/gflasha/src/ExGflashPrimaryGeneratorAction.cc +++ b/examples/extended/parameterisations/gflash/gflasha/src/ExGflashPrimaryGeneratorAction.cc @@ -34,7 +34,6 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... ExGflashPrimaryGeneratorAction::ExGflashPrimaryGeneratorAction() - : G4VUserPrimaryGeneratorAction(), fParticleGun(nullptr) { fParticleGun = new G4GeneralParticleSource; } diff --git a/examples/extended/parameterisations/gflash/gflasha/src/ExGflashRunAction.cc b/examples/extended/parameterisations/gflash/gflasha/src/ExGflashRunAction.cc index 8a7d82d8f9f..342b8defba4 100644 --- a/examples/extended/parameterisations/gflash/gflasha/src/ExGflashRunAction.cc +++ b/examples/extended/parameterisations/gflash/gflasha/src/ExGflashRunAction.cc @@ -27,13 +27,13 @@ /// \brief Implementation of the ExGflashRunAction class // #include "ExGflashRunAction.hh" + #include "G4Run.hh" #include "G4ios.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashRunAction::ExGflashRunAction(ExGflashDetectorConstruction* det) - : G4UserRunAction(), fDetector(det) +ExGflashRunAction::ExGflashRunAction(ExGflashDetectorConstruction* det) : fDetector(det) { fHistoManager = new ExGflashHistoManager(fDetector); } @@ -53,11 +53,11 @@ void ExGflashRunAction::BeginOfRunAction(const G4Run* aRun) // histograms file G4AnalysisManager* analysis = G4AnalysisManager::Instance(); - if ( analysis->IsActive() ) { + if (analysis->IsActive()) { analysis->OpenFile(); } - if ( IsMaster() ) { + if (IsMaster()) { fRunTimer.Start(); } } @@ -66,7 +66,7 @@ void ExGflashRunAction::BeginOfRunAction(const G4Run* aRun) void ExGflashRunAction::EndOfRunAction(const G4Run* aRun) { - if ( IsMaster() ) { + if (IsMaster()) { // For MT we need Timer Merge fRunTimer.Stop(); G4cout << G4endl; @@ -84,7 +84,7 @@ void ExGflashRunAction::EndOfRunAction(const G4Run* aRun) } // save histograms G4AnalysisManager* analysis = G4AnalysisManager::Instance(); - if ( analysis->IsActive() ) { + if (analysis->IsActive()) { analysis->Write(); analysis->CloseFile(); } diff --git a/examples/extended/parameterisations/gflash/gflasha/src/ExGflashSensitiveDetector.cc b/examples/extended/parameterisations/gflash/gflasha/src/ExGflashSensitiveDetector.cc index 4efedf54866..59672054a4e 100644 --- a/examples/extended/parameterisations/gflash/gflasha/src/ExGflashSensitiveDetector.cc +++ b/examples/extended/parameterisations/gflash/gflasha/src/ExGflashSensitiveDetector.cc @@ -28,8 +28,10 @@ // // Created by Joanna Weng 26.11.2004 #include "ExGflashSensitiveDetector.hh" + #include "ExGflashDetectorConstruction.hh" #include "ExGflashHit.hh" + #include "G4GFlashSpot.hh" #include "G4Step.hh" #include "G4TouchableHistory.hh" @@ -40,9 +42,9 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -ExGflashSensitiveDetector::ExGflashSensitiveDetector( - G4String name, ExGflashDetectorConstruction* /* det */) - : G4VSensitiveDetector(name), G4VGFlashSensitiveDetector(), fHCID(-1) +ExGflashSensitiveDetector::ExGflashSensitiveDetector(G4String name, + ExGflashDetectorConstruction* /* det */) + : G4VSensitiveDetector(name) { G4String caloname = "ExGflashCollection"; collectionName.insert(caloname); @@ -56,11 +58,11 @@ ExGflashSensitiveDetector::~ExGflashSensitiveDetector() = default; void ExGflashSensitiveDetector::Initialize(G4HCofThisEvent* HCE) { - if ( fHCID < 0 ) { + if (fHCID < 0) { fHCID = GetCollectionID(0); } - fCaloHitsCollection = new ExGflashHitsCollection( - SensitiveDetectorName, collectionName[0]); // first collection + fCaloHitsCollection = + new ExGflashHitsCollection(SensitiveDetectorName, collectionName[0]); // first collection HCE->AddHitsCollection(fHCID, fCaloHitsCollection); } @@ -70,11 +72,10 @@ void ExGflashSensitiveDetector::EndOfEvent(G4HCofThisEvent*) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool ExGflashSensitiveDetector::ProcessHits( - G4Step* aStep, G4TouchableHistory* /* ROhist */) +G4bool ExGflashSensitiveDetector::ProcessHits(G4Step* aStep, G4TouchableHistory* /* ROhist */) { G4double e = aStep->GetTotalEnergyDeposit(); - if ( e <= 0. ) return false; + if (e <= 0.) return false; auto caloHit = new ExGflashHit(); caloHit->SetEdep(e); @@ -87,12 +88,11 @@ G4bool ExGflashSensitiveDetector::ProcessHits( //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // Separate GFLASH interface -G4bool ExGflashSensitiveDetector::ProcessHits( - G4GFlashSpot* aSpot, G4TouchableHistory* /* ROhist */) +G4bool ExGflashSensitiveDetector::ProcessHits(G4GFlashSpot* aSpot, G4TouchableHistory* /* ROhist */) { // cout<<"This is ProcessHits GFLASH"<GetEnergySpot()->GetEnergy(); - if ( e <= 0. ) return false; + if (e <= 0.) return false; // G4VPhysicalVolume* pCurrentVolume = // aSpot->GetTouchableHandle()->GetVolume(); diff --git a/examples/extended/parameterisations/gflash/gflasha/test.out b/examples/extended/parameterisations/gflash/gflasha/test.out index fed131686e0..b69fe75da24 100644 --- a/examples/extended/parameterisations/gflash/gflasha/test.out +++ b/examples/extended/parameterisations/gflash/gflasha/test.out @@ -16,7 +16,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -25,9 +25,11 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** ExGflashDetectorConstruction::Detector constructor +G4PhysListFactory::GetReferencePhysList EMoption= 0 <<< Geant4 Physics List simulation engine: FTFP_BERT + ----> Histogram file gflash01 Visualization Manager instantiating with verbosity "warnings (3)"... Visualization Manager initialising... @@ -53,7 +55,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -255,7 +259,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -287,7 +291,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -319,7 +323,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -332,7 +336,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -378,7 +381,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -410,7 +413,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -442,7 +445,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -474,7 +477,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -506,7 +509,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -538,7 +541,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -570,7 +573,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -955,12 +958,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -986,9 +998,9 @@ See commands in /vis/modeling/trajectories/ for other options. ... open analysis file : gflash01.root - done ****************************************** -Run Real Elapsed Time is: 0.911014 -Run System Elapsed Time: 0 -Run GetUserElapsed Time: 0.9 +Run Real Elapsed Time is: 0.796021 +Run System Elapsed Time: 0.01 +Run GetUserElapsed Time: 0.79 ****************************************** number of event = 100 ... write file : gflash01.root - done @@ -1005,9 +1017,9 @@ View them with "/vis/plot" or "/vis/reviewPlots". ... open analysis file : gflash00.root - done ****************************************** -Run Real Elapsed Time is: 60.8165 -Run System Elapsed Time: 0.36 -Run GetUserElapsed Time: 59.99 +Run Real Elapsed Time is: 51.4984 +Run System Elapsed Time: 0.29 +Run GetUserElapsed Time: 50.87 ****************************************** number of event = 100 ... write file : gflash00.root - done @@ -1022,7 +1034,7 @@ Graphics systems deleted. Visualization Manager deleting... ****************************************** -Total Real Elapsed Time is: 64.7841 -Total System Elapsed Time: 0.5 -Total GetUserElapsed Time: 63.32 +Total Real Elapsed Time is: 55.1584 +Total System Elapsed Time: 0.4 +Total GetUserElapsed Time: 53.94 ****************************************** diff --git a/examples/extended/persistency/P01/p01-write.out b/examples/extended/persistency/P01/p01-write.out index de4eafddfcf..8cfe191f3df 100644 --- a/examples/extended/persistency/P01/p01-write.out +++ b/examples/extended/persistency/P01/p01-write.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -18,6 +18,7 @@ WWW : http://geant4.org/ ************************************************************** + G4ChordFinder: stepperDriverId: 2 <<< Geant4 Physics List simulation engine: FTFP_BERT Visualization Manager instantiating with verbosity "warnings (3)"... @@ -44,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -255,7 +258,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -287,7 +290,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -319,7 +322,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -332,7 +335,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -378,7 +380,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -410,7 +412,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -442,7 +444,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -474,7 +476,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -506,7 +508,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -538,7 +540,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -570,7 +572,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -955,12 +957,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -2273,27 +2284,27 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng 1 -97.6 um 23.8 um -2.71 m 0 eV 2.67 keV 242 um 242 um World eIoni -------->Storing hits in the ROOT file: in this event there are 119 hits in the tracker chambers: - trackID: 1 chamberNb: 0 energy deposit[MeV]: 0.0057315468548427 position[mm]: (-12.90166199947,3.050635719205,-1588.0475882361) + trackID: 1 chamberNb: 0 energy deposit[MeV]: 0.0057315468548425 position[mm]: (-12.90166199947,3.050635719205,-1588.0475882361) trackID: 1 chamberNb: 0 energy deposit[MeV]: 0.042319608280118 position[mm]: (-14.723154058232,3.4704720514609,-1474.5145304914) trackID: 1 chamberNb: 0 energy deposit[MeV]: 0.0079503318133694 position[mm]: (-15.102787731906,3.5593623607525,-1450.6910054643) trackID: 1 chamberNb: 0 energy deposit[MeV]: 0.0011695741703648 position[mm]: (-15.145291217035,3.569583090832,-1448.0393203058) trackID: 1 chamberNb: 0 energy deposit[MeV]: 0.019984280622058 position[mm]: (-15.871093836832,3.7461589509036,-1402.8808142553) - trackID: 1 chamberNb: 0 energy deposit[MeV]: 0.0029825597098054 position[mm]: (-15.917933367033,3.7569594684876,-1400) - trackID: 1 chamberNb: 1 energy deposit[MeV]: 0.020837919118479 position[mm]: (-26.901278375724,6.3194154448168,-727.61990173889) + trackID: 1 chamberNb: 0 energy deposit[MeV]: 0.0029825597098057 position[mm]: (-15.917933367033,3.7569594684876,-1400) + trackID: 1 chamberNb: 1 energy deposit[MeV]: 0.020837919118478 position[mm]: (-26.901278375724,6.3194154448168,-727.61990173889) trackID: 1 chamberNb: 1 energy deposit[MeV]: 0.0090267719757765 position[mm]: (-27.596176237645,6.4773602005676,-685.70677180069) trackID: 1 chamberNb: 1 energy deposit[MeV]: 0.024447425498048 position[mm]: (-28.62046333064,6.7099112774375,-623.78919979823) - trackID: 1 chamberNb: 1 energy deposit[MeV]: 0.0037841636536121 position[mm]: (-28.752138399613,6.7415023297747,-615.90287630279) - trackID: 1 chamberNb: 1 energy deposit[MeV]: 0.0046363882100852 position[mm]: (-29.017507005424,6.8065713778268,-600) - trackID: 1 chamberNb: 2 energy deposit[MeV]: 0.0067201612325195 position[mm]: (-39.51075930102,9.297197030813,28.429614077798) - trackID: 1 chamberNb: 2 energy deposit[MeV]: 0.0037399699980247 position[mm]: (-39.811830322585,9.3681891315843,46.48973916775) - trackID: 1 chamberNb: 2 energy deposit[MeV]: 0.0043652696236223 position[mm]: (-39.93859171991,9.3985770363867,54.148665610022) - trackID: 1 chamberNb: 2 energy deposit[MeV]: 0.0039709140166395 position[mm]: (-40.216395785259,9.4647320249566,70.929314909946) + trackID: 1 chamberNb: 1 energy deposit[MeV]: 0.0037841636536121 position[mm]: (-28.752138399613,6.7415023297747,-615.9028763028) + trackID: 1 chamberNb: 1 energy deposit[MeV]: 0.0046363882100854 position[mm]: (-29.017507005424,6.8065713778268,-600) + trackID: 1 chamberNb: 2 energy deposit[MeV]: 0.0067201612325193 position[mm]: (-39.51075930102,9.297197030813,28.429614077797) + trackID: 1 chamberNb: 2 energy deposit[MeV]: 0.0037399699980247 position[mm]: (-39.811830322585,9.3681891315843,46.489739167749) + trackID: 1 chamberNb: 2 energy deposit[MeV]: 0.0043652696236223 position[mm]: (-39.93859171991,9.3985770363867,54.148665610021) + trackID: 1 chamberNb: 2 energy deposit[MeV]: 0.0039709140166395 position[mm]: (-40.216395785259,9.4647320249566,70.929314909945) trackID: 1 chamberNb: 2 energy deposit[MeV]: 0.023896763317263 position[mm]: (-41.062785467971,9.6644902690186,121.84389180256) trackID: 1 chamberNb: 2 energy deposit[MeV]: 0.00035185143171116 position[mm]: (-41.111168411689,9.676723228687,124.76042139589) trackID: 1 chamberNb: 2 energy deposit[MeV]: 0.018608533544287 position[mm]: (-42.031489943844,9.9068100709331,180.23205254153) trackID: 1 chamberNb: 2 energy deposit[MeV]: 0.00280260836554 position[mm]: (-42.204291907709,9.9482970623374,190.47823420069) - trackID: 1 chamberNb: 2 energy deposit[MeV]: 0.0043185760873822 position[mm]: (-42.365020437145,9.986979542362,200) - trackID: 1 chamberNb: 3 energy deposit[MeV]: 0.0017167055997048 position[mm]: (-52.626553831152,12.366874641094,804.05017689606) + trackID: 1 chamberNb: 2 energy deposit[MeV]: 0.0043185760873825 position[mm]: (-42.365020437145,9.986979542362,200) + trackID: 1 chamberNb: 3 energy deposit[MeV]: 0.0017167055997046 position[mm]: (-52.626553831152,12.366874641094,804.05017689606) trackID: 1 chamberNb: 3 energy deposit[MeV]: 0.0022743896312191 position[mm]: (-52.732938518206,12.390872342748,810.3155544347) trackID: 1 chamberNb: 3 energy deposit[MeV]: 0.012015723220761 position[mm]: (-53.156984395985,12.485500923529,835.2737795368) trackID: 1 chamberNb: 3 energy deposit[MeV]: 0.013781045708263 position[mm]: (-53.767306311662,12.621943834088,871.38622002829) @@ -2309,12 +2320,12 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng trackID: 1 chamberNb: 4 energy deposit[MeV]: 0.014268614707544 position[mm]: (-67.077546601769,15.354676667992,1674.314671033) trackID: 1 chamberNb: 4 energy deposit[MeV]: 0.0023792124515993 position[mm]: (-67.302854799425,15.403837138666,1687.9951850933) trackID: 1 chamberNb: 4 energy deposit[MeV]: 0.00088075400376753 position[mm]: (-67.336751698405,15.411179919385,1690.0513442131) - trackID: 1 chamberNb: 4 energy deposit[MeV]: 0.011766861458836 position[mm]: (-67.679602363055,15.485659122037,1710.8687321813) + trackID: 1 chamberNb: 4 energy deposit[MeV]: 0.011766861458836 position[mm]: (-67.679602363054,15.485659122037,1710.8687321813) trackID: 1 chamberNb: 4 energy deposit[MeV]: 0.0049176881981312 position[mm]: (-67.934408183758,15.541535948766,1726.4054290431) trackID: 1 chamberNb: 4 energy deposit[MeV]: 0.0025664442896806 position[mm]: (-68.06270132123,15.569994791117,1734.2395684179) trackID: 1 chamberNb: 4 energy deposit[MeV]: 0.0023344904379897 position[mm]: (-68.222066444335,15.605120603798,1743.9342826893) trackID: 1 chamberNb: 4 energy deposit[MeV]: 0.014127573667554 position[mm]: (-69.006490362493,15.777614282767,1791.680742107) - trackID: 1 chamberNb: 4 energy deposit[MeV]: 0.002943996079643 position[mm]: (-69.141491175564,15.809424837978,1800) + trackID: 1 chamberNb: 4 energy deposit[MeV]: 0.0029439960796432 position[mm]: (-69.141491175564,15.809424837978,1800) trackID: 81 chamberNb: 4 energy deposit[MeV]: 0.0013773730496372 position[mm]: (-69.006028732577,15.76983655389,1791.6810742392) trackID: 80 chamberNb: 4 energy deposit[MeV]: 0.0034916922443965 position[mm]: (-68.183254024747,15.638668702496,1743.9387017011) trackID: 80 chamberNb: 4 energy deposit[MeV]: 0.0020636499039191 position[mm]: (-68.178346486245,15.632377804725,1743.9485096912) @@ -2326,13 +2337,13 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng trackID: 77 chamberNb: 4 energy deposit[MeV]: 0.0058732338983241 position[mm]: (-68.45355273505,11.780709930777,1712.8058989452) trackID: 77 chamberNb: 4 energy deposit[MeV]: 0.0063293423004712 position[mm]: (-68.357214798802,10.990797775637,1713.0073845763) trackID: 77 chamberNb: 4 energy deposit[MeV]: 0.00028687792034326 position[mm]: (-68.453176318566,10.895707643416,1712.6325602317) - trackID: 77 chamberNb: 4 energy deposit[MeV]: 0.0051082966965926 position[mm]: (-68.098544749761,10.834616737908,1712.3019577529) + trackID: 77 chamberNb: 4 energy deposit[MeV]: 0.0051082966965926 position[mm]: (-68.09854474976,10.834616737908,1712.3019577529) trackID: 77 chamberNb: 4 energy deposit[MeV]: 0.0083603132169917 position[mm]: (-68.406542288661,10.955129369956,1712.3081168165) trackID: 77 chamberNb: 4 energy deposit[MeV]: 0.0015552286528859 position[mm]: (-68.47892813322,10.908430174904,1712.297386274) trackID: 77 chamberNb: 4 energy deposit[MeV]: 0.0067064590922323 position[mm]: (-68.523569781041,10.857837470225,1712.3026193435) trackID: 99 chamberNb: 4 energy deposit[MeV]: 0.0019685836354265 position[mm]: (-68.47988116687,10.910423311036,1712.3090700548) trackID: 98 chamberNb: 4 energy deposit[MeV]: 0.0023661244664905 position[mm]: (-68.46101117724,10.904109069092,1712.6224397123) - trackID: 97 chamberNb: 4 energy deposit[MeV]: 0.00062021741072148 position[mm]: (-68.459392983529,11.768561761476,1712.7633233935) + trackID: 97 chamberNb: 4 energy deposit[MeV]: 0.00062021741072148 position[mm]: (-68.459392983529,11.768561761477,1712.7633233935) trackID: 97 chamberNb: 4 energy deposit[MeV]: 0.0026766643479396 position[mm]: (-68.470749521459,11.780716097611,1712.7709723793) trackID: 100 chamberNb: 4 energy deposit[MeV]: 0.0018090411216869 position[mm]: (-68.452576548977,11.776490006592,1712.7609009423) trackID: 96 chamberNb: 4 energy deposit[MeV]: 0.00089703452869264 position[mm]: (-68.957532196452,13.301778065325,1711.0766025887) @@ -2347,33 +2358,33 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng trackID: 73 chamberNb: 4 energy deposit[MeV]: 0.0016655166967966 position[mm]: (-66.460141572598,15.225639540251,1637.336566462) trackID: 72 chamberNb: 4 energy deposit[MeV]: 0.0032569636899998 position[mm]: (-66.373224579266,15.191625479543,1628.3704196556) trackID: 72 chamberNb: 4 energy deposit[MeV]: 0.0023911434605175 position[mm]: (-66.365036416306,15.204631651278,1628.3680859554) - trackID: 71 chamberNb: 4 energy deposit[MeV]: 0.0033037574184634 position[mm]: (-66.126844363293,15.136206787377,1616.161623214) + trackID: 71 chamberNb: 4 energy deposit[MeV]: 0.0033037574184634 position[mm]: (-66.126844363292,15.136206787377,1616.161623214) trackID: 70 chamberNb: 4 energy deposit[MeV]: 0.0013466539492462 position[mm]: (-66.112592242995,15.154534552521,1616.1389276978) trackID: 69 chamberNb: 4 energy deposit[MeV]: 0.003161072791623 position[mm]: (-65.860944766149,15.129677517715,1601.3012594027) - trackID: 68 chamberNb: 4 energy deposit[MeV]: 0.0010542981003281 position[mm]: (-65.846619483158,15.063022341533,1600.0893808106) + trackID: 68 chamberNb: 4 energy deposit[MeV]: 0.0010542981003281 position[mm]: (-65.846619483158,15.063022341534,1600.0893808106) trackID: 68 chamberNb: 4 energy deposit[MeV]: 0.0018261447379537 position[mm]: (-65.836906234607,15.059421784043,1600.0861489723) trackID: 65 chamberNb: 3 energy deposit[MeV]: 0.003361514358636 position[mm]: (-55.319487036125,12.967779901589,963.47768160263) trackID: 64 chamberNb: 3 energy deposit[MeV]: 0.0020596547141266 position[mm]: (-54.573678039624,12.796957909245,918.47309098463) trackID: 63 chamberNb: 3 energy deposit[MeV]: 4.7646109577555e-05 position[mm]: (-54.393119394406,12.715010710206,910.34661969259) trackID: 63 chamberNb: 3 energy deposit[MeV]: 0.0057316813304265 position[mm]: (-54.375438221798,12.686242820936,910.38863440138) - trackID: 102 chamberNb: 3 energy deposit[MeV]: 0.0015023931590042 position[mm]: (-54.388274404757,12.710173796768,910.34130070248) + trackID: 102 chamberNb: 3 energy deposit[MeV]: 0.0015023931590042 position[mm]: (-54.388274404757,12.710173796768,910.34130070247) trackID: 62 chamberNb: 3 energy deposit[MeV]: 0.0020647560286082 position[mm]: (-53.757993620817,12.630479149081,871.38693176667) trackID: 61 chamberNb: 3 energy deposit[MeV]: 0.0017119951340582 position[mm]: (-53.159835589978,12.475849221554,835.27419239696) trackID: 60 chamberNb: 3 energy deposit[MeV]: 0.0018704257980738 position[mm]: (-52.722328597865,12.387465839935,810.31623947856) trackID: 59 chamberNb: 3 energy deposit[MeV]: 0.0076960962222177 position[mm]: (-52.981161371333,12.610896115107,804.10830345055) trackID: 59 chamberNb: 3 energy deposit[MeV]: 0.010369129517958 position[mm]: (-53.025053679187,12.695189380191,804.30930096668) trackID: 59 chamberNb: 3 energy deposit[MeV]: 0.0039957047726063 position[mm]: (-53.008889190231,12.670180280165,804.31989771824) - trackID: 48 chamberNb: 2 energy deposit[MeV]: 0.0027300233077938 position[mm]: (-42.222572133197,9.9527591237799,190.47890926394) + trackID: 48 chamberNb: 2 energy deposit[MeV]: 0.0027300233077938 position[mm]: (-42.222572133197,9.9527591237799,190.47890926393) trackID: 47 chamberNb: 2 energy deposit[MeV]: 0.00733461694606 position[mm]: (-42.186822716845,10.274737688062,180.28700284595) trackID: 47 chamberNb: 2 energy deposit[MeV]: 0.011484814913098 position[mm]: (-42.115980288059,10.42647744839,180.16515927695) trackID: 47 chamberNb: 2 energy deposit[MeV]: 0.0022511783002685 position[mm]: (-42.125596976127,10.434768952598,180.15868217294) trackID: 46 chamberNb: 2 energy deposit[MeV]: 0.0015148596079724 position[mm]: (-41.104192715541,9.6714563325019,124.76090611937) trackID: 45 chamberNb: 2 energy deposit[MeV]: 0.0050838909938606 position[mm]: (-41.069497139433,9.7304632937288,121.84900625711) trackID: 45 chamberNb: 2 energy deposit[MeV]: 0.0015426449649674 position[mm]: (-41.069932428755,9.7280496303037,121.84040748271) - trackID: 44 chamberNb: 2 energy deposit[MeV]: 0.0023453845187715 position[mm]: (-40.201316454151,9.4650864243757,70.93030975699) - trackID: 43 chamberNb: 2 energy deposit[MeV]: 0.0015470442716197 position[mm]: (-39.933571773311,9.3911566934293,54.149137476127) - trackID: 42 chamberNb: 2 energy deposit[MeV]: 0.0022947285969316 position[mm]: (-39.825814970026,9.3638566366823,46.490239585296) - trackID: 41 chamberNb: 2 energy deposit[MeV]: 0.001942380512922 position[mm]: (-39.522394130728,9.2983029889234,28.42994066217) + trackID: 44 chamberNb: 2 energy deposit[MeV]: 0.0023453845187715 position[mm]: (-40.201316454151,9.4650864243757,70.930309756989) + trackID: 43 chamberNb: 2 energy deposit[MeV]: 0.0015470442716197 position[mm]: (-39.933571773311,9.3911566934293,54.149137476126) + trackID: 42 chamberNb: 2 energy deposit[MeV]: 0.0022947285969316 position[mm]: (-39.825814970026,9.3638566366823,46.490239585295) + trackID: 41 chamberNb: 2 energy deposit[MeV]: 0.001942380512922 position[mm]: (-39.522394130728,9.2983029889234,28.429940662169) trackID: 32 chamberNb: 1 energy deposit[MeV]: 0.0067784077691567 position[mm]: (-28.590725920201,6.5430905757627,-615.86638733013) trackID: 32 chamberNb: 1 energy deposit[MeV]: 0.0076222230314803 position[mm]: (-28.611450428788,6.4998856985473,-615.93248423982) trackID: 121 chamberNb: 1 energy deposit[MeV]: 0.0015208534139251 position[mm]: (-28.592160512542,6.5505372530442,-615.87084113729) @@ -2385,7 +2396,7 @@ Step# X Y Z KineE dEStep StepLeng TrakLeng trackID: 123 chamberNb: 1 energy deposit[MeV]: 0.0026820359428659 position[mm]: (-26.564309874009,6.6959428095456,-727.59553571838) trackID: 122 chamberNb: 1 energy deposit[MeV]: 0.0032748505449468 position[mm]: (-26.649235673435,6.7747826465125,-727.51392688896) trackID: 22 chamberNb: 0 energy deposit[MeV]: 0.0050378506320576 position[mm]: (-15.514799830099,3.6522678993254,-1402.8212647964) - trackID: 22 chamberNb: 0 energy deposit[MeV]: 0.00050627544227914 position[mm]: (-15.520739673822,3.6156188483726,-1402.8504349901) + trackID: 22 chamberNb: 0 energy deposit[MeV]: 0.00050627544227914 position[mm]: (-15.520739673821,3.6156188483726,-1402.8504349901) trackID: 22 chamberNb: 0 energy deposit[MeV]: 0.0059739483538141 position[mm]: (-15.465855917033,3.4524519902949,-1402.9292014297) trackID: 22 chamberNb: 0 energy deposit[MeV]: 0.0070163049726388 position[mm]: (-15.460444700402,3.387735369625,-1402.8975077693) trackID: 127 chamberNb: 0 energy deposit[MeV]: 0.0015464859929374 position[mm]: (-15.528207238196,3.6443778771096,-1402.8267506986) @@ -2398,7 +2409,7 @@ writing Event_1 Run terminated. Run Summary Number of events processed : 1 - User=0.320000s Real=2.231503s Sys=0.270000s + User=0.340000s Real=1.707287s Sys=0.270000s Region -- -- appears in world volume This region is in the mass world. @@ -2780,7 +2791,7 @@ writing Event_4 Run terminated. Run Summary Number of events processed : 3 - User=0.010000s Real=0.007799s Sys=0.000000s + User=0.000000s Real=0.008110s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. diff --git a/examples/extended/persistency/P03/batch.out b/examples/extended/persistency/P03/batch.out index dd12b553530..e1ddded1e8a 100644 --- a/examples/extended/persistency/P03/batch.out +++ b/examples/extended/persistency/P03/batch.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -248,7 +250,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -280,7 +282,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -312,7 +314,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -325,7 +327,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -371,7 +372,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -403,7 +404,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -435,7 +436,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -467,7 +468,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -499,7 +500,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -531,7 +532,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -563,7 +564,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -615,7 +616,7 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.000814s Sys=0.000000s + User=0.010000s Real=0.000742s Sys=0.000000s 10 events have been kept for refreshing and/or reviewing. "/vis/reviewKeptEvents" to review one by one. To see accumulated, "/vis/enable", then "/vis/viewer/flush" or "/vis/viewer/rebuild". diff --git a/examples/extended/persistency/gdml/G01/History b/examples/extended/persistency/gdml/G01/History index c130c09af6b..12281cbd609 100644 --- a/examples/extended/persistency/gdml/G01/History +++ b/examples/extended/persistency/gdml/G01/History @@ -1,9 +1,14 @@ # Example G01 History See `CONTRIBUTING.rst` for details of **required** info/format for each entry, -which **must** added in reverse chronological order (newest at the top). It must **not** -be used as a substitute for writing good git commit messages! +which **must** added in reverse chronological order (newest at the top). +It must **not** be used as a substitute for writing good git commit messages! +------------------------------------------------------------------------------- + +## 2023-04-26 Gabriele Cosmo (G01-V11-01-00) +- Added comment in main() to demonstrate how to set alternative schema file + for validation while parsing a GDML document. ## 2021-12-10 Ben Morgan (G01-V11-00-00) - Change to new Markdown History format diff --git a/examples/extended/persistency/gdml/G01/g01-schema.out b/examples/extended/persistency/gdml/G01/g01-schema.out new file mode 100644 index 00000000000..f1200080e2b --- /dev/null +++ b/examples/extended/persistency/gdml/G01/g01-schema.out @@ -0,0 +1,1880 @@ + +Usage: load_gdml + +G4GDML: Reading '/geant4/examples/extended/persistency/gdml/G01/solids.gdml'... +G4GDML: Loaded alternative schema URI: /geant4/source/persistency/gdml/schema/gdml.xsd +G4GDML: Reading definitions... +G4GDML: Reading materials... +G4GDML: Reading solids... +G4GDML: Reading structure... +Checking overlaps for volume vol0_PV:0 (G4Box) ... OK! +Checking overlaps for volume vol1_PV:0 (G4Cons) ... OK! +Checking overlaps for volume vol2_PV:0 (G4Para) ... OK! +Checking overlaps for volume vol3_PV:0 (G4Sphere) ... OK! +Checking overlaps for volume vol4_PV:0 (G4Trap) ... OK! +Checking overlaps for volume vol11_PV:0 (G4Trd) ... OK! +Checking overlaps for volume vol21_PV:0 (G4Tubs) ... OK! +Checking overlaps for volume vol31_PV:0 (G4SubtractionSolid) ... OK! +Checking overlaps for volume vol41_PV:0 (G4Polycone) ... OK! +Checking overlaps for volume vol412_PV:0 (G4GenericPolycone) ... OK! +Checking overlaps for volume vol51_PV:0 (G4Ellipsoid) ... OK! +Checking overlaps for volume vol61_PV:0 (G4Tet) ... OK! +Checking overlaps for volume vol71_PV:0 (G4TwistedBox) ... OK! +Checking overlaps for volume vol81_PV:0 (G4TwistedTrd) ... OK! +Checking overlaps for volume vol91_PV:0 (G4TwistedTrap) ... OK! +Checking overlaps for volume vol101_PV:0 (G4TwistedTubs) ... OK! +Checking overlaps for volume vol201_PV:0 (G4TessellatedSolid) ... OK! +Checking overlaps for volume vol301_PV:0 (G4Torus) ... OK! +Checking overlaps for volume vol401_PV:0 (G4Orb) ... OK! +Checking overlaps for volume vol501_PV:0 (G4Polyhedra) ... OK! +Checking overlaps for volume vol502_PV:0 (G4Polyhedra) ... OK! +Checking overlaps for volume vol601_PV:0 (G4Hype) ... OK! +Checking overlaps for volume vol701_PV:0 (G4EllipticalTube) ... OK! +Checking overlaps for volume vol1001_PV:0 (G4EllipticalCone) ... OK! +Checking overlaps for volume vol1002_PV:0 (G4GenericTrap) ... OK! +Checking overlaps for volume vol1003_PV:0 (G4GenericTrap) ... OK! +G4GDML: Reading setup... +G4GDML: Reading '/geant4/examples/extended/persistency/gdml/G01/solids.gdml' done! +Stripping off GDML names of materials, solids and volumes ... +Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Forcing G4RunManager type... + + ############################################ + !!! WARNING - FPE detection is activated !!! + ############################################ + + + ################################ + !!! G4Backtrace is activated !!! + ################################ + + +************************************************************** + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) + Copyright : Geant4 Collaboration + References : NIM A 506 (2003), 250-303 + : IEEE-TNS 53 (2006), 270-278 + : NIM A 835 (2016), 186-225 + WWW : http://geant4.org/ +************************************************************** + +<<< Geant4 Physics List simulation engine: FTFP_BERT + + + hInelastic FTFP_BERT : threshold between BERT and FTFP is over the interval + for pions : 3 to 6 GeV + for kaons : 3 to 6 GeV + for proton : 3 to 6 GeV + for neutron : 3 to 6 GeV + +### Adding tracking cuts for neutron TimeCut(ns)= 10000 KinEnergyCut(MeV)= 0 +Visualization Manager instantiating with verbosity "warnings (3)"... +Visualization Manager initialising... +Registering graphics systems... + +You have successfully registered the following graphics systems. +Registered graphics systems are: + ASCIITree (ATree) + DAWNFILE (DAWNFILE) + G4HepRepFile (HepRepFile) + RayTracer (RayTracer) + VRML2FILE (VRML2FILE) + gMocrenFile (gMocrenFile) + TOOLSSG_OFFSCREEN (TSG_OFFSCREEN) + TOOLSSG_OFFSCREEN (TSG_OFFSCREEN, TSG_FILE) + OpenGLImmediateQt (OGLIQt, OGLI) + OpenGLStoredQt (OGLSQt, OGL, OGLS) + OpenGLImmediateXm (OGLIXm, OGLIQt_FALLBACK) + OpenGLStoredXm (OGLSXm, OGLSQt_FALLBACK) + OpenGLImmediateX (OGLIX, OGLIQt_FALLBACK, OGLIXm_FALLBACK) + OpenGLStoredX (OGLSX, OGLSQt_FALLBACK, OGLSXm_FALLBACK) + RayTracerX (RayTracerX) + Qt3D (Qt3D) + TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) + TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) + TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) + +Registering model factories... + +You have successfully registered the following model factories. +Registered model factories: + generic + drawByAttribute + drawByCharge + drawByOriginVolume + drawByParticleID + drawByEncounteredVolume + +Registered models: + None + +Registered filter factories: + attributeFilter + chargeFilter + originVolumeFilter + particleFilter + encounteredVolumeFilter + +Registered filters: + None + +You have successfully registered the following user vis actions. +Run Duration User Vis Actions: none +End of Event User Vis Actions: none +End of Run User Vis Actions: none + +Some /vis commands (optionally) take a string to specify colour. +"/vis/list" to see available colours. + + +Global auxiliary info: + + +======================================================================= +====== Electromagnetic Physics Parameters ======== +======================================================================= +LPM effect enabled 1 +Enable creation and use of sampling tables 0 +Apply cuts on all EM processes 0 +Use combined TransportationWithMsc Disabled +Use general process 1 +Enable linear polarisation for gamma 0 +Enable photoeffect sampling below K-shell 1 +Enable sampling of quantum entanglement 0 +X-section factor for integral approach 0.8 +Min kinetic energy for tables 100 eV +Max kinetic energy for tables 100 TeV +Number of bins per decade of a table 7 +Verbose level 1 +Verbose level for worker thread 0 +Bremsstrahlung energy threshold above which + primary e+- is added to the list of secondary 100 TeV +Bremsstrahlung energy threshold above which primary + muon/hadron is added to the list of secondary 100 TeV +Lowest triplet kinetic energy 1 MeV +Enable sampling of gamma linear polarisation 0 +5D gamma conversion model type 0 +5D gamma conversion model on isolated ion 0 +Livermore data directory epics_2017 +======================================================================= +====== Ionisation Parameters ======== +======================================================================= +Step function for e+- (0.2, 1 mm) +Step function for muons/hadrons (0.2, 0.1 mm) +Step function for light ions (0.2, 0.1 mm) +Step function for general ions (0.2, 0.1 mm) +Lowest e+e- kinetic energy 1 keV +Lowest muon/hadron kinetic energy 1 keV +Use ICRU90 data 0 +Fluctuations of dE/dx are enabled 1 +Type of fluctuation model for leptons and hadrons Urban +Use built-in Birks satuaration 0 +Build CSDA range enabled 0 +Use cut as a final range enabled 0 +Enable angular generator interface 0 +Max kinetic energy for CSDA tables 1 GeV +Max kinetic energy for NIEL computation 0 eV +Linear loss limit 0.01 +Read data from file for e+e- pair production by mu 0 +======================================================================= +====== Multiple Scattering Parameters ======== +======================================================================= +Type of msc step limit algorithm for e+- 1 +Type of msc step limit algorithm for muons/hadrons 0 +Msc lateral displacement for e+- enabled 1 +Msc lateral displacement for muons and hadrons 0 +Urban msc model lateral displacement alg96 1 +Range factor for msc step limit for e+- 0.04 +Range factor for msc step limit for muons/hadrons 0.2 +Geometry factor for msc step limitation of e+- 2.5 +Safety factor for msc step limit for e+- 0.6 +Skin parameter for msc step limitation of e+- 1 +Lambda limit for msc step limit for e+- 1 mm +Use Mott correction for e- scattering 0 +Factor used for dynamic computation of angular + limit between single and multiple scattering 1 +Fixed angular limit between single + and multiple scattering 3.1416 rad +Upper energy limit for e+- multiple scattering 100 MeV +Type of electron single scattering model 0 +Type of nuclear form-factor 1 +Screening factor 1 +======================================================================= + +phot: for gamma SubType=12 BuildTable=0 + LambdaPrime table from 200 keV to 100 TeV in 61 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermorePhElectric : Emin= 0 eV Emax= 100 TeV SauterGavrila Fluo + +compt: for gamma SubType=13 BuildTable=1 + Lambda table from 100 eV to 1 MeV, 7 bins/decade, spline: 1 + LambdaPrime table from 1 MeV to 100 TeV in 56 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Klein-Nishina : Emin= 0 eV Emax= 100 TeV + +conv: for gamma SubType=14 BuildTable=1 + Lambda table from 1.022 MeV to 100 TeV, 18 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + BetheHeitlerLPM : Emin= 0 eV Emax= 100 TeV ModifiedTsai + +Rayl: for gamma SubType=11 BuildTable=1 + Lambda table from 100 eV to 150 keV, 7 bins/decade, spline: 0 + LambdaPrime table from 150 keV to 100 TeV in 62 bins + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + LivermoreRayleigh : Emin= 0 eV Emax= 100 TeV CullenGenerator + +msc: for e- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + UrbanMsc : Emin= 0 eV Emax= 100 MeV Nbins=42 100 eV - 100 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=42 100 MeV - 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +eIoni: for e- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MollerBhabha : Emin= 0 eV Emax= 100 TeV + +eBrem: for e- XStype:4 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eBremSB : Emin= 0 eV Emax= 1 GeV ModifiedTsai + eBremLPM : Emin= 1 GeV Emax= 100 TeV ModifiedTsai + +CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 + Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 100 MeV Emax= 100 TeV + +msc: for e+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + UrbanMsc : Emin= 0 eV Emax= 100 MeV Nbins=42 100 eV - 100 MeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + WentzelVIUni : Emin= 100 MeV Emax= 100 TeV Nbins=42 100 MeV - 100 TeV + StepLim=UseSafety Rfact=0.04 Gfact=2.5 Sfact=0.6 DispFlag:1 Skin=1 Llim=1 mm + +eIoni: for e+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MollerBhabha : Emin= 0 eV Emax= 100 TeV + +eBrem: for e+ XStype:4 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + LPM flag: 1 for E > 1 GeV, VertexHighEnergyTh(GeV)= 100000 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eBremSB : Emin= 0 eV Emax= 1 GeV ModifiedTsai + eBremLPM : Emin= 1 GeV Emax= 100 TeV ModifiedTsai + +annihil: for e+ XStype:2 SubType=5 BuildTable=0 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eplus2gg : Emin= 0 eV Emax= 100 TeV + +CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 + Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 100 MeV Emax= 100 TeV + +msc: for proton SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +hIoni: for proton XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax= 2 MeV + BetheBloch : Emin= 2 MeV Emax= 100 TeV + +hBrems: for proton XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for proton XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + Sampling table 17x1001 from 7.50618 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for GenericIon SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + UrbanMsc : Emin= 0 eV Emax= 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +ionIoni: for GenericIon XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + BraggIon : Emin= 0 eV Emax= 2 MeV + BetheBloch : Emin= 2 MeV Emax= 100 TeV + +msc: for alpha SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + UrbanMsc : Emin= 0 eV Emax= 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +ionIoni: for alpha XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + BraggIon : Emin= 0 eV Emax=7.9452 MeV + BetheBloch : Emin=7.9452 MeV Emax= 100 TeV + +msc: for anti_proton SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +hIoni: for anti_proton XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax= 2 MeV + BetheBloch : Emin= 2 MeV Emax= 100 TeV + +hBrems: for anti_proton XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for anti_proton XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + Sampling table 17x1001 from 7.50618 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for kaon+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +hIoni: for kaon+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=1.05231 MeV + BetheBloch : Emin=1.05231 MeV Emax= 100 TeV + +hBrems: for kaon+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for kaon+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + Sampling table 18x1001 from 3.94942 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for kaon- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +hIoni: for kaon- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=1.05231 MeV + BetheBloch : Emin=1.05231 MeV Emax= 100 TeV + +hBrems: for kaon- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for kaon- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + Sampling table 18x1001 from 3.94942 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 + Used Lambda table of kaon+ + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for mu+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +muIoni: for mu+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax= 200 keV + MuBetheBloch : Emin= 200 keV Emax= 100 TeV + +muBrems: for mu+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +muPairProd: for mu+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + Sampling table 21x1001 from 0.85 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for mu- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +muIoni: for mu- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax= 200 keV + MuBetheBloch : Emin= 200 keV Emax= 100 TeV + +muBrems: for mu- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + MuBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +muPairProd: for mu- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + Sampling table 21x1001 from 0.85 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + muPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 + Used Lambda table of mu+ + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for pi+ SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +hIoni: for pi+ XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + Bragg : Emin= 0 eV Emax=297.505 keV + BetheBloch : Emin=297.505 keV Emax= 100 TeV + +hBrems: for pi+ XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for pi+ XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + Sampling table 20x1001 from 1.11656 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 + Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +msc: for pi- SubType= 10 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + WentzelVIUni : Emin= 0 eV Emax= 100 TeV Nbins=84 100 eV - 100 TeV + StepLim=Minimal Rfact=0.2 Gfact=2.5 Sfact=0.6 DispFlag:0 Skin=1 Llim=1 mm + +hIoni: for pi- XStype:3 SubType=2 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.01 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + ICRU73QO : Emin= 0 eV Emax=297.505 keV + BetheBloch : Emin=297.505 keV Emax= 100 TeV + +hBrems: for pi- XStype:1 SubType=3 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hBrem : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +hPairProd: for pi- XStype:1 SubType=4 + dE/dx and range tables from 100 eV to 100 TeV in 84 bins + Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 + Sampling table 20x1001 from 1.11656 GeV to 100 TeV + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + hPairProd : Emin= 0 eV Emax= 100 TeV ModifiedMephi + +CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 + Used Lambda table of pi+ + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 + ===== EM models for the G4Region DefaultRegionForTheWorld ====== + eCoulombScattering : Emin= 0 eV Emax= 100 TeV + +==================================================================== + HADRONIC PROCESSES SUMMARY (verbose level 1) + +--------------------------------------------------- + Hadronic Processes for neutron + + Process: hadElastic + Model: hElasticCHIPS: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronElasticXS: 0 eV ---> 100 TeV + + + Process: neutronInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: G4NeutronInelasticXS: 0 eV ---> 100 TeV + + + Process: nCapture + Model: nRadCapture: 0 eV ---> 100 TeV + Cr_sctns: G4NeutronCaptureXS: 0 eV ---> 100 TeV + + + Process: nKiller + +--------------------------------------------------- + Hadronic Processes for B- + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: B-Inelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for D- + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: D-Inelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for GenericIon + + Process: ionInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for He3 + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + + Process: He3Inelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for alpha + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + + Process: alphaInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for anti_He3 + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_He3Inelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_alpha + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_alphaInelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_deuteron + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_deuteronInelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_hypertriton + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_lambda + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: anti_lambdaInelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_neutron + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100.1 MeV + Model: AntiAElastic: 100 MeV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_neutronInelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_proton + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100.1 MeV + Model: AntiAElastic: 100 MeV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_protonInelastic + Model: FTFP: 0 eV ---> 100 TeV + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for anti_triton + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100.1 MeV/n + Model: AntiAElastic: 100 MeV/n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: anti_tritonInelastic + Model: FTFP: 0 eV /n ---> 100 TeV/n + Cr_sctns: AntiAGlauber: 0 eV ---> 25.6 PeV + + + Process: hFritiofCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for deuteron + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + + Process: dInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +--------------------------------------------------- + Hadronic Processes for e+ + + Process: positronNuclear + Model: G4ElectroVDNuclearModel: 0 eV ---> 1 PeV + Cr_sctns: ElectroNuclearXS: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for e- + + Process: electronNuclear + Model: G4ElectroVDNuclearModel: 0 eV ---> 1 PeV + Cr_sctns: ElectroNuclearXS: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for gamma + + Process: photonNuclear + Model: GammaNPreco: 0 eV ---> 200 MeV + Model: BertiniCascade: 199 MeV ---> 6 GeV + Model: TheoFSGenerator: 3 GeV ---> 100 TeV + Cr_sctns: GammaNuclearXS: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for kaon+ + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: kaon+Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for kaon- + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: kaon-Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: hBertiniCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for lambda + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: lambdaInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for mu+ + + Process: muonNuclear + Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV + Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for mu- + + Process: muonNuclear + Model: G4MuonVDNuclearModel: 0 eV ---> 1 PeV + Cr_sctns: KokoulinMuonNuclearXS: 0 eV ---> 100 TeV + + + Process: muMinusCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for pi+ + + Process: hadElastic + Model: hElasticGlauber: 0 eV ---> 100 TeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + + Process: pi+Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for pi- + + Process: hadElastic + Model: hElasticGlauber: 0 eV ---> 100 TeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + + Process: pi-Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + + Process: hBertiniCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for proton + + Process: hadElastic + Model: hElasticCHIPS: 0 eV ---> 100 TeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + + Process: protonInelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: BarashenkovGlauberGribov: 0 eV ---> 100 TeV + + +--------------------------------------------------- + Hadronic Processes for sigma- + + Process: hadElastic + Model: hElasticLHEP: 0 eV ---> 100 TeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: sigma-Inelastic + Model: FTFP: 3 GeV ---> 100 TeV + Model: BertiniCascade: 0 eV ---> 6 GeV + Cr_sctns: Glauber-Gribov: 0 eV ---> 100 TeV + + + Process: hBertiniCaptureAtRest + +--------------------------------------------------- + Hadronic Processes for triton + + Process: hadElastic + Model: hElasticLHEP: 0 eV /n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + + Process: tInelastic + Model: Binary Light Ion Cascade: 0 eV /n ---> 6 GeV/n + Model: FTFP: 3 GeV/n ---> 100 TeV/n + Cr_sctns: Glauber-Gribov Nucl-nucl: 0 eV ---> 25.6 PeV + + +================================================================ +======================================================================= +====== Geant4 Native Pre-compound Model Parameters ======== +======================================================================= +Type of pre-compound inverse x-section 3 +Pre-compound model active 1 +Pre-compound excitation low energy 100 keV +Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= +Type of de-excitation inverse x-section 3 +Type of de-excitation factory Evaporation+GEM +Number of de-excitation channels 68 +Min excitation energy 10 eV +Min energy per nucleon for multifragmentation 200 GeV +Limit excitation energy for Fermi BreakUp 20 MeV +Level density (1/MeV) 0.075 +Use simple level density model 1 +Use discrete excitation energy of the residual 1 +Time limit for long lived isomeres 1 ns +Isomer production flag 1 +Internal e- conversion flag 1 +Store e- internal conversion data 0 +Correlated gamma emission flag 0 +Max 2J for sampling of angular correlations 10 +======================================================================= +G4GDML: Writing 'g01-schema.gdml'... +G4GDML: Writing definitions... +G4GDML: Writing materials... +G4GDML: Writing solids... +G4GDML: Writing structure... +G4GDML: Writing userinfo... +G4GDML: Writing setup... +G4GDML: Writing surfaces... +G4GDML: Writing 'g01-schema.gdml' done ! +/run/verbose 2 +/run/beamOn 20 + +Region -- -- appears in world volume + This region is in the mass world. + Root logical volume(s) : World + Pointers : G4VUserRegionInformation[0], G4UserLimits[0], G4FastSimulationManager[0], G4UserSteppingAction[0] + Materials : Air Water + Production cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + +Region -- -- is not associated to any world. + Root logical volume(s) : + Pointers : G4VUserRegionInformation[0], G4UserLimits[0], G4FastSimulationManager[0], G4UserSteppingAction[0] + Materials : + Production cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : Air + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Water + Range cuts : gamma 700 um e- 700 um e+ 700 um proton 700 um + Energy thresholds : gamma 2.52493 keV e- 277.585 keV e+ 270.777 keV proton 70 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +G4VisManager: Using G4TrajectoryDrawByCharge as fallback trajectory model. +See commands in /vis/modeling/trajectories/ for other options. +### Run 0 starts. + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 0.1 0.1 1e+03 0 1.22e+03 1.22e+03 vol701_PV Transportation + 2 -720 0.1 0.1 1e+03 0 60 1.28e+03 World_PV Transportation + 3 -540 0.1 0.1 1e+03 0 180 1.46e+03 vol101_PV Transportation + 4 -535 0.1 0.1 1e+03 0 5 1.46e+03 World_PV Transportation + 5 -278 0.1 0.1 1e+03 0 257 1.72e+03 vol1_PV Transportation + 6 -222 0.1 0.1 1e+03 0 55 1.78e+03 World_PV Transportation + 7 -130 0.1 0.1 1e+03 0 92.6 1.87e+03 vol2_PV Transportation + 8 -120 0.1 0.1 1e+03 0 10 1.88e+03 World_PV Transportation + 9 -5 0.1 0.1 1e+03 0 115 1.99e+03 vol0_PV Transportation + 10 5 0.1 0.1 1e+03 0 10 2e+03 World_PV Transportation + 11 75 0.1 0.1 1e+03 0 70 2.08e+03 vol3_PV Transportation + 12 175 0.1 0.1 1e+03 0 100 2.17e+03 World_PV Transportation + 13 245 0.1 0.1 1e+03 0 70.1 2.25e+03 vol4_PV Transportation + 14 255 0.1 0.1 1e+03 0 10 2.26e+03 World_PV Transportation + 15 535 0.1 0.1 1e+03 0 280 2.53e+03 vol71_PV Transportation + 16 565 0.1 0.1 1e+03 0 30 2.56e+03 World_PV Transportation + 17 740 0.1 0.1 1e+03 0 175 2.74e+03 vol201_PV Transportation + 18 760 0.1 0.1 1e+03 0 19.9 2.76e+03 World_PV Transportation + 19 948 0.1 0.1 1e+03 0 188 2.95e+03 vol1001_PV Transportation + 20 952 0.1 0.1 1e+03 0 3.8 2.95e+03 World_PV Transportation + 21 5e+03 0.1 0.1 1e+03 0 4.05e+03 7e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 122 0.1 1e+03 0 1.23e+03 1.23e+03 vol601_PV Transportation + 2 -760 124 0.1 1e+03 0 20 1.25e+03 World_PV Transportation + 3 -740 126 0.1 1e+03 0 20 1.27e+03 vol601_PV Transportation + 4 -720 128 0.1 1e+03 0 20 1.29e+03 World_PV Transportation + 5 5e+03 700 0.1 1e+03 0 5.75e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 5e+03 0.1 700 1e+03 0 7.03e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 0.1 0.1 1e+03 0 1.22e+03 1.22e+03 vol701_PV Transportation + 2 -720 0.1 0.1 1e+03 0 60 1.28e+03 World_PV Transportation + 3 -540 0.1 0.1 1e+03 0 180 1.46e+03 vol101_PV Transportation + 4 -535 0.1 0.1 1e+03 0 5 1.46e+03 World_PV Transportation + 5 -278 0.1 0.1 1e+03 0 257 1.72e+03 vol1_PV Transportation + 6 -222 0.1 0.1 1e+03 0 55 1.78e+03 World_PV Transportation + 7 -130 0.1 0.1 1e+03 0 92.6 1.87e+03 vol2_PV Transportation + 8 -120 0.1 0.1 1e+03 0 10 1.88e+03 World_PV Transportation + 9 -5 0.1 0.1 1e+03 0 115 1.99e+03 vol0_PV Transportation + 10 5 0.1 0.1 1e+03 0 10 2e+03 World_PV Transportation + 11 75 0.1 0.1 1e+03 0 70 2.08e+03 vol3_PV Transportation + 12 175 0.1 0.1 1e+03 0 100 2.17e+03 World_PV Transportation + 13 245 0.1 0.1 1e+03 0 70.1 2.25e+03 vol4_PV Transportation + 14 255 0.1 0.1 1e+03 0 10 2.26e+03 World_PV Transportation + 15 535 0.1 0.1 1e+03 0 280 2.53e+03 vol71_PV Transportation + 16 565 0.1 0.1 1e+03 0 30 2.56e+03 World_PV Transportation + 17 740 0.1 0.1 1e+03 0 175 2.74e+03 vol201_PV Transportation + 18 760 0.1 0.1 1e+03 0 19.9 2.76e+03 World_PV Transportation + 19 948 0.1 0.1 1e+03 0 188 2.95e+03 vol1001_PV Transportation + 20 952 0.1 0.1 1e+03 0 3.8 2.95e+03 World_PV Transportation + 21 5e+03 0.1 0.1 1e+03 0 4.05e+03 7e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 122 0.1 1e+03 0 1.23e+03 1.23e+03 vol601_PV Transportation + 2 -760 124 0.1 1e+03 0 20 1.25e+03 World_PV Transportation + 3 -740 126 0.1 1e+03 0 20 1.27e+03 vol601_PV Transportation + 4 -720 128 0.1 1e+03 0 20 1.29e+03 World_PV Transportation + 5 5e+03 700 0.1 1e+03 0 5.75e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 5e+03 0.1 700 1e+03 0 7.03e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 0.1 0.1 1e+03 0 1.22e+03 1.22e+03 vol701_PV Transportation + 2 -720 0.1 0.1 1e+03 0 60 1.28e+03 World_PV Transportation + 3 -540 0.1 0.1 1e+03 0 180 1.46e+03 vol101_PV Transportation + 4 -535 0.1 0.1 1e+03 0 5 1.46e+03 World_PV Transportation + 5 -278 0.1 0.1 1e+03 0 257 1.72e+03 vol1_PV Transportation + 6 -222 0.1 0.1 1e+03 0 55 1.78e+03 World_PV Transportation + 7 -130 0.1 0.1 1e+03 0 92.6 1.87e+03 vol2_PV Transportation + 8 -120 0.1 0.1 1e+03 0 10 1.88e+03 World_PV Transportation + 9 -5 0.1 0.1 1e+03 0 115 1.99e+03 vol0_PV Transportation + 10 5 0.1 0.1 1e+03 0 10 2e+03 World_PV Transportation + 11 75 0.1 0.1 1e+03 0 70 2.08e+03 vol3_PV Transportation + 12 175 0.1 0.1 1e+03 0 100 2.17e+03 World_PV Transportation + 13 245 0.1 0.1 1e+03 0 70.1 2.25e+03 vol4_PV Transportation + 14 255 0.1 0.1 1e+03 0 10 2.26e+03 World_PV Transportation + 15 535 0.1 0.1 1e+03 0 280 2.53e+03 vol71_PV Transportation + 16 565 0.1 0.1 1e+03 0 30 2.56e+03 World_PV Transportation + 17 740 0.1 0.1 1e+03 0 175 2.74e+03 vol201_PV Transportation + 18 760 0.1 0.1 1e+03 0 19.9 2.76e+03 World_PV Transportation + 19 948 0.1 0.1 1e+03 0 188 2.95e+03 vol1001_PV Transportation + 20 952 0.1 0.1 1e+03 0 3.8 2.95e+03 World_PV Transportation + 21 5e+03 0.1 0.1 1e+03 0 4.05e+03 7e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 122 0.1 1e+03 0 1.23e+03 1.23e+03 vol601_PV Transportation + 2 -760 124 0.1 1e+03 0 20 1.25e+03 World_PV Transportation + 3 -740 126 0.1 1e+03 0 20 1.27e+03 vol601_PV Transportation + 4 -720 128 0.1 1e+03 0 20 1.29e+03 World_PV Transportation + 5 5e+03 700 0.1 1e+03 0 5.75e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 5e+03 0.1 700 1e+03 0 7.03e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 0.1 0.1 1e+03 0 1.22e+03 1.22e+03 vol701_PV Transportation + 2 -720 0.1 0.1 1e+03 0 60 1.28e+03 World_PV Transportation + 3 -540 0.1 0.1 1e+03 0 180 1.46e+03 vol101_PV Transportation + 4 -535 0.1 0.1 1e+03 0 5 1.46e+03 World_PV Transportation + 5 -278 0.1 0.1 1e+03 0 257 1.72e+03 vol1_PV Transportation + 6 -222 0.1 0.1 1e+03 0 55 1.78e+03 World_PV Transportation + 7 -130 0.1 0.1 1e+03 0 92.6 1.87e+03 vol2_PV Transportation + 8 -120 0.1 0.1 1e+03 0 10 1.88e+03 World_PV Transportation + 9 -5 0.1 0.1 1e+03 0 115 1.99e+03 vol0_PV Transportation + 10 5 0.1 0.1 1e+03 0 10 2e+03 World_PV Transportation + 11 75 0.1 0.1 1e+03 0 70 2.08e+03 vol3_PV Transportation + 12 175 0.1 0.1 1e+03 0 100 2.17e+03 World_PV Transportation + 13 245 0.1 0.1 1e+03 0 70.1 2.25e+03 vol4_PV Transportation + 14 255 0.1 0.1 1e+03 0 10 2.26e+03 World_PV Transportation + 15 535 0.1 0.1 1e+03 0 280 2.53e+03 vol71_PV Transportation + 16 565 0.1 0.1 1e+03 0 30 2.56e+03 World_PV Transportation + 17 740 0.1 0.1 1e+03 0 175 2.74e+03 vol201_PV Transportation + 18 760 0.1 0.1 1e+03 0 19.9 2.76e+03 World_PV Transportation + 19 948 0.1 0.1 1e+03 0 188 2.95e+03 vol1001_PV Transportation + 20 952 0.1 0.1 1e+03 0 3.8 2.95e+03 World_PV Transportation + 21 5e+03 0.1 0.1 1e+03 0 4.05e+03 7e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 122 0.1 1e+03 0 1.23e+03 1.23e+03 vol601_PV Transportation + 2 -760 124 0.1 1e+03 0 20 1.25e+03 World_PV Transportation + 3 -740 126 0.1 1e+03 0 20 1.27e+03 vol601_PV Transportation + 4 -720 128 0.1 1e+03 0 20 1.29e+03 World_PV Transportation + 5 5e+03 700 0.1 1e+03 0 5.75e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 5e+03 0.1 700 1e+03 0 7.03e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 0.1 0.1 1e+03 0 1.22e+03 1.22e+03 vol701_PV Transportation + 2 -720 0.1 0.1 1e+03 0 60 1.28e+03 World_PV Transportation + 3 -540 0.1 0.1 1e+03 0 180 1.46e+03 vol101_PV Transportation + 4 -535 0.1 0.1 1e+03 0 5 1.46e+03 World_PV Transportation + 5 -278 0.1 0.1 1e+03 0 257 1.72e+03 vol1_PV Transportation + 6 -222 0.1 0.1 1e+03 0 55 1.78e+03 World_PV Transportation + 7 -130 0.1 0.1 1e+03 0 92.6 1.87e+03 vol2_PV Transportation + 8 -120 0.1 0.1 1e+03 0 10 1.88e+03 World_PV Transportation + 9 -5 0.1 0.1 1e+03 0 115 1.99e+03 vol0_PV Transportation + 10 5 0.1 0.1 1e+03 0 10 2e+03 World_PV Transportation + 11 75 0.1 0.1 1e+03 0 70 2.08e+03 vol3_PV Transportation + 12 175 0.1 0.1 1e+03 0 100 2.17e+03 World_PV Transportation + 13 245 0.1 0.1 1e+03 0 70.1 2.25e+03 vol4_PV Transportation + 14 255 0.1 0.1 1e+03 0 10 2.26e+03 World_PV Transportation + 15 535 0.1 0.1 1e+03 0 280 2.53e+03 vol71_PV Transportation + 16 565 0.1 0.1 1e+03 0 30 2.56e+03 World_PV Transportation + 17 740 0.1 0.1 1e+03 0 175 2.74e+03 vol201_PV Transportation + 18 760 0.1 0.1 1e+03 0 19.9 2.76e+03 World_PV Transportation + 19 948 0.1 0.1 1e+03 0 188 2.95e+03 vol1001_PV Transportation + 20 952 0.1 0.1 1e+03 0 3.8 2.95e+03 World_PV Transportation + 21 5e+03 0.1 0.1 1e+03 0 4.05e+03 7e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 122 0.1 1e+03 0 1.23e+03 1.23e+03 vol601_PV Transportation + 2 -760 124 0.1 1e+03 0 20 1.25e+03 World_PV Transportation + 3 -740 126 0.1 1e+03 0 20 1.27e+03 vol601_PV Transportation + 4 -720 128 0.1 1e+03 0 20 1.29e+03 World_PV Transportation + 5 5e+03 700 0.1 1e+03 0 5.75e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 5e+03 0.1 700 1e+03 0 7.03e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 0.1 0.1 1e+03 0 1.22e+03 1.22e+03 vol701_PV Transportation + 2 -720 0.1 0.1 1e+03 0 60 1.28e+03 World_PV Transportation + 3 -540 0.1 0.1 1e+03 0 180 1.46e+03 vol101_PV Transportation + 4 -535 0.1 0.1 1e+03 0 5 1.46e+03 World_PV Transportation + 5 -278 0.1 0.1 1e+03 0 257 1.72e+03 vol1_PV Transportation + 6 -222 0.1 0.1 1e+03 0 55 1.78e+03 World_PV Transportation + 7 -130 0.1 0.1 1e+03 0 92.6 1.87e+03 vol2_PV Transportation + 8 -120 0.1 0.1 1e+03 0 10 1.88e+03 World_PV Transportation + 9 -5 0.1 0.1 1e+03 0 115 1.99e+03 vol0_PV Transportation + 10 5 0.1 0.1 1e+03 0 10 2e+03 World_PV Transportation + 11 75 0.1 0.1 1e+03 0 70 2.08e+03 vol3_PV Transportation + 12 175 0.1 0.1 1e+03 0 100 2.17e+03 World_PV Transportation + 13 245 0.1 0.1 1e+03 0 70.1 2.25e+03 vol4_PV Transportation + 14 255 0.1 0.1 1e+03 0 10 2.26e+03 World_PV Transportation + 15 535 0.1 0.1 1e+03 0 280 2.53e+03 vol71_PV Transportation + 16 565 0.1 0.1 1e+03 0 30 2.56e+03 World_PV Transportation + 17 740 0.1 0.1 1e+03 0 175 2.74e+03 vol201_PV Transportation + 18 760 0.1 0.1 1e+03 0 19.9 2.76e+03 World_PV Transportation + 19 948 0.1 0.1 1e+03 0 188 2.95e+03 vol1001_PV Transportation + 20 952 0.1 0.1 1e+03 0 3.8 2.95e+03 World_PV Transportation + 21 5e+03 0.1 0.1 1e+03 0 4.05e+03 7e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 122 0.1 1e+03 0 1.23e+03 1.23e+03 vol601_PV Transportation + 2 -760 124 0.1 1e+03 0 20 1.25e+03 World_PV Transportation + 3 -740 126 0.1 1e+03 0 20 1.27e+03 vol601_PV Transportation + 4 -720 128 0.1 1e+03 0 20 1.29e+03 World_PV Transportation + 5 5e+03 700 0.1 1e+03 0 5.75e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 5e+03 0.1 700 1e+03 0 7.03e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 0.1 0.1 1e+03 0 1.22e+03 1.22e+03 vol701_PV Transportation + 2 -720 0.1 0.1 1e+03 0 60 1.28e+03 World_PV Transportation + 3 -540 0.1 0.1 1e+03 0 180 1.46e+03 vol101_PV Transportation + 4 -535 0.1 0.1 1e+03 0 5 1.46e+03 World_PV Transportation + 5 -278 0.1 0.1 1e+03 0 257 1.72e+03 vol1_PV Transportation + 6 -222 0.1 0.1 1e+03 0 55 1.78e+03 World_PV Transportation + 7 -130 0.1 0.1 1e+03 0 92.6 1.87e+03 vol2_PV Transportation + 8 -120 0.1 0.1 1e+03 0 10 1.88e+03 World_PV Transportation + 9 -5 0.1 0.1 1e+03 0 115 1.99e+03 vol0_PV Transportation + 10 5 0.1 0.1 1e+03 0 10 2e+03 World_PV Transportation + 11 75 0.1 0.1 1e+03 0 70 2.08e+03 vol3_PV Transportation + 12 175 0.1 0.1 1e+03 0 100 2.17e+03 World_PV Transportation + 13 245 0.1 0.1 1e+03 0 70.1 2.25e+03 vol4_PV Transportation + 14 255 0.1 0.1 1e+03 0 10 2.26e+03 World_PV Transportation + 15 535 0.1 0.1 1e+03 0 280 2.53e+03 vol71_PV Transportation + 16 565 0.1 0.1 1e+03 0 30 2.56e+03 World_PV Transportation + 17 740 0.1 0.1 1e+03 0 175 2.74e+03 vol201_PV Transportation + 18 760 0.1 0.1 1e+03 0 19.9 2.76e+03 World_PV Transportation + 19 948 0.1 0.1 1e+03 0 188 2.95e+03 vol1001_PV Transportation + 20 952 0.1 0.1 1e+03 0 3.8 2.95e+03 World_PV Transportation + 21 5e+03 0.1 0.1 1e+03 0 4.05e+03 7e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 122 0.1 1e+03 0 1.23e+03 1.23e+03 vol601_PV Transportation + 2 -760 124 0.1 1e+03 0 20 1.25e+03 World_PV Transportation + 3 -740 126 0.1 1e+03 0 20 1.27e+03 vol601_PV Transportation + 4 -720 128 0.1 1e+03 0 20 1.29e+03 World_PV Transportation + 5 5e+03 700 0.1 1e+03 0 5.75e+03 7.03e+03 OutOfWorld Transportation + Run terminated. +Run Summary + Number of events processed : 20 + User=0.000000s Real=0.004501s Sys=0.000000s +/gun/direction 0 0 -1 +/run/beamOn 20 + +Region -- -- appears in world volume + This region is in the mass world. + Root logical volume(s) : World + Pointers : G4VUserRegionInformation[0], G4UserLimits[0], G4FastSimulationManager[0], G4UserSteppingAction[0] + Materials : Air Water + Production cuts : gamma 699.9999999999999 um e- 699.9999999999999 um e+ 699.9999999999999 um proton 699.9999999999999 um + +Region -- -- is not associated to any world. + Root logical volume(s) : + Pointers : G4VUserRegionInformation[0], G4UserLimits[0], G4FastSimulationManager[0], G4UserSteppingAction[0] + Materials : + Production cuts : gamma 699.9999999999999 um e- 699.9999999999999 um e+ 699.9999999999999 um proton 699.9999999999999 um + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : Air + Range cuts : gamma 699.9999999999999 um e- 699.9999999999999 um e+ 699.9999999999999 um proton 699.9999999999999 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 69.99999999999999 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Water + Range cuts : gamma 699.9999999999999 um e- 699.9999999999999 um e+ 699.9999999999999 um proton 699.9999999999999 um + Energy thresholds : gamma 2.524928407830887 keV e- 277.5854813538532 keV e+ 270.7768048552311 keV proton 69.99999999999999 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 1 starts. + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 0.1 0.1 1e+03 0 1.22e+03 1.22e+03 vol701_PV Transportation + 2 -720 0.1 0.1 1e+03 0 60 1.28e+03 World_PV Transportation + 3 -540 0.1 0.1 1e+03 0 180 1.46e+03 vol101_PV Transportation + 4 -535 0.1 0.1 1e+03 0 5 1.46e+03 World_PV Transportation + 5 -278 0.1 0.1 1e+03 0 257 1.72e+03 vol1_PV Transportation + 6 -222 0.1 0.1 1e+03 0 55 1.78e+03 World_PV Transportation + 7 -130 0.1 0.1 1e+03 0 92.6 1.87e+03 vol2_PV Transportation + 8 -120 0.1 0.1 1e+03 0 10 1.88e+03 World_PV Transportation + 9 -5 0.1 0.1 1e+03 0 115 1.99e+03 vol0_PV Transportation + 10 5 0.1 0.1 1e+03 0 10 2e+03 World_PV Transportation + 11 75 0.1 0.1 1e+03 0 70 2.08e+03 vol3_PV Transportation + 12 175 0.1 0.1 1e+03 0 100 2.17e+03 World_PV Transportation + 13 245 0.1 0.1 1e+03 0 70.1 2.25e+03 vol4_PV Transportation + 14 255 0.1 0.1 1e+03 0 10 2.26e+03 World_PV Transportation + 15 535 0.1 0.1 1e+03 0 280 2.53e+03 vol71_PV Transportation + 16 565 0.1 0.1 1e+03 0 30 2.56e+03 World_PV Transportation + 17 740 0.1 0.1 1e+03 0 175 2.74e+03 vol201_PV Transportation + 18 760 0.1 0.1 1e+03 0 19.9 2.76e+03 World_PV Transportation + 19 948 0.1 0.1 1e+03 0 188 2.95e+03 vol1001_PV Transportation + 20 952 0.1 0.1 1e+03 0 3.8 2.95e+03 World_PV Transportation + 21 5e+03 0.1 0.1 1e+03 0 4.05e+03 7e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 122 0.1 1e+03 0 1.23e+03 1.23e+03 vol601_PV Transportation + 2 -760 124 0.1 1e+03 0 20 1.25e+03 World_PV Transportation + 3 -740 126 0.1 1e+03 0 20 1.27e+03 vol601_PV Transportation + 4 -720 128 0.1 1e+03 0 20 1.29e+03 World_PV Transportation + 5 5e+03 700 0.1 1e+03 0 5.75e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 5e+03 0.1 700 1e+03 0 7.03e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 0.1 0.1 1e+03 0 1.22e+03 1.22e+03 vol701_PV Transportation + 2 -720 0.1 0.1 1e+03 0 60 1.28e+03 World_PV Transportation + 3 -540 0.1 0.1 1e+03 0 180 1.46e+03 vol101_PV Transportation + 4 -535 0.1 0.1 1e+03 0 5 1.46e+03 World_PV Transportation + 5 -278 0.1 0.1 1e+03 0 257 1.72e+03 vol1_PV Transportation + 6 -222 0.1 0.1 1e+03 0 55 1.78e+03 World_PV Transportation + 7 -130 0.1 0.1 1e+03 0 92.6 1.87e+03 vol2_PV Transportation + 8 -120 0.1 0.1 1e+03 0 10 1.88e+03 World_PV Transportation + 9 -5 0.1 0.1 1e+03 0 115 1.99e+03 vol0_PV Transportation + 10 5 0.1 0.1 1e+03 0 10 2e+03 World_PV Transportation + 11 75 0.1 0.1 1e+03 0 70 2.08e+03 vol3_PV Transportation + 12 175 0.1 0.1 1e+03 0 100 2.17e+03 World_PV Transportation + 13 245 0.1 0.1 1e+03 0 70.1 2.25e+03 vol4_PV Transportation + 14 255 0.1 0.1 1e+03 0 10 2.26e+03 World_PV Transportation + 15 535 0.1 0.1 1e+03 0 280 2.53e+03 vol71_PV Transportation + 16 565 0.1 0.1 1e+03 0 30 2.56e+03 World_PV Transportation + 17 740 0.1 0.1 1e+03 0 175 2.74e+03 vol201_PV Transportation + 18 760 0.1 0.1 1e+03 0 19.9 2.76e+03 World_PV Transportation + 19 948 0.1 0.1 1e+03 0 188 2.95e+03 vol1001_PV Transportation + 20 952 0.1 0.1 1e+03 0 3.8 2.95e+03 World_PV Transportation + 21 5e+03 0.1 0.1 1e+03 0 4.05e+03 7e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 122 0.1 1e+03 0 1.23e+03 1.23e+03 vol601_PV Transportation + 2 -760 124 0.1 1e+03 0 20 1.25e+03 World_PV Transportation + 3 -740 126 0.1 1e+03 0 20 1.27e+03 vol601_PV Transportation + 4 -720 128 0.1 1e+03 0 20 1.29e+03 World_PV Transportation + 5 5e+03 700 0.1 1e+03 0 5.75e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 5e+03 0.1 700 1e+03 0 7.03e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 0.1 0.1 1e+03 0 1.22e+03 1.22e+03 vol701_PV Transportation + 2 -720 0.1 0.1 1e+03 0 60 1.28e+03 World_PV Transportation + 3 -540 0.1 0.1 1e+03 0 180 1.46e+03 vol101_PV Transportation + 4 -535 0.1 0.1 1e+03 0 5 1.46e+03 World_PV Transportation + 5 -278 0.1 0.1 1e+03 0 257 1.72e+03 vol1_PV Transportation + 6 -222 0.1 0.1 1e+03 0 55 1.78e+03 World_PV Transportation + 7 -130 0.1 0.1 1e+03 0 92.6 1.87e+03 vol2_PV Transportation + 8 -120 0.1 0.1 1e+03 0 10 1.88e+03 World_PV Transportation + 9 -5 0.1 0.1 1e+03 0 115 1.99e+03 vol0_PV Transportation + 10 5 0.1 0.1 1e+03 0 10 2e+03 World_PV Transportation + 11 75 0.1 0.1 1e+03 0 70 2.08e+03 vol3_PV Transportation + 12 175 0.1 0.1 1e+03 0 100 2.17e+03 World_PV Transportation + 13 245 0.1 0.1 1e+03 0 70.1 2.25e+03 vol4_PV Transportation + 14 255 0.1 0.1 1e+03 0 10 2.26e+03 World_PV Transportation + 15 535 0.1 0.1 1e+03 0 280 2.53e+03 vol71_PV Transportation + 16 565 0.1 0.1 1e+03 0 30 2.56e+03 World_PV Transportation + 17 740 0.1 0.1 1e+03 0 175 2.74e+03 vol201_PV Transportation + 18 760 0.1 0.1 1e+03 0 19.9 2.76e+03 World_PV Transportation + 19 948 0.1 0.1 1e+03 0 188 2.95e+03 vol1001_PV Transportation + 20 952 0.1 0.1 1e+03 0 3.8 2.95e+03 World_PV Transportation + 21 5e+03 0.1 0.1 1e+03 0 4.05e+03 7e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 122 0.1 1e+03 0 1.23e+03 1.23e+03 vol601_PV Transportation + 2 -760 124 0.1 1e+03 0 20 1.25e+03 World_PV Transportation + 3 -740 126 0.1 1e+03 0 20 1.27e+03 vol601_PV Transportation + 4 -720 128 0.1 1e+03 0 20 1.29e+03 World_PV Transportation + 5 5e+03 700 0.1 1e+03 0 5.75e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 5e+03 0.1 700 1e+03 0 7.03e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 0.1 0.1 1e+03 0 1.22e+03 1.22e+03 vol701_PV Transportation + 2 -720 0.1 0.1 1e+03 0 60 1.28e+03 World_PV Transportation + 3 -540 0.1 0.1 1e+03 0 180 1.46e+03 vol101_PV Transportation + 4 -535 0.1 0.1 1e+03 0 5 1.46e+03 World_PV Transportation + 5 -278 0.1 0.1 1e+03 0 257 1.72e+03 vol1_PV Transportation + 6 -222 0.1 0.1 1e+03 0 55 1.78e+03 World_PV Transportation + 7 -130 0.1 0.1 1e+03 0 92.6 1.87e+03 vol2_PV Transportation + 8 -120 0.1 0.1 1e+03 0 10 1.88e+03 World_PV Transportation + 9 -5 0.1 0.1 1e+03 0 115 1.99e+03 vol0_PV Transportation + 10 5 0.1 0.1 1e+03 0 10 2e+03 World_PV Transportation + 11 75 0.1 0.1 1e+03 0 70 2.08e+03 vol3_PV Transportation + 12 175 0.1 0.1 1e+03 0 100 2.17e+03 World_PV Transportation + 13 245 0.1 0.1 1e+03 0 70.1 2.25e+03 vol4_PV Transportation + 14 255 0.1 0.1 1e+03 0 10 2.26e+03 World_PV Transportation + 15 535 0.1 0.1 1e+03 0 280 2.53e+03 vol71_PV Transportation + 16 565 0.1 0.1 1e+03 0 30 2.56e+03 World_PV Transportation + 17 740 0.1 0.1 1e+03 0 175 2.74e+03 vol201_PV Transportation + 18 760 0.1 0.1 1e+03 0 19.9 2.76e+03 World_PV Transportation + 19 948 0.1 0.1 1e+03 0 188 2.95e+03 vol1001_PV Transportation + 20 952 0.1 0.1 1e+03 0 3.8 2.95e+03 World_PV Transportation + 21 5e+03 0.1 0.1 1e+03 0 4.05e+03 7e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 122 0.1 1e+03 0 1.23e+03 1.23e+03 vol601_PV Transportation + 2 -760 124 0.1 1e+03 0 20 1.25e+03 World_PV Transportation + 3 -740 126 0.1 1e+03 0 20 1.27e+03 vol601_PV Transportation + 4 -720 128 0.1 1e+03 0 20 1.29e+03 World_PV Transportation + 5 5e+03 700 0.1 1e+03 0 5.75e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 5e+03 0.1 700 1e+03 0 7.03e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 0.1 0.1 1e+03 0 1.22e+03 1.22e+03 vol701_PV Transportation + 2 -720 0.1 0.1 1e+03 0 60 1.28e+03 World_PV Transportation + 3 -540 0.1 0.1 1e+03 0 180 1.46e+03 vol101_PV Transportation + 4 -535 0.1 0.1 1e+03 0 5 1.46e+03 World_PV Transportation + 5 -278 0.1 0.1 1e+03 0 257 1.72e+03 vol1_PV Transportation + 6 -222 0.1 0.1 1e+03 0 55 1.78e+03 World_PV Transportation + 7 -130 0.1 0.1 1e+03 0 92.6 1.87e+03 vol2_PV Transportation + 8 -120 0.1 0.1 1e+03 0 10 1.88e+03 World_PV Transportation + 9 -5 0.1 0.1 1e+03 0 115 1.99e+03 vol0_PV Transportation + 10 5 0.1 0.1 1e+03 0 10 2e+03 World_PV Transportation + 11 75 0.1 0.1 1e+03 0 70 2.08e+03 vol3_PV Transportation + 12 175 0.1 0.1 1e+03 0 100 2.17e+03 World_PV Transportation + 13 245 0.1 0.1 1e+03 0 70.1 2.25e+03 vol4_PV Transportation + 14 255 0.1 0.1 1e+03 0 10 2.26e+03 World_PV Transportation + 15 535 0.1 0.1 1e+03 0 280 2.53e+03 vol71_PV Transportation + 16 565 0.1 0.1 1e+03 0 30 2.56e+03 World_PV Transportation + 17 740 0.1 0.1 1e+03 0 175 2.74e+03 vol201_PV Transportation + 18 760 0.1 0.1 1e+03 0 19.9 2.76e+03 World_PV Transportation + 19 948 0.1 0.1 1e+03 0 188 2.95e+03 vol1001_PV Transportation + 20 952 0.1 0.1 1e+03 0 3.8 2.95e+03 World_PV Transportation + 21 5e+03 0.1 0.1 1e+03 0 4.05e+03 7e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 122 0.1 1e+03 0 1.23e+03 1.23e+03 vol601_PV Transportation + 2 -760 124 0.1 1e+03 0 20 1.25e+03 World_PV Transportation + 3 -740 126 0.1 1e+03 0 20 1.27e+03 vol601_PV Transportation + 4 -720 128 0.1 1e+03 0 20 1.29e+03 World_PV Transportation + 5 5e+03 700 0.1 1e+03 0 5.75e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 5e+03 0.1 700 1e+03 0 7.03e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 0.1 0.1 1e+03 0 1.22e+03 1.22e+03 vol701_PV Transportation + 2 -720 0.1 0.1 1e+03 0 60 1.28e+03 World_PV Transportation + 3 -540 0.1 0.1 1e+03 0 180 1.46e+03 vol101_PV Transportation + 4 -535 0.1 0.1 1e+03 0 5 1.46e+03 World_PV Transportation + 5 -278 0.1 0.1 1e+03 0 257 1.72e+03 vol1_PV Transportation + 6 -222 0.1 0.1 1e+03 0 55 1.78e+03 World_PV Transportation + 7 -130 0.1 0.1 1e+03 0 92.6 1.87e+03 vol2_PV Transportation + 8 -120 0.1 0.1 1e+03 0 10 1.88e+03 World_PV Transportation + 9 -5 0.1 0.1 1e+03 0 115 1.99e+03 vol0_PV Transportation + 10 5 0.1 0.1 1e+03 0 10 2e+03 World_PV Transportation + 11 75 0.1 0.1 1e+03 0 70 2.08e+03 vol3_PV Transportation + 12 175 0.1 0.1 1e+03 0 100 2.17e+03 World_PV Transportation + 13 245 0.1 0.1 1e+03 0 70.1 2.25e+03 vol4_PV Transportation + 14 255 0.1 0.1 1e+03 0 10 2.26e+03 World_PV Transportation + 15 535 0.1 0.1 1e+03 0 280 2.53e+03 vol71_PV Transportation + 16 565 0.1 0.1 1e+03 0 30 2.56e+03 World_PV Transportation + 17 740 0.1 0.1 1e+03 0 175 2.74e+03 vol201_PV Transportation + 18 760 0.1 0.1 1e+03 0 19.9 2.76e+03 World_PV Transportation + 19 948 0.1 0.1 1e+03 0 188 2.95e+03 vol1001_PV Transportation + 20 952 0.1 0.1 1e+03 0 3.8 2.95e+03 World_PV Transportation + 21 5e+03 0.1 0.1 1e+03 0 4.05e+03 7e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 122 0.1 1e+03 0 1.23e+03 1.23e+03 vol601_PV Transportation + 2 -760 124 0.1 1e+03 0 20 1.25e+03 World_PV Transportation + 3 -740 126 0.1 1e+03 0 20 1.27e+03 vol601_PV Transportation + 4 -720 128 0.1 1e+03 0 20 1.29e+03 World_PV Transportation + 5 5e+03 700 0.1 1e+03 0 5.75e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 5e+03 0.1 700 1e+03 0 7.03e+03 7.03e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 0.1 0.1 1e+03 0 1.22e+03 1.22e+03 vol701_PV Transportation + 2 -720 0.1 0.1 1e+03 0 60 1.28e+03 World_PV Transportation + 3 -540 0.1 0.1 1e+03 0 180 1.46e+03 vol101_PV Transportation + 4 -535 0.1 0.1 1e+03 0 5 1.46e+03 World_PV Transportation + 5 -278 0.1 0.1 1e+03 0 257 1.72e+03 vol1_PV Transportation + 6 -222 0.1 0.1 1e+03 0 55 1.78e+03 World_PV Transportation + 7 -130 0.1 0.1 1e+03 0 92.6 1.87e+03 vol2_PV Transportation + 8 -120 0.1 0.1 1e+03 0 10 1.88e+03 World_PV Transportation + 9 -5 0.1 0.1 1e+03 0 115 1.99e+03 vol0_PV Transportation + 10 5 0.1 0.1 1e+03 0 10 2e+03 World_PV Transportation + 11 75 0.1 0.1 1e+03 0 70 2.08e+03 vol3_PV Transportation + 12 175 0.1 0.1 1e+03 0 100 2.17e+03 World_PV Transportation + 13 245 0.1 0.1 1e+03 0 70.1 2.25e+03 vol4_PV Transportation + 14 255 0.1 0.1 1e+03 0 10 2.26e+03 World_PV Transportation + 15 535 0.1 0.1 1e+03 0 280 2.53e+03 vol71_PV Transportation + 16 565 0.1 0.1 1e+03 0 30 2.56e+03 World_PV Transportation + 17 740 0.1 0.1 1e+03 0 175 2.74e+03 vol201_PV Transportation + 18 760 0.1 0.1 1e+03 0 19.9 2.76e+03 World_PV Transportation + 19 948 0.1 0.1 1e+03 0 188 2.95e+03 vol1001_PV Transportation + 20 952 0.1 0.1 1e+03 0 3.8 2.95e+03 World_PV Transportation + 21 5e+03 0.1 0.1 1e+03 0 4.05e+03 7e+03 OutOfWorld Transportation + +********************************************************************************************************* +* G4Track Information: Particle = geantino, Track ID = 1, Parent ID = 0 +********************************************************************************************************* + +Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName + 0 -2e+03 0.1 0.1 1e+03 0 0 0 World_PV initStep + 1 -780 122 0.1 1e+03 0 1.23e+03 1.23e+03 vol601_PV Transportation + 2 -760 124 0.1 1e+03 0 20 1.25e+03 World_PV Transportation + 3 -740 126 0.1 1e+03 0 20 1.27e+03 vol601_PV Transportation + 4 -720 128 0.1 1e+03 0 20 1.29e+03 World_PV Transportation + 5 5e+03 700 0.1 1e+03 0 5.75e+03 7.03e+03 OutOfWorld Transportation + Run terminated. +Run Summary + Number of events processed : 20 + User=0.010000s Real=0.003898s Sys=0.000000s +/tracking/verbose 0 +/gun/direction 0.3 0.2 1 +/run/beamOn 20 + +Region -- -- appears in world volume + This region is in the mass world. + Root logical volume(s) : World + Pointers : G4VUserRegionInformation[0], G4UserLimits[0], G4FastSimulationManager[0], G4UserSteppingAction[0] + Materials : Air Water + Production cuts : gamma 699.9999999999999 um e- 699.9999999999999 um e+ 699.9999999999999 um proton 699.9999999999999 um + +Region -- -- is not associated to any world. + Root logical volume(s) : + Pointers : G4VUserRegionInformation[0], G4UserLimits[0], G4FastSimulationManager[0], G4UserSteppingAction[0] + Materials : + Production cuts : gamma 699.9999999999999 um e- 699.9999999999999 um e+ 699.9999999999999 um proton 699.9999999999999 um + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : Air + Range cuts : gamma 699.9999999999999 um e- 699.9999999999999 um e+ 699.9999999999999 um proton 699.9999999999999 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 69.99999999999999 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Water + Range cuts : gamma 699.9999999999999 um e- 699.9999999999999 um e+ 699.9999999999999 um proton 699.9999999999999 um + Energy thresholds : gamma 2.524928407830887 keV e- 277.5854813538532 keV e+ 270.7768048552311 keV proton 69.99999999999999 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 2 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.000000s Real=0.001861s Sys=0.000000s +/gun/direction 0.3 -0.2 1 +/run/beamOn 20 + +Region -- -- appears in world volume + This region is in the mass world. + Root logical volume(s) : World + Pointers : G4VUserRegionInformation[0], G4UserLimits[0], G4FastSimulationManager[0], G4UserSteppingAction[0] + Materials : Air Water + Production cuts : gamma 699.9999999999999 um e- 699.9999999999999 um e+ 699.9999999999999 um proton 699.9999999999999 um + +Region -- -- is not associated to any world. + Root logical volume(s) : + Pointers : G4VUserRegionInformation[0], G4UserLimits[0], G4FastSimulationManager[0], G4UserSteppingAction[0] + Materials : + Production cuts : gamma 699.9999999999999 um e- 699.9999999999999 um e+ 699.9999999999999 um proton 699.9999999999999 um + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : Air + Range cuts : gamma 699.9999999999999 um e- 699.9999999999999 um e+ 699.9999999999999 um proton 699.9999999999999 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 69.99999999999999 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Water + Range cuts : gamma 699.9999999999999 um e- 699.9999999999999 um e+ 699.9999999999999 um proton 699.9999999999999 um + Energy thresholds : gamma 2.524928407830887 keV e- 277.5854813538532 keV e+ 270.7768048552311 keV proton 69.99999999999999 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 3 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.000000s Real=0.001828s Sys=0.000000s +/gun/direction -0.3 0.2 0.6 +/run/beamOn 20 + +Region -- -- appears in world volume + This region is in the mass world. + Root logical volume(s) : World + Pointers : G4VUserRegionInformation[0], G4UserLimits[0], G4FastSimulationManager[0], G4UserSteppingAction[0] + Materials : Air Water + Production cuts : gamma 699.9999999999999 um e- 699.9999999999999 um e+ 699.9999999999999 um proton 699.9999999999999 um + +Region -- -- is not associated to any world. + Root logical volume(s) : + Pointers : G4VUserRegionInformation[0], G4UserLimits[0], G4FastSimulationManager[0], G4UserSteppingAction[0] + Materials : + Production cuts : gamma 699.9999999999999 um e- 699.9999999999999 um e+ 699.9999999999999 um proton 699.9999999999999 um + +========= Table of registered couples ============================ + +Index : 0 used in the geometry : Yes + Material : Air + Range cuts : gamma 699.9999999999999 um e- 699.9999999999999 um e+ 699.9999999999999 um proton 699.9999999999999 um + Energy thresholds : gamma 990 eV e- 990 eV e+ 990 eV proton 69.99999999999999 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +Index : 1 used in the geometry : Yes + Material : Water + Range cuts : gamma 699.9999999999999 um e- 699.9999999999999 um e+ 699.9999999999999 um proton 699.9999999999999 um + Energy thresholds : gamma 2.524928407830887 keV e- 277.5854813538532 keV e+ 270.7768048552311 keV proton 69.99999999999999 keV + Region(s) which use this couple : + DefaultRegionForTheWorld + +================================================================== + +### Run 4 starts. + Run terminated. +Run Summary + Number of events processed : 20 + User=0.000000s Real=0.001826s Sys=0.000000s +Graphics systems deleted. +Visualization Manager deleting... +G4 kernel has come to Quit state. +UserDetectorConstruction deleted. +UserPhysicsList deleted. +UserActionInitialization deleted. +UserWorkerInitialization deleted. +UserWorkerThreadInitialization deleted. +UserRunAction deleted. +UserPrimaryGenerator deleted. +RunManager is deleting RunManagerKernel. +G4SDManager deleted. +EventManager deleted. +Units table cleared. +TransportationManager deleted. +Total navigation history collections cleaned: 8 +G4RNGHelper object is deleted. +================== Deleting memory pools =================== +Pool ID '20G4NavigationLevelRep', size : 0.00961 MB +Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB +Pool ID '17G4DynamicParticle', size : 0.000961 MB +Pool ID '16G4SmartVoxelNode', size : 0.00385 MB +Pool ID '17G4SmartVoxelProxy', size : 0.00192 MB +Pool ID '7G4Event', size : 0.000961 MB +Pool ID '15G4PrimaryVertex', size : 0.000961 MB +Pool ID '17G4PrimaryParticle', size : 0.000961 MB +Pool ID '7G4Track', size : 0.000961 MB +Pool ID '18G4TouchableHistory', size : 0.000961 MB +Pool ID '15G4CountedObjectIvE', size : 0.000961 MB +Number of memory pools allocated: 11 of which, static: 0 +Dynamic pools deleted: 11 / Total memory freed: 0.023 MB +============================================================ +G4Allocator objects are deleted. +UImanager deleted. +StateManager deleted. +RunManagerKernel is deleted. Good bye :) +RunManager is deleted. diff --git a/examples/extended/persistency/gdml/G01/g01.out b/examples/extended/persistency/gdml/G01/g01.out index 3dc63ffe398..6a6a9ae4b21 100644 --- a/examples/extended/persistency/gdml/G01/g01.out +++ b/examples/extended/persistency/gdml/G01/g01.out @@ -48,7 +48,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -90,7 +90,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -245,7 +247,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -277,7 +279,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -309,7 +311,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -322,7 +324,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -368,7 +369,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -400,7 +401,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -432,7 +433,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -464,7 +465,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -496,7 +497,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -528,7 +529,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -560,7 +561,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -945,12 +946,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1344,7 +1354,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Run terminated. Run Summary Number of events processed : 20 - User=0.010000s Real=0.005378s Sys=0.000000s + User=0.010000s Real=0.004965s Sys=0.000000s /gun/direction 0 0 -1 /run/beamOn 20 @@ -1711,7 +1721,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.004570s Sys=0.000000s + User=0.000000s Real=0.004319s Sys=0.010000s /tracking/verbose 0 /gun/direction 0.3 0.2 1 /run/beamOn 20 @@ -1751,7 +1761,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.002139s Sys=0.000000s + User=0.000000s Real=0.001896s Sys=0.000000s /gun/direction 0.3 -0.2 1 /run/beamOn 20 @@ -1790,7 +1800,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.002137s Sys=0.000000s + User=0.000000s Real=0.001979s Sys=0.000000s /gun/direction -0.3 0.2 0.6 /run/beamOn 20 @@ -1829,7 +1839,7 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.002106s Sys=0.000000s + User=0.000000s Real=0.001850s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. diff --git a/examples/extended/persistency/gdml/G01/load_gdml.cc b/examples/extended/persistency/gdml/G01/load_gdml.cc index 8db5fde5468..05964c99ba5 100644 --- a/examples/extended/persistency/gdml/G01/load_gdml.cc +++ b/examples/extended/persistency/gdml/G01/load_gdml.cc @@ -93,6 +93,10 @@ int main(int argc,char **argv) // Uncomment the following if wish to avoid names stripping // parser.SetStripFlag(false); +// Uncomment the following and set a string with proper absolute path and +// schema filename if wishing to use alternative schema for parsing validation +// parser.SetImportSchema(""); + parser.SetOverlapCheck(true); parser.Read(argv[1]); diff --git a/examples/extended/persistency/gdml/G04/g04.out b/examples/extended/persistency/gdml/G04/g04.out index 0158812b2c3..e21a08fbf0b 100644 --- a/examples/extended/persistency/gdml/G04/g04.out +++ b/examples/extended/persistency/gdml/G04/g04.out @@ -22,7 +22,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -75,7 +75,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -227,7 +229,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -259,7 +261,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -291,7 +293,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -304,7 +306,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -350,7 +351,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -382,7 +383,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -414,7 +415,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -446,7 +447,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -478,7 +479,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -510,7 +511,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -542,7 +543,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -927,12 +928,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1205,7 +1215,7 @@ Processing hits .... Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.001859s Sys=0.000000s + User=0.000000s Real=0.001304s Sys=0.000000s /gun/direction 0 0 -1 /run/beamOn 20 @@ -1457,7 +1467,7 @@ Processing hits .... Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.001340s Sys=0.000000s + User=0.000000s Real=0.001031s Sys=0.000000s /tracking/verbose 0 /gun/direction 0.3 0.2 1 /run/beamOn 20 @@ -1510,7 +1520,7 @@ Processing hits .... Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000267s Sys=0.000000s + User=0.000000s Real=0.000129s Sys=0.000000s /gun/direction 0.3 -0.2 1 /run/beamOn 20 @@ -1562,7 +1572,7 @@ Processing hits .... Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000261s Sys=0.000000s + User=0.000000s Real=0.000133s Sys=0.000000s /gun/direction -0.3 0.2 0.6 /run/beamOn 20 @@ -1614,7 +1624,7 @@ Processing hits .... Run terminated. Run Summary Number of events processed : 20 - User=0.000000s Real=0.000249s Sys=0.000000s + User=0.000000s Real=0.000111s Sys=0.000000s Graphics systems deleted. Visualization Manager deleting... G4 kernel has come to Quit state. diff --git a/examples/extended/physicslists/extensibleFactory/extensibleFactory.out b/examples/extended/physicslists/extensibleFactory/extensibleFactory.out index 1f809852aae..e4dce428f29 100644 --- a/examples/extended/physicslists/extensibleFactory/extensibleFactory.out +++ b/examples/extended/physicslists/extensibleFactory/extensibleFactory.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -48,7 +48,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -246,7 +248,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -278,7 +280,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -310,7 +312,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -323,7 +325,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -369,7 +370,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -401,7 +402,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -433,7 +434,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -465,7 +466,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -497,7 +498,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -529,7 +530,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -561,7 +562,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -953,12 +954,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/physicslists/factory/factory-environment.out b/examples/extended/physicslists/factory/factory-environment.out index 10b0957372b..da19e5f0187 100644 --- a/examples/extended/physicslists/factory/factory-environment.out +++ b/examples/extended/physicslists/factory/factory-environment.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -49,7 +49,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -245,7 +247,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 applyCuts:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -277,7 +279,7 @@ annihil: for e+ XStype:2 applyCuts:1 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 applyCuts:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -309,7 +311,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 applyCuts:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -322,7 +324,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -368,7 +369,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 applyCuts:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -400,7 +401,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 applyCuts:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -432,7 +433,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 applyCuts:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -464,7 +465,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 applyCuts:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -496,7 +497,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 applyCuts:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -528,7 +529,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 applyCuts:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -560,7 +561,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 applyCuts:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -945,12 +946,21 @@ CoulombScat: for pi- XStype:1 applyCuts:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/physicslists/factory/factory.out b/examples/extended/physicslists/factory/factory.out index 069175fa8ec..33c7229dc90 100644 --- a/examples/extended/physicslists/factory/factory.out +++ b/examples/extended/physicslists/factory/factory.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -48,7 +48,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -248,7 +250,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -280,7 +282,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -312,7 +314,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -325,7 +327,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -371,7 +372,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -403,7 +404,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -435,7 +436,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -467,7 +468,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -499,7 +500,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -531,7 +532,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -563,7 +564,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -959,12 +960,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/physicslists/genericPL/genericPL.out b/examples/extended/physicslists/genericPL/genericPL.out index 2501ce0df05..47b94840d47 100644 --- a/examples/extended/physicslists/genericPL/genericPL.out +++ b/examples/extended/physicslists/genericPL/genericPL.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -46,7 +46,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -247,7 +249,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -279,7 +281,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -311,7 +313,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -324,7 +326,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -370,7 +371,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -402,7 +403,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -434,7 +435,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -466,7 +467,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -498,7 +499,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -530,7 +531,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -562,7 +563,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -947,12 +948,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/polarisation/Pol01/pol01.out b/examples/extended/polarisation/Pol01/pol01.out index 8db18f676d5..6ddc37c37db 100644 --- a/examples/extended/polarisation/Pol01/pol01.out +++ b/examples/extended/polarisation/Pol01/pol01.out @@ -10,7 +10,7 @@ ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -216,7 +216,7 @@ G4GeometryManager::ReportVoxelStats -- Voxel Statistics Run terminated. Run Summary Number of events processed : 10000 - User=0.060000s Real=0.061462s Sys=0.000000s + User=0.060000s Real=0.055713s Sys=0.000000s The run consists of 10000 gamma of 10 MeV through 1.75 mm of G4_Fe (density: 7.874 g/cm3 ) diff --git a/examples/extended/radioactivedecay/Activation/Activation.out b/examples/extended/radioactivedecay/Activation/Activation.out index 537469cb318..2b6c026ed2c 100644 --- a/examples/extended/radioactivedecay/Activation/Activation.out +++ b/examples/extended/radioactivedecay/Activation/Activation.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -156,35 +156,35 @@ Index : 1 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.140000s Real=0.142808s Sys=0.000000s + User=0.110000s Real=0.110464s Sys=0.000000s The run is 1000 neutron of 25 meV through 1 cm of G4_Co (density: 8.9 g/cm3 ) Process calls frequency : - NoProcess= 1082 Radioactivation= 2841 Rayl= 108 - Transportation= 13704 annihil= 47 compt= 1619 - conv= 48 eIoni= 5355 hadElastic= 135 - ionIoni= 2029 msc= 446 nCapture= 947 - phot= 675 + NoProcess= 1094 Radioactivation= 2813 Rayl= 117 + Transportation= 13482 annihil= 42 compt= 1523 + conv= 45 eIoni= 5098 hadElastic= 156 + ionIoni= 2032 msc= 663 nCapture= 938 + phot= 658 List of generated particles (with meanLife != 0): - Co59: 135 Emean = 38.653 meV ( 0.31874 meV --> 159.3 meV) stable - Co60: 947 Emean = 220.53 eV ( 1.6775 eV --> 521.51 eV ) mean life = 7.6098 y - Ni60: 947 Emean = 15.919 eV ( 15.907 eV --> 27.832 eV ) stable - anti_nu_e: 947 Emean = 225.64 keV ( 17.743 keV --> 316.97 keV) stable - e+: 48 Emean = 1.5809 MeV ( 95.987 keV --> 4.2878 MeV) stable - e-: 3294 Emean = 313.53 keV ( 4.0273 eV --> 5.3361 MeV) stable - gamma: 6028 Emean = 1.578 MeV ( 13.027 eV --> 7.4329 MeV) stable + Co59: 156 Emean = 32.877 meV ( 2.2117 meV --> 192.54 meV) stable + Co60: 938 Emean = 229.59 eV ( 1.0373 eV --> 510.62 eV ) mean life = 7.6098 y + Ni60: 938 Emean = 15.907 eV ( 15.907 eV --> 15.907 eV ) stable + anti_nu_e: 938 Emean = 223.77 keV ( 16.657 keV --> 549.34 keV) stable + e+: 45 Emean = 1.4218 MeV ( 21.553 keV --> 4.4741 MeV) stable + e-: 3172 Emean = 311.74 keV ( 4.0309 eV --> 5.7246 MeV) stable + gamma: 5897 Emean = 1.5967 MeV ( 13.031 eV --> 7.4329 MeV) stable - Mean energy deposit per event = 1.0509 MeV rms = 1.2361 MeV - Mean energy flow per event = 8.7151 MeV rms = 2.3928 MeV + Mean energy deposit per event = 1.0009 MeV rms = 1.1863 MeV + Mean energy flow per event = 8.6712 MeV rms = 2.5132 MeV List of particles emerging from the target : - anti_nu_e: 947 Emean = 225.64 keV ( 17.743 keV --> 316.97 keV) Eflow/event = 213.69 keV - e+: 2 Emean = 2.7584 MeV ( 1.8677 MeV --> 3.6491 MeV) Eflow/event = 5.5168 keV - e-: 44 Emean = 1.3024 MeV ( 43.337 keV --> 4.4039 MeV) Eflow/event = 57.305 keV - gamma: 5305 Emean = 1.5907 MeV ( 56.688 keV --> 7.4329 MeV) Eflow/event = 8.4386 MeV - neutron: 53 Emean = 24.955 meV ( 13.524 meV --> 46.757 meV) Eflow/event = 1.3226 meV + anti_nu_e: 938 Emean = 223.77 keV ( 16.657 keV --> 549.34 keV) Eflow/event = 209.9 keV + e+: 3 Emean = 2.5118 MeV ( 1.9541 MeV --> 2.901 MeV) Eflow/event = 7.5353 keV + e-: 41 Emean = 1.1994 MeV ( 83.338 keV --> 3.3621 MeV) Eflow/event = 49.175 keV + gamma: 5194 Emean = 1.6181 MeV ( 48.943 keV --> 7.4329 MeV) Eflow/event = 8.4046 MeV + neutron: 62 Emean = 26.659 meV ( 12.147 meV --> 51.812 meV) Eflow/event = 1.6529 meV histo Id for populations : Co59 id = 26 @@ -194,7 +194,7 @@ Run Summary --------- Ranecu engine status --------- Initial seed (index) = 0 - Current couple of seeds = 1134064772, 488124082 + Current couple of seeds = 2052790144, 1917113182 ---------------------------------------- ================== Deleting memory pools =================== Number of memory pools allocated: 11 of which, static: 0 diff --git a/examples/extended/radioactivedecay/rdecay01/rdecay01.out b/examples/extended/radioactivedecay/rdecay01/rdecay01.out index 7d843daa24b..bac189e72cf 100644 --- a/examples/extended/radioactivedecay/rdecay01/rdecay01.out +++ b/examples/extended/radioactivedecay/rdecay01/rdecay01.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -74,9 +74,9 @@ Step# X Y Z KineE dEStep StepLeng T 1 0 fm 0 fm 0 fm 0 eV 0 eV 0 fm 0 fm World Radioactivation :----- List of secondaries ---------------- - Ni60[2505.753]: energy = 3.234 eV time = 1.348 y - anti_nu_e: energy = 40.1 keV time = 1.348 y - e-: energy = 277 keV time = 1.348 y + Ni60[2505.753]: energy = 2.912 eV time = 7.788 y + anti_nu_e: energy = 39.7 keV time = 7.788 y + e-: energy = 277.4 keV time = 7.788 y :------------------------------------------ @@ -85,29 +85,29 @@ Step# X Y Z KineE dEStep StepLeng T ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process - 0 0 fm 0 fm 0 fm 277 keV 0 eV 0 fm 0 fm World initStep - 1 -2.027 mm 7.921 mm -1 cm 277 keV 0 eV 1.292 cm 1.292 cm World OutOfWorld + 0 0 fm 0 fm 0 fm 277.4 keV 0 eV 0 fm 0 fm World initStep + 1 -1 cm 1.71 mm -4.699 mm 277.4 keV 0 eV 1.118 cm 1.118 cm World OutOfWorld ********************************************************************************************************* * G4Track Information: Particle = anti_nu_e, Track ID = 3, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process - 0 0 fm 0 fm 0 fm 40.1 keV 0 eV 0 fm 0 fm World initStep - 1 -5.072 mm 1 cm 9.102 mm 40.1 keV 0 eV 1.444 cm 1.444 cm World OutOfWorld + 0 0 fm 0 fm 0 fm 39.7 keV 0 eV 0 fm 0 fm World initStep + 1 1 cm 4.235 mm 270.2 um 39.7 keV 0 eV 1.086 cm 1.086 cm World OutOfWorld ********************************************************************************************************* * G4Track Information: Particle = Ni60[2505.753], Track ID = 2, Parent ID = 1 ********************************************************************************************************* Step# X Y Z KineE dEStep StepLeng TrakLeng Volume Process - 0 0 fm 0 fm 0 fm 3.234 eV 0 eV 0 fm 0 fm World initStep + 0 0 fm 0 fm 0 fm 2.912 eV 0 eV 0 fm 0 fm World initStep End of event. Decay chain: Co60 ---> Ni60[2505.753] Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.002035s Sys=0.000000s + User=0.000000s Real=0.001764s Sys=0.000000s ======================== run summary ====================== The run was 1 Co60 of 0 eV @@ -116,19 +116,19 @@ Run Summary Nb of generated particles: Co60: 1 Emean = 0 eV ( 0 eV --> 0 eV ) mean life = 7.61 y - Ni60[2505.753]: 1 Emean = 3.234 eV ( 3.234 eV --> 3.234 eV ) mean life = 4.761 ps - anti_nu_e: 1 Emean = 40.1 keV ( 40.1 keV --> 40.1 keV) stable - e-: 1 Emean = 277 keV ( 277 keV --> 277 keV) stable + Ni60[2505.753]: 1 Emean = 2.912 eV ( 2.912 eV --> 2.912 eV ) mean life = 4.761 ps + anti_nu_e: 1 Emean = 39.7 keV ( 39.7 keV --> 39.7 keV) stable + e-: 1 Emean = 277.4 keV ( 277.4 keV --> 277.4 keV) stable Ekin Total (Q single decay): mean = 317.1 keV ( 317.1 keV --> 317.1 keV) - Momentum balance (excluding gamma desexcitation): mean = 94.11 meV ( 94.11 meV --> 94.11 meV) + Momentum balance (excluding gamma desexcitation): mean = 285 meV ( 285 meV --> 285 meV) - Total time of life (full chain): mean = 1.348 y half-life = 341.1 d ( 1.348 y --> 1.348 y ) + Total time of life (full chain): mean = 7.788 y half-life = 5.398 y ( 7.788 y --> 7.788 y ) - Total visible energy (full chain) : mean = 277 keV ( 277 keV --> 277 keV) + Total visible energy (full chain) : mean = 277.4 keV ( 277.4 keV --> 277.4 keV) - Activity of Co60 = 2.36e+14 Bq/g (6379 Ci/g) + Activity of Co60 = 4.087e+13 Bq/g (1104 Ci/g) # @@ -182,7 +182,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100000 - User=0.900000s Real=0.910469s Sys=0.000000s + User=0.840000s Real=0.840694s Sys=0.000000s ======================== run summary ====================== The run was 100000 Co60 of 0 eV @@ -191,20 +191,20 @@ Run Summary Nb of generated particles: Co60: 100000 Emean = 0 eV ( 0 eV --> 0 eV ) mean life = 7.61 y - Ni60[1332.514]: 128 Emean = 17.74 eV ( 183.6 meV --> 33.25 eV ) mean life = 1.06 ps - Ni60[2505.753]: 99872 Emean = 1.478 eV ( 0.2474 meV --> 3.769 eV ) mean life = 4.761 ps - anti_nu_e: 100000 Emean = 222.3 keV ( 2.469 keV --> 1.461 MeV) stable - e-: 100000 Emean = 96.27 keV ( 2.178 eV --> 1.326 MeV) stable + Ni60[1332.514]: 124 Emean = 17.87 eV ( 637.8 meV --> 32.78 eV ) mean life = 1.06 ps + Ni60[2505.753]: 99876 Emean = 1.476 eV ( 1.339 meV --> 3.777 eV ) mean life = 4.761 ps + anti_nu_e: 100000 Emean = 222.5 keV ( 4.406 keV --> 1.487 MeV) stable + e-: 100000 Emean = 95.97 keV ( 3.363 eV --> 1.406 MeV) stable - Ekin Total (Q single decay): mean = 318.6 keV ( 317.1 keV --> 1.49 MeV) + Ekin Total (Q single decay): mean = 318.5 keV ( 317.1 keV --> 1.49 MeV) - Momentum balance (excluding gamma desexcitation): mean = 327.9 meV ( 0.0008429 meV --> 21.99 eV ) + Momentum balance (excluding gamma desexcitation): mean = 327.8 meV ( 0.01057 meV --> 9.065 eV ) - Total time of life (full chain): mean = 7.604 y half-life = 5.271 y ( 9.09 s --> 86.28 y ) + Total time of life (full chain): mean = 7.606 y half-life = 5.272 y ( 9.09 s --> 86.28 y ) - Total visible energy (full chain) : mean = 96.27 keV ( 3.074 eV --> 1.326 MeV) + Total visible energy (full chain) : mean = 95.97 keV ( 4.253 eV --> 1.406 MeV) - Activity of Co60 = 4.186e+13 Bq/g (1131 Ci/g) + Activity of Co60 = 4.185e+13 Bq/g (1131 Ci/g) # @@ -257,7 +257,7 @@ Index : 0 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 100000 - User=2.460000s Real=2.472784s Sys=0.000000s + User=1.990000s Real=1.998039s Sys=0.000000s ======================== run summary ====================== The run was 100000 Co60 of 0 eV @@ -267,22 +267,22 @@ Run Summary Co60: 100000 Emean = 0 eV ( 0 eV --> 0 eV ) mean life = 7.61 y Ni60: 100000 Emean = 15.91 eV ( 15.91 eV --> 41.74 eV ) stable - Ni60[1332.514]: 99999 Emean = 12.34 eV ( 2.57 eV --> 31.52 eV ) mean life = 1.06 ps - Ni60[2158.632]: 6 Emean = 1.079 eV ( 1.079 eV --> 1.079 eV ) - Ni60[2505.753]: 99885 Emean = 1.472 eV ( 1.652 meV --> 3.747 eV ) mean life = 4.761 ps - anti_nu_e: 100000 Emean = 222.6 keV ( 4.454 keV --> 1.489 MeV) stable - e-: 100021 Emean = 96.09 keV ( 70.73 meV --> 1.36 MeV) stable - gamma: 199869 Emean = 1.253 MeV ( 347.1 keV --> 2.159 MeV) stable + Ni60[1332.514]: 99999 Emean = 12.34 eV ( 367.3 meV --> 32.87 eV ) mean life = 1.06 ps + Ni60[2158.632]: 5 Emean = 1.079 eV ( 1.079 eV --> 1.079 eV ) + Ni60[2505.753]: 99879 Emean = 1.472 eV ( 0.5748 meV --> 3.79 eV ) mean life = 4.761 ps + anti_nu_e: 100000 Emean = 222.3 keV ( 1.726 keV --> 1.489 MeV) stable + e-: 100032 Emean = 96.52 keV ( 1.635 eV --> 1.387 MeV) stable + gamma: 199851 Emean = 1.253 MeV ( 347.1 keV --> 2.159 MeV) stable Ekin Total (Q single decay): mean = 941.3 keV ( 317.1 keV --> 2.159 MeV) - Momentum balance (excluding gamma desexcitation): mean = 966 keV ( 0.006647 meV --> 3.019 MeV) + Momentum balance (excluding gamma desexcitation): mean = 965.3 keV ( 0.002571 meV --> 3.068 MeV) - Total time of life (full chain): mean = 7.595 y half-life = 5.264 y ( 39.79 min --> 78.38 y ) + Total time of life (full chain): mean = 7.567 y half-life = 5.245 y ( 31.89 min --> 92.57 y ) - Total visible energy (full chain) : mean = 2.6 MeV ( 1.334 MeV --> 2.818 MeV) + Total visible energy (full chain) : mean = 2.6 MeV ( 1.334 MeV --> 2.821 MeV) - Activity of Co60 = 4.191e+13 Bq/g (1133 Ci/g) + Activity of Co60 = 4.206e+13 Bq/g (1137 Ci/g) ================== Deleting memory pools =================== diff --git a/examples/extended/radioactivedecay/rdecay02/rdecay02.out b/examples/extended/radioactivedecay/rdecay02/rdecay02.out index d6c1a1d9884..e5e6ed4ab8b 100644 --- a/examples/extended/radioactivedecay/rdecay02/rdecay02.out +++ b/examples/extended/radioactivedecay/rdecay02/rdecay02.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -201,7 +201,7 @@ eBrem: for e- XStype:3 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -233,7 +233,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -265,7 +265,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -278,7 +278,6 @@ ionIoni: for GenericIon XStype:1 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 1, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -341,7 +340,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -373,7 +372,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -405,7 +404,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -437,7 +436,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -469,7 +468,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -501,7 +500,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -533,7 +532,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -864,12 +863,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -935,51 +943,52 @@ Index : 2 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10000 - User=0.810000s Real=0.821603s Sys=0.000000s + User=0.720000s Real=0.719823s Sys=0.000000s The run is 10000 Ne24 of 0 eV through : Target : Length = 1 cm Radius = 5 mm Material = G4_CESIUM_IODIDE Detector : Length = 5 cm Thickness = 2 cm Material = Germanium - Mean energy deposit in target, in time window = 806.94 keV rms = 418.79 keV - Mean energy deposit in detector, in time window = 17.908 keV rms = 107.21 keV + Mean energy deposit in target, in time window = 814.98 keV rms = 422.54 keV + Mean energy deposit in detector, in time window = 17.805 keV rms = 107 keV Process calls frequency in target : - NoProcess= 10000 Radioactivation= 50746 Rayl= 253 - Transportation= 50164 annihil= 168 compt= 4175 - conv= 174 eIoni= 25978 ionIoni= 39517 - msc= 3734 phot= 1599 + NoProcess= 10000 Radioactivation= 50811 Rayl= 244 + Transportation= 50209 annihil= 183 compt= 4278 + conv= 188 eIoni= 26150 ionIoni= 38049 + msc= 3757 phot= 1635 Process calls frequency in detector: - Rayl= 1251 Transportation= 45864 annihil= 356 - compt= 22561 conv= 353 eIoni= 27526 - msc= 5923 phot= 4281 + Rayl= 1258 Transportation= 45953 annihil= 368 + compt= 22666 conv= 370 eIoni= 27684 + msc= 6691 phot= 4314 List of generated particles in target: - Mg24: 10000 Emean = 42.155 eV ( 41.932 eV --> 802.68 eV ) - Mg24[1368.672]: 9995 Emean = 169.92 eV ( 45.911 eV --> 349.16 eV ) - Mg24[4122.889]: 9980 Emean = 38.79 eV ( 14.563 meV --> 74.702 eV ) - Mg24[5235.120]: 9 Emean = 3.7618 eV ( 1.0366 eV --> 5.4592 eV ) - Na24: 9995 Emean = 4.9965 eV ( 4.9901 eV --> 15.742 eV ) - Na24[1346.621]: 759 Emean = 27.439 eV ( 61.911 meV --> 52.248 eV ) - Na24[472.207]: 10000 Emean = 68.294 eV ( 154.07 meV --> 133.6 eV ) - Na24[563.199]: 8 Emean = 13.735 eV ( 13.735 eV --> 13.735 eV ) - anti_nu_e: 20000 Emean = 982.25 keV ( 30.292 keV --> 4.6137 MeV) - e+: 174 Emean = 857.81 keV ( 15.799 keV --> 1.6532 MeV) - e-: 25965 Emean = 637.67 keV ( 72.285 eV --> 4.7194 MeV) - gamma: 31074 Emean = 1.5046 MeV ( 90.991 keV --> 3.8661 MeV) + Mg24: 10000 Emean = 42.171 eV ( 41.932 eV --> 843.69 eV ) + Mg24[1368.672]: 9996 Emean = 169.96 eV ( 71.883 eV --> 363.92 eV ) + Mg24[4122.889]: 9980 Emean = 39.397 eV ( 230.27 meV --> 74.43 eV ) + Mg24[4238.240]: 1 Emean = 22.241 eV ( 22.241 eV --> 22.241 eV ) + Mg24[5235.120]: 10 Emean = 4.4701 eV ( 522.19 meV --> 7.1731 eV ) + Na24: 9997 Emean = 4.998 eV ( 4.9901 eV --> 15.742 eV ) + Na24[1346.621]: 820 Emean = 27.521 eV ( 521.05 meV --> 52.503 eV ) + Na24[472.207]: 9998 Emean = 67.889 eV ( 185.29 meV --> 133.9 eV ) + Na24[563.199]: 9 Emean = 13.735 eV ( 13.735 eV --> 13.735 eV ) + anti_nu_e: 20000 Emean = 972.94 keV ( 46.738 keV --> 4.6304 MeV) + e+: 188 Emean = 801.98 keV ( 12.554 keV --> 2.5726 MeV) + e-: 26120 Emean = 642.35 keV ( 35.637 eV --> 2.8814 MeV) + gamma: 31170 Emean = 1.5024 MeV ( 90.991 keV --> 4.2378 MeV) List of generated particles in detector: - e+: 353 Emean = 811.06 keV ( 44.173 keV --> 1.6652 MeV) - e-: 27181 Emean = 373.28 keV ( 103.28 eV --> 2.7429 MeV) - gamma: 712 Emean = 516.18 keV ( 422.15 keV --> 1.5666 MeV) + e+: 370 Emean = 768.42 keV ( 45.96 keV --> 1.6475 MeV) + e-: 27334 Emean = 372.49 keV ( 106.6 eV --> 3.2315 MeV) + gamma: 736 Emean = 517.43 keV ( 508.85 keV --> 1.0907 MeV) ... write file : rdecay02.root - done ... close file : rdecay02.root - done --------- Ranecu engine status --------- Initial seed (index) = 0 - Current couple of seeds = 390690496, 754703547 + Current couple of seeds = 85692760, 1444773713 ---------------------------------------- ================== Deleting memory pools =================== Number of memory pools allocated: 12 of which, static: 0 diff --git a/examples/extended/runAndEvent/RE01/sample.out b/examples/extended/runAndEvent/RE01/sample.out index 95784ab5ad4..3233daf14be 100644 --- a/examples/extended/runAndEvent/RE01/sample.out +++ b/examples/extended/runAndEvent/RE01/sample.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -43,7 +43,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -79,6 +81,7 @@ Some /vis commands (optionally) take a string to specify colour. <<< Geant4 Physics List simulation engine: QGSP_BERT I'm World. + G4ChordFinder: stepperDriverId: 2 --- G4CoupledTransportation is used hInelastic QGSP_BERT Thresholds: @@ -205,7 +208,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -237,7 +240,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -269,7 +272,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -282,7 +285,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -328,7 +330,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -360,7 +362,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -392,7 +394,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -424,7 +426,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -456,7 +458,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -488,7 +490,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -520,7 +522,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -916,12 +918,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -944,5440 +955,4482 @@ See commands in /vis/modeling/trajectories/ for other options. Tracks in tracking region have been processed. -- Stage 0 over. -Source track ID 9238 (gamma,19.874104401472[GeV]) at (140.63828445838,479.81337303644,-280.96950340845) -Original primary track ID 1 (unknown,305.48142430119[GeV]) -Cell[8,9] 18.213229311268 [GeV] -Cell[8,10] 1.2100694365108 [GeV] -Cell[7,10] 0.063113447282317 [GeV] -Cell[8,7] 0.0013034703778175 [GeV] -Cell[8,8] 0.088246263847943 [GeV] -Cell[7,9] 0.17908644415437 [GeV] -Cell[8,11] 0.035586888443439 [GeV] -Cell[7,8] 0.011532992757339 [GeV] -Cell[7,7] 0.0036427704611843 [GeV] -Cell[9,8] 0.0029892198599139 [GeV] -Cell[9,7] 0.00018244547349413 [GeV] -Cell[8,22] 0.0042599715842162 [GeV] -Cell[8,21] 0.00051099891 [GeV] -Cell[8,29] 0.0016279940213575 [GeV] -Cell[8,28] 0.0026106545263071 [GeV] -Cell[9,9] 0.0086137091094249 [GeV] -Cell[7,12] 0.00032946427559719 [GeV] -Cell[7,11] 0.0044103296961172 [GeV] -Cell[9,10] 0.00092172481650087 [GeV] -Cell[10,10] 0.00040992547655277 [GeV] -Cell[10,12] 0.00040721176897711 [GeV] -Cell[10,11] 0.0001862066537754 [GeV] -Cell[3,23] 0.0011360249757008 [GeV] -Cell[11,39] 0.00049349403121511 [GeV] -Cell[11,40] 0.00025221705978357 [GeV] -Cell[11,42] 0.0016361196675387 [GeV] -Cell[11,43] 0.0011223325801956 [GeV] -Cell[9,11] 0.00032791422669118 [GeV] -Cell[4,33] 0.0014985320793025 [GeV] -Cell[7,21] 0.0010263647700852 [GeV] -Cell[8,13] 0.0022962394475346 [GeV] -Cell[9,41] 0.0012355038151821 [GeV] -Cell[8,12] 0.00088071049366216 [GeV] -Cell[8,30] 0.00061309483200056 [GeV] -Cell[8,6] 0.00051099891 [GeV] -Cell[11,6] 1.2110103853047e-09 [GeV] -Cell[6,40] 0.0014609441712845 [GeV] -Cell[5,31] 0.0012248474817486 [GeV] -### Total energy deposition in calorimeter by a source track in 38 cells : 19.848986221029 (GeV) - -Source track ID 9239 (gamma,8.9863563379657[GeV]) at (140.64665705298,479.81091886265,-280.97656352545) -Original primary track ID 1 (unknown,305.48142430119[GeV]) -Cell[8,9] 8.070266565001 [GeV] -Cell[8,10] 0.65872081852429 [GeV] -Cell[7,10] 0.035242417060498 [GeV] -Cell[8,7] 0.0040751709436195 [GeV] -Cell[8,8] 0.043045632191133 [GeV] -Cell[7,9] 0.078909454128285 [GeV] -Cell[8,11] 0.016176251224545 [GeV] -Cell[7,8] 0.02042013030212 [GeV] -Cell[7,7] 0.0041182733382882 [GeV] -Cell[9,8] 0.0054299222049114 [GeV] -Cell[9,7] 0.00071729818173267 [GeV] -Cell[9,9] 0.0040616353470453 [GeV] -Cell[7,11] 0.00036698770911267 [GeV] -Cell[9,41] 0.00070387871423367 [GeV] -Cell[8,12] 0.00052274135028448 [GeV] -Cell[7,34] 0.0012028775157462 [GeV] -Cell[7,35] 0.00051099891 [GeV] -Cell[12,36] 0.0047857559645835 [GeV] -Cell[10,33] 0.00092035131678794 [GeV] -Cell[6,41] 0.0056435304875761 [GeV] -Cell[6,1] 0.00031727181607064 [GeV] -Cell[9,0] 0.00027832140253692 [GeV] -Cell[9,12] 0.0012320913724023 [GeV] -Cell[7,14] 0.00062604115038368 [GeV] -Cell[7,42] 0.00044456315504991 [GeV] -Cell[7,43] 0.00050004534594085 [GeV] -Cell[6,33] 0.0014330511133467 [GeV] -Cell[6,32] 0.0027155888752091 [GeV] -Cell[8,38] 0.00048775530378302 [GeV] -Cell[6,29] 0.00073836781653727 [GeV] -Cell[8,3] 0.00015577112093565 [GeV] -Cell[8,5] 5.6662633929293e-06 [GeV] -Cell[1,9] 0.00049736769689169 [GeV] -Cell[4,5] 0.00011737076941965 [GeV] -Cell[10,25] 0.0018145082830231 [GeV] -Cell[2,27] 0.0022968201166284 [GeV] -Cell[9,6] 0.000521574611734 [GeV] -Cell[7,45] 0.0023852439800131 [GeV] -### Total energy deposition in calorimeter by a source track in 38 cells : 8.9724081106091 (GeV) - -Source track ID 9252 (gamma,0.00064961006109602[GeV]) at (140.62524200085,479.81719572375,-280.98287762127) +Source track ID 6710 (gamma,0.025052804463287[GeV]) at (140.36258138371,479.89409847101,-280.93967457987) Original primary track ID 1 (unknown,305.48142430119[GeV]) -Cell[8,9] 0.00064961006109602 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00064961006109602 (GeV) +Cell[8,9] 0.02359761115443 [GeV] +Cell[6,11] 0.00099903609259549 [GeV] +Cell[7,11] 0.00045215092560732 [GeV] +Cell[7,10] 4.0062906542557e-06 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.025052804463287 (GeV) -Source track ID 9248 (e-,8.0922001779858[GeV]) at (140.48373181876,479.85864699334,-280.95947921602) +Source track ID 6711 (gamma,0.062265201678948[GeV]) at (142.87687606659,479.15154000113,-273.91143649535) Original primary track ID 1 (unknown,305.48142430119[GeV]) -Cell[8,9] 7.2872017420301 [GeV] -Cell[8,10] 0.61971252469724 [GeV] -Cell[7,10] 0.013609367224247 [GeV] -Cell[8,7] 0.0013959931660446 [GeV] -Cell[8,8] 0.038391932698549 [GeV] -Cell[7,9] 0.039881252046524 [GeV] -Cell[8,11] 0.0060762265054591 [GeV] -Cell[7,8] 0.0056560749784344 [GeV] -Cell[9,9] 0.01712979056219 [GeV] -Cell[7,11] 0.0010178516255787 [GeV] -Cell[9,10] 0.0028114566810336 [GeV] -Cell[9,11] 0.0063466829828404 [GeV] -Cell[8,12] 4.731999320029e-08 [GeV] -Cell[10,28] 0.0020211028632369 [GeV] -Cell[5,41] 0.0012935301290465 [GeV] -Cell[7,41] 0.00083939608368096 [GeV] -Cell[6,2] 0.00077081370328647 [GeV] -Cell[5,44] 0.0014464239690909 [GeV] -Cell[4,35] 0.00070068066023621 [GeV] -Cell[2,26] 0.00053582512009267 [GeV] -Cell[15,20] 0.00030861363078159 [GeV] -Cell[8,46] 0.0031838836804277 [GeV] -Cell[8,47] 0.00038550233538362 [GeV] -Cell[7,46] 1.3098676310619e-05 [GeV] -Cell[7,6] 0.00075875963534793 [GeV] -Cell[7,5] 3.4356111086709e-08 [GeV] -Cell[7,39] 0.00037326408118323 [GeV] -Cell[9,40] 0.0021466065042027 [GeV] -Cell[5,34] 0.00072284761756777 [GeV] -Cell[4,34] 0.0014222893878513 [GeV] -Cell[8,14] 0.0016976108183925 [GeV] -Cell[5,45] 0.0021856514136186 [GeV] -Cell[3,27] 0.0020966323492372 [GeV] -Cell[4,30] 0.00051099891 [GeV] -Cell[6,37] 0.00096964427884972 [GeV] -Cell[13,35] 0.00051099891 [GeV] -### Total energy deposition in calorimeter by a source track in 36 cells : 8.0641251516322 (GeV) +Cell[8,9] 0.061431068269898 [GeV] +Cell[6,42] 0.00051099891 [GeV] +Cell[8,10] 0.00032313449905032 [GeV] +### Total energy deposition in calorimeter by a source track in 3 cells : 0.062265201678948 (GeV) -Source track ID 9250 (gamma,0.0016147160754337[GeV]) at (140.65668126128,479.8079803594,-280.97104098215) +Source track ID 6753 (gamma,0.00013722926798999[GeV]) at (33.565219687469,498.87210387767,-368.85044783176) Original primary track ID 1 (unknown,305.48142430119[GeV]) -Cell[8,9] 0.0016147160754337 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0016147160754337 (GeV) +Cell[8,11] 0.00013722926798999 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00013722926798999 (GeV) -Source track ID 9249 (e+,6.4350858464835[GeV]) at (140.82191538204,479.75951074276,-280.97743405474) -Original primary track ID 1 (unknown,305.48142430119[GeV]) -Cell[8,9] 5.6985953186259 [GeV] -Cell[8,10] 0.59116748441615 [GeV] -Cell[7,10] 0.0047568456486034 [GeV] -Cell[8,7] 0.0025080918836483 [GeV] -Cell[8,8] 0.033255383483079 [GeV] -Cell[7,9] 0.011959026494326 [GeV] -Cell[8,11] 0.018372055426997 [GeV] -Cell[7,8] 0.0035770059746632 [GeV] -Cell[7,7] 0.0023433983035074 [GeV] -Cell[9,7] 0.00020891209724808 [GeV] -Cell[9,9] 0.0046399949041372 [GeV] -Cell[7,12] 0.00035397354756401 [GeV] -Cell[7,11] 0.0010732232607136 [GeV] -Cell[9,10] 0.00091621709315449 [GeV] -Cell[9,11] 0.0010471485551896 [GeV] -Cell[8,13] 1.4620590388631e-05 [GeV] -Cell[8,12] 0.0013316763822767 [GeV] -Cell[8,6] 0.0018197245265726 [GeV] -Cell[8,38] 0.00017642686095246 [GeV] -Cell[7,46] 0.00012906318876088 [GeV] -Cell[7,6] 0.00014300230805268 [GeV] -Cell[7,5] 4.1422774373359e-05 [GeV] -Cell[12,22] 0.00072701215844698 [GeV] -Cell[7,15] 0.0017699864429112 [GeV] -Cell[3,25] 0.00051099891 [GeV] -Cell[3,38] 0.0014162994421973 [GeV] -Cell[8,45] 0.0010359712091199 [GeV] -Cell[8,36] 0.0013096801139905 [GeV] -Cell[5,30] 0.002493911261867 [GeV] -Cell[7,4] 0.00028619874054338 [GeV] -Cell[10,32] 0.00015448593097326 [GeV] -Cell[8,26] 0.0005577650676386 [GeV] -Cell[7,22] 0.001734094736133 [GeV] -Cell[8,35] 0.0014637903472928 [GeV] -Cell[13,30] 0.00051099891 [GeV] -Cell[7,33] 0.00051099891 [GeV] -Cell[8,37] 0.00076624737360726 [GeV] -Cell[9,38] 0.00056329431041809 [GeV] -Cell[8,0] 0.00011338668697731 [GeV] -Cell[6,7] 5.3292471566238e-06 [GeV] -Cell[8,39] 0.00014685805421743 [GeV] -Cell[7,31] 0.0019081193227425 [GeV] -Cell[8,33] 0.00036073229574044 [GeV] -Cell[12,34] 0.0011828757325888 [GeV] -Cell[10,8] 0.00033993824560261 [GeV] -Cell[7,30] 0.001657179721503 [GeV] -### Total energy deposition in calorimeter by a source track in 46 cells : 6.3999561695179 (GeV) - -Source track ID 9242 (gamma,0.47731666464797[GeV]) at (140.83053210147,479.75698142707,-280.96982200039) +Source track ID 6728 (e-,0.56947774837034[GeV]) at (109.67762372365,487.82252803077,-280.87167144894) Original primary track ID 1 (unknown,305.48142430119[GeV]) -Cell[8,9] 0.41079488553598 [GeV] -Cell[8,10] 0.057082504586685 [GeV] -Cell[7,10] 0.00054359333659909 [GeV] -Cell[8,8] 0.0046792406542033 [GeV] -Cell[7,9] 0.00052845020152677 [GeV] -Cell[7,8] 0.00023446819457441 [GeV] -Cell[7,7] 0.001165114605187 [GeV] -Cell[5,31] 0.0013959074623694 [GeV] -Cell[10,28] 0.0001511013569316 [GeV] -Cell[5,38] 0.00056621563573263 [GeV] -### Total energy deposition in calorimeter by a source track in 10 cells : 0.47714148156979 (GeV) - -Source track ID 9244 (gamma,0.0027859405059041[GeV]) at (140.95462435415,479.72053726433,-280.97254668024) +Cell[8,9] 0.0093888018832992 [GeV] +Cell[7,10] 0.0010066678873674 [GeV] +Cell[8,10] 0.53052780005853 [GeV] +Cell[8,11] 0.014845948553289 [GeV] +Cell[13,7] 0.00019522567944593 [GeV] +Cell[9,21] 0.0004397028063074 [GeV] +Cell[5,8] 0.0011021014645887 [GeV] +Cell[7,13] 0.0027938249813046 [GeV] +Cell[8,12] 0.0018740894547514 [GeV] +Cell[7,45] 0.0014702551894321 [GeV] +Cell[2,32] 0.001349090541139 [GeV] +### Total energy deposition in calorimeter by a source track in 11 cells : 0.56499350849945 (GeV) + +Source track ID 6730 (gamma,0.00028150058950001[GeV]) at (192.2942014929,461.5440824799,-279.51033692464) Original primary track ID 1 (unknown,305.48142430119[GeV]) -Cell[8,9] 0.0023736837815535 [GeV] -Cell[8,10] 0.0004122567243506 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.0027859405059041 (GeV) +Cell[8,8] 0.00028150058950001 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00028150058950001 (GeV) -Source track ID 9158 (e+,29.700314035712[GeV]) at (140.98799159549,479.7107318227,-280.97231743532) +Source track ID 6731 (gamma,0.00042925209963156[GeV]) at (232.14545813536,442.84137822377,-286.04680842408) Original primary track ID 1 (unknown,305.48142430119[GeV]) -Cell[8,9] 27.072004620847 [GeV] -Cell[8,10] 2.0458887437947 [GeV] -Cell[7,10] 0.086446779360581 [GeV] -Cell[8,7] 0.0074086328911605 [GeV] -Cell[8,8] 0.12812955330854 [GeV] -Cell[7,9] 0.13965824734773 [GeV] -Cell[8,11] 0.066241292570241 [GeV] -Cell[7,8] 0.017673267733776 [GeV] -Cell[7,7] 0.0047670547808785 [GeV] -Cell[9,8] 0.0047904553654101 [GeV] -Cell[9,7] 0.00015610235084956 [GeV] -Cell[8,21] 0.001050210947298 [GeV] -Cell[9,9] 0.0095096791793384 [GeV] -Cell[7,12] 0.003776067455918 [GeV] -Cell[7,11] 0.003392255652409 [GeV] -Cell[9,10] 0.0018690340146848 [GeV] -Cell[11,39] 0.00034395829661191 [GeV] -Cell[11,43] 0.00066221489018311 [GeV] -Cell[9,11] 0.00015194418832197 [GeV] -Cell[8,13] 0.00037568899162455 [GeV] -Cell[9,41] 0.00079778466313012 [GeV] -Cell[8,12] 0.0027008607285696 [GeV] -Cell[8,6] 0.0027753506289248 [GeV] -Cell[7,34] 2.5095070361658e-07 [GeV] -Cell[7,42] 0.0003936239538858 [GeV] -Cell[6,33] 0.00072830398491834 [GeV] -Cell[6,29] 0.00086087472681947 [GeV] -Cell[8,3] 0.00018433460657312 [GeV] -Cell[8,5] 0.0003317568106311 [GeV] -Cell[7,46] 0.00016206711234262 [GeV] -Cell[7,6] 0.0012721347459826 [GeV] -Cell[5,45] 0.0022330519516598 [GeV] -Cell[8,26] 0.0019115162647274 [GeV] -Cell[8,35] 0.0033214071726049 [GeV] -Cell[7,33] 5.0226602297698e-08 [GeV] -Cell[8,0] 0.00037927193622045 [GeV] -Cell[7,1] 0.00019565639627532 [GeV] -Cell[7,28] 0.00031534251372468 [GeV] -Cell[14,33] 0.0015923675094262 [GeV] -Cell[6,24] 3.3847787999548e-06 [GeV] -Cell[7,24] 2.1702515077777e-06 [GeV] -Cell[6,34] 1.1732366328943e-07 [GeV] -Cell[9,30] 0.0048624926870508 [GeV] -Cell[4,22] 0.00083949439423981 [GeV] -Cell[7,29] 0.00048980589725496 [GeV] -Cell[9,39] 0.00013583871839832 [GeV] -Cell[8,20] 0.00078844331697676 [GeV] -Cell[4,36] 0.00052865699903284 [GeV] -Cell[11,36] 0.0013744177892185 [GeV] -Cell[12,42] 0.00028056267392496 [GeV] -Cell[9,45] 0.00034278532389561 [GeV] -Cell[2,37] 0.0019931439053744 [GeV] -Cell[10,42] 0.00032093390092167 [GeV] -Cell[1,27] 0.00051099891 [GeV] -Cell[3,17] 1.0633083653602e-06 [GeV] -Cell[3,18] 1.7637095879763e-08 [GeV] -Cell[2,17] 2.5578431859685e-08 [GeV] -Cell[10,47] 0.0014010151596792 [GeV] -Cell[6,10] 0.000404743257868 [GeV] -Cell[12,35] 0.00089377156774253 [GeV] -Cell[3,14] 0.00020351754129683 [GeV] -Cell[4,40] 0.00024511149130926 [GeV] -Cell[1,39] 0.0015228895217001 [GeV] -Cell[6,4] 6.1742022287059e-05 [GeV] -Cell[7,18] 0.00050565655334632 [GeV] -Cell[8,25] 0.00059252030642515 [GeV] -Cell[7,3] 0.0010099674686266 [GeV] -Cell[4,25] 0.00010557583986338 [GeV] -Cell[6,0] 0.0064355937121249 [GeV] -### Total energy deposition in calorimeter by a source track in 69 cells : 29.640308268688 (GeV) - -Source track ID 9139 (mu+,97.449419553652[GeV]) at (421.35843979383,269.17850065432,1659.1147488355) -Original primary track ID 1 (unknown,305.48142430119[GeV]) -Cell[18,4] 0.19249727376525 [GeV] -Cell[19,4] 0.19560120597272 [GeV] -Cell[17,13] 0.0013852831545588 [GeV] -### Total energy deposition in calorimeter by a source track in 3 cells : 0.38948376289253 (GeV) +Cell[8,8] 0.00042925209963156 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00042925209963156 (GeV) -Source track ID 9140 (mu-,49.169000914693[GeV]) at (-250.06275224611,-432.97646580282,234.23807377492) +Source track ID 6733 (gamma,0.12204294971138[GeV]) at (268.34398051801,421.89039823128,-300.46303771925) Original primary track ID 1 (unknown,305.48142430119[GeV]) -Cell[11,31] 0.039338489833064 [GeV] -Cell[11,32] 0.41275037167519 [GeV] -Cell[12,32] 0.56744507129013 [GeV] -Cell[13,32] 0.5376804058731 [GeV] -Cell[14,32] 0.5795277963539 [GeV] -Cell[15,32] 0.63454491597321 [GeV] -Cell[16,32] 0.45207753036543 [GeV] -Cell[16,31] 0.0020762736439218 [GeV] -Cell[15,31] 0.011995823318054 [GeV] -Cell[14,31] 0.0049972627590226 [GeV] -Cell[13,31] 0.058355081560369 [GeV] -Cell[12,31] 0.03586368265791 [GeV] -### Total energy deposition in calorimeter by a source track in 12 cells : 3.3366527053033 (GeV) - -Source track ID 9135 (gamma,0.18586941759822[GeV]) at (-308.5712838573,-393.42567630832,1178.6007943509) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[16,31] 0.016522637601471 [GeV] -Cell[15,31] 0.0029322482289571 [GeV] -Cell[15,30] 0.064174838110136 [GeV] -Cell[14,44] 0.00048571250581044 [GeV] -Cell[14,43] 0.00020717765588426 [GeV] -Cell[16,30] 0.094276163666866 [GeV] -Cell[17,31] 0.0021280358786584 [GeV] -Cell[19,1] 0.00046200418261881 [GeV] -Cell[16,5] 0.001543333086598 [GeV] -### Total energy deposition in calorimeter by a source track in 9 cells : 0.182732150917 (GeV) - -Source track ID 9136 (gamma,0.79108390679382[GeV]) at (-463.39575608286,-187.78810730287,658.34952262221) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[13,26] 0.69670225656274 [GeV] -Cell[16,18] 0.0009702295356698 [GeV] -Cell[13,27] 0.080532034574576 [GeV] -Cell[13,25] 0.00033199237614621 [GeV] -Cell[13,28] 0.00073787075979551 [GeV] -Cell[14,26] 0.00102199782 [GeV] -Cell[15,9] 0.0015808757226068 [GeV] -Cell[16,13] 0.00092008019955332 [GeV] -Cell[9,21] 0.0002948734707584 [GeV] -Cell[14,40] 0.00051099891 [GeV] -Cell[13,33] 0.00029526279910201 [GeV] -Cell[14,27] 0.0028052694354538 [GeV] -Cell[14,18] 0.00051075721424268 [GeV] -Cell[16,4] 0.00055061100592099 [GeV] -Cell[14,1] 0.0004959375479895 [GeV] -Cell[17,7] 0.00074100923821843 [GeV] -Cell[14,35] 0.00068474952384698 [GeV] -Cell[14,20] 0.00058682533583828 [GeV] -Cell[14,16] 0.00051099891 [GeV] -### Total energy deposition in calorimeter by a source track in 19 cells : 0.79078463094246 (GeV) - -Source track ID 9068 (e-,0.00079962684724504[GeV]) at (793.95689949674,94.128670834401,2000) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[19,0] 0.00028862793724504 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00028862793724504 (GeV) - -Source track ID 8804 (gamma,0.68389327451526[GeV]) at (-406.71457617467,-290.83200224022,428.61116113144) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[12,28] 0.65764536139088 [GeV] -Cell[12,29] 0.023156204670421 [GeV] -Cell[12,30] 0.00051099891 [GeV] -Cell[12,27] 0.0019120989812033 [GeV] -Cell[11,47] 0.00066861056275723 [GeV] -### Total energy deposition in calorimeter by a source track in 5 cells : 0.68389327451526 (GeV) - -Source track ID 8805 (gamma,0.23519569097121[GeV]) at (-263.70586739907,-424.80491463647,329.32742171404) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[11,31] 0.22106424333488 [GeV] -Cell[11,32] 0.00032804310635349 [GeV] -Cell[12,31] 0.013803404529971 [GeV] -### Total energy deposition in calorimeter by a source track in 3 cells : 0.23519569097121 (GeV) - -Source track ID 8279 (proton,1.6977641303276[GeV]) at (-499.9974407576,1.5997611859443,253.67179878579) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[11,6] 0.00010653675576282 [GeV] -Cell[10,25] 1.5959572692736e-08 [GeV] -Cell[10,28] 0.00075724847805978 [GeV] -Cell[12,22] 0.0088855126919575 [GeV] -Cell[16,30] 0.00041092405238555 [GeV] -Cell[16,5] 6.1243576965353e-10 [GeV] -Cell[13,26] 0.00073680084208092 [GeV] -Cell[13,25] 0.0067703414649184 [GeV] -Cell[16,4] 2.8349719275639e-05 [GeV] -Cell[11,23] 0.37770980023911 [GeV] -Cell[11,24] 0.009503228531016 [GeV] -Cell[12,24] 0.0044132298120166 [GeV] -Cell[11,25] 0.0008640622252309 [GeV] -Cell[12,25] 0.0013585025615472 [GeV] -Cell[12,26] 0.0015913284991741 [GeV] -Cell[13,9] 0.0017058544971463 [GeV] -Cell[14,9] 0.00086513174186287 [GeV] -Cell[12,23] 0.013112817319938 [GeV] -Cell[13,24] 0.0015561885741027 [GeV] -Cell[11,22] 0.0066527807760931 [GeV] -Cell[16,3] 0.00014227857756487 [GeV] -Cell[15,4] 0.00076029357824996 [GeV] -Cell[15,3] 0.00018561238619804 [GeV] -Cell[11,26] 0.0001339764556966 [GeV] -Cell[12,33] 1.3074510497972e-06 [GeV] -Cell[12,9] 9.0271554060223e-05 [GeV] -Cell[12,8] 1.146989321569e-06 [GeV] -Cell[14,8] 0.00043509229524388 [GeV] -Cell[13,10] 0.0011012976135333 [GeV] -Cell[11,20] 0.001845810892547 [GeV] -Cell[11,21] 0.0020848683504285 [GeV] -Cell[10,6] 0.001294510634741 [GeV] -Cell[10,5] 6.3633443205617e-06 [GeV] -Cell[11,7] 2.624428741774e-05 [GeV] -Cell[10,7] 9.080370300353e-06 [GeV] -Cell[16,29] 8.9224615039029e-05 [GeV] -Cell[16,28] 9.0725467998709e-08 [GeV] -Cell[14,41] 0.0011499216886859 [GeV] -Cell[12,21] 1.025983465297e-09 [GeV] -Cell[10,26] 1.1090866109953e-08 [GeV] -Cell[10,22] 1.9417612265897e-06 [GeV] -Cell[10,23] 1.4930789029677e-07 [GeV] -Cell[11,27] 0.0067799030986725 [GeV] -Cell[11,28] 0.0012735533600831 [GeV] -Cell[10,29] 0.00032972306549163 [GeV] -Cell[10,27] 9.0654947360804e-05 [GeV] -### Total energy deposition in calorimeter by a source track in 46 cells : 0.45486198482113 (GeV) - -Source track ID 8418 (pi+,0.21068271424858[GeV]) at (17.399222728881,-499.69717534566,-1105.1202460726) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[4,35] 0.0084626506077891 [GeV] -Cell[4,36] 0.091022461986529 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.099485112594318 (GeV) - -Source track ID 8701 (gamma,0.16930440613177[GeV]) at (-310.31284695716,-392.05348743933,-196.72589331528) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[8,30] 0.0055958957632402 [GeV] -Cell[9,30] 0.091417105981954 [GeV] -Cell[9,31] 0.034008876904881 [GeV] -Cell[8,31] 0.029999731037319 [GeV] -Cell[9,32] 0.00019611789284942 [GeV] -Cell[8,32] 4.7293724492192e-11 [GeV] -### Total energy deposition in calorimeter by a source track in 6 cells : 0.16121772762754 (GeV) - -Source track ID 8702 (gamma,0.21551735492079[GeV]) at (-389.3567266745,-313.68987773487,-170.23336042569) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[8,9] 0.0012828610480577 [GeV] -Cell[8,29] 0.00022148319587351 [GeV] -Cell[8,28] 0.00039354301294111 [GeV] -Cell[9,29] 0.16960979129383 [GeV] -Cell[9,28] 0.042216720372688 [GeV] -Cell[9,27] 0.0012819570873974 [GeV] -Cell[9,3] 0.00042289843855561 [GeV] -### Total energy deposition in calorimeter by a source track in 7 cells : 0.21542925444935 (GeV) - -Source track ID 8546 (neutron,0.97942704982352[GeV]) at (-484.24300204844,124.53399121168,-59.936823271749) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[9,21] 0.006773870224698 [GeV] -Cell[9,20] 0.01112811355137 [GeV] -Cell[9,18] 2.9758310117359e-05 [GeV] -Cell[9,17] 2.6480017822905e-10 [GeV] -Cell[9,19] 0.00018197803612179 [GeV] -Cell[9,22] 0.00010957139109917 [GeV] -### Total energy deposition in calorimeter by a source track in 6 cells : 0.018223291778207 (GeV) - -Source track ID 8549 (neutron,0.94135254338374[GeV]) at (-477.83729949293,147.21248321153,-59.678607511915) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[9,7] 0.0010048183784779 [GeV] -Cell[9,10] 0.00032184236394851 [GeV] -Cell[9,21] 1.8945264164358e-05 [GeV] -Cell[12,39] 0.0001256567003515 [GeV] -Cell[9,15] 5.3118203068152e-06 [GeV] -Cell[9,16] 0.00015186791641543 [GeV] -### Total energy deposition in calorimeter by a source track in 6 cells : 0.0016284424436645 (GeV) - -Source track ID 8550 (gamma,0.00053170699010494[GeV]) at (-141.09105161358,-479.68043023931,65.502795668167) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[10,33] 0.00053170699010494 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00053170699010494 (GeV) +Cell[8,8] 0.0019428117375288 [GeV] +Cell[8,7] 0.10722433403707 [GeV] +Cell[7,43] 0.0036385511614887 [GeV] +Cell[3,42] 0.00051099891 [GeV] +Cell[9,6] 0.00029355483280639 [GeV] +Cell[8,6] 0.0056167271439883 [GeV] +### Total energy deposition in calorimeter by a source track in 6 cells : 0.11922697782288 (GeV) -Source track ID 8537 (gamma,0.00063792485632387[GeV]) at (-410.42612956794,-285.57029286653,-354.04413071955) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[8,28] 0.00063792485632387 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00063792485632387 (GeV) +Source track ID 6734 (gamma,0.00014202936421942[GeV]) at (349.24763133888,357.80733922627,-458.09556081264) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[7,6] 0.00014202936421942 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00014202936421942 (GeV) -Source track ID 8540 (gamma,0.0036407841329385[GeV]) at (-378.12145451782,-327.14548083892,-398.87888879026) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[7,29] 0.0036407841329385 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0036407841329385 (GeV) +Source track ID 6735 (gamma,0.0003659233926418[GeV]) at (482.44357513718,-131.33239055486,-585.86332704853) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[7,45] 0.0003659233926418 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0003659233926418 (GeV) -Source track ID 8530 (gamma,0.0017316060817381[GeV]) at (-395.38065731395,-306.0623070912,-326.29310482397) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[8,29] 0.0017316060817381 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0017316060817381 (GeV) +Source track ID 6736 (gamma,0.0005757839729972[GeV]) at (432.79198085948,-250.38191089559,-581.72267052402) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[7,43] 0.0005757839729972 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0005757839729972 (GeV) -Source track ID 8531 (gamma,0.0026598111476357[GeV]) at (240.83486375234,438.17641242015,-937.46800250365) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[5,7] 0.0021488122376357 [GeV] -Cell[5,8] 0.00051099891 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.0026598111476357 (GeV) +Source track ID 6739 (gamma,0.0091821425624791[GeV]) at (-228.02819412686,444.97544053941,-394.75809297616) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[8,15] 0.0028525539261685 [GeV] +Cell[7,15] 0.0048873965611629 [GeV] +Cell[8,25] 0.00020572964371544 [GeV] +Cell[7,16] 0.0010532231046772 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.008998903235724 (GeV) -Source track ID 8533 (gamma,0.00027630370228898[GeV]) at (499.7402388366,16.115014351043,-834.13974070456) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[5,0] 0.00027630370228898 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00027630370228898 (GeV) +Source track ID 6745 (gamma,0.0003660324620948[GeV]) at (293.31813335742,404.92526797388,-362.57444877447) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[8,7] 0.0003660324620948 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0003660324620948 (GeV) -Source track ID 8534 (gamma,0.00051099891[GeV]) at (-423.87501441887,-265.19798670315,-305.00369958507) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[8,28] 0.00051099891 [GeV] +Source track ID 6746 (gamma,0.00051099891[GeV]) at (111.34191947363,487.44535793043,-438.50372662116) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[7,10] 0.00051099891 [GeV] ### Total energy deposition in calorimeter by a source track in 1 cells : 0.00051099891 (GeV) -Source track ID 8535 (gamma,0.00044541252965805[GeV]) at (478.78727330219,-144.09284133453,-360.50760209444) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[7,21] 0.00016406625644618 [GeV] -Cell[8,45] 0.00027842308372391 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.00044248934017009 (GeV) - -Source track ID 8520 (gamma,0.00024601613208151[GeV]) at (-380.06682720803,324.88337423762,-740.70961613538) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[6,18] 0.00024601613208151 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00024601613208151 (GeV) - -Source track ID 8493 (gamma,0.001511312427418[GeV]) at (-369.76987077035,-336.55644797044,-579.82379718227) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[7,7] 0.00028123538260306 [GeV] -Cell[7,29] 0.001230077044815 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.001511312427418 (GeV) - -Source track ID 8437 (e-,0.031957823067671[GeV]) at (-406.17965674513,-291.57861109211,-1229.7127386214) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[3,28] 0.028355537688649 [GeV] -Cell[3,29] 0.003091286469022 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.031446824157671 (GeV) - -Source track ID 8442 (gamma,0.00022347213831469[GeV]) at (-492.57447478262,-85.850956853316,-263.43326633568) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[8,25] 0.00022347213831469 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00022347213831469 (GeV) - -Source track ID 8470 (gamma,0.00257909986786[GeV]) at (398.08719024423,-302.53361625355,-1711.8439180511) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[1,43] 0.00257909986786 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00257909986786 (GeV) - -Source track ID 8468 (e-,0.031486444002912[GeV]) at (-307.78766127159,-394.03902797688,-1333.6750139412) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[5,45] 0.00020639358647091 [GeV] -Cell[3,30] 0.022410214411378 [GeV] -Cell[2,15] 0.0018740554056112 [GeV] -Cell[3,31] 0.00095258247502694 [GeV] -Cell[2,34] 0.00028255416919334 [GeV] -### Total energy deposition in calorimeter by a source track in 5 cells : 0.025725800047681 (GeV) - -Source track ID 8445 (gamma,0.00015051914633061[GeV]) at (8.3144056894581,-499.9308658785,-516.79440832204) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[7,36] 0.00015051914633061 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00015051914633061 (GeV) - -Source track ID 8448 (gamma,0.12089087395429[GeV]) at (55.77953903485,-496.8789017709,-1962.5047171058) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[0,36] 0.057981269621731 [GeV] -Cell[0,37] 0.021730351022201 [GeV] -Cell[1,13] 0.00045978314769831 [GeV] -Cell[5,19] 0.0003321632720526 [GeV] -### Total energy deposition in calorimeter by a source track in 4 cells : 0.080503567063684 (GeV) - -Source track ID 8450 (gamma,0.0068422126547642[GeV]) at (20.772627119674,-499.56831160768,-1789.9428392451) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[0,36] 0.0068422126547642 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0068422126547642 (GeV) - -Source track ID 8452 (gamma,0.0015716005576378[GeV]) at (438.33105309886,-240.55329531986,-1473.686769912) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[2,44] 0.0015716005576378 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0015716005576378 (GeV) - -Source track ID 8438 (e+,0.033868374181335[GeV]) at (-317.60493178529,-386.169790773,-1224.0605417465) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[4,30] 0.0017485449782656 [GeV] -Cell[3,30] 0.031883123653454 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.03363166863172 (GeV) - -Source track ID 8422 (pi-,0.43420114445756[GeV]) at (103.12463394364,-489.24974182312,-156.78854022833) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[9,41] 0.00074020364760188 [GeV] -Cell[8,38] 2.6275228455461e-05 [GeV] -Cell[9,40] 0.0009552748094344 [GeV] -Cell[6,37] 1.0381084855226e-05 [GeV] -Cell[8,36] 0.0040346654987252 [GeV] -Cell[8,35] 1.571360064554e-05 [GeV] -Cell[8,37] 0.0023476887225416 [GeV] -Cell[9,38] 0.13881122782646 [GeV] -Cell[8,39] 0.00035916328992257 [GeV] -Cell[7,30] 0.00033381209575339 [GeV] -Cell[9,39] 0.069127021377364 [GeV] -Cell[11,36] 2.498496818589e-06 [GeV] -Cell[10,42] 4.1360027767951e-05 [GeV] -Cell[9,32] 3.7579880445264e-06 [GeV] -Cell[7,36] 1.6594179282947e-07 [GeV] -Cell[9,37] 0.048865582124833 [GeV] -Cell[9,36] 0.0011012159145901 [GeV] -Cell[7,13] 0.00061043517880428 [GeV] -Cell[8,41] 1.801021740539e-05 [GeV] -Cell[8,40] 0.00040578602698963 [GeV] -Cell[12,10] 8.6648399706974e-05 [GeV] -Cell[12,11] 3.7257317744661e-06 [GeV] -Cell[11,11] 0.00044410740297621 [GeV] -Cell[11,10] 0.00012533326050584 [GeV] -Cell[11,12] 9.0116161572951e-09 [GeV] -Cell[7,37] 0.0014849753181601 [GeV] -Cell[7,38] 0.00026106862229744 [GeV] -Cell[6,38] 0.0015946524472276 [GeV] -Cell[11,37] 9.3143881531432e-07 [GeV] -Cell[17,22] 7.0265584508888e-07 [GeV] -Cell[17,34] 1.3288156187627e-06 [GeV] -Cell[17,35] 2.9749438690487e-06 [GeV] -Cell[10,40] 8.9905496452047e-09 [GeV] -Cell[10,41] 0.0023535574689801 [GeV] -### Total energy deposition in calorimeter by a source track in 34 cells : 0.27417026360675 (GeV) - -Source track ID 8426 (gamma,0.005227537099417[GeV]) at (-475.78120167824,-153.72783784861,142.78892062426) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[10,26] 0.005227537099417 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.005227537099417 (GeV) - -Source track ID 8427 (gamma,0.0020333191318941[GeV]) at (-486.7256732979,-114.44701373435,157.16575699963) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[10,25] 0.0015223202218941 [GeV] -Cell[11,25] 0.00051099891 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.0020333191318941 (GeV) - -Source track ID 8306 (gamma,0.37133215847831[GeV]) at (-133.9365730618,-481.72709535219,181.68248007456) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[10,33] 0.1416536284657 [GeV] -Cell[11,33] 0.1882365477757 [GeV] -Cell[11,34] 0.025202156617317 [GeV] -Cell[10,34] 0.015330752003017 [GeV] -Cell[10,35] 0.00090907361657467 [GeV] -### Total energy deposition in calorimeter by a source track in 5 cells : 0.37133215847831 (GeV) - -Source track ID 8383 (gamma,0.00010444321342093[GeV]) at (-376.09076147687,-329.47797973726,164.118630803) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[10,29] 0.00010444321342093 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00010444321342093 (GeV) +Source track ID 6747 (gamma,0.00030876536601199[GeV]) at (498.16632698734,42.78213010052,-226.72131831932) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[8,0] 0.00030876536601199 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00030876536601199 (GeV) -Source track ID 8389 (gamma,6.4194372751315e-05[GeV]) at (255.16530149068,429.98914976447,544.21837964347) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[12,7] 6.4194372751315e-05 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 6.4194372751315e-05 (GeV) +Source track ID 6718 (gamma,13.492062082594[GeV]) at (140.70442013927,479.79398303154,-280.93413499296) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[8,9] 12.47571362387 [GeV] +Cell[7,11] 0.010861698542644 [GeV] +Cell[7,10] 0.020817395697926 [GeV] +Cell[8,10] 0.79453083184449 [GeV] +Cell[8,11] 0.017395353997768 [GeV] +Cell[7,13] 0.0025151624665293 [GeV] +Cell[8,12] 0.0019875327108798 [GeV] +Cell[8,8] 0.043364105461344 [GeV] +Cell[8,7] 0.0018343106078669 [GeV] +Cell[8,15] 0.00014044834133626 [GeV] +Cell[7,9] 0.050175575631867 [GeV] +Cell[9,8] 0.0017576657244087 [GeV] +Cell[1,29] 0.0022945384494717 [GeV] +Cell[7,12] 0.0025066430281055 [GeV] +Cell[7,8] 0.0050379585352536 [GeV] +Cell[9,41] 0.00058295303509649 [GeV] +Cell[15,33] 0.00081639905843214 [GeV] +Cell[8,28] 0.0019485937578863 [GeV] +Cell[9,17] 0.0017349585781204 [GeV] +Cell[5,34] 0.00051099891 [GeV] +Cell[7,31] 0.0030939559347733 [GeV] +Cell[7,3] 0.00076711352912195 [GeV] +Cell[0,14] 0.00011412324874361 [GeV] +Cell[6,27] 0.0024136266217231 [GeV] +Cell[4,24] 0.00048339133231665 [GeV] +Cell[11,32] 0.0025618037934619 [GeV] +Cell[6,45] 0.0010270762360674 [GeV] +Cell[8,32] 0.00051099891 [GeV] +Cell[10,24] 0.00075584496176245 [GeV] +Cell[7,23] 0.00030518693289701 [GeV] +Cell[3,27] 0.00013548247589551 [GeV] +Cell[3,28] 7.7540254380892e-07 [GeV] +Cell[5,16] 3.0585506465286e-09 [GeV] +Cell[5,15] 1.521926606074e-09 [GeV] +Cell[5,14] 1.6796795182472e-07 [GeV] +Cell[3,21] 0.001545356767913 [GeV] +Cell[9,10] 0.0042543173622075 [GeV] +Cell[5,29] 0.00078113255494311 [GeV] +Cell[9,31] 0.0011830596719304 [GeV] +Cell[3,38] 0.00051779530833317 [GeV] +Cell[9,12] 0.00073526813458932 [GeV] +Cell[8,39] 0.00092026791982693 [GeV] +Cell[9,9] 0.00013327519994208 [GeV] +Cell[9,11] 0.0031578212545195 [GeV] +Cell[10,40] 0.0010644096520146 [GeV] +Cell[13,37] 0.0025885464630422 [GeV] +Cell[6,9] 6.2876633538155e-05 [GeV] +Cell[7,4] 0.00072464158404457 [GeV] +### Total energy deposition in calorimeter by a source track in 48 cells : 13.466365068684 (GeV) + +Source track ID 6643 (e+,59.245982766341[GeV]) at (140.78415432429,479.77059298293,-280.93319341952) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[8,9] 53.855396352868 [GeV] +Cell[6,11] 0.0011346667568879 [GeV] +Cell[7,11] 0.031169801605539 [GeV] +Cell[7,10] 0.18960200610692 [GeV] +Cell[6,42] 0.00051099891 [GeV] +Cell[8,10] 3.9517648037805 [GeV] +Cell[8,11] 0.10375087734969 [GeV] +Cell[7,13] 0.00252108661509 [GeV] +Cell[8,12] 0.0078352495101335 [GeV] +Cell[8,8] 0.25727690093259 [GeV] +Cell[8,7] 0.025255722902712 [GeV] +Cell[9,6] 0.002225269480397 [GeV] +Cell[8,6] 0.00063806508072313 [GeV] +Cell[7,6] 0.00087601899613068 [GeV] +Cell[7,16] 0.00051099891 [GeV] +Cell[7,9] 0.46192474502032 [GeV] +Cell[9,8] 0.006581496997484 [GeV] +Cell[7,12] 0.0010844671108604 [GeV] +Cell[7,8] 0.041626971672414 [GeV] +Cell[8,28] 0.00022452131759524 [GeV] +Cell[9,10] 0.004789271228034 [GeV] +Cell[5,29] 1.6555422917008e-09 [GeV] +Cell[9,12] 0.0025393756413873 [GeV] +Cell[8,39] 0.0016130912977045 [GeV] +Cell[9,9] 0.011275937228112 [GeV] +Cell[9,11] 0.0085000472003226 [GeV] +Cell[6,9] 0.002751694231247 [GeV] +Cell[7,4] 0.0010649133420226 [GeV] +Cell[5,43] 0.001068699790732 [GeV] +Cell[5,36] 0.00095458733358764 [GeV] +Cell[5,35] 0.00033540465846265 [GeV] +Cell[9,45] 8.0123604438685e-05 [GeV] +Cell[6,28] 0.001354537515894 [GeV] +Cell[9,32] 0.0025637696170658 [GeV] +Cell[10,23] 0.00054084934667552 [GeV] +Cell[10,20] 0.00027170867079291 [GeV] +Cell[6,26] 0.0009455749043755 [GeV] +Cell[5,40] 0.0021684497190975 [GeV] +Cell[6,40] 0.00054468518821978 [GeV] +Cell[5,39] 0.0026635182240164 [GeV] +Cell[6,39] 0.0047418655573844 [GeV] +Cell[8,13] 0.013534059359079 [GeV] +Cell[12,11] 0.0016004873885329 [GeV] +Cell[11,12] 0.00082905106476019 [GeV] +Cell[8,21] 0.00014077893487572 [GeV] +Cell[10,26] 0.0024309771786401 [GeV] +Cell[7,7] 0.0094857993971816 [GeV] +Cell[9,7] 0.0018958416770234 [GeV] +Cell[10,39] 0.00014599593768084 [GeV] +Cell[10,41] 0.0007364796305131 [GeV] +Cell[10,42] 0.00041487709261654 [GeV] +Cell[12,37] 0.0020111989056204 [GeV] +Cell[5,32] 0.0048793203148636 [GeV] +Cell[5,31] 0.001057080973788 [GeV] +Cell[12,17] 0.00013399347336044 [GeV] +Cell[7,38] 0.00067971229031301 [GeV] +Cell[9,13] 0.0021850689893619 [GeV] +Cell[5,25] 0.00047649639381798 [GeV] +Cell[4,39] 0.0048409241292846 [GeV] +Cell[11,5] 0.00019345296321322 [GeV] +Cell[1,45] 0.0014396564738065 [GeV] +Cell[2,46] 0.00021616123738608 [GeV] +Cell[4,40] 0.0021173970813723 [GeV] +Cell[9,19] 0.0016597076589434 [GeV] +Cell[9,20] 1.1080812224691e-05 [GeV] +Cell[8,20] 2.4056935217232e-09 [GeV] +Cell[8,19] 2.9934162739664e-09 [GeV] +Cell[13,43] 0.0019520421485786 [GeV] +Cell[9,35] 0.0011369532047315 [GeV] +Cell[7,14] 0.0043567894448912 [GeV] +Cell[9,16] 0.0019876075221807 [GeV] +Cell[8,31] 0.0012746258753748 [GeV] +Cell[5,33] 0.00057656688465862 [GeV] +Cell[0,30] 0.00051099891 [GeV] +Cell[11,36] 0.00039395349181329 [GeV] +Cell[11,35] 0.0017547425647055 [GeV] +Cell[15,35] 0.001414118134262 [GeV] +Cell[7,46] 0.0026635306634973 [GeV] +Cell[4,31] 0.00031727753533873 [GeV] +Cell[9,14] 0.0018012569794033 [GeV] +Cell[14,19] 0.00036201668718697 [GeV] +Cell[15,40] 0.00037696122347092 [GeV] +Cell[8,27] 0.00039962269762689 [GeV] +Cell[6,30] 0.00053962079376824 [GeV] +Cell[11,8] 0.00015538846916615 [GeV] +Cell[7,30] 5.8344717544969e-06 [GeV] +Cell[7,41] 7.4227131553926e-06 [GeV] +Cell[6,38] 0.00032867864429863 [GeV] +Cell[9,38] 0.0010470319959607 [GeV] +Cell[0,42] 0.0010757226922762 [GeV] +Cell[0,28] 0.0012528354859405 [GeV] +Cell[7,36] 0.00080295133407868 [GeV] +Cell[7,37] 0.0017726829906332 [GeV] +Cell[9,39] 0.00068028068157763 [GeV] +Cell[4,30] 1.1749303666875e-08 [GeV] +Cell[5,28] 1.4099729014561e-08 [GeV] +Cell[3,8] 3.0766183044761e-08 [GeV] +Cell[2,8] 7.5221894587685e-07 [GeV] +Cell[2,9] 1.9727050926122e-08 [GeV] +Cell[6,10] 0.00057721236183929 [GeV] +Cell[9,28] 0.0015817571781079 [GeV] +Cell[6,8] 0.00084222661358058 [GeV] +Cell[7,27] 0.0004954972963212 [GeV] +Cell[3,37] 0.00072191059366614 [GeV] +### Total energy deposition in calorimeter by a source track in 104 cells : 59.078961679482 (GeV) + +Source track ID 6612 (mu+,97.449376557725[GeV]) at (421.38559033955,269.13599583516,1659.0912031421) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[18,4] 0.20428006183096 [GeV] +Cell[19,4] 0.24259896503277 [GeV] +Cell[19,3] 0.0056805418591457 [GeV] +Cell[18,11] 0.0021771074614747 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.45473667618435 (GeV) -Source track ID 8390 (gamma,0.00013811019054266[GeV]) at (-35.653677520717,-498.72719524731,675.95793969456) +Source track ID 6613 (mu-,49.168885272842[GeV]) at (-250.03894591484,-432.99021412244,234.30699383872) +Original primary track ID 1 (unknown,305.48142430119[GeV]) +Cell[11,32] 0.35979386018175 [GeV] +Cell[11,31] 0.013694281102006 [GeV] +Cell[12,32] 0.48533146897184 [GeV] +Cell[13,32] 0.59121551704819 [GeV] +Cell[14,32] 0.64977617824747 [GeV] +Cell[15,32] 0.4642519823526 [GeV] +Cell[16,32] 2.1532754795475 [GeV] +Cell[17,32] 0.14200442120864 [GeV] +Cell[16,31] 0.04199927299092 [GeV] +Cell[17,31] 0.015498251122445 [GeV] +Cell[19,33] 0.00012316868633767 [GeV] +Cell[15,31] 0.00096538887932326 [GeV] +Cell[14,31] 0.013414569662168 [GeV] +Cell[13,31] 0.032119780439384 [GeV] +Cell[12,31] 0.0085932319119548 [GeV] +### Total energy deposition in calorimeter by a source track in 15 cells : 4.9720568523525 (GeV) + +Source track ID 6608 (gamma,0.18586941759822[GeV]) at (-308.57130718234,-393.42565801404,1178.6007509616) Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[13,35] 0.00013811019054266 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00013811019054266 (GeV) - -Source track ID 8391 (gamma,0.00023361998119053[GeV]) at (-499.93037795812,8.3436919079442,348.31546649754) +Cell[15,32] 0.00052088513745998 [GeV] +Cell[16,32] 0.0042920565151532 [GeV] +Cell[16,31] 0.041289582893283 [GeV] +Cell[15,31] 0.038253228095527 [GeV] +Cell[15,30] 0.078197720229799 [GeV] +Cell[16,30] 0.0077516937075263 [GeV] +Cell[17,42] 0.0059579413687323 [GeV] +Cell[18,39] 0.00041765858897072 [GeV] +Cell[18,20] 0.0020277022304407 [GeV] +Cell[17,40] 0.00035793023518184 [GeV] +Cell[19,17] 0.0035116101310348 [GeV] +Cell[17,20] 0.00051099891 [GeV] +### Total energy deposition in calorimeter by a source track in 12 cells : 0.18308900804311 (GeV) + +Source track ID 6609 (gamma,0.79108390679382[GeV]) at (-463.39575439376,-187.78811147098,658.34953360638) Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[11,23] 0.00023361998119053 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00023361998119053 (GeV) - -Source track ID 8392 (gamma,0.00026581320017167[GeV]) at (-486.79462102956,-114.15339213832,472.48357551724) +Cell[9,12] 0.002548829939252 [GeV] +Cell[13,43] 0.00048692140084925 [GeV] +Cell[15,40] 0.0072235592427312 [GeV] +Cell[13,26] 0.7095398248601 [GeV] +Cell[15,37] 0.00054144589538609 [GeV] +Cell[13,2] 0.00080825071453806 [GeV] +Cell[13,27] 0.056043258561771 [GeV] +Cell[16,7] 0.00051099891 [GeV] +Cell[14,25] 0.00072895535981055 [GeV] +Cell[13,25] 0.0056042811002766 [GeV] +Cell[12,8] 0.00051099891 [GeV] +Cell[10,38] 0.00021792432654618 [GeV] +Cell[15,44] 0.00058047849182554 [GeV] +Cell[12,44] 0.00051099891 [GeV] +Cell[14,26] 0.00026421691740129 [GeV] +Cell[13,28] 0.00079116565500511 [GeV] +Cell[18,0] 0.0016874744708352 [GeV] +### Total energy deposition in calorimeter by a source track in 17 cells : 0.78859958366633 (GeV) + +Source track ID 6514 (e-,0.0009736919323676[GeV]) at (444.35750824787,-229.23002609549,1719.7467204465) Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[12,25] 0.00026581320017167 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00026581320017167 (GeV) +Cell[18,44] 0.00010998083709218 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00010998083709218 (GeV) -Source track ID 8323 (gamma,0.031414932713023[GeV]) at (-398.53066395471,-301.94918428076,214.95866976152) +Source track ID 6275 (gamma,0.68389327451526[GeV]) at (-406.71457617525,-290.83200223942,428.61116113178) Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[11,28] 0.020295537983605 [GeV] -Cell[10,29] 0.00043728885592621 [GeV] -Cell[11,29] 0.010682105873492 [GeV] -### Total energy deposition in calorimeter by a source track in 3 cells : 0.031414932713023 (GeV) - -Source track ID 8324 (gamma,0.00027654283788988[GeV]) at (-471.17473815428,-167.31517003919,211.11095870121) +Cell[13,27] 0.00021869226050553 [GeV] +Cell[13,28] 0.0060621798205515 [GeV] +Cell[12,28] 0.64224179462214 [GeV] +Cell[12,6] 0.0019098490090181 [GeV] +Cell[12,29] 0.023722138521836 [GeV] +Cell[12,30] 0.0018734575139914 [GeV] +Cell[10,4] 0.00019251436342909 [GeV] +Cell[12,27] 0.0046190546249047 [GeV] +Cell[17,9] 0.00020119268444649 [GeV] +Cell[11,28] 0.0015413884855719 [GeV] +Cell[18,1] 0.00034858024736456 [GeV] +### Total energy deposition in calorimeter by a source track in 11 cells : 0.68293084215376 (GeV) + +Source track ID 6276 (gamma,0.23519569097121[GeV]) at (-263.70586739687,-424.80491463784,329.32742171236) Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[11,26] 0.00027654283788988 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00027654283788988 (GeV) - -Source track ID 8374 (gamma,0.00030917296085532[GeV]) at (-229.61466892376,-444.15887226873,165.31015361089) +Cell[11,32] 0.00051099891 [GeV] +Cell[11,31] 0.20269568713057 [GeV] +Cell[12,32] 0.0068411182408644 [GeV] +Cell[12,31] 0.02231837192847 [GeV] +Cell[12,30] 0.0019003423561772 [GeV] +Cell[11,30] 0.00092917240512528 [GeV] +### Total energy deposition in calorimeter by a source track in 6 cells : 0.23519569097121 (GeV) + +Source track ID 6198 (proton,1.6961061767846[GeV]) at (-499.98953379968,3.2351338116643,261.07314208765) Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[10,32] 0.00030917296085532 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00030917296085532 (GeV) - -Source track ID 8328 (gamma,0.0027668852337186[GeV]) at (78.457921226272,493.80598882238,360.73808293121) +Cell[9,17] 0.00074067459625038 [GeV] +Cell[10,24] 8.1538942595216e-08 [GeV] +Cell[13,37] 7.1118760388345e-08 [GeV] +Cell[5,43] 1.0887343349168e-05 [GeV] +Cell[9,45] 0.0004620927268154 [GeV] +Cell[4,40] 9.340306656668e-06 [GeV] +Cell[13,43] 4.3316986628952e-06 [GeV] +Cell[13,32] 1.0571617167443e-08 [GeV] +Cell[10,38] 0.00079673885081934 [GeV] +Cell[12,44] 1.0608857497573e-05 [GeV] +Cell[11,23] 0.45744826870398 [GeV] +Cell[11,22] 0.0062982776747408 [GeV] +Cell[11,24] 0.022095427207834 [GeV] +Cell[11,29] 9.9717872217298e-09 [GeV] +Cell[15,6] 1.9754223903874e-05 [GeV] +Cell[15,5] 0.00029459121274374 [GeV] +Cell[12,23] 0.0001167621303548 [GeV] +Cell[12,24] 0.0021422422952859 [GeV] +Cell[9,46] 0.00070037487912759 [GeV] +Cell[8,45] 2.2264241611083e-06 [GeV] +Cell[11,25] 0.0068316158999261 [GeV] +Cell[2,23] 0.0016869374991904 [GeV] +Cell[1,23] 0.00018194101527592 [GeV] +Cell[12,22] 0.0002196087225833 [GeV] +Cell[10,18] 0.001180033257834 [GeV] +Cell[10,19] 8.2611909601837e-07 [GeV] +Cell[12,14] 8.1991179322358e-06 [GeV] +Cell[13,36] 8.6667911970494e-05 [GeV] +Cell[12,36] 1.1641532182693e-13 [GeV] +Cell[9,18] 0.00075084141878888 [GeV] +Cell[13,44] 0.00084650230999125 [GeV] +Cell[12,43] 7.9510888213008e-08 [GeV] +Cell[11,21] 0.0063032244725752 [GeV] +Cell[11,19] 7.0768699401924e-08 [GeV] +Cell[12,21] 0.016608203385137 [GeV] +Cell[12,20] 0.0011793418675932 [GeV] +Cell[11,37] 6.6725317738019e-06 [GeV] +Cell[11,38] 0.0010154401460711 [GeV] +Cell[11,39] 1.1827691529334e-06 [GeV] +Cell[11,20] 0.0010570050616479 [GeV] +Cell[13,21] 0.0009043051695304 [GeV] +Cell[13,22] 1.0384916095063e-08 [GeV] +Cell[8,17] 6.483202103027e-07 [GeV] +Cell[7,17] 1.0597287882774e-09 [GeV] +Cell[13,23] 5.3481709301195e-09 [GeV] +Cell[12,25] 6.9849193096161e-13 [GeV] +Cell[16,44] 0.00010751538344152 [GeV] +Cell[16,45] 1.1812110187748e-09 [GeV] +### Total energy deposition in calorimeter by a source track in 48 cells : 0.53012965296744 (GeV) + +Source track ID 6199 (anti_proton,1.0340697036325[GeV]) at (-280.54947589404,-413.87436689844,-338.00283057863) Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[11,10] 0.0027668852337186 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0027668852337186 (GeV) - -Source track ID 8373 (gamma,0.00011676652892369[GeV]) at (-336.46859156398,-369.84981667016,623.59157763293) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[13,30] 0.00011676652892369 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00011676652892369 (GeV) - -Source track ID 8369 (gamma,0.000235204779222[GeV]) at (423.99885937019,-264.99993821279,134.60342014418) -Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[10,43] 0.000235204779222 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.000235204779222 (GeV) - -Source track ID 8339 (gamma,0.0096930141368884[GeV]) at (286.1072031423,410.05203122298,797.23317510394) +Cell[9,21] 0.00051099891 [GeV] +Cell[7,45] 0.00073843566831874 [GeV] +Cell[7,43] 0.0002341218090736 [GeV] +Cell[8,6] 0.00051099891 [GeV] +Cell[8,15] 6.864844908705e-06 [GeV] +Cell[8,25] 0.00051304058844335 [GeV] +Cell[7,9] 0.0019206643789911 [GeV] +Cell[9,41] 0.00065333965109937 [GeV] +Cell[8,28] 0.001079550695325 [GeV] +Cell[9,17] 0.037534388903735 [GeV] +Cell[7,31] 0.0033819951173884 [GeV] +Cell[8,32] 0.043445980544517 [GeV] +Cell[7,23] 0.010369909800964 [GeV] +Cell[5,16] 0.00010192503437167 [GeV] +Cell[5,15] 0.0013543276741783 [GeV] +Cell[5,14] 0.0012053860147902 [GeV] +Cell[9,31] 0.0084822592435369 [GeV] +Cell[9,12] 5.2819614938926e-06 [GeV] +Cell[8,39] 7.5767530971689e-06 [GeV] +Cell[9,9] 2.8657338361882e-08 [GeV] +Cell[9,11] 0.00079350711235235 [GeV] +Cell[13,37] 0.00026170245764212 [GeV] +Cell[6,9] 1.6115161328344e-05 [GeV] +Cell[9,32] 0.0035538087578966 [GeV] +Cell[10,20] 0.00095347167579722 [GeV] +Cell[5,40] 0.00021033726895176 [GeV] +Cell[6,39] 0.0011368811749774 [GeV] +Cell[12,11] 1.2899500416097e-07 [GeV] +Cell[11,12] 0.0017108492020874 [GeV] +Cell[8,21] 1.4963655266911e-06 [GeV] +Cell[10,26] 0.00027430433078848 [GeV] +Cell[12,17] 0.0019238493936405 [GeV] +Cell[11,5] 0.0054114762901077 [GeV] +Cell[9,35] 0.02087293190147 [GeV] +Cell[8,31] 0.94535076331327 [GeV] +Cell[7,46] 0.0005128654986886 [GeV] +Cell[9,14] 0.00069011675182958 [GeV] +Cell[8,27] 0.00046627853740064 [GeV] +Cell[7,30] 0.00030437100530651 [GeV] +Cell[9,38] 3.5179113794584e-05 [GeV] +Cell[7,36] 4.214234650135e-11 [GeV] +Cell[9,39] 3.5949743056563e-06 [GeV] +Cell[6,10] 9.7427248838358e-06 [GeV] +Cell[15,44] 9.8483739420772e-06 [GeV] +Cell[11,28] 9.6042640507221e-13 [GeV] +Cell[11,24] 0.00036694887487108 [GeV] +Cell[8,45] 1.34197762236e-10 [GeV] +Cell[10,18] 0.0019974658306345 [GeV] +Cell[10,19] 1.4779936604555e-05 [GeV] +Cell[8,30] 0.092863810161121 [GeV] +Cell[9,40] 0.0012803813256147 [GeV] +Cell[8,40] 0.00059364003641838 [GeV] +Cell[8,38] 1.0511165601201e-07 [GeV] +Cell[9,30] 0.010629671133282 [GeV] +Cell[8,29] 0.0023471654696737 [GeV] +Cell[7,28] 2.7224887162447e-08 [GeV] +Cell[8,16] 8.3992912259419e-06 [GeV] +Cell[12,7] 5.9694633528125e-06 [GeV] +Cell[11,45] 0.0028442612824277 [GeV] +Cell[10,43] 0.00030334374964025 [GeV] +Cell[7,39] 2.5504914432531e-05 [GeV] +Cell[5,13] 9.6504209068371e-12 [GeV] +Cell[7,32] 0.019911270631394 [GeV] +Cell[6,32] 0.0009459563107614 [GeV] +Cell[4,17] 0.00031886542439814 [GeV] +Cell[12,1] 5.3675803355873e-06 [GeV] +Cell[12,0] 3.6665542613264e-05 [GeV] +Cell[16,18] 1.7560779902851e-05 [GeV] +Cell[16,19] 5.0080647633877e-06 [GeV] +Cell[12,46] 0.00043003311098619 [GeV] +Cell[12,45] 1.2939537526108e-05 [GeV] +Cell[12,47] 0.00018245334572077 [GeV] +Cell[11,46] 2.1991706944391e-08 [GeV] +Cell[8,14] 0.00062815772246699 [GeV] +Cell[0,0] 0.0027681423994596 [GeV] +Cell[0,1] 4.5307139749639e-05 [GeV] +Cell[0,47] 8.6361759567808e-06 [GeV] +Cell[10,47] 4.4506800007753e-05 [GeV] +Cell[9,47] 4.4109444776268e-06 [GeV] +Cell[9,0] 4.8669723477474e-05 [GeV] +Cell[11,18] 0.00051108074805357 [GeV] +Cell[10,30] 0.00067122110340404 [GeV] +Cell[10,28] 0.0055925946637377 [GeV] +Cell[10,27] 0.0013359844509409 [GeV] +Cell[9,27] 0.00057479790077014 [GeV] +Cell[9,26] 0.0017354567946574 [GeV] +Cell[10,25] 9.5615142140559e-07 [GeV] +Cell[14,13] 5.6829144511994e-07 [GeV] +Cell[14,12] 1.3121461961418e-10 [GeV] +Cell[5,17] 2.5109092397315e-06 [GeV] +Cell[8,34] 0.00058479995117188 [GeV] +Cell[9,33] 0.056855036309688 [GeV] +Cell[9,34] 0.00073572627993383 [GeV] +Cell[9,36] 0.00032264368664087 [GeV] +Cell[7,44] 8.5603814064598e-05 [GeV] +Cell[8,44] 2.1313936713341e-09 [GeV] +Cell[12,18] 0.0026788226168152 [GeV] +Cell[13,18] 4.4700813305099e-08 [GeV] +Cell[13,17] 1.0959607220684e-07 [GeV] +Cell[12,19] 0.0013640983045767 [GeV] +Cell[8,26] 0.00014469809544715 [GeV] +Cell[7,24] 0.0061391037316089 [GeV] +Cell[7,25] 3.5834666568917e-06 [GeV] +Cell[6,23] 0.0021666738958062 [GeV] +Cell[6,24] 0.00082549094684055 [GeV] +Cell[6,21] 0.00087784445730881 [GeV] +Cell[5,21] 5.040751950844e-05 [GeV] +Cell[5,20] 1.1696386081894e-10 [GeV] +Cell[6,22] 2.5082689725195e-06 [GeV] +Cell[7,22] 9.3970447778702e-10 [GeV] +Cell[7,26] 0.00051487276633076 [GeV] +Cell[3,3] 6.1435651766715e-05 [GeV] +Cell[3,2] 0.00019923778016141 [GeV] +Cell[3,30] 1.8439716366174e-06 [GeV] +Cell[10,9] 1.7410595673482e-05 [GeV] +Cell[10,8] 0.00056219904407749 [GeV] +Cell[7,20] 2.0656835258706e-05 [GeV] +Cell[15,42] 1.5610886330251e-06 [GeV] +Cell[15,43] 6.1234302411322e-06 [GeV] +Cell[15,45] 2.8171053651022e-05 [GeV] +Cell[18,35] 1.4624073257437e-05 [GeV] +Cell[17,35] 0.00034014860785908 [GeV] +Cell[17,34] 0.0005709728328751 [GeV] +Cell[18,34] 3.0587513845148e-07 [GeV] +Cell[8,35] 0.00072723804519353 [GeV] +Cell[8,33] 0.0062082075449925 [GeV] +Cell[8,36] 0.00023604736291122 [GeV] +Cell[7,35] 6.1319508404267e-10 [GeV] +Cell[7,33] 0.003596115647946 [GeV] +Cell[7,34] 0.002872313089503 [GeV] +Cell[10,34] 3.1255138992492e-09 [GeV] +Cell[11,11] 0.00085836216144708 [GeV] +Cell[12,12] 6.9543567883557e-07 [GeV] +Cell[15,3] 3.8956770731602e-06 [GeV] +Cell[16,25] 0.00012898539847765 [GeV] +Cell[16,6] 2.6929628802463e-08 [GeV] +Cell[18,31] 1.5221892684849e-06 [GeV] +Cell[9,4] 8.9031352668513e-05 [GeV] +Cell[4,16] 0.0015614375206546 [GeV] +Cell[17,17] 0.00022571737354865 [GeV] +Cell[9,37] 0.00013874299067046 [GeV] +Cell[10,1] 0.00074529662880196 [GeV] +Cell[11,43] 0.0017047602981422 [GeV] +Cell[10,44] 0.0038678141709264 [GeV] +Cell[15,27] 0.0002738540018181 [GeV] +Cell[10,13] 0.0003841753202833 [GeV] +Cell[8,43] 0.00022723174289508 [GeV] +Cell[5,26] 0.0024878615382522 [GeV] +Cell[3,6] 0.00043878435313296 [GeV] +Cell[13,11] 0.0011846277848635 [GeV] +Cell[10,14] 0.013103040823464 [GeV] +Cell[10,15] 0.03290628181753 [GeV] +Cell[16,8] 0.00026603425551965 [GeV] +Cell[6,4] 0.00051099891 [GeV] +Cell[1,47] 0.0004420553095387 [GeV] +Cell[10,17] 0.0005836888691588 [GeV] +Cell[7,29] 6.8354398690086e-05 [GeV] +Cell[10,16] 0.006356245723537 [GeV] +Cell[10,10] 0.00065490105947577 [GeV] +Cell[0,37] 0.0032596158000215 [GeV] +Cell[1,1] 0.00051099891 [GeV] +Cell[9,24] 0.0074023065739041 [GeV] +Cell[9,15] 0.0060159788838991 [GeV] +Cell[7,2] 0.00078330424977142 [GeV] +Cell[7,1] 0.001405655722409 [GeV] +### Total energy deposition in calorimeter by a source track in 165 cells : 1.4230902859469 (GeV) + +Source track ID 6213 (gamma,0.37133215847831[GeV]) at (-133.93656803044,-481.72709675108,181.68248162905) Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[14,7] 0.0096930141368884 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0096930141368884 (GeV) - -Source track ID 8309 (e+,0.018265447210183[GeV]) at (-235.66334348416,440.97935160035,1313.694639975) +Cell[8,0] 2.6329504878959e-05 [GeV] +Cell[11,32] 0.0022382414102248 [GeV] +Cell[10,4] 9.1648593638638e-08 [GeV] +Cell[9,47] 7.2678389842622e-06 [GeV] +Cell[9,0] 0.00054963086099508 [GeV] +Cell[12,18] 0.0027645515395922 [GeV] +Cell[10,34] 0.015767856637516 [GeV] +Cell[10,33] 0.24896576446357 [GeV] +Cell[11,33] 0.031324979548442 [GeV] +Cell[15,1] 0.00037612728225567 [GeV] +Cell[11,34] 0.061844778379164 [GeV] +Cell[11,3] 1.072406215826e-06 [GeV] +Cell[10,3] 8.2129112032135e-05 [GeV] +### Total energy deposition in calorimeter by a source track in 13 cells : 0.36394882063247 (GeV) + +Source track ID 6214 (gamma,0.136782797126[GeV]) at (-378.9723709408,-326.15938138203,68.392648808774) Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[16,15] 0.017445627059928 [GeV] -Cell[18,47] 0.00051099891 [GeV] -Cell[16,42] 0.00034186872105714 [GeV] -Cell[16,40] 0.00047795142919761 [GeV] -### Total energy deposition in calorimeter by a source track in 4 cells : 0.018776446120183 (GeV) +Cell[10,30] 0.0090526366207724 [GeV] +Cell[10,28] 0.0013712193878633 [GeV] +Cell[10,29] 0.12635894111737 [GeV] +### Total energy deposition in calorimeter by a source track in 3 cells : 0.136782797126 (GeV) -Source track ID 8283 (pi+,0.39473075779175[GeV]) at (-476.37574713719,-151.87543428573,199.33855313895) +Source track ID 6202 (pi+,0.39487383691771[GeV]) at (-475.21388068648,-155.47272301886,240.26165135904) Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[5,31] 0.00052871009505861 [GeV] -Cell[9,12] 0.00028451610873651 [GeV] -Cell[10,25] 0.046263365416134 [GeV] -Cell[5,30] 1.4469694608124e-05 [GeV] -Cell[6,0] 5.1728687540162e-06 [GeV] -Cell[14,31] 4.5761204091832e-08 [GeV] -Cell[9,21] 9.0243032900617e-08 [GeV] -Cell[11,23] 7.2929542511702e-09 [GeV] -Cell[11,24] 2.7235789804308e-05 [GeV] -Cell[11,25] 0.004159346999019 [GeV] -Cell[11,26] 0.12884606060202 [GeV] -Cell[10,26] 0.0050120389085983 [GeV] -Cell[11,27] 1.09983375296e-10 [GeV] -Cell[10,27] 0.0002470440243211 [GeV] -Cell[9,20] 0.00030735616184006 [GeV] -Cell[12,10] 3.9721198845655e-09 [GeV] -Cell[12,11] 1.1563097359613e-08 [GeV] -Cell[17,35] 1.0164963401621e-05 [GeV] -Cell[16,40] 0.00046787882529804 [GeV] -Cell[5,47] 4.5034512877464e-06 [GeV] -Cell[6,47] 4.4922246306669e-06 [GeV] -Cell[9,13] 3.5689272044692e-06 [GeV] -Cell[9,43] 0.00052892064161188 [GeV] -Cell[9,42] 7.1685895214841e-06 [GeV] -Cell[9,1] 3.901226533344e-06 [GeV] -Cell[9,2] 5.9727418993134e-06 [GeV] -Cell[8,1] 0.00043751780798971 [GeV] -Cell[8,2] 9.1845143326964e-05 [GeV] -Cell[10,24] 0.00081675944351252 [GeV] -Cell[10,45] 4.8337940825149e-08 [GeV] -Cell[15,14] 4.8089510528371e-08 [GeV] -Cell[16,44] 7.3366361903027e-08 [GeV] -Cell[14,17] 2.9858822452979e-06 [GeV] -Cell[12,16] 2.0951643818989e-08 [GeV] -Cell[11,17] 5.3720569894722e-07 [GeV] -Cell[12,17] 2.561486326158e-09 [GeV] -Cell[11,18] 2.7844798751175e-09 [GeV] -Cell[13,11] 3.0127896104659e-07 [GeV] -Cell[13,47] 3.6701870201341e-05 [GeV] -Cell[13,46] 0.00095693382169134 [GeV] -Cell[13,0] 1.3561076993824e-05 [GeV] -Cell[12,47] 0.00062199758808208 [GeV] -Cell[18,43] 0.0053544497047415 [GeV] -Cell[17,2] 8.5936691817778e-06 [GeV] -Cell[17,1] 0.00013318339849991 [GeV] -Cell[17,3] 5.2619748203142e-10 [GeV] -Cell[18,44] 0.0040713952248205 [GeV] -Cell[17,44] 0.0016414071279401 [GeV] -Cell[17,45] 6.6035878148796e-08 [GeV] -Cell[18,45] 0.001080414392143 [GeV] -Cell[17,42] 0.00060614015638441 [GeV] -Cell[17,43] 0.00086155362166505 [GeV] -Cell[18,42] 0.0030578285176966 [GeV] -Cell[17,41] 0.00083944045996805 [GeV] -Cell[16,41] 1.2005343451165e-05 [GeV] -Cell[16,39] 7.3389749741182e-06 [GeV] -Cell[17,29] 5.4927148157731e-06 [GeV] -Cell[17,36] 4.3328710598871e-06 [GeV] -Cell[15,25] 0.00018893198518867 [GeV] -Cell[15,24] 8.3075534024601e-05 [GeV] -Cell[14,24] 8.2440237747505e-11 [GeV] -Cell[19,12] 9.5373369695153e-06 [GeV] -Cell[11,4] 0.00084065598155727 [GeV] -Cell[11,5] 0.0016484727564415 [GeV] -Cell[5,32] 5.4773243609816e-06 [GeV] -Cell[4,32] 0.0011920057633286 [GeV] -### Total energy deposition in calorimeter by a source track in 66 cells : 0.21136318391653 (GeV) - -Source track ID 8284 (pi-,0.89521384953388[GeV]) at (-157.62437656298,-474.50453729457,407.80900297957) +Cell[12,27] 2.9295318410732e-05 [GeV] +Cell[11,28] 1.8959620646228e-06 [GeV] +Cell[11,25] 0.29530976892337 [GeV] +Cell[11,26] 0.062794574311224 [GeV] +Cell[12,26] 0.0012663900407083 [GeV] +Cell[11,27] 0.00011829823023595 [GeV] +Cell[10,37] 8.4156636148691e-10 [GeV] +### Total energy deposition in calorimeter by a source track in 7 cells : 0.35952022362758 (GeV) + +Source track ID 6203 (pi-,0.89743172643439[GeV]) at (-157.76145726578,-474.45897883946,408.86610331969) Original primary track ID 2 (unknown,2.8798399642419[GeV]) -Cell[11,39] 3.9950537029654e-09 [GeV] -Cell[8,13] 1.6589183360338e-12 [GeV] -Cell[8,12] 0.0017119855725808 [GeV] -Cell[12,36] 0.005952987269452 [GeV] -Cell[9,0] 1.6873236745596e-09 [GeV] -Cell[12,22] 0.0002133206144382 [GeV] -Cell[12,34] 0.066809328064654 [GeV] -Cell[7,30] 0.00084546404352651 [GeV] -Cell[11,36] 0.012354783396622 [GeV] -Cell[12,42] 1.5529754397562e-05 [GeV] -Cell[12,35] 0.084392404366635 [GeV] -Cell[11,32] 0.00026682737193585 [GeV] -Cell[12,32] 0.0025200502619484 [GeV] -Cell[13,32] 0.0016355148500756 [GeV] -Cell[13,31] 1.9497808243614e-05 [GeV] -Cell[12,31] 0.00025401875580053 [GeV] -Cell[16,5] 0.00080456304224174 [GeV] -Cell[13,33] 0.030198475829976 [GeV] -Cell[14,18] 1.286570023251e-05 [GeV] -Cell[16,4] 0.0002009962988036 [GeV] -Cell[14,1] 3.9546963349608e-05 [GeV] -Cell[12,30] 1.9978568016086e-06 [GeV] -Cell[12,26] 3.7235909568381e-06 [GeV] -Cell[12,23] 0.00090640065839773 [GeV] -Cell[15,4] 1.3370171189308e-05 [GeV] -Cell[15,3] 0.00020760158265875 [GeV] -Cell[11,26] 6.1713324367815e-05 [GeV] -Cell[12,33] 0.33109639565922 [GeV] -Cell[12,8] 0.003044638468216 [GeV] -Cell[14,8] 7.2300646024814e-08 [GeV] -Cell[11,37] 0.0001015422725543 [GeV] -Cell[11,33] 0.0014424204764761 [GeV] -Cell[11,34] 0.0033589091366762 [GeV] -Cell[14,7] 8.1619006891742e-08 [GeV] -Cell[18,47] 1.4205783372745e-08 [GeV] -Cell[9,1] 8.576491381973e-09 [GeV] -Cell[9,2] 0.00051677626196715 [GeV] -Cell[14,17] 2.1263686594352e-05 [GeV] -Cell[13,17] 0.0002090567401923 [GeV] -Cell[19,31] 3.0721249095222e-07 [GeV] -Cell[11,35] 0.001141638727942 [GeV] -Cell[1,23] 0.00012790808038176 [GeV] -Cell[1,22] 1.7349867240114e-05 [GeV] -Cell[2,22] 0.00032182155751286 [GeV] -Cell[2,23] 2.2159053245787e-05 [GeV] -Cell[11,38] 7.8704011571062e-08 [GeV] -Cell[12,5] 0.0010293114970609 [GeV] -Cell[15,19] 3.8041357904149e-05 [GeV] -Cell[15,18] 4.17806448786e-05 [GeV] -Cell[16,17] 1.3067850988591e-05 [GeV] -Cell[17,6] 2.4331432883628e-05 [GeV] -Cell[16,6] 1.9732397049665e-11 [GeV] -Cell[15,45] 3.2400389289251e-05 [GeV] -Cell[15,46] 0.0016166269716739 [GeV] -Cell[15,17] 0.0017087654849495 [GeV] -Cell[15,7] 0.0026745711782689 [GeV] -Cell[6,28] 0.0014543832100162 [GeV] -Cell[13,2] 0.00013086481305038 [GeV] -Cell[13,1] 0.00014353975947233 [GeV] -Cell[13,3] 0.0027318899230469 [GeV] -Cell[13,20] 0.0004750748889228 [GeV] -Cell[13,21] 1.7805625364417e-05 [GeV] -Cell[12,43] 0.00077023537529317 [GeV] -Cell[13,43] 1.3373210094869e-10 [GeV] -Cell[13,14] 0.001258714543486 [GeV] -Cell[16,47] 0.0016445259949277 [GeV] -Cell[12,37] 0.00070200669026087 [GeV] -Cell[13,4] 6.499668903416e-06 [GeV] -Cell[12,14] 6.6954313078895e-06 [GeV] -Cell[13,15] 0.0003212536309336 [GeV] -Cell[13,16] 3.3137527998406e-07 [GeV] -Cell[10,2] 2.9940061449452e-07 [GeV] -Cell[10,1] 2.7893532887902e-08 [GeV] -Cell[10,0] 2.5179722285884e-07 [GeV] -Cell[13,18] 1.4353532433233e-06 [GeV] -Cell[17,23] 1.3413344713626e-05 [GeV] -Cell[16,23] 6.4715619664639e-06 [GeV] -Cell[17,11] 8.3606107509695e-06 [GeV] -Cell[17,10] 0.00031236432056687 [GeV] -Cell[12,2] 0.0028827230312749 [GeV] -Cell[11,2] 0.00078036254224753 [GeV] -Cell[11,3] 8.4274678956717e-06 [GeV] -Cell[11,1] 0.00021688746753114 [GeV] -Cell[11,0] 1.0127039844292e-06 [GeV] -### Total energy deposition in calorimeter by a source track in 84 cells : 0.57194017082715 (GeV) - -Source track ID 8273 (gamma,0.032559394638405[GeV]) at (-498.6285062224,-37.008279917075,-1796.99661355) +Cell[13,37] 1.0017571437629e-05 [GeV] +Cell[12,37] 0.0072837126342122 [GeV] +Cell[12,32] 3.802552954033e-06 [GeV] +Cell[13,36] 0.0050412697105328 [GeV] +Cell[12,36] 0.0061955201319714 [GeV] +Cell[11,37] 4.8810764201335e-07 [GeV] +Cell[12,33] 0.16911787476387 [GeV] +Cell[12,34] 0.13388425825631 [GeV] +Cell[13,34] 0.29932879977332 [GeV] +Cell[12,35] 0.0061916704333845 [GeV] +Cell[13,35] 0.16357005918928 [GeV] +Cell[13,33] 7.0510129262402e-08 [GeV] +Cell[12,38] 0.004270024362643 [GeV] +### Total energy deposition in calorimeter by a source track in 13 cells : 0.79489756799768 (GeV) + +Source track ID 6192 (gamma,0.032559394638405[GeV]) at (-498.62850744261,-37.008263476658,-1796.9970595907) Original primary track ID 8 (unknown,11.672977589613[GeV]) Cell[0,24] 0.032559394638405 [GeV] ### Total energy deposition in calorimeter by a source track in 1 cells : 0.032559394638405 (GeV) -Source track ID 8248 (pi+,0.77705187337341[GeV]) at (-481.17310081933,135.91338068017,-1805.367537294) -Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[4,5] 9.9370663519949e-09 [GeV] -Cell[19,4] 0.0011909065775531 [GeV] -Cell[11,7] 3.846539571532e-05 [GeV] -Cell[10,26] 1.6435430097772e-07 [GeV] -Cell[0,37] 4.9160003254656e-06 [GeV] -Cell[2,44] 4.661968734581e-06 [GeV] -Cell[1,23] 2.1122440330146e-09 [GeV] -Cell[1,22] 0.0078197702782218 [GeV] -Cell[12,5] 1.715745569868e-06 [GeV] -Cell[0,21] 0.24833972626979 [GeV] -Cell[1,20] 8.8775760477802e-05 [GeV] -Cell[1,19] 0.00036397160308388 [GeV] -Cell[0,42] 1.2165948226084e-07 [GeV] -Cell[1,8] 2.6313542889511e-07 [GeV] -Cell[1,7] 1.0018431794379e-08 [GeV] -Cell[0,22] 0.0043455620944511 [GeV] -Cell[0,3] 4.8006095457822e-06 [GeV] -Cell[2,29] 0.0002700607792699 [GeV] -Cell[2,28] 1.3411437788704e-05 [GeV] -Cell[12,6] 0.0027968724435091 [GeV] -Cell[1,21] 0.083127022834743 [GeV] -Cell[3,11] 0.001962111282787 [GeV] -Cell[2,11] 0.0041271154123149 [GeV] -Cell[4,11] 0.0032268969153692 [GeV] -Cell[3,12] 2.0735498537761e-08 [GeV] -Cell[4,12] 3.9275590097532e-08 [GeV] -Cell[2,8] 0.00044967984677112 [GeV] -Cell[2,7] 5.8872173201962e-05 [GeV] -Cell[5,21] 6.8122142363336e-07 [GeV] -Cell[5,20] 7.4343988671899e-09 [GeV] -### Total energy deposition in calorimeter by a source track in 30 cells : 0.35823663531309 (GeV) - -Source track ID 8245 (gamma,1.9015972345341[GeV]) at (-363.22356462107,343.6111786656,-955.17209454284) +Source track ID 6168 (pi+,0.7770848289099[GeV]) at (-481.2719919217,135.56278911163,-1804.8429112311) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[1,9] 0.0055035437422476 [GeV] -Cell[8,45] 0.011427136839328 [GeV] -Cell[3,18] 0.0083809889981573 [GeV] -Cell[4,25] 0.00085916031275562 [GeV] -Cell[3,29] 0.0080118571478262 [GeV] -Cell[5,18] 0.80351873509221 [GeV] -Cell[4,18] 0.99149460880484 [GeV] -Cell[4,17] 0.041219554811436 [GeV] -Cell[6,25] 0.0016293062994765 [GeV] -Cell[5,17] 0.010016521518246 [GeV] -Cell[2,20] 0.0013786881516772 [GeV] -Cell[4,19] 0.0075818741890394 [GeV] -Cell[3,19] 0.00051099891 [GeV] -Cell[3,37] 0.0023003104870445 [GeV] -Cell[5,36] 0.00046679792012377 [GeV] -Cell[8,44] 0.00051099891 [GeV] -Cell[2,35] 0.00084334772407662 [GeV] -Cell[4,28] 0.00099598161350918 [GeV] -Cell[5,16] 0.00018632838312789 [GeV] -Cell[1,35] 0.00051617068138389 [GeV] -### Total energy deposition in calorimeter by a source track in 20 cells : 1.8973529105365 (GeV) - -Source track ID 8135 (e-,0.0021355517741884[GeV]) at (-491.2581701609,93.088185341427,-1862.4527252476) +Cell[3,21] 0.084095580122752 [GeV] +Cell[5,43] 3.9598150704023e-06 [GeV] +Cell[2,46] 0.0026829767512945 [GeV] +Cell[1,23] 0.00029002568590488 [GeV] +Cell[1,47] 1.4881365289057e-06 [GeV] +Cell[0,21] 0.30063639836237 [GeV] +Cell[0,22] 0.0023889157508753 [GeV] +Cell[0,23] 4.3575190394677e-05 [GeV] +Cell[2,27] 1.1290884925984e-05 [GeV] +Cell[5,9] 0.00052234372868099 [GeV] +Cell[5,10] 0.00042959782120454 [GeV] +Cell[1,24] 0.00075183174872018 [GeV] +Cell[1,25] 1.0016184503911e-05 [GeV] +Cell[1,22] 1.1673761651991e-06 [GeV] +Cell[1,20] 0.0028449755949904 [GeV] +Cell[0,20] 0.0023644275095456 [GeV] +Cell[0,7] 0.0016571663301195 [GeV] +Cell[0,6] 0.00018795220473135 [GeV] +Cell[1,46] 1.0011435824708e-07 [GeV] +Cell[2,47] 0.0017490026929819 [GeV] +Cell[1,21] 1.4453903035019e-06 [GeV] +Cell[2,21] 6.3214654801413e-08 [GeV] +Cell[4,20] 0.0011359315795604 [GeV] +Cell[4,19] 0.0069445399254522 [GeV] +Cell[3,20] 0.0017309165031039 [GeV] +Cell[3,19] 0.001428625381035 [GeV] +Cell[0,9] 9.4627376529388e-07 [GeV] +Cell[0,10] 4.5101341302711e-05 [GeV] +Cell[1,26] 1.0483842197573e-05 [GeV] +Cell[2,38] 0.00037370241373412 [GeV] +Cell[1,38] 0.00058551977912362 [GeV] +Cell[1,39] 0.0032258919001785 [GeV] +Cell[5,41] 0.00018071569758467 [GeV] +Cell[5,42] 0.0018665221171073 [GeV] +Cell[6,41] 3.710589002003e-05 [GeV] +Cell[6,43] 3.6435492802411e-08 [GeV] +Cell[0,15] 0.0047572498118113 [GeV] +Cell[8,2] 7.5467680289876e-06 [GeV] +Cell[6,14] 1.107932924242e-05 [GeV] +Cell[6,15] 0.00038196388439098 [GeV] +Cell[6,16] 2.4158750777133e-05 [GeV] +Cell[1,42] 0.00062999839123791 [GeV] +### Total energy deposition in calorimeter by a source track in 42 cells : 0.42405233662623 (GeV) + +Source track ID 6165 (gamma,1.9015972345341[GeV]) at (-363.22356461739,343.61117866949,-955.17209690941) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[0,22] 6.8551297186873e-05 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 6.8551297186873e-05 (GeV) - -Source track ID 8134 (pi-,4.4304919608885[GeV]) at (-407.13087307789,290.24894864036,-1901.6112951819) +Cell[5,35] 0.00044346047450404 [GeV] +Cell[5,40] 0.00038951696114568 [GeV] +Cell[5,31] 0.00056026627214067 [GeV] +Cell[4,39] 0.00047814030828401 [GeV] +Cell[4,31] 0.0023345976217234 [GeV] +Cell[4,17] 0.042817888479659 [GeV] +Cell[5,17] 0.018313606081887 [GeV] +Cell[3,3] 0.0039494471890004 [GeV] +Cell[4,16] 0.0017032989895892 [GeV] +Cell[4,19] 0.0037124621149031 [GeV] +Cell[3,20] 0.00049311195284286 [GeV] +Cell[5,18] 1.151728272035 [GeV] +Cell[4,18] 0.6399212481431 [GeV] +Cell[4,21] 0.0011023690447858 [GeV] +Cell[5,22] 0.0012718878641032 [GeV] +Cell[2,33] 0.00033397208390598 [GeV] +Cell[4,33] 0.00053138953811407 [GeV] +Cell[4,32] 0.00031818405438437 [GeV] +Cell[6,34] 0.00051099891 [GeV] +Cell[5,19] 0.00051335216452647 [GeV] +Cell[4,3] 0.0011425022655919 [GeV] +Cell[4,11] 0.0038854452605716 [GeV] +Cell[4,12] 6.6743803118705e-05 [GeV] +Cell[1,30] 0.0006463673210264 [GeV] +Cell[0,44] 0.00094591422589232 [GeV] +Cell[5,30] 0.00075018836407851 [GeV] +Cell[4,37] 0.00041611183680777 [GeV] +Cell[3,5] 0.00045156584550764 [GeV] +Cell[2,41] 0.00051099891 [GeV] +Cell[4,7] 0.00032191214004395 [GeV] +### Total energy deposition in calorimeter by a source track in 30 cells : 1.8805652202562 (GeV) + +Source track ID 6149 (pi-,4.4333100959977[GeV]) at (-407.57660576464,289.62270358757,-1900.4018122299) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[8,30] 3.2314853569915e-08 [GeV] -Cell[6,29] 0.0003393710040781 [GeV] -Cell[4,5] 1.1195182602364e-05 [GeV] -Cell[9,40] 1.66876782896e-06 [GeV] -Cell[3,27] 5.7679316960275e-06 [GeV] -Cell[4,30] 5.1428239765642e-05 [GeV] -Cell[8,39] 2.6969311079483e-08 [GeV] -Cell[8,33] 9.4178522413131e-06 [GeV] -Cell[6,34] 0.002828785892341 [GeV] -Cell[9,39] 7.6781623376974e-06 [GeV] -Cell[1,27] 2.9823979857611e-05 [GeV] -Cell[1,39] 6.8104966194369e-06 [GeV] -Cell[11,23] 0.0002805859637991 [GeV] -Cell[10,22] 1.8427090253681e-09 [GeV] -Cell[8,31] 8.629065168634e-06 [GeV] -Cell[8,32] 0.00086826837875026 [GeV] -Cell[3,28] 0.0035587221246125 [GeV] -Cell[7,36] 0.00014266173653573 [GeV] -Cell[8,41] 0.00016589556632721 [GeV] -Cell[8,40] 0.0001141205137875 [GeV] -Cell[7,37] 9.1076333319506e-10 [GeV] -Cell[1,23] 1.4992867043475e-05 [GeV] -Cell[2,23] 7.6847974851262e-06 [GeV] -Cell[0,24] 0.01032746766231 [GeV] -Cell[0,21] 0.0042312653492656 [GeV] -Cell[0,22] 0.0013275187199836 [GeV] -Cell[2,8] 0.0022406583998851 [GeV] -Cell[4,28] 0.00075194907859589 [GeV] -Cell[1,35] 0.00049808199898769 [GeV] -Cell[0,19] 1.8675269648239 [GeV] -Cell[0,18] 0.30775082648241 [GeV] -Cell[0,17] 0.0028693606698638 [GeV] -Cell[1,17] 0.00068965260059107 [GeV] -Cell[1,16] 8.2202089970451e-09 [GeV] -Cell[1,15] 6.6676875576377e-11 [GeV] -Cell[4,44] 0.0042745800003782 [GeV] -Cell[6,31] 0.00051099891 [GeV] -Cell[0,20] 0.046017783672402 [GeV] -Cell[7,47] 9.8037335847039e-06 [GeV] -Cell[5,40] 0.0006609696574311 [GeV] -Cell[7,23] 1.0105524037499e-05 [GeV] -Cell[0,40] 0.0039642228672711 [GeV] -Cell[1,34] 0.00013650557119422 [GeV] -Cell[0,12] 0.00053677568816174 [GeV] -Cell[1,29] 4.939659498632e-05 [GeV] -Cell[1,28] 0.0011583408044938 [GeV] -Cell[1,25] 4.4499767944217e-05 [GeV] -Cell[1,26] 0.0022501456781537 [GeV] -Cell[3,39] 0.0004245906155021 [GeV] -Cell[3,40] 0.0035116282270178 [GeV] -Cell[2,39] 5.1997789796587e-08 [GeV] -Cell[2,40] 7.9369851846423e-10 [GeV] -Cell[0,16] 7.7869147721003e-05 [GeV] -Cell[1,18] 0.0006350821624336 [GeV] -Cell[4,6] 0.00023075724564103 [GeV] -Cell[3,6] 0.0010009643271379 [GeV] -Cell[3,5] 0.0022187283304746 [GeV] -Cell[1,31] 0.00031467220645766 [GeV] -Cell[2,0] 0.0037786134895703 [GeV] -Cell[0,28] 2.251986753639e-05 [GeV] -Cell[0,30] 4.9374408938844e-05 [GeV] -Cell[0,29] 2.5081858868247e-05 [GeV] -Cell[2,9] 0.020456582039165 [GeV] -Cell[3,36] 0.00051099891 [GeV] -Cell[0,47] 0.00027987838060135 [GeV] -Cell[0,14] 0.00091719726056054 [GeV] -Cell[1,11] 0.0061894511789114 [GeV] -Cell[4,27] 0.00018787027130713 [GeV] -Cell[1,10] 0.00032920615832134 [GeV] -Cell[4,31] 0.0011052108422947 [GeV] -Cell[0,0] 0.0004314668124656 [GeV] -Cell[4,47] 0.00082928572401763 [GeV] -Cell[0,23] 3.7362594361184e-05 [GeV] -Cell[0,25] 0.0010495703780232 [GeV] -Cell[0,26] 2.6414925427389e-05 [GeV] -Cell[0,38] 5.9329043724574e-06 [GeV] -Cell[0,41] 0.019705823363085 [GeV] -Cell[0,39] 0.00015624378240295 [GeV] -Cell[3,0] 0.00097115985963403 [GeV] -Cell[2,45] 0.0027761343069737 [GeV] -Cell[2,46] 0.047243252896696 [GeV] -### Total energy deposition in calorimeter by a source track in 81 cells : 2.3817904303707 (GeV) - -Source track ID 8085 (pi+,1.21135396953[GeV]) at (-364.55522438671,342.19802508541,-1689.1755133746) +Cell[8,9] 0.00060717341776581 [GeV] +Cell[7,10] 2.8374795121181e-05 [GeV] +Cell[8,10] 0.0022737509454675 [GeV] +Cell[8,11] 0.0016926941116842 [GeV] +Cell[8,12] 1.2086142380099e-05 [GeV] +Cell[8,8] 0.032679964405209 [GeV] +Cell[8,7] 0.0014872161740959 [GeV] +Cell[3,42] 6.00784210244e-05 [GeV] +Cell[7,9] 7.2823123900889e-08 [GeV] +Cell[9,8] 9.0785628708545e-06 [GeV] +Cell[4,24] 3.598706601133e-05 [GeV] +Cell[8,32] 0.0043851947885356 [GeV] +Cell[3,28] 6.5968790181614e-08 [GeV] +Cell[9,10] 0.0019383422338603 [GeV] +Cell[9,31] 8.8694342093959e-05 [GeV] +Cell[3,38] 5.1482810713424e-05 [GeV] +Cell[9,12] 0.00093983371011552 [GeV] +Cell[9,9] 0.00052587718809536 [GeV] +Cell[13,37] 0.00048199993684159 [GeV] +Cell[9,32] 6.5041960895087e-06 [GeV] +Cell[8,13] 0.00094283329532993 [GeV] +Cell[8,21] 1.64206936347e-07 [GeV] +Cell[11,5] 5.0034481100738e-06 [GeV] +Cell[2,46] 0.0086144533743651 [GeV] +Cell[8,20] 0.0007991174543547 [GeV] +Cell[9,16] 0.00017946799800666 [GeV] +Cell[8,31] 0.00040153596504092 [GeV] +Cell[0,42] 0.00074410809017388 [GeV] +Cell[7,36] 0.0022248676435957 [GeV] +Cell[3,8] 7.9887374304235e-06 [GeV] +Cell[2,8] 0.0032729074619475 [GeV] +Cell[2,9] 0.0026086468989242 [GeV] +Cell[6,10] 1.4404336019652e-05 [GeV] +Cell[10,4] 4.42528622807e-06 [GeV] +Cell[9,18] 0.0031438969525754 [GeV] +Cell[11,38] 0.00094887004824373 [GeV] +Cell[7,17] 1.4286983059719e-08 [GeV] +Cell[8,30] 0.0010725133945537 [GeV] +Cell[11,45] 0.00060901805151366 [GeV] +Cell[4,17] 3.5220184072386e-06 [GeV] +Cell[11,46] 1.3528500392567e-05 [GeV] +Cell[0,1] 8.0519966140855e-06 [GeV] +Cell[8,26] 0.0003024424141977 [GeV] +Cell[3,30] 0.00015131857942322 [GeV] +Cell[8,36] 1.2976234033317e-05 [GeV] +Cell[3,6] 3.0123455871944e-08 [GeV] +Cell[1,47] 1.0119592072442e-05 [GeV] +Cell[1,1] 0.00062183540578846 [GeV] +Cell[9,15] 2.2118911147118e-12 [GeV] +Cell[0,21] 0.074518124120186 [GeV] +Cell[0,22] 0.0032398226644704 [GeV] +Cell[0,23] 6.0619061155194e-06 [GeV] +Cell[1,22] 0.002223110314251 [GeV] +Cell[1,20] 0.00028471025748673 [GeV] +Cell[0,20] 0.022996461991073 [GeV] +Cell[0,7] 0.00074153988573869 [GeV] +Cell[0,6] 0.0007052858949221 [GeV] +Cell[2,47] 0.00016152692155447 [GeV] +Cell[1,21] 0.00082075349025142 [GeV] +Cell[3,19] 5.9737940318882e-09 [GeV] +Cell[2,38] 0.0028516542778243 [GeV] +Cell[1,38] 1.2081976154036e-05 [GeV] +Cell[0,15] 0.0016976852429085 [GeV] +Cell[8,2] 0.0018675313656633 [GeV] +Cell[1,42] 0.0008331368396308 [GeV] +Cell[4,33] 0.00017174250188691 [GeV] +Cell[4,3] 0.00061726170839588 [GeV] +Cell[4,7] 0.0049398645191269 [GeV] +Cell[0,19] 1.0921052364833 [GeV] +Cell[4,25] 0.00055246466948165 [GeV] +Cell[4,23] 1.4814886790191e-06 [GeV] +Cell[0,18] 0.26242406949603 [GeV] +Cell[4,47] 1.7376367701218e-05 [GeV] +Cell[4,0] 0.0016236865427893 [GeV] +Cell[4,1] 9.7131803906905e-06 [GeV] +Cell[4,2] 1.3140938535798e-05 [GeV] +Cell[1,19] 0.0072689206432052 [GeV] +Cell[0,34] 0.0017078549129034 [GeV] +Cell[3,45] 0.0014505130839408 [GeV] +Cell[1,9] 0.00063499397269607 [GeV] +Cell[1,10] 0.0040406718179287 [GeV] +Cell[1,11] 0.00012479407622675 [GeV] +Cell[2,7] 1.8099939458125e-05 [GeV] +Cell[0,17] 0.19897982362245 [GeV] +Cell[0,35] 0.00034871157635269 [GeV] +Cell[1,34] 3.3261749122175e-06 [GeV] +Cell[1,33] 0.00047656641502965 [GeV] +Cell[0,33] 0.00017535702507143 [GeV] +Cell[0,31] 0.00069086540466498 [GeV] +Cell[3,33] 0.00034573296652104 [GeV] +Cell[4,46] 0.00026377011734166 [GeV] +Cell[5,47] 3.4444546909072e-06 [GeV] +Cell[4,45] 0.00021953275964756 [GeV] +Cell[1,18] 0.002065535213077 [GeV] +Cell[1,17] 0.0011807566988322 [GeV] +Cell[2,37] 0.0020134157454103 [GeV] +Cell[1,7] 0.00059558640614523 [GeV] +Cell[2,0] 0.00052415463362511 [GeV] +Cell[3,47] 0.00039760048673816 [GeV] +Cell[2,45] 4.8685209321775e-09 [GeV] +Cell[4,6] 0.0019899304443387 [GeV] +Cell[3,0] 0.00050009809264748 [GeV] +Cell[3,46] 0.0090869989419398 [GeV] +Cell[0,16] 0.0090803064011368 [GeV] +Cell[13,38] 3.9997597033562e-05 [GeV] +Cell[10,11] 4.5489753247239e-06 [GeV] +Cell[10,6] 1.2891007674625e-05 [GeV] +Cell[10,45] 0.00070972983320917 [GeV] +Cell[0,8] 3.4091029956471e-06 [GeV] +Cell[2,31] 6.5787976597107e-05 [GeV] +Cell[3,31] 2.1190892730374e-06 [GeV] +Cell[3,29] 7.5349938572344e-07 [GeV] +Cell[0,38] 1.0431717820779e-05 [GeV] +Cell[0,39] 1.2153228014199e-05 [GeV] +Cell[2,19] 2.4320936063305e-08 [GeV] +Cell[3,44] 0.001567543664233 [GeV] +Cell[5,11] 0.00031933581269061 [GeV] +Cell[5,12] 1.3959943316877e-09 [GeV] +Cell[0,41] 0.0020462619648652 [GeV] +Cell[6,12] 0.0012942777104465 [GeV] +Cell[6,13] 6.5230132645297e-05 [GeV] +Cell[1,32] 0.0015761018715518 [GeV] +Cell[0,13] 2.7472816291265e-06 [GeV] +Cell[1,41] 0.0020678692061977 [GeV] +Cell[2,40] 0.0032759871002284 [GeV] +Cell[2,43] 0.0053114945455946 [GeV] +Cell[2,44] 0.00073898844015224 [GeV] +Cell[4,43] 1.2456520635169e-06 [GeV] +Cell[3,43] 2.2782150285821e-06 [GeV] +Cell[1,43] 7.4505805969238e-12 [GeV] +Cell[2,29] 0.0012592715585527 [GeV] +### Total energy deposition in calorimeter by a source track in 131 cells : 1.8140359126582 (GeV) + +Source track ID 6089 (pi+,1.2123104583534[GeV]) at (-446.53528015908,224.95831519028,-1912.4920441338) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[0,3] 0.00090067353367506 [GeV] -Cell[2,8] 3.2419354109379e-05 [GeV] -Cell[2,7] 3.0614137358498e-10 [GeV] -Cell[0,18] 0.30997909804061 [GeV] -Cell[0,17] 0.66424077639532 [GeV] -Cell[1,17] 2.7886754833162e-07 [GeV] -Cell[0,12] 2.2303873411147e-05 [GeV] -Cell[0,16] 0.014015582399235 [GeV] -Cell[1,18] 0.11946991676526 [GeV] -Cell[2,9] 8.1715292698163e-05 [GeV] -Cell[0,14] 0.0010737147234412 [GeV] -Cell[0,10] 1.9446945458185e-05 [GeV] -Cell[0,15] 5.8730287131311e-05 [GeV] -Cell[1,40] 1.9819278386422e-06 [GeV] -Cell[3,8] 1.4598074471905e-08 [GeV] -Cell[3,7] 1.1600064908635e-09 [GeV] -### Total energy deposition in calorimeter by a source track in 16 cells : 1.10989665447 (GeV) - -Source track ID 8098 (e-,0.00061995620762568[GeV]) at (-364.3952477014,342.36837390833,-1715.7763887504) +Cell[6,42] 0.00056513392698164 [GeV] +Cell[5,8] 0.0066173250656319 [GeV] +Cell[2,32] 1.057994668372e-07 [GeV] +Cell[7,43] 0.00051099891 [GeV] +Cell[7,9] 2.1491578081623e-08 [GeV] +Cell[7,8] 3.3138494472951e-08 [GeV] +Cell[5,34] 5.4279971518554e-06 [GeV] +Cell[0,14] 2.2416749154218e-05 [GeV] +Cell[6,45] 7.4937008903362e-06 [GeV] +Cell[3,27] 3.0629977438366e-05 [GeV] +Cell[6,9] 3.6740630922736e-05 [GeV] +Cell[5,43] 9.2389976460368e-05 [GeV] +Cell[1,45] 1.9251237564504e-05 [GeV] +Cell[0,30] 0.0014085174997403 [GeV] +Cell[0,42] 0.00059650148854552 [GeV] +Cell[6,10] 2.1015844540671e-06 [GeV] +Cell[6,8] 0.0015902720693363 [GeV] +Cell[3,6] 1.3643920906361e-05 [GeV] +Cell[11,34] 0.0019556050476522 [GeV] +Cell[0,21] 0.0063865291465907 [GeV] +Cell[0,22] 1.9393255293835e-05 [GeV] +Cell[2,27] 1.5913288123102e-06 [GeV] +Cell[0,20] 0.48070890138624 [GeV] +Cell[1,46] 3.7503538192141e-07 [GeV] +Cell[0,10] 0.0016554141556666 [GeV] +Cell[1,39] 0.00070606995428227 [GeV] +Cell[5,42] 0.0029155076605637 [GeV] +Cell[1,42] 0.0012455282089107 [GeV] +Cell[2,33] 1.9002353656106e-06 [GeV] +Cell[4,12] 0.0020941763635825 [GeV] +Cell[0,19] 0.013346245824115 [GeV] +Cell[0,18] 3.9195077260956e-07 [GeV] +Cell[1,19] 2.3348394082859e-05 [GeV] +Cell[3,45] 0.0027135674841074 [GeV] +Cell[1,10] 0.0045728544502909 [GeV] +Cell[1,11] 0.0010370383763506 [GeV] +Cell[0,17] 2.0927420492285e-05 [GeV] +Cell[1,34] 0.0019312856790585 [GeV] +Cell[1,33] 4.5095155597664e-05 [GeV] +Cell[3,33] 3.3454096701462e-06 [GeV] +Cell[4,46] 1.0940820066025e-06 [GeV] +Cell[0,16] 4.2633759439923e-05 [GeV] +Cell[0,39] 0.00074171137440362 [GeV] +Cell[3,44] 0.001988856416527 [GeV] +Cell[0,41] 0.0043861528994506 [GeV] +Cell[1,32] 0.0036677612637873 [GeV] +Cell[0,13] 0.0016151391410306 [GeV] +Cell[1,41] 0.0030381197284644 [GeV] +Cell[4,43] 0.0011368648351728 [GeV] +Cell[3,43] 0.0030834979183015 [GeV] +Cell[2,29] 2.0113732898608e-07 [GeV] +Cell[3,12] 1.7215238942299e-05 [GeV] +Cell[3,13] 4.4578730041394e-05 [GeV] +Cell[4,13] 8.8208194356412e-06 [GeV] +Cell[7,21] 8.8090297649615e-06 [GeV] +Cell[9,3] 9.3502875242848e-06 [GeV] +Cell[1,31] 3.7537582251161e-06 [GeV] +Cell[0,25] 0.00033204932332212 [GeV] +Cell[8,47] 0.0011411950000995 [GeV] +Cell[5,7] 4.2628609201188e-05 [GeV] +Cell[0,40] 0.00029209335919 [GeV] +Cell[1,40] 0.00021890555081 [GeV] +Cell[2,26] 9.458444378879e-06 [GeV] +Cell[5,45] 0.002447093573846 [GeV] +Cell[5,46] 0.0014724956659961 [GeV] +Cell[6,46] 0.0003418646180163 [GeV] +Cell[1,3] 0.0044082410434494 [GeV] +Cell[0,12] 6.025722011691e-05 [GeV] +Cell[3,41] 0.0070561719117209 [GeV] +Cell[5,3] 0.00033390578722265 [GeV] +Cell[5,2] 9.8039661031635e-06 [GeV] +Cell[4,44] 1.0373572906246e-05 [GeV] +Cell[6,5] 1.0400826772411e-05 [GeV] +Cell[6,6] 0.00023519788565159 [GeV] +Cell[6,7] 3.7589128764921e-06 [GeV] +Cell[0,29] 0.00087716205737579 [GeV] +Cell[0,45] 0.00044762755760962 [GeV] +Cell[3,32] 2.0950802863808e-05 [GeV] +Cell[3,7] 2.3105260693228e-06 [GeV] +Cell[2,5] 1.6227131709456e-09 [GeV] +Cell[2,34] 0.0001368982403219 [GeV] +Cell[2,35] 0.00089133125077751 [GeV] +### Total energy deposition in calorimeter by a source track in 82 cells : 0.57350083483685 (GeV) + +Source track ID 6090 (anti_proton,5.3585531038685[GeV]) at (-478.99823891671,143.38998261626,-1704.0853375376) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[1,18] 0.00010895729762568 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00010895729762568 (GeV) +Cell[0,21] 0.18872081922929 [GeV] +Cell[1,21] 0.12788261757873 [GeV] +### Total energy deposition in calorimeter by a source track in 2 cells : 0.31660343680802 (GeV) -Source track ID 8086 (anti_proton,5.3583237244546[GeV]) at (-476.01337150062,153.00741861954,-1708.2938338695) +Source track ID 6085 (gamma,0.3844820986824[GeV]) at (-416.39522690519,276.79417445202,-1116.7049663801) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[8,10] 6.7151244406887e-06 [GeV] -Cell[10,12] 1.6273718210869e-07 [GeV] -Cell[6,40] 0.00020417093799472 [GeV] -Cell[5,31] 0.00019111163047307 [GeV] -Cell[6,41] 0.0043888016332764 [GeV] -Cell[6,1] 6.3263064615626e-05 [GeV] -Cell[1,9] 0.0052725731461996 [GeV] -Cell[4,5] 8.0631567220735e-07 [GeV] -Cell[2,27] 0.0012398386989495 [GeV] -Cell[7,41] 4.203016928841e-06 [GeV] -Cell[6,2] 0.0044410009088295 [GeV] -Cell[4,35] 1.8756116332952e-08 [GeV] -Cell[2,26] 0.0056488767557539 [GeV] -Cell[5,45] 6.4881393045653e-06 [GeV] -Cell[3,27] 1.8964751325257e-05 [GeV] -Cell[6,37] 2.8482435562182e-05 [GeV] -Cell[3,38] 0.0022502472886168 [GeV] -Cell[5,30] 0.00015699908636998 [GeV] -Cell[7,4] 0.00046074948407862 [GeV] -Cell[5,38] 1.5735421484578e-05 [GeV] -Cell[7,1] 1.4549790648744e-08 [GeV] -Cell[9,30] 2.0194560056552e-07 [GeV] -Cell[4,36] 2.0970695782921e-05 [GeV] -Cell[2,37] 0.0013310588542594 [GeV] -Cell[1,27] 0.022782386272595 [GeV] -Cell[3,17] 0.00028643304117588 [GeV] -Cell[3,18] 0.00028395535869765 [GeV] -Cell[2,17] 0.0041573400726031 [GeV] -Cell[3,14] 0.0011375299057839 [GeV] -Cell[1,39] 0.00011339051562641 [GeV] -Cell[6,4] 0.0024636931910962 [GeV] -Cell[7,3] 0.0015319876649478 [GeV] -Cell[6,0] 0.0022882006464295 [GeV] -Cell[11,25] 2.4022883735597e-09 [GeV] -Cell[11,26] 1.2485172859556e-05 [GeV] -Cell[11,27] 0.00068434392190659 [GeV] -Cell[9,31] 1.2739730300382e-07 [GeV] -Cell[3,28] 0.001170179097895 [GeV] -Cell[3,31] 6.5005661686882e-05 [GeV] -Cell[0,36] 0.0025236858277667 [GeV] -Cell[0,37] 2.3330248933348e-05 [GeV] -Cell[2,44] 0.00059608271627462 [GeV] -Cell[6,38] 1.8578382164151e-05 [GeV] -Cell[6,47] 0.0053570873857157 [GeV] -Cell[1,23] 0.010943112933297 [GeV] -Cell[1,22] 0.678105326948 [GeV] -Cell[2,22] 1.2266073608771e-05 [GeV] -Cell[2,23] 9.5376721583307e-06 [GeV] -Cell[0,24] 0.0021075151854351 [GeV] -Cell[0,21] 0.62366820189624 [GeV] -Cell[1,20] 0.036522894348822 [GeV] -Cell[1,19] 0.01157117756313 [GeV] -Cell[0,42] 0.00061833894331675 [GeV] -Cell[1,8] 0.00050985436505482 [GeV] -Cell[0,22] 0.021041588041084 [GeV] -Cell[2,29] 3.3972194603052e-05 [GeV] -Cell[2,28] 0.0012999206571509 [GeV] -Cell[1,21] 1.5502784928168 [GeV] -Cell[3,11] 0.00011667938066716 [GeV] -Cell[2,11] 0.0013819310630601 [GeV] -Cell[3,12] 0.00028599949305264 [GeV] -Cell[2,8] 4.9509557548163e-05 [GeV] -Cell[5,21] 1.3286293600686e-05 [GeV] -Cell[5,20] 5.2871330408379e-06 [GeV] -Cell[4,17] 2.1275513718138e-05 [GeV] -Cell[5,17] 0.0021138823997825 [GeV] -Cell[2,20] 0.008655313614155 [GeV] -Cell[3,19] 0.00034840510656591 [GeV] -Cell[2,35] 6.1207424441818e-06 [GeV] -Cell[5,16] 0.00060744566275957 [GeV] -Cell[1,35] 0.00049043247395753 [GeV] -Cell[0,19] 0.0083591305426353 [GeV] -Cell[0,18] 0.0036292596566951 [GeV] -Cell[0,17] 0.0024180789297349 [GeV] -Cell[1,17] 0.0076245079320993 [GeV] -Cell[1,16] 0.0020790781868993 [GeV] -Cell[1,15] 0.00013334130962073 [GeV] -Cell[4,44] 0.000144616254472 [GeV] -Cell[0,20] 0.10988607951882 [GeV] -Cell[0,40] 9.8953023552895e-13 [GeV] -Cell[1,29] 0.015874385026058 [GeV] -Cell[1,28] 0.0038564295005639 [GeV] -Cell[1,25] 0.0025512607025412 [GeV] -Cell[1,26] 0.030279024101463 [GeV] -Cell[3,40] 0.00048564463083392 [GeV] -Cell[2,39] 1.2312035945797e-05 [GeV] -Cell[2,40] 0.00060107007308362 [GeV] -Cell[0,16] 0.0014541263364634 [GeV] -Cell[1,18] 0.0072570057896799 [GeV] -Cell[4,6] 3.5760545870289e-08 [GeV] -Cell[3,5] 4.5006095785993e-07 [GeV] -Cell[1,31] 0.0040273243405629 [GeV] -Cell[2,0] 0.00015570444733589 [GeV] -Cell[0,28] 0.00034777645668237 [GeV] -Cell[0,30] 3.7564896047115e-09 [GeV] -Cell[0,29] 0.00024214400013182 [GeV] -Cell[0,47] 0.00071655244005183 [GeV] -Cell[1,11] 5.9075746685266e-07 [GeV] -Cell[1,10] 2.9842358781025e-05 [GeV] -Cell[4,31] 0.0012881065891898 [GeV] -Cell[0,0] 9.4901041735511e-06 [GeV] -Cell[0,23] 0.0051464043221829 [GeV] -Cell[0,25] 1.4033769839443e-06 [GeV] -Cell[0,26] 4.1384374994095e-05 [GeV] -Cell[0,38] 1.6537455458661e-05 [GeV] -Cell[0,41] 5.4913102110277e-07 [GeV] -Cell[0,39] 6.4721822855063e-07 [GeV] -Cell[3,0] 0.0012615099982831 [GeV] -Cell[2,45] 0.0033265810601803 [GeV] -Cell[2,46] 0.0028662962764042 [GeV] -Cell[0,10] 9.4475315904674e-08 [GeV] -Cell[0,15] 0.0007791248223549 [GeV] -Cell[1,40] 0.0024927041819549 [GeV] -Cell[1,37] 0.0022063231463326 [GeV] -Cell[2,33] 0.002704797425132 [GeV] -Cell[1,38] 3.7275990011267e-05 [GeV] -Cell[2,21] 0.0013271977687366 [GeV] -Cell[3,15] 0.0025137517853978 [GeV] -Cell[4,14] 0.00017990891844386 [GeV] -Cell[4,15] 0.0025615582070278 [GeV] -Cell[2,10] 0.00011948675036058 [GeV] -Cell[2,12] 0.0017035068488913 [GeV] -Cell[0,27] 0.0029694058167185 [GeV] -Cell[7,32] 1.7167690484712e-06 [GeV] -Cell[5,5] 4.7800884931348e-07 [GeV] -Cell[3,16] 0.0022620345314617 [GeV] -Cell[2,19] 0.0047366618746763 [GeV] -Cell[2,43] 4.1788926640947e-05 [GeV] -Cell[1,36] 5.540164941624e-05 [GeV] -Cell[0,46] 2.8561665094458e-06 [GeV] -Cell[3,34] 0.0017655183067172 [GeV] -Cell[3,35] 0.0015450613357905 [GeV] -Cell[1,44] 6.4221370456607e-05 [GeV] -Cell[1,45] 0.00057154007347117 [GeV] -Cell[7,44] 6.6450597078074e-06 [GeV] -Cell[3,20] 4.9332106755173e-10 [GeV] -Cell[3,13] 0.00065766478843182 [GeV] -Cell[1,6] 3.7367698660887e-05 [GeV] -Cell[1,5] 6.926073692739e-07 [GeV] -Cell[3,24] 1.1632399255177e-05 [GeV] -Cell[0,9] 9.6971811175877e-05 [GeV] -Cell[0,45] 2.3397818236845e-05 [GeV] -Cell[1,24] 0.0016932755707101 [GeV] -Cell[3,45] 0.00050374594328321 [GeV] -Cell[3,44] 0.001082579617789 [GeV] -Cell[3,46] 0.00089730184021823 [GeV] -Cell[4,37] 7.2135298978537e-09 [GeV] -Cell[2,25] 0.0057829343949743 [GeV] -Cell[2,24] 4.042355331228e-05 [GeV] -Cell[4,16] 3.0449308280367e-05 [GeV] -Cell[3,41] 0.0014763435944001 [GeV] -Cell[4,45] 3.8924140739255e-05 [GeV] -Cell[4,43] 0.00060386861784025 [GeV] -Cell[2,18] 0.013722481929585 [GeV] -Cell[2,30] 0.0005069822968145 [GeV] -Cell[2,36] 7.6886758615728e-06 [GeV] -Cell[2,4] 0.00035824503179822 [GeV] -Cell[2,3] 0.00012502646506641 [GeV] -Cell[3,3] 0.00055988390842469 [GeV] -Cell[2,32] 0.0006043526268154 [GeV] -Cell[6,16] 1.1012034756277e-06 [GeV] -Cell[1,41] 4.9732840270735e-05 [GeV] -Cell[4,29] 2.0108302123845e-08 [GeV] -Cell[3,42] 0.00089532892704767 [GeV] -Cell[3,43] 0.00069734384346225 [GeV] -Cell[2,31] 0.0015728599816867 [GeV] -Cell[1,42] 3.2312949461016e-05 [GeV] -Cell[5,11] 7.1697073581163e-06 [GeV] -Cell[5,15] 1.0660201340215e-05 [GeV] -Cell[5,14] 0.0006545863606035 [GeV] -Cell[5,13] 2.2155583087624e-07 [GeV] -Cell[0,6] 0.00045410293580872 [GeV] -Cell[0,4] 0.00092746856609062 [GeV] -Cell[0,43] 3.0482740839943e-08 [GeV] -Cell[1,33] 6.9211881769888e-05 [GeV] -Cell[1,32] 9.7541770082898e-07 [GeV] -Cell[3,1] 1.1138006811962e-08 [GeV] -Cell[0,31] 0.00025051474267229 [GeV] -Cell[5,37] 0.00062588155428 [GeV] -Cell[6,3] 9.4642259384273e-05 [GeV] -Cell[1,30] 1.742952419545e-05 [GeV] -Cell[0,32] 3.1074685597559e-05 [GeV] -Cell[0,1] 2.3089153946785e-05 [GeV] -Cell[3,32] 6.4889083674643e-05 [GeV] -Cell[3,33] 2.028902818256e-05 [GeV] -Cell[14,47] 2.7796017073342e-05 [GeV] -Cell[15,47] 2.2233443334699e-05 [GeV] -Cell[15,0] 0.00071158340678795 [GeV] -Cell[15,1] 5.3493231534958e-06 [GeV] -Cell[2,47] 0.00084258397720987 [GeV] -Cell[4,20] 7.6527018109118e-09 [GeV] -Cell[13,7] 1.3535178732127e-07 [GeV] -Cell[10,31] 3.4339600824751e-07 [GeV] -Cell[2,16] 0.0068431508088009 [GeV] -Cell[0,13] 0.00045975587351279 [GeV] -Cell[3,10] 0.032173895563332 [GeV] -Cell[4,2] 0.00054163283121162 [GeV] -Cell[3,9] 0.0071503092553433 [GeV] -Cell[1,47] 0.00036284864636118 [GeV] -Cell[1,3] 0.0019270577945805 [GeV] -### Total energy deposition in calorimeter by a source track in 200 cells : 3.3552706671795 (GeV) - -Source track ID 8081 (gamma,0.3844820986824[GeV]) at (-409.46415525845,286.9479143651,-1161.9265368621) +Cell[4,20] 0.0114943859669 [GeV] +Cell[4,19] 0.34429487297695 [GeV] +Cell[3,19] 0.015845011050144 [GeV] +Cell[4,46] 0.0011058167856993 [GeV] +Cell[0,8] 0.0019676950102193 [GeV] +Cell[1,43] 0.00051099891 [GeV] +Cell[2,29] 0.00026786334250307 [GeV] +Cell[5,44] 0.0085919210986184 [GeV] +Cell[5,0] 0.00040353354136006 [GeV] +### Total energy deposition in calorimeter by a source track in 9 cells : 0.3844820986824 (GeV) + +Source track ID 5947 (proton,2.1151203278702[GeV]) at (-35.354196526517,498.74851457219,-1587.6005213939) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[4,34] 0.00091461807262414 [GeV] -Cell[3,38] 0.00062307881246546 [GeV] -Cell[3,18] 0.0091823343015388 [GeV] -Cell[13,32] 0.0013858741253371 [GeV] -Cell[4,19] 0.19409423622718 [GeV] -Cell[3,19] 0.16237959428712 [GeV] -Cell[2,39] 0.00013228318073488 [GeV] -Cell[1,40] 0.0013253084742992 [GeV] -Cell[3,7] 0.002944215469421 [GeV] -Cell[2,33] 0.0030046294032743 [GeV] -Cell[0,27] 0.0011921949463331 [GeV] -Cell[3,20] 0.00051099891 [GeV] -Cell[3,3] 0.00046995311599286 [GeV] -Cell[4,21] 0.00059295860390885 [GeV] -Cell[6,44] 0.0004635771229186 [GeV] -Cell[6,35] 0.00085783187946706 [GeV] -Cell[4,38] 0.00073803671056985 [GeV] -### Total energy deposition in calorimeter by a source track in 17 cells : 0.38081172364318 (GeV) - -Source track ID 7925 (proton,2.1151403074849[GeV]) at (-45.20319428569,497.95247888365,-1600.0033511472) +Cell[7,11] 4.0188219281845e-06 [GeV] +Cell[7,10] 7.5414828606881e-06 [GeV] +Cell[0,14] 0.0079450312215247 [GeV] +Cell[0,42] 1.5871117735514e-05 [GeV] +Cell[2,8] 1.3912356234869e-07 [GeV] +Cell[2,9] 2.9646872542799e-05 [GeV] +Cell[15,30] 0.00059092287730812 [GeV] +Cell[3,30] 0.00070362052944229 [GeV] +Cell[1,20] 3.7189775143702e-05 [GeV] +Cell[0,7] 0.0039669656442692 [GeV] +Cell[0,6] 6.3459323306233e-05 [GeV] +Cell[0,9] 0.072672809199819 [GeV] +Cell[0,10] 0.0080527064378922 [GeV] +Cell[1,39] 3.098289960235e-08 [GeV] +Cell[0,15] 6.3627085182816e-09 [GeV] +Cell[1,42] 0.00057747957985885 [GeV] +Cell[1,19] 2.3659245925955e-07 [GeV] +Cell[1,9] 0.0036365049297169 [GeV] +Cell[1,10] 0.02597367303771 [GeV] +Cell[1,11] 0.0091072576958082 [GeV] +Cell[2,7] 1.431923351447e-09 [GeV] +Cell[0,33] 5.0088254123693e-05 [GeV] +Cell[1,7] 9.7150093392884e-07 [GeV] +Cell[4,6] 2.7903934384085e-05 [GeV] +Cell[0,8] 0.01060810022284 [GeV] +Cell[0,41] 0.002969960676144 [GeV] +Cell[0,13] 0.0042612298153744 [GeV] +Cell[0,40] 4.2258781351848e-05 [GeV] +Cell[1,40] 1.4804637010002e-07 [GeV] +Cell[0,12] 0.011571776613034 [GeV] +Cell[0,29] 0.00085894620272423 [GeV] +Cell[2,12] 0.019862042923266 [GeV] +Cell[1,12] 0.40874241865315 [GeV] +Cell[0,11] 0.0048257735425138 [GeV] +Cell[1,13] 0.0095619216737158 [GeV] +Cell[1,14] 0.0012059647672591 [GeV] +Cell[1,15] 0.0073691214544223 [GeV] +Cell[0,43] 2.1885944006499e-06 [GeV] +Cell[1,6] 1.8880572937974e-05 [GeV] +Cell[1,8] 6.9892053822059e-05 [GeV] +Cell[4,9] 2.6704242716278e-06 [GeV] +Cell[3,23] 7.3354947962798e-06 [GeV] +Cell[6,33] 7.7941437484697e-06 [GeV] +Cell[15,29] 6.438606580673e-06 [GeV] +Cell[14,9] 1.4445948181674e-07 [GeV] +Cell[14,8] 7.627813594695e-06 [GeV] +Cell[0,26] 8.4685224208442e-05 [GeV] +Cell[4,5] 0.00092811509189698 [GeV] +Cell[5,5] 1.3540451391236e-09 [GeV] +### Total energy deposition in calorimeter by a source track in 49 cells : 0.61647951393581 (GeV) + +Source track ID 5369 (pi+,0.78151329086169[GeV]) at (-497.5546324163,49.390158544771,-1145.4505495802) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[0,12] 0.1957590971882 [GeV] -Cell[1,12] 0.20653591439122 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.40229501157942 (GeV) - -Source track ID 7349 (pi+,0.78156924447491[GeV]) at (-497.71080853404,47.790700647652,-1143.0987257541) +Cell[3,42] 3.5220464669578e-05 [GeV] +Cell[3,21] 0.0011920712741733 [GeV] +Cell[3,2] 2.9559766194552e-05 [GeV] +Cell[3,30] 0.00075273370503919 [GeV] +Cell[4,21] 2.6502717253152e-07 [GeV] +Cell[3,5] 0.0064363618034306 [GeV] +Cell[4,23] 0.08198192699602 [GeV] +Cell[4,0] 0.0051101374039127 [GeV] +Cell[4,1] 0.0028718931703855 [GeV] +Cell[4,2] 1.5986429643817e-06 [GeV] +Cell[2,7] 3.7451341631822e-06 [GeV] +Cell[1,34] 1.8857447372284e-05 [GeV] +Cell[3,33] 0.00028244944786388 [GeV] +Cell[3,47] 1.5075213974342e-05 [GeV] +Cell[3,0] 4.1274929403471e-05 [GeV] +Cell[3,31] 6.3352882418258e-05 [GeV] +Cell[3,29] 0.0012998542520092 [GeV] +Cell[4,43] 3.4538834006526e-07 [GeV] +Cell[3,43] 1.4003125609179e-06 [GeV] +Cell[2,29] 0.00020515236591621 [GeV] +Cell[3,32] 5.8103360672249e-05 [GeV] +Cell[3,23] 0.12648163128653 [GeV] +Cell[3,22] 0.31481017476212 [GeV] +Cell[2,28] 0.00029430775381627 [GeV] +Cell[3,1] 0.0001723166474892 [GeV] +Cell[1,28] 0.0013490033621105 [GeV] +Cell[1,35] 1.1127313075121e-05 [GeV] +Cell[4,22] 0.0091092361516212 [GeV] +Cell[3,4] 0.0025890736259735 [GeV] +Cell[2,4] 1.2966959755772e-05 [GeV] +Cell[2,3] 1.3341249086807e-08 [GeV] +Cell[2,6] 0.000242248083714 [GeV] +Cell[3,10] 1.3782118912786e-09 [GeV] +Cell[2,10] 8.8749662972987e-07 [GeV] +Cell[2,16] 5.7872501201928e-07 [GeV] +Cell[3,24] 0.00030608050484604 [GeV] +### Total energy deposition in calorimeter by a source track in 36 cells : 0.55578102638081 (GeV) + +Source track ID 5372 (pi+,0.50621750863745[GeV]) at (473.00552667994,162.06718276761,-1195.3663394384) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[3,23] 0.01748003308952 [GeV] -Cell[3,18] 0.0083611133052705 [GeV] -Cell[2,17] 7.6982216269244e-06 [GeV] -Cell[7,36] 4.7710417663893e-07 [GeV] -Cell[7,37] 0.0023170607648995 [GeV] -Cell[7,38] 7.6241439939622e-05 [GeV] -Cell[1,23] 9.4484889814339e-09 [GeV] -Cell[1,22] 0.15545737505994 [GeV] -Cell[2,22] 0.25684305476014 [GeV] -Cell[2,23] 4.7843218908383e-08 [GeV] -Cell[1,20] 0.0008402796253057 [GeV] -Cell[1,19] 0.00064358725957732 [GeV] -Cell[1,21] 9.8431973242441e-08 [GeV] -Cell[1,31] 0.0001697189704023 [GeV] -Cell[0,30] 5.4369845613564e-06 [GeV] -Cell[4,47] 1.0212525576662e-05 [GeV] -Cell[2,21] 0.004070636572822 [GeV] -Cell[3,16] 0.002020854899013 [GeV] -Cell[2,19] 0.00047759393683607 [GeV] -Cell[2,18] 0.0078677273917907 [GeV] -Cell[1,33] 3.3642562368186e-05 [GeV] -Cell[1,32] 0.0011173283855464 [GeV] -Cell[0,31] 0.0014607630454713 [GeV] -Cell[1,30] 0.00050458654288298 [GeV] -Cell[2,16] 0.00054389885539501 [GeV] -Cell[4,23] 0.073349214056607 [GeV] -Cell[3,22] 0.14943897257194 [GeV] -Cell[1,0] 1.821105873546e-06 [GeV] -Cell[1,1] 3.3760443329811e-12 [GeV] -Cell[4,0] 0.00028506299866262 [GeV] -Cell[4,1] 0.0008329366513517 [GeV] -Cell[6,36] 5.9898913605139e-08 [GeV] -### Total energy deposition in calorimeter by a source track in 32 cells : 0.68421754431348 (GeV) - -Source track ID 7352 (pi+,0.50623628313214[GeV]) at (491.83741081039,89.977560132124,-1099.8616697674) +Cell[3,2] 0.097599404699584 [GeV] +Cell[2,47] 0.059799454156355 [GeV] +Cell[4,2] 0.0056953710528757 [GeV] +Cell[2,0] 0.097509570318697 [GeV] +Cell[3,0] 0.021171467723185 [GeV] +Cell[3,1] 0.11431986419195 [GeV] +### Total energy deposition in calorimeter by a source track in 6 cells : 0.39609513214265 (GeV) + +Source track ID 5155 (anti_proton,1.69104660732[GeV]) at (-493.85938815855,78.121090159186,-1172.9795079042) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[3,23] 0.0071462895227999 [GeV] -Cell[3,25] 6.213635644815e-05 [GeV] -Cell[5,7] 0.0031881958678302 [GeV] -Cell[5,8] 1.7506544923435e-05 [GeV] -Cell[5,0] 0.00046917759581066 [GeV] -Cell[4,6] 0.0022953956299482 [GeV] -Cell[2,9] 0.00124684321864 [GeV] -Cell[4,47] 5.268065024211e-10 [GeV] -Cell[3,0] 3.6401219176696e-09 [GeV] -Cell[1,38] 0.00053083788050185 [GeV] -Cell[3,24] 0.0028446852371569 [GeV] -Cell[2,25] 4.7530617302982e-05 [GeV] -Cell[2,24] 5.7880391570507e-05 [GeV] -Cell[5,11] 0.001789480838958 [GeV] -Cell[5,13] 1.6273162805192e-07 [GeV] -Cell[3,1] 0.0018577630120273 [GeV] -Cell[4,2] 0.00073213510037484 [GeV] -Cell[4,0] 0.3080665745903 [GeV] -Cell[4,1] 0.076518488424879 [GeV] -Cell[5,10] 0.00069246411724077 [GeV] -Cell[5,9] 5.1639458600334e-05 [GeV] -Cell[5,12] 0.0025945747067279 [GeV] -Cell[3,47] 0.00024810175331299 [GeV] -Cell[4,7] 0.0018940347800919 [GeV] -Cell[5,6] 0.0002684112944014 [GeV] -### Total energy deposition in calorimeter by a source track in 25 cells : 0.41262031383841 (GeV) - -Source track ID 7339 (e-,0.00066256083080634[GeV]) at (-489.68454645545,101.03981869895,-1045.7538706908) +Cell[3,42] 5.8074837852473e-08 [GeV] +Cell[3,21] 4.2568086703909e-05 [GeV] +Cell[2,8] 9.1514996847764e-07 [GeV] +Cell[2,9] 0.00068344253254634 [GeV] +Cell[3,37] 8.4348475463685e-06 [GeV] +Cell[2,23] 1.2271624498675 [GeV] +Cell[1,23] 0.10794808639831 [GeV] +Cell[3,6] 1.6941045760177e-07 [GeV] +Cell[0,22] 0.0020185995476494 [GeV] +Cell[1,24] 0.0013118161350073 [GeV] +Cell[1,25] 5.323980892399e-06 [GeV] +Cell[1,22] 0.022230847880124 [GeV] +Cell[1,20] 0.00015318033029712 [GeV] +Cell[1,21] 0.0049155440118469 [GeV] +Cell[2,21] 0.018927208443581 [GeV] +Cell[1,26] 1.8538455617545e-07 [GeV] +Cell[2,38] 3.7586696123526e-07 [GeV] +Cell[1,9] 2.0624412513826e-08 [GeV] +Cell[2,37] 1.4433222947787e-05 [GeV] +Cell[2,19] 4.4254604526941e-06 [GeV] +Cell[2,26] 3.8549824686811e-05 [GeV] +Cell[3,41] 1.5548482269878e-07 [GeV] +Cell[3,23] 0.082471244833847 [GeV] +Cell[3,22] 0.15510457009785 [GeV] +Cell[4,22] 0.041443473517098 [GeV] +Cell[2,16] 6.291611935012e-07 [GeV] +Cell[3,24] 0.0013877085728294 [GeV] +Cell[2,24] 0.012607320019063 [GeV] +Cell[2,25] 0.0047453883047486 [GeV] +Cell[2,22] 0.58860532091985 [GeV] +Cell[2,20] 0.00061948442611356 [GeV] +Cell[2,18] 2.4742747484652e-07 [GeV] +Cell[3,18] 4.6730565372854e-09 [GeV] +Cell[2,17] 2.8926379866334e-07 [GeV] +Cell[4,42] 2.789582231344e-08 [GeV] +Cell[2,15] 0.0011066377673932 [GeV] +### Total energy deposition in calorimeter by a source track in 36 cells : 2.2735591374462 (GeV) + +Source track ID 5156 (neutron,1.4783692592721[GeV]) at (458.5309876774,199.3723484829,-606.56000985403) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[4,22] 0.00015156192080634 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00015156192080634 (GeV) - -Source track ID 6664 (anti_proton,1.6908439605294[GeV]) at (-493.86427268302,78.090205322238,-1171.3404327027) +Cell[7,3] 0.0039044986805799 [GeV] +Cell[0,28] 3.4375145332888e-06 [GeV] +Cell[5,21] 8.3931801589642e-05 [GeV] +Cell[5,20] 0.0022570928000332 [GeV] +Cell[6,22] 3.6870279232971e-05 [GeV] +Cell[3,3] 2.0453265182823e-05 [GeV] +Cell[3,2] 6.0331266336334e-05 [GeV] +Cell[6,4] 0.0014057800538815 [GeV] +Cell[0,37] 0.0074704022978856 [GeV] +Cell[7,2] 0.00031044284332727 [GeV] +Cell[7,1] 2.0383867493365e-05 [GeV] +Cell[1,20] 0.0003045720490245 [GeV] +Cell[1,39] 8.2065091701224e-06 [GeV] +Cell[5,22] 1.0883150302107e-05 [GeV] +Cell[6,34] 0.0075572179608159 [GeV] +Cell[5,19] 1.2619478668057e-05 [GeV] +Cell[4,3] 4.9964848244599e-08 [GeV] +Cell[0,19] 0.00040122901963264 [GeV] +Cell[0,18] 0.0015058447764464 [GeV] +Cell[1,19] 0.0025391029197478 [GeV] +Cell[1,18] 0.00084690250352156 [GeV] +Cell[0,38] 0.010531160368212 [GeV] +Cell[0,39] 1.1895230126129e-06 [GeV] +Cell[0,40] 6.1827961417293e-10 [GeV] +Cell[5,3] 0.0022442837955515 [GeV] +Cell[5,2] 0.13139349338961 [GeV] +Cell[6,5] 1.0894249875832e-05 [GeV] +Cell[0,29] 2.0015345362481e-06 [GeV] +Cell[6,33] 7.0355948587348e-06 [GeV] +Cell[6,3] 0.073455277460223 [GeV] +Cell[6,2] 0.047064328618436 [GeV] +Cell[6,1] 0.0032938624494415 [GeV] +Cell[5,1] 0.013893983352989 [GeV] +Cell[5,4] 0.0046841224912879 [GeV] +Cell[6,35] 4.0707224223297e-05 [GeV] +Cell[12,9] 9.1668916866183e-09 [GeV] +Cell[0,36] 6.2623751762203e-07 [GeV] +Cell[6,0] 5.3981636938261e-10 [GeV] +Cell[4,4] 0.00059860803182733 [GeV] +### Total energy deposition in calorimeter by a source track in 39 cells : 0.31598183764884 (GeV) + +Source track ID 5157 (pi+,0.53406854476138[GeV]) at (104.71421747149,488.91198866395,287.97563664864) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[3,23] 0.15218348088474 [GeV] -Cell[2,27] 0.0065132215354527 [GeV] -Cell[2,26] 3.7002595809099e-07 [GeV] -Cell[8,46] 0.0012345317998414 [GeV] -Cell[8,47] 3.6422517428377e-05 [GeV] -Cell[7,46] 7.4654758227325e-05 [GeV] -Cell[3,25] 0.0002243398792009 [GeV] -Cell[8,0] 0.00031289516513209 [GeV] -Cell[4,22] 0.047476547351036 [GeV] -Cell[1,27] 0.0013176389610752 [GeV] -Cell[1,23] 0.89422009106395 [GeV] -Cell[1,22] 0.15264622856207 [GeV] -Cell[2,22] 0.0068344545460887 [GeV] -Cell[2,23] 0.35525472317726 [GeV] -Cell[0,24] 0.0035479644450492 [GeV] -Cell[0,21] 0.0003781438298646 [GeV] -Cell[1,20] 0.079502912783402 [GeV] -Cell[1,8] 0.00050626512985764 [GeV] -Cell[1,7] 3.4405471524224e-08 [GeV] -Cell[0,22] 0.00040892364017634 [GeV] -Cell[1,21] 0.0043217027224282 [GeV] -Cell[0,19] 6.8043009378016e-08 [GeV] -Cell[0,20] 1.4842953532934e-12 [GeV] -Cell[1,28] 1.1222419561818e-07 [GeV] -Cell[1,25] 0.0018598010499255 [GeV] -Cell[1,26] 0.0032819151759697 [GeV] -Cell[0,23] 0.0031020454701065 [GeV] -Cell[2,21] 0.0007004237015617 [GeV] -Cell[0,27] 6.1030523283989e-09 [GeV] -Cell[2,19] 1.3428507372737e-10 [GeV] -Cell[1,24] 0.27361917521455 [GeV] -Cell[3,45] 1.636661194857e-05 [GeV] -Cell[3,44] 1.1862195867707e-07 [GeV] -Cell[2,25] 0.018596137891738 [GeV] -Cell[2,24] 0.013338885838505 [GeV] -Cell[2,18] 7.5751449912786e-10 [GeV] -Cell[3,22] 0.08434237361446 [GeV] -Cell[3,26] 0.00062923702494902 [GeV] -Cell[7,0] 4.3025437125266e-05 [GeV] -### Total energy deposition in calorimeter by a source track in 39 cells : 2.1065252401 (GeV) - -Source track ID 6665 (neutron,1.4783692592721[GeV]) at (458.5309876774,199.3723484829,-606.56000985403) +Cell[12,11] 0.0005729598655548 [GeV] +Cell[11,12] 0.0022023667568312 [GeV] +Cell[12,9] 0.15308391314398 [GeV] +Cell[11,10] 0.076733384584812 [GeV] +Cell[11,9] 0.1053960578908 [GeV] +Cell[12,10] 0.10141609417846 [GeV] +### Total energy deposition in calorimeter by a source track in 6 cells : 0.43940477642044 (GeV) + +Source track ID 5158 (kaon-,1.5174216859105[GeV]) at (462.50839091616,-189.96312361126,437.5288779877) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[6,1] 0.0046025118862403 [GeV] -Cell[6,2] 0.015090105555325 [GeV] -Cell[7,5] 2.358404003644e-09 [GeV] -Cell[7,1] 1.0766829829663e-05 [GeV] -Cell[4,40] 9.6052681328729e-08 [GeV] -Cell[6,4] 0.0069172834541326 [GeV] -Cell[7,18] 9.0443849330768e-08 [GeV] -Cell[5,5] 0.00018856478798023 [GeV] -Cell[7,44] 1.3795507111354e-05 [GeV] -Cell[5,37] 3.2950367312878e-08 [GeV] -Cell[6,3] 0.36736548473667 [GeV] -Cell[5,6] 1.1974659742009e-08 [GeV] -Cell[5,1] 0.00017916583622565 [GeV] -Cell[5,3] 0.0046684195106071 [GeV] -Cell[5,2] 0.0032512065392291 [GeV] -Cell[5,4] 0.0057038022466566 [GeV] -Cell[6,43] 0.00029774378832326 [GeV] -Cell[4,42] 1.700998400338e-07 [GeV] -Cell[4,39] 3.6107862520112e-06 [GeV] -Cell[6,5] 0.0016466448893468 [GeV] -### Total energy deposition in calorimeter by a source track in 20 cells : 0.40993951023373 (GeV) - -Source track ID 7323 (gamma,0.00011476023683527[GeV]) at (83.028120717222,493.05814177454,446.52177388478) +Cell[13,43] 0.0022804000145539 [GeV] +Cell[15,44] 3.0488317036998e-05 [GeV] +Cell[12,44] 0.0058016702752069 [GeV] +Cell[13,44] 0.024762809652918 [GeV] +Cell[12,43] 0.0019570441518678 [GeV] +Cell[11,45] 1.153635905132e-05 [GeV] +Cell[12,0] 1.1576990852291e-05 [GeV] +Cell[12,46] 0.015703616087883 [GeV] +Cell[12,45] 0.24530673956328 [GeV] +Cell[12,47] 0.00032944135700234 [GeV] +Cell[11,46] 2.740734984377e-05 [GeV] +Cell[15,43] 1.407803129041e-07 [GeV] +Cell[15,45] 0.0085665109852908 [GeV] +Cell[13,45] 0.5288359730808 [GeV] +Cell[13,46] 0.016631814184619 [GeV] +Cell[14,47] 0.0032122508644189 [GeV] +Cell[13,47] 0.002017120848977 [GeV] +Cell[13,0] 0.00015865817338897 [GeV] +Cell[14,44] 0.0073148882033366 [GeV] +Cell[14,45] 0.014363082988819 [GeV] +Cell[14,46] 0.00091493245339086 [GeV] +Cell[14,0] 0.00039013761617161 [GeV] +Cell[11,47] 5.8611072017811e-07 [GeV] +Cell[12,42] 0.00079728615386193 [GeV] +Cell[15,46] 0.0035940845234327 [GeV] +Cell[15,47] 0.0014595360288643 [GeV] +Cell[14,43] 1.2019881978631e-11 [GeV] +Cell[15,0] 0.12417932865197 [GeV] +Cell[16,47] 3.0578553726173e-06 [GeV] +### Total energy deposition in calorimeter by a source track in 29 cells : 1.0086621196353 (GeV) + +Source track ID 5330 (gamma,0.23378010273678[GeV]) at (499.39193953771,24.651383830619,861.27114384764) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[12,10] 0.00011476023683527 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00011476023683527 (GeV) - -Source track ID 6666 (pi+,0.52934267890068[GeV]) at (101.62934892975,489.56253475538,291.4541286659) -Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[11,40] 0.00037917389000085 [GeV] -Cell[6,33] 0.0024338220341543 [GeV] -Cell[15,32] 0.00032403955790093 [GeV] -Cell[14,31] 0.0018079251556714 [GeV] -Cell[9,21] 0.0014674422773024 [GeV] -Cell[14,18] 0.00051099891 [GeV] -Cell[11,47] 0.00051099891 [GeV] -Cell[11,10] 0.28579910047851 [GeV] -Cell[15,46] 0.00030505025398692 [GeV] -Cell[13,20] 0.00084535867070254 [GeV] -Cell[11,9] 0.18491842047043 [GeV] -Cell[8,23] 0.00020831235644835 [GeV] -Cell[11,41] 0.0006152634156085 [GeV] -Cell[17,26] 0.019272891690946 [GeV] -Cell[19,27] 0.0059914577478765 [GeV] -Cell[15,33] 0.005979162697258 [GeV] -Cell[14,38] 0.00097605260442398 [GeV] -Cell[11,16] 0.0036567775633923 [GeV] -Cell[13,22] 0.0013621177941341 [GeV] -Cell[18,20] 0.00031566374047749 [GeV] -### Total energy deposition in calorimeter by a source track in 20 cells : 0.51768003021923 (GeV) - -Source track ID 6667 (kaon-,1.5189437378474[GeV]) at (461.95017360341,-191.31658868948,441.59995258315) +Cell[17,40] 0.0024238075190842 [GeV] +Cell[14,47] 0.0040699995915019 [GeV] +Cell[14,0] 0.22167333521963 [GeV] +Cell[14,1] 0.0051019614965677 [GeV] +Cell[15,34] 0.00051099891 [GeV] +### Total energy deposition in calorimeter by a source track in 5 cells : 0.23378010273678 (GeV) + +Source track ID 5331 (gamma,0.24889356279397[GeV]) at (220.29242660621,-448.85548540699,830.3854639564) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[8,8] 2.1648935216945e-06 [GeV] -Cell[9,8] 8.4461937949527e-06 [GeV] -Cell[11,40] 0.0046227098719785 [GeV] -Cell[11,42] 0.0039160105734686 [GeV] -Cell[11,43] 0.00056478894297584 [GeV] -Cell[9,11] 2.0911275561957e-05 [GeV] -Cell[9,41] 0.0017618038398522 [GeV] -Cell[9,12] 0.00073236676718523 [GeV] -Cell[4,5] 7.6017429819331e-08 [GeV] -Cell[2,27] 6.5038533648476e-08 [GeV] -Cell[7,46] 0.0025364165727663 [GeV] -Cell[9,40] 5.0868750463451e-08 [GeV] -Cell[12,22] 1.3160676403459e-06 [GeV] -Cell[3,25] 5.1513153903215e-07 [GeV] -Cell[8,45] 0.0028868757988366 [GeV] -Cell[13,30] 1.1952692055957e-06 [GeV] -Cell[8,33] 0.00054654399005437 [GeV] -Cell[12,34] 6.9704158143281e-05 [GeV] -Cell[12,42] 9.4301110549509e-05 [GeV] -Cell[9,45] 0.00056192563163768 [GeV] -Cell[1,27] 7.8703664714794e-06 [GeV] -Cell[13,28] 0.0004126651634524 [GeV] -Cell[16,13] 3.3036091772374e-06 [GeV] -Cell[14,27] 2.0339958882687e-07 [GeV] -Cell[12,28] 0.00079365535542115 [GeV] -Cell[12,30] 5.4558448027819e-08 [GeV] -Cell[11,47] 3.6983165741049e-05 [GeV] -Cell[11,23] 0.00070670663903218 [GeV] -Cell[12,25] 0.0024811205864918 [GeV] -Cell[13,9] 1.4749748629811e-05 [GeV] -Cell[13,24] 1.452054421668e-05 [GeV] -Cell[11,22] 1.649558922486e-05 [GeV] -Cell[11,26] 0.0021754210589912 [GeV] -Cell[11,20] 6.7761223181151e-07 [GeV] -Cell[11,21] 0.00053272951117026 [GeV] -Cell[12,21] 0.00080446166586 [GeV] -Cell[10,23] 9.5276416104753e-06 [GeV] -Cell[11,27] 2.9010012667641e-09 [GeV] -Cell[11,28] 0.0010367117428874 [GeV] -Cell[8,32] 1.6196580418182e-06 [GeV] -Cell[9,18] 0.00279413300608 [GeV] -Cell[9,17] 0.00019865752719306 [GeV] -Cell[9,19] 0.00087912990145594 [GeV] -Cell[12,39] 0.0021202359710187 [GeV] -Cell[9,15] 2.1732140798122e-05 [GeV] -Cell[3,29] 1.5153738081608e-07 [GeV] -Cell[3,30] 0.00014846291011372 [GeV] -Cell[7,13] 5.3626318695024e-06 [GeV] -Cell[12,10] 1.0856875655918e-07 [GeV] -Cell[12,11] 1.5513522964739e-07 [GeV] -Cell[10,40] 2.3308103933232e-05 [GeV] -Cell[11,29] 8.991745946696e-05 [GeV] -Cell[10,43] 8.2375108423776e-05 [GeV] -Cell[9,43] 0.0022602977803551 [GeV] -Cell[9,42] 0.0006862570011333 [GeV] -Cell[10,45] 0.0036693503045726 [GeV] -Cell[15,14] 4.0492459374946e-06 [GeV] -Cell[11,17] 0.00095392626935154 [GeV] -Cell[11,18] 0.00067118121249223 [GeV] -Cell[13,11] 1.7596789803065e-11 [GeV] -Cell[13,47] 0.014995965345229 [GeV] -Cell[13,46] 0.004860827424507 [GeV] -Cell[13,0] 0.00033112700489226 [GeV] -Cell[12,47] 0.020754142653884 [GeV] -Cell[14,24] 0.00034503598522963 [GeV] -Cell[13,20] 1.8551469256636e-05 [GeV] -Cell[12,43] 0.0019912242770351 [GeV] -Cell[13,43] 0.00097584441377933 [GeV] -Cell[13,14] 7.497940765461e-06 [GeV] -Cell[12,14] 0.00020588506797867 [GeV] -Cell[10,2] 1.0071745200548e-06 [GeV] -Cell[11,1] 2.3892619083199e-09 [GeV] -Cell[11,0] 0.0020556628298543 [GeV] -Cell[0,21] 4.1494735924061e-06 [GeV] -Cell[8,44] 6.9962686666258e-10 [GeV] -Cell[7,47] 1.4274088259754e-06 [GeV] -Cell[1,28] 1.9336830644079e-07 [GeV] -Cell[3,35] 8.0106442328542e-07 [GeV] -Cell[3,24] 5.9637877370733e-08 [GeV] -Cell[3,45] 6.9175842695927e-05 [GeV] -Cell[3,46] 1.6924264635918e-06 [GeV] -Cell[2,24] 7.8212555877144e-08 [GeV] -Cell[6,16] 8.3715118817054e-06 [GeV] -Cell[14,47] 0.001222164365375 [GeV] -Cell[3,26] 1.6109232092276e-08 [GeV] -Cell[11,41] 0.048965155028134 [GeV] -Cell[12,45] 0.25802408006916 [GeV] -Cell[12,44] 0.03763772734154 [GeV] -Cell[12,18] 0.00022405622998645 [GeV] -Cell[11,19] 6.7865802535152e-05 [GeV] -Cell[12,46] 0.065165789433555 [GeV] -Cell[11,44] 0.0046620896953423 [GeV] -Cell[14,21] 4.5554602314951e-05 [GeV] -Cell[13,36] 0.0016837322560076 [GeV] -Cell[13,37] 0.00023267013862858 [GeV] -Cell[14,14] 0.00073570738532793 [GeV] -Cell[13,38] 0.00033476579782541 [GeV] -Cell[11,46] 0.0013039266824782 [GeV] -Cell[11,45] 0.0066049363815759 [GeV] -Cell[11,14] 2.1903833840042e-09 [GeV] -Cell[9,26] 1.646555234629e-07 [GeV] -Cell[12,0] 5.1068646377985e-05 [GeV] -Cell[12,13] 0.0036984074498294 [GeV] -Cell[12,12] 8.8893938809633e-06 [GeV] -Cell[15,27] 0.0012221269757301 [GeV] -Cell[15,26] 3.4846016226311e-06 [GeV] -Cell[13,44] 0.015067862072249 [GeV] -Cell[13,45] 0.012339158489008 [GeV] -Cell[12,41] 0.00066555120729868 [GeV] -Cell[12,40] 0.00045218508025473 [GeV] -Cell[14,5] 1.2690020957962e-07 [GeV] -Cell[15,5] 2.0277553564938e-06 [GeV] -Cell[13,42] 0.001029490705286 [GeV] -Cell[12,15] 0.00068258304470578 [GeV] -Cell[12,20] 0.00041399591382469 [GeV] -Cell[10,37] 0.00011568703788146 [GeV] -Cell[10,38] 3.7487938261506e-05 [GeV] -Cell[10,36] 4.066179237725e-07 [GeV] -Cell[8,18] 1.8264167627422e-05 [GeV] -Cell[8,19] 3.4770068887156e-06 [GeV] -Cell[14,46] 0.013457602022494 [GeV] -Cell[10,44] 0.011274056628316 [GeV] -Cell[9,44] 0.042891409642956 [GeV] -Cell[9,46] 1.5747313000247e-09 [GeV] -Cell[10,46] 0.00067375059264724 [GeV] -Cell[15,13] 0.00015387773775115 [GeV] -Cell[15,12] 3.8166098529473e-06 [GeV] -Cell[15,11] 9.7227967666527e-05 [GeV] -Cell[11,30] 5.2383641013876e-06 [GeV] -Cell[14,13] 1.4594953070628e-05 [GeV] -Cell[13,12] 0.0013003624661952 [GeV] -Cell[14,12] 0.00011327392364728 [GeV] -Cell[0,2] 1.2761463876814e-05 [GeV] -Cell[14,42] 2.1280680812197e-05 [GeV] -Cell[13,41] 0.0012526265157938 [GeV] -### Total energy deposition in calorimeter by a source track in 135 cells : 0.62260975029977 (GeV) - -Source track ID 7307 (gamma,0.23378010273678[GeV]) at (499.39193944048,24.651385800304,861.27114174528) +Cell[15,40] 0.0010672356483171 [GeV] +Cell[15,1] 0.00074471655460101 [GeV] +Cell[14,39] 0.22895950873218 [GeV] +Cell[14,40] 0.0072215184271179 [GeV] +Cell[14,38] 0.001894632864559 [GeV] +Cell[14,41] 1.7687899868406e-06 [GeV] +### Total energy deposition in calorimeter by a source track in 6 cells : 0.23988938101676 (GeV) + +Source track ID 5316 (kaon+,0.66676218480669[GeV]) at (296.23286915328,402.79782426574,371.09106840068) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[14,1] 0.0019120432422669 [GeV] -Cell[13,10] 0.0020131505503362 [GeV] -Cell[13,11] 0.0019764303049729 [GeV] -Cell[13,2] 0.0013417668567771 [GeV] -Cell[14,47] 0.00095167578836413 [GeV] -Cell[15,0] 0.00022703136085619 [GeV] -Cell[14,0] 0.22535800463321 [GeV] -### Total energy deposition in calorimeter by a source track in 7 cells : 0.23378010273678 (GeV) - -Source track ID 7308 (gamma,0.24889356279397[GeV]) at (220.29242498774,-448.85548620132,830.38546186516) +Cell[11,5] 0.050688090300902 [GeV] +Cell[12,6] 0.10048912623049 [GeV] +Cell[11,7] 0.049746867804014 [GeV] +Cell[11,6] 0.10368396770745 [GeV] +Cell[11,4] 0.049349692532497 [GeV] +### Total energy deposition in calorimeter by a source track in 5 cells : 0.35395774457535 (GeV) + +Source track ID 5160 (pi-,1.1888625900952[GeV]) at (44.903233082472,-497.97961771416,1040.3668667813) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[14,40] 0.0015932043863704 [GeV] -Cell[14,38] 0.0057191667673984 [GeV] -Cell[14,39] 0.24062349188944 [GeV] -Cell[16,7] 0.00095769975075694 [GeV] -### Total energy deposition in calorimeter by a source track in 4 cells : 0.24889356279396 (GeV) - -Source track ID 6833 (neutron,1.0708399323086[GeV]) at (-170.18448283659,-470.14597924649,235.64224831981) +Cell[18,39] 6.0619723154218e-05 [GeV] +Cell[15,37] 0.08740970583727 [GeV] +Cell[15,36] 0.10609757156741 [GeV] +Cell[16,37] 0.20983440448144 [GeV] +Cell[17,37] 0.56440645090612 [GeV] +Cell[17,36] 0.0006916219557903 [GeV] +Cell[17,38] 0.0061671871125062 [GeV] +Cell[18,38] 0.0012028807128999 [GeV] +Cell[18,37] 0.038267782489747 [GeV] +Cell[18,36] 0.00091902935684831 [GeV] +Cell[17,39] 0.00045581082592342 [GeV] +Cell[16,36] 0.00078555166617901 [GeV] +Cell[15,23] 1.9629436428659e-07 [GeV] +Cell[13,29] 1.3089293497615e-07 [GeV] +Cell[14,14] 2.5706601445563e-07 [GeV] +Cell[14,7] 5.3389958338812e-08 [GeV] +### Total energy deposition in calorimeter by a source track in 16 cells : 1.0162992542786 (GeV) + +Source track ID 5274 (gamma,1.5351207931195[GeV]) at (395.55063737802,-305.84259557793,318.34462254743) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[10,33] 0.0007294891537477 [GeV] -Cell[10,32] 0.0014195756970639 [GeV] -Cell[11,36] 0.00067158271912997 [GeV] -Cell[11,31] 0.00013960661710144 [GeV] -Cell[11,32] 0.00056256247891736 [GeV] -Cell[12,29] 0.00020995162817053 [GeV] -Cell[12,30] 3.2255559402984e-05 [GeV] -Cell[16,3] 0.0001071951979502 [GeV] -Cell[15,3] 0.0012214117763309 [GeV] -Cell[12,33] 7.1909815887921e-06 [GeV] -Cell[16,28] 1.1935041169636e-05 [GeV] -Cell[10,23] 1.6438687453046e-07 [GeV] -Cell[5,0] 8.7565073044971e-08 [GeV] -Cell[12,11] 6.4434164072736e-05 [GeV] -Cell[11,10] 1.0551752691754e-05 [GeV] -Cell[11,33] 0.0077577411725448 [GeV] -Cell[11,34] 0.00035255449848785 [GeV] -Cell[10,35] 0.00086165769298509 [GeV] -Cell[11,29] 2.1189070132095e-05 [GeV] -Cell[11,35] 0.0030569016387209 [GeV] -Cell[12,37] 6.7631922720466e-06 [GeV] -Cell[5,11] 2.6716551103164e-05 [GeV] -Cell[5,13] 0.00042889114180764 [GeV] -Cell[10,31] 0.00031206773050508 [GeV] -Cell[11,9] 0.00049386215083337 [GeV] -Cell[12,45] 0.00061177324614364 [GeV] -Cell[11,14] 0.00013196966989381 [GeV] -Cell[10,36] 0.00032012858954783 [GeV] -Cell[4,41] 8.100257270371e-06 [GeV] -Cell[11,8] 3.5782149643637e-07 [GeV] -Cell[11,13] 0.00089414526755979 [GeV] -Cell[18,0] 9.8149396216058e-06 [GeV] -Cell[9,34] 9.9653572658553e-07 [GeV] -Cell[9,33] 4.8521877715757e-09 [GeV] -Cell[16,27] 0.024863475424928 [GeV] -Cell[16,2] 0.00036732755255446 [GeV] -Cell[16,1] 2.9631734216764e-06 [GeV] -### Total energy deposition in calorimeter by a source track in 37 cells : 0.04571739688903 (GeV) - -Source track ID 6835 (neutron,0.94270392056297[GeV]) at (-370.79364291694,335.42819555366,-380.72867798726) +Cell[12,44] 0.0024330265495492 [GeV] +Cell[2,23] 0.00018132217643485 [GeV] +Cell[12,43] 0.019594315505535 [GeV] +Cell[11,43] 0.35149856626735 [GeV] +Cell[12,42] 0.012827933972712 [GeV] +Cell[11,42] 1.1323765932076 [GeV] +Cell[11,41] 0.0074881157778948 [GeV] +Cell[11,44] 0.0027279828753206 [GeV] +Cell[8,23] 0.00024288381920632 [GeV] +Cell[13,14] 0.0021346865941763 [GeV] +### Total energy deposition in calorimeter by a source track in 10 cells : 1.5315054267458 (GeV) + +Source track ID 5275 (gamma,0.1244455075516[GeV]) at (447.26685123245,-223.5002545605,557.8540279008) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[8,29] 0.00038096683702213 [GeV] -Cell[8,30] 0.00095034616156454 [GeV] -Cell[9,30] 2.0865402009917e-05 [GeV] -Cell[8,31] 4.6701717365067e-06 [GeV] -Cell[9,29] 1.1976493322436e-05 [GeV] -Cell[7,47] 4.7894218369038e-11 [GeV] -Cell[7,0] 3.0574677174513e-05 [GeV] -Cell[8,18] 0.00051099891 [GeV] -Cell[7,17] 0.0011176853922066 [GeV] -Cell[10,21] 1.7777489556465e-06 [GeV] -### Total energy deposition in calorimeter by a source track in 10 cells : 0.0030298618418865 (GeV) - -Source track ID 6836 (gamma,0.003119043481595[GeV]) at (-488.72528036945,105.5821970211,-35.121906503664) +Cell[13,43] 0.0056133822581728 [GeV] +Cell[12,44] 0.095875867027484 [GeV] +Cell[13,44] 0.020536252416292 [GeV] +Cell[13,17] 0.00027182901012345 [GeV] +Cell[13,42] 0.00054703208435021 [GeV] +Cell[13,6] 0.00021434363272357 [GeV] +Cell[15,24] 0.00038308505428269 [GeV] +Cell[13,41] 0.00020494497453409 [GeV] +### Total energy deposition in calorimeter by a source track in 8 cells : 0.12364673645796 (GeV) + +Source track ID 5255 (mu+,0.29589660969434[GeV]) at (211.91643664719,452.87020643752,1232.1265667315) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[9,22] 0.003119043481595 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.003119043481595 (GeV) +Cell[16,7] 0.11015165727206 [GeV] +Cell[16,8] 0.088531300272531 [GeV] +Cell[14,34] 0.0019704349630857 [GeV] +### Total energy deposition in calorimeter by a source track in 3 cells : 0.20065339250768 (GeV) -Source track ID 6837 (neutron,0.94172976343439[GeV]) at (-278.23148285338,-415.43620683471,580.4279309573) +Source track ID 5215 (pi-,0.48502143190962[GeV]) at (173.83288763539,-468.80926524157,102.25907282303) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[13,32] 2.9326413437957e-05 [GeV] -Cell[13,33] 0.0011006340786697 [GeV] -Cell[8,17] 0.00059836768535922 [GeV] -Cell[8,16] 0.00030800131628644 [GeV] -Cell[8,15] 4.6980552178866e-07 [GeV] -### Total energy deposition in calorimeter by a source track in 5 cells : 0.0020367992992751 (GeV) - -Source track ID 6838 (neutron,0.94182687480819[GeV]) at (24.145652919959,499.41664714451,139.16914324729) +Cell[10,39] 0.023059949653865 [GeV] +Cell[11,36] 1.3196549843997e-09 [GeV] +Cell[9,38] 0.015415572868172 [GeV] +Cell[10,38] 0.20604169894099 [GeV] +Cell[12,14] 0.00012826489765632 [GeV] +Cell[11,37] 5.7094586945937e-05 [GeV] +Cell[11,38] 5.0232911198123e-05 [GeV] +Cell[11,39] 0.00085459496788462 [GeV] +Cell[9,36] 0.0041995348665089 [GeV] +Cell[9,37] 0.08534051406738 [GeV] +Cell[10,37] 0.0010586042021811 [GeV] +### Total energy deposition in calorimeter by a source track in 11 cells : 0.33620606328244 (GeV) + +Source track ID 5172 (pi+,0.9680967154091[GeV]) at (-70.176613876382,-495.05074776718,1185.8226729267) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[10,10] 3.8825597148389e-06 [GeV] -Cell[10,12] 0.0017200461296698 [GeV] -Cell[10,11] 0.00051400017893127 [GeV] -Cell[11,11] 2.3583698762423e-05 [GeV] -Cell[11,12] 2.2360181901604e-09 [GeV] -### Total energy deposition in calorimeter by a source track in 5 cells : 0.0022615148030965 (GeV) - -Source track ID 6839 (gamma,0.00075104298282379[GeV]) at (-475.14790793166,-155.6742290431,-63.631046463432) +Cell[17,32] 0.0046803430272662 [GeV] +Cell[17,9] 0.00051099891 [GeV] +Cell[18,35] 0.0030921124875297 [GeV] +Cell[17,35] 0.016179795297701 [GeV] +Cell[17,34] 0.29836840204881 [GeV] +Cell[18,34] 0.0065254151071221 [GeV] +Cell[16,8] 5.162316527958e-07 [GeV] +Cell[16,47] 3.0202967058585e-05 [GeV] +Cell[15,34] 0.016078320570435 [GeV] +Cell[17,37] 2.3547007317575e-06 [GeV] +Cell[17,36] 0.0027595403601966 [GeV] +Cell[17,38] 1.3191459722748e-06 [GeV] +Cell[18,38] 0.0015279623402197 [GeV] +Cell[18,37] 0.0006963752721041 [GeV] +Cell[18,36] 0.0098096411982607 [GeV] +Cell[16,34] 0.22474667723117 [GeV] +Cell[17,33] 0.012782730044781 [GeV] +Cell[18,33] 0.0023690031337818 [GeV] +Cell[16,35] 1.7377262690843e-07 [GeV] +Cell[16,33] 9.818382056892e-08 [GeV] +Cell[18,22] 0.00032982592528026 [GeV] +Cell[16,0] 6.8428677525389e-07 [GeV] +Cell[19,36] 0.00015867168286059 [GeV] +Cell[19,37] 2.4403170317555e-05 [GeV] +Cell[16,46] 2.3272295948118e-09 [GeV] +Cell[16,10] 0.0027983307588042 [GeV] +Cell[16,11] 1.79140845853e-06 [GeV] +Cell[17,11] 0.0006582734122203 [GeV] +Cell[17,10] 0.0018821791354063 [GeV] +Cell[16,9] 0.00082575365251123 [GeV] +### Total energy deposition in calorimeter by a source track in 30 cells : 0.6068418977911 (GeV) + +Source track ID 5173 (kaon-,2.4403868291135[GeV]) at (341.8786262008,-364.85477240548,532.29454137053) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[9,26] 0.00075104298282379 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00075104298282379 (GeV) - -Source track ID 6840 (gamma,0.00013654386705503[GeV]) at (-345.77160434491,-361.16754786213,35.728270312222) +Cell[13,37] 0.00064153276133334 [GeV] +Cell[13,43] 0.011213827379927 [GeV] +Cell[15,40] 0.0014438703557996 [GeV] +Cell[15,30] 3.2220884202161e-07 [GeV] +Cell[13,36] 8.857855352403e-06 [GeV] +Cell[13,44] 0.00026167259958538 [GeV] +Cell[12,43] 0.00024271055898441 [GeV] +Cell[11,39] 6.1711764788924e-05 [GeV] +Cell[11,18] 0.000586378275936 [GeV] +Cell[15,42] 0.004386837962146 [GeV] +Cell[15,43] 0.00498311754016 [GeV] +Cell[13,38] 0.0047730058311651 [GeV] +Cell[3,12] 0.0010920898887122 [GeV] +Cell[3,13] 8.3071450394073e-05 [GeV] +Cell[4,13] 3.2174444640987e-07 [GeV] +Cell[4,9] 2.3973035276867e-06 [GeV] +Cell[15,29] 4.1921784554688e-07 [GeV] +Cell[3,10] 1.2860142480349e-05 [GeV] +Cell[13,45] 0.0017361545928111 [GeV] +Cell[14,44] 0.0010290009547458 [GeV] +Cell[14,45] 0.0019643427313235 [GeV] +Cell[12,42] 0.013367641564245 [GeV] +Cell[14,43] 0.0014412767187342 [GeV] +Cell[14,39] 0.031154560376581 [GeV] +Cell[14,40] 0.0061361708920898 [GeV] +Cell[14,38] 0.0049202553700129 [GeV] +Cell[14,41] 0.051802158217528 [GeV] +Cell[13,42] 1.1654507882559 [GeV] +Cell[13,41] 0.17917252381786 [GeV] +Cell[12,41] 0.094459888549246 [GeV] +Cell[14,42] 0.04144050493257 [GeV] +Cell[13,40] 0.16794411972989 [GeV] +Cell[13,39] 0.0025420612562779 [GeV] +Cell[12,40] 0.00069536462068865 [GeV] +Cell[3,11] 0.00017919311188371 [GeV] +Cell[14,36] 0.00019285333435698 [GeV] +Cell[14,37] 0.00066081200254291 [GeV] +Cell[10,5] 7.7829463407397e-10 [GeV] +Cell[11,1] 5.9421367325058e-05 [GeV] +Cell[16,42] 1.9360518990652e-08 [GeV] +Cell[11,40] 2.5896588340402e-09 [GeV] +Cell[15,41] 0.0038402817156613 [GeV] +### Total energy deposition in calorimeter by a source track in 42 cells : 1.7999844016821 (GeV) + +Source track ID 5171 (kaon0L,0.85324689363199[GeV]) at (443.61976117133,-230.65451978727,564.59737040268) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[10,30] 0.00013654386705503 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00013654386705503 (GeV) - -Source track ID 6772 (pi+,0.26240429064474[GeV]) at (-51.662763909886,497.32379676142,1501.1434084789) +Cell[13,43] 0.0039999383820453 [GeV] +Cell[12,44] 0.0019482424141869 [GeV] +Cell[13,44] 0.061263500893936 [GeV] +Cell[12,43] 8.8213988269672e-06 [GeV] +Cell[15,42] 0.0011968439447454 [GeV] +Cell[13,45] 0.021543984959889 [GeV] +Cell[13,46] 0.0049602389060926 [GeV] +Cell[14,44] 0.55742923175887 [GeV] +Cell[14,45] 0.0027876472275376 [GeV] +Cell[12,42] 2.5214117158612e-09 [GeV] +Cell[14,43] 0.023130284904303 [GeV] +Cell[13,42] 0.0023683123108565 [GeV] +Cell[14,42] 0.001535334681343 [GeV] +### Total energy deposition in calorimeter by a source track in 13 cells : 0.68217238430404 (GeV) + +Source track ID 5165 (pi+,4.2124139795043[GeV]) at (194.34878835943,-460.68269824601,515.75634858545) Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[17,13] 0.081924984826718 [GeV] -Cell[17,12] 0.069029991041947 [GeV] -Cell[17,30] 0.0029426861344557 [GeV] -### Total energy deposition in calorimeter by a source track in 3 cells : 0.15389766200312 (GeV) +Cell[7,43] 3.3736432669684e-08 [GeV] +Cell[7,6] 0.00070276511812085 [GeV] +Cell[15,33] 0.00021239828061857 [GeV] +Cell[8,32] 2.0609537197743e-05 [GeV] +Cell[10,24] 0.00013199559071211 [GeV] +Cell[9,31] 0.000147163792016 [GeV] +Cell[9,12] 0.00037038698799688 [GeV] +Cell[13,37] 0.0098737840677099 [GeV] +Cell[7,4] 0.00064738750549452 [GeV] +Cell[9,32] 9.6730420831591e-05 [GeV] +Cell[10,23] 2.035396755673e-08 [GeV] +Cell[10,39] 7.6610820510723e-06 [GeV] +Cell[12,37] 0.011513354948993 [GeV] +Cell[9,13] 9.7778510535136e-06 [GeV] +Cell[11,5] 4.6396017773077e-05 [GeV] +Cell[8,19] 6.2048319477981e-09 [GeV] +Cell[13,43] 0.0032235421964244 [GeV] +Cell[11,36] 0.0069321946358381 [GeV] +Cell[11,35] 2.7676287572831e-09 [GeV] +Cell[15,35] 1.0021896307762e-05 [GeV] +Cell[11,8] 8.1869814039237e-10 [GeV] +Cell[7,37] 0.0022243740912138 [GeV] +Cell[18,20] 0.00027337323329039 [GeV] +Cell[13,26] 0.00093683897052836 [GeV] +Cell[13,27] 4.1476041769783e-07 [GeV] +Cell[16,7] 3.390567144379e-09 [GeV] +Cell[14,25] 1.1873677518452e-05 [GeV] +Cell[13,25] 0.00018336058740726 [GeV] +Cell[12,8] 0.0041372258852916 [GeV] +Cell[10,38] 0.0015652133698375 [GeV] +Cell[13,28] 6.3602055888623e-09 [GeV] +Cell[12,28] 0.00011291458425057 [GeV] +Cell[12,6] 4.2235736036673e-06 [GeV] +Cell[12,27] 0.00089363439047793 [GeV] +Cell[12,22] 1.9907442174031e-05 [GeV] +Cell[12,14] 6.6520599619707e-05 [GeV] +Cell[13,36] 0.0083433298568028 [GeV] +Cell[12,36] 0.0137382112049 [GeV] +Cell[13,44] 0.00070211669190496 [GeV] +Cell[12,43] 0.0023697284993742 [GeV] +Cell[12,21] 3.7308586687459e-06 [GeV] +Cell[11,37] 0.00049926391614458 [GeV] +Cell[11,38] 0.1871829519426 [GeV] +Cell[11,39] 0.0079546323778217 [GeV] +Cell[13,21] 0.0065503025870045 [GeV] +Cell[13,22] 0.0012180345738022 [GeV] +Cell[8,17] 0.0016376412038862 [GeV] +Cell[12,25] 2.7011340716854e-07 [GeV] +Cell[9,40] 2.1486267348791e-07 [GeV] +Cell[8,40] 4.7668931119915e-07 [GeV] +Cell[9,30] 0.00045470623485755 [GeV] +Cell[12,7] 0.00044821232421491 [GeV] +Cell[7,32] 8.2961006455662e-09 [GeV] +Cell[4,17] 4.0315607765706e-05 [GeV] +Cell[12,1] 0.0019442233703654 [GeV] +Cell[12,0] 1.158332452178e-11 [GeV] +Cell[16,18] 1.5740641276352e-05 [GeV] +Cell[16,19] 0.00015283136541279 [GeV] +Cell[12,46] 0.00025154268856107 [GeV] +Cell[12,45] 9.2155988920695e-07 [GeV] +Cell[12,47] 9.0120029770219e-05 [GeV] +Cell[10,30] 5.7659003621666e-05 [GeV] +Cell[9,27] 6.5565982367843e-09 [GeV] +Cell[10,25] 7.1651151469041e-06 [GeV] +Cell[13,18] 1.156957790954e-06 [GeV] +Cell[6,23] 2.3595351027325e-05 [GeV] +Cell[6,21] 0.0031691775706188 [GeV] +Cell[5,21] 7.5373305014637e-07 [GeV] +Cell[5,20] 3.8359618498589e-05 [GeV] +Cell[6,22] 0.0049297526276 [GeV] +Cell[7,22] 2.0807077697668e-05 [GeV] +Cell[7,20] 0.010072969456404 [GeV] +Cell[17,34] 4.1828575222098e-05 [GeV] +Cell[8,36] 0.00075892549882989 [GeV] +Cell[7,33] 5.6899789456111e-08 [GeV] +Cell[15,3] 0.00067056053362614 [GeV] +Cell[16,6] 6.1662046482525e-07 [GeV] +Cell[4,16] 0.00043568066131934 [GeV] +Cell[11,43] 0.0070302113871959 [GeV] +Cell[13,11] 0.0018445501659068 [GeV] +Cell[9,24] 2.4661895004101e-06 [GeV] +Cell[7,2] 7.0450528583024e-05 [GeV] +Cell[7,1] 0.0056588317773956 [GeV] +Cell[15,1] 2.4010660126805e-10 [GeV] +Cell[11,3] 2.4475613608956e-06 [GeV] +Cell[10,29] 1.5898607671261e-07 [GeV] +Cell[10,37] 0.0014673766901943 [GeV] +Cell[12,33] 2.3537578169908e-07 [GeV] +Cell[13,34] 0.00065848565522219 [GeV] +Cell[12,35] 0.00089817456466631 [GeV] +Cell[13,35] 0.0019101294254567 [GeV] +Cell[13,33] 4.4492480810732e-09 [GeV] +Cell[12,38] 1.0209778486144 [GeV] +Cell[1,22] 1.0549806233939e-08 [GeV] +Cell[1,20] 0.00076162417556884 [GeV] +Cell[1,21] 0.0034445831640993 [GeV] +Cell[2,21] 0.00033005765420343 [GeV] +Cell[2,38] 7.2546103037894e-06 [GeV] +Cell[5,41] 0.00011746329319544 [GeV] +Cell[5,42] 4.3180153427443e-05 [GeV] +Cell[5,19] 8.3515653386712e-07 [GeV] +Cell[4,47] 2.8438618755899e-07 [GeV] +Cell[13,38] 0.11481088102236 [GeV] +Cell[4,13] 0.0017763710269523 [GeV] +Cell[7,21] 0.0024735892585707 [GeV] +Cell[6,33] 0.00040603141488452 [GeV] +Cell[14,9] 0.00079672487129551 [GeV] +Cell[14,8] 3.137855821933e-07 [GeV] +Cell[3,10] 0.0003664973875079 [GeV] +Cell[2,20] 0.0071222130949785 [GeV] +Cell[2,18] 2.8427175152501e-08 [GeV] +Cell[2,17] 0.00043837404484896 [GeV] +Cell[11,10] 9.7602675086819e-06 [GeV] +Cell[13,45] 0.0015282104580322 [GeV] +Cell[13,46] 7.0988474925571e-06 [GeV] +Cell[13,47] 0.00051998710299108 [GeV] +Cell[14,44] 0.00012203442005102 [GeV] +Cell[14,45] 2.1470855764846e-05 [GeV] +Cell[11,47] 5.8700097724795e-09 [GeV] +Cell[12,42] 0.01062249355779 [GeV] +Cell[14,43] 3.655018270365e-05 [GeV] +Cell[14,39] 0.00061914795856592 [GeV] +Cell[14,40] 0.030183825173044 [GeV] +Cell[14,38] 1.2602924414296e-07 [GeV] +Cell[14,41] 0.00020874480635609 [GeV] +Cell[11,6] 5.9760797885247e-06 [GeV] +Cell[11,4] 0.00028442541919685 [GeV] +Cell[15,36] 1.3187836577913e-05 [GeV] +Cell[14,14] 4.6479414777423e-08 [GeV] +Cell[11,42] 0.00069528026077431 [GeV] +Cell[11,41] 7.1621606449526e-06 [GeV] +Cell[13,42] 5.0987611754977e-05 [GeV] +Cell[13,6] 0.00075942208949232 [GeV] +Cell[13,41] 0.007652722692268 [GeV] +Cell[16,34] 6.2486844544765e-06 [GeV] +Cell[16,35] 1.2837646878324e-05 [GeV] +Cell[12,41] 0.0042481116878596 [GeV] +Cell[14,42] 0.00045978014784748 [GeV] +Cell[13,40] 0.061781777897643 [GeV] +Cell[13,39] 0.3540984216056 [GeV] +Cell[12,40] 0.015271650080875 [GeV] +Cell[14,36] 0.1220371071537 [GeV] +Cell[14,37] 0.0010847459663118 [GeV] +Cell[11,1] 1.0093383403728e-05 [GeV] +Cell[11,40] 0.0055860774604006 [GeV] +Cell[12,39] 0.59925018986733 [GeV] +Cell[13,12] 3.1983120173891e-06 [GeV] +Cell[7,18] 0.00034360212562319 [GeV] +Cell[8,18] 0.00027878902006 [GeV] +Cell[7,19] 3.458617970864e-08 [GeV] +Cell[15,18] 0.00015183651529878 [GeV] +Cell[15,17] 0.001830817300569 [GeV] +Cell[16,17] 7.599740405567e-06 [GeV] +Cell[16,16] 0.0016033568214399 [GeV] +Cell[16,15] 0.0003708223210358 [GeV] +Cell[11,15] 4.731155448826e-05 [GeV] +Cell[11,14] 0.0033684404490772 [GeV] +Cell[11,13] 0.00081173161314291 [GeV] +Cell[14,2] 0.0036148243416214 [GeV] +Cell[15,2] 7.1529318627427e-05 [GeV] +Cell[13,10] 0.0015511666175428 [GeV] +Cell[14,10] 0.0011913881907408 [GeV] +Cell[13,9] 0.0007809829380567 [GeV] +Cell[11,17] 1.115546400797e-06 [GeV] +Cell[12,2] 0.0022005169631454 [GeV] +Cell[11,2] 0.0027417195740035 [GeV] +Cell[14,18] 9.3857475440018e-07 [GeV] +Cell[12,4] 0.00013891125109797 [GeV] +Cell[12,3] 0.0037177950395855 [GeV] +Cell[11,0] 0.00098513644536001 [GeV] +Cell[13,20] 6.8420805828282e-05 [GeV] +Cell[14,24] 3.9055131812347e-05 [GeV] +Cell[13,24] 0.00029524050162138 [GeV] +Cell[4,14] 0.0055629927330173 [GeV] +Cell[4,15] 0.00080075261050729 [GeV] +Cell[3,15] 5.749341849662e-05 [GeV] +Cell[3,17] 5.1026236428697e-07 [GeV] +Cell[3,16] 0.00073248829010049 [GeV] +Cell[3,14] 0.0003664551204929 [GeV] +Cell[12,5] 0.00012614386270616 [GeV] +Cell[17,12] 0.00011587578342289 [GeV] +Cell[16,12] 6.7865051128592e-05 [GeV] +Cell[16,13] 1.2903676781661e-07 [GeV] +Cell[15,8] 7.6651269849094e-05 [GeV] +Cell[15,14] 3.018192842319e-09 [GeV] +Cell[15,7] 0.00072564023531368 [GeV] +Cell[9,25] 2.4303030804731e-06 [GeV] +Cell[13,3] 7.2891683375929e-06 [GeV] +Cell[14,4] 0.0072442208917746 [GeV] +Cell[14,5] 9.8457584954303e-06 [GeV] +Cell[14,3] 2.8663256322034e-05 [GeV] +Cell[15,4] 1.0003674901782e-08 [GeV] +Cell[16,20] 0.00059975214306087 [GeV] +Cell[15,20] 2.7667640785353e-05 [GeV] +Cell[16,1] 3.2853544398677e-06 [GeV] +Cell[14,35] 0.00065649129685244 [GeV] +Cell[19,20] 0.0047093422366445 [GeV] +Cell[18,21] 0.0010983824397233 [GeV] +Cell[19,19] 0.00086198405820653 [GeV] +Cell[19,21] 0.0029897764417668 [GeV] +Cell[19,18] 2.4156179279089e-12 [GeV] +Cell[8,46] 0.0028391980840645 [GeV] +Cell[6,20] 0.00052061319595271 [GeV] +Cell[6,19] 1.0674697796276e-07 [GeV] +Cell[7,5] 0.0003731988823032 [GeV] +Cell[8,4] 0.00019573699180546 [GeV] +Cell[8,5] 6.029755304337e-05 [GeV] +Cell[16,43] 0.0013148761302517 [GeV] +Cell[9,29] 7.3201354243793e-06 [GeV] +Cell[6,37] 0.001216645365188 [GeV] +Cell[6,36] 2.7888821709666e-05 [GeV] +Cell[15,39] 9.6398361027241e-05 [GeV] +Cell[15,38] 0.00019558804666462 [GeV] +Cell[13,5] 9.988792511615e-05 [GeV] +Cell[14,6] 0.0011807837760218 [GeV] +Cell[10,36] 0.067919783739592 [GeV] +Cell[10,35] 5.3204738264867e-08 [GeV] +### Total energy deposition in calorimeter by a source track in 217 cells : 2.8179549151703 (GeV) + +Source track ID 4510 (gamma,0.0011562343882541[GeV]) at (-439.85693669465,237.75170922961,-312.56663416667) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[8,20] 0.0011562343882541 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0011562343882541 (GeV) -Source track ID 6669 (pi-,1.1891971338243[GeV]) at (44.047762068265,-498.05601558136,1037.148176924) -Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[17,31] 1.2563549154265e-06 [GeV] -Cell[15,3] 0.00034383215849634 [GeV] -Cell[17,35] 0.0027431958310344 [GeV] -Cell[18,43] 0.0023991639008324 [GeV] -Cell[18,44] 0.00057354511196456 [GeV] -Cell[17,42] 9.3086625838623e-09 [GeV] -Cell[18,42] 0.00036137630520727 [GeV] -Cell[17,41] 0.0045684375789299 [GeV] -Cell[17,36] 0.3189209908084 [GeV] -Cell[15,36] 0.18071578510385 [GeV] -Cell[16,36] 0.18828309371843 [GeV] -Cell[16,37] 0.012842055312912 [GeV] -Cell[17,37] 0.017867271869118 [GeV] -Cell[17,38] 0.010389657479281 [GeV] -Cell[16,35] 6.2168942815788e-07 [GeV] -Cell[16,38] 0.00087603709789023 [GeV] -Cell[15,2] 0.0025804461966767 [GeV] -Cell[17,39] 0.12060079442506 [GeV] -Cell[17,40] 0.0032473372839377 [GeV] -Cell[18,41] 0.018467612998015 [GeV] -Cell[18,40] 0.0084544820903274 [GeV] -Cell[18,39] 0.00079821621378471 [GeV] -Cell[19,41] 0.00013523671316602 [GeV] -Cell[19,40] 0.00024302350545622 [GeV] -### Total energy deposition in calorimeter by a source track in 24 cells : 0.89541347905577 (GeV) - -Source track ID 6753 (gamma,1.5351207931195[GeV]) at (395.55062636936,-305.84260981558,318.34457688663) -Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[11,42] 1.1444549114656 [GeV] -Cell[11,43] 0.19789189236685 [GeV] -Cell[12,42] 0.1141212581977 [GeV] -Cell[12,43] 0.073425774103232 [GeV] -Cell[11,41] 0.00102199782 [GeV] -Cell[12,44] 0.000785753533215 [GeV] -Cell[11,44] 0.00048099498165133 [GeV] -Cell[12,41] 0.0029381890720925 [GeV] -### Total energy deposition in calorimeter by a source track in 8 cells : 1.5351207715403 (GeV) - -Source track ID 6754 (gamma,0.1244455075516[GeV]) at (447.26697665313,-223.5000035695,557.85469173285) -Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[13,28] 0.00081360602284762 [GeV] -Cell[16,4] 0.00069498292065688 [GeV] -Cell[13,1] 0.00012408037725697 [GeV] -Cell[12,44] 0.11086157174877 [GeV] -Cell[13,44] 0.0050397133214869 [GeV] -Cell[13,45] 0.001150053774697 [GeV] -Cell[11,30] 0.00044027489338179 [GeV] -Cell[13,5] 0.00047610627447826 [GeV] -Cell[13,39] 0.0024055016232772 [GeV] -Cell[17,4] 0.0002634016861112 [GeV] -Cell[17,5] 0.00086227552986385 [GeV] -Cell[18,26] 0.00064711707334975 [GeV] -Cell[9,25] 0.00066682230542445 [GeV] -### Total energy deposition in calorimeter by a source track in 13 cells : 0.1244455075516 (GeV) - -Source track ID 6719 (pi+,0.37508595518775[GeV]) at (177.57662425617,467.40404632158,1241.1635037447) -Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[17,13] 6.0093015665188e-05 [GeV] -Cell[15,9] 0.00027446005520505 [GeV] -Cell[17,3] 9.8552079236924e-07 [GeV] -Cell[17,6] 0.001215199218459 [GeV] -Cell[15,7] 0.00048599953154015 [GeV] -Cell[17,10] 0.0011696248658137 [GeV] -Cell[16,7] 0.037467986848943 [GeV] -Cell[17,37] 0.0023984403208641 [GeV] -Cell[17,4] 1.1581727033104e-05 [GeV] -Cell[17,5] 0.00039936292903337 [GeV] -Cell[16,9] 0.079437202711167 [GeV] -Cell[16,8] 0.18085979381301 [GeV] -Cell[18,6] 1.9833402708173e-05 [GeV] -Cell[18,3] 7.9092144744664e-07 [GeV] -Cell[15,8] 0.00074093797621526 [GeV] -Cell[16,10] 0.0060874464582524 [GeV] -Cell[16,11] 0.00060268940917998 [GeV] -Cell[16,12] 0.0010186695068018 [GeV] -Cell[15,6] 0.0011788025560409 [GeV] -### Total energy deposition in calorimeter by a source track in 19 cells : 0.31342990078818 (GeV) - -Source track ID 6712 (pi-,0.48385640154128[GeV]) at (178.8854186698,-466.90470867976,101.98605740961) -Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[8,29] 1.1494230184326e-06 [GeV] -Cell[8,28] 0.00010836076758278 [GeV] -Cell[9,9] 0.00024563808945676 [GeV] -Cell[11,39] 0.0013748648388938 [GeV] -Cell[11,40] 3.9201673558864e-05 [GeV] -Cell[10,33] 0.0008658964941751 [GeV] -Cell[9,30] 3.6782875667996e-08 [GeV] -Cell[9,39] 2.8441143458622e-06 [GeV] -Cell[11,36] 1.8394169615021e-08 [GeV] -Cell[11,31] 1.3338812650318e-05 [GeV] -Cell[11,32] 1.0120206062538e-06 [GeV] -Cell[13,26] 3.4405969781801e-06 [GeV] -Cell[13,27] 0.00024461121633999 [GeV] -Cell[14,26] 6.4690578146838e-06 [GeV] -Cell[14,16] 3.9729129015313e-06 [GeV] -Cell[12,33] 9.732549166074e-06 [GeV] -Cell[10,29] 0.00054931496874497 [GeV] -Cell[9,31] 2.4746987037361e-10 [GeV] -Cell[9,28] 6.6978062369458e-05 [GeV] -Cell[9,3] 2.5240005925298e-09 [GeV] -Cell[9,36] 1.1396416807656e-06 [GeV] -Cell[11,37] 8.3072829281718e-06 [GeV] -Cell[10,40] 0.0059899339026056 [GeV] -Cell[10,41] 0.0061028647971891 [GeV] -Cell[11,33] 0.0028751091497396 [GeV] -Cell[11,34] 1.154259318173e-05 [GeV] -Cell[10,34] 1.4506008180092e-05 [GeV] -Cell[10,35] 0.00063093228729497 [GeV] -Cell[14,17] 2.1467392798513e-08 [GeV] -Cell[12,16] 0.0026287611330751 [GeV] -Cell[12,17] 3.7542092582044e-07 [GeV] -Cell[11,38] 0.00075045364097017 [GeV] -Cell[13,2] 0.0027233680216099 [GeV] -Cell[13,14] 0.00018608298302627 [GeV] -Cell[13,15] 0.0020479259027049 [GeV] -Cell[10,31] 9.73383023927e-06 [GeV] -Cell[14,14] 0.00071194362896699 [GeV] -Cell[10,37] 4.7416658741213e-05 [GeV] -Cell[10,38] 0.058872574295833 [GeV] -Cell[10,36] 7.6516621735095e-05 [GeV] -Cell[10,30] 1.9230680231885e-07 [GeV] -Cell[16,8] 2.2879234165885e-07 [GeV] -Cell[10,39] 0.24668997727172 [GeV] -Cell[15,16] 4.3991299190793e-06 [GeV] -Cell[15,15] 5.0896543987164e-06 [GeV] -Cell[9,35] 7.2080893573911e-07 [GeV] -Cell[14,15] 1.061309421857e-07 [GeV] -Cell[10,14] 0.0038974345793343 [GeV] -Cell[11,15] 8.9026923433266e-10 [GeV] -Cell[10,15] 0.0015330375161521 [GeV] -Cell[9,23] 7.0196907746094e-05 [GeV] -Cell[9,4] 4.8504443839192e-10 [GeV] -### Total energy deposition in calorimeter by a source track in 52 cells : 0.33942777728875 (GeV) - -Source track ID 6681 (pi+,0.96825309622275[GeV]) at (-70.123211923796,-495.05831489784,1188.7948688713) -Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[16,32] 0.0020277457668889 [GeV] -Cell[16,31] 0.00081485761629051 [GeV] -Cell[16,30] 4.713041300397e-05 [GeV] -Cell[17,31] 0.0048065585386128 [GeV] -Cell[14,26] 1.1120759245387e-07 [GeV] -Cell[16,4] 2.2577308496693e-05 [GeV] -Cell[17,7] 5.6313496897928e-06 [GeV] -Cell[14,35] 0.00032665079908009 [GeV] -Cell[14,41] 0.00032210154397092 [GeV] -Cell[17,34] 0.00013258257927896 [GeV] -Cell[11,18] 0.00017310421454022 [GeV] -Cell[13,11] 0.0021422684070886 [GeV] -Cell[13,0] 4.4004991650581e-11 [GeV] -Cell[17,2] 0.0032073192909543 [GeV] -Cell[17,1] 0.019944014572478 [GeV] -Cell[17,29] 2.5120154987235e-09 [GeV] -Cell[15,24] 0.0011072263090759 [GeV] -Cell[14,24] 0.0091787538553978 [GeV] -Cell[11,4] 0.0041337415196641 [GeV] -Cell[11,5] 2.5871481897184e-06 [GeV] -Cell[15,18] 0.00054160798382751 [GeV] -Cell[17,6] 0.0010578912588883 [GeV] -Cell[16,47] 0.020673979742476 [GeV] -Cell[16,23] 0.0024074606940345 [GeV] -Cell[17,10] 3.6609341623262e-07 [GeV] -Cell[15,47] 1.4185680192895e-06 [GeV] -Cell[15,0] 0.00094057089574608 [GeV] -Cell[15,1] 2.6515374442965e-05 [GeV] -Cell[15,33] 6.6901832076383e-07 [GeV] -Cell[14,38] 6.3331226119772e-06 [GeV] -Cell[13,37] 9.6926617552526e-06 [GeV] -Cell[13,38] 1.4305173361208e-05 [GeV] -Cell[12,0] 8.1348844105378e-11 [GeV] -Cell[15,27] 1.6007106751204e-11 [GeV] -Cell[15,26] 0.00025743356071553 [GeV] -Cell[14,39] 1.0904239898082e-05 [GeV] -Cell[16,27] 1.6270626019832e-09 [GeV] -Cell[16,1] 0.001575601714625 [GeV] -Cell[17,30] 0.0056165708367108 [GeV] -Cell[16,35] 9.2649823615147e-06 [GeV] -Cell[13,39] 9.9059641943313e-06 [GeV] -Cell[17,5] 0.0012490485597869 [GeV] -Cell[15,34] 0.010568467242355 [GeV] -Cell[15,35] 0.00022471786480253 [GeV] -Cell[17,32] 0.05157415177412 [GeV] -Cell[17,33] 0.025618637690419 [GeV] -Cell[18,33] 0.011640754072313 [GeV] -Cell[16,33] 4.7277153487357e-07 [GeV] -Cell[18,34] 0.0095058107704653 [GeV] -Cell[18,32] 0.0034482958355719 [GeV] -Cell[18,31] 0.005690976731402 [GeV] -Cell[18,30] 0.0025518358302171 [GeV] -Cell[18,29] 0.0012735881299597 [GeV] -Cell[19,33] 1.0297110018087e-05 [GeV] -Cell[16,0] 0.11297458142024 [GeV] -Cell[17,0] 0.14679377975813 [GeV] -Cell[19,11] 0.00034473062837492 [GeV] -Cell[19,10] 5.5534503189847e-08 [GeV] -Cell[17,47] 0.0041475129703045 [GeV] -Cell[16,46] 1.1702844631145e-07 [GeV] -Cell[14,34] 4.184700344922e-06 [GeV] -Cell[16,26] 0.00025249683777713 [GeV] -Cell[16,25] 0.00083543161296843 [GeV] -Cell[15,23] 0.0018916207444237 [GeV] -Cell[12,1] 4.0187658441937e-08 [GeV] -Cell[16,45] 1.1187993209205e-08 [GeV] -Cell[16,21] 9.5713129967886e-05 [GeV] -Cell[16,24] 0.0016404488619607 [GeV] -Cell[15,22] 1.7229571244457e-05 [GeV] -Cell[16,22] 0.00049081519082653 [GeV] -Cell[12,4] 0.00011117330240631 [GeV] -Cell[15,28] 0.00092115222933899 [GeV] -Cell[17,24] 0.0023444672504303 [GeV] -Cell[17,25] 0.0016274074696823 [GeV] -Cell[15,40] 1.1980530980509e-06 [GeV] -Cell[17,27] 3.6984373582527e-07 [GeV] -Cell[18,24] 7.5550989049589e-07 [GeV] -Cell[18,23] 2.2477557786829e-05 [GeV] -Cell[18,21] 1.6880818729987e-05 [GeV] -Cell[17,21] 1.2068919837475e-05 [GeV] -Cell[14,6] 0.00051191882089222 [GeV] -Cell[19,22] 1.9704006263055e-06 [GeV] -Cell[15,37] 0.0021736984567959 [GeV] -Cell[18,15] 0.00010720573838682 [GeV] -Cell[18,14] 0.002388818739949 [GeV] -Cell[19,15] 0.0013810357556232 [GeV] -Cell[19,14] 0.0012421578951344 [GeV] -Cell[14,23] 0.00050374784604071 [GeV] -Cell[14,22] 5.1393985813775e-09 [GeV] -Cell[14,25] 0.00078116781432355 [GeV] -Cell[19,18] 1.3133103493601e-09 [GeV] -### Total energy deposition in calorimeter by a source track in 91 cells : 0.48855096122968 (GeV) - -Source track ID 6682 (kaon-,2.4404053799208[GeV]) at (342.10939698096,-364.63839690483,532.20447147807) -Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[8,9] 1.7176819267206e-07 [GeV] -Cell[8,10] 6.4250312823333e-07 [GeV] -Cell[9,8] 0.00013585348083825 [GeV] -Cell[9,9] 0.0016000338815323 [GeV] -Cell[9,10] 0.00057671551021645 [GeV] -Cell[11,39] 0.00049412601372489 [GeV] -Cell[11,40] 1.9135449773444e-05 [GeV] -Cell[11,42] 0.030178895261875 [GeV] -Cell[11,43] 0.0028858975483144 [GeV] -Cell[9,11] 8.4813353173558e-05 [GeV] -Cell[8,12] 3.5984558053315e-09 [GeV] -Cell[11,6] 3.6146957427263e-11 [GeV] -Cell[7,35] 0.00062835290437658 [GeV] -Cell[8,38] 0.078410982869001 [GeV] -Cell[7,39] 5.6112111565199e-08 [GeV] -Cell[6,37] 1.8148623212255e-08 [GeV] -Cell[13,35] 0.00050379457734982 [GeV] -Cell[12,22] 2.3745106211663e-06 [GeV] -Cell[8,36] 1.6020292308895e-05 [GeV] -Cell[8,37] 0.0093398665365688 [GeV] -Cell[9,38] 1.8030547646504e-06 [GeV] -Cell[8,39] 0.0026772115060406 [GeV] -Cell[9,39] 0.0047371614293635 [GeV] -Cell[12,42] 0.066580645166335 [GeV] -Cell[10,42] 6.3200365730154e-08 [GeV] -Cell[12,35] 0.00041199677880093 [GeV] -Cell[12,32] 0.002001017465539 [GeV] -Cell[16,32] 1.2826165184379e-06 [GeV] -Cell[12,31] 8.4140715482135e-05 [GeV] -Cell[14,44] 0.00070839626811039 [GeV] -Cell[14,43] 0.25935177623874 [GeV] -Cell[13,26] 3.981005345122e-05 [GeV] -Cell[16,18] 4.7354392008856e-05 [GeV] -Cell[14,40] 0.00059176904605408 [GeV] -Cell[13,33] 6.0690822137985e-06 [GeV] -Cell[14,27] 0.0020575769276559 [GeV] -Cell[14,18] 7.9445093343793e-06 [GeV] -Cell[14,1] 0.0018586445162832 [GeV] -Cell[14,20] 0.0068077811988279 [GeV] -Cell[14,16] 1.3396546040894e-05 [GeV] -Cell[11,47] 0.0012768845548514 [GeV] -Cell[12,24] 0.001128406503942 [GeV] -Cell[12,25] 7.893669109194e-06 [GeV] -Cell[14,9] 0.00057088500977352 [GeV] -Cell[12,23] 7.9228517424781e-06 [GeV] -Cell[15,4] 0.00020850515449104 [GeV] -Cell[12,33] 9.2048083361533e-05 [GeV] -Cell[12,8] 0.00157825648047 [GeV] -Cell[13,10] 6.111123599112e-06 [GeV] -Cell[11,21] 5.2604277152568e-07 [GeV] -Cell[11,7] 0.00088898366173839 [GeV] -Cell[14,41] 0.0060566263206945 [GeV] -Cell[11,27] 4.6908935466945e-06 [GeV] -Cell[11,28] 0.00060051749196714 [GeV] -Cell[10,29] 2.1978749660775e-05 [GeV] -Cell[12,39] 0.0092814378217988 [GeV] -Cell[7,36] 0.0034686685588804 [GeV] -Cell[8,40] 0.0010780538499599 [GeV] -Cell[12,10] 0.0025888783873978 [GeV] -Cell[12,11] 1.4057252327689e-05 [GeV] -Cell[11,11] 5.2498197987916e-08 [GeV] -Cell[11,10] 6.0070158383496e-08 [GeV] -Cell[7,37] 0.010118840318068 [GeV] -Cell[7,38] 0.0090850340819348 [GeV] -Cell[6,38] 9.8230116770992e-07 [GeV] -Cell[11,33] 0.00012486213854947 [GeV] -Cell[11,29] 0.00026816513610174 [GeV] -Cell[10,43] 0.0011484231127016 [GeV] -Cell[16,15] 2.4983498442452e-06 [GeV] -Cell[16,40] 1.1245720088482e-07 [GeV] -Cell[15,14] 0.00088624208110946 [GeV] -Cell[14,17] 1.0791154804224e-05 [GeV] -Cell[13,47] 0.00017057323198549 [GeV] -Cell[13,46] 0.00042769791175988 [GeV] -Cell[13,0] 0.0010240389617539 [GeV] -Cell[12,47] 0.0010940261625381 [GeV] -Cell[18,43] 1.933030350483e-05 [GeV] -Cell[17,3] 3.6939060664736e-06 [GeV] -Cell[18,44] 8.2080595311709e-06 [GeV] -Cell[17,44] 9.2243609833531e-07 [GeV] -Cell[16,39] 1.5570886898786e-07 [GeV] -Cell[15,24] 0.0046815164115135 [GeV] -Cell[14,24] 0.00011798724846437 [GeV] -Cell[13,1] 0.00022739884633097 [GeV] -Cell[13,20] 7.0854846065913e-05 [GeV] -Cell[13,21] 0.0055290929612264 [GeV] -Cell[12,43] 0.0058974369573675 [GeV] -Cell[13,43] 0.1444257837781 [GeV] -Cell[13,14] 0.00073621475550351 [GeV] -Cell[13,16] 0.0011328368196006 [GeV] -Cell[10,1] 0.0090879187054512 [GeV] -Cell[16,23] 6.772218951312e-05 [GeV] -Cell[12,2] 4.9408435363603e-06 [GeV] -Cell[15,0] 0.00019182471206375 [GeV] -Cell[6,36] 1.1845258995891e-11 [GeV] -Cell[11,41] 0.0055172244417986 [GeV] -Cell[13,22] 3.892134786372e-05 [GeV] -Cell[12,45] 2.0874218574477e-05 [GeV] -Cell[12,44] 0.00047865424244708 [GeV] -Cell[12,18] 3.4445023300123e-07 [GeV] -Cell[12,46] 0.0024035198734922 [GeV] -Cell[11,44] 8.1327325423786e-05 [GeV] -Cell[13,37] 0.00038340991406233 [GeV] -Cell[14,14] 0.0051462058311924 [GeV] -Cell[13,38] 1.5467487540946e-06 [GeV] -Cell[11,46] 0.002392124333016 [GeV] -Cell[11,45] 1.1515161525608e-05 [GeV] -Cell[12,13] 5.9618967202368e-07 [GeV] -Cell[12,12] 7.8965888519633e-08 [GeV] -Cell[13,44] 0.0048883137264495 [GeV] -Cell[13,45] 0.0012719255597701 [GeV] -Cell[12,41] 0.36707464441588 [GeV] -Cell[12,40] 0.016386205525964 [GeV] -Cell[13,42] 0.34479293204527 [GeV] -Cell[12,20] 1.752208814878e-07 [GeV] -Cell[14,46] 0.0002410898827532 [GeV] -Cell[10,44] 0.0032897506210585 [GeV] -Cell[15,13] 0.00044307393723489 [GeV] -Cell[15,12] 3.172317519784e-12 [GeV] -Cell[14,13] 0.00032882419809209 [GeV] -Cell[14,12] 0.0017846401749109 [GeV] -Cell[14,42] 0.00061150693630589 [GeV] -Cell[13,41] 0.019295000338277 [GeV] -Cell[14,0] 1.6658075561281e-05 [GeV] -Cell[11,8] 2.2945392993279e-07 [GeV] -Cell[13,39] 0.0041544591704392 [GeV] -Cell[17,4] 3.9475528610637e-05 [GeV] -Cell[17,5] 0.0021858994970333 [GeV] -Cell[9,25] 0.00011492368487279 [GeV] -Cell[15,15] 5.3248857057042e-09 [GeV] -Cell[14,15] 3.3489777706563e-10 [GeV] -Cell[16,33] 0.00047605918584793 [GeV] -Cell[16,0] 1.8859589530621e-05 [GeV] -Cell[15,23] 5.3994793941797e-05 [GeV] -Cell[12,1] 0.00011565689759152 [GeV] -Cell[16,24] 0.0017553253411681 [GeV] -Cell[16,22] 4.3097847651552e-08 [GeV] -Cell[17,27] 0.00057947840625206 [GeV] -Cell[18,23] 2.3359898477793e-09 [GeV] -Cell[14,23] 0.0017105460662316 [GeV] -Cell[19,2] 0.00015303506877171 [GeV] -Cell[13,40] 0.010899994797233 [GeV] -Cell[17,17] 0.001887302034774 [GeV] -Cell[13,13] 2.9678377087862e-05 [GeV] -Cell[10,17] 0.00068358161189444 [GeV] -Cell[19,3] 6.2445213261526e-05 [GeV] -Cell[12,19] 3.5822672070935e-06 [GeV] -Cell[9,24] 2.8872650815288e-05 [GeV] -Cell[13,34] 0.00026838038802759 [GeV] -Cell[15,43] 3.9254229865037e-05 [GeV] -Cell[15,38] 0.00022448059741896 [GeV] -Cell[15,39] 0.0018570105526511 [GeV] -Cell[14,10] 0.0006966307430805 [GeV] -Cell[14,3] 7.9669364938582e-06 [GeV] -Cell[14,2] 0.001081988418258 [GeV] -Cell[12,38] 0.001253716075099 [GeV] -Cell[13,8] 9.4580345321447e-06 [GeV] -Cell[10,20] 1.1148438032251e-05 [GeV] -Cell[14,37] 0.00037425149925093 [GeV] -Cell[14,4] 3.089857113082e-05 [GeV] -Cell[14,19] 0.00010910143954095 [GeV] -### Total energy deposition in calorimeter by a source track in 161 cells : 1.5061299873579 (GeV) - -Source track ID 6680 (kaon0L,0.85324689363199[GeV]) at (443.61976117133,-230.65451978727,564.59737040268) -Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[9,41] 6.5395177807659e-07 [GeV] -Cell[14,33] 1.3937549956609e-06 [GeV] -Cell[12,42] 4.7148205339909e-12 [GeV] -Cell[13,32] 0.0069338138132522 [GeV] -Cell[14,32] 8.4683892782778e-07 [GeV] -Cell[14,31] 7.0375995710492e-07 [GeV] -Cell[13,31] 1.3488307886291e-06 [GeV] -Cell[14,44] 0.0023179091083553 [GeV] -Cell[13,27] 6.2925386009738e-07 [GeV] -Cell[13,28] 0.00046793642702989 [GeV] -Cell[13,33] 0.00070281574644468 [GeV] -Cell[14,35] 1.2583525822265e-05 [GeV] -Cell[14,20] 0.0010184056615533 [GeV] -Cell[12,9] 9.993813582696e-07 [GeV] -Cell[12,21] 1.6989415030366e-08 [GeV] -Cell[9,17] 0.00024331193410308 [GeV] -Cell[9,36] 8.6378424311988e-06 [GeV] -Cell[11,18] 2.5440177213454e-05 [GeV] -Cell[13,47] 0.0017565762340547 [GeV] -Cell[13,46] 1.2699788291343e-05 [GeV] -Cell[13,0] 0.0005021543557184 [GeV] -Cell[15,45] 2.5956404203953e-07 [GeV] -Cell[15,46] 0.00019230743670482 [GeV] -Cell[15,17] 0.00014927202852232 [GeV] -Cell[13,20] 0.0023312961756182 [GeV] -Cell[13,21] 0.0012348627841338 [GeV] -Cell[12,43] 0.0016790719377988 [GeV] -Cell[13,43] 0.029656872615491 [GeV] -Cell[13,14] 3.6314354604997e-05 [GeV] -Cell[14,47] 0.013004902047627 [GeV] -Cell[15,47] 1.3668199538984e-05 [GeV] -Cell[15,0] 0.0026779886509171 [GeV] -Cell[12,45] 0.001713104337574 [GeV] -Cell[12,44] 0.018510043243046 [GeV] -Cell[12,18] 8.7333167653014e-06 [GeV] -Cell[11,19] 1.42401377434e-05 [GeV] -Cell[11,44] 3.1137165700784e-05 [GeV] -Cell[14,21] 4.5907055437056e-09 [GeV] -Cell[13,38] 1.5794108512978e-05 [GeV] -Cell[13,44] 0.3413192672581 [GeV] -Cell[13,45] 0.035611949954681 [GeV] -Cell[12,41] 0.0014432148780431 [GeV] -Cell[12,40] 1.1713535321178e-05 [GeV] -Cell[13,42] 0.0097308432917851 [GeV] -Cell[12,20] 0.00086497089026557 [GeV] -Cell[8,18] 0.00065137385446758 [GeV] -Cell[14,46] 0.0031765122227296 [GeV] -Cell[13,41] 0.00028553182871156 [GeV] -Cell[14,0] 0.0014092205989265 [GeV] -Cell[15,36] 0.0016010154995046 [GeV] -Cell[16,36] 0.0008851433190739 [GeV] -Cell[13,39] 0.00044068724055819 [GeV] -Cell[18,6] 1.8032522488397e-05 [GeV] -Cell[15,16] 0.001624714370738 [GeV] -Cell[15,35] 2.8805797162931e-05 [GeV] -Cell[16,33] 0.0028325758007916 [GeV] -Cell[16,45] 4.6566128730774e-13 [GeV] -Cell[15,22] 1.1733343020524e-05 [GeV] -Cell[15,37] 2.4730793549679e-05 [GeV] -Cell[14,23] 0.018894639087608 [GeV] -Cell[14,22] 0.00079410766891029 [GeV] -Cell[13,40] 1.5003892253617e-05 [GeV] -Cell[13,13] 1.5849867304496e-07 [GeV] -Cell[10,17] 9.2157043337693e-06 [GeV] -Cell[12,19] 0.00013691281510887 [GeV] -Cell[14,19] 0.0025068330212962 [GeV] -Cell[15,21] 1.403073820984e-05 [GeV] -Cell[18,5] 4.8164521331273e-09 [GeV] -Cell[13,29] 0.00012486455753229 [GeV] -Cell[13,19] 0.00085404614704885 [GeV] -Cell[10,16] 9.2125858472173e-05 [GeV] -Cell[10,18] 2.610613591969e-11 [GeV] -Cell[14,45] 1.1000114522176e-05 [GeV] -### Total energy deposition in calorimeter by a source track in 73 cells : 0.51070373002203 (GeV) - -Source track ID 6674 (pi+,4.2124483954357[GeV]) at (194.24995909407,-460.72437898591,515.82645880756) -Original primary track ID 8 (unknown,11.672977589613[GeV]) -Cell[10,11] 2.893473720178e-09 [GeV] -Cell[11,39] 0.0014336681134494 [GeV] -Cell[11,40] 0.011424535212993 [GeV] -Cell[11,42] 0.00034515218665047 [GeV] -Cell[11,43] 0.0010410125929793 [GeV] -Cell[12,36] 0.00171612499985 [GeV] -Cell[15,20] 6.9545640144497e-09 [GeV] -Cell[9,40] 0.0073101796466365 [GeV] -Cell[5,34] 8.4906258853152e-06 [GeV] -Cell[13,35] 0.0048113410183167 [GeV] -Cell[12,34] 7.3649567866596e-09 [GeV] -Cell[14,33] 1.00110478229e-07 [GeV] -Cell[12,42] 0.0038936892719194 [GeV] -Cell[12,35] 3.8552971091121e-09 [GeV] -Cell[12,32] 5.4025551071391e-07 [GeV] -Cell[13,32] 0.001986021159356 [GeV] -Cell[14,32] 0.00070013581084731 [GeV] -Cell[15,32] 0.0033784258335008 [GeV] -Cell[16,32] 0.0157868703012 [GeV] -Cell[16,31] 0.011490158954774 [GeV] -Cell[15,31] 0.00077218999450804 [GeV] -Cell[15,30] 0.00019619685672797 [GeV] -Cell[14,44] 1.1126979254186e-05 [GeV] -Cell[16,30] 0.00029199087517406 [GeV] -Cell[14,40] 0.0053820736483531 [GeV] -Cell[13,33] 0.012851453281476 [GeV] -Cell[14,35] 0.00037277572035225 [GeV] -Cell[19,0] 0.00046377742823631 [GeV] -Cell[11,47] 0.00035823679851524 [GeV] -Cell[13,9] 0.0044947324708545 [GeV] -Cell[12,33] 0.0013931589694526 [GeV] -Cell[12,9] 0.0029893533675151 [GeV] -Cell[12,8] 0.01067226333461 [GeV] -Cell[14,8] 4.8766433529522e-05 [GeV] -Cell[11,20] 3.2662646844983e-09 [GeV] -Cell[16,29] 3.082003217969e-09 [GeV] -Cell[16,28] 0.0057249936546703 [GeV] -Cell[14,41] 0.0025901955817833 [GeV] -Cell[12,21] 4.7730281949043e-12 [GeV] -Cell[11,27] 2.216973632585e-08 [GeV] -Cell[10,27] 3.9352803685233e-07 [GeV] -Cell[12,39] 0.10555414166803 [GeV] -Cell[3,28] 5.3240000852384e-11 [GeV] -Cell[2,44] 7.3923729360104e-12 [GeV] -Cell[12,10] 0.00098305636156363 [GeV] -Cell[12,11] 1.650643182802e-05 [GeV] -Cell[11,37] 2.4676125100314e-06 [GeV] -Cell[10,40] 0.004969330832853 [GeV] -Cell[10,41] 0.0025620796254993 [GeV] -Cell[14,7] 9.5268098048109e-06 [GeV] -Cell[9,13] 2.5459585731369e-07 [GeV] -Cell[13,46] 0.0026115159480954 [GeV] -Cell[11,38] 1.3274917433705e-05 [GeV] -Cell[15,45] 1.5270096278982e-05 [GeV] -Cell[15,7] 6.5665386649584e-05 [GeV] -Cell[13,2] 3.5565458347264e-08 [GeV] -Cell[13,3] 3.6730749877734e-07 [GeV] -Cell[12,43] 7.7072581916582e-10 [GeV] -Cell[13,43] 0.00060374499484806 [GeV] -Cell[12,37] 0.0051481358179003 [GeV] -Cell[13,4] 0.00065680742437871 [GeV] -Cell[10,1] 7.0869669457352e-08 [GeV] -Cell[11,1] 2.2003982735441e-08 [GeV] -Cell[11,0] 0.00058238387010977 [GeV] -Cell[4,28] 5.3724108762481e-06 [GeV] -Cell[4,27] 3.4245059941895e-07 [GeV] -Cell[2,45] 0.00084638885451238 [GeV] -Cell[2,46] 9.8463368485682e-06 [GeV] -Cell[4,29] 2.4764215451114e-06 [GeV] -Cell[0,1] 6.2984353280626e-07 [GeV] -Cell[11,41] 0.0025523856630101 [GeV] -Cell[17,26] 0.0070174409669312 [GeV] -Cell[15,33] 5.7864193470209e-05 [GeV] -Cell[14,38] 0.0037873311793242 [GeV] -Cell[18,20] 1.8550354070612e-09 [GeV] -Cell[14,21] 1.6571985906921e-07 [GeV] -Cell[13,36] 0.014889635220675 [GeV] -Cell[13,37] 0.027793218264564 [GeV] -Cell[13,38] 0.86868443893909 [GeV] -Cell[12,13] 2.0546829968225e-05 [GeV] -Cell[15,27] 3.4868133980126e-09 [GeV] -Cell[15,26] 0.0027350481038363 [GeV] -Cell[12,41] 0.0041441928092694 [GeV] -Cell[12,40] 0.016519035485304 [GeV] -Cell[15,5] 8.1590536865406e-07 [GeV] -Cell[13,42] 3.3153919918732e-05 [GeV] -Cell[12,20] 9.523911724159e-06 [GeV] -Cell[10,37] 5.4109000484459e-07 [GeV] -Cell[14,13] 0.0015492318058994 [GeV] -Cell[14,12] 7.7968179539312e-09 [GeV] -Cell[14,42] 1.5825343658435e-05 [GeV] -Cell[13,41] 0.016171338008801 [GeV] -Cell[14,39] 0.1099786790764 [GeV] -Cell[18,0] 0.00065844474159189 [GeV] -Cell[16,27] 0.013241208477162 [GeV] -Cell[16,2] 0.0017213462403512 [GeV] -Cell[15,36] 0.0022317927741601 [GeV] -Cell[15,2] 6.2199399211522e-06 [GeV] -Cell[13,5] 1.4358597582032e-09 [GeV] -Cell[13,39] 0.47535085791776 [GeV] -Cell[15,8] 1.5161872931458e-05 [GeV] -Cell[15,6] 0.0025295960200098 [GeV] -Cell[10,39] 0.00041337410581936 [GeV] -Cell[16,33] 3.6899194108855e-05 [GeV] -Cell[14,34] 7.1517028845847e-07 [GeV] -Cell[16,26] 0.025168214121262 [GeV] -Cell[16,25] 0.00037280069972542 [GeV] -Cell[15,28] 2.0934989466923e-06 [GeV] -Cell[15,40] 1.8149148672819e-10 [GeV] -Cell[17,27] 0.00051102431188143 [GeV] -Cell[14,6] 4.0117705980947e-05 [GeV] -Cell[15,37] 0.00042774177976742 [GeV] -Cell[13,40] 0.2363610849744 [GeV] -Cell[10,17] 1.1006777640432e-09 [GeV] -Cell[13,34] 0.0002853484686575 [GeV] -Cell[15,38] 0.00086353452817923 [GeV] -Cell[15,39] 0.00048786285809058 [GeV] -Cell[12,38] 0.12450937627465 [GeV] -Cell[14,37] 0.01511471307833 [GeV] -Cell[14,4] 1.904451844166e-05 [GeV] -Cell[18,18] 3.1910369929392e-05 [GeV] -Cell[18,19] 7.4765096413785e-06 [GeV] -Cell[19,21] 3.4897946403362e-05 [GeV] -Cell[10,4] 2.2236557560973e-07 [GeV] -Cell[12,3] 3.6985671613365e-08 [GeV] -Cell[14,36] 0.00070239106069246 [GeV] -Cell[17,18] 0.00012520271174731 [GeV] -Cell[17,19] 8.2721817307174e-10 [GeV] -Cell[4,26] 5.4279060844237e-05 [GeV] -Cell[15,44] 1.635538355913e-05 [GeV] -### Total energy deposition in calorimeter by a source track in 130 cells : 2.2159016646855 (GeV) - -Source track ID 3830 (kaon+,2.4805761836792[GeV]) at (286.55027028468,-409.74253208543,-438.03086552758) +Source track ID 3983 (kaon+,2.4764383994443[GeV]) at (287.77488182017,-408.88337871988,-439.91979756579) Original primary track ID 25 (unknown,7.7728456153487[GeV]) -Cell[8,9] 0.00099774693410859 [GeV] -Cell[8,8] 0.0017225536441064 [GeV] -Cell[7,9] 0.00018350382115807 [GeV] -Cell[7,8] 0.0017381577434333 [GeV] -Cell[6,40] 0.0080715726153055 [GeV] -Cell[7,35] 2.2708312712894e-08 [GeV] -Cell[6,41] 0.018966157669618 [GeV] -Cell[7,42] 0.22547924416877 [GeV] -Cell[7,43] 0.006687313331331 [GeV] -Cell[6,32] 3.0184964562068e-05 [GeV] -Cell[8,38] 0.00082045368251909 [GeV] -Cell[5,41] 3.7890562671237e-06 [GeV] -Cell[7,41] 0.29903447738209 [GeV] -Cell[5,44] 0.00036121938406711 [GeV] -Cell[4,35] 0.00099687586031739 [GeV] -Cell[7,39] 0.014534490183946 [GeV] -Cell[5,45] 0.00056152107873288 [GeV] -Cell[6,37] 0.00015473154608082 [GeV] -Cell[8,45] 0.0012995389382631 [GeV] -Cell[8,36] 0.00050382337093959 [GeV] -Cell[10,32] 1.2492874579038e-05 [GeV] -Cell[8,26] 1.0014763347499e-08 [GeV] -Cell[8,37] 0.0013259198054922 [GeV] -Cell[8,0] 0.00021828587116837 [GeV] -Cell[6,7] 0.00033469290411404 [GeV] -Cell[8,39] 0.0002574458600775 [GeV] -Cell[5,38] 0.08948874088028 [GeV] -Cell[6,34] 3.5535064031137e-05 [GeV] -Cell[4,36] 0.0037045085058784 [GeV] -Cell[2,37] 3.1135328490564e-05 [GeV] -Cell[10,42] 0.0015195487741987 [GeV] -Cell[6,10] 1.3179141774344e-08 [GeV] -Cell[4,40] 3.3811750763562e-06 [GeV] -Cell[1,39] 0.0021420823782672 [GeV] -Cell[8,25] 0.0004759092781992 [GeV] -Cell[11,32] 1.0928065050393e-05 [GeV] -Cell[12,32] 6.6724914737279e-05 [GeV] -Cell[11,47] 3.913592081517e-10 [GeV] -Cell[12,24] 2.4899678672909e-05 [GeV] -Cell[12,25] 1.9147847186787e-06 [GeV] -Cell[8,32] 7.105729309842e-09 [GeV] -Cell[9,15] 0.0010355626752784 [GeV] -Cell[5,8] 1.1231842479901e-05 [GeV] -Cell[5,0] 1.7457966499251e-05 [GeV] -Cell[3,28] 5.6179614330176e-05 [GeV] -Cell[3,29] 1.2818073941162e-05 [GeV] -Cell[7,36] 0.000705623600438 [GeV] -Cell[0,37] 8.404141453866e-10 [GeV] -Cell[8,41] 0.00043175927142648 [GeV] -Cell[8,40] 7.4794559168367e-10 [GeV] -Cell[7,37] 1.7107439999563e-05 [GeV] -Cell[7,38] 0.0057902024238208 [GeV] -Cell[6,38] 0.00048215804847905 [GeV] -Cell[10,43] 0.00098398037094556 [GeV] -Cell[5,47] 6.1651340910885e-05 [GeV] -Cell[9,43] 0.0021602029713138 [GeV] -Cell[9,42] 0.0061641278145757 [GeV] -Cell[6,28] 2.8981044904413e-06 [GeV] -Cell[5,21] 0.00027478990327893 [GeV] -Cell[5,20] 3.4212858195701e-05 [GeV] -Cell[5,36] 1.0965937631227e-06 [GeV] -Cell[8,44] 0.0036848677126521 [GeV] -Cell[2,35] 7.2330590128331e-06 [GeV] -Cell[1,16] 9.2039883020334e-07 [GeV] -Cell[1,15] 2.204880292993e-07 [GeV] -Cell[6,31] 2.0131302881055e-05 [GeV] -Cell[5,40] 2.0047877711477e-05 [GeV] -Cell[0,40] 4.4825958866568e-06 [GeV] -Cell[3,39] 0.015906382547121 [GeV] -Cell[3,40] 0.0014751682785002 [GeV] -Cell[2,39] 0.00041540827332267 [GeV] -Cell[2,40] 0.00050282062154679 [GeV] -Cell[1,18] 0.0018524052399491 [GeV] -Cell[0,38] 0.01167655849491 [GeV] -Cell[0,41] 4.983833845472e-06 [GeV] -Cell[0,39] 0.0027247281115269 [GeV] -Cell[1,40] 0.0085822447378833 [GeV] -Cell[1,37] 3.6906091015453e-05 [GeV] -Cell[1,38] 0.00069253965294297 [GeV] -Cell[5,5] 3.0895698087988e-05 [GeV] -Cell[3,35] 1.2388186160024e-05 [GeV] -Cell[7,44] 4.1937778746615e-08 [GeV] -Cell[4,37] 0.0013651759399314 [GeV] -Cell[2,18] 8.3632489440788e-07 [GeV] -Cell[2,36] 0.0018721256466484 [GeV] -Cell[1,41] 0.00095179142160418 [GeV] -Cell[4,29] 0.001261005110384 [GeV] -Cell[5,37] 0.00055698116635153 [GeV] -Cell[10,31] 8.2987358036917e-06 [GeV] -Cell[6,44] 7.0629649079024e-05 [GeV] -Cell[6,35] 1.3253807555884e-06 [GeV] -Cell[4,38] 0.054618438728545 [GeV] -Cell[6,36] 2.2364347273651e-07 [GeV] -Cell[5,10] 0.0009540805755171 [GeV] -Cell[5,9] 8.0773916561157e-06 [GeV] -Cell[5,4] 0.0009090463410148 [GeV] -Cell[6,43] 0.00094392305874669 [GeV] -Cell[4,39] 0.0012237204128065 [GeV] -Cell[11,46] 3.5960597278972e-07 [GeV] -Cell[8,19] 0.00033391080618605 [GeV] -Cell[9,44] 0.0010609331541597 [GeV] -Cell[9,25] 2.0592215034412e-05 [GeV] -Cell[7,40] 0.96723150747533 [GeV] -Cell[6,6] 5.3599884267896e-08 [GeV] -Cell[6,27] 3.0308532825529e-07 [GeV] -Cell[8,42] 0.00065082694152227 [GeV] -Cell[8,43] 0.0043557138689294 [GeV] -Cell[6,42] 0.0044066733941116 [GeV] -Cell[6,39] 0.0018050680877448 [GeV] -Cell[5,39] 0.0016677954679855 [GeV] -Cell[6,45] 3.806842607446e-06 [GeV] -Cell[5,46] 1.017244940158e-07 [GeV] -Cell[7,16] 9.0342254895859e-07 [GeV] -Cell[5,26] 6.334524455724e-06 [GeV] -Cell[5,25] 4.1193497785343e-06 [GeV] -Cell[5,27] 1.8305953468598e-06 [GeV] -Cell[6,9] 9.1963016602676e-06 [GeV] -Cell[6,8] 3.8160496915225e-06 [GeV] -### Total energy deposition in calorimeter by a source track in 118 cells : 1.7940055186001 (GeV) - -Source track ID 3982 (gamma,0.19649521790461[GeV]) at (-493.90321008629,77.843555073385,489.46552399877) +Cell[6,11] 3.8987451633147e-05 [GeV] +Cell[6,42] 0.0073103805303707 [GeV] +Cell[8,8] 0.0001004738024709 [GeV] +Cell[7,43] 0.009094359720216 [GeV] +Cell[8,15] 5.7712167674026e-05 [GeV] +Cell[7,15] 1.5366616894767e-05 [GeV] +Cell[7,16] 0.00055211847005091 [GeV] +Cell[9,41] 0.00029204697106525 [GeV] +Cell[8,39] 0.0031702426562792 [GeV] +Cell[5,43] 0.00027281098228514 [GeV] +Cell[9,45] 2.6916655799141e-05 [GeV] +Cell[5,40] 0.029756593626823 [GeV] +Cell[6,40] 0.002500721543106 [GeV] +Cell[5,39] 0.0041709707542019 [GeV] +Cell[6,39] 2.4856616732905e-08 [GeV] +Cell[5,32] 0.0012287468061028 [GeV] +Cell[7,38] 0.00052235030182067 [GeV] +Cell[5,25] 1.6171002277702e-05 [GeV] +Cell[4,39] 0.00065238697317966 [GeV] +Cell[4,40] 7.350102707278e-06 [GeV] +Cell[9,16] 2.5749144645488e-05 [GeV] +Cell[8,31] 5.4838543292135e-08 [GeV] +Cell[4,31] 0.0049534597867598 [GeV] +Cell[6,30] 2.3015838814899e-07 [GeV] +Cell[7,41] 0.036792834894606 [GeV] +Cell[9,38] 1.7026749497745e-05 [GeV] +Cell[9,39] 0.0005345715584026 [GeV] +Cell[3,8] 0.00013023302560975 [GeV] +Cell[18,4] 3.2671468215995e-07 [GeV] +Cell[11,31] 4.3705963556704e-06 [GeV] +Cell[18,0] 5.4805423133075e-09 [GeV] +Cell[11,30] 0.00027355485519161 [GeV] +Cell[11,23] 5.9516923793126e-06 [GeV] +Cell[11,24] 3.2782469352242e-06 [GeV] +Cell[8,45] 9.2285698283376e-06 [GeV] +Cell[13,44] 2.4163846170495e-06 [GeV] +Cell[11,38] 0.0018189476847458 [GeV] +Cell[11,39] 4.1896548937075e-06 [GeV] +Cell[8,17] 0.00036450937875065 [GeV] +Cell[7,17] 9.7864426192245e-05 [GeV] +Cell[8,30] 1.717550912872e-08 [GeV] +Cell[8,40] 0.0018909429306898 [GeV] +Cell[8,38] 0.0013465187394349 [GeV] +Cell[8,16] 0.0011511841515088 [GeV] +Cell[12,7] 6.5275307610136e-05 [GeV] +Cell[7,39] 0.17191007153656 [GeV] +Cell[5,13] 1.3484386727214e-08 [GeV] +Cell[4,17] 0.00094011506506308 [GeV] +Cell[10,30] 0.00053266556207905 [GeV] +Cell[10,28] 2.952139614456e-05 [GeV] +Cell[5,17] 0.00026267174075883 [GeV] +Cell[7,44] 0.0045224798837003 [GeV] +Cell[6,24] 6.6652519162744e-06 [GeV] +Cell[3,30] 7.2399301861878e-06 [GeV] +Cell[10,8] 1.4193346546108e-05 [GeV] +Cell[8,35] 3.8019948347937e-05 [GeV] +Cell[7,34] 0.00083621847222856 [GeV] +Cell[4,16] 0.0027974364035276 [GeV] +Cell[9,37] 1.0538348578848e-07 [GeV] +Cell[8,43] 0.0025902830351615 [GeV] +Cell[3,6] 7.2759576141834e-13 [GeV] +Cell[10,29] 0.0015592758540263 [GeV] +Cell[1,21] 1.002340237028e-05 [GeV] +Cell[4,20] 0.0049471943220104 [GeV] +Cell[3,19] 0.0001179497285425 [GeV] +Cell[5,41] 0.20829977986762 [GeV] +Cell[5,42] 0.012661637667139 [GeV] +Cell[6,41] 0.014397687708717 [GeV] +Cell[6,43] 4.0783872827888e-07 [GeV] +Cell[8,2] 0.00061395848734625 [GeV] +Cell[6,15] 8.4590917731475e-07 [GeV] +Cell[6,16] 0.0011295292996953 [GeV] +Cell[5,18] 0.00013173726259504 [GeV] +Cell[4,18] 4.6341505949385e-06 [GeV] +Cell[4,21] 0.0034903298953969 [GeV] +Cell[4,32] 9.3423295766115e-12 [GeV] +Cell[4,11] 3.3006625244525e-08 [GeV] +Cell[0,19] 8.9845042966772e-06 [GeV] +Cell[4,23] 5.6742218248473e-09 [GeV] +Cell[3,45] 0.00058117408876888 [GeV] +Cell[4,46] 2.862236465262e-08 [GeV] +Cell[3,46] 9.7843653464565e-05 [GeV] +Cell[2,19] 0.0031090363279623 [GeV] +Cell[3,44] 6.1753812496136e-05 [GeV] +Cell[5,12] 0.011469251697339 [GeV] +Cell[6,12] 4.2205446370644e-05 [GeV] +Cell[6,13] 0.0034542910951695 [GeV] +Cell[4,43] 1.3277721367331e-06 [GeV] +Cell[3,12] 0.00044059812371609 [GeV] +Cell[3,13] 5.803258297874e-07 [GeV] +Cell[4,13] 3.0171434673321e-08 [GeV] +Cell[3,7] 0.0011567085606177 [GeV] +Cell[4,9] 1.1417036759667e-05 [GeV] +Cell[4,22] 7.7411141319317e-10 [GeV] +Cell[3,10] 1.9295799662359e-05 [GeV] +Cell[2,10] 2.5994628762191e-06 [GeV] +Cell[2,16] 0.00042422519200568 [GeV] +Cell[2,18] 2.5383897536813e-08 [GeV] +Cell[2,17] 9.7353714227211e-06 [GeV] +Cell[4,42] 0.097473945060105 [GeV] +Cell[2,15] 0.0017810719770805 [GeV] +Cell[6,0] 0.0035488250180563 [GeV] +Cell[13,45] 0.00037237583927663 [GeV] +Cell[13,46] 9.0800429170486e-06 [GeV] +Cell[14,44] 8.1781763583422e-12 [GeV] +Cell[8,23] 8.5620180470869e-08 [GeV] +Cell[3,11] 0.0011249011396081 [GeV] +Cell[7,18] 2.9444957035594e-06 [GeV] +Cell[8,18] 9.8698256203875e-05 [GeV] +Cell[7,19] 2.7476702628064e-06 [GeV] +Cell[3,15] 0.00021266003087271 [GeV] +Cell[3,14] 0.0013975925583339 [GeV] +Cell[8,46] 0.00074769839526436 [GeV] +Cell[6,19] 4.1750323475753e-08 [GeV] +Cell[8,4] 0.00033837974235826 [GeV] +Cell[10,36] 3.5618228139356e-08 [GeV] +Cell[7,40] 0.84835099187825 [GeV] +Cell[5,24] 0.00058339019818072 [GeV] +Cell[7,42] 0.0072628816086727 [GeV] +Cell[5,38] 0.0043243118506486 [GeV] +Cell[8,41] 0.065408238400606 [GeV] +Cell[8,22] 5.7859361113515e-06 [GeV] +Cell[14,29] 1.0590205783956e-07 [GeV] +Cell[7,47] 0.00096439903479529 [GeV] +Cell[4,8] 0.0050518582025194 [GeV] +Cell[8,3] 0.0059324633287584 [GeV] +Cell[8,42] 0.0025857683294511 [GeV] +Cell[4,27] 0.00067922563863424 [GeV] +Cell[10,7] 1.0591507270874e-06 [GeV] +Cell[4,10] 1.4569469592516e-06 [GeV] +Cell[2,11] 0.00011707652300413 [GeV] +Cell[8,37] 1.0414171265438e-07 [GeV] +Cell[19,47] 3.0407224782493e-05 [GeV] +Cell[18,47] 2.3542087213855e-06 [GeV] +Cell[4,41] 0.0008718586551458 [GeV] +### Total energy deposition in calorimeter by a source track in 135 cells : 1.6113081382683 (GeV) + +Source track ID 4320 (e-,0.11890717857519[GeV]) at (-249.03980270899,-433.56565439004,1301.0205781444) Original primary track ID 25 (unknown,7.7728456153487[GeV]) -Cell[12,22] 0.17059033948738 [GeV] -Cell[16,31] 0.0039803753260693 [GeV] -Cell[17,31] 0.00049532255947647 [GeV] -Cell[12,23] 0.016621518504551 [GeV] -Cell[13,7] 0.00013033226133786 [GeV] -Cell[13,22] 0.0023787682963993 [GeV] -Cell[14,39] 0.00051099891 [GeV] -Cell[16,38] 0.0011029963923927 [GeV] -Cell[13,6] 0.00068456616700618 [GeV] -### Total energy deposition in calorimeter by a source track in 9 cells : 0.19649521790461 (GeV) - -Source track ID 3983 (gamma,0.89164369738079[GeV]) at (-456.12361673002,204.82003383734,886.89513253556) +Cell[16,32] 0.11318229817481 [GeV] +Cell[17,32] 0.0036951778617201 [GeV] +Cell[16,31] 0.00051099891 [GeV] +Cell[16,19] 0.00051099891 [GeV] +Cell[15,18] 0.00049670580865694 [GeV] +### Total energy deposition in calorimeter by a source track in 5 cells : 0.11839617966519 (GeV) + +Source track ID 4322 (gamma,0.0006403869070416[GeV]) at (-493.78045387324,78.61846712279,491.49211441177) Original primary track ID 25 (unknown,7.7728456153487[GeV]) -Cell[15,20] 0.03589421436393 [GeV] -Cell[14,20] 0.80362230753811 [GeV] -Cell[16,3] 0.0015005535218995 [GeV] -Cell[17,43] 0.0012427446859654 [GeV] -Cell[15,19] 0.032732745448374 [GeV] -Cell[14,21] 0.012570834661657 [GeV] -Cell[14,5] 0.0016024235091263 [GeV] -Cell[14,0] 0.00049320362528659 [GeV] -Cell[14,19] 0.00059463710429423 [GeV] -Cell[15,21] 0.0013900329222578 [GeV] -### Total energy deposition in calorimeter by a source track in 10 cells : 0.8916436973809 (GeV) - -Source track ID 3968 (pi-,0.85438916861908[GeV]) at (-165.12857957573,471.94549707281,873.43461106998) +Cell[12,22] 0.0006403869070416 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0006403869070416 (GeV) + +Source track ID 4324 (gamma,0.00073480941025691[GeV]) at (-430.06032978969,255.04531507398,536.10112605306) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[12,19] 0.00073480941025691 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00073480941025691 (GeV) + +Source track ID 4325 (gamma,0.0023549278796005[GeV]) at (-427.2998965021,259.64359889914,563.46997211055) Original primary track ID 25 (unknown,7.7728456153487[GeV]) -Cell[10,12] 1.6187550500035e-09 [GeV] -Cell[12,22] 5.5942105245776e-07 [GeV] -Cell[13,30] 5.0272915686946e-06 [GeV] -Cell[16,31] 1.6307778423652e-08 [GeV] -Cell[13,31] 0.00059038203617722 [GeV] -Cell[12,31] 3.1282514100894e-08 [GeV] -Cell[14,43] 8.0092510376517e-05 [GeV] -Cell[13,27] 0.00022799829042833 [GeV] -Cell[14,26] 2.2154315324769e-06 [GeV] -Cell[14,27] 6.6885545380842e-05 [GeV] -Cell[14,18] 0.00024988299683002 [GeV] -Cell[14,16] 0.0039441125189364 [GeV] -Cell[13,9] 0.0022389085528593 [GeV] -Cell[11,22] 0.002341066504649 [GeV] -Cell[13,10] 0.0049374869993773 [GeV] -Cell[16,28] 1.8043446267257e-05 [GeV] -Cell[12,39] 0.0020068971268013 [GeV] -Cell[1,43] 0.00075941448628142 [GeV] -Cell[14,7] 2.0603689248674e-05 [GeV] -Cell[16,15] 9.662305819802e-08 [GeV] -Cell[16,42] 0.0078147006940434 [GeV] -Cell[15,14] 0.0012794176333251 [GeV] -Cell[14,17] 0.00022201089852774 [GeV] -Cell[13,11] 4.1927052848223e-08 [GeV] -Cell[13,47] 1.2058882421115e-05 [GeV] -Cell[13,0] 0.0020662073738799 [GeV] -Cell[17,42] 7.8552051272595e-05 [GeV] -Cell[17,43] 7.9198096354958e-06 [GeV] -Cell[16,41] 5.7759461924434e-10 [GeV] -Cell[16,39] 0.00051099891 [GeV] -Cell[15,17] 0.0028029004937691 [GeV] -Cell[15,7] 5.6096455082297e-06 [GeV] -Cell[13,14] 1.455310054007e-05 [GeV] -Cell[13,16] 1.3977274647914e-07 [GeV] -Cell[12,2] 1.8475233994195e-05 [GeV] -Cell[1,44] 0.002608854044192 [GeV] -Cell[1,45] 0.0010192141704738 [GeV] -Cell[0,45] 2.1164704230614e-07 [GeV] -Cell[0,43] 0.00063566181197219 [GeV] -Cell[15,1] 2.644365595188e-07 [GeV] -Cell[14,38] 2.1428026900594e-07 [GeV] -Cell[14,14] 0.28088801576111 [GeV] -Cell[13,38] 0.0012721144955052 [GeV] -Cell[15,27] 0.00099035450614244 [GeV] -Cell[12,40] 0.0025575427843134 [GeV] -Cell[9,46] 6.3096144003794e-08 [GeV] -Cell[15,13] 0.0016309306760607 [GeV] -Cell[15,12] 4.905786206109e-06 [GeV] -Cell[15,11] 7.5394540317575e-09 [GeV] -Cell[14,13] 0.014210686307176 [GeV] -Cell[14,12] 0.0012509714125736 [GeV] -Cell[14,42] 2.0020786905661e-07 [GeV] -Cell[13,41] 0.00045979559179628 [GeV] -Cell[14,39] 8.1868693314391e-08 [GeV] -Cell[16,27] 3.5462439271214e-05 [GeV] -Cell[15,36] 2.3477524518967e-06 [GeV] -Cell[17,39] 1.6613136191154e-05 [GeV] -Cell[18,39] 0.00010993211920504 [GeV] -Cell[13,39] 0.0030049320182294 [GeV] -Cell[15,8] 8.6055404957733e-05 [GeV] -Cell[15,16] 0.11297123655129 [GeV] -Cell[15,15] 0.0067211886663234 [GeV] -Cell[14,15] 0.0047970828310041 [GeV] -Cell[18,30] 0.0017268559116234 [GeV] -Cell[18,29] 4.5164204071853e-06 [GeV] -Cell[15,23] 0.00094429089827918 [GeV] -Cell[12,1] 0.00075216596437508 [GeV] -Cell[15,28] 0.0018944357940229 [GeV] -Cell[15,37] 0.001926056872134 [GeV] -Cell[14,23] 8.9078355813399e-08 [GeV] -Cell[14,25] 6.0459208498287e-07 [GeV] -Cell[13,40] 0.0033829990425293 [GeV] -Cell[15,43] 1.2728734492725e-05 [GeV] -Cell[15,38] 6.5833091866807e-11 [GeV] -Cell[12,38] 0.0013069205495414 [GeV] -Cell[14,19] 8.4160428777977e-06 [GeV] -Cell[15,21] 5.5019976571202e-08 [GeV] -Cell[13,6] 0.0044449586636395 [GeV] -Cell[15,42] 0.00077019907523438 [GeV] -Cell[14,11] 1.1092678035993e-06 [GeV] -Cell[0,44] 1.55250056157e-05 [GeV] -Cell[19,28] 1.2039725232171e-05 [GeV] -Cell[10,3] 2.8737436514348e-07 [GeV] -Cell[19,23] 0.0023737962422525 [GeV] -Cell[19,24] 5.188088187731e-05 [GeV] -Cell[10,13] 1.8176881361114e-05 [GeV] -Cell[15,10] 2.9702664505749e-10 [GeV] -Cell[18,12] 0.00025102148996359 [GeV] -Cell[14,28] 1.4615391555708e-05 [GeV] -Cell[19,6] 1.3478624168783e-08 [GeV] -### Total energy deposition in calorimeter by a source track in 90 cells : 0.48751200978774 (GeV) - -Source track ID 3943 (pi+,0.42831574896074[GeV]) at (-369.35599657484,-337.01060486905,-452.2841953381) +Cell[12,19] 0.0023549278796005 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0023549278796005 (GeV) + +Source track ID 4321 (e+,0.063890197680522[GeV]) at (-457.44870407147,201.8432142613,1211.1626801785) Original primary track ID 25 (unknown,7.7728456153487[GeV]) -Cell[7,28] 0.12118997398064 [GeV] -Cell[7,29] 0.079918033690895 [GeV] -Cell[6,28] 0.063393217717854 [GeV] -Cell[6,27] 0.047290368385447 [GeV] -### Total energy deposition in calorimeter by a source track in 4 cells : 0.31179159377483 (GeV) +Cell[16,20] 0.064401196590522 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.064401196590522 (GeV) -Source track ID 3944 (kaon-,0.64356446204502[GeV]) at (454.17720513183,-209.10061295616,324.9425634166) +Source track ID 4319 (gamma,0.89164369738079[GeV]) at (-456.12361955292,204.82002755088,886.89511331209) Original primary track ID 25 (unknown,7.7728456153487[GeV]) -Cell[11,42] 2.0229993417161e-05 [GeV] -Cell[11,43] 0.00060575310883837 [GeV] -Cell[12,22] 6.2352732338695e-06 [GeV] -Cell[12,42] 0.00015210344600882 [GeV] -Cell[9,45] 5.0568124755159e-05 [GeV] -Cell[13,26] 5.5441870965296e-05 [GeV] -Cell[13,25] 9.2348478544864e-06 [GeV] -Cell[13,28] 0.0021446881111752 [GeV] -Cell[14,18] 5.7723210375116e-08 [GeV] -Cell[12,27] 0.0061609163681575 [GeV] -Cell[11,24] 0.0008675586684063 [GeV] -Cell[12,24] 0.018987538216089 [GeV] -Cell[11,25] 0.0012911288391147 [GeV] -Cell[12,25] 0.035639189083856 [GeV] -Cell[12,26] 0.00049847559566956 [GeV] -Cell[12,23] 0.001806511268076 [GeV] -Cell[11,26] 4.9734715584236e-05 [GeV] -Cell[10,5] 0.00023258578733805 [GeV] -Cell[11,27] 2.255815575154e-07 [GeV] -Cell[10,34] 8.4398454637267e-06 [GeV] -Cell[10,35] 4.3040353339165e-06 [GeV] -Cell[9,2] 0.00071128912552433 [GeV] -Cell[13,47] 0.00083426302123291 [GeV] -Cell[13,46] 0.00072518478061647 [GeV] -Cell[12,47] 1.5025400040827e-05 [GeV] -Cell[12,5] 0.0011243561724821 [GeV] -Cell[12,43] 8.0615107538051e-07 [GeV] -Cell[13,15] 0.0018359139319549 [GeV] -Cell[13,18] 8.5894401569362e-05 [GeV] -Cell[12,6] 8.038641289204e-06 [GeV] -Cell[12,45] 0.0060838940568147 [GeV] -Cell[12,44] 0.00047331870866105 [GeV] -Cell[12,18] 7.9566478052584e-07 [GeV] -Cell[12,46] 0.0076218607360514 [GeV] -Cell[11,44] 0.15793688903303 [GeV] -Cell[11,46] 0.0031511389821249 [GeV] -Cell[11,45] 0.10573589054264 [GeV] -Cell[12,0] 1.2867137519379e-05 [GeV] -Cell[13,44] 1.9182732554441e-05 [GeV] -Cell[13,45] 0.00033214877864941 [GeV] -Cell[9,46] 0.00049879371491045 [GeV] -Cell[9,35] 1.6915873711696e-05 [GeV] -Cell[14,15] 7.7720295121253e-07 [GeV] -Cell[12,1] 9.0943899522244e-09 [GeV] -Cell[12,19] 1.1365159139132e-08 [GeV] -Cell[13,29] 0.0011445207379417 [GeV] -Cell[13,19] 1.3029534784437e-10 [GeV] -Cell[10,4] 2.3333938019732e-05 [GeV] -Cell[14,28] 2.2467492083479e-05 [GeV] -Cell[9,47] 3.759103739867e-06 [GeV] -Cell[13,23] 9.3008566182107e-11 [GeV] -### Total energy deposition in calorimeter by a source track in 51 cells : 0.35701026724893 (GeV) - -Source track ID 3941 (gamma,0.062293140479318[GeV]) at (-277.09241507831,416.19682063426,226.70073871929) +Cell[15,33] 0.00078433693499129 [GeV] +Cell[9,32] 0.00045270355459886 [GeV] +Cell[15,35] 0.0008917595548724 [GeV] +Cell[14,19] 0.0024983313498758 [GeV] +Cell[19,3] 0.00089213775693107 [GeV] +Cell[17,32] 0.00051099891 [GeV] +Cell[13,26] 0.0013894665867391 [GeV] +Cell[13,36] 0.0019049379863258 [GeV] +Cell[12,43] 0.00029806620373247 [GeV] +Cell[11,38] 0.00051099891 [GeV] +Cell[11,39] 0.00045249844265813 [GeV] +Cell[12,1] 1.8334888746949e-06 [GeV] +Cell[18,35] 0.00057145778805905 [GeV] +Cell[10,1] 0.00051099891 [GeV] +Cell[13,34] 0.00063338172030521 [GeV] +Cell[13,35] 0.0024333443609576 [GeV] +Cell[14,47] 0.00051099891 [GeV] +Cell[15,0] 0.00051099891 [GeV] +Cell[16,36] 0.0010615110637141 [GeV] +Cell[14,7] 0.00068957696003832 [GeV] +Cell[17,10] 0.0021328747444136 [GeV] +Cell[11,1] 0.0004990733930678 [GeV] +Cell[12,2] 1.3895961334356e-05 [GeV] +Cell[11,2] 0.00011494108540683 [GeV] +Cell[15,20] 0.0014645943106864 [GeV] +Cell[14,35] 0.0011900006792533 [GeV] +Cell[14,6] 0.0010808316206192 [GeV] +Cell[14,20] 0.81764665387333 [GeV] +Cell[14,21] 0.036032072031093 [GeV] +Cell[14,22] 0.00045606981303508 [GeV] +Cell[14,33] 3.5234919753934e-05 [GeV] +Cell[16,39] 0.0017668665609488 [GeV] +### Total energy deposition in calorimeter by a source track in 32 cells : 0.87994344729561 (GeV) + +Source track ID 4285 (e-,0.00061672385065949[GeV]) at (-73.353141633948,494.59004904307,648.36883326293) Original primary track ID 25 (unknown,7.7728456153487[GeV]) -Cell[11,16] 0.058444245502946 [GeV] -Cell[12,41] 0.00060316009138784 [GeV] -Cell[10,39] 0.00051099891 [GeV] -Cell[5,35] 0.0027347359749842 [GeV] -### Total energy deposition in calorimeter by a source track in 4 cells : 0.062293140479318 (GeV) +Cell[13,13] 0.00010519271017293 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00010519271017293 (GeV) -Source track ID 3942 (gamma,0.18169391742921[GeV]) at (418.45378485768,273.67212122955,279.3434350034) +Source track ID 4275 (pi-,0.85394426268974[GeV]) at (-165.55802966906,471.79501779067,873.66387667511) Original primary track ID 25 (unknown,7.7728456153487[GeV]) -Cell[11,4] 0.18010202725283 [GeV] -Cell[11,5] 0.00040151891431374 [GeV] -Cell[12,5] 0.001190371262062 [GeV] -### Total energy deposition in calorimeter by a source track in 3 cells : 0.18169391742921 (GeV) +Cell[8,0] 8.1950875173789e-06 [GeV] +Cell[10,41] 7.9563469626009e-09 [GeV] +Cell[14,19] 0.0043478961151862 [GeV] +Cell[16,7] 1.8827972175927e-05 [GeV] +Cell[12,30] 0.0021834154359229 [GeV] +Cell[13,36] 0.0006575081875211 [GeV] +Cell[12,1] 0.00072359623197303 [GeV] +Cell[14,13] 0.0022923119032134 [GeV] +Cell[14,12] 1.6001273710572e-05 [GeV] +Cell[10,1] 1.4949182514101e-09 [GeV] +Cell[15,27] 9.9739642044369e-05 [GeV] +Cell[16,8] 2.8783953041284e-05 [GeV] +Cell[7,2] 7.3855274662492e-05 [GeV] +Cell[7,1] 0.00036469479969901 [GeV] +Cell[11,3] 4.3603076625004e-05 [GeV] +Cell[13,38] 1.1272229345423e-06 [GeV] +Cell[14,44] 0.00018140407813883 [GeV] +Cell[14,45] 3.79957142286e-07 [GeV] +Cell[14,46] 0.00050547163368276 [GeV] +Cell[11,4] 0.00063286095828619 [GeV] +Cell[15,23] 0.0024831597274824 [GeV] +Cell[14,14] 0.11682873771253 [GeV] +Cell[13,14] 0.0029467022685891 [GeV] +Cell[15,24] 0.0041118435432434 [GeV] +Cell[18,22] 9.2340040722092e-05 [GeV] +Cell[16,11] 0.0018858940457535 [GeV] +Cell[12,39] 0.00053412090983477 [GeV] +Cell[15,17] 0.0009616714112985 [GeV] +Cell[16,16] 0.001900364409927 [GeV] +Cell[16,15] 0.0032009238877505 [GeV] +Cell[14,2] 1.5809209930012e-05 [GeV] +Cell[14,10] 5.6218847647528e-05 [GeV] +Cell[12,2] 0.00018297927090418 [GeV] +Cell[14,18] 0.0011168642101482 [GeV] +Cell[12,4] 0.0001658911609627 [GeV] +Cell[11,0] 0.00075400415500901 [GeV] +Cell[13,20] 7.321693611857e-06 [GeV] +Cell[14,24] 0.0014675548155006 [GeV] +Cell[16,13] 0.00060326576349553 [GeV] +Cell[15,8] 8.215350526109e-05 [GeV] +Cell[15,14] 0.024563483728426 [GeV] +Cell[14,3] 2.0371803053422e-05 [GeV] +Cell[15,4] 0.00091877265122693 [GeV] +Cell[14,20] 0.0014976375646804 [GeV] +Cell[15,9] 0.00016109178106399 [GeV] +Cell[13,16] 0.00074893935518833 [GeV] +Cell[14,16] 0.0096547547122392 [GeV] +Cell[14,15] 0.0064429631434912 [GeV] +Cell[16,3] 5.4345069685951e-05 [GeV] +Cell[14,17] 0.0043441817435248 [GeV] +Cell[15,26] 0.00015470198070557 [GeV] +Cell[14,23] 0.0013990839383748 [GeV] +Cell[18,23] 5.5934558622539e-07 [GeV] +Cell[18,45] 1.6732031548372e-06 [GeV] +Cell[15,12] 0.0012311123446963 [GeV] +Cell[14,11] 0.001346301312916 [GeV] +Cell[15,11] 6.726881462896e-06 [GeV] +Cell[15,13] 0.0013986039998596 [GeV] +Cell[15,10] 0.00061165546944051 [GeV] +Cell[16,27] 0.16332152770629 [GeV] +Cell[16,26] 0.0021563934289611 [GeV] +Cell[15,25] 4.6806974296487e-10 [GeV] +Cell[8,1] 0.00076819243800571 [GeV] +Cell[10,2] 1.1392985470593e-09 [GeV] +Cell[19,11] 0.0017379626166205 [GeV] +Cell[15,15] 0.1014955187741 [GeV] +Cell[15,16] 0.016315991494643 [GeV] +Cell[13,19] 0.0031223114424303 [GeV] +Cell[16,14] 0.036502554224304 [GeV] +Cell[17,14] 1.535418145636e-06 [GeV] +### Total energy deposition in calorimeter by a source track in 70 cells : 0.53155645202399 (GeV) + +Source track ID 4097 (pi+,0.42532698148059[GeV]) at (-372.5988787324,-333.42176828659,-448.8186922212) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[6,27] 0.055161971003625 [GeV] +Cell[6,28] 0.0059841011505671 [GeV] +Cell[7,27] 0.032914221109368 [GeV] +Cell[7,28] 0.15279037324356 [GeV] +Cell[7,29] 0.073111694427372 [GeV] +### Total energy deposition in calorimeter by a source track in 5 cells : 0.31996236093449 (GeV) + +Source track ID 4232 (gamma,0.0011368420176539[GeV]) at (-447.74190584199,-222.54704166307,448.83937177492) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[12,27] 0.0011368420176539 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0011368420176539 (GeV) -Source track ID 3921 (kaon+,1.7504985968594[GeV]) at (76.072127256777,494.17914915001,1965.1839565284) +Source track ID 4201 (gamma,0.00315225969171[GeV]) at (-385.30602886898,318.65226206198,47.56664188376) Original primary track ID 25 (unknown,7.7728456153487[GeV]) -Cell[19,10] 0.05714063992584 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.05714063992584 (GeV) +Cell[10,18] 0.001536350684996 [GeV] +Cell[10,19] 0.001615909006714 [GeV] +### Total energy deposition in calorimeter by a source track in 2 cells : 0.00315225969171 (GeV) -Source track ID 3834 (pi-,0.45614469135556[GeV]) at (-499.92949631768,-8.3963510857464,-206.92469277863) +Source track ID 4207 (gamma,0.00038379579221431[GeV]) at (-347.90474347885,359.11319867824,-259.75777832274) Original primary track ID 25 (unknown,7.7728456153487[GeV]) -Cell[8,7] 4.2572891629788e-08 [GeV] -Cell[8,22] 0.0015322852422771 [GeV] -Cell[8,29] 0.00060003035236832 [GeV] -Cell[8,30] 5.0678856052855e-07 [GeV] -Cell[8,6] 0.00014524206758074 [GeV] -Cell[8,5] 1.0992974595865e-05 [GeV] -Cell[9,6] 0.00017435568420046 [GeV] -Cell[8,26] 0.00064325852499505 [GeV] -Cell[8,25] 0.044588043749256 [GeV] -Cell[15,30] 7.8917073551565e-07 [GeV] -Cell[10,22] 4.8558237040197e-09 [GeV] -Cell[10,23] 1.1590974850151e-08 [GeV] -Cell[9,18] 1.279855374014e-05 [GeV] -Cell[9,22] 1.4801751741516e-06 [GeV] -Cell[9,15] 1.9930543785449e-06 [GeV] -Cell[9,16] 0.00010817005283639 [GeV] -Cell[7,36] 0.0005846997456789 [GeV] -Cell[0,19] 6.3000982208905e-10 [GeV] -Cell[0,18] 3.8218216218411e-08 [GeV] -Cell[1,18] 1.7704986180433e-07 [GeV] -Cell[3,45] 0.00060741818485883 [GeV] -Cell[3,44] 0.00014967290679272 [GeV] -Cell[3,46] 1.4815325805444e-05 [GeV] -Cell[3,43] 9.909559450125e-05 [GeV] -Cell[6,35] 7.7393616177233e-06 [GeV] -Cell[6,36] 0.00085377003563474 [GeV] -Cell[8,23] 0.0087646873276968 [GeV] -Cell[9,26] 0.0010824636370557 [GeV] -Cell[13,45] 0.001052146396387 [GeV] -Cell[8,18] 4.2781045755191e-05 [GeV] -Cell[8,19] 1.0713201860199e-05 [GeV] -Cell[8,17] 0.00023365991212802 [GeV] -Cell[8,16] 6.9298791220717e-05 [GeV] -Cell[9,25] 0.0083252091822351 [GeV] -Cell[10,14] 1.4471432284836e-05 [GeV] -Cell[9,23] 0.0024970116484153 [GeV] -Cell[9,24] 0.0016169837347095 [GeV] -Cell[10,13] 6.6236156702985e-05 [GeV] -Cell[8,24] 0.19237990964201 [GeV] -Cell[15,29] 9.4358659550835e-06 [GeV] -Cell[3,2] 0.0022610030286289 [GeV] -Cell[2,2] 9.1917705469768e-07 [GeV] -Cell[4,46] 4.3589679989964e-09 [GeV] -Cell[8,27] 9.8584714287426e-06 [GeV] -Cell[7,27] 0.00013120771184003 [GeV] -Cell[9,5] 0.0011303542023091 [GeV] -### Total energy deposition in calorimeter by a source track in 46 cells : 0.26983578738801 (GeV) - -Source track ID 3913 (gamma,0.43032370642417[GeV]) at (-193.66746235605,460.9695369811,1404.1020525913) +Cell[8,17] 0.00038379579221431 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00038379579221431 (GeV) + +Source track ID 4208 (gamma,0.00022603247122105[GeV]) at (410.03499048494,-286.13162456817,-69.24244599935) Original primary track ID 25 (unknown,7.7728456153487[GeV]) -Cell[11,43] 0.0018244420190684 [GeV] -Cell[17,13] 0.0018444559040627 [GeV] -Cell[17,31] 0.00063564603345091 [GeV] -Cell[14,1] 0.0035079118190753 [GeV] -Cell[16,15] 0.0048054635854931 [GeV] -Cell[16,39] 0.00037406802622918 [GeV] -Cell[16,17] 0.0019376496945106 [GeV] -Cell[15,45] 0.00042758249146426 [GeV] -Cell[12,37] 0.00051099891 [GeV] -Cell[14,39] 0.00051099891 [GeV] -Cell[16,1] 0.004159377376622 [GeV] -Cell[15,2] 0.007748931311426 [GeV] -Cell[17,33] 0.00051099891 [GeV] -Cell[17,47] 0.00051099891 [GeV] -Cell[18,23] 0.00073834305309975 [GeV] -Cell[18,19] 0.0006740108111175 [GeV] -Cell[17,15] 0.30407774977484 [GeV] -Cell[17,14] 0.07683166466791 [GeV] -Cell[18,35] 0.00038092168063304 [GeV] -Cell[17,28] 0.00051099891 [GeV] -Cell[17,9] 0.0005967452253679 [GeV] -Cell[18,37] 0.00045409853204444 [GeV] -Cell[16,14] 0.0011460711627507 [GeV] -### Total energy deposition in calorimeter by a source track in 23 cells : 0.41472012771917 (GeV) - -Source track ID 3914 (gamma,0.84468519705162[GeV]) at (143.95469002479,478.82882872679,1448.6318361877) +Cell[9,43] 0.00022603247122105 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00022603247122105 (GeV) + +Source track ID 4214 (gamma,0.00012836853585913[GeV]) at (477.66690417861,-147.76443635878,-99.994402891633) Original primary track ID 25 (unknown,7.7728456153487[GeV]) -Cell[11,36] 0.00046003345690026 [GeV] -Cell[13,26] 0.00022233211634094 [GeV] -Cell[13,33] 0.00035946578731307 [GeV] -Cell[12,28] 0.0016607483692489 [GeV] -Cell[9,37] 0.0017188120795221 [GeV] -Cell[17,34] 0.00029924601590607 [GeV] -Cell[16,40] 0.0032152457605756 [GeV] -Cell[6,47] 0.00050523255193388 [GeV] -Cell[17,44] 0.002150439273586 [GeV] -Cell[17,43] 0.0023342241123285 [GeV] -Cell[4,32] 0.00085901127853683 [GeV] -Cell[19,31] 0.00072713666208656 [GeV] -Cell[11,35] 0.00048308334211487 [GeV] -Cell[12,37] 0.00051099891 [GeV] -Cell[16,23] 0.0046799537569658 [GeV] -Cell[17,10] 0.022235994877158 [GeV] -Cell[3,11] 0.00098161955034752 [GeV] -Cell[4,31] 0.0018740150050311 [GeV] -Cell[2,36] 0.00051099891 [GeV] -Cell[15,47] 0.00050770389980062 [GeV] -Cell[3,10] 0.0013831548161095 [GeV] -Cell[13,42] 0.00051099891 [GeV] -Cell[15,36] 0.00051854427097886 [GeV] -Cell[17,4] 0.00036668559123026 [GeV] -Cell[16,0] 0.0044912899461026 [GeV] -Cell[15,23] 0.00031630800471501 [GeV] -Cell[16,21] 0.0011729447508824 [GeV] -Cell[16,24] 0.00051099891 [GeV] -Cell[5,26] 0.00015101179935908 [GeV] -Cell[19,6] 0.0043209948057993 [GeV] -Cell[17,9] 0.72972686447488 [GeV] -Cell[4,10] 0.0011439619687156 [GeV] -Cell[17,20] 0.0004506031872626 [GeV] -Cell[17,8] 0.00046468073720825 [GeV] -### Total energy deposition in calorimeter by a source track in 34 cells : 0.79182533788894 (GeV) - -Source track ID 3840 (pi-,1.1276744831035[GeV]) at (-499.99890988912,1.0440831817745,957.42169843241) +Cell[9,45] 0.00012836853585913 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00012836853585913 (GeV) + +Source track ID 4219 (gamma,7.715354794941e-05[GeV]) at (342.04230210019,364.70133475764,-1290.7850755804) Original primary track ID 25 (unknown,7.7728456153487[GeV]) -Cell[13,24] 0.0031838844846328 [GeV] -Cell[12,7] 6.3588383938509e-05 [GeV] -Cell[15,24] 0.31655386568079 [GeV] -Cell[14,24] 0.24562072846715 [GeV] -Cell[12,5] 0.0061151211106119 [GeV] -Cell[12,6] 0.00047258460623027 [GeV] -Cell[13,22] 6.7478441001072e-05 [GeV] -Cell[14,21] 3.4158155722253e-07 [GeV] -Cell[16,25] 0.29410238011306 [GeV] -Cell[15,23] 0.0004436913601427 [GeV] -Cell[16,24] 0.027057861763201 [GeV] -Cell[14,23] 0.067365408995552 [GeV] -Cell[14,22] 0.0017646571483816 [GeV] -Cell[14,25] 1.1923071951969e-09 [GeV] -Cell[13,23] 0.0071897798443106 [GeV] -### Total energy deposition in calorimeter by a source track in 15 cells : 0.97000137317287 (GeV) - -Source track ID 3828 (gamma,0.21259862372436[GeV]) at (298.6743445107,-400.99081776408,-1192.0286756009) -Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[7,7] 0.00051099891 [GeV] -Cell[6,32] 0.0025567212046297 [GeV] -Cell[3,25] 0.00040625116380951 [GeV] -Cell[4,40] 0.007738428889681 [GeV] -Cell[5,17] 0.00056013922691557 [GeV] -Cell[3,40] 0.19434118151405 [GeV] -Cell[3,41] 0.0037141761830574 [GeV] -Cell[4,41] 0.0011154888918373 [GeV] -### Total energy deposition in calorimeter by a source track in 8 cells : 0.21094338598398 (GeV) - -Source track ID 3797 (pi-,0.62987829958896[GeV]) at (342.11444957803,364.63365641411,-1017.4909476221) -Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[8,9] 4.410685505718e-10 [GeV] -Cell[8,8] 2.7973093836295e-05 [GeV] -Cell[5,31] 0.0061402188183754 [GeV] -Cell[7,34] 6.7861517406982e-06 [GeV] -Cell[7,35] 0.00033674243841858 [GeV] -Cell[6,41] 0.0024987006317414 [GeV] -Cell[4,5] 0.0014866349711295 [GeV] -Cell[7,6] 7.0545749366602e-06 [GeV] -Cell[7,5] 0.0031478486225526 [GeV] -Cell[4,30] 4.1931267536711e-05 [GeV] -Cell[3,25] 6.1298633227125e-08 [GeV] -Cell[5,30] 6.2923459154263e-10 [GeV] -Cell[7,4] 0.00011267312070663 [GeV] -Cell[7,33] 0.00016683801050965 [GeV] -Cell[6,7] 0.0012338931590328 [GeV] -Cell[7,31] 7.3758081705819e-05 [GeV] -Cell[5,38] 3.588041876128e-07 [GeV] -Cell[4,36] 9.2924714408582e-08 [GeV] -Cell[6,4] 0.0060455916814204 [GeV] -Cell[4,25] 0.0013019914626592 [GeV] -Cell[17,31] 3.2607167130436e-06 [GeV] -Cell[13,25] 5.9647514717653e-08 [GeV] -Cell[17,7] 1.1641380842775e-07 [GeV] -Cell[16,3] 0.00082761190775352 [GeV] -Cell[5,7] 0.0060677303528063 [GeV] -Cell[5,8] 0.0032665083505858 [GeV] -Cell[3,30] 0.00039854712428269 [GeV] -Cell[3,31] 7.1371887177293e-05 [GeV] -Cell[8,1] 5.1548152405303e-06 [GeV] -Cell[17,2] 3.869458931149e-05 [GeV] -Cell[5,32] 2.8998834171944e-05 [GeV] -Cell[4,32] 0.00028690051141803 [GeV] -Cell[0,24] 6.1193898816782e-05 [GeV] -Cell[0,22] 0.00022893383068686 [GeV] -Cell[3,11] 1.0974036587868e-05 [GeV] -Cell[4,11] 0.00023589057679965 [GeV] -Cell[5,20] 1.6537466435693e-05 [GeV] -Cell[4,17] 1.8467426241841e-05 [GeV] -Cell[2,20] 1.0724531894084e-05 [GeV] -Cell[3,19] 0.00014101718020493 [GeV] -Cell[1,35] 5.4492356139235e-07 [GeV] -Cell[4,6] 0.1396894406098 [GeV] -Cell[3,6] 0.0094975475009753 [GeV] -Cell[3,5] 1.5261644795146e-05 [GeV] -Cell[1,31] 1.6496208672834e-06 [GeV] -Cell[4,31] 0.00089303931156724 [GeV] -Cell[0,23] 8.5738614725415e-06 [GeV] -Cell[3,8] 0.0071413318962492 [GeV] -Cell[3,7] 0.010091960963635 [GeV] -Cell[7,32] 0.00049769148687062 [GeV] -Cell[5,5] 0.00026821546961946 [GeV] -Cell[3,16] 7.4245504511055e-06 [GeV] -Cell[2,19] 0.00043704839589896 [GeV] -Cell[3,46] 0.0036629741974048 [GeV] -Cell[4,37] 5.1316970939297e-09 [GeV] -Cell[4,16] 4.2704285588115e-06 [GeV] -Cell[3,41] 0.00089646627173145 [GeV] -Cell[2,18] 0.0001762796074629 [GeV] -Cell[2,30] 4.7094079036469e-10 [GeV] -Cell[2,32] 7.5829356501345e-06 [GeV] -Cell[2,31] 0.00048302539330609 [GeV] -Cell[0,6] 4.2903562803076e-07 [GeV] -Cell[0,4] 6.3694954442326e-06 [GeV] -Cell[3,9] 0.002515474801793 [GeV] -Cell[4,23] 1.0859397414606e-05 [GeV] -Cell[4,7] 0.12145566031415 [GeV] -Cell[5,6] 0.00024477450257143 [GeV] -Cell[5,4] 1.8868323760216e-05 [GeV] -Cell[6,5] 0.010234634478201 [GeV] -Cell[16,27] 1.1134176456835e-05 [GeV] -Cell[16,2] 4.6518932558683e-05 [GeV] -Cell[19,40] 2.2000810422469e-05 [GeV] -Cell[17,32] 2.1814626663854e-06 [GeV] -Cell[13,34] 1.207096485814e-06 [GeV] -Cell[4,26] 0.00074378683931684 [GeV] -Cell[6,6] 1.7140632662631e-06 [GeV] -Cell[5,25] 2.0764619648617e-07 [GeV] -Cell[6,8] 0.00078042706539554 [GeV] -Cell[4,10] 0.00096536051778207 [GeV] -Cell[4,8] 0.016633306774637 [GeV] -Cell[4,9] 0.0076946575507921 [GeV] -Cell[3,4] 0.00070640917919637 [GeV] -Cell[4,4] 0.0020803497656426 [GeV] -Cell[2,41] 0.0020472026744743 [GeV] -Cell[0,5] 0.0008314423578571 [GeV] -Cell[4,24] 0.00040164336671273 [GeV] -Cell[4,3] 1.1684888931995e-09 [GeV] -Cell[5,33] 4.0460248419549e-06 [GeV] -Cell[6,21] 2.2420764435083e-07 [GeV] -### Total energy deposition in calorimeter by a source track in 89 cells : 0.37558907098491 (GeV) - -Source track ID 3798 (pi+,3.262533058821[GeV]) at (499.9891120603,-3.2996698552149,-1675.7308825642) -Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[0,30] 0.097792052347552 [GeV] -Cell[0,47] 0.17648392052016 [GeV] -Cell[0,31] 0.074801957388246 [GeV] -Cell[1,47] 0.13907634616685 [GeV] -Cell[0,33] 0.0030215535128505 [GeV] -### Total energy deposition in calorimeter by a source track in 5 cells : 0.49117582993566 (GeV) - -Source track ID 3794 (gamma,0.53051937575115[GeV]) at (475.84610190694,-153.52682925135,-782.17056001442) +Cell[3,6] 7.715354794941e-05 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 7.715354794941e-05 (GeV) + +Source track ID 4220 (gamma,0.0012723335999457[GeV]) at (-485.97086772824,-117.61086565219,-904.56739603181) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[5,25] 0.0012723335999457 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0012723335999457 (GeV) + +Source track ID 4221 (gamma,0.0031612249138065[GeV]) at (296.96405520286,-402.25905821681,-500.69899510717) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[7,40] 0.0031612249138065 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0031612249138065 (GeV) + +Source track ID 4166 (gamma,0.0011177005075576[GeV]) at (477.81650309643,147.27996933969,-201.21573246099) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[8,2] 0.0011177005075576 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0011177005075576 (GeV) + +Source track ID 4167 (gamma,8.3254811898182e-05[GeV]) at (-205.02232268898,456.03272601779,-475.71748346494) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[7,15] 8.3254811898182e-05 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 8.3254811898182e-05 (GeV) + +Source track ID 4171 (gamma,0.0027352368843776[GeV]) at (14.0985155131,499.80119233584,-415.92301701228) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[7,11] 0.0022242379743776 [GeV] +Cell[7,12] 0.00051099891 [GeV] +### Total energy deposition in calorimeter by a source track in 2 cells : 0.0027352368843776 (GeV) + +Source track ID 4172 (gamma,0.0055970683187739[GeV]) at (-461.90511909841,191.42534040895,-729.59017395186) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[6,21] 0.0047277436950687 [GeV] +Cell[3,47] 0.00051099891 [GeV] +Cell[6,20] 0.0003583257137052 [GeV] +### Total energy deposition in calorimeter by a source track in 3 cells : 0.0055970683187739 (GeV) + +Source track ID 4173 (gamma,0.00051099891[GeV]) at (465.45141358393,-182.63346241234,-23.128294556733) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[9,45] 0.00051099891 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00051099891 (GeV) + +Source track ID 4174 (gamma,0.00051099891[GeV]) at (242.43433112675,437.29348850758,-845.08143114305) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[5,8] 0.00051099891 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00051099891 (GeV) + +Source track ID 4161 (neutron,1.0720069918119[GeV]) at (433.72979329084,-248.75382692913,302.46957413845) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[13,43] 0.0018120113185169 [GeV] +Cell[12,44] 0.016115263168894 [GeV] +Cell[12,28] 5.9401454564068e-08 [GeV] +Cell[12,27] 5.2317060009955e-05 [GeV] +Cell[13,44] 0.00011422181599494 [GeV] +Cell[12,43] 2.899974189711e-05 [GeV] +Cell[11,45] 3.2959719355404e-05 [GeV] +Cell[12,0] 6.9216839151295e-05 [GeV] +Cell[12,46] 0.0021198234534486 [GeV] +Cell[12,45] 0.025009653771466 [GeV] +Cell[12,47] 0.0038576500533869 [GeV] +Cell[11,46] 9.1758463485576e-05 [GeV] +Cell[11,43] 0.0015575202178746 [GeV] +Cell[13,45] 0.00031245477781499 [GeV] +Cell[11,47] 0.00017557894155959 [GeV] +Cell[11,44] 0.0031758878848452 [GeV] +Cell[11,0] 0.00021312592155755 [GeV] +### Total energy deposition in calorimeter by a source track in 17 cells : 0.054738502550713 (GeV) + +Source track ID 4112 (pi-,0.19236787041647[GeV]) at (257.52295037172,-428.5812992092,1091.8387179306) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[15,40] 0.1008207929693 [GeV] +Cell[16,32] 1.0202146135271e-05 [GeV] +Cell[13,25] 0.0016283510768964 [GeV] +Cell[14,26] 0.0029842915513005 [GeV] +Cell[15,6] 1.5168194222497e-05 [GeV] +Cell[0,1] 3.9159836596809e-06 [GeV] +Cell[16,25] 8.2890753252286e-05 [GeV] +Cell[14,7] 9.317213378381e-06 [GeV] +Cell[16,42] 0.00074356290095307 [GeV] +Cell[15,41] 1.2686278614638e-07 [GeV] +Cell[16,15] 2.8809324663598e-05 [GeV] +Cell[16,12] 5.4151271342562e-09 [GeV] +Cell[16,13] 0.00039291718726599 [GeV] +Cell[15,8] 3.8121242866737e-05 [GeV] +Cell[15,7] 0.00073891739663054 [GeV] +Cell[15,20] 5.4886913858354e-10 [GeV] +Cell[15,39] 0.0014037999575203 [GeV] +Cell[14,6] 1.9521515932865e-06 [GeV] +Cell[14,20] 1.1982046999037e-10 [GeV] +Cell[14,21] 0.00039420435482475 [GeV] +Cell[14,22] 0.0048092740986028 [GeV] +Cell[15,12] 0.0012242801455189 [GeV] +Cell[15,13] 1.0467359096424e-05 [GeV] +Cell[16,27] 0.00064964292099234 [GeV] +Cell[16,26] 0.00038896701036231 [GeV] +Cell[16,41] 2.1372976852945e-05 [GeV] +Cell[17,41] 5.4827125950396e-10 [GeV] +Cell[17,22] 0.0014039173392767 [GeV] +### Total energy deposition in calorimeter by a source track in 28 cells : 0.11780526975004 (GeV) + +Source track ID 4113 (neutron,0.99136435266906[GeV]) at (-13.516748167234,-499.81726412658,113.36355309646) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[9,17] 7.7195172359552e-06 [GeV] +Cell[9,16] 5.9628233674403e-06 [GeV] +Cell[10,27] 0.00026603721428103 [GeV] +Cell[10,17] 0.001502846375446 [GeV] +Cell[10,37] 0.0039427169852023 [GeV] +Cell[10,36] 0.00061553438603499 [GeV] +Cell[10,35] 0.015595035166442 [GeV] +### Total energy deposition in calorimeter by a source track in 7 cells : 0.02193585246801 (GeV) + +Source track ID 4114 (gamma,0.0048726883870148[GeV]) at (400.47945555085,-299.35965940937,239.85051805762) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[11,43] 0.0048726883870148 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0048726883870148 (GeV) + +Source track ID 4115 (gamma,0.00029748494609143[GeV]) at (-169.81271369487,470.28038686254,-500.86691716222) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[7,14] 0.00029748494609143 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00029748494609143 (GeV) + +Source track ID 4095 (gamma,0.062293140479318[GeV]) at (-277.0923859633,416.19684001824,226.70075839137) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[11,5] 0.0010319733566757 [GeV] +Cell[13,25] 0.00019635898899425 [GeV] +Cell[7,28] 0.0022128314082797 [GeV] +Cell[10,13] 0.00035214999019291 [GeV] +Cell[13,35] 0.00051099891 [GeV] +Cell[11,15] 0.0063869119377227 [GeV] +Cell[11,16] 0.051204262114761 [GeV] +### Total energy deposition in calorimeter by a source track in 7 cells : 0.061895486706626 (GeV) + +Source track ID 4096 (gamma,0.18169391742921[GeV]) at (418.45377801005,273.67213169981,279.34344073323) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[11,5] 0.0033720180243361 [GeV] +Cell[12,0] 0.0042608399569015 [GeV] +Cell[11,3] 0.00040806603014907 [GeV] +Cell[11,4] 0.17365299341782 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.18169391742921 (GeV) + +Source track ID 4074 (kaon+,1.7504960107628[GeV]) at (76.279097982964,494.14724446354,1961.8457031497) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[9,7] 0.00048828457931838 [GeV] +Cell[18,4] 1.939378445968e-06 [GeV] +Cell[18,11] 0.0039946492810981 [GeV] +Cell[17,32] 0.0008881633143842 [GeV] +Cell[18,44] 0.0006259852634962 [GeV] +Cell[18,34] 0.0014419053918207 [GeV] +Cell[16,25] 4.6787658066023e-06 [GeV] +Cell[18,31] 0.0010652796754201 [GeV] +Cell[15,27] 5.183547389106e-05 [GeV] +Cell[15,29] 0.00071084165217964 [GeV] +Cell[14,38] 2.4564686173107e-06 [GeV] +Cell[18,38] 2.1293241161402e-09 [GeV] +Cell[18,37] 1.374757705662e-06 [GeV] +Cell[13,42] 6.8757315009634e-05 [GeV] +Cell[13,41] 0.0001137164966517 [GeV] +Cell[18,33] 0.18176472583293 [GeV] +Cell[18,22] 1.7195549851749e-05 [GeV] +Cell[16,0] 2.330064191483e-06 [GeV] +Cell[19,37] 1.4482504179796e-06 [GeV] +Cell[16,10] 5.4929853376962e-09 [GeV] +Cell[16,11] 4.2413348069203e-08 [GeV] +Cell[17,11] 2.9954417318891e-05 [GeV] +Cell[17,10] 0.0014151261237672 [GeV] +Cell[13,39] 0.00053027360104144 [GeV] +Cell[11,15] 1.6572703549173e-05 [GeV] +Cell[11,14] 0.00033529519701744 [GeV] +Cell[18,21] 6.7618242755998e-06 [GeV] +Cell[13,5] 0.00032053375001983 [GeV] +Cell[19,47] 0.083692223499897 [GeV] +Cell[15,26] 0.0016008865644719 [GeV] +Cell[18,23] 1.5634400886483e-05 [GeV] +Cell[18,45] 0.00096483561002422 [GeV] +Cell[16,26] 3.9072835120919e-05 [GeV] +Cell[15,25] 0.0047138171370274 [GeV] +Cell[19,11] 0.012455866363259 [GeV] +Cell[19,10] 0.40344665540732 [GeV] +Cell[19,6] 8.6766884778626e-06 [GeV] +Cell[18,17] 0.0012724578056458 [GeV] +Cell[17,4] 6.0873112815898e-06 [GeV] +Cell[19,30] 1.4321382594062e-05 [GeV] +Cell[18,26] 0.0011913238801702 [GeV] +Cell[18,25] 0.00013722094336106 [GeV] +Cell[17,8] 1.6128092713188e-05 [GeV] +Cell[17,24] 5.8548177476041e-06 [GeV] +Cell[19,9] 0.0037260888401295 [GeV] +Cell[19,8] 0.0023269329821017 [GeV] +Cell[19,12] 0.00035103268291311 [GeV] +Cell[19,13] 1.8394418793832e-07 [GeV] +Cell[18,10] 0.0016788497175736 [GeV] +Cell[19,26] 0.0019584419596367 [GeV] +Cell[18,9] 4.2827168771282e-06 [GeV] +Cell[19,38] 0.00051099891 [GeV] +Cell[18,41] 0.015336066982386 [GeV] +Cell[18,40] 0.0043879551994949 [GeV] +Cell[19,0] 0.0022335171332958 [GeV] +Cell[17,25] 0.00051099891 [GeV] +Cell[16,28] 0.00069920700876867 [GeV] +Cell[19,39] 0.00050128730683718 [GeV] +Cell[18,30] 1.1108726495877e-05 [GeV] +Cell[18,32] 0.011642864193785 [GeV] +Cell[16,29] 0.0045149740272172 [GeV] +Cell[16,24] 2.5741024066519e-05 [GeV] +Cell[18,13] 0.00067477237966798 [GeV] +Cell[19,24] 0.0022542732241235 [GeV] +Cell[19,23] 0.00088419346070013 [GeV] +Cell[18,8] 1.0247398924548e-05 [GeV] +Cell[18,6] 1.0008011042373e-05 [GeV] +### Total energy deposition in calorimeter by a source track in 67 cells : 0.75773522464411 (GeV) + +Source track ID 3987 (pi-,0.45356042917129[GeV]) at (-499.8744197856,-11.20555415896,-199.68436595084) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[6,11] 0.0021967798691062 [GeV] +Cell[6,42] 1.0860213747947e-05 [GeV] +Cell[8,11] 3.4397278825054e-05 [GeV] +Cell[7,43] 2.0415700495278e-06 [GeV] +Cell[9,6] 0.00036270286158106 [GeV] +Cell[8,6] 0.00017552120525172 [GeV] +Cell[7,15] 0.00067741167896152 [GeV] +Cell[8,25] 0.0020402608765745 [GeV] +Cell[8,28] 0.0013618578905247 [GeV] +Cell[9,17] 0.00073427423231828 [GeV] +Cell[7,31] 0.00058178286864313 [GeV] +Cell[6,27] 0.00075162689344199 [GeV] +Cell[6,45] 0.00029456088153859 [GeV] +Cell[10,24] 0.0013614261481386 [GeV] +Cell[7,23] 2.1024275338277e-06 [GeV] +Cell[9,12] 9.8109035095376e-05 [GeV] +Cell[9,11] 0.0015930099743288 [GeV] +Cell[9,45] 0.0023502779810367 [GeV] +Cell[6,28] 5.7602126616985e-08 [GeV] +Cell[10,23] 0.0010974215265798 [GeV] +Cell[10,26] 3.4434444728504e-08 [GeV] +Cell[9,7] 5.2016898937381e-06 [GeV] +Cell[10,41] 3.1347621759778e-05 [GeV] +Cell[10,42] 8.4524140309441e-05 [GeV] +Cell[9,16] 1.0955292964354e-08 [GeV] +Cell[8,31] 6.1683114915922e-07 [GeV] +Cell[8,27] 0.0036596730989528 [GeV] +Cell[6,30] 0.00021697476786255 [GeV] +Cell[7,30] 0.00099436681480097 [GeV] +Cell[9,39] 1.2749842309859e-05 [GeV] +Cell[9,28] 0.00090033590324809 [GeV] +Cell[7,27] 0.0070432736916178 [GeV] +Cell[12,31] 0.00046948014012128 [GeV] +Cell[16,30] 9.517979924567e-08 [GeV] +Cell[12,30] 7.2130780608859e-06 [GeV] +Cell[11,30] 0.00044579583784321 [GeV] +Cell[11,29] 0.00077124846803031 [GeV] +Cell[15,6] 1.0352773104501e-05 [GeV] +Cell[15,5] 7.0555005489723e-06 [GeV] +Cell[9,46] 2.5465588405496e-05 [GeV] +Cell[8,45] 5.2556229026891e-05 [GeV] +Cell[11,25] 1.5200805592031e-10 [GeV] +Cell[9,18] 1.5492441991682e-07 [GeV] +Cell[11,39] 7.7216286138082e-07 [GeV] +Cell[8,17] 0.00014904635263406 [GeV] +Cell[7,17] 1.3834040146321e-08 [GeV] +Cell[8,30] 2.6050205769934e-07 [GeV] +Cell[9,30] 0.0012230082403524 [GeV] +Cell[8,29] 2.6138627617911e-10 [GeV] +Cell[7,28] 0.0039077213483052 [GeV] +Cell[8,16] 3.3900953417287e-07 [GeV] +Cell[12,0] 3.6233964215171e-07 [GeV] +Cell[12,47] 5.4818696480424e-05 [GeV] +Cell[10,47] 1.9364430987594e-05 [GeV] +Cell[10,30] 0.0008915795570039 [GeV] +Cell[9,27] 1.4508150172787e-07 [GeV] +Cell[9,26] 0.0030166935998146 [GeV] +Cell[10,25] 3.6669260007329e-06 [GeV] +Cell[9,33] 1.9871174299624e-05 [GeV] +Cell[8,44] 3.6761360504897e-05 [GeV] +Cell[8,26] 2.2041111469434e-05 [GeV] +Cell[7,24] 0.0004871143043232 [GeV] +Cell[7,25] 0.0015552975610735 [GeV] +Cell[6,23] 0.00060269362763154 [GeV] +Cell[6,24] 0.00044164196876829 [GeV] +Cell[6,22] 1.529095902697e-08 [GeV] +Cell[7,22] 4.8815076588653e-06 [GeV] +Cell[7,26] 0.0015616623830705 [GeV] +Cell[3,3] 0.0014382056707225 [GeV] +Cell[9,4] 3.3151843784708e-05 [GeV] +Cell[8,43] 9.4591017501784e-05 [GeV] +Cell[7,29] 0.0019269659639469 [GeV] +Cell[10,10] 5.6831098918337e-06 [GeV] +Cell[9,24] 0.020965220063985 [GeV] +Cell[10,3] 4.0252977923956e-06 [GeV] +Cell[10,29] 0.00089192510712166 [GeV] +Cell[11,26] 2.9327075184824e-05 [GeV] +Cell[8,2] 0.00073403139660378 [GeV] +Cell[5,22] 3.399996785447e-09 [GeV] +Cell[3,5] 5.5641547078267e-08 [GeV] +Cell[10,6] 5.5198813697643e-10 [GeV] +Cell[10,45] 0.0010259822228168 [GeV] +Cell[5,12] 7.9282975639217e-07 [GeV] +Cell[6,12] 0.00086371984378968 [GeV] +Cell[6,13] 1.1732004815713e-05 [GeV] +Cell[9,3] 0.0032705685618035 [GeV] +Cell[5,45] 2.1390788606368e-07 [GeV] +Cell[5,46] 4.0786198223941e-07 [GeV] +Cell[6,46] 0.0031155892345948 [GeV] +Cell[1,3] 2.8744259566338e-08 [GeV] +Cell[2,28] 5.384958513423e-05 [GeV] +Cell[1,28] 5.0045805983245e-07 [GeV] +Cell[3,4] 3.0320849571694e-05 [GeV] +Cell[11,47] 0.00010619065999367 [GeV] +Cell[14,7] 4.7300310718128e-05 [GeV] +Cell[11,41] 1.1105117911939e-05 [GeV] +Cell[8,23] 0.0005045836613482 [GeV] +Cell[16,0] 1.6296762623824e-07 [GeV] +Cell[12,40] 1.2557752779685e-07 [GeV] +Cell[8,18] 0.0002970277295509 [GeV] +Cell[11,2] 2.6916930160951e-05 [GeV] +Cell[11,0] 0.00069604038149191 [GeV] +Cell[9,25] 0.0051201422426729 [GeV] +Cell[15,4] 0.00010150632108264 [GeV] +Cell[8,46] 0.00039766324719369 [GeV] +Cell[8,4] 0.0014489897420286 [GeV] +Cell[9,29] 0.0007094226180113 [GeV] +Cell[8,22] 0.0014553729441285 [GeV] +Cell[8,3] 0.0034575800683135 [GeV] +Cell[8,42] 1.8975583770953e-10 [GeV] +Cell[8,1] 0.00057377043387976 [GeV] +Cell[10,2] 4.8780998506118e-05 [GeV] +Cell[9,43] 1.0973850417031e-06 [GeV] +Cell[19,12] 1.3905728701502e-07 [GeV] +Cell[18,41] 2.1999585442245e-10 [GeV] +Cell[8,24] 0.014814095066878 [GeV] +Cell[9,23] 0.0027333518400663 [GeV] +Cell[9,2] 8.0089946568478e-06 [GeV] +Cell[10,46] 0.00019596371398154 [GeV] +Cell[10,0] 6.5192580223083e-12 [GeV] +Cell[6,44] 4.3160911668451e-05 [GeV] +Cell[9,5] 0.0018903316122989 [GeV] +Cell[9,22] 1.6082281928789e-05 [GeV] +Cell[10,22] 1.3998109920976e-08 [GeV] +Cell[18,29] 0.0002733623069845 [GeV] +Cell[18,42] 4.8193280235864e-07 [GeV] +Cell[19,41] 5.3614777633584e-06 [GeV] +Cell[9,44] 0.0011383438994668 [GeV] +Cell[9,42] 1.8585564021123e-09 [GeV] +Cell[16,5] 9.285113264923e-09 [GeV] +Cell[10,31] 0.00085645743135001 [GeV] +Cell[6,29] 0.0002180800972111 [GeV] +Cell[6,31] 1.2232443261723e-05 [GeV] +### Total energy deposition in calorimeter by a source track in 133 cells : 0.11617093351816 (GeV) + +Source track ID 4061 (gamma,0.43032370642417[GeV]) at (-193.66742330874,460.96955338607,1404.1021012468) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[14,32] 0.00080298502206539 [GeV] +Cell[14,26] 0.0027007726811529 [GeV] +Cell[16,15] 3.8294541143614e-05 [GeV] +Cell[14,24] 4.3655745685101e-13 [GeV] +Cell[17,12] 7.4683067505248e-06 [GeV] +Cell[14,22] 0.00036078541688823 [GeV] +Cell[16,3] 0.0004633912426968 [GeV] +Cell[14,23] 2.9236055297588e-08 [GeV] +Cell[16,14] 0.0038055797038604 [GeV] +Cell[17,14] 0.093221718303124 [GeV] +Cell[17,15] 0.30580401495976 [GeV] +Cell[16,4] 0.00060749641389502 [GeV] +Cell[17,47] 0.00046943461694547 [GeV] +Cell[15,21] 3.8493965694215e-06 [GeV] +Cell[15,22] 0.00014241290642713 [GeV] +### Total energy deposition in calorimeter by a source track in 15 cells : 0.40842823274777 (GeV) + +Source track ID 4062 (gamma,0.84468519705162[GeV]) at (143.95466877892,478.82883511413,1448.6318561742) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[18,4] 0.00079811648858744 [GeV] +Cell[19,33] 0.0027524178259111 [GeV] +Cell[17,9] 0.76953924339661 [GeV] +Cell[13,36] 0.00019690451220738 [GeV] +Cell[9,33] 0.001791583723257 [GeV] +Cell[13,35] 0.00052865103545984 [GeV] +Cell[15,46] 0.0031923603930835 [GeV] +Cell[15,47] 0.00060729585390701 [GeV] +Cell[14,43] 0.00090451534846263 [GeV] +Cell[16,35] 0.00054797026445476 [GeV] +Cell[16,33] 0.00051099891 [GeV] +Cell[17,10] 0.035516656030347 [GeV] +Cell[17,8] 0.00096807523454171 [GeV] +Cell[19,24] 0.00042533602396352 [GeV] +Cell[18,8] 0.0026698666568412 [GeV] +Cell[16,4] 0.00080964398325757 [GeV] +Cell[17,23] 0.00030665090025567 [GeV] +Cell[18,18] 0.0016045492849177 [GeV] +Cell[19,25] 0.00079948702137616 [GeV] +Cell[19,1] 0.00076178244914463 [GeV] +Cell[18,2] 0.0035883978163668 [GeV] +Cell[16,22] 0.00051099891 [GeV] +Cell[19,32] 0.00021457984441676 [GeV] +### Total energy deposition in calorimeter by a source track in 23 cells : 0.82954608190737 (GeV) + +Source track ID 3993 (pi-,1.127664455633[GeV]) at (-499.93044449045,-8.3397045261073,946.3210122116) +Original primary track ID 25 (unknown,7.7728456153487[GeV]) +Cell[17,20] 0.0074326140243155 [GeV] +Cell[16,25] 0.032996293157124 [GeV] +Cell[15,23] 0.0023263610468758 [GeV] +Cell[15,24] 0.21507593782215 [GeV] +Cell[14,24] 0.077868160287785 [GeV] +Cell[15,26] 0.0016686462606955 [GeV] +Cell[14,23] 0.00061141477671249 [GeV] +Cell[16,26] 0.0029322232536684 [GeV] +Cell[15,25] 0.0025513322415244 [GeV] +Cell[17,22] 0.00051099891 [GeV] +Cell[17,25] 2.2465246729553e-10 [GeV] +Cell[16,24] 0.46597171153326 [GeV] +Cell[17,26] 5.0471431904953e-09 [GeV] +Cell[16,23] 0.0012316534966085 [GeV] +Cell[17,21] 0.24107757461489 [GeV] +### Total energy deposition in calorimeter by a source track in 15 cells : 1.0522549266974 (GeV) + +Source track ID 3981 (gamma,0.21259862372436[GeV]) at (298.67434778315,-400.99081532662,-1192.0287459232) Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[5,45] 0.25034919332304 [GeV] -Cell[6,25] 0.0003396464719935 [GeV] -Cell[0,19] 8.9577715068858e-05 [GeV] -Cell[1,37] 7.722250330347e-06 [GeV] -Cell[1,36] 0.0001130484826966 [GeV] -Cell[5,11] 0.002626589875758 [GeV] -Cell[6,44] 0.016765371181056 [GeV] -Cell[9,4] 0.00042335987939611 [GeV] -Cell[9,24] 0.00071819353242577 [GeV] -Cell[6,45] 0.25241635635696 [GeV] -Cell[5,46] 0.0052452412300623 [GeV] -Cell[6,46] 0.00063484005958477 [GeV] -### Total energy deposition in calorimeter by a source track in 12 cells : 0.52972914035838 (GeV) - -Source track ID 3795 (gamma,0.17927399228015[GeV]) at (168.15424624328,-470.87593851285,-1264.5234728695) +Cell[3,38] 0.0004381557307126 [GeV] +Cell[4,40] 0.028828825776471 [GeV] +Cell[3,41] 0.0060477035344797 [GeV] +Cell[4,10] 0.00051099891 [GeV] +Cell[4,41] 0.0048457548431726 [GeV] +Cell[3,40] 0.16243958262328 [GeV] +Cell[3,39] 0.00062286842608471 [GeV] +### Total energy deposition in calorimeter by a source track in 7 cells : 0.2037338898442 (GeV) + +Source track ID 3946 (pi-,0.62988802894614[GeV]) at (341.53803827384,365.17361406878,-1018.5353976966) Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[6,2] 0.00022206081763395 [GeV] -Cell[3,38] 0.15433128605569 [GeV] -Cell[4,32] 0.0012035106843903 [GeV] -Cell[1,8] 0.006536257185358 [GeV] -Cell[4,44] 0.00051099891 [GeV] -Cell[2,39] 0.0019177407554791 [GeV] -Cell[1,11] 0.00024186142186313 [GeV] -Cell[4,47] 0.0019460691449933 [GeV] -Cell[0,45] 0.00244454870974 [GeV] -Cell[3,45] 0.00077079838309594 [GeV] -Cell[2,31] 0.00023556079331598 [GeV] -Cell[1,12] 0.00065752367071312 [GeV] -Cell[3,2] 0.00048816533410775 [GeV] -Cell[2,38] 0.00054606038396494 [GeV] -Cell[6,19] 0.00021195839866009 [GeV] -### Total energy deposition in calorimeter by a source track in 15 cells : 0.172264400649 (GeV) - -Source track ID 3773 (gamma,0.00010666847946182[GeV]) at (-441.74196215256,234.23073853276,-182.27185466321) +Cell[2,32] 8.0955318990164e-06 [GeV] +Cell[15,33] 1.3235832932423e-07 [GeV] +Cell[6,45] 0.00039174513170929 [GeV] +Cell[3,21] 5.6260332016791e-06 [GeV] +Cell[3,8] 0.0029814928106272 [GeV] +Cell[2,8] 0.0011629074500474 [GeV] +Cell[2,9] 0.00015807987586049 [GeV] +Cell[15,32] 5.7013854909655e-06 [GeV] +Cell[0,0] 8.736435091123e-06 [GeV] +Cell[0,47] 5.6620948307682e-06 [GeV] +Cell[7,22] 6.6823248344008e-06 [GeV] +Cell[3,3] 0.00011162075476022 [GeV] +Cell[3,6] 0.006328033837105 [GeV] +Cell[6,4] 0.00038231447495673 [GeV] +Cell[7,1] 1.3272811484057e-05 [GeV] +Cell[5,10] 7.7977192413528e-06 [GeV] +Cell[3,20] 4.0873981333789e-08 [GeV] +Cell[3,5] 0.00074426815095831 [GeV] +Cell[4,7] 0.063441203061389 [GeV] +Cell[4,23] 5.4581611475442e-06 [GeV] +Cell[4,47] 5.8634407196223e-09 [GeV] +Cell[1,9] 1.5330305450334e-05 [GeV] +Cell[2,7] 0.0061411605558317 [GeV] +Cell[1,7] 2.0475238216022e-09 [GeV] +Cell[3,47] 6.0020283854101e-10 [GeV] +Cell[4,6] 0.31040543873587 [GeV] +Cell[3,0] 0.00080594924404704 [GeV] +Cell[0,39] 0.00048790204946636 [GeV] +Cell[5,3] 0.00030618912747457 [GeV] +Cell[5,2] 1.4402411441552e-05 [GeV] +Cell[6,5] 0.0022230566530561 [GeV] +Cell[3,7] 0.0070013544425406 [GeV] +Cell[2,5] 0.006119863241261 [GeV] +Cell[1,6] 0.00031558594498142 [GeV] +Cell[1,8] 9.7211977845291e-09 [GeV] +Cell[3,23] 3.3490740599973e-07 [GeV] +Cell[4,5] 0.00018080868425841 [GeV] +Cell[3,22] 0.0016637858282746 [GeV] +Cell[3,4] 0.0018929542244598 [GeV] +Cell[2,4] 2.1158503386687e-08 [GeV] +Cell[2,6] 0.013204897141304 [GeV] +Cell[2,10] 0.0005476916718244 [GeV] +Cell[3,24] 0.00045707889876508 [GeV] +Cell[2,24] 1.690408680588e-08 [GeV] +Cell[6,3] 0.0026653971535238 [GeV] +Cell[6,2] 3.4981807693839e-06 [GeV] +Cell[5,4] 0.0049019689360141 [GeV] +Cell[4,4] 2.424894773867e-11 [GeV] +Cell[14,46] 0.00062619362227031 [GeV] +Cell[13,12] 2.0591088104993e-07 [GeV] +Cell[4,8] 2.9379473062363e-08 [GeV] +Cell[6,44] 2.3797086256536e-06 [GeV] +Cell[3,25] 0.00091198697434767 [GeV] +Cell[2,2] 0.00093615473144314 [GeV] +Cell[3,9] 1.5429635662258e-05 [GeV] +Cell[1,5] 5.2499235607684e-09 [GeV] +### Total energy deposition in calorimeter by a source track in 56 cells : 0.4376159611468 (GeV) + +Source track ID 3947 (pi+,3.2624812772611[GeV]) at (499.98985406426,-3.1852523924424,-1674.5430356039) Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[9,20] 0.00010666847946182 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00010666847946182 (GeV) +Cell[0,47] 0.16292435940036 [GeV] +Cell[1,47] 0.14472110485641 [GeV] +### Total energy deposition in calorimeter by a source track in 2 cells : 0.30764546425677 (GeV) -Source track ID 3774 (gamma,0.11842844646265[GeV]) at (-222.77896510703,447.62655496054,-125.00341775776) +Source track ID 3943 (gamma,0.53051937575115[GeV]) at (475.84610310408,-153.52682554089,-782.17055226591) Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[8,7] 0.00040028294790883 [GeV] -Cell[9,18] 0.00015279364970766 [GeV] -Cell[9,17] 5.665476750774e-06 [GeV] -Cell[9,15] 0.11610931209952 [GeV] -Cell[9,16] 0.00084819511539381 [GeV] -Cell[8,15] 0.00029048230128012 [GeV] -Cell[5,43] 0.00051099891 [GeV] -### Total energy deposition in calorimeter by a source track in 7 cells : 0.11831773050056 (GeV) - -Source track ID 3786 (gamma,0.00010773733939936[GeV]) at (204.09986793829,456.44632094867,-799.16249695597) +Cell[6,45] 0.085471652774737 [GeV] +Cell[3,28] 0.0011157168892212 [GeV] +Cell[5,43] 0.00087983987576091 [GeV] +Cell[5,40] 0.0019242731716458 [GeV] +Cell[4,31] 0.0060936348037996 [GeV] +Cell[1,20] 0.00036535528422158 [GeV] +Cell[1,19] 1.9390437137119e-05 [GeV] +Cell[5,45] 0.41447079717351 [GeV] +Cell[5,46] 0.0077478620134652 [GeV] +Cell[5,44] 0.0070808194580399 [GeV] +Cell[4,14] 0.0029843037040817 [GeV] +Cell[8,42] 0.00011075820827089 [GeV] +Cell[10,2] 0.00069786622297983 [GeV] +Cell[3,9] 0.00044755551800394 [GeV] +Cell[4,28] 0.00051099891 [GeV] +### Total energy deposition in calorimeter by a source track in 15 cells : 0.52992082444487 (GeV) + +Source track ID 3944 (gamma,0.17927399228015[GeV]) at (168.15423032776,-470.87594419643,-1264.5234723672) Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[6,8] 0.00010773733939936 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00010773733939936 (GeV) - -Source track ID 3787 (gamma,0.0003373682726942[GeV]) at (-348.58192375087,358.45591421281,-59.792668496081) +Cell[3,38] 0.14747504896157 [GeV] +Cell[3,37] 0.00051099891 [GeV] +Cell[2,38] 0.019202901814012 [GeV] +Cell[2,41] 5.74911616341e-05 [GeV] +Cell[2,37] 0.00071354937973295 [GeV] +Cell[5,7] 0.0002668998880861 [GeV] +Cell[3,40] 0.00011409826078382 [GeV] +Cell[3,39] 0.0094257031575881 [GeV] +Cell[2,42] 0.00033940948758208 [GeV] +Cell[4,38] 0.00055602616874348 [GeV] +Cell[2,39] 0.00051099891 [GeV] +### Total energy deposition in calorimeter by a source track in 11 cells : 0.17917312609973 (GeV) + +Source track ID 3935 (gamma,0.032780237466954[GeV]) at (-224.35719453581,446.83760949591,-131.06251602711) Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[9,17] 0.0003373682726942 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0003373682726942 (GeV) +Cell[9,15] 0.0315379904948 [GeV] +Cell[6,14] 0.00046993470785387 [GeV] +### Total energy deposition in calorimeter by a source track in 2 cells : 0.032007925202654 (GeV) -Source track ID 3778 (gamma,6.9331467840626e-05[GeV]) at (-221.03573807621,448.48991347979,-119.85938823823) +Source track ID 3936 (gamma,6.2895118049029e-05[GeV]) at (-221.91282787752,448.05657770354,-131.74551959358) Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[9,15] 6.9331467840626e-05 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 6.9331467840626e-05 (GeV) +Cell[9,15] 6.2895118049029e-05 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 6.2895118049029e-05 (GeV) -Source track ID 3780 (gamma,0.0006914408215308[GeV]) at (-115.64889334047,486.44150056212,-134.62349392107) +Source track ID 3937 (gamma,0.017245058026456[GeV]) at (-219.39305684444,449.29576740545,-132.04653970382) Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[9,13] 0.0006914408215308 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0006914408215308 (GeV) +Cell[9,15] 0.017245058026456 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.017245058026456 (GeV) -Source track ID 3781 (gamma,0.0025693854645118[GeV]) at (-114.49282896265,486.71489818592,-133.8857069525) +Source track ID 3939 (gamma,0.00026120054485321[GeV]) at (-326.84872757052,378.37799788774,-20.960470543568) Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[9,13] 0.0025693854645118 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0025693854645118 (GeV) +Cell[9,17] 0.00026120054485321 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00026120054485321 (GeV) -Source track ID 3751 (e+,0.21821989895668[GeV]) at (-94.124051764993,491.06075273772,-139.1819722553) +Source track ID 3940 (gamma,0.0017291660728107[GeV]) at (-191.52460966289,461.86396687063,-134.67774976171) Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[9,11] 0.0065853351796782 [GeV] -Cell[9,12] 0.031082900287198 [GeV] -Cell[6,7] 0.00051099891 [GeV] -Cell[9,31] 0.00048364441629432 [GeV] -Cell[9,13] 0.17852978926613 [GeV] -Cell[1,45] 0.00067937328645488 [GeV] -Cell[9,35] 0.00051099891 [GeV] -### Total energy deposition in calorimeter by a source track in 7 cells : 0.21838304025576 (GeV) - -Source track ID 3761 (gamma,0.047653051782958[GeV]) at (-498.29489049711,41.257752053085,-129.00298029816) -Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[9,32] 0.000504420965863 [GeV] -Cell[9,23] 0.044492848183309 [GeV] -Cell[9,24] 0.0021277442516666 [GeV] -### Total energy deposition in calorimeter by a source track in 3 cells : 0.047125013400839 (GeV) +Cell[9,14] 0.0017291660728107 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0017291660728107 (GeV) -Source track ID 3763 (gamma,0.024140770956666[GeV]) at (-499.60864470399,19.778830527726,-129.4936288089) +Source track ID 3941 (gamma,0.17657273234075[GeV]) at (-148.446590787,477.45534836644,-140.42615686204) Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[12,32] 0.0014648930632388 [GeV] -Cell[9,22] 0.00011916665098213 [GeV] -Cell[10,34] 0.00025999309279283 [GeV] -Cell[9,23] 0.020199905598942 [GeV] -Cell[9,24] 0.0014783212977204 [GeV] -### Total energy deposition in calorimeter by a source track in 5 cells : 0.023522279703677 (GeV) - -Source track ID 3752 (e-,0.43896946253926[GeV]) at (-499.71324474358,16.931421317987,-129.62192805384) +Cell[6,42] 0.00051099891 [GeV] +Cell[8,15] 0.00090976916142332 [GeV] +Cell[8,13] 0.0013551306231726 [GeV] +Cell[9,13] 0.064012691024162 [GeV] +Cell[5,33] 0.00036424086354158 [GeV] +Cell[9,14] 0.10039782008528 [GeV] +Cell[10,34] 1.1788235189215e-05 [GeV] +Cell[10,36] 6.2596900306744e-08 [GeV] +Cell[10,35] 6.0193362166956e-06 [GeV] +Cell[10,12] 9.4589203945361e-07 [GeV] +### Total energy deposition in calorimeter by a source track in 10 cells : 0.16756946672793 (GeV) + +Source track ID 3911 (e+,0.11362844075843[GeV]) at (-111.20820786021,487.47588094645,-147.11273502287) Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[8,22] 0.00013204671802342 [GeV] -Cell[10,22] 0.00048736154465989 [GeV] -Cell[10,23] 0.00061332063980871 [GeV] -Cell[9,22] 0.0002176347303843 [GeV] -Cell[5,36] 0.00020699660120988 [GeV] -Cell[0,43] 0.00023445633512376 [GeV] -Cell[9,26] 0.00051099891 [GeV] -Cell[9,25] 0.002865887288908 [GeV] -Cell[9,23] 0.33301822587491 [GeV] -Cell[9,24] 0.096038115382244 [GeV] -Cell[8,24] 0.0031769105386528 [GeV] -### Total energy deposition in calorimeter by a source track in 11 cells : 0.43750195456393 (GeV) - -Source track ID 3753 (gamma,0.14815181584447[GeV]) at (-470.4546704167,169.32927414689,-336.66116513327) +Cell[9,13] 0.11145970627625 [GeV] +Cell[7,41] 0.00051099891 [GeV] +Cell[12,22] 0.00157381876057 [GeV] +Cell[12,21] 8.4915741623294e-05 [GeV] +Cell[16,41] 0.00051099891 [GeV] +### Total energy deposition in calorimeter by a source track in 5 cells : 0.11414043859844 (GeV) + +Source track ID 3920 (gamma,0.27545702837091[GeV]) at (-493.60050816029,79.740443589805,-130.61617810366) Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[8,22] 0.0013644021274201 [GeV] -Cell[8,21] 0.1409410103997 [GeV] -Cell[7,22] 0.001371777406438 [GeV] -Cell[8,20] 0.0044746259109127 [GeV] -### Total energy deposition in calorimeter by a source track in 4 cells : 0.14815181584447 (GeV) +Cell[9,21] 0.0034791160632205 [GeV] +Cell[8,22] 0.0012124917821282 [GeV] +Cell[9,23] 0.012346154727332 [GeV] +Cell[9,22] 0.25841926579823 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.27545702837091 (GeV) -Source track ID 3741 (e-,0.0005314944031829[GeV]) at (-499.89812296191,-10.092901424163,1573.7258993128) +Source track ID 3922 (gamma,0.0058467026144737[GeV]) at (-498.81787414017,34.361729267884,-135.00225834871) Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[17,24] 1.321529986564e-06 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 1.321529986564e-06 (GeV) +Cell[9,23] 0.0058467026144737 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0058467026144737 (GeV) -Source track ID 3703 (pi+,0.18774308716983[GeV]) at (-499.87441767884,-11.205648140304,1578.3005905961) +Source track ID 3928 (gamma,0.021859166172418[GeV]) at (-493.37975432282,-81.095117142504,-146.91297648829) Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[17,24] 0.072639051697401 [GeV] -Cell[17,25] 0.00083867407584341 [GeV] -Cell[18,24] 0.0024394257879168 [GeV] -### Total energy deposition in calorimeter by a source track in 3 cells : 0.075917151561162 (GeV) +Cell[8,25] 0.0010135386813804 [GeV] +Cell[10,30] 0.00051099891 [GeV] +Cell[9,25] 0.019221013407181 [GeV] +### Total energy deposition in calorimeter by a source track in 3 cells : 0.020745550998561 (GeV) -Source track ID 3695 (pi-,0.95265790944347[GeV]) at (-377.71319350121,-327.61676308626,-225.70233253804) +Source track ID 3912 (e-,0.2092592792842[GeV]) at (-489.48562621379,-101.99912612417,-152.28765658241) Original primary track ID 27 (unknown,1.8699577628705[GeV]) -Cell[8,9] 0.00032685568167 [GeV] -Cell[8,29] 0.41154130585839 [GeV] -Cell[8,28] 1.8089973944143e-05 [GeV] -Cell[8,30] 0.26532602672455 [GeV] -Cell[7,34] 0.00085515337904599 [GeV] -Cell[4,35] 0.0006801632773238 [GeV] -Cell[5,34] 7.156986364862e-06 [GeV] -Cell[7,33] 0.0032463745206628 [GeV] -Cell[7,31] 0.0018989985353989 [GeV] -Cell[8,33] 3.9643790330274e-05 [GeV] -Cell[7,30] 0.026235057148087 [GeV] -Cell[7,28] 0.0014020399572895 [GeV] -Cell[7,29] 0.015415899350466 [GeV] -Cell[4,36] 0.00095528019286133 [GeV] -Cell[8,31] 0.00064008566646544 [GeV] -Cell[8,32] 4.1556050632607e-08 [GeV] -Cell[9,29] 2.9402419098915e-05 [GeV] -Cell[6,31] 1.6039617172169e-05 [GeV] -Cell[7,32] 0.0016415825987661 [GeV] -Cell[4,37] 0.0096314858089848 [GeV] -Cell[4,38] 0.0035591654535988 [GeV] -Cell[5,35] 2.5775173811553e-06 [GeV] -Cell[6,30] 3.7294716526731e-05 [GeV] -### Total energy deposition in calorimeter by a source track in 23 cells : 0.74350572073043 (GeV) - -Source track ID 3682 (e-,0.00060983145352941[GeV]) at (-497.17934196542,53.03491230157,1591.8889015933) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[17,23] 6.7179095246478e-06 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 6.7179095246478e-06 (GeV) - -Source track ID 3642 (pi-,0.29731951674684[GeV]) at (-496.22785621822,61.301832868797,1841.0325728336) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[17,34] 6.577465676537e-05 [GeV] -Cell[17,44] 3.1437682628166e-06 [GeV] -Cell[17,33] 0.00012413890070775 [GeV] -Cell[19,22] 0.11527462773184 [GeV] -Cell[19,21] 0.00065855513670817 [GeV] -Cell[19,23] 0.097016291074769 [GeV] -### Total energy deposition in calorimeter by a source track in 6 cells : 0.21314253126906 (GeV) - -Source track ID 3643 (pi+,3.7103573241371[GeV]) at (209.34999874903,454.06230632346,1946.6141251542) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[18,30] 0.00051099891 [GeV] -Cell[19,8] 0.15206466723452 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.15257566614452 (GeV) - -Source track ID 3576 (gamma,0.29185834298843[GeV]) at (-329.54129033715,376.03528818839,233.08073682052) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[11,17] 0.27564569561575 [GeV] -Cell[11,18] 0.0027071517796834 [GeV] -Cell[11,16] 0.0095395963447258 [GeV] -Cell[11,15] 0.00027459950502698 [GeV] -Cell[10,17] 0.0021109581278283 [GeV] -Cell[10,16] 0.00092048075914392 [GeV] -Cell[10,18] 9.1028837535456e-05 [GeV] -Cell[19,7] 0.00010750038058002 [GeV] -### Total energy deposition in calorimeter by a source track in 8 cells : 0.29139701135027 (GeV) - -Source track ID 3637 (gamma,0.0058190626804494[GeV]) at (-499.82180737067,-13.347691812372,236.35412645596) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[11,24] 0.0058190626804494 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0058190626804494 (GeV) - -Source track ID 3638 (gamma,0.00010341283391875[GeV]) at (-471.35417182421,-166.80900666305,386.11461004726) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[11,26] 0.00010341283391875 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00010341283391875 (GeV) - -Source track ID 3639 (gamma,0.008752623827927[GeV]) at (-358.81294870334,-348.21439924681,430.94961716306) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[14,20] 0.00051099891 [GeV] -Cell[12,29] 0.008241624917927 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.008752623827927 (GeV) - -Source track ID 3628 (gamma,0.00071221386753707[GeV]) at (32.969401183837,498.91183448138,92.946979201616) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[10,11] 0.00071221386753707 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00071221386753707 (GeV) - -Source track ID 3630 (gamma,6.0076237851382e-05[GeV]) at (-297.69208865846,401.72057496494,284.13536369546) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[11,16] 6.0076237851382e-05 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 6.0076237851382e-05 (GeV) - -Source track ID 3631 (gamma,0.00035360325086232[GeV]) at (-302.98968155043,397.74018262425,284.53241854481) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[11,16] 0.00035360325086232 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00035360325086232 (GeV) - -Source track ID 3632 (gamma,0.025409509881479[GeV]) at (-335.09148000174,371.09796554312,284.82502932668) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[11,17] 0.025409509881479 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.025409509881479 (GeV) - -Source track ID 3633 (gamma,0.00035285890686858[GeV]) at (-334.96034120133,371.21633830193,285.32541060212) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[11,17] 0.00035285890686858 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00035285890686858 (GeV) - -Source track ID 3627 (e-,0.12375068899384[GeV]) at (-361.87983316343,345.02606618864,284.54887605429) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[11,18] 0.11916516585263 [GeV] -Cell[11,19] 0.002233729488366 [GeV] -Cell[12,12] 0.0007451798243429 [GeV] -Cell[11,8] 0.0010055458236934 [GeV] -### Total energy deposition in calorimeter by a source track in 4 cells : 0.12314962098903 (GeV) - -Source track ID 3580 (gamma,0.0057077480947025[GeV]) at (-63.127513697527,495.99890827941,148.78199339036) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[10,12] 0.0057077480947025 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0057077480947025 (GeV) - -Source track ID 3582 (gamma,0.00052266040258736[GeV]) at (361.83339346944,345.07476779734,1355.3560820288) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[16,5] 0.00052266040258736 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00052266040258736 (GeV) - -Source track ID 3583 (gamma,0.006355733238504[GeV]) at (-148.08076076258,477.56893564383,350.55819287738) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[11,14] 0.006355733238504 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.006355733238504 (GeV) - -Source track ID 3585 (gamma,0.00064105350324323[GeV]) at (53.121671596652,497.17007955706,310.73895624046) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[11,11] 0.00064105350324323 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00064105350324323 (GeV) - -Source track ID 3586 (gamma,0.0023604148389201[GeV]) at (-150.00242415771,476.96883833937,301.2517802521) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[11,14] 0.0023604148389201 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0023604148389201 (GeV) - -Source track ID 3587 (gamma,0.00021635842339402[GeV]) at (-311.85637689039,390.82681611271,305.52327733153) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[11,17] 0.00021635842339402 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00021635842339402 (GeV) +Cell[7,15] 0.00043750637920282 [GeV] +Cell[8,25] 0.00051099891 [GeV] +Cell[7,9] 0.00027351310072649 [GeV] +Cell[4,24] 0.00015377236515488 [GeV] +Cell[8,17] 0.00078599223090877 [GeV] +Cell[9,27] 0.0070068337522579 [GeV] +Cell[9,26] 0.070207942464789 [GeV] +Cell[8,26] 0.0038541079632281 [GeV] +Cell[8,35] 0.00051099891 [GeV] +Cell[8,33] 0.00066262641075784 [GeV] +Cell[11,41] 0.00043608469674784 [GeV] +Cell[7,18] 0.0011480171523842 [GeV] +Cell[7,19] 0.00016057753755968 [GeV] +Cell[9,25] 0.12238780248602 [GeV] +### Total energy deposition in calorimeter by a source track in 14 cells : 0.20853677435973 (GeV) + +Source track ID 3913 (gamma,0.14815181584447[GeV]) at (-470.45468180925,169.32924249449,-336.66124839571) +Original primary track ID 27 (unknown,1.8699577628705[GeV]) +Cell[8,21] 0.13306406178945 [GeV] +Cell[8,20] 0.013789800508617 [GeV] +Cell[8,19] 0.00072594806668465 [GeV] +Cell[8,43] 0.00057200547971618 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.14815181584447 (GeV) -Source track ID 3614 (gamma,2.2908828371779e-05[GeV]) at (-447.03212948714,223.96936220428,1053.0523963724) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[15,20] 2.2908828371779e-05 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 2.2908828371779e-05 (GeV) +Source track ID 3858 (pi+,0.18772837537208[GeV]) at (-499.80065747182,-14.117464033343,1566.9105402252) +Original primary track ID 27 (unknown,1.8699577628705[GeV]) +Cell[17,24] 0.088404405214403 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.088404405214403 (GeV) -Source track ID 3579 (e+,0.0057153007643299[GeV]) at (60.877759462958,496.28006045253,1162.3484208399) +Source track ID 3848 (pi-,0.95213357518426[GeV]) at (-379.20617004478,-325.88752753054,-223.23684216419) +Original primary track ID 27 (unknown,1.8699577628705[GeV]) +Cell[7,31] 0.019357958056731 [GeV] +Cell[7,30] 0.47980993903118 [GeV] +Cell[8,30] 0.18966740601277 [GeV] +Cell[8,29] 0.21845082772806 [GeV] +Cell[7,29] 0.043524207281764 [GeV] +### Total energy deposition in calorimeter by a source track in 5 cells : 0.95081033811051 (GeV) + +Source track ID 3804 (pi-,0.29747966513282[GeV]) at (-493.18217346277,82.288175204817,1854.3762267234) Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[15,45] 0.00051099891 [GeV] -Cell[15,11] 0.0045580241077336 [GeV] -Cell[15,10] 0.0011572766565963 [GeV] -### Total energy deposition in calorimeter by a source track in 3 cells : 0.0062262996743299 (GeV) - -Source track ID 3573 (gamma,0.0029008862900342[GeV]) at (-430.54966103089,-254.21838915819,168.39856787217) +Cell[13,43] 0.0015489996397446 [GeV] +Cell[14,32] 0.00016642125475948 [GeV] +Cell[16,7] 1.8186186876846e-05 [GeV] +Cell[16,44] 0.00062358109976243 [GeV] +Cell[17,34] 0.0015451365959769 [GeV] +Cell[16,6] 9.1248872340657e-06 [GeV] +Cell[14,8] 0.00045906991634797 [GeV] +Cell[16,47] 0.0040968364343765 [GeV] +Cell[14,1] 9.4739953055978e-09 [GeV] +Cell[13,42] 0.00034695764971798 [GeV] +Cell[15,24] 1.6388919902965e-08 [GeV] +Cell[18,22] 0.0036135430672621 [GeV] +Cell[16,0] 0.00040736661433846 [GeV] +Cell[16,46] 0.0017023213357699 [GeV] +Cell[15,17] 1.9873841665685e-09 [GeV] +Cell[14,2] 4.4932938180864e-08 [GeV] +Cell[12,4] 2.5232058513211e-05 [GeV] +Cell[15,14] 8.1263859942737e-07 [GeV] +Cell[14,4] 1.79593986486e-05 [GeV] +Cell[18,21] 0.00085348466552136 [GeV] +Cell[19,21] 0.0025810930533077 [GeV] +Cell[16,39] 2.6151884097771e-06 [GeV] +Cell[18,23] 0.00099020186333735 [GeV] +Cell[15,15] 1.4963678859203e-07 [GeV] +Cell[16,41] 0.00012520835025009 [GeV] +Cell[17,41] 0.0011876854566635 [GeV] +Cell[19,24] 0.0012163252341583 [GeV] +Cell[19,23] 0.0072251923682544 [GeV] +Cell[18,42] 9.1701974160969e-05 [GeV] +Cell[17,47] 0.00043769155221651 [GeV] +Cell[19,25] 0.00026145929587926 [GeV] +Cell[18,2] 0.00080851997695345 [GeV] +Cell[19,22] 0.13559436897045 [GeV] +Cell[17,19] 0.0014590554803328 [GeV] +Cell[16,40] 0.0013070265183601 [GeV] +Cell[17,45] 0.0085421407506171 [GeV] +Cell[17,46] 9.6515802357596e-05 [GeV] +Cell[18,3] 1.773285995057e-05 [GeV] +Cell[17,3] 2.6166134375671e-08 [GeV] +### Total energy deposition in calorimeter by a source track in 39 cells : 0.17737981672527 (GeV) + +Source track ID 3805 (pi+,3.7104014802371[GeV]) at (208.98002967888,454.23270159183,1948.2398376235) Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[10,28] 0.0029008862900342 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0029008862900342 (GeV) +Cell[19,8] 0.072179750235213 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.072179750235213 (GeV) -Source track ID 3574 (gamma,0.0010094822932592[GeV]) at (-431.90450911534,-251.90969613303,220.08047314644) +Source track ID 3693 (pi+,0.59337689231277[GeV]) at (-418.12094922388,274.18036366618,364.19452059622) Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[11,28] 0.0010094822932592 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0010094822932592 (GeV) - -Source track ID 3566 (gamma,0.15251351239083[GeV]) at (-487.09323609617,-112.87240295733,-730.31340023795) +Cell[12,17] 0.0028365405225826 [GeV] +Cell[11,19] 0.059602059999661 [GeV] +Cell[12,18] 0.21135660845355 [GeV] +Cell[13,17] 0.0099601682513961 [GeV] +Cell[12,19] 0.18354096485104 [GeV] +Cell[11,17] 0.050184037933017 [GeV] +Cell[11,16] 0.017529407974876 [GeV] +### Total energy deposition in calorimeter by a source track in 7 cells : 0.53500978798612 (GeV) + +Source track ID 3791 (gamma,0.15251351239083[GeV]) at (-487.09323516882,-112.87240695923,-730.31336363223) Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[6,24] 0.0016273011733799 [GeV] -Cell[6,25] 0.1475198440058 [GeV] -Cell[5,25] 0.0011941560466133 [GeV] -Cell[5,27] 0.001476882339351 [GeV] -Cell[5,28] 0.00069532882567963 [GeV] +Cell[7,45] 0.00051099891 [GeV] +Cell[6,26] 0.00078585575872629 [GeV] +Cell[5,25] 0.0060127466007795 [GeV] +Cell[5,26] 0.0010164399693279 [GeV] +Cell[6,25] 0.14418747115199 [GeV] ### Total energy deposition in calorimeter by a source track in 5 cells : 0.15251351239083 (GeV) -Source track ID 3567 (gamma,0.13352323164713[GeV]) at (-462.29599703015,-190.47942442663,2.9650486282192) -Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[10,26] 0.080428764175838 [GeV] -Cell[10,27] 0.017963755632158 [GeV] -Cell[9,27] 0.02548366796643 [GeV] -Cell[9,13] 0.00061355574565975 [GeV] -Cell[9,26] 0.0080130906739543 [GeV] -Cell[12,15] 0.00031485717903209 [GeV] -### Total energy deposition in calorimeter by a source track in 6 cells : 0.13281769137307 (GeV) - -Source track ID 3549 (pi-,0.85376342222921[GeV]) at (323.42686827774,-381.30704278318,732.80139462116) +Source track ID 3792 (gamma,0.13352323164713[GeV]) at (-462.29599803999,-190.47942197574,2.9650246920206) Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[14,33] 0.0002340280326498 [GeV] -Cell[14,31] 2.8401641378878e-05 [GeV] -Cell[14,44] 0.00044715317709893 [GeV] -Cell[14,43] 0.0056196471866219 [GeV] -Cell[13,25] 1.3847416266799e-07 [GeV] -Cell[14,26] 8.1687554484233e-08 [GeV] -Cell[14,40] 0.0062141938289084 [GeV] -Cell[13,33] 0.00093786496446774 [GeV] -Cell[16,29] 0.00066440215232888 [GeV] -Cell[16,28] 6.3455361896558e-08 [GeV] -Cell[14,41] 0.099040073005817 [GeV] -Cell[12,21] 2.44975607784e-05 [GeV] -Cell[12,39] 1.0066392612998e-05 [GeV] -Cell[17,22] 0.0010101122682104 [GeV] -Cell[12,7] 1.5346499825682e-05 [GeV] -Cell[16,42] 0.004659177046837 [GeV] -Cell[16,40] 0.0087669089896424 [GeV] -Cell[16,44] 0.0017234354245952 [GeV] -Cell[18,43] 0.0017240139750447 [GeV] -Cell[18,44] 0.0017136374050716 [GeV] -Cell[17,44] 0.00083400026591198 [GeV] -Cell[17,42] 0.011374351492827 [GeV] -Cell[17,43] 0.00015881381794026 [GeV] -Cell[17,41] 0.014761002986551 [GeV] -Cell[16,41] 0.0066341419503841 [GeV] -Cell[16,39] 3.3449033082888e-07 [GeV] -Cell[15,45] 9.1667510650041e-05 [GeV] -Cell[13,20] 0.0004068744272508 [GeV] -Cell[13,43] 1.9402349484153e-05 [GeV] -Cell[16,23] 8.2487656527519e-10 [GeV] -Cell[12,6] 0.0017391136653133 [GeV] -Cell[13,7] 4.6014411145734e-07 [GeV] -Cell[13,44] 1.6125200258102e-05 [GeV] -Cell[13,45] 1.5835742495256e-05 [GeV] -Cell[13,42] 0.0050717488174205 [GeV] -Cell[14,42] 0.17769777178172 [GeV] -Cell[13,41] 0.12083561164492 [GeV] -Cell[14,39] 1.7871063668281e-05 [GeV] -Cell[17,38] 0.00029010663915847 [GeV] -Cell[17,39] 0.00091419250986951 [GeV] -Cell[17,40] 0.0016382388255852 [GeV] -Cell[19,40] 1.4272966915655e-05 [GeV] -Cell[16,10] 2.4228080292232e-07 [GeV] -Cell[15,15] 1.9142738221944e-06 [GeV] -Cell[14,34] 1.4015123497302e-09 [GeV] -Cell[16,21] 2.7855167791131e-05 [GeV] -Cell[16,22] 1.0398438422499e-06 [GeV] -Cell[15,40] 0.0025374578642081 [GeV] -Cell[17,21] 1.4196444724803e-05 [GeV] -Cell[14,25] 1.2717500794679e-08 [GeV] -Cell[19,2] 0.0012730159024014 [GeV] -Cell[13,40] 0.0022178545484324 [GeV] -Cell[13,34] 0.00087986589350851 [GeV] -Cell[15,43] 0.0016834690798747 [GeV] -Cell[15,39] 7.4520681663444e-06 [GeV] -Cell[12,38] 4.6767381718382e-08 [GeV] -Cell[14,4] 5.7888159062713e-08 [GeV] -Cell[15,44] 0.00070530896073351 [GeV] -Cell[13,6] 4.2715109884739e-09 [GeV] -Cell[15,42] 0.0047589059402077 [GeV] -Cell[19,24] 1.105952708167e-05 [GeV] -Cell[15,29] 2.3696222342551e-08 [GeV] -Cell[17,20] 1.4711301337229e-05 [GeV] -Cell[15,41] 0.0050381664472785 [GeV] -Cell[14,29] 7.4802053859457e-08 [GeV] -Cell[19,44] 4.998073721481e-06 [GeV] -Cell[16,43] 0.0013471787213737 [GeV] -Cell[18,25] 2.0955021114787e-05 [GeV] -Cell[18,27] 0.00031390868250128 [GeV] -Cell[19,45] 0.00096860588578625 [GeV] -Cell[19,46] 4.4123782470933e-05 [GeV] -Cell[19,47] 1.3046196727373e-09 [GeV] -Cell[19,43] 1.2408393899932e-08 [GeV] -Cell[19,17] 0.00086510359972504 [GeV] -### Total energy deposition in calorimeter by a source track in 74 cells : 0.49810280685487 (GeV) - -Source track ID 3546 (gamma,0.37778731993224[GeV]) at (315.8962632478,-387.56876920887,149.20563541961) +Cell[10,26] 0.10459481118635 [GeV] +Cell[10,27] 0.0033461125690661 [GeV] +Cell[9,27] 0.0015928413064366 [GeV] +Cell[9,26] 0.023479906558358 [GeV] +Cell[10,32] 0.00022712340550027 [GeV] +### Total energy deposition in calorimeter by a source track in 5 cells : 0.13324079502571 (GeV) + +Source track ID 3785 (pi-,0.85381383458441[GeV]) at (324.01386523191,-380.80837062422,734.36320862401) Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[11,40] 0.0025882369396866 [GeV] -Cell[11,42] 0.0014414374468327 [GeV] -Cell[10,42] 0.0019065698828282 [GeV] -Cell[11,12] 0.00068254903737367 [GeV] -Cell[10,40] 0.0036429929231878 [GeV] -Cell[10,41] 0.33992595611763 [GeV] -Cell[11,41] 0.024732268027925 [GeV] -Cell[10,38] 0.00051099891 [GeV] -Cell[10,39] 0.0017482827989555 [GeV] -### Total energy deposition in calorimeter by a source track in 9 cells : 0.37717929208442 (GeV) - -Source track ID 3547 (gamma,0.13885684299554[GeV]) at (475.10685030381,-155.79948906974,345.33250051924) +Cell[8,25] 1.1034135241061e-09 [GeV] +Cell[8,28] 4.2469560821473e-05 [GeV] +Cell[10,40] 0.00070333401890343 [GeV] +Cell[10,23] 0.00287110368555 [GeV] +Cell[12,17] 1.5711163314336e-08 [GeV] +Cell[13,43] 0.016134866742537 [GeV] +Cell[8,31] 3.2968030154734e-07 [GeV] +Cell[6,30] 0.00052145836717204 [GeV] +Cell[7,30] 0.00013574124746606 [GeV] +Cell[2,9] 0.00030985226982227 [GeV] +Cell[19,3] 0.001183469762491 [GeV] +Cell[18,11] 2.980450517498e-08 [GeV] +Cell[19,17] 4.6608094999101e-06 [GeV] +Cell[13,2] 0.00016656968411712 [GeV] +Cell[12,27] 1.5373936621472e-05 [GeV] +Cell[13,36] 0.0012148735254315 [GeV] +Cell[13,44] 6.1039336515364e-05 [GeV] +Cell[12,43] 0.0015671617497156 [GeV] +Cell[11,39] 3.8093971624562e-05 [GeV] +Cell[9,40] 1.0536610170675e-07 [GeV] +Cell[8,29] 5.475155279828e-05 [GeV] +Cell[7,28] 8.0989038384587e-06 [GeV] +Cell[7,32] 7.6691460242273e-07 [GeV] +Cell[12,1] 5.6609860621393e-10 [GeV] +Cell[12,0] 0.00029769688577771 [GeV] +Cell[12,46] 5.4465224675369e-06 [GeV] +Cell[13,17] 2.7016180978308e-06 [GeV] +Cell[15,45] 4.8186286585405e-07 [GeV] +Cell[15,27] 3.1759009046937e-06 [GeV] +Cell[13,11] 0.0036893392672298 [GeV] +Cell[10,15] 9.9622411653399e-11 [GeV] +Cell[6,4] 4.3596017438404e-05 [GeV] +Cell[13,35] 0.0025268707595826 [GeV] +Cell[13,33] 7.8823554213159e-07 [GeV] +Cell[3,19] 0.0031073649200241 [GeV] +Cell[8,2] 0.00033681632121329 [GeV] +Cell[1,9] 0.00088552199931981 [GeV] +Cell[13,38] 0.00016170256783638 [GeV] +Cell[10,11] 3.8686289364705e-05 [GeV] +Cell[6,5] 1.3751370751152e-06 [GeV] +Cell[2,10] 6.0854729235871e-06 [GeV] +Cell[13,45] 0.00077764658833348 [GeV] +Cell[13,0] 9.3237586611394e-08 [GeV] +Cell[14,44] 3.2814373480505e-07 [GeV] +Cell[14,45] 0.0027277548465472 [GeV] +Cell[14,46] 0.0001184733715919 [GeV] +Cell[12,42] 0.0053158987778116 [GeV] +Cell[14,43] 7.1041400205218e-05 [GeV] +Cell[14,39] 0.00050330658343228 [GeV] +Cell[14,40] 5.5464364465024e-05 [GeV] +Cell[14,38] 0.003217818011662 [GeV] +Cell[14,41] 0.0055046055732599 [GeV] +Cell[13,42] 0.071316782355975 [GeV] +Cell[13,6] 3.6034156563574e-06 [GeV] +Cell[13,41] 0.27892160001169 [GeV] +Cell[16,34] 0.0002636875017627 [GeV] +Cell[17,11] 2.8301918297075e-05 [GeV] +Cell[12,41] 0.012290332112862 [GeV] +Cell[14,42] 0.0025627070470279 [GeV] +Cell[13,40] 0.0076695296968743 [GeV] +Cell[13,39] 0.0017697596987159 [GeV] +Cell[12,40] 6.2824833094055e-08 [GeV] +Cell[14,36] 0.001618906238794 [GeV] +Cell[14,37] 0.0015604386395321 [GeV] +Cell[12,39] 3.6149107245365e-09 [GeV] +Cell[11,15] 1.6959969210347e-05 [GeV] +Cell[13,10] 5.2802178979618e-05 [GeV] +Cell[12,2] 0.00045745003964521 [GeV] +Cell[12,4] 0.0013370375825145 [GeV] +Cell[12,3] 0.00043761237071271 [GeV] +Cell[3,15] 2.1174550056458e-07 [GeV] +Cell[12,5] 3.5571682674345e-06 [GeV] +Cell[17,12] 1.9476959496501e-05 [GeV] +Cell[14,5] 1.2419253209373e-05 [GeV] +Cell[16,1] 3.4105478903257e-08 [GeV] +Cell[14,35] 2.0338663006441e-05 [GeV] +Cell[19,18] 0.000737381046654 [GeV] +Cell[13,5] 4.4434696881126e-06 [GeV] +Cell[14,6] 6.01304898737e-07 [GeV] +Cell[8,37] 5.7281363697257e-06 [GeV] +Cell[15,9] 0.00059224913270422 [GeV] +Cell[13,16] 0.00082546913821739 [GeV] +Cell[15,26] 4.056200850755e-10 [GeV] +Cell[14,11] 1.71581027098e-06 [GeV] +Cell[16,27] 0.00040379187459348 [GeV] +Cell[16,26] 0.001662707767153 [GeV] +Cell[8,1] 1.2181812962808e-08 [GeV] +Cell[19,10] 0.0044825666882952 [GeV] +Cell[18,17] 7.4171103769913e-06 [GeV] +Cell[17,25] 1.2116798490752e-05 [GeV] +Cell[16,28] 0.0037569761141131 [GeV] +Cell[8,24] 1.4319084584713e-09 [GeV] +Cell[6,31] 0.0025807284525625 [GeV] +Cell[17,21] 0.0001399601640078 [GeV] +Cell[10,12] 0.00020128618935803 [GeV] +Cell[3,26] 3.8350280573241e-06 [GeV] +Cell[19,2] 0.0010596652116906 [GeV] +Cell[16,21] 0.00010942534264147 [GeV] +Cell[18,12] 3.1401913411514e-05 [GeV] +Cell[17,13] 6.4620286366335e-09 [GeV] +Cell[17,1] 1.1354712729599e-05 [GeV] +Cell[17,0] 0.00039597783267425 [GeV] +Cell[12,16] 1.3099254101803e-05 [GeV] +### Total energy deposition in calorimeter by a source track in 103 cells : 0.45183778313441 (GeV) + +Source track ID 3782 (gamma,0.37778731993224[GeV]) at (315.89622112269,-387.56880354384,149.20559116824) Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[12,43] 0.00051099891 [GeV] -Cell[12,45] 0.014094231552046 [GeV] -Cell[11,46] 0.0022603772404359 [GeV] -Cell[11,45] 0.12069218993721 [GeV] -Cell[15,12] 0.0012990453558504 [GeV] -### Total energy deposition in calorimeter by a source track in 5 cells : 0.13885684299554 (GeV) - -Source track ID 3466 (gamma,0.1484777566564[GeV]) at (-237.22760835445,440.13982077793,-159.00519744343) +Cell[10,40] 0.023716301939993 [GeV] +Cell[10,23] 4.4979302478836e-05 [GeV] +Cell[10,41] 0.33474161737701 [GeV] +Cell[10,42] 0.003675833772326 [GeV] +Cell[10,38] 0.0012168449046421 [GeV] +Cell[11,39] 0.00096130934527031 [GeV] +Cell[11,41] 0.011873827253155 [GeV] +Cell[11,40] 0.0005072395501731 [GeV] +Cell[10,22] 0.0010493664871894 [GeV] +### Total energy deposition in calorimeter by a source track in 9 cells : 0.37778731993224 (GeV) + +Source track ID 3783 (gamma,0.13885684299554[GeV]) at (475.10690395845,-155.7993254511,345.3325908261) Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[9,15] 0.1250359052707 [GeV] -Cell[9,16] 0.0056751841552283 [GeV] -Cell[7,23] 0.0012834656920455 [GeV] -Cell[8,23] 0.0028959609612533 [GeV] -Cell[8,16] 0.0031525304255406 [GeV] -Cell[8,15] 0.010434710151639 [GeV] -### Total energy deposition in calorimeter by a source track in 6 cells : 0.1484777566564 (GeV) - -Source track ID 3467 (gamma,0.20137908385321[GeV]) at (152.32666397934,476.23165312789,-66.015726084815) +Cell[11,45] 0.12375041960977 [GeV] +Cell[12,46] 0.0046457416443849 [GeV] +Cell[12,45] 0.0060207952265593 [GeV] +Cell[12,38] 0.00048363722679116 [GeV] +Cell[11,44] 0.00068173569438125 [GeV] +Cell[14,30] 0.0018379822437534 [GeV] +### Total energy deposition in calorimeter by a source track in 6 cells : 0.13742031164564 (GeV) + +Source track ID 3708 (gamma,0.1484777566564[GeV]) at (-237.22756680472,440.1398431725,-159.00519163365) Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[9,9] 0.19693724375569 [GeV] -Cell[9,10] 0.0044418400975252 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.20137908385321 (GeV) +Cell[8,15] 0.0010124912705558 [GeV] +Cell[9,16] 0.0011627096466957 [GeV] +Cell[9,14] 0.00051099891 [GeV] +Cell[9,15] 0.14579155682915 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.1484777566564 (GeV) -Source track ID 3457 (pi-,0.39803121107763[GeV]) at (380.70307279132,-324.13757938143,345.49089707551) +Source track ID 3709 (gamma,0.20137908385321[GeV]) at (152.32663211712,476.23166331929,-66.015736602336) Original primary track ID 29 (unknown,1.6025887774154[GeV]) -Cell[8,22] 3.767649685642e-07 [GeV] -Cell[11,42] 0.11663569048889 [GeV] -Cell[11,43] 0.01772151480955 [GeV] -Cell[12,42] 1.4208140783012e-08 [GeV] -Cell[10,42] 3.9135315777457e-05 [GeV] -Cell[16,4] 0.0008549764170549 [GeV] -Cell[17,7] 6.7983777553309e-06 [GeV] -Cell[16,3] 0.0025312377019468 [GeV] -Cell[12,33] 1.2478737247875e-05 [GeV] -Cell[10,26] 1.2724729836918e-05 [GeV] -Cell[10,29] 2.9087616697666e-05 [GeV] -Cell[9,27] 0.00042765750289425 [GeV] -Cell[9,15] 0.0035917447987072 [GeV] -Cell[9,37] 0.00056631007083649 [GeV] -Cell[9,36] 3.0504345578493e-06 [GeV] -Cell[10,43] 0.00052863741265332 [GeV] -Cell[14,7] 1.0411269793167e-06 [GeV] -Cell[9,13] 1.4076531783758e-08 [GeV] -Cell[10,24] 7.7767486218363e-06 [GeV] -Cell[10,45] 3.1979083018996e-08 [GeV] -Cell[12,5] 0.00025979832847759 [GeV] -Cell[16,6] 0.00035183510950594 [GeV] -Cell[15,7] 2.0736932148111e-06 [GeV] -Cell[12,43] 0.0020203986208771 [GeV] -Cell[12,6] 0.00037631729548218 [GeV] -Cell[7,23] 9.5578949100172e-05 [GeV] -Cell[14,47] 0.00035070881302761 [GeV] -Cell[15,47] 1.0721934319008e-05 [GeV] -Cell[3,47] 5.669772702845e-06 [GeV] -Cell[8,23] 6.3090720043192e-05 [GeV] -Cell[11,41] 0.002301363801504 [GeV] -Cell[12,45] 1.7817365005612e-10 [GeV] -Cell[12,44] 5.0434331642464e-06 [GeV] -Cell[11,44] 0.017093255820053 [GeV] -Cell[11,46] 0.0026772737694941 [GeV] -Cell[11,45] 2.4969882170126e-05 [GeV] -Cell[10,44] 8.6647536903683e-05 [GeV] -Cell[16,7] 0.0010380086051584 [GeV] -Cell[16,2] 0.00033576498074763 [GeV] -Cell[10,30] 0.00024583276674173 [GeV] -Cell[17,39] 0.00081435797111757 [GeV] -Cell[17,4] 0.00065865245112261 [GeV] -Cell[17,5] 0.0041182655342283 [GeV] -Cell[16,8] 0.00010567578477651 [GeV] -Cell[15,6] 1.2490015708863e-05 [GeV] -Cell[14,6] 2.9840430943295e-07 [GeV] -Cell[13,40] 1.185426992015e-05 [GeV] -Cell[12,3] 0.00044528302666515 [GeV] -Cell[8,24] 0.00028396231825059 [GeV] -Cell[16,14] 0.00058712062309545 [GeV] -Cell[9,14] 4.2562634784645e-05 [GeV] -### Total energy deposition in calorimeter by a source track in 51 cells : 0.17739517636358 (GeV) - -Source track ID 3449 (gamma,0.094503470007519[GeV]) at (318.07142350657,385.78565233625,-1059.6704796729) +Cell[9,8] 0.00079725674714414 [GeV] +Cell[9,9] 0.19109689388628 [GeV] +Cell[10,44] 0.00029967442367947 [GeV] +Cell[1,20] 0.00024210268797204 [GeV] +Cell[11,2] 0.0015426247469493 [GeV] +Cell[8,37] 0.0046313982629066 [GeV] +Cell[3,26] 0.0014533754552589 [GeV] +### Total energy deposition in calorimeter by a source track in 7 cells : 0.20006332621019 (GeV) + +Source track ID 3698 (pi-,0.39863090190415[GeV]) at (389.05812500422,-314.06014609976,367.72739951852) +Original primary track ID 29 (unknown,1.6025887774154[GeV]) +Cell[9,21] 0.00015352563193539 [GeV] +Cell[8,15] 5.2011548632436e-09 [GeV] +Cell[9,31] 0.00041770691986755 [GeV] +Cell[9,12] 0.00081604844743685 [GeV] +Cell[8,13] 0.0002166267026488 [GeV] +Cell[10,39] 0.00054603087958913 [GeV] +Cell[9,13] 0.043355295786514 [GeV] +Cell[9,19] 2.9614202503581e-06 [GeV] +Cell[9,20] 6.3884270105063e-07 [GeV] +Cell[8,20] 0.00032234886489334 [GeV] +Cell[13,43] 3.0549170053291e-06 [GeV] +Cell[9,14] 6.1423778824974e-06 [GeV] +Cell[7,30] 5.6628196325619e-06 [GeV] +Cell[13,2] 2.8813562784535e-05 [GeV] +Cell[12,44] 0.0089402619806693 [GeV] +Cell[11,22] 2.0455324943214e-08 [GeV] +Cell[11,24] 0.0015714108595748 [GeV] +Cell[11,25] 6.1752411307907e-06 [GeV] +Cell[12,22] 2.8603739110622e-09 [GeV] +Cell[9,18] 0.0015122230606062 [GeV] +Cell[13,44] 0.0043130684258177 [GeV] +Cell[12,43] 0.0038901309913123 [GeV] +Cell[11,21] 0.00037831820342956 [GeV] +Cell[11,38] 7.6740371533788e-06 [GeV] +Cell[11,39] 0.0030716296058348 [GeV] +Cell[7,28] 1.7097453337556e-09 [GeV] +Cell[11,45] 1.5417452261318e-05 [GeV] +Cell[12,45] 4.2579559101341e-07 [GeV] +Cell[8,14] 0.00027416549068312 [GeV] +Cell[14,13] 1.157995640051e-05 [GeV] +Cell[14,12] 9.2202974542488e-08 [GeV] +Cell[11,43] 0.046329990008023 [GeV] +Cell[7,29] 0.0018531818262718 [GeV] +Cell[7,2] 0.0025096629268924 [GeV] +Cell[12,38] 0.00051564870988705 [GeV] +Cell[8,2] 5.0671745748218e-05 [GeV] +Cell[13,45] 2.7783376481239e-08 [GeV] +Cell[12,42] 0.0036513193161991 [GeV] +Cell[13,29] 1.0657225936939e-07 [GeV] +Cell[11,42] 0.051794829277301 [GeV] +Cell[11,41] 5.3991713539176e-05 [GeV] +Cell[11,44] 0.0018401094672205 [GeV] +Cell[12,41] 9.5750139053052e-09 [GeV] +Cell[12,40] 0.0048292069648007 [GeV] +Cell[11,40] 0.0061541944861231 [GeV] +Cell[12,39] 0.00076829997538493 [GeV] +Cell[12,2] 0.00070880310508846 [GeV] +Cell[8,3] 0.00019217599965145 [GeV] +Cell[15,12] 7.4816512096731e-11 [GeV] +Cell[17,14] 2.5176208349876e-05 [GeV] +Cell[18,17] 3.0663534289488e-09 [GeV] +Cell[17,24] 1.8735401681624e-07 [GeV] +Cell[17,15] 0.00036803229035718 [GeV] +Cell[17,19] 1.4057276363019e-05 [GeV] +Cell[13,30] 7.9610617831349e-10 [GeV] +Cell[17,16] 0.00055648742284748 [GeV] +Cell[18,15] 3.9086926949494e-07 [GeV] +Cell[18,16] 0.0011118873346467 [GeV] +### Total energy deposition in calorimeter by a source track in 58 cells : 0.19319591284909 (GeV) + +Source track ID 3690 (gamma,0.094503470007519[GeV]) at (318.07142848478,385.78564823182,-1059.6707251638) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[7,35] 0.0003106718142101 [GeV] -Cell[4,5] 0.0018171497074295 [GeV] -Cell[8,46] 0.00019933597438543 [GeV] -Cell[4,6] 0.084232399591505 [GeV] -Cell[3,6] 0.0014968939808368 [GeV] -Cell[3,5] 0.00071480412729001 [GeV] -Cell[4,27] 0.00046457270789223 [GeV] -Cell[4,7] 0.0047566431939693 [GeV] -Cell[4,24] 0.00051099891 [GeV] -### Total energy deposition in calorimeter by a source track in 9 cells : 0.094503470007518 (GeV) - -Source track ID 3411 (pi+,0.33206741432253[GeV]) at (216.65561458096,450.62217507636,-1601.6299873901) +Cell[7,27] 0.0023850561741192 [GeV] +Cell[5,26] 0.0010073950049027 [GeV] +Cell[3,6] 0.0017167229970811 [GeV] +Cell[1,26] 0.00016322297164885 [GeV] +Cell[4,11] 0.0080474082528067 [GeV] +Cell[4,6] 0.079103316749379 [GeV] +Cell[0,25] 0.00049456894445135 [GeV] +Cell[0,26] 0.0015857789131293 [GeV] +### Total energy deposition in calorimeter by a source track in 8 cells : 0.094503470007519 (GeV) + +Source track ID 3648 (pi+,0.33215999893325[GeV]) at (217.64735133233,450.14401079879,-1597.1405688573) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[1,9] 0.0058030929666901 [GeV] -Cell[3,25] 7.5165226589888e-06 [GeV] -Cell[1,20] 0.00011808276457283 [GeV] -Cell[1,8] 0.19175099022407 [GeV] -Cell[1,7] 0.00059929947517787 [GeV] -Cell[2,8] 7.2160882991739e-06 [GeV] -Cell[2,43] 2.4618930183351e-10 [GeV] -Cell[1,36] 0.00052538433934595 [GeV] -Cell[1,45] 5.952934238428e-05 [GeV] -Cell[3,24] 1.8730926705757e-05 [GeV] -Cell[0,45] 4.7599343152342e-05 [GeV] -Cell[0,44] 0.00034913345891539 [GeV] -Cell[2,41] 0.00067235527856474 [GeV] -Cell[2,42] 5.0879249783975e-08 [GeV] -### Total energy deposition in calorimeter by a source track in 14 cells : 0.19995898185598 (GeV) - -Source track ID 3412 (pi-,0.61478780647266[GeV]) at (84.361564135978,492.83174258212,-894.2304299368) +Cell[2,8] 0.0039759461360331 [GeV] +Cell[0,6] 0.0025665770130937 [GeV] +Cell[1,7] 0.080919322729485 [GeV] +Cell[1,8] 0.15176827769596 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.23923012357457 (GeV) + +Source track ID 3649 (pi-,0.61476192851045[GeV]) at (84.645291153395,492.78309090873,-891.75129648103) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[8,13] 7.8738560638726e-05 [GeV] -Cell[7,14] 0.0009402780305787 [GeV] -Cell[7,41] 0.00083932546940128 [GeV] -Cell[8,14] 0.0014948144126797 [GeV] -Cell[5,30] 0.0017003850125159 [GeV] -Cell[6,7] 0.0045708205822135 [GeV] -Cell[7,28] 0.0010958538401514 [GeV] -Cell[1,27] 0.00018567456113192 [GeV] -Cell[6,10] 0.0019578979899833 [GeV] -Cell[6,0] 3.2247302966425e-05 [GeV] -Cell[16,30] 0.00029383902994721 [GeV] -Cell[5,7] 0.0034983289330046 [GeV] -Cell[5,8] 0.016202328565604 [GeV] -Cell[6,18] 0.0010620443493181 [GeV] -Cell[3,28] 0.00033935980200727 [GeV] -Cell[3,29] 0.00035568563764639 [GeV] -Cell[7,13] 0.0076665574961709 [GeV] -Cell[8,41] 2.3197430709843e-06 [GeV] -Cell[8,40] 1.0688920650864e-05 [GeV] -Cell[10,41] 0.00076736700778258 [GeV] -Cell[1,20] 0.0029469602359243 [GeV] -Cell[1,19] 0.001684081808681 [GeV] -Cell[2,29] 1.7962101920602e-05 [GeV] -Cell[2,11] 0.0013479009333617 [GeV] -Cell[2,20] 0.0019883121051461 [GeV] -Cell[4,28] 2.6801264004916e-07 [GeV] -Cell[5,16] 0.0034635842084703 [GeV] -Cell[7,47] 0.00051732277747748 [GeV] -Cell[1,29] 0.00047453793180739 [GeV] -Cell[1,28] 0.00079225778823456 [GeV] -Cell[1,26] 4.7974172048271e-08 [GeV] -Cell[1,31] 0.0002918553468319 [GeV] -Cell[0,30] 3.9308007948534e-05 [GeV] -Cell[0,29] 5.7820172514766e-08 [GeV] -Cell[1,11] 0.00080055633618111 [GeV] -Cell[1,10] 3.282173808725e-05 [GeV] -Cell[0,0] 1.4473957999144e-05 [GeV] -Cell[0,10] 0.00090191306140139 [GeV] -Cell[1,37] 0.00055877874160502 [GeV] -Cell[4,15] 0.0015719704043422 [GeV] -Cell[2,10] 4.4487111653211e-05 [GeV] -Cell[5,5] 0.0007220122672901 [GeV] -Cell[2,43] 9.4155606348068e-06 [GeV] -Cell[3,20] 0.0014563314708196 [GeV] -Cell[2,30] 1.5218869736714e-05 [GeV] -Cell[6,16] 0.00045166227894128 [GeV] -Cell[4,29] 8.7860418034325e-09 [GeV] -Cell[3,42] 0.0014028383769568 [GeV] -Cell[2,31] 0.019000776342515 [GeV] -Cell[5,11] 0.0027170927008456 [GeV] -Cell[5,15] 0.037822205367155 [GeV] -Cell[5,14] 0.0070352327098194 [GeV] -Cell[5,13] 7.2759576141834e-13 [GeV] -Cell[1,33] 0.0012251312279352 [GeV] -Cell[1,32] 4.3364427342794e-05 [GeV] -Cell[1,30] 0.00018776922565542 [GeV] -Cell[4,23] 1.8528099608375e-05 [GeV] -Cell[1,1] 2.4309268223988e-07 [GeV] -Cell[5,10] 0.046741036263931 [GeV] -Cell[5,9] 0.0055034897683721 [GeV] -Cell[5,12] 0.0012409446577557 [GeV] -Cell[4,7] 0.00016102523856364 [GeV] -Cell[5,6] 0.001821084766548 [GeV] -Cell[5,3] 1.8703161686062e-09 [GeV] -Cell[5,4] 5.0948062835232e-09 [GeV] -Cell[6,9] 0.00096813776023578 [GeV] -Cell[6,8] 0.011344197725429 [GeV] -Cell[10,13] 0.00012600845672869 [GeV] -Cell[4,8] 0.0007014178467208 [GeV] -Cell[4,9] 1.417352485123e-05 [GeV] -Cell[6,14] 0.02627505174164 [GeV] -Cell[3,21] 0.00038085222204154 [GeV] -Cell[2,6] 0.0013779998131746 [GeV] -Cell[0,8] 0.00017168560615495 [GeV] -Cell[6,15] 0.000870493073702 [GeV] -Cell[6,13] 5.480251275003e-11 [GeV] -Cell[6,17] 0.00028454627733822 [GeV] -### Total energy deposition in calorimeter by a source track in 77 cells : 0.23067399621934 (GeV) - -Source track ID 1807 (pi+,0.42347995018399[GeV]) at (-383.67991173727,320.60836752849,-1076.8996293665) +Cell[6,11] 0.00086639268570429 [GeV] +Cell[9,21] 2.5769316061997e-07 [GeV] +Cell[5,8] 0.0038599319897884 [GeV] +Cell[2,32] 8.7996689910142e-05 [GeV] +Cell[7,43] 2.9069370648358e-05 [GeV] +Cell[1,29] 0.00060684455120982 [GeV] +Cell[5,34] 5.1003101107199e-06 [GeV] +Cell[6,27] 1.6924895021475e-08 [GeV] +Cell[3,38] 0.0026517216128767 [GeV] +Cell[6,9] 0.0020949702608087 [GeV] +Cell[9,45] 5.2008581701557e-06 [GeV] +Cell[6,28] 0.00085960069516841 [GeV] +Cell[6,39] 2.085932251066e-05 [GeV] +Cell[7,38] 2.5938045611838e-05 [GeV] +Cell[6,10] 0.0018389043787373 [GeV] +Cell[7,27] 6.7031608068646e-09 [GeV] +Cell[3,37] 5.0907848635688e-06 [GeV] +Cell[12,29] 1.2536358553916e-08 [GeV] +Cell[11,38] 0.0025576828693831 [GeV] +Cell[7,28] 0.00039249860740711 [GeV] +Cell[8,44] 0.0001801477618169 [GeV] +Cell[3,30] 0.00067278153809104 [GeV] +Cell[7,35] 0.00088424271001221 [GeV] +Cell[7,34] 0.0015027404956826 [GeV] +Cell[8,43] 0.0022525169164129 [GeV] +Cell[1,47] 8.9984891528729e-06 [GeV] +Cell[5,9] 0.014648087058639 [GeV] +Cell[5,10] 0.2930924755394 [GeV] +Cell[0,6] 9.409268386662e-11 [GeV] +Cell[1,46] 4.2108566267416e-06 [GeV] +Cell[5,42] 1.5304748085327e-05 [GeV] +Cell[4,33] 7.2482015821151e-07 [GeV] +Cell[6,34] 0.00034878666544819 [GeV] +Cell[5,19] 0.002326263070208 [GeV] +Cell[4,11] 0.00138851335834 [GeV] +Cell[4,12] 5.3742040181533e-06 [GeV] +Cell[4,37] 4.1073810425587e-06 [GeV] +Cell[1,10] 1.4524142141454e-05 [GeV] +Cell[1,11] 0.00072758055902432 [GeV] +Cell[1,34] 0.00015935348993173 [GeV] +Cell[1,33] 3.8387952372432e-11 [GeV] +Cell[1,7] 0.00023601518235068 [GeV] +Cell[2,31] 0.00050825997099662 [GeV] +Cell[3,31] 2.9468983484549e-09 [GeV] +Cell[3,29] 9.9267253972357e-11 [GeV] +Cell[5,11] 0.0030404486556822 [GeV] +Cell[5,12] 0.00056197165488987 [GeV] +Cell[1,32] 1.565688519463e-06 [GeV] +Cell[1,41] 2.0829902496189e-09 [GeV] +Cell[2,40] 2.0555469964165e-06 [GeV] +Cell[2,43] 0.0010005096115999 [GeV] +Cell[3,12] 0.0045488055018306 [GeV] +Cell[3,13] 0.0011120686199883 [GeV] +Cell[4,13] 0.0059354890451216 [GeV] +Cell[5,7] 6.4399453152419e-05 [GeV] +Cell[1,40] 2.2553431335837e-09 [GeV] +Cell[6,6] 0.0026596206147632 [GeV] +Cell[6,7] 1.6322494309406e-07 [GeV] +Cell[1,12] 0.0022350368035004 [GeV] +Cell[1,6] 1.1833333257982e-07 [GeV] +Cell[4,9] 8.7938678916544e-09 [GeV] +Cell[1,28] 0.0001385359293854 [GeV] +Cell[1,35] 1.0250127195377e-06 [GeV] +Cell[2,24] 0.0002844178125406 [GeV] +Cell[2,18] 1.8803205301765e-05 [GeV] +Cell[3,18] 4.7408761671704e-05 [GeV] +Cell[6,1] 0.00021548021396779 [GeV] +Cell[5,1] 3.5113091535891e-05 [GeV] +Cell[7,42] 0.00067882556409318 [GeV] +Cell[4,8] 6.8346107639172e-07 [GeV] +Cell[8,42] 8.4968377486803e-06 [GeV] +Cell[4,10] 0.0041071936981529 [GeV] +Cell[9,43] 0.00026322707823419 [GeV] +Cell[10,22] 1.1607684427872e-08 [GeV] +Cell[9,44] 0.00049982445615077 [GeV] +Cell[9,42] 0.0011476994155782 [GeV] +Cell[4,38] 9.4646442221347e-09 [GeV] +Cell[6,18] 4.2177853174508e-09 [GeV] +Cell[5,6] 0.00010103305432369 [GeV] +### Total energy deposition in calorimeter by a source track in 79 cells : 0.36359916779583 (GeV) + +Source track ID 1844 (pi+,0.42347029136028[GeV]) at (-383.78926886929,320.47745178215,-1068.7937551661) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[8,22] 0.00055518279408787 [GeV] -Cell[7,5] 0.00069258629793509 [GeV] -Cell[3,38] 0.00014292846650142 [GeV] -Cell[5,38] 0.0011740965378426 [GeV] -Cell[3,18] 0.0013331189028145 [GeV] -Cell[9,16] 9.4369481957983e-05 [GeV] -Cell[5,8] 0.0020981052938714 [GeV] -Cell[15,14] 0.0012732731698664 [GeV] -Cell[6,28] 0.0007708976623785 [GeV] -Cell[5,18] 2.312236409125e-06 [GeV] -Cell[4,18] 0.12853826123445 [GeV] -Cell[4,17] 0.0017585518054178 [GeV] -Cell[4,19] 0.0036161445846211 [GeV] -Cell[3,19] 5.5692562904369e-05 [GeV] -Cell[4,28] 0.0003464071063131 [GeV] -Cell[4,44] 0.00063308833522381 [GeV] -Cell[3,39] 0.00053184921411129 [GeV] -Cell[2,39] 8.5059160774108e-06 [GeV] -Cell[0,28] 1.0134565498447e-05 [GeV] -Cell[3,36] 0.00060133454181201 [GeV] -Cell[1,44] 2.6290907349903e-05 [GeV] -Cell[7,44] 0.00051099891 [GeV] -Cell[3,44] 1.7475923641541e-09 [GeV] -Cell[4,16] 0.0038075244036682 [GeV] -Cell[3,43] 0.00042797748068938 [GeV] -Cell[5,37] 0.079902727679433 [GeV] -Cell[4,23] 0.00010807673833952 [GeV] -Cell[5,10] 0.0022102921583668 [GeV] -Cell[8,18] 8.8549565314111e-05 [GeV] -Cell[9,44] 0.00022221730317592 [GeV] -Cell[8,17] 0.00054394062286553 [GeV] -Cell[8,16] 0.00053199847135181 [GeV] -Cell[6,27] 1.1552731972188e-05 [GeV] -Cell[5,46] 0.00018886064819302 [GeV] -Cell[5,26] 2.4575120357213e-05 [GeV] -Cell[5,27] 0.00023809765955821 [GeV] -Cell[13,23] 0.00051099891 [GeV] -Cell[2,38] 3.9272271969821e-06 [GeV] -Cell[5,43] 0.0012432722788824 [GeV] -Cell[5,28] 2.2987964999629e-05 [GeV] -Cell[0,35] 0.00064097492697874 [GeV] -### Total energy deposition in calorimeter by a source track in 41 cells : 0.23550268416638 (GeV) - -Source track ID 3357 (pi-,0.49365567630953[GeV]) at (310.80729996643,-391.66161707215,-962.83180809471) +Cell[5,8] 5.9593705518637e-06 [GeV] +Cell[1,29] 3.4217177686514e-05 [GeV] +Cell[5,34] 0.0013274221263734 [GeV] +Cell[7,3] 0.00015054365781953 [GeV] +Cell[7,4] 3.1308755974237e-05 [GeV] +Cell[5,35] 2.889569931574e-05 [GeV] +Cell[9,35] 1.1729367543012e-08 [GeV] +Cell[7,36] 7.8641854985335e-06 [GeV] +Cell[7,37] 0.0021044159726522 [GeV] +Cell[4,30] 0.0022230575002134 [GeV] +Cell[7,27] 2.0587475690945e-06 [GeV] +Cell[4,17] 0.0021339786169007 [GeV] +Cell[7,26] 8.8946195451172e-06 [GeV] +Cell[8,35] 8.0344082357442e-07 [GeV] +Cell[4,16] 5.7759739295761e-05 [GeV] +Cell[4,19] 0.00027648082660448 [GeV] +Cell[3,19] 2.1703344774551e-06 [GeV] +Cell[5,18] 0.0053806226715426 [GeV] +Cell[4,18] 0.29713290669752 [GeV] +Cell[5,19] 4.9558474333026e-05 [GeV] +Cell[4,11] 3.6515437444905e-05 [GeV] +Cell[0,38] 0.0007242600235495 [GeV] +Cell[6,7] 0.0006472633035804 [GeV] +Cell[1,28] 0.0026811392752935 [GeV] +Cell[3,18] 0.00045354302035275 [GeV] +Cell[3,17] 2.4679874768481e-06 [GeV] +Cell[3,16] 0.00031590661124595 [GeV] +Cell[6,20] 2.9921324312454e-08 [GeV] +Cell[6,19] 0.0011674193117947 [GeV] +Cell[6,36] 6.8793298908076e-07 [GeV] +Cell[7,40] 0.00071574743950252 [GeV] +Cell[8,3] 2.3523124355052e-09 [GeV] +Cell[8,37] 7.9981982707977e-09 [GeV] +Cell[9,43] 4.2519153794274e-08 [GeV] +Cell[1,27] 0.00057466650930837 [GeV] +### Total energy deposition in calorimeter by a source track in 35 cells : 0.31827862998759 (GeV) + +Source track ID 3594 (pi-,0.4935830136494[GeV]) at (312.51215908492,-390.30263952999,-964.01338394792) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[9,8] 1.0276143435476e-05 [GeV] -Cell[9,7] 1.6856309666764e-06 [GeV] -Cell[9,9] 1.0488731752503e-06 [GeV] -Cell[7,35] 9.9215661748531e-09 [GeV] -Cell[1,9] 1.2181471840563e-05 [GeV] -Cell[5,41] 0.064347302492063 [GeV] -Cell[5,44] 0.00042909389860813 [GeV] -Cell[5,45] 0.0064447900655838 [GeV] -Cell[10,8] 1.9746205230376e-05 [GeV] -Cell[4,40] 0.0011036554459279 [GeV] -Cell[10,6] 0.00033311243968251 [GeV] -Cell[10,7] 9.2983854019735e-05 [GeV] -Cell[7,36] 0.00034543588582085 [GeV] -Cell[0,36] 4.0524204581743e-05 [GeV] -Cell[2,23] 4.6758868847974e-07 [GeV] -Cell[1,20] 1.0329876386095e-06 [GeV] -Cell[1,21] 2.0385023006952e-05 [GeV] -Cell[3,39] 1.1861357574162e-05 [GeV] -Cell[0,28] 0.0011736820681642 [GeV] -Cell[2,9] 1.8760948017871e-06 [GeV] -Cell[1,11] 0.00028248303099281 [GeV] -Cell[1,10] 0.0014607147059749 [GeV] -Cell[4,47] 0.00055745231726951 [GeV] -Cell[2,21] 1.3969886640552e-06 [GeV] -Cell[2,10] 2.0215080553498e-08 [GeV] -Cell[3,45] 1.6436382111351e-08 [GeV] -Cell[3,46] 2.1757681316785e-06 [GeV] -Cell[3,41] 1.965614722576e-05 [GeV] -Cell[4,45] 0.0036932410005411 [GeV] -Cell[4,43] 1.9511785088753e-05 [GeV] -Cell[3,43] 6.329940399155e-06 [GeV] -Cell[0,6] 0.00041020129904678 [GeV] -Cell[0,31] 8.6168351117522e-07 [GeV] -Cell[4,38] 0.0015597264177011 [GeV] -Cell[4,42] 0.032849829957237 [GeV] -Cell[4,39] 0.030295759519276 [GeV] -Cell[4,41] 0.17986357574948 [GeV] -Cell[18,21] 0.00010608300015826 [GeV] -Cell[17,21] 3.6775065041184e-08 [GeV] -Cell[5,46] 0.0018321580038192 [GeV] -Cell[4,46] 0.0020736607623383 [GeV] -Cell[17,20] 5.6784650666941e-07 [GeV] -Cell[6,19] 0.0012939406450807 [GeV] -Cell[5,43] 5.1745962686255e-05 [GeV] -Cell[5,42] 0.0020310917379076 [GeV] -Cell[6,20] 0.00056643595166611 [GeV] -Cell[10,9] 9.977232843994e-08 [GeV] -### Total energy deposition in calorimeter by a source track in 47 cells : 0.33336992507194 (GeV) - -Source track ID 3358 (pi+,1.8608254425711[GeV]) at (-197.41478477688,459.37719006444,-618.49888905887) +Cell[6,27] 2.2544532548636e-06 [GeV] +Cell[5,15] 0.0021294654018652 [GeV] +Cell[5,14] 6.9150769377302e-10 [GeV] +Cell[5,36] 0.0028338549714624 [GeV] +Cell[5,35] 0.0044891562517978 [GeV] +Cell[6,28] 7.5508565097493e-05 [GeV] +Cell[5,40] 0.0020045855262145 [GeV] +Cell[6,39] 0.00011932016623825 [GeV] +Cell[7,7] 1.3809296273394e-05 [GeV] +Cell[9,13] 2.8140594421075e-05 [GeV] +Cell[4,40] 0.0017428481819143 [GeV] +Cell[5,33] 0.0011784936728017 [GeV] +Cell[9,14] 0.00013552806427424 [GeV] +Cell[6,38] 0.00066714810942983 [GeV] +Cell[7,36] 0.00016394300464844 [GeV] +Cell[5,28] 7.039054937195e-06 [GeV] +Cell[6,32] 1.3424840290099e-08 [GeV] +Cell[10,47] 0.0011631458238382 [GeV] +Cell[9,47] 6.67748565902e-05 [GeV] +Cell[5,21] 0.00016103205501315 [GeV] +Cell[7,35] 6.840094079962e-06 [GeV] +Cell[5,26] 0.00053549760757471 [GeV] +Cell[2,27] 5.9033958177679e-07 [GeV] +Cell[5,41] 0.067332087363941 [GeV] +Cell[6,14] 0.00027281487651544 [GeV] +Cell[6,15] 8.516213935286e-05 [GeV] +Cell[6,34] 0.00049283259477181 [GeV] +Cell[4,6] 0.0004470122724216 [GeV] +Cell[2,26] 3.1155646910179e-05 [GeV] +Cell[3,7] 0.0015837484536844 [GeV] +Cell[0,43] 3.3504756574985e-06 [GeV] +Cell[6,33] 2.1521200858615e-05 [GeV] +Cell[4,5] 0.00049383012739384 [GeV] +Cell[2,25] 0.00048639273463891 [GeV] +Cell[4,42] 0.0014324982845514 [GeV] +Cell[6,35] 0.0090807965416189 [GeV] +Cell[11,47] 0.00011252906181835 [GeV] +Cell[11,0] 1.2357066763798e-05 [GeV] +Cell[6,37] 0.0010779145730185 [GeV] +Cell[6,36] 0.11968279998756 [GeV] +Cell[5,38] 0.00033529567459948 [GeV] +Cell[4,41] 0.12488302571694 [GeV] +Cell[10,0] 0.00025760886261833 [GeV] +Cell[3,26] 2.1641267267114e-10 [GeV] +Cell[5,37] 0.0011365852166569 [GeV] +Cell[5,23] 5.3293344990379e-09 [GeV] +Cell[4,36] 4.8696182784624e-06 [GeV] +Cell[4,35] 0.00062602653311069 [GeV] +Cell[3,35] 6.2649742062604e-08 [GeV] +Cell[5,27] 5.9875633910451e-06 [GeV] +### Total energy deposition in calorimeter by a source track in 50 cells : 0.34742326099022 (GeV) + +Source track ID 3595 (pi+,1.8609220056376[GeV]) at (-197.37880885741,459.39264884631,-617.96168073483) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[8,9] 7.7938220058513e-06 [GeV] -Cell[7,10] 0.00048688825209115 [GeV] -Cell[7,9] 1.3600057627627e-08 [GeV] -Cell[7,7] 4.1806873923633e-06 [GeV] -Cell[8,22] 3.3299264032394e-08 [GeV] -Cell[9,9] 7.4792187660933e-09 [GeV] -Cell[7,12] 0.0035716100590575 [GeV] -Cell[7,11] 0.00055713630637217 [GeV] -Cell[11,39] 3.7553496667897e-08 [GeV] -Cell[8,12] 1.6910882550292e-07 [GeV] -Cell[8,6] 0.0024054802769082 [GeV] -Cell[5,31] 0.00092252663244869 [GeV] -Cell[9,0] 6.2207447667788e-06 [GeV] -Cell[7,14] 0.01339577211679 [GeV] -Cell[6,32] 0.00052595476016984 [GeV] -Cell[6,29] 0.0045274008117347 [GeV] -Cell[8,5] 0.0043485636311911 [GeV] -Cell[4,5] 2.2047482657399e-06 [GeV] -Cell[7,45] 7.9345333651872e-06 [GeV] -Cell[4,35] 1.0870610192342e-06 [GeV] -Cell[8,46] 2.0441816642006e-05 [GeV] -Cell[7,46] 7.5618390837917e-10 [GeV] -Cell[7,6] 0.0036031028087684 [GeV] -Cell[7,5] 9.1122303729207e-09 [GeV] -Cell[4,34] 2.9607326723635e-10 [GeV] -Cell[6,37] 7.9901222779881e-06 [GeV] -Cell[7,15] 0.0063062316948905 [GeV] -Cell[3,25] 0.00020314666663319 [GeV] -Cell[8,45] 0.00072381982963805 [GeV] -Cell[5,30] 0.00543959113483 [GeV] -Cell[7,4] 0.00050261767444696 [GeV] -Cell[8,0] 0.00068865987261951 [GeV] -Cell[7,1] 0.00064580477718822 [GeV] -Cell[7,24] 0.00099968035183922 [GeV] -Cell[6,34] 6.6581855353434e-06 [GeV] -Cell[9,45] 2.3451866582036e-09 [GeV] -Cell[2,37] 8.1883335951716e-09 [GeV] -Cell[1,27] 0.0062972052072885 [GeV] -Cell[6,10] 5.705987988199e-05 [GeV] -Cell[6,4] 0.0014459998787562 [GeV] -Cell[7,18] 0.0014653808111296 [GeV] -Cell[7,3] 1.3158493349692e-05 [GeV] -Cell[16,32] 2.6406862889417e-07 [GeV] -Cell[15,30] 0.00035215795361335 [GeV] -Cell[12,29] 5.3238625184804e-07 [GeV] -Cell[11,47] 2.2606109268963e-09 [GeV] -Cell[16,3] 0.0003351700911677 [GeV] -Cell[10,27] 0.00020247654123869 [GeV] -Cell[8,31] 0.00013633044268352 [GeV] -Cell[8,32] 0.00012386419355732 [GeV] -Cell[5,7] 0.0020770165342969 [GeV] -Cell[3,31] 0.00013630335579478 [GeV] -Cell[7,36] 3.2007615664043e-06 [GeV] -Cell[0,37] 9.8100625327788e-06 [GeV] -Cell[1,13] 0.00013143066489863 [GeV] -Cell[7,13] 0.0059861031369186 [GeV] -Cell[7,37] 1.2516470596893e-05 [GeV] -Cell[6,38] 3.1636334024256e-05 [GeV] -Cell[16,15] 0.00048266689175421 [GeV] -Cell[16,42] 0.0098375885643348 [GeV] -Cell[16,40] 2.1786041900782e-05 [GeV] -Cell[9,1] 0.0021127630106878 [GeV] -Cell[8,1] 0.0013955466291108 [GeV] -Cell[8,2] 0.00024377519562313 [GeV] -Cell[16,44] 2.6930467822694e-07 [GeV] -Cell[17,2] 9.9945945629543e-06 [GeV] -Cell[17,1] 3.0650707596578e-05 [GeV] -Cell[17,3] 0.00086352781941935 [GeV] -Cell[16,41] 0.0023159279748852 [GeV] -Cell[16,39] 0.0018764175681576 [GeV] -Cell[5,32] 2.7543356303909e-05 [GeV] -Cell[4,32] 2.3273699160882e-06 [GeV] -Cell[15,46] 1.5449055208592e-05 [GeV] -Cell[6,28] 9.868984243667e-06 [GeV] -Cell[16,47] 0.00032510734056211 [GeV] -Cell[12,14] 3.5631615573948e-06 [GeV] -Cell[10,1] 8.7311491370201e-14 [GeV] -Cell[11,3] 5.162493935677e-05 [GeV] -Cell[11,1] 6.2189098272142e-05 [GeV] -Cell[11,0] 0.0010312944067404 [GeV] -Cell[2,29] 0.00082689888424201 [GeV] -Cell[3,11] 8.4997960948385e-06 [GeV] -Cell[2,11] 0.00062872994263182 [GeV] -Cell[4,12] 0.00055683676335184 [GeV] -Cell[6,25] 1.1546799272764e-05 [GeV] -Cell[5,17] 0.0015303947837183 [GeV] -Cell[8,44] 2.8668416114215e-06 [GeV] -Cell[2,35] 0.00053801828463372 [GeV] -Cell[5,16] 0.00067139515737119 [GeV] -Cell[1,35] 2.0825858923445e-05 [GeV] -Cell[6,31] 0.0034729731256363 [GeV] -Cell[5,40] 6.341391632418e-06 [GeV] -Cell[1,29] 3.2964586862363e-06 [GeV] -Cell[1,28] 0.00018289475488983 [GeV] -Cell[4,6] 0.0011315776311843 [GeV] -Cell[1,31] 0.00070677957680654 [GeV] -Cell[2,0] 9.4380223799817e-05 [GeV] -Cell[0,30] 6.7306168534856e-05 [GeV] -Cell[3,36] 1.0676225547286e-05 [GeV] -Cell[4,31] 0.05830179376157 [GeV] -Cell[4,47] 4.1319447336718e-06 [GeV] -Cell[3,7] 7.4386995402165e-07 [GeV] -Cell[4,14] 3.7214016401776e-09 [GeV] -Cell[2,10] 1.1813675286248e-05 [GeV] -Cell[0,27] 0.0018008884721798 [GeV] -Cell[3,24] 6.8848634608685e-05 [GeV] -Cell[4,37] 3.3758506324375e-05 [GeV] -Cell[2,25] 0.0013311073066406 [GeV] -Cell[4,43] 0.0001362447886894 [GeV] -Cell[2,30] 6.1951245427053e-05 [GeV] -Cell[2,36] 9.2113489588996e-05 [GeV] -Cell[6,16] 0.016108080081106 [GeV] -Cell[3,42] 6.884772941703e-06 [GeV] -Cell[3,43] 0.00012682397322897 [GeV] -Cell[2,31] 3.5750660172198e-06 [GeV] -Cell[5,11] 6.0575867611306e-06 [GeV] -Cell[5,13] 2.8114097371144e-05 [GeV] -Cell[0,31] 0.035230232036553 [GeV] -Cell[5,37] 0.00032615304740239 [GeV] -Cell[6,3] 0.00068989654813595 [GeV] -Cell[1,30] 3.396162906472e-05 [GeV] -Cell[0,32] 0.00064952460814175 [GeV] -Cell[3,32] 6.0470829249539e-05 [GeV] -Cell[3,33] 1.2957792163661e-05 [GeV] -Cell[15,47] 0.0010336041130897 [GeV] -Cell[15,0] 1.6386606555898e-05 [GeV] -Cell[15,1] 0.0024201934602099 [GeV] -Cell[3,10] 0.0014570943766806 [GeV] -Cell[1,47] 3.9474155928474e-06 [GeV] -Cell[4,21] 3.6785553675145e-08 [GeV] -Cell[4,23] 0.0020705487847799 [GeV] -Cell[1,0] 2.6068907538956e-07 [GeV] -Cell[1,1] 0.00050487953609445 [GeV] -Cell[4,0] 1.0612330341246e-05 [GeV] -Cell[5,10] 0.00085765883125376 [GeV] -Cell[5,12] 2.7176283765584e-09 [GeV] -Cell[4,7] 0.00044526370212691 [GeV] -Cell[5,6] 0.00045328434378803 [GeV] -Cell[3,26] 1.2906316783301e-08 [GeV] -Cell[7,0] 1.3104184743156e-05 [GeV] -Cell[5,2] 3.2811265264172e-06 [GeV] -Cell[4,42] 0.00021890431870065 [GeV] -Cell[8,23] 1.9023893401027e-08 [GeV] -Cell[11,46] 2.513994667197e-07 [GeV] -Cell[12,15] 1.5791069017723e-08 [GeV] -Cell[8,19] 0.00049689389956075 [GeV] -Cell[10,44] 2.6010151486844e-07 [GeV] -Cell[9,44] 1.2828445574087e-07 [GeV] -Cell[9,33] 0.0013868787070934 [GeV] -Cell[16,2] 0.005059631478548 [GeV] -Cell[16,1] 0.009919837279856 [GeV] -Cell[7,17] 0.0048401484813535 [GeV] -Cell[8,17] 1.6557459400701e-07 [GeV] -Cell[8,16] 9.8946206180699e-06 [GeV] -Cell[16,38] 3.171495743004e-06 [GeV] -Cell[15,2] 0.00026196462464645 [GeV] -Cell[18,39] 9.1336484206295e-06 [GeV] -Cell[17,4] 1.8505914681555e-07 [GeV] -Cell[16,0] 0.0011422119960602 [GeV] -Cell[16,46] 6.560371730302e-10 [GeV] -Cell[15,43] 3.8621889498245e-06 [GeV] -Cell[4,26] 8.401257218793e-09 [GeV] -Cell[6,6] 1.6649186625273e-07 [GeV] -Cell[6,27] 6.4021789323306e-05 [GeV] -Cell[6,39] 5.0665831076913e-07 [GeV] -Cell[7,16] 0.014587946988463 [GeV] -Cell[5,26] 0.0038768136890785 [GeV] -Cell[5,25] 0.17852319315412 [GeV] -Cell[5,27] 2.9431836310323e-09 [GeV] -Cell[6,9] 9.8358134564478e-06 [GeV] -Cell[6,8] 0.0010279183626678 [GeV] -Cell[15,42] 0.0030597029196352 [GeV] -Cell[9,47] 0.0014939619761303 [GeV] -Cell[16,14] 1.9075169120697e-08 [GeV] -Cell[4,4] 4.6539564084469e-07 [GeV] -Cell[4,24] 1.4426244888455e-08 [GeV] -Cell[0,33] 1.0949604494499e-06 [GeV] -Cell[2,38] 5.8945015771315e-06 [GeV] -Cell[6,19] 0.00075438860690099 [GeV] -Cell[5,43] 0.004975255454272 [GeV] -Cell[6,30] 0.0042315120611544 [GeV] -Cell[5,28] 2.1993557538735e-08 [GeV] -Cell[15,41] 0.00091988844949799 [GeV] -Cell[16,43] 0.00046266275374501 [GeV] -Cell[6,14] 0.06117351738971 [GeV] -Cell[6,15] 0.43617416451724 [GeV] -Cell[6,13] 0.0051858705702983 [GeV] -Cell[6,17] 9.9858581086437e-05 [GeV] -Cell[5,42] 0.0013744562214564 [GeV] -Cell[6,20] 0.002246219941964 [GeV] -Cell[0,7] 2.1923187887296e-08 [GeV] -Cell[7,25] 0.00028678443796378 [GeV] -Cell[7,19] 0.0001448699769121 [GeV] -Cell[7,2] 0.0004116143245102 [GeV] -Cell[6,11] 0.0014196085588211 [GeV] -Cell[6,12] 0.0047354606975981 [GeV] -Cell[6,22] 1.618986716494e-07 [GeV] -Cell[4,13] 2.9370604832593e-05 [GeV] -Cell[1,46] 6.8076280294918e-06 [GeV] -Cell[1,14] 6.7859779454352e-05 [GeV] -Cell[5,29] 0.0038504957873423 [GeV] -Cell[6,26] 2.9330840334296e-10 [GeV] -Cell[5,24] 0.0002359348434685 [GeV] -Cell[2,1] 0.0013191547483283 [GeV] -### Total energy deposition in calorimeter by a source track in 204 cells : 0.98045591294459 (GeV) - -Source track ID 3355 (gamma,1.5112205487345[GeV]) at (-499.81457135329,13.615956188431,-1633.5784706575) +Cell[6,11] 0.0016496042696007 [GeV] +Cell[7,15] 0.00074888785727956 [GeV] +Cell[7,16] 1.9778501766268e-05 [GeV] +Cell[7,12] 6.1566202778977e-05 [GeV] +Cell[5,34] 0.02130916429886 [GeV] +Cell[5,16] 0.0086338513443255 [GeV] +Cell[5,15] 0.081425198713007 [GeV] +Cell[5,14] 0.67303591206196 [GeV] +Cell[3,38] 0.00077156791289201 [GeV] +Cell[5,36] 0.012379101759157 [GeV] +Cell[5,35] 0.093851621105932 [GeV] +Cell[5,31] 0.0013052101882815 [GeV] +Cell[7,14] 0.00026046873617179 [GeV] +Cell[5,33] 0.0023690014001775 [GeV] +Cell[3,37] 0.00023508634730445 [GeV] +Cell[7,17] 3.7160941701586e-09 [GeV] +Cell[5,13] 0.0182036765493 [GeV] +Cell[5,21] 2.1365965949371e-07 [GeV] +Cell[2,38] 0.0091710395178466 [GeV] +Cell[1,38] 0.0016990087808289 [GeV] +Cell[1,39] 0.00032940280213734 [GeV] +Cell[6,14] 0.15011118162801 [GeV] +Cell[6,15] 0.073232918245627 [GeV] +Cell[6,16] 0.001774265343094 [GeV] +Cell[5,22] 0.0022317563381211 [GeV] +Cell[4,33] 0.00095413405155927 [GeV] +Cell[6,34] 0.0028496275472783 [GeV] +Cell[4,37] 0.00071361843077602 [GeV] +Cell[3,5] 1.3776440755464e-07 [GeV] +Cell[2,41] 0.00029486561686531 [GeV] +Cell[2,37] 3.0719282887162e-05 [GeV] +Cell[3,44] 1.3396190479398e-07 [GeV] +Cell[5,11] 0.001768355565921 [GeV] +Cell[5,12] 0.0038375980106055 [GeV] +Cell[6,12] 0.00050331935549821 [GeV] +Cell[6,13] 0.18996703635637 [GeV] +Cell[2,40] 0.0041563177592878 [GeV] +Cell[3,41] 0.0013282081523485 [GeV] +Cell[2,5] 4.8807277926244e-07 [GeV] +Cell[2,35] 3.5120547181577e-09 [GeV] +Cell[6,33] 0.0010724923925733 [GeV] +Cell[6,35] 0.0014263660358181 [GeV] +Cell[6,36] 2.5469911406617e-09 [GeV] +Cell[3,40] 1.8502021774111e-05 [GeV] +Cell[3,39] 0.015141420595223 [GeV] +Cell[2,39] 0.0027438883569189 [GeV] +Cell[4,36] 0.0033162739503709 [GeV] +Cell[4,35] 0.0054578662213434 [GeV] +Cell[6,17] 0.00059617878382915 [GeV] +Cell[2,36] 2.9362648774622e-09 [GeV] +Cell[3,36] 6.1095735125491e-05 [GeV] +Cell[4,34] 4.5744246701474e-05 [GeV] +### Total energy deposition in calorimeter by a source track in 52 cells : 1.3910938845437 (GeV) + +Source track ID 3592 (gamma,1.5112205487345[GeV]) at (-499.8145740055,13.615858830819,-1633.5784370833) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[9,8] 0.0010267456709853 [GeV] -Cell[4,5] 0.0012662817070511 [GeV] -Cell[3,38] 0.00024646663387225 [GeV] -Cell[7,28] 0.00013132091379937 [GeV] -Cell[6,34] 0.00051099891 [GeV] -Cell[1,27] 0.00051099891 [GeV] -Cell[1,39] 0.00033283904071069 [GeV] -Cell[6,0] 0.00049566380454738 [GeV] -Cell[12,39] 0.0007934776689667 [GeV] -Cell[5,7] 0.00051099891 [GeV] -Cell[2,34] 0.0013977726784222 [GeV] -Cell[2,44] 0.00057535441206758 [GeV] -Cell[8,1] 0.00045235583883234 [GeV] -Cell[1,23] 1.2903632727744 [GeV] -Cell[0,24] 3.2367762587455e-05 [GeV] -Cell[0,22] 0.00068235948595134 [GeV] -Cell[3,11] 0.00031144125923831 [GeV] -Cell[4,11] 0.0086030248385454 [GeV] -Cell[5,21] 0.00032976996237965 [GeV] -Cell[3,37] 0.00049654275750498 [GeV] -Cell[5,16] 0.0014359620675565 [GeV] -Cell[1,35] 0.0011834156087414 [GeV] -Cell[0,17] 0.00055821895159923 [GeV] -Cell[1,17] 0.00039572510517707 [GeV] -Cell[1,25] 0.00016540319176671 [GeV] -Cell[1,26] 0.001387052448721 [GeV] -Cell[3,39] 0.0007430303244155 [GeV] -Cell[3,40] 0.0020837700079675 [GeV] -Cell[0,16] 0.0021186211462424 [GeV] -Cell[1,18] 0.0036915692983387 [GeV] -Cell[1,31] 0.00039813839713259 [GeV] -Cell[0,47] 0.00053901657736749 [GeV] -Cell[0,0] 0.00047223336512467 [GeV] -Cell[0,23] 0.015193189922068 [GeV] -Cell[3,0] 0.0023705102537188 [GeV] -Cell[0,10] 0.0011697597599696 [GeV] -Cell[0,27] 0.011787230652886 [GeV] -Cell[3,16] 0.00042282491119941 [GeV] -Cell[0,46] 0.0014013224360839 [GeV] -Cell[0,45] 0.00051099891 [GeV] -Cell[1,24] 0.10717861421144 [GeV] -Cell[4,16] 0.00018233150913498 [GeV] -Cell[3,3] 0.00093119607587846 [GeV] -Cell[3,42] 0.00051099891 [GeV] -Cell[5,11] 0.0019835890188652 [GeV] -Cell[0,4] 0.00089969385062149 [GeV] -Cell[1,30] 0.00039577826090128 [GeV] -Cell[1,3] 0.000768861327955 [GeV] -Cell[6,36] 0.00051099891 [GeV] -Cell[3,47] 0.00028200655938544 [GeV] -Cell[5,1] 0.0015971504960943 [GeV] -Cell[5,46] 0.0011564489621964 [GeV] -Cell[0,44] 0.00015251284974164 [GeV] -Cell[4,9] 0.00026042068808978 [GeV] -Cell[3,4] 0.0013838771019701 [GeV] -Cell[2,42] 0.00015968705995468 [GeV] -Cell[2,6] 1.202899976696e-05 [GeV] -Cell[2,5] 0.00090463406561861 [GeV] -### Total energy deposition in calorimeter by a source track in 58 cells : 1.4763688761336 (GeV) - -Source track ID 3356 (gamma,2.1679106429722[GeV]) at (-488.39602521154,-107.09492311761,-1544.0566624444) +Cell[9,20] 0.00021548629864722 [GeV] +Cell[2,8] 0.00051099891 [GeV] +Cell[1,23] 1.3936635230465 [GeV] +Cell[9,40] 9.596807970221e-05 [GeV] +Cell[0,0] 0.00047712456188982 [GeV] +Cell[0,1] 0.00051099891 [GeV] +Cell[0,24] 0.0050032569653075 [GeV] +Cell[0,22] 0.00062473016088616 [GeV] +Cell[0,23] 0.0019303802799805 [GeV] +Cell[1,24] 0.035960138607952 [GeV] +Cell[1,25] 0.001328219495277 [GeV] +Cell[1,22] 0.011461784812961 [GeV] +Cell[1,20] 0.00040123102795996 [GeV] +Cell[2,47] 0.00051099891 [GeV] +Cell[0,15] 0.00048020441491047 [GeV] +Cell[2,7] 0.016575066331561 [GeV] +Cell[2,0] 0.0039398959616501 [GeV] +Cell[1,3] 0.010664432282942 [GeV] +Cell[5,2] 0.00074251644717585 [GeV] +Cell[5,44] 0.00075616747364442 [GeV] +Cell[4,36] 0.0024796589061975 [GeV] +Cell[2,1] 0.010958347280298 [GeV] +### Total energy deposition in calorimeter by a source track in 22 cells : 1.4992911291655 (GeV) + +Source track ID 3593 (gamma,2.1679106429722[GeV]) at (-488.39603902644,-107.0948601161,-1544.0567347491) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[7,42] 0.0010699269078517 [GeV] -Cell[4,5] 0.001491817016945 [GeV] -Cell[2,26] 0.013492139761426 [GeV] -Cell[1,27] 0.0049155339625872 [GeV] -Cell[3,14] 0.00018478327306573 [GeV] -Cell[4,40] 0.00023447797558059 [GeV] -Cell[6,0] 0.00051099891 [GeV] -Cell[2,15] 0.00097355741047581 [GeV] -Cell[2,34] 0.0028505858271819 [GeV] -Cell[1,20] 0.00023233121293254 [GeV] -Cell[1,21] 0.00039299262389286 [GeV] -Cell[4,18] 0.00090880890688363 [GeV] -Cell[2,35] 0.0013759604947524 [GeV] -Cell[1,35] 0.00071443651252979 [GeV] -Cell[1,17] 0.00049930226280736 [GeV] -Cell[1,15] 0.00051099891 [GeV] -Cell[1,25] 0.18483589149073 [GeV] -Cell[1,26] 0.025243103296681 [GeV] -Cell[2,39] 0.00084896572487775 [GeV] -Cell[0,28] 0.0002669593946579 [GeV] -Cell[0,0] 0.00073275754125389 [GeV] -Cell[3,8] 0.0036243800283294 [GeV] -Cell[3,7] 0.00051099891 [GeV] -Cell[4,14] 7.5436513634464e-05 [GeV] -Cell[1,36] 0.00040405662726164 [GeV] -Cell[1,44] 0.0010079315362922 [GeV] -Cell[1,24] 0.0032449594610188 [GeV] -Cell[3,44] 0.00036346932482775 [GeV] -Cell[2,25] 1.8631690265191 [GeV] -Cell[2,24] 0.0013906595869391 [GeV] -Cell[5,15] 0.00029019188010871 [GeV] -Cell[0,4] 0.0009810377734661 [GeV] -Cell[0,31] 0.00014186861856058 [GeV] -Cell[6,3] 0.0004229886182873 [GeV] -Cell[0,32] 0.00015181076934195 [GeV] -Cell[2,16] 0.00011888854489577 [GeV] -Cell[0,13] 0.00064534896216906 [GeV] -Cell[4,38] 0.00051099891 [GeV] -Cell[3,22] 0.00010996265853985 [GeV] -Cell[4,0] 0.00084681298286307 [GeV] -Cell[4,1] 0.00098458674627036 [GeV] -Cell[5,10] 0.0017868779314241 [GeV] -Cell[5,2] 0.00027652093441941 [GeV] -Cell[6,39] 0.00051099891 [GeV] -Cell[9,47] 0.00022013253490496 [GeV] -Cell[3,2] 0.0012646905232771 [GeV] -Cell[0,33] 0.00087004421033975 [GeV] -Cell[0,8] 0.00051099891 [GeV] -Cell[0,35] 0.0020284348437319 [GeV] -Cell[1,4] 0.00059485824480182 [GeV] -Cell[0,34] 0.00038381700388395 [GeV] -Cell[2,13] 0.0013316937332034 [GeV] -### Total energy deposition in calorimeter by a source track in 52 cells : 2.131060812169 (GeV) - -Source track ID 3328 (pi-,0.39150771471372[GeV]) at (-230.16662683779,443.87309435255,-1625.3054423209) +Cell[3,37] 0.004322713213701 [GeV] +Cell[2,23] 0.0011781694056625 [GeV] +Cell[1,1] 0.0013675741927893 [GeV] +Cell[2,27] 0.00051099891 [GeV] +Cell[1,24] 0.0099530278070196 [GeV] +Cell[1,25] 0.19562452649553 [GeV] +Cell[1,20] 0.0026404312862526 [GeV] +Cell[0,20] 0.0017583690997024 [GeV] +Cell[0,7] 0.0012010101810571 [GeV] +Cell[1,46] 0.0017215405305947 [GeV] +Cell[2,47] 0.0002974150912412 [GeV] +Cell[0,10] 0.00056317999370719 [GeV] +Cell[1,26] 0.012241651725418 [GeV] +Cell[1,38] 0.00087860858205686 [GeV] +Cell[1,39] 0.00051099891 [GeV] +Cell[1,30] 0.0010568670050569 [GeV] +Cell[4,37] 0.00067683050287471 [GeV] +Cell[2,41] 0.0011817785994894 [GeV] +Cell[4,2] 0.0011091247180416 [GeV] +Cell[0,34] 0.00089211155351453 [GeV] +Cell[1,10] 0.00037063054457887 [GeV] +Cell[1,34] 0.00051099891 [GeV] +Cell[1,18] 0.00050265500854282 [GeV] +Cell[1,7] 0.0014362317642422 [GeV] +Cell[2,0] 0.0064124287188528 [GeV] +Cell[2,45] 0.0014632347436069 [GeV] +Cell[3,31] 0.00084586100914984 [GeV] +Cell[1,41] 0.001692759642316 [GeV] +Cell[3,13] 0.00051099891 [GeV] +Cell[1,31] 0.0011114263525731 [GeV] +Cell[2,26] 0.011352921498006 [GeV] +Cell[1,3] 0.0017510628810269 [GeV] +Cell[1,14] 0.0013181166653315 [GeV] +Cell[4,9] 0.0040540957624795 [GeV] +Cell[3,10] 0.00016983742462049 [GeV] +Cell[2,24] 0.027475306849253 [GeV] +Cell[2,25] 1.7796592915447 [GeV] +Cell[3,18] 0.00020130554611745 [GeV] +Cell[2,15] 0.00092698668880128 [GeV] +Cell[5,1] 0.00099219123998385 [GeV] +Cell[16,36] 0.00018155561044431 [GeV] +Cell[4,8] 0.0013749254439698 [GeV] +Cell[4,41] 0.00051099891 [GeV] +Cell[3,9] 0.00457577004641 [GeV] +Cell[18,3] 0.0022151167642122 [GeV] +Cell[2,30] 0.00051099891 [GeV] +Cell[0,5] 0.00038163150521068 [GeV] +### Total energy deposition in calorimeter by a source track in 47 cells : 2.0921962666982 (GeV) + +Source track ID 3568 (pi-,0.39153477814992[GeV]) at (-222.71423111333,447.65876653942,-1614.1509100633) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[7,7] 1.0084524954436e-05 [GeV] -Cell[6,33] 4.6586015622438e-05 [GeV] -Cell[6,32] 1.0301474716243e-06 [GeV] -Cell[6,37] 0.0046401660556801 [GeV] -Cell[3,17] 1.4371471479535e-10 [GeV] -Cell[3,18] 0.0007352504075443 [GeV] -Cell[14,1] 0.00045934281583766 [GeV] -Cell[15,4] 5.7788274591076e-05 [GeV] -Cell[2,15] 0.0019795647270892 [GeV] -Cell[1,13] 0.00028811206986086 [GeV] -Cell[7,38] 0.00014331358504194 [GeV] -Cell[6,38] 0.00036889391213447 [GeV] -Cell[11,29] 1.1455659259809e-05 [GeV] -Cell[1,19] 7.8518417153646e-06 [GeV] -Cell[0,22] 0.00067379359575387 [GeV] -Cell[4,12] 0.0010725601908054 [GeV] -Cell[0,19] 1.9237037742641e-05 [GeV] -Cell[0,18] 0.0053065758065832 [GeV] -Cell[0,17] 0.0014993071764279 [GeV] -Cell[1,17] 1.8260771430619e-05 [GeV] -Cell[1,16] 0.059408329870586 [GeV] -Cell[1,15] 0.10562309752372 [GeV] -Cell[6,31] 0.00040753197420634 [GeV] -Cell[1,18] 2.4330802261829e-11 [GeV] -Cell[2,9] 0.00031895749858452 [GeV] -Cell[0,14] 0.00012104895710218 [GeV] -Cell[4,47] 0.0006183543500539 [GeV] -Cell[0,15] 0.00030102256905593 [GeV] -Cell[0,9] 4.8588516918244e-05 [GeV] -Cell[2,18] 0.00039890457021966 [GeV] -Cell[2,4] 0.0024283232632336 [GeV] -Cell[2,3] 3.0149020599424e-05 [GeV] -Cell[3,3] 0.0010466994247021 [GeV] -Cell[2,31] 1.0161073296331e-05 [GeV] -Cell[3,1] 0.00030832716011889 [GeV] -Cell[5,37] 3.1833791726967e-05 [GeV] -Cell[0,32] 0.00052292429263152 [GeV] -Cell[15,1] 1.1935199407162e-05 [GeV] -Cell[2,47] 0.00040196957130146 [GeV] -Cell[2,16] 0.0034486898357144 [GeV] -Cell[4,2] 0.0015278111707425 [GeV] -Cell[1,12] 1.1833984319765e-07 [GeV] -Cell[15,5] 0.0002194656171705 [GeV] -Cell[0,2] 0.00080853277101501 [GeV] -Cell[4,41] 1.097202024539e-05 [GeV] -Cell[3,2] 0.00011646918032238 [GeV] -Cell[2,2] 1.0496076333766e-07 [GeV] -Cell[0,5] 0.0003750619270977 [GeV] -Cell[4,3] 0.00059752271497928 [GeV] -Cell[0,8] 0.00254952273997 [GeV] -Cell[0,7] 3.8352655360541e-07 [GeV] -Cell[1,14] 0.0049295796838862 [GeV] -Cell[2,5] 1.1990778148174e-11 [GeV] -Cell[2,14] 0.00016170441488805 [GeV] -Cell[19,20] 0.00015648073921943 [GeV] -Cell[0,11] 0.00073323429138109 [GeV] -### Total energy deposition in calorimeter by a source track in 56 cells : 0.20501298735684 (GeV) - -Source track ID 3304 (pi+,4.020129647853[GeV]) at (-418.40614309722,-273.74495322929,-1787.4952330601) +Cell[1,29] 0.00044561441936742 [GeV] +Cell[0,14] 0.00025322434721181 [GeV] +Cell[7,4] 0.0021839835087046 [GeV] +Cell[6,28] 7.1946756506804e-06 [GeV] +Cell[10,26] 1.0469180590007e-05 [GeV] +Cell[9,20] 2.704051892124e-07 [GeV] +Cell[0,28] 7.1312239742838e-07 [GeV] +Cell[4,30] 2.6005641848315e-06 [GeV] +Cell[5,28] 0.00016264089266417 [GeV] +Cell[2,23] 9.8293430824015e-08 [GeV] +Cell[10,25] 0.00027638495110716 [GeV] +Cell[3,3] 0.00086211389517223 [GeV] +Cell[3,2] 0.0056512743111554 [GeV] +Cell[3,20] 6.4762233128818e-05 [GeV] +Cell[3,19] 3.9518723497167e-08 [GeV] +Cell[1,38] 2.3311004042625e-09 [GeV] +Cell[1,42] 0.00071381771381088 [GeV] +Cell[2,41] 1.1977315339323e-05 [GeV] +Cell[4,7] 3.4606520785019e-06 [GeV] +Cell[0,19] 0.01654891067474 [GeV] +Cell[0,18] 0.0009234056917993 [GeV] +Cell[1,11] 1.9830402015941e-05 [GeV] +Cell[0,33] 1.4845660189167e-08 [GeV] +Cell[4,46] 1.1541532294359e-06 [GeV] +Cell[4,6] 1.6542209777981e-08 [GeV] +Cell[0,13] 9.2880717252797e-05 [GeV] +Cell[1,41] 0.00029096340013086 [GeV] +Cell[2,40] 5.5034275502521e-06 [GeV] +Cell[2,43] 3.0785456765443e-06 [GeV] +Cell[1,43] 3.1136795296334e-06 [GeV] +Cell[5,7] 8.6651931053439e-07 [GeV] +Cell[1,40] 1.8881228479586e-06 [GeV] +Cell[5,46] 2.2633711681237e-05 [GeV] +Cell[0,12] 0.00045174675253418 [GeV] +Cell[0,29] 0.00070856660068433 [GeV] +Cell[3,32] 3.2393968431279e-06 [GeV] +Cell[5,0] 0.00026540181966266 [GeV] +Cell[1,12] 2.1469325583894e-06 [GeV] +Cell[1,14] 0.0018109673464148 [GeV] +Cell[1,15] 0.01666151099975 [GeV] +Cell[3,23] 0.00030511026352019 [GeV] +Cell[2,3] 0.00026321699146195 [GeV] +Cell[3,24] 0.00015587540714614 [GeV] +Cell[3,18] 5.9295658429619e-06 [GeV] +Cell[2,15] 0.00058501776060283 [GeV] +Cell[10,22] 0.00066506339390207 [GeV] +Cell[3,25] 0.16437206687464 [GeV] +Cell[1,5] 0.0029956803306137 [GeV] +Cell[4,28] 5.1304360795257e-09 [GeV] +Cell[2,42] 1.294570916798e-05 [GeV] +Cell[3,26] 0.0018084874317105 [GeV] +Cell[5,6] 0.00010351886016713 [GeV] +Cell[2,14] 0.0011328499866242 [GeV] +Cell[10,21] 1.3272031684323e-05 [GeV] +Cell[1,4] 0.00054611530981298 [GeV] +Cell[1,16] 1.2803289369913e-05 [GeV] +### Total energy deposition in calorimeter by a source track in 56 cells : 0.22144644094979 (GeV) + +Source track ID 3550 (pi+,4.0201683839266[GeV]) at (-418.25472692379,-273.97624606142,-1789.1689659857) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[1,39] 0.0013601696073648 [GeV] -Cell[1,28] 0.021104265217936 [GeV] -Cell[0,28] 0.16837491495565 [GeV] -### Total energy deposition in calorimeter by a source track in 3 cells : 0.19083934978095 (GeV) +Cell[0,28] 0.23073459234566 [GeV] +Cell[1,28] 0.013713589352064 [GeV] +### Total energy deposition in calorimeter by a source track in 2 cells : 0.24444818169773 (GeV) -Source track ID 3305 (neutron,7.3741998938947[GeV]) at (-413.0762339184,-281.72331279429,-1776.1644807987) -Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[9,10] 1.0477195610292e-07 [GeV] -Cell[11,39] 8.1096608482767e-06 [GeV] -Cell[12,36] 0.0020079548401909 [GeV] -Cell[6,41] 0.0026145126084603 [GeV] -Cell[7,42] 0.0050975964795792 [GeV] -Cell[7,43] 0.00069468090300034 [GeV] -Cell[2,27] 7.4600907282729e-09 [GeV] -Cell[6,2] 0.00051099891 [GeV] -Cell[5,44] 5.8042613090947e-08 [GeV] -Cell[2,26] 0.00049066308124679 [GeV] -Cell[5,45] 0.0010059151465512 [GeV] -Cell[3,25] 0.00054975383162973 [GeV] -Cell[3,38] 2.5926097578122e-08 [GeV] -Cell[7,4] 6.2186475828412e-06 [GeV] -Cell[7,1] 0.00026804139347905 [GeV] -Cell[4,36] 0.0013681093087302 [GeV] -Cell[2,37] 1.6304092803807e-05 [GeV] -Cell[1,27] 0.011845958194052 [GeV] -Cell[2,17] 0.00096992754395305 [GeV] -Cell[1,39] 0.0007409574997572 [GeV] -Cell[7,3] 2.8230715543032e-12 [GeV] -Cell[12,31] 0.00038372260410845 [GeV] -Cell[9,21] 0.00037698087280762 [GeV] -Cell[14,20] 0.0020016614545921 [GeV] -Cell[12,8] 7.3829246207424e-07 [GeV] -Cell[13,10] 7.3684379458427e-08 [GeV] -Cell[10,6] 0.00044949463481589 [GeV] -Cell[11,7] 2.0954757928848e-12 [GeV] -Cell[10,7] 0.00058913612110628 [GeV] -Cell[9,29] 7.5883814133704e-08 [GeV] -Cell[9,28] 5.3279305575415e-08 [GeV] -Cell[9,20] 0.00024485570395427 [GeV] -Cell[2,15] 1.7541868351145e-07 [GeV] -Cell[1,13] 0.0003766574288759 [GeV] -Cell[5,19] 3.4786088013789e-05 [GeV] -Cell[2,44] 0.0049283923517035 [GeV] -Cell[12,7] 0.0025043182620934 [GeV] -Cell[9,43] 0.00093524149752898 [GeV] -Cell[9,1] 0.0020281466622077 [GeV] -Cell[9,2] 0.00055222012762272 [GeV] -Cell[11,17] 5.4948022807366e-09 [GeV] -Cell[12,17] 1.4114577912892e-05 [GeV] -Cell[11,18] 1.0099029168487e-11 [GeV] -Cell[15,25] 0.00052243111912203 [GeV] -Cell[1,23] 0.0012583785765467 [GeV] -Cell[2,23] 8.6451644019689e-06 [GeV] -Cell[13,14] 0.0010565536054623 [GeV] -Cell[12,37] 0.00055762447747556 [GeV] -Cell[12,14] 1.4763287481401e-09 [GeV] -Cell[12,2] 5.4252392146736e-08 [GeV] -Cell[0,24] 0.031646933080891 [GeV] -Cell[0,21] 0.0012044409870687 [GeV] -Cell[1,20] 8.2638341823895e-05 [GeV] -Cell[1,19] 7.3553377907956e-05 [GeV] -Cell[1,8] 0.0013062340953644 [GeV] -Cell[0,22] 0.00077674188887443 [GeV] -Cell[0,3] 0.00036921052062967 [GeV] -Cell[2,29] 6.9849193096161e-12 [GeV] -Cell[2,28] 7.0991432039591e-08 [GeV] -Cell[1,21] 2.2748313265311e-05 [GeV] -Cell[3,11] 8.3766633470077e-06 [GeV] -Cell[2,11] 4.4280218193308e-05 [GeV] -Cell[3,12] 0.00080689599389771 [GeV] -Cell[4,19] 0.0016574354856012 [GeV] -Cell[3,37] 0.0014891231916193 [GeV] -Cell[2,35] 4.8895017243922e-09 [GeV] -Cell[1,35] 0.00077058647707921 [GeV] -Cell[0,19] 0.0054758637219248 [GeV] -Cell[0,18] 0.018481882430013 [GeV] -Cell[0,17] 0.00041281919298285 [GeV] -Cell[1,17] 0.00039147153048964 [GeV] -Cell[1,16] 0.00045420172719025 [GeV] -Cell[0,20] 0.0021868871056799 [GeV] -Cell[0,40] 0.00031971883985102 [GeV] -Cell[1,34] 0.0010771241441967 [GeV] -Cell[0,12] 4.022755104063e-05 [GeV] -Cell[1,29] 0.032844777138331 [GeV] -Cell[1,28] 0.039668984371129 [GeV] -Cell[1,25] 2.6340535955228e-05 [GeV] -Cell[1,26] 0.0049706505475047 [GeV] -Cell[3,40] 8.5864175355709e-05 [GeV] -Cell[2,39] 0.00062694509394953 [GeV] -Cell[2,40] 1.5481199516216e-05 [GeV] -Cell[0,16] 7.5114064737249e-05 [GeV] -Cell[1,18] 0.0013711823093417 [GeV] -Cell[3,6] 1.8014398519881e-06 [GeV] -Cell[3,5] 0.00072142951415115 [GeV] -Cell[1,31] 0.017886148039972 [GeV] -Cell[2,0] 3.7166369777538e-05 [GeV] -Cell[0,28] 1.6612521846764 [GeV] -Cell[0,30] 0.011277688190245 [GeV] -Cell[0,29] 0.52986786317832 [GeV] -Cell[2,9] 0.00051099891 [GeV] -Cell[3,36] 7.106919747855e-05 [GeV] -Cell[0,47] 0.0039499708845693 [GeV] -Cell[1,11] 0.00084057941839261 [GeV] -Cell[0,0] 4.8470232344698e-05 [GeV] -Cell[0,23] 0.055750331011469 [GeV] -Cell[0,25] 0.0052797717785163 [GeV] -Cell[0,26] 0.015086772847124 [GeV] -Cell[0,38] 0.0014767724809864 [GeV] -Cell[0,39] 1.825538754656e-05 [GeV] -Cell[3,0] 0.0001209871466333 [GeV] -Cell[2,45] 5.2828463490187e-06 [GeV] -Cell[0,15] 1.1685439633311e-05 [GeV] -Cell[1,40] 0.0036543364716086 [GeV] -Cell[1,38] 4.7987746656872e-06 [GeV] -Cell[3,15] 0.0069158017619928 [GeV] -Cell[4,15] 0.00038189177892104 [GeV] -Cell[2,12] 0.0019371577265872 [GeV] -Cell[0,27] 0.048903780318262 [GeV] -Cell[3,16] 2.074865650502e-05 [GeV] -Cell[2,43] 0.00093564632092698 [GeV] -Cell[0,46] 0.0099600360303391 [GeV] -Cell[3,34] 9.506807065577e-05 [GeV] -Cell[3,35] 4.865273536484e-05 [GeV] -Cell[1,44] 0.002520552831487 [GeV] -Cell[1,45] 0.00050872468506244 [GeV] -Cell[1,6] 0.00095679926907542 [GeV] -Cell[0,45] 0.00014434529799848 [GeV] -Cell[3,45] 0.00057166579296495 [GeV] -Cell[3,46] 3.8020056264941e-05 [GeV] -Cell[4,37] 0.0043661358971921 [GeV] -Cell[4,45] 0.0021042189307987 [GeV] -Cell[2,30] 9.2138660845876e-05 [GeV] -Cell[2,36] 3.1580050222146e-06 [GeV] -Cell[2,4] 0.002063191292316 [GeV] -Cell[5,15] 0.0031290946660932 [GeV] -Cell[5,13] 4.6614266466349e-08 [GeV] -Cell[1,33] 2.5359613937326e-05 [GeV] -Cell[1,32] 0.0008205227280278 [GeV] -Cell[3,1] 0.00029116036074845 [GeV] -Cell[0,31] 0.0032941230348975 [GeV] -Cell[1,30] 0.021402495668236 [GeV] -Cell[0,32] 0.0075602716550294 [GeV] -Cell[0,1] 0.00017370942682282 [GeV] -Cell[3,33] 7.5868832354899e-06 [GeV] -Cell[4,20] 9.7203529321632e-08 [GeV] -Cell[2,16] 9.6488654719451e-07 [GeV] -Cell[4,2] 0.0015450175935264 [GeV] -Cell[6,44] 6.261988913252e-06 [GeV] -Cell[4,38] 5.3803981237138e-05 [GeV] -Cell[1,12] 0.0041936713145515 [GeV] -Cell[1,0] 0.0019209774478301 [GeV] -Cell[3,47] 7.0674519520253e-06 [GeV] -Cell[7,0] 3.6869064788334e-06 [GeV] -Cell[6,43] 4.6276589234481e-05 [GeV] -Cell[4,42] 1.542429625988e-05 [GeV] -Cell[4,39] 0.00026212742086875 [GeV] -Cell[6,5] 0.0011496767167358 [GeV] -Cell[11,16] 2.0636304043364e-09 [GeV] -Cell[11,14] 0.0059715623997253 [GeV] -Cell[12,0] 1.9358723075129e-05 [GeV] -Cell[12,15] 9.5776860007391e-09 [GeV] -Cell[13,12] 0.00031695909090195 [GeV] -Cell[0,2] 0.00086406023405028 [GeV] -Cell[11,13] 0.0023073124659371 [GeV] -Cell[10,21] 4.9809297706815e-08 [GeV] -Cell[10,39] 8.3988706464879e-06 [GeV] -Cell[10,14] 5.9283703990332e-08 [GeV] -Cell[11,15] 0.00012524214809332 [GeV] -Cell[13,13] 1.4020414644619e-05 [GeV] -Cell[10,20] 2.8854998424777e-06 [GeV] -Cell[12,3] 1.1219340540265e-06 [GeV] -Cell[6,6] 0.00064325467538617 [GeV] -Cell[6,42] 0.002143958089801 [GeV] -Cell[5,46] 2.5630020711105e-05 [GeV] -Cell[4,46] 0.0025833002635335 [GeV] -Cell[4,9] 0.0026006903893455 [GeV] -Cell[3,4] 0.0011422661168818 [GeV] -Cell[2,38] 5.4669633527737e-08 [GeV] -Cell[5,43] 0.00013521749267477 [GeV] -Cell[2,42] 0.0018659611958741 [GeV] -Cell[6,14] 0.0022306337362101 [GeV] -Cell[0,35] 2.4995545682032e-06 [GeV] -Cell[7,25] 1.047963532983e-07 [GeV] -Cell[6,11] 0.0021967713480944 [GeV] -Cell[4,13] 1.885784849037e-06 [GeV] -Cell[2,1] 0.0019055068170463 [GeV] -Cell[0,34] 3.1978994695237e-05 [GeV] -Cell[2,13] 0.0070582272873921 [GeV] -Cell[2,14] 0.0013139910458158 [GeV] -Cell[0,11] 0.000803243723322 [GeV] -### Total energy deposition in calorimeter by a source track in 183 cells : 2.6684729889939 (GeV) - -Source track ID 3301 (anti_neutron,5.3948206100571[GeV]) at (-415.09134243251,-278.74572182829,-1871.4579101789) -Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[8,9] 2.6203672041675e-05 [GeV] -Cell[8,7] 0.00011462487796405 [GeV] -Cell[8,8] 0.0047964786641481 [GeV] -Cell[7,9] 3.3225188672077e-06 [GeV] -Cell[3,23] 0.0028400072363055 [GeV] -Cell[6,40] 1.1201679701912e-05 [GeV] -Cell[6,41] 1.414920567413e-07 [GeV] -Cell[2,27] 0.00019921792062462 [GeV] -Cell[10,28] 1.3492232188582e-05 [GeV] -Cell[4,35] 0.00010438527291728 [GeV] -Cell[5,30] 7.0373184667005e-07 [GeV] -Cell[6,7] 0.0025309695821581 [GeV] -Cell[5,38] 4.9703103854881e-08 [GeV] -Cell[6,24] 7.308910435313e-06 [GeV] -Cell[7,24] 0.0011103538337038 [GeV] -Cell[4,36] 0.00025418129567481 [GeV] -Cell[1,27] 0.00086089044214887 [GeV] -Cell[2,17] 2.7586197664277e-05 [GeV] -Cell[6,10] 2.9027533368208e-05 [GeV] -Cell[1,39] 4.151100321792e-06 [GeV] -Cell[6,0] 0.0011080000055304 [GeV] -Cell[12,27] 2.5790459047812e-06 [GeV] -Cell[12,26] 3.5733976244501e-07 [GeV] -Cell[11,27] 9.4680009154899e-06 [GeV] -Cell[11,28] 0.00037557531621746 [GeV] -Cell[10,29] 0.0006822223205678 [GeV] -Cell[5,7] 9.0632931977666e-05 [GeV] -Cell[5,8] 0.00013429413570486 [GeV] -Cell[3,28] 0.00012120115593962 [GeV] -Cell[3,29] 4.0988353134708e-08 [GeV] -Cell[0,24] 0.00048373904245886 [GeV] -Cell[1,19] 0.00030927609522041 [GeV] -Cell[0,42] 7.2113443457056e-06 [GeV] -Cell[1,7] 0.0025294723456157 [GeV] -Cell[0,3] 3.5294385240832e-06 [GeV] -Cell[2,29] 0.065138034519023 [GeV] -Cell[2,28] 0.0027429392476365 [GeV] -Cell[2,8] 7.600906828884e-07 [GeV] -Cell[4,18] 6.0062830452807e-06 [GeV] -Cell[4,17] 0.0014988681672453 [GeV] -Cell[2,20] 4.6660023508593e-07 [GeV] -Cell[5,36] 7.2605379622473e-05 [GeV] -Cell[1,34] 0.00011133053363301 [GeV] -Cell[1,29] 0.001865825369231 [GeV] -Cell[1,28] 0.0091799709735768 [GeV] -Cell[1,25] 0.0011058513098151 [GeV] -Cell[1,26] 0.0041852459676222 [GeV] -Cell[3,39] 7.9668451020854e-05 [GeV] -Cell[2,39] 0.002080306407178 [GeV] -Cell[2,40] 0.010875458860608 [GeV] -Cell[1,18] 3.7335227943913e-08 [GeV] -Cell[1,31] 3.2051610042799e-05 [GeV] -Cell[0,28] 1.9425633433395 [GeV] -Cell[0,30] 0.029745759996741 [GeV] -Cell[0,29] 0.27680572516198 [GeV] -Cell[0,0] 2.4519753060304e-07 [GeV] -Cell[0,25] 2.0457742948565e-09 [GeV] -Cell[0,26] 0.050807307863845 [GeV] -Cell[0,38] 0.00087218878044837 [GeV] -Cell[0,10] 6.3305804214906e-06 [GeV] -Cell[1,40] 0.0009320381887527 [GeV] -Cell[3,8] 1.1600092984736e-06 [GeV] -Cell[4,15] 2.1890298381777e-06 [GeV] -Cell[0,27] 0.028678195248957 [GeV] -Cell[3,16] 0.00024157989177684 [GeV] -Cell[2,43] 0.0010129394850523 [GeV] -Cell[0,46] 5.7666184025948e-05 [GeV] -Cell[1,6] 2.5513457105262e-05 [GeV] -Cell[0,9] 5.2532128145685e-05 [GeV] -Cell[1,24] 9.0469771530479e-06 [GeV] -Cell[4,37] 0.0060152204750662 [GeV] -Cell[4,16] 0.004317505916846 [GeV] -Cell[2,30] 0.00020791818026305 [GeV] -Cell[2,4] 2.8107929006183e-07 [GeV] -Cell[2,3] 0.0003114674854312 [GeV] -Cell[4,29] 1.1927272622643e-06 [GeV] -Cell[5,11] 0.0095412606247505 [GeV] -Cell[5,13] 5.5499258160125e-06 [GeV] -Cell[0,6] 0.00021377921195563 [GeV] -Cell[0,4] 0.00061980163239457 [GeV] -Cell[0,43] 0.00016124819502897 [GeV] -Cell[1,33] 0.0029140361530601 [GeV] -Cell[0,31] 0.0011400387352373 [GeV] -Cell[5,37] 0.00057458456413929 [GeV] -Cell[6,3] 1.0031503734353e-09 [GeV] -Cell[1,30] 0.0029414473694235 [GeV] -Cell[0,32] 0.0029697109925655 [GeV] -Cell[2,16] 4.214486831529e-06 [GeV] -Cell[1,47] 0.00043707165291255 [GeV] -Cell[1,3] 0.0055976828712621 [GeV] -Cell[4,38] 5.185909755528e-05 [GeV] -Cell[1,0] 0.00077528878597116 [GeV] -Cell[1,1] 0.0011636961713733 [GeV] -Cell[5,10] 0.0033327660346522 [GeV] -Cell[5,9] 0.00039065456725075 [GeV] -Cell[5,6] 7.2285361966351e-08 [GeV] -Cell[5,3] 0.0009093401267877 [GeV] -Cell[14,38] 0.00060756797837644 [GeV] -Cell[10,30] 2.1492583767667e-05 [GeV] -Cell[15,37] 1.6656000752846e-08 [GeV] -Cell[15,38] 0.00044762319302049 [GeV] -Cell[6,6] 2.2731331622481e-06 [GeV] -Cell[6,39] 0.00044203288009498 [GeV] -Cell[6,9] 4.8606495274726e-06 [GeV] -Cell[6,8] 0.00069105120361598 [GeV] -Cell[2,41] 0.00031258855580256 [GeV] -Cell[0,5] 4.6571917433084e-05 [GeV] -Cell[0,33] 6.8851715850769e-05 [GeV] -Cell[2,38] 0.1328630498837 [GeV] -Cell[2,42] 8.5227546892384e-05 [GeV] -Cell[0,7] 0.0014962542099311 [GeV] -Cell[7,25] 1.8227784442502e-05 [GeV] -Cell[5,29] 4.4270794745557e-05 [GeV] -Cell[2,1] 5.0770890773492e-05 [GeV] -Cell[1,4] 0.0070380150928634 [GeV] -Cell[7,26] 2.4989878966153e-10 [GeV] -Cell[1,2] 0.011012384048831 [GeV] -### Total energy deposition in calorimeter by a source track in 117 cells : 2.6494319093964 (GeV) - -Source track ID 3217 (pi-,5.4476955976016[GeV]) at (-291.45739855253,-406.26664252556,-1903.9871580092) +Source track ID 3551 (neutron,7.3741998938947[GeV]) at (-413.0762339184,-281.72331279429,-1776.1644807987) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[7,5] 0.00069478224737745 [GeV] -Cell[5,34] 0.00028869879694052 [GeV] -Cell[2,44] 0.0007927065498443 [GeV] -Cell[5,47] 0.0024747064301655 [GeV] -Cell[2,23] 7.6039441337343e-06 [GeV] -Cell[1,19] 0.00046670648984197 [GeV] -Cell[0,42] 0.00072352727406339 [GeV] -Cell[0,3] 0.00051099891 [GeV] -Cell[2,11] 6.5546982379601e-05 [GeV] -Cell[3,19] 0.00102199782 [GeV] -Cell[0,18] 0.0019067581206046 [GeV] -Cell[0,20] 0.00049996974127862 [GeV] -Cell[0,40] 0.0041459576559201 [GeV] -Cell[1,31] 0.00018599193054422 [GeV] -Cell[0,30] 0.19091406722617 [GeV] -Cell[0,29] 0.0029352941597135 [GeV] -Cell[0,14] 0.00078910408607199 [GeV] -Cell[1,10] 0.001142441751787 [GeV] -Cell[0,0] 0.00048329175149302 [GeV] -Cell[0,38] 5.1795271865558e-06 [GeV] -Cell[0,41] 0.00069384967269787 [GeV] -Cell[2,45] 0.0049488113033604 [GeV] -Cell[2,10] 0.003408125993568 [GeV] -Cell[2,12] 1.5672607278248e-05 [GeV] -Cell[3,20] 0.00089645396001265 [GeV] -Cell[3,44] 3.4490281774197e-05 [GeV] -Cell[2,24] 0.00011154742544943 [GeV] -Cell[0,43] 0.00030310396320466 [GeV] -Cell[0,31] 4.287611084134 [GeV] -Cell[1,30] 4.7213048470439e-05 [GeV] -Cell[0,32] 0.027483468981206 [GeV] -Cell[5,46] 0.0010913102989429 [GeV] -Cell[0,44] 0.0021906049925382 [GeV] -Cell[0,33] 0.0011207015387363 [GeV] -Cell[0,7] 0.0010427886925879 [GeV] -Cell[0,34] 0.00074095477678657 [GeV] -Cell[2,13] 2.2729019634426e-05 [GeV] -Cell[0,11] 0.0002629130229709 [GeV] -### Total energy deposition in calorimeter by a source track in 38 cells : 4.5420811551087 (GeV) - -Source track ID 1814 (pi-,5.0454778680863[GeV]) at (-463.47676410577,-187.58808366749,-1932.4037030656) +Cell[2,32] 5.3573321895328e-07 [GeV] +Cell[1,29] 0.0062484774887303 [GeV] +Cell[0,14] 0.0025763979036475 [GeV] +Cell[3,21] 0.00067517537990523 [GeV] +Cell[3,38] 0.025930832013554 [GeV] +Cell[8,39] 0.00077902078127249 [GeV] +Cell[5,43] 1.6317574772984e-07 [GeV] +Cell[6,40] 5.60260086786e-08 [GeV] +Cell[6,39] 1.0219107194644e-05 [GeV] +Cell[8,21] 5.2793373470195e-07 [GeV] +Cell[7,38] 0.00088522953839868 [GeV] +Cell[2,46] 0.00055378124801064 [GeV] +Cell[7,14] 6.6323264036328e-09 [GeV] +Cell[0,30] 0.014424085106003 [GeV] +Cell[7,46] 0.0016037033701664 [GeV] +Cell[6,38] 2.1116438438185e-07 [GeV] +Cell[0,42] 1.9030903613384e-05 [GeV] +Cell[0,28] 2.1449208470872 [GeV] +Cell[7,37] 0.00068631161608199 [GeV] +Cell[2,8] 5.8383814697322e-05 [GeV] +Cell[2,9] 0.009645021692593 [GeV] +Cell[3,37] 4.9430604558438e-06 [GeV] +Cell[12,44] 1.5409946703585e-05 [GeV] +Cell[8,40] 0.0006397383435027 [GeV] +Cell[8,38] 0.00019364017042994 [GeV] +Cell[11,45] 1.9617178477347e-06 [GeV] +Cell[5,13] 0.00085647455288215 [GeV] +Cell[11,18] 2.5614511264394e-07 [GeV] +Cell[12,18] 1.6422933583726e-07 [GeV] +Cell[6,24] 3.8901295080223e-06 [GeV] +Cell[11,11] 4.0221493691206e-11 [GeV] +Cell[3,6] 0.0013110433551348 [GeV] +Cell[1,47] 0.0014783254971251 [GeV] +Cell[0,37] 0.0017285748234749 [GeV] +Cell[0,24] 0.00067355627562699 [GeV] +Cell[0,21] 0.00053635481237311 [GeV] +Cell[0,23] 5.4387210071695e-05 [GeV] +Cell[1,25] 0.0042637937111386 [GeV] +Cell[0,20] 6.6698936279863e-08 [GeV] +Cell[0,6] 0.00083713388236778 [GeV] +Cell[1,46] 1.8301436523416e-07 [GeV] +Cell[2,21] 0.00039394331832511 [GeV] +Cell[3,20] 0.00075649708913238 [GeV] +Cell[0,10] 1.2211780063808e-05 [GeV] +Cell[1,26] 0.011749700696686 [GeV] +Cell[2,38] 0.00061989724241812 [GeV] +Cell[1,38] 5.7647402281873e-06 [GeV] +Cell[1,39] 0.0032548888202363 [GeV] +Cell[5,42] 1.824252831284e-07 [GeV] +Cell[0,15] 4.9163696996402e-05 [GeV] +Cell[2,33] 2.0150435670985e-07 [GeV] +Cell[6,34] 4.9110249965452e-06 [GeV] +Cell[1,30] 0.002610959542024 [GeV] +Cell[2,41] 2.5562903601895e-08 [GeV] +Cell[0,19] 4.2093526542885e-05 [GeV] +Cell[0,18] 2.320274097201e-06 [GeV] +Cell[4,2] 2.9194206552347e-05 [GeV] +Cell[0,34] 3.0217576771975e-05 [GeV] +Cell[1,10] 0.0012987072228147 [GeV] +Cell[1,11] 1.6262260905933e-06 [GeV] +Cell[2,7] 3.4878811322869e-07 [GeV] +Cell[0,17] 1.2693151700205e-07 [GeV] +Cell[0,35] 0.00072738753506985 [GeV] +Cell[1,34] 3.8504190570166e-08 [GeV] +Cell[1,33] 0.00093509254972878 [GeV] +Cell[0,33] 0.011732858065646 [GeV] +Cell[0,31] 0.014932145348378 [GeV] +Cell[4,45] 0.001987374036255 [GeV] +Cell[1,7] 0.00068636613430969 [GeV] +Cell[2,45] 2.4918105686083e-05 [GeV] +Cell[3,0] 6.0535157872437e-05 [GeV] +Cell[3,46] 0.0014253554579275 [GeV] +Cell[0,38] 8.3991774255537e-05 [GeV] +Cell[0,39] 0.002874595924832 [GeV] +Cell[2,19] 5.7778130721999e-05 [GeV] +Cell[3,44] 0.00085078456894826 [GeV] +Cell[0,41] 8.7301063310747e-05 [GeV] +Cell[1,32] 0.00028677967936869 [GeV] +Cell[0,13] 0.0029834409192556 [GeV] +Cell[1,41] 0.0021370084517449 [GeV] +Cell[2,40] 0.0042969425221592 [GeV] +Cell[2,43] 0.00058980110921141 [GeV] +Cell[2,44] 0.0037131261316276 [GeV] +Cell[3,43] 7.5219324498903e-05 [GeV] +Cell[3,13] 8.1216057878919e-11 [GeV] +Cell[4,13] 3.5564880818129e-11 [GeV] +Cell[1,31] 0.001792747644546 [GeV] +Cell[0,25] 0.0010426930228548 [GeV] +Cell[0,40] 8.4418598387174e-05 [GeV] +Cell[1,40] 0.011447304279294 [GeV] +Cell[2,26] 0.00019335642851081 [GeV] +Cell[5,46] 0.00051099891 [GeV] +Cell[1,3] 0.00081020490677122 [GeV] +Cell[0,12] 5.0976307389305e-05 [GeV] +Cell[0,29] 0.14677917867515 [GeV] +Cell[0,45] 4.2481090786168e-05 [GeV] +Cell[3,7] 1.3334262348508e-08 [GeV] +Cell[2,5] 2.3366417008219e-05 [GeV] +Cell[1,12] 1.9341349570823e-09 [GeV] +Cell[1,13] 0.00033168365611778 [GeV] +Cell[1,14] 0.0026534476645301 [GeV] +Cell[1,15] 0.0048754407940128 [GeV] +Cell[1,8] 0.0015035690611599 [GeV] +Cell[4,9] 1.6066216630861e-08 [GeV] +Cell[3,23] 5.8922887546942e-09 [GeV] +Cell[0,26] 0.0099603484939036 [GeV] +Cell[3,22] 4.095043561847e-08 [GeV] +Cell[1,28] 0.014587535354734 [GeV] +Cell[1,35] 3.4027570509352e-06 [GeV] +Cell[2,4] 3.1612479651812e-06 [GeV] +Cell[2,3] 1.3045412746919e-05 [GeV] +Cell[3,10] 6.7325301642995e-06 [GeV] +Cell[2,10] 2.0518898963928e-08 [GeV] +Cell[2,16] 0.0015441240207341 [GeV] +Cell[3,24] 1.2028613127768e-10 [GeV] +Cell[2,25] 6.2520120991394e-10 [GeV] +Cell[2,20] 0.0022142208928763 [GeV] +Cell[2,17] 1.0102017313329e-08 [GeV] +Cell[2,15] 0.028300847818134 [GeV] +Cell[11,10] 5.1630195230246e-11 [GeV] +Cell[11,9] 0.002114417757931 [GeV] +Cell[14,47] 3.657647233922e-05 [GeV] +Cell[13,47] 3.3742428058758e-08 [GeV] +Cell[13,0] 4.2919720451664e-06 [GeV] +Cell[14,46] 1.8083651229972e-05 [GeV] +Cell[13,29] 9.1519792989516e-05 [GeV] +Cell[11,44] 4.7345428029075e-06 [GeV] +Cell[3,11] 4.4095242919866e-06 [GeV] +Cell[12,2] 0.0019099434756512 [GeV] +Cell[12,3] 0.00050706967272204 [GeV] +Cell[4,15] 9.2211147715943e-05 [GeV] +Cell[3,15] 0.0073936327954244 [GeV] +Cell[3,16] 0.0013493868955466 [GeV] +Cell[3,14] 4.2597710531481e-05 [GeV] +Cell[7,47] 0.0027672365489613 [GeV] +Cell[2,11] 0.0009077103580685 [GeV] +Cell[8,37] 0.0020082534224595 [GeV] +Cell[14,21] 3.3838473609649e-06 [GeV] +Cell[14,16] 9.0786579821724e-06 [GeV] +Cell[15,16] 1.2219924887177e-05 [GeV] +Cell[3,39] 0.0018211545528269 [GeV] +Cell[2,2] 1.5858543065406e-09 [GeV] +Cell[2,39] 3.0368769315146e-05 [GeV] +Cell[6,25] 0.00031139035569618 [GeV] +Cell[13,30] 0.00013356657333486 [GeV] +Cell[1,27] 0.0042209087856201 [GeV] +Cell[0,5] 0.015791939259896 [GeV] +Cell[2,14] 0.0008077117199365 [GeV] +Cell[1,16] 0.0011747493003001 [GeV] +Cell[0,27] 0.060666006117131 [GeV] +Cell[0,32] 0.00081095789797299 [GeV] +Cell[1,0] 7.2613429219928e-06 [GeV] +Cell[2,13] 8.2355122710851e-06 [GeV] +Cell[7,0] 0.0012364135432579 [GeV] +Cell[0,3] 0.0082010186649803 [GeV] +Cell[0,4] 9.5733004004049e-05 [GeV] +Cell[13,1] 0.00017470048249322 [GeV] +### Total energy deposition in calorimeter by a source track in 157 cells : 2.6365740431024 (GeV) + +Source track ID 3547 (anti_neutron,5.3948206100571[GeV]) at (-415.09134243251,-278.74572182829,-1871.4579101789) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[0,26] 0.09000566396526 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.09000566396526 (GeV) +Cell[0,28] 3.9706129755359e-06 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 3.9706129755359e-06 (GeV) -Source track ID 2963 (pi-,26.431227706622[GeV]) at (-348.91684331825,-358.12991560162,-1955.6883884499) +Source track ID 3235 (e-,0.00061937307441196[GeV]) at (-472.78733415138,-162.70260190308,-1932.9861661071) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[0,30] 0.092903132445805 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.092903132445805 (GeV) +Cell[0,26] 3.3384489277936e-06 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 3.3384489277936e-06 (GeV) -Source track ID 2964 (pi+,1.1827528681121[GeV]) at (-499.00657945745,31.502915074229,-1758.7541015338) +Source track ID 1851 (pi-,5.0453190845278[GeV]) at (-463.66103194027,-187.13216575479,-1932.3813778982) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[6,41] 0.0033033209506213 [GeV] -Cell[7,42] 0.0080144855550696 [GeV] -Cell[5,41] 0.004036516302774 [GeV] -Cell[7,41] 0.0023753794097787 [GeV] -Cell[7,33] 0.00075193483201281 [GeV] -Cell[2,37] 0.0019883993567828 [GeV] -Cell[6,4] 5.5061335937467e-05 [GeV] -Cell[2,34] 0.00018658815977108 [GeV] -Cell[9,36] 1.1834608374102e-06 [GeV] -Cell[8,41] 9.5377195520996e-08 [GeV] -Cell[7,37] 1.420157571556e-05 [GeV] -Cell[10,34] 0.0002535895583635 [GeV] -Cell[10,35] 1.1777794710724e-05 [GeV] -Cell[9,42] 0.0036502355079446 [GeV] -Cell[1,23] 0.28338853679652 [GeV] -Cell[0,24] 0.0029022768045507 [GeV] -Cell[0,22] 0.002811106210881 [GeV] -Cell[5,36] 0.0020539770394583 [GeV] -Cell[1,35] 7.4171868489429e-05 [GeV] -Cell[1,34] 7.1258855792735e-05 [GeV] -Cell[1,29] 0.0036407643920213 [GeV] -Cell[1,28] 0.00053134982538235 [GeV] -Cell[1,18] 1.065974845551e-05 [GeV] -Cell[2,0] 0.0011206449744217 [GeV] -Cell[0,47] 0.00016276513310788 [GeV] -Cell[0,23] 0.21634154732492 [GeV] -Cell[0,25] 1.8676510080695e-07 [GeV] -Cell[2,45] 0.0018798750506777 [GeV] -Cell[1,37] 0.00069504723394533 [GeV] -Cell[2,33] 8.1021153164329e-10 [GeV] -Cell[1,38] 0.0066765875089566 [GeV] -Cell[7,32] 1.9527384874891e-06 [GeV] -Cell[1,36] 0.0019434439880203 [GeV] -Cell[1,45] 0.0002057933177049 [GeV] -Cell[0,45] 0.0014481289132552 [GeV] -Cell[1,24] 1.5931437614768e-05 [GeV] -Cell[1,33] 9.3113555573154e-06 [GeV] -Cell[2,47] 5.5418049385025e-06 [GeV] -Cell[6,35] 6.1450368241367e-07 [GeV] -Cell[6,36] 0.00057451577756956 [GeV] -Cell[6,5] 3.7191356736002e-05 [GeV] -Cell[10,36] 2.7684715745409e-05 [GeV] -Cell[4,41] 3.7154538440518e-06 [GeV] -Cell[8,16] 0.00013338453826111 [GeV] -Cell[8,15] 5.6438005412929e-07 [GeV] -Cell[9,35] 3.8936908822507e-08 [GeV] -Cell[8,42] 0.0082510981508161 [GeV] -Cell[8,43] 0.0026145367828885 [GeV] -Cell[6,42] 0.00030714094476734 [GeV] -Cell[0,44] 1.2390143755283e-06 [GeV] -Cell[2,38] 0.00023033250780941 [GeV] -Cell[5,42] 0.0017816524975016 [GeV] -### Total energy deposition in calorimeter by a source track in 52 cells : 0.56459733863695 (GeV) - -Source track ID 2961 (gamma,1.5279055119092[GeV]) at (-73.254866188045,-494.60461439393,-436.11302609852) -Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[7,8] 0.00069855114646652 [GeV] -Cell[7,34] 1.408220663922 [GeV] -Cell[7,35] 0.10859046887537 [GeV] -Cell[7,33] 0.0039968534335998 [GeV] -Cell[6,34] 0.00020907344281156 [GeV] -Cell[7,36] 0.0040273099206251 [GeV] -Cell[7,38] 0.00048631094927234 [GeV] -Cell[6,35] 9.1067805393845e-05 [GeV] -Cell[6,36] 2.4687960727664e-05 [GeV] -Cell[6,23] 0.0012504039064275 [GeV] -Cell[8,34] 0.00031008317032493 [GeV] -### Total energy deposition in calorimeter by a source track in 11 cells : 1.527905474533 (GeV) - -Source track ID 2962 (gamma,2.1921548366006[GeV]) at (-105.1967210329,-488.80839792696,-488.29263188862) +Cell[1,46] 0.00043477326914304 [GeV] +Cell[0,26] 0.16139058891321 [GeV] +Cell[3,40] 0.00051099891 [GeV] +Cell[0,27] 0.014813717846911 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.17715007893927 (GeV) + +Source track ID 3173 (pi-,26.431211001028[GeV]) at (-349.00608781682,-358.04294528282,-1955.3316562743) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[5,31] 0.0061283854439804 [GeV] -Cell[7,34] 2.0974116826861 [GeV] -Cell[7,35] 0.0073063838710383 [GeV] -Cell[6,33] 0.011765700546927 [GeV] -Cell[7,6] 0.00051099891 [GeV] -Cell[5,30] 0.000772823428374 [GeV] -Cell[7,33] 0.043753223384396 [GeV] -Cell[8,33] 0.00033899864482738 [GeV] -Cell[6,34] 0.0091165842566508 [GeV] -Cell[8,20] 0.0008348861685378 [GeV] -Cell[10,5] 0.000485119556718 [GeV] -Cell[9,18] 0.0054909277672964 [GeV] -Cell[6,38] 0.0006455529578757 [GeV] -Cell[6,31] 0.00047863564324367 [GeV] -Cell[6,35] 0.00077244546657162 [GeV] -Cell[6,36] 0.0015350195170959 [GeV] -Cell[4,7] 0.0010013794689867 [GeV] -Cell[8,23] 0.00068663477535876 [GeV] -Cell[8,43] 0.00019483746522784 [GeV] -Cell[6,45] 9.4172283656219e-05 [GeV] -Cell[8,24] 0.00024915130040853 [GeV] -Cell[6,19] 0.00040010875363804 [GeV] -Cell[8,34] 0.00036751310660045 [GeV] -### Total energy deposition in calorimeter by a source track in 23 cells : 2.1903411654035 (GeV) - -Source track ID 2959 (gamma,0.076632669216442[GeV]) at (-300.43599686301,399.6726307729,200.63474650275) +Cell[1,29] 3.6527552000962e-05 [GeV] +Cell[5,14] 0.0010284421030594 [GeV] +Cell[5,43] 0.0026147115065093 [GeV] +Cell[0,30] 0.95270864437964 [GeV] +Cell[0,42] 0.0060702087726293 [GeV] +Cell[0,28] 0.0053036359802255 [GeV] +Cell[3,37] 7.8153033682611e-06 [GeV] +Cell[1,23] 0.001943612850745 [GeV] +Cell[5,13] 2.3699432233116e-05 [GeV] +Cell[0,0] 0.00073361392929488 [GeV] +Cell[0,1] 0.008844163140876 [GeV] +Cell[0,47] 4.2192647932097e-05 [GeV] +Cell[4,16] 0.0010312995561419 [GeV] +Cell[1,1] 0.0038153975655552 [GeV] +Cell[0,24] 0.00088012673707714 [GeV] +Cell[0,21] 7.7618546492886e-06 [GeV] +Cell[0,22] 4.7841122493878e-05 [GeV] +Cell[0,23] 0.0036078000081078 [GeV] +Cell[2,47] 0.00023538254430207 [GeV] +Cell[4,20] 1.661388122011e-05 [GeV] +Cell[3,19] 0.00017397891269979 [GeV] +Cell[8,2] 4.9188059324479e-07 [GeV] +Cell[4,21] 5.2873547538184e-06 [GeV] +Cell[0,44] 0.00014746506461393 [GeV] +Cell[4,37] 8.1425943062641e-07 [GeV] +Cell[0,18] 0.0031025232178177 [GeV] +Cell[3,45] 7.1910353726707e-06 [GeV] +Cell[1,10] 0.0026468088986998 [GeV] +Cell[1,11] 1.8729678995442e-05 [GeV] +Cell[0,31] 0.0056425345777162 [GeV] +Cell[2,0] 4.3663159885909e-06 [GeV] +Cell[0,39] 0.0011759862125742 [GeV] +Cell[2,19] 6.7389491305221e-06 [GeV] +Cell[3,44] 7.6454897643998e-06 [GeV] +Cell[0,41] 0.00038457497735942 [GeV] +Cell[1,41] 0.001031685951231 [GeV] +Cell[1,3] 0.0026145154212692 [GeV] +Cell[0,29] 0.23497161290508 [GeV] +Cell[0,45] 0.0031079754474812 [GeV] +Cell[2,35] 0.0004379949007399 [GeV] +Cell[2,12] 0.00046692410790861 [GeV] +Cell[1,12] 9.297209226861e-05 [GeV] +Cell[1,14] 2.0852456507896e-05 [GeV] +Cell[1,15] 0.0011949165083424 [GeV] +Cell[0,43] 0.0017816817782594 [GeV] +Cell[1,28] 8.2725109677995e-09 [GeV] +Cell[2,10] 3.2872119618332e-08 [GeV] +Cell[2,16] 0.00015476230969887 [GeV] +Cell[3,18] 9.0930819569621e-06 [GeV] +Cell[2,15] 0.0061177229290006 [GeV] +Cell[14,47] 0.0001200031882745 [GeV] +Cell[14,0] 0.00079349520319408 [GeV] +Cell[15,47] 1.4912586721039e-10 [GeV] +Cell[15,0] 1.8974495302018e-05 [GeV] +Cell[4,14] 4.7750856900166e-05 [GeV] +Cell[4,15] 5.8384223271787e-05 [GeV] +Cell[11,16] 0.0019532247981853 [GeV] +Cell[9,2] 0.00071747465830424 [GeV] +Cell[2,2] 0.0020588838564289 [GeV] +Cell[4,38] 7.7923059579916e-06 [GeV] +Cell[2,36] 9.7669022112553e-05 [GeV] +Cell[2,1] 1.6613895805108e-05 [GeV] +Cell[2,14] 0.00065973679186326 [GeV] +Cell[1,16] 7.6331957243383e-06 [GeV] +Cell[0,27] 7.5681259659177e-10 [GeV] +Cell[1,0] 0.00012128823113312 [GeV] +Cell[0,46] 0.00065251262014228 [GeV] +Cell[9,1] 1.2123433407396e-08 [GeV] +Cell[1,2] 0.0021828848844158 [GeV] +Cell[0,2] 1.198100799229e-06 [GeV] +Cell[1,36] 0.00025225144263602 [GeV] +### Total energy deposition in calorimeter by a source track in 71 cells : 1.2640951635278 (GeV) + +Source track ID 3174 (pi+,1.1826264641197[GeV]) at (-498.8027662931,34.580346128277,-1756.8755165843) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[10,23] 0.00029391290745394 [GeV] -Cell[10,41] 0.00051099891 [GeV] -Cell[11,17] 0.00017321212100883 [GeV] -Cell[11,38] 0.00020596409629942 [GeV] -Cell[11,16] 0.074517500745772 [GeV] -Cell[14,42] 0.00051099891 [GeV] -### Total energy deposition in calorimeter by a source track in 6 cells : 0.076212587690534 (GeV) - -Source track ID 2960 (gamma,0.17932025858732[GeV]) at (-255.57095701286,429.74816571049,-559.80029902028) +Cell[9,32] 0.00073649382324959 [GeV] +Cell[1,45] 0.007731727656159 [GeV] +Cell[7,41] 7.7253145525447e-07 [GeV] +Cell[17,32] 0.00017029877420828 [GeV] +Cell[17,31] 1.4689294039272e-06 [GeV] +Cell[16,30] 9.6904094680212e-06 [GeV] +Cell[1,23] 0.056641029128721 [GeV] +Cell[16,44] 7.4566752300598e-07 [GeV] +Cell[16,45] 3.0245249831751e-08 [GeV] +Cell[16,18] 9.4670461548958e-06 [GeV] +Cell[16,19] 1.4010103768669e-07 [GeV] +Cell[10,47] 0.0002132883066804 [GeV] +Cell[9,36] 0.0049496478196292 [GeV] +Cell[11,11] 1.9000034973374e-05 [GeV] +Cell[3,6] 3.2346025982406e-06 [GeV] +Cell[10,10] 0.00079059215367647 [GeV] +Cell[13,35] 0.0022858889082705 [GeV] +Cell[0,24] 0.010622586379737 [GeV] +Cell[0,21] 0.0029122974966913 [GeV] +Cell[0,22] 0.40662643886458 [GeV] +Cell[0,23] 0.16030051208484 [GeV] +Cell[1,22] 1.5380921546466e-06 [GeV] +Cell[0,20] 0.0006164559464072 [GeV] +Cell[1,21] 2.5560527447055e-05 [GeV] +Cell[2,21] 7.7598581847269e-06 [GeV] +Cell[0,44] 0.0044571716047565 [GeV] +Cell[3,5] 0.015712107718799 [GeV] +Cell[2,41] 0.00011473909212441 [GeV] +Cell[1,34] 0.00018113671390029 [GeV] +Cell[1,33] 7.599234522786e-06 [GeV] +Cell[2,45] 0.0003523546566538 [GeV] +Cell[10,11] 5.8676648768596e-07 [GeV] +Cell[2,31] 0.00044402484771399 [GeV] +Cell[2,43] 0.033919313891936 [GeV] +Cell[1,43] 0.00036913705260814 [GeV] +Cell[9,3] 0.00012904902684693 [GeV] +Cell[1,31] 7.132486559567e-05 [GeV] +Cell[0,25] 0.023520863389759 [GeV] +Cell[5,7] 3.8616566715064e-05 [GeV] +Cell[0,45] 8.3761542337015e-06 [GeV] +Cell[3,7] 1.3602321221242e-06 [GeV] +Cell[2,5] 0.00017736494964745 [GeV] +Cell[2,34] 9.8485521739349e-06 [GeV] +Cell[0,43] 0.00026613188822615 [GeV] +Cell[0,26] 0.0033989702433727 [GeV] +Cell[5,5] 0.00028344559890047 [GeV] +Cell[1,35] 9.6215513810876e-06 [GeV] +Cell[2,22] 5.3633591742255e-06 [GeV] +Cell[2,15] 8.2164928608108e-06 [GeV] +Cell[11,10] 1.6089921630055e-05 [GeV] +Cell[15,46] 0.00049812921868124 [GeV] +Cell[15,18] 1.0836646741154e-05 [GeV] +Cell[14,35] 1.2304961506743e-05 [GeV] +Cell[16,43] 3.439807997438e-06 [GeV] +Cell[6,37] 0.0017170611563984 [GeV] +Cell[8,41] 0.00064626848829607 [GeV] +Cell[16,29] 2.4811714072712e-05 [GeV] +Cell[9,2] 0.00042623521837663 [GeV] +Cell[10,46] 0.00017244842589491 [GeV] +Cell[2,42] 0.00081978158074833 [GeV] +Cell[17,3] 4.6326575102285e-08 [GeV] +Cell[5,6] 0.0064201468692699 [GeV] +Cell[1,27] 7.8449127322529e-06 [GeV] +Cell[0,27] 0.0039204063294054 [GeV] +Cell[1,36] 0.00090763634946632 [GeV] +Cell[1,44] 0.0010531672725489 [GeV] +Cell[19,14] 0.00057642868424716 [GeV] +Cell[19,15] 6.755752792742e-10 [GeV] +Cell[17,30] 0.00011805124305283 [GeV] +Cell[15,19] 0.00091595641964716 [GeV] +### Total energy deposition in calorimeter by a source track in 70 cells : 0.75643048206187 (GeV) + +Source track ID 3171 (gamma,1.5279055119092[GeV]) at (-73.254796189925,-494.60462476121,-436.11291029633) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[7,15] 0.0032181471589131 [GeV] -Cell[10,41] 0.001262960210412 [GeV] -Cell[6,16] 0.049733539512166 [GeV] -Cell[7,16] 0.12245290916262 [GeV] -Cell[6,15] 0.0021583943057976 [GeV] -### Total energy deposition in calorimeter by a source track in 5 cells : 0.17882595034991 (GeV) - -Source track ID 1818 (pi-,0.22698905094629[GeV]) at (52.413880266259,497.24519621152,-1292.969302931) +Cell[8,8] 0.0034284428298962 [GeV] +Cell[6,45] 0.00048849140091551 [GeV] +Cell[5,14] 0.00035595444268536 [GeV] +Cell[9,10] 0.00050449358071798 [GeV] +Cell[9,9] 0.001324531095188 [GeV] +Cell[7,30] 0.0013222618270356 [GeV] +Cell[7,36] 0.0010112231834604 [GeV] +Cell[7,37] 0.0045434724460746 [GeV] +Cell[7,27] 0.00012725487583342 [GeV] +Cell[7,32] 0.001500548855844 [GeV] +Cell[8,34] 0.0010927493980429 [GeV] +Cell[8,35] 0.0052228473349463 [GeV] +Cell[7,35] 0.11452058375909 [GeV] +Cell[7,33] 0.014394674944164 [GeV] +Cell[7,34] 1.3712460803849 [GeV] +Cell[8,43] 0.0018420527687361 [GeV] +Cell[6,4] 0.00051099891 [GeV] +Cell[7,1] 0.00051099891 [GeV] +Cell[5,9] 0.00076904592668076 [GeV] +Cell[12,4] 0.00041746205067203 [GeV] +Cell[8,46] 0.00071325875039744 [GeV] +### Total energy deposition in calorimeter by a source track in 21 cells : 1.5258474276753 (GeV) + +Source track ID 3172 (gamma,2.1921548366006[GeV]) at (-105.19677182207,-488.8083869966,-488.29271378891) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[7,42] 0.00019860507747364 [GeV] -Cell[7,41] 0.00020185664957432 [GeV] -Cell[3,14] 0.00067807044128938 [GeV] -Cell[2,15] 0.00015357878344491 [GeV] -Cell[0,36] 0.00045814302279189 [GeV] -Cell[0,37] 0.0018018323196659 [GeV] -Cell[3,11] 0.11514719109682 [GeV] -Cell[4,11] 0.00073487116012086 [GeV] -Cell[3,12] 1.7748509641251e-05 [GeV] -Cell[5,36] 1.269730802278e-07 [GeV] -Cell[1,35] 0.00032263002528123 [GeV] -Cell[2,9] 6.2961243260929e-05 [GeV] -Cell[0,47] 0.00042407493849678 [GeV] -Cell[0,0] 0.0066901676040912 [GeV] -Cell[3,8] 0.00066588772171445 [GeV] -Cell[2,10] 0.002227136345433 [GeV] -Cell[1,36] 1.8070969701512e-05 [GeV] -Cell[3,13] 3.9246418054972e-07 [GeV] -Cell[5,11] 3.5010892315768e-07 [GeV] -Cell[0,1] 0.0048066554705194 [GeV] -Cell[2,16] 1.269014447746e-05 [GeV] -Cell[3,10] 0.0013885413782148 [GeV] -Cell[3,9] 0.001392361998162 [GeV] -Cell[1,3] 9.8654265748337e-06 [GeV] -Cell[1,1] 3.2338830198e-05 [GeV] -Cell[0,2] 0.00039256849586036 [GeV] -Cell[6,42] 0.00013808828006222 [GeV] -Cell[5,35] 1.1251364280724e-06 [GeV] -Cell[4,10] 0.0015200758098668 [GeV] -Cell[4,9] 1.4562243902333e-05 [GeV] -Cell[6,21] 0.00077716725101016 [GeV] -Cell[0,35] 7.259425270604e-06 [GeV] -Cell[1,2] 0.00021581342901118 [GeV] -### Total energy deposition in calorimeter by a source track in 33 cells : 0.14051280877454 (GeV) - -Source track ID 2788 (gamma,0.31054837923301[GeV]) at (447.3331181979,223.3675924644,253.26070258007) +Cell[3,42] 0.00075391105852718 [GeV] +Cell[9,8] 0.00051099891 [GeV] +Cell[6,45] 0.0005043243584629 [GeV] +Cell[7,30] 9.8081768708345e-05 [GeV] +Cell[9,38] 0.00021852246226808 [GeV] +Cell[7,36] 0.00541342891795 [GeV] +Cell[7,17] 0.0010598786523825 [GeV] +Cell[7,32] 0.0011905692053487 [GeV] +Cell[7,35] 0.030926132387587 [GeV] +Cell[7,33] 0.016067476885317 [GeV] +Cell[7,34] 2.0767611511429 [GeV] +Cell[9,37] 0.00036744680430104 [GeV] +Cell[8,43] 0.00045391846396988 [GeV] +Cell[10,37] 5.3898136777661e-06 [GeV] +Cell[6,15] 0.0022079689880236 [GeV] +Cell[6,34] 0.026429326399834 [GeV] +Cell[4,11] 0.00051099891 [GeV] +Cell[4,6] 0.00051099891 [GeV] +Cell[6,33] 0.0060957160466163 [GeV] +Cell[4,5] 0.0025733508760406 [GeV] +Cell[6,35] 0.0023646742213458 [GeV] +Cell[8,3] 0.00051099891 [GeV] +Cell[8,24] 0.0027254392503607 [GeV] +### Total energy deposition in calorimeter by a source track in 23 cells : 2.1782607033436 (GeV) + +Source track ID 3169 (gamma,0.076632669216442[GeV]) at (-300.43599634073,399.6726311655,200.63473730455) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[11,4] 0.0048156300042002 [GeV] -Cell[10,2] 0.00051099891 [GeV] -Cell[10,1] 0.00094678084425255 [GeV] -Cell[11,2] 0.0023920397105103 [GeV] -Cell[11,3] 0.30033225629306 [GeV] -Cell[17,27] 0.0014620611333375 [GeV] -### Total energy deposition in calorimeter by a source track in 6 cells : 0.31045976689536 (GeV) - -Source track ID 2836 (gamma,0.00023218831096189[GeV]) at (-481.29086037918,-135.49578486238,313.30881545872) +Cell[11,18] 0.00092194202003317 [GeV] +Cell[10,17] 0.0022811220491873 [GeV] +Cell[10,16] 0.00049125204330382 [GeV] +Cell[11,17] 0.0070762575373467 [GeV] +Cell[11,16] 0.065862095566571 [GeV] +### Total energy deposition in calorimeter by a source track in 5 cells : 0.076632669216442 (GeV) + +Source track ID 3170 (gamma,0.17932025858732[GeV]) at (-255.57095734722,429.74816551165,-559.80029355897) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[11,26] 0.00023218831096189 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00023218831096189 (GeV) +Cell[7,15] 0.0072884057952631 [GeV] +Cell[7,16] 0.16683586993206 [GeV] +Cell[6,15] 0.0011523491060294 [GeV] +Cell[6,16] 0.0040436337539709 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.17932025858732 (GeV) -Source track ID 2839 (gamma,0.00034161537180405[GeV]) at (-478.471017079,-145.139539118,637.57725947011) +Source track ID 2929 (pi-,0.16520961966174[GeV]) at (-30.568161885809,499.06471271662,1212.0520164171) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[13,26] 0.00034161537180405 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00034161537180405 (GeV) - -Source track ID 2797 (gamma,0.0013252133408484[GeV]) at (330.62864390992,-375.07959132201,315.29939792711) +Cell[10,39] 0.00024671876223977 [GeV] +Cell[12,32] 0.00015825890527776 [GeV] +Cell[13,32] 0.00034738395770796 [GeV] +Cell[13,31] 4.5870545332036e-06 [GeV] +Cell[12,31] 0.00023096901137012 [GeV] +Cell[13,26] 0.00051099891 [GeV] +Cell[15,37] 0.00035717253294888 [GeV] +Cell[10,38] 1.2912853824673e-05 [GeV] +Cell[15,44] 0.003864027525159 [GeV] +Cell[18,0] 0.0017603455773706 [GeV] +Cell[11,25] 0.0037273690907704 [GeV] +Cell[15,45] 0.0029195768698346 [GeV] +Cell[15,3] 0.002113710381568 [GeV] +Cell[10,44] 5.0015404995065e-06 [GeV] +Cell[11,26] 0.0044144465704841 [GeV] +Cell[16,37] 3.5593572829384e-06 [GeV] +Cell[16,10] 0.0014473644925564 [GeV] +Cell[16,11] 0.0046943362557103 [GeV] +Cell[15,18] 4.1481168300379e-06 [GeV] +Cell[15,17] 0.0015194504569652 [GeV] +Cell[14,24] 0.00051099891 [GeV] +Cell[16,12] 0.040126146771563 [GeV] +Cell[16,13] 0.0034672895605801 [GeV] +Cell[15,38] 0.00019416283425278 [GeV] +Cell[19,47] 1.0689008253394e-05 [GeV] +Cell[14,16] 2.4177493178286e-06 [GeV] +Cell[14,17] 7.6954269115959e-07 [GeV] +Cell[15,12] 8.1326077565791e-06 [GeV] +Cell[15,11] 0.00041781420550764 [GeV] +Cell[15,16] 0.00030178986874739 [GeV] +Cell[18,17] 0.0010790117812687 [GeV] +Cell[19,0] 0.00018852840503894 [GeV] +Cell[17,47] 0.00021413415239442 [GeV] +Cell[19,1] 0.0013852713167664 [GeV] +Cell[17,0] 8.8148715349234e-10 [GeV] +Cell[15,19] 1.3784743088763e-05 [GeV] +Cell[17,7] 0.00030113911118769 [GeV] +Cell[17,6] 1.3769059705737e-09 [GeV] +### Total energy deposition in calorimeter by a source track in 38 cells : 0.076564421049741 (GeV) + +Source track ID 2930 (gamma,0.0011979408009933[GeV]) at (-217.25573241718,450.33315082489,-823.76858190746) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[11,41] 0.0013252133408484 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0013252133408484 (GeV) +Cell[5,15] 0.0011979408009933 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0011979408009933 (GeV) -Source track ID 2798 (gamma,0.020884778900252[GeV]) at (356.28479422281,-350.80072036073,339.81953349994) +Source track ID 2865 (gamma,0.31054837923301[GeV]) at (447.33311694068,223.3675949822,253.26070185793) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[12,42] 0.00035330599617914 [GeV] -Cell[12,28] 0.0021350294031144 [GeV] -Cell[11,41] 0.010217877339182 [GeV] -### Total energy deposition in calorimeter by a source track in 3 cells : 0.012706212738475 (GeV) - -Source track ID 2799 (gamma,0.00049290628064453[GeV]) at (357.53752773944,-349.52384218816,339.02423055578) +Cell[11,3] 0.29710497352265 [GeV] +Cell[13,34] 0.0044960923050037 [GeV] +Cell[13,33] 0.00073144030377168 [GeV] +Cell[11,4] 0.0063317978336986 [GeV] +Cell[12,4] 0.0018840752678802 [GeV] +### Total energy deposition in calorimeter by a source track in 5 cells : 0.310548379233 (GeV) + +Source track ID 2867 (e-,0.13173556281873[GeV]) at (487.8585204908,-109.51741406978,274.37943699099) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[11,42] 0.00041637506678531 [GeV] -Cell[11,41] 7.6531213859215e-05 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.00049290628064453 (GeV) +Cell[8,28] 0.0010899794152239 [GeV] +Cell[11,45] 0.00021304218625578 [GeV] +Cell[11,46] 0.12959193030268 [GeV] +Cell[12,15] 0.00032961200456698 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.13122456390873 (GeV) -Source track ID 2801 (gamma,0.00021379423470032[GeV]) at (-274.96570159867,-417.60491250026,657.51562822802) +Source track ID 2868 (e+,0.01564955675312[GeV]) at (461.58716711475,-192.19075720486,1034.4394378025) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[13,31] 0.00021379423470032 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00021379423470032 (GeV) +Cell[15,44] 0.0027431698318199 [GeV] +Cell[19,31] 0.013221994103788 [GeV] +### Total energy deposition in calorimeter by a source track in 2 cells : 0.015965163935608 (GeV) -Source track ID 2791 (e+,0.11088050724314[GeV]) at (428.59544934155,-257.49939961817,1093.9630364363) +Source track ID 2851 (pi+,0.58335050406449[GeV]) at (-498.99818998271,31.635524240601,862.03620003022) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[16,44] 0.0015798880902175 [GeV] -Cell[14,0] 0.00026563468997621 [GeV] -Cell[15,43] 0.10515624496824 [GeV] -Cell[15,44] 0.0004615432059802 [GeV] -Cell[15,42] 0.0039281951987235 [GeV] -### Total energy deposition in calorimeter by a source track in 5 cells : 0.11139150615314 (GeV) - -Source track ID 2765 (pi+,0.58322310378498[GeV]) at (-498.88304279677,33.402239593189,857.85857852193) +Cell[15,23] 0.055566752731477 [GeV] +Cell[14,23] 0.14721852641877 [GeV] +Cell[15,22] 0.15498662791579 [GeV] +Cell[16,22] 0.054602403548888 [GeV] +Cell[16,23] 0.075741755839797 [GeV] +### Total energy deposition in calorimeter by a source track in 5 cells : 0.48811606645473 (GeV) + +Source track ID 2845 (e-,0.064994225505651[GeV]) at (-103.70824525981,-489.12636390316,296.4506933232) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[15,20] 3.6408311302694e-08 [GeV] -Cell[14,20] 0.00089484938773746 [GeV] -Cell[13,24] 0.00028581270829 [GeV] -Cell[15,25] 0.00098418065923007 [GeV] -Cell[15,24] 0.008373405921654 [GeV] -Cell[14,24] 0.0095698959920047 [GeV] -Cell[15,45] 4.2603362937143e-05 [GeV] -Cell[15,46] 4.0759401534842e-05 [GeV] -Cell[12,2] 3.7812049267814e-06 [GeV] -Cell[13,22] 5.7838523844111e-07 [GeV] -Cell[12,18] 0.00018897274255312 [GeV] -Cell[14,21] 0.005105838631083 [GeV] -Cell[15,26] 0.0037090663398153 [GeV] -Cell[12,20] 3.156786647196e-09 [GeV] -Cell[14,46] 1.1336093473346e-07 [GeV] -Cell[15,23] 0.0069897394078489 [GeV] -Cell[16,24] 0.0012641243781209 [GeV] -Cell[15,22] 0.015017069314608 [GeV] -Cell[14,23] 0.10535647056653 [GeV] -Cell[14,22] 0.17043504688093 [GeV] -Cell[14,25] 0.0040678377115165 [GeV] -Cell[12,19] 1.5358893978714e-05 [GeV] -Cell[14,19] 1.2655345518624e-06 [GeV] -Cell[15,21] 0.00034528900155033 [GeV] -Cell[14,45] 5.1716819302783e-07 [GeV] -Cell[19,47] 0.00017989813150662 [GeV] -### Total energy deposition in calorimeter by a source track in 26 cells : 0.33287251465237 (GeV) - -Source track ID 2752 (gamma,1.004682788758[GeV]) at (-131.64956052514,-482.35712207195,294.93686527145) +Cell[10,23] 0.00015376826565388 [GeV] +Cell[11,35] 0.002657809752515 [GeV] +Cell[11,37] 0.00033612107285939 [GeV] +Cell[11,34] 0.059270860895125 [GeV] +Cell[10,37] 0.00073603609100416 [GeV] +Cell[12,41] 0.00073751223046526 [GeV] +### Total energy deposition in calorimeter by a source track in 6 cells : 0.063892108307623 (GeV) + +Source track ID 2846 (e+,0.93657719019744[GeV]) at (-132.89980961867,-482.01414979575,294.77973634219) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[10,33] 0.00054327662513757 [GeV] -Cell[12,34] 0.011960882151444 [GeV] -Cell[11,32] 0.0015757470519933 [GeV] -Cell[12,33] 0.0012311274406954 [GeV] -Cell[11,33] 0.65248761828734 [GeV] -Cell[11,34] 0.32069939539952 [GeV] -Cell[11,17] 7.3316361231264e-06 [GeV] -Cell[12,17] 0.0043251341720948 [GeV] -Cell[11,35] 0.0037741178946536 [GeV] -Cell[11,16] 0.00017804481243002 [GeV] -Cell[15,2] 0.0011615759106986 [GeV] -Cell[11,15] 4.8591832455713e-06 [GeV] -Cell[16,46] 0.0016502206021783 [GeV] -### Total energy deposition in calorimeter by a source track in 13 cells : 0.99959933116755 (GeV) - -Source track ID 2754 (e-,0.25654752488727[GeV]) at (-170.44789321577,-470.05054589725,253.94799596984) +Cell[11,32] 0.0080365952324762 [GeV] +Cell[10,26] 0.0010093269152196 [GeV] +Cell[11,36] 0.00065121814443362 [GeV] +Cell[11,35] 0.0011015193902544 [GeV] +Cell[12,32] 0.0030828203070829 [GeV] +Cell[11,30] 0.0029923521691444 [GeV] +Cell[11,37] 0.0002018687531581 [GeV] +Cell[11,33] 0.86684653882681 [GeV] +Cell[11,34] 0.042365375097433 [GeV] +Cell[12,33] 0.0033195926814738 [GeV] +Cell[12,34] 0.0012767566810186 [GeV] +Cell[12,35] 0.00021776945314552 [GeV] +Cell[11,10] 0.0011266693768572 [GeV] +Cell[10,5] 0.0020769498595877 [GeV] +Cell[12,5] 0.001301982353049 [GeV] +### Total energy deposition in calorimeter by a source track in 15 cells : 0.93560733524114 (GeV) + +Source track ID 2844 (gamma,1.1635719616336[GeV]) at (-189.42298714233,-462.72986929965,253.06744020217) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[10,33] 0.0014225303410112 [GeV] -Cell[11,32] 0.0019713158130096 [GeV] -Cell[11,33] 0.24856778634704 [GeV] -Cell[11,34] 0.0040748934762112 [GeV] -### Total energy deposition in calorimeter by a source track in 4 cells : 0.25603652597727 (GeV) - -Source track ID 2758 (gamma,7.9897727299482e-05[GeV]) at (-158.27327669447,-474.28848803697,259.07588378146) -Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[11,33] 7.9897727299482e-05 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 7.9897727299482e-05 (GeV) - -Source track ID 2755 (e+,0.89904388103009[GeV]) at (-194.99170353986,-460.4109420405,253.20589808627) +Cell[11,32] 0.23505450956285 [GeV] +Cell[12,0] 0.0025842537134969 [GeV] +Cell[10,9] 0.00022476277492418 [GeV] +Cell[11,33] 0.9166235794472 [GeV] +Cell[11,34] 0.003375934402265 [GeV] +Cell[12,33] 0.0016311875517082 [GeV] +Cell[11,9] 0.0010183435952396 [GeV] +Cell[10,31] 0.0025816737920008 [GeV] +Cell[10,32] 0.00047771679396754 [GeV] +### Total energy deposition in calorimeter by a source track in 9 cells : 1.1635719616337 (GeV) + +Source track ID 2756 (e-,0.0020987146215974[GeV]) at (283.93481991413,411.55925216223,1484.5909654858) Original primary track ID 31 (unknown,691.32334101424[GeV]) -Cell[10,33] 0.00051099891 [GeV] -Cell[10,32] 0.013453959099281 [GeV] -Cell[11,31] 0.0015769744930911 [GeV] -Cell[11,32] 0.76764337674508 [GeV] -Cell[16,13] 0.00085070799580883 [GeV] -Cell[14,1] 0.00036482246032019 [GeV] -Cell[12,33] 0.0016344451396826 [GeV] -Cell[11,33] 0.11030420834542 [GeV] -Cell[11,14] 0.0010327797988635 [GeV] -Cell[10,30] 0.00024984118367074 [GeV] -Cell[15,42] 0.00033691463242514 [GeV] -### Total energy deposition in calorimeter by a source track in 11 cells : 0.89795902880365 (GeV) - -Source track ID 1804 (gamma,0.17435926984906[GeV]) at (-435.61886594515,245.4306493343,445.72704892374) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[14,31] 0.0016217551392925 [GeV] -Cell[11,22] 0.00022487359366742 [GeV] -Cell[16,42] 0.00074862120000717 [GeV] -Cell[16,41] 0.0057221713119433 [GeV] -Cell[13,20] 0.0026878779530953 [GeV] -Cell[13,4] 4.8922136784313e-08 [GeV] -Cell[12,20] 0.14057928618424 [GeV] -Cell[13,5] 0.00040430655399621 [GeV] -Cell[12,19] 0.0076039212779318 [GeV] -### Total energy deposition in calorimeter by a source track in 9 cells : 0.15959286213631 (GeV) - -Source track ID 1276 (pi+,0.27590290174837[GeV]) at (260.82246371546,426.58134326456,9.9401329308766) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[9,7] 0.0015589597565545 [GeV] -Cell[9,6] 0.00016876808762822 [GeV] -Cell[10,6] 0.039895538006728 [GeV] -Cell[10,7] 0.10786455934285 [GeV] -### Total energy deposition in calorimeter by a source track in 4 cells : 0.14948782519376 (GeV) - -Source track ID 1785 (gamma,0.67224858404432[GeV]) at (444.05232258914,-229.82065791218,-518.95901866454) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[8,10] 0.0010427779937399 [GeV] -Cell[9,10] 0.0020784852013593 [GeV] -Cell[11,40] 4.8242630884942e-05 [GeV] -Cell[7,43] 0.022394617388768 [GeV] -Cell[7,45] 0.00048213594800281 [GeV] -Cell[7,32] 0.00092895030126154 [GeV] -Cell[7,44] 0.62900081910587 [GeV] -Cell[6,44] 0.010302554813905 [GeV] -Cell[6,43] 0.00050836254184915 [GeV] -Cell[6,45] 0.0009491483512498 [GeV] -Cell[7,16] 0.0028114848277854 [GeV] -Cell[6,9] 0.00044086887208611 [GeV] -Cell[6,46] 0.00047973568056437 [GeV] -### Total energy deposition in calorimeter by a source track in 13 cells : 0.67146818365733 (GeV) - -Source track ID 1786 (gamma,0.13757172036947[GeV]) at (417.90941959011,-274.50267215067,-190.74598415518) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[9,0] 0.0016292926103939 [GeV] -Cell[9,43] 0.077862620321278 [GeV] -Cell[8,44] 0.00066075406312509 [GeV] -Cell[8,43] 0.057419001426664 [GeV] -### Total energy deposition in calorimeter by a source track in 4 cells : 0.13757166842146 (GeV) - -Source track ID 1776 (kaon-,1.1698629597806[GeV]) at (474.67657574013,-157.10553282309,-18.857461002335) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[7,10] 0.00068022301224482 [GeV] -Cell[7,9] 0.0015952298799992 [GeV] -Cell[7,8] 3.0395640642382e-06 [GeV] -Cell[9,11] 0.00023942466305147 [GeV] -Cell[9,41] 1.8043959357783e-08 [GeV] -Cell[10,33] 0.00065336498326724 [GeV] -Cell[2,27] 3.2981624826789e-09 [GeV] -Cell[8,47] 6.7219538830841e-05 [GeV] -Cell[8,45] 3.050172838266e-05 [GeV] -Cell[7,4] 5.5855809478089e-08 [GeV] -Cell[10,32] 0.00041626306411479 [GeV] -Cell[13,30] 0.010837388124016 [GeV] -Cell[8,0] 0.0020824541628223 [GeV] -Cell[9,39] 0.00086508530414233 [GeV] -Cell[9,45] 0.39087024398964 [GeV] -Cell[10,42] 0.00011510556902397 [GeV] -Cell[11,32] 4.4330408796668e-05 [GeV] -Cell[15,31] 1.7595687040739e-08 [GeV] -Cell[14,31] 5.339675498135e-07 [GeV] -Cell[13,31] 0.0011037992547434 [GeV] -Cell[12,31] 3.1210308196023e-05 [GeV] -Cell[15,30] 3.6357574913382e-08 [GeV] -Cell[13,25] 0.00044379838819202 [GeV] -Cell[12,30] 0.012205732944736 [GeV] -Cell[13,24] 1.5124067431316e-08 [GeV] -Cell[8,32] 2.0963459421182e-05 [GeV] -Cell[9,29] 5.1958689873572e-06 [GeV] -Cell[9,28] 3.3428641909268e-06 [GeV] -Cell[10,40] 3.8308001990117e-08 [GeV] -Cell[11,33] 0.0002306645776398 [GeV] -Cell[10,35] 2.0248325017747e-06 [GeV] -Cell[11,29] 1.084808517362e-07 [GeV] -Cell[10,43] 0.0037331317558777 [GeV] -Cell[14,7] 8.9528883648341e-05 [GeV] -Cell[9,43] 0.059669492464882 [GeV] -Cell[9,42] 0.00043704199321041 [GeV] -Cell[8,1] 0.0001295125563264 [GeV] -Cell[10,45] 0.11478787615888 [GeV] -Cell[10,0] 6.192709922891e-05 [GeV] -Cell[2,7] 1.0405557288323e-05 [GeV] -Cell[6,25] 1.0215444490314e-11 [GeV] -Cell[8,44] 0.0083894226451045 [GeV] -Cell[4,28] 2.4892836563595e-08 [GeV] -Cell[7,23] 1.3940495176939e-05 [GeV] -Cell[0,25] 0.00016304080863665 [GeV] -Cell[4,43] 1.1664812114191e-05 [GeV] -Cell[4,29] 2.4701638066063e-06 [GeV] -Cell[4,42] 0.00048902099073155 [GeV] -Cell[11,44] 3.1553936782984e-05 [GeV] -Cell[10,44] 0.031037110319143 [GeV] -Cell[9,44] 0.063337962045098 [GeV] -Cell[9,46] 0.0076160439552784 [GeV] -Cell[10,46] 0.0040937337365031 [GeV] -Cell[15,12] 0.004217859041215 [GeV] -Cell[11,30] 0.0032168794373924 [GeV] -Cell[16,11] 9.8647596314549e-07 [GeV] -Cell[10,39] 0.0016849144768448 [GeV] -Cell[6,27] 0.00017974917021138 [GeV] -Cell[5,27] 0.00068732486736508 [GeV] -Cell[9,47] 0.00058848216305944 [GeV] -Cell[5,28] 3.5791890695691e-10 [GeV] -Cell[5,29] 3.6027631722391e-10 [GeV] -Cell[6,26] 1.4560994077328e-07 [GeV] -Cell[14,30] 0.0016302671919843 [GeV] -### Total energy deposition in calorimeter by a source track in 64 cells : 0.72885894795561 (GeV) - -Source track ID 1773 (gamma,0.015859560263227[GeV]) at (453.63010932585,-210.28486372779,-430.35190013357) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[2,26] 0.00094227433156516 [GeV] -Cell[7,44] 0.01006687554528 [GeV] -Cell[12,18] 0.0004862903594684 [GeV] -Cell[6,26] 0.00065106262509629 [GeV] -### Total energy deposition in calorimeter by a source track in 4 cells : 0.01214650286141 (GeV) +Cell[17,7] 0.0015877157115974 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.0015877157115974 (GeV) -Source track ID 1774 (gamma,0.75885122891297[GeV]) at (497.51078036546,-49.829945014576,326.48051208436) +Source track ID 1841 (gamma,0.17435926984906[GeV]) at (-435.61886321422,245.43065418148,445.72699089158) Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[10,25] 0.00098518269730907 [GeV] -Cell[11,47] 0.67389016754675 [GeV] -Cell[11,27] 0.00036059662526326 [GeV] -Cell[12,47] 0.031263729868724 [GeV] -Cell[11,0] 0.00023994652949379 [GeV] -Cell[12,46] 0.017852861063384 [GeV] -Cell[11,44] 0.00012856456726453 [GeV] -Cell[13,36] 0.00052165991294371 [GeV] -Cell[11,46] 0.01868207779362 [GeV] -Cell[11,45] 0.0015858985635371 [GeV] -Cell[14,12] 0.0025051716948541 [GeV] -Cell[17,19] 0.00051099891 [GeV] -### Total energy deposition in calorimeter by a source track in 12 cells : 0.74852685577314 (GeV) - -Source track ID 1734 (mu+,0.31030355504175[GeV]) at (-406.35865950913,291.32909199382,1273.0283114654) +Cell[11,31] 0.00091079622491912 [GeV] +Cell[12,21] 0.0024721757884267 [GeV] +Cell[12,20] 0.15769832550321 [GeV] +Cell[13,21] 0.0010535481602016 [GeV] +Cell[12,19] 0.010881374215803 [GeV] +### Total energy deposition in calorimeter by a source track in 5 cells : 0.17301621989256 (GeV) + +Source track ID 1298 (pi+,0.2774526400768[GeV]) at (269.34309246403,421.25324751498,18.634147500099) Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[16,18] 0.20634994739702 [GeV] -Cell[16,17] 0.00041237109388435 [GeV] -Cell[17,18] 0.0077041666125546 [GeV] -Cell[16,19] 0.029624255616172 [GeV] -### Total energy deposition in calorimeter by a source track in 4 cells : 0.24409074071963 (GeV) +Cell[9,6] 0.0061481166411363 [GeV] +Cell[10,6] 0.084461275116626 [GeV] +Cell[10,7] 0.07437532164861 [GeV] +### Total energy deposition in calorimeter by a source track in 3 cells : 0.16498471340637 (GeV) -Source track ID 1543 (gamma,0.12620965025075[GeV]) at (-487.28250179457,-112.05250307254,703.88980972097) +Source track ID 1830 (gamma,0.67224858404432[GeV]) at (444.05232089305,-229.82066118932,-518.95899543657) Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[13,26] 0.0021148387729926 [GeV] -Cell[13,25] 0.11850122335659 [GeV] -Cell[14,26] 0.0023409164900567 [GeV] -Cell[13,5] 0.0032526716311134 [GeV] -### Total energy deposition in calorimeter by a source track in 4 cells : 0.12620965025075 (GeV) - -Source track ID 1622 (gamma,0.0036273080764543[GeV]) at (-48.963798573444,497.59677091924,94.953379041337) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[10,12] 0.0031163091664543 [GeV] -Cell[10,13] 0.00051099891 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.0036273080764543 (GeV) - -Source track ID 1631 (gamma,0.00017167346043659[GeV]) at (152.28952287452,-476.24353142342,38.250402492094) +Cell[8,10] 0.00044499462757513 [GeV] +Cell[7,13] 0.00052510046263103 [GeV] +Cell[7,45] 0.00051099891 [GeV] +Cell[7,43] 0.017865618023717 [GeV] +Cell[7,12] 0.00058660246387413 [GeV] +Cell[5,33] 0.00044095574770336 [GeV] +Cell[12,32] 0.0004861077100492 [GeV] +Cell[7,44] 0.61615551656244 [GeV] +Cell[6,23] 0.00047672955478327 [GeV] +Cell[5,21] 0.00043357238572577 [GeV] +Cell[7,1] 0.00019131615647491 [GeV] +Cell[6,43] 0.0022107076382977 [GeV] +Cell[8,2] 0.0020955397596366 [GeV] +Cell[10,11] 0.00051099891 [GeV] +Cell[6,46] 0.00088900886741982 [GeV] +Cell[6,44] 0.02511347384051 [GeV] +### Total energy deposition in calorimeter by a source track in 16 cells : 0.66893724162084 (GeV) + +Source track ID 1831 (gamma,0.13757172036947[GeV]) at (417.90942694144,-274.50266095883,-190.7460694291) Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[10,38] 0.00017167346043659 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00017167346043659 (GeV) - -Source track ID 1623 (gamma,0.00079077977488701[GeV]) at (52.915891744216,-497.19202366984,-94.402200935541) +Cell[9,30] 0.0017326139256003 [GeV] +Cell[8,43] 0.11932165286423 [GeV] +Cell[8,42] 0.0006368618607613 [GeV] +Cell[9,43] 0.013522445835841 [GeV] +Cell[9,42] 0.0016357735958938 [GeV] +### Total energy deposition in calorimeter by a source track in 5 cells : 0.13684934808232 (GeV) + +Source track ID 1826 (mu-,1.0063033389039[GeV]) at (487.64071183133,-110.48319403706,16.798865902533) Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[9,36] 0.00079077977488701 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00079077977488701 (GeV) - -Source track ID 1625 (gamma,0.000114547463042[GeV]) at (216.13446417857,-450.87236929561,-71.873379492908) +Cell[9,46] 0.008923834539467 [GeV] +Cell[10,47] 0.65415855215723 [GeV] +Cell[9,47] 0.00051099891 [GeV] +Cell[9,0] 0.00032866421641096 [GeV] +Cell[11,47] 0.025943344336949 [GeV] +Cell[11,0] 0.010430641851263 [GeV] +Cell[10,46] 0.24062525584751 [GeV] +Cell[10,0] 0.0087511700332127 [GeV] +### Total energy deposition in calorimeter by a source track in 8 cells : 0.94967246189204 (GeV) + +Source track ID 1744 (gamma,0.015859560263227[GeV]) at (453.63011751665,-210.28484605846,-430.35181310135) Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[9,39] 0.000114547463042 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.000114547463042 (GeV) +Cell[8,28] 0.0020004939963605 [GeV] +Cell[7,37] 0.00033720036706786 [GeV] +Cell[8,29] 0.00058141936232384 [GeV] +Cell[7,44] 0.011307090537535 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.014226204263287 (GeV) -Source track ID 1626 (gamma,0.00015946738178366[GeV]) at (484.58882990713,123.18143500236,159.31626797282) +Source track ID 1750 (gamma,0.032667483034818[GeV]) at (499.83938247402,-12.672479157087,327.37294388965) Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[10,1] 0.00015946738178366 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00015946738178366 (GeV) +Cell[11,47] 0.032156484124818 [GeV] +Cell[11,0] 0.00051099891 [GeV] +### Total energy deposition in calorimeter by a source track in 2 cells : 0.032667483034818 (GeV) -Source track ID 1547 (gamma,0.0031517185261183[GeV]) at (-80.484765295386,-493.47968808792,87.23264627721) +Source track ID 1751 (gamma,0.37162921903964[GeV]) at (499.86278320547,-11.713153549775,326.95892854964) Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[10,34] 0.0031517185261183 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0031517185261183 (GeV) - -Source track ID 1548 (gamma,4.1454880613748e-05[GeV]) at (-80.1805931725,-493.52920124194,85.847805686242) +Cell[10,23] 0.00024297642828206 [GeV] +Cell[10,26] 0.00051099891 [GeV] +Cell[9,7] 0.0014516557984489 [GeV] +Cell[12,23] 0.00041767465595503 [GeV] +Cell[12,0] 0.00051099891 [GeV] +Cell[12,47] 0.0064461660735079 [GeV] +Cell[9,24] 0.00016388942864851 [GeV] +Cell[11,47] 0.33405804097187 [GeV] +Cell[11,0] 0.025901988259184 [GeV] +Cell[18,25] 0.00089138528213605 [GeV] +### Total energy deposition in calorimeter by a source track in 10 cells : 0.37059577471803 (GeV) + +Source track ID 1753 (gamma,0.00032279493065118[GeV]) at (498.82167619801,34.306491441182,336.74719098131) Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[10,34] 4.1454880613748e-05 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 4.1454880613748e-05 (GeV) +Cell[11,0] 0.00032279493065118 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00032279493065118 (GeV) -Source track ID 1615 (gamma,5.0358854128795e-05[GeV]) at (-82.710923545741,-493.11145101915,174.35931784355) +Source track ID 1754 (gamma,0.00030208582627433[GeV]) at (499.99152585924,-2.9110254121274,310.19111936438) Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[10,34] 5.0358854128795e-05 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 5.0358854128795e-05 (GeV) +Cell[11,47] 0.00030208582627433 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00030208582627433 (GeV) -Source track ID 1552 (gamma,0.00048874186255038[GeV]) at (492.5735416408,-85.856310632613,599.53554275727) +Source track ID 1746 (e-,0.093339067929964[GeV]) at (476.71808489098,150.7974387643,1048.2324077225) Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[13,46] 0.00048874186255038 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00048874186255038 (GeV) - -Source track ID 1557 (gamma,5.9963747441928e-05[GeV]) at (421.24250140635,269.3598986652,170.60575909189) +Cell[15,37] 0.00061513079529764 [GeV] +Cell[15,5] 0.00048447719598666 [GeV] +Cell[15,45] 0.00045381211626726 [GeV] +Cell[15,3] 0.00059100833302036 [GeV] +Cell[13,35] 0.00024105023134127 [GeV] +Cell[16,17] 0.00030345827779343 [GeV] +Cell[16,15] 0.001229160509492 [GeV] +Cell[15,2] 0.085062570011468 [GeV] +Cell[13,9] 0.00051099891 [GeV] +Cell[13,24] 0.00030596168789751 [GeV] +Cell[15,7] 0.00099285257207364 [GeV] +Cell[15,11] 0.002037588379326 [GeV] +### Total energy deposition in calorimeter by a source track in 12 cells : 0.092828069019964 (GeV) + +Source track ID 1745 (gamma,0.24827189575205[GeV]) at (496.16172359168,-61.834812545484,330.00290212275) Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[10,4] 5.9963747441928e-05 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 5.9963747441928e-05 (GeV) - -Source track ID 1560 (gamma,0.0022661432393221[GeV]) at (-153.61750010846,-475.81683835319,269.22668454666) +Cell[12,25] 0.0023775843963404 [GeV] +Cell[12,46] 0.0024543052883068 [GeV] +Cell[12,47] 0.00095371867674121 [GeV] +Cell[11,46] 0.032180027404538 [GeV] +Cell[11,47] 0.2085587814825 [GeV] +Cell[16,28] 0.00036221489674712 [GeV] +Cell[15,28] 0.0013852636068748 [GeV] +### Total energy deposition in calorimeter by a source track in 7 cells : 0.24827189575205 (GeV) + +Source track ID 1588 (gamma,0.12620965025075[GeV]) at (-487.28250253471,-112.05249985389,703.88980969419) Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[11,21] 0.00020299249636457 [GeV] -Cell[11,33] 0.0018627356872715 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.0020657281836361 (GeV) - -Source track ID 1562 (gamma,0.0044452961708664[GeV]) at (-477.30726223789,148.92205147313,527.77959052234) +Cell[13,26] 0.0062702130409763 [GeV] +Cell[14,25] 0.00032831318168978 [GeV] +Cell[13,25] 0.1175146788384 [GeV] +Cell[14,26] 0.00054465895483192 [GeV] +Cell[14,24] 0.001185119378235 [GeV] +Cell[13,24] 0.00036666685661324 [GeV] +### Total energy deposition in calorimeter by a source track in 6 cells : 0.12620965025075 (GeV) + +Source track ID 1589 (gamma,0.088297327870564[GeV]) at (61.272154876703,-496.23152160737,76.525341183416) Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[12,21] 0.0044452961708664 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.0044452961708664 (GeV) - -Source track ID 1567 (gamma,0.00018359122365919[GeV]) at (310.27072739056,392.08682166649,-64.712701433858) +Cell[10,38] 0.0033001938434363 [GeV] +Cell[12,28] 0.0021812496297442 [GeV] +Cell[10,37] 0.01725830145999 [GeV] +Cell[9,25] 0.00037953268785445 [GeV] +Cell[10,36] 0.062508054564548 [GeV] +Cell[10,35] 0.0026303235770445 [GeV] +### Total energy deposition in calorimeter by a source track in 6 cells : 0.088257655762617 (GeV) + +Source track ID 1303 (pi+,0.88671699263972[GeV]) at (5.2409797361793,499.97253137688,750.34255870944) Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[9,6] 0.00018359122365919 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.00018359122365919 (GeV) - -Source track ID 1585 (e-,0.0010755668856795[GeV]) at (-53.727148095048,-497.10501260556,1290.6908568378) +Cell[9,41] 4.6449483197648e-06 [GeV] +Cell[15,33] 2.51770505065e-05 [GeV] +Cell[10,20] 0.00010819057782192 [GeV] +Cell[11,8] 3.7054496947576e-05 [GeV] +Cell[15,32] 8.1569440226303e-08 [GeV] +Cell[16,7] 0.00033135892129212 [GeV] +Cell[15,5] 2.4357282294659e-05 [GeV] +Cell[13,44] 3.442891851887e-05 [GeV] +Cell[11,21] 0.0013246503040897 [GeV] +Cell[11,19] 0.00042851383590971 [GeV] +Cell[11,37] 0.00031220346765076 [GeV] +Cell[11,38] 1.8850849511409e-06 [GeV] +Cell[11,20] 0.00088468209562501 [GeV] +Cell[11,45] 1.7208333709277e-05 [GeV] +Cell[14,13] 0.0042443444308199 [GeV] +Cell[14,12] 0.072439668953271 [GeV] +Cell[12,19] 8.6862216596728e-07 [GeV] +Cell[10,8] 7.4106169631705e-07 [GeV] +Cell[16,6] 0.00040229580157095 [GeV] +Cell[13,11] 0.066411728778265 [GeV] +Cell[14,9] 0.0041953129383473 [GeV] +Cell[14,8] 0.012115458993781 [GeV] +Cell[13,45] 0.0023277608764234 [GeV] +Cell[13,46] 0.00098077232879635 [GeV] +Cell[14,46] 5.10801571927e-05 [GeV] +Cell[15,0] 0.00079493866734974 [GeV] +Cell[15,34] 0.00065167106301692 [GeV] +Cell[14,14] 0.00070872028340432 [GeV] +Cell[14,7] 0.00026750644848146 [GeV] +Cell[14,42] 8.264469797723e-07 [GeV] +Cell[13,12] 0.00021505794857774 [GeV] +Cell[13,10] 0.00040451025698576 [GeV] +Cell[14,10] 0.16954899528983 [GeV] +Cell[16,13] 0.00027316910052241 [GeV] +Cell[15,7] 0.0019568698654317 [GeV] +Cell[10,7] 1.4275766152423e-06 [GeV] +Cell[14,22] 1.279563488788e-05 [GeV] +Cell[13,13] 1.1392487862736e-05 [GeV] +Cell[13,16] 0.0011585324711713 [GeV] +Cell[14,16] 2.0903259201077e-07 [GeV] +Cell[14,15] 2.6924768550089e-05 [GeV] +Cell[14,23] 0.0015887445258762 [GeV] +Cell[15,12] 0.0013010810875808 [GeV] +Cell[14,11] 0.22445933997859 [GeV] +Cell[15,11] 0.0057287457520837 [GeV] +Cell[15,13] 1.1570735077839e-05 [GeV] +Cell[15,10] 0.0006574011634644 [GeV] +Cell[13,19] 2.1010765669871e-07 [GeV] +Cell[9,43] 2.3739408447909e-08 [GeV] +Cell[9,42] 4.3575314924738e-06 [GeV] +Cell[19,1] 4.1335697460454e-06 [GeV] +Cell[16,23] 4.2532493243925e-06 [GeV] +Cell[17,1] 5.518172198208e-06 [GeV] +Cell[13,30] 0.00016087374438189 [GeV] +Cell[17,16] 2.8739731526002e-05 [GeV] +Cell[10,21] 3.1267270029275e-05 [GeV] +Cell[17,7] 5.8611724816728e-06 [GeV] +Cell[13,15] 0.00013362897367551 [GeV] +### Total energy deposition in calorimeter by a source track in 58 cells : 0.57686376767626 (GeV) + +Source track ID 1397 (pi-,0.65425120388105[GeV]) at (-90.025203018196,-491.82869255619,1128.1198078915) Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[16,29] 2.3758655171579e-05 [GeV] -Cell[16,35] 0.00033048752065036 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.00035424617582193 (GeV) - -Source track ID 1546 (e+,0.016631061012216[GeV]) at (195.92516017357,-460.01449065324,1155.9891185839) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[15,32] 0.00039452457200557 [GeV] -Cell[15,38] 0.00068666743254879 [GeV] -Cell[15,39] 0.016060867917661 [GeV] -### Total energy deposition in calorimeter by a source track in 3 cells : 0.017142059922216 (GeV) - -Source track ID 1281 (pi+,0.88650811977773[GeV]) at (4.6669319912126,499.97821927139,750.32998524355) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[11,42] 8.6794952512719e-06 [GeV] -Cell[6,40] 7.0922487350344e-07 [GeV] -Cell[6,41] 1.3941063207312e-07 [GeV] -Cell[13,30] 0.0011961688397244 [GeV] -Cell[14,44] 0.00038181955437835 [GeV] -Cell[14,43] 0.00092592686075591 [GeV] -Cell[15,9] 2.071354644977e-05 [GeV] -Cell[16,13] 2.9389027872639e-08 [GeV] -Cell[14,1] 1.7253031168366e-05 [GeV] -Cell[14,16] 0.00023886081205762 [GeV] -Cell[12,29] 5.711402813813e-05 [GeV] -Cell[12,30] 0.00012941580539564 [GeV] -Cell[11,24] 0.0009751101087017 [GeV] -Cell[14,9] 2.6337258543208e-05 [GeV] -Cell[13,24] 2.1544151677517e-05 [GeV] -Cell[12,9] 1.778473961167e-08 [GeV] -Cell[14,8] 0.0001147493076611 [GeV] -Cell[13,10] 0.00017700501705144 [GeV] -Cell[9,18] 0.00051919843165774 [GeV] -Cell[9,17] 7.2315793235134e-05 [GeV] -Cell[12,10] 7.5419287895784e-08 [GeV] -Cell[15,14] 0.0049767286254455 [GeV] -Cell[13,11] 0.07512247133486 [GeV] -Cell[13,46] 9.8751421273846e-07 [GeV] -Cell[18,44] 2.1757189131222e-06 [GeV] -Cell[12,43] 7.033745321678e-06 [GeV] -Cell[13,14] 2.5448432578514e-05 [GeV] -Cell[13,7] 4.1667206096463e-06 [GeV] -Cell[15,33] 4.5923981815577e-08 [GeV] -Cell[14,38] 0.00056193605705641 [GeV] -Cell[12,46] 0.0015342336340404 [GeV] -Cell[14,14] 0.0045949914999656 [GeV] -Cell[13,44] 0.0010378412003328 [GeV] -Cell[13,45] 7.1229555942409e-09 [GeV] -Cell[15,13] 0.20412893093416 [GeV] -Cell[15,12] 0.0017734131815849 [GeV] -Cell[15,11] 0.00047053274805103 [GeV] -Cell[14,13] 0.02180609099383 [GeV] -Cell[13,12] 0.0032460198647605 [GeV] -Cell[14,12] 0.01887756173062 [GeV] -Cell[14,39] 0.00020608990092842 [GeV] -Cell[16,12] 1.1516217693156e-05 [GeV] -Cell[15,15] 0.00090882383084738 [GeV] -Cell[14,15] 0.00051610874600101 [GeV] -Cell[16,25] 2.6159395929426e-09 [GeV] -Cell[14,6] 2.2765016183257e-10 [GeV] -Cell[13,13] 0.00041151099388981 [GeV] -Cell[15,43] 1.5808143729146e-06 [GeV] -Cell[14,10] 0.0060052661214329 [GeV] -Cell[14,4] 3.5697700805031e-05 [GeV] -Cell[5,26] 2.1016143582528e-05 [GeV] -Cell[14,11] 0.1956163749931 [GeV] -Cell[16,14] 0.00099796647183491 [GeV] -Cell[6,13] 0.0013199745033741 [GeV] -Cell[6,11] 1.7796916275984e-05 [GeV] -Cell[6,12] 0.00048532962499735 [GeV] -Cell[6,26] 6.2653403147124e-06 [GeV] -Cell[14,30] 2.2033345885575e-09 [GeV] -### Total energy deposition in calorimeter by a source track in 58 cells : 0.54961512362006 (GeV) - -Source track ID 1392 (pi-,0.65419728581392[GeV]) at (-90.307826285681,-491.77687675566,1126.9967832321) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[8,7] 0.0022243756906138 [GeV] -Cell[8,6] 1.6120359260867e-05 [GeV] -Cell[8,5] 0.00022833756336399 [GeV] -Cell[8,26] 0.00012845911358329 [GeV] -Cell[14,33] 7.1705526988126e-05 [GeV] -Cell[11,36] 2.0840891465923e-09 [GeV] -Cell[8,25] 9.5149642402248e-06 [GeV] -Cell[14,32] 1.8252453969581e-08 [GeV] -Cell[15,32] 6.5781540736339e-05 [GeV] -Cell[14,44] 0.001244388199462 [GeV] -Cell[14,43] 5.1906100707129e-05 [GeV] -Cell[16,4] 5.4030653263908e-06 [GeV] -Cell[12,39] 0.00030712898466891 [GeV] -Cell[11,10] 3.4295686113182e-05 [GeV] -Cell[11,34] 0.00032591224915291 [GeV] -Cell[16,40] 5.6019052863121e-10 [GeV] -Cell[11,35] 0.00017512495639232 [GeV] -Cell[15,7] 7.1510439738631e-09 [GeV] -Cell[13,14] 0.00010972070445962 [GeV] -Cell[12,14] 0.0011451721386507 [GeV] -Cell[16,23] 0.001117391720074 [GeV] -Cell[1,11] 0.0025677970413557 [GeV] -Cell[15,47] 0.00048042138436467 [GeV] -Cell[15,0] 0.0017375900248726 [GeV] -Cell[11,9] 0.00035200270098028 [GeV] -Cell[15,33] 0.0059040785862351 [GeV] -Cell[12,0] 0.0026467093995605 [GeV] -Cell[12,40] 2.8408427486625e-05 [GeV] -Cell[15,5] 0.00025498824936517 [GeV] -Cell[12,15] 4.6539454551748e-05 [GeV] -Cell[15,36] 0.0014625041820146 [GeV] -Cell[16,36] 0.0001815890166107 [GeV] -Cell[16,35] 0.0031705311957412 [GeV] -Cell[15,6] 0.0016957706294738 [GeV] -Cell[15,34] 0.30342036414616 [GeV] -Cell[15,35] 0.10462698684003 [GeV] -Cell[16,33] 5.691051554777e-06 [GeV] -Cell[14,34] 0.0038068678426165 [GeV] -Cell[15,23] 0.0015386052268318 [GeV] -Cell[15,22] 5.200332188906e-07 [GeV] -Cell[16,22] 4.4679118930617e-05 [GeV] -Cell[17,25] 5.2846466132905e-06 [GeV] -Cell[15,40] 0.001400862449511 [GeV] -Cell[14,6] 0.00018105433788696 [GeV] -Cell[15,37] 0.0020316890334035 [GeV] -Cell[15,39] 8.8274828158319e-10 [GeV] -Cell[14,10] 1.4779094344703e-05 [GeV] -Cell[14,45] 1.0461979513821e-08 [GeV] -Cell[14,11] 2.2792893170845e-05 [GeV] -Cell[15,10] 6.5118884624098e-05 [GeV] -Cell[7,26] 1.0249066981487e-05 [GeV] -Cell[16,34] 0.00064365121779883 [GeV] -### Total energy deposition in calorimeter by a source track in 52 cells : 0.44560890413259 (GeV) - -Source track ID 1291 (e-,0.00067654045077716[GeV]) at (-423.53106870903,265.74693570799,1443.5621813196) -Original primary track ID 41 (unknown,2.6699951779791[GeV]) -Cell[17,21] 0.00012184605825118 [GeV] -Cell[17,19] 5.9293041703358e-06 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.00012777536242152 (GeV) - -Source track ID 1272 (gamma,0.23818895051853[GeV]) at (-24.111052240173,-499.41831880686,-17.911064377671) +Cell[15,35] 5.2586894499882e-06 [GeV] +Cell[15,32] 0.00020858033733459 [GeV] +Cell[19,17] 0.00029791007214669 [GeV] +Cell[15,37] 0.00010927277012161 [GeV] +Cell[12,21] 0.00021286326389111 [GeV] +Cell[12,20] 0.00065473417578369 [GeV] +Cell[16,45] 0.00084645836985294 [GeV] +Cell[17,35] 2.1193687571213e-06 [GeV] +Cell[14,45] 4.8118558879651e-09 [GeV] +Cell[14,46] 0.00029011490912785 [GeV] +Cell[15,34] 0.092788576803032 [GeV] +Cell[15,36] 2.1900593767668e-05 [GeV] +Cell[16,36] 0.00012025619440658 [GeV] +Cell[16,34] 0.0084647414349685 [GeV] +Cell[16,35] 0.30569070348769 [GeV] +Cell[16,0] 0.0037970634292918 [GeV] +Cell[16,46] 0.0028746082626546 [GeV] +Cell[16,42] 0.0016617530511443 [GeV] +Cell[13,10] 6.4607593230903e-10 [GeV] +Cell[15,7] 0.00025206202720734 [GeV] +Cell[16,1] 2.6829652063043e-06 [GeV] +Cell[19,19] 0.00033985655257934 [GeV] +Cell[19,18] 0.0024288920038866 [GeV] +Cell[16,43] 5.2560719803409e-05 [GeV] +Cell[13,16] 1.5533560940639e-08 [GeV] +Cell[14,16] 1.2835624738727e-07 [GeV] +Cell[18,17] 0.0013667260889259 [GeV] +Cell[17,47] 0.0010280411066115 [GeV] +Cell[17,45] 0.0026005479046959 [GeV] +Cell[17,46] 0.00099552514007246 [GeV] +Cell[17,1] 0.0018452735659494 [GeV] +Cell[17,0] 0.041583952418564 [GeV] +Cell[18,16] 0.0019568621690253 [GeV] +Cell[17,7] 1.5410120540764e-06 [GeV] +Cell[19,16] 2.1938121983567e-07 [GeV] +Cell[18,28] 0.0024257037802285 [GeV] +Cell[17,2] 4.1190844989615e-05 [GeV] +Cell[17,43] 0.00051936878550441 [GeV] +### Total energy deposition in calorimeter by a source track in 38 cells : 0.47548807102769 (GeV) + +Source track ID 1294 (gamma,0.23818895051853[GeV]) at (-24.111052240173,-499.41831880686,-17.911064377671) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[9,36] 0.007317316903237 [GeV] -Cell[10,34] 0.00017143033977216 [GeV] -Cell[10,35] 0.0091502456374287 [GeV] -Cell[10,36] 0.00075549869777809 [GeV] -Cell[9,35] 0.22079445894032 [GeV] -### Total energy deposition in calorimeter by a source track in 5 cells : 0.23818895051853 (GeV) - -Source track ID 1273 (gamma,0.33413532464401[GeV]) at (245.8933673121,435.35784351717,97.500310757389) +Cell[6,9] 0.00051099891 [GeV] +Cell[9,35] 0.22089060681089 [GeV] +Cell[12,14] 0.00014891898947106 [GeV] +Cell[9,34] 0.0023720364034794 [GeV] +Cell[9,36] 0.00344183385133 [GeV] +Cell[10,36] 0.00064186444495697 [GeV] +Cell[10,35] 0.010169717620936 [GeV] +### Total energy deposition in calorimeter by a source track in 7 cells : 0.23817597703106 (GeV) + +Source track ID 1295 (gamma,0.33413532464401[GeV]) at (245.8933673121,435.35784351717,97.500310757389) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[11,6] 6.2946771561201e-07 [GeV] -Cell[7,33] 0.00019592281000891 [GeV] -Cell[10,8] 0.25235695265111 [GeV] -Cell[6,34] 0.00076573281661485 [GeV] -Cell[10,6] 0.00012701626097578 [GeV] -Cell[11,7] 0.00054232827546097 [GeV] -Cell[10,7] 0.063406835852142 [GeV] -Cell[11,8] 0.0057416119090556 [GeV] -Cell[14,3] 0.00018591169389788 [GeV] -Cell[10,9] 0.00061571268881082 [GeV] -### Total energy deposition in calorimeter by a source track in 10 cells : 0.32393865442579 (GeV) - -Source track ID 1174 (pi-,1.7948881455223[GeV]) at (442.12332707063,-233.51009327221,-1861.7671497105) +Cell[9,8] 0.0002108597750624 [GeV] +Cell[12,1] 0.00093150985780741 [GeV] +Cell[10,9] 0.00034112315679043 [GeV] +Cell[10,8] 0.28791159590597 [GeV] +Cell[10,6] 0.0033268696655507 [GeV] +Cell[10,36] 0.0092599482504741 [GeV] +Cell[10,35] 0.0001910845906512 [GeV] +Cell[10,7] 0.031177125769034 [GeV] +### Total energy deposition in calorimeter by a source track in 8 cells : 0.33335011697134 (GeV) + +Source track ID 1215 (pi-,1.7949828695578[GeV]) at (442.18875878411,-233.38616412497,-1860.9843222831) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[0,44] 0.16659845077083 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.16659845077083 (GeV) - -Source track ID 901 (gamma,0.16498092085606[GeV]) at (-167.27758047616,471.18808460109,-1116.9837501686) +Cell[8,7] 3.3145188353956e-09 [GeV] +Cell[3,42] 0.0003376362583665 [GeV] +Cell[8,6] 1.7032237303738e-07 [GeV] +Cell[7,6] 0.0014747828224897 [GeV] +Cell[0,14] 0.00055131860114842 [GeV] +Cell[3,27] 2.0185252069496e-05 [GeV] +Cell[7,7] 0.00021557960546659 [GeV] +Cell[1,45] 3.7542279187619e-09 [GeV] +Cell[0,42] 0.00063733887307899 [GeV] +Cell[3,8] 0.0029502643984665 [GeV] +Cell[2,23] 0.00095855461618415 [GeV] +Cell[0,1] 6.8474566943678e-05 [GeV] +Cell[3,30] 1.3557710626628e-06 [GeV] +Cell[1,47] 7.3885950259864e-06 [GeV] +Cell[2,27] 4.9422819825758e-05 [GeV] +Cell[1,25] 7.6148694461153e-09 [GeV] +Cell[0,7] 3.9735197233313e-05 [GeV] +Cell[1,46] 0.00029884125750038 [GeV] +Cell[1,21] 0.00037717891491695 [GeV] +Cell[2,21] 0.0018654371056164 [GeV] +Cell[0,9] 7.9040205491765e-11 [GeV] +Cell[0,10] 0.00059010044188653 [GeV] +Cell[1,26] 0.0055909113793053 [GeV] +Cell[1,39] 1.5148050992366e-05 [GeV] +Cell[0,15] 0.00040227458134696 [GeV] +Cell[1,42] 4.4563350221551e-05 [GeV] +Cell[0,44] 0.51449250262688 [GeV] +Cell[4,7] 1.4999715613158e-05 [GeV] +Cell[3,33] 0.00064747250404139 [GeV] +Cell[0,8] 0.00056552330983538 [GeV] +Cell[3,31] 4.5637939093012e-05 [GeV] +Cell[3,44] 2.2729246802555e-07 [GeV] +Cell[0,13] 0.0020782519734231 [GeV] +Cell[2,44] 7.0977579509872e-06 [GeV] +Cell[3,43] 0.0029216614142435 [GeV] +Cell[1,43] 0.0072934370960007 [GeV] +Cell[0,40] 0.0013580170902861 [GeV] +Cell[1,40] 1.670427109616e-06 [GeV] +Cell[1,3] 0.0017746667882441 [GeV] +Cell[0,12] 9.7977674449794e-06 [GeV] +Cell[0,45] 0.066615390829742 [GeV] +Cell[3,32] 0.0011392286240175 [GeV] +Cell[3,7] 2.5581757072359e-05 [GeV] +Cell[2,34] 0.00061935328525652 [GeV] +Cell[1,12] 0.00051403081814351 [GeV] +Cell[0,11] 0.0013573132161306 [GeV] +Cell[1,13] 0.00017975089944935 [GeV] +Cell[1,14] 0.0065437714798958 [GeV] +Cell[1,15] 2.3105022788513e-05 [GeV] +Cell[0,43] 0.0071923744613872 [GeV] +Cell[1,6] 3.401655942298e-06 [GeV] +Cell[4,9] 9.5019470834814e-05 [GeV] +Cell[3,23] 3.3540765116413e-08 [GeV] +Cell[2,10] 9.3724325639588e-05 [GeV] +Cell[3,24] 5.4911525133548e-05 [GeV] +Cell[2,22] 0.0019194112510319 [GeV] +Cell[7,19] 2.6666501071304e-08 [GeV] +Cell[4,8] 0.00046328291697125 [GeV] +Cell[3,40] 2.4469872878399e-06 [GeV] +Cell[1,5] 0.00044637401452269 [GeV] +Cell[2,36] 5.197326693451e-05 [GeV] +Cell[0,5] 2.3800754861441e-05 [GeV] +Cell[0,3] 0.0037865255827566 [GeV] +Cell[0,4] 0.049149647729955 [GeV] +Cell[0,46] 0.0006104641158305 [GeV] +Cell[0,2] 0.0032878298646092 [GeV] +Cell[1,44] 0.0018149941754963 [GeV] +### Total energy deposition in calorimeter by a source track in 67 cells : 0.69372140948576 (GeV) + +Source track ID 892 (gamma,0.16498092085606[GeV]) at (-167.27757363521,471.18808702971,-1116.9834881244) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[3,14] 0.0028666808451888 [GeV] -Cell[4,14] 0.15859120170027 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.16145788254546 (GeV) - -Source track ID 834 (gamma,0.025785962614609[GeV]) at (-499.85155967903,12.182704397881,-421.85992048135) +Cell[10,41] 0.00027541950957185 [GeV] +Cell[7,39] 0.00051099891 [GeV] +Cell[1,46] 0.00051099891 [GeV] +Cell[2,44] 0.00046518331610735 [GeV] +Cell[4,13] 0.0024582315241314 [GeV] +Cell[3,32] 0.00051099891 [GeV] +Cell[4,14] 0.14510329142549 [GeV] +Cell[4,15] 0.0039607413042749 [GeV] +Cell[3,14] 0.010192397053023 [GeV] +Cell[4,10] 0.00051244794425264 [GeV] +Cell[5,23] 0.00032405353177879 [GeV] +### Total energy deposition in calorimeter by a source track in 11 cells : 0.16482476233863 (GeV) + +Source track ID 809 (gamma,0.025785962614609[GeV]) at (-499.85156007047,12.182688336877,-421.85999289625) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[7,22] 0.00017218385250655 [GeV] -Cell[7,23] 0.024156668403327 [GeV] -Cell[3,0] 0.00073672762542698 [GeV] -Cell[3,7] 0.00024792209147632 [GeV] -### Total energy deposition in calorimeter by a source track in 4 cells : 0.025313501972737 (GeV) +Cell[7,23] 0.022621004131869 [GeV] +Cell[7,24] 0.0031649584827398 [GeV] +### Total energy deposition in calorimeter by a source track in 2 cells : 0.025785962614609 (GeV) -Source track ID 835 (gamma,0.77353931528222[GeV]) at (193.22390224407,-461.15563923861,-1884.3170186459) +Source track ID 810 (gamma,0.77353931528222[GeV]) at (193.22390077208,-461.15563985538,-1884.3170228156) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[1,20] 0.00051099891 [GeV] -Cell[1,16] 0.00051099891 [GeV] -Cell[1,15] 0.00051099891 [GeV] -Cell[0,16] 0.00046421838620187 [GeV] -Cell[0,38] 0.14665808814638 [GeV] -Cell[0,39] 0.57204888128278 [GeV] -Cell[0,27] 0.00053228276731848 [GeV] -Cell[3,13] 0.00040821936220519 [GeV] -Cell[1,24] 0.00051099891 [GeV] -Cell[1,0] 0.0010362553557262 [GeV] -Cell[2,6] 0.00040899857732267 [GeV] -### Total energy deposition in calorimeter by a source track in 11 cells : 0.72360093951793 (GeV) - -Source track ID 808 (pi+,0.23588048416831[GeV]) at (50.364047471026,497.45699585224,-1621.9652876219) +Cell[0,14] 0.0036914810221005 [GeV] +Cell[12,11] 9.3838401974004e-05 [GeV] +Cell[5,31] 0.00010905566132707 [GeV] +Cell[0,47] 0.00088117875668384 [GeV] +Cell[0,22] 0.00051099891 [GeV] +Cell[0,31] 0.00051099891 [GeV] +Cell[1,7] 0.00051099891 [GeV] +Cell[0,38] 0.17476942904794 [GeV] +Cell[0,39] 0.56150424086147 [GeV] +Cell[2,5] 0.0015306521363189 [GeV] +Cell[2,6] 0.0005679870831282 [GeV] +Cell[2,22] 0.0025873062440841 [GeV] +Cell[1,4] 0.00055707764861209 [GeV] +Cell[0,46] 0.00022098712027405 [GeV] +### Total energy deposition in calorimeter by a source track in 14 cells : 0.74804623071391 (GeV) + +Source track ID 766 (pi+,0.23581049055487[GeV]) at (48.996734101385,497.59352894446,-1627.0338233915) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[1,11] 0.13611162947321 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.13611162947321 (GeV) +Cell[1,10] 0.0030216472812706 [GeV] +Cell[1,11] 0.14429465282296 [GeV] +### Total energy deposition in calorimeter by a source track in 2 cells : 0.14731630010423 (GeV) -Source track ID 805 (gamma,0.59980090891317[GeV]) at (255.70125208456,-429.67065257286,-1133.3038146646) +Source track ID 763 (gamma,0.59980090891317[GeV]) at (255.70125320366,-429.67065190688,-1133.3038203218) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[7,21] 0.0011367496072721 [GeV] -Cell[3,38] 0.00075536870449028 [GeV] -Cell[4,22] 0.0021285481787699 [GeV] -Cell[1,27] 0.000110547424113 [GeV] -Cell[4,40] 0.47511692886318 [GeV] -Cell[4,25] 0.00051099891 [GeV] -Cell[1,20] 0.0054273784783758 [GeV] -Cell[1,19] 0.00081653870464718 [GeV] -Cell[2,7] 0.0011899129242904 [GeV] -Cell[5,20] 0.00051099891 [GeV] -Cell[1,26] 0.0020828519490446 [GeV] -Cell[3,39] 0.020691547285753 [GeV] -Cell[3,40] 0.02155795955852 [GeV] -Cell[2,33] 0.00087509033880883 [GeV] -Cell[3,45] 0.0016321938363018 [GeV] -Cell[4,38] 0.0015134201123676 [GeV] -Cell[4,39] 0.060391477732253 [GeV] -Cell[6,5] 0.00054702263036775 [GeV] -### Total energy deposition in calorimeter by a source track in 18 cells : 0.59699553414856 (GeV) - -Source track ID 806 (gamma,0.053266099197347[GeV]) at (183.994450726,464.91509128231,-1027.4556380504) +Cell[8,15] 0.00051099891 [GeV] +Cell[3,38] 0.00058402374888557 [GeV] +Cell[5,31] 0.00040330099737404 [GeV] +Cell[4,39] 0.04442706353256 [GeV] +Cell[4,40] 0.50873015989105 [GeV] +Cell[8,19] 0.00051099891 [GeV] +Cell[6,15] 0.00051099891 [GeV] +Cell[5,30] 0.00085378149039208 [GeV] +Cell[1,11] 0.00074578924705301 [GeV] +Cell[5,46] 0.0012516903045541 [GeV] +Cell[3,41] 0.00034195411444234 [GeV] +Cell[4,22] 0.00076340081843189 [GeV] +Cell[7,18] 0.0013019341408697 [GeV] +Cell[8,18] 0.00035637266868011 [GeV] +Cell[8,3] 0.00092695872181846 [GeV] +Cell[4,41] 0.0034053365246303 [GeV] +Cell[3,40] 0.028917095819247 [GeV] +Cell[3,39] 0.0036262904066243 [GeV] +Cell[4,38] 0.00022269311053451 [GeV] +### Total energy deposition in calorimeter by a source track in 19 cells : 0.59839084226714 (GeV) + +Source track ID 764 (gamma,0.053266099197347[GeV]) at (183.99446330402,464.91508630444,-1027.4556982223) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[1,17] 0.0012434032599926 [GeV] -Cell[4,9] 0.052022695937355 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.053266099197347 (GeV) +Cell[0,18] 0.0048274711110816 [GeV] +Cell[4,9] 0.046750012155698 [GeV] +Cell[4,10] 0.00064390689505254 [GeV] +Cell[2,42] 0.00070413175614128 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.052925521917973 (GeV) -Source track ID 793 (gamma,0.39597382458922[GeV]) at (-372.59430051272,-333.42688437713,-1802.3851738898) +Source track ID 761 (gamma,0.39597382458922[GeV]) at (-372.59430026749,-333.42688465116,-1802.3851769964) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[4,5] 0.00051099891 [GeV] -Cell[2,37] 0.0010008355609361 [GeV] -Cell[1,13] 0.00063167850189391 [GeV] -Cell[0,21] 0.006586248122639 [GeV] -Cell[1,35] 0.0017675137626689 [GeV] -Cell[0,40] 0.0019200709018369 [GeV] -Cell[0,30] 0.0014718640500625 [GeV] -Cell[0,29] 0.32517959738406 [GeV] -Cell[0,25] 0.0034699233570493 [GeV] -Cell[0,27] 0.0012603325013962 [GeV] -Cell[2,18] 0.00037595467071832 [GeV] -Cell[0,4] 0.00067673493875919 [GeV] -Cell[0,31] 0.0034288076801288 [GeV] -Cell[1,30] 0.00030468989943539 [GeV] -Cell[1,12] 0.00041583394464195 [GeV] -Cell[4,46] 0.00046738604623128 [GeV] -Cell[2,41] 0.0040695833429103 [GeV] -Cell[4,3] 0.00043668254071397 [GeV] -Cell[1,46] 0.00010613802845284 [GeV] -### Total energy deposition in calorimeter by a source track in 19 cells : 0.35408087414454 (GeV) - -Source track ID 794 (gamma,0.006039402639882[GeV]) at (452.75208080878,212.16869072348,-153.90862082248) +Cell[1,29] 0.001649956708763 [GeV] +Cell[0,30] 0.0042746698981901 [GeV] +Cell[0,28] 0.00635068574587 [GeV] +Cell[1,20] 0.00041494042321281 [GeV] +Cell[0,29] 0.3780736066942 [GeV] +Cell[0,26] 0.00039284434405519 [GeV] +Cell[1,28] 0.00049116017598304 [GeV] +Cell[2,20] 0.00057179342908743 [GeV] +### Total energy deposition in calorimeter by a source track in 8 cells : 0.39221965741936 (GeV) + +Source track ID 762 (gamma,0.02130681471934[GeV]) at (476.42903517303,151.70818845434,-84.417530381729) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[9,3] 0.006039402639882 [GeV] -### Total energy deposition in calorimeter by a source track in 1 cells : 0.006039402639882 (GeV) +Cell[9,2] 0.02130681471934 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.02130681471934 (GeV) -Source track ID 792 (gamma,0.19239638056034[GeV]) at (-414.65188282942,279.39902660177,-1130.2072002645) +Source track ID 760 (gamma,0.19239638056034[GeV]) at (-414.6518845917,279.39902398639,-1130.2072132447) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[2,44] 0.0021946201588841 [GeV] -Cell[4,18] 0.00051099891 [GeV] -Cell[4,19] 0.18242509447785 [GeV] -Cell[3,19] 0.0010068899586954 [GeV] -Cell[7,47] 0.0014225335815036 [GeV] -Cell[3,42] 0.0003020095608409 [GeV] -Cell[4,20] 0.0025358493564629 [GeV] -Cell[5,26] 0.00051099891 [GeV] -Cell[2,41] 0.00027242711124653 [GeV] -### Total energy deposition in calorimeter by a source track in 9 cells : 0.19118142202548 (GeV) - -Source track ID 712 (gamma,0.25162621009879[GeV]) at (499.02634677553,-31.188222518528,957.00757912738) +Cell[5,40] 0.0038443146803404 [GeV] +Cell[3,3] 0.00051099891 [GeV] +Cell[4,19] 0.178775328931 [GeV] +Cell[3,19] 0.0023086129417018 [GeV] +Cell[4,32] 0.00056948783351906 [GeV] +Cell[3,47] 0.0018033085428655 [GeV] +Cell[3,46] 0.00037650813987936 [GeV] +Cell[3,12] 0.00053038531692238 [GeV] +Cell[3,23] 0.0019632732096913 [GeV] +Cell[2,4] 0.0017141620544194 [GeV] +### Total energy deposition in calorimeter by a source track in 10 cells : 0.19239638056034 (GeV) + +Source track ID 697 (gamma,0.25162621009879[GeV]) at (499.02634578393,-31.188238384709,957.00783708679) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[12,9] 0.00051099891 [GeV] -Cell[15,46] 0.00091631234134989 [GeV] -Cell[14,47] 0.22171864551275 [GeV] -Cell[15,47] 0.022617398484864 [GeV] -Cell[15,0] 0.0013630079859136 [GeV] -Cell[11,44] 0.00020603934541484 [GeV] -Cell[14,46] 0.0015302100860836 [GeV] -Cell[14,12] 0.00048801500253129 [GeV] -Cell[14,0] 0.0014596239553004 [GeV] -Cell[17,38] 0.00051099891 [GeV] -### Total energy deposition in calorimeter by a source track in 10 cells : 0.25132125053421 (GeV) - -Source track ID 492 (gamma,0.23940053141976[GeV]) at (-378.30993757975,-326.92750133387,1067.9857438434) +Cell[14,47] 0.17813912728553 [GeV] +Cell[14,46] 0.0030444298816254 [GeV] +Cell[14,0] 0.0011811478067283 [GeV] +Cell[15,46] 0.0022329969554463 [GeV] +Cell[15,47] 0.067028508169461 [GeV] +### Total energy deposition in calorimeter by a source track in 5 cells : 0.25162621009879 (GeV) + +Source track ID 637 (e-,0.001396762315747[GeV]) at (-154.86744099056,475.4114804262,1766.6901310683) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[16,28] 0.0014799711396523 [GeV] -Cell[13,11] 9.0331834737044e-05 [GeV] -Cell[11,9] 0.00051099891 [GeV] -Cell[15,12] 0.00040718568408503 [GeV] -Cell[16,11] 0.00034339762857071 [GeV] -Cell[15,28] 0.0023603049632401 [GeV] -Cell[15,29] 0.22445653861402 [GeV] -Cell[18,7] 0.0066654584810046 [GeV] -### Total energy deposition in calorimeter by a source track in 8 cells : 0.23631418725531 (GeV) - -Source track ID 294 (gamma,0.41164872010706[GeV]) at (-456.42209010655,204.15404885225,168.67820512951) +Cell[18,14] 0.00088576340574702 [GeV] +### Total energy deposition in calorimeter by a source track in 1 cells : 0.00088576340574702 (GeV) + +Source track ID 491 (gamma,0.23940053141976[GeV]) at (-378.30991334365,-326.9275293791,1067.9855870883) +Original primary track ID 43 (unknown,52.984237098069[GeV]) +Cell[17,20] 0.00051099891 [GeV] +Cell[15,42] 0.0012351583981811 [GeV] +Cell[15,29] 0.23201059415497 [GeV] +Cell[15,28] 0.0017160808371026 [GeV] +### Total energy deposition in calorimeter by a source track in 4 cells : 0.23547283230026 (GeV) + +Source track ID 296 (gamma,0.41164872010706[GeV]) at (-456.42209010655,204.15404885225,168.67820512951) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[11,47] 0.0036073857272321 [GeV] -Cell[11,22] 0.00019537584643604 [GeV] -Cell[11,20] 0.024635646132676 [GeV] -Cell[11,21] 0.0016989308421193 [GeV] -Cell[10,22] 0.0038533719182625 [GeV] -Cell[11,19] 0.0094140726825385 [GeV] -Cell[10,21] 0.03161828777919 [GeV] -Cell[10,20] 0.33599866352374 [GeV] -Cell[10,19] 0.00062698565486644 [GeV] -### Total energy deposition in calorimeter by a source track in 9 cells : 0.41164872010706 (GeV) - -Source track ID 295 (gamma,0.17556583448629[GeV]) at (-370.26449897009,336.01220335344,-37.728305315773) +Cell[8,7] 0.00088272334126999 [GeV] +Cell[10,20] 0.38555915866804 [GeV] +Cell[13,27] 0.00076772477837032 [GeV] +Cell[10,19] 0.0029341448278669 [GeV] +Cell[11,21] 0.006279404073768 [GeV] +Cell[11,20] 0.0056824921111492 [GeV] +Cell[10,21] 0.0095430723066029 [GeV] +### Total energy deposition in calorimeter by a source track in 7 cells : 0.41164872010706 (GeV) + +Source track ID 297 (gamma,0.17556583448629[GeV]) at (-370.26449897009,336.01220335344,-37.728305315773) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[6,40] 0.00035453306735178 [GeV] -Cell[9,6] 0.00069867243286011 [GeV] -Cell[7,39] 1.8394155138139e-06 [GeV] -Cell[8,20] 0.00099728862526536 [GeV] -Cell[11,36] 2.1055426623207e-05 [GeV] -Cell[11,22] 1.1333031579852e-09 [GeV] -Cell[10,22] 0.00073681717941054 [GeV] -Cell[10,23] 6.401103513781e-05 [GeV] -Cell[9,18] 0.092226870705607 [GeV] -Cell[9,17] 0.0040072151229498 [GeV] -Cell[9,19] 0.0010520381155524 [GeV] -Cell[9,16] 0.00044544614707183 [GeV] -Cell[11,17] 1.8478130165022e-05 [GeV] -Cell[11,38] 1.5439798211446e-05 [GeV] -Cell[12,37] 2.9698675234613e-09 [GeV] -Cell[11,1] 4.9910132656805e-07 [GeV] -Cell[11,0] 3.6897661198395e-05 [GeV] -Cell[13,36] 1.1004238514033e-05 [GeV] -Cell[13,37] 0.0022582996820335 [GeV] -Cell[8,19] 0.00088614396637956 [GeV] -Cell[10,21] 0.00078776002401548 [GeV] -Cell[18,29] 2.7318413485773e-06 [GeV] -Cell[10,17] 0.0027339455308189 [GeV] -Cell[9,24] 8.2872406055685e-06 [GeV] -Cell[10,20] 0.0022230588870204 [GeV] -Cell[10,16] 5.8021615723192e-07 [GeV] -Cell[10,18] 0.00038344270074118 [GeV] -Cell[7,40] 1.3786891940981e-07 [GeV] -Cell[6,39] 6.6462849003983e-06 [GeV] -### Total energy deposition in calorimeter by a source track in 29 cells : 0.10997914454887 (GeV) - -Source track ID 293 (gamma,0.41324573943274[GeV]) at (303.44001238969,-397.39672731534,976.47730315274) +Cell[9,17] 0.0013486358163806 [GeV] +Cell[10,20] 0.00079016560755014 [GeV] +Cell[9,19] 0.010686151870764 [GeV] +Cell[9,16] 0.0054592354512724 [GeV] +Cell[10,18] 0.0022399473100138 [GeV] +Cell[9,18] 0.15344781285474 [GeV] +Cell[9,15] 0.0013782526952708 [GeV] +Cell[10,21] 0.00021563288030263 [GeV] +### Total energy deposition in calorimeter by a source track in 8 cells : 0.17556583448629 (GeV) + +Source track ID 295 (gamma,0.41324573943274[GeV]) at (303.44001238969,-397.39672731534,976.47730315274) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[15,32] 0.00011298743802279 [GeV] -Cell[17,31] 0.00065900095145428 [GeV] -Cell[14,40] 0.12536975983058 [GeV] -Cell[11,22] 8.9430890039018e-05 [GeV] -Cell[14,41] 0.0064193667546123 [GeV] -Cell[16,15] 0.00051099891 [GeV] -Cell[17,3] 0.00051099891 [GeV] -Cell[17,32] 0.0034084758487889 [GeV] -Cell[18,31] 0.0020071448415671 [GeV] -Cell[15,40] 0.16782368433857 [GeV] -Cell[17,17] 0.00051099891 [GeV] -Cell[15,41] 0.10433884638838 [GeV] -Cell[18,17] 0.00050310030950961 [GeV] -### Total energy deposition in calorimeter by a source track in 13 cells : 0.41226479432153 (GeV) - -Source track ID 208 (pi-,0.22297340197366[GeV]) at (-14.481511172954,-499.79024183566,-1327.8198251562) +Cell[15,40] 0.10056900964526 [GeV] +Cell[16,18] 0.00051099891 [GeV] +Cell[14,40] 0.17029039977062 [GeV] +Cell[14,41] 0.035523064179747 [GeV] +Cell[16,10] 0.0025982269807663 [GeV] +Cell[15,41] 0.090893407464226 [GeV] +Cell[14,3] 0.0014663495647646 [GeV] +Cell[16,20] 0.00078643360076565 [GeV] +Cell[17,14] 0.0037452139630617 [GeV] +Cell[17,15] 0.0014809599422626 [GeV] +Cell[15,21] 0.00082321320342479 [GeV] +Cell[19,32] 0.0010489597668611 [GeV] +Cell[17,28] 0.0035095024409852 [GeV] +### Total energy deposition in calorimeter by a source track in 13 cells : 0.41324573943274 (GeV) + +Source track ID 210 (pi-,0.22297340197366[GeV]) at (-14.481511172954,-499.79024183566,-1327.8198251562) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[9,8] 1.3019797631841e-07 [GeV] -Cell[2,27] 0.00018421846766444 [GeV] -Cell[2,26] 4.6979878334241e-09 [GeV] -Cell[4,34] 1.1237322905799e-05 [GeV] -Cell[3,27] 0.00079133459045931 [GeV] -Cell[4,30] 0.00041683194576558 [GeV] -Cell[10,8] 0.00016029448308132 [GeV] -Cell[1,27] 0.00015589677426578 [GeV] -Cell[1,39] 0.0027529113401664 [GeV] -Cell[6,0] 8.3252426338731e-07 [GeV] -Cell[10,7] 1.2860425499639e-08 [GeV] -Cell[5,7] 2.2708321514074e-05 [GeV] -Cell[5,0] 3.1659938475741e-06 [GeV] -Cell[3,28] 5.8278841606807e-06 [GeV] -Cell[5,47] 0.0013591771529358 [GeV] -Cell[6,47] 6.9929024903104e-08 [GeV] -Cell[2,28] 0.0011784718787675 [GeV] -Cell[4,19] 2.9180920973886e-06 [GeV] -Cell[3,37] 0.00068186360070433 [GeV] -Cell[4,28] 0.0018111217655217 [GeV] -Cell[1,26] 0.00034656931447364 [GeV] -Cell[2,39] 0.0054773892682981 [GeV] -Cell[2,40] 0.0014976389185742 [GeV] -Cell[3,6] 2.7466341241961e-05 [GeV] -Cell[3,36] 0.054958811472469 [GeV] -Cell[4,31] 0.00071649947617323 [GeV] -Cell[1,40] 0.0033910953263804 [GeV] -Cell[1,38] 3.987651260104e-05 [GeV] -Cell[3,35] 0.042049281995146 [GeV] -Cell[1,44] 0.00013623294679485 [GeV] -Cell[3,20] 1.3548283313867e-06 [GeV] -Cell[3,24] 0.0008444847283449 [GeV] -Cell[1,41] 5.8015284594148e-09 [GeV] -Cell[4,29] 0.0025675021073073 [GeV] -Cell[5,11] 0.00018183911563574 [GeV] -Cell[0,43] 0.00065893730258495 [GeV] -Cell[5,37] 0.00031565043792762 [GeV] -Cell[6,36] 0.0016472263604608 [GeV] -Cell[5,10] 0.0018734063210144 [GeV] -Cell[5,1] 0.00041837587397458 [GeV] -Cell[5,2] 7.4818360358222e-06 [GeV] -Cell[11,14] 3.2629625820846e-07 [GeV] -Cell[11,15] 1.0342496818566e-05 [GeV] -Cell[10,15] 1.1311872348529e-05 [GeV] -Cell[5,25] 0.00029440736229435 [GeV] -Cell[6,8] 1.6996731021209e-05 [GeV] -Cell[0,44] 2.1515111147892e-06 [GeV] -Cell[2,41] 3.7609387072735e-07 [GeV] -Cell[2,42] 3.8730289891873e-05 [GeV] -Cell[3,21] 5.1791279111058e-07 [GeV] -Cell[5,24] 0.00066558104412968 [GeV] -### Total energy deposition in calorimeter by a source track in 51 cells : 0.12773689771937 (GeV) - -Source track ID 209 (pi+,1.0808663217131[GeV]) at (389.77867518792,-313.16542652207,505.67177738808) +Cell[3,38] 0.0011597784729701 [GeV] +Cell[3,37] 0.0010404403757873 [GeV] +Cell[1,23] 2.0235779743416e-08 [GeV] +Cell[1,47] 4.2495338129811e-06 [GeV] +Cell[1,24] 0.00026874334228091 [GeV] +Cell[0,9] 0.00047698490344646 [GeV] +Cell[0,10] 9.2542636266444e-06 [GeV] +Cell[2,38] 0.003039928414159 [GeV] +Cell[2,33] 0.00044487193882914 [GeV] +Cell[4,3] 0.00030426995059008 [GeV] +Cell[2,7] 0.0015395928248819 [GeV] +Cell[2,37] 0.001695944268387 [GeV] +Cell[0,8] 2.0470865390962e-05 [GeV] +Cell[3,7] 0.00099283103364383 [GeV] +Cell[2,35] 0.0021958811027155 [GeV] +Cell[4,5] 7.4027421069331e-06 [GeV] +Cell[2,24] 0.0038099646657059 [GeV] +Cell[4,4] 0.00022928845342085 [GeV] +Cell[3,14] 8.3747454918921e-06 [GeV] +Cell[4,28] 1.5824734378839e-05 [GeV] +Cell[2,42] 1.6824292164529e-05 [GeV] +Cell[4,36] 0.00050576515975706 [GeV] +Cell[4,35] 2.3138772803577e-08 [GeV] +Cell[3,35] 0.1004120257961 [GeV] +Cell[2,36] 0.00099090046093215 [GeV] +Cell[3,36] 0.017600169980182 [GeV] +Cell[2,14] 0.0016827016210111 [GeV] +Cell[3,34] 2.127829939127e-07 [GeV] +### Total energy deposition in calorimeter by a source track in 28 cells : 0.13847274009932 (GeV) + +Source track ID 211 (pi+,1.0808662376642[GeV]) at (389.77867297313,-313.16542927869,505.67177795306) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[11,43] 0.00016897048229657 [GeV] -Cell[11,6] 3.4450166651823e-07 [GeV] -Cell[1,9] 4.0542751980865e-07 [GeV] -Cell[5,38] 4.7535550547764e-06 [GeV] -Cell[12,42] 0.4895029509139 [GeV] -Cell[12,32] 2.5818299036473e-09 [GeV] -Cell[12,31] 1.4107936294749e-08 [GeV] -Cell[14,43] 8.4235477970651e-09 [GeV] -Cell[16,18] 0.00051703296125718 [GeV] -Cell[15,9] 3.038495947294e-09 [GeV] -Cell[16,13] 0.0004878725538972 [GeV] -Cell[14,27] 0.0014810159830814 [GeV] -Cell[14,18] 3.7741847336292e-10 [GeV] -Cell[16,4] 1.6170964809135e-06 [GeV] -Cell[11,47] 1.7144203116459e-05 [GeV] -Cell[13,9] 0.0032686116552296 [GeV] -Cell[14,9] 2.2637226677034e-05 [GeV] -Cell[14,8] 7.7558432069168e-05 [GeV] -Cell[13,10] 0.0023249162740693 [GeV] -Cell[10,6] 0.0025791935202044 [GeV] -Cell[10,5] 2.4658998241648e-05 [GeV] -Cell[10,22] 1.4842953532934e-11 [GeV] -Cell[9,22] 1.1292286217213e-11 [GeV] -Cell[12,39] 6.3889509370824e-05 [GeV] -Cell[12,10] 1.0176371609987e-06 [GeV] -Cell[12,11] 4.9950274387811e-09 [GeV] -Cell[14,7] 2.2544398689206e-08 [GeV] -Cell[16,15] 5.8579123075333e-06 [GeV] -Cell[16,42] 7.3794299727638e-05 [GeV] -Cell[16,40] 1.4551915228367e-12 [GeV] -Cell[13,11] 3.5862956337951e-09 [GeV] -Cell[13,46] 0.0023835988241238 [GeV] -Cell[17,2] 1.4704330242239e-06 [GeV] -Cell[17,42] 7.5356831075624e-07 [GeV] -Cell[16,41] 1.2705714559047e-05 [GeV] -Cell[15,25] 3.1654440535931e-05 [GeV] -Cell[11,5] 5.7779448555834e-05 [GeV] -Cell[15,19] 0.00067471074111666 [GeV] -Cell[15,18] 0.0016552256019607 [GeV] -Cell[12,43] 0.0071398665587025 [GeV] -Cell[13,43] 0.0050752949790888 [GeV] -Cell[13,4] 5.5739866511431e-06 [GeV] -Cell[10,2] 0.00073247000148441 [GeV] -Cell[10,1] 0.001202209506472 [GeV] -Cell[17,10] 0.0030086660593581 [GeV] -Cell[11,2] 0.00053373683588802 [GeV] -Cell[11,0] 0.00031412288737647 [GeV] -Cell[5,18] 1.9076296745197e-06 [GeV] -Cell[4,17] 0.00037992891760337 [GeV] -Cell[5,17] 0.0010577704598411 [GeV] -Cell[5,36] 1.4780770783545e-05 [GeV] -Cell[5,16] 0.0070412868185669 [GeV] -Cell[1,10] 2.1589909692921e-08 [GeV] -Cell[0,10] 0.0012895219705476 [GeV] -Cell[0,9] 5.9816229622811e-09 [GeV] -Cell[4,16] 0.00028865336194224 [GeV] -Cell[6,16] 2.964930201415e-06 [GeV] -Cell[5,15] 0.00070376730855676 [GeV] -Cell[13,7] 0.00020062520348438 [GeV] -Cell[14,38] 0.0035047551472297 [GeV] -Cell[12,45] 0.00049518809454707 [GeV] -Cell[12,44] 0.0002704681871819 [GeV] -Cell[12,46] 4.5367036932475e-08 [GeV] -Cell[11,44] 9.2494331056514e-09 [GeV] -Cell[14,14] 1.3613136223285e-05 [GeV] -Cell[13,38] 0.00086425227972317 [GeV] -Cell[12,13] 9.8856233546144e-05 [GeV] -Cell[12,12] 0.00085532786631495 [GeV] -Cell[15,26] 9.2604695237242e-06 [GeV] -Cell[13,44] 9.6294797913288e-10 [GeV] -Cell[13,45] 3.3297791992368e-05 [GeV] -Cell[12,41] 0.013671764094748 [GeV] -Cell[12,40] 0.0032264857497757 [GeV] -Cell[13,42] 0.028593376686461 [GeV] -Cell[15,12] 0.00077300333721826 [GeV] -Cell[15,11] 2.2351172386379e-05 [GeV] -Cell[14,42] 4.4951469817534e-09 [GeV] -Cell[13,41] 0.0077061633588768 [GeV] -Cell[14,39] 0.0022882830261345 [GeV] -Cell[13,5] 0.0032896982197084 [GeV] -Cell[13,39] 0.00051923420789181 [GeV] -Cell[15,8] 1.9752907599013e-07 [GeV] -Cell[9,23] 0.00088654601465089 [GeV] -Cell[16,33] 6.2473700090777e-06 [GeV] -Cell[12,1] 9.9965778645128e-08 [GeV] -Cell[16,22] 3.5745182767641e-06 [GeV] -Cell[14,6] 1.0998634138559e-08 [GeV] -Cell[14,25] 0.00015833753734466 [GeV] -Cell[13,40] 0.02182818363954 [GeV] -Cell[9,24] 0.00031823047174669 [GeV] -Cell[14,10] 0.001367841966595 [GeV] -Cell[13,8] 2.0468683098443e-05 [GeV] -Cell[14,19] 0.0004467025133589 [GeV] -Cell[7,16] 1.9037649501115e-05 [GeV] -Cell[13,6] 0.00071863957858295 [GeV] -Cell[14,11] 1.3260615853596e-06 [GeV] -Cell[15,10] 6.5541826188564e-11 [GeV] -Cell[17,15] 0.0017073571764357 [GeV] -Cell[17,14] 8.8702333741821e-06 [GeV] -Cell[17,9] 7.5022481980341e-05 [GeV] -Cell[16,14] 0.0010008078769464 [GeV] -Cell[6,15] 0.00052630736340575 [GeV] -Cell[0,11] 4.2306187202144e-05 [GeV] -Cell[19,25] 1.1940119729843e-06 [GeV] -Cell[19,26] 3.7830396322533e-06 [GeV] -Cell[16,16] 3.7611371953972e-07 [GeV] -### Total energy deposition in calorimeter by a source track in 106 cells : 0.62981228553785 (GeV) - -Source track ID 196 (gamma,0.00012510102702872[GeV]) at (499.14575527699,29.214978845894,-161.04931190008) +Cell[9,6] 0.00095747180996136 [GeV] +Cell[12,11] 0.00074199074600165 [GeV] +Cell[12,17] 0.00085206096917034 [GeV] +Cell[13,43] 0.15961710559277 [GeV] +Cell[15,35] 3.1002945497903e-05 [GeV] +Cell[15,40] 2.495235655806e-05 [GeV] +Cell[15,37] 0.012041884557326 [GeV] +Cell[13,25] 0.0020446948416259 [GeV] +Cell[15,44] 3.4690371255124e-05 [GeV] +Cell[12,27] 0.0015501199048713 [GeV] +Cell[11,28] 4.937770892866e-06 [GeV] +Cell[11,23] 5.5902087769937e-06 [GeV] +Cell[11,22] 0.0002260842502219 [GeV] +Cell[12,23] 0.00050282589218562 [GeV] +Cell[12,14] 2.3849681019783e-07 [GeV] +Cell[13,44] 0.0048155237645842 [GeV] +Cell[12,43] 0.0029961831100081 [GeV] +Cell[15,42] 0.00028432886346036 [GeV] +Cell[15,43] 1.3630668137921e-05 [GeV] +Cell[18,35] 2.6475237245904e-07 [GeV] +Cell[12,26] 0.00857290058431 [GeV] +Cell[5,7] 0.00030319554385728 [GeV] +Cell[11,10] 6.0641034215223e-06 [GeV] +Cell[12,10] 1.5528598851233e-11 [GeV] +Cell[14,44] 0.0033244248075224 [GeV] +Cell[12,42] 0.13535385431901 [GeV] +Cell[14,43] 0.0081257359473895 [GeV] +Cell[16,47] 2.0538790849969e-06 [GeV] +Cell[14,40] 2.7670991257764e-06 [GeV] +Cell[15,36] 0.0025871391586151 [GeV] +Cell[16,37] 0.0039541118406357 [GeV] +Cell[17,37] 0.039355561526539 [GeV] +Cell[17,36] 0.0016757068118593 [GeV] +Cell[17,38] 0.0033209437703596 [GeV] +Cell[18,38] 0.0010611346755929 [GeV] +Cell[18,37] 0.010352907473944 [GeV] +Cell[18,36] 0.015168545450687 [GeV] +Cell[17,39] 5.6844652455652e-05 [GeV] +Cell[16,36] 0.0021149011909251 [GeV] +Cell[13,42] 0.040660852971076 [GeV] +Cell[13,41] 0.00019600344118157 [GeV] +Cell[16,35] 0.0063791484498234 [GeV] +Cell[19,36] 0.0058382525250823 [GeV] +Cell[19,37] 5.326432687832e-05 [GeV] +Cell[16,46] 0.00094194398360855 [GeV] +Cell[12,41] 0.00029177329957042 [GeV] +Cell[14,42] 0.004907813907589 [GeV] +Cell[13,40] 0.0041318922457732 [GeV] +Cell[12,40] 1.7265392671106e-11 [GeV] +Cell[14,37] 0.005680290522663 [GeV] +Cell[16,42] 0.00017230495429988 [GeV] +Cell[15,41] 0.0056311702452261 [GeV] +Cell[14,18] 1.4660465501947e-05 [GeV] +Cell[14,24] 0.0012348892749516 [GeV] +Cell[13,3] 0.080848435822545 [GeV] +Cell[15,39] 2.982783371408e-10 [GeV] +Cell[15,38] 0.0022651197527572 [GeV] +Cell[16,39] 7.4482398201781e-07 [GeV] +Cell[14,23] 1.2364016389711e-05 [GeV] +Cell[16,41] 0.0054067726250539 [GeV] +Cell[9,5] 0.00024153650054535 [GeV] +Cell[17,46] 4.3992528730996e-08 [GeV] +Cell[12,16] 0.000111824865784 [GeV] +Cell[5,23] 0.00018250313292932 [GeV] +Cell[12,15] 0.0010003609404391 [GeV] +Cell[16,38] 0.027183682347639 [GeV] +Cell[19,35] 3.9953813143256e-08 [GeV] +### Total energy deposition in calorimeter by a source track in 67 cells : 0.61547206442653 (GeV) + +Source track ID 198 (gamma,0.00012510102702872[GeV]) at (499.14575527699,29.214978845894,-161.04931190008) Original primary track ID 43 (unknown,52.984237098069[GeV]) Cell[9,0] 0.00012510102702872 [GeV] ### Total energy deposition in calorimeter by a source track in 1 cells : 0.00012510102702872 (GeV) -Source track ID 199 (gamma,0.00019250309578168[GeV]) at (-201.47322695904,-457.61177740385,-668.75266316428) +Source track ID 201 (gamma,0.00019250309578168[GeV]) at (-201.47322695904,-457.61177740385,-668.75266316428) Original primary track ID 43 (unknown,52.984237098069[GeV]) Cell[6,32] 0.00019250309578168 [GeV] ### Total energy deposition in calorimeter by a source track in 1 cells : 0.00019250309578168 (GeV) -Source track ID 202 (gamma,0.00031821739214757[GeV]) at (385.95314166358,317.868168334,-315.44072636493) +Source track ID 204 (gamma,0.00031821739214757[GeV]) at (385.95314166358,317.868168334,-315.44072636493) Original primary track ID 43 (unknown,52.984237098069[GeV]) Cell[8,5] 0.00031821739214757 [GeV] ### Total energy deposition in calorimeter by a source track in 1 cells : 0.00031821739214757 (GeV) -Source track ID 183 (gamma,0.00013138543178002[GeV]) at (346.31073856509,360.65062367131,-270.03338765088) +Source track ID 185 (gamma,0.00013138543178002[GeV]) at (346.31073856509,360.65062367131,-270.03338765088) Original primary track ID 43 (unknown,52.984237098069[GeV]) Cell[8,6] 0.00013138543178002 [GeV] ### Total energy deposition in calorimeter by a source track in 1 cells : 0.00013138543178002 (GeV) -Source track ID 188 (gamma,0.00034870519176809[GeV]) at (277.5626764772,-415.8833497831,1175.0198864144) +Source track ID 190 (gamma,0.00034870519176809[GeV]) at (277.5626764772,-415.8833497831,1175.0198864144) Original primary track ID 43 (unknown,52.984237098069[GeV]) Cell[15,40] 0.00034870519176809 [GeV] ### Total energy deposition in calorimeter by a source track in 1 cells : 0.00034870519176809 (GeV) -Source track ID 189 (gamma,0.0002002135192715[GeV]) at (498.13461894693,43.149755579801,-416.66485876014) +Source track ID 191 (gamma,0.0002002135192715[GeV]) at (498.13461894693,43.149755579801,-416.66485876014) Original primary track ID 43 (unknown,52.984237098069[GeV]) Cell[7,0] 0.0002002135192715 [GeV] ### Total energy deposition in calorimeter by a source track in 1 cells : 0.0002002135192715 (GeV) -Source track ID 180 (gamma,0.46372847760985[GeV]) at (-465.99474922129,181.24263763856,-913.38295128771) +Source track ID 182 (gamma,0.46372847760985[GeV]) at (-465.99474922129,181.24263763856,-913.38295128771) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[7,30] 0.0004678953413831 [GeV] -Cell[5,7] 0.00030012432017718 [GeV] -Cell[3,29] 0.00015587981383653 [GeV] -Cell[3,30] 0.0030062041443205 [GeV] -Cell[5,19] 0.0041817830478414 [GeV] -Cell[5,21] 0.41374215270275 [GeV] -Cell[5,20] 0.022259806851868 [GeV] -Cell[4,20] 0.0081108493756747 [GeV] -Cell[4,21] 0.0091492962429879 [GeV] -Cell[5,26] 0.0008613020562911 [GeV] -Cell[5,25] 0.00092750717895472 [GeV] -Cell[5,22] 0.00056370552294835 [GeV] -### Total energy deposition in calorimeter by a source track in 12 cells : 0.46372650659903 (GeV) - -Source track ID 177 (gamma,0.21067608644927[GeV]) at (-247.62061578369,-434.37775108643,-1046.3393927423) +Cell[7,9] 0.00041262193654718 [GeV] +Cell[6,30] 0.00084851737019394 [GeV] +Cell[5,21] 0.33770844951389 [GeV] +Cell[5,20] 0.015032293319167 [GeV] +Cell[4,20] 0.017597132522184 [GeV] +Cell[4,21] 0.091268588452923 [GeV] +Cell[3,17] 0.00086087449495164 [GeV] +### Total energy deposition in calorimeter by a source track in 7 cells : 0.46372847760985 (GeV) + +Source track ID 179 (gamma,0.21067608644927[GeV]) at (-247.62061578369,-434.37775108643,-1046.3393927423) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[1,43] 0.0018358728670359 [GeV] -Cell[4,32] 0.17762290534667 [GeV] -Cell[0,14] 0.00090620361846794 [GeV] -Cell[4,31] 0.02375613571291 [GeV] -Cell[1,42] 0.0010407615461136 [GeV] -Cell[3,10] 0.0048005174381821 [GeV] -### Total energy deposition in calorimeter by a source track in 6 cells : 0.20996239652938 (GeV) - -Source track ID 175 (gamma,0.06726801612498[GeV]) at (-461.11389798393,-193.32349336298,-562.35047877207) -Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[7,41] 0.0026174057751406 [GeV] -Cell[5,0] 0.00051099891 [GeV] -Cell[6,27] 0.0016175287555404 [GeV] -Cell[7,27] 0.062522082684299 [GeV] -### Total energy deposition in calorimeter by a source track in 4 cells : 0.06726801612498 (GeV) +Cell[4,31] 0.039217334723822 [GeV] +Cell[5,13] 0.00085761796081967 [GeV] +Cell[1,42] 0.00051099891 [GeV] +Cell[5,22] 0.0011768919800093 [GeV] +Cell[4,33] 0.00085955929336717 [GeV] +Cell[4,32] 0.1532574635474 [GeV] +Cell[11,9] 0.00051099891 [GeV] +Cell[4,8] 0.00036094550037049 [GeV] +Cell[2,14] 0.0031977512483439 [GeV] +### Total energy deposition in calorimeter by a source track in 9 cells : 0.19994956207413 (GeV) -Source track ID 176 (gamma,1.2213291054873[GeV]) at (-495.8101023425,64.593671633674,-1525.2871382147) +Source track ID 177 (gamma,0.06726801612498[GeV]) at (-461.11389798393,-193.32349336298,-562.35047877207) +Original primary track ID 43 (unknown,52.984237098069[GeV]) +Cell[8,15] 0.0031152384732894 [GeV] +Cell[9,9] 0.0004112740754225 [GeV] +Cell[6,26] 0.0003774527000001 [GeV] +Cell[8,13] 0.00084196199654003 [GeV] +Cell[7,38] 0.00050626748193608 [GeV] +Cell[7,27] 0.047025975549189 [GeV] +Cell[7,26] 0.012812494530019 [GeV] +Cell[8,3] 0.0018504635827249 [GeV] +Cell[9,1] 0.00032688773585944 [GeV] +### Total energy deposition in calorimeter by a source track in 9 cells : 0.06726801612498 (GeV) + +Source track ID 178 (gamma,1.2213291054873[GeV]) at (-495.8101023425,64.593671633674,-1525.2871382147) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[2,27] 0.00075074193885152 [GeV] -Cell[4,36] 0.0010990474040648 [GeV] -Cell[2,44] 0.00046811103944785 [GeV] -Cell[1,23] 0.044843828110935 [GeV] -Cell[1,22] 0.015639625541917 [GeV] -Cell[2,22] 0.34544303100707 [GeV] -Cell[2,23] 0.77661661743924 [GeV] -Cell[13,1] 0.0005930683286668 [GeV] -Cell[0,24] 0.00024239676374455 [GeV] -Cell[1,20] 0.0021858755744343 [GeV] -Cell[0,42] 0.0019667396628935 [GeV] -Cell[1,21] 0.00070606946969164 [GeV] -Cell[2,35] 0.00051099891 [GeV] -Cell[1,38] 0.0029512849459818 [GeV] -Cell[1,44] 0.0025788010284049 [GeV] -Cell[1,24] 0.00051099891 [GeV] -Cell[2,24] 0.00016257506390947 [GeV] -Cell[4,43] 0.00039947202714422 [GeV] -Cell[1,41] 0.00056530817928412 [GeV] -Cell[1,30] 0.0015121344989832 [GeV] -Cell[3,32] 0.00031283973328311 [GeV] -Cell[4,2] 0.00050763684659535 [GeV] -Cell[1,12] 0.0054889149790977 [GeV] -Cell[1,1] 0.0016462127657935 [GeV] -Cell[5,2] 0.0010754878474058 [GeV] -Cell[6,43] 0.00047201321694295 [GeV] -Cell[2,2] 0.00051099891 [GeV] -Cell[3,4] 0.00051099891 [GeV] -Cell[0,5] 0.00093216429212003 [GeV] -Cell[2,1] 0.00032366484459795 [GeV] -Cell[2,5] 0.0005031817092324 [GeV] -### Total energy deposition in calorimeter by a source track in 31 cells : 1.2120308398997 (GeV) - -Source track ID 93 (proton,1.0788871750087[GeV]) at (346.94270844656,-360.04271559881,-1899.7127705111) +Cell[6,11] 0.00272543573626 [GeV] +Cell[2,46] 0.001827543342423 [GeV] +Cell[0,42] 0.00058325926150296 [GeV] +Cell[2,23] 0.69696937571252 [GeV] +Cell[1,23] 0.0068177575636685 [GeV] +Cell[7,32] 0.00020697682981686 [GeV] +Cell[6,4] 0.00051099891 [GeV] +Cell[1,22] 0.0083354072101681 [GeV] +Cell[0,6] 0.00051099891 [GeV] +Cell[2,47] 0.00061078991964479 [GeV] +Cell[1,21] 0.00028234950276197 [GeV] +Cell[2,21] 0.0010890595601186 [GeV] +Cell[4,46] 0.0004456688825085 [GeV] +Cell[2,37] 0.001215519166022 [GeV] +Cell[3,47] 0.0016992377319325 [GeV] +Cell[2,45] 0.0012747698023958 [GeV] +Cell[0,8] 0.0008248682032397 [GeV] +Cell[2,31] 0.0016441842799629 [GeV] +Cell[0,38] 0.0010810646124185 [GeV] +Cell[0,39] 0.0014601377232818 [GeV] +Cell[1,41] 0.00043119830461113 [GeV] +Cell[6,46] 0.00051099891 [GeV] +Cell[0,45] 0.012649150000648 [GeV] +Cell[2,12] 7.1744003479852e-05 [GeV] +Cell[0,11] 0.0038777883443528 [GeV] +Cell[0,43] 0.00084838317020021 [GeV] +Cell[1,8] 0.00038568294335372 [GeV] +Cell[3,22] 0.00096586699646123 [GeV] +Cell[3,10] 0.0020187201480134 [GeV] +Cell[2,24] 0.00059676454090425 [GeV] +Cell[2,22] 0.40656292259281 [GeV] +Cell[2,20] 4.9885577635337e-05 [GeV] +Cell[2,11] 0.0030223580532632 [GeV] +Cell[2,1] 0.00028163708659908 [GeV] +Cell[1,0] 0.00036836752315134 [GeV] +Cell[0,2] 0.00051099891 [GeV] +Cell[1,36] 0.00051099891 [GeV] +### Total energy deposition in calorimeter by a source track in 37 cells : 1.1637788688761 (GeV) + +Source track ID 93 (proton,1.0788792864314[GeV]) at (346.98746214971,-359.99958487601,-1899.7246534816) Original primary track ID 43 (unknown,52.984237098069[GeV]) -Cell[0,42] 0.082167440865805 [GeV] -Cell[0,41] 0.058447721142937 [GeV] -### Total energy deposition in calorimeter by a source track in 2 cells : 0.14061516200874 (GeV) +Cell[0,42] 0.07302475729652 [GeV] +Cell[0,41] 0.067582516134916 [GeV] +### Total energy deposition in calorimeter by a source track in 2 cells : 0.14060727343144 (GeV) Source track ID 95 (gamma,0.00028998662720273[GeV]) at (433.86207038494,-248.52304497026,-1813.4545905724) Original primary track ID 43 (unknown,52.984237098069[GeV]) @@ -6387,11 +5440,11 @@ Cell[0,44] 0.00028998662720273 [GeV] >>> Summary of Event 0 Tracker hits -------------------------------------------------------------- -1727 hits are stored in RE01TrackerHitsCollection. +1527 hits are stored in RE01TrackerHitsCollection. Calorimeter hits -------------------------------------------------------------- 926 hits are stored in RE01CalorimeterHitsCollection. - Total energy deposition in calorimeter : 153.00463311906 (GeV) + Total energy deposition in calorimeter : 149.45630139685 (GeV) Trajectories in tracker -------------------------------------------------------------- diff --git a/examples/extended/runAndEvent/RE02/run.out b/examples/extended/runAndEvent/RE02/run.out index 2bd5b029b51..c969d9cc4a2 100644 --- a/examples/extended/runAndEvent/RE02/run.out +++ b/examples/extended/runAndEvent/RE02/run.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -55,7 +55,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -329,7 +331,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -361,7 +363,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -393,7 +395,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -406,7 +408,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -452,7 +453,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -484,7 +485,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -516,7 +517,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -548,7 +549,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -580,7 +581,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -612,7 +613,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -644,7 +645,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1042,12 +1043,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1485,7 +1495,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Run terminated. Run Summary Number of events processed : 10 - User=0.000000s Real=0.003390s Sys=0.010000s + User=0.000000s Real=0.002291s Sys=0.000000s PrimitiveScorer RUN PhantomSD,totalEDep Number of entries 10 PrimitiveScorer RUN PhantomSD,protonEDep diff --git a/examples/extended/runAndEvent/RE02/run3.out b/examples/extended/runAndEvent/RE02/run3.out index 47d10a50872..6aaf09c45e0 100644 --- a/examples/extended/runAndEvent/RE02/run3.out +++ b/examples/extended/runAndEvent/RE02/run3.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -55,7 +55,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -327,7 +329,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -359,7 +361,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -391,7 +393,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -404,7 +406,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -450,7 +451,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -482,7 +483,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -514,7 +515,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -546,7 +547,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -578,7 +579,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -610,7 +611,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -642,7 +643,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1040,12 +1041,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1165,7 +1175,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 10000 - User=10.200000s Real=10.333021s Sys=0.060000s + User=9.080000s Real=9.187819s Sys=0.030000s PrimitiveScorer RUN PhantomSD,totalEDep Number of entries 51141 PrimitiveScorer RUN PhantomSD,protonEDep diff --git a/examples/extended/runAndEvent/RE02/run4.out b/examples/extended/runAndEvent/RE02/run4.out index 50152441ae7..e2e0d6feac5 100644 --- a/examples/extended/runAndEvent/RE02/run4.out +++ b/examples/extended/runAndEvent/RE02/run4.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -55,7 +55,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -329,7 +331,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -361,7 +363,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -393,7 +395,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -406,7 +408,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -452,7 +453,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -484,7 +485,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -516,7 +517,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -548,7 +549,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -580,7 +581,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -612,7 +613,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -644,7 +645,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1042,12 +1043,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1107,19 +1117,19 @@ Start closing geometry. G4GeometryManager::ReportVoxelStats -- Voxel Statistics Total memory consumed for geometry optimisation: 23 kByte - Total CPU time elapsed for geometry optimisation: 0 seconds + Total CPU time elapsed for geometry optimisation: 0.01 seconds Voxelisation: top CPU users: Percent Total CPU System CPU Memory Volume ------- ---------- ---------- -------- ---------- + 100.00 0.01 0.00 13k RepX 0.00 0.00 0.00 6k Phantom 0.00 0.00 0.00 6k RepY - 0.00 0.00 0.00 13k RepX Voxelisation: top memory users: Percent Memory Heads Nodes Pointers Total CPU Volume ------- -------- ------ ------ -------- ---------- ---------- - 53.25 12k 1 201 400 0.00 RepX + 53.25 12k 1 201 400 0.01 RepX 23.38 5k 1 100 100 0.00 Phantom 23.38 5k 1 100 100 0.00 RepY G4VisManager: Using G4TrajectoryDrawByCharge as fallback trajectory model. @@ -1167,7 +1177,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 10000 - User=0.160000s Real=0.167707s Sys=0.000000s + User=0.120000s Real=0.128027s Sys=0.000000s PrimitiveScorer RUN PhantomSD,totalEDep Number of entries 81 PrimitiveScorer RUN PhantomSD,protonEDep diff --git a/examples/extended/runAndEvent/RE03/run.out b/examples/extended/runAndEvent/RE03/run.out index da8bca08ad5..af6d2d10880 100644 --- a/examples/extended/runAndEvent/RE03/run.out +++ b/examples/extended/runAndEvent/RE03/run.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -226,7 +228,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -258,7 +260,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -290,7 +292,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -303,7 +305,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -349,7 +350,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -381,7 +382,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -413,7 +414,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -445,7 +446,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -477,7 +478,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -509,7 +510,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -541,7 +542,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -926,12 +927,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -973,7 +983,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 2000 - User=41.010000s Real=41.330122s Sys=0.020000s + User=36.950000s Real=37.196796s Sys=0.020000s # ######################################## # @@ -989,5 +999,5 @@ Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== Number of memory pools allocated: 14 of which, static: 0 -Dynamic pools deleted: 14 / Total memory freed: 0.18 MB +Dynamic pools deleted: 14 / Total memory freed: 0.19 MB ============================================================ diff --git a/examples/extended/runAndEvent/RE04/exampleRE04.out b/examples/extended/runAndEvent/RE04/exampleRE04.out index 2f3772a7a98..081cecd8510 100644 --- a/examples/extended/runAndEvent/RE04/exampleRE04.out +++ b/examples/extended/runAndEvent/RE04/exampleRE04.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -264,7 +266,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -296,7 +298,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -328,7 +330,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -341,7 +343,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -387,7 +388,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -419,7 +420,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -451,7 +452,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -483,7 +484,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -515,7 +516,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -547,7 +548,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -579,7 +580,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -964,12 +965,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/runAndEvent/RE05/exampleRE05.out b/examples/extended/runAndEvent/RE05/exampleRE05.out index dd135ba2422..28dcdafec38 100644 --- a/examples/extended/runAndEvent/RE05/exampleRE05.out +++ b/examples/extended/runAndEvent/RE05/exampleRE05.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -21,6 +21,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo <<< Reference Physics List QBBC G4HEPEvtInterface - pythia_event.data is open. + G4ChordFinder: stepperDriverId: 2 --- G4CoupledTransportation is used ### HadronInelasticQBBC Construct Process: Emin(FTFP)= 3 GeV Emax(FTFP)= 100000 GeV @@ -50,7 +51,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -202,7 +205,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -234,7 +237,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -266,7 +269,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -279,7 +282,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -325,7 +327,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -357,7 +359,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -389,7 +391,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -421,7 +423,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -453,7 +455,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -485,7 +487,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -517,7 +519,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -909,12 +911,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1015,8 +1026,8 @@ See commands in /vis/modeling/trajectories/ for other options. G4HEPEvtInterface - reading 484 HEPEvt particles from pythia_event.data. >>> Event 0 82 hits are stored in RE05TrackerHitsCollection. - 41 hits are stored in RE05CalorimeterHitsCollection. - Total energy deposition in calorimeter : 4.8652525882579 (GeV) + 44 hits are stored in RE05CalorimeterHitsCollection. + Total energy deposition in calorimeter : 5.238684971127 (GeV) 1 hits are stored in RE05MuonHitsCollection. G4HEPEvtInterface - reading 755 HEPEvt particles from pythia_event.data. >>> Event 1 @@ -1034,19 +1045,19 @@ G4HEPEvtInterface - reading 448 HEPEvt particles from pythia_event.data. >>> Event 3 0 hits are stored in RE05TrackerHitsCollection. 3 hits are stored in RE05CalorimeterHitsCollection. - Total energy deposition in calorimeter : 0.52855894097691 (GeV) + Total energy deposition in calorimeter : 0.51850321288085 (GeV) 0 hits are stored in RE05MuonHitsCollection. G4HEPEvtInterface - reading 945 HEPEvt particles from pythia_event.data. >>> Event 4 - 97 hits are stored in RE05TrackerHitsCollection. - 68 hits are stored in RE05CalorimeterHitsCollection. - Total energy deposition in calorimeter : 11.995399230672 (GeV) + 103 hits are stored in RE05TrackerHitsCollection. + 66 hits are stored in RE05CalorimeterHitsCollection. + Total energy deposition in calorimeter : 10.171486215082 (GeV) 1 hits are stored in RE05MuonHitsCollection. G4HEPEvtInterface - reading 837 HEPEvt particles from pythia_event.data. >>> Event 5 - 135 hits are stored in RE05TrackerHitsCollection. - 50 hits are stored in RE05CalorimeterHitsCollection. - Total energy deposition in calorimeter : 7.9034622181603 (GeV) + 36 hits are stored in RE05TrackerHitsCollection. + 57 hits are stored in RE05CalorimeterHitsCollection. + Total energy deposition in calorimeter : 8.6533343029584 (GeV) 1 hits are stored in RE05MuonHitsCollection. G4HEPEvtInterface - reading 603 HEPEvt particles from pythia_event.data. >>> Event 6 @@ -1056,26 +1067,26 @@ G4HEPEvtInterface - reading 603 HEPEvt particles from pythia_event.data. 0 hits are stored in RE05MuonHitsCollection. G4HEPEvtInterface - reading 627 HEPEvt particles from pythia_event.data. >>> Event 7 - 28 hits are stored in RE05TrackerHitsCollection. + 30 hits are stored in RE05TrackerHitsCollection. 29 hits are stored in RE05CalorimeterHitsCollection. - Total energy deposition in calorimeter : 6.9216389892557 (GeV) + Total energy deposition in calorimeter : 7.837467285258 (GeV) 1 hits are stored in RE05MuonHitsCollection. G4HEPEvtInterface - reading 682 HEPEvt particles from pythia_event.data. >>> Event 8 - 83 hits are stored in RE05TrackerHitsCollection. - 47 hits are stored in RE05CalorimeterHitsCollection. - Total energy deposition in calorimeter : 8.5061615079453 (GeV) + 41 hits are stored in RE05TrackerHitsCollection. + 49 hits are stored in RE05CalorimeterHitsCollection. + Total energy deposition in calorimeter : 9.3169771138758 (GeV) 1 hits are stored in RE05MuonHitsCollection. G4HEPEvtInterface - reading 330 HEPEvt particles from pythia_event.data. >>> Event 9 - 31 hits are stored in RE05TrackerHitsCollection. - 17 hits are stored in RE05CalorimeterHitsCollection. - Total energy deposition in calorimeter : 4.6295528160147 (GeV) + 38 hits are stored in RE05TrackerHitsCollection. + 23 hits are stored in RE05CalorimeterHitsCollection. + Total energy deposition in calorimeter : 9.1911441969966 (GeV) 1 hits are stored in RE05MuonHitsCollection. Run terminated. Run Summary Number of events processed : 10 - User=1.770000s Real=1.792417s Sys=0.010000s + User=2.110000s Real=2.111312s Sys=0.000000s # Graphics systems deleted. Visualization Manager deleting... @@ -1092,12 +1103,12 @@ G4SDManager deleted. EventManager deleted. Units table cleared. TransportationManager deleted. -Total navigation history collections cleaned: 420 +Total navigation history collections cleaned: 417 G4RNGHelper object is deleted. ================== Deleting memory pools =================== -Pool ID '20G4NavigationLevelRep', size : 0.688 MB +Pool ID '20G4NavigationLevelRep', size : 0.683 MB Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB -Pool ID '17G4DynamicParticle', size : 0.672 MB +Pool ID '17G4DynamicParticle', size : 0.682 MB Pool ID '16G4SmartVoxelNode', size : 0.00385 MB Pool ID '17G4SmartVoxelProxy', size : 0.00192 MB Pool ID '7G4Event', size : 0.000961 MB @@ -1106,19 +1117,19 @@ Pool ID '16G4HEPEvtParticle', size : 0.0221 MB Pool ID '15G4PrimaryVertex', size : 0.000961 MB Pool ID '15G4HCofThisEvent', size : 0.000961 MB Pool ID '16G4HitsCollection', size : 0.000961 MB -Pool ID '7G4Track', size : 1.14 MB +Pool ID '7G4Track', size : 1.16 MB Pool ID '18G4TouchableHistory', size : 0.05 MB Pool ID '15G4CountedObjectIvE', size : 0.00673 MB Pool ID '12G4Trajectory', size : 0.0279 MB Pool ID '17G4TrajectoryPoint', size : 0.153 MB -Pool ID '14RE05TrackerHit', size : 0.00577 MB +Pool ID '14RE05TrackerHit', size : 0.00481 MB Pool ID '18RE05CalorimeterHit', size : 0.00961 MB Pool ID '11RE05MuonHit', size : 0.000961 MB Pool ID '21G4TrajectoryContainer', size : 0.000961 MB -Pool ID '10G4Fragment', size : 0.00865 MB -Pool ID '17G4ReactionProduct', size : 0.0144 MB +Pool ID '10G4Fragment', size : 0.00961 MB +Pool ID '17G4ReactionProduct', size : 0.0163 MB Number of memory pools allocated: 22 of which, static: 0 -Dynamic pools deleted: 22 / Total memory freed: 2.9 MB +Dynamic pools deleted: 22 / Total memory freed: 3 MB ============================================================ G4Allocator objects are deleted. UImanager deleted. diff --git a/examples/extended/runAndEvent/RE06/exampleRE06.out b/examples/extended/runAndEvent/RE06/exampleRE06.out index fb449edb9d7..51b952a4cff 100644 --- a/examples/extended/runAndEvent/RE06/exampleRE06.out +++ b/examples/extended/runAndEvent/RE06/exampleRE06.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -332,7 +334,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -364,7 +366,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -396,7 +398,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -409,7 +411,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -455,7 +456,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -487,7 +488,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -519,7 +520,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -551,7 +552,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -583,7 +584,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -615,7 +616,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -647,7 +648,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -1033,12 +1034,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ### G4LevelReader: broken transition 0 from level 24 to 24 for isotope Z= 89 A= 219 - use ground level ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1115,7 +1125,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 10 - User=0.980000s Real=1.235965s Sys=0.250000s + User=0.850000s Real=1.145353s Sys=0.290000s ############################################################ Run Summary - Number of events : 10 ############################################################ @@ -1398,7 +1408,7 @@ Index : 6 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10 - User=1.620000s Real=2.021582s Sys=0.380000s + User=1.410000s Real=1.879351s Sys=0.460000s ############################################################ Run Summary - Number of events : 10 ############################################################ @@ -1712,7 +1722,7 @@ Index : 12 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10 - User=0.610000s Real=0.771954s Sys=0.160000s + User=0.390000s Real=0.515297s Sys=0.130000s ############################################################ Run Summary - Number of events : 10 ############################################################ @@ -1720,124 +1730,124 @@ Region : Calor-A Production thresholds : gamma 200 um e- 200 um e+ 200 um Energy deposition in an event : - Absorber 1.19552 GeV Gap 511.23 MeV + Absorber 728.001 MeV Gap 315.739 MeV Number of secondaries in an event : - gamma in Absorber 234.1 in Gap 66.3 - e- in Absorber 1354.6 in Gap 565 - e+ in Absorber 14.5 in Gap 3.5 + gamma in Absorber 91 in Gap 24.8 + e- in Absorber 494.4 in Gap 234 + e+ in Absorber 4.2 in Gap 1 Minimum kinetic energy of generated secondaries : - gamma in Absorber 3.25598 keV in Gap 1.49714 keV - e- in Absorber 102.532 eV in Gap 107.703 eV - e+ in Absorber 86.1261 keV in Gap 874.058 keV + gamma in Absorber 3.24746 keV in Gap 1.55735 keV + e- in Absorber 108.164 eV in Gap 107.539 eV + e+ in Absorber 1.02427 MeV in Gap 312.188 keV Total track length of e+/e- in an event : - Absorber 1.93992 m Gap 1.81687 m + Absorber 82.4607 cm Gap 77.4857 cm Total number of steps of e+/e- in an event : - Absorber 2602.6 Gap 1212.4 + Absorber 1009.7 Gap 508.4 ------------------------------------------------------------ Scores in parallel geometry layer eDep/evt nGamma/evt nElec/evt nPosi/evt stpLen/evt nStep/evt - 0 1342.62 212.7 634.4 11.8 2639.71 1739.1 - 1 183.735 51.2 292.2 2.8 598.346 647.7 - 2 64.3192 13.4 203.6 1.1 201.593 331.8 - 3 40.7937 8.5 170.7 0.9 129.265 260.4 - 4 19.922 4.6 125 0.4 50.724 178.4 - 5 19.4524 4.5 111.6 0.4 57.1305 163 - 6 7.19639 1.6 83.1 0.3 14.2719 104.5 - 7 5.53024 0.4 69.8 0.1 10.7496 87.9 - 8 5.77545 0.9 51.6 0.1 12.4482 70.7 - 9 4.86693 0.8 41.7 0 12.9146 57.8 - 10 2.77177 0.6 36.6 0 4.83976 44.8 - 11 1.92761 0.1 22.9 0 4.62547 27.3 - 12 1.73948 0.1 19 0 5.29724 26.5 - 13 1.27924 0 12.3 0 3.72482 16 - 14 0.710906 0.3 8.9 0 1.21006 11.3 - 15 0.574269 0.2 7.8 0.1 0.860434 9.6 - 16 1.49909 0.3 8.8 0 4.52008 12.9 - 17 0.932657 0.2 7 0 1.99012 9.2 - 18 0.306185 0 3.2 0 1.12983 3.7 - 19 0.424798 0 3.8 0 0.991884 5.7 + 0 954.259 96.6 369.6 4.1 1321.58 949.7 + 1 57.792 14.1 93.4 0.7 198.537 212.7 + 2 10.638 2.2 57.1 0.1 31.8616 80.8 + 3 6.76831 1 48.9 0 15.8042 67.9 + 4 3.83111 0.2 37.5 0 9.17188 54.2 + 5 1.49227 0.4 28.1 0.1 2.06383 34.4 + 6 1.2796 0.2 22.2 0 3.12037 26.4 + 7 1.8701 0.2 17.1 0 3.3927 21.5 + 8 0.708296 0.1 14.6 0 0.744674 17.4 + 9 0.418581 0 10 0 0.337419 10.9 + 10 0.808717 0.2 6.8 0.2 1.48594 10.2 + 11 1.33151 0.3 5.5 0 4.02852 8.7 + 12 0.287192 0 3 0 1.03687 4.2 + 13 0.159013 0 3.7 0 0.174192 4.7 + 14 0.13879 0 2.4 0 0.126448 2.5 + 15 0.259761 0 2.6 0 0.551937 3.1 + 16 1.38269 0.3 3.7 0 4.77012 5.7 + 17 0.198867 0 0.6 0 0.472143 1.4 + 18 0.00966625 0 0.3 0 0.00782306 0.3 + 19 0.047436 0 0.2 0 0.141041 0.2 ############################################################ Region : Calor-B Production thresholds : gamma 2 mm e- 2 mm e+ 2 mm Energy deposition in an event : - Absorber 567.281 MeV Gap 246.856 MeV + Absorber 649.538 MeV Gap 285.189 MeV Number of secondaries in an event : - gamma in Absorber 30.3 in Gap 10.1 - e- in Absorber 173.2 in Gap 78 - e+ in Absorber 1.2 in Gap 0.9 + gamma in Absorber 50.5 in Gap 16.3 + e- in Absorber 282.8 in Gap 120.3 + e+ in Absorber 3.2 in Gap 1 Minimum kinetic energy of generated secondaries : - gamma in Absorber 9.66217 keV in Gap 4.26122 keV - e- in Absorber 119.794 eV in Gap 105.255 eV - e+ in Absorber 2.81327 MeV in Gap 1.6348 MeV + gamma in Absorber 9.63969 keV in Gap 4.26122 keV + e- in Absorber 101.101 eV in Gap 107.59 eV + e+ in Absorber 447.351 keV in Gap 659.421 keV Total track length of e+/e- in an event : - Absorber 36.102 cm Gap 34.7306 cm + Absorber 55.2114 cm Gap 54.9258 cm Total number of steps of e+/e- in an event : - Absorber 384.5 Gap 206.4 + Absorber 593.2 Gap 298.9 ------------------------------------------------------------ Scores in parallel geometry layer eDep/evt nGamma/evt nElec/evt nPosi/evt stpLen/evt nStep/evt - 0 770.796 31.1 81.4 1 589.597 329.1 - 1 17.768 4 31.3 0.3 53.1624 60.5 - 2 6.9899 1.4 30 0.1 18.8324 43.9 - 3 6.22643 1.4 20.4 0.2 16.8842 32.2 - 4 3.40658 0.6 17.6 0.1 8.25077 25.9 - 5 4.2777 1.1 18.6 0.2 11.0803 28.8 - 6 0.750727 0.1 12 0 1.69591 16.7 - 7 0.831454 0.1 7.1 0 2.40055 11.9 - 8 0.265234 0 6.3 0 0.166322 7.5 - 9 0.178006 0 4 0 0.22946 4.3 - 10 0.724718 0.2 4.6 0.1 1.94056 5.8 - 11 0.198995 0 3 0 0.364021 4.5 - 12 1.17537 0.4 3 0.1 3.11665 6.1 - 13 0.100875 0 2.6 0 0.0803943 3.1 - 14 0.085801 0 2.3 0 0.060638 2.6 - 15 0.047615 0 0.9 0 0.0571591 1 - 16 0.0738247 0 1.1 0 0.0607894 1.4 - 17 0.0966271 0 2.5 0 0.0630644 2.8 - 18 0.0179558 0 0.6 0 0.0183024 0.6 - 19 0.109946 0 1.1 0 0.260164 1.3 + 0 854.778 52 114 3 870.938 441 + 1 39.4923 8.8 59.3 0.6 122.152 123.1 + 2 14.3661 2.3 42.9 0.1 44.2012 67.4 + 3 7.80178 1 41.2 0.1 20.426 61.4 + 4 4.71302 1.1 31.9 0.3 10.4895 43.4 + 5 5.6183 0.9 25.1 0 15.9068 38 + 6 2.03703 0.2 21.9 0 5.77876 29.1 + 7 1.27589 0.2 15.6 0 2.99576 21.4 + 8 2.00796 0.2 11.9 0.1 4.80815 16.5 + 9 0.584875 0.1 7.9 0 0.583106 9.2 + 10 0.732646 0 10.2 0 1.24578 11.7 + 11 0.319293 0 5 0 0.529479 9.8 + 12 0.335173 0 4.4 0 0.406687 6.2 + 13 0.123144 0 2.6 0 0.152004 2.9 + 14 0.07537 0 1.1 0 0.135234 1.4 + 15 0.0726208 0 2.7 0 0.0284834 3.1 + 16 0.134296 0 1.8 0 0.184562 2 + 17 0.0562335 0 1.8 0 0.0261102 2.3 + 18 0.0959391 0 0.7 0 0.127205 1 + 19 0.0945655 0 0.6 0 0.251453 0.7 ############################################################ Region : Calor-C Production thresholds : gamma 2 cm e- 2 cm e+ 2 cm Energy deposition in an event : - Absorber 589.853 MeV Gap 257.617 MeV + Absorber 766.113 MeV Gap 325.651 MeV Number of secondaries in an event : - gamma in Absorber 26.2 in Gap 6.5 - e- in Absorber 153.2 in Gap 67.4 - e+ in Absorber 1.7 in Gap 0.1 + gamma in Absorber 63.7 in Gap 19.4 + e- in Absorber 352.1 in Gap 151.8 + e+ in Absorber 5 in Gap 1.6 Minimum kinetic energy of generated secondaries : - gamma in Absorber 28.474 keV in Gap 10.5033 keV - e- in Absorber 109.484 eV in Gap 108.401 eV - e+ in Absorber 282.376 keV in Gap 991.655 keV + gamma in Absorber 28.5584 keV in Gap 10.5033 keV + e- in Absorber 106.842 eV in Gap 108.401 eV + e+ in Absorber 285.866 keV in Gap 991.655 keV Total track length of e+/e- in an event : - Absorber 29.6272 cm Gap 28.7327 cm + Absorber 66.2788 cm Gap 62.7681 cm Total number of steps of e+/e- in an event : - Absorber 292.7 Gap 125.3 + Absorber 659.5 Gap 284.6 ------------------------------------------------------------ Scores in parallel geometry layer eDep/evt nGamma/evt nElec/evt nPosi/evt stpLen/evt nStep/evt - 0 785.219 22.9 37.9 0.7 407.179 130.2 - 1 33.6477 6.4 32.6 0.5 96.0399 75.7 - 2 9.65042 1.1 26.3 0.3 27.2302 42.4 - 3 6.64106 1 24.8 0.2 21.0532 34.6 - 4 2.83688 0.4 19.9 0 7.67334 25.8 - 5 1.98337 0.3 18.9 0 4.23383 25.6 - 6 1.4278 0.1 15.7 0 3.30465 19.9 - 7 1.69195 0.3 9 0.1 5.27679 13.5 - 8 1.3009 0.1 6.4 0 4.30337 13.6 - 9 1.69681 0.1 5.6 0 5.05333 7.9 - 10 0.328891 0 5.4 0 0.404211 6.5 - 11 0.233676 0 6.7 0 0.196472 8.6 - 12 0.380454 0 3.7 0 1.00506 5.1 - 13 0.0884787 0 2.4 0 0.109534 2.7 - 14 0.16583 0 2 0 0.192872 2.3 - 15 0.0563058 0 1.3 0 0.0522996 1.3 - 16 0.00411174 0 0.1 0 0.00151729 0.1 - 17 0.0314167 0 0.3 0 0.0352033 0.3 - 18 0.0644641 0 0.2 0 0.246982 0.3 - 19 0.0140478 0 0.9 0 0.00437329 1 + 0 979.184 65.3 97.1 4.5 985.6 336.2 + 1 60.4834 11.1 79.2 1.2 171.593 163.1 + 2 20.4805 3.2 64.8 0.4 55.3444 95.1 + 3 10.3586 1.7 49.4 0.4 29.7366 68.7 + 4 5.38725 0.6 43 0 13.0717 57.7 + 5 3.53666 0.3 37.8 0 7.51604 47 + 6 2.76645 0.2 35.2 0 5.12492 44.2 + 7 2.30659 0.3 24 0.1 5.72193 31.6 + 8 1.92203 0.1 17.9 0 5.42761 26.9 + 9 2.22174 0.2 12.3 0 5.86431 16.2 + 10 1.22549 0.1 9.9 0 2.43221 13.8 + 11 0.399014 0 9.4 0 0.414366 12.4 + 12 0.556136 0 5.7 0 1.48952 8.2 + 13 0.245392 0 5.8 0 0.243354 6.7 + 14 0.230322 0 4 0 0.238537 4.4 + 15 0.118979 0 3 0 0.0926345 4.7 + 16 0.0354621 0 0.8 0 0.0405596 1.9 + 17 0.0426964 0 0.4 0 0.0436959 0.4 + 18 0.0786557 0 0.5 0 0.259725 0.6 + 19 0.0474738 0 1.4 0 0.0337627 1.6 ############################################################ /run/dumpCouples @@ -2055,7 +2065,7 @@ Index : 12 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 10 - User=0.570000s Real=0.722543s Sys=0.140000s + User=0.480000s Real=0.667565s Sys=0.180000s ############################################################ Run Summary - Number of events : 10 ############################################################ @@ -2063,124 +2073,124 @@ Region : Calor-A Production thresholds : gamma 10 um e- 10 um e+ 10 um Energy deposition in an event : - Absorber 585.717 MeV Gap 259.27 MeV + Absorber 553.278 MeV Gap 245.771 MeV Number of secondaries in an event : - gamma in Absorber 58.4 in Gap 15.1 - e- in Absorber 1067.3 in Gap 1013.4 - e+ in Absorber 2 in Gap 0.2 + gamma in Absorber 50.8 in Gap 11.7 + e- in Absorber 972.8 in Gap 954.5 + e+ in Absorber 1 in Gap 0.2 Minimum kinetic energy of generated secondaries : - gamma in Absorber 1.02488 keV in Gap 1.04149 keV - e- in Absorber 10.2233 eV in Gap 195.675 eV - e+ in Absorber 1.49103 MeV in Gap 1.90735 MeV + gamma in Absorber 997.226 eV in Gap 992.995 eV + e- in Absorber 28.3342 eV in Gap 132.647 eV + e+ in Absorber 733.675 keV in Gap 827.494 keV Total track length of e+/e- in an event : - Absorber 50.5193 cm Gap 48.4697 cm + Absorber 42.4409 cm Gap 40.9812 cm Total number of steps of e+/e- in an event : - Absorber 1631.7 Gap 1505.9 + Absorber 1446.8 Gap 1367.9 ------------------------------------------------------------ Scores in parallel geometry layer eDep/evt nGamma/evt nElec/evt nPosi/evt stpLen/evt nStep/evt - 0 793.024 57.5 1794 1.2 829.857 2646.6 - 1 29.2932 9.1 93.2 0.3 95.6807 195 - 2 7.89954 2.2 47 0.3 28.0737 85.1 - 3 4.04918 1.8 31.7 0.1 9.03112 48.7 - 4 1.70351 0.3 23.8 0 2.88524 30.6 - 5 3.13708 1.1 24.2 0.2 8.99409 37.1 - 6 0.9436 0.2 13.9 0 2.16874 19.6 - 7 0.455112 0.1 9.6 0 0.485602 13.2 - 8 1.02879 0.1 9.4 0 3.69018 15.2 - 9 0.47612 0.2 6 0 0.897147 8.2 - 10 0.224993 0 3.6 0 0.554174 4.7 - 11 0.194514 0 2.9 0 0.595437 4 - 12 0.169351 0.1 3.7 0 0.229825 4.3 - 13 0.0455694 0 1.3 0 0.0361715 1.4 - 14 0.252419 0 3.3 0 0.37695 5.2 - 15 0.0692999 0 1.4 0 0.0702359 1.5 - 16 0.205377 0.1 2.5 0 0.353812 3.3 - 17 0.059276 0 1.8 0 0.0544481 1.8 - 18 1.53294 0.7 4.3 0.1 5.51196 8.3 - 19 0.16659 0 1.8 0 0.283356 2.3 + 0 753.145 48.4 1684.7 0.5 685.968 2389.8 + 1 22.9178 6.7 75.1 0.3 79.0745 163.8 + 2 7.90767 2.7 39.4 0.2 27.3976 68.6 + 3 4.94264 1.4 33.9 0.2 16.7343 56.8 + 4 1.73332 0.7 23.6 0 3.53076 31.4 + 5 3.69015 0.9 18.4 0 10.7712 30.1 + 6 1.07835 0.4 12 0 2.74197 16.6 + 7 0.496483 0.2 7 0 1.16342 9.7 + 8 0.191226 0 4.6 0 0.271286 6.8 + 9 0.354164 0 6.8 0 0.386845 8.2 + 10 0.545928 0.2 6.1 0 1.03249 7.8 + 11 0.790888 0.2 5.2 0 2.48037 8.4 + 12 0.0675242 0 2.9 0 0.0337332 3.3 + 13 0.0615859 0.1 1.3 0 0.0723459 1.5 + 14 0.890815 0.6 2.9 0 2.25766 5.4 + 15 0.138195 0 1.7 0 0.209642 4.1 + 16 0.0136212 0 0.5 0 0.00488403 0.6 + 17 0.064214 0 0.7 0 0.0819523 1.2 + 18 0.0186744 0 0.5 0 0.00757987 0.6 + 19 0 0 0 0 0 0 ############################################################ Region : Calor-B Production thresholds : gamma 100 um e- 100 um e+ 100 um Energy deposition in an event : - Absorber 595.105 MeV Gap 259.577 MeV + Absorber 538.52 MeV Gap 230.306 MeV Number of secondaries in an event : - gamma in Absorber 53.3 in Gap 14 - e- in Absorber 412.5 in Gap 215.2 - e+ in Absorber 1 in Gap 0.5 + gamma in Absorber 34.2 in Gap 7.8 + e- in Absorber 307.8 in Gap 170.6 + e+ in Absorber 0.9 in Gap 0.2 Minimum kinetic energy of generated secondaries : - gamma in Absorber 2.3491 keV in Gap 1.15784 keV - e- in Absorber 113.282 eV in Gap 106.099 eV - e+ in Absorber 405.986 keV in Gap 1.33754 MeV + gamma in Absorber 2.3487 keV in Gap 1.13219 keV + e- in Absorber 113.719 eV in Gap 159.551 eV + e+ in Absorber 352.402 keV in Gap 31.7914 MeV Total track length of e+/e- in an event : - Absorber 50.3585 cm Gap 46.9645 cm + Absorber 37.1589 cm Gap 31.0624 cm Total number of steps of e+/e- in an event : - Absorber 754.4 Gap 425.9 + Absorber 564.1 Gap 300.4 ------------------------------------------------------------ Scores in parallel geometry layer eDep/evt nGamma/evt nElec/evt nPosi/evt stpLen/evt nStep/evt - 0 807.122 57 424.5 0.9 827.081 847.7 - 1 26.4883 6.1 47.4 0.4 90.3887 108.3 - 2 10.0733 1.7 37.4 0 32.4118 66.6 - 3 2.70069 0.6 26.9 0.1 5.56859 36.8 - 4 2.8193 0.8 19.9 0 6.02826 28.7 - 5 1.28801 0.4 15.9 0 3.97078 24.2 - 6 0.841962 0.2 11.4 0.1 2.32673 15 - 7 0.712279 0 9.5 0 1.21512 11.1 - 8 0.27373 0 6.7 0 0.317157 7.3 - 9 0.581481 0.1 6 0 0.932896 7.2 - 10 0.214299 0 3.7 0 0.363906 4.4 - 11 0.241297 0 3.5 0 0.22378 4.1 - 12 0.462932 0.1 2.6 0 1.14887 4 - 13 0.204397 0.1 3.4 0 0.212986 4.2 - 14 0.0538057 0 1.8 0 0.0274146 2.1 - 15 0.101464 0 1.6 0 0.121352 1.8 - 16 0.044573 0 0.9 0 0.0472837 1 - 17 0.0559909 0 1 0 0.0944923 1.1 - 18 0.0304629 0 1.3 0 0.016996 1.4 - 19 0.0513452 0.1 1 0 0.0527761 1.3 + 0 741.102 35 354.2 0.6 608.062 672 + 1 14.9708 5.2 33.5 0.5 40.8923 63.9 + 2 6.09035 1.2 20.7 0 18.0816 35.5 + 3 2.26613 0.3 13.5 0 5.74094 23.6 + 4 0.44282 0 8.6 0 0.67612 9.8 + 5 0.765354 0 10.2 0 1.13407 12.3 + 6 1.08668 0 9.2 0 3.61044 11.9 + 7 0.839604 0.3 5.9 0 2.24363 9.2 + 8 0.374962 0 3.3 0 0.820106 4.6 + 9 0.118705 0 2.8 0 0.137405 3.2 + 10 0.190042 0 2.8 0 0.235701 3.3 + 11 0.0715621 0 0.8 0 0.156254 0.9 + 12 0.0436695 0 1.3 0 0.04137 1.4 + 13 0.180372 0 2.4 0 0.187779 2.6 + 14 0.0470512 0 1.1 0 0.0410691 1.3 + 15 0.0564005 0 2.6 0 0.0306559 2.9 + 16 0.0143579 0 0.8 0 0.00420542 0.9 + 17 0.0147929 0 0.9 0 0.00429595 1 + 18 0.0478342 0 1.4 0 0.0353442 1.6 + 19 0.00958035 0 0.9 0 0.00286521 0.9 ############################################################ Region : Calor-C Production thresholds : gamma 1 mm e- 1 mm e+ 1 mm Energy deposition in an event : - Absorber 625.564 MeV Gap 265.174 MeV + Absorber 704.058 MeV Gap 319.763 MeV Number of secondaries in an event : - gamma in Absorber 51.8 in Gap 11.6 - e- in Absorber 273 in Gap 119.4 - e+ in Absorber 2.5 in Gap 0.4 + gamma in Absorber 70.9 in Gap 20.8 + e- in Absorber 396.3 in Gap 184.4 + e+ in Absorber 3.1 in Gap 1 Minimum kinetic energy of generated secondaries : - gamma in Absorber 7.07923 keV in Gap 3.05725 keV - e- in Absorber 101.874 eV in Gap 139.808 eV - e+ in Absorber 122.812 keV in Gap 7.37788 MeV + gamma in Absorber 7.06396 keV in Gap 2.93924 keV + e- in Absorber 107.876 eV in Gap 143.427 eV + e+ in Absorber 191.97 keV in Gap 131.891 keV Total track length of e+/e- in an event : - Absorber 52.1373 cm Gap 46.6686 cm + Absorber 70.4635 cm Gap 75.8072 cm Total number of steps of e+/e- in an event : - Absorber 571.7 Gap 278.9 + Absorber 800.2 Gap 415.6 ------------------------------------------------------------ Scores in parallel geometry layer eDep/evt nGamma/evt nElec/evt nPosi/evt stpLen/evt nStep/evt - 0 822.002 51.1 138.6 2.1 786.778 465.9 - 1 37.584 7.2 49 0.5 116.463 110.9 - 2 11.8859 2.2 49.7 0.2 34.6437 68.5 - 3 4.46113 0.9 32.2 0.1 12.4679 42.7 - 4 4.66085 0.6 26.7 0 12.2543 34.2 - 5 2.23439 0.1 25.9 0 5.46285 31.4 - 6 0.631639 0 16.5 0 0.637368 19 - 7 1.35121 0.2 10.4 0 3.69004 20 - 8 1.22403 0 8.6 0 3.64453 10.7 - 9 1.54481 0.5 8.7 0 4.9885 11.7 - 10 1.73719 0.3 6.2 0 4.37516 8.9 - 11 0.622882 0 3.8 0 1.77233 5.7 - 12 0.337802 0 5.5 0 0.357564 7.3 - 13 0.150336 0.1 3.9 0 0.110553 5.2 - 14 0.179318 0.1 3 0 0.295092 3.9 - 15 0.0439066 0.1 1.5 0 0.0201232 1.9 - 16 0.0170146 0 0.9 0 0.00682534 1 - 17 0.0613513 0 0.8 0 0.0896161 1.1 - 18 0.00808667 0 0.5 0 0.00230322 0.6 - 19 0 0 0 0 0 0 + 0 904.424 70.5 173.7 2.5 1095.98 584.5 + 1 56.1562 11.4 79.7 0.6 184.842 167.7 + 2 20.0452 3.2 61.6 0.2 63.7514 96.6 + 3 14.0023 2.1 57.8 0.3 42.713 86.4 + 4 8.8322 1.5 50.6 0.1 22.7907 70.1 + 5 7.70976 1.6 36.3 0.2 22.6349 53.4 + 6 5.94264 1.1 27.2 0.2 17.7309 44.5 + 7 0.888171 0 20.5 0 1.10561 23.2 + 8 1.05145 0.1 16.3 0 1.82502 20.5 + 9 0.956593 0 11.9 0 1.61088 14.5 + 10 0.616778 0 11.1 0 0.823558 14.1 + 11 0.643169 0.1 6.8 0 1.34987 7.7 + 12 0.227 0 4.1 0 0.258358 4.8 + 13 0.183779 0 4.8 0 0.154414 5.6 + 14 0.661615 0 4.7 0 1.9524 5.9 + 15 0.0395653 0 1.9 0 0.0151225 2 + 16 0.212566 0.1 2.9 0 0.401413 3.5 + 17 0.243546 0 2.4 0 0.381821 2.8 + 18 0.426524 0 3.4 0 1.2994 4.3 + 19 0.42533 0 1.7 0 0.916155 2.3 ############################################################ /run/dumpCouples @@ -2271,5 +2281,5 @@ Graphics systems deleted. Visualization Manager deleting... ================== Deleting memory pools =================== Number of memory pools allocated: 14 of which, static: 0 -Dynamic pools deleted: 14 / Total memory freed: 0.81 MB +Dynamic pools deleted: 14 / Total memory freed: 0.82 MB ============================================================ diff --git a/examples/extended/runAndEvent/RE07/processes.out b/examples/extended/runAndEvent/RE07/processes.out index e5e49def5c4..762f136cb24 100644 --- a/examples/extended/runAndEvent/RE07/processes.out +++ b/examples/extended/runAndEvent/RE07/processes.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 diff --git a/examples/extended/runAndEvent/RE07/specialized.out b/examples/extended/runAndEvent/RE07/specialized.out index d1f61e152e9..6e8f61cbd80 100644 --- a/examples/extended/runAndEvent/RE07/specialized.out +++ b/examples/extended/runAndEvent/RE07/specialized.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 diff --git a/examples/extended/runAndEvent/RE07/tracking.out b/examples/extended/runAndEvent/RE07/tracking.out index 2e700fd4936..a4b7dbeb0ca 100644 --- a/examples/extended/runAndEvent/RE07/tracking.out +++ b/examples/extended/runAndEvent/RE07/tracking.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 diff --git a/examples/extended/visualization/movies/movies.out b/examples/extended/visualization/movies/movies.out index b4fb91b197a..9ee9640d3a3 100644 --- a/examples/extended/visualization/movies/movies.out +++ b/examples/extended/visualization/movies/movies.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -45,7 +45,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -240,7 +242,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -272,7 +274,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -304,7 +306,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -317,7 +319,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -363,7 +364,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -395,7 +396,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -427,7 +428,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -459,7 +460,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -491,7 +492,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -523,7 +524,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -555,7 +556,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -940,12 +941,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 diff --git a/examples/extended/visualization/perspective/History b/examples/extended/visualization/perspective/History index 661ace1a174..84509274afe 100644 --- a/examples/extended/visualization/perspective/History +++ b/examples/extended/visualization/perspective/History @@ -5,6 +5,14 @@ which **must** added in reverse chronological order (newest at the top). It must be used as a substitute for writing good git commit messages! +## 2023-03-28 John Allison (exam-ext-vis-persp-V11-01-01) +- PerspectiveVisAction.hh: + - Remove unnecessary forward class declarations. + - clang-format. + +## 2023-02-02 Igor Semeniouk (exam-ext-vis-persp-V11-01-00) +- PerspectiveVisAction.hh - fix missing include for G4Transform3D + ## 2021-12-10 Ben Morgan (exam-ext-vis-persp-V11-00-00) - Change to new Markdown History format diff --git a/examples/extended/visualization/perspective/include/PerspectiveVisAction.hh b/examples/extended/visualization/perspective/include/PerspectiveVisAction.hh index 8d9095e0055..5cf6848a7f5 100644 --- a/examples/extended/visualization/perspective/include/PerspectiveVisAction.hh +++ b/examples/extended/visualization/perspective/include/PerspectiveVisAction.hh @@ -31,46 +31,41 @@ #ifndef PERSPECTIVEVISACTION_HH #define PERSPECTIVEVISACTION_HH +#include "G4String.hh" +#include "G4Transform3D.hh" #include "G4VUserVisAction.hh" -#include "G4String.hh" #include #include -/* -class G4AttDef; -class G4AttValue; -*/ - class G4VVisManager; class G4VSolid; class G4VisAttributes; -class PerspectiveVisAction: public G4VUserVisAction { -public: - PerspectiveVisAction(); - void SetOptionString(const G4String& optionString) - {fOptionString = optionString;} - void SetScene(const G4String& scene) - {fScene = scene;} - virtual void Draw(); -private: - void ExtendedDraw (const G4VSolid&, const G4VisAttributes&, - const G4Transform3D& objectTransformation = G4Transform3D()); - void RoomAndChair(); - void Chair(const G4VisAttributes&, const G4Transform3D&); - G4VVisManager* fpVisManager; - G4String fOptionString; - G4String fScene; - G4double fRoomX, fRoomY, fRoomZ, // Half lengths. - fWindowX, fWindowY, fWindowZ, fWindowSillHeight, fWindowOffset, - fDoorFrameX, fDoorFrameY, fDoorFrameZ, fDoorFrameOffset, - fDoorX, fDoorY, fDoorZ, - fChairX, // Half width. - fChairY, // Half depth. - fChairZ, // Half height. - fChairSeat, // Half height of top of seat. - fChairThickness; // Half thicknes of back, seat, legs. +class PerspectiveVisAction : public G4VUserVisAction +{ + public: + PerspectiveVisAction(); + void SetOptionString(const G4String& optionString) { fOptionString = optionString; } + void SetScene(const G4String& scene) { fScene = scene; } + virtual void Draw(); + + private: + void ExtendedDraw(const G4VSolid&, const G4VisAttributes&, + const G4Transform3D& objectTransformation = G4Transform3D()); + void RoomAndChair(); + void Chair(const G4VisAttributes&, const G4Transform3D&); + G4VVisManager* fpVisManager; + G4String fOptionString; + G4String fScene; + G4double fRoomX, fRoomY, fRoomZ, // Half lengths. + fWindowX, fWindowY, fWindowZ, fWindowSillHeight, fWindowOffset, fDoorFrameX, fDoorFrameY, + fDoorFrameZ, fDoorFrameOffset, fDoorX, fDoorY, fDoorZ, + fChairX, // Half width. + fChairY, // Half depth. + fChairZ, // Half height. + fChairSeat, // Half height of top of seat. + fChairThickness; // Half thicknes of back, seat, legs. }; #endif diff --git a/examples/extended/visualization/standalone/.README.txt b/examples/extended/visualization/standalone/.README.txt index ea50f009661..76ce9ddd55b 100644 --- a/examples/extended/visualization/standalone/.README.txt +++ b/examples/extended/visualization/standalone/.README.txt @@ -7,28 +7,35 @@ examples/extended/visualization/standalone This example illustrates how one might use the Geant4 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. +System as a "standalone" graphics library and viewer, i.e, without +the overhead of the run manager and all the actions and physics. + +It makes use of the "user action" feature of the Geant4 vis manager - for +a simple example see examples/extended/visualization/userVisAction. You +have to encapsulate your drawing in a vis action so that the vis manager +can call it and re-call it as appropriate. + +1) Define a G4VUserVisAction that implements a Draw method. Two + examples are provided: + - StandaloneVisAction: + - a simple box; + - a Boolean solid; + - an alternative way of drawing a solid by obtaining the + polyhedral representation (included for interest, not as a + recommendation). + - DrawGeometryVisAction: + - Shows how to visualise your geometry alone, i.e., without the + run manager and the physics stuff. -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. +2) In the main program, the vis actions must be instantiated and + registered with the visualization manager. You may (optionally) + specify an extent 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. +3) To visualise, you need: + - /vis/scene/add/userAction + +4) Use the usual Geant4 vis commands to create a scene + and view (including the above command) - 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 @@ -37,5 +44,5 @@ be specified as suggested above or by using /vis/scene/add/extent. John Allison -27th November 2014 +30th December 2022 */ diff --git a/examples/extended/visualization/standalone/History b/examples/extended/visualization/standalone/History index 08e542d7a69..d8c7559c2b0 100644 --- a/examples/extended/visualization/standalone/History +++ b/examples/extended/visualization/standalone/History @@ -5,6 +5,12 @@ which **must** added in reverse chronological order (newest at the top). It must be used as a substitute for writing good git commit messages! +## 2022-12-30 John Allison (exam-ext-vis-standalone-V11-01-00) +- Include an example of DrawGeometry. + - DrawGeometryVisAction: + - Shows how to visualise your geometry alone, i.e., without the + run manager and the physics stuff. + ## 2022-11-04 John Allison (exam-ext-vis-standalone-V11-00-01) - Fix typo in README files diff --git a/examples/extended/visualization/standalone/README b/examples/extended/visualization/standalone/README index e7feb8bad2b..0ea4cd578e8 100644 --- a/examples/extended/visualization/standalone/README +++ b/examples/extended/visualization/standalone/README @@ -6,34 +6,41 @@ ------------------------------------------ This example illustrates how one might use the Geant4 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. +System as a "standalone" graphics library and viewer, i.e, without +the overhead of the run manager and all the actions and physics. + +It makes use of the "user action" feature of the Geant4 vis manager - for +a simple example see examples/extended/visualization/userVisAction. You +have to encapsulate your drawing in a vis action so that the vis manager +can call it and re-call it as appropriate. + +1) Define a G4VUserVisAction that implements a Draw method. Two + examples are provided: + - StandaloneVisAction: + - a simple box; + - a Boolean solid; + - an alternative way of drawing a solid by obtaining the + polyhedral representation (included for interest, not as a + recommendation). + - DrawGeometryVisAction: + - Shows how to visualise your geometry alone, i.e., without the + run manager and the physics stuff. -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. +2) In the main program, the vis actions must be instantiated and + registered with the visualization manager. You may (optionally) + specify an extent to assist the viewers to locate the objects. + +3) To visualise, you need: + - /vis/scene/add/userAction -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. +4) Use the usual Geant4 vis commands to create a scene + and view (including the above command) - 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 +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 +30th December 2022 diff --git a/examples/extended/visualization/standalone/include/DetectorConstruction.hh b/examples/extended/visualization/standalone/include/DetectorConstruction.hh new file mode 100644 index 00000000000..900c4c416d1 --- /dev/null +++ b/examples/extended/visualization/standalone/include/DetectorConstruction.hh @@ -0,0 +1,62 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +/// \file DetectorConstruction.hh +/// \brief Definition of the B1::DetectorConstruction class + +#ifndef B1DetectorConstruction_h +#define B1DetectorConstruction_h 1 + +#include "G4VUserDetectorConstruction.hh" +#include "globals.hh" + +class G4VPhysicalVolume; +class G4LogicalVolume; + +/// Detector construction class to define materials and geometry. + +namespace B1 +{ + +class DetectorConstruction : public G4VUserDetectorConstruction +{ + public: + DetectorConstruction() = default; + ~DetectorConstruction() override = default; + + G4VPhysicalVolume* Construct() override; + + G4LogicalVolume* GetScoringVolume() const { return fScoringVolume; } + + protected: + G4LogicalVolume* fScoringVolume = nullptr; +}; + +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +#endif diff --git a/examples/extended/visualization/standalone/include/DrawGeometryVisAction.hh b/examples/extended/visualization/standalone/include/DrawGeometryVisAction.hh new file mode 100644 index 00000000000..ccd5232fabc --- /dev/null +++ b/examples/extended/visualization/standalone/include/DrawGeometryVisAction.hh @@ -0,0 +1,57 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file visualization/standalone/include/DrawGeometryVisAction.hh +/// \brief Definition of the DrawGeometryVisAction class +// +// + +#ifndef DRAWGEOMETRYVISACTION_HH +#define DRAWGEOMETRYVISACTION_HH + +#include "G4VUserVisAction.hh" + +namespace B1 { // Taken from example/basic/B1 + class DetectorConstruction; +} +class G4VPhysicalVolume; +#include "G4Transform3D.hh" +#include "G4VisExtent.hh" + +class DrawGeometryVisAction: public G4VUserVisAction { +public: + DrawGeometryVisAction(); + ~DrawGeometryVisAction(); + void Draw() override; + const G4VisExtent& GetVisxtent() const {return fExtent;} +private: + B1::DetectorConstruction* fDetectorConstruction; + G4VPhysicalVolume* fPhysicalVolume; + G4Transform3D fTransform; + G4VisExtent fExtent; +}; + +#endif + diff --git a/examples/extended/visualization/standalone/include/StandaloneVisAction.hh b/examples/extended/visualization/standalone/include/StandaloneVisAction.hh index 5cbcbb42f9f..e315a5cef6e 100644 --- a/examples/extended/visualization/standalone/include/StandaloneVisAction.hh +++ b/examples/extended/visualization/standalone/include/StandaloneVisAction.hh @@ -33,8 +33,15 @@ #include "G4VUserVisAction.hh" +class G4Polyhedron; + class StandaloneVisAction: public G4VUserVisAction { - virtual void Draw(); +public: + StandaloneVisAction(); + ~StandaloneVisAction(); + void Draw() override; +private: + G4Polyhedron* fpSubtractedPolyhedron; }; #endif diff --git a/examples/extended/visualization/standalone/src/DetectorConstruction.cc b/examples/extended/visualization/standalone/src/DetectorConstruction.cc new file mode 100644 index 00000000000..aeec3cadcd2 --- /dev/null +++ b/examples/extended/visualization/standalone/src/DetectorConstruction.cc @@ -0,0 +1,170 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +/// \file DetectorConstruction.cc +/// \brief Implementation of the B1::DetectorConstruction class + +#include "DetectorConstruction.hh" + +#include "G4RunManager.hh" +#include "G4NistManager.hh" +#include "G4Box.hh" +#include "G4Cons.hh" +#include "G4Orb.hh" +#include "G4Sphere.hh" +#include "G4Trd.hh" +#include "G4LogicalVolume.hh" +#include "G4PVPlacement.hh" +#include "G4SystemOfUnits.hh" + +namespace B1 +{ + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4VPhysicalVolume* DetectorConstruction::Construct() +{ + // Get nist material manager + G4NistManager* nist = G4NistManager::Instance(); + + // Envelope parameters + // + G4double env_sizeXY = 20*cm, env_sizeZ = 30*cm; + G4Material* env_mat = nist->FindOrBuildMaterial("G4_WATER"); + + // Option to switch on/off checking of volumes overlaps + // + G4bool checkOverlaps = true; + + // + // World + // + G4double world_sizeXY = 1.2*env_sizeXY; + G4double world_sizeZ = 1.2*env_sizeZ; + G4Material* world_mat = nist->FindOrBuildMaterial("G4_AIR"); + + auto solidWorld = new G4Box("World", // its name + 0.5 * world_sizeXY, 0.5 * world_sizeXY, 0.5 * world_sizeZ); // its size + + auto logicWorld = new G4LogicalVolume(solidWorld, // its solid + world_mat, // its material + "World"); // its name + + auto physWorld = new G4PVPlacement(nullptr, // no rotation + G4ThreeVector(), // at (0,0,0) + logicWorld, // its logical volume + "World", // its name + nullptr, // its mother volume + false, // no boolean operation + 0, // copy number + checkOverlaps); // overlaps checking + + // + // Envelope + // + auto solidEnv = new G4Box("Envelope", // its name + 0.5 * env_sizeXY, 0.5 * env_sizeXY, 0.5 * env_sizeZ); // its size + + auto logicEnv = new G4LogicalVolume(solidEnv, // its solid + env_mat, // its material + "Envelope"); // its name + + new G4PVPlacement(nullptr, // no rotation + G4ThreeVector(), // at (0,0,0) + logicEnv, // its logical volume + "Envelope", // its name + logicWorld, // its mother volume + false, // no boolean operation + 0, // copy number + checkOverlaps); // overlaps checking + + // + // Shape 1 + // + G4Material* shape1_mat = nist->FindOrBuildMaterial("G4_A-150_TISSUE"); + G4ThreeVector pos1 = G4ThreeVector(0, 2*cm, -7*cm); + + // Conical section shape + G4double shape1_rmina = 0.*cm, shape1_rmaxa = 2.*cm; + G4double shape1_rminb = 0.*cm, shape1_rmaxb = 4.*cm; + G4double shape1_hz = 3.*cm; + G4double shape1_phimin = 0.*deg, shape1_phimax = 360.*deg; + auto solidShape1 = new G4Cons("Shape1", shape1_rmina, shape1_rmaxa, shape1_rminb, shape1_rmaxb, + shape1_hz, shape1_phimin, shape1_phimax); + + auto logicShape1 = new G4LogicalVolume(solidShape1, // its solid + shape1_mat, // its material + "Shape1"); // its name + + new G4PVPlacement(nullptr, // no rotation + pos1, // at position + logicShape1, // its logical volume + "Shape1", // its name + logicEnv, // its mother volume + false, // no boolean operation + 0, // copy number + checkOverlaps); // overlaps checking + + // + // Shape 2 + // + G4Material* shape2_mat = nist->FindOrBuildMaterial("G4_BONE_COMPACT_ICRU"); + G4ThreeVector pos2 = G4ThreeVector(0, -1*cm, 7*cm); + + // Trapezoid shape + G4double shape2_dxa = 12*cm, shape2_dxb = 12*cm; + G4double shape2_dya = 10*cm, shape2_dyb = 16*cm; + G4double shape2_dz = 6*cm; + auto solidShape2 = new G4Trd("Shape2", // its name + 0.5 * shape2_dxa, 0.5 * shape2_dxb, 0.5 * shape2_dya, 0.5 * shape2_dyb, + 0.5 * shape2_dz); // its size + + auto logicShape2 = new G4LogicalVolume(solidShape2, // its solid + shape2_mat, // its material + "Shape2"); // its name + + new G4PVPlacement(nullptr, // no rotation + pos2, // at position + logicShape2, // its logical volume + "Shape2", // its name + logicEnv, // its mother volume + false, // no boolean operation + 0, // copy number + checkOverlaps); // overlaps checking + + // Set Shape2 as scoring volume + // + fScoringVolume = logicShape2; + + // + //always return the physical World + // + return physWorld; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +} diff --git a/examples/extended/visualization/standalone/src/DrawGeometryVisAction.cc b/examples/extended/visualization/standalone/src/DrawGeometryVisAction.cc new file mode 100644 index 00000000000..448c5b0b5ae --- /dev/null +++ b/examples/extended/visualization/standalone/src/DrawGeometryVisAction.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. * +// ******************************************************************** +// +/// \file visualization/standalone/src/DrawGeometryVisAction.cc +/// \brief Implementation of the DrawGeometryVisAction class +// +// + +#include "DrawGeometryVisAction.hh" + +#include "G4VVisManager.hh" +#include "DetectorConstruction.hh" +#include "G4VPhysicalVolume.hh" +#include "G4LogicalVolume.hh" +#include "G4VSolid.hh" +#include "G4SystemOfUnits.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +DrawGeometryVisAction::DrawGeometryVisAction() { + // Get a physical volume from your detector construction + fDetectorConstruction = new B1::DetectorConstruction(); + // (I think, properly, we should delete this in the destructor.) + fPhysicalVolume = fDetectorConstruction->Construct(); + // (I think the deletion of constructed volumes is handled by the volume stores.) + // Give this an overall transform to avoid clash with other vis action(s) + fTransform = G4Translate3D(-20*cm,20*cm,0); + fExtent = fPhysicalVolume->GetLogicalVolume()->GetSolid()->GetExtent().Transform(fTransform); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +DrawGeometryVisAction::~DrawGeometryVisAction() { + delete fDetectorConstruction; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void DrawGeometryVisAction::Draw() { + G4VVisManager* pVisManager = G4VVisManager::GetConcreteInstance(); + if (pVisManager) { + pVisManager->DrawGeometry(fPhysicalVolume,fTransform); + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/visualization/standalone/src/StandaloneVisAction.cc b/examples/extended/visualization/standalone/src/StandaloneVisAction.cc index 63ed290d11a..96e12816fed 100644 --- a/examples/extended/visualization/standalone/src/StandaloneVisAction.cc +++ b/examples/extended/visualization/standalone/src/StandaloneVisAction.cc @@ -39,34 +39,45 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +StandaloneVisAction::StandaloneVisAction() { + auto pA = G4Box("boxA",3*cm,3*cm,3*cm).CreatePolyhedron(); + auto pB = G4Box("boxB",1*cm,1*cm,1*cm).CreatePolyhedron(); + pB->Transform(G4Translate3D(3*cm,3*cm,3*cm)); + fpSubtractedPolyhedron = new G4Polyhedron(pA->subtract(*pB)); + G4VisAttributes subVisAtts(G4Colour(0,1,1)); + fpSubtractedPolyhedron->SetVisAttributes(subVisAtts); + delete pA; + delete pB; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +StandaloneVisAction::~StandaloneVisAction() { + delete fpSubtractedPolyhedron; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + void StandaloneVisAction::Draw() { G4VVisManager* pVisManager = G4VVisManager::GetConcreteInstance(); if (pVisManager) { // Simple box... - pVisManager->Draw(G4Box("box",2*m,2*m,2*m), + pVisManager->Draw(G4Box("box",2*cm,2*cm,2*cm), G4VisAttributes(G4Colour(1,1,0))); // Boolean solid... - G4Box boxA("boxA",3*m,3*m,3*m); - G4Box boxB("boxB",1*m,1*m,1*m); + G4Box boxA("boxA",3*cm,3*cm,3*cm); + G4Box boxB("boxB",1*cm,1*cm,1*cm); G4SubtractionSolid subtracted("subtracted_boxes",&boxA,&boxB, - G4Translate3D(3*m,3*m,3*m)); + G4Translate3D(3*cm,3*cm,3*cm)); pVisManager->Draw(subtracted, G4VisAttributes(G4Colour(0,1,1)), - G4Translate3D(-6*m,-6*m,-6*m)); + G4Translate3D(-6*cm,-6*cm,-6*cm)); // Same, but explicit polyhedron... - G4Polyhedron* pA = G4Box("boxA",3*m,3*m,3*m).CreatePolyhedron(); - G4Polyhedron* pB = G4Box("boxB",1*m,1*m,1*m).CreatePolyhedron(); - pB->Transform(G4Translate3D(3*m,3*m,3*m)); - G4Polyhedron* pSubtracted = new G4Polyhedron(pA->subtract(*pB)); - G4VisAttributes subVisAtts(G4Colour(0,1,1)); - pSubtracted->SetVisAttributes(&subVisAtts); - pVisManager->Draw(*pSubtracted,G4Translate3D(6*m,6*m,6*m)); - delete pA; - delete pB; - delete pSubtracted; + // The heavy work is done in the constructor + pVisManager->Draw(*fpSubtractedPolyhedron,G4Translate3D(6*cm,6*cm,6*cm)); } } diff --git a/examples/extended/visualization/standalone/standalone.cc b/examples/extended/visualization/standalone/standalone.cc index 7b152ed60e7..fb19b3747a0 100644 --- a/examples/extended/visualization/standalone/standalone.cc +++ b/examples/extended/visualization/standalone/standalone.cc @@ -40,6 +40,7 @@ #include "G4SystemOfUnits.hh" #include "StandaloneVisAction.hh" +#include "DrawGeometryVisAction.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -48,17 +49,27 @@ int main(int argc,char** argv) { G4UIExecutive* ui = new G4UIExecutive(argc, argv); G4VisManager* visManager = new G4VisExecutive; - visManager->RegisterRunDurationUserVisAction - ("A standalone example - 3 boxes, 2 with boolean subtracted cutout", - new StandaloneVisAction, - G4VisExtent(-10*m,10*m,-10*m,10*m,-10*m,10*m)); visManager->Initialize (); + auto standaloneVisAction = new StandaloneVisAction; + visManager->RegisterRunDurationUserVisAction + ("A standalone example - 3 boxes, 2 with boolean subtracted cutout", + standaloneVisAction, + G4VisExtent(-10*cm,10*cm,-10*cm,10*cm,-10*cm,10*cm)); + + auto geometryVisAction = new DrawGeometryVisAction; + visManager->RegisterRunDurationUserVisAction + ("A detector geometry", + geometryVisAction, + geometryVisAction->GetVisxtent()); + G4UImanager::GetUIpointer()->ApplyCommand ("/control/execute standalone.mac"); ui->SessionStart(); - delete ui; + delete geometryVisAction; + delete standaloneVisAction; delete visManager; + delete ui; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/examples/extended/visualization/standalone/standalone.mac b/examples/extended/visualization/standalone/standalone.mac index 903f4518a2a..e1bc47407ac 100644 --- a/examples/extended/visualization/standalone/standalone.mac +++ b/examples/extended/visualization/standalone/standalone.mac @@ -7,3 +7,5 @@ /vis/scene/add/scale /vis/sceneHandler/attach /vis/viewer/flush +/vis/scene/list +#/vis/scene/activateModel to turn models on and off (see command guidance) diff --git a/examples/extended/visualization/userVisAction/run1.out b/examples/extended/visualization/userVisAction/run1.out index f95480e365e..1a1ef3598c1 100644 --- a/examples/extended/visualization/userVisAction/run1.out +++ b/examples/extended/visualization/userVisAction/run1.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -44,7 +44,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -212,7 +214,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -244,7 +246,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -276,7 +278,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -289,7 +291,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -335,7 +336,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -367,7 +368,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -399,7 +400,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -431,7 +432,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -463,7 +464,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -495,7 +496,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -527,7 +528,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -919,12 +920,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1200,7 +1210,7 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Run terminated. Run Summary Number of events processed : 5 - User=0.000000s Real=0.001780s Sys=0.000000s + User=0.000000s Real=0.001470s Sys=0.000000s --------------------End of Global Run----------------------- The run consists of 5 gamma of 6 MeV @@ -1307,11 +1317,11 @@ Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolu Step# X(mm) Y(mm) Z(mm) KinE(MeV) dE(MeV) StepLeng TrackLeng NextVolume ProcName 0 -7.44 14.5 -32.7 0.109 0 0 0 Envelope initStep - 1 -7.44 14.5 -32.7 0 0.109 0.000626 0.000626 Envelope ionIoni + 1 -7.44 14.5 -32.7 0 0.109 0.000954 0.000954 Envelope ionIoni Run terminated. Run Summary Number of events processed : 1 - User=0.000000s Real=0.000924s Sys=0.000000s + User=0.000000s Real=0.000754s Sys=0.000000s --------------------End of Global Run----------------------- The run consists of 1 proton of 210 MeV diff --git a/examples/extended/visualization/userVisAction/run2.out b/examples/extended/visualization/userVisAction/run2.out index 09b87a7815f..13868048cda 100644 --- a/examples/extended/visualization/userVisAction/run2.out +++ b/examples/extended/visualization/userVisAction/run2.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -44,7 +44,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -212,7 +214,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -244,7 +246,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -276,7 +278,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -289,7 +291,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -335,7 +336,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -367,7 +368,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -399,7 +400,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -431,7 +432,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -463,7 +464,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -495,7 +496,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -527,7 +528,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -919,12 +920,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -1018,7 +1028,7 @@ See commands in /vis/modeling/trajectories/ for other options. Run terminated. Run Summary Number of events processed : 1000 - User=0.030000s Real=0.031007s Sys=0.000000s + User=0.030000s Real=0.026203s Sys=0.000000s --------------------End of Global Run----------------------- The run consists of 1000 gamma of 6 MeV @@ -1093,11 +1103,11 @@ Index : 3 used in the geometry : Yes Run terminated. Run Summary Number of events processed : 1000 - User=0.240000s Real=0.248798s Sys=0.000000s + User=0.210000s Real=0.214312s Sys=0.000000s --------------------End of Global Run----------------------- The run consists of 1000 proton of 210 MeV - Dose in scoring volume : 4.91863 nanoGy +- 146.393 picoGy + Dose in scoring volume : 4.93724 nanoGy +- 146.024 picoGy ------------------------------------------------------------ Graphics systems deleted. @@ -1120,19 +1130,19 @@ G4RNGHelper object is deleted. ================== Deleting memory pools =================== Pool ID '20G4NavigationLevelRep', size : 0.0183 MB Pool ID '24G4ReferenceCountedHandleIvE', size : 0.000961 MB -Pool ID '17G4DynamicParticle', size : 0.00385 MB +Pool ID '17G4DynamicParticle', size : 0.00769 MB Pool ID '16G4SmartVoxelNode', size : 0.000961 MB Pool ID '17G4SmartVoxelProxy', size : 0.000961 MB Pool ID '7G4Event', size : 0.000961 MB Pool ID '15G4PrimaryVertex', size : 0.000961 MB Pool ID '17G4PrimaryParticle', size : 0.000961 MB -Pool ID '7G4Track', size : 0.00769 MB +Pool ID '7G4Track', size : 0.0144 MB Pool ID '18G4TouchableHistory', size : 0.00192 MB Pool ID '15G4CountedObjectIvE', size : 0.000961 MB Pool ID '10G4Fragment', size : 0.00192 MB Pool ID '17G4ReactionProduct', size : 0.00192 MB Number of memory pools allocated: 13 of which, static: 0 -Dynamic pools deleted: 13 / Total memory freed: 0.042 MB +Dynamic pools deleted: 13 / Total memory freed: 0.053 MB ============================================================ G4Allocator objects are deleted. UImanager deleted. diff --git a/examples/extended/visualization/userVisAction/userVisAction.out b/examples/extended/visualization/userVisAction/userVisAction.out index d889ed245e0..52eb9eb2d66 100644 --- a/examples/extended/visualization/userVisAction/userVisAction.out +++ b/examples/extended/visualization/userVisAction/userVisAction.out @@ -11,7 +11,7 @@ Environment variable "G4FORCE_RUN_MANAGER_TYPE" enabled with value == Serial. Fo ************************************************************** - Geant4 version Name: geant4-11-01-patch-02 (15-June-2023) + Geant4 version Name: geant4-11-01-ref-06 (30-June-2023) Copyright : Geant4 Collaboration References : NIM A 506 (2003), 250-303 : IEEE-TNS 53 (2006), 270-278 @@ -44,7 +44,9 @@ Registered graphics systems are: Qt3D (Qt3D) TOOLSSG_X11_GLES (TSG_X11_GLES, TSGX11, TSG_XT_GLES_FALLBACK) TOOLSSG_XT_GLES (TSG_XT_GLES, TSGXt, TSG_QT_GLES_FALLBACK) + TOOLSSG_XT_ZB (TSG_XT_ZB, TSGXtZB) TOOLSSG_QT_GLES (TSG_QT_GLES, TSGQt, TSG) + TOOLSSG_QT_ZB (TSG_QT_ZB, TSGQtZB) Registering model factories... @@ -202,7 +204,7 @@ eBrem: for e- XStype:4 SubType=3 CoulombScat: for e- XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -234,7 +236,7 @@ annihil: for e+ XStype:2 SubType=5 BuildTable=0 CoulombScat: for e+ XStype:1 SubType=1 BuildTable=1 Lambda table from 100 MeV to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 100 MeV Emax= 100 TeV @@ -266,7 +268,7 @@ hPairProd: for proton XStype:1 SubType=4 CoulombScat: for proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -279,7 +281,6 @@ ionIoni: for GenericIon XStype:3 SubType=2 dE/dx and range tables from 100 eV to 100 TeV in 84 bins Lambda tables from threshold to 100 TeV, 7 bins/decade, spline: 1 StepFunction=(0.2, 0.1 mm), integ: 3, fluct: 1, linLossLim= 0.02 - Stopping Power data for 17 ion/material pairs ===== EM models for the G4Region DefaultRegionForTheWorld ====== BraggIon : Emin= 0 eV Emax= 2 MeV BetheBloch : Emin= 2 MeV Emax= 100 TeV @@ -325,7 +326,7 @@ hPairProd: for anti_proton XStype:1 SubType=4 CoulombScat: for anti_proton XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -357,7 +358,7 @@ hPairProd: for kaon+ XStype:1 SubType=4 CoulombScat: for kaon+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -389,7 +390,7 @@ hPairProd: for kaon- XStype:1 SubType=4 CoulombScat: for kaon- XStype:1 SubType=1 BuildTable=1 Used Lambda table of kaon+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -421,7 +422,7 @@ muPairProd: for mu+ XStype:1 SubType=4 CoulombScat: for mu+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -453,7 +454,7 @@ muPairProd: for mu- XStype:1 SubType=4 CoulombScat: for mu- XStype:1 SubType=1 BuildTable=1 Used Lambda table of mu+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -485,7 +486,7 @@ hPairProd: for pi+ XStype:1 SubType=4 CoulombScat: for pi+ XStype:1 SubType=1 BuildTable=1 Lambda table from threshold to 100 TeV, 7 bins/decade, spline: 0 - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -517,7 +518,7 @@ hPairProd: for pi- XStype:1 SubType=4 CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 Used Lambda table of pi+ - ThetaMin(p) < Theta(degree) < 180 pLimit(GeV^1)= 0.139531 + ThetaMin(p) < Theta(degree) < 180, pLimit(GeV^1)= 0.139531 ===== EM models for the G4Region DefaultRegionForTheWorld ====== eCoulombScattering : Emin= 0 eV Emax= 100 TeV @@ -909,12 +910,21 @@ CoulombScat: for pi- XStype:1 SubType=1 BuildTable=1 ================================================================ ======================================================================= -====== Pre-compound/De-excitation Physics Parameters ======== +====== Geant4 Native Pre-compound Model Parameters ======== ======================================================================= Type of pre-compound inverse x-section 3 Pre-compound model active 1 Pre-compound excitation low energy 100 keV Pre-compound excitation high energy 30 MeV +Angular generator for pre-compound model 1 +Use NeverGoBack option for pre-compound model 0 +Use SoftCutOff option for pre-compound model 0 +Use CEM transitions for pre-compound model 1 +Use GNASH transitions for pre-compound model 0 +Use HETC submodel for pre-compound model 0 +======================================================================= +====== Nuclear De-excitation Module Parameters ======== +======================================================================= Type of de-excitation inverse x-section 3 Type of de-excitation factory Evaporation+GEM Number of de-excitation channels 68 @@ -964,7 +974,7 @@ See commands in /vis/modeling/trajectories/ for other options. --------------------End of Global Run----------------------- The run consists of 1000 proton of 210 MeV - Dose in scoring volume : 4.91863 nanoGy +- 146.393 picoGy + Dose in scoring volume : 4.93724 nanoGy +- 146.024 picoGy ------------------------------------------------------------ Graphics systems deleted. diff --git a/source/GNUmakefile b/source/GNUmakefile deleted file mode 100644 index 1e7c3027926..00000000000 --- a/source/GNUmakefile +++ /dev/null @@ -1,213 +0,0 @@ -# ----------------------------------------------------------------- -# "gmake" makes default libraries for each subdomain. -# "gmake global" makes global libraries for each subdomain. -# Composite libraries are built. -# "gmake includes" places header files .h/.hh in $G4INCLUDE -# "gmake libmap" forces rebuilding of map-file for granular libraries. -# "gmake dll" forces building of DLLs global libraries and generates DLLs on WIN32 -# "gmake clean_libs" removes just archive (.a) and shared (.so) libraries -# of current platform installation. -# "gmake clean" removes installation of current platform. -# "gmake clean_all" removes all platforms installations. -# -# (The .o files(s) are made by implicit rules.) - -ifndef G4INSTALL - G4INSTALL = .. -endif - -include $(G4INSTALL)/config/architecture.gmk - -SUBDIR1 = externals global intercoms analysis graphics_reps materials -SUBDIR2 = geometry particles track digits_hits processes parameterisations -SUBDIR2 += tracking event run error_propagation readout physics_lists -SUBDIR3 = persistency interfaces visualization - -SUBDIR4 = g3tog4 - -G4BINDIR := $(G4BIN)/$(G4SYSTEM) -G4LIBDIR := $(G4LIB)/$(G4SYSTEM) -G4TMPDIR := $(G4TMP)/$(G4SYSTEM) -unique := $(shell echo $$$$) - -.PHONY: all glob global obj kernel_global kernel liblist libmap dll win32def includes clean_libs clean clean_lists clean_all - -all: banner kernel -ifdef G4LIB_USE_G3TOG4 - @for dir in $(SUBDIR4); do (cd $$dir && $(MAKE)); done;: -endif - @$(MAKE) libmap - @$(ECHO) "Libraries installation completed !" - -glob global: banner kernel_global -ifdef G4LIB_USE_G3TOG4 - @for dir in $(SUBDIR4); do (cd $$dir && $(MAKE)); done;: -endif - @$(MAKE) liblist - @$(ECHO) "Libraries installation completed !" - -fpe_debug: banner kernel - @$(ECHO) Activating FPE debug build ... -ifneq (,$(findstring Linux-g++,$(G4SYSTEM))) - @rm -f $(G4TMPDIR)/G4run/G4RunManagerKernel.* - @cd $(G4INSTALL)/source/run; $(MAKE) G4FPE_DEBUG=1; - @cd $(G4INSTALL)/source; $(MAKE) libmap; - @$(ECHO) "Libraries installation completed !" -else - @$(ECHO) "Build of FPE check is only supported on Linux platforms with gcc !" - @$(ECHO) "The system you have currently selected is $(G4SYSTEM)." - @$(ECHO) "No actions taken !" -endif - -kernel_global: - @for dir in $(SUBDIR1); do (cd $$dir && $(MAKE) global); done;: - @for dir in $(SUBDIR2); do (cd $$dir && $(MAKE) global); done;: - @for dir in $(SUBDIR3); do (cd $$dir && $(MAKE) global); done;: - -kernel: - @for dir in $(SUBDIR1); do (cd $$dir && $(MAKE)); done;: - @for dir in $(SUBDIR2); do (cd $$dir && $(MAKE)); done;: - @for dir in $(SUBDIR3); do (cd $$dir && $(MAKE)); done;: - -obj: banner - @$(ECHO) Building all object files first ... - @for dir in $(SUBDIR1); do (cd $$dir && $(MAKE) obj); done;: - @for dir in $(SUBDIR2); do (cd $$dir && $(MAKE) obj); done;: - @for dir in $(SUBDIR3); do (cd $$dir && $(MAKE) obj); done;: -ifdef G4LIB_USE_G3TOG4 - @for dir in $(SUBDIR4); do (cd $$dir && $(MAKE) obj); done;: -endif - -libmap: liblist - @$(ECHO) "Libmap stage. Searching for GNUmakefiles and sorting ..." - @$(FIND) . \ - -name GNUmakefile -exec $(GREP) -l '^ *name *:=' {} \; \ - | $(SORT) \ - > /tmp/G4_all_lib_makefiles.$(unique); - @$(ECHO) "Weeding out paths and files ..." - @for i in `$(CAT) /tmp/G4_all_lib_makefiles.$(unique)`; \ - do \ - $(ECHO) $$i | $(GREP) -q -e '/tests\?/' -e 'models/verification' || \ - $(GREP) -q -e SUBDIR -e G4hepgeometry $$i || \ - $(ECHO) $$i >> /tmp/G4_granlib_makefiles.$(unique); \ - done - @$(ECHO) "Making libname.map starter file ..." - @$(TOUCH) /tmp/G4libname.map.starter.$(unique); - @for i in `$(CAT) /tmp/G4_granlib_makefiles.$(unique)`; \ - do \ - $(GREP) '^ *name *:=' $$i | $(CUT) -d \ -f 3 \ - >> /tmp/G4libname.map.starter.$(unique); \ - $(ECHO) $$i | $(SED) "s/^\\./source/" \ - >> /tmp/G4libname.map.starter.$(unique); \ - done - @$(ECHO) "Making libname.map ..." - @rm -f $(G4LIBDIR)/libname.map; - @G4TMP=$(G4TMP); export G4TMP; \ - $(G4LIBDIR)/liblist -l -d $(G4TMPDIR) \ - < /tmp/G4libname.map.starter.$(unique) \ - > $(G4LIBDIR)/libname.map - @rm -f /tmp/G4_all_lib_makefiles.$(unique); - @rm -f /tmp/G4_granlib_makefiles.$(unique); - @rm -f /tmp/G4libname.map.starter.$(unique); - -liblist: $(G4LIBDIR)/liblist - -$(G4LIBDIR)/liblist: $(G4INSTALL)/config/liblist.c - @$(ECHO) "Building library management utility liblist ..." - @if [ ! -d $(G4LIBDIR) ] ; then mkdir $(G4LIBDIR) ;fi - @$(CC) $(CCFLAGS) -o $(G4LIBDIR)/liblist $(G4INSTALL)/config/liblist.c - -clean_tmps: - @$(ECHO) "Clearing temporary objects ..." - @rm -rf $(G4LIBDIR)/*.def $(G4LIBDIR)/*.exp - @rm -rf $(G4TMPDIR)/* - -dll_build: banner genwindef -ifneq (,$(findstring WIN32-VC,$(G4SYSTEM))) - @$(ECHO) "Verifying existence of global libraries for DLLs ..." - @$(MAKE) kernel_global G4LIB_BUILD_DLL=1 -ifdef G4LIB_USE_G3TOG4 - @for dir in $(SUBDIR4); do (cd $$dir && $(MAKE) G4LIB_BUILD_DLL=1); done;: -endif - @$(ECHO) "Building Windows DLL libraries ..." - @$(MAKE) kernel_global G4LIB_BUILD_DLL=1 G4LIB_BUILD_SHARED=1 -ifdef G4LIB_USE_G3TOG4 - @for dir in $(SUBDIR4); do (cd $$dir && $(MAKE) G4LIB_BUILD_DLL=1 G4LIB_BUILD_SHARED=1); done;: -endif - @$(ECHO) "Done !" -endif - -dll: -ifneq (,$(findstring WIN32-VC,$(G4SYSTEM))) - @$(MAKE) dll_build - @$(MAKE) clean_tmps -else - @$(ECHO) "Sorry !" -endif - -genwindef: $(G4INSTALL)/config/genwindef.cc -ifneq (,$(findstring WIN32-VC,$(G4SYSTEM))) - @$(ECHO) "Building DLL management utility genwindef ..." - @if [ ! -d $(G4LIBDIR) ] ; then mkdir $(G4LIBDIR) ;fi - @$(CXX) $(CXXFLAGS) /Fe$(G4LIBDIR)/genwindef.exe $(G4INSTALL)/config/genwindef.cc -else - @$(ECHO) "Build of DLLs is only supported on Windows platforms !" - @$(ECHO) "The system you have currently selected is $(G4SYSTEM)." - @$(ECHO) "No actions taken !" -endif - -includes: - @$(ECHO) Installing header files in $(G4INCLUDE) ... - @for dir in $(SUBDIR1); do (cd $$dir && $(MAKE) $@); done - @for dir in $(SUBDIR2); do (cd $$dir && $(MAKE) $@); done - @for dir in $(SUBDIR3); do (cd $$dir && $(MAKE) $@); done -ifdef G4LIB_USE_G3TOG4 - @for dir in $(SUBDIR4); do (cd $$dir && $(MAKE) $@); done -endif - -banner: - @$(ECHO) "*************************************************************" - @$(ECHO) " Installation Geant4 version geant4-11-01-patch-02 " - @$(ECHO) " Copyright (C) 1994-2023 Geant4 Collaboration " - @$(ECHO) "*************************************************************" - -clean_libs:: - @$(ECHO) Removing all libraries ... - @for dir in $(SUBDIR1); do (cd $$dir && $(MAKE) clean_libs); done - @for dir in $(SUBDIR2); do (cd $$dir && $(MAKE) clean_libs); done - @for dir in $(SUBDIR3); do (cd $$dir && $(MAKE) clean_libs); done -ifdef G4LIB_USE_G3TOG4 - @for dir in $(SUBDIR4); do (cd $$dir && $(MAKE) clean_libs); done -endif - @rm -rf $(G4LIBDIR)/libname.map - -clean:: - @$(ECHO) Removing current $(G4SYSTEM) installation ... - @rm -rf $(G4TMPDIR) - @rm -rf $(G4LIBDIR) - @rm -rf $(G4BINDIR) - @rm -rf $(G4INSTALL)/source/interfaces/*/moc - @rm -rf $(G4INSTALL)/source/visualization/*/moc - @rm -rf $(G4INSTALL)/.config/bin/$(G4SYSTEM) -ifdef CFRONT - @rm -rf $(G4TREP) -endif - - -# Pay _extremely_ attention before executing the following target !! -# -clean_all:: - @$(ECHO) Removing all installations ... - @$(ECHO) Removing $(G4TMP) ... - @rm -rf $(G4TMP) - @$(ECHO) Removing $(G4LIB) ... - @rm -rf $(G4LIB) - @$(ECHO) Removing $(G4BIN) ... - @rm -rf $(G4BIN) - @$(ECHO) Removing $(G4INCLUDE) ... - @rm -rf $(G4INCLUDE) - @$(ECHO) Removing Qt moc source files ... - @rm -rf $(G4INSTALL)/source/interfaces/*/moc - @rm -rf $(G4INSTALL)/source/visualization/*/moc - @$(ECHO) Removing installation configurations ... - @rm -rf $(G4INSTALL)/.config diff --git a/source/analysis/GNUmakefile b/source/analysis/GNUmakefile deleted file mode 100644 index a6e122b45fc..00000000000 --- a/source/analysis/GNUmakefile +++ /dev/null @@ -1,26 +0,0 @@ -# -------------------------------------------------------------- -# - -name := G4analysis - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -GLOBLIBS = libG4intercoms.lib libG4global.lib libG4tools.lib -ifdef G4LIB_BUILD_EXPAT - GLOBLIBS += libG4expat.lib -endif -ifdef G4LIB_BUILD_ZLIB - GLOBLIBS += libG4zlib.lib -endif - -include $(G4INSTALL)/config/architecture.gmk - -SUBDIRS = management hntools csv root xml factory accumulables -SUBLIBS = G4analysismng G4hntools G4csv G4root G4xml G4analysisfac G4accumulables - -include $(G4INSTALL)/config/globlib.gmk - -includes:: - @for dir in $(SUBDIRS); do (cd $$dir && $(MAKE) $@ ); done diff --git a/source/analysis/History b/source/analysis/History index b890bac3912..e595ee3f328 100644 --- a/source/analysis/History +++ b/source/analysis/History @@ -6,11 +6,14 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-06-09 I. Hrivnacova (analysis-V11-00-28) +## 2023-06-09 I. Hrivnacova (analysis-V11-01-01) - Fixed creating histograms with user defined bins - bug report #2541 - Improved 'FillH*'' debug message +## 2022-12-12 Ben Morgan (analysis-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-11-28 I. Hrivnacova (analysis-V11-00-27) - Implemented analysis manager list command (missing in analysis-V11-00-10): /analysis/ntuple/list [onlyIfActive] diff --git a/source/analysis/accumulables/GNUmakefile b/source/analysis/accumulables/GNUmakefile deleted file mode 100644 index 5fd78a12cdc..00000000000 --- a/source/analysis/accumulables/GNUmakefile +++ /dev/null @@ -1,16 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for analysis/management sub-library. -# -------------------------------------------------------------------- - -name := G4accumulables - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/intercoms/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/analysis/csv/GNUmakefile b/source/analysis/csv/GNUmakefile deleted file mode 100644 index 47e46cd8f9f..00000000000 --- a/source/analysis/csv/GNUmakefile +++ /dev/null @@ -1,23 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for management/csv sub-library. -# -------------------------------------------------------------------- - -name := G4csv - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/externals/g4tools/include \ - -I$(G4BASE)/analysis/management/include \ - -I$(G4BASE)/analysis/hntools/include - -ifdef G4LIB_BUILD_ZLIB - CPPFLAGS += -I$(G4BASE)/externals/zlib/include -endif - -include $(G4INSTALL)/config/common.gmk diff --git a/source/analysis/factory/GNUmakefile b/source/analysis/factory/GNUmakefile deleted file mode 100644 index 570ccb24ea9..00000000000 --- a/source/analysis/factory/GNUmakefile +++ /dev/null @@ -1,22 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for analysis/management sub-library. -# -------------------------------------------------------------------- - -name := G4analysisfac - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/externals/g4tools/include \ - -I$(G4BASE)/analysis/management/include \ - -I$(G4BASE)/analysis/hntools/include \ - -I$(G4BASE)/analysis/csv/include \ - -I$(G4BASE)/analysis/root/include \ - -I$(G4BASE)/analysis/xml/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/analysis/hdf5/GNUmakefile b/source/analysis/hdf5/GNUmakefile deleted file mode 100644 index c8598bfbfac..00000000000 --- a/source/analysis/hdf5/GNUmakefile +++ /dev/null @@ -1,26 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for analysis/hdf5 library. -# -------------------------------------------------------------------- - -name := G4hdf5 - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -ifeq ($(G4SYSTEM), WIN32-VC) -CPPFLAGS += -I$(G4BASE)/externals/expat/include -endif -ifdef G4LIB_BUILD_EXPAT -CPPFLAGS += -I$(G4BASE)/externals/expat/include -endif - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/externals/g4tools/include \ - -I$(G4BASE)/analysis/management/include \ - -I$(G4BASE)/analysis/hntools/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/analysis/hntools/GNUmakefile b/source/analysis/hntools/GNUmakefile deleted file mode 100644 index 9b10204b010..00000000000 --- a/source/analysis/hntools/GNUmakefile +++ /dev/null @@ -1,18 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for analysis/hntools sub-library. -# -------------------------------------------------------------------- - -name := G4hntools - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/externals/g4tools/include \ - -I$(G4BASE)/analysis/management/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/analysis/management/GNUmakefile b/source/analysis/management/GNUmakefile deleted file mode 100644 index edef9fcd429..00000000000 --- a/source/analysis/management/GNUmakefile +++ /dev/null @@ -1,17 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for analysis/management sub-library. -# -------------------------------------------------------------------- - -name := G4analysismng - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/externals/g4tools/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/analysis/root/GNUmakefile b/source/analysis/root/GNUmakefile deleted file mode 100644 index 7abafeafcb8..00000000000 --- a/source/analysis/root/GNUmakefile +++ /dev/null @@ -1,24 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for analysis/root sub-library. -# -------------------------------------------------------------------- - -name := G4root - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/externals/g4tools/include \ - -I$(G4BASE)/analysis/management/include \ - -I$(G4BASE)/analysis/hntools/include - -ifdef G4LIB_BUILD_ZLIB - CPPFLAGS += -I$(G4BASE)/externals/zlib/include -endif - - -include $(G4INSTALL)/config/common.gmk diff --git a/source/analysis/xml/GNUmakefile b/source/analysis/xml/GNUmakefile deleted file mode 100644 index 3e045607d3d..00000000000 --- a/source/analysis/xml/GNUmakefile +++ /dev/null @@ -1,23 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for geometry/biasing library. Gabriele Cosmo, 25/03/02. -# -------------------------------------------------------------------- - -name := G4xml - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -ifdef G4LIB_BUILD_EXPAT -CPPFLAGS += -I$(G4BASE)/externals/expat/include -endif - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/externals/g4tools/include \ - -I$(G4BASE)/analysis/management/include \ - -I$(G4BASE)/analysis/hntools/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/digits_hits/GNUmakefile b/source/digits_hits/GNUmakefile deleted file mode 100644 index 8b646e2ea1a..00000000000 --- a/source/digits_hits/GNUmakefile +++ /dev/null @@ -1,18 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for digits+hits library. Makoto Asai, 1/11/96. -# -------------------------------------------------------------- - -name := G4digits_hits - -SUBDIRS := detector hits digits utils scorer -SUBLIBS = G4detector G4digits G4hits G4detutils G4detscorer - -GLOBLIBS = libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib libG4intercoms.lib -GLOBLIBS += libG4global.lib - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -include $(G4INSTALL)/config/globlib.gmk diff --git a/source/digits_hits/History b/source/digits_hits/History index 7d20b102b63..f57d06c8b0e 100644 --- a/source/digits_hits/History +++ b/source/digits_hits/History @@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2022-12-12 Ben Morgan (digits_hits-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-11-17 Gabriele Cosmo (digits_hits-V11-00-04) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/digits_hits/detector/GNUmakefile b/source/digits_hits/detector/GNUmakefile deleted file mode 100644 index 0c7a4a30c74..00000000000 --- a/source/digits_hits/detector/GNUmakefile +++ /dev/null @@ -1,29 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for digits+hits library. Makoto Asai, 1/11/96. -# -------------------------------------------------------------- - -name := G4detector - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4DIGI_ALLOC_EXPORT -CPPFLAGS += \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/biasing/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/intercoms/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/digits_hits/detector/History b/source/digits_hits/detector/History index 39681b71541..227c6e697c7 100644 --- a/source/digits_hits/detector/History +++ b/source/digits_hits/detector/History @@ -6,6 +6,12 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2022-12-22 Ben Morgan (det-V11-01-00) +- Apply standard clang-tidy plus range-based for and boolean simplification fixes +- General code tidy and modernization + - Use consistent, grouped ordering of public-protected-private members +- Move docstrings prior to function declarations for doxygen/IDE compatibility + ## 2022-11-17 Gabriele Cosmo (det-V11-00-01) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/digits_hits/detector/include/G4CellScoreComposer.hh b/source/digits_hits/detector/include/G4CellScoreComposer.hh index bc852f10130..412de8781a2 100644 --- a/source/digits_hits/detector/include/G4CellScoreComposer.hh +++ b/source/digits_hits/detector/include/G4CellScoreComposer.hh @@ -49,30 +49,24 @@ class G4Step; class G4CellScoreComposer { - public: // with description - G4CellScoreComposer(); - - ~G4CellScoreComposer(); - + public: + // get values for estimators based on track length void EstimatorCalculation(const G4Step& step); - // get values for estimators based on - // track length + // Called when a track enters the cell void TrackEnters(); - // to be called if a track enters the cell + // Called if the cell population is increased void NewTrackPopedUp(); - // to be caled if the cell popultion is increased + // Called for every collision in the cell, taking weight of the colliding particle void SetCollisionWeight(G4double weight); - // to be called for every collision - // in the cell with the weight of the colliding particle + // Set the importance of the cell void SetImportnace(G4double importance); - // informs G4CellScoreComposer about the importance of the cell + // Return scores stored in G4CellScoreValues const G4CellScoreValues& GetStandardCellScoreValues() const; - // return scores in G4CellScoreValues private: mutable G4CellScoreValues fSCScoreValues; diff --git a/source/digits_hits/detector/include/G4CellScoreValues.hh b/source/digits_hits/detector/include/G4CellScoreValues.hh index bf923c4681e..96401b9ef15 100644 --- a/source/digits_hits/detector/include/G4CellScoreValues.hh +++ b/source/digits_hits/detector/include/G4CellScoreValues.hh @@ -44,35 +44,19 @@ class G4CellScoreValues { public: - G4CellScoreValues() - : fSumSL(0) - , fSumSLW(0) - , fSumSLW_v(0) - , fSumSLWE(0) - , fSumSLWE_v(0) - , fSumTracksEntering(0) - , fSumPopulation(0) - , fSumCollisions(0) - , fSumCollisionsWeight(0) - , fNumberWeightedEnergy(0) - , fFluxWeightedEnergy(0) - , fAverageTrackWeight(0) - , fImportance(0) - {} - - G4double fSumSL; - G4double fSumSLW; - G4double fSumSLW_v; - G4double fSumSLWE; - G4double fSumSLWE_v; - G4int fSumTracksEntering; - G4int fSumPopulation; - G4int fSumCollisions; - G4double fSumCollisionsWeight; - G4double fNumberWeightedEnergy; - G4double fFluxWeightedEnergy; - G4double fAverageTrackWeight; - G4double fImportance; + G4double fSumSL = 0; + G4double fSumSLW = 0; + G4double fSumSLW_v = 0; + G4double fSumSLWE = 0; + G4double fSumSLWE_v = 0; + G4int fSumTracksEntering = 0; + G4int fSumPopulation = 0; + G4int fSumCollisions = 0; + G4double fSumCollisionsWeight = 0; + G4double fNumberWeightedEnergy = 0; + G4double fFluxWeightedEnergy = 0; + G4double fAverageTrackWeight = 0; + G4double fImportance = 0; }; #endif diff --git a/source/digits_hits/detector/include/G4CollectionNameVector.hh b/source/digits_hits/detector/include/G4CollectionNameVector.hh index 9e01c3d64f1..a1d62aec172 100644 --- a/source/digits_hits/detector/include/G4CollectionNameVector.hh +++ b/source/digits_hits/detector/include/G4CollectionNameVector.hh @@ -30,13 +30,14 @@ #define G4CollectionNameVector_H 1 #include "globals.hh" + #include class G4CollectionNameVector : public std::vector { public: - G4CollectionNameVector() { ; } - virtual ~G4CollectionNameVector() { ; } + G4CollectionNameVector() {} + virtual ~G4CollectionNameVector() {} void insert(G4String str) { push_back(str); } }; diff --git a/source/digits_hits/detector/include/G4HCtable.hh b/source/digits_hits/detector/include/G4HCtable.hh index 01850b12565..95092cb7cd0 100644 --- a/source/digits_hits/detector/include/G4HCtable.hh +++ b/source/digits_hits/detector/include/G4HCtable.hh @@ -31,7 +31,7 @@ class G4VSensitiveDetector; #include "globals.hh" -//#include "g4rw/tvordvec.h" + #include // class description: @@ -49,32 +49,31 @@ class G4VSensitiveDetector; class G4HCtable { public: - G4HCtable(); - ~G4HCtable(); + G4HCtable() = default; + ~G4HCtable() = default; public: G4int Registor(G4String SDname, G4String HCname); G4int GetCollectionID(G4String HCname) const; G4int GetCollectionID(G4VSensitiveDetector* aSD) const; - private: - std::vector SDlist; - std::vector HClist; - - public: inline G4int entries() const { return G4int(HClist.size()); } + inline G4String GetSDname(G4int i) const { - if(i < 0 || i > entries()) - return "***Not Defined***"; + if (i < 0 || i > entries()) return "***Not Defined***"; return SDlist[i]; } + inline G4String GetHCname(G4int i) const { - if(i < 0 || i > entries()) - return "***Not Defined***"; + if (i < 0 || i > entries()) return "***Not Defined***"; return HClist[i]; } + + private: + std::vector SDlist; + std::vector HClist; }; #endif diff --git a/source/digits_hits/detector/include/G4MultiFunctionalDetector.hh b/source/digits_hits/detector/include/G4MultiFunctionalDetector.hh index 8c6c622322d..dfc5627ab84 100644 --- a/source/digits_hits/detector/include/G4MultiFunctionalDetector.hh +++ b/source/digits_hits/detector/include/G4MultiFunctionalDetector.hh @@ -29,13 +29,13 @@ #ifndef G4MultiFunctionalDetector_h #define G4MultiFunctionalDetector_h 1 -#include "G4VSensitiveDetector.hh" -#include "G4VHit.hh" -#include "G4Step.hh" #include "G4HCofThisEvent.hh" -#include "G4VReadOutGeometry.hh" +#include "G4Step.hh" #include "G4TouchableHistory.hh" -#include "G4CollectionNameVector.hh" +#include "G4VHit.hh" +#include "G4VReadOutGeometry.hh" +#include "G4VSensitiveDetector.hh" + #include class G4VPrimitiveScorer; @@ -46,34 +46,28 @@ class G4VPrimitiveScorer; class G4MultiFunctionalDetector : public G4VSensitiveDetector { - public: // with description + public: G4MultiFunctionalDetector(G4String); + ~G4MultiFunctionalDetector() override; - protected: // with description - virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*); - - std::vector primitives; - - public: // with description G4bool RegisterPrimitive(G4VPrimitiveScorer*); + G4bool RemovePrimitive(G4VPrimitiveScorer*); - inline G4int GetNumberOfPrimitives() const - { - return G4int(primitives.size()); - } + + inline G4int GetNumberOfPrimitives() const { return G4int(primitives.size()); } + G4VPrimitiveScorer* GetPrimitive(G4int id) const { return primitives[id]; } - public: - virtual ~G4MultiFunctionalDetector(); + void Initialize(G4HCofThisEvent*) override; + void EndOfEvent(G4HCofThisEvent*) override; + void clear() override; + void DrawAll() override; + void PrintAll() override; - public: - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void clear(); + protected: + G4bool ProcessHits(G4Step*, G4TouchableHistory*) override; - public: - virtual void DrawAll(); - virtual void PrintAll(); + std::vector primitives; }; #endif diff --git a/source/digits_hits/detector/include/G4MultiSensitiveDetector.hh b/source/digits_hits/detector/include/G4MultiSensitiveDetector.hh index a28939de50e..552ab247b1c 100644 --- a/source/digits_hits/detector/include/G4MultiSensitiveDetector.hh +++ b/source/digits_hits/detector/include/G4MultiSensitiveDetector.hh @@ -28,6 +28,7 @@ #define G4MULTISENSITIVEDETECTOR_H #include "G4VSensitiveDetector.hh" + #include // class description: @@ -40,52 +41,48 @@ class G4MultiSensitiveDetector : public G4VSensitiveDetector { public: - G4MultiSensitiveDetector(G4String name); - // Second optional parameter allows to append to the SDname a random string - G4MultiSensitiveDetector(const G4MultiSensitiveDetector& rhs); - // Cosntructors. The name of the instance must be unique - virtual ~G4MultiSensitiveDetector(); + using sds_t = std::vector; + using sdsConstIter = sds_t::const_iterator; - G4MultiSensitiveDetector& operator=(const G4MultiSensitiveDetector& rhs); + public: + using G4VSensitiveDetector::G4VSensitiveDetector; + ~G4MultiSensitiveDetector() override = default; + + G4MultiSensitiveDetector(const G4MultiSensitiveDetector& rhs) = default; + G4MultiSensitiveDetector& operator=(const G4MultiSensitiveDetector& rhs) = default; public: // interface from G4VSensitiveDetector starts here. // See G4VSensitiveDetector for documentation. // All these methods forward the call to each of the SD // attached to this proxy. - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); - virtual void clear(); - virtual void DrawAll(); - virtual void PrintAll(); + void Initialize(G4HCofThisEvent*) override; + void EndOfEvent(G4HCofThisEvent*) override; + void clear() override; + void DrawAll() override; + void PrintAll() override; - protected: - // The return value is an AND of the called SDs return values. - // This method will call the "Hit(G4Step*)" method of all - // added SDs. Note that the ROhist of this method is not used - virtual G4bool ProcessHits(G4Step* aStep, G4TouchableHistory* ROhist); - // The following method does not have a meaning for this concrete class - virtual G4int GetCollectionID(G4int i) final; + // Return clone of this detector + // Requires all held SDs to be cloneable + G4VSensitiveDetector* Clone() const override; - public: - // Note, that cloning works only if all the contained SDs are also - // clonable. - virtual G4VSensitiveDetector* Clone() const; + G4VSensitiveDetector* GetSD(const int i) const { return fSensitiveDetectors[i]; } - public: - //===== Main interface of this special SD - using sds_t = std::vector; - using sdsConstIter = sds_t::const_iterator; - G4VSensitiveDetector* GetSD(const int i) const - { - return fSensitiveDetectors[i]; - } sds_t::size_type GetSize() const { return fSensitiveDetectors.size(); } sdsConstIter GetBegin() const { return fSensitiveDetectors.begin(); } sdsConstIter GetEnd() const { return fSensitiveDetectors.end(); } void ClearSDs() { fSensitiveDetectors.clear(); } void AddSD(G4VSensitiveDetector* sd) { fSensitiveDetectors.push_back(sd); } + protected: + // The return value is an AND of the called SDs return values. + // This method will call the "Hit(G4Step*)" method of all + // added SDs. Note that the ROhist of this method is not used + G4bool ProcessHits(G4Step* aStep, G4TouchableHistory* ROhist) override; + + // The following method does not have a meaning for this concrete class + G4int GetCollectionID(G4int i) final; + private: sds_t fSensitiveDetectors; }; diff --git a/source/digits_hits/detector/include/G4SDManager.hh b/source/digits_hits/detector/include/G4SDManager.hh index 1221e3f0bc9..81a3892cf0b 100644 --- a/source/digits_hits/detector/include/G4SDManager.hh +++ b/source/digits_hits/detector/include/G4SDManager.hh @@ -29,15 +29,16 @@ #ifndef G4SDManager_h #define G4SDManager_h 1 -#include "globals.hh" -#include "G4SDStructure.hh" #include "G4HCtable.hh" +#include "G4SDStructure.hh" +#include "globals.hh" class G4VHitsCollection; class G4VSensitiveDetector; class G4HCofThisEvent; class G4SDmessenger; #include "G4VSDFilter.hh" + #include // class description: @@ -51,45 +52,38 @@ class G4SDmessenger; class G4SDManager { - public: // with description - static G4SDManager* GetSDMpointer(); - // Returns the pointer to the singleton object. public: - static G4SDManager* GetSDMpointerIfExist(); + // Returns the pointer to the singleton object, creating it if not null + static G4SDManager* GetSDMpointer(); - protected: - G4SDManager(); + // Returns current pointer to the singleton object + // Caller is responsible for checking value against `nullptr` + static G4SDManager* GetSDMpointerIfExist(); - public: + G4SDManager(const G4SDManager&) = delete; + G4SDManager& operator=(const G4SDManager&) = delete; ~G4SDManager(); - public: // with description + // Register sensitive detector instance + // This method must be invoked when the user constructs their sensitive detector void AddNewDetector(G4VSensitiveDetector* aSD); - // Registors the user's sensitive detector. This method must be invoked - // when the user construct his/her sensitive detector. - void Activate(G4String dName, G4bool activeFlag); - // Activate/inactivate the registered sensitive detector. For the inactivated - // detectors, hits collections will not be stored to the G4HCofThisEvent + + // Activate/inactivate the registered sensitive detector. + // For the inactivated detectors, hits collections will not be stored to the G4HCofThisEvent // object. + void Activate(G4String dName, G4bool activeFlag); + + // Return ID number of sensitive detector with given name G4int GetCollectionID(G4String colName); + + // Return ID number of sensitive detector creating given hits collection G4int GetCollectionID(G4VHitsCollection* aHC); - // These two methods return the ID number of the sensitive detector. - public: - G4VSensitiveDetector* FindSensitiveDetector(G4String dName, - G4bool warning = true); + G4VSensitiveDetector* FindSensitiveDetector(G4String dName, G4bool warning = true); G4HCofThisEvent* PrepareNewEvent(); void TerminateCurrentEvent(G4HCofThisEvent* HCE); void AddNewCollection(G4String SDname, G4String DCname); - private: - static G4ThreadLocal G4SDManager* fSDManager; - G4SDStructure* treeTop; - G4int verboseLevel; - G4HCtable* HCtable; - G4SDmessenger* theMessenger; - - public: inline void SetVerboseLevel(G4int vl) { verboseLevel = vl; @@ -100,17 +94,21 @@ class G4SDManager inline G4int GetCollectionCapacity() const { return HCtable->entries(); } inline G4HCtable* GetHCtable() const { return HCtable; } - private: - // Disable copy constructor and assignment operator - G4SDManager(const G4SDManager&); - G4SDManager& operator=(const G4SDManager&); - - public: void RegisterSDFilter(G4VSDFilter* filter); void DeRegisterSDFilter(G4VSDFilter* filter); + protected: + G4SDManager(); + private: void DestroyFilters(); + + private: + static G4ThreadLocal G4SDManager* fSDManager; + G4SDStructure* treeTop; + G4int verboseLevel{0}; + G4HCtable* HCtable; + G4SDmessenger* theMessenger; std::vector FilterList; }; diff --git a/source/digits_hits/detector/include/G4SDStructure.hh b/source/digits_hits/detector/include/G4SDStructure.hh index 768b6ef479d..c28ca2ff25c 100644 --- a/source/digits_hits/detector/include/G4SDStructure.hh +++ b/source/digits_hits/detector/include/G4SDStructure.hh @@ -30,9 +30,9 @@ #define G4SDStructure_h 1 // Globals -#include "globals.hh" -// G4VSensitiveDetector #include "G4VSensitiveDetector.hh" +#include "globals.hh" + #include class G4HCofThisEvent; @@ -55,11 +55,21 @@ class G4SDStructure void Activate(const G4String& aName, G4bool sensitiveFlag); void Initialize(G4HCofThisEvent* HCE); void Terminate(G4HCofThisEvent* HCE); - G4VSensitiveDetector* FindSensitiveDetector(const G4String& aName, - G4bool warning = true); + G4VSensitiveDetector* FindSensitiveDetector(const G4String& aName, G4bool warning = true); G4VSensitiveDetector* GetSD(const G4String& aName); void ListTree(); + inline void SetVerboseLevel(G4int vl) + { + verboseLevel = vl; + for (auto& i : structure) { + i->SetVerboseLevel(vl); + } + for (auto& j : detector) { + j->SetVerboseLevel(vl); + } + }; + private: G4SDStructure* FindSubDirectory(const G4String& subD); G4String ExtractDirName(const G4String& aPath); @@ -70,21 +80,7 @@ class G4SDStructure std::vector detector; G4String pathName; G4String dirName; - G4int verboseLevel; - - public: - inline void SetVerboseLevel(G4int vl) - { - verboseLevel = vl; - for(size_t i = 0; i < structure.size(); i++) - { - structure[i]->SetVerboseLevel(vl); - } - for(size_t j = 0; j < detector.size(); j++) - { - detector[j]->SetVerboseLevel(vl); - } - }; + G4int verboseLevel{0}; }; #endif diff --git a/source/digits_hits/detector/include/G4SDmessenger.hh b/source/digits_hits/detector/include/G4SDmessenger.hh index 04e226646aa..9aa01303881 100644 --- a/source/digits_hits/detector/include/G4SDmessenger.hh +++ b/source/digits_hits/detector/include/G4SDmessenger.hh @@ -52,8 +52,8 @@ class G4SDmessenger : public G4UImessenger { public: G4SDmessenger(G4SDManager* SDManager); - ~G4SDmessenger(); - void SetNewValue(G4UIcommand* command, G4String newValues); + ~G4SDmessenger() override; + void SetNewValue(G4UIcommand* command, G4String newValues) override; private: G4SDManager* fSDMan; diff --git a/source/digits_hits/detector/include/G4SensitiveVolumeList.hh b/source/digits_hits/detector/include/G4SensitiveVolumeList.hh index d18ebcbcdfa..f1906823e03 100644 --- a/source/digits_hits/detector/include/G4SensitiveVolumeList.hh +++ b/source/digits_hits/detector/include/G4SensitiveVolumeList.hh @@ -37,12 +37,13 @@ #ifndef G4SensitiveVolumeList_h #define G4SensitiveVolumeList_h 1 -//#include "g4rw/tpordvec.h" -//#include "g4rw/tvordvec.h" -#include +// #include "g4rw/tpordvec.h" +// #include "g4rw/tvordvec.h" #include "G4LogicalVolume.hh" #include "G4VPhysicalVolume.hh" +#include + // class description: // // This class object can have lists of logical and physical volumes. @@ -54,22 +55,14 @@ class G4SensitiveVolumeList { public: - // Constructors - G4SensitiveVolumeList(); - G4SensitiveVolumeList(const G4SensitiveVolumeList& right); - - // Destructor - ~G4SensitiveVolumeList(); - - // Assignment Operation - G4SensitiveVolumeList& operator=(const G4SensitiveVolumeList& right); - // Equality Operations G4bool operator==(const G4SensitiveVolumeList& right) const; G4bool operator!=(const G4SensitiveVolumeList& right) const; - // Other Operations + // Return true if given physical volume is in list G4bool CheckPV(const G4VPhysicalVolume* pvp) const; + + // Return true if given logical volume is in list G4bool CheckLV(const G4LogicalVolume* lvp) const; // Get and Set Operations for Has Relationships diff --git a/source/digits_hits/detector/include/G4TScoreHistFiller.hh b/source/digits_hits/detector/include/G4TScoreHistFiller.hh index e8659821118..7728a2bf669 100644 --- a/source/digits_hits/detector/include/G4TScoreHistFiller.hh +++ b/source/digits_hits/detector/include/G4TScoreHistFiller.hh @@ -45,19 +45,17 @@ template class G4TScoreHistFiller : public G4VScoreHistFiller { public: - G4TScoreHistFiller(); - virtual ~G4TScoreHistFiller(); + G4TScoreHistFiller() = default; + virtual ~G4TScoreHistFiller() = default; // methods virtual void FillH1(G4int id, G4double value, G4double weight = 1.0); - virtual void FillH2(G4int id, G4double xvalue, G4double yvalue, - G4double weight = 1.0); - virtual void FillH3(G4int id, G4double xvalue, G4double yvalue, - G4double zvalue, G4double weight = 1.0); - virtual void FillP1(G4int id, G4double xvalue, G4double yvalue, - G4double weight = 1.0); - virtual void FillP2(G4int id, G4double xvalue, G4double yvalue, - G4double zvalue, G4double weight = 1.0); + virtual void FillH2(G4int id, G4double xvalue, G4double yvalue, G4double weight = 1.0); + virtual void FillH3( + G4int id, G4double xvalue, G4double yvalue, G4double zvalue, G4double weight = 1.0); + virtual void FillP1(G4int id, G4double xvalue, G4double yvalue, G4double weight = 1.0); + virtual void FillP2( + G4int id, G4double xvalue, G4double yvalue, G4double zvalue, G4double weight = 1.0); virtual G4bool CheckH1(G4int id); virtual G4bool CheckH2(G4int id); @@ -77,9 +75,9 @@ class G4TScoreHistFiller : public G4VScoreHistFiller void CreateAnalysisManager(); // data members - T* fAnalysisManager = nullptr; - G4int fVerboseLevel = 0; - G4bool fIsInitialized = false; + T* fAnalysisManager = nullptr; + G4int fVerboseLevel = 0; + G4bool fIsInitialized = false; }; #include "G4TScoreHistFiller.icc" diff --git a/source/digits_hits/detector/include/G4TScoreHistFiller.icc b/source/digits_hits/detector/include/G4TScoreHistFiller.icc index 8c56704a2f0..f141e780343 100644 --- a/source/digits_hits/detector/include/G4TScoreHistFiller.icc +++ b/source/digits_hits/detector/include/G4TScoreHistFiller.icc @@ -33,17 +33,6 @@ // // -template -G4TScoreHistFiller::G4TScoreHistFiller() -{ - ; -} - -template -G4TScoreHistFiller::~G4TScoreHistFiller() -{ -} - template void G4TScoreHistFiller::CreateAnalysisManager() { @@ -66,8 +55,7 @@ template void G4TScoreHistFiller::SetVerboseLevel(G4int value) { fVerboseLevel = value; - if(fAnalysisManager) - { + if (fAnalysisManager) { fAnalysisManager->SetVerboseLevel(value); } } @@ -75,19 +63,15 @@ void G4TScoreHistFiller::SetVerboseLevel(G4int value) template void G4TScoreHistFiller::FillH1(G4int id, G4double value, G4double weight) { - if(!fAnalysisManager) - { + if (! fAnalysisManager) { CreateAnalysisManager(); } - if(!CheckH1(id)) - { + if (! CheckH1(id)) { G4ExceptionDescription description; description << " " - << "Cannot fill histogram id=" << id - << ". Histogram is not defined."; - G4Exception("G4TScoreHistFiller::FillH1", "Digits_hits_utils_001", - JustWarning, description); + << "Cannot fill histogram id=" << id << ". Histogram is not defined."; + G4Exception("G4TScoreHistFiller::FillH1", "Digits_hits_utils_001", JustWarning, description); return; } @@ -95,30 +79,24 @@ void G4TScoreHistFiller::FillH1(G4int id, G4double value, G4double weight) fAnalysisManager->FillH1(id, value, weight); #ifdef G4VERBOSE - if(fVerboseLevel > 1) - { + if (fVerboseLevel > 1) { G4cout << "--- done G4TScoreHistFiller::FillH1 : id = " << id << G4endl; } #endif } template -void G4TScoreHistFiller::FillH2(G4int id, G4double xvalue, G4double yvalue, - G4double weight) +void G4TScoreHistFiller::FillH2(G4int id, G4double xvalue, G4double yvalue, G4double weight) { - if(!fAnalysisManager) - { + if (! fAnalysisManager) { CreateAnalysisManager(); } - if(!CheckH2(id)) - { + if (! CheckH2(id)) { G4ExceptionDescription description; description << " " - << "Cannot fill histogram id=" << id - << ". Histogram is not defined."; - G4Exception("G4TScoreHistFiller::FillH2", "Digits_hits_utils_001", - JustWarning, description); + << "Cannot fill histogram id=" << id << ". Histogram is not defined."; + G4Exception("G4TScoreHistFiller::FillH2", "Digits_hits_utils_001", JustWarning, description); return; } @@ -126,30 +104,25 @@ void G4TScoreHistFiller::FillH2(G4int id, G4double xvalue, G4double yvalue, fAnalysisManager->FillH2(id, xvalue, yvalue, weight); #ifdef G4VERBOSE - if(fVerboseLevel > 1) - { + if (fVerboseLevel > 1) { G4cout << "--- done G4TScoreHistFiller::FillH2 : id = " << id << G4endl; } #endif } template -void G4TScoreHistFiller::FillH3(G4int id, G4double xvalue, G4double yvalue, - G4double zvalue, G4double weight) +void G4TScoreHistFiller::FillH3( + G4int id, G4double xvalue, G4double yvalue, G4double zvalue, G4double weight) { - if(!fAnalysisManager) - { + if (! fAnalysisManager) { CreateAnalysisManager(); } - if(!CheckH3(id)) - { + if (! CheckH3(id)) { G4ExceptionDescription description; description << " " - << "Cannot fill histogram id=" << id - << ". Histogram is not defined."; - G4Exception("G4TScoreHistFiller::FillH3", "Digits_hits_utils_001", - JustWarning, description); + << "Cannot fill histogram id=" << id << ". Histogram is not defined."; + G4Exception("G4TScoreHistFiller::FillH3", "Digits_hits_utils_001", JustWarning, description); return; } @@ -157,30 +130,24 @@ void G4TScoreHistFiller::FillH3(G4int id, G4double xvalue, G4double yvalue, fAnalysisManager->FillH3(id, xvalue, yvalue, zvalue, weight); #ifdef G4VERBOSE - if(fVerboseLevel > 1) - { + if (fVerboseLevel > 1) { G4cout << "--- done G4TScoreHistFiller::FillH3 : id = " << id << G4endl; } #endif } template -void G4TScoreHistFiller::FillP1(G4int id, G4double xvalue, G4double yvalue, - G4double weight) +void G4TScoreHistFiller::FillP1(G4int id, G4double xvalue, G4double yvalue, G4double weight) { - if(!fAnalysisManager) - { + if (! fAnalysisManager) { CreateAnalysisManager(); } - if(!CheckP1(id)) - { + if (! CheckP1(id)) { G4ExceptionDescription description; description << " " - << "Cannot fill histogram id=" << id - << ". Histogram is not defined."; - G4Exception("G4TScoreHistFiller::FillP1", "Digits_hits_utils_001", - JustWarning, description); + << "Cannot fill histogram id=" << id << ". Histogram is not defined."; + G4Exception("G4TScoreHistFiller::FillP1", "Digits_hits_utils_001", JustWarning, description); return; } @@ -188,30 +155,25 @@ void G4TScoreHistFiller::FillP1(G4int id, G4double xvalue, G4double yvalue, fAnalysisManager->FillP1(id, xvalue, yvalue, weight); #ifdef G4VERBOSE - if(fVerboseLevel > 1) - { + if (fVerboseLevel > 1) { G4cout << "--- done G4TScoreHistFiller::FillP1 : id = " << id << G4endl; } #endif } template -void G4TScoreHistFiller::FillP2(G4int id, G4double xvalue, G4double yvalue, - G4double zvalue, G4double weight) +void G4TScoreHistFiller::FillP2( + G4int id, G4double xvalue, G4double yvalue, G4double zvalue, G4double weight) { - if(!fAnalysisManager) - { + if (! fAnalysisManager) { CreateAnalysisManager(); } - if(!CheckP2(id)) - { + if (! CheckP2(id)) { G4ExceptionDescription description; description << " " - << "Cannot fill histogram id=" << id - << ". Histogram is not defined."; - G4Exception("G4TScoreHistFiller::FillP2", "Digits_hits_utils_001", - JustWarning, description); + << "Cannot fill histogram id=" << id << ". Histogram is not defined."; + G4Exception("G4TScoreHistFiller::FillP2", "Digits_hits_utils_001", JustWarning, description); return; } @@ -219,8 +181,7 @@ void G4TScoreHistFiller::FillP2(G4int id, G4double xvalue, G4double yvalue, fAnalysisManager->FillP2(id, xvalue, yvalue, zvalue, weight); #ifdef G4VERBOSE - if(fVerboseLevel > 1) - { + if (fVerboseLevel > 1) { G4cout << "--- done G4TScoreHistFiller::FillP2 : id = " << id << G4endl; } #endif diff --git a/source/digits_hits/detector/include/G4TrackLogger.hh b/source/digits_hits/detector/include/G4TrackLogger.hh index a1db51aa3ff..0022a85efc9 100644 --- a/source/digits_hits/detector/include/G4TrackLogger.hh +++ b/source/digits_hits/detector/include/G4TrackLogger.hh @@ -41,26 +41,22 @@ #define G4TrackLogger_hh G4TrackLogger_hh #include "globals.hh" + #include class G4TrackLogger { public: - G4TrackLogger(); - ~G4TrackLogger(); - - void SetEventID(G4int id); // inform the object about the event number // if the event number changes the loggs are cleared. + void SetEventID(G4int id); - G4bool FirstEnterance(G4int trid); // returns true if the track is new to this event. - - typedef std::set TrackIDsSet; - // log for the track ids. + G4bool FirstEnterance(G4int trid); private: - G4int fPreviousEventID; + G4int fPreviousEventID = -1; + using TrackIDsSet = std::set; TrackIDsSet fTrackIDsSet; }; diff --git a/source/digits_hits/detector/include/G4VPrimitivePlotter.hh b/source/digits_hits/detector/include/G4VPrimitivePlotter.hh index 3358ac1b61f..0ee431aa0df 100644 --- a/source/digits_hits/detector/include/G4VPrimitivePlotter.hh +++ b/source/digits_hits/detector/include/G4VPrimitivePlotter.hh @@ -29,26 +29,21 @@ #define G4VPrimitivePlotter_H 1 #include "G4VPrimitiveScorer.hh" + #include class G4VPrimitivePlotter : public G4VPrimitiveScorer { - public: // with description - G4VPrimitivePlotter(G4String name, G4int depth = 0) - : G4VPrimitiveScorer(name, depth) - { - ; - } - virtual ~G4VPrimitivePlotter() { ; } - public: + using G4VPrimitiveScorer::G4VPrimitiveScorer; + ~G4VPrimitivePlotter() override = default; + void Plot(G4int copyNo, G4int histID) { hitIDMap[copyNo] = histID; } + G4int GetNumberOfHist() const { return (G4int)hitIDMap.size(); } + protected: std::map hitIDMap; - - public: - G4int GetNumberOfHist() const { return (G4int)hitIDMap.size(); } }; #endif diff --git a/source/digits_hits/detector/include/G4VPrimitiveScorer.hh b/source/digits_hits/detector/include/G4VPrimitiveScorer.hh index a91332f4b08..ea4ded6087d 100644 --- a/source/digits_hits/detector/include/G4VPrimitiveScorer.hh +++ b/source/digits_hits/detector/include/G4VPrimitiveScorer.hh @@ -32,9 +32,9 @@ class G4Step; class G4HCofThisEvent; class G4TouchableHistory; -#include "globals.hh" -#include "G4VSDFilter.hh" #include "G4MultiFunctionalDetector.hh" +#include "G4VSDFilter.hh" +#include "globals.hh" // class description: // @@ -50,91 +50,78 @@ class G4VPrimitiveScorer { friend class G4MultiFunctionalDetector; - public: // with description + public: G4VPrimitiveScorer(G4String name, G4int depth = 0); - virtual ~G4VPrimitiveScorer(); + virtual ~G4VPrimitiveScorer() = default; - protected: // with description - virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*) = 0; - // This is the method must be implemented in each concrete class. - - virtual G4int GetIndex(G4Step*); - // This is a function mapping from copy number(s) to an index of - // the hit collection. In the default implementation, just the - // copy number of the physical volume is taken. - - public: // with description - G4int GetCollectionID(G4int); // This method returns the ID of its hitsCollection. This mehod // gives valid value only after it is registered to G4MultiFunctionalDetector // and the G4MultiFunctionalDetector is registered to G4SDManager. + G4int GetCollectionID(G4int); + // These five methods are exactly identical to those in G4VSensitiveDetector. + // These methods are invoked by G4SDManager through G4MultiFunctionalDetector. virtual void Initialize(G4HCofThisEvent*); virtual void EndOfEvent(G4HCofThisEvent*); virtual void clear(); virtual void DrawAll(); virtual void PrintAll(); - // These five methods are exactly identical to those in G4VSensitiveDetector. - // These methods are invoked by G4SDManager through G4MultiFunctionalDetector. void SetUnit(const G4String& unit) { unitName = unit; } const G4String& GetUnit() const { return unitName; } G4double GetUnitValue() const { return unitValue; } - protected: - void CheckAndSetUnit(const G4String& unit, const G4String& category); - - protected: - G4String primitiveName; - G4MultiFunctionalDetector* detector; - G4VSDFilter* filter; - G4int verboseLevel; - G4int indexDepth; - G4String unitName; - G4double unitValue; - - public: // with description // Set/Get methods - inline void SetMultiFunctionalDetector(G4MultiFunctionalDetector* d) - { - detector = d; - } - inline G4MultiFunctionalDetector* GetMultiFunctionalDetector() const - { - return detector; - } + inline void SetMultiFunctionalDetector(G4MultiFunctionalDetector* d) { detector = d; } + inline G4MultiFunctionalDetector* GetMultiFunctionalDetector() const { return detector; } inline G4String GetName() const { return primitiveName; } inline void SetFilter(G4VSDFilter* f) { filter = f; } inline G4VSDFilter* GetFilter() const { return filter; } inline void SetVerboseLevel(G4int vl) { verboseLevel = vl; } inline G4int GetVerboseLevel() const { return verboseLevel; } - private: - inline G4bool HitPrimitive(G4Step* aStep, G4TouchableHistory* ROhis) + inline void SetNijk(G4int i, G4int j, G4int k) { - if(filter) - { - if(!(filter->Accept(aStep))) - return false; - } - return ProcessHits(aStep, ROhis); + fNi = i; + fNj = j; + fNk = k; } protected: - G4VSolid* ComputeSolid(G4Step* aStep, G4int replicaIdx); // Get the solid at current depth, ensuring it's correct by // calling a parameterisation is called if it's that volume type - G4VSolid* ComputeCurrentSolid(G4Step* aStep); + G4VSolid* ComputeSolid(G4Step* aStep, G4int replicaIdx); + // Same as above -- using stored replica number + G4VSolid* ComputeCurrentSolid(G4Step* aStep); + + // This is the method must be implemented in each concrete class. + virtual G4bool ProcessHits(G4Step*, G4TouchableHistory*) = 0; + + // This is a function mapping from copy number(s) to an index of + // the hit collection. In the default implementation, just the + // copy number of the physical volume is taken. + virtual G4int GetIndex(G4Step*); + + void CheckAndSetUnit(const G4String& unit, const G4String& category); protected: - G4int fNi, fNj, fNk; // used for 3D scorers - public: - inline void SetNijk(G4int i, G4int j, G4int k) + G4String primitiveName; + G4MultiFunctionalDetector* detector{nullptr}; + G4VSDFilter* filter{nullptr}; + G4int verboseLevel{0}; + G4int indexDepth; + G4String unitName{"NoUnit"}; + G4double unitValue{1.0}; + G4int fNi{0}, fNj{0}, fNk{0}; // used for 3D scorers + + private: + inline G4bool HitPrimitive(G4Step* aStep, G4TouchableHistory* ROhis) { - fNi = i; - fNj = j; - fNk = k; + if (filter != nullptr) { + if (! (filter->Accept(aStep))) return false; + } + return ProcessHits(aStep, ROhis); } }; diff --git a/source/digits_hits/detector/include/G4VReadOutGeometry.hh b/source/digits_hits/detector/include/G4VReadOutGeometry.hh index 49aea6d7499..da967bdb28b 100644 --- a/source/digits_hits/detector/include/G4VReadOutGeometry.hh +++ b/source/digits_hits/detector/include/G4VReadOutGeometry.hh @@ -38,10 +38,6 @@ class G4Navigator; class G4VReadOutGeometry { - protected: - virtual G4VPhysicalVolume* - Build() = 0; // must return the world of the ROGeometry; - public: G4VReadOutGeometry(); G4VReadOutGeometry(G4String); @@ -56,7 +52,18 @@ class G4VReadOutGeometry void BuildROGeometry(); virtual G4bool CheckROVolume(G4Step*, G4TouchableHistory*&); + inline const G4SensitiveVolumeList* GetIncludeList() const { return fincludeList; } + inline void SetIncludeList(G4SensitiveVolumeList* value) { fincludeList = value; } + inline const G4SensitiveVolumeList* GetExcludeList() const { return fexcludeList; } + inline void SetExcludeList(G4SensitiveVolumeList* value) { fexcludeList = value; } + inline G4String GetName() const { return name; } + inline void SetName(G4String value) { name = value; } + // ADDED: + inline G4VPhysicalVolume* GetROWorld() const { return ROworld; } + protected: + virtual G4VPhysicalVolume* Build() = 0; // must return the world of the ROGeometry; + G4VReadOutGeometry(const G4VReadOutGeometry& right); G4VReadOutGeometry& operator=(const G4VReadOutGeometry& right); @@ -70,28 +77,6 @@ class G4VReadOutGeometry G4Navigator* ROnavigator; G4TouchableHistory* touchableHistory; - - public: - inline const G4SensitiveVolumeList* GetIncludeList() const - { - return fincludeList; - } - inline void SetIncludeList(G4SensitiveVolumeList* value) - { - fincludeList = value; - } - inline const G4SensitiveVolumeList* GetExcludeList() const - { - return fexcludeList; - } - inline void SetExcludeList(G4SensitiveVolumeList* value) - { - fexcludeList = value; - } - inline G4String GetName() const { return name; } - inline void SetName(G4String value) { name = value; } - // ADDED: - inline G4VPhysicalVolume* GetROWorld() const { return ROworld; } }; #endif diff --git a/source/digits_hits/detector/include/G4VSDFilter.hh b/source/digits_hits/detector/include/G4VSDFilter.hh index a2a17da1fdb..d3040f1a7fa 100644 --- a/source/digits_hits/detector/include/G4VSDFilter.hh +++ b/source/digits_hits/detector/include/G4VSDFilter.hh @@ -39,20 +39,16 @@ class G4Step; class G4VSDFilter { - public: // with description - G4VSDFilter(G4String name); - public: + G4VSDFilter(G4String name); virtual ~G4VSDFilter(); - public: // with description virtual G4bool Accept(const G4Step*) const = 0; + inline G4String GetName() const { return filterName; } + protected: G4String filterName; - - public: - inline G4String GetName() const { return filterName; } }; #endif diff --git a/source/digits_hits/detector/include/G4VScoreHistFiller.hh b/source/digits_hits/detector/include/G4VScoreHistFiller.hh index 7341da1de71..e159fb0e895 100644 --- a/source/digits_hits/detector/include/G4VScoreHistFiller.hh +++ b/source/digits_hits/detector/include/G4VScoreHistFiller.hh @@ -55,14 +55,12 @@ class G4VScoreHistFiller // methods virtual void FillH1(G4int id, G4double value, G4double weight = 1.0) = 0; - virtual void FillH2(G4int id, G4double xvalue, G4double yvalue, - G4double weight = 1.0) = 0; - virtual void FillH3(G4int id, G4double xvalue, G4double yvalue, - G4double zvalue, G4double weight = 1.0) = 0; - virtual void FillP1(G4int id, G4double xvalue, G4double yvalue, - G4double weight = 1.0) = 0; - virtual void FillP2(G4int id, G4double xvalue, G4double yvalue, - G4double zvalue, G4double weight = 1.0) = 0; + virtual void FillH2(G4int id, G4double xvalue, G4double yvalue, G4double weight = 1.0) = 0; + virtual void FillH3( + G4int id, G4double xvalue, G4double yvalue, G4double zvalue, G4double weight = 1.0) = 0; + virtual void FillP1(G4int id, G4double xvalue, G4double yvalue, G4double weight = 1.0) = 0; + virtual void FillP2( + G4int id, G4double xvalue, G4double yvalue, G4double zvalue, G4double weight = 1.0) = 0; virtual G4bool CheckH1(G4int id) = 0; virtual G4bool CheckH2(G4int id) = 0; diff --git a/source/digits_hits/detector/include/G4VSensitiveDetector.hh b/source/digits_hits/detector/include/G4VSensitiveDetector.hh index f9e865aa7e7..f7c27719d35 100644 --- a/source/digits_hits/detector/include/G4VSensitiveDetector.hh +++ b/source/digits_hits/detector/include/G4VSensitiveDetector.hh @@ -29,12 +29,12 @@ #ifndef G4VSensitiveDetector_h #define G4VSensitiveDetector_h 1 -#include "G4VHit.hh" -#include "G4Step.hh" +#include "G4CollectionNameVector.hh" #include "G4HCofThisEvent.hh" -#include "G4VReadOutGeometry.hh" +#include "G4Step.hh" #include "G4TouchableHistory.hh" -#include "G4CollectionNameVector.hh" +#include "G4VHit.hh" +#include "G4VReadOutGeometry.hh" #include "G4VSDFilter.hh" // class description: @@ -48,102 +48,58 @@ class G4VSensitiveDetector { - public: // with description - G4VSensitiveDetector(G4String name); - G4VSensitiveDetector(const G4VSensitiveDetector& right); + public: // Constructors. The user's concrete class must use one of these constructors // by the constructor initializer of the derived class. The name of // the sensitive detector must be unique. - - public: - virtual ~G4VSensitiveDetector(); - + explicit G4VSensitiveDetector(G4String name); + G4VSensitiveDetector(const G4VSensitiveDetector& right); G4VSensitiveDetector& operator=(const G4VSensitiveDetector& right); + virtual ~G4VSensitiveDetector() = default; G4bool operator==(const G4VSensitiveDetector& right) const; G4bool operator!=(const G4VSensitiveDetector& right) const; - public: // with description - virtual void Initialize(G4HCofThisEvent*); - virtual void EndOfEvent(G4HCofThisEvent*); // These two methods are invoked at the begining and at the end of each // event. The hits collection(s) created by this sensitive detector must // be set to the G4HCofThisEvent object at one of these two methods. - virtual void clear(); + virtual void Initialize(G4HCofThisEvent*) {} + virtual void EndOfEvent(G4HCofThisEvent*) {} + // This method is invoked if the event abortion is occured. Hits collections // created but not beibg set to G4HCofThisEvent at the event should be // deleted. Collection(s) which have already set to G4HCofThisEvent will be // deleted automatically. + virtual void clear() {} - public: - virtual void DrawAll(); - virtual void PrintAll(); + virtual void DrawAll() {} + virtual void PrintAll() {} - protected: // with description - virtual G4bool ProcessHits(G4Step* aStep, G4TouchableHistory* ROhist) = 0; - // The user MUST implement this method for generating hit(s) using the - // information of G4Step object. Note that the volume and the position - // information is kept in PreStepPoint of G4Step. - // Be aware that this method is a protected method and it sill be invoked - // by Hit() method of Base class after Readout geometry associated to the - // sensitive detector is handled. - // "ROhist" will be given only is a Readout geometry is defined to this - // sensitive detector. The G4TouchableHistory object of the tracking geometry - // is stored in the PreStepPoint object of G4Step. - virtual G4int GetCollectionID(G4int i); - // This is a utility method which returns the hits collection ID of the - // "i"-th collection. "i" is the order (starting with zero) of the collection - // whose name is stored to the collectionName protected vector. - G4CollectionNameVector collectionName; - // This protected name vector must be filled at the constructor of the user's - // concrete class for registering the name(s) of hits collection(s) being - // created by this particular sensitive detector. - - protected: - G4String SensitiveDetectorName; // detector name - G4String thePathName; // directory path - G4String fullPathName; // path + detector name - G4int verboseLevel; - G4bool active; - G4VReadOutGeometry* ROgeometry; - G4VSDFilter* filter; - - public: // with description + // This is the public method invoked by G4SteppingManager for generating + // hit(s). The actual user's implementation for generating hit(s) must be + // implemented in GenerateHits() virtual protected method. This method + // MUST NOT be overriden. inline G4bool Hit(G4Step* aStep) { - G4TouchableHistory* ROhis = 0; - if(!isActive()) - return false; - if(filter) - { - if(!(filter->Accept(aStep))) - return false; + G4TouchableHistory* ROhis = nullptr; + if (! isActive()) return false; + if (filter != nullptr) { + if (! (filter->Accept(aStep))) return false; } - if(ROgeometry) - { - if(!(ROgeometry->CheckROVolume(aStep, ROhis))) - return false; + if (ROgeometry != nullptr) { + if (! (ROgeometry->CheckROVolume(aStep, ROhis))) return false; } return ProcessHits(aStep, ROhis); } - // This is the public method invoked by G4SteppingManager for generating - // hit(s). The actual user's implementation for generating hit(s) must be - // implemented in GenerateHits() virtual protected method. This method - // MUST NOT be overrided. - inline void SetROgeometry(G4VReadOutGeometry* value) { ROgeometry = value; } + // Register the Readout geometry. - inline void SetFilter(G4VSDFilter* value) { filter = value; } + inline void SetROgeometry(G4VReadOutGeometry* value) { ROgeometry = value; } + // Register a filter + inline void SetFilter(G4VSDFilter* value) { filter = value; } - public: - inline G4int GetNumberOfCollections() const - { - return G4int(collectionName.size()); - } - inline G4String GetCollectionName(G4int id) const - { - return collectionName[id]; - } + inline G4int GetNumberOfCollections() const { return G4int(collectionName.size()); } + inline G4String GetCollectionName(G4int id) const { return collectionName[id]; } inline void SetVerboseLevel(G4int vl) { verboseLevel = vl; } inline void Activate(G4bool activeFlag) { active = activeFlag; } inline G4bool isActive() const { return active; } @@ -153,8 +109,38 @@ class G4VSensitiveDetector inline G4VReadOutGeometry* GetROgeometry() const { return ROgeometry; } inline G4VSDFilter* GetFilter() const { return filter; } - public: virtual G4VSensitiveDetector* Clone() const; + + protected: // with description + // The user MUST implement this method for generating hit(s) using the + // information of G4Step object. Note that the volume and the position + // information is kept in PreStepPoint of G4Step. + // Be aware that this method is a protected method and it sill be invoked + // by Hit() method of Base class after Readout geometry associated to the + // sensitive detector is handled. + // "ROhist" will be given only is a Readout geometry is defined to this + // sensitive detector. The G4TouchableHistory object of the tracking geometry + // is stored in the PreStepPoint object of G4Step. + virtual G4bool ProcessHits(G4Step* aStep, G4TouchableHistory* ROhist) = 0; + + // This is a utility method which returns the hits collection ID of the + // "i"-th collection. "i" is the order (starting with zero) of the collection + // whose name is stored to the collectionName protected vector. + virtual G4int GetCollectionID(G4int i); + + protected: + // This protected name vector must be filled at the constructor of the user's + // concrete class for registering the name(s) of hits collection(s) being + // created by this particular sensitive detector. + G4CollectionNameVector collectionName; + + G4String SensitiveDetectorName; // detector name + G4String thePathName; // directory path + G4String fullPathName; // path + detector name + G4int verboseLevel{0}; + G4bool active{true}; + G4VReadOutGeometry* ROgeometry{nullptr}; + G4VSDFilter* filter{nullptr}; }; #endif diff --git a/source/digits_hits/detector/sources.cmake b/source/digits_hits/detector/sources.cmake index 3ed72e7e4df..fb46c7f1065 100644 --- a/source/digits_hits/detector/sources.cmake +++ b/source/digits_hits/detector/sources.cmake @@ -12,7 +12,6 @@ geant4_add_module(G4detector G4SDStructure.hh G4SDmessenger.hh G4SensitiveVolumeList.hh - G4SensitiveVolumeList.icc G4TrackLogger.hh G4TScoreHistFiller.hh G4TScoreHistFiller.icc diff --git a/source/digits_hits/detector/src/G4CellScoreComposer.cc b/source/digits_hits/detector/src/G4CellScoreComposer.cc index 810aaa3241a..2949258ab09 100644 --- a/source/digits_hits/detector/src/G4CellScoreComposer.cc +++ b/source/digits_hits/detector/src/G4CellScoreComposer.cc @@ -33,29 +33,22 @@ // ---------------------------------------------------------------------- #include "G4CellScoreComposer.hh" -#include "G4Step.hh" - -G4CellScoreComposer::G4CellScoreComposer() - : fSCScoreValues() -{} -G4CellScoreComposer::~G4CellScoreComposer() {} +#include "G4Step.hh" void G4CellScoreComposer::EstimatorCalculation(const G4Step& aStep) { G4StepPoint* p = aStep.GetPreStepPoint(); - if(!p) - { - G4Exception("G4CellScoreComposer::EstimatorCalculation", "Det0191", - FatalException, " no pointer to pre PreStepPoint!"); + if (p == nullptr) { + G4Exception("G4CellScoreComposer::EstimatorCalculation", "Det0191", FatalException, + " no pointer to pre PreStepPoint!"); } - G4double sl = aStep.GetStepLength(); - G4double slw = sl * p->GetWeight(); + G4double sl = aStep.GetStepLength(); + G4double slw = sl * p->GetWeight(); G4double slwe = slw * p->GetKineticEnergy(); G4double v = p->GetVelocity(); - if(!(v > 0.)) - { + if (! (v > 0.)) { v = 10e-9; } @@ -76,17 +69,13 @@ void G4CellScoreComposer::SetCollisionWeight(G4double weight) const G4CellScoreValues& G4CellScoreComposer::GetStandardCellScoreValues() const { - if(fSCScoreValues.fSumSLW > 0.) - { + if (fSCScoreValues.fSumSLW > 0.) { // divide by SumSLW or SumSLW_v ? - fSCScoreValues.fNumberWeightedEnergy = - fSCScoreValues.fSumSLWE_v / fSCScoreValues.fSumSLW_v; + fSCScoreValues.fNumberWeightedEnergy = fSCScoreValues.fSumSLWE_v / fSCScoreValues.fSumSLW_v; - fSCScoreValues.fFluxWeightedEnergy = - fSCScoreValues.fSumSLWE / fSCScoreValues.fSumSLW; + fSCScoreValues.fFluxWeightedEnergy = fSCScoreValues.fSumSLWE / fSCScoreValues.fSumSLW; - fSCScoreValues.fAverageTrackWeight = - fSCScoreValues.fSumSLW / fSCScoreValues.fSumSL; + fSCScoreValues.fAverageTrackWeight = fSCScoreValues.fSumSLW / fSCScoreValues.fSumSL; } return fSCScoreValues; } @@ -105,7 +94,6 @@ std::ostream& operator<<(std::ostream& out, const G4CellScoreComposer& ps) out << "Collisions*Wgt: " << scores.fSumCollisionsWeight << G4endl; out << "NumWGTedEnergy: " << scores.fNumberWeightedEnergy << G4endl; out << "FluxWGTedEnergy: " << scores.fFluxWeightedEnergy << G4endl; - out << "Aver.TrackWGT*I: " << scores.fAverageTrackWeight * scores.fImportance - << G4endl; + out << "Aver.TrackWGT*I: " << scores.fAverageTrackWeight * scores.fImportance << G4endl; return out; } diff --git a/source/digits_hits/detector/src/G4HCtable.cc b/source/digits_hits/detector/src/G4HCtable.cc index 64389fe05ab..1015c838a4f 100644 --- a/source/digits_hits/detector/src/G4HCtable.cc +++ b/source/digits_hits/detector/src/G4HCtable.cc @@ -27,18 +27,13 @@ // #include "G4HCtable.hh" -#include "G4VSensitiveDetector.hh" - -G4HCtable::G4HCtable() { ; } -G4HCtable::~G4HCtable() { ; } +#include "G4VSensitiveDetector.hh" G4int G4HCtable::Registor(G4String SDname, G4String HCname) { - for(std::size_t i = 0; i < HClist.size(); ++i) - { - if(HClist[i] == HCname && SDlist[i] == SDname) - return -1; + for (std::size_t i = 0; i < HClist.size(); ++i) { + if (HClist[i] == HCname && SDlist[i] == SDname) return -1; } HClist.push_back(HCname); SDlist.push_back(SDname); @@ -48,29 +43,22 @@ G4int G4HCtable::Registor(G4String SDname, G4String HCname) G4int G4HCtable::GetCollectionID(G4String HCname) const { G4int i = -1; - if(HCname.find("/") == std::string::npos) // HCname only + if (HCname.find('/') == std::string::npos) // HCname only { - for(std::size_t j = 0; j < HClist.size(); ++j) - { - if(HClist[j] == HCname) - { - if(i >= 0) - return -2; + for (std::size_t j = 0; j < HClist.size(); ++j) { + if (HClist[j] == HCname) { + if (i >= 0) return -2; i = (G4int)j; } } } - else - { - for(std::size_t j = 0; j < HClist.size(); ++j) - { + else { + for (std::size_t j = 0; j < HClist.size(); ++j) { G4String tgt = SDlist[j]; tgt += "/"; tgt += HClist[j]; - if(tgt == HCname) - { - if(i >= 0) - return -2; + if (tgt == HCname) { + if (i >= 0) return -2; i = (G4int)j; } } @@ -80,28 +68,23 @@ G4int G4HCtable::GetCollectionID(G4String HCname) const G4int G4HCtable::GetCollectionID(G4VSensitiveDetector* aSD) const { - if(aSD->GetNumberOfCollections() < 1) - { + if (aSD->GetNumberOfCollections() < 1) { G4cerr << "Sensitive detector <" << aSD->GetName() << "> does not have a registered hits collection." << G4endl; return -1; } - if(aSD->GetNumberOfCollections() > 1) - { + if (aSD->GetNumberOfCollections() > 1) { G4cerr << "Sensitive detector <" << aSD->GetName() << "> has more than one registered hits collections." << G4endl; G4cerr << "Candidates are : "; - for(G4int j = 0; j < aSD->GetNumberOfCollections(); ++j) - { + for (G4int j = 0; j < aSD->GetNumberOfCollections(); ++j) { G4cerr << aSD->GetCollectionName(j) << " "; } G4cerr << G4endl; return -1; } - for(std::size_t k = 0; k < SDlist.size(); ++k) - { - if(SDlist[k] == aSD->GetName()) - return (G4int)k; + for (std::size_t k = 0; k < SDlist.size(); ++k) { + if (SDlist[k] == aSD->GetName()) return (G4int)k; } return -1; } diff --git a/source/digits_hits/detector/src/G4MultiFunctionalDetector.cc b/source/digits_hits/detector/src/G4MultiFunctionalDetector.cc index 954ef6fd71e..a04c5e87372 100644 --- a/source/digits_hits/detector/src/G4MultiFunctionalDetector.cc +++ b/source/digits_hits/detector/src/G4MultiFunctionalDetector.cc @@ -31,29 +31,26 @@ // // #include "G4MultiFunctionalDetector.hh" + #include "G4SDManager.hh" #include "G4VPrimitiveScorer.hh" -G4MultiFunctionalDetector::G4MultiFunctionalDetector(G4String name) - : G4VSensitiveDetector(name) +G4MultiFunctionalDetector::G4MultiFunctionalDetector(G4String name) : G4VSensitiveDetector(name) { ; } G4MultiFunctionalDetector::~G4MultiFunctionalDetector() { - for(auto pr : primitives) + for (auto pr : primitives) delete pr; primitives.clear(); } -G4bool G4MultiFunctionalDetector::ProcessHits(G4Step* aStep, - G4TouchableHistory* aTH) +G4bool G4MultiFunctionalDetector::ProcessHits(G4Step* aStep, G4TouchableHistory* aTH) { - if(aStep->GetStepLength() > 0. || aStep->GetTotalEnergyDeposit() > 0.) - { - for(auto pr : primitives) - { + if (aStep->GetStepLength() > 0. || aStep->GetTotalEnergyDeposit() > 0.) { + for (auto pr : primitives) { pr->HitPrimitive(aStep, aTH); } } @@ -62,29 +59,23 @@ G4bool G4MultiFunctionalDetector::ProcessHits(G4Step* aStep, G4bool G4MultiFunctionalDetector::RegisterPrimitive(G4VPrimitiveScorer* aPS) { - for(auto pr : primitives) - { - if(pr == aPS) - { + for (auto pr : primitives) { + if (pr == aPS) { G4ExceptionDescription ED; - ED << "Primitive <" << aPS->GetName() << "> is already defined in <" - << SensitiveDetectorName << ">." << G4endl - << "Method RegisterPrimitive() is ignored." << G4endl; - G4Exception("G4MultiFunctionalDetector::RegisterPrimitive", "Det0101", - JustWarning, ED); + ED << "Primitive <" << aPS->GetName() << "> is already defined in <" << SensitiveDetectorName + << ">." << G4endl << "Method RegisterPrimitive() is ignored." << G4endl; + G4Exception("G4MultiFunctionalDetector::RegisterPrimitive", "Det0101", JustWarning, ED); return false; } } primitives.push_back(aPS); aPS->SetMultiFunctionalDetector(this); collectionName.insert(aPS->GetName()); - if(G4SDManager::GetSDMpointer()->FindSensitiveDetector(SensitiveDetectorName, - false)) + if (G4SDManager::GetSDMpointer()->FindSensitiveDetector(SensitiveDetectorName, false) != nullptr) { // This G4MultiFunctionalDetector has already been registered to // G4SDManager. Make sure this new primitive is registered as well. - G4SDManager::GetSDMpointer()->AddNewCollection(SensitiveDetectorName, - aPS->GetName()); + G4SDManager::GetSDMpointer()->AddNewCollection(SensitiveDetectorName, aPS->GetName()); } return true; } @@ -92,54 +83,47 @@ G4bool G4MultiFunctionalDetector::RegisterPrimitive(G4VPrimitiveScorer* aPS) G4bool G4MultiFunctionalDetector::RemovePrimitive(G4VPrimitiveScorer* aPS) { auto pr = std::find(primitives.begin(), primitives.end(), aPS); - if(pr != primitives.end()) - { + if (pr != primitives.end()) { primitives.erase(pr); aPS->SetMultiFunctionalDetector(nullptr); return true; } - G4cerr << "Primitive <" << aPS->GetName() << "> is not defined in <" - << SensitiveDetectorName << ">." << G4endl - << "Method RemovePrimitive() is ignored." << G4endl; + G4cerr << "Primitive <" << aPS->GetName() << "> is not defined in <" << SensitiveDetectorName + << ">." << G4endl << "Method RemovePrimitive() is ignored." << G4endl; return false; } void G4MultiFunctionalDetector::Initialize(G4HCofThisEvent* HC) { - for(auto pr : primitives) - { + for (auto pr : primitives) { pr->Initialize(HC); } } void G4MultiFunctionalDetector::EndOfEvent(G4HCofThisEvent* HC) { - for(auto pr : primitives) - { + for (auto pr : primitives) { pr->EndOfEvent(HC); } } void G4MultiFunctionalDetector::clear() { - for(auto pr : primitives) - { + for (auto pr : primitives) { pr->clear(); } } void G4MultiFunctionalDetector::DrawAll() { - for(auto pr : primitives) - { + for (auto pr : primitives) { pr->DrawAll(); } } void G4MultiFunctionalDetector::PrintAll() { - for(auto pr : primitives) - { + for (auto pr : primitives) { pr->PrintAll(); } } diff --git a/source/digits_hits/detector/src/G4MultiSensitiveDetector.cc b/source/digits_hits/detector/src/G4MultiSensitiveDetector.cc index 92daa5a141d..3290eeafe80 100644 --- a/source/digits_hits/detector/src/G4MultiSensitiveDetector.cc +++ b/source/digits_hits/detector/src/G4MultiSensitiveDetector.cc @@ -26,55 +26,10 @@ // G4MultiSensitiveDetector #include "G4MultiSensitiveDetector.hh" -#include "G4SDManager.hh" -#include - -//#define MSDDEBUG -#ifdef MSDDEBUG -# define DBG(msg) G4cout << msg << G4endl -#else -# define DBG(msg) -#endif -#define VDBG(vl, msg) \ - if(vl <= verboseLevel) \ - G4cout << msg << G4endl - -G4MultiSensitiveDetector::G4MultiSensitiveDetector(G4String name) - : G4VSensitiveDetector(name) -{ -#ifdef MSDDEBUG - verboseLevel = 3; -#endif - VDBG(1, "Creating G4MultiSenstiveDetector with name: " << name); -} -G4MultiSensitiveDetector::~G4MultiSensitiveDetector() -{ - VDBG(2, GetName() << " : Destructing G4MultiSensitiveDetector"); - ClearSDs(); -} - -G4MultiSensitiveDetector::G4MultiSensitiveDetector( - const G4MultiSensitiveDetector& rhs) - : G4VSensitiveDetector(rhs) - , fSensitiveDetectors(rhs.fSensitiveDetectors) -{ - VDBG(3, GetName() << " : Copy constructor called."); -} +#include "G4SDManager.hh" -G4MultiSensitiveDetector& G4MultiSensitiveDetector::operator=( - const G4MultiSensitiveDetector& rhs) -{ - if(this != &rhs) - { - // G4VSensitiveDetector::operator=(static_cast(rhs)); - G4VSensitiveDetector::operator=( - static_cast(rhs)); - fSensitiveDetectors = rhs.fSensitiveDetectors; - } - return *this; -} +#include void G4MultiSensitiveDetector::Initialize(G4HCofThisEvent*) { @@ -92,28 +47,26 @@ void G4MultiSensitiveDetector::EndOfEvent(G4HCofThisEvent*) void G4MultiSensitiveDetector::clear() { - for(auto sd : fSensitiveDetectors) + for (auto sd : fSensitiveDetectors) sd->clear(); } void G4MultiSensitiveDetector::DrawAll() { - for(auto sd : fSensitiveDetectors) + for (auto sd : fSensitiveDetectors) sd->DrawAll(); } void G4MultiSensitiveDetector::PrintAll() { - for(auto sd : fSensitiveDetectors) + for (auto sd : fSensitiveDetectors) sd->PrintAll(); } G4bool G4MultiSensitiveDetector::ProcessHits(G4Step* aStep, G4TouchableHistory*) { - VDBG(2, GetName() << " : Called processHits: " << aStep - << " with Edep: " << aStep->GetTotalEnergyDeposit()); G4bool result = true; - for(auto sd : fSensitiveDetectors) + for (auto sd : fSensitiveDetectors) result &= sd->Hit(aStep); return result; } @@ -127,18 +80,15 @@ G4int G4MultiSensitiveDetector::GetCollectionID(G4int) << " First retrieve a contained G4VSensitiveDetector with. i.e. GetSD " "and then " << " call this method."; - G4Exception("G4MultiSensitiveDetector::GetCollectionID", "Det0011", - FatalException, msg); + G4Exception("G4MultiSensitiveDetector::GetCollectionID", "Det0011", FatalException, msg); return -1; } // This method requires all contained SD to be clonable G4VSensitiveDetector* G4MultiSensitiveDetector::Clone() const { - VDBG(2, GetName() << "Cloning an instance of G4MultiSensitiveDetector"); - G4MultiSensitiveDetector* newInst = - new G4MultiSensitiveDetector(this->GetName()); - for(auto sd : fSensitiveDetectors) + auto newInst = new G4MultiSensitiveDetector(this->GetName()); + for (auto sd : fSensitiveDetectors) newInst->AddSD(sd->Clone()); return newInst; } diff --git a/source/digits_hits/detector/src/G4SDManager.cc b/source/digits_hits/detector/src/G4SDManager.cc index d13b209db55..aa4858b9c84 100644 --- a/source/digits_hits/detector/src/G4SDManager.cc +++ b/source/digits_hits/detector/src/G4SDManager.cc @@ -27,8 +27,9 @@ // #include "G4SDManager.hh" -#include "G4SDmessenger.hh" + #include "G4HCofThisEvent.hh" +#include "G4SDmessenger.hh" #include "G4VHitsCollection.hh" #include "G4VSensitiveDetector.hh" #include "G4ios.hh" @@ -37,8 +38,7 @@ G4ThreadLocal G4SDManager* G4SDManager::fSDManager = nullptr; G4SDManager* G4SDManager::GetSDMpointer() { - if(!fSDManager) - { + if (fSDManager == nullptr) { fSDManager = new G4SDManager; } return fSDManager; @@ -47,12 +47,11 @@ G4SDManager* G4SDManager::GetSDMpointer() G4SDManager* G4SDManager::GetSDMpointerIfExist() { return fSDManager; } G4SDManager::G4SDManager() - : verboseLevel(0) { G4String topName = "/"; - treeTop = new G4SDStructure(topName); - theMessenger = new G4SDmessenger(this); - HCtable = new G4HCtable; + treeTop = new G4SDStructure(topName); + theMessenger = new G4SDmessenger(this); + HCtable = new G4HCtable; } G4SDManager::~G4SDManager() @@ -62,92 +61,76 @@ G4SDManager::~G4SDManager() delete treeTop; DestroyFilters(); theMessenger = nullptr; - HCtable = nullptr; - treeTop = nullptr; - fSDManager = nullptr; + HCtable = nullptr; + treeTop = nullptr; + fSDManager = nullptr; } void G4SDManager::AddNewDetector(G4VSensitiveDetector* aSD) { G4int numberOfCollections = aSD->GetNumberOfCollections(); - G4String pathName = aSD->GetPathName(); - if(pathName[0] != '/') - pathName.insert(0, "/"); - if(pathName.back() != '/') - pathName += "/"; + G4String pathName = aSD->GetPathName(); + if (pathName[0] != '/') pathName.insert(0, "/"); + if (pathName.back() != '/') pathName += "/"; treeTop->AddNewDetector(aSD, pathName); - if(numberOfCollections < 1) - return; - for(G4int i = 0; i < numberOfCollections; i++) - { + if (numberOfCollections < 1) return; + for (G4int i = 0; i < numberOfCollections; i++) { G4String SDname = aSD->GetName(); G4String DCname = aSD->GetCollectionName(i); AddNewCollection(SDname, DCname); } - if(verboseLevel > 0) - { - G4cout << "New sensitive detector <" << aSD->GetName() - << "> is registered at " << pathName << G4endl; + if (verboseLevel > 0) { + G4cout << "New sensitive detector <" << aSD->GetName() << "> is registered at " << pathName + << G4endl; } } void G4SDManager::AddNewCollection(G4String SDname, G4String DCname) { G4int i = HCtable->Registor(SDname, DCname); - if(verboseLevel > 0) - { - if(i < 0) - { - if(verboseLevel > 1) - G4cout << "G4SDManager::AddNewCollection : the collection <" << SDname - << "/" << DCname << "> has already been reginstered." << G4endl; + if (verboseLevel > 0) { + if (i < 0) { + if (verboseLevel > 1) + G4cout << "G4SDManager::AddNewCollection : the collection <" << SDname << "/" << DCname + << "> has already been reginstered." << G4endl; } - else - { - G4cout << "G4SDManager::AddNewCollection : the collection <" << SDname - << "/" << DCname << "> is registered at " << i << G4endl; + else { + G4cout << "G4SDManager::AddNewCollection : the collection <" << SDname << "/" << DCname + << "> is registered at " << i << G4endl; } } } G4HCofThisEvent* G4SDManager::PrepareNewEvent() { - G4HCofThisEvent* HCE = new G4HCofThisEvent(HCtable->entries()); + auto HCE = new G4HCofThisEvent(HCtable->entries()); treeTop->Initialize(HCE); return HCE; } -void G4SDManager::TerminateCurrentEvent(G4HCofThisEvent* HCE) -{ - treeTop->Terminate(HCE); -} +void G4SDManager::TerminateCurrentEvent(G4HCofThisEvent* HCE) { treeTop->Terminate(HCE); } void G4SDManager::Activate(G4String dName, G4bool activeFlag) { G4String pathName = dName; - if(pathName[0] != '/') - pathName.insert(0, "/"); + if (pathName[0] != '/') pathName.insert(0, "/"); treeTop->Activate(pathName, activeFlag); } -G4VSensitiveDetector* G4SDManager::FindSensitiveDetector(G4String dName, - G4bool warning) +G4VSensitiveDetector* G4SDManager::FindSensitiveDetector(G4String dName, G4bool warning) { G4String pathName = dName; - if(pathName[0] != '/') - pathName.insert(0, "/"); + if (pathName[0] != '/') pathName.insert(0, "/"); return treeTop->FindSensitiveDetector(pathName, warning); } G4int G4SDManager::GetCollectionID(G4String colName) { G4int id = HCtable->GetCollectionID(colName); - if(id == -1) - { + if (id == -1) { G4cout << "<" << colName << "> is not found." << G4endl; } - else if(id == -2) - { + else if (id == -2) { G4cout << "<" << colName << "> is ambiguous." << G4endl; } return id; @@ -161,17 +144,12 @@ G4int G4SDManager::GetCollectionID(G4VHitsCollection* aHC) return GetCollectionID(HCname); } -void G4SDManager::RegisterSDFilter(G4VSDFilter* filter) -{ - FilterList.push_back(filter); -} +void G4SDManager::RegisterSDFilter(G4VSDFilter* filter) { FilterList.push_back(filter); } void G4SDManager::DeRegisterSDFilter(G4VSDFilter* filter) { - for(auto f = FilterList.begin(); f != FilterList.end(); f++) - { - if(*f == filter) - { + for (auto f = FilterList.begin(); f != FilterList.end(); f++) { + if (*f == filter) { FilterList.erase(f); break; } @@ -181,10 +159,8 @@ void G4SDManager::DeRegisterSDFilter(G4VSDFilter* filter) void G4SDManager::DestroyFilters() { auto f = FilterList.begin(); - while(f != FilterList.end()) - { - if(verboseLevel > 0) - G4cout << "### deleting " << (*f)->GetName() << " " << (*f) << G4endl; + while (f != FilterList.end()) { + if (verboseLevel > 0) G4cout << "### deleting " << (*f)->GetName() << " " << (*f) << G4endl; delete *f; f = FilterList.begin(); } diff --git a/source/digits_hits/detector/src/G4SDStructure.cc b/source/digits_hits/detector/src/G4SDStructure.cc index f3dce22d824..cf93ba1540a 100644 --- a/source/digits_hits/detector/src/G4SDStructure.cc +++ b/source/digits_hits/detector/src/G4SDStructure.cc @@ -28,16 +28,15 @@ // G4SDStructure #include "G4SDStructure.hh" + #include "G4ios.hh" G4SDStructure::G4SDStructure(const G4String& aPath) - : verboseLevel(0) { pathName = aPath; - dirName = aPath; - auto i = dirName.length(); - if(i > 1) - { + dirName = aPath; + auto i = dirName.length(); + if (i > 1) { dirName.erase(i - 1); auto isl = dirName.rfind('/'); dirName.erase(0, isl + 1); @@ -47,54 +46,44 @@ G4SDStructure::G4SDStructure(const G4String& aPath) G4SDStructure::~G4SDStructure() { - for(auto st : structure) + for (auto st : structure) delete st; structure.clear(); - for(auto dt : detector) + for (auto dt : detector) delete dt; detector.clear(); } -G4bool G4SDStructure::operator==(const G4SDStructure& right) const -{ - return (this == &right); -} +G4bool G4SDStructure::operator==(const G4SDStructure& right) const { return (this == &right); } -void G4SDStructure::AddNewDetector(G4VSensitiveDetector* aSD, - const G4String& treeStructure) +void G4SDStructure::AddNewDetector(G4VSensitiveDetector* aSD, const G4String& treeStructure) { G4String remainingPath = treeStructure; remainingPath.erase(0, pathName.length()); - if(!remainingPath.empty()) - { // The detector should be kept in subdirectory. - // First, check if the subdirectoy exists. - G4String subD = ExtractDirName(remainingPath); + if (! remainingPath.empty()) { // The detector should be kept in subdirectory. + // First, check if the subdirectoy exists. + G4String subD = ExtractDirName(remainingPath); G4SDStructure* tgtSDS = FindSubDirectory(subD); - if(tgtSDS == nullptr) - { // Subdirectory not found. Create a new directory. + if (tgtSDS == nullptr) { // Subdirectory not found. Create a new directory. subD.insert(0, pathName); tgtSDS = new G4SDStructure(subD); structure.push_back(tgtSDS); } tgtSDS->AddNewDetector(aSD, treeStructure); } - else - { // The sensitive detector should be kept in this directory. + else { // The sensitive detector should be kept in this directory. G4VSensitiveDetector* tgtSD = GetSD(aSD->GetName()); - if(!tgtSD) - { + if (tgtSD == nullptr) { detector.push_back(aSD); } - else if(tgtSD != aSD) - { + else if (tgtSD != aSD) { #ifdef G4VERBOSE G4ExceptionDescription ed; ed << aSD->GetName() << " had already been stored in " << pathName << ". Object pointer is overwritten.\n"; ed << "It's users' responsibility to delete the old sensitive detector " "object."; - G4Exception("G4SDStructure::AddNewDetector()", "DET1010", JustWarning, - ed); + G4Exception("G4SDStructure::AddNewDetector()", "DET1010", JustWarning, ed); #endif RemoveSD(tgtSD); detector.push_back(aSD); @@ -104,20 +93,16 @@ void G4SDStructure::AddNewDetector(G4VSensitiveDetector* aSD, G4SDStructure* G4SDStructure::FindSubDirectory(const G4String& subD) { - for(auto st : structure) - { - if(subD == st->dirName) - return st; + for (auto st : structure) { + if (subD == st->dirName) return st; } return nullptr; } G4VSensitiveDetector* G4SDStructure::GetSD(const G4String& aSDName) { - for(auto det : detector) - { - if(aSDName == det->GetName()) - return det; + for (auto det : detector) { + if (aSDName == det->GetName()) return det; } return nullptr; } @@ -125,16 +110,14 @@ G4VSensitiveDetector* G4SDStructure::GetSD(const G4String& aSDName) void G4SDStructure::RemoveSD(G4VSensitiveDetector* sd) { auto det = std::find(detector.begin(), detector.end(), sd); - if(det != detector.end()) - detector.erase(det); + if (det != detector.end()) detector.erase(det); } G4String G4SDStructure::ExtractDirName(const G4String& aName) { G4String subD = aName; - auto i = aName.find('/'); - if(i != G4String::npos) - subD.erase(i + 1); + auto i = aName.find('/'); + if (i != G4String::npos) subD.erase(i + 1); return subD; } @@ -142,118 +125,93 @@ void G4SDStructure::Activate(const G4String& aName, G4bool sensitiveFlag) { G4String aPath = aName; aPath.erase(0, pathName.length()); - if(aPath.find('/') != std::string::npos) - { // Command is ordered for a subdirectory. - G4String subD = ExtractDirName(aPath); + if (aPath.find('/') != std::string::npos) { // Command is ordered for a subdirectory. + G4String subD = ExtractDirName(aPath); G4SDStructure* tgtSDS = FindSubDirectory(subD); - if(tgtSDS == nullptr) - { // The subdirectory is not found + if (tgtSDS == nullptr) { // The subdirectory is not found G4cout << subD << " is not found in " << pathName << G4endl; } - else - { + else { tgtSDS->Activate(aName, sensitiveFlag); } } - else if(aPath.empty()) - { // Command is ordered for all detectors in this directory. - for(auto det : detector) + else if (aPath.empty()) { // Command is ordered for all detectors in this directory. + for (auto det : detector) det->Activate(sensitiveFlag); - for(auto st : structure) + for (auto st : structure) st->Activate(G4String("/"), sensitiveFlag); } - else - { // Command is ordered to a particular detector. + else { // Command is ordered to a particular detector. G4VSensitiveDetector* tgtSD = GetSD(aPath); - if(tgtSD == nullptr) - { // The detector is not found. + if (tgtSD == nullptr) { // The detector is not found. G4cout << aPath << " is not found in " << pathName << G4endl; } - else - { + else { tgtSD->Activate(sensitiveFlag); } } } -G4VSensitiveDetector* G4SDStructure::FindSensitiveDetector( - const G4String& aName, G4bool warning) +G4VSensitiveDetector* G4SDStructure::FindSensitiveDetector(const G4String& aName, G4bool warning) { G4String aPath = aName; aPath.erase(0, pathName.length()); - if(aPath.find('/') != std::string::npos) - { // SD exists in sub-directory - G4String subD = ExtractDirName(aPath); + if (aPath.find('/') != std::string::npos) { // SD exists in sub-directory + G4String subD = ExtractDirName(aPath); G4SDStructure* tgtSDS = FindSubDirectory(subD); - if(tgtSDS == nullptr) - { // The subdirectory is not found - if(warning) - G4cout << subD << " is not found in " << pathName << G4endl; + if (tgtSDS == nullptr) { // The subdirectory is not found + if (warning) G4cout << subD << " is not found in " << pathName << G4endl; return nullptr; } - else - { - return tgtSDS->FindSensitiveDetector(aName, warning); - } + + return tgtSDS->FindSensitiveDetector(aName, warning); } - else - { // SD must exist in this directory - G4VSensitiveDetector* tgtSD = GetSD(aPath); - if(tgtSD == nullptr) - { // The detector is not found. - if(warning) - G4cout << aPath << " is not found in " << pathName << G4endl; - } - return tgtSD; + + // SD must exist in this directory + G4VSensitiveDetector* tgtSD = GetSD(aPath); + if (tgtSD == nullptr) { // The detector is not found. + if (warning) G4cout << aPath << " is not found in " << pathName << G4endl; } + return tgtSD; } void G4SDStructure::Initialize(G4HCofThisEvent* HCE) { // Broadcast to subdirectories. - for(auto st : structure) - { + for (auto st : structure) { st->Initialize(HCE); } // Initialize all detectors in this directory. - for(auto dt : detector) - { - if(dt->isActive()) - dt->Initialize(HCE); + for (auto dt : detector) { + if (dt->isActive()) dt->Initialize(HCE); } } void G4SDStructure::Terminate(G4HCofThisEvent* HCE) { // Broadcast to subdirectories. - for(auto st : structure) - { + for (auto st : structure) { st->Terminate(HCE); } // Terminate all detectors in this directory. - for(auto dt : detector) - { - if(dt->isActive()) - dt->EndOfEvent(HCE); + for (auto dt : detector) { + if (dt->isActive()) dt->EndOfEvent(HCE); } } void G4SDStructure::ListTree() { G4cout << pathName << G4endl; - for(auto sd : detector) - { + for (auto sd : detector) { G4cout << pathName << sd->GetName(); - if(sd->isActive()) - { + if (sd->isActive()) { G4cout << " *** Active "; } - else - { + else { G4cout << " XXX Inactive "; } G4cout << G4endl; } - for(auto st : structure) + for (auto st : structure) st->ListTree(); } diff --git a/source/digits_hits/detector/src/G4SDmessenger.cc b/source/digits_hits/detector/src/G4SDmessenger.cc index 343c7dfc6cf..8a011b90885 100644 --- a/source/digits_hits/detector/src/G4SDmessenger.cc +++ b/source/digits_hits/detector/src/G4SDmessenger.cc @@ -28,14 +28,14 @@ // --------------------------------------------------------------------- #include "G4SDmessenger.hh" + #include "G4SDManager.hh" -#include "G4UIdirectory.hh" -#include "G4UIcmdWithoutParameter.hh" #include "G4UIcmdWithAString.hh" #include "G4UIcmdWithAnInteger.hh" +#include "G4UIcmdWithoutParameter.hh" +#include "G4UIdirectory.hh" -G4SDmessenger::G4SDmessenger(G4SDManager* SDManager) - : fSDMan(SDManager) +G4SDmessenger::G4SDmessenger(G4SDManager* SDManager) : fSDMan(SDManager) { hitsDir = new G4UIdirectory("/hits/"); hitsDir->SetGuidance("Sensitive detectors and Hits"); @@ -69,20 +69,16 @@ G4SDmessenger::~G4SDmessenger() void G4SDmessenger::SetNewValue(G4UIcommand* command, G4String newVal) { - if(command == listCmd) - { + if (command == listCmd) { fSDMan->ListTree(); } - if(command == activeCmd) - { - fSDMan->Activate(newVal, 1); + if (command == activeCmd) { + fSDMan->Activate(newVal, true); } - if(command == inactiveCmd) - { - fSDMan->Activate(newVal, 0); + if (command == inactiveCmd) { + fSDMan->Activate(newVal, false); } - if(command == verboseCmd) - { + if (command == verboseCmd) { fSDMan->SetVerboseLevel(verboseCmd->GetNewIntValue(newVal)); } return; diff --git a/source/digits_hits/detector/src/G4SensitiveVolumeList.cc b/source/digits_hits/detector/src/G4SensitiveVolumeList.cc index 4532ef62f9e..0c434d68a72 100644 --- a/source/digits_hits/detector/src/G4SensitiveVolumeList.cc +++ b/source/digits_hits/detector/src/G4SensitiveVolumeList.cc @@ -35,57 +35,30 @@ #include "G4SensitiveVolumeList.hh" -// Constructors -G4SensitiveVolumeList::G4SensitiveVolumeList() {} - -G4SensitiveVolumeList::G4SensitiveVolumeList(const G4SensitiveVolumeList& right) -{ - thePhysicalVolumeList = right.thePhysicalVolumeList; - theLogicalVolumeList = right.theLogicalVolumeList; -} - -// Destructor -G4SensitiveVolumeList::~G4SensitiveVolumeList() {} - -// Assignment Operation -G4SensitiveVolumeList& G4SensitiveVolumeList::operator=( - const G4SensitiveVolumeList& right) -{ - thePhysicalVolumeList = right.thePhysicalVolumeList; - theLogicalVolumeList = right.theLogicalVolumeList; - return *this; -} - // Equality Operations -G4bool G4SensitiveVolumeList::operator==( - const G4SensitiveVolumeList& right) const +G4bool G4SensitiveVolumeList::operator==(const G4SensitiveVolumeList& right) const { - return (this == (G4SensitiveVolumeList*) &right); + return (this == (G4SensitiveVolumeList*)&right); } -G4bool G4SensitiveVolumeList::operator!=( - const G4SensitiveVolumeList& right) const +G4bool G4SensitiveVolumeList::operator!=(const G4SensitiveVolumeList& right) const { - return (this != (G4SensitiveVolumeList*) &right); + return (this != (G4SensitiveVolumeList*)&right); } // Other Operations G4bool G4SensitiveVolumeList::CheckPV(const G4VPhysicalVolume* pvp) const { - for(auto pv : thePhysicalVolumeList) - { - if(pv == pvp) - return true; + for (auto pv : thePhysicalVolumeList) { + if (pv == pvp) return true; } return false; } G4bool G4SensitiveVolumeList::CheckLV(const G4LogicalVolume* lvp) const { - for(auto lv : theLogicalVolumeList) - { - if(lv == lvp) - return true; + for (auto lv : theLogicalVolumeList) { + if (lv == lvp) return true; } return false; } diff --git a/source/digits_hits/detector/src/G4TrackLogger.cc b/source/digits_hits/detector/src/G4TrackLogger.cc index 2684d847172..6d0ec3bacd1 100644 --- a/source/digits_hits/detector/src/G4TrackLogger.cc +++ b/source/digits_hits/detector/src/G4TrackLogger.cc @@ -34,16 +34,9 @@ #include "G4TrackLogger.hh" -G4TrackLogger::G4TrackLogger() - : fPreviousEventID(-1) -{} - -G4TrackLogger::~G4TrackLogger() {} - void G4TrackLogger::SetEventID(G4int id) { - if(id != fPreviousEventID) - { + if (id != fPreviousEventID) { fTrackIDsSet.clear(); fPreviousEventID = id; } @@ -52,17 +45,14 @@ void G4TrackLogger::SetEventID(G4int id) G4bool G4TrackLogger::FirstEnterance(G4int trid) { G4bool first = true; - auto n = fTrackIDsSet.count(trid); - if(n == 1) - { + auto n = fTrackIDsSet.count(trid); + if (n == 1) { first = false; } - else if(n == 0) - { + else if (n == 0) { fTrackIDsSet.insert(trid); } - else if(n > 1) - { + else if (n > 1) { G4cout << "Error G4TrackLogger::FirstEnterance: " << "more than one elm in set!" << G4endl; } diff --git a/source/digits_hits/detector/src/G4VPrimitiveScorer.cc b/source/digits_hits/detector/src/G4VPrimitiveScorer.cc index dde10f33420..9d159e7329f 100644 --- a/source/digits_hits/detector/src/G4VPrimitiveScorer.cc +++ b/source/digits_hits/detector/src/G4VPrimitiveScorer.cc @@ -27,98 +27,75 @@ // // G4VPrimitiveScorer #include "G4VPrimitiveScorer.hh" + #include "G4MultiFunctionalDetector.hh" #include "G4SDManager.hh" #include "G4Step.hh" #include "G4TouchableHistory.hh" #include "G4UnitsTable.hh" -#include "G4VSolid.hh" #include "G4VPVParameterisation.hh" +#include "G4VSolid.hh" G4VPrimitiveScorer::G4VPrimitiveScorer(G4String name, G4int depth) - : primitiveName(name) - , detector(nullptr) - , filter(nullptr) - , verboseLevel(0) - , indexDepth(depth) - , unitName("NoUnit") - , unitValue(1.0) - , fNi(0) - , fNj(0) - , fNk(0) -{ - ; -} - -G4VPrimitiveScorer::~G4VPrimitiveScorer() { ; } + : primitiveName(name), indexDepth(depth) +{} G4int G4VPrimitiveScorer::GetCollectionID(G4int) { - if(detector) - return G4SDManager::GetSDMpointer()->GetCollectionID(detector->GetName() + - "/" + primitiveName); - else - return -1; + if (detector != nullptr) + return G4SDManager::GetSDMpointer()->GetCollectionID(detector->GetName() + "/" + primitiveName); + return -1; } -void G4VPrimitiveScorer::Initialize(G4HCofThisEvent*) { ; } +void G4VPrimitiveScorer::Initialize(G4HCofThisEvent*) {} -void G4VPrimitiveScorer::EndOfEvent(G4HCofThisEvent*) { ; } +void G4VPrimitiveScorer::EndOfEvent(G4HCofThisEvent*) {} -void G4VPrimitiveScorer::clear() { ; } +void G4VPrimitiveScorer::clear() {} -void G4VPrimitiveScorer::DrawAll() { ; } +void G4VPrimitiveScorer::DrawAll() {} -void G4VPrimitiveScorer::PrintAll() { ; } +void G4VPrimitiveScorer::PrintAll() {} G4int G4VPrimitiveScorer::GetIndex(G4Step* aStep) { - G4StepPoint* preStep = aStep->GetPreStepPoint(); - G4TouchableHistory* th = (G4TouchableHistory*) (preStep->GetTouchable()); + G4StepPoint* preStep = aStep->GetPreStepPoint(); + auto th = (G4TouchableHistory*)(preStep->GetTouchable()); return th->GetReplicaNumber(indexDepth); } -void G4VPrimitiveScorer::CheckAndSetUnit(const G4String& unit, - const G4String& category) +void G4VPrimitiveScorer::CheckAndSetUnit(const G4String& unit, const G4String& category) { - if(G4UnitDefinition::GetCategory(unit) == category) - { - unitName = unit; + if (G4UnitDefinition::GetCategory(unit) == category) { + unitName = unit; unitValue = G4UnitDefinition::GetValueOf(unit); } - else - { - G4String msg = "Invalid unit [" + unit + "] (Current unit is [" + - GetUnit() + "] ) requested for " + GetName(); - G4Exception("G4VPrimitiveScorer::CheckAndSetUnit", "Det0151", JustWarning, - msg); + else { + G4String msg = "Invalid unit [" + unit + "] (Current unit is [" + GetUnit() + + "] ) requested for " + GetName(); + G4Exception("G4VPrimitiveScorer::CheckAndSetUnit", "Det0151", JustWarning, msg); } } G4VSolid* G4VPrimitiveScorer::ComputeSolid(G4Step* aStep, G4int replicaIdx) { - G4VSolid* solid = nullptr; + G4VSolid* solid = nullptr; G4StepPoint* preStep = aStep->GetPreStepPoint(); - auto physVol = preStep->GetPhysicalVolume(); + auto physVol = preStep->GetPhysicalVolume(); G4VPVParameterisation* physParam = physVol->GetParameterisation(); - if(physParam) - { // for parameterized volume - if(replicaIdx < 0) - { + if (physParam != nullptr) { // for parameterized volume + if (replicaIdx < 0) { G4ExceptionDescription desc; - desc << "Incorrect replica number --- GetReplicaNumber : " << replicaIdx - << G4endl; - G4Exception("G4VPrimitiveScorer::ComputeSolid", "DetPS0001", JustWarning, - desc); + desc << "Incorrect replica number --- GetReplicaNumber : " << replicaIdx << G4endl; + G4Exception("G4VPrimitiveScorer::ComputeSolid", "DetPS0001", JustWarning, desc); // replicaIdx= 0; // You must ensure that it's in range !!! } solid = physParam->ComputeSolid(replicaIdx, physVol); solid->ComputeDimensions(physParam, replicaIdx, physVol); } - else - { // for ordinary volume + else { // for ordinary volume solid = physVol->GetLogicalVolume()->GetSolid(); } @@ -130,8 +107,7 @@ G4VSolid* G4VPrimitiveScorer::ComputeCurrentSolid(G4Step* aStep) G4StepPoint* preStep = aStep->GetPreStepPoint(); // The only difference: did not know the replica number G4int replicaIdx = - (static_cast(preStep->GetTouchable())) - ->GetReplicaNumber(indexDepth); + (static_cast(preStep->GetTouchable()))->GetReplicaNumber(indexDepth); return ComputeSolid(aStep, replicaIdx); } diff --git a/source/digits_hits/detector/src/G4VReadOutGeometry.cc b/source/digits_hits/detector/src/G4VReadOutGeometry.cc index 3c9e23c31e1..a94c3a547ab 100644 --- a/source/digits_hits/detector/src/G4VReadOutGeometry.cc +++ b/source/digits_hits/detector/src/G4VReadOutGeometry.cc @@ -27,61 +27,57 @@ // #include "G4VReadOutGeometry.hh" + #include "G4Navigator.hh" G4VReadOutGeometry::G4VReadOutGeometry() - : ROworld(nullptr) - , fincludeList(nullptr) - , fexcludeList(nullptr) - , touchableHistory(nullptr) + : ROworld(nullptr), fincludeList(nullptr), fexcludeList(nullptr), touchableHistory(nullptr) { - name = "unknown"; + name = "unknown"; ROnavigator = new G4Navigator(); G4ExceptionDescription ed; - ed - << "The concept and the functionality of Readout Geometry has been merged\n" - << "into Parallel World. This G4VReadOutGeometry is kept for the sake of\n" - << "not breaking the commonly-used interface in the sensitive detector " - "class.\n" - << "But this functionality of G4VReadOutGeometry class is no longer " - "tested\n" - << "and thus may not be working well. We strongly recommend our customers " - "to\n" - << "migrate to Parallel World scheme."; + ed << "The concept and the functionality of Readout Geometry has been merged\n" + << "into Parallel World. This G4VReadOutGeometry is kept for the sake of\n" + << "not breaking the commonly-used interface in the sensitive detector " + "class.\n" + << "But this functionality of G4VReadOutGeometry class is no longer " + "tested\n" + << "and thus may not be working well. We strongly recommend our customers " + "to\n" + << "migrate to Parallel World scheme."; G4Exception("G4VReadOutGeometry", "DIGIHIT1001", JustWarning, ed); } G4VReadOutGeometry::G4VReadOutGeometry(const G4VReadOutGeometry& right) { - fincludeList = nullptr; - fexcludeList = nullptr; - name = right.name; - ROworld = right.ROworld; + fincludeList = nullptr; + fexcludeList = nullptr; + name = right.name; + ROworld = right.ROworld; touchableHistory = nullptr; - ROnavigator = new G4Navigator(); + ROnavigator = new G4Navigator(); // COPY CONSTRUCTOR NOT STRAIGHT FORWARD: need to copy the touchabelHistory // VALUE, same for navigator and same for the World+Geom hierachy } G4VReadOutGeometry::G4VReadOutGeometry(G4String n) - : ROworld(nullptr) - , fincludeList(nullptr) - , fexcludeList(nullptr) - , name(n) - , touchableHistory(nullptr) + : ROworld(nullptr), + fincludeList(nullptr), + fexcludeList(nullptr), + name(n), + touchableHistory(nullptr) { ROnavigator = new G4Navigator(); G4ExceptionDescription ed; - ed - << "The concept and the functionality of Readout Geometry has been merged\n" - << "into Parallel World. This G4VReadOutGeometry is kept for the sake of\n" - << "not breaking the commonly-used interface in the sensitive detector " - "class.\n" - << "But this functionality of G4VReadOutGeometry class is no longer " - "tested\n" - << "and thus may not be working well. We strongly recommend our customers " - "to\n" - << "migrate to Parallel World scheme."; + ed << "The concept and the functionality of Readout Geometry has been merged\n" + << "into Parallel World. This G4VReadOutGeometry is kept for the sake of\n" + << "not breaking the commonly-used interface in the sensitive detector " + "class.\n" + << "But this functionality of G4VReadOutGeometry class is no longer " + "tested\n" + << "and thus may not be working well. We strongly recommend our customers " + "to\n" + << "migrate to Parallel World scheme."; G4Exception("G4VReadOutGeometry", "DIGIHIT1001", JustWarning, ed); } @@ -89,27 +85,21 @@ G4VReadOutGeometry::~G4VReadOutGeometry() { // if(ROworld) delete ROworld; //should we do ? will it delete the goem tree // also ? - if(fincludeList) - delete fincludeList; - if(fexcludeList) - delete fexcludeList; - if(touchableHistory) - delete touchableHistory; - if(ROnavigator) - delete ROnavigator; + delete fincludeList; + delete fexcludeList; + delete touchableHistory; + delete ROnavigator; } -G4VReadOutGeometry& G4VReadOutGeometry::operator=( - const G4VReadOutGeometry& right) +G4VReadOutGeometry& G4VReadOutGeometry::operator=(const G4VReadOutGeometry& right) { - if(this == &right) - return *this; + if (this == &right) return *this; delete fincludeList; fincludeList = nullptr; delete fexcludeList; fexcludeList = nullptr; - name = right.name; - ROworld = right.ROworld; + name = right.name; + ROworld = right.ROworld; delete touchableHistory; touchableHistory = nullptr; delete ROnavigator; @@ -119,12 +109,12 @@ G4VReadOutGeometry& G4VReadOutGeometry::operator=( G4bool G4VReadOutGeometry::operator==(const G4VReadOutGeometry& right) const { - return (this == (G4VReadOutGeometry*) &right); + return (this == (G4VReadOutGeometry*)&right); } G4bool G4VReadOutGeometry::operator!=(const G4VReadOutGeometry& right) const { - return (this != (G4VReadOutGeometry*) &right); + return (this != (G4VReadOutGeometry*)&right); } void G4VReadOutGeometry::BuildROGeometry() @@ -133,37 +123,29 @@ void G4VReadOutGeometry::BuildROGeometry() ROnavigator->SetWorldVolume(ROworld); } -G4bool G4VReadOutGeometry::CheckROVolume(G4Step* currentStep, - G4TouchableHistory*& ROhist) +G4bool G4VReadOutGeometry::CheckROVolume(G4Step* currentStep, G4TouchableHistory*& ROhist) { - ROhist = nullptr; + ROhist = nullptr; G4bool incFlg = true; - auto PV = currentStep->GetPreStepPoint()->GetPhysicalVolume(); - if((fexcludeList) && (fexcludeList->CheckPV(PV))) - { + auto PV = currentStep->GetPreStepPoint()->GetPhysicalVolume(); + if (((fexcludeList) != nullptr) && (fexcludeList->CheckPV(PV))) { incFlg = false; } - else if((fincludeList) && (fincludeList->CheckPV(PV))) - { + else if (((fincludeList) != nullptr) && (fincludeList->CheckPV(PV))) { incFlg = true; } - else if((fexcludeList) && (fexcludeList->CheckLV(PV->GetLogicalVolume()))) - { + else if (((fexcludeList) != nullptr) && (fexcludeList->CheckLV(PV->GetLogicalVolume()))) { incFlg = false; } - else if((fincludeList) && (fincludeList->CheckLV(PV->GetLogicalVolume()))) - { + else if (((fincludeList) != nullptr) && (fincludeList->CheckLV(PV->GetLogicalVolume()))) { incFlg = true; } - if(!incFlg) - return false; + if (! incFlg) return false; - if(ROworld) - { + if (ROworld != nullptr) { incFlg = FindROTouchable(currentStep); } - if(incFlg) - { + if (incFlg) { ROhist = touchableHistory; } return incFlg; @@ -179,19 +161,14 @@ G4bool G4VReadOutGeometry::FindROTouchable(G4Step* currentStep) // At first invokation, creates the touchable history. Note // that default value (false) of Locate method is used. // ---------> But the default Value is TRUE <-------------------- J.A. - if(!touchableHistory) - { + if (touchableHistory == nullptr) { touchableHistory = new G4TouchableHistory(); - ROnavigator->LocateGlobalPointAndUpdateTouchable( - currentStep->GetPreStepPoint()->GetPosition(), + ROnavigator->LocateGlobalPointAndUpdateTouchable(currentStep->GetPreStepPoint()->GetPosition(), currentStep->GetPreStepPoint()->GetMomentumDirection(), touchableHistory); } - else - { - ROnavigator->LocateGlobalPointAndUpdateTouchable( - currentStep->GetPreStepPoint()->GetPosition(), - currentStep->GetPreStepPoint()->GetMomentumDirection(), touchableHistory, - true); + else { + ROnavigator->LocateGlobalPointAndUpdateTouchable(currentStep->GetPreStepPoint()->GetPosition(), + currentStep->GetPreStepPoint()->GetMomentumDirection(), touchableHistory, true); } // Can the above be improved by the use of an isotropic safety // in order to avoid LocateGlobalPointAndUpdateTouchable @@ -203,9 +180,8 @@ G4bool G4VReadOutGeometry::FindROTouchable(G4Step* currentStep) // checks if volume is sensitive: auto currentVolume = touchableHistory->GetVolume(); // checks first if a physical volume exists here: - if(currentVolume) - { - return currentVolume->GetLogicalVolume()->GetSensitiveDetector() != 0; + if (currentVolume != nullptr) { + return currentVolume->GetLogicalVolume()->GetSensitiveDetector() != nullptr; } // no sensitive volume found: returns false return false; diff --git a/source/digits_hits/detector/src/G4VSDFilter.cc b/source/digits_hits/detector/src/G4VSDFilter.cc index 3f35ef4d340..b34ce72a513 100644 --- a/source/digits_hits/detector/src/G4VSDFilter.cc +++ b/source/digits_hits/detector/src/G4VSDFilter.cc @@ -27,15 +27,12 @@ // // G4VSensitiveDetector #include "G4VSDFilter.hh" + #include "G4SDManager.hh" -G4VSDFilter::G4VSDFilter(G4String name) - : filterName(name) +G4VSDFilter::G4VSDFilter(G4String name) : filterName(name) { G4SDManager::GetSDMpointer()->RegisterSDFilter(this); } -G4VSDFilter::~G4VSDFilter() -{ - G4SDManager::GetSDMpointer()->DeRegisterSDFilter(this); -} +G4VSDFilter::~G4VSDFilter() { G4SDManager::GetSDMpointer()->DeRegisterSDFilter(this); } diff --git a/source/digits_hits/detector/src/G4VScoreHistFiller.cc b/source/digits_hits/detector/src/G4VScoreHistFiller.cc index ee70b3af5e8..0a3063a7a3f 100644 --- a/source/digits_hits/detector/src/G4VScoreHistFiller.cc +++ b/source/digits_hits/detector/src/G4VScoreHistFiller.cc @@ -37,7 +37,7 @@ #include "G4VScoreHistFiller.hh" -G4VScoreHistFiller* G4VScoreHistFiller::fgMasterInstance = nullptr; +G4VScoreHistFiller* G4VScoreHistFiller::fgMasterInstance = nullptr; G4ThreadLocal G4VScoreHistFiller* G4VScoreHistFiller::fgInstance = nullptr; G4VScoreHistFiller* G4VScoreHistFiller::Instance() @@ -46,12 +46,10 @@ G4VScoreHistFiller* G4VScoreHistFiller::Instance() // The master instance should be created by the user // via the concrete class constructor - G4bool isMaster = !G4Threading::IsWorkerThread(); + G4bool isMaster = ! G4Threading::IsWorkerThread(); - if((!isMaster) && (!fgInstance)) - { - if(fgMasterInstance) - { + if ((! isMaster) && (fgInstance == nullptr)) { + if (fgMasterInstance != nullptr) { fgInstance = fgMasterInstance->CreateInstance(); } } @@ -61,29 +59,26 @@ G4VScoreHistFiller* G4VScoreHistFiller::Instance() G4VScoreHistFiller::G4VScoreHistFiller() { - G4bool isMaster = !G4Threading::IsWorkerThread(); + G4bool isMaster = ! G4Threading::IsWorkerThread(); - if(isMaster && fgMasterInstance) - { + if (isMaster && (fgMasterInstance != nullptr)) { G4ExceptionDescription description; description << " " << "G4VScoreHistFiller on master already exists." << "Cannot create another instance."; - G4Exception("G4VScoreHistFiller::G4VScoreHistFiller()", "Analysis_F001", - FatalException, description); + G4Exception( + "G4VScoreHistFiller::G4VScoreHistFiller()", "Analysis_F001", FatalException, description); } - if(fgInstance) - { + if (fgInstance != nullptr) { G4ExceptionDescription description; description << " " << "G4VScoreHistFiller on worker already exists." << "Cannot create another instance."; - G4Exception("G4VScoreHistFiller::G4VScoreHistFiller()", "Analysis_F001", - FatalException, description); + G4Exception( + "G4VScoreHistFiller::G4VScoreHistFiller()", "Analysis_F001", FatalException, description); } - if(isMaster) - fgMasterInstance = this; + if (isMaster) fgMasterInstance = this; fgInstance = this; } -G4VScoreHistFiller::~G4VScoreHistFiller() { fgInstance = 0; } +G4VScoreHistFiller::~G4VScoreHistFiller() { fgInstance = nullptr; } diff --git a/source/digits_hits/detector/src/G4VSensitiveDetector.cc b/source/digits_hits/detector/src/G4VSensitiveDetector.cc index 79d8e01b673..59b085a1f47 100644 --- a/source/digits_hits/detector/src/G4VSensitiveDetector.cc +++ b/source/digits_hits/detector/src/G4VSensitiveDetector.cc @@ -27,28 +27,22 @@ // // G4VSensitiveDetector #include "G4VSensitiveDetector.hh" + #include "G4SDManager.hh" G4VSensitiveDetector::G4VSensitiveDetector(G4String name) - : verboseLevel(0) - , active(true) - , ROgeometry(nullptr) - , filter(nullptr) { size_t sLast = name.rfind('/'); - if(sLast == std::string::npos) - { // detector name only + if (sLast == std::string::npos) { // detector name only SensitiveDetectorName = name; - thePathName = "/"; + thePathName = "/"; } - else - { // name conatin the directory path + else { // name conatin the directory path SensitiveDetectorName = name; SensitiveDetectorName.erase(0, sLast + 1); thePathName = name; thePathName.erase(sLast + 1); - if(thePathName[0] != '/') - thePathName.insert(0, "/"); + if (thePathName[0] != '/') thePathName.insert(0, "/"); } fullPathName = thePathName + SensitiveDetectorName; } @@ -56,16 +50,14 @@ G4VSensitiveDetector::G4VSensitiveDetector(G4String name) G4VSensitiveDetector::G4VSensitiveDetector(const G4VSensitiveDetector& right) { SensitiveDetectorName = right.SensitiveDetectorName; - thePathName = right.thePathName; - fullPathName = right.fullPathName; - verboseLevel = right.verboseLevel; - active = right.active; - ROgeometry = right.ROgeometry; - filter = right.filter; + thePathName = right.thePathName; + fullPathName = right.fullPathName; + verboseLevel = right.verboseLevel; + active = right.active; + ROgeometry = right.ROgeometry; + filter = right.filter; } -G4VSensitiveDetector::~G4VSensitiveDetector() {} - G4VSensitiveDetector* G4VSensitiveDetector::Clone() const { G4ExceptionDescription msg; @@ -76,18 +68,16 @@ G4VSensitiveDetector* G4VSensitiveDetector::Clone() const return nullptr; } -G4VSensitiveDetector& G4VSensitiveDetector::operator=( - const G4VSensitiveDetector& right) +G4VSensitiveDetector& G4VSensitiveDetector::operator=(const G4VSensitiveDetector& right) { - if(this == &right) - return *this; + if (this == &right) return *this; SensitiveDetectorName = right.SensitiveDetectorName; - thePathName = right.thePathName; - fullPathName = right.fullPathName; - verboseLevel = right.verboseLevel; - active = right.active; - ROgeometry = right.ROgeometry; - filter = right.filter; + thePathName = right.thePathName; + fullPathName = right.fullPathName; + verboseLevel = right.verboseLevel; + active = right.active; + ROgeometry = right.ROgeometry; + filter = right.filter; return *this; } @@ -103,19 +93,6 @@ G4bool G4VSensitiveDetector::operator!=(const G4VSensitiveDetector& right) const G4int G4VSensitiveDetector::GetCollectionID(G4int i) { - return G4SDManager::GetSDMpointer()->GetCollectionID(SensitiveDetectorName + - "/" + collectionName[i]); + return G4SDManager::GetSDMpointer()->GetCollectionID( + SensitiveDetectorName + "/" + collectionName[i]); } - -//----- following methoods are abstract methods to be -//----- implemented in the concrete classes - -void G4VSensitiveDetector::Initialize(G4HCofThisEvent*) {} - -void G4VSensitiveDetector::EndOfEvent(G4HCofThisEvent*) {} - -void G4VSensitiveDetector::clear() {} - -void G4VSensitiveDetector::DrawAll() {} - -void G4VSensitiveDetector::PrintAll() {} diff --git a/source/digits_hits/digits/GNUmakefile b/source/digits_hits/digits/GNUmakefile deleted file mode 100644 index 9467e9c43e5..00000000000 --- a/source/digits_hits/digits/GNUmakefile +++ /dev/null @@ -1,20 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for digits+hits library. Makoto Asai, 1/11/96. -# -------------------------------------------------------------- - -name := G4digits - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4DIGI_ALLOC_EXPORT -CPPFLAGS += \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPGeometry/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/digits_hits/digits/History b/source/digits_hits/digits/History index 2aa505019fd..3c387bdc141 100644 --- a/source/digits_hits/digits/History +++ b/source/digits_hits/digits/History @@ -5,6 +5,10 @@ which **must** added in reverse chronological order (newest at the top). It must be used as a substitute for writing good git commit messages! +## 2022-22-12 Ben Morgan (detdigits-V11-01-00) +- Apply standard clang-tidy and clang-format fixes +- General code tidy and modernization + ## 2021-12-10 Ben Morgan (detdigits-V11-00-00) - Change to new Markdown History format diff --git a/source/digits_hits/digits/include/G4DCofThisEvent.hh b/source/digits_hits/digits/include/G4DCofThisEvent.hh index 245db64b210..75dc384a8a6 100644 --- a/source/digits_hits/digits/include/G4DCofThisEvent.hh +++ b/source/digits_hits/digits/include/G4DCofThisEvent.hh @@ -29,10 +29,10 @@ #ifndef G4DCofThisEvent_h #define G4DCofThisEvent_h 1 -#include "globals.hh" #include "G4Allocator.hh" #include "G4VDigiCollection.hh" -//#include "g4rw/tpordvec.h" +#include "globals.hh" + #include // class description: @@ -50,38 +50,37 @@ class G4DCofThisEvent { public: G4DCofThisEvent(); - G4DCofThisEvent(G4int cap); + explicit G4DCofThisEvent(G4int cap); ~G4DCofThisEvent(); + G4DCofThisEvent(const G4DCofThisEvent&); + G4DCofThisEvent& operator=(const G4DCofThisEvent&); + inline void* operator new(size_t); inline void operator delete(void* anDCoTE); void AddDigiCollection(G4int DCID, G4VDigiCollection* aDC); - G4DCofThisEvent(const G4DCofThisEvent&); - G4DCofThisEvent& operator=(const G4DCofThisEvent&); - - private: - std::vector* DC; - - public: // with description - inline G4VDigiCollection* GetDC(G4int i) const { return (*DC)[i]; } - // Returns a pointer to a digi collection. Null will be returned - // if the particular collection is not stored at the current event. + // Returns a pointer to a digi collection. + // Returns `nullptr` if the particular collection is not stored in the current event. // The integer argument is ID number which is assigned by G4DigiManager // and the number can be obtained by G4DigiManager::GetDigiCollectionID() // method. + inline G4VDigiCollection* GetDC(G4int i) const { return (*DC)[i]; } + + // Return number of digi collections stored inline G4int GetNumberOfCollections() const { G4int n = 0; - for(auto dc : *DC) - if(dc) - n++; + for (const G4VDigiCollection* dc : *DC) { + if (dc != nullptr) n++; + } return n; } - // Returns the number of digi collections which are stored in this class - // object. - public: + inline size_t GetCapacity() const { return DC->size(); } + + private: + std::vector* DC; }; #if defined G4DIGI_ALLOC_EXPORT @@ -92,16 +91,15 @@ extern G4DLLIMPORT G4Allocator*& anDCoTHAllocator_G4MT_TLS_(); inline void* G4DCofThisEvent::operator new(size_t) { - if(anDCoTHAllocator_G4MT_TLS_() == nullptr) - { + if (anDCoTHAllocator_G4MT_TLS_() == nullptr) { anDCoTHAllocator_G4MT_TLS_() = new G4Allocator; } - return (void*) anDCoTHAllocator_G4MT_TLS_()->MallocSingle(); + return (void*)anDCoTHAllocator_G4MT_TLS_()->MallocSingle(); } inline void G4DCofThisEvent::operator delete(void* anDCoTH) { - anDCoTHAllocator_G4MT_TLS_()->FreeSingle((G4DCofThisEvent*) anDCoTH); + anDCoTHAllocator_G4MT_TLS_()->FreeSingle((G4DCofThisEvent*)anDCoTH); } #endif diff --git a/source/digits_hits/digits/include/G4TDigiCollection.hh b/source/digits_hits/digits/include/G4TDigiCollection.hh index f32ca574c85..14f2b403ddf 100644 --- a/source/digits_hits/digits/include/G4TDigiCollection.hh +++ b/source/digits_hits/digits/include/G4TDigiCollection.hh @@ -29,9 +29,10 @@ #ifndef G4TDigiCollection_h #define G4TDigiCollection_h 1 -#include "G4VDigiCollection.hh" #include "G4Allocator.hh" +#include "G4VDigiCollection.hh" #include "globals.hh" + #include // class description: @@ -47,13 +48,13 @@ class G4DigiCollection : public G4VDigiCollection { public: - G4DigiCollection(); - G4DigiCollection(G4String detName, G4String colNam); - virtual ~G4DigiCollection(); - G4bool operator==(const G4DigiCollection& right) const; + using G4VDigiCollection::G4VDigiCollection; + ~G4DigiCollection() override = default; + + G4bool operator==(const G4DigiCollection& right) const { return (this == &right); } protected: - void* theCollection; + void* theCollection = nullptr; }; #if defined G4DIGI_ALLOC_EXPORT @@ -67,99 +68,84 @@ class G4TDigiCollection : public G4DigiCollection { public: G4TDigiCollection(); - - public: // with description G4TDigiCollection(G4String detName, G4String colNam); - // Constructor. - public: - virtual ~G4TDigiCollection(); + ~G4TDigiCollection() override; + G4bool operator==(const G4TDigiCollection& right) const; inline void* operator new(size_t); inline void operator delete(void* aDC); - public: // with description - virtual void DrawAllDigi(); - virtual void PrintAllDigi(); - // These two methods invokes Draw() and Print() methods of all of - // digit objects stored in this collection, respectively. + // Invoke Draw() method on all stored digit objects in collection + void DrawAllDigi() override; - public: // with description - inline T* operator[](size_t i) const - { - return (*((std::vector*) theCollection))[i]; - } - // Returns a pointer to a concrete digi object. - inline std::vector* GetVector() const - { - return (std::vector*) theCollection; - } - // Returns a collection vector. + // Invoke Print() method on all stored digit objects in collection + void PrintAllDigi() override; + + // Returns pointer to the concrete digi object at index i + // Not bounds checked + inline T* operator[](size_t i) const { return (*((std::vector*)theCollection))[i]; } + + // Returns pointer to stored collection vector. + inline std::vector* GetVector() const { return (std::vector*)theCollection; } + + // Insert a digit object in the collection, taking ownership + // Returns the total number of digi objects stored after insertion inline size_t insert(T* aHit) { - std::vector* theDigiCollection = (std::vector*) theCollection; + auto theDigiCollection = (std::vector*)theCollection; theDigiCollection->push_back(aHit); return theDigiCollection->size(); } - // Insert a digi object. Total number of digi objects stored in this - // collection is returned. + + // Returns the number of digi objects stored in this collection. inline size_t entries() const { - std::vector* theDigiCollection = (std::vector*) theCollection; + auto theDigiCollection = (std::vector*)theCollection; return theDigiCollection->size(); } - // Returns the number of digi objcets stored in this collection. - public: - virtual G4VDigi* GetDigi(size_t i) const - { - return (*((std::vector*) theCollection))[i]; - } - virtual size_t GetSize() const - { - return ((std::vector*) theCollection)->size(); - } + G4VDigi* GetDigi(size_t i) const override { return (*((std::vector*)theCollection))[i]; } + + size_t GetSize() const override { return ((std::vector*)theCollection)->size(); } }; template inline void* G4TDigiCollection::operator new(size_t) { - if(aDCAllocator_G4MT_TLS_() == nullptr) - { + if (aDCAllocator_G4MT_TLS_() == nullptr) { aDCAllocator_G4MT_TLS_() = new G4Allocator; } - return (void*) aDCAllocator_G4MT_TLS_()->MallocSingle(); + return (void*)aDCAllocator_G4MT_TLS_()->MallocSingle(); } template inline void G4TDigiCollection::operator delete(void* aDC) { - aDCAllocator_G4MT_TLS_()->FreeSingle((G4DigiCollection*) aDC); + aDCAllocator_G4MT_TLS_()->FreeSingle((G4DigiCollection*)aDC); } template G4TDigiCollection::G4TDigiCollection() { - std::vector* theDigiCollection = new std::vector; - theCollection = (void*) theDigiCollection; + auto theDigiCollection = new std::vector; + theCollection = (void*)theDigiCollection; } template G4TDigiCollection::G4TDigiCollection(G4String detName, G4String colNam) : G4DigiCollection(detName, colNam) { - std::vector* theDigiCollection = new std::vector; - theCollection = (void*) theDigiCollection; + auto theDigiCollection = new std::vector; + theCollection = (void*)theDigiCollection; } template G4TDigiCollection::~G4TDigiCollection() { - std::vector* theDigiCollection = (std::vector*) theCollection; - - for(size_t i = 0; i < theDigiCollection->size(); i++) - { - delete(*theDigiCollection)[i]; + auto theDigiCollection = (std::vector*)theCollection; + for (const auto* digi : *theDigiCollection) { + delete digi; } theDigiCollection->clear(); delete theDigiCollection; @@ -174,22 +160,18 @@ G4bool G4TDigiCollection::operator==(const G4TDigiCollection& right) const template void G4TDigiCollection::DrawAllDigi() { - std::vector* theDigiCollection = (std::vector*) theCollection; - size_t n = theDigiCollection->size(); - for(size_t i = 0; i < n; i++) - { - (*theDigiCollection)[i]->Draw(); + auto theDigiCollection = (std::vector*)theCollection; + for (auto* digi : *theDigiCollection) { + digi->Draw(); } } template void G4TDigiCollection::PrintAllDigi() { - std::vector* theDigiCollection = (std::vector*) theCollection; - size_t n = theDigiCollection->size(); - for(size_t i = 0; i < n; i++) - { - (*theDigiCollection)[i]->Print(); + auto theDigiCollection = (std::vector*)theCollection; + for (auto* digi : *theDigiCollection) { + digi->Print(); } } diff --git a/source/digits_hits/digits/include/G4VDigi.hh b/source/digits_hits/digits/include/G4VDigi.hh index 47aade66911..4a33f486c04 100644 --- a/source/digits_hits/digits/include/G4VDigi.hh +++ b/source/digits_hits/digits/include/G4VDigi.hh @@ -30,8 +30,9 @@ #define G4VDigi_h 1 #include "globals.hh" -#include + #include +#include class G4AttDef; class G4AttValue; @@ -47,30 +48,25 @@ class G4AttValue; class G4VDigi { public: - G4VDigi(); - virtual ~G4VDigi(); + G4VDigi() = default; + virtual ~G4VDigi() = default; + + G4bool operator==(const G4VDigi& right) const { return (this == &right); } - G4bool operator==(const G4VDigi& right) const; + virtual void Draw(){}; + virtual void Print(){}; - virtual void Draw(); - virtual void Print(); + // Returns pointer to map of attribute definitions for this digit + // Caller is responsible for checking validity of returned pointer. + // See `G4Trajectory` for a concrete implementation. + virtual const std::map* GetAttDefs() const { return nullptr; } - virtual const std::map* GetAttDefs() const { return 0; } - // If implemented by a derived class, returns a pointer to a map - // of attribute definitions for the attribute values below. The - // user must test the validity of this pointer. See - // G4Trajectory for an example of a concrete implementation of - // this method. - virtual std::vector* CreateAttValues() const { return 0; } - // If implemented by a derived class, returns a pointer to a - // list of attribute values suitable, e.g., for picking. Each - // must refer to an attribute definition in the above map; its - // name is the key. The user must test the validity of this - // pointer (it must be non-zero and conform to the G4AttDefs, - // which may be checked with G4AttCheck) and delete the list - // after use. See G4Trajectory for an example of a concrete - // implementation of this method and - // G4VTrajectory::ShowTrajectory for an example of its use. + // Returns pointer to list of attributes for this digit + // Each attribute must correspond to a definition returned by `GetAffDefs`. + // Caller is responsible for checking validity of returned pointer. + // See `G4Trajectory` for a concrete implementation, and + // `G4VTrajectory::ShowTrajectory` for an example of its use. + virtual std::vector* CreateAttValues() const { return nullptr; } }; #endif diff --git a/source/digits_hits/digits/include/G4VDigiCollection.hh b/source/digits_hits/digits/include/G4VDigiCollection.hh index 1bf8b417d42..49fe1b97d11 100644 --- a/source/digits_hits/digits/include/G4VDigiCollection.hh +++ b/source/digits_hits/digits/include/G4VDigiCollection.hh @@ -29,9 +29,10 @@ #ifndef G4VDigiCollection_h #define G4VDigiCollection_h 1 -class G4VDigi; #include "globals.hh" +class G4VDigi; + // class description: // // This is the base class of digi collection. The user is advised to @@ -44,29 +45,27 @@ class G4VDigi; class G4VDigiCollection { public: - G4VDigiCollection(); + G4VDigiCollection() = default; G4VDigiCollection(G4String DMnam, G4String colNam); - virtual ~G4VDigiCollection(); + virtual ~G4VDigiCollection() = default; G4bool operator==(const G4VDigiCollection& right) const; - virtual void DrawAllDigi(); - virtual void PrintAllDigi(); - - protected: - // Collection name - G4String collectionName; - G4String DMname; + virtual void DrawAllDigi(){}; + virtual void PrintAllDigi(){}; - public: inline const G4String& GetName() const { return collectionName; } inline const G4String& GetDMname() const { return DMname; } - public: // GetDigi and GetSize are given a default implementation here so // that the template G4TDigiCollection can be used, but they // are re-implemented in G4TDigiCollection. - virtual G4VDigi* GetDigi(size_t) const { return 0; } + virtual G4VDigi* GetDigi(size_t) const { return nullptr; } virtual size_t GetSize() const { return 0; } + + protected: + // Collection name + G4String collectionName = "Unknown"; + G4String DMname = "Unknown"; }; #endif diff --git a/source/digits_hits/digits/sources.cmake b/source/digits_hits/digits/sources.cmake index 9e0a250219b..441c0d89a28 100644 --- a/source/digits_hits/digits/sources.cmake +++ b/source/digits_hits/digits/sources.cmake @@ -10,7 +10,6 @@ geant4_add_module(G4digits SOURCES G4DCofThisEvent.cc G4TDigiCollection.cc - G4VDigi.cc G4VDigiCollection.cc) geant4_module_link_libraries(G4digits PUBLIC G4globman) diff --git a/source/digits_hits/digits/src/G4DCofThisEvent.cc b/source/digits_hits/digits/src/G4DCofThisEvent.cc index ef0e43de135..22058aa1a27 100644 --- a/source/digits_hits/digits/src/G4DCofThisEvent.cc +++ b/source/digits_hits/digits/src/G4DCofThisEvent.cc @@ -27,6 +27,7 @@ // #include "G4DCofThisEvent.hh" + #include G4Allocator*& anDCoTHAllocator_G4MT_TLS_() @@ -35,34 +36,24 @@ G4Allocator*& anDCoTHAllocator_G4MT_TLS_() return _instance; } -G4DCofThisEvent::G4DCofThisEvent() -{ - DC = new std::vector; -} +G4DCofThisEvent::G4DCofThisEvent() { DC = new std::vector; } G4DCofThisEvent::G4DCofThisEvent(G4int cap) { - DC = new std::vector; - for(G4int i = 0; i < cap; i++) - { - DC->push_back((G4VDigiCollection*) 0); - } + DC = new std::vector(cap, nullptr); } G4DCofThisEvent::~G4DCofThisEvent() { - for(size_t i = 0; i < DC->size(); i++) - { - delete(*DC)[i]; + for (const G4VDigiCollection* d : *DC) { + delete d; } - DC->clear(); delete DC; } void G4DCofThisEvent::AddDigiCollection(G4int DCID, G4VDigiCollection* aDC) { - if(DCID >= 0 && DCID < G4int(DC->size())) - { + if (DCID >= 0 && DCID < G4int(DC->size())) { (*DC)[DCID] = aDC; } } @@ -70,22 +61,19 @@ void G4DCofThisEvent::AddDigiCollection(G4int DCID, G4VDigiCollection* aDC) G4DCofThisEvent::G4DCofThisEvent(const G4DCofThisEvent& rhs) { DC = new std::vector(rhs.DC->size()); - for(unsigned int i = 0; i < rhs.DC->size(); ++i) + for (unsigned int i = 0; i < rhs.DC->size(); ++i) *(DC->at(i)) = *(rhs.DC->at(i)); } G4DCofThisEvent& G4DCofThisEvent::operator=(const G4DCofThisEvent& rhs) { - if(this == &rhs) - return *this; - - for(std::vector::const_iterator it = DC->begin(); - it != DC->end(); ++it) - { - delete *it; + if (this == &rhs) return *this; + + for (const G4VDigiCollection* d : *DC) { + delete d; } DC->resize(rhs.DC->size()); - for(unsigned int i = 0; i < rhs.DC->size(); ++i) + for (unsigned int i = 0; i < rhs.DC->size(); ++i) *(DC->at(i)) = *(rhs.DC->at(i)); return *this; } diff --git a/source/digits_hits/digits/src/G4TDigiCollection.cc b/source/digits_hits/digits/src/G4TDigiCollection.cc index 3bef08717e9..f839c3b6687 100644 --- a/source/digits_hits/digits/src/G4TDigiCollection.cc +++ b/source/digits_hits/digits/src/G4TDigiCollection.cc @@ -33,20 +33,3 @@ G4Allocator*& aDCAllocator_G4MT_TLS_() G4ThreadLocalStatic G4Allocator* _instance = nullptr; return _instance; } - -G4DigiCollection::G4DigiCollection() - : theCollection((void*) 0) -{} - -G4DigiCollection::G4DigiCollection(G4String detName, G4String colNam) - : G4VDigiCollection(detName, colNam) - , theCollection((void*) 0) -{} - -G4DigiCollection::~G4DigiCollection() -{} - -G4bool G4DigiCollection::operator==(const G4DigiCollection& right) const -{ - return (collectionName == right.collectionName); -} diff --git a/source/digits_hits/digits/src/G4VDigiCollection.cc b/source/digits_hits/digits/src/G4VDigiCollection.cc index 7af1147645f..f7241452a68 100644 --- a/source/digits_hits/digits/src/G4VDigiCollection.cc +++ b/source/digits_hits/digits/src/G4VDigiCollection.cc @@ -30,25 +30,11 @@ #include "G4VDigiCollection.hh" -G4VDigiCollection::G4VDigiCollection() -{ - collectionName = "Unknown"; - DMname = "Unknown"; -} - G4VDigiCollection::G4VDigiCollection(G4String DMnam, G4String colNam) -{ - collectionName = colNam; - DMname = DMnam; -} - -G4VDigiCollection::~G4VDigiCollection() { ; } + : collectionName(colNam), DMname(DMnam) +{} G4bool G4VDigiCollection::operator==(const G4VDigiCollection& right) const { return ((collectionName == right.collectionName) && (DMname == right.DMname)); } - -void G4VDigiCollection::DrawAllDigi() { ; } - -void G4VDigiCollection::PrintAllDigi() { ; } diff --git a/source/digits_hits/hits/GNUmakefile b/source/digits_hits/hits/GNUmakefile deleted file mode 100644 index 430792fbd21..00000000000 --- a/source/digits_hits/hits/GNUmakefile +++ /dev/null @@ -1,19 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for digits+hits library. Makoto Asai, 1/11/96. -# -------------------------------------------------------------- - -name := G4hits - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4DIGI_ALLOC_EXPORT -CPPFLAGS += \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPGeometry/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/digits_hits/hits/History b/source/digits_hits/hits/History index dcd714af8b6..9064dc2e37e 100644 --- a/source/digits_hits/hits/History +++ b/source/digits_hits/hits/History @@ -5,6 +5,10 @@ which **must** added in reverse chronological order (newest at the top). It must be used as a substitute for writing good git commit messages! +## 2022-22-12 Ben Morgan (dethits-V11-01-00) +- Apply standard clang-tidy and clang-format fixes +- General code tidy and modernization + ## 2021-12-10 Ben Morgan (dethits-V11-00-00) - Change to new Markdown History format diff --git a/source/digits_hits/hits/include/G4HCofThisEvent.hh b/source/digits_hits/hits/include/G4HCofThisEvent.hh index 6be567dcde5..f17ab52e070 100644 --- a/source/digits_hits/hits/include/G4HCofThisEvent.hh +++ b/source/digits_hits/hits/include/G4HCofThisEvent.hh @@ -29,9 +29,10 @@ #ifndef G4HCofThisEvent_h #define G4HCofThisEvent_h 1 -#include "globals.hh" #include "G4Allocator.hh" #include "G4VHitsCollection.hh" +#include "globals.hh" + #include // class description: @@ -49,40 +50,38 @@ class G4HCofThisEvent { public: G4HCofThisEvent(); - G4HCofThisEvent(G4int cap); + explicit G4HCofThisEvent(G4int cap); ~G4HCofThisEvent(); + G4HCofThisEvent(const G4HCofThisEvent&); + G4HCofThisEvent& operator=(const G4HCofThisEvent&); + inline void* operator new(size_t); inline void operator delete(void* anHCoTE); void AddHitsCollection(G4int HCID, G4VHitsCollection* aHC); - G4HCofThisEvent(const G4HCofThisEvent&); - G4HCofThisEvent& operator=(const G4HCofThisEvent&); - - private: - std::vector* HC; - - public: // with description - inline G4VHitsCollection* GetHC(G4int i) { return (*HC)[i]; } // Returns a pointer to a hits collection. Null will be returned // if the particular collection is not stored at the current event. // The integer argument is ID number which is assigned by G4SDManager // and the number can be obtained by G4SDManager::GetHitsCollectionID() // method. + inline G4VHitsCollection* GetHC(G4int i) { return (*HC)[i]; } + + // Return number of hits collections which are stored in this class + // object. inline G4int GetNumberOfCollections() { G4int n = 0; - for(size_t i = 0; i < HC->size(); i++) - { - if((*HC)[i]) - n++; + for (const G4VHitsCollection* h : *HC) { + if (h != nullptr) n++; } return n; } - // Returns the number of hits collections which are stored in this class - // object. - public: + inline size_t GetCapacity() { return HC->size(); } + + private: + std::vector* HC; }; #if defined G4DIGI_ALLOC_EXPORT @@ -93,16 +92,15 @@ extern G4DLLIMPORT G4Allocator*& anHCoTHAllocator_G4MT_TLS_(); inline void* G4HCofThisEvent::operator new(size_t) { - if(anHCoTHAllocator_G4MT_TLS_() == nullptr) - { + if (anHCoTHAllocator_G4MT_TLS_() == nullptr) { anHCoTHAllocator_G4MT_TLS_() = new G4Allocator; } - return (void*) anHCoTHAllocator_G4MT_TLS_()->MallocSingle(); + return (void*)anHCoTHAllocator_G4MT_TLS_()->MallocSingle(); } inline void G4HCofThisEvent::operator delete(void* anHCoTH) { - anHCoTHAllocator_G4MT_TLS_()->FreeSingle((G4HCofThisEvent*) anHCoTH); + anHCoTHAllocator_G4MT_TLS_()->FreeSingle((G4HCofThisEvent*)anHCoTH); } #endif diff --git a/source/digits_hits/hits/include/G4THitsCollection.hh b/source/digits_hits/hits/include/G4THitsCollection.hh index 2481aefd4f4..fa0d599ce98 100644 --- a/source/digits_hits/hits/include/G4THitsCollection.hh +++ b/source/digits_hits/hits/include/G4THitsCollection.hh @@ -29,10 +29,10 @@ #ifndef G4THitsCollection_h #define G4THitsCollection_h 1 -#include "G4VHitsCollection.hh" #include "G4Allocator.hh" +#include "G4VHitsCollection.hh" #include "globals.hh" -//#include "g4rw/tpordvec.h" + #include // class description: @@ -48,13 +48,12 @@ class G4HitsCollection : public G4VHitsCollection { public: - G4HitsCollection(); - G4HitsCollection(G4String detName, G4String colNam); - virtual ~G4HitsCollection(); + using G4VHitsCollection::G4VHitsCollection; + ~G4HitsCollection() override = default; G4bool operator==(const G4HitsCollection& right) const; protected: - void* theCollection; + void* theCollection = nullptr; }; #if defined G4DIGI_ALLOC_EXPORT @@ -68,99 +67,85 @@ class G4THitsCollection : public G4HitsCollection { public: G4THitsCollection(); - - public: // with description G4THitsCollection(G4String detName, G4String colNam); - // constructor. - public: - virtual ~G4THitsCollection(); + ~G4THitsCollection() override; + G4bool operator==(const G4THitsCollection& right) const; inline void* operator new(size_t); inline void operator delete(void* anHC); - public: // with description - virtual void DrawAllHits(); - virtual void PrintAllHits(); - // These two methods invokes Draw() and Print() methods of all of - // hit objects stored in this collection, respectively. + // Invoke Draw() method on all hit objects in collection + void DrawAllHits() override; - public: // with description - inline T* operator[](size_t i) const - { - return (*((std::vector*) theCollection))[i]; - } - // Returns a pointer to a concrete hit object. - inline std::vector* GetVector() const - { - return (std::vector*) theCollection; - } - // Returns a collection vector. + // Invoke Print() method on all hit objects in collection + void PrintAllHits() override; + + // Returns a pointer to the concrete hit object + // Returns pointer to the concrete hit object at given index + // Not bounds checked + inline T* operator[](size_t i) const { return (*((std::vector*)theCollection))[i]; } + + // Return pointer to hit collection + inline std::vector* GetVector() const { return (std::vector*)theCollection; } + + // Insert a hit object in the collection, taking onwenership + // Returns the total number of hit objects stored after insertion inline size_t insert(T* aHit) { - std::vector* theHitsCollection = (std::vector*) theCollection; + auto theHitsCollection = (std::vector*)theCollection; theHitsCollection->push_back(aHit); return theHitsCollection->size(); } - // Insert a hit object. Total number of hit objects stored in this - // collection is returned. + + // Returns the number of hit objects stored in this collection. inline size_t entries() const { - std::vector* theHitsCollection = (std::vector*) theCollection; + auto theHitsCollection = (std::vector*)theCollection; return theHitsCollection->size(); } - // Returns the number of hit objects stored in this collection - public: - virtual G4VHit* GetHit(size_t i) const - { - return (*((std::vector*) theCollection))[i]; - } - virtual size_t GetSize() const - { - return ((std::vector*) theCollection)->size(); - } + G4VHit* GetHit(size_t i) const override { return (*((std::vector*)theCollection))[i]; } + + size_t GetSize() const override { return ((std::vector*)theCollection)->size(); } }; template inline void* G4THitsCollection::operator new(size_t) { - if(anHCAllocator_G4MT_TLS_() == nullptr) - { + if (anHCAllocator_G4MT_TLS_() == nullptr) { anHCAllocator_G4MT_TLS_() = new G4Allocator; } - return (void*) anHCAllocator_G4MT_TLS_()->MallocSingle(); + return (void*)anHCAllocator_G4MT_TLS_()->MallocSingle(); } template inline void G4THitsCollection::operator delete(void* anHC) { - anHCAllocator_G4MT_TLS_()->FreeSingle((G4HitsCollection*) anHC); + anHCAllocator_G4MT_TLS_()->FreeSingle((G4HitsCollection*)anHC); } template G4THitsCollection::G4THitsCollection() { - std::vector* theHitsCollection = new std::vector; - theCollection = (void*) theHitsCollection; + auto theHitsCollection = new std::vector; + theCollection = (void*)theHitsCollection; } template G4THitsCollection::G4THitsCollection(G4String detName, G4String colNam) : G4HitsCollection(detName, colNam) { - std::vector* theHitsCollection = new std::vector; - theCollection = (void*) theHitsCollection; + auto theHitsCollection = new std::vector; + theCollection = (void*)theHitsCollection; } template G4THitsCollection::~G4THitsCollection() { - std::vector* theHitsCollection = (std::vector*) theCollection; - // theHitsCollection->clearAndDestroy(); - for(size_t i = 0; i < theHitsCollection->size(); ++i) - { - delete(*theHitsCollection)[i]; + auto theHitsCollection = (std::vector*)theCollection; + for (const auto* hit : *theHitsCollection) { + delete hit; } theHitsCollection->clear(); delete theHitsCollection; @@ -175,22 +160,18 @@ G4bool G4THitsCollection::operator==(const G4THitsCollection& right) const template void G4THitsCollection::DrawAllHits() { - std::vector* theHitsCollection = (std::vector*) theCollection; - size_t n = theHitsCollection->size(); - for(size_t i = 0; i < n; ++i) - { - (*theHitsCollection)[i]->Draw(); + auto theHitsCollection = (std::vector*)theCollection; + for (auto* hit : *theHitsCollection) { + hit->Draw(); } } template void G4THitsCollection::PrintAllHits() { - std::vector* theHitsCollection = (std::vector*) theCollection; - size_t n = theHitsCollection->size(); - for(size_t i = 0; i < n; ++i) - { - (*theHitsCollection)[i]->Print(); + auto theHitsCollection = (std::vector*)theCollection; + for (auto* hit : *theHitsCollection) { + hit->Print(); } } diff --git a/source/digits_hits/hits/include/G4THitsMap.hh b/source/digits_hits/hits/include/G4THitsMap.hh index e1e865431c9..f7db5e11007 100644 --- a/source/digits_hits/hits/include/G4THitsMap.hh +++ b/source/digits_hits/hits/include/G4THitsMap.hh @@ -48,9 +48,9 @@ template > class G4VTHitsMap : public G4HitsCollection { private: - typedef std::multimap mmap_t; - typedef std::pair pair_t; - typedef std::unordered_multimap uommap_t; + using mmap_t = std::multimap; + using pair_t = std::pair; + using uommap_t = std::unordered_multimap; #define is_same_t(_Tp, _Up) std::is_same<_Tp, _Up>::value #define is_multimap_t(_Mp) std::is_same<_Mp, mmap_t>::value @@ -70,18 +70,18 @@ class G4VTHitsMap : public G4HitsCollection // non-fundamental types should set values to appropriate values // and avoid issues such as: // G4StatDouble stat(0.); stat += 1.0; gives n == 2; - template = 0> + template = 0> T* allocate() const { return new T(); } public: - typedef G4VTHitsMap this_type; - typedef T value_type; - typedef Map_t map_type; - typedef typename map_type::iterator iterator; - typedef typename map_type::const_iterator const_iterator; + using this_type = G4VTHitsMap; + using value_type = T; + using map_type = Map_t; + using iterator = typename map_type::iterator; + using const_iterator = typename map_type::const_iterator; public: // with description // generic constructor @@ -89,7 +89,7 @@ class G4VTHitsMap : public G4HitsCollection // det + collection description constructor G4VTHitsMap(G4String detName, G4String colNam); // destructor - virtual ~G4VTHitsMap(); + ~G4VTHitsMap() override; // equivalence operator G4bool operator==(const G4VTHitsMap& right) const; @@ -101,32 +101,29 @@ class G4VTHitsMap : public G4HitsCollection this_type& operator+=(const G4VTHitsMap& right) const { MapU_t* aHitsMap = right.GetMap(); - for(auto itr = aHitsMap->begin(); itr != aHitsMap->end(); ++itr) + for (auto itr = aHitsMap->begin(); itr != aHitsMap->end(); ++itr) add(itr->first, *(itr->second)); - return (this_type&) (*this); + return (this_type&)(*this); } //------------------------------------------------------------------------// public: // with description - virtual void DrawAllHits(); - virtual void PrintAllHits(); + void DrawAllHits() override; + void PrintAllHits() override; // These two methods invokes Draw() and Print() methods of all of // hit objects stored in this map, respectively. public: // Generic iteration - inline Map_t* GetContainer() const { return (Map_t*) theCollection; } + inline Map_t* GetContainer() const { return (Map_t*)theCollection; } inline typename Map_t::size_type size() { return GetContainer()->size(); } inline typename Map_t::size_type GetIndex(iterator itr) { return itr->first; } - inline typename Map_t::size_type GetIndex(const_iterator itr) const - { - return itr->first; - } + inline typename Map_t::size_type GetIndex(const_iterator itr) const { return itr->first; } - template = 0> + template = 0> inline T* GetObject(G4int idx) const { return (GetContainer()->count(idx) != 0) ? (*GetContainer())[idx] : nullptr; @@ -135,8 +132,7 @@ class G4VTHitsMap : public G4HitsCollection template = 0> inline T* GetObject(G4int idx) const { - return (GetContainer()->count(idx) != 0) ? GetContainer()->find(idx)->second - : nullptr; + return (GetContainer()->count(idx) != 0) ? GetContainer()->find(idx)->second : nullptr; } inline T* GetObject(iterator itr) const { return itr->second; } @@ -152,16 +148,16 @@ class G4VTHitsMap : public G4HitsCollection public: // with description // Returns a pointer to a concrete hit object. - inline Map_t* GetMap() const { return (Map_t*) theCollection; } + inline Map_t* GetMap() const { return (Map_t*)theCollection; } // Overwrite a hit object. Total number of hit objects stored in this // map is returned. - inline size_t entries() const { return ((Map_t*) theCollection)->size(); } + inline size_t entries() const { return ((Map_t*)theCollection)->size(); } // Returns the number of hit objects stored in this map inline void clear(); public: - virtual G4VHit* GetHit(size_t) const { return 0; } - virtual size_t GetSize() const { return ((Map_t*) theCollection)->size(); } + G4VHit* GetHit(size_t) const override { return nullptr; } + size_t GetSize() const override { return ((Map_t*)theCollection)->size(); } public: //------------------------------------------------------------------------// @@ -173,11 +169,11 @@ class G4VTHitsMap : public G4HitsCollection // here we don't use allocate() since instances like G4Colour() == white // and += adds to white (not correct) template = 0> + enable_if_t = 0> size_t add(const G4int& key, U*& aHit) const { map_type* theHitsMap = GetMap(); - if(theHitsMap->find(key) == theHitsMap->end()) + if (theHitsMap->find(key) == theHitsMap->end()) theHitsMap->insert(pair_t(key, new T(*aHit))); else *theHitsMap->find(key)->second += *aHit; @@ -187,7 +183,7 @@ class G4VTHitsMap : public G4HitsCollection // Multimap overload for same type T //------------------------------------------------------------------------// template = 0> + enable_if_t<(is_same_t(U, T) && is_mmap_t(MapU_t)), G4int> = 0> size_t add(const G4int& key, U*& aHit) const { map_type* theHitsMap = GetMap(); @@ -199,11 +195,11 @@ class G4VTHitsMap : public G4HitsCollection // assumes type T has overload of += operator for U //------------------------------------------------------------------------// template = 0> + enable_if_t<(! is_same_t(U, T) && is_mmap_t(MapU_t)), G4int> = 0> size_t add(const G4int& key, U*& aHit) const { map_type* theHitsMap = GetMap(); - T* hit = allocate(); + T* hit = allocate(); *hit += *aHit; theHitsMap->insert(pair_t(key, hit)); return theHitsMap->size(); @@ -217,11 +213,11 @@ class G4VTHitsMap : public G4HitsCollection // here we don't use allocate() since instances like G4Colour() == white // and += adds to white (not correct) template = 0> + enable_if_t<(is_same_t(U, T) && ! is_mmap_t(MapU_t)), G4int> = 0> size_t add(const G4int& key, U& aHit) const { map_type* theHitsMap = GetMap(); - if(theHitsMap->find(key) == theHitsMap->end()) + if (theHitsMap->find(key) == theHitsMap->end()) theHitsMap->insert(pair_t(key, new T(aHit))); else *theHitsMap->find(key)->second += aHit; @@ -232,12 +228,11 @@ class G4VTHitsMap : public G4HitsCollection // assumes type T has overload of += operator for U //------------------------------------------------------------------------// template = 0> + enable_if_t<(! is_same_t(U, T) && ! is_mmap_t(MapU_t)), G4int> = 0> size_t add(const G4int& key, U& aHit) const { map_type* theHitsMap = GetMap(); - if(theHitsMap->find(key) == theHitsMap->end()) - theHitsMap->insert(pair_t(key, allocate())); + if (theHitsMap->find(key) == theHitsMap->end()) theHitsMap->insert(pair_t(key, allocate())); *theHitsMap->find(key)->second += aHit; return theHitsMap->size(); } @@ -245,7 +240,7 @@ class G4VTHitsMap : public G4HitsCollection // Multimap overload for same type T //------------------------------------------------------------------------// template = 0> + enable_if_t<(is_same_t(U, T) && is_mmap_t(MapU_t)), G4int> = 0> size_t add(const G4int& key, U& aHit) const { map_type* theHitsMap = GetMap(); @@ -257,11 +252,11 @@ class G4VTHitsMap : public G4HitsCollection // assumes type T has overload of += operator for U //------------------------------------------------------------------------// template = 0> + enable_if_t<(! is_same_t(U, T) && is_mmap_t(MapU_t)), G4int> = 0> size_t add(const G4int& key, U& aHit) const { map_type* theHitsMap = GetMap(); - T* hit = allocate(); + T* hit = allocate(); *hit += aHit; theHitsMap->insert(pair_t(key, hit)); return theHitsMap->size(); @@ -276,12 +271,11 @@ class G4VTHitsMap : public G4HitsCollection // Standard overload for same type T //------------------------------------------------------------------------// template = 0> + enable_if_t<(is_same_t(U, T) && ! is_mmap_t(MapU_t)), G4int> = 0> inline size_t set(const G4int& key, U*& aHit) const { map_type* theHitsMap = GetMap(); - if(theHitsMap->find(key) != theHitsMap->end()) - delete theHitsMap->find(key)->second; + if (theHitsMap->find(key) != theHitsMap->end()) delete theHitsMap->find(key)->second; theHitsMap->find(key)->second = aHit; return theHitsMap->size(); } @@ -289,14 +283,13 @@ class G4VTHitsMap : public G4HitsCollection // Multimap overload for same type T //------------------------------------------------------------------------// template = 0> + enable_if_t<(is_same_t(U, T) && is_mmap_t(MapU_t)), G4int> = 0> inline size_t set(const G4int& key, U*& aHit) const { map_type* theHitsMap = GetMap(); - if(theHitsMap->find(key) != theHitsMap->end()) + if (theHitsMap->find(key) != theHitsMap->end()) theHitsMap->insert(pair_t(key, aHit)); - else - { + else { delete theHitsMap->find(key)->second; theHitsMap->find(key)->second = aHit; } @@ -306,12 +299,12 @@ class G4VTHitsMap : public G4HitsCollection // Standard map overload for different types //------------------------------------------------------------------------// template = 0> + enable_if_t<(! is_same_t(U, T) && ! is_mmap_t(MapU_t)), G4int> = 0> inline size_t set(const G4int& key, U*& aHit) const { map_type* theHitsMap = GetMap(); - T* hit = nullptr; - if(theHitsMap->find(key) == theHitsMap->end()) + T* hit = nullptr; + if (theHitsMap->find(key) == theHitsMap->end()) theHitsMap->insert(std::make_pair(key, hit = allocate())); else hit = theHitsMap->find(key)->second; @@ -322,16 +315,15 @@ class G4VTHitsMap : public G4HitsCollection // Multimap overload for different types //------------------------------------------------------------------------// template = 0> + enable_if_t<(! is_same_t(U, T) && is_mmap_t(MapU_t)), G4int> = 0> inline size_t set(const G4int& key, U*& aHit) const { map_type* theHitsMap = GetMap(); - T* hit = allocate(); + T* hit = allocate(); *hit += *aHit; - if(theHitsMap->find(key) != theHitsMap->end()) + if (theHitsMap->find(key) != theHitsMap->end()) theHitsMap->insert(pair_t(key, hit)); - else - { + else { delete theHitsMap->find(key)->second; theHitsMap->find(key)->second = hit; } @@ -347,12 +339,12 @@ class G4VTHitsMap : public G4HitsCollection // Standard overload for same type T //------------------------------------------------------------------------// template = 0> + enable_if_t<(is_same_t(U, T) && ! is_mmap_t(MapU_t)), G4int> = 0> inline size_t set(const G4int& key, U& aHit) const { map_type* theHitsMap = GetMap(); - T* hit = nullptr; - if(theHitsMap->find(key) != theHitsMap->end()) + T* hit = nullptr; + if (theHitsMap->find(key) != theHitsMap->end()) hit = theHitsMap->find(key)->second; else theHitsMap->insert(pair_t(key, hit = allocate())); @@ -363,11 +355,11 @@ class G4VTHitsMap : public G4HitsCollection // Multimap overload for same type T //------------------------------------------------------------------------// template = 0> + enable_if_t<(is_same_t(U, T) && is_mmap_t(MapU_t)), G4int> = 0> inline size_t set(const G4int& key, U& aHit) const { map_type* theHitsMap = GetMap(); - if(theHitsMap->find(key) != theHitsMap->end()) + if (theHitsMap->find(key) != theHitsMap->end()) *theHitsMap->find(key)->second = aHit; else theHitsMap->insert(pair_t(key, new T(aHit))); @@ -377,12 +369,12 @@ class G4VTHitsMap : public G4HitsCollection // Standard map overload for different types //------------------------------------------------------------------------// template = 0> + enable_if_t<(! is_same_t(U, T) && ! is_mmap_t(MapU_t)), G4int> = 0> inline size_t set(const G4int& key, U& aHit) const { map_type* theHitsMap = GetMap(); - T* hit = nullptr; - if(theHitsMap->find(key) == theHitsMap->end()) + T* hit = nullptr; + if (theHitsMap->find(key) == theHitsMap->end()) theHitsMap->insert(std::make_pair(key, hit = allocate())); else hit = theHitsMap->find(key)->second; @@ -393,13 +385,13 @@ class G4VTHitsMap : public G4HitsCollection // Multimap overload for different types //------------------------------------------------------------------------// template = 0> + enable_if_t<(! is_same_t(U, T) && is_mmap_t(MapU_t)), G4int> = 0> inline size_t set(const G4int& key, U& aHit) const { map_type* theHitsMap = GetMap(); - T* hit = allocate(); + T* hit = allocate(); *hit += aHit; - if(theHitsMap->find(key) != theHitsMap->end()) + if (theHitsMap->find(key) != theHitsMap->end()) *theHitsMap->find(key)->second = *hit; else theHitsMap->insert(pair_t(key, hit)); @@ -413,12 +405,11 @@ class G4VTHitsMap : public G4HitsCollection // last occurring instance of pointer to data index by key in the // case of a multimap //------------------------------------------------------------------------// - template = 0> + template = 0> T* operator[](G4int key) const { map_type* theHitsMap = GetMap(); - if(theHitsMap->find(key) != theHitsMap->end()) - return theHitsMap->find(key)->second; + if (theHitsMap->find(key) != theHitsMap->end()) return theHitsMap->find(key)->second; return nullptr; } //------------------------------------------------------------------------// @@ -427,17 +418,15 @@ class G4VTHitsMap : public G4HitsCollection { #ifdef G4VERBOSE static bool _first = true; - if(_first) - { + if (_first) { _first = false; - G4Exception("G4THitsMap operator[]", "calling [] on multimap", - JustWarning, "Returning the last matching entry"); + G4Exception("G4THitsMap operator[]", "calling [] on multimap", JustWarning, + "Returning the last matching entry"); } #endif map_type* theHitsMap = GetMap(); - iterator itr = theHitsMap->find(key); - if(itr != theHitsMap->end()) - { + iterator itr = theHitsMap->find(key); + if (itr != theHitsMap->end()) { std::advance(itr, theHitsMap->count(key) - 1); return itr->second; } @@ -457,7 +446,7 @@ class G4VTHitsMap : public G4HitsCollection template G4VTHitsMap::G4VTHitsMap() { - theCollection = (void*) new Map_t; + theCollection = (void*)new Map_t; } //============================================================================// @@ -466,7 +455,7 @@ template G4VTHitsMap::G4VTHitsMap(G4String detName, G4String colNam) : G4HitsCollection(detName, colNam) { - theCollection = (void*) new Map_t; + theCollection = (void*)new Map_t; } //============================================================================// @@ -475,7 +464,7 @@ template G4VTHitsMap::~G4VTHitsMap() { map_type* theHitsMap = GetMap(); - for(iterator itr = theHitsMap->begin(); itr != theHitsMap->end(); ++itr) + for (auto itr = theHitsMap->begin(); itr != theHitsMap->end(); ++itr) delete itr->second; delete theHitsMap; } @@ -483,8 +472,7 @@ G4VTHitsMap::~G4VTHitsMap() //============================================================================// template -G4bool G4VTHitsMap::operator==( - const G4VTHitsMap& right) const +G4bool G4VTHitsMap::operator==(const G4VTHitsMap& right) const { return (collectionName == right.collectionName); } @@ -502,8 +490,8 @@ void G4VTHitsMap::DrawAllHits() template void G4VTHitsMap::PrintAllHits() { - G4cout << "G4THitsMap " << SDname << " / " << collectionName << " --- " - << entries() << " entries" << G4endl; + G4cout << "G4THitsMap " << SDname << " / " << collectionName << " --- " << entries() << " entries" + << G4endl; /*----- commented out for the use-case where cannot be initialized to be zero or does not support += operator. Map_t * theHitsMap = GetMap(); @@ -524,7 +512,7 @@ template void G4VTHitsMap::clear() { Map_t* theHitsMap = GetMap(); - for(iterator itr = theHitsMap->begin(); itr != theHitsMap->end(); ++itr) + for (iterator itr = theHitsMap->begin(); itr != theHitsMap->end(); ++itr) delete itr->second; theHitsMap->clear(); } @@ -541,15 +529,11 @@ template class G4THitsMap : public G4VTHitsMap<_Tp, std::map> { public: - typedef G4VTHitsMap<_Tp, std::map> parent_type; + using parent_type = G4VTHitsMap<_Tp, std::map>; public: - G4THitsMap() - : parent_type() - {} - G4THitsMap(G4String detName, G4String colName) - : parent_type(detName, colName) - {} + G4THitsMap() : parent_type() {} + G4THitsMap(G4String detName, G4String colName) : parent_type(detName, colName) {} using parent_type::operator+=; using parent_type::operator==; @@ -575,15 +559,11 @@ template class G4THitsMultiMap : public G4VTHitsMap<_Tp, std::multimap> { public: - typedef G4VTHitsMap<_Tp, std::multimap> parent_type; + using parent_type = G4VTHitsMap<_Tp, std::multimap>; public: - G4THitsMultiMap() - : parent_type() - {} - G4THitsMultiMap(G4String detName, G4String colName) - : parent_type(detName, colName) - {} + G4THitsMultiMap() : parent_type() {} + G4THitsMultiMap(G4String detName, G4String colName) : parent_type(detName, colName) {} using parent_type::operator+=; using parent_type::operator==; @@ -606,19 +586,14 @@ class G4THitsMultiMap : public G4VTHitsMap<_Tp, std::multimap> //============================================================================// template -class G4THitsUnorderedMap - : public G4VTHitsMap<_Tp, std::unordered_map> +class G4THitsUnorderedMap : public G4VTHitsMap<_Tp, std::unordered_map> { public: - typedef G4VTHitsMap<_Tp, std::unordered_map> parent_type; + using parent_type = G4VTHitsMap<_Tp, std::unordered_map>; public: - G4THitsUnorderedMap() - : parent_type() - {} - G4THitsUnorderedMap(G4String detName, G4String colName) - : parent_type(detName, colName) - {} + G4THitsUnorderedMap() : parent_type() {} + G4THitsUnorderedMap(G4String detName, G4String colName) : parent_type(detName, colName) {} using parent_type::operator+=; using parent_type::operator==; @@ -641,19 +616,14 @@ class G4THitsUnorderedMap //============================================================================// template -class G4THitsUnorderedMultiMap - : public G4VTHitsMap<_Tp, std::unordered_multimap> +class G4THitsUnorderedMultiMap : public G4VTHitsMap<_Tp, std::unordered_multimap> { public: - typedef G4VTHitsMap<_Tp, std::unordered_multimap> parent_type; + using parent_type = G4VTHitsMap<_Tp, std::unordered_multimap>; public: - G4THitsUnorderedMultiMap() - : parent_type() - {} - G4THitsUnorderedMultiMap(G4String detName, G4String colName) - : parent_type(detName, colName) - {} + G4THitsUnorderedMultiMap() : parent_type() {} + G4THitsUnorderedMultiMap(G4String detName, G4String colName) : parent_type(detName, colName) {} using parent_type::operator+=; using parent_type::operator==; diff --git a/source/digits_hits/hits/include/G4THitsVector.hh b/source/digits_hits/hits/include/G4THitsVector.hh index a4092a389f3..30c407911db 100644 --- a/source/digits_hits/hits/include/G4THitsVector.hh +++ b/source/digits_hits/hits/include/G4THitsVector.hh @@ -29,14 +29,13 @@ #define G4THitsVector_h 1 #include "G4THitsCollection.hh" -#include "globals.hh" - #include "G4THitsMap.hh" +#include "globals.hh" -#include #include #include #include +#include // class description: // @@ -52,18 +51,18 @@ template > class G4VTHitsVector : public G4HitsCollection { public: - typedef G4VTHitsVector this_type; - typedef T value_type; - typedef Vector_t vector_type; - typedef typename vector_type::iterator iterator; - typedef typename vector_type::const_iterator const_iterator; - - typedef typename Vector_t::value_type store_type; - typedef std::pair pair_t; - typedef std::map map_t; - typedef std::unordered_map uomap_t; - typedef std::multimap mmap_t; - typedef std::unordered_multimap uommap_t; + using this_type = G4VTHitsVector; + using value_type = T; + using vector_type = Vector_t; + using iterator = typename vector_type::iterator; + using const_iterator = typename vector_type::const_iterator; + + using store_type = typename Vector_t::value_type; + using pair_t = std::pair; + using map_t = std::map; + using uomap_t = std::unordered_map; + using mmap_t = std::multimap; + using uommap_t = std::unordered_multimap; private: #define is_same_t(_Tp, _Up) std::is_same<_Tp, _Up>::value @@ -73,9 +72,8 @@ class G4VTHitsVector : public G4HitsCollection #define is_std_uomap_t(_Mp) std::is_same<_Mp, uomap_t>::value #define is_std_mmap_t(_Mp) std::is_same<_Mp, mmap_t>::value #define is_std_uommap_t(_Mp) std::is_same<_Mp, uommap_t>::value -#define is_map_t(_Mp) \ - (is_std_map_t(_Mp) ||\ is_std_mmap_t(_Mp) || \ is_std_uomap_t( \ - _Mp) || \ is_std_uommap_t(_Mp)) +#define is_map_t(_Mp) \ + (is_std_map_t(_Mp) ||\ is_std_mmap_t(_Mp) || \ is_std_uomap_t(_Mp) || \ is_std_uommap_t(_Mp)) #define is_pointer_t(_Tp) std::is_pointer<_Tp>::value #define scast(_Tp) static_cast<_Tp> @@ -88,27 +86,21 @@ class G4VTHitsVector : public G4HitsCollection // det + collection description constructor G4VTHitsVector(G4String detName, G4String colNam, G4int init_size = 0); // destructor - virtual ~G4VTHitsVector(); + ~G4VTHitsVector() override; // equivalence operator G4bool operator==(const this_type& rhs) const; - virtual void DrawAllHits(); - virtual void PrintAllHits(); + void DrawAllHits() override; + void PrintAllHits() override; // These two methods invokes Draw() and Print() methods of all of // hit objects stored in this map, respectively. // Generic iteration - inline Vector_t* GetContainer() const - { - return scast(Vector_t*)(theCollection); - } + inline Vector_t* GetContainer() const { return scast(Vector_t*)(theCollection); } inline typename Vector_t::size_type size() { return GetContainer()->size(); } - inline typename Vector_t::size_type GetIndex(iterator itr) - { - return std::distance(begin(), itr); - } + inline typename Vector_t::size_type GetIndex(iterator itr) { return std::distance(begin(), itr); } inline typename Vector_t::size_type GetIndex(const_iterator itr) const { @@ -118,8 +110,7 @@ class G4VTHitsVector : public G4HitsCollection template = 0> inline T* GetObject(G4int idx) const { - return (idx < (G4int) GetContainer()->size()) ? (*GetContainer())[idx] - : nullptr; + return (idx < (G4int)GetContainer()->size()) ? (*GetContainer())[idx] : nullptr; } template = 0> @@ -134,20 +125,19 @@ class G4VTHitsVector : public G4HitsCollection return (*itr); } - template = 0> + template = 0> inline T* GetObject(G4int idx) const { - return (idx < (G4int) GetContainer()->size()) ? &(*GetContainer())[idx] - : nullptr; + return (idx < (G4int)GetContainer()->size()) ? &(*GetContainer())[idx] : nullptr; } - template = 0> + template = 0> inline T* GetObject(iterator itr) const { return &(*itr); } - template = 0> + template = 0> inline const T* GetObject(const_iterator itr) const { return &(*itr); @@ -165,19 +155,13 @@ class G4VTHitsVector : public G4HitsCollection // Overwrite a hit object. Total number of hit objects stored in this // map is returned. - inline std::size_t entries() const - { - return (scast(Vector_t*)(theCollection))->size(); - } + inline std::size_t entries() const { return (scast(Vector_t*)(theCollection))->size(); } // Returns the number of hit objects stored in this map inline void clear(); - virtual G4VHit* GetHit(std::size_t) const { return nullptr; } - virtual std::size_t GetSize() const - { - return (scast(Vector_t*)(theCollection))->size(); - } + G4VHit* GetHit(std::size_t) const override { return nullptr; } + std::size_t GetSize() const override { return (scast(Vector_t*)(theCollection))->size(); } inline map_t* GetMap() const; @@ -187,7 +171,7 @@ class G4VTHitsVector : public G4HitsCollection //------------------------------------------------------------------------// // ensure fundamental types are initialized to zero template = 0> + enable_if_t<(is_fundamental_t(U) && is_pointer_t(V)), G4int> = 0> store_type allocate() const { return new T(0.); @@ -196,7 +180,7 @@ class G4VTHitsVector : public G4HitsCollection // non-fundamental types should set values to appropriate values // and G4StatDouble stat(0.); stat += 1.0; gives n == 2; template = 0> + enable_if_t<(! is_fundamental_t(U) && is_pointer_t(V)), G4int> = 0> store_type allocate() const { return new T(); @@ -214,7 +198,7 @@ class G4VTHitsVector : public G4HitsCollection //------------------------------------------------------------------------// // ensure fundamental types are initialized to zero template = 0> + enable_if_t<(is_fundamental_t(U) && ! is_pointer_t(V)), G4int> = 0> store_type allocate() const { return T(0.); @@ -222,14 +206,14 @@ class G4VTHitsVector : public G4HitsCollection // non-fundamental types should set values to appropriate values // and G4StatDouble stat(0.); stat += 1.0; gives n == 2; template = 0> + enable_if_t<(! is_fundamental_t(U) && ! is_pointer_t(V)), G4int> = 0> store_type allocate() const { return T(); } // ensure fundamental types are initialized to zero - template = 0> + template = 0> store_type null() const { return store_type(); @@ -240,53 +224,46 @@ class G4VTHitsVector : public G4HitsCollection // Generic operator += where add(...) overloads handle various // U and VectorU_t types //------------------------------------------------------------------------// - template < - typename U, typename VectorU_t, + template = 0> this_type& operator+=(const G4VTHitsVector& right) const { VectorU_t* aHitsVector = right.GetVector(); - for(auto itr = aHitsVector->begin(); itr != aHitsVector->end(); ++itr) - { + for (auto itr = aHitsVector->begin(); itr != aHitsVector->end(); ++itr) { auto _ptr = (*itr) ? (*itr) : null(); - if(_ptr) - add(std::distance(aHitsVector->begin(), itr), *_ptr); + if (_ptr) add(std::distance(aHitsVector->begin(), itr), *_ptr); } return static_cast(*(const_cast(this))); } //------------------------------------------------------------------------// - template < - typename U, typename VectorU_t, - enable_if_t<(!is_pointer_t(typename VectorU_t::value_type)), G4int> = 0> + template = 0> this_type& operator+=(const G4VTHitsVector& right) const { VectorU_t* aHitsVector = right.GetVector(); - for(auto itr = aHitsVector->begin(); itr != aHitsVector->end(); ++itr) - { + for (auto itr = aHitsVector->begin(); itr != aHitsVector->end(); ++itr) { auto _ptr = (*itr) ? (*itr) : allocate(); add(std::distance(aHitsVector->begin(), itr), _ptr); } return static_cast(*(const_cast(this))); } //------------------------------------------------------------------------// - template < - typename U, typename MapU_t, + template = 0> this_type& operator+=(const G4VTHitsMap& right) const { MapU_t* aHitsMap = right.GetMap(); - for(auto itr = aHitsMap->begin(); itr != aHitsMap->end(); ++itr) + for (auto itr = aHitsMap->begin(); itr != aHitsMap->end(); ++itr) add(itr->first, *(itr->second)); return static_cast(*(const_cast(this))); } //------------------------------------------------------------------------// - template < - typename U, typename MapU_t, - enable_if_t = 0> + template = 0> this_type& operator+=(const G4VTHitsMap& right) const { MapU_t* aHitsMap = right.GetMap(); - for(auto itr = aHitsMap->begin(); itr != aHitsMap->end(); ++itr) + for (auto itr = aHitsMap->begin(); itr != aHitsMap->end(); ++itr) add(itr->first, itr->second); return static_cast(*(const_cast(this))); } @@ -310,11 +287,11 @@ class G4VTHitsVector : public G4HitsCollection //------------------------------------------------------------------------// // Overload for different types //------------------------------------------------------------------------// - template = 0> + template = 0> std::size_t add(const G4int& key, U*& aHit) const { vector_type* theHitsVector = GetVector(key); - store_type hit = allocate(); + store_type hit = allocate(); get_reference(hit) += *aHit; _add(theHitsVector, key, *hit); return theHitsVector->size(); @@ -332,7 +309,7 @@ class G4VTHitsVector : public G4HitsCollection //------------------------------------------------------------------------// // Overload for different types //------------------------------------------------------------------------// - template = 0> + template = 0> std::size_t add(const G4int& key, U& aHit) const { vector_type* theHitsVector = GetVector(key); @@ -358,11 +335,11 @@ class G4VTHitsVector : public G4HitsCollection //------------------------------------------------------------------------// // Overload for different types //------------------------------------------------------------------------// - template = 0> + template = 0> inline std::size_t set(const G4int& key, U*& aHit) const { vector_type* theHitsVector = GetVector(key); - store_type hit = allocate(); + store_type hit = allocate(); get_reference(hit) += *aHit; _assign(theHitsVector, key, hit); return theHitsVector->size(); @@ -386,11 +363,11 @@ class G4VTHitsVector : public G4HitsCollection //------------------------------------------------------------------------// // Overload for different types //------------------------------------------------------------------------// - template = 0> + template = 0> inline std::size_t set(const G4int& key, U& aHit) const { vector_type* theHitsVector = GetVector(key); - store_type hit = allocate(); + store_type hit = allocate(); get_reference(hit) += aHit; _assign(theHitsVector, key, &aHit); return theHitsVector->size(); @@ -419,23 +396,20 @@ class G4VTHitsVector : public G4HitsCollection void resize(vector_type*& theHitsVector, const G4int& key) const { // ensure the proper size - if(key >= (G4int) theHitsVector->size()) - theHitsVector->resize(key + 1, null()); + if (key >= (G4int)theHitsVector->size()) theHitsVector->resize(key + 1, null()); // if null pointer for vector entry: allocate - if(!theHitsVector->at(key)) - { + if (! theHitsVector->at(key)) { store_type init = allocate(); _assign(theHitsVector, key, init); } } - template = 0> + template = 0> void resize(vector_type*& theHitsVector, const G4int& key) const { // ensure the proper size - if(key >= (G4int) theHitsVector->size()) - theHitsVector->resize(key + 1, null()); + if (key >= (G4int)theHitsVector->size()) theHitsVector->resize(key + 1, null()); } vector_type* GetVector(const G4int& key) const @@ -452,14 +426,14 @@ class G4VTHitsVector : public G4HitsCollection template = 0> void _assign(vector_type*& theHitsVector, const G4int& key, T& val) const { - delete(*theHitsVector)[key]; + delete (*theHitsVector)[key]; *(*theHitsVector)[key] = val; } template = 0> void _assign(vector_type*& theHitsVector, const G4int& key, T*& val) const { - delete(*theHitsVector)[key]; + delete (*theHitsVector)[key]; (*theHitsVector)[key] = val; } @@ -475,15 +449,13 @@ class G4VTHitsVector : public G4HitsCollection *(*theHitsVector)[key] += *val; } - template = 0> + template = 0> void _add(vector_type*& theHitsVector, const G4int& key, V& val) const { *(*theHitsVector)[key] += val; } - template = 0> + template = 0> void _add(vector_type*& theHitsVector, const G4int& key, V*& val) const { *(*theHitsVector)[key] += *val; @@ -498,8 +470,7 @@ class G4VTHitsVector : public G4HitsCollection template = 0> void delete_contents(vector_type*& theHitsVector) const { - for(iterator itr = theHitsVector->begin(); itr != theHitsVector->end(); - ++itr) + for (auto itr = theHitsVector->begin(); itr != theHitsVector->end(); ++itr) delete *itr; } @@ -513,50 +484,48 @@ class G4VTHitsVector : public G4HitsCollection // Assign/Add when the storage type is pointer // assumes type T has overload of += operator for U //------------------------------------------------------------------------// - template = 0> + template = 0> void _assign(vector_type*& theHitsVector, const G4int& key, T& val) const { (*theHitsVector)[key] = val; } - template = 0> + template = 0> void _assign(vector_type*& theHitsVector, const G4int& key, T*& val) const { - delete(*theHitsVector)[key]; + delete (*theHitsVector)[key]; (*theHitsVector)[key] = *val; } - template = 0> + template = 0> void _add(vector_type*& theHitsVector, const G4int& key, T& val) const { (*theHitsVector)[key] += val; } - template = 0> + template = 0> void _add(vector_type*& theHitsVector, const G4int& key, T*& val) const { (*theHitsVector)[key] += *val; } - template = 0> + template = 0> void _add(vector_type*& theHitsVector, const G4int& key, V& val) const { (*theHitsVector)[key] += val; } - template = 0> + template = 0> void _add(vector_type*& theHitsVector, const G4int& key, V*& val) const { (*theHitsVector)[key] += *val; } - template = 0> + template = 0> void delete_contents(vector_type*&) const {} - template = 0> + template = 0> T& get_reference(U& val) const { return val; @@ -579,8 +548,7 @@ template G4VTHitsVector::G4VTHitsVector(G4int init_size) { theCollection = static_cast(new Vector_t); - if(init_size > 0) - { + if (init_size > 0) { vector_type* theHitsVector = GetVector(); resize(theHitsVector, init_size - 1); } @@ -589,13 +557,11 @@ G4VTHitsVector::G4VTHitsVector(G4int init_size) //============================================================================// template -G4VTHitsVector::G4VTHitsVector(G4String detName, G4String colNam, - G4int init_size) +G4VTHitsVector::G4VTHitsVector(G4String detName, G4String colNam, G4int init_size) : G4HitsCollection(detName, colNam) { theCollection = static_cast(new Vector_t); - if(init_size > 0) - { + if (init_size > 0) { vector_type* theHitsVector = GetVector(); resize(theHitsVector, init_size - 1); } @@ -614,8 +580,7 @@ G4VTHitsVector::~G4VTHitsVector() //============================================================================// template -G4bool G4VTHitsVector::operator==( - const G4VTHitsVector& right) const +G4bool G4VTHitsVector::operator==(const G4VTHitsVector& right) const { return (collectionName == right.collectionName); } @@ -623,17 +588,14 @@ G4bool G4VTHitsVector::operator==( //============================================================================// template -typename G4VTHitsVector::map_t* -G4VTHitsVector::GetMap() const +typename G4VTHitsVector::map_t* G4VTHitsVector::GetMap() const { - G4ThreadLocalStatic map_t* theHitsMap = new map_t(); + G4ThreadLocalStatic auto theHitsMap = new map_t(); theHitsMap->clear(); vector_type* theHitsVector = GetVector(); - for(std::size_t i = 0; i < theHitsVector->size(); ++i) - { + for (std::size_t i = 0; i < theHitsVector->size(); ++i) { store_type& _obj = (*theHitsVector)[i]; - if(_obj) - (*theHitsMap)[i] = _obj; + if (_obj) (*theHitsMap)[i] = _obj; } return theHitsMap; } @@ -650,8 +612,8 @@ void G4VTHitsVector::DrawAllHits() template void G4VTHitsVector::PrintAllHits() { - G4cout << "G4THitsVector " << SDname << " / " << collectionName << " --- " - << entries() << " entries" << G4endl; + G4cout << "G4THitsVector " << SDname << " / " << collectionName << " --- " << entries() + << " entries" << G4endl; /*----- commented out for the use-case where cannot be initialized to be zero or does not support += operator. Vector_t * theHitsVector = GetVector(); @@ -688,12 +650,10 @@ template class G4THitsVector : public G4VTHitsVector<_Tp, std::vector<_Tp*>> { public: - typedef G4VTHitsVector<_Tp, std::vector<_Tp*>> parent_type; + using parent_type = G4VTHitsVector<_Tp, std::vector<_Tp *>>; public: - G4THitsVector(G4int init_size = 0) - : parent_type(init_size) - {} + G4THitsVector(G4int init_size = 0) : parent_type(init_size) {} G4THitsVector(G4String detName, G4String colName, G4int init_size = 0) : parent_type(detName, colName, init_size) {} @@ -723,12 +683,10 @@ template class G4THitsDeque : public G4VTHitsVector<_Tp, std::deque<_Tp*>> { public: - typedef G4VTHitsVector<_Tp, std::deque<_Tp*>> parent_type; + using parent_type = G4VTHitsVector<_Tp, std::deque<_Tp*>>; public: - G4THitsDeque(G4int init_size = 0) - : parent_type(init_size) - {} + G4THitsDeque(G4int init_size = 0) : parent_type(init_size) {} G4THitsDeque(G4String detName, G4String colName, G4int init_size = 0) : parent_type(detName, colName, init_size) {} diff --git a/source/digits_hits/hits/include/G4VHit.hh b/source/digits_hits/hits/include/G4VHit.hh index 627ca2222bf..b3e7e163804 100644 --- a/source/digits_hits/hits/include/G4VHit.hh +++ b/source/digits_hits/hits/include/G4VHit.hh @@ -30,8 +30,9 @@ #define G4VHit_h 1 #include "globals.hh" -#include + #include +#include class G4AttDef; class G4AttValue; @@ -47,30 +48,25 @@ class G4AttValue; class G4VHit { public: - G4VHit(); - virtual ~G4VHit(); + G4VHit() = default; + virtual ~G4VHit() = default; + + G4bool operator==(const G4VHit&) const { return false; } - G4bool operator==(const G4VHit& right) const; + virtual void Draw(){}; + virtual void Print(){}; - virtual void Draw(); - virtual void Print(); + // Returns pointer to map of attribute definitions for this hit + // Caller is responsible for checking validity of returned pointer. + // See `G4Trajectory` for a concrete implementation. + virtual const std::map* GetAttDefs() const { return nullptr; } - virtual const std::map* GetAttDefs() const { return 0; } - // If implemented by a derived class, returns a pointer to a map - // of attribute definitions for the attribute values below. The - // user must test the validity of this pointer. See - // G4Trajectory for an example of a concrete implementation of - // this method. - virtual std::vector* CreateAttValues() const { return 0; } - // If implemented by a derived class, returns a pointer to a - // list of attribute values suitable, e.g., for picking. Each - // must refer to an attribute definition in the above map; its - // name is the key. The user must test the validity of this - // pointer (it must be non-zero and conform to the G4AttDefs, - // which may be checked with G4AttCheck) and delete the list - // after use. See G4Trajectory for an example of a concrete - // implementation of this method and - // G4VTrajectory::ShowTrajectory for an example of its use. + // Returns pointer to list of attributes for this hit + // Each attribute must correspond to a definition returned by `GetAffDefs`. + // Caller is responsible for checking validity of returned pointer. + // See `G4Trajectory` for a concrete implementation, and + // `G4VTrajectory::ShowTrajectory` for an example of its use. + virtual std::vector* CreateAttValues() const { return nullptr; } }; #endif diff --git a/source/digits_hits/hits/include/G4VHitsCollection.hh b/source/digits_hits/hits/include/G4VHitsCollection.hh index c2d0b849a53..b568a309f08 100644 --- a/source/digits_hits/hits/include/G4VHitsCollection.hh +++ b/source/digits_hits/hits/include/G4VHitsCollection.hh @@ -44,33 +44,31 @@ class G4VHit; class G4VHitsCollection { public: - G4VHitsCollection(); + G4VHitsCollection() = default; G4VHitsCollection(G4String detName, G4String colNam); - virtual ~G4VHitsCollection(); + virtual ~G4VHitsCollection() = default; G4bool operator==(const G4VHitsCollection& right) const; - virtual void DrawAllHits(); - virtual void PrintAllHits(); + virtual void DrawAllHits(){}; + virtual void PrintAllHits(){}; - protected: - // Collection name - G4String collectionName; - G4String SDname; - // Collection ID - G4int colID; - - public: inline const G4String& GetName() const { return collectionName; } inline const G4String& GetSDname() const { return SDname; } inline void SetColID(G4int i) { colID = i; } inline G4int GetColID() const { return colID; } - public: // GetHit and GetSize are given a default implementation here so // that the template G4THitsCollection can be used, but they // are re-implemented G4THitsCollection. virtual G4VHit* GetHit(size_t) const { return nullptr; } virtual size_t GetSize() const { return 0; }; + + protected: + // Collection name + G4String collectionName = "Unknown"; + G4String SDname = "Unknown"; + // Collection ID + G4int colID = -1; }; #endif diff --git a/source/digits_hits/hits/sources.cmake b/source/digits_hits/hits/sources.cmake index b43d76e0faa..eaf02611155 100644 --- a/source/digits_hits/hits/sources.cmake +++ b/source/digits_hits/hits/sources.cmake @@ -12,7 +12,6 @@ geant4_add_module(G4hits SOURCES G4HCofThisEvent.cc G4THitsCollection.cc - G4VHit.cc G4VHitsCollection.cc) geant4_module_link_libraries(G4hits PUBLIC G4globman) diff --git a/source/digits_hits/hits/src/G4HCofThisEvent.cc b/source/digits_hits/hits/src/G4HCofThisEvent.cc index d7cc4cfb981..3456a06da9d 100644 --- a/source/digits_hits/hits/src/G4HCofThisEvent.cc +++ b/source/digits_hits/hits/src/G4HCofThisEvent.cc @@ -34,34 +34,24 @@ G4Allocator*& anHCoTHAllocator_G4MT_TLS_() return _instance; } -G4HCofThisEvent::G4HCofThisEvent() -{ - HC = new std::vector; -} +G4HCofThisEvent::G4HCofThisEvent() { HC = new std::vector; } G4HCofThisEvent::G4HCofThisEvent(G4int cap) { - HC = new std::vector; - for(G4int i = 0; i < cap; i++) - { - HC->push_back((G4VHitsCollection*) 0); - } + HC = new std::vector(cap, nullptr); } G4HCofThisEvent::~G4HCofThisEvent() { - for(size_t i = 0; i < HC->size(); i++) - { - delete(*HC)[i]; + for (const G4VHitsCollection* h : *HC) { + delete h; } - HC->clear(); delete HC; } void G4HCofThisEvent::AddHitsCollection(G4int HCID, G4VHitsCollection* aHC) { - if(HCID >= 0 && HCID < G4int(HC->size())) - { + if (HCID >= 0 && HCID < G4int(HC->size())) { aHC->SetColID(HCID); (*HC)[HCID] = aHC; } @@ -70,22 +60,19 @@ void G4HCofThisEvent::AddHitsCollection(G4int HCID, G4VHitsCollection* aHC) G4HCofThisEvent::G4HCofThisEvent(const G4HCofThisEvent& rhs) { HC = new std::vector(rhs.HC->size()); - for(unsigned int i = 0; i < rhs.HC->size(); ++i) + for (unsigned int i = 0; i < rhs.HC->size(); ++i) *(HC->at(i)) = *(rhs.HC->at(i)); } G4HCofThisEvent& G4HCofThisEvent::operator=(const G4HCofThisEvent& rhs) { - if(this == &rhs) - return *this; - - for(std::vector::const_iterator it = HC->begin(); - it != HC->end(); ++it) - { - delete *it; + if (this == &rhs) return *this; + + for (const G4VHitsCollection* it : *HC) { + delete it; } HC->resize(rhs.HC->size()); - for(unsigned int i = 0; i < rhs.HC->size(); ++i) + for (unsigned int i = 0; i < rhs.HC->size(); ++i) *(HC->at(i)) = *(rhs.HC->at(i)); return *this; } diff --git a/source/digits_hits/hits/src/G4THitsCollection.cc b/source/digits_hits/hits/src/G4THitsCollection.cc index 3ab6cf65941..990f0b23867 100644 --- a/source/digits_hits/hits/src/G4THitsCollection.cc +++ b/source/digits_hits/hits/src/G4THitsCollection.cc @@ -34,18 +34,6 @@ G4Allocator*& anHCAllocator_G4MT_TLS_() return _instance; } -G4HitsCollection::G4HitsCollection() - : theCollection((void*) 0) -{} - -G4HitsCollection::G4HitsCollection(G4String detName, G4String colNam) - : G4VHitsCollection(detName, colNam) - , theCollection((void*) 0) -{} - -G4HitsCollection::~G4HitsCollection() -{} - G4bool G4HitsCollection::operator==(const G4HitsCollection& right) const { return (collectionName == right.collectionName); diff --git a/source/digits_hits/hits/src/G4VHitsCollection.cc b/source/digits_hits/hits/src/G4VHitsCollection.cc index 928e99ed72f..705bd47aaf1 100644 --- a/source/digits_hits/hits/src/G4VHitsCollection.cc +++ b/source/digits_hits/hits/src/G4VHitsCollection.cc @@ -30,27 +30,11 @@ #include "G4VHitsCollection.hh" -G4VHitsCollection::G4VHitsCollection() -{ - collectionName = "Unknown"; - SDname = "Unknown"; - colID = -1; -} - G4VHitsCollection::G4VHitsCollection(G4String detName, G4String colNam) -{ - collectionName = colNam; - SDname = detName; - colID = -1; -} - -G4VHitsCollection::~G4VHitsCollection() { ; } + : collectionName(colNam), SDname(detName), colID(-1) +{} G4bool G4VHitsCollection::operator==(const G4VHitsCollection& right) const { return ((collectionName == right.collectionName) && (SDname == right.SDname)); } - -void G4VHitsCollection::DrawAllHits() { ; } - -void G4VHitsCollection::PrintAllHits() { ; } diff --git a/source/digits_hits/scorer/GNUmakefile b/source/digits_hits/scorer/GNUmakefile deleted file mode 100644 index 6a545d8740d..00000000000 --- a/source/digits_hits/scorer/GNUmakefile +++ /dev/null @@ -1,32 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for digits+hits library. Makoto Asai, 1/11/96. -# -------------------------------------------------------------- - -name := G4detscorer - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4DIGI_ALLOC_EXPORT -CPPFLAGS += \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/solids/CSG/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/digits_hits/detector/include \ - -I$(G4BASE)/digits_hits/digits/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/graphics_reps/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/digits_hits/utils/GNUmakefile b/source/digits_hits/utils/GNUmakefile deleted file mode 100644 index 50a8012228d..00000000000 --- a/source/digits_hits/utils/GNUmakefile +++ /dev/null @@ -1,35 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for digits+hits library. Makoto Asai, 1/11/96. -# -------------------------------------------------------------- - -name := G4detutils - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4DIGI_ALLOC_EXPORT -CPPFLAGS += \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/divisions/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/solids/CSG/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/digits_hits/detector/include \ - -I$(G4BASE)/digits_hits/digits/include \ - -I$(G4BASE)/digits_hits/scorer/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/graphics_reps/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/digits_hits/utils/History b/source/digits_hits/utils/History index 44af48ca79e..397a5c20f51 100644 --- a/source/digits_hits/utils/History +++ b/source/digits_hits/utils/History @@ -6,10 +6,10 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-05-24 Makoto Asai (detutil-V11-00-07) +## 2023-05-24 Makoto Asai (detutil-V11-01-01) - Additional fix for probe scorer. -## 2023-04-28 Makoto Asai +## 2023-04-28 Makoto Asai (detutil-V11-01-00) - Fixed probe scorer with alternative material setting, that didn't properly work in tasking mode. diff --git a/source/error_propagation/GNUmakefile b/source/error_propagation/GNUmakefile deleted file mode 100644 index 507bbd94112..00000000000 --- a/source/error_propagation/GNUmakefile +++ /dev/null @@ -1,56 +0,0 @@ -# ---------------------------------------------------------- -# GNUmakefile for tracking library. Katsuya Amako, 5/9/95. -# ---------------------------------------------------------- - -name := G4error_propagation - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -GLOBLIBS = libG4run.lib libG4event.lib -GLOBLIBS += libG4tracking.lib libG4processes.lib libG4digits_hits.lib -GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/solids/CSG/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/tracking/include \ - -I$(G4BASE)/event/include \ - -I$(G4BASE)/run/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/electromagnetic/standard/include \ - -I$(G4BASE)/processes/electromagnetic/muons/include \ - -I$(G4BASE)/processes/transportation/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/digits_hits/digits/include - -ifdef G4EVERBOSE - CPPFLAGS += -DG4EVERBOSE -endif - -include $(G4INSTALL)/config/common.gmk - -.PHONY: global - -global: lib diff --git a/source/error_propagation/History b/source/error_propagation/History index abb448440cc..27acdbdf798 100644 --- a/source/error_propagation/History +++ b/source/error_propagation/History @@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2022-12-12 Ben Morgan (error-propagation-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-11-17 Gabriele Cosmo (error-propagation-V11-00-02) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/event/GNUmakefile b/source/event/GNUmakefile deleted file mode 100644 index bc439af523e..00000000000 --- a/source/event/GNUmakefile +++ /dev/null @@ -1,57 +0,0 @@ -# ------------------------------------------------------------ -# GNUmakefile for events library. Makoto Asai, 5/9/95. -# ------------------------------------------------------------ - -name := G4event - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -GLOBLIBS = libG4tracking.lib libG4processes.lib libG4digits_hits.lib -GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4EVENT_ALLOC_EXPORT -##### CPPFLAGS += -DG4_USESMARTSTACK -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/tracking/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/parameterisation/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/biasing/include \ - -I$(G4BASE)/digits_hits/detector/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/digits_hits/digits/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/graphics_reps/include - -ifdef G4_STORE_TRAJECTORY - CPPFLAGS += -DG4_STORE_TRAJECTORY -endif - -include $(G4INSTALL)/config/common.gmk - -.PHONY: global - -global: lib diff --git a/source/event/History b/source/event/History index af982df7b42..52ca18b6301 100644 --- a/source/event/History +++ b/source/event/History @@ -6,10 +6,13 @@ be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-06-07 Makoto Asai (event-V11-00-08) +## 2023-06-07 Makoto Asai (event-V11-01-01) - Adding SetParticleWeight() method to G4ParticleGun. - Fix incorrect information of maximum number of tracks. +## 2022-12-12 Ben Morgan (event-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-11-17 Gabriele Cosmo (event-V11-00-07) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/event/include/G4ParticleGun.hh b/source/event/include/G4ParticleGun.hh index 2dda2e7188b..c7c2b202e21 100644 --- a/source/event/include/G4ParticleGun.hh +++ b/source/event/include/G4ParticleGun.hh @@ -101,6 +101,8 @@ class G4ParticleGun : public G4VPrimaryGenerator { particle_polarization = aVal; } inline void SetNumberOfParticles(G4int i) { NumberOfParticlesToBeGenerated = i; } + inline void SetParticleWeight(G4double w) + { particle_weight = w; } inline G4ParticleDefinition* GetParticleDefinition() const { return particle_definition; } diff --git a/source/externals/GNUmakefile b/source/externals/GNUmakefile deleted file mode 100644 index af1269e08c5..00000000000 --- a/source/externals/GNUmakefile +++ /dev/null @@ -1,50 +0,0 @@ -# ----------------------------------------------------------------------- -# GNUmakefile for Geant4 external packages -# Gunter Folger 26-April-2011 -# ----------------------------------------------------------------------- - -MAKEFLAGS= --no-print-directory - -name := G4externals - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -SUBDIRS := g4tools -SUBLIBS := G4tools - -ifdef G4LIB_USE_PTL - SUBDIRS += ptl - SUBLIBS += G4ptl -endif -ifdef G4LIB_USE_CLHEP - SUBDIRS += clhep - SUBLIBS += G4clhep -endif -ifdef G4LIB_USE_EXPAT - SUBDIRS += expat - SUBLIBS += G4expat -endif -ifdef G4LIB_USE_ZLIB - SUBDIRS += zlib - SUBLIBS += G4zlib -endif - -.PHONY: granular obj glob global clean - -glob global: granular - -obj: - @for dir in $(SUBDIRS); do (cd $$dir; $(MAKE) obj); done - -granular: - @for dir in $(SUBDIRS); do (cd $$dir; $(MAKE)); done - -includes: - @for dir in $(SUBDIRS); do (cd $$dir && $(MAKE) $@ ); done - -clean clean_libs: - @for dir in $(SUBDIRS); do (cd $$dir; $(MAKE) $@); done diff --git a/source/externals/History b/source/externals/History index 1bd4603ceed..781d5a32e31 100644 --- a/source/externals/History +++ b/source/externals/History @@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2022-12-12 Ben Morgan (externals-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-10-10 Gabriele Cosmo (externals-V11-00-05) - Synchronised with CLHEP-2.4.6.0. o Resolved gcc-12 warnings in Evaluator source (C.Green). diff --git a/source/externals/clhep/GNUmakefile b/source/externals/clhep/GNUmakefile deleted file mode 100644 index f8ab929c620..00000000000 --- a/source/externals/clhep/GNUmakefile +++ /dev/null @@ -1,22 +0,0 @@ -# ------------------------------------------------------------ -# GNUmakefile for internal CLHEP library. Gabriele Cosmo, 4/5/11. -# ------------------------------------------------------------ - -name := G4clhep - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -GLOBLIBS = - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DCLHEP_EXPORT - -include $(G4INSTALL)/config/common.gmk - -.PHONY: global - -global: lib - diff --git a/source/externals/clhep/History b/source/externals/clhep/History index d1541d2722f..cb82b5463ea 100644 --- a/source/externals/clhep/History +++ b/source/externals/clhep/History @@ -6,6 +6,12 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2022-12-13 Gabriele Cosmo (clhep-V11-01-00) +- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1 + in Random and Evaluator code. +- Fixed cases of C++20 deprecated arithmetics with unnamed enumerations + in Vector classes. + ## 2022-10-10 Gabriele Cosmo (clhep-V11-00-08) - Synchronised with CLHEP-2.4.6.2. * Random (L.Garren) diff --git a/source/externals/clhep/include/CLHEP/Vector/RotationInterfaces.h b/source/externals/clhep/include/CLHEP/Vector/RotationInterfaces.h index 3e45d733594..a4ef5a47872 100644 --- a/source/externals/clhep/include/CLHEP/Vector/RotationInterfaces.h +++ b/source/externals/clhep/include/CLHEP/Vector/RotationInterfaces.h @@ -192,7 +192,7 @@ class Hep4RotationInterface { static double getTolerance(); static double setTolerance( double tol ); - enum { ToleranceTicks = 100 }; + static const int ToleranceTicks = 100; protected: diff --git a/source/externals/clhep/include/CLHEP/Vector/ThreeVector.h b/source/externals/clhep/include/CLHEP/Vector/ThreeVector.h index a50d7a05d1f..a0dc3f8470b 100644 --- a/source/externals/clhep/include/CLHEP/Vector/ThreeVector.h +++ b/source/externals/clhep/include/CLHEP/Vector/ThreeVector.h @@ -292,7 +292,7 @@ class Hep3Vector { double howOrthogonal (const Hep3Vector & v) const; // | v1.dot(v2) / v1.cross(v2) |, to a maximum of 1. - enum { ToleranceTicks = 100 }; + static const int ToleranceTicks = 100; // 4 - Intrinsic properties diff --git a/source/externals/clhep/include/CLHEP/Vector/TwoVector.h b/source/externals/clhep/include/CLHEP/Vector/TwoVector.h index 09c98e3fccc..e420b0297af 100644 --- a/source/externals/clhep/include/CLHEP/Vector/TwoVector.h +++ b/source/externals/clhep/include/CLHEP/Vector/TwoVector.h @@ -190,7 +190,7 @@ class Hep2Vector { const Hep2Vector & b); // v1-v2 - enum { ZMpvToleranceTicks = 100 }; + static const int ZMpvToleranceTicks = 100; private: diff --git a/source/externals/clhep/src/DualRand.cc b/source/externals/clhep/src/DualRand.cc index ada9f45e1fd..f5bb3285d0d 100644 --- a/source/externals/clhep/src/DualRand.cc +++ b/source/externals/clhep/src/DualRand.cc @@ -182,7 +182,7 @@ void DualRand::restoreStatus(const char filename[]) { } void DualRand::showStatus() const { - int pr=std::cout.precision(20); + long pr=std::cout.precision(20); std::cout << std::endl; std::cout << "-------- DualRand engine status ---------" << std::endl; @@ -387,7 +387,7 @@ void DualRand::Tausworthe::put(std::ostream & os) const { char beginMarker[] = "Tausworthe-begin"; char endMarker[] = "Tausworthe-end"; - int pr=os.precision(20); + long pr=os.precision(20); os << " " << beginMarker << " "; for (int i = 0; i < 4; ++i) { os << words[i] << " "; @@ -437,9 +437,9 @@ void DualRand::Tausworthe::get(std::istream & is) { bool DualRand::Tausworthe::get(std::vector::const_iterator & iv){ for (int i = 0; i < 4; ++i) { - words[i] = *iv++; + words[i] = (unsigned int)*iv++; } - wordIndex = *iv++; + wordIndex = (int)*iv++; return true; } @@ -478,7 +478,7 @@ void DualRand::IntegerCong::put(std::ostream & os) const { char beginMarker[] = "IntegerCong-begin"; char endMarker[] = "IntegerCong-end"; - int pr=os.precision(20); + long pr=os.precision(20); os << " " << beginMarker << " "; os << state << " " << multiplier << " " << addend; os << " " << endMarker << " "; @@ -520,9 +520,9 @@ void DualRand::IntegerCong::get(std::istream & is) { bool DualRand::IntegerCong::get(std::vector::const_iterator & iv) { - state = *iv++; - multiplier = *iv++; - addend = *iv++; + state = (unsigned int)*iv++; + multiplier = (unsigned int)*iv++; + addend = (unsigned int)*iv++; return true; } diff --git a/source/externals/clhep/src/Evaluator.cc b/source/externals/clhep/src/Evaluator.cc index d4f0b9f3089..359aafe0d39 100644 --- a/source/externals/clhep/src/Evaluator.cc +++ b/source/externals/clhep/src/Evaluator.cc @@ -52,7 +52,7 @@ struct Struct { #define REMOVE_BLANKS \ for(pointer=name;;pointer++) if (!isspace(*pointer)) break; \ -for(n=strlen(pointer);n>0;n--) if (!isspace(*(pointer+n-1))) break +for(n=(int)strlen(pointer);n>0;n--) if (!isspace(*(pointer+n-1))) break #define SKIP_BLANKS \ for(;;pointer++) { \ @@ -126,7 +126,7 @@ static int function(const string & name, stack & par, * * ***********************************************************************/ { - int npar = par.size(); + unsigned long npar = par.size(); if (npar > MAX_N_PAR) return EVAL::ERROR_UNKNOWN_FUNCTION; dic_type::const_iterator iter = dictionary.find(sss[npar]+name); @@ -134,7 +134,7 @@ static int function(const string & name, stack & par, Item item = iter->second; double pp[MAX_N_PAR] = {0.0}; - for(int i=0; ithePosition - ((Struct *)(p))->theExpression; + return int(((Struct *)(p))->thePosition - ((Struct *)(p))->theExpression); } //--------------------------------------------------------------------------- diff --git a/source/externals/clhep/src/JamesRandom.cc b/source/externals/clhep/src/JamesRandom.cc index 6cacec5c6c7..5ad81fa931a 100644 --- a/source/externals/clhep/src/JamesRandom.cc +++ b/source/externals/clhep/src/JamesRandom.cc @@ -401,7 +401,7 @@ bool HepJamesRandom::getState (const std::vector & v) { t[0] = v[195]; t[1] = v[196]; c = DoubConv::longs2double(t); t[0] = v[197]; t[1] = v[198]; cd = DoubConv::longs2double(t); t[0] = v[199]; t[1] = v[200]; cm = DoubConv::longs2double(t); - j97 = v[201]; + j97 = (int)v[201]; i97 = (64+j97)%97; return true; } diff --git a/source/externals/clhep/src/MTwistEngine.cc b/source/externals/clhep/src/MTwistEngine.cc index 5ba5a0688f4..505fc953e7c 100644 --- a/source/externals/clhep/src/MTwistEngine.cc +++ b/source/externals/clhep/src/MTwistEngine.cc @@ -303,7 +303,7 @@ std::ostream & MTwistEngine::put ( std::ostream& os ) const char beginMarker[] = "MTwistEngine-begin"; char endMarker[] = "MTwistEngine-end"; - int pr = os.precision(20); + long pr = os.precision(20); os << " " << beginMarker << " "; os << theSeed << " "; for (int i=0; i<624; ++i) { @@ -381,9 +381,9 @@ bool MTwistEngine::getState (const std::vector & v) { return false; } for (int i=0; i<624; ++i) { - mt[i]=v[i+1]; + mt[i]=(unsigned int)v[i+1]; } - count624 = v[625]; + count624 = (int)v[625]; return true; } diff --git a/source/externals/clhep/src/MixMaxRng.cc b/source/externals/clhep/src/MixMaxRng.cc index a1d4dacafdd..510727da650 100644 --- a/source/externals/clhep/src/MixMaxRng.cc +++ b/source/externals/clhep/src/MixMaxRng.cc @@ -351,7 +351,7 @@ std::ostream & MixMaxRng::put ( std::ostream& os ) const char beginMarker[] = "MixMaxRng-begin"; char endMarker[] = "MixMaxRng-end"; - int pr = os.precision(24); + long pr = os.precision(24); os << beginMarker << " "; os << theSeed << "\n"; for (int i=0; i & v) S.V[i/2]= ( (v[i] & MASK32) | ( (myuint_t)(v[i+1]) << 32 ) ); // unpack from a data structure which is 32-bit on some platforms } - S.counter = v[2*rng_get_N()+1]; + S.counter = (int)v[2*rng_get_N()+1]; precalc(); if ( ( (v[2*rng_get_N()+2] & MASK32) | ( (myuint_t)(v[2*rng_get_N()+3]) << 32 ) ) != S.sumtot) { diff --git a/source/externals/clhep/src/NonRandomEngine.cc b/source/externals/clhep/src/NonRandomEngine.cc index aec100bbfcb..4dd78d19e47 100644 --- a/source/externals/clhep/src/NonRandomEngine.cc +++ b/source/externals/clhep/src/NonRandomEngine.cc @@ -209,7 +209,7 @@ bool NonRandomEngine::get (const std::vector & v) { } bool NonRandomEngine::getState (const std::vector & v) { - unsigned int seqSize = v[9]; + unsigned long seqSize = v[9]; if (v.size() != 2*seqSize + 10 ) { std::cerr << "\nNonRandomEngine get:state vector has wrong length - state unchanged\n"; @@ -222,10 +222,10 @@ bool NonRandomEngine::getState (const std::vector & v) { sequenceHasBeenSet = (v[2]!=0); intervalHasBeenSet = (v[3]!=0); t[0] = v[4]; t[1] = v[5]; nextRandom = DoubConv::longs2double(t); - nInSeq = v[6]; + nInSeq = (unsigned int)v[6]; t[0] = v[7]; t[1] = v[8]; randomInterval = DoubConv::longs2double(t); sequence.clear(); - for (unsigned int i=0; i t(2); os << " " << name() << "\n"; os << "Uvec" << "\n"; diff --git a/source/externals/clhep/src/RandBreitWigner.cc b/source/externals/clhep/src/RandBreitWigner.cc index 22149a0ffbf..1f545423eda 100644 --- a/source/externals/clhep/src/RandBreitWigner.cc +++ b/source/externals/clhep/src/RandBreitWigner.cc @@ -278,7 +278,7 @@ void RandBreitWigner::fireArray ( const int size, double* vect, std::ostream & RandBreitWigner::put ( std::ostream & os ) const { - int pr=os.precision(20); + long pr=os.precision(20); std::vector t(2); os << " " << name() << "\n"; os << "Uvec" << "\n"; diff --git a/source/externals/clhep/src/RandChiSquare.cc b/source/externals/clhep/src/RandChiSquare.cc index 11d3523a82f..1a86c9f1390 100644 --- a/source/externals/clhep/src/RandChiSquare.cc +++ b/source/externals/clhep/src/RandChiSquare.cc @@ -138,7 +138,7 @@ double RandChiSquare::genChiSquare( HepRandomEngine *anEngine, } std::ostream & RandChiSquare::put ( std::ostream & os ) const { - int pr=os.precision(20); + long pr=os.precision(20); std::vector t(2); os << " " << name() << "\n"; os << "Uvec" << "\n"; diff --git a/source/externals/clhep/src/RandExponential.cc b/source/externals/clhep/src/RandExponential.cc index 347449bb521..596c562f367 100644 --- a/source/externals/clhep/src/RandExponential.cc +++ b/source/externals/clhep/src/RandExponential.cc @@ -77,7 +77,7 @@ void RandExponential::fireArray( const int size, double* vect, } std::ostream & RandExponential::put ( std::ostream & os ) const { - int pr=os.precision(20); + long pr=os.precision(20); std::vector t(2); os << " " << name() << "\n"; os << "Uvec" << "\n"; diff --git a/source/externals/clhep/src/RandFlat.cc b/source/externals/clhep/src/RandFlat.cc index a6209081dbb..e0ee2bb0c6e 100644 --- a/source/externals/clhep/src/RandFlat.cc +++ b/source/externals/clhep/src/RandFlat.cc @@ -155,7 +155,7 @@ void RandFlat::restoreEngineStatus( const char filename[] ) { } // restoreEngineStatus std::ostream & RandFlat::put ( std::ostream & os ) const { - int pr=os.precision(20); + long pr=os.precision(20); std::vector t(2); os << " " << name() << "\n"; os << "Uvec" << "\n"; @@ -203,7 +203,7 @@ std::istream & RandFlat::get ( std::istream & is ) { std::ostream & RandFlat::saveDistState ( std::ostream & os ) { os << distributionName() << "\n"; - int prec = os.precision(20); + long prec = os.precision(20); os << "RANDFLAT staticRandomInt: " << staticRandomInt << " staticFirstUnusedBit: " << staticFirstUnusedBit << "\n"; os.precision(prec); diff --git a/source/externals/clhep/src/RandGamma.cc b/source/externals/clhep/src/RandGamma.cc index d2beff6894a..f87d3c23699 100644 --- a/source/externals/clhep/src/RandGamma.cc +++ b/source/externals/clhep/src/RandGamma.cc @@ -223,7 +223,7 @@ double RandGamma::genGamma( HepRandomEngine *anEngine, } std::ostream & RandGamma::put ( std::ostream & os ) const { - int pr=os.precision(20); + long pr=os.precision(20); std::vector t(2); os << " " << name() << "\n"; os << "Uvec" << "\n"; diff --git a/source/externals/clhep/src/RandGauss.cc b/source/externals/clhep/src/RandGauss.cc index abb2c08d5b4..28d76eb736b 100644 --- a/source/externals/clhep/src/RandGauss.cc +++ b/source/externals/clhep/src/RandGauss.cc @@ -257,7 +257,7 @@ void RandGauss::restoreEngineStatus( const char filename[] ) { std::ostream & RandGauss::put ( std::ostream & os ) const { os << name() << "\n"; - int prec = os.precision(20); + long prec = os.precision(20); std::vector t(2); os << "Uvec\n"; t = DoubConv::dto2longs(defaultMean); @@ -329,7 +329,7 @@ std::istream & RandGauss::get ( std::istream & is ) { // Static save and restore to/from streams std::ostream & RandGauss::saveDistState ( std::ostream & os ) { - int prec = os.precision(20); + long prec = os.precision(20); std::vector t(2); os << distributionName() << "\n"; os << "Uvec\n"; diff --git a/source/externals/clhep/src/RandGaussQ.cc b/source/externals/clhep/src/RandGaussQ.cc index 122e40ad45b..2ecb413decc 100644 --- a/source/externals/clhep/src/RandGaussQ.cc +++ b/source/externals/clhep/src/RandGaussQ.cc @@ -163,7 +163,7 @@ double RandGaussQ::transformSmall (double r) { } // transformSmall() std::ostream & RandGaussQ::put ( std::ostream & os ) const { - int pr=os.precision(20); + long pr=os.precision(20); os << " " << name() << "\n"; RandGauss::put(os); os.precision(pr); diff --git a/source/externals/clhep/src/RandGeneral.cc b/source/externals/clhep/src/RandGeneral.cc index 18036e3971d..3687cc31f86 100644 --- a/source/externals/clhep/src/RandGeneral.cc +++ b/source/externals/clhep/src/RandGeneral.cc @@ -247,7 +247,7 @@ void RandGeneral::fireArray( const int size, double* vect ) } std::ostream & RandGeneral::put ( std::ostream & os ) const { - int pr=os.precision(20); + long pr=os.precision(20); std::vector t(2); os << " " << name() << "\n"; os << "Uvec" << "\n"; diff --git a/source/externals/clhep/src/RandLandau.cc b/source/externals/clhep/src/RandLandau.cc index b49a7a7f2da..31074fda77f 100644 --- a/source/externals/clhep/src/RandLandau.cc +++ b/source/externals/clhep/src/RandLandau.cc @@ -361,7 +361,7 @@ double RandLandau::transform (double r) { } // transform() std::ostream & RandLandau::put ( std::ostream & os ) const { - int pr=os.precision(20); + long pr=os.precision(20); os << " " << name() << "\n"; os.precision(pr); return os; diff --git a/source/externals/clhep/src/RandPoisson.cc b/source/externals/clhep/src/RandPoisson.cc index dae582a7e51..34b12feb51f 100644 --- a/source/externals/clhep/src/RandPoisson.cc +++ b/source/externals/clhep/src/RandPoisson.cc @@ -281,7 +281,7 @@ void RandPoisson::fireArray(const int size, long* vect, double m1) } std::ostream & RandPoisson::put ( std::ostream & os ) const { - int pr=os.precision(20); + long pr=os.precision(20); std::vector t(2); os << " " << name() << "\n"; os << "Uvec" << "\n"; diff --git a/source/externals/clhep/src/RandPoissonQ.cc b/source/externals/clhep/src/RandPoissonQ.cc index 3247ac9a7cf..007ef63552b 100644 --- a/source/externals/clhep/src/RandPoissonQ.cc +++ b/source/externals/clhep/src/RandPoissonQ.cc @@ -545,7 +545,7 @@ long RandPoissonQ::poissonDeviateSmall (HepRandomEngine * e, double mean) { } // poissonDeviate() std::ostream & RandPoissonQ::put ( std::ostream & os ) const { - int pr=os.precision(20); + long pr=os.precision(20); std::vector t(2); os << " " << name() << "\n"; os << "Uvec" << "\n"; diff --git a/source/externals/clhep/src/RandStudentT.cc b/source/externals/clhep/src/RandStudentT.cc index b15e39287c6..1060c9cb74f 100644 --- a/source/externals/clhep/src/RandStudentT.cc +++ b/source/externals/clhep/src/RandStudentT.cc @@ -140,7 +140,7 @@ double RandStudentT::shoot( HepRandomEngine *anEngine, double a ) { } std::ostream & RandStudentT::put ( std::ostream & os ) const { - int pr=os.precision(20); + long pr=os.precision(20); std::vector t(2); os << " " << name() << "\n"; os << "Uvec" << "\n"; diff --git a/source/externals/clhep/src/RanecuEngine.cc b/source/externals/clhep/src/RanecuEngine.cc index 20041173f83..73601d9a694 100644 --- a/source/externals/clhep/src/RanecuEngine.cc +++ b/source/externals/clhep/src/RanecuEngine.cc @@ -116,7 +116,7 @@ void RanecuEngine::setSeed(long index, int dum) theSeed = seq; HepRandom::getTheTableSeeds(table[seq],seq); theSeeds = &table[seq][0]; - further_randomize (seq, 0, index, shift1); // mf 6/22/10 + further_randomize (seq, 0, (int)index, shift1); // mf 6/22/10 further_randomize (seq, 1, dum, shift2); // mf 6/22/10 } diff --git a/source/externals/clhep/src/Ranlux64Engine.cc b/source/externals/clhep/src/Ranlux64Engine.cc index 8cc585b8758..8ad0fbd4ec5 100644 --- a/source/externals/clhep/src/Ranlux64Engine.cc +++ b/source/externals/clhep/src/Ranlux64Engine.cc @@ -707,9 +707,9 @@ bool Ranlux64Engine::getState (const std::vector & v) { } t[0] = v[25]; t[1] = v[26]; carry = DoubConv::longs2double(t); - index = v[27]; - luxury = v[28]; - pDiscard = v[29]; + index = (int)v[27]; + luxury = (int)v[28]; + pDiscard = (int)v[29]; return true; } diff --git a/source/externals/clhep/src/RanluxEngine.cc b/source/externals/clhep/src/RanluxEngine.cc index 0df9e150170..2fd475fed53 100644 --- a/source/externals/clhep/src/RanluxEngine.cc +++ b/source/externals/clhep/src/RanluxEngine.cc @@ -537,12 +537,12 @@ bool RanluxEngine::getState (const std::vector & v) { for (int i=0; i<24; ++i) { float_seed_table[i] = v[i+1]*mantissa_bit_24(); } - i_lag = v[25]; - j_lag = v[26]; + i_lag = (int)v[25]; + j_lag = (int)v[26]; carry = v[27]*mantissa_bit_24(); - count24 = v[28]; - luxury = v[29]; - nskip = v[30]; + count24 = (int)v[28]; + luxury = (int)v[29]; + nskip = (int)v[30]; return true; } diff --git a/source/externals/clhep/src/RanluxppEngine.cc b/source/externals/clhep/src/RanluxppEngine.cc index 1ce9272bbcc..e4a4bc646b6 100644 --- a/source/externals/clhep/src/RanluxppEngine.cc +++ b/source/externals/clhep/src/RanluxppEngine.cc @@ -165,7 +165,7 @@ void RanluxppEngine::skip(uint64_t n) { n -= left; // Need to advance and possibly skip over blocks. int nPerState = kMaxPos / kBits; - int skip = (n / nPerState); + int skip = int(n / nPerState); uint64_t a_skip[9]; powermod(kA_2048, a_skip, skip + 1); @@ -176,7 +176,7 @@ void RanluxppEngine::skip(uint64_t n) { to_ranlux(lcg, fState, fCarry); // Potentially skip numbers in the freshly generated block. - int remaining = n - skip * nPerState; + int remaining = int(n - skip * nPerState); assert(remaining >= 0 && "should not end up at a negative position!"); fPosition = remaining * kBits; assert(fPosition <= kMaxPos && "position out of range!"); @@ -297,8 +297,8 @@ bool RanluxppEngine::getState(const std::vector &v) { uint64_t upper = v[2 * i + 2]; fState[i] = (upper << 32) + lower; } - fCarry = v[19]; - fPosition = v[20]; + fCarry = (unsigned int)v[19]; + fPosition = (int)v[20]; return true; } diff --git a/source/externals/clhep/src/RanshiEngine.cc b/source/externals/clhep/src/RanshiEngine.cc index f1d5f46cfed..3bb679ed001 100644 --- a/source/externals/clhep/src/RanshiEngine.cc +++ b/source/externals/clhep/src/RanshiEngine.cc @@ -344,11 +344,11 @@ bool RanshiEngine::getState (const std::vector & v) { return false; } for (int i = 0; i < numBuff; ++i) { - buffer[i] = v[i+1]; + buffer[i] = (unsigned int)v[i+1]; } - redSpin = v[numBuff+1]; - numFlats = v[numBuff+2]; - halfBuff = v[numBuff+3]; + redSpin = (unsigned int)v[numBuff+1]; + numFlats = (unsigned int)v[numBuff+2]; + halfBuff = (unsigned int)v[numBuff+3]; return true; } diff --git a/source/externals/clhep/src/engineIDulong.cc b/source/externals/clhep/src/engineIDulong.cc index 64da11c028e..69805384d06 100644 --- a/source/externals/clhep/src/engineIDulong.cc +++ b/source/externals/clhep/src/engineIDulong.cc @@ -36,8 +36,8 @@ static std::vector gen_crc_table() { unsigned long crc32ul(const std::string & s) { static const std::vector crc_table = gen_crc_table(); unsigned long crc = 0; - int end = s.length(); - for (int j = 0; j != end; ++j) { + unsigned long end = s.length(); + for (unsigned long j = 0; j != end; ++j) { int i = ( (int) ( crc >> 24) ^ s[j] ) & 0xff; crc = ( ( crc << 8 ) ^ crc_table[i] ) & 0xffffffffUL; } diff --git a/source/externals/expat/GNUmakefile b/source/externals/expat/GNUmakefile deleted file mode 100644 index d7509437797..00000000000 --- a/source/externals/expat/GNUmakefile +++ /dev/null @@ -1,20 +0,0 @@ -# ------------------------------------------------------------- -# Geant4 GNUmakefile for expat. Gunter Folger 12-April-2011 - -name := G4expat - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -ifeq ($(G4SYSTEM),WIN32-VC) # Windows - #orig /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_LIB" /D "COMPILED_FROM_DSP" /D "XML_UNICODE_WCHAR_T" /D "_VC80_UPGRADE=0x0600" /D "_MBCS" /FD /EHsc /RTC1 /MTd /Fp".\..\win32\tmp\Debug-w_static/expatw_static.pch" - - CPPFLAGS += -DWIN32 -D_WINDOWS -D_LIB -DCOMPILED_FROM_DSP -DXML_UNICODE_WCHAR_T -D_VC80_UPGRADE=0x0600 -D_MBCS -else # Linux, Mac - CPPFLAGS += -DHAVE_EXPAT_CONFIG_H -Isrc -endif - -include $(G4INSTALL)/config/common.gmk diff --git a/source/externals/g4tools/GNUmakefile b/source/externals/g4tools/GNUmakefile deleted file mode 100644 index aafdd43e3ae..00000000000 --- a/source/externals/g4tools/GNUmakefile +++ /dev/null @@ -1,13 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for analysis/g4tools sub-library. -# -------------------------------------------------------------------- - -name := G4tools - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -include $(G4INSTALL)/config/common.gmk diff --git a/source/externals/g4tools/History b/source/externals/g4tools/History index f68118b012f..755f8ba8e3a 100644 --- a/source/externals/g4tools/History +++ b/source/externals/g4tools/History @@ -6,6 +6,34 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-06-15 Gabriele Cosmo (g4tools-V11-01-04) +- Fixed compilation warning for implicit type conversions on macOS/XCode 14.1 + in toolsx/Xt/zb_viewer. + +## 2023-05-29 Guy Barrand (g4tools-V11-01-03) +- toolx/Qt: zb_viewer, pixwin, session, s2q: have a Qt viewer for the tools/zbuffer rendering. +- toolx/Xt: zb_viewer, ImageArea, session: have a Xt viewer for the tools/zbuffer rendering. +- toolx/X11: zb_viewer, pixwin, colors, base_session: have a X11 viewer for the tools/zbuffer rendering. +- toolx/Windows: zb_viewer, pixwin, ession: have a Windows viewer for the tools/zbuffer rendering. +- tools/sg/zb_viewer: generic code used by the upper zb_viewer doing the connection with a windowing system. +- tools: sg/zb_action, sg/write_paper, mat4f, buffer, mat4: modifications used by the upper files. +- tools: zb/buffer: optimizations. In particular by avoiding the usage of the point_writer class (now removed). + +## 2023-04-13 Guy Barrand (g4tools-V11-01-02) +- toolx/Xt/session: quiet coverity: remove unused field m_app_owner. +- toolx/sg/GL_manager: quiet coverity: remove unused field m_gsto_on_cardsy. +- toolx/sg/gl: quiet coverity: in gl_dump_if_errors(), avoid to set the std::hex format on arg a_out. Have a local std::ostringstream. +- tools/version: pass to 6.1.2. + +## 2023-01-18 Guy Barrand (g4tools-V11-01-01) +- toolx/Qt/glarea: handle Qt6. +- toolx/Qt/glarea: for Qt5, Qt6: in paintGL(), use devicePixelRatio() to set the size of the toolx::sg::GL_viewer. + +## 2023-01-16 Guy Barrand (g4tools-V11-01-00) +- tools/ccontour: intel-icx: fix compilation warnings about argument of type 'double[]' with mismatched bound. +- tools/rcsv_histo: coverity: quiet coverity about some "Unchecked return value (CHECKED_RETURN)". +- tools/version: pass to 6.1.1. + ## 2022-11-25 Gabriele Cosmo (g4tools-V11-00-13) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1 in files: spline, THistogram and zlib. diff --git a/source/externals/g4tools/History_tools b/source/externals/g4tools/History_tools index 7f6e93c2bc7..e2bd5317dc1 100644 --- a/source/externals/g4tools/History_tools +++ b/source/externals/g4tools/History_tools @@ -1,3 +1,24 @@ +6.2.0: +- toolx/Qt: zb_viewer, pixwin, session, s2q: have a Qt viewer for the tools/zbuffer rendering. +- toolx/Xt: zb_viewer, ImageArea, session: have a Xt viewer for the tools/zbuffer rendering. +- toolx/X11: zb_viewer, pixwin, colors, base_session: have a X11 viewer for the tools/zbuffer rendering. +- toolx/Windows: zb_viewer, pixwin, ession: have a Windows viewer for the tools/zbuffer rendering. +- tools/sg/zb_viewer: generic code used by the upper zb_viewer doing the connection with a windowing system. +- tools: sg/zb_action, sg/write_paper, mat4f, buffer, mat4: modifications used by the upper files. +- tools: zb/buffer: optimizations. In particular by avoiding the usage of the point_writer class (now removed). + +- toolx/Xt/session: quiet coverity: remove unused field m_app_owner. +- toolx/sg/GL_manager: quiet coverity: remove unused field m_gsto_on_cardsy. +- toolx/sg/gl: quiet coverity: in gl_dump_if_errors(), avoid to set the std::hex format on arg a_out. Have a local std::ostringstream. +- tools/version: pass to 6.2.0. + +6.1.1: +- toolx/Qt/glarea: handle Qt6. +- toolx/Qt/glarea: for Qt5, Qt6: in paintGL(), use devicePixelRatio() to set the size of the toolx::sg::GL_viewer. +- tools/ccontour: intel-icx: fix compilation warnings about argument of type 'double[]' with mismatched bound. +- tools/rcsv_histo: coverity: quiet coverity about some "Unchecked return value (CHECKED_RETURN)". +- tools/version: pass to 6.1.1. + 6.1.0: - tools/fpng, fpng.icc: a pure header, thread safe, png writer. - tools/toojpeg, toojpeg.icc: a pure header, thread safe, jpeg writer. diff --git a/source/externals/g4tools/include/tools/ccontour b/source/externals/g4tools/include/tools/ccontour index c1af5051783..59f508ffe71 100644 --- a/source/externals/g4tools/include/tools/ccontour +++ b/source/externals/g4tools/include/tools/ccontour @@ -632,7 +632,7 @@ inline void ccontour::set_secondary_grid(int iCol, int iRow) m_iRowSec=mx(iRow,2); } -inline void ccontour::set_limits(double pLimits[]) +inline void ccontour::set_limits(double pLimits[4]) { _ASSERT_(pLimits[0] dummy;} }; diff --git a/source/externals/g4tools/include/tools/lina/mat4f b/source/externals/g4tools/include/tools/lina/mat4f index 061e7bc7f0c..fb593501e0f 100644 --- a/source/externals/g4tools/include/tools/lina/mat4f +++ b/source/externals/g4tools/include/tools/lina/mat4f @@ -56,9 +56,12 @@ public: public: //backward compatibility void mul_2f(float& a_x,float& a_y) const {parent::mul_2(a_x,a_y);} void mul_3f(float& a_x,float& a_y,float& a_z) const {parent::mul_3(a_x,a_y,a_z);} + void mul_3f_opt(float& a_x,float& a_y,float& a_z,float a_tmp[3]) const {parent::mul_3_opt(a_x,a_y,a_z,a_tmp);} void mul_dir_3f(float& a_x,float& a_y,float& a_z) const {parent::mul_dir_3(a_x,a_y,a_z);} + void mul_dir_3f_opt(float& a_x,float& a_y,float& a_z,float a_tmp[3]) const {parent::mul_dir_3_opt(a_x,a_y,a_z,a_tmp);} void mul_trans_3f(float& a_x,float& a_y,float& a_z) const {parent::mul_trans_3(a_x,a_y,a_z);} void mul_4f(float& a_x,float& a_y,float& a_z,float& a_w) const {parent::mul_4(a_x,a_y,a_z,a_w);} + void mul_4f_opt(float& a_x,float& a_y,float& a_z,float& a_w,float a_tmp[4]) const {parent::mul_4_opt(a_x,a_y,a_z,a_w,a_tmp);} void mul_dir_3d(double& a_x,double& a_y,double& a_z) const { //used in sg::healpix float x = float(a_x); float y = float(a_y); diff --git a/source/externals/g4tools/include/tools/rcsv_histo b/source/externals/g4tools/include/tools/rcsv_histo index 79c7648312b..0fa0beb8203 100644 --- a/source/externals/g4tools/include/tools/rcsv_histo +++ b/source/externals/g4tools/include/tools/rcsv_histo @@ -118,7 +118,10 @@ public: a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl; return false; } - to(_words[1],hdata.m_dimension); + if(!to(_words[1],hdata.m_dimension)) { + a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl; + return false; + } } else if(_words[0]=="#annotation") { if(_words.size()<2) { a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl; @@ -200,7 +203,10 @@ public: a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl; return false; } - to(_words[1],hdata.m_bin_number); + if(!to(_words[1],hdata.m_bin_number)) { + a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl; + return false; + } } else if(_words[0]=="#cut_v") { if(_words.size()!=2) { a_out << "tools::rcsv::histo::read : syntax error in " << sout(line) << std::endl; diff --git a/source/externals/g4tools/include/tools/sg/write_paper b/source/externals/g4tools/include/tools/sg/write_paper index 9eae4a9754a..607598037d0 100644 --- a/source/externals/g4tools/include/tools/sg/write_paper +++ b/source/externals/g4tools/include/tools/sg/write_paper @@ -125,19 +125,16 @@ inline bool write_paper(std::ostream& a_out, return false; } - size_t sz; - unsigned char* buffer = action.get_rgbas(sz,a_top_to_bottom); - if(!buffer) { + std::vector buffer; + if(!action.get_rgbas(a_top_to_bottom,buffer)) { a_out << "tools::sg::write_paper : can't get rgba image." << std::endl; return false; } - if(!a_png_writer(a_out,a_file,buffer,a_width,a_height,4)) { + if(!a_png_writer(a_out,a_file,vec_data(buffer),a_width,a_height,4)) { a_out << "tools::sg::write_paper : tools::png::write() failed." << std::endl; - delete [] buffer; return false; } - delete [] buffer; return true; } @@ -148,19 +145,16 @@ inline bool write_paper(std::ostream& a_out, return false; } - size_t sz; - unsigned char* buffer = action.get_rgbs(sz,a_top_to_bottom); - if(!buffer) { + std::vector buffer; + if(!action.get_rgbs(a_top_to_bottom,buffer)) { a_out << "tools::sg::write_paper : can't get rgb image." << std::endl; return false; } - if(!a_jpeg_writer(a_out,a_file,buffer,a_width,a_height,3,100)) { + if(!a_jpeg_writer(a_out,a_file,vec_data(buffer),a_width,a_height,3,100)) { a_out << "tools::sg::write_paper : tools::jpeg::write() failed." << std::endl; - delete [] buffer; return false; } - delete [] buffer; return true; } diff --git a/source/externals/g4tools/include/tools/sg/zb_action b/source/externals/g4tools/include/tools/sg/zb_action index 555fb13036b..d2120d3560e 100644 --- a/source/externals/g4tools/include/tools/sg/zb_action +++ b/source/externals/g4tools/include/tools/sg/zb_action @@ -250,8 +250,6 @@ protected: return *this; } public: - void reset() {} - void clear_color_buffer(float a_r,float a_g,float a_b,float a_a){ clear_color(a_r,a_g,a_b,a_a); } @@ -269,60 +267,114 @@ protected: public: zb::buffer::ZPixel* get_color_buffer(unsigned int& a_width,unsigned int& a_height) const {return m_zb.get_color_buffer(a_width,a_height);} - unsigned char* get_rgbas(size_t& a_sz,bool a_top_to_bottom = true) { - if(!m_ww || !m_wh) {a_sz = 0;return 0;} - a_sz = 4 * m_ww * m_wh; - uchar* rgbas = new uchar[a_sz]; - if(!rgbas) {a_sz = 0;return 0;} - uchar* pos = rgbas; + bool get_rgbs(bool a_top_to_bottom,std::vector& a_buffer) { + a_buffer.clear(); + if(!m_ww || !m_wh) return false; + size_t sz = 3 * m_ww * m_wh; + a_buffer.resize(sz); + uchar* pos = vec_data(a_buffer); zb::buffer::ZPixel pix; uchar* _pix = 0; for(unsigned int row=0;row& a_buffer) { + a_buffer.clear(); + if(!m_ww || !m_wh) return false; + size_t sz = 4 * m_ww * m_wh; + a_buffer.resize(sz); + if(a_top_to_bottom) { + ::memcpy(vec_data(a_buffer),m_zb.zimage(),sz); + return true; + } + size_t stride = m_ww*4; + uchar* zpos = ((uchar*)m_zb.zimage())+sz-stride; + uchar* pos = vec_data(a_buffer); + for(unsigned int row=0;row& a_buffer) { + a_buffer.clear(); + if(!m_ww || !m_wh) return false; + if(!a_factor) return false; + size_t bpp = 4; + a_buffer.resize(a_factor* m_ww * a_factor * m_wh * bpp); + uchar* zbuffer = (uchar*)m_zb.zimage(); + uchar* abuffer = vec_data(a_buffer); + size_t zstride = m_ww*bpp; + size_t astride = a_factor*m_ww*bpp; + size_t i,j,ar,ac,ipix; + uchar* zpos;uchar* apos; + for(j=0;j& a_buffer) { + a_buffer.clear(); + if(!m_ww || !m_wh) return false; + size_t sz = 4 * m_ww * m_wh; + a_buffer.resize(sz); + if(a_top_to_bottom) { + uchar* pos = vec_data(a_buffer); + uchar* zpos = ((uchar*)m_zb.zimage()); + for(size_t count=0;countm_zb.get_clipped_pixel(a_col,rzb->wh()-1-a_row,pix)){ - rzb->out() << "tools::sg;:zb_action::get_rgba : can't get zbuffer pixel" << std::endl; - a_r = 1; - a_g = 0; - a_b = 0; - a_a = 1; - return false; - } - zb::buffer::pix2rgba(pix,a_r,a_g,a_b,a_a); - return true; - } - protected: void set_normal_matrix() { mat4f tmp(m_model); @@ -366,8 +403,8 @@ protected: bool project_point(float& a_x,float& a_y,float& a_z,float& a_w) { a_w = 1; - m_model.mul_4f(a_x,a_y,a_z,a_w); - m_proj.mul_4f(a_x,a_y,a_z,a_w); + m_model.mul_4f_opt(a_x,a_y,a_z,a_w,m_tmp); + m_proj.mul_4f_opt(a_x,a_y,a_z,a_w,m_tmp); if(a_w==0) return false; a_x /= a_w; a_y /= a_w; @@ -386,19 +423,18 @@ protected: return m_this.project_point(a_x,a_y,a_z,a_w); } virtual bool add_point(float a_x,float a_y,float a_z,float) { - return _add_point(a_x,a_y,a_z,m_this.m_rgba); + return _add_point(a_x,a_y,a_z,m_this.m_rgba.r(),m_this.m_rgba.g(),m_this.m_rgba.b(),m_this.m_rgba.a()); } virtual bool add_point(float a_x,float a_y,float a_z,float, float a_r,float a_g,float a_b,float a_a) { - colorf c(a_r,a_g,a_b,a_a); - return _add_point(a_x,a_y,a_z,c); + return _add_point(a_x,a_y,a_z,a_r,a_g,a_b,a_a); } virtual bool add_line(float a_bx,float a_by,float a_bz,float, float a_ex,float a_ey,float a_ez,float) { - m_this.m_vp_mtx.mul_3f(a_bx,a_by,a_bz); - m_this.m_vp_mtx.mul_3f(a_ex,a_ey,a_ez); + m_this.m_vp_mtx.mul_3f_opt(a_bx,a_by,a_bz,m_tmp); + m_this.m_vp_mtx.mul_3f_opt(a_ex,a_ey,a_ez,m_tmp); a_bz *= -1; a_ez *= -1; @@ -422,8 +458,8 @@ protected: float a_br,float a_bg,float a_bb,float a_ba, float a_ex,float a_ey,float a_ez,float, float,float,float,float) { - m_this.m_vp_mtx.mul_3f(a_bx,a_by,a_bz); - m_this.m_vp_mtx.mul_3f(a_ex,a_ey,a_ez); + m_this.m_vp_mtx.mul_3f_opt(a_bx,a_by,a_bz,m_tmp); + m_this.m_vp_mtx.mul_3f_opt(a_ex,a_ey,a_ez,m_tmp); a_bz *= -1; a_ez *= -1; @@ -598,18 +634,18 @@ protected: return num_2; } - bool _add_point(float a_x,float a_y,float a_z,const colorf& a_color){ + bool _add_point(float a_x,float a_y,float a_z,float a_r,float a_g,float a_b,float a_a){ m_this.m_zb.set_depth_test(m_this.m_DEPTH_TEST); m_this.m_zb.set_blend(m_this.m_blend); - m_this.m_vp_mtx.mul_3f(a_x,a_y,a_z); + m_this.m_vp_mtx.mul_3f_opt(a_x,a_y,a_z,m_tmp); a_z *= -1; zb::point p; zinit(p,a_x,a_y,a_z); zb::buffer::ZPixel pix; - color2pix(a_color,pix); + zb::buffer::rgba2pix(a_r,a_g,a_b,a_a,pix); m_this.m_zb.draw_point(p,pix,npix(m_this.m_point_size)); return true; @@ -627,9 +663,9 @@ protected: float p2x = a_p2x;float p2y = a_p2y;float p2z = a_p2z;//float p2w = a_p2w; float p3x = a_p3x;float p3y = a_p3y;float p3z = a_p3z;//float p3w = a_p3w; - m_this.m_vp_mtx.mul_3f(p1x,p1y,p1z); - m_this.m_vp_mtx.mul_3f(p2x,p2y,p2z); - m_this.m_vp_mtx.mul_3f(p3x,p3y,p3z); + m_this.m_vp_mtx.mul_3f_opt(p1x,p1y,p1z,m_tmp); + m_this.m_vp_mtx.mul_3f_opt(p2x,p2y,p2z,m_tmp); + m_this.m_vp_mtx.mul_3f_opt(p3x,p3y,p3z,m_tmp); p1z *= -1; p2z *= -1; p3z *= -1; @@ -688,7 +724,7 @@ protected: float ny = (a_n1y+a_n2y+a_n3y)/3.0f; float nz = (a_n1z+a_n2z+a_n3z)/3.0f; - m_this.m_normal_matrix.mul_dir_3f(nx,ny,nz); + m_this.m_normal_matrix.mul_dir_3f_opt(nx,ny,nz,m_tmp); vec3f _normal(nx,ny,nz);_normal.normalize(); @@ -721,6 +757,8 @@ protected: } protected: zb_action& m_this; + private: //optimize: + float m_tmp[3]; }; protected: @@ -748,6 +786,8 @@ protected: bool m_light_on; bool m_DEPTH_TEST; bool m_blend; +private: //optimize: + float m_tmp[4]; }; }} diff --git a/source/externals/g4tools/include/tools/sg/zb_viewer b/source/externals/g4tools/include/tools/sg/zb_viewer new file mode 100644 index 00000000000..eae6e628150 --- /dev/null +++ b/source/externals/g4tools/include/tools/sg/zb_viewer @@ -0,0 +1,103 @@ +// Copyright (C) 2010, Guy Barrand. All rights reserved. +// See the file tools.license for terms. + +#ifndef tools_sg_zb_viewer +#define tools_sg_zb_viewer + +#include "zb_action" +#include "viewer" + +namespace tools { +namespace sg { + +class zb_viewer : public viewer { + TOOLS_HEADER(zb_viewer,tools::sg::zb_viewer,viewer) +public: + zb_viewer(std::ostream& a_out,unsigned int a_width,unsigned int a_height) + :parent(a_out,a_width,a_height) + ,m_mgr_gra() + ,m_out_buffer_what(get_rgbs) + {} + virtual ~zb_viewer(){ + //WARNING : nodes may refer m_mgr_gra (to handle gstos/texs), then + // we have to delete them first. + m_sg.clear(); + } +public: + zb_viewer(const zb_viewer& a_from) + :parent(a_from) + ,m_mgr_gra(a_from.m_mgr_gra) + ,m_out_buffer_what(get_rgbs) + {} + zb_viewer& operator=(const zb_viewer& a_from){ + parent::operator=(a_from); + m_mgr_gra = a_from.m_mgr_gra; + m_out_buffer_what = get_rgbs; + m_out_buffer.clear(); + return *this; + } +public: + enum get_what { + get_rgbs = 0, + get_rgbas, + get_bgras + }; + bool render(get_what a_what,bool a_top_to_bottom) { + m_out_buffer.clear(); + if(!m_ww) return false; + if(!m_wh) return false; + + zb_action action(m_mgr_gra,m_out,m_ww,m_wh); + action.clear_color_buffer(m_clear_color.r(),m_clear_color.g(),m_clear_color.b(),m_clear_color.a()); + action.clear_depth_buffer(); + action.set_do_transparency(false); + action.set_have_to_do_transparency(false); + m_sg.render(action); + if(!action.end()) { //check that matrices stack are ok. + m_out << "tools::sg::zb_viewer: bad zb_action end." << std::endl; + return false; + } else { + if(action.have_to_do_transparency()) { + action.set_do_transparency(true); + m_sg.render(action); + if(!action.end()) { //check that matrices stack are ok. + m_out << "tools::sg::zb_viewer: bad zb_action end." << std::endl; + return false; + } + } + } + + m_out_buffer_what = a_what; + bool status = false; + switch(a_what) { + case get_rgbs: + status = action.get_rgbs(a_top_to_bottom,m_out_buffer); + break; + case get_rgbas: + status = action.get_rgbas(a_top_to_bottom,m_out_buffer); + break; + case get_bgras: + status = action.get_bgras(a_top_to_bottom,m_out_buffer); + break; + }\ + if(!status) { + m_out << "tools::sg::zb_viewer::render() : can't get rgb image." << std::endl; + m_out_buffer.clear(); + return false; + } + /*m_out << "size " << m_out_buffer.size() << std::endl;*/ + return true; + } + + const std::vector& out_buffer() const {return m_out_buffer;} + void out_buffer_clear() {m_out_buffer.clear();} + +protected: + zb_manager m_mgr_gra; + get_what m_out_buffer_what; + std::vector m_out_buffer; +}; + +}} + +#endif diff --git a/source/externals/g4tools/include/tools/version b/source/externals/g4tools/include/tools/version index 56386f85f74..390d6117a1b 100644 --- a/source/externals/g4tools/include/tools/version +++ b/source/externals/g4tools/include/tools/version @@ -5,13 +5,13 @@ #define tools_version #define TOOLS_MAJOR_VERSION 6 -#define TOOLS_MINOR_VERSION 1 +#define TOOLS_MINOR_VERSION 2 #define TOOLS_PATCH_VERSION 0 -#define TOOLS_VERSION "6.1.0" -#define TOOLS_VERSION_VRP "v6r1p0" +#define TOOLS_VERSION "6.2.0" +#define TOOLS_VERSION_VRP "v6r2p0" namespace tools { -inline unsigned int version() {return 60100;} +inline unsigned int version() {return 60200;} } #endif diff --git a/source/externals/g4tools/include/tools/zb/buffer b/source/externals/g4tools/include/tools/zb/buffer index e6aab37f013..662e4df0ba5 100644 --- a/source/externals/g4tools/include/tools/zb/buffer +++ b/source/externals/g4tools/include/tools/zb/buffer @@ -39,105 +39,35 @@ protected: ZPixel m_pixel; }; - class point_writer : public virtual writer { - public: - virtual void write(ZPos a_x,ZPos a_y,ZZ a_z) { - if(m_size>=1) { //see zb_action::npix(). - ZPos x,y; - for(int i=-int(m_size);i<=int(m_size);i++) { - x = a_x + i; - for(int j=-int(m_size);j<=int(m_size);j++) { - y = a_y + j; - _write(x,y,a_z); - } - } - } else { - _write(a_x,a_y,a_z); - } - } - public: - point_writer(ZPixel a_pixel,buffer& a_buffer,unsigned int a_size) - :writer(a_pixel) - ,m_buffer(a_buffer) - ,m_size(a_size) - {} - virtual ~point_writer(){} - public: - point_writer(const point_writer& a_from) - :writer(a_from) - ,m_buffer(a_from.m_buffer) - ,m_size(a_from.m_size) - {} - point_writer& operator=(const point_writer& a_from){ - writer::operator=(a_from); - m_size = a_from.m_size; - return *this; - } - protected: - void _write(ZPos a_x,ZPos a_y,ZZ a_z) { - if((a_xm_buffer.m_endX)) return; - if((a_ym_buffer.m_endY)) return; + void _write_point(ZPos a_x,ZPos a_y,ZZ a_z,ZPixel a_pixel) { + if((a_xm_endX)) return; + if((a_ym_endY)) return; - ZReal zpoint = (ZReal)a_z; - unsigned long offset = a_y * m_buffer.m_zbw + a_x; - ZReal* zbuff = m_buffer.m_zbuffer + offset; + ZReal zpoint = (ZReal)a_z; + unsigned long offset = a_y * m_zbw + a_x; + ZReal* zbuff = m_zbuffer + offset; - if(m_buffer.m_depth_test) {if(zpoint<*zbuff) return;} + if(m_depth_test) {if(zpoint<*zbuff) return;} - ZPixel* zimage = m_buffer.m_zimage + offset; + ZPixel* zimage = m_zimage + offset; - *zbuff = zpoint; - m_buffer.blend(*zimage,m_pixel); - } - protected: - buffer& m_buffer; - unsigned int m_size; - }; - -/* - class edge_point_writer : public virtual writer { - public: - virtual void write(ZPos a_x,ZPos a_y,ZZ) { - if((a_xm_buffer.m_endX)) return; - if((a_ym_buffer.m_endY)) return; - - // Computing must be the same as in WriteScanLine routine. - ZReal zpoint = - (ZReal)(- m_buffer.m_planeDC - - m_buffer.m_planeAC * a_x - - m_buffer.m_planeBC * a_y); - - // for edge plane quite perpandicular to screen - //if((zpointm_buffer.m_zmax)) return; - - unsigned long offset = a_y * m_buffer.m_zbw + a_x; - ZReal* zbuff = m_buffer.m_zbuffer + offset; - - if(m_buffer.m_depth_test) {if(zpoint<*zbuff) return;} - - ZPixel* zimage = m_buffer.m_zimage + offset; - *zbuff = zpoint; - *zimage = m_pixel; - } - public: - edge_point_writer(ZPixel a_pixel,buffer& a_buffer) - :writer(a_pixel) - ,m_buffer(a_buffer) - {} - virtual ~edge_point_writer(){} - public: - edge_point_writer(const edge_point_writer& a_from) - :writer(a_from) - ,m_buffer(a_from.m_buffer) - {} - edge_point_writer& operator=(const edge_point_writer& a_from){ - writer::operator=(a_from); - return *this; + *zbuff = zpoint; + blend(*zimage,a_pixel); + } + void write_point(ZPos a_x,ZPos a_y,ZZ a_z,unsigned int a_size,ZPixel a_pixel) { + if(a_size>=1) { //see zb_action::npix(). + ZPos x,y; + for(int i=-int(a_size);i<=int(a_size);i++) { + x = a_x + i; + for(int j=-int(a_size);j<=int(a_size);j++) { + y = a_y + j; + _write_point(x,y,a_z,a_pixel); + } + } + } else { + _write_point(a_x,a_y,a_z,a_pixel); } - protected: - buffer& m_buffer; - }; -*/ + } public: buffer() @@ -203,17 +133,6 @@ public: return false; } - // Init buffer done by further call to ZBufferErase. - /* - unsigned int size = m_zbw * m_zbh; - ZReal* zbuffer = m_zbuffer; - ZPixel* zimage = m_zimage; - for(unsigned int count=0;countm_endX)) {a_pixel = 0;return false;} if((a_ym_endY)) {a_pixel = 0;return false;} @@ -270,34 +191,29 @@ public: } void draw_point(const point& a_p,ZPixel a_pixel,unsigned int a_size){ - point_writer pw(a_pixel,*this,a_size); - pw.write(a_p.x,a_p.y,a_p.z); + write_point(a_p.x,a_p.y,a_p.z,a_size,a_pixel); } void draw_line(const point& a_beg,const point& a_end,ZPixel a_pixel,unsigned int a_size){ - point_writer pw(a_pixel,*this,a_size); - WriteLine(a_beg,a_end,pw); + WriteLine(a_beg,a_end,a_size,a_pixel); } void draw_lines(int a_number,const point* a_list,ZPixel a_pixel,unsigned int a_size){ - point_writer pw(a_pixel,*this,a_size); for(int count=1;count0) - ScanLine ( a_beg.y, a_beg.x,a_beg.z, dy, dx, dz,sw2); - else - ScanLine ( a_end.y, a_end.x,a_end.z,-dy, dx,-dz,sw2); - - } else if(dx>0) { - if((0<=dy) && (dy<=dx)) /*1*/ - ScanLine ( a_beg.x, a_beg.y,a_beg.z, dx, dy, dz,sw1); - else if(dx*a_func)(a_x,a_y,a_z,beg,a_size,a_pixel); while(a_x*a_func)(a_x,a_y,a_z,beg,a_size,a_pixel); } } else if(a_dy==a_dx) { - a_proc.write(a_x,a_y,a_z,beg); + (this->*a_func)(a_x,a_y,a_z,beg,a_size,a_pixel); while(a_x*a_func)(a_x,a_y,a_z,beg,a_size,a_pixel); } } else { ZPos d = 2 * a_dy - a_dx; ZPos incrE = 2 * a_dy; ZPos incrNE = 2 * ( a_dy - a_dx); - a_proc.write(a_x,a_y,a_z,beg); + (this->*a_func)(a_x,a_y,a_z,beg,a_size,a_pixel); while(a_x*a_func)(a_x,a_y,a_z,beg,a_size,a_pixel); } } } + void WriteLine(const point& a_beg, + const point& a_end, + unsigned int a_size,ZPixel a_pixel){ + ZPos dx = a_end.x - a_beg.x; + ZPos dy = a_end.y - a_beg.y; + ZZ dz = a_end.z - a_beg.z; + + // 6 2 + // 5 1 + // 7 3 + // 8 4 + + if( (dx==0) && (dy==0) ) { + write_point(a_beg.x,a_beg.y,a_beg.z,a_size,a_pixel); + write_point(a_end.x,a_end.y,a_end.z,a_size,a_pixel); + + } else if(dx==0) { + if(dy>0) + ScanLine ( a_beg.y, a_beg.x,a_beg.z, dy, dx, dz, a_size,a_pixel,&buffer::scan_write_point_2); + else + ScanLine ( a_end.y, a_end.x,a_end.z,-dy, dx,-dz, a_size,a_pixel,&buffer::scan_write_point_2); + + } else if(dx>0) { + if((0<=dy) && (dy<=dx)) /*1*/ + ScanLine ( a_beg.x, a_beg.y,a_beg.z, dx, dy, dz, a_size,a_pixel,&buffer::scan_write_point_1); + else if(dx //For QT_VERSION. + +#if QT_VERSION < 0x060000 #include +#else +#include +#endif + #include #include +#ifdef TOOLS_MEM +#include +#endif namespace toolx { namespace Qt { -class glarea : public QGLWidget { +class glarea +#if QT_VERSION < 0x060000 +:public QGLWidget +#else +:public QOpenGLWidget +#endif +{ +#if QT_VERSION < 0x060000 typedef QGLWidget parent; -public: - virtual void initialieGL() {} - virtual void resizeGL(int a_w,int a_h){ - //::printf("debug : resize : %d %d\n",a_w,a_h); -#if QT_VERSION < 0x050000 #else - m_width = a_w; - m_height = a_h; + using parent = QOpenGLWidget; #endif - } - //virtual void paintGL(); + TOOLS_SCLASS(toolx::Qt::glarea) +public: + virtual void initializeGL() {} virtual void paintGL() { #if QT_VERSION < 0x050000 - //::printf("debug : toolx::Qt::glarea::paintGL %d %d\n",width(),height()); m_viewer.set_size(width(),height()); #else - //::printf("debug : toolx::Qt::glarea::paintGL %d %d\n",m_width,m_height); - m_viewer.set_size(m_width,m_height); + m_viewer.set_size(devicePixelRatio()*width(),devicePixelRatio()*height()); #endif m_viewer.render(); } virtual void keyPressEvent(QKeyEvent* a_event) { if(!m_interactor) return; - tools::sg::key_down_event event(convert(a_event->key())); - m_interactor->key_press(event); + tools::sg::key_down_event _event(convert_key(a_event->key())); + m_interactor->key_press(_event); } virtual void keyReleaseEvent(QKeyEvent* a_event) { if(!m_interactor) return; - tools::sg::key_up_event event(convert(a_event->key())); - m_interactor->key_release(event); + tools::sg::key_up_event _event(convert_key(a_event->key())); + m_interactor->key_release(_event); } virtual void mousePressEvent(QMouseEvent* a_event) { if(!m_interactor) return; - tools::sg::mouse_down_event event(a_event->x(),a_event->y()); - m_interactor->mouse_press(event); +#if QT_VERSION < 0x060000 + tools::sg::mouse_down_event _event(a_event->x(),a_event->y()); +#else + tools::sg::mouse_down_event _event(a_event->position().x(),a_event->position().y()); +#endif + m_interactor->mouse_press(_event); } virtual void mouseReleaseEvent(QMouseEvent* a_event) { if(!m_interactor) return; - tools::sg::mouse_up_event event(a_event->x(),a_event->y()); - m_interactor->mouse_release(event); +#if QT_VERSION < 0x060000 + tools::sg::mouse_up_event _event(a_event->x(),a_event->y()); +#else + tools::sg::mouse_up_event _event(a_event->position().x(),a_event->position().y()); +#endif + m_interactor->mouse_release(_event); } virtual void mouseMoveEvent(QMouseEvent* a_event) { if(!m_interactor) return; - tools::sg::mouse_move_event event(a_event->x(),a_event->y(),0,0,false); - m_interactor->mouse_move(event); +#if QT_VERSION < 0x060000 + tools::sg::mouse_move_event _event(a_event->x(),a_event->y(),0,0,false); +#else + tools::sg::mouse_move_event _event(a_event->position().x(),a_event->position().y(),0,0,false); +#endif + m_interactor->mouse_move(_event); } -//virtual void mouseDoubleClickEvent(QMouseEvent* a_event) { -// if(!m_interactor) return; -// tools::sg::mouse_double_click_event event(a_event->x(),a_event->y()); -// m_interactor->mouse_double_click(event); -//} virtual void wheelEvent(QWheelEvent* a_event) { if(!m_interactor) return; - tools::sg::wheel_rotate_event event(a_event->angleDelta().y()); - m_interactor->wheel_rotate(event); + tools::sg::wheel_rotate_event _event(a_event->angleDelta().y()); + m_interactor->wheel_rotate(_event); } public: - glarea(QWidget* a_parent,toolx::sg::GL_viewer& a_viewer):parent(a_parent),m_viewer(a_viewer),m_interactor(0){} - virtual ~glarea(){} + glarea(QWidget* a_parent,toolx::sg::GL_viewer& a_viewer):parent(a_parent),m_viewer(a_viewer),m_interactor(0){ +#ifdef TOOLS_MEM + tools::mem::increment(s_class().c_str()); +#endif + } + virtual ~glarea(){ +#ifdef TOOLS_MEM + tools::mem::decrement(s_class().c_str()); +#endif + } public: void set_device_interactor(tools::sg::device_interactor* a_interactor) {m_interactor = a_interactor;} //we do not have ownership. protected: - tools::key_code convert(/*Qt::Key*/int a_key) {return a_key;} + tools::key_code convert_key(/*Qt::Key*/int a_key) {return a_key;} protected: toolx::sg::GL_viewer& m_viewer; -#if QT_VERSION < 0x050000 -#else -protected: - int m_width; - int m_height; -#endif tools::sg::device_interactor* m_interactor; }; }} + #endif diff --git a/source/externals/g4tools/include/toolx/Qt/pixwin b/source/externals/g4tools/include/toolx/Qt/pixwin new file mode 100644 index 00000000000..77eef3c3b2c --- /dev/null +++ b/source/externals/g4tools/include/toolx/Qt/pixwin @@ -0,0 +1,121 @@ +// Copyright (C) 2010, Guy Barrand. All rights reserved. +// See the file tools.license for terms. + +#ifndef toolx_Qt_pixwin +#define toolx_Qt_pixwin + +#include //For QT_VERSION. + +#if QT_VERSION < 0x050000 +#include +#else +#include +#endif + +#include +#include + +#include +#include + +#ifdef TOOLS_MEM +#include +#endif + +namespace toolx { +namespace Qt { + +class pixwin : public QWidget +{ + typedef QWidget parent; + TOOLS_SCLASS(toolx::Qt::pixwin) +public: + virtual void resizeEvent(QResizeEvent* a_event) { + //::printf("debug : toolx::Qt::pixwin::resizeEvent : %d, %d\n",a_event->size().width(),a_event->size().height()); + parent::resizeEvent(a_event); + m_viewer.set_size(a_event->size().width(),a_event->size().height()); + } + virtual void paintEvent(QPaintEvent* a_event) { + parent::paintEvent(a_event); + if(!m_viewer.render(tools::sg::zb_viewer::get_rgbas,false)) return; //rgbas because Qt wants an image 32 bits aligned. + //static size_t s_count = 0;::printf("debug : toolx::Qt::pixwin::paintEvent %d %d : %lu\n",parent::m_ww,parent::m_wh,s_count);s_count++; + QImage image(tools::vec_data(m_viewer.out_buffer()),m_viewer.width(),m_viewer.height(),QImage::Format_RGBA8888); + QPixmap pixmap = QPixmap::fromImage(image); + QPainter painter(this); + painter.drawPixmap(0,0,pixmap); + //parent::after_render(); + m_viewer.out_buffer_clear(); + } + + virtual void keyPressEvent(QKeyEvent* a_event) { + if(!m_interactor) return; + tools::sg::key_down_event _event(convert_key(a_event->key())); + m_interactor->key_press(_event); + } + virtual void keyReleaseEvent(QKeyEvent* a_event) { + if(!m_interactor) return; + tools::sg::key_up_event _event(convert_key(a_event->key())); + m_interactor->key_release(_event); + } + virtual void mousePressEvent(QMouseEvent* a_event) { + if(!m_interactor) return; +#if QT_VERSION < 0x060000 + tools::sg::mouse_down_event _event(a_event->x(),a_event->y()); +#else + tools::sg::mouse_down_event _event(a_event->position().x(),a_event->position().y()); +#endif + m_interactor->mouse_press(_event); + } + virtual void mouseReleaseEvent(QMouseEvent* a_event) { + if(!m_interactor) return; +#if QT_VERSION < 0x060000 + tools::sg::mouse_up_event _event(a_event->x(),a_event->y()); +#else + tools::sg::mouse_up_event _event(a_event->position().x(),a_event->position().y()); +#endif + m_interactor->mouse_release(_event); + } + virtual void mouseMoveEvent(QMouseEvent* a_event) { + if(!m_interactor) return; +#if QT_VERSION < 0x060000 + tools::sg::mouse_move_event _event(a_event->x(),a_event->y(),0,0,false); +#else + tools::sg::mouse_move_event _event(a_event->position().x(),a_event->position().y(),0,0,false); +#endif + m_interactor->mouse_move(_event); + } +//virtual void mouseDoubleClickEvent(QMouseEvent* a_event) { +// if(!m_interactor) return; +// tools::sg::mouse_double_click_event _event(a_event->x(),a_event->y()); +// m_interactor->mouse_double_click(_event); +//} + virtual void wheelEvent(QWheelEvent* a_event) { + if(!m_interactor) return; + tools::sg::wheel_rotate_event _event(a_event->angleDelta().y()); + m_interactor->wheel_rotate(_event); + } + +public: + pixwin(QWidget* a_parent,tools::sg::zb_viewer& a_viewer):parent(a_parent),m_viewer(a_viewer),m_interactor(0){ +#ifdef TOOLS_MEM + tools::mem::increment(s_class().c_str()); +#endif + } + virtual ~pixwin(){ +#ifdef TOOLS_MEM + tools::mem::decrement(s_class().c_str()); +#endif + } +public: + void set_device_interactor(tools::sg::device_interactor* a_interactor) {m_interactor = a_interactor;} //we do not have ownership. +protected: + tools::key_code convert_key(/*Qt::Key*/int a_key) {return a_key;} +protected: + tools::sg::zb_viewer& m_viewer; + tools::sg::device_interactor* m_interactor; +}; + +}} + + +#endif diff --git a/source/externals/g4tools/include/toolx/Qt/s2q b/source/externals/g4tools/include/toolx/Qt/s2q new file mode 100644 index 00000000000..64d8b238084 --- /dev/null +++ b/source/externals/g4tools/include/toolx/Qt/s2q @@ -0,0 +1,25 @@ +// Copyright (C) 2010, Guy Barrand. All rights reserved. +// See the file tools.license for terms. + +#ifndef toolx_Qt_s2q +#define toolx_Qt_s2q + +#include //For QT_VERSION. + +#include + +namespace toolx { +namespace Qt { + +inline QString s2q(const std::string& a_s) { +#if QT_VERSION < 0x050000 + return QString::fromAscii(a_s.c_str()); +#else + return QString::fromLatin1(a_s.c_str()); +#endif +} + +}} + + +#endif diff --git a/source/externals/g4tools/include/toolx/Qt/session b/source/externals/g4tools/include/toolx/Qt/session index a0f6832b0e6..bcd1214f6e9 100644 --- a/source/externals/g4tools/include/toolx/Qt/session +++ b/source/externals/g4tools/include/toolx/Qt/session @@ -6,10 +6,8 @@ // pure Qt code, no GL. -#include -#include +#include "s2q" -#include //For QT_VERSION. #include #if QT_VERSION < 0x050000 @@ -20,6 +18,9 @@ #include #endif +#include +#include + namespace toolx { namespace Qt { @@ -38,6 +39,11 @@ public: m_own_qapp = true; } } + session(std::ostream& a_out,QApplication* a_qapp) + :m_out(a_out) + ,m_qapp(a_qapp) + ,m_own_qapp(false) + {} virtual ~session() { if(m_own_qapp && m_qapp) delete m_qapp; m_qapp = 0; @@ -63,7 +69,7 @@ public: } bool sync() { if(!m_qapp) return false; - //m_qapp->exec(); + m_qapp->processEvents(); return true; } public: @@ -89,14 +95,6 @@ public: if(!m_qapp) return; delete a_window; } -protected: - QString s2q(const std::string& a_s) { -#if QT_VERSION < 0x050000 - return QString::fromAscii(a_s.c_str()); -#else - return QString::fromLatin1(a_s.c_str()); -#endif - } protected: std::ostream& m_out; QApplication* m_qapp; @@ -105,5 +103,6 @@ protected: }} + #endif diff --git a/source/externals/g4tools/include/toolx/Qt/zb_viewer b/source/externals/g4tools/include/toolx/Qt/zb_viewer new file mode 100644 index 00000000000..02803d0404a --- /dev/null +++ b/source/externals/g4tools/include/toolx/Qt/zb_viewer @@ -0,0 +1,106 @@ +// Copyright (C) 2010, Guy Barrand. All rights reserved. +// See the file tools.license for terms. + +#ifndef toolx_Qt_zb_viewer +#define toolx_Qt_zb_viewer + +#include "pixwin" +#include + +#include "session" + +#include //For QT_VERSION. + +#if QT_VERSION < 0x050000 +#include +#else +#include +#endif + +namespace toolx { +namespace Qt { + +class zb_viewer: public tools::sg::zb_viewer { + typedef tools::sg::zb_viewer parent; + typedef pixwin render_area_t; +public: + zb_viewer(session& a_session, + int a_x = 0,int a_y = 0, + unsigned int a_width = 500,unsigned int a_height = 500, + const std::string& a_win_title = "") + :parent(a_session.out(),a_width,a_height) + ,m_session(a_session) + ,m_shell(0) + ,m_own_shell(false) + ,m_render_area(0) + { + if(!m_session.is_valid()) return; //throw + m_shell = m_session.create_window(a_win_title.c_str(),a_x,a_y,a_width,a_height); + if(!m_shell) return; //throw + m_own_shell = true; + + m_render_area = new render_area_t(0,*this); + + QVBoxLayout* layout = new QVBoxLayout; + layout->setContentsMargins(0,0,0,0); + layout->addWidget(m_render_area); + m_shell->setLayout(layout); + } + virtual ~zb_viewer() { + if(m_render_area) m_render_area->set_device_interactor(0); + if(m_shell && m_own_shell) { + m_session.delete_window(m_shell); + //m_session.sync(); + } + } +protected: + zb_viewer(const zb_viewer& a_from) + :parent(a_from) + ,m_session(a_from.m_session) + ,m_shell(0) + ,m_own_shell(false) + ,m_render_area(0) + {} + zb_viewer& operator=(const zb_viewer& a_from){ + parent::operator=(a_from); + return *this; + } +public: + bool has_window() const {return m_shell?true:false;} //for SWIG + + bool show() { + if(!m_shell) return false; + m_shell->show(); + return true; + } + + void win_render() { + if(!m_render_area) return; + //m_render_area->update(); //delayed. + m_render_area->repaint(); //immediate. + } + + void set_device_interactor(tools::sg::device_interactor* a_interactor) { //we do not have ownership. + if(!m_render_area) return; + m_render_area->set_device_interactor(a_interactor); + } +public: + QWidget* shell() {return m_shell;} + void set_own_shell(bool a_value) {m_own_shell = a_value;} + render_area_t* render_area() {return m_render_area;} + void enable_keyboard_focus() { + if(!m_render_area) return; + m_render_area->setFocusPolicy(::Qt::StrongFocus); + } +protected: + session& m_session; + QWidget* m_shell; + bool m_own_shell; + render_area_t* m_render_area; +}; + +}} + + +#endif + diff --git a/source/externals/g4tools/include/toolx/Windows/pixwin b/source/externals/g4tools/include/toolx/Windows/pixwin new file mode 100644 index 00000000000..23fcd75a9be --- /dev/null +++ b/source/externals/g4tools/include/toolx/Windows/pixwin @@ -0,0 +1,365 @@ +// Copyright (C) 2010, Guy Barrand. All rights reserved. +// See the file tools.license for terms. + +#ifndef toolx_Windows_pixwin +#define toolx_Windows_pixwin + +#include +#include +#include + +#include +#include +//#include + +#include + +#if defined(_MSC_VER) && _MSC_VER < 1900 +#elif defined(__MINGW32__) +#else +#define TOOLX_WINDOWS_TOUCH +#endif + +namespace toolx { +namespace Windows { + +#ifdef TOOLX_WINDOWS_TOUCH +inline bool is_message_touch_event() { + // from https://stackoverflow.com/questions/29857587/detect-if-wm-mousemove-is-caused-by-touch-pen. + static const LONG_PTR c_SIGNATURE_MASK = 0xFFFFFF00; + static const LONG_PTR c_MOUSEEVENTF_FROMTOUCH = 0xFF515700; + LONG_PTR extraInfo = ::GetMessageExtraInfo(); + return ( ( extraInfo & c_SIGNATURE_MASK ) == c_MOUSEEVENTF_FROMTOUCH ); +} +#endif + +class pixwin { + static const std::string& s_class() { + static const std::string s_v("toolx::Windows::pixwin"); + return s_v; + } + static void register_class(){ + static bool s_done = false; //not const, then not thread safe. + if(!s_done) { + WNDCLASS wc; + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.lpfnWndProc = (WNDPROC)proc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = ::GetModuleHandle(NULL); + wc.hIcon = LoadIcon(NULL,IDI_APPLICATION); + wc.hCursor = LoadCursor(NULL,IDC_ARROW); + wc.hbrBackground = GetSysColorBrush(COLOR_BTNFACE); + wc.lpszMenuName = s_class().c_str(); + wc.lpszClassName = s_class().c_str(); + ::RegisterClass(&wc); + s_done = true; + } + } +public: + virtual void resize(unsigned int,unsigned int){} +//virtual void paint(HDC) {} + virtual void paint() {} + virtual void close(){} + + virtual void left_button_up(unsigned int a_x,unsigned int a_y) {} + virtual void left_button_down(unsigned int a_x,unsigned int a_y) {} + virtual void mouse_move(unsigned int a_x,unsigned int a_y,bool) {} +public: + pixwin(HWND a_parent,unsigned int a_w,unsigned int a_h) + :m_parent(a_parent) + ,m_hwnd(0) + ,m_touch_available(false) + ,m_interactor(0) + { + register_class(); + m_hwnd = ::CreateWindow(s_class().c_str(), + //m_hwnd = ::CreateWindowEx(WS_EX_LAYERED,s_class().c_str(), + NULL, + WS_CHILD | WS_VISIBLE, + 0,0, + a_w,a_h, + m_parent,NULL, + GetWindowInstance(m_parent), + NULL); + if(!m_hwnd) return; + ::SetWindowLongPtr(m_hwnd,GWLP_USERDATA,LONG_PTR(this)); + +#ifdef TOOLX_WINDOWS_TOUCH + {BYTE digitizer_status = (BYTE)::GetSystemMetrics(SM_DIGITIZER); + if((digitizer_status & (0x80 + 0x40)) == 0) { + m_touch_available = false; + } else { + //BYTE nInputs = (BYTE)::GetSystemMetrics(SM_MAXIMUMTOUCHES); + m_touch_available = true; + if(!::RegisterTouchWindow(m_hwnd,0)) m_touch_available = false; + }} +#endif + + } + virtual ~pixwin(){ + if(m_hwnd) { + ::SetWindowLongPtr(m_hwnd,GWLP_USERDATA,LONG_PTR(NULL)); + ::DestroyWindow(m_hwnd); + m_hwnd = 0; + } + } +protected: + pixwin(const pixwin& a_from) + :m_parent(a_from.m_parent) + ,m_hwnd(0) + ,m_touch_available(a_from.m_touch_available) + ,m_interactor(0) + { + if(!m_parent) return; + register_class(); + RECT rect; + ::GetClientRect(m_parent,&rect); + m_hwnd = ::CreateWindow(s_class().c_str(), + NULL, + WS_CHILD | WS_VISIBLE, + 0,0, + rect.right-rect.left, + rect.bottom-rect.top, + m_parent,NULL, + GetWindowInstance(m_parent), + NULL); + if(!m_hwnd) return; + ::SetWindowLongPtr(m_hwnd,GWLP_USERDATA,LONG_PTR(this)); + +#ifdef TOOLX_WINDOWS_TOUCH + if(a_from.m_touch_available) { + if(!::RegisterTouchWindow(m_hwnd,0)) m_touch_available = false; + } +#endif + } +protected: + pixwin& operator=(const pixwin&){return *this;} +public: + void set_client_area_size(unsigned int a_w,unsigned int a_h) { + RECT rect; + ::GetClientRect(m_hwnd,&rect); + ::MoveWindow(m_hwnd,rect.left,rect.top,a_w,a_h,TRUE); + } + HWND hwnd() const {return m_hwnd;} + void wm_paint() {paint();} +public: + void set_device_interactor(tools::sg::device_interactor* a_interactor) {m_interactor = a_interactor;} //we do not have ownership. +protected: + bool is_touch_event() { +#ifdef TOOLX_WINDOWS_TOUCH + if(!m_touch_available) return false; + return is_message_touch_event(); +#else + return false; +#endif + } +protected: + static LRESULT CALLBACK proc(HWND a_hwnd,UINT a_msg,WPARAM a_wparam,LPARAM a_lparam) { + switch (a_msg) { + case WM_SIZE:{ + int width = LOWORD(a_lparam); + int height = HIWORD(a_lparam); + pixwin* _this = (pixwin*)::GetWindowLongPtr(a_hwnd,GWLP_USERDATA); + if(_this) { + _this->resize(width,height); + } else { + // CreateWindow send a WM_SIZE but GWLP_USERDATA not yet set. + } + }return 0; + case WM_PAINT:{ + pixwin* _this = (pixwin*)::GetWindowLongPtr(a_hwnd,GWLP_USERDATA); + if(_this) _this->wm_paint(); + }return 0; + + case WM_KEYDOWN:{ + pixwin* _this = (pixwin*)::GetWindowLongPtr(a_hwnd,GWLP_USERDATA); + if(_this) { + if(_this->m_interactor) { + tools::sg::key_down_event event(_this->convert_key(a_wparam)); + _this->m_interactor->key_press(event); + } + } + } return 0; + case WM_KEYUP:{ + pixwin* _this = (pixwin*)::GetWindowLongPtr(a_hwnd,GWLP_USERDATA); + if(_this) { + if(_this->m_interactor) { + tools::sg::key_up_event event(_this->convert_key(a_wparam)); + _this->m_interactor->key_release(event); + } + } + } return 0; + + case WM_LBUTTONDOWN:{ + pixwin* _this = (pixwin*)::GetWindowLongPtr(a_hwnd,GWLP_USERDATA); + if(_this) { + if(_this->m_interactor) { + tools::sg::mouse_down_event event(LOWORD(a_lparam),HIWORD(a_lparam)); + _this->m_interactor->mouse_press(event); + } else { + RECT rect; + ::GetClientRect(a_hwnd,&rect); + unsigned int h = rect.bottom-rect.top; + if(!_this->is_touch_event()) _this->left_button_down(LOWORD(a_lparam),h-HIWORD(a_lparam)); + } + } + }return 0; + case WM_LBUTTONUP:{ + pixwin* _this = (pixwin*)::GetWindowLongPtr(a_hwnd,GWLP_USERDATA); + if(_this) { + if(_this->m_interactor) { + tools::sg::mouse_up_event event(LOWORD(a_lparam),HIWORD(a_lparam)); + _this->m_interactor->mouse_release(event); + } else { + RECT rect; + ::GetClientRect(a_hwnd,&rect); + unsigned int h = rect.bottom-rect.top; + if(!_this->is_touch_event()) _this->left_button_up(LOWORD(a_lparam),h-HIWORD(a_lparam)); + } + } + } return 0; + case WM_MOUSEMOVE:{ + pixwin* _this = (pixwin*)::GetWindowLongPtr(a_hwnd,GWLP_USERDATA); + if(_this) { + if(_this->m_interactor) { + tools::sg::mouse_move_event event(LOWORD(a_lparam),HIWORD(a_lparam),0,0,false); + _this->m_interactor->mouse_move(event); + } else { + WPARAM state = a_wparam; + bool ldown = ((state & MK_LBUTTON)==MK_LBUTTON)?true:false; + RECT rect; + ::GetClientRect(a_hwnd,&rect); + unsigned int h = rect.bottom-rect.top; + if(!_this->is_touch_event()) _this->mouse_move(LOWORD(a_lparam),h-HIWORD(a_lparam),ldown); + } + } + + }return 0; + + case WM_MOUSEWHEEL:{ + pixwin* _this = (pixwin*)::GetWindowLongPtr(a_hwnd,GWLP_USERDATA); + if(_this) { + if(_this->m_interactor) { + tools::sg::wheel_rotate_event event(GET_WHEEL_DELTA_WPARAM(a_wparam)); + _this->m_interactor->wheel_rotate(event); + } + } + } return 0; + +#ifdef TOOLX_WINDOWS_TOUCH + case WM_TOUCH:{ + pixwin* _this = (pixwin*)::GetWindowLongPtr(a_hwnd,GWLP_USERDATA); + if(_this && _this->m_touch_available) { + RECT rect; + //::GetWindowRect(hwnd,&rect); ??? + ::GetClientRect(a_hwnd,&rect); + unsigned int h = rect.bottom-rect.top; + + unsigned int num_inputs = (int)a_wparam; + //::printf("debug : WM_TOUCH : 001 : %d\n",num_inputs); + TOUCHINPUT* ti = new TOUCHINPUT[num_inputs]; + POINT p; + if(::GetTouchInputInfo((HTOUCHINPUT)a_lparam,num_inputs,ti,sizeof(TOUCHINPUT))) { + for(unsigned int i=0;ileft_button_down(p.x,h-p.y); + } else if (ti[i].dwFlags & TOUCHEVENTF_UP) { + //::printf("debug : TOUCHEVENTF_UP %lu %lu\n",p.x,p.y); + _this->left_button_up(p.x,h-p.y); + } else if (ti[i].dwFlags & TOUCHEVENTF_MOVE) { + bool ldown = true; //we assume that a TOUCHEVENT_DOWN had been done. + //::printf("debug : TOUCHEVENTF_MOVE %lu %lu\n",p.x,p.y); + _this->mouse_move(p.x,h-p.y,ldown); + } + } + } + ::CloseTouchInputHandle((HTOUCHINPUT)a_lparam); + delete [] ti; + } + }return 0; +#endif //TOOLX_WINDOWS_TOUCH + case WM_DESTROY:wm__destroy(a_hwnd);return 0; + } + return (DefWindowProc(a_hwnd,a_msg,a_wparam,a_lparam)); + } + static bool SetWindowPixelFormat(HDC a_HDC){ + PIXELFORMATDESCRIPTOR pfd; + pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); + pfd.nVersion = 1; + pfd.dwFlags = + PFD_DRAW_TO_WINDOW | + PFD_SUPPORT_OPENGL | + PFD_DOUBLEBUFFER | + PFD_STEREO_DONTCARE; + pfd.iPixelType = PFD_TYPE_RGBA; + pfd.cColorBits = 32; + pfd.cRedBits = 8; + pfd.cRedShift = 16; + pfd.cGreenBits = 8; + pfd.cGreenShift = 8; + pfd.cBlueBits = 8; + pfd.cBlueShift = 0; + pfd.cAlphaBits = 0; + pfd.cAlphaShift = 0; + pfd.cAccumBits = 64; + pfd.cAccumRedBits = 16; + pfd.cAccumGreenBits = 16; + pfd.cAccumBlueBits = 16; + pfd.cAccumAlphaBits = 0; + pfd.cDepthBits = 32; + pfd.cStencilBits = 8; + pfd.cAuxBuffers = 0; + pfd.iLayerType = PFD_MAIN_PLANE; + pfd.bReserved = 0; + pfd.dwLayerMask = 0; + pfd.dwVisibleMask = 0; + pfd.dwDamageMask = 0; + + int pixelIndex = ::ChoosePixelFormat(a_HDC,&pfd); + if (pixelIndex==0) { + // Let's choose a default index. + pixelIndex = 1; + if (::DescribePixelFormat(a_HDC, + pixelIndex, + sizeof(PIXELFORMATDESCRIPTOR), + &pfd)==0) { + return false; + } + } + + if (::SetPixelFormat(a_HDC,pixelIndex,&pfd)==FALSE) return false; + + return true; + } + static void wm__destroy(HWND a_hwnd) { + pixwin* _this = (pixwin*)::GetWindowLongPtr(a_hwnd,GWLP_USERDATA); + if(_this) { //How to be sure that we have a pixwin* ??? + _this->close(); + if(_this->m_hwnd!=a_hwnd) { + //::printf("WinTk::Component::wm_destroy : HWND mismatch !\n"); + } + _this->m_hwnd = 0; + } + ::SetWindowLongPtr(a_hwnd,GWLP_USERDATA,LONG_PTR(NULL)); + } +protected: + tools::key_code convert_key(WPARAM a_key) { + if(a_key==VK_SHIFT) return tools::sg::key_shift(); + return (tools::key_code)a_key; + } +protected: + HWND m_parent; + HWND m_hwnd; + bool m_touch_available; + tools::sg::device_interactor* m_interactor; +}; + +}} + + +#endif diff --git a/source/externals/g4tools/include/toolx/Windows/session b/source/externals/g4tools/include/toolx/Windows/session index f233684f04c..d2f7f5123c2 100644 --- a/source/externals/g4tools/include/toolx/Windows/session +++ b/source/externals/g4tools/include/toolx/Windows/session @@ -8,6 +8,7 @@ #include #include +#include namespace toolx { namespace Windows { @@ -64,10 +65,18 @@ public: //void post(HWND a_hwnd,LPARAM a_msg){ // ::PostMessage(a_hwnd,WM_USER,(WPARAM)0,a_msg); //} +public: + bool tmp_dir(std::string& a_dir) { + char* env = ::getenv("TEMP"); + if(!env) {a_dir.clear();return false;} + a_dir = env; + return true; + } protected: std::ostream& m_out; }; }} + #endif diff --git a/source/externals/g4tools/include/toolx/Windows/zb_viewer b/source/externals/g4tools/include/toolx/Windows/zb_viewer new file mode 100644 index 00000000000..dacd1eda528 --- /dev/null +++ b/source/externals/g4tools/include/toolx/Windows/zb_viewer @@ -0,0 +1,91 @@ +// Copyright (C) 2010, Guy Barrand. All rights reserved. +// See the file tools.license for terms. + +#ifndef toolx_Windows_zb_viewer +#define toolx_Windows_zb_viewer + +#include "session" +#include "window" + +#include "pixwin" +#include + +// disable the warning about the usage of "this" in the constructor. +#pragma warning(disable:4355) + +namespace toolx { +namespace Windows { + +class zb_viewer : public window, protected pixwin, public tools::sg::zb_viewer { + typedef window parent_window; + typedef pixwin parent_render_area; + typedef tools::sg::zb_viewer parent_viewer; +protected: + virtual void paint() { + //parent_viewer::m_out << "toolx::Windows::zb_viewer::paint " << parent_viewer::m_ww << " " << parent_viewer::m_wh << std::endl; + if(!render(get_bgras,false)) return; + HDC hDC = ::GetDC(parent_render_area::m_hwnd); + HDC bitmap_DC = ::CreateCompatibleDC(hDC); + HBITMAP bitmap = ::CreateBitmap(parent_viewer::m_ww,parent_viewer::m_wh, 1, 32, tools::vec_data(m_out_buffer)); + HBITMAP old_bitmap = (HBITMAP)::SelectObject(bitmap_DC, bitmap); + ::BitBlt(hDC,0,0,parent_viewer::m_ww,parent_viewer::m_wh,bitmap_DC,0,0,SRCCOPY); + ::SelectObject(bitmap_DC, old_bitmap); + ::DeleteObject(bitmap); + ::DeleteDC(bitmap_DC); + ::ReleaseDC(parent_render_area::m_hwnd,hDC); + ::ValidateRect(parent_render_area::m_hwnd,NULL); + m_out_buffer.clear(); + } + virtual void resize(unsigned int a_w,unsigned int a_h){ //NOTE: it is not called at startup. + //parent_viewer::m_out << "toolx::Windows::zb_viewer::resize " << a_w << " " << a_h << std::endl; + set_size(a_w,a_h); + } +public: + virtual void close() {} +public: + zb_viewer(session& a_session, + int a_x = 0,int a_y = 0, + unsigned int a_width = 500,unsigned int a_height = 500, + const std::string& a_title = "") + :parent_window(a_title.c_str(),a_x,a_y,a_width,a_height) + ,parent_render_area(parent_window::m_hwnd,a_width,a_height) + ,parent_viewer(a_session.out(),a_width,a_height) + ,m_session(a_session) + { + parent_window::set_focus_hwnd(parent_render_area::m_hwnd); + } + virtual ~zb_viewer() {} +protected: + zb_viewer(const zb_viewer& a_from) + :parent_window(a_from) + ,parent_render_area(a_from) + ,parent_viewer(a_from) + ,m_session(a_from.m_session) + {} + zb_viewer& operator=(const zb_viewer& a_from){ + parent_window::operator=(a_from); + return *this; + } +public: + bool has_window() const {return parent_window::m_hwnd?true:false;} //for SWIG + + HWND window() const {return parent_window::m_hwnd;} + + bool show() { + if(!parent_window::m_hwnd) return false; + m_session.show_window(parent_window::m_hwnd); + return true; + } + + void win_render() {parent_render_area::wm_paint();} + void set_device_interactor(tools::sg::device_interactor* a_interactor) { //we do not have ownership. + parent_render_area::set_device_interactor(a_interactor); + } +protected: + session& m_session; +}; + +}} + + +#endif diff --git a/source/externals/g4tools/include/toolx/X11/base_session b/source/externals/g4tools/include/toolx/X11/base_session index b0f6e8080ff..a005989caab 100644 --- a/source/externals/g4tools/include/toolx/X11/base_session +++ b/source/externals/g4tools/include/toolx/X11/base_session @@ -12,9 +12,9 @@ #include "dispatcher" #include -#include //XA_INTEGER +#include //XA_INTEGER -#include //XVisualInfo +#include //XVisualInfo namespace toolx { namespace X11 { @@ -96,6 +96,7 @@ public: bool is_valid() const {return m_display?true:false;} + unsigned int monitor() const {return m_monitor;} Display* display() const {return m_display;} bool steer() { @@ -367,7 +368,29 @@ protected: static Bool wait_unmap_notify(Display*,XEvent* a_event,char* a_arg){ return (a_event->type == UnmapNotify) && (a_event->xmap.window == (Window)a_arg); } - + +/* + void wait_xxx(Window a_window) { + if(!m_display) return; + {wait_what arg; + arg.m_event_type = ConfigureNotify; + arg.m_window = a_window; + XEvent event; + ::XIfEvent(m_display,&event,wait_for,(char*)&arg); + dispatch(event);} + } + + struct wait_what { + int m_event_type; + Window m_window; + }; + static Bool wait_for(Display*,XEvent* a_event,char* a_arg){ + wait_what* arg = (wait_what*)a_arg; + return (a_event->type == arg->m_event_type) && + (a_event->xmap.window == arg->m_window); + } +*/ + void clear_dispatchers() { tools_vforit_npp(dispatcher*,m_dispatchers,it) { dispatcher* obj = *it; @@ -388,5 +411,6 @@ protected: }} + #endif diff --git a/source/externals/g4tools/include/toolx/X11/colors b/source/externals/g4tools/include/toolx/X11/colors new file mode 100644 index 00000000000..2768b078655 --- /dev/null +++ b/source/externals/g4tools/include/toolx/X11/colors @@ -0,0 +1,122 @@ +// Copyright (C) 2010, Guy Barrand. All rights reserved. +// See the file tools.license for terms. + +#ifndef toolx_X11_colors +#define toolx_X11_colors + +#include +#include +#include + +namespace toolx { +namespace X11 { + +typedef unsigned long Pixel; +typedef std::vector pixels_t; + +typedef unsigned int rgb_t; +typedef std::map colors_t; + +inline bool rgb2pixel(Display* a_display,unsigned int a_monitor, + unsigned char a_r,unsigned char a_g,unsigned char a_b, + Pixel& a_pixel,bool& a_allocated) { + // read_write visual class: PseudoColor, GrayScale, DirectColor. + // read_only visual class: TrueColor, StaticColor, StaticGray. + // Could allocate a read_only cell in a read_write, read_only visual class. + // Could allocate a read_write cell only in read_write visual class. + // StaticGray + (depth=1) is monochrome. + + Screen* screen = ::XScreenOfDisplay(a_display,a_monitor); + int vclass = ::XDefaultVisualOfScreen(screen)->c_class; + Colormap cmap = ::XDefaultColormapOfScreen(screen); + + bool is_grey = ((vclass==GrayScale) || (vclass==StaticGray) ) ? true : false; + + float r = float(a_r)/255.0f; + float g = float(a_g)/255.0f; + float b = float(a_b)/255.0f; + + XColor xcolor; + xcolor.pixel = 0L; + if(is_grey) { + float grey = 0.30f * r + 0.59f * g + 0.11f * b; + xcolor.red = (unsigned short) (grey * 0xffff); + xcolor.green = (unsigned short) (grey * 0xffff); + xcolor.blue = (unsigned short) (grey * 0xffff); + } else { + xcolor.red = (unsigned short) (r * 0xffff); + xcolor.green = (unsigned short) (g * 0xffff); + xcolor.blue = (unsigned short) (b * 0xffff); + } + + // Could be done on read_only/read_write visual class. + // Cell is taken from a common pool. It is read only. + if(::XAllocColor(a_display,cmap,&xcolor)==0) { + // Color not found. Try to allocate a private color cell : + if((vclass==TrueColor)||(vclass==StaticColor)||(vclass==StaticGray)) { //Viusal class is read_only. + a_pixel = 0; + a_allocated = false; + return false; + } + if(::XAllocColorCells(a_display,cmap,False,NULL,0,&(xcolor.pixel),1)==0) { //read/write cell. + a_pixel = 0; + a_allocated = false; + return false; + } + xcolor.flags = DoRed|DoGreen|DoBlue; + ::XStoreColor(a_display,cmap,&xcolor); + a_pixel = xcolor.pixel; + a_allocated = true; + } else { + a_pixel = xcolor.pixel; + a_allocated = false; + } + + return true; +} + +inline bool get_pixel(Display* a_display,unsigned int a_monitor, + pixels_t& a_pixels,colors_t& a_colors, + unsigned int a_rgba, + Pixel& a_pixel) { + colors_t::const_iterator it = a_colors.find(a_rgba); + if(it!=a_colors.end()) {a_pixel = (*it).second;return true;} + unsigned char* pos = (unsigned char*)&a_rgba; + bool allocated; + if(!rgb2pixel(a_display,a_monitor,*(pos+0),*(pos+1),*(pos+2),a_pixel,allocated)) { + Screen* screen = ::XScreenOfDisplay(a_display,a_monitor); + a_pixel = XWhitePixelOfScreen(screen); + return false; + } + if(allocated) a_pixels.push_back(a_pixel); + a_colors[a_rgba] = a_pixel; + return true; +} + +inline void set_rgb_t(unsigned char a_r,unsigned char a_g,unsigned char a_b,rgb_t& a_rgb) { + unsigned char* pos = (unsigned char*)&a_rgb; + *pos = a_r;pos++; + *pos = a_g;pos++; + *pos = a_b;pos++; + *pos = 0;pos++; +} + +inline bool set_foreground(Display* a_display,unsigned int a_monitor,GC a_gc,pixels_t& a_pixels,colors_t& a_colors,unsigned char a_r,unsigned char a_g,unsigned char a_b) { + Pixel pixel; + rgb_t rgb; + set_rgb_t(a_r,a_g,a_b,rgb); + if(!get_pixel(a_display,a_monitor,a_pixels,a_colors,rgb,pixel)) return false; + XGCValues gcv; + gcv.foreground = pixel; + if(::XChangeGC(a_display,a_gc,GCForeground,&gcv)==0) return false; + return true; +} + +inline bool set_foregroundf(Display* a_display,unsigned int a_monitor,GC a_gc,pixels_t& a_pixels,colors_t& a_colors,float a_r,float a_g,float a_b) { + return set_foreground(a_display,a_monitor,a_gc,a_pixels,a_colors,a_r*255.0f,a_g*255.0f,a_b*255.0f); +} + +}} + + +#endif diff --git a/source/externals/g4tools/include/toolx/X11/pixwin b/source/externals/g4tools/include/toolx/X11/pixwin new file mode 100644 index 00000000000..3910b6b2730 --- /dev/null +++ b/source/externals/g4tools/include/toolx/X11/pixwin @@ -0,0 +1,121 @@ +// Copyright (C) 2010, Guy Barrand. All rights reserved. +// See the file tools.license for terms. + +#ifndef toolx_X11_pixwin +#define toolx_X11_pixwin + +#include "colors" +#include +//#include + +#include +#include //XPutPixel + +namespace toolx { +namespace X11 { + +class pixwin { +public: + pixwin(std::ostream& a_out,unsigned int a_monitor,Display* a_display) + :m_out(a_out) + ,m_monitor(a_monitor) + ,m_display(a_display) + ,m_GC(0) + ,m_image(0) + { + if(!m_display) return; + m_GC = ::XCreateGC(m_display,XRootWindow(m_display,m_monitor),0,0); + } + virtual ~pixwin() { + free_pixels(); + m_colors.clear(); + if(m_GC) ::XFreeGC(m_display,m_GC); + free_XImage(); + } +protected: + pixwin(const pixwin& a_from) + :m_out(a_from.m_out) + ,m_monitor(0) + ,m_display(0) + ,m_GC(0) + ,m_image(0) + {} + pixwin& operator=(const pixwin&){ + m_monitor = 0; + m_display = 0; + m_GC = 0; + m_image = 0; + return *this; + } +public: + void put_buffer(Window a_win,unsigned int a_ww,unsigned int a_wh,const unsigned char* a_rgbas) { + if(!m_display) return; + if(!m_GC) return; + if(!m_image) alloc_XImage(a_ww,a_wh); + if(!m_image) return; + //tools::atime start = tools::atime::now(); + const unsigned int* pos = (const unsigned int*)a_rgbas; + unsigned int row,col; + toolx::X11::Pixel pixel; + for(row=0;rowbytes_per_line. + m_image->data = new char[a_wh*m_image->bytes_per_line]; + if(!m_image->data) { + m_out << "toolx::X11::pixwin::alloc_XImage : can't alloc buffer." << std::endl; + ::XFree((char*)m_image); + m_image = 0; + return; + } + } + void free_XImage() { + if(!m_image) return; + delete [] m_image->data; + ::XFree((char*)m_image); + m_image = 0; + } + void free_pixels() { + if(!m_display) return; + Screen* screen = ::XScreenOfDisplay(m_display,m_monitor); + tools_vforit(toolx::X11::Pixel,m_pixels,it) { + ::XFreeColors(m_display,XDefaultColormapOfScreen(screen),&(*it),1,0); + } + m_pixels.clear(); + } +protected: + std::ostream& m_out; + unsigned int m_monitor; + Display* m_display; + GC m_GC; + std::vector m_pixels; + colors_t m_colors; + XImage* m_image; +}; + +}} + + +#endif + diff --git a/source/externals/g4tools/include/toolx/X11/zb_viewer b/source/externals/g4tools/include/toolx/X11/zb_viewer new file mode 100644 index 00000000000..dd064725db0 --- /dev/null +++ b/source/externals/g4tools/include/toolx/X11/zb_viewer @@ -0,0 +1,151 @@ +// Copyright (C) 2010, Guy Barrand. All rights reserved. +// See the file tools.license for terms. + +#ifndef toolx_X11_zb_viewer +#define toolx_X11_zb_viewer + +#include "base_session" +#include "pixwin" +#include "simple_dispatcher" + +#include +#include + +namespace toolx { +namespace X11 { + +class zb_viewer +:public tools::sg::zb_viewer, protected pixwin { + typedef tools::sg::zb_viewer parent; + typedef pixwin parent_pixwin; +private: + class dispatcher : public simple_dispatcher { + typedef simple_dispatcher parent; + public: + virtual bool dispatch(XEvent& a_event) { + if(parent::dispatch(a_event)) return true; + if(a_event.type==ButtonPress && a_event.xbutton.button==1) { + if(!m_viewer.device_interactor()) return false; + tools::sg::mouse_down_event event(a_event.xbutton.x,a_event.xbutton.y); + m_viewer.device_interactor()->mouse_press(event); + return true; + } else if(a_event.type==ButtonRelease && a_event.xbutton.button==1) { + if(!m_viewer.device_interactor()) return false; + tools::sg::mouse_up_event event(a_event.xbutton.x,a_event.xbutton.y); + m_viewer.device_interactor()->mouse_release(event); + return true; + } else if(a_event.type==MotionNotify) { + if(!m_viewer.device_interactor()) return false; + if((a_event.xmotion.state & Button1MotionMask)==Button1MotionMask) { + tools::sg::mouse_move_event event(a_event.xmotion.x,a_event.xmotion.y,0,0,false); + m_viewer.device_interactor()->mouse_move(event); + } + } else if((a_event.type==ButtonPress)&&(a_event.xbutton.button==4)) { // mouse scrollwheel down : + if(!m_viewer.device_interactor()) return false; + tools::sg::wheel_rotate_event event(8); //8=cooking. + m_viewer.device_interactor()->wheel_rotate(event); + return true; + } else if((a_event.type==ButtonPress)&&(a_event.xbutton.button==5)) { // mouse scrollwheel up : + if(!m_viewer.device_interactor()) return false; + tools::sg::wheel_rotate_event event(-8); //8=cooking. + m_viewer.device_interactor()->wheel_rotate(event); + return true; + } + return false; + } + virtual void win_render() {m_viewer.win_render();} + virtual void set_size(unsigned int a_width,unsigned int a_height) {m_viewer.set_size(a_width,a_height);} + virtual dispatcher* copy() const {return new dispatcher(*this);} + public: + dispatcher(zb_viewer& a_viewer) + :parent(a_viewer.m_session,a_viewer.m_win) + ,m_viewer(a_viewer){} + virtual ~dispatcher(){} + protected: + dispatcher(const dispatcher& a_from) + :parent(a_from) + ,m_viewer(a_from.m_viewer) + {} + dispatcher& operator=(const dispatcher& a_from) { + parent::operator=(a_from); + return *this; + } + protected: + zb_viewer& m_viewer; + }; + +public: + virtual void set_size(unsigned int a_w,unsigned int a_h) { + parent::set_size(a_w,a_h); + free_XImage(); + alloc_XImage(a_w,a_h); + } +public: + zb_viewer(base_session& a_session, + int a_x = 0,int a_y = 0, + unsigned int a_width = 500,unsigned int a_height = 500, + const std::string& a_win_title = "") + :parent(a_session.out(),a_width,a_height) + ,parent_pixwin(a_session.out(),a_session.monitor(),a_session.display()) + ,m_session(a_session) + ,m_win(0) + ,m_interactor(0) + { + if(!m_session.display()) return; //throw + m_win = m_session.create_window(a_win_title.c_str(),a_x,a_y,a_width,a_height); + if(!m_win) return; //throw + m_session.add_dispatcher(new dispatcher(*this)); + } + virtual ~zb_viewer() { + if(m_win) { + m_session.remove_dispatchers_with_window(m_win); + m_session.delete_window(m_win); + m_session.sync(); + } + } +protected: + zb_viewer(const zb_viewer& a_from) + :parent(a_from) + ,parent_pixwin(a_from) + ,m_session(a_from.m_session) + ,m_win(a_from.m_win) + ,m_interactor(0) + {} + zb_viewer& operator=(const zb_viewer& a_from){ + parent::operator=(a_from); + parent_pixwin::operator=(a_from); + m_win = a_from.m_win; + return *this; + } +public: + bool has_window() const {return m_win?true:false;} //for SWIG + + Window window() const {return m_win;} + + bool show() { + if(!m_win) return false; + m_session.show_window(m_win); + return true; + } + + void win_render() { + if(!m_win) return; + if(!render(get_rgbas,false)) return; + put_buffer(m_win,m_ww,m_wh,tools::vec_data(m_out_buffer)); + m_out_buffer.clear(); + } + + void set_device_interactor(tools::sg::device_interactor* a_interactor) {m_interactor = a_interactor;} +public: + tools::sg::device_interactor* device_interactor() {return m_interactor;} +protected: + base_session& m_session; + Window m_win; + tools::sg::device_interactor* m_interactor; +}; + +}} + + +#endif + diff --git a/source/externals/g4tools/include/toolx/Xt/ImageArea b/source/externals/g4tools/include/toolx/Xt/ImageArea new file mode 100644 index 00000000000..6d3f4115be1 --- /dev/null +++ b/source/externals/g4tools/include/toolx/Xt/ImageArea @@ -0,0 +1,222 @@ +// Copyright (C) 2010, Guy Barrand. All rights reserved. +// See the file tools.license for terms. + +#ifndef toolx_Xt_ImageArea +#define toolx_Xt_ImageArea + +#include +#include +#include +#include + +//#define TOOLX_XT_IMAGEAREA_DEBUG + +#ifdef TOOLX_XT_IMAGEAREA_DEBUG +#include +#endif + +namespace toolx { +namespace Xt { + +/////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////// + +typedef struct _ImageAreaClassRec* ImageAreaWidgetClass; +typedef struct _ImageAreaRec* ImageAreaWidget; + +/////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////// + +typedef struct { + void* extension; +} ImageAreaClassPart; + +typedef struct _ImageAreaClassRec { + CoreClassPart core_class; + CompositeClassPart composite_class; + ImageAreaClassPart imageArea_class; +} ImageAreaClassRec; + +typedef struct { + XtCallbackList resizeCallback; + XtCallbackList paintCallback; + XtCallbackList eventCallback; +} ImageAreaPart; + +typedef struct _ImageAreaRec { + CorePart core; + CompositePart composite; + ImageAreaPart imageArea; +} ImageAreaRec; + +/////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////// + +class ImageArea { +protected: + static const char* class_name() {static const char* s_s = "ImageArea";return s_s;} +public: + typedef struct { + int reason; + XEvent* event; + } XoAnyCallbackStruct; + + static int XoCR_RESIZE() {return 1;} + static int XoCR_PAINT() {return 2;} + static int XoCR_EVENT() {return 3;} + + static const char* XoN_resizeCallback() {static const char* s_s = "resizeCallback";return s_s;} + static const char* XoN_paintCallback() {static const char* s_s = "paintCallback";return s_s;} + static const char* XoN_eventCallback() {static const char* s_s = "eventCallback";return s_s;} +public: + static void paint(Widget a_this) { + if(!XtIsRealized(a_this)) return; + XoAnyCallbackStruct value; + value.reason = XoCR_PAINT(); + value.event = 0; + ::XtCallCallbacks(a_this,XoN_paintCallback(),(XtPointer)&value); + } +protected: + static void initialize_class(void) { +#ifdef TOOLX_XT_IMAGEAREA_DEBUG + ::printf("debug: toolx::Xt::ImageArea: initialize_class.\n"); +#endif + } + + static void initialize_widget(Widget a_request,Widget a_this,ArgList,Cardinal*) { + if(a_request->core.width<=0) a_this->core.width = 100; + if(a_request->core.height<=0) a_this->core.height = 100; + +#ifdef TOOLX_XT_IMAGEAREA_DEBUG + ::printf("debug: toolx::Xt::ImageArea: initialize_widget: %s\n",::XtName(a_this)); +#endif + + ::XtAddEventHandler + (a_this,ButtonPressMask|ButtonReleaseMask|ButtonMotionMask|KeyPressMask|KeyReleaseMask,0,event_handler,NULL); + +#ifdef TOOLX_XT_IMAGEAREA_DEBUG + ::printf("debug: toolx::Xt::ImageArea: initialize_widget: end\n"); +#endif + } + + static void destroy_widget(Widget) { +#ifdef TOOLX_XT_IMAGEAREA_DEBUG + ::printf("debug: toolx::Xt::ImageArea: destroy_widget.\n"); +#endif + } + + static void change_widget_size(Widget a_this) { +#ifdef TOOLX_XT_IMAGEAREA_DEBUG + ::printf("debug: toolx::Xt::ImageArea: change_widget_size: %s\n",XtName(a_this)); +#endif + + if(widget_class()->core_class.superclass->core_class.resize!=NULL) + (widget_class()->core_class.superclass->core_class.resize)(a_this); + + XoAnyCallbackStruct value; + value.reason = XoCR_RESIZE(); + value.event = 0; + ::XtCallCallbacks(a_this,XoN_resizeCallback(),(XtPointer)&value); + +#ifdef TOOLX_XT_IMAGEAREA_DEBUG + ::printf("debug: toolx::Xt::ImageArea: change_widget_size: end\n"); +#endif +} + + static void draw_widget(Widget a_this,XEvent* a_event,Region a_region) { +#ifdef TOOLX_XT_IMAGEAREA_DEBUG + ::printf("debug: toolx::Xt::ImageArea: draw_widget: %s\n",XtName(a_this)); +#endif + + if(widget_class()->core_class.superclass->core_class.expose!=NULL) + (widget_class()->core_class.superclass->core_class.expose)(a_this,a_event,a_region); + + XoAnyCallbackStruct value; + value.reason = XoCR_PAINT(); + value.event = a_event; + ::XtCallCallbacks(a_this,XoN_paintCallback(),(XtPointer)&value); + +#ifdef TOOLX_XT_IMAGEAREA_DEBUG + ::printf("debug: toolx::Xt::ImageArea: draw_widget: end\n"); +#endif + } + +protected: + static void event_handler(Widget a_this,XtPointer,XEvent* a_event ,Boolean*) { + XoAnyCallbackStruct value; + value.reason = XoCR_EVENT(); + value.event = a_event; + ::XtCallCallbacks(a_this,XoN_eventCallback(),(XtPointer)&value); + } + +public: + static WidgetClass widget_class() { + static XtResource s_resources[] = { + {(String)XoN_resizeCallback(),XtCCallback,XtRCallback,sizeof(XtCallbackList), + XtOffset(ImageAreaWidget,imageArea.resizeCallback),XtRImmediate,(XtPointer)NULL}, + {(String)XoN_paintCallback(),XtCCallback,XtRCallback,sizeof(XtCallbackList), + XtOffset(ImageAreaWidget,imageArea.paintCallback),XtRImmediate,(XtPointer)NULL}, + {(String)XoN_eventCallback(),XtCCallback,XtRCallback,sizeof(XtCallbackList), + XtOffset(ImageAreaWidget,imageArea.eventCallback),XtRImmediate,(XtPointer)NULL} + }; + + static ImageAreaClassRec s_imageAreaClassRec = { + // Core Class Part : + { + (WidgetClass) &compositeClassRec, // pointer to superclass ClassRec + (String)class_name(), // widget resource class name + sizeof(ImageAreaRec), // size in bytes of widget record + initialize_class, // class_initialize + NULL, // dynamic initialization + FALSE, // has class been initialized? + initialize_widget, // initialize + NULL, // notify that initialize called + XtInheritRealize, // XCreateWindow for widget + NULL, // widget semantics name to proc mapWidget + 0, // number of entries in actions + s_resources, // resources for subclass fields + XtNumber(s_resources), // number of entries in resources + NULLQUARK, // resource class quarkified + TRUE, // compress MotionNotify for widget + TRUE, // compress Expose events for widget + TRUE, // compress enter and leave events + TRUE, // select for VisibilityNotify + destroy_widget, // free data for subclass pointers + change_widget_size, // geom manager changed widget size + draw_widget, // rediplay window + NULL, // set subclass resource values + NULL, // notify that SetValues called + XtInheritSetValuesAlmost, // SetValues got "Almost" geo reply + NULL, // notify that get_values called + XtInheritAcceptFocus, // assign input focus to widget + XtVersion, // version of intrinsics used + NULL, // list of callback offsets + XtInheritTranslations, // translations + XtInheritQueryGeometry, // return preferred geometry + XtInheritDisplayAccelerator, // display your accelerator + NULL // pointer to extension record + }, + // Composite Class Part : + { + XtInheritGeometryManager, // geometry manager for children + XtInheritChangeManaged, // change managed state of child + XtInheritInsertChild, // physically add child to parent + XtInheritDeleteChild, // physically remove child + NULL // pointer to extension record + }, + // ImageArea : + { + NULL + } + }; + return (WidgetClass)&s_imageAreaClassRec; + } +}; + +}} + + +#endif diff --git a/source/externals/g4tools/include/toolx/Xt/session b/source/externals/g4tools/include/toolx/Xt/session index a9526dd2e91..72f16d5cae0 100644 --- a/source/externals/g4tools/include/toolx/Xt/session +++ b/source/externals/g4tools/include/toolx/Xt/session @@ -4,19 +4,25 @@ #ifndef toolx_Xt_session #define toolx_Xt_session -#include - #include #include #include +#include + namespace toolx { namespace Xt { class session { public: + session(std::ostream& a_out) + :m_out(a_out),m_app_context(0),m_app_widget(0),m_app_owner(false) + {} + session(std::ostream& a_out,XtAppContext a_app_context,Widget a_app_widget) + :m_out(a_out),m_app_context(a_app_context),m_app_widget(a_app_widget),m_app_owner(false) + {} session(std::ostream& a_out,int& a_argc,char** a_argv) - :m_out(a_out),m_app_context(0),m_app_widget(0) + :m_out(a_out),m_app_context(0),m_app_widget(0),m_app_owner(false) { //LookDSM_Problem(); Arg args[1]; @@ -25,11 +31,16 @@ public: if(!m_app_context || !m_app_widget) { m_app_context = 0; m_app_widget = 0; + m_app_owner = false; + return; } + m_app_owner = true; } virtual ~session() { - if(m_app_widget) {::XtDestroyWidget(m_app_widget);m_app_widget = 0;} - if(m_app_context) {::XtDestroyApplicationContext(m_app_context);m_app_context = 0;} + if(m_app_owner) { + if(m_app_widget) {::XtDestroyWidget(m_app_widget);m_app_widget = 0;} + if(m_app_context) {::XtDestroyApplicationContext(m_app_context);m_app_context = 0;} + } } protected: session(const session& a_from) @@ -67,11 +78,12 @@ public: Widget get_app_widget() {return m_app_widget;} protected: std::ostream& m_out; - bool m_app_owner; XtAppContext m_app_context; Widget m_app_widget; + bool m_app_owner; }; }} + #endif diff --git a/source/externals/g4tools/include/toolx/Xt/zb_viewer b/source/externals/g4tools/include/toolx/Xt/zb_viewer new file mode 100644 index 00000000000..fba439add52 --- /dev/null +++ b/source/externals/g4tools/include/toolx/Xt/zb_viewer @@ -0,0 +1,208 @@ +// Copyright (C) 2010, Guy Barrand. All rights reserved. +// See the file tools.license for terms. + +#ifndef toolx_Xt_zb_viewer +#define toolx_Xt_zb_viewer + +#include "session" +#include "ImageArea" +#include "../X11/pixwin" + +#include +#include +#include + +#include +#include +#include +#include + +namespace toolx { +namespace Xt { + +class zb_viewer: public tools::sg::zb_viewer { + typedef tools::sg::zb_viewer parent; +public: + zb_viewer(session& a_session, + int a_x = 0,int a_y = 0, + unsigned int a_width = 500,unsigned int a_height = 500, + const std::string& a_win_title = "") + :parent(a_session.out(),a_width,a_height) + ,m_session(a_session) + ,m_shell(0) + ,m_image_area(0) + ,m_pixwin(0) + ,m_interactor(0) + { + Widget app_widget = a_session.get_app_widget(); + if(!app_widget) return; + + std::string sgeom; + tools::numas(a_width,sgeom); + sgeom += "x"; + tools::numas(a_height,sgeom); + sgeom += "+"; + tools::numas(a_x,sgeom); + sgeom += "+"; + tools::numas(a_y,sgeom); + + Arg args[2]; + XtSetArg(args[0],XtNgeometry,XtNewString(sgeom.c_str())); + XtSetArg(args[1],XtNborderWidth,0); + + m_shell = ::XtAppCreateShell((char*)a_win_title.c_str(), + (char*)"zb_viewer_shell", + topLevelShellWidgetClass,XtDisplay(app_widget),args,2); + ::XtSetMappedWhenManaged(m_shell,True); + + m_image_area = ::XtCreateManagedWidget("imagearea",ImageArea::widget_class(),m_shell,args,0); + ::XtAddCallback(m_image_area,ImageArea::XoN_resizeCallback(),resize_cbk,(XtPointer)this); + ::XtAddCallback(m_image_area,ImageArea::XoN_paintCallback(),paint_cbk,(XtPointer)this); + ::XtAddCallback(m_image_area,ImageArea::XoN_eventCallback(),event_cbk,(XtPointer)this); + + ::XtAddCallback(m_shell,XtNdestroyCallback,destroy_shell_callback,(XtPointer)this); + + ::XtRealizeWidget(m_shell); + + {int iscreen; + Screen* screen = XtScreen(m_image_area); + iscreen = XScreenNumberOfScreen(screen); + m_pixwin = new toolx::X11::pixwin(a_session.out(),iscreen,XtDisplay(app_widget)); + m_pixwin->set_size(m_image_area->core.width,m_image_area->core.height);} + + //Atom WM_DELETE_WINDOW_atom = ::XInternAtom(XtDisplay(m_shell),"WM_DELETE_WINDOW",False); + //::XSetWMProtocols(XtDisplay(m_shell),XtWindow(m_shell),&WM_DELETE_WINDOW_atom,1); + } + virtual ~zb_viewer() { + delete m_pixwin; + if(m_shell) { + ::XtRemoveCallback(m_image_area,ImageArea::XoN_paintCallback(),paint_cbk,(XtPointer)this); + ::XtRemoveCallback(m_shell,XtNdestroyCallback,destroy_shell_callback,(XtPointer)this); + ::XtDestroyWidget(m_shell); + } + m_shell = 0; + m_image_area = 0; + } +protected: + zb_viewer(const zb_viewer& a_from) + :parent(a_from) + ,m_session(a_from.m_session) + ,m_shell(0) + ,m_image_area(0) + ,m_interactor(0) + {} + zb_viewer& operator=(const zb_viewer& a_from){ + parent::operator=(a_from); + return *this; + } +public: + bool has_window() const {return m_image_area?true:false;} + + bool show() { + if(!m_shell) return false; + ::XtRealizeWidget(m_shell); + ::XtMapWidget(m_shell); + // Raise window : + if(XtIsWidget(m_shell) && XtIsRealized(m_shell) ) { + Display* display = XtDisplay(m_shell); + Atom atom = ::XInternAtom(display,"WM_DELETE_WINDOW",False); + ::XSetWMProtocols(display,XtWindow(m_shell),&atom,1); + ::XRaiseWindow(display,XtWindow(m_shell)); + } + return true; + } + + void win_render() { + if(m_image_area) ImageArea::paint(m_image_area); + } + + void set_device_interactor(tools::sg::device_interactor* a_interactor) {m_interactor = a_interactor;} //we do not have ownership. +protected: + static void resize_cbk(Widget a_widget,XtPointer a_tag,XtPointer){ + if(!XtIsRealized(a_widget)) return; + unsigned int width = a_widget->core.width; + unsigned int height = a_widget->core.height; + //::printf("debug: toolx::Xt::zb_viewer::resize_cbk: %d %d\n",width,height); + zb_viewer* _this = (zb_viewer*)a_tag; + _this->set_size(width,height); + _this->m_pixwin->set_size(width,height); + } + static void paint_cbk(Widget a_widget,XtPointer a_tag,XtPointer){ + if(!XtIsRealized(a_widget)) return; + unsigned int width = a_widget->core.width; + unsigned int height = a_widget->core.height; + //::printf("debug: toolx::Xt::zb_viewer::paint_cbk: %d %d\n",width,height); + zb_viewer* _this = (zb_viewer*)a_tag; + if(!_this->render(tools::sg::zb_viewer::get_rgbas,false)) return; //rgbas because Qt wants an image 32 bits aligned. + _this->m_pixwin->put_buffer(XtWindow(a_widget),width,height,tools::vec_data(_this->out_buffer())); + //parent::after_render(); + _this->out_buffer_clear(); + } + static void event_cbk(Widget,XtPointer a_tag,XtPointer a_data){ + zb_viewer* _this = (zb_viewer*)a_tag; + if(!_this->m_interactor) return; + ImageArea::XoAnyCallbackStruct* data = (ImageArea::XoAnyCallbackStruct*)a_data; + XEvent* xevent = data->event; + switch( xevent->type ) { + case KeyPress:{ + KeySym key_sym; + ::XLookupString(&(xevent->xkey),NULL,0,&key_sym,NULL); + tools::sg::key_down_event event(_this->convert_key(key_sym)); + _this->m_interactor->key_press(event); + }return; + case KeyRelease:{ + KeySym key_sym; + ::XLookupString(&(xevent->xkey),NULL,0,&key_sym,NULL); + tools::sg::key_up_event event(_this->convert_key(key_sym)); + _this->m_interactor->key_release(event); + }return; + case ButtonPress:{ + if(xevent->xbutton.button==Button4) { //4=wheel down, or move down double touch on trackpad = zoom in. + tools::sg::wheel_rotate_event event(8); //8=cooking. + _this->m_interactor->wheel_rotate(event); + } else if(xevent->xbutton.button==Button5) { //5=wheel up, or move up double touch on trackpad = zoom out. + tools::sg::wheel_rotate_event event(-8); //8=cooking. + _this->m_interactor->wheel_rotate(event); + } else if(xevent->xbutton.button==Button1) { + tools::sg::mouse_down_event event(xevent->xbutton.x,xevent->xbutton.y); + _this->m_interactor->mouse_press(event); + } + }return; + case ButtonRelease:{ + if(xevent->xbutton.button==Button1) { + tools::sg::mouse_up_event event(xevent->xbutton.x,xevent->xbutton.y); + _this->m_interactor->mouse_release(event); + } + }return; + case MotionNotify:{ + if((xevent->xmotion.state & Button1MotionMask)==Button1MotionMask) { + tools::sg::mouse_move_event event(xevent->xmotion.x,xevent->xmotion.y,0,0,false); + _this->m_interactor->mouse_move(event); + } + }return; + default:return;} + } + static void destroy_shell_callback(Widget,XtPointer a_tag,XtPointer) { + zb_viewer* _this = (zb_viewer*)a_tag; + _this->m_shell = 0; + _this->m_image_area = 0; + } +protected: + tools::key_code convert_key(KeySym a_key) { + if(a_key==XK_Shift_L) return tools::sg::key_shift(); + if(a_key==XK_Shift_R) return tools::sg::key_shift(); + return (tools::key_code)a_key; + } +protected: + session& m_session; + Widget m_shell; + Widget m_image_area; + toolx::X11::pixwin* m_pixwin; + tools::sg::device_interactor* m_interactor; +}; + +}} + + +#endif + diff --git a/source/externals/g4tools/include/toolx/sg/GL_manager b/source/externals/g4tools/include/toolx/sg/GL_manager index fe216e32a2f..4e4350e1dea 100644 --- a/source/externals/g4tools/include/toolx/sg/GL_manager +++ b/source/externals/g4tools/include/toolx/sg/GL_manager @@ -685,7 +685,6 @@ protected: std::map m_gstos; - bool m_gsto_on_card; unsigned int m_gen_id; tools::sg::gsto_mode m_gsto_mode; bool m_warned; diff --git a/source/externals/g4tools/include/toolx/sg/gl b/source/externals/g4tools/include/toolx/sg/gl index fca3b4fa59b..159d9f3adf1 100644 --- a/source/externals/g4tools/include/toolx/sg/gl +++ b/source/externals/g4tools/include/toolx/sg/gl @@ -10,6 +10,7 @@ #include #include +#include namespace toolx { namespace sg { @@ -42,7 +43,9 @@ inline bool gl_dump_if_errors(std::ostream& a_out,const std::string& a_head) { //#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 - a_out << "0x" << std::hex << glerror << std::endl; + std::ostringstream oss; + oss << "0x" << std::hex << glerror; + a_out << oss.str() << std::endl; glerror = ::glGetError(); } @@ -87,7 +90,7 @@ inline bool gl_tex_img(std::ostream& a_out,const tools::img_byte& a_img) { #if defined(ANDROID) || TARGET_OS_IPHONE tools::img_byte res; if(!a_img.bw2x(3,res)) { - a_out << "toolx::sg::gl::tex_img : toolx::img.bw2x() failed." << std::endl; + a_out << "toolx::sg::gl::tex_img : tools::img.bw2x() failed." << std::endl; return false; } ::glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,res.width(),res.height(),0,GL_RGB,GL_UNSIGNED_BYTE,res.buffer()); @@ -107,4 +110,5 @@ inline bool gl_tex_img(std::ostream& a_out,const tools::img_byte& a_img) { }} + #endif diff --git a/source/externals/ptl/.clang-tidy b/source/externals/ptl/.clang-tidy new file mode 100644 index 00000000000..175a5e32f2c --- /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/GNUmakefile b/source/externals/ptl/GNUmakefile deleted file mode 100644 index 58ca3f570d0..00000000000 --- a/source/externals/ptl/GNUmakefile +++ /dev/null @@ -1,22 +0,0 @@ -# ------------------------------------------------------------ -# GNUmakefile for internal PTL library. Gabriele Cosmo, 18/6/20. -# ------------------------------------------------------------ - -name := G4ptl - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -GLOBLIBS = - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DPTL_ALLOC_EXPORT - -include $(G4INSTALL)/config/common.gmk - -.PHONY: global - -global: lib - diff --git a/source/externals/zlib/GNUmakefile b/source/externals/zlib/GNUmakefile deleted file mode 100644 index 2d604fc700b..00000000000 --- a/source/externals/zlib/GNUmakefile +++ /dev/null @@ -1,11 +0,0 @@ -# ------------------------------------------------------------- -# GNUmakefile for zlib. John Allison, 5/5/05. - -name := G4zlib - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk -include $(G4INSTALL)/config/common.gmk diff --git a/source/externals/zlib/History b/source/externals/zlib/History index a32f159c02e..ca2ecf13faf 100644 --- a/source/externals/zlib/History +++ b/source/externals/zlib/History @@ -4,6 +4,9 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-06-15 Ben Morgan (zlib-V11-01-00) +- Import zlib 1.2.13 sources, retaining prior Geant4 patches. + ## 2022-10-08 Ben Morgan (zlib-V11-00-04) - Suppress deprecated-non-prototype warnings for compilers that check this. diff --git a/source/externals/zlib/include/deflate.h b/source/externals/zlib/include/deflate.h index 149747ae883..1a06cd5f25d 100644 --- a/source/externals/zlib/include/deflate.h +++ b/source/externals/zlib/include/deflate.h @@ -8,6 +8,7 @@ subject to change. Applications should only use zlib.h. */ +/* @(#) $Id$ */ #ifndef DEFLATE_H #define DEFLATE_H @@ -328,8 +329,8 @@ void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, # define _tr_tally_dist(s, distance, length, flush) \ { uch len = (uch)(length); \ ush dist = (ush)(distance); \ - s->sym_buf[s->sym_next++] = dist; \ - s->sym_buf[s->sym_next++] = dist >> 8; \ + s->sym_buf[s->sym_next++] = (uch)dist; \ + s->sym_buf[s->sym_next++] = (uch)(dist >> 8); \ s->sym_buf[s->sym_next++] = len; \ dist--; \ s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ diff --git a/source/externals/zlib/include/inftrees.h b/source/externals/zlib/include/inftrees.h index baa53a0b1a1..f53665311c1 100644 --- a/source/externals/zlib/include/inftrees.h +++ b/source/externals/zlib/include/inftrees.h @@ -38,7 +38,7 @@ typedef struct { /* Maximum size of the dynamic table. The maximum number of code structures is 1444, which is the sum of 852 for literal/length codes and 592 for distance codes. These values were found by exhaustive searches using the program - examples/enough.c found in the zlib distribtution. The arguments to that + examples/enough.c found in the zlib distribution. The arguments to that program are the number of symbols, the initial root table size, and the maximum bit length of a code. "enough 286 9 15" for literal/length codes returns returns 852, and "enough 30 6 15" for distance codes returns 592. diff --git a/source/externals/zlib/include/zlib.h b/source/externals/zlib/include/zlib.h index 4a98e38bf34..953cb5012dc 100644 --- a/source/externals/zlib/include/zlib.h +++ b/source/externals/zlib/include/zlib.h @@ -1,5 +1,5 @@ /* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.12, March 11th, 2022 + version 1.2.13, October 13th, 2022 Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler @@ -37,11 +37,11 @@ extern "C" { #endif -#define ZLIB_VERSION "1.2.12" -#define ZLIB_VERNUM 0x12c0 +#define ZLIB_VERSION "1.2.13" +#define ZLIB_VERNUM 0x12d0 #define ZLIB_VER_MAJOR 1 #define ZLIB_VER_MINOR 2 -#define ZLIB_VER_REVISION 12 +#define ZLIB_VER_REVISION 13 #define ZLIB_VER_SUBREVISION 0 /* @@ -276,7 +276,7 @@ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); == 0), or after each call of deflate(). If deflate returns Z_OK and with zero avail_out, it must be called again after making room in the output buffer because there might be more output pending. See deflatePending(), - which can be used if desired to determine whether or not there is more ouput + which can be used if desired to determine whether or not there is more output in that case. Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to @@ -660,7 +660,7 @@ ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm, to dictionary. dictionary must have enough space, where 32768 bytes is always enough. If deflateGetDictionary() is called with dictionary equal to Z_NULL, then only the dictionary length is returned, and nothing is copied. - Similary, if dictLength is Z_NULL, then it is not set. + Similarly, if dictLength is Z_NULL, then it is not set. deflateGetDictionary() may return a length less than the window size, even when more than the window size in input has been provided. It may return up @@ -915,7 +915,7 @@ ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm, to dictionary. dictionary must have enough space, where 32768 bytes is always enough. If inflateGetDictionary() is called with dictionary equal to Z_NULL, then only the dictionary length is returned, and nothing is copied. - Similary, if dictLength is Z_NULL, then it is not set. + Similarly, if dictLength is Z_NULL, then it is not set. inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the stream state is inconsistent. @@ -1437,12 +1437,12 @@ ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, In the event that the end of file is reached and only a partial item is available at the end, i.e. the remaining uncompressed data length is not a - multiple of size, then the final partial item is nevetheless read into buf + multiple of size, then the final partial item is nevertheless read into buf and the end-of-file flag is set. The length of the partial item read is not provided, but could be inferred from the result of gztell(). This behavior is the same as the behavior of fread() implementations in common libraries, but it prevents the direct use of gzfread() to read a concurrently written - file, reseting and retrying on end-of-file, when size is not 1. + file, resetting and retrying on end-of-file, when size is not 1. */ ZEXTERN int ZEXPORT gzwrite OF((gzFile file, voidpc buf, unsigned len)); @@ -1913,7 +1913,7 @@ ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp)); ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void)); ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int)); -ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp)); +ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF((z_streamp)); ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); #if defined(_WIN32) && !defined(Z_SOLO) diff --git a/source/externals/zlib/include/zutil.h b/source/externals/zlib/include/zutil.h index 4ddb93ef81a..0bc7f4ecd1c 100644 --- a/source/externals/zlib/include/zutil.h +++ b/source/externals/zlib/include/zutil.h @@ -8,6 +8,7 @@ subject to change. Applications should only use zlib.h. */ +/* @(#) $Id$ */ #ifndef ZUTIL_H #define ZUTIL_H @@ -192,6 +193,7 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0) ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off_t)); #endif /* common defaults */ diff --git a/source/externals/zlib/src/Makefile.in b/source/externals/zlib/src/Makefile.in deleted file mode 100644 index 5a77949ff06..00000000000 --- a/source/externals/zlib/src/Makefile.in +++ /dev/null @@ -1,410 +0,0 @@ -# Makefile for zlib -# Copyright (C) 1995-2017 Jean-loup Gailly, Mark Adler -# For conditions of distribution and use, see copyright notice in zlib.h - -# To compile and test, type: -# ./configure; make test -# Normally configure builds both a static and a shared library. -# If you want to build just a static library, use: ./configure --static - -# To use the asm code, type: -# cp contrib/asm?86/match.S ./match.S -# make LOC=-DASMV OBJA=match.o - -# To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type: -# make install -# To install in $HOME instead of /usr/local, use: -# make install prefix=$HOME - -CC=cc - -CFLAGS=-O -#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 -#CFLAGS=-g -DZLIB_DEBUG -#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ -# -Wstrict-prototypes -Wmissing-prototypes - -SFLAGS=-O -LDFLAGS= -TEST_LDFLAGS=-L. libz.a -LDSHARED=$(CC) -CPP=$(CC) -E - -STATICLIB=libz.a -SHAREDLIB=libz.so -SHAREDLIBV=libz.so.1.2.11 -SHAREDLIBM=libz.so.1 -LIBS=$(STATICLIB) $(SHAREDLIBV) - -AR=ar -ARFLAGS=rc -RANLIB=ranlib -LDCONFIG=ldconfig -LDSHAREDLIBC=-lc -TAR=tar -SHELL=/bin/sh -EXE= - -prefix = /usr/local -exec_prefix = ${prefix} -libdir = ${exec_prefix}/lib -sharedlibdir = ${libdir} -includedir = ${prefix}/include -mandir = ${prefix}/share/man -man3dir = ${mandir}/man3 -pkgconfigdir = ${libdir}/pkgconfig -SRCDIR= -ZINC= -ZINCOUT=-I. - -OBJZ = adler32.o crc32.o deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o -OBJG = compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o -OBJC = $(OBJZ) $(OBJG) - -PIC_OBJZ = adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo -PIC_OBJG = compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo -PIC_OBJC = $(PIC_OBJZ) $(PIC_OBJG) - -# to use the asm code: make OBJA=match.o, PIC_OBJA=match.lo -OBJA = -PIC_OBJA = - -OBJS = $(OBJC) $(OBJA) - -PIC_OBJS = $(PIC_OBJC) $(PIC_OBJA) - -all: static shared - -static: example$(EXE) minigzip$(EXE) - -shared: examplesh$(EXE) minigzipsh$(EXE) - -all64: example64$(EXE) minigzip64$(EXE) - -check: test - -test: all teststatic testshared - -teststatic: static - @TMPST=tmpst_$$; \ - if echo hello world | ./minigzip | ./minigzip -d && ./example $$TMPST ; then \ - echo ' *** zlib test OK ***'; \ - else \ - echo ' *** zlib test FAILED ***'; false; \ - fi; \ - rm -f $$TMPST - -testshared: shared - @LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ - LD_LIBRARYN32_PATH=`pwd`:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \ - DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \ - SHLIB_PATH=`pwd`:$(SHLIB_PATH) ; export SHLIB_PATH; \ - TMPSH=tmpsh_$$; \ - if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh $$TMPSH; then \ - echo ' *** zlib shared test OK ***'; \ - else \ - echo ' *** zlib shared test FAILED ***'; false; \ - fi; \ - rm -f $$TMPSH - -test64: all64 - @TMP64=tmp64_$$; \ - if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64; then \ - echo ' *** zlib 64-bit test OK ***'; \ - else \ - echo ' *** zlib 64-bit test FAILED ***'; false; \ - fi; \ - rm -f $$TMP64 - -infcover.o: $(SRCDIR)test/infcover.c $(SRCDIR)zlib.h zconf.h - $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/infcover.c - -infcover: infcover.o libz.a - $(CC) $(CFLAGS) -o $@ infcover.o libz.a - -cover: infcover - rm -f *.gcda - ./infcover - gcov inf*.c - -libz.a: $(OBJS) - $(AR) $(ARFLAGS) $@ $(OBJS) - -@ ($(RANLIB) $@ || true) >/dev/null 2>&1 - -match.o: match.S - $(CPP) match.S > _match.s - $(CC) -c _match.s - mv _match.o match.o - rm -f _match.s - -match.lo: match.S - $(CPP) match.S > _match.s - $(CC) -c -fPIC _match.s - mv _match.o match.lo - rm -f _match.s - -example.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h - $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/example.c - -minigzip.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h - $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/minigzip.c - -example64.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h - $(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/example.c - -minigzip64.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h - $(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/minigzip.c - - -adler32.o: $(SRCDIR)adler32.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)adler32.c - -crc32.o: $(SRCDIR)crc32.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)crc32.c - -deflate.o: $(SRCDIR)deflate.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)deflate.c - -infback.o: $(SRCDIR)infback.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)infback.c - -inffast.o: $(SRCDIR)inffast.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inffast.c - -inflate.o: $(SRCDIR)inflate.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inflate.c - -inftrees.o: $(SRCDIR)inftrees.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inftrees.c - -trees.o: $(SRCDIR)trees.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)trees.c - -zutil.o: $(SRCDIR)zutil.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)zutil.c - -compress.o: $(SRCDIR)compress.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)compress.c - -uncompr.o: $(SRCDIR)uncompr.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)uncompr.c - -gzclose.o: $(SRCDIR)gzclose.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzclose.c - -gzlib.o: $(SRCDIR)gzlib.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzlib.c - -gzread.o: $(SRCDIR)gzread.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzread.c - -gzwrite.o: $(SRCDIR)gzwrite.c - $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzwrite.c - - -adler32.lo: $(SRCDIR)adler32.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/adler32.o $(SRCDIR)adler32.c - -@mv objs/adler32.o $@ - -crc32.lo: $(SRCDIR)crc32.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/crc32.o $(SRCDIR)crc32.c - -@mv objs/crc32.o $@ - -deflate.lo: $(SRCDIR)deflate.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/deflate.o $(SRCDIR)deflate.c - -@mv objs/deflate.o $@ - -infback.lo: $(SRCDIR)infback.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/infback.o $(SRCDIR)infback.c - -@mv objs/infback.o $@ - -inffast.lo: $(SRCDIR)inffast.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inffast.o $(SRCDIR)inffast.c - -@mv objs/inffast.o $@ - -inflate.lo: $(SRCDIR)inflate.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inflate.o $(SRCDIR)inflate.c - -@mv objs/inflate.o $@ - -inftrees.lo: $(SRCDIR)inftrees.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inftrees.o $(SRCDIR)inftrees.c - -@mv objs/inftrees.o $@ - -trees.lo: $(SRCDIR)trees.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/trees.o $(SRCDIR)trees.c - -@mv objs/trees.o $@ - -zutil.lo: $(SRCDIR)zutil.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/zutil.o $(SRCDIR)zutil.c - -@mv objs/zutil.o $@ - -compress.lo: $(SRCDIR)compress.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/compress.o $(SRCDIR)compress.c - -@mv objs/compress.o $@ - -uncompr.lo: $(SRCDIR)uncompr.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/uncompr.o $(SRCDIR)uncompr.c - -@mv objs/uncompr.o $@ - -gzclose.lo: $(SRCDIR)gzclose.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzclose.o $(SRCDIR)gzclose.c - -@mv objs/gzclose.o $@ - -gzlib.lo: $(SRCDIR)gzlib.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzlib.o $(SRCDIR)gzlib.c - -@mv objs/gzlib.o $@ - -gzread.lo: $(SRCDIR)gzread.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzread.o $(SRCDIR)gzread.c - -@mv objs/gzread.o $@ - -gzwrite.lo: $(SRCDIR)gzwrite.c - -@mkdir objs 2>/dev/null || test -d objs - $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzwrite.o $(SRCDIR)gzwrite.c - -@mv objs/gzwrite.o $@ - - -placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a - $(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS) - rm -f $(SHAREDLIB) $(SHAREDLIBM) - ln -s $@ $(SHAREDLIB) - ln -s $@ $(SHAREDLIBM) - -@rmdir objs - -example$(EXE): example.o $(STATICLIB) - $(CC) $(CFLAGS) -o $@ example.o $(TEST_LDFLAGS) - -minigzip$(EXE): minigzip.o $(STATICLIB) - $(CC) $(CFLAGS) -o $@ minigzip.o $(TEST_LDFLAGS) - -examplesh$(EXE): example.o $(SHAREDLIBV) - $(CC) $(CFLAGS) -o $@ example.o -L. $(SHAREDLIBV) - -minigzipsh$(EXE): minigzip.o $(SHAREDLIBV) - $(CC) $(CFLAGS) -o $@ minigzip.o -L. $(SHAREDLIBV) - -example64$(EXE): example64.o $(STATICLIB) - $(CC) $(CFLAGS) -o $@ example64.o $(TEST_LDFLAGS) - -minigzip64$(EXE): minigzip64.o $(STATICLIB) - $(CC) $(CFLAGS) -o $@ minigzip64.o $(TEST_LDFLAGS) - -install-libs: $(LIBS) - -@if [ ! -d $(DESTDIR)$(exec_prefix) ]; then mkdir -p $(DESTDIR)$(exec_prefix); fi - -@if [ ! -d $(DESTDIR)$(libdir) ]; then mkdir -p $(DESTDIR)$(libdir); fi - -@if [ ! -d $(DESTDIR)$(sharedlibdir) ]; then mkdir -p $(DESTDIR)$(sharedlibdir); fi - -@if [ ! -d $(DESTDIR)$(man3dir) ]; then mkdir -p $(DESTDIR)$(man3dir); fi - -@if [ ! -d $(DESTDIR)$(pkgconfigdir) ]; then mkdir -p $(DESTDIR)$(pkgconfigdir); fi - rm -f $(DESTDIR)$(libdir)/$(STATICLIB) - cp $(STATICLIB) $(DESTDIR)$(libdir) - chmod 644 $(DESTDIR)$(libdir)/$(STATICLIB) - -@($(RANLIB) $(DESTDIR)$(libdir)/libz.a || true) >/dev/null 2>&1 - -@if test -n "$(SHAREDLIBV)"; then \ - rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \ - cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir); \ - echo "cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)"; \ - chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \ - echo "chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV)"; \ - rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \ - ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB); \ - ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \ - ($(LDCONFIG) || true) >/dev/null 2>&1; \ - fi - rm -f $(DESTDIR)$(man3dir)/zlib.3 - cp $(SRCDIR)zlib.3 $(DESTDIR)$(man3dir) - chmod 644 $(DESTDIR)$(man3dir)/zlib.3 - rm -f $(DESTDIR)$(pkgconfigdir)/zlib.pc - cp zlib.pc $(DESTDIR)$(pkgconfigdir) - chmod 644 $(DESTDIR)$(pkgconfigdir)/zlib.pc -# The ranlib in install is needed on NeXTSTEP which checks file times -# ldconfig is for Linux - -install: install-libs - -@if [ ! -d $(DESTDIR)$(includedir) ]; then mkdir -p $(DESTDIR)$(includedir); fi - rm -f $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h - cp $(SRCDIR)zlib.h zconf.h $(DESTDIR)$(includedir) - chmod 644 $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h - -uninstall: - cd $(DESTDIR)$(includedir) && rm -f zlib.h zconf.h - cd $(DESTDIR)$(libdir) && rm -f libz.a; \ - if test -n "$(SHAREDLIBV)" -a -f $(SHAREDLIBV); then \ - rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM); \ - fi - cd $(DESTDIR)$(man3dir) && rm -f zlib.3 - cd $(DESTDIR)$(pkgconfigdir) && rm -f zlib.pc - -docs: zlib.3.pdf - -zlib.3.pdf: $(SRCDIR)zlib.3 - groff -mandoc -f H -T ps $(SRCDIR)zlib.3 | ps2pdf - $@ - -zconf.h.cmakein: $(SRCDIR)zconf.h.in - -@ TEMPFILE=zconfh_$$; \ - echo "/#define ZCONF_H/ a\\\\\n#cmakedefine Z_PREFIX\\\\\n#cmakedefine Z_HAVE_UNISTD_H\n" >> $$TEMPFILE &&\ - sed -f $$TEMPFILE $(SRCDIR)zconf.h.in > $@ &&\ - touch -r $(SRCDIR)zconf.h.in $@ &&\ - rm $$TEMPFILE - -zconf: $(SRCDIR)zconf.h.in - cp -p $(SRCDIR)zconf.h.in zconf.h - -mostlyclean: clean -clean: - rm -f *.o *.lo *~ \ - example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \ - example64$(EXE) minigzip64$(EXE) \ - infcover \ - libz.* foo.gz so_locations \ - _match.s maketree contrib/infback9/*.o - rm -rf objs - rm -f *.gcda *.gcno *.gcov - rm -f contrib/infback9/*.gcda contrib/infback9/*.gcno contrib/infback9/*.gcov - -maintainer-clean: distclean -distclean: clean zconf zconf.h.cmakein docs - rm -f Makefile zlib.pc configure.log - -@rm -f .DS_Store - @if [ -f Makefile.in ]; then \ - printf 'all:\n\t-@echo "Please use ./configure first. Thank you."\n' > Makefile ; \ - printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile ; \ - touch -r $(SRCDIR)Makefile.in Makefile ; fi - @if [ ! -f zconf.h.in ]; then rm -f zconf.h zconf.h.cmakein ; fi - @if [ ! -f zlib.3 ]; then rm -f zlib.3.pdf ; fi - -tags: - etags $(SRCDIR)*.[ch] - -adler32.o zutil.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h -gzclose.o gzlib.o gzread.o gzwrite.o: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h -compress.o example.o minigzip.o uncompr.o: $(SRCDIR)zlib.h zconf.h -crc32.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h -deflate.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h -infback.o inflate.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h -inffast.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h -inftrees.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h -trees.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)trees.h - -adler32.lo zutil.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h -gzclose.lo gzlib.lo gzread.lo gzwrite.lo: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h -compress.lo example.lo minigzip.lo uncompr.lo: $(SRCDIR)zlib.h zconf.h -crc32.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h -deflate.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h -infback.lo inflate.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h -inffast.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h -inftrees.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h -trees.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)trees.h diff --git a/source/externals/zlib/src/adler32.c b/source/externals/zlib/src/adler32.c index 1c3726a4f83..d0be4380a39 100644 --- a/source/externals/zlib/src/adler32.c +++ b/source/externals/zlib/src/adler32.c @@ -3,6 +3,7 @@ * For conditions of distribution and use, see copyright notice in zlib.h */ +/* @(#) $Id$ */ #include "zutil.h" diff --git a/source/externals/zlib/src/compress.c b/source/externals/zlib/src/compress.c index a28a4122f4a..2ad5326c14e 100644 --- a/source/externals/zlib/src/compress.c +++ b/source/externals/zlib/src/compress.c @@ -3,6 +3,7 @@ * For conditions of distribution and use, see copyright notice in zlib.h */ +/* @(#) $Id$ */ #define ZLIB_INTERNAL #include "zlib.h" @@ -18,7 +19,7 @@ memory, Z_BUF_ERROR if there was not enough room in the output buffer, Z_STREAM_ERROR if the level parameter is invalid. */ -int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) +int ZEXPORT compress2(dest, destLen, source, sourceLen, level) Bytef *dest; uLongf *destLen; const Bytef *source; @@ -64,7 +65,7 @@ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) /* =========================================================================== */ -int ZEXPORT compress (dest, destLen, source, sourceLen) +int ZEXPORT compress(dest, destLen, source, sourceLen) Bytef *dest; uLongf *destLen; const Bytef *source; @@ -77,7 +78,7 @@ int ZEXPORT compress (dest, destLen, source, sourceLen) If the default memLevel or windowBits for deflateInit() is changed, then this function needs to be updated. */ -uLong ZEXPORT compressBound (sourceLen) +uLong ZEXPORT compressBound(sourceLen) uLong sourceLen; { return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + diff --git a/source/externals/zlib/src/crc32.c b/source/externals/zlib/src/crc32.c index a9becfe69c2..f8357b083f7 100644 --- a/source/externals/zlib/src/crc32.c +++ b/source/externals/zlib/src/crc32.c @@ -7,6 +7,7 @@ * Kadatch and Jenkins (2010). See doc/crc-doc.1.0.pdf in this distribution. */ +/* @(#) $Id$ */ /* Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore @@ -97,13 +98,22 @@ # endif #endif +/* If available, use the ARM processor CRC32 instruction. */ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8 +# define ARMCRC32 +#endif + /* Local functions. */ local z_crc_t multmodp OF((z_crc_t a, z_crc_t b)); local z_crc_t x2nmodp OF((z_off64_t n, unsigned k)); -/* If available, use the ARM processor CRC32 instruction. */ -#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8 -# define ARMCRC32 +#if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE)) + local z_word_t byte_swap OF((z_word_t word)); +#endif + +#if defined(W) && !defined(ARMCRC32) + local z_crc_t crc_word OF((z_word_t data)); + local z_word_t crc_word_big OF((z_word_t data)); #endif #if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE)) @@ -629,7 +639,7 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) #endif /* DYNAMIC_CRC_TABLE */ /* Pre-condition the CRC */ - crc ^= 0xffffffff; + crc = (~crc) & 0xffffffff; /* Compute the CRC up to a word boundary. */ while (len && ((z_size_t)buf & 7) != 0) { @@ -644,8 +654,8 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) len &= 7; /* Do three interleaved CRCs to realize the throughput of one crc32x - instruction per cycle. Each CRC is calcuated on Z_BATCH words. The three - CRCs are combined into a single CRC after each set of batches. */ + instruction per cycle. Each CRC is calculated on Z_BATCH words. The + three CRCs are combined into a single CRC after each set of batches. */ while (num >= 3 * Z_BATCH) { crc1 = 0; crc2 = 0; @@ -748,7 +758,7 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) #endif /* DYNAMIC_CRC_TABLE */ /* Pre-condition the CRC */ - crc ^= 0xffffffff; + crc = (~crc) & 0xffffffff; #ifdef W @@ -1076,7 +1086,7 @@ uLong ZEXPORT crc32_combine64(crc1, crc2, len2) #ifdef DYNAMIC_CRC_TABLE once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ - return multmodp(x2nmodp(len2, 3), crc1) ^ crc2; + return multmodp(x2nmodp(len2, 3), crc1) ^ (crc2 & 0xffffffff); } /* ========================================================================= */ @@ -1085,7 +1095,7 @@ uLong ZEXPORT crc32_combine(crc1, crc2, len2) uLong crc2; z_off_t len2; { - return crc32_combine64(crc1, crc2, len2); + return crc32_combine64(crc1, crc2, (z_off64_t)len2); } /* ========================================================================= */ @@ -1102,14 +1112,14 @@ uLong ZEXPORT crc32_combine_gen64(len2) uLong ZEXPORT crc32_combine_gen(len2) z_off_t len2; { - return crc32_combine_gen64(len2); + return crc32_combine_gen64((z_off64_t)len2); } /* ========================================================================= */ -uLong crc32_combine_op(crc1, crc2, op) +uLong ZEXPORT crc32_combine_op(crc1, crc2, op) uLong crc1; uLong crc2; uLong op; { - return multmodp(op, crc1) ^ crc2; + return multmodp(op, crc1) ^ (crc2 & 0xffffffff); } diff --git a/source/externals/zlib/src/deflate.c b/source/externals/zlib/src/deflate.c index 1fd72ac286a..1ce562e4ab4 100644 --- a/source/externals/zlib/src/deflate.c +++ b/source/externals/zlib/src/deflate.c @@ -47,11 +47,12 @@ * */ +/* @(#) $Id$ */ #include "deflate.h" const char deflate_copyright[] = - " deflate 1.2.12 Copyright 1995-2022 Jean-loup Gailly and Mark Adler "; + " deflate 1.2.13 Copyright 1995-2022 Jean-loup Gailly and Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -86,13 +87,7 @@ local void lm_init OF((deflate_state *s)); local void putShortMSB OF((deflate_state *s, uInt b)); local void flush_pending OF((z_streamp strm)); local unsigned read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); -#ifdef ASMV -# pragma message("Assembler code may have bugs -- use at your own risk") - void match_init OF((void)); /* asm code initialization */ - uInt longest_match OF((deflate_state *s, IPos cur_match)); -#else local uInt longest_match OF((deflate_state *s, IPos cur_match)); -#endif #ifdef ZLIB_DEBUG local void check_match OF((deflate_state *s, IPos start, IPos match, @@ -159,7 +154,7 @@ local const config configuration_table[10] = { * characters, so that a running hash key can be computed from the previous * key instead of complete recalculation each time. */ -#define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask) +#define UPDATE_HASH(s,h,c) (h = (((h) << s->hash_shift) ^ (c)) & s->hash_mask) /* =========================================================================== @@ -190,9 +185,9 @@ local const config configuration_table[10] = { */ #define CLEAR_HASH(s) \ do { \ - s->head[s->hash_size-1] = NIL; \ + s->head[s->hash_size - 1] = NIL; \ zmemzero((Bytef *)s->head, \ - (unsigned)(s->hash_size-1)*sizeof(*s->head)); \ + (unsigned)(s->hash_size - 1)*sizeof(*s->head)); \ } while (0) /* =========================================================================== @@ -284,6 +279,8 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, if (windowBits < 0) { /* suppress zlib wrapper */ wrap = 0; + if (windowBits < -15) + return Z_STREAM_ERROR; windowBits = -windowBits; } #ifdef GZIP @@ -313,7 +310,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, s->hash_bits = (uInt)memLevel + 7; s->hash_size = 1 << s->hash_bits; s->hash_mask = s->hash_size - 1; - s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); + s->hash_shift = ((s->hash_bits + MIN_MATCH-1) / MIN_MATCH); s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); @@ -343,11 +340,11 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, * sym_buf value to read moves forward three bytes. From that symbol, up to * 31 bits are written to pending_buf. The closest the written pending_buf * bits gets to the next sym_buf symbol to read is just before the last - * code is written. At that time, 31*(n-2) bits have been written, just - * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at - * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1 + * code is written. At that time, 31*(n - 2) bits have been written, just + * after 24*(n - 2) bits have been consumed from sym_buf. sym_buf starts at + * 8*n bits into pending_buf. (Note that the symbol buffer fills when n - 1 * symbols are written.) The closest the writing gets to what is unread is - * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and + * then n + 14 bits. Here n is lit_bufsize, which is 16384 by default, and * can range from 128 to 32768. * * Therefore, at a minimum, there are 142 bits of space between what is @@ -393,7 +390,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, /* ========================================================================= * Check for a valid deflate stream state. Return 0 if ok, 1 if not. */ -local int deflateStateCheck (strm) +local int deflateStateCheck(strm) z_streamp strm; { deflate_state *s; @@ -416,7 +413,7 @@ local int deflateStateCheck (strm) } /* ========================================================================= */ -int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) +int ZEXPORT deflateSetDictionary(strm, dictionary, dictLength) z_streamp strm; const Bytef *dictionary; uInt dictLength; @@ -485,7 +482,7 @@ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) } /* ========================================================================= */ -int ZEXPORT deflateGetDictionary (strm, dictionary, dictLength) +int ZEXPORT deflateGetDictionary(strm, dictionary, dictLength) z_streamp strm; Bytef *dictionary; uInt *dictLength; @@ -507,7 +504,7 @@ int ZEXPORT deflateGetDictionary (strm, dictionary, dictLength) } /* ========================================================================= */ -int ZEXPORT deflateResetKeep (strm) +int ZEXPORT deflateResetKeep(strm) z_streamp strm; { deflate_state *s; @@ -545,7 +542,7 @@ int ZEXPORT deflateResetKeep (strm) } /* ========================================================================= */ -int ZEXPORT deflateReset (strm) +int ZEXPORT deflateReset(strm) z_streamp strm; { int ret; @@ -557,7 +554,7 @@ int ZEXPORT deflateReset (strm) } /* ========================================================================= */ -int ZEXPORT deflateSetHeader (strm, head) +int ZEXPORT deflateSetHeader(strm, head) z_streamp strm; gz_headerp head; { @@ -568,7 +565,7 @@ int ZEXPORT deflateSetHeader (strm, head) } /* ========================================================================= */ -int ZEXPORT deflatePending (strm, pending, bits) +int ZEXPORT deflatePending(strm, pending, bits) unsigned *pending; int *bits; z_streamp strm; @@ -582,7 +579,7 @@ int ZEXPORT deflatePending (strm, pending, bits) } /* ========================================================================= */ -int ZEXPORT deflatePrime (strm, bits, value) +int ZEXPORT deflatePrime(strm, bits, value) z_streamp strm; int bits; int value; @@ -677,36 +674,50 @@ int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain) } /* ========================================================================= - * For the default windowBits of 15 and memLevel of 8, this function returns - * a close to exact, as well as small, upper bound on the compressed size. - * They are coded as constants here for a reason--if the #define's are - * changed, then this function needs to be changed as well. The return - * value for 15 and 8 only works for those exact settings. + * For the default windowBits of 15 and memLevel of 8, this function returns a + * close to exact, as well as small, upper bound on the compressed size. This + * is an expansion of ~0.03%, plus a small constant. + * + * For any setting other than those defaults for windowBits and memLevel, one + * of two worst case bounds is returned. This is at most an expansion of ~4% or + * ~13%, plus a small constant. * - * For any setting other than those defaults for windowBits and memLevel, - * the value returned is a conservative worst case for the maximum expansion - * resulting from using fixed blocks instead of stored blocks, which deflate - * can emit on compressed data for some combinations of the parameters. + * Both the 0.03% and 4% derive from the overhead of stored blocks. The first + * one is for stored blocks of 16383 bytes (memLevel == 8), whereas the second + * is for stored blocks of 127 bytes (the worst case memLevel == 1). The + * expansion results from five bytes of header for each stored block. * - * This function could be more sophisticated to provide closer upper bounds for - * every combination of windowBits and memLevel. But even the conservative - * upper bound of about 14% expansion does not seem onerous for output buffer - * allocation. + * The larger expansion of 13% results from a window size less than or equal to + * the symbols buffer size (windowBits <= memLevel + 7). In that case some of + * the data being compressed may have slid out of the sliding window, impeding + * a stored block from being emitted. Then the only choice is a fixed or + * dynamic block, where a fixed block limits the maximum expansion to 9 bits + * per 8-bit byte, plus 10 bits for every block. The smallest block size for + * which this can occur is 255 (memLevel == 2). + * + * Shifts are used to approximate divisions, for speed. */ uLong ZEXPORT deflateBound(strm, sourceLen) z_streamp strm; uLong sourceLen; { deflate_state *s; - uLong complen, wraplen; + uLong fixedlen, storelen, wraplen; + + /* upper bound for fixed blocks with 9-bit literals and length 255 + (memLevel == 2, which is the lowest that may not use stored blocks) -- + ~13% overhead plus a small constant */ + fixedlen = sourceLen + (sourceLen >> 3) + (sourceLen >> 8) + + (sourceLen >> 9) + 4; - /* conservative upper bound for compressed data */ - complen = sourceLen + - ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5; + /* upper bound for stored blocks with length 127 (memLevel == 1) -- + ~4% overhead plus a small constant */ + storelen = sourceLen + (sourceLen >> 5) + (sourceLen >> 7) + + (sourceLen >> 11) + 7; - /* if can't get parameters, return conservative bound plus zlib wrapper */ + /* if can't get parameters, return larger bound plus a zlib wrapper */ if (deflateStateCheck(strm)) - return complen + 6; + return (fixedlen > storelen ? fixedlen : storelen) + 6; /* compute wrapper length */ s = strm->state; @@ -743,11 +754,12 @@ uLong ZEXPORT deflateBound(strm, sourceLen) wraplen = 6; } - /* if not default parameters, return conservative bound */ + /* if not default parameters, return one of the conservative bounds */ if (s->w_bits != 15 || s->hash_bits != 8 + 7) - return complen + wraplen; + return (s->w_bits <= s->hash_bits ? fixedlen : storelen) + wraplen; - /* default settings: return tight bound for that case */ + /* default settings: return tight bound for that case -- ~0.03% overhead + plus a small constant */ return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + (sourceLen >> 25) + 13 - 6 + wraplen; } @@ -757,7 +769,7 @@ uLong ZEXPORT deflateBound(strm, sourceLen) * IN assertion: the stream state is correct and there is enough room in * pending_buf. */ -local void putShortMSB (s, b) +local void putShortMSB(s, b) deflate_state *s; uInt b; { @@ -804,7 +816,7 @@ local void flush_pending(strm) } while (0) /* ========================================================================= */ -int ZEXPORT deflate (strm, flush) +int ZEXPORT deflate(strm, flush) z_streamp strm; int flush; { @@ -859,7 +871,7 @@ int ZEXPORT deflate (strm, flush) s->status = BUSY_STATE; if (s->status == INIT_STATE) { /* zlib header */ - uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; + uInt header = (Z_DEFLATED + ((s->w_bits - 8) << 4)) << 8; uInt level_flags; if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) @@ -1119,7 +1131,7 @@ int ZEXPORT deflate (strm, flush) } /* ========================================================================= */ -int ZEXPORT deflateEnd (strm) +int ZEXPORT deflateEnd(strm) z_streamp strm; { int status; @@ -1145,7 +1157,7 @@ int ZEXPORT deflateEnd (strm) * To simplify the source, this is not supported for 16-bit MSDOS (which * doesn't have enough memory anyway to duplicate compression states). */ -int ZEXPORT deflateCopy (dest, source) +int ZEXPORT deflateCopy(dest, source) z_streamp dest; z_streamp source; { @@ -1234,7 +1246,7 @@ local unsigned read_buf(strm, buf, size) /* =========================================================================== * Initialize the "longest match" routines for a new zlib stream */ -local void lm_init (s) +local void lm_init(s) deflate_state *s; { s->window_size = (ulg)2L*s->w_size; @@ -1255,11 +1267,6 @@ local void lm_init (s) s->match_length = s->prev_length = MIN_MATCH-1; s->match_available = 0; s->ins_h = 0; -#ifndef FASTEST -#ifdef ASMV - match_init(); /* initialize the asm code */ -#endif -#endif } #ifndef FASTEST @@ -1272,10 +1279,6 @@ local void lm_init (s) * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 * OUT assertion: the match length is not greater than s->lookahead. */ -#ifndef ASMV -/* For 80x86 and 680x0, an optimized version will be provided in match.asm or - * match.S. The code will be functionally equivalent. - */ local uInt longest_match(s, cur_match) deflate_state *s; IPos cur_match; /* current match */ @@ -1300,10 +1303,10 @@ local uInt longest_match(s, cur_match) */ register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; register ush scan_start = *(ushf*)scan; - register ush scan_end = *(ushf*)(scan+best_len-1); + register ush scan_end = *(ushf*)(scan + best_len - 1); #else register Bytef *strend = s->window + s->strstart + MAX_MATCH; - register Byte scan_end1 = scan[best_len-1]; + register Byte scan_end1 = scan[best_len - 1]; register Byte scan_end = scan[best_len]; #endif @@ -1321,7 +1324,8 @@ local uInt longest_match(s, cur_match) */ if ((uInt)nice_match > s->lookahead) nice_match = (int)s->lookahead; - Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, + "need lookahead"); do { Assert(cur_match < s->strstart, "no future"); @@ -1339,43 +1343,44 @@ local uInt longest_match(s, cur_match) /* This code assumes sizeof(unsigned short) == 2. Do not use * UNALIGNED_OK if your compiler uses a different size. */ - if (*(ushf*)(match+best_len-1) != scan_end || + if (*(ushf*)(match + best_len - 1) != scan_end || *(ushf*)match != scan_start) continue; /* It is not necessary to compare scan[2] and match[2] since they are * always equal when the other bytes match, given that the hash keys * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at - * strstart+3, +5, ... up to strstart+257. We check for insufficient + * strstart + 3, + 5, up to strstart + 257. We check for insufficient * lookahead only every 4th comparison; the 128th check will be made - * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is + * at strstart + 257. If MAX_MATCH-2 is not a multiple of 8, it is * necessary to put more guard bytes at the end of the window, or * to check more often for insufficient lookahead. */ Assert(scan[2] == match[2], "scan[2]?"); scan++, match++; do { - } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && - *(ushf*)(scan+=2) == *(ushf*)(match+=2) && - *(ushf*)(scan+=2) == *(ushf*)(match+=2) && - *(ushf*)(scan+=2) == *(ushf*)(match+=2) && + } while (*(ushf*)(scan += 2) == *(ushf*)(match += 2) && + *(ushf*)(scan += 2) == *(ushf*)(match += 2) && + *(ushf*)(scan += 2) == *(ushf*)(match += 2) && + *(ushf*)(scan += 2) == *(ushf*)(match += 2) && scan < strend); /* The funny "do {}" generates better code on most compilers */ - /* Here, scan <= window+strstart+257 */ - Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + /* Here, scan <= window + strstart + 257 */ + Assert(scan <= s->window + (unsigned)(s->window_size - 1), + "wild scan"); if (*scan == *match) scan++; - len = (MAX_MATCH - 1) - (int)(strend-scan); + len = (MAX_MATCH - 1) - (int)(strend - scan); scan = strend - (MAX_MATCH-1); #else /* UNALIGNED_OK */ - if (match[best_len] != scan_end || - match[best_len-1] != scan_end1 || - *match != *scan || - *++match != scan[1]) continue; + if (match[best_len] != scan_end || + match[best_len - 1] != scan_end1 || + *match != *scan || + *++match != scan[1]) continue; - /* The check at best_len-1 can be removed because it will be made + /* The check at best_len - 1 can be removed because it will be made * again later. (This heuristic is not always a win.) * It is not necessary to compare scan[2] and match[2] since they * are always equal when the other bytes match, given that @@ -1385,7 +1390,7 @@ local uInt longest_match(s, cur_match) Assert(*scan == *match, "match[2]?"); /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. + * the 256th check will be made at strstart + 258. */ do { } while (*++scan == *++match && *++scan == *++match && @@ -1394,7 +1399,8 @@ local uInt longest_match(s, cur_match) *++scan == *++match && *++scan == *++match && scan < strend); - Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + Assert(scan <= s->window + (unsigned)(s->window_size - 1), + "wild scan"); len = MAX_MATCH - (int)(strend - scan); scan = strend - MAX_MATCH; @@ -1406,9 +1412,9 @@ local uInt longest_match(s, cur_match) best_len = len; if (len >= nice_match) break; #ifdef UNALIGNED_OK - scan_end = *(ushf*)(scan+best_len-1); + scan_end = *(ushf*)(scan + best_len - 1); #else - scan_end1 = scan[best_len-1]; + scan_end1 = scan[best_len - 1]; scan_end = scan[best_len]; #endif } @@ -1418,7 +1424,6 @@ local uInt longest_match(s, cur_match) if ((uInt)best_len <= s->lookahead) return (uInt)best_len; return s->lookahead; } -#endif /* ASMV */ #else /* FASTEST */ @@ -1439,7 +1444,8 @@ local uInt longest_match(s, cur_match) */ Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); - Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, + "need lookahead"); Assert(cur_match < s->strstart, "no future"); @@ -1449,7 +1455,7 @@ local uInt longest_match(s, cur_match) */ if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1; - /* The check at best_len-1 can be removed because it will be made + /* The check at best_len - 1 can be removed because it will be made * again later. (This heuristic is not always a win.) * It is not necessary to compare scan[2] and match[2] since they * are always equal when the other bytes match, given that @@ -1459,7 +1465,7 @@ local uInt longest_match(s, cur_match) Assert(*scan == *match, "match[2]?"); /* We check for insufficient lookahead only every 8th comparison; - * the 256th check will be made at strstart+258. + * the 256th check will be made at strstart + 258. */ do { } while (*++scan == *++match && *++scan == *++match && @@ -1468,7 +1474,7 @@ local uInt longest_match(s, cur_match) *++scan == *++match && *++scan == *++match && scan < strend); - Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + Assert(scan <= s->window + (unsigned)(s->window_size - 1), "wild scan"); len = MAX_MATCH - (int)(strend - scan); @@ -1504,7 +1510,7 @@ local void check_match(s, start, match, length) z_error("invalid match"); } if (z_verbose > 1) { - fprintf(stderr,"\\[%d,%d]", start-match, length); + fprintf(stderr,"\\[%d,%d]", start - match, length); do { putc(s->window[start++], stderr); } while (--length != 0); } } @@ -1550,9 +1556,9 @@ local void fill_window(s) /* If the window is almost full and there is insufficient lookahead, * move the upper half to the lower one to make room in the upper half. */ - if (s->strstart >= wsize+MAX_DIST(s)) { + if (s->strstart >= wsize + MAX_DIST(s)) { - zmemcpy(s->window, s->window+wsize, (unsigned)wsize - more); + zmemcpy(s->window, s->window + wsize, (unsigned)wsize - more); s->match_start -= wsize; s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ s->block_start -= (long) wsize; @@ -1683,7 +1689,7 @@ local void fill_window(s) * * deflate_stored() is written to minimize the number of times an input byte is * copied. It is most efficient with large input and output buffers, which - * maximizes the opportunites to have a single copy from next_in to next_out. + * maximizes the opportunities to have a single copy from next_in to next_out. */ local block_state deflate_stored(s, flush) deflate_state *s; @@ -1893,7 +1899,7 @@ local block_state deflate_fast(s, flush) if (s->lookahead == 0) break; /* flush the current block */ } - /* Insert the string window[strstart .. strstart+2] in the + /* Insert the string window[strstart .. strstart + 2] in the * dictionary, and set hash_head to the head of the hash chain: */ hash_head = NIL; @@ -1941,7 +1947,7 @@ local block_state deflate_fast(s, flush) s->strstart += s->match_length; s->match_length = 0; s->ins_h = s->window[s->strstart]; - UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); + UPDATE_HASH(s, s->ins_h, s->window[s->strstart + 1]); #if MIN_MATCH != 3 Call UPDATE_HASH() MIN_MATCH-3 more times #endif @@ -1952,7 +1958,7 @@ local block_state deflate_fast(s, flush) } else { /* No match, output a literal byte */ Tracevv((stderr,"%c", s->window[s->strstart])); - _tr_tally_lit (s, s->window[s->strstart], bflush); + _tr_tally_lit(s, s->window[s->strstart], bflush); s->lookahead--; s->strstart++; } @@ -1996,7 +2002,7 @@ local block_state deflate_slow(s, flush) if (s->lookahead == 0) break; /* flush the current block */ } - /* Insert the string window[strstart .. strstart+2] in the + /* Insert the string window[strstart .. strstart + 2] in the * dictionary, and set hash_head to the head of the hash chain: */ hash_head = NIL; @@ -2038,17 +2044,17 @@ local block_state deflate_slow(s, flush) uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; /* Do not insert strings in hash table beyond this. */ - check_match(s, s->strstart-1, s->prev_match, s->prev_length); + check_match(s, s->strstart - 1, s->prev_match, s->prev_length); - _tr_tally_dist(s, s->strstart -1 - s->prev_match, + _tr_tally_dist(s, s->strstart - 1 - s->prev_match, s->prev_length - MIN_MATCH, bflush); /* Insert in hash table all strings up to the end of the match. - * strstart-1 and strstart are already inserted. If there is not + * strstart - 1 and strstart are already inserted. If there is not * enough lookahead, the last two strings are not inserted in * the hash table. */ - s->lookahead -= s->prev_length-1; + s->lookahead -= s->prev_length - 1; s->prev_length -= 2; do { if (++s->strstart <= max_insert) { @@ -2066,8 +2072,8 @@ local block_state deflate_slow(s, flush) * single literal. If there was a match but the current match * is longer, truncate the previous match to a single literal. */ - Tracevv((stderr,"%c", s->window[s->strstart-1])); - _tr_tally_lit(s, s->window[s->strstart-1], bflush); + Tracevv((stderr,"%c", s->window[s->strstart - 1])); + _tr_tally_lit(s, s->window[s->strstart - 1], bflush); if (bflush) { FLUSH_BLOCK_ONLY(s, 0); } @@ -2085,8 +2091,8 @@ local block_state deflate_slow(s, flush) } Assert (flush != Z_NO_FLUSH, "no flush?"); if (s->match_available) { - Tracevv((stderr,"%c", s->window[s->strstart-1])); - _tr_tally_lit(s, s->window[s->strstart-1], bflush); + Tracevv((stderr,"%c", s->window[s->strstart - 1])); + _tr_tally_lit(s, s->window[s->strstart - 1], bflush); s->match_available = 0; } s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; @@ -2143,7 +2149,8 @@ local block_state deflate_rle(s, flush) if (s->match_length > s->lookahead) s->match_length = s->lookahead; } - Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); + Assert(scan <= s->window + (uInt)(s->window_size - 1), + "wild scan"); } /* Emit match if have run of MIN_MATCH or longer, else emit literal */ @@ -2158,7 +2165,7 @@ local block_state deflate_rle(s, flush) } else { /* No match, output a literal byte */ Tracevv((stderr,"%c", s->window[s->strstart])); - _tr_tally_lit (s, s->window[s->strstart], bflush); + _tr_tally_lit(s, s->window[s->strstart], bflush); s->lookahead--; s->strstart++; } @@ -2198,7 +2205,7 @@ local block_state deflate_huff(s, flush) /* Output a literal byte */ s->match_length = 0; Tracevv((stderr,"%c", s->window[s->strstart])); - _tr_tally_lit (s, s->window[s->strstart], bflush); + _tr_tally_lit(s, s->window[s->strstart], bflush); s->lookahead--; s->strstart++; if (bflush) FLUSH_BLOCK(s, 0); diff --git a/source/externals/zlib/src/gzlib.c b/source/externals/zlib/src/gzlib.c index dddaf268730..55da46a453f 100644 --- a/source/externals/zlib/src/gzlib.c +++ b/source/externals/zlib/src/gzlib.c @@ -30,7 +30,7 @@ local gzFile gz_open OF((const void *, int, const char *)); The gz_strwinerror function does not change the current setting of GetLastError. */ -char ZLIB_INTERNAL *gz_strwinerror (error) +char ZLIB_INTERNAL *gz_strwinerror(error) DWORD error; { static char buf[1024]; diff --git a/source/externals/zlib/src/gzread.c b/source/externals/zlib/src/gzread.c index 884c9bfe4cf..dd77381596c 100644 --- a/source/externals/zlib/src/gzread.c +++ b/source/externals/zlib/src/gzread.c @@ -157,11 +157,9 @@ local int gz_look(state) the output buffer is larger than the input buffer, which also assures space for gzungetc() */ state->x.next = state->out; - if (strm->avail_in) { - memcpy(state->x.next, strm->next_in, strm->avail_in); - state->x.have = strm->avail_in; - strm->avail_in = 0; - } + memcpy(state->x.next, strm->next_in, strm->avail_in); + state->x.have = strm->avail_in; + strm->avail_in = 0; state->how = COPY; state->direct = 1; return 0; diff --git a/source/externals/zlib/src/gzwrite.c b/source/externals/zlib/src/gzwrite.c index a8ffc8f53da..eb8a0e5893f 100644 --- a/source/externals/zlib/src/gzwrite.c +++ b/source/externals/zlib/src/gzwrite.c @@ -474,7 +474,7 @@ int ZEXPORTVA gzprintf(gzFile file, const char *format, ...) #else /* !STDC && !Z_HAVE_STDARG_H */ /* -- see zlib.h -- */ -int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, +int ZEXPORTVA gzprintf(file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) gzFile file; const char *format; diff --git a/source/externals/zlib/src/infback.c b/source/externals/zlib/src/infback.c index a390c58e816..babeaf1806f 100644 --- a/source/externals/zlib/src/infback.c +++ b/source/externals/zlib/src/infback.c @@ -66,6 +66,7 @@ int stream_size; state->window = window; state->wnext = 0; state->whave = 0; + state->sane = 1; return Z_OK; } @@ -605,25 +606,27 @@ void FAR *out_desc; break; case DONE: - /* inflate stream terminated properly -- write leftover output */ + /* inflate stream terminated properly */ ret = Z_STREAM_END; - if (left < state->wsize) { - if (out(out_desc, state->window, state->wsize - left)) - ret = Z_BUF_ERROR; - } goto inf_leave; case BAD: ret = Z_DATA_ERROR; goto inf_leave; - default: /* can't happen, but makes compilers happy */ + default: + /* can't happen, but makes compilers happy */ ret = Z_STREAM_ERROR; goto inf_leave; } - /* Return unused input */ + /* Write leftover output and return unused input */ inf_leave: + if (left < state->wsize) { + if (out(out_desc, state->window, state->wsize - left) && + ret == Z_STREAM_END) + ret = Z_BUF_ERROR; + } strm->next_in = next; strm->avail_in = have; return ret; diff --git a/source/externals/zlib/src/inflate.c b/source/externals/zlib/src/inflate.c index 7be8c63662a..8acbef44e99 100644 --- a/source/externals/zlib/src/inflate.c +++ b/source/externals/zlib/src/inflate.c @@ -168,6 +168,8 @@ int windowBits; /* extract wrap request from windowBits parameter */ if (windowBits < 0) { + if (windowBits < -15) + return Z_STREAM_ERROR; wrap = 0; windowBits = -windowBits; } @@ -764,8 +766,9 @@ int flush; if (copy > have) copy = have; if (copy) { if (state->head != Z_NULL && - state->head->extra != Z_NULL) { - len = state->head->extra_len - state->length; + state->head->extra != Z_NULL && + (len = state->head->extra_len - state->length) < + state->head->extra_max) { zmemcpy(state->head->extra + len, next, len + copy > state->head->extra_max ? state->head->extra_max - len : copy); diff --git a/source/externals/zlib/src/inftrees.c b/source/externals/zlib/src/inftrees.c index 09462a740b1..57d2793bec9 100644 --- a/source/externals/zlib/src/inftrees.c +++ b/source/externals/zlib/src/inftrees.c @@ -9,7 +9,7 @@ #define MAXBITS 15 const char inflate_copyright[] = - " inflate 1.2.12 Copyright 1995-2022 Mark Adler "; + " inflate 1.2.13 Copyright 1995-2022 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -62,7 +62,7 @@ unsigned short FAR *work; 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 199, 202}; + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 194, 65}; static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, diff --git a/source/externals/zlib/src/trees.c b/source/externals/zlib/src/trees.c index 3520d5abff6..5f305c47221 100644 --- a/source/externals/zlib/src/trees.c +++ b/source/externals/zlib/src/trees.c @@ -30,6 +30,7 @@ * Addison-Wesley, 1983. ISBN 0-201-06672-6. */ +/* @(#) $Id$ */ /* #define GEN_TREES_H */ @@ -192,7 +193,7 @@ local void send_bits(s, value, length) s->bits_sent += (ulg)length; /* If not enough room in bi_buf, use (valid) bits from bi_buf and - * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) + * (16 - bi_valid) bits from value, leaving (width - (16 - bi_valid)) * unused bits in value. */ if (s->bi_valid > (int)Buf_size - length) { @@ -255,7 +256,7 @@ local void tr_static_init() length = 0; for (code = 0; code < LENGTH_CODES-1; code++) { base_length[code] = length; - for (n = 0; n < (1< dist code (0..29) */ dist = 0; for (code = 0 ; code < 16; code++) { base_dist[code] = dist; - for (n = 0; n < (1<>= 7; /* from now on, all distances are divided by 128 */ for ( ; code < D_CODES; code++) { base_dist[code] = dist << 7; - for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) { + for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { _dist_code[256 + dist++] = (uch)code; } } - Assert (dist == 256, "tr_static_init: 256+dist != 512"); + Assert (dist == 256, "tr_static_init: 256 + dist != 512"); /* Construct the codes of the static literal tree */ for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; @@ -311,7 +312,7 @@ local void tr_static_init() } /* =========================================================================== - * Genererate the file trees.h describing the static trees. + * Generate the file trees.h describing the static trees. */ #ifdef GEN_TREES_H # ifndef ZLIB_DEBUG @@ -320,7 +321,7 @@ local void tr_static_init() # define SEPARATOR(i, last, width) \ ((i) == (last)? "\n};\n\n" : \ - ((i) % (width) == (width)-1 ? ",\n" : ", ")) + ((i) % (width) == (width) - 1 ? ",\n" : ", ")) void gen_trees_header() { @@ -457,7 +458,7 @@ local void pqdownheap(s, tree, k) while (j <= s->heap_len) { /* Set j to the smallest of the two sons: */ if (j < s->heap_len && - smaller(tree, s->heap[j+1], s->heap[j], s->depth)) { + smaller(tree, s->heap[j + 1], s->heap[j], s->depth)) { j++; } /* Exit if v is smaller than both sons */ @@ -506,7 +507,7 @@ local void gen_bitlen(s, desc) */ tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ - for (h = s->heap_max+1; h < HEAP_SIZE; h++) { + for (h = s->heap_max + 1; h < HEAP_SIZE; h++) { n = s->heap[h]; bits = tree[tree[n].Dad].Len + 1; if (bits > max_length) bits = max_length, overflow++; @@ -517,7 +518,7 @@ local void gen_bitlen(s, desc) s->bl_count[bits]++; xbits = 0; - if (n >= base) xbits = extra[n-base]; + if (n >= base) xbits = extra[n - base]; f = tree[n].Freq; s->opt_len += (ulg)f * (unsigned)(bits + xbits); if (stree) s->static_len += (ulg)f * (unsigned)(stree[n].Len + xbits); @@ -529,10 +530,10 @@ local void gen_bitlen(s, desc) /* Find the first bit length which could increase: */ do { - bits = max_length-1; + bits = max_length - 1; while (s->bl_count[bits] == 0) bits--; - s->bl_count[bits]--; /* move one leaf down the tree */ - s->bl_count[bits+1] += 2; /* move one overflow item as its brother */ + s->bl_count[bits]--; /* move one leaf down the tree */ + s->bl_count[bits + 1] += 2; /* move one overflow item as its brother */ s->bl_count[max_length]--; /* The brother of the overflow item also moves one step up, * but this does not affect bl_count[max_length] @@ -568,7 +569,7 @@ local void gen_bitlen(s, desc) * OUT assertion: the field code is set for all tree elements of non * zero code length. */ -local void gen_codes (tree, max_code, bl_count) +local void gen_codes(tree, max_code, bl_count) ct_data *tree; /* the tree to decorate */ int max_code; /* largest code with non zero frequency */ ushf *bl_count; /* number of codes at each bit length */ @@ -582,13 +583,13 @@ local void gen_codes (tree, max_code, bl_count) * without bit reversal. */ for (bits = 1; bits <= MAX_BITS; bits++) { - code = (code + bl_count[bits-1]) << 1; + code = (code + bl_count[bits - 1]) << 1; next_code[bits] = (ush)code; } /* Check that the bit counts in bl_count are consistent. The last code * must be all ones. */ - Assert (code + bl_count[MAX_BITS]-1 == (1<heap_len = 0, s->heap_max = HEAP_SIZE; @@ -651,7 +652,7 @@ local void build_tree(s, desc) } desc->max_code = max_code; - /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + /* The elements heap[heap_len/2 + 1 .. heap_len] are leaves of the tree, * establish sub-heaps of increasing lengths: */ for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n); @@ -699,7 +700,7 @@ local void build_tree(s, desc) * Scan a literal or distance tree to determine the frequencies of the codes * in the bit length tree. */ -local void scan_tree (s, tree, max_code) +local void scan_tree(s, tree, max_code) deflate_state *s; ct_data *tree; /* the tree to be scanned */ int max_code; /* and its largest code of non zero frequency */ @@ -713,10 +714,10 @@ local void scan_tree (s, tree, max_code) int min_count = 4; /* min repeat count */ if (nextlen == 0) max_count = 138, min_count = 3; - tree[max_code+1].Len = (ush)0xffff; /* guard */ + tree[max_code + 1].Len = (ush)0xffff; /* guard */ for (n = 0; n <= max_code; n++) { - curlen = nextlen; nextlen = tree[n+1].Len; + curlen = nextlen; nextlen = tree[n + 1].Len; if (++count < max_count && curlen == nextlen) { continue; } else if (count < min_count) { @@ -744,7 +745,7 @@ local void scan_tree (s, tree, max_code) * Send a literal or distance tree in compressed form, using the codes in * bl_tree. */ -local void send_tree (s, tree, max_code) +local void send_tree(s, tree, max_code) deflate_state *s; ct_data *tree; /* the tree to be scanned */ int max_code; /* and its largest code of non zero frequency */ @@ -757,11 +758,11 @@ local void send_tree (s, tree, max_code) int max_count = 7; /* max repeat count */ int min_count = 4; /* min repeat count */ - /* tree[max_code+1].Len = -1; */ /* guard already set */ + /* tree[max_code + 1].Len = -1; */ /* guard already set */ if (nextlen == 0) max_count = 138, min_count = 3; for (n = 0; n <= max_code; n++) { - curlen = nextlen; nextlen = tree[n+1].Len; + curlen = nextlen; nextlen = tree[n + 1].Len; if (++count < max_count && curlen == nextlen) { continue; } else if (count < min_count) { @@ -772,13 +773,13 @@ local void send_tree (s, tree, max_code) send_code(s, curlen, s->bl_tree); count--; } Assert(count >= 3 && count <= 6, " 3_6?"); - send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2); + send_code(s, REP_3_6, s->bl_tree); send_bits(s, count - 3, 2); } else if (count <= 10) { - send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3); + send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count - 3, 3); } else { - send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7); + send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count - 11, 7); } count = 0; prevlen = curlen; if (nextlen == 0) { @@ -806,8 +807,8 @@ local int build_bl_tree(s) /* Build the bit length tree: */ build_tree(s, (tree_desc *)(&(s->bl_desc))); - /* opt_len now includes the length of the tree representations, except - * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + /* opt_len now includes the length of the tree representations, except the + * lengths of the bit lengths codes and the 5 + 5 + 4 bits for the counts. */ /* Determine the number of bit length codes to send. The pkzip format @@ -818,7 +819,7 @@ local int build_bl_tree(s) if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; } /* Update opt_len to include the bit length tree and counts */ - s->opt_len += 3*((ulg)max_blindex+1) + 5+5+4; + s->opt_len += 3*((ulg)max_blindex + 1) + 5 + 5 + 4; Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", s->opt_len, s->static_len)); @@ -840,19 +841,19 @@ local void send_all_trees(s, lcodes, dcodes, blcodes) Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, "too many codes"); Tracev((stderr, "\nbl counts: ")); - send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */ - send_bits(s, dcodes-1, 5); - send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */ + send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes - 1, 5); + send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ for (rank = 0; rank < blcodes; rank++) { Tracev((stderr, "\nbl code %2d ", bl_order[rank])); send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); } Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); - send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */ + send_tree(s, (ct_data *)s->dyn_ltree, lcodes - 1); /* literal tree */ Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); - send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */ + send_tree(s, (ct_data *)s->dyn_dtree, dcodes - 1); /* distance tree */ Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); } @@ -865,7 +866,7 @@ void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last) ulg stored_len; /* length of input block */ int last; /* one if this is the last block for a file */ { - send_bits(s, (STORED_BLOCK<<1)+last, 3); /* send block type */ + send_bits(s, (STORED_BLOCK<<1) + last, 3); /* send block type */ bi_windup(s); /* align on byte boundary */ put_short(s, (ush)stored_len); put_short(s, (ush)~stored_len); @@ -876,7 +877,7 @@ void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last) s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; s->compressed_len += (stored_len + 4) << 3; s->bits_sent += 2*16; - s->bits_sent += stored_len<<3; + s->bits_sent += stored_len << 3; #endif } @@ -942,14 +943,17 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) max_blindex = build_bl_tree(s); /* Determine the best encoding. Compute the block lengths in bytes. */ - opt_lenb = (s->opt_len+3+7)>>3; - static_lenb = (s->static_len+3+7)>>3; + opt_lenb = (s->opt_len + 3 + 7) >> 3; + static_lenb = (s->static_len + 3 + 7) >> 3; Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, s->sym_next / 3)); - if (static_lenb <= opt_lenb) opt_lenb = static_lenb; +#ifndef FORCE_STATIC + if (static_lenb <= opt_lenb || s->strategy == Z_FIXED) +#endif + opt_lenb = static_lenb; } else { Assert(buf != (char*)0, "lost buf"); @@ -959,7 +963,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) #ifdef FORCE_STORED if (buf != (char*)0) { /* force stored block */ #else - if (stored_len+4 <= opt_lenb && buf != (char*)0) { + if (stored_len + 4 <= opt_lenb && buf != (char*)0) { /* 4: two words for the lengths */ #endif /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. @@ -970,21 +974,17 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) */ _tr_stored_block(s, buf, stored_len, last); -#ifdef FORCE_STATIC - } else if (static_lenb >= 0) { /* force static trees */ -#else - } else if (s->strategy == Z_FIXED || static_lenb == opt_lenb) { -#endif - send_bits(s, (STATIC_TREES<<1)+last, 3); + } else if (static_lenb == opt_lenb) { + send_bits(s, (STATIC_TREES<<1) + last, 3); compress_block(s, (const ct_data *)static_ltree, (const ct_data *)static_dtree); #ifdef ZLIB_DEBUG s->compressed_len += 3 + s->static_len; #endif } else { - send_bits(s, (DYN_TREES<<1)+last, 3); - send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, - max_blindex+1); + send_bits(s, (DYN_TREES<<1) + last, 3); + send_all_trees(s, s->l_desc.max_code + 1, s->d_desc.max_code + 1, + max_blindex + 1); compress_block(s, (const ct_data *)s->dyn_ltree, (const ct_data *)s->dyn_dtree); #ifdef ZLIB_DEBUG @@ -1003,22 +1003,22 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) s->compressed_len += 7; /* align on byte boundary */ #endif } - Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, - s->compressed_len-7*last)); + Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len >> 3, + s->compressed_len - 7*last)); } /* =========================================================================== * Save the match info and tally the frequency counts. Return true if * the current block must be flushed. */ -int ZLIB_INTERNAL _tr_tally (s, dist, lc) +int ZLIB_INTERNAL _tr_tally(s, dist, lc) deflate_state *s; unsigned dist; /* distance of matched string */ - unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ + unsigned lc; /* match length - MIN_MATCH or unmatched char (dist==0) */ { - s->sym_buf[s->sym_next++] = dist; - s->sym_buf[s->sym_next++] = dist >> 8; - s->sym_buf[s->sym_next++] = lc; + s->sym_buf[s->sym_next++] = (uch)dist; + s->sym_buf[s->sym_next++] = (uch)(dist >> 8); + s->sym_buf[s->sym_next++] = (uch)lc; if (dist == 0) { /* lc is the unmatched char */ s->dyn_ltree[lc].Freq++; @@ -1030,7 +1030,7 @@ int ZLIB_INTERNAL _tr_tally (s, dist, lc) (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); - s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; + s->dyn_ltree[_length_code[lc] + LITERALS + 1].Freq++; s->dyn_dtree[d_code(dist)].Freq++; } return (s->sym_next == s->sym_end); @@ -1060,7 +1060,7 @@ local void compress_block(s, ltree, dtree) } else { /* Here, lc is the match length - MIN_MATCH */ code = _length_code[lc]; - send_code(s, code+LITERALS+1, ltree); /* send the length code */ + send_code(s, code + LITERALS + 1, ltree); /* send length code */ extra = extra_lbits[code]; if (extra != 0) { lc -= base_length[code]; @@ -1176,6 +1176,6 @@ local void bi_windup(s) s->bi_buf = 0; s->bi_valid = 0; #ifdef ZLIB_DEBUG - s->bits_sent = (s->bits_sent+7) & ~7; + s->bits_sent = (s->bits_sent + 7) & ~7; #endif } diff --git a/source/externals/zlib/src/uncompr.c b/source/externals/zlib/src/uncompr.c index f2a187eef23..f9532f46c1a 100644 --- a/source/externals/zlib/src/uncompr.c +++ b/source/externals/zlib/src/uncompr.c @@ -3,6 +3,7 @@ * For conditions of distribution and use, see copyright notice in zlib.h */ +/* @(#) $Id$ */ #define ZLIB_INTERNAL #include "zlib.h" @@ -23,7 +24,7 @@ Z_DATA_ERROR if the input data was corrupted, including if the input data is an incomplete zlib stream. */ -int ZEXPORT uncompress2 (dest, destLen, source, sourceLen) +int ZEXPORT uncompress2(dest, destLen, source, sourceLen) Bytef *dest; uLongf *destLen; const Bytef *source; @@ -82,7 +83,7 @@ int ZEXPORT uncompress2 (dest, destLen, source, sourceLen) err; } -int ZEXPORT uncompress (dest, destLen, source, sourceLen) +int ZEXPORT uncompress(dest, destLen, source, sourceLen) Bytef *dest; uLongf *destLen; const Bytef *source; diff --git a/source/externals/zlib/src/zconf.h.cmakein b/source/externals/zlib/src/zconf.h.cmakein index 8a4ef9fd3be..247ba2461dd 100644 --- a/source/externals/zlib/src/zconf.h.cmakein +++ b/source/externals/zlib/src/zconf.h.cmakein @@ -3,6 +3,7 @@ * For conditions of distribution and use, see copyright notice in zlib.h */ +/* @(#) $Id$ */ #ifndef ZCONF_H #define ZCONF_H @@ -39,6 +40,9 @@ # define crc32 z_crc32 # define crc32_combine z_crc32_combine # define crc32_combine64 z_crc32_combine64 +# define crc32_combine_gen z_crc32_combine_gen +# define crc32_combine_gen64 z_crc32_combine_gen64 +# define crc32_combine_op z_crc32_combine_op # define crc32_z z_crc32_z # define deflate z_deflate # define deflateBound z_deflateBound @@ -350,6 +354,9 @@ # ifdef FAR # undef FAR # endif +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif # include /* No need for _export, use ZLIB.DEF instead. */ /* For complete Windows compatibility, use WINAPI, not __stdcall. */ @@ -468,11 +475,18 @@ typedef uLong FAR uLongf; # undef _LARGEFILE64_SOURCE #endif -#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H) -# define Z_HAVE_UNISTD_H +#ifndef Z_HAVE_UNISTD_H +# ifdef __WATCOMC__ +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_HAVE_UNISTD_H +# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32) +# define Z_HAVE_UNISTD_H +# endif #endif #ifndef Z_SOLO -# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) +# if defined(Z_HAVE_UNISTD_H) # include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ # ifdef VMS # include /* for off_t */ diff --git a/source/externals/zlib/src/zutil.c b/source/externals/zlib/src/zutil.c index 79baf5885dd..9543ae825e3 100644 --- a/source/externals/zlib/src/zutil.c +++ b/source/externals/zlib/src/zutil.c @@ -3,6 +3,7 @@ * For conditions of distribution and use, see copyright notice in zlib.h */ +/* @(#) $Id$ */ #include "zutil.h" #ifndef Z_SOLO @@ -60,9 +61,11 @@ uLong ZEXPORT zlibCompileFlags() #ifdef ZLIB_DEBUG flags += 1 << 8; #endif + /* #if defined(ASMV) || defined(ASMINF) flags += 1 << 9; #endif + */ #ifdef ZLIB_WINAPI flags += 1 << 10; #endif @@ -118,7 +121,7 @@ uLong ZEXPORT zlibCompileFlags() # endif int ZLIB_INTERNAL z_verbose = verbose; -void ZLIB_INTERNAL z_error (m) +void ZLIB_INTERNAL z_error(m) char *m; { fprintf(stderr, "%s\n", m); @@ -213,7 +216,7 @@ local ptr_table table[MAX_PTR]; * a protected system like OS/2. Use Microsoft C instead. */ -voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size) +voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, unsigned size) { voidpf buf; ulg bsize = (ulg)items*size; @@ -239,7 +242,7 @@ voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, unsigned items, unsigned size) return buf; } -void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) +void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) { int n; @@ -276,13 +279,13 @@ void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) # define _hfree hfree #endif -voidpf ZLIB_INTERNAL zcalloc (voidpf opaque, uInt items, uInt size) +voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, uInt items, uInt size) { (void)opaque; return _halloc((long)items, size); } -void ZLIB_INTERNAL zcfree (voidpf opaque, voidpf ptr) +void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) { (void)opaque; _hfree(ptr); @@ -301,7 +304,7 @@ extern voidp calloc OF((uInt items, uInt size)); extern void free OF((voidpf ptr)); #endif -voidpf ZLIB_INTERNAL zcalloc (opaque, items, size) +voidpf ZLIB_INTERNAL zcalloc(opaque, items, size) voidpf opaque; unsigned items; unsigned size; @@ -311,7 +314,7 @@ voidpf ZLIB_INTERNAL zcalloc (opaque, items, size) (voidpf)calloc(items, size); } -void ZLIB_INTERNAL zcfree (opaque, ptr) +void ZLIB_INTERNAL zcfree(opaque, ptr) voidpf opaque; voidpf ptr; { diff --git a/source/g3tog4/GNUmakefile b/source/g3tog4/GNUmakefile deleted file mode 100644 index 310ee6432b7..00000000000 --- a/source/g3tog4/GNUmakefile +++ /dev/null @@ -1,192 +0,0 @@ -############################################################################### -### GNUmakefile for the G3 to G4 conversion package. -### -### T. Wenaus 20/11/1995 -### Uses chunks of John Allison's generic makefiles. -### -### The presence of Fortran and several standalone programs -### make this package non-generic enough to require its -### own makefile. -### -############################################################################### - -G4TARGET := rztog4 - -name := G3toG4 - -ifndef G4INSTALL - G4INSTALL := ../.. -endif - -GLOBLIBS = libG4tracking.lib libG4processes.lib libG4digits_hits.lib -GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG3TOG4_EXPORT -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/solids/CSG/include \ - -I$(G4BASE)/geometry/solids/specific/include \ - -I$(G4BASE)/geometry/solids/Boolean/include \ - -I$(G4BASE)/geometry/solids/BREPS/include \ - -I$(G4BASE)/graphics_reps/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/general/include \ - -I$(G4BASE)/processes/decay/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/tracking/include \ - -I$(G4BASE)/digits_hits/detector/include \ - -I$(G4BASE)/digits_hits/hits/include - -### kludge for AIX - -ifeq ($(FC),xlf) - cpp_include_flag=-WF,-I -### -d writes out F*.f file - FCFLAGS += -d $(patsubst -I%,$(cpp_include_flag)%,-Iinclude) -### xlf prepends .f name with F - dotf_prepend=F -else -### other compilers do not prepend .f name with F - dotf_prepend= - FCFLAGS += -Iinclude -endif - -.SUFFIXES: -.SUFFIXES: .a .o .cc .cxx .c .f .F .d - -### --------------------- vpaths ---------------------------------------------- - -vpath %.hh $(patsubst -I%,%,$(filter -I%,$(CPPFLAGS))) -vpath %.inc $(patsubst -I%,%,$(filter -I%,$(CPPFLAGS))) - -G4LIBDIR := $(G4LIB)/$(G4SYSTEM) -G4TMPDIR := $(G4TMP)/$(G4SYSTEM)/$(name) -G4BINDIR := $(G4BIN)/$(G4SYSTEM) - -Fbinsources = src/$(G4TARGET).F -Fbinobjects = $(patsubst src/%.F,$(G4TMPDIR)/%.o,$(Fbinsources)) -Flibsources = $(filter-out $(Fbinsources),$(wildcard src/*.F)) -Flibobjects = $(patsubst src/%.F,$(G4TMPDIR)/%.o,$(Flibsources)) -Fdependencies = $(patsubst %.o,%.d,$(Fbinobjects) $(Flibobjects)) - -ifdef G3G4DEBUG - CPPFLAGS += -DG3G4DEBUG -endif -ifdef G3G4_NO_REFLECTION - CPPFLAGS += -DG3G4_NO_REFLECTION -endif - -############################################################################### -### user beware! .rz files made with cernlib v 95a cannot be read with later -### versions. You can use cernlib -v option to specify the cernlib version -############################################################################### - -### .PHONY targets are executed regardless of time-stamp of any file of same -### name - -.PHONY: global all lib bin libc libF - -###--------------------- section to define explicit rules -------------------- - -lib: libc - -global: cleanf lib bin - -all: lib - - -ifneq ($(G4LIB_BUILD_SHARED),) -libc : $(G4LIBDIR)/lib$(name).$(SHEXT) -else -libc : $(G4LIBDIR)/lib$(name).a -endif - @echo $@ stage done - -libF : $(G4LIBDIR)/lib$(name)F.a - @echo $@ stage done - -bin: $(G4BINDIR)/$(G4TARGET) - @echo $@ stage done - -### Make Fortran library. - -$(G4LIBDIR)/lib$(name)F.a: $(Flibobjects) - @if [ ! -d $(G4LIBDIR) ] ; then mkdir $(G4LIBDIR) ;fi - @echo Creating/replacing object files in lib$(name)F.a - @ar r $@ $? - @if [ -f /usr/bin/ranlib -o -f /bin/ranlib ] ; then \ - echo Running ranlib on lib$(name)F.a ; ranlib $@ ; fi - -### rztog4: Standalone Fortran program that reads an RZ file and converts -### the geometry and other init structures therein to G4. A call -### list file and G4 C++ code are generated; either can be used -### on the G4 side to build the geometry. - -$(G4BINDIR)/$(G4TARGET) : $(Fbinobjects) $(G4LIBDIR)/lib$(name)F.a - @if [ ! -d $(G4BINDIR) ] ; then mkdir $(G4BINDIR) ;fi - @echo Linking $(G4TARGET) - $(RM) $@ - echo $(G4TARGET) dependencies: $^ - $(FC) $(Fbinobjects) -o $@ $(G4LIBDIR)/lib$(name)F.a $(shell cernlib -v pro geant321 packlib) - @echo Finished linking $(G4TARGET) - -###-------------------- locally defined pattern rules ------------------------ - -### Make the .o files from src/*.F -# need to wait until libc is done, before strting to compile fortran -# or building libc may pick up fortran compiled objects into libc -$(G4TMPDIR)/%.o : src/%.F libc - $(FC) $(FCFLAGS) -o $(G4TMPDIR)/$(*F).o -c src/$(*F).F - @file=$(dotf_prepend)$(*F).f;\ - if [ -f $$file ]; then echo Moving $$file to $(G4TMPDIR)/$$file; \ - mv $$file $(G4TMPDIR)/$$file; fi - -### Move the .f files -$(G4TMPDIR)/%.f : %.f - @echo Moving $< to $@ - @mv $< $@ - -### --------------------- .d files -------------------------------------------- - -### Make the .d file(s) and include it(them). -### g++ -MM is good at this, except it forgets the subdirectory (hence -### the echo $(@D)/). - -$(G4TMPDIR)/%.d: src/%.F - @if [ ! -d $(G4TMP)/$(G4SYSTEM) ] ; then mkdir $(G4TMP)/$(G4SYSTEM) ;fi - @if [ ! -d $(G4TMPDIR) ] ; then mkdir $(G4TMPDIR) ;fi - @if test -f $@ ; then rm -f $@; fi - @echo $(G4LIBDIR)/lib$(name)F.a\($*.o\) $@ " : " $? "\\" > $@ - @if test -f $< ; then awk '$$1=="#include" { print $$2 " \\" }' $< | tr -d \"\>\< >> $@ ; echo >> $@ ; fi - -###@if test -f $< ; then echo Making $@ depend file for $<; awk '$$1=="#include" { print $$2 " \\" }' $< | tr -d \"\>\< >> $@ ; echo >> $@ ; fi - -### --------------------- end of pattern rules -------------------------------- - --include $(Fdependencies) - -clean:: cleanf - -cleanf: - @$(RM) $(Flibobjects) - @$(RM) $(Fbinobjects) - @$(RM) $(Fdependencies) - @$(RM) $(G4BINDIR)/$(G4TARGET) - -include $(G4INSTALL)/config/common.gmk - -test1: - @echo $(sources) - @echo $(objects) - @echo $(dependencies) diff --git a/source/g3tog4/History b/source/g3tog4/History index bdcacff536d..ac52bbcfbac 100644 --- a/source/g3tog4/History +++ b/source/g3tog4/History @@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2022-12-12 Ben Morgan (g3tog4-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-11-16 Gabriele Cosmo (g3tog4-V11-00-04) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/geometry/GNUmakefile b/source/geometry/GNUmakefile deleted file mode 100644 index 5ecb976fd90..00000000000 --- a/source/geometry/GNUmakefile +++ /dev/null @@ -1,21 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for geometry. Gabriele Cosmo, 16/11/96. -# -------------------------------------------------------------- - -name := G4geometry - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -GLOBLIBS = libG4graphics_reps.lib libG4intercoms.lib libG4materials.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk - -SUBDIRS = management volumes magneticfield navigation biasing divisions -SUBDIRS += solids/CSG solids/specific solids/Boolean -SUBLIBS = G4geometrymng G4volumes G4magneticfield -SUBLIBS += G4navigation G4geombias G4geomdivision -SUBLIBS += G4csg G4specsolids G4geomBoolean - -include $(G4INSTALL)/config/globlib.gmk diff --git a/source/geometry/History b/source/geometry/History index 97be96e7ff2..0a80a892a9e 100644 --- a/source/geometry/History +++ b/source/geometry/History @@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2022-12-12 Ben Morgan (geometry-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-11-10 Gabriele Cosmo (geometry-V11-00-02) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/geometry/biasing/GNUmakefile b/source/geometry/biasing/GNUmakefile deleted file mode 100644 index 0cf1f9d6352..00000000000 --- a/source/geometry/biasing/GNUmakefile +++ /dev/null @@ -1,25 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for geometry/biasing library. Gabriele Cosmo, 25/03/02. -# -------------------------------------------------------------------- - -name := G4geombias - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4GEOM_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/geometry/solids/CSG/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/graphics_reps/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/geometry/biasing/History b/source/geometry/biasing/History index c1c9f41dd1a..69deee78504 100644 --- a/source/geometry/biasing/History +++ b/source/geometry/biasing/History @@ -1,9 +1,17 @@ # Category geombias History See `CONTRIBUTING.rst` for details of **required** info/format for each entry, -which **must** added in reverse chronological order (newest at the top). It must **not** -be used as a substitute for writing good git commit messages! +which **must** added in reverse chronological order (newest at the top). +It must **not** be used as a substitute for writing good git commit messages! +------------------------------------------------------------------------------- + +## 2023-06-12 Gabriele Cosmo (geombias-V11-01-01) +- Use G4AutoLock in G4IStore and G4ImportanceAlgorithm instead of static + mutex data member. + +## 2023-05-09 Gabriele Cosmo (geombias-V11-01-00) +- Applied clang-tidy fixes (readability, modernization, performance, ...). ## 2021-12-10 Ben Morgan (geombias-V11-00-00) - Change to new Markdown History format diff --git a/source/geometry/biasing/include/G4IStore.hh b/source/geometry/biasing/include/G4IStore.hh index d94a4246f47..732822b978b 100644 --- a/source/geometry/biasing/include/G4IStore.hh +++ b/source/geometry/biasing/include/G4IStore.hh @@ -56,11 +56,11 @@ class G4IStore : public G4VIStore static G4IStore* GetInstance(const G4String& ParallelWorldName); // return ptr to singleton instance of the class. - virtual G4double GetImportance(const G4GeometryCell& gCell) const; + G4double GetImportance(const G4GeometryCell& gCell) const override; // derive an importance value of a "cell" addressed by a // G4GeometryCell from the store. - virtual G4bool IsKnown(const G4GeometryCell& gCell) const; + G4bool IsKnown(const G4GeometryCell& gCell) const override; // returns true if the gCell is in the store, else false void Clear(); @@ -71,7 +71,7 @@ class G4IStore : public G4VIStore void SetParallelWorldVolume(const G4String& paraName); // set a reference to parallel world volume of the "importance" geometry - virtual const G4VPhysicalVolume& GetWorldVolume() const; + const G4VPhysicalVolume& GetWorldVolume() const override; // return a reference to the world volume of the "importance" geometry virtual const G4VPhysicalVolume* GetParallelWorldVolumePointer() const; @@ -98,7 +98,7 @@ class G4IStore : public G4VIStore explicit G4IStore(const G4String& ParallelWorldName); // initialise the importance store for the given geometry - ~G4IStore(); + ~G4IStore() override; // destructor private: @@ -115,11 +115,6 @@ class G4IStore : public G4VIStore mutable G4GeometryCellImportance::const_iterator fCurrentIterator; static G4ThreadLocal G4IStore* fInstance; - -#ifdef G4MULTITHREADED - static G4Mutex IStoreMutex; -#endif - }; #endif diff --git a/source/geometry/biasing/include/G4ImportanceAlgorithm.hh b/source/geometry/biasing/include/G4ImportanceAlgorithm.hh index 7b970c3ea6e..e012cff5104 100644 --- a/source/geometry/biasing/include/G4ImportanceAlgorithm.hh +++ b/source/geometry/biasing/include/G4ImportanceAlgorithm.hh @@ -45,12 +45,12 @@ class G4ImportanceAlgorithm : public G4VImportanceAlgorithm G4ImportanceAlgorithm(); // simple construction - virtual ~G4ImportanceAlgorithm(); + ~G4ImportanceAlgorithm() override; // repeate warning if triggered - virtual G4Nsplit_Weight Calculate(G4double ipre, + G4Nsplit_Weight Calculate(G4double ipre, G4double ipost, - G4double init_w) const; + G4double init_w) const override; // calculate the number of tracks and their weight according to the // pre and post importance value and the weight of the mother track @@ -62,11 +62,6 @@ class G4ImportanceAlgorithm : public G4VImportanceAlgorithm private: mutable G4bool fWarned = false; - -#ifdef G4MULTITHREADED - static G4Mutex ImportanceMutex; -#endif - }; #endif diff --git a/source/geometry/biasing/include/G4WeightWindowAlgorithm.hh b/source/geometry/biasing/include/G4WeightWindowAlgorithm.hh index bcf730ead20..b97f3bb6e4f 100644 --- a/source/geometry/biasing/include/G4WeightWindowAlgorithm.hh +++ b/source/geometry/biasing/include/G4WeightWindowAlgorithm.hh @@ -58,10 +58,10 @@ class G4WeightWindowAlgorithm : public G4VWeightWindowAlgorithm G4double survivalFactor = 3, G4int maxNumberOfSplits = 5); - virtual ~G4WeightWindowAlgorithm(); + ~G4WeightWindowAlgorithm() override; - virtual G4Nsplit_Weight Calculate(G4double init_w, - G4double lowerWeightBound) const; + G4Nsplit_Weight Calculate(G4double init_w, + G4double lowerWeightBound) const override; // calculate number of tracks and their weight according // to the initial track weight and the lower energy bound diff --git a/source/geometry/biasing/include/G4WeightWindowStore.hh b/source/geometry/biasing/include/G4WeightWindowStore.hh index 6ae4357385d..ed3bb12396d 100644 --- a/source/geometry/biasing/include/G4WeightWindowStore.hh +++ b/source/geometry/biasing/include/G4WeightWindowStore.hh @@ -52,12 +52,12 @@ class G4WeightWindowStore: public G4VWeightWindowStore static G4WeightWindowStore* GetInstance(const G4String& ParallelWorldName); // return ptr to singleton instance of the class - virtual G4double GetLowerWeight(const G4GeometryCell& gCell, - G4double partEnergy) const; + G4double GetLowerWeight(const G4GeometryCell& gCell, + G4double partEnergy) const override; // derive a lower weight bound value of a "cell" addressed by a // G4GeometryCell and the corresponding energy from the store - virtual G4bool IsKnown(const G4GeometryCell &gCell) const; + G4bool IsKnown(const G4GeometryCell &gCell) const override; // returns true if the gCell is in the store, else false void Clear(); @@ -67,7 +67,7 @@ class G4WeightWindowStore: public G4VWeightWindowStore void SetParallelWorldVolume(const G4String& paraName); // set a pointer to parallel world volume of the weightwindow geometry - virtual const G4VPhysicalVolume& GetWorldVolume() const; + const G4VPhysicalVolume& GetWorldVolume() const override; // return a reference to the world volume of the weightwindow geometry virtual const G4VPhysicalVolume* GetParallelWorldVolumePointer() const; // return a pointer to parallel world volume of the weightwindow geometry @@ -89,7 +89,7 @@ class G4WeightWindowStore: public G4VWeightWindowStore explicit G4WeightWindowStore(const G4String& ParallelWorldName); // initialise the weight window store for the given geometry - ~G4WeightWindowStore(); + ~G4WeightWindowStore() override; // destructor private: diff --git a/source/geometry/biasing/src/G4GeometryCell.cc b/source/geometry/biasing/src/G4GeometryCell.cc index 57a2d3ce88e..52ef2709784 100644 --- a/source/geometry/biasing/src/G4GeometryCell.cc +++ b/source/geometry/biasing/src/G4GeometryCell.cc @@ -33,10 +33,11 @@ G4GeometryCell::G4GeometryCell(const G4VPhysicalVolume& aVolume, G4int RepNum) : fVPhysicalVolume(&aVolume), fRepNum(RepNum) -{} +{ +} + -G4GeometryCell::~G4GeometryCell() -{} +G4GeometryCell::~G4GeometryCell() = default; const G4VPhysicalVolume& G4GeometryCell::GetPhysicalVolume() const @@ -51,9 +52,8 @@ G4int G4GeometryCell::GetReplicaNumber() const G4GeometryCell::G4GeometryCell(const G4GeometryCell& rhs) - : fVPhysicalVolume(rhs.fVPhysicalVolume), fRepNum(rhs.fRepNum) -{ -} + += default; G4GeometryCell& G4GeometryCell::operator=(const G4GeometryCell& rhs) { diff --git a/source/geometry/biasing/src/G4GeometryCellComp.cc b/source/geometry/biasing/src/G4GeometryCellComp.cc index 0c3a89a28f8..6874f173b86 100644 --- a/source/geometry/biasing/src/G4GeometryCellComp.cc +++ b/source/geometry/biasing/src/G4GeometryCellComp.cc @@ -31,9 +31,8 @@ #include "G4GeometryCellComp.hh" #include "G4GeometryCell.hh" -G4GeometryCellComp::G4GeometryCellComp() -{ -} +G4GeometryCellComp::G4GeometryCellComp() = default; + G4bool G4GeometryCellComp::operator() (const G4GeometryCell& k1, const G4GeometryCell& k2) const diff --git a/source/geometry/biasing/src/G4GeometryCellImportance.cc b/source/geometry/biasing/src/G4GeometryCellImportance.cc index 6dfdd125cd0..43e89b9b73f 100644 --- a/source/geometry/biasing/src/G4GeometryCellImportance.cc +++ b/source/geometry/biasing/src/G4GeometryCellImportance.cc @@ -34,10 +34,10 @@ std::ostream& operator<<(std::ostream& out, const G4GeometryCellImportance& gCelli) { - for (auto it = gCelli.cbegin(); it != gCelli.cend(); ++it) + for (const auto & it : gCelli) { - out << (*it).first << ", importance = "; - out << (*it).second << "\n"; + out << it.first << ", importance = "; + out << it.second << "\n"; } return out; } diff --git a/source/geometry/biasing/src/G4GeometryCellStep.cc b/source/geometry/biasing/src/G4GeometryCellStep.cc index 6c742d26e3c..55b1b5d9448 100644 --- a/source/geometry/biasing/src/G4GeometryCellStep.cc +++ b/source/geometry/biasing/src/G4GeometryCellStep.cc @@ -37,5 +37,4 @@ G4GeometryCellStep::G4GeometryCellStep(const G4GeometryCell& preCell, } G4GeometryCellStep::~G4GeometryCellStep() -{ -} += default; diff --git a/source/geometry/biasing/src/G4IStore.cc b/source/geometry/biasing/src/G4IStore.cc index 5ed8ead6a12..1adbb9ed371 100644 --- a/source/geometry/biasing/src/G4IStore.cc +++ b/source/geometry/biasing/src/G4IStore.cc @@ -36,9 +36,12 @@ #include "G4LogicalVolume.hh" #include "G4TransportationManager.hh" -#ifdef G4MULTITHREADED -G4Mutex G4IStore::IStoreMutex = G4MUTEX_INITIALIZER; -#endif +#include "G4AutoLock.hh" + +namespace +{ + G4Mutex IStoreMutex = G4MUTEX_INITIALIZER; +} // *************************************************************************** // Static class variable: ptr to single instance of class @@ -63,9 +66,7 @@ G4IStore::G4IStore(const G4String& ParallelWorldName) #endif } -G4IStore::~G4IStore() -{ -} +G4IStore::~G4IStore() = default; void G4IStore::Clear() { @@ -161,9 +162,7 @@ void G4IStore::ChangeImportance(G4double importance, G4double G4IStore::GetImportance(const G4VPhysicalVolume& aVolume, G4int aRepNum) const { -#ifdef G4MULTITHREADED - G4MUTEXLOCK(&G4IStore::IStoreMutex); -#endif + G4AutoLock l(&IStoreMutex); SetInternalIterator(G4GeometryCell(aVolume, aRepNum)); auto gCellIterator = fCurrentIterator; if (gCellIterator == fGeometryCelli.cend()) @@ -172,17 +171,14 @@ G4double G4IStore::GetImportance(const G4VPhysicalVolume& aVolume, return 0.; } G4double importance_value = (*fCurrentIterator).second; -#ifdef G4MULTITHREADED - G4MUTEXUNLOCK(&G4IStore::IStoreMutex); -#endif + l.unlock(); + return importance_value; } G4double G4IStore::GetImportance(const G4GeometryCell& gCell) const { -#ifdef G4MULTITHREADED - G4MUTEXLOCK(&G4IStore::IStoreMutex); -#endif + G4AutoLock l(&IStoreMutex); SetInternalIterator(gCell); auto gCellIterator = fCurrentIterator; if (gCellIterator == fGeometryCelli.cend()) @@ -195,18 +191,14 @@ G4double G4IStore::GetImportance(const G4GeometryCell& gCell) const return 0.; } G4double importance_value = (*fCurrentIterator).second; -#ifdef G4MULTITHREADED - G4MUTEXUNLOCK(&G4IStore::IStoreMutex); -#endif + l.unlock(); + return importance_value; - // return (*fCurrentIterator).second; } G4bool G4IStore::IsKnown(const G4GeometryCell& gCell) const { -#ifdef G4MULTITHREADED - G4MUTEXLOCK(&G4IStore::IStoreMutex); -#endif + G4AutoLock l(&IStoreMutex); G4bool inWorldKnown(IsInWorld(gCell.GetPhysicalVolume())); if ( inWorldKnown ) @@ -214,9 +206,8 @@ G4bool G4IStore::IsKnown(const G4GeometryCell& gCell) const SetInternalIterator(gCell); inWorldKnown = (fCurrentIterator != fGeometryCelli.cend()); } -#ifdef G4MULTITHREADED - G4MUTEXUNLOCK(&G4IStore::IStoreMutex); -#endif + l.unlock(); + return inWorldKnown; } diff --git a/source/geometry/biasing/src/G4ImportanceAlgorithm.cc b/source/geometry/biasing/src/G4ImportanceAlgorithm.cc index efd7ee99b82..23d4aa7ab6d 100644 --- a/source/geometry/biasing/src/G4ImportanceAlgorithm.cc +++ b/source/geometry/biasing/src/G4ImportanceAlgorithm.cc @@ -29,34 +29,29 @@ // ---------------------------------------------------------------------- #include "G4Types.hh" -#include #include "Randomize.hh" #include "G4Threading.hh" +#include "G4AutoLock.hh" #include "G4ImportanceAlgorithm.hh" -#ifdef G4MULTITHREADED -G4Mutex G4ImportanceAlgorithm::ImportanceMutex = G4MUTEX_INITIALIZER; -#endif +#include -G4ImportanceAlgorithm::G4ImportanceAlgorithm() +namespace { + G4Mutex ImportanceMutex = G4MUTEX_INITIALIZER; } -G4ImportanceAlgorithm::~G4ImportanceAlgorithm() -{ -} +G4ImportanceAlgorithm::G4ImportanceAlgorithm() = default; + +G4ImportanceAlgorithm::~G4ImportanceAlgorithm() = default; G4Nsplit_Weight G4ImportanceAlgorithm::Calculate(G4double ipre, G4double ipost, G4double init_w) const { - -#ifdef G4MULTITHREADED - G4MUTEXLOCK(&G4ImportanceAlgorithm::ImportanceMutex); -#endif - + G4AutoLock l(&ImportanceMutex); G4Nsplit_Weight nw; if (ipost>0.) { @@ -123,9 +118,8 @@ G4ImportanceAlgorithm::Calculate(G4double ipre, } } } -#ifdef G4MULTITHREADED - G4MUTEXUNLOCK(&G4ImportanceAlgorithm::ImportanceMutex); -#endif + l.unlock(); + return nw; } diff --git a/source/geometry/biasing/src/G4VGCellFinder.cc b/source/geometry/biasing/src/G4VGCellFinder.cc index c9aaa3cccf5..574fb5d8418 100644 --- a/source/geometry/biasing/src/G4VGCellFinder.cc +++ b/source/geometry/biasing/src/G4VGCellFinder.cc @@ -30,10 +30,6 @@ #include "G4VGCellFinder.hh" -G4VGCellFinder::G4VGCellFinder() -{ -} +G4VGCellFinder::G4VGCellFinder() = default; -G4VGCellFinder::~G4VGCellFinder() -{ -} +G4VGCellFinder::~G4VGCellFinder() = default; diff --git a/source/geometry/biasing/src/G4VIStore.cc b/source/geometry/biasing/src/G4VIStore.cc index 069fda6b2f5..4eb9a9b9110 100644 --- a/source/geometry/biasing/src/G4VIStore.cc +++ b/source/geometry/biasing/src/G4VIStore.cc @@ -30,10 +30,6 @@ #include "G4VIStore.hh" -G4VIStore::G4VIStore() -{ -} +G4VIStore::G4VIStore() = default; -G4VIStore::~G4VIStore() -{ -} +G4VIStore::~G4VIStore() = default; diff --git a/source/geometry/biasing/src/G4VImportanceAlgorithm.cc b/source/geometry/biasing/src/G4VImportanceAlgorithm.cc index ad0f4889d7a..f914f1127bf 100644 --- a/source/geometry/biasing/src/G4VImportanceAlgorithm.cc +++ b/source/geometry/biasing/src/G4VImportanceAlgorithm.cc @@ -30,10 +30,6 @@ #include "G4VImportanceAlgorithm.hh" -G4VImportanceAlgorithm::G4VImportanceAlgorithm() -{ -} +G4VImportanceAlgorithm::G4VImportanceAlgorithm() = default; -G4VImportanceAlgorithm::~G4VImportanceAlgorithm() -{ -} +G4VImportanceAlgorithm::~G4VImportanceAlgorithm() = default; diff --git a/source/geometry/biasing/src/G4VImportanceSplitExaminer.cc b/source/geometry/biasing/src/G4VImportanceSplitExaminer.cc index 32137071dd2..4b33be85840 100644 --- a/source/geometry/biasing/src/G4VImportanceSplitExaminer.cc +++ b/source/geometry/biasing/src/G4VImportanceSplitExaminer.cc @@ -30,10 +30,6 @@ #include "G4VImportanceSplitExaminer.hh" -G4VImportanceSplitExaminer::G4VImportanceSplitExaminer() -{ -} +G4VImportanceSplitExaminer::G4VImportanceSplitExaminer() = default; -G4VImportanceSplitExaminer::~G4VImportanceSplitExaminer() -{ -} +G4VImportanceSplitExaminer::~G4VImportanceSplitExaminer() = default; diff --git a/source/geometry/biasing/src/G4VWeightWindowAlgorithm.cc b/source/geometry/biasing/src/G4VWeightWindowAlgorithm.cc index d3e7282b90e..5f06da6128d 100644 --- a/source/geometry/biasing/src/G4VWeightWindowAlgorithm.cc +++ b/source/geometry/biasing/src/G4VWeightWindowAlgorithm.cc @@ -30,10 +30,6 @@ #include "G4VWeightWindowAlgorithm.hh" -G4VWeightWindowAlgorithm::G4VWeightWindowAlgorithm() -{ -} +G4VWeightWindowAlgorithm::G4VWeightWindowAlgorithm() = default; -G4VWeightWindowAlgorithm::~G4VWeightWindowAlgorithm() -{ -} +G4VWeightWindowAlgorithm::~G4VWeightWindowAlgorithm() = default; diff --git a/source/geometry/biasing/src/G4VWeightWindowStore.cc b/source/geometry/biasing/src/G4VWeightWindowStore.cc index faf31618928..108d59c621c 100644 --- a/source/geometry/biasing/src/G4VWeightWindowStore.cc +++ b/source/geometry/biasing/src/G4VWeightWindowStore.cc @@ -30,10 +30,6 @@ #include "G4VWeightWindowStore.hh" -G4VWeightWindowStore::G4VWeightWindowStore() -{ -} +G4VWeightWindowStore::G4VWeightWindowStore() = default; -G4VWeightWindowStore::~G4VWeightWindowStore() -{ -} +G4VWeightWindowStore::~G4VWeightWindowStore() = default; diff --git a/source/geometry/biasing/src/G4WeightWindowAlgorithm.cc b/source/geometry/biasing/src/G4WeightWindowAlgorithm.cc index f1d56405d79..f226da44486 100644 --- a/source/geometry/biasing/src/G4WeightWindowAlgorithm.cc +++ b/source/geometry/biasing/src/G4WeightWindowAlgorithm.cc @@ -40,9 +40,7 @@ G4WeightWindowAlgorithm(G4double upperLimitFactor, { } -G4WeightWindowAlgorithm::~G4WeightWindowAlgorithm() -{ -} +G4WeightWindowAlgorithm::~G4WeightWindowAlgorithm() = default; G4Nsplit_Weight G4WeightWindowAlgorithm::Calculate(G4double init_w, @@ -62,7 +60,7 @@ G4WeightWindowAlgorithm::Calculate(G4double init_w, // splitting // G4double temp_wi_ws = init_w/upperWeight; - G4int split_i = static_cast(temp_wi_ws); + auto split_i = static_cast(temp_wi_ws); if(split_i != temp_wi_ws) { ++split_i; } G4double wi_ws = init_w/split_i; diff --git a/source/geometry/biasing/src/G4WeightWindowStore.cc b/source/geometry/biasing/src/G4WeightWindowStore.cc index ff2480da09b..007bd90fcb7 100644 --- a/source/geometry/biasing/src/G4WeightWindowStore.cc +++ b/source/geometry/biasing/src/G4WeightWindowStore.cc @@ -44,8 +44,6 @@ G4WeightWindowStore:: G4WeightWindowStore() : fWorldVolume(G4TransportationManager::GetTransportationManager() ->GetNavigatorForTracking()->GetWorldVolume()), - fGeneralUpperEnergyBounds(), - fCellToUpEnBoundLoWePairsMap(), fCurrentIterator(fCellToUpEnBoundLoWePairsMap.cend()) { } @@ -54,16 +52,11 @@ G4WeightWindowStore:: G4WeightWindowStore(const G4String& ParallelWorldName) : fWorldVolume(G4TransportationManager::GetTransportationManager() ->GetParallelWorld(ParallelWorldName)), - fGeneralUpperEnergyBounds(), - fCellToUpEnBoundLoWePairsMap(), fCurrentIterator(fCellToUpEnBoundLoWePairsMap.cend()) { } -G4WeightWindowStore:: -~G4WeightWindowStore() -{ -} +G4WeightWindowStore::~G4WeightWindowStore() = default; G4double G4WeightWindowStore:: GetLowerWeight(const G4GeometryCell& gCell, @@ -79,11 +72,11 @@ GetLowerWeight(const G4GeometryCell& gCell, G4UpperEnergyToLowerWeightMap upEnLoWeiPairs = fCurrentIterator->second; G4double lowerWeight = -1; G4bool found = false; - for (auto it = upEnLoWeiPairs.cbegin(); it != upEnLoWeiPairs.cend(); ++it) + for (const auto & upEnLoWeiPair : upEnLoWeiPairs) { - if (partEnergy < it->first) + if (partEnergy < upEnLoWeiPair.first) { - lowerWeight = it->second; + lowerWeight = upEnLoWeiPair.second; found = true; break; } @@ -183,10 +176,9 @@ AddLowerWeights(const G4GeometryCell& gCell, } G4UpperEnergyToLowerWeightMap map; G4int i = 0; - for (auto it = fGeneralUpperEnergyBounds.cbegin(); - it != fGeneralUpperEnergyBounds.cend(); ++it) + for (G4double fGeneralUpperEnergyBound : fGeneralUpperEnergyBounds) { - map[*it] = lowerWeights[i]; + map[fGeneralUpperEnergyBound] = lowerWeights[i]; ++i; } fCellToUpEnBoundLoWePairsMap[gCell] = map; diff --git a/source/geometry/divisions/GNUmakefile b/source/geometry/divisions/GNUmakefile deleted file mode 100644 index 7f0a35bb749..00000000000 --- a/source/geometry/divisions/GNUmakefile +++ /dev/null @@ -1,27 +0,0 @@ -# ---------------------------------------------------------------------- -# GNUmakefile for geometry/divisions library. Gabriele Cosmo, 16/06/03. -# ---------------------------------------------------------------------- - -name := G4geomdivision - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4GEOM_ALLOC_EXPORT -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/graphics_reps/include \ - -I$(G4BASE)/geometry/solids/CSG/include \ - -I$(G4BASE)/geometry/solids/specific/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include - -ifdef G4DIVDEBUG - CPPFLAGS += -DG4DIVDEBUG -endif - -include $(G4INSTALL)/config/common.gmk diff --git a/source/geometry/divisions/History b/source/geometry/divisions/History index b5863b99ec1..5135195e7f4 100644 --- a/source/geometry/divisions/History +++ b/source/geometry/divisions/History @@ -1,12 +1,16 @@ # Category geomdiv History See `CONTRIBUTING.rst` for details of **required** info/format for each entry, -which **must** added in reverse chronological order (newest at the top). It must **not** -be used as a substitute for writing good git commit messages! +which **must** added in reverse chronological order (newest at the top). +It must **not** be used as a substitute for writing good git commit messages! +------------------------------------------------------------------------------- + +## 2023-05-09 Gabriele Cosmo (geomdiv-V11-01-00) +- Applied clang-tidy fixes (readability, modernization, performance, ...). ## 2021-12-10 Ben Morgan (geomdiv-V11-00-00) -- Change to new Markdown History format +- Change to new Markdown History format. --- diff --git a/source/geometry/divisions/include/G4PVDivision.hh b/source/geometry/divisions/include/G4PVDivision.hh index d3839683935..d7d22ca70af 100644 --- a/source/geometry/divisions/include/G4PVDivision.hh +++ b/source/geometry/divisions/include/G4PVDivision.hh @@ -109,28 +109,28 @@ class G4PVDivision : public G4PVReplica const G4double offset); // Constructor in mother physical volume (same as first constructor) - virtual ~G4PVDivision(); + ~G4PVDivision() override; G4PVDivision(const G4PVDivision&) = delete; G4PVDivision& operator=(const G4PVDivision&) = delete; - virtual G4bool IsMany() const; - virtual G4bool IsReplicated() const; - virtual G4int GetMultiplicity() const; - virtual G4VPVParameterisation* GetParameterisation() const; - virtual void GetReplicationData( EAxis& axis, + G4bool IsMany() const override; + G4bool IsReplicated() const override; + G4int GetMultiplicity() const override; + G4VPVParameterisation* GetParameterisation() const override; + void GetReplicationData( EAxis& axis, G4int& nReplicas, G4double& width, G4double& offset, - G4bool& consuming ) const; + G4bool& consuming ) const override; EAxis GetDivisionAxis() const; - G4bool IsParameterised() const; + G4bool IsParameterised() const override; - virtual EVolume VolumeType() const; + EVolume VolumeType() const override; // Characterise the type of volume - normal/replicated/parameterised. - G4bool IsRegularStructure() const; - G4int GetRegularStructureId() const; + G4bool IsRegularStructure() const override; + G4int GetRegularStructureId() const override; // Methods to identify volume that can have revised 'regular' navigation. // Currently divisions do not qualify for this. diff --git a/source/geometry/divisions/include/G4PVDivisionFactory.hh b/source/geometry/divisions/include/G4PVDivisionFactory.hh index 6203d07458c..9d0f6fa3d05 100644 --- a/source/geometry/divisions/include/G4PVDivisionFactory.hh +++ b/source/geometry/divisions/include/G4PVDivisionFactory.hh @@ -44,44 +44,44 @@ class G4PVDivisionFactory : public G4VPVDivisionFactory { public: // with description - virtual ~G4PVDivisionFactory(); + ~G4PVDivisionFactory() override; - virtual G4VPhysicalVolume* CreatePVDivision( + G4VPhysicalVolume* CreatePVDivision( const G4String& pName, G4LogicalVolume* pLogical, G4LogicalVolume* pMother, const EAxis pAxis, const G4int nReplicas, const G4double width, - const G4double offset ); + const G4double offset ) override; // Create division - with number of divisions and width. - virtual G4VPhysicalVolume* CreatePVDivision( + G4VPhysicalVolume* CreatePVDivision( const G4String& pName, G4LogicalVolume* pLogical, G4LogicalVolume* pMotherLogical, const EAxis pAxis, const G4int nReplicas, - const G4double offset ); + const G4double offset ) override; // Create division - with number of divisions. - virtual G4VPhysicalVolume* CreatePVDivision( + G4VPhysicalVolume* CreatePVDivision( const G4String& pName, G4LogicalVolume* pLogical, G4LogicalVolume* pMotherLogical, const EAxis pAxis, const G4double width, - const G4double offset ); + const G4double offset ) override; // Create division - with width. - virtual G4VPhysicalVolume* CreatePVDivision( + G4VPhysicalVolume* CreatePVDivision( const G4String& pName, G4LogicalVolume* pLogical, G4LogicalVolume* pMotherLogical, - const G4VPVParameterisation* param); + const G4VPVParameterisation* param) override; // Create division - with parameterisation. - virtual G4bool IsPVDivision(const G4VPhysicalVolume* pv) const; + G4bool IsPVDivision(const G4VPhysicalVolume* pv) const override; // Returns true if pv is division. static G4PVDivisionFactory* GetInstance(); diff --git a/source/geometry/divisions/include/G4ParameterisationBox.hh b/source/geometry/divisions/include/G4ParameterisationBox.hh index 76cb564e9a2..7bc84ec529e 100644 --- a/source/geometry/divisions/include/G4ParameterisationBox.hh +++ b/source/geometry/divisions/include/G4ParameterisationBox.hh @@ -63,7 +63,7 @@ class G4VParameterisationBox : public G4VDivisionParameterisation G4double offset, G4double step, G4VSolid* msolid, DivisionType divType ); - virtual ~G4VParameterisationBox(); + ~G4VParameterisationBox() override; }; class G4ParameterisationBoxX : public G4VParameterisationBox @@ -73,41 +73,41 @@ class G4ParameterisationBoxX : public G4VParameterisationBox G4ParameterisationBoxX( EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid* msolid, DivisionType divType ); - ~G4ParameterisationBoxX(); + ~G4ParameterisationBoxX() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation( const G4int copyNo, - G4VPhysicalVolume* physVol ) const; + G4VPhysicalVolume* physVol ) const override; void ComputeDimensions(G4Box& box, const G4int copyNo, - const G4VPhysicalVolume* physVol) const; + const G4VPhysicalVolume* physVol) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Cons&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trd&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; class G4ParameterisationBoxY : public G4VParameterisationBox @@ -117,42 +117,42 @@ class G4ParameterisationBoxY : public G4VParameterisationBox G4ParameterisationBoxY( EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid* msolid, DivisionType divType ); - ~G4ParameterisationBoxY(); + ~G4ParameterisationBoxY() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation( const G4int copyNo, - G4VPhysicalVolume* physVol ) const; + G4VPhysicalVolume* physVol ) const override; void ComputeDimensions(G4Box& box, const G4int copyNo, - const G4VPhysicalVolume* physVol) const; + const G4VPhysicalVolume* physVol) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Cons&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trd&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; class G4ParameterisationBoxZ : public G4VParameterisationBox @@ -162,41 +162,41 @@ class G4ParameterisationBoxZ : public G4VParameterisationBox G4ParameterisationBoxZ( EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid* msolid, DivisionType divType ); - ~G4ParameterisationBoxZ(); + ~G4ParameterisationBoxZ() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation( const G4int copyNo, - G4VPhysicalVolume* physVol ) const; + G4VPhysicalVolume* physVol ) const override; void ComputeDimensions(G4Box& box, const G4int copyNo, - const G4VPhysicalVolume* physVol) const; + const G4VPhysicalVolume* physVol) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Cons&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trd&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; #endif diff --git a/source/geometry/divisions/include/G4ParameterisationCons.hh b/source/geometry/divisions/include/G4ParameterisationCons.hh index 27f41e8fef5..5c30ee5de09 100644 --- a/source/geometry/divisions/include/G4ParameterisationCons.hh +++ b/source/geometry/divisions/include/G4ParameterisationCons.hh @@ -64,7 +64,7 @@ class G4VParameterisationCons : public G4VDivisionParameterisation G4double offset, G4double step, G4VSolid* msolid, DivisionType divType ); - virtual ~G4VParameterisationCons(); + ~G4VParameterisationCons() override; }; class G4ParameterisationConsRho : public G4VParameterisationCons @@ -74,41 +74,41 @@ class G4ParameterisationConsRho : public G4VParameterisationCons G4ParameterisationConsRho( EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid* motherSolid, DivisionType divType ); - ~G4ParameterisationConsRho(); + ~G4ParameterisationConsRho() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation( const G4int copyNo, - G4VPhysicalVolume* physVol ) const; + G4VPhysicalVolume* physVol ) const override; void ComputeDimensions( G4Cons& tubs, const G4int copyNo, - const G4VPhysicalVolume* physVol) const; + const G4VPhysicalVolume* physVol) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Trd&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Box&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; class G4ParameterisationConsPhi : public G4VParameterisationCons @@ -118,41 +118,41 @@ class G4ParameterisationConsPhi : public G4VParameterisationCons G4ParameterisationConsPhi( EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid* motherSolid, DivisionType divType ); - ~G4ParameterisationConsPhi(); + ~G4ParameterisationConsPhi() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation( const G4int copyNo, - G4VPhysicalVolume* physVol ) const; + G4VPhysicalVolume* physVol ) const override; void ComputeDimensions( G4Cons& tubs, const G4int copyNo, - const G4VPhysicalVolume* physVol ) const; + const G4VPhysicalVolume* physVol ) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Trd&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Box&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; class G4ParameterisationConsZ : public G4VParameterisationCons @@ -162,41 +162,41 @@ class G4ParameterisationConsZ : public G4VParameterisationCons G4ParameterisationConsZ( EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid* motherSolid, DivisionType divType ); - ~G4ParameterisationConsZ(); + ~G4ParameterisationConsZ() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation( const G4int copyNo, - G4VPhysicalVolume* physVol ) const; + G4VPhysicalVolume* physVol ) const override; void ComputeDimensions( G4Cons& tubs, const G4int copyNo, - const G4VPhysicalVolume* physVol ) const; + const G4VPhysicalVolume* physVol ) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Trd&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Box&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; #endif diff --git a/source/geometry/divisions/include/G4ParameterisationPara.hh b/source/geometry/divisions/include/G4ParameterisationPara.hh index b420f217f21..c40570d96b7 100644 --- a/source/geometry/divisions/include/G4ParameterisationPara.hh +++ b/source/geometry/divisions/include/G4ParameterisationPara.hh @@ -63,7 +63,7 @@ class G4VParameterisationPara : public G4VDivisionParameterisation G4double offset, G4double step, G4VSolid* msolid, DivisionType divType ); - virtual ~G4VParameterisationPara(); + ~G4VParameterisationPara() override; }; class G4ParameterisationParaX : public G4VParameterisationPara @@ -73,42 +73,42 @@ class G4ParameterisationParaX : public G4VParameterisationPara G4ParameterisationParaX( EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid* msolid, DivisionType divType ); - ~G4ParameterisationParaX(); + ~G4ParameterisationParaX() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation( const G4int copyNo, - G4VPhysicalVolume* physVol ) const; + G4VPhysicalVolume* physVol ) const override; void ComputeDimensions(G4Para& para, const G4int copyNo, - const G4VPhysicalVolume* pv) const; + const G4VPhysicalVolume* pv) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Cons&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Box&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trd&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; @@ -119,42 +119,42 @@ class G4ParameterisationParaY : public G4VParameterisationPara G4ParameterisationParaY( EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid* msolid, DivisionType divType ); - ~G4ParameterisationParaY(); + ~G4ParameterisationParaY() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation( const G4int copyNo, - G4VPhysicalVolume* physVol ) const; + G4VPhysicalVolume* physVol ) const override; void ComputeDimensions(G4Para& para, const G4int copyNo, - const G4VPhysicalVolume* pv) const; + const G4VPhysicalVolume* pv) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Cons&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Box&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trd&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; @@ -165,42 +165,42 @@ class G4ParameterisationParaZ : public G4VParameterisationPara G4ParameterisationParaZ( EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid* msolid, DivisionType divType ); - ~G4ParameterisationParaZ(); + ~G4ParameterisationParaZ() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation( const G4int copyNo, - G4VPhysicalVolume* physVol ) const; + G4VPhysicalVolume* physVol ) const override; void ComputeDimensions(G4Para& para, const G4int copyNo, - const G4VPhysicalVolume* pv) const; + const G4VPhysicalVolume* pv) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Cons&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Box&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trd&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; #endif diff --git a/source/geometry/divisions/include/G4ParameterisationPolycone.hh b/source/geometry/divisions/include/G4ParameterisationPolycone.hh index bfe07ed1b33..d6fa71f4846 100644 --- a/source/geometry/divisions/include/G4ParameterisationPolycone.hh +++ b/source/geometry/divisions/include/G4ParameterisationPolycone.hh @@ -63,7 +63,7 @@ class G4VParameterisationPolycone : public G4VDivisionParameterisation G4double offset, G4double step, G4VSolid* msolid, DivisionType divType ); - virtual ~G4VParameterisationPolycone(); + ~G4VParameterisationPolycone() override; }; //--------------------------------------------------------------------- @@ -78,43 +78,43 @@ class G4ParameterisationPolyconeRho : public G4VParameterisationPolycone G4double offset, G4double step, G4VSolid* motherSolid, DivisionType divType ); - ~G4ParameterisationPolyconeRho(); + ~G4ParameterisationPolyconeRho() override; - void CheckParametersValidity(); + void CheckParametersValidity() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation( const G4int copyNo, - G4VPhysicalVolume* physVol ) const; + G4VPhysicalVolume* physVol ) const override; void ComputeDimensions( G4Polycone& pcone, const G4int copyNo, - const G4VPhysicalVolume* physVol ) const; + const G4VPhysicalVolume* physVol ) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Trd&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Box&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Cons&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; //--------------------------------------------------------------------- @@ -129,41 +129,41 @@ class G4ParameterisationPolyconePhi : public G4VParameterisationPolycone G4double offset, G4double step, G4VSolid* motherSolid, DivisionType divType ); - ~G4ParameterisationPolyconePhi(); + ~G4ParameterisationPolyconePhi() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation( const G4int copyNo, - G4VPhysicalVolume* physVol ) const; + G4VPhysicalVolume* physVol ) const override; void ComputeDimensions( G4Polycone& pcone, const G4int copyNo, - const G4VPhysicalVolume* physVol ) const; + const G4VPhysicalVolume* physVol ) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Trd&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Box&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Cons&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; //--------------------------------------------------------------------- @@ -178,16 +178,16 @@ class G4ParameterisationPolyconeZ : public G4VParameterisationPolycone G4double offset, G4double step, G4VSolid* motherSolid, DivisionType divType ); - ~G4ParameterisationPolyconeZ(); + ~G4ParameterisationPolyconeZ() override; - void CheckParametersValidity(); + void CheckParametersValidity() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation( const G4int copyNo, - G4VPhysicalVolume* physVol ) const; + G4VPhysicalVolume* physVol ) const override; void ComputeDimensions( G4Polycone& pcone, const G4int copyNo, - const G4VPhysicalVolume* physVol ) const; + const G4VPhysicalVolume* physVol ) const override; private: @@ -199,29 +199,29 @@ class G4ParameterisationPolyconeZ : public G4VParameterisationPolycone // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Trd&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Box&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Cons&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} private: G4int fNSegment = 0; diff --git a/source/geometry/divisions/include/G4ParameterisationPolyhedra.hh b/source/geometry/divisions/include/G4ParameterisationPolyhedra.hh index f67a6924838..fb037453d04 100644 --- a/source/geometry/divisions/include/G4ParameterisationPolyhedra.hh +++ b/source/geometry/divisions/include/G4ParameterisationPolyhedra.hh @@ -63,7 +63,7 @@ class G4VParameterisationPolyhedra : public G4VDivisionParameterisation G4double offset, G4double step, G4VSolid* msolid, DivisionType divType ); - virtual ~G4VParameterisationPolyhedra(); + ~G4VParameterisationPolyhedra() override; private: @@ -84,43 +84,43 @@ class G4ParameterisationPolyhedraRho : public G4VParameterisationPolyhedra G4double offset, G4double step, G4VSolid* motherSolid, DivisionType divType ); - ~G4ParameterisationPolyhedraRho(); + ~G4ParameterisationPolyhedraRho() override; - void CheckParametersValidity(); + void CheckParametersValidity() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation( const G4int copyNo, - G4VPhysicalVolume* physVol ) const; + G4VPhysicalVolume* physVol ) const override; void ComputeDimensions( G4Polyhedra& phedra, const G4int copyNo, - const G4VPhysicalVolume* physVol ) const; + const G4VPhysicalVolume* physVol ) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Trd&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Box&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Cons&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; //--------------------------------------------------------------------- @@ -135,43 +135,43 @@ class G4ParameterisationPolyhedraPhi : public G4VParameterisationPolyhedra G4double offset, G4double step, G4VSolid* motherSolid, DivisionType divType ); - ~G4ParameterisationPolyhedraPhi(); + ~G4ParameterisationPolyhedraPhi() override; - void CheckParametersValidity(); + void CheckParametersValidity() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation( const G4int copyNo, - G4VPhysicalVolume* physVol ) const; + G4VPhysicalVolume* physVol ) const override; void ComputeDimensions( G4Polyhedra& phedra, const G4int copyNo, - const G4VPhysicalVolume* physVol ) const; + const G4VPhysicalVolume* physVol ) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Trd&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Box&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Cons&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; //--------------------------------------------------------------------- @@ -186,16 +186,16 @@ class G4ParameterisationPolyhedraZ : public G4VParameterisationPolyhedra G4double offset, G4double step, G4VSolid* motherSolid, DivisionType divType ); - ~G4ParameterisationPolyhedraZ(); + ~G4ParameterisationPolyhedraZ() override; - void CheckParametersValidity(); + void CheckParametersValidity() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation( const G4int copyNo, - G4VPhysicalVolume* physVol ) const; + G4VPhysicalVolume* physVol ) const override; void ComputeDimensions( G4Polyhedra& phedra, const G4int copyNo, - const G4VPhysicalVolume* physVol ) const; + const G4VPhysicalVolume* physVol ) const override; private: @@ -206,29 +206,29 @@ class G4ParameterisationPolyhedraZ : public G4VParameterisationPolyhedra // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Trd&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Box&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Cons&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} private: G4int fNSegment = 0; diff --git a/source/geometry/divisions/include/G4ParameterisationTrd.hh b/source/geometry/divisions/include/G4ParameterisationTrd.hh index cde01cb37d0..45d91ad1ce8 100644 --- a/source/geometry/divisions/include/G4ParameterisationTrd.hh +++ b/source/geometry/divisions/include/G4ParameterisationTrd.hh @@ -65,7 +65,7 @@ class G4VParameterisationTrd : public G4VDivisionParameterisation G4double offset, G4double step, G4VSolid* msolid, DivisionType divType ); - virtual ~G4VParameterisationTrd(); + ~G4VParameterisationTrd() override; protected: @@ -79,43 +79,43 @@ class G4ParameterisationTrdX : public G4VParameterisationTrd G4ParameterisationTrdX( EAxis axis, G4int nCopies, G4double width, G4double offset, G4VSolid* motherSolid, DivisionType divType ); - ~G4ParameterisationTrdX(); + ~G4ParameterisationTrdX() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation(const G4int copyNo, - G4VPhysicalVolume* physVol) const; + G4VPhysicalVolume* physVol) const override; void ComputeDimensions(G4Trd& trd, const G4int copyNo, - const G4VPhysicalVolume* pv) const; + const G4VPhysicalVolume* pv) const override; void ComputeDimensions(G4Trap& trd, const G4int copyNo, - const G4VPhysicalVolume* pv) const; + const G4VPhysicalVolume* pv) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Cons&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Box&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; @@ -126,43 +126,43 @@ class G4ParameterisationTrdY : public G4VParameterisationTrd G4ParameterisationTrdY( EAxis axis, G4int nCopies, G4double width, G4double offset, G4VSolid* motherSolid, DivisionType divType ); - ~G4ParameterisationTrdY(); + ~G4ParameterisationTrdY() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation(const G4int copyNo, - G4VPhysicalVolume *physVol) const; + G4VPhysicalVolume *physVol) const override; void ComputeDimensions(G4Trd& trd, const G4int copyNo, - const G4VPhysicalVolume* pv) const; + const G4VPhysicalVolume* pv) const override; void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const; + const G4VPhysicalVolume*) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Cons&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Box&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; @@ -173,41 +173,41 @@ class G4ParameterisationTrdZ : public G4VParameterisationTrd G4ParameterisationTrdZ( EAxis axis, G4int nCopies, G4double width, G4double offset, G4VSolid* motherSolid, DivisionType divType ); - ~G4ParameterisationTrdZ(); + ~G4ParameterisationTrdZ() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation(const G4int copyNo, - G4VPhysicalVolume* physVol) const; + G4VPhysicalVolume* physVol) const override; void ComputeDimensions(G4Trd& trd, const G4int copyNo, - const G4VPhysicalVolume* pv) const; + const G4VPhysicalVolume* pv) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Cons&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Box&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; #endif diff --git a/source/geometry/divisions/include/G4ParameterisationTubs.hh b/source/geometry/divisions/include/G4ParameterisationTubs.hh index d54b04f6c3e..c7416d79ab9 100644 --- a/source/geometry/divisions/include/G4ParameterisationTubs.hh +++ b/source/geometry/divisions/include/G4ParameterisationTubs.hh @@ -62,7 +62,7 @@ class G4VParameterisationTubs : public G4VDivisionParameterisation G4double offset, G4double step, G4VSolid* msolid, DivisionType divType ); - virtual ~G4VParameterisationTubs(); + ~G4VParameterisationTubs() override; }; class G4ParameterisationTubsRho : public G4VParameterisationTubs @@ -72,41 +72,41 @@ class G4ParameterisationTubsRho : public G4VParameterisationTubs G4ParameterisationTubsRho( EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid* motherSolid, DivisionType divType ); - ~G4ParameterisationTubsRho(); + ~G4ParameterisationTubsRho() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation(const G4int copyNo, - G4VPhysicalVolume* physVol) const; + G4VPhysicalVolume* physVol) const override; void ComputeDimensions(G4Tubs& tubs, const G4int copyNo, - const G4VPhysicalVolume* physVol) const; + const G4VPhysicalVolume* physVol) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Trd&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Box&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Cons&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; @@ -117,41 +117,41 @@ class G4ParameterisationTubsPhi : public G4VParameterisationTubs G4ParameterisationTubsPhi( EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid* motherSolid, DivisionType divType ); - ~G4ParameterisationTubsPhi(); + ~G4ParameterisationTubsPhi() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation(const G4int copyNo, - G4VPhysicalVolume* physVol) const; + G4VPhysicalVolume* physVol) const override; void ComputeDimensions(G4Tubs& tubs, const G4int copyNo, - const G4VPhysicalVolume* physVol) const; + const G4VPhysicalVolume* physVol) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Trd&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Box&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Cons&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; @@ -162,41 +162,41 @@ class G4ParameterisationTubsZ : public G4VParameterisationTubs G4ParameterisationTubsZ( EAxis axis, G4int nCopies, G4double offset, G4double step, G4VSolid* motherSolid, DivisionType divType ); - ~G4ParameterisationTubsZ(); + ~G4ParameterisationTubsZ() override; - G4double GetMaxParameter() const; + G4double GetMaxParameter() const override; void ComputeTransformation(const G4int copyNo, - G4VPhysicalVolume* physVol) const; + G4VPhysicalVolume* physVol) const override; void ComputeDimensions(G4Tubs& tubs, const G4int copyNo, - const G4VPhysicalVolume* physVol) const; + const G4VPhysicalVolume* physVol) const override; private: // Dummy declarations to get rid of warnings ... void ComputeDimensions (G4Trd&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Box&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Cons&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} }; #endif diff --git a/source/geometry/divisions/include/G4ReplicatedSlice.hh b/source/geometry/divisions/include/G4ReplicatedSlice.hh index a871e7d8657..6071cbb0cdb 100644 --- a/source/geometry/divisions/include/G4ReplicatedSlice.hh +++ b/source/geometry/divisions/include/G4ReplicatedSlice.hh @@ -123,28 +123,28 @@ class G4ReplicatedSlice : public G4PVReplica const G4double offset ); // Constructor with width - virtual ~G4ReplicatedSlice(); + ~G4ReplicatedSlice() override; G4ReplicatedSlice(const G4ReplicatedSlice&) = delete; G4ReplicatedSlice& operator=(const G4ReplicatedSlice&) = delete; - virtual G4bool IsMany() const; - virtual G4bool IsReplicated() const; - virtual G4int GetMultiplicity() const; - virtual G4VPVParameterisation* GetParameterisation() const; - virtual void GetReplicationData( EAxis& axis, - G4int& nReplicas, - G4double& width, - G4double& offset, - G4bool& consuming ) const; + G4bool IsMany() const override; + G4bool IsReplicated() const override; + G4int GetMultiplicity() const override; + G4VPVParameterisation* GetParameterisation() const override; + void GetReplicationData( EAxis& axis, + G4int& nReplicas, + G4double& width, + G4double& offset, + G4bool& consuming ) const override; EAxis GetDivisionAxis() const; - G4bool IsParameterised() const; + G4bool IsParameterised() const override; EVolume VolumeType() const final; // Characterise the type of volume - normal/replicated/parameterised. - G4bool IsRegularStructure() const; - G4int GetRegularStructureId() const; + G4bool IsRegularStructure() const override; + G4int GetRegularStructureId() const override; // Methods to identify volume that can apply 'regular' navigation. // Currently divisions do not qualify for this. diff --git a/source/geometry/divisions/include/G4VDivisionParameterisation.hh b/source/geometry/divisions/include/G4VDivisionParameterisation.hh index d1e5c25eb32..07e9c5352e5 100644 --- a/source/geometry/divisions/include/G4VDivisionParameterisation.hh +++ b/source/geometry/divisions/include/G4VDivisionParameterisation.hh @@ -54,12 +54,12 @@ class G4VDivisionParameterisation : public G4VPVParameterisation G4VDivisionParameterisation( EAxis axis, G4int nDiv, G4double width, G4double offset, DivisionType divType, G4VSolid* motherSolid = nullptr); - virtual ~G4VDivisionParameterisation(); + ~G4VDivisionParameterisation() override; - virtual G4VSolid* ComputeSolid(const G4int, G4VPhysicalVolume*); + G4VSolid* ComputeSolid(const G4int, G4VPhysicalVolume*) override; - virtual void ComputeTransformation(const G4int copyNo, - G4VPhysicalVolume *physVol) const = 0; + void ComputeTransformation(const G4int copyNo, + G4VPhysicalVolume *physVol) const override = 0; inline const G4String& GetType() const; inline EAxis GetAxis() const; diff --git a/source/geometry/divisions/src/G4PVDivision.cc b/source/geometry/divisions/src/G4PVDivision.cc index b430672919a..31a270e0228 100644 --- a/source/geometry/divisions/src/G4PVDivision.cc +++ b/source/geometry/divisions/src/G4PVDivision.cc @@ -148,7 +148,7 @@ G4PVDivision::G4PVDivision(const G4String& pName, const G4double width, const G4double offset ) : G4PVReplica(pName, nDivs, pAxis, pLogical, - pMotherPhysical ? pMotherPhysical->GetLogicalVolume() : nullptr) + pMotherPhysical != nullptr ? pMotherPhysical->GetLogicalVolume() : nullptr) { if (pMotherPhysical == nullptr) { @@ -231,7 +231,7 @@ G4PVDivision::CheckAndSetParameters( const EAxis pAxis, // in G4VPVParameterisation::ComputeTransformation, for others // it will stay the unity // - G4RotationMatrix* pRMat = new G4RotationMatrix(); + auto pRMat = new G4RotationMatrix(); SetRotation(pRMat); switch (faxis) @@ -269,9 +269,7 @@ G4PVDivision::CheckAndSetParameters( const EAxis pAxis, } //-------------------------------------------------------------------------- -G4PVDivision::~G4PVDivision() -{ -} +G4PVDivision::~G4PVDivision() = default; //-------------------------------------------------------------------------- EAxis G4PVDivision::GetDivisionAxis() const diff --git a/source/geometry/divisions/src/G4PVDivisionFactory.cc b/source/geometry/divisions/src/G4PVDivisionFactory.cc index 9c33cba9f77..18dfe87cc0a 100644 --- a/source/geometry/divisions/src/G4PVDivisionFactory.cc +++ b/source/geometry/divisions/src/G4PVDivisionFactory.cc @@ -34,8 +34,7 @@ //_____________________________________________________________________________ -G4PVDivisionFactory::G4PVDivisionFactory() - : G4VPVDivisionFactory() +G4PVDivisionFactory::G4PVDivisionFactory() { // Protected singleton constructor. // --- @@ -43,9 +42,7 @@ G4PVDivisionFactory::G4PVDivisionFactory() //_____________________________________________________________________________ -G4PVDivisionFactory::~G4PVDivisionFactory() -{ -} +G4PVDivisionFactory::~G4PVDivisionFactory() = default; //_____________________________________________________________________________ @@ -123,8 +120,7 @@ G4PVDivisionFactory::CreatePVDivision(const G4String& pName, // Get parameterisation data // - const G4VDivisionParameterisation* divParam - = dynamic_cast(param); + const auto divParam = dynamic_cast(param); if (divParam == nullptr) { @@ -152,6 +148,6 @@ G4bool G4PVDivisionFactory::IsPVDivision(const G4VPhysicalVolume* pv) const // Returns true if pv is division // --- - return (dynamic_cast(pv) != nullptr) ? true : false; + return dynamic_cast(pv) != nullptr; } diff --git a/source/geometry/divisions/src/G4ParameterisationBox.cc b/source/geometry/divisions/src/G4ParameterisationBox.cc index 6c15df1bfcc..cdfcfff7e56 100644 --- a/source/geometry/divisions/src/G4ParameterisationBox.cc +++ b/source/geometry/divisions/src/G4ParameterisationBox.cc @@ -47,7 +47,7 @@ G4VParameterisationBox( EAxis axis, G4int nDiv, G4double width, DivisionType divType ) : G4VDivisionParameterisation( axis, nDiv, width, offset, divType, msolid ) { - G4Box* msol = (G4Box*)(msolid); + auto msol = (G4Box*)(msolid); if (msolid->GetEntityType() == "G4ReflectedSolid") { // Get constituent solid @@ -60,9 +60,7 @@ G4VParameterisationBox( EAxis axis, G4int nDiv, G4double width, } //-------------------------------------------------------------------------- -G4VParameterisationBox::~G4VParameterisationBox() -{ -} +G4VParameterisationBox::~G4VParameterisationBox() = default; //-------------------------------------------------------------------------- G4ParameterisationBoxX:: @@ -74,7 +72,7 @@ G4ParameterisationBoxX( EAxis axis, G4int nDiv, G4double width, CheckParametersValidity(); SetType( "DivisionBoxX" ); - G4Box* mbox = (G4Box*)(fmotherSolid); + auto mbox = (G4Box*)(fmotherSolid); if( divType == DivWIDTH ) { fnDiv = CalculateNDiv( 2*mbox->GetXHalfLength(), width, offset ); @@ -95,14 +93,12 @@ G4ParameterisationBoxX( EAxis axis, G4int nDiv, G4double width, } //------------------------------------------------------------------------ -G4ParameterisationBoxX::~G4ParameterisationBoxX() -{ -} +G4ParameterisationBoxX::~G4ParameterisationBoxX() = default; //------------------------------------------------------------------------ G4double G4ParameterisationBoxX::GetMaxParameter() const { - G4Box* msol = (G4Box*)(fmotherSolid); + auto msol = (G4Box*)(fmotherSolid); return 2*msol->GetXHalfLength(); } @@ -111,7 +107,7 @@ void G4ParameterisationBoxX:: ComputeTransformation( const G4int copyNo, G4VPhysicalVolume* physVol ) const { - G4Box* msol = (G4Box*)(fmotherSolid ); + auto msol = (G4Box*)(fmotherSolid ); G4double mdx = msol->GetXHalfLength( ); //----- translation @@ -147,7 +143,7 @@ G4ParameterisationBoxX:: ComputeDimensions( G4Box& box, const G4int, const G4VPhysicalVolume* ) const { - G4Box* msol = (G4Box*)(fmotherSolid); + auto msol = (G4Box*)(fmotherSolid); G4double pDx = fwidth/2. - fhgap; G4double pDy = msol->GetYHalfLength(); @@ -177,7 +173,7 @@ G4ParameterisationBoxY( EAxis axis, G4int nDiv, G4double width, CheckParametersValidity(); SetType( "DivisionBoxY" ); - G4Box* mbox = (G4Box*)(fmotherSolid); + auto mbox = (G4Box*)(fmotherSolid); if( divType == DivWIDTH ) { fnDiv = CalculateNDiv( 2*mbox->GetYHalfLength(), width, offset ); @@ -198,14 +194,12 @@ G4ParameterisationBoxY( EAxis axis, G4int nDiv, G4double width, } //------------------------------------------------------------------------ -G4ParameterisationBoxY::~G4ParameterisationBoxY() -{ -} +G4ParameterisationBoxY::~G4ParameterisationBoxY() = default; //------------------------------------------------------------------------ G4double G4ParameterisationBoxY::GetMaxParameter() const { - G4Box* msol = (G4Box*)(fmotherSolid); + auto msol = (G4Box*)(fmotherSolid); return 2*msol->GetYHalfLength(); } @@ -214,7 +208,7 @@ void G4ParameterisationBoxY:: ComputeTransformation( const G4int copyNo, G4VPhysicalVolume* physVol ) const { - G4Box* msol = (G4Box*)(fmotherSolid); + auto msol = (G4Box*)(fmotherSolid); G4double mdy = msol->GetYHalfLength(); //----- translation @@ -249,7 +243,7 @@ G4ParameterisationBoxY:: ComputeDimensions( G4Box& box, const G4int, const G4VPhysicalVolume* ) const { - G4Box* msol = (G4Box*)(fmotherSolid); + auto msol = (G4Box*)(fmotherSolid); G4double pDx = msol->GetXHalfLength(); G4double pDy = fwidth/2. - fhgap; @@ -279,7 +273,7 @@ G4ParameterisationBoxZ( EAxis axis, G4int nDiv, G4double width, CheckParametersValidity(); SetType( "DivisionBoxZ" ); - G4Box* mbox = (G4Box*)(fmotherSolid); + auto mbox = (G4Box*)(fmotherSolid); if( divType == DivWIDTH ) { fnDiv = CalculateNDiv( 2*mbox->GetZHalfLength(), width, offset ); @@ -299,14 +293,12 @@ G4ParameterisationBoxZ( EAxis axis, G4int nDiv, G4double width, } //------------------------------------------------------------------------ -G4ParameterisationBoxZ::~G4ParameterisationBoxZ() -{ -} +G4ParameterisationBoxZ::~G4ParameterisationBoxZ() = default; //------------------------------------------------------------------------ G4double G4ParameterisationBoxZ::GetMaxParameter() const { - G4Box* msol = (G4Box*)(fmotherSolid); + auto msol = (G4Box*)(fmotherSolid); return 2*msol->GetZHalfLength(); } @@ -315,7 +307,7 @@ void G4ParameterisationBoxZ:: ComputeTransformation( const G4int copyNo, G4VPhysicalVolume *physVol ) const { - G4Box* msol = (G4Box*)(fmotherSolid ); + auto msol = (G4Box*)(fmotherSolid ); G4double mdz = msol->GetZHalfLength(); //----- translation @@ -351,7 +343,7 @@ G4ParameterisationBoxZ:: ComputeDimensions( G4Box& box, const G4int, const G4VPhysicalVolume* ) const { - G4Box* msol = (G4Box*)(fmotherSolid); + auto msol = (G4Box*)(fmotherSolid); G4double pDx = msol->GetXHalfLength(); G4double pDy = msol->GetYHalfLength(); @@ -370,4 +362,3 @@ ComputeDimensions( G4Box& box, const G4int, } #endif } - diff --git a/source/geometry/divisions/src/G4ParameterisationCons.cc b/source/geometry/divisions/src/G4ParameterisationCons.cc index fb28e325e14..aeb0179a9eb 100644 --- a/source/geometry/divisions/src/G4ParameterisationCons.cc +++ b/source/geometry/divisions/src/G4ParameterisationCons.cc @@ -47,7 +47,7 @@ G4VParameterisationCons( EAxis axis, G4int nDiv, G4double width, DivisionType divType ) : G4VDivisionParameterisation( axis, nDiv, width, offset, divType, msolid ) { - G4Cons* msol = (G4Cons*)(msolid); + auto msol = (G4Cons*)(msolid); if (msolid->GetEntityType() == "G4ReflectedSolid") { // Get constituent solid @@ -56,7 +56,7 @@ G4VParameterisationCons( EAxis axis, G4int nDiv, G4double width, msol = (G4Cons*)(mConstituentSolid); // Create a new solid with inversed parameters - G4Cons* newSolid + auto newSolid = new G4Cons(msol->GetName(), msol->GetInnerRadiusPlusZ(), msol->GetOuterRadiusPlusZ(), msol->GetInnerRadiusMinusZ(), msol->GetOuterRadiusMinusZ(), @@ -70,9 +70,7 @@ G4VParameterisationCons( EAxis axis, G4int nDiv, G4double width, } //------------------------------------------------------------------------ -G4VParameterisationCons::~G4VParameterisationCons() -{ -} +G4VParameterisationCons::~G4VParameterisationCons() = default; //-------------------------------------------------------------------------- G4ParameterisationConsRho:: @@ -84,7 +82,7 @@ G4ParameterisationConsRho( EAxis axis, G4int nDiv, CheckParametersValidity(); SetType( "DivisionConsRho" ); - G4Cons* msol = (G4Cons*)(fmotherSolid); + auto msol = (G4Cons*)(fmotherSolid); if( msol->GetInnerRadiusPlusZ() == 0. ) { std::ostringstream message; @@ -101,7 +99,7 @@ G4ParameterisationConsRho( EAxis axis, G4int nDiv, } else if( divType == DivNDIV ) { - G4Cons* mconsol = (G4Cons*)(msolid); + auto mconsol = (G4Cons*)(msolid); fwidth = CalculateWidth( mconsol->GetOuterRadiusMinusZ() - mconsol->GetInnerRadiusMinusZ(), nDiv, offset ); } @@ -118,14 +116,12 @@ G4ParameterisationConsRho( EAxis axis, G4int nDiv, } //-------------------------------------------------------------------------- -G4ParameterisationConsRho::~G4ParameterisationConsRho() -{ -} +G4ParameterisationConsRho::~G4ParameterisationConsRho() = default; //------------------------------------------------------------------------ G4double G4ParameterisationConsRho::GetMaxParameter() const { - G4Cons* msol = (G4Cons*)(fmotherSolid); + auto msol = (G4Cons*)(fmotherSolid); return msol->GetOuterRadiusMinusZ() - msol->GetInnerRadiusMinusZ(); } @@ -168,7 +164,7 @@ G4ParameterisationConsRho:: ComputeDimensions( G4Cons& cons, const G4int copyNo, const G4VPhysicalVolume* ) const { - G4Cons* msol = (G4Cons*)(fmotherSolid); + auto msol = (G4Cons*)(fmotherSolid); G4double pRMin1 = msol->GetInnerRadiusMinusZ() + foffset + fwidth*copyNo; G4double pRMax1 = msol->GetInnerRadiusMinusZ() + foffset + fwidth*(copyNo+1); @@ -218,7 +214,7 @@ G4ParameterisationConsPhi( EAxis axis, G4int nDiv, CheckParametersValidity(); SetType( "DivisionConsPhi" ); - G4Cons* msol = (G4Cons*)(fmotherSolid); + auto msol = (G4Cons*)(fmotherSolid); if( divType == DivWIDTH ) { fnDiv = CalculateNDiv( msol->GetDeltaPhiAngle(), width, offset ); @@ -240,14 +236,12 @@ G4ParameterisationConsPhi( EAxis axis, G4int nDiv, } //-------------------------------------------------------------------------- -G4ParameterisationConsPhi::~G4ParameterisationConsPhi() -{ -} +G4ParameterisationConsPhi::~G4ParameterisationConsPhi() = default; //------------------------------------------------------------------------ G4double G4ParameterisationConsPhi::GetMaxParameter() const { - G4Cons* msol = (G4Cons*)(fmotherSolid); + auto msol = (G4Cons*)(fmotherSolid); return msol->GetDeltaPhiAngle(); } @@ -284,7 +278,7 @@ G4ParameterisationConsPhi:: ComputeDimensions( G4Cons& cons, const G4int, const G4VPhysicalVolume* ) const { - G4Cons* msol = (G4Cons*)(fmotherSolid); + auto msol = (G4Cons*)(fmotherSolid); G4double pRMin1 = msol->GetInnerRadiusMinusZ(); G4double pRMax1 = msol->GetOuterRadiusMinusZ(); @@ -324,7 +318,7 @@ G4ParameterisationConsZ( EAxis axis, G4int nDiv, CheckParametersValidity(); SetType( "DivisionConsZ" ); - G4Cons* msol = (G4Cons*)(fmotherSolid); + auto msol = (G4Cons*)(fmotherSolid); if( divType == DivWIDTH ) { fnDiv = CalculateNDiv( 2*msol->GetZHalfLength(), width, offset ); @@ -347,14 +341,12 @@ G4ParameterisationConsZ( EAxis axis, G4int nDiv, } //-------------------------------------------------------------------------- -G4ParameterisationConsZ::~G4ParameterisationConsZ() -{ -} +G4ParameterisationConsZ::~G4ParameterisationConsZ() = default; //------------------------------------------------------------------------ G4double G4ParameterisationConsZ::GetMaxParameter() const { - G4Cons* msol = (G4Cons*)(fmotherSolid); + auto msol = (G4Cons*)(fmotherSolid); return 2*msol->GetZHalfLength(); } @@ -364,7 +356,7 @@ G4ParameterisationConsZ:: ComputeTransformation( const G4int copyNo, G4VPhysicalVolume* physVol ) const { //----- set translation: along Z axis - G4Cons* motherCons = (G4Cons*)(GetMotherSolid()); + auto motherCons = (G4Cons*)(GetMotherSolid()); G4double posi = - motherCons->GetZHalfLength() + OffsetZ() + fwidth/2 + copyNo*fwidth; G4ThreeVector origin(0.,0.,posi); @@ -392,7 +384,7 @@ G4ParameterisationConsZ:: ComputeDimensions( G4Cons& cons, const G4int copyNo, const G4VPhysicalVolume* ) const { - G4Cons* msol = (G4Cons*)(fmotherSolid); + auto msol = (G4Cons*)(fmotherSolid); G4double mHalfLength = msol->GetZHalfLength() - fhgap; G4double aRInner = (msol->GetInnerRadiusPlusZ() diff --git a/source/geometry/divisions/src/G4ParameterisationPara.cc b/source/geometry/divisions/src/G4ParameterisationPara.cc index 53061f54ae5..6f649982ac8 100644 --- a/source/geometry/divisions/src/G4ParameterisationPara.cc +++ b/source/geometry/divisions/src/G4ParameterisationPara.cc @@ -49,7 +49,7 @@ G4VParameterisationPara( EAxis axis, G4int nDiv, G4double width, DivisionType divType ) : G4VDivisionParameterisation( axis, nDiv, width, offset, divType, msolid ) { - G4Para* msol = (G4Para*)(msolid); + auto msol = (G4Para*)(msolid); if (msolid->GetEntityType() == "G4ReflectedSolid") { // Get constituent solid @@ -59,7 +59,7 @@ G4VParameterisationPara( EAxis axis, G4int nDiv, G4double width, fmotherSolid = msol; // Create a new solid with inversed parameters - G4Para* newSolid + auto newSolid = new G4Para(msol->GetName(), msol->GetXHalfLength(), msol->GetYHalfLength(), @@ -76,9 +76,7 @@ G4VParameterisationPara( EAxis axis, G4int nDiv, G4double width, } //------------------------------------------------------------------------ -G4VParameterisationPara::~G4VParameterisationPara() -{ -} +G4VParameterisationPara::~G4VParameterisationPara() = default; //------------------------------------------------------------------------ G4ParameterisationParaX:: @@ -90,7 +88,7 @@ G4ParameterisationParaX( EAxis axis, G4int nDiv, CheckParametersValidity(); SetType( "DivisionParaX" ); - G4Para* mpara = (G4Para*)(fmotherSolid); + auto mpara = (G4Para*)(fmotherSolid); if( divType == DivWIDTH ) { fnDiv = CalculateNDiv( 2*mpara->GetXHalfLength(), width, offset ); @@ -114,21 +112,19 @@ G4ParameterisationParaX( EAxis axis, G4int nDiv, //------------------------------------------------------------------------ G4double G4ParameterisationParaX::GetMaxParameter() const { - G4Para* msol = (G4Para*)(fmotherSolid); + auto msol = (G4Para*)(fmotherSolid); return 2*msol->GetXHalfLength(); } //------------------------------------------------------------------------ -G4ParameterisationParaX::~G4ParameterisationParaX() -{ -} +G4ParameterisationParaX::~G4ParameterisationParaX() = default; //------------------------------------------------------------------------ void G4ParameterisationParaX:: ComputeTransformation( const G4int copyNo, G4VPhysicalVolume *physVol ) const { - G4Para* msol = (G4Para*)(fmotherSolid ); + auto msol = (G4Para*)(fmotherSolid ); G4double mdx = msol->GetXHalfLength( ); //----- translation @@ -156,7 +152,7 @@ ComputeDimensions(G4Para& para, const G4int, const G4VPhysicalVolume*) const { //---- The division along X of a Para will result a Para - G4Para* msol = (G4Para*)(fmotherSolid); + auto msol = (G4Para*)(fmotherSolid); //---- Get G4double pDx = fwidth/2. - fhgap; @@ -190,7 +186,7 @@ G4ParameterisationParaY( EAxis axis, G4int nDiv, CheckParametersValidity(); SetType( "DivisionParaY" ); - G4Para* mpara = (G4Para*)(fmotherSolid); + auto mpara = (G4Para*)(fmotherSolid); if( divType == DivWIDTH ) { fnDiv = CalculateNDiv( 2*mpara->GetYHalfLength(), width, offset ); @@ -212,14 +208,12 @@ G4ParameterisationParaY( EAxis axis, G4int nDiv, } //------------------------------------------------------------------------ -G4ParameterisationParaY::~G4ParameterisationParaY() -{ -} +G4ParameterisationParaY::~G4ParameterisationParaY() = default; //------------------------------------------------------------------------ G4double G4ParameterisationParaY::GetMaxParameter() const { - G4Para* msol = (G4Para*)(fmotherSolid); + auto msol = (G4Para*)(fmotherSolid); return 2*msol->GetYHalfLength(); } @@ -228,7 +222,7 @@ void G4ParameterisationParaY:: ComputeTransformation( const G4int copyNo, G4VPhysicalVolume *physVol ) const { - G4Para* msol = (G4Para*)(fmotherSolid ); + auto msol = (G4Para*)(fmotherSolid ); G4double mdy = msol->GetYHalfLength( ); //----- translation @@ -258,7 +252,7 @@ ComputeDimensions(G4Para& para, const G4int, const G4VPhysicalVolume*) const { //---- The division along Y of a Para will result a Para - G4Para* msol = (G4Para*)(fmotherSolid); + auto msol = (G4Para*)(fmotherSolid); //---- Get G4double pDx = msol->GetXHalfLength(); @@ -292,7 +286,7 @@ G4ParameterisationParaZ( EAxis axis, G4int nDiv, CheckParametersValidity(); SetType( "DivisionParaZ" ); - G4Para* mpara = (G4Para*)(fmotherSolid); + auto mpara = (G4Para*)(fmotherSolid); if( divType == DivWIDTH ) { fnDiv = CalculateNDiv( 2*mpara->GetZHalfLength(), width, offset ); @@ -314,14 +308,12 @@ G4ParameterisationParaZ( EAxis axis, G4int nDiv, } //------------------------------------------------------------------------ -G4ParameterisationParaZ::~G4ParameterisationParaZ() -{ -} +G4ParameterisationParaZ::~G4ParameterisationParaZ() = default; //------------------------------------------------------------------------ G4double G4ParameterisationParaZ::GetMaxParameter() const { - G4Para* msol = (G4Para*)(fmotherSolid); + auto msol = (G4Para*)(fmotherSolid); return 2*msol->GetZHalfLength(); } @@ -330,7 +322,7 @@ void G4ParameterisationParaZ:: ComputeTransformation( const G4int copyNo, G4VPhysicalVolume *physVol ) const { - G4Para* msol = (G4Para*)(fmotherSolid ); + auto msol = (G4Para*)(fmotherSolid ); G4double mdz = msol->GetZHalfLength( ); //----- translation @@ -358,7 +350,7 @@ ComputeDimensions(G4Para& para, const G4int, const G4VPhysicalVolume*) const { //---- The division along Z of a Para will result a Para - G4Para* msol = (G4Para*)(fmotherSolid); + auto msol = (G4Para*)(fmotherSolid); //---- Get G4double pDx = msol->GetXHalfLength(); diff --git a/source/geometry/divisions/src/G4ParameterisationPolycone.cc b/source/geometry/divisions/src/G4ParameterisationPolycone.cc index 543b52005ce..1a4752632f4 100644 --- a/source/geometry/divisions/src/G4ParameterisationPolycone.cc +++ b/source/geometry/divisions/src/G4ParameterisationPolycone.cc @@ -53,7 +53,7 @@ G4VParameterisationPolycone( EAxis axis, G4int nDiv, G4double width, G4Exception("G4VParameterisationPolycone::G4VParameterisationPolycone()", "GeomDiv0001", FatalException, message); #endif */ - G4Polycone* msol = (G4Polycone*)(msolid); + auto msol = (G4Polycone*)(msolid); if (msolid->GetEntityType() == "G4ReflectedSolid") { // Get constituent solid @@ -71,10 +71,10 @@ G4VParameterisationPolycone( EAxis axis, G4int nDiv, G4double width, // Invert z values // - G4double* zValuesRefl = new G4double[nofZplanes]; + auto zValuesRefl = new G4double[nofZplanes]; for (G4int i=0; iGetName(), msol->GetStartPhi(), msol->GetEndPhi() - msol->GetStartPhi(), @@ -90,9 +90,7 @@ G4VParameterisationPolycone( EAxis axis, G4int nDiv, G4double width, } //--------------------------------------------------------------------- -G4VParameterisationPolycone::~G4VParameterisationPolycone() -{ -} +G4VParameterisationPolycone::~G4VParameterisationPolycone() = default; //--------------------------------------------------------------------- G4ParameterisationPolyconeRho:: @@ -104,7 +102,7 @@ G4ParameterisationPolyconeRho( EAxis axis, G4int nDiv, CheckParametersValidity(); SetType( "DivisionPolyconeRho" ); - G4Polycone* msol = (G4Polycone*)(fmotherSolid); + auto msol = (G4Polycone*)(fmotherSolid); G4PolyconeHistorical* origparamMother = msol->GetOriginalParameters(); if( divType == DivWIDTH ) @@ -130,16 +128,14 @@ G4ParameterisationPolyconeRho( EAxis axis, G4int nDiv, } //--------------------------------------------------------------------- -G4ParameterisationPolyconeRho::~G4ParameterisationPolyconeRho() -{ -} +G4ParameterisationPolyconeRho::~G4ParameterisationPolyconeRho() = default; //--------------------------------------------------------------------- void G4ParameterisationPolyconeRho::CheckParametersValidity() { G4VDivisionParameterisation::CheckParametersValidity(); - G4Polycone* msol = (G4Polycone*)(fmotherSolid); + auto msol = (G4Polycone*)(fmotherSolid); if( fDivisionType == DivNDIVandWIDTH || fDivisionType == DivWIDTH ) { @@ -166,7 +162,7 @@ void G4ParameterisationPolyconeRho::CheckParametersValidity() //------------------------------------------------------------------------ G4double G4ParameterisationPolyconeRho::GetMaxParameter() const { - G4Polycone* msol = (G4Polycone*)(fmotherSolid); + auto msol = (G4Polycone*)(fmotherSolid); G4PolyconeHistorical* original_pars = msol->GetOriginalParameters(); return original_pars->Rmax[0] - original_pars->Rmin[0]; } @@ -213,7 +209,7 @@ G4ParameterisationPolyconeRho:: ComputeDimensions( G4Polycone& pcone, const G4int copyNo, const G4VPhysicalVolume* ) const { - G4Polycone* msol = (G4Polycone*)(fmotherSolid); + auto msol = (G4Polycone*)(fmotherSolid); G4PolyconeHistorical* origparamMother = msol->GetOriginalParameters(); G4PolyconeHistorical origparam( *origparamMother ); @@ -251,7 +247,7 @@ G4ParameterisationPolyconePhi( EAxis axis, G4int nDiv, CheckParametersValidity(); SetType( "DivisionPolyconePhi" ); - G4Polycone* msol = (G4Polycone*)(fmotherSolid); + auto msol = (G4Polycone*)(fmotherSolid); G4double deltaPhi = msol->GetEndPhi() - msol->GetStartPhi(); if( divType == DivWIDTH ) @@ -275,14 +271,12 @@ G4ParameterisationPolyconePhi( EAxis axis, G4int nDiv, } //--------------------------------------------------------------------- -G4ParameterisationPolyconePhi::~G4ParameterisationPolyconePhi() -{ -} +G4ParameterisationPolyconePhi::~G4ParameterisationPolyconePhi() = default; //------------------------------------------------------------------------ G4double G4ParameterisationPolyconePhi::GetMaxParameter() const { - G4Polycone* msol = (G4Polycone*)(fmotherSolid); + auto msol = (G4Polycone*)(fmotherSolid); return msol->GetEndPhi() - msol->GetStartPhi(); } @@ -328,7 +322,7 @@ G4ParameterisationPolyconePhi:: ComputeDimensions( G4Polycone& pcone, const G4int, const G4VPhysicalVolume* ) const { - G4Polycone* msol = (G4Polycone*)(fmotherSolid); + auto msol = (G4Polycone*)(fmotherSolid); G4PolyconeHistorical* origparamMother = msol->GetOriginalParameters(); G4PolyconeHistorical origparam( *origparamMother ); @@ -384,9 +378,7 @@ G4ParameterisationPolyconeZ( EAxis axis, G4int nDiv, } //--------------------------------------------------------------------- -G4ParameterisationPolyconeZ::~G4ParameterisationPolyconeZ() -{ -} +G4ParameterisationPolyconeZ::~G4ParameterisationPolyconeZ() = default; //------------------------------------------------------------------------ G4double G4ParameterisationPolyconeZ::GetR(G4double z, diff --git a/source/geometry/divisions/src/G4ParameterisationPolyhedra.cc b/source/geometry/divisions/src/G4ParameterisationPolyhedra.cc index b09d0061b1b..af73477ece0 100644 --- a/source/geometry/divisions/src/G4ParameterisationPolyhedra.cc +++ b/source/geometry/divisions/src/G4ParameterisationPolyhedra.cc @@ -57,7 +57,7 @@ G4VParameterisationPolyhedra( EAxis axis, G4int nDiv, G4double width, "GeomDiv0001", FatalException, message); #endif */ - G4Polyhedra* msol = (G4Polyhedra*)(msolid); + auto msol = (G4Polyhedra*)(msolid); if ((msolid->GetEntityType() != "G4ReflectedSolid") && (msol->IsGeneric())) { message << "Generic construct for G4Polyhedra NOT supported." << G4endl @@ -83,9 +83,9 @@ G4VParameterisationPolyhedra( EAxis axis, G4int nDiv, G4double width, // Invert z values, convert radius parameters // - G4double* rminValues2 = new G4double[nofZplanes]; - G4double* rmaxValues2 = new G4double[nofZplanes]; - G4double* zValuesRefl = new G4double[nofZplanes]; + auto rminValues2 = new G4double[nofZplanes]; + auto rmaxValues2 = new G4double[nofZplanes]; + auto zValuesRefl = new G4double[nofZplanes]; for (G4int i=0; iGetName(), msol->GetStartPhi(), msol->GetEndPhi() - msol->GetStartPhi(), @@ -112,9 +112,7 @@ G4VParameterisationPolyhedra( EAxis axis, G4int nDiv, G4double width, } //------------------------------------------------------------------------ -G4VParameterisationPolyhedra::~G4VParameterisationPolyhedra() -{ -} +G4VParameterisationPolyhedra::~G4VParameterisationPolyhedra() = default; //-------------------------------------------------------------------------- G4double @@ -142,7 +140,7 @@ G4ParameterisationPolyhedraRho( EAxis axis, G4int nDiv, CheckParametersValidity(); SetType( "DivisionPolyhedraRho" ); - G4Polyhedra* msol = (G4Polyhedra*)(fmotherSolid); + auto msol = (G4Polyhedra*)(fmotherSolid); G4PolyhedraHistorical* original_pars = msol->GetOriginalParameters(); if( divType == DivWIDTH ) @@ -168,16 +166,14 @@ G4ParameterisationPolyhedraRho( EAxis axis, G4int nDiv, } //------------------------------------------------------------------------ -G4ParameterisationPolyhedraRho::~G4ParameterisationPolyhedraRho() -{ -} +G4ParameterisationPolyhedraRho::~G4ParameterisationPolyhedraRho() = default; //--------------------------------------------------------------------- void G4ParameterisationPolyhedraRho::CheckParametersValidity() { G4VDivisionParameterisation::CheckParametersValidity(); - G4Polyhedra* msol = (G4Polyhedra*)(fmotherSolid); + auto msol = (G4Polyhedra*)(fmotherSolid); if( fDivisionType == DivNDIVandWIDTH || fDivisionType == DivWIDTH ) { @@ -204,7 +200,7 @@ void G4ParameterisationPolyhedraRho::CheckParametersValidity() //------------------------------------------------------------------------ G4double G4ParameterisationPolyhedraRho::GetMaxParameter() const { - G4Polyhedra* msol = (G4Polyhedra*)(fmotherSolid); + auto msol = (G4Polyhedra*)(fmotherSolid); G4PolyhedraHistorical* original_pars = msol->GetOriginalParameters(); return original_pars->Rmax[0] - original_pars->Rmin[0]; } @@ -251,7 +247,7 @@ G4ParameterisationPolyhedraRho:: ComputeDimensions( G4Polyhedra& phedra, const G4int copyNo, const G4VPhysicalVolume* ) const { - G4Polyhedra* msol = (G4Polyhedra*)(fmotherSolid); + auto msol = (G4Polyhedra*)(fmotherSolid); G4PolyhedraHistorical* origparamMother = msol->GetOriginalParameters(); G4PolyhedraHistorical origparam( *origparamMother ); @@ -289,7 +285,7 @@ G4ParameterisationPolyhedraPhi( EAxis axis, G4int nDiv, CheckParametersValidity(); SetType( "DivisionPolyhedraPhi" ); - G4Polyhedra* msol = (G4Polyhedra*)(fmotherSolid); + auto msol = (G4Polyhedra*)(fmotherSolid); G4double deltaPhi = msol->GetEndPhi() - msol->GetStartPhi(); if( divType == DivWIDTH ) @@ -311,14 +307,12 @@ G4ParameterisationPolyhedraPhi( EAxis axis, G4int nDiv, } //------------------------------------------------------------------------ -G4ParameterisationPolyhedraPhi::~G4ParameterisationPolyhedraPhi() -{ -} +G4ParameterisationPolyhedraPhi::~G4ParameterisationPolyhedraPhi() = default; //------------------------------------------------------------------------ G4double G4ParameterisationPolyhedraPhi::GetMaxParameter() const { - G4Polyhedra* msol = (G4Polyhedra*)(fmotherSolid); + auto msol = (G4Polyhedra*)(fmotherSolid); return msol->GetEndPhi() - msol->GetStartPhi(); } @@ -327,7 +321,7 @@ void G4ParameterisationPolyhedraPhi::CheckParametersValidity() { G4VDivisionParameterisation::CheckParametersValidity(); - G4Polyhedra* msol = (G4Polyhedra*)(fmotherSolid); + auto msol = (G4Polyhedra*)(fmotherSolid); if( fDivisionType == DivNDIVandWIDTH || fDivisionType == DivWIDTH ) { @@ -407,7 +401,7 @@ G4ParameterisationPolyhedraPhi:: ComputeDimensions( G4Polyhedra& phedra, const G4int, const G4VPhysicalVolume* ) const { - G4Polyhedra* msol = (G4Polyhedra*)(fmotherSolid); + auto msol = (G4Polyhedra*)(fmotherSolid); G4PolyhedraHistorical* origparamMother = msol->GetOriginalParameters(); G4PolyhedraHistorical origparam( *origparamMother ); @@ -464,9 +458,7 @@ G4ParameterisationPolyhedraZ( EAxis axis, G4int nDiv, } //--------------------------------------------------------------------- -G4ParameterisationPolyhedraZ::~G4ParameterisationPolyhedraZ() -{ -} +G4ParameterisationPolyhedraZ::~G4ParameterisationPolyhedraZ() = default; //------------------------------------------------------------------------ G4double G4ParameterisationPolyhedraZ::GetR(G4double z, diff --git a/source/geometry/divisions/src/G4ParameterisationTrd.cc b/source/geometry/divisions/src/G4ParameterisationTrd.cc index 58e5158c610..31887b7dd2f 100644 --- a/source/geometry/divisions/src/G4ParameterisationTrd.cc +++ b/source/geometry/divisions/src/G4ParameterisationTrd.cc @@ -48,7 +48,7 @@ G4VParameterisationTrd( EAxis axis, G4int nDiv, G4double width, DivisionType divType ) : G4VDivisionParameterisation( axis, nDiv, width, offset, divType, msolid ) { - G4Trd* msol = (G4Trd*)(msolid); + auto msol = (G4Trd*)(msolid); if (msolid->GetEntityType() == "G4ReflectedSolid") { // Get constituent solid @@ -57,7 +57,7 @@ G4VParameterisationTrd( EAxis axis, G4int nDiv, G4double width, msol = (G4Trd*)(mConstituentSolid); // Create a new solid with inversed parameters - G4Trd* newSolid + auto newSolid = new G4Trd(msol->GetName(), msol->GetXHalfLength2(), msol->GetXHalfLength1(), msol->GetYHalfLength2(), msol->GetYHalfLength1(), @@ -70,9 +70,7 @@ G4VParameterisationTrd( EAxis axis, G4int nDiv, G4double width, } //------------------------------------------------------------------------ -G4VParameterisationTrd::~G4VParameterisationTrd() -{ -} +G4VParameterisationTrd::~G4VParameterisationTrd() = default; //------------------------------------------------------------------------ G4ParameterisationTrdX:: @@ -84,7 +82,7 @@ G4ParameterisationTrdX( EAxis axis, G4int nDiv, CheckParametersValidity(); SetType( "DivisionTrdX" ); - G4Trd* msol = (G4Trd*)(fmotherSolid); + auto msol = (G4Trd*)(fmotherSolid); if( divType == DivWIDTH ) { fnDiv = CalculateNDiv( msol->GetXHalfLength1()+msol->GetXHalfLength2(), @@ -116,13 +114,12 @@ G4ParameterisationTrdX( EAxis axis, G4int nDiv, //------------------------------------------------------------------------ G4ParameterisationTrdX::~G4ParameterisationTrdX() -{ -} += default; //------------------------------------------------------------------------ G4double G4ParameterisationTrdX::GetMaxParameter() const { - G4Trd* msol = (G4Trd*)(fmotherSolid); + auto msol = (G4Trd*)(fmotherSolid); return (msol->GetXHalfLength1()+msol->GetXHalfLength2()); } @@ -132,7 +129,7 @@ G4ParameterisationTrdX:: ComputeTransformation( const G4int copyNo, G4VPhysicalVolume *physVol ) const { - G4Trd* msol = (G4Trd*)(fmotherSolid ); + auto msol = (G4Trd*)(fmotherSolid ); G4double mdx = ( msol->GetXHalfLength1() + msol->GetXHalfLength2() ) / 2.; //----- translation G4ThreeVector origin(0.,0.,0.); @@ -169,7 +166,7 @@ void G4ParameterisationTrdX:: ComputeDimensions( G4Trd& trd, [[maybe_unused]] const G4int copyNo, const G4VPhysicalVolume* ) const { - G4Trd* msol = (G4Trd*)(fmotherSolid); + auto msol = (G4Trd*)(fmotherSolid); G4double pDy1 = msol->GetYHalfLength1(); G4double pDy2 = msol->GetYHalfLength2(); G4double pDz = msol->GetZHalfLength(); @@ -192,7 +189,7 @@ void G4ParameterisationTrdX::ComputeDimensions( G4Trap& trap, const G4int copyNo, const G4VPhysicalVolume* ) const { - G4Trd* msol = (G4Trd*)(fmotherSolid); + auto msol = (G4Trd*)(fmotherSolid); G4double pDy1 = msol->GetYHalfLength1(); G4double pDy2 = msol->GetYHalfLength2(); G4double pDz = msol->GetZHalfLength(); @@ -248,7 +245,7 @@ G4ParameterisationTrdY( EAxis axis, G4int nDiv, CheckParametersValidity(); SetType( "DivisionTrdY" ); - G4Trd* msol = (G4Trd*)(fmotherSolid); + auto msol = (G4Trd*)(fmotherSolid); if( divType == DivWIDTH ) { fnDiv = CalculateNDiv( 2*msol->GetYHalfLength1(), @@ -272,14 +269,12 @@ G4ParameterisationTrdY( EAxis axis, G4int nDiv, } //------------------------------------------------------------------------ -G4ParameterisationTrdY::~G4ParameterisationTrdY() -{ -} +G4ParameterisationTrdY::~G4ParameterisationTrdY() = default; //------------------------------------------------------------------------ G4double G4ParameterisationTrdY::GetMaxParameter() const { - G4Trd* msol = (G4Trd*)(fmotherSolid); + auto msol = (G4Trd*)(fmotherSolid); return (msol->GetYHalfLength1()+msol->GetYHalfLength2()); } @@ -288,7 +283,7 @@ void G4ParameterisationTrdY:: ComputeTransformation( const G4int copyNo, G4VPhysicalVolume* physVol ) const { - G4Trd* msol = (G4Trd*)(fmotherSolid ); + auto msol = (G4Trd*)(fmotherSolid ); G4double mdy = ( msol->GetYHalfLength1() + msol->GetYHalfLength2() ) / 2.; //----- translation @@ -327,7 +322,7 @@ ComputeDimensions(G4Trd& trd, const G4int, const G4VPhysicalVolume*) const { //---- The division along Y of a Trd will result a Trd, only //--- if Y at -Z and +Z are equal, else use the G4Trap version - G4Trd* msol = (G4Trd*)(fmotherSolid); + auto msol = (G4Trd*)(fmotherSolid); G4double pDx1 = msol->GetXHalfLength1(); G4double pDx2 = msol->GetXHalfLength2(); @@ -350,7 +345,7 @@ void G4ParameterisationTrdY::ComputeDimensions( G4Trap& trap, const G4int copyNo, const G4VPhysicalVolume* ) const { - G4Trd* msol = (G4Trd*)(fmotherSolid); + auto msol = (G4Trd*)(fmotherSolid); G4double pDx1 = msol->GetXHalfLength1(); G4double pDx2 = msol->GetXHalfLength2(); G4double pDz = msol->GetZHalfLength(); @@ -405,7 +400,7 @@ G4ParameterisationTrdZ( EAxis axis, G4int nDiv, CheckParametersValidity(); SetType( "DivTrdZ" ); - G4Trd* msol = (G4Trd*)(fmotherSolid); + auto msol = (G4Trd*)(fmotherSolid); if( divType == DivWIDTH ) { fnDiv = CalculateNDiv( 2*msol->GetZHalfLength(), @@ -429,14 +424,12 @@ G4ParameterisationTrdZ( EAxis axis, G4int nDiv, } //------------------------------------------------------------------------ -G4ParameterisationTrdZ::~G4ParameterisationTrdZ() -{ -} +G4ParameterisationTrdZ::~G4ParameterisationTrdZ() = default; //------------------------------------------------------------------------ G4double G4ParameterisationTrdZ::GetMaxParameter() const { - G4Trd* msol = (G4Trd*)(fmotherSolid); + auto msol = (G4Trd*)(fmotherSolid); return 2*msol->GetZHalfLength(); } @@ -445,7 +438,7 @@ void G4ParameterisationTrdZ:: ComputeTransformation(const G4int copyNo, G4VPhysicalVolume *physVol) const { - G4Trd* msol = (G4Trd*)(fmotherSolid ); + auto msol = (G4Trd*)(fmotherSolid ); G4double mdz = msol->GetZHalfLength(); //----- translation @@ -484,7 +477,7 @@ ComputeDimensions(G4Trd& trd, const G4int copyNo, const G4VPhysicalVolume*) const { //---- The division along Z of a Trd will result a Trd - G4Trd* msol = (G4Trd*)(fmotherSolid); + auto msol = (G4Trd*)(fmotherSolid); G4double pDx1 = msol->GetXHalfLength1(); G4double DDx = (msol->GetXHalfLength2() - msol->GetXHalfLength1() ); diff --git a/source/geometry/divisions/src/G4ParameterisationTubs.cc b/source/geometry/divisions/src/G4ParameterisationTubs.cc index aff526287f6..1cbd8a4b227 100644 --- a/source/geometry/divisions/src/G4ParameterisationTubs.cc +++ b/source/geometry/divisions/src/G4ParameterisationTubs.cc @@ -47,7 +47,7 @@ G4VParameterisationTubs( EAxis axis, G4int nDiv, G4double width, DivisionType divType ) : G4VDivisionParameterisation( axis, nDiv, width, offset, divType, msolid ) { - G4Tubs* msol = (G4Tubs*)(msolid); + auto msol = (G4Tubs*)(msolid); if (msolid->GetEntityType() == "G4ReflectedSolid") { //----- get constituent solid @@ -60,9 +60,7 @@ G4VParameterisationTubs( EAxis axis, G4int nDiv, G4double width, } //------------------------------------------------------------------------ -G4VParameterisationTubs::~G4VParameterisationTubs() -{ -} +G4VParameterisationTubs::~G4VParameterisationTubs() = default; //-------------------------------------------------------------------------- G4ParameterisationTubsRho:: @@ -74,7 +72,7 @@ G4ParameterisationTubsRho( EAxis axis, G4int nDiv, CheckParametersValidity(); SetType( "DivisionTubsRho" ); - G4Tubs* msol = (G4Tubs*)(fmotherSolid); + auto msol = (G4Tubs*)(fmotherSolid); if( divType == DivWIDTH ) { fnDiv = CalculateNDiv( msol->GetOuterRadius() - msol->GetInnerRadius(), @@ -99,14 +97,12 @@ G4ParameterisationTubsRho( EAxis axis, G4int nDiv, } //-------------------------------------------------------------------------- -G4ParameterisationTubsRho::~G4ParameterisationTubsRho() -{ -} +G4ParameterisationTubsRho::~G4ParameterisationTubsRho() = default; //------------------------------------------------------------------------ G4double G4ParameterisationTubsRho::GetMaxParameter() const { - G4Tubs* msol = (G4Tubs*)(fmotherSolid); + auto msol = (G4Tubs*)(fmotherSolid); return msol->GetOuterRadius() - msol->GetInnerRadius(); } @@ -150,7 +146,7 @@ G4ParameterisationTubsRho:: ComputeDimensions( G4Tubs& tubs, const G4int copyNo, const G4VPhysicalVolume* ) const { - G4Tubs* msol = (G4Tubs*)(fmotherSolid); + auto msol = (G4Tubs*)(fmotherSolid); G4double pRMin = msol->GetInnerRadius() + foffset + fwidth*copyNo + fhgap; G4double pRMax = msol->GetInnerRadius() + foffset + fwidth*(copyNo+1) - fhgap; @@ -185,7 +181,7 @@ G4ParameterisationTubsPhi( EAxis axis, G4int nDiv, CheckParametersValidity(); SetType( "DivisionTubsPhi" ); - G4Tubs* msol = (G4Tubs*)(fmotherSolid); + auto msol = (G4Tubs*)(fmotherSolid); if( divType == DivWIDTH ) { fnDiv = CalculateNDiv( msol->GetDeltaPhiAngle(), width, offset ); @@ -207,14 +203,12 @@ G4ParameterisationTubsPhi( EAxis axis, G4int nDiv, } //-------------------------------------------------------------------------- -G4ParameterisationTubsPhi::~G4ParameterisationTubsPhi() -{ -} +G4ParameterisationTubsPhi::~G4ParameterisationTubsPhi() = default; //------------------------------------------------------------------------ G4double G4ParameterisationTubsPhi::GetMaxParameter() const { - G4Tubs* msol = (G4Tubs*)(fmotherSolid); + auto msol = (G4Tubs*)(fmotherSolid); return msol->GetDeltaPhiAngle(); } @@ -259,7 +253,7 @@ G4ParameterisationTubsPhi:: ComputeDimensions( G4Tubs& tubs, const G4int, const G4VPhysicalVolume* ) const { - G4Tubs* msol = (G4Tubs*)(fmotherSolid); + auto msol = (G4Tubs*)(fmotherSolid); G4double pRMin = msol->GetInnerRadius(); G4double pRMax = msol->GetOuterRadius(); @@ -294,7 +288,7 @@ G4ParameterisationTubsZ( EAxis axis, G4int nDiv, CheckParametersValidity(); SetType( "DivisionTubsZ" ); - G4Tubs* msol = (G4Tubs*)(fmotherSolid); + auto msol = (G4Tubs*)(fmotherSolid); if( divType == DivWIDTH ) { fnDiv = CalculateNDiv( 2*msol->GetZHalfLength(), width, offset ); @@ -316,14 +310,12 @@ G4ParameterisationTubsZ( EAxis axis, G4int nDiv, } //-------------------------------------------------------------------------- -G4ParameterisationTubsZ::~G4ParameterisationTubsZ() -{ -} +G4ParameterisationTubsZ::~G4ParameterisationTubsZ() = default; //------------------------------------------------------------------------ G4double G4ParameterisationTubsZ::GetMaxParameter() const { - G4Tubs* msol = (G4Tubs*)(fmotherSolid); + auto msol = (G4Tubs*)(fmotherSolid); return 2*msol->GetZHalfLength(); } @@ -333,7 +325,7 @@ G4ParameterisationTubsZ:: ComputeTransformation(const G4int copyNo, G4VPhysicalVolume *physVol) const { //----- set translation: along Z axis - G4Tubs* motherTubs = (G4Tubs*)(fmotherSolid); + auto motherTubs = (G4Tubs*)(fmotherSolid); G4double posi = - motherTubs->GetZHalfLength() + OffsetZ() + fwidth/2 + copyNo*fwidth; G4ThreeVector origin(0.,0.,posi); @@ -370,7 +362,7 @@ G4ParameterisationTubsZ:: ComputeDimensions( G4Tubs& tubs, const G4int, const G4VPhysicalVolume* ) const { - G4Tubs* msol = (G4Tubs*)(fmotherSolid); + auto msol = (G4Tubs*)(fmotherSolid); G4double pRMin = msol->GetInnerRadius(); G4double pRMax = msol->GetOuterRadius(); diff --git a/source/geometry/divisions/src/G4ReplicatedSlice.cc b/source/geometry/divisions/src/G4ReplicatedSlice.cc index 77d98791451..39e9a59a11c 100644 --- a/source/geometry/divisions/src/G4ReplicatedSlice.cc +++ b/source/geometry/divisions/src/G4ReplicatedSlice.cc @@ -93,7 +93,7 @@ G4ReplicatedSlice::G4ReplicatedSlice(const G4String& pName, const G4double half_gap, const G4double offset ) : G4PVReplica(pName, nDivs, pAxis, pLogical, - pMotherPhysical ? pMotherPhysical->GetLogicalVolume() : nullptr) + pMotherPhysical != nullptr ? pMotherPhysical->GetLogicalVolume() : nullptr) { if (pMotherPhysical == nullptr) { @@ -117,7 +117,7 @@ G4ReplicatedSlice::G4ReplicatedSlice(const G4String& pName, const G4double half_gap, const G4double offset ) : G4PVReplica(pName, nDivs, pAxis, pLogical, - pMotherPhysical ? pMotherPhysical->GetLogicalVolume() : nullptr) + pMotherPhysical != nullptr ? pMotherPhysical->GetLogicalVolume() : nullptr) { if (pMotherPhysical == nullptr) { @@ -141,7 +141,7 @@ G4ReplicatedSlice::G4ReplicatedSlice(const G4String& pName, const G4double half_gap, const G4double offset ) : G4PVReplica(pName, 0, pAxis, pLogical, - pMotherPhysical ? pMotherPhysical->GetLogicalVolume() : nullptr) + pMotherPhysical != nullptr ? pMotherPhysical->GetLogicalVolume() : nullptr) { if (pMotherPhysical == nullptr) { @@ -271,7 +271,7 @@ G4ReplicatedSlice::CheckAndSetParameters( const EAxis pAxis, // in G4VPVParameterisation::ComputeTransformation, for others // it will stay the unity // - G4RotationMatrix* pRMat = new G4RotationMatrix(); + auto pRMat = new G4RotationMatrix(); SetRotation(pRMat); } diff --git a/source/geometry/magneticfield/GNUmakefile b/source/geometry/magneticfield/GNUmakefile deleted file mode 100644 index 02df9660e87..00000000000 --- a/source/geometry/magneticfield/GNUmakefile +++ /dev/null @@ -1,21 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for geometry/magneticfield library. G.Cosmo, 22/01/97. - -name := G4magneticfield - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include - -ifdef G4DEBUG_FIELD - CPPFLAGS += -DG4DEBUG_FIELD -endif - -include $(G4INSTALL)/config/common.gmk diff --git a/source/geometry/magneticfield/History b/source/geometry/magneticfield/History index e448529fc00..231dec36b88 100644 --- a/source/geometry/magneticfield/History +++ b/source/geometry/magneticfield/History @@ -6,18 +6,58 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-03-16 Gabriele Cosmo (field-V11-00-07) +## 2023-06-14 Gabriele Cosmo (field-V11-01-04) +- Applied clang-tidy fixes (readability, modernization, performance, ...). + +## 2023-06-12 John Apostolakis (field-V11-01-03) +- Inclusion of QSS integration method. + Most recent changes: + * Fixes for issue with SetPrecision (used unitialised values of simulator->x) + * Updated values of parameters in G4PropagatorInField to conservative values. + * Withdrew interim changes that made QSS the default method for full testing. + +## 2023-05-26 Lucio Santi +- Fixes for open issues: + * default values for QSS made stricter dQRel=0.001, dQMin=0.0001 (QSSDriver.icc) + to improve behaviour in full experiment test + * implemented missing DistChord method -- needed to enable stepping with Chord limit + +## 2023-01-31 John Apostolakis +- Initial inclusion of QSS integration method. + Renamed classes to include 'G4' prefix, and moved them from qss/ subdirectory. + Added Geant4 disclaimer / license to files. + Removed QSSmessenger from RunManager and G4PropagatorInField +- Temporarily made QSS the default method for full testing. + +## 2023-01-30 Rodrigo Castro, Lucio Santi & Leandro Gomez Vidal +- Included Quantum State Simulation (QSS) integration method + Alternative method of integration which creates approximation + functions for each coordinate (x,p) - changing the interpolation + polynomials when the deviation from exact solution is larger than + a threshold value. + Offers built-in interpolation capability - enabling faster finding + of the intersection of the trajectory with surfaces. + Currently restricted to using only with a pure magnetic field. + Created by Rodrigo Castro and Lucio Santi, with contributions + by Leandro A. Gómez Vidal (and others?) + +## 2023-03-16 Ben Morgan (field-V11-01-02) - Fixed compilation warnings on clang-15 for mismatched bounds declarations in input parameters for steppers. -## 2022-12-09 Laurie Nevay (field-V11-00-06) +## 2023-01-09 Ben Morgan (field-V11-01-01) +- Use PROJECT_ scoped _SOURCE/BINARY_DIR variables in place of CMAKE_ + scope version to ease use of Geant4 as a CMake subproject. + - Fixes [GitHub PR #52](https://github.com/Geant4/geant4/pull/52) + +## 2022-12-09 Laurie Nevay (field-V11-01-00) - Reduced printout for setting any valid value for epsilon_min / _max in G4FieldManager. -## 2022-11-28 Gabriele Cosmo (field-V11-00-05) +## 2022-11-28 Gabriele Cosmo (field-V11-00-05) - Fixed restore of stream precision in G4FieldManager::ReportBadEpsilonValue(). -## 2022-11-14 John Apostolakis (field-V11-00-04) +## 2022-11-14 John Apostolakis (field-V11-00-04) - Revised G4FieldManager to ensure that epsilon_min / _max parameters are less than a 'maximum accepted' accuracy (now=0.02) to ensure robust behaviour of the integration. Improved their Set methods, adding diff --git a/source/geometry/magneticfield/include/G4BFieldIntegrationDriver.hh b/source/geometry/magneticfield/include/G4BFieldIntegrationDriver.hh index 4df0375f557..f2a70b877f1 100644 --- a/source/geometry/magneticfield/include/G4BFieldIntegrationDriver.hh +++ b/source/geometry/magneticfield/include/G4BFieldIntegrationDriver.hh @@ -50,92 +50,92 @@ class G4BFieldIntegrationDriver : public G4VIntegrationDriver G4BFieldIntegrationDriver(const G4BFieldIntegrationDriver &) = delete; const G4BFieldIntegrationDriver& operator =(const G4BFieldIntegrationDriver &) = delete; - virtual G4double AdvanceChordLimited(G4FieldTrack& track, - G4double hstep, - G4double eps, - G4double chordDistance) override; - - virtual G4bool AccurateAdvance(G4FieldTrack& track, - G4double hstep, - G4double eps, - G4double hinitial = 0) override + G4double AdvanceChordLimited(G4FieldTrack& track, + G4double hstep, + G4double eps, + G4double chordDistance) override; + + G4bool AccurateAdvance(G4FieldTrack& track, + G4double hstep, + G4double eps, + G4double hinitial = 0) override { - return fCurrDriver->AccurateAdvance(track, hstep, eps, hinitial); + return fCurrDriver->AccurateAdvance(track, hstep, eps, hinitial); } - virtual G4bool DoesReIntegrate() const override + G4bool DoesReIntegrate() const override { - return fCurrDriver->DoesReIntegrate(); + return fCurrDriver->DoesReIntegrate(); } //[[deprecated("will be removed")]] - virtual void GetDerivatives(const G4FieldTrack& track, - G4double dydx[]) const override + void GetDerivatives(const G4FieldTrack& track, + G4double dydx[]) const override { - fCurrDriver->GetDerivatives(track, dydx); + fCurrDriver->GetDerivatives(track, dydx); } //[[deprecated("will be removed")]] - virtual void GetDerivatives(const G4FieldTrack& track, - G4double dydx[], - G4double field[]) const override + void GetDerivatives(const G4FieldTrack& track, + G4double dydx[], + G4double field[]) const override { - fCurrDriver->GetDerivatives(track, dydx, field); + fCurrDriver->GetDerivatives(track, dydx, field); } - virtual void SetEquationOfMotion(G4EquationOfMotion* equation) override; + void SetEquationOfMotion(G4EquationOfMotion* equation) override; - virtual G4EquationOfMotion* GetEquationOfMotion() override + G4EquationOfMotion* GetEquationOfMotion() override { - return fCurrDriver->GetEquationOfMotion(); + return fCurrDriver->GetEquationOfMotion(); } //[[deprecated("use GetEquationOfMotion() instead of GetStepper()->GetEquationOfMotion()")]] - virtual const G4MagIntegratorStepper* GetStepper() const override + const G4MagIntegratorStepper* GetStepper() const override { - return fCurrDriver->GetStepper(); + return fCurrDriver->GetStepper(); } - virtual G4MagIntegratorStepper* GetStepper() override + G4MagIntegratorStepper* GetStepper() override { - return fCurrDriver->GetStepper(); + return fCurrDriver->GetStepper(); } - virtual G4double ComputeNewStepSize(G4double errMaxNorm, - G4double hstepCurrent) override + G4double ComputeNewStepSize(G4double errMaxNorm, + G4double hstepCurrent) override { - return fCurrDriver->ComputeNewStepSize(errMaxNorm, hstepCurrent); + return fCurrDriver->ComputeNewStepSize(errMaxNorm, hstepCurrent); } - virtual void SetVerboseLevel(G4int level) override + void SetVerboseLevel(G4int level) override { - fSmallStepDriver->SetVerboseLevel(level); - fLargeStepDriver->SetVerboseLevel(level); + fSmallStepDriver->SetVerboseLevel(level); + fLargeStepDriver->SetVerboseLevel(level); } - virtual G4int GetVerboseLevel() const override + G4int GetVerboseLevel() const override { - return fCurrDriver->GetVerboseLevel(); + return fCurrDriver->GetVerboseLevel(); } - virtual void OnComputeStep() override + void OnComputeStep(const G4FieldTrack* track) override { - fSmallStepDriver->OnComputeStep(); - fLargeStepDriver->OnComputeStep(); + fSmallStepDriver->OnComputeStep(track); + fLargeStepDriver->OnComputeStep(track); } - virtual void OnStartTracking() override + void OnStartTracking() override { - fSmallStepDriver->OnStartTracking(); - fLargeStepDriver->OnStartTracking(); + fSmallStepDriver->OnStartTracking(); + fLargeStepDriver->OnStartTracking(); } - virtual void StreamInfo( std::ostream& os ) const override + void StreamInfo( std::ostream& os ) const override { - os << "Small Step Driver Info: " << std::endl; - fSmallStepDriver->StreamInfo(os); - os << "Large Step Driver Info: " << std::endl; - fLargeStepDriver->StreamInfo(os); + os << "Small Step Driver Info: " << std::endl; + fSmallStepDriver->StreamInfo(os); + os << "Large Step Driver Info: " << std::endl; + fLargeStepDriver->StreamInfo(os); } // Write out the parameters / state of the driver diff --git a/source/geometry/magneticfield/include/G4BFieldIntegrationDriver.icc b/source/geometry/magneticfield/include/G4BFieldIntegrationDriver.icc new file mode 100644 index 00000000000..182dadfc363 --- /dev/null +++ b/source/geometry/magneticfield/include/G4BFieldIntegrationDriver.icc @@ -0,0 +1,122 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// +// +// class G4BFieldIntegrationDriver +// +// Class description: +// +// Specialized integration driver for pure magnetic field + +// History: +// - Created. D.Sorokin +// -------------------------------------------------------------------- + + +#include "globals.hh" +#include "G4GeometryTolerance.hh" +#include "G4FieldTrack.hh" +#include "G4FieldUtils.hh" + +namespace internal { + +G4Mag_EqRhs* toMagneticEquation(G4EquationOfMotion* equation) +{ + auto e = dynamic_cast(equation); + + if (!e) { + G4Exception("G4BFieldIntegrationDriver::G4BFieldIntegrationDriver", + "GeomField0003", FatalErrorInArgument, + "Works only with G4Mag_EqRhs"); + } + + return e; +} + +} // internal + + +template +G4BFieldIntegrationDriver::G4BFieldIntegrationDriver(G4double hminimum, + T* pStepper, + G4int numComponents, + G4int statisticsVerbose) + : G4IntegrationDriver(hminimum, pStepper, numComponents, statisticsVerbose) + , fallbackThreshold(pi / 3.) + , fequation(internal::toMagneticEquation(pStepper->GetEquationOfMotion())) + , fallbackStepper(fequation) +{ +} + +template +bool G4BFieldIntegrationDriver::QuickAdvance(G4FieldTrack& fieldTrack, + const G4double dydx[], + G4double hstep, + G4double inverseCurvatureRadius, + G4double& dchord_step, + G4double& dyerr) +{ + if (hstep * inverseCurvatureRadius < fallbackThreshold) { + return G4IntegrationDriver::QuickAdvance( + fieldTrack, dydx, hstep, inverseCurvatureRadius, dchord_step, dyerr); + } + + G4IntegrationDriver::IncrementQuickAdvanceCalls(); + + G4double yError[G4FieldTrack::ncompSVEC], + yIn[G4FieldTrack::ncompSVEC], + yOut[G4FieldTrack::ncompSVEC]; + + fieldTrack.DumpToArray(yIn); + + fallbackStepper.Stepper(yIn, dydx, hstep, yOut, yError); + dchord_step = fallbackStepper.DistChord(); + dyerr = field_utils::absoluteError(yOut, yError, hstep); + + fieldTrack.LoadFromArray(yOut, fallbackStepper.GetNumberOfVariables()); + fieldTrack.SetCurveLength(fieldTrack.GetCurveLength() + hstep); + + return true; +} + +template +void G4BFieldIntegrationDriver::SetEquationOfMotion(G4EquationOfMotion* equation) +{ + G4IntegrationDriver::SetEquationOfMotion(equation); + fequation = internal::toMagneticEquation(equation); +} + +template +G4double G4BFieldIntegrationDriver::GetInverseCurvatureRadius(const G4FieldTrack& track, + G4double field[]) const +{ + const G4double Bmag = std::sqrt(field[0] * field[0] + field[1] * field[1] + field[2] * field[2]); + const G4double momentum = track.GetMomentum().mag(); + const G4double particleCharge = fequation->FCof() / (CLHEP::eplus * CLHEP::c_light); + + return std::abs(field_utils::inverseCurvatureRadius(particleCharge, momentum, Bmag)); +} diff --git a/source/geometry/magneticfield/include/G4BogackiShampine23.hh b/source/geometry/magneticfield/include/G4BogackiShampine23.hh index 08f1fefde1d..04dcf13b8ce 100644 --- a/source/geometry/magneticfield/include/G4BogackiShampine23.hh +++ b/source/geometry/magneticfield/include/G4BogackiShampine23.hh @@ -54,33 +54,33 @@ class G4BogackiShampine23 : public G4MagIntegratorStepper G4BogackiShampine23(G4EquationOfMotion* EqRhs, G4int numberOfVariables = 6); - virtual void Stepper(const G4double yInput[], - const G4double dydx[], - G4double hstep, - G4double yOutput[], - G4double yError[]) override; + void Stepper(const G4double yInput[], + const G4double dydx[], + G4double hstep, + G4double yOutput[], + G4double yError[]) override; void Stepper(const G4double yInput[], const G4double dydx[], - G4double hstep, - G4double yOutput[], - G4double yError[], - G4double dydxOutput[]); + G4double hstep, + G4double yOutput[], + G4double yError[], + G4double dydxOutput[]); G4BogackiShampine23(const G4BogackiShampine23&) = delete; G4BogackiShampine23& operator = (const G4BogackiShampine23&) = delete; - virtual G4double DistChord() const override; - virtual G4int IntegratorOrder() const override { return 3; } + G4double DistChord() const override; + G4int IntegratorOrder() const override { return 3; } private: void makeStep(const G4double yInput[], const G4double dydx[], const G4double hstep, - G4double yOutput[], - G4double* dydxOutput = nullptr, - G4double* yError = nullptr) const; + G4double yOutput[], + G4double* dydxOutput = nullptr, + G4double* yError = nullptr) const; G4double fyIn[G4FieldTrack::ncompSVEC], fdydx[G4FieldTrack::ncompSVEC], diff --git a/source/geometry/magneticfield/include/G4BogackiShampine45.hh b/source/geometry/magneticfield/include/G4BogackiShampine45.hh index 8e586a3e1a6..e82d4a5dbd7 100644 --- a/source/geometry/magneticfield/include/G4BogackiShampine45.hh +++ b/source/geometry/magneticfield/include/G4BogackiShampine45.hh @@ -55,7 +55,7 @@ class G4BogackiShampine45 : public G4MagIntegratorStepper G4BogackiShampine45(G4EquationOfMotion* EqRhs, G4int numberOfVariables = 6, G4bool primary = true); - ~G4BogackiShampine45(); + ~G4BogackiShampine45() override; G4BogackiShampine45(const G4BogackiShampine45&) = delete; G4BogackiShampine45& operator=(const G4BogackiShampine45&) = delete; @@ -64,7 +64,7 @@ class G4BogackiShampine45 : public G4MagIntegratorStepper const G4double dydx[], G4double h, G4double yout[], - G4double yerr[] ) ; + G4double yerr[] ) override ; // This Stepper provides 'dense output'. After a successful // step, it is possible to obtain an estimate of the value @@ -72,9 +72,9 @@ class G4BogackiShampine45 : public G4MagIntegratorStepper // This requires only two additional evaluations of the // derivative (and thus the field). - inline void SetupInterpolation() + inline void SetupInterpolation() { - SetupInterpolationHigh(); // ( yInput, dydx, Step); + SetupInterpolationHigh(); // ( yInput, dydx, Step); } // For calculating the output at the tau fraction of Step @@ -82,8 +82,8 @@ class G4BogackiShampine45 : public G4MagIntegratorStepper inline void Interpolate( G4double tau, G4double yOut[] ) // Output value { - InterpolateHigh( tau, yOut); - // InterpolateHigh( yInput, dydx, Step, yOut, tau); + InterpolateHigh( tau, yOut); + // InterpolateHigh( yInput, dydx, Step, yOut, tau); } void SetupInterpolationHigh(); @@ -93,8 +93,8 @@ class G4BogackiShampine45 : public G4MagIntegratorStepper void InterpolateHigh( G4double tau, G4double yOut[] ) const; - G4double DistChord() const; - G4int IntegratorOrder() const { return 4; } + G4double DistChord() const override; + G4int IntegratorOrder() const override { return 4; } void GetLastDydx( G4double dyDxLast[] ); diff --git a/source/geometry/magneticfield/include/G4BorisDriver.hh b/source/geometry/magneticfield/include/G4BorisDriver.hh index 856338a1309..7e4a2c34188 100644 --- a/source/geometry/magneticfield/include/G4BorisDriver.hh +++ b/source/geometry/magneticfield/include/G4BorisDriver.hh @@ -41,35 +41,36 @@ #include "G4ChordFinderDelegate.hh" -class G4BorisDriver: - public G4VIntegrationDriver, - public G4ChordFinderDelegate +class G4BorisDriver : public G4VIntegrationDriver, + public G4ChordFinderDelegate { public: G4BorisDriver( G4double hminimum, G4BorisScheme* Boris, G4int numberOfComponents = 6, - bool verbosity = false); + G4bool verbosity = false); - inline ~G4BorisDriver() = default; + inline ~G4BorisDriver() override = default; inline G4BorisDriver(const G4BorisDriver&) = delete; inline G4BorisDriver& operator=(const G4BorisDriver&) = delete; // 1. Core methods that advance the integration - virtual G4bool AccurateAdvance( G4FieldTrack& track, - G4double stepLen, - G4double epsilon, - G4double beginStep = 0) override; - // Advance integration accurately - by relative accuracy better than 'epsilon' - - virtual G4bool QuickAdvance( G4FieldTrack& y_val, // In/Out - const G4double dydx[], - G4double hstep, - G4double& missDist, // Out: estimated sagitta - G4double& dyerr ) override; - // Attempt one integration step, and return estimated error 'dyerr' + + G4bool AccurateAdvance( G4FieldTrack& track, + G4double stepLen, + G4double epsilon, + G4double beginStep = 0) override; + // Advance integration accurately + // - by relative accuracy better than 'epsilon' + + G4bool QuickAdvance( G4FieldTrack& y_val, // In/Out + const G4double dydx[], + G4double hstep, + G4double& missDist, // Out: estimated sagitta + G4double& dyerr ) override; + // Attempt one integration step, and return estimated error 'dyerr' void OneGoodStep(G4double yCurrentState[], // In/Out: state ('y') G4double& curveLength, // In/Out: 'x' @@ -79,75 +80,79 @@ class G4BorisDriver: G4double charge, G4double& hdid, // Out: step achieved G4double& hnext); // Out: proposed next step - // Method to implement Accurate Advance + // Method to implement Accurate Advance // 2. Methods needed to co-work with G4ChordFinder - virtual G4double AdvanceChordLimited(G4FieldTrack& track, - G4double hstep, - G4double eps, - G4double chordDistance) override + + G4double AdvanceChordLimited(G4FieldTrack& track, + G4double hstep, + G4double eps, + G4double chordDistance) override { return ChordFinderDelegate:: AdvanceChordLimitedImpl(track, hstep, eps, chordDistance); } - virtual void OnStartTracking() override { + void OnStartTracking() override + { ChordFinderDelegate::ResetStepEstimate(); } - virtual void OnComputeStep() override {}; - + void OnComputeStep(const G4FieldTrack*) override {} + // 3. Does the method redo integrations when called to obtain values for + // internal, smaller intervals? (when needed to identify an intersection) - // 3. Does the method redo integrations when called to obtain values - // for internal, smaller intervals ? - // (when needed to identify an intersection.) - virtual G4bool DoesReIntegrate() const override { return true; } - // It would be no if it just used interpolation to provide a result. + G4bool DoesReIntegrate() const override { return true; } + // It would be no if it just used interpolation to provide a result. // 4. Relevant for calculating a new step size to achieve required accuracy - inline virtual G4double ComputeNewStepSize( - G4double errMaxNorm, // normalised error - G4double hstepCurrent) override; // current step size + + inline G4double ComputeNewStepSize(G4double errMaxNorm, // normalised error + G4double hstepCurrent) override; // current step size G4double ShrinkStepSize2(G4double h, G4double error2) const; G4double GrowStepSize2(G4double h, G4double error2) const; - // Calculate the next step size given the square of the relative error + // Calculate the next step size given the square of the relative error // 5. Auxiliary Methods ... - virtual void GetDerivatives( const G4FieldTrack& track, - G4double dydx[]) const override; - virtual void GetDerivatives( const G4FieldTrack& track, - G4double dydx[], - G4double field[]) const override; + void GetDerivatives( const G4FieldTrack& track, + G4double dydx[] ) const override; + + void GetDerivatives( const G4FieldTrack& track, + G4double dydx[], + G4double field[] ) const override; - inline virtual void SetVerboseLevel(G4int level) override; - inline virtual G4int GetVerboseLevel() const override; + inline void SetVerboseLevel(G4int level) override; + inline G4int GetVerboseLevel() const override; - inline virtual G4EquationOfMotion* GetEquationOfMotion() override; + inline G4EquationOfMotion* GetEquationOfMotion() override; inline const G4EquationOfMotion* GetEquationOfMotion() const; - virtual void SetEquationOfMotion(G4EquationOfMotion* equation) override; + void SetEquationOfMotion(G4EquationOfMotion* equation) override; - virtual void StreamInfo( std::ostream& os ) const override; + void StreamInfo( std::ostream& os ) const override; // Write out the parameters / state of the driver // 6. Not relevant for Boris and other non-RK methods - inline virtual const G4MagIntegratorStepper* GetStepper() const override; - inline virtual G4MagIntegratorStepper* GetStepper() override; + + inline const G4MagIntegratorStepper* GetStepper() const override; + inline G4MagIntegratorStepper* GetStepper() override; private: + inline G4int GetNumberOfVariables() const; inline void CheckStep(const G4ThreeVector& posIn, const G4ThreeVector& posOut, - G4double hdid) const; + G4double hdid) const; private: + // INVARIANTS -- remain unchanged during tracking / integration // Parameters G4double fMinimumStep; - bool fVerbosity; + G4bool fVerbosity; // State -- The core stepping algorithm G4BorisScheme* boris; @@ -165,7 +170,7 @@ class G4BorisDriver: // const G4int interval_sequence[2]; // INVARIANTS -- Parameters for ensuring that one call has finite number of integration steps - static constexpr int fMaxNoSteps = 300; + static constexpr G4int fMaxNoSteps = 300; static constexpr G4double fSmallestFraction= 1e-12; // To avoid FP underflow ! ( 1.e-6 for single prec) static constexpr G4int fIntegratorOrder= 2; // 2nd order method -- needed for error control @@ -179,8 +184,7 @@ class G4BorisDriver: static const G4double fErrorConstraintShrink; static const G4double fErrorConstraintGrow; - using ChordFinderDelegate = - G4ChordFinderDelegate; + using ChordFinderDelegate = G4ChordFinderDelegate; }; #include "G4BorisDriver.icc" diff --git a/source/geometry/magneticfield/include/G4BorisDriver.icc b/source/geometry/magneticfield/include/G4BorisDriver.icc index 0f7b44bb502..eb897eac796 100644 --- a/source/geometry/magneticfield/include/G4BorisDriver.icc +++ b/source/geometry/magneticfield/include/G4BorisDriver.icc @@ -31,12 +31,12 @@ void G4BorisDriver::SetVerboseLevel(G4int level) { - fVerbosity = level; + fVerbosity = (level != 0); } G4int G4BorisDriver::GetVerboseLevel() const { - return fVerbosity; + return static_cast(fVerbosity); } G4double G4BorisDriver::ComputeNewStepSize( G4double /* errMaxNorm*/, G4double hstepCurrent) diff --git a/source/geometry/magneticfield/include/G4BulirschStoer.hh b/source/geometry/magneticfield/include/G4BulirschStoer.hh index 9ab2a4d8057..eec849fddc7 100644 --- a/source/geometry/magneticfield/include/G4BulirschStoer.hh +++ b/source/geometry/magneticfield/include/G4BulirschStoer.hh @@ -90,10 +90,10 @@ class G4BulirschStoer // Modified midpoint algorithm G4ModifiedMidpoint m_midpoint; - G4bool m_last_step_rejected; - G4bool m_first; + G4bool m_last_step_rejected{false}; + G4bool m_first{true}; - G4double m_dt_last; + G4double m_dt_last{0.0}; // G4double m_t_last; // Max allowed time step diff --git a/source/geometry/magneticfield/include/G4BulirschStoerDriver.hh b/source/geometry/magneticfield/include/G4BulirschStoerDriver.hh index b56c62ca575..de3ecca5001 100644 --- a/source/geometry/magneticfield/include/G4BulirschStoerDriver.hh +++ b/source/geometry/magneticfield/include/G4BulirschStoerDriver.hh @@ -70,7 +70,7 @@ class G4IntegrationDriver: ChordFinderDelegate::ResetStepEstimate(); } - virtual void OnComputeStep() override {}; + virtual void OnComputeStep(const G4FieldTrack* /*track*/ = nullptr) override {}; virtual G4bool DoesReIntegrate() const override { return false; } /// ???? diff --git a/source/geometry/magneticfield/include/G4CachedMagneticField.hh b/source/geometry/magneticfield/include/G4CachedMagneticField.hh index e081d8b0bf5..1d2a1109544 100644 --- a/source/geometry/magneticfield/include/G4CachedMagneticField.hh +++ b/source/geometry/magneticfield/include/G4CachedMagneticField.hh @@ -40,43 +40,43 @@ class G4CachedMagneticField : public G4MagneticField { - public: // with description + public: - G4CachedMagneticField(G4MagneticField*, G4double distanceConst); - virtual ~G4CachedMagneticField(); - // Constructor and destructor. No actions. + G4CachedMagneticField(G4MagneticField*, G4double distanceConst); + ~G4CachedMagneticField() override; + // Constructor and destructor. No actions. - G4CachedMagneticField(const G4CachedMagneticField& r); - G4CachedMagneticField& operator = (const G4CachedMagneticField& p); - // Copy constructor & assignment operator. + G4CachedMagneticField(const G4CachedMagneticField& r); + G4CachedMagneticField& operator = (const G4CachedMagneticField& p); + // Copy constructor & assignment operator. - virtual void GetFieldValue( const G4double Point[4], - G4double* Bfield ) const; + void GetFieldValue( const G4double Point[4], + G4double* Bfield ) const override; - G4double GetConstDistance() const { return fDistanceConst; } - void SetConstDistance( G4double dist ){ fDistanceConst= dist;} + G4double GetConstDistance() const { return fDistanceConst; } + void SetConstDistance( G4double dist ) { fDistanceConst= dist;} - G4int GetCountCalls() const { return fCountCalls; } - G4int GetCountEvaluations() const { return fCountEvaluations; } - void ClearCounts() { fCountCalls = 0; fCountEvaluations=0; } - void ReportStatistics(); + G4int GetCountCalls() const { return fCountCalls; } + G4int GetCountEvaluations() const { return fCountEvaluations; } + void ClearCounts() { fCountCalls = 0; fCountEvaluations=0; } + void ReportStatistics(); - virtual G4Field* Clone() const; + G4Field* Clone() const override; protected: - mutable G4int fCountCalls = 0, fCountEvaluations = 0; + mutable G4int fCountCalls = 0, fCountEvaluations = 0; private: - G4MagneticField* fpMagneticField = nullptr; - G4double fDistanceConst; - // When the field is evaluated within this distance it will not change + G4MagneticField* fpMagneticField = nullptr; + G4double fDistanceConst; + // When the field is evaluated within this distance it will not change - // Caching state - // - mutable G4ThreeVector fLastLocation; - mutable G4ThreeVector fLastValue; + // Caching state + // + mutable G4ThreeVector fLastLocation; + mutable G4ThreeVector fLastValue; }; #endif /* G4CACHED_MAGNETIC_FIELD_DEF */ diff --git a/source/geometry/magneticfield/include/G4CashKarpRKF45.hh b/source/geometry/magneticfield/include/G4CashKarpRKF45.hh index ebbb4fb3282..eda1a6138f1 100644 --- a/source/geometry/magneticfield/include/G4CashKarpRKF45.hh +++ b/source/geometry/magneticfield/include/G4CashKarpRKF45.hh @@ -43,24 +43,25 @@ class G4CashKarpRKF45 : public G4MagIntegratorStepper { - - public: // with description + public: G4CashKarpRKF45( G4EquationOfMotion* EqRhs, G4int numberOfVariables = 6, G4bool primary = true ) ; - ~G4CashKarpRKF45() ; + ~G4CashKarpRKF45() override ; + + G4CashKarpRKF45(const G4CashKarpRKF45&) = delete; + G4CashKarpRKF45& operator=(const G4CashKarpRKF45&) = delete; + // Deleted copy constructor and assignment operator. void Stepper( const G4double y[], const G4double dydx[], G4double h, G4double yout[], - G4double yerr[] ) ; - - public: // without description + G4double yerr[] ) override ; - G4double DistChord() const; - G4int IntegratorOrder() const { return 4; } + G4double DistChord() const override; + G4int IntegratorOrder() const override { return 4; } private: @@ -74,10 +75,6 @@ class G4CashKarpRKF45 : public G4MagIntegratorStepper G4double B2[] ); // No longer used. Obsolete. - G4CashKarpRKF45(const G4CashKarpRKF45&); - G4CashKarpRKF45& operator=(const G4CashKarpRKF45&); - // Private copy constructor and assignment operator. - private: G4double *ak2, *ak3, *ak4, *ak5, *ak6, *yTemp, *yIn; // *ak7 @@ -88,8 +85,7 @@ class G4CashKarpRKF45 : public G4MagIntegratorStepper *fLastDyDx, *fMidVector, *fMidError; // for DistChord calculations - G4CashKarpRKF45* fAuxStepper = nullptr; - + G4CashKarpRKF45* fAuxStepper = nullptr; }; #endif diff --git a/source/geometry/magneticfield/include/G4ChargeState.hh b/source/geometry/magneticfield/include/G4ChargeState.hh index d11eb65c405..d34a5d57051 100644 --- a/source/geometry/magneticfield/include/G4ChargeState.hh +++ b/source/geometry/magneticfield/include/G4ChargeState.hh @@ -36,9 +36,9 @@ #include "globals.hh" -class G4ChargeState // Charge & moments +class G4ChargeState { - public: // without description + public: inline G4ChargeState(G4double charge, G4double magnetic_dipole_moment, @@ -99,8 +99,8 @@ class G4ChargeState // Charge & moments G4double electric_dipole_moment, G4double magnetic_charge ); - public: // Obsolete - + // Obsolete + // inline void SetSpin(G4double spin){ SetPDGSpin( spin); } inline G4double GetSpin() const { return GetPDGSpin(); } @@ -139,7 +139,7 @@ inline G4ChargeState::G4ChargeState( const G4ChargeState& right ) inline G4ChargeState& G4ChargeState::operator = ( const G4ChargeState& right ) { - if (&right == this) return *this; + if (&right == this) { return *this; } fCharge = right.fCharge; fSpin = right.fSpin; diff --git a/source/geometry/magneticfield/include/G4ChordFinder.hh b/source/geometry/magneticfield/include/G4ChordFinder.hh index 1f3a4b9ab7e..323991de9b4 100644 --- a/source/geometry/magneticfield/include/G4ChordFinder.hh +++ b/source/geometry/magneticfield/include/G4ChordFinder.hh @@ -55,11 +55,14 @@ class G4ChordFinder // The most flexible constructor, which allows the user to specify // any type of field, equation, stepper and integration driver. + enum kIntegrationType { kDefaultDriverType=0, kFSALStepperType=1, + kTemplatedStepperType, kRegularStepperType, kBfieldDriverType, kQss2DriverType, kQss3DriverType }; + G4ChordFinder( G4MagneticField* itsMagField, G4double stepMinimum = 1.0e-2, // * mm G4MagIntegratorStepper* pItsStepper = nullptr, // G4bool useHigherEfficiencyStepper = true, - G4int stepperDriverChoice = 2 ); + G4int stepperDriverChoice = kTemplatedStepperType ); // A constructor that creates defaults for all "children" classes. // // The type of equation of motion is fixed. @@ -67,8 +70,8 @@ class G4ChordFinder // and the corresponding integration driver. // Except if 'useFSAL' is set (true), which provides a FSAL stepper // and its corresponding specialised (templated) driver. - - virtual ~G4ChordFinder(); + + virtual ~G4ChordFinder(); G4ChordFinder(const G4ChordFinder&) = delete; G4ChordFinder& operator=(const G4ChordFinder&) = delete; @@ -113,11 +116,13 @@ class G4ChordFinder inline G4int SetVerbose( G4int newvalue=1); // Set verbosity and return old value - void OnComputeStep(); + void OnComputeStep(const G4FieldTrack* track); friend std::ostream& operator<<( std::ostream& os, const G4ChordFinder& cf); + static void SetVerboseConstruction(G4bool v=true) { gVerboseCtor=v;} + // Verbosity for contructor protected: // ......................................................... void PrintDchordTrial(G4int noTrials, @@ -125,6 +130,8 @@ class G4ChordFinder G4double oldStepTrial, G4double dChordStep); + static G4bool gVerboseCtor; // Verbosity for contructor + private: // ............................................................ // Constants diff --git a/source/geometry/magneticfield/include/G4ChordFinder.icc b/source/geometry/magneticfield/include/G4ChordFinder.icc index e516ad63d34..4a108080f90 100644 --- a/source/geometry/magneticfield/include/G4ChordFinder.icc +++ b/source/geometry/magneticfield/include/G4ChordFinder.icc @@ -79,7 +79,7 @@ G4double G4ChordFinder::InvParabolic ( const G4double xa, const G4double ya, S = yb/ya, T = ya/yc; const G4double Q = (T-1)*(R-1)*(S-1); - if (std::fabs(Q) OnComputeStep(); + fIntgrDriver->OnComputeStep(track); } diff --git a/source/geometry/magneticfield/include/G4ChordFinderDelegate.icc b/source/geometry/magneticfield/include/G4ChordFinderDelegate.icc index 715ef4a031c..0a14a71950d 100644 --- a/source/geometry/magneticfield/include/G4ChordFinderDelegate.icc +++ b/source/geometry/magneticfield/include/G4ChordFinderDelegate.icc @@ -290,8 +290,8 @@ void G4ChordFinderDelegate::SetFractions_Last_Next(G4double fractLast, G4double fractNext) { // Use -1.0 as request for Default. - if (fractLast == -1.0) fractLast = 1.0; // 0.9; - if (fractNext == -1.0) fractNext = 0.98; // 0.9; + if (fractLast == -1.0) { fractLast = 1.0; } // 0.9; + if (fractNext == -1.0) { fractNext = 0.98; } // 0.9; // fFirstFraction = 0.999; // Safe value, range: ~ 0.95 - 0.999 if (GetDriver().GetVerboseLevel() > 0) diff --git a/source/geometry/magneticfield/include/G4ClassicalRK4.hh b/source/geometry/magneticfield/include/G4ClassicalRK4.hh index 4bac52c5145..fa3a037f43d 100644 --- a/source/geometry/magneticfield/include/G4ClassicalRK4.hh +++ b/source/geometry/magneticfield/include/G4ClassicalRK4.hh @@ -39,12 +39,12 @@ class G4ClassicalRK4 : public G4MagErrorStepper { - public: // with description + public: G4ClassicalRK4(G4EquationOfMotion* EquationMotion, G4int numberOfVariables = 6) ; - ~G4ClassicalRK4() ; + ~G4ClassicalRK4() override ; G4ClassicalRK4(const G4ClassicalRK4&) = delete; G4ClassicalRK4& operator=(const G4ClassicalRK4&) = delete; @@ -56,7 +56,7 @@ class G4ClassicalRK4 : public G4MagErrorStepper void DumbStepper( const G4double yIn[], const G4double dydx[], G4double h, - G4double yOut[] ) ; + G4double yOut[] ) override ; // Given values for the variables y[0,..,n-1] and their derivatives // dydx[0,...,n-1] known at x, use the classical 4th Runge-Kutta // method to advance the solution over an interval h and return the @@ -65,9 +65,7 @@ class G4ClassicalRK4 : public G4MagErrorStepper // which returns derivatives dydx at x. The source is routine rk4 from // NRC p. 712-713 . - public: // without description - - G4int IntegratorOrder() const { return 4; } + G4int IntegratorOrder() const override { return 4; } private: @@ -83,8 +81,6 @@ class G4ClassicalRK4 : public G4MagErrorStepper private: - // G4int fNumberOfVariables ; // is set default to 6 in constructor - G4double *dydxm, *dydxt, *yt; // scratch space - not state }; diff --git a/source/geometry/magneticfield/include/G4ConstRK4.hh b/source/geometry/magneticfield/include/G4ConstRK4.hh index 87bf446fc9c..8d204a58791 100644 --- a/source/geometry/magneticfield/include/G4ConstRK4.hh +++ b/source/geometry/magneticfield/include/G4ConstRK4.hh @@ -44,10 +44,10 @@ class G4ConstRK4 : public G4MagErrorStepper { - public: // with description + public: - G4ConstRK4(G4Mag_EqRhs* EquationMotion, G4int numberOfStateVariables=8); - ~G4ConstRK4(); + G4ConstRK4(G4Mag_EqRhs* EquationMotion, G4int numberOfStateVariables=8); + ~G4ConstRK4() override; G4ConstRK4(const G4ConstRK4&) = delete; G4ConstRK4& operator=(const G4ConstRK4&) = delete; @@ -57,21 +57,19 @@ class G4ConstRK4 : public G4MagErrorStepper const G4double dydx[], G4double h, G4double yout[], - G4double yerr[] ); + G4double yerr[] ) override; void DumbStepper( const G4double yIn[], const G4double dydx[], G4double h, - G4double yOut[] ) ; - G4double DistChord() const; + G4double yOut[] ) override ; + G4double DistChord() const override; inline void RightHandSideConst(const G4double y[], G4double dydx[] ) const; inline void GetConstField(const G4double y[], G4double Field[]); - public: // without description - - G4int IntegratorOrder() const { return 4; } + G4int IntegratorOrder() const override { return 4; } private: diff --git a/source/geometry/magneticfield/include/G4DELPHIMagField.hh b/source/geometry/magneticfield/include/G4DELPHIMagField.hh index b5caa39ee2a..b117c188acb 100644 --- a/source/geometry/magneticfield/include/G4DELPHIMagField.hh +++ b/source/geometry/magneticfield/include/G4DELPHIMagField.hh @@ -43,14 +43,14 @@ class G4DELPHIMagField : public G4MagneticField { - public: // with description + public: G4DELPHIMagField(); - ~G4DELPHIMagField(); + ~G4DELPHIMagField() override; void GetFieldValue(const G4double yTrack[], - G4double B[] ) const; - G4Field* Clone() const; + G4double B[] ) const override; + G4Field* Clone() const override; }; #endif diff --git a/source/geometry/magneticfield/include/G4DoLoMcPriRK34.hh b/source/geometry/magneticfield/include/G4DoLoMcPriRK34.hh index 4e59c4e4d03..f27c9b005cd 100644 --- a/source/geometry/magneticfield/include/G4DoLoMcPriRK34.hh +++ b/source/geometry/magneticfield/include/G4DoLoMcPriRK34.hh @@ -47,7 +47,7 @@ class G4DoLoMcPriRK34 : public G4MagIntegratorStepper G4bool primary = true ); // Constructor using Equation - ~G4DoLoMcPriRK34(); + ~G4DoLoMcPriRK34() override; G4DoLoMcPriRK34(const G4DoLoMcPriRK34&) = delete; G4DoLoMcPriRK34& operator=(const G4DoLoMcPriRK34&) = delete; @@ -57,12 +57,12 @@ class G4DoLoMcPriRK34 : public G4MagIntegratorStepper const G4double dydx[], G4double h, G4double yout[], - G4double yerr[] ) ; + G4double yerr[] ) override ; void SetupInterpolation(); void SetupInterpolate( const G4double yInput[], - const G4double dydx[], - const G4double Step ); + const G4double dydx[], + const G4double Step ); // For Preparing the interpolation and calculating the extra stages void Interpolate( const G4double yInput[], @@ -81,8 +81,8 @@ class G4DoLoMcPriRK34 : public G4MagIntegratorStepper G4double Step, G4double tau ) ; - G4double DistChord() const; - G4int IntegratorOrder() const { return 3; } + G4double DistChord() const override; + G4int IntegratorOrder() const override { return 3; } private : diff --git a/source/geometry/magneticfield/include/G4DormandPrince745.hh b/source/geometry/magneticfield/include/G4DormandPrince745.hh index e5850aa26bd..00da54571d2 100644 --- a/source/geometry/magneticfield/include/G4DormandPrince745.hh +++ b/source/geometry/magneticfield/include/G4DormandPrince745.hh @@ -50,30 +50,30 @@ class G4DormandPrince745 : public G4MagIntegratorStepper G4DormandPrince745(G4EquationOfMotion* equation, G4int numberOfVariables = 6); - virtual void Stepper(const G4double yInput[], - const G4double dydx[], - G4double hstep, - G4double yOutput[], - G4double yError[]) override; + void Stepper(const G4double yInput[], + const G4double dydx[], + G4double hstep, + G4double yOutput[], + G4double yError[]) override; void Stepper(const G4double yInput[], const G4double dydx[], - G4double hstep, - G4double yOutput[], - G4double yError[], - G4double dydxOutput[]); + G4double hstep, + G4double yOutput[], + G4double yError[], + G4double dydxOutput[]); inline void SetupInterpolation() {} inline void Interpolate(G4double tau, G4double yOut[]) const { - Interpolate4thOrder(yOut, tau); + Interpolate4thOrder(yOut, tau); } // For calculating the output at the tau fraction of Step - virtual G4double DistChord() const override; + G4double DistChord() const override; - virtual G4int IntegratorOrder() const override { return 4; } + G4int IntegratorOrder() const override { return 4; } const G4String& StepperType() const { return gStepperType; } const G4String& StepperDescription() const { return gStepperDescription; } @@ -86,16 +86,18 @@ class G4DormandPrince745 : public G4MagIntegratorStepper void Interpolate5thOrder(G4double yOut[], G4double tau) const; G4EquationOfMotion* GetSpecificEquation() { return GetEquationOfMotion(); } - + private: - // Name and description of this steppers - plus details of its implementation + static const G4String gStepperType; static const G4String gStepperDescription; - // const unsigned int fIntegratorOrder = 4; // Should it not be 5 ? + // Name and description of this steppers + // plus details of its implementation field_utils::State ak2, ak3, ak4, ak5, ak6, ak7, ak8, ak9; field_utils::State fyIn, fyOut, fdydxIn; G4double fLastStepLength = -1.0; }; + #endif diff --git a/source/geometry/magneticfield/include/G4DormandPrinceRK56.hh b/source/geometry/magneticfield/include/G4DormandPrinceRK56.hh index 616b512576d..c21712408f0 100644 --- a/source/geometry/magneticfield/include/G4DormandPrinceRK56.hh +++ b/source/geometry/magneticfield/include/G4DormandPrinceRK56.hh @@ -45,7 +45,7 @@ class G4DormandPrinceRK56 : public G4MagIntegratorStepper G4int numberOfVariables = 6, G4bool primary = true ) ; - ~G4DormandPrinceRK56() ; + ~G4DormandPrinceRK56() override ; G4DormandPrinceRK56(const G4DormandPrinceRK56&) = delete; G4DormandPrinceRK56& operator=(const G4DormandPrinceRK56&) = delete; @@ -54,10 +54,10 @@ class G4DormandPrinceRK56 : public G4MagIntegratorStepper const G4double dydx[], G4double h, G4double yout[], - G4double yerr[] ) ; + G4double yerr[] ) override ; - G4double DistChord() const; - G4int IntegratorOrder() const { return 5; } + G4double DistChord() const override; + G4int IntegratorOrder() const override { return 5; } void SetupInterpolate_low( const G4double yInput[], const G4double dydx[], @@ -126,4 +126,3 @@ class G4DormandPrinceRK56 : public G4MagIntegratorStepper }; #endif /* G4DormandPrinceRK56 */ - diff --git a/source/geometry/magneticfield/include/G4DormandPrinceRK78.hh b/source/geometry/magneticfield/include/G4DormandPrinceRK78.hh index fbd7ee2df0a..45877fb7586 100644 --- a/source/geometry/magneticfield/include/G4DormandPrinceRK78.hh +++ b/source/geometry/magneticfield/include/G4DormandPrinceRK78.hh @@ -50,19 +50,19 @@ class G4DormandPrinceRK78 : public G4MagIntegratorStepper G4DormandPrinceRK78(G4EquationOfMotion* EqRhs, G4int numberOfVariables = 6, G4bool primary = true); - ~G4DormandPrinceRK78(); + ~G4DormandPrinceRK78() override; G4DormandPrinceRK78(const G4DormandPrinceRK78&) = delete; G4DormandPrinceRK78& operator=(const G4DormandPrinceRK78&) = delete; void Stepper( const G4double y[], const G4double dydx[], - G4double h, - G4double yout[], - G4double yerr[]) ; + G4double h, + G4double yout[], + G4double yerr[]) override ; - G4double DistChord() const; - inline G4int IntegratorOrder() const { return 7; } + G4double DistChord() const override; + inline G4int IntegratorOrder() const override { return 7; } private : diff --git a/source/geometry/magneticfield/include/G4ElectricField.hh b/source/geometry/magneticfield/include/G4ElectricField.hh index b475de90db0..652ff85a894 100644 --- a/source/geometry/magneticfield/include/G4ElectricField.hh +++ b/source/geometry/magneticfield/include/G4ElectricField.hh @@ -39,21 +39,21 @@ class G4ElectricField : public G4ElectroMagneticField { - public: // with description + public: - G4ElectricField(); - virtual ~G4ElectricField(); - // Constructor and destructor. No actions. + G4ElectricField(); + ~G4ElectricField() override; + // Constructor and destructor. No actions. - G4ElectricField(const G4ElectricField& r); - G4ElectricField& operator = (const G4ElectricField& p); - // Copy constructor & assignment operator. + G4ElectricField(const G4ElectricField& r); + G4ElectricField& operator = (const G4ElectricField& p); + // Copy constructor & assignment operator. - G4bool DoesFieldChangeEnergy() const { return true; } - // Since an electric field can change track energy + G4bool DoesFieldChangeEnergy() const override { return true; } + // Since an electric field can change track energy - virtual void GetFieldValue( const G4double Point[4], - G4double* Bfield ) const = 0; + void GetFieldValue( const G4double Point[4], + G4double* Bfield ) const override = 0; }; #endif /* G4ELECTRIC_FIELD_DEF */ diff --git a/source/geometry/magneticfield/include/G4ElectroMagneticField.hh b/source/geometry/magneticfield/include/G4ElectroMagneticField.hh index 5e49ee00cae..f8e47ca583e 100644 --- a/source/geometry/magneticfield/include/G4ElectroMagneticField.hh +++ b/source/geometry/magneticfield/include/G4ElectroMagneticField.hh @@ -51,24 +51,24 @@ class G4ElectroMagneticField : public G4Field { - public: // with description + public: - G4ElectroMagneticField(); - virtual ~G4ElectroMagneticField(); + G4ElectroMagneticField(); + ~G4ElectroMagneticField() override; - G4ElectroMagneticField(const G4ElectroMagneticField& r); - G4ElectroMagneticField& operator = (const G4ElectroMagneticField& p); - // Copy constructor & assignment operators. + G4ElectroMagneticField(const G4ElectroMagneticField& r); + G4ElectroMagneticField& operator = (const G4ElectroMagneticField& p); + // Copy constructor & assignment operators. - virtual void GetFieldValue(const G4double Point[4], - G4double *Bfield ) const = 0; - // Return as Bfield[0], [1], [2] the magnetic field x, y & z components - // and as Bfield[3], [4], [5] the electric field x, y & z components + void GetFieldValue(const G4double Point[4], + G4double *Bfield ) const override = 0; + // Return as Bfield[0], [1], [2] the magnetic field x, y & z components + // and as Bfield[3], [4], [5] the electric field x, y & z components - virtual G4bool DoesFieldChangeEnergy() const = 0; - // For field with an electric component this should be true - // For pure magnetic field this should be false - // Alternative: default safe implementation { return true; } + G4bool DoesFieldChangeEnergy() const override = 0; + // For field with an electric component this should be true + // For pure magnetic field this should be false + // Alternative: default safe implementation { return true; } }; #endif diff --git a/source/geometry/magneticfield/include/G4EqEMFieldWithEDM.hh b/source/geometry/magneticfield/include/G4EqEMFieldWithEDM.hh index da6255989c3..e181572767a 100644 --- a/source/geometry/magneticfield/include/G4EqEMFieldWithEDM.hh +++ b/source/geometry/magneticfield/include/G4EqEMFieldWithEDM.hh @@ -43,19 +43,19 @@ class G4ElectroMagneticField; class G4EqEMFieldWithEDM : public G4EquationOfMotion { - public: // with description + public: G4EqEMFieldWithEDM(G4ElectroMagneticField* emField ); - ~G4EqEMFieldWithEDM(); + ~G4EqEMFieldWithEDM() override; void SetChargeMomentumMass(G4ChargeState particleCharge, // in e+ units G4double MomentumXc, - G4double mass); + G4double mass) override; void EvaluateRhsGivenB(const G4double y[], const G4double Field[], - G4double dydx[] ) const; + G4double dydx[] ) const override; // Given the value of the electromagnetic field, this function // calculates the value of the derivative dydx. @@ -69,14 +69,13 @@ class G4EqEMFieldWithEDM : public G4EquationOfMotion private: - G4double charge, mass, magMoment, spin; + G4double charge{0.}, mass{0.}, magMoment{0.}, spin{0.}; - G4double fElectroMagCof ; - G4double fMassCof; - - G4double omegac, anomaly, eta; - G4double beta, gamma; + G4double fElectroMagCof{0.} ; + G4double fMassCof{0.}; + G4double omegac{0.}, anomaly{0.0011659208}, eta{0.}; + G4double beta{0.}, gamma{0.}; }; #endif diff --git a/source/geometry/magneticfield/include/G4EqEMFieldWithSpin.hh b/source/geometry/magneticfield/include/G4EqEMFieldWithSpin.hh index ea473fdea5b..86fcafae00e 100644 --- a/source/geometry/magneticfield/include/G4EqEMFieldWithSpin.hh +++ b/source/geometry/magneticfield/include/G4EqEMFieldWithSpin.hh @@ -42,19 +42,18 @@ class G4ElectroMagneticField; class G4EqEMFieldWithSpin : public G4EquationOfMotion { - public: // with description + public: G4EqEMFieldWithSpin(G4ElectroMagneticField* emField ); - - ~G4EqEMFieldWithSpin(); + ~G4EqEMFieldWithSpin() override; void SetChargeMomentumMass(G4ChargeState particleCharge, // in e+ units G4double MomentumXc, - G4double mass); + G4double mass) override; void EvaluateRhsGivenB(const G4double y[], const G4double Field[], - G4double dydx[] ) const; + G4double dydx[] ) const override; // Given the value of the electromagnetic field, this function // calculates the value of the derivative dydx. @@ -64,14 +63,13 @@ class G4EqEMFieldWithSpin : public G4EquationOfMotion private: - G4double charge, mass, magMoment, spin; - - G4double fElectroMagCof; - G4double fMassCof; + G4double charge{0.}, mass{0.}, magMoment{0.}, spin{0.}; - G4double omegac, anomaly; - G4double beta, gamma; + G4double fElectroMagCof{0.}; + G4double fMassCof{0.}; + G4double omegac{0.}, anomaly{0.0011659208}; + G4double beta{0.}, gamma{0.}; }; #endif diff --git a/source/geometry/magneticfield/include/G4EqGravityField.hh b/source/geometry/magneticfield/include/G4EqGravityField.hh index 3d180ecd198..4805da66f66 100644 --- a/source/geometry/magneticfield/include/G4EqGravityField.hh +++ b/source/geometry/magneticfield/include/G4EqGravityField.hh @@ -41,26 +41,24 @@ class G4EqGravityField : public G4EquationOfMotion { - public: // with description + public: G4EqGravityField(G4UniformGravityField* gField); - - ~G4EqGravityField(); + ~G4EqGravityField() override; void SetChargeMomentumMass(G4ChargeState particleCharge, // in e+ units G4double MomentumXc, - G4double mass); + G4double mass) override; void EvaluateRhsGivenB( const G4double y[], const G4double Field[], - G4double dydx[] ) const; + G4double dydx[] ) const override; // Given the value of the gravitational field, this function // calculates the value of the derivative dydx. private: G4double fMass = 0.0; - }; #endif diff --git a/source/geometry/magneticfield/include/G4EqMagElectricField.hh b/source/geometry/magneticfield/include/G4EqMagElectricField.hh index 54e611aba66..339bb988e3e 100644 --- a/source/geometry/magneticfield/include/G4EqMagElectricField.hh +++ b/source/geometry/magneticfield/include/G4EqMagElectricField.hh @@ -41,19 +41,18 @@ class G4EqMagElectricField : public G4EquationOfMotion { - public: // with description + public: G4EqMagElectricField(G4ElectroMagneticField* emField ); - - ~G4EqMagElectricField(); + ~G4EqMagElectricField() override; void SetChargeMomentumMass(G4ChargeState particleCharge, // in e+ units G4double MomentumXc, - G4double mass); + G4double mass) override; void EvaluateRhsGivenB(const G4double y[], const G4double Field[], - G4double dydx[] ) const; + G4double dydx[] ) const override; // Given the value of the electromagnetic field, this function // calculates the value of the derivative dydx. diff --git a/source/geometry/magneticfield/include/G4ErrorMag_UsualEqRhs.hh b/source/geometry/magneticfield/include/G4ErrorMag_UsualEqRhs.hh index 78911cc79dc..f4787451d35 100644 --- a/source/geometry/magneticfield/include/G4ErrorMag_UsualEqRhs.hh +++ b/source/geometry/magneticfield/include/G4ErrorMag_UsualEqRhs.hh @@ -40,14 +40,14 @@ class G4ErrorMag_UsualEqRhs : public G4Mag_UsualEqRhs { - public: // with description + public: G4ErrorMag_UsualEqRhs( G4MagneticField* MagField ); - ~G4ErrorMag_UsualEqRhs(); + ~G4ErrorMag_UsualEqRhs() override; void EvaluateRhsGivenB( const G4double y[], const G4double B[3], - G4double dydx[] ) const; + G4double dydx[] ) const override; // Reverses dedx if propagation is backwards }; diff --git a/source/geometry/magneticfield/include/G4ExactHelixStepper.hh b/source/geometry/magneticfield/include/G4ExactHelixStepper.hh index 43c687c59a5..d5301547846 100644 --- a/source/geometry/magneticfield/include/G4ExactHelixStepper.hh +++ b/source/geometry/magneticfield/include/G4ExactHelixStepper.hh @@ -50,10 +50,10 @@ class G4ExactHelixStepper : public G4MagHelicalStepper { - public: // with description + public: G4ExactHelixStepper(G4Mag_EqRhs* EqRhs); - ~G4ExactHelixStepper(); + ~G4ExactHelixStepper() override; G4ExactHelixStepper(const G4ExactHelixStepper&) = delete; G4ExactHelixStepper& operator=(const G4ExactHelixStepper&) = delete; @@ -62,26 +62,26 @@ class G4ExactHelixStepper : public G4MagHelicalStepper const G4double dydx[], G4double h, G4double yout[], - G4double yerr[] ); + G4double yerr[] ) override; // Step 'integration' for step size 'h' // Provides helix starting at y[0 to 6] // Outputs yout[] and ZERO estimated error yerr[]=0. void DumbStepper( const G4double y[], - G4ThreeVector Bfld, - G4double h, - G4double yout[] ); + G4ThreeVector Bfld, + G4double h, + G4double yout[] ) override; // Performs a 'dump' Step without error calculation. - G4double DistChord() const; + G4double DistChord() const override; // Estimate maximum distance of curved solution and chord ... - virtual G4int IntegratorOrder() const; + G4int IntegratorOrder() const override; private: G4ThreeVector fBfieldValue; - // Initial value of field at last step + // Initial value of field at last step }; #endif diff --git a/source/geometry/magneticfield/include/G4ExplicitEuler.hh b/source/geometry/magneticfield/include/G4ExplicitEuler.hh index 8ff46f09dca..816dcc368f6 100644 --- a/source/geometry/magneticfield/include/G4ExplicitEuler.hh +++ b/source/geometry/magneticfield/include/G4ExplicitEuler.hh @@ -40,21 +40,17 @@ class G4ExplicitEuler : public G4MagErrorStepper { - - public: // with description + public: G4ExplicitEuler(G4EquationOfMotion* EqRhs, G4int numberOfVariables = 6) ; - ~G4ExplicitEuler(); + ~G4ExplicitEuler() override; void DumbStepper( const G4double y[], const G4double dydx[], G4double h, - G4double yout[] ); - - public: // without description - - G4int IntegratorOrder() const { return 1; } + G4double yout[] ) override; + G4int IntegratorOrder() const override { return 1; } }; #endif diff --git a/source/geometry/magneticfield/include/G4FSALBogackiShampine45.hh b/source/geometry/magneticfield/include/G4FSALBogackiShampine45.hh index 8bb63043019..d014dc4bf14 100644 --- a/source/geometry/magneticfield/include/G4FSALBogackiShampine45.hh +++ b/source/geometry/magneticfield/include/G4FSALBogackiShampine45.hh @@ -44,7 +44,7 @@ class G4FSALBogackiShampine45 : public G4VFSALIntegrationStepper G4FSALBogackiShampine45(G4EquationOfMotion* EqRhs, G4int numberOfVariables = 6, G4bool primary = true); - ~G4FSALBogackiShampine45(); + ~G4FSALBogackiShampine45() override; G4FSALBogackiShampine45(const G4FSALBogackiShampine45&) = delete; G4FSALBogackiShampine45& operator=(const G4FSALBogackiShampine45&) = delete; @@ -54,7 +54,7 @@ class G4FSALBogackiShampine45 : public G4VFSALIntegrationStepper G4double h, G4double yout[], G4double yerr[], - G4double nextDydx[]) ; + G4double nextDydx[]) override ; void interpolate( const G4double yInput[], const G4double dydx[], @@ -62,10 +62,10 @@ class G4FSALBogackiShampine45 : public G4VFSALIntegrationStepper G4double Step, G4double tau ) ; - G4double DistChord() const; - inline G4int IntegratorOrder() const { return 4; } + G4double DistChord() const override; + inline G4int IntegratorOrder() const override { return 4; } - private : + private: void PrepareConstants(); diff --git a/source/geometry/magneticfield/include/G4FSALDormandPrince745.hh b/source/geometry/magneticfield/include/G4FSALDormandPrince745.hh index 03ac7b5a9e5..fb09e02f3d1 100644 --- a/source/geometry/magneticfield/include/G4FSALDormandPrince745.hh +++ b/source/geometry/magneticfield/include/G4FSALDormandPrince745.hh @@ -44,7 +44,7 @@ class G4FSALDormandPrince745 : public G4VFSALIntegrationStepper G4FSALDormandPrince745(G4EquationOfMotion* EqRhs, G4int numberOfVariables = 6, G4bool primary = true); - ~G4FSALDormandPrince745(); + ~G4FSALDormandPrince745() override; G4FSALDormandPrince745(const G4FSALDormandPrince745&) = delete; G4FSALDormandPrince745& operator=(const G4FSALDormandPrince745&) = delete; @@ -54,7 +54,7 @@ class G4FSALDormandPrince745 : public G4VFSALIntegrationStepper G4double h, G4double yout[], G4double yerr[], - G4double nextDydx[]) ; + G4double nextDydx[]) override ; void interpolate( const G4double yInput[], const G4double dydx[], G4double yOut[], @@ -74,8 +74,8 @@ class G4FSALDormandPrince745 : public G4VFSALIntegrationStepper // For calculating the output at the tau fraction of Step - G4double DistChord() const; - inline G4int IntegratorOrder() const {return 4; } + G4double DistChord() const override; + inline G4int IntegratorOrder() const override { return 4; } inline G4bool isFSAL() const { return true; } private: diff --git a/source/geometry/magneticfield/include/G4FSALIntegrationDriver.hh b/source/geometry/magneticfield/include/G4FSALIntegrationDriver.hh index bf136836e9f..b387a3608b8 100644 --- a/source/geometry/magneticfield/include/G4FSALIntegrationDriver.hh +++ b/source/geometry/magneticfield/include/G4FSALIntegrationDriver.hh @@ -38,9 +38,8 @@ #include "G4ChordFinderDelegate.hh" template -class G4FSALIntegrationDriver - : public G4RKIntegrationDriver , - public G4ChordFinderDelegate> +class G4FSALIntegrationDriver : public G4RKIntegrationDriver, + public G4ChordFinderDelegate> { public: @@ -49,44 +48,44 @@ class G4FSALIntegrationDriver G4int numberOfComponents = 6, G4int statisticsVerbosity = 1); - virtual ~G4FSALIntegrationDriver() override; + ~G4FSALIntegrationDriver() override; G4FSALIntegrationDriver(const G4FSALIntegrationDriver&) = delete; G4FSALIntegrationDriver& operator=(const G4FSALIntegrationDriver&) = delete; - virtual G4double AdvanceChordLimited(G4FieldTrack& track, - G4double hstep, - G4double eps, - G4double chordDistance) override; + G4double AdvanceChordLimited(G4FieldTrack& track, + G4double hstep, + G4double eps, + G4double chordDistance) override; - virtual void OnStartTracking() override + void OnStartTracking() override { ChordFinderDelegate::ResetStepEstimate(); } - virtual void OnComputeStep() override {} + void OnComputeStep(const G4FieldTrack* /*track*/ = nullptr) override {} - virtual G4bool DoesReIntegrate() const override { return true; } + G4bool DoesReIntegrate() const override { return true; } - virtual G4bool AccurateAdvance( G4FieldTrack& track, - G4double hstep, - G4double eps, // Requested y_err/hstep - G4double hinitial = 0.0) override; + G4bool AccurateAdvance( G4FieldTrack& track, + G4double hstep, + G4double eps, // Requested y_err/hstep + G4double hinitial = 0.0) override; // Integrates ODE from current s (s=s0) to s=s0+h with accuracy eps. // On output track is replaced by value at end of interval. // The concept is similar to the odeint routine from NRC p.721-722. - virtual G4bool QuickAdvance( G4FieldTrack& fieldTrack, - const G4double dydx[], - G4double hstep, - G4double& dchord_step, - G4double& dyerr) override; + G4bool QuickAdvance( G4FieldTrack& fieldTrack, + const G4double dydx[], + G4double hstep, + G4double& dchord_step, + G4double& dyerr ) override; // QuickAdvance just tries one Step - it does not ensure accuracy. - virtual void SetVerboseLevel(G4int newLevel) override; - virtual G4int GetVerboseLevel() const override; + void SetVerboseLevel(G4int newLevel) override; + G4int GetVerboseLevel() const override; - virtual void StreamInfo( std::ostream& os ) const override; + void StreamInfo( std::ostream& os ) const override; // Write out the parameters / state of the driver // Accessors @@ -116,12 +115,12 @@ class G4FSALIntegrationDriver void CheckStep(const G4ThreeVector& posIn, const G4ThreeVector& posOut, - G4double hdid); + G4double hdid); G4double fMinimumStep; // Minimum Step allowed in a Step (in absolute units) - G4double fSmallestFraction; + G4double fSmallestFraction{1e-12}; // Smallest fraction of (existing) curve length - in relative units // below this fraction the current step will be the last // Expected range: smaller than 0.1 * epsilon and bigger than 5e-13 @@ -131,10 +130,10 @@ class G4FSALIntegrationDriver // Verbosity level for printing (debug, ..) // Could be varied during tracking - to help identify issues - G4int fNoQuickAvanceCalls; - G4int fNoAccurateAdvanceCalls; - G4int fNoAccurateAdvanceBadSteps; - G4int fNoAccurateAdvanceGoodSteps; + G4int fNoQuickAvanceCalls{0}; + G4int fNoAccurateAdvanceCalls{0}; + G4int fNoAccurateAdvanceBadSteps{0}; + G4int fNoAccurateAdvanceGoodSteps{0}; using Base = G4RKIntegrationDriver; using ChordFinderDelegate = G4ChordFinderDelegate>; diff --git a/source/geometry/magneticfield/include/G4FSALIntegrationDriver.icc b/source/geometry/magneticfield/include/G4FSALIntegrationDriver.icc index c82068630b4..36d18146864 100644 --- a/source/geometry/magneticfield/include/G4FSALIntegrationDriver.icc +++ b/source/geometry/magneticfield/include/G4FSALIntegrationDriver.icc @@ -36,12 +36,7 @@ G4FSALIntegrationDriver ( G4double hminimum, T* pStepper, G4int numComponents, G4int statisticsVerbose ) : Base(pStepper), fMinimumStep(hminimum), - fSmallestFraction(1e-12), - fVerboseLevel(statisticsVerbose), - fNoQuickAvanceCalls(0), - fNoAccurateAdvanceCalls(0), - fNoAccurateAdvanceBadSteps(0), - fNoAccurateAdvanceGoodSteps(0) + fVerboseLevel(statisticsVerbose) { if (numComponents != Base::GetStepper()->GetNumberOfVariables()) { @@ -60,11 +55,13 @@ G4FSALIntegrationDriver::~G4FSALIntegrationDriver() { #ifdef G4VERBOSE if( fVerboseLevel > 0 ) + { G4cout << "G4FSALIntegration Driver Stats: " << "#QuickAdvance " << fNoQuickAvanceCalls << " - #AccurateAdvance " << fNoAccurateAdvanceCalls << G4endl << "#good steps " << fNoAccurateAdvanceGoodSteps << " " << "#bad steps " << fNoAccurateAdvanceBadSteps << G4endl; + } #endif } @@ -181,7 +178,7 @@ OneGoodStep(G4double y[], error2 = field_utils::relativeError2(y, yError, hstep, eps_rel_max); // Step succeeded. - if (error2 <= 1) break; + if (error2 <= 1) { break; } hstep = Base::ShrinkStepSize2(hstep, error2); } diff --git a/source/geometry/magneticfield/include/G4FieldTrack.hh b/source/geometry/magneticfield/include/G4FieldTrack.hh index bb1f1b66981..65c31b3f383 100644 --- a/source/geometry/magneticfield/include/G4FieldTrack.hh +++ b/source/geometry/magneticfield/include/G4FieldTrack.hh @@ -79,8 +79,8 @@ class G4FieldTrack inline G4FieldTrack& operator= ( const G4FieldTrack& rStVec ); // Copy constructor & Assignment operator - inline G4FieldTrack(G4FieldTrack&& from); - inline G4FieldTrack& operator=(G4FieldTrack&& from); + inline G4FieldTrack(G4FieldTrack&& from) noexcept ; + inline G4FieldTrack& operator=(G4FieldTrack&& from) noexcept ; // Move constructor & operator inline void UpdateState( const G4ThreeVector& pPosition, @@ -121,11 +121,11 @@ class G4FieldTrack inline G4double GetRestMass() const; // Accessors. - inline void SetPosition(G4ThreeVector nPos); - inline void SetMomentum(G4ThreeVector nMomDir); + inline void SetPosition(const G4ThreeVector& nPos); + inline void SetMomentum(const G4ThreeVector& nMomDir); // Does change mom-dir too. - inline void SetMomentumDir(G4ThreeVector nMomDir); + inline void SetMomentumDir(const G4ThreeVector& nMomDir); // Does NOT change Momentum or Velocity Vector. inline void SetRestMass(G4double Mass_c2); @@ -154,7 +154,7 @@ class G4FieldTrack inline void InitialiseSpin( const G4ThreeVector& vecPolarization ); inline G4ThreeVector GetSpin() const; - inline void SetSpin(G4ThreeVector vSpin); + inline void SetSpin(const G4ThreeVector& vSpin); private: // Implementation method -- Obsolete diff --git a/source/geometry/magneticfield/include/G4FieldTrack.icc b/source/geometry/magneticfield/include/G4FieldTrack.icc index 382dfe11554..bf3654f05c7 100644 --- a/source/geometry/magneticfield/include/G4FieldTrack.icc +++ b/source/geometry/magneticfield/include/G4FieldTrack.icc @@ -55,7 +55,7 @@ G4FieldTrack::G4FieldTrack( const G4FieldTrack& rStVec ) inline G4FieldTrack& G4FieldTrack::operator= ( const G4FieldTrack& rStVec ) { - if (&rStVec == this) return *this; + if (&rStVec == this) { return *this; } SixVector[0]= rStVec.SixVector[0]; SixVector[1]= rStVec.SixVector[1]; @@ -79,7 +79,7 @@ G4FieldTrack& G4FieldTrack::operator= ( const G4FieldTrack& rStVec ) } inline -G4FieldTrack::G4FieldTrack(G4FieldTrack&& from) +G4FieldTrack::G4FieldTrack(G4FieldTrack&& from) noexcept : fDistanceAlongCurve( from.fDistanceAlongCurve), fKineticEnergy( from.fKineticEnergy ), fRestMass_c2( from.fRestMass_c2), @@ -99,9 +99,10 @@ G4FieldTrack::G4FieldTrack(G4FieldTrack&& from) } inline -G4FieldTrack& G4FieldTrack::operator=(G4FieldTrack&& from) +G4FieldTrack& G4FieldTrack::operator=(G4FieldTrack&& from) noexcept { - if (&from == this) return *this; + if (&from == this) { return *this; +} SixVector[0]= from.SixVector[0]; SixVector[1]= from.SixVector[1]; @@ -170,7 +171,7 @@ G4ThreeVector G4FieldTrack::GetPosition() const } inline -void G4FieldTrack::SetPosition( G4ThreeVector pPosition) +void G4FieldTrack::SetPosition( const G4ThreeVector& pPosition) { SixVector[0] = pPosition.x(); SixVector[1] = pPosition.y(); @@ -258,7 +259,7 @@ void G4FieldTrack::SetProperTimeOfFlight(G4double nTOF) } inline -void G4FieldTrack::SetMomentumDir(G4ThreeVector newMomDir) +void G4FieldTrack::SetMomentumDir(const G4ThreeVector& newMomDir) { fMomentumDir = newMomDir; } @@ -266,20 +267,18 @@ void G4FieldTrack::SetMomentumDir(G4ThreeVector newMomDir) inline G4ThreeVector G4FieldTrack::GetMomentum() const { - return G4ThreeVector( SixVector[3], SixVector[4], SixVector[5] ); + return { SixVector[3], SixVector[4], SixVector[5] }; } inline -void G4FieldTrack::SetMomentum(G4ThreeVector pMomentum) +void G4FieldTrack::SetMomentum(const G4ThreeVector& pMomentum) { SixVector[3] = pMomentum.x(); SixVector[4] = pMomentum.y(); SixVector[5] = pMomentum.z(); - if( pMomentum.mag2() > 0.0 ) - fMomentumDir = pMomentum.unit(); - else - fMomentumDir = G4ThreeVector( 0.0, 0.0, 0.0 ); + if( pMomentum.mag2() > 0.0 ) { fMomentumDir = pMomentum.unit(); } + else { fMomentumDir = G4ThreeVector( 0.0, 0.0, 0.0 ); } } inline @@ -380,7 +379,7 @@ inline G4ThreeVector G4FieldTrack::GetSpin() const } inline -void G4FieldTrack::SetSpin(G4ThreeVector vSpin) +void G4FieldTrack::SetSpin(const G4ThreeVector& vSpin) { SetPolarization(vSpin); } diff --git a/source/geometry/magneticfield/include/G4HarmonicPolMagField.hh b/source/geometry/magneticfield/include/G4HarmonicPolMagField.hh index 0ea406ea410..03462f2c1ee 100644 --- a/source/geometry/magneticfield/include/G4HarmonicPolMagField.hh +++ b/source/geometry/magneticfield/include/G4HarmonicPolMagField.hh @@ -43,14 +43,14 @@ class G4HarmonicPolMagField : public G4MagneticField { - public: // with description + public: G4HarmonicPolMagField(); - ~G4HarmonicPolMagField(); + ~G4HarmonicPolMagField() override; void GetFieldValue(const G4double yTrack[] , - G4double B[] ) const ; - G4HarmonicPolMagField* Clone() const; + G4double B[] ) const override ; + G4HarmonicPolMagField* Clone() const override; }; #endif diff --git a/source/geometry/magneticfield/include/G4HelixExplicitEuler.hh b/source/geometry/magneticfield/include/G4HelixExplicitEuler.hh index 3e979fc0262..3f29b5658ca 100644 --- a/source/geometry/magneticfield/include/G4HelixExplicitEuler.hh +++ b/source/geometry/magneticfield/include/G4HelixExplicitEuler.hh @@ -41,27 +41,25 @@ class G4HelixExplicitEuler : public G4MagHelicalStepper { - public: // with description + public: G4HelixExplicitEuler(G4Mag_EqRhs* EqRhs); - ~G4HelixExplicitEuler(); + ~G4HelixExplicitEuler() override; void Stepper( const G4double y[], const G4double*, G4double h, G4double yout[], - G4double yerr[] ); + G4double yerr[] ) override; void DumbStepper( const G4double y[], G4ThreeVector Bfld, G4double h, - G4double yout[]); + G4double yout[]) override; - G4double DistChord() const; + G4double DistChord() const override; - public: // without description - - inline G4int IntegratorOrder() const { return 1; } + inline G4int IntegratorOrder() const override { return 1; } }; #endif diff --git a/source/geometry/magneticfield/include/G4HelixHeum.hh b/source/geometry/magneticfield/include/G4HelixHeum.hh index f6207f833cc..36dea002a6d 100644 --- a/source/geometry/magneticfield/include/G4HelixHeum.hh +++ b/source/geometry/magneticfield/include/G4HelixHeum.hh @@ -42,20 +42,17 @@ class G4HelixHeum : public G4MagHelicalStepper { - - public: // with description + public: G4HelixHeum(G4Mag_EqRhs *EqRhs); - ~G4HelixHeum(); + ~G4HelixHeum() override; void DumbStepper( const G4double y[], G4ThreeVector Bfld, G4double h, - G4double yout[] ); + G4double yout[] ) override; - public: // without description - - inline G4int IntegratorOrder() const { return 2; } + inline G4int IntegratorOrder() const override { return 2; } }; #endif diff --git a/source/geometry/magneticfield/include/G4HelixImplicitEuler.hh b/source/geometry/magneticfield/include/G4HelixImplicitEuler.hh index 331e6bb5079..1f596399916 100644 --- a/source/geometry/magneticfield/include/G4HelixImplicitEuler.hh +++ b/source/geometry/magneticfield/include/G4HelixImplicitEuler.hh @@ -44,20 +44,17 @@ class G4HelixImplicitEuler : public G4MagHelicalStepper { - - public: // with description + public: G4HelixImplicitEuler(G4Mag_EqRhs *EqRhs); - ~G4HelixImplicitEuler(); + ~G4HelixImplicitEuler() override; void DumbStepper( const G4double y[], G4ThreeVector Bfld, G4double h, - G4double yout[] ); + G4double yout[] ) override; - public: // without description - - inline G4int IntegratorOrder() const { return 2; } + inline G4int IntegratorOrder() const override { return 2; } }; #endif diff --git a/source/geometry/magneticfield/include/G4HelixMixedStepper.hh b/source/geometry/magneticfield/include/G4HelixMixedStepper.hh index e57ef835f81..d8c6a7edcc0 100644 --- a/source/geometry/magneticfield/include/G4HelixMixedStepper.hh +++ b/source/geometry/magneticfield/include/G4HelixMixedStepper.hh @@ -59,21 +59,20 @@ #include "G4MagHelicalStepper.hh" -class G4HelixMixedStepper: public G4MagHelicalStepper +class G4HelixMixedStepper : public G4MagHelicalStepper { - public: G4HelixMixedStepper(G4Mag_EqRhs* EqRhs, G4int StepperNumber = -1, G4double Angle_threshold = -1.0); - ~G4HelixMixedStepper(); + ~G4HelixMixedStepper() override; void Stepper( const G4double y[], const G4double dydx[], G4double h, G4double yout[], - G4double yerr[] ); + G4double yerr[] ) override; // Step 'integration' for step size 'h' // If SteppingAngle= h/R_curve < pi/3 uses default RK stepper // else use Helix Fast Method @@ -81,42 +80,36 @@ class G4HelixMixedStepper: public G4MagHelicalStepper void DumbStepper( const G4double y[], G4ThreeVector Bfld, G4double h, - G4double yout[]); + G4double yout[]) override; - G4double DistChord() const; + G4double DistChord() const override; // Estimate maximum distance of curved solution and chord ... - public: // with description - inline void SetVerbose (G4int newvalue) { fVerbose = newvalue; } - public: // without description - void PrintCalls(); G4MagIntegratorStepper* SetupStepper(G4Mag_EqRhs* EqRhs, G4int StepperName); - inline void SetAngleThreshold( G4double val ) { fAngle_threshold = val; } + inline void SetAngleThreshold( G4double val ) { fAngle_threshold = val; } inline G4double GetAngleThreshold() { return fAngle_threshold; } - inline G4int IntegratorOrder() const { return 4; } + inline G4int IntegratorOrder() const override { return 4; } private: - G4MagIntegratorStepper* fRK4Stepper = nullptr; - // Mixed Integration RK4 for 'small' steps - G4int fStepperNumber = -1; - // Int ID of RK stepper - - G4double fAngle_threshold = -1.0; - // Threshold angle (in radians ) - above it Helical stepper is used + G4MagIntegratorStepper* fRK4Stepper = nullptr; + // Mixed Integration RK4 for 'small' steps + G4int fStepperNumber = -1; + // Int ID of RK stepper + G4double fAngle_threshold = -1.0; + // Threshold angle (in radians ) - above it Helical stepper is used private: - G4int fVerbose = 0; + G4int fVerbose = 0; - G4int fNumCallsRK4 = 0; - G4int fNumCallsHelix = 0; - // Used for statistic = how many calls to different steppers - + G4int fNumCallsRK4 = 0; + G4int fNumCallsHelix = 0; + // Used for statistic = how many calls to different steppers }; #endif diff --git a/source/geometry/magneticfield/include/G4HelixSimpleRunge.hh b/source/geometry/magneticfield/include/G4HelixSimpleRunge.hh index a6c02f401e7..4412b0a009e 100644 --- a/source/geometry/magneticfield/include/G4HelixSimpleRunge.hh +++ b/source/geometry/magneticfield/include/G4HelixSimpleRunge.hh @@ -43,19 +43,17 @@ class G4HelixSimpleRunge : public G4MagHelicalStepper { - - public: // with description + public: G4HelixSimpleRunge(G4Mag_EqRhs* EqRhs); - - ~G4HelixSimpleRunge(); + ~G4HelixSimpleRunge() override; void DumbStepper( const G4double y[], G4ThreeVector Bfld, G4double h, - G4double yout[] ); + G4double yout[] ) override; - inline G4int IntegratorOrder() const { return 2; } + inline G4int IntegratorOrder() const override { return 2; } }; #endif diff --git a/source/geometry/magneticfield/include/G4ImplicitEuler.hh b/source/geometry/magneticfield/include/G4ImplicitEuler.hh index 57f0dde9356..7663df57d16 100644 --- a/source/geometry/magneticfield/include/G4ImplicitEuler.hh +++ b/source/geometry/magneticfield/include/G4ImplicitEuler.hh @@ -44,18 +44,17 @@ class G4ImplicitEuler : public G4MagErrorStepper { - - public: // with description + public: G4ImplicitEuler(G4EquationOfMotion* EqRhs, G4int numberOfVariables = 6); - ~G4ImplicitEuler(); + ~G4ImplicitEuler() override; void DumbStepper( const G4double y[] , const G4double dydx[] , G4double h , - G4double yout[] ); + G4double yout[] ) override; - inline G4int IntegratorOrder() const { return 2; } + inline G4int IntegratorOrder() const override { return 2; } private: diff --git a/source/geometry/magneticfield/include/G4IntegrationDriver.hh b/source/geometry/magneticfield/include/G4IntegrationDriver.hh index e70ef166b61..f5ded6bc6b8 100644 --- a/source/geometry/magneticfield/include/G4IntegrationDriver.hh +++ b/source/geometry/magneticfield/include/G4IntegrationDriver.hh @@ -54,40 +54,39 @@ class G4IntegrationDriver : public G4RKIntegrationDriver, T* stepper, G4int numberOfComponents = 6, G4int statisticsVerbosity = 0 ); - - virtual ~G4IntegrationDriver() override; + ~G4IntegrationDriver() override; G4IntegrationDriver(const G4IntegrationDriver &) = delete; const G4IntegrationDriver& operator =(const G4IntegrationDriver &) = delete; - virtual G4double AdvanceChordLimited(G4FieldTrack& track, + G4double AdvanceChordLimited(G4FieldTrack& track, G4double stepMax, G4double epsStep, G4double chordDistance) override; - virtual void OnStartTracking() override; - virtual void OnComputeStep() override {} - virtual G4bool DoesReIntegrate() const override { return true; } + void OnStartTracking() override; + void OnComputeStep(const G4FieldTrack* /*track*/ = nullptr) override {} + G4bool DoesReIntegrate() const override { return true; } - virtual G4bool AccurateAdvance(G4FieldTrack& track, - G4double hstep, - G4double eps, // Requested y_err/hstep - G4double hinitial = 0 ) override; + G4bool AccurateAdvance(G4FieldTrack& track, + G4double hstep, + G4double eps, // Requested y_err/hstep + G4double hinitial = 0 ) override; // Integrates ODE from current s (s=s0) to s=s0+h with accuracy eps. // On output track is replaced by value at end of interval. // The concept is similar to the odeint routine from NRC p.721-722. - virtual G4bool QuickAdvance( G4FieldTrack& fieldTrack, - const G4double dydx[], - G4double hstep, - G4double& dchord_step, - G4double& dyerr) override; + G4bool QuickAdvance( G4FieldTrack& fieldTrack, + const G4double dydx[], + G4double hstep, + G4double& dchord_step, + G4double& dyerr) override; // QuickAdvance just tries one Step - it does not ensure accuracy. - virtual void SetVerboseLevel(G4int newLevel) override; - virtual G4int GetVerboseLevel() const override; + void SetVerboseLevel(G4int newLevel) override; + G4int GetVerboseLevel() const override; - virtual void StreamInfo( std::ostream& os ) const override; + void StreamInfo( std::ostream& os ) const override; // Write out the parameters / state of the driver // Accessors @@ -106,8 +105,8 @@ class G4IntegrationDriver : public G4RKIntegrationDriver, // as possible while satisfying the accuracy criterion of: // yerr < eps * |y_end-y_start| - G4double GetSmallestFraction() const; - void SetSmallestFraction(G4double val); + G4double GetSmallestFraction() const; + void SetSmallestFraction(G4double val); protected: @@ -122,7 +121,7 @@ class G4IntegrationDriver : public G4RKIntegrationDriver, G4double fMinimumStep; // Minimum Step allowed in a Step (in absolute units) - G4double fSmallestFraction; + G4double fSmallestFraction{1e-12}; // Smallest fraction of (existing) curve length - in relative units // below this fraction the current step will be the last // Expected range: smaller than 0.1 * epsilon and bigger than 5e-13 @@ -132,10 +131,10 @@ class G4IntegrationDriver : public G4RKIntegrationDriver, // Verbosity level for printing (debug, ..) // Could be varied during tracking - to help identify issues - G4int fNoQuickAvanceCalls; - G4int fNoAccurateAdvanceCalls; - G4int fNoAccurateAdvanceBadSteps; - G4int fNoAccurateAdvanceGoodSteps; + G4int fNoQuickAvanceCalls{0}; + G4int fNoAccurateAdvanceCalls{0}; + G4int fNoAccurateAdvanceBadSteps{0}; + G4int fNoAccurateAdvanceGoodSteps{0}; using Base = G4RKIntegrationDriver; using ChordFinderDelegate = G4ChordFinderDelegate>; diff --git a/source/geometry/magneticfield/include/G4IntegrationDriver.icc b/source/geometry/magneticfield/include/G4IntegrationDriver.icc index 3e5e78d12a5..b124cde2bf6 100644 --- a/source/geometry/magneticfield/include/G4IntegrationDriver.icc +++ b/source/geometry/magneticfield/include/G4IntegrationDriver.icc @@ -31,18 +31,15 @@ #include "G4FieldUtils.hh" +#include + template G4IntegrationDriver:: G4IntegrationDriver ( G4double hminimum, T* pStepper, G4int numComponents, G4int statisticsVerbose ) : G4RKIntegrationDriver(pStepper), fMinimumStep(hminimum), - fSmallestFraction(1e-12), - fVerboseLevel(statisticsVerbose), - fNoQuickAvanceCalls(0), - fNoAccurateAdvanceCalls(0), - fNoAccurateAdvanceBadSteps(0), - fNoAccurateAdvanceGoodSteps(0) + fVerboseLevel(statisticsVerbose) { if (numComponents != Base::GetStepper()->GetNumberOfVariables()) { diff --git a/source/geometry/magneticfield/include/G4InterpolationDriver.hh b/source/geometry/magneticfield/include/G4InterpolationDriver.hh index 964af50526c..fbcedd17630 100644 --- a/source/geometry/magneticfield/include/G4InterpolationDriver.hh +++ b/source/geometry/magneticfield/include/G4InterpolationDriver.hh @@ -28,22 +28,21 @@ // Class description: // // Driver class which uses Runge-Kutta stepper with interpolation property -// to integrate track with error control +// to integrate track with error control // Created: D.Sorokin, 2018 // -------------------------------------------------------------------- #ifndef G4INTERPOLATION_DRIVER_HH #define G4INTERPOLATION_DRIVER_HH -#include "G4RKIntegrationDriver.hh" #include "G4FieldUtils.hh" - +#include "G4RKIntegrationDriver.hh" #include "globals.hh" -#include #include +#include -template +template class G4InterpolationDriver : public G4RKIntegrationDriver { public: @@ -53,78 +52,79 @@ class G4InterpolationDriver : public G4RKIntegrationDriver G4int numberOfComponents = 6, G4int statisticsVerbosity = 0); - virtual ~G4InterpolationDriver() override; - - G4InterpolationDriver(const G4InterpolationDriver&)= delete; - const G4InterpolationDriver& operator=(const G4InterpolationDriver&)= delete; - - virtual G4double AdvanceChordLimited(G4FieldTrack& track, - G4double hstep, - G4double eps, - G4double chordDistance) override; - - virtual void OnStartTracking() override; - virtual void OnComputeStep() override; - virtual G4bool DoesReIntegrate() const override { return false; } - // Interpolation driver does not recalculate when AccurateAdvance is called - // -- reintegration would require other calls - - virtual G4bool AccurateAdvance(G4FieldTrack& track, - G4double hstep, - G4double eps, // Requested y_err/hstep - G4double hinitial = 0) override; + ~G4InterpolationDriver() override; + + G4InterpolationDriver(const G4InterpolationDriver&) = delete; + const G4InterpolationDriver& operator=(const G4InterpolationDriver&) = delete; + + G4double AdvanceChordLimited(G4FieldTrack& track, + G4double hstep, + G4double eps, + G4double chordDistance) override; + + void OnStartTracking() override; + void OnComputeStep(const G4FieldTrack* /*track*/ = nullptr) override; + G4bool DoesReIntegrate() const override { return false; } + // Interpolation driver does not recalculate when AccurateAdvance + // is called -- reintegration would require other calls + + G4bool AccurateAdvance(G4FieldTrack& track, + G4double hstep, + G4double eps, // Requested y_err/hstep + G4double hinitial = 0) override; // Integrates ODE from current s (s=s0) to s=s0+h with accuracy eps. // On output track is replaced by value at end of interval. // The concept is similar to the odeint routine from NRC p.721-722. - virtual void SetVerboseLevel(G4int level) override; - virtual G4int GetVerboseLevel() const override; + void SetVerboseLevel(G4int level) override; + G4int GetVerboseLevel() const override; + + void StreamInfo(std::ostream& os) const override; - virtual void StreamInfo( std::ostream& os ) const override; - - private: + protected: struct InterpStepper { - std::unique_ptr stepper; - G4double begin; - G4double end; - G4double inverseLength; + std::unique_ptr stepper; + G4double begin; + G4double end; + G4double inverseLength; }; using StepperIterator = typename std::vector::iterator; using ConstStepperIterator = typename std::vector::const_iterator; - G4double OneGoodStep(StepperIterator it, - field_utils::State& y, - field_utils::State& dydx, - G4double& hstep, - G4double eps, - G4double curveLength); - // This takes one Step that is of size htry, or as large + virtual G4double OneGoodStep(StepperIterator it, + field_utils::State& y, + field_utils::State& dydx, + G4double& hstep, + G4double eps, + G4double curveLength, + G4FieldTrack* track = nullptr); + // This takes one Step that is of size htry, or as large // as possible while satisfying the accuracy criterion of: // yerr < eps * |y_end-y_start| // return hdid void Interpolate(G4double curveLength, field_utils::State& y) const; - void InterpolateImpl(G4double curveLength, - ConstStepperIterator it, + void InterpolateImpl(G4double curveLength, + ConstStepperIterator it, field_utils::State& y) const; - G4double DistChord(const field_utils::State& yBegin, - G4double curveLengthBegin, - const field_utils::State& yEnd, - G4double curveLengthEnd) const; + G4double DistChord(const field_utils::State& yBegin, + G4double curveLengthBegin, + const field_utils::State& yEnd, + G4double curveLengthEnd) const; G4double FindNextChord(const field_utils::State& yBegin, - G4double curveLengthBegin, - field_utils::State& yEnd, - G4double curveLengthEnd, - G4double dChord, - G4double maxChordDistance); + G4double curveLengthBegin, + field_utils::State& yEnd, + G4double curveLengthEnd, + G4double dChord, + G4double maxChordDistance); - G4double CalcChordStep(G4double stepTrialOld, + G4double CalcChordStep(G4double stepTrialOld, G4double dChordStep, G4double fDeltaChord); @@ -134,27 +134,28 @@ class G4InterpolationDriver : public G4RKIntegrationDriver void AccumulateStatistics(G4int noTrials); - private: + protected: std::vector fSteppers; StepperIterator fLastStepper; G4bool fKeepLastStepper = false; - G4double fhnext = DBL_MAX; // Memory of last good step size for integration + G4double fhnext = DBL_MAX; + // Memory of last good step size for integration - // Minimum Step allowed in a Step (in units of length) // Parameter G4double fMinimumStep; + // Minimum Step allowed in a Step (in units of length) // Parameter G4double fChordStepEstimate = DBL_MAX; - const G4double fFractionNextEstimate = 0.98; // Constant - const G4double fSmallestCurveFraction = 0.01; // Constant + const G4double fFractionNextEstimate = 0.98; // Constant + const G4double fSmallestCurveFraction = 0.01; // Constant - G4int fVerboseLevel; // Parameter + G4int fVerboseLevel; // Parameter field_utils::State fdydx; G4bool fFirstStep = true; - const G4int fMaxTrials = 100; // Constant + G4int fMaxTrials = 100; // Constant G4int fTotalStepsForTrack = 0; // statistics diff --git a/source/geometry/magneticfield/include/G4InterpolationDriver.icc b/source/geometry/magneticfield/include/G4InterpolationDriver.icc index b3ccea72c1b..eed59c42b63 100644 --- a/source/geometry/magneticfield/include/G4InterpolationDriver.icc +++ b/source/geometry/magneticfield/include/G4InterpolationDriver.icc @@ -28,401 +28,342 @@ // Created: D.Sorokin, 2018 // -------------------------------------------------------------------- +#include "G4Exception.hh" #include "G4FieldUtils.hh" #include "G4LineSection.hh" -#include "G4Exception.hh" -#include +#include +#include -template -G4InterpolationDriver:: -G4InterpolationDriver ( G4double hminimum, T* pStepper, - G4int numComponents, G4int statisticsVerbose ) - : G4RKIntegrationDriver(pStepper), - fMinimumStep(hminimum), - fVerboseLevel(statisticsVerbose) +template +G4InterpolationDriver::G4InterpolationDriver( + G4double hminimum, T* pStepper, G4int numComponents, G4int statisticsVerbose) + : G4RKIntegrationDriver(pStepper), fMinimumStep(hminimum), fVerboseLevel(statisticsVerbose) { - if (numComponents != Base::GetStepper()->GetNumberOfVariables()) - { - std::ostringstream message; - message << "Driver's number of integrated components " - << numComponents - << " != Stepper's number of components " - << pStepper->GetNumberOfVariables(); - G4Exception("G4InterpolationDriver","GeomField0002", - FatalException, message); - } - - for (G4int i = 0; i < Base::GetMaxNoSteps(); ++i) - { - fSteppers.push_back({ - std::unique_ptr(new T(pStepper->GetSpecificEquation(), // Interpolating stepper must have this! - pStepper->GetNumberOfVariables()) ), - DBL_MAX, -DBL_MAX, 0.0 - }); - } - - fLastStepper = fSteppers.end(); + if (numComponents != Base::GetStepper()->GetNumberOfVariables()) { + std::ostringstream message; + message << "Driver's number of integrated components " << numComponents + << " != Stepper's number of components " << pStepper->GetNumberOfVariables(); + G4Exception("G4InterpolationDriver", "GeomField0002", FatalException, message); + } + + for (G4int i = 0; i < Base::GetMaxNoSteps(); ++i) { + fSteppers.push_back( + {std::unique_ptr( + new T(pStepper->GetSpecificEquation(), // Interpolating stepper must have this! + pStepper->GetNumberOfVariables())), + DBL_MAX, -DBL_MAX, 0.0}); + } + + fLastStepper = fSteppers.end(); } -template -G4InterpolationDriver::~G4InterpolationDriver() +template +G4InterpolationDriver::~G4InterpolationDriver() { #ifdef G4VERBOSE - if (fVerboseLevel > 0) - { - G4cout << "G4ChordFinder statistics report: \n" - << " No trials: " << fTotalNoTrials - << " No Calls: " << fNoCalls - << " Max-trial: " << fmaxTrials - << G4endl; - } + if (fVerboseLevel > 0) { + G4cout << "G4ChordFinder statistics report: \n" + << " No trials: " << fTotalNoTrials << " No Calls: " << fNoCalls + << " Max-trial: " << fmaxTrials << G4endl; + } #endif } -template -void G4InterpolationDriver::OnStartTracking() +template +void G4InterpolationDriver::OnStartTracking() { - fChordStepEstimate = DBL_MAX; - fhnext = DBL_MAX; - fTotalStepsForTrack = 0; + fChordStepEstimate = DBL_MAX; + fhnext = DBL_MAX; + fTotalStepsForTrack = 0; } -template -void G4InterpolationDriver::OnComputeStep() -{ - fKeepLastStepper = false; - fFirstStep = true; - fLastStepper = fSteppers.end(); +template +void G4InterpolationDriver::OnComputeStep(const G4FieldTrack* /*track*/) +{ + fKeepLastStepper = false; + fFirstStep = true; + fLastStepper = fSteppers.end(); } -template -void G4InterpolationDriver::SetVerboseLevel(G4int level) +template +void G4InterpolationDriver::SetVerboseLevel(G4int level) { - fVerboseLevel = level; + fVerboseLevel = level; } -template -G4int G4InterpolationDriver::GetVerboseLevel() const +template +G4int G4InterpolationDriver::GetVerboseLevel() const { - return fVerboseLevel; + return fVerboseLevel; } -template -void G4InterpolationDriver:: -Interpolate(G4double curveLength, field_utils::State& y) const +template +void G4InterpolationDriver::Interpolate( + G4double curveLength, field_utils::State& y) const { - if (fLastStepper == fSteppers.end()) - { - std::ostringstream message; - message << "LOGICK ERROR: fLastStepper == end"; - G4Exception("G4InterpolationDriver::Interpolate()", - "GeomField1001", FatalException, message); - return; + if (fLastStepper == fSteppers.end()) { + std::ostringstream message; + message << "LOGICK ERROR: fLastStepper == end"; + G4Exception("G4InterpolationDriver::Interpolate()", "GeomField1001", FatalException, message); + return; + } + + ConstStepperIterator end = fLastStepper + 1; + + auto it = std::lower_bound(fSteppers.cbegin(), end, curveLength, + [](const InterpStepper& stepper, G4double value) { return stepper.end < value; }); + if (it == end) { + if (curveLength - fLastStepper->end > CLHEP::perMillion) { + std::ostringstream message; + message << "curveLength = " << curveLength << " > " << fLastStepper->end; + G4Exception("G4InterpolationDriver::Interpolate()", "GeomField1001", JustWarning, message); } - ConstStepperIterator end = fLastStepper + 1; - - auto it = std::lower_bound(fSteppers.cbegin(), end, curveLength, - [](const InterpStepper& stepper, G4double value) - { - return stepper.end < value; - } - ); - if (it == end) - { - if (curveLength - fLastStepper->end > CLHEP::perMillion) - { - std::ostringstream message; - message << "curveLength = " << curveLength << " > " - << fLastStepper->end; - G4Exception("G4InterpolationDriver::Interpolate()", - "GeomField1001", JustWarning, message); - } - - return fLastStepper->stepper->Interpolate(1, y); - } + return fLastStepper->stepper->Interpolate(1, y); + } - if (curveLength < it->begin) - { - if (it->begin - curveLength > CLHEP::perMillion) - { - std::ostringstream message; - message << "curveLength = " << curveLength << " < " << it->begin; - G4Exception("G4InterpolationDriver::Interpolate()", - "GeomField1001", JustWarning, message); - } - - return it->stepper->Interpolate(0, y); + if (curveLength < it->begin) { + if (it->begin - curveLength > CLHEP::perMillion) { + std::ostringstream message; + message << "curveLength = " << curveLength << " < " << it->begin; + G4Exception("G4InterpolationDriver::Interpolate()", "GeomField1001", JustWarning, message); } - return InterpolateImpl(curveLength, it, y); + return it->stepper->Interpolate(0, y); + } + + return InterpolateImpl(curveLength, it, y); } -template -void G4InterpolationDriver::InterpolateImpl(G4double curveLength, - ConstStepperIterator it, - field_utils::State& y) const +template +void G4InterpolationDriver::InterpolateImpl( + G4double curveLength, ConstStepperIterator it, field_utils::State& y) const { - const G4double tau = (curveLength - it->begin) * it->inverseLength; - return it->stepper->Interpolate(field_utils::clamp(tau, 0., 1.), y); + const G4double tau = (curveLength - it->begin) * it->inverseLength; + return it->stepper->Interpolate(field_utils::clamp(tau, 0., 1.), y); } -template -G4double G4InterpolationDriver::DistChord(const field_utils::State& yBegin, - G4double curveLengthBegin, - const field_utils::State& yEnd, - G4double curveLengthEnd) const +template +G4double G4InterpolationDriver::DistChord(const field_utils::State& yBegin, + G4double curveLengthBegin, const field_utils::State& yEnd, G4double curveLengthEnd) const { + if (StepperCachesDchord) { // optimization check if it worth // - if (curveLengthBegin == fLastStepper->begin && - curveLengthEnd == fLastStepper->end) - { - return fLastStepper->stepper->DistChord(); + if (curveLengthBegin == fLastStepper->begin && curveLengthEnd == fLastStepper->end) { + return fLastStepper->stepper + ->DistChord(); // QssStepper Returns 0.0 !??? Not implemented => WRONG } + } + + const G4double curveLengthMid = 0.5 * (curveLengthBegin + curveLengthEnd); + field_utils::State yMid; - const G4double curveLengthMid = 0.5 * (curveLengthBegin + curveLengthEnd); - field_utils::State yMid; - - Interpolate(curveLengthMid, yMid); + Interpolate(curveLengthMid, yMid); - return G4LineSection::Distline( - field_utils::makeVector(yMid, field_utils::Value3D::Position), - field_utils::makeVector(yBegin, field_utils::Value3D::Position), - field_utils::makeVector(yEnd, field_utils::Value3D::Position) - ); + return G4LineSection::Distline(field_utils::makeVector(yMid, field_utils::Value3D::Position), + field_utils::makeVector(yBegin, field_utils::Value3D::Position), + field_utils::makeVector(yEnd, field_utils::Value3D::Position)); } -template -G4double G4InterpolationDriver::AdvanceChordLimited(G4FieldTrack& track, - G4double hstep, - G4double epsStep, - G4double chordDistance) +template +G4double G4InterpolationDriver::AdvanceChordLimited( + G4FieldTrack& track, G4double hstep, G4double epsStep, G4double chordDistance) { - ++fTotalStepsForTrack; - - const G4double curveLengthBegin = track.GetCurveLength(); - const G4double hend = std::min(hstep, fChordStepEstimate); - G4double hdid = 0.0; - auto it = fSteppers.begin(); - G4double dChordStep = 0.0; - - field_utils::State yBegin, y; - track.DumpToArray(yBegin); - track.DumpToArray(y); - - if (fFirstStep) - { - Base::GetEquationOfMotion()->RightHandSide(y, fdydx); - fFirstStep = false; + ++fTotalStepsForTrack; + + const G4double curveLengthBegin = track.GetCurveLength(); + const G4double hend = std::min(hstep, fChordStepEstimate); + G4double hdid = 0.0; + auto it = fSteppers.begin(); + G4double dChordStep = 0.0; + + field_utils::State yBegin, y; + track.DumpToArray(yBegin); + track.DumpToArray(y); + + if (fFirstStep) { + Base::GetEquationOfMotion()->RightHandSide(y, fdydx); + fFirstStep = false; + } + + if (fKeepLastStepper) { + std::swap(*fSteppers.begin(), *fLastStepper); + it = fSteppers.begin(); // new begin, update iterator + fLastStepper = it; + hdid = it->end - curveLengthBegin; + if (hdid > hend) { + hdid = hend; + InterpolateImpl(curveLengthBegin + hdid, it, y); } - - if (fKeepLastStepper) - { - std::swap(*fSteppers.begin(), *fLastStepper); - it = fSteppers.begin(); //new begin, update iterator - fLastStepper = it; - hdid = it->end - curveLengthBegin; - if (hdid > hend) - { - hdid = hend; - InterpolateImpl(curveLengthBegin + hdid, it, y); - } - else - { - field_utils::copy(y, it->stepper->GetYOut()); - } - - dChordStep = DistChord(yBegin, curveLengthBegin, y, - curveLengthBegin + hdid); - - ++it; + else { + field_utils::copy(y, it->stepper->GetYOut()); } - // accurate advance & check chord distance - G4double h = fhnext; - for (; hdid= hend ) - // - estimated chord has exceeded limit 'chordDistance' - // - reached maximum number of steps (from number of steppers.) - - // update step estimation - if (h > fMinimumStep) - { - fhnext = h; - } + // update last stepper + fLastStepper = it; - // CheckState(); + // estimate chord distance + dChordStep = + std::max(dChordStep, DistChord(yBegin, curveLengthBegin, y, curveLengthBegin + hdid)); + } - // update chord step estimate - // - hdid = FindNextChord(yBegin, curveLengthBegin, y, curveLengthBegin + hdid, - dChordStep, chordDistance); + // Now, either + // - full integration ( hdid >= hend ) + // - estimated chord has exceeded limit 'chordDistance' + // - reached maximum number of steps (from number of steppers.) + + // update step estimation + if (h > fMinimumStep) { + fhnext = h; + } + + // CheckState(); - const G4double curveLengthEnd = curveLengthBegin + hdid; - fKeepLastStepper = fLastStepper->end - curveLengthEnd > CLHEP::perMillion; - track.LoadFromArray(y, fLastStepper->stepper->GetNumberOfVariables()); - track.SetCurveLength(curveLengthBegin + hdid); + // update chord step estimate + // + hdid = + FindNextChord(yBegin, curveLengthBegin, y, curveLengthBegin + hdid, dChordStep, chordDistance); - return hdid; + const G4double curveLengthEnd = curveLengthBegin + hdid; + fKeepLastStepper = fLastStepper->end - curveLengthEnd > CLHEP::perMillion; + track.LoadFromArray(y, fLastStepper->stepper->GetNumberOfVariables()); + track.SetCurveLength(curveLengthBegin + hdid); + + return hdid; } -template -G4double G4InterpolationDriver:: -FindNextChord(const field_utils::State& yBegin, - G4double curveLengthBegin, - field_utils::State& yEnd, - G4double curveLengthEnd, - G4double dChord, - G4double chordDistance) +template +G4double G4InterpolationDriver::FindNextChord( + const field_utils::State& yBegin, G4double curveLengthBegin, field_utils::State& yEnd, + G4double curveLengthEnd, G4double dChord, G4double chordDistance) { - G4double hstep = curveLengthEnd - curveLengthBegin; - G4double curveLength = curveLengthEnd; + G4double hstep = curveLengthEnd - curveLengthBegin; + G4double curveLength = curveLengthEnd; - G4int i = 1; - for (; i < fMaxTrials && dChord > chordDistance - && curveLength > fLastStepper->begin; ++i) - { - // crop step size - hstep = CalcChordStep(hstep, dChord, chordDistance); + G4int i = 1; + for (; i < fMaxTrials && dChord > chordDistance && curveLength > fLastStepper->begin; ++i) { + // crop step size + hstep = CalcChordStep(hstep, dChord, chordDistance); - // hstep should be in the last stepper - hstep = std::max(hstep, fLastStepper->begin - curveLengthBegin); - curveLength = curveLengthBegin + hstep; + // hstep should be in the last stepper + hstep = std::max(hstep, fLastStepper->begin - curveLengthBegin); + curveLength = curveLengthBegin + hstep; - // use fLastStepper! - InterpolateImpl(curveLength, fLastStepper, yEnd); + // use fLastStepper! + InterpolateImpl(curveLength, fLastStepper, yEnd); - // update chord distance - dChord = DistChord(yBegin, curveLengthBegin, yEnd, curveLength); - } + // update chord distance + dChord = DistChord(yBegin, curveLengthBegin, yEnd, curveLength); + } - // dChord may be zero - // - if (dChord > 0.0) - { - fChordStepEstimate = hstep * std::sqrt(chordDistance / dChord); - } + // dChord may be zero + // + if (dChord > 0.0) { + fChordStepEstimate = hstep * std::sqrt(chordDistance / dChord); + } - if (i == fMaxTrials) - { - G4Exception("G4InterpolationDriver::FindNextChord()", - "GeomField1001", JustWarning, "cannot converge"); - } + if (i == fMaxTrials) { + G4Exception( + "G4InterpolationDriver::FindNextChord()", "GeomField1001", JustWarning, "cannot converge"); + } - AccumulateStatistics(i); + AccumulateStatistics(i); - return hstep; + return hstep; } // Is called to estimate the next step size, even for successful steps, // in order to predict an accurate 'chord-sensitive' first step // which is likely to assist in more performant 'stepping'. // -template -G4double G4InterpolationDriver::CalcChordStep(G4double stepTrialOld, - G4double dChordStep, - G4double chordDistance) +template +G4double G4InterpolationDriver::CalcChordStep( + G4double stepTrialOld, G4double dChordStep, G4double chordDistance) { - const G4double chordStepEstimate = stepTrialOld - * std::sqrt(chordDistance / dChordStep); - G4double stepTrial = fFractionNextEstimate * chordStepEstimate; - - if (stepTrial <= 0.001 * stepTrialOld) - { - if (dChordStep > 1000.0 * chordDistance) - { - stepTrial = stepTrialOld * 0.03; - } - else - { - if (dChordStep > 100. * chordDistance) - { - stepTrial = stepTrialOld * 0.1; - } - else // Try halving the length until dChordStep OK - { - stepTrial = stepTrialOld * 0.5; - } - } - } - else if (stepTrial > 1000.0 * stepTrialOld) - { - stepTrial = 1000.0 * stepTrialOld; - } + const G4double chordStepEstimate = stepTrialOld * std::sqrt(chordDistance / dChordStep); + G4double stepTrial = fFractionNextEstimate * chordStepEstimate; - if (stepTrial == 0.0) - { - stepTrial = 0.000001; + if (stepTrial <= 0.001 * stepTrialOld) { + if (dChordStep > 1000.0 * chordDistance) { + stepTrial = stepTrialOld * 0.03; } - - // A more sophisticated chord-finder could figure out a better - // stepTrial, from dChordStep and the required d_geometry - // e.g. - // Calculate R, r_helix (eg at orig point) - // if( stepTrial < 2 pi R ) - // stepTrial = R arc_cos( 1 - chordDistance / r_helix ) - // else - // ?? - - return stepTrial; + else { + if (dChordStep > 100. * chordDistance) { + stepTrial = stepTrialOld * 0.1; + } + else // Try halving the length until dChordStep OK + { + stepTrial = stepTrialOld * 0.5; + } + } + } + else if (stepTrial > 1000.0 * stepTrialOld) { + stepTrial = 1000.0 * stepTrialOld; + } + + if (stepTrial == 0.0) { + stepTrial = 0.000001; + } + + // A more sophisticated chord-finder could figure out a better + // stepTrial, from dChordStep and the required d_geometry + // e.g. + // Calculate R, r_helix (eg at orig point) + // if( stepTrial < 2 pi R ) + // stepTrial = R arc_cos( 1 - chordDistance / r_helix ) + // else + // ?? + + return stepTrial; } -template -G4bool G4InterpolationDriver:: -AccurateAdvance(G4FieldTrack& track, G4double hstep, - G4double /*eps*/, - G4double /*hinitial*/ - ) +template +G4bool G4InterpolationDriver::AccurateAdvance( + G4FieldTrack& track, G4double hstep, G4double /*eps*/, G4double /*hinitial*/ +) { - if (hstep == 0.0) - { - std::ostringstream message; - message << "Proposed step is zero; hstep = " << hstep << " !"; - G4Exception("G4InterpolationDriver::AccurateAdvance()", - "GeomField1001", JustWarning, message); - return true; - } + if (hstep == 0.0) { + std::ostringstream message; + message << "Proposed step is zero; hstep = " << hstep << " !"; + G4Exception("G4InterpolationDriver::AccurateAdvance()", "GeomField1001", JustWarning, message); + return true; + } - if (hstep < 0) - { - std::ostringstream message; - message << "Invalid run condition." << G4endl - << "Proposed step is negative; hstep = " << hstep << "." - << G4endl - << "Requested step cannot be negative! Aborting event."; - G4Exception("G4InterpolationDriver::AccurateAdvance()", - "GeomField0003", EventMustBeAborted, message); - return false; - } + if (hstep < 0) { + std::ostringstream message; + message << "Invalid run condition." << G4endl << "Proposed step is negative; hstep = " << hstep + << "." << G4endl << "Requested step cannot be negative! Aborting event."; + G4Exception( + "G4InterpolationDriver::AccurateAdvance()", "GeomField0003", EventMustBeAborted, message); + return false; + } - const G4double curveLength = track.GetCurveLength(); - const G4double curveLengthEnd = curveLength + hstep; + const G4double curveLength = track.GetCurveLength(); + const G4double curveLengthEnd = curveLength + hstep; - field_utils::State y; - Interpolate(curveLengthEnd, y); + field_utils::State y; + Interpolate(curveLengthEnd, y); - track.LoadFromArray(y, Base::GetStepper()->GetNumberOfVariables()); - track.SetCurveLength(curveLengthEnd); + track.LoadFromArray(y, Base::GetStepper()->GetNumberOfVariables()); + track.SetCurveLength(curveLengthEnd); - return true; + return true; } // Driver for one Runge-Kutta Step with monitoring of local truncation error @@ -431,169 +372,153 @@ AccurateAdvance(G4FieldTrack& track, G4double hstep, // starting value of the independent variable x . Also input are stepsize // to be attempted htry, and the required accuracy eps. On output y and x // are replaced by their new values, hdid is the stepsize that was actually -// accomplished, and hnext is the estimated next stepsize. +// accomplished, and hnext is the estimated next stepsize. // This is similar to the function rkqs from the book: // Numerical Recipes in C: The Art of Scientific Computing (NRC), Second // Edition, by William H. Press, Saul A. Teukolsky, William T. // Vetterling, and Brian P. Flannery (Cambridge University Press 1992), // 16.2 Adaptive StepSize Control for Runge-Kutta, p. 719 // -template -G4double G4InterpolationDriver::OneGoodStep(StepperIterator it, - field_utils::State& y, - field_utils::State& dydx, - G4double& hstep, - G4double epsStep, - G4double curveLength) +template +G4double G4InterpolationDriver::OneGoodStep(StepperIterator it, + field_utils::State& y, field_utils::State& dydx, G4double& hstep, G4double epsStep, + G4double curveLength, G4FieldTrack* /*track*/) { - G4double error2 = DBL_MAX; - field_utils::State yerr, ytemp, dydxtemp; - G4double h = hstep; - - G4int i = 0; - for (; i < fMaxTrials; ++i) - { - it->stepper->Stepper(y, dydx, h, ytemp, yerr, dydxtemp); - error2 = field_utils::relativeError2(y, yerr, h, epsStep); - - if (error2 <= 1.0) - { - hstep = std::max(Base::GrowStepSize2(h, error2), fMinimumStep); - break; - } - - // don't control error for small steps - if (h <= fMinimumStep) - { - hstep = fMinimumStep; - break; - } - - h = std::max(Base::ShrinkStepSize2(h, error2), fMinimumStep); + G4double error2 = DBL_MAX; + field_utils::State yerr, ytemp, dydxtemp; + G4double h = hstep; + + G4int i = 0; + for (; i < fMaxTrials; ++i) { + it->stepper->Stepper(y, dydx, h, ytemp, yerr, dydxtemp); + error2 = field_utils::relativeError2(y, yerr, h, epsStep); + + if (error2 <= 1.0) { + hstep = std::max(Base::GrowStepSize2(h, error2), fMinimumStep); + break; } - if (i == fMaxTrials) - { - G4Exception("G4InterpolationDriver::OneGoodStep()", - "GeomField1001", JustWarning, "cannot converge"); - hstep = std::max(Base::ShrinkStepSize2(h, error2), fMinimumStep); + // don't control error for small steps + if (h <= fMinimumStep) { + hstep = fMinimumStep; + break; } - // set interpolation inverval - it->begin = curveLength; - it->end = curveLength + h; - it->inverseLength = 1. / h; + h = std::max(Base::ShrinkStepSize2(h, error2), fMinimumStep); + } + + if (i == fMaxTrials) { + G4Exception( + "G4InterpolationDriver::OneGoodStep()", "GeomField1001", JustWarning, "cannot converge"); + hstep = std::max(Base::ShrinkStepSize2(h, error2), fMinimumStep); + } + + // set interpolation inverval + it->begin = curveLength; + it->end = curveLength + h; + it->inverseLength = 1. / h; - // setup interpolation - it->stepper->SetupInterpolation(); + // setup interpolation + it->stepper->SetupInterpolation(); - field_utils::copy(dydx, dydxtemp); - field_utils::copy(y, ytemp); + field_utils::copy(dydx, dydxtemp); + field_utils::copy(y, ytemp); - return h; + return h; } -template -void G4InterpolationDriver::PrintState() const +template +void G4InterpolationDriver::PrintState() const { - using namespace field_utils; - State prevEnd, currBegin; - auto prev = fSteppers.begin(); - - G4cout << "====== curr state ========" << G4endl; - for (auto i = fSteppers.begin(); i <= fLastStepper; ++i) - { - i->stepper->Interpolate(0, currBegin); - - G4cout << "cl_begin: " <begin << " " - << "cl_end: " << i->end << " "; - - if (prev != i) { - prev->stepper->Interpolate(1, prevEnd); - auto prevPos = makeVector(prevEnd, Value3D::Position); - auto currPos = makeVector(currBegin, Value3D::Position); - G4cout << "diff_begin: " << (prevPos - currPos).mag(); - } - - G4cout << G4endl; - prev = i; - } - - const G4double clBegin = fSteppers.begin()->begin; - const G4double clEnd = fLastStepper->end; - const G4double hstep = (clEnd - clBegin) / 10.; - State yBegin, yCurr; - Interpolate(0, yBegin); - for (G4double cl = clBegin; cl <= clEnd + 1e-12; cl += hstep) - { - Interpolate(cl, yCurr); - auto d = DistChord(yBegin, clBegin, yCurr, cl); - G4cout << "cl: " << cl << " chord_distance: " << d << G4endl; + using namespace field_utils; + State prevEnd, currBegin; + auto prev = fSteppers.begin(); + + G4cout << "====== curr state ========" << G4endl; + for (auto i = fSteppers.begin(); i <= fLastStepper; ++i) { + i->stepper->Interpolate(0, currBegin); + + G4cout << "cl_begin: " << i->begin << " " + << "cl_end: " << i->end << " "; + + if (prev != i) { + prev->stepper->Interpolate(1, prevEnd); + auto prevPos = makeVector(prevEnd, Value3D::Position); + auto currPos = makeVector(currBegin, Value3D::Position); + G4cout << "diff_begin: " << (prevPos - currPos).mag(); } - G4cout << "==========================" << G4endl; + G4cout << G4endl; + prev = i; + } + + const G4double clBegin = fSteppers.begin()->begin; + const G4double clEnd = fLastStepper->end; + const G4double hstep = (clEnd - clBegin) / 10.; + State yBegin, yCurr; + Interpolate(0, yBegin); + for (G4double cl = clBegin; cl <= clEnd + 1e-12; cl += hstep) { + Interpolate(cl, yCurr); + auto d = DistChord(yBegin, clBegin, yCurr, cl); + G4cout << "cl: " << cl << " chord_distance: " << d << G4endl; + } + + G4cout << "==========================" << G4endl; } - -template -void G4InterpolationDriver::CheckState() const +template +void G4InterpolationDriver::CheckState() const { - G4int smallSteps = 0; - for (auto i = fSteppers.begin(); i <= fLastStepper; ++i) - { - G4double stepLength = i->end - i->begin; - if (stepLength < fMinimumStep) - { - ++smallSteps; - } + G4int smallSteps = 0; + for (auto i = fSteppers.begin(); i <= fLastStepper; ++i) { + G4double stepLength = i->end - i->begin; + if (stepLength < fMinimumStep) { + ++smallSteps; } - - if (smallSteps > 1) - { - std::ostringstream message; - message << "====== curr state ========\n"; - for (auto i = fSteppers.begin(); i <= fLastStepper; ++i) - { - message << "cl_begin: " <begin << " " - << "cl_end: " << i->end << "\n"; - } - - G4Exception("G4InterpolationDriver::CheckState()", - "GeomField0003", FatalException, message); + } + + if (smallSteps > 1) { + std::ostringstream message; + message << "====== curr state ========\n"; + for (auto i = fSteppers.begin(); i <= fLastStepper; ++i) { + message << "cl_begin: " << i->begin << " " + << "cl_end: " << i->end << "\n"; } + + G4Exception("G4InterpolationDriver::CheckState()", "GeomField0003", FatalException, message); + } } -template -void G4InterpolationDriver::AccumulateStatistics(G4int noTrials) +template +void G4InterpolationDriver::AccumulateStatistics(G4int noTrials) { - fTotalNoTrials += noTrials; - ++fNoCalls; - - if (noTrials > fmaxTrials) - { - fmaxTrials = noTrials; - } + fTotalNoTrials += noTrials; + ++fNoCalls; + + if (noTrials > fmaxTrials) { + fmaxTrials = noTrials; + } } -template -void G4InterpolationDriver::StreamInfo( std::ostream& os ) const +template +void G4InterpolationDriver::StreamInfo(std::ostream& os) const { - os << "State of G4InterpolationDriver: " << std::endl; - os << "--Base state (G4RKIntegrationDriver): " << std::endl; - Base::StreamInfo( os ); - os << " fMinimumStep = " << fMinimumStep << std::endl; - // os << " Max number of Steps = " << fMaxNoSteps << std::endl; - // os << " Safety factor = " << safety << std::endl; - // os << " Power - shrink = " << pshrnk << std::endl; - // os << " Power - grow = " << pgrow << std::endl; - // os << " threshold - shrink = " << errorConstraintShrink << std::endl; - // os << " threshold - grow = " << errorConstraintGrow << std::endl; - - os << " Max num of Trials = " << fMaxTrials << std::endl; - os << " Fract Next Estimate = " << fFractionNextEstimate << std::endl; - os << " Smallest Curve Fract= " << fSmallestCurveFraction << std::endl; - - os << " VerboseLevel = " << fVerboseLevel << std::endl; - os << " KeepLastStepper = " << fKeepLastStepper << std::endl; + os << "State of G4InterpolationDriver: " << std::endl; + os << "--Base state (G4RKIntegrationDriver): " << std::endl; + Base::StreamInfo(os); + os << " fMinimumStep = " << fMinimumStep << std::endl; + // os << " Max number of Steps = " << fMaxNoSteps << std::endl; + // os << " Safety factor = " << safety << std::endl; + // os << " Power - shrink = " << pshrnk << std::endl; + // os << " Power - grow = " << pgrow << std::endl; + // os << " threshold - shrink = " << errorConstraintShrink << std::endl; + // os << " threshold - grow = " << errorConstraintGrow << std::endl; + + os << " Max num of Trials = " << fMaxTrials << std::endl; + os << " Fract Next Estimate = " << fFractionNextEstimate << std::endl; + os << " Smallest Curve Fract= " << fSmallestCurveFraction << std::endl; + + os << " VerboseLevel = " << fVerboseLevel << std::endl; + os << " KeepLastStepper = " << fKeepLastStepper << std::endl; } diff --git a/source/geometry/magneticfield/include/G4LineCurrentMagField.hh b/source/geometry/magneticfield/include/G4LineCurrentMagField.hh index 24b49fffeaf..15eb6949f02 100644 --- a/source/geometry/magneticfield/include/G4LineCurrentMagField.hh +++ b/source/geometry/magneticfield/include/G4LineCurrentMagField.hh @@ -41,14 +41,14 @@ class G4LineCurrentMagField : public G4MagneticField { - public: // with description + public: G4LineCurrentMagField(G4double pFieldConstant); - ~G4LineCurrentMagField(); + ~G4LineCurrentMagField() override; void GetFieldValue(const G4double yTrack[], - G4double B[] ) const; - G4Field* Clone() const; + G4double B[] ) const override; + G4Field* Clone() const override; private: diff --git a/source/geometry/magneticfield/include/G4LineSection.hh b/source/geometry/magneticfield/include/G4LineSection.hh index 048521f1729..6feba741542 100644 --- a/source/geometry/magneticfield/include/G4LineSection.hh +++ b/source/geometry/magneticfield/include/G4LineSection.hh @@ -46,7 +46,7 @@ class G4LineSection G4LineSection( const G4ThreeVector& PntA, const G4ThreeVector& PntB ); - G4double Dist( G4ThreeVector OtherPnt ) const; + G4double Dist( const G4ThreeVector& OtherPnt ) const; inline G4double GetABdistanceSq() const; diff --git a/source/geometry/magneticfield/include/G4MagErrorStepper.hh b/source/geometry/magneticfield/include/G4MagErrorStepper.hh index 6cea6e22edf..5e1764986db 100644 --- a/source/geometry/magneticfield/include/G4MagErrorStepper.hh +++ b/source/geometry/magneticfield/include/G4MagErrorStepper.hh @@ -42,12 +42,12 @@ class G4MagErrorStepper : public G4MagIntegratorStepper { - public: // with description + public: G4MagErrorStepper(G4EquationOfMotion*EqRhs, G4int numberOfVariables, G4int numStateVariables = 12); - virtual ~G4MagErrorStepper(); + ~G4MagErrorStepper() override; G4MagErrorStepper(const G4MagErrorStepper&) = delete; G4MagErrorStepper& operator=(const G4MagErrorStepper&) = delete; @@ -56,7 +56,7 @@ class G4MagErrorStepper : public G4MagIntegratorStepper const G4double dydx[], G4double h, G4double yout[], - G4double yerr[] ); + G4double yerr[] ) override; // The stepper for the Runge Kutta integration. The stepsize // is fixed, with the Step size given by h. // Integrates ODE starting values y[0 to 6]. @@ -68,7 +68,7 @@ class G4MagErrorStepper : public G4MagIntegratorStepper G4double yout[] ) = 0; // Performs a 'dump' Step without error calculation. - G4double DistChord() const; + G4double DistChord() const override; private: diff --git a/source/geometry/magneticfield/include/G4MagHelicalStepper.hh b/source/geometry/magneticfield/include/G4MagHelicalStepper.hh index d91ffcd6658..bf768a0248b 100644 --- a/source/geometry/magneticfield/include/G4MagHelicalStepper.hh +++ b/source/geometry/magneticfield/include/G4MagHelicalStepper.hh @@ -49,19 +49,19 @@ class G4MagHelicalStepper : public G4MagIntegratorStepper { - public: // with description + public: G4MagHelicalStepper(G4Mag_EqRhs *EqRhs); - virtual ~G4MagHelicalStepper(); + ~G4MagHelicalStepper() override; G4MagHelicalStepper(const G4MagHelicalStepper&) = delete; G4MagHelicalStepper& operator=(const G4MagHelicalStepper&) = delete; - virtual void Stepper( const G4double y[], // VIRTUAL for ExactHelix - const G4double dydx[], - G4double h, - G4double yout[], - G4double yerr[] ); + void Stepper( const G4double y[], // VIRTUAL for ExactHelix + const G4double dydx[], + G4double h, + G4double yout[], + G4double yerr[] ) override; // The stepper for the Runge Kutta integration. // The stepsize is fixed, equal to h. // Integrates ODE starting values y[0 to 6] @@ -73,10 +73,10 @@ class G4MagHelicalStepper : public G4MagIntegratorStepper G4double yout[] ) = 0; // Performs a 'dump' Step without error calculation. - G4double DistChord()const ; + G4double DistChord()const override ; // Estimate maximum distance of curved solution and chord ... - protected: // with description + protected: inline void LinearStep( const G4double yIn[], G4double h, @@ -84,9 +84,9 @@ class G4MagHelicalStepper : public G4MagIntegratorStepper // A linear Step in regions without magnetic field. void AdvanceHelix( const G4double yIn[], - G4ThreeVector Bfld, + const G4ThreeVector& Bfld, G4double h, - G4double yHelix[], G4double yHelix2[] = 0); + G4double yHelix[], G4double yHelix2[] = nullptr); // A first order Step along a helix inside the field. inline void MagFieldEvaluate( const G4double y[], G4ThreeVector& Bfield ); diff --git a/source/geometry/magneticfield/include/G4MagIntegratorDriver.hh b/source/geometry/magneticfield/include/G4MagIntegratorDriver.hh index 5598f427e59..2c33fed4d1b 100644 --- a/source/geometry/magneticfield/include/G4MagIntegratorDriver.hh +++ b/source/geometry/magneticfield/include/G4MagIntegratorDriver.hh @@ -44,53 +44,53 @@ class G4MagInt_Driver : public G4VIntegrationDriver, public G4ChordFinderDelegate { - public: // with description + public: G4MagInt_Driver(G4double hminimum, G4MagIntegratorStepper* pItsStepper, G4int numberOfComponents = 6, G4int statisticsVerbosity = 0); - virtual ~G4MagInt_Driver() override; + ~G4MagInt_Driver() override; // Constructor, destructor. G4MagInt_Driver(const G4MagInt_Driver&) = delete; G4MagInt_Driver& operator=(const G4MagInt_Driver&) = delete; - inline virtual G4double AdvanceChordLimited(G4FieldTrack& track, - G4double stepMax, - G4double epsStep, - G4double chordDistance) override; + inline G4double AdvanceChordLimited(G4FieldTrack& track, + G4double stepMax, + G4double epsStep, + G4double chordDistance) override; - inline virtual void OnStartTracking() override; - inline virtual void OnComputeStep() override {}; - virtual G4bool DoesReIntegrate() const override { return true; } + inline void OnStartTracking() override; + inline void OnComputeStep(const G4FieldTrack* = nullptr) override {} + G4bool DoesReIntegrate() const override { return true; } - virtual G4bool AccurateAdvance(G4FieldTrack& y_current, - G4double hstep, - G4double eps, // Requested y_err/hstep - G4double hinitial = 0.0) override; + G4bool AccurateAdvance(G4FieldTrack& y_current, + G4double hstep, + G4double eps, // Requested y_err/hstep + G4double hinitial = 0.0) override; // Above drivers for integrator (Runge-Kutta) with stepsize control. // Integrates ODE starting values y_current // from current s (s=s0) to s=s0+h with accuracy eps. // On output ystart is replaced by value at end of interval. // The concept is similar to the odeint routine from NRC p.721-722. - virtual G4bool QuickAdvance(G4FieldTrack& y_val, // INOUT - const G4double dydx[], - G4double hstep, - G4double& dchord_step, - G4double& dyerr) override; + G4bool QuickAdvance( G4FieldTrack& y_val, // INOUT + const G4double dydx[], + G4double hstep, + G4double& dchord_step, + G4double& dyerr) override; // QuickAdvance just tries one Step - it does not ensure accuracy. void StreamInfo( std::ostream& os ) const override; // Write out the parameters / state of the driver - G4bool QuickAdvance(G4FieldTrack& y_posvel, // INOUT + G4bool QuickAdvance( G4FieldTrack& y_posvel, // INOUT const G4double dydx[], - G4double hstep, // IN - G4double& dchord_step, - G4double& dyerr_pos_sq, - G4double& dyerr_mom_rel_sq ); + G4double hstep, // IN + G4double& dchord_step, + G4double& dyerr_pos_sq, + G4double& dyerr_mom_rel_sq ); // New QuickAdvance that also just tries one Step // (so also does not ensure accuracy) // but does return the errors in position and @@ -102,18 +102,18 @@ class G4MagInt_Driver : public G4VIntegrationDriver, inline G4double GetPshrnk() const; inline G4double GetPgrow() const; inline G4double GetErrcon() const; - virtual void GetDerivatives(const G4FieldTrack& y_curr, // INput - G4double dydx[]) const override; // OUTput + void GetDerivatives(const G4FieldTrack& y_curr, // INput + G4double dydx[]) const override; // OUTput - virtual void GetDerivatives(const G4FieldTrack& track, - G4double dydx[], - G4double field[]) const override; + void GetDerivatives(const G4FieldTrack& track, + G4double dydx[], + G4double field[]) const override; // Accessors - virtual G4EquationOfMotion* GetEquationOfMotion() override; - virtual void SetEquationOfMotion(G4EquationOfMotion* equation) override; + G4EquationOfMotion* GetEquationOfMotion() override; + void SetEquationOfMotion(G4EquationOfMotion* equation) override; - virtual void RenewStepperAndAdjust(G4MagIntegratorStepper* pItsStepper) override; + void RenewStepperAndAdjust(G4MagIntegratorStepper* pItsStepper) override; // Sets a new stepper pItsStepper for this driver. Then it calls // ReSetParameters to reset its parameters accordingly. @@ -131,22 +131,22 @@ class G4MagInt_Driver : public G4VIntegrationDriver, inline G4double ComputeAndSetErrcon(); - virtual const G4MagIntegratorStepper* GetStepper() const override; - virtual G4MagIntegratorStepper* GetStepper() override; + const G4MagIntegratorStepper* GetStepper() const override; + G4MagIntegratorStepper* GetStepper() override; - void OneGoodStep(G4double ystart[], // Like old RKF45step() + void OneGoodStep( G4double ystart[], // Like old RKF45step() const G4double dydx[], - G4double& x, - G4double htry, - G4double eps, // memb variables ? - G4double& hdid, - G4double& hnext ) ; + G4double& x, + G4double htry, + G4double eps, // memb variables ? + G4double& hdid, + G4double& hnext ) ; // This takes one Step that is as large as possible while // satisfying the accuracy criterion of: // yerr < eps * |y_end-y_start| - virtual G4double ComputeNewStepSize(G4double errMaxNorm, // normalised - G4double hstepCurrent) override; + G4double ComputeNewStepSize(G4double errMaxNorm, // normalised + G4double hstepCurrent) override; // Taking the last step's normalised error, calculate // a step size for the next step. // Does it limit the next step's size within a factor of the current? @@ -173,16 +173,14 @@ class G4MagInt_Driver : public G4VIntegrationDriver, // taken for the integration of a single segment - // (i.e. a single call to AccurateAdvance). - public: // without description - inline void SetHmin(G4double newval); - virtual void SetVerboseLevel(G4int newLevel) override; - virtual G4int GetVerboseLevel() const override; + void SetVerboseLevel(G4int newLevel) override; + G4int GetVerboseLevel() const override; inline G4double GetSmallestFraction() const; void SetSmallestFraction( G4double val ); - protected: // without description + protected: void WarnSmallStepSize(G4double hnext, G4double hstep, G4double h, G4double xDone, @@ -196,33 +194,33 @@ class G4MagInt_Driver : public G4VIntegrationDriver, // Issue warnings for undesirable situations void PrintStatus(const G4double* StartArr, - G4double xstart, + G4double xstart, const G4double* CurrentArr, - G4double xcurrent, - G4double requestStep, - G4int subStepNo); + G4double xcurrent, + G4double requestStep, + G4int subStepNo); void PrintStatus(const G4FieldTrack& StartFT, const G4FieldTrack& CurrentFT, - G4double requestStep, - G4int subStepNo); + G4double requestStep, + G4int subStepNo); void PrintStat_Aux(const G4FieldTrack& aFieldTrack, - G4double requestStep, - G4double actualStep, - G4int subStepNo, - G4double subStepSize, - G4double dotVelocities); + G4double requestStep, + G4double actualStep, + G4int subStepNo, + G4double subStepSize, + G4double dotVelocities); // Verbose output for debugging void PrintStatisticsReport(); // Report on the number of steps, maximum errors etc. #ifdef QUICK_ADV_TWO - G4bool QuickAdvance( G4double yarrin[], // In - const G4double dydx[], - G4double hstep, - G4double yarrout[], // Out - G4double& dchord_step, // Out - G4double& dyerr ); // in length + G4bool QuickAdvance( G4double yarrin[], // In + const G4double dydx[], + G4double hstep, + G4double yarrout[], // Out + G4double& dchord_step, // Out + G4double& dyerr ); // in length #endif private: diff --git a/source/geometry/magneticfield/include/G4MagIntegratorStepper.hh b/source/geometry/magneticfield/include/G4MagIntegratorStepper.hh index e07c73ec0d6..3c3422a832e 100644 --- a/source/geometry/magneticfield/include/G4MagIntegratorStepper.hh +++ b/source/geometry/magneticfield/include/G4MagIntegratorStepper.hh @@ -43,6 +43,10 @@ #include "G4Types.hh" #include "G4EquationOfMotion.hh" +#include "G4VIntegrationDriver.hh" +#include "G4IntegrationDriver.hh" + +class G4VIntegrationDriver; class G4MagIntegratorStepper { @@ -113,8 +117,12 @@ class G4MagIntegratorStepper // Count number of calls to RHS method(s) inline G4bool IsFSAL() const; - - protected: + + // TODO - QSS + inline G4bool isQSS() const { return fIsQSS; } + void SetIsQSS(G4bool val){ fIsQSS= val;} + +protected: inline void SetIntegrationOrder(G4int order); inline void SetFSAL(G4bool flag = true); @@ -135,6 +143,8 @@ class G4MagIntegratorStepper // All ClassicalRK4 steppers are 4th order G4bool fIsFSAL = false; // Depends on RK method & implementation + G4bool fIsQSS = false; + }; #include "G4MagIntegratorStepper.icc" diff --git a/source/geometry/magneticfield/include/G4Mag_EqRhs.hh b/source/geometry/magneticfield/include/G4Mag_EqRhs.hh index 8506490ecca..d0ec550052c 100644 --- a/source/geometry/magneticfield/include/G4Mag_EqRhs.hh +++ b/source/geometry/magneticfield/include/G4Mag_EqRhs.hh @@ -45,34 +45,34 @@ class G4MagneticField; class G4Mag_EqRhs : public G4EquationOfMotion { - public: // with description + public: - G4Mag_EqRhs(G4MagneticField* magField); - virtual ~G4Mag_EqRhs(); - // Constructor and destructor. No actions. + G4Mag_EqRhs(G4MagneticField* magField); + ~G4Mag_EqRhs() override; + // Constructor and destructor. No actions. - virtual void EvaluateRhsGivenB( const G4double y[], - const G4double B[3], - G4double dydx[] ) const = 0; - // Given the value of the field "B", this function - // calculates the value of the derivative dydx. - // This is the _only_ function a subclass must define. - // The other two functions use Rhs_givenB. + void EvaluateRhsGivenB( const G4double y[], + const G4double B[3], + G4double dydx[] ) const override = 0; + // Given the value of the field "B", this function + // calculates the value of the derivative dydx. + // This is the _only_ function a subclass must define. + // The other two functions use Rhs_givenB. - inline G4double FCof() const { return fCof_val; } + inline G4double FCof() const { return fCof_val; } - virtual void SetChargeMomentumMass( G4ChargeState particleCharge, - G4double MomentumXc, - G4double mass ); + void SetChargeMomentumMass( G4ChargeState particleCharge, + G4double MomentumXc, + G4double mass ) override; private: - G4double fCof_val = 0.0; + G4double fCof_val = 0.0; - static const G4double fUnitConstant; // Set to 0.299792458 - // Coefficient in the Lorentz motion equation (Lorentz force), if the - // magnetic field B is in Tesla, the particle charge in units of the - // elementary (positron?) charge, the momentum P in MeV/c, and the - // space coordinates and path along the trajectory in mm. + static const G4double fUnitConstant; // Set to 0.299792458 + // Coefficient in the Lorentz motion equation (Lorentz force), if the + // magnetic field B is in Tesla, the particle charge in units of the + // elementary (positron?) charge, the momentum P in MeV/c, and the + // space coordinates and path along the trajectory in mm. }; #endif diff --git a/source/geometry/magneticfield/include/G4Mag_SpinEqRhs.hh b/source/geometry/magneticfield/include/G4Mag_SpinEqRhs.hh index 3be03ad1f87..ebb08e9a0f2 100644 --- a/source/geometry/magneticfield/include/G4Mag_SpinEqRhs.hh +++ b/source/geometry/magneticfield/include/G4Mag_SpinEqRhs.hh @@ -44,19 +44,19 @@ class G4MagneticField; class G4Mag_SpinEqRhs : public G4Mag_EqRhs { - public: // with description + public: G4Mag_SpinEqRhs( G4MagneticField* MagField ); - ~G4Mag_SpinEqRhs(); + ~G4Mag_SpinEqRhs() override; // Constructor and destructor. No actions. void SetChargeMomentumMass(G4ChargeState particleCharge, G4double MomentumXc, - G4double mass); + G4double mass) override; void EvaluateRhsGivenB( const G4double y[], const G4double B[3], - G4double dydx[] ) const; + G4double dydx[] ) const override; // Given the value of the magnetic field B, this function // calculates the value of the derivative dydx. diff --git a/source/geometry/magneticfield/include/G4Mag_UsualEqRhs.hh b/source/geometry/magneticfield/include/G4Mag_UsualEqRhs.hh index 5db19452217..188d0228755 100644 --- a/source/geometry/magneticfield/include/G4Mag_UsualEqRhs.hh +++ b/source/geometry/magneticfield/include/G4Mag_UsualEqRhs.hh @@ -44,21 +44,21 @@ class G4MagneticField; class G4Mag_UsualEqRhs : public G4Mag_EqRhs { - public: // with description + public: G4Mag_UsualEqRhs( G4MagneticField* MagField ); - virtual ~G4Mag_UsualEqRhs(); + ~G4Mag_UsualEqRhs() override; // Constructor and destructor. No actions. void EvaluateRhsGivenB( const G4double y[], const G4double B[3], - G4double dydx[] ) const; + G4double dydx[] ) const override; // Given the value of the magnetic field B, this function // calculates the value of the derivative dydx. - virtual void SetChargeMomentumMass( G4ChargeState particleCharge, - G4double MomentumXc, - G4double mass); + void SetChargeMomentumMass( G4ChargeState particleCharge, + G4double MomentumXc, + G4double mass ) override; }; #endif diff --git a/source/geometry/magneticfield/include/G4MagneticField.hh b/source/geometry/magneticfield/include/G4MagneticField.hh index c0fcff9ce59..50b19c71208 100644 --- a/source/geometry/magneticfield/include/G4MagneticField.hh +++ b/source/geometry/magneticfield/include/G4MagneticField.hh @@ -39,21 +39,21 @@ class G4MagneticField : public G4Field { - public: // with description + public: - G4MagneticField(); - virtual ~G4MagneticField(); - // Constructor and destructor. No actions. + G4MagneticField(); + ~G4MagneticField() override; + // Constructor and destructor. No actions. - G4MagneticField(const G4MagneticField& r); - G4MagneticField& operator= (const G4MagneticField& p); - // Copy constructor & assignment operator. + G4MagneticField(const G4MagneticField& r); + G4MagneticField& operator= (const G4MagneticField& p); + // Copy constructor & assignment operator. - inline G4bool DoesFieldChangeEnergy() const { return false; } - // Since a pure magnetic field does not change track energy + inline G4bool DoesFieldChangeEnergy() const override { return false; } + // Since a pure magnetic field does not change track energy - virtual void GetFieldValue( const G4double Point[4], - G4double* Bfield ) const = 0; + void GetFieldValue( const G4double Point[4], + G4double* Bfield ) const override = 0; }; #endif diff --git a/source/geometry/magneticfield/include/G4MonopoleEq.hh b/source/geometry/magneticfield/include/G4MonopoleEq.hh index d4843abd620..d3884cce3a1 100644 --- a/source/geometry/magneticfield/include/G4MonopoleEq.hh +++ b/source/geometry/magneticfield/include/G4MonopoleEq.hh @@ -42,19 +42,18 @@ class G4MonopoleEq : public G4EquationOfMotion { - public: // with description + public: G4MonopoleEq(G4ElectroMagneticField* emField ); - - ~G4MonopoleEq(); + ~G4MonopoleEq() override; void SetChargeMomentumMass(G4ChargeState particleCharge, G4double MomentumXc, - G4double mass); + G4double mass) override; void EvaluateRhsGivenB(const G4double y[], const G4double Field[], - G4double dydx[] ) const; + G4double dydx[] ) const override; // Given the value of the electromagnetic field, this function // calculates the value of the derivative dydx. diff --git a/source/geometry/magneticfield/include/G4NystromRK4.hh b/source/geometry/magneticfield/include/G4NystromRK4.hh index 7f8526294c3..7340bbe71d8 100644 --- a/source/geometry/magneticfield/include/G4NystromRK4.hh +++ b/source/geometry/magneticfield/include/G4NystromRK4.hh @@ -55,21 +55,21 @@ class G4NystromRK4 : public G4MagIntegratorStepper G4NystromRK4(G4Mag_EqRhs* EquationMotion, G4double distanceConstField = 0.0); // Can be used only for Magnetic Fields - and for 6 variables (x,p) - ~G4NystromRK4() {} + ~G4NystromRK4() override = default; - virtual void Stepper(const G4double y[], - const G4double dydx[], - G4double hstep, - G4double yOut[], - G4double yError[]) override; + void Stepper(const G4double y[], + const G4double dydx[], + G4double hstep, + G4double yOut[], + G4double yError[]) override; // Single call for integration result and error // Provides error via analytical method void SetDistanceForConstantField(G4double length); G4double GetDistanceForConstantField() const; - virtual G4int IntegratorOrder() const override { return 4; } - virtual G4double DistChord() const override; + G4int IntegratorOrder() const override { return 4; } + G4double DistChord() const override; private: diff --git a/source/geometry/magneticfield/include/G4OldMagIntDriver.hh b/source/geometry/magneticfield/include/G4OldMagIntDriver.hh index 273e4e2daa7..9c8e8ca8e7b 100644 --- a/source/geometry/magneticfield/include/G4OldMagIntDriver.hh +++ b/source/geometry/magneticfield/include/G4OldMagIntDriver.hh @@ -44,54 +44,53 @@ class G4OldMagIntDriver : public G4VIntegrationDriver, public G4ChordFinderDelegate { - public: // with description + public: G4OldMagIntDriver(G4double hminimum, - G4MagIntegratorStepper* pItsStepper, - G4int numberOfComponents = 6, - G4int statisticsVerbosity = 0); - virtual ~G4OldMagIntDriver() override; + G4MagIntegratorStepper* pItsStepper, + G4int numberOfComponents = 6, + G4int statisticsVerbosity = 0); + ~G4OldMagIntDriver() override; // Constructor, destructor. G4OldMagIntDriver(const G4OldMagIntDriver&) = delete; G4OldMagIntDriver& operator=(const G4OldMagIntDriver&) = delete; - inline virtual G4double AdvanceChordLimited(G4FieldTrack& track, - G4double stepMax, - G4double epsStep, - G4double chordDistance) override; + inline G4double AdvanceChordLimited(G4FieldTrack& track, + G4double stepMax, + G4double epsStep, + G4double chordDistance) override; - inline virtual void OnStartTracking() override; - inline virtual void OnComputeStep() override {}; - virtual G4bool DoesReIntegrate() const override { return true; } + inline void OnStartTracking() override; + inline void OnComputeStep(const G4FieldTrack* = nullptr) override {} + inline G4bool DoesReIntegrate() const override { return true; } - virtual G4bool AccurateAdvance(G4FieldTrack& y_current, - G4double hstep, - G4double eps, // Requested y_err/hstep - G4double hinitial = 0.0) override; + G4bool AccurateAdvance(G4FieldTrack& y_current, + G4double hstep, + G4double eps, // Requested y_err/hstep + G4double hinitial = 0.0) override; // Above drivers for integrator (Runge-Kutta) with stepsize control. // Integrates ODE starting values y_current // from current s (s=s0) to s=s0+h with accuracy eps. // On output ystart is replaced by value at end of interval. // The concept is similar to the odeint routine from NRC p.721-722. - virtual G4bool QuickAdvance(G4FieldTrack& y_val, // INOUT + G4bool QuickAdvance(G4FieldTrack& y_val, // INOUT const G4double dydx[], G4double hstep, G4double& dchord_step, G4double& dyerr) override; // QuickAdvance just tries one Step - it does not ensure accuracy. - G4bool QuickAdvance(G4FieldTrack& y_posvel, // INOUT + G4bool QuickAdvance( G4FieldTrack& y_posvel, // INOUT const G4double dydx[], - G4double hstep, // IN - G4double& dchord_step, - G4double& dyerr_pos_sq, - G4double& dyerr_mom_rel_sq ); - // New QuickAdvance that also just tries one Step - // (so also does not ensure accuracy) - // but does return the errors in position and - // momentum (normalised: Delta_Integration(p^2)/(p^2) ) + G4double hstep, // IN + G4double& dchord_step, + G4double& dyerr_pos_sq, + G4double& dyerr_mom_rel_sq); + // QuickAdvance that also just tries one Step (so also does not + // ensure accuracy), but does return the errors in position and + // momentum (normalised: Delta_Integration(p^2)/(p^2) ). inline G4double GetHmin() const; inline G4double Hmin() const; // Obsolete @@ -99,18 +98,18 @@ class G4OldMagIntDriver : public G4VIntegrationDriver, inline G4double GetPshrnk() const; inline G4double GetPgrow() const; inline G4double GetErrcon() const; - virtual void GetDerivatives(const G4FieldTrack& y_curr, // INput - G4double dydx[]) const override; // OUTput + void GetDerivatives(const G4FieldTrack& y_curr, // INput + G4double dydx[]) const override; // OUTput - virtual void GetDerivatives(const G4FieldTrack& track, - G4double dydx[], - G4double field[]) const override; + void GetDerivatives(const G4FieldTrack& track, + G4double dydx[], + G4double field[]) const override; // Accessors - virtual G4EquationOfMotion* GetEquationOfMotion() override; - virtual void SetEquationOfMotion(G4EquationOfMotion* equation) override; + G4EquationOfMotion* GetEquationOfMotion() override; + void SetEquationOfMotion(G4EquationOfMotion* equation) override; - virtual void RenewStepperAndAdjust(G4MagIntegratorStepper* pItsStepper) override; + void RenewStepperAndAdjust(G4MagIntegratorStepper* pItsStepper) override; // Sets a new stepper pItsStepper for this driver. Then it calls // ReSetParameters to reset its parameters accordingly. @@ -128,22 +127,22 @@ class G4OldMagIntDriver : public G4VIntegrationDriver, inline G4double ComputeAndSetErrcon(); - virtual const G4MagIntegratorStepper* GetStepper() const override; - virtual G4MagIntegratorStepper* GetStepper() override; + const G4MagIntegratorStepper* GetStepper() const override; + G4MagIntegratorStepper* GetStepper() override; - void OneGoodStep(G4double ystart[], // Like old RKF45step() + void OneGoodStep( G4double ystart[], // Like old RKF45step() const G4double dydx[], - G4double& x, - G4double htry, - G4double eps, // memb variables ? - G4double& hdid, - G4double& hnext ) ; + G4double& x, + G4double htry, + G4double eps, // memb variables ? + G4double& hdid, + G4double& hnext) ; // This takes one Step that is as large as possible while // satisfying the accuracy criterion of: // yerr < eps * |y_end-y_start| - virtual G4double ComputeNewStepSize(G4double errMaxNorm, // normalised - G4double hstepCurrent) override; + G4double ComputeNewStepSize(G4double errMaxNorm, // normalised + G4double hstepCurrent) override; // Taking the last step's normalised error, calculate // a step size for the next step. // Do not limit the next step's size within a factor of the @@ -163,16 +162,14 @@ class G4OldMagIntDriver : public G4VIntegrationDriver, // taken for the integration of a single segment - // (i.e. a single call to AccurateAdvance). - public: // without description - inline void SetHmin(G4double newval); - virtual void SetVerboseLevel(G4int newLevel) override; - virtual G4int GetVerboseLevel() const override; + void SetVerboseLevel(G4int newLevel) override; + G4int GetVerboseLevel() const override; inline G4double GetSmallestFraction() const; void SetSmallestFraction( G4double val ); - protected: // without description + protected: void WarnSmallStepSize(G4double hnext, G4double hstep, G4double h, G4double xDone, @@ -186,21 +183,21 @@ class G4OldMagIntDriver : public G4VIntegrationDriver, // Issue warnings for undesirable situations void PrintStatus(const G4double* StartArr, - G4double xstart, + G4double xstart, const G4double* CurrentArr, - G4double xcurrent, - G4double requestStep, - G4int subStepNo); + G4double xcurrent, + G4double requestStep, + G4int subStepNo); void PrintStatus(const G4FieldTrack& StartFT, const G4FieldTrack& CurrentFT, - G4double requestStep, - G4int subStepNo); + G4double requestStep, + G4int subStepNo); void PrintStat_Aux(const G4FieldTrack& aFieldTrack, - G4double requestStep, - G4double actualStep, - G4int subStepNo, - G4double subStepSize, - G4double dotVelocities); + G4double requestStep, + G4double actualStep, + G4int subStepNo, + G4double subStepSize, + G4double dotVelocities); // Verbose output for debugging void PrintStatisticsReport(); diff --git a/source/geometry/magneticfield/include/G4QSS2.hh b/source/geometry/magneticfield/include/G4QSS2.hh new file mode 100644 index 00000000000..f18a23ef8e2 --- /dev/null +++ b/source/geometry/magneticfield/include/G4QSS2.hh @@ -0,0 +1,400 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// G4QSS2 +// +// G4QSS2 simulator + +// Authors: Lucio Santi, Rodrigo Castro - 2018-2021 +// -------------------------------------------------------------------- +#ifndef _G4QSS2_H_ +#define _G4QSS2_H_ + +#include "G4Types.hh" // For G4int, G4double +#include "G4qss_misc.hh" + +#include +#include + +#define REPORT_CRITICAL_PROBLEM 1 + +#ifdef REPORT_CRITICAL_PROBLEM +#include +#include "G4Log.hh" +#endif + +class G4QSS2 +{ + public: + + G4QSS2(QSS_simulator sim) : simulator(sim) {} + + inline QSS_simulator getSimulator() const { return this->simulator; } + + inline G4int order() const { return 2; } + + inline void full_definition(G4double coeff) + { + G4double* const x = simulator->q; + G4double* const dx = simulator->x; + G4double* const alg = simulator->alg; + + dx[1] = x[9]; + dx[2] = 0; + + dx[4] = x[12]; + dx[5] = 0; + + dx[7] = x[15]; + dx[8] = 0; + + dx[10] = coeff * (alg[2] * x[12] - alg[1] * x[15]); + dx[11] = 0; + + dx[13] = coeff * (alg[0] * x[15] - alg[2] * x[9]); + dx[14] = 0; + + dx[16] = coeff * (alg[1] * x[9] - alg[0] * x[12]); + dx[17] = 0; + } + + inline void dependencies(G4int i, G4double coeff) + { + G4double* const x = simulator->q; + G4double* const der = simulator->x; + G4double* const alg = simulator->alg; + + switch (i) + { + case 0: + der[10] = coeff * (alg[2] * x[12] - alg[1] * x[15]); + der[11] = ((alg[2] * x[13] - x[16] * alg[1]) * coeff) / 2; + + der[13] = coeff * (alg[0] * x[15] - alg[2] * x[9]); + der[14] = ((alg[0] * x[16] - alg[2] * x[10]) * coeff) / 2; + + der[16] = coeff * (alg[1] * x[9] - alg[0] * x[12]); + der[17] = (-coeff * (alg[0] * x[13] - x[10] * alg[1])) / 2; + return; + case 1: + der[10] = coeff * (alg[2] * x[12] - alg[1] * x[15]); + der[11] = ((alg[2] * x[13] - x[16] * alg[1]) * coeff) / 2; + + der[13] = coeff * (alg[0] * x[15] - alg[2] * x[9]); + der[14] = ((alg[0] * x[16] - alg[2] * x[10]) * coeff) / 2; + + der[16] = coeff * (alg[1] * x[9] - alg[0] * x[12]); + der[17] = (-coeff * (alg[0] * x[13] - x[10] * alg[1])) / 2; + return; + case 2: + der[10] = coeff * (alg[2] * x[12] - alg[1] * x[15]); + der[11] = ((alg[2] * x[13] - x[16] * alg[1]) * coeff) / 2; + + der[13] = coeff * (alg[0] * x[15] - alg[2] * x[9]); + der[14] = ((alg[0] * x[16] - alg[2] * x[10]) * coeff) / 2; + + der[16] = coeff * (alg[1] * x[9] - alg[0] * x[12]); + der[17] = (-coeff * (alg[0] * x[13] - x[10] * alg[1])) / 2; + return; + case 3: + der[1] = x[9]; + der[2] = (x[10]) / 2; + + der[13] = coeff * (alg[0] * x[15] - alg[2] * x[9]); + der[14] = ((alg[0] * x[16] - alg[2] * x[10]) * coeff) / 2; + + der[16] = coeff * (alg[1] * x[9] - alg[0] * x[12]); + der[17] = (-coeff * (alg[0] * x[13] - x[10] * alg[1])) / 2; + return; + case 4: + der[4] = x[12]; + der[5] = (x[13]) / 2; + + der[10] = coeff * (alg[2] * x[12] - alg[1] * x[15]); + der[11] = ((alg[2] * x[13] - x[16] * alg[1]) * coeff) / 2; + + der[16] = coeff * (alg[1] * x[9] - alg[0] * x[12]); + der[17] = (-coeff * (alg[0] * x[13] - x[10] * alg[1])) / 2; + return; + case 5: + der[7] = x[15]; + der[8] = (x[16]) / 2; + + der[10] = coeff * (alg[2] * x[12] - alg[1] * x[15]); + der[11] = ((alg[2] * x[13] - x[16] * alg[1]) * coeff) / 2; + + der[13] = coeff * (alg[0] * x[15] - alg[2] * x[9]); + der[14] = ((alg[0] * x[16] - alg[2] * x[10]) * coeff) / 2; + return; + } + } + + inline void recompute_next_times(G4int* inf, G4double t) + { + G4int i; + G4double* x = simulator->x; + G4double* q = simulator->q; + G4double* lqu = simulator->lqu; + G4double* time = simulator->nextStateTime; + + for (i = 0; i < 3; i++) + { + const G4int var = inf[i]; + const G4int icf0 = 3 * var; + const G4int icf1 = icf0 + 1; + const G4int icf2 = icf1 + 1; + + time[var] = t; + + if (std::fabs(q[icf0] - x[icf0]) < lqu[var]) + { + G4double mpr = -1, mpr2; + G4double cf0 = q[icf0] + lqu[var] - x[icf0]; + G4double cf1 = q[icf1] - x[icf1]; + G4double cf2 = -x[icf2]; + G4double cf0Alt = q[icf0] - lqu[var] - x[icf0]; + + if (unlikely(cf2 == 0 || (1000 * std::fabs(cf2)) < std::fabs(cf1))) + { + if (cf1 == 0) { + mpr = Qss_misc::INF; + } else + { + mpr = -cf0 / cf1; + mpr2 = -cf0Alt / cf1; + if (mpr < 0 || (mpr2 > 0 && mpr2 < mpr)) { mpr = mpr2; } + } + + if (mpr < 0) { mpr = Qss_misc::INF; } + } + else + { + static G4ThreadLocal unsigned long long okCalls=0LL, badCalls= 0LL; + constexpr G4double dangerZone = 1.0e+30; + static G4ThreadLocal G4double bigCf1_pr = dangerZone, + bigCf2_pr = dangerZone; + static G4ThreadLocal G4double bigCf1 = 0.0, bigCf2 = 0.0; + if( std::abs(cf1) > dangerZone || std::fabs(cf2) > dangerZone ) + { + badCalls++; + if( badCalls == 1 + || ( badCalls < 1000 && badCalls % 20 == 0 ) + || ( 1000 < badCalls && badCalls < 10000 && badCalls % 100 == 0 ) + || ( 10000 < badCalls && badCalls < 100000 && badCalls % 1000 == 0 ) + || ( 100000 < badCalls && badCalls % 10000 == 0 ) + || ( std::fabs(cf1) > 1.5 * bigCf1_pr || std::fabs(cf2) > 1.5 * bigCf2_pr ) + ) + { + std::cout << " cf1 = " << std::setw(15) << cf1 << " cf2= " << std::setw(15) << cf2 + << " badCall # " << badCalls << " of " << badCalls + okCalls + << " fraction = " << double(badCalls) / double(badCalls+okCalls); + + if( std::fabs(cf1) > 1.5 * bigCf1_pr ) { bigCf1_pr = std::fabs(cf1); std::cout << " Bigger cf1 "; } + if( std::fabs(cf2) > 1.5 * bigCf2_pr ) { bigCf2_pr = std::fabs(cf2); std::cout << " Bigger cf2 "; } + std::cout << std::endl; + } + if( std::fabs(cf1) > 1.5 * bigCf1 ) { bigCf1 = std::fabs(cf1); } + if( std::fabs(cf2) > 1.5 * bigCf2 ) { bigCf2 = std::fabs(cf2); } + } + else + { + okCalls++; + } + +#ifdef REPORT_CRITICAL_PROBLEM + constexpr unsigned int exp_limit= 140; + constexpr G4double limit= 1.0e+140; // std::pow(10,exp_limit)); + assert( std::fabs( std::pow(10, exp_limit) - limit ) < 1.0e-14*limit ); + G4bool bad_cf2fac= G4Log(std::fabs(cf2)) + + G4Log(std::max( std::fabs(cf0), std::fabs(cf0Alt))) > 2*limit; + if( std::fabs(cf1) > limit + || G4Log(std::fabs(cf2)) + + G4Log(std::max( std::fabs(cf0), std::fabs(cf0Alt))) > 2*exp_limit ) + { + G4ExceptionDescription ermsg; + ermsg << "QSS2: Coefficients exceed tolerable values -- beyond " << limit << G4endl; + if( std::fabs(cf1) > limit ) + { + ermsg << " |cf1| = " << cf1 << " is > " << limit << " (limit)"; + } + if( bad_cf2fac) + { + ermsg << " bad cf2-factor: cf2 = " << cf2 + << " product is > " << 2*limit << " (limit)"; + } + G4Exception("QSS2::recompute_next_times", + "Field/Qss2-", FatalException, ermsg ); + } +#endif + G4double cf1_2 = cf1 * cf1; + G4double cf2_4 = 4 * cf2; + G4double disc1 = cf1_2 - cf2_4 * cf0; + G4double disc2 = cf1_2 - cf2_4 * cf0Alt; + G4double cf2_d2 = 2 * cf2; + + if (unlikely(disc1 < 0 && disc2 < 0)) // no real roots + { + mpr = Qss_misc::INF; + } + else if (disc2 < 0) + { + G4double sd, r1; + sd = std::sqrt(disc1); + r1 = (-cf1 + sd) / cf2_d2; + if (r1 > 0) { + mpr = r1; + } else { + mpr = Qss_misc::INF; + } + r1 = (-cf1 - sd) / cf2_d2; + if ((r1 > 0) && (r1 < mpr)) { mpr = r1; } + } + else if (disc1 < 0) + { + G4double sd, r1; + sd = std::sqrt(disc2); + r1 = (-cf1 + sd) / cf2_d2; + if (r1 > 0) { + mpr = r1; + } else { + mpr = Qss_misc::INF; + } + r1 = (-cf1 - sd) / cf2_d2; + if ((r1 > 0) && (r1 < mpr)) { mpr = r1; } + } + else + { + G4double sd1, r1, sd2, r2; + sd1 = std::sqrt(disc1); + sd2 = std::sqrt(disc2); + r1 = (-cf1 + sd1) / cf2_d2; + r2 = (-cf1 + sd2) / cf2_d2; + if (r1 > 0) { mpr = r1; } + else { mpr = Qss_misc::INF; } + r1 = (-cf1 - sd1) / cf2_d2; + if ((r1 > 0) && (r1 < mpr)) { mpr = r1; } + if (r2 > 0 && r2 < mpr) { mpr = r2; } + r2 = (-cf1 - sd2) / cf2_d2; + if ((r2 > 0) && (r2 < mpr)) { mpr = r2; } + } + } + time[var] += mpr; + } + } + } + + inline void recompute_all_state_times(G4double t) + { + G4double mpr; + G4double* const x = simulator->x; + G4double* const lqu = simulator->lqu; + G4double* const time = simulator->nextStateTime; + + for (G4int var = 0, icf0 = 0; var < 6; var++, icf0 += 3) + { + const G4int icf1 = icf0 + 1; + + if (x[icf1] == 0) + { + time[var] = Qss_misc::INF; + } + else + { + mpr = lqu[var] / x[icf1]; + if (mpr < 0) { mpr *= -1; } + time[var] = t + mpr; + } + } + } + + inline void next_time(G4int var, G4double t) + { + const G4int cf2 = var * 3 + 2; + G4double* const x = simulator->x; + G4double* const lqu = simulator->lqu; + G4double* const time = simulator->nextStateTime; + + if (x[cf2] != 0.0) { + time[var] = t + std::sqrt(lqu[var] / std::fabs(x[cf2])); + } else { + time[var] = Qss_misc::INF; + } + } + + inline void update_quantized_state(G4int i) + { + const G4int cf0 = i * 3, cf1 = cf0 + 1; + G4double* const q = simulator->q; + G4double* const x = simulator->x; + + q[cf0] = x[cf0]; + q[cf1] = x[cf1]; + } + + inline void reset_state(G4int i, G4double value) + { + G4double* const x = simulator->x; + G4double* const q = simulator->q; + G4double* const tq = simulator->tq; + G4double* const tx = simulator->tx; + const G4int idx = 3 * i; + + x[idx] = value; + + simulator->lqu[i] = simulator->dQRel[i] * std::fabs(value); + if (simulator->lqu[i] < simulator->dQMin[i]) + { + simulator->lqu[i] = simulator->dQMin[i]; + } + + q[idx] = value; + q[idx + 1] = tq[i] = tx[i] = 0; + } + + inline G4double evaluate_x_poly(G4int i, G4double dt, G4double* p) + { + return (p[i + 2] * dt + p[i + 1]) * dt + p[i]; + } + + inline void advance_time_q(G4int i, G4double dt) // __attribute__((hot)) + { + G4double* const p = simulator->q; + p[i] = p[i] + dt * p[i + 1]; + } + + inline void advance_time_x(G4int i, G4double dt) // __attribute__((hot)) + { + G4double* const p = simulator->x; + const G4int i0 = i, i1 = i0 + 1, i2 = i1 + 1; + p[i0] = (p[i2] * dt + p[i1]) * dt + p[i0]; + p[i1] = p[i1] + 2 * dt * p[i2]; + } + + private: + + QSS_simulator simulator; +}; + +#endif diff --git a/source/geometry/magneticfield/include/G4QSS3.hh b/source/geometry/magneticfield/include/G4QSS3.hh new file mode 100644 index 00000000000..35221a35c3b --- /dev/null +++ b/source/geometry/magneticfield/include/G4QSS3.hh @@ -0,0 +1,671 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// G4QSS3 +// +// G4QSS3 simulator + +// Authors: Lucio Santi, Rodrigo Castro - 2018-2021 +// -------------------------------------------------------------------- +#ifndef _G4QSS3_H_ +#define _G4QSS3_H_ + +#include "G4Types.hh" +#include "G4qss_misc.hh" + +#include + +class G4QSS3 +{ + public: + + G4QSS3(QSS_simulator); + + inline QSS_simulator getSimulator() const { return this->simulator; } + + inline G4int order() const { return 3; } + + inline void full_definition(G4double coeff) + { + G4double* const x = simulator->q; + G4double* const dx = simulator->x; + G4double* const alg = simulator->alg; + + dx[1] = x[12]; + dx[2] = 0; + dx[3] = 0; + + dx[5] = x[16]; + dx[6] = 0; + dx[7] = 0; + + dx[9] = x[20]; + dx[10] = 0; + dx[11] = 0; + + dx[13] = coeff * (alg[2] * x[16] - alg[1] * x[20]); + dx[14] = 0; + dx[15] = 0; + + dx[17] = coeff * (alg[0] * x[20] - alg[2] * x[12]); + dx[18] = 0; + dx[19] = 0; + + dx[21] = coeff * (alg[1] * x[12] - alg[0] * x[16]); + dx[22] = 0; + dx[23] = 0; + } + + inline void dependencies(G4int i, G4double coeff) + { + G4double* const x = simulator->q; + G4double* const der = simulator->x; + G4double* const alg = simulator->alg; + + switch (i) + { + case 0: + der[13] = coeff * (alg[2] * x[16] - alg[1] * x[20]); + der[14] = ((alg[2] * x[17] - x[21] * alg[1]) * coeff) / 2; + der[15] = (coeff * (alg[2] * x[18] - x[22] * alg[1])) / 3; + + der[17] = coeff * (alg[0] * x[20] - alg[2] * x[12]); + der[18] = ((alg[0] * x[21] - alg[2] * x[13]) * coeff) / 2; + der[19] = (coeff * (alg[0] * x[22] - alg[2] * x[14])) / 3; + + der[21] = coeff * (alg[1] * x[12] - alg[0] * x[16]); + der[22] = (coeff * (x[13] * alg[1] - alg[0] * x[17])) / 2; + der[23] = (coeff * (alg[1] * x[14] - x[18] * alg[0])) / 3; + return; + case 1: + der[13] = coeff * (alg[2] * x[16] - alg[1] * x[20]); + der[14] = ((alg[2] * x[17] - x[21] * alg[1]) * coeff) / 2; + der[15] = (coeff * (alg[2] * x[18] - x[22] * alg[1])) / 3; + + der[17] = coeff * (alg[0] * x[20] - alg[2] * x[12]); + der[18] = ((alg[0] * x[21] - alg[2] * x[13]) * coeff) / 2; + der[19] = (coeff * (alg[0] * x[22] - alg[2] * x[14])) / 3; + + der[21] = coeff * (alg[1] * x[12] - alg[0] * x[16]); + der[22] = (coeff * (x[13] * alg[1] - alg[0] * x[17])) / 2; + der[23] = (coeff * (alg[1] * x[14] - x[18] * alg[0])) / 3; + return; + case 2: + der[13] = coeff * (alg[2] * x[16] - alg[1] * x[20]); + der[14] = ((alg[2] * x[17] - x[21] * alg[1]) * coeff) / 2; + der[15] = (coeff * (alg[2] * x[18] - x[22] * alg[1])) / 3; + + der[17] = coeff * (alg[0] * x[20] - alg[2] * x[12]); + der[18] = ((alg[0] * x[21] - alg[2] * x[13]) * coeff) / 2; + der[19] = (coeff * (alg[0] * x[22] - alg[2] * x[14])) / 3; + + der[21] = coeff * (alg[1] * x[12] - alg[0] * x[16]); + der[22] = (coeff * (x[13] * alg[1] - alg[0] * x[17])) / 2; + der[23] = (coeff * (alg[1] * x[14] - x[18] * alg[0])) / 3; + return; + case 3: + der[1] = x[12]; + der[2] = x[13] / 2; + der[3] = x[14] / 3; + + der[17] = coeff * (alg[0] * x[20] - alg[2] * x[12]); + der[18] = ((alg[0] * x[21] - alg[2] * x[13]) * coeff) / 2; + der[19] = (coeff * (alg[0] * x[22] - alg[2] * x[14])) / 3; + + der[21] = coeff * (alg[1] * x[12] - alg[0] * x[16]); + der[22] = (coeff * (x[13] * alg[1] - alg[0] * x[17])) / 2; + der[23] = (coeff * (alg[1] * x[14] - x[18] * alg[0])) / 3; + return; + case 4: + der[5] = x[16]; + der[6] = x[17] / 2; + der[7] = x[18] / 3; + + der[13] = coeff * (alg[2] * x[16] - alg[1] * x[20]); + der[14] = ((alg[2] * x[17] - x[21] * alg[1]) * coeff) / 2; + der[15] = (coeff * (alg[2] * x[18] - x[22] * alg[1])) / 3; + + der[21] = coeff * (alg[1] * x[12] - alg[0] * x[16]); + der[22] = (coeff * (x[13] * alg[1] - alg[0] * x[17])) / 2; + der[23] = (coeff * (alg[1] * x[14] - x[18] * alg[0])) / 3; + return; + case 5: + der[9] = x[20]; + der[10] = x[21] / 2; + der[11] = x[22] / 3; + + der[13] = coeff * (alg[2] * x[16] - alg[1] * x[20]); + der[14] = ((alg[2] * x[17] - x[21] * alg[1]) * coeff) / 2; + der[15] = (coeff * (alg[2] * x[18] - x[22] * alg[1])) / 3; + + der[17] = coeff * (alg[0] * x[20] - alg[2] * x[12]); + der[18] = ((alg[0] * x[21] - alg[2] * x[13]) * coeff) / 2; + der[19] = (coeff * (alg[0] * x[22] - alg[2] * x[14])) / 3; + return; + } + } + + void recompute_next_times(G4int* inf, G4double t); // __attribute__((hot)); + + inline void recompute_all_state_times(G4double t) + { + G4double mpr; + G4double* const x = simulator->x; + G4double* const lqu = simulator->lqu; + G4double* const time = simulator->nextStateTime; + + for (G4int var = 0, icf0 = 0; var < 6; var++, icf0 += 4) + { + const G4int icf1 = icf0 + 1; + + if (x[icf1] == 0) + { + time[var] = Qss_misc::INF; + } + else + { + mpr = lqu[var] / x[icf1]; + if (mpr < 0) { mpr *= -1; } + time[var] = t + mpr; + } + } + } + + inline void next_time(G4int i, G4double t) + { + const G4int cf3 = 4 * i + 3; + G4double* const x = simulator->x; + G4double* const lqu = simulator->lqu; + G4double* const time = simulator->nextStateTime; + + if (likely(x[cf3])) { + time[i] = t + std::cbrt(lqu[i] / std::fabs(x[cf3])); + } else { + time[i] = Qss_misc::INF; + } + } + + inline void update_quantized_state(G4int i) + { + const G4int cf0 = i * 4, cf1 = cf0 + 1, cf2 = cf1 + 1; + G4double* const q = simulator->q; + G4double* const x = simulator->x; + + q[cf0] = x[cf0]; + q[cf1] = x[cf1]; + q[cf2] = x[cf2]; + } + + inline void reset_state(G4int i, G4double value) + { + G4double* const x = simulator->x; + G4double* const q = simulator->q; + G4double* const tq = simulator->tq; + G4double* const tx = simulator->tx; + const G4int idx = 4 * i; + + x[idx] = value; + + simulator->lqu[i] = simulator->dQRel[i] * std::fabs(value); + if (simulator->lqu[i] < simulator->dQMin[i]) + { + simulator->lqu[i] = simulator->dQMin[i]; + } + q[idx] = value; + q[idx + 1] = q[idx + 2] = tq[i] = tx[i] = 0; + } + + inline G4double evaluate_x_poly(G4int i, G4double dt, G4double* p) + { + return ((p[i + 3] * dt + p[i + 2]) * dt + p[i + 1]) * dt + p[i]; + } + + inline void advance_time_q(G4int i, G4double dt) // __attribute__((hot)) + { + G4double* const p = simulator->q; + const G4int i0 = i, i1 = i0 + 1, i2 = i1 + 1; + p[i0] = (p[i2] * dt + p[i1]) * dt + p[i0]; + p[i1] = p[i1] + 2 * dt * p[i2]; + } + + inline void advance_time_x(G4int i, G4double dt) // __attribute__((hot)) + { + G4double* const p = simulator->x; + const G4int i0 = i, i1 = i0 + 1, i2 = i1 + 1, i3 = i2 + 1; + p[i0] = ((p[i3] * dt + p[i2]) * dt + p[i1]) * dt + p[i0]; + p[i1] = (3 * p[i3] * dt + 2 * p[i2]) * dt + p[i1]; + p[i2] = p[i2] + 3 * dt * p[i3]; + } + + G4double min_pos_root(G4double* coeff, G4int order); + + inline G4double min_pos_root_2(G4double* coeff) + { + G4double mpr = Qss_misc::INF; + + if (coeff[2] == 0 || (1000 * std::fabs(coeff[2])) < std::fabs(coeff[1])) + { + if (coeff[1] == 0) { + mpr = Qss_misc::INF; + } else { + mpr = -coeff[0] / coeff[1]; + } + + if (mpr < 0) { mpr = Qss_misc::INF; } + } + else + { + G4double disc; + disc = coeff[1] * coeff[1] - 4 * coeff[2] * coeff[0]; + if (disc < 0) // no real roots + { + mpr = Qss_misc::INF; + } + else + { + G4double sd, r1; + G4double cf2_d2 = 2 * coeff[2]; + + sd = std::sqrt(disc); + r1 = (-coeff[1] + sd) / cf2_d2; + if (r1 > 0) { + mpr = r1; + } else { + mpr = Qss_misc::INF; + } + r1 = (-coeff[1] - sd) / cf2_d2; + if ((r1 > 0) && (r1 < mpr)) { mpr = r1; } + } + } + + return mpr; + } // __attribute__((hot)) + + inline G4double min_pos_root_3(G4double* coeff) + { + G4double mpr = Qss_misc::INF; + static const G4double sqrt3 = std::sqrt(3); + + if ((coeff[3] == 0) || (1000 * std::fabs(coeff[3]) < std::fabs(coeff[2]))) + { + mpr = min_pos_root_2(coeff); + } + else if (coeff[0] == 0) + { + if (coeff[1] == 0) + { + mpr = -coeff[2] / coeff[3]; + } + else + { + coeff[0] = coeff[1]; + coeff[1] = coeff[2]; + coeff[2] = coeff[3]; + mpr = min_pos_root_2(coeff); + } + } + else + { + G4double q, r, disc, q3; + G4double val = coeff[2] / 3 / coeff[3]; + G4double cf32 = coeff[3] * coeff[3]; + G4double cf22 = coeff[2] * coeff[2]; + G4double denq = 9 * cf32; + G4double denr = 6 * coeff[3] * denq; + G4double rcomm = 9 * coeff[3] * coeff[2] * coeff[1] - 2 * cf22 * coeff[2]; + + q = (3 * coeff[3] * coeff[1] - cf22) / denq; + q3 = q * q * q; + + r = (rcomm - 27 * cf32 * coeff[0]) / denr; + disc = q3 + r * r; + mpr = Qss_misc::INF; + + if (disc >= 0) + { + G4double sd, sx, t, r1, rsd; + sd = std::sqrt(disc); + rsd = r + sd; + if (rsd > 0) { + sx = std::cbrt(rsd); + } else { + sx = -std::cbrt(std::fabs(rsd)); + } + + rsd = r - sd; + if (rsd > 0) { + t = std::cbrt(rsd); + } else { + t = -std::cbrt(std::fabs(rsd)); + } + + r1 = sx + t - val; + + if (r1 > 0) { mpr = r1; } + } + else + { + // three real roots + G4double rho, th, rho13, costh3, sinth3, spt, smti32, r1; + rho = std::sqrt(-q3); + th = std::acos(r / rho); + rho13 = std::cbrt(rho); + costh3 = std::cos(th / 3); + sinth3 = std::sin(th / 3); + spt = rho13 * 2 * costh3; + smti32 = -rho13 * sinth3 * sqrt3; + r1 = spt - val; + if (r1 > 0) { mpr = r1; } + r1 = -spt / 2 - val + smti32; + if ((r1 > 0) && (r1 < mpr)) { mpr = r1; } + r1 = r1 - 2 * smti32; + if ((r1 > 0) && (r1 < mpr)) { mpr = r1; } + } + } + + return mpr; + } // __attribute__((hot)) + + inline G4double min_pos_root_2_alt(G4double* coeff, G4double cf0Alt) + { + G4double mpr = Qss_misc::INF; + G4double mpr2; + + if (coeff[2] == 0 || (1000 * std::fabs(coeff[2])) < std::fabs(coeff[1])) + { + if (coeff[1] == 0) + { + mpr = Qss_misc::INF; + } + else + { + mpr = -coeff[0] / coeff[1]; + mpr2 = -cf0Alt / coeff[1]; + if (mpr < 0 || (mpr2 > 0 && mpr2 < mpr)) { mpr = mpr2; } + } + + if (mpr < 0) { mpr = Qss_misc::INF; } + } + else + { + G4double cf1_2 = coeff[1] * coeff[1]; + G4double cf2_4 = 4 * coeff[2]; + G4double disc1 = cf1_2 - cf2_4 * coeff[0]; + G4double disc2 = cf1_2 - cf2_4 * cf0Alt; + G4double cf2_d2 = 2 * coeff[2]; + + if (unlikely(disc1 < 0 && disc2 < 0)) + { + mpr = Qss_misc::INF; + } + else if (disc2 < 0) + { + G4double sd, r1; + sd = std::sqrt(disc1); + r1 = (-coeff[1] + sd) / cf2_d2; + if (r1 > 0) { + mpr = r1; + } else { + mpr = Qss_misc::INF; + } + r1 = (-coeff[1] - sd) / cf2_d2; + if ((r1 > 0) && (r1 < mpr)) { mpr = r1; } + } + else if (disc1 < 0) + { + G4double sd, r1; + sd = std::sqrt(disc2); + r1 = (-coeff[1] + sd) / cf2_d2; + if (r1 > 0) { + mpr = r1; + } else { + mpr = Qss_misc::INF; + } + r1 = (-coeff[1] - sd) / cf2_d2; + if ((r1 > 0) && (r1 < mpr)) { mpr = r1; } + } + else + { + G4double sd1, r1, sd2, r2; + sd1 = std::sqrt(disc1); + sd2 = std::sqrt(disc2); + r1 = (-coeff[1] + sd1) / cf2_d2; + r2 = (-coeff[1] + sd2) / cf2_d2; + + if (r1 > 0) { + mpr = r1; + } else { + mpr = Qss_misc::INF; + } + r1 = (-coeff[1] - sd1) / cf2_d2; + if ((r1 > 0) && (r1 < mpr)) { mpr = r1; } + + if (r2 > 0 && r2 < mpr) { mpr = r2; } + r2 = (-coeff[1] - sd2) / cf2_d2; + if ((r2 > 0) && (r2 < mpr)) { mpr = r2; } + } + } + + return mpr; + } // __attribute__((hot)) + + inline G4double min_pos_root_3_alt(G4double* coeff, G4double cf0Alt) + { + G4double mpr = Qss_misc::INF; + static const G4double sqrt3 = std::sqrt(3); + + if ((coeff[3] == 0) || (1000 * std::fabs(coeff[3]) < std::fabs(coeff[2]))) + { + mpr = min_pos_root_2_alt(coeff, cf0Alt); + } + else if (coeff[0] == 0) + { + G4double mpr2; + coeff[0] = cf0Alt; + mpr = min_pos_root_3(coeff); + + if (coeff[1] == 0) + { + mpr2 = -coeff[2] / coeff[3]; + } + else + { + coeff[0] = coeff[1]; + coeff[1] = coeff[2]; + coeff[2] = coeff[3]; + mpr2 = min_pos_root_2(coeff); + } + + if (mpr2 > 0 && mpr2 < mpr) { mpr = mpr2; } + } + else if (cf0Alt == 0) + { + G4double mpr2; + mpr = min_pos_root_3(coeff); + + if (coeff[1] == 0) + { + mpr2 = -coeff[2] / coeff[3]; + } + else + { + coeff[0] = coeff[1]; + coeff[1] = coeff[2]; + coeff[2] = coeff[3]; + mpr2 = min_pos_root_2(coeff); + } + + if (mpr2 > 0 && mpr2 < mpr) { mpr = mpr2; } + } + else + { + G4double q, r, rAlt, disc, discAlt, q3; + G4double val = coeff[2] / 3 / coeff[3]; + G4double cf32 = coeff[3] * coeff[3]; + G4double cf22 = coeff[2] * coeff[2]; + G4double denq = 9 * cf32; + G4double denr = 6 * coeff[3] * denq; + G4double rcomm = 9 * coeff[3] * coeff[2] * coeff[1] - 2 * cf22 * coeff[2]; + + q = (3 * coeff[3] * coeff[1] - cf22) / denq; + q3 = q * q * q; + + r = (rcomm - 27 * cf32 * coeff[0]) / denr; + rAlt = (rcomm - 27 * cf32 * cf0Alt) / denr; + + disc = q3 + r * r; + discAlt = q3 + rAlt * rAlt; + mpr = Qss_misc::INF; + + if (disc >= 0) + { + G4double sd, sx, t, r1, rsd; + sd = std::sqrt(disc); + rsd = r + sd; + if (rsd > 0) { + sx = std::cbrt(rsd); + } else { + sx = -std::cbrt(std::fabs(rsd)); + } + + rsd = r - sd; + if (rsd > 0) { + t = std::cbrt(rsd); + } else { + t = -std::cbrt(std::fabs(rsd)); + } + + r1 = sx + t - val; + + if (r1 > 0) { mpr = r1; } + + if (discAlt >= 0) + { + G4double sdAlt, sAlt, tAlt, r1Alt, rsdAlt; + sdAlt = std::sqrt(discAlt); + rsdAlt = rAlt + sdAlt; + if (rsdAlt > 0) { + sAlt = std::cbrt(rsdAlt); + } else { + sAlt = -std::cbrt(std::fabs(rsdAlt)); + } + + rsdAlt = rAlt - sdAlt; + if (rsdAlt > 0) { + tAlt = std::cbrt(rsdAlt); + } else { + tAlt = -std::cbrt(std::fabs(rsdAlt)); + } + + r1Alt = sAlt + tAlt - val; + + if (r1Alt > 0 && r1Alt < mpr) { mpr = r1Alt; } + } + else + { + G4double rho, th, rho13, costh3, sinth3, spt, smti32, r1Alt; + + rho = std::sqrt(-q3); + th = std::acos(rAlt / rho); + rho13 = std::cbrt(rho); + costh3 = std::cos(th / 3); + sinth3 = std::sin(th / 3); + spt = rho13 * 2 * costh3; + smti32 = -rho13 * sinth3 * sqrt3; + r1Alt = spt - val; + if (r1Alt > 0 && r1Alt < mpr) { mpr = r1Alt; } + r1Alt = -spt / 2 - val + smti32; + if (r1Alt > 0 && r1Alt < mpr) { mpr = r1Alt; } + r1Alt = r1Alt - 2 * smti32; + if (r1Alt > 0 && r1Alt < mpr) { mpr = r1Alt; } + } + } + else + { + G4double rho, th, rho13, costh3, sinth3, spt, smti32, r1; + + rho = std::sqrt(-q3); + th = std::acos(r / rho); + rho13 = std::cbrt(rho); + costh3 = std::cos(th / 3); + sinth3 = std::sin(th / 3); + spt = rho13 * 2 * costh3; + smti32 = -rho13 * sinth3 * sqrt3; + r1 = spt - val; + if (r1 > 0) { mpr = r1; } + r1 = -spt / 2 - val + smti32; + if ((r1 > 0) && (r1 < mpr)) { mpr = r1; } + r1 = r1 - 2 * smti32; + if ((r1 > 0) && (r1 < mpr)) { mpr = r1; } + + if (discAlt >= 0) + { + G4double sdAlt, sAlt, tAlt, r1Alt, rsdAlt; + sdAlt = std::sqrt(discAlt); + rsdAlt = rAlt + sdAlt; + if (rsdAlt > 0) { + sAlt = std::cbrt(rsdAlt); + } else { + sAlt = -std::cbrt(std::fabs(rsdAlt)); + } + + rsdAlt = rAlt - sdAlt; + if (rsdAlt > 0) { + tAlt = std::cbrt(rsdAlt); + } else { + tAlt = -std::cbrt(std::fabs(rsdAlt)); + } + + r1Alt = sAlt + tAlt - val; + + if (r1Alt > 0 && r1Alt < mpr) { mpr = r1Alt; } + } + else + { + G4double thAlt, costh3Alt, sinth3Alt, sptAlt, smti32Alt, r1Alt; + thAlt = std::acos(rAlt / rho); + costh3Alt = std::cos(thAlt / 3); + sinth3Alt = std::sin(thAlt / 3); + sptAlt = rho13 * 2 * costh3Alt; + smti32Alt = -rho13 * sinth3Alt * sqrt3; + r1Alt = sptAlt - val; + if (r1Alt > 0 && r1Alt < mpr) { mpr = r1Alt; } + r1Alt = -sptAlt / 2 - val + smti32Alt; + if (r1Alt > 0 && r1Alt < mpr) { mpr = r1Alt; } + r1Alt = r1Alt - 2 * smti32Alt; + if (r1Alt > 0 && r1Alt < mpr) { mpr = r1Alt; } + } + } + } + + return mpr; + } + + private: + + QSS_simulator simulator; +}; + +#endif diff --git a/source/geometry/magneticfield/include/G4QSSDriver.hh b/source/geometry/magneticfield/include/G4QSSDriver.hh new file mode 100644 index 00000000000..fc09bd9b5fe --- /dev/null +++ b/source/geometry/magneticfield/include/G4QSSDriver.hh @@ -0,0 +1,85 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// G4QSSDriver +// +// QSS Interpolator Driver + +// Authors: Lucio Santi, Rodrigo Castro - 2018-2021 +// -------------------------------------------------------------------- +#ifndef G4QSSDriver_HH +#define G4QSSDriver_HH + +#include "G4InterpolationDriver.hh" +#include "G4QSSMessenger.hh" + +template +class G4QSSDriver : public G4InterpolationDriver +{ + public: + + G4QSSDriver(T* stepper); + + // Hacky way of getting and setting precision parameters + // from messenger on first run + void OnStartTracking() override; + + G4QSSDriver(const G4QSSDriver&) = delete; + const G4QSSDriver& operator=(const G4QSSDriver&) = delete; + + G4double AdvanceChordLimited(G4FieldTrack& track, + G4double hstep, + G4double eps, + G4double chordDistance) override; + + void OnComputeStep(const G4FieldTrack* track) override + { + Base::OnComputeStep(track); + for (const auto& item : this->fSteppers) { item.stepper->reset(track); } +#ifdef GEANT4_DUMP_STEPPER_STATS + this->GetStepper()->stats.steps++; +#endif + } + + void SetPrecision(G4double dq_rel, G4double dq_min); + + G4double OneGoodStep(typename G4InterpolationDriver::StepperIterator it, + field_utils::State& y, + field_utils::State& dydx, + G4double& hstep, + G4double epsStep, + G4double curveLength, + G4FieldTrack* track) override; + + private: + + using Base = G4InterpolationDriver; + + G4bool initializedOnFirstRun = false; +}; + +#include "G4QSSDriver.icc" + +#endif diff --git a/source/geometry/magneticfield/include/G4QSSDriver.icc b/source/geometry/magneticfield/include/G4QSSDriver.icc new file mode 100644 index 00000000000..392e6744c46 --- /dev/null +++ b/source/geometry/magneticfield/include/G4QSSDriver.icc @@ -0,0 +1,173 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// -------------------------------------------------------------------- + +template +G4QSSDriver::G4QSSDriver(T* pStepper) : G4InterpolationDriver(0, pStepper) +{ + // TODO: Remove additional stepper instances - should be a separate Driver class + this->fSteppers.resize(1); +} + +template +void G4QSSDriver::OnStartTracking() +{ + Base::OnStartTracking(); + if (! initializedOnFirstRun) { + // this->SetPrecision( G4QSSMessenger::instance()->dQRel, G4QSSMessenger::instance()->dQMin); + + G4double dqRel = G4QSSMessenger::instance()->dQRel; + G4double dQMin = G4QSSMessenger::instance()->dQMin; + if (dqRel == 0) { + dqRel = 0.001; + } + if (dQMin == 0) { + dQMin = 0.0001; + } + this->SetPrecision(dqRel, dQMin); + + initializedOnFirstRun = true; + } +} + +template +void G4QSSDriver::SetPrecision(G4double dq_rel, G4double dq_min) +{ + G4cout << "Setting QSS precision parameters: " + << "dQRel = " << dq_rel << " - " + << "dQMin = " << dq_min << G4endl; + + for (const auto& item : this->fSteppers) { + item.stepper->SetPrecision(dq_rel, dq_min); + } +} + +template +G4double G4QSSDriver::AdvanceChordLimited( + G4FieldTrack& track, G4double hstep, G4double epsStep, G4double chordDistance) +{ + // For now, just extract functionality that we don't use from G4InterpolationDriver + // We should probably end up making a custom G4QSSDriver separated from it + ++this->fTotalStepsForTrack; + + // SetPrecision(10*epsStep, epsStep); // Propagate the required accuracy to QSS + + const G4double curveLengthBegin = track.GetCurveLength(); + const G4double hend = std::min(hstep, this->fChordStepEstimate); + G4double hdid = 0.0; + auto it = this->fSteppers.begin(); + G4double dChordStep = 0.0; + + field_utils::State yBegin, y; + track.DumpToArray(yBegin); + track.DumpToArray(y); + + if (this->fFirstStep) { + Base::GetEquationOfMotion()->RightHandSide(y, this->fdydx); + this->fFirstStep = false; + } + + if (this->fKeepLastStepper) { + std::swap(*this->fSteppers.begin(), *this->fLastStepper); + it = this->fSteppers.begin(); // new begin, update iterator + this->fLastStepper = it; + hdid = it->end - curveLengthBegin; + if (hdid > hend) { + hdid = hend; + this->InterpolateImpl(curveLengthBegin + hdid, it, y); + } + else { + field_utils::copy(y, it->stepper->GetYOut()); + } + + dChordStep = this->DistChord(yBegin, curveLengthBegin, y, curveLengthBegin + hdid); + + ++it; + } + + // accurate advance & check chord distance + G4double h = this->fhnext; + for (; hdid < hend && dChordStep < chordDistance && it != this->fSteppers.end(); ++it) { + h = hstep; // h = std::min(h, hstep - hdid); <--- Omit + + // make one step + hdid += OneGoodStep(it, y, this->fdydx, h, epsStep, curveLengthBegin + hdid, &track); + + // update last stepper + this->fLastStepper = it; + + G4double dcTmp = this->DistChord(yBegin, curveLengthBegin, y, curveLengthBegin + hdid); + // estimate chord distance + dChordStep = std::max(dChordStep, dcTmp); + // this->DistChord(yBegin, curveLengthBegin, y, curveLengthBegin + hdid) ); + + // std::cout << "QSSdrv: h= " << h << " hdid= " << hdid << " dcTmp= " << dcTmp << " dChord= " + // << dChordStep << std::endl; + } + + // Now, either + // - full integration ( hdid >= hend ) + // - estimated chord has exceeded limit 'chordDistance' + // - reached maximum number of steps (from number of steppers.) + + // update step estimation + if (h > this->fMinimumStep) { + this->fhnext = h; + } + + // CheckState(); + + // update chord step estimate + // + hdid = this->FindNextChord( + yBegin, curveLengthBegin, y, curveLengthBegin + hdid, dChordStep, chordDistance); + + const G4double curveLengthEnd = curveLengthBegin + hdid; + this->fKeepLastStepper = this->fLastStepper->end - curveLengthEnd > CLHEP::perMillion; + track.LoadFromArray(y, this->fLastStepper->stepper->GetNumberOfVariables()); + track.SetCurveLength(curveLengthBegin + hdid); + + return hdid; +} + +template +G4double G4QSSDriver::OneGoodStep(typename G4InterpolationDriver::StepperIterator it, + field_utils::State& y, field_utils::State& dydx, G4double& hstep, G4double /*epsStep*/, + G4double curveLength, G4FieldTrack* /*track*/) +{ + G4double yerr[G4FieldTrack::ncompSVEC], ytemp[G4FieldTrack::ncompSVEC]; + G4double h = hstep; + it->stepper->Stepper(y, dydx, h, ytemp, yerr); + + // set interpolation inverval + it->begin = curveLength; + it->end = curveLength + h; + it->inverseLength = 1. / h; + + field_utils::copy(y, ytemp); + + return h; +} diff --git a/source/geometry/magneticfield/include/G4QSSDriverCreator.hh b/source/geometry/magneticfield/include/G4QSSDriverCreator.hh new file mode 100644 index 00000000000..2cf6cc09150 --- /dev/null +++ b/source/geometry/magneticfield/include/G4QSSDriverCreator.hh @@ -0,0 +1,64 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// G4QSSDriverCreator +// +// QSS driver creator + +// Author: J.Apostolakis - October 2021 +// ------------------------------------------------------------------- +#ifndef QSS_DriverCreator_HH +#define QSS_DriverCreator_HH + +#include "G4QSStepper.hh" +#include "G4QSSDriver.hh" + +class G4Mag_EqRhs; +class G4QSS2; +class G4QSS3; + +class G4QSSDriverCreator +{ + public: + + static G4VIntegrationDriver* CreateDriver( G4MagIntegratorStepper* pStepper, + G4double /*stepMinimum*/ ); + + static G4QSSDriver>* + CreateDriver( G4QSStepper* qss2stepper ); + + static G4QSSDriver>* + CreateDriver( G4QSStepper* qss3stepper ); + + static G4QSStepper* CreateQss2Stepper(G4Mag_EqRhs* Equation); + + static G4QSStepper* CreateQss3Stepper(G4Mag_EqRhs* Equation); + + static G4VIntegrationDriver* CreateQss2Driver(G4Mag_EqRhs* Equation); + + static G4VIntegrationDriver* CreateQss3Driver(G4Mag_EqRhs* Equation); +}; + +#endif diff --git a/source/run/src/G4UserWorkerInitialization.cc b/source/geometry/magneticfield/include/G4QSSMessenger.hh similarity index 53% rename from source/run/src/G4UserWorkerInitialization.cc rename to source/geometry/magneticfield/include/G4QSSMessenger.hh index 3e9bb19aafd..118e1f624cf 100644 --- a/source/run/src/G4UserWorkerInitialization.cc +++ b/source/geometry/magneticfield/include/G4QSSMessenger.hh @@ -23,30 +23,63 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// G4UserWorkerInitialization implementation +// G4QSSMessenger // -// Author: A.Dotti (SLAC), 25 February 2013 +// Messenger for QSS Integrator driver + +// Author: Leandro Gomez Vidal - October 2021 // -------------------------------------------------------------------- +#ifndef GEANT4_G4QSSMessenger_H +#define GEANT4_G4QSSMessenger_H -#include "G4UserWorkerInitialization.hh" +#include "G4UIcmdWithABool.hh" +#include "G4UIcmdWithADouble.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcmdWithAString.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIcmdWithoutParameter.hh" +#include "G4UIdirectory.hh" +#include "G4UImessenger.hh" -// -------------------------------------------------------------------- -G4UserWorkerInitialization::G4UserWorkerInitialization() { ; } +class G4QSSMessenger : public G4UImessenger +{ + public: -// -------------------------------------------------------------------- -G4UserWorkerInitialization::~G4UserWorkerInitialization() { ; } + G4QSSMessenger(); + ~G4QSSMessenger() override; -// -------------------------------------------------------------------- -void G4UserWorkerInitialization::WorkerInitialize() const { ; } + void SetNewValue(G4UIcommand* command, G4String newValues) override; -// -------------------------------------------------------------------- -void G4UserWorkerInitialization::WorkerStart() const { ; } + /* Hacky - much easier to access G4QSSMessenger from G4QSSDriver than the other way around + * Multithreading seems to cause weird stuff with Driver/Stepper instances, maybe making + * some thread-local copies or something, outside of construction? */ -// -------------------------------------------------------------------- -void G4UserWorkerInitialization::WorkerRunStart() const { ; } + static G4QSSMessenger* instance(); -// -------------------------------------------------------------------- -void G4UserWorkerInitialization::WorkerRunEnd() const { ; } + enum StepperSelection + { + None = 0, + TemplatedDoPri, + OldRK45, + G4QSS2 + }; + void selectStepper(const std::string&); + StepperSelection selectedStepper(); -// -------------------------------------------------------------------- -void G4UserWorkerInitialization::WorkerStop() const { ; } + public: + + G4double dQMin = 0; + G4double dQRel = 0; + G4double trialProposedStepModifier = 1.0; + + private: + + StepperSelection _selectedStepper; + G4UIdirectory* qssCmdDir; + G4UIcmdWithADoubleAndUnit* dQMinCmd; + G4UIcmdWithADouble* dQRelCmd; + G4UIcmdWithAString* stepperSelectorCmd; + G4UIcmdWithADouble* trialProposedStepModifierCmd; +}; + +#endif // GEANT4_G4QSSMessenger_H diff --git a/source/geometry/magneticfield/include/G4QSS_CustomStats.hh b/source/geometry/magneticfield/include/G4QSS_CustomStats.hh new file mode 100644 index 00000000000..b0389a7ccab --- /dev/null +++ b/source/geometry/magneticfield/include/G4QSS_CustomStats.hh @@ -0,0 +1,128 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// QSSStats +// +// QSS statistics + +// Authors: Lucio Santi, Rodrigo Castro - 2018-2021 +// -------------------------------------------------------------------- +#ifndef _QSS_CUSTOM_STATS_HH_ +#define _QSS_CUSTOM_STATS_HH_ + +#include + +#define GET_TIME(t0) (clock_gettime(CLOCK_MONOTONIC, &t0)) +#define TIME_SECS(t0, t1) ((t1.tv_sec - t0.tv_sec) + (t1.tv_nsec - t0.tv_nsec) / 1e9) + +// #define INTERPOLATE_ITERATIONS 1e2 +// #define ESTIMATE_ITERATIONS 2 +// #define ON_COMPUTE_STEP_ITERATIONS 20 +// #define ON_COMPUTE_STEP_ITERATIONS_G4 2e3 + +#include "G4qss_misc.hh" +#include "G4Types.hh" + +#include + +struct QSSStats +{ + G4double precision_dQMin; + G4double precision_dQRel; + G4int currentStep; + G4int substeps; + std::atomic stepperSteps; + std::map> substepsByStepNumberByTrackID; + + G4double reset_time; + G4double integration_time; + + G4int dqrel_changes[Qss_misc::VAR_IDX_END]; + G4int dqmin_changes[Qss_misc::VAR_IDX_END]; + G4double max_error[Qss_misc::VAR_IDX_END]; + + QSSStats() + { + substeps = 0; + reset_time = 0; + integration_time = 0; + + for (size_t i = 0; i < Qss_misc::VAR_IDX_END; i++) { + dqrel_changes[i] = 0; + dqmin_changes[i] = 0; + max_error[i] = 0; + } + }; + + void print() const + { + G4int steps = stepperSteps.load(); + + std::vector vars{"x", "y", "z", "vx", "vy", "vz"}; + + G4double avg_substeps = (G4double)substeps / steps; + G4double avg_integration_time = (G4double)integration_time / steps; + G4double avg_substeps_integration_time = (G4double)integration_time / substeps; + G4double avg_reset_time = (G4double)reset_time / steps; + + std::stringstream ss; + + ss << "QSS stats:" << std::endl; + ss << "dQMin: " << precision_dQMin << std::endl; + ss << "dQRel: " << precision_dQRel << std::endl; + + ss << " Total steps: " << steps << std::endl + << " Total substeps: " << substeps << std::endl + << " Substeps average per step: " << avg_substeps << std::endl; + + ss << " Substeps by track-step:" << std::endl; + for (auto it = substepsByStepNumberByTrackID.begin(); it != substepsByStepNumberByTrackID.end(); + ++it) + { + ss << " Track #" << it->first << std::endl; + for (auto it2 = it->second.begin(); it2 != it->second.end(); ++it2) { + ss << " Step " << it2->first << " => " << it2->second << " substeps" << std::endl; + } + } + + ss << " Integration time: " << integration_time << std::endl + << " Integration time average (step): " << avg_integration_time << std::endl + << " Integration time average (substep): " << avg_substeps_integration_time << std::endl; + + ss << " Reset time: " << reset_time << std::endl + << " Reset time average: " << avg_reset_time << std::endl; + + for (G4int index = 0; index < Qss_misc::VAR_IDX_END; index++) { + ss << " Variable " << vars[index] << ":" << std::endl; + ss << " dQRel changes: " << dqrel_changes[index] << std::endl; + ss << " dQMin changes: " << dqmin_changes[index] << std::endl; + ss << " Max error: " << max_error[index] << std::endl; + } + + std::cout << ss.rdbuf(); + }; +}; + +#endif diff --git a/source/geometry/magneticfield/include/G4QSStepper.hh b/source/geometry/magneticfield/include/G4QSStepper.hh new file mode 100644 index 00000000000..efced7bc671 --- /dev/null +++ b/source/geometry/magneticfield/include/G4QSStepper.hh @@ -0,0 +1,586 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// G4QSStepper +// +// QSS Integrator Stepper + +// Authors: Lucio Santi, Rodrigo Castro - 2018-2021. +// -------------------------------------------------------------------- +#ifndef QSS_Stepper_HH +#define QSS_Stepper_HH + +#include "G4FieldTrack.hh" +#include "G4FieldUtils.hh" +#include "G4LineSection.hh" +#include "G4MagIntegratorStepper.hh" +#include "G4QSS2.hh" +#include "G4QSS3.hh" +#include "G4QSSDriver.hh" +#include "G4QSSMessenger.hh" +#include "G4VIntegrationDriver.hh" +#include "G4qss_misc.hh" + +#include +#include + +template +class G4QSStepper : public G4MagIntegratorStepper +{ + public: + + G4QSStepper(G4EquationOfMotion* EqRhs, + G4int numberOfVariables = 6, + G4bool primary = true); + ~G4QSStepper() override; + + void Stepper(const G4double y[], + const G4double dydx[], + G4double h, + G4double yout[], + G4double yerr[]) override; + + void Stepper(const G4double yInput[], + const G4double dydx[], + G4double hstep, + G4double yOutput[], + G4double yError[], + G4double dydxOutput[]); + + // For calculating the output at the tau fraction of Step + // + inline void SetupInterpolation() {} + inline void Interpolate(G4double tau, G4double yOut[]); + + G4double DistChord() const override; + + G4int IntegratorOrder() const override { return method->order(); } + + void reset(const G4FieldTrack* track); + + void SetPrecision(G4double dq_rel, G4double dq_min); + // precision parameters for QSS method + + static G4QSStepper* build_QSS2(G4EquationOfMotion* EqRhs, + G4int numberOfVariables = 6, + G4bool primary = true); + + static G4QSStepper* build_QSS3(G4EquationOfMotion* EqRhs, + G4int numberOfVariables = 6, + G4bool primary = true); + + inline G4EquationOfMotion* GetSpecificEquation() { return GetEquationOfMotion(); } + + inline const field_utils::State& GetYOut() const { return fyOut; } + + private: + + G4QSStepper(QSS* method, + G4EquationOfMotion* EqRhs, + G4int numberOfVariables = 6, + G4bool primary = true); + + void initialize_data_structs(); + static QSS_simulator build_simulator(); + + inline void update_field(); + inline void save_substep(G4double time, G4double length); + + inline void realloc_substeps(); + inline void get_state_from_poly(G4double* x, G4double* tx, + G4double time, G4double* state); + + inline void recompute_derivatives(int index); + inline void update_time(); + + inline G4double get_coeff() { return fCoeff_local; } + + inline void set_coeff(G4double coeff) { fCoeff_local = coeff; } + + inline void set_charge(G4double q) + { + f_charge_c2 = q * cLight_local * cLight_local; // 89875.5178737; + } + + inline G4double get_qc2() { return f_charge_c2; } + + inline void set_mg() { fMassGamma = f_mass * fGamma2; } + + inline void set_gamma2(G4double gamma2) { fGamma2 = gamma2; } + inline void set_velocity(G4double v) { fVelocity = v; } + + inline void velocity_to_momentum(G4double* state); + + inline void set_gamma(G4double p_sq) + { + set_gamma2(std::sqrt(p_sq / (f_mass * f_mass) + 1)); + set_mg(); + set_coeff(get_qc2() / fMassGamma); + } + + private: + + QSS_simulator simulator; + QSS* method; + + // State + // + G4double fLastStepLength; + field_utils::State fyIn, fyOut; + + G4double f_mass; + static constexpr G4double cLight_local = 299.792458; // should use CLHEP + G4double f_charge_c2; + G4double fMassGamma; + G4double fGamma2; + G4double fCoeff_local; + G4double fVelocity; +}; + +using G4QSStepper_QSS2 = G4QSStepper; +using G4QSStepper_QSS3 = G4QSStepper; + +template +inline G4QSStepper::G4QSStepper(QSS* qss, G4EquationOfMotion* EqRhs, + G4int noIntegrationVariables, G4bool) + : G4MagIntegratorStepper(EqRhs, noIntegrationVariables), + simulator(qss->getSimulator()), + method(qss) +{ + SetIsQSS(true); // Replaces virtual method IsQSS + fLastStepLength = -1.0; + + f_mass = 0; + f_charge_c2 = 0; + fMassGamma = 0; + fGamma2 = 0; + fCoeff_local = 0; + fVelocity = 0; + + this->initialize_data_structs(); + this->SetPrecision(1e-4, 1e-7); // Default values +} + +template +inline G4QSStepper::~G4QSStepper() +{ + for (auto & i : simulator->SD) { free(i); } + + free(SUBSTEPS(this->simulator)); + free(this->simulator); +} + +template +inline void G4QSStepper::Stepper(const G4double yInput[], + const G4double dydx[], + G4double hstep, + G4double yOutput[], + G4double yError[], + G4double /*dydxOutput*/[]) +{ + Stepper(yInput, dydx, hstep, yOutput, yError); +} + +template +inline void G4QSStepper::update_time() +{ + auto* const sim = this->simulator; + + sim->time = sim->nextStateTime[0]; + sim->minIndex = 0; + + if (sim->nextStateTime[1] < sim->time) { + sim->time = sim->nextStateTime[1]; + sim->minIndex = 1; + } + if (sim->nextStateTime[2] < sim->time) { + sim->time = sim->nextStateTime[2]; + sim->minIndex = 2; + } + if (sim->nextStateTime[3] < sim->time) { + sim->time = sim->nextStateTime[3]; + sim->minIndex = 3; + } + if (sim->nextStateTime[4] < sim->time) { + sim->time = sim->nextStateTime[4]; + sim->minIndex = 4; + } + if (sim->nextStateTime[5] < sim->time) { + sim->time = sim->nextStateTime[5]; + sim->minIndex = 5; + } +} + +template +inline void G4QSStepper::Stepper(const G4double yInput[], + const G4double /*DyDx*/[], + G4double max_length, + G4double yOut[], + G4double[] /*yErr[]*/) +{ + G4double elapsed; + G4double t, prev_time = 0; + G4double length = 0.; + G4int index; + + const G4int coeffs = method->order() + 1; + G4double* tq = simulator->tq; + G4double* tx = simulator->tx; + G4double* dQRel = simulator->dQRel; + G4double* dQMin = simulator->dQMin; + G4double* lqu = simulator->lqu; + G4double* x = simulator->x; + G4int** SD = simulator->SD; + G4int cf0, infCf0; + + CUR_SUBSTEP(simulator) = 0; + + this->save_substep(0, length); + + this->update_time(); + t = simulator->time; + index = simulator->minIndex; + + while (length < max_length && t < Qss_misc::INF) { + cf0 = index * coeffs; + elapsed = t - tx[index]; + method->advance_time_x(cf0, elapsed); + tx[index] = t; + lqu[index] = dQRel[index] * std::fabs(x[cf0]); + if (lqu[index] < dQMin[index]) { + lqu[index] = dQMin[index]; + } + method->update_quantized_state(index); + tq[index] = t; + method->next_time(index, t); + for (G4int i = 0; i < 3; i++) { + G4int j = SD[index][i]; + elapsed = t - tx[j]; + infCf0 = j * coeffs; + if (elapsed > 0) { + x[infCf0] = method->evaluate_x_poly(infCf0, elapsed, x); + tx[j] = t; + } + } + + this->update_field(); + this->recompute_derivatives(index); + method->recompute_next_times(SD[index], t); + + if (t > prev_time) { + length += fVelocity * (t - prev_time); + if (length <= max_length) { this->save_substep(t, length); } + else { break; } + } + + this->update_time(); + prev_time = t; + t = simulator->time; + index = simulator->minIndex; + } + + auto* const substep = &LAST_SUBSTEP_STRUCT(simulator); + t = substep->start_time + (max_length - substep->len) / fVelocity; + + this->get_state_from_poly(substep->x, substep->tx, t, yOut); + + velocity_to_momentum(yOut); + + const G4int numberOfVariables = GetNumberOfVariables(); + for (G4int i = 0; i < numberOfVariables; ++i) { + // Store Input and Final values, for possible use in calculating chord + fyIn[i] = yInput[i]; + fyOut[i] = yOut[i]; + } + + fLastStepLength = max_length; +} + +template +inline G4double G4QSStepper::DistChord() const +{ + G4double yMid[6]; + const_cast*>(this)->Interpolate(0.5, yMid); + + const G4ThreeVector begin = makeVector(fyIn, field_utils::Value3D::Position); + const G4ThreeVector end = makeVector(fyOut, field_utils::Value3D::Position); + const G4ThreeVector mid = makeVector(yMid, field_utils::Value3D::Position); + + return G4LineSection::Distline(mid, begin, end); +} + +template +inline void G4QSStepper::Interpolate(G4double tau, G4double yOut[]) +{ + G4double length = tau * fLastStepLength; + G4int idx = 0, j = LAST_SUBSTEP(simulator); + G4double end_time; + + if (j >= 15) { + G4int i = 0, k = j; + idx = j >> 1; + while (idx < k && i < j - 1) { + if (length < SUBSTEP_LEN(simulator, idx)) { + j = idx; + } else if (length >= SUBSTEP_LEN(simulator, idx + 1)) { + i = idx; + } else { + break; + } + + idx = (i + j) >> 1; + } + } + else { + for (; idx < j && length >= SUBSTEP_LEN(simulator, idx + 1); idx++) {;} + } + + auto* const substep = &SUBSTEP_STRUCT(simulator, idx); + end_time = substep->start_time + (length - substep->len) / fVelocity; + + this->get_state_from_poly(substep->x, substep->tx, end_time, yOut); + + velocity_to_momentum(yOut); +} + +template +inline void G4QSStepper::reset(const G4FieldTrack* track) +{ + using Qss_misc::PXidx; + using Qss_misc::PYidx; + using Qss_misc::PZidx; + using Qss_misc::VXidx; + using Qss_misc::VYidx; + using Qss_misc::VZidx; + + G4ThreeVector pos = track->GetPosition(); + G4ThreeVector momentum = track->GetMomentum(); + + f_mass = track->GetRestMass(); + set_charge(track->GetCharge()); + set_gamma(momentum.mag2()); + G4double c_mg = cLight_local / fMassGamma; + set_velocity(momentum.mag() * c_mg); + + method->reset_state(PXidx, pos.getX()); + method->reset_state(PYidx, pos.getY()); + method->reset_state(PZidx, pos.getZ()); + + method->reset_state(VXidx, momentum.getX() * c_mg); + method->reset_state(VYidx, momentum.getY() * c_mg); + method->reset_state(VZidx, momentum.getZ() * c_mg); + + this->update_field(); + method->full_definition(get_coeff()); + + // TODO + method->recompute_all_state_times(0); + + simulator->time = 0; +} + +template +inline void G4QSStepper::SetPrecision(G4double dq_rel, G4double dq_min) +{ + G4double* dQMin = simulator->dQMin; + G4double* dQRel = simulator->dQRel; + // G4double* x = simulator->x; + G4double* lqu = simulator->lqu; + G4int n_vars = simulator->states; + // G4int coeffs = method->order() + 1; + G4int i; + + if (dq_min <= 0) { dq_min = dq_rel * 1e-3; +} + + for (i = 0; i < n_vars; ++i) { + dQRel[i] = dq_rel; + dQMin[i] = dq_min; + + // lqu[i] = dQRel[i] * fabs(x[i * coeffs]); // x[i*coeffs] not always initialised!! + // if (lqu[i] < dq_min ) lqu[i] = dq_min; + lqu[i]= dq_min; + } +} + +template +inline void G4QSStepper::initialize_data_structs() +{ + auto sim = this->simulator; + auto states = (G4int*)calloc(Qss_misc::VAR_IDX_END, sizeof(G4int)); + + sim->states = Qss_misc::VAR_IDX_END; + sim->it = 0.; + + for (unsigned int i = 0; i < Qss_misc::VAR_IDX_END; i++) { + sim->SD[i] = (G4int*)malloc(3 * sizeof(G4int)); + } + + sim->SD[0][states[0]++] = 3; + sim->SD[0][states[0]++] = 4; + sim->SD[0][states[0]++] = 5; + + sim->SD[1][states[1]++] = 3; + sim->SD[1][states[1]++] = 4; + sim->SD[1][states[1]++] = 5; + + sim->SD[2][states[2]++] = 3; + sim->SD[2][states[2]++] = 4; + sim->SD[2][states[2]++] = 5; + + sim->SD[3][states[3]++] = 0; + sim->SD[3][states[3]++] = 4; + sim->SD[3][states[3]++] = 5; + + sim->SD[4][states[4]++] = 1; + sim->SD[4][states[4]++] = 3; + sim->SD[4][states[4]++] = 5; + + sim->SD[5][states[5]++] = 2; + sim->SD[5][states[5]++] = 3; + sim->SD[5][states[5]++] = 4; + + free(states); +} + +template +inline QSS_simulator G4QSStepper::build_simulator() +{ + QSS_simulator sim = (QSS_simulator)malloc(sizeof(*sim)); + MAX_SUBSTEP(sim) = Qss_misc::MIN_SUBSTEPS; + SUBSTEPS(sim) = (QSSSubstep)malloc(Qss_misc::MIN_SUBSTEPS * sizeof(*SUBSTEPS(sim))); + return sim; +} + +template +inline void G4QSStepper::recompute_derivatives(G4int index) +{ + const G4int coeffs = method->order() + 1; + G4double e; + G4int idx = 0; + + e = simulator->time - simulator->tq[0]; + if (likely(e > 0)) { method->advance_time_q(idx, e); } + simulator->tq[0] = simulator->time; + + idx += coeffs; + e = simulator->time - simulator->tq[1]; + if (likely(e > 0)) { method->advance_time_q(idx, e); } + simulator->tq[1] = simulator->time; + + idx += coeffs; + e = simulator->time - simulator->tq[2]; + if (likely(e > 0)) { method->advance_time_q(idx, e); } + simulator->tq[2] = simulator->time; + + idx += coeffs; + e = simulator->time - simulator->tq[3]; + if (likely(e > 0)) { method->advance_time_q(idx, e); } + simulator->tq[3] = simulator->time; + + idx += coeffs; + e = simulator->time - simulator->tq[4]; + if (likely(e > 0)) { method->advance_time_q(idx, e); } + simulator->tq[4] = simulator->time; + + idx += coeffs; + e = simulator->time - simulator->tq[5]; + if (likely(e > 0)) { method->advance_time_q(idx, e); } + simulator->tq[5] = simulator->time; + + method->dependencies(index, get_coeff()); +} + +template +inline void G4QSStepper::update_field() +{ + using Qss_misc::PXidx; + using Qss_misc::PYidx; + using Qss_misc::PZidx; + + const G4int order1 = method->order() + 1; + G4double* const _field = simulator->alg; + G4double* const _point = _field + order1; + + _point[PXidx] = simulator->x[PXidx]; + _point[PYidx] = simulator->x[PYidx * order1]; + _point[PZidx] = simulator->x[PZidx * order1]; + + this->GetEquationOfMotion()->GetFieldValue(_point, _field); +} + +template +inline void G4QSStepper::save_substep(G4double time, G4double length) +{ + memcpy(CUR_SUBSTEP_X(simulator), simulator->x, + (Qss_misc::VAR_IDX_END * (Qss_misc::MAX_QSS_STEPPER_ORDER + 2)) * sizeof(G4double)); + + CUR_SUBSTEP_START(simulator) = time; + CUR_SUBSTEP_LEN(simulator) = length; + CUR_SUBSTEP(simulator)++; + + if (unlikely(CUR_SUBSTEP(simulator) == MAX_SUBSTEP(simulator))) { + this->realloc_substeps(); + } +} + +template +inline void G4QSStepper::realloc_substeps() +{ + const G4int prev_index = MAX_SUBSTEP(simulator), new_index = 2 * prev_index; + + MAX_SUBSTEP(simulator) = new_index; + SUBSTEPS(simulator) = + (QSSSubstep)realloc(SUBSTEPS(simulator), new_index * sizeof(*SUBSTEPS(simulator))); +} + +template +inline void G4QSStepper::get_state_from_poly( + G4double* x, G4double* tx, G4double time, G4double* state) +{ + unsigned int coeff_index = 0, i; + const unsigned int x_order = method->order(), x_order1 = x_order + 1; + + for (i = 0; i < Qss_misc::VAR_IDX_END; ++i) { + assert(tx[i] <= time); + state[i] = method->evaluate_x_poly(coeff_index, time - tx[i], x); + coeff_index += x_order1; + } +} + +template +inline void G4QSStepper::velocity_to_momentum(G4double* state) +{ + using Qss_misc::VXidx; + using Qss_misc::VYidx; + using Qss_misc::VZidx; + G4double coeff = fMassGamma / cLight_local; + + state[VXidx] *= coeff; + state[VYidx] *= coeff; + state[VZidx] *= coeff; +} + +#endif diff --git a/source/geometry/magneticfield/include/G4QuadrupoleMagField.hh b/source/geometry/magneticfield/include/G4QuadrupoleMagField.hh index 62c348dc4f8..4d9b379623d 100644 --- a/source/geometry/magneticfield/include/G4QuadrupoleMagField.hh +++ b/source/geometry/magneticfield/include/G4QuadrupoleMagField.hh @@ -47,17 +47,17 @@ class G4QuadrupoleMagField : public G4MagneticField { - public: // with description + public: - G4QuadrupoleMagField(G4double pGradient); - G4QuadrupoleMagField(G4double pGradient, - G4ThreeVector pOrigin, - G4RotationMatrix* pMatrix); - ~G4QuadrupoleMagField(); + G4QuadrupoleMagField(G4double pGradient); + G4QuadrupoleMagField( G4double pGradient, + const G4ThreeVector& pOrigin, + G4RotationMatrix* pMatrix); + ~G4QuadrupoleMagField() override; void GetFieldValue(const G4double yTrack[], - G4double B[] ) const; - G4Field* Clone() const; + G4double B[] ) const override; + G4Field* Clone() const override; private: @@ -67,4 +67,3 @@ class G4QuadrupoleMagField : public G4MagneticField }; #endif - diff --git a/source/geometry/magneticfield/include/G4RK547FEq1.hh b/source/geometry/magneticfield/include/G4RK547FEq1.hh index ac442cd6fdd..b5b5029869d 100644 --- a/source/geometry/magneticfield/include/G4RK547FEq1.hh +++ b/source/geometry/magneticfield/include/G4RK547FEq1.hh @@ -50,11 +50,11 @@ class G4RK547FEq1 : public G4MagIntegratorStepper G4RK547FEq1(const G4RK547FEq1&) = delete; G4RK547FEq1& operator= (const G4RK547FEq1&) = delete; - virtual void Stepper( const G4double yInput[], - const G4double dydx[], - G4double hstep, - G4double yOutput[], - G4double yError[] ) override; + void Stepper( const G4double yInput[], + const G4double dydx[], + G4double hstep, + G4double yOutput[], + G4double yError[] ) override; void Stepper( const G4double yInput[], const G4double dydx[], @@ -63,8 +63,8 @@ class G4RK547FEq1 : public G4MagIntegratorStepper G4double yError[], G4double dydxOutput[] ); - virtual G4double DistChord() const override; - virtual G4int IntegratorOrder() const override { return 4; } + G4double DistChord() const override; + G4int IntegratorOrder() const override { return 4; } private: diff --git a/source/geometry/magneticfield/include/G4RK547FEq2.hh b/source/geometry/magneticfield/include/G4RK547FEq2.hh index 215203adafc..8037ec484b6 100644 --- a/source/geometry/magneticfield/include/G4RK547FEq2.hh +++ b/source/geometry/magneticfield/include/G4RK547FEq2.hh @@ -50,11 +50,11 @@ class G4RK547FEq2 : public G4MagIntegratorStepper G4RK547FEq2 (const G4RK547FEq2&) = delete; G4RK547FEq2& operator = (const G4RK547FEq2&) = delete; - virtual void Stepper( const G4double yInput[], - const G4double dydx[], - G4double hstep, - G4double yOutput[], - G4double yError[] ) override; + void Stepper( const G4double yInput[], + const G4double dydx[], + G4double hstep, + G4double yOutput[], + G4double yError[] ) override; void Stepper( const G4double yInput[], const G4double dydx[], @@ -63,8 +63,8 @@ class G4RK547FEq2 : public G4MagIntegratorStepper G4double yError[], G4double dydxOutput[] ); - virtual G4double DistChord() const override; - virtual G4int IntegratorOrder() const override { return 4; } + G4double DistChord() const override; + G4int IntegratorOrder() const override { return 4; } private: diff --git a/source/geometry/magneticfield/include/G4RK547FEq3.hh b/source/geometry/magneticfield/include/G4RK547FEq3.hh index 13037fe7652..98f6e978396 100644 --- a/source/geometry/magneticfield/include/G4RK547FEq3.hh +++ b/source/geometry/magneticfield/include/G4RK547FEq3.hh @@ -50,11 +50,11 @@ class G4RK547FEq3 : public G4MagIntegratorStepper G4RK547FEq3(const G4RK547FEq3&) = delete; G4RK547FEq3& operator = (const G4RK547FEq3&) = delete; - virtual void Stepper( const G4double yInput[], - const G4double dydx[], - G4double hstep, - G4double yOutput[], - G4double yError[] ) override; + void Stepper( const G4double yInput[], + const G4double dydx[], + G4double hstep, + G4double yOutput[], + G4double yError[] ) override; void Stepper( const G4double yInput[], const G4double dydx[], @@ -63,8 +63,8 @@ class G4RK547FEq3 : public G4MagIntegratorStepper G4double yError[], G4double dydxOutput[] ); - virtual G4double DistChord() const override; - virtual G4int IntegratorOrder() const override { return 4; } + G4double DistChord() const override; + G4int IntegratorOrder() const override { return 4; } private: diff --git a/source/geometry/magneticfield/include/G4RKG3_Stepper.hh b/source/geometry/magneticfield/include/G4RKG3_Stepper.hh index 0ce999844e4..4efe95a06c1 100644 --- a/source/geometry/magneticfield/include/G4RKG3_Stepper.hh +++ b/source/geometry/magneticfield/include/G4RKG3_Stepper.hh @@ -42,22 +42,22 @@ class G4Mag_EqRhs; class G4RKG3_Stepper : public G4MagIntegratorStepper { - public: // with description + public: G4RKG3_Stepper(G4Mag_EqRhs* EqRhs); // Integrate over 6 variables only: position & velocity. // Not implemented yet ! - ~G4RKG3_Stepper(); + ~G4RKG3_Stepper() override; void Stepper( const G4double yIn[], const G4double dydx[], G4double h, G4double yOut[], - G4double yErr[] ); + G4double yErr[] ) override; // The method which must be provided, even if less efficient. - G4double DistChord() const ; + G4double DistChord() const override ; void StepNoErr( const G4double tIn[8], const G4double dydx[6], @@ -83,9 +83,7 @@ class G4RKG3_Stepper : public G4MagIntegratorStepper // B1[3] is input and is the first magnetic field values // B2[3] is output and is the final magnetic field values. - public: // without description - - inline G4int IntegratorOrder() const { return 4; } + inline G4int IntegratorOrder() const override { return 4; } private: diff --git a/source/geometry/magneticfield/include/G4RKIntegrationDriver.hh b/source/geometry/magneticfield/include/G4RKIntegrationDriver.hh index 27805350956..160884c3d3f 100644 --- a/source/geometry/magneticfield/include/G4RKIntegrationDriver.hh +++ b/source/geometry/magneticfield/include/G4RKIntegrationDriver.hh @@ -47,33 +47,33 @@ class G4RKIntegrationDriver : public G4VIntegrationDriver G4RKIntegrationDriver(const G4RKIntegrationDriver&) = delete; G4RKIntegrationDriver& operator=(const G4RKIntegrationDriver&) = delete; - virtual void GetDerivatives(const G4FieldTrack& track, - G4double dydx[]) const override; + void GetDerivatives(const G4FieldTrack& track, + G4double dydx[]) const override; - virtual void GetDerivatives(const G4FieldTrack& track, - G4double dydx[], - G4double field[]) const override; + void GetDerivatives(const G4FieldTrack& track, + G4double dydx[], + G4double field[]) const override; - virtual G4double ComputeNewStepSize(G4double errMaxNorm, // normalised error - G4double hstepCurrent) override final; + G4double ComputeNewStepSize(G4double errMaxNorm, // normalised error + G4double hstepCurrent) final; // Taking the last step's normalised error, calculate // a step size for the next step. // - Limits the next step's size within a factor of the current one. - virtual G4EquationOfMotion* GetEquationOfMotion() override; - virtual void SetEquationOfMotion(G4EquationOfMotion* equation) override; + G4EquationOfMotion* GetEquationOfMotion() override; + void SetEquationOfMotion(G4EquationOfMotion* equation) override; - virtual const T* GetStepper() const override; - virtual T* GetStepper() override; + const T* GetStepper() const override; + T* GetStepper() override; - virtual void StreamInfo( std::ostream& os ) const override; + void StreamInfo( std::ostream& os ) const override; // Accessors. G4double GetSafety() const; G4double GetPshrnk() const; G4double GetPgrow() const; - virtual void RenewStepperAndAdjust(G4MagIntegratorStepper* stepper) override; + void RenewStepperAndAdjust(G4MagIntegratorStepper* stepper) override; void ReSetParameters(G4double safety = 0.9); void SetSafety(G4double valS); diff --git a/source/geometry/magneticfield/include/G4RKIntegrationDriver.icc b/source/geometry/magneticfield/include/G4RKIntegrationDriver.icc index aa80a5dd62a..cbb22d6025a 100644 --- a/source/geometry/magneticfield/include/G4RKIntegrationDriver.icc +++ b/source/geometry/magneticfield/include/G4RKIntegrationDriver.icc @@ -91,7 +91,7 @@ ComputeNewStepSize( G4double errMaxNorm, // max error (normalised) { return ShrinkStepSize(hstepCurrent, errMaxNorm); } - else if (errMaxNorm >= 0) + if (errMaxNorm >= 0) { return GrowStepSize(hstepCurrent, errMaxNorm); } diff --git a/source/geometry/magneticfield/include/G4RepleteEofM.hh b/source/geometry/magneticfield/include/G4RepleteEofM.hh index 6a02bab0fe1..3a9e3ac6877 100644 --- a/source/geometry/magneticfield/include/G4RepleteEofM.hh +++ b/source/geometry/magneticfield/include/G4RepleteEofM.hh @@ -43,18 +43,18 @@ class G4Field; class G4RepleteEofM : public G4EquationOfMotion { - public: // with description + public: G4RepleteEofM(G4Field*, G4int nvar = 8); - ~G4RepleteEofM(); + ~G4RepleteEofM() override; void SetChargeMomentumMass(G4ChargeState particleCharge, // in e+ units G4double MomentumXc, - G4double mass); + G4double mass) override; void EvaluateRhsGivenB(const G4double y[], const G4double Field[], - G4double dydx[] ) const; + G4double dydx[] ) const override; // Given the value of the field, this function // calculates the value of the derivative dydx. diff --git a/source/geometry/magneticfield/include/G4SextupoleMagField.hh b/source/geometry/magneticfield/include/G4SextupoleMagField.hh index c771b58cff9..628651735b2 100644 --- a/source/geometry/magneticfield/include/G4SextupoleMagField.hh +++ b/source/geometry/magneticfield/include/G4SextupoleMagField.hh @@ -31,10 +31,9 @@ // Bx = B[0] = fGradient*X*Y, // By = B[1] = fGradient*(X*X-Y*Y)/2, // Bz = B[2] = 0 -// -// created by H. Burkhardt 23/10/2019 -// ------------------------------------------------------------------- +// Author: H. Burkhardt - 23/10/2019 +// ------------------------------------------------------------------- #ifndef G4SEXTUPOLEMAGFIELD_HH #define G4SEXTUPOLEMAGFIELD_HH @@ -44,22 +43,22 @@ class G4SextupoleMagField : public G4MagneticField { -public: + public: - G4SextupoleMagField(G4double pGradient); + G4SextupoleMagField(G4double pGradient); + G4SextupoleMagField( G4double pGradient, + const G4ThreeVector& pOrigin, + G4RotationMatrix* pMatrix); + ~G4SextupoleMagField() override; - G4SextupoleMagField(G4double pGradient, - G4ThreeVector pOrigin, - G4RotationMatrix* pMatrix); - ~G4SextupoleMagField(); + void GetFieldValue(const G4double yTrack[], G4double B[] ) const override; + G4Field* Clone() const override; - void GetFieldValue(const G4double yTrack[], G4double B[] ) const; - G4Field* Clone() const; + private: -private: - - G4double fGradient = 0.0; - G4ThreeVector fOrigin = G4ThreeVector(0.0, 0.0, 0.0); - G4RotationMatrix* fpMatrix = nullptr; + G4double fGradient = 0.0; + G4ThreeVector fOrigin = G4ThreeVector(0.0, 0.0, 0.0); + G4RotationMatrix* fpMatrix = nullptr; }; + #endif diff --git a/source/geometry/magneticfield/include/G4SimpleHeum.hh b/source/geometry/magneticfield/include/G4SimpleHeum.hh index 0b516d2e0fb..db634cdbb56 100644 --- a/source/geometry/magneticfield/include/G4SimpleHeum.hh +++ b/source/geometry/magneticfield/include/G4SimpleHeum.hh @@ -43,21 +43,18 @@ class G4SimpleHeum : public G4MagErrorStepper { - - public: // with description + public: G4SimpleHeum(G4EquationOfMotion* EqRhs, G4int num_variables = 6); - ~G4SimpleHeum(); + ~G4SimpleHeum() override; // Constructor and destructor. void DumbStepper( const G4double y[], const G4double dydx[], G4double h, - G4double yout[] ); - - public: // without description + G4double yout[] ) override; - inline G4int IntegratorOrder() const { return 3; } + inline G4int IntegratorOrder() const override { return 3; } private: @@ -67,7 +64,6 @@ class G4SimpleHeum : public G4MagErrorStepper G4double* dydxTemp2 = nullptr; G4double* yTemp = nullptr; G4double* yTemp2 = nullptr; - // scratch space }; #endif diff --git a/source/geometry/magneticfield/include/G4SimpleRunge.hh b/source/geometry/magneticfield/include/G4SimpleRunge.hh index caee266a79c..1438e49db55 100644 --- a/source/geometry/magneticfield/include/G4SimpleRunge.hh +++ b/source/geometry/magneticfield/include/G4SimpleRunge.hh @@ -44,21 +44,18 @@ class G4SimpleRunge : public G4MagErrorStepper { + public: - public: // with description - - G4SimpleRunge(G4EquationOfMotion* EquationRhs, G4int numberOfVariables = 6) ; - ~G4SimpleRunge(); + G4SimpleRunge(G4EquationOfMotion* EquationRhs, G4int numberOfVariables = 6); + ~G4SimpleRunge() override; // Constructor and destructor. void DumbStepper( const G4double y[], const G4double dydx[], G4double h, - G4double yout[] ); + G4double yout[] ) override; - public: // without description - - inline G4int IntegratorOrder() const { return 2; } + inline G4int IntegratorOrder() const override { return 2; } private: @@ -66,7 +63,6 @@ class G4SimpleRunge : public G4MagErrorStepper G4double* dydxTemp = nullptr; G4double* yTemp = nullptr; - // scratch space }; #endif diff --git a/source/geometry/magneticfield/include/G4TDormandPrince45.hh b/source/geometry/magneticfield/include/G4TDormandPrince45.hh index 5dd9360dbbc..36bb71dcecf 100644 --- a/source/geometry/magneticfield/include/G4TDormandPrince45.hh +++ b/source/geometry/magneticfield/include/G4TDormandPrince45.hh @@ -40,9 +40,12 @@ #ifndef G4TDORMAND_PRINCE_45_HH #define G4TDORMAND_PRINCE_45_HH -#include #include "G4MagIntegratorStepper.hh" #include "G4FieldUtils.hh" +#include "G4LineSection.hh" + +#include +#include template class G4TDormandPrince45 : public G4MagIntegratorStepper @@ -52,40 +55,38 @@ class G4TDormandPrince45 : public G4MagIntegratorStepper G4TDormandPrince45(T_Equation* equation ); G4TDormandPrince45(T_Equation* equation, G4int numVar ); // must have numVar == N - inline void - StepWithError(const G4double yInput[], - const G4double dydx[], - G4double hstep, - G4double yOutput[], - G4double yError[] ) ; + inline void StepWithError(const G4double yInput[], + const G4double dydx[], + G4double hstep, + G4double yOutput[], + G4double yError[] ) ; - virtual void Stepper(const G4double yInput[], - const G4double dydx[], - G4double hstep, - G4double yOutput[], - G4double yError[]) override final; - - inline - void StepWithFinalDerivate(const G4double yInput[], - const G4double dydx[], - G4double hstep, - G4double yOutput[], - G4double yError[], - G4double dydxOutput[]); + void Stepper(const G4double yInput[], + const G4double dydx[], + G4double hstep, + G4double yOutput[], + G4double yError[]) final; + + inline void StepWithFinalDerivate(const G4double yInput[], + const G4double dydx[], + G4double hstep, + G4double yOutput[], + G4double yError[], + G4double dydxOutput[]); inline void SetupInterpolation() {} void Interpolate(G4double tau, G4double yOut[]) const { - Interpolate4thOrder(yOut, tau); + Interpolate4thOrder(yOut, tau); } // For calculating the output at the tau fraction of Step - virtual G4double DistChord() const override final; + G4double DistChord() const final; - virtual G4int IntegratorOrder() const override { return 4; } + inline G4int IntegratorOrder() const override { return 4; } - const field_utils::ShortState& GetYOut() const { return fyOut; } + inline const field_utils::ShortState& GetYOut() const { return fyOut; } void Interpolate4thOrder(G4double yOut[], G4double tau) const; @@ -93,24 +94,23 @@ class G4TDormandPrince45 : public G4MagIntegratorStepper void Interpolate5thOrder(G4double yOut[], G4double tau) const; // __attribute__((always_inline)) - void RightHandSideInl( const G4double y[], - G4double dydx[] ) + inline void RightHandSideInl( const G4double y[], + G4double dydx[] ) { fEquation_Rhs->T_Equation::RightHandSide(y, dydx); } - inline - void Stepper(const G4double yInput[], const G4double dydx[], - G4double hstep, G4double yOutput[], - G4double yError[], G4double dydxOutput[]) + inline void Stepper(const G4double yInput[], + const G4double dydx[], + G4double hstep, G4double yOutput[], + G4double yError[], G4double dydxOutput[]) { - StepWithFinalDerivate(yInput, dydx, hstep, - yOutput, yError, dydxOutput); + StepWithFinalDerivate(yInput, dydx, hstep, yOutput, yError, dydxOutput); } - T_Equation* GetSpecificEquation() { return fEquation_Rhs; } + T_Equation* GetSpecificEquation() { return fEquation_Rhs; } - static constexpr int N8= N > 8 ? N : 8; // y[ + static constexpr G4int N8 = N > 8 ? N : 8; // y[ private: @@ -126,6 +126,7 @@ class G4TDormandPrince45 : public G4MagIntegratorStepper T_Equation* fEquation_Rhs; }; +// -------------------------------------------------------------------- // G4TDormandPrince745 implementation -- borrowed from G4DormandPrince745 // // DormandPrince7 - 5(4) non-FSAL @@ -149,17 +150,8 @@ class G4TDormandPrince45 : public G4MagIntegratorStepper // 35/384 0 500/1113 125/192 2187/6784 11/84 0 // 5179/57600 0 7571/16695 393/640 92097/339200 187/2100 1/40 // -// Created: Somnath Banerjee, Google Summer of Code 2015, 25 May 2015 -// Supervision: John Apostolakis, CERN // -------------------------------------------------------------------- -#include "G4LineSection.hh" - -#include - -// using namespace field_utils; - -///////////////////////////////////////////////////////////////////// // Constructor // template @@ -187,10 +179,12 @@ G4TDormandPrince45::G4TDormandPrince45(T_Equation* equation ) } template -G4TDormandPrince45::G4TDormandPrince45(T_Equation* equation, G4int numVar ) - : G4TDormandPrince45(equation ) +inline G4TDormandPrince45:: + G4TDormandPrince45(T_Equation* equation, G4int numVar ) + : G4TDormandPrince45(equation ) { - if( numVar != G4int(N)){ + if( numVar != G4int(N)) + { G4ExceptionDescription msg; msg << "Equation has an incompatible number of variables." ; msg << " template N = " << N @@ -203,13 +197,13 @@ G4TDormandPrince45::G4TDormandPrince45(T_Equation* equation, G4int } template -inline void G4TDormandPrince45:: -StepWithFinalDerivate(const G4double yInput[], - const G4double dydx[], - G4double hstep, - G4double yOutput[], - G4double yError[], - G4double dydxOutput[]) +inline void +G4TDormandPrince45::StepWithFinalDerivate(const G4double yInput[], + const G4double dydx[], + G4double hstep, + G4double yOutput[], + G4double yError[], + G4double dydxOutput[]) { StepWithError(yInput, dydx, hstep, yOutput, yError); field_utils::copy(dydxOutput, ak7, N); @@ -225,123 +219,122 @@ template inline void G4TDormandPrince45::StepWithError(const G4double yInput[], const G4double dydx[], - G4double hstep, - G4double yOut[], - G4double yErr[] ) + G4double hstep, + G4double yOut[], + G4double yErr[] ) { - // The parameters of the Butcher tableu - // - constexpr G4double b21 = 0.2, - b31 = 3.0 / 40.0, b32 = 9.0 / 40.0, - b41 = 44.0 / 45.0, b42 = -56.0 / 15.0, b43 = 32.0/9.0, - - b51 = 19372.0 / 6561.0, b52 = -25360.0 / 2187.0, b53 = 64448.0 / 6561.0, - b54 = -212.0 / 729.0, + // The parameters of the Butcher tableu + // + constexpr G4double b21 = 0.2, + b31 = 3.0 / 40.0, b32 = 9.0 / 40.0, + b41 = 44.0 / 45.0, b42 = -56.0 / 15.0, b43 = 32.0/9.0, + + b51 = 19372.0 / 6561.0, b52 = -25360.0 / 2187.0, b53 = 64448.0 / 6561.0, + b54 = -212.0 / 729.0, - b61 = 9017.0 / 3168.0 , b62 = -355.0 / 33.0, - b63 = 46732.0 / 5247.0, b64 = 49.0 / 176.0, - b65 = -5103.0 / 18656.0, + b61 = 9017.0 / 3168.0 , b62 = -355.0 / 33.0, + b63 = 46732.0 / 5247.0, b64 = 49.0 / 176.0, + b65 = -5103.0 / 18656.0, - b71 = 35.0 / 384.0, b72 = 0., - b73 = 500.0 / 1113.0, b74 = 125.0 / 192.0, - b75 = -2187.0 / 6784.0, b76 = 11.0 / 84.0, - - //Sum of columns, sum(bij) = ei - // e1 = 0. , - // e2 = 1.0/5.0 , - // e3 = 3.0/10.0 , - // e4 = 4.0/5.0 , - // e5 = 8.0/9.0 , - // e6 = 1.0 , - // e7 = 1.0 , + b71 = 35.0 / 384.0, b72 = 0., + b73 = 500.0 / 1113.0, b74 = 125.0 / 192.0, + b75 = -2187.0 / 6784.0, b76 = 11.0 / 84.0, - // Difference between the higher and the lower order method coeff. : - // b7j are the coefficients of higher order - - dc1 = -(b71 - 5179.0 / 57600.0), - dc2 = -(b72 - .0), - dc3 = -(b73 - 7571.0 / 16695.0), - dc4 = -(b74 - 393.0 / 640.0), - dc5 = -(b75 + 92097.0 / 339200.0), - dc6 = -(b76 - 187.0 / 2100.0), - dc7 = -(- 1.0 / 40.0); + // Sum of columns, sum(bij) = ei + // e1 = 0. , + // e2 = 1.0/5.0 , + // e3 = 3.0/10.0 , + // e4 = 4.0/5.0 , + // e5 = 8.0/9.0 , + // e6 = 1.0 , + // e7 = 1.0 , + + // Difference between the higher and the lower order method coeff. : + // b7j are the coefficients of higher order - // const G4int numberOfVariables = GetNumberOfVariables(); - // The number of variables to be integrated over - field_utils::ShortState yTemp; + dc1 = -(b71 - 5179.0 / 57600.0), + dc2 = -(b72 - .0), + dc3 = -(b73 - 7571.0 / 16695.0), + dc4 = -(b74 - 393.0 / 640.0), + dc5 = -(b75 + 92097.0 / 339200.0), + dc6 = -(b76 - 187.0 / 2100.0), + dc7 = -(- 1.0 / 40.0); - yOut[7] = yTemp[7] = fyIn[7] = yInput[7]; // Pass along the time - used in RightHandSide + // const G4int numberOfVariables = GetNumberOfVariables(); + // The number of variables to be integrated over + field_utils::ShortState yTemp; - // Saving yInput because yInput and yOut can be aliases for same array - // - for(unsigned int i = 0; i < N; ++i) - { - fyIn[i] = yInput[i]; - yTemp[i] = yInput[i] + b21 * hstep * dydx[i]; - } - RightHandSideInl(yTemp, ak2); // 2nd stage + yOut[7] = yTemp[7] = fyIn[7] = yInput[7]; // Pass along the time - used in RightHandSide - for(unsigned int i = 0; i < N; ++i) - { - yTemp[i] = fyIn[i] + hstep * (b31 * dydx[i] + b32 * ak2[i]); - } - RightHandSideInl(yTemp, ak3); // 3rd stage + // Saving yInput because yInput and yOut can be aliases for same array + // + for(unsigned int i = 0; i < N; ++i) + { + fyIn[i] = yInput[i]; + yTemp[i] = yInput[i] + b21 * hstep * dydx[i]; + } + RightHandSideInl(yTemp, ak2); // 2nd stage + + for(unsigned int i = 0; i < N; ++i) + { + yTemp[i] = fyIn[i] + hstep * (b31 * dydx[i] + b32 * ak2[i]); + } + RightHandSideInl(yTemp, ak3); // 3rd stage - for(unsigned int i = 0; i < N; ++i) - { - yTemp[i] = fyIn[i] + hstep * ( - b41 * dydx[i] + b42 * ak2[i] + b43 * ak3[i]); - } - RightHandSideInl(yTemp, ak4); // 4th stage + for(unsigned int i = 0; i < N; ++i) + { + yTemp[i] = fyIn[i] + hstep * ( + b41 * dydx[i] + b42 * ak2[i] + b43 * ak3[i]); + } + RightHandSideInl(yTemp, ak4); // 4th stage - for(unsigned int i = 0; i < N; ++i) - { - yTemp[i] = fyIn[i] + hstep * ( - b51 * dydx[i] + b52 * ak2[i] + b53 * ak3[i] + b54 * ak4[i]); - } - RightHandSideInl(yTemp, ak5); // 5th stage + for(unsigned int i = 0; i < N; ++i) + { + yTemp[i] = fyIn[i] + hstep * ( + b51 * dydx[i] + b52 * ak2[i] + b53 * ak3[i] + b54 * ak4[i]); + } + RightHandSideInl(yTemp, ak5); // 5th stage - for(unsigned int i = 0; i < N; ++i) - { - yTemp[i] = fyIn[i] + hstep * ( - b61 * dydx[i] + b62 * ak2[i] + - b63 * ak3[i] + b64 * ak4[i] + b65 * ak5[i]); - } - RightHandSideInl(yTemp, ak6); // 6th stage + for(unsigned int i = 0; i < N; ++i) + { + yTemp[i] = fyIn[i] + hstep * ( + b61 * dydx[i] + b62 * ak2[i] + + b63 * ak3[i] + b64 * ak4[i] + b65 * ak5[i]); + } + RightHandSideInl(yTemp, ak6); // 6th stage - for(unsigned int i = 0; i < N; ++i) - { - yOut[i] = fyIn[i] + hstep * ( - b71 * dydx[i] + b72 * ak2[i] + b73 * ak3[i] + - b74 * ak4[i] + b75 * ak5[i] + b76 * ak6[i]); - } - RightHandSideInl(yOut, ak7); // 7th and Final stage + for(unsigned int i = 0; i < N; ++i) + { + yOut[i] = fyIn[i] + hstep * ( + b71 * dydx[i] + b72 * ak2[i] + b73 * ak3[i] + + b74 * ak4[i] + b75 * ak5[i] + b76 * ak6[i]); + } + RightHandSideInl(yOut, ak7); // 7th and Final stage - for(unsigned int i = 0; i < N; ++i) - { - yErr[i] = hstep * ( - dc1 * dydx[i] + dc2 * ak2[i] + - dc3 * ak3[i] + dc4 * ak4[i] + - dc5 * ak5[i] + dc6 * ak6[i] + dc7 * ak7[i] - ) + 1.5e-18; - - // Store Input and Final values, for possible use in calculating chord - // - fyOut[i] = yOut[i]; - fdydxIn[i] = dydx[i]; - } + for(unsigned int i = 0; i < N; ++i) + { + yErr[i] = hstep * ( + dc1 * dydx[i] + dc2 * ak2[i] + + dc3 * ak3[i] + dc4 * ak4[i] + + dc5 * ak5[i] + dc6 * ak6[i] + dc7 * ak7[i] + ) + 1.5e-18; + + // Store Input and Final values, for possible use in calculating chord + // + fyOut[i] = yOut[i]; + fdydxIn[i] = dydx[i]; + } - fLastStepLength = hstep; + fLastStepLength = hstep; } - template inline void G4TDormandPrince45::Stepper(const G4double yInput[], const G4double dydx[], - G4double Step, - G4double yOutput[], - G4double yError[]) + G4double Step, + G4double yOutput[], + G4double yError[]) { assert( yOutput != yInput ); assert( yError != yInput ); @@ -350,32 +343,31 @@ G4TDormandPrince45::Stepper(const G4double yInput[], } template -G4double -G4TDormandPrince45::DistChord() const +inline G4double G4TDormandPrince45::DistChord() const { - // Coefficients were taken from Some Practical Runge-Kutta Formulas - // by Lawrence F. Shampine, page 149, c* - // - const G4double hf1 = 6025192743.0 / 30085553152.0, - hf3 = 51252292925.0 / 65400821598.0, - hf4 = - 2691868925.0 / 45128329728.0, - hf5 = 187940372067.0 / 1594534317056.0, - hf6 = - 1776094331.0 / 19743644256.0, - hf7 = 11237099.0 / 235043384.0; - - G4ThreeVector mid; - - for(unsigned int i = 0; i < 3; ++i) - { - mid[i] = fyIn[i] + 0.5 * fLastStepLength * ( - hf1 * fdydxIn[i] + hf3 * ak3[i] + - hf4 * ak4[i] + hf5 * ak5[i] + hf6 * ak6[i] + hf7 * ak7[i]); - } + // Coefficients were taken from Some Practical Runge-Kutta Formulas + // by Lawrence F. Shampine, page 149, c* + // + const G4double hf1 = 6025192743.0 / 30085553152.0, + hf3 = 51252292925.0 / 65400821598.0, + hf4 = - 2691868925.0 / 45128329728.0, + hf5 = 187940372067.0 / 1594534317056.0, + hf6 = - 1776094331.0 / 19743644256.0, + hf7 = 11237099.0 / 235043384.0; + + G4ThreeVector mid; + + for(unsigned int i = 0; i < 3; ++i) + { + mid[i] = fyIn[i] + 0.5 * fLastStepLength * ( + hf1 * fdydxIn[i] + hf3 * ak3[i] + + hf4 * ak4[i] + hf5 * ak5[i] + hf6 * ak6[i] + hf7 * ak7[i]); + } - const G4ThreeVector begin = makeVector(fyIn, field_utils::Value3D::Position); - const G4ThreeVector end = makeVector(fyOut, field_utils::Value3D::Position); + const G4ThreeVector begin = makeVector(fyIn, field_utils::Value3D::Position); + const G4ThreeVector end = makeVector(fyOut, field_utils::Value3D::Position); - return G4LineSection::Distline(mid, begin, end); + return G4LineSection::Distline(mid, begin, end); } // The lower (4th) order interpolant given by Dormand and Prince: @@ -384,45 +376,43 @@ G4TDormandPrince45::DistChord() const // pp. 1007-1017, 1986. // template -void -G4TDormandPrince45:: -Interpolate4thOrder(G4double yOut[], G4double tau) const -{ - // const G4int numberOfVariables = GetNumberOfVariables(); - - const G4double tau2 = tau * tau, - tau3 = tau * tau2, - tau4 = tau2 * tau2; - - const G4double bf1 = 1.0 / 11282082432.0 * ( - 157015080.0 * tau4 - 13107642775.0 * tau3 + 34969693132.0 * tau2 - - 32272833064.0 * tau + 11282082432.0); - - const G4double bf3 = - 100.0 / 32700410799.0 * tau * ( - 15701508.0 * tau3 - 914128567.0 * tau2 + 2074956840.0 * tau - - 1323431896.0); +inline void +G4TDormandPrince45::Interpolate4thOrder(G4double yOut[], + G4double tau) const +{ + const G4double tau2 = tau * tau, + tau3 = tau * tau2, + tau4 = tau2 * tau2; + + const G4double bf1 = 1.0 / 11282082432.0 * ( + 157015080.0 * tau4 - 13107642775.0 * tau3 + 34969693132.0 * tau2 - + 32272833064.0 * tau + 11282082432.0); + + const G4double bf3 = - 100.0 / 32700410799.0 * tau * ( + 15701508.0 * tau3 - 914128567.0 * tau2 + 2074956840.0 * tau - + 1323431896.0); - const G4double bf4 = 25.0 / 5641041216.0 * tau * ( - 94209048.0 * tau3 - 1518414297.0 * tau2 + 2460397220.0 * tau - - 889289856.0); + const G4double bf4 = 25.0 / 5641041216.0 * tau * ( + 94209048.0 * tau3 - 1518414297.0 * tau2 + 2460397220.0 * tau - + 889289856.0); - const G4double bf5 = - 2187.0 / 199316789632.0 * tau * ( - 52338360.0 * tau3 - 451824525.0 * tau2 + 687873124.0 * tau - - 259006536.0); + const G4double bf5 = - 2187.0 / 199316789632.0 * tau * ( + 52338360.0 * tau3 - 451824525.0 * tau2 + 687873124.0 * tau - + 259006536.0); - const G4double bf6 = 11.0 / 2467955532.0 * tau * ( - 106151040.0 * tau3 - 661884105.0 * tau2 + - 946554244.0 * tau - 361440756.0); + const G4double bf6 = 11.0 / 2467955532.0 * tau * ( + 106151040.0 * tau3 - 661884105.0 * tau2 + + 946554244.0 * tau - 361440756.0); - const G4double bf7 = 1.0 / 29380423.0 * tau * (1.0 - tau) * ( - 8293050.0 * tau2 - 82437520.0 * tau + 44764047.0); + const G4double bf7 = 1.0 / 29380423.0 * tau * (1.0 - tau) * ( + 8293050.0 * tau2 - 82437520.0 * tau + 44764047.0); - for(unsigned int i = 0; i < N; ++i) - { - yOut[i] = fyIn[i] + fLastStepLength * tau * ( - bf1 * fdydxIn[i] + bf3 * ak3[i] + bf4 * ak4[i] + - bf5 * ak5[i] + bf6 * ak6[i] + bf7 * ak7[i]); - } + for(unsigned int i = 0; i < N; ++i) + { + yOut[i] = fyIn[i] + fLastStepLength * tau * ( + bf1 * fdydxIn[i] + bf3 * ak3[i] + bf4 * ak4[i] + + bf5 * ak5[i] + bf6 * ak6[i] + bf7 * ak7[i]); + } } // Following interpolant of order 5 was given by Baker,Dormand,Gilmore, Prince : @@ -433,161 +423,158 @@ Interpolate4thOrder(G4double yOut[], G4double tau) const // Calculating the extra stages for the interpolant // template -void G4TDormandPrince45::SetupInterpolation5thOrder() +inline void G4TDormandPrince45::SetupInterpolation5thOrder() { - // Coefficients for the additional stages - // - const G4double b81 = 6245.0 / 62208.0, - b82 = 0.0, - b83 = 8875.0 / 103032.0, - b84 = -125.0 / 1728.0, - b85 = 801.0 / 13568.0, - b86 = -13519.0 / 368064.0, - b87 = 11105.0 / 368064.0, - - b91 = 632855.0 / 4478976.0, - b92 = 0.0, - b93 = 4146875.0 / 6491016.0, - b94 = 5490625.0 /14183424.0, - b95 = -15975.0 / 108544.0, - b96 = 8295925.0 / 220286304.0, - b97 = -1779595.0 / 62938944.0, - b98 = -805.0 / 4104.0; - - // const G4int numberOfVariables = GetNumberOfVariables(); - field_utils::ShortState yTemp; - - // Evaluate the extra stages - // - for(unsigned int i = 0; i < N; ++i) - { - yTemp[i] = fyIn[i] + fLastStepLength * ( - b81 * fdydxIn[i] + b82 * ak2[i] + b83 * ak3[i] + - b84 * ak4[i] + b85 * ak5[i] + b86 * ak6[i] + - b87 * ak7[i] - ); - } - RightHandSideInl(yTemp, ak8); // 8th Stage + // Coefficients for the additional stages + // + const G4double b81 = 6245.0 / 62208.0, + b82 = 0.0, + b83 = 8875.0 / 103032.0, + b84 = -125.0 / 1728.0, + b85 = 801.0 / 13568.0, + b86 = -13519.0 / 368064.0, + b87 = 11105.0 / 368064.0, + + b91 = 632855.0 / 4478976.0, + b92 = 0.0, + b93 = 4146875.0 / 6491016.0, + b94 = 5490625.0 /14183424.0, + b95 = -15975.0 / 108544.0, + b96 = 8295925.0 / 220286304.0, + b97 = -1779595.0 / 62938944.0, + b98 = -805.0 / 4104.0; + + field_utils::ShortState yTemp; + + // Evaluate the extra stages + // + for(unsigned int i = 0; i < N; ++i) + { + yTemp[i] = fyIn[i] + fLastStepLength * ( + b81 * fdydxIn[i] + b82 * ak2[i] + b83 * ak3[i] + + b84 * ak4[i] + b85 * ak5[i] + b86 * ak6[i] + + b87 * ak7[i] + ); + } + RightHandSideInl(yTemp, ak8); // 8th Stage - for(unsigned int i = 0; i < N; ++i) - { - yTemp[i] = fyIn[i] + fLastStepLength * ( - b91 * fdydxIn[i] + b92 * ak2[i] + b93 * ak3[i] + - b94 * ak4[i] + b95 * ak5[i] + b96 * ak6[i] + - b97 * ak7[i] + b98 * ak8[i] - ); - } - RightHandSideInl(yTemp, ak9); // 9th Stage + for(unsigned int i = 0; i < N; ++i) + { + yTemp[i] = fyIn[i] + fLastStepLength * ( + b91 * fdydxIn[i] + b92 * ak2[i] + b93 * ak3[i] + + b94 * ak4[i] + b95 * ak5[i] + b96 * ak6[i] + + b97 * ak7[i] + b98 * ak8[i] + ); + } + RightHandSideInl(yTemp, ak9); // 9th Stage } // Calculating the interpolated result yOut with the coefficients // template -void G4TDormandPrince45:: +inline void G4TDormandPrince45:: Interpolate5thOrder(G4double yOut[], G4double tau) const { - // Define the coefficients for the polynomials - // - G4double bi[10][5]; + // Define the coefficients for the polynomials + // + G4double bi[10][5]; - // COEFFICIENTS OF bi[1] - bi[1][0] = 1.0, - bi[1][1] = -38039.0 / 7040.0, - bi[1][2] = 125923.0 / 10560.0, - bi[1][3] = -19683.0 / 1760.0, - bi[1][4] = 3303.0 / 880.0, - // -------------------------------------------------------- - // - // COEFFICIENTS OF bi[2] - bi[2][0] = 0.0, - bi[2][1] = 0.0, - bi[2][2] = 0.0, - bi[2][3] = 0.0, - bi[2][4] = 0.0, - // -------------------------------------------------------- - // - // COEFFICIENTS OF bi[3] - bi[3][0] = 0.0, - bi[3][1] = -12500.0 / 4081.0, - bi[3][2] = 205000.0 / 12243.0, - bi[3][3] = -90000.0 / 4081.0, - bi[3][4] = 36000.0 / 4081.0, - // -------------------------------------------------------- - // - // COEFFICIENTS OF bi[4] - bi[4][0] = 0.0, - bi[4][1] = -3125.0 / 704.0, - bi[4][2] = 25625.0 / 1056.0, - bi[4][3] = -5625.0 / 176.0, - bi[4][4] = 1125.0 / 88.0, - // -------------------------------------------------------- - // - // COEFFICIENTS OF bi[5] - bi[5][0] = 0.0, - bi[5][1] = 164025.0 / 74624.0, - bi[5][2] = -448335.0 / 37312.0, - bi[5][3] = 295245.0 / 18656.0, - bi[5][4] = -59049.0 / 9328.0, - // -------------------------------------------------------- - // - // COEFFICIENTS OF bi[6] - bi[6][0] = 0.0, - bi[6][1] = -25.0 / 28.0, - bi[6][2] = 205.0 / 42.0, - bi[6][3] = -45.0 / 7.0, - bi[6][4] = 18.0 / 7.0, - // -------------------------------------------------------- - // - // COEFFICIENTS OF bi[7] - bi[7][0] = 0.0, - bi[7][1] = -2.0 / 11.0, - bi[7][2] = 73.0 / 55.0, - bi[7][3] = -171.0 / 55.0, - bi[7][4] = 108.0 / 55.0, - // -------------------------------------------------------- - // - // COEFFICIENTS OF bi[8] - bi[8][0] = 0.0, - bi[8][1] = 189.0 / 22.0, - bi[8][2] = -1593.0 / 55.0, - bi[8][3] = 3537.0 / 110.0, - bi[8][4] = -648.0 / 55.0, - // -------------------------------------------------------- - // - // COEFFICIENTS OF bi[9] - bi[9][0] = 0.0, - bi[9][1] = 351.0 / 110.0, - bi[9][2] = -999.0 / 55.0, - bi[9][3] = 2943.0 / 110.0, - bi[9][4] = -648.0 / 55.0; - // -------------------------------------------------------- + // COEFFICIENTS OF bi[1] + bi[1][0] = 1.0, + bi[1][1] = -38039.0 / 7040.0, + bi[1][2] = 125923.0 / 10560.0, + bi[1][3] = -19683.0 / 1760.0, + bi[1][4] = 3303.0 / 880.0, + // -------------------------------------------------------- + // + // COEFFICIENTS OF bi[2] + bi[2][0] = 0.0, + bi[2][1] = 0.0, + bi[2][2] = 0.0, + bi[2][3] = 0.0, + bi[2][4] = 0.0, + // -------------------------------------------------------- + // + // COEFFICIENTS OF bi[3] + bi[3][0] = 0.0, + bi[3][1] = -12500.0 / 4081.0, + bi[3][2] = 205000.0 / 12243.0, + bi[3][3] = -90000.0 / 4081.0, + bi[3][4] = 36000.0 / 4081.0, + // -------------------------------------------------------- + // + // COEFFICIENTS OF bi[4] + bi[4][0] = 0.0, + bi[4][1] = -3125.0 / 704.0, + bi[4][2] = 25625.0 / 1056.0, + bi[4][3] = -5625.0 / 176.0, + bi[4][4] = 1125.0 / 88.0, + // -------------------------------------------------------- + // + // COEFFICIENTS OF bi[5] + bi[5][0] = 0.0, + bi[5][1] = 164025.0 / 74624.0, + bi[5][2] = -448335.0 / 37312.0, + bi[5][3] = 295245.0 / 18656.0, + bi[5][4] = -59049.0 / 9328.0, + // -------------------------------------------------------- + // + // COEFFICIENTS OF bi[6] + bi[6][0] = 0.0, + bi[6][1] = -25.0 / 28.0, + bi[6][2] = 205.0 / 42.0, + bi[6][3] = -45.0 / 7.0, + bi[6][4] = 18.0 / 7.0, + // -------------------------------------------------------- + // + // COEFFICIENTS OF bi[7] + bi[7][0] = 0.0, + bi[7][1] = -2.0 / 11.0, + bi[7][2] = 73.0 / 55.0, + bi[7][3] = -171.0 / 55.0, + bi[7][4] = 108.0 / 55.0, + // -------------------------------------------------------- + // + // COEFFICIENTS OF bi[8] + bi[8][0] = 0.0, + bi[8][1] = 189.0 / 22.0, + bi[8][2] = -1593.0 / 55.0, + bi[8][3] = 3537.0 / 110.0, + bi[8][4] = -648.0 / 55.0, + // -------------------------------------------------------- + // + // COEFFICIENTS OF bi[9] + bi[9][0] = 0.0, + bi[9][1] = 351.0 / 110.0, + bi[9][2] = -999.0 / 55.0, + bi[9][3] = 2943.0 / 110.0, + bi[9][4] = -648.0 / 55.0; + // -------------------------------------------------------- - // Calculating the polynomials + // Calculating the polynomials - G4double b[10]; - std::memset(b, 0.0, sizeof(b)); - - G4double tauPower = 1.0; - for(G4int j = 0; j <= 4; ++j) - { - for(G4int iStage = 1; iStage <= 9; ++iStage) - { - b[iStage] += bi[iStage][j] * tauPower; - } - tauPower *= tau; - } + G4double b[10]; + std::memset(b, 0.0, sizeof(b)); - // const G4int numberOfVariables = GetNumberOfVariables(); - const G4double stepLen = fLastStepLength * tau; - for(G4int i = 0; i < N; ++i) + G4double tauPower = 1.0; + for(G4int j = 0; j <= 4; ++j) + { + for(G4int iStage = 1; iStage <= 9; ++iStage) { - yOut[i] = fyIn[i] + stepLen * ( - b[1] * fdydxIn[i] + b[2] * ak2[i] + b[3] * ak3[i] + - b[4] * ak4[i] + b[5] * ak5[i] + b[6] * ak6[i] + - b[7] * ak7[i] + b[8] * ak8[i] + b[9] * ak9[i] - ); + b[iStage] += bi[iStage][j] * tauPower; } -} + tauPower *= tau; + } + const G4double stepLen = fLastStepLength * tau; + for(G4int i = 0; i < N; ++i) + { + yOut[i] = fyIn[i] + stepLen * ( + b[1] * fdydxIn[i] + b[2] * ak2[i] + b[3] * ak3[i] + + b[4] * ak4[i] + b[5] * ak5[i] + b[6] * ak6[i] + + b[7] * ak7[i] + b[8] * ak8[i] + b[9] * ak9[i] + ); + } +} #endif diff --git a/source/geometry/magneticfield/include/G4TsitourasRK45.hh b/source/geometry/magneticfield/include/G4TsitourasRK45.hh index 2e3068644ad..fce04d14df6 100644 --- a/source/geometry/magneticfield/include/G4TsitourasRK45.hh +++ b/source/geometry/magneticfield/include/G4TsitourasRK45.hh @@ -49,7 +49,7 @@ class G4TsitourasRK45 : public G4MagIntegratorStepper G4TsitourasRK45(G4EquationOfMotion* EqRhs, G4int numberOfVariables = 6, G4bool primary = true); - ~G4TsitourasRK45(); + ~G4TsitourasRK45() override; G4TsitourasRK45(const G4TsitourasRK45&) = delete; G4TsitourasRK45& operator=(const G4TsitourasRK45&) = delete; @@ -58,7 +58,7 @@ class G4TsitourasRK45 : public G4MagIntegratorStepper const G4double dydx[], G4double h, G4double yout[], - G4double yerr[] ); + G4double yerr[] ) override; void SetupInterpolation( /* const G4double yInput[], const G4double dydx[], @@ -77,8 +77,8 @@ class G4TsitourasRK45 : public G4MagIntegratorStepper G4double Step, G4double tau); - G4double DistChord() const; - inline G4int IntegratorOrder() const { return 4; } + G4double DistChord() const override; + inline G4int IntegratorOrder() const override { return 4; } private : diff --git a/source/geometry/magneticfield/include/G4UniformElectricField.hh b/source/geometry/magneticfield/include/G4UniformElectricField.hh index 2438c495ef8..a74c6c7fb4a 100644 --- a/source/geometry/magneticfield/include/G4UniformElectricField.hh +++ b/source/geometry/magneticfield/include/G4UniformElectricField.hh @@ -40,7 +40,7 @@ class G4UniformElectricField : public G4ElectricField { - public: // with description + public: G4UniformElectricField(const G4ThreeVector& FieldVector); // A field with value equal to FieldVector. @@ -48,16 +48,16 @@ class G4UniformElectricField : public G4ElectricField G4UniformElectricField(G4double vField, G4double vTheta, G4double vPhi); - - virtual ~G4UniformElectricField(); + + ~G4UniformElectricField() override; G4UniformElectricField(const G4UniformElectricField &p); G4UniformElectricField& operator = (const G4UniformElectricField &p); // Copy constructor and assignment operator - virtual void GetFieldValue(const G4double pos[4], G4double* field) const; + void GetFieldValue(const G4double pos[4], G4double* field) const override; - virtual G4Field* Clone() const; + G4Field* Clone() const override; private: diff --git a/source/geometry/magneticfield/include/G4UniformGravityField.hh b/source/geometry/magneticfield/include/G4UniformGravityField.hh index e98a2954190..4bc9dea1007 100644 --- a/source/geometry/magneticfield/include/G4UniformGravityField.hh +++ b/source/geometry/magneticfield/include/G4UniformGravityField.hh @@ -43,7 +43,7 @@ class G4UniformGravityField : public G4Field { - public: // with description + public: G4UniformGravityField(const G4ThreeVector& FieldVector ); // A field with value equal to FieldVector. @@ -51,18 +51,18 @@ class G4UniformGravityField : public G4Field G4UniformGravityField(const G4double gy = -9.81*CLHEP::m/CLHEP::s/CLHEP::s); // Standard Gravitational field on earth's surface - virtual ~G4UniformGravityField(); + ~G4UniformGravityField() override; G4UniformGravityField(const G4UniformGravityField& p); G4UniformGravityField& operator=(const G4UniformGravityField& p); // Copy constructor and assignment operator - inline G4bool DoesFieldChangeEnergy() const { return true; } + inline G4bool DoesFieldChangeEnergy() const override { return true; } // Since a gravitational field can change track energy - virtual void GetFieldValue(const G4double Point[4], G4double* field) const; + void GetFieldValue(const G4double Point[4], G4double* field) const override; - virtual G4Field* Clone() const; + G4Field* Clone() const override; private: diff --git a/source/geometry/magneticfield/include/G4UniformMagField.hh b/source/geometry/magneticfield/include/G4UniformMagField.hh index 77b2245a965..af0b8cd6792 100644 --- a/source/geometry/magneticfield/include/G4UniformMagField.hh +++ b/source/geometry/magneticfield/include/G4UniformMagField.hh @@ -40,7 +40,7 @@ class G4UniformMagField : public G4MagneticField { - public: // with description + public: G4UniformMagField(const G4ThreeVector& FieldVector); // A field with value equal to FieldVector. @@ -49,21 +49,21 @@ class G4UniformMagField : public G4MagneticField G4double vTheta, G4double vPhi); - virtual ~G4UniformMagField() override; + ~G4UniformMagField() override; G4UniformMagField(const G4UniformMagField& p); G4UniformMagField& operator = (const G4UniformMagField& p); // Copy constructor and assignment operator. - virtual void GetFieldValue(const G4double yTrack[4], - G4double* MagField) const override final; + void GetFieldValue(const G4double yTrack[4], + G4double* MagField) const override; void SetFieldValue(const G4ThreeVector& newFieldValue); G4ThreeVector GetConstantFieldValue() const; // Return the field value - virtual G4Field* Clone() const override; + G4Field* Clone() const override; private: diff --git a/source/geometry/magneticfield/include/G4VIntegrationDriver.hh b/source/geometry/magneticfield/include/G4VIntegrationDriver.hh index bd58bb0fbe3..974f854986a 100644 --- a/source/geometry/magneticfield/include/G4VIntegrationDriver.hh +++ b/source/geometry/magneticfield/include/G4VIntegrationDriver.hh @@ -46,7 +46,9 @@ #include "G4Types.hh" #include "G4FieldTrack.hh" -#include "G4MagIntegratorStepper.hh" +#include "G4EquationOfMotion.hh" + +class G4MagIntegratorStepper; class G4VIntegrationDriver { @@ -73,7 +75,7 @@ class G4VIntegrationDriver virtual void SetVerboseLevel(G4int level) = 0; virtual G4int GetVerboseLevel() const = 0; - virtual void OnComputeStep() = 0; + virtual void OnComputeStep(const G4FieldTrack* /*track*/ = nullptr) = 0; virtual void OnStartTracking() = 0; diff --git a/source/geometry/magneticfield/include/G4qss_misc.hh b/source/geometry/magneticfield/include/G4qss_misc.hh new file mode 100644 index 00000000000..a8dac7da7e3 --- /dev/null +++ b/source/geometry/magneticfield/include/G4qss_misc.hh @@ -0,0 +1,122 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Authors: Lucio Santi, Rodrigo Castro 2018-21 + +#ifndef _QSS_MISC_H_ +#define _QSS_MISC_H_ + +typedef struct QSS_simulator_ *QSS_simulator; +typedef struct QSSSubstep_ *QSSSubstep; + +namespace Qss_misc { + // Convention of Geant4 notation of indices + constexpr unsigned int PXidx= 0; + constexpr unsigned int PYidx= 1; + constexpr unsigned int PZidx= 2; + + constexpr unsigned int VXidx= 3; + constexpr unsigned int VYidx= 4; + constexpr unsigned int VZidx= 5; + + // Method parameters & constants + constexpr unsigned int MAX_QSS_STEPPER_ORDER= 3; + constexpr unsigned int VAR_IDX_END= 6; + constexpr unsigned int MIN_SUBSTEPS= 20; + + constexpr G4double INF= 1.0e20; +} + +#if defined(WIN32) || defined(__MINGW32__) +#define unlikely(x) (x) // Until C++20 can be assumed +#define likely(x) (x) // >> ditto >> +#else +#define unlikely(x) __builtin_expect((x),0) // gcc/clang extension - not portable +#define likely(x) __builtin_expect((x),1) +#endif + +// #define likely(x) (x) // [[likely]] // The C++20 portable way +// #define likely(x) (x) // [[unlikely]] // >> >> +// This syntax appears to be part of C++20 +// See +// - https://en.cppreference.com/w/cpp/language/attributes/likely +// - https://stackoverflow.com/questions/51797959/how-to-use-c20s-likely-unlikely-attribute-in-if-else-statement +// - https://usingstdcpp.org/2018/03/18/jacksonville18-iso-cpp-report/ + +#define SUBSTEP_STRUCT(sim, i) (sim->substeps[i]) +#define SUBSTEP_START(sim, i) (sim->substeps[(i)].start_time) +#define SUBSTEP_X(sim, i) (sim->substeps[(i)].x) +#define SUBSTEP_TX(sim, i) (sim->substeps[(i)].tx) +#define SUBSTEP_LEN(sim, i) (sim->substeps[(i)].len) + +#define LAST_SUBSTEP_STRUCT(sim) (SUBSTEP_STRUCT(sim, sim->cur_substep_idx-1)) + +#define CUR_SUBSTEP_START(sim) (SUBSTEP_START(sim, sim->cur_substep_idx)) +#define CUR_SUBSTEP_X(sim) (SUBSTEP_X(sim, sim->cur_substep_idx)) +#define CUR_SUBSTEP_TX(sim) (SUBSTEP_TX(sim, sim->cur_substep_idx)) +#define CUR_SUBSTEP_LEN(sim) (SUBSTEP_LEN(sim, sim->cur_substep_idx)) + +#define CUR_SUBSTEP(sim) (sim->cur_substep_idx) +#define LAST_SUBSTEP(sim) (sim->cur_substep_idx-1) +#define MAX_SUBSTEP(sim) (sim->max_substep_idx) +#define SUBSTEPS(sim) (sim->substeps) + +struct QSSSubstep_ +{ + double x[Qss_misc::VAR_IDX_END*(Qss_misc::MAX_QSS_STEPPER_ORDER+1)]; + double tx[Qss_misc::VAR_IDX_END]; + + double start_time; + double len; +}; + +struct QSS_simulator_ +{ + double x[Qss_misc::VAR_IDX_END*(Qss_misc::MAX_QSS_STEPPER_ORDER+1)]; + double tx[Qss_misc::VAR_IDX_END]; + + double q[Qss_misc::VAR_IDX_END*(Qss_misc::MAX_QSS_STEPPER_ORDER+1)]; + double tq[Qss_misc::VAR_IDX_END]; + + double nextStateTime[Qss_misc::VAR_IDX_END]; + double time; + int minIndex; + + double dQMin[Qss_misc::VAR_IDX_END]; + double dQRel[Qss_misc::VAR_IDX_END]; + double lqu[Qss_misc::VAR_IDX_END]; + + double alg[Qss_misc::VAR_IDX_END]; + double it; + + int *SD[Qss_misc::VAR_IDX_END]; + int states; + + QSSSubstep substeps; + int cur_substep_idx; + int max_substep_idx; +}; + +#endif diff --git a/source/geometry/magneticfield/sources.cmake b/source/geometry/magneticfield/sources.cmake index 8ff059e83b4..89f1ec62356 100644 --- a/source/geometry/magneticfield/sources.cmake +++ b/source/geometry/magneticfield/sources.cmake @@ -4,6 +4,7 @@ geant4_add_module(G4magneticfield PUBLIC_HEADERS G4BFieldIntegrationDriver.hh + G4BFieldIntegrationDriver.icc G4BogackiShampine23.hh G4BogackiShampine45.hh G4BorisScheme.hh @@ -115,6 +116,16 @@ geant4_add_module(G4magneticfield G4UniformGravityField.hh G4UniformMagField.hh G4VIntegrationDriver.hh + # QSS - headers + G4QSSDriver.hh + G4QSSDriver.icc + G4QSSDriverCreator.hh + G4QSStepper.hh + G4QSS2.hh + G4QSS3.hh + G4QSS_CustomStats.hh + G4qss_misc.hh + G4QSSMessenger.hh SOURCES G4BFieldIntegrationDriver.cc G4BogackiShampine23.cc @@ -174,12 +185,13 @@ geant4_add_module(G4magneticfield G4NystromRK4.cc G4OldMagIntDriver.cc G4QuadrupoleMagField.cc + G4QSSDriverCreator.cc G4RepleteEofM.cc - G4SextupoleMagField.cc G4RKG3_Stepper.cc G4RK547FEq1.cc G4RK547FEq2.cc G4RK547FEq3.cc + G4SextupoleMagField.cc G4SimpleHeum.cc G4SimpleRunge.cc G4TrialsCounter.cc @@ -187,6 +199,18 @@ geant4_add_module(G4magneticfield G4UniformElectricField.cc G4UniformGravityField.cc G4UniformMagField.cc - G4VIntegrationDriver.cc) + G4VIntegrationDriver.cc + G4QSStepper.cc + G4QSS3.cc + G4QSSMessenger.cc +) -geant4_module_link_libraries(G4magneticfield PUBLIC G4globman) +geant4_module_link_libraries(G4magneticfield PUBLIC G4globman G4intercoms) +# List any source specific properties here +# For new system, must explicitly add path for generated header +geant4_module_include_directories(G4magneticfield PUBLIC + $ + $ + $ + $ +) \ No newline at end of file diff --git a/source/geometry/magneticfield/src/G4BFieldIntegrationDriver.cc b/source/geometry/magneticfield/src/G4BFieldIntegrationDriver.cc index ab2e5b23de4..85d0db60caf 100644 --- a/source/geometry/magneticfield/src/G4BFieldIntegrationDriver.cc +++ b/source/geometry/magneticfield/src/G4BFieldIntegrationDriver.cc @@ -46,7 +46,7 @@ G4Mag_EqRhs* toMagneticEquation(G4EquationOfMotion* equation) { auto e = dynamic_cast(equation); - if (!e) + if (e == nullptr) { G4Exception("G4BFieldIntegrationDriver::G4BFieldIntegrationDriver", "GeomField0003", FatalErrorInArgument, diff --git a/source/geometry/magneticfield/src/G4BogackiShampine23.cc b/source/geometry/magneticfield/src/G4BogackiShampine23.cc index 1dce9ae45aa..eb161bdb70d 100644 --- a/source/geometry/magneticfield/src/G4BogackiShampine23.cc +++ b/source/geometry/magneticfield/src/G4BogackiShampine23.cc @@ -102,7 +102,7 @@ void G4BogackiShampine23::makeStep(const G4double yInput[], yOutput[i] = yInput[i] + hstep * (b41*dydx[i] + b42*ak2[i] + b43*ak3[i]); } - if (dydxOutput && yError) + if ((dydxOutput != nullptr) && (yError != nullptr)) { RightHandSide(yOutput, dydxOutput); for(G4int i = 0; i < GetNumberOfVariables(); ++i) diff --git a/source/geometry/magneticfield/src/G4BogackiShampine45.cc b/source/geometry/magneticfield/src/G4BogackiShampine45.cc index 34c1acbbefe..50f3ff3ff02 100644 --- a/source/geometry/magneticfield/src/G4BogackiShampine45.cc +++ b/source/geometry/magneticfield/src/G4BogackiShampine45.cc @@ -88,9 +88,9 @@ G4BogackiShampine45::G4BogackiShampine45(G4EquationOfMotion *EqRhs, ak10 = new G4double[numberOfVariables]; ak11 = new G4double[numberOfVariables]; - for (auto i = 0; i < 6; ++i) + for (auto & i : p) { - p[i]= new G4double[numberOfVariables]; + i= new G4double[numberOfVariables]; } assert ( GetNumberOfStateVariables() >= 8 ); @@ -136,9 +136,9 @@ G4BogackiShampine45::~G4BogackiShampine45() delete [] ak10; delete [] ak11; - for (auto i = 0; i < 6; ++i) + for (auto & i : p) { - delete [] p[i]; + delete [] i; } delete [] yTemp; @@ -473,11 +473,11 @@ void G4BogackiShampine45::SetupInterpolationHigh() // Scale all the coefficients by the step size. // - for (G4int i = 0; i < 6; ++i) + for (auto & i : p) { for (G4int l = 0; l < nwant; ++l) { - p[i][l] *= Step; + i[l] *= Step; } } diff --git a/source/geometry/magneticfield/src/G4BorisDriver.cc b/source/geometry/magneticfield/src/G4BorisDriver.cc index d8548aeaf2d..f654abec040 100644 --- a/source/geometry/magneticfield/src/G4BorisDriver.cc +++ b/source/geometry/magneticfield/src/G4BorisDriver.cc @@ -51,7 +51,7 @@ const G4double G4BorisDriver::fErrorConstraintGrow = std::pow( G4BorisDriver:: G4BorisDriver( G4double hminimum, G4BorisScheme* Boris, - G4int numberOfComponents, bool verbosity ) + G4int numberOfComponents, G4bool verbosity ) : fMinimumStep(hminimum), fVerbosity(verbosity), boris(Boris) diff --git a/source/geometry/magneticfield/src/G4BulirschStoer.cc b/source/geometry/magneticfield/src/G4BulirschStoer.cc index 4d53eefc287..37281890b75 100644 --- a/source/geometry/magneticfield/src/G4BulirschStoer.cc +++ b/source/geometry/magneticfield/src/G4BulirschStoer.cc @@ -46,8 +46,7 @@ namespace G4BulirschStoer::G4BulirschStoer(G4EquationOfMotion* equation, G4int nvar, G4double eps_rel, G4double max_dt) - : fnvar(nvar), m_eps_rel(eps_rel), m_midpoint(equation,nvar), - m_last_step_rejected(false), m_first(true), m_dt_last(0.0), m_max_dt(max_dt) + : fnvar(nvar), m_eps_rel(eps_rel), m_midpoint(equation,nvar), m_max_dt(max_dt) { /* initialize sequence of stage numbers and work */ @@ -148,7 +147,7 @@ G4BulirschStoer::try_step( const G4double in[], const G4double dxdt[], } break; } - else if(should_reject(error , k) && !m_first) + if(should_reject(error , k) && !m_first) { reject = true; new_h = h_opt[k]; @@ -179,7 +178,7 @@ G4BulirschStoer::try_step( const G4double in[], const G4double dxdt[], } break; } - else if(should_reject(error, k)) + if(should_reject(error, k)) { reject = true; new_h = h_opt[m_current_k_opt]; @@ -294,7 +293,7 @@ G4bool G4BulirschStoer::set_k_opt(std::size_t k, G4double& dt) dt = h_opt[ m_current_k_opt ]; return true; } - else if( (work[k] < KFAC2 * work[k-1]) + if( (work[k] < KFAC2 * work[k-1]) || m_last_step_rejected || (k == m_k_max-1) ) { // same order - also do this if last step got rejected m_current_k_opt = (G4int)k; @@ -323,17 +322,17 @@ G4bool G4BulirschStoer::should_reject(G4double error, G4int k) const { if(k == m_current_k_opt - 1) { - const G4double d = G4double(m_interval_sequence[m_current_k_opt] - * m_interval_sequence[m_current_k_opt+1]); - const G4double e = G4double(m_interval_sequence[0]); + const auto d = G4double(m_interval_sequence[m_current_k_opt] + * m_interval_sequence[m_current_k_opt+1]); + const auto e = G4double(m_interval_sequence[0]); const G4double e2 = e*e; // step will fail, criterion 17.3.17 in NR return error * e2 * e2 > d * d; // was return error > dOld * dOld; (where dOld= d/e; ) } - else if(k == m_current_k_opt) + if(k == m_current_k_opt) { - const G4double d = G4double(m_interval_sequence[m_current_k_opt]); - const G4double e = G4double(m_interval_sequence[0]); + const auto d = G4double(m_interval_sequence[m_current_k_opt]); + const auto e = G4double(m_interval_sequence[0]); return error * e * e > d * d; // was return error > dOld * dOld; (where dOld= d/e; ) } else diff --git a/source/geometry/magneticfield/src/G4CachedMagneticField.cc b/source/geometry/magneticfield/src/G4CachedMagneticField.cc index 6d9ac75eb7d..f7202900fc1 100644 --- a/source/geometry/magneticfield/src/G4CachedMagneticField.cc +++ b/source/geometry/magneticfield/src/G4CachedMagneticField.cc @@ -32,7 +32,7 @@ G4CachedMagneticField::G4CachedMagneticField(G4MagneticField* pMagField, G4double distance) - : G4MagneticField(), fpMagneticField(pMagField), fDistanceConst(distance), + : fpMagneticField(pMagField), fDistanceConst(distance), fLastLocation(DBL_MAX,DBL_MAX,DBL_MAX), fLastValue(DBL_MAX,DBL_MAX,DBL_MAX) { ClearCounts(); @@ -42,17 +42,15 @@ G4Field* G4CachedMagneticField::Clone() const { // Cannot use copy constructor: need to clone the associated magnetic field - G4MagneticField* aF = static_cast(fpMagneticField->Clone()); - G4CachedMagneticField* cloned = new G4CachedMagneticField(aF, fDistanceConst); + auto aF = static_cast(fpMagneticField->Clone()); + auto cloned = new G4CachedMagneticField(aF, fDistanceConst); cloned->fLastLocation = fLastLocation; cloned->fLastValue = fLastValue; return cloned; } -G4CachedMagneticField::~G4CachedMagneticField() -{ -} +G4CachedMagneticField::~G4CachedMagneticField() = default; void G4CachedMagneticField::ReportStatistics() diff --git a/source/geometry/magneticfield/src/G4ChargeState.cc b/source/geometry/magneticfield/src/G4ChargeState.cc index b3dd1325c53..252c1f65755 100644 --- a/source/geometry/magneticfield/src/G4ChargeState.cc +++ b/source/geometry/magneticfield/src/G4ChargeState.cc @@ -40,7 +40,10 @@ void G4ChargeState::SetChargeSpinMoments(G4double charge, { fCharge = charge; fSpin = spin; - if( magnetic_dipole_moment < DBL_MAX) fMagn_dipole= magnetic_dipole_moment; - if( electric_dipole_moment < DBL_MAX) fElec_dipole= electric_dipole_moment; - if( magnetic_charge < DBL_MAX) fMagneticCharge= magnetic_charge; + if( magnetic_dipole_moment < DBL_MAX) + { fMagn_dipole= magnetic_dipole_moment; } + if( electric_dipole_moment < DBL_MAX) + { fElec_dipole= electric_dipole_moment; } + if( magnetic_charge < DBL_MAX) + { fMagneticCharge= magnetic_charge; } } diff --git a/source/geometry/magneticfield/src/G4ChordFinder.cc b/source/geometry/magneticfield/src/G4ChordFinder.cc index f921bbc02b2..2705c2b5dc4 100644 --- a/source/geometry/magneticfield/src/G4ChordFinder.cc +++ b/source/geometry/magneticfield/src/G4ChordFinder.cc @@ -62,12 +62,14 @@ #include "G4HelixHeum.hh" #include "G4BFieldIntegrationDriver.hh" +#include "G4QSSDriverCreator.hh" + #include "G4CachedMagneticField.hh" #include +#include -static G4bool gVerboseCtor = false; // true; - +G4bool G4ChordFinder::gVerboseCtor = false; // .......................................................................... G4ChordFinder::G4ChordFinder(G4VIntegrationDriver* pIntegrationDriver) @@ -75,12 +77,13 @@ G4ChordFinder::G4ChordFinder(G4VIntegrationDriver* pIntegrationDriver) { // Simple constructor -- it does not create equation if( gVerboseCtor ) + { G4cout << "G4ChordFinder: Simple constructor -- it uses pre-existing driver." << G4endl; + } fDeltaChord = fDefaultDeltaChord; // Parameters } - // .......................................................................... G4ChordFinder::G4ChordFinder( G4MagneticField* theMagField, @@ -95,13 +98,20 @@ G4ChordFinder::G4ChordFinder( G4MagneticField* theMagField, fDeltaChord = fDefaultDeltaChord; // Parameters - // stepperDriverId = 2; - - G4bool useFSALstepper= (stepperDriverId == 1); - G4bool useTemplatedStepper= (stepperDriverId == 2); - G4bool useRegularStepper = (stepperDriverId == 3); - // G4bool useBFieldDriver = !useRegularStepper && !useFSALstepper && !useTemplatedStepper; - + G4cout << " G4ChordFinder: stepperDriverId: " << stepperDriverId << G4endl; + + G4bool useFSALstepper= (stepperDriverId == kFSALStepperType); // Was 1 + G4bool useTemplatedStepper= (stepperDriverId == kTemplatedStepperType); // Was 2 + G4bool useRegularStepper = (stepperDriverId == kRegularStepperType); // Was 3 + G4bool useBfieldDriver = (stepperDriverId == kBfieldDriverType); // Was 4 + G4bool useG4QSSDriver = (stepperDriverId == kQss2DriverType) || (stepperDriverId == kQss3DriverType); + + // --- REINSTATE after QSS testing -- to impose DEFAULT + // G4bool useDefault= (stepperDriverId == kDefaultDriverType ) + // || ( !useRegularStepper && !useFSALstepper && !useTemplatedStepper && !useG4QSSDriver ); + // + // useBfieldDriver |= useDefault; // Was default in release 10.6, used for 'unknown' since 10.7 + // G4bool useRegularStepper = !stepperDriverId != 3) && !useFSALStepper && !useTemplatedStepper; // If it's not 0, 1 or 2 then 'BFieldDriver' which combines DoPri5 (short) and helix is used. @@ -150,7 +160,7 @@ G4ChordFinder::G4ChordFinder( G4MagneticField* theMagField, // useHigherStepper = forceHigherEffiencyStepper || useHigherStepper; - EquationType* pEquation = new G4Mag_UsualEqRhs(theMagField); + auto pEquation = new G4Mag_UsualEqRhs(theMagField); fEquation = pEquation; // G4MagIntegratorStepper* regularStepper = nullptr; @@ -164,13 +174,28 @@ G4ChordFinder::G4ChordFinder( G4MagneticField* theMagField, if( pItsStepper != nullptr ) { if( gVerboseCtor ) + { G4cout << " G4ChordFinder: Creating G4IntegrationDriver with " << " stepMinimum = " << stepMinimum << " numVar= " << pItsStepper->GetNumberOfVariables() << G4endl; - // Stepper type is not known - so must use base class G4MagIntegratorStepper - fIntgrDriver = new G4IntegrationDriver( - stepMinimum, pItsStepper, pItsStepper->GetNumberOfVariables()); + } + // Stepper type is not known - so must use base class G4MagIntegratorStepper + if(pItsStepper->isQSS()) + { + // fIntgrDriver = pItsStepper->build_driver(stepMinimum, true); + G4Exception("G4ChordFinder::G4ChordFinder()", + "GeomField1001", FatalException, + "Cannot provide QSS stepper in constructor. User c-tor with Driver instead."); + } + else + { + fIntgrDriver = new G4IntegrationDriver( stepMinimum, + pItsStepper, pItsStepper->GetNumberOfVariables() ); + // Stepper type is not known - so must use base class G4MagIntegratorStepper + // Non-interpolating driver used by default. + // WAS: fIntgrDriver = pItsStepper->build_driver(stepMinimum); // QSS introduction -- axed + } // -- Older: // G4cout << " G4ChordFinder: Creating G4MagInt_Driver with " ... // Type is not known - so must use old class @@ -180,8 +205,10 @@ G4ChordFinder::G4ChordFinder( G4MagneticField* theMagField, else if ( useTemplatedStepper ) { if( gVerboseCtor ) + { G4cout << " G4ChordFinder: Creating Templated Stepper of type> " << TemplatedStepperName << G4endl; + } // RegularStepperType* regularStepper = nullptr; // To check the exception auto templatedStepper = new TemplatedStepperType(pEquation); // *** ****************** @@ -201,7 +228,9 @@ G4ChordFinder::G4ChordFinder( G4MagneticField* theMagField, fIntgrDriver = new G4IntegrationDriver( stepMinimum, templatedStepper, nVar6 ); if( gVerboseCtor ) + { G4cout << " G4ChordFinder: Using G4IntegrationDriver. " << G4endl; + } } } @@ -212,7 +241,9 @@ G4ChordFinder::G4ChordFinder( G4MagneticField* theMagField, fRegularStepperOwned = regularStepper; if( gVerboseCtor ) + { G4cout << " G4ChordFinder: Creating Driver for regular stepper."; + } if( regularStepper == nullptr ) { @@ -224,20 +255,27 @@ G4ChordFinder::G4ChordFinder( G4MagneticField* theMagField, else { auto dp5= dynamic_cast(regularStepper); - if( dp5 ) { + if( dp5 != nullptr ) + { fIntgrDriver = new G4InterpolationDriver( stepMinimum, dp5, nVar6 ); if( gVerboseCtor ) + { G4cout << " Using InterpolationDriver " << G4endl; - } else { + } + } + else + { fIntgrDriver = new G4IntegrationDriver( stepMinimum, regularStepper, nVar6 ); if( gVerboseCtor ) + { G4cout << " Using IntegrationDriver " << G4endl; + } } } } - else if ( !useFSALstepper ) + else if ( useBfieldDriver ) { auto regularStepper = new G4DormandPrince745(pEquation); // *** ****************** @@ -248,13 +286,13 @@ G4ChordFinder::G4ChordFinder( G4MagneticField* theMagField, using SmallStepDriver = G4InterpolationDriver; using LargeStepDriver = G4IntegrationDriver; - fLongStepper = std::unique_ptr(new G4HelixHeum(pEquation)); + fLongStepper = std::make_unique(pEquation); fIntgrDriver = new G4BFieldIntegrationDriver( - std::unique_ptr(new SmallStepDriver(stepMinimum, - regularStepper, regularStepper->GetNumberOfVariables())), - std::unique_ptr(new LargeStepDriver(stepMinimum, - fLongStepper.get(), regularStepper->GetNumberOfVariables())) ); + std::make_unique(stepMinimum, + regularStepper, regularStepper->GetNumberOfVariables()), + std::make_unique(stepMinimum, + fLongStepper.get(), regularStepper->GetNumberOfVariables()) ); if( fIntgrDriver == nullptr) { @@ -266,6 +304,31 @@ G4ChordFinder::G4ChordFinder( G4MagneticField* theMagField, } } } + else if( useG4QSSDriver ) + { + if( stepperDriverId == kQss2DriverType ) + { + auto qssStepper2 = G4QSSDriverCreator::CreateQss2Stepper(pEquation); + if( gVerboseCtor ) + { + G4cout << "-- Created QSS-2 stepper" << G4endl; + } + fIntgrDriver = G4QSSDriverCreator::CreateDriver(qssStepper2); + } + else + { + auto qssStepper3 = G4QSSDriverCreator::CreateQss3Stepper(pEquation); + if( gVerboseCtor ) + { + G4cout << "-- Created QSS-3 stepper" << G4endl; + } + fIntgrDriver = G4QSSDriverCreator::CreateDriver(qssStepper3); + } + if( gVerboseCtor ) + { + G4cout << "-- G4ChordFinder: Using QSS Driver." << G4endl; + } + } else { auto fsalStepper= new NewFsalStepperType(pEquation); @@ -345,11 +408,11 @@ G4ChordFinder::G4ChordFinder( G4MagneticField* theMagField, assert( ( pItsStepper != nullptr ) || ( fRegularStepperOwned != nullptr ) || ( fNewFSALStepperOwned != nullptr ) + || useG4QSSDriver ); assert( fIntgrDriver != nullptr ); } - // ...................................................................... G4ChordFinder::~G4ChordFinder() diff --git a/source/geometry/magneticfield/src/G4DELPHIMagField.cc b/source/geometry/magneticfield/src/G4DELPHIMagField.cc index d4a2edaff5d..1ee1f1310bf 100644 --- a/source/geometry/magneticfield/src/G4DELPHIMagField.cc +++ b/source/geometry/magneticfield/src/G4DELPHIMagField.cc @@ -32,15 +32,11 @@ #include "globals.hh" #include "G4SystemOfUnits.hh" -G4DELPHIMagField::G4DELPHIMagField() -{ -} +G4DELPHIMagField::G4DELPHIMagField() = default; //////////////////////////////////////////////////////////////////////// -G4DELPHIMagField::~G4DELPHIMagField() -{ -} +G4DELPHIMagField::~G4DELPHIMagField() = default; /////////////////////////////////////////////////////////////////////// diff --git a/source/geometry/magneticfield/src/G4ElectricField.cc b/source/geometry/magneticfield/src/G4ElectricField.cc index 0161f24b6ca..9b21d4a0f7b 100644 --- a/source/geometry/magneticfield/src/G4ElectricField.cc +++ b/source/geometry/magneticfield/src/G4ElectricField.cc @@ -30,22 +30,15 @@ #include "G4ElectricField.hh" -G4ElectricField::G4ElectricField() -{ -} +G4ElectricField::G4ElectricField() = default; -G4ElectricField::~G4ElectricField() -{ -} +G4ElectricField::~G4ElectricField() = default; -G4ElectricField::G4ElectricField(const G4ElectricField& p) - : G4ElectroMagneticField(p) -{ -} +G4ElectricField::G4ElectricField(const G4ElectricField& p) = default; G4ElectricField& G4ElectricField::operator = (const G4ElectricField& p) { - if (&p == this) return *this; + if (&p == this) { return *this; } G4ElectroMagneticField::operator=(p); return *this; } diff --git a/source/geometry/magneticfield/src/G4ElectroMagneticField.cc b/source/geometry/magneticfield/src/G4ElectroMagneticField.cc index d1087059011..f651dad8083 100644 --- a/source/geometry/magneticfield/src/G4ElectroMagneticField.cc +++ b/source/geometry/magneticfield/src/G4ElectroMagneticField.cc @@ -35,19 +35,15 @@ G4ElectroMagneticField::G4ElectroMagneticField() { } -G4ElectroMagneticField::~G4ElectroMagneticField() -{ -} +G4ElectroMagneticField::~G4ElectroMagneticField() = default; -G4ElectroMagneticField::G4ElectroMagneticField(const G4ElectroMagneticField& r) - : G4Field( r ) // To allow extension to joint EM & g field -{ -} +G4ElectroMagneticField:: +G4ElectroMagneticField(const G4ElectroMagneticField& r) = default; G4ElectroMagneticField& G4ElectroMagneticField::operator = (const G4ElectroMagneticField& p) { - if (&p == this) return *this; + if (&p == this) { return *this; } G4Field::operator=(p); return *this; } diff --git a/source/geometry/magneticfield/src/G4EqEMFieldWithEDM.cc b/source/geometry/magneticfield/src/G4EqEMFieldWithEDM.cc index 8bb4a00076b..3ccfae46b7e 100644 --- a/source/geometry/magneticfield/src/G4EqEMFieldWithEDM.cc +++ b/source/geometry/magneticfield/src/G4EqEMFieldWithEDM.cc @@ -40,15 +40,11 @@ #include "G4SystemOfUnits.hh" G4EqEMFieldWithEDM::G4EqEMFieldWithEDM(G4ElectroMagneticField* emField ) - : G4EquationOfMotion( emField ), charge(0.), mass(0.), magMoment(0.), - spin(0.), fElectroMagCof(0.), fMassCof(0.), omegac(0.), - anomaly(0.0011659208), eta(0.), beta(0.), gamma(0.) + : G4EquationOfMotion( emField ) { } -G4EqEMFieldWithEDM::~G4EqEMFieldWithEDM() -{ -} +G4EqEMFieldWithEDM::~G4EqEMFieldWithEDM() = default; void G4EqEMFieldWithEDM::SetChargeMomentumMass(G4ChargeState particleCharge, @@ -68,8 +64,14 @@ G4EqEMFieldWithEDM::SetChargeMomentumMass(G4ChargeState particleCharge, G4double muB = 0.5*eplus*hbar_Planck/(mass/c_squared); G4double g_BMT; - if ( spin != 0. ) g_BMT = (std::abs(magMoment)/muB)/spin; - else g_BMT = 2.; + if ( spin != 0. ) + { + g_BMT = (std::abs(magMoment)/muB)/spin; + } + else + { + g_BMT = 2.; + } anomaly = (g_BMT - 2.)/2.; @@ -152,8 +154,14 @@ G4EqEMFieldWithEDM::EvaluateRhsGivenB(const G4double y[], G4ThreeVector Spin(y[9],y[10],y[11]); G4double pcharge; - if (charge == 0.) pcharge = 1.; - else pcharge = charge; + if (charge == 0.) + { + pcharge = 1.; + } + else + { + pcharge = charge; + } G4ThreeVector dSpin(0.,0.,0.); if (Spin.mag2() != 0.) diff --git a/source/geometry/magneticfield/src/G4EqEMFieldWithSpin.cc b/source/geometry/magneticfield/src/G4EqEMFieldWithSpin.cc index db40dc70f69..8336f1095bb 100644 --- a/source/geometry/magneticfield/src/G4EqEMFieldWithSpin.cc +++ b/source/geometry/magneticfield/src/G4EqEMFieldWithSpin.cc @@ -36,15 +36,11 @@ #include "G4SystemOfUnits.hh" G4EqEMFieldWithSpin::G4EqEMFieldWithSpin(G4ElectroMagneticField *emField ) - : G4EquationOfMotion( emField ), charge(0.), mass(0.), magMoment(0.), - spin(0.), fElectroMagCof(0.), fMassCof(0.), omegac(0.), - anomaly(0.0011659208), beta(0.), gamma(0.) + : G4EquationOfMotion( emField ) { } -G4EqEMFieldWithSpin::~G4EqEMFieldWithSpin() -{ -} +G4EqEMFieldWithSpin::~G4EqEMFieldWithSpin() = default; void G4EqEMFieldWithSpin::SetChargeMomentumMass(G4ChargeState particleCharge, @@ -64,8 +60,14 @@ G4EqEMFieldWithSpin::SetChargeMomentumMass(G4ChargeState particleCharge, G4double muB = 0.5*eplus*hbar_Planck/(mass/c_squared); G4double g_BMT; - if ( spin != 0. ) g_BMT = (std::abs(magMoment)/muB)/spin; - else g_BMT = 2.; + if ( spin != 0. ) + { + g_BMT = (std::abs(magMoment)/muB)/spin; + } + else + { + g_BMT = 2.; + } anomaly = (g_BMT - 2.)/2.; diff --git a/source/geometry/magneticfield/src/G4EqGravityField.cc b/source/geometry/magneticfield/src/G4EqGravityField.cc index a7ae809159f..8bdafb4435e 100644 --- a/source/geometry/magneticfield/src/G4EqGravityField.cc +++ b/source/geometry/magneticfield/src/G4EqGravityField.cc @@ -41,9 +41,7 @@ G4EqGravityField::G4EqGravityField(G4UniformGravityField* gField) { } -G4EqGravityField::~G4EqGravityField() -{ -} +G4EqGravityField::~G4EqGravityField() = default; void G4EqGravityField::SetChargeMomentumMass(G4ChargeState, diff --git a/source/geometry/magneticfield/src/G4EqMagElectricField.cc b/source/geometry/magneticfield/src/G4EqMagElectricField.cc index db83fd84a79..e4cec332e54 100644 --- a/source/geometry/magneticfield/src/G4EqMagElectricField.cc +++ b/source/geometry/magneticfield/src/G4EqMagElectricField.cc @@ -44,9 +44,7 @@ G4EqMagElectricField::G4EqMagElectricField(G4ElectroMagneticField* emField ) { } -G4EqMagElectricField::~G4EqMagElectricField() -{ -} +G4EqMagElectricField::~G4EqMagElectricField() = default; void G4EqMagElectricField::SetChargeMomentumMass(G4ChargeState particleCharge, diff --git a/source/geometry/magneticfield/src/G4EquationOfMotion.cc b/source/geometry/magneticfield/src/G4EquationOfMotion.cc index 92df47968dc..e4f4adfd979 100644 --- a/source/geometry/magneticfield/src/G4EquationOfMotion.cc +++ b/source/geometry/magneticfield/src/G4EquationOfMotion.cc @@ -35,6 +35,4 @@ G4EquationOfMotion::G4EquationOfMotion(G4Field* pField) { } -G4EquationOfMotion::~G4EquationOfMotion() -{ -} +G4EquationOfMotion::~G4EquationOfMotion() = default; diff --git a/source/geometry/magneticfield/src/G4ErrorMag_UsualEqRhs.cc b/source/geometry/magneticfield/src/G4ErrorMag_UsualEqRhs.cc index d3696a31c41..8529d9a6191 100644 --- a/source/geometry/magneticfield/src/G4ErrorMag_UsualEqRhs.cc +++ b/source/geometry/magneticfield/src/G4ErrorMag_UsualEqRhs.cc @@ -38,9 +38,7 @@ G4ErrorMag_UsualEqRhs::G4ErrorMag_UsualEqRhs( G4MagneticField* MagField ) { } -G4ErrorMag_UsualEqRhs::~G4ErrorMag_UsualEqRhs() -{ -} +G4ErrorMag_UsualEqRhs::~G4ErrorMag_UsualEqRhs() = default; //--------------------------------------------------------------------- diff --git a/source/geometry/magneticfield/src/G4ExactHelixStepper.cc b/source/geometry/magneticfield/src/G4ExactHelixStepper.cc index 9780afc956a..fd061c7a3a6 100644 --- a/source/geometry/magneticfield/src/G4ExactHelixStepper.cc +++ b/source/geometry/magneticfield/src/G4ExactHelixStepper.cc @@ -40,9 +40,7 @@ G4ExactHelixStepper::G4ExactHelixStepper(G4Mag_EqRhs* EqRhs) { } -G4ExactHelixStepper::~G4ExactHelixStepper() -{ -} +G4ExactHelixStepper::~G4ExactHelixStepper() = default; // --------------------------------------------------------------------------- diff --git a/source/geometry/magneticfield/src/G4ExplicitEuler.cc b/source/geometry/magneticfield/src/G4ExplicitEuler.cc index c82c168719b..2200ceb0f8c 100644 --- a/source/geometry/magneticfield/src/G4ExplicitEuler.cc +++ b/source/geometry/magneticfield/src/G4ExplicitEuler.cc @@ -51,9 +51,7 @@ G4ExplicitEuler::G4ExplicitEuler(G4EquationOfMotion* EqRhs, // // Destructor // -G4ExplicitEuler::~G4ExplicitEuler() -{ -} +G4ExplicitEuler::~G4ExplicitEuler() = default; /////////////////////////////////////////////////////////////////////// diff --git a/source/geometry/magneticfield/src/G4Field.cc b/source/geometry/magneticfield/src/G4Field.cc index f015af8c65a..c8a8a284558 100644 --- a/source/geometry/magneticfield/src/G4Field.cc +++ b/source/geometry/magneticfield/src/G4Field.cc @@ -35,21 +35,16 @@ G4Field::G4Field( G4bool gravityOn ) { } -G4Field::~G4Field() -{ -} +G4Field::~G4Field() = default; G4Field& G4Field::operator = (const G4Field& p) { - if (&p == this) return *this; + if (&p == this) { return *this; } fGravityActive= p.fGravityActive; return *this; } -G4Field::G4Field (const G4Field &p) - : fGravityActive(p.fGravityActive) -{ -} +G4Field::G4Field (const G4Field &p) = default; G4Field* G4Field::Clone() const { diff --git a/source/geometry/magneticfield/src/G4FieldManager.cc b/source/geometry/magneticfield/src/G4FieldManager.cc index 0285e49470b..6e3b3942484 100644 --- a/source/geometry/magneticfield/src/G4FieldManager.cc +++ b/source/geometry/magneticfield/src/G4FieldManager.cc @@ -66,7 +66,9 @@ G4FieldManager::G4FieldManager(G4Field* detectorField, } if( fVerboseConstruction) - G4cout << "G4FieldManager/ctor#1 fEpsilon Min/Max: eps_min = " << fEpsilonMin << " eps_max=" << fEpsilonMax << G4endl; + { + G4cout << "G4FieldManager/ctor#1 fEpsilon Min/Max: eps_min = " << fEpsilonMin << " eps_max=" << fEpsilonMax << G4endl; + } // Add to store // @@ -83,7 +85,9 @@ G4FieldManager::G4FieldManager(G4MagneticField* detectorField) fChordFinder = new G4ChordFinder( detectorField ); if( fVerboseConstruction ) - G4cout << "G4FieldManager/ctor#2 fEpsilon Min/Max: eps_min = " << fEpsilonMin << " eps_max=" << fEpsilonMax << G4endl; + { + G4cout << "G4FieldManager/ctor#2 fEpsilon Min/Max: eps_min = " << fEpsilonMin << " eps_max=" << fEpsilonMax << G4endl; + } // Add to store // G4FieldManagerStore::Register(this); @@ -256,7 +260,8 @@ G4bool G4FieldManager::SetMaximumEpsilonStep( G4double newEpsMax ) if( (newEpsMax > 0.0) && ( newEpsMax <= fMaxAcceptedEpsilon) && (fMinAcceptedEpsilon <= newEpsMax ) ) // (std::fabs(1.0+newEpsMax)>1.0) ) { - if(newEpsMax >= fEpsilonMin){ + if(newEpsMax >= fEpsilonMin) + { fEpsilonMax = newEpsMax; succeeded = true; if (fVerboseConstruction) @@ -264,7 +269,9 @@ G4bool G4FieldManager::SetMaximumEpsilonStep( G4double newEpsMax ) G4cout << "G4FieldManager/SetEpsMax : eps_max = " << std::setw(10) << fEpsilonMax << " ( Note: unchanged eps_min=" << std::setw(10) << fEpsilonMin << " )" << G4endl; } - } else { + } + else + { G4ExceptionDescription erm; erm << " Call to set eps_max = " << newEpsMax << " . The problem is that" << " its value must be at larger or equal to eps_min= " << fEpsilonMin << G4endl; @@ -307,7 +314,8 @@ G4bool G4FieldManager::SetMinimumEpsilonStep( G4double newEpsMin ) G4cout << "G4FieldManager/SetEpsMin : eps_min = " << std::setw(10) << fEpsilonMin << G4endl; } - if( fEpsilonMax < fEpsilonMin ){ + if( fEpsilonMax < fEpsilonMin ) + { // Ensure consistency G4ExceptionDescription erm; erm << "Setting eps_min = " << newEpsMin @@ -385,14 +393,18 @@ G4bool G4FieldManager::SetMaxAcceptedEpsilon(G4double maxAcceptValue, G4bool s << " is larger than the top of the range = " << fMaxFinalEpsilon << G4endl; if( softFailure ) - erm << " Using the latter value instead." << G4endl; + { + erm << " Using the latter value instead." << G4endl; + } erm << G4endl; erm << " Please adjust to request maxAccepted <= " << fMaxFinalEpsilon << G4endl << G4endl; - if( softFailure == false ) - erm << " NOTE: you can accept the ceiling value and turn this into a " - << " warning by using a 2nd argument " << G4endl - << " in your call to SetMaxAcceptedEpsilon: softFailure = true "; + if( !softFailure ) + { + erm << " NOTE: you can accept the ceiling value and turn this into a " + << " warning by using a 2nd argument " << G4endl + << " in your call to SetMaxAcceptedEpsilon: softFailure = true "; + } severity = softFailure ? JustWarning : FatalException; // if( softFailure ) severity= JustWarning; // else severity= FatalException; diff --git a/source/geometry/magneticfield/src/G4FieldManagerStore.cc b/source/geometry/magneticfield/src/G4FieldManagerStore.cc index 89f3a256846..fad9e727e0a 100644 --- a/source/geometry/magneticfield/src/G4FieldManagerStore.cc +++ b/source/geometry/magneticfield/src/G4FieldManagerStore.cc @@ -45,7 +45,6 @@ G4ThreadLocal G4bool G4FieldManagerStore::locked = false; // *************************************************************************** // G4FieldManagerStore::G4FieldManagerStore() - : std::vector() { reserve(100); } @@ -73,9 +72,9 @@ void G4FieldManagerStore::Clean() G4FieldManagerStore* store = GetInstance(); - for(auto pos=store->cbegin(); pos!=store->cend(); ++pos) + for(const auto & pos : *store) { - if (*pos) { delete *pos; } + if (pos != nullptr) { delete pos; } } locked = false; @@ -141,9 +140,9 @@ G4FieldManagerStore::ClearAllChordFindersState() { G4ChordFinder* pChordFnd; - for (auto i=GetInstance()->cbegin(); i!=GetInstance()->cend(); ++i) + for (const auto & mgr : *GetInstance()) { - pChordFnd = (*i)->GetChordFinder(); + pChordFnd = mgr->GetChordFinder(); if( pChordFnd != nullptr ) { pChordFnd->ResetStepEstimate(); diff --git a/source/geometry/magneticfield/src/G4FieldTrack.cc b/source/geometry/magneticfield/src/G4FieldTrack.cc index 2efafa8a6b9..6298618b659 100644 --- a/source/geometry/magneticfield/src/G4FieldTrack.cc +++ b/source/geometry/magneticfield/src/G4FieldTrack.cc @@ -129,7 +129,7 @@ G4FieldTrack::G4FieldTrack( const G4ThreeVector& pPosition, fChargeState.SetPDGSpin( pdgSpin ); G4ThreeVector PolarVec(0.0, 0.0, 0.0); - if( pPolarization ) { PolarVec= *pPolarization; } + if( pPolarization != nullptr ) { PolarVec= *pPolarization; } SetPolarization( PolarVec ); } diff --git a/source/geometry/magneticfield/src/G4HarmonicPolMagField.cc b/source/geometry/magneticfield/src/G4HarmonicPolMagField.cc index 5f63b9342ae..e19660e435a 100644 --- a/source/geometry/magneticfield/src/G4HarmonicPolMagField.cc +++ b/source/geometry/magneticfield/src/G4HarmonicPolMagField.cc @@ -31,9 +31,7 @@ #include "G4HarmonicPolMagField.hh" #include "globals.hh" -G4HarmonicPolMagField::G4HarmonicPolMagField() -{ -} +G4HarmonicPolMagField::G4HarmonicPolMagField() = default; G4HarmonicPolMagField* G4HarmonicPolMagField::Clone() const { @@ -42,9 +40,7 @@ G4HarmonicPolMagField* G4HarmonicPolMagField::Clone() const // ------------------------------------------------------------------- -G4HarmonicPolMagField::~G4HarmonicPolMagField() -{ -} +G4HarmonicPolMagField::~G4HarmonicPolMagField() = default; // ------------------------------------------------------------------- diff --git a/source/geometry/magneticfield/src/G4HelixExplicitEuler.cc b/source/geometry/magneticfield/src/G4HelixExplicitEuler.cc index 3df517a8a37..c2211974b8d 100644 --- a/source/geometry/magneticfield/src/G4HelixExplicitEuler.cc +++ b/source/geometry/magneticfield/src/G4HelixExplicitEuler.cc @@ -42,9 +42,7 @@ G4HelixExplicitEuler::G4HelixExplicitEuler(G4Mag_EqRhs* EqRhs) { } -G4HelixExplicitEuler::~G4HelixExplicitEuler() -{ -} +G4HelixExplicitEuler::~G4HelixExplicitEuler() = default; void G4HelixExplicitEuler::Stepper( const G4double yInput[], // [7] const G4double*, diff --git a/source/geometry/magneticfield/src/G4HelixHeum.cc b/source/geometry/magneticfield/src/G4HelixHeum.cc index 62f44771498..bb65cdae9cd 100644 --- a/source/geometry/magneticfield/src/G4HelixHeum.cc +++ b/source/geometry/magneticfield/src/G4HelixHeum.cc @@ -43,9 +43,7 @@ G4HelixHeum::G4HelixHeum(G4Mag_EqRhs* EqRhs) { } -G4HelixHeum::~G4HelixHeum() -{ -} +G4HelixHeum::~G4HelixHeum() = default; void G4HelixHeum::DumbStepper( const G4double yIn[], diff --git a/source/geometry/magneticfield/src/G4HelixImplicitEuler.cc b/source/geometry/magneticfield/src/G4HelixImplicitEuler.cc index 9c04253a520..c7bee0e6b1e 100644 --- a/source/geometry/magneticfield/src/G4HelixImplicitEuler.cc +++ b/source/geometry/magneticfield/src/G4HelixImplicitEuler.cc @@ -44,9 +44,7 @@ G4HelixImplicitEuler::G4HelixImplicitEuler(G4Mag_EqRhs *EqRhs) { } -G4HelixImplicitEuler::~G4HelixImplicitEuler() -{ -} +G4HelixImplicitEuler::~G4HelixImplicitEuler() = default; void G4HelixImplicitEuler::DumbStepper( const G4double yIn[], diff --git a/source/geometry/magneticfield/src/G4HelixMixedStepper.cc b/source/geometry/magneticfield/src/G4HelixMixedStepper.cc index be76fa7d2d0..015aa28074b 100644 --- a/source/geometry/magneticfield/src/G4HelixMixedStepper.cc +++ b/source/geometry/magneticfield/src/G4HelixMixedStepper.cc @@ -216,72 +216,73 @@ G4MagIntegratorStepper* G4HelixMixedStepper::SetupStepper(G4Mag_EqRhs* pE, G4int StepperNumber) { G4MagIntegratorStepper* pStepper; - if (fVerbose>0) G4cout << " G4HelixMixedStepper: "; + if (fVerbose>0) { G4cout << " G4HelixMixedStepper: "; +} switch ( StepperNumber ) { // Robust, classic method case 4: pStepper = new G4ClassicalRK4( pE ); - if (fVerbose>0) G4cout << "G4ClassicalRK4"; + if (fVerbose>0) { G4cout << "G4ClassicalRK4"; } break; // Steppers with embedded estimation of error case 8: pStepper = new G4CashKarpRKF45( pE ); - if (fVerbose>0) G4cout << "G4CashKarpRKF45"; + if (fVerbose>0) { G4cout << "G4CashKarpRKF45"; } break; case 13: pStepper = new G4NystromRK4( pE ); - if (fVerbose>0) G4cout << "G4NystromRK4"; + if (fVerbose>0) { G4cout << "G4NystromRK4"; } break; // Lowest order RK Stepper - experimental case 1: pStepper = new G4ImplicitEuler( pE ); - if (fVerbose>0) G4cout << "G4ImplicitEuler"; + if (fVerbose>0) { G4cout << "G4ImplicitEuler"; } break; // Lower order RK Steppers - ok overall, good for uneven fields case 2: pStepper = new G4SimpleRunge( pE ); - if (fVerbose>0) G4cout << "G4SimpleRunge"; + if (fVerbose>0) { G4cout << "G4SimpleRunge"; } break; case 3: pStepper = new G4SimpleHeum( pE ); - if (fVerbose>0) G4cout << "G4SimpleHeum"; + if (fVerbose>0) { G4cout << "G4SimpleHeum"; } break; case 23: pStepper = new G4BogackiShampine23( pE ); - if (fVerbose>0) G4cout << "G4BogackiShampine23"; + if (fVerbose>0) { G4cout << "G4BogackiShampine23"; } break; // Higher order RK Steppers // for smoother fields and high accuracy requirements case 45: pStepper = new G4BogackiShampine45( pE ); - if (fVerbose>0) G4cout << "G4BogackiShampine45"; + if (fVerbose>0) { G4cout << "G4BogackiShampine45"; } break; case 145: pStepper = new G4TsitourasRK45( pE ); - if (fVerbose>0) G4cout << "G4TsitourasRK45"; + if (fVerbose>0) { G4cout << "G4TsitourasRK45"; } break; case 745: pStepper = new G4DormandPrince745( pE ); - if (fVerbose>0) G4cout << "G4DormandPrince745"; + if (fVerbose>0) { G4cout << "G4DormandPrince745"; } break; // Helical Steppers case 6: pStepper = new G4HelixImplicitEuler( pE ); - if (fVerbose>0) G4cout << "G4HelixImplicitEuler"; + if (fVerbose>0) { G4cout << "G4HelixImplicitEuler"; } break; case 7: pStepper = new G4HelixSimpleRunge( pE ); - if (fVerbose>0) G4cout << "G4HelixSimpleRunge"; + if (fVerbose>0) { G4cout << "G4HelixSimpleRunge"; } break; case 5: pStepper = new G4HelixExplicitEuler( pE ); - if (fVerbose>0) G4cout << "G4HelixExplicitEuler"; + if (fVerbose>0) { G4cout << "G4HelixExplicitEuler"; } break; // Since Helix Explicit is used for long steps, // this is useful only to measure overhead. // Exact Helix - likely good only for cases of @@ -289,28 +290,28 @@ G4HelixMixedStepper::SetupStepper(G4Mag_EqRhs* pE, G4int StepperNumber) // ii) segmented uniform field (maybe) case 9: pStepper = new G4ExactHelixStepper( pE ); - if (fVerbose>0) G4cout << "G4ExactHelixStepper"; + if (fVerbose>0) { G4cout << "G4ExactHelixStepper"; } break; case 10: pStepper = new G4RKG3_Stepper( pE ); - if (fVerbose>0) G4cout << "G4RKG3_Stepper"; + if (fVerbose>0) { G4cout << "G4RKG3_Stepper"; } break; // Low Order Steppers - not good except for very weak fields case 11: pStepper = new G4ExplicitEuler( pE ); - if (fVerbose>0) G4cout << "G4ExplicitEuler"; + if (fVerbose>0) { G4cout << "G4ExplicitEuler"; } break; case 12: pStepper = new G4ImplicitEuler( pE ); - if (fVerbose>0) G4cout << "G4ImplicitEuler"; + if (fVerbose>0) { G4cout << "G4ImplicitEuler"; } break; case 0: case -1: default: pStepper = new G4DormandPrince745( pE ); // Was G4ClassicalRK4( pE ); - if (fVerbose>0) G4cout << "G4DormandPrince745 (Default)"; + if (fVerbose>0) { G4cout << "G4DormandPrince745 (Default)"; } break; } diff --git a/source/geometry/magneticfield/src/G4HelixSimpleRunge.cc b/source/geometry/magneticfield/src/G4HelixSimpleRunge.cc index e8506fb60a4..f65862028e3 100644 --- a/source/geometry/magneticfield/src/G4HelixSimpleRunge.cc +++ b/source/geometry/magneticfield/src/G4HelixSimpleRunge.cc @@ -43,9 +43,7 @@ G4HelixSimpleRunge::G4HelixSimpleRunge(G4Mag_EqRhs* EqRhs) { } -G4HelixSimpleRunge::~G4HelixSimpleRunge() -{ -} +G4HelixSimpleRunge::~G4HelixSimpleRunge() = default; void G4HelixSimpleRunge::DumbStepper( const G4double yIn[], diff --git a/source/geometry/magneticfield/src/G4LineCurrentMagField.cc b/source/geometry/magneticfield/src/G4LineCurrentMagField.cc index 0f0d74a8275..47d3ec9f969 100644 --- a/source/geometry/magneticfield/src/G4LineCurrentMagField.cc +++ b/source/geometry/magneticfield/src/G4LineCurrentMagField.cc @@ -45,9 +45,7 @@ G4Field* G4LineCurrentMagField::Clone() const // ----------------------------------------------------------------- -G4LineCurrentMagField::~G4LineCurrentMagField() -{ -} +G4LineCurrentMagField::~G4LineCurrentMagField() = default; // ----------------------------------------------------------------- diff --git a/source/geometry/magneticfield/src/G4LineSection.cc b/source/geometry/magneticfield/src/G4LineSection.cc index 37a31812278..6153a7ece33 100644 --- a/source/geometry/magneticfield/src/G4LineSection.cc +++ b/source/geometry/magneticfield/src/G4LineSection.cc @@ -37,7 +37,7 @@ G4LineSection::G4LineSection( const G4ThreeVector& PntA, fABdistanceSq = VecAtoB.mag2(); } -G4double G4LineSection::Dist( G4ThreeVector OtherPnt ) const +G4double G4LineSection::Dist( const G4ThreeVector& OtherPnt ) const { G4double dist_sq; G4ThreeVector VecAZ; @@ -80,7 +80,10 @@ G4double G4LineSection::Dist( G4ThreeVector OtherPnt ) const { dist_sq = (OtherPnt - EndpointA).mag2() ; } - if( dist_sq < 0.0 ) dist_sq = 0.0 ; + if( dist_sq < 0.0 ) + { + dist_sq = 0.0 ; + } return std::sqrt(dist_sq) ; } diff --git a/source/geometry/magneticfield/src/G4MagHelicalStepper.cc b/source/geometry/magneticfield/src/G4MagHelicalStepper.cc index fb5afea1aab..90649581b8e 100644 --- a/source/geometry/magneticfield/src/G4MagHelicalStepper.cc +++ b/source/geometry/magneticfield/src/G4MagHelicalStepper.cc @@ -49,13 +49,11 @@ G4MagHelicalStepper::G4MagHelicalStepper(G4Mag_EqRhs *EqRhs) { } -G4MagHelicalStepper::~G4MagHelicalStepper() -{ -} +G4MagHelicalStepper::~G4MagHelicalStepper() = default; void G4MagHelicalStepper::AdvanceHelix( const G4double yIn[], - G4ThreeVector Bfld, + const G4ThreeVector& Bfld, G4double h, G4double yHelix[], G4double yHelix2[] ) @@ -153,7 +151,7 @@ G4MagHelicalStepper::AdvanceHelix( const G4double yIn[], // Store 2*h step Helix if exist - if(yHelix2) + if(yHelix2 != nullptr) { SinT2 = 2.0 * SinT * CosT; CosT2 = 1.0 - 2.0 * SinT * SinT; @@ -242,15 +240,13 @@ G4MagHelicalStepper::DistChord() const { return GetRadHelix()*(1-std::cos(0.5*Ang)); } - else + + if(Ang (1.0 + 1.05 * maxRelError) * h; if( isNewMax ) { maxRelError= endPointDist / h - 1.0; } - if( dbg && (h > G4GeometryTolerance::GetInstance()->GetSurfaceTolerance()) + if( (dbg != 0) && (h > G4GeometryTolerance::GetInstance()->GetSurfaceTolerance()) && ( (dbg>1) || prNewMax || (endPointDist >= h*(1.+eps) ) ) ) { static G4ThreadLocal G4int noWarnings = 0; diff --git a/source/geometry/magneticfield/src/G4Mag_EqRhs.cc b/source/geometry/magneticfield/src/G4Mag_EqRhs.cc index 00823c4e922..04fa1ce4d45 100644 --- a/source/geometry/magneticfield/src/G4Mag_EqRhs.cc +++ b/source/geometry/magneticfield/src/G4Mag_EqRhs.cc @@ -41,9 +41,7 @@ G4Mag_EqRhs::G4Mag_EqRhs( G4MagneticField* magField ) { } -G4Mag_EqRhs::~G4Mag_EqRhs() -{ -} +G4Mag_EqRhs::~G4Mag_EqRhs() = default; void G4Mag_EqRhs::SetChargeMomentumMass( G4ChargeState particleCharge, diff --git a/source/geometry/magneticfield/src/G4Mag_SpinEqRhs.cc b/source/geometry/magneticfield/src/G4Mag_SpinEqRhs.cc index 92b4da67683..289967c73ca 100644 --- a/source/geometry/magneticfield/src/G4Mag_SpinEqRhs.cc +++ b/source/geometry/magneticfield/src/G4Mag_SpinEqRhs.cc @@ -39,9 +39,7 @@ G4Mag_SpinEqRhs::G4Mag_SpinEqRhs( G4MagneticField* MagField ) { } -G4Mag_SpinEqRhs::~G4Mag_SpinEqRhs() -{ -} +G4Mag_SpinEqRhs::~G4Mag_SpinEqRhs() = default; void G4Mag_SpinEqRhs::SetChargeMomentumMass(G4ChargeState particleCharge, @@ -60,8 +58,14 @@ G4Mag_SpinEqRhs::SetChargeMomentumMass(G4ChargeState particleCharge, G4double muB = 0.5*eplus*hbar_Planck/(mass/c_squared); G4double g_BMT; - if ( spin != 0. ) g_BMT = (std::abs(magMoment)/muB)/spin; - else g_BMT = 2.; + if ( spin != 0. ) + { + g_BMT = (std::abs(magMoment)/muB)/spin; + } + else + { + g_BMT = 2.; + } anomaly = (g_BMT - 2.)/2.; diff --git a/source/geometry/magneticfield/src/G4Mag_UsualEqRhs.cc b/source/geometry/magneticfield/src/G4Mag_UsualEqRhs.cc index 9e497a9fc92..d61d069102c 100644 --- a/source/geometry/magneticfield/src/G4Mag_UsualEqRhs.cc +++ b/source/geometry/magneticfield/src/G4Mag_UsualEqRhs.cc @@ -38,9 +38,7 @@ G4Mag_UsualEqRhs::G4Mag_UsualEqRhs( G4MagneticField* MagField ) { } -G4Mag_UsualEqRhs::~G4Mag_UsualEqRhs() -{ -} +G4Mag_UsualEqRhs::~G4Mag_UsualEqRhs() = default; void G4Mag_UsualEqRhs::EvaluateRhsGivenB( const G4double y[], diff --git a/source/geometry/magneticfield/src/G4MagneticField.cc b/source/geometry/magneticfield/src/G4MagneticField.cc index 7ff5fbad576..cedba4c9596 100644 --- a/source/geometry/magneticfield/src/G4MagneticField.cc +++ b/source/geometry/magneticfield/src/G4MagneticField.cc @@ -35,9 +35,7 @@ G4MagneticField::G4MagneticField() { } -G4MagneticField::~G4MagneticField() -{ -} +G4MagneticField::~G4MagneticField() = default; G4MagneticField::G4MagneticField(const G4MagneticField& ) : G4Field( false ) @@ -46,7 +44,7 @@ G4MagneticField::G4MagneticField(const G4MagneticField& ) G4MagneticField& G4MagneticField::operator = (const G4MagneticField& p) { - if (&p == this) return *this; + if (&p == this) { return *this; } G4Field::operator=(p); return *this; } diff --git a/source/geometry/magneticfield/src/G4MonopoleEq.cc b/source/geometry/magneticfield/src/G4MonopoleEq.cc index 66e610a9dd6..5c13c2b95c5 100644 --- a/source/geometry/magneticfield/src/G4MonopoleEq.cc +++ b/source/geometry/magneticfield/src/G4MonopoleEq.cc @@ -38,9 +38,7 @@ G4MonopoleEq::G4MonopoleEq(G4ElectroMagneticField* emField ) { } -G4MonopoleEq::~G4MonopoleEq() -{ -} +G4MonopoleEq::~G4MonopoleEq() = default; void G4MonopoleEq::SetChargeMomentumMass(G4ChargeState particleCharge, // e+ units diff --git a/source/geometry/magneticfield/src/G4NystromRK4.cc b/source/geometry/magneticfield/src/G4NystromRK4.cc index 9dca5fd86ee..50c9a62007c 100644 --- a/source/geometry/magneticfield/src/G4NystromRK4.cc +++ b/source/geometry/magneticfield/src/G4NystromRK4.cc @@ -29,6 +29,8 @@ // Adaptations: J.Apostolakis, November 2009 // ------------------------------------------------------------------- +#include + #include "G4NystromRK4.hh" #include "G4Exception.hh" @@ -193,10 +195,9 @@ void G4NystromRK4::SetDistanceForConstantField(G4double length) "Nystrom 001", JustWarning, "Provided field is not G4CachedMagneticField. Changing field type."); - fCachedField = std::unique_ptr( - new G4CachedMagneticField( + fCachedField = std::make_unique( dynamic_cast(GetEquationOfMotion()->GetFieldObj()), - length)); + length); GetEquationOfMotion()->SetFieldObj(fCachedField.get()); } diff --git a/source/geometry/magneticfield/src/G4OldMagIntDriver.cc b/source/geometry/magneticfield/src/G4OldMagIntDriver.cc index 0dae41de9db..9b1c82c8e04 100644 --- a/source/geometry/magneticfield/src/G4OldMagIntDriver.cc +++ b/source/geometry/magneticfield/src/G4OldMagIntDriver.cc @@ -136,16 +136,14 @@ G4OldMagIntDriver::AccurateAdvance(G4FieldTrack& y_current, "GeomField1001", JustWarning, message); return succeeded; } - else - { - std::ostringstream message; - message << "Invalid run condition." << G4endl - << "Proposed step is negative; hstep = " << hstep << "." << G4endl - << "Requested step cannot be negative! Aborting event."; - G4Exception("G4OldMagIntDriver::AccurateAdvance()", - "GeomField0003", EventMustBeAborted, message); - return false; - } + + std::ostringstream message; + message << "Invalid run condition." << G4endl + << "Proposed step is negative; hstep = " << hstep << "." << G4endl + << "Requested step cannot be negative! Aborting event."; + G4Exception("G4OldMagIntDriver::AccurateAdvance()", + "GeomField0003", EventMustBeAborted, message); + return false; } y_current.DumpToArray( ystart ); @@ -455,7 +453,7 @@ G4OldMagIntDriver::WarnEndPointTooFar (G4double endPointDist, prNewMax = endPointDist > (1.0 + 1.05 * maxRelError) * h; if( isNewMax ) { maxRelError= endPointDist / h - 1.0; } - if( dbg && (h > G4GeometryTolerance::GetInstance()->GetSurfaceTolerance()) + if( (dbg != 0) && (h > G4GeometryTolerance::GetInstance()->GetSurfaceTolerance()) && ( (dbg>1) || prNewMax || (endPointDist >= h*(1.+eps) ) ) ) { static G4ThreadLocal G4int noWarnings = 0; diff --git a/source/geometry/magneticfield/src/G4QSS3.cc b/source/geometry/magneticfield/src/G4QSS3.cc new file mode 100644 index 00000000000..2a47daeb75d --- /dev/null +++ b/source/geometry/magneticfield/src/G4QSS3.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. * +// ******************************************************************** +// +// QSS3 implementation +// +// Author: Lucio Santi - 2020-2021. +// -------------------------------------------------------------------- + +#include "G4QSS3.hh" + +G4QSS3::G4QSS3(QSS_simulator sim) + : simulator(sim) +{ +} + +void G4QSS3::recompute_next_times(G4int *inf, G4double t) +{ + G4int i; + G4double *x = simulator->x; + G4double *q = simulator->q; + G4double *lqu = simulator->lqu; + G4double *time = simulator->nextStateTime; + G4double coeff[4]; + + for(i = 0; i < 3; i++) + { + const G4int var = inf[i], + cf0 = 4*var, + cf1 = cf0 + 1, + cf2 = cf1 + 1, + cf3 = cf2 + 1; + + if(std::fabs(q[cf0] - x[cf0]) >= lqu[var]) + { + time[var] = t; + } + else + { + coeff[0] = q[cf0] + lqu[var] - x[cf0]; + coeff[1] = q[cf1] - x[cf1]; + coeff[2] = q[cf2] - x[cf2]; + coeff[3] = -x[cf3]; + time[var] = t + min_pos_root_3_alt(coeff, q[cf0] - lqu[var] - x[cf0]); + } + } +} diff --git a/source/geometry/magneticfield/src/G4QSSDriverCreator.cc b/source/geometry/magneticfield/src/G4QSSDriverCreator.cc new file mode 100644 index 00000000000..da70661543d --- /dev/null +++ b/source/geometry/magneticfield/src/G4QSSDriverCreator.cc @@ -0,0 +1,108 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// G4QSSDriverCreator implementation +// +// Author: J.Apostolakis - October 2021 - February 2023 +// -------------------------------------------------------------------- + +#include "G4QSSDriverCreator.hh" + +#include "G4MagIntegratorStepper.hh" +#include "G4VIntegrationDriver.hh" + +#include "G4QSSDriver.hh" +#include "G4QSStepper.hh" +#include "G4QSS2.hh" +#include "G4QSS3.hh" + +#include "G4Mag_UsualEqRhs.hh" + +#include + +G4VIntegrationDriver* +G4QSSDriverCreator::CreateDriver( G4MagIntegratorStepper* pStepper, G4double /*stepMin*/ ) +{ + G4VIntegrationDriver* driver = nullptr; +// pStepper->build_driver(stepMinimum, true); // Original - QSS + auto qss2stepper = dynamic_cast*>(pStepper); + if( qss2stepper != nullptr ) { + // driver = new G4QSSDriver>(qss2stepper); + driver = CreateDriver( qss2stepper ); + } + auto qss3stepper = dynamic_cast*>(pStepper); + if( qss3stepper != nullptr ) { + // driver = new G4QSSDriver>(qss3stepper); + driver= CreateDriver( qss3stepper ); + } + return driver; +} + +G4QSSDriver>* + G4QSSDriverCreator::CreateDriver( G4QSStepper* qss2stepper ) +{ + G4cout << "---- G4QSSDriver* G4QSSDriverCreator::CreateDriver(G4QSStepper* ) called.\n"; + return new G4QSSDriver>(qss2stepper); +} + +static constexpr G4int numOfVars= 6; + +G4QSSDriver>* + G4QSSDriverCreator::CreateDriver( G4QSStepper* qss3stepper ) +{ + G4cout << "---- G4QSSDriver* G4QSSDriverCreator::CreateDriver(G4QSStepper* ) called.\n"; + return new G4QSSDriver>(qss3stepper); +} + +G4QSStepper* G4QSSDriverCreator::G4QSSDriverCreator::CreateQss2Stepper(G4Mag_EqRhs* Equation) +{ + G4cout << "---- G4QSStepper* CreateQss2Stepper(G4Mag_EqRhs* ) CALLED\n"; + return G4QSStepper::build_QSS2( Equation, numOfVars, true); +} + +G4QSStepper* G4QSSDriverCreator::CreateQss3Stepper(G4Mag_EqRhs* Equation) +{ + G4cout << "---- G4QSStepper* CreateQss3Stepper(G4Mag_EqRhs* ) CALLED\n"; + return G4QSStepper::build_QSS3( Equation, numOfVars, true); +} + +G4VIntegrationDriver* G4QSSDriverCreator::CreateQss2Driver(G4Mag_EqRhs* Equation) +{ + assert( dynamic_cast(Equation) != nullptr ); + // assert( Equation->GetNumberOfVariables() == numOfVars ); + + auto qss2stepper = G4QSStepper::build_QSS2( Equation, numOfVars, true); + return CreateDriver( qss2stepper ); +} + +G4VIntegrationDriver* G4QSSDriverCreator:: +CreateQss3Driver(G4Mag_EqRhs *Equation) +{ + assert( dynamic_cast(Equation) != nullptr ); + // assert( Equation->GetNumberOfVariables() == numOfVars ); + + auto qss3stepper = G4QSStepper::build_QSS3( Equation, numOfVars, true); + return CreateDriver( qss3stepper ); +} diff --git a/source/geometry/magneticfield/src/G4QSSMessenger.cc b/source/geometry/magneticfield/src/G4QSSMessenger.cc new file mode 100644 index 00000000000..78c55831e25 --- /dev/null +++ b/source/geometry/magneticfield/src/G4QSSMessenger.cc @@ -0,0 +1,107 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// G4QSSMessenger implementation +// +// Author: Leandro Gomez Vidal - October 2021. +// -------------------------------------------------------------------- + +#include "G4QSSMessenger.hh" + +G4QSSMessenger::G4QSSMessenger() +{ + commandsShouldBeInMaster = true; + + qssCmdDir = new G4UIdirectory("/QSS/", false); + qssCmdDir->SetGuidance("G4QSStepper configuration."); + + dQMinCmd = new G4UIcmdWithADoubleAndUnit("/QSS/dQMin",this); + dQMinCmd->SetDefaultUnit("mm"); + dQMinCmd->SetParameterName("dQMinCmd",false); + dQMinCmd->SetUnitCategory("Length"); + + dQRelCmd = new G4UIcmdWithADouble("/QSS/dQRel",this); + dQRelCmd->SetGuidance("Default is 1e-5"); + dQRelCmd->SetParameterName("dQRelCmd",false); + + trialProposedStepModifierCmd = new G4UIcmdWithADouble("/QSS/trialProposedStepModifier",this); + trialProposedStepModifierCmd->SetGuidance("Default is 1"); + trialProposedStepModifierCmd->SetParameterName("trialProposedStepModifier", false); + + stepperSelectorCmd = new G4UIcmdWithAString("/QSS/selectStepper",this); + stepperSelectorCmd->SetGuidance("Select stepper."); + stepperSelectorCmd->SetParameterName("choice", false); + stepperSelectorCmd->SetCandidates("TemplatedDoPri OldRK45 G4QSS2"); + +} + +G4QSSMessenger::~G4QSSMessenger() +{ + delete qssCmdDir; + delete dQMinCmd; + delete dQRelCmd; + delete stepperSelectorCmd; + delete trialProposedStepModifierCmd; + //qssStats.print(); +} + +G4QSSMessenger* G4QSSMessenger::instance() +{ + static G4QSSMessenger theSingleMessengerInstance; + return &theSingleMessengerInstance; +} + +void G4QSSMessenger::SetNewValue(G4UIcommand *command, G4String newValue) +{ + if ( command == dQMinCmd ) { + dQMin = dQMinCmd->GetNewDoubleValue(newValue); + } + + if ( command == dQRelCmd ) { + dQRel = dQRelCmd->GetNewDoubleValue(newValue); + } + + if ( command == trialProposedStepModifierCmd ) { + trialProposedStepModifier = trialProposedStepModifierCmd->GetNewDoubleValue(newValue); + } + + if(command == stepperSelectorCmd){ + this->selectStepper(newValue); + } + +} + +void G4QSSMessenger::selectStepper(const std::string &newValue) +{ + const std::map stepperMapping = + {{"TemplatedDoPri", TemplatedDoPri}, {"OldRK45", OldRK45}, {"G4QSS2", G4QSS2}}; + _selectedStepper = stepperMapping.at(newValue); + G4cout << "G4QSSMessenger: Selecting stepper " << newValue << G4endl; +} + +G4QSSMessenger::StepperSelection G4QSSMessenger::selectedStepper() +{ + return _selectedStepper; +} diff --git a/source/geometry/magneticfield/src/G4QSStepper.cc b/source/geometry/magneticfield/src/G4QSStepper.cc new file mode 100644 index 00000000000..a5e6e0e5699 --- /dev/null +++ b/source/geometry/magneticfield/src/G4QSStepper.cc @@ -0,0 +1,65 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// G4QSStepper implementation +// +// Authors: Lucio Santi, Rodrigo Castro - 2018-2021. +// -------------------------------------------------------------------- + +#include "G4QSStepper.hh" + +template<> +G4QSStepper_QSS3::G4QSStepper(G4EquationOfMotion *EqRhs, + G4int numberOfVariables, + G4bool primary) + : G4QSStepper(new G4QSS3(G4QSStepper_QSS3::build_simulator()), + EqRhs, numberOfVariables, primary) +{ +} + +template<> +G4QSStepper_QSS2::G4QSStepper(G4EquationOfMotion *EqRhs, + G4int numberOfVariables, + G4bool primary) + : G4QSStepper(new G4QSS2(G4QSStepper_QSS2::build_simulator()), + EqRhs, numberOfVariables, primary) +{ +} + +template<> +G4QSStepper_QSS2 *G4QSStepper_QSS2::build_QSS2(G4EquationOfMotion *EqRhs, + G4int noIntegrationVariables, + G4bool primary) +{ + return new G4QSStepper(EqRhs, noIntegrationVariables, primary); +} + +template<> +G4QSStepper_QSS3 *G4QSStepper_QSS3::build_QSS3(G4EquationOfMotion *EqRhs, + G4int noIntegrationVariables, + G4bool primary) +{ + return new G4QSStepper(EqRhs, noIntegrationVariables, primary); +} diff --git a/source/geometry/magneticfield/src/G4QuadrupoleMagField.cc b/source/geometry/magneticfield/src/G4QuadrupoleMagField.cc index f72d18f174c..62c23933281 100644 --- a/source/geometry/magneticfield/src/G4QuadrupoleMagField.cc +++ b/source/geometry/magneticfield/src/G4QuadrupoleMagField.cc @@ -46,7 +46,7 @@ G4QuadrupoleMagField::G4QuadrupoleMagField(G4double pGradient) // ------------------------------------------------------------------- G4QuadrupoleMagField::G4QuadrupoleMagField(G4double pGradient, - G4ThreeVector pOrigin, + const G4ThreeVector& pOrigin, G4RotationMatrix* pMatrix) { fGradient = pGradient ; @@ -63,9 +63,7 @@ G4Field* G4QuadrupoleMagField::Clone() const // ------------------------------------------------------------------- -G4QuadrupoleMagField::~G4QuadrupoleMagField() -{ -} +G4QuadrupoleMagField::~G4QuadrupoleMagField() = default; // ------------------------------------------------------------------- diff --git a/source/geometry/magneticfield/src/G4RK547FEq1.cc b/source/geometry/magneticfield/src/G4RK547FEq1.cc index 21861299992..244cf785c3d 100644 --- a/source/geometry/magneticfield/src/G4RK547FEq1.cc +++ b/source/geometry/magneticfield/src/G4RK547FEq1.cc @@ -92,40 +92,54 @@ void G4RK547FEq1::makeStep( const G4double yInput[], // RightHandSide(yInput, dydx); for(G4int i = 0; i < GetNumberOfVariables(); ++i) - yTemp[i] = yInput[i] + hstep * b21 * dydx[i]; + { + yTemp[i] = yInput[i] + hstep * b21 * dydx[i]; + } RightHandSide(yTemp, ak2); for(G4int i = 0; i < GetNumberOfVariables(); ++i) - yTemp[i] = yInput[i] + hstep * (b31 * dydx[i] + b32 * ak2[i]); + { + yTemp[i] = yInput[i] + hstep * (b31 * dydx[i] + b32 * ak2[i]); + } RightHandSide(yTemp, ak3); for(G4int i = 0;i < GetNumberOfVariables(); ++i) - yTemp[i] = yInput[i] + hstep * (b41 * dydx[i] + b42 * ak2[i] + - b43 * ak3[i]); + { + yTemp[i] = yInput[i] + hstep * (b41 * dydx[i] + b42 * ak2[i] + + b43 * ak3[i]); + } RightHandSide(yTemp, ak4); for(G4int i = 0; i < GetNumberOfVariables(); ++i) - yTemp[i] = yInput[i] + hstep * (b51 * dydx[i] + b52 * ak2[i] + - b53 * ak3[i] + b54 * ak4[i]); + { + yTemp[i] = yInput[i] + hstep * (b51 * dydx[i] + b52 * ak2[i] + + b53 * ak3[i] + b54 * ak4[i]); + } RightHandSide(yTemp, ak5); for(G4int i = 0; i < GetNumberOfVariables(); ++i) - yTemp[i] = yInput[i] + hstep * (b61 * dydx[i] + b62 * ak2[i] + - b63 * ak3[i] + b64 * ak4[i] + - b65 * ak5[i]); + { + yTemp[i] = yInput[i] + hstep * (b61 * dydx[i] + b62 * ak2[i] + + b63 * ak3[i] + b64 * ak4[i] + + b65 * ak5[i]); + } RightHandSide(yTemp, ak6); for(G4int i = 0; i < GetNumberOfVariables(); ++i) - yOutput[i] = yInput[i] + hstep * (b71 * dydx[i] + b72 * ak2[i] + - b73 * ak3[i] + b74 * ak4[i] + - b75 * ak5[i] + b76 * ak6[i]); - if (dydxOutput && yError) + { + yOutput[i] = yInput[i] + hstep * (b71 * dydx[i] + b72 * ak2[i] + + b73 * ak3[i] + b74 * ak4[i] + + b75 * ak5[i] + b76 * ak6[i]); + } + if ((dydxOutput != nullptr) && (yError != nullptr)) { RightHandSide(yOutput, dydxOutput); for(G4int i = 0; i < GetNumberOfVariables(); ++i) - yError[i] = hstep * (dc1 * dydx[i] + dc2 * ak2[i] + dc3 * ak3[i] + - dc4 * ak4[i] + dc5 * ak5[i] + dc6 * ak6[i] + - dc7 * dydxOutput[i]); + { + yError[i] = hstep * (dc1 * dydx[i] + dc2 * ak2[i] + dc3 * ak3[i] + + dc4 * ak4[i] + dc5 * ak5[i] + dc6 * ak6[i] + + dc7 * dydxOutput[i]); + } } } diff --git a/source/geometry/magneticfield/src/G4RK547FEq2.cc b/source/geometry/magneticfield/src/G4RK547FEq2.cc index 13d1dc95cd3..708b98803be 100644 --- a/source/geometry/magneticfield/src/G4RK547FEq2.cc +++ b/source/geometry/magneticfield/src/G4RK547FEq2.cc @@ -94,40 +94,54 @@ void G4RK547FEq2::makeStep( const G4double yInput[], // RightHandSide(yInput, dydx); for(G4int i = 0; i < GetNumberOfVariables(); ++i) - yTemp[i] = yInput[i] + hstep * b21 * dydx[i]; + { + yTemp[i] = yInput[i] + hstep * b21 * dydx[i]; + } RightHandSide(yTemp, ak2); for(G4int i = 0; i < GetNumberOfVariables(); ++i) - yTemp[i] = yInput[i] + hstep * (b31 * dydx[i] + b32 * ak2[i]); + { + yTemp[i] = yInput[i] + hstep * (b31 * dydx[i] + b32 * ak2[i]); + } RightHandSide(yTemp, ak3); for(G4int i = 0;i < GetNumberOfVariables(); ++i) - yTemp[i] = yInput[i] + hstep * (b41 * dydx[i] + b42 * ak2[i] + - b43 * ak3[i]); + { + yTemp[i] = yInput[i] + hstep * (b41 * dydx[i] + b42 * ak2[i] + + b43 * ak3[i]); + } RightHandSide(yTemp, ak4); for(G4int i = 0; i < GetNumberOfVariables(); ++i) - yTemp[i] = yInput[i] + hstep * (b51 * dydx[i] + b52 * ak2[i] + - b53 * ak3[i] + b54 * ak4[i]); + { + yTemp[i] = yInput[i] + hstep * (b51 * dydx[i] + b52 * ak2[i] + + b53 * ak3[i] + b54 * ak4[i]); + } RightHandSide(yTemp, ak5); for(G4int i = 0; i < GetNumberOfVariables(); ++i) - yTemp[i] = yInput[i] + hstep * (b61 * dydx[i] + b62 * ak2[i] + - b63 * ak3[i] + b64 * ak4[i] + - b65 * ak5[i]); + { + yTemp[i] = yInput[i] + hstep * (b61 * dydx[i] + b62 * ak2[i] + + b63 * ak3[i] + b64 * ak4[i] + + b65 * ak5[i]); + } RightHandSide(yTemp, ak6); for(G4int i = 0; i < GetNumberOfVariables(); ++i) - yOutput[i] = yInput[i] + hstep * (b71 * dydx[i] + b72 * ak2[i] + - b73 * ak3[i] + b74 * ak4[i] + - b75 * ak5[i] + b76 * ak6[i]); - if (dydxOutput && yError) + { + yOutput[i] = yInput[i] + hstep * (b71 * dydx[i] + b72 * ak2[i] + + b73 * ak3[i] + b74 * ak4[i] + + b75 * ak5[i] + b76 * ak6[i]); + } + if ((dydxOutput != nullptr) && (yError != nullptr)) { RightHandSide(yOutput, dydxOutput); for(G4int i = 0; i < GetNumberOfVariables(); ++i) - yError[i] = hstep * (dc1 * dydx[i] + dc2 * ak2[i] + dc3 * ak3[i] + - dc4 * ak4[i] + dc5 * ak5[i] + dc6 * ak6[i] + - dc7 * dydxOutput[i]); + { + yError[i] = hstep * (dc1 * dydx[i] + dc2 * ak2[i] + dc3 * ak3[i] + + dc4 * ak4[i] + dc5 * ak5[i] + dc6 * ak6[i] + + dc7 * dydxOutput[i]); + } } } diff --git a/source/geometry/magneticfield/src/G4RK547FEq3.cc b/source/geometry/magneticfield/src/G4RK547FEq3.cc index 7e00a0f8556..ddabcab9875 100644 --- a/source/geometry/magneticfield/src/G4RK547FEq3.cc +++ b/source/geometry/magneticfield/src/G4RK547FEq3.cc @@ -95,40 +95,54 @@ void G4RK547FEq3::makeStep( const G4double yInput[], // RightHandSide(yInput, dydx); for(G4int i = 0; i < GetNumberOfVariables(); ++i) - yTemp[i] = yInput[i] + hstep * b21 * dydx[i]; + { + yTemp[i] = yInput[i] + hstep * b21 * dydx[i]; + } RightHandSide(yTemp, ak2); for(G4int i = 0; i < GetNumberOfVariables(); ++i) - yTemp[i] = yInput[i] + hstep * (b31 * dydx[i] + b32 * ak2[i]); + { + yTemp[i] = yInput[i] + hstep * (b31 * dydx[i] + b32 * ak2[i]); + } RightHandSide(yTemp, ak3); for(G4int i = 0;i < GetNumberOfVariables(); ++i) - yTemp[i] = yInput[i] + hstep * (b41 * dydx[i] + b42 * ak2[i] + - b43 * ak3[i]); + { + yTemp[i] = yInput[i] + hstep * (b41 * dydx[i] + b42 * ak2[i] + + b43 * ak3[i]); + } RightHandSide(yTemp, ak4); for(G4int i = 0; i < GetNumberOfVariables(); ++i) - yTemp[i] = yInput[i] + hstep * (b51 * dydx[i] + b52 * ak2[i] + - b53 * ak3[i] + b54 * ak4[i]); + { + yTemp[i] = yInput[i] + hstep * (b51 * dydx[i] + b52 * ak2[i] + + b53 * ak3[i] + b54 * ak4[i]); + } RightHandSide(yTemp, ak5); for(G4int i = 0; i < GetNumberOfVariables(); ++i) - yTemp[i] = yInput[i] + hstep * (b61 * dydx[i] + b62 * ak2[i] + - b63 * ak3[i] + b64 * ak4[i] + - b65 * ak5[i]); + { + yTemp[i] = yInput[i] + hstep * (b61 * dydx[i] + b62 * ak2[i] + + b63 * ak3[i] + b64 * ak4[i] + + b65 * ak5[i]); + } RightHandSide(yTemp, ak6); for(G4int i = 0; i < GetNumberOfVariables(); ++i) - yOutput[i] = yInput[i] + hstep * (b71 * dydx[i] + b72 * ak2[i] + - b73 * ak3[i] + b74 * ak4[i] + - b75 * ak5[i] + b76 * ak6[i]); - if (dydxOutput && yError) + { + yOutput[i] = yInput[i] + hstep * (b71 * dydx[i] + b72 * ak2[i] + + b73 * ak3[i] + b74 * ak4[i] + + b75 * ak5[i] + b76 * ak6[i]); + } + if ((dydxOutput != nullptr) && (yError != nullptr)) { RightHandSide(yOutput, dydxOutput); for(G4int i = 0; i < GetNumberOfVariables(); ++i) - yError[i] = hstep * (dc1 * dydx[i] + dc2 * ak2[i] + dc3 * ak3[i] + - dc4 * ak4[i] + dc5 * ak5[i] + dc6 * ak6[i] + - dc7 * dydxOutput[i]); + { + yError[i] = hstep * (dc1 * dydx[i] + dc2 * ak2[i] + dc3 * ak3[i] + + dc4 * ak4[i] + dc5 * ak5[i] + dc6 * ak6[i] + + dc7 * dydxOutput[i]); + } } } diff --git a/source/geometry/magneticfield/src/G4RKG3_Stepper.cc b/source/geometry/magneticfield/src/G4RKG3_Stepper.cc index 6f3e1e64faf..a4a723b3892 100644 --- a/source/geometry/magneticfield/src/G4RKG3_Stepper.cc +++ b/source/geometry/magneticfield/src/G4RKG3_Stepper.cc @@ -37,9 +37,7 @@ G4RKG3_Stepper::G4RKG3_Stepper(G4Mag_EqRhs* EqRhs) { } -G4RKG3_Stepper::~G4RKG3_Stepper() -{ -} +G4RKG3_Stepper::~G4RKG3_Stepper() = default; void G4RKG3_Stepper::Stepper( const G4double yInput[], // [8] const G4double dydx[], // [6] diff --git a/source/geometry/magneticfield/src/G4RepleteEofM.cc b/source/geometry/magneticfield/src/G4RepleteEofM.cc index 01bb4f7ba0d..25250b6d5f8 100644 --- a/source/geometry/magneticfield/src/G4RepleteEofM.cc +++ b/source/geometry/magneticfield/src/G4RepleteEofM.cc @@ -43,9 +43,7 @@ G4RepleteEofM::G4RepleteEofM( G4Field* field, G4int nvar ) fGfield = field->IsGravityActive(); } -G4RepleteEofM::~G4RepleteEofM() -{ -} +G4RepleteEofM::~G4RepleteEofM() = default; void G4RepleteEofM::SetChargeMomentumMass(G4ChargeState particleCharge, // e+ units @@ -63,8 +61,14 @@ G4RepleteEofM::SetChargeMomentumMass(G4ChargeState particleCharge, // e+ units G4double muB = 0.5*eplus*hbar_Planck/(mass/c_squared); G4double g_BMT; - if ( spin != 0. ) g_BMT = (std::abs(magMoment)/muB)/spin; - else g_BMT = 2.; + if ( spin != 0. ) + { + g_BMT = (std::abs(magMoment)/muB)/spin; + } + else + { + g_BMT = 2.; + } anomaly = (g_BMT - 2.)/2.; @@ -273,8 +277,14 @@ G4RepleteEofM::EvaluateRhsGivenB( const G4double y[], G4ThreeVector Spin(y[9],y[10],y[11]); G4double pcharge; - if (charge == 0.) pcharge = 1.; - else pcharge = charge; + if (charge == 0.) + { + pcharge = 1.; + } + else + { + pcharge = charge; + } G4ThreeVector dSpin(0.,0.,0); if (Spin.mag2() != 0.) diff --git a/source/geometry/magneticfield/src/G4SextupoleMagField.cc b/source/geometry/magneticfield/src/G4SextupoleMagField.cc index e1b74dc654e..bc7ba8e54e8 100644 --- a/source/geometry/magneticfield/src/G4SextupoleMagField.cc +++ b/source/geometry/magneticfield/src/G4SextupoleMagField.cc @@ -44,7 +44,7 @@ G4SextupoleMagField::G4SextupoleMagField(G4double pGradient) } G4SextupoleMagField::G4SextupoleMagField(G4double pGradient, - G4ThreeVector pOrigin, + const G4ThreeVector& pOrigin, G4RotationMatrix* pMatrix) { fGradient = pGradient ; @@ -59,9 +59,7 @@ G4Field* G4SextupoleMagField::Clone() const // ------------------------------------------------------------------- -G4SextupoleMagField::~G4SextupoleMagField() -{ -} +G4SextupoleMagField::~G4SextupoleMagField() = default; void G4SextupoleMagField::GetFieldValue( const G4double y[], // [4] G4double B[] ) const // [3] diff --git a/source/geometry/magneticfield/src/G4UniformElectricField.cc b/source/geometry/magneticfield/src/G4UniformElectricField.cc index be8e15fad50..914eeda3391 100644 --- a/source/geometry/magneticfield/src/G4UniformElectricField.cc +++ b/source/geometry/magneticfield/src/G4UniformElectricField.cc @@ -60,9 +60,7 @@ G4UniformElectricField::G4UniformElectricField(G4double vField, fFieldComponents[5] = vField*std::cos(vTheta) ; } -G4UniformElectricField::~G4UniformElectricField() -{ -} +G4UniformElectricField::~G4UniformElectricField() = default; G4UniformElectricField:: G4UniformElectricField (const G4UniformElectricField& p) @@ -77,7 +75,7 @@ G4UniformElectricField (const G4UniformElectricField& p) G4UniformElectricField& G4UniformElectricField::operator = (const G4UniformElectricField& p) { - if (&p == this) return *this; + if (&p == this) { return *this; } G4ElectricField::operator=(p); for (auto i=0; i<6; ++i) { diff --git a/source/geometry/magneticfield/src/G4UniformGravityField.cc b/source/geometry/magneticfield/src/G4UniformGravityField.cc index d9f7af2acac..1908f8dbaef 100644 --- a/source/geometry/magneticfield/src/G4UniformGravityField.cc +++ b/source/geometry/magneticfield/src/G4UniformGravityField.cc @@ -52,9 +52,7 @@ G4UniformGravityField::G4UniformGravityField(const G4double gy) fFieldComponents[2] = 0.0; } -G4UniformGravityField::~G4UniformGravityField() -{ -} +G4UniformGravityField::~G4UniformGravityField() = default; G4UniformGravityField::G4UniformGravityField (const G4UniformGravityField& p) : G4Field(p) @@ -68,7 +66,7 @@ G4UniformGravityField::G4UniformGravityField (const G4UniformGravityField& p) G4UniformGravityField& G4UniformGravityField::operator = (const G4UniformGravityField& p) { - if (&p == this) return *this; + if (&p == this) { return *this; } G4Field::operator=(p); for (auto i=0; i<3; ++i) { diff --git a/source/geometry/magneticfield/src/G4UniformMagField.cc b/source/geometry/magneticfield/src/G4UniformMagField.cc index 8fdc6a25581..ded60b65944 100644 --- a/source/geometry/magneticfield/src/G4UniformMagField.cc +++ b/source/geometry/magneticfield/src/G4UniformMagField.cc @@ -38,9 +38,7 @@ G4UniformMagField::G4UniformMagField(const G4ThreeVector& FieldVector ) fFieldComponents[2] = FieldVector.z(); } -G4UniformMagField::~G4UniformMagField() -{ -} +G4UniformMagField::~G4UniformMagField() = default; G4UniformMagField::G4UniformMagField (const G4UniformMagField& p) : G4MagneticField(p) @@ -53,7 +51,7 @@ G4UniformMagField::G4UniformMagField (const G4UniformMagField& p) G4UniformMagField& G4UniformMagField::operator = (const G4UniformMagField& p) { - if (&p == this) return *this; + if (&p == this) { return *this;} G4MagneticField::operator=(p); for (auto i=0; i<3; ++i) { diff --git a/source/geometry/management/GNUmakefile b/source/geometry/management/GNUmakefile deleted file mode 100644 index 510438575ef..00000000000 --- a/source/geometry/management/GNUmakefile +++ /dev/null @@ -1,25 +0,0 @@ -# ----------------------------------------------------------------------- -# GNUmakefile for geometry/management library. Gabriele Cosmo, 16/11/96. -# ----------------------------------------------------------------------- - -name := G4geometrymng - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4GEOM_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/graphics_reps/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/materials/include - -ifdef G4GEOMETRY_VOXELDEBUG - CPPFLAGS += -DG4GEOMETRY_VOXELDEBUG -endif - -include $(G4INSTALL)/config/common.gmk diff --git a/source/geometry/management/History b/source/geometry/management/History index cd1c0ac5c10..bcee48eb01c 100644 --- a/source/geometry/management/History +++ b/source/geometry/management/History @@ -6,11 +6,14 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-03-22 Gabriele Cosmo (geommng-V11-00-11) +## 2023-05-08 Gabriele Cosmo (geommng-V11-01-02) +- Applied clang-tidy fixes (readability, modernization, performance, ...). + +## 2023-03-22 Gabriele Cosmo (geommng-V11-01-01) - G4Region: issue fatal exception if attempting to add a root logical volume which is already set as root for another region. -## 2023-01-09 Gabriele Cosmo (geommng-V11-00-10) +## 2023-01-09 Gabriele Cosmo (geommng-V11-01-00) - G4LogicalVolume: use std::shared_ptr for handling visualization attributes. Ignore calls to SetVisAttributes() from worker threads. diff --git a/source/geometry/management/include/G4AffineTransform.icc b/source/geometry/management/include/G4AffineTransform.icc index 5f4e0dd7bc9..019ce33a221 100644 --- a/source/geometry/management/include/G4AffineTransform.icc +++ b/source/geometry/management/include/G4AffineTransform.icc @@ -222,36 +222,36 @@ inline G4ThreeVector G4AffineTransform::TransformPoint(const G4ThreeVector& vec) const { G4double vecx = vec.x(), vecy = vec.y(), vecz = vec.z(); - return G4ThreeVector( vecx*rxx + vecy*ryx + vecz*rzx + tx, - vecx*rxy + vecy*ryy + vecz*rzy + ty, - vecx*rxz + vecy*ryz + vecz*rzz + tz ); + return { vecx*rxx + vecy*ryx + vecz*rzx + tx, + vecx*rxy + vecy*ryy + vecz*rzy + ty, + vecx*rxz + vecy*ryz + vecz*rzz + tz }; } inline G4ThreeVector G4AffineTransform::InverseTransformPoint(const G4ThreeVector& vec) const { G4double vecx = vec.x()-tx, vecy = vec.y()-ty, vecz = vec.z()-tz; - return G4ThreeVector( vecx*rxx + vecy*rxy + vecz*rxz, - vecx*ryx + vecy*ryy + vecz*ryz, - vecx*rzx + vecy*rzy + vecz*rzz ); + return { vecx*rxx + vecy*rxy + vecz*rxz, + vecx*ryx + vecy*ryy + vecz*ryz, + vecx*rzx + vecy*rzy + vecz*rzz }; } inline G4ThreeVector G4AffineTransform::TransformAxis(const G4ThreeVector& axis) const { G4double axisx = axis.x(), axisy = axis.y(), axisz = axis.z(); - return G4ThreeVector( axisx*rxx + axisy*ryx + axisz*rzx, - axisx*rxy + axisy*ryy + axisz*rzy, - axisx*rxz + axisy*ryz + axisz*rzz ); + return { axisx*rxx + axisy*ryx + axisz*rzx, + axisx*rxy + axisy*ryy + axisz*rzy, + axisx*rxz + axisy*ryz + axisz*rzz }; } inline G4ThreeVector G4AffineTransform::InverseTransformAxis(const G4ThreeVector& axis) const { G4double axisx = axis.x(), axisy = axis.y(), axisz = axis.z(); - return G4ThreeVector( axisx*rxx + axisy*rxy + axisz*rxz, - axisx*ryx + axisy*ryy + axisz*ryz, - axisx*rzx + axisy*rzy + axisz*rzz ); + return { axisx*rxx + axisy*rxy + axisz*rxz, + axisx*ryx + axisy*ryy + axisz*ryz, + axisx*rzx + axisy*rzy + axisz*rzz }; } inline @@ -322,19 +322,19 @@ G4AffineTransform& G4AffineTransform::operator -=(const G4ThreeVector& tlate) inline G4bool G4AffineTransform::operator == (const G4AffineTransform& tf) const { - return (tx==tf.tx&&ty==tf.ty&&tz==tf.tz&& - rxx==tf.rxx&&rxy==tf.rxy&&rxz==tf.rxz&& - ryx==tf.ryx&&ryy==tf.ryy&&ryz==tf.ryz&& - rzx==tf.rzx&&rzy==tf.rzy&&rzz==tf.rzz) ? true : false; + return tx==tf.tx&&ty==tf.ty&&tz==tf.tz&& + rxx==tf.rxx&&rxy==tf.rxy&&rxz==tf.rxz&& + ryx==tf.ryx&&ryy==tf.ryy&&ryz==tf.ryz&& + rzx==tf.rzx&&rzy==tf.rzy&&rzz==tf.rzz; } inline G4bool G4AffineTransform::operator != (const G4AffineTransform& tf) const { - return (tx!=tf.tx||ty!=tf.ty||tz!=tf.tz|| - rxx!=tf.rxx||rxy!=tf.rxy||rxz!=tf.rxz|| - ryx!=tf.ryx||ryy!=tf.ryy||ryz!=tf.ryz|| - rzx!=tf.rzx||rzy!=tf.rzy||rzz!=tf.rzz) ? true : false; + return tx!=tf.tx||ty!=tf.ty||tz!=tf.tz|| + rxx!=tf.rxx||rxy!=tf.rxy||rxz!=tf.rxz|| + ryx!=tf.ryx||ryy!=tf.ryy||ryz!=tf.ryz|| + rzx!=tf.rzx||rzy!=tf.rzy||rzz!=tf.rzz; } inline @@ -393,13 +393,13 @@ G4double G4AffineTransform::operator [] (const G4int n) const inline G4bool G4AffineTransform::IsRotated() const { - return (rxx==1.0 && ryy==1.0 && rzz==1.0) ? false : true; + return !(rxx==1.0 && ryy==1.0 && rzz==1.0); } inline G4bool G4AffineTransform::IsTranslated() const { - return (tx || ty || tz) ? true:false; + return (tx != 0.0) || (ty != 0.0) || (tz != 0.0); } inline G4RotationMatrix G4AffineTransform::NetRotation() const @@ -419,7 +419,7 @@ inline G4RotationMatrix G4AffineTransform::InverseNetRotation() const inline G4ThreeVector G4AffineTransform::NetTranslation() const { - return G4ThreeVector(tx,ty,tz); + return {tx,ty,tz}; } inline @@ -429,7 +429,7 @@ G4ThreeVector G4AffineTransform::InverseNetTranslation() const G4double invtx = ttx*rxx + tty*rxy + ttz*rxz; G4double invty = ttx*ryx + tty*ryy + ttz*ryz; G4double invtz = ttx*rzx + tty*rzy + ttz*rzz; - return G4ThreeVector(invtx,invty,invtz); + return {invtx,invty,invtz}; } inline diff --git a/source/geometry/management/include/G4BlockingList.icc b/source/geometry/management/include/G4BlockingList.icc index 3ab09b66f0f..b0fc6455a88 100644 --- a/source/geometry/management/include/G4BlockingList.icc +++ b/source/geometry/management/include/G4BlockingList.icc @@ -42,7 +42,7 @@ inline void G4BlockingList::BlockVolume(const G4int vol) inline G4bool G4BlockingList::IsBlocked(const G4int vol) const { - return ( fBlockingList[vol]==fBlockTagNo ) ? true : false; + return fBlockingList[vol]==fBlockTagNo; } inline void G4BlockingList::Reset() diff --git a/source/geometry/management/include/G4ErrorCylSurfaceTarget.hh b/source/geometry/management/include/G4ErrorCylSurfaceTarget.hh index a164622536a..d4074fab397 100644 --- a/source/geometry/management/include/G4ErrorCylSurfaceTarget.hh +++ b/source/geometry/management/include/G4ErrorCylSurfaceTarget.hh @@ -54,25 +54,25 @@ class G4ErrorCylSurfaceTarget : public G4ErrorSurfaceTarget const G4AffineTransform& trans ); // Constructs cylindrical surface by radius and affine transformation - ~G4ErrorCylSurfaceTarget() = default; + ~G4ErrorCylSurfaceTarget() override = default; virtual G4ThreeVector IntersectLocal( const G4ThreeVector& point, const G4ThreeVector& direc ) const; // Intersects the cylindrical surface with the line in local (cylinder) // coordinates, given by point and direction - virtual G4double GetDistanceFromPoint( const G4ThreeVector& point, - const G4ThreeVector& direc ) const; + G4double GetDistanceFromPoint( const G4ThreeVector& point, + const G4ThreeVector& direc ) const override; // Distance from a point to the cylindrical surface in a given direction - virtual G4double GetDistanceFromPoint( const G4ThreeVector& point ) const; + G4double GetDistanceFromPoint( const G4ThreeVector& point ) const override; // Minimal distance from a point to the cylindrical surface in any // direction - virtual G4Plane3D GetTangentPlane( const G4ThreeVector& point ) const; + G4Plane3D GetTangentPlane( const G4ThreeVector& point ) const override; // Get plane tangent to cylindrical surface at a given point - virtual void Dump( const G4String& msg ) const; + void Dump( const G4String& msg ) const override; // Dump cylindrical surface parameter private: diff --git a/source/geometry/management/include/G4ErrorPlaneSurfaceTarget.hh b/source/geometry/management/include/G4ErrorPlaneSurfaceTarget.hh index 7c72aecfbde..1b4b326d0b7 100644 --- a/source/geometry/management/include/G4ErrorPlaneSurfaceTarget.hh +++ b/source/geometry/management/include/G4ErrorPlaneSurfaceTarget.hh @@ -58,23 +58,23 @@ class G4ErrorPlaneSurfaceTarget : public G4ErrorSurfaceTarget, G4Plane3D const G4Point3D& p3); // Constructs plane by three points - ~G4ErrorPlaneSurfaceTarget() = default; + ~G4ErrorPlaneSurfaceTarget() override = default; virtual G4ThreeVector Intersect( const G4ThreeVector& point, const G4ThreeVector& direc ) const; // Intersects the surface with the line given by point and direction - virtual G4double GetDistanceFromPoint( const G4ThreeVector& point, - const G4ThreeVector& direc ) const; + G4double GetDistanceFromPoint( const G4ThreeVector& point, + const G4ThreeVector& direc ) const override; // Distance from point to surface in a given direction - virtual G4double GetDistanceFromPoint( const G4ThreeVector& pt ) const; + G4double GetDistanceFromPoint( const G4ThreeVector& pt ) const override; // Closest distance from point to surface - virtual G4Plane3D GetTangentPlane( const G4ThreeVector& point ) const; + G4Plane3D GetTangentPlane( const G4ThreeVector& point ) const override; // Get tangent plane as itself - virtual void Dump( const G4String& msg ) const; + void Dump( const G4String& msg ) const override; // Dump plane surface parameter }; diff --git a/source/geometry/management/include/G4ErrorSurfaceTarget.hh b/source/geometry/management/include/G4ErrorSurfaceTarget.hh index dedee58150a..5fb5a6e7178 100644 --- a/source/geometry/management/include/G4ErrorSurfaceTarget.hh +++ b/source/geometry/management/include/G4ErrorSurfaceTarget.hh @@ -44,19 +44,19 @@ class G4ErrorSurfaceTarget : public G4ErrorTanPlaneTarget public: G4ErrorSurfaceTarget(); - virtual ~G4ErrorSurfaceTarget() = default; + ~G4ErrorSurfaceTarget() override = default; - virtual double GetDistanceFromPoint( const G4ThreeVector& point, - const G4ThreeVector& direc ) const = 0; + double GetDistanceFromPoint( const G4ThreeVector& point, + const G4ThreeVector& direc ) const override = 0; // Distance from a point to the surface in a given direction - virtual double GetDistanceFromPoint( const G4ThreeVector& point ) const = 0; + double GetDistanceFromPoint( const G4ThreeVector& point ) const override = 0; // Minimal distance from a point to the surface in any direction - virtual G4Plane3D GetTangentPlane( const G4ThreeVector& point ) const = 0; + G4Plane3D GetTangentPlane( const G4ThreeVector& point ) const override = 0; // Get tangent plane at point - virtual void Dump( const G4String& msg ) const = 0; + void Dump( const G4String& msg ) const override = 0; // Dump surface }; diff --git a/source/geometry/management/include/G4ErrorTanPlaneTarget.hh b/source/geometry/management/include/G4ErrorTanPlaneTarget.hh index 43570a00ddc..d225cd64441 100644 --- a/source/geometry/management/include/G4ErrorTanPlaneTarget.hh +++ b/source/geometry/management/include/G4ErrorTanPlaneTarget.hh @@ -45,12 +45,12 @@ class G4ErrorTanPlaneTarget : public G4ErrorTarget public: G4ErrorTanPlaneTarget(); - virtual ~G4ErrorTanPlaneTarget() = default; + ~G4ErrorTanPlaneTarget() override = default; virtual G4Plane3D GetTangentPlane( const G4ThreeVector& point ) const = 0; // Get tangent plane at point - virtual void Dump( const G4String& msg ) const = 0; + void Dump( const G4String& msg ) const override = 0; // Dump surface }; diff --git a/source/geometry/management/include/G4ErrorTarget.hh b/source/geometry/management/include/G4ErrorTarget.hh index 4d8cbc3a06c..be155e7bbf5 100644 --- a/source/geometry/management/include/G4ErrorTarget.hh +++ b/source/geometry/management/include/G4ErrorTarget.hh @@ -66,7 +66,7 @@ class G4ErrorTarget protected: - G4ErrorTargetType theType; + G4ErrorTargetType theType{G4ErrorTarget_GeomVolume}; }; // Inline methods diff --git a/source/geometry/management/include/G4GeomSplitter.hh b/source/geometry/management/include/G4GeomSplitter.hh index 0b1cc5a5f83..4291f824703 100644 --- a/source/geometry/management/include/G4GeomSplitter.hh +++ b/source/geometry/management/include/G4GeomSplitter.hh @@ -46,7 +46,7 @@ class G4GeomSplitter public: G4GeomSplitter() - : totalobj(0), totalspace(0), sharedOffset(nullptr) + : sharedOffset(nullptr) { G4MUTEXINIT(mutex); } @@ -174,8 +174,8 @@ class G4GeomSplitter private: - G4int totalobj; - G4int totalspace; + G4int totalobj{0}; + G4int totalspace{0}; T* sharedOffset; G4Mutex mutex; }; diff --git a/source/geometry/management/include/G4IdentityTrajectoryFilter.hh b/source/geometry/management/include/G4IdentityTrajectoryFilter.hh index e0ab41d9e46..d748c69b0e5 100644 --- a/source/geometry/management/include/G4IdentityTrajectoryFilter.hh +++ b/source/geometry/management/include/G4IdentityTrajectoryFilter.hh @@ -49,13 +49,13 @@ class G4IdentityTrajectoryFilter : public G4VCurvedTrajectoryFilter public: G4IdentityTrajectoryFilter() = default; - virtual ~G4IdentityTrajectoryFilter() = default; + ~G4IdentityTrajectoryFilter() override = default; G4IdentityTrajectoryFilter(const G4IdentityTrajectoryFilter&) = delete; G4IdentityTrajectoryFilter& operator=(const G4IdentityTrajectoryFilter&) = delete; // Do not want these objects to be copied or assigned - void TakeIntermediatePoint( G4ThreeVector newPoint ); + void TakeIntermediatePoint( G4ThreeVector newPoint ) override; // Submit intermediate points for the filter // to consider keeping or rejecting }; diff --git a/source/geometry/management/include/G4LogicalCrystalVolume.hh b/source/geometry/management/include/G4LogicalCrystalVolume.hh index f0e1947cc95..88f28466c10 100644 --- a/source/geometry/management/include/G4LogicalCrystalVolume.hh +++ b/source/geometry/management/include/G4LogicalCrystalVolume.hh @@ -59,9 +59,9 @@ class G4LogicalCrystalVolume : public G4LogicalVolume G4int l = 0, G4double rot = 0.0); - ~G4LogicalCrystalVolume(); + ~G4LogicalCrystalVolume() override; - G4bool IsExtended() const { return true; } + G4bool IsExtended() const override { return true; } // Return true if it is not a base-class object. void SetMillerOrientation(G4int h, G4int k, G4int l, G4double rot = 0.0); diff --git a/source/geometry/management/include/G4LogicalVolume.icc b/source/geometry/management/include/G4LogicalVolume.icc index 317d9b270df..efe3ad64f1d 100644 --- a/source/geometry/management/include/G4LogicalVolume.icc +++ b/source/geometry/management/include/G4LogicalVolume.icc @@ -103,9 +103,9 @@ G4FastSimulationManager* G4LogicalVolume::GetFastSimulationManager () const inline G4bool G4LogicalVolume::IsDaughter(const G4VPhysicalVolume* p) const { - for (auto i=fDaughters.cbegin(); i!=fDaughters.cend(); ++i) + for (const auto & daughter : fDaughters) { - if (**i==*p) return true; + if (*daughter==*p) return true; } return false; } @@ -319,7 +319,7 @@ void G4LogicalVolume::Lock() inline G4bool G4LogicalVolume::operator == ( const G4LogicalVolume& lv) const { - return (this==&lv) ? true : false; + return this==&lv; } // ******************************************************************** diff --git a/source/geometry/management/include/G4ReflectedSolid.hh b/source/geometry/management/include/G4ReflectedSolid.hh index ebbcd0caea3..c5522fe6cc8 100644 --- a/source/geometry/management/include/G4ReflectedSolid.hh +++ b/source/geometry/management/include/G4ReflectedSolid.hh @@ -41,58 +41,54 @@ class G4ReflectedSolid : public G4VSolid { - public: // with description + public: G4ReflectedSolid( const G4String& pName, G4VSolid* pSolid , const G4Transform3D& transform ) ; // For use in instantiating a transient instance. - virtual ~G4ReflectedSolid(); + ~G4ReflectedSolid() override; // Virtual destructor. - public: // without description - // Includes all the methods that a solid requires. - EInside Inside( const G4ThreeVector& p ) const; + EInside Inside( const G4ThreeVector& p ) const override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent( const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; - G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const; + G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const override; G4double DistanceToIn( const G4ThreeVector& p, - const G4ThreeVector& v ) const; + const G4ThreeVector& v ) const override; - G4double DistanceToIn( const G4ThreeVector& p) const; + G4double DistanceToIn( const G4ThreeVector& p) const override; G4double DistanceToOut( const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm = false, G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr ) const; + G4ThreeVector* n = nullptr ) const override; - G4double DistanceToOut( const G4ThreeVector& p ) const; + G4double DistanceToOut( const G4ThreeVector& p ) const override; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep ); - - G4double GetCubicVolume(); - G4double GetSurfaceArea(); + const G4VPhysicalVolume* pRep ) override; - G4ThreeVector GetPointOnSurface() const; + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; - G4VSolid* Clone() const; + G4ThreeVector GetPointOnSurface() const override; - public: // with description + G4VSolid* Clone() const override; - virtual G4GeometryType GetEntityType() const; + G4GeometryType GetEntityType() const override; virtual const G4ReflectedSolid* GetReflectedSolidPtr() const; virtual G4ReflectedSolid* GetReflectedSolidPtr(); @@ -106,17 +102,15 @@ class G4ReflectedSolid : public G4VSolid void SetDirectTransform3D(G4Transform3D&); // Accessors methods. - std::ostream& StreamInfo(std::ostream& os) const; - - public: // without description + std::ostream& StreamInfo(std::ostream& os) const override; G4ReflectedSolid(const G4ReflectedSolid& rhs); G4ReflectedSolid& operator=(const G4ReflectedSolid& rhs); // Copy constructor and assignment operator. - void DescribeYourselfTo ( G4VGraphicsScene& scene ) const; - G4Polyhedron* CreatePolyhedron () const; - G4Polyhedron* GetPolyhedron () const; + void DescribeYourselfTo ( G4VGraphicsScene& scene ) const override; + G4Polyhedron* CreatePolyhedron () const override; + G4Polyhedron* GetPolyhedron () const override; // For creating graphical representations (i.e. for visualisation). protected: diff --git a/source/geometry/management/include/G4Region.icc b/source/geometry/management/include/G4Region.icc index 5ead16b8616..da8f87f82e6 100644 --- a/source/geometry/management/include/G4Region.icc +++ b/source/geometry/management/include/G4Region.icc @@ -35,7 +35,7 @@ inline G4bool G4Region::operator==(const G4Region& rg) const { - return (this==&rg) ? true : false; + return this==&rg; } // ******************************************************************** diff --git a/source/geometry/management/include/G4SmartVoxelProxy.icc b/source/geometry/management/include/G4SmartVoxelProxy.icc index f2b868996da..4299776a31c 100644 --- a/source/geometry/management/include/G4SmartVoxelProxy.icc +++ b/source/geometry/management/include/G4SmartVoxelProxy.icc @@ -51,14 +51,14 @@ void G4SmartVoxelProxy::operator delete(void* aProxy) inline G4bool G4SmartVoxelProxy::IsHeader() const { - return (fHeader) ? true : false; + return (fHeader) != nullptr; } // -------------------------------------------------------------------- inline G4bool G4SmartVoxelProxy::IsNode() const { - return (fNode) ? true : false; + return (fNode) != nullptr; } // -------------------------------------------------------------------- @@ -81,5 +81,5 @@ G4SmartVoxelHeader* G4SmartVoxelProxy::GetHeader() const inline G4bool G4SmartVoxelProxy::operator == (const G4SmartVoxelProxy& right) const { - return (this==&right) ? true : false; + return this==&right; } diff --git a/source/geometry/management/include/G4VNestedParameterisation.hh b/source/geometry/management/include/G4VNestedParameterisation.hh index c0b0ce1c3c9..57c2a8ede02 100644 --- a/source/geometry/management/include/G4VNestedParameterisation.hh +++ b/source/geometry/management/include/G4VNestedParameterisation.hh @@ -78,94 +78,93 @@ class G4VNestedParameterisation : public G4VPVParameterisation, public: G4VNestedParameterisation() = default; - virtual ~G4VNestedParameterisation() = default; + ~G4VNestedParameterisation() override = default; // Methods required in derived classes // ----------------------------------- virtual G4Material* ComputeMaterial(G4VPhysicalVolume* currentVol, const G4int repNo, - const G4VTouchable* parentTouch = nullptr) = 0; + const G4VTouchable* parentTouch = nullptr)=0; // Required method, as it is the reason for this class. // Must cope with parentTouch=nullptr for navigator's SetupHierarchy. - virtual G4int GetNumberOfMaterials() const=0; - virtual G4Material* GetMaterial(G4int idx) const=0; + G4int GetNumberOfMaterials() const override =0; + G4Material* GetMaterial(G4int idx) const override =0; // Needed to define materials for instances of Nested Parameterisation // Current convention: each call should return the materials // of all instances with the same mother/ancestor volume. - virtual void ComputeTransformation(const G4int no, - G4VPhysicalVolume* currentPV) const = 0; + void ComputeTransformation(const G4int no, + G4VPhysicalVolume* currentPV) const override=0; // Methods optional in derived classes // ----------------------------------- - virtual G4VSolid* ComputeSolid(const G4int no, G4VPhysicalVolume* thisVol); + G4VSolid* ComputeSolid(const G4int no, G4VPhysicalVolume* thisVol) override; // Additional standard parameterisation methods, // which can be optionally defined, in case solid is used. - virtual void ComputeDimensions(G4Box &, - const G4int, - const G4VPhysicalVolume *) const {} + void ComputeDimensions(G4Box &, + const G4int, + const G4VPhysicalVolume *) const override {} - virtual void ComputeDimensions(G4Tubs &, - const G4int, - const G4VPhysicalVolume *) const {} + void ComputeDimensions(G4Tubs &, + const G4int, + const G4VPhysicalVolume *) const override {} - virtual void ComputeDimensions(G4Trd &, - const G4int, - const G4VPhysicalVolume *) const {} + void ComputeDimensions(G4Trd &, + const G4int, + const G4VPhysicalVolume *) const override {} - virtual void ComputeDimensions(G4Trap &, - const G4int, - const G4VPhysicalVolume *) const {} + void ComputeDimensions(G4Trap &, + const G4int, + const G4VPhysicalVolume *) const override {} - virtual void ComputeDimensions(G4Cons &, - const G4int, - const G4VPhysicalVolume *) const {} + void ComputeDimensions(G4Cons &, + const G4int, + const G4VPhysicalVolume *) const override {} - virtual void ComputeDimensions(G4Sphere &, - const G4int, - const G4VPhysicalVolume *) const {} + void ComputeDimensions(G4Sphere &, + const G4int, + const G4VPhysicalVolume *) const override {} - virtual void ComputeDimensions(G4Orb &, - const G4int, - const G4VPhysicalVolume *) const {} + void ComputeDimensions(G4Orb &, + const G4int, + const G4VPhysicalVolume *) const override {} - virtual void ComputeDimensions(G4Ellipsoid &, - const G4int, - const G4VPhysicalVolume *) const {} + void ComputeDimensions(G4Ellipsoid &, + const G4int, + const G4VPhysicalVolume *) const override {} - virtual void ComputeDimensions(G4Torus &, - const G4int, - const G4VPhysicalVolume *) const {} + void ComputeDimensions(G4Torus &, + const G4int, + const G4VPhysicalVolume *) const override {} - virtual void ComputeDimensions(G4Para &, - const G4int, - const G4VPhysicalVolume *) const {} + void ComputeDimensions(G4Para &, + const G4int, + const G4VPhysicalVolume *) const override {} - virtual void ComputeDimensions(G4Polycone &, - const G4int, - const G4VPhysicalVolume *) const {} + void ComputeDimensions(G4Polycone &, + const G4int, + const G4VPhysicalVolume *) const override {} - virtual void ComputeDimensions(G4Polyhedra &, - const G4int, - const G4VPhysicalVolume *) const {} + void ComputeDimensions(G4Polyhedra &, + const G4int, + const G4VPhysicalVolume *) const override {} - virtual void ComputeDimensions(G4Hype &, - const G4int, - const G4VPhysicalVolume *) const {} - + void ComputeDimensions(G4Hype &, + const G4int, + const G4VPhysicalVolume *) const override {} G4Material* ComputeMaterial(const G4int repNo, - G4VPhysicalVolume* currentVol, - const G4VTouchable* parentTouch = nullptr); + G4VPhysicalVolume* currentVol, + const G4VTouchable* parentTouch = nullptr) override; // Method implemented in this class in terms of the above // ComputeMaterial() method. - virtual G4bool IsNested() const; - virtual G4VVolumeMaterialScanner* GetMaterialScanner(); + G4bool IsNested() const override; + G4VVolumeMaterialScanner* GetMaterialScanner() override; // Methods to identify nested parameterisations. Required in order // to enable material scan for nested parameterisations. }; diff --git a/source/geometry/management/include/G4VPhysicalVolume.icc b/source/geometry/management/include/G4VPhysicalVolume.icc index e952d8e4dfe..467bc9905fb 100644 --- a/source/geometry/management/include/G4VPhysicalVolume.icc +++ b/source/geometry/management/include/G4VPhysicalVolume.icc @@ -30,7 +30,7 @@ inline G4bool G4VPhysicalVolume::operator == (const G4VPhysicalVolume& right) const { - return (this==&right) ? true : false; + return this==&right; } inline diff --git a/source/geometry/management/include/G4VSolid.icc b/source/geometry/management/include/G4VSolid.icc index f5f83045c11..3852066a4bb 100644 --- a/source/geometry/management/include/G4VSolid.icc +++ b/source/geometry/management/include/G4VSolid.icc @@ -30,7 +30,7 @@ inline G4bool G4VSolid::operator==( const G4VSolid& right) const { - return (this==&right) ? true : false; + return this==&right; } inline diff --git a/source/geometry/management/include/G4VoxelLimits.icc b/source/geometry/management/include/G4VoxelLimits.icc index ac120e621a3..c8d21acb391 100644 --- a/source/geometry/management/include/G4VoxelLimits.icc +++ b/source/geometry/management/include/G4VoxelLimits.icc @@ -102,19 +102,19 @@ G4double G4VoxelLimits::GetMinExtent(const EAxis pAxis) const inline G4bool G4VoxelLimits::IsXLimited() const { - return (fxAxisMin==-kInfinity&&fxAxisMax==kInfinity) ? false : true; + return !(fxAxisMin==-kInfinity&&fxAxisMax==kInfinity); } inline G4bool G4VoxelLimits::IsYLimited() const { - return (fyAxisMin==-kInfinity&&fyAxisMax==kInfinity) ? false : true; + return !(fyAxisMin==-kInfinity&&fyAxisMax==kInfinity); } inline G4bool G4VoxelLimits::IsZLimited() const { - return (fzAxisMin==-kInfinity&&fzAxisMax==kInfinity) ? false : true; + return !(fzAxisMin==-kInfinity&&fzAxisMax==kInfinity); } inline @@ -144,10 +144,10 @@ G4bool G4VoxelLimits::IsLimited(const EAxis pAxis) const inline G4bool G4VoxelLimits::Inside(const G4ThreeVector& pVec) const { - return ((GetMinXExtent()<=pVec.x()) && + return (GetMinXExtent()<=pVec.x()) && (GetMaxXExtent()>=pVec.x()) && (GetMinYExtent()<=pVec.y()) && (GetMaxYExtent()>=pVec.y()) && (GetMinZExtent()<=pVec.z()) && - (GetMaxZExtent()>=pVec.z()) ) ? true : false; + (GetMaxZExtent()>=pVec.z()); } diff --git a/source/geometry/management/src/G4BlockingList.cc b/source/geometry/management/src/G4BlockingList.cc index 91308c36a88..7bd05841bc3 100644 --- a/source/geometry/management/src/G4BlockingList.cc +++ b/source/geometry/management/src/G4BlockingList.cc @@ -39,7 +39,7 @@ G4BlockingList::G4BlockingList(G4int maxDefault, G4int stride) void G4BlockingList::FullyReset() { fBlockTagNo = 1; - for ( G4long i=G4long(fBlockingList.size()-1); i>=0; --i ) + for ( auto i=G4long(fBlockingList.size()-1); i>=0; --i ) { fBlockingList[i] = 0; } diff --git a/source/geometry/management/src/G4BoundingEnvelope.cc b/source/geometry/management/src/G4BoundingEnvelope.cc index 21a3693c33f..0340207b82c 100644 --- a/source/geometry/management/src/G4BoundingEnvelope.cc +++ b/source/geometry/management/src/G4BoundingEnvelope.cc @@ -67,9 +67,9 @@ G4BoundingEnvelope(const std::vector& polygons) // G4double xmin = kInfinity, ymin = kInfinity, zmin = kInfinity; G4double xmax = -kInfinity, ymax = -kInfinity, zmax = -kInfinity; - for (auto ibase = fPolygons->cbegin(); ibase != fPolygons->cend(); ++ibase) + for (const auto & polygon : *fPolygons) { - for (auto ipoint = (*ibase)->cbegin(); ipoint != (*ibase)->cend(); ++ipoint) + for (auto ipoint = polygon->cbegin(); ipoint != polygon->cend(); ++ipoint) { G4double x = ipoint->x(); if (x < xmin) xmin = x; @@ -394,9 +394,9 @@ G4BoundingEnvelope::CalculateExtent(const EAxis pAxis, } else { - for (auto ibase=fPolygons->cbegin(); ibase!=fPolygons->cend(); ++ibase) + for (const auto & polygon : *fPolygons) { - for (auto ipoint=(*ibase)->cbegin(); ipoint!=(*ibase)->cend(); ++ipoint) + for (auto ipoint=polygon->cbegin(); ipoint!=polygon->cend(); ++ipoint) { G4double coor = ipoint->x()*cx + ipoint->y()*cy + ipoint->z()*cz + cd; if (coor < emin) emin = coor; @@ -430,15 +430,15 @@ G4BoundingEnvelope::CalculateExtent(const EAxis pAxis, // delta, kCarTolerance multiplied by max scale factor of // the transformation // - EAxis axis[] = { kXAxis, kYAxis, kZAxis }; + EAxis axes[] = { kXAxis, kYAxis, kZAxis }; G4VoxelLimits limits; // default is unlimited - for (auto i=0; i<3; ++i) + for (const auto & iAxis : axes) { - if (pVoxelLimits.IsLimited(axis[i])) + if (pVoxelLimits.IsLimited(iAxis)) { - G4double emin = pVoxelLimits.GetMinExtent(axis[i]) - delta; - G4double emax = pVoxelLimits.GetMaxExtent(axis[i]) + delta; - limits.AddLimit(axis[i], emin, emax); + G4double emin = pVoxelLimits.GetMinExtent(iAxis) - delta; + G4double emax = pVoxelLimits.GetMaxExtent(iAxis) + delta; + limits.AddLimit(iAxis, emin, emax); } } @@ -600,8 +600,8 @@ TransformVertices(const G4Transform3D& pTransform3D, G4int index = 0; for (auto i = ia; i != iaend; ++i) { - G4int nv = (G4int)(*i)->size(); - pBases.push_back(std::make_pair(index, nv)); + auto nv = (G4int)(*i)->size(); + pBases.emplace_back(index, nv); index += nv; } @@ -614,7 +614,7 @@ TransformVertices(const G4Transform3D& pTransform3D, G4ThreeVector offset = pTransform3D.getTranslation(); for (auto i = ia; i != iaend; ++i) for (auto k = (*i)->cbegin(); k != (*i)->cend(); ++k) - pVertices.push_back(G4Point3D((*k) + offset)); + pVertices.emplace_back((*k) + offset); } else { @@ -638,30 +638,30 @@ G4BoundingEnvelope::GetPrismAABB(const G4Polygon3D& pBaseA, // First base // - for (auto it1 = pBaseA.cbegin(); it1 != pBaseA.cend(); ++it1) + for (const auto & it1 : pBaseA) { - G4double x = it1->x(); + G4double x = it1.x(); if (x < xmin) xmin = x; if (x > xmax) xmax = x; - G4double y = it1->y(); + G4double y = it1.y(); if (y < ymin) ymin = y; if (y > ymax) ymax = y; - G4double z = it1->z(); + G4double z = it1.z(); if (z < zmin) zmin = z; if (z > zmax) zmax = z; } // Second base // - for (auto it2 = pBaseB.cbegin(); it2 != pBaseB.cend(); ++it2) + for (const auto & it2 : pBaseB) { - G4double x = it2->x(); + G4double x = it2.x(); if (x < xmin) xmin = x; if (x > xmax) xmax = x; - G4double y = it2->y(); + G4double y = it2.y(); if (y < ymin) ymin = y; if (y > ymax) ymax = y; - G4double z = it2->z(); + G4double z = it2.z(); if (z < zmin) zmin = z; if (z > zmax) zmax = z; } @@ -690,9 +690,9 @@ G4BoundingEnvelope::CreateListOfEdges(const G4Polygon3D& baseA, std::size_t k = na - 1; for (std::size_t i=0; i kCarTolerance) { - pPlanes.push_back(G4Plane3D(norm,baseA[i])); + pPlanes.emplace_back(norm,baseA[i]); } k = i; } norm = (baseA[2]-baseA[0]).cross(baseA[1]-pa); if (norm.mag2() > kCarTolerance) { - pPlanes.push_back(G4Plane3D(norm,pa)); + pPlanes.emplace_back(norm,pa); } norm = (baseB[2]-baseB[0]).cross(baseB[1]-pb); if (norm.mag2() > kCarTolerance) { - pPlanes.push_back(G4Plane3D(norm,pb)); + pPlanes.emplace_back(norm,pb); } } else if (nb == 1) // baseB has one vertex @@ -773,14 +773,14 @@ G4BoundingEnvelope::CreateListOfPlanes(const G4Polygon3D& baseA, norm = (baseA[i]-baseB[0]).cross(baseA[k]-baseB[0]); if (norm.mag2() > kCarTolerance) { - pPlanes.push_back(G4Plane3D(norm,baseB[0])); + pPlanes.emplace_back(norm,baseB[0]); } k = i; } norm = (baseA[2]-baseA[0]).cross(baseA[1]-pa); if (norm.mag2() > kCarTolerance) { - pPlanes.push_back(G4Plane3D(norm,pa)); + pPlanes.emplace_back(norm,pa); } } else if (na == 1) // baseA has one vertex @@ -791,14 +791,14 @@ G4BoundingEnvelope::CreateListOfPlanes(const G4Polygon3D& baseA, norm = (baseB[i]-baseA[0]).cross(baseB[k]-baseA[0]); if (norm.mag2() > kCarTolerance) { - pPlanes.push_back(G4Plane3D(norm,baseA[0])); + pPlanes.emplace_back(norm,baseA[0]); } k = i; } norm = (baseB[2]-baseB[0]).cross(baseB[1]-pb); if (norm.mag2() > kCarTolerance) { - pPlanes.push_back(G4Plane3D(norm,pb)); + pPlanes.emplace_back(norm,pb); } } @@ -964,64 +964,64 @@ G4BoundingEnvelope::ClipVoxelByPlanes(G4int pBits, std::vector edges(12); G4int i = 0, bits = pBits; - if (!(bits & 0x001)) + if ((bits & 0x001) == 0) { edges[i ].first.set( xmin,ymin,zmin); edges[i++].second.set(xmax,ymin,zmin); } - if (!(bits & 0x002)) + if ((bits & 0x002) == 0) { edges[i ].first.set( xmax,ymin,zmin); edges[i++].second.set(xmax,ymax,zmin); } - if (!(bits & 0x004)) + if ((bits & 0x004) == 0) { edges[i ].first.set( xmax,ymax,zmin); edges[i++].second.set(xmin,ymax,zmin); } - if (!(bits & 0x008)) + if ((bits & 0x008) == 0) { edges[i ].first.set( xmin,ymax,zmin); edges[i++].second.set(xmin,ymin,zmin); } - if (!(bits & 0x010)) + if ((bits & 0x010) == 0) { edges[i ].first.set( xmin,ymin,zmax); edges[i++].second.set(xmax,ymin,zmax); } - if (!(bits & 0x020)) + if ((bits & 0x020) == 0) { edges[i ].first.set( xmax,ymin,zmax); edges[i++].second.set(xmax,ymax,zmax); } - if (!(bits & 0x040)) + if ((bits & 0x040) == 0) { edges[i ].first.set( xmax,ymax,zmax); edges[i++].second.set(xmin,ymax,zmax); } - if (!(bits & 0x080)) + if ((bits & 0x080) == 0) { edges[i ].first.set( xmin,ymax,zmax); edges[i++].second.set(xmin,ymin,zmax); } - if (!(bits & 0x100)) + if ((bits & 0x100) == 0) { edges[i ].first.set( xmin,ymin,zmin); edges[i++].second.set(xmin,ymin,zmax); } - if (!(bits & 0x200)) + if ((bits & 0x200) == 0) { edges[i ].first.set( xmax,ymin,zmin); edges[i++].second.set(xmax,ymin,zmax); } - if (!(bits & 0x400)) + if ((bits & 0x400) == 0) { edges[i ].first.set( xmax,ymax,zmin); edges[i++].second.set(xmax,ymax,zmax); } - if (!(bits & 0x800)) + if ((bits & 0x800) == 0) { edges[i ].first.set( xmin,ymax,zmin); edges[i++].second.set(xmin,ymax,zmax); @@ -1030,16 +1030,16 @@ G4BoundingEnvelope::ClipVoxelByPlanes(G4int pBits, // Clip the edges by the planes // - for (auto iedge = edges.cbegin(); iedge != edges.cend(); ++iedge) + for (const auto & edge : edges) { G4bool exist = true; - G4Point3D p1 = iedge->first; - G4Point3D p2 = iedge->second; - for (auto iplane = pPlanes.cbegin(); iplane != pPlanes.cend(); ++iplane) + G4Point3D p1 = edge.first; + G4Point3D p2 = edge.second; + for (const auto & plane : pPlanes) { // Clip current edge - G4double d1 = iplane->distance(p1); - G4double d2 = iplane->distance(p2); + G4double d1 = plane.distance(p1); + G4double d2 = plane.distance(p2); if (d1 > 0.0) { if (d2 > 0.0) { exist = false; break; } // go to next edge diff --git a/source/geometry/management/src/G4ErrorTarget.cc b/source/geometry/management/src/G4ErrorTarget.cc index 073716bdef0..156143c02e3 100644 --- a/source/geometry/management/src/G4ErrorTarget.cc +++ b/source/geometry/management/src/G4ErrorTarget.cc @@ -30,7 +30,7 @@ #include "G4ErrorTarget.hh" -G4ErrorTarget::G4ErrorTarget() : theType(G4ErrorTarget_GeomVolume) {} +G4ErrorTarget::G4ErrorTarget() {} G4double G4ErrorTarget::GetDistanceFromPoint( const G4ThreeVector&, const G4ThreeVector& ) const diff --git a/source/geometry/management/src/G4GeomTools.cc b/source/geometry/management/src/G4GeomTools.cc index 9ffb905d25d..2a7ff38be58 100644 --- a/source/geometry/management/src/G4GeomTools.cc +++ b/source/geometry/management/src/G4GeomTools.cc @@ -75,7 +75,7 @@ G4double G4GeomTools::QuadArea(const G4TwoVector& A, G4double G4GeomTools::PolygonArea(const G4TwoVectorList& p) { - G4int n = (G4int)p.size(); + auto n = (G4int)p.size(); if (n < 3) return 0.0; // degenerate polygon G4double area = p[n-1].x()*p[0].y() - p[0].x()*p[n-1].y(); for(G4int i=1; i p.y()) != (v[k].y() > p.y())) { G4double ctg = (v[k].x()-v[i].x())/(v[k].y()-v[i].y()); - in ^= (p.x() < (p.y()-v[i].y())*ctg + v[i].x()); + in ^= static_cast(p.x() < (p.y()-v[i].y())*ctg + v[i].x()); } } return in; @@ -169,7 +169,7 @@ G4bool G4GeomTools::IsConvex(const G4TwoVectorList& polygon) G4bool gotNegative = false; G4bool gotPositive = false; - G4int n = (G4int)polygon.size(); + auto n = (G4int)polygon.size(); if (n <= 0) return false; for (G4int icur=0; icur triangles; G4bool reply = TriangulatePolygon(polygon,triangles); - G4int n = (G4int)triangles.size(); + auto n = (G4int)triangles.size(); for (G4int i=0; i 0.) for (G4int i=0; i= 0) ? A : A + (-d/a)*edge0); } default: // impossible case - return G4ThreeVector(kInfinity,kInfinity,kInfinity); + return {kInfinity,kInfinity,kInfinity}; } } diff --git a/source/geometry/management/src/G4GeometryManager.cc b/source/geometry/management/src/G4GeometryManager.cc index 7b1cffa4c6f..ee0988e806a 100644 --- a/source/geometry/management/src/G4GeometryManager.cc +++ b/source/geometry/management/src/G4GeometryManager.cc @@ -164,10 +164,10 @@ void G4GeometryManager::BuildOptimisations(G4bool allOpts, G4bool verbose) G4LogicalVolume* volume; G4SmartVoxelHeader* head; - for (size_t n=0; nsize(); ++n) + for (auto & n : *Store) { if (verbose) timer.Start(); - volume=(*Store)[n]; + volume=n; // For safety, check if there are any existing voxels and // delete before replacement // @@ -177,7 +177,7 @@ void G4GeometryManager::BuildOptimisations(G4bool allOpts, G4bool verbose) if ( ( (volume->IsToOptimise()) && (volume->GetNoDaughters()>=kMinVoxelVolumesLevel1&&allOpts) ) || ( (volume->GetNoDaughters()==1) - && (volume->GetDaughter(0)->IsReplicated()==true) + && (volume->GetDaughter(0)->IsReplicated()) && (volume->GetDaughter(0)->GetRegularStructureId()!=1) ) ) { #ifdef G4GEOMETRY_VOXELDEBUG @@ -202,9 +202,9 @@ void G4GeometryManager::BuildOptimisations(G4bool allOpts, G4bool verbose) if (verbose) { timer.Stop(); - stats.push_back( G4SmartVoxelStat( volume, head, + stats.emplace_back( volume, head, timer.GetSystemElapsed(), - timer.GetUserElapsed() ) ); + timer.GetUserElapsed() ); } } else @@ -246,7 +246,7 @@ void G4GeometryManager::BuildOptimisations(G4bool allOpts, if ( ( (tVolume->IsToOptimise()) && (tVolume->GetNoDaughters()>=kMinVoxelVolumesLevel1&&allOpts) ) || ( (tVolume->GetNoDaughters()==1) - && (tVolume->GetDaughter(0)->IsReplicated()==true) ) ) + && (tVolume->GetDaughter(0)->IsReplicated()) ) ) { head = new G4SmartVoxelHeader(tVolume); if (head != nullptr) @@ -276,7 +276,7 @@ void G4GeometryManager::BuildOptimisations(G4bool allOpts, // Scan recursively the associated logical volume tree // tVolume = pVolume->GetLogicalVolume(); - if (tVolume->GetNoDaughters()) + if (tVolume->GetNoDaughters() != 0) { BuildOptimisations(allOpts, tVolume->GetDaughter(0)); } @@ -291,9 +291,9 @@ void G4GeometryManager::DeleteOptimisations() { G4LogicalVolume* tVolume = nullptr; G4LogicalVolumeStore* Store = G4LogicalVolumeStore::GetInstance(); - for (size_t n=0; nsize(); ++n) + for (auto & n : *Store) { - tVolume=(*Store)[n]; + tVolume=n; delete tVolume->GetVoxelHeader(); tVolume->SetVoxelHeader(nullptr); } @@ -306,7 +306,7 @@ void G4GeometryManager::DeleteOptimisations() // void G4GeometryManager::DeleteOptimisations(G4VPhysicalVolume* pVolume) { - if (!pVolume) { return; } + if (pVolume == nullptr) { return; } // Retrieve the mother logical volume, if not NULL, // otherwise global deletion to world volume. @@ -319,7 +319,7 @@ void G4GeometryManager::DeleteOptimisations(G4VPhysicalVolume* pVolume) // Scan recursively the associated logical volume tree // tVolume = pVolume->GetLogicalVolume(); - if (tVolume->GetNoDaughters()) + if (tVolume->GetNoDaughters() != 0) { DeleteOptimisations(tVolume->GetDaughter(0)); } @@ -332,7 +332,7 @@ void G4GeometryManager::DeleteOptimisations(G4VPhysicalVolume* pVolume) // void G4GeometryManager::SetWorldMaximumExtent(G4double extent) { - if (G4SolidStore::GetInstance()->size()) + if (!G4SolidStore::GetInstance()->empty()) { // Sanity check to assure that extent is fixed BEFORE creating // any geometry object (solids in this case) @@ -380,7 +380,7 @@ G4GeometryManager::ReportVoxelStats( std::vector & stats, G4int nPrint = nStat > 10 ? 10 : nStat; - if (nPrint) + if (nPrint != 0) { G4cout << "\n Voxelisation: top CPU users:" << G4endl; G4cout << " Percent Total CPU System CPU Memory Volume\n" @@ -423,7 +423,7 @@ G4GeometryManager::ReportVoxelStats( std::vector & stats, return a.GetMemoryUse() > b.GetMemoryUse(); } ); - if (nPrint) + if (nPrint != 0) { G4cout << "\n Voxelisation: top memory users:" << G4endl; G4cout << " Percent Memory Heads Nodes Pointers Total CPU Volume\n" diff --git a/source/geometry/management/src/G4LogicalCrystalVolume.cc b/source/geometry/management/src/G4LogicalCrystalVolume.cc index 1260295b35d..a797d3ba8bd 100644 --- a/source/geometry/management/src/G4LogicalCrystalVolume.cc +++ b/source/geometry/management/src/G4LogicalCrystalVolume.cc @@ -89,7 +89,7 @@ void G4LogicalCrystalVolume::SetMillerOrientation(G4int h, { // Align Miller normal vector (hkl) with +Z axis, and rotation about axis - if (verboseLevel) + if (verboseLevel != 0) { G4cout << "G4LatticePhysical::SetMillerOrientation(" << h << " " << k << " " << l << ", " << rot/CLHEP::deg << " deg)" << G4endl; diff --git a/source/geometry/management/src/G4LogicalVolume.cc b/source/geometry/management/src/G4LogicalVolume.cc index 42943025c60..02da06bb475 100644 --- a/source/geometry/management/src/G4LogicalVolume.cc +++ b/source/geometry/management/src/G4LogicalVolume.cc @@ -350,7 +350,7 @@ void G4LogicalVolume::AddDaughter(G4VPhysicalVolume* pNewDaughter) { pDaughterLogical->SetFieldManager(G4MT_fmanager, false); } - if (fRegion) + if (fRegion != nullptr) { PropagateRegion(); fRegion->RegionModified(true); @@ -371,7 +371,7 @@ void G4LogicalVolume::RemoveDaughter(const G4VPhysicalVolume* p) break; } } - if (fRegion) + if (fRegion != nullptr) { fRegion->RegionModified(true); } @@ -565,12 +565,12 @@ G4double G4LogicalVolume::GetMass(G4bool forced, { // Return the cached non-zero value, if not forced // - if ( (G4MT_mass) && (!forced) ) { return G4MT_mass; } + if ( ((G4MT_mass) != 0.0) && (!forced) ) { return G4MT_mass; } // Global density and computed mass associated to the logical // volume without considering its daughters // - G4Material* logMaterial = parMaterial ? parMaterial : GetMaterial(); + G4Material* logMaterial = parMaterial != nullptr ? parMaterial : GetMaterial(); if (logMaterial == nullptr) { std::ostringstream message; @@ -614,7 +614,7 @@ G4double G4LogicalVolume::GetMass(G4bool forced, for (auto i=0; iGetMultiplicity(); ++i) { G4VPVParameterisation* physParam = physDaughter->GetParameterisation(); - if (physParam) + if (physParam != nullptr) { daughterSolid = physParam->ComputeSolid(i, physDaughter); daughterSolid->ComputeDimensions(physParam, i, physDaughter); diff --git a/source/geometry/management/src/G4LogicalVolumeStore.cc b/source/geometry/management/src/G4LogicalVolumeStore.cc index b8c589d6557..1fdd4592d23 100644 --- a/source/geometry/management/src/G4LogicalVolumeStore.cc +++ b/source/geometry/management/src/G4LogicalVolumeStore.cc @@ -53,7 +53,7 @@ G4ThreadLocal G4bool G4LogicalVolumeStore::locked = false; // *************************************************************************** // G4LogicalVolumeStore::G4LogicalVolumeStore() - : std::vector() + { reserve(100); } @@ -157,7 +157,7 @@ void G4LogicalVolumeStore::Register(G4LogicalVolume* pVolume) std::vector vol_vec { pVolume }; store->bmap.insert(std::make_pair(vol_name, vol_vec)); } - if (fgNotifier) { fgNotifier->NotifyRegistration(); } + if (fgNotifier != nullptr) { fgNotifier->NotifyRegistration(); } store->mvalid = true; } diff --git a/source/geometry/management/src/G4PhysicalVolumeStore.cc b/source/geometry/management/src/G4PhysicalVolumeStore.cc index f233e00558d..e52ad6a3928 100644 --- a/source/geometry/management/src/G4PhysicalVolumeStore.cc +++ b/source/geometry/management/src/G4PhysicalVolumeStore.cc @@ -54,7 +54,7 @@ G4ThreadLocal G4bool G4PhysicalVolumeStore::locked = false; // *************************************************************************** // G4PhysicalVolumeStore::G4PhysicalVolumeStore() - : std::vector() + { reserve(100); } @@ -159,7 +159,7 @@ void G4PhysicalVolumeStore::Register(G4VPhysicalVolume* pVolume) std::vector vol_vec { pVolume }; store->bmap.insert(std::make_pair(vol_name, vol_vec)); } - if (fgNotifier) { fgNotifier->NotifyRegistration(); } + if (fgNotifier != nullptr) { fgNotifier->NotifyRegistration(); } store->mvalid = true; } diff --git a/source/geometry/management/src/G4ReflectedSolid.cc b/source/geometry/management/src/G4ReflectedSolid.cc index 27650fac747..f665db9a650 100644 --- a/source/geometry/management/src/G4ReflectedSolid.cc +++ b/source/geometry/management/src/G4ReflectedSolid.cc @@ -104,7 +104,7 @@ G4ReflectedSolid& G4ReflectedSolid::operator=(const G4ReflectedSolid& rhs) G4GeometryType G4ReflectedSolid::GetEntityType() const { - return G4String("G4ReflectedSolid"); + return {"G4ReflectedSolid"}; } const G4ReflectedSolid* G4ReflectedSolid::GetReflectedSolidPtr() const diff --git a/source/geometry/management/src/G4Region.cc b/source/geometry/management/src/G4Region.cc index 9a1348ed0a0..df5723ab941 100644 --- a/source/geometry/management/src/G4Region.cc +++ b/source/geometry/management/src/G4Region.cc @@ -71,7 +71,7 @@ G4Region::G4Region(const G4String& pName) G4MT_rsaction = nullptr; G4RegionStore* rStore = G4RegionStore::GetInstance(); - if (rStore->GetRegion(pName, false)) + if (rStore->GetRegion(pName, false) != nullptr) { std::ostringstream message; message << "The region has NOT been registered !" << G4endl @@ -111,7 +111,7 @@ G4Region::G4Region( __void__& ) G4Region::~G4Region() { G4RegionStore::GetInstance()->DeRegister(this); - if(fUserInfo != nullptr) { delete fUserInfo; } + delete fUserInfo; } // ******************************************************************** @@ -193,7 +193,7 @@ void G4Region::ScanVolumeTree(G4LogicalVolume* lv, G4bool region) if (volMat != nullptr) { AddMaterial(volMat); - G4Material* baseMat = const_cast(volMat->GetBaseMaterial()); + auto baseMat = const_cast(volMat->GetBaseMaterial()); if (baseMat != nullptr) { AddMaterial(baseMat); } } } @@ -221,7 +221,7 @@ void G4Region::ScanVolumeTree(G4LogicalVolume* lv, G4bool region) for (std::size_t mat=0; matGetMaterialScanner()->GetMaterial((G4int)mat); - if(!volMat && fInMassGeometry) + if((volMat == nullptr) && fInMassGeometry) { std::ostringstream message; message << "The parameterisation for the physical volume <" @@ -235,7 +235,7 @@ void G4Region::ScanVolumeTree(G4LogicalVolume* lv, G4bool region) if (volMat != nullptr) { AddMaterial(volMat); - G4Material* baseMat = const_cast(volMat->GetBaseMaterial()); + auto baseMat = const_cast(volMat->GetBaseMaterial()); if (baseMat != nullptr) { AddMaterial(baseMat); } } } @@ -260,7 +260,7 @@ void G4Region::ScanVolumeTree(G4LogicalVolume* lv, G4bool region) if(volMat != nullptr) { AddMaterial(volMat); - G4Material* baseMat = const_cast(volMat->GetBaseMaterial()); + auto baseMat = const_cast(volMat->GetBaseMaterial()); if (baseMat != nullptr) { AddMaterial(baseMat); } } } @@ -411,7 +411,7 @@ void G4Region::UpdateMaterialList() // void G4Region::SetWorld(G4VPhysicalVolume* wp) { - if(!wp) + if(wp == nullptr) { fWorldPhys = nullptr; } else { if(BelongsTo(wp)) fWorldPhys = wp; } @@ -431,7 +431,7 @@ G4bool G4Region::BelongsTo(G4VPhysicalVolume* thePhys) const if (currLog->GetRegion()==this) {return true;} std::size_t nDaughters = currLog->GetNoDaughters(); - while (nDaughters--) // Loop checking, 06.08.2015, G.Cosmo + while ((nDaughters--) != 0) // Loop checking, 06.08.2015, G.Cosmo { if (BelongsTo(currLog->GetDaughter(nDaughters))) {return true;} } @@ -498,7 +498,7 @@ G4Region* G4Region::GetParentRegion(G4bool& unique) const { if((*lvItr)->GetDaughter(iD)->GetLogicalVolume()->GetRegion()==this) { - if(parent) + if(parent != nullptr) { if(parent!=aR) { unique = false; } } diff --git a/source/geometry/management/src/G4RegionStore.cc b/source/geometry/management/src/G4RegionStore.cc index 8c2ae75d572..a5104548085 100644 --- a/source/geometry/management/src/G4RegionStore.cc +++ b/source/geometry/management/src/G4RegionStore.cc @@ -56,7 +56,7 @@ G4ThreadLocal G4bool G4RegionStore::locked = false; // *************************************************************************** // G4RegionStore::G4RegionStore() - : std::vector() + { reserve(20); } @@ -160,7 +160,7 @@ void G4RegionStore::Register(G4Region* pRegion) std::vector reg_vec { pRegion }; store->bmap.insert(std::make_pair(reg_name, reg_vec)); } - if (fgNotifier) { fgNotifier->NotifyRegistration(); } + if (fgNotifier != nullptr) { fgNotifier->NotifyRegistration(); } store->mvalid = true; } diff --git a/source/geometry/management/src/G4SmartVoxelHeader.cc b/source/geometry/management/src/G4SmartVoxelHeader.cc index 1cb236aa4ae..e97d819b9a7 100644 --- a/source/geometry/management/src/G4SmartVoxelHeader.cc +++ b/source/geometry/management/src/G4SmartVoxelHeader.cc @@ -270,14 +270,14 @@ void G4SmartVoxelHeader::BuildReplicaVoxels(G4LogicalVolume* pVolume) // Consistency check: pVolume should contain single replicated volume // if ( (pVolume->GetNoDaughters()==1) - && (pVolume->GetDaughter(0)->IsReplicated()==true) ) + && (pVolume->GetDaughter(0)->IsReplicated()) ) { // Obtain replication data // pDaughter = pVolume->GetDaughter(0); pDaughter->GetReplicationData(axis,nReplicas,width,offset,consuming); fparamAxis = axis; - if ( consuming == false ) + if ( !consuming ) { G4VoxelLimits limits; // Create `unlimited' limits object G4VolumeNosVector targetList; @@ -415,7 +415,7 @@ void G4SmartVoxelHeader::BuildConsumedNodes(G4int nReplicas) for (nNode=0; nNodeGetNode(); } G4SmartVoxelProxy* tmpProx; - while (pTestSlices->size()>0) // Loop checking, 06.08.2015, G.Cosmo + while (!pTestSlices->empty()) // Loop checking, 06.08.2015, G.Cosmo { tmpProx = pTestSlices->back(); pTestSlices->pop_back(); @@ -500,7 +500,7 @@ G4SmartVoxelHeader::BuildVoxelsWithinLimits(G4LogicalVolume* pVolume, ++i; } } - if ( tmpProx ) { delete tmpProx; } + delete tmpProx; } delete pTestSlices; } @@ -509,7 +509,7 @@ G4SmartVoxelHeader::BuildVoxelsWithinLimits(G4LogicalVolume* pVolume, // Check for error case.. when limits already 3d, // so cannot select a new axis // - if (!pGoodSlices) + if (pGoodSlices == nullptr) { G4Exception("G4SmartVoxelHeader::BuildVoxelsWithinLimits()", "GeomMgt0002", FatalException, @@ -776,7 +776,7 @@ G4ProxyVector* G4SmartVoxelHeader::BuildNodes(G4LogicalVolume* pVolume, G4VolumeExtentVector maxExtents(nCandidates,0.); if ( (pVolume->GetNoDaughters() == 1) - && (pVolume->GetDaughter(0)->IsReplicated() == true) ) + && (pVolume->GetDaughter(0)->IsReplicated()) ) { // Replication data not required: only parameterisation object // and volume no. List used @@ -809,7 +809,7 @@ G4ProxyVector* G4SmartVoxelHeader::BuildNodes(G4LogicalVolume* pVolume, for (nVol=0; nVolGetDaughter(targetVolNo); @@ -930,7 +930,7 @@ G4ProxyVector* G4SmartVoxelHeader::BuildNodes(G4LogicalVolume* pVolume, G4double smartless = (smartlessComputed <= smartlessUser) ? smartlessComputed : smartlessUser; G4double noNodesSmart = smartless*nCandidates; - G4int noNodesExactI = G4int(noNodesSmart); + auto noNodesExactI = G4int(noNodesSmart); G4long noNodes = ((noNodesSmart-noNodesExactI)>=0.5) ? noNodesExactI+1 : noNodesExactI; if( noNodes == 0 ) { noNodes=1; } @@ -1076,7 +1076,7 @@ G4double G4SmartVoxelHeader::CalculateQuality(G4ProxyVector *pSlice) // node = (*pSlice)[i]->GetNode(); noContained = node->GetNoContained(); - if (noContained) + if (noContained != 0) { ++sumNonEmptyNodes; sumContained += noContained; @@ -1098,7 +1098,7 @@ G4double G4SmartVoxelHeader::CalculateQuality(G4ProxyVector *pSlice) // Calculate quality with protection against no non-empty nodes // - if (sumNonEmptyNodes) + if (sumNonEmptyNodes != 0) { quality = sumContained/sumNonEmptyNodes; } diff --git a/source/geometry/management/src/G4SolidStore.cc b/source/geometry/management/src/G4SolidStore.cc index 88ce7a92509..d7fe70b4977 100644 --- a/source/geometry/management/src/G4SolidStore.cc +++ b/source/geometry/management/src/G4SolidStore.cc @@ -53,7 +53,7 @@ G4ThreadLocal G4bool G4SolidStore::locked = false; // *************************************************************************** // G4SolidStore::G4SolidStore() - : std::vector() + { reserve(100); } @@ -156,7 +156,7 @@ void G4SolidStore::Register(G4VSolid* pSolid) std::vector sol_vec { pSolid }; store->bmap.insert(std::make_pair(sol_name, sol_vec)); } - if (fgNotifier) { fgNotifier->NotifyRegistration(); } + if (fgNotifier != nullptr) { fgNotifier->NotifyRegistration(); } store->mvalid = true; } diff --git a/source/geometry/management/src/G4VPhysicalVolume.cc b/source/geometry/management/src/G4VPhysicalVolume.cc index ddd2e58d4be..856f35a9a50 100644 --- a/source/geometry/management/src/G4VPhysicalVolume.cc +++ b/source/geometry/management/src/G4VPhysicalVolume.cc @@ -180,7 +180,7 @@ G4RotationMatrix* G4VPhysicalVolume::GetObjectRotation() const G4RotationMatrix* retval = &IdentityRM; // Insure against frot being a null pointer - if(this->GetRotation()) + if(this->GetRotation() != nullptr) { aRotM = GetRotation()->inverse(); retval= &aRotM; @@ -202,7 +202,7 @@ G4RotationMatrix G4VPhysicalVolume::GetObjectRotationValue() const G4ThreeVector G4VPhysicalVolume::GetObjectTranslation() const { - return G4ThreeVector(G4MT_tx, G4MT_ty, G4MT_tz); + return {G4MT_tx, G4MT_ty, G4MT_tz}; } const G4RotationMatrix* G4VPhysicalVolume::GetFrameRotation() const diff --git a/source/geometry/management/src/G4VSolid.cc b/source/geometry/management/src/G4VSolid.cc index 493bf37f250..fb580060fa1 100644 --- a/source/geometry/management/src/G4VSolid.cc +++ b/source/geometry/management/src/G4VSolid.cc @@ -157,7 +157,7 @@ G4ThreeVector G4VSolid::GetPointOnSurface() const << "Returning origin."; G4Exception("G4VSolid::GetPointOnSurface()", "GeomMgt1001", JustWarning, message); - return G4ThreeVector(0,0,0); + return {0,0,0}; } ////////////////////////////////////////////////////////////////////////// @@ -498,7 +498,7 @@ G4VSolid::CalculateClippedPolygonExtent(G4ThreeVectorList& pPolygon, ClipPolygon(pPolygon,pVoxelLimit,pAxis); noLeft = (G4int)pPolygon.size(); - if ( noLeft ) + if ( noLeft != 0 ) { for (i=0; i2 + if ( eCode != 0 ) // Clip 2nd end: repeat of 1st, but 1<>2 { - if ( eCode & 0x01 ) // Clip against fxAxisMin + if ( (eCode & 0x01) != 0 ) // Clip against fxAxisMin { z2 += (fxAxisMin-x2)*(z1-z2)/(x1-x2); y2 += (fxAxisMin-x2)*(y1-y2)/(x1-x2); x2 = fxAxisMin; } - else if ( eCode & 0x02 ) // Clip against fxAxisMax + else if ( (eCode & 0x02) != 0 ) // Clip against fxAxisMax { z2 += (fxAxisMax-x2)*(z1-z2)/(x1-x2); y2 += (fxAxisMax-x2)*(y1-y2)/(x1-x2); x2 = fxAxisMax; } - else if ( eCode & 0x04 ) // Clip against fyAxisMin + else if ( (eCode & 0x04) != 0 ) // Clip against fyAxisMin { x2 += (fyAxisMin-y2)*(x1-x2)/(y1-y2); z2 += (fyAxisMin-y2)*(z1-z2)/(y1-y2); y2 = fyAxisMin; } - else if (eCode&0x08) // Clip against fyAxisMax + else if ((eCode&0x08) != 0) // Clip against fyAxisMax { x2 += (fyAxisMax-y2)*(x1-x2)/(y1-y2); z2 += (fyAxisMax-y2)*(z1-z2)/(y1-y2); y2 = fyAxisMax; } - else if ( eCode & 0x10 ) // Clip against fzAxisMin + else if ( (eCode & 0x10) != 0 ) // Clip against fzAxisMin { x2 += (fzAxisMin-z2)*(x1-x2)/(z1-z2); y2 += (fzAxisMin-z2)*(y1-y2)/(z1-z2); z2 = fzAxisMin; } - else if ( eCode & 0x20 ) // Clip against fzAxisMax + else if ( (eCode & 0x20) != 0 ) // Clip against fzAxisMax { x2 += (fzAxisMax-z2)*(x1-x2)/(z1-z2); y2 += (fzAxisMax-z2)*(y1-y2)/(z1-z2); @@ -201,8 +201,7 @@ G4bool G4VoxelLimits::ClipToLimits( G4ThreeVector& pStart, sCode = OutCode(pStart); eCode = OutCode(pEnd); } - if ( sCode == 0 && eCode == 0 ) remainsAfterClip = true; - else remainsAfterClip = false; + remainsAfterClip = sCode == 0 && eCode == 0; } return remainsAfterClip; } diff --git a/source/geometry/navigation/GNUmakefile b/source/geometry/navigation/GNUmakefile deleted file mode 100644 index 4f77027b0c9..00000000000 --- a/source/geometry/navigation/GNUmakefile +++ /dev/null @@ -1,38 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for geometry/volumes library. Gabriele Cosmo, 16/11/96. -# -------------------------------------------------------------------- - -name := G4navigation - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4GEOM_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/graphics_reps/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include - -ifdef G4DEBUG_NAVIGATION - CPPFLAGS += -DG4DEBUG_NAVIGATION -endif -ifdef G4DEBUG_FIELD - CPPFLAGS += -DG4DEBUG_FIELD -endif -ifdef G4DEBUG_PATHFINDER - CPPFLAGS += -DG4DEBUG_PATHFINDER -endif -ifdef PATHFINDER_OPTIMISATION - CPPFLAGS += -DPATHFINDER_OPTIMISATION -endif - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/geometry/navigation/History b/source/geometry/navigation/History index bbb09194d1c..862cf7156ee 100644 --- a/source/geometry/navigation/History +++ b/source/geometry/navigation/History @@ -5,8 +5,22 @@ which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- + +## 2023-06-13 Gabriele Cosmo (geomnav-V11-01-01) +- Applied clang-tidy fixes (readability, modernization, performance, ...). + +## 2023-01-31 John Apostolakis (geomnav-V11-01-00) +- G4PropagatorInField: Added parameters for big steps. + New parameter 'MaxStepSizeMultiplier' - enables changing + (eg needed to reduce costly unnecessary integration in QSS) + New parameter 'MinBigDistance' used as minimum distance in + case of long steps. Could be adapted to size of world. + Default values also changed: + 'LargestAcceptableDistance' = 100 * meter ( from 1000* meter ) + 'MaxStepSizeMultiplier' = 0.1 ( from 100 ). + ## 2022-11-23 John Apostolakis (geomnav-V11-00-09) -- G4MultiLevelLocator: refresh candidate intersection point when needed +- G4MultiLevelLocator: refresh candidate intersection point when needed. ## 2022-11-10 John Apostolakis (geomnav-V11-00-08) - Improved diagnostic message in G4MultiLevelLocator - they missed to print diff --git a/source/geometry/navigation/include/G4AuxiliaryNavServices.icc b/source/geometry/navigation/include/G4AuxiliaryNavServices.icc index dff25c5c8bc..ab18b2bd614 100644 --- a/source/geometry/navigation/include/G4AuxiliaryNavServices.icc +++ b/source/geometry/navigation/include/G4AuxiliaryNavServices.icc @@ -41,7 +41,7 @@ CheckPointOnSurface( const G4VSolid* sampleSolid, EInside insideSolid = sampleSolid->Inside(localPoint); if ( insideSolid!=kOutside ) { - G4bool checkDirection = locatedOnEdge && (globalDirection!=0); + G4bool checkDirection = locatedOnEdge && (globalDirection!=nullptr); if( (insideSolid==kSurface) && checkDirection) { // We are probably located on an edge. @@ -109,7 +109,7 @@ CheckPointExiting( const G4VSolid* sampleSolid, const G4ThreeVector* globalDirection, const G4AffineTransform& sampleTransform ) { - if( !globalDirection ) { return false; } + if( globalDirection == nullptr ) { return false; } G4ThreeVector localDirection, sampleNormal; G4bool exiting = false; diff --git a/source/geometry/navigation/include/G4BrentLocator.hh b/source/geometry/navigation/include/G4BrentLocator.hh index 1fb0ad08324..146d419be0f 100644 --- a/source/geometry/navigation/include/G4BrentLocator.hh +++ b/source/geometry/navigation/include/G4BrentLocator.hh @@ -50,17 +50,17 @@ class G4BrentLocator : public G4VIntersectionLocator G4BrentLocator(G4Navigator *theNavigator); // Constructor - ~G4BrentLocator(); + ~G4BrentLocator() override; // Default destructor G4bool EstimateIntersectionPoint( - const G4FieldTrack& curveStartPointTangent, // A - const G4FieldTrack& curveEndPointTangent, // B - const G4ThreeVector& trialPoint, // E - G4FieldTrack& intersectPointTangent, // Output - G4bool& recalculatedEndPoint, // Out - G4double& fPreviousSafety, // In/Out - G4ThreeVector& fPreviousSftOrigin); // In/Out + const G4FieldTrack& curveStartPointTangent, // A + const G4FieldTrack& curveEndPointTangent, // B + const G4ThreeVector& trialPoint, // E + G4FieldTrack& intersectPointTangent, // Output + G4bool& recalculatedEndPoint, // Out + G4double& fPreviousSafety, // In/Out + G4ThreeVector& fPreviousSftOrigin) override; // In/Out // If such an intersection exists, this function calculates the // intersection point of the true path of the particle with the surface // of the current volume (or of one of its daughters). diff --git a/source/geometry/navigation/include/G4ErrorPropagationNavigator.hh b/source/geometry/navigation/include/G4ErrorPropagationNavigator.hh index 2f02c9f4088..2cbdbcf9d62 100644 --- a/source/geometry/navigation/include/G4ErrorPropagationNavigator.hh +++ b/source/geometry/navigation/include/G4ErrorPropagationNavigator.hh @@ -46,23 +46,23 @@ class G4ErrorPropagationNavigator : public G4Navigator public: // with description G4ErrorPropagationNavigator(); - ~G4ErrorPropagationNavigator(); + ~G4ErrorPropagationNavigator() override; G4double ComputeStep (const G4ThreeVector &pGlobalPoint, const G4ThreeVector &pDirection, const G4double pCurrentProposedStepLength, - G4double &pNewSafety); + G4double &pNewSafety) override; // Calls the navigation in the detector geometry and then checks // if the distance to surface is smaller than the proposed step G4double ComputeSafety(const G4ThreeVector &globalpoint, const G4double pProposedMaxLength = DBL_MAX, - const G4bool keepState = true); + const G4bool keepState = true) override; // Calls the navigation in the detector geometry and then checks // if the distance to surface is smaller than the proposed safety G4ThreeVector GetGlobalExitNormal(const G4ThreeVector& point, - G4bool* valid); + G4bool* valid) override; // Return Exit Surface Normal and validity too. Can only be called if // the Navigator's last Step has crossed a volume geometrical boundary. // Normal points out of the volume exited and/or into the volume entered. diff --git a/source/geometry/navigation/include/G4GeometryMessenger.hh b/source/geometry/navigation/include/G4GeometryMessenger.hh index 1a5dbcc1ab0..826b2e50c11 100644 --- a/source/geometry/navigation/include/G4GeometryMessenger.hh +++ b/source/geometry/navigation/include/G4GeometryMessenger.hh @@ -55,20 +55,20 @@ class G4GeometryMessenger : public G4UImessenger public: // with description G4GeometryMessenger(G4TransportationManager* tman); - ~G4GeometryMessenger(); + ~G4GeometryMessenger() override; // Constructor and destructor - void SetNewValue( G4UIcommand* command, G4String newValues ); - G4String GetCurrentValue( G4UIcommand* command ); + void SetNewValue( G4UIcommand* command, G4String newValues ) override; + G4String GetCurrentValue( G4UIcommand* command ) override; private: void Init(); void CheckGeometry(); void ResetNavigator(); - void SetVerbosity(G4String newValue); - void SetCheckMode(G4String newValue); - void SetPushFlag(G4String newValue); + void SetVerbosity(const G4String& newValue); + void SetCheckMode(const G4String& newValue); + void SetPushFlag(const G4String& newValue); void RecursiveOverlapTest(); G4UIdirectory *geodir, *navdir, *testdir; diff --git a/source/geometry/navigation/include/G4GlobalMagFieldMessenger.hh b/source/geometry/navigation/include/G4GlobalMagFieldMessenger.hh index a0af28d77c5..228d0c24448 100644 --- a/source/geometry/navigation/include/G4GlobalMagFieldMessenger.hh +++ b/source/geometry/navigation/include/G4GlobalMagFieldMessenger.hh @@ -56,9 +56,9 @@ class G4GlobalMagFieldMessenger : public G4UImessenger public: // with description G4GlobalMagFieldMessenger(const G4ThreeVector& value = G4ThreeVector()); - virtual ~G4GlobalMagFieldMessenger(); + ~G4GlobalMagFieldMessenger() override; - virtual void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; void SetFieldValue(const G4ThreeVector& value); G4ThreeVector GetFieldValue() const; diff --git a/source/geometry/navigation/include/G4LocatorChangeLogger.hh b/source/geometry/navigation/include/G4LocatorChangeLogger.hh index 4181d4044cd..a9c96296011 100644 --- a/source/geometry/navigation/include/G4LocatorChangeLogger.hh +++ b/source/geometry/navigation/include/G4LocatorChangeLogger.hh @@ -43,7 +43,7 @@ class G4LocatorChangeLogger : public std::vector { public: - G4LocatorChangeLogger( const std::string name ) : fName(name) {} + G4LocatorChangeLogger( const std::string& name ) : fName(name) {} void AddRecord( G4LocatorChangeRecord && chngRecord ); void AddRecord( const G4LocatorChangeRecord & chngRecord ); diff --git a/source/geometry/navigation/include/G4MultiLevelLocator.hh b/source/geometry/navigation/include/G4MultiLevelLocator.hh index 5d3fa8543d1..24eca7bfbb6 100644 --- a/source/geometry/navigation/include/G4MultiLevelLocator.hh +++ b/source/geometry/navigation/include/G4MultiLevelLocator.hh @@ -50,17 +50,17 @@ class G4MultiLevelLocator : public G4VIntersectionLocator G4MultiLevelLocator(G4Navigator *theNavigator); // Constructor - ~G4MultiLevelLocator(); + ~G4MultiLevelLocator() override; // Default destructor G4bool EstimateIntersectionPoint( - const G4FieldTrack& curveStartPointTangent, // A - const G4FieldTrack& curveEndPointTangent, // B - const G4ThreeVector& trialPoint, // E - G4FieldTrack& intersectPointTangent, // Output - G4bool& recalculatedEndPoint, // Out - G4double& fPreviousSafety, // In/Out - G4ThreeVector& fPreviousSftOrigin); // In/Out + const G4FieldTrack& curveStartPointTangent, // A + const G4FieldTrack& curveEndPointTangent, // B + const G4ThreeVector& trialPoint, // E + G4FieldTrack& intersectPointTangent, // Output + G4bool& recalculatedEndPoint, // Out + G4double& fPreviousSafety, // In/Out + G4ThreeVector& fPreviousSftOrigin) override; // In/Out // If such an intersection exists, this function calculates the // intersection point of the true path of the particle with the surface // of the current volume (or of one of its daughters). diff --git a/source/geometry/navigation/include/G4MultiNavigator.hh b/source/geometry/navigation/include/G4MultiNavigator.hh index 5d76ed43239..a72302d5408 100644 --- a/source/geometry/navigation/include/G4MultiNavigator.hh +++ b/source/geometry/navigation/include/G4MultiNavigator.hh @@ -60,13 +60,13 @@ class G4MultiNavigator : public G4Navigator G4MultiNavigator(); // Constructor - initialisers and setup. - ~G4MultiNavigator(); + ~G4MultiNavigator() override; // Destructor. No actions. G4double ComputeStep( const G4ThreeVector& pGlobalPoint, const G4ThreeVector& pDirection, const G4double pCurrentProposedStepLength, - G4double& pNewSafety ); + G4double& pNewSafety ) override; // Return the distance to the next boundary of any geometry G4double ObtainFinalStep( G4int navigatorId, @@ -77,13 +77,13 @@ class G4MultiNavigator : public G4Navigator void PrepareNavigators(); // Find which geometries are registered for this particles, and keep info - void PrepareNewTrack( const G4ThreeVector position, + void PrepareNewTrack( const G4ThreeVector& position, const G4ThreeVector direction ); // Prepare Navigators and locate G4VPhysicalVolume* ResetHierarchyAndLocate( const G4ThreeVector& point, - const G4ThreeVector& direction, - const G4TouchableHistory& h ); + const G4ThreeVector& direction, + const G4TouchableHistory& h ) override; // Reset the geometrical hierarchy for all geometries. // Use the touchable history for the first (mass) geometry. // Return the volume in the first (mass) geometry. @@ -91,35 +91,35 @@ class G4MultiNavigator : public G4Navigator // Important Note: In order to call this the geometries MUST be closed. G4VPhysicalVolume* LocateGlobalPointAndSetup( const G4ThreeVector& point, - const G4ThreeVector* direction = nullptr, - const G4bool pRelativeSearch = true, - const G4bool ignoreDirection = true); + const G4ThreeVector* direction = nullptr, + const G4bool pRelativeSearch = true, + const G4bool ignoreDirection = true) override; // Locate in all geometries. // Return the volume in the first (mass) geometry // Maintain vector of other volumes, to be returned separately // // Important Note: In order to call this the geometry MUST be closed. - void LocateGlobalPointWithinVolume( const G4ThreeVector& position ); + void LocateGlobalPointWithinVolume( const G4ThreeVector& position ) override; // Relocate in all geometries for point that has not changed volume // (ie is within safety in all geometries or is distance less that // along the direction of a computed step. G4double ComputeSafety( const G4ThreeVector& globalpoint, const G4double pProposedMaxLength = DBL_MAX, - const G4bool keepState = false ); + const G4bool keepState = false ) override; // Calculate the isotropic distance to the nearest boundary // in any geometry from the specified point in the global coordinate // system. The geometry must be closed. - G4TouchableHistoryHandle CreateTouchableHistoryHandle() const; + G4TouchableHistoryHandle CreateTouchableHistoryHandle() const override; // Returns a reference counted handle to a touchable history. - virtual G4ThreeVector GetLocalExitNormal( G4bool* obtained ); // const - virtual G4ThreeVector GetLocalExitNormalAndCheck( const G4ThreeVector &E_Pt, - G4bool* obtained ); // const - virtual G4ThreeVector GetGlobalExitNormal( const G4ThreeVector &E_Pt, - G4bool* obtained ); // const + G4ThreeVector GetLocalExitNormal( G4bool* obtained ) override; // const + G4ThreeVector GetLocalExitNormalAndCheck( const G4ThreeVector &E_Pt, + G4bool* obtained ) override; // const + G4ThreeVector GetGlobalExitNormal( const G4ThreeVector &E_Pt, + G4bool* obtained ) override; // const // Return Exit Surface Normal and validity too. // Can only be called if the Navigator's last Step either // - has just crossed a volume geometrical boundary and relocated, or @@ -141,10 +141,10 @@ class G4MultiNavigator : public G4Navigator protected: // with description - void ResetState(); + void ResetState() override; // Utility method to reset the navigator state machine. - void SetupHierarchy(); + void SetupHierarchy() override; // Renavigate & reset hierarchy described by current history // o Reset volumes // o Recompute transforms and/or solids of replicated/parameterised diff --git a/source/geometry/navigation/include/G4Navigator.icc b/source/geometry/navigation/include/G4Navigator.icc index e07748f5bb9..a55e4380874 100644 --- a/source/geometry/navigation/include/G4Navigator.icc +++ b/source/geometry/navigation/include/G4Navigator.icc @@ -91,7 +91,7 @@ void G4Navigator::SetWorldVolume(G4VPhysicalVolume* pWorld) FatalException, "Volume must be centered on the origin."); } const G4RotationMatrix* rm = pWorld->GetRotation(); - if ( rm && (!rm->isIdentity()) ) + if ( (rm != nullptr) && (!rm->isIdentity()) ) { G4Exception ("G4Navigator::SetWorldVolume()", "GeomNav0002", FatalException, "Volume must not be rotated."); @@ -326,7 +326,7 @@ void G4Navigator::LocateGlobalPointAndUpdateTouchable( const G4bool RelativeSearch ) { G4VPhysicalVolume* pPhysVol; - pPhysVol = LocateGlobalPointAndSetup( position, 0, RelativeSearch); + pPhysVol = LocateGlobalPointAndSetup( position, nullptr, RelativeSearch); touchableToUpdate->UpdateYourself( pPhysVol, &fHistory ); } @@ -353,7 +353,7 @@ void G4Navigator::SetVerboseLevel(G4int level) fparamNav.SetVerboseLevel(level); freplicaNav.SetVerboseLevel(level); fregularNav.SetVerboseLevel(level); - if (fpExternalNav != nullptr) fpExternalNav->SetVerboseLevel(level); + if (fpExternalNav != nullptr) { fpExternalNav->SetVerboseLevel(level); } } // ******************************************************************** @@ -411,7 +411,7 @@ void G4Navigator::CheckMode(G4bool mode) fparamNav.CheckMode(mode); freplicaNav.CheckMode(mode); fregularNav.CheckMode(mode); - if (fpExternalNav != nullptr) fpExternalNav->CheckMode(mode); + if (fpExternalNav != nullptr) { fpExternalNav->CheckMode(mode); } } // ******************************************************************** @@ -445,7 +445,7 @@ inline G4int G4Navigator::SeverityOfZeroStepping( G4int* noZeroSteps ) const { G4int severity = 0, noZeros = fNumberZeroSteps; - if( noZeroSteps ) + if( noZeroSteps != nullptr ) { *noZeroSteps = fNumberZeroSteps; } @@ -522,7 +522,7 @@ void G4Navigator::SetExternalNavigation(G4VExternalNavigation* externalNav) inline G4Navigator* G4Navigator::Clone() const { - G4Navigator* clone_nav = new G4Navigator(); + auto clone_nav = new G4Navigator(); clone_nav->SetWorldVolume(fTopPhysical); if( fpExternalNav != nullptr ) { diff --git a/source/geometry/navigation/include/G4NormalNavigation.icc b/source/geometry/navigation/include/G4NormalNavigation.icc index 85d46bc3c61..0a65fc3731f 100644 --- a/source/geometry/navigation/include/G4NormalNavigation.icc +++ b/source/geometry/navigation/include/G4NormalNavigation.icc @@ -88,10 +88,7 @@ G4NormalNavigation::LevelLocate( G4NavigationHistory& history, found = true; break; } - else - { - history.BackLevel(); - } + history.BackLevel(); } } } diff --git a/source/geometry/navigation/include/G4ParameterisedNavigation.hh b/source/geometry/navigation/include/G4ParameterisedNavigation.hh index 913729bfa20..a6c6685d7e0 100644 --- a/source/geometry/navigation/include/G4ParameterisedNavigation.hh +++ b/source/geometry/navigation/include/G4ParameterisedNavigation.hh @@ -56,7 +56,7 @@ class G4ParameterisedNavigation : public G4VoxelNavigation public: // with description G4ParameterisedNavigation(); - ~G4ParameterisedNavigation(); + ~G4ParameterisedNavigation() override; inline G4SmartVoxelNode* ParamVoxelLocate( G4SmartVoxelHeader* pHead, const G4ThreeVector& localPoint ); @@ -67,7 +67,7 @@ class G4ParameterisedNavigation : public G4VoxelNavigation const G4ThreeVector& globalPoint, const G4ThreeVector* globalDirection, const G4bool pLocatedOnEdge, - G4ThreeVector& localPoint ); + G4ThreeVector& localPoint ) override; G4double ComputeStep( const G4ThreeVector& globalPoint, const G4ThreeVector& globalDirection, @@ -79,11 +79,11 @@ class G4ParameterisedNavigation : public G4VoxelNavigation G4bool& exiting, G4bool& entering, G4VPhysicalVolume *(*pBlockedPhysical), - G4int& blockedReplicaNo ); + G4int& blockedReplicaNo ) override; G4double ComputeSafety( const G4ThreeVector& localPoint, const G4NavigationHistory& history, - const G4double pProposedMaxLength=DBL_MAX ); + const G4double pProposedMaxLength=DBL_MAX ) override; private: diff --git a/source/geometry/navigation/include/G4PartialPhantomParameterisation.hh b/source/geometry/navigation/include/G4PartialPhantomParameterisation.hh index aa51f18db6f..8d57e232186 100644 --- a/source/geometry/navigation/include/G4PartialPhantomParameterisation.hh +++ b/source/geometry/navigation/include/G4PartialPhantomParameterisation.hh @@ -36,9 +36,10 @@ #ifndef G4PartialPhantomParameterisation_HH #define G4PartialPhantomParameterisation_HH -#include -#include #include +#include +#include +#include #include "G4Types.hh" #include "G4PhantomParameterisation.hh" @@ -54,16 +55,16 @@ class G4PartialPhantomParameterisation : public G4PhantomParameterisation public: // with description G4PartialPhantomParameterisation(); - ~G4PartialPhantomParameterisation(); + ~G4PartialPhantomParameterisation() override; - void ComputeTransformation(const G4int, G4VPhysicalVolume *) const; + void ComputeTransformation(const G4int, G4VPhysicalVolume *) const override; G4Material* ComputeMaterial(const G4int repNo, G4VPhysicalVolume *currentVol, - const G4VTouchable *parentTouch = nullptr); + const G4VTouchable *parentTouch = nullptr) override; G4int GetReplicaNo( const G4ThreeVector& localPoint, - const G4ThreeVector& localDir ); + const G4ThreeVector& localDir ) override; // Get the voxel number corresponding to the point in the container // frame. Use 'localDir' to avoid precision problems at the surfaces. @@ -77,12 +78,12 @@ class G4PartialPhantomParameterisation : public G4PhantomParameterisation void SetFilledIDs( std::multimap fid ) { - fFilledIDs = fid; + fFilledIDs = std::move(fid); } void SetFilledMins( std::map< G4int, std::map > fmins ) { - fFilledMins = fmins; + fFilledMins = std::move(fmins); } void BuildContainerWalls(); diff --git a/source/geometry/navigation/include/G4PathFinder.hh b/source/geometry/navigation/include/G4PathFinder.hh index 1270493c202..72e5c4ac0de 100644 --- a/source/geometry/navigation/include/G4PathFinder.hh +++ b/source/geometry/navigation/include/G4PathFinder.hh @@ -50,9 +50,8 @@ class G4TransportationManager; class G4Navigator; -#include "G4TouchableHandle.hh" -#include "G4FieldTrack.hh" #include "G4MultiNavigator.hh" +#include "G4TouchableHandle.hh" class G4PropagatorInField; diff --git a/source/geometry/navigation/include/G4PhantomParameterisation.hh b/source/geometry/navigation/include/G4PhantomParameterisation.hh index 6acac9f9041..73606e109c1 100644 --- a/source/geometry/navigation/include/G4PhantomParameterisation.hh +++ b/source/geometry/navigation/include/G4PhantomParameterisation.hh @@ -70,43 +70,43 @@ class G4PhantomParameterisation : public G4VPVParameterisation public: G4PhantomParameterisation(); - ~G4PhantomParameterisation(); + ~G4PhantomParameterisation() override; - virtual void ComputeTransformation(const G4int, G4VPhysicalVolume *) const; + void ComputeTransformation(const G4int, G4VPhysicalVolume *) const override; - virtual G4VSolid* ComputeSolid(const G4int, G4VPhysicalVolume *); + G4VSolid* ComputeSolid(const G4int, G4VPhysicalVolume *) override; - virtual G4Material* ComputeMaterial(const G4int repNo, + G4Material* ComputeMaterial(const G4int repNo, G4VPhysicalVolume* currentVol, - const G4VTouchable* parentTouch=nullptr); + const G4VTouchable* parentTouch=nullptr) override; // Dummy declarations ... void ComputeDimensions (G4Box &, const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Tubs&, const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trd&, const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Trap&, const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Cons&, const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Orb&, const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Sphere&, const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Ellipsoid&,const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Torus&, const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Para&, const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Hype&, const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polycone&, const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void ComputeDimensions (G4Polyhedra&, const G4int, - const G4VPhysicalVolume*) const {} + const G4VPhysicalVolume*) const override {} void BuildContainerSolid( G4VPhysicalVolume* pPhysicalVol ); void BuildContainerSolid( G4VSolid* pMotherSolid ); diff --git a/source/geometry/navigation/include/G4PropagatorInField.hh b/source/geometry/navigation/include/G4PropagatorInField.hh index 6f02ae8916e..70d8f79e557 100644 --- a/source/geometry/navigation/include/G4PropagatorInField.hh +++ b/source/geometry/navigation/include/G4PropagatorInField.hh @@ -123,8 +123,18 @@ class G4PropagatorInField // Their new behaviour is to change the values for the global field // manager - inline void SetLargestAcceptableStep( G4double newBigDist ); - inline G4double GetLargestAcceptableStep(); + void SetLargestAcceptableStep( G4double newBigDist ); + G4double GetLargestAcceptableStep(); + void ResetLargestAcceptableStep(); + // Obtain / change the size of the largest step the method will undertake + // Reset method uses the world volume's + + G4double GetMaxStepSizeMultiplier(); + void SetMaxStepSizeMultiplier(G4double vm); + // Control extra Multiplier parameter for limiting long steps. + G4double GetMinBigDistance(); + void SetMinBigDistance(G4double val); + // Control minimum 'directional' distance in case of too-large step void SetTrajectoryFilter(G4VCurvedTrajectoryFilter* filter); // Set the filter that examines & stores 'intermediate' @@ -210,7 +220,7 @@ class G4PropagatorInField void ReportLoopingParticle( G4int count, G4double StepTaken, G4double stepRequest, const char* methodName, - G4ThreeVector momentumVec, + const G4ThreeVector& momentumVec, G4VPhysicalVolume* physVol); void ReportStuckParticle(G4int noZeroSteps, G4double proposedStep, G4double lastTriedStep, G4VPhysicalVolume* physVol); @@ -238,9 +248,15 @@ class G4PropagatorInField G4int fAbandonThreshold_NoZeroSteps = 50; // Threshold # to abandon G4double fZeroStepThreshold = 0.0; // Threshold *length* for counting of tiny or 'zero' steps - + + // Parameters related to handling of very large steps which + // occur typically in large volumes with vacuum or very thin gas G4double fLargestAcceptableStep; // Maximum size of a step - for optimization (and to avoid problems) + G4double fMaxStepSizeMultiplier = 3; + // Multiplier for directional exit distance used as extra long-step limit + G4double fMinBigDistance= 100. ; // * CLHEP::mm + // Minimum distance added to directional exit distance // ** End of PARAMETERS ----- G4double kCarTolerance; diff --git a/source/geometry/navigation/include/G4PropagatorInField.icc b/source/geometry/navigation/include/G4PropagatorInField.icc index 2bf4dd2552b..d9bdaa62a13 100644 --- a/source/geometry/navigation/include/G4PropagatorInField.icc +++ b/source/geometry/navigation/include/G4PropagatorInField.icc @@ -204,25 +204,6 @@ void G4PropagatorInField::SetMaximumEpsilonStep( G4double newEpsMax ) fDetectorFieldMgr->SetMaximumEpsilonStep( newEpsMax ); } -// ------------------------------------------------------------------------ -// -inline -void G4PropagatorInField::SetLargestAcceptableStep( G4double newBigDist ) -{ - if( fLargestAcceptableStep>0.0 ) - { - fLargestAcceptableStep = newBigDist; - } -} - -// ------------------------------------------------------------------------ -// -inline -G4double G4PropagatorInField::GetLargestAcceptableStep() -{ - return fLargestAcceptableStep; -} - // ------------------------------------------------------------------------ // inline @@ -238,18 +219,28 @@ void G4PropagatorInField::SetThresholdNoZeroStep( G4int noAct, G4int noHarsh, G4int noAbandon ) { - if( noAct>0 ) + if( noAct>0 ) + { fActionThreshold_NoZeroSteps = noAct; + } if( noHarsh > fActionThreshold_NoZeroSteps ) + { fSevereActionThreshold_NoZeroSteps = noHarsh; + } else + { fSevereActionThreshold_NoZeroSteps = 2*(fActionThreshold_NoZeroSteps+1); +} if( noAbandon > fSevereActionThreshold_NoZeroSteps+5 ) + { fAbandonThreshold_NoZeroSteps = noAbandon; + } else + { fAbandonThreshold_NoZeroSteps = 2*(fSevereActionThreshold_NoZeroSteps+3); + } } // ------------------------------------------------------------------------ @@ -313,7 +304,7 @@ SetNavigatorForPropagating( G4Navigator* SimpleOrMultiNavigator ) if (SimpleOrMultiNavigator != nullptr) { fNavigator = SimpleOrMultiNavigator; - if( fIntersectionLocator ) + if( fIntersectionLocator != nullptr ) { fIntersectionLocator->SetNavigatorFor( SimpleOrMultiNavigator ); } @@ -442,7 +433,7 @@ void G4PropagatorInField::SetIterationsToIncreaseChordDistance(G4int numIters) if(numIters <= 0) { // Disables relaxation - if( fVerboseLevel ){ + if( fVerboseLevel != 0 ){ G4cout << "G4PropagatorInField: Turned OFF the Relaxation of chord " << "finder as iteration threshold = " << numIters << " is not positive." << G4endl; diff --git a/source/geometry/navigation/include/G4RegularNavigation.hh b/source/geometry/navigation/include/G4RegularNavigation.hh index 96075e884ce..c167f8ee17f 100644 --- a/source/geometry/navigation/include/G4RegularNavigation.hh +++ b/source/geometry/navigation/include/G4RegularNavigation.hh @@ -117,7 +117,7 @@ class G4RegularNavigation private: - G4int fverbose = false; + G4int fverbose = 0; G4bool fcheck = false; G4NormalNavigation* fnormalNav = nullptr; diff --git a/source/geometry/navigation/include/G4ReplicaNavigation.hh b/source/geometry/navigation/include/G4ReplicaNavigation.hh index 8be768251cd..19d4118f081 100644 --- a/source/geometry/navigation/include/G4ReplicaNavigation.hh +++ b/source/geometry/navigation/include/G4ReplicaNavigation.hh @@ -68,7 +68,7 @@ struct G4ExitNormal public: - G4ExitNormal(G4ThreeVector norm = G4ThreeVector(0.,0.,0.), + G4ExitNormal(const G4ThreeVector& norm = G4ThreeVector(0.,0.,0.), G4bool calc = false, G4bool valid= false, ESide side = kNull ) @@ -162,7 +162,7 @@ class G4ReplicaNavigation const G4int replicaNo, G4ExitNormal& foundNormal ) const; inline void SetPhiTransformation( const G4double ang, - G4VPhysicalVolume* pVol=0 ) const; + G4VPhysicalVolume* pVol=nullptr ) const; private: // Invariants - unaltered during navigation diff --git a/source/geometry/navigation/include/G4ReplicaNavigation.icc b/source/geometry/navigation/include/G4ReplicaNavigation.icc index a7257baf653..e96487d1841 100644 --- a/source/geometry/navigation/include/G4ReplicaNavigation.icc +++ b/source/geometry/navigation/include/G4ReplicaNavigation.icc @@ -66,7 +66,7 @@ G4ReplicaNavigation::VoxelLocate( const G4SmartVoxelHeader* pHead, break; case kPhi: coord = localPoint.phi(); - if ( (coord<0) && (coord=targetHeaderNoSlices ) + { targetNodeNo = 0; + } } else { if( targetNodeNo<0 ) + { targetNodeNo = 0; + } else if ( targetNodeNo>=targetHeaderNoSlices ) + { targetNodeNo = targetHeaderNoSlices-1; + } } } } diff --git a/source/geometry/navigation/include/G4SimpleLocator.hh b/source/geometry/navigation/include/G4SimpleLocator.hh index 1cb389523bb..bca15616505 100644 --- a/source/geometry/navigation/include/G4SimpleLocator.hh +++ b/source/geometry/navigation/include/G4SimpleLocator.hh @@ -49,17 +49,17 @@ class G4SimpleLocator : public G4VIntersectionLocator G4SimpleLocator(G4Navigator* aNavigator); // Constructor - ~G4SimpleLocator(); + ~G4SimpleLocator() override; // Default destructor G4bool EstimateIntersectionPoint( - const G4FieldTrack& curveStartPointTangent, // A - const G4FieldTrack& curveEndPointTangent, // B - const G4ThreeVector& trialPoint, // E - G4FieldTrack& intersectPointTangent, // Output - G4bool& recalculatedEndPoint, // Out - G4double& fPreviousSafety, // In/Out - G4ThreeVector& fPreviousSftOrigin); // In/Out + const G4FieldTrack& curveStartPointTangent, // A + const G4FieldTrack& curveEndPointTangent, // B + const G4ThreeVector& trialPoint, // E + G4FieldTrack& intersectPointTangent, // Output + G4bool& recalculatedEndPoint, // Out + G4double& fPreviousSafety, // In/Out + G4ThreeVector& fPreviousSftOrigin) override; // In/Out // If such an intersection exists, this function calculates the // intersection point of the true path of the particle with the surface // of the current volume (or of one of its daughters). diff --git a/source/geometry/navigation/include/G4TransportationManager.icc b/source/geometry/navigation/include/G4TransportationManager.icc index 926fe0c44de..c312c588836 100644 --- a/source/geometry/navigation/include/G4TransportationManager.icc +++ b/source/geometry/navigation/include/G4TransportationManager.icc @@ -108,9 +108,8 @@ inline std::vector::iterator G4TransportationManager::GetActiveNavigatorsIterator() { - std::vector::iterator iterator - = std::vector::iterator(fActiveNavigators.begin()); - return iterator; + auto iter = std::vector::iterator(fActiveNavigators.begin()); + return iter; } // ---------------------------------------------------------------------------- @@ -133,9 +132,8 @@ inline std::vector::iterator G4TransportationManager::GetWorldsIterator() { - std::vector::iterator iterator - = std::vector::iterator(fWorlds.begin()); - return iterator; + auto iter = std::vector::iterator(fWorlds.begin()); + return iter; } // ---------------------------------------------------------------------------- diff --git a/source/geometry/navigation/include/G4VIntersectionLocator.icc b/source/geometry/navigation/include/G4VIntersectionLocator.icc index c2def5d2967..57a58c9143e 100644 --- a/source/geometry/navigation/include/G4VIntersectionLocator.icc +++ b/source/geometry/navigation/include/G4VIntersectionLocator.icc @@ -160,7 +160,7 @@ G4VIntersectionLocator::IntersectChord( const G4ThreeVector& StartPointA, IntersectionPoint = StartPointA + LinearStepLength * ChordAB_Dir; } } - if( ptrCalledNavigator ) + if( ptrCalledNavigator != nullptr ) { *ptrCalledNavigator = CalledNavigator; } diff --git a/source/geometry/navigation/include/G4VoxelNavigation.icc b/source/geometry/navigation/include/G4VoxelNavigation.icc index 9c340dc567c..4f5bfbdc52f 100644 --- a/source/geometry/navigation/include/G4VoxelNavigation.icc +++ b/source/geometry/navigation/include/G4VoxelNavigation.icc @@ -118,7 +118,7 @@ G4VoxelNavigation::LevelLocate( G4NavigationHistory& history, targetVoxelNode = VoxelLocate(targetVoxelHeader,localPoint); targetNoDaughters = G4int(targetVoxelNode->GetNoContained()); - if ( targetNoDaughters==0 ) return false; + if ( targetNoDaughters==0 ) { return false; } // // Search daughters in volume @@ -147,10 +147,7 @@ G4VoxelNavigation::LevelLocate( G4NavigationHistory& history, localPoint = samplePoint; return true; } - else - { - history.BackLevel(); - } + history.BackLevel(); } } return false; diff --git a/source/geometry/navigation/src/G4BrentLocator.cc b/source/geometry/navigation/src/G4BrentLocator.cc index fc6436fd449..9df3a645d5f 100644 --- a/source/geometry/navigation/src/G4BrentLocator.cc +++ b/source/geometry/navigation/src/G4BrentLocator.cc @@ -42,17 +42,17 @@ G4BrentLocator::G4BrentLocator(G4Navigator *theNavigator) // Initialise the array of Pointers [max_depth+1] to do this G4ThreeVector zeroV(0.0,0.0,0.0); - for (auto idepth=0; idepthGetVoxelHeader(),limits,pplist); return pplist; //it s up to the calling program to destroy it then! @@ -218,10 +216,10 @@ void G4DrawVoxels::DrawVoxels(const G4LogicalVolume* lv) const { // Drawing the bounding and voxel polyhedra for the pVolume // - for (size_t i=0; isize(); ++i) + for (const auto & i : *pplist) { - pVVisManager->Draw((*pplist)[i].GetPolyhedron(), - (*pplist)[i].GetTransform()*transf3D); + pVVisManager->Draw(i.GetPolyhedron(), + i.GetTransform()*transf3D); } } else diff --git a/source/geometry/navigation/src/G4ErrorPropagationNavigator.cc b/source/geometry/navigation/src/G4ErrorPropagationNavigator.cc index 2baf149e4c3..e21ad8d47a4 100644 --- a/source/geometry/navigation/src/G4ErrorPropagationNavigator.cc +++ b/source/geometry/navigation/src/G4ErrorPropagationNavigator.cc @@ -42,15 +42,12 @@ //------------------------------------------------------------------- G4ErrorPropagationNavigator::G4ErrorPropagationNavigator() - : G4Navigator() { } //------------------------------------------------------------------- -G4ErrorPropagationNavigator::~G4ErrorPropagationNavigator() -{ -} +G4ErrorPropagationNavigator::~G4ErrorPropagationNavigator() = default; //------------------------------------------------------------------- @@ -208,9 +205,8 @@ GetGlobalExitNormal( const G4ThreeVector& point, G4bool* valid ) break; case G4ErrorTarget_PlaneSurface: case G4ErrorTarget_CylindricalSurface: - const G4ErrorSurfaceTarget* surfaceTarget= - static_cast(target); - normal = surfaceTarget->GetTangentPlane(point).normal().unit(); + const auto surfTarget= static_cast(target); + normal = surfTarget->GetTangentPlane(point).normal().unit(); *valid = true; break; diff --git a/source/geometry/navigation/src/G4GeomTestVolume.cc b/source/geometry/navigation/src/G4GeomTestVolume.cc index 0a9d8bf4bbb..0985c15693b 100644 --- a/source/geometry/navigation/src/G4GeomTestVolume.cc +++ b/source/geometry/navigation/src/G4GeomTestVolume.cc @@ -146,9 +146,9 @@ void G4GeomTestVolume::TestOverlapInTree() const { G4VPhysicalVolume* daughter = logical->GetDaughter(i); G4LogicalVolume* daughterLogical = daughter->GetLogicalVolume(); - if (daughterLogical->GetNoDaughters() == 0) continue; + if (daughterLogical->GetNoDaughters() == 0) { continue; } G4bool found = (daughterLogical == previousLogical); - if (!found) found = (checked.find(daughterLogical) != checked.cend()); + if (!found) { found = (checked.find(daughterLogical) != checked.cend()); } if (!found) { checked.emplace(daughterLogical); @@ -158,9 +158,11 @@ void G4GeomTestVolume::TestOverlapInTree() const else { if (verbosity) + { G4cout << "Checking overlaps in tree of volume " << daughter->GetName() << " (" << daughterLogical->GetSolid()->GetEntityType() << ")" << " is omitted, to avoid duplication" << G4endl; + } } } } @@ -175,9 +177,9 @@ void G4GeomTestVolume::TestRecursiveOverlap( G4int slevel, G4int depth ) // If not depth specified (i.e. set to -1), visit the whole tree. // If requested initial level of depth is not zero, visit from beginning // - if (depth == 0) return; - if (depth != -1) depth--; - if (slevel != 0) slevel--; + if (depth == 0) { return; } + if (depth != -1) { depth--; } + if (slevel != 0) { slevel--; } // // As long as we reached the requested @@ -194,7 +196,7 @@ void G4GeomTestVolume::TestRecursiveOverlap( G4int slevel, G4int depth ) std::set tested; const G4LogicalVolume *logical = target->GetLogicalVolume(); - G4int nDaughter = (G4int)logical->GetNoDaughters(); + auto nDaughter = (G4int)logical->GetNoDaughters(); for( auto iDaughter=0; iDaughterGetDaughter(iDaughter); diff --git a/source/geometry/navigation/src/G4GeometryMessenger.cc b/source/geometry/navigation/src/G4GeometryMessenger.cc index 7e00f383f4f..f0def849a8a 100644 --- a/source/geometry/navigation/src/G4GeometryMessenger.cc +++ b/source/geometry/navigation/src/G4GeometryMessenger.cc @@ -317,14 +317,14 @@ G4GeometryMessenger::ResetNavigator() // G4ThreeVector pt(0,0,0); G4Navigator* navigator = tmanager->GetNavigatorForTracking(); - navigator->LocateGlobalPointAndSetup(pt,0,false); + navigator->LocateGlobalPointAndSetup(pt,nullptr,false); } // // Set navigator verbosity // void -G4GeometryMessenger::SetVerbosity(G4String input) +G4GeometryMessenger::SetVerbosity(const G4String& input) { G4int level = verbCmd->GetNewIntValue(input); G4Navigator* navigator = tmanager->GetNavigatorForTracking(); @@ -335,7 +335,7 @@ G4GeometryMessenger::SetVerbosity(G4String input) // Set navigator mode // void -G4GeometryMessenger::SetCheckMode(G4String input) +G4GeometryMessenger::SetCheckMode(const G4String& input) { G4bool mode = chkCmd->GetNewBoolValue(input); G4Navigator* navigator = tmanager->GetNavigatorForTracking(); @@ -348,7 +348,7 @@ G4GeometryMessenger::SetCheckMode(G4String input) // Set navigator verbosity for push notifications // void -G4GeometryMessenger::SetPushFlag(G4String input) +G4GeometryMessenger::SetPushFlag(const G4String& input) { G4bool mode = pchkCmd->GetNewBoolValue(input); G4Navigator* navigator = tmanager->GetNavigatorForTracking(); diff --git a/source/geometry/navigation/src/G4GlobalMagFieldMessenger.cc b/source/geometry/navigation/src/G4GlobalMagFieldMessenger.cc index 4da9df63a7f..5ac5126b525 100644 --- a/source/geometry/navigation/src/G4GlobalMagFieldMessenger.cc +++ b/source/geometry/navigation/src/G4GlobalMagFieldMessenger.cc @@ -43,7 +43,6 @@ //______________________________________________________________________________ G4GlobalMagFieldMessenger::G4GlobalMagFieldMessenger(const G4ThreeVector& value) - : G4UImessenger() { fDirectory = new G4UIdirectory("/globalField/"); fDirectory->SetGuidance("Global uniform magnetic field UI commands"); @@ -91,8 +90,8 @@ void G4GlobalMagFieldMessenger::SetField(const G4ThreeVector& value, // Inactivate field if its value is zero if ( value == G4ThreeVector() ) { - fieldManager->SetDetectorField(0); - fieldManager->CreateChordFinder(0); + fieldManager->SetDetectorField(nullptr); + fieldManager->CreateChordFinder(nullptr); if ( fVerboseLevel > 0 ) { @@ -140,7 +139,7 @@ void G4GlobalMagFieldMessenger::SetFieldValue(const G4ThreeVector& value) G4ThreeVector G4GlobalMagFieldMessenger::GetFieldValue() const { - if ( fMagField ) return fMagField->GetConstantFieldValue(); + if ( fMagField != nullptr ) { return fMagField->GetConstantFieldValue(); } - return G4ThreeVector(); + return {}; } diff --git a/source/geometry/navigation/src/G4LocatorChangeRecord.cc b/source/geometry/navigation/src/G4LocatorChangeRecord.cc index 3cd9994057d..33037f50ab1 100644 --- a/source/geometry/navigation/src/G4LocatorChangeRecord.cc +++ b/source/geometry/navigation/src/G4LocatorChangeRecord.cc @@ -51,7 +51,7 @@ std::ostream& G4LocatorChangeRecord::ReportVector ( std::ostream& os, { using std::setw; G4int prec= 16; - if( vecRec.size() == 0 ) + if( vecRec.empty() ) { os << "Locator Change Record for " << name << " is empty" << G4endl; return os; diff --git a/source/geometry/navigation/src/G4MultiLevelLocator.cc b/source/geometry/navigation/src/G4MultiLevelLocator.cc index bce1107cbbc..33ddf8e2f3e 100644 --- a/source/geometry/navigation/src/G4MultiLevelLocator.cc +++ b/source/geometry/navigation/src/G4MultiLevelLocator.cc @@ -44,9 +44,9 @@ G4MultiLevelLocator::G4MultiLevelLocator(G4Navigator *theNavigator) // Initialise the array of Pointers [max_depth+1] to do this G4ThreeVector zeroV(0.0,0.0,0.0); - for ( auto idepth=0; idepth 1 ) // errorEndPt = 1 is milder, just: len(B)=len(A) @@ -608,7 +615,8 @@ G4bool G4MultiLevelLocator::EstimateIntersectionPoint( SubStart_PointVelocity, CurrentE_Point, ApproxIntersecPointV, substep_no, substep_no_p, depth); - if (fCheckMode) { + if (fCheckMode) + { G4LocatorChangeRecord::ReportEndChanges(errmsg, endChangeA, endChangeB ); } @@ -840,8 +848,11 @@ G4bool G4MultiLevelLocator::EstimateIntersectionPoint( } else { - if( CurrentB_PointVelocity.GetCurveLength() < CurrentA_PointVelocity.GetCurveLength() ) + if( CurrentB_PointVelocity.GetCurveLength() + < CurrentA_PointVelocity.GetCurveLength() ) + { errorEndPt = 2; + } } if (fCheckMode) @@ -1009,9 +1020,9 @@ void G4MultiLevelLocator::ReportFieldValue( const G4FieldTrack& locationPV, G4double startPoint[4] = { position.x(), position.y(), position.z(), locationPV.GetLabTimeOfFlight() }; G4double FieldVec[maxNumFieldComp]; // 24 ; - for (auto i=0; iGetFieldValue( startPoint, FieldVec); G4cout << " B-field value (" << nameLoc << ")= " diff --git a/source/geometry/navigation/src/G4MultiNavigator.cc b/source/geometry/navigation/src/G4MultiNavigator.cc index f9e8d2b2d25..45b520a8f61 100644 --- a/source/geometry/navigation/src/G4MultiNavigator.cc +++ b/source/geometry/navigation/src/G4MultiNavigator.cc @@ -39,12 +39,9 @@ class G4FieldManager; #include "G4PropagatorInField.hh" #include "G4TransportationManager.hh" -// ******************************************************************** -// Constructor -// ******************************************************************** -// -G4MultiNavigator::G4MultiNavigator() - : G4Navigator() +// ----------------------------------------------------------------------- + +G4MultiNavigator::G4MultiNavigator() { G4ThreeVector Big3Vector( kInfinity, kInfinity, kInfinity ); fLastLocatedPosition = Big3Vector; @@ -63,10 +60,10 @@ G4MultiNavigator::G4MultiNavigator() pTransportManager= G4TransportationManager::GetTransportationManager(); G4Navigator* massNav= pTransportManager->GetNavigatorForTracking(); - if( massNav ) + if( massNav != nullptr ) { G4VPhysicalVolume* pWorld= massNav->GetWorldVolume(); - if( pWorld ) + if( pWorld != nullptr ) { SetWorldVolume( pWorld ); fLastMassWorld = pWorld; @@ -74,9 +71,11 @@ G4MultiNavigator::G4MultiNavigator() } } -G4MultiNavigator::~G4MultiNavigator() -{ -} +// ----------------------------------------------------------------------- + +G4MultiNavigator::~G4MultiNavigator() = default; + +// ----------------------------------------------------------------------- G4double G4MultiNavigator::ComputeStep(const G4ThreeVector& pGlobalPoint, const G4ThreeVector& pDirection, @@ -214,7 +213,7 @@ G4MultiNavigator::ObtainFinalStep( G4int navigatorId, // ---------------------------------------------------------------------- -void G4MultiNavigator::PrepareNewTrack( const G4ThreeVector position, +void G4MultiNavigator::PrepareNewTrack( const G4ThreeVector& position, const G4ThreeVector direction ) { #ifdef G4DEBUG_NAVIGATION @@ -281,7 +280,7 @@ void G4MultiNavigator::PrepareNavigators() G4VPhysicalVolume* massWorld = GetWorldVolume(); - if( (massWorld != fLastMassWorld) && (massWorld!=0) ) + if( (massWorld != fLastMassWorld) && (massWorld!=nullptr) ) { // Pass along change to Mass Navigator fpNavigator[0] -> SetWorldVolume( massWorld ); @@ -310,10 +309,9 @@ G4MultiNavigator::LocateGlobalPointAndSetup(const G4ThreeVector& position, G4ThreeVector direction(0.0, 0.0, 0.0); G4bool relative = pRelativeSearch; - std::vector::iterator pNavIter - = pTransportManager->GetActiveNavigatorsIterator(); + auto pNavIter = pTransportManager->GetActiveNavigatorsIterator(); - if( pDirection ) { direction = *pDirection; } + if( pDirection != nullptr ) { direction = *pDirection; } #ifdef G4DEBUG_NAVIGATION if( fVerbose > 2 ) @@ -383,8 +381,7 @@ G4MultiNavigator::LocateGlobalPointWithinVolume(const G4ThreeVector& position) { // Relocate the point in each geometry - std::vector::iterator pNavIter - = pTransportManager->GetActiveNavigatorsIterator(); + auto pNavIter = pTransportManager->GetActiveNavigatorsIterator(); #ifdef G4DEBUG_NAVIGATION if( fVerbose > 2 ) @@ -463,7 +460,7 @@ G4MultiNavigator::CreateTouchableHistoryHandle() const touchHist->UpdateYourself( locatedVolume, touchHist->GetHistory() ); } - return G4TouchableHistoryHandle(touchHist); + return {touchHist}; } // ----------------------------------------------------------------------- @@ -584,7 +581,7 @@ G4MultiNavigator::PrintLimited() if (pNav != nullptr) { G4VPhysicalVolume *pWorld = pNav->GetWorldVolume(); - if( pWorld ) + if( pWorld != nullptr ) { WorldName = pWorld->GetName(); } @@ -662,8 +659,7 @@ G4MultiNavigator::ResetHierarchyAndLocate(const G4ThreeVector& point, "Cannot reset hierarchy before navigators are initialised."); } - std::vector::iterator pNavIter= - pTransportManager->GetActiveNavigatorsIterator(); + auto pNavIter= pTransportManager->GetActiveNavigatorsIterator(); for ( auto num = 0; num < fNoActiveNavigators ; ++pNavIter,++num ) { @@ -700,8 +696,7 @@ G4MultiNavigator::GetGlobalExitNormal(const G4ThreeVector& argPoint, { if( fNoLimitingStep > 1 ) { - std::vector::iterator pNavIter= - pTransportManager->GetActiveNavigatorsIterator(); + auto pNavIter= pTransportManager->GetActiveNavigatorsIterator(); for ( auto num = 0; num < fNoActiveNavigators ; ++pNavIter, ++num ) { diff --git a/source/geometry/navigation/src/G4NavigationLogger.cc b/source/geometry/navigation/src/G4NavigationLogger.cc index 6791b80f7fe..c11e4a0602b 100644 --- a/source/geometry/navigation/src/G4NavigationLogger.cc +++ b/source/geometry/navigation/src/G4NavigationLogger.cc @@ -41,9 +41,7 @@ G4NavigationLogger::G4NavigationLogger(const G4String& id) { } -G4NavigationLogger::~G4NavigationLogger() -{ -} +G4NavigationLogger::~G4NavigationLogger() = default; // ******************************************************************** // PreComputeStepLog @@ -493,12 +491,12 @@ G4NavigationLogger::ComputeSafetyLog(const G4VSolid* solid, { if( banner < 0 ) { - banner = isMotherVolume; + banner = static_cast(isMotherVolume); } if( fVerbose >= 1 ) { G4String volumeType = isMotherVolume ? " Mother " : "Daughter"; - if (banner) + if (banner != 0) { G4cout << "************** " << fId << "::ComputeSafety() ****************" << G4endl; @@ -663,9 +661,9 @@ G4NavigationLogger::ReportOutsideMother(const G4ThreeVector& localPoint, const G4VPhysicalVolume* physical, G4double triggerDist) const { - const G4LogicalVolume* logicalVol = physical + const G4LogicalVolume* logicalVol = physical != nullptr ? physical->GetLogicalVolume() : nullptr; - const G4VSolid* solid = logicalVol + const G4VSolid* solid = logicalVol != nullptr ? logicalVol->GetSolid() : nullptr; G4String fMethod = fId + "::ComputeStep()"; @@ -784,9 +782,9 @@ ReportVolumeAndIntersection( std::ostream& os, const G4VPhysicalVolume* physical ) const { G4String fMethod = fId + "::ComputeStep()"; - const G4LogicalVolume* logicalVol = physical + const G4LogicalVolume* logicalVol = physical != nullptr ? physical->GetLogicalVolume() : nullptr; - const G4VSolid* solid = logicalVol + const G4VSolid* solid = logicalVol != nullptr ? logicalVol->GetSolid() : nullptr; if( solid == nullptr ) { diff --git a/source/geometry/navigation/src/G4Navigator.cc b/source/geometry/navigation/src/G4Navigator.cc index b533d03d230..010a2972531 100644 --- a/source/geometry/navigation/src/G4Navigator.cc +++ b/source/geometry/navigation/src/G4Navigator.cc @@ -137,11 +137,11 @@ G4Navigator::LocateGlobalPointAndSetup( const G4ThreeVector& globalPoint, G4bool notKnownContained = true, noResult; G4VPhysicalVolume *targetPhysical; G4LogicalVolume *targetLogical; - G4VSolid *targetSolid = 0; + G4VSolid *targetSolid = nullptr; G4ThreeVector localPoint, globalDirection; EInside insideCode; - G4bool considerDirection = pGlobalDirection && ((!ignoreDirection) || fLocatedOnEdge); + G4bool considerDirection = (pGlobalDirection != nullptr) && ((!ignoreDirection) || fLocatedOnEdge); fLastTriedStepComputation = false; fChangedGrandMotherRefFrame = false; // For local exit normal @@ -185,7 +185,7 @@ G4Navigator::LocateGlobalPointAndSetup( const G4ThreeVector& globalPoint, { ++noLevelsExited; // count this first level entered too - if ( fHistory.GetDepth() ) + if ( fHistory.GetDepth() != 0 ) { fBlockedPhysicalVolume = fHistory.GetTopVolume(); fBlockedReplicaNo = fHistory.GetTopReplicaNo(); @@ -195,7 +195,7 @@ G4Navigator::LocateGlobalPointAndSetup( const G4ThreeVector& globalPoint, { fLastLocatedPointLocal = localPoint; fLocatedOutsideWorld = true; - fBlockedPhysicalVolume = 0; // to be sure + fBlockedPhysicalVolume = nullptr; // to be sure fBlockedReplicaNo = -1; fEntering = false; // No longer fEnteredDaughter = false; @@ -306,9 +306,13 @@ G4Navigator::LocateGlobalPointAndSetup( const G4ThreeVector& globalPoint, { G4String solidResponse = "-kInside-"; if (insideCode == kOutside) + { solidResponse = "-kOutside-"; + } else if (insideCode == kSurface) + { solidResponse = "-kSurface-"; + } G4cout << "*** G4Navigator::LocateGlobalPointAndSetup(): ***" << G4endl << " Invoked Inside() for solid: " << targetSolid->GetName() << ". Solid replied: " << solidResponse << G4endl @@ -338,8 +342,7 @@ G4Navigator::LocateGlobalPointAndSetup( const G4ThreeVector& globalPoint, } // Point is inside current volume, break out of the loop - if ( insideCode == kInside ) - break; + if ( insideCode == kInside ) { break; } // Point is outside current volume, move up a level in the hierarchy if ( insideCode == kOutside ) @@ -396,8 +399,7 @@ G4Navigator::LocateGlobalPointAndSetup( const G4ThreeVector& globalPoint, } // Point is on a surface, but no longer exiting, break out of the loop - if ( !isExiting ) - break; + if ( !isExiting ) { break; } ++noLevelsExited; @@ -421,7 +423,7 @@ G4Navigator::LocateGlobalPointAndSetup( const G4ThreeVector& globalPoint, // const G4RotationMatrix* mRot = fBlockedPhysicalVolume->GetRotation(); - if( mRot ) + if( mRot != nullptr ) { fGrandMotherExitNormal *= (*mRot).inverse(); fChangedGrandMotherRefFrame = true; @@ -446,12 +448,12 @@ G4Navigator::LocateGlobalPointAndSetup( const G4ThreeVector& globalPoint, // Determine `type' of current mother volume // targetPhysical = fHistory.GetTopVolume(); - if (!targetPhysical) { break; } + if (targetPhysical == nullptr) { break; } targetLogical = targetPhysical->GetLogicalVolume(); switch( CharacteriseDaughters(targetLogical) ) { case kNormal: - if ( targetLogical->GetVoxelHeader() ) // use optimised navigation + if ( targetLogical->GetVoxelHeader() != nullptr ) // use optimised navigation { noResult = GetVoxelNavigator().LevelLocate(fHistory, fBlockedPhysicalVolume, @@ -536,7 +538,7 @@ G4Navigator::LocateGlobalPointAndSetup( const G4ThreeVector& globalPoint, { G4VPhysicalVolume* enteredPhysical = fHistory.GetTopVolume(); const G4RotationMatrix* mRot = enteredPhysical->GetRotation(); - if( mRot ) + if( mRot != nullptr ) { // Go deeper, i.e. move 'down' in the hierarchy // Apply direct rotation, not inverse @@ -565,7 +567,7 @@ G4Navigator::LocateGlobalPointAndSetup( const G4ThreeVector& globalPoint, { G4long oldcoutPrec = G4cout.precision(8); G4String curPhysVol_Name("None"); - if (targetPhysical) { curPhysVol_Name = targetPhysical->GetName(); } + if (targetPhysical != nullptr) { curPhysVol_Name = targetPhysical->GetName(); } G4cout << " Return value = new volume = " << curPhysVol_Name << G4endl; G4cout << " ----- Upon exiting:" << G4endl; PrintState(); @@ -622,7 +624,7 @@ G4Navigator::LocateGlobalPointWithinVolume(const G4ThreeVector& pGlobalpoint) switch( CharacteriseDaughters(motherLogical) ) { case kNormal: - if ( pVoxelHeader ) + if ( pVoxelHeader != nullptr ) { GetVoxelNavigator().VoxelLocate( pVoxelHeader, fLastLocatedPointLocal ); } @@ -679,7 +681,7 @@ void G4Navigator::SetSavedState() fSaveState.spBlockedPhysicalVolume = fBlockedPhysicalVolume; fSaveState.sBlockedReplicaNo = fBlockedReplicaNo; - fSaveState.sLastStepWasZero = fLastStepWasZero; + fSaveState.sLastStepWasZero = static_cast(fLastStepWasZero); fSaveState.sLocatedOutsideWorld = fLocatedOutsideWorld; fSaveState.sLastLocatedPointLocal = fLastLocatedPointLocal; @@ -709,7 +711,7 @@ void G4Navigator::RestoreSavedState() fBlockedPhysicalVolume = fSaveState.spBlockedPhysicalVolume; fBlockedReplicaNo = fSaveState.sBlockedReplicaNo; - fLastStepWasZero = fSaveState.sLastStepWasZero; + fLastStepWasZero = (fSaveState.sLastStepWasZero != 0); fLocatedOutsideWorld = fSaveState.sLocatedOutsideWorld; fLastLocatedPointLocal = fSaveState.sLastLocatedPointLocal; @@ -825,7 +827,7 @@ G4double G4Navigator::ComputeStep( const G4ThreeVector& pGlobalpoint, switch( CharacteriseDaughters(motherLogical) ) { case kNormal: - if ( motherLogical->GetVoxelHeader() ) + if ( motherLogical->GetVoxelHeader() != nullptr ) { Step = GetVoxelNavigator().ComputeStep(fLastLocatedPointLocal, localDirection, @@ -1038,7 +1040,7 @@ G4double G4Navigator::ComputeStep( const G4ThreeVector& pGlobalpoint, << " (local position: " << newLocalPoint << ")" << G4endl << " (local direction: " << localDirection << ")." << G4endl << " Previous phys volume: '" - << ( fLastMotherPhys ? fLastMotherPhys->GetName() : "" ) + << ( fLastMotherPhys != nullptr ? fLastMotherPhys->GetName() : "" ) << "'" << G4endl << G4endl; if( actAndReport || abandon ) { @@ -1129,7 +1131,7 @@ G4double G4Navigator::ComputeStep( const G4ThreeVector& pGlobalpoint, // Transform it to the 'grand-mother' coordinate system // const G4RotationMatrix* mRot = motherPhysical->GetRotation(); - if( mRot ) + if( mRot != nullptr ) { fChangedGrandMotherRefFrame = true; fGrandMotherExitNormal = (*mRot).inverse() * exitNormalMotherFrame; @@ -1167,13 +1169,15 @@ G4double G4Navigator::ComputeStep( const G4ThreeVector& pGlobalpoint, } if ( fHistory.GetTopVolumeType() != kReplica ) + { fCalculatedExitNormal = true; + } // Now transform it to the global reference frame !! // if( fValidExitNormal || fCalculatedExitNormal ) { - G4int depth = (G4int)fHistory.GetDepth(); + auto depth = (G4int)fHistory.GetDepth(); if( depth > 0 ) { fExitNormalGlobalFrame = fHistory.GetTransform(depth-1) @@ -1304,7 +1308,7 @@ void G4Navigator::ResetState() // void G4Navigator::SetupHierarchy() { - const G4int depth = (G4int)fHistory.GetDepth(); + const auto depth = (G4int)fHistory.GetDepth(); for ( auto i = 1; i <= depth; ++i ) { switch ( fHistory.GetVolumeType(i) ) @@ -1369,10 +1373,10 @@ G4ThreeVector G4Navigator::GetLocalExitNormal( G4bool* valid ) // G4ThreeVector nextSolidExitNormal(0.,0.,0.); - if( fEntering && (fBlockedPhysicalVolume!=0) ) + if( fEntering && (fBlockedPhysicalVolume!=nullptr) ) { candidateLogical = fBlockedPhysicalVolume->GetLogicalVolume(); - if( candidateLogical ) + if( candidateLogical != nullptr ) { // fLastStepEndPointLocal is in the coordinates of the mother // we need it in the daughter's coordinate system. @@ -1650,7 +1654,7 @@ G4Navigator::GetGlobalExitNormal(const G4ThreeVector& IntersectPointGlobal, << " Volume: " << fHistory.GetTopVolume()->GetName() << G4endl; #ifdef G4VERBOSE G4LogicalVolume* candLog = fHistory.GetTopVolume()->GetLogicalVolume(); - if ( candLog ) + if ( candLog != nullptr ) { message << " Solid: " << candLog->GetSolid()->GetName() << ", Type: " << candLog->GetSolid()->GetEntityType() << G4endl @@ -1722,7 +1726,7 @@ G4Navigator::GetGlobalExitNormal(const G4ThreeVector& IntersectPointGlobal, << " Volume: " << fHistory.GetTopVolume()->GetName() << G4endl; #ifdef G4VERBOSE G4LogicalVolume* candLog = fHistory.GetTopVolume()->GetLogicalVolume(); - if ( candLog ) + if ( candLog != nullptr ) { edN << " Solid: " << candLog->GetSolid()->GetName() << ", Type: " << candLog->GetSolid()->GetEntityType() << G4endl @@ -1859,7 +1863,7 @@ G4double G4Navigator::ComputeSafety( const G4ThreeVector& pGlobalpoint, switch(CharacteriseDaughters(motherLogical)) { case kNormal: - if ( pVoxelHeader ) + if ( pVoxelHeader != nullptr ) { newSafety = fpVoxelSafety->ComputeSafety(localPoint, *motherPhysical, pMaxLength); @@ -1927,7 +1931,7 @@ G4double G4Navigator::ComputeSafety( const G4ThreeVector& pGlobalpoint, // G4TouchableHistoryHandle G4Navigator::CreateTouchableHistoryHandle() const { - return G4TouchableHistoryHandle( CreateTouchableHistory() ); + return { CreateTouchableHistory() }; } // ******************************************************************** @@ -1945,7 +1949,7 @@ void G4Navigator::PrintState() const << " Exiting = " << fExiting // << G4endl << " Entering = " << fEntering // << G4endl << " BlockedPhysicalVolume= " ; - if (fBlockedPhysicalVolume==0) + if (fBlockedPhysicalVolume==nullptr) { G4cout << "None"; } @@ -2116,7 +2120,7 @@ G4bool G4Navigator::CheckOverlapsIterative(G4VPhysicalVolume* vol) << " with length = " << trialLength << G4endl; } foundOverlap = vol->CheckOverlaps(nPoints, trialLength, - fVerbose, numOverlaps); + fVerbose != 0, numOverlaps); trialLength *= 0.1; if ( trialLength <= 1.0e-5 ) { numOverlaps= 1;} } @@ -2144,10 +2148,14 @@ std::ostream& operator << (std::ostream &os,const G4Navigator &n) << " Exiting = " << n.fExiting << G4endl << " Entering = " << n.fEntering << G4endl << " BlockedPhysicalVolume= " ; - if (n.fBlockedPhysicalVolume==0) + if (n.fBlockedPhysicalVolume==nullptr) + { os << "None"; + } else + { os << n.fBlockedPhysicalVolume->GetName(); + } os << G4endl << " BlockedReplicaNo = " << n.fBlockedReplicaNo << G4endl << " LastStepWasZero = " << n.fLastStepWasZero << G4endl @@ -2170,7 +2178,7 @@ std::ostream& operator << (std::ostream &os,const G4Navigator &n) << std::setw( 5) << n.fValidExitNormal << " " << std::setw( 9) << n.fExiting << " " << std::setw( 9) << n.fEntering << " "; - if ( n.fBlockedPhysicalVolume==0 ) + if ( n.fBlockedPhysicalVolume==nullptr ) { os << std::setw(15) << "None"; } else { os << std::setw(15)<< n.fBlockedPhysicalVolume->GetName(); } diff --git a/source/geometry/navigation/src/G4NormalNavigation.cc b/source/geometry/navigation/src/G4NormalNavigation.cc index f4585f16626..03eca6b195e 100644 --- a/source/geometry/navigation/src/G4NormalNavigation.cc +++ b/source/geometry/navigation/src/G4NormalNavigation.cc @@ -302,15 +302,17 @@ G4NormalNavigation::ComputeStep(const G4ThreeVector& localPoint, if ( motherValidExitNormal ) { const G4RotationMatrix *rot = motherPhysical->GetRotation(); - if (rot) + if (rot != nullptr) { exitNormal *= rot->inverse(); #ifdef G4VERBOSE if( fCheck ) + { fLogger->CheckAndReportBadNormal(exitNormal, // rotated motherExitNormal, // original *rot, "From RotationMatrix" ); + } #endif } } @@ -351,7 +353,7 @@ G4double G4NormalNavigation::ComputeSafety(const G4ThreeVector& localPoint, #ifdef G4VERBOSE if( fCheck ) { - fLogger->ComputeSafetyLog(motherSolid,localPoint,motherSafety,true,true); + fLogger->ComputeSafetyLog(motherSolid,localPoint,motherSafety,true,1); } #endif @@ -378,7 +380,7 @@ G4double G4NormalNavigation::ComputeSafety(const G4ThreeVector& localPoint, if(fCheck) { fLogger->ComputeSafetyLog(sampleSolid, samplePoint, - sampleSafety, false, false); + sampleSafety, false, 0); // Not mother, no banner } #endif diff --git a/source/geometry/navigation/src/G4ParameterisedNavigation.cc b/source/geometry/navigation/src/G4ParameterisedNavigation.cc index bd4c8a77962..cb8a6e0dc1f 100644 --- a/source/geometry/navigation/src/G4ParameterisedNavigation.cc +++ b/source/geometry/navigation/src/G4ParameterisedNavigation.cc @@ -53,17 +53,13 @@ // Constructor // ******************************************************************** // -G4ParameterisedNavigation::G4ParameterisedNavigation() -{ -} +G4ParameterisedNavigation::G4ParameterisedNavigation() = default; // *************************************************************************** // Destructor // *************************************************************************** // -G4ParameterisedNavigation::~G4ParameterisedNavigation() -{ -} +G4ParameterisedNavigation::~G4ParameterisedNavigation() = default; // *************************************************************************** // ComputeStep @@ -279,20 +275,30 @@ G4double G4ParameterisedNavigation:: << " Solid gave DistanceToIn = " << sampleStep << " yet returns " ; if( insideIntPt == kInside ) + { message << "-kInside-"; + } else if( insideIntPt == kOutside ) + { message << "-kOutside-"; + } else + { message << "-kSurface-"; + } message << " for this point !" << G4endl << " Point = " << intersectionPoint << G4endl; if ( insideIntPt != kInside ) + { message << " DistanceToIn(p) = " << sampleSolid->DistanceToIn(intersectionPoint); - if ( insideIntPt != kOutside ) + } + if ( insideIntPt != kOutside ) + { message << " DistanceToOut(p) = " << sampleSolid->DistanceToOut(intersectionPoint); + } G4Exception("G4ParameterisedNavigation::ComputeStep()", "GeomNav1002", JustWarning, message); G4cout.precision(oldcoutPrec); @@ -365,7 +371,7 @@ G4double G4ParameterisedNavigation:: if ( validExitNormal ) { const G4RotationMatrix* rot = motherPhysical->GetRotation(); - if (rot) + if (rot != nullptr) { exitNormal *= rot->inverse(); } diff --git a/source/geometry/navigation/src/G4PartialPhantomParameterisation.cc b/source/geometry/navigation/src/G4PartialPhantomParameterisation.cc index b3ba24819bc..3e7923087f2 100644 --- a/source/geometry/navigation/src/G4PartialPhantomParameterisation.cc +++ b/source/geometry/navigation/src/G4PartialPhantomParameterisation.cc @@ -42,15 +42,12 @@ //------------------------------------------------------------------ G4PartialPhantomParameterisation::G4PartialPhantomParameterisation() - : G4PhantomParameterisation() { } //------------------------------------------------------------------ -G4PartialPhantomParameterisation::~G4PartialPhantomParameterisation() -{ -} +G4PartialPhantomParameterisation::~G4PartialPhantomParameterisation() = default; //------------------------------------------------------------------ void G4PartialPhantomParameterisation:: @@ -172,13 +169,13 @@ GetReplicaNo( const G4ThreeVector& localPoint, const G4ThreeVector& localDir ) // if the direction is negative substract 1 G4double fx = (localPoint.x()+fContainerWallX+kCarTolerance)/(fVoxelHalfX*2.); - G4int nx = G4int(fx); + auto nx = G4int(fx); G4double fy = (localPoint.y()+fContainerWallY+kCarTolerance)/(fVoxelHalfY*2.); - G4int ny = G4int(fy); + auto ny = G4int(fy); G4double fz = (localPoint.z()+fContainerWallZ+kCarTolerance)/(fVoxelHalfZ*2.); - G4int nz = G4int(fz); + auto nz = G4int(fz); // If it is on the surface side, check the direction: if direction is // negative place it on the previous voxel (if direction is positive it is @@ -289,7 +286,7 @@ GetReplicaNo( const G4ThreeVector& localPoint, const G4ThreeVector& localDir ) "GeomNav1002", JustWarning, message); } - G4int nyz = G4int(nz*fNoVoxelsY+ny); + auto nyz = G4int(nz*fNoVoxelsY+ny); auto ite = fFilledIDs.cbegin(); /* for( ite = fFilledIDs.cbegin(); ite != fFilledIDs.cend(); ++ite ) diff --git a/source/geometry/navigation/src/G4PathFinder.cc b/source/geometry/navigation/src/G4PathFinder.cc index cf0a0f4d224..2e3ef187093 100644 --- a/source/geometry/navigation/src/G4PathFinder.cc +++ b/source/geometry/navigation/src/G4PathFinder.cc @@ -93,7 +93,7 @@ G4PathFinder::G4PathFinder() fLimitTruth[num] = false; fLimitedStep[num] = kUndefLimited; fCurrentStepSize[num] = -1.0; - fLocatedVolume[num] = 0; + fLocatedVolume[num] = nullptr; fPreSafetyValues[num]= -1.0; fCurrentPreStepSafety[num] = -1.0; fNewSafetyComputed[num]= -1.0; @@ -106,7 +106,7 @@ G4PathFinder::G4PathFinder() G4PathFinder::~G4PathFinder() { delete fpMultiNavigator; - fpPathFinder = 0; + fpPathFinder = nullptr; } // ---------------------------------------------------------------------------- @@ -544,8 +544,7 @@ void G4PathFinder::ReLocate( const G4ThreeVector& position ) { // Locate the point in each geometry - std::vector::iterator pNavIter = - fpTransportManager->GetActiveNavigatorsIterator(); + auto pNavIter = fpTransportManager->GetActiveNavigatorsIterator(); #ifdef G4DEBUG_PATHFINDER @@ -798,7 +797,7 @@ G4PathFinder::CreateTouchableHandle( G4int navId ) const } #endif - return G4TouchableHandle(touchHist); + return {touchHist}; } G4double @@ -1127,7 +1126,7 @@ void G4PathFinder::PrintLimited() if (pNav != nullptr) { G4VPhysicalVolume *pWorld = pNav->GetWorldVolume(); - if( pWorld ) + if( pWorld != nullptr ) { WorldName = pWorld->GetName(); } diff --git a/source/geometry/navigation/src/G4PhantomParameterisation.cc b/source/geometry/navigation/src/G4PhantomParameterisation.cc index bc0eed34f37..54540d15143 100644 --- a/source/geometry/navigation/src/G4PhantomParameterisation.cc +++ b/source/geometry/navigation/src/G4PhantomParameterisation.cc @@ -46,9 +46,7 @@ G4PhantomParameterisation::G4PhantomParameterisation() //------------------------------------------------------------------ -G4PhantomParameterisation::~G4PhantomParameterisation() -{ -} +G4PhantomParameterisation::~G4PhantomParameterisation() = default; //------------------------------------------------------------------ @@ -63,6 +61,7 @@ BuildContainerSolid( G4VPhysicalVolume* pMotherPhysical ) // CheckVoxelsFillContainer(); } + //------------------------------------------------------------------ void G4PhantomParameterisation:: BuildContainerSolid( G4VSolid* pMotherSolid ) @@ -260,13 +259,13 @@ GetReplicaNo( const G4ThreeVector& localPoint, const G4ThreeVector& localDir ) // if the direction is negative substract 1 G4double fx = (localPoint.x()+fContainerWallX+kCarTolerance)/(fVoxelHalfX*2.); - G4int nx = G4int(fx); + auto nx = G4int(fx); G4double fy = (localPoint.y()+fContainerWallY+kCarTolerance)/(fVoxelHalfY*2.); - G4int ny = G4int(fy); + auto ny = G4int(fy); G4double fz = (localPoint.z()+fContainerWallZ+kCarTolerance)/(fVoxelHalfZ*2.); - G4int nz = G4int(fz); + auto nz = G4int(fz); // If it is on the surface side, check the direction: if direction is // negative place it in the previous voxel (if direction is positive it is @@ -327,7 +326,7 @@ GetReplicaNo( const G4ThreeVector& localPoint, const G4ThreeVector& localDir ) } } - G4int copyNo = G4int(nx + fNoVoxelsX*ny + fNoVoxelsXY*nz); + auto copyNo = G4int(nx + fNoVoxelsX*ny + fNoVoxelsXY*nz); // Check if there are still errors // diff --git a/source/geometry/navigation/src/G4PropagatorInField.cc b/source/geometry/navigation/src/G4PropagatorInField.cc index 19aa1b5dfb8..66a006b49de 100644 --- a/source/geometry/navigation/src/G4PropagatorInField.cc +++ b/source/geometry/navigation/src/G4PropagatorInField.cc @@ -49,6 +49,7 @@ #include "G4ChordFinder.hh" #include "G4MultiLevelLocator.hh" + // --------------------------------------------------------------------------- // Constructors and destructor // @@ -63,12 +64,15 @@ G4PropagatorInField::G4PropagatorInField( G4Navigator* theNavigator, { fEpsilonStep = (fDetectorFieldMgr != nullptr) ? fDetectorFieldMgr->GetMaximumEpsilonStep() : 1.0e-5; - fLargestAcceptableStep = 1000.0 * meter; + fPreviousSftOrigin = G4ThreeVector(0.,0.,0.); kCarTolerance = G4GeometryTolerance::GetInstance()->GetSurfaceTolerance(); fZeroStepThreshold = std::max( 1.0e5 * kCarTolerance, 1.0e-1 * micrometer ); + fLargestAcceptableStep = 100.0 * meter; // Reduced from 1000.0 * meter + fMaxStepSizeMultiplier= 0.1 ; // 0.1 in git (larger for tests.) // Reduced from 100; + fMinBigDistance= 100. * CLHEP::mm; #ifdef G4DEBUG_FIELD G4cout << " PiF: Zero Step Threshold set to " << fZeroStepThreshold / millimeter @@ -122,7 +126,7 @@ G4double G4PropagatorInField::ComputeStep( G4VPhysicalVolume* pPhysVol, G4bool canRelaxDeltaChord) { - GetChordFinder()->OnComputeStep(); + GetChordFinder()->OnComputeStep(&pFieldTrack); const G4double deltaChord = GetChordFinder()->GetDeltaChord(); // If CurrentProposedStepLength is too small for finding Chords @@ -136,7 +140,7 @@ G4double G4PropagatorInField::ComputeStep( // Introducing smooth trajectory display (jacek 01/11/2002) // - if (fpTrajectoryFilter) + if (fpTrajectoryFilter != nullptr) { fpTrajectoryFilter->CreateNewTrajectorySegment(); } @@ -151,10 +155,14 @@ G4double G4PropagatorInField::ComputeStep( G4cout << " Starting FT: " << pFieldTrack; G4cout << " Requested length = " << CurrentProposedStepLength << G4endl; G4cout << " PhysVol = "; - if( pPhysVol ) + if( pPhysVol != nullptr ) + { G4cout << pPhysVol->GetName() << G4endl; + } else + { G4cout << " N/A "; + } G4cout << G4endl; } @@ -192,7 +200,7 @@ G4double G4PropagatorInField::ComputeStep( StartPointA = pFieldTrack.GetPosition(); VelocityUnit = pFieldTrack.GetMomentumDir(); - G4double trialProposedStep = 1.e2 * ( 10.0 * cm + + G4double trialProposedStep = fMaxStepSizeMultiplier * ( fMinBigDistance + fNavigator->GetWorldVolume()->GetLogicalVolume()-> GetSolid()->DistanceToOut(StartPointA, VelocityUnit) ); CurrentProposedStepLength = std::min( trialProposedStep, @@ -236,14 +244,15 @@ G4double G4PropagatorInField::ComputeStep( // is either geometrically sharp or between very different materials. // Careful decreases to cope with tolerance are required // - if( stepTrial > 100.0*fZeroStepThreshold ) + if( stepTrial > 100.0*fZeroStepThreshold ) { decreaseFactor = 0.35; // Try decreasing slower - else if( stepTrial > 30.0*fZeroStepThreshold ) + } else if( stepTrial > 30.0*fZeroStepThreshold ) { decreaseFactor= 0.5; // Try yet slower decrease - else if( stepTrial > 10.0*fZeroStepThreshold ) + } else if( stepTrial > 10.0*fZeroStepThreshold ) { decreaseFactor= 0.75; // Try even slower decreases - else + } else { decreaseFactor= 0.9; // Try very slow decreases + } } stepTrial *= decreaseFactor; @@ -395,7 +404,7 @@ G4double G4PropagatorInField::ComputeStep( { StepTaken += s_length_taken; - if (fpTrajectoryFilter) // For smooth trajectory display (jacek 1/11/2002) + if (fpTrajectoryFilter != nullptr) // For smooth trajectory display (jacek 1/11/2002) { fpTrajectoryFilter->TakeIntermediatePoint(CurrentState.GetPosition()); } @@ -589,7 +598,7 @@ G4PropagatorInField::printStatus( const G4FieldTrack& StartFT, { G4cout << std::setw( 9) << requestStep << " "; } else { G4cout << std::setw( 9) << "Init/NotKnown" << " "; } - if( startVolume != 0) + if( startVolume != nullptr) { G4cout << std::setw(12) << startVolume->GetName() << " "; } G4cout.precision(oldprec); G4cout << G4endl; @@ -655,10 +664,7 @@ G4PropagatorInField::GimmeTrajectoryVectorAndForgetIt() const { return fpTrajectoryFilter->GimmeThePointsAndForgetThem(); } - else - { - return nullptr; - } + return nullptr; } // --------------------------------------------------------------------------- @@ -761,7 +767,7 @@ void G4PropagatorInField::ReportLoopingParticle( G4int count, G4double StepTaken, G4double StepRequested, const char* methodName, - G4ThreeVector momentumVec, + const G4ThreeVector& momentumVec, G4VPhysicalVolume* pPhysVol ) { std::ostringstream message; @@ -785,18 +791,20 @@ void G4PropagatorInField::ReportLoopingParticle( G4int count, } message << std::setprecision(prec) << 100. * StepTaken / StepRequested << " % " << G4endl ; - if( pPhysVol ) + if( pPhysVol != nullptr ) { - message << " in volume " << pPhysVol->GetName() ; - auto material = pPhysVol->GetLogicalVolume()->GetMaterial(); - if( material != nullptr ) - message << " with material " << material->GetName() - << " ( density = " - << material->GetDensity() / ( g/(cm*cm*cm) ) << " g / cm^3 ) "; + message << " in volume " << pPhysVol->GetName() ; + auto material = pPhysVol->GetLogicalVolume()->GetMaterial(); + if( material != nullptr ) + { + message << " with material " << material->GetName() + << " ( density = " + << material->GetDensity() / ( g/(cm*cm*cm) ) << " g / cm^3 ) "; + } } else { - message << " in unknown (null) volume. " ; + message << " in unknown (null) volume. " ; } G4Exception(methodName, "GeomNav1002", JustWarning, message); } @@ -815,9 +823,63 @@ void G4PropagatorInField::ReportStuckParticle( G4int noZeroSteps, << " Proposed Step is " << proposedStep << " but Step Taken is "<< lastTriedStep << G4endl; if( physVol != nullptr ) + { message << " in volume " << physVol->GetName() ; + } else + { message << " in unknown or null volume. " ; + } G4Exception("G4PropagatorInField::ComputeStep()", "GeomNav1002", JustWarning, message); } + +// ------------------------------------------------------------------------ + +// ---------------------------------------------- +// Methods to alter Parameters +// ---------------------------------------------- + +// Was a data member (of an object) -- now moved to class member +G4double G4PropagatorInField::GetLargestAcceptableStep() +{ + return fLargestAcceptableStep; +} + +// ------------------------------------------------------------------------ +// +void G4PropagatorInField::SetLargestAcceptableStep( G4double newBigDist ) +{ + if( fLargestAcceptableStep>0.0 ) + { + fLargestAcceptableStep = newBigDist; + } +} + +// --------------------------------------------------------------------------- + +G4double G4PropagatorInField::GetMaxStepSizeMultiplier() +{ + return fMaxStepSizeMultiplier; +} + +// --------------------------------------------------------------------------- + +void G4PropagatorInField::SetMaxStepSizeMultiplier(G4double vm) +{ + fMaxStepSizeMultiplier=vm; +} + +// --------------------------------------------------------------------------- + +G4double G4PropagatorInField::GetMinBigDistance() +{ + return fMinBigDistance; +} + +// --------------------------------------------------------------------------- + +void G4PropagatorInField::SetMinBigDistance(G4double val) +{ + fMinBigDistance= val; +} diff --git a/source/geometry/navigation/src/G4RegularNavigation.cc b/source/geometry/navigation/src/G4RegularNavigation.cc index 0aa1961e58a..c4f420d061b 100644 --- a/source/geometry/navigation/src/G4RegularNavigation.cc +++ b/source/geometry/navigation/src/G4RegularNavigation.cc @@ -47,9 +47,7 @@ G4RegularNavigation::G4RegularNavigation() //------------------------------------------------------------------ -G4RegularNavigation::~G4RegularNavigation() -{ -} +G4RegularNavigation::~G4RegularNavigation() = default; //------------------------------------------------------------------ @@ -91,8 +89,8 @@ G4double G4RegularNavigation:: motherLogical = motherPhysical->GetLogicalVolume(); daughterPhysical = motherLogical->GetDaughter(0); - G4PhantomParameterisation * daughterParam = - (G4PhantomParameterisation*)(daughterPhysical->GetParameterisation()); + auto daughterParam = + (G4PhantomParameterisation*)(daughterPhysical->GetParameterisation()); G4int copyNo = daughterParam ->GetReplicaNo(localPoint,localDirection); G4ThreeVector voxelTranslation = daughterParam->GetTranslation( copyNo ); @@ -132,7 +130,7 @@ G4double G4RegularNavigation::ComputeStepSkippingEqualMaterials( { G4RegularNavigationHelper::Instance()->ClearStepLengths(); - G4PhantomParameterisation *param = + auto param = (G4PhantomParameterisation*)(pCurrentPhysical->GetParameterisation()); if( !param->SkipEqualMaterials() ) @@ -156,7 +154,7 @@ G4double G4RegularNavigation::ComputeStepSkippingEqualMaterials( // To get replica No: transform local point to the reference system of the // param container volume // - G4int ide = (G4int)history.GetDepth(); + auto ide = (G4int)history.GetDepth(); G4ThreeVector containerPoint = history.GetTransform(ide) .InverseTransformPoint(localPoint); @@ -309,11 +307,7 @@ G4double G4RegularNavigation::ComputeStepSkippingEqualMaterials( AddStepLength(copyNo, newStep-totalNewStep+currentProposedStepLength); return currentProposedStepLength; } - else - { - G4RegularNavigationHelper::Instance()->AddStepLength( copyNo, newStep ); - } - + G4RegularNavigationHelper::Instance()->AddStepLength( copyNo, newStep ); // Move container point until wall of voxel // @@ -395,7 +389,7 @@ G4RegularNavigation::LevelLocate( G4NavigationHistory& history, // Get local direction // - if( globalDirection ) + if( globalDirection != nullptr ) { localDir = history.GetTopTransform().TransformAxis(*globalDirection); } diff --git a/source/geometry/navigation/src/G4RegularNavigationHelper.cc b/source/geometry/navigation/src/G4RegularNavigationHelper.cc index 77cb627fdc9..0c26b4c2cf3 100644 --- a/source/geometry/navigation/src/G4RegularNavigationHelper.cc +++ b/source/geometry/navigation/src/G4RegularNavigationHelper.cc @@ -38,15 +38,11 @@ G4RegularNavigationHelper* G4RegularNavigationHelper::Instance() // -------------------------------------------------------------------- // -G4RegularNavigationHelper::G4RegularNavigationHelper() -{ -} +G4RegularNavigationHelper::G4RegularNavigationHelper() = default; // -------------------------------------------------------------------- // -G4RegularNavigationHelper::~G4RegularNavigationHelper() -{ -} +G4RegularNavigationHelper::~G4RegularNavigationHelper() = default; // -------------------------------------------------------------------- // diff --git a/source/geometry/navigation/src/G4ReplicaNavigation.cc b/source/geometry/navigation/src/G4ReplicaNavigation.cc index ba20125ed8c..877edf978ae 100644 --- a/source/geometry/navigation/src/G4ReplicaNavigation.cc +++ b/source/geometry/navigation/src/G4ReplicaNavigation.cc @@ -65,9 +65,7 @@ G4ReplicaNavigation::G4ReplicaNavigation() // Destructor // ******************************************************************** // -G4ReplicaNavigation::~G4ReplicaNavigation() -{ -} +G4ReplicaNavigation::~G4ReplicaNavigation() = default; // ******************************************************************** // Inside @@ -107,7 +105,7 @@ G4ReplicaNavigation::Inside(const G4VPhysicalVolume* pVol, } break; case kPhi: - if ( localPoint.y()||localPoint.x() ) + if ( (localPoint.y() != 0.0)||(localPoint.x() != 0.0) ) { coord = std::fabs(std::atan2(localPoint.y(),localPoint.x()))-width*0.5; if ( coord<=-halfkAngTolerance ) @@ -142,7 +140,7 @@ G4ReplicaNavigation::Inside(const G4VPhysicalVolume* pVol, { // Known to be inside outer radius // - if ( replicaNo||offset ) + if ( (replicaNo != 0)||(offset != 0.0) ) { rmin = rmax-width; tolRMin2 = rmin-halfkRadTolerance; @@ -221,7 +219,7 @@ G4ReplicaNavigation::DistanceToOut(const G4VPhysicalVolume* pVol, case kRho: rho = localPoint.perp(); rmax = width*(replicaNo+1)+offset; - if ( replicaNo||offset ) + if ( (replicaNo != 0)||(offset != 0.0) ) { rmin = rmax-width; safe1 = rho-rmin; @@ -561,7 +559,7 @@ G4ReplicaNavigation::DistanceToOutRad(const G4ThreeVector& localPoint, { // Possible rmin intersection // - if (rmin) + if (rmin != 0.0) { deltaR = t3-rmin*rmin; b = t2/t1; @@ -803,7 +801,7 @@ G4ReplicaNavigation::ComputeStep(const G4ThreeVector& globalPoint, history.GetTopReplicaNo(), localPoint); G4ExitNormal normalOutStc; - const G4int topDepth= (G4int)history.GetDepth(); + const auto topDepth= (G4int)history.GetDepth(); ourSafety = std::min( ourSafety, sampleSafety); @@ -954,9 +952,11 @@ G4ReplicaNavigation::ComputeStep(const G4ThreeVector& globalPoint, "Point is far outside Current Volume !" ); } else + { G4Exception("G4ReplicaNavigation::ComputeStep()", "GeomNav1002", JustWarning, message, "Point is a little outside Current Volume."); + } } } #endif @@ -987,7 +987,7 @@ G4ReplicaNavigation::ComputeStep(const G4ThreeVector& globalPoint, } // Transform to Grand-mother reference frame const G4RotationMatrix* rot = motherPhysical->GetRotation(); - if ( rot ) + if ( rot != nullptr ) { exitNormalVector *= rot->inverse(); } @@ -1094,21 +1094,24 @@ G4ReplicaNavigation::ComputeStep(const G4ThreeVector& globalPoint, << sampleSolid->GetName() << G4endl << " Solid gave DistanceToIn = " << sampleStepDistance << " yet returns " ; - if ( insideIntPt == kInside ) + if ( insideIntPt == kInside ) { message << "-kInside-"; - else if ( insideIntPt == kOutside ) + } else if ( insideIntPt == kOutside ) { message << "-kOutside-"; - else + } else { message << "-kSurface-"; + } message << " for this point !" << G4endl << " Point = " << intersectionPoint << G4endl; - if ( insideIntPt != kInside ) + if ( insideIntPt != kInside ) { message << " DistanceToIn(p) = " << sampleSolid->DistanceToIn(intersectionPoint) << G4endl; - if ( insideIntPt != kOutside ) +} + if ( insideIntPt != kOutside ) { message << " DistanceToOut(p) = " << sampleSolid->DistanceToOut(intersectionPoint); +} G4Exception("G4ReplicaNavigation::ComputeStep()", "GeomNav1002", JustWarning, message); G4cout.precision(oldcoutPrec); @@ -1304,10 +1307,7 @@ G4ReplicaNavigation::BackLocate(G4NavigationHistory& history, history.BackLevel(cdepth-depth); return insideCode; } - else - { - goodPoint = repPoint; - } + goodPoint = repPoint; } localPoint = history.GetTransform(depth).TransformPoint(globalPoint); insideCode = Inside(history.GetVolume(depth), diff --git a/source/geometry/navigation/src/G4SafetyHelper.cc b/source/geometry/navigation/src/G4SafetyHelper.cc index 318e6fd6de4..6e28a3dd86c 100644 --- a/source/geometry/navigation/src/G4SafetyHelper.cc +++ b/source/geometry/navigation/src/G4SafetyHelper.cc @@ -35,11 +35,13 @@ #include "globals.hh" +// -------------------------------------------------------------------- G4SafetyHelper::G4SafetyHelper() : fLastSafetyPosition(0.0,0.0,0.0) { } +// -------------------------------------------------------------------- void G4SafetyHelper::InitialiseNavigator() { fpPathFinder = G4PathFinder::GetInstance(); @@ -60,6 +62,7 @@ void G4SafetyHelper::InitialiseNavigator() } } +// -------------------------------------------------------------------- void G4SafetyHelper::InitialiseHelper() { fLastSafetyPosition = G4ThreeVector(0.0,0.0,0.0); @@ -68,9 +71,7 @@ void G4SafetyHelper::InitialiseHelper() fFirstCall = false; } -G4SafetyHelper::~G4SafetyHelper() -{ -} +G4SafetyHelper::~G4SafetyHelper() = default; G4double G4SafetyHelper::CheckNextStep(const G4ThreeVector& position, @@ -93,6 +94,7 @@ G4SafetyHelper::CheckNextStep(const G4ThreeVector& position, return linstep; } +// -------------------------------------------------------------------- G4double G4SafetyHelper::ComputeSafety( const G4ThreeVector& position, G4double maxLength ) { @@ -138,6 +140,7 @@ G4double G4SafetyHelper::ComputeSafety( const G4ThreeVector& position, return newSafety; } +// -------------------------------------------------------------------- void G4SafetyHelper::ReLocateWithinVolume( const G4ThreeVector& newPosition ) { #ifdef G4VERBOSE @@ -172,6 +175,7 @@ void G4SafetyHelper::ReLocateWithinVolume( const G4ThreeVector& newPosition ) } } +// -------------------------------------------------------------------- void G4SafetyHelper::Locate( const G4ThreeVector& newPosition, const G4ThreeVector& newDirection) { diff --git a/source/geometry/navigation/src/G4SimpleLocator.cc b/source/geometry/navigation/src/G4SimpleLocator.cc index 4a3a7328820..ebb84fb9ea6 100644 --- a/source/geometry/navigation/src/G4SimpleLocator.cc +++ b/source/geometry/navigation/src/G4SimpleLocator.cc @@ -39,9 +39,7 @@ G4SimpleLocator::G4SimpleLocator(G4Navigator *theNavigator) { } -G4SimpleLocator::~G4SimpleLocator() -{ -} +G4SimpleLocator::~G4SimpleLocator() = default; // -------------------------------------------------------------------------- // G4bool G4PropagatorInField::LocateIntersectionPoint( diff --git a/source/geometry/navigation/src/G4TransportationManager.cc b/source/geometry/navigation/src/G4TransportationManager.cc index ba2d25bbbb2..e9fdf56d484 100644 --- a/source/geometry/navigation/src/G4TransportationManager.cc +++ b/source/geometry/navigation/src/G4TransportationManager.cc @@ -53,7 +53,7 @@ G4Navigator* G4TransportationManager::fFirstTrackingNavigator= nullptr; // G4TransportationManager::G4TransportationManager() { - if (fTransportationManager) + if (fTransportationManager != nullptr) { G4Exception("G4TransportationManager::G4TransportationManager()", "GeomNav0002", FatalException, @@ -63,15 +63,17 @@ G4TransportationManager::G4TransportationManager() // Create the navigator for tracking and activate it; add to collections // G4Navigator* trackingNavigator= nullptr; - if( fFirstTrackingNavigator && fFirstTrackingNavigator->GetExternalNavigation() ) + if( (fFirstTrackingNavigator != nullptr) && (fFirstTrackingNavigator->GetExternalNavigation() != nullptr) ) { trackingNavigator = fFirstTrackingNavigator->Clone(); } else { trackingNavigator = new G4Navigator(); - if( fFirstTrackingNavigator == nullptr ) + if( fFirstTrackingNavigator == nullptr ) + { fFirstTrackingNavigator = trackingNavigator; + } } trackingNavigator->Activate(true); fNavigators.push_back(trackingNavigator); @@ -132,7 +134,7 @@ void G4TransportationManager::SetFieldManager(G4FieldManager* newFieldManager) // Message the PropagatorInField, // which also maintains this information (to be reviewed) // - if( fPropagatorInField ) + if( fPropagatorInField != nullptr ) { fPropagatorInField -> SetDetectorFieldManager( newFieldManager ); } @@ -159,9 +161,9 @@ void G4TransportationManager::SetNavigatorForTracking(G4Navigator* newNavigator) // void G4TransportationManager::ClearNavigators() { - for (auto pNav=fNavigators.cbegin(); pNav!=fNavigators.cend(); ++pNav) + for (const auto & fNavigator : fNavigators) { - delete *pNav; + delete fNavigator; } fNavigators.clear(); fActiveNavigators.clear(); @@ -203,9 +205,12 @@ G4Navigator* G4TransportationManager::GetNavigator( const G4String& worldName ) { // If already existing, return the stored pointer to the navigator // - for (auto pNav=fNavigators.cbegin(); pNav!=fNavigators.cend(); ++pNav) + for (const auto & fNavigator : fNavigators) { - if ((*pNav)->GetWorldVolume()->GetName() == worldName) { return *pNav; } + if (fNavigator->GetWorldVolume()->GetName() == worldName) + { + return fNavigator; + } } // Check if world of that name already exists, @@ -240,9 +245,9 @@ G4Navigator* G4TransportationManager::GetNavigator( const G4String& worldName ) // G4Navigator* G4TransportationManager::GetNavigator( G4VPhysicalVolume* aWorld ) { - for (auto pNav=fNavigators.cbegin(); pNav!=fNavigators.cend(); ++pNav) + for (const auto & fNavigator : fNavigators) { - if ((*pNav)->GetWorldVolume() == aWorld) { return *pNav; } + if (fNavigator->GetWorldVolume() == aWorld) { return fNavigator; } } G4Navigator* aNavigator = nullptr; auto pWorld = std::find(fWorlds.cbegin(), fWorlds.cend(), aWorld); @@ -325,10 +330,9 @@ G4int G4TransportationManager::ActivateNavigator( G4Navigator* aNavigator ) aNavigator->Activate(true); G4int id = 0; - for(auto pActiveNav=fActiveNavigators.cbegin(); - pActiveNav!=fActiveNavigators.cend(); ++pActiveNav) + for(const auto & fActiveNavigator : fActiveNavigators) { - if (*pActiveNav == aNavigator) { return id; } + if (fActiveNavigator == aNavigator) { return id; } ++id; } @@ -375,10 +379,9 @@ void G4TransportationManager::DeActivateNavigator( G4Navigator* aNavigator ) // void G4TransportationManager::InactivateAll( ) { - for (auto pNav=fActiveNavigators.cbegin(); - pNav!=fActiveNavigators.cend(); ++pNav) + for (const auto & fActiveNavigator : fActiveNavigators) { - (*pNav)->Activate(false); + fActiveNavigator->Activate(false); } fActiveNavigators.clear(); @@ -400,11 +403,11 @@ G4TransportationManager::IsWorldExisting ( const G4String& name ) auto pWorld = fWorlds.begin(); if ( *pWorld==nullptr ) { *pWorld=fNavigators[0]->GetWorldVolume(); } - for (auto cpWorld=fWorlds.cbegin(); cpWorld!=fWorlds.cend(); ++cpWorld) + for (const auto & fWorld : fWorlds) { - if ((*cpWorld)->GetName() == name ) { return *cpWorld; } + if (fWorld->GetName() == name ) { return fWorld; } } - return 0; + return nullptr; } // ---------------------------------------------------------------------------- @@ -472,7 +475,7 @@ void G4TransportationManager::ClearParallelWorlds() fNavigators.push_back(trackingNavigator); fActiveNavigators.push_back(trackingNavigator); - fWorlds.push_back(0); // NULL registered + fWorlds.push_back(nullptr); // NULL registered } // ---------------------------------------------------------------------------- diff --git a/source/geometry/navigation/src/G4VExternalNavigation.cc b/source/geometry/navigation/src/G4VExternalNavigation.cc index 9f32ce349f1..bd05d8731d6 100644 --- a/source/geometry/navigation/src/G4VExternalNavigation.cc +++ b/source/geometry/navigation/src/G4VExternalNavigation.cc @@ -32,19 +32,15 @@ // ******************************************************************** // Constructor -// *********V*********************************************************** +// ******************************************************************** // -G4VExternalNavigation::G4VExternalNavigation() -{ -} +G4VExternalNavigation::G4VExternalNavigation() = default; // ******************************************************************** // Destructor // ******************************************************************** // -G4VExternalNavigation::~G4VExternalNavigation() -{ -} +G4VExternalNavigation::~G4VExternalNavigation() = default; // ******************************************************************** // Inside call Inside() of a solid diff --git a/source/geometry/navigation/src/G4VIntersectionLocator.cc b/source/geometry/navigation/src/G4VIntersectionLocator.cc index 2bc66b0306e..8dbd2104bb4 100644 --- a/source/geometry/navigation/src/G4VIntersectionLocator.cc +++ b/source/geometry/navigation/src/G4VIntersectionLocator.cc @@ -403,7 +403,7 @@ GetLocalSurfaceNormal(const G4ThreeVector& CurrentE_Point, G4bool& validNormal) // which side you are located onto (can return vector with wrong sign.) // TO-DO: use direction (of chord) to identify volume we will be "entering" - if( located != 0) + if( located != nullptr) { G4LogicalVolume* pLogical= located->GetLogicalVolume(); G4VSolid* pSolid; @@ -821,7 +821,7 @@ void G4VIntersectionLocator::ReportProgress( std::ostream& oss, { oss << "ReportProgress: Current status of intersection search: " << G4endl; - if( depth > 0 ) oss << " Depth= " << depth; + if( depth > 0 ) { oss << " Depth= " << depth; } oss << " Substep no = " << substep_no << G4endl; G4int verboseLevel = 5; G4double safetyPrev = -1.0; // Add as argument ? diff --git a/source/geometry/navigation/src/G4VoxelNavigation.cc b/source/geometry/navigation/src/G4VoxelNavigation.cc index 0ae31126971..32e08768422 100644 --- a/source/geometry/navigation/src/G4VoxelNavigation.cc +++ b/source/geometry/navigation/src/G4VoxelNavigation.cc @@ -41,8 +41,7 @@ // ******************************************************************** // G4VoxelNavigation::G4VoxelNavigation() - : fBList(), - fVoxelAxisStack(kNavigatorVoxelStackMax,kXAxis), + : fVoxelAxisStack(kNavigatorVoxelStackMax,kXAxis), fVoxelNoSlicesStack(kNavigatorVoxelStackMax,0), fVoxelSliceWidthStack(kNavigatorVoxelStackMax,0.), fVoxelNodeNoStack(kNavigatorVoxelStackMax,0), @@ -340,15 +339,17 @@ G4VoxelNavigation::ComputeStep( const G4ThreeVector& localPoint, if ( validExitNormal ) { const G4RotationMatrix *rot = motherPhysical->GetRotation(); - if (rot) + if (rot != nullptr) { exitNormal *= rot->inverse(); #ifdef G4VERBOSE if( fCheck ) - fLogger->CheckAndReportBadNormal(exitNormal, // rotated - motherExitNormal, // original - *rot, - "From RotationMatrix" ); + { + fLogger->CheckAndReportBadNormal(exitNormal, // rotated + motherExitNormal, // original + *rot, + "From RotationMatrix" ); + } #endif } } @@ -588,8 +589,8 @@ G4VoxelNavigation::LocateNextVoxel(const G4ThreeVector& localPoint, voxelPoint = localPoint+localDirection*newDistance; fVoxelNodeNoStack[newDepth] = newNodeNo; fVoxelDepth = newDepth; - newVoxelNode = 0; - while ( !newVoxelNode ) + newVoxelNode = nullptr; + while ( newVoxelNode == nullptr ) { newProxy = newHeader->GetSlice(newNodeNo); if (newProxy->IsNode()) @@ -718,7 +719,7 @@ G4VoxelNavigation::ComputeSafety(const G4ThreeVector& localPoint, #ifdef G4VERBOSE if( fCheck ) { - fLogger->ComputeSafetyLog (motherSolid,localPoint,motherSafety,true,true); + fLogger->ComputeSafetyLog (motherSolid,localPoint,motherSafety,true,1); } #endif // @@ -748,7 +749,7 @@ G4VoxelNavigation::ComputeSafety(const G4ThreeVector& localPoint, if( fCheck ) { fLogger->ComputeSafetyLog(sampleSolid, samplePoint, - sampleSafety, false, false); + sampleSafety, false, 0); } #endif } @@ -766,6 +767,6 @@ G4VoxelNavigation::ComputeSafety(const G4ThreeVector& localPoint, // void G4VoxelNavigation::SetVerboseLevel(G4int level) { - if( fLogger ) fLogger->SetVerboseLevel(level); - if( fpVoxelSafety) fpVoxelSafety->SetVerboseLevel(level); + if( fLogger != nullptr ) { fLogger->SetVerboseLevel(level); } + if( fpVoxelSafety != nullptr) { fpVoxelSafety->SetVerboseLevel(level); } } diff --git a/source/geometry/navigation/src/G4VoxelSafety.cc b/source/geometry/navigation/src/G4VoxelSafety.cc index 4328ef21aa8..e9573cbc925 100644 --- a/source/geometry/navigation/src/G4VoxelSafety.cc +++ b/source/geometry/navigation/src/G4VoxelSafety.cc @@ -42,8 +42,7 @@ // ******************************************************************** // G4VoxelSafety::G4VoxelSafety() - : fBlockList(), - fVoxelAxisStack(kNavigatorVoxelStackMax,kXAxis), + : fVoxelAxisStack(kNavigatorVoxelStackMax,kXAxis), fVoxelNoSlicesStack(kNavigatorVoxelStackMax,0), fVoxelSliceWidthStack(kNavigatorVoxelStackMax,0.), fVoxelNodeNoStack(kNavigatorVoxelStackMax,0), @@ -56,9 +55,7 @@ G4VoxelSafety::G4VoxelSafety() // Destructor // ******************************************************************** // -G4VoxelSafety::~G4VoxelSafety() -{ -} +G4VoxelSafety::~G4VoxelSafety() = default; // ******************************************************************** // ComputeSafety @@ -245,7 +242,7 @@ G4VoxelSafety::SafetyForVoxelHeader( const G4SmartVoxelHeader* pHeader, G4double localCrd = localPoint(targetHeaderAxis); - const G4int candNodeNo = G4int( (localCrd-targetHeaderMin) + const auto candNodeNo = G4int( (localCrd-targetHeaderMin) / targetHeaderNodeWidth ); // Ensure that it is between 0 and targetHeader->GetMaxExtent() - 1 @@ -347,7 +344,7 @@ G4VoxelSafety::SafetyForVoxelHeader( const G4SmartVoxelHeader* pHeader, } #endif - if ( sampleProxy == 0 ) + if ( sampleProxy == nullptr ) { G4ExceptionDescription ed; ed << " Problem for node number= " << targetNodeNo diff --git a/source/geometry/solids/Boolean/GNUmakefile b/source/geometry/solids/Boolean/GNUmakefile deleted file mode 100644 index 46b72d9ad70..00000000000 --- a/source/geometry/solids/Boolean/GNUmakefile +++ /dev/null @@ -1,28 +0,0 @@ -# ---------------------------------------------------------------- -# GNUmakefile for geometry/CSG library. Gabriele Cosmo, 16/11/96. -# ---------------------------------------------------------------- - -name := G4geomBoolean - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4GEOM_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/graphics_reps/include \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/solids/CSG/include \ - -I$(G4BASE)/geometry/solids/specific/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include - -ifdef G4BOOLDEBUG - CPPFLAGS += -DG4BOOLDEBUG -endif - -include $(G4INSTALL)/config/common.gmk diff --git a/source/geometry/solids/Boolean/History b/source/geometry/solids/Boolean/History index 71f3cce9590..fc09e42a25e 100644 --- a/source/geometry/solids/Boolean/History +++ b/source/geometry/solids/Boolean/History @@ -6,9 +6,18 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------ -## 2022-12-20 Ivana Hrivnacova (geom-bool-V11-00-08) +## 2023-05-10 Gabriele Cosmo (geom-bool-V11-01-03) +- Applied clang-tidy fixes (readability, modernization, performance, ...). + +## 2023-03-22 Gabriele Cosmo (geom-bool-V11-01-02) +- Minor code formatting. No functional changes. + +## 2023-03-21 Stewart Boogert (geom-bool-V11-01-01) +- Added external boolean processor interface. + +## 2022-12-20 Ivana Hrivnacova (geom-bool-V11-01-00) - Fixed hang-out in G4MultiUnion, caused by oveflow of 'size-1' when 'size' value is zero - after changing G4int type to size_t + after changing G4int type to size_t. ## 2022-11-10 Gabriele Cosmo (geom-bool-V11-00-07) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/geometry/solids/Boolean/include/G4BooleanSolid.hh b/source/geometry/solids/Boolean/include/G4BooleanSolid.hh index ad4ede02b72..2c3af04f5df 100644 --- a/source/geometry/solids/Boolean/include/G4BooleanSolid.hh +++ b/source/geometry/solids/Boolean/include/G4BooleanSolid.hh @@ -41,8 +41,11 @@ #include "G4RotationMatrix.hh" #include "G4Transform3D.hh" +#include "G4VBooleanProcessor.hh" + class HepPolyhedronProcessor; + class G4BooleanSolid : public G4VSolid { public: @@ -62,21 +65,21 @@ class G4BooleanSolid : public G4VSolid G4VSolid* pSolidB , const G4Transform3D& transform ); - virtual ~G4BooleanSolid(); + ~G4BooleanSolid() override; - virtual const G4VSolid* GetConstituentSolid(G4int no) const; - virtual G4VSolid* GetConstituentSolid(G4int no); + const G4VSolid* GetConstituentSolid(G4int no) const override; + G4VSolid* GetConstituentSolid(G4int no) override; // If Solid is made up from a Boolean operation of two solids, // return the corresponding solid (for no=0 and 1). // If the solid is not a "Boolean", return 0. - virtual G4double GetCubicVolume(); - inline G4double GetSurfaceArea(); + G4double GetCubicVolume() override; + inline G4double GetSurfaceArea() override; - virtual G4GeometryType GetEntityType() const; - virtual G4Polyhedron* GetPolyhedron () const; + G4GeometryType GetEntityType() const override; + G4Polyhedron* GetPolyhedron () const override; - std::ostream& StreamInfo(std::ostream& os) const; + std::ostream& StreamInfo(std::ostream& os) const override; inline G4int GetCubVolStatistics() const; inline G4double GetCubVolEpsilon() const; @@ -88,7 +91,7 @@ class G4BooleanSolid : public G4VSolid inline void SetAreaStatistics(G4int st); inline void SetAreaAccuracy(G4double ep); - G4ThreeVector GetPointOnSurface() const; + G4ThreeVector GetPointOnSurface() const override; G4BooleanSolid(__void__&); // Fake default constructor for usage restricted to direct object @@ -99,6 +102,11 @@ class G4BooleanSolid : public G4VSolid G4BooleanSolid& operator=(const G4BooleanSolid& rhs); // Copy constructor and assignment operator. + static void SetExternalBooleanProcessor(G4VBooleanProcessor* extProcessor); + // Set Boolean processor to replace default processor. + static G4VBooleanProcessor* GetExternalBooleanProcessor(); + // Get Boolean processor needed for G4MultiUnion. + protected: void GetListOfPrimitives(std::vector>&, @@ -117,6 +125,9 @@ class G4BooleanSolid : public G4VSolid G4double fCubicVolume = -1.0; // Stored value of fCubicVolume + static G4VBooleanProcessor* fExternalBoolProcessor; + // External Boolean processor + private: G4int fStatistics = 1000000; @@ -132,7 +143,7 @@ class G4BooleanSolid : public G4VSolid G4bool createdDisplacedSolid = false; // If & only if this object created it, it must delete it -} ; +}; #include "G4BooleanSolid.icc" diff --git a/source/geometry/solids/Boolean/include/G4DisplacedSolid.hh b/source/geometry/solids/Boolean/include/G4DisplacedSolid.hh index 7ad815b140c..358859b6530 100644 --- a/source/geometry/solids/Boolean/include/G4DisplacedSolid.hh +++ b/source/geometry/solids/Boolean/include/G4DisplacedSolid.hh @@ -60,49 +60,49 @@ class G4DisplacedSolid : public G4VSolid const G4AffineTransform directTransform ); // For use in instantiating a transient instance from a persistent one. - virtual ~G4DisplacedSolid() ; + ~G4DisplacedSolid() override ; - EInside Inside( const G4ThreeVector& p ) const ; + EInside Inside( const G4ThreeVector& p ) const override ; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const ; + G4double& pMin, G4double& pMax) const override ; - G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const ; + G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const override ; G4double DistanceToIn( const G4ThreeVector& p, - const G4ThreeVector& v ) const ; + const G4ThreeVector& v ) const override ; - G4double DistanceToIn( const G4ThreeVector& p) const ; + G4double DistanceToIn( const G4ThreeVector& p) const override ; G4double DistanceToOut( const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm=false, - G4bool *validNorm=0, - G4ThreeVector *n=0 ) const ; + G4bool *validNorm=nullptr, + G4ThreeVector *n=nullptr ) const override ; - G4double DistanceToOut( const G4ThreeVector& p ) const ; + G4double DistanceToOut( const G4ThreeVector& p ) const override ; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep ) ; + const G4VPhysicalVolume* pRep ) override ; void CleanTransformations(); - G4double GetCubicVolume(); - G4double GetSurfaceArea(); + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; - G4ThreeVector GetPointOnSurface() const; + G4ThreeVector GetPointOnSurface() const override; - G4GeometryType GetEntityType() const; - G4VSolid* Clone() const; + G4GeometryType GetEntityType() const override; + G4VSolid* Clone() const override; - const G4DisplacedSolid* GetDisplacedSolidPtr() const; - G4DisplacedSolid* GetDisplacedSolidPtr(); + const G4DisplacedSolid* GetDisplacedSolidPtr() const override; + G4DisplacedSolid* GetDisplacedSolidPtr() override; // If the Solid is a "G4DisplacedSolid", // return a self pointer else return 0. @@ -129,7 +129,7 @@ class G4DisplacedSolid : public G4VSolid void SetObjectTranslation(const G4ThreeVector&); // Get/Set the rotation/translation, as applied to the object. - std::ostream& StreamInfo(std::ostream& os) const; + std::ostream& StreamInfo(std::ostream& os) const override; G4DisplacedSolid(__void__&); // Fake default constructor for usage restricted to direct object @@ -140,9 +140,9 @@ class G4DisplacedSolid : public G4VSolid G4DisplacedSolid& operator=(const G4DisplacedSolid& rhs); // Copy constructor and assignment operator. - void DescribeYourselfTo ( G4VGraphicsScene& scene ) const ; - G4Polyhedron* CreatePolyhedron () const ; - G4Polyhedron* GetPolyhedron () const ; + void DescribeYourselfTo ( G4VGraphicsScene& scene ) const override ; + G4Polyhedron* CreatePolyhedron () const override ; + G4Polyhedron* GetPolyhedron () const override ; // For creating graphical representations (ie for visualisation). protected: diff --git a/source/geometry/solids/Boolean/include/G4IntersectionSolid.hh b/source/geometry/solids/Boolean/include/G4IntersectionSolid.hh index 8de311b8b3f..3565ee3d001 100644 --- a/source/geometry/solids/Boolean/include/G4IntersectionSolid.hh +++ b/source/geometry/solids/Boolean/include/G4IntersectionSolid.hh @@ -61,11 +61,11 @@ class G4IntersectionSolid : public G4BooleanSolid G4VSolid* pSolidB, const G4Transform3D& transform ) ; - virtual ~G4IntersectionSolid() ; + ~G4IntersectionSolid() override ; - G4GeometryType GetEntityType() const; + G4GeometryType GetEntityType() const override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; G4IntersectionSolid(__void__&); // Fake default constructor for usage restricted to direct object @@ -76,37 +76,37 @@ class G4IntersectionSolid : public G4BooleanSolid G4IntersectionSolid& operator=(const G4IntersectionSolid& rhs); // Copy constructor and assignment operator. - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent( const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const ; + G4double& pMin, G4double& pMax) const override ; - EInside Inside( const G4ThreeVector& p ) const ; + EInside Inside( const G4ThreeVector& p ) const override ; - G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const ; + G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const override ; G4double DistanceToIn( const G4ThreeVector& p, - const G4ThreeVector& v ) const ; + const G4ThreeVector& v ) const override ; - G4double DistanceToIn( const G4ThreeVector& p) const ; + G4double DistanceToIn( const G4ThreeVector& p) const override ; G4double DistanceToOut( const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm=false, - G4bool *validNorm=0, - G4ThreeVector *n=0 ) const ; + G4bool *validNorm=nullptr, + G4ThreeVector *n=nullptr ) const override ; - G4double DistanceToOut( const G4ThreeVector& p ) const ; + G4double DistanceToOut( const G4ThreeVector& p ) const override ; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep ) ; + const G4VPhysicalVolume* pRep ) override ; - void DescribeYourselfTo ( G4VGraphicsScene& scene ) const ; - G4Polyhedron* CreatePolyhedron () const ; + void DescribeYourselfTo ( G4VGraphicsScene& scene ) const override ; + G4Polyhedron* CreatePolyhedron () const override ; }; #endif diff --git a/source/geometry/solids/Boolean/include/G4MultiUnion.hh b/source/geometry/solids/Boolean/include/G4MultiUnion.hh index 7d0bf1c82ed..4993899dc18 100644 --- a/source/geometry/solids/Boolean/include/G4MultiUnion.hh +++ b/source/geometry/solids/Boolean/include/G4MultiUnion.hh @@ -58,7 +58,7 @@ class G4MultiUnion : public G4VSolid G4MultiUnion() : G4VSolid("") {} G4MultiUnion(const G4String& name); - ~G4MultiUnion(); + ~G4MultiUnion() override; // Build the multiple union by adding nodes void AddNode(G4VSolid& solid, const G4Transform3D& trans); @@ -73,23 +73,23 @@ class G4MultiUnion : public G4VSolid inline G4int GetNumberOfSolids()const; // Navigation methods - EInside Inside(const G4ThreeVector& aPoint) const; + EInside Inside(const G4ThreeVector& aPoint) const override; EInside InsideIterator(const G4ThreeVector& aPoint) const; // Safety methods - G4double DistanceToIn(const G4ThreeVector& aPoint) const; - G4double DistanceToOut(const G4ThreeVector& aPoint) const; + G4double DistanceToIn(const G4ThreeVector& aPoint) const override; + G4double DistanceToOut(const G4ThreeVector& aPoint) const override; inline void SetAccurateSafety(G4bool flag); // Exact distance methods G4double DistanceToIn(const G4ThreeVector& aPoint, - const G4ThreeVector& aDirection) const; + const G4ThreeVector& aDirection) const override; G4double DistanceToOut(const G4ThreeVector& aPoint, const G4ThreeVector& aDirection, const G4bool calcNorm = false, G4bool* validNorm = nullptr, - G4ThreeVector* aNormalVector = nullptr) const; + G4ThreeVector* aNormalVector = nullptr) const override; G4double DistanceToInNoVoxels(const G4ThreeVector& aPoint, const G4ThreeVector& aDirection) const; @@ -105,20 +105,20 @@ class G4MultiUnion : public G4VSolid const G4ThreeVector& aDirection, G4ThreeVector* aNormalVector) const; - G4ThreeVector SurfaceNormal(const G4ThreeVector& aPoint) const; + G4ThreeVector SurfaceNormal(const G4ThreeVector& aPoint) const override; void Extent(EAxis aAxis, G4double& aMin, G4double& aMax) const; - void BoundingLimits(G4ThreeVector& aMin, G4ThreeVector& aMax) const; + void BoundingLimits(G4ThreeVector& aMin, G4ThreeVector& aMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; - G4double GetCubicVolume(); - G4double GetSurfaceArea(); + G4double& pMin, G4double& pMax) const override; + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; - G4VSolid* Clone() const ; + G4VSolid* Clone() const override ; - G4GeometryType GetEntityType() const { return "G4MultiUnion"; } + G4GeometryType GetEntityType() const override { return "G4MultiUnion"; } void Voxelize(); // Finalize and prepare for use. User MUST call it once before @@ -127,13 +127,13 @@ class G4MultiUnion : public G4VSolid EInside InsideNoVoxels(const G4ThreeVector& aPoint) const; inline G4Voxelizer& GetVoxels() const; - std::ostream& StreamInfo(std::ostream& os) const; + std::ostream& StreamInfo(std::ostream& os) const override; - G4ThreeVector GetPointOnSurface() const; + G4ThreeVector GetPointOnSurface() const override; - void DescribeYourselfTo ( G4VGraphicsScene& scene ) const ; - G4Polyhedron* CreatePolyhedron () const ; - G4Polyhedron* GetPolyhedron () const; + void DescribeYourselfTo ( G4VGraphicsScene& scene ) const override ; + G4Polyhedron* CreatePolyhedron () const override ; + G4Polyhedron* GetPolyhedron () const override; G4MultiUnion(__void__&); // Fake default constructor for usage restricted to direct object @@ -143,7 +143,7 @@ class G4MultiUnion : public G4VSolid private: EInside InsideWithExclusion(const G4ThreeVector& aPoint, - G4SurfBits* bits = 0) const; + G4SurfBits* bits = nullptr) const; G4int SafetyFromOutsideNumberNode(const G4ThreeVector& aPoint, G4double& safety) const; G4double DistanceToInCandidates(const G4ThreeVector& aPoint, diff --git a/source/geometry/solids/Boolean/include/G4ScaledSolid.hh b/source/geometry/solids/Boolean/include/G4ScaledSolid.hh index bb9b2987e40..fce3a174d30 100644 --- a/source/geometry/solids/Boolean/include/G4ScaledSolid.hh +++ b/source/geometry/solids/Boolean/include/G4ScaledSolid.hh @@ -50,52 +50,52 @@ class G4ScaledSolid : public G4VSolid G4VSolid* pSolid , const G4Scale3D& pScale ); - virtual ~G4ScaledSolid(); + ~G4ScaledSolid() override; - EInside Inside( const G4ThreeVector& p ) const; + EInside Inside( const G4ThreeVector& p ) const override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; - G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const; + G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const override; G4double DistanceToIn( const G4ThreeVector& p, - const G4ThreeVector& v ) const; + const G4ThreeVector& v ) const override; - G4double DistanceToIn( const G4ThreeVector& p) const; + G4double DistanceToIn( const G4ThreeVector& p) const override; G4double DistanceToOut( const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm = false, G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr ) const; + G4ThreeVector* n = nullptr ) const override; - G4double DistanceToOut( const G4ThreeVector& p ) const; + G4double DistanceToOut( const G4ThreeVector& p ) const override; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep ); + const G4VPhysicalVolume* pRep ) override; - G4double GetCubicVolume(); - G4double GetSurfaceArea(); + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; void CleanTransformations(); - G4ThreeVector GetPointOnSurface() const; + G4ThreeVector GetPointOnSurface() const override; G4Scale3D GetScaleTransform() const; void SetScaleTransform(const G4Scale3D& scale); G4VSolid* GetUnscaledSolid() const; - G4GeometryType GetEntityType() const; - G4VSolid* Clone() const; + G4GeometryType GetEntityType() const override; + G4VSolid* Clone() const override; - std::ostream& StreamInfo(std::ostream& os) const; + std::ostream& StreamInfo(std::ostream& os) const override; G4ScaledSolid(__void__&); // Fake default constructor for usage restricted to direct object @@ -106,9 +106,9 @@ class G4ScaledSolid : public G4VSolid G4ScaledSolid& operator=(const G4ScaledSolid& rhs); // Copy constructor and assignment operator. - void DescribeYourselfTo ( G4VGraphicsScene& scene ) const; - G4Polyhedron* CreatePolyhedron () const; - G4Polyhedron* GetPolyhedron () const; + void DescribeYourselfTo ( G4VGraphicsScene& scene ) const override; + G4Polyhedron* CreatePolyhedron () const override; + G4Polyhedron* GetPolyhedron () const override; // For creating graphical representations (i.e. for visualisation). private: diff --git a/source/geometry/solids/Boolean/include/G4SubtractionSolid.hh b/source/geometry/solids/Boolean/include/G4SubtractionSolid.hh index d47b75af82b..e32c1e5a999 100644 --- a/source/geometry/solids/Boolean/include/G4SubtractionSolid.hh +++ b/source/geometry/solids/Boolean/include/G4SubtractionSolid.hh @@ -62,11 +62,11 @@ class G4SubtractionSolid : public G4BooleanSolid G4VSolid* pSolidB , const G4Transform3D& transform ) ; - virtual ~G4SubtractionSolid() ; + ~G4SubtractionSolid() override ; - G4GeometryType GetEntityType() const ; + G4GeometryType GetEntityType() const override ; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; G4SubtractionSolid(__void__&); // Fake default constructor for usage restricted to direct object @@ -77,39 +77,39 @@ class G4SubtractionSolid : public G4BooleanSolid G4SubtractionSolid& operator=(const G4SubtractionSolid& rhs); // Copy constructor and assignment operator. - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent( const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const ; + G4double& pMin, G4double& pMax) const override ; - EInside Inside( const G4ThreeVector& p ) const ; + EInside Inside( const G4ThreeVector& p ) const override ; - G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const ; + G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const override ; G4double DistanceToIn( const G4ThreeVector& p, - const G4ThreeVector& v ) const ; + const G4ThreeVector& v ) const override ; - G4double DistanceToIn( const G4ThreeVector& p) const ; + G4double DistanceToIn( const G4ThreeVector& p) const override ; G4double DistanceToOut( const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm = false, G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr ) const ; + G4ThreeVector* n = nullptr ) const override ; - G4double DistanceToOut( const G4ThreeVector& p ) const ; + G4double DistanceToOut( const G4ThreeVector& p ) const override ; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep ) ; + const G4VPhysicalVolume* pRep ) override ; - void DescribeYourselfTo ( G4VGraphicsScene& scene ) const ; - G4Polyhedron* CreatePolyhedron () const ; + void DescribeYourselfTo ( G4VGraphicsScene& scene ) const override ; + G4Polyhedron* CreatePolyhedron () const override ; - virtual G4double GetCubicVolume() final; + G4double GetCubicVolume() final; }; #endif diff --git a/source/geometry/solids/Boolean/include/G4UnionSolid.hh b/source/geometry/solids/Boolean/include/G4UnionSolid.hh index 8f873cae171..483f51d6656 100644 --- a/source/geometry/solids/Boolean/include/G4UnionSolid.hh +++ b/source/geometry/solids/Boolean/include/G4UnionSolid.hh @@ -61,11 +61,11 @@ class G4UnionSolid : public G4BooleanSolid G4VSolid* pSolidB , const G4Transform3D& transform ) ; - virtual ~G4UnionSolid() ; + ~G4UnionSolid() override ; - G4GeometryType GetEntityType() const ; + G4GeometryType GetEntityType() const override ; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; G4UnionSolid(__void__&); // Fake default constructor for usage restricted to direct object @@ -76,39 +76,39 @@ class G4UnionSolid : public G4BooleanSolid G4UnionSolid& operator=(const G4UnionSolid& rhs); // Copy constructor and assignment operator. - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent( const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax ) const ; + G4double& pMin, G4double& pMax ) const override ; - EInside Inside( const G4ThreeVector& p ) const ; + EInside Inside( const G4ThreeVector& p ) const override ; - G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const ; + G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const override ; G4double DistanceToIn( const G4ThreeVector& p, - const G4ThreeVector& v ) const ; + const G4ThreeVector& v ) const override ; - G4double DistanceToIn( const G4ThreeVector& p ) const ; + G4double DistanceToIn( const G4ThreeVector& p ) const override ; G4double DistanceToOut( const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm = false, G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr ) const ; + G4ThreeVector* n = nullptr ) const override ; - G4double DistanceToOut( const G4ThreeVector& p ) const ; + G4double DistanceToOut( const G4ThreeVector& p ) const override ; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep ) ; + const G4VPhysicalVolume* pRep ) override ; - void DescribeYourselfTo ( G4VGraphicsScene& scene ) const ; - G4Polyhedron* CreatePolyhedron () const ; + void DescribeYourselfTo ( G4VGraphicsScene& scene ) const override ; + G4Polyhedron* CreatePolyhedron () const override ; - virtual G4double GetCubicVolume() final; + G4double GetCubicVolume() final; private: diff --git a/source/geometry/solids/Boolean/include/G4VBooleanProcessor.hh b/source/geometry/solids/Boolean/include/G4VBooleanProcessor.hh new file mode 100644 index 00000000000..2c83b58da4c --- /dev/null +++ b/source/geometry/solids/Boolean/include/G4VBooleanProcessor.hh @@ -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. * +// ******************************************************************** +// +// G4VBooleanProcessor +// +// Class description: +// +// Virtual base class for Boolean solid processing. + +// 20.03.2023 Stewart Boogert - created +// -------------------------------------------------------------------- +#ifndef G4VBOOLEANPROCESSOR_HH +#define G4VBOOLEANPROCESSOR_HH + +class G4Polyhedron; +class G4PolyhedronArbitrary; + +class G4VBooleanProcessor +{ + public: + + G4VBooleanProcessor() = default; + virtual ~G4VBooleanProcessor() = default; + + virtual G4PolyhedronArbitrary* Intersection(G4Polyhedron* /*p1*/, + G4Polyhedron* /*p2*/) + { return nullptr; } + virtual G4PolyhedronArbitrary* Union(G4Polyhedron* /*p1*/, + G4Polyhedron* /*p2*/) + { return nullptr; } + virtual G4PolyhedronArbitrary* Subtraction(G4Polyhedron* /*p1*/, + G4Polyhedron* /*p2*/) + { return nullptr; } +}; + +#endif diff --git a/source/geometry/solids/Boolean/sources.cmake b/source/geometry/solids/Boolean/sources.cmake index e40dd24a4f0..7cfa6ed8ad7 100644 --- a/source/geometry/solids/Boolean/sources.cmake +++ b/source/geometry/solids/Boolean/sources.cmake @@ -11,6 +11,7 @@ geant4_add_module(G4geomBoolean G4ScaledSolid.hh G4SubtractionSolid.hh G4UnionSolid.hh + G4VBooleanProcessor.hh SOURCES G4BooleanSolid.cc G4DisplacedSolid.cc diff --git a/source/geometry/solids/Boolean/src/G4BooleanSolid.cc b/source/geometry/solids/Boolean/src/G4BooleanSolid.cc index 39ce4ae9e5d..3d1411df7aa 100644 --- a/source/geometry/solids/Boolean/src/G4BooleanSolid.cc +++ b/source/geometry/solids/Boolean/src/G4BooleanSolid.cc @@ -45,6 +45,8 @@ namespace G4RecursiveMutex polyhedronMutex = G4MUTEX_INITIALIZER; } +G4VBooleanProcessor* G4BooleanSolid::fExternalBoolProcessor = nullptr; + ////////////////////////////////////////////////////////////////// // // Constructor @@ -116,8 +118,7 @@ G4BooleanSolid::G4BooleanSolid(const G4BooleanSolid& rhs) : G4VSolid (rhs), fPtrSolidA(rhs.fPtrSolidA), fPtrSolidB(rhs.fPtrSolidB), fCubicVolume(rhs.fCubicVolume), fStatistics(rhs.fStatistics), fCubVolEpsilon(rhs.fCubVolEpsilon), fAreaAccuracy(rhs.fAreaAccuracy), - fSurfaceArea(rhs.fSurfaceArea), fRebuildPolyhedron(false), - fpPolyhedron(nullptr), createdDisplacedSolid(rhs.createdDisplacedSolid) + fSurfaceArea(rhs.fSurfaceArea), createdDisplacedSolid(rhs.createdDisplacedSolid) { fPrimitives.resize(0); fPrimitivesSurfaceArea = 0.; } @@ -200,7 +201,7 @@ G4VSolid* G4BooleanSolid::GetConstituentSolid(G4int no) G4GeometryType G4BooleanSolid::GetEntityType() const { - return G4String("G4BooleanSolid"); + return {"G4BooleanSolid"}; } ////////////////////////////////////////////////////////////////////////// @@ -280,7 +281,7 @@ void G4BooleanSolid::GetListOfPrimitives( } else { - primitives.push_back(std::pair(solid,transform)); + primitives.emplace_back(solid,transform); } } } @@ -423,3 +424,22 @@ G4double G4BooleanSolid::GetCubicVolume() } return fCubicVolume; } + +////////////////////////////////////////////////////////////////////////// +// +// Set external Boolean processor. + +void +G4BooleanSolid::SetExternalBooleanProcessor(G4VBooleanProcessor* extProcessor) +{ + fExternalBoolProcessor = extProcessor; +} + +////////////////////////////////////////////////////////////////////////// +// +// Get external Boolean processor. + +G4VBooleanProcessor* G4BooleanSolid::GetExternalBooleanProcessor() +{ + return fExternalBoolProcessor; +} diff --git a/source/geometry/solids/Boolean/src/G4DisplacedSolid.cc b/source/geometry/solids/Boolean/src/G4DisplacedSolid.cc index 21e5ac750e9..ec983fd6e3e 100644 --- a/source/geometry/solids/Boolean/src/G4DisplacedSolid.cc +++ b/source/geometry/solids/Boolean/src/G4DisplacedSolid.cc @@ -105,7 +105,7 @@ G4DisplacedSolid::G4DisplacedSolid( const G4String& pName, { fPtrSolid = ((G4DisplacedSolid*)pSolid)->GetConstituentMovedSolid(); G4AffineTransform t1 = ((G4DisplacedSolid*)pSolid)->GetDirectTransform(); - G4AffineTransform t2 = G4AffineTransform(directTransform); + auto t2 = G4AffineTransform(directTransform); fDirectTransform = new G4AffineTransform(t1*t2); } else @@ -471,7 +471,7 @@ G4ThreeVector G4DisplacedSolid::GetPointOnSurface() const G4GeometryType G4DisplacedSolid::GetEntityType() const { - return G4String("G4DisplacedSolid"); + return {"G4DisplacedSolid"}; } ////////////////////////////////////////////////////////////////////////// diff --git a/source/geometry/solids/Boolean/src/G4IntersectionSolid.cc b/source/geometry/solids/Boolean/src/G4IntersectionSolid.cc index 38b454c2161..0db11ce7d1b 100644 --- a/source/geometry/solids/Boolean/src/G4IntersectionSolid.cc +++ b/source/geometry/solids/Boolean/src/G4IntersectionSolid.cc @@ -38,9 +38,10 @@ #include "G4VGraphicsScene.hh" #include "G4Polyhedron.hh" +#include "G4PolyhedronArbitrary.hh" #include "HepPolyhedronProcessor.h" -///////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Transfer all data members to G4BooleanSolid which is responsible // for them. pName will be in turn sent to G4VSolid @@ -53,7 +54,7 @@ G4IntersectionSolid::G4IntersectionSolid( const G4String& pName, { } -/////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // G4IntersectionSolid::G4IntersectionSolid( const G4String& pName, @@ -65,7 +66,7 @@ G4IntersectionSolid::G4IntersectionSolid( const G4String& pName, { } -////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // @@ -77,7 +78,7 @@ G4IntersectionSolid::G4IntersectionSolid( const G4String& pName, { } -////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Fake default constructor - sets only member data and allocates memory // for usage restricted to object persistency. @@ -87,24 +88,19 @@ G4IntersectionSolid::G4IntersectionSolid( __void__& a ) { } -/////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // -G4IntersectionSolid::~G4IntersectionSolid() -{ -} +G4IntersectionSolid::~G4IntersectionSolid() = default; -/////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Copy constructor -G4IntersectionSolid::G4IntersectionSolid(const G4IntersectionSolid& rhs) - : G4BooleanSolid (rhs) -{ -} +G4IntersectionSolid::G4IntersectionSolid(const G4IntersectionSolid&) = default; -/////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Assignment operator @@ -190,7 +186,7 @@ G4IntersectionSolid::CalculateExtent(const EAxis pAxis, return out; // It exists in this slice only if both exist in it. } -///////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Touching ? Empty intersection ? @@ -206,7 +202,7 @@ EInside G4IntersectionSolid::Inside(const G4ThreeVector& p) const return kSurface; // surface A & B } -////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // G4ThreeVector @@ -267,7 +263,7 @@ G4IntersectionSolid::SurfaceNormal( const G4ThreeVector& p ) const return normal; } -///////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // The same algorithm as in DistanceToIn(p) @@ -373,7 +369,7 @@ G4IntersectionSolid::DistanceToIn( const G4ThreeVector& p, return dist ; } -//////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Approximate nearest distance from the point p to the intersection of // two solids @@ -417,7 +413,7 @@ G4IntersectionSolid::DistanceToIn( const G4ThreeVector& p) const return dist ; } -////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // The same algorithm as DistanceToOut(p) @@ -425,8 +421,8 @@ G4double G4IntersectionSolid::DistanceToOut( const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm, - G4bool *validNorm, - G4ThreeVector *n ) const + G4bool* validNorm, + G4ThreeVector* n ) const { G4bool validNormA, validNormB; G4ThreeVector nA, nB; @@ -476,7 +472,7 @@ G4IntersectionSolid::DistanceToOut( const G4ThreeVector& p, return dist ; } -////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Inverted algorithm of DistanceToIn(p) @@ -502,24 +498,24 @@ G4IntersectionSolid::DistanceToOut( const G4ThreeVector& p ) const } -////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // ComputeDimensions void G4IntersectionSolid::ComputeDimensions( G4VPVParameterisation*, - const G4int, + const G4int, const G4VPhysicalVolume* ) { } -///////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // GetEntityType G4GeometryType G4IntersectionSolid::GetEntityType() const { - return G4String("G4IntersectionSolid"); + return {"G4IntersectionSolid"}; } ////////////////////////////////////////////////////////////////////////// @@ -531,7 +527,7 @@ G4VSolid* G4IntersectionSolid::Clone() const return new G4IntersectionSolid(*this); } -///////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // DescribeYourselfTo @@ -541,18 +537,33 @@ G4IntersectionSolid::DescribeYourselfTo ( G4VGraphicsScene& scene ) const scene.AddSolid (*this); } -//////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // CreatePolyhedron G4Polyhedron* G4IntersectionSolid::CreatePolyhedron () const { - HepPolyhedronProcessor processor; - // Stack components and components of components recursively - // See G4BooleanSolid::StackPolyhedron - G4Polyhedron* top = StackPolyhedron(processor, this); - G4Polyhedron* result = new G4Polyhedron(*top); - if (processor.execute(*result)) { return result; } - else { return nullptr; } + if (fExternalBoolProcessor == nullptr) + { + HepPolyhedronProcessor processor; + // Stack components and components of components recursively + // See G4BooleanSolid::StackPolyhedron + G4Polyhedron* top = StackPolyhedron(processor, this); + auto result = new G4Polyhedron(*top); + if (processor.execute(*result)) + { + return result; + } + else + { + return nullptr; + } + } + else + { + return fExternalBoolProcessor + ->Intersection(GetConstituentSolid(0)->GetPolyhedron(), + GetConstituentSolid(1)->GetPolyhedron()); + } } diff --git a/source/geometry/solids/Boolean/src/G4MultiUnion.cc b/source/geometry/solids/Boolean/src/G4MultiUnion.cc index ee1258b5a63..d4821e31d0f 100644 --- a/source/geometry/solids/Boolean/src/G4MultiUnion.cc +++ b/source/geometry/solids/Boolean/src/G4MultiUnion.cc @@ -41,8 +41,11 @@ #include "G4VGraphicsScene.hh" #include "G4Polyhedron.hh" +#include "G4PolyhedronArbitrary.hh" #include "HepPolyhedronProcessor.h" +#include "G4BooleanSolid.hh" + #include "G4AutoLock.hh" namespace @@ -62,8 +65,7 @@ G4MultiUnion::G4MultiUnion(const G4String& name) //______________________________________________________________________________ G4MultiUnion::~G4MultiUnion() -{ -} += default; //______________________________________________________________________________ void G4MultiUnion::AddNode(G4VSolid& solid, const G4Transform3D& trans) @@ -125,7 +127,7 @@ G4double G4MultiUnion::GetCubicVolume() // Computes the cubic volume of the "G4MultiUnion" structure using // random points - if (!fCubicVolume) + if (fCubicVolume == 0.0) { G4ThreeVector extentMin, extentMax, d, p, point; G4int inside = 0, generated; @@ -218,7 +220,7 @@ G4double G4MultiUnion::DistanceToIn(const G4ThreeVector& aPoint, if (shift == kInfinity) return shift; G4ThreeVector currentPoint = aPoint; - if (shift) currentPoint += direction * shift; + if (shift != 0.0) currentPoint += direction * shift; G4SurfBits exclusion(fVoxels.GetBitsPerSlice()); std::vector candidates, curVoxel(3); @@ -227,7 +229,7 @@ G4double G4MultiUnion::DistanceToIn(const G4ThreeVector& aPoint, do { { - if (fVoxels.GetCandidatesVoxelArray(curVoxel, candidates, &exclusion)) + if (fVoxels.GetCandidatesVoxelArray(curVoxel, candidates, &exclusion) != 0) { G4double distance = DistanceToInCandidates(aPoint, direction, candidates, exclusion); @@ -261,7 +263,7 @@ G4double G4MultiUnion::DistanceToOutNoVoxels(const G4ThreeVector& aPoint, G4double resultDistToOut = 0; G4ThreeVector currentPoint = aPoint; - G4int numNodes = (G4int)fSolids.size(); + auto numNodes = (G4int)fSolids.size(); for (auto i = 0; i < numNodes; ++i) { if (i != ignoredSolid) @@ -274,7 +276,7 @@ G4double G4MultiUnion::DistanceToOutNoVoxels(const G4ThreeVector& aPoint, if (location != EInside::kOutside) { G4double distance = solid.DistanceToOut(localPoint, localDirection, - aNormal); + false, nullptr, aNormal); if (distance < kInfinity) { if (resultDistToOut == kInfinity) resultDistToOut = 0; @@ -328,7 +330,7 @@ G4double G4MultiUnion::DistanceToOutVoxels(const G4ThreeVector& aPoint, std::size_t numNodes = 2*fSolids.size(); std::size_t count=0; - if (fVoxels.GetCandidatesVoxelArray(aPoint, candidates)) + if (fVoxels.GetCandidatesVoxelArray(aPoint, candidates) != 0) { // For normal case for which we presume the point is inside G4ThreeVector localPoint, localDirection, localNormal; @@ -372,7 +374,7 @@ G4double G4MultiUnion::DistanceToOutVoxels(const G4ThreeVector& aPoint, // propagate with solid.DistanceToOut G4double shift = solid.DistanceToOut(localPoint, localDirection, - false, 0, &localNormal); + false, nullptr, &localNormal); if (maxDistance < shift) { maxDistance = shift; @@ -387,7 +389,7 @@ G4double G4MultiUnion::DistanceToOutVoxels(const G4ThreeVector& aPoint, const G4Transform3D& transform = fTransformObjs[maxCandidate]; // convert from local normal - if (aNormal) *aNormal = GetGlobalVector(transform, maxNormal); + if (aNormal != nullptr) *aNormal = GetGlobalVector(transform, maxNormal); distance += maxDistance; currentPoint += maxDistance * direction; @@ -530,7 +532,7 @@ EInside G4MultiUnion::InsideNoVoxels(const G4ThreeVector& aPoint) const EInside location = EInside::kOutside; G4int countSurface = 0; - G4int numNodes = (G4int)fSolids.size(); + auto numNodes = (G4int)fSolids.size(); for (auto i = 0 ; i < numNodes ; ++i) { G4VSolid& solid = *fSolids[i]; @@ -557,7 +559,7 @@ void G4MultiUnion::Extent(EAxis aAxis, G4double& aMin, G4double& aMax) const // Determines the bounding box for the considered instance of "UMultipleUnion" G4ThreeVector min, max; - G4int numNodes = (G4int)fSolids.size(); + auto numNodes = (G4int)fSolids.size(); for (auto i = 0 ; i < numNodes ; ++i) { G4VSolid& solid = *fSolids[i]; @@ -663,7 +665,7 @@ G4ThreeVector G4MultiUnion::SurfaceNormal(const G4ThreeVector& aPoint) const // on a vertice remain to be treated // determine weather we are in voxel area - if (fVoxels.GetCandidatesVoxelArray(aPoint, candidates)) + if (fVoxels.GetCandidatesVoxelArray(aPoint, candidates) != 0) { std::size_t limit = candidates.size(); for (std::size_t i = 0 ; i < limit ; ++i) @@ -814,7 +816,7 @@ G4double G4MultiUnion::DistanceToIn(const G4ThreeVector& point) const //______________________________________________________________________________ G4double G4MultiUnion::GetSurfaceArea() { - if (!fSurfaceArea) + if (fSurfaceArea == 0.0) { fSurfaceArea = EstimateSurfaceArea(1000000, 0.001); } @@ -971,26 +973,56 @@ G4MultiUnion::DescribeYourselfTo ( G4VGraphicsScene& scene ) const //______________________________________________________________________________ G4Polyhedron* G4MultiUnion::CreatePolyhedron() const { - HepPolyhedronProcessor processor; - HepPolyhedronProcessor::Operation operation = HepPolyhedronProcessor::UNION; + if (G4BooleanSolid::GetExternalBooleanProcessor() == nullptr) + { + HepPolyhedronProcessor processor; + HepPolyhedronProcessor::Operation operation = HepPolyhedronProcessor::UNION; - G4VSolid* solidA = GetSolid(0); - const G4Transform3D transform0=GetTransformation(0); - G4DisplacedSolid dispSolidA("placedA",solidA,transform0); + G4VSolid* solidA = GetSolid(0); + const G4Transform3D transform0 = GetTransformation(0); + G4DisplacedSolid dispSolidA("placedA", solidA, transform0); - G4Polyhedron* top = new G4Polyhedron(*dispSolidA.GetPolyhedron()); - - for(G4int i=1; i(solidA->GetPolyhedron()); + + const G4Transform3D transform0 = GetTransformation(0); + G4DisplacedSolid dispSolidA("placedA", solidA, transform0); + + // dispSolidA.GetPolyhedron() + for (G4int i = 1; i < GetNumberOfSolids(); ++i) + { + G4VSolid* solidB = GetSolid(i); + const G4Transform3D transform = GetTransformation(i); + G4DisplacedSolid dispSolidB("placedB", solidB, transform); + solidAPolyhedron = G4BooleanSolid::GetExternalBooleanProcessor() + ->Union(solidAPolyhedron, dispSolidB.GetPolyhedron()); + } + + return solidAPolyhedron; } - - if (processor.execute(*top)) { return top; } - else { return 0; } } //______________________________________________________________________________ @@ -1000,12 +1032,12 @@ G4Polyhedron* G4MultiUnion::GetPolyhedron() const fRebuildPolyhedron || fpPolyhedron->GetNumberOfRotationStepsAtTimeOfCreation() != fpPolyhedron->GetNumberOfRotationSteps()) - { - G4AutoLock l(&polyhedronMutex); - delete fpPolyhedron; - fpPolyhedron = CreatePolyhedron(); - fRebuildPolyhedron = false; - l.unlock(); - } + { + G4AutoLock l(&polyhedronMutex); + delete fpPolyhedron; + fpPolyhedron = CreatePolyhedron(); + fRebuildPolyhedron = false; + l.unlock(); + } return fpPolyhedron; } diff --git a/source/geometry/solids/Boolean/src/G4ScaledSolid.cc b/source/geometry/solids/Boolean/src/G4ScaledSolid.cc index 8f069431842..1aa11d8c44d 100644 --- a/source/geometry/solids/Boolean/src/G4ScaledSolid.cc +++ b/source/geometry/solids/Boolean/src/G4ScaledSolid.cc @@ -322,7 +322,7 @@ G4ThreeVector G4ScaledSolid::GetPointOnSurface() const // G4GeometryType G4ScaledSolid::GetEntityType() const { - return G4String("G4ScaledSolid"); + return {"G4ScaledSolid"}; } ////////////////////////////////////////////////////////////////////////// @@ -340,9 +340,9 @@ G4VSolid* G4ScaledSolid::Clone() const // G4Scale3D G4ScaledSolid::GetScaleTransform() const { - return G4Scale3D(fScale->GetScale().x(), - fScale->GetScale().y(), - fScale->GetScale().z()); + return { fScale->GetScale().x(), + fScale->GetScale().y(), + fScale->GetScale().z() }; } ////////////////////////////////////////////////////////////////////////// @@ -351,7 +351,7 @@ G4Scale3D G4ScaledSolid::GetScaleTransform() const // void G4ScaledSolid::SetScaleTransform(const G4Scale3D& scale) { - if (fScale != nullptr) { delete fScale; } + delete fScale; fScale = new G4ScaleTransform(scale); fRebuildPolyhedron = true; } diff --git a/source/geometry/solids/Boolean/src/G4SubtractionSolid.cc b/source/geometry/solids/Boolean/src/G4SubtractionSolid.cc index 6f76cde5838..cbb85ecc243 100644 --- a/source/geometry/solids/Boolean/src/G4SubtractionSolid.cc +++ b/source/geometry/solids/Boolean/src/G4SubtractionSolid.cc @@ -39,13 +39,14 @@ #include "G4VGraphicsScene.hh" #include "G4Polyhedron.hh" +#include "G4PolyhedronArbitrary.hh" #include "HepPolyhedronProcessor.h" #include "G4IntersectionSolid.hh" #include -/////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Transfer all data members to G4BooleanSolid which is responsible // for them. pName will be in turn sent to G4VSolid @@ -57,7 +58,7 @@ G4SubtractionSolid::G4SubtractionSolid( const G4String& pName, { } -/////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Constructor @@ -70,7 +71,7 @@ G4SubtractionSolid::G4SubtractionSolid( const G4String& pName, { } -/////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Constructor @@ -82,7 +83,7 @@ G4SubtractionSolid::G4SubtractionSolid( const G4String& pName, { } -////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Fake default constructor - sets only member data and allocates memory // for usage restricted to object persistency. @@ -92,24 +93,19 @@ G4SubtractionSolid::G4SubtractionSolid( __void__& a ) { } -/////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Destructor -G4SubtractionSolid::~G4SubtractionSolid() -{ -} +G4SubtractionSolid::~G4SubtractionSolid() = default; -/////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Copy constructor -G4SubtractionSolid::G4SubtractionSolid(const G4SubtractionSolid& rhs) - : G4BooleanSolid (rhs) -{ -} +G4SubtractionSolid::G4SubtractionSolid(const G4SubtractionSolid&) = default; -/////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Assignment operator @@ -173,7 +169,7 @@ G4SubtractionSolid::CalculateExtent( const EAxis pAxis, pTransform, pMin, pMax ); } -///////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Touching ? Empty subtraction ? @@ -196,7 +192,7 @@ EInside G4SubtractionSolid::Inside( const G4ThreeVector& p ) const fPtrSolidB->SurfaceNormal(p)).mag2() > rtol) ? kSurface : kOutside; } -////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // SurfaceNormal @@ -259,13 +255,13 @@ G4SubtractionSolid::SurfaceNormal( const G4ThreeVector& p ) const return normal; } -///////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // The same algorithm as in DistanceToIn(p) G4double -G4SubtractionSolid::DistanceToIn( const G4ThreeVector& p, - const G4ThreeVector& v ) const +G4SubtractionSolid::DistanceToIn( const G4ThreeVector& p, + const G4ThreeVector& v ) const { G4double dist = 0.0, dist2 = 0.0, disTmp = 0.0; @@ -397,7 +393,7 @@ G4SubtractionSolid::DistanceToIn( const G4ThreeVector& p, return dist ; } -//////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Approximate nearest distance from the point p to the intersection of // two solids. It is usually underestimated from the point of view of @@ -435,16 +431,16 @@ G4SubtractionSolid::DistanceToIn( const G4ThreeVector& p ) const return dist; } -////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // The same algorithm as DistanceToOut(p) G4double G4SubtractionSolid::DistanceToOut( const G4ThreeVector& p, - const G4ThreeVector& v, - const G4bool calcNorm, - G4bool *validNorm, - G4ThreeVector *n ) const + const G4ThreeVector& v, + const G4bool calcNorm, + G4bool* validNorm, + G4ThreeVector* n ) const { #ifdef G4BOOLDEBUG if( Inside(p) == kOutside ) @@ -489,7 +485,7 @@ G4SubtractionSolid::DistanceToOut( const G4ThreeVector& p, return distout; } -////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Inverted algorithm of DistanceToIn(p) @@ -519,13 +515,13 @@ G4SubtractionSolid::DistanceToOut( const G4ThreeVector& p ) const return dist; } -////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // G4GeometryType G4SubtractionSolid::GetEntityType() const { - return G4String("G4SubtractionSolid"); + return {"G4SubtractionSolid"}; } ////////////////////////////////////////////////////////////////////////// @@ -537,7 +533,7 @@ G4VSolid* G4SubtractionSolid::Clone() const return new G4SubtractionSolid(*this); } -////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // ComputeDimensions @@ -548,7 +544,7 @@ G4SubtractionSolid::ComputeDimensions( G4VPVParameterisation*, { } -///////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // DescribeYourselfTo @@ -558,51 +554,66 @@ G4SubtractionSolid::DescribeYourselfTo ( G4VGraphicsScene& scene ) const scene.AddSolid (*this); } -//////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // CreatePolyhedron -G4Polyhedron* -G4SubtractionSolid::CreatePolyhedron () const +G4Polyhedron* G4SubtractionSolid::CreatePolyhedron () const { - HepPolyhedronProcessor processor; - // Stack components and components of components recursively - // See G4BooleanSolid::StackPolyhedron - G4Polyhedron* top = StackPolyhedron(processor, this); - G4Polyhedron* result = new G4Polyhedron(*top); - if (processor.execute(*result)) { return result; } - else { return nullptr; } + if (fExternalBoolProcessor == nullptr) + { + HepPolyhedronProcessor processor; + // Stack components and components of components recursively + // See G4BooleanSolid::StackPolyhedron + G4Polyhedron* top = StackPolyhedron(processor, this); + auto result = new G4Polyhedron(*top); + if (processor.execute(*result)) + { + return result; + } + else + { + return nullptr; + } + } + else + { + return fExternalBoolProcessor + ->Subtraction(GetConstituentSolid(0)->GetPolyhedron(), + GetConstituentSolid(1)->GetPolyhedron()); + } } -//////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // GetCubicVolume // G4double G4SubtractionSolid::GetCubicVolume() { - if( fCubicVolume != -1.0 ) { - return fCubicVolume; - } - - G4double cubVolumeA = fPtrSolidA->GetCubicVolume(); - - G4ThreeVector bminA, bmaxA, bminB, bmaxB; - fPtrSolidA->BoundingLimits(bminA, bmaxA); - fPtrSolidB->BoundingLimits(bminB, bmaxB); - G4double intersection = 0.; - G4bool canIntersect = - bminA.x() < bmaxB.x() && bminA.y() < bmaxB.y() && bminA.z() < bmaxB.z() && - bminB.x() < bmaxA.x() && bminB.y() < bmaxA.y() && bminB.z() < bmaxA.z(); - if ( canIntersect ) - { - G4IntersectionSolid intersectVol( "Temporary-Intersection-for-Union", - fPtrSolidA, fPtrSolidB ); - intersection = intersectVol.GetCubicVolume(); - } - - fCubicVolume = cubVolumeA - intersection; - if (fCubicVolume < 0.01*cubVolumeA) fCubicVolume = G4VSolid::GetCubicVolume(); - - return fCubicVolume; + if( fCubicVolume != -1.0 ) + { + return fCubicVolume; + } + + G4double cubVolumeA = fPtrSolidA->GetCubicVolume(); + + G4ThreeVector bminA, bmaxA, bminB, bmaxB; + fPtrSolidA->BoundingLimits(bminA, bmaxA); + fPtrSolidB->BoundingLimits(bminB, bmaxB); + G4double intersection = 0.; + G4bool canIntersect = + bminA.x() < bmaxB.x() && bminA.y() < bmaxB.y() && bminA.z() < bmaxB.z() && + bminB.x() < bmaxA.x() && bminB.y() < bmaxA.y() && bminB.z() < bmaxA.z(); + if ( canIntersect ) + { + G4IntersectionSolid intersectVol( "Temporary-Intersection-for-Union", + fPtrSolidA, fPtrSolidB ); + intersection = intersectVol.GetCubicVolume(); + } + + fCubicVolume = cubVolumeA - intersection; + if (fCubicVolume < 0.01*cubVolumeA) fCubicVolume = G4VSolid::GetCubicVolume(); + + return fCubicVolume; } diff --git a/source/geometry/solids/Boolean/src/G4UnionSolid.cc b/source/geometry/solids/Boolean/src/G4UnionSolid.cc index 30b389d1e36..dfa124452af 100644 --- a/source/geometry/solids/Boolean/src/G4UnionSolid.cc +++ b/source/geometry/solids/Boolean/src/G4UnionSolid.cc @@ -41,11 +41,12 @@ #include "G4VGraphicsScene.hh" #include "G4Polyhedron.hh" +#include "G4PolyhedronArbitrary.hh" #include "HepPolyhedronProcessor.h" #include "G4IntersectionSolid.hh" -/////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Transfer all data members to G4BooleanSolid which is responsible // for them. pName will be in turn sent to G4VSolid @@ -58,7 +59,7 @@ G4UnionSolid:: G4UnionSolid( const G4String& pName, Init(); } -///////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Constructor @@ -73,7 +74,7 @@ G4UnionSolid::G4UnionSolid( const G4String& pName, Init(); } -/////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Constructor @@ -86,7 +87,7 @@ G4UnionSolid::G4UnionSolid( const G4String& pName, Init(); } -////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Fake default constructor - sets only member data and allocates memory // for usage restricted to object persistency. @@ -96,15 +97,14 @@ G4UnionSolid::G4UnionSolid( __void__& a ) { } -/////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Destructor G4UnionSolid::~G4UnionSolid() -{ -} += default; -/////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Copy constructor @@ -116,7 +116,7 @@ G4UnionSolid::G4UnionSolid(const G4UnionSolid& rhs) halfCarTolerance=0.5*kCarTolerance; } -/////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Assignment operator @@ -137,7 +137,7 @@ G4UnionSolid& G4UnionSolid::operator = (const G4UnionSolid& rhs) return *this; } -/////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Initialisation @@ -218,7 +218,7 @@ G4UnionSolid::CalculateExtent( const EAxis pAxis, return out ; // It exists in this slice if either one does. } -///////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Important comment: When solids A and B touch together along flat // surface the surface points will be considered as kSurface, while points @@ -245,7 +245,7 @@ EInside G4UnionSolid::Inside( const G4ThreeVector& p ) const fPtrSolidB->SurfaceNormal(p)).mag2() < rtol) ? kInside : kSurface; } -////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Get surface normal @@ -285,7 +285,7 @@ G4UnionSolid::SurfaceNormal( const G4ThreeVector& p ) const return fPtrSolidA->SurfaceNormal(p); } -///////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // The same algorithm as in DistanceToIn(p) @@ -313,13 +313,13 @@ G4UnionSolid::DistanceToIn( const G4ThreeVector& p, fPtrSolidB->DistanceToIn(p,v) ) ; } -//////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Approximate nearest distance from the point p to the union of // two solids G4double -G4UnionSolid::DistanceToIn( const G4ThreeVector& p) const +G4UnionSolid::DistanceToIn( const G4ThreeVector& p ) const { #ifdef G4BOOLDEBUG if( Inside(p) == kInside ) @@ -341,16 +341,16 @@ G4UnionSolid::DistanceToIn( const G4ThreeVector& p) const return safety ; } -////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // The same algorithm as DistanceToOut(p) G4double G4UnionSolid::DistanceToOut( const G4ThreeVector& p, - const G4ThreeVector& v, - const G4bool calcNorm, - G4bool *validNorm, - G4ThreeVector *n ) const + const G4ThreeVector& v, + const G4bool calcNorm, + G4bool* validNorm, + G4ThreeVector* n ) const { G4double dist = 0.0, disTmp = 0.0 ; G4ThreeVector normTmp; @@ -428,7 +428,7 @@ G4UnionSolid::DistanceToOut( const G4ThreeVector& p, return dist ; } -////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // Inverted algorithm of DistanceToIn(p) @@ -479,13 +479,13 @@ G4UnionSolid::DistanceToOut( const G4ThreeVector& p ) const return distout; } -////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // GetEntityType G4GeometryType G4UnionSolid::GetEntityType() const { - return G4String("G4UnionSolid"); + return {"G4UnionSolid"}; } ////////////////////////////////////////////////////////////////////////// @@ -497,7 +497,7 @@ G4VSolid* G4UnionSolid::Clone() const return new G4UnionSolid(*this); } -////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // ComputeDimensions @@ -508,7 +508,7 @@ G4UnionSolid::ComputeDimensions( G4VPVParameterisation*, { } -///////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // DescribeYourselfTo @@ -518,51 +518,66 @@ G4UnionSolid::DescribeYourselfTo ( G4VGraphicsScene& scene ) const scene.AddSolid (*this); } -//////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // CreatePolyhedron G4Polyhedron* -G4UnionSolid::CreatePolyhedron () const +G4UnionSolid::CreatePolyhedron () const { - HepPolyhedronProcessor processor; - // Stack components and components of components recursively - // See G4BooleanSolid::StackPolyhedron - G4Polyhedron* top = StackPolyhedron(processor, this); - G4Polyhedron* result = new G4Polyhedron(*top); - if (processor.execute(*result)) { return result; } - else { return nullptr; } + if (fExternalBoolProcessor == nullptr) + { + HepPolyhedronProcessor processor; + // Stack components and components of components recursively + // See G4BooleanSolid::StackPolyhedron + G4Polyhedron* top = StackPolyhedron(processor, this); + auto result = new G4Polyhedron(*top); + if (processor.execute(*result)) + { + return result; + } + else + { + return nullptr; + } + } + else + { + return fExternalBoolProcessor + ->Union(GetConstituentSolid(0)->GetPolyhedron(), + GetConstituentSolid(1)->GetPolyhedron()); + } } - -//////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// // // GetCubicVolume G4double G4UnionSolid::GetCubicVolume() { - if( fCubicVolume != -1.0 ) { - return fCubicVolume; - } - G4double cubVolumeA = fPtrSolidA->GetCubicVolume(); - G4double cubVolumeB = fPtrSolidB->GetCubicVolume(); - - G4ThreeVector bminA, bmaxA, bminB, bmaxB; - fPtrSolidA->BoundingLimits(bminA, bmaxA); - fPtrSolidB->BoundingLimits(bminB, bmaxB); - - G4double intersection = 0.; - G4bool canIntersect = - bminA.x() < bmaxB.x() && bminA.y() < bmaxB.y() && bminA.z() < bmaxB.z() && - bminB.x() < bmaxA.x() && bminB.y() < bmaxA.y() && bminB.z() < bmaxA.z(); - if ( canIntersect ) - { - G4IntersectionSolid intersectVol( "Temporary-Intersection-for-Union", - fPtrSolidA, fPtrSolidB ); - intersection = intersectVol.GetCubicVolume(); - } - - fCubicVolume = cubVolumeA + cubVolumeB - intersection; - - return fCubicVolume; + if( fCubicVolume != -1.0 ) + { + return fCubicVolume; + } + G4double cubVolumeA = fPtrSolidA->GetCubicVolume(); + G4double cubVolumeB = fPtrSolidB->GetCubicVolume(); + + G4ThreeVector bminA, bmaxA, bminB, bmaxB; + fPtrSolidA->BoundingLimits(bminA, bmaxA); + fPtrSolidB->BoundingLimits(bminB, bmaxB); + + G4double intersection = 0.; + G4bool canIntersect = + bminA.x() < bmaxB.x() && bminA.y() < bmaxB.y() && bminA.z() < bmaxB.z() && + bminB.x() < bmaxA.x() && bminB.y() < bmaxA.y() && bminB.z() < bmaxA.z(); + if ( canIntersect ) + { + G4IntersectionSolid intersectVol( "Temporary-Intersection-for-Union", + fPtrSolidA, fPtrSolidB ); + intersection = intersectVol.GetCubicVolume(); + } + + fCubicVolume = cubVolumeA + cubVolumeB - intersection; + + return fCubicVolume; } diff --git a/source/geometry/solids/CSG/GNUmakefile b/source/geometry/solids/CSG/GNUmakefile deleted file mode 100644 index 84cdc571dcd..00000000000 --- a/source/geometry/solids/CSG/GNUmakefile +++ /dev/null @@ -1,30 +0,0 @@ -# ---------------------------------------------------------------- -# GNUmakefile for geometry/CSG library. Gabriele Cosmo, 16/11/96. -# ---------------------------------------------------------------- - -name := G4csg - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4GEOM_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/graphics_reps/include \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include - -ifdef G4CSGDEBUG - CPPFLAGS += -DG4CSGDEBUG -endif -ifdef G4BBOX_EXTENT - CPPFLAGS += -DG4BBOX_EXTENT -endif - -include $(G4INSTALL)/config/common.gmk diff --git a/source/geometry/solids/CSG/History b/source/geometry/solids/CSG/History index 49893c1a099..82a3ff2d916 100644 --- a/source/geometry/solids/CSG/History +++ b/source/geometry/solids/CSG/History @@ -6,7 +6,10 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-03-23 Jonas Hahnfeld (geom-csg-V11-00-03) +## 2023-05-10 Gabriele Cosmo (geom-csg-V11-01-01) +- Applied clang-tidy fixes (readability, modernization, performance, ...). + +## 2023-03-23 Jonas Hahnfeld (geom-csg-V11-01-00) - G4UTrap: Fixed constructor for Right Angular Wedge with VecGeom ## 2022-11-10 Gabriele Cosmo (geom-csg-V11-00-02) diff --git a/source/geometry/solids/CSG/include/G4Box.hh b/source/geometry/solids/CSG/include/G4Box.hh index f56cd011cc9..402cda7c92b 100644 --- a/source/geometry/solids/CSG/include/G4Box.hh +++ b/source/geometry/solids/CSG/include/G4Box.hh @@ -54,23 +54,23 @@ class G4Box : public G4CSGSolid { - public: // with description + public: G4Box(const G4String& pName, G4double pX, G4double pY, G4double pZ); // Construct a box with name, and half lengths pX,pY,pZ - virtual ~G4Box(); + ~G4Box() override; void ComputeDimensions(G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep); + const G4VPhysicalVolume* pRep) override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; // Accessors and modifiers @@ -84,33 +84,32 @@ class G4Box : public G4CSGSolid // Methods for solid - inline G4double GetCubicVolume(); - inline G4double GetSurfaceArea(); + inline G4double GetCubicVolume() override; + inline G4double GetSurfaceArea() override; - EInside Inside(const G4ThreeVector& p) const; - G4ThreeVector SurfaceNormal( const G4ThreeVector& p) const; - G4double DistanceToIn(const G4ThreeVector& p, const G4ThreeVector& v) const; - G4double DistanceToIn(const G4ThreeVector& p) const; + EInside Inside(const G4ThreeVector& p) const override; + G4ThreeVector SurfaceNormal( const G4ThreeVector& p) const override; + G4double DistanceToIn(const G4ThreeVector& p, + const G4ThreeVector& v) const override; + G4double DistanceToIn(const G4ThreeVector& p) const override; G4double DistanceToOut(const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm = false, G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr) const; - G4double DistanceToOut(const G4ThreeVector& p) const; + G4ThreeVector* n = nullptr) const override; + G4double DistanceToOut(const G4ThreeVector& p) const override; - G4GeometryType GetEntityType() const; - G4ThreeVector GetPointOnSurface() const; + G4GeometryType GetEntityType() const override; + G4ThreeVector GetPointOnSurface() const override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; - std::ostream& StreamInfo(std::ostream& os) const; + std::ostream& StreamInfo(std::ostream& os) const override; // Utilities for visualization - void DescribeYourselfTo (G4VGraphicsScene& scene) const; - G4VisExtent GetExtent () const; - G4Polyhedron* CreatePolyhedron () const; - - public: // without description + void DescribeYourselfTo (G4VGraphicsScene& scene) const override; + G4VisExtent GetExtent () const override; + G4Polyhedron* CreatePolyhedron () const override; G4Box(__void__&); // Fake default constructor for usage restricted to direct object diff --git a/source/geometry/solids/CSG/include/G4CSGSolid.hh b/source/geometry/solids/CSG/include/G4CSGSolid.hh index fde0b09f9d4..5cd6533c30d 100644 --- a/source/geometry/solids/CSG/include/G4CSGSolid.hh +++ b/source/geometry/solids/CSG/include/G4CSGSolid.hh @@ -40,16 +40,14 @@ class G4CSGSolid : public G4VSolid { - public: // with description + public: G4CSGSolid(const G4String& pName); virtual ~G4CSGSolid(); - virtual std::ostream& StreamInfo(std::ostream& os) const; + std::ostream& StreamInfo(std::ostream& os) const override; - virtual G4Polyhedron* GetPolyhedron () const; - - public: // without description + G4Polyhedron* GetPolyhedron () const override; G4CSGSolid(__void__&); // Fake default constructor for usage restricted to direct object diff --git a/source/geometry/solids/CSG/include/G4Cons.hh b/source/geometry/solids/CSG/include/G4Cons.hh index 27cd1d0a6d8..536c3f9638c 100644 --- a/source/geometry/solids/CSG/include/G4Cons.hh +++ b/source/geometry/solids/CSG/include/G4Cons.hh @@ -76,7 +76,7 @@ class G4Cons : public G4CSGSolid { - public: // with description + public: G4Cons(const G4String& pName, G4double pRmin1, G4double pRmax1, @@ -86,7 +86,7 @@ class G4Cons : public G4CSGSolid // // Constructs a cone with the given name and dimensions - ~G4Cons() ; + ~G4Cons() override ; // // Destructor @@ -116,48 +116,46 @@ class G4Cons : public G4CSGSolid // Other methods for solid - inline G4double GetCubicVolume(); - inline G4double GetSurfaceArea(); + inline G4double GetCubicVolume() override; + inline G4double GetSurfaceArea() override; - void ComputeDimensions( G4VPVParameterisation* p, - const G4int n, - const G4VPhysicalVolume* pRep ); + void ComputeDimensions( G4VPVParameterisation* p, + const G4int n, + const G4VPhysicalVolume* pRep) override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; - G4bool CalculateExtent( const EAxis pAxis, - const G4VoxelLimits& pVoxelLimit, - const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax ) const; + G4bool CalculateExtent(const EAxis pAxis, + const G4VoxelLimits& pVoxelLimit, + const G4AffineTransform& pTransform, + G4double& pMin, G4double& pMax) const override; - EInside Inside( const G4ThreeVector& p ) const; + EInside Inside( const G4ThreeVector& p ) const override; - G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const; + G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const override; G4double DistanceToIn (const G4ThreeVector& p, - const G4ThreeVector& v) const; - G4double DistanceToIn (const G4ThreeVector& p) const; + const G4ThreeVector& v) const override; + G4double DistanceToIn (const G4ThreeVector& p) const override; G4double DistanceToOut(const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm = false, G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr) const; - G4double DistanceToOut(const G4ThreeVector& p) const; + G4ThreeVector* n = nullptr) const override; + G4double DistanceToOut(const G4ThreeVector& p) const override; - G4GeometryType GetEntityType() const; + G4GeometryType GetEntityType() const override; - G4ThreeVector GetPointOnSurface() const; + G4ThreeVector GetPointOnSurface() const override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; - std::ostream& StreamInfo(std::ostream& os) const; + std::ostream& StreamInfo(std::ostream& os) const override; // Visualisation functions - void DescribeYourselfTo( G4VGraphicsScene& scene ) const; - G4Polyhedron* CreatePolyhedron() const; - - public: // without description + void DescribeYourselfTo( G4VGraphicsScene& scene ) const override; + G4Polyhedron* CreatePolyhedron() const override; G4Cons(__void__&); // diff --git a/source/geometry/solids/CSG/include/G4Cons.icc b/source/geometry/solids/CSG/include/G4Cons.icc index 0026c17afc8..3f7af51d6fe 100644 --- a/source/geometry/solids/CSG/include/G4Cons.icc +++ b/source/geometry/solids/CSG/include/G4Cons.icc @@ -166,7 +166,7 @@ inline void G4Cons::CheckDPhiAngle(G4double dPhi) inline void G4Cons::CheckPhiAngles(G4double sPhi, G4double dPhi) { CheckDPhiAngle(dPhi); - if ( (fDPhi= CLHEP::pi; fFullSphere = fFullPhiSphere && fFullThetaSphere; InitializeThetaTrigonometry(); @@ -240,7 +239,7 @@ inline void G4Sphere::CheckPhiAngles(G4double sPhi, G4double dPhi) { CheckDPhiAngle(dPhi); - if (!fFullPhiSphere && sPhi) { CheckSPhiAngle(sPhi); } + if (!fFullPhiSphere && (sPhi != 0.0)) { CheckSPhiAngle(sPhi); } fFullSphere = fFullPhiSphere && fFullThetaSphere; InitializePhiTrigonometry(); @@ -250,7 +249,7 @@ inline void G4Sphere::SetInnerRadius(G4double newRmin) { fRmin= newRmin; - fRminTolerance = (fRmin) ? std::max( kRadTolerance, fEpsilon*fRmin ) : 0; + fRminTolerance = (fRmin) != 0.0 ? std::max( kRadTolerance, fEpsilon*fRmin ) : 0; Initialize(); } diff --git a/source/geometry/solids/CSG/include/G4Torus.hh b/source/geometry/solids/CSG/include/G4Torus.hh index 4286f88a2c6..58d5df3d1bf 100644 --- a/source/geometry/solids/CSG/include/G4Torus.hh +++ b/source/geometry/solids/CSG/include/G4Torus.hh @@ -91,7 +91,7 @@ class G4Torus : public G4CSGSolid { - public: // with description + public: G4Torus(const G4String &pName, G4double pRmin, @@ -100,7 +100,7 @@ class G4Torus : public G4CSGSolid G4double pSPhi, G4double pDPhi); - ~G4Torus(); + ~G4Torus() override; // Accessors @@ -116,41 +116,40 @@ class G4Torus : public G4CSGSolid // Methods of solid - inline G4double GetCubicVolume(); - inline G4double GetSurfaceArea(); + inline G4double GetCubicVolume() override; + inline G4double GetSurfaceArea() override; - EInside Inside(const G4ThreeVector& p) const; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + EInside Inside(const G4ThreeVector& p) const override; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax) const; + G4double& pmin, G4double& pmax) const override; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep); - G4ThreeVector SurfaceNormal( const G4ThreeVector& p) const; - G4double DistanceToIn(const G4ThreeVector& p,const G4ThreeVector& v) const; - G4double DistanceToIn(const G4ThreeVector& p) const; + const G4VPhysicalVolume* pRep) override; + G4ThreeVector SurfaceNormal( const G4ThreeVector& p) const override; + G4double DistanceToIn(const G4ThreeVector& p, + const G4ThreeVector& v) const override; + G4double DistanceToIn(const G4ThreeVector& p) const override; G4double DistanceToOut(const G4ThreeVector& p,const G4ThreeVector& v, const G4bool calcNorm = false, G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr) const; - G4double DistanceToOut(const G4ThreeVector& p) const; + G4ThreeVector* n = nullptr) const override; + G4double DistanceToOut(const G4ThreeVector& p) const override; - G4GeometryType GetEntityType() const; + G4GeometryType GetEntityType() const override; - G4ThreeVector GetPointOnSurface() const; + G4ThreeVector GetPointOnSurface() const override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; - std::ostream& StreamInfo(std::ostream& os) const; + std::ostream& StreamInfo(std::ostream& os) const override; // Visualisation functions - void DescribeYourselfTo (G4VGraphicsScene& scene) const; - G4Polyhedron* CreatePolyhedron () const; - - public: // without description + void DescribeYourselfTo (G4VGraphicsScene& scene) const override; + G4Polyhedron* CreatePolyhedron () const override; void SetAllParameters(G4double pRmin, G4double pRmax, G4double pRtor, G4double pSPhi, G4double pDPhi); diff --git a/source/geometry/solids/CSG/include/G4Trap.hh b/source/geometry/solids/CSG/include/G4Trap.hh index cf1fd2e12aa..332644b9599 100644 --- a/source/geometry/solids/CSG/include/G4Trap.hh +++ b/source/geometry/solids/CSG/include/G4Trap.hh @@ -109,7 +109,7 @@ struct TrapSidePlane class G4Trap : public G4CSGSolid { - public: // with description + public: G4Trap( const G4String& pName, G4double pDz, @@ -152,7 +152,7 @@ class G4Trap : public G4CSGSolid // Constructor for "nominal" G4Trap whose parameters are to be set // by a G4VPVParamaterisation later - virtual ~G4Trap() ; + ~G4Trap() override ; // // Destructor @@ -196,49 +196,48 @@ class G4Trap : public G4CSGSolid // Methods for solid - G4double GetCubicVolume(); - G4double GetSurfaceArea(); + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep ); + const G4VPhysicalVolume* pRep ) override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; - G4bool CalculateExtent( const EAxis pAxis, - const G4VoxelLimits& pVoxelLimit, - const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax ) const; + G4bool CalculateExtent(const EAxis pAxis, + const G4VoxelLimits& pVoxelLimit, + const G4AffineTransform& pTransform, + G4double& pMin, G4double& pMax) const override; - EInside Inside( const G4ThreeVector& p ) const; + EInside Inside( const G4ThreeVector& p ) const override; - G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const; + G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const override; - G4double DistanceToIn(const G4ThreeVector& p, const G4ThreeVector& v) const; + G4double DistanceToIn(const G4ThreeVector& p, + const G4ThreeVector& v) const override; - G4double DistanceToIn( const G4ThreeVector& p ) const; + G4double DistanceToIn( const G4ThreeVector& p ) const override; G4double DistanceToOut(const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm = false, G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr) const; + G4ThreeVector* n = nullptr) const override; - G4double DistanceToOut( const G4ThreeVector& p ) const; + G4double DistanceToOut( const G4ThreeVector& p ) const override; - G4GeometryType GetEntityType() const; + G4GeometryType GetEntityType() const override; - G4ThreeVector GetPointOnSurface() const; + G4ThreeVector GetPointOnSurface() const override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; - std::ostream& StreamInfo( std::ostream& os ) const; + std::ostream& StreamInfo( std::ostream& os ) const override; // Visualisation functions - void DescribeYourselfTo ( G4VGraphicsScene& scene ) const; - G4Polyhedron* CreatePolyhedron () const; - - public: // without description + void DescribeYourselfTo (G4VGraphicsScene& scene) const override; + G4Polyhedron* CreatePolyhedron () const override; G4Trap(__void__&); // Fake default constructor for usage restricted to direct object @@ -249,10 +248,10 @@ class G4Trap : public G4CSGSolid G4Trap& operator=(const G4Trap& rhs); // Copy constructor and assignment operator. - protected: // with description + protected: void MakePlanes(); - void MakePlanes(const G4ThreeVector pt[8]); + void MakePlanes( const G4ThreeVector pt[8] ); G4bool MakePlane( const G4ThreeVector& p1, const G4ThreeVector& p2, const G4ThreeVector& p3, diff --git a/source/geometry/solids/CSG/include/G4Trap.icc b/source/geometry/solids/CSG/include/G4Trap.icc index 51bb00aff51..6b5bded5d98 100644 --- a/source/geometry/solids/CSG/include/G4Trap.icc +++ b/source/geometry/solids/CSG/include/G4Trap.icc @@ -38,9 +38,7 @@ G4ThreeVector G4Trap::GetSymAxis() const G4double cosTheta = 1.0/std::sqrt(1+fTthetaCphi*fTthetaCphi + fTthetaSphi*fTthetaSphi) ; - return G4ThreeVector(fTthetaCphi*cosTheta, - fTthetaSphi*cosTheta, - cosTheta) ; + return { fTthetaCphi*cosTheta, fTthetaSphi*cosTheta, cosTheta } ; } inline diff --git a/source/geometry/solids/CSG/include/G4Trd.hh b/source/geometry/solids/CSG/include/G4Trd.hh index 2694c6c6ccd..3970fd622a6 100644 --- a/source/geometry/solids/CSG/include/G4Trd.hh +++ b/source/geometry/solids/CSG/include/G4Trd.hh @@ -61,7 +61,7 @@ class G4Trd : public G4CSGSolid { - public: // with description + public: G4Trd( const G4String& pName, G4double pdx1, G4double pdx2, @@ -70,7 +70,7 @@ class G4Trd : public G4CSGSolid // // Constructs a trapezoid with name, and half lengths - ~G4Trd(); + ~G4Trd() override; // // Destructor @@ -96,51 +96,49 @@ class G4Trd : public G4CSGSolid // Methods of solid - G4double GetCubicVolume(); - G4double GetSurfaceArea(); + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep ); + const G4VPhysicalVolume* pRep ) override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; - G4bool CalculateExtent( const EAxis pAxis, - const G4VoxelLimits& pVoxelLimit, - const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax ) const; + G4bool CalculateExtent(const EAxis pAxis, + const G4VoxelLimits& pVoxelLimit, + const G4AffineTransform& pTransform, + G4double& pMin, G4double& pMax) const override; - EInside Inside( const G4ThreeVector& p ) const; + EInside Inside( const G4ThreeVector& p ) const override; - G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const; + G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const override; G4double DistanceToIn( const G4ThreeVector& p, - const G4ThreeVector& v ) const; + const G4ThreeVector& v ) const override; - G4double DistanceToIn( const G4ThreeVector& p ) const; + G4double DistanceToIn( const G4ThreeVector& p ) const override; G4double DistanceToOut( const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm = false, G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr ) const; + G4ThreeVector* n = nullptr ) const override; - G4double DistanceToOut( const G4ThreeVector& p ) const; + G4double DistanceToOut( const G4ThreeVector& p ) const override; - G4GeometryType GetEntityType() const; + G4GeometryType GetEntityType() const override; - G4ThreeVector GetPointOnSurface() const; + G4ThreeVector GetPointOnSurface() const override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; - std::ostream& StreamInfo( std::ostream& os ) const; + std::ostream& StreamInfo( std::ostream& os ) const override; // Visualisation functions - void DescribeYourselfTo (G4VGraphicsScene& scene) const; - G4Polyhedron* CreatePolyhedron () const; - - public: // without description + void DescribeYourselfTo (G4VGraphicsScene& scene) const override; + G4Polyhedron* CreatePolyhedron () const override; G4Trd(__void__&); // Fake default constructor for usage restricted to direct object diff --git a/source/geometry/solids/CSG/include/G4Tubs.hh b/source/geometry/solids/CSG/include/G4Tubs.hh index 62a264ec080..c9e5b13bb6b 100644 --- a/source/geometry/solids/CSG/include/G4Tubs.hh +++ b/source/geometry/solids/CSG/include/G4Tubs.hh @@ -73,7 +73,7 @@ class G4Tubs : public G4CSGSolid { - public: // with description + public: G4Tubs( const G4String& pName, G4double pRMin, @@ -84,7 +84,7 @@ class G4Tubs : public G4CSGSolid // // Constructs a tubs with the given name and dimensions - virtual ~G4Tubs(); + ~G4Tubs() override; // // Destructor @@ -110,46 +110,45 @@ class G4Tubs : public G4CSGSolid // Methods for solid - inline G4double GetCubicVolume(); - inline G4double GetSurfaceArea(); + inline G4double GetCubicVolume() override; + inline G4double GetSurfaceArea() override; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep ); + const G4VPhysicalVolume* pRep ) override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; - G4bool CalculateExtent( const EAxis pAxis, - const G4VoxelLimits& pVoxelLimit, - const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax ) const; + G4bool CalculateExtent(const EAxis pAxis, + const G4VoxelLimits& pVoxelLimit, + const G4AffineTransform& pTransform, + G4double& pmin, G4double& pmax) const override; - EInside Inside( const G4ThreeVector& p ) const; + EInside Inside( const G4ThreeVector& p ) const override; - G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const; + G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const override; - G4double DistanceToIn(const G4ThreeVector& p, const G4ThreeVector& v) const; - G4double DistanceToIn(const G4ThreeVector& p) const; + G4double DistanceToIn(const G4ThreeVector& p, + const G4ThreeVector& v) const override; + G4double DistanceToIn(const G4ThreeVector& p) const override; G4double DistanceToOut(const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm = false, G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr) const; - G4double DistanceToOut(const G4ThreeVector& p) const; + G4ThreeVector* n = nullptr) const override; + G4double DistanceToOut(const G4ThreeVector& p) const override; - G4GeometryType GetEntityType() const; + G4GeometryType GetEntityType() const override; - G4ThreeVector GetPointOnSurface() const; + G4ThreeVector GetPointOnSurface() const override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; - std::ostream& StreamInfo( std::ostream& os ) const; + std::ostream& StreamInfo( std::ostream& os ) const override; // Visualisation functions - void DescribeYourselfTo ( G4VGraphicsScene& scene ) const; - G4Polyhedron* CreatePolyhedron () const; - - public: // without description + void DescribeYourselfTo (G4VGraphicsScene& scene) const override; + G4Polyhedron* CreatePolyhedron () const override; G4Tubs(__void__&); // diff --git a/source/geometry/solids/CSG/include/G4Tubs.icc b/source/geometry/solids/CSG/include/G4Tubs.icc index ce83e96b4bf..3ce3db75811 100644 --- a/source/geometry/solids/CSG/include/G4Tubs.icc +++ b/source/geometry/solids/CSG/include/G4Tubs.icc @@ -156,7 +156,7 @@ inline void G4Tubs::CheckDPhiAngle(G4double dPhi) inline void G4Tubs::CheckPhiAngles(G4double sPhi, G4double dPhi) { CheckDPhiAngle(dPhi); - if ( (fDPhi G4UBox(const G4String& pName, G4double pX, G4double pY, G4double pZ); // Constructs a box with name, and half lengths pX,pY,pZ - ~G4UBox(); + ~G4UBox() override; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep); + const G4VPhysicalVolume* pRep) override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; G4double GetXHalfLength() const; G4double GetYHalfLength() const; @@ -68,16 +68,16 @@ class G4UBox : public G4UAdapter void SetYHalfLength(G4double dy); void SetZHalfLength(G4double dz); - inline G4GeometryType GetEntityType() const; + inline G4GeometryType GetEntityType() const override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; - G4Polyhedron* CreatePolyhedron() const; + G4Polyhedron* CreatePolyhedron() const override; public: // without description diff --git a/source/geometry/solids/CSG/include/G4UCons.hh b/source/geometry/solids/CSG/include/G4UCons.hh index 889d9f72455..866c433aaef 100644 --- a/source/geometry/solids/CSG/include/G4UCons.hh +++ b/source/geometry/solids/CSG/include/G4UCons.hh @@ -56,13 +56,13 @@ class G4UCons : public G4UAdapter G4double pSPhi, G4double pDPhi); // Constructs a cone with the given name and dimensions - ~G4UCons(); + ~G4UCons() override; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep ); + const G4VPhysicalVolume* pRep ) override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; G4double GetInnerRadiusMinusZ() const; G4double GetOuterRadiusMinusZ() const; @@ -84,16 +84,16 @@ class G4UCons : public G4UAdapter void SetStartPhiAngle (G4double newSPhi, G4bool trig=true); void SetDeltaPhiAngle (G4double newDPhi); - inline G4GeometryType GetEntityType() const; + inline G4GeometryType GetEntityType() const override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; - G4Polyhedron* CreatePolyhedron() const; + G4Polyhedron* CreatePolyhedron() const override; public: // without description diff --git a/source/geometry/solids/CSG/include/G4UCutTubs.hh b/source/geometry/solids/CSG/include/G4UCutTubs.hh index a89ad03be99..6136e49af8d 100644 --- a/source/geometry/solids/CSG/include/G4UCutTubs.hh +++ b/source/geometry/solids/CSG/include/G4UCutTubs.hh @@ -55,13 +55,13 @@ class G4UCutTubs : public G4UAdapter G4double pDz, G4double pSPhi, G4double pDPhi, - G4ThreeVector pLowNorm, - G4ThreeVector pHighNorm ); + const G4ThreeVector& pLowNorm, + const G4ThreeVector& pHighNorm ); // Constructs a cut-tubs with the given name, dimensions and cuts - ~G4UCutTubs(); + ~G4UCutTubs() override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; G4double GetInnerRadius () const; G4double GetOuterRadius () const; @@ -81,16 +81,16 @@ class G4UCutTubs : public G4UAdapter void SetStartPhiAngle (G4double newSPhi, G4bool trig=true); void SetDeltaPhiAngle (G4double newDPhi); - inline G4GeometryType GetEntityType() const; + inline G4GeometryType GetEntityType() const override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; - G4Polyhedron* CreatePolyhedron() const; + G4Polyhedron* CreatePolyhedron() const override; public: // without description diff --git a/source/geometry/solids/CSG/include/G4UOrb.hh b/source/geometry/solids/CSG/include/G4UOrb.hh index 95450a0aced..08c64596433 100644 --- a/source/geometry/solids/CSG/include/G4UOrb.hh +++ b/source/geometry/solids/CSG/include/G4UOrb.hh @@ -51,28 +51,28 @@ class G4UOrb : public G4UAdapter G4UOrb(const G4String& pName, G4double pRmax); - ~G4UOrb() ; + ~G4UOrb() override ; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep); + const G4VPhysicalVolume* pRep) override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; G4double GetRadius() const; void SetRadius(G4double newRmax); G4double GetRadialTolerance() const; - inline G4GeometryType GetEntityType() const; + inline G4GeometryType GetEntityType() const override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax) const; + G4double& pmin, G4double& pmax) const override; - G4Polyhedron* CreatePolyhedron() const; + G4Polyhedron* CreatePolyhedron() const override; public: // without description diff --git a/source/geometry/solids/CSG/include/G4UPara.hh b/source/geometry/solids/CSG/include/G4UPara.hh index 5237b5e9675..ef103e2ed98 100644 --- a/source/geometry/solids/CSG/include/G4UPara.hh +++ b/source/geometry/solids/CSG/include/G4UPara.hh @@ -56,7 +56,7 @@ class G4UPara : public G4UAdapter G4UPara(const G4String& pName, const G4ThreeVector pt[8]); - ~G4UPara(); + ~G4UPara() override; // Accessors @@ -85,20 +85,20 @@ class G4UPara : public G4UAdapter void ComputeDimensions(G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep); + const G4VPhysicalVolume* pRep) override; - inline G4GeometryType GetEntityType() const; + inline G4GeometryType GetEntityType() const override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; - G4Polyhedron* CreatePolyhedron () const; + G4Polyhedron* CreatePolyhedron () const override; public: // without description diff --git a/source/geometry/solids/CSG/include/G4USphere.hh b/source/geometry/solids/CSG/include/G4USphere.hh index 2ba0a455e02..085dde6ce30 100644 --- a/source/geometry/solids/CSG/include/G4USphere.hh +++ b/source/geometry/solids/CSG/include/G4USphere.hh @@ -56,13 +56,13 @@ class G4USphere : public G4UAdapter // Constructs a sphere or sphere shell section // with the given name and dimensions - ~G4USphere(); + ~G4USphere() override; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep); + const G4VPhysicalVolume* pRep) override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; G4double GetInnerRadius () const; G4double GetOuterRadius () const; @@ -86,16 +86,16 @@ class G4USphere : public G4UAdapter void SetStartThetaAngle(G4double newSTheta); void SetDeltaThetaAngle(G4double newDTheta); - inline G4GeometryType GetEntityType() const; + inline G4GeometryType GetEntityType() const override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; - G4Polyhedron* CreatePolyhedron() const; + G4Polyhedron* CreatePolyhedron() const override; public: // without description diff --git a/source/geometry/solids/CSG/include/G4UTorus.hh b/source/geometry/solids/CSG/include/G4UTorus.hh index e581153f6e9..054487b0792 100644 --- a/source/geometry/solids/CSG/include/G4UTorus.hh +++ b/source/geometry/solids/CSG/include/G4UTorus.hh @@ -54,13 +54,13 @@ class G4UTorus : public G4UAdapter G4double sphi, G4double dphi); // Constructs a torus with name and geometrical parameters - ~G4UTorus(); + ~G4UTorus() override; void ComputeDimensions(G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep); + const G4VPhysicalVolume* pRep) override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; G4double GetRmin() const; G4double GetRmax() const; @@ -81,16 +81,16 @@ class G4UTorus : public G4UAdapter void SetAllParameters(G4double arg1, G4double arg2, G4double arg3, G4double arg4, G4double arg5); - inline G4GeometryType GetEntityType() const; + inline G4GeometryType GetEntityType() const override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax) const; + G4double& pmin, G4double& pmax) const override; - G4Polyhedron* CreatePolyhedron() const; + G4Polyhedron* CreatePolyhedron() const override; public: // without description diff --git a/source/geometry/solids/CSG/include/G4UTrap.hh b/source/geometry/solids/CSG/include/G4UTrap.hh index 6416b60016d..de2527b0630 100644 --- a/source/geometry/solids/CSG/include/G4UTrap.hh +++ b/source/geometry/solids/CSG/include/G4UTrap.hh @@ -90,13 +90,13 @@ class G4UTrap : public G4UAdapter // Constructor for "nominal" G4Trap whose parameters are to be set // by a G4VPVParamaterisation later - ~G4UTrap(); + ~G4UTrap() override; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep); + const G4VPhysicalVolume* pRep) override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; using Base_t::GetTanAlpha1; using Base_t::GetTanAlpha2; @@ -130,16 +130,16 @@ class G4UTrap : public G4UAdapter G4double pDy2, G4double pDx3, G4double pDx4, G4double pAlp2); - inline G4GeometryType GetEntityType() const; + inline G4GeometryType GetEntityType() const override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; - G4Polyhedron* CreatePolyhedron() const; + G4Polyhedron* CreatePolyhedron() const override; public: // without description diff --git a/source/geometry/solids/CSG/include/G4UTrd.hh b/source/geometry/solids/CSG/include/G4UTrd.hh index f263a049eb0..3c0db1340d4 100644 --- a/source/geometry/solids/CSG/include/G4UTrd.hh +++ b/source/geometry/solids/CSG/include/G4UTrd.hh @@ -55,13 +55,13 @@ class G4UTrd : public G4UAdapter G4double pdz); // Constructs a trapezoid with name, and half lengths - ~G4UTrd(); + ~G4UTrd() override; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep); + const G4VPhysicalVolume* pRep) override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; G4double GetXHalfLength1() const; G4double GetXHalfLength2() const; @@ -78,16 +78,16 @@ class G4UTrd : public G4UAdapter void SetAllParameters(G4double pdx1, G4double pdx2, G4double pdy1, G4double pdy2, G4double pdz); - inline G4GeometryType GetEntityType() const; + inline G4GeometryType GetEntityType() const override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; - G4Polyhedron* CreatePolyhedron() const; + G4Polyhedron* CreatePolyhedron() const override; public: // without description diff --git a/source/geometry/solids/CSG/include/G4UTubs.hh b/source/geometry/solids/CSG/include/G4UTubs.hh index b7ce533f9f2..d90b6704a53 100644 --- a/source/geometry/solids/CSG/include/G4UTubs.hh +++ b/source/geometry/solids/CSG/include/G4UTubs.hh @@ -57,13 +57,13 @@ class G4UTubs : public G4UAdapter G4double pDPhi ); // Constructs a tubs with the given name and dimensions - ~G4UTubs(); + ~G4UTubs() override; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep ); + const G4VPhysicalVolume* pRep ) override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; G4double GetInnerRadius () const; G4double GetOuterRadius () const; @@ -81,16 +81,16 @@ class G4UTubs : public G4UAdapter void SetStartPhiAngle (G4double newSPhi, G4bool trig=true); void SetDeltaPhiAngle (G4double newDPhi); - inline G4GeometryType GetEntityType() const; + inline G4GeometryType GetEntityType() const override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; - G4Polyhedron* CreatePolyhedron() const; + G4Polyhedron* CreatePolyhedron() const override; public: // without description diff --git a/source/geometry/solids/CSG/src/G4Box.cc b/source/geometry/solids/CSG/src/G4Box.cc index 31d39276039..28eebab554b 100644 --- a/source/geometry/solids/CSG/src/G4Box.cc +++ b/source/geometry/solids/CSG/src/G4Box.cc @@ -73,7 +73,7 @@ G4Box::G4Box(const G4String& pName, // for usage restricted to object persistency G4Box::G4Box( __void__& a ) - : G4CSGSolid(a), delta(0.) + : G4CSGSolid(a) { } @@ -81,18 +81,13 @@ G4Box::G4Box( __void__& a ) // // Destructor -G4Box::~G4Box() -{ -} +G4Box::~G4Box() = default; ////////////////////////////////////////////////////////////////////////// // // Copy constructor -G4Box::G4Box(const G4Box& rhs) - : G4CSGSolid(rhs), fDx(rhs.fDx), fDy(rhs.fDy), fDz(rhs.fDz), delta(rhs.delta) -{ -} +G4Box::G4Box(const G4Box&) = default; ////////////////////////////////////////////////////////////////////////// // @@ -309,11 +304,11 @@ G4ThreeVector G4Box::ApproxSurfaceNormal(const G4ThreeVector& p) const G4double distz = std::abs(p.z()) - fDz; if (distx >= disty && distx >= distz) - return G4ThreeVector(std::copysign(1.,p.x()), 0., 0.); + return {std::copysign(1.,p.x()), 0., 0.}; if (disty >= distx && disty >= distz) - return G4ThreeVector(0., std::copysign(1.,p.y()), 0.); + return {0., std::copysign(1.,p.y()), 0.}; else - return G4ThreeVector(0., 0., std::copysign(1.,p.z())); + return {0., 0., std::copysign(1.,p.z())}; } ////////////////////////////////////////////////////////////////////////// @@ -470,7 +465,7 @@ G4double G4Box::DistanceToOut(const G4ThreeVector& p) const G4GeometryType G4Box::GetEntityType() const { - return G4String("G4Box"); + return {"G4Box"}; } ////////////////////////////////////////////////////////////////////////// @@ -505,17 +500,11 @@ G4ThreeVector G4Box::GetPointOnSurface() const G4double v = 2.*G4QuickRand() - 1.; if (select < sxy) - return G4ThreeVector(u*fDx, - v*fDy, - ((select < 0.5*sxy) ? -fDz : fDz)); + return { u*fDx, v*fDy, ((select < 0.5*sxy) ? -fDz : fDz) }; else if (select < sxy + sxz) - return G4ThreeVector(u*fDx, - ((select < sxy + 0.5*sxz) ? -fDy : fDy), - v*fDz); + return { u*fDx, ((select < sxy + 0.5*sxz) ? -fDy : fDy), v*fDz }; else - return G4ThreeVector(((select < sxy + sxz + 0.5*syz) ? -fDx : fDx), - u*fDy, - v*fDz); + return { ((select < sxy + sxz + 0.5*syz) ? -fDx : fDx), u*fDy, v*fDz }; } ////////////////////////////////////////////////////////////////////////// @@ -538,7 +527,7 @@ void G4Box::DescribeYourselfTo (G4VGraphicsScene& scene) const G4VisExtent G4Box::GetExtent() const { - return G4VisExtent (-fDx, fDx, -fDy, fDy, -fDz, fDz); + return { -fDx, fDx, -fDy, fDy, -fDz, fDz }; } G4Polyhedron* G4Box::CreatePolyhedron () const diff --git a/source/geometry/solids/CSG/src/G4Cons.cc b/source/geometry/solids/CSG/src/G4Cons.cc index a8b2250c4e3..564478a08f7 100644 --- a/source/geometry/solids/CSG/src/G4Cons.cc +++ b/source/geometry/solids/CSG/src/G4Cons.cc @@ -125,12 +125,7 @@ G4Cons::G4Cons( const G4String& pName, // for usage restricted to object persistency. // G4Cons::G4Cons( __void__& a ) - : G4CSGSolid(a), kRadTolerance(0.), kAngTolerance(0.), - fRmin1(0.), fRmin2(0.), fRmax1(0.), fRmax2(0.), fDz(0.), - fSPhi(0.), fDPhi(0.), sinCPhi(0.), cosCPhi(0.), cosHDPhi(0.), - cosHDPhiOT(0.), cosHDPhiIT(0.), sinSPhi(0.), cosSPhi(0.), - sinEPhi(0.), cosEPhi(0.), - halfCarTolerance(0.), halfRadTolerance(0.), halfAngTolerance(0.) + : G4CSGSolid(a) { } @@ -138,27 +133,13 @@ G4Cons::G4Cons( __void__& a ) // // Destructor -G4Cons::~G4Cons() -{ -} +G4Cons::~G4Cons() = default; ////////////////////////////////////////////////////////////////////////// // // Copy constructor -G4Cons::G4Cons(const G4Cons& rhs) - : G4CSGSolid(rhs), kRadTolerance(rhs.kRadTolerance), - kAngTolerance(rhs.kAngTolerance), fRmin1(rhs.fRmin1), fRmin2(rhs.fRmin2), - fRmax1(rhs.fRmax1), fRmax2(rhs.fRmax2), fDz(rhs.fDz), fSPhi(rhs.fSPhi), - fDPhi(rhs.fDPhi), sinCPhi(rhs.sinCPhi), cosCPhi(rhs.cosCPhi), - cosHDPhi(rhs.cosHDPhi), cosHDPhiOT(rhs.cosHDPhiOT), - cosHDPhiIT(rhs.cosHDPhiIT), sinSPhi(rhs.sinSPhi), cosSPhi(rhs.cosSPhi), - sinEPhi(rhs.sinEPhi), cosEPhi(rhs.cosEPhi), fPhiFullCone(rhs.fPhiFullCone), - halfCarTolerance(rhs.halfCarTolerance), - halfRadTolerance(rhs.halfRadTolerance), - halfAngTolerance(rhs.halfAngTolerance) -{ -} +G4Cons::G4Cons(const G4Cons&) = default; ////////////////////////////////////////////////////////////////////////// // @@ -218,7 +199,7 @@ EInside G4Cons::Inside(const G4ThreeVector& p) const if ( (r2tolRMax*tolRMax) ) { return in = kOutside; } - if (rl) { tolRMin = rl + halfRadTolerance; } + if (rl != 0.0) { tolRMin = rl + halfRadTolerance; } else { tolRMin = 0.0; } tolRMax = rh - halfRadTolerance; @@ -325,7 +306,7 @@ G4bool G4Cons::CalculateExtent( const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // Get parameters of the solid @@ -450,7 +431,7 @@ G4ThreeVector G4Cons::SurfaceNormal( const G4ThreeVector& p) const if (!fPhiFullCone) // Protected against (0,0,z) { - if ( rho ) + if ( rho != 0.0 ) { pPhi = std::atan2(p.y(),p.x()); @@ -460,7 +441,7 @@ G4ThreeVector G4Cons::SurfaceNormal( const G4ThreeVector& p) const distSPhi = std::fabs( pPhi - fSPhi ); distEPhi = std::fabs( pPhi - fSPhi - fDPhi ); } - else if( !(fRmin1) || !(fRmin2) ) + else if( ((fRmin1) == 0.0) || ((fRmin2) == 0.0) ) { distSPhi = 0.; distEPhi = 0.; @@ -471,7 +452,7 @@ G4ThreeVector G4Cons::SurfaceNormal( const G4ThreeVector& p) const if ( rho > halfCarTolerance ) { nR = G4ThreeVector(p.x()/rho/secRMax, p.y()/rho/secRMax, -tanRMax/secRMax); - if (fRmin1 || fRmin2) + if ((fRmin1 != 0.0) || (fRmin2 != 0.0)) { nr = G4ThreeVector(-p.x()/rho/secRMin,-p.y()/rho/secRMin,tanRMin/secRMin); } @@ -482,7 +463,7 @@ G4ThreeVector G4Cons::SurfaceNormal( const G4ThreeVector& p) const ++noSurfaces; sumnorm += nR; } - if( (fRmin1 || fRmin2) && (distRMin <= halfCarTolerance) ) + if( ((fRmin1 != 0.0) || (fRmin2 != 0.0)) && (distRMin <= halfCarTolerance) ) { ++noSurfaces; sumnorm += nr; @@ -575,7 +556,7 @@ G4ThreeVector G4Cons::ApproxSurfaceNormal( const G4ThreeVector& p ) const side = kNRMax ; } } - if ( !fPhiFullCone && rho ) // Protected against (0,0,z) + if ( !fPhiFullCone && (rho != 0.0) ) // Protected against (0,0,z) { phi = std::atan2(p.y(),p.x()) ; @@ -755,7 +736,7 @@ G4double G4Cons::DistanceToIn( const G4ThreeVector& p, if ( (tolIRMin2 <= rhoi2) && (rhoi2 <= tolIRMax2) ) { - if ( !fPhiFullCone && rhoi2 ) + if ( !fPhiFullCone && (rhoi2 != 0.0) ) { // Psi = angle made with central (average) phi of shape @@ -840,7 +821,7 @@ G4double G4Cons::DistanceToIn( const G4ThreeVector& p, if ( c <= 0 ) // second >=0 { sd = -b + std::sqrt(d) ; - if((sd<0) & (sd>-halfRadTolerance)) sd=0; + if((sd<0.0) && (sd>-halfRadTolerance)) { sd = 0.0; } } else // both negative, travel away { @@ -949,13 +930,13 @@ G4double G4Cons::DistanceToIn( const G4ThreeVector& p, // - Extra checks needed for 3's intersections // => lots of duplicated code - if (rMinAv) + if (rMinAv != 0.0) { nt1 = t1 - (tanRMin*v.z())*(tanRMin*v.z()) ; nt2 = t2 - tanRMin*v.z()*rin ; nt3 = t3 - rin*rin ; - if ( nt1 ) + if ( nt1 != 0.0 ) { if ( nt3 > rin*kRadTolerance*secRMin ) { @@ -1342,7 +1323,7 @@ G4double G4Cons::DistanceToIn(const G4ThreeVector& p) const rho = std::sqrt(p.x()*p.x() + p.y()*p.y()) ; safeZ = std::fabs(p.z()) - fDz ; - if ( fRmin1 || fRmin2 ) + if ( (fRmin1 != 0.0) || (fRmin2 != 0.0) ) { tanRMin = (fRmin2 - fRmin1)*0.5/fDz ; secRMin = std::sqrt(1.0 + tanRMin*tanRMin) ; @@ -1366,7 +1347,7 @@ G4double G4Cons::DistanceToIn(const G4ThreeVector& p) const } if ( safeZ > safe ) { safe = safeZ; } - if ( !fPhiFullCone && rho ) + if ( !fPhiFullCone && (rho != 0.0) ) { // Psi=angle from central phi to point @@ -1513,7 +1494,7 @@ G4double G4Cons::DistanceToOut( const G4ThreeVector& p, deltaRoi2 = 1.0; } - if ( nt1 && (deltaRoi2 > 0.0) ) + if ( (nt1 != 0.0) && (deltaRoi2 > 0.0) ) { // Equation quadratic => 2 roots : second root must be leaving @@ -1597,7 +1578,7 @@ G4double G4Cons::DistanceToOut( const G4ThreeVector& p, return snxt = 0.0 ; } } - else if ( nt2 && (deltaRoi2 > 0.0) ) + else if ( (nt2 != 0.0) && (deltaRoi2 > 0.0) ) { // Linear case (only one intersection) => point outside outer cone @@ -1652,12 +1633,12 @@ G4double G4Cons::DistanceToOut( const G4ThreeVector& p, // Inner Cone intersection - if ( fRmin1 || fRmin2 ) + if ( (fRmin1 != 0.0) || (fRmin2 != 0.0) ) { tanRMin = (fRmin2 - fRmin1)*0.5/fDz ; nt1 = t1 - (tanRMin*v.z())*(tanRMin*v.z()) ; - if ( nt1 ) + if ( nt1 != 0.0 ) { secRMin = std::sqrt(1.0 + tanRMin*tanRMin) ; rMinAv = (fRmin1 + fRmin2)*0.5 ; @@ -1800,7 +1781,7 @@ G4double G4Cons::DistanceToOut( const G4ThreeVector& p, if ( vphi < fSPhi - halfAngTolerance ) { vphi += twopi; } else if ( vphi > fSPhi + fDPhi + halfAngTolerance ) { vphi -= twopi; } - if ( p.x() || p.y() ) // Check if on z axis (rho not needed later) + if ( (p.x() != 0.0) || (p.y() != 0.0) ) // Check if on z axis (rho not needed later) { // pDist -ve when inside @@ -1816,8 +1797,8 @@ G4double G4Cons::DistanceToOut( const G4ThreeVector& p, if( ( (fDPhi <= pi) && ( (pDistS <= halfCarTolerance) && (pDistE <= halfCarTolerance) ) ) - || ( (fDPhi > pi) && !((pDistS > halfCarTolerance) - && (pDistE > halfCarTolerance) ) ) ) + || ( (fDPhi > pi) && ((pDistS <= halfCarTolerance) + || (pDistE <= halfCarTolerance) ) ) ) { // Inside both phi *full* planes if ( compS < 0 ) @@ -1883,8 +1864,8 @@ G4double G4Cons::DistanceToOut( const G4ThreeVector& p, { // Leaving via ending phi - if(!( (fSPhi-halfAngTolerance <= vphi) - && (fSPhi+fDPhi+halfAngTolerance >= vphi) ) ) + if( (fSPhi-halfAngTolerance > vphi) + || (fSPhi+fDPhi+halfAngTolerance < vphi) ) { sidephi = kEPhi ; if ( pDistE <= -halfCarTolerance ) { sphi = sphi2; } @@ -2050,7 +2031,7 @@ G4double G4Cons::DistanceToOut(const G4ThreeVector& p) const rho = std::sqrt(p.x()*p.x() + p.y()*p.y()) ; safeZ = fDz - std::fabs(p.z()) ; - if (fRmin1 || fRmin2) + if ((fRmin1 != 0.0) || (fRmin2 != 0.0)) { tanRMin = (fRmin2 - fRmin1)*0.5/fDz ; secRMin = std::sqrt(1.0 + tanRMin*tanRMin) ; @@ -2098,7 +2079,7 @@ G4double G4Cons::DistanceToOut(const G4ThreeVector& p) const G4GeometryType G4Cons::GetEntityType() const { - return G4String("G4Cons"); + return {"G4Cons"}; } ////////////////////////////////////////////////////////////////////////// @@ -2172,13 +2153,11 @@ G4ThreeVector G4Cons::GetPointOnSurface() const if(fRmax1 != fRmax2) { G4double zRand = G4RandFlat::shoot(-1.*fDz,fDz); - return G4ThreeVector (rone*cosu*(qone-zRand), - rone*sinu*(qone-zRand), zRand); + return { rone*cosu*(qone-zRand), rone*sinu*(qone-zRand), zRand }; } else { - return G4ThreeVector(fRmax1*cosu, fRmax2*sinu, - G4RandFlat::shoot(-1.*fDz,fDz)); + return { fRmax1*cosu, fRmax2*sinu, G4RandFlat::shoot(-1.*fDz,fDz) }; } } else if( (chose >= Aone) && (chose < Aone + Atwo) ) // inner surface @@ -2186,23 +2165,21 @@ G4ThreeVector G4Cons::GetPointOnSurface() const if(fRmin1 != fRmin2) { G4double zRand = G4RandFlat::shoot(-1.*fDz,fDz); - return G4ThreeVector (rtwo*cosu*(qtwo-zRand), - rtwo*sinu*(qtwo-zRand), zRand); + return { rtwo*cosu*(qtwo-zRand), rtwo*sinu*(qtwo-zRand), zRand }; } else { - return G4ThreeVector(fRmin1*cosu, fRmin2*sinu, - G4RandFlat::shoot(-1.*fDz,fDz)); + return { fRmin1*cosu, fRmin2*sinu, G4RandFlat::shoot(-1.*fDz,fDz) }; } } else if( (chose >= Aone + Atwo) && (chose < Aone + Atwo + Athree) ) // base at -Dz { - return G4ThreeVector (rRand1*cosu, rRand1*sinu, -1*fDz); + return {rRand1*cosu, rRand1*sinu, -1*fDz}; } else if( (chose >= Aone + Atwo + Athree) && (chose < Aone + Atwo + Athree + Afour) ) // base at +Dz { - return G4ThreeVector (rRand2*cosu,rRand2*sinu,fDz); + return { rRand2*cosu, rRand2*sinu, fDz }; } else if( (chose >= Aone + Atwo + Athree + Afour) // SPhi section && (chose < Aone + Atwo + Athree + Afour + Afive) ) @@ -2210,16 +2187,14 @@ G4ThreeVector G4Cons::GetPointOnSurface() const G4double zRand = G4RandFlat::shoot(-1.*fDz,fDz); rRand1 = G4RandFlat::shoot(fRmin2-((zRand-fDz)/(2.*fDz))*(fRmin1-fRmin2), fRmax2-((zRand-fDz)/(2.*fDz))*(fRmax1-fRmax2)); - return G4ThreeVector (rRand1*cosSPhi, - rRand1*sinSPhi, zRand); + return { rRand1*cosSPhi, rRand1*sinSPhi, zRand }; } else // SPhi+DPhi section { G4double zRand = G4RandFlat::shoot(-1.*fDz,fDz); rRand1 = G4RandFlat::shoot(fRmin2-((zRand-fDz)/(2.*fDz))*(fRmin1-fRmin2), fRmax2-((zRand-fDz)/(2.*fDz))*(fRmax1-fRmax2)); - return G4ThreeVector (rRand1*cosEPhi, - rRand1*sinEPhi, zRand); + return { rRand1*cosEPhi, rRand1*sinEPhi, zRand }; } } diff --git a/source/geometry/solids/CSG/src/G4CutTubs.cc b/source/geometry/solids/CSG/src/G4CutTubs.cc index c806f7446ec..21e828d2469 100644 --- a/source/geometry/solids/CSG/src/G4CutTubs.cc +++ b/source/geometry/solids/CSG/src/G4CutTubs.cc @@ -97,8 +97,8 @@ G4CutTubs::G4CutTubs( const G4String &pName, // Check on Cutted Planes Normals // If there is NO CUT, propose to use G4Tubs instead // - if ( ( !pLowNorm.x()) && ( !pLowNorm.y()) - && ( !pHighNorm.x()) && (!pHighNorm.y()) ) + if ( ( pLowNorm.x() == 0.0) && ( pLowNorm.y() == 0.0) + && ( pHighNorm.x() == 0.0) && (pHighNorm.y() == 0.0) ) { std::ostringstream message; message << "Inexisting Low/High Normal to Z plane or Parallel to Z." @@ -166,12 +166,7 @@ G4CutTubs::G4CutTubs( const G4String &pName, // for usage restricted to object persistency. // G4CutTubs::G4CutTubs( __void__& a ) - : G4CSGSolid(a), kRadTolerance(0.), kAngTolerance(0.), - fRMin(0.), fRMax(0.), fDz(0.), fSPhi(0.), fDPhi(0.), fZMin(0.), fZMax(0.), - sinCPhi(0.), cosCPhi(0.), cosHDPhi(0.), cosHDPhiOT(0.), cosHDPhiIT(0.), - sinSPhi(0.), cosSPhi(0.), sinEPhi(0.), cosEPhi(0.), - halfCarTolerance(0.), halfRadTolerance(0.), halfAngTolerance(0.), - fLowNorm(G4ThreeVector()), fHighNorm(G4ThreeVector()) + : G4CSGSolid(a) { } @@ -179,31 +174,13 @@ G4CutTubs::G4CutTubs( __void__& a ) // // Destructor -G4CutTubs::~G4CutTubs() -{ -} +G4CutTubs::~G4CutTubs() = default; ////////////////////////////////////////////////////////////////////////// // // Copy constructor -G4CutTubs::G4CutTubs(const G4CutTubs& rhs) - : G4CSGSolid(rhs), - kRadTolerance(rhs.kRadTolerance), kAngTolerance(rhs.kAngTolerance), - fRMin(rhs.fRMin), fRMax(rhs.fRMax), fDz(rhs.fDz), - fSPhi(rhs.fSPhi), fDPhi(rhs.fDPhi), - fZMin(rhs.fZMin), fZMax(rhs.fZMax), - sinCPhi(rhs.sinCPhi), cosCPhi(rhs.cosCPhi), cosHDPhi(rhs.cosHDPhi), - cosHDPhiOT(rhs.cosHDPhiOT), cosHDPhiIT(rhs.cosHDPhiIT), - sinSPhi(rhs.sinSPhi), cosSPhi(rhs.cosSPhi), - sinEPhi(rhs.sinEPhi), cosEPhi(rhs.cosEPhi), - fPhiFullCutTube(rhs.fPhiFullCutTube), - halfCarTolerance(rhs.halfCarTolerance), - halfRadTolerance(rhs.halfRadTolerance), - halfAngTolerance(rhs.halfAngTolerance), - fLowNorm(rhs.fLowNorm), fHighNorm(rhs.fHighNorm) -{ -} +G4CutTubs::G4CutTubs(const G4CutTubs&) = default; ////////////////////////////////////////////////////////////////////////// // @@ -483,7 +460,7 @@ G4bool G4CutTubs::CalculateExtent( const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // Get parameters of the solid @@ -639,7 +616,7 @@ EInside G4CutTubs::Inside( const G4ThreeVector& p ) const // Check on the Surface for R // - if (fRMin) { tolRMin = fRMin + halfRadTolerance; } + if (fRMin != 0.0) { tolRMin = fRMin + halfRadTolerance; } else { tolRMin = 0; } tolRMax = fRMax - halfRadTolerance; if (((r2 <= tolRMin*tolRMin) || (r2 >= tolRMax*tolRMax)) && @@ -694,7 +671,7 @@ G4ThreeVector G4CutTubs::SurfaceNormal( const G4ThreeVector& p ) const distSPhi = std::fabs(pPhi - fSPhi); distEPhi = std::fabs(pPhi - fSPhi - fDPhi); } - else if( !fRMin ) + else if( fRMin == 0.0 ) { distSPhi = 0.; distEPhi = 0.; @@ -709,7 +686,7 @@ G4ThreeVector G4CutTubs::SurfaceNormal( const G4ThreeVector& p ) const ++noSurfaces; sumnorm += nR; } - if( fRMin && (distRMin <= halfCarTolerance) ) + if( (fRMin != 0.0) && (distRMin <= halfCarTolerance) ) { ++noSurfaces; sumnorm -= nR; @@ -811,7 +788,7 @@ G4ThreeVector G4CutTubs::ApproxSurfaceNormal( const G4ThreeVector& p ) const side = kNRMax ; } } - if (!fPhiFullCutTube && rho ) // Protected against (0,0,z) + if (!fPhiFullCutTube && (rho != 0.0) ) // Protected against (0,0,z) { phi = std::atan2(p.y(),p.x()) ; @@ -959,7 +936,7 @@ G4double G4CutTubs::DistanceToIn( const G4ThreeVector& p, if ((tolIRMin2 <= rho2) && (rho2 <= tolIRMax2)) { - if (!fPhiFullCutTube && rho2) + if (!fPhiFullCutTube && (rho2 != 0.0)) { // Psi = angle made with central (average) phi of shape // @@ -1001,7 +978,7 @@ G4double G4CutTubs::DistanceToIn( const G4ThreeVector& p, if ((tolIRMin2 <= rho2) && (rho2 <= tolIRMax2)) { - if (!fPhiFullCutTube && rho2) + if (!fPhiFullCutTube && (rho2 != 0.0)) { // Psi = angle made with central (average) phi of shape // @@ -1169,7 +1146,7 @@ G4double G4CutTubs::DistanceToIn( const G4ThreeVector& p, } // end if (t3>tolIRMin2) } // end if (Inside Outer Radius) - if ( fRMin ) // Try inner cylinder intersection + if ( fRMin != 0.0 ) // Try inner cylinder intersection { c = (t3 - fRMin*fRMin)/t1 ; d = b*b - c ; @@ -1386,7 +1363,7 @@ G4double G4CutTubs::DistanceToIn( const G4ThreeVector& p ) const // Distance to Phi // - if ( (!fPhiFullCutTube) && (rho) ) + if ( (!fPhiFullCutTube) && ((rho) != 0.0) ) { // Psi=angle from central phi to point // @@ -1550,7 +1527,7 @@ G4double G4CutTubs::DistanceToOut( const G4ThreeVector& p, { roMin2 = t3 - t2*t2/t1 ; // min ro2 of the plane of movement - if ( fRMin && (roMin2 < fRMin*(fRMin - kRadTolerance)) ) + if ( (fRMin != 0.0) && (roMin2 < fRMin*(fRMin - kRadTolerance)) ) { deltaR = t3 - fRMin*fRMin ; b = t2/t1 ; @@ -1632,7 +1609,7 @@ G4double G4CutTubs::DistanceToOut( const G4ThreeVector& p, else if ( vphi > fSPhi + fDPhi + halfAngTolerance ) { vphi -= twopi; } - if ( p.x() || p.y() ) // Check if on z axis (rho not needed later) + if ( (p.x() != 0.0) || (p.y() != 0.0) ) // Check if on z axis (rho not needed later) { // pDist -ve when inside @@ -1648,8 +1625,8 @@ G4double G4CutTubs::DistanceToOut( const G4ThreeVector& p, if( ( (fDPhi <= pi) && ( (pDistS <= halfCarTolerance) && (pDistE <= halfCarTolerance) ) ) - || ( (fDPhi > pi) && !((pDistS > halfCarTolerance) - && (pDistE > halfCarTolerance) ) ) ) + || ( (fDPhi > pi) && ((pDistS <= halfCarTolerance) + || (pDistE <= halfCarTolerance) ) ) ) { // Inside both phi *full* planes @@ -1713,8 +1690,8 @@ G4double G4CutTubs::DistanceToOut( const G4ThreeVector& p, { // Leaving via ending phi // - if( !((fSPhi-halfAngTolerance <= vphi) - &&(fSPhi+fDPhi+halfAngTolerance >= vphi)) ) + if( (fSPhi-halfAngTolerance > vphi) + ||(fSPhi+fDPhi+halfAngTolerance < vphi) ) { sidephi = kEPhi ; if ( pDistE <= -halfCarTolerance ) { sphi = sphi2 ; } @@ -1899,7 +1876,7 @@ G4double G4CutTubs::DistanceToOut( const G4ThreeVector& p ) const G4GeometryType G4CutTubs::GetEntityType() const { - return G4String("G4CutTubs"); + return {"G4CutTubs"}; } ////////////////////////////////////////////////////////////////////////// @@ -1983,11 +1960,11 @@ G4ThreeVector G4CutTubs::GetPointOnSurface() const // Select surface G4double select = ssurf[5]*G4QuickRand(); G4int k = 5; - k -= (select <= ssurf[4]); - k -= (select <= ssurf[3]); - k -= (select <= ssurf[2]); - k -= (select <= ssurf[1]); - k -= (select <= ssurf[0]); + k -= (G4int)(select <= ssurf[4]); + k -= (G4int)(select <= ssurf[3]); + k -= (G4int)(select <= ssurf[2]); + k -= (G4int)(select <= ssurf[1]); + k -= (G4int)(select <= ssurf[0]); // Generate point on selected surface (rejection sampling) G4ThreeVector p(0,0,0); @@ -2012,7 +1989,7 @@ G4ThreeVector G4CutTubs::GetPointOnSurface() const G4double x = r*std::cos(phi); G4double y = r*std::sin(phi); G4double z = -fDz - (x*nbot.x() + y*nbot.y())/nbot.z(); - return G4ThreeVector(x, y, z); + return {x, y, z}; } case 3: // base at high z { @@ -2021,7 +1998,7 @@ G4ThreeVector G4CutTubs::GetPointOnSurface() const G4double x = r*std::cos(phi); G4double y = r*std::sin(phi); G4double z = fDz - (x*ntop.x() + y*ntop.y())/ntop.z(); - return G4ThreeVector(x, y, z); + return {x, y, z}; } case 4: // external lateral surface { @@ -2051,7 +2028,7 @@ G4ThreeVector G4CutTubs::GetPointOnSurface() const G4double x = rmax*std::cos(sphi + 0.5*dphi); G4double y = rmax*std::sin(sphi + 0.5*dphi); G4double z = fDz - (x*ntop.x() + y*ntop.y())/ntop.z(); - return G4ThreeVector(x, y, z); + return {x, y, z}; } /////////////////////////////////////////////////////////////////////////// @@ -2068,12 +2045,12 @@ G4Polyhedron* G4CutTubs::CreatePolyhedron () const typedef G4double G4double3[3]; typedef G4int G4int4[4]; - G4Polyhedron *ph = new G4Polyhedron; + auto ph = new G4Polyhedron; G4Polyhedron *ph1 = new G4PolyhedronTubs (fRMin, fRMax, fDz, fSPhi, fDPhi); G4int nn=ph1->GetNoVertices(); G4int nf=ph1->GetNoFacets(); - G4double3* xyz = new G4double3[nn]; // number of nodes - G4int4* faces = new G4int4[nf] ; // number of faces + auto xyz = new G4double3[nn]; // number of nodes + auto faces = new G4int4[nf] ; // number of faces for(G4int i=0; i distz) - return G4ThreeVector(fPlanes[iside].a, fPlanes[iside].b, fPlanes[iside].c); + return { fPlanes[iside].a, fPlanes[iside].b, fPlanes[iside].c }; else - return G4ThreeVector(0, 0, (p.z() < 0) ? -1 : 1); + return { 0, 0, (G4double)((p.z() < 0) ? -1 : 1) }; } ////////////////////////////////////////////////////////////////////////// @@ -793,7 +791,7 @@ G4double G4Para::DistanceToOut( const G4ThreeVector& p ) const G4GeometryType G4Para::GetEntityType() const { - return G4String("G4Para"); + return {"G4Para"}; } ////////////////////////////////////////////////////////////////////////// diff --git a/source/geometry/solids/CSG/src/G4Sphere.cc b/source/geometry/solids/CSG/src/G4Sphere.cc index 72dac283c94..c2d5b9a0487 100644 --- a/source/geometry/solids/CSG/src/G4Sphere.cc +++ b/source/geometry/solids/CSG/src/G4Sphere.cc @@ -92,7 +92,7 @@ G4Sphere::G4Sphere( const G4String& pName, FatalException, message); } fRmin=pRmin; fRmax=pRmax; - fRminTolerance = (fRmin) ? std::max( kRadTolerance, fEpsilon*fRmin ) : 0; + fRminTolerance = (fRmin) != 0.0 ? std::max( kRadTolerance, fEpsilon*fRmin ) : 0; fRmaxTolerance = std::max( kRadTolerance, fEpsilon*fRmax ); // Check angles @@ -107,15 +107,7 @@ G4Sphere::G4Sphere( const G4String& pName, // for usage restricted to object persistency. // G4Sphere::G4Sphere( __void__& a ) - : G4CSGSolid(a), fRminTolerance(0.), fRmaxTolerance(0.), - kAngTolerance(0.), kRadTolerance(0.), - fRmin(0.), fRmax(0.), fSPhi(0.), fDPhi(0.), fSTheta(0.), - fDTheta(0.), sinCPhi(0.), cosCPhi(0.), - cosHDPhi(0.), cosHDPhiOT(0.), cosHDPhiIT(0.), - sinSPhi(0.), cosSPhi(0.), sinEPhi(0.), cosEPhi(0.), hDPhi(0.), cPhi(0.), - ePhi(0.), sinSTheta(0.), cosSTheta(0.), sinETheta(0.), cosETheta(0.), - tanSTheta(0.), tanSTheta2(0.), tanETheta(0.), tanETheta2(0.), eTheta(0.), - halfCarTolerance(0.), halfAngTolerance(0.) + : G4CSGSolid(a) { } @@ -123,35 +115,13 @@ G4Sphere::G4Sphere( __void__& a ) // // Destructor -G4Sphere::~G4Sphere() -{ -} +G4Sphere::~G4Sphere() = default; ////////////////////////////////////////////////////////////////////////// // // Copy constructor -G4Sphere::G4Sphere(const G4Sphere& rhs) - : G4CSGSolid(rhs), fRminTolerance(rhs.fRminTolerance), - fRmaxTolerance(rhs.fRmaxTolerance), kAngTolerance(rhs.kAngTolerance), - kRadTolerance(rhs.kRadTolerance), fEpsilon(rhs.fEpsilon), - fRmin(rhs.fRmin), fRmax(rhs.fRmax), fSPhi(rhs.fSPhi), fDPhi(rhs.fDPhi), - fSTheta(rhs.fSTheta), fDTheta(rhs.fDTheta), - sinCPhi(rhs.sinCPhi), cosCPhi(rhs.cosCPhi), cosHDPhi(rhs.cosHDPhi), - cosHDPhiOT(rhs.cosHDPhiOT), cosHDPhiIT(rhs.cosHDPhiIT), - sinSPhi(rhs.sinSPhi), cosSPhi(rhs.cosSPhi), - sinEPhi(rhs.sinEPhi), cosEPhi(rhs.cosEPhi), - hDPhi(rhs.hDPhi), cPhi(rhs.cPhi), ePhi(rhs.ePhi), - sinSTheta(rhs.sinSTheta), cosSTheta(rhs.cosSTheta), - sinETheta(rhs.sinETheta), cosETheta(rhs.cosETheta), - tanSTheta(rhs.tanSTheta), tanSTheta2(rhs.tanSTheta2), - tanETheta(rhs.tanETheta), tanETheta2(rhs.tanETheta2), eTheta(rhs.eTheta), - fFullPhiSphere(rhs.fFullPhiSphere), fFullThetaSphere(rhs.fFullThetaSphere), - fFullSphere(rhs.fFullSphere), - halfCarTolerance(rhs.halfCarTolerance), - halfAngTolerance(rhs.halfAngTolerance) -{ -} +G4Sphere::G4Sphere(const G4Sphere&) = default; ////////////////////////////////////////////////////////////////////////// // @@ -340,7 +310,7 @@ EInside G4Sphere::Inside( const G4ThreeVector& p ) const // Phi boundaries : Do not check if it has no phi boundary! - if ( !fFullPhiSphere && rho2 ) // [fDPhi < twopi] and [p.x or p.y] + if ( !fFullPhiSphere && (rho2 != 0.0) ) // [fDPhi < twopi] and [p.x or p.y] { pPhi = std::atan2(p.y(),p.x()) ; @@ -359,7 +329,7 @@ EInside G4Sphere::Inside( const G4ThreeVector& p ) const // Theta bondaries - if ( (rho2 || p.z()) && (!fFullThetaSphere) ) + if ( ((rho2 != 0.0) || (p.z() != 0.0)) && (!fFullThetaSphere) ) { rho = std::sqrt(rho2); pTheta = std::atan2(rho,p.z()); @@ -414,9 +384,9 @@ G4ThreeVector G4Sphere::SurfaceNormal( const G4ThreeVector& p ) const rho = std::sqrt(rho2); G4double distRMax = std::fabs(radius-fRmax); - if (fRmin) distRMin = std::fabs(radius-fRmin); + if (fRmin != 0.0) distRMin = std::fabs(radius-fRmin); - if ( rho && !fFullSphere ) + if ( (rho != 0.0) && !fFullSphere ) { pPhi = std::atan2(p.y(),p.x()); @@ -425,12 +395,12 @@ G4ThreeVector G4Sphere::SurfaceNormal( const G4ThreeVector& p ) const } if ( !fFullPhiSphere ) { - if ( rho ) + if ( rho != 0.0 ) { distSPhi = std::fabs( pPhi-fSPhi ); distEPhi = std::fabs( pPhi-ePhi ); } - else if( !fRmin ) + else if( fRmin == 0.0 ) { distSPhi = 0.; distEPhi = 0.; @@ -440,7 +410,7 @@ G4ThreeVector G4Sphere::SurfaceNormal( const G4ThreeVector& p ) const } if ( !fFullThetaSphere ) { - if ( rho ) + if ( rho != 0.0 ) { pTheta = std::atan2(rho,p.z()); distSTheta = std::fabs(pTheta-fSTheta); @@ -454,9 +424,9 @@ G4ThreeVector G4Sphere::SurfaceNormal( const G4ThreeVector& p ) const cosETheta*p.y()/rho, -sinETheta ); } - else if( !fRmin ) + else if( fRmin == 0.0 ) { - if ( fSTheta ) + if ( fSTheta != 0.0 ) { distSTheta = 0.; nTs = G4ThreeVector(0.,0.,-1.); @@ -468,14 +438,14 @@ G4ThreeVector G4Sphere::SurfaceNormal( const G4ThreeVector& p ) const } } } - if( radius ) { nR = G4ThreeVector(p.x()/radius,p.y()/radius,p.z()/radius); } + if( radius != 0.0 ) { nR = G4ThreeVector(p.x()/radius,p.y()/radius,p.z()/radius); } if( distRMax <= halfCarTolerance ) { ++noSurfaces; sumnorm += nR; } - if( fRmin && (distRMin <= halfCarTolerance) ) + if( (fRmin != 0.0) && (distRMin <= halfCarTolerance) ) { ++noSurfaces; sumnorm -= nR; @@ -545,7 +515,7 @@ G4ThreeVector G4Sphere::ApproxSurfaceNormal( const G4ThreeVector& p ) const // distRMax=std::fabs(radius-fRmax); - if (fRmin) + if (fRmin != 0.0) { distRMin=std::fabs(radius-fRmin); @@ -574,7 +544,7 @@ G4ThreeVector G4Sphere::ApproxSurfaceNormal( const G4ThreeVector& p ) const pPhi = std::atan2(p.y(),p.x()); if (pPhi<0) { pPhi += twopi; } - if (!fFullPhiSphere && rho) + if (!fFullPhiSphere && (rho != 0.0)) { if (fSPhi<0) { @@ -611,7 +581,7 @@ G4ThreeVector G4Sphere::ApproxSurfaceNormal( const G4ThreeVector& p ) const // Distance to theta planes // - if (!fFullThetaSphere && radius) + if (!fFullThetaSphere && (radius != 0.0)) { pTheta=std::atan2(rho,p.z()); distSTheta=std::fabs(pTheta-fSTheta)*radius; @@ -808,7 +778,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, yi = p.y() + sd*v.y() ; rhoi = std::sqrt(xi*xi + yi*yi) ; - if (!fFullPhiSphere && rhoi) // Check phi intersection + if (!fFullPhiSphere && (rhoi != 0.0)) // Check phi intersection { cosPsi = (xi*cosCPhi + yi*sinCPhi)/rhoi ; @@ -918,7 +888,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, // surface first. // - Tolerant check if travelling through solid - if (fRmin) + if (fRmin != 0.0) { c = rad2 - fRmin*fRmin ; d2 = pDotV3d*pDotV3d - c ; @@ -980,7 +950,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, yi = p.y() + sd*v.y() ; rhoi = std::sqrt(xi*xi+yi*yi) ; - if ( !fFullPhiSphere && rhoi ) // Check phi intersection + if ( !fFullPhiSphere && (rhoi != 0.0) ) // Check phi intersection { cosPsi = (xi*cosCPhi + yi*sinCPhi)/rhoi ; @@ -1192,7 +1162,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, // => sd^2(1-vz^2(1+tan^2(t))+2sd(pdotv2d-pzvztan^2(t)) // + (rho2-pz^2tan^2(t)) = 0 - if (fSTheta) + if (fSTheta != 0.0) { dist2STheta = rho2 - p.z()*p.z()*tanSTheta2 ; } @@ -1215,7 +1185,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, t1 = 1 - v.z()*v.z()*(1 + tanSTheta2) ; t2 = pDotV2d - p.z()*v.z()*tanSTheta2 ; - if (t1) + if (t1 != 0.0) { b = t2/t1 ; c = dist2STheta/t1 ; @@ -1242,7 +1212,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, && (radi2 >= tolORMin2) && (zi*(fSTheta - halfpi) <= 0) ) { - if ( !fFullPhiSphere && rhoi2 ) // Check phi intersection + if ( !fFullPhiSphere && (rhoi2 != 0.0) ) // Check phi intersection { cosPsi = (xi*cosCPhi + yi*sinCPhi)/std::sqrt(rhoi2) ; if (cosPsi >= cosHDPhiOT) @@ -1266,7 +1236,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, { t1 = 1 - v.z()*v.z()*(1 + tanETheta2) ; t2 = pDotV2d - p.z()*v.z()*tanETheta2 ; - if (t1) + if (t1 != 0.0) { b = t2/t1 ; c = dist2ETheta/t1 ; @@ -1289,7 +1259,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, && (radi2 >= tolORMin2) && (zi*(eTheta - halfpi) <= 0) ) { - if (!fFullPhiSphere && rhoi2) // Check phi intersection + if (!fFullPhiSphere && (rhoi2 != 0.0)) // Check phi intersection { cosPsi = (xi*cosCPhi + yi*sinCPhi)/std::sqrt(rhoi2) ; if (cosPsi >= cosHDPhiOT) @@ -1315,7 +1285,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, t1 = 1 - v.z()*v.z()*(1 + tanETheta2) ; t2 = pDotV2d - p.z()*v.z()*tanETheta2 ; - if (t1) + if (t1 != 0.0) { b = t2/t1 ; c = dist2ETheta/t1 ; @@ -1343,7 +1313,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, && (radi2 >= tolORMin2) && (zi*(eTheta - halfpi) <= 0) ) { - if (!fFullPhiSphere && rhoi2) // Check phi intersection + if (!fFullPhiSphere && (rhoi2 != 0.0)) // Check phi intersection { cosPsi = (xi*cosCPhi + yi*sinCPhi)/std::sqrt(rhoi2) ; if (cosPsi >= cosHDPhiOT) @@ -1363,11 +1333,11 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, // Possible intersection with STheta cone. // Second >= 0 root should be considered - if ( fSTheta ) + if ( fSTheta != 0.0 ) { t1 = 1 - v.z()*v.z()*(1 + tanSTheta2) ; t2 = pDotV2d - p.z()*v.z()*tanSTheta2 ; - if (t1) + if (t1 != 0.0) { b = t2/t1 ; c = dist2STheta/t1 ; @@ -1390,7 +1360,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, && (radi2 >= tolORMin2) && (zi*(fSTheta - halfpi) <= 0) ) { - if (!fFullPhiSphere && rhoi2) // Check phi intersection + if (!fFullPhiSphere && (rhoi2 != 0.0)) // Check phi intersection { cosPsi = (xi*cosCPhi + yi*sinCPhi)/std::sqrt(rhoi2) ; if (cosPsi >= cosHDPhiOT) @@ -1420,7 +1390,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, || (t2<0 && tolIRMin2halfpi) || (v.z()<0 && tolIRMin2= cosHDPhiIT) @@ -1437,7 +1407,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, // Not entering immediately/travelling through t1 = 1 - v.z()*v.z()*(1 + tanSTheta2) ; - if (t1) + if (t1 != 0.0) { b = t2/t1 ; c = dist2STheta/t1 ; @@ -1459,7 +1429,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, && (radi2 >= tolORMin2) && (zi*(fSTheta - halfpi) <= 0) ) { - if ( !fFullPhiSphere && rhoi2 ) // Check phi intersection + if ( !fFullPhiSphere && (rhoi2 != 0.0) ) // Check phi intersection { cosPsi = (xi*cosCPhi + yi*sinCPhi)/std::sqrt(rhoi2) ; if ( cosPsi >= cosHDPhiOT ) @@ -1492,7 +1462,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, || ((v.z()>0) && (eTheta == halfpi) && (tolIRMin2 < rad2) && (rad2 < tolIRMax2)) ) { - if (!fFullPhiSphere && rho2) // Check phi intersection + if (!fFullPhiSphere && (rho2 != 0.0)) // Check phi intersection { cosPsi = (p.x()*cosCPhi + p.y()*sinCPhi)/std::sqrt(rho2) ; if (cosPsi >= cosHDPhiIT) @@ -1509,7 +1479,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, // Not entering immediately/travelling through t1 = 1 - v.z()*v.z()*(1 + tanETheta2) ; - if (t1) + if (t1 != 0.0) { b = t2/t1 ; c = dist2ETheta/t1 ; @@ -1533,7 +1503,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, && (radi2 >= tolORMin2) && (zi*(eTheta - halfpi) <= 0) ) { - if (!fFullPhiSphere && rhoi2) // Check phi intersection + if (!fFullPhiSphere && (rhoi2 != 0.0)) // Check phi intersection { cosPsi = (xi*cosCPhi + yi*sinCPhi)/std::sqrt(rhoi2) ; if (cosPsi >= cosHDPhiOT) @@ -1557,7 +1527,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, t1 = 1 - v.z()*v.z()*(1 + tanSTheta2) ; t2 = pDotV2d - p.z()*v.z()*tanSTheta2 ; - if (t1) + if (t1 != 0.0) { b = t2/t1; c = dist2STheta/t1 ; @@ -1580,7 +1550,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, && (radi2 >= tolORMin2) && (zi*(fSTheta - halfpi) <= 0) ) { - if (!fFullPhiSphere && rhoi2) // Check phi intersection + if (!fFullPhiSphere && (rhoi2 != 0.0)) // Check phi intersection { cosPsi = (xi*cosCPhi + yi*sinCPhi)/std::sqrt(rhoi2) ; if (cosPsi >= cosHDPhiOT) @@ -1598,7 +1568,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, } t1 = 1 - v.z()*v.z()*(1 + tanETheta2) ; t2 = pDotV2d - p.z()*v.z()*tanETheta2 ; - if (t1) + if (t1 != 0.0) { b = t2/t1 ; c = dist2ETheta/t1 ; @@ -1621,7 +1591,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p, && (radi2 >= tolORMin2) && (zi*(eTheta - halfpi) <= 0) ) { - if (!fFullPhiSphere && rhoi2) // Check phi intersection + if (!fFullPhiSphere && (rhoi2 != 0.0)) // Check phi intersection { cosPsi = (xi*cosCPhi + yi*sinCPhi)/std::sqrt(rhoi2) ; if ( cosPsi >= cosHDPhiOT ) @@ -1663,7 +1633,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p ) const // // Distance to r shells // - if (fRmin) + if (fRmin != 0.0) { safeRMin=fRmin-rds; safeRMax=rds-fRmax; @@ -1684,7 +1654,7 @@ G4double G4Sphere::DistanceToIn( const G4ThreeVector& p ) const // // Distance to phi extent // - if (!fFullPhiSphere && rho) + if (!fFullPhiSphere && (rho != 0.0)) { // Psi=angle from central phi to point // @@ -1759,7 +1729,7 @@ G4double G4Sphere::DistanceToOut( const G4ThreeVector& p, const G4double halfRmaxTolerance = fRmaxTolerance*0.5; const G4double halfRminTolerance = fRminTolerance*0.5; const G4double Rmax_plus = fRmax + halfRmaxTolerance; - const G4double Rmin_minus = (fRmin) ? fRmin-halfRminTolerance : 0; + const G4double Rmin_minus = (fRmin) != 0.0 ? fRmin-halfRminTolerance : 0; G4double t1,t2; G4double b,c,d; @@ -1840,7 +1810,7 @@ G4double G4Sphere::DistanceToOut( const G4ThreeVector& p, // Always first >=0 root, because would have passed // from outside of Rmin surface . - if (fRmin) + if (fRmin != 0.0) { c = rad2 - fRmin*fRmin; d2 = pDotV3d*pDotV3d - c; @@ -1897,7 +1867,7 @@ G4double G4Sphere::DistanceToOut( const G4ThreeVector& p, // + (rho2-pz^2tan^2(t)) = 0 // - if(fSTheta) // intersection with first cons + if(fSTheta != 0.0) // intersection with first cons { if( std::fabs(tanSTheta) > 5./kAngTolerance ) // kons is plane z=0 { @@ -1940,7 +1910,7 @@ G4double G4Sphere::DistanceToOut( const G4ThreeVector& p, if( calcNorm ) { *validNorm = true; - if (rho2) + if (rho2 != 0.0) { rhoSecTheta = std::sqrt(rho2*(1+tanSTheta2)); @@ -1966,7 +1936,7 @@ G4double G4Sphere::DistanceToOut( const G4ThreeVector& p, if( calcNorm ) { *validNorm = true; - if (rho2) + if (rho2 != 0.0) { rhoSecTheta = std::sqrt(rho2*(1+tanSTheta2)); @@ -2074,7 +2044,7 @@ G4double G4Sphere::DistanceToOut( const G4ThreeVector& p, if( calcNorm ) { *validNorm = true; - if (rho2) + if (rho2 != 0.0) { rhoSecTheta = std::sqrt(rho2*(1+tanETheta2)); *n = G4ThreeVector( p.x()/rhoSecTheta, @@ -2104,7 +2074,7 @@ G4double G4Sphere::DistanceToOut( const G4ThreeVector& p, if( calcNorm ) { *validNorm = true; - if (rho2) + if (rho2 != 0.0) { rhoSecTheta = std::sqrt(rho2*(1+tanETheta2)); *n = G4ThreeVector( p.x()/rhoSecTheta, @@ -2182,7 +2152,7 @@ G4double G4Sphere::DistanceToOut( const G4ThreeVector& p, if ( !fFullPhiSphere ) { - if ( p.x() || p.y() ) // Check if on z axis (rho not needed later) + if ( (p.x() != 0.0) || (p.y() != 0.0) ) // Check if on z axis (rho not needed later) { // pDist -ve when inside @@ -2246,8 +2216,8 @@ G4double G4Sphere::DistanceToOut( const G4ThreeVector& p, // vphi = std::atan2(v.y(),v.x()) ; - if( !((fSPhi-halfAngTolerance <= vphi) - &&(fSPhi+fDPhi+halfAngTolerance >= vphi)) ) + if( (fSPhi-halfAngTolerance > vphi) + ||(fSPhi+fDPhi+halfAngTolerance < vphi) ) { sidephi = kEPhi; if ( pDistE <= -halfCarTolerance ) { sphi = sphi2; } @@ -2467,7 +2437,7 @@ G4double G4Sphere::DistanceToOut( const G4ThreeVector& p, // On z axis + travel not || to z axis -> if phi of vector direction // within phi of shape, Step limited by rmax, else Step =0 - if ( v.x() || v.y() ) + if ( (v.x() != 0.0) || (v.y() != 0.0) ) { vphi = std::atan2(v.y(),v.x()) ; if ((fSPhi-halfAngTolerance < vphi) && (vphi < ePhi+halfAngTolerance)) @@ -2542,7 +2512,7 @@ G4double G4Sphere::DistanceToOut( const G4ThreeVector& p, xi = p.x() + snxt*v.x(); yi = p.y() + snxt*v.y(); rho2=xi*xi+yi*yi; - if (rho2) + if (rho2 != 0.0) { rhoSecTheta = std::sqrt(rho2*(1+tanSTheta2)); *n = G4ThreeVector( xi/rhoSecTheta, yi/rhoSecTheta, @@ -2568,7 +2538,7 @@ G4double G4Sphere::DistanceToOut( const G4ThreeVector& p, xi=p.x()+snxt*v.x(); yi=p.y()+snxt*v.y(); rho2=xi*xi+yi*yi; - if (rho2) + if (rho2 != 0.0) { rhoSecTheta = std::sqrt(rho2*(1+tanETheta2)); *n = G4ThreeVector( xi/rhoSecTheta, yi/rhoSecTheta, @@ -2666,7 +2636,7 @@ G4double G4Sphere::DistanceToOut( const G4ThreeVector& p ) const // safeRMax = fRmax-rds; safe = safeRMax; - if (fRmin) + if (fRmin != 0.0) { safeRMin = rds-fRmin; safe = std::min( safeRMin, safeRMax ); @@ -2732,7 +2702,7 @@ G4double G4Sphere::DistanceToOut( const G4ThreeVector& p ) const G4GeometryType G4Sphere::GetEntityType() const { - return G4String("G4Sphere"); + return {"G4Sphere"}; } ////////////////////////////////////////////////////////////////////////// @@ -2830,7 +2800,7 @@ G4ThreeVector G4Sphere::GetPointOnSurface() const G4double z = cosSTheta + (cosETheta - cosSTheta)*u; G4double rho = std::sqrt(1. - z*z); G4double phi = fDPhi*v + fSPhi; - return G4ThreeVector(r*rho*std::cos(phi), r*rho*std::sin(phi), r*z); + return { r*rho*std::cos(phi), r*rho*std::sin(phi), r*z }; } else if (select < aInner + aOuter + aPhi) // cut in phi { @@ -2839,7 +2809,7 @@ G4ThreeVector G4Sphere::GetPointOnSurface() const G4double theta = fDTheta*v + fSTheta; G4double z = std::cos(theta); G4double rho = std::sin(theta); - return G4ThreeVector(r*rho*std::cos(phi), r*rho*std::sin(phi), r*z); + return { r*rho*std::cos(phi), r*rho*std::sin(phi), r*z }; } else // cut in theta { @@ -2848,7 +2818,7 @@ G4ThreeVector G4Sphere::GetPointOnSurface() const G4double phi = fDPhi*v + fSPhi; G4double z = std::cos(theta); G4double rho = std::sin(theta); - return G4ThreeVector(r*rho*std::cos(phi), r*rho*std::sin(phi), r*z); + return { r*rho*std::cos(phi), r*rho*std::sin(phi), r*z }; } } @@ -2858,7 +2828,7 @@ G4ThreeVector G4Sphere::GetPointOnSurface() const G4VisExtent G4Sphere::GetExtent() const { - return G4VisExtent(-fRmax, fRmax,-fRmax, fRmax,-fRmax, fRmax ); + return { -fRmax, fRmax,-fRmax, fRmax,-fRmax, fRmax }; } diff --git a/source/geometry/solids/CSG/src/G4Torus.cc b/source/geometry/solids/CSG/src/G4Torus.cc index be34651413d..1f2fd73ac5a 100644 --- a/source/geometry/solids/CSG/src/G4Torus.cc +++ b/source/geometry/solids/CSG/src/G4Torus.cc @@ -62,12 +62,12 @@ using namespace CLHEP; // Constructor - check parameters, convert angles so 02PI then reset to 2PI -G4Torus::G4Torus( const G4String &pName, +G4Torus::G4Torus( const G4String& pName, G4double pRmin, G4double pRmax, G4double pRtor, G4double pSPhi, - G4double pDPhi) + G4double pDPhi ) : G4CSGSolid(pName) { SetAllParameters(pRmin, pRmax, pRtor, pSPhi, pDPhi); @@ -128,7 +128,7 @@ G4Torus::SetAllParameters( G4double pRmin, // Relative tolerances // - fRminTolerance = (fRmin) + fRminTolerance = (fRmin) != 0.0 ? 0.5*std::max( kRadTolerance, fEpsilon*(fRtor-fRmin )) : 0; fRmaxTolerance = 0.5*std::max( kRadTolerance, fEpsilon*(fRtor+fRmax) ); @@ -164,10 +164,7 @@ G4Torus::SetAllParameters( G4double pRmin, // for usage restricted to object persistency. // G4Torus::G4Torus( __void__& a ) - : G4CSGSolid(a), fRmin(0.), fRmax(0.), fRtor(0.), fSPhi(0.), - fDPhi(0.), fRminTolerance(0.), fRmaxTolerance(0. ), - kRadTolerance(0.), kAngTolerance(0.), - halfCarTolerance(0.), halfAngTolerance(0.) + : G4CSGSolid(a) { } @@ -175,22 +172,13 @@ G4Torus::G4Torus( __void__& a ) // // Destructor -G4Torus::~G4Torus() -{} +G4Torus::~G4Torus() = default; ////////////////////////////////////////////////////////////////////////// // // Copy constructor -G4Torus::G4Torus(const G4Torus& rhs) - : G4CSGSolid(rhs), fRmin(rhs.fRmin),fRmax(rhs.fRmax), - fRtor(rhs.fRtor), fSPhi(rhs.fSPhi), fDPhi(rhs.fDPhi), - fRminTolerance(rhs.fRminTolerance), fRmaxTolerance(rhs.fRmaxTolerance), - kRadTolerance(rhs.kRadTolerance), kAngTolerance(rhs.kAngTolerance), - halfCarTolerance(rhs.halfCarTolerance), - halfAngTolerance(rhs.halfAngTolerance) -{ -} +G4Torus::G4Torus(const G4Torus&) = default; ////////////////////////////////////////////////////////////////////////// // @@ -337,7 +325,7 @@ G4double G4Torus::SolveNumericJT( const G4ThreeVector& p, // check if P is on the surface, and called from DistanceToIn // DistanceToIn has to return 0.0 if particle is going inside the solid - if ( IsDistanceToIn == true ) + if ( IsDistanceToIn ) { if (std::fabs(t) < halfCarTolerance ) { @@ -358,7 +346,7 @@ G4double G4Torus::SolveNumericJT( const G4ThreeVector& p, // check if P is on the surface, and called from DistanceToOut // DistanceToIn has to return 0.0 if particle is leaving the solid - if ( IsDistanceToIn == false ) + if ( !IsDistanceToIn ) { if (std::fabs(t) < halfCarTolerance ) { @@ -455,7 +443,7 @@ G4bool G4Torus::CalculateExtent( const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // Get parameters of the solid @@ -490,7 +478,7 @@ G4bool G4Torus::CalculateExtent( const EAxis pAxis, // define vectors for bounding envelope G4ThreeVectorList pols[NDISK+1]; - for (G4int k=0; k polygons; polygons.resize(NDISK+1); @@ -586,7 +574,7 @@ EInside G4Torus::Inside( const G4ThreeVector& p ) const r = std::hypot(p.x(),p.y()); pt2 = p.z()*p.z() + (r-fRtor)*(r-fRtor); - if (fRmin) tolRMin = fRmin + fRminTolerance ; + if (fRmin != 0.0) tolRMin = fRmin + fRminTolerance ; else tolRMin = 0 ; tolRMax = fRmax - fRmaxTolerance; @@ -706,7 +694,7 @@ G4ThreeVector G4Torus::SurfaceNormal( const G4ThreeVector& p ) const pt = std::hypot(p.z(),rho-fRtor); G4double distRMax = std::fabs(pt - fRmax); - if(fRmin) distRMin = std::fabs(pt - fRmin); + if(fRmin != 0.0) distRMin = std::fabs(pt - fRmin); if( rho > delta && pt != 0.0 ) { @@ -719,7 +707,7 @@ G4ThreeVector G4Torus::SurfaceNormal( const G4ThreeVector& p ) const if ( fDPhi < twopi ) // && rho ) // old limitation against (0,0,z) { - if ( rho ) + if ( rho != 0.0 ) { pPhi = std::atan2(p.y(),p.x()); @@ -737,7 +725,7 @@ G4ThreeVector G4Torus::SurfaceNormal( const G4ThreeVector& p ) const ++noSurfaces; sumnorm += nR; } - else if( fRmin && (distRMin <= delta) ) // Must not be on both Outer and Inner + else if( (fRmin != 0.0) && (distRMin <= delta) ) // Must not be on both Outer and Inner { ++noSurfaces; sumnorm -= nR; @@ -833,7 +821,7 @@ G4ThreeVector G4Torus::ApproxSurfaceNormal( const G4ThreeVector& p ) const distRMax = std::fabs(pt - fRmax) ; - if(fRmin) // First minimum radius + if(fRmin != 0.0) // First minimum radius { distRMin = std::fabs(pt - fRmin) ; @@ -853,7 +841,7 @@ G4ThreeVector G4Torus::ApproxSurfaceNormal( const G4ThreeVector& p ) const distMin = distRMax ; side = kNRMax ; } - if ( (fDPhi < twopi) && rho ) + if ( (fDPhi < twopi) && (rho != 0.0) ) { phi = std::atan2(p.y(),p.x()) ; // Protected against (0,0,z) (above rho!=0) @@ -1006,7 +994,7 @@ G4double G4Torus::DistanceToIn( const G4ThreeVector& p, snxt = SolveNumericJT(p,v,fRmax,true); - if (fRmin) // Possible Rmin intersection + if (fRmin != 0.0) // Possible Rmin intersection { sd[0] = SolveNumericJT(p,v,fRmin,true); if ( sd[0] < snxt ) { snxt = sd[0] ; } @@ -1115,7 +1103,7 @@ G4double G4Torus::DistanceToIn( const G4ThreeVector& p ) const if (safe1 > safe2) { safe = safe1; } else { safe = safe2; } - if ( fDPhi < twopi && rho ) + if ( fDPhi < twopi && (rho != 0.0) ) { phiC = fSPhi + fDPhi*0.5 ; cosPhiC = std::cos(phiC) ; @@ -1204,7 +1192,7 @@ G4double G4Torus::DistanceToOut( const G4ThreeVector& p, // rmin - if ( fRmin ) + if ( fRmin != 0.0 ) { G4double tolRMin = fRmin + fRminTolerance ; @@ -1267,7 +1255,7 @@ G4double G4Torus::DistanceToOut( const G4ThreeVector& p, if ( vphi < fSPhi - halfAngTolerance ) { vphi += twopi; } else if ( vphi > ePhi + halfAngTolerance ) { vphi -= twopi; } - if ( p.x() || p.y() ) // Check if on z axis (rho not needed later) + if ( (p.x() != 0.0) || (p.y() != 0.0) ) // Check if on z axis (rho not needed later) { pDistS = p.x()*sinSPhi - p.y()*cosSPhi ; // pDist -ve when inside pDistE = -p.x()*sinEPhi + p.y()*cosEPhi ; @@ -1280,8 +1268,8 @@ G4double G4Torus::DistanceToOut( const G4ThreeVector& p, if( ( (fDPhi <= pi) && ( (pDistS <= halfCarTolerance) && (pDistE <= halfCarTolerance) ) ) - || ( (fDPhi > pi) && !((pDistS > halfCarTolerance) - && (pDistE > halfCarTolerance) ) ) ) + || ( (fDPhi > pi) && ((pDistS <= halfCarTolerance) + || (pDistE <= halfCarTolerance) ) ) ) { // Inside both phi *full* planes @@ -1342,8 +1330,8 @@ G4double G4Torus::DistanceToOut( const G4ThreeVector& p, { // Leaving via ending phi // - if( !( (fSPhi-halfAngTolerance <= vphi) - && (ePhi+halfAngTolerance >= vphi) ) ) + if( (fSPhi-halfAngTolerance > vphi) + || (ePhi+halfAngTolerance < vphi) ) { sidephi = kEPhi ; sphi = sphi2; @@ -1513,7 +1501,7 @@ G4double G4Torus::DistanceToOut( const G4ThreeVector& p ) const } #endif - if (fRmin) + if (fRmin != 0.0) { safeR1 = pt - fRmin ; safeR2 = fRmax - pt ; @@ -1555,7 +1543,7 @@ G4double G4Torus::DistanceToOut( const G4ThreeVector& p ) const G4GeometryType G4Torus::GetEntityType() const { - return G4String("G4Torus"); + return {"G4Torus"}; } ////////////////////////////////////////////////////////////////////////// @@ -1615,26 +1603,23 @@ G4ThreeVector G4Torus::GetPointOnSurface() const if(chose < aOut) { - return G4ThreeVector ((fRtor+fRmax*cosv)*cosu, - (fRtor+fRmax*cosv)*sinu, fRmax*sinv); + return { (fRtor+fRmax*cosv)*cosu, (fRtor+fRmax*cosv)*sinu, fRmax*sinv }; } else if( (chose >= aOut) && (chose < aOut + aIn) ) { - return G4ThreeVector ((fRtor+fRmin*cosv)*cosu, - (fRtor+fRmin*cosv)*sinu, fRmin*sinv); + return { (fRtor+fRmin*cosv)*cosu, (fRtor+fRmin*cosv)*sinu, fRmin*sinv }; } else if( (chose >= aOut + aIn) && (chose < aOut + aIn + aSide) ) { rRand = GetRadiusInRing(fRmin,fRmax); - return G4ThreeVector ((fRtor+rRand*cosv)*std::cos(fSPhi), - (fRtor+rRand*cosv)*std::sin(fSPhi), rRand*sinv); + return { (fRtor+rRand*cosv)*std::cos(fSPhi), + (fRtor+rRand*cosv)*std::sin(fSPhi), rRand*sinv }; } else { rRand = GetRadiusInRing(fRmin,fRmax); - return G4ThreeVector ((fRtor+rRand*cosv)*std::cos(fSPhi+fDPhi), - (fRtor+rRand*cosv)*std::sin(fSPhi+fDPhi), - rRand*sinv); + return { (fRtor+rRand*cosv)*std::cos(fSPhi+fDPhi), + (fRtor+rRand*cosv)*std::sin(fSPhi+fDPhi), rRand*sinv }; } } diff --git a/source/geometry/solids/CSG/src/G4Trap.cc b/source/geometry/solids/CSG/src/G4Trap.cc index 8dd43234e01..c79c390c84d 100644 --- a/source/geometry/solids/CSG/src/G4Trap.cc +++ b/source/geometry/solids/CSG/src/G4Trap.cc @@ -63,7 +63,7 @@ G4Trap::G4Trap( const G4String& pName, G4double pDy1, G4double pDx1, G4double pDx2, G4double pAlp1, G4double pDy2, G4double pDx3, G4double pDx4, - G4double pAlp2) + G4double pAlp2 ) : G4CSGSolid(pName), halfCarTolerance(0.5*kCarTolerance) { fDz = pDz; @@ -90,26 +90,26 @@ G4Trap::G4Trap( const G4String& pName, // Start with check of centering - the center of gravity trap line // should cross the origin of frame // - if (!( pt[0].z() < 0 - && pt[0].z() == pt[1].z() - && pt[0].z() == pt[2].z() - && pt[0].z() == pt[3].z() - - && pt[4].z() > 0 - && pt[4].z() == pt[5].z() - && pt[4].z() == pt[6].z() - && pt[4].z() == pt[7].z() - - && std::fabs( pt[0].z() + pt[4].z() ) < kCarTolerance - - && pt[0].y() == pt[1].y() - && pt[2].y() == pt[3].y() - && pt[4].y() == pt[5].y() - && pt[6].y() == pt[7].y() - - && std::fabs(pt[0].y()+pt[2].y()+pt[4].y()+pt[6].y()) < kCarTolerance - && std::fabs(pt[0].x()+pt[1].x()+pt[4].x()+pt[5].x() + - pt[2].x()+pt[3].x()+pt[6].x()+pt[7].x()) < kCarTolerance )) + if ( pt[0].z() >= 0 + || pt[0].z() != pt[1].z() + || pt[0].z() != pt[2].z() + || pt[0].z() != pt[3].z() + + || pt[4].z() <= 0 + || pt[4].z() != pt[5].z() + || pt[4].z() != pt[6].z() + || pt[4].z() != pt[7].z() + + || std::fabs( pt[0].z() + pt[4].z() ) >= kCarTolerance + + || pt[0].y() != pt[1].y() + || pt[2].y() != pt[3].y() + || pt[4].y() != pt[5].y() + || pt[6].y() != pt[7].y() + + || std::fabs(pt[0].y()+pt[2].y()+pt[4].y()+pt[6].y()) >= kCarTolerance + || std::fabs(pt[0].x()+pt[1].x()+pt[4].x()+pt[5].x() + + pt[2].x()+pt[3].x()+pt[6].x()+pt[7].x()) >= kCarTolerance ) { std::ostringstream message; message << "Invalid vertice coordinates for Solid: " << GetName(); @@ -229,9 +229,7 @@ G4Trap::G4Trap( __void__& a ) // // Destructor -G4Trap::~G4Trap() -{ -} +G4Trap::~G4Trap() = default; ////////////////////////////////////////////////////////////////////////// // @@ -424,7 +422,7 @@ G4bool G4Trap::MakePlane( const G4ThreeVector& p1, G4double d4 = std::abs(normal.dot(p4) + plane.d); G4double dmax = std::max(std::max(std::max(d1,d2),d3),d4); - return (dmax > 1000 * kCarTolerance) ? false : true; + return dmax <= 1000 * kCarTolerance; } ////////////////////////////////////////////////////////////////////////// @@ -519,12 +517,12 @@ G4double G4Trap::GetSurfaceArea() { {0,1,3,2}, {0,4,5,1}, {2,3,7,6}, {0,2,6,4}, {1,5,7,3}, {4,6,7,5} }; GetVertices(pt); - for (G4int i=0; i<6; ++i) + for (const auto & i : iface) { - fSurfaceArea += G4GeomTools::QuadAreaNormal(pt[iface[i][0]], - pt[iface[i][1]], - pt[iface[i][2]], - pt[iface[i][3]]).mag(); + fSurfaceArea += G4GeomTools::QuadAreaNormal(pt[i[0]], + pt[i[1]], + pt[i[2]], + pt[i[3]]).mag(); } } return fSurfaceArea; @@ -553,12 +551,12 @@ void G4Trap::BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const G4double xmin = kInfinity, xmax = -kInfinity; G4double ymin = kInfinity, ymax = -kInfinity; - for (G4int i=0; i<8; ++i) + for (const auto & i : pt) { - G4double x = pt[i].x(); + G4double x = i.x(); if (x < xmin) xmin = x; if (x > xmax) xmax = x; - G4double y = pt[i].y(); + G4double y = i.y(); if (y < ymin) ymin = y; if (y > ymax) ymax = y; } @@ -603,7 +601,7 @@ G4bool G4Trap::CalculateExtent( const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // Set bounding envelope (benv) and calculate extent @@ -771,7 +769,7 @@ G4ThreeVector G4Trap::SurfaceNormal( const G4ThreeVector& p ) const // Return normal // G4double mag2 = nx*nx + ny*ny + nz*nz; - if (mag2 == 1) return G4ThreeVector(nx,ny,nz); + if (mag2 == 1) return { nx,ny,nz }; else if (mag2 != 0) return G4ThreeVector(nx,ny,nz).unit(); // edge or corner else { @@ -814,9 +812,9 @@ G4ThreeVector G4Trap::ApproxSurfaceNormal( const G4ThreeVector& p ) const G4double distz = std::abs(p.z()) - fDz; if (dist > distz) - return G4ThreeVector(fPlanes[iside].a, fPlanes[iside].b, fPlanes[iside].c); + return { fPlanes[iside].a, fPlanes[iside].b, fPlanes[iside].c }; else - return G4ThreeVector(0, 0, (p.z() < 0) ? -1 : 1); + return { 0, 0, (G4double)((p.z() < 0) ? -1 : 1) }; } ////////////////////////////////////////////////////////////////////////// @@ -1106,7 +1104,7 @@ G4double G4Trap::DistanceToOut( const G4ThreeVector& p ) const G4GeometryType G4Trap::GetEntityType() const { - return G4String("G4Trap"); + return {"G4Trap"}; } ////////////////////////////////////////////////////////////////////////// @@ -1188,11 +1186,11 @@ G4ThreeVector G4Trap::GetPointOnSurface() const // G4double select = fAreas[5]*G4QuickRand(); G4int k = 5; - k -= (select <= fAreas[4]); - k -= (select <= fAreas[3]); - k -= (select <= fAreas[2]); - k -= (select <= fAreas[1]); - k -= (select <= fAreas[0]); + k -= (G4int)(select <= fAreas[4]); + k -= (G4int)(select <= fAreas[3]); + k -= (G4int)(select <= fAreas[2]); + k -= (G4int)(select <= fAreas[1]); + k -= (G4int)(select <= fAreas[0]); // Select sub-triangle // diff --git a/source/geometry/solids/CSG/src/G4Trd.cc b/source/geometry/solids/CSG/src/G4Trd.cc index 4790ef28e06..e45314b2045 100644 --- a/source/geometry/solids/CSG/src/G4Trd.cc +++ b/source/geometry/solids/CSG/src/G4Trd.cc @@ -78,9 +78,7 @@ G4Trd::G4Trd( __void__& a ) // // Destructor -G4Trd::~G4Trd() -{ -} +G4Trd::~G4Trd() = default; ////////////////////////////////////////////////////////////////////////// // @@ -293,7 +291,7 @@ G4bool G4Trd::CalculateExtent( const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // Set bounding envelope (benv) and calculate extent @@ -396,7 +394,7 @@ G4ThreeVector G4Trd::SurfaceNormal( const G4ThreeVector& p ) const // Return normal // - if (nsurf == 1) return G4ThreeVector(nx,ny,nz); + if (nsurf == 1) return {nx,ny,nz}; else if (nsurf != 0) return G4ThreeVector(nx,ny,nz).unit(); // edge or corner else { @@ -439,9 +437,9 @@ G4ThreeVector G4Trd::ApproxSurfaceNormal( const G4ThreeVector& p ) const G4double distz = std::abs(p.z()) - fDz; if (dist > distz) - return G4ThreeVector(fPlanes[iside].a, fPlanes[iside].b, fPlanes[iside].c); + return { fPlanes[iside].a, fPlanes[iside].b, fPlanes[iside].c }; else - return G4ThreeVector(0, 0, (p.z() < 0) ? -1 : 1); + return { 0, 0, (G4double)((p.z() < 0) ? -1 : 1) }; } ////////////////////////////////////////////////////////////////////////// @@ -676,7 +674,7 @@ G4double G4Trd::DistanceToOut( const G4ThreeVector& p ) const G4GeometryType G4Trd::GetEntityType() const { - return G4String("G4Trd"); + return {"G4Trd"}; } ////////////////////////////////////////////////////////////////////////// @@ -732,11 +730,11 @@ G4ThreeVector G4Trd::GetPointOnSurface() const // G4double select = ssurf[5]*G4QuickRand(); G4int k = 5; - k -= (select <= ssurf[4]); - k -= (select <= ssurf[3]); - k -= (select <= ssurf[2]); - k -= (select <= ssurf[1]); - k -= (select <= ssurf[0]); + k -= (G4int)(select <= ssurf[4]); + k -= (G4int)(select <= ssurf[3]); + k -= (G4int)(select <= ssurf[2]); + k -= (G4int)(select <= ssurf[1]); + k -= (G4int)(select <= ssurf[0]); // Generate point on selected surface // @@ -746,7 +744,7 @@ G4ThreeVector G4Trd::GetPointOnSurface() const { case 0: // base at -Z { - return G4ThreeVector((2.*u - 1.)*fDx1, (2.*v - 1.)*fDy1, -fDz); + return { (2.*u - 1.)*fDx1, (2.*v - 1.)*fDy1, -fDz }; } case 1: // X face at -Y { @@ -786,10 +784,10 @@ G4ThreeVector G4Trd::GetPointOnSurface() const } case 5: // base at +Z { - return G4ThreeVector((2.*u - 1.)*fDx2, (2.*v - 1.)*fDy2, fDz); + return { (2.*u - 1.)*fDx2, (2.*v - 1.)*fDy2, fDz }; } } - return G4ThreeVector(0., 0., 0.); + return {0., 0., 0.}; } ////////////////////////////////////////////////////////////////////////// diff --git a/source/geometry/solids/CSG/src/G4Tubs.cc b/source/geometry/solids/CSG/src/G4Tubs.cc index faae929ef8b..58696cdac2b 100644 --- a/source/geometry/solids/CSG/src/G4Tubs.cc +++ b/source/geometry/solids/CSG/src/G4Tubs.cc @@ -55,7 +55,7 @@ using namespace CLHEP; // Constructor - check parameters, convert angles so 02PI then reset to 2PI -G4Tubs::G4Tubs( const G4String &pName, +G4Tubs::G4Tubs( const G4String& pName, G4double pRMin, G4double pRMax, G4double pDz, G4double pSPhi, G4double pDPhi ) @@ -97,13 +97,7 @@ G4Tubs::G4Tubs( const G4String &pName, // for usage restricted to object persistency. // G4Tubs::G4Tubs( __void__& a ) - : G4CSGSolid(a), kRadTolerance(0.), kAngTolerance(0.), - fRMin(0.), fRMax(0.), fDz(0.), fSPhi(0.), fDPhi(0.), - sinCPhi(0.), cosCPhi(0.), cosHDPhi(0.), cosHDPhiOT(0.), cosHDPhiIT(0.), - sinSPhi(0.), cosSPhi(0.), sinEPhi(0.), cosEPhi(0.), - fPhiFullTube(false), fInvRmax(0.), fInvRmin(0.), - halfCarTolerance(0.), halfRadTolerance(0.), - halfAngTolerance(0.) + : G4CSGSolid(a) { } @@ -111,29 +105,13 @@ G4Tubs::G4Tubs( __void__& a ) // // Destructor -G4Tubs::~G4Tubs() -{ -} +G4Tubs::~G4Tubs() = default; ////////////////////////////////////////////////////////////////////////// // // Copy constructor -G4Tubs::G4Tubs(const G4Tubs& rhs) - : G4CSGSolid(rhs), - kRadTolerance(rhs.kRadTolerance), kAngTolerance(rhs.kAngTolerance), - fRMin(rhs.fRMin), fRMax(rhs.fRMax), fDz(rhs.fDz), - fSPhi(rhs.fSPhi), fDPhi(rhs.fDPhi), - sinCPhi(rhs.sinCPhi), cosCPhi(rhs.cosCPhi), cosHDPhi(rhs.cosHDPhi), - cosHDPhiOT(rhs.cosHDPhiOT), cosHDPhiIT(rhs.cosHDPhiIT), - sinSPhi(rhs.sinSPhi), cosSPhi(rhs.cosSPhi), - sinEPhi(rhs.sinEPhi), cosEPhi(rhs.cosEPhi), fPhiFullTube(rhs.fPhiFullTube), - fInvRmax(rhs.fInvRmax), fInvRmin(rhs.fInvRmin), - halfCarTolerance(rhs.halfCarTolerance), - halfRadTolerance(rhs.halfRadTolerance), - halfAngTolerance(rhs.halfAngTolerance) -{ -} +G4Tubs::G4Tubs(const G4Tubs&) = default; ////////////////////////////////////////////////////////////////////////// // @@ -246,7 +224,7 @@ G4bool G4Tubs::CalculateExtent( const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // Get parameters of the solid @@ -346,7 +324,7 @@ EInside G4Tubs::Inside( const G4ThreeVector& p ) const { r2 = p.x()*p.x() + p.y()*p.y() ; - if (fRMin) { tolRMin = fRMin + halfRadTolerance ; } + if (fRMin != 0.0) { tolRMin = fRMin + halfRadTolerance ; } else { tolRMin = 0 ; } tolRMax = fRMax - halfRadTolerance ; @@ -533,7 +511,7 @@ G4ThreeVector G4Tubs::SurfaceNormal( const G4ThreeVector& p ) const distSPhi = std::fabs( pPhi - fSPhi ); distEPhi = std::fabs( pPhi - fSPhi - fDPhi ); } - else if ( !fRMin ) + else if ( fRMin == 0.0 ) { distSPhi = 0.; distEPhi = 0.; @@ -548,7 +526,7 @@ G4ThreeVector G4Tubs::SurfaceNormal( const G4ThreeVector& p ) const ++noSurfaces; sumnorm += nR; } - if( fRMin && (distRMin <= halfCarTolerance) ) + if( (fRMin != 0.0) && (distRMin <= halfCarTolerance) ) { ++noSurfaces; sumnorm -= nR; @@ -634,7 +612,7 @@ G4ThreeVector G4Tubs::ApproxSurfaceNormal( const G4ThreeVector& p ) const side = kNRMax ; } } - if (!fPhiFullTube && rho ) // Protected against (0,0,z) + if (!fPhiFullTube && (rho != 0.0) ) // Protected against (0,0,z) { phi = std::atan2(p.y(),p.x()) ; @@ -776,7 +754,7 @@ G4double G4Tubs::DistanceToIn( const G4ThreeVector& p, if ((tolIRMin2 <= rho2) && (rho2 <= tolIRMax2)) { - if (!fPhiFullTube && rho2) + if (!fPhiFullTube && (rho2 != 0.0)) { // Psi = angle made with central (average) phi of shape // @@ -935,7 +913,7 @@ G4double G4Tubs::DistanceToIn( const G4ThreeVector& p, } // end if (!fPhiFullTube) } // end if (t3>tolIRMin2) } // end if (Inside Outer Radius) - if ( fRMin ) // Try inner cylinder intersection + if ( fRMin != 0.0 ) // Try inner cylinder intersection { c = (t3 - fRMin*fRMin)/t1 ; d = b*b - c ; @@ -1117,7 +1095,7 @@ G4double G4Tubs::DistanceToIn( const G4ThreeVector& p ) const else { safe = safe2; } if ( safe3 > safe ) { safe = safe3; } - if ( (!fPhiFullTube) && (rho) ) + if ( (!fPhiFullTube) && ((rho) != 0.0) ) { // Psi=angle from central phi to point // @@ -1264,7 +1242,7 @@ G4double G4Tubs::DistanceToOut( const G4ThreeVector& p, { roMin2 = t3 - t2*t2/t1 ; // min ro2 of the plane of movement - if ( fRMin && (roMin2 < fRMin*(fRMin - kRadTolerance)) ) + if ( (fRMin != 0.0) && (roMin2 < fRMin*(fRMin - kRadTolerance)) ) { deltaR = t3 - fRMin*fRMin ; b = t2/t1 ; @@ -1351,7 +1329,7 @@ G4double G4Tubs::DistanceToOut( const G4ThreeVector& p, else if ( vphi > fSPhi + fDPhi + halfAngTolerance ) { vphi -= twopi; } - if ( p.x() || p.y() ) // Check if on z axis (rho not needed later) + if ( (p.x() != 0.0) || (p.y() != 0.0) ) // Check if on z axis (rho not needed later) { // pDist -ve when inside @@ -1367,8 +1345,8 @@ G4double G4Tubs::DistanceToOut( const G4ThreeVector& p, if( ( (fDPhi <= pi) && ( (pDistS <= halfCarTolerance) && (pDistE <= halfCarTolerance) ) ) - || ( (fDPhi > pi) && !((pDistS > halfCarTolerance) - && (pDistE > halfCarTolerance) ) ) ) + || ( (fDPhi > pi) && ((pDistS <= halfCarTolerance) + || (pDistE <= halfCarTolerance) ) ) ) { // Inside both phi *full* planes @@ -1431,8 +1409,8 @@ G4double G4Tubs::DistanceToOut( const G4ThreeVector& p, { // Leaving via ending phi // - if( !((fSPhi-halfAngTolerance <= vphi) - &&(fSPhi+fDPhi+halfAngTolerance >= vphi)) ) + if( (fSPhi-halfAngTolerance > vphi) + ||(fSPhi+fDPhi+halfAngTolerance < vphi) ) { sidephi = kEPhi ; if ( pDistE <= -halfCarTolerance ) { sphi = sphi2 ; } @@ -1590,7 +1568,7 @@ G4double G4Tubs::DistanceToOut( const G4ThreeVector& p ) const } #endif - if ( fRMin ) + if ( fRMin != 0.0 ) { safeR1 = rho - fRMin ; safeR2 = fRMax - rho ; @@ -1631,7 +1609,7 @@ G4double G4Tubs::DistanceToOut( const G4ThreeVector& p ) const G4GeometryType G4Tubs::GetEntityType() const { - return G4String("G4Tubs"); + return {"G4Tubs"}; } ////////////////////////////////////////////////////////////////////////// @@ -1695,11 +1673,11 @@ G4ThreeVector G4Tubs::GetPointOnSurface() const // G4double select = ssurf[5]*G4QuickRand(); G4int k = 5; - k -= (select <= ssurf[4]); - k -= (select <= ssurf[3]); - k -= (select <= ssurf[2]); - k -= (select <= ssurf[1]); - k -= (select <= ssurf[0]); + k -= (G4int)(select <= ssurf[4]); + k -= (G4int)(select <= ssurf[3]); + k -= (G4int)(select <= ssurf[2]); + k -= (G4int)(select <= ssurf[1]); + k -= (G4int)(select <= ssurf[0]); // Generate point on selected surface // @@ -1708,24 +1686,24 @@ G4ThreeVector G4Tubs::GetPointOnSurface() const case 0: // start phi cut { G4double r = Rmin + (Rmax - Rmin)*G4QuickRand(); - return G4ThreeVector(r*cosSPhi, r*sinSPhi, hz*G4QuickRand() - fDz); + return { r*cosSPhi, r*sinSPhi, hz*G4QuickRand() - fDz }; } case 1: // end phi cut { G4double r = Rmin + (Rmax - Rmin)*G4QuickRand(); - return G4ThreeVector(r*cosEPhi, r*sinEPhi, hz*G4QuickRand() - fDz); + return { r*cosEPhi, r*sinEPhi, hz*G4QuickRand() - fDz }; } case 2: // base at -dz { G4double r = std::sqrt(RRmin + (RRmax - RRmin)*G4QuickRand()); G4double phi = fSPhi + fDPhi*G4QuickRand(); - return G4ThreeVector(r*std::cos(phi), r*std::sin(phi), -fDz); + return { r*std::cos(phi), r*std::sin(phi), -fDz }; } case 3: // base at +dz { G4double r = std::sqrt(RRmin + (RRmax - RRmin)*G4QuickRand()); G4double phi = fSPhi + fDPhi*G4QuickRand(); - return G4ThreeVector(r*std::cos(phi), r*std::sin(phi), fDz); + return { r*std::cos(phi), r*std::sin(phi), fDz }; } case 4: // external lateral surface { @@ -1733,7 +1711,7 @@ G4ThreeVector G4Tubs::GetPointOnSurface() const G4double z = hz*G4QuickRand() - fDz; G4double x = Rmax*std::cos(phi); G4double y = Rmax*std::sin(phi); - return G4ThreeVector(x,y,z); + return { x,y,z }; } case 5: // internal lateral surface { @@ -1741,10 +1719,10 @@ G4ThreeVector G4Tubs::GetPointOnSurface() const G4double z = hz*G4QuickRand() - fDz; G4double x = Rmin*std::cos(phi); G4double y = Rmin*std::sin(phi); - return G4ThreeVector(x,y,z); + return { x,y,z }; } } - return G4ThreeVector(0., 0., 0.); + return {0., 0., 0.}; } /////////////////////////////////////////////////////////////////////////// diff --git a/source/geometry/solids/CSG/src/G4UBox.cc b/source/geometry/solids/CSG/src/G4UBox.cc index 59511a872bb..3f983e1e47b 100644 --- a/source/geometry/solids/CSG/src/G4UBox.cc +++ b/source/geometry/solids/CSG/src/G4UBox.cc @@ -66,9 +66,7 @@ G4UBox::G4UBox( __void__& a ) // // Destructor -G4UBox::~G4UBox() -{ -} +G4UBox::~G4UBox() = default; ////////////////////////////////////////////////////////////////////////// // diff --git a/source/geometry/solids/CSG/src/G4UCons.cc b/source/geometry/solids/CSG/src/G4UCons.cc index 9070f9ba176..0b70634e76b 100644 --- a/source/geometry/solids/CSG/src/G4UCons.cc +++ b/source/geometry/solids/CSG/src/G4UCons.cc @@ -68,9 +68,7 @@ G4UCons::G4UCons( __void__& a ) // // Destructor -G4UCons::~G4UCons() -{ -} +G4UCons::~G4UCons() = default; ////////////////////////////////////////////////////////////////////////// // @@ -300,7 +298,7 @@ G4UCons::CalculateExtent(const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // Get parameters of the solid diff --git a/source/geometry/solids/CSG/src/G4UCutTubs.cc b/source/geometry/solids/CSG/src/G4UCutTubs.cc index 7e88ded5236..6ff5ba8b0b8 100644 --- a/source/geometry/solids/CSG/src/G4UCutTubs.cc +++ b/source/geometry/solids/CSG/src/G4UCutTubs.cc @@ -49,8 +49,8 @@ G4UCutTubs::G4UCutTubs( const G4String& pName, G4double pRMin, G4double pRMax, G4double pDz, G4double pSPhi, G4double pDPhi, - G4ThreeVector pLowNorm, - G4ThreeVector pHighNorm ) + const G4ThreeVector& pLowNorm, + const G4ThreeVector& pHighNorm ) : Base_t(pName, pRMin, pRMax, pDz, pSPhi, pDPhi, pLowNorm.x(), pLowNorm.y(), pLowNorm.z(), pHighNorm.x(), pHighNorm.y(), pHighNorm.z()) @@ -71,9 +71,7 @@ G4UCutTubs::G4UCutTubs( __void__& a ) // // Destructor -G4UCutTubs::~G4UCutTubs() -{ -} +G4UCutTubs::~G4UCutTubs() = default; ////////////////////////////////////////////////////////////////////////// // @@ -144,12 +142,12 @@ G4double G4UCutTubs::GetCosEndPhi() const G4ThreeVector G4UCutTubs::GetLowNorm () const { U3Vector lc = BottomNormal(); - return G4ThreeVector(lc.x(), lc.y(), lc.z()); + return {lc.x(), lc.y(), lc.z()}; } G4ThreeVector G4UCutTubs::GetHighNorm () const { U3Vector hc = TopNormal(); - return G4ThreeVector(hc.x(), hc.y(), hc.z()); + return {hc.x(), hc.y(), hc.z()}; } void G4UCutTubs::SetInnerRadius(G4double newRMin) @@ -353,7 +351,7 @@ G4UCutTubs::CalculateExtent(const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // Get parameters of the solid @@ -479,7 +477,7 @@ G4Polyhedron* G4UCutTubs::CreatePolyhedron() const typedef G4double G4double3[3]; typedef G4int G4int4[4]; - G4Polyhedron *ph = new G4Polyhedron; + auto ph = new G4Polyhedron; G4Polyhedron *ph1 = new G4PolyhedronTubs(GetInnerRadius(), GetOuterRadius(), GetZHalfLength(), @@ -487,8 +485,8 @@ G4Polyhedron* G4UCutTubs::CreatePolyhedron() const GetDeltaPhiAngle()); G4int nn=ph1->GetNoVertices(); G4int nf=ph1->GetNoFacets(); - G4double3* xyz = new G4double3[nn]; // number of nodes - G4int4* faces = new G4int4[nf] ; // number of faces + auto xyz = new G4double3[nn]; // number of nodes + auto faces = new G4int4[nf] ; // number of faces G4double fDz = GetZHalfLength(); for(G4int i=0; i polygons; polygons.resize(NDISK+1); diff --git a/source/geometry/solids/CSG/src/G4UTrap.cc b/source/geometry/solids/CSG/src/G4UTrap.cc index 008884a2663..360b46904a0 100644 --- a/source/geometry/solids/CSG/src/G4UTrap.cc +++ b/source/geometry/solids/CSG/src/G4UTrap.cc @@ -65,26 +65,26 @@ G4UTrap::G4UTrap( const G4String& pName, { // Start with check of centering - the center of gravity trap line // should cross the origin of frame - if (!( pt[0].z() < 0 - && pt[0].z() == pt[1].z() - && pt[0].z() == pt[2].z() - && pt[0].z() == pt[3].z() - - && pt[4].z() > 0 - && pt[4].z() == pt[5].z() - && pt[4].z() == pt[6].z() - && pt[4].z() == pt[7].z() - - && std::abs( pt[0].z() + pt[4].z() ) < kCarTolerance - - && pt[0].y() == pt[1].y() - && pt[2].y() == pt[3].y() - && pt[4].y() == pt[5].y() - && pt[6].y() == pt[7].y() - - && std::abs(pt[0].y()+pt[2].y()+pt[4].y()+pt[6].y()) < kCarTolerance - && std::abs(pt[0].x()+pt[1].x()+pt[4].x()+pt[5].x() + - pt[2].x()+pt[3].x()+pt[6].x()+pt[7].x()) < kCarTolerance )) + if ( pt[0].z() >= 0 + || pt[0].z() != pt[1].z() + || pt[0].z() != pt[2].z() + || pt[0].z() != pt[3].z() + + || pt[4].z() <= 0 + || pt[4].z() != pt[5].z() + || pt[4].z() != pt[6].z() + || pt[4].z() != pt[7].z() + + || std::abs( pt[0].z() + pt[4].z() ) >= kCarTolerance + + || pt[0].y() != pt[1].y() + || pt[2].y() != pt[3].y() + || pt[4].y() != pt[5].y() + || pt[6].y() != pt[7].y() + + || std::abs(pt[0].y()+pt[2].y()+pt[4].y()+pt[6].y()) >= kCarTolerance + || std::abs(pt[0].x()+pt[1].x()+pt[4].x()+pt[5].x() + + pt[2].x()+pt[3].x()+pt[6].x()+pt[7].x()) >= kCarTolerance ) { std::ostringstream message; message << "Invalid vertice coordinates for Solid: " << GetName(); @@ -148,9 +148,7 @@ G4UTrap::G4UTrap( __void__& a ) // // Destructor // -G4UTrap::~G4UTrap() -{ -} +G4UTrap::~G4UTrap() = default; ////////////////////////////////////////////////////////////////////////// // @@ -249,7 +247,7 @@ G4ThreeVector G4UTrap::GetSymAxis() const G4double tanThetaCphi = GetTanThetaCosPhi(); G4double tan2Theta = tanThetaSphi*tanThetaSphi + tanThetaCphi*tanThetaCphi; G4double cosTheta = 1.0 / std::sqrt(1 + tan2Theta); - return G4ThreeVector(tanThetaCphi*cosTheta, tanThetaSphi*cosTheta, cosTheta); + return {tanThetaCphi*cosTheta, tanThetaSphi*cosTheta, cosTheta}; } ////////////////////////////////////////////////////////////////////////// @@ -502,7 +500,7 @@ G4UTrap::CalculateExtent(const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // Set bounding envelope (benv) and calculate extent diff --git a/source/geometry/solids/CSG/src/G4UTrd.cc b/source/geometry/solids/CSG/src/G4UTrd.cc index 5be76591815..a0c92016417 100644 --- a/source/geometry/solids/CSG/src/G4UTrd.cc +++ b/source/geometry/solids/CSG/src/G4UTrd.cc @@ -65,9 +65,7 @@ G4UTrd::G4UTrd( __void__& a ) // // Destructor // -G4UTrd::~G4UTrd() -{ -} +G4UTrd::~G4UTrd() = default; ////////////////////////////////////////////////////////////////////////// // @@ -253,7 +251,7 @@ G4UTrd::CalculateExtent(const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // Set bounding envelope (benv) and calculate extent diff --git a/source/geometry/solids/CSG/src/G4UTubs.cc b/source/geometry/solids/CSG/src/G4UTubs.cc index c4a81421493..6335878c6b3 100644 --- a/source/geometry/solids/CSG/src/G4UTubs.cc +++ b/source/geometry/solids/CSG/src/G4UTubs.cc @@ -67,9 +67,7 @@ G4UTubs::G4UTubs( __void__& a ) // // Destructor -G4UTubs::~G4UTubs() -{ -} +G4UTubs::~G4UTubs() = default; ////////////////////////////////////////////////////////////////////////// // @@ -277,7 +275,7 @@ G4UTubs::CalculateExtent(const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // Get parameters of the solid diff --git a/source/geometry/solids/GNUmakefile b/source/geometry/solids/GNUmakefile deleted file mode 100644 index 2804bcbe47b..00000000000 --- a/source/geometry/solids/GNUmakefile +++ /dev/null @@ -1,20 +0,0 @@ -# -------------------------------------------------------------- -# Makes libraries for each subdomain: -# CSG, specific, Boolean. -# GNUmakefile for solids libraries. Gabriele Cosmo, 18/9/96. - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk -SUBDIRS = CSG specific Boolean - -all: - @for dir in $(SUBDIRS); do (cd $$dir; $(MAKE)); done - -clean: - @for dir in $(SUBDIRS); do (cd $$dir; $(MAKE) clean); done - -clean_libs: - @for dir in $(SUBDIRS); do (cd $$dir; $(MAKE) clean_libs); done diff --git a/source/geometry/solids/History b/source/geometry/solids/History index 9d15f1f2d6c..221f5008bc3 100644 --- a/source/geometry/solids/History +++ b/source/geometry/solids/History @@ -1,9 +1,13 @@ # Category geomsolids History See `CONTRIBUTING.rst` for details of **required** info/format for each entry, -which **must** added in reverse chronological order (newest at the top). It must **not** -be used as a substitute for writing good git commit messages! +which **must** added in reverse chronological order (newest at the top). +It must **not** be used as a substitute for writing good git commit messages! +------------------------------------------------------------------------------- + +## 2023-05-10 Gabriele Cosmo (geomsolids-V11-01-00) +- Applied clang-tidy fixes (readability, modernization, performance, ...). ## 2021-12-10 Ben Morgan (geomsolids-V11-00-00) - Change to new Markdown History format diff --git a/source/geometry/solids/specific/GNUmakefile b/source/geometry/solids/specific/GNUmakefile deleted file mode 100644 index 23fefddcd8d..00000000000 --- a/source/geometry/solids/specific/GNUmakefile +++ /dev/null @@ -1,34 +0,0 @@ -# ---------------------------------------------------------------------------- -# GNUmakefile for geometry/solids/specific library. Gabriele Cosmo, 05/04/00. -# ---------------------------------------------------------------------------- - -name := G4specsolids - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4GEOM_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/graphics_reps/include \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/solids/CSG/include \ - -I$(G4BASE)/geometry/management/include - -ifdef G4SPECSDEBUG - CPPFLAGS += -DG4SPECSDEBUG -endif -ifdef G4TWISTDEBUG - CPPFLAGS += -DG4TWISTDEBUG -endif -ifdef G4BBOX_EXTENT - CPPFLAGS += -DG4BBOX_EXTENT -endif - -include $(G4INSTALL)/config/common.gmk diff --git a/source/geometry/solids/specific/History b/source/geometry/solids/specific/History index 996e860908d..c3655a3effa 100644 --- a/source/geometry/solids/specific/History +++ b/source/geometry/solids/specific/History @@ -6,19 +6,26 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-06-16 Stephan Hageboeck (geom-specific-V11-00-13) -- Fixed uninitialised value in G4VCSGfaceted::SurfaceNormal(). +## 2023-06-16 Stephan Hageboeck (geom-specific-V11-01-05) +- Fix an uninitialised value in G4VCSGfaceted::SurfaceNormal(). -## 2023-03-20 Gabriele Cosmo (geom-specific-V11-00-12) +## 2023-06-12 Gabriele Cosmo (geom-specific-V11-01-04) +- Use const iterator in G4Voxelizer::GetPointVoxel(). +- Fixed use of index in G4Tet::GetPointOnSurface(). + +## 2023-05-10 Gabriele Cosmo (geom-specific-V11-01-03) +- Applied clang-tidy fixes (readability, modernization, performance, ...). + +## 2023-03-20 Gabriele Cosmo (geom-specific-V11-01-02) - Fixed more potential uninitialised values in G4PolyconeSide, G4SolidExtentList and G4VTwistSurface. -## 2023-03-13 Gabriele Cosmo +## 2023-03-13 Gabriele Cosmo (geom-specific-V11-01-01) - Fixed potential uninitialised value for boundary type in G4VTwistSurface::GetBoundaryAtPZ(). -## 2023-01-02 Evgueni Tcherniaev (geom-specific-V11-00-11) -- G4QuadrangularFacet: fixed warning message. +## 2023-01-02 Evgueni Tcherniaev (geom-specific-V11-01-00) +- G4QuadrangularFacet: Fixed warning message ## 2022-11-10 Gabriele Cosmo (geom-specific-V11-00-10) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/geometry/solids/specific/include/G4ClippablePolygon.hh b/source/geometry/solids/specific/include/G4ClippablePolygon.hh index 50c3773f4ce..18b195dd152 100644 --- a/source/geometry/solids/specific/include/G4ClippablePolygon.hh +++ b/source/geometry/solids/specific/include/G4ClippablePolygon.hh @@ -46,73 +46,73 @@ class G4VoxelLimits; class G4ClippablePolygon { - typedef std::vector G4ThreeVectorList; + using G4ThreeVectorList = std::vector; - public: // with description + public: - G4ClippablePolygon(); - virtual ~G4ClippablePolygon(); - // Constructor & virtual destructor. + G4ClippablePolygon(); + virtual ~G4ClippablePolygon(); + // Constructor & virtual destructor. - virtual void AddVertexInOrder( const G4ThreeVector vertex ); - virtual void ClearAllVertices(); + virtual void AddVertexInOrder( const G4ThreeVector vertex ); + virtual void ClearAllVertices(); - inline void SetNormal( const G4ThreeVector& newNormal ); - inline const G4ThreeVector GetNormal() const; + inline void SetNormal( const G4ThreeVector& newNormal ); + inline const G4ThreeVector GetNormal() const; - virtual G4bool Clip( const G4VoxelLimits& voxelLimit ); + virtual G4bool Clip( const G4VoxelLimits& voxelLimit ); - virtual G4bool PartialClip( const G4VoxelLimits& voxelLimit, - const EAxis IgnoreMe ); - // Clip, while ignoring the indicated axis. + virtual G4bool PartialClip( const G4VoxelLimits& voxelLimit, + const EAxis IgnoreMe ); + // Clip, while ignoring the indicated axis. - virtual void ClipAlongOneAxis( const G4VoxelLimits& voxelLimit, - const EAxis axis ); - // Clip along just one axis, as specified in voxelLimit. + virtual void ClipAlongOneAxis( const G4VoxelLimits& voxelLimit, + const EAxis axis ); + // Clip along just one axis, as specified in voxelLimit. - virtual G4bool GetExtent( const EAxis axis, - G4double& min, G4double& max ) const; + virtual G4bool GetExtent( const EAxis axis, + G4double& min, G4double& max ) const; - virtual const G4ThreeVector* GetMinPoint( const EAxis axis ) const; - // Returns pointer to minimum point along the specified axis. - // Take care! Do not use pointer after destroying parent polygon. + virtual const G4ThreeVector* GetMinPoint( const EAxis axis ) const; + // Returns pointer to minimum point along the specified axis. + // Take care! Do not use pointer after destroying parent polygon. - virtual const G4ThreeVector* GetMaxPoint( const EAxis axis ) const; - // Returns pointer to maximum point along the specified axis. - // Take care! Do not use pointer after destroying parent polygon. + virtual const G4ThreeVector* GetMaxPoint( const EAxis axis ) const; + // Returns pointer to maximum point along the specified axis. + // Take care! Do not use pointer after destroying parent polygon. - inline std::size_t GetNumVertices() const; - inline G4bool Empty() const; + inline std::size_t GetNumVertices() const; + inline G4bool Empty() const; - virtual G4bool InFrontOf( const G4ClippablePolygon& other, EAxis axis ) const; - // Decide if the polygon is in "front" of another when - // viewed along the specified axis. For our purposes here, - // it is sufficient to use the minimum extent of the - // polygon along the axis to determine this. - - virtual G4bool BehindOf( const G4ClippablePolygon& other, EAxis axis ) const; - // Decide if this polygon is behind another. - // Remarks in method "InFrontOf" are valid here too. - - virtual G4bool GetPlanerExtent( const G4ThreeVector& pointOnPlane, - const G4ThreeVector& planeNormal, - G4double& min, G4double& max ) const; - // Get min/max distance in or out of a plane. - - protected: // with description - - void ClipToSimpleLimits( G4ThreeVectorList& pPolygon, - G4ThreeVectorList& outputPolygon, - const G4VoxelLimits& pVoxelLimit ); - // pVoxelLimits must be only limited along one axis, and either - // the maximum along the axis must be +kInfinity, or the minimum - // -kInfinity - - protected: - - G4ThreeVectorList vertices; - G4ThreeVector normal; - G4double kCarTolerance; + virtual G4bool InFrontOf(const G4ClippablePolygon& other, EAxis axis) const; + // Decide if the polygon is in "front" of another when + // viewed along the specified axis. For our purposes here, + // it is sufficient to use the minimum extent of the + // polygon along the axis to determine this. + + virtual G4bool BehindOf(const G4ClippablePolygon& other, EAxis axis) const; + // Decide if this polygon is behind another. + // Remarks in method "InFrontOf" are valid here too. + + virtual G4bool GetPlanerExtent( const G4ThreeVector& pointOnPlane, + const G4ThreeVector& planeNormal, + G4double& min, G4double& max ) const; + // Get min/max distance in or out of a plane. + + protected: + + void ClipToSimpleLimits( G4ThreeVectorList& pPolygon, + G4ThreeVectorList& outputPolygon, + const G4VoxelLimits& pVoxelLimit ); + // pVoxelLimits must be only limited along one axis, and either + // the maximum along the axis must be +kInfinity, or the minimum + // -kInfinity + + protected: + + G4ThreeVectorList vertices; + G4ThreeVector normal; + G4double kCarTolerance; }; #include "G4ClippablePolygon.icc" diff --git a/source/geometry/solids/specific/include/G4ClippablePolygon.icc b/source/geometry/solids/specific/include/G4ClippablePolygon.icc index d2d36eb7adc..28ccb35482d 100644 --- a/source/geometry/solids/specific/include/G4ClippablePolygon.icc +++ b/source/geometry/solids/specific/include/G4ClippablePolygon.icc @@ -47,5 +47,5 @@ std::size_t G4ClippablePolygon::GetNumVertices() const inline G4bool G4ClippablePolygon::Empty() const { - return vertices.size()==0; + return vertices.empty(); } diff --git a/source/geometry/solids/specific/include/G4Ellipsoid.hh b/source/geometry/solids/specific/include/G4Ellipsoid.hh index b1d9f5ff394..7cda0b5285e 100644 --- a/source/geometry/solids/specific/include/G4Ellipsoid.hh +++ b/source/geometry/solids/specific/include/G4Ellipsoid.hh @@ -64,7 +64,6 @@ class G4Ellipsoid : public G4VSolid { public: - // Constructor G4Ellipsoid(const G4String& name, G4double xSemiAxis, G4double ySemiAxis, @@ -72,8 +71,7 @@ class G4Ellipsoid : public G4VSolid G4double zBottomCut = 0., G4double zTopCut = 0.); - // Destructor - virtual ~G4Ellipsoid(); + ~G4Ellipsoid() override; // Accessors inline G4double GetDx() const; @@ -90,44 +88,42 @@ class G4Ellipsoid : public G4VSolid // Standard methods void ComputeDimensions(G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep); + const G4VPhysicalVolume* pRep) override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax) const; + G4double& pmin, G4double& pmax) const override; - EInside Inside(const G4ThreeVector& p) const; - G4ThreeVector SurfaceNormal( const G4ThreeVector& p) const; + EInside Inside(const G4ThreeVector& p) const override; + G4ThreeVector SurfaceNormal(const G4ThreeVector& p) const override; G4double DistanceToIn(const G4ThreeVector& p, - const G4ThreeVector& v) const; - G4double DistanceToIn(const G4ThreeVector& p) const; + const G4ThreeVector& v) const override; + G4double DistanceToIn(const G4ThreeVector& p) const override; G4double DistanceToOut(const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm = false, G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr) const; - G4double DistanceToOut(const G4ThreeVector& p) const; + G4ThreeVector* n = nullptr) const override; + G4double DistanceToOut(const G4ThreeVector& p) const override; - G4GeometryType GetEntityType() const; + G4GeometryType GetEntityType() const override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; - std::ostream& StreamInfo(std::ostream& os) const; + std::ostream& StreamInfo(std::ostream& os) const override; - G4double GetCubicVolume(); - G4double GetSurfaceArea(); + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; - G4ThreeVector GetPointOnSurface() const; + G4ThreeVector GetPointOnSurface() const override; // Visualisation methods - void DescribeYourselfTo(G4VGraphicsScene& scene) const; - G4VisExtent GetExtent() const; - G4Polyhedron* CreatePolyhedron() const; - G4Polyhedron* GetPolyhedron () const; - - public: + void DescribeYourselfTo(G4VGraphicsScene& scene) const override; + G4VisExtent GetExtent() const override; + G4Polyhedron* CreatePolyhedron() const override; + G4Polyhedron* GetPolyhedron () const override; // Fake default constructor for usage restricted to direct object // persistency for clients requiring preallocation of memory for diff --git a/source/geometry/solids/specific/include/G4EllipticalCone.hh b/source/geometry/solids/specific/include/G4EllipticalCone.hh index 71fe15911a8..d6f65ecbe20 100644 --- a/source/geometry/solids/specific/include/G4EllipticalCone.hh +++ b/source/geometry/solids/specific/include/G4EllipticalCone.hh @@ -86,7 +86,7 @@ class G4EllipticalCone : public G4VSolid { - public: // with description + public: G4EllipticalCone(const G4String& pName, G4double pxSemiAxis, @@ -94,7 +94,7 @@ class G4EllipticalCone : public G4VSolid G4double zMax, G4double pzTopCut); - virtual ~G4EllipticalCone(); + ~G4EllipticalCone() override; // Access functions // @@ -107,52 +107,50 @@ class G4EllipticalCone : public G4VSolid inline void SetSemiAxis (G4double x, G4double y, G4double z); inline void SetZCut (G4double newzTopCut); - G4double GetCubicVolume(); - G4double GetSurfaceArea(); + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; // Solid standard methods // - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; - EInside Inside(const G4ThreeVector& p) const; + EInside Inside(const G4ThreeVector& p) const override; - G4ThreeVector SurfaceNormal( const G4ThreeVector& p) const; + G4ThreeVector SurfaceNormal(const G4ThreeVector& p) const override; G4double DistanceToIn(const G4ThreeVector& p, - const G4ThreeVector& v) const; + const G4ThreeVector& v) const override; - G4double DistanceToIn(const G4ThreeVector& p) const; + G4double DistanceToIn(const G4ThreeVector& p) const override; G4double DistanceToOut(const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm = false, G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr) const; + G4ThreeVector* n = nullptr) const override; - G4double DistanceToOut(const G4ThreeVector& p) const; + G4double DistanceToOut(const G4ThreeVector& p) const override; - G4GeometryType GetEntityType() const; + G4GeometryType GetEntityType() const override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; - G4ThreeVector GetPointOnSurface() const; + G4ThreeVector GetPointOnSurface() const override; - std::ostream& StreamInfo(std::ostream& os) const; + std::ostream& StreamInfo(std::ostream& os) const override; // Visualisation functions // - G4Polyhedron* GetPolyhedron () const; - void DescribeYourselfTo(G4VGraphicsScene& scene) const; - G4VisExtent GetExtent() const; - G4Polyhedron* CreatePolyhedron() const; + G4Polyhedron* GetPolyhedron () const override; + void DescribeYourselfTo(G4VGraphicsScene& scene) const override; + G4VisExtent GetExtent() const override; + G4Polyhedron* CreatePolyhedron() const override; - public: // without description - G4EllipticalCone(__void__&); // Fake default constructor for usage restricted to direct object // persistency for clients requiring preallocation of memory for @@ -162,7 +160,7 @@ class G4EllipticalCone : public G4VSolid G4EllipticalCone& operator=(const G4EllipticalCone& rhs); // Copy constructor and assignment operator. - protected: // without description + protected: mutable G4bool fRebuildPolyhedron = false; mutable G4Polyhedron* fpPolyhedron = nullptr; diff --git a/source/geometry/solids/specific/include/G4EllipticalTube.hh b/source/geometry/solids/specific/include/G4EllipticalTube.hh index 511d5e837d4..9127e854751 100644 --- a/source/geometry/solids/specific/include/G4EllipticalTube.hh +++ b/source/geometry/solids/specific/include/G4EllipticalTube.hh @@ -59,58 +59,58 @@ class G4EllipticalTube : public G4VSolid { - public: // with description + public: G4EllipticalTube( const G4String& name, G4double Dx, G4double Dy, G4double Dz ); - virtual ~G4EllipticalTube(); + ~G4EllipticalTube() override; // Standard methods // - void BoundingLimits( G4ThreeVector& pMin, G4ThreeVector& pMax ) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; - G4bool CalculateExtent( const EAxis pAxis, - const G4VoxelLimits& pVoxelLimit, - const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax ) const; + G4bool CalculateExtent(const EAxis pAxis, + const G4VoxelLimits& pVoxelLimit, + const G4AffineTransform& pTransform, + G4double& pmin, G4double& pmax) const override; - EInside Inside( const G4ThreeVector& p ) const; + EInside Inside( const G4ThreeVector& p ) const override; - G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const; + G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const override; G4double DistanceToIn( const G4ThreeVector& p, - const G4ThreeVector& v ) const; + const G4ThreeVector& v ) const override; - G4double DistanceToIn( const G4ThreeVector& p ) const; + G4double DistanceToIn( const G4ThreeVector& p ) const override; G4double DistanceToOut( const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm = false, G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr ) const; + G4ThreeVector* n = nullptr ) const override; - G4double DistanceToOut( const G4ThreeVector& p ) const; + G4double DistanceToOut( const G4ThreeVector& p ) const override; - G4GeometryType GetEntityType() const; + G4GeometryType GetEntityType() const override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; - std::ostream& StreamInfo(std::ostream& os) const; + std::ostream& StreamInfo(std::ostream& os) const override; - G4double GetCubicVolume(); - G4double GetSurfaceArea(); + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; - G4ThreeVector GetPointOnSurface() const; + G4ThreeVector GetPointOnSurface() const override; // Visualisation methods // - G4Polyhedron* CreatePolyhedron() const; - G4Polyhedron* GetPolyhedron () const; - void DescribeYourselfTo( G4VGraphicsScene& scene ) const; - G4VisExtent GetExtent() const; + G4Polyhedron* CreatePolyhedron() const override; + G4Polyhedron* GetPolyhedron () const override; + void DescribeYourselfTo( G4VGraphicsScene& scene ) const override; + G4VisExtent GetExtent() const override; // Accessors // @@ -122,8 +122,6 @@ class G4EllipticalTube : public G4VSolid inline void SetDy( G4double Dy ); inline void SetDz( G4double Dz ); - public: // without description - G4EllipticalTube(__void__&); // Fake default constructor for usage restricted to direct object // persistency for clients requiring preallocation of memory for diff --git a/source/geometry/solids/specific/include/G4EnclosingCylinder.hh b/source/geometry/solids/specific/include/G4EnclosingCylinder.hh index 2479f63bfb9..66f9cf1093d 100644 --- a/source/geometry/solids/specific/include/G4EnclosingCylinder.hh +++ b/source/geometry/solids/specific/include/G4EnclosingCylinder.hh @@ -44,12 +44,12 @@ class G4ReduciblePolygon; class G4EnclosingCylinder { - public: // with description + public: G4EnclosingCylinder( const G4ReduciblePolygon* rz, G4bool phiIsOpen, G4double startPhi, G4double totalPhi ); - ~G4EnclosingCylinder(); + ~G4EnclosingCylinder() = default; G4bool MustBeOutside( const G4ThreeVector& p ) const; // Decide very rapidly if the point is outside the cylinder. @@ -59,8 +59,6 @@ class G4EnclosingCylinder // Decide very rapidly if the trajectory is going to miss the cylinder. // If one is not sure, return false. - public: // without description - G4EnclosingCylinder(__void__&); // Fake default constructor for usage restricted to direct object // persistency for clients requiring preallocation of memory for diff --git a/source/geometry/solids/specific/include/G4ExtrudedSolid.hh b/source/geometry/solids/specific/include/G4ExtrudedSolid.hh index 086b20e907d..a5b5f348c49 100644 --- a/source/geometry/solids/specific/include/G4ExtrudedSolid.hh +++ b/source/geometry/solids/specific/include/G4ExtrudedSolid.hh @@ -71,7 +71,7 @@ class G4ExtrudedSolid : public G4TessellatedSolid { - public: // without description + public: struct ZSection { @@ -84,8 +84,6 @@ class G4ExtrudedSolid : public G4TessellatedSolid G4double fScale; }; - public: // with description - G4ExtrudedSolid( const G4String& pName, const std::vector& polygon, const std::vector& zsections); @@ -100,7 +98,7 @@ class G4ExtrudedSolid : public G4TessellatedSolid G4double scale2 = 1. ); // Special constructor for solid with 2 z-sections - virtual ~G4ExtrudedSolid(); + ~G4ExtrudedSolid() override; // Destructor // Accessors @@ -115,28 +113,27 @@ class G4ExtrudedSolid : public G4TessellatedSolid // Solid methods - EInside Inside(const G4ThreeVector& p) const; - G4ThreeVector SurfaceNormal(const G4ThreeVector& p) const; - G4double DistanceToIn(const G4ThreeVector& p, const G4ThreeVector& v) const; - G4double DistanceToIn(const G4ThreeVector& p ) const; + EInside Inside(const G4ThreeVector& p) const override; + G4ThreeVector SurfaceNormal(const G4ThreeVector& p) const override; + G4double DistanceToIn(const G4ThreeVector& p, + const G4ThreeVector& v) const override; + G4double DistanceToIn(const G4ThreeVector& p ) const override; G4double DistanceToOut(const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm = false, G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr) const; - G4double DistanceToOut(const G4ThreeVector& p) const; + G4ThreeVector* n = nullptr) const override; + G4double DistanceToOut(const G4ThreeVector& p) const override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; - G4GeometryType GetEntityType () const; - G4VSolid* Clone() const; - - std::ostream& StreamInfo(std::ostream& os) const; + G4double& pMin, G4double& pMax) const override; + G4GeometryType GetEntityType () const override; + G4VSolid* Clone() const override; - public: // without description + std::ostream& StreamInfo(std::ostream& os) const override; G4ExtrudedSolid(__void__&); // Fake default constructor for usage restricted to direct object diff --git a/source/geometry/solids/specific/include/G4ExtrudedSolid.icc b/source/geometry/solids/specific/include/G4ExtrudedSolid.icc index 82c74c76185..bd7cc108b84 100644 --- a/source/geometry/solids/specific/include/G4ExtrudedSolid.icc +++ b/source/geometry/solids/specific/include/G4ExtrudedSolid.icc @@ -38,7 +38,7 @@ inline G4TwoVector G4ExtrudedSolid::GetVertex(G4int index) const { G4Exception ("G4ExtrudedSolid::GetVertex()", "GeomSolids0003", FatalException, "Index outside range."); - return G4TwoVector(); + return {}; } return fPolygon[index]; } @@ -76,7 +76,7 @@ std::vector G4ExtrudedSolid::GetZSections() const inline G4bool G4ExtrudedSolid::PointInPolygon(const G4ThreeVector& p) const { - G4bool in = 0; + G4bool in = false; G4int icur = (fPolygon[fNv-1].y() > p.y()), iprev = 0; for (std::size_t i = 0; i < fNv; ++i) { diff --git a/source/geometry/solids/specific/include/G4GenericPolycone.hh b/source/geometry/solids/specific/include/G4GenericPolycone.hh index a48bc645ecf..d910f3cbb42 100644 --- a/source/geometry/solids/specific/include/G4GenericPolycone.hh +++ b/source/geometry/solids/specific/include/G4GenericPolycone.hh @@ -64,96 +64,92 @@ class G4VCSGface; class G4GenericPolycone : public G4VCSGfaceted { + public: - public: // with description + G4GenericPolycone( const G4String& name, + G4double phiStart, // initial phi starting angle + G4double phiTotal, // total phi angle + G4int numRZ, // number corners in r,z space + const G4double r[], // r coordinate of these corners + const G4double z[] ); // z coordinate of these corners - G4GenericPolycone( const G4String& name, - G4double phiStart, // initial phi starting angle - G4double phiTotal, // total phi angle - G4int numRZ, // number corners in r,z space - const G4double r[], // r coordinate of these corners - const G4double z[] ); // z coordinate of these corners + ~G4GenericPolycone() override; - virtual ~G4GenericPolycone(); + EInside Inside( const G4ThreeVector &p ) const override; + G4double DistanceToIn( const G4ThreeVector &p, + const G4ThreeVector &v ) const override; + G4double DistanceToIn( const G4ThreeVector &p ) const override; - // Methods for solid + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; + G4bool CalculateExtent(const EAxis pAxis, + const G4VoxelLimits& pVoxelLimit, + const G4AffineTransform& pTransform, + G4double& pmin, G4double& pmax) const override; - EInside Inside( const G4ThreeVector &p ) const; - G4double DistanceToIn( const G4ThreeVector &p, const G4ThreeVector &v ) const; - G4double DistanceToIn( const G4ThreeVector &p ) const; + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; - G4bool CalculateExtent(const EAxis pAxis, - const G4VoxelLimits& pVoxelLimit, - const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax) const; + G4ThreeVector GetPointOnSurface() const override; - G4double GetCubicVolume(); - G4double GetSurfaceArea(); + G4GeometryType GetEntityType() const override; - G4ThreeVector GetPointOnSurface() const; + G4VSolid* Clone() const override; - G4GeometryType GetEntityType() const; + std::ostream& StreamInfo(std::ostream& os) const override; - G4VSolid* Clone() const; + G4Polyhedron* CreatePolyhedron() const override; - std::ostream& StreamInfo(std::ostream& os) const; + G4bool Reset(); - G4Polyhedron* CreatePolyhedron() const; + // Accessors - G4bool Reset(); + inline G4double GetStartPhi() const; + inline G4double GetEndPhi() const; + inline G4double GetSinStartPhi() const; + inline G4double GetCosStartPhi() const; + inline G4double GetSinEndPhi() const; + inline G4double GetCosEndPhi() const; + inline G4bool IsOpen() const; + inline G4int GetNumRZCorner() const; + inline G4PolyconeSideRZ GetCorner(G4int index) const; - // Accessors + G4GenericPolycone(__void__&); + // Fake default constructor for usage restricted to direct object + // persistency for clients requiring preallocation of memory for + // persistifiable objects. - inline G4double GetStartPhi() const; - inline G4double GetEndPhi() const; - inline G4double GetSinStartPhi() const; - inline G4double GetCosStartPhi() const; - inline G4double GetSinEndPhi() const; - inline G4double GetCosEndPhi() const; - inline G4bool IsOpen() const; - inline G4int GetNumRZCorner() const; - inline G4PolyconeSideRZ GetCorner(G4int index) const; + G4GenericPolycone( const G4GenericPolycone& source ); + G4GenericPolycone& operator=( const G4GenericPolycone& source ); + // Copy constructor and assignment operator. - public: // without description + protected: - G4GenericPolycone(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. + // Generic initializer, called by all constructors - G4GenericPolycone( const G4GenericPolycone& source ); - G4GenericPolycone& operator=( const G4GenericPolycone& source ); - // Copy constructor and assignment operator. + void Create( G4double phiStart, // initial phi starting angle + G4double phiTotal, // total phi angle + G4ReduciblePolygon* rz ); // r/z coordinate of these corners - protected: // without description + void CopyStuff( const G4GenericPolycone& source ); - // Generic initializer, called by all constructors + // Methods for random point generation - void Create( G4double phiStart, // initial phi starting angle - G4double phiTotal, // total phi angle - G4ReduciblePolygon* rz ); // r/z coordinate of these corners + void SetSurfaceElements() const; - void CopyStuff( const G4GenericPolycone& source ); + protected: - // Methods for random point generation + // Here are our parameters - void SetSurfaceElements() const; + G4double startPhi; // Starting phi value (0 < phiStart < 2pi) + G4double endPhi; // end phi value (0 < endPhi-phiStart < 2pi) + G4bool phiIsOpen = false; // true if there is a phi segment + G4int numCorner; // number RZ points + G4PolyconeSideRZ* corners = nullptr; // corner r,z points - protected: // without description + G4EnclosingCylinder* enclosingCylinder = nullptr; // Our quick test - // Here are our parameters - - G4double startPhi; // Starting phi value (0 < phiStart < 2pi) - G4double endPhi; // end phi value (0 < endPhi-phiStart < 2pi) - G4bool phiIsOpen = false; // true if there is a phi segment - G4int numCorner; // number RZ points - G4PolyconeSideRZ* corners = nullptr; // corner r,z points - - G4EnclosingCylinder* enclosingCylinder = nullptr; // Our quick test - - struct surface_element { G4double area = 0.; G4int i0 = 0, i1 = 0, i2 = 0; }; - mutable std::vector* fElements = nullptr; + struct surface_element { G4double area = 0.; G4int i0 = 0, i1 = 0, i2 = 0; }; + mutable std::vector* fElements = nullptr; }; #include "G4GenericPolycone.icc" diff --git a/source/geometry/solids/specific/include/G4GenericTrap.hh b/source/geometry/solids/specific/include/G4GenericTrap.hh index 67bf0000b0a..ea51fea9e48 100644 --- a/source/geometry/solids/specific/include/G4GenericTrap.hh +++ b/source/geometry/solids/specific/include/G4GenericTrap.hh @@ -78,14 +78,14 @@ class G4GenericTrap : public G4VSolid { - public: // with description + public: - G4GenericTrap( const G4String& name, G4double halfZ, - const std::vector& vertices ); - // Constructor + G4GenericTrap( const G4String& name, G4double halfZ, + const std::vector& vertices ); + // Constructor - ~G4GenericTrap(); - // Destructor + ~G4GenericTrap() override; + // Destructor // Accessors @@ -100,42 +100,40 @@ class G4GenericTrap : public G4VSolid // Solid methods - EInside Inside(const G4ThreeVector& p) const; - G4ThreeVector SurfaceNormal(const G4ThreeVector& p) const; + EInside Inside(const G4ThreeVector& p) const override; + G4ThreeVector SurfaceNormal(const G4ThreeVector& p) const override; G4double DistanceToIn(const G4ThreeVector& p, - const G4ThreeVector& v) const; - G4double DistanceToIn(const G4ThreeVector& p) const; + const G4ThreeVector& v) const override; + G4double DistanceToIn(const G4ThreeVector& p) const override; G4double DistanceToOut(const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm = false, G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr) const; - G4double DistanceToOut(const G4ThreeVector& p) const; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + G4ThreeVector* n = nullptr) const override; + G4double DistanceToOut(const G4ThreeVector& p) const override; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax) const; + G4double& pmin, G4double& pmax) const override; - G4GeometryType GetEntityType() const; + G4GeometryType GetEntityType() const override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; - std::ostream& StreamInfo(std::ostream& os) const; + std::ostream& StreamInfo(std::ostream& os) const override; - G4ThreeVector GetPointOnSurface() const ; + G4ThreeVector GetPointOnSurface() const override ; - G4double GetCubicVolume(); - G4double GetSurfaceArea(); + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; // Visualisation functions - G4Polyhedron* GetPolyhedron () const; - void DescribeYourselfTo(G4VGraphicsScene& scene) const; - G4VisExtent GetExtent() const; - G4Polyhedron* CreatePolyhedron() const; - - public: // without description + G4Polyhedron* GetPolyhedron () const override; + void DescribeYourselfTo(G4VGraphicsScene& scene) const override; + G4VisExtent GetExtent() const override; + G4Polyhedron* CreatePolyhedron() const override; G4GenericTrap(__void__&); // Fake default constructor for usage restricted to direct object diff --git a/source/geometry/solids/specific/include/G4GenericTrap.icc b/source/geometry/solids/specific/include/G4GenericTrap.icc index 9bc2bbc356f..70e1b8869a6 100644 --- a/source/geometry/solids/specific/include/G4GenericTrap.icc +++ b/source/geometry/solids/specific/include/G4GenericTrap.icc @@ -49,7 +49,7 @@ G4TwoVector G4GenericTrap::GetVertex(G4int index) const { G4Exception ("G4GenericTrap::GetVertex()", "GeomSolids0003", FatalException, "Index outside range."); - return G4TwoVector(); + return {}; } return fVertices[index]; } diff --git a/source/geometry/solids/specific/include/G4Hype.hh b/source/geometry/solids/specific/include/G4Hype.hh index 0de263180d0..9645dc0c90c 100644 --- a/source/geometry/solids/specific/include/G4Hype.hh +++ b/source/geometry/solids/specific/include/G4Hype.hh @@ -67,136 +67,135 @@ class G4ClippablePolygon; class G4Hype : public G4VSolid { - public: // with description + public: - G4Hype(const G4String& pName, - G4double newInnerRadius, - G4double newOuterRadius, - G4double newInnerStereo, - G4double newOuterStereo, - G4double newHalfLenZ); + G4Hype(const G4String& pName, + G4double newInnerRadius, + G4double newOuterRadius, + G4double newInnerStereo, + G4double newOuterStereo, + G4double newHalfLenZ); - virtual ~G4Hype(); + ~G4Hype() override; - void ComputeDimensions(G4VPVParameterisation* p, - const G4int n, - const G4VPhysicalVolume* pRep); + void ComputeDimensions( G4VPVParameterisation* p, + const G4int n, + const G4VPhysicalVolume* pRep) override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; - G4bool CalculateExtent(const EAxis pAxis, - const G4VoxelLimits& pVoxelLimit, - const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4bool CalculateExtent(const EAxis pAxis, + const G4VoxelLimits& pVoxelLimit, + const G4AffineTransform& pTransform, + G4double& pMin, G4double& pMax) const override; - inline G4double GetInnerRadius () const; - inline G4double GetOuterRadius () const; - inline G4double GetZHalfLength () const; - inline G4double GetInnerStereo () const; - inline G4double GetOuterStereo () const; + inline G4double GetInnerRadius () const; + inline G4double GetOuterRadius () const; + inline G4double GetZHalfLength () const; + inline G4double GetInnerStereo () const; + inline G4double GetOuterStereo () const; - inline void SetInnerRadius (G4double newIRad); - inline void SetOuterRadius (G4double newORad); - inline void SetZHalfLength (G4double newHLZ); - inline void SetInnerStereo (G4double newISte); - inline void SetOuterStereo (G4double newOSte); + inline void SetInnerRadius (G4double newIRad); + inline void SetOuterRadius (G4double newORad); + inline void SetZHalfLength (G4double newHLZ); + inline void SetInnerStereo (G4double newISte); + inline void SetOuterStereo (G4double newOSte); - EInside Inside(const G4ThreeVector& p) const; + EInside Inside(const G4ThreeVector& p) const override; - G4ThreeVector SurfaceNormal(const G4ThreeVector& p) const; + G4ThreeVector SurfaceNormal(const G4ThreeVector& p) const override; - G4double DistanceToIn(const G4ThreeVector& p, const G4ThreeVector& v) const; - G4double DistanceToIn(const G4ThreeVector& p) const; - G4double DistanceToOut(const G4ThreeVector& p, const G4ThreeVector& v, - const G4bool calcNorm = false, - G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr) const; - G4double DistanceToOut(const G4ThreeVector& p) const; + G4double DistanceToIn(const G4ThreeVector& p, + const G4ThreeVector& v) const override; + G4double DistanceToIn(const G4ThreeVector& p) const override; + G4double DistanceToOut(const G4ThreeVector& p, const G4ThreeVector& v, + const G4bool calcNorm = false, + G4bool* validNorm = nullptr, + G4ThreeVector* n = nullptr) const override; + G4double DistanceToOut(const G4ThreeVector& p) const override; - G4GeometryType GetEntityType() const; + G4GeometryType GetEntityType() const override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; - std::ostream& StreamInfo(std::ostream& os) const; + std::ostream& StreamInfo(std::ostream& os) const override; - G4double GetCubicVolume(); - G4double GetSurfaceArea(); + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; - G4ThreeVector GetPointOnSurface() const; + G4ThreeVector GetPointOnSurface() const override; - void DescribeYourselfTo (G4VGraphicsScene& scene) const; - G4VisExtent GetExtent () const; - G4Polyhedron* CreatePolyhedron () const; - G4Polyhedron* GetPolyhedron () const; + void DescribeYourselfTo (G4VGraphicsScene& scene) const override; + G4VisExtent GetExtent () const override; + G4Polyhedron* CreatePolyhedron () const override; + G4Polyhedron* GetPolyhedron () const override; - public: // without description + G4Hype(__void__&); + // Fake default constructor for usage restricted to direct object + // persistency for clients requiring preallocation of memory for + // persistifiable objects. - G4Hype(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. + G4Hype(const G4Hype& rhs); + G4Hype& operator=(const G4Hype& rhs); + // Copy constructor and assignment operator. - G4Hype(const G4Hype& rhs); - G4Hype& operator=(const G4Hype& rhs); - // Copy constructor and assignment operator. + protected: - protected: // without description + inline G4bool InnerSurfaceExists() const; + // whether we have an inner surface or not - inline G4bool InnerSurfaceExists() const; - // whether we have an inner surface or not + static G4double ApproxDistOutside( G4double pr, G4double pz, + G4double r0, G4double tanPhi ); + static G4double ApproxDistInside( G4double pr, G4double pz, + G4double r0, G4double tan2Phi ); + // approximate isotropic distance to hyperbolic surface - static G4double ApproxDistOutside( G4double pr, G4double pz, - G4double r0, G4double tanPhi ); - static G4double ApproxDistInside( G4double pr, G4double pz, - G4double r0, G4double tan2Phi ); - // approximate isotropic distance to hyperbolic surface + inline G4double HypeInnerRadius2(G4double zVal) const; + inline G4double HypeOuterRadius2(G4double zVal) const; + // values of hype radius at a given Z - inline G4double HypeInnerRadius2(G4double zVal) const; - inline G4double HypeOuterRadius2(G4double zVal) const; - // values of hype radius at a given Z + static G4int IntersectHype( const G4ThreeVector &p, const G4ThreeVector &v, + G4double r2, G4double tan2Phi, G4double s[2] ); + // intersection with hyperbolic surface - static G4int IntersectHype( const G4ThreeVector &p, const G4ThreeVector &v, - G4double r2, G4double tan2Phi, G4double s[2] ); - // intersection with hyperbolic surface + private: - protected: + G4double asinh(G4double arg); - G4double innerRadius; - G4double outerRadius; - G4double halfLenZ; - G4double innerStereo; - G4double outerStereo; + protected: - // precalculated parameters, squared quantities + G4double innerRadius; + G4double outerRadius; + G4double halfLenZ; + G4double innerStereo; + G4double outerStereo; - G4double tanInnerStereo; - G4double tanOuterStereo; - G4double tanInnerStereo2; // squared tan of Inner Stereo angle - G4double tanOuterStereo2; // squared tan of Outer Stereo angle - G4double innerRadius2; // squared Inner Radius - G4double outerRadius2; // squared Outer Radius - G4double endInnerRadius2; // squared endcap Inner Radius - G4double endOuterRadius2; // squared endcap Outer Radius - G4double endInnerRadius; // endcap Inner Radius - G4double endOuterRadius; // endcap Outer Radius + // precalculated parameters, squared quantities - // Used by distanceToOut + G4double tanInnerStereo; + G4double tanOuterStereo; + G4double tanInnerStereo2; // squared tan of Inner Stereo angle + G4double tanOuterStereo2; // squared tan of Outer Stereo angle + G4double innerRadius2; // squared Inner Radius + G4double outerRadius2; // squared Outer Radius + G4double endInnerRadius2; // squared endcap Inner Radius + G4double endOuterRadius2; // squared endcap Outer Radius + G4double endInnerRadius; // endcap Inner Radius + G4double endOuterRadius; // endcap Outer Radius - enum ESide {outerFace,innerFace,leftCap, rightCap}; + // Used by distanceToOut - private: + enum ESide {outerFace,innerFace,leftCap, rightCap}; - G4double asinh(G4double arg); + private: - private: + G4double fCubicVolume = 0.0; + G4double fSurfaceArea = 0.0; - G4double fCubicVolume = 0.0; - G4double fSurfaceArea = 0.0; + G4double fHalfTol; - G4double fHalfTol; - - mutable G4bool fRebuildPolyhedron = false; - mutable G4Polyhedron* fpPolyhedron = nullptr; + mutable G4bool fRebuildPolyhedron = false; + mutable G4Polyhedron* fpPolyhedron = nullptr; }; #include "G4Hype.icc" diff --git a/source/geometry/solids/specific/include/G4IntersectingCone.hh b/source/geometry/solids/specific/include/G4IntersectingCone.hh index 715ffc97786..01cbaaf3019 100644 --- a/source/geometry/solids/specific/include/G4IntersectingCone.hh +++ b/source/geometry/solids/specific/include/G4IntersectingCone.hh @@ -56,8 +56,6 @@ class G4IntersectingCone inline G4double ZLo() const { return zLo; } inline G4double ZHi() const { return zHi; } - public: // without description - G4IntersectingCone(__void__&); // Fake default constructor for usage restricted to direct object // persistency for clients requiring preallocation of memory for diff --git a/source/geometry/solids/specific/include/G4Paraboloid.hh b/source/geometry/solids/specific/include/G4Paraboloid.hh index c771e6e57d2..be7f266ce64 100644 --- a/source/geometry/solids/specific/include/G4Paraboloid.hh +++ b/source/geometry/solids/specific/include/G4Paraboloid.hh @@ -66,14 +66,14 @@ class G4Paraboloid : public G4VSolid { - public: // with description + public: G4Paraboloid(const G4String& pName, G4double pDz, G4double pR1, G4double pR2); - virtual ~G4Paraboloid(); + ~G4Paraboloid() override; // Access functions @@ -81,8 +81,8 @@ class G4Paraboloid : public G4VSolid inline G4double GetRadiusMinusZ() const; inline G4double GetRadiusPlusZ() const; - inline G4double GetCubicVolume(); - inline G4double GetSurfaceArea(); + inline G4double GetCubicVolume() override; + inline G4double GetSurfaceArea() override; inline G4double CalculateSurfaceArea() const; // Modifiers functions @@ -93,38 +93,36 @@ class G4Paraboloid : public G4VSolid // Solid standard methods - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax) const; - EInside Inside(const G4ThreeVector& p) const; - G4ThreeVector SurfaceNormal( const G4ThreeVector& p) const; + G4double& pmin, G4double& pmax) const override; + EInside Inside(const G4ThreeVector& p) const override; + G4ThreeVector SurfaceNormal( const G4ThreeVector& p) const override; G4double DistanceToIn(const G4ThreeVector& p, - const G4ThreeVector& v) const; - G4double DistanceToIn(const G4ThreeVector& p) const; + const G4ThreeVector& v) const override; + G4double DistanceToIn(const G4ThreeVector& p) const override; G4double DistanceToOut(const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm = false, G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr) const; - G4double DistanceToOut(const G4ThreeVector& p) const; + G4ThreeVector* n = nullptr) const override; + G4double DistanceToOut(const G4ThreeVector& p) const override; - G4GeometryType GetEntityType() const; + G4GeometryType GetEntityType() const override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; - std::ostream& StreamInfo(std::ostream& os) const; + std::ostream& StreamInfo(std::ostream& os) const override; - G4ThreeVector GetPointOnSurface() const; + G4ThreeVector GetPointOnSurface() const override; // Visualisation functions - void DescribeYourselfTo(G4VGraphicsScene& scene) const; - G4Polyhedron* CreatePolyhedron() const; - G4Polyhedron* GetPolyhedron () const; - - public: // without description + void DescribeYourselfTo(G4VGraphicsScene& scene) const override; + G4Polyhedron* CreatePolyhedron() const override; + G4Polyhedron* GetPolyhedron () const override; G4Paraboloid(__void__&); // Fake default constructor for usage restricted to direct object @@ -135,7 +133,7 @@ class G4Paraboloid : public G4VSolid G4Paraboloid& operator=(const G4Paraboloid& rhs); // Copy constructor and assignment operator. - protected: // without description + protected: mutable G4bool fRebuildPolyhedron = false; mutable G4Polyhedron* fpPolyhedron = nullptr; diff --git a/source/geometry/solids/specific/include/G4PolyPhiFace.hh b/source/geometry/solids/specific/include/G4PolyPhiFace.hh index 69ffff1dd05..0bb96574f21 100644 --- a/source/geometry/solids/specific/include/G4PolyPhiFace.hh +++ b/source/geometry/solids/specific/include/G4PolyPhiFace.hh @@ -65,17 +65,17 @@ struct G4PolyPhiFaceVertex struct G4PolyPhiFaceEdge { - G4PolyPhiFaceEdge(): v0(0), v1(0), tr(.0), tz(0.), length(0.) {} - G4PolyPhiFaceVertex *v0, *v1; // Corners - G4double tr, tz, // Unit vector along edge - length; // Length of edge + G4PolyPhiFaceEdge() {} + G4PolyPhiFaceVertex *v0{nullptr}, *v1{nullptr}; // Corners + G4double tr{.0}, tz{0.}, // Unit vector along edge + length{0.}; // Length of edge G4ThreeVector norm3D; // 3D edge normal vector }; class G4PolyPhiFace : public G4VCSGface { - public: // with description + public: G4PolyPhiFace( const G4ReduciblePolygon* rz, G4double phi, G4double deltaPhi, G4double phiOther ); @@ -87,7 +87,7 @@ class G4PolyPhiFace : public G4VCSGface // | | +--> z // [0]---------[3] - virtual ~G4PolyPhiFace(); + ~G4PolyPhiFace() override; // Destructor. Removes edges and corners. G4PolyPhiFace( const G4PolyPhiFace &source ); @@ -97,33 +97,32 @@ class G4PolyPhiFace : public G4VCSGface G4bool Intersect( const G4ThreeVector& p, const G4ThreeVector& v, G4bool outgoing, G4double surfTolerance, G4double& distance, G4double& distFromSurface, - G4ThreeVector& normal, G4bool& allBehind ); + G4ThreeVector& normal, G4bool& allBehind ) override; - G4double Distance( const G4ThreeVector& p, G4bool outgoing ); + G4double Distance( const G4ThreeVector& p, G4bool outgoing ) override; EInside Inside( const G4ThreeVector& p, G4double tolerance, - G4double* bestDistance ); + G4double* bestDistance ) override; - G4ThreeVector Normal( const G4ThreeVector& p, G4double* bestDistance ); + G4ThreeVector Normal( const G4ThreeVector& p, + G4double* bestDistance ) override; - G4double Extent( const G4ThreeVector axis ); + G4double Extent( const G4ThreeVector axis ) override; void CalculateExtent( const EAxis axis, const G4VoxelLimits &voxelLimit, const G4AffineTransform& tranform, - G4SolidExtentList& extentList ); + G4SolidExtentList& extentList ) override; - inline G4VCSGface* Clone(); + inline G4VCSGface* Clone() override; // Allocates on the heap a clone of this face. - G4double SurfaceArea(); - G4double SurfaceTriangle( G4ThreeVector p1, G4ThreeVector p2, - G4ThreeVector p3, G4ThreeVector* p4); - G4ThreeVector GetPointOnFace(); + G4double SurfaceArea() override; + G4double SurfaceTriangle( const G4ThreeVector& p1, const G4ThreeVector& p2, + const G4ThreeVector& p3, G4ThreeVector* p4); + G4ThreeVector GetPointOnFace() override; // Auxiliary methods for determination of points on surface. - public: // without description - G4PolyPhiFace(__void__&); // Fake default constructor for usage restricted to direct object // persistency for clients requiring preallocation of memory for @@ -156,30 +155,28 @@ class G4PolyPhiFace : public G4VCSGface void CopyStuff( const G4PolyPhiFace& source ); - protected: - // Functions used for Triangulation in Case of generic Polygone. // The triangulation is used for GetPointOnFace() - G4double Area2( G4TwoVector a, G4TwoVector b, G4TwoVector c); + G4double Area2( const G4TwoVector& a, const G4TwoVector& b, const G4TwoVector& c); // Calculation of 2*Area of Triangle with Sign - G4bool Left( G4TwoVector a, G4TwoVector b, G4TwoVector c ); - G4bool LeftOn( G4TwoVector a, G4TwoVector b, G4TwoVector c ); - G4bool Collinear( G4TwoVector a, G4TwoVector b, G4TwoVector c ); + G4bool Left( const G4TwoVector& a, const G4TwoVector& b, const G4TwoVector& c ); + G4bool LeftOn( const G4TwoVector& a, const G4TwoVector& b, const G4TwoVector& c ); + G4bool Collinear( const G4TwoVector& a, const G4TwoVector& b, const G4TwoVector& c ); // Boolean functions for sign of Surface - G4bool IntersectProp( G4TwoVector a, G4TwoVector b, - G4TwoVector c, G4TwoVector d ); + G4bool IntersectProp( const G4TwoVector& a, const G4TwoVector& b, + const G4TwoVector& c, const G4TwoVector& d ); // Boolean function for finding proper intersection of two // line segments (a,b) and (c,d). - G4bool Between( G4TwoVector a, G4TwoVector b, G4TwoVector c ); + G4bool Between( const G4TwoVector& a, const G4TwoVector& b, const G4TwoVector& c ); // Boolean function for determining if point c is between a and b // where the three points (a,b,c) are on the same line. - G4bool Intersect( G4TwoVector a, G4TwoVector b, - G4TwoVector c, G4TwoVector d ); + G4bool Intersect( const G4TwoVector& a, const G4TwoVector& b, + const G4TwoVector& c, const G4TwoVector& d ); // Boolean function for finding proper intersection or not // of two line segments (a,b) and (c,d). diff --git a/source/geometry/solids/specific/include/G4Polycone.hh b/source/geometry/solids/specific/include/G4Polycone.hh index 1fe5eac1727..c4dada6cd8d 100644 --- a/source/geometry/solids/specific/include/G4Polycone.hh +++ b/source/geometry/solids/specific/include/G4Polycone.hh @@ -74,113 +74,109 @@ class G4VCSGface; class G4Polycone : public G4VCSGfaceted { + public: - public: // with description + G4Polycone( const G4String& name, + G4double phiStart, // initial phi starting angle + G4double phiTotal, // total phi angle + G4int numZPlanes, // number of z planes + const G4double zPlane[], // position of z planes + const G4double rInner[], // tangent distance to inner surface + const G4double rOuter[] ); // tangent distance to outer surface - G4Polycone( const G4String& name, - G4double phiStart, // initial phi starting angle - G4double phiTotal, // total phi angle - G4int numZPlanes, // number of z planes - const G4double zPlane[], // position of z planes - const G4double rInner[], // tangent distance to inner surface - const G4double rOuter[] ); // tangent distance to outer surface + G4Polycone( const G4String& name, + G4double phiStart, // initial phi starting angle + G4double phiTotal, // total phi angle + G4int numRZ, // number corners in r,z space + const G4double r[], // r coordinate of these corners + const G4double z[] ); // z coordinate of these corners - G4Polycone( const G4String& name, - G4double phiStart, // initial phi starting angle - G4double phiTotal, // total phi angle - G4int numRZ, // number corners in r,z space - const G4double r[], // r coordinate of these corners - const G4double z[] ); // z coordinate of these corners + ~G4Polycone() override; - virtual ~G4Polycone(); + EInside Inside( const G4ThreeVector& p ) const override; + G4double DistanceToIn( const G4ThreeVector& p, + const G4ThreeVector& v ) const override; + G4double DistanceToIn( const G4ThreeVector& p ) const override; - // Methods for solid + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; + G4bool CalculateExtent(const EAxis pAxis, + const G4VoxelLimits& pVoxelLimit, + const G4AffineTransform& pTransform, + G4double& pmin, G4double& pmax) const override; - EInside Inside( const G4ThreeVector& p ) const; - G4double DistanceToIn( const G4ThreeVector& p, const G4ThreeVector& v ) const; - G4double DistanceToIn( const G4ThreeVector& p ) const; + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; - G4bool CalculateExtent(const EAxis pAxis, - const G4VoxelLimits& pVoxelLimit, - const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax) const; + G4ThreeVector GetPointOnSurface() const override; - G4double GetCubicVolume(); - G4double GetSurfaceArea(); + void ComputeDimensions( G4VPVParameterisation* p, + const G4int n, + const G4VPhysicalVolume* pRep ) override; - G4ThreeVector GetPointOnSurface() const; + G4GeometryType GetEntityType() const override; - void ComputeDimensions( G4VPVParameterisation* p, - const G4int n, - const G4VPhysicalVolume* pRep ); + G4VSolid* Clone() const override; - G4GeometryType GetEntityType() const; + std::ostream& StreamInfo(std::ostream& os) const override; - G4VSolid* Clone() const; + G4Polyhedron* CreatePolyhedron() const override; - std::ostream& StreamInfo(std::ostream& os) const; + G4bool Reset(); - G4Polyhedron* CreatePolyhedron() const; + // Accessors - G4bool Reset(); + inline G4double GetStartPhi() const; + inline G4double GetEndPhi() const; + inline G4double GetSinStartPhi() const; + inline G4double GetCosStartPhi() const; + inline G4double GetSinEndPhi() const; + inline G4double GetCosEndPhi() const; + inline G4bool IsOpen() const; + inline G4int GetNumRZCorner() const; + inline G4PolyconeSideRZ GetCorner(G4int index) const; + inline G4PolyconeHistorical* GetOriginalParameters() const; + inline void SetOriginalParameters(G4PolyconeHistorical* pars); - // Accessors + G4Polycone(__void__&); + // Fake default constructor for usage restricted to direct object + // persistency for clients requiring preallocation of memory for + // persistifiable objects. - inline G4double GetStartPhi() const; - inline G4double GetEndPhi() const; - inline G4double GetSinStartPhi() const; - inline G4double GetCosStartPhi() const; - inline G4double GetSinEndPhi() const; - inline G4double GetCosEndPhi() const; - inline G4bool IsOpen() const; - inline G4int GetNumRZCorner() const; - inline G4PolyconeSideRZ GetCorner(G4int index) const; - inline G4PolyconeHistorical* GetOriginalParameters() const; - inline void SetOriginalParameters(G4PolyconeHistorical* pars); + G4Polycone( const G4Polycone& source ); + G4Polycone &operator=( const G4Polycone& source ); + // Copy constructor and assignment operator. - public: // without description + protected: - G4Polycone(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. + // Generic initializer, called by all constructors - G4Polycone( const G4Polycone& source ); - G4Polycone &operator=( const G4Polycone& source ); - // Copy constructor and assignment operator. + G4bool SetOriginalParameters(G4ReduciblePolygon* rz); - protected: // without description + void Create( G4double phiStart, // initial phi starting angle + G4double phiTotal, // total phi angle + G4ReduciblePolygon* rz ); // r/z coordinate of these corners - // Generic initializer, called by all constructors + void CopyStuff( const G4Polycone& source ); - G4bool SetOriginalParameters(G4ReduciblePolygon* rz); + // Methods for random point generation - void Create( G4double phiStart, // initial phi starting angle - G4double phiTotal, // total phi angle - G4ReduciblePolygon* rz ); // r/z coordinate of these corners + void SetSurfaceElements() const; - void CopyStuff( const G4Polycone& source ); + protected: - // Methods for random point generation + // Here are our parameters - void SetSurfaceElements() const; + G4double startPhi; // Starting phi value (0 < phiStart < 2pi) + G4double endPhi; // End phi value (0 < endPhi-phiStart < 2pi) + G4bool phiIsOpen = false; // True if there is a phi segment + G4int numCorner; // Number RZ points + G4PolyconeSideRZ* corners = nullptr; // Corner r,z points + G4PolyconeHistorical* original_parameters = nullptr; // Original input pars - protected: // without description + G4EnclosingCylinder* enclosingCylinder = nullptr; // Our quick test - // Here are our parameters - - G4double startPhi; // Starting phi value (0 < phiStart < 2pi) - G4double endPhi; // End phi value (0 < endPhi-phiStart < 2pi) - G4bool phiIsOpen = false; // True if there is a phi segment - G4int numCorner; // Number RZ points - G4PolyconeSideRZ* corners = nullptr; // Corner r,z points - G4PolyconeHistorical* original_parameters = nullptr; // Original input params - - G4EnclosingCylinder* enclosingCylinder = nullptr; // Our quick test - - struct surface_element { G4double area = 0.; G4int i0 = 0, i1 = 0, i2 = 0; }; - mutable std::vector* fElements = nullptr; + struct surface_element { G4double area = 0.; G4int i0 = 0, i1 = 0, i2 = 0; }; + mutable std::vector* fElements = nullptr; }; #include "G4Polycone.icc" diff --git a/source/geometry/solids/specific/include/G4PolyconeHistorical.hh b/source/geometry/solids/specific/include/G4PolyconeHistorical.hh index 71044c702b2..3a4c8eb1801 100644 --- a/source/geometry/solids/specific/include/G4PolyconeHistorical.hh +++ b/source/geometry/solids/specific/include/G4PolyconeHistorical.hh @@ -39,6 +39,7 @@ class G4PolyconeHistorical { public: + G4PolyconeHistorical(); G4PolyconeHistorical( G4int z_planes ); ~G4PolyconeHistorical(); diff --git a/source/geometry/solids/specific/include/G4PolyconeSide.hh b/source/geometry/solids/specific/include/G4PolyconeSide.hh index 5643ffe9003..099a6182351 100644 --- a/source/geometry/solids/specific/include/G4PolyconeSide.hh +++ b/source/geometry/solids/specific/include/G4PolyconeSide.hh @@ -94,37 +94,36 @@ class G4PolyconeSide : public G4VCSGface const G4PolyconeSideRZ* nextRZ, G4double phiStart, G4double deltaPhi, G4bool phiIsOpen, G4bool isAllBehind = false ); - virtual ~G4PolyconeSide(); + ~G4PolyconeSide() override; G4PolyconeSide( const G4PolyconeSide& source ); G4PolyconeSide& operator=( const G4PolyconeSide& source ); - G4bool Intersect( const G4ThreeVector& p, const G4ThreeVector& v, - G4bool outgoing, G4double surfTolerance, - G4double& distance, G4double &distFromSurface, - G4ThreeVector& normal, G4bool& isAllBehind ); + G4bool Intersect(const G4ThreeVector& p, const G4ThreeVector& v, + G4bool outgoing, G4double surfTolerance, + G4double& distance, G4double &distFromSurface, + G4ThreeVector& normal, G4bool& isAllBehind) override; - G4double Distance( const G4ThreeVector& p, G4bool outgoing ); + G4double Distance( const G4ThreeVector& p, G4bool outgoing ) override; EInside Inside( const G4ThreeVector& p, G4double tolerance, - G4double* bestDistance ); + G4double* bestDistance ) override; - G4ThreeVector Normal( const G4ThreeVector& p, G4double* bestDistance ); + G4ThreeVector Normal( const G4ThreeVector& p, + G4double* bestDistance ) override; - G4double Extent( const G4ThreeVector axis ); + G4double Extent( const G4ThreeVector axis ) override; void CalculateExtent( const EAxis axis, const G4VoxelLimits& voxelLimit, const G4AffineTransform& tranform, - G4SolidExtentList& extentList ); + G4SolidExtentList& extentList ) override; - G4VCSGface* Clone() { return new G4PolyconeSide( *this ); } + G4VCSGface* Clone() override { return new G4PolyconeSide( *this ); } - G4double SurfaceArea(); - G4ThreeVector GetPointOnFace(); + G4double SurfaceArea() override; + G4ThreeVector GetPointOnFace() override; - public: // without description - G4PolyconeSide(__void__&); // Fake default constructor for usage restricted to direct object // persistency for clients requiring preallocation of memory for diff --git a/source/geometry/solids/specific/include/G4Polyhedra.hh b/source/geometry/solids/specific/include/G4Polyhedra.hh index 114a811cf38..7ad083bf47b 100644 --- a/source/geometry/solids/specific/include/G4Polyhedra.hh +++ b/source/geometry/solids/specific/include/G4Polyhedra.hh @@ -73,125 +73,121 @@ class G4ReduciblePolygon; class G4Polyhedra : public G4VCSGfaceted { - public: // with description + public: - G4Polyhedra( const G4String& name, - G4double phiStart, // initial phi starting angle - G4double phiTotal, // total phi angle - G4int numSide, // number sides - G4int numZPlanes, // number of z planes - const G4double zPlane[], // position of z planes - const G4double rInner[], // tangent distance to inner surface - const G4double rOuter[] ); // tangent distance to outer surface + G4Polyhedra(const G4String& name, + G4double phiStart, // initial phi starting angle + G4double phiTotal, // total phi angle + G4int numSide, // number sides + G4int numZPlanes, // number of z planes + const G4double zPlane[], // position of z planes + const G4double rInner[], // tangent distance to inner surface + const G4double rOuter[] ); // tangent distance to outer surface - G4Polyhedra( const G4String& name, - G4double phiStart, // initial phi starting angle - G4double phiTotal, // total phi angle - G4int numSide, // number sides - G4int numRZ, // number corners in r,z space - const G4double r[], // r coordinate of these corners - const G4double z[] ); // z coordinate of these corners + G4Polyhedra(const G4String& name, + G4double phiStart, // initial phi starting angle + G4double phiTotal, // total phi angle + G4int numSide, // number sides + G4int numRZ, // number corners in r,z space + const G4double r[], // r coordinate of these corners + const G4double z[] ); // z coordinate of these corners - virtual ~G4Polyhedra(); + ~G4Polyhedra() override; - // Methods for solid + EInside Inside( const G4ThreeVector& p ) const override; + G4double DistanceToIn( const G4ThreeVector& p, + const G4ThreeVector& v ) const override; + G4double DistanceToIn( const G4ThreeVector& p ) const override; - EInside Inside( const G4ThreeVector& p ) const; - G4double DistanceToIn( const G4ThreeVector& p, - const G4ThreeVector& v ) const; - G4double DistanceToIn( const G4ThreeVector& p ) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; + G4bool CalculateExtent(const EAxis pAxis, + const G4VoxelLimits& pVoxelLimit, + const G4AffineTransform& pTransform, + G4double& pmin, G4double& pmax) const override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; - G4bool CalculateExtent(const EAxis pAxis, - const G4VoxelLimits& pVoxelLimit, - const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax) const; + void ComputeDimensions( G4VPVParameterisation* p, + const G4int n, + const G4VPhysicalVolume* pRep) override; - void ComputeDimensions( G4VPVParameterisation* p, - const G4int n, - const G4VPhysicalVolume* pRep); + G4GeometryType GetEntityType() const override; - G4GeometryType GetEntityType() const; + G4VSolid* Clone() const override; - G4VSolid* Clone() const; + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; - G4double GetCubicVolume(); - G4double GetSurfaceArea(); + G4ThreeVector GetPointOnSurface() const override; - G4ThreeVector GetPointOnSurface() const; + std::ostream& StreamInfo( std::ostream& os ) const override; - std::ostream& StreamInfo( std::ostream& os ) const; + G4Polyhedron* CreatePolyhedron() const override; - G4Polyhedron* CreatePolyhedron() const; + G4bool Reset(); - G4bool Reset(); + // Accessors - // Accessors + inline G4int GetNumSide() const; + inline G4double GetStartPhi() const; + inline G4double GetEndPhi() const; + inline G4double GetSinStartPhi() const; + inline G4double GetCosStartPhi() const; + inline G4double GetSinEndPhi() const; + inline G4double GetCosEndPhi() const; + inline G4bool IsOpen() const; + inline G4bool IsGeneric() const; + inline G4int GetNumRZCorner() const; + inline G4PolyhedraSideRZ GetCorner( const G4int index ) const; - inline G4int GetNumSide() const; - inline G4double GetStartPhi() const; - inline G4double GetEndPhi() const; - inline G4double GetSinStartPhi() const; - inline G4double GetCosStartPhi() const; - inline G4double GetSinEndPhi() const; - inline G4double GetCosEndPhi() const; - inline G4bool IsOpen() const; - inline G4bool IsGeneric() const; - inline G4int GetNumRZCorner() const; - inline G4PolyhedraSideRZ GetCorner( const G4int index ) const; + inline G4PolyhedraHistorical* GetOriginalParameters() const; + // Returns internal scaled parameters. + inline void SetOriginalParameters(G4PolyhedraHistorical* pars); + // Sets internal parameters. Parameters 'Rmin' and 'Rmax' in input must + // be scaled first by a factor computed as 'cos(0.5*phiTotal/theNumSide)', + // if not already scaled. - inline G4PolyhedraHistorical* GetOriginalParameters() const; - // Returns internal scaled parameters. - inline void SetOriginalParameters(G4PolyhedraHistorical* pars); - // Sets internal parameters. Parameters 'Rmin' and 'Rmax' in input must - // be scaled first by a factor computed as 'cos(0.5*phiTotal/theNumSide)', - // if not already scaled. + G4Polyhedra(__void__&); + // Fake default constructor for usage restricted to direct object + // persistency for clients requiring preallocation of memory for + // persistifiable objects. - public: // without description + G4Polyhedra( const G4Polyhedra& source ); + G4Polyhedra& operator=( const G4Polyhedra& source ); + // Copy constructor and assignment operator. - G4Polyhedra(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. + protected: - G4Polyhedra( const G4Polyhedra& source ); - G4Polyhedra& operator=( const G4Polyhedra& source ); - // Copy constructor and assignment operator. + void SetOriginalParameters(G4ReduciblePolygon* rz); + // Sets internal parameters for the generic constructor. - protected: // without description + void Create( G4double phiStart, // initial phi starting angle + G4double phiTotal, // total phi angle + G4int numSide, // number sides + G4ReduciblePolygon* rz ); // rz coordinates + // Generates the shape and is called by each constructor, after the + // conversion of the arguments - void SetOriginalParameters(G4ReduciblePolygon* rz); - // Sets internal parameters for the generic constructor. + void CopyStuff( const G4Polyhedra& source ); + void DeleteStuff(); - void Create( G4double phiStart, // initial phi starting angle - G4double phiTotal, // total phi angle - G4int numSide, // number sides - G4ReduciblePolygon* rz ); // rz coordinates - // Generates the shape and is called by each constructor, after the - // conversion of the arguments + // Methods for generation of random points on surface - void CopyStuff( const G4Polyhedra& source ); - void DeleteStuff(); + void SetSurfaceElements() const; - // Methods for generation of random points on surface + protected: - void SetSurfaceElements() const; + G4int numSide = 0; // Number of sides + G4double startPhi; // Starting phi value (0 < phiStart < 2pi) + G4double endPhi; // end phi value (0 < endPhi-phiStart < 2pi) + G4bool phiIsOpen = false; // true if there is a phi segment + G4bool genericPgon = false; // true if created through 2nd generic ctor + G4int numCorner = 0; // number RZ points + G4PolyhedraSideRZ* corners = nullptr; // our corners + G4PolyhedraHistorical* original_parameters = nullptr; // original input pars - protected: // without description + G4EnclosingCylinder* enclosingCylinder = nullptr; - G4int numSide = 0; // Number of sides - G4double startPhi; // Starting phi value (0 < phiStart < 2pi) - G4double endPhi; // end phi value (0 < endPhi-phiStart < 2pi) - G4bool phiIsOpen = false; // true if there is a phi segment - G4bool genericPgon = false; // true if created through 2nd generic constructor - G4int numCorner = 0; // number RZ points - G4PolyhedraSideRZ* corners = nullptr; // our corners - G4PolyhedraHistorical* original_parameters = nullptr; // original input params - - G4EnclosingCylinder* enclosingCylinder = nullptr; - - struct surface_element { G4double area = 0.; G4int i0 = 0, i1 = 0, i2 = 0; }; - mutable std::vector* fElements = nullptr; + struct surface_element { G4double area=0.; G4int i0=0, i1=0, i2=0; }; + mutable std::vector* fElements = nullptr; }; #include "G4Polyhedra.icc" diff --git a/source/geometry/solids/specific/include/G4PolyhedraSide.hh b/source/geometry/solids/specific/include/G4PolyhedraSide.hh index e0c6ed75e14..066ab58f675 100644 --- a/source/geometry/solids/specific/include/G4PolyhedraSide.hh +++ b/source/geometry/solids/specific/include/G4PolyhedraSide.hh @@ -88,7 +88,7 @@ using G4PhSideManager = G4GeomSplitter; class G4PolyhedraSide : public G4VCSGface { - public: // with description + public: G4PolyhedraSide( const G4PolyhedraSideRZ* prevRZ, const G4PolyhedraSideRZ* tail, @@ -97,7 +97,7 @@ class G4PolyhedraSide : public G4VCSGface G4int numSide, G4double phiStart, G4double phiTotal, G4bool phiIsOpen, G4bool isAllBehind = false ); - virtual ~G4PolyhedraSide(); + ~G4PolyhedraSide() override; G4PolyhedraSide( const G4PolyhedraSide& source ); G4PolyhedraSide& operator=( const G4PolyhedraSide& source ); @@ -105,39 +105,36 @@ class G4PolyhedraSide : public G4VCSGface G4bool Intersect( const G4ThreeVector& p, const G4ThreeVector& v, G4bool outgoing, G4double surfTolerance, G4double& distance, G4double& distFromSurface, - G4ThreeVector& normal, G4bool& allBehind ); + G4ThreeVector& normal, G4bool& allBehind ) override; - G4double Distance( const G4ThreeVector& p, G4bool outgoing ); + G4double Distance( const G4ThreeVector& p, G4bool outgoing ) override; EInside Inside( const G4ThreeVector &p, G4double tolerance, - G4double *bestDistance ); + G4double *bestDistance ) override; - G4ThreeVector Normal( const G4ThreeVector& p, G4double* bestDistance ); + G4ThreeVector Normal( const G4ThreeVector& p, + G4double* bestDistance ) override; - G4double Extent( const G4ThreeVector axis ); + G4double Extent( const G4ThreeVector axis ) override; void CalculateExtent( const EAxis axis, const G4VoxelLimits &voxelLimit, const G4AffineTransform& tranform, - G4SolidExtentList& extentList ); - - G4VCSGface* Clone() { return new G4PolyhedraSide( *this ); } + G4SolidExtentList& extentList ) override; - public: // without description + G4VCSGface* Clone() override { return new G4PolyhedraSide( *this ); } // Methods used for GetPointOnSurface() - G4double SurfaceTriangle( G4ThreeVector p1, - G4ThreeVector p2, - G4ThreeVector p3, + G4double SurfaceTriangle( const G4ThreeVector& p1, + const G4ThreeVector& p2, + const G4ThreeVector& p3, G4ThreeVector* p4 ); - G4ThreeVector GetPointOnPlane( G4ThreeVector p0, G4ThreeVector p1, - G4ThreeVector p2, G4ThreeVector p3, + G4ThreeVector GetPointOnPlane( const G4ThreeVector& p0, const G4ThreeVector& p1, + const G4ThreeVector& p2, const G4ThreeVector& p3, G4double* Area ); - G4double SurfaceArea(); - G4ThreeVector GetPointOnFace(); - - public: // without description + G4double SurfaceArea() override; + G4ThreeVector GetPointOnFace() override; G4PolyhedraSide(__void__&); // Fake default constructor for usage restricted to direct object @@ -156,14 +153,14 @@ class G4PolyhedraSide : public G4VCSGface struct sG4PolyhedraSideVec; // Secret recipe for allowing friend struct sG4PolyhedraSideVec; // protected nested structures - typedef struct sG4PolyhedraSideEdge + using G4PolyhedraSideEdge = struct sG4PolyhedraSideEdge { G4ThreeVector normal; // Unit normal to this edge G4ThreeVector corner[2]; // The two corners of this phi edge G4ThreeVector cornNorm[2]; // The normals of these corners - } G4PolyhedraSideEdge; + }; - typedef struct sG4PolyhedraSideVec + using G4PolyhedraSideVec = struct sG4PolyhedraSideVec { G4ThreeVector normal, // Normal (point out of the shape) center, // Point in center of side @@ -172,7 +169,7 @@ class G4PolyhedraSide : public G4VCSGface G4PolyhedraSideEdge* edges[2]; // The phi boundary edges to this side // [0]=low phi [1]=high phi G4ThreeVector edgeNorm[2]; // RZ edge normals [i] at {r[i],z[i]} - } G4PolyhedraSideVec; + }; protected: diff --git a/source/geometry/solids/specific/include/G4QuadrangularFacet.hh b/source/geometry/solids/specific/include/G4QuadrangularFacet.hh index e400e9e15ab..b4fb3947bd5 100644 --- a/source/geometry/solids/specific/include/G4QuadrangularFacet.hh +++ b/source/geometry/solids/specific/include/G4QuadrangularFacet.hh @@ -60,48 +60,49 @@ class G4QuadrangularFacet : public G4VFacet { - public: // with description + public: G4QuadrangularFacet (const G4ThreeVector& Pt0, const G4ThreeVector& vt1, const G4ThreeVector& vt2, const G4ThreeVector& vt3, G4FacetVertexType); G4QuadrangularFacet (const G4QuadrangularFacet& right); - ~G4QuadrangularFacet (); + ~G4QuadrangularFacet () override; G4QuadrangularFacet& operator=(const G4QuadrangularFacet& right); - G4VFacet* GetClone (); + G4VFacet* GetClone () override; G4ThreeVector Distance (const G4ThreeVector& p); - G4double Distance (const G4ThreeVector& p, G4double minDist); + G4double Distance (const G4ThreeVector& p, G4double minDist) override; G4double Distance (const G4ThreeVector& p, G4double minDist, - const G4bool outgoing); - G4double Extent (const G4ThreeVector axis); + const G4bool outgoing) override; + G4double Extent (const G4ThreeVector axis) override; G4bool Intersect (const G4ThreeVector& p, const G4ThreeVector& v, const G4bool outgoing, G4double& distance, - G4double& distFromSurface, G4ThreeVector& normal); - G4ThreeVector GetSurfaceNormal () const; + G4double& distFromSurface, + G4ThreeVector& normal) override; + G4ThreeVector GetSurfaceNormal () const override; - G4double GetArea () const; - G4ThreeVector GetPointOnFace () const; + G4double GetArea () const override; + G4ThreeVector GetPointOnFace () const override; - G4GeometryType GetEntityType () const; + G4GeometryType GetEntityType () const override; - inline G4bool IsDefined () const; - inline G4int GetNumberOfVertices () const; - inline G4ThreeVector GetVertex (G4int i) const; - inline void SetVertex (G4int i, const G4ThreeVector& val); - inline void SetVertices(std::vector* v); + inline G4bool IsDefined () const override; + inline G4int GetNumberOfVertices () const override; + inline G4ThreeVector GetVertex (G4int i) const override; + inline void SetVertex (G4int i, const G4ThreeVector& val) override; + inline void SetVertices(std::vector* v) override; - inline G4double GetRadius () const; - inline G4ThreeVector GetCircumcentre () const; + inline G4double GetRadius () const override; + inline G4ThreeVector GetCircumcentre () const override; private: - inline G4int GetVertexIndex (G4int i) const; - inline void SetVertexIndex (G4int i, G4int val); + inline G4int GetVertexIndex (G4int i) const override; + inline void SetVertexIndex (G4int i, G4int val) override; - inline G4int AllocatedMemory(); + inline G4int AllocatedMemory() override; private: diff --git a/source/geometry/solids/specific/include/G4ReduciblePolygon.hh b/source/geometry/solids/specific/include/G4ReduciblePolygon.hh index e610e36e89a..63ed63f1a6e 100644 --- a/source/geometry/solids/specific/include/G4ReduciblePolygon.hh +++ b/source/geometry/solids/specific/include/G4ReduciblePolygon.hh @@ -54,24 +54,24 @@ class G4ReduciblePolygon friend class G4ReduciblePolygonIterator; public: - // - // Creator: via simple a/b arrays - // + G4ReduciblePolygon( const G4double a[], const G4double b[], G4int n ); + // Creator: via simple a/b arrays - // - // Creator: a special version for G4Polygon and G4Polycone - // that takes two a points at planes of b - // (where a==r and b==z for the GEANT3 classic PCON and PGON) - // G4ReduciblePolygon( const G4double rmin[], const G4double rmax[], const G4double z[], G4int n ); - + // Creator: a special version for G4Polygon and G4Polycone + // that takes two a points at planes of b + // (where a==r and b==z for the GEANT3 classic PCON and PGON) + + G4ReduciblePolygon(const G4ReduciblePolygon&) = delete; + G4ReduciblePolygon& operator=(const G4ReduciblePolygon&) = delete; + // Deleted copy constructor and assignment operator. + virtual ~G4ReduciblePolygon(); - // // Queries - // + inline G4int NumVertices() const { return numVertices; } inline G4double Amin() const { return aMin; } @@ -81,9 +81,8 @@ class G4ReduciblePolygon void CopyVertices( G4double a[], G4double b[] ) const; - // // Manipulations - // + void ScaleA( G4double scale ); void ScaleB( G4double scale ); @@ -93,7 +92,6 @@ class G4ReduciblePolygon void ReverseOrder(); void StartWithZMin(); - // // Tests // G4double Area(); @@ -103,8 +101,6 @@ class G4ReduciblePolygon void Print(); // Debugging only - public: // without description - G4ReduciblePolygon(__void__&); // Fake default constructor for usage restricted to direct object // persistency for clients requiring preallocation of memory for @@ -116,34 +112,23 @@ class G4ReduciblePolygon void CalculateMaxMin(); - // // Below are member values that are *always* kept up to date (please!) // G4double aMin, aMax, bMin, bMax; G4int numVertices = 0; - // // A subclass which holds the vertices in a single-linked list // - // Yeah, call me an old-fashioned c hacker, but I cannot make - // myself use the rogue tools for this trivial list. - // struct ABVertex; // Secret recipe for allowing friend struct ABVertex; // protected nested structures struct ABVertex { - ABVertex() : a(0.), b(0.), next(0) {} - G4double a, b; - ABVertex *next; + ABVertex() {} + G4double a{0.}, b{0.}; + ABVertex *next{nullptr}; }; ABVertex* vertexHead = nullptr; - - private: - - G4ReduciblePolygon(const G4ReduciblePolygon&); - G4ReduciblePolygon& operator=(const G4ReduciblePolygon&); - // Private copy constructor and assignment operator. }; // A companion class for iterating over the vertices of our polygon. @@ -154,9 +139,12 @@ class G4ReduciblePolygonIterator public: G4ReduciblePolygonIterator( const G4ReduciblePolygon* theSubject ) - { subject = theSubject; current = nullptr; } + { + subject = theSubject; current = nullptr; + } void Begin() { current = subject->vertexHead; } + G4bool Next() { if (current != nullptr) current=current->next; diff --git a/source/geometry/solids/specific/include/G4SolidExtentList.hh b/source/geometry/solids/specific/include/G4SolidExtentList.hh index cb6ba27b440..85ff4cdcbd1 100644 --- a/source/geometry/solids/specific/include/G4SolidExtentList.hh +++ b/source/geometry/solids/specific/include/G4SolidExtentList.hh @@ -46,27 +46,26 @@ class G4SolidExtentList { public: - G4SolidExtentList(); - G4SolidExtentList( const EAxis targetAxis, - const G4VoxelLimits& voxelLimits ); - ~G4SolidExtentList(); + G4SolidExtentList(); + G4SolidExtentList( const EAxis targetAxis, + const G4VoxelLimits& voxelLimits ); + ~G4SolidExtentList(); + void AddSurface( const G4ClippablePolygon& surface ); - void AddSurface( const G4ClippablePolygon& surface ); - - G4bool GetExtent( G4double& min, G4double& max ) const; + G4bool GetExtent( G4double& min, G4double& max ) const; protected: - EAxis axis; // Target axis - G4bool limited = false; // True if limited - G4double minLimit; // ... min limit - G4double maxLimit; // ... max limit + EAxis axis; // Target axis + G4bool limited = false; // True if limited + G4double minLimit; // ... min limit + G4double maxLimit; // ... max limit - G4ClippablePolygon minSurface, // Minimum surface within limits - maxSurface, // Maximum - minAbove, // Minimum surface totally above max limit - maxBelow; // Maximum surface totally below min limit + G4ClippablePolygon minSurface, // Minimum surface within limits + maxSurface, // Maximum + minAbove, // Minimum surface totally above max limit + maxBelow; // Maximum surface totally below min limit }; #endif diff --git a/source/geometry/solids/specific/include/G4SolidsWorkspace.hh b/source/geometry/solids/specific/include/G4SolidsWorkspace.hh index 16fbcdbb023..d474783802a 100644 --- a/source/geometry/solids/specific/include/G4SolidsWorkspace.hh +++ b/source/geometry/solids/specific/include/G4SolidsWorkspace.hh @@ -55,43 +55,43 @@ class G4SolidsWorkspace { public: - using pool_type = G4TWorkspacePool; + using pool_type = G4TWorkspacePool; - G4SolidsWorkspace(G4bool verbose = false); - ~G4SolidsWorkspace(); + G4SolidsWorkspace(G4bool verbose = false); + ~G4SolidsWorkspace() = default; - void UseWorkspace(); // Take ownership - void ReleaseWorkspace(); // Release ownership - void DestroyWorkspace(); // Release ownership and destroy + void UseWorkspace(); // Take ownership + void ReleaseWorkspace(); // Release ownership + void DestroyWorkspace(); // Release ownership and destroy - void InitialiseWorkspace(); - // To be called at start of each run (especially 2nd and further runs) + void InitialiseWorkspace(); + // To be called at start of each run (especially 2nd and further runs) - void SetVerbose(G4bool v) { fVerbose=v; } - G4bool GetVerbose() { return fVerbose; } + inline void SetVerbose(G4bool v) { fVerbose=v; } + inline G4bool GetVerbose() { return fVerbose; } - static pool_type* GetPool(); + static pool_type* GetPool(); - protected: // Implementation methods + protected: - void InitialiseSolids(); + void InitialiseSolids(); private: - // Helper pointers - can be per instance or shared - // - G4PlSideManager* fpPolyconeSideSIM = nullptr; - G4PhSideManager* fpPolyhedraSideSIM = nullptr; + // Helper pointers - can be per instance or shared + // + G4PlSideManager* fpPolyconeSideSIM = nullptr; + G4PhSideManager* fpPolyhedraSideSIM = nullptr; - // Per Instance variables - // NOTE: the ownership of the Data Arrays is IN this object + // Per Instance variables + // NOTE: the ownership of the Data Arrays is IN this object - // Store SubInstanceManager object pointers (SIM pointers) - // - G4PlSideData* fPolyconeSideOffset = nullptr; - G4PhSideData* fPolyhedraSideOffset = nullptr; + // Store SubInstanceManager object pointers (SIM pointers) + // + G4PlSideData* fPolyconeSideOffset = nullptr; + G4PhSideData* fPolyhedraSideOffset = nullptr; - G4bool fVerbose = false; + G4bool fVerbose = false; }; #endif // G4SOLIDSWORKSPACE_HH diff --git a/source/geometry/solids/specific/include/G4TessellatedSolid.hh b/source/geometry/solids/specific/include/G4TessellatedSolid.hh index 209c6678aae..dbaf0b7704b 100644 --- a/source/geometry/solids/specific/include/G4TessellatedSolid.hh +++ b/source/geometry/solids/specific/include/G4TessellatedSolid.hh @@ -126,10 +126,10 @@ public: class G4TessellatedSolid : public G4VSolid { - public: // with description + public: G4TessellatedSolid (); - virtual ~G4TessellatedSolid (); + ~G4TessellatedSolid () override; G4TessellatedSolid (const G4String& name); @@ -148,17 +148,17 @@ class G4TessellatedSolid : public G4VSolid G4int GetNumberOfFacets () const; G4int GetFacetIndex (const G4ThreeVector& p) const; - virtual EInside Inside (const G4ThreeVector& p) const; - virtual G4ThreeVector SurfaceNormal(const G4ThreeVector& p) const; - virtual G4double DistanceToIn(const G4ThreeVector& p, - const G4ThreeVector& v)const; - virtual G4double DistanceToIn(const G4ThreeVector& p) const; - virtual G4double DistanceToOut(const G4ThreeVector& p) const; - virtual G4double DistanceToOut(const G4ThreeVector& p, + EInside Inside (const G4ThreeVector& p) const override; + G4ThreeVector SurfaceNormal(const G4ThreeVector& p) const override; + G4double DistanceToIn(const G4ThreeVector& p, + const G4ThreeVector& v)const override; + G4double DistanceToIn(const G4ThreeVector& p) const override; + G4double DistanceToOut(const G4ThreeVector& p) const override; + G4double DistanceToOut(const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm, G4bool* validNorm, - G4ThreeVector* norm) const; + G4ThreeVector* norm) const override; virtual G4bool Normal (const G4ThreeVector& p, G4ThreeVector& n) const; virtual G4double SafetyFromOutside(const G4ThreeVector& p, @@ -166,14 +166,14 @@ class G4TessellatedSolid : public G4VSolid virtual G4double SafetyFromInside (const G4ThreeVector& p, G4bool aAccurate = false) const; - virtual G4GeometryType GetEntityType () const; - virtual std::ostream& StreamInfo(std::ostream& os) const; + G4GeometryType GetEntityType () const override; + std::ostream& StreamInfo(std::ostream& os) const override; - virtual G4VSolid* Clone() const; + G4VSolid* Clone() const override; - virtual G4ThreeVector GetPointOnSurface() const; - virtual G4double GetSurfaceArea(); - virtual G4double GetCubicVolume(); + G4ThreeVector GetPointOnSurface() const override; + G4double GetSurfaceArea() override; + G4double GetCubicVolume() override; void SetSolidClosed (const G4bool t); G4bool GetSolidClosed () const; @@ -183,12 +183,12 @@ class G4TessellatedSolid : public G4VSolid inline G4Voxelizer& GetVoxels(); - virtual G4bool CalculateExtent(const EAxis pAxis, - const G4VoxelLimits& pVoxelLimit, - const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4bool CalculateExtent(const EAxis pAxis, + const G4VoxelLimits& pVoxelLimit, + const G4AffineTransform& pTransform, + G4double& pMin, G4double& pMax) const override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4double GetMinXExtent () const; G4double GetMaxXExtent () const; @@ -197,16 +197,16 @@ class G4TessellatedSolid : public G4VSolid G4double GetMinZExtent () const; G4double GetMaxZExtent () const; - virtual G4Polyhedron* CreatePolyhedron () const; - virtual G4Polyhedron* GetPolyhedron () const; - virtual void DescribeYourselfTo (G4VGraphicsScene& scene) const; - virtual G4VisExtent GetExtent () const; + G4Polyhedron* CreatePolyhedron () const override; + G4Polyhedron* GetPolyhedron () const override; + void DescribeYourselfTo (G4VGraphicsScene& scene) const override; + G4VisExtent GetExtent () const override; G4int AllocatedMemoryWithoutVoxels(); G4int AllocatedMemory(); void DisplayAllocatedMemory(); - private: // without description + private: void Initialize(); diff --git a/source/geometry/solids/specific/include/G4Tet.hh b/source/geometry/solids/specific/include/G4Tet.hh index 79fd210ad62..289e2514260 100644 --- a/source/geometry/solids/specific/include/G4Tet.hh +++ b/source/geometry/solids/specific/include/G4Tet.hh @@ -54,10 +54,8 @@ class G4Tet : public G4VSolid { + public: - public: // with description - - // Constructor G4Tet(const G4String& pName, const G4ThreeVector& anchor, const G4ThreeVector& p1, @@ -65,10 +63,8 @@ class G4Tet : public G4VSolid const G4ThreeVector& p3, G4bool* degeneracyFlag = nullptr); - // Destructor - virtual ~G4Tet(); + ~G4Tet() override; - // Modifier void SetVertices(const G4ThreeVector& anchor, const G4ThreeVector& p1, const G4ThreeVector& p2, @@ -82,8 +78,8 @@ class G4Tet : public G4VSolid G4ThreeVector& p3) const; std::vector GetVertices() const; - // Set warning flag - depricated (dummy) - void PrintWarnings(G4bool) {}; + // Set warning flag - deprecated (dummy) + inline void PrintWarnings(G4bool) {}; // Return true if the tetrahedron is degenerate G4bool CheckDegeneracy(const G4ThreeVector& p0, @@ -94,45 +90,43 @@ class G4Tet : public G4VSolid // Standard methods void ComputeDimensions(G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep); + const G4VPhysicalVolume* pRep) override; void SetBoundingLimits(const G4ThreeVector& pMin, const G4ThreeVector& pMax); - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax) const; + G4double& pmin, G4double& pmax) const override; - EInside Inside(const G4ThreeVector& p) const; - G4ThreeVector SurfaceNormal( const G4ThreeVector& p) const; + EInside Inside(const G4ThreeVector& p) const override; + G4ThreeVector SurfaceNormal( const G4ThreeVector& p) const override; G4double DistanceToIn(const G4ThreeVector& p, - const G4ThreeVector& v) const; - G4double DistanceToIn(const G4ThreeVector& p) const; + const G4ThreeVector& v) const override; + G4double DistanceToIn(const G4ThreeVector& p) const override; G4double DistanceToOut(const G4ThreeVector& p, const G4ThreeVector& v, const G4bool calcNorm = false, G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr) const; - G4double DistanceToOut(const G4ThreeVector& p) const; + G4ThreeVector* n = nullptr) const override; + G4double DistanceToOut(const G4ThreeVector& p) const override; - G4GeometryType GetEntityType() const; + G4GeometryType GetEntityType() const override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; - std::ostream& StreamInfo(std::ostream& os) const; + std::ostream& StreamInfo(std::ostream& os) const override; - G4double GetCubicVolume(); - G4double GetSurfaceArea(); + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; - G4ThreeVector GetPointOnSurface() const; + G4ThreeVector GetPointOnSurface() const override; // Methods for visualization - void DescribeYourselfTo (G4VGraphicsScene& scene) const; - G4VisExtent GetExtent () const; - G4Polyhedron* CreatePolyhedron () const; - G4Polyhedron* GetPolyhedron () const; - - public: // without description + void DescribeYourselfTo (G4VGraphicsScene& scene) const override; + G4VisExtent GetExtent () const override; + G4Polyhedron* CreatePolyhedron () const override; + G4Polyhedron* GetPolyhedron () const override; // Fake default constructor for usage restricted to direct object // persistency for clients requiring preallocation of memory for diff --git a/source/geometry/solids/specific/include/G4TriangularFacet.hh b/source/geometry/solids/specific/include/G4TriangularFacet.hh index 2d6e59b8448..c2a4399e367 100644 --- a/source/geometry/solids/specific/include/G4TriangularFacet.hh +++ b/source/geometry/solids/specific/include/G4TriangularFacet.hh @@ -59,51 +59,52 @@ class G4TriangularFacet : public G4VFacet { - public: // with desctiption + public: G4TriangularFacet (); - ~G4TriangularFacet (); + ~G4TriangularFacet () override; G4TriangularFacet (const G4ThreeVector& vt0, const G4ThreeVector& vt1, const G4ThreeVector& vt2, G4FacetVertexType); G4TriangularFacet (const G4TriangularFacet& right); - G4TriangularFacet ( G4TriangularFacet&& right); + G4TriangularFacet ( G4TriangularFacet&& right) noexcept ; G4TriangularFacet& operator=(const G4TriangularFacet& right); - G4TriangularFacet& operator=( G4TriangularFacet&& right); + G4TriangularFacet& operator=( G4TriangularFacet&& right) noexcept ; - G4VFacet* GetClone (); + G4VFacet* GetClone () override; G4TriangularFacet* GetFlippedFacet (); G4ThreeVector Distance (const G4ThreeVector& p); - G4double Distance (const G4ThreeVector& p, G4double minDist); + G4double Distance (const G4ThreeVector& p, G4double minDist) override; G4double Distance (const G4ThreeVector& p, G4double minDist, - const G4bool outgoing); - G4double Extent (const G4ThreeVector axis); + const G4bool outgoing) override; + G4double Extent (const G4ThreeVector axis) override; G4bool Intersect (const G4ThreeVector& p, const G4ThreeVector& v, const G4bool outgoing, G4double& distance, - G4double& distFromSurface, G4ThreeVector& normal); - G4double GetArea () const; - G4ThreeVector GetPointOnFace () const; + G4double& distFromSurface, + G4ThreeVector& normal) override; + G4double GetArea () const override; + G4ThreeVector GetPointOnFace () const override; - G4ThreeVector GetSurfaceNormal () const; - void SetSurfaceNormal (G4ThreeVector normal); + G4ThreeVector GetSurfaceNormal () const override; + void SetSurfaceNormal (const G4ThreeVector& normal); - G4GeometryType GetEntityType () const; + G4GeometryType GetEntityType () const override; - inline G4bool IsDefined () const; - inline G4int GetNumberOfVertices () const; - inline G4ThreeVector GetVertex (G4int i) const; - inline void SetVertex (G4int i, const G4ThreeVector& val); + inline G4bool IsDefined () const override; + inline G4int GetNumberOfVertices () const override; + inline G4ThreeVector GetVertex (G4int i) const override; + inline void SetVertex (G4int i, const G4ThreeVector& val) override; - inline G4ThreeVector GetCircumcentre () const; - inline G4double GetRadius () const; + inline G4ThreeVector GetCircumcentre () const override; + inline G4double GetRadius () const override; - inline G4int AllocatedMemory(); + inline G4int AllocatedMemory() override; - inline G4int GetVertexIndex (G4int i) const; - inline void SetVertexIndex (G4int i, G4int j); - inline void SetVertices(std::vector* v); + inline G4int GetVertexIndex (G4int i) const override; + inline void SetVertexIndex (G4int i, G4int j) override; + inline void SetVertices(std::vector* v) override; private: @@ -179,7 +180,7 @@ inline void G4TriangularFacet::SetVertexIndex (G4int i, G4int j) inline void G4TriangularFacet::SetVertices(std::vector* v) { - if (fIndices[0] < 0 && fVertices) + if (fIndices[0] < 0 && (fVertices != nullptr)) { delete fVertices; fVertices = nullptr; diff --git a/source/geometry/solids/specific/include/G4TwistBoxSide.hh b/source/geometry/solids/specific/include/G4TwistBoxSide.hh index 02b924472b0..53e629cdea4 100644 --- a/source/geometry/solids/specific/include/G4TwistBoxSide.hh +++ b/source/geometry/solids/specific/include/G4TwistBoxSide.hh @@ -40,7 +40,7 @@ class G4TwistBoxSide : public G4VTwistSurface { - public: // with description + public: G4TwistBoxSide(const G4String& name, G4double PhiTwist, // twist angle @@ -57,25 +57,23 @@ class G4TwistBoxSide : public G4VTwistSurface G4double AngleSide // parity ); - virtual ~G4TwistBoxSide(); + ~G4TwistBoxSide() override; - virtual G4ThreeVector GetNormal(const G4ThreeVector& xx, - G4bool isGlobal = false) ; + G4ThreeVector GetNormal(const G4ThreeVector& xx, + G4bool isGlobal = false) override ; - virtual G4int DistanceToSurface(const G4ThreeVector& gp, - const G4ThreeVector& gv, - G4ThreeVector gxx[], - G4double distance[], - G4int areacode[], - G4bool isvalid[], - EValidate validate = kValidateWithTol); + G4int DistanceToSurface(const G4ThreeVector& gp, + const G4ThreeVector& gv, + G4ThreeVector gxx[], + G4double distance[], + G4int areacode[], + G4bool isvalid[], + EValidate validate = kValidateWithTol) override; - virtual G4int DistanceToSurface(const G4ThreeVector& gp, - G4ThreeVector gxx[], - G4double distance[], - G4int areacode[]); - - public: // without description + G4int DistanceToSurface(const G4ThreeVector& gp, + G4ThreeVector gxx[], + G4double distance[], + G4int areacode[]) override; G4TwistBoxSide(__void__&); // Fake default constructor for usage restricted to direct object @@ -84,22 +82,22 @@ class G4TwistBoxSide : public G4VTwistSurface private: - virtual G4int GetAreaCode(const G4ThreeVector& xx, - G4bool withTol = true); - virtual void SetCorners(); - virtual void SetBoundaries(); + G4int GetAreaCode(const G4ThreeVector& xx, + G4bool withTol = true) override; + void SetCorners() override; + void SetBoundaries() override; - void GetPhiUAtX(G4ThreeVector p, G4double& phi, G4double& u); + void GetPhiUAtX(const G4ThreeVector& p, G4double& phi, G4double& u); G4ThreeVector ProjectPoint(const G4ThreeVector& p, G4bool isglobal = false); - virtual G4ThreeVector SurfacePoint(G4double phi, G4double u, - G4bool isGlobal = false); - virtual G4double GetBoundaryMin(G4double phi); - virtual G4double GetBoundaryMax(G4double phi); - virtual G4double GetSurfaceArea(); - virtual void GetFacets( G4int m, G4int n, G4double xyz[][3], - G4int faces[][4], G4int iside ); + inline G4ThreeVector SurfacePoint(G4double phi, G4double u, + G4bool isGlobal = false) override; + inline G4double GetBoundaryMin(G4double phi) override; + inline G4double GetBoundaryMax(G4double phi) override; + inline G4double GetSurfaceArea() override; + void GetFacets( G4int m, G4int n, G4double xyz[][3], + G4int faces[][4], G4int iside ) override; inline G4double GetValueA(G4double phi); inline G4double GetValueB(G4double phi); diff --git a/source/geometry/solids/specific/include/G4TwistTrapAlphaSide.hh b/source/geometry/solids/specific/include/G4TwistTrapAlphaSide.hh index 83e02a47c87..12f74d598bb 100644 --- a/source/geometry/solids/specific/include/G4TwistTrapAlphaSide.hh +++ b/source/geometry/solids/specific/include/G4TwistTrapAlphaSide.hh @@ -40,7 +40,7 @@ class G4TwistTrapAlphaSide : public G4VTwistSurface { - public: // with description + public: G4TwistTrapAlphaSide(const G4String& name, G4double PhiTwist, // twist angle @@ -57,26 +57,23 @@ class G4TwistTrapAlphaSide : public G4VTwistSurface G4double AngleSide // parity ); - virtual ~G4TwistTrapAlphaSide(); + ~G4TwistTrapAlphaSide() override; - virtual G4ThreeVector GetNormal(const G4ThreeVector& xx, - G4bool isGlobal = false) ; + G4ThreeVector GetNormal(const G4ThreeVector& xx, + G4bool isGlobal = false) override ; - virtual G4int DistanceToSurface(const G4ThreeVector& gp, - const G4ThreeVector& gv, - G4ThreeVector gxx[], - G4double distance[], - G4int areacode[], - G4bool isvalid[], - EValidate validate = kValidateWithTol); + G4int DistanceToSurface(const G4ThreeVector& gp, + const G4ThreeVector& gv, + G4ThreeVector gxx[], + G4double distance[], + G4int areacode[], + G4bool isvalid[], + EValidate validate = kValidateWithTol) override; - virtual G4int DistanceToSurface(const G4ThreeVector& gp, - G4ThreeVector gxx[], - G4double distance[], - G4int areacode[]); - - - public: // without description + G4int DistanceToSurface(const G4ThreeVector& gp, + G4ThreeVector gxx[], + G4double distance[], + G4int areacode[]) override; G4TwistTrapAlphaSide(__void__&); // Fake default constructor for usage restricted to direct object @@ -85,22 +82,22 @@ class G4TwistTrapAlphaSide : public G4VTwistSurface private: - virtual G4int GetAreaCode(const G4ThreeVector& xx, - G4bool withTol = true); - virtual void SetCorners(); - virtual void SetBoundaries(); + G4int GetAreaCode(const G4ThreeVector& xx, + G4bool withTol = true) override; + void SetCorners() override; + void SetBoundaries() override; - void GetPhiUAtX(G4ThreeVector p, G4double& phi, G4double& u); + void GetPhiUAtX(const G4ThreeVector& p, G4double& phi, G4double& u); G4ThreeVector ProjectPoint(const G4ThreeVector& p, G4bool isglobal = false); - virtual G4ThreeVector SurfacePoint(G4double phi, G4double u, - G4bool isGlobal = false ); - virtual G4double GetBoundaryMin(G4double phi); - virtual G4double GetBoundaryMax(G4double phi); - virtual G4double GetSurfaceArea(); - virtual void GetFacets( G4int m, G4int n, G4double xyz[][3], - G4int faces[][4], G4int iside ); + inline G4ThreeVector SurfacePoint(G4double phi, G4double u, + G4bool isGlobal = false ) override; + inline G4double GetBoundaryMin(G4double phi) override; + inline G4double GetBoundaryMax(G4double phi) override; + inline G4double GetSurfaceArea() override; + void GetFacets( G4int m, G4int n, G4double xyz[][3], + G4int faces[][4], G4int iside ) override; inline G4ThreeVector NormAng(G4double phi, G4double u); inline G4double GetValueA(G4double phi); diff --git a/source/geometry/solids/specific/include/G4TwistTrapFlatSide.hh b/source/geometry/solids/specific/include/G4TwistTrapFlatSide.hh index 2451376fec4..0328052c60e 100644 --- a/source/geometry/solids/specific/include/G4TwistTrapFlatSide.hh +++ b/source/geometry/solids/specific/include/G4TwistTrapFlatSide.hh @@ -38,76 +38,73 @@ class G4TwistTrapFlatSide : public G4VTwistSurface { - public: // with description - - G4TwistTrapFlatSide( const G4String& name, - G4double PhiTwist, - G4double pDx1, - G4double pDx2, - G4double pDy, - G4double pDz, - G4double pAlpha, - G4double pPhi, - G4double pTheta, - G4int handedness ); - virtual ~G4TwistTrapFlatSide(); - - virtual G4ThreeVector GetNormal(const G4ThreeVector& /* xx */ , - G4bool isGlobal = false); - virtual G4int DistanceToSurface(const G4ThreeVector& gp, - const G4ThreeVector& gv, - G4ThreeVector gxx[], - G4double distance[], - G4int areacode[], - G4bool isvalid[], - EValidate validate = kValidateWithTol); - - virtual G4int DistanceToSurface(const G4ThreeVector& gp, - G4ThreeVector gxx[], - G4double distance[], - G4int areacode[]); - - - virtual G4ThreeVector SurfacePoint(G4double x, G4double y, - G4bool isGlobal = false); - virtual G4double GetBoundaryMin(G4double u); - virtual G4double GetBoundaryMax(G4double u); - virtual G4double GetSurfaceArea(); - virtual void GetFacets( G4int m, G4int n, G4double xyz[][3], - G4int faces[][4], G4int iside ); - - public: // without description - - G4TwistTrapFlatSide(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. - - protected: // with description - - virtual G4int GetAreaCode(const G4ThreeVector& xx, - G4bool withTol = true); + public: + + G4TwistTrapFlatSide( const G4String& name, + G4double PhiTwist, + G4double pDx1, + G4double pDx2, + G4double pDy, + G4double pDz, + G4double pAlpha, + G4double pPhi, + G4double pTheta, + G4int handedness ); + ~G4TwistTrapFlatSide() override; + + G4ThreeVector GetNormal(const G4ThreeVector& /* xx */ , + G4bool isGlobal = false) override; + G4int DistanceToSurface(const G4ThreeVector& gp, + const G4ThreeVector& gv, + G4ThreeVector gxx[], + G4double distance[], + G4int areacode[], + G4bool isvalid[], + EValidate validate = kValidateWithTol) override; + + G4int DistanceToSurface(const G4ThreeVector& gp, + G4ThreeVector gxx[], + G4double distance[], + G4int areacode[]) override; + + inline G4ThreeVector SurfacePoint(G4double x, G4double y, + G4bool isGlobal = false) override; + inline G4double GetBoundaryMin(G4double u) override; + inline G4double GetBoundaryMax(G4double u) override; + inline G4double GetSurfaceArea() override; + void GetFacets( G4int m, G4int n, G4double xyz[][3], + G4int faces[][4], G4int iside ) override; + + G4TwistTrapFlatSide(__void__&); + // Fake default constructor for usage restricted to direct object + // persistency for clients requiring preallocation of memory for + // persistifiable objects. + + protected: + + G4int GetAreaCode(const G4ThreeVector& xx, + G4bool withTol = true) override; private: - virtual void SetCorners(); - virtual void SetBoundaries(); + void SetCorners() override; + void SetBoundaries() override; - inline double xAxisMax(G4double u, G4double fTanAlpha) const; + inline G4double xAxisMax(G4double u, G4double fTanAlpha) const; private: - G4double fDx1; - G4double fDx2; - G4double fDy; - G4double fDz; - G4double fPhiTwist; - G4double fAlpha; - G4double fTAlph; - G4double fPhi; - G4double fTheta; - G4double fdeltaX; - G4double fdeltaY; + G4double fDx1; + G4double fDx2; + G4double fDy; + G4double fDz; + G4double fPhiTwist; + G4double fAlpha; + G4double fTAlph; + G4double fPhi; + G4double fTheta; + G4double fdeltaX; + G4double fdeltaY; }; //======================================================== diff --git a/source/geometry/solids/specific/include/G4TwistTrapParallelSide.hh b/source/geometry/solids/specific/include/G4TwistTrapParallelSide.hh index 1fef94ad012..ac4a69beac0 100644 --- a/source/geometry/solids/specific/include/G4TwistTrapParallelSide.hh +++ b/source/geometry/solids/specific/include/G4TwistTrapParallelSide.hh @@ -40,7 +40,7 @@ class G4TwistTrapParallelSide : public G4VTwistSurface { - public: // with description + public: G4TwistTrapParallelSide(const G4String& name, G4double PhiTwist, // twist angle @@ -57,25 +57,23 @@ class G4TwistTrapParallelSide : public G4VTwistSurface G4double AngleSide // parity ); - virtual ~G4TwistTrapParallelSide(); + ~G4TwistTrapParallelSide() override; - virtual G4ThreeVector GetNormal(const G4ThreeVector& xx, - G4bool isGlobal = false) ; + G4ThreeVector GetNormal(const G4ThreeVector& xx, + G4bool isGlobal = false) override ; - virtual G4int DistanceToSurface(const G4ThreeVector& gp, - const G4ThreeVector& gv, - G4ThreeVector gxx[], - G4double distance[], - G4int areacode[], - G4bool isvalid[], - EValidate validate = kValidateWithTol); + G4int DistanceToSurface(const G4ThreeVector& gp, + const G4ThreeVector& gv, + G4ThreeVector gxx[], + G4double distance[], + G4int areacode[], + G4bool isvalid[], + EValidate validate = kValidateWithTol) override; - virtual G4int DistanceToSurface(const G4ThreeVector& gp, - G4ThreeVector gxx[], - G4double distance[], - G4int areacode[]); - - public: // without description + G4int DistanceToSurface(const G4ThreeVector& gp, + G4ThreeVector gxx[], + G4double distance[], + G4int areacode[]) override; G4TwistTrapParallelSide(__void__&); // Fake default constructor for usage restricted to direct object @@ -84,22 +82,22 @@ class G4TwistTrapParallelSide : public G4VTwistSurface private: - virtual G4int GetAreaCode(const G4ThreeVector& xx, - G4bool withTol = true); - virtual void SetCorners(); - virtual void SetBoundaries(); + G4int GetAreaCode(const G4ThreeVector& xx, + G4bool withTol = true) override; + void SetCorners() override; + void SetBoundaries() override; - void GetPhiUAtX(G4ThreeVector p, G4double& phi, G4double& u); + void GetPhiUAtX(const G4ThreeVector& p, G4double& phi, G4double& u); G4ThreeVector ProjectPoint(const G4ThreeVector& p, G4bool isglobal = false); - virtual G4ThreeVector SurfacePoint(G4double phi, G4double u, - G4bool isGlobal = false); - virtual G4double GetBoundaryMin(G4double phi); - virtual G4double GetBoundaryMax(G4double phi); - virtual G4double GetSurfaceArea(); - virtual void GetFacets( G4int m, G4int n, G4double xyz[][3], - G4int faces[][4], G4int iside ); + inline G4ThreeVector SurfacePoint(G4double phi, G4double u, + G4bool isGlobal = false) override; + inline G4double GetBoundaryMin(G4double phi) override; + inline G4double GetBoundaryMax(G4double phi) override; + inline G4double GetSurfaceArea() override; + void GetFacets( G4int m, G4int n, G4double xyz[][3], + G4int faces[][4], G4int iside ) override; inline G4ThreeVector NormAng(G4double phi, G4double u); inline G4double GetValueB(G4double phi) ; diff --git a/source/geometry/solids/specific/include/G4TwistTubsFlatSide.hh b/source/geometry/solids/specific/include/G4TwistTubsFlatSide.hh index 50b27e748dc..babcf192731 100644 --- a/source/geometry/solids/specific/include/G4TwistTubsFlatSide.hh +++ b/source/geometry/solids/specific/include/G4TwistTubsFlatSide.hh @@ -40,71 +40,69 @@ class G4TwistTubsFlatSide : public G4VTwistSurface { - public: // with description - - G4TwistTubsFlatSide(const G4String& name, - const G4RotationMatrix& rot, - const G4ThreeVector& tlate, - const G4ThreeVector& n, - const EAxis axis1 = kRho, // RHO axis ! - const EAxis axis2 = kPhi, // PHI axis ! - G4double axis0min = -kInfinity, - G4double axis1min = -kInfinity, - G4double axis0max = kInfinity, - G4double axis1max = kInfinity ); - - G4TwistTubsFlatSide( const G4String& name, - G4double EndInnerRadius[2], - G4double EndOuterRadius[2], - G4double DPhi, - G4double EndPhi[2], - G4double EndZ[2], - G4int handedness ) ; - - virtual ~G4TwistTubsFlatSide(); - virtual G4ThreeVector GetNormal(const G4ThreeVector& /* xx */ , - G4bool isGlobal = false); - virtual G4int DistanceToSurface(const G4ThreeVector& gp, - const G4ThreeVector& gv, - G4ThreeVector gxx[], - G4double distance[], - G4int areacode[], - G4bool isvalid[], - EValidate validate = kValidateWithTol); - - virtual G4int DistanceToSurface(const G4ThreeVector& gp, - G4ThreeVector gxx[], - G4double distance[], - G4int areacode[]); - - virtual G4ThreeVector SurfacePoint(G4double, G4double, - G4bool isGlobal = false) ; - virtual G4double GetBoundaryMin(G4double phi) ; - virtual G4double GetBoundaryMax(G4double phi) ; - virtual G4double GetSurfaceArea() { return fSurfaceArea ; } - virtual void GetFacets( G4int m, G4int n, G4double xyz[][3], - G4int faces[][4], G4int iside ) ; - - public: // without description - - G4TwistTubsFlatSide(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. - - protected: // with description - - virtual G4int GetAreaCode(const G4ThreeVector& xx, - G4bool withTol = true) ; + public: + + G4TwistTubsFlatSide(const G4String& name, + const G4RotationMatrix& rot, + const G4ThreeVector& tlate, + const G4ThreeVector& n, + const EAxis axis1 = kRho, // RHO axis ! + const EAxis axis2 = kPhi, // PHI axis ! + G4double axis0min = -kInfinity, + G4double axis1min = -kInfinity, + G4double axis0max = kInfinity, + G4double axis1max = kInfinity); + + G4TwistTubsFlatSide(const G4String& name, + G4double EndInnerRadius[2], + G4double EndOuterRadius[2], + G4double DPhi, + G4double EndPhi[2], + G4double EndZ[2], + G4int handedness); + + ~G4TwistTubsFlatSide() override; + G4ThreeVector GetNormal(const G4ThreeVector& /* xx */ , + G4bool isGlobal = false) override; + G4int DistanceToSurface(const G4ThreeVector& gp, + const G4ThreeVector& gv, + G4ThreeVector gxx[], + G4double distance[], + G4int areacode[], + G4bool isvalid[], + EValidate validate = kValidateWithTol) override; + + G4int DistanceToSurface(const G4ThreeVector& gp, + G4ThreeVector gxx[], + G4double distance[], + G4int areacode[]) override; + + inline G4ThreeVector SurfacePoint(G4double, G4double, + G4bool isGlobal = false) override; + inline G4double GetBoundaryMin(G4double phi) override; + inline G4double GetBoundaryMax(G4double phi) override; + inline G4double GetSurfaceArea() override { return fSurfaceArea ; } + void GetFacets( G4int m, G4int n, G4double xyz[][3], + G4int faces[][4], G4int iside ) override; + + G4TwistTubsFlatSide(__void__&); + // Fake default constructor for usage restricted to direct object + // persistency for clients requiring preallocation of memory for + // persistifiable objects. + + protected: + + G4int GetAreaCode(const G4ThreeVector& xx, + G4bool withTol = true) override ; private: - virtual void SetCorners(); - virtual void SetBoundaries(); + void SetCorners() override; + void SetBoundaries() override; private: - G4double fSurfaceArea = 0.0; + G4double fSurfaceArea = 0.0; }; inline G4ThreeVector G4TwistTubsFlatSide:: diff --git a/source/geometry/solids/specific/include/G4TwistTubsHypeSide.hh b/source/geometry/solids/specific/include/G4TwistTubsHypeSide.hh index ed8b0c86c3f..ea09908a9cf 100644 --- a/source/geometry/solids/specific/include/G4TwistTubsHypeSide.hh +++ b/source/geometry/solids/specific/include/G4TwistTubsHypeSide.hh @@ -42,86 +42,84 @@ class G4TwistTubsHypeSide : public G4VTwistSurface { - public: // with description + public: - G4TwistTubsHypeSide(const G4String& name, - const G4RotationMatrix& rot, // 0.5*(phi-width segment) - const G4ThreeVector& tlate, - const G4int handedness,// R-hand = 1, L-hand = -1 - const G4double kappa, // tan(TwistAngle/2)/fZHalfLen - const G4double tanstereo, // tan(stereo angle) - const G4double r0, // radius at z = 0 - const EAxis axis0 = kPhi, - const EAxis axis1 = kZAxis, - G4double axis0min = -kInfinity, - G4double axis1min = -kInfinity, - G4double axis0max = kInfinity, - G4double axis1max = kInfinity); + G4TwistTubsHypeSide(const G4String& name, + const G4RotationMatrix& rot, // 0.5*(phi-width segment) + const G4ThreeVector& tlate, + const G4int handedness,// R-hand = 1, L-hand = -1 + const G4double kappa, // tan(TwistAngle/2)/fZHalfLen + const G4double tanstereo, // tan(stereo angle) + const G4double r0, // radius at z = 0 + const EAxis axis0 = kPhi, + const EAxis axis1 = kZAxis, + G4double axis0min = -kInfinity, + G4double axis1min = -kInfinity, + G4double axis0max = kInfinity, + G4double axis1max = kInfinity); - G4TwistTubsHypeSide(const G4String& name, - G4double EndInnerRadius[2], - G4double EndOuterRadius[2], - G4double DPhi, - G4double EndPhi[2], - G4double EndZ[2], - G4double InnerRadius, - G4double OuterRadius, - G4double Kappa, - G4double TanInnerStereo, - G4double TanOuterStereo, - G4int handedness) ; - - virtual ~G4TwistTubsHypeSide(); - - virtual G4int DistanceToSurface(const G4ThreeVector& gp, - const G4ThreeVector& gv, - G4ThreeVector gxx[], - G4double distance[], - G4int areacode[], - G4bool isvalid[], - EValidate validate = kValidateWithTol); + G4TwistTubsHypeSide(const G4String& name, + G4double EndInnerRadius[2], + G4double EndOuterRadius[2], + G4double DPhi, + G4double EndPhi[2], + G4double EndZ[2], + G4double InnerRadius, + G4double OuterRadius, + G4double Kappa, + G4double TanInnerStereo, + G4double TanOuterStereo, + G4int handedness) ; + + ~G4TwistTubsHypeSide() override; + + G4int DistanceToSurface(const G4ThreeVector& gp, + const G4ThreeVector& gv, + G4ThreeVector gxx[], + G4double distance[], + G4int areacode[], + G4bool isvalid[], + EValidate validate = kValidateWithTol) override; - virtual G4int DistanceToSurface(const G4ThreeVector& gp, - G4ThreeVector gxx[], - G4double distance[], - G4int areacode[]); + G4int DistanceToSurface(const G4ThreeVector& gp, + G4ThreeVector gxx[], + G4double distance[], + G4int areacode[]) override; - virtual G4ThreeVector GetNormal(const G4ThreeVector& xx, - G4bool isGlobal = false) ; - virtual EInside Inside(const G4ThreeVector& gp) ; + G4ThreeVector GetNormal(const G4ThreeVector& xx, + G4bool isGlobal = false) override ; + EInside Inside(const G4ThreeVector& gp) ; - virtual G4double GetRhoAtPZ(const G4ThreeVector& p, + inline G4double GetRhoAtPZ(const G4ThreeVector& p, G4bool isglobal = false) const ; - virtual G4ThreeVector SurfacePoint(G4double, G4double, - G4bool isGlobal = false) ; - virtual G4double GetBoundaryMin(G4double phi) ; - virtual G4double GetBoundaryMax(G4double phi) ; - virtual G4double GetSurfaceArea() ; - virtual void GetFacets( G4int m, G4int n, G4double xyz[][3], - G4int faces[][4], G4int iside ) ; + inline G4ThreeVector SurfacePoint(G4double, G4double, + G4bool isGlobal = false) override ; + inline G4double GetBoundaryMin(G4double phi) override ; + inline G4double GetBoundaryMax(G4double phi) override ; + inline G4double GetSurfaceArea() override ; + void GetFacets( G4int m, G4int n, G4double xyz[][3], + G4int faces[][4], G4int iside ) override ; - public: // without description - - G4TwistTubsHypeSide(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. + G4TwistTubsHypeSide(__void__&); + // Fake default constructor for usage restricted to direct object + // persistency for clients requiring preallocation of memory for + // persistifiable objects. private: - virtual G4int GetAreaCode(const G4ThreeVector& xx, - G4bool withTol = true); - virtual G4int GetAreaCodeInPhi(const G4ThreeVector& xx, - G4bool withTol = true); - virtual void SetCorners(); - - virtual void SetCorners(G4double EndInnerRadius[2], - G4double EndOuterRadius[2], - G4double DPhi, - G4double EndPhi[2], - G4double EndZ[2]); - virtual void SetBoundaries(); + G4int GetAreaCode(const G4ThreeVector& xx, + G4bool withTol = true) override; + G4int GetAreaCodeInPhi(const G4ThreeVector& xx, + G4bool withTol = true); + void SetCorners() override; + + void SetCorners(G4double EndInnerRadius[2], + G4double EndOuterRadius[2], + G4double DPhi, + G4double EndPhi[2], + G4double EndZ[2]); + void SetBoundaries() override; private: diff --git a/source/geometry/solids/specific/include/G4TwistTubsSide.hh b/source/geometry/solids/specific/include/G4TwistTubsSide.hh index 33aa5e93206..a334f98fbef 100644 --- a/source/geometry/solids/specific/include/G4TwistTubsSide.hh +++ b/source/geometry/solids/specific/include/G4TwistTubsSide.hh @@ -40,93 +40,91 @@ class G4TwistTubsSide : public G4VTwistSurface { - public: // with description + public: - G4TwistTubsSide(const G4String& name, - const G4RotationMatrix& rot, // 0.5*(phi-width segment) - const G4ThreeVector& tlate, - G4int handedness, // R-hand = 1, L-hand = -1 - const G4double kappa, // tan(TwistAngle/2)/fZHalfLen - const EAxis axis0 = kXAxis, - const EAxis axis1 = kZAxis, - G4double axis0min = -kInfinity, - G4double axis1min = -kInfinity, - G4double axis0max = kInfinity, - G4double axis1max = kInfinity ); - - G4TwistTubsSide(const G4String& name, - G4double EndInnerRadius[2], - G4double EndOuterRadius[2], - G4double DPhi, - G4double EndPhi[2], - G4double EndZ[2], - G4double InnerRadius, - G4double OuterRadius, - G4double Kappa, - G4int handedness); - - virtual ~G4TwistTubsSide(); - - virtual G4ThreeVector GetNormal(const G4ThreeVector& xx, - G4bool isGlobal = false) ; - - virtual G4int DistanceToSurface(const G4ThreeVector& gp, - const G4ThreeVector& gv, - G4ThreeVector gxx[], - G4double distance[], - G4int areacode[], - G4bool isvalid[], - EValidate validate = kValidateWithTol); - - virtual G4int DistanceToSurface(const G4ThreeVector& gp, - G4ThreeVector gxx[], - G4double distance[], - G4int areacode[]); - - inline G4ThreeVector ProjectAtPXPZ(const G4ThreeVector& p, - G4bool isglobal = false) const ; - - virtual G4ThreeVector SurfacePoint(G4double, G4double, - G4bool isGlobal = false) ; - virtual G4double GetBoundaryMin(G4double phi) ; - virtual G4double GetBoundaryMax(G4double phi) ; - virtual G4double GetSurfaceArea() ; - virtual void GetFacets( G4int m, G4int n, G4double xyz[][3], - G4int faces[][4], G4int iside ) ; - - public: // without description - - G4TwistTubsSide(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. - - private: - - virtual G4double DistanceToPlane(const G4ThreeVector& p, - const G4ThreeVector& A, - const G4ThreeVector& B, - const G4ThreeVector& C, - const G4ThreeVector& D, - const G4int parity, - G4ThreeVector& xx, - G4ThreeVector& n); - - virtual G4int GetAreaCode(const G4ThreeVector& xx, - G4bool withTol = true); - - virtual void SetCorners(); - - virtual void SetCorners( G4double endInnerRad[2], - G4double endOuterRad[2], - G4double endPhi[2], - G4double endZ[2] ) ; - - virtual void SetBoundaries(); + G4TwistTubsSide(const G4String& name, + const G4RotationMatrix& rot, // 0.5*(phi-width segment) + const G4ThreeVector& tlate, + G4int handedness, // R-hand = 1, L-hand = -1 + const G4double kappa, // tan(TwistAngle/2)/fZHalfLen + const EAxis axis0 = kXAxis, + const EAxis axis1 = kZAxis, + G4double axis0min = -kInfinity, + G4double axis1min = -kInfinity, + G4double axis0max = kInfinity, + G4double axis1max = kInfinity ); + + G4TwistTubsSide(const G4String& name, + G4double EndInnerRadius[2], + G4double EndOuterRadius[2], + G4double DPhi, + G4double EndPhi[2], + G4double EndZ[2], + G4double InnerRadius, + G4double OuterRadius, + G4double Kappa, + G4int handedness); + + ~G4TwistTubsSide() override; + + G4ThreeVector GetNormal(const G4ThreeVector& xx, + G4bool isGlobal = false) override ; + + G4int DistanceToSurface(const G4ThreeVector& gp, + const G4ThreeVector& gv, + G4ThreeVector gxx[], + G4double distance[], + G4int areacode[], + G4bool isvalid[], + EValidate validate = kValidateWithTol) override; + + G4int DistanceToSurface(const G4ThreeVector& gp, + G4ThreeVector gxx[], + G4double distance[], + G4int areacode[]) override; + + inline G4ThreeVector ProjectAtPXPZ(const G4ThreeVector& p, + G4bool isglobal = false) const ; + + inline G4ThreeVector SurfacePoint(G4double, G4double, + G4bool isGlobal = false) override ; + inline G4double GetBoundaryMin(G4double phi) override ; + inline G4double GetBoundaryMax(G4double phi) override ; + inline G4double GetSurfaceArea() override ; + void GetFacets( G4int m, G4int n, G4double xyz[][3], + G4int faces[][4], G4int iside ) override ; + + G4TwistTubsSide(__void__&); + // Fake default constructor for usage restricted to direct object + // persistency for clients requiring preallocation of memory for + // persistifiable objects. + + private: + + G4double DistanceToPlane(const G4ThreeVector& p, + const G4ThreeVector& A, + const G4ThreeVector& B, + const G4ThreeVector& C, + const G4ThreeVector& D, + const G4int parity, + G4ThreeVector& xx, + G4ThreeVector& n); + + G4int GetAreaCode(const G4ThreeVector& xx, + G4bool withTol = true) override; + + void SetCorners() override; + + void SetCorners( G4double endInnerRad[2], + G4double endOuterRad[2], + G4double endPhi[2], + G4double endZ[2] ) ; + + void SetBoundaries() override; private: - G4double fKappa; // std::tan(TwistedAngle/2)/HalfLenZ; + G4double fKappa; // std::tan(TwistedAngle/2)/HalfLenZ; }; diff --git a/source/geometry/solids/specific/include/G4TwistedBox.hh b/source/geometry/solids/specific/include/G4TwistedBox.hh index 94a8036b448..64c889b00b7 100644 --- a/source/geometry/solids/specific/include/G4TwistedBox.hh +++ b/source/geometry/solids/specific/include/G4TwistedBox.hh @@ -47,7 +47,7 @@ class G4TwistedBox : public G4VTwistedFaceted { - public: // with description + public: G4TwistedBox(const G4String& pName, G4double pPhiTwist, @@ -55,7 +55,7 @@ class G4TwistedBox : public G4VTwistedFaceted G4double pDy, G4double pDz ); - virtual ~G4TwistedBox(); + ~G4TwistedBox() override; // accessors @@ -64,16 +64,14 @@ class G4TwistedBox : public G4VTwistedFaceted inline G4double GetZHalfLength() const { return GetDz() ; } inline G4double GetPhiTwist() const { return GetTwistAngle() ; } - G4GeometryType GetEntityType() const; + G4GeometryType GetEntityType() const override; - G4double GetCubicVolume(); - G4double GetSurfaceArea(); + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; - std::ostream& StreamInfo(std::ostream& os) const; - - public: // without description + std::ostream& StreamInfo(std::ostream& os) const override; G4TwistedBox(__void__&); // Fake default constructor for usage restricted to direct object diff --git a/source/geometry/solids/specific/include/G4TwistedTrap.hh b/source/geometry/solids/specific/include/G4TwistedTrap.hh index 5479b114e43..a64ad11431f 100644 --- a/source/geometry/solids/specific/include/G4TwistedTrap.hh +++ b/source/geometry/solids/specific/include/G4TwistedTrap.hh @@ -59,7 +59,7 @@ class G4TwistedTrap : public G4VTwistedFaceted { - public: // with description + public: G4TwistedTrap(const G4String& pName, G4double pPhiTwist, @@ -83,7 +83,7 @@ class G4TwistedTrap : public G4VTwistedFaceted G4double pAlph // tilt angle ); - virtual ~G4TwistedTrap(); + ~G4TwistedTrap() override; // accessors @@ -99,13 +99,11 @@ class G4TwistedTrap : public G4VTwistedFaceted inline G4double GetPolarAngleTheta() const { return GetTheta() ; } inline G4double GetAzimuthalAnglePhi() const { return GetPhi() ; } - G4GeometryType GetEntityType() const; + G4GeometryType GetEntityType() const override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; - std::ostream &StreamInfo(std::ostream& os) const; - - public: // without description + std::ostream &StreamInfo(std::ostream& os) const override; G4TwistedTrap(__void__&); // Fake default constructor for usage restricted to direct object diff --git a/source/geometry/solids/specific/include/G4TwistedTrd.hh b/source/geometry/solids/specific/include/G4TwistedTrd.hh index ae958bcfec6..30be6173f34 100644 --- a/source/geometry/solids/specific/include/G4TwistedTrd.hh +++ b/source/geometry/solids/specific/include/G4TwistedTrd.hh @@ -49,7 +49,7 @@ class G4TwistedTrd : public G4VTwistedFaceted { - public: // with description + public: G4TwistedTrd( const G4String& pName, G4double pDx1, @@ -59,7 +59,7 @@ class G4TwistedTrd : public G4VTwistedFaceted G4double pDz, G4double pPhiTwist ); - virtual ~G4TwistedTrd(); + ~G4TwistedTrd() override; // accessors @@ -70,16 +70,14 @@ class G4TwistedTrd : public G4VTwistedFaceted inline G4double GetZHalfLength() const { return GetDz() ; } inline G4double GetPhiTwist() const { return GetTwistAngle() ; } - G4GeometryType GetEntityType() const; + G4GeometryType GetEntityType() const override; - G4double GetCubicVolume(); - G4double GetSurfaceArea(); + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; - std::ostream& StreamInfo(std::ostream& os) const; - - public: // without description + std::ostream& StreamInfo(std::ostream& os) const override; G4TwistedTrd(__void__&); // Fake default constructor for usage restricted to direct object diff --git a/source/geometry/solids/specific/include/G4TwistedTubs.hh b/source/geometry/solids/specific/include/G4TwistedTubs.hh index 155d6f2a117..b8be4e629da 100644 --- a/source/geometry/solids/specific/include/G4TwistedTubs.hh +++ b/source/geometry/solids/specific/include/G4TwistedTubs.hh @@ -54,286 +54,282 @@ class G4ClippablePolygon; class G4TwistedTubs : public G4VSolid { - public: // with description + public: - G4TwistedTubs(const G4String& pname, // Name of instance - G4double twistedangle, // Twisted angle - G4double endinnerrad, // Inner radius at endcap - G4double endouterrad, // Outer radius at endcap - G4double halfzlen, // half z length - G4double dphi); // Phi angle of a segment + G4TwistedTubs(const G4String& pname, // Name of instance + G4double twistedangle, // Twisted angle + G4double endinnerrad, // Inner radius at endcap + G4double endouterrad, // Outer radius at endcap + G4double halfzlen, // half z length + G4double dphi); // Phi angle of a segment - G4TwistedTubs(const G4String& pname, // Name of instance - G4double twistedangle, // Stereo angle - G4double endinnerrad, // Inner radius at endcap - G4double endouterrad, // Outer radius at endcap - G4double halfzlen, // half z length - G4int nseg, // Number of segments in totalPhi - G4double totphi); // Total angle of all segments + G4TwistedTubs(const G4String& pname, // Name of instance + G4double twistedangle, // Stereo angle + G4double endinnerrad, // Inner radius at endcap + G4double endouterrad, // Outer radius at endcap + G4double halfzlen, // half z length + G4int nseg, // Number of segments in totalPhi + G4double totphi); // Total angle of all segments - G4TwistedTubs(const G4String& pname, // Name of instance - G4double twistedangle, // Twisted angle - G4double innerrad, // Inner radius at z=0 - G4double outerrad, // Outer radius at z=0 - G4double negativeEndz, // -ve z endplate - G4double positiveEndz, // +ve z endplate - G4double dphi); // Phi angle of a segment - - G4TwistedTubs(const G4String& pname, // Name of instance - G4double twistedangle, // Stereo angle - G4double innerrad, // Inner radius at z=0 - G4double outerrad, // Outer radius at z=0 - G4double negativeEndz, // -ve z endplate - G4double positiveEndz, // +ve z endplate - G4int nseg, // Number of segments in totalPhi - G4double totphi); // Total angle of all segments - - virtual ~G4TwistedTubs(); + G4TwistedTubs(const G4String& pname, // Name of instance + G4double twistedangle, // Twisted angle + G4double innerrad, // Inner radius at z=0 + G4double outerrad, // Outer radius at z=0 + G4double negativeEndz, // -ve z endplate + G4double positiveEndz, // +ve z endplate + G4double dphi); // Phi angle of a segment + + G4TwistedTubs(const G4String& pname, // Name of instance + G4double twistedangle, // Stereo angle + G4double innerrad, // Inner radius at z=0 + G4double outerrad, // Outer radius at z=0 + G4double negativeEndz, // -ve z endplate + G4double positiveEndz, // +ve z endplate + G4int nseg, // Number of segments in totalPhi + G4double totphi); // Total angle of all segments + + ~G4TwistedTubs() override; - void ComputeDimensions(G4VPVParameterisation* /* p */ , - const G4int /* n */ , - const G4VPhysicalVolume* /* prep */ ); + void ComputeDimensions(G4VPVParameterisation* /* p */ , + const G4int /* n */ , + const G4VPhysicalVolume* /* prep */ ) override; - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; - G4bool CalculateExtent(const EAxis pAxis, - const G4VoxelLimits& pVoxelLimit, - const G4AffineTransform& pTransform, - G4double& pMin, - G4double& pMax ) const; + G4bool CalculateExtent(const EAxis pAxis, + const G4VoxelLimits& pVoxelLimit, + const G4AffineTransform& pTransform, + G4double& pMin, + G4double& pMax ) const override; - G4double DistanceToIn (const G4ThreeVector& p, - const G4ThreeVector& v ) const; + G4double DistanceToIn (const G4ThreeVector& p, + const G4ThreeVector& v ) const override; - G4double DistanceToIn (const G4ThreeVector& p ) const; + G4double DistanceToIn (const G4ThreeVector& p ) const override; - G4double DistanceToOut(const G4ThreeVector& p, - const G4ThreeVector& v, - const G4bool calcnorm = false, - G4bool* validnorm = nullptr, - G4ThreeVector* n = nullptr ) const; + G4double DistanceToOut(const G4ThreeVector& p, + const G4ThreeVector& v, + const G4bool calcnorm = false, + G4bool* validnorm = nullptr, + G4ThreeVector* n = nullptr ) const override; - G4double DistanceToOut(const G4ThreeVector& p) const; + G4double DistanceToOut(const G4ThreeVector& p) const override; - EInside Inside (const G4ThreeVector& p) const; + EInside Inside (const G4ThreeVector& p) const override; - G4ThreeVector SurfaceNormal(const G4ThreeVector& p) const; + G4ThreeVector SurfaceNormal(const G4ThreeVector& p) const override; - void DescribeYourselfTo (G4VGraphicsScene& scene) const; - G4Polyhedron* CreatePolyhedron () const; - G4Polyhedron* GetPolyhedron () const; + void DescribeYourselfTo (G4VGraphicsScene& scene) const override; + G4Polyhedron* CreatePolyhedron () const override; + G4Polyhedron* GetPolyhedron () const override; - std::ostream &StreamInfo(std::ostream& os) const; + std::ostream &StreamInfo(std::ostream& os) const override; - // accessors + // accessors - inline G4double GetDPhi () const { return fDPhi ; } - inline G4double GetPhiTwist () const { return fPhiTwist ; } - inline G4double GetInnerRadius () const { return fInnerRadius; } - inline G4double GetOuterRadius () const { return fOuterRadius; } - inline G4double GetInnerStereo () const { return fInnerStereo; } - inline G4double GetOuterStereo () const { return fOuterStereo; } - inline G4double GetZHalfLength () const { return fZHalfLength; } - inline G4double GetKappa () const { return fKappa ; } - - inline G4double GetTanInnerStereo () const { return fTanInnerStereo ; } - inline G4double GetTanInnerStereo2() const { return fTanInnerStereo2 ; } - inline G4double GetTanOuterStereo () const { return fTanOuterStereo ; } - inline G4double GetTanOuterStereo2() const { return fTanOuterStereo2 ; } + inline G4double GetDPhi () const { return fDPhi ; } + inline G4double GetPhiTwist () const { return fPhiTwist ; } + inline G4double GetInnerRadius () const { return fInnerRadius; } + inline G4double GetOuterRadius () const { return fOuterRadius; } + inline G4double GetInnerStereo () const { return fInnerStereo; } + inline G4double GetOuterStereo () const { return fOuterStereo; } + inline G4double GetZHalfLength () const { return fZHalfLength; } + inline G4double GetKappa () const { return fKappa ; } + + inline G4double GetTanInnerStereo () const { return fTanInnerStereo ; } + inline G4double GetTanInnerStereo2() const { return fTanInnerStereo2 ; } + inline G4double GetTanOuterStereo () const { return fTanOuterStereo ; } + inline G4double GetTanOuterStereo2() const { return fTanOuterStereo2 ; } - inline G4double GetEndZ (G4int i) const { return fEndZ[i] ; } - inline G4double GetEndPhi (G4int i) const { return fEndPhi[i]; } - inline G4double GetEndInnerRadius (G4int i) const - { return fEndInnerRadius[i]; } - inline G4double GetEndOuterRadius (G4int i) const - { return fEndOuterRadius[i]; } - inline G4double GetEndInnerRadius () const - { return (fEndInnerRadius[0] > fEndInnerRadius[1] ? - fEndInnerRadius[0] : fEndInnerRadius[1]); } - inline G4double GetEndOuterRadius () const - { return (fEndOuterRadius[0] > fEndOuterRadius[1] ? - fEndOuterRadius[0] : fEndOuterRadius[1]); } + inline G4double GetEndZ (G4int i) const { return fEndZ[i] ; } + inline G4double GetEndPhi (G4int i) const { return fEndPhi[i]; } + inline G4double GetEndInnerRadius (G4int i) const + { return fEndInnerRadius[i]; } + inline G4double GetEndOuterRadius (G4int i) const + { return fEndOuterRadius[i]; } + inline G4double GetEndInnerRadius () const + { return (fEndInnerRadius[0] > fEndInnerRadius[1] ? + fEndInnerRadius[0] : fEndInnerRadius[1]); } + inline G4double GetEndOuterRadius () const + { return (fEndOuterRadius[0] > fEndOuterRadius[1] ? + fEndOuterRadius[0] : fEndOuterRadius[1]); } - G4VisExtent GetExtent () const; - G4GeometryType GetEntityType() const; - G4VSolid* Clone() const; + G4VisExtent GetExtent () const override; + G4GeometryType GetEntityType() const override; + G4VSolid* Clone() const override; - G4double GetCubicVolume(); - // Returns an estimation of the geometrical cubic volume of the - // solid. Caches the computed value once computed the first time. - G4double GetSurfaceArea(); - // Returns the geometrical surface area of the solid. - // Caches the computed value once computed the first time. + G4double GetCubicVolume() override; + // Returns an estimation of the geometrical cubic volume of the + // solid. Caches the computed value once computed the first time. + G4double GetSurfaceArea() override; + // Returns the geometrical surface area of the solid. + // Caches the computed value once computed the first time. - G4ThreeVector GetPointOnSurface() const ; + G4ThreeVector GetPointOnSurface() const override ; - public: // without description + G4TwistedTubs(__void__&); + // Fake default constructor for usage restricted to direct object + // persistency for clients requiring preallocation of memory for + // persistifiable objects. - G4TwistedTubs(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. - - G4TwistedTubs(const G4TwistedTubs& rhs); - G4TwistedTubs& operator=(const G4TwistedTubs& rhs); - // Copy constructor and assignment operator. + G4TwistedTubs(const G4TwistedTubs& rhs); + G4TwistedTubs& operator=(const G4TwistedTubs& rhs); + // Copy constructor and assignment operator. #ifdef G4TWISTDEBUG - G4VTwistSurface* GetOuterHype() const { return fOuterHype; } + G4VTwistSurface* GetOuterHype() const { return fOuterHype; } #endif - private: + private: - inline void SetFields(G4double phitwist, G4double innerrad, - G4double outerrad, - G4double negativeEndz, G4double positiveEndz); - void CreateSurfaces(); - G4double GetLateralArea(G4double a, G4double r, G4double z) const; - G4double GetPhiCutArea(G4double a, G4double r, G4double z) const; - - private: + inline void SetFields(G4double phitwist, G4double innerrad, + G4double outerrad, + G4double negativeEndz, G4double positiveEndz); + void CreateSurfaces(); + G4double GetLateralArea(G4double a, G4double r, G4double z) const; + G4double GetPhiCutArea(G4double a, G4double r, G4double z) const; + + private: - G4double fPhiTwist; // Twist angle from -fZHalfLength to fZHalfLength - G4double fInnerRadius; // Inner-hype radius at z=0 - G4double fOuterRadius; // Outer-hype radius at z=0 - G4double fEndZ[2]; // z at endcaps, [0] = -ve z, [1] = +ve z - G4double fDPhi; // Phi-width of a segment fDPhi > 0 - G4double fZHalfLength; // Half length along z-axis + G4double fPhiTwist; // Twist angle from -fZHalfLength to fZHalfLength + G4double fInnerRadius; // Inner-hype radius at z=0 + G4double fOuterRadius; // Outer-hype radius at z=0 + G4double fEndZ[2]; // z at endcaps, [0] = -ve z, [1] = +ve z + G4double fDPhi; // Phi-width of a segment fDPhi > 0 + G4double fZHalfLength; // Half length along z-axis - G4double fInnerStereo; // Inner-hype stereo angle - G4double fOuterStereo; // Outer-hype stereo angle - G4double fTanInnerStereo; // std::tan(innerStereoAngle) - G4double fTanOuterStereo; // std::tan(outerStereoAngle) - G4double fKappa; // std::tan(fPhiTwist/2)/fZHalfLen; - G4double fEndInnerRadius[2]; // Inner-hype radii endcaps [0] -ve z, [1] +ve z - G4double fEndOuterRadius[2]; // Outer-hype radii endcaps [0] -ve z, [1] +ve z - G4double fEndPhi[2]; // Phi endcaps, [0] = -ve z, [1] = +ve z + G4double fInnerStereo; // Inner-hype stereo angle + G4double fOuterStereo; // Outer-hype stereo angle + G4double fTanInnerStereo; // std::tan(innerStereoAngle) + G4double fTanOuterStereo; // std::tan(outerStereoAngle) + G4double fKappa; // std::tan(fPhiTwist/2)/fZHalfLen; + G4double fEndInnerRadius[2]; // Inner-hype radii endcaps [0] -ve z, [1] +ve z + G4double fEndOuterRadius[2]; // Outer-hype radii endcaps [0] -ve z, [1] +ve z + G4double fEndPhi[2]; // Phi endcaps, [0] = -ve z, [1] = +ve z - G4double fInnerRadius2; // fInnerRadius * fInnerRadius - G4double fOuterRadius2; // fOuterRadius * fOuterRadius - G4double fTanInnerStereo2; // fInnerRadius * fInnerRadius - G4double fTanOuterStereo2; // fInnerRadius * fInnerRadius - G4double fEndZ2[2]; // fEndZ * fEndZ + G4double fInnerRadius2; // fInnerRadius * fInnerRadius + G4double fOuterRadius2; // fOuterRadius * fOuterRadius + G4double fTanInnerStereo2; // fInnerRadius * fInnerRadius + G4double fTanOuterStereo2; // fInnerRadius * fInnerRadius + G4double fEndZ2[2]; // fEndZ * fEndZ - G4VTwistSurface* fLowerEndcap; // Surface of -ve z - G4VTwistSurface* fUpperEndcap; // Surface of +ve z - G4VTwistSurface* fLatterTwisted; // Surface of -ve phi - G4VTwistSurface* fFormerTwisted; // Surface of +ve phi - G4VTwistSurface* fInnerHype; // Surface of -ve r - G4VTwistSurface* fOuterHype; // Surface of +ve r - - G4double fCubicVolume = 0.0; // Cached value for cubic volume - G4double fSurfaceArea = 0.0; // Cached value for surface area - - mutable G4bool fRebuildPolyhedron = false; - mutable G4Polyhedron* fpPolyhedron = nullptr; // polyhedron for vis - - class LastState // last Inside result - { - public: - LastState() - { - p.set(kInfinity,kInfinity,kInfinity); - inside = kOutside; - } - ~LastState(){} - LastState(const LastState& r) : p(r.p), inside(r.inside){} - LastState& operator=(const LastState& r) - { - if (this == &r) { return *this; } - p = r.p; inside = r.inside; - return *this; - } - public: - G4ThreeVector p; - EInside inside; - }; + G4VTwistSurface* fLowerEndcap; // Surface of -ve z + G4VTwistSurface* fUpperEndcap; // Surface of +ve z + G4VTwistSurface* fLatterTwisted; // Surface of -ve phi + G4VTwistSurface* fFormerTwisted; // Surface of +ve phi + G4VTwistSurface* fInnerHype; // Surface of -ve r + G4VTwistSurface* fOuterHype; // Surface of +ve r + + G4double fCubicVolume = 0.0; // Cached value for cubic volume + G4double fSurfaceArea = 0.0; // Cached value for surface area + + mutable G4bool fRebuildPolyhedron = false; + mutable G4Polyhedron* fpPolyhedron = nullptr; // polyhedron for vis + + class LastState // last Inside result + { + public: + LastState() + { + p.set(kInfinity,kInfinity,kInfinity); + inside = kOutside; + } + ~LastState()= default; + LastState(const LastState& r) = default; + LastState& operator=(const LastState& r) + { + if (this == &r) { return *this; } + p = r.p; inside = r.inside; + return *this; + } + public: + G4ThreeVector p; + EInside inside; + }; - class LastVector // last SurfaceNormal result - { - public: - LastVector() - { - p.set(kInfinity,kInfinity,kInfinity); - vec.set(kInfinity,kInfinity,kInfinity); - surface = new G4VTwistSurface*[1]; - } - ~LastVector() - { - delete [] surface; - } - LastVector(const LastVector& r) : p(r.p), vec(r.vec) - { - surface = new G4VTwistSurface*[1]; - surface[0] = r.surface[0]; - } - LastVector& operator=(const LastVector& r) - { - if (&r == this) { return *this; } - p = r.p; vec = r.vec; - delete [] surface; surface = new G4VTwistSurface*[1]; - surface[0] = r.surface[0]; - return *this; - } - public: - G4ThreeVector p; - G4ThreeVector vec; - G4VTwistSurface **surface; - }; - - class LastValue // last G4double value - { - public: - LastValue() - { - p.set(kInfinity,kInfinity,kInfinity); - value = DBL_MAX; - } - ~LastValue(){} - LastValue(const LastValue& r) : p(r.p), value(r.value){} - LastValue& operator=(const LastValue& r) - { - if (this == &r) { return *this; } - p = r.p; value = r.value; - return *this; - } - public: - G4ThreeVector p; - G4double value; - }; + class LastVector // last SurfaceNormal result + { + public: + LastVector() + { + p.set(kInfinity,kInfinity,kInfinity); + vec.set(kInfinity,kInfinity,kInfinity); + surface = new G4VTwistSurface*[1]; + } + ~LastVector() + { + delete [] surface; + } + LastVector(const LastVector& r) : p(r.p), vec(r.vec) + { + surface = new G4VTwistSurface*[1]; + surface[0] = r.surface[0]; + } + LastVector& operator=(const LastVector& r) + { + if (&r == this) { return *this; } + p = r.p; vec = r.vec; + delete [] surface; surface = new G4VTwistSurface*[1]; + surface[0] = r.surface[0]; + return *this; + } + public: + G4ThreeVector p; + G4ThreeVector vec; + G4VTwistSurface **surface; + }; + + class LastValue // last G4double value + { + public: + LastValue() + { + p.set(kInfinity,kInfinity,kInfinity); + value = DBL_MAX; + } + ~LastValue()= default; + LastValue(const LastValue& r) = default; + LastValue& operator=(const LastValue& r) + { + if (this == &r) { return *this; } + p = r.p; value = r.value; + return *this; + } + public: + G4ThreeVector p; + G4double value; + }; - class LastValueWithDoubleVector // last G4double value - { - public: - LastValueWithDoubleVector() - { - p.set(kInfinity,kInfinity,kInfinity); - vec.set(kInfinity,kInfinity,kInfinity); - value = DBL_MAX; - } - ~LastValueWithDoubleVector(){} - LastValueWithDoubleVector(const LastValueWithDoubleVector& r) - : p(r.p), vec(r.vec), value(r.value){} - LastValueWithDoubleVector& operator=(const LastValueWithDoubleVector& r) - { - if (this == &r) { return *this; } - p = r.p; vec = r.vec; value = r.value; - return *this; - } - public: - G4ThreeVector p; - G4ThreeVector vec; - G4double value; - }; + class LastValueWithDoubleVector // last G4double value + { + public: + LastValueWithDoubleVector() + { + p.set(kInfinity,kInfinity,kInfinity); + vec.set(kInfinity,kInfinity,kInfinity); + value = DBL_MAX; + } + ~LastValueWithDoubleVector()= default; + LastValueWithDoubleVector(const LastValueWithDoubleVector& r) = default; + LastValueWithDoubleVector& operator=(const LastValueWithDoubleVector& r) + { + if (this == &r) { return *this; } + p = r.p; vec = r.vec; value = r.value; + return *this; + } + public: + G4ThreeVector p; + G4ThreeVector vec; + G4double value; + }; - LastState fLastInside; - LastVector fLastNormal; - LastValue fLastDistanceToIn; - LastValue fLastDistanceToOut; - LastValueWithDoubleVector fLastDistanceToInWithV; - LastValueWithDoubleVector fLastDistanceToOutWithV; - - }; + LastState fLastInside; + LastVector fLastNormal; + LastValue fLastDistanceToIn; + LastValue fLastDistanceToOut; + LastValueWithDoubleVector fLastDistanceToInWithV; + LastValueWithDoubleVector fLastDistanceToOutWithV; +}; //===================================================================== diff --git a/source/geometry/solids/specific/include/G4UEllipsoid.hh b/source/geometry/solids/specific/include/G4UEllipsoid.hh index 3e218d6a4b4..a6a67e8e9a8 100644 --- a/source/geometry/solids/specific/include/G4UEllipsoid.hh +++ b/source/geometry/solids/specific/include/G4UEllipsoid.hh @@ -47,16 +47,16 @@ class G4UEllipsoid : public G4UAdapter using Shape_t = vecgeom::UnplacedEllipsoid; using Base_t = G4UAdapter; - public: // with description + public: G4UEllipsoid(const G4String& name, G4double pxSemiAxis, G4double pySemiAxis, G4double pzSemiAxis, G4double pzBottomCut = 0.0, G4double pzTopCut = 0.0); - ~G4UEllipsoid(); + ~G4UEllipsoid() override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; G4double GetDx() const; G4double GetDy() const; @@ -67,9 +67,7 @@ class G4UEllipsoid : public G4UAdapter void SetSemiAxis (G4double x, G4double y, G4double z); void SetZCuts (G4double newzBottomCut, G4double newzTopCut); - inline G4GeometryType GetEntityType() const; - - public: // without description + inline G4GeometryType GetEntityType() const override; G4UEllipsoid(__void__&); // Fake default constructor for usage restricted to direct object @@ -80,12 +78,12 @@ class G4UEllipsoid : public G4UAdapter G4UEllipsoid &operator=( const G4UEllipsoid &source ); // Copy constructor and assignment operator. - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax) const; - G4Polyhedron* CreatePolyhedron() const; + G4double& pmin, G4double& pmax) const override; + G4Polyhedron* CreatePolyhedron() const override; }; // -------------------------------------------------------------------- diff --git a/source/geometry/solids/specific/include/G4UEllipticalCone.hh b/source/geometry/solids/specific/include/G4UEllipticalCone.hh index be8fde4ea32..566ccaf45ce 100644 --- a/source/geometry/solids/specific/include/G4UEllipticalCone.hh +++ b/source/geometry/solids/specific/include/G4UEllipticalCone.hh @@ -47,15 +47,15 @@ class G4UEllipticalCone : public G4UAdapter using Shape_t = vecgeom::UnplacedEllipticalCone; using Base_t = G4UAdapter; - public: // with description + public: G4UEllipticalCone(const G4String& name, G4double pxSemiAxis, G4double pySemiAxis, G4double zMax, G4double pzTopCut); - ~G4UEllipticalCone(); + ~G4UEllipticalCone() override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; G4double GetSemiAxisMin () const; G4double GetSemiAxisMax () const; @@ -66,9 +66,7 @@ class G4UEllipticalCone : public G4UAdapter void SetSemiAxis (G4double x, G4double y, G4double z); void SetZCut (G4double newzTopCut); - inline G4GeometryType GetEntityType() const; - - public: // without description + inline G4GeometryType GetEntityType() const override; G4UEllipticalCone(__void__&); // Fake default constructor for usage restricted to direct object @@ -79,12 +77,12 @@ class G4UEllipticalCone : public G4UAdapter G4UEllipticalCone& operator=( const G4UEllipticalCone& source ); // Copy constructor and assignment operator. - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax) const; - G4Polyhedron* CreatePolyhedron() const; + G4double& pmin, G4double& pmax) const override; + G4Polyhedron* CreatePolyhedron() const override; }; // -------------------------------------------------------------------- diff --git a/source/geometry/solids/specific/include/G4UEllipticalTube.hh b/source/geometry/solids/specific/include/G4UEllipticalTube.hh index 4db4755e3fb..5c2ef2ce399 100644 --- a/source/geometry/solids/specific/include/G4UEllipticalTube.hh +++ b/source/geometry/solids/specific/include/G4UEllipticalTube.hh @@ -47,14 +47,14 @@ class G4UEllipticalTube : public G4UAdapter using Shape_t = vecgeom::UnplacedEllipticalTube; using Base_t = G4UAdapter; - public: // with description + public: G4UEllipticalTube(const G4String& name, G4double dx, G4double dy, G4double dz); - ~G4UEllipticalTube(); + ~G4UEllipticalTube() override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; G4double GetDx() const; G4double GetDy() const; @@ -64,9 +64,7 @@ class G4UEllipticalTube : public G4UAdapter void SetDy(G4double dy); void SetDz(G4double dz); - inline G4GeometryType GetEntityType() const; - - public: // without description + inline G4GeometryType GetEntityType() const override; G4UEllipticalTube(__void__&); // Fake default constructor for usage restricted to direct object @@ -77,12 +75,12 @@ class G4UEllipticalTube : public G4UAdapter G4UEllipticalTube &operator=( const G4UEllipticalTube& source ); // Copy constructor and assignment operator. - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax) const; - G4Polyhedron* CreatePolyhedron() const; + G4double& pmin, G4double& pmax) const override; + G4Polyhedron* CreatePolyhedron() const override; }; // -------------------------------------------------------------------- diff --git a/source/geometry/solids/specific/include/G4UExtrudedSolid.hh b/source/geometry/solids/specific/include/G4UExtrudedSolid.hh index f6bb0b639fb..c404ebbd44b 100644 --- a/source/geometry/solids/specific/include/G4UExtrudedSolid.hh +++ b/source/geometry/solids/specific/include/G4UExtrudedSolid.hh @@ -48,12 +48,12 @@ class G4UExtrudedSolid : public G4UAdapter using Shape_t = vecgeom::UnplacedExtruded; using Base_t = G4UAdapter; - public: // without description + public: struct ZSection { ZSection() : fZ(0.), fOffset(0.,0.), fScale(1.) {} - ZSection(G4double z, G4TwoVector offset, G4double scale) + ZSection(G4double z, const G4TwoVector& offset, G4double scale) : fZ(z), fOffset(offset), fScale(scale) {} G4double fZ; @@ -61,8 +61,6 @@ class G4UExtrudedSolid : public G4UAdapter G4double fScale; }; - public: // with description - G4UExtrudedSolid(const G4String& pName, const std::vector& polygon, const std::vector& zsections); @@ -77,7 +75,7 @@ class G4UExtrudedSolid : public G4UAdapter G4double scale2 = 1. ); // Special constructor for solid with 2 z-sections - ~G4UExtrudedSolid(); + ~G4UExtrudedSolid() override; G4int GetNofVertices() const; G4TwoVector GetVertex(G4int index) const; @@ -86,9 +84,7 @@ class G4UExtrudedSolid : public G4UAdapter ZSection GetZSection(G4int index) const; std::vector GetZSections() const; - inline G4GeometryType GetEntityType() const; - - public: // without description + inline G4GeometryType GetEntityType() const override; G4UExtrudedSolid(__void__&); // Fake default constructor for usage restricted to direct object @@ -99,13 +95,13 @@ class G4UExtrudedSolid : public G4UAdapter G4UExtrudedSolid &operator=(const G4UExtrudedSolid& source); // Copy constructor and assignment operator. - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; - G4Polyhedron* CreatePolyhedron() const; + G4Polyhedron* CreatePolyhedron() const override; }; // -------------------------------------------------------------------- diff --git a/source/geometry/solids/specific/include/G4UGenericPolycone.hh b/source/geometry/solids/specific/include/G4UGenericPolycone.hh index ab610554098..0004dff2b56 100644 --- a/source/geometry/solids/specific/include/G4UGenericPolycone.hh +++ b/source/geometry/solids/specific/include/G4UGenericPolycone.hh @@ -48,7 +48,7 @@ class G4UGenericPolycone : public G4UAdapter using Shape_t = vecgeom::UnplacedGenericPolycone; using Base_t = G4UAdapter; - public: // with description + public: G4UGenericPolycone(const G4String& name, G4double phiStart, // initial phi starting angle @@ -57,7 +57,7 @@ class G4UGenericPolycone : public G4UAdapter const G4double r[], // r coordinate of these corners const G4double z[] ); // z coordinate of these corners - ~G4UGenericPolycone(); + ~G4UGenericPolycone() override; G4double GetStartPhi() const; G4double GetEndPhi() const; @@ -69,11 +69,9 @@ class G4UGenericPolycone : public G4UAdapter G4int GetNumRZCorner() const; G4PolyconeSideRZ GetCorner(G4int index) const; - inline G4GeometryType GetEntityType() const; + inline G4GeometryType GetEntityType() const override; - G4VSolid* Clone() const; - - public: // without description + G4VSolid* Clone() const override; G4UGenericPolycone(__void__&); // Fake default constructor for usage restricted to direct object @@ -84,14 +82,14 @@ class G4UGenericPolycone : public G4UAdapter G4UGenericPolycone& operator=(const G4UGenericPolycone& source); // Copy constructor and assignment operator. - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; - G4Polyhedron* CreatePolyhedron() const; + G4Polyhedron* CreatePolyhedron() const override; private: diff --git a/source/geometry/solids/specific/include/G4UGenericTrap.hh b/source/geometry/solids/specific/include/G4UGenericTrap.hh index 9ccec48e4d3..78e273cd672 100644 --- a/source/geometry/solids/specific/include/G4UGenericTrap.hh +++ b/source/geometry/solids/specific/include/G4UGenericTrap.hh @@ -48,12 +48,12 @@ class G4UGenericTrap : public G4UAdapter using Shape_t = vecgeom::UnplacedGenTrap; using Base_t = G4UAdapter; - public: // with description + public: G4UGenericTrap(const G4String& name, G4double halfZ, const std::vector& vertices); - ~G4UGenericTrap(); + ~G4UGenericTrap() override; G4double GetZHalfLength() const; G4int GetNofVertices() const; @@ -66,9 +66,7 @@ class G4UGenericTrap : public G4UAdapter void SetZHalfLength(G4double); void Initialise(const std::vector& v); - inline G4GeometryType GetEntityType() const; - - public: // without description + inline G4GeometryType GetEntityType() const override; G4UGenericTrap(__void__&); // Fake default constructor for usage restricted to direct object @@ -79,14 +77,14 @@ class G4UGenericTrap : public G4UAdapter G4UGenericTrap& operator=(const G4UGenericTrap& source); // Copy constructor and assignment operator. - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; - G4Polyhedron* CreatePolyhedron() const; + G4Polyhedron* CreatePolyhedron() const override; private: diff --git a/source/geometry/solids/specific/include/G4UHype.hh b/source/geometry/solids/specific/include/G4UHype.hh index 2c68424f62b..bd74be47f7a 100644 --- a/source/geometry/solids/specific/include/G4UHype.hh +++ b/source/geometry/solids/specific/include/G4UHype.hh @@ -47,7 +47,7 @@ class G4UHype : public G4UAdapter using Shape_t = vecgeom::GenericUnplacedHype; using Base_t = G4UAdapter; - public: // with description + public: G4UHype(const G4String& name, G4double newInnerRadius, @@ -55,13 +55,13 @@ class G4UHype : public G4UAdapter G4double newInnerStereo, G4double newOuterStereo, G4double newHalfLenZ); - ~G4UHype(); + ~G4UHype() override; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep); + const G4VPhysicalVolume* pRep) override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; G4double GetInnerRadius () const; G4double GetOuterRadius () const; @@ -75,9 +75,7 @@ class G4UHype : public G4UAdapter void SetInnerStereo (G4double newISte); void SetOuterStereo (G4double newOSte); - inline G4GeometryType GetEntityType() const; - - public: // without description + inline G4GeometryType GetEntityType() const override; G4UHype(__void__&); // Fake default constructor for usage restricted to direct object @@ -88,12 +86,12 @@ class G4UHype : public G4UAdapter G4UHype& operator=( const G4UHype& source ); // Copy constructor and assignment operator. - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax) const; - G4Polyhedron* CreatePolyhedron() const; + G4double& pmin, G4double& pmax) const override; + G4Polyhedron* CreatePolyhedron() const override; }; // -------------------------------------------------------------------- diff --git a/source/geometry/solids/specific/include/G4UParaboloid.hh b/source/geometry/solids/specific/include/G4UParaboloid.hh index ab00dbc7c99..143bdac762a 100644 --- a/source/geometry/solids/specific/include/G4UParaboloid.hh +++ b/source/geometry/solids/specific/include/G4UParaboloid.hh @@ -47,14 +47,14 @@ class G4UParaboloid : public G4UAdapter using Shape_t = vecgeom::UnplacedParaboloid; using Base_t = G4UAdapter; - public: // with description + public: G4UParaboloid(const G4String& name, G4double dz, G4double rlo, G4double rhi); - ~G4UParaboloid(); + ~G4UParaboloid() override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; G4double GetZHalfLength() const; G4double GetRadiusMinusZ() const; @@ -64,9 +64,7 @@ class G4UParaboloid : public G4UAdapter void SetRadiusMinusZ(G4double r1); void SetRadiusPlusZ(G4double r2); - inline G4GeometryType GetEntityType() const; - - public: // without description + inline G4GeometryType GetEntityType() const override; G4UParaboloid(__void__&); // Fake default constructor for usage restricted to direct object @@ -77,12 +75,12 @@ class G4UParaboloid : public G4UAdapter G4UParaboloid& operator=( const G4UParaboloid& source ); // Copy constructor and assignment operator. - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax) const; - G4Polyhedron* CreatePolyhedron() const; + G4double& pmin, G4double& pmax) const override; + G4Polyhedron* CreatePolyhedron() const override; }; // -------------------------------------------------------------------- diff --git a/source/geometry/solids/specific/include/G4UPolycone.hh b/source/geometry/solids/specific/include/G4UPolycone.hh index 9975abae7aa..1e0bf03425a 100644 --- a/source/geometry/solids/specific/include/G4UPolycone.hh +++ b/source/geometry/solids/specific/include/G4UPolycone.hh @@ -50,7 +50,7 @@ class G4UPolycone : public G4UAdapter using Shape_t = vecgeom::GenericUnplacedPolycone; using Base_t = G4UAdapter; - public: // with description + public: G4UPolycone(const G4String& name, G4double phiStart, // initial phi starting angle @@ -67,13 +67,13 @@ class G4UPolycone : public G4UAdapter const G4double r[], // r coordinate of these corners const G4double z[] ); // z coordinate of these corners - ~G4UPolycone(); + ~G4UPolycone() override; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep); + const G4VPhysicalVolume* pRep) override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; G4double GetStartPhi() const; G4double GetDeltaPhi() const; @@ -90,9 +90,7 @@ class G4UPolycone : public G4UAdapter G4bool Reset(); - inline G4GeometryType GetEntityType() const; - - public: // without description + inline G4GeometryType GetEntityType() const override; G4UPolycone(__void__&); // Fake default constructor for usage restricted to direct object @@ -103,14 +101,14 @@ class G4UPolycone : public G4UAdapter G4UPolycone& operator=( const G4UPolycone& source ); // Copy constructor and assignment operator. - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; - G4Polyhedron* CreatePolyhedron() const; + G4Polyhedron* CreatePolyhedron() const override; protected: diff --git a/source/geometry/solids/specific/include/G4UPolyhedra.hh b/source/geometry/solids/specific/include/G4UPolyhedra.hh index d0a95ecc1bb..27646dac93f 100644 --- a/source/geometry/solids/specific/include/G4UPolyhedra.hh +++ b/source/geometry/solids/specific/include/G4UPolyhedra.hh @@ -53,7 +53,7 @@ class G4UPolyhedra : public G4UAdapter using Shape_t = vecgeom::UnplacedPolyhedron; using Base_t = G4UAdapter; - public: // with description + public: G4UPolyhedra( const G4String& name, G4double phiStart, // initial phi starting angle @@ -72,13 +72,13 @@ class G4UPolyhedra : public G4UAdapter const G4double r[], // r coordinate of these corners const G4double z[] ); // z coordinate of these corners - ~G4UPolyhedra(); + ~G4UPolyhedra() override; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep); + const G4VPhysicalVolume* pRep) override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; G4int GetNumSide() const; G4double GetStartPhi() const; @@ -96,9 +96,7 @@ class G4UPolyhedra : public G4UAdapter G4bool Reset(); - inline G4GeometryType GetEntityType() const; - - public: // without description + inline G4GeometryType GetEntityType() const override; G4UPolyhedra(__void__&); // Fake default constructor for usage restricted to direct object @@ -109,14 +107,14 @@ class G4UPolyhedra : public G4UAdapter G4UPolyhedra& operator=( const G4UPolyhedra& source ); // Copy constructor and assignment operator. - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; - G4Polyhedron* CreatePolyhedron() const; + G4Polyhedron* CreatePolyhedron() const override; protected: diff --git a/source/geometry/solids/specific/include/G4UTessellatedSolid.hh b/source/geometry/solids/specific/include/G4UTessellatedSolid.hh index 4e92b3d6e48..4e7e2256267 100644 --- a/source/geometry/solids/specific/include/G4UTessellatedSolid.hh +++ b/source/geometry/solids/specific/include/G4UTessellatedSolid.hh @@ -48,18 +48,18 @@ class G4UTessellatedSolid : public G4UAdapter using Shape_t = vecgeom::UnplacedTessellated; using Base_t = G4UAdapter; - public: // with description + public: G4UTessellatedSolid(); G4UTessellatedSolid(const G4String& pName); - ~G4UTessellatedSolid(); + ~G4UTessellatedSolid() override; G4bool AddFacet(G4VFacet* aFacet); G4VFacet* GetFacet(G4int i) const; G4int GetNumberOfFacets() const; - inline G4GeometryType GetEntityType() const; + inline G4GeometryType GetEntityType() const override; void SetSolidClosed(const G4bool t); G4bool GetSolidClosed() const; @@ -76,8 +76,6 @@ class G4UTessellatedSolid : public G4UAdapter G4int AllocatedMemory(); void DisplayAllocatedMemory(); - public: // without description - G4UTessellatedSolid(__void__&); // Fake default constructor for usage restricted to direct object // persistency for clients requiring preallocation of memory for @@ -87,13 +85,13 @@ class G4UTessellatedSolid : public G4UAdapter G4UTessellatedSolid& operator=(const G4UTessellatedSolid& source); // Copy constructor and assignment operator. - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; - G4Polyhedron* CreatePolyhedron() const; + G4Polyhedron* CreatePolyhedron() const override; private: diff --git a/source/geometry/solids/specific/include/G4UTet.hh b/source/geometry/solids/specific/include/G4UTet.hh index 43bd135c07a..19cc3cb6891 100644 --- a/source/geometry/solids/specific/include/G4UTet.hh +++ b/source/geometry/solids/specific/include/G4UTet.hh @@ -48,7 +48,7 @@ class G4UTet : public G4UAdapter using Shape_t = vecgeom::UnplacedTet; using Base_t = G4UAdapter; - public: // with description + public: G4UTet(const G4String& pName, const G4ThreeVector& anchor, @@ -57,17 +57,15 @@ class G4UTet : public G4UAdapter const G4ThreeVector& p3, G4bool* degeneracyFlag = nullptr); - ~G4UTet(); + ~G4UTet() override; void ComputeDimensions( G4VPVParameterisation* p, const G4int n, - const G4VPhysicalVolume* pRep); + const G4VPhysicalVolume* pRep) override; - G4VSolid* Clone() const; + G4VSolid* Clone() const override; - inline G4GeometryType GetEntityType() const; - - public: // without description + inline G4GeometryType GetEntityType() const override; G4UTet(__void__&); // Fake default constructor for usage restricted to direct object @@ -79,14 +77,14 @@ class G4UTet : public G4UAdapter // Copy constructor and assignment operator. void SetBoundingLimits(const G4ThreeVector& pMin, const G4ThreeVector& pMax); - void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const; + void BoundingLimits(G4ThreeVector& pMin, G4ThreeVector& pMax) const override; G4bool CalculateExtent(const EAxis pAxis, const G4VoxelLimits& pVoxelLimit, const G4AffineTransform& pTransform, - G4double& pMin, G4double& pMax) const; + G4double& pMin, G4double& pMax) const override; - G4Polyhedron* CreatePolyhedron() const; + G4Polyhedron* CreatePolyhedron() const override; void SetVertices(const G4ThreeVector& anchor, const G4ThreeVector& p1, diff --git a/source/geometry/solids/specific/include/G4VCSGface.hh b/source/geometry/solids/specific/include/G4VCSGface.hh index c6b950676d9..70ffdaf6421 100644 --- a/source/geometry/solids/specific/include/G4VCSGface.hh +++ b/source/geometry/solids/specific/include/G4VCSGface.hh @@ -263,35 +263,35 @@ class G4SolidExtentList; class G4VCSGface { - public: // with description + public: - G4VCSGface() {} - virtual ~G4VCSGface() {} + G4VCSGface() = default; + virtual ~G4VCSGface() = default; - virtual G4bool Intersect( const G4ThreeVector& p, const G4ThreeVector& v, - G4bool outgoing, G4double surfTolerance, - G4double& distance, G4double& distFromSurface, - G4ThreeVector& normal, G4bool& allBehind ) = 0; + virtual G4bool Intersect( const G4ThreeVector& p, const G4ThreeVector& v, + G4bool outgoing, G4double surfTolerance, + G4double& distance, G4double& distFromSurface, + G4ThreeVector& normal, G4bool& allBehind ) = 0; - virtual G4double Distance( const G4ThreeVector& p, G4bool outgoing ) = 0; + virtual G4double Distance( const G4ThreeVector& p, G4bool outgoing ) = 0; - virtual EInside Inside( const G4ThreeVector& p, G4double tolerance, - G4double* bestDistance ) = 0; + virtual EInside Inside( const G4ThreeVector& p, G4double tolerance, + G4double* bestDistance ) = 0; - virtual G4ThreeVector Normal( const G4ThreeVector& p, - G4double* bestDistance ) = 0; + virtual G4ThreeVector Normal( const G4ThreeVector& p, + G4double* bestDistance ) = 0; - virtual G4double Extent( const G4ThreeVector axis ) = 0; + virtual G4double Extent( const G4ThreeVector axis ) = 0; - virtual void CalculateExtent( const EAxis axis, - const G4VoxelLimits& voxelLimit, - const G4AffineTransform& tranform, - G4SolidExtentList& extentList ) = 0; + virtual void CalculateExtent( const EAxis axis, + const G4VoxelLimits& voxelLimit, + const G4AffineTransform& tranform, + G4SolidExtentList& extentList ) = 0; - virtual G4VCSGface* Clone() = 0; + virtual G4VCSGface* Clone() = 0; - virtual G4double SurfaceArea() = 0; - virtual G4ThreeVector GetPointOnFace() = 0; + virtual G4double SurfaceArea() = 0; + virtual G4ThreeVector GetPointOnFace() = 0; }; #endif diff --git a/source/geometry/solids/specific/include/G4VCSGfaceted.hh b/source/geometry/solids/specific/include/G4VCSGfaceted.hh index cd6673f5586..b937705f24f 100644 --- a/source/geometry/solids/specific/include/G4VCSGfaceted.hh +++ b/source/geometry/solids/specific/include/G4VCSGfaceted.hh @@ -42,7 +42,7 @@ class G4VisExtent; class G4VCSGfaceted : public G4VSolid { - public: // with description + public: G4VCSGfaceted( const G4String& name ); virtual ~G4VCSGfaceted(); @@ -50,36 +50,36 @@ class G4VCSGfaceted : public G4VSolid G4VCSGfaceted( const G4VCSGfaceted& source ); G4VCSGfaceted& operator=( const G4VCSGfaceted& source ); - virtual G4bool CalculateExtent( const EAxis pAxis, - const G4VoxelLimits& pVoxelLimit, - const G4AffineTransform& pTransform, - G4double& pmin, G4double& pmax) const; + G4bool CalculateExtent( const EAxis pAxis, + const G4VoxelLimits& pVoxelLimit, + const G4AffineTransform& pTransform, + G4double& pmin, G4double& pmax) const override; - virtual EInside Inside( const G4ThreeVector& p ) const; + EInside Inside( const G4ThreeVector& p ) const override; - virtual G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const; + G4ThreeVector SurfaceNormal( const G4ThreeVector& p ) const override; - virtual G4double DistanceToIn( const G4ThreeVector& p, - const G4ThreeVector& v ) const; - virtual G4double DistanceToIn( const G4ThreeVector& p ) const; - virtual G4double DistanceToOut( const G4ThreeVector& p, - const G4ThreeVector& v, - const G4bool calcNorm = false, - G4bool* validNorm = nullptr, - G4ThreeVector* n = nullptr ) const; - virtual G4double DistanceToOut( const G4ThreeVector& p ) const; + G4double DistanceToIn( const G4ThreeVector& p, + const G4ThreeVector& v ) const override; + G4double DistanceToIn( const G4ThreeVector& p ) const override; + G4double DistanceToOut( const G4ThreeVector& p, + const G4ThreeVector& v, + const G4bool calcNorm = false, + G4bool* validNorm = nullptr, + G4ThreeVector* n = nullptr ) const override; + G4double DistanceToOut( const G4ThreeVector& p ) const override; - virtual G4GeometryType GetEntityType() const; + G4GeometryType GetEntityType() const override; - virtual std::ostream& StreamInfo(std::ostream& os) const; + std::ostream& StreamInfo(std::ostream& os) const override; - virtual G4Polyhedron* CreatePolyhedron() const = 0; + G4Polyhedron* CreatePolyhedron() const override = 0; - virtual void DescribeYourselfTo( G4VGraphicsScene& scene ) const; + void DescribeYourselfTo( G4VGraphicsScene& scene ) const override; - virtual G4VisExtent GetExtent() const; + G4VisExtent GetExtent() const override; - virtual G4Polyhedron* GetPolyhedron () const; + G4Polyhedron* GetPolyhedron () const override; G4int GetCubVolStatistics() const; G4double GetCubVolEpsilon() const; @@ -90,21 +90,19 @@ class G4VCSGfaceted : public G4VSolid void SetAreaStatistics(G4int st); void SetAreaAccuracy(G4double ep); - virtual G4double GetCubicVolume(); + G4double GetCubicVolume() override; // Returns an estimation of the geometrical cubic volume of the // solid. Caches the computed value once computed the first time. - virtual G4double GetSurfaceArea(); + G4double GetSurfaceArea() override; // Returns an estimation of the geometrical surface area of the // solid. Caches the computed value once computed the first time. - public: // without description - G4VCSGfaceted(__void__&); // Fake default constructor for usage restricted to direct object // persistency for clients requiring preallocation of memory for // persistifiable objects. - protected: // without description + protected: G4int numFace = 0; G4VCSGface **faces = nullptr; @@ -129,7 +127,6 @@ class G4VCSGfaceted : public G4VSolid G4double fCubVolEpsilon; G4double fAreaAccuracy; // Statistics, error accuracy for volume estimation. - }; #endif diff --git a/source/geometry/solids/specific/include/G4VFacet.hh b/source/geometry/solids/specific/include/G4VFacet.hh index bba19e524f1..46f9fe36b70 100644 --- a/source/geometry/solids/specific/include/G4VFacet.hh +++ b/source/geometry/solids/specific/include/G4VFacet.hh @@ -75,7 +75,7 @@ class G4VFacet virtual G4double GetArea() const = 0; virtual G4ThreeVector GetPointOnFace() const = 0; - void ApplyTranslation (const G4ThreeVector v); + void ApplyTranslation (const G4ThreeVector& v); std::ostream& StreamInfo(std::ostream& os) const; diff --git a/source/geometry/solids/specific/include/G4VTwistSurface.hh b/source/geometry/solids/specific/include/G4VTwistSurface.hh index 219628fc9e8..a3d42a6d964 100644 --- a/source/geometry/solids/specific/include/G4VTwistSurface.hh +++ b/source/geometry/solids/specific/include/G4VTwistSurface.hh @@ -47,24 +47,22 @@ class G4VTwistSurface { - public: // without description + public: enum EValidate { kDontValidate = 0, kValidateWithTol = 1, kValidateWithoutTol = 2, kUninitialized = 3 }; - public: // with description - G4VTwistSurface (const G4String& name); G4VTwistSurface (const G4String& name, - const G4RotationMatrix& rot, - const G4ThreeVector& tlate, - G4int handedness, - const EAxis axis1, - const EAxis axis2, - G4double axis0min = -kInfinity, - G4double axis1min = -kInfinity, - G4double axis0max = kInfinity, - G4double axis1max = kInfinity); + const G4RotationMatrix& rot, + const G4ThreeVector& tlate, + G4int handedness, + const EAxis axis1, + const EAxis axis2, + G4double axis0min = -kInfinity, + G4double axis1min = -kInfinity, + G4double axis0max = kInfinity, + G4double axis1max = kInfinity); virtual ~G4VTwistSurface(); @@ -100,8 +98,6 @@ class G4VTwistSurface void DebugPrint() const; - // get methods - virtual G4ThreeVector GetNormal(const G4ThreeVector& xx,G4bool isGlobal) = 0; virtual G4String GetName() const { return fName; } @@ -169,25 +165,19 @@ class G4VTwistSurface G4int GetEdgeVisibility( G4int i, G4int j, G4int m, G4int n, G4int number, G4int orientation) ; - public: // without description - G4VTwistSurface(__void__&); // Fake default constructor for usage restricted to direct object // persistency for clients requiring preallocation of memory for // persistifiable objects. - protected: // with description + protected: - // get methods - inline G4VTwistSurface** GetNeighbours() { return fNeighbours; } inline G4int GetNeighbours(G4int areacode, G4VTwistSurface* surfaces[]); inline G4ThreeVector GetCorner(G4int areacode) const; - void GetBoundaryAxis(G4int areacode, EAxis axis[]) const; - void GetBoundaryLimit(G4int areacode, G4double limit[]) const; + void GetBoundaryAxis(G4int areacode, EAxis axis[]) const; + void GetBoundaryLimit(G4int areacode, G4double limit[]) const; virtual G4int GetAreaCode(const G4ThreeVector& xx, G4bool withtol=true) = 0; - - // set methods virtual void SetBoundary(const G4int& axiscode, const G4ThreeVector& direction, @@ -238,7 +228,7 @@ class G4VTwistSurface class CurrentStatus { - public: + public: CurrentStatus(); virtual ~CurrentStatus(); @@ -267,7 +257,7 @@ class G4VTwistSurface void DebugPrint() const; - private: + private: G4double fDistance[G4VSURFACENXX]; G4ThreeVector fXX[G4VSURFACENXX]; @@ -282,7 +272,8 @@ class G4VTwistSurface class Boundary { - public: + public: + Boundary(); virtual ~Boundary(); @@ -298,11 +289,12 @@ class G4VTwistSurface G4ThreeVector& x0, G4int& boundarytype) const; - private: - G4int fBoundaryAcode; + private: + + G4int fBoundaryAcode{-1}; G4ThreeVector fBoundaryDirection; G4ThreeVector fBoundaryX0; - G4int fBoundaryType; + G4int fBoundaryType{0}; }; EAxis fAxis[2]; @@ -316,6 +308,7 @@ class G4VTwistSurface class G4SurfCurNormal { public: + G4ThreeVector p; G4ThreeVector normal; }; @@ -334,6 +327,7 @@ class G4VTwistSurface class G4SurfSideQuery { public: + G4ThreeVector me; G4ThreeVector vec; G4bool withTol; diff --git a/source/geometry/solids/specific/include/G4VTwistSurface.icc b/source/geometry/solids/specific/include/G4VTwistSurface.icc index cc3631e6952..17f43f25a27 100644 --- a/source/geometry/solids/specific/include/G4VTwistSurface.icc +++ b/source/geometry/solids/specific/include/G4VTwistSurface.icc @@ -42,7 +42,7 @@ G4double G4VTwistSurface::DistanceToPlaneWithV(const G4ThreeVector& p, { G4double q = n0 * v; G4double t = kInfinity; - if (q) { t = (n0 * (x0 - p)) / q; } + if (q != 0.0) { t = (n0 * (x0 - p)) / q; } xx = p + t * v; return t; } @@ -150,8 +150,7 @@ G4double G4VTwistSurface::DistanceToLine(const G4ThreeVector& p, inline G4bool G4VTwistSurface::IsAxis0(G4int areacode) const { - if (areacode & sAxis0) return true; - return false; + return (areacode & sAxis0) != 0; } //===================================================================== @@ -160,8 +159,7 @@ G4bool G4VTwistSurface::IsAxis0(G4int areacode) const inline G4bool G4VTwistSurface::IsAxis1(G4int areacode) const { - if (areacode & sAxis1) return true; - return false; + return (areacode & sAxis1) != 0; } //===================================================================== @@ -170,8 +168,7 @@ G4bool G4VTwistSurface::IsAxis1(G4int areacode) const inline G4bool G4VTwistSurface::IsOutside(G4int areacode) const { - if (areacode & sInside) return false; - return true; + return (areacode & sInside) == 0; } //===================================================================== @@ -180,11 +177,11 @@ G4bool G4VTwistSurface::IsOutside(G4int areacode) const inline G4bool G4VTwistSurface::IsInside(G4int areacode, G4bool testbitmode) const { - if (areacode & sInside) { + if ((areacode & sInside) != 0) { if (testbitmode) { return true; } else { - if (!((areacode & sBoundary) || (areacode & sCorner))) return true; + if (((areacode & sBoundary) == 0) && ((areacode & sCorner) == 0)) return true; } } return false; @@ -354,7 +351,7 @@ G4VTwistSurface::GetNeighbours(G4int areacode, G4VTwistSurface** surfaces) inline G4ThreeVector G4VTwistSurface::GetCorner(G4int areacode) const { - if (!(areacode & sCorner)) + if ((areacode & sCorner) == 0) { std::ostringstream message; message << "Area code must represent corner." << G4endl diff --git a/source/geometry/solids/specific/include/G4VTwistedFaceted.hh b/source/geometry/solids/specific/include/G4VTwistedFaceted.hh index 03500e4156f..d5ceff1457e 100644 --- a/source/geometry/solids/specific/include/G4VTwistedFaceted.hh +++ b/source/geometry/solids/specific/include/G4VTwistedFaceted.hh @@ -47,259 +47,254 @@ class G4ClippablePolygon; class G4VTwistedFaceted: public G4VSolid { - public: // with description + public: - G4VTwistedFaceted(const G4String& pname, // Name of instance - G4double PhiTwist, // twist angle - G4double pDz, // half z lenght - G4double pTheta, // direction between end planes - G4double pPhi, // defined by polar & azim. angles - G4double pDy1, // half y length at -pDz - G4double pDx1, // half x length at -pDz,-pDy - G4double pDx2, // half x length at -pDz,+pDy - G4double pDy2, // half y length at +pDz - G4double pDx3, // half x length at +pDz,-pDy - G4double pDx4, // half x length at +pDz,+pDy - G4double pAlph // tilt angle at +pDz - ); + G4VTwistedFaceted(const G4String& pname, // Name of instance + G4double PhiTwist, // twist angle + G4double pDz, // half z lenght + G4double pTheta, // direction between end planes + G4double pPhi, // defined by polar & azim. angles + G4double pDy1, // half y length at -pDz + G4double pDx1, // half x length at -pDz,-pDy + G4double pDx2, // half x length at -pDz,+pDy + G4double pDy2, // half y length at +pDz + G4double pDx3, // half x length at +pDz,-pDy + G4double pDx4, // half x length at +pDz,+pDy + G4double pAlph // tilt angle at +pDz + ); - virtual ~G4VTwistedFaceted(); + virtual ~G4VTwistedFaceted(); - virtual void ComputeDimensions(G4VPVParameterisation*, - const G4int, - const G4VPhysicalVolume* ); + void ComputeDimensions( G4VPVParameterisation*, + const G4int, + const G4VPhysicalVolume* ) override; - virtual void BoundingLimits(G4ThreeVector &pMin, G4ThreeVector &pMax) const; + void BoundingLimits(G4ThreeVector &pMin, G4ThreeVector &pMax) const override; - virtual G4bool CalculateExtent(const EAxis pAxis, - const G4VoxelLimits& pVoxelLimit, - const G4AffineTransform& pTransform, - G4double& pMin, - G4double& pMax ) const; + G4bool CalculateExtent(const EAxis pAxis, + const G4VoxelLimits& pVoxelLimit, + const G4AffineTransform& pTransform, + G4double& pMin, + G4double& pMax ) const override; - virtual G4double DistanceToIn (const G4ThreeVector& p, - const G4ThreeVector& v ) const; + G4double DistanceToIn (const G4ThreeVector& p, + const G4ThreeVector& v ) const override; - virtual G4double DistanceToIn (const G4ThreeVector& p ) const; + G4double DistanceToIn (const G4ThreeVector& p ) const override; - virtual G4double DistanceToOut(const G4ThreeVector& p, - const G4ThreeVector& v, - const G4bool calcnorm = false, - G4bool* validnorm = nullptr, - G4ThreeVector* n = nullptr ) const; + G4double DistanceToOut(const G4ThreeVector& p, + const G4ThreeVector& v, + const G4bool calcnorm = false, + G4bool* validnorm = nullptr, + G4ThreeVector* n = nullptr ) const override; - virtual G4double DistanceToOut(const G4ThreeVector& p) const; + G4double DistanceToOut(const G4ThreeVector& p) const override; - virtual EInside Inside (const G4ThreeVector& p) const; + EInside Inside (const G4ThreeVector& p) const override; - virtual G4ThreeVector SurfaceNormal(const G4ThreeVector& p) const; + G4ThreeVector SurfaceNormal(const G4ThreeVector& p) const override; - G4ThreeVector GetPointOnSurface() const; - G4ThreeVector GetPointInSolid(G4double z) const; + G4ThreeVector GetPointOnSurface() const override; + G4ThreeVector GetPointInSolid(G4double z) const; - virtual G4double GetCubicVolume(); - virtual G4double GetSurfaceArea(); + G4double GetCubicVolume() override; + G4double GetSurfaceArea() override; - virtual void DescribeYourselfTo (G4VGraphicsScene& scene) const; - virtual G4Polyhedron* CreatePolyhedron () const; - virtual G4Polyhedron* GetPolyhedron () const; + void DescribeYourselfTo (G4VGraphicsScene& scene) const override; + G4Polyhedron* CreatePolyhedron () const override; + G4Polyhedron* GetPolyhedron () const override; - virtual std::ostream &StreamInfo(std::ostream& os) const; + std::ostream &StreamInfo(std::ostream& os) const override; - // accessors + // accessors - inline G4double GetTwistAngle() const { return fPhiTwist; } + inline G4double GetTwistAngle() const { return fPhiTwist; } - inline G4double GetDx1 () const { return fDx1 ; } - inline G4double GetDx2 () const { return fDx2 ; } - inline G4double GetDx3 () const { return fDx3 ; } - inline G4double GetDx4 () const { return fDx4 ; } - inline G4double GetDy1 () const { return fDy1 ; } - inline G4double GetDy2 () const { return fDy2 ; } - inline G4double GetDz () const { return fDz ; } - inline G4double GetPhi () const { return fPhi ; } - inline G4double GetTheta () const { return fTheta ; } - inline G4double GetAlpha () const { return fAlph ; } - - inline G4double Xcoef(G4double u, G4double phi, G4double ftg) const; - // For calculating the w(u) function - - inline G4double GetValueA(G4double phi) const; - inline G4double GetValueB(G4double phi) const; - inline G4double GetValueD(G4double phi) const; - - virtual G4VisExtent GetExtent () const; - virtual G4GeometryType GetEntityType() const; - - public: // without description - - G4VTwistedFaceted(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. - - G4VTwistedFaceted(const G4VTwistedFaceted& rhs); - G4VTwistedFaceted& operator=(const G4VTwistedFaceted& rhs); - // Copy constructor and assignment operator. - - protected: // with description - - mutable G4bool fRebuildPolyhedron = false; - mutable G4Polyhedron* fpPolyhedron = nullptr; // polyhedron for vis - - private: - - double GetLateralFaceArea(const G4TwoVector& p1, - const G4TwoVector& p2, - const G4TwoVector& p3, - const G4TwoVector& p4) const; - void CreateSurfaces(); - - private: - - G4double fTheta; - G4double fPhi ; - - G4double fDy1; - G4double fDx1; - G4double fDx2; - - G4double fDy2; - G4double fDx3; - G4double fDx4; - - G4double fDz; // Half-length along the z axis - - G4double fDx ; // maximum side in x - G4double fDy ; // maximum side in y - - G4double fAlph ; - G4double fTAlph ; // std::tan(fAlph) - - G4double fdeltaX ; - G4double fdeltaY ; - - G4double fPhiTwist; // twist angle ( dphi in surface equation) - - G4VTwistSurface* fLowerEndcap ; // surface of -ve z - G4VTwistSurface* fUpperEndcap ; // surface of +ve z - - G4VTwistSurface* fSide0 ; // Twisted Side at phi = 0 deg - G4VTwistSurface* fSide90 ; // Twisted Side at phi = 90 deg - G4VTwistSurface* fSide180 ; // Twisted Side at phi = 180 deg - G4VTwistSurface* fSide270 ; // Twisted Side at phi = 270 deg - - protected: - - G4double fCubicVolume = 0.0; // volume of the solid - G4double fSurfaceArea = 0.0; // area of the solid - - private: - - class LastState // last Inside result - { - public: - LastState() - { - p.set(kInfinity,kInfinity,kInfinity); inside = kOutside; - } - ~LastState(){} - LastState(const LastState& r) : p(r.p), inside(r.inside){} - LastState& operator=(const LastState& r) - { - if (this == &r) { return *this; } - p = r.p; inside = r.inside; - return *this; - } - public: - G4ThreeVector p; - EInside inside; - }; - - class LastVector // last SurfaceNormal result - { - public: - LastVector() - { - p.set(kInfinity,kInfinity,kInfinity); - vec.set(kInfinity,kInfinity,kInfinity); - surface = new G4VTwistSurface*[1]; - } - ~LastVector() - { - delete [] surface; - } - LastVector(const LastVector& r) : p(r.p), vec(r.vec) - { - surface = new G4VTwistSurface*[1]; - surface[0] = r.surface[0]; - } - LastVector& operator=(const LastVector& r) - { - if (&r == this) { return *this; } - p = r.p; vec = r.vec; - delete [] surface; surface = new G4VTwistSurface*[1]; - surface[0] = r.surface[0]; - return *this; - } - public: - G4ThreeVector p; - G4ThreeVector vec; - G4VTwistSurface **surface; - }; - - class LastValue // last G4double value - { - public: - LastValue() - { - p.set(kInfinity,kInfinity,kInfinity); - value = DBL_MAX; - } - ~LastValue(){} - LastValue(const LastValue& r) : p(r.p), value(r.value){} - LastValue& operator=(const LastValue& r) - { - if (this == &r) { return *this; } - p = r.p; value = r.value; - return *this; - } - public: - G4ThreeVector p; - G4double value; - }; - - class LastValueWithDoubleVector // last G4double value - { - public: - LastValueWithDoubleVector() - { - p.set(kInfinity,kInfinity,kInfinity); - vec.set(kInfinity,kInfinity,kInfinity); - value = DBL_MAX; - } - ~LastValueWithDoubleVector(){} - LastValueWithDoubleVector(const LastValueWithDoubleVector& r) - : p(r.p), vec(r.vec), value(r.value){} - LastValueWithDoubleVector& operator=(const LastValueWithDoubleVector& r) - { - if (this == &r) { return *this; } - p = r.p; vec = r.vec; value = r.value; - return *this; - } - public: - G4ThreeVector p; - G4ThreeVector vec; - G4double value; - }; - - LastState fLastInside; - LastVector fLastNormal; - LastValue fLastDistanceToIn; - LastValue fLastDistanceToOut; - LastValueWithDoubleVector fLastDistanceToInWithV; - LastValueWithDoubleVector fLastDistanceToOutWithV; - }; + inline G4double GetDx1 () const { return fDx1 ; } + inline G4double GetDx2 () const { return fDx2 ; } + inline G4double GetDx3 () const { return fDx3 ; } + inline G4double GetDx4 () const { return fDx4 ; } + inline G4double GetDy1 () const { return fDy1 ; } + inline G4double GetDy2 () const { return fDy2 ; } + inline G4double GetDz () const { return fDz ; } + inline G4double GetPhi () const { return fPhi ; } + inline G4double GetTheta () const { return fTheta ; } + inline G4double GetAlpha () const { return fAlph ; } + + inline G4double Xcoef(G4double u, G4double phi, G4double ftg) const; + // For calculating the w(u) function + + inline G4double GetValueA(G4double phi) const; + inline G4double GetValueB(G4double phi) const; + inline G4double GetValueD(G4double phi) const; + + G4VisExtent GetExtent () const override; + G4GeometryType GetEntityType() const override; + + G4VTwistedFaceted(__void__&); + // Fake default constructor for usage restricted to direct object + // persistency for clients requiring preallocation of memory for + // persistifiable objects. + + G4VTwistedFaceted(const G4VTwistedFaceted& rhs); + G4VTwistedFaceted& operator=(const G4VTwistedFaceted& rhs); + // Copy constructor and assignment operator. + + protected: + + mutable G4bool fRebuildPolyhedron = false; + mutable G4Polyhedron* fpPolyhedron = nullptr; // polyhedron for vis + + G4double fCubicVolume = 0.0; // volume of the solid + G4double fSurfaceArea = 0.0; // area of the solid + + private: + + double GetLateralFaceArea(const G4TwoVector& p1, + const G4TwoVector& p2, + const G4TwoVector& p3, + const G4TwoVector& p4) const; + void CreateSurfaces(); + + private: + + G4double fTheta; + G4double fPhi ; + + G4double fDy1; + G4double fDx1; + G4double fDx2; + + G4double fDy2; + G4double fDx3; + G4double fDx4; + + G4double fDz; // Half-length along the z axis + + G4double fDx ; // maximum side in x + G4double fDy ; // maximum side in y + + G4double fAlph ; + G4double fTAlph ; // std::tan(fAlph) + + G4double fdeltaX ; + G4double fdeltaY ; + + G4double fPhiTwist; // twist angle ( dphi in surface equation) + + G4VTwistSurface* fLowerEndcap ; // surface of -ve z + G4VTwistSurface* fUpperEndcap ; // surface of +ve z + + G4VTwistSurface* fSide0 ; // Twisted Side at phi = 0 deg + G4VTwistSurface* fSide90 ; // Twisted Side at phi = 90 deg + G4VTwistSurface* fSide180 ; // Twisted Side at phi = 180 deg + G4VTwistSurface* fSide270 ; // Twisted Side at phi = 270 deg + + private: + + class LastState // last Inside result + { + public: + LastState() + { + p.set(kInfinity,kInfinity,kInfinity); inside = kOutside; + } + ~LastState()= default; + LastState(const LastState& r) = default; + LastState& operator=(const LastState& r) + { + if (this == &r) { return *this; } + p = r.p; inside = r.inside; + return *this; + } + public: + G4ThreeVector p; + EInside inside; + }; + + class LastVector // last SurfaceNormal result + { + public: + LastVector() + { + p.set(kInfinity,kInfinity,kInfinity); + vec.set(kInfinity,kInfinity,kInfinity); + surface = new G4VTwistSurface*[1]; + } + ~LastVector() + { + delete [] surface; + } + LastVector(const LastVector& r) : p(r.p), vec(r.vec) + { + surface = new G4VTwistSurface*[1]; + surface[0] = r.surface[0]; + } + LastVector& operator=(const LastVector& r) + { + if (&r == this) { return *this; } + p = r.p; vec = r.vec; + delete [] surface; surface = new G4VTwistSurface*[1]; + surface[0] = r.surface[0]; + return *this; + } + public: + G4ThreeVector p; + G4ThreeVector vec; + G4VTwistSurface **surface; + }; + + class LastValue // last G4double value + { + public: + LastValue() + { + p.set(kInfinity,kInfinity,kInfinity); + value = DBL_MAX; + } + ~LastValue()= default; + LastValue(const LastValue& r) = default; + LastValue& operator=(const LastValue& r) + { + if (this == &r) { return *this; } + p = r.p; value = r.value; + return *this; + } + public: + G4ThreeVector p; + G4double value; + }; + + class LastValueWithDoubleVector // last G4double value + { + public: + LastValueWithDoubleVector() + { + p.set(kInfinity,kInfinity,kInfinity); + vec.set(kInfinity,kInfinity,kInfinity); + value = DBL_MAX; + } + ~LastValueWithDoubleVector()= default; + LastValueWithDoubleVector(const LastValueWithDoubleVector& r) = default; + LastValueWithDoubleVector& operator=(const LastValueWithDoubleVector& r) + { + if (this == &r) { return *this; } + p = r.p; vec = r.vec; value = r.value; + return *this; + } + public: + G4ThreeVector p; + G4ThreeVector vec; + G4double value; + }; + + LastState fLastInside; + LastVector fLastNormal; + LastValue fLastDistanceToIn; + LastValue fLastDistanceToOut; + LastValueWithDoubleVector fLastDistanceToInWithV; + LastValueWithDoubleVector fLastDistanceToOutWithV; +}; //===================================================================== diff --git a/source/geometry/solids/specific/include/G4Voxelizer.hh b/source/geometry/solids/specific/include/G4Voxelizer.hh index c26e6aa2cde..eaff03db099 100644 --- a/source/geometry/solids/specific/include/G4Voxelizer.hh +++ b/source/geometry/solids/specific/include/G4Voxelizer.hh @@ -177,8 +177,6 @@ class G4Voxelizer } }; - private: - void BuildEmpty (); G4String GetCandidatesAsString(const G4SurfBits& bits) const; diff --git a/source/geometry/solids/specific/include/G4Voxelizer.icc b/source/geometry/solids/specific/include/G4Voxelizer.icc index 57bf3653b2a..108edd2f9cd 100644 --- a/source/geometry/solids/specific/include/G4Voxelizer.icc +++ b/source/geometry/solids/specific/include/G4Voxelizer.icc @@ -31,7 +31,7 @@ template inline G4int G4Voxelizer::BinarySearch(const std::vector& vec, T value) { - typename std::vector::const_iterator begin=vec.cbegin(), end=vec.cend(); + auto begin=vec.cbegin(), end=vec.cend(); return G4int(std::upper_bound(begin, end, value) - begin - 1); } @@ -91,7 +91,8 @@ G4bool G4Voxelizer::GetPointVoxel(const G4ThreeVector& p, { for (auto i = 0; i <= 2; ++i) { - if (p[i] < *fBoundaries[i].begin() || p[i] > *fBoundaries[i].end()) + auto begin = fBoundaries[i].cbegin(), end = fBoundaries[i].cend(); + if (p[i] < *begin || p[i] > *end) { return false; } diff --git a/source/geometry/solids/specific/src/G4ClippablePolygon.cc b/source/geometry/solids/specific/src/G4ClippablePolygon.cc index 9637ae3efd5..9db21f9078c 100644 --- a/source/geometry/solids/specific/src/G4ClippablePolygon.cc +++ b/source/geometry/solids/specific/src/G4ClippablePolygon.cc @@ -43,9 +43,7 @@ G4ClippablePolygon::G4ClippablePolygon() // Destructor // -G4ClippablePolygon::~G4ClippablePolygon() -{ -} +G4ClippablePolygon::~G4ClippablePolygon() = default; // AddVertexInOrder // @@ -72,7 +70,7 @@ G4bool G4ClippablePolygon::Clip( const G4VoxelLimits& voxelLimit ) ClipAlongOneAxis( voxelLimit, kZAxis ); } - return (vertices.size() > 0); + return (!vertices.empty()); } // PartialClip @@ -89,7 +87,7 @@ G4bool G4ClippablePolygon::PartialClip( const G4VoxelLimits& voxelLimit, if (IgnoreMe != kZAxis) ClipAlongOneAxis( voxelLimit, kZAxis ); } - return (vertices.size() > 0); + return (!vertices.empty()); } // GetExtent @@ -388,7 +386,7 @@ void G4ClippablePolygon::ClipAlongOneAxis( const G4VoxelLimits& voxelLimit, // If nothing is left from the above clip, we might as well return now // (but with an empty vertices) // - if (tempPolygon.size() == 0) + if (tempPolygon.empty()) { vertices.clear(); return; @@ -405,7 +403,7 @@ void G4ClippablePolygon::ClipAlongOneAxis( const G4VoxelLimits& voxelLimit, // // If nothing is left, return now // - if (vertices.size() == 0) return; + if (vertices.empty()) return; } // ClipToSimpleLimits diff --git a/source/geometry/solids/specific/src/G4Ellipsoid.cc b/source/geometry/solids/specific/src/G4Ellipsoid.cc index f4ff95ffdd7..53a831961c2 100644 --- a/source/geometry/solids/specific/src/G4Ellipsoid.cc +++ b/source/geometry/solids/specific/src/G4Ellipsoid.cc @@ -374,7 +374,7 @@ G4ThreeVector G4Ellipsoid::ApproxSurfaceNormal(const G4ThreeVector& p) const if (distR > distZ && rr > 0.) // distR > distZ is correct! return G4ThreeVector(x*fSx, y*fSy, z*fSz).unit(); else - return G4ThreeVector(0., 0., std::copysign(1., z - fZMidCut)); + return { 0., 0., std::copysign(1., z - fZMidCut) }; } ////////////////////////////////////////////////////////////////////////// @@ -641,7 +641,7 @@ G4double G4Ellipsoid::DistanceToOut(const G4ThreeVector& p) const G4GeometryType G4Ellipsoid::GetEntityType() const { - return G4String("G4Ellipsoid"); + return {"G4Ellipsoid"}; } ////////////////////////////////////////////////////////////////////////// @@ -902,7 +902,7 @@ void G4Ellipsoid::DescribeYourselfTo (G4VGraphicsScene& scene) const G4VisExtent G4Ellipsoid::GetExtent() const { - return G4VisExtent(-fXmax, fXmax, -fYmax, fYmax, fZBottomCut, fZTopCut); + return { -fXmax, fXmax, -fYmax, fYmax, fZBottomCut, fZTopCut }; } ////////////////////////////////////////////////////////////////////////// diff --git a/source/geometry/solids/specific/src/G4EllipticalCone.cc b/source/geometry/solids/specific/src/G4EllipticalCone.cc index 5e0d0fc8ae1..123808e8ef5 100644 --- a/source/geometry/solids/specific/src/G4EllipticalCone.cc +++ b/source/geometry/solids/specific/src/G4EllipticalCone.cc @@ -216,7 +216,7 @@ G4EllipticalCone::CalculateExtent(const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // Set bounding envelope (benv) and calculate extent @@ -285,7 +285,7 @@ G4ThreeVector G4EllipticalCone::SurfaceNormal( const G4ThreeVector& p) const { norm = G4ThreeVector(p.x()*invXX, p.y()*invYY, hp - p.z()); G4double mag = norm.mag(); - if (mag == 0) return G4ThreeVector(0,0,1); // apex + if (mag == 0) return {0,0,1}; // apex norm *= (1/mag); ++nsurf; } @@ -335,7 +335,7 @@ G4EllipticalCone::ApproxSurfaceNormal(const G4ThreeVector& p) const if (ds > dz && std::abs(hp - p.z()) > halfCarTol) return G4ThreeVector(p.x()*invXX, p.y()*invYY, hp - p.z()).unit(); else - return G4ThreeVector(0., 0.,(p.z() < 0) ? -1. : 1.); + return { 0., 0., (G4double)((p.z() < 0) ? -1. : 1.) }; } //////////////////////////////////////////////////////////////////////// @@ -799,7 +799,7 @@ G4double G4EllipticalCone::DistanceToOut(const G4ThreeVector& p) const G4GeometryType G4EllipticalCone::GetEntityType() const { - return G4String("G4EllipticalCone"); + return {"G4EllipticalCone"}; } ///////////////////////////////////////////////////////////////////////// @@ -965,9 +965,7 @@ G4VisExtent G4EllipticalCone::GetExtent() const // G4ThreeVector pmin,pmax; BoundingLimits(pmin,pmax); - return G4VisExtent(pmin.x(),pmax.x(), - pmin.y(),pmax.y(), - pmin.z(),pmax.z()); + return { pmin.x(), pmax.x(), pmin.y(), pmax.y(), pmin.z(), pmax.z() }; } G4Polyhedron* G4EllipticalCone::CreatePolyhedron () const diff --git a/source/geometry/solids/specific/src/G4EllipticalTube.cc b/source/geometry/solids/specific/src/G4EllipticalTube.cc index a3d9ff0061b..00099ef9acd 100644 --- a/source/geometry/solids/specific/src/G4EllipticalTube.cc +++ b/source/geometry/solids/specific/src/G4EllipticalTube.cc @@ -213,7 +213,7 @@ G4EllipticalTube::CalculateExtent( const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis, pVoxelLimit, pTransform, pMin, pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } G4double dx = fDx; @@ -338,7 +338,7 @@ G4EllipticalTube::ApproxSurfaceNormal( const G4ThreeVector& p ) const if (distR > distZ && (x * x + y * y) > 0) return G4ThreeVector(p.x() * fDDy, p.y() * fDDx, 0.).unit(); else - return G4ThreeVector(0, 0, (p.z() < 0 ? -1. : 1.)); + return {0, 0, (p.z() < 0 ? -1. : 1.)}; } ////////////////////////////////////////////////////////////////////////// @@ -619,7 +619,7 @@ G4double G4EllipticalTube::DistanceToOut( const G4ThreeVector& p ) const G4GeometryType G4EllipticalTube::GetEntityType() const { - return G4String("G4EllipticalTube"); + return {"G4EllipticalTube"}; } ////////////////////////////////////////////////////////////////////////// @@ -793,7 +793,7 @@ void G4EllipticalTube::DescribeYourselfTo( G4VGraphicsScene& scene ) const G4VisExtent G4EllipticalTube::GetExtent() const { - return G4VisExtent( -fDx, fDx, -fDy, fDy, -fDz, fDz ); + return { -fDx, fDx, -fDy, fDy, -fDz, fDz }; } #endif // !defined(G4GEOM_USE_UELLIPTICALTUBE) || !defined(G4GEOM_USE_SYS_USOLIDS) diff --git a/source/geometry/solids/specific/src/G4EnclosingCylinder.cc b/source/geometry/solids/specific/src/G4EnclosingCylinder.cc index 82d8f1d16c3..2b705794ee0 100644 --- a/source/geometry/solids/specific/src/G4EnclosingCylinder.cc +++ b/source/geometry/solids/specific/src/G4EnclosingCylinder.cc @@ -81,17 +81,11 @@ G4EnclosingCylinder::G4EnclosingCylinder( const G4ReduciblePolygon* rz, // for usage restricted to object persistency. // G4EnclosingCylinder::G4EnclosingCylinder( __void__& ) -: radius(0.), zLo(0.), zHi(0.), phiIsOpen(0.), startPhi(0.), totalPhi(0.), +: radius(0.), zLo(0.), zHi(0.), phiIsOpen(false), startPhi(0.), totalPhi(0.), concave(false) { } -// Destructor -// -G4EnclosingCylinder::~G4EnclosingCylinder() -{ -} - // Outside // // Decide very rapidly if the point is outside the cylinder diff --git a/source/geometry/solids/specific/src/G4ExtrudedSolid.cc b/source/geometry/solids/specific/src/G4ExtrudedSolid.cc index 2f69c639178..5aae978b4c4 100644 --- a/source/geometry/solids/specific/src/G4ExtrudedSolid.cc +++ b/source/geometry/solids/specific/src/G4ExtrudedSolid.cc @@ -122,7 +122,7 @@ G4ExtrudedSolid::G4ExtrudedSolid( const G4String& pName, std::vector removedVertices; G4GeomTools::RemoveRedundantVertices(fPolygon,removedVertices, 2*kCarTolerance); - if (removedVertices.size() != 0) + if (!removedVertices.empty()) { std::size_t nremoved = removedVertices.size(); std::ostringstream message; @@ -217,7 +217,7 @@ G4ExtrudedSolid::G4ExtrudedSolid( const G4String& pName, std::vector removedVertices; G4GeomTools::RemoveRedundantVertices(fPolygon,removedVertices, 2*kCarTolerance); - if (removedVertices.size() != 0) + if (!removedVertices.empty()) { std::size_t nremoved = removedVertices.size(); std::ostringstream message; @@ -253,8 +253,8 @@ G4ExtrudedSolid::G4ExtrudedSolid( const G4String& pName, // Copy z-sections // - fZSections.push_back(ZSection(-dz, off1, scale1)); - fZSections.push_back(ZSection( dz, off2, scale2)); + fZSections.emplace_back(-dz, off1, scale1); + fZSections.emplace_back( dz, off2, scale2); G4bool result = MakeFacets(); if (!result) @@ -281,8 +281,7 @@ G4ExtrudedSolid::G4ExtrudedSolid( const G4String& pName, //_____________________________________________________________________________ G4ExtrudedSolid::G4ExtrudedSolid( __void__& a ) - : G4TessellatedSolid(a), fNv(0), fNz(0), - fGeometryType("G4ExtrudedSolid") + : G4TessellatedSolid(a), fGeometryType("G4ExtrudedSolid") { // Fake default constructor - sets only member data and allocates memory // for usage restricted to object persistency. @@ -290,17 +289,7 @@ G4ExtrudedSolid::G4ExtrudedSolid( __void__& a ) //_____________________________________________________________________________ -G4ExtrudedSolid::G4ExtrudedSolid(const G4ExtrudedSolid& rhs) - : G4TessellatedSolid(rhs), fNv(rhs.fNv), fNz(rhs.fNz), - fPolygon(rhs.fPolygon), fZSections(rhs.fZSections), - fTriangles(rhs.fTriangles), fIsConvex(rhs.fIsConvex), - fGeometryType(rhs.fGeometryType), - fSolidType(rhs.fSolidType), fPlanes(rhs.fPlanes), - fLines(rhs.fLines), fLengths(rhs.fLengths), - fKScales(rhs.fKScales), fScale0s(rhs.fScale0s), - fKOffsets(rhs.fKOffsets), fOffset0s(rhs.fOffset0s) -{ -} +G4ExtrudedSolid::G4ExtrudedSolid(const G4ExtrudedSolid&) = default; //_____________________________________________________________________________ @@ -413,10 +402,11 @@ G4ThreeVector G4ExtrudedSolid::GetVertex(G4int iz, G4int ind) const { // Shift and scale vertices - return G4ThreeVector( fPolygon[ind].x() * fZSections[iz].fScale - + fZSections[iz].fOffset.x(), - fPolygon[ind].y() * fZSections[iz].fScale - + fZSections[iz].fOffset.y(), fZSections[iz].fZ); + return { fPolygon[ind].x() * fZSections[iz].fScale + + fZSections[iz].fOffset.x(), + fPolygon[ind].y() * fZSections[iz].fScale + + fZSections[iz].fOffset.y(), + fZSections[iz].fZ }; } //_____________________________________________________________________________ @@ -648,13 +638,13 @@ G4bool G4ExtrudedSolid::AddGeneralPolygonFacets() std::vector< Vertex > verticesToBeDone; for ( G4int i=0; i<(G4int)fNv; ++i ) { - verticesToBeDone.push_back(Vertex(fPolygon[i], i)); + verticesToBeDone.emplace_back(fPolygon[i], i); } std::vector< Vertex > ears; - std::vector< Vertex >::iterator c1 = verticesToBeDone.begin(); - std::vector< Vertex >::iterator c2 = c1+1; - std::vector< Vertex >::iterator c3 = c1+2; + auto c1 = verticesToBeDone.begin(); + auto c2 = c1+1; + auto c3 = c1+2; while ( verticesToBeDone.size()>2 ) // Loop checking, 13.08.2015, G.Cosmo { @@ -936,7 +926,7 @@ EInside G4ExtrudedSolid::Inside(const G4ThreeVector &p) const if ( IsPointInside(fPolygon[(*it)[0]], fPolygon[(*it)[1]], fPolygon[(*it)[2]], pscaled) ) { inside = true; } ++it; - } while ( (inside == false) && (it != fTriangles.cend()) ); + } while ( (!inside) && (it != fTriangles.cend()) ); if ( inside ) { @@ -1037,7 +1027,7 @@ G4ThreeVector G4ExtrudedSolid::SurfaceNormal(const G4ThreeVector& p) const // if (nsurf == 1) { - return G4ThreeVector(nx,ny,nz); + return { nx,ny,nz }; } else if (nsurf != 0) // edge or corner { @@ -1130,27 +1120,27 @@ G4ThreeVector G4ExtrudedSolid::ApproxSurfaceNormal(const G4ThreeVector& p) const { case 0: { - if (ddz0 <= ddz1 && ddz0 <= dd) return G4ThreeVector(0, 0,-1); - if (ddz1 <= ddz0 && ddz1 <= dd) return G4ThreeVector(0, 0, 1); - return G4ThreeVector(fPlanes[iside].a, fPlanes[iside].b, 0); + if (ddz0 <= ddz1 && ddz0 <= dd) return {0, 0,-1}; + if (ddz1 <= ddz0 && ddz1 <= dd) return {0, 0, 1}; + return { fPlanes[iside].a, fPlanes[iside].b, 0 }; } case 1: { - return G4ThreeVector(0, 0, (dz0 > dz1) ? -1 : 1); + return { 0, 0, (G4double)((dz0 > dz1) ? -1 : 1) }; } case 2: { - return G4ThreeVector(fPlanes[iside].a, fPlanes[iside].b, 0); + return { fPlanes[iside].a, fPlanes[iside].b, 0 }; } case 3: { G4double dzmax = std::max(dz0,dz1); - if (dzmax*dzmax > dd) return G4ThreeVector(0,0,(dz0 > dz1) ? -1 : 1); - return G4ThreeVector(fPlanes[iside].a,fPlanes[iside].b, 0); + if (dzmax*dzmax > dd) return { 0, 0, (G4double)((dz0 > dz1) ? -1 : 1) }; + return { fPlanes[iside].a, fPlanes[iside].b, 0 }; } } } - return G4ThreeVector(0,0,0); + return {0,0,0}; } //_____________________________________________________________________________ @@ -1330,7 +1320,7 @@ G4double G4ExtrudedSolid::DistanceToOut (const G4ThreeVector &p, G4double distOut = G4TessellatedSolid::DistanceToOut(p, v, calcNorm, validNorm, n); - if (validNorm) { *validNorm = fIsConvex; } + if (validNorm != nullptr) { *validNorm = fIsConvex; } return distOut; } @@ -1442,7 +1432,7 @@ G4ExtrudedSolid::CalculateExtent(const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // To find the extent, the base polygon is subdivided in triangles. @@ -1486,8 +1476,8 @@ G4ExtrudedSolid::CalculateExtent(const EAxis pAxis, G4double dy = zsect.fOffset.y(); G4double scale = zsect.fScale; - G4ThreeVectorList* ptr = const_cast(polygons[k]); - G4ThreeVectorList::iterator iter = ptr->begin(); + auto ptr = const_cast(polygons[k]); + auto iter = ptr->begin(); G4double x0 = triangles[i3+0].x()*scale+dx; G4double y0 = triangles[i3+0].y()*scale+dy; iter->set(x0,y0,z); @@ -1510,7 +1500,7 @@ G4ExtrudedSolid::CalculateExtent(const EAxis pAxis, if (eminlim > pMin && emaxlim < pMax) break; // max possible extent } // free memory - for (G4int k=0; kfDz-halfCarTolerance) { - if (v.z()) + if (v.z() != 0.0) { G4ThreeVector pt; if (p.z()>0) @@ -1213,7 +1213,7 @@ G4GenericTrap::CalculateExtent(const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // Set bounding envelope (benv) and calculate extent @@ -1257,7 +1257,7 @@ G4GenericTrap::CalculateExtent(const EAxis pAxis, G4GeometryType G4GenericTrap::GetEntityType() const { - return G4String("G4GenericTrap"); + return {"G4GenericTrap"}; } // -------------------------------------------------------------------- @@ -1310,11 +1310,11 @@ G4ThreeVector G4GenericTrap::GetPointOnSurface() const std::vector vertices; for (auto i=0; i<4; ++i) { - vertices.push_back(G4ThreeVector(fVertices[i].x(),fVertices[i].y(),-fDz)); + vertices.emplace_back(fVertices[i].x(),fVertices[i].y(),-fDz); } for (auto i=4; i<8; ++i) { - vertices.push_back(G4ThreeVector(fVertices[i].x(),fVertices[i].y(),fDz)); + vertices.emplace_back(fVertices[i].x(),fVertices[i].y(),fDz); } // Surface Area of Planes @@ -1661,12 +1661,10 @@ G4GenericTrap::IsSegCrossing(const G4TwoVector& a, const G4TwoVector& b, { // Check if segments are overlapping // - if ( ((c.y()-a.y())*(c.y()-b.y())<-fgkTolerance) - || ((d.y()-a.y())*(d.y()-b.y())<-fgkTolerance) - || ((a.y()-c.y())*(a.y()-d.y())<-fgkTolerance) - || ((b.y()-c.y())*(b.y()-d.y())<-fgkTolerance) ) { return true; } - - return false; + return ((c.y()-a.y())*(c.y()-b.y())<-fgkTolerance) + || ((d.y()-a.y())*(d.y()-b.y())<-fgkTolerance) + || ((a.y()-c.y())*(a.y()-d.y())<-fgkTolerance) + || ((b.y()-c.y())*(b.y()-d.y())<-fgkTolerance); } // Different x values // @@ -1712,9 +1710,7 @@ G4GenericTrap::IsSegCrossing(const G4TwoVector& a, const G4TwoVector& b, G4double check = (xm-a.x())*(xm-b.x())+(ym-a.y())*(ym-b.y()); if (check > -fgkTolerance) { return false; } check = (xm-c.x())*(xm-d.x())+(ym-c.y())*(ym-d.y()); - if (check > -fgkTolerance) { return false; } - - return true; + return check <= -fgkTolerance; } // -------------------------------------------------------------------- @@ -1779,7 +1775,7 @@ G4GenericTrap::MakeDownFacet(const std::vector& fromVertices, if ( (fromVertices[ind1] == fromVertices[ind2]) || (fromVertices[ind2] == fromVertices[ind3]) || - (fromVertices[ind1] == fromVertices[ind3]) ) { return 0; } + (fromVertices[ind1] == fromVertices[ind3]) ) { return nullptr; } std::vector vertices; vertices.push_back(fromVertices[ind1]); @@ -1880,15 +1876,13 @@ G4TessellatedSolid* G4GenericTrap::CreateTessellatedSolid() const std::vector downVertices; for ( G4int i=0; i upVertices; for ( G4int i=nv; i<2*nv; ++i ) { - upVertices.push_back(G4ThreeVector(fVertices[i].x(), - fVertices[i].y(), fDz)); + upVertices.emplace_back(fVertices[i].x(), fVertices[i].y(), fDz); } // Reorder vertices if they are not ordered anti-clock wise @@ -1903,17 +1897,17 @@ G4TessellatedSolid* G4GenericTrap::CreateTessellatedSolid() const ReorderVertices(upVertices); } - G4TessellatedSolid* tessellatedSolid = new G4TessellatedSolid(GetName()); + auto tessellatedSolid = new G4TessellatedSolid(GetName()); - G4VFacet* facet = 0; + G4VFacet* facet = nullptr; facet = MakeDownFacet(downVertices, 0, 1, 2); - if (facet) { tessellatedSolid->AddFacet( facet ); } + if (facet != nullptr) { tessellatedSolid->AddFacet( facet ); } facet = MakeDownFacet(downVertices, 0, 2, 3); - if (facet) { tessellatedSolid->AddFacet( facet ); } + if (facet != nullptr) { tessellatedSolid->AddFacet( facet ); } facet = MakeUpFacet(upVertices, 0, 2, 1); - if (facet) { tessellatedSolid->AddFacet( facet ); } + if (facet != nullptr) { tessellatedSolid->AddFacet( facet ); } facet = MakeUpFacet(upVertices, 0, 3, 2); - if (facet) { tessellatedSolid->AddFacet( facet ); } + if (facet != nullptr) { tessellatedSolid->AddFacet( facet ); } // The quadrangular sides // @@ -1923,7 +1917,7 @@ G4TessellatedSolid* G4GenericTrap::CreateTessellatedSolid() const facet = MakeSideFacet(downVertices[j], downVertices[i], upVertices[i], upVertices[j]); - if ( facet ) { tessellatedSolid->AddFacet( facet ); } + if ( facet != nullptr ) { tessellatedSolid->AddFacet( facet ); } } tessellatedSolid->SetSolidClosed(true); @@ -2008,9 +2002,9 @@ G4VisExtent G4GenericTrap::GetExtent() const G4ThreeVector minVec = GetMinimumBBox(); G4ThreeVector maxVec = GetMaximumBBox(); - return G4VisExtent (minVec.x(), maxVec.x(), - minVec.y(), maxVec.y(), - minVec.z(), maxVec.z()); + return { minVec.x(), maxVec.x(), + minVec.y(), maxVec.y(), + minVec.z(), maxVec.z() }; } // -------------------------------------------------------------------- diff --git a/source/geometry/solids/specific/src/G4Hype.cc b/source/geometry/solids/specific/src/G4Hype.cc index 1fe68413bfa..e676b2b9590 100644 --- a/source/geometry/solids/specific/src/G4Hype.cc +++ b/source/geometry/solids/specific/src/G4Hype.cc @@ -135,7 +135,7 @@ G4Hype::G4Hype( __void__& a ) // G4Hype::~G4Hype() { - delete fpPolyhedron; fpPolyhedron = 0; + delete fpPolyhedron; fpPolyhedron = nullptr; } // Copy constructor @@ -302,7 +302,7 @@ G4ThreeVector G4Hype::SurfaceNormal( const G4ThreeVector& p ) const // Do the "endcaps" win? // if (dist2Z < dist2Outer) - return G4ThreeVector( 0.0, 0.0, p.z() < 0 ? -1.0 : 1.0 ); + return { 0.0, 0.0, (G4double)(p.z() < 0 ? -1.0 : 1.0) }; // @@ -1064,7 +1064,7 @@ G4double G4Hype::ApproxDistInside( G4double pr, G4double pz, // G4GeometryType G4Hype::GetEntityType() const { - return G4String("G4Hype"); + return {"G4Hype"}; } // Clone @@ -1187,12 +1187,12 @@ G4ThreeVector G4Hype::GetPointOnSurface() const zRand = outerRadius*sinhu/tanOuterStereo; xRand = std::sqrt(sqr(sinhu)+1)*outerRadius*cosphi; yRand = std::sqrt(sqr(sinhu)+1)*outerRadius*sinphi; - return G4ThreeVector (xRand, yRand, zRand); + return { xRand, yRand, zRand }; } else { - return G4ThreeVector(outerRadius*cosphi,outerRadius*sinphi, - G4RandFlat::shoot(-halfLenZ,halfLenZ)); + return { outerRadius*cosphi, outerRadius*sinphi, + G4RandFlat::shoot(-halfLenZ,halfLenZ) }; } } else if(chose>=aOne && chose=aOne+aTwo && chose= rIn2 && r2 <= rOut2 ) ) ; + } while ( r2 < rIn2 || r2 > rOut2 ) ; zRand = halfLenZ; - return G4ThreeVector (xRand, yRand, zRand); + return { xRand, yRand, zRand }; } else { @@ -1239,10 +1239,10 @@ G4ThreeVector G4Hype::GetPointOnSurface() const xRand = G4RandFlat::shoot(-rOut,rOut) ; yRand = G4RandFlat::shoot(-rOut,rOut) ; r2 = xRand*xRand + yRand*yRand ; - } while ( ! ( r2 >= rIn2 && r2 <= rOut2 ) ) ; + } while ( r2 < rIn2 || r2 > rOut2 ) ; zRand = -1.*halfLenZ; - return G4ThreeVector (xRand, yRand, zRand); + return { xRand, yRand, zRand }; } } @@ -1259,9 +1259,9 @@ G4VisExtent G4Hype::GetExtent() const { // Define the sides of the box into which the G4Tubs instance would fit. // - return G4VisExtent( -endOuterRadius, endOuterRadius, - -endOuterRadius, endOuterRadius, - -halfLenZ, halfLenZ ); + return { -endOuterRadius, endOuterRadius, + -endOuterRadius, endOuterRadius, + -halfLenZ, halfLenZ }; } // CreatePolyhedron diff --git a/source/geometry/solids/specific/src/G4IntersectingCone.cc b/source/geometry/solids/specific/src/G4IntersectingCone.cc index b0b3d54685f..eaf090e27c9 100644 --- a/source/geometry/solids/specific/src/G4IntersectingCone.cc +++ b/source/geometry/solids/specific/src/G4IntersectingCone.cc @@ -73,9 +73,7 @@ G4IntersectingCone::G4IntersectingCone( __void__& ) // Destructor // -G4IntersectingCone::~G4IntersectingCone() -{ -} +G4IntersectingCone::~G4IntersectingCone() = default; // HitOn // diff --git a/source/geometry/solids/specific/src/G4Paraboloid.cc b/source/geometry/solids/specific/src/G4Paraboloid.cc index c6aa473bd41..7bf29dba9be 100644 --- a/source/geometry/solids/specific/src/G4Paraboloid.cc +++ b/source/geometry/solids/specific/src/G4Paraboloid.cc @@ -335,7 +335,7 @@ G4double G4Paraboloid::DistanceToIn( const G4ThreeVector& p, G4double tol2 = kCarTolerance*kCarTolerance; G4double tolh = 0.5*kCarTolerance; - if(r2 && p.z() > - tolh + dz) + if((r2 != 0.0) && p.z() > - tolh + dz) { // If the points is above check for intersection with upper edge. @@ -356,7 +356,7 @@ G4double G4Paraboloid::DistanceToIn( const G4ThreeVector& p, return kInfinity; } } - else if(r1 && p.z() < tolh - dz) + else if((r1 != 0.0) && p.z() < tolh - dz) { // If the points is belove check for intersection with lower edge. @@ -851,7 +851,7 @@ G4double G4Paraboloid::DistanceToOut(const G4ThreeVector& p) const // G4GeometryType G4Paraboloid::GetEntityType() const { - return G4String("G4Paraboloid"); + return {"G4Paraboloid"}; } ////////////////////////////////////////////////////////////////////////// @@ -899,19 +899,19 @@ G4ThreeVector G4Paraboloid::GetPointOnSurface() const if(pi * sqr(r1) / A > z) { rho = r1 * std::sqrt(G4RandFlat::shoot(0., 1.)); - return G4ThreeVector(rho * std::cos(phi), rho * std::sin(phi), -dz); + return { rho * std::cos(phi), rho * std::sin(phi), -dz }; } else { rho = r2 * std::sqrt(G4RandFlat::shoot(0., 1)); - return G4ThreeVector(rho * std::cos(phi), rho * std::sin(phi), dz); + return { rho * std::cos(phi), rho * std::sin(phi), dz }; } } else { z = G4RandFlat::shoot(0., 1.)*2*dz - dz; - return G4ThreeVector(std::sqrt(z*k1 + k2)*std::cos(phi), - std::sqrt(z*k1 + k2)*std::sin(phi), z); + return { std::sqrt(z*k1 + k2)*std::cos(phi), + std::sqrt(z*k1 + k2)*std::sin(phi), z}; } } diff --git a/source/geometry/solids/specific/src/G4PolyPhiFace.cc b/source/geometry/solids/specific/src/G4PolyPhiFace.cc index f5d506cf718..6f43a276c65 100644 --- a/source/geometry/solids/specific/src/G4PolyPhiFace.cc +++ b/source/geometry/solids/specific/src/G4PolyPhiFace.cc @@ -292,7 +292,6 @@ G4PolyPhiFace::~G4PolyPhiFace() // Copy constructor // G4PolyPhiFace::G4PolyPhiFace( const G4PolyPhiFace& source ) - : G4VCSGface() { CopyStuff( source ); } @@ -445,7 +444,7 @@ G4double G4PolyPhiFace::Distance( const G4ThreeVector& p, G4bool outgoing ) // G4double distRZ2; - if (InsideEdges( r, p.z(), &distRZ2, 0 )) + if (InsideEdges( r, p.z(), &distRZ2, nullptr )) { // // Yup, answer is just distPhi @@ -554,7 +553,7 @@ G4ThreeVector G4PolyPhiFace::Normal( const G4ThreeVector& p, // G4double distRZ2; - if (InsideEdges( r, p.z(), &distRZ2, 0 )) + if (InsideEdges( r, p.z(), &distRZ2, nullptr )) { // // Yup, answer is just distPhi @@ -788,7 +787,7 @@ G4bool G4PolyPhiFace::InsideEdges( G4double r, G4double z ) // G4double notUsed; - return InsideEdges( r, z, ¬Used, 0 ); + return InsideEdges( r, z, ¬Used, nullptr ); } // InsideEdges (care about distance) @@ -873,9 +872,9 @@ G4bool G4PolyPhiFace::InsideEdges( G4double r, G4double z, // Calculation of Surface Area of a Triangle // In the same time Random Point in Triangle is given // -G4double G4PolyPhiFace::SurfaceTriangle( G4ThreeVector p1, - G4ThreeVector p2, - G4ThreeVector p3, +G4double G4PolyPhiFace::SurfaceTriangle( const G4ThreeVector& p1, + const G4ThreeVector& p2, + const G4ThreeVector& p3, G4ThreeVector* p4 ) { G4ThreeVector v, w; @@ -911,9 +910,9 @@ G4ThreeVector G4PolyPhiFace::GetPointOnFace() // Calculation of 2*Area of Triangle with Sign // -G4double G4PolyPhiFace::Area2( G4TwoVector a, - G4TwoVector b, - G4TwoVector c ) +G4double G4PolyPhiFace::Area2( const G4TwoVector& a, + const G4TwoVector& b, + const G4TwoVector& c ) { return ((b.x()-a.x())*(c.y()-a.y())- (c.x()-a.x())*(b.y()-a.y())); @@ -921,27 +920,27 @@ G4double G4PolyPhiFace::Area2( G4TwoVector a, // Boolean function for sign of Surface // -G4bool G4PolyPhiFace::Left( G4TwoVector a, - G4TwoVector b, - G4TwoVector c ) +G4bool G4PolyPhiFace::Left( const G4TwoVector& a, + const G4TwoVector& b, + const G4TwoVector& c ) { return Area2(a,b,c)>0; } // Boolean function for sign of Surface // -G4bool G4PolyPhiFace::LeftOn( G4TwoVector a, - G4TwoVector b, - G4TwoVector c ) +G4bool G4PolyPhiFace::LeftOn( const G4TwoVector& a, + const G4TwoVector& b, + const G4TwoVector& c ) { return Area2(a,b,c)>=0; } // Boolean function for sign of Surface // -G4bool G4PolyPhiFace::Collinear( G4TwoVector a, - G4TwoVector b, - G4TwoVector c ) +G4bool G4PolyPhiFace::Collinear( const G4TwoVector& a, + const G4TwoVector& b, + const G4TwoVector& c ) { return Area2(a,b,c)==0; } @@ -949,22 +948,22 @@ G4bool G4PolyPhiFace::Collinear( G4TwoVector a, // Boolean function for finding "Proper" Intersection // That means Intersection of two lines segments (a,b) and (c,d) // -G4bool G4PolyPhiFace::IntersectProp( G4TwoVector a, - G4TwoVector b, - G4TwoVector c, G4TwoVector d ) +G4bool G4PolyPhiFace::IntersectProp( const G4TwoVector& a, + const G4TwoVector& b, + const G4TwoVector& c, const G4TwoVector& d ) { if( Collinear(a,b,c) || Collinear(a,b,d)|| Collinear(c,d,a) || Collinear(c,d,b) ) { return false; } G4bool Positive; Positive = !(Left(a,b,c))^!(Left(a,b,d)); - return Positive && (!Left(c,d,a)^!Left(c,d,b)); + return Positive && ((!Left(c,d,a)^!Left(c,d,b)) != 0); } // Boolean function for determining if Point c is between a and b // For the tree points(a,b,c) on the same line // -G4bool G4PolyPhiFace::Between( G4TwoVector a, G4TwoVector b, G4TwoVector c ) +G4bool G4PolyPhiFace::Between( const G4TwoVector& a, const G4TwoVector& b, const G4TwoVector& c ) { if( !Collinear(a,b,c) ) { return false; } @@ -983,9 +982,9 @@ G4bool G4PolyPhiFace::Between( G4TwoVector a, G4TwoVector b, G4TwoVector c ) // Boolean function for finding Intersection "Proper" or not // Between two line segments (a,b) and (c,d) // -G4bool G4PolyPhiFace::Intersect( G4TwoVector a, - G4TwoVector b, - G4TwoVector c, G4TwoVector d ) +G4bool G4PolyPhiFace::Intersect( const G4TwoVector& a, + const G4TwoVector& b, + const G4TwoVector& c, const G4TwoVector& d ) { if( IntersectProp(a,b,c,d) ) { return true; } @@ -1096,7 +1095,7 @@ void G4PolyPhiFace::Triangulate() // The copy of Polycone is made and this copy is reordered in order to // have a list of triangles. This list is used for GetPointOnFace(). - G4PolyPhiFaceVertex* tri_help = new G4PolyPhiFaceVertex[numEdges]; + auto tri_help = new G4PolyPhiFaceVertex[numEdges]; triangles = tri_help; G4PolyPhiFaceVertex* triang = triangles; @@ -1197,7 +1196,7 @@ void G4PolyPhiFace::Triangulate() } } // end outer while loop - if(v2->next) + if(v2->next != nullptr) { // add last triangle // diff --git a/source/geometry/solids/specific/src/G4Polycone.cc b/source/geometry/solids/specific/src/G4Polycone.cc index e8cc86ba202..2823d4f6306 100644 --- a/source/geometry/solids/specific/src/G4Polycone.cc +++ b/source/geometry/solids/specific/src/G4Polycone.cc @@ -116,8 +116,7 @@ G4Polycone::G4Polycone( const G4String& name, // // Build RZ polygon using special PCON/PGON GEANT3 constructor // - G4ReduciblePolygon *rz = - new G4ReduciblePolygon( rInner, rOuter, zPlane, numZPlanes ); + auto rz = new G4ReduciblePolygon( rInner, rOuter, zPlane, numZPlanes ); // // Do the real work @@ -138,7 +137,7 @@ G4Polycone::G4Polycone( const G4String& name, : G4VCSGfaceted( name ) { - G4ReduciblePolygon* rz = new G4ReduciblePolygon( r, z, numRZ ); + auto rz = new G4ReduciblePolygon( r, z, numRZ ); Create( phiStart, phiTotal, rz ); @@ -370,7 +369,7 @@ G4Polycone &G4Polycone::operator=( const G4Polycone& source ) G4VCSGfaceted::operator=( source ); delete [] corners; - if (original_parameters) delete original_parameters; + delete original_parameters; delete enclosingCylinder; @@ -406,7 +405,7 @@ void G4Polycone::CopyStuff( const G4Polycone& source ) // // Original parameters // - if (source.original_parameters) + if (source.original_parameters != nullptr) { original_parameters = new G4PolyconeHistorical( *source.original_parameters ); @@ -449,11 +448,10 @@ G4bool G4Polycone::Reset() // // Rebuild polycone // - G4ReduciblePolygon *rz = - new G4ReduciblePolygon( original_parameters->Rmin, - original_parameters->Rmax, - original_parameters->Z_values, - original_parameters->Num_z_planes ); + auto rz = new G4ReduciblePolygon( original_parameters->Rmin, + original_parameters->Rmax, + original_parameters->Z_values, + original_parameters->Num_z_planes ); Create( original_parameters->Start_angle, original_parameters->Opening_angle, rz ); delete rz; @@ -573,7 +571,7 @@ G4bool G4Polycone::CalculateExtent(const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // To find the extent, RZ contour of the polycone is subdivided @@ -590,7 +588,7 @@ G4bool G4Polycone::CalculateExtent(const EAxis pAxis, for (G4int i=0; iScaleA( 1/convertRad ); // @@ -169,7 +168,7 @@ G4Polyhedra::G4Polyhedra( const G4String& name, FatalErrorInArgument, message); } - G4ReduciblePolygon* rz = new G4ReduciblePolygon( r, z, numRZ ); + auto rz = new G4ReduciblePolygon( r, z, numRZ ); Create( phiStart, phiTotal, theNumSide, rz ); @@ -430,7 +429,7 @@ void G4Polyhedra::CopyStuff( const G4Polyhedra& source ) // // Original parameters // - if (source.original_parameters) + if (source.original_parameters != nullptr) { original_parameters = new G4PolyhedraHistorical( *source.original_parameters ); @@ -486,11 +485,10 @@ G4bool G4Polyhedra::Reset() // // Rebuild polyhedra // - G4ReduciblePolygon* rz = - new G4ReduciblePolygon( original_parameters->Rmin, - original_parameters->Rmax, - original_parameters->Z_values, - original_parameters->Num_z_planes ); + auto rz = new G4ReduciblePolygon( original_parameters->Rmin, + original_parameters->Rmax, + original_parameters->Z_values, + original_parameters->Num_z_planes ); Create( original_parameters->Start_angle, original_parameters->Opening_angle, original_parameters->numSide, rz ); @@ -631,7 +629,7 @@ G4bool G4Polyhedra::CalculateExtent(const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // To find the extent, RZ contour of the polycone is subdivided @@ -648,7 +646,7 @@ G4bool G4Polyhedra::CalculateExtent(const EAxis pAxis, for (G4int i=0; i(polygons[k]); - G4ThreeVectorList::iterator iter = ptr->begin(); + auto ptr = const_cast(polygons[k]); + auto iter = ptr->begin(); iter->set(triangles[i3+0].x()*cosCur, triangles[i3+0].x()*sinCur, triangles[i3+0].y()); @@ -724,7 +722,7 @@ G4bool G4Polyhedra::CalculateExtent(const EAxis pAxis, if (eminlim > pMin && emaxlim < pMax) break; // max possible extent } // free memory - for (G4int k=0; k= numSide) { @@ -1165,9 +1164,9 @@ G4double G4PolyhedraSide::DistanceAway( const G4ThreeVector& p, // Calculation of surface area of a triangle. // At the same time a random point in the triangle is given // -G4double G4PolyhedraSide::SurfaceTriangle( G4ThreeVector p1, - G4ThreeVector p2, - G4ThreeVector p3, +G4double G4PolyhedraSide::SurfaceTriangle( const G4ThreeVector& p1, + const G4ThreeVector& p2, + const G4ThreeVector& p3, G4ThreeVector* p4 ) { G4ThreeVector v, w; @@ -1186,8 +1185,8 @@ G4double G4PolyhedraSide::SurfaceTriangle( G4ThreeVector p1, // Auxiliary method for GetPointOnSurface() // G4ThreeVector -G4PolyhedraSide::GetPointOnPlane( G4ThreeVector p0, G4ThreeVector p1, - G4ThreeVector p2, G4ThreeVector p3, +G4PolyhedraSide::GetPointOnPlane( const G4ThreeVector& p0, const G4ThreeVector& p1, + const G4ThreeVector& p2, const G4ThreeVector& p3, G4double* Area ) { G4double chose,aOne,aTwo; diff --git a/source/geometry/solids/specific/src/G4QuadrangularFacet.cc b/source/geometry/solids/specific/src/G4QuadrangularFacet.cc index d788d0a73ba..e2245694986 100644 --- a/source/geometry/solids/specific/src/G4QuadrangularFacet.cc +++ b/source/geometry/solids/specific/src/G4QuadrangularFacet.cc @@ -53,7 +53,6 @@ G4QuadrangularFacet::G4QuadrangularFacet (const G4ThreeVector& vt0, const G4ThreeVector& vt2, const G4ThreeVector& vt3, G4FacetVertexType vertexType) - : G4VFacet() { G4double delta = 1.0 * kCarTolerance; // dimension tolerance G4double epsilon = 0.01 * kCarTolerance; // planarity tolerance @@ -207,9 +206,7 @@ G4QuadrangularFacet::G4QuadrangularFacet (const G4ThreeVector& vt0, /////////////////////////////////////////////////////////////////////////////// // -G4QuadrangularFacet::~G4QuadrangularFacet () -{ -} +G4QuadrangularFacet::~G4QuadrangularFacet () = default; /////////////////////////////////////////////////////////////////////////////// // @@ -239,9 +236,8 @@ G4QuadrangularFacet::operator=(const G4QuadrangularFacet& rhs) // G4VFacet* G4QuadrangularFacet::GetClone () { - G4QuadrangularFacet *c = new G4QuadrangularFacet (GetVertex(0), GetVertex(1), - GetVertex(2), GetVertex(3), - ABSOLUTE); + auto c = new G4QuadrangularFacet (GetVertex(0), GetVertex(1), + GetVertex(2), GetVertex(3), ABSOLUTE); return c; } diff --git a/source/geometry/solids/specific/src/G4ReduciblePolygon.cc b/source/geometry/solids/specific/src/G4ReduciblePolygon.cc index 5a12b337306..631ecbe9d23 100644 --- a/source/geometry/solids/specific/src/G4ReduciblePolygon.cc +++ b/source/geometry/solids/specific/src/G4ReduciblePolygon.cc @@ -56,8 +56,8 @@ G4ReduciblePolygon::G4ReduciblePolygon( const G4double rmin[], // // Translate // - G4double *a = new G4double[n*2]; - G4double *b = new G4double[n*2]; + auto a = new G4double[n*2]; + auto b = new G4double[n*2]; G4double *rOut = a + n, *zOut = b + n, @@ -93,7 +93,7 @@ void G4ReduciblePolygon::Create( const G4double a[], ABVertex* prev = nullptr; do // Loop checking, 13.08.2015, G.Cosmo { - ABVertex *newVertex = new ABVertex; + auto newVertex = new ABVertex; newVertex->a = *anext; newVertex->b = *bnext; newVertex->next = nullptr; @@ -494,12 +494,12 @@ G4bool G4ReduciblePolygon::BisectedBy( G4double a1, G4double b1, if (cross < -tolerance) { - if (nPos) return true; + if (nPos != 0) return true; ++nNeg; } else if (cross > tolerance) { - if (nNeg) return true; + if (nNeg != 0) return true; ++nPos; } curr = curr->next; @@ -524,7 +524,7 @@ G4double G4ReduciblePolygon::Area() do // Loop checking, 13.08.2015, G.Cosmo { next = curr->next; - if (next==0) next = vertexHead; + if (next==nullptr) next = vertexHead; answer += curr->a*next->b - curr->b*next->a; curr = curr->next; diff --git a/source/geometry/solids/specific/src/G4SolidExtentList.cc b/source/geometry/solids/specific/src/G4SolidExtentList.cc index bc4cf3e90d9..95a5f467b1b 100644 --- a/source/geometry/solids/specific/src/G4SolidExtentList.cc +++ b/source/geometry/solids/specific/src/G4SolidExtentList.cc @@ -63,9 +63,7 @@ G4SolidExtentList::G4SolidExtentList( const EAxis targetAxis, // Destructor // -G4SolidExtentList::~G4SolidExtentList() -{ -} +G4SolidExtentList::~G4SolidExtentList() = default; // AddSurface // @@ -146,7 +144,7 @@ G4bool G4SolidExtentList::GetExtent( G4double& emin, G4double& emax ) const } else { - G4double sMin, sMax; + G4double sMin=0., sMax=0.; maxSurface.GetExtent( axis, sMin, sMax ); emax = ( (sMax > maxLimit) ? maxLimit : sMax ) + kCarTolerance; } diff --git a/source/geometry/solids/specific/src/G4SolidsWorkspace.cc b/source/geometry/solids/specific/src/G4SolidsWorkspace.cc index 48fec34cc6b..887c33374e7 100644 --- a/source/geometry/solids/specific/src/G4SolidsWorkspace.cc +++ b/source/geometry/solids/specific/src/G4SolidsWorkspace.cc @@ -61,9 +61,6 @@ G4SolidsWorkspace::G4SolidsWorkspace(G4bool verbose) fPolyhedraSideOffset = fpPolyhedraSideSIM->GetOffset(); } -G4SolidsWorkspace::~G4SolidsWorkspace() -{ -} void G4SolidsWorkspace::UseWorkspace() diff --git a/source/geometry/solids/specific/src/G4SurfBits.cc b/source/geometry/solids/specific/src/G4SurfBits.cc index ae45a2eebee..fdb2fc27731 100644 --- a/source/geometry/solids/specific/src/G4SurfBits.cc +++ b/source/geometry/solids/specific/src/G4SurfBits.cc @@ -38,7 +38,7 @@ G4SurfBits::G4SurfBits(unsigned int nBits) : fNBits(nBits) // G4SurfBits constructor. All bits set to 0 if (fNBits <= 0) fNBits = 0; - fNBytes = fNBits ? ((fNBits-1)/8) + 1 : 1; + fNBytes = fNBits != 0u ? ((fNBits-1)/8) + 1 : 1; fAllBits = new unsigned char[fNBytes]; // this is redundant only with libNew std::memset(fAllBits,0,fNBytes); @@ -101,7 +101,7 @@ void G4SurfBits::Compact() { // Reduce the storage used by the object to a minimun - if (!fNBits || !fAllBits) return; + if ((fNBits == 0u) || (fAllBits == nullptr)) return; unsigned int needed; for(needed=fNBytes-1; needed > 0 && fAllBits[needed]==0; ) { --needed; } ++needed; @@ -144,7 +144,7 @@ void G4SurfBits::Print() const unsigned char val = fAllBits[i]; for (unsigned int j=0; j<8; ++j) { - if (val & 1) G4cout << " bit:" << count << " = 1" << G4endl; + if ((val & 1) != 0) G4cout << " bit:" << count << " = 1" << G4endl; ++count; val = val >> 1; } @@ -165,7 +165,7 @@ void G4SurfBits::ReserveBytes(unsigned int nbytes) if (nbytes > fNBytes) { // do it in this order to remain exception-safe. - unsigned char *newBits = new unsigned char[nbytes]; + auto newBits = new unsigned char[nbytes]; delete [] fAllBits; fNBytes = nbytes; fAllBits = newBits; diff --git a/source/geometry/solids/specific/src/G4TessellatedSolid.cc b/source/geometry/solids/specific/src/G4TessellatedSolid.cc index f25cccb429a..6fce4da7018 100644 --- a/source/geometry/solids/specific/src/G4TessellatedSolid.cc +++ b/source/geometry/solids/specific/src/G4TessellatedSolid.cc @@ -49,14 +49,13 @@ #if !defined(G4GEOM_USE_UTESSELLATEDSOLID) -#include -#include -#include -#include -#include #include +#include +#include +#include #include #include +#include #include "geomdefs.hh" #include "Randomize.hh" @@ -351,7 +350,7 @@ void G4TessellatedSolid::PrecalculateInsides() { point[i] = fVoxels.GetBoundary(i)[voxel[i]]; } - G4bool inside = (G4bool) (InsideNoVoxels(point) == kInside); + auto inside = (G4bool) (InsideNoVoxels(point) == kInside); SetAllUsingStack(voxel, maxVoxels, inside, checked); } else checked.SetBitNumber(index); @@ -369,7 +368,7 @@ void G4TessellatedSolid::Voxelize () #endif fVoxels.Voxelize(fFacets); - if (fVoxels.Empty().GetNbits()) + if (fVoxels.Empty().GetNbits() != 0u) { #ifdef G4SPECSDEBUG G4cout << "Precalculating Insides..." << G4endl; @@ -403,7 +402,7 @@ void G4TessellatedSolid::SetExtremeFacets() // Select six extreme vertices in different directions G4ThreeVector points[6]; - for (G4int i=0; i < 6; ++i) { points[i] = vertices[0]; } + for (auto & point : points) { point = vertices[0]; } for (std::size_t i=1; i < vsize; ++i) { if (vertices[i].x() < points[0].x()) points[0] = vertices[i]; @@ -618,7 +617,7 @@ void G4TessellatedSolid::SetSolidClosed (const G4bool t) G4int irep = CheckStructure(); if (irep != 0) { - if (irep & 1) + if ((irep & 1) != 0) { std::ostringstream message; message << "Defects in solid: " << GetName() @@ -626,7 +625,7 @@ void G4TessellatedSolid::SetSolidClosed (const G4bool t) G4Exception("G4TessellatedSolid::SetSolidClosed()", "GeomSolids1001", JustWarning, message); } - if (irep & 2) + if ((irep & 2) != 0) { std::ostringstream message; message << "Defects in solid: " << GetName() @@ -634,7 +633,7 @@ void G4TessellatedSolid::SetSolidClosed (const G4bool t) G4Exception("G4TessellatedSolid::SetSolidClosed()", "GeomSolids1001", JustWarning, message); } - if (irep & 4) + if ((irep & 4) != 0) { std::ostringstream message; message << "Defects in solid: " << GetName() @@ -682,7 +681,7 @@ G4int G4TessellatedSolid::CheckStructure() const nedge += facet.GetNumberOfVertices(); volume += facet.GetArea()*(facet.GetVertex(0).dot(facet.GetSurfaceNormal())); } - G4int ivolume = (volume <= 0.); + G4int ivolume = static_cast(volume <= 0.); // Create sorted vector of edges // @@ -696,8 +695,8 @@ G4int G4TessellatedSolid::CheckStructure() const { int64_t i1 = facet.GetVertexIndex((k == 0) ? nnode - 1 : k - 1); int64_t i2 = facet.GetVertexIndex(k); - int64_t inverse = (i2 > i1); - if (inverse) std::swap(i1, i2); + int64_t inverse = static_cast(i2 > i1); + if (inverse != 0) std::swap(i1, i2); iedge[kk++] = i1*1000000000 + i2*2 + inverse; } } @@ -776,7 +775,7 @@ EInside G4TessellatedSolid::InsideVoxels(const G4ThreeVector& p) const const vector &startingCandidates = fVoxels.GetCandidates(startingVoxel); std::size_t limit = startingCandidates.size(); - if (limit == 0 && fInsides.GetNbits()) + if (limit == 0 && (fInsides.GetNbits() != 0u)) { G4int index = fVoxels.GetPointIndex(p); EInside location = fInsides[index] ? kInside : kOutside; @@ -849,7 +848,7 @@ EInside G4TessellatedSolid::InsideVoxels(const G4ThreeVector& p) const const vector &candidates = started ? startingCandidates : fVoxels.GetCandidates(curVoxel); started = false; - if (G4int candidatesCount = (G4int)candidates.size()) + if (auto candidatesCount = (G4int)candidates.size()) { for (G4int i = 0 ; i < candidatesCount; ++i) { @@ -1020,7 +1019,7 @@ EInside G4TessellatedSolid::InsideNoVoxels (const G4ThreeVector &p) const distOut = distIn = kInfinity; G4ThreeVector v = fRandir[sm]; sm++; - vector::const_iterator f = fFacets.cbegin(); + auto f = fFacets.cbegin(); do // Loop checking, 13.08.2015, G.Cosmo { @@ -1105,7 +1104,7 @@ G4int G4TessellatedSolid::GetFacetIndex (const G4ThreeVector& p) const vector curVoxel(3); fVoxels.GetVoxel(curVoxel, p); const vector &candidates = fVoxels.GetCandidates(curVoxel); - if (G4int limit = (G4int)candidates.size()) + if (auto limit = (G4int)candidates.size()) { G4double minDist = kInfinity; for(G4int i = 0 ; i < limit ; ++i) @@ -1158,7 +1157,7 @@ G4bool G4TessellatedSolid::Normal (const G4ThreeVector& p, const vector &candidates = fVoxels.GetCandidates(curVoxel); // fVoxels.GetCandidatesVoxelArray(p, candidates, 0); - if (G4int limit = (G4int)candidates.size()) + if (auto limit = (G4int)candidates.size()) { minDist = kInfinity; for(G4int i = 0 ; i < limit ; ++i) @@ -1194,7 +1193,7 @@ G4bool G4TessellatedSolid::Normal (const G4ThreeVector& p, if (minDist != kInfinity) { - if (facet) { aNormal = facet->GetSurfaceNormal(); } + if (facet != nullptr) { aNormal = facet->GetSurfaceNormal(); } return minDist <= kCarToleranceHalf; } else @@ -1367,7 +1366,7 @@ DistanceToOutCandidates(const std::vector& candidates, G4double& minDist, G4ThreeVector& minNormal, G4int& minCandidate ) const { - G4int candidatesCount = (G4int)candidates.size(); + auto candidatesCount = (G4int)candidates.size(); G4double dist = 0.0; G4double distFromSurface = 0.0; G4ThreeVector normal; @@ -1431,7 +1430,7 @@ G4TessellatedSolid::DistanceToOutCore(const G4ThreeVector& aPoint, const vector& candidates = fVoxels.GetCandidates(curVoxel); if (old == &candidates) ++old; - if (old != &candidates && candidates.size()) + if (old != &candidates && !candidates.empty()) { DistanceToOutCandidates(candidates, aPoint, direction, minDistance, aNormalVector, minCandidate); @@ -1478,7 +1477,7 @@ DistanceToInCandidates(const std::vector& candidates, const G4ThreeVector& aPoint, const G4ThreeVector& direction) const { - G4int candidatesCount = (G4int)candidates.size(); + auto candidatesCount = (G4int)candidates.size(); G4double dist = 0.0; G4double distFromSurface = 0.0; G4ThreeVector normal; @@ -1536,7 +1535,7 @@ G4TessellatedSolid::DistanceToInCore(const G4ThreeVector& aPoint, G4double shift = fVoxels.DistanceToFirst(currentPoint, direction); if (shift == kInfinity) return shift; G4double shiftBonus = kCarTolerance; - if (shift) + if (shift != 0.0) currentPoint += direction * (shift + shiftBonus); // if (!fVoxels.Contains(currentPoint)) return minDistance; G4double totalShift = shift; @@ -1548,7 +1547,7 @@ G4TessellatedSolid::DistanceToInCore(const G4ThreeVector& aPoint, do // Loop checking, 13.08.2015, G.Cosmo { const vector& candidates = fVoxels.GetCandidates(curVoxel); - if (candidates.size()) + if (!candidates.empty()) { G4double distance=DistanceToInCandidates(candidates, aPoint, direction); if (minDistance > distance) minDistance = distance; @@ -1617,7 +1616,7 @@ G4TessellatedSolid::MinDistanceFacet(const G4ThreeVector& p, if (dist > minDist) break; const vector& candidates = fVoxels.GetVoxelBoxCandidates(inf.first); - G4int csize = (G4int)candidates.size(); + auto csize = (G4int)candidates.size(); for (G4int j = 0; j < csize; ++j) { G4int candidate = candidates[j]; @@ -1668,7 +1667,7 @@ G4double G4TessellatedSolid::SafetyFromOutside (const G4ThreeVector& p, vector startingVoxel(3); fVoxels.GetVoxel(startingVoxel, p); const vector &candidates = fVoxels.GetCandidates(startingVoxel); - if (candidates.size() == 0 && fInsides.GetNbits()) + if (candidates.empty() && (fInsides.GetNbits() != 0u)) { G4int index = fVoxels.GetPointIndex(p); if (fInsides[index]) return 0.; @@ -1921,9 +1920,9 @@ void G4TessellatedSolid::DescribeYourselfTo (G4VGraphicsScene& scene) const // G4Polyhedron* G4TessellatedSolid::CreatePolyhedron () const { - G4int nVertices = (G4int)fVertexList.size(); - G4int nFacets = (G4int)fFacets.size(); - G4Polyhedron* polyhedron = new G4Polyhedron(nVertices, nFacets); + auto nVertices = (G4int)fVertexList.size(); + auto nFacets = (G4int)fFacets.size(); + auto polyhedron = new G4Polyhedron(nVertices, nFacets); for (auto i = 0; i < nVertices; ++i) { polyhedron->SetVertex(i+1, fVertexList[i]); @@ -2103,9 +2102,9 @@ G4double G4TessellatedSolid::GetMaxZExtent () const // G4VisExtent G4TessellatedSolid::GetExtent () const { - return G4VisExtent (fMinExtent.x(), fMaxExtent.x(), - fMinExtent.y(), fMaxExtent.y(), - fMinExtent.z(), fMaxExtent.z()); + return { fMinExtent.x(), fMaxExtent.x(), + fMinExtent.y(), fMaxExtent.y(), + fMinExtent.z(), fMaxExtent.z() }; } /////////////////////////////////////////////////////////////////////////////// @@ -2151,7 +2150,7 @@ G4ThreeVector G4TessellatedSolid::GetPointOnSurface() const { // Select randomly a facet and return a random point on it - G4int i = (G4int) G4RandFlat::shoot(0., fFacets.size()); + auto i = (G4int) G4RandFlat::shoot(0., fFacets.size()); return fFacets[i]->GetPointOnFace(); } @@ -2226,9 +2225,9 @@ G4int G4TessellatedSolid::AllocatedMemoryWithoutVoxels() base += facet.AllocatedMemory(); } - for (auto it = fExtremeFacets.cbegin(); it != fExtremeFacets.cend(); ++it) + for (const auto & fExtremeFacet : fExtremeFacets) { - G4VFacet &facet = *(*it); + G4VFacet &facet = *fExtremeFacet; base += facet.AllocatedMemory(); } return base; diff --git a/source/geometry/solids/specific/src/G4Tet.cc b/source/geometry/solids/specific/src/G4Tet.cc index 19d9a773a96..da4b7dd3e56 100644 --- a/source/geometry/solids/specific/src/G4Tet.cc +++ b/source/geometry/solids/specific/src/G4Tet.cc @@ -72,7 +72,7 @@ G4Tet::G4Tet(const G4String& pName, { // Check for degeneracy G4bool degenerate = CheckDegeneracy(p0, p1, p2, p3); - if (degeneracyFlag) + if (degeneracyFlag != nullptr) { *degeneracyFlag = degenerate; } @@ -218,7 +218,7 @@ void G4Tet::Initialize(const G4ThreeVector& p0, G4double volume = norm[0].dot(p3 - p0); if (volume > 0.) { - for (G4int i = 0; i < 4; ++i) { norm[i] = -norm[i]; } + for (auto & i : norm) { i = -i; } } // Set normals to face planes @@ -254,7 +254,7 @@ void G4Tet::SetVertices(const G4ThreeVector& p0, { // Check for degeneracy G4bool degenerate = CheckDegeneracy(p0, p1, p2, p3); - if (degeneracyFlag) + if (degeneracyFlag != nullptr) { *degeneracyFlag = degenerate; } @@ -326,12 +326,12 @@ void G4Tet::SetBoundingLimits(const G4ThreeVector& pMin, G4int iout[4] = { 0, 0, 0, 0 }; for (G4int i = 0; i < 4; ++i) { - iout[i] = (fVertex[i].x() < pMin.x() || - fVertex[i].y() < pMin.y() || - fVertex[i].z() < pMin.z() || - fVertex[i].x() > pMax.x() || - fVertex[i].y() > pMax.y() || - fVertex[i].z() > pMax.z()); + iout[i] = (G4int)(fVertex[i].x() < pMin.x() || + fVertex[i].y() < pMin.y() || + fVertex[i].z() < pMin.z() || + fVertex[i].x() > pMax.x() || + fVertex[i].y() > pMax.y() || + fVertex[i].z() > pMax.z()); } if (iout[0] + iout[1] + iout[2] + iout[3] != 0) { @@ -342,10 +342,10 @@ void G4Tet::SetBoundingLimits(const G4ThreeVector& pMin, << " pmin: " << pMin << "\n" << " pmax: " << pMax << "\n" << " Tetrahedron vertices:\n" - << " anchor " << fVertex[0] << ((iout[0]) ? " is outside\n" : "\n") - << " p1 " << fVertex[1] << ((iout[1]) ? " is outside\n" : "\n") - << " p2 " << fVertex[2] << ((iout[2]) ? " is outside\n" : "\n") - << " p3 " << fVertex[3] << ((iout[3]) ? " is outside" : ""); + << " anchor " << fVertex[0] << ((iout[0]) != 0 ? " is outside\n" : "\n") + << " p1 " << fVertex[1] << ((iout[1]) != 0 ? " is outside\n" : "\n") + << " p2 " << fVertex[2] << ((iout[2]) != 0 ? " is outside\n" : "\n") + << " p3 " << fVertex[3] << ((iout[3]) != 0 ? " is outside" : ""); G4Exception("G4Tet::SetBoundingLimits()", "GeomSolids0002", FatalException, message); } @@ -436,7 +436,7 @@ G4ThreeVector G4Tet::SurfaceNormal( const G4ThreeVector& p) const G4double k[4]; for (G4int i = 0; i < 4; ++i) { - k[i] = std::abs(fNormal[i].dot(p) - fDist[i]) <= halfTolerance; + k[i] = (G4double)(std::abs(fNormal[i].dot(p) - fDist[i]) <= halfTolerance); } G4double nsurf = k[0] + k[1] + k[2] + k[3]; G4ThreeVector norm = @@ -538,8 +538,8 @@ G4double G4Tet::DistanceToOut(const G4ThreeVector& p, { G4double tmp = fNormal[i].dot(v); cosa[i] = tmp; - ind[nside] = (tmp > 0) * i; - nside += (tmp > 0); + ind[nside] = (G4int)(tmp > 0) * i; + nside += (G4int)(tmp > 0); dist[i] = fNormal[i].dot(p) - fDist[i]; } @@ -584,7 +584,7 @@ G4double G4Tet::DistanceToOut(const G4ThreeVector& p) const // G4GeometryType G4Tet::GetEntityType() const { - return G4String("G4Tet"); + return {"G4Tet"}; } //////////////////////////////////////////////////////////////////////// @@ -628,7 +628,9 @@ G4ThreeVector G4Tet::GetPointOnSurface() const // Select face G4double select = fSurfaceArea*G4QuickRand(); G4int i = 0; - for ( ; i < 4; ++i) { if ((select -= fArea[i]) <= 0.) break; } + i += (G4int)(select > fArea[0]); + i += (G4int)(select > fArea[0] + fArea[1]); + i += (G4int)(select > fArea[0] + fArea[1] + fArea[2]); // Set selected triangle G4ThreeVector p0 = fVertex[iface[i][0]]; @@ -675,9 +677,9 @@ void G4Tet::DescribeYourselfTo (G4VGraphicsScene& scene) const // G4VisExtent G4Tet::GetExtent() const { - return G4VisExtent(fBmin.x(), fBmax.x(), - fBmin.y(), fBmax.y(), - fBmin.z(), fBmax.z()); + return { fBmin.x(), fBmax.x(), + fBmin.y(), fBmax.y(), + fBmin.z(), fBmax.z() }; } //////////////////////////////////////////////////////////////////////// @@ -706,7 +708,7 @@ G4Polyhedron* G4Tet::CreatePolyhedron() const // Create polyhedron G4int faces[4][4] = { {1,3,2,0}, {1,4,3,0}, {1,2,4,0}, {2,3,4,0} }; - G4Polyhedron* ph = new G4Polyhedron; + auto ph = new G4Polyhedron; ph->createPolyhedron(4,4,xyz,faces); return ph; diff --git a/source/geometry/solids/specific/src/G4TriangularFacet.cc b/source/geometry/solids/specific/src/G4TriangularFacet.cc index 251d4d49a9c..6749f2d7a0e 100644 --- a/source/geometry/solids/specific/src/G4TriangularFacet.cc +++ b/source/geometry/solids/specific/src/G4TriangularFacet.cc @@ -57,7 +57,6 @@ G4TriangularFacet::G4TriangularFacet (const G4ThreeVector& vt0, const G4ThreeVector& vt1, const G4ThreeVector& vt2, G4FacetVertexType vertexType) - : G4VFacet() { fVertices = new vector(3); @@ -142,7 +141,6 @@ G4TriangularFacet::G4TriangularFacet (const G4ThreeVector& vt0, /////////////////////////////////////////////////////////////////////////////// // G4TriangularFacet::G4TriangularFacet () - : fSqrDist(0.) { fVertices = new vector(3); G4ThreeVector zero(0,0,0); @@ -170,7 +168,7 @@ G4TriangularFacet::~G4TriangularFacet () // void G4TriangularFacet::CopyFrom (const G4TriangularFacet& rhs) { - char *p = (char *) &rhs; + auto p = (char *) &rhs; copy(p, p + sizeof(*this), (char *)this); if (fIndices[0] < 0 && fVertices == nullptr) @@ -185,16 +183,16 @@ void G4TriangularFacet::CopyFrom (const G4TriangularFacet& rhs) void G4TriangularFacet::MoveFrom (G4TriangularFacet& rhs) { fSurfaceNormal = std::move(rhs.fSurfaceNormal); - fArea = std::move(rhs.fArea); + fArea = rhs.fArea; fCircumcentre = std::move(rhs.fCircumcentre); - fRadius = std::move(rhs.fRadius); - fIndices = std::move(rhs.fIndices); - fA = std::move(rhs.fA); fB = std::move(rhs.fB); fC = std::move(rhs.fC); - fDet = std::move(rhs.fDet); - fSqrDist = std::move(rhs.fSqrDist); + fRadius = rhs.fRadius; + fIndices = rhs.fIndices; + fA = rhs.fA; fB = rhs.fB; fC = rhs.fC; + fDet = rhs.fDet; + fSqrDist = rhs.fSqrDist; fE1 = std::move(rhs.fE1); fE2 = std::move(rhs.fE2); - fIsDefined = std::move(rhs.fIsDefined); - fVertices = std::move(rhs.fVertices); + fIsDefined = rhs.fIsDefined; + fVertices = rhs.fVertices; rhs.fVertices = nullptr; } @@ -208,7 +206,7 @@ G4TriangularFacet::G4TriangularFacet (const G4TriangularFacet& rhs) /////////////////////////////////////////////////////////////////////////////// // -G4TriangularFacet::G4TriangularFacet (G4TriangularFacet&& rhs) +G4TriangularFacet::G4TriangularFacet (G4TriangularFacet&& rhs) noexcept : G4VFacet(rhs) { MoveFrom(rhs); @@ -233,7 +231,7 @@ G4TriangularFacet::operator=(const G4TriangularFacet& rhs) /////////////////////////////////////////////////////////////////////////////// // G4TriangularFacet& -G4TriangularFacet::operator=(G4TriangularFacet&& rhs) +G4TriangularFacet::operator=(G4TriangularFacet&& rhs) noexcept { SetVertices(nullptr); @@ -254,8 +252,8 @@ G4TriangularFacet::operator=(G4TriangularFacet&& rhs) // G4VFacet* G4TriangularFacet::GetClone () { - G4TriangularFacet* fc = - new G4TriangularFacet (GetVertex(0), GetVertex(1), GetVertex(2), ABSOLUTE); + auto fc = new G4TriangularFacet (GetVertex(0), GetVertex(1), + GetVertex(2), ABSOLUTE); return fc; } @@ -268,8 +266,8 @@ G4VFacet* G4TriangularFacet::GetClone () // G4TriangularFacet* G4TriangularFacet::GetFlippedFacet () { - G4TriangularFacet* flipped = - new G4TriangularFacet (GetVertex(0), GetVertex(1), GetVertex(2), ABSOLUTE); + auto flipped = new G4TriangularFacet (GetVertex(0), GetVertex(1), + GetVertex(2), ABSOLUTE); return flipped; } @@ -811,7 +809,7 @@ G4ThreeVector G4TriangularFacet::GetSurfaceNormal () const //////////////////////////////////////////////////////////////////////// // -void G4TriangularFacet::SetSurfaceNormal (G4ThreeVector normal) +void G4TriangularFacet::SetSurfaceNormal (const G4ThreeVector& normal) { fSurfaceNormal = normal; } diff --git a/source/geometry/solids/specific/src/G4TwistBoxSide.cc b/source/geometry/solids/specific/src/G4TwistBoxSide.cc index 05d2e51f429..2518d8e6f11 100644 --- a/source/geometry/solids/specific/src/G4TwistBoxSide.cc +++ b/source/geometry/solids/specific/src/G4TwistBoxSide.cc @@ -68,7 +68,7 @@ G4TwistBoxSide::G4TwistBoxSide(const G4String& name, // this is an overhead. But the parameter naming scheme fits to the other surfaces. - if ( ! (fDx1 == fDx2 && fDx3 == fDx4 ) ) + if ( fDx1 != fDx2 || fDx3 != fDx4 ) { std::ostringstream message; message << "TwistedTrapBoxSide is not used as a the side of a box: " @@ -122,11 +122,7 @@ G4TwistBoxSide::G4TwistBoxSide(const G4String& name, //* Fake default constructor ------------------------------------------ G4TwistBoxSide::G4TwistBoxSide( __void__& a ) - : G4VTwistSurface(a), fTheta(0.), fPhi(0.), fDy1(0.), fDx1(0.), fDx2(0.), - fDy2(0.), fDx3(0.), fDx4(0.), fDz(0.), fAlph(0.), fTAlph(0.), fPhiTwist(0.), - fAngleSide(0.), fdeltaX(0.), fdeltaY(0.), fDx4plus2(0.), fDx4minus2(0.), - fDx3plus1(0.), fDx3minus1(0.), fDy2plus1(0.), fDy2minus1(0.), fa1md1(0.), - fa2md2(0.) + : G4VTwistSurface(a) { } @@ -134,9 +130,7 @@ G4TwistBoxSide::G4TwistBoxSide( __void__& a ) //===================================================================== //* destructor -------------------------------------------------------- -G4TwistBoxSide::~G4TwistBoxSide() -{ -} +G4TwistBoxSide::~G4TwistBoxSide() = default; //===================================================================== //* GetNormal --------------------------------------------------------- @@ -267,14 +261,14 @@ G4int G4TwistBoxSide::DistanceToSurface(const G4ThreeVector& gp, if ( v.z() == 0. ) { - if ( (std::fabs(p.z()) <= L) && fPhiTwist ) // intersection possible in z + if ( (std::fabs(p.z()) <= L) && (fPhiTwist != 0.0) ) // intersection possible in z { phi = p.z() * fPhiTwist / L ; // phi is determined by the z-position q = (2.* fPhiTwist*((v.x() - fTAlph*v.y())*std::cos(phi) + (fTAlph*v.x() + v.y())*std::sin(phi))); - if (q) + if (q != 0.0) { u = (2*(-(fdeltaY*phi*v.x()) + fPhiTwist*p.y()*v.x() + fdeltaX*phi*v.y() - fPhiTwist*p.x()*v.y()) @@ -331,7 +325,7 @@ G4int G4TwistBoxSide::DistanceToSurface(const G4ThreeVector& gp, for (G4int i = 0 ; i(&(fLastNormal.p)); - G4ThreeVector *tmpnormal = - const_cast(&(fLastNormal.vec)); - G4VTwistSurface **tmpsurface = - const_cast(fLastNormal.surface); + auto tmpp = const_cast(&(fLastNormal.p)); + auto tmpnormal = const_cast(&(fLastNormal.vec)); + auto tmpsurface = const_cast(fLastNormal.surface); tmpp->set(p.x(), p.y(), p.z()); G4double distance = kInfinity; @@ -552,9 +548,9 @@ G4double G4TwistedTubs::DistanceToIn (const G4ThreeVector& p, G4ThreeVector xx; G4ThreeVector bestxx; - for (auto i=0; i<6; ++i) + for (const auto & surface : surfaces) { - G4double tmpdistance = surfaces[i]->DistanceToIn(p, v, xx); + G4double tmpdistance = surface->DistanceToIn(p, v, xx); if (tmpdistance < distance) { distance = tmpdistance; @@ -623,9 +619,9 @@ G4double G4TwistedTubs::DistanceToIn (const G4ThreeVector& p) const G4ThreeVector xx; G4ThreeVector bestxx; - for (auto i=0; i<6; ++i) + for (const auto & surface : surfaces) { - G4double tmpdistance = surfaces[i]->DistanceTo(p, xx); + G4double tmpdistance = surface->DistanceTo(p, xx); if (tmpdistance < distance) { distance = tmpdistance; @@ -814,9 +810,9 @@ G4double G4TwistedTubs::DistanceToOut( const G4ThreeVector& p ) const G4ThreeVector xx; G4ThreeVector bestxx; - for (auto i=0; i<6; ++i) + for (const auto & surface : surfaces) { - G4double tmpdistance = surfaces[i]->DistanceTo(p, xx); + G4double tmpdistance = surface->DistanceTo(p, xx); if (tmpdistance < distance) { distance = tmpdistance; @@ -887,9 +883,9 @@ G4VisExtent G4TwistedTubs::GetExtent() const // G4ThreeVector pmin,pmax; BoundingLimits(pmin,pmax); - return G4VisExtent(pmin.x(),pmax.x(), - pmin.y(),pmax.y(), - pmin.z(),pmax.z()); + return { pmin.x(),pmax.x(), + pmin.y(),pmax.y(), + pmin.z(),pmax.z() }; } //===================================================================== @@ -909,11 +905,11 @@ G4Polyhedron* G4TwistedTubs::CreatePolyhedron () const const G4int nnodes = 4*(k-1)*(n-2) + 2*k*k ; const G4int nfaces = 4*(k-1)*(n-1) + 2*(k-1)*(k-1) ; - G4Polyhedron* ph = new G4Polyhedron; + auto ph = new G4Polyhedron; typedef G4double G4double3[3]; typedef G4int G4int4[4]; - G4double3* xyz = new G4double3[nnodes]; // number of nodes - G4int4* faces = new G4int4[nfaces] ; // number of faces + auto xyz = new G4double3[nnodes]; // number of nodes + auto faces = new G4int4[nfaces] ; // number of faces fLowerEndcap->GetFacets(k,k,xyz,faces,0) ; fUpperEndcap->GetFacets(k,k,xyz,faces,1) ; fInnerHype->GetFacets(k,n,xyz,faces,2) ; @@ -1014,7 +1010,7 @@ void G4TwistedTubs::CreateSurfaces() G4GeometryType G4TwistedTubs::GetEntityType() const { - return G4String("G4TwistedTubs"); + return {"G4TwistedTubs"}; } //===================================================================== diff --git a/source/geometry/solids/specific/src/G4UEllipsoid.cc b/source/geometry/solids/specific/src/G4UEllipsoid.cc index f3549521dc2..247b628bf2e 100644 --- a/source/geometry/solids/specific/src/G4UEllipsoid.cc +++ b/source/geometry/solids/specific/src/G4UEllipsoid.cc @@ -66,7 +66,7 @@ G4UEllipsoid::G4UEllipsoid( __void__& a ) // // Destructor -G4UEllipsoid::~G4UEllipsoid() { } +G4UEllipsoid::~G4UEllipsoid() = default; ////////////////////////////////////////////////////////////////////////// // diff --git a/source/geometry/solids/specific/src/G4UEllipticalCone.cc b/source/geometry/solids/specific/src/G4UEllipticalCone.cc index bd1511c7b9e..c7e5d3ae384 100644 --- a/source/geometry/solids/specific/src/G4UEllipticalCone.cc +++ b/source/geometry/solids/specific/src/G4UEllipticalCone.cc @@ -65,7 +65,7 @@ G4UEllipticalCone::G4UEllipticalCone( __void__& a ) // // Destructor -G4UEllipticalCone::~G4UEllipticalCone() { } +G4UEllipticalCone::~G4UEllipticalCone() = default; ////////////////////////////////////////////////////////////////////////// // @@ -200,7 +200,7 @@ G4UEllipticalCone::CalculateExtent(const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // Set bounding envelope (benv) and calculate extent diff --git a/source/geometry/solids/specific/src/G4UEllipticalTube.cc b/source/geometry/solids/specific/src/G4UEllipticalTube.cc index e290d2ad4e1..3c03a181c1a 100644 --- a/source/geometry/solids/specific/src/G4UEllipticalTube.cc +++ b/source/geometry/solids/specific/src/G4UEllipticalTube.cc @@ -64,7 +64,7 @@ G4UEllipticalTube::G4UEllipticalTube( __void__& a ) // // Destructor -G4UEllipticalTube::~G4UEllipticalTube() { } +G4UEllipticalTube::~G4UEllipticalTube() = default; ////////////////////////////////////////////////////////////////////////// // @@ -175,7 +175,7 @@ G4UEllipticalTube::CalculateExtent(const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis, pVoxelLimit, pTransform, pMin, pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } G4double dx = GetDx(); diff --git a/source/geometry/solids/specific/src/G4UExtrudedSolid.cc b/source/geometry/solids/specific/src/G4UExtrudedSolid.cc index 612ff241a3a..16f3b4fc972 100644 --- a/source/geometry/solids/specific/src/G4UExtrudedSolid.cc +++ b/source/geometry/solids/specific/src/G4UExtrudedSolid.cc @@ -49,8 +49,8 @@ G4UExtrudedSolid::G4UExtrudedSolid(const G4String& name, unsigned int nVertices = polygon.size(); unsigned int nSections = zsections.size(); - vecgeom::XtruVertex2* vertices = new vecgeom::XtruVertex2[nVertices]; - vecgeom::XtruSection* sections = new vecgeom::XtruSection[nSections]; + auto vertices = new vecgeom::XtruVertex2[nVertices]; + auto sections = new vecgeom::XtruSection[nSections]; for (unsigned int i = 0; i < nVertices; ++i) { @@ -80,8 +80,8 @@ G4UExtrudedSolid::G4UExtrudedSolid(const G4String& name, unsigned int nVertices = polygon.size(); unsigned int nSections = 2; - vecgeom::XtruVertex2* vertices = new vecgeom::XtruVertex2[nVertices]; - vecgeom::XtruSection* sections = new vecgeom::XtruSection[nSections]; + auto vertices = new vecgeom::XtruVertex2[nVertices]; + auto sections = new vecgeom::XtruSection[nSections]; for (unsigned int i = 0; i < nVertices; ++i) { @@ -112,9 +112,7 @@ G4UExtrudedSolid::G4UExtrudedSolid(__void__& a) // // Destructor // -G4UExtrudedSolid::~G4UExtrudedSolid() -{ -} +G4UExtrudedSolid::~G4UExtrudedSolid() = default; ////////////////////////////////////////////////////////////////////////// @@ -150,12 +148,14 @@ G4int G4UExtrudedSolid::GetNofVertices() const { return Base_t::GetNVertices(); } + G4TwoVector G4UExtrudedSolid::GetVertex(G4int i) const { G4double xx, yy; Base_t::GetVertex(i, xx, yy); - return G4TwoVector(xx, yy); + return { xx, yy }; } + std::vector G4UExtrudedSolid::GetPolygon() const { std::vector pol; @@ -165,26 +165,29 @@ std::vector G4UExtrudedSolid::GetPolygon() const } return pol; } + G4int G4UExtrudedSolid::GetNofZSections() const { return Base_t::GetNSections(); } + G4UExtrudedSolid::ZSection G4UExtrudedSolid::GetZSection(G4int i) const { vecgeom::XtruSection sect = Base_t::GetSection(i); - return ZSection(sect.fOrigin[2], - G4TwoVector(sect.fOrigin[0], sect.fOrigin[1]), - sect.fScale); + return { sect.fOrigin[2], + G4TwoVector(sect.fOrigin[0], sect.fOrigin[1]), + sect.fScale }; } + std::vector G4UExtrudedSolid::GetZSections() const { std::vector sections; for (unsigned int i = 0; i < Base_t::GetNSections(); ++i) { vecgeom::XtruSection sect = Base_t::GetSection(i); - sections.push_back(ZSection(sect.fOrigin[2], - G4TwoVector(sect.fOrigin[0], sect.fOrigin[1]), - sect.fScale)); + sections.emplace_back(sect.fOrigin[2], + G4TwoVector(sect.fOrigin[0], sect.fOrigin[1]), + sect.fScale); } return sections; } @@ -297,7 +300,7 @@ G4UExtrudedSolid::CalculateExtent(const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // To find the extent, the base polygon is subdivided in triangles. @@ -342,8 +345,8 @@ G4UExtrudedSolid::CalculateExtent(const EAxis pAxis, G4double dy = zsect.fOffset.y(); G4double scale = zsect.fScale; - G4ThreeVectorList* ptr = const_cast(polygons[k]); - G4ThreeVectorList::iterator iter = ptr->begin(); + auto ptr = const_cast(polygons[k]); + auto iter = ptr->begin(); G4double x0 = triangles[i3+0].x()*scale+dx; G4double y0 = triangles[i3+0].y()*scale+dy; iter->set(x0,y0,z); @@ -366,7 +369,7 @@ G4UExtrudedSolid::CalculateExtent(const EAxis pAxis, if (eminlim > pMin && emaxlim < pMax) break; // max possible extent } // free memory - for (G4int k=0; k iout; G4GeomTools::RemoveRedundantVertices(rzcorners,iout,2*kCarTolerance); @@ -86,9 +86,7 @@ G4UGenericPolycone::G4UGenericPolycone(__void__& a) // // Destructor // -G4UGenericPolycone::~G4UGenericPolycone() -{ -} +G4UGenericPolycone::~G4UGenericPolycone() = default; ////////////////////////////////////////////////////////////////////////// @@ -251,7 +249,7 @@ G4UGenericPolycone::CalculateExtent(const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // To find the extent, RZ contour of the polycone is subdivided @@ -267,7 +265,7 @@ G4UGenericPolycone::CalculateExtent(const EAxis pAxis, for (G4int i=0; i& G4UGenericTrap::GetVertices() const { @@ -206,7 +203,7 @@ G4UGenericTrap::CalculateExtent(const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // Set bounding envelope (benv) and calculate extent diff --git a/source/geometry/solids/specific/src/G4UHype.cc b/source/geometry/solids/specific/src/G4UHype.cc index 85cd30d6769..2c2b5413a88 100644 --- a/source/geometry/solids/specific/src/G4UHype.cc +++ b/source/geometry/solids/specific/src/G4UHype.cc @@ -66,7 +66,7 @@ G4UHype::G4UHype( __void__& a ) // // Destructor -G4UHype::~G4UHype() { } +G4UHype::~G4UHype() = default; ////////////////////////////////////////////////////////////////////////// // diff --git a/source/geometry/solids/specific/src/G4UParaboloid.cc b/source/geometry/solids/specific/src/G4UParaboloid.cc index c07d1510853..ea929d3ab88 100644 --- a/source/geometry/solids/specific/src/G4UParaboloid.cc +++ b/source/geometry/solids/specific/src/G4UParaboloid.cc @@ -64,7 +64,7 @@ G4UParaboloid::G4UParaboloid( __void__& a ) // // Destructor -G4UParaboloid::~G4UParaboloid() { } +G4UParaboloid::~G4UParaboloid() = default; ////////////////////////////////////////////////////////////////////////// // diff --git a/source/geometry/solids/specific/src/G4UPolycone.cc b/source/geometry/solids/specific/src/G4UPolycone.cc index 550e88ca71a..97831af8f28 100644 --- a/source/geometry/solids/specific/src/G4UPolycone.cc +++ b/source/geometry/solids/specific/src/G4UPolycone.cc @@ -71,13 +71,13 @@ G4UPolycone::G4UPolycone( const G4String& name, { G4double z = zPlane[i]; G4double r = rOuter[i]; - rzcorners.push_back(G4TwoVector(r,z)); + rzcorners.emplace_back(r,z); } for (G4int i=numZPlanes-1; i>=0; --i) { G4double z = zPlane[i]; G4double r = rInner[i]; - rzcorners.push_back(G4TwoVector(r,z)); + rzcorners.emplace_back(r,z); } std::vector iout; G4GeomTools::RemoveRedundantVertices(rzcorners,iout,2*kCarTolerance); @@ -108,7 +108,7 @@ G4UPolycone::G4UPolycone(const G4String& name, rzcorners.resize(0); for (G4int i=0; i iout; G4GeomTools::RemoveRedundantVertices(rzcorners,iout,2*kCarTolerance); @@ -130,9 +130,7 @@ G4UPolycone::G4UPolycone( __void__& a ) // // Destructor // -G4UPolycone::~G4UPolycone() -{ -} +G4UPolycone::~G4UPolycone() = default; //////////////////////////////////////////////////////////////////////// @@ -289,13 +287,13 @@ G4bool G4UPolycone::Reset() { G4double z = fOriginalParameters.Z_values[i]; G4double r = fOriginalParameters.Rmax[i]; - rzcorners.push_back(G4TwoVector(r,z)); + rzcorners.emplace_back(r,z); } for (G4int i=fOriginalParameters.Num_z_planes-1; i>=0; --i) { G4double z = fOriginalParameters.Z_values[i]; G4double r = fOriginalParameters.Rmin[i]; - rzcorners.push_back(G4TwoVector(r,z)); + rzcorners.emplace_back(r,z); } std::vector iout; G4GeomTools::RemoveRedundantVertices(rzcorners,iout,2*kCarTolerance); @@ -447,7 +445,7 @@ G4bool G4UPolycone::CalculateExtent(const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // To find the extent, RZ contour of the polycone is subdivided @@ -464,7 +462,7 @@ G4bool G4UPolycone::CalculateExtent(const EAxis pAxis, for (G4int i=0; i=0; --i) { G4double z = zPlane[i]; G4double r = rInner[i]*convertRad; - rzcorners.push_back(G4TwoVector(r,z)); + rzcorners.emplace_back(r,z); } std::vector iout; G4GeomTools::RemoveRedundantVertices(rzcorners,iout,2*kCarTolerance); @@ -119,7 +119,7 @@ G4UPolyhedra::G4UPolyhedra(const G4String& name, rzcorners.resize(0); for (G4int i=0; i iout; G4GeomTools::RemoveRedundantVertices(rzcorners,iout,2*kCarTolerance); @@ -141,9 +141,7 @@ G4UPolyhedra::G4UPolyhedra( __void__& a ) // // Destructor // -G4UPolyhedra::~G4UPolyhedra() -{ -} +G4UPolyhedra::~G4UPolyhedra() = default; //////////////////////////////////////////////////////////////////////// @@ -307,13 +305,13 @@ G4bool G4UPolyhedra::Reset() { G4double z = fOriginalParameters.Z_values[i]; G4double r = fOriginalParameters.Rmax[i]; - rzcorners.push_back(G4TwoVector(r,z)); + rzcorners.emplace_back(r,z); } for (G4int i=fOriginalParameters.Num_z_planes-1; i>=0; --i) { G4double z = fOriginalParameters.Z_values[i]; G4double r = fOriginalParameters.Rmin[i]; - rzcorners.push_back(G4TwoVector(r,z)); + rzcorners.emplace_back(r,z); } std::vector iout; G4GeomTools::RemoveRedundantVertices(rzcorners,iout,2*kCarTolerance); @@ -491,7 +489,7 @@ G4UPolyhedra::CalculateExtent(const EAxis pAxis, #endif if (bbox.BoundingBoxVsVoxelLimits(pAxis,pVoxelLimit,pTransform,pMin,pMax)) { - return exist = (pMin < pMax) ? true : false; + return exist = pMin < pMax; } // To find the extent, RZ contour of the polycone is subdivided @@ -508,7 +506,7 @@ G4UPolyhedra::CalculateExtent(const EAxis pAxis, for (G4int i=0; i(polygons[k]); - G4ThreeVectorList::iterator iter = ptr->begin(); + auto ptr = const_cast(polygons[k]); + auto iter = ptr->begin(); iter->set(triangles[i3+0].x()*cosCur, triangles[i3+0].x()*sinCur, triangles[i3+0].y()); @@ -584,7 +582,7 @@ G4UPolyhedra::CalculateExtent(const EAxis pAxis, if (eminlim > pMin && emaxlim < pMax) break; // max possible extent } // free memory - for (G4int k=0; kGetNumberOfVertices() == 3) { - G4TriangularFacet* a3Facet = dynamic_cast(aFacet); + auto a3Facet = dynamic_cast(aFacet); return Base_t::AddTriangularFacet(U3Vector(a3Facet->GetVertex(0).x(), a3Facet->GetVertex(0).y(), a3Facet->GetVertex(0).z()), @@ -135,7 +135,7 @@ G4bool G4UTessellatedSolid::AddFacet(G4VFacet* aFacet) } else if (aFacet->GetNumberOfVertices() == 4) { - G4QuadrangularFacet* a4Facet = dynamic_cast(aFacet); + auto a4Facet = dynamic_cast(aFacet); return Base_t::AddQuadrilateralFacet(U3Vector(a4Facet->GetVertex(0).x(), a4Facet->GetVertex(0).y(), a4Facet->GetVertex(0).z()), @@ -179,17 +179,17 @@ void G4UTessellatedSolid::SetSolidClosed(const G4bool t) for (std::size_t j = 0; j < nVertices; ++j) { U3Vector vt = fTessellated.fVertices[j]; - fVertexList.push_back(G4ThreeVector(vt.x(), vt.y(), vt.z())); + fVertexList.emplace_back(vt.x(), vt.y(), vt.z()); } for (std::size_t i = 0; i < nFacets; ++i) { vecgeom::TriangleFacet* afacet = Base_t::GetFacet(i); std::vector v; - for (G4int k=0; k<3; ++k) + for (const auto & vertex : afacet->fVertices) { - v.push_back(G4ThreeVector(afacet->fVertices[k].x(), - afacet->fVertices[k].y(), - afacet->fVertices[k].z())); + v.emplace_back(vertex.x(), + vertex.y(), + vertex.z()); } G4VFacet* facet = new G4TriangularFacet(v[0], v[1], v[2], G4FacetVertexType::ABSOLUTE); @@ -379,9 +379,9 @@ G4UTessellatedSolid::CalculateExtent(const EAxis pAxis, // G4Polyhedron* G4UTessellatedSolid::CreatePolyhedron () const { - G4int nVertices = (G4int)fVertexList.size(); - G4int nFacets = (G4int)fFacets.size(); - G4Polyhedron* polyhedron = new G4Polyhedron(nVertices, nFacets); + auto nVertices = (G4int)fVertexList.size(); + auto nFacets = (G4int)fFacets.size(); + auto polyhedron = new G4Polyhedron(nVertices, nFacets); for (auto i = 0; i < nVertices; ++i) { polyhedron->SetVertex(i+1, fVertexList[i]); diff --git a/source/geometry/solids/specific/src/G4UTet.cc b/source/geometry/solids/specific/src/G4UTet.cc index e23d14b7a45..4956a7b168d 100644 --- a/source/geometry/solids/specific/src/G4UTet.cc +++ b/source/geometry/solids/specific/src/G4UTet.cc @@ -60,7 +60,7 @@ G4UTet::G4UTet(const G4String& pName, { // Check for degeneracy G4bool degenerate = CheckDegeneracy(anchor, p1, p2, p3); - if(degeneracyFlag) *degeneracyFlag = degenerate; + if(degeneracyFlag != nullptr) *degeneracyFlag = degenerate; else if (degenerate) { G4Exception("G4UTet::G4UTet()", "GeomSolids0002", FatalException, @@ -89,9 +89,7 @@ G4UTet::G4UTet( __void__& a ) // // Destructor // -G4UTet::~G4UTet() -{ -} +G4UTet::~G4UTet() = default; /////////////////////////////////////////////////////////////////////////////// // @@ -187,7 +185,7 @@ void G4UTet::SetVertices(const G4ThreeVector& anchor, { // Check for degeneracy G4bool degenerate = CheckDegeneracy(anchor, p1, p2, p3); - if(degeneracyFlag) *degeneracyFlag = degenerate; + if(degeneracyFlag != nullptr) *degeneracyFlag = degenerate; else if (degenerate) { G4Exception("G4UTet::SetVertices()", "GeomSolids0002", FatalException, @@ -241,12 +239,12 @@ void G4UTet::SetBoundingLimits(const G4ThreeVector& pMin, G4int iout[4] = { 0, 0, 0, 0 }; for (G4int i = 0; i < 4; ++i) { - iout[i] = (fVertex[i].x() < pMin.x() || - fVertex[i].y() < pMin.y() || - fVertex[i].z() < pMin.z() || - fVertex[i].x() > pMax.x() || - fVertex[i].y() > pMax.y() || - fVertex[i].z() > pMax.z()); + iout[i] = (G4int)(fVertex[i].x() < pMin.x() || + fVertex[i].y() < pMin.y() || + fVertex[i].z() < pMin.z() || + fVertex[i].x() > pMax.x() || + fVertex[i].y() > pMax.y() || + fVertex[i].z() > pMax.z()); } if (iout[0] + iout[1] + iout[2] + iout[3] != 0) { @@ -257,10 +255,10 @@ void G4UTet::SetBoundingLimits(const G4ThreeVector& pMin, << " pmin: " << pMin << "\n" << " pmax: " << pMax << "\n" << " Tetrahedron vertices:\n" - << " anchor " << fVertex[0] << ((iout[0]) ? " is outside\n" : "\n") - << " p1 " << fVertex[1] << ((iout[1]) ? " is outside\n" : "\n") - << " p2 " << fVertex[2] << ((iout[2]) ? " is outside\n" : "\n") - << " p3 " << fVertex[3] << ((iout[3]) ? " is outside" : ""); + << " anchor " << fVertex[0] << ((iout[0]) != 0 ? " is outside\n" : "\n") + << " p1 " << fVertex[1] << ((iout[1]) != 0 ? " is outside\n" : "\n") + << " p2 " << fVertex[2] << ((iout[2]) != 0 ? " is outside\n" : "\n") + << " p3 " << fVertex[3] << ((iout[3]) != 0 ? " is outside" : ""); G4Exception("G4UTet::SetBoundingLimits()", "GeomSolids0002", FatalException, message); } @@ -347,7 +345,7 @@ G4Polyhedron* G4UTet::CreatePolyhedron() const xyz[i][2] = vec[i].z(); } - G4Polyhedron* ph = new G4Polyhedron; + auto ph = new G4Polyhedron; ph->createPolyhedron(4,4,xyz,faces); return ph; } diff --git a/source/geometry/solids/specific/src/G4VCSGfaceted.cc b/source/geometry/solids/specific/src/G4VCSGfaceted.cc index df3feefc025..137e77ee76b 100644 --- a/source/geometry/solids/specific/src/G4VCSGfaceted.cc +++ b/source/geometry/solids/specific/src/G4VCSGfaceted.cc @@ -149,7 +149,7 @@ void G4VCSGfaceted::CopyStuff( const G4VCSGfaceted& source ) // void G4VCSGfaceted::DeleteStuff() { - if (numFace) + if (numFace != 0) { G4VCSGface **face = faces; do // Loop checking, 13.08.2015, G.Cosmo @@ -429,9 +429,9 @@ G4VisExtent G4VCSGfaceted::GetExtent() const } while( ++face < faces + numFace ); - return G4VisExtent( -answers[0], answers[1], - -answers[2], answers[3], - -answers[4], answers[5] ); + return { -answers[0], answers[1], + -answers[2], answers[3], + -answers[4], answers[5] }; } @@ -440,7 +440,7 @@ G4VisExtent G4VCSGfaceted::GetExtent() const // G4GeometryType G4VCSGfaceted::GetEntityType() const { - return G4String("G4CSGfaceted"); + return {"G4CSGfaceted"}; } diff --git a/source/geometry/solids/specific/src/G4VFacet.cc b/source/geometry/solids/specific/src/G4VFacet.cc index 70795b77c3e..1f3a2f23717 100644 --- a/source/geometry/solids/specific/src/G4VFacet.cc +++ b/source/geometry/solids/specific/src/G4VFacet.cc @@ -48,9 +48,7 @@ G4VFacet::G4VFacet() /////////////////////////////////////////////////////////////////////////////// // -G4VFacet::~G4VFacet() -{ -} +G4VFacet::~G4VFacet() = default; /////////////////////////////////////////////////////////////////////////////// // @@ -82,7 +80,7 @@ G4bool G4VFacet::operator== (const G4VFacet& right) const /////////////////////////////////////////////////////////////////////////////// // -void G4VFacet::ApplyTranslation(const G4ThreeVector v) +void G4VFacet::ApplyTranslation(const G4ThreeVector& v) { G4int n = GetNumberOfVertices(); for (G4int i = 0; i < n; ++i) diff --git a/source/geometry/solids/specific/src/G4VTwistSurface.cc b/source/geometry/solids/specific/src/G4VTwistSurface.cc index 071085340b2..836e9c27ce5 100644 --- a/source/geometry/solids/specific/src/G4VTwistSurface.cc +++ b/source/geometry/solids/specific/src/G4VTwistSurface.cc @@ -137,9 +137,7 @@ G4VTwistSurface::G4VTwistSurface( __void__& ) //===================================================================== //* destructor -------------------------------------------------------- -G4VTwistSurface::~G4VTwistSurface() -{ -} +G4VTwistSurface::~G4VTwistSurface() = default; //===================================================================== //* AmIOnLeftSide ----------------------------------------------------- @@ -447,7 +445,7 @@ G4double G4VTwistSurface::DistanceToIn(const G4ThreeVector& gp, // now, we can accept xx intersection - if (isaccepted[0] == true && isaccepted[1] == true) + if (isaccepted[0] && isaccepted[1]) { if (distance[i] < bestdistance) { @@ -634,8 +632,7 @@ G4VTwistSurface::IsSameBoundary(G4VTwistSurface* surf1, G4int areacode1, G4ThreeVector corner2 = surf2->ComputeGlobalPoint(surf2->GetCorner(areacode2)); - if ((corner1 - corner2).mag() < kCarTolerance) { return true; } - else { return false; } + return (corner1 - corner2).mag() < kCarTolerance; } else if ((IsBoundary(areacode1, testbitmode) && (!iscorner[0])) && (IsBoundary(areacode2, testbitmode) && (!iscorner[1]))) @@ -652,9 +649,8 @@ G4VTwistSurface::IsSameBoundary(G4VTwistSurface* surf1, G4int areacode1, d1 = surf1->ComputeGlobalDirection(ld1); d2 = surf2->ComputeGlobalDirection(ld2); - if ((x01 - x02).mag() < kCarTolerance && - (d1 - d2).mag() < kCarTolerance) { return true; } - else { return false; } + return (x01 - x02).mag() < kCarTolerance + && (d1 - d2).mag() < kCarTolerance; } else { @@ -674,10 +670,9 @@ void G4VTwistSurface::GetBoundaryParameters(const G4int& areacode, // sAxis0 & sAxisMin, sAxis0 & sAxisMax, // sAxis1 & sAxisMin, sAxis1 & sAxisMax. - for (G4int i=0; i<4; ++i) + for (const auto & boundary : fBoundaries) { - if (fBoundaries[i].GetBoundaryParameters(areacode, d, x0, - boundarytype)) + if (boundary.GetBoundaryParameters(areacode, d, x0, boundarytype)) { return; } @@ -702,7 +697,7 @@ G4ThreeVector G4VTwistSurface::GetBoundaryAtPZ(G4int areacode, // sAxis0 & sAxisMin, sAxis0 & sAxisMax, // sAxis1 & sAxisMin, sAxis1 & sAxisMax. - if (areacode & sAxis0 && areacode & sAxis1) + if (((areacode & sAxis0) != 0) && ((areacode & sAxis1) != 0)) { std::ostringstream message; message << "Point is in the corner area." << G4endl @@ -718,10 +713,9 @@ G4ThreeVector G4VTwistSurface::GetBoundaryAtPZ(G4int areacode, G4int boundarytype = 0; G4bool found = false; - for (G4int i=0; i<4; ++i) + for (const auto & boundary : fBoundaries) { - if (fBoundaries[i].GetBoundaryParameters(areacode, d, x0, - boundarytype)) + if (boundary.GetBoundaryParameters(areacode, d, x0, boundarytype)) { found = true; continue; @@ -797,7 +791,7 @@ void G4VTwistSurface::GetBoundaryAxis(G4int areacode, EAxis axis[]) const // extracted axiscode of whichaxis G4int axiscode = whichaxis & sAxisMask & areacode ; - if (axiscode) { + if (axiscode != 0) { if (axiscode == (whichaxis & sAxisX)) { axis[i] = kXAxis; } else if (axiscode == (whichaxis & sAxisY)) { @@ -824,28 +818,28 @@ void G4VTwistSurface::GetBoundaryAxis(G4int areacode, EAxis axis[]) const void G4VTwistSurface::GetBoundaryLimit(G4int areacode, G4double limit[]) const { - if (areacode & sCorner) { - if (areacode & sC0Min1Min) { + if ((areacode & sCorner) != 0) { + if ((areacode & sC0Min1Min) != 0) { limit[0] = fAxisMin[0]; limit[1] = fAxisMin[1]; - } else if (areacode & sC0Max1Min) { + } else if ((areacode & sC0Max1Min) != 0) { limit[0] = fAxisMax[0]; limit[1] = fAxisMin[1]; - } else if (areacode & sC0Max1Max) { + } else if ((areacode & sC0Max1Max) != 0) { limit[0] = fAxisMax[0]; limit[1] = fAxisMax[1]; - } else if (areacode & sC0Min1Max) { + } else if ((areacode & sC0Min1Max) != 0) { limit[0] = fAxisMin[0]; limit[1] = fAxisMax[1]; } - } else if (areacode & sBoundary) { - if (areacode & (sAxis0 | sAxisMin)) { + } else if ((areacode & sBoundary) != 0) { + if ((areacode & (sAxis0 | sAxisMin)) != 0) { limit[0] = fAxisMin[0]; - } else if (areacode & (sAxis1 | sAxisMin)) { + } else if ((areacode & (sAxis1 | sAxisMin)) != 0) { limit[0] = fAxisMin[1]; - } else if (areacode & (sAxis0 | sAxisMax)) { + } else if ((areacode & (sAxis0 | sAxisMax)) != 0) { limit[0] = fAxisMax[0]; - } else if (areacode & (sAxis1 | sAxisMax)) { + } else if ((areacode & (sAxis1 | sAxisMax)) != 0) { limit[0] = fAxisMax[1]; } } else { @@ -872,12 +866,11 @@ void G4VTwistSurface::SetBoundary(const G4int& axiscode, (code == (sAxis1 & sAxisMax))) { G4bool done = false; - for (auto i=0; i<4; ++i) + for (auto & boundary : fBoundaries) { - if (fBoundaries[i].IsEmpty()) + if (boundary.IsEmpty()) { - fBoundaries[i].SetFields(axiscode, direction, - x0, boundarytype); + boundary.SetFields(axiscode, direction, x0, boundarytype); done = true; break; } @@ -1189,8 +1182,7 @@ G4VTwistSurface::CurrentStatus::CurrentStatus() //* CurrentStatus::~CurrentStatus ------------------------------------- G4VTwistSurface::CurrentStatus::~CurrentStatus() -{ -} += default; //===================================================================== //* CurrentStatus::SetCurrentStatus ----------------------------------- @@ -1279,16 +1271,13 @@ G4VTwistSurface::CurrentStatus::DebugPrint() const //* Boundary::Boundary ------------------------------------------------ G4VTwistSurface::Boundary::Boundary() - : fBoundaryAcode(-1), fBoundaryType(0) { } //===================================================================== //* Boundary::~Boundary ----------------------------------------------- -G4VTwistSurface::Boundary::~Boundary() -{ -} +G4VTwistSurface::Boundary::~Boundary() = default; //===================================================================== //* Boundary::SetFields ----------------------------------------------- @@ -1310,8 +1299,7 @@ G4VTwistSurface::Boundary::SetFields(const G4int& areacode, G4bool G4VTwistSurface::Boundary::IsEmpty() const { - if (fBoundaryAcode == -1) return true; - return false; + return fBoundaryAcode == -1; } //===================================================================== @@ -1327,7 +1315,7 @@ G4VTwistSurface::Boundary::GetBoundaryParameters(const G4int& areacode, // sAxis0 & sAxisMin, sAxis0 & sAxisMax, // sAxis1 & sAxisMin, sAxis1 & sAxisMax // - if ((areacode & sAxis0) && (areacode & sAxis1)) + if (((areacode & sAxis0) != 0) && ((areacode & sAxis1) != 0)) { std::ostringstream message; message << "Located in the corner area." << G4endl diff --git a/source/geometry/solids/specific/src/G4VTwistedFaceted.cc b/source/geometry/solids/specific/src/G4VTwistedFaceted.cc index d75e93231eb..6725255b0cd 100644 --- a/source/geometry/solids/specific/src/G4VTwistedFaceted.cc +++ b/source/geometry/solids/specific/src/G4VTwistedFaceted.cc @@ -71,8 +71,8 @@ G4VTwistedFaceted( const G4String& pname, // Name of instance G4double pDx4, // half x length at +pDz,+pDy G4double pAlph ) // tilt angle : G4VSolid(pname), - fLowerEndcap(0), fUpperEndcap(0), fSide0(0), - fSide90(0), fSide180(0), fSide270(0) + fLowerEndcap(nullptr), fUpperEndcap(nullptr), fSide0(nullptr), + fSide90(nullptr), fSide180(nullptr), fSide270(nullptr) { G4double pDytmp ; @@ -154,17 +154,17 @@ G4VTwistedFaceted( const G4String& pname, // Name of instance // fdeltaY = 2 * fDz * std::tan(fTheta) * std::sin(fPhi) ; - if ( ! ( ( fDx1 > 2*kCarTolerance) - && ( fDx2 > 2*kCarTolerance) - && ( fDx3 > 2*kCarTolerance) - && ( fDx4 > 2*kCarTolerance) - && ( fDy1 > 2*kCarTolerance) - && ( fDy2 > 2*kCarTolerance) - && ( fDz > 2*kCarTolerance) - && ( std::fabs(fPhiTwist) > 2*kAngTolerance ) - && ( std::fabs(fPhiTwist) < pi/2 ) - && ( std::fabs(fAlph) < pi/2 ) - && ( fTheta < pi/2 && fTheta >= 0 ) ) + if ( ( fDx1 <= 2*kCarTolerance) + || ( fDx2 <= 2*kCarTolerance) + || ( fDx3 <= 2*kCarTolerance) + || ( fDx4 <= 2*kCarTolerance) + || ( fDy1 <= 2*kCarTolerance) + || ( fDy2 <= 2*kCarTolerance) + || ( fDz <= 2*kCarTolerance) + || ( std::fabs(fPhiTwist) <= 2*kAngTolerance ) + || ( std::fabs(fPhiTwist) >= pi/2 ) + || ( std::fabs(fAlph) >= pi/2 ) + || fTheta >= pi/2 || fTheta < 0 ) { std::ostringstream message; @@ -189,12 +189,8 @@ G4VTwistedFaceted( const G4String& pname, // Name of instance G4VTwistedFaceted::G4VTwistedFaceted( __void__& a ) : G4VSolid(a), - fTheta(0.), fPhi(0.), fDy1(0.), - fDx1(0.), fDx2(0.), fDy2(0.), fDx3(0.), fDx4(0.), - fDz(0.), fDx(0.), fDy(0.), fAlph(0.), - fTAlph(0.), fdeltaX(0.), fdeltaY(0.), fPhiTwist(0.), - fLowerEndcap(0), fUpperEndcap(0), fSide0(0), fSide90(0), fSide180(0), - fSide270(0) + fLowerEndcap(nullptr), fUpperEndcap(nullptr), + fSide0(nullptr), fSide90(nullptr), fSide180(nullptr), fSide270(nullptr) { } @@ -204,14 +200,14 @@ G4VTwistedFaceted::G4VTwistedFaceted( __void__& a ) G4VTwistedFaceted::~G4VTwistedFaceted() { - if (fLowerEndcap) { delete fLowerEndcap ; } - if (fUpperEndcap) { delete fUpperEndcap ; } - - if (fSide0) { delete fSide0 ; } - if (fSide90) { delete fSide90 ; } - if (fSide180) { delete fSide180 ; } - if (fSide270) { delete fSide270 ; } - if (fpPolyhedron) { delete fpPolyhedron; fpPolyhedron = nullptr; } + delete fLowerEndcap ; + delete fUpperEndcap ; + + delete fSide0 ; + delete fSide90 ; + delete fSide180 ; + delete fSide270 ; + delete fpPolyhedron; fpPolyhedron = nullptr; } @@ -220,13 +216,13 @@ G4VTwistedFaceted::~G4VTwistedFaceted() G4VTwistedFaceted::G4VTwistedFaceted(const G4VTwistedFaceted& rhs) : G4VSolid(rhs), + fCubicVolume(rhs.fCubicVolume), fSurfaceArea(rhs.fSurfaceArea), fTheta(rhs.fTheta), fPhi(rhs.fPhi), fDy1(rhs.fDy1), fDx1(rhs.fDx1), fDx2(rhs.fDx2), fDy2(rhs.fDy2), fDx3(rhs.fDx3), fDx4(rhs.fDx4), fDz(rhs.fDz), fDx(rhs.fDx), fDy(rhs.fDy), fAlph(rhs.fAlph), fTAlph(rhs.fTAlph), fdeltaX(rhs.fdeltaX), - fdeltaY(rhs.fdeltaY), fPhiTwist(rhs.fPhiTwist), fLowerEndcap(0), - fUpperEndcap(0), fSide0(0), fSide90(0), fSide180(0), fSide270(0), - fCubicVolume(rhs.fCubicVolume), fSurfaceArea(rhs.fSurfaceArea), + fdeltaY(rhs.fdeltaY), fPhiTwist(rhs.fPhiTwist), fLowerEndcap(nullptr), + fUpperEndcap(nullptr), fSide0(nullptr), fSide90(nullptr), fSide180(nullptr), fSide270(nullptr), fLastInside(rhs.fLastInside), fLastNormal(rhs.fLastNormal), fLastDistanceToIn(rhs.fLastDistanceToIn), fLastDistanceToOut(rhs.fLastDistanceToOut), @@ -256,8 +252,8 @@ G4VTwistedFaceted& G4VTwistedFaceted::operator = (const G4VTwistedFaceted& rhs) fDy1= rhs.fDy1; fDx1= rhs.fDx1; fDx2= rhs.fDx2; fDy2= rhs.fDy2; fDx3= rhs.fDx3; fDx4= rhs.fDx4; fDz= rhs.fDz; fDx= rhs.fDx; fDy= rhs.fDy; fAlph= rhs.fAlph; fTAlph= rhs.fTAlph; fdeltaX= rhs.fdeltaX; - fdeltaY= rhs.fdeltaY; fPhiTwist= rhs.fPhiTwist; fLowerEndcap= 0; - fUpperEndcap= 0; fSide0= 0; fSide90= 0; fSide180= 0; fSide270= 0; + fdeltaY= rhs.fdeltaY; fPhiTwist= rhs.fPhiTwist; fLowerEndcap= nullptr; + fUpperEndcap= nullptr; fSide0= nullptr; fSide90= nullptr; fSide180= nullptr; fSide270= nullptr; fCubicVolume= rhs.fCubicVolume; fSurfaceArea= rhs.fSurfaceArea; fRebuildPolyhedron = false; delete fpPolyhedron; fpPolyhedron = nullptr; @@ -437,10 +433,9 @@ G4ThreeVector G4VTwistedFaceted::SurfaceNormal(const G4ThreeVector& p) const return fLastNormal.vec; } - G4ThreeVector* tmpp = const_cast(&(fLastNormal.p)); - G4ThreeVector* tmpnormal = const_cast(&(fLastNormal.vec)); - G4VTwistSurface** tmpsurface - = const_cast(fLastNormal.surface); + auto tmpp = const_cast(&(fLastNormal.p)); + auto tmpnormal = const_cast(&(fLastNormal.vec)); + auto tmpsurface = const_cast(fLastNormal.surface); tmpp->set(p.x(), p.y(), p.z()); G4double distance = kInfinity; @@ -550,12 +545,12 @@ G4double G4VTwistedFaceted::DistanceToIn (const G4ThreeVector& p, G4ThreeVector xx; G4ThreeVector bestxx; - for (auto i=0; i < 6 ; ++i) + for (const auto & surface : surfaces) { #ifdef G4TWISTDEBUG G4cout << G4endl << "surface " << i << ": " << G4endl << G4endl ; #endif - G4double tmpdistance = surfaces[i]->DistanceToIn(p, v, xx); + G4double tmpdistance = surface->DistanceToIn(p, v, xx); #ifdef G4TWISTDEBUG G4cout << "Solid DistanceToIn : distance = " << tmpdistance << G4endl ; G4cout << "intersection point = " << xx << G4endl ; @@ -641,9 +636,9 @@ G4double G4VTwistedFaceted::DistanceToIn (const G4ThreeVector& p) const G4ThreeVector xx; G4ThreeVector bestxx; - for (auto i=0; i< 6; ++i) + for (const auto & surface : surfaces) { - G4double tmpdistance = surfaces[i]->DistanceTo(p, xx); + G4double tmpdistance = surface->DistanceTo(p, xx); if (tmpdistance < distance) { distance = tmpdistance; @@ -851,9 +846,9 @@ G4double G4VTwistedFaceted::DistanceToOut( const G4ThreeVector& p ) const G4ThreeVector xx; G4ThreeVector bestxx; - for (auto i=0; i<6; ++i) + for (const auto & surface : surfaces) { - G4double tmpdistance = surfaces[i]->DistanceTo(p, xx); + G4double tmpdistance = surface->DistanceTo(p, xx); if (tmpdistance < distance) { distance = tmpdistance; @@ -931,9 +926,9 @@ G4VisExtent G4VTwistedFaceted::GetExtent() const { G4double maxRad = std::sqrt( fDx*fDx + fDy*fDy); - return G4VisExtent(-maxRad, maxRad , - -maxRad, maxRad , - -fDz, fDz ); + return { -maxRad, maxRad , + -maxRad, maxRad , + -fDz, fDz }; } @@ -1103,7 +1098,7 @@ G4double G4VTwistedFaceted::GetSurfaceArea() G4GeometryType G4VTwistedFaceted::GetEntityType() const { - return G4String("G4VTwistedFaceted"); + return {"G4VTwistedFaceted"}; } @@ -1143,7 +1138,7 @@ G4ThreeVector G4VTwistedFaceted::GetPointInSolid(G4double z) const G4double phi = z/(2*fDz)*fPhiTwist ; - return G4ThreeVector(fdeltaX * phi/fPhiTwist, fdeltaY * phi/fPhiTwist, z ) ; + return { fdeltaX * phi/fPhiTwist, fdeltaY * phi/fPhiTwist, z }; } @@ -1249,11 +1244,11 @@ G4Polyhedron* G4VTwistedFaceted::CreatePolyhedron () const const G4int nnodes = 4*(k-1)*(n-2) + 2*k*k ; const G4int nfaces = 4*(k-1)*(n-1) + 2*(k-1)*(k-1) ; - G4Polyhedron* ph = new G4Polyhedron; + auto ph = new G4Polyhedron; typedef G4double G4double3[3]; typedef G4int G4int4[4]; - G4double3* xyz = new G4double3[nnodes]; // number of nodes - G4int4* faces = new G4int4[nfaces] ; // number of faces + auto xyz = new G4double3[nnodes]; // number of nodes + auto faces = new G4int4[nfaces] ; // number of faces fLowerEndcap->GetFacets(k,k,xyz,faces,0) ; fUpperEndcap->GetFacets(k,k,xyz,faces,1) ; diff --git a/source/geometry/solids/specific/src/G4Voxelizer.cc b/source/geometry/solids/specific/src/G4Voxelizer.cc index c2f241923a5..063c5903eb4 100644 --- a/source/geometry/solids/specific/src/G4Voxelizer.cc +++ b/source/geometry/solids/specific/src/G4Voxelizer.cc @@ -36,15 +36,14 @@ #include "G4VSolid.hh" -#include "G4Orb.hh" -#include "G4Voxelizer.hh" -#include "G4SolidStore.hh" -#include "Randomize.hh" -#include "G4PhysicalConstants.hh" -#include "G4GeometryTolerance.hh" #include "G4CSGSolid.hh" +#include "G4GeometryTolerance.hh" #include "G4Orb.hh" +#include "G4PhysicalConstants.hh" +#include "G4SolidStore.hh" #include "G4Types.hh" +#include "G4Voxelizer.hh" +#include "Randomize.hh" #include "geomdefs.hh" using namespace std; @@ -65,9 +64,7 @@ G4Voxelizer::G4Voxelizer() } //______________________________________________________________________________ -G4Voxelizer::~G4Voxelizer() -{ -} +G4Voxelizer::~G4Voxelizer() = default; //______________________________________________________________________________ void G4Voxelizer::BuildEmpty() @@ -91,7 +88,7 @@ void G4Voxelizer::BuildEmpty() { for (xyz[0] = 0; xyz[0] < max[0]; ++xyz[0]) { - if (GetCandidatesVoxelArray(xyz, candidates)) + if (GetCandidatesVoxelArray(xyz, candidates) != 0) { G4int index = GetVoxelsIndex(xyz); fEmpty.SetBitNumber(index, false); @@ -272,8 +269,8 @@ void G4Voxelizer::BuildBoundaries() #ifdef G4SPECSDEBUG if (j == 0) G4cout << "Examining " << newBoundary << "..." << G4endl; #endif - G4int size = (G4int)boundary.size(); - if(!size || std::abs(boundary[size-1] - newBoundary) > tolerance) + auto size = (G4int)boundary.size(); + if((size == 0) || std::abs(boundary[size-1] - newBoundary) > tolerance) { { #ifdef G4SPECSDEBUG @@ -288,7 +285,7 @@ void G4Voxelizer::BuildBoundaries() // only the first one is considered } - G4int n = (G4int)boundary.size(); + auto n = (G4int)boundary.size(); G4int max = 100000; if (n > max/2) { @@ -298,7 +295,7 @@ void G4Voxelizer::BuildBoundaries() for (G4int i = 0; i < n; ++i) { // 50 ok for 2k, 1000, 2000 - G4int size = (G4int)boundary.size(); + auto size = (G4int)boundary.size(); if (i % skip == 0 || i == 0 || i == size - 1) { // this condition of merging boundaries was wrong, @@ -411,7 +408,7 @@ G4String G4Voxelizer::GetCandidatesAsString(const G4SurfBits& bits) const // Decodes the candidates in mask as G4String. stringstream ss; - G4int numNodes = (G4int)fBoxes.size(); + auto numNodes = (G4int)fBoxes.size(); for(auto i=0; i boundaries[], for (auto k = 0; k <= 2; ++k) { std::vector &candidatesCount = fCandidatesCounts[k]; - G4int max = (G4int)candidatesCount.size(); + auto max = (G4int)candidatesCount.size(); std::vector voxels(max); G4VoxelComparator comp(voxels); std::set voxelSet(comp); @@ -574,12 +571,12 @@ void G4Voxelizer::BuildReduceVoxels(std::vector boundaries[], } // Loop checking, 13.08.2015, G.Cosmo } - if (mergings.size()) + if (!mergings.empty()) { std::sort(mergings.begin(), mergings.end()); const std::vector& boundary = boundaries[k]; - G4int mergingsSize = (G4int)mergings.size(); + auto mergingsSize = (G4int)mergings.size(); vector reducedBoundary; G4int skip = mergings[0], i = 0; max = (G4int)boundary.size(); @@ -666,7 +663,7 @@ void G4Voxelizer::BuildReduceVoxels2(std::vector boundaries[], for (auto k = 0; k <= 2; ++k) { std::vector &candidatesCount = fCandidatesCounts[k]; - G4int max = (G4int)candidatesCount.size(); + auto max = (G4int)candidatesCount.size(); G4int total = 0; for (G4int i = 0; i < max; ++i) total += candidatesCount[i]; @@ -714,9 +711,9 @@ void G4Voxelizer::Voxelize(std::vector& solids, // actually only makes performance slower, // these are only pre-calculated but not used by multi-union - for (auto i = 0; i < 3; ++i) + for (auto & fCandidatesCount : fCandidatesCounts) { - fCandidatesCounts[i].resize(0); + fCandidatesCount.resize(0); } } @@ -735,7 +732,7 @@ void G4Voxelizer::CreateMiniVoxels(std::vector boundaries[], for (voxel[0] = 0; voxel[0] < maxVoxels[0] - 1; ++voxel[0]) { std::vector candidates; - if (GetCandidatesVoxelArray(voxel, bitmasks, candidates, 0)) + if (GetCandidatesVoxelArray(voxel, bitmasks, candidates, nullptr) != 0) { // find a box for corresponding non-empty voxel G4VoxelBox box; @@ -765,9 +762,9 @@ void G4Voxelizer::Voxelize(std::vector& facets) std::size_t size = facets.size(); if (size < 10) { - for (std::size_t i = 0; i < facets.size(); ++i) + for (const auto & facet : facets) { - if (facets[i]->GetNumberOfVertices() > 3) ++size; + if (facet->GetNumberOfVertices() > 3) ++size; } } @@ -789,7 +786,7 @@ void G4Voxelizer::Voxelize(std::vector& facets) G4cout << "Building bitmasks..." << G4endl; #endif - BuildBitmasks(fBoundaries, 0, true); + BuildBitmasks(fBoundaries, nullptr, true); if (maxVoxels < 0 && reductionRatio == G4ThreeVector()) { @@ -910,9 +907,9 @@ void G4Voxelizer::FindComponentsFastest(unsigned int mask, { for (G4int bit = 0; bit < 8; ++bit) { - if (maskByte & 1) + if ((maskByte & 1) != 0) { list.push_back(8*(sizeof(unsigned int)*i+ byte) + bit); } - if (!(maskByte >>= 1)) break; + if ((maskByte >>= 1) == 0) break; } } mask >>= 8; @@ -990,22 +987,22 @@ G4int G4Voxelizer::GetCandidatesVoxelArray(const G4ThreeVector &point, if (fBoundaries[0].size() > 2) { slice = BinarySearch(fBoundaries[0], point.x()); - if (!(mask = ((unsigned int*) fBitmasks[0].fAllBits)[slice])) + if ((mask = ((unsigned int*) fBitmasks[0].fAllBits)[slice]) == 0u) return 0; } if (fBoundaries[1].size() > 2) { slice = BinarySearch(fBoundaries[1], point.y()); - if (!(mask &= ((unsigned int*) fBitmasks[1].fAllBits)[slice])) + if ((mask &= ((unsigned int*) fBitmasks[1].fAllBits)[slice]) == 0u) return 0; } if (fBoundaries[2].size() > 2) { slice = BinarySearch(fBoundaries[2], point.z()); - if (!(mask &= ((unsigned int*) fBitmasks[2].fAllBits)[slice])) + if ((mask &= ((unsigned int*) fBitmasks[2].fAllBits)[slice]) == 0u) return 0; } - if (crossed && (!(mask &= ~((unsigned int*)crossed->fAllBits)[0]))) + if ((crossed != nullptr) && ((mask &= ~((unsigned int*)crossed->fAllBits)[0]) == 0u)) return 0; FindComponentsFastest(mask, list, 0); @@ -1019,18 +1016,18 @@ G4int G4Voxelizer::GetCandidatesVoxelArray(const G4ThreeVector &point, masks[i] = ((unsigned int*) fBitmasks[i].fAllBits) + slice * fNPerSlice; } - unsigned int* maskCrossed = crossed - ? (unsigned int*)crossed->fAllBits : 0; + unsigned int* maskCrossed = crossed != nullptr + ? (unsigned int*)crossed->fAllBits : nullptr; for (G4int i = 0 ; i < fNPerSlice; ++i) { // Logic "and" of the masks along the 3 axes x, y, z: // removing "if (!" and ") continue" => slightly slower // - if (!(mask = masks[0][i])) continue; - if (!(mask &= masks[1][i])) continue; - if (!(mask &= masks[2][i])) continue; - if (maskCrossed && !(mask &= ~maskCrossed[i])) continue; + if ((mask = masks[0][i]) == 0u) continue; + if ((mask &= masks[1][i]) == 0u) continue; + if ((mask &= masks[2][i]) == 0u) continue; + if ((maskCrossed != nullptr) && ((mask &= ~maskCrossed[i]) == 0u)) continue; FindComponentsFastest(mask, list, i); } @@ -1101,13 +1098,13 @@ G4Voxelizer::GetCandidatesVoxelArray(const std::vector& voxels, if (fNPerSlice == 1) { unsigned int mask; - if (!(mask = ((unsigned int *) bitmasks[0].fAllBits)[voxels[0]])) + if ((mask = ((unsigned int *) bitmasks[0].fAllBits)[voxels[0]]) == 0u) return 0; - if (!(mask &= ((unsigned int *) bitmasks[1].fAllBits)[voxels[1]])) + if ((mask &= ((unsigned int *) bitmasks[1].fAllBits)[voxels[1]]) == 0u) return 0; - if (!(mask &= ((unsigned int *) bitmasks[2].fAllBits)[voxels[2]])) + if ((mask &= ((unsigned int *) bitmasks[2].fAllBits)[voxels[2]]) == 0u) return 0; - if (crossed && (!(mask &= ~((unsigned int *)crossed->fAllBits)[0]))) + if ((crossed != nullptr) && ((mask &= ~((unsigned int *)crossed->fAllBits)[0]) == 0u)) return 0; FindComponentsFastest(mask, list, 0); @@ -1121,17 +1118,17 @@ G4Voxelizer::GetCandidatesVoxelArray(const std::vector& voxels, + voxels[i]*fNPerSlice; } unsigned int *maskCrossed = crossed != nullptr - ? (unsigned int *)crossed->fAllBits : 0; + ? (unsigned int *)crossed->fAllBits : nullptr; for (G4int i = 0 ; i < fNPerSlice; ++i) { // Logic "and" of the masks along the 3 axes x, y, z: // removing "if (!" and ") continue" => slightly slower // - if (!(mask = masks[0][i])) continue; - if (!(mask &= masks[1][i])) continue; - if (!(mask &= masks[2][i])) continue; - if (maskCrossed && !(mask &= ~maskCrossed[i])) continue; + if ((mask = masks[0][i]) == 0u) continue; + if ((mask &= masks[1][i]) == 0u) continue; + if ((mask &= masks[2][i]) == 0u) continue; + if ((maskCrossed != nullptr) && ((mask &= ~maskCrossed[i]) == 0u)) continue; FindComponentsFastest(mask, list, i); } @@ -1361,7 +1358,7 @@ G4int G4Voxelizer::AllocatedMemory() size += fBitmasks[0].GetNbytes() + fBitmasks[1].GetNbytes() + fBitmasks[2].GetNbytes(); - G4int csize = (G4int)fCandidates.size(); + auto csize = (G4int)fCandidates.size(); for (G4int i = 0; i < csize; ++i) { size += sizeof(vector) + fCandidates[i].capacity() * sizeof(G4int); diff --git a/source/geometry/volumes/GNUmakefile b/source/geometry/volumes/GNUmakefile deleted file mode 100644 index 48bb82c5531..00000000000 --- a/source/geometry/volumes/GNUmakefile +++ /dev/null @@ -1,33 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for geometry/volumes library. Gabriele Cosmo, 16/11/96. -# -------------------------------------------------------------------- - -name := G4volumes - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -ifdef G4LIB_BUILD_DLL - CPPFLAGS += -DG4LIB_BUILD_DLL -endif -CPPFLAGS += -DG4GEOM_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/graphics_reps/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/management/include - -ifdef G4DEBUG_NAVIGATION - CPPFLAGS += -DG4DEBUG_NAVIGATION -endif -ifdef G4DEBUG_FIELD - CPPFLAGS += -DG4DEBUG_FIELD -endif - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/geometry/volumes/History b/source/geometry/volumes/History index 5c7d7516a46..a0c02002dec 100644 --- a/source/geometry/volumes/History +++ b/source/geometry/volumes/History @@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-05-09 Gabriele Cosmo (geomvol-V11-01-00) +- Applied clang-tidy fixes (readability, modernization, performance, ...). + ## 2022-11-10 Gabriele Cosmo (geomvol-V11-00-02) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/geometry/volumes/include/G4AssemblyTriplet.icc b/source/geometry/volumes/include/G4AssemblyTriplet.icc index 77493f3a60e..d2d668f7aa2 100644 --- a/source/geometry/volumes/include/G4AssemblyTriplet.icc +++ b/source/geometry/volumes/include/G4AssemblyTriplet.icc @@ -66,8 +66,7 @@ G4AssemblyTriplet::G4AssemblyTriplet( const G4AssemblyTriplet& scopy ) inline G4AssemblyTriplet::~G4AssemblyTriplet() -{ -} += default; inline G4LogicalVolume* G4AssemblyTriplet::GetVolume() const diff --git a/source/geometry/volumes/include/G4AssemblyVolume.icc b/source/geometry/volumes/include/G4AssemblyVolume.icc index a7df2c77460..ef321ee5e82 100644 --- a/source/geometry/volumes/include/G4AssemblyVolume.icc +++ b/source/geometry/volumes/include/G4AssemblyVolume.icc @@ -66,7 +66,7 @@ void G4AssemblyVolume::SetAssemblyID( unsigned int value ) inline std::vector::iterator G4AssemblyVolume::GetVolumesIterator() { - std::vector::iterator iterator = fPVStore.begin(); + auto iterator = fPVStore.begin(); return iterator; } @@ -85,7 +85,7 @@ G4AssemblyVolume::GetImprintTransformation(unsigned int imprintID) inline std::vector::iterator G4AssemblyVolume::GetTripletsIterator() { - std::vector::iterator iterator = fTriplets.begin(); + auto iterator = fTriplets.begin(); return iterator; } diff --git a/source/geometry/volumes/include/G4GRSSolid.hh b/source/geometry/volumes/include/G4GRSSolid.hh index e4abdf4690b..3eb9a20dd06 100644 --- a/source/geometry/volumes/include/G4GRSSolid.hh +++ b/source/geometry/volumes/include/G4GRSSolid.hh @@ -53,15 +53,15 @@ class G4GRSSolid : public G4VTouchable G4GRSSolid(G4VSolid *pSolid, const G4RotationMatrix &rot, const G4ThreeVector &tlate); - ~G4GRSSolid(); + ~G4GRSSolid() override; G4GRSSolid(const G4GRSSolid&) = delete; G4GRSSolid& operator=(const G4GRSSolid&) = delete; // Copy constructor and assignment operator not allowed - inline G4VSolid* GetSolid(G4int depth=0) const; - inline const G4ThreeVector& GetTranslation(G4int depth=0) const; - inline const G4RotationMatrix* GetRotation(G4int depth=0) const; + inline G4VSolid* GetSolid(G4int depth=0) const override; + inline const G4ThreeVector& GetTranslation(G4int depth=0) const override; + inline const G4RotationMatrix* GetRotation(G4int depth=0) const override; private: diff --git a/source/geometry/volumes/include/G4GRSSolid.icc b/source/geometry/volumes/include/G4GRSSolid.icc index cf3e9849e69..ebe01ffcfd1 100644 --- a/source/geometry/volumes/include/G4GRSSolid.icc +++ b/source/geometry/volumes/include/G4GRSSolid.icc @@ -33,9 +33,7 @@ inline G4GRSSolid::G4GRSSolid( G4VSolid *pSolid, const G4RotationMatrix *pRot, const G4ThreeVector &tlate ) - : G4VTouchable(), - fsolid(pSolid), - ftlate(tlate) + : fsolid(pSolid), ftlate(tlate) { if (pRot != nullptr) { @@ -56,9 +54,7 @@ inline G4GRSSolid::G4GRSSolid( G4VSolid *pSolid, const G4RotationMatrix &rot, const G4ThreeVector &tlate ) - : G4VTouchable(), - fsolid(pSolid), - ftlate(tlate) + : fsolid(pSolid), ftlate(tlate) { frot = new G4RotationMatrix(rot); if ( frot == nullptr ) diff --git a/source/geometry/volumes/include/G4GRSVolume.hh b/source/geometry/volumes/include/G4GRSVolume.hh index 6c0ca820e0f..baeea670fb4 100644 --- a/source/geometry/volumes/include/G4GRSVolume.hh +++ b/source/geometry/volumes/include/G4GRSVolume.hh @@ -54,16 +54,16 @@ class G4GRSVolume : public G4VTouchable G4GRSVolume(G4VPhysicalVolume* pVol, const G4RotationMatrix& rot, const G4ThreeVector& tlate); - ~G4GRSVolume(); + ~G4GRSVolume() override; G4GRSVolume(const G4GRSVolume&) = delete; G4GRSVolume& operator=(const G4GRSVolume&) = delete; // Copy constructor and assignment operator not allowed - inline G4VPhysicalVolume* GetVolume(G4int depth=0) const; - inline G4VSolid* GetSolid(G4int depth=0) const; - inline const G4ThreeVector& GetTranslation(G4int depth=0) const; - inline const G4RotationMatrix* GetRotation(G4int depth=0) const; + inline G4VPhysicalVolume* GetVolume(G4int depth=0) const override; + inline G4VSolid* GetSolid(G4int depth=0) const override; + inline const G4ThreeVector& GetTranslation(G4int depth=0) const override; + inline const G4RotationMatrix* GetRotation(G4int depth=0) const override; private: diff --git a/source/geometry/volumes/include/G4GRSVolume.icc b/source/geometry/volumes/include/G4GRSVolume.icc index bfcde6eabce..81cf282e7f0 100644 --- a/source/geometry/volumes/include/G4GRSVolume.icc +++ b/source/geometry/volumes/include/G4GRSVolume.icc @@ -33,7 +33,7 @@ inline G4GRSVolume::G4GRSVolume( G4VPhysicalVolume* pVol, const G4RotationMatrix* pRot, const G4ThreeVector& tlate ) - : G4VTouchable(), fvol(pVol), ftlate(tlate) + : fvol(pVol), ftlate(tlate) { if ( pRot != nullptr ) { @@ -54,7 +54,7 @@ inline G4GRSVolume::G4GRSVolume( G4VPhysicalVolume* pVol, const G4RotationMatrix& rot, const G4ThreeVector& tlate ) - : G4VTouchable(), fvol(pVol), ftlate(tlate) + : fvol(pVol), ftlate(tlate) { frot = new G4RotationMatrix(rot); if ( frot == nullptr ) diff --git a/source/geometry/volumes/include/G4GeometryWorkspace.hh b/source/geometry/volumes/include/G4GeometryWorkspace.hh index 4622896e747..36917e24f3a 100644 --- a/source/geometry/volumes/include/G4GeometryWorkspace.hh +++ b/source/geometry/volumes/include/G4GeometryWorkspace.hh @@ -60,7 +60,7 @@ class G4GeometryWorkspace using pool_type = G4TWorkspacePool; G4GeometryWorkspace(); - ~G4GeometryWorkspace(); + ~G4GeometryWorkspace() = default; void UseWorkspace(); // Take ownership void ReleaseWorkspace(); // Release ownership diff --git a/source/geometry/volumes/include/G4LogicalBorderSurface.hh b/source/geometry/volumes/include/G4LogicalBorderSurface.hh index 4cea8c1077b..8f2d81a67b9 100644 --- a/source/geometry/volumes/include/G4LogicalBorderSurface.hh +++ b/source/geometry/volumes/include/G4LogicalBorderSurface.hh @@ -56,7 +56,7 @@ class G4LogicalBorderSurface : public G4LogicalSurface G4VPhysicalVolume* vol1, G4VPhysicalVolume* vol2, G4SurfaceProperty* surfaceProperty ); - ~G4LogicalBorderSurface(); + ~G4LogicalBorderSurface() override; // Constructor and destructor G4LogicalBorderSurface(const G4LogicalBorderSurface&) = delete; diff --git a/source/geometry/volumes/include/G4LogicalSkinSurface.hh b/source/geometry/volumes/include/G4LogicalSkinSurface.hh index d863ef9fa2f..fb817504f67 100644 --- a/source/geometry/volumes/include/G4LogicalSkinSurface.hh +++ b/source/geometry/volumes/include/G4LogicalSkinSurface.hh @@ -52,7 +52,7 @@ class G4LogicalSkinSurface : public G4LogicalSurface G4LogicalSkinSurface( const G4String& name, G4LogicalVolume* vol, G4SurfaceProperty* surfaceProperty ); - ~G4LogicalSkinSurface(); + ~G4LogicalSkinSurface() override; // Constructor and destructor. G4LogicalSkinSurface(const G4LogicalSkinSurface&) = delete; diff --git a/source/geometry/volumes/include/G4NavigationHistory.hh b/source/geometry/volumes/include/G4NavigationHistory.hh index 22f4056e0df..e87f300ef57 100644 --- a/source/geometry/volumes/include/G4NavigationHistory.hh +++ b/source/geometry/volumes/include/G4NavigationHistory.hh @@ -144,7 +144,7 @@ class G4NavigationHistory std::vector* fNavHistory; // Pointer to the vector of navigation levels. - std::size_t fStackDepth; + std::size_t fStackDepth{0}; // Depth of stack: effectively depth in geometrical tree. }; diff --git a/source/geometry/volumes/include/G4NavigationHistory.icc b/source/geometry/volumes/include/G4NavigationHistory.icc index fd6ad272186..58a026c921a 100644 --- a/source/geometry/volumes/include/G4NavigationHistory.icc +++ b/source/geometry/volumes/include/G4NavigationHistory.icc @@ -62,7 +62,7 @@ G4NavigationHistory::operator=(const G4NavigationHistory &h) fNavHistory->resize( h.GetMaxDepth() ); } - for ( G4int ilev=G4int(h.fStackDepth); ilev>=0; --ilev ) + for ( auto ilev=G4int(h.fStackDepth); ilev>=0; --ilev ) { (*fNavHistory)[ilev] = (*h.fNavHistory)[ilev]; } @@ -81,10 +81,10 @@ inline void G4NavigationHistory::Clear() { G4AffineTransform origin(G4ThreeVector(0.,0.,0.)); - G4NavigationLevel tmpNavLevel = G4NavigationLevel(0, origin, kNormal, -1) ; + G4NavigationLevel tmpNavLevel = G4NavigationLevel(nullptr, origin, kNormal, -1) ; Reset(); - for (G4long ilev=G4long(fNavHistory->size()-1); ilev>=0; --ilev) + for (auto ilev=G4long(fNavHistory->size()-1); ilev>=0; --ilev) { (*fNavHistory)[ilev] = tmpNavLevel; } diff --git a/source/geometry/volumes/include/G4NavigationHistoryPool.hh b/source/geometry/volumes/include/G4NavigationHistoryPool.hh index f2d756c393c..0b351a5adcf 100644 --- a/source/geometry/volumes/include/G4NavigationHistoryPool.hh +++ b/source/geometry/volumes/include/G4NavigationHistoryPool.hh @@ -111,8 +111,7 @@ DeRegister(std::vector * pLevels) // inline std::vector * G4NavigationHistoryPool::GetNewLevels() { - std::vector * aLevelVec = - new std::vector(kHistoryMax); + auto aLevelVec = new std::vector(kHistoryMax); Register(aLevelVec); return aLevelVec; @@ -125,9 +124,9 @@ inline std::vector * G4NavigationHistoryPool::GetNewLevels() // inline std::vector * G4NavigationHistoryPool::GetLevels() { - std::vector * levels = 0; + std::vector * levels = nullptr; - if (fFree.size() !=0) + if (!fFree.empty()) { levels = fFree.back(); fFree.pop_back(); diff --git a/source/geometry/volumes/include/G4NavigationLevelRep.icc b/source/geometry/volumes/include/G4NavigationLevelRep.icc index e3f75783cc3..9465372abb8 100644 --- a/source/geometry/volumes/include/G4NavigationLevelRep.icc +++ b/source/geometry/volumes/include/G4NavigationLevelRep.icc @@ -47,8 +47,7 @@ G4NavigationLevelRep::G4NavigationLevelRep( G4VPhysicalVolume* pPhysVol, inline G4NavigationLevelRep::G4NavigationLevelRep() - : sTransform(), - sVolumeType(kReplica) + : sVolumeType(kReplica) { } diff --git a/source/geometry/volumes/include/G4PVParameterised.hh b/source/geometry/volumes/include/G4PVParameterised.hh index f690522d9f0..73059a91499 100644 --- a/source/geometry/volumes/include/G4PVParameterised.hh +++ b/source/geometry/volumes/include/G4PVParameterised.hh @@ -74,29 +74,29 @@ class G4PVParameterised : public G4PVReplica public: // with description - virtual ~G4PVParameterised(); + ~G4PVParameterised() override; // Virtual empty destructor. - G4bool IsParameterised() const; + G4bool IsParameterised() const override; // Returns true to identify it is a parameterised physical volume. EVolume VolumeType() const final; - G4VPVParameterisation* GetParameterisation() const; + G4VPVParameterisation* GetParameterisation() const override; // Returns the current pointer to the parameterisation. void GetReplicationData(EAxis& axis, G4int& nReplicas, G4double& width, G4double& offset, - G4bool& consuming) const; + G4bool& consuming) const override; // Fills arguments with the attributes from the base replica. - virtual void SetRegularStructureId( G4int code ); + void SetRegularStructureId( G4int code ) override; // Method sets code and can prepare for special type of regular volumes. G4bool CheckOverlaps(G4int res = 1000, G4double tol = 0., - G4bool verbose = true, G4int maxErr = 1); + G4bool verbose = true, G4int maxErr = 1) override; // Verifies if each instance of the parameterised volume is overlapping // with other instances or with the mother volume. Provides default // resolution for the number of points to be generated and verified. diff --git a/source/geometry/volumes/include/G4PVPlacement.hh b/source/geometry/volumes/include/G4PVPlacement.hh index d783e326bec..3bb5e2dd4b4 100644 --- a/source/geometry/volumes/include/G4PVPlacement.hh +++ b/source/geometry/volumes/include/G4PVPlacement.hh @@ -111,16 +111,16 @@ class G4PVPlacement : public G4VPhysicalVolume public: // with description - virtual ~G4PVPlacement(); + ~G4PVPlacement() override; // Default destructor. - inline G4int GetCopyNo() const { return fcopyNo; } + inline G4int GetCopyNo() const override { return fcopyNo; } - void SetCopyNo(G4int CopyNo); + void SetCopyNo(G4int CopyNo) override; // Gets and sets the copy number of the volume. G4bool CheckOverlaps(G4int res = 1000, G4double tol = 0., - G4bool verbose = true, G4int maxErr = 1); + G4bool verbose = true, G4int maxErr = 1) override; // Verifies if the placed volume is overlapping with existing // daughters or with the mother volume. Provides default resolution // for the number of points to be generated and verified. @@ -140,19 +140,19 @@ class G4PVPlacement : public G4VPhysicalVolume G4PVPlacement& operator=(const G4PVPlacement&) = delete; // Copy constructor and assignment operator not allowed. - G4bool IsMany() const; - G4bool IsReplicated() const; - G4bool IsParameterised() const; - G4VPVParameterisation* GetParameterisation() const; + G4bool IsMany() const override; + G4bool IsReplicated() const override; + G4bool IsParameterised() const override; + G4VPVParameterisation* GetParameterisation() const override; void GetReplicationData(EAxis& axis, G4int& nReplicas, G4double& width, G4double& offset, - G4bool& consuming) const; - G4bool IsRegularStructure() const; - G4int GetRegularStructureId() const; + G4bool& consuming) const override; + G4bool IsRegularStructure() const override; + G4int GetRegularStructureId() const override; - EVolume VolumeType() const; + EVolume VolumeType() const override; private: diff --git a/source/geometry/volumes/include/G4PVReplica.hh b/source/geometry/volumes/include/G4PVReplica.hh index e5e306fbff7..1ae5e51f504 100644 --- a/source/geometry/volumes/include/G4PVReplica.hh +++ b/source/geometry/volumes/include/G4PVReplica.hh @@ -116,23 +116,23 @@ class G4PVReplica : public G4VPhysicalVolume G4PVReplica& operator=(const G4PVReplica&) = delete; // Copy constructor and assignment operator not allowed - virtual ~G4PVReplica(); + ~G4PVReplica() override; - virtual EVolume VolumeType() const; + EVolume VolumeType() const override; - G4bool IsMany() const; - G4bool IsReplicated() const; + G4bool IsMany() const override; + G4bool IsReplicated() const override; - virtual G4int GetCopyNo() const; - virtual void SetCopyNo(G4int CopyNo); - virtual G4bool IsParameterised() const; - virtual G4VPVParameterisation* GetParameterisation() const; - virtual G4int GetMultiplicity() const; - virtual void GetReplicationData(EAxis& axis, + G4int GetCopyNo() const override; + void SetCopyNo(G4int CopyNo) override; + G4bool IsParameterised() const override; + G4VPVParameterisation* GetParameterisation() const override; + G4int GetMultiplicity() const override; + void GetReplicationData(EAxis& axis, G4int& nReplicas, G4double& width, G4double& offset, - G4bool& consuming) const; + G4bool& consuming) const override; virtual void SetRegularStructureId( G4int code ); // This method must set a unique code for each type of regular structure. @@ -140,8 +140,8 @@ class G4PVReplica : public G4VPhysicalVolume // - It can also be used to prepare any corresponding special // navigation 'conditions'. - G4bool IsRegularStructure() const; - G4int GetRegularStructureId() const; + G4bool IsRegularStructure() const override; + G4int GetRegularStructureId() const override; // Accessors for specialised geometries // Methods for handling of MT instances diff --git a/source/geometry/volumes/include/G4TouchableHistory.hh b/source/geometry/volumes/include/G4TouchableHistory.hh index cbc9e55b4ba..5bcb48a6a0e 100644 --- a/source/geometry/volumes/include/G4TouchableHistory.hh +++ b/source/geometry/volumes/include/G4TouchableHistory.hh @@ -58,26 +58,26 @@ class G4TouchableHistory : public G4VTouchable G4TouchableHistory( const G4NavigationHistory& history ); // Copy constructor - ~G4TouchableHistory(); + ~G4TouchableHistory() override; // Destructor - inline G4VPhysicalVolume* GetVolume( G4int depth = 0 ) const; - inline G4VSolid* GetSolid( G4int depth = 0 ) const; - const G4ThreeVector& GetTranslation( G4int depth = 0 ) const; - const G4RotationMatrix* GetRotation( G4int depth = 0 ) const; + inline G4VPhysicalVolume* GetVolume( G4int depth = 0 ) const override; + inline G4VSolid* GetSolid( G4int depth = 0 ) const override; + const G4ThreeVector& GetTranslation( G4int depth = 0 ) const override; + const G4RotationMatrix* GetRotation( G4int depth = 0 ) const override; - inline G4int GetReplicaNumber( G4int depth = 0 ) const; - inline G4int GetHistoryDepth() const; - G4int MoveUpHistory( G4int num_levels = 1 ); + inline G4int GetReplicaNumber( G4int depth = 0 ) const override; + inline G4int GetHistoryDepth() const override; + G4int MoveUpHistory( G4int num_levels = 1 ) override; // Access methods for touchables with history void UpdateYourself( G4VPhysicalVolume* pPhysVol, - const G4NavigationHistory* history = nullptr ); + const G4NavigationHistory* history = nullptr ) override; // Update methods for touchables with history public: // without description - inline const G4NavigationHistory* GetHistory() const; + inline const G4NavigationHistory* GetHistory() const override; // Should this method be "deprecated" ? // it is used now in G4Navigator::LocateGlobalPointAndSetup diff --git a/source/geometry/volumes/include/G4TouchableHistory.icc b/source/geometry/volumes/include/G4TouchableHistory.icc index 764fbd2056c..8e89eb77595 100644 --- a/source/geometry/volumes/include/G4TouchableHistory.icc +++ b/source/geometry/volumes/include/G4TouchableHistory.icc @@ -82,7 +82,7 @@ G4int G4TouchableHistory::GetHistoryDepth() const inline G4int G4TouchableHistory::MoveUpHistory( G4int num_levels ) { - G4int maxLevelsMove = G4int(fhistory.GetDepth()); + auto maxLevelsMove = G4int(fhistory.GetDepth()); G4int minLevelsMove = 0; // Cannot redescend today! // Soon it will be possible // by adding a data member here diff --git a/source/geometry/volumes/include/G4VExternalPhysicalVolume.hh b/source/geometry/volumes/include/G4VExternalPhysicalVolume.hh index 68a575cd74a..9354cbd2577 100644 --- a/source/geometry/volumes/include/G4VExternalPhysicalVolume.hh +++ b/source/geometry/volumes/include/G4VExternalPhysicalVolume.hh @@ -56,11 +56,11 @@ class G4VExternalPhysicalVolume : public G4VPhysicalVolume G4VExternalPhysicalVolume& operator=(const G4VExternalPhysicalVolume&) = delete; // Forbidden copy constructor and assignment operator. - virtual ~G4VExternalPhysicalVolume(); + ~G4VExternalPhysicalVolume() override; // Default destructor. - virtual G4bool CheckOverlaps(G4int res=1000, G4double tol=0., - G4bool verbose=true, G4int maxErr=1) = 0; + G4bool CheckOverlaps(G4int res=1000, G4double tol=0., + G4bool verbose=true, G4int maxErr=1) override = 0; // Verifies if the placed volume is overlapping with existing // daughters or with the mother volume. Provides default resolution // for the number of points to be generated and verified. diff --git a/source/geometry/volumes/src/G4AssemblyStore.cc b/source/geometry/volumes/src/G4AssemblyStore.cc index c619b23ba90..695ca06fc08 100644 --- a/source/geometry/volumes/src/G4AssemblyStore.cc +++ b/source/geometry/volumes/src/G4AssemblyStore.cc @@ -51,7 +51,6 @@ G4ThreadLocal G4bool G4AssemblyStore::locked = false; // *************************************************************************** // G4AssemblyStore::G4AssemblyStore() - : std::vector() { reserve(20); } @@ -87,10 +86,10 @@ void G4AssemblyStore::Clean() G4AssemblyStore* store = GetInstance(); - for(auto pos=store->cbegin(); pos!=store->cend(); ++pos) + for(const auto & pos : *store) { if (fgNotifier != nullptr) { fgNotifier->NotifyDeRegistration(); } - if (*pos) { delete *pos; } + if (pos != nullptr) { delete pos; } } locked = false; @@ -158,9 +157,9 @@ G4AssemblyStore* G4AssemblyStore::GetInstance() G4AssemblyVolume* G4AssemblyStore::GetAssembly(unsigned int id, G4bool verbose) const { - for (auto i=GetInstance()->cbegin(); i!=GetInstance()->cend(); ++i) + for (const auto & i : *GetInstance()) { - if ((*i)->GetAssemblyID() == id) { return *i; } + if (i->GetAssemblyID() == id) { return i; } } if (verbose) { @@ -171,5 +170,5 @@ G4AssemblyStore::GetAssembly(unsigned int id, G4bool verbose) const G4Exception("G4AssemblyStore::GetAssembly()", "GeomVol1001", JustWarning, message); } - return 0; + return nullptr; } diff --git a/source/geometry/volumes/src/G4AssemblyVolume.cc b/source/geometry/volumes/src/G4AssemblyVolume.cc index 3d5dbf58ad8..871ebbcaa31 100644 --- a/source/geometry/volumes/src/G4AssemblyVolume.cc +++ b/source/geometry/volumes/src/G4AssemblyVolume.cc @@ -48,7 +48,7 @@ G4AssemblyVolume::G4AssemblyVolume() SetAssemblyID( GetInstanceCount() ); SetImprintsCount( 0 ); G4AssemblyStore* aStore = G4AssemblyStore::GetInstance(); - if (aStore->GetAssembly(fAssemblyID,false)) + if (aStore->GetAssembly(fAssemblyID,false) != nullptr) { std::ostringstream message; message << "The assembly has NOT been registered !" << G4endl @@ -74,7 +74,7 @@ G4AssemblyVolume::G4AssemblyVolume( G4LogicalVolume* volume, SetImprintsCount( 0 ); AddPlacedVolume(volume, translation, rotation); G4AssemblyStore* aStore = G4AssemblyStore::GetInstance(); - if (aStore->GetAssembly(fAssemblyID,false)) + if (aStore->GetAssembly(fAssemblyID,false) != nullptr) { std::ostringstream message; message << "The assembly has NOT been registered !" << G4endl @@ -99,10 +99,7 @@ G4AssemblyVolume::~G4AssemblyVolume() for( std::size_t i = 0; i < howmany; ++i ) { G4RotationMatrix* pRotToClean = fTriplets[i].GetRotation(); - if( pRotToClean != 0 ) - { - delete pRotToClean; - } + delete pRotToClean; } } fTriplets.clear(); @@ -129,7 +126,7 @@ void G4AssemblyVolume::AddPlacedVolume( G4LogicalVolume* pVolume, G4ThreeVector& translation, G4RotationMatrix* pRotation ) { - G4RotationMatrix* toStore = new G4RotationMatrix; + auto toStore = new G4RotationMatrix; if( pRotation != nullptr ) { *toStore = *pRotation; } @@ -148,9 +145,9 @@ void G4AssemblyVolume::AddPlacedVolume( G4LogicalVolume* pVolume, G4Translate3D translation; transformation.getDecomposition(scale, rotation, translation); - G4ThreeVector v = translation.getTranslation(); - G4RotationMatrix* r = new G4RotationMatrix; - *r = rotation.getRotation(); + G4ThreeVector v = translation.getTranslation(); + auto r = new G4RotationMatrix; + *r = rotation.getRotation(); G4bool isReflection = false; if (scale(0,0)*scale(1,1)*scale(2,2) < 0.) { isReflection = true; } @@ -166,7 +163,7 @@ void G4AssemblyVolume::AddPlacedAssembly( G4AssemblyVolume* pAssembly, G4ThreeVector& translation, G4RotationMatrix* pRotation ) { - G4RotationMatrix* toStore = new G4RotationMatrix; + auto toStore = new G4RotationMatrix; if( pRotation != nullptr ) { *toStore = *pRotation; } @@ -188,8 +185,8 @@ void G4AssemblyVolume::AddPlacedAssembly( G4AssemblyVolume* pAssembly, transformation.getDecomposition(scale, rotation, translation); G4ThreeVector v = translation.getTranslation(); - G4RotationMatrix* r = new G4RotationMatrix; - *r = rotation.getRotation(); + auto r = new G4RotationMatrix; + *r = rotation.getRotation(); G4bool isReflection = false; if (scale(0,0)*scale(1,1)*scale(2,2) < 0.) { isReflection = true; } @@ -272,7 +269,7 @@ void G4AssemblyVolume::MakeImprint( G4AssemblyVolume* pAssembly, G4Transform3D Tfinal = transformation * Ta; - if ( triplets[i].GetVolume() ) + if ( triplets[i].GetVolume() != nullptr ) { // Generate the unique name for the next PV instance // The name has format: @@ -311,13 +308,13 @@ void G4AssemblyVolume::MakeImprint( G4AssemblyVolume* pAssembly, // Register the physical volume created by us so we can delete it later // fPVStore.push_back( pvPlaced.first ); - if ( pvPlaced.second ) { fPVStore.push_back( pvPlaced.second ); } + if ( pvPlaced.second != nullptr ) { fPVStore.push_back( pvPlaced.second ); } // Here I want to save the imprint transformation to some container, so I can retrieve the original values later // imprintTrans[GetImprintsCount()] = transformation; } - else if ( triplets[i].GetAssembly() ) + else if ( triplets[i].GetAssembly() != nullptr ) { // Place volumes in this assembly with composed transformation // diff --git a/source/geometry/volumes/src/G4GeometryWorkspace.cc b/source/geometry/volumes/src/G4GeometryWorkspace.cc index a306e2cd70a..cdd2c8408d1 100644 --- a/source/geometry/volumes/src/G4GeometryWorkspace.cc +++ b/source/geometry/volumes/src/G4GeometryWorkspace.cc @@ -72,12 +72,6 @@ G4GeometryWorkspace::G4GeometryWorkspace() fRegionOffset = fpRegionSIM->GetOffset(); } -// ---------------------------------------------------------------------- -// -G4GeometryWorkspace::~G4GeometryWorkspace() -{ -} - // ---------------------------------------------------------------------- // void @@ -114,15 +108,14 @@ void G4GeometryWorkspace::ReleaseWorkspace() void G4GeometryWorkspace::InitialisePhysicalVolumes() { G4PhysicalVolumeStore* physVolStore = G4PhysicalVolumeStore::GetInstance(); - for (std::size_t ip=0; ipsize(); ++ip) + for (auto physVol : *physVolStore) { - G4VPhysicalVolume* physVol = (*physVolStore)[ip]; G4LogicalVolume *logicalVol = physVol->GetLogicalVolume(); // Use shadow pointer // G4VSolid* solid = logicalVol->GetMasterSolid(); - G4PVReplica* g4PVReplica = dynamic_cast(physVol); + auto g4PVReplica = dynamic_cast(physVol); if (g4PVReplica == nullptr) { // Placement volume @@ -196,11 +189,10 @@ void G4GeometryWorkspace::InitialiseWorkspace() void G4GeometryWorkspace::DestroyWorkspace() { G4PhysicalVolumeStore* physVolStore = G4PhysicalVolumeStore::GetInstance(); - for (std::size_t ip=0; ipsize(); ++ip) + for (auto physVol : *physVolStore) { - G4VPhysicalVolume* physVol = (*physVolStore)[ip]; G4LogicalVolume* logicalVol = physVol->GetLogicalVolume(); - G4PVReplica* g4PVReplica = dynamic_cast(physVol); + auto g4PVReplica = dynamic_cast(physVol); if (g4PVReplica != nullptr) { g4PVReplica->TerminateWorker(g4PVReplica); diff --git a/source/geometry/volumes/src/G4LogicalBorderSurface.cc b/source/geometry/volumes/src/G4LogicalBorderSurface.cc index 63299096b01..64e3705f9b4 100644 --- a/source/geometry/volumes/src/G4LogicalBorderSurface.cc +++ b/source/geometry/volumes/src/G4LogicalBorderSurface.cc @@ -38,7 +38,7 @@ G4LogicalBorderSurfaceTable* G4LogicalBorderSurface::theBorderSurfaceTable = nullptr; // -// Constructor & destructor +// Constructor // G4LogicalBorderSurface:: @@ -60,9 +60,11 @@ G4LogicalBorderSurface(const G4String& name, theBorderSurfaceTable->insert(std::make_pair(std::make_pair(vol1,vol2),this)); } -G4LogicalBorderSurface::~G4LogicalBorderSurface() -{ -} +// +// Default destructor +// + +G4LogicalBorderSurface::~G4LogicalBorderSurface() = default; // // Operators @@ -123,10 +125,9 @@ void G4LogicalBorderSurface::DumpInfo() if (theBorderSurfaceTable != nullptr) { - for(auto pos = theBorderSurfaceTable->cbegin(); - pos != theBorderSurfaceTable->cend(); ++pos) + for(const auto & pos : *theBorderSurfaceTable) { - G4LogicalBorderSurface* pSurf = pos->second; + G4LogicalBorderSurface* pSurf = pos.second; G4cout << pSurf->GetName() << " : " << G4endl << " Border of volumes " << pSurf->GetVolume1()->GetName() << " and " @@ -140,10 +141,9 @@ void G4LogicalBorderSurface::CleanSurfaceTable() { if (theBorderSurfaceTable != nullptr) { - for(auto pos = theBorderSurfaceTable->cbegin(); - pos != theBorderSurfaceTable->cend(); ++pos) + for(const auto & pos : *theBorderSurfaceTable) { - if (pos->second) { delete pos->second; } + delete pos.second; } theBorderSurfaceTable->clear(); } diff --git a/source/geometry/volumes/src/G4LogicalSkinSurface.cc b/source/geometry/volumes/src/G4LogicalSkinSurface.cc index 7d51dd7c601..0bc6c0c29b6 100644 --- a/source/geometry/volumes/src/G4LogicalSkinSurface.cc +++ b/source/geometry/volumes/src/G4LogicalSkinSurface.cc @@ -37,7 +37,7 @@ G4LogicalSkinSurfaceTable *G4LogicalSkinSurface::theSkinSurfaceTable = nullptr; // -// Constructors & destructor +// Constructor // G4LogicalSkinSurface::G4LogicalSkinSurface(const G4String& name, @@ -55,9 +55,11 @@ G4LogicalSkinSurface::G4LogicalSkinSurface(const G4String& name, theSkinSurfaceTable->push_back(this); } -G4LogicalSkinSurface::~G4LogicalSkinSurface() -{ -} +// +// Default destructor +// + +G4LogicalSkinSurface::~G4LogicalSkinSurface() = default; // // Operators @@ -102,10 +104,9 @@ G4LogicalSkinSurface::GetSurface(const G4LogicalVolume* vol) { if (theSkinSurfaceTable != nullptr) { - for(auto pos = theSkinSurfaceTable->cbegin(); - pos != theSkinSurfaceTable->cend(); ++pos) + for(auto pos : *theSkinSurfaceTable) { - if ((*pos)->GetLogicalVolume() == vol) { return *pos; } + if (pos->GetLogicalVolume() == vol) { return pos; } } } return nullptr; @@ -120,12 +121,11 @@ void G4LogicalSkinSurface::DumpInfo() if (theSkinSurfaceTable != nullptr) { - for(auto pos = theSkinSurfaceTable->cbegin(); - pos != theSkinSurfaceTable->cend(); ++pos) + for(auto pos : *theSkinSurfaceTable) { - G4cout << (*pos)->GetName() << " : " << G4endl + G4cout << pos->GetName() << " : " << G4endl << " Skin of logical volume " - << (*pos)->GetLogicalVolume()->GetName() + << pos->GetLogicalVolume()->GetName() << G4endl; } } @@ -134,12 +134,11 @@ void G4LogicalSkinSurface::DumpInfo() void G4LogicalSkinSurface::CleanSurfaceTable() { - if (theSkinSurfaceTable) + if (theSkinSurfaceTable != nullptr) { - for(auto pos = theSkinSurfaceTable->cbegin(); - pos != theSkinSurfaceTable->cend(); ++pos) + for(auto pos : *theSkinSurfaceTable) { - if (*pos) { delete *pos; } + if (pos != nullptr) { delete pos; } } theSkinSurfaceTable->clear(); } diff --git a/source/geometry/volumes/src/G4NavigationHistory.cc b/source/geometry/volumes/src/G4NavigationHistory.cc index a046c6626ca..2ebe38dff0e 100644 --- a/source/geometry/volumes/src/G4NavigationHistory.cc +++ b/source/geometry/volumes/src/G4NavigationHistory.cc @@ -39,7 +39,6 @@ G4Allocator*& aNavigHistoryAllocator() } G4NavigationHistory::G4NavigationHistory() - : fStackDepth(0) { fNavHistory = G4NavigationHistoryPool::GetInstance()->GetLevels(); Clear(); @@ -53,7 +52,7 @@ G4NavigationHistory::G4NavigationHistory(const G4NavigationHistory &h) fNavHistory->resize( h.GetMaxDepth() ); } - for ( G4long ilev=G4long(h.fStackDepth); ilev>=0; --ilev ) + for ( auto ilev=G4long(h.fStackDepth); ilev>=0; --ilev ) { (*fNavHistory)[ilev] = (*h.fNavHistory)[ilev]; } diff --git a/source/geometry/volumes/src/G4NavigationHistoryPool.cc b/source/geometry/volumes/src/G4NavigationHistoryPool.cc index 2490046e2b5..a6efe1707f0 100644 --- a/source/geometry/volumes/src/G4NavigationHistoryPool.cc +++ b/source/geometry/volumes/src/G4NavigationHistoryPool.cc @@ -65,9 +65,9 @@ G4NavigationHistoryPool::~G4NavigationHistoryPool() // void G4NavigationHistoryPool::Clean() { - for(size_t i=0; iGetLogicalVolume() : nullptr ), + pMotherPhysical != nullptr ? pMotherPhysical->GetLogicalVolume() : nullptr ), fparam(pParam) { - G4LogicalVolume* motherLogical= pMotherPhysical ? + G4LogicalVolume* motherLogical= pMotherPhysical != nullptr ? pMotherPhysical->GetLogicalVolume() : nullptr; SetMotherLogical( motherLogical ); - if( motherLogical ) + if( motherLogical != nullptr ) { // Registration moved here to ensure that the volume is recognised as Parameterised motherLogical->AddDaughter(this); @@ -92,7 +92,7 @@ G4PVParameterised::G4PVParameterised( const G4String& pName, fparam(pParam) { SetMotherLogical( pMotherLogical ); - if( pMotherLogical ) + if( pMotherLogical != nullptr ) { // Registration moved here to ensure that the volume is recognised as Parameterised pMotherLogical->AddDaughter(this); @@ -112,9 +112,7 @@ G4PVParameterised::G4PVParameterised( __void__& a ) // ---------------------------------------------------------------------- // Destructor // -G4PVParameterised::~G4PVParameterised() -{ -} +G4PVParameterised::~G4PVParameterised() = default; // ---------------------------------------------------------------------- // GetParameterisation @@ -251,11 +249,11 @@ G4PVParameterised::CheckOverlaps(G4int res, G4double tol, // G4AffineTransform Td( GetRotation(), GetTranslation() ); - for (auto pos=points.cbegin(); pos!=points.cend(); ++pos) + for (const auto & point : points) { // Transform each point according to daughter's frame // - G4ThreeVector md = Td.InverseTransformPoint(*pos); + G4ThreeVector md = Td.InverseTransformPoint(point); if (solidB->Inside(md)==kInside) { diff --git a/source/geometry/volumes/src/G4PVPlacement.cc b/source/geometry/volumes/src/G4PVPlacement.cc index eb969b0bbba..a6de4c3bc56 100644 --- a/source/geometry/volumes/src/G4PVPlacement.cc +++ b/source/geometry/volumes/src/G4PVPlacement.cc @@ -47,7 +47,7 @@ G4PVPlacement::G4PVPlacement( G4RotationMatrix* pRot, : G4VPhysicalVolume(pRot, tlate, pName, pLogical, pMother), fmany(pMany), fcopyNo(pCopyNo) { - if (pMother) + if (pMother != nullptr) { G4LogicalVolume* motherLogical = pMother->GetLogicalVolume(); if (pLogical == motherLogical) @@ -75,8 +75,8 @@ G4PVPlacement::G4PVPlacement( const G4Transform3D& Transform3D, Transform3D.getTranslation(), pName, pLogical, pMother), fmany(pMany), fcopyNo(pCopyNo) { - fallocatedRotM = (GetRotation() != 0); - if (pMother) + fallocatedRotM = (GetRotation() != nullptr); + if (pMother != nullptr) { G4LogicalVolume* motherLogical = pMother->GetLogicalVolume(); if (pLogical == motherLogical) @@ -110,8 +110,8 @@ G4PVPlacement::G4PVPlacement( G4RotationMatrix* pRot, FatalException, "Cannot place a volume inside itself!"); } SetMotherLogical(pMotherLogical); - if (pMotherLogical) { pMotherLogical->AddDaughter(this); } - if ((pSurfChk) && (pMotherLogical)) { CheckOverlaps(); } + if (pMotherLogical != nullptr) { pMotherLogical->AddDaughter(this); } + if ((pSurfChk) && ((pMotherLogical) != nullptr)) { CheckOverlaps(); } } @@ -137,8 +137,8 @@ G4PVPlacement::G4PVPlacement( const G4Transform3D& Transform3D, SetRotation( NewPtrRotMatrix(Transform3D.getRotation().inverse()) ); fallocatedRotM = (GetRotation() != nullptr); SetMotherLogical(pMotherLogical); - if (pMotherLogical) { pMotherLogical->AddDaughter(this); } - if ((pSurfChk) && (pMotherLogical)) { CheckOverlaps(); } + if (pMotherLogical != nullptr) { pMotherLogical->AddDaughter(this); } + if ((pSurfChk) && ((pMotherLogical) != nullptr)) { CheckOverlaps(); } } // ---------------------------------------------------------------------- @@ -420,9 +420,9 @@ G4bool G4PVPlacement::CheckOverlaps(G4int res, G4double tol, }; G4double dxmin = kInfinity, dymin = kInfinity, dzmin = kInfinity; G4double dxmax = -kInfinity, dymax = -kInfinity, dzmax = -kInfinity; - for (G4int i = 0; i < 8; ++i) + for (const auto & i : pbox) { - G4ThreeVector p = Td.TransformPoint(pbox[i]); + G4ThreeVector p = Td.TransformPoint(i); dxmin = std::min(dxmin, p.x()); dymin = std::min(dymin, p.y()); dzmin = std::min(dzmin, p.z()); diff --git a/source/geometry/volumes/src/G4PVReplica.cc b/source/geometry/volumes/src/G4PVReplica.cc index 30da6d95973..dad6dfbe81e 100644 --- a/source/geometry/volumes/src/G4PVReplica.cc +++ b/source/geometry/volumes/src/G4PVReplica.cc @@ -253,9 +253,7 @@ G4PVReplica::G4PVReplica( __void__& a ) } // ---------------------------------------------------------------------- -G4PVReplica::~G4PVReplica() -{ -} +G4PVReplica::~G4PVReplica() = default; // ---------------------------------------------------------------------- G4bool G4PVReplica::IsMany() const diff --git a/source/geometry/volumes/src/G4ReflectionFactory.cc b/source/geometry/volumes/src/G4ReflectionFactory.cc index 2ca7980203f..a41c8cc69a5 100644 --- a/source/geometry/volumes/src/G4ReflectionFactory.cc +++ b/source/geometry/volumes/src/G4ReflectionFactory.cc @@ -164,7 +164,7 @@ G4ReflectionFactory::Place( const G4Transform3D& transform3D, isMany, copyNo, surfCheck); } - return G4PhysicalVolumesPair(pv1, pv2); + return {pv1, pv2}; } // @@ -189,7 +189,7 @@ G4ReflectionFactory::Place( const G4Transform3D& transform3D, LV, name, reflMotherLV, isMany, copyNo, surfCheck); } - return G4PhysicalVolumesPair(pv1, pv2); + return {pv1, pv2}; } @@ -229,7 +229,7 @@ G4ReflectionFactory::Replicate(const G4String& name, axis, nofReplicas, width, offset); } - return G4PhysicalVolumesPair(pv1, pv2); + return {pv1, pv2}; } //_____________________________________________________________________________ @@ -270,7 +270,7 @@ G4ReflectionFactory::Divide(const G4String& name, axis, nofDivisions, width, offset); } - return G4PhysicalVolumesPair(pv1, pv2); + return {pv1, pv2}; } @@ -311,7 +311,7 @@ G4ReflectionFactory::Divide(const G4String& name, axis, nofDivisions, offset); } - return G4PhysicalVolumesPair(pv1, pv2); + return {pv1, pv2}; } @@ -352,7 +352,7 @@ G4ReflectionFactory::Divide(const G4String& name, axis, width, offset); } - return G4PhysicalVolumesPair(pv1, pv2); + return {pv1, pv2}; } @@ -371,7 +371,7 @@ G4LogicalVolume* G4ReflectionFactory::ReflectLV(G4LogicalVolume* LV, G4LogicalVolume* refLV = GetReflectedLV(LV); - if (!refLV) + if (refLV == nullptr) { // create new (reflected) objects @@ -417,7 +417,7 @@ G4LogicalVolume* G4ReflectionFactory::CreateReflectedLV(G4LogicalVolume* LV) = new G4ReflectedSolid(LV->GetSolid()->GetName() + fNameExtension, LV->GetSolid(), fScale); - G4LogicalVolume* refLV + auto refLV = new G4LogicalVolume(refSolid, LV->GetMaterial(), LV->GetName() + fNameExtension, @@ -460,11 +460,11 @@ void G4ReflectionFactory::ReflectDaughters(G4LogicalVolume* LV, { ReflectPVPlacement(dPV, refLV, surfCheck); } - else if (!dPV->GetParameterisation()) + else if (dPV->GetParameterisation() == nullptr) { ReflectPVReplica(dPV, refLV); } - else if (G4VPVDivisionFactory::Instance() && + else if ((G4VPVDivisionFactory::Instance() != nullptr) && G4VPVDivisionFactory::Instance()->IsPVDivision(dPV)) { ReflectPVDivision(dPV, refLV); @@ -683,7 +683,7 @@ G4ReflectionFactory::GetConstituentLV(G4LogicalVolume* reflLV) const // nullptr if the given reflected volume was not found. // --- - LogicalVolumesMapIterator it = fReflectedLVMap.find(reflLV); + auto it = fReflectedLVMap.find(reflLV); if (it == fReflectedLVMap.end()) return nullptr; @@ -699,7 +699,7 @@ G4ReflectionFactory::GetReflectedLV(G4LogicalVolume* lv) const // nullptr if the given volume was not reflected. // --- - LogicalVolumesMapIterator it = fConstituentLVMap.find(lv); + auto it = fConstituentLVMap.find(lv); if (it == fConstituentLVMap.end()) return nullptr; @@ -735,10 +735,7 @@ G4bool G4ReflectionFactory::IsReflection(const G4Scale3D& scale) const // Returns true if the scale is negative, false otherwise. // --- - if (scale(0,0)*scale(1,1)*scale(2,2) < 0.) - return true; - else - return false; + return scale(0,0)*scale(1,1)*scale(2,2) < 0.; } //_____________________________________________________________________________ @@ -806,7 +803,7 @@ G4VPVDivisionFactory* G4ReflectionFactory::GetPVDivisionFactory() const // --- G4VPVDivisionFactory* divisionFactory = G4VPVDivisionFactory::Instance(); - if (!divisionFactory) + if (divisionFactory == nullptr) { std::ostringstream message; message << "A concrete G4PVDivisionFactory instantiated is required !" diff --git a/source/geometry/volumes/src/G4TouchableHistory.cc b/source/geometry/volumes/src/G4TouchableHistory.cc index dcfb0263d1b..5ab2f74cca1 100644 --- a/source/geometry/volumes/src/G4TouchableHistory.cc +++ b/source/geometry/volumes/src/G4TouchableHistory.cc @@ -37,9 +37,8 @@ G4Allocator*& aTouchableHistoryAllocator() } G4TouchableHistory::G4TouchableHistory() - : frot(G4RotationMatrix()), - ftlate(G4ThreeVector(0.,0.,0.)), - fhistory() + : ftlate(G4ThreeVector(0.,0.,0.)) + { fhistory.SetFirstEntry(nullptr); } @@ -52,9 +51,7 @@ G4TouchableHistory::G4TouchableHistory( const G4NavigationHistory& history ) frot = tf.InverseNetRotation(); } -G4TouchableHistory::~G4TouchableHistory() -{ -} +G4TouchableHistory::~G4TouchableHistory() = default; const G4ThreeVector& G4TouchableHistory::GetTranslation(G4int depth) const diff --git a/source/geometry/volumes/src/G4VExternalPhysicalVolume.cc b/source/geometry/volumes/src/G4VExternalPhysicalVolume.cc index 5eb9fa44615..ade3c63c613 100644 --- a/source/geometry/volumes/src/G4VExternalPhysicalVolume.cc +++ b/source/geometry/volumes/src/G4VExternalPhysicalVolume.cc @@ -45,7 +45,7 @@ G4VExternalPhysicalVolume( G4RotationMatrix* pRot, G4VPhysicalVolume* pMother ) : G4VPhysicalVolume(pRot, tlate, pName, pLogical, pMother) { - if (pMother) + if (pMother != nullptr) { G4LogicalVolume* motherLogical = pMother->GetLogicalVolume(); if (pLogical == motherLogical) @@ -71,9 +71,7 @@ G4VExternalPhysicalVolume::G4VExternalPhysicalVolume( __void__& a ) // ---------------------------------------------------------------------- // Destructor // -G4VExternalPhysicalVolume::~G4VExternalPhysicalVolume() -{ -} +G4VExternalPhysicalVolume::~G4VExternalPhysicalVolume() = default; // ---------------------------------------------------------------------- // IsMany diff --git a/source/global/GNUmakefile b/source/global/GNUmakefile deleted file mode 100644 index 3732b46b467..00000000000 --- a/source/global/GNUmakefile +++ /dev/null @@ -1,21 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for global. Gabriele Cosmo, 26/9/96. -# -------------------------------------------------------------- - -name := G4global - -SUBDIRS = management HEPNumerics HEPRandom -SUBLIBS = G4globman G4hepnumerics G4heprandom - -GLOBLIBS = - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -include $(G4INSTALL)/config/globlib.gmk - -includes:: - @for dir in HEPGeometry; do \ - (cd $$dir && $(MAKE) $@); \ - done diff --git a/source/global/HEPGeometry/GNUmakefile b/source/global/HEPGeometry/GNUmakefile deleted file mode 100644 index ed05b2f3614..00000000000 --- a/source/global/HEPGeometry/GNUmakefile +++ /dev/null @@ -1,16 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for global HEPGeometry. Gabriele Cosmo, 26/9/96. -# -------------------------------------------------------------- - -name := G4hepgeometry - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4GLOB_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/global/HEPNumerics/GNUmakefile b/source/global/HEPNumerics/GNUmakefile deleted file mode 100644 index 1fce7b2f569..00000000000 --- a/source/global/HEPNumerics/GNUmakefile +++ /dev/null @@ -1,16 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for global HEPNumerics. Gabriele Cosmo, 26/9/96. -# -------------------------------------------------------------- - -name := G4hepnumerics - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4GLOB_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/global/HEPRandom/GNUmakefile b/source/global/HEPRandom/GNUmakefile deleted file mode 100644 index 25b579622aa..00000000000 --- a/source/global/HEPRandom/GNUmakefile +++ /dev/null @@ -1,17 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for global HEPRandom. Gunter Folger 12-Dec-2000. -# -------------------------------------------------------------- - -name := G4heprandom - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4GLOB_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/HepGeometry/include -CPPFLAGS += -I$(G4BASE)/global/management/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/global/History b/source/global/History index 96fec7f15bb..a3c1b0fc007 100644 --- a/source/global/History +++ b/source/global/History @@ -6,19 +6,54 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-06-15 Gabriele Cosmo (global-V11-00-35) -- Updated tag IDs for geant4-11-01-patch-02. +## 2023-06-30 Gabriele Cosmo (global-V11-01-13) +- Updated tag IDs for geant4-11-01-ref-06. -## 2023-04-06 Gabriele Cosmo +## 2023-06-14 Ben Morgan (global-V11-01-12) +- Add `G4VERSION_REFERENCE_TAG` macro to distinguish release/development versions + and cycle of the latter. + +## 2023-05-31 Alberto Ribon (global-V11-01-11) +- G4PhysicsModelCatalog.cc: added the new INCLXX model of antiproton + annihilation at rest. + +## 2023-05-31 Gabriele Cosmo (global-V11-01-10) +- Updated tag IDs for geant4-11-01-ref-05. + +## 2023-04-30 Gabriele Cosmo (global-V11-01-09) +- Updated tag IDs for geant4-11-01-ref-04. + +## 2023-04-06 Gabriele Cosmo (global-V11-01-08) - Fixed typo in G4Backtrace class description. Reported in [GitHub PR#57](https://github.com/Geant4/geant4/pull/57). -## 2023-02-10 Gabriele Cosmo (global-V11-00-34) -- Updated tag IDs for geant4-11-01-patch-01. +## 2023-03-31 Gabriele Cosmo (global-V11-01-07) +- Updated tag IDs for geant4-11-01-ref-03. + +## 2023-02-28 Gabriele Cosmo (global-V11-01-06) +- Updated tag IDs for geant4-11-01-ref-02. + +## 2023-01-31 Gabriele Cosmo (global-V11-01-05) +- Removed obsolete and no longer used G4SIunits.hh header. + +## 2023-01-30 Gabriele Cosmo (global-V11-01-04) +- Updated tag IDs for geant4-11-01-ref-01. + +## 2023-01-09 Ben Morgan (global-V11-01-03) +- Add G4debug output stream for logging messages at lower priority than + G4cout. + +## 2022-12-20 Vladimir Ivanchenko (global-V11-01-02) +- G4DataVector - simplified inline methods in order to remove compilation + warnings at some CMSSW platforms -## 2022-12-20 Vladimir Ivanchenko -- G4DataVector: simplified inline methods in order to remove compilation - warnings at some CMSSW platforms +## 2022-12-14 Ben Morgan (global-V11-01-01) +- Remove public interface to G4strstreambuf + - G4strstreambuf becomes a private implementation detail of G4ios + - Minimized G4cout/G4strstreambuf/G4coutDestination coupling + +## 2022-12-12 Ben Morgan (global-V11-01-00) +- Remove obsolete GNUmakefile scripts ## 2022-11-29 Gabriele Cosmo (global-V11-00-33) - Updated tag IDs for geant4-11-01-ref-00. @@ -40,7 +75,7 @@ It must **not** be used as a substitute for writing good git commit messages! - Updated tag IDs for geant4-11-00-ref-08. ## 2022-09-22 Ben Morgan (global-V11-00-27) -- Apply patch for MinGW from [GitHub PR 51](https://github.com/Geant4/geant4/pull/51) +- Apply patch for MinGW from [GitHub PR#51](https://github.com/Geant4/geant4/pull/51) ## 2022-08-29 Gabriele Cosmo (global-V11-00-26) - Updated tag IDs for geant4-11-00-ref-07. diff --git a/source/global/management/GNUmakefile b/source/global/management/GNUmakefile deleted file mode 100644 index 08d2e3c3269..00000000000 --- a/source/global/management/GNUmakefile +++ /dev/null @@ -1,15 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for global management. Gabriele Cosmo, 26/9/96. -# -------------------------------------------------------------- - -name := G4globman - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4GLOB_ALLOC_EXPORT - -include $(G4INSTALL)/config/common.gmk diff --git a/source/global/management/include/G4Backtrace.hh b/source/global/management/include/G4Backtrace.hh index 0f0fd5eb2ea..02a44ceed93 100644 --- a/source/global/management/include/G4Backtrace.hh +++ b/source/global/management/include/G4Backtrace.hh @@ -43,7 +43,7 @@ // and so on, *before* creating the run-manager. After the run-manager // has been created, one should disable the signals: // -// G4Backtrace::Disable(G4BackTrace::DefaultSignals()); +// G4Backtrace::Disable(G4Backtrace::DefaultSignals()); // // Additionally, at runtime, the environment variable "G4BACKTRACE" can // be set to select a specific set of signals or none, e.g. in bash: diff --git a/source/global/management/include/G4BuffercoutDestination.hh b/source/global/management/include/G4BuffercoutDestination.hh index d68ea9ca2b1..9c12d7459c6 100644 --- a/source/global/management/include/G4BuffercoutDestination.hh +++ b/source/global/management/include/G4BuffercoutDestination.hh @@ -38,6 +38,7 @@ #ifndef G4BUFFERCOUTDESTINATION_HH #define G4BUFFERCOUTDESTINATION_HH +#include #include #include "G4coutDestination.hh" @@ -48,32 +49,32 @@ class G4BuffercoutDestination : public G4coutDestination explicit G4BuffercoutDestination(std::size_t maxSize = 0); ~G4BuffercoutDestination() override; + G4int ReceiveG4debug(const G4String& msg) override; G4int ReceiveG4cout(const G4String& msg) override; G4int ReceiveG4cerr(const G4String& msg) override; + // Flush buffer to std output + virtual G4int FlushG4debug(); + // Flush buffer to std output virtual G4int FlushG4cout(); // Flush buffer to std error virtual G4int FlushG4cerr(); - // Flsuh both buffers - + + // Flush all buffers virtual void Finalize(); // Set maximum size of buffer, when buffer grows to specified size, // it will trigger flush. Dimension in char - void SetMaxSize(std::size_t max) { m_maxSize = max; } + void SetMaxSize(std::size_t max); std::size_t GetMaxSize() const { return m_maxSize; } - std::size_t GetCurrentSizeOut() const { return m_currentSize_out; } - std::size_t GetCurrentSizeErr() const { return m_currentSize_err; } protected: - void ResetCout(); - void ResetCerr(); + std::size_t m_maxSize = 0; - std::ostringstream m_buffer_out; - std::ostringstream m_buffer_err; - std::size_t m_currentSize_out = 0; - std::size_t m_currentSize_err = 0; - std::size_t m_maxSize = 0; + class BufferImpl; + std::unique_ptr m_buffer_dbg; + std::unique_ptr m_buffer_out; + std::unique_ptr m_buffer_err; }; #endif diff --git a/source/global/management/include/G4FilecoutDestination.hh b/source/global/management/include/G4FilecoutDestination.hh index e21eab57532..d17e3985b1b 100644 --- a/source/global/management/include/G4FilecoutDestination.hh +++ b/source/global/management/include/G4FilecoutDestination.hh @@ -58,6 +58,7 @@ class G4FilecoutDestination : public G4coutDestination // By default append to existing file void Close(); + G4int ReceiveG4debug(const G4String& msg) override; G4int ReceiveG4cout(const G4String& msg) override; G4int ReceiveG4cerr(const G4String& msg) override; diff --git a/source/global/management/include/G4LockcoutDestination.hh b/source/global/management/include/G4LockcoutDestination.hh index ab756b7c9bd..a33a2e6e6d8 100644 --- a/source/global/management/include/G4LockcoutDestination.hh +++ b/source/global/management/include/G4LockcoutDestination.hh @@ -44,6 +44,7 @@ class G4LockcoutDestination : public G4coutDestination public: G4LockcoutDestination() = default; ~G4LockcoutDestination() override = default; + G4int ReceiveG4debug(const G4String& msg) override; G4int ReceiveG4cout(const G4String& msg) override; G4int ReceiveG4cerr(const G4String& msg) override; }; diff --git a/source/global/management/include/G4MasterForwardcoutDestination.hh b/source/global/management/include/G4MasterForwardcoutDestination.hh index 58409c744c0..301a4e4741f 100644 --- a/source/global/management/include/G4MasterForwardcoutDestination.hh +++ b/source/global/management/include/G4MasterForwardcoutDestination.hh @@ -47,6 +47,7 @@ class G4MasterForwardcoutDestination : public G4coutDestination G4MasterForwardcoutDestination() = default; ~G4MasterForwardcoutDestination() override = default; + G4int ReceiveG4debug(const G4String& msg) override; G4int ReceiveG4cout(const G4String& msg) override; G4int ReceiveG4cerr(const G4String& msg) override; }; diff --git a/source/global/management/include/G4MulticoutDestination.hh b/source/global/management/include/G4MulticoutDestination.hh index 2b4ad6706cf..559df1f773c 100644 --- a/source/global/management/include/G4MulticoutDestination.hh +++ b/source/global/management/include/G4MulticoutDestination.hh @@ -40,7 +40,7 @@ // auto multi = new G4MulticoutDestination(); // multi->push_back( G4coutDestinationUPtr( new MyCout1 ) ); // multi->push_back( G4coutDestinationUPtr( new MyCout2 ) ); -// G4coutbuf.SetDestination( multi ); // or G4cerrbuf +// G4iosSetDestination( multi ); // or G4cerrbuf // ---------------- G4MulticoutDestination ---------------- // @@ -67,6 +67,15 @@ class G4MulticoutDestination // Forward call to contained destination. Note that the message may have // been modified by formatters attached to this + G4int ReceiveG4debug(const G4String& msg) override + { + G4bool result = true; + std::for_each(begin(), end(), [&](G4coutDestinationUPtr& e) { + result &= (e->ReceiveG4debug_(msg) == 0); + }); + return (result ? 0 : -1); + } + G4int ReceiveG4cout(const G4String& msg) override { G4bool result = true; diff --git a/source/global/management/include/G4SIunits.hh b/source/global/management/include/G4SIunits.hh deleted file mode 100644 index cb81e002a96..00000000000 --- a/source/global/management/include/G4SIunits.hh +++ /dev/null @@ -1,329 +0,0 @@ -// -// ******************************************************************** -// * 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. * -// ******************************************************************** -// -// G4SIunits -// -// Description: -// -// This file is a modified version of CLHEP SystemOfUnits.h -// It is provided for checking the overall 'units coherence' in Geant4. -// The basic units are those of the International System: -// -// meter -// second -// kilogram -// ampere -// degree kelvin -// the amount of substance (mole) -// luminous intensity (candela) -// radian -// steradian -// -// The SI numerical value of the positron charge is defined here, -// as it is needed for conversion factor: positron charge = e_SI (coulomb) -// -// The others physical constants are defined in the CLHEP header file -// for PhysicalConstants. - -// Authors: M.Maire, S.Giani - 10.03.1999 -// -------------------------------------------------------------------- -#ifndef SI_SYSTEM_OF_UNITS_HH -#define SI_SYSTEM_OF_UNITS_HH 1 - -static constexpr double pi = 3.14159265358979323846; -static constexpr double twopi = 2 * pi; -static constexpr double halfpi = pi / 2; -static constexpr double pi2 = pi * pi; -// -// Length [L] -// -static constexpr double meter = 1.; -static constexpr double meter2 = meter * meter; -static constexpr double meter3 = meter * meter * meter; - -static constexpr double millimeter = 0.001 * meter; -static constexpr double millimeter2 = millimeter * millimeter; -static constexpr double millimeter3 = millimeter * millimeter * millimeter; - -static constexpr double centimeter = 10. * millimeter; -static constexpr double centimeter2 = centimeter * centimeter; -static constexpr double centimeter3 = centimeter * centimeter * centimeter; - -static constexpr double kilometer = 1000. * meter; -static constexpr double kilometer2 = kilometer * kilometer; -static constexpr double kilometer3 = kilometer * kilometer * kilometer; - -static constexpr double parsec = 3.0856775807e+16 * meter; - -static constexpr double micrometer = 1.e-6 * meter; -static constexpr double nanometer = 1.e-9 * meter; -static constexpr double angstrom = 1.e-10 * meter; -static constexpr double fermi = 1.e-15 * meter; - -static constexpr double barn = 1.e-28 * meter2; -static constexpr double millibarn = 1.e-3 * barn; -static constexpr double microbarn = 1.e-6 * barn; -static constexpr double nanobarn = 1.e-9 * barn; -static constexpr double picobarn = 1.e-12 * barn; - -// symbols -static constexpr double nm = nanometer; -static constexpr double um = micrometer; - -static constexpr double mm = millimeter; -static constexpr double mm2 = millimeter2; -static constexpr double mm3 = millimeter3; - -static constexpr double cm = centimeter; -static constexpr double cm2 = centimeter2; -static constexpr double cm3 = centimeter3; - -static constexpr double liter = 1.e+3 * cm3; -static constexpr double L = liter; -static constexpr double dL = 1.e-1 * liter; -static constexpr double cL = 1.e-2 * liter; -static constexpr double mL = 1.e-3 * liter; - -static constexpr double m = meter; -static constexpr double m2 = meter2; -static constexpr double m3 = meter3; - -static constexpr double km = kilometer; -static constexpr double km2 = kilometer2; -static constexpr double km3 = kilometer3; - -static constexpr double pc = parsec; - -// -// Angle -// -static constexpr double radian = 1.; -static constexpr double milliradian = 1.e-3 * radian; -static constexpr double degree = (pi / 180.0) * radian; - -static constexpr double steradian = 1.; - -// symbols -static constexpr double rad = radian; -static constexpr double mrad = milliradian; -static constexpr double sr = steradian; -static constexpr double deg = degree; - -// -// Time [T] -// -static constexpr double second = 1.; -static constexpr double nanosecond = 1.e-9 * second; -static constexpr double millisecond = 1.e-3 * second; -static constexpr double microsecond = 1.e-6 * second; -static constexpr double picosecond = 1.e-12 * second; - -static constexpr double minute = 60*second; -static constexpr double hour = 60*minute; -static constexpr double day = 24*hour; -static constexpr double year = 365*day; - -static constexpr double hertz = 1. / second; -static constexpr double kilohertz = 1.e+3 * hertz; -static constexpr double megahertz = 1.e+6 * hertz; - -// symbols -static constexpr double ns = nanosecond; -static constexpr double s = second; -static constexpr double ms = millisecond; -static constexpr double us = microsecond; -static constexpr double ps = picosecond; - -// -// Mass [E][T^2][L^-2] -// -static constexpr double kilogram = 1.; -static constexpr double gram = 1.e-3 * kilogram; -static constexpr double milligram = 1.e-3 * gram; - -// symbols -static constexpr double kg = kilogram; -static constexpr double g = gram; -static constexpr double mg = milligram; - -// -// Electric current [Q][T^-1] -// -static constexpr double ampere = 1.; -static constexpr double milliampere = 1.e-3 * ampere; -static constexpr double microampere = 1.e-6 * ampere; -static constexpr double nanoampere = 1.e-9 * ampere; - -// -// Electric charge [Q] -// -static constexpr double coulomb = ampere * second; -static constexpr double e_SI = 1.602176634e-19; // positron charge in coulomb -static constexpr double eplus = e_SI * coulomb; // positron charge - -// -// Energy [E] -// -static constexpr double joule = kg * m * m / (s * s); - -static constexpr double electronvolt = e_SI * joule; -static constexpr double kiloelectronvolt = 1.e+3 * electronvolt; -static constexpr double megaelectronvolt = 1.e+6 * electronvolt; -static constexpr double gigaelectronvolt = 1.e+9 * electronvolt; -static constexpr double teraelectronvolt = 1.e+12 * electronvolt; -static constexpr double petaelectronvolt = 1.e+15 * electronvolt; -static constexpr double millielectronvolt = 1.e-3 * electronvolt; - -// symbols -static constexpr double MeV = megaelectronvolt; -static constexpr double eV = electronvolt; -static constexpr double keV = kiloelectronvolt; -static constexpr double GeV = gigaelectronvolt; -static constexpr double TeV = teraelectronvolt; -static constexpr double PeV = petaelectronvolt; - -// -// Power [E][T^-1] -// -static constexpr double watt = joule / second; // watt = 6.24150 e+3 * MeV/ns - -// -// Force [E][L^-1] -// -static constexpr double newton = - joule / meter; // newton = 6.24150 e+9 * MeV/mm - -// -// Pressure [E][L^-3] -// -#define pascal hep_pascal // a trick to avoid warnings -static constexpr double hep_pascal = - newton / m2; // pascal = 6.24150 e+3 * MeV/mm3 -static constexpr double bar = 100000 * pascal; // bar = 6.24150 e+8 * MeV/mm3 -static constexpr double atmosphere = - 101325 * pascal; // atm = 6.32420 e+8 * MeV/mm3 - -// -// Electric potential [E][Q^-1] -// -static constexpr double megavolt = megaelectronvolt / eplus; -static constexpr double kilovolt = 1.e-3 * megavolt; -static constexpr double volt = 1.e-6 * megavolt; - -// -// Electric resistance [E][T][Q^-2] -// -static constexpr double ohm = - volt / ampere; // ohm = 1.60217e-16*(MeV/eplus)/(eplus/ns) - -// -// Electric capacitance [Q^2][E^-1] -// -static constexpr double farad = - coulomb / volt; // farad = 6.24150e+24 * eplus/Megavolt -static constexpr double millifarad = 1.e-3 * farad; -static constexpr double microfarad = 1.e-6 * farad; -static constexpr double nanofarad = 1.e-9 * farad; -static constexpr double picofarad = 1.e-12 * farad; - -// -// Magnetic Flux [T][E][Q^-1] -// -static constexpr double weber = volt * second; // weber = 1000*megavolt*ns - -// -// Magnetic Field [T][E][Q^-1][L^-2] -// -static constexpr double tesla = - volt * second / meter2; // tesla =0.001*megavolt*ns/mm2 - -static constexpr double gauss = 1.e-4 * tesla; -static constexpr double kilogauss = 1.e-1 * tesla; - -// -// Inductance [T^2][E][Q^-2] -// -static constexpr double henry = - weber / ampere; // henry = 1.60217e-7*MeV*(ns/eplus)**2 - -// -// Temperature -// -static constexpr double kelvin = 1.; - -// -// Amount of substance -// -static constexpr double mole = 1.; - -// -// Activity [T^-1] -// -static constexpr double becquerel = 1. / second; -static constexpr double curie = 3.7e+10 * becquerel; -static constexpr double kilobecquerel = 1.e+3 * becquerel; -static constexpr double megabecquerel = 1.e+6 * becquerel; -static constexpr double gigabecquerel = 1.e+9 * becquerel; -static constexpr double millicurie = 1.e-3 * curie; -static constexpr double microcurie = 1.e-6 * curie; -static constexpr double Bq = becquerel; -static constexpr double kBq = kilobecquerel; -static constexpr double MBq = megabecquerel; -static constexpr double GBq = gigabecquerel; -static constexpr double Ci = curie; -static constexpr double mCi = millicurie; -static constexpr double uCi = microcurie; - -// -// Absorbed dose [L^2][T^-2] -// -static constexpr double gray = joule / kilogram; -static constexpr double kilogray = 1.e+3 * gray; -static constexpr double milligray = 1.e-3 * gray; -static constexpr double microgray = 1.e-6 * gray; - -// -// Luminous intensity [I] -// -static constexpr double candela = 1.; - -// -// Luminous flux [I] -// -static constexpr double lumen = candela * steradian; - -// -// Illuminance [I][L^-2] -// -static constexpr double lux = lumen / meter2; - -// -// Miscellaneous -// -static constexpr double perCent = 0.01; -static constexpr double perThousand = 0.001; -static constexpr double perMillion = 0.000001; - -#endif diff --git a/source/global/management/include/G4Version.hh b/source/global/management/include/G4Version.hh index 147a1b5a7ec..e6d871db8a8 100644 --- a/source/global/management/include/G4Version.hh +++ b/source/global/management/include/G4Version.hh @@ -30,21 +30,36 @@ #ifndef G4VERSION_HH #define G4VERSION_HH 1 -// Numbering rule for "G4VERSION_NUMBER": -// - The number is consecutive (i.e. 711) as an integer. -// - The meaning of each digit is as follows; +/// @def G4VERSION_NUMBER +/// @brief Integral value representing the current Geant4 version +/// +/// Numbering rule for "G4VERSION_NUMBER": +/// - The number is consecutive (i.e. 711) as an integer. +/// - The meaning of each digit is as follows; // -// 711 -// |--> major version number -// |--> minor version number -// |--> patch number - +/// 711 +/// |--> major version number (up to two digits) +/// |--> minor version number (single digit) +/// |--> patch number (single digit) +/// #ifndef G4VERSION_NUMBER - #define G4VERSION_NUMBER 1112 + #define G4VERSION_NUMBER 1120 +#endif + +/// @def G4VERSION_REFERENCE_TAG +/// @brief Number indicating current development cycle +/// +/// Can take values between -1 and 11. A value of -1 indicates a release, whose version +/// can be read from @ref `G4VERSION_NUMBER`. Values 0-11 indicate an in development version, +/// the value being incremented on each reference tag and thus corresponding to the month number +/// (taking December as 0, the start of new development of the next major/minor release). +/// +#ifndef G4VERSION_REFERENCE_TAG + #define G4VERSION_REFERENCE_TAG -1 #endif #ifndef G4VERSION_TAG - #define G4VERSION_TAG "$Name: geant4-11-01-patch-02 $" + #define G4VERSION_TAG "$Name: geant4-11-02-beta-01 $" #endif // as variables @@ -53,10 +68,10 @@ #include "G4Types.hh" #ifdef G4MULTITHREADED -static const G4String G4Version = "$Name: geant4-11-01-patch-02 [MT]$"; +static const G4String G4Version = "$Name: geant4-11-02-beta-01 [MT]$"; #else -static const G4String G4Version = "$Name: geant4-11-01-patch-02 $"; +static const G4String G4Version = "$Name: geant4-11-02-beta-01 $"; #endif -static const G4String G4Date = "(15-June-2023)"; +static const G4String G4Date = "(30-June-2023)"; #endif diff --git a/source/global/management/include/G4coutDestination.hh b/source/global/management/include/G4coutDestination.hh index 3e82df880ea..9558a31671f 100644 --- a/source/global/management/include/G4coutDestination.hh +++ b/source/global/management/include/G4coutDestination.hh @@ -58,11 +58,19 @@ class G4coutDestination // anymore and discarded // using Transformer = std::function; + + void AddDebugTransformer(const Transformer& t) + { + transformersDebug.push_back(t); + } + void AddDebugTransformer(Transformer&& t) { transformersDebug.push_back(t); } + void AddCoutTransformer(const Transformer& t) { transformersCout.push_back(t); } void AddCoutTransformer(Transformer&& t) { transformersCout.push_back(t); } + void AddCerrTransformer(const Transformer& t) { transformersCerr.push_back(t); @@ -70,12 +78,16 @@ class G4coutDestination void AddCerrTransformer(Transformer&& t) { transformersCerr.push_back(t); } virtual void ResetTransformers(); + virtual G4int ReceiveG4debug(const G4String& msg); virtual G4int ReceiveG4cout(const G4String& msg); virtual G4int ReceiveG4cerr(const G4String& msg); // Derived class implements here handling of message. // For example, streaming on std::cout or file. // Return 0 for success, -1 otherwise + // Called by G4debug stream to handle log message + G4int ReceiveG4debug_(const G4String& msg); + G4int ReceiveG4cout_(const G4String& msg); // Method called by G4strbuf when need to handle a message @@ -88,7 +100,7 @@ class G4coutDestination // For MT: if master G4coutDestination derived class wants to // intercept the thread outputs, derived class should set this pointer. // Needed for some G4UIsession like GUIs - + std::vector transformersDebug; std::vector transformersCout; std::vector transformersCerr; }; diff --git a/source/global/management/include/G4coutFormatters.hh b/source/global/management/include/G4coutFormatters.hh index 0d2e1fd62ed..158b4122f96 100644 --- a/source/global/management/include/G4coutFormatters.hh +++ b/source/global/management/include/G4coutFormatters.hh @@ -46,7 +46,7 @@ #include "G4String.hh" #include "G4ios.hh" -#include "G4strstreambuf.hh" +#include "G4coutDestination.hh" namespace G4coutFormatters { diff --git a/source/global/management/include/G4ios.hh b/source/global/management/include/G4ios.hh index 7c036599491..321168d603e 100644 --- a/source/global/management/include/G4ios.hh +++ b/source/global/management/include/G4ios.hh @@ -36,15 +36,20 @@ #include +class G4coutDestination; + #ifdef G4MULTITHREADED +extern G4GLOB_DLL std::ostream*& _G4debug_p(); extern G4GLOB_DLL std::ostream*& _G4cout_p(); extern G4GLOB_DLL std::ostream*& _G4cerr_p(); +# define G4debug (*_G4debug_p()) # define G4cout (*_G4cout_p()) # define G4cerr (*_G4cerr_p()) #else // Sequential +extern G4GLOB_DLL std::ostream G4debug; extern G4GLOB_DLL std::ostream G4cout; extern G4GLOB_DLL std::ostream G4cerr; @@ -53,6 +58,11 @@ extern G4GLOB_DLL std::ostream G4cerr; void G4iosInitialization(); void G4iosFinalization(); +// Redirect messages sent to G4cout etc to this destination +// Callee retains ownership of the destination pointer and must call +// this function again with `nullptr` on destination destruction. +void G4iosSetDestination(G4coutDestination* sink); + #define G4cin std::cin #define G4endl std::endl diff --git a/source/global/management/include/G4strstreambuf.icc b/source/global/management/include/G4strstreambuf.icc deleted file mode 100644 index 47142210c12..00000000000 --- a/source/global/management/include/G4strstreambuf.icc +++ /dev/null @@ -1,139 +0,0 @@ -// -// ******************************************************************** -// * 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. * -// ******************************************************************** -// -// G4strstreambuf inline methods implementation -// -// Authors: H.Yoshida, M.Nagamatu - November 1998 -// Revisions: G.Cosmo, 1998-2013 -// -------------------------------------------------------------------- - -// -------------------------------------------------------------------- -inline G4strstreambuf::G4strstreambuf() -{ - size = 4095; - buffer = new char[size + 1]; -} - -// -------------------------------------------------------------------- -inline G4strstreambuf::~G4strstreambuf() -{ - // flushing buffer... - // std::cout is used because destination object may not be alive. - if(count != 0) - { - buffer[count] = '\0'; - std::cout << buffer; - } - - delete[] buffer; -} - -// -------------------------------------------------------------------- -inline G4strstreambuf::G4strstreambuf(const G4strstreambuf& right) - : std::basic_streambuf() // NOLINT(readability-redundant-member-init) - , buffer(right.buffer) - , count(right.count) - , size(right.size) - , destination(right.destination) -{} - -// -------------------------------------------------------------------- -inline G4strstreambuf& G4strstreambuf::operator=(const G4strstreambuf& right) -{ - if(&right == this) - return *this; - - destination = right.destination; - buffer = right.buffer; - count = right.count; - size = right.size; - - return *this; -} - -// -------------------------------------------------------------------- -inline G4int G4strstreambuf::overflow(G4int c) -{ - G4int result = 0; - if(count >= size) - result = sync(); - - buffer[count] = (char)c; - count++; - - return result; -} - -// -------------------------------------------------------------------- -inline G4int G4strstreambuf::sync() -{ - buffer[count] = '\0'; - count = 0; - return ReceiveString(); -} - -#ifdef WIN32 -// -------------------------------------------------------------------- -inline G4int G4strstreambuf::underflow() { return 0; } -#endif - -// -------------------------------------------------------------------- -inline void G4strstreambuf::SetDestination(G4coutDestination* dest) -{ - destination = dest; -} - -inline G4coutDestination* G4strstreambuf::GetDestination() const -{ - return destination; -} - -// -------------------------------------------------------------------- -inline G4int G4strstreambuf::ReceiveString() -{ - G4String stringToSend(buffer); - G4int result = 0; - - if(this == &G4coutbuf && destination != nullptr) - { - result = destination->ReceiveG4cout_(stringToSend); - } - else if(this == &G4cerrbuf && destination != nullptr) - { - result = destination->ReceiveG4cerr_(stringToSend); - } - else if(this == &G4coutbuf && destination == nullptr) - { - std::cout << stringToSend << std::flush; - result = 0; - } - else if(this == &G4cerrbuf && destination == nullptr) - { - std::cerr << stringToSend << std::flush; - result = 0; - } - - return result; -} diff --git a/source/global/management/sources.cmake b/source/global/management/sources.cmake index 402c0163369..29042e2f5bc 100644 --- a/source/global/management/sources.cmake +++ b/source/global/management/sources.cmake @@ -79,15 +79,12 @@ geant4_add_module(G4globman G4Profiler.icc G4ReferenceCountedHandle.hh G4RotationMatrix.hh - G4SIunits.hh G4SliceTimer.hh G4SliceTimer.icc G4StateManager.hh G4StateManager.icc G4String.hh G4String.icc - G4strstreambuf.hh - G4strstreambuf.icc G4SystemOfUnits.hh G4TaskGroup.hh G4Task.hh diff --git a/source/global/management/src/G4BuffercoutDestination.cc b/source/global/management/src/G4BuffercoutDestination.cc index e41c7e800ec..064b8b29c72 100644 --- a/source/global/management/src/G4BuffercoutDestination.cc +++ b/source/global/management/src/G4BuffercoutDestination.cc @@ -28,16 +28,68 @@ // Author: A.Dotti (SLAC), 14 April 2017 // -------------------------------------------------------------------- -#include +#include "G4BuffercoutDestination.hh" #include "G4AutoLock.hh" -#include "G4BuffercoutDestination.hh" + +#include + +// Private class to implement buffering of logging via an ostringstream +class G4BuffercoutDestination::BufferImpl +{ + public: + using FlushFn_t = std::function; + + public: + explicit BufferImpl(std::size_t maxSize) : m_maxSize(maxSize) {} + explicit BufferImpl(std::size_t maxSize, FlushFn_t&& f) : m_maxSize(maxSize), m_flushFn(f) {} + + ~BufferImpl() = default; + + // Set number of characters to hold before Flush() will be called + // If buffer exceeds new maximum, Flush() will not be called until next call to Receive() + void SetMaxSize(std::size_t n) { m_maxSize = n; } + + // Reset buffer without flushing + void Reset() + { + m_buffer.str(""); + m_buffer.clear(); + m_currentSize = 0; + } + + G4int Receive(const G4String& msg) + { + m_currentSize += msg.size(); + m_buffer << msg; + + if (m_maxSize > 0 && m_currentSize > m_maxSize) { + return Flush(); + } + return 0; + } + + // Flush buffer to destination and reset it + G4int Flush() + { + m_flushFn(m_buffer.str()); + Reset(); + return 0; + } + + private: + std::size_t m_maxSize = 0; + std::ostringstream m_buffer; + std::size_t m_currentSize = 0; + FlushFn_t m_flushFn = [](auto& s) { std::cout << s << std::flush; }; +}; // -------------------------------------------------------------------- G4BuffercoutDestination::G4BuffercoutDestination(std::size_t max) - : m_buffer_out("") - , m_buffer_err("") - , m_maxSize(max) + : m_maxSize(max), + m_buffer_dbg(std::make_unique(max)), + m_buffer_out(std::make_unique(max)), + m_buffer_err(std::make_unique(max, [](auto& s) { std::cerr << s << std::flush; })) {} // -------------------------------------------------------------------- @@ -48,62 +100,50 @@ void G4BuffercoutDestination::Finalize() { FlushG4cerr(); FlushG4cout(); + FlushG4debug(); +} + +// -------------------------------------------------------------------- +G4int G4BuffercoutDestination::ReceiveG4debug(const G4String& msg) +{ + return m_buffer_dbg->Receive(msg); } // -------------------------------------------------------------------- G4int G4BuffercoutDestination::ReceiveG4cout(const G4String& msg) { - m_currentSize_out += msg.size(); - m_buffer_out << msg; - // If there is a max size and it has been reached, flush - if(m_maxSize > 0 && m_currentSize_out >= m_maxSize) - { - FlushG4cout(); - } - return 0; + return m_buffer_out->Receive(msg); } // -------------------------------------------------------------------- G4int G4BuffercoutDestination::ReceiveG4cerr(const G4String& msg) { - m_currentSize_err += msg.size(); - m_buffer_err << msg; - // If there is a max size and it has been reached, flush - if(m_maxSize > 0 && m_currentSize_err >= m_maxSize) - { - FlushG4cerr(); - } - return 0; + return m_buffer_err->Receive(msg); } // -------------------------------------------------------------------- -G4int G4BuffercoutDestination::FlushG4cout() +G4int G4BuffercoutDestination::FlushG4debug() { - std::cout << m_buffer_out.str() << std::flush; - ResetCout(); - return 0; + return m_buffer_dbg->Flush(); } // -------------------------------------------------------------------- -void G4BuffercoutDestination::ResetCout() +G4int G4BuffercoutDestination::FlushG4cout() { - m_buffer_out.str(""); - m_buffer_out.clear(); - m_currentSize_out = 0; + return m_buffer_out->Flush(); } // -------------------------------------------------------------------- G4int G4BuffercoutDestination::FlushG4cerr() { - std::cerr << m_buffer_err.str() << std::flush; - ResetCerr(); - return 0; + return m_buffer_err->Flush(); } // -------------------------------------------------------------------- -void G4BuffercoutDestination::ResetCerr() +void G4BuffercoutDestination::SetMaxSize(std::size_t max) { - m_buffer_err.str(""); - m_buffer_err.clear(); - m_currentSize_err = 0; + m_maxSize = max; + m_buffer_dbg->SetMaxSize(m_maxSize); + m_buffer_out->SetMaxSize(m_maxSize); + m_buffer_err->SetMaxSize(m_maxSize); } diff --git a/source/global/management/src/G4FilecoutDestination.cc b/source/global/management/src/G4FilecoutDestination.cc index fb1bc9d14a7..576374e9c90 100644 --- a/source/global/management/src/G4FilecoutDestination.cc +++ b/source/global/management/src/G4FilecoutDestination.cc @@ -69,6 +69,17 @@ void G4FilecoutDestination::Close() } } +// -------------------------------------------------------------------- +G4int G4FilecoutDestination::ReceiveG4debug(const G4String& msg) +{ + if(m_output == nullptr || !m_output->is_open()) + { + Open(m_mode); + } + *m_output << msg; + return 0; +} + // -------------------------------------------------------------------- G4int G4FilecoutDestination::ReceiveG4cout(const G4String& msg) { diff --git a/source/global/management/src/G4LockcoutDestination.cc b/source/global/management/src/G4LockcoutDestination.cc index 282a742ab1d..174c2238140 100644 --- a/source/global/management/src/G4LockcoutDestination.cc +++ b/source/global/management/src/G4LockcoutDestination.cc @@ -36,6 +36,14 @@ namespace G4Mutex out_mutex = G4MUTEX_INITIALIZER; } +// -------------------------------------------------------------------- +G4int G4LockcoutDestination::ReceiveG4debug(const G4String& msg) +{ + G4AutoLock l(&out_mutex); + // Forward call to base class + return G4coutDestination::ReceiveG4debug(msg); +} + // -------------------------------------------------------------------- G4int G4LockcoutDestination::ReceiveG4cout(const G4String& msg) { diff --git a/source/global/management/src/G4MTcoutDestination.cc b/source/global/management/src/G4MTcoutDestination.cc index e3da068a4f7..c9097ea86eb 100644 --- a/source/global/management/src/G4MTcoutDestination.cc +++ b/source/global/management/src/G4MTcoutDestination.cc @@ -35,7 +35,6 @@ #include "G4FilecoutDestination.hh" #include "G4LockcoutDestination.hh" #include "G4MasterForwardcoutDestination.hh" -#include "G4strstreambuf.hh" #include #include @@ -49,9 +48,8 @@ namespace G4MTcoutDestination::G4MTcoutDestination(const G4int& threadId) : id(threadId) { - // TODO: Move these two out of here and in the caller - G4coutbuf.SetDestination(this); - G4cerrbuf.SetDestination(this); + // TODO: Move this out of here and in the caller + G4iosSetDestination(this); stateMgr = G4StateManager::GetStateManager(); SetDefaultOutput(masterDestinationFlag, masterDestinationFmtFlag); @@ -85,6 +83,8 @@ void G4MTcoutDestination::SetDefaultOutput(G4bool addmasterDestination, // Default behavior, add a destination that uses cout and uses a mutex auto output = G4coutDestinationUPtr(new G4LockcoutDestination); ref_defaultOut = output.get(); + output->AddDebugTransformer(filter_out); + output->AddDebugTransformer(f); output->AddCoutTransformer(filter_out); output->AddCoutTransformer(f); output->AddCerrTransformer(f); @@ -106,6 +106,7 @@ void G4MTcoutDestination::AddMasterOutput(G4bool formatAlsoMaster) this->ignoreCout || (this->ignoreInit && this->stateMgr->GetCurrentState() == G4State_Idle)); }; + forwarder->AddDebugTransformer(filter_out); forwarder->AddCoutTransformer(filter_out); if(formatAlsoMaster) { @@ -121,6 +122,7 @@ void G4MTcoutDestination::AddMasterOutput(G4bool formatAlsoMaster) msg = str.str(); return true; }; + forwarder->AddDebugTransformer(f); forwarder->AddCoutTransformer(f); forwarder->AddCerrTransformer(f); } @@ -155,8 +157,8 @@ void G4MTcoutDestination::HandleFileCout(const G4String& fileN, G4bool ifAppend, (ifAppend ? std::ios_base::app : std::ios_base::trunc); auto output = G4coutDestinationUPtr(new G4FilecoutDestination(fileN, mode)); - // This reacts only to G4cout, so let's make a filter that removes everything - // from G4cerr + // This reacts only to G4cout, so let's make a filter that ignores all other streams + output->AddDebugTransformer([](G4String&) { return false; }); output->AddCerrTransformer([](G4String&) { return false; }); push_back(std::move(output)); // Silence G4cout from default formatter @@ -179,6 +181,7 @@ void G4MTcoutDestination::HandleFileCerr(const G4String& fileN, G4bool ifAppend, std::ios_base::openmode mode = (ifAppend ? std::ios_base::app : std::ios_base::trunc); auto output = G4coutDestinationUPtr(new G4FilecoutDestination(fileN, mode)); + output->AddDebugTransformer([](G4String&) { return false; }); output->AddCoutTransformer([](G4String&) { return false; }); push_back(std::move(output)); if(suppressDefault) @@ -285,10 +288,36 @@ void G4MTcoutDestination::DumpBuffer() { G4AutoLock l(&coutm); std::ostringstream msg; + G4bool sep = false; + + sep = false; + msg.str(""); + msg.clear(); + msg << "=======================\n"; + msg << "debug buffer(s) for worker with ID:" << id << std::endl; + G4coutDestination::ReceiveG4cout(msg.str()); + std::for_each(begin(), end(), [this, &sep](G4coutDestinationUPtr& el) { + auto cout = dynamic_cast(el.get()); + if(cout != nullptr) + { + cout->FlushG4debug(); + if(sep) + { + G4coutDestination::ReceiveG4cout("==========\n"); + } + else + { + sep = true; + } + } + }); + + sep = false; + msg.str(""); + msg.clear(); msg << "=======================\n"; msg << "cout buffer(s) for worker with ID:" << id << std::endl; G4coutDestination::ReceiveG4cout(msg.str()); - G4bool sep = false; std::for_each(begin(), end(), [this, &sep](G4coutDestinationUPtr& el) { auto cout = dynamic_cast(el.get()); if(cout != nullptr) @@ -304,6 +333,7 @@ void G4MTcoutDestination::DumpBuffer() } } }); + sep = false; msg.str(""); msg.clear(); @@ -326,5 +356,6 @@ void G4MTcoutDestination::DumpBuffer() } } }); + G4coutDestination::ReceiveG4cout("=======================\n"); } diff --git a/source/global/management/src/G4MasterForwardcoutDestination.cc b/source/global/management/src/G4MasterForwardcoutDestination.cc index 25c78e00f06..4b801d83efb 100644 --- a/source/global/management/src/G4MasterForwardcoutDestination.cc +++ b/source/global/management/src/G4MasterForwardcoutDestination.cc @@ -36,6 +36,21 @@ namespace G4Mutex out_mutex = G4MUTEX_INITIALIZER; } +// -------------------------------------------------------------------- +G4int G4MasterForwardcoutDestination::ReceiveG4debug(const G4String& msg) +{ + // If a master destination is set check that we are not in a recursive + // situation, send the message to the master, using a lock to serialize calls + // Master is probably a (G)UI that is not thread-safe + + if((masterG4coutDestination != nullptr) && this != masterG4coutDestination) + { + G4AutoLock l(&out_mutex); + return masterG4coutDestination->ReceiveG4debug_(msg); + } + return 0; +} + // -------------------------------------------------------------------- G4int G4MasterForwardcoutDestination::ReceiveG4cout(const G4String& msg) { diff --git a/source/global/management/src/G4PhysicsModelCatalog.cc b/source/global/management/src/G4PhysicsModelCatalog.cc index b432db194c8..96d9704d925 100644 --- a/source/global/management/src/G4PhysicsModelCatalog.cc +++ b/source/global/management/src/G4PhysicsModelCatalog.cc @@ -591,6 +591,11 @@ void G4PhysicsModelCatalog::Initialize() { // IF YOU ARE NOT SURE, PLEASE CONTACT ONE OF THE COORDINATORS OF THE // GEANT4 PHYSICS WORKING GROUPS. + // Class: G4HadronicAbsorptionINCLXX + InsertModel( 26040, "model_hINCLXXCaptureAtRest_EMCascade" ); + InsertModel( 26041, "model_hINCLXXCaptureAtRest_NuclearCapture" ); + InsertModel( 26042, "model_hINCLXXCaptureAtRest_DIO" ); + // ... SanityCheck(); diff --git a/source/global/management/src/G4coutDestination.cc b/source/global/management/src/G4coutDestination.cc index b517d7ce127..4d25c3df4e9 100644 --- a/source/global/management/src/G4coutDestination.cc +++ b/source/global/management/src/G4coutDestination.cc @@ -37,10 +37,18 @@ G4coutDestination* G4coutDestination::masterG4coutDestination = nullptr; // -------------------------------------------------------------------- void G4coutDestination::ResetTransformers() { + transformersDebug.clear(); transformersCout.clear(); transformersCerr.clear(); } +// -------------------------------------------------------------------- +G4int G4coutDestination::ReceiveG4debug(const G4String& msg) +{ + std::cout << msg << std::flush; + return 0; +} + // -------------------------------------------------------------------- G4int G4coutDestination::ReceiveG4cout(const G4String& msg) { @@ -55,6 +63,28 @@ G4int G4coutDestination::ReceiveG4cerr(const G4String& msg) return 0; } +// -------------------------------------------------------------------- +G4int G4coutDestination::ReceiveG4debug_(const G4String& msg) +{ + // Avoid copy of string if not necessary + if(!transformersDebug.empty()) + { + G4String m = msg; + G4bool result = true; + for(const auto& el : transformersDebug) + { + result &= el(m); + if(!result) + { + break; + } + } + return (result ? ReceiveG4debug(m) : 0); + } + + return ReceiveG4debug(msg); +} + // -------------------------------------------------------------------- G4int G4coutDestination::ReceiveG4cout_(const G4String& msg) { diff --git a/source/global/management/src/G4coutFormatters.cc b/source/global/management/src/G4coutFormatters.cc index 98fa47c7d32..88abe39746e 100644 --- a/source/global/management/src/G4coutFormatters.cc +++ b/source/global/management/src/G4coutFormatters.cc @@ -122,8 +122,7 @@ namespace G4coutFormatters void SetupStyleGlobally(const G4String& news) { static G4coutDestination ss; - G4coutbuf.SetDestination(&ss); - G4cerrbuf.SetDestination(&ss); + G4iosSetDestination(&ss); G4coutFormatters::HandleStyle(&ss, news); G4coutFormatters::SetMasterStyle(news); } diff --git a/source/global/management/src/G4ios.cc b/source/global/management/src/G4ios.cc index 91c02d5adce..6dd8ad0318f 100644 --- a/source/global/management/src/G4ios.cc +++ b/source/global/management/src/G4ios.cc @@ -29,20 +29,153 @@ // -------------------------------------------------------------------- #include "G4ios.hh" -#include "G4strstreambuf.hh" + +#include "G4coutDestination.hh" + #include +namespace +{ +// Concrete streambuf redirecting output to G4coutDestination via G4cout etc +// Templated on two policy types to determine: +// - DestinationPolicy: which member member function of G4coutDestination to redirect to +// - DefaultPolicy: what to do if G4coutDestination is default (nullptr) +template +class G4strstreambuf : public std::basic_streambuf +{ + public: + G4strstreambuf() + { + size = 4095; + buffer = new char[size + 1]; + } + + ~G4strstreambuf() override + { + // flushing buffer... + // std::cout is used because destination object may not be alive. + if (count != 0) { + buffer[count] = '\0'; + std::cout << buffer; + } + delete[] buffer; + } + + G4strstreambuf(const G4strstreambuf&) = delete; + G4strstreambuf& operator=(const G4strstreambuf&) = delete; + + G4int overflow(G4int c = EOF) override + { + G4int result = 0; + if (count >= size) result = sync(); + + buffer[count] = (char)c; + count++; + + return result; + } + + G4int sync() override + { + buffer[count] = '\0'; + count = 0; + return ReceiveString(); + } + +#ifdef WIN32 + virtual G4int underflow() { return 0; } +#endif + + void SetDestination(G4coutDestination* dest) { destination = dest; } + + inline G4int ReceiveString() + { + G4String stringToSend(buffer); + if (destination != nullptr) { + return DestinationPolicy::PostMessage(destination, stringToSend); + } + return DefaultPolicy::PostMessage(stringToSend); + } + + private: + char* buffer = nullptr; + G4int count = 0; + G4int size = 0; + G4coutDestination* destination = nullptr; +}; + +// Policies +struct PostToG4debug +{ + static inline G4int PostMessage(G4coutDestination* d, const G4String& s) + { + return d->ReceiveG4debug_(s); + } +}; + +struct PostToG4cout +{ + static inline G4int PostMessage(G4coutDestination* d, const G4String& s) + { + return d->ReceiveG4cout_(s); + } +}; + +struct PostToG4cerr +{ + static inline G4int PostMessage(G4coutDestination* d, const G4String& s) + { + return d->ReceiveG4cerr_(s); + } +}; + +struct DefaultToCout +{ + static inline G4int PostMessage(const G4String& s) + { + std::cout << s << std::flush; + return 0; + } +}; + +struct DefaultToCerr +{ + static inline G4int PostMessage(const G4String& s) + { + std::cerr << s << std::flush; + return 0; + } +}; + +using G4debugstreambuf = G4strstreambuf; +using G4coutstreambuf = G4strstreambuf; +using G4cerrstreambuf = G4strstreambuf; +} // namespace + #ifdef G4MULTITHREADED +// --- StreamBuffers +G4debugstreambuf*& _G4debugbuf_p() +{ + G4ThreadLocalStatic auto* _instance = new G4debugstreambuf; + return _instance; +} + +G4coutstreambuf*& _G4coutbuf_p() +{ + G4ThreadLocalStatic auto* _instance = new G4coutstreambuf; + return _instance; +} -G4strstreambuf*& _G4coutbuf_p() +G4cerrstreambuf*& _G4cerrbuf_p() { - G4ThreadLocalStatic auto* _instance = new G4strstreambuf(); + G4ThreadLocalStatic auto* _instance = new G4cerrstreambuf; return _instance; } -G4strstreambuf*& _G4cerrbuf_p() +// --- Streams +std::ostream*& _G4debug_p() { - G4ThreadLocalStatic auto* _instance = new G4strstreambuf(); + G4ThreadLocalStatic auto* _instance = new std::ostream(_G4debugbuf_p()); return _instance; } @@ -58,59 +191,74 @@ std::ostream*& _G4cerr_p() return _instance; } -# define G4coutbuf (*_G4coutbuf_p()) -# define G4cerrbuf (*_G4cerrbuf_p()) -# define G4cout (*_G4cout_p()) -# define G4cerr (*_G4cerr_p()) - void G4iosInitialization() { - if(_G4coutbuf_p() == nullptr) - { - _G4coutbuf_p() = new G4strstreambuf; + // --- Stream Buffers + if (_G4debugbuf_p() == nullptr) { + _G4debugbuf_p() = new G4debugstreambuf; } - if(_G4cerrbuf_p() == nullptr) - { - _G4cerrbuf_p() = new G4strstreambuf; + if (_G4coutbuf_p() == nullptr) { + _G4coutbuf_p() = new G4coutstreambuf; } - if(_G4cout_p() == &std::cout || _G4cout_p() == nullptr) - { + if (_G4cerrbuf_p() == nullptr) { + _G4cerrbuf_p() = new G4cerrstreambuf; + } + + // --- Streams + if (_G4debug_p() == &std::cout || _G4debug_p() == nullptr) { + _G4debug_p() = new std::ostream(_G4debugbuf_p()); + } + if (_G4cout_p() == &std::cout || _G4cout_p() == nullptr) { _G4cout_p() = new std::ostream(_G4coutbuf_p()); } - if(_G4cerr_p() == &std::cerr || _G4cerr_p() == nullptr) - { + if (_G4cerr_p() == &std::cerr || _G4cerr_p() == nullptr) { _G4cerr_p() = new std::ostream(_G4cerrbuf_p()); } } void G4iosFinalization() { + // Reverse order + // --- Streams + delete _G4debug_p(); + _G4debug_p() = &std::cout; delete _G4cout_p(); _G4cout_p() = &std::cout; delete _G4cerr_p(); _G4cerr_p() = &std::cerr; + + // --- Stream Buffers + delete _G4debugbuf_p(); + _G4debugbuf_p() = nullptr; delete _G4coutbuf_p(); _G4coutbuf_p() = nullptr; delete _G4cerrbuf_p(); _G4cerrbuf_p() = nullptr; } +# define G4debugbuf (*_G4debugbuf_p()) +# define G4coutbuf (*_G4coutbuf_p()) +# define G4cerrbuf (*_G4cerrbuf_p()) + // These two functions are guaranteed to be called at load and // unload of the library containing this code. namespace { # ifndef WIN32 - void setupG4ioSystem() __attribute__((constructor)); - void cleanupG4ioSystem() __attribute__((destructor)); +void setupG4ioSystem() __attribute__((constructor)); +void cleanupG4ioSystem() __attribute__((destructor)); # endif - void setupG4ioSystem() { G4iosInitialization(); } - void cleanupG4ioSystem() { G4iosFinalization(); } +void setupG4ioSystem() { G4iosInitialization(); } +void cleanupG4ioSystem() { G4iosFinalization(); } } // namespace #else // Sequential -G4strstreambuf G4coutbuf; -G4strstreambuf G4cerrbuf; +G4debugstreambuf G4debugbuf; +G4coutstreambuf G4coutbuf; +G4cerrstreambuf G4cerrbuf; + +std::ostream G4debug(&G4debugbuf); std::ostream G4cout(&G4coutbuf); std::ostream G4cerr(&G4cerrbuf); @@ -118,3 +266,10 @@ void G4iosInitialization() {} void G4iosFinalization() {} #endif + +void G4iosSetDestination(G4coutDestination* sink) +{ + G4debugbuf.SetDestination(sink); + G4coutbuf.SetDestination(sink); + G4cerrbuf.SetDestination(sink); +} diff --git a/source/graphics_reps/GNUmakefile b/source/graphics_reps/GNUmakefile deleted file mode 100644 index fee5b0e69cc..00000000000 --- a/source/graphics_reps/GNUmakefile +++ /dev/null @@ -1,25 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for graphics_reps library. John Allison, 19/7/96. -# -------------------------------------------------------------- - -name := G4graphics_reps - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -GLOBLIBS = libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4GREPS_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include -CPPFLAGS += -I$(G4BASE)/global/HEPGeometry/include -CPPFLAGS += -I$(G4BASE)/intercoms/include - -include $(G4INSTALL)/config/common.gmk - -.PHONY: global - -global: lib - diff --git a/source/graphics_reps/History b/source/graphics_reps/History index 21be49bc81e..b041af62e53 100644 --- a/source/graphics_reps/History +++ b/source/graphics_reps/History @@ -6,6 +6,34 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-05-09 John Allison (greps-V11-01-04) +- Coworks: visman-V11-01-10 and interfaces-V11-01-15. +- G4SceneTreeItem: + - Add data member fExpanded. + +## 2023-04-14 John Allison (greps-V11-01-03) +- Co-working: visman-V11-01-04, interfaces-V11-01-11, opengl-V11-01-06, + openinventor-V11-01-04, vis_toolssg-V11-01-05. +- New Scene Tree Phase 2 - first implementation of a no-frills GUI-side + - See visualization/management/History for full description. +- G4SceneTreeItem: + - Make it explicit that the default copy constructor and assignment + operator copy the whole tree hanging from this item. + - Replace Dump by DumpSingleItem to make its function explicit. + - Move DumpTree from static function to member function. + - Improve comments. + +## 2023-04-07 John Allison (greps-V11-01-02) +- G4SceneTreeItem: enum Type: Add "pvmodel" special case. + +## 2023-03-28 John Allison (greps-V11-01-01) +- Add `G4SceneTreeItem.hh/.cc`. +- clang-tidy the above. +- `G4AttValue.hh`: Add `~G4AttValue()= default`. + +## 2022-12-12 Ben Morgan (greps-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-11-17 Gabriele Cosmo (greps-V11-00-16) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/graphics_reps/include/G4AttValue.hh b/source/graphics_reps/include/G4AttValue.hh index c85a1cecc72..7faa0a0d2dc 100644 --- a/source/graphics_reps/include/G4AttValue.hh +++ b/source/graphics_reps/include/G4AttValue.hh @@ -58,7 +58,8 @@ m_name(name),m_value(value), m_showLabel(showLabel){}; G4AttValue()= default; - + ~G4AttValue()= default; + const G4String& GetName()const{return m_name;}; const G4String& GetValue()const{return m_value;}; const G4String& GetShowLabel()const{return m_showLabel;}; diff --git a/source/graphics_reps/include/G4SceneTreeItem.hh b/source/graphics_reps/include/G4SceneTreeItem.hh new file mode 100644 index 00000000000..f2cd8036d39 --- /dev/null +++ b/source/graphics_reps/include/G4SceneTreeItem.hh @@ -0,0 +1,135 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// + +#ifndef G4SceneTreeItem_hh +#define G4SceneTreeItem_hh + +#include "G4AttDef.hh" +#include "G4AttValue.hh" +#include "G4VisAttributes.hh" +#include "globals.hh" + +#include +#include +#include + +class G4SceneTreeItem +{ + public: + // A ghost is a touchable we know to be there but know only its path + enum Type + { + unidentified, + root, + model, + pvmodel, // Physical Volume model - special case + ghost, + touchable + }; + + explicit G4SceneTreeItem(Type type = unidentified) { fType = type; } + ~G4SceneTreeItem() = default; + + // Copy contructor copies the whole tree, i.e., children and all descendants + G4SceneTreeItem(const G4SceneTreeItem&) = default; + + // Assigns the whole tree, i.e., children and all descendants + G4SceneTreeItem& operator= (const G4SceneTreeItem&) = default; + + // Access functions + + Type GetType() const { return fType; } + const G4String& GetTypeString() const { return fTypeMap[fType]; } + void SetType(Type type) { fType = type; } + + const G4String& GetPVPath() const { return fPVPath; } + void SetPVPath(const G4String& PVPath) { fPVPath = PVPath; } + + const G4String& GetDescription() const { return fDescription; } + void SetDescription(const G4String& description) { fDescription = description; } + + const G4String& GetModelType() const { return fModelType; } + void SetModelType(const G4String& modelType) { fModelType = modelType; } + + const G4String& GetModelDescription() const { return fModelDescription; } + void SetModelDescription(const G4String& modelDescription) + { + fModelDescription = modelDescription; + } + + const std::map* GetAttDefs() const { return fpAttDefs; } + void SetAttDefs(const std::map* pAttDefs) { fpAttDefs = pAttDefs; }; + + std::vector* GetAttValues() const { return fpAttValues; } + void SetAttValues(std::vector* pAttValues) { fpAttValues = pAttValues; } + + const G4VisAttributes& GetVisAttributes() const { return fVisAttributes; } + G4VisAttributes& AccessVisAttributes() { return fVisAttributes; } + void SetVisAttributes(const G4VisAttributes& visAtts) { fVisAttributes = visAtts; } + + const std::list& GetChildren() const { return fChildren; } + // Insert item at - or rather, just before - pos + std::list::iterator InsertChild(std::list::iterator pos, + const G4SceneTreeItem& item) + { + return fChildren.insert(pos, item); + } + std::list& AccessChildren() { return fChildren; } + + G4bool IsExpanded() const { return fExpanded; } + void SetExpanded(G4bool expanded) { fExpanded = expanded; } + + // Utility functions + + // Reset visibility of all objects to false - visible objects will then set to true + void ResetVisibility(); + + // If found, returns "true" and places iterator in foundIter + G4bool FindTouchableFromRoot(const G4String& fullPathString, + std::list::iterator& foundIter); + + // Dump single item, i.e., ignore any children + void DumpSingleItem(std::ostream&, G4int verbosity = 0) const; + + // Dump whole tree + void DumpTree(std::ostream&, G4int verbosity = 0) const; + + private: + Type fType = unidentified; + static std::map fTypeMap; + G4String fDescription; + G4String fModelType = "none"; + G4String fModelDescription; + G4String fPVPath; + G4VisAttributes fVisAttributes; + const std::map* fpAttDefs = nullptr; + std::vector* fpAttValues = nullptr; + std::list fChildren; + G4bool fExpanded = true; +}; + +#endif // G4SceneTreeItem_hh diff --git a/source/graphics_reps/sources.cmake b/source/graphics_reps/sources.cmake index a797841218c..7ce613299fc 100644 --- a/source/graphics_reps/sources.cmake +++ b/source/graphics_reps/sources.cmake @@ -25,6 +25,7 @@ geant4_add_module(G4graphics_reps G4Polyline.hh G4Polymarker.hh G4Polymarker.icc + G4SceneTreeItem.hh G4SmartFilter.hh G4Square.hh G4Square.icc @@ -62,6 +63,7 @@ geant4_add_module(G4graphics_reps G4PolyhedronArbitrary.cc G4Polyline.cc G4Polymarker.cc + G4SceneTreeItem.cc G4Square.cc G4Text.cc G4Plotter.cc diff --git a/source/graphics_reps/src/G4SceneTreeItem.cc b/source/graphics_reps/src/G4SceneTreeItem.cc new file mode 100644 index 00000000000..3dc69164ffa --- /dev/null +++ b/source/graphics_reps/src/G4SceneTreeItem.cc @@ -0,0 +1,246 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// + +#include "G4SceneTreeItem.hh" + +#include "G4AttCheck.hh" + +#include + +// A ghost is a touchable we know to be there but know only its path +std::map G4SceneTreeItem::fTypeMap = { + {G4SceneTreeItem::unidentified, "unidentified"}, + {G4SceneTreeItem::root, "root"}, + {G4SceneTreeItem::ghost, "ghost"}, + {G4SceneTreeItem::model, "model"}, + {G4SceneTreeItem::pvmodel, "pvmodel"}, + {G4SceneTreeItem::touchable, "touchable"}}; + +// Reset visibility of all objects to false - visible objects will then set to true +void G4SceneTreeItem::ResetVisibility() +{ + // Reset all but the root item, which is always visible (i.e., active) + // Other items will be set visible if and when presented to the scene + if (fType != root) fVisAttributes.SetVisibility(false); + for (auto& child : fChildren) + child.ResetVisibility(); +} + +// If found, returns "true" and places iterator in foundIter +G4bool G4SceneTreeItem::FindTouchableFromRoot(const G4String& fullPathString, + std::list::iterator& foundIter) +{ + if (fType != root) { + G4ExceptionDescription ed; + ed << "Not a root item:\n"; + DumpSingleItem(ed); + G4Exception("G4SceneTreeItem::FindTouchableFromRoot", "greps0011", JustWarning, ed); + return false; + } + + for (auto& aModel : fChildren) { + if (aModel.fModelType == "G4PhysicalVolumeModel") { // Top item, i.e., root of touchables + // Work down the path - "name id", then "name id name id", etc. + G4String partialPathString; + auto iter = aModel.fChildren.begin(); + auto iterEnd = aModel.fChildren.end(); + std::istringstream iss(fullPathString); + G4String name, copyNo; + while (iss >> name >> copyNo) { + partialPathString += ' ' + name + ' ' + copyNo; + for (; iter != iterEnd; ++iter) { + if (iter->fPVPath == partialPathString) { + if (partialPathString != fullPathString) { + // Go to next level + iter = iter->fChildren.begin(); + iterEnd = iter->fChildren.end(); + } + break; + } + } + if (iter != iterEnd) { // Found + foundIter = iter; + return true; + } + } + } + } + return false; +} + +// Dump single item, i.e., ignore any children +void G4SceneTreeItem::DumpSingleItem(std::ostream& os, G4int verbosity) const +{ + static G4bool first = true; + if (first) { + first = false; + os << " Verbosity actions:" + << "\n >=0 one line" + << "\n >=1 a few lines" + << "\n >=2 check G4Atts" + << "\n >=3 print G4Atts" + << "\n >=4 print some attValues" + << '\n'; + } + + os << GetTypeString() << " ("; + G4String status; + switch (fType) { + case unidentified: + status = "error"; + break; + case root: + status = "active"; + break; + case model: + [[fallthrough]]; + case pvmodel: + status = (fVisAttributes.IsVisible() ? "active" : "inactive"); + break; + case ghost: + [[fallthrough]]; + case touchable: + status = (fVisAttributes.IsVisible() ? "visible" : "invisible"); + break; + } + if (fExpanded) { + status += ",expanded"; + } else { + status += ",collapsed"; + } + os << status << ')'; + + G4String description; + switch (fType) { + case unidentified: + break; + case root: + break; + case model: + [[fallthrough]]; + case pvmodel: + description = " \"" + fModelDescription + '"'; + break; + case ghost: + [[fallthrough]]; + case touchable: + description = " (" + fPVPath.substr(1, fPVPath.length() - 1) + ')'; + break; + } + os << description; + + if (fType == touchable) { + os << ' ' << fVisAttributes.GetColour(); + } + + // clang-format off + if (verbosity >= 1) { + os << "\n Description: " << GetDescription() + << "\n Model type: " << GetModelType() + << "\n Model description: " << GetModelDescription() + << "\n " << fChildren.size() << (fChildren.size()==1?" child":" children"); + } + // clang-format on + + if (verbosity >= 2) { + const auto& attDefs = GetAttDefs(); + const auto& attValues = GetAttValues(); + if (attDefs == nullptr || attValues == nullptr) { + os << "\n No G4Atts"; // Legitimate + } + else { + G4AttCheck attCheck(attValues, attDefs); + if (attCheck.Check("G4SceneTreeItem::Dump")) { + G4ExceptionDescription ed; + ed << "Item: " << attCheck; + G4Exception("G4SceneTreeItem::Dump", "greps0010", JustWarning, ed, + "G4Atts don't check out"); + return; + } + + if (verbosity >= 3) { + os << "\n G4Atts:\n" << attCheck; + static G4bool first1 = true; + if (first1) { + first1 = false; + os << "\n Available G4Atts for touchable:"; + // clang-format off + for (const auto& att: *GetAttDefs()) { + os << "\n " << att.first + << ',' << att.second.GetName() + << ',' << att.second.GetDesc() + << ',' << att.second.GetCategory() + << ',' << att.second.GetExtra() + << ',' << att.second.GetValueType() + << ',' << att.second.GetTypeKey(); + } + // clang-format on + os << '\n'; + } + } + + if (verbosity >= 4) { + for (G4String name : {"PVPath", "GlobalExtent"}) { + G4String result; + const auto& iterAttDef = attDefs->find(name); + if (iterAttDef != attDefs->end()) { + result = result + "\n " + iterAttDef->second.GetName(); + result = result + ", " + iterAttDef->second.GetDesc(); + } + const G4AttValue* pAttValue = nullptr; + for (const auto& attValue : *attValues) { + // Why are the attValues not in a map like the attDefs??? + if (attValue.GetName() == name) { + pAttValue = &attValue; // Avoid copy + break; + } + } + if (pAttValue) { + result = result + ", " + pAttValue->GetValue(); + } + + os << result; + } + } + } + } + + os << std::endl; +} + +// Dump whole tree +void G4SceneTreeItem::DumpTree(std::ostream& os, G4int verbosity) const +{ + static G4int depth = 0; + for (G4int i = 0; i < depth; i++) os << " "; + DumpSingleItem(os, verbosity); + for (auto& child : GetChildren()) { + depth++; + child.DumpTree(os, verbosity); + depth--; + } +} diff --git a/source/intercoms/GNUmakefile b/source/intercoms/GNUmakefile deleted file mode 100644 index a14bc70ce74..00000000000 --- a/source/intercoms/GNUmakefile +++ /dev/null @@ -1,25 +0,0 @@ -# ------------------------------------------------------------- -# GNUmakefile for intercoms library. Gabriele Cosmo, 11/11/96. -# ------------------------------------------------------------- - -name := G4intercoms - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -GLOBLIBS = libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4ICOMS_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include - -include $(G4INSTALL)/config/common.gmk - -.PHONY: global - -global: lib - diff --git a/source/intercoms/History b/source/intercoms/History index 508cc20d5d7..c322f361fa5 100644 --- a/source/intercoms/History +++ b/source/intercoms/History @@ -6,10 +6,27 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-05-03 Gabriele Cosmo (intercoms-V11-00-07) +## 2023-05-03 Gabriele Cosmo (intercoms-V11-01-05) - Fixed compilation warning on gcc-13.1 for array subscript outside array bounds in G4ProfilerMessenger::SetNewValue(). +## 2023-03-31 Ben Morgan (intercoms-V11-01-04) +- Factor G4UIcommand/parameter range validation functions to reduce code duplication + +## 2023-03-24 Ben Morgan (intercoms-V11-01-03) +- Apply clang-tidy and format fixes plus normal ordering of docstrings/access specifications. +- Move clear implementation detail classes to private headers. + +## 2023-01-09 Ben Morgan (intercoms-V11-01-02) +- Implement ReceiveG4debug for G4UIsession et al. + +## 2022-12-14 Ben Morgan (intercoms-V11-01-01) +- Replace direct access to G4cout/etc stream buffers with call to G4coutDestination + installer function. + +## 2022-12-12 Ben Morgan (intercoms-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-11-18 Gabriele Cosmo (intercoms-V11-00-06) - More compilation warnings fixes for implicit type conversions. diff --git a/source/intercoms/include/G4AnyMethod.hh b/source/intercoms/include/G4AnyMethod.hh index 138b274fbdb..964a0aea6da 100644 --- a/source/intercoms/include/G4AnyMethod.hh +++ b/source/intercoms/include/G4AnyMethod.hh @@ -47,58 +47,47 @@ #ifndef G4AnyMethod_hh #define G4AnyMethod_hh 1 +#include "G4Types.hh" + #include +#include +#include /** Bad Argument exception */ class G4BadArgument : public std::bad_cast { - public: - G4BadArgument() = default; - const char* what() const throw() override - { - return "G4BadArgument: failed operator()"; - } + public: + G4BadArgument() = default; + const char* what() const throw() override { return "G4BadArgument: failed operator()"; } }; -#include -using std::remove_const; -using std::remove_reference; - class G4AnyMethod { public: + G4AnyMethod() = default; - /** contructors */ - - G4AnyMethod() = default; - - template - G4AnyMethod(S (T::*f)()) - { - fContent = new FuncRef(f); + template + G4AnyMethod(S (T::*f)()) + { + fContent = new FuncRef(f); } - template - G4AnyMethod(S (T::*f)(A0)) - : narg(1) + template + G4AnyMethod(S (T::*f)(A0)) : narg(1) { fContent = new FuncRef1(f); } - template - G4AnyMethod(S (T::*f)(A0, A1)) - : narg(2) + template + G4AnyMethod(S (T::*f)(A0, A1)) : narg(2) { fContent = new FuncRef2(f); } G4AnyMethod(const G4AnyMethod& other) - : fContent(other.fContent != nullptr ? other.fContent->Clone() : nullptr) - , narg(other.narg) + : fContent(other.fContent != nullptr ? other.fContent->Clone() : nullptr), narg(other.narg) {} - /** destructor */ - ~G4AnyMethod() { delete fContent; } G4AnyMethod& Swap(G4AnyMethod& rhs) @@ -108,9 +97,7 @@ class G4AnyMethod return *this; } - /** Assignment operators */ - - template + template G4AnyMethod& operator=(S (T::*f)()) { G4AnyMethod(f).Swap(*this); @@ -118,14 +105,14 @@ class G4AnyMethod return *this; } - template + template G4AnyMethod& operator=(S (T::*f)(A0)) { G4AnyMethod(f).Swap(*this); narg = 1; return *this; } - template + template G4AnyMethod& operator=(S (T::*f)(A0, A1)) { G4AnyMethod(f).Swap(*this); @@ -147,10 +134,7 @@ class G4AnyMethod /** call operators */ void operator()(void* obj) { fContent->operator()(obj); } - void operator()(void* obj, const std::string& a0) - { - fContent->operator()(obj, a0); - } + void operator()(void* obj, const std::string& a0) { fContent->operator()(obj, a0); } /** Number of arguments */ @@ -162,91 +146,72 @@ class G4AnyMethod } private: - class Placeholder { public: - Placeholder() = default; - virtual ~Placeholder() = default; - virtual Placeholder* Clone() const = 0; - virtual void operator()(void*) = 0; - virtual void operator()(void*, const std::string&) = 0; - virtual const std::type_info& ArgType(size_t) const = 0; + Placeholder() = default; + virtual ~Placeholder() = default; + virtual Placeholder* Clone() const = 0; + virtual void operator()(void*) = 0; + virtual void operator()(void*, const std::string&) = 0; + virtual const std::type_info& ArgType(size_t) const = 0; }; - template + template struct FuncRef : public Placeholder { - FuncRef(S (T::*f)()) - : fRef(f) - {} - - void operator()(void* obj) override { ((T*) obj->*fRef)(); } - void operator()(void*, const std::string&) override - { - throw G4BadArgument(); - } - Placeholder* Clone() const override { return new FuncRef(fRef); } - const std::type_info& ArgType(std::size_t) const override - { - return typeid(void); - } - S (T::*fRef)(); + FuncRef(S (T::*f)()) : fRef(f) {} + + void operator()(void* obj) override { ((T*)obj->*fRef)(); } + void operator()(void*, const std::string&) override { throw G4BadArgument(); } + Placeholder* Clone() const override { return new FuncRef(fRef); } + const std::type_info& ArgType(std::size_t) const override { return typeid(void); } + S (T::*fRef)(); }; - template + template struct FuncRef1 : public Placeholder { - using nakedA0 = - typename remove_const::type>::type; - - FuncRef1(S (T::*f)(A0)) - : fRef(f) - {} - - void operator()(void*) override { throw G4BadArgument(); } - void operator()(void* obj, const std::string& s0) override - { - nakedA0 a0; - std::stringstream strs(s0); - strs >> a0; - ((T*) obj->*fRef)(a0); - } - Placeholder* Clone() const override { return new FuncRef1(fRef); } - const std::type_info& ArgType(size_t) const override - { - return typeid(A0); - } - S (T::*fRef)(A0); + using nakedA0 = std::remove_const_t>; + + FuncRef1(S (T::*f)(A0)) : fRef(f) {} + + void operator()(void*) override { throw G4BadArgument(); } + void operator()(void* obj, const std::string& s0) override + { + nakedA0 a0; + std::stringstream strs(s0); + strs >> a0; + ((T*)obj->*fRef)(a0); + } + Placeholder* Clone() const override { return new FuncRef1(fRef); } + const std::type_info& ArgType(size_t) const override { return typeid(A0); } + S (T::*fRef)(A0); }; - template + template struct FuncRef2 : public Placeholder { - using nakedA0 = - typename remove_const::type>::type; - using nakedA1 = - typename remove_const::type>::type; - - FuncRef2(S (T::*f)(A0, A1)) - : fRef(f) - {} - - void operator()(void*) override { throw G4BadArgument(); } - void operator()(void* obj, const std::string& s0) override - { - nakedA0 a0; - nakedA1 a1; - std::stringstream strs(s0); - strs >> a0 >> a1; - ((T*) obj->*fRef)(a0, a1); - } - Placeholder* Clone() const override { return new FuncRef2(fRef); } - const std::type_info& ArgType(size_t i) const override - { - return i == 0 ? typeid(A0) : typeid(A1); - } - S (T::*fRef)(A0, A1); + using nakedA0 = std::remove_const_t>; + using nakedA1 = std::remove_const_t>; + + FuncRef2(S (T::*f)(A0, A1)) : fRef(f) {} + + void operator()(void*) override { throw G4BadArgument(); } + void operator()(void* obj, const std::string& s0) override + { + nakedA0 a0; + nakedA1 a1; + std::stringstream strs(s0); + strs >> a0 >> a1; + ((T*)obj->*fRef)(a0, a1); + } + Placeholder* Clone() const override { return new FuncRef2(fRef); } + const std::type_info& ArgType(size_t i) const override + { + return i == 0 ? typeid(A0) : typeid(A1); + } + S (T::*fRef)(A0, A1); }; Placeholder* fContent = nullptr; diff --git a/source/intercoms/include/G4AnyType.hh b/source/intercoms/include/G4AnyType.hh index 83d0766c9e6..29802261b25 100644 --- a/source/intercoms/include/G4AnyType.hh +++ b/source/intercoms/include/G4AnyType.hh @@ -26,7 +26,7 @@ // G4AnyType // // Class description: -// +// // The class G4AnyType represents any data type. // The class only holds a reference to the type and not the value. @@ -47,55 +47,53 @@ #ifndef G4AnyType_hh #define G4AnyType_hh 1 +#include "G4UIcommand.hh" + #include -#include #include #include - -#include "G4UIcommand.hh" +#include class G4String; namespace CLHEP { - class Hep3Vector; +class Hep3Vector; } class G4AnyType { public: - /** Constructors */ - G4AnyType() = default; + G4AnyType() = default; - template - G4AnyType(ValueType& value) - : fContent(new Ref(value)) - {} + template + G4AnyType(ValueType& value) : fContent(new Ref(value)) + {} - /** Copy Constructor */ + /** Copy Constructor */ - G4AnyType(const G4AnyType& other) - : fContent(other.fContent != nullptr ? other.fContent->Clone() : nullptr) - {} + G4AnyType(const G4AnyType& other) + : fContent(other.fContent != nullptr ? other.fContent->Clone() : nullptr) + {} - /** Destructor */ + /** Destructor */ - ~G4AnyType() { delete fContent; } + ~G4AnyType() { delete fContent; } - /** bool operator */ + /** bool operator */ - operator bool() { return !Empty(); } + operator bool() { return !Empty(); } - /** Modifiers */ + /** Modifiers */ - G4AnyType& Swap(G4AnyType& rhs) - { - std::swap(fContent, rhs.fContent); - return *this; + G4AnyType& Swap(G4AnyType& rhs) + { + std::swap(fContent, rhs.fContent); + return *this; } - template + template G4AnyType& operator=(const ValueType& rhs) { G4AnyType(rhs).Swap(*this); @@ -119,9 +117,7 @@ class G4AnyType /** Address */ - void* Address() const { - return fContent != nullptr ? fContent->Address() : nullptr; - } + void* Address() const { return fContent != nullptr ? fContent->Address() : nullptr; } /** String conversions */ @@ -130,48 +126,41 @@ class G4AnyType void FromString(const std::string& val) { fContent->FromString(val); } private: - class Placeholder { public: - Placeholder() = default; + Placeholder() = default; - virtual ~Placeholder() = default; + virtual ~Placeholder() = default; - /** Queries */ + /** Queries */ - virtual const std::type_info& TypeInfo() const = 0; + virtual const std::type_info& TypeInfo() const = 0; - virtual Placeholder* Clone() const = 0; + virtual Placeholder* Clone() const = 0; - virtual void* Address() const = 0; + virtual void* Address() const = 0; - /** ToString */ + /** ToString */ - virtual std::string ToString() const = 0; + virtual std::string ToString() const = 0; - /** FromString */ + /** FromString */ - virtual void FromString(const std::string& val) = 0; + virtual void FromString(const std::string& val) = 0; }; - template + template class Ref : public Placeholder { public: - /** Constructor */ - Ref(ValueType& value) - : fRef(value) - {} + Ref(ValueType& value) : fRef(value) {} /** Query */ - const std::type_info& TypeInfo() const override - { - return typeid(ValueType); - } + const std::type_info& TypeInfo() const override { return typeid(ValueType); } /** Clone */ @@ -179,7 +168,7 @@ class G4AnyType /** Address */ - void* Address() const override { return (void*) (&fRef); } + void* Address() const override { return (void*)(&fRef); } /** ToString */ @@ -203,7 +192,7 @@ class G4AnyType /** representation */ - template + template friend ValueType* any_cast(G4AnyType*); Placeholder* fContent = nullptr; @@ -213,26 +202,24 @@ class G4AnyType // Specializations // -template <> +template<> inline void G4AnyType::Ref::FromString(const std::string& val) { fRef = G4UIcommand::ConvertToBool(val.c_str()); } -template <> +template<> inline void G4AnyType::Ref::FromString(const std::string& val) { - if(val[0] == '"') - { + if (val[0] == '"') { fRef = val.substr(1, val.size() - 2); } - else - { + else { fRef = val; } } -template <> +template<> inline void G4AnyType::Ref::FromString(const std::string& val) { fRef = G4UIcommand::ConvertTo3Vector(val.c_str()); @@ -245,17 +232,17 @@ inline void G4AnyType::Ref::FromString(const std::string& val) class G4BadAnyCast : public std::bad_cast { public: - G4BadAnyCast() = default; + G4BadAnyCast() = default; - const char* what() const throw() override - { - return "G4BadAnyCast: failed conversion using any_cast"; + const char* what() const throw() override + { + return "G4BadAnyCast: failed conversion using any_cast"; } }; /** value */ -template +template ValueType* any_cast(G4AnyType* operand) { return operand && operand->TypeInfo() == typeid(ValueType) @@ -263,18 +250,17 @@ ValueType* any_cast(G4AnyType* operand) : nullptr; } -template +template const ValueType* any_cast(const G4AnyType* operand) { return any_cast(const_cast(operand)); } -template +template ValueType any_cast(const G4AnyType& operand) { const ValueType* result = any_cast(&operand); - if(!result) - { + if (!result) { throw G4BadAnyCast(); } return *result; diff --git a/source/intercoms/include/G4GenericMessenger.hh b/source/intercoms/include/G4GenericMessenger.hh index e1d6c4f1f4a..ff74e0603da 100644 --- a/source/intercoms/include/G4GenericMessenger.hh +++ b/source/intercoms/include/G4GenericMessenger.hh @@ -34,11 +34,11 @@ #ifndef G4GenericMessenger_hh #define G4GenericMessenger_hh 1 -#include "G4UImessenger.hh" -#include "G4UIcommand.hh" -#include "G4AnyType.hh" #include "G4AnyMethod.hh" +#include "G4AnyType.hh" #include "G4ApplicationState.hh" +#include "G4UIcommand.hh" +#include "G4UImessenger.hh" #include #include @@ -48,160 +48,136 @@ class G4UIdirectory; class G4GenericMessenger : public G4UImessenger { public: + // Contructor + G4GenericMessenger(void* obj, const G4String& dir = "", const G4String& doc = ""); - G4GenericMessenger(void* obj, const G4String& dir = "", - const G4String& doc = ""); - // Contructor - - ~G4GenericMessenger() override; // Destructor + ~G4GenericMessenger() override; - G4String GetCurrentValue(G4UIcommand* command) override; // The concrete, but generic implementation of this method. + G4String GetCurrentValue(G4UIcommand* command) override; - void SetNewValue(G4UIcommand* command, G4String newValue) override; // The concrete, generic implementation of this method converts // the string "newValue" to action. + void SetNewValue(G4UIcommand* command, G4String newValue) override; - public: - + public: struct Command { - enum UnitSpec - { - UnitCategory, - UnitDefault - }; - Command(G4UIcommand* cmd, const std::type_info& ti) - : command(cmd) - , type(&ti) - {} - Command() = default; - - Command& SetStates(G4ApplicationState s0) - { - command->AvailableForStates(s0); - return *this; - } - Command& SetStates(G4ApplicationState s0, G4ApplicationState s1) - { - command->AvailableForStates(s0, s1); - return *this; - } - Command& SetStates(G4ApplicationState s0, G4ApplicationState s1, - G4ApplicationState s2) - { - command->AvailableForStates(s0, s1, s2); - return *this; - } - Command& SetStates(G4ApplicationState s0, G4ApplicationState s1, - G4ApplicationState s2, G4ApplicationState s3) - { - command->AvailableForStates(s0, s1, s2, s3); - return *this; - } - Command& SetStates(G4ApplicationState s0, G4ApplicationState s1, - G4ApplicationState s2, G4ApplicationState s3, - G4ApplicationState s4) - { - command->AvailableForStates(s0, s1, s2, s3, s4); - return *this; - } - Command& SetRange(const G4String& range) - { - command->SetRange(range.c_str()); - return *this; - } - Command& SetGuidance(const G4String& s0) - { - command->SetGuidance(s0); - return *this; - } - Command& SetUnit(const G4String&, UnitSpec = UnitDefault); - Command& SetUnitCategory(const G4String& u) - { - return SetUnit(u, UnitCategory); - } - Command& SetDefaultUnit(const G4String& u) - { - return SetUnit(u, UnitDefault); - } - Command& SetParameterName(const G4String&, G4bool, G4bool = false); - Command& SetParameterName(G4int pIdx, const G4String&, G4bool, G4bool = false); - Command& SetParameterName(const G4String&, const G4String&, const G4String&, - G4bool, G4bool = false); - Command& SetDefaultValue(const G4String&); - Command& SetDefaultValue(G4int pIdx, const G4String&); - Command& SetCandidates(const G4String&); - Command& SetCandidates(G4int pIdx, const G4String&); - Command& SetToBeBroadcasted(G4bool s0) - { - command->SetToBeBroadcasted(s0); - return *this; - } - Command& SetToBeFlushed(G4bool s0) - { - command->SetToBeFlushed(s0); - return *this; - } - Command& SetWorkerThreadOnly(G4bool s0) - { - command->SetWorkerThreadOnly(s0); - return *this; - } - - G4UIcommand* command = nullptr; - const std::type_info* type = nullptr; + enum UnitSpec + { + UnitCategory, + UnitDefault + }; + Command(G4UIcommand* cmd, const std::type_info& ti) : command(cmd), type(&ti) {} + Command() = default; + + Command& SetStates(G4ApplicationState s0) + { + command->AvailableForStates(s0); + return *this; + } + Command& SetStates(G4ApplicationState s0, G4ApplicationState s1) + { + command->AvailableForStates(s0, s1); + return *this; + } + Command& SetStates(G4ApplicationState s0, G4ApplicationState s1, G4ApplicationState s2) + { + command->AvailableForStates(s0, s1, s2); + return *this; + } + Command& SetStates(G4ApplicationState s0, G4ApplicationState s1, G4ApplicationState s2, + G4ApplicationState s3) + { + command->AvailableForStates(s0, s1, s2, s3); + return *this; + } + Command& SetStates(G4ApplicationState s0, G4ApplicationState s1, G4ApplicationState s2, + G4ApplicationState s3, G4ApplicationState s4) + { + command->AvailableForStates(s0, s1, s2, s3, s4); + return *this; + } + Command& SetRange(const G4String& range) + { + command->SetRange(range.c_str()); + return *this; + } + Command& SetGuidance(const G4String& s0) + { + command->SetGuidance(s0); + return *this; + } + Command& SetUnit(const G4String&, UnitSpec = UnitDefault); + Command& SetUnitCategory(const G4String& u) { return SetUnit(u, UnitCategory); } + Command& SetDefaultUnit(const G4String& u) { return SetUnit(u, UnitDefault); } + Command& SetParameterName(const G4String&, G4bool, G4bool = false); + Command& SetParameterName(G4int pIdx, const G4String&, G4bool, G4bool = false); + Command& SetParameterName(const G4String&, const G4String&, const G4String&, G4bool, + G4bool = false); + Command& SetDefaultValue(const G4String&); + Command& SetDefaultValue(G4int pIdx, const G4String&); + Command& SetCandidates(const G4String&); + Command& SetCandidates(G4int pIdx, const G4String&); + Command& SetToBeBroadcasted(G4bool s0) + { + command->SetToBeBroadcasted(s0); + return *this; + } + Command& SetToBeFlushed(G4bool s0) + { + command->SetToBeFlushed(s0); + return *this; + } + Command& SetWorkerThreadOnly(G4bool s0) + { + command->SetWorkerThreadOnly(s0); + return *this; + } + + G4UIcommand* command = nullptr; + const std::type_info* type = nullptr; }; struct Property : public Command { - Property(const G4AnyType& var, G4UIcommand* cmd) - : Command(cmd, var.TypeInfo()) - , variable(var) - {} - Property() = default; - G4AnyType variable; + Property(const G4AnyType& var, G4UIcommand* cmd) + : Command(cmd, var.TypeInfo()), variable(var) + {} + Property() = default; + G4AnyType variable; }; struct Method : public Command { - Method(const G4AnyMethod& fun, void* obj, G4UIcommand* cmd) - : Command(cmd, fun.ArgType()) - , method(fun) - , object(obj) - {} - Method() = default; - G4AnyMethod method; - void* object = nullptr; + Method(const G4AnyMethod& fun, void* obj, G4UIcommand* cmd) + : Command(cmd, fun.ArgType()), method(fun), object(obj) + {} + Method() = default; + G4AnyMethod method; + void* object = nullptr; }; // Declare Methods Command& DeclareProperty(const G4String& name, const G4AnyType& variable, const G4String& doc = ""); - Command& DeclarePropertyWithUnit(const G4String& name, - const G4String& defaultUnit, - const G4AnyType& variable, - const G4String& doc = ""); - Command& DeclareMethod(const G4String& name, const G4AnyMethod& fun, - const G4String& doc = ""); - Command& DeclareMethodWithUnit(const G4String& name, - const G4String& defaultUnit, - const G4AnyMethod& fun, - const G4String& doc = ""); + Command& DeclarePropertyWithUnit(const G4String& name, const G4String& defaultUnit, + const G4AnyType& variable, const G4String& doc = ""); + Command& DeclareMethod(const G4String& name, const G4AnyMethod& fun, const G4String& doc = ""); + Command& DeclareMethodWithUnit(const G4String& name, const G4String& defaultUnit, + const G4AnyMethod& fun, const G4String& doc = ""); void SetDirectory(const G4String& dir) { directory = dir; } void SetGuidance(const G4String& s); void Sort(G4bool val = true) { - if(dircmd != nullptr) - { + if (dircmd != nullptr) { dircmd->Sort(val); } } private: - std::map properties; std::map methods; G4UIdirectory* dircmd = nullptr; diff --git a/source/intercoms/include/G4UIbatch.hh b/source/intercoms/include/G4UIbatch.hh index 0f2dab79400..5d81aee393e 100644 --- a/source/intercoms/include/G4UIbatch.hh +++ b/source/intercoms/include/G4UIbatch.hh @@ -39,16 +39,15 @@ #ifndef G4UI_BATCH_HH #define G4UI_BATCH_HH 1 -#include - #include "G4UIsession.hh" +#include + class G4UIbatch : public G4UIsession { public: - + // "prevSession" must be null if this class is constructed from main(). G4UIbatch(const char* fileName, G4UIsession* prevSession = nullptr); - // "prevSession" must be null if this class is constructed from main(). ~G4UIbatch() override; @@ -57,13 +56,13 @@ class G4UIbatch : public G4UIsession G4UIsession* SessionStart() override; void PauseSessionStart(const G4String& Prompt) override; - private: - + private: + // Get command from a batch script file G4String ReadCommand(); - // Get command from a batch script file G4int ExecCommand(const G4String& command); + private: G4UIsession* previousSession = nullptr; std::ifstream macroStream; diff --git a/source/intercoms/include/G4UIbridge.hh b/source/intercoms/include/G4UIbridge.hh index 40ba0a16086..1afb922ab46 100644 --- a/source/intercoms/include/G4UIbridge.hh +++ b/source/intercoms/include/G4UIbridge.hh @@ -46,7 +46,6 @@ class G4UImanager; class G4UIbridge { public: - G4UIbridge(G4UImanager* localUI, G4String dir); ~G4UIbridge() = default; @@ -57,7 +56,6 @@ class G4UIbridge inline G4int DirLength() const { return (G4int)dirName.length(); } private: - G4UImanager* localUImanager = nullptr; G4String dirName; }; diff --git a/source/intercoms/include/G4UIcmdWith3Vector.hh b/source/intercoms/include/G4UIcmdWith3Vector.hh index 0c7c39abe3f..6da07f68fdf 100644 --- a/source/intercoms/include/G4UIcmdWith3Vector.hh +++ b/source/intercoms/include/G4UIcmdWith3Vector.hh @@ -36,38 +36,35 @@ #ifndef G4UIcmdWith3Vector_hh #define G4UIcmdWith3Vector_hh 1 -#include "G4UIcommand.hh" #include "G4ThreeVector.hh" +#include "G4UIcommand.hh" class G4UIcmdWith3Vector : public G4UIcommand { public: - + // Constructor. The command string with full path directory + // and the pointer to the messenger must be given G4UIcmdWith3Vector(const char* theCommandPath, G4UImessenger* theMessenger); - // Constructor. The command string with full path directory - // and the pointer to the messenger must be given - - static G4ThreeVector GetNew3VectorValue(const char* paramString); - // Convert string which represents three double values to - // G4ThreeVector - void SetParameterName(const char* theNameX, const char* theNameY, - const char* theNameZ, G4bool omittable, - G4bool currentAsDefault = false); - // Set the parameter names for three parameters. Names are used by - // the range checking function. - // If "omittable" is set as true, the user of this command can omit - // the value(s) when the command is applied. If "omittable" is false, - // the user must supply all three values. - // "currentAsDefault" flag is valid only if "omittable" is true. If this - // flag is true, the current values are used as the default values when - // the user omits some of the parameters. If this flag is false, the - // values given by the next SetDefaultValue() method are used + // Set the parameter names for three parameters. Names are used by + // the range checking function. + // If "omittable" is set as true, the user of this command can omit + // the value(s) when the command is applied. If "omittable" is false, + // the user must supply all three values. + // "currentAsDefault" flag is valid only if "omittable" is true. If this + // flag is true, the current values are used as the default values when + // the user omits some of the parameters. If this flag is false, the + // values given by the next SetDefaultValue() method are used + void SetParameterName(const char* theNameX, const char* theNameY, const char* theNameZ, + G4bool omittable, G4bool currentAsDefault = false); - void SetDefaultValue(const G4ThreeVector& defVal); // Set the default values of the parameters. These default values are // used when the user of this command omits some of the parameter values, // and "omittable" is true and "currentAsDefault" is false + void SetDefaultValue(const G4ThreeVector& defVal); + + // Convert string which represents three double values to G4ThreeVector + static G4ThreeVector GetNew3VectorValue(const char* paramString); }; #endif diff --git a/source/intercoms/include/G4UIcmdWith3VectorAndUnit.hh b/source/intercoms/include/G4UIcmdWith3VectorAndUnit.hh index 527af6ca10a..b7bb8531c45 100644 --- a/source/intercoms/include/G4UIcmdWith3VectorAndUnit.hh +++ b/source/intercoms/include/G4UIcmdWith3VectorAndUnit.hh @@ -36,81 +36,78 @@ #ifndef G4UIcmdWith3VectorAndUnit_hh #define G4UIcmdWith3VectorAndUnit_hh 1 -#include "G4UIcommand.hh" #include "G4ThreeVector.hh" +#include "G4UIcommand.hh" class G4UIcmdWith3VectorAndUnit : public G4UIcommand { public: - - G4UIcmdWith3VectorAndUnit(const char* theCommandPath, - G4UImessenger* theMessenger); - // Constructor. The command string with full path directory - // and the pointer to the messenger must be given + // Constructor. The command string with full path directory + // and the pointer to the messenger must be given + G4UIcmdWith3VectorAndUnit(const char* theCommandPath, G4UImessenger* theMessenger); G4int DoIt(G4String parameterList) override; - static G4ThreeVector GetNew3VectorValue(const char* paramString); - // Convert string which represents three double values and a unit to - // G4ThreeVector. Values are converted to the Geant4 internal unit - - static G4ThreeVector GetNew3VectorRawValue(const char* paramString); - // Convert string which represents three double values and a unit to - // G4ThreeVector. Values are NOT converted to the Geant4 internal unit - // but just as the given string - - static G4double GetNewUnitValue(const char* paramString); - // Convert the unit string to the value of the unit. "paramString" - // must contain three double values AND a unit string - - G4String ConvertToStringWithBestUnit(const G4ThreeVector& vec); // Convert a 3 vector value to a string of digits and unit. Best unit is // chosen from the unit category of default unit (in case SetDefaultUnit() // is defined) or category defined by SetUnitCategory() + G4String ConvertToStringWithBestUnit(const G4ThreeVector& vec); - G4String ConvertToStringWithDefaultUnit(const G4ThreeVector& vec); // Convert a 3 vector value to a string of digits and unit. Best unit is // chosen from the category defined by SetUnitCategory() in case default // unit is not defined + G4String ConvertToStringWithDefaultUnit(const G4ThreeVector& vec); - void SetParameterName(const char* theNameX, const char* theNameY, - const char* theNameZ, G4bool omittable, - G4bool currentAsDefault = false); - // Set the parameter names for three parameters. Names are used by - // the range checking routine. - // If "omittable" is set as true, the user of this command can omit - // the value(s) when the command is applied. If "omittable" is false, - // the user must supply all three values. - // "currentAsDefault" flag is valid only if "omittable" is true. If this - // flag is true, the current values are used as the default values when - // the user omit some of the parameters. If this flag is false, the values - // given by the next SetDefaultValue() method are used + // Set the parameter names for three parameters. Names are used by + // the range checking routine. + // If "omittable" is set as true, the user of this command can omit + // the value(s) when the command is applied. If "omittable" is false, + // the user must supply all three values. + // "currentAsDefault" flag is valid only if "omittable" is true. If this + // flag is true, the current values are used as the default values when + // the user omit some of the parameters. If this flag is false, the values + // given by the next SetDefaultValue() method are used + void SetParameterName(const char* theNameX, const char* theNameY, const char* theNameZ, + G4bool omittable, G4bool currentAsDefault = false); - void SetDefaultValue(const G4ThreeVector& defVal); // Set the default values of the parameters. These default values are used // when the user of this command omits some of the parameter values, and // "omittable" is true and "currentAsDefault" is false + void SetDefaultValue(const G4ThreeVector& defVal); + // These three methods must be used alternatively. + // The user cannot omit the unit as the fourth parameter of the command + // if SetUnitCategory() or SetUnitCandidates() is used, while the unit + // defined by SetDefaultUnit() method is used as the default unit so that + // the user can omit the fourth parameter. + // SetUnitCategory() defines the category of the units which will be + // accepted. + // The available categories can be found in G4SystemOfUnits.hh in 'global' + // category. Only the units categorized in the given category are accepted + // as the fourth parameter of the command. + // SetUnitCandidates() defines the candidates of units. Units listed in + // the argument of this method must be separated by space(s). Only the + // units listed in the candidate list are accepted as the fourth parameter + // of the command. + // SetDefaultUnit() defines the default unit and also defines the category + // of the allowed units. Thus only the units categorized as the given + // default unit will be accepted. void SetUnitCategory(const char* unitCategory); void SetUnitCandidates(const char* candidateList); void SetDefaultUnit(const char* defUnit); - // These three methods must be used alternatively. - // The user cannot omit the unit as the fourth parameter of the command - // if SetUnitCategory() or SetUnitCandidates() is used, while the unit - // defined by SetDefaultUnit() method is used as the default unit so that - // the user can omit the fourth parameter. - // SetUnitCategory() defines the category of the units which will be - // accepted. - // The available categories can be found in G4SystemOfUnits.hh in 'global' - // category. Only the units categorized in the given category are accepted - // as the fourth parameter of the command. - // SetUnitCandidates() defines the candidates of units. Units listed in - // the argument of this method must be separated by space(s). Only the - // units listed in the candidate list are accepted as the fourth parameter - // of the command. - // SetDefaultUnit() defines the default unit and also defines the category - // of the allowed units. Thus only the units categorized as the given - // default unit will be accepted. + + // Convert string which represents three double values and a unit to + // G4ThreeVector. Values are converted to the Geant4 internal unit + static G4ThreeVector GetNew3VectorValue(const char* paramString); + + // Convert string which represents three double values and a unit to + // G4ThreeVector. Values are NOT converted to the Geant4 internal unit + // but just as the given string + static G4ThreeVector GetNew3VectorRawValue(const char* paramString); + + // Convert the unit string to the value of the unit. "paramString" + // must contain three double values AND a unit string + static G4double GetNewUnitValue(const char* paramString); }; #endif diff --git a/source/intercoms/include/G4UIcmdWithABool.hh b/source/intercoms/include/G4UIcmdWithABool.hh index 7b5c58e5194..576481a3ef1 100644 --- a/source/intercoms/include/G4UIcmdWithABool.hh +++ b/source/intercoms/include/G4UIcmdWithABool.hh @@ -45,29 +45,27 @@ class G4UIcmdWithABool : public G4UIcommand { public: - + // Constructor. The command string with full path directory + // and the pointer to the messenger must be given G4UIcmdWithABool(const char* theCommandPath, G4UImessenger* theMessenger); - // Constructor. The command string with full path directory - // and the pointer to the messenger must be given - - static G4bool GetNewBoolValue(const char* paramString); - // Convert string which represents a boolean value to G4bool - void SetParameterName(const char* theName, G4bool omittable, - G4bool currentAsDefault = false); - // Set the parameter name for a Boolean parameter. - // If "omittable" is set as true, the user of this command can omit - // the value when the command is applied. If "omittable" is false, - // the user must supply a Boolean value. - // "currentAsDefault" flag is valid only if "omittable" is true. If this - // flag is true, the current value is used as the default value when the - // user omits the parameter. If this flag is false, the value given by the - // next SetDefaultValue() method is used + // Set the parameter name for a Boolean parameter. + // If "omittable" is set as true, the user of this command can omit + // the value when the command is applied. If "omittable" is false, + // the user must supply a Boolean value. + // "currentAsDefault" flag is valid only if "omittable" is true. If this + // flag is true, the current value is used as the default value when the + // user omits the parameter. If this flag is false, the value given by the + // next SetDefaultValue() method is used + void SetParameterName(const char* theName, G4bool omittable, G4bool currentAsDefault = false); + // Set the default value of the parameter. This default value is used + // when the user of this command omits the parameter value, and + // "omittable" is true and "currentAsDefault" is false void SetDefaultValue(G4bool defVal); - // Set the default value of the parameter. This default value is used - // when the user of this command omits the parameter value, and - // "omittable" is true and "currentAsDefault" is false + + // Convert string which represents a boolean value to G4bool + static G4bool GetNewBoolValue(const char* paramString); }; #endif diff --git a/source/intercoms/include/G4UIcmdWithADouble.hh b/source/intercoms/include/G4UIcmdWithADouble.hh index de0e388ca12..1dfc68397bb 100644 --- a/source/intercoms/include/G4UIcmdWithADouble.hh +++ b/source/intercoms/include/G4UIcmdWithADouble.hh @@ -41,29 +41,27 @@ class G4UIcmdWithADouble : public G4UIcommand { public: - + // Constructor. The command string with full path directory + // and the pointer to the messenger must be given G4UIcmdWithADouble(const char* theCommandPath, G4UImessenger* theMessenger); - // Constructor. The command string with full path directory - // and the pointer to the messenger must be given - - static G4double GetNewDoubleValue(const char* paramString); - // Convert string which represents a double value to a double - void SetParameterName(const char* theName, G4bool omittable, - G4bool currentAsDefault = false); - // Set the parameter name. The name is used by the range checking. - // If "omittable" is set as true, the user of this command can omit - // the value when the command is applied. If "omittable" is false, - // the user must supply a double value. - // "currentAsDefault" flag is valid only if "omittable" is true. If this - // flag is true, the current value is used as the default value when the - // user omits the parameter. If this flag is false, the value given by - // the next SetDefaultValue() method is used + // Set the parameter name. The name is used by the range checking. + // If "omittable" is set as true, the user of this command can omit + // the value when the command is applied. If "omittable" is false, + // the user must supply a double value. + // "currentAsDefault" flag is valid only if "omittable" is true. If this + // flag is true, the current value is used as the default value when the + // user omits the parameter. If this flag is false, the value given by + // the next SetDefaultValue() method is used + void SetParameterName(const char* theName, G4bool omittable, G4bool currentAsDefault = false); + // Set the default value of the parameter. This default value is used + // when the user of this command omits the parameter value, and + // "omittable" is true and "currentAsDefault" is false void SetDefaultValue(G4double defVal); - // Set the default value of the parameter. This default value is used - // when the user of this command omits the parameter value, and - // "omittable" is true and "currentAsDefault" is false + + // Convert string which represents a double value to a double + static G4double GetNewDoubleValue(const char* paramString); }; #endif diff --git a/source/intercoms/include/G4UIcmdWithADoubleAndUnit.hh b/source/intercoms/include/G4UIcmdWithADoubleAndUnit.hh index b97e61e83c8..6e5d2f3bd26 100644 --- a/source/intercoms/include/G4UIcmdWithADoubleAndUnit.hh +++ b/source/intercoms/include/G4UIcmdWithADoubleAndUnit.hh @@ -41,74 +41,71 @@ class G4UIcmdWithADoubleAndUnit : public G4UIcommand { public: - - G4UIcmdWithADoubleAndUnit(const char* theCommandPath, - G4UImessenger* theMessenger); - // Constructor. The command string with full path directory - // and the pointer to the messenger must be given + // Constructor. The command string with full path directory + // and the pointer to the messenger must be given + G4UIcmdWithADoubleAndUnit(const char* theCommandPath, G4UImessenger* theMessenger); G4int DoIt(G4String parameterList) override; - static G4double GetNewDoubleValue(const char* paramString); - // Convert string which represents a double value and a unit to - // double. Value is converted to the Geant4 internal unit - - static G4double GetNewDoubleRawValue(const char* paramString); - // Convert string which represents a double value and a unit to - // double. Value is NOT converted to the Geant4 internal unit - // but just as the given string - - static G4double GetNewUnitValue(const char* paramString); - // Convert the unit string to the value of the unit. "paramString" - // must contain a double value AND a unit string - + // Convert a double value to a string of digits and unit. Best unit is + // chosen from the unit category of default unit (in case SetDefaultUnit() + // is defined) or category defined by SetUnitCategory() G4String ConvertToStringWithBestUnit(G4double val); - // Convert a double value to a string of digits and unit. Best unit is - // chosen from the unit category of default unit (in case SetDefaultUnit() - // is defined) or category defined by SetUnitCategory() + // Convert a double value to a string of digits and unit. Best unit is + // chosen from the category defined by SetUnitCategory() in case default + // unit is not defined G4String ConvertToStringWithDefaultUnit(G4double val); - // Convert a double value to a string of digits and unit. Best unit is - // chosen from the category defined by SetUnitCategory() in case default - // unit is not defined - void SetParameterName(const char* theName, G4bool omittable, - G4bool currentAsDefault = false); - // Set the parameter name for double parameters. Name is used by - // the range checking function. - // If "omittable" is set as true, the user of this command can omit - // the value when the command is applied. If "omittable" is false, - // the user must supply a value. - // "currentAsDefault" flag is valid only if "omittable" is true. If this - // flag is true, the current value is used as the default value when the - // user omits the double parameter. If this flag is false, the value - // given by the next SetDefaultValue() method is used + // Set the parameter name for double parameters. Name is used by + // the range checking function. + // If "omittable" is set as true, the user of this command can omit + // the value when the command is applied. If "omittable" is false, + // the user must supply a value. + // "currentAsDefault" flag is valid only if "omittable" is true. If this + // flag is true, the current value is used as the default value when the + // user omits the double parameter. If this flag is false, the value + // given by the next SetDefaultValue() method is used + void SetParameterName(const char* theName, G4bool omittable, G4bool currentAsDefault = false); + // Set the default value of the parameter. This default value is used + // when the user of this command omits the parameter value, and + // "omittable" is true and "currentAsDefault" is false void SetDefaultValue(G4double defVal); - // Set the default value of the parameter. This default value is used - // when the user of this command omits the parameter value, and - // "omittable" is true and "currentAsDefault" is false + // These three methods must be used alternatively. + // The user cannot omit the unit as the second parameter of the command + // if SetUnitCategory() or SetUnitCandidates() is used, while the unit + // defined by SetDefaultUnit() method is used as the default unit so that + // the user can omit the second parameter. + // SetUnitCategory() defines the category of the units which will be + // accepted. + // The available categories can be found in G4SystemOfUnits.hh in 'global' + // category. Only the units categorized in the given category are accepted + // as the second parameter of the command. + // SetUnitCandidates() defines the candidates of units. Units listed in + // the argument of this method must be separated by space(s). Only the + // units listed in the candidate list are accepted as the second parameter + // of the command. + // SetDefaultUnit() defines the default unit and also defines the category + // of the allowed units. Thus only the units categorized as the given + // default unit will be accepted void SetUnitCategory(const char* unitCategory); void SetUnitCandidates(const char* candidateList); void SetDefaultUnit(const char* defUnit); - // These three methods must be used alternatively. - // The user cannot omit the unit as the second parameter of the command - // if SetUnitCategory() or SetUnitCandidates() is used, while the unit - // defined by SetDefaultUnit() method is used as the default unit so that - // the user can omit the second parameter. - // SetUnitCategory() defines the category of the units which will be - // accepted. - // The available categories can be found in G4SystemOfUnits.hh in 'global' - // category. Only the units categorized in the given category are accepted - // as the second parameter of the command. - // SetUnitCandidates() defines the candidates of units. Units listed in - // the argument of this method must be separated by space(s). Only the - // units listed in the candidate list are accepted as the second parameter - // of the command. - // SetDefaultUnit() defines the default unit and also defines the category - // of the allowed units. Thus only the units categorized as the given - // default unit will be accepted + + // Convert string which represents a double value and a unit to + // double. Value is converted to the Geant4 internal unit + static G4double GetNewDoubleValue(const char* paramString); + + // Convert string which represents a double value and a unit to + // double. Value is NOT converted to the Geant4 internal unit + // but just as the given string + static G4double GetNewDoubleRawValue(const char* paramString); + + // Convert the unit string to the value of the unit. "paramString" + // must contain a double value AND a unit string + static G4double GetNewUnitValue(const char* paramString); }; #endif diff --git a/source/intercoms/include/G4UIcmdWithALongInt.hh b/source/intercoms/include/G4UIcmdWithALongInt.hh index b79df1427ec..a7a5afcb793 100644 --- a/source/intercoms/include/G4UIcmdWithALongInt.hh +++ b/source/intercoms/include/G4UIcmdWithALongInt.hh @@ -41,29 +41,27 @@ class G4UIcmdWithALongInt : public G4UIcommand { public: - + // Constructor. The command string with full path directory + // and the pointer to the messenger must be given G4UIcmdWithALongInt(const char* commandPath, G4UImessenger* messenger); - // Constructor. The command string with full path directory - // and the pointer to the messenger must be given - - static G4long GetNewLongIntValue(const char* paramString); - // Convert string to long int - void SetParameterName(const char* theName, G4bool omittable, - G4bool currentAsDefault = false); - // Set the parameter name. The name is used by the range checking. - // If "omittable" is set as true, the user of this command can omit - // the value when the command is applied. If "omittable" is false, - // the user must supply an integer value. - // "currentAsDefault" flag is valid only if "omittable" is true. If this - // flag is true, the current value is used as the default value when the - // user omits the parameter. If this flag is false, the value given by - // the next SetDefaultValue() method is used + // Set the parameter name. The name is used by the range checking. + // If "omittable" is set as true, the user of this command can omit + // the value when the command is applied. If "omittable" is false, + // the user must supply an integer value. + // "currentAsDefault" flag is valid only if "omittable" is true. If this + // flag is true, the current value is used as the default value when the + // user omits the parameter. If this flag is false, the value given by + // the next SetDefaultValue() method is used + void SetParameterName(const char* theName, G4bool omittable, G4bool currentAsDefault = false); + // Set the default value of the parameter. This default value is used + // when the user of this command omits the parameter value, and + // "omittable" is true and "currentAsDefault" is false void SetDefaultValue(G4long defVal); - // Set the default value of the parameter. This default value is used - // when the user of this command omits the parameter value, and - // "omittable" is true and "currentAsDefault" is false + + // Convert string to long int + static G4long GetNewLongIntValue(const char* paramString); }; #endif diff --git a/source/intercoms/include/G4UIcmdWithAString.hh b/source/intercoms/include/G4UIcmdWithAString.hh index a965780aa9f..a78e3f48b40 100644 --- a/source/intercoms/include/G4UIcmdWithAString.hh +++ b/source/intercoms/include/G4UIcmdWithAString.hh @@ -42,29 +42,27 @@ class G4UIcmdWithAString : public G4UIcommand { public: - + // Constructor. The command string with full path directory + // and the pointer to the messenger must be given G4UIcmdWithAString(const char* theCommandPath, G4UImessenger* theMessenger); - // Constructor. The command string with full path directory - // and the pointer to the messenger must be given - void SetParameterName(const char* theName, G4bool omittable, - G4bool currentAsDefault = false); - // If "omittable" is set to true, the user of this command can omit - // the value when the command is applied. If "omittable" is false, - // the user must supply the parameter string. - // "currentAsDefault" flag is valid only if "omittable" is true. If this - // flag is true, the current value is used as the default value when the - // user omits the parameter. If this flag is false, the value given by the - // next SetDefaultValue() method is used + // If "omittable" is set to true, the user of this command can omit + // the value when the command is applied. If "omittable" is false, + // the user must supply the parameter string. + // "currentAsDefault" flag is valid only if "omittable" is true. If this + // flag is true, the current value is used as the default value when the + // user omits the parameter. If this flag is false, the value given by the + // next SetDefaultValue() method is used + void SetParameterName(const char* theName, G4bool omittable, G4bool currentAsDefault = false); + // Defines the candidates of the parameter string. Candidates listed in + // the argument must be separated by space(s) void SetCandidates(const char* candidateList); - // Defines the candidates of the parameter string. Candidates listed in - // the argument must be separated by space(s) + // Set the default value of the parameter. This default value is used + // when the user of this command omits the parameter value, and + // "omittable" is true and "currentAsDefault" is false void SetDefaultValue(const char* defVal); - // Set the default value of the parameter. This default value is used - // when the user of this command omits the parameter value, and - // "omittable" is true and "currentAsDefault" is false }; #endif diff --git a/source/intercoms/include/G4UIcmdWithAnInteger.hh b/source/intercoms/include/G4UIcmdWithAnInteger.hh index 0322d4edb0f..19dd8df5c9c 100644 --- a/source/intercoms/include/G4UIcmdWithAnInteger.hh +++ b/source/intercoms/include/G4UIcmdWithAnInteger.hh @@ -41,29 +41,27 @@ class G4UIcmdWithAnInteger : public G4UIcommand { public: - + // Constructor. The command string with full path directory + // and the pointer to the messenger must be given G4UIcmdWithAnInteger(const char* commandPath, G4UImessenger* messenger); - // Constructor. The command string with full path directory - // and the pointer to the messenger must be given - - static G4int GetNewIntValue(const char* paramString); - // Convert string which represents an integer to an integer - void SetParameterName(const char* theName, G4bool omittable, - G4bool currentAsDefault = false); - // Set the parameter name. The name is used by the range checking. - // If "omittable" is set as true, the user of this command can omit - // the value when the command is applied. If "omittable" is false, - // the user must supply an integer value. - // "currentAsDefault" flag is valid only if "omittable" is true. If this - // flag is true, the current value is used as the default value when the - // user omits the parameter. If this flag is false, the value given by - // the next SetDefaultValue() method is used + // Set the parameter name. The name is used by the range checking. + // If "omittable" is set as true, the user of this command can omit + // the value when the command is applied. If "omittable" is false, + // the user must supply an integer value. + // "currentAsDefault" flag is valid only if "omittable" is true. If this + // flag is true, the current value is used as the default value when the + // user omits the parameter. If this flag is false, the value given by + // the next SetDefaultValue() method is used + void SetParameterName(const char* theName, G4bool omittable, G4bool currentAsDefault = false); + // Set the default value of the parameter. This default value is used + // when the user of this command omits the parameter value, and + // "omittable" is true and "currentAsDefault" is false void SetDefaultValue(G4int defVal); - // Set the default value of the parameter. This default value is used - // when the user of this command omits the parameter value, and - // "omittable" is true and "currentAsDefault" is false + + // Convert string which represents an integer to an integer + static G4int GetNewIntValue(const char* paramString); }; #endif diff --git a/source/intercoms/include/G4UIcmdWithoutParameter.hh b/source/intercoms/include/G4UIcmdWithoutParameter.hh index 4cfb8b7384b..f7f794e7f97 100644 --- a/source/intercoms/include/G4UIcmdWithoutParameter.hh +++ b/source/intercoms/include/G4UIcmdWithoutParameter.hh @@ -41,11 +41,9 @@ class G4UIcmdWithoutParameter : public G4UIcommand { public: - - G4UIcmdWithoutParameter(const char* theCommandPath, - G4UImessenger* theMessenger); - // Constructor. The command string with full path directory - // and the pointer to the messenger must be given + // Constructor. The command string with full path directory + // and the pointer to the messenger must be given + G4UIcmdWithoutParameter(const char* theCommandPath, G4UImessenger* theMessenger); }; #endif diff --git a/source/intercoms/include/G4UIcommand.hh b/source/intercoms/include/G4UIcommand.hh index 6102da69e95..55583ecc7d2 100644 --- a/source/intercoms/include/G4UIcommand.hh +++ b/source/intercoms/include/G4UIcommand.hh @@ -38,30 +38,28 @@ #ifndef G4UIcommand_hh #define G4UIcommand_hh 1 -#include - -#include "G4UIparameter.hh" -#include "globals.hh" #include "G4ApplicationState.hh" -#include "G4UItokenNum.hh" #include "G4ThreeVector.hh" +#include "G4UIparameter.hh" +#include "G4UItokenNum.hh" +#include "globals.hh" + +#include class G4UImessenger; class G4UIcommand { public: - + // Dummy default constructor G4UIcommand() = default; - // Dummy default constructor - G4UIcommand(const char* theCommandPath, G4UImessenger* theMessenger, - G4bool tBB = true); - // Constructor. The command string with full path directory - // and the pointer to the messenger must be given. - // If tBB is set to false, this command won't be sent to worker threads. - // This tBB parameter could be changed with SetToBeBroadcasted() method - // except for G4UIdirectory + // Constructor. The command string with full path directory + // and the pointer to the messenger must be given. + // If tBB is set to false, this command won't be sent to worker threads. + // This tBB parameter could be changed with SetToBeBroadcasted() method + // except for G4UIdirectory + G4UIcommand(const char* theCommandPath, G4UImessenger* theMessenger, G4bool tBB = true); virtual ~G4UIcommand(); @@ -72,35 +70,36 @@ class G4UIcommand G4String GetCurrentValue(); + // These methods define the states where the command is available. + // Once one of these commands is invoked, the command application will + // be denied when Geant4 is NOT in the assigned states void AvailableForStates(G4ApplicationState s1); void AvailableForStates(G4ApplicationState s1, G4ApplicationState s2); - void AvailableForStates(G4ApplicationState s1, G4ApplicationState s2, - G4ApplicationState s3); - void AvailableForStates(G4ApplicationState s1, G4ApplicationState s2, - G4ApplicationState s3, G4ApplicationState s4); - void AvailableForStates(G4ApplicationState s1, G4ApplicationState s2, - G4ApplicationState s3, G4ApplicationState s4, - G4ApplicationState s5); - // These methods define the states where the command is available. - // Once one of these commands is invoked, the command application will - // be denied when Geant4 is NOT in the assigned states + void AvailableForStates(G4ApplicationState s1, G4ApplicationState s2, G4ApplicationState s3); + void AvailableForStates(G4ApplicationState s1, G4ApplicationState s2, G4ApplicationState s3, + G4ApplicationState s4); + void AvailableForStates(G4ApplicationState s1, G4ApplicationState s2, G4ApplicationState s3, + G4ApplicationState s4, G4ApplicationState s5); G4bool IsAvailable(); virtual void List(); + // Static methods for conversion from value(s) to a string. + // These methods are to be used by GetCurrentValues() methods + // of concrete messengers static G4String ConvertToString(G4bool boolVal); static G4String ConvertToString(G4int intValue); static G4String ConvertToString(G4long longValue); static G4String ConvertToString(G4double doubleValue); static G4String ConvertToString(G4double doubleValue, const char* unitName); static G4String ConvertToString(const G4ThreeVector& vec); - static G4String ConvertToString(const G4ThreeVector& vec, - const char* unitName); - // Static methods for conversion from value(s) to a string. - // These methods are to be used by GetCurrentValues() methods - // of concrete messengers + static G4String ConvertToString(const G4ThreeVector& vec, const char* unitName); + // Static methods for conversion from a string to a value of the returning + // type. These methods are to be used directly by SetNewValues() methods + // of concrete messengers, or GetNewXXXValue() of classes derived from + // this G4UIcommand class static G4bool ConvertToBool(const char* st); static G4int ConvertToInt(const char* st); static G4long ConvertToLongInt(const char* st); @@ -108,72 +107,55 @@ class G4UIcommand static G4double ConvertToDimensionedDouble(const char* st); static G4ThreeVector ConvertTo3Vector(const char* st); static G4ThreeVector ConvertToDimensioned3Vector(const char* st); - // Static methods for conversion from a string to a value of the returning - // type. These methods are to be used directly by SetNewValues() methods - // of concrete messengers, or GetNewXXXValue() of classes derived from - // this G4UIcommand class + // Static methods for unit and its category static G4double ValueOf(const char* unitName); static G4String CategoryOf(const char* unitName); static G4String UnitsList(const char* unitCategory); - // Static methods for unit and its category - inline void SetRange(const char* rs) { rangeString = rs; } - // Defines the range the command parameter(s) can take. - // The variable name(s) appear in the range expression must be the same - // as the name(s) of the parameter(s). - // All the C++ syntax of relational operators are allowed for the - // range expression + // Defines the range the command parameter(s) can take. + // The variable name(s) appear in the range expression must be the same + // as the name(s) of the parameter(s). + // All the C++ syntax of relational operators are allowed for the + // range expression + inline void SetRange(const char* rs) { rangeExpression = rs; } - inline const G4String& GetRange() const { return rangeString; } - inline std::size_t GetGuidanceEntries() const - { - return commandGuidance.size(); - } - inline const G4String& GetGuidanceLine(G4int i) const - { - return commandGuidance[i]; - } + inline const G4String& GetRange() const { return rangeExpression; } + inline std::size_t GetGuidanceEntries() const { return commandGuidance.size(); } + inline const G4String& GetGuidanceLine(G4int i) const { return commandGuidance[i]; } inline const G4String& GetCommandPath() const { return commandPath; } inline const G4String& GetCommandName() const { return commandName; } inline std::size_t GetParameterEntries() const { return parameter.size(); } inline G4UIparameter* GetParameter(G4int i) const { return parameter[i]; } - inline std::vector* GetStateList() - { - return &availabelStateList; - } + inline std::vector* GetStateList() { return &availabelStateList; } inline G4UImessenger* GetMessenger() const { return messenger; } + // Defines a parameter. This method is used by the derived command + // classes but the user can directly use this command when defining + // a command, without using the derived class. For this case, the order + // of the parameters is the order of invoking this method inline void SetParameter(G4UIparameter* const newParameter) - // Defines a parameter. This method is used by the derived command - // classes but the user can directly use this command when defining - // a command, without using the derived class. For this case, the order - // of the parameters is the order of invoking this method { parameter.push_back(newParameter); newVal.resize(parameter.size()); } - inline void SetGuidance(const char* aGuidance) - // Adds a guidance line. Unlimited times of invokation of this method is - // allowed. The given lines of guidance will appear for the help. - // The first line of the guidance will be used as the title of the - // command, i.e. one line list of the commands - { - commandGuidance.emplace_back(aGuidance); - } + // Adds a guidance line. Unlimited times of invokation of this method is + // allowed. The given lines of guidance will appear for the help. + // The first line of the guidance will be used as the title of the + // command, i.e. one line list of the commands + inline void SetGuidance(const char* aGuidance) { commandGuidance.emplace_back(aGuidance); } inline const G4String GetTitle() const { - return (commandGuidance.empty()) ? G4String("...Title not available...") - : commandGuidance[0]; + return (commandGuidance.empty()) ? G4String("...Title not available...") : commandGuidance[0]; } inline void SetToBeBroadcasted(G4bool val) { toBeBroadcasted = val; } inline G4bool ToBeBroadcasted() const { return toBeBroadcasted; } inline void SetToBeFlushed(G4bool val) { toBeFlushed = val; } inline G4bool ToBeFlushed() const { return toBeFlushed; } - inline void SetWorkerThreadOnly(G4bool val = true) { workerThreadOnly=val; } + inline void SetWorkerThreadOnly(G4bool val = true) { workerThreadOnly = val; } inline G4bool IsWorkerThreadOnly() const { return workerThreadOnly; } inline void CommandFailed(G4int errCode, G4ExceptionDescription& ed) @@ -187,7 +169,7 @@ class G4UIcommand failureDescription = ed.str(); } inline G4int IfCommandFailed() { return commandFailureCode; } - inline const G4String& GetFailureDescription() {return failureDescription;} + inline const G4String& GetFailureDescription() { return failureDescription; } inline void ResetFailure() { commandFailureCode = 0; @@ -195,23 +177,29 @@ class G4UIcommand } public: - enum CommandType - { BaseClassCmd, WithoutParameterCmd, - WithABoolCmd, WithAnIntegerCmd, WithALongIntCmd, - WithADoubleCmd, WithADoubleAndUnitCmd, With3VectorCmd, With3VectorAndUnitCmd, - WithAStringCmd, CmdDirectory = -1 }; - - inline CommandType GetCommandType() const - { return commandType; } + enum CommandType + { + BaseClassCmd, + WithoutParameterCmd, + WithABoolCmd, + WithAnIntegerCmd, + WithALongIntCmd, + WithADoubleCmd, + WithADoubleAndUnitCmd, + With3VectorCmd, + With3VectorAndUnitCmd, + WithAStringCmd, + CmdDirectory = -1 + }; + + inline CommandType GetCommandType() const { return commandType; } void SetCommandType(CommandType); - inline void SetDefaultSortFlag(G4bool val) - { ifSort = val; } + inline void SetDefaultSortFlag(G4bool val) { ifSort = val; } protected: - // --- the following is used by CheckNewValue() -------- - using yystype = G4UItokenNum::yystype; + using yystype = G4UItokenNum::yystype; using tokenNum = G4UItokenNum::tokenNum; G4int CheckNewValue(const char* newValue); @@ -226,14 +214,10 @@ class G4UIcommand G4bool ifSort = false; private: - void G4UIcommandCommonConstructorCode(const char* theCommandPath); - G4int TypeCheck(const char* t); - G4int RangeCheck(const char* t); - G4int IsInt(const char* str, short maxLength); // used for both int and long int - G4int IsDouble(const char* str); - G4int ExpectExponent(const char* str); + G4bool RangeCheck(const char* t); + // syntax nodes yystype Expression(); yystype LogicalORExpression(); @@ -246,19 +230,14 @@ class G4UIcommand yystype PrimaryExpression(); // semantics routines G4int Eval2(const yystype& arg1, G4int op, const yystype& arg2); - G4int CompareInt(G4int arg1, G4int op, G4int arg2); - G4int CompareLong(G4long arg1, G4int op, G4long arg2); - G4int CompareDouble(G4double arg1, G4int op, G4double arg2); // utility - tokenNum Yylex(); // returns next token - unsigned IndexOf(const char*); // returns the index of the var name + tokenNum Yylex(); // returns next token + unsigned IndexOf(const char*); // returns the index of the var name unsigned IsParameter(const char*); // returns 1 or 0 - G4int G4UIpGetc(); // read one char from rangeBuf - G4int G4UIpUngetc(G4int c); // put back + G4int G4UIpGetc(); // read one char from rangeBuf + G4int G4UIpUngetc(G4int c); // put back G4int Backslash(G4int c); G4int Follow(G4int expect, G4int ifyes, G4int ifno); - //G4String TokenToStr(G4int token); - //void PrintToken(void); // for debug // Data ----------------------------------------------------------- @@ -267,13 +246,12 @@ class G4UIcommand G4UImessenger* messenger = nullptr; G4String commandPath; G4String commandName; - G4String rangeString; + G4String rangeExpression; std::vector parameter; std::vector commandGuidance; std::vector availabelStateList; - G4String rangeBuf; - G4int bp = 0; // buffer pointer for rangeBuf + G4int bp = 0; // current index into rangeExpression tokenNum token = G4UItokenNum::IDENTIFIER; yystype yylval; std::vector newVal; diff --git a/source/intercoms/include/G4UIcommandStatus.hh b/source/intercoms/include/G4UIcommandStatus.hh index c3cced97f21..96c2c0c6a96 100644 --- a/source/intercoms/include/G4UIcommandStatus.hh +++ b/source/intercoms/include/G4UIcommandStatus.hh @@ -36,13 +36,13 @@ enum G4UIcommandStatus { - fCommandSucceeded = 0, - fCommandNotFound = 100, - fIllegalApplicationState = 200, - fParameterOutOfRange = 300, - fParameterUnreadable = 400, + fCommandSucceeded = 0, + fCommandNotFound = 100, + fIllegalApplicationState = 200, + fParameterOutOfRange = 300, + fParameterUnreadable = 400, fParameterOutOfCandidates = 500, - fAliasNotFound = 600 + fAliasNotFound = 600 }; #endif diff --git a/source/intercoms/include/G4UIcommandTree.hh b/source/intercoms/include/G4UIcommandTree.hh index 3db35436c06..a466708b2e7 100644 --- a/source/intercoms/include/G4UIcommandTree.hh +++ b/source/intercoms/include/G4UIcommandTree.hh @@ -36,15 +36,14 @@ #ifndef G4UIcommandTree_hh #define G4UIcommandTree_hh 1 -#include - -#include "globals.hh" #include "G4UIcommand.hh" +#include "globals.hh" + +#include class G4UIcommandTree { public: - G4UIcommandTree() = default; G4UIcommandTree(const char* thePathName); @@ -59,9 +58,9 @@ class G4UIcommandTree G4UIcommandTree* FindCommandTree(const char* commandPath); G4String GetFirstMatchedString(const G4String&, const G4String&) const; + // Complete most available characters in common into command path in the + // command line given G4String CompleteCommandPath(const G4String& commandPath); - // Complete most available characters in common into command path in the - // command line given void List() const; void ListCurrent() const; @@ -77,15 +76,14 @@ class G4UIcommandTree inline G4UIcommand* GetCommand(G4int i) { return command[i - 1]; } inline const G4String GetTitle() const { - return (guidance == nullptr) ? G4String("...Title not available...") - : guidance->GetTitle(); + return (guidance == nullptr) ? G4String("...Title not available...") : guidance->GetTitle(); } private: - G4String CreateFileName(const char* pName); G4String ModStr(const char* strS); + private: std::vector command; std::vector tree; G4UIcommand* guidance = nullptr; diff --git a/source/intercoms/include/G4UIdirectory.hh b/source/intercoms/include/G4UIdirectory.hh index 53e72009fe6..79f466ed3de 100644 --- a/source/intercoms/include/G4UIdirectory.hh +++ b/source/intercoms/include/G4UIdirectory.hh @@ -41,18 +41,15 @@ class G4UIdirectory : public G4UIcommand { public: - + // Constructors. The argument is a full path directory which + // starts and ends with "/". G4UIdirectory(char* theCommandPath, G4bool commandsToBeBroadcasted = true); - G4UIdirectory(const char* theCommandPath, - G4bool commandsToBeBroadcasted = true); - // Constructors. The argument is a full path directory which - // starts and ends with "/". + G4UIdirectory(const char* theCommandPath, G4bool commandsToBeBroadcasted = true); + + void Sort(G4bool val = true) { ifSort = val; } - void Sort(G4bool val = true) - { ifSort = val; } - G4bool IfSort() const - { return ifSort; } - // N.B. ifSort is defined in the base class G4UIcommand + // N.B. ifSort is defined in the base class G4UIcommand + G4bool IfSort() const { return ifSort; } }; #endif diff --git a/source/intercoms/include/G4UImanager.hh b/source/intercoms/include/G4UImanager.hh index d5729b91f44..a135676a051 100644 --- a/source/intercoms/include/G4UImanager.hh +++ b/source/intercoms/include/G4UImanager.hh @@ -35,13 +35,14 @@ #ifndef G4UImanager_hh #define G4UImanager_hh 1 -#include -#include - +#include "G4UIcommandStatus.hh" +#include "G4VStateDependent.hh" #include "globals.hh" + #include "icomsdefs.hh" -#include "G4VStateDependent.hh" -#include "G4UIcommandStatus.hh" + +#include +#include class G4UIcommandTree; class G4UIcommand; @@ -57,11 +58,10 @@ class G4ProfilerMessenger; class G4UImanager : public G4VStateDependent { public: - + // A static method to get the pointer to the only existing object + // of this class static G4UImanager* GetUIpointer(); static G4UImanager* GetMasterUIpointer(); - // A static method to get the pointer to the only existing object - // of this class ~G4UImanager() override; @@ -70,131 +70,122 @@ class G4UImanager : public G4VStateDependent G4bool operator==(const G4UImanager&) const = delete; G4bool operator!=(const G4UImanager&) const = delete; + // This method returns a string which represents the current value(s) + // of the parameter(s) of the specified command. Null string will be + // returned if the given command is not defined or the command does + // not support the GetCurrentValues() method G4String GetCurrentValues(const char* aCommand); - // This method returns a string which represents the current value(s) - // of the parameter(s) of the specified command. Null string will be - // returned if the given command is not defined or the command does - // not support the GetCurrentValues() method + // This method register a new command void AddNewCommand(G4UIcommand* newCommand); - // This method register a new command + // This command removes the registered command. After invokation of this + // command, that particular command cannot be applied void RemoveCommand(G4UIcommand* aCommand); - // This command removes the registered command. After invokation of this - // command, that particular command cannot be applied + // A macro file defined by the argument will be read by G4UIbatch object void ExecuteMacroFile(const char* fileName); - // A macro file defined by the argument will be read by G4UIbatch object - - void Loop(const char* macroFile, const char* variableName, - G4double initialValue, G4double finalValue, - G4double stepSize = 1.0); - // Execute a macro file more than once with a loop counter - - void Foreach(const char* macroFile, const char* variableName, - const char* candidates); - // Execute a macro file more than once with an aliased variable which - // takes a value in the candidate list + // Execute a macro file more than once with a loop counter + void Loop(const char* macroFile, const char* variableName, G4double initialValue, + G4double finalValue, G4double stepSize = 1.0); + + // Execute a macro file more than once with an aliased variable which + // takes a value in the candidate list + void Foreach(const char* macroFile, const char* variableName, const char* candidates); + + // A command (and parameter(s)) given + // by the method's argument will be applied. Zero will be returned in + // case the command is successfully executed. Positive non-zero value + // will be returned if the command cannot be executed. The meaning of + // this non-zero value is the following: + // The returned number : xyy + // x00 : G4CommandStatus.hh enumeration + // yy : the problematic parameter (first found) G4int ApplyCommand(const char* aCommand); G4int ApplyCommand(const G4String& aCommand); - // A command (and parameter(s)) given - // by the method's argument will be applied. Zero will be returned in - // case the command is successfully executed. Positive non-zero value - // will be returned if the command cannot be executed. The meaning of - // this non-zero value is the following: - // The returned number : xyy - // x00 : G4CommandStatus.hh enumeration - // yy : the problematic parameter (first found) + // Find the G4UIcommand object. Null pointer is returned if command + // is not found. + // Please note that each thread returns different objects if this + // method is used in multi-threaded mode. G4UIcommand* FindCommand(const char* aCommand); G4UIcommand* FindCommand(const G4String& aCommand); - // Find the G4UIcommand object. Null pointer is returned if command - // is not found. - // Please note that each thread returns different objects if this - // method is used in multi-threaded mode. + // The executed commands will be stored in the defined file. If + // "historySwitch" is false, saving will be suspended void StoreHistory(const char* fileName = "G4history.macro"); - void StoreHistory(G4bool historySwitch, - const char* fileName = "G4history.macro"); - // The executed commands will be stored in the defined file. If - // "historySwitch" is false, saving will be suspended + void StoreHistory(G4bool historySwitch, const char* fileName = "G4history.macro"); + // All commands registered under the given directory will be listed to + // standard output void ListCommands(const char* direc); - // All commands registered under the given directory will be listed to - // standard output + // Define an alias. The first word of "aliasLine" string is the + // alias name and the remaining word(s) is(are) string value + // to be aliased void SetAlias(const char* aliasLine); - // Define an alias. The first word of "aliasLine" string is the - // alias name and the remaining word(s) is(are) string value - // to be aliased + // Remove the defined alias void RemoveAlias(const char* aliasName); - // Remove the defined alias + // Print all aliases void ListAlias(); - // Print all aliases + // Convert a command string which contains alias(es) G4String SolveAlias(const char* aCmd); - // Convert a command string which contains alias(es) + // Generate HTML files for defined UI commands void CreateHTML(const char* dir = "/"); - // Generate HTML files for defined UI commands + // These methods are used by G4UIcontrolMessenger to use Loop() + // and Foreach() methods void LoopS(const char* valueList); void ForeachS(const char* valueList); - // These methods are used by G4UIcontrolMessenger to use Loop() - // and Foreach() methods - G4bool Notify(G4ApplicationState requestedState) override; // This method is exclusively invoked by G4StateManager + G4bool Notify(G4ApplicationState requestedState) override; - G4String GetCurrentStringValue(const char* aCommand, - G4int parameterNumber = 1, - G4bool reGet = true); - G4int GetCurrentIntValue(const char* aCommand, G4int parameterNumber = 1, - G4bool reGet = true); - G4double GetCurrentDoubleValue(const char* aCommand, - G4int parameterNumber = 1, - G4bool reGet = true); - G4String GetCurrentStringValue(const char* aCommand, - const char* aParameterName, + // These six methods return the current value of a parameter of the + // given command. For the first three methods, the ordering number of + // the parameter (1 is the first parameter) can be given, whereas, + // other three methods can give the parameter name. + // If "reGet" is true, actual request of returning the current value + // will be sent to the corresponding messenger, while, if it is false, + // the value stored in G4Umanager will be used. The later case is valid + // for the sequential invokation for the same command + G4String GetCurrentStringValue(const char* aCommand, G4int parameterNumber = 1, + G4bool reGet = true); + G4int GetCurrentIntValue(const char* aCommand, G4int parameterNumber = 1, G4bool reGet = true); + G4double GetCurrentDoubleValue(const char* aCommand, G4int parameterNumber = 1, + G4bool reGet = true); + G4String GetCurrentStringValue(const char* aCommand, const char* aParameterName, + G4bool reGet = true); + G4int GetCurrentIntValue(const char* aCommand, const char* aParameterName, G4bool reGet = true); + G4double GetCurrentDoubleValue(const char* aCommand, const char* aParameterName, G4bool reGet = true); - G4int GetCurrentIntValue(const char* aCommand, const char* aParameterName, - G4bool reGet = true); - G4double GetCurrentDoubleValue(const char* aCommand, - const char* aParameterName, - G4bool reGet = true); - // These six methods return the current value of a parameter of the - // given command. For the first three methods, the ordering number of - // the parameter (1 is the first parameter) can be given, whereas, - // other three methods can give the parameter name. - // If "reGet" is true, actual request of returning the current value - // will be sent to the corresponding messenger, while, if it is false, - // the value stored in G4Umanager will be used. The later case is valid - // for the sequential invokation for the same command + // If the Boolean flags are true, Pause() method of G4StateManager is + // invoked at the very beginning (before generating a G4Event object) + // or at the end of each event. So that, in case a (G)UI session is + // defined, the user can interact inline void SetPauseAtBeginOfEvent(G4bool vl) { pauseAtBeginOfEvent = vl; } inline G4bool GetPauseAtBeginOfEvent() const { return pauseAtBeginOfEvent; } inline void SetPauseAtEndOfEvent(G4bool vl) { pauseAtEndOfEvent = vl; } inline G4bool GetPauseAtEndOfEvent() const { return pauseAtEndOfEvent; } - // If the Boolean flags are true, Pause() method of G4StateManager is - // invoked at the very beginning (before generating a G4Event object) - // or at the end of each event. So that, in case a (G)UI session is - // defined, the user can interact inline G4UIcommandTree* GetTree() const { return treeTop; } inline G4UIsession* GetSession() const { return session; } inline G4UIsession* GetG4UIWindow() const { return g4UIWindow; } + // These methods define the active (G)UI session inline void SetSession(G4UIsession* const value) { session = value; } inline void SetG4UIWindow(G4UIsession* const value) { g4UIWindow = value; } - // These methods define the active (G)UI session + // This method defines the destination of G4cout/G4cerr stream. + // For usual cases, this method will be invoked by a concrete + // (G)UI session class object and thus the user needs not to invoke this void SetCoutDestination(G4UIsession* const value); - // This method defines the destination of G4cout/G4cerr stream. - // For usual cases, this method will be invoked by a concrete - // (G)UI session class object and thus the user needs not to invoke this inline void SetVerboseLevel(G4int val) { verboseLevel = val; } inline G4int GetVerboseLevel() const { return verboseLevel; } @@ -202,8 +193,7 @@ class G4UImanager : public G4VStateDependent inline G4String GetPreviousCommand(G4int i) const { G4String st; - if(i >= 0 && i < G4int(histVec.size())) - { + if (i >= 0 && i < G4int(histVec.size())) { st = histVec[i]; } return st; @@ -220,9 +210,8 @@ class G4UImanager : public G4VStateDependent { isMaster = val; stackCommandsForBroadcast = val; - if(val && (bridges == nullptr)) - { - bridges = new std::vector; + if (val && (bridges == nullptr)) { + bridges = new std::vector; fMasterUImanager() = this; } } @@ -231,17 +220,15 @@ class G4UImanager : public G4VStateDependent std::vector* GetCommandStack(); void RegisterBridge(G4UIbridge* brg); + // Setups as above but for a non-worker thread (e.g. vis) void SetUpForAThread(G4int tId); - // Setups as above but for a non-worker thread (e.g. vis) void SetUpForSpecialThread(const G4String& aPrefix); inline G4int GetThreadID() const { return threadID; } - void SetCoutFileName(const G4String& fileN = "G4cout.txt", - G4bool ifAppend = true); - void SetCerrFileName(const G4String& fileN = "G4cerr.txt", - G4bool ifAppend = true); + void SetCoutFileName(const G4String& fileN = "G4cout.txt", G4bool ifAppend = true); + void SetCerrFileName(const G4String& fileN = "G4cerr.txt", G4bool ifAppend = true); void SetThreadPrefixString(const G4String& prefix = "W"); void SetThreadUseBuffer(G4bool flg = true); void SetThreadIgnore(G4int tid = 0); @@ -257,11 +244,9 @@ class G4UImanager : public G4VStateDependent inline void SetLastCommandOutputTreated() { fLastCommandOutputTreated = true; } protected: - G4UImanager(); private: - void AddWorkerCommand(G4UIcommand* newCommand); void RemoveWorkerCommand(G4UIcommand* aCommand); @@ -270,8 +255,7 @@ class G4UImanager : public G4VStateDependent G4UIcommandTree* FindDirectory(const char* dirName); private: - - G4ICOMS_DLL static G4UImanager*& fUImanager(); // thread-local + G4ICOMS_DLL static G4UImanager*& fUImanager(); // thread-local G4ICOMS_DLL static G4bool& fUImanagerHasBeenKilled(); // thread-local G4ICOMS_DLL static G4UImanager*& fMasterUImanager(); G4UIcommandTree* treeTop = nullptr; @@ -280,7 +264,7 @@ class G4UImanager : public G4VStateDependent G4UIcontrolMessenger* UImessenger = nullptr; G4UnitsMessenger* UnitsMessenger = nullptr; G4LocalThreadCoutMessenger* CoutMessenger = nullptr; - G4ProfilerMessenger* ProfileMessenger = nullptr; + G4ProfilerMessenger* ProfileMessenger = nullptr; G4String savedParameters; G4UIcommand* savedCommand = nullptr; G4int verboseLevel = 0; diff --git a/source/intercoms/include/G4UImessenger.hh b/source/intercoms/include/G4UImessenger.hh index 03bcfe5303c..66b5545409d 100644 --- a/source/intercoms/include/G4UImessenger.hh +++ b/source/intercoms/include/G4UImessenger.hh @@ -39,48 +39,39 @@ #ifndef G4UImessenger_hh #define G4UImessenger_hh 1 -#include "globals.hh" -#include "G4ios.hh" #include "G4UIdirectory.hh" +#include "G4ios.hh" +#include "globals.hh" class G4UImessenger { public: - + // Constructor. In the implementation of the concrete messenger, + // all commands related to the messenger must be constructed G4UImessenger() = default; - G4UImessenger(const G4String& path, const G4String& dsc, - G4bool commandsToBeBroadcasted = true); - // Constructor. In the implementation of the concrete messenger, - // all commands related to the messenger must be constructed + G4UImessenger(const G4String& path, const G4String& dsc, G4bool commandsToBeBroadcasted = true); + // Destructor. In the implementation of the concrete messenger, + // all commands defined in the constructor must be deleted virtual ~G4UImessenger(); - // Destructor. In the implementation of the concrete messenger, - // all commands defined in the constructor must be deleted + // The concrete implementation of this method gets the current value(s) + // of the parameter(s) of the given command from the destination class, + // converts the value(s) to a string, and returns the string. + // Conversion could be done by the ConvertToString() method of + // corresponding G4UIcmdXXX classes if the command is an object of + // these G4UIcmdXXX classes virtual G4String GetCurrentValue(G4UIcommand* command); - // The concrete implementation of this method gets the current value(s) - // of the parameter(s) of the given command from the destination class, - // converts the value(s) to a string, and returns the string. - // Conversion could be done by the ConvertToString() method of - // corresponding G4UIcmdXXX classes if the command is an object of - // these G4UIcmdXXX classes + // The concrete implementation of this method converts the string + // "newValue" to value(s) of type(s) of the parameter(s). + // Converted methods corresponding to the type of the command can be + // used if the command is an object of G4UIcmdXXX classes virtual void SetNewValue(G4UIcommand* command, G4String newValue); - // The concrete implementation of this method converts the string - // "newValue" to value(s) of type(s) of the parameter(s). - // Converted methods corresponding to the type of the command can be - // used if the command is an object of G4UIcmdXXX classes - G4bool operator==(const G4UImessenger& messenger) const; - G4bool operator!=(const G4UImessenger& messenger) const; - - inline G4bool CommandsShouldBeInMaster() const - { - return commandsShouldBeInMaster; - } + inline G4bool CommandsShouldBeInMaster() const { return commandsShouldBeInMaster; } protected: - G4String ItoS(G4int i); G4String DtoS(G4double a); G4String BtoS(G4bool b); @@ -91,30 +82,27 @@ class G4UImessenger void AddUIcommand(G4UIcommand* newCommand); + // Shortcut way for creating directory and commands void CreateDirectory(const G4String& path, const G4String& dsc, G4bool commandsToBeBroadcasted = true); - template + template T* CreateCommand(const G4String& cname, const G4String& dsc); - // Shortcut way for creating directory and commands protected: - G4UIdirectory* baseDir = nullptr; // used if new object is created - G4String baseDirName = ""; // used if dir already exists + G4String baseDirName = ""; // used if dir already exists G4bool commandsShouldBeInMaster = false; }; // Inline template implementations -template +template T* G4UImessenger::CreateCommand(const G4String& cname, const G4String& dsc) { G4String path; - if(cname[0] != '/') - { + if (cname[0] != '/') { path = baseDirName + cname; - if(path[0] != '/') - { + if (path[0] != '/') { path = "/" + path; } } diff --git a/source/intercoms/include/G4UIparameter.hh b/source/intercoms/include/G4UIparameter.hh index 4a63739d1a8..200d7443adf 100644 --- a/source/intercoms/include/G4UIparameter.hh +++ b/source/intercoms/include/G4UIparameter.hh @@ -39,77 +39,63 @@ #ifndef G4UIparameter_hh #define G4UIparameter_hh 1 -#include "globals.hh" #include "G4UItokenNum.hh" +#include "globals.hh" class G4UIparameter { public: - + // Default constructor G4UIparameter() = default; + + // Constructors, where "theName" is the name of the parameter which will + // be used by the range checking, "theType" is the type of the parameter + // (currently "b" (Boolean), "i" (integer), "l" (long int), "d" (double) + // and "s" (string) are supported). + // "theOmittable" is a Boolean flag to set whether + // the user of the command can omit the parameter or not. + // If "theOmittable" is true, the default value must be given G4UIparameter(char theType); G4UIparameter(const char* theName, char theType, G4bool theOmittable); - // Constructors, where "theName" is the name of the parameter which will - // be used by the range checking, "theType" is the type of the parameter - // (currently "b" (Boolean), "i" (integer), "l" (long int), "d" (double) - // and "s" (string) are supported). - // "theOmittable" is a Boolean flag to set whether - // the user of the command can omit the parameter or not. - // If "theOmittable" is true, the default value must be given + // Destructor. When a command is destructed, the delete operator(s) of the + // associated parameter(s) are AUTOMATICALLY invoked ~G4UIparameter(); - // Destructor. When a command is destructed, the delete operator(s) of the - // associated parameter(s) are AUTOMATICALLY invoked - - G4bool operator==(const G4UIparameter& right) const; - G4bool operator!=(const G4UIparameter& right) const; G4int CheckNewValue(const char* newValue); void List(); - inline void SetDefaultValue(const char* theDefaultValue) - { - defaultValue = theDefaultValue; - } + // These methods set the default value of the parameter + inline void SetDefaultValue(const char* theDefaultValue) { defaultValue = theDefaultValue; } void SetDefaultValue(G4int theDefaultValue); void SetDefaultValue(G4long theDefaultValue); void SetDefaultValue(G4double theDefaultValue); - // These methods set the default value of the parameter + // This method can be used for a string-type parameter that is + // used to specify a unit. This method is valid only for a + // string-type parameter void SetDefaultUnit(const char* theDefaultUnit); - // This method can be used for a string-type parameter that is - // used to specify a unit. This method is valid only for a - // string-type parameter inline const G4String& GetDefaultValue() const { return defaultValue; } inline char GetParameterType() const { return parameterType; } - inline void SetParameterRange(const char* theRange) - // Defines the range the parameter can take. - // The variable name appearing in the range expression must be the - // same as the name of the parameter. - // All the C++ syntax of relational operators are allowed for the - // range expression - { - parameterRange = theRange; - } + // Defines the range the parameter can take. + // The variable name appearing in the range expression must be the + // same as the name of the parameter. + // All the C++ syntax of relational operators are allowed for the + // range expression + inline void SetParameterRange(const char* theRange) { rangeExpression = theRange; } - inline const G4String& GetParameterRange() const { return parameterRange; } + inline const G4String& GetParameterRange() const { return rangeExpression; } inline void SetParameterName(const char* pName) { parameterName = pName; } inline const G4String& GetParameterName() const { return parameterName; } - inline void SetParameterCandidates(const char* theString) - // This method is meaningful if the type of the parameter is string. - // The candidates listed in the argument must be separated by space(s) - { - parameterCandidate = theString; - } + // This method is meaningful if the type of the parameter is string. + // The candidates listed in the argument must be separated by space(s) + inline void SetParameterCandidates(const char* theString) { parameterCandidate = theString; } - inline const G4String& GetParameterCandidates() const - { - return parameterCandidate; - } + inline const G4String& GetParameterCandidates() const { return parameterCandidate; } inline void SetOmittable(G4bool om) { omittable = om; } inline G4bool IsOmittable() const { return omittable; } @@ -119,30 +105,18 @@ class G4UIparameter // Obsolete methods // - inline void SetWidget(G4int theWidget) { widget = theWidget; } - inline const G4String& GetParameterGuidance() const - { - return parameterGuidance; - } - inline void SetGuidance(const char* theGuidance) - { - parameterGuidance = theGuidance; - } + inline const G4String& GetParameterGuidance() const { return parameterGuidance; } + inline void SetGuidance(const char* theGuidance) { parameterGuidance = theGuidance; } protected: - - using yystype = G4UItokenNum::yystype; + using yystype = G4UItokenNum::yystype; using tokenNum = G4UItokenNum::tokenNum; private: - // --- the following is used by CheckNewValue() ------- - G4int TypeCheck(const char* newValue); - G4int RangeCheck(const char* newValue); - G4int CandidateCheck(const char* newValue); - G4int IsInt(const char* str, short maxDigit); // used for both int and long int - G4int IsDouble(const char* str); - G4int ExpectExponent(const char* str); + G4bool TypeCheck(const char* newValue); + G4bool RangeCheck(const char* newValue); + G4bool CandidateCheck(const char* newValue); // syntax nodes yystype Expression(); yystype LogicalORExpression(); @@ -155,32 +129,26 @@ class G4UIparameter yystype PrimaryExpression(); // semantics routines G4int Eval2(const yystype& arg1, G4int op, const yystype& arg2); - G4int CompareInt(G4int arg1, G4int op, G4int arg2); - G4int CompareLong(G4long arg1, G4int op, G4long arg2); - G4int CompareDouble(double arg1, G4int op, double arg2); // utility - tokenNum Yylex(); // returns next token - G4int G4UIpGetc(); // read one char from rangeBuf + tokenNum Yylex(); // returns next token + G4int G4UIpGetc(); // read one char from rangeBuf G4int G4UIpUngetc(G4int c); // put back G4int Backslash(G4int c); G4int Follow(G4int expect, G4int ifyes, G4int ifno); - //G4String TokenToStr(G4int token); // data ----------------------------------------------------------- G4String parameterName; G4String parameterGuidance; G4String defaultValue; - G4String parameterRange; + G4String rangeExpression; G4String parameterCandidate; char parameterType = '\0'; G4bool omittable = false; G4bool currentAsDefaultFlag = false; - G4int widget = 0; //------------ CheckNewValue() related data members --------------- - G4String rangeBuf; - G4int bp = 0; // buffer pointer for rangeBuf + G4int bp = 0; // current index in rangeExpression tokenNum token = G4UItokenNum::NONE; yystype yylval; yystype newVal; diff --git a/source/intercoms/include/G4UIsession.hh b/source/intercoms/include/G4UIsession.hh index 505d94438be..a989c56bfeb 100644 --- a/source/intercoms/include/G4UIsession.hh +++ b/source/intercoms/include/G4UIsession.hh @@ -37,33 +37,33 @@ #include "G4coutDestination.hh" #include "globals.hh" + #include "icomsdefs.hh" class G4UIsession : public G4coutDestination { public: - G4UIsession(); G4UIsession(G4int iBatch); ~G4UIsession() override; + // This method will be invoked by main(). + // Optionally, it can be invoked by another session virtual G4UIsession* SessionStart(); - // This method will be invoked by main(). - // Optionally, it can be invoked by another session + // This method will be invoked by G4UImanager + // when the kernel comes to Pause state virtual void PauseSessionStart(const G4String& Prompt); - // This method will be invoked by G4UImanager - // when the kernel comes to Pause state + // These methods will be invoked by G4strstreambuf + G4int ReceiveG4debug(const G4String& debugString) override; G4int ReceiveG4cout(const G4String& coutString) override; G4int ReceiveG4cerr(const G4String& cerrString) override; - // These two methods will be invoked by G4strstreambuf static G4int InSession(); inline G4int GetLastReturnCode() const { return lastRC; } protected: - G4ICOMS_DLL static G4int inSession; G4int ifBatch = 0; G4int lastRC = 0; diff --git a/source/intercoms/include/G4UItokenNum.hh b/source/intercoms/include/G4UItokenNum.hh index 2be45ae12a4..d1e3068a291 100644 --- a/source/intercoms/include/G4UItokenNum.hh +++ b/source/intercoms/include/G4UItokenNum.hh @@ -38,59 +38,39 @@ namespace G4UItokenNum { - enum tokenNum - { - NONE = 0, - IDENTIFIER = 257, - CONSTINT = 258, - CONSTDOUBLE = 259, - CONSTCHAR = 260, - CONSTSTRING = 261, - GT = 262, - GE = 263, - LT = 264, - LE = 265, - EQ = 266, - NE = 267, - // LOGICALNOT = 268, - CONSTLONG = 268, - LOGICALOR = 269, - LOGICALAND = 270, - SCAREAMER = 33, - LPAREN = 40, - PLUS = 43, - MINUS = 45 - }; +enum tokenNum +{ + NONE = 0, + IDENTIFIER = 257, + CONSTINT = 258, + CONSTDOUBLE = 259, + CONSTCHAR = 260, + CONSTSTRING = 261, + GT = 262, + GE = 263, + LT = 264, + LE = 265, + EQ = 266, + NE = 267, + // LOGICALNOT = 268, + CONSTLONG = 268, + LOGICALOR = 269, + LOGICALAND = 270, + SCAREAMER = 33, + LPAREN = 40, + PLUS = 43, + MINUS = 45 +}; - using yystype = struct yystype - { - tokenNum type{ tokenNum::NONE }; - G4double D{ 0.0 }; - G4int I{ 0 }; - G4long L{ 0 }; - char C{ ' ' }; +struct yystype +{ + tokenNum type{tokenNum::NONE}; + G4double D{0.0}; + G4int I{0}; + G4long L{0}; + char C{' '}; G4String S; - - yystype() - : S("") - {} - G4bool operator==(const yystype& right) const { return this == &right; } - yystype& operator=(const yystype& right) - { - if(&right == this) - { - return *this; - } - type = right.type; - D = right.D; - I = right.I; - L = right.L; - C = right.C; - S = right.S; - return *this; - } - yystype(const yystype& right) { *this = right; } - }; +}; } // namespace G4UItokenNum #endif diff --git a/source/intercoms/include/G4VFlavoredParallelWorld.hh b/source/intercoms/include/G4VFlavoredParallelWorld.hh index 74796357a7d..bd700548fa7 100644 --- a/source/intercoms/include/G4VFlavoredParallelWorld.hh +++ b/source/intercoms/include/G4VFlavoredParallelWorld.hh @@ -39,11 +39,10 @@ class G4VPhysicalVolume; class G4VFlavoredParallelWorld { public: + virtual ~G4VFlavoredParallelWorld() = default; - virtual ~G4VFlavoredParallelWorld() {} - + // Interface for visualisation virtual G4VPhysicalVolume* GetThePhysicalVolumeWorld() const = 0; - // Interface for visualisation }; #endif diff --git a/source/intercoms/include/G4VGlobalFastSimulationManager.hh b/source/intercoms/include/G4VGlobalFastSimulationManager.hh index e77fab9d336..3ee27aba856 100644 --- a/source/intercoms/include/G4VGlobalFastSimulationManager.hh +++ b/source/intercoms/include/G4VGlobalFastSimulationManager.hh @@ -50,6 +50,7 @@ #define G4VGLOBALFASTSIMULATIONMANAGER_HH 1 #include "G4Types.hh" + #include "icomsdefs.hh" class G4VFlavoredParallelWorld; @@ -58,25 +59,22 @@ class G4ParticleDefinition; class G4VGlobalFastSimulationManager { public: - + // Returns pointer to the actual Global Fast Simulation manager if + // at least a parameterisation envelope exists static G4VGlobalFastSimulationManager* GetConcreteInstance(); - // Returns pointer to the actual Global Fast Simulation manager if - // at least a parameterisation envelope exists virtual ~G4VGlobalFastSimulationManager() = default; - virtual G4VFlavoredParallelWorld* GetFlavoredWorldForThis( - G4ParticleDefinition*) = 0; - // VGlobalFastSimulationManager interface for visualisation + // VGlobalFastSimulationManager interface for visualisation + virtual G4VFlavoredParallelWorld* GetFlavoredWorldForThis(G4ParticleDefinition*) = 0; protected: - + // Sets the pointer to the actual Global Fast Simulation manager static void SetConcreteInstance(G4VGlobalFastSimulationManager*); - // Sets the pointer to the actual Global Fast Simulation manager + // Pointer to real G4GlobalFastSimulationManager G4ICOMS_DLL static G4ThreadLocal G4VGlobalFastSimulationManager* fpConcreteInstance; - // Pointer to real G4GlobalFastSimulationManager }; #endif diff --git a/source/intercoms/include/G4LocalThreadCoutMessenger.hh b/source/intercoms/include/private/G4LocalThreadCoutMessenger.hh similarity index 99% rename from source/intercoms/include/G4LocalThreadCoutMessenger.hh rename to source/intercoms/include/private/G4LocalThreadCoutMessenger.hh index 600f252ca2a..e99f1229c4c 100644 --- a/source/intercoms/include/G4LocalThreadCoutMessenger.hh +++ b/source/intercoms/include/private/G4LocalThreadCoutMessenger.hh @@ -34,8 +34,8 @@ #ifndef G4LocalThreadCoutMessenger_hh #define G4LocalThreadCoutMessenger_hh 1 -#include "globals.hh" #include "G4UImessenger.hh" +#include "globals.hh" class G4UIdirectory; class G4UIcommand; @@ -46,14 +46,12 @@ class G4UIcmdWithAnInteger; class G4LocalThreadCoutMessenger : public G4UImessenger { public: - G4LocalThreadCoutMessenger(); ~G4LocalThreadCoutMessenger() override; void SetNewValue(G4UIcommand*, G4String) override; - private: - + private: G4UIdirectory* coutDir = nullptr; G4UIcommand* coutFileNameCmd = nullptr; G4UIcommand* cerrFileNameCmd = nullptr; diff --git a/source/intercoms/include/G4ProfilerMessenger.hh b/source/intercoms/include/private/G4ProfilerMessenger.hh similarity index 65% rename from source/intercoms/include/G4ProfilerMessenger.hh rename to source/intercoms/include/private/G4ProfilerMessenger.hh index eacb3aa78fd..8abd7ab7f75 100644 --- a/source/intercoms/include/G4ProfilerMessenger.hh +++ b/source/intercoms/include/private/G4ProfilerMessenger.hh @@ -36,48 +36,41 @@ #ifndef G4ProfilerMessenger_hh #define G4ProfilerMessenger_hh 1 -#include "globals.hh" -#include "G4UImessenger.hh" #include "G4Profiler.hh" +#include "G4UImessenger.hh" +#include "globals.hh" class G4UIdirectory; class G4UIcmdWithAString; class G4UIcmdWithABool; -// -------------------------------------------------------------------- - class G4ProfilerMessenger : public G4UImessenger { - public: - G4ProfilerMessenger(); - ~G4ProfilerMessenger() override; - - // no copy but move is fine - G4ProfilerMessenger(const G4ProfilerMessenger&) = delete; - G4ProfilerMessenger(G4ProfilerMessenger&&) = default; - - // no copy but move is fine - G4ProfilerMessenger& operator=(const G4ProfilerMessenger&) = delete; - G4ProfilerMessenger& operator=(G4ProfilerMessenger&&) = default; + public: + G4ProfilerMessenger(); + ~G4ProfilerMessenger() override; + G4ProfilerMessenger(const G4ProfilerMessenger&) = delete; + G4ProfilerMessenger& operator=(const G4ProfilerMessenger&) = delete; + G4ProfilerMessenger(G4ProfilerMessenger&&) = default; + G4ProfilerMessenger& operator=(G4ProfilerMessenger&&) = default; - void SetNewValue(G4UIcommand*, G4String) override; - // G4String GetCurrentValue(G4UIcommand* command); + void SetNewValue(G4UIcommand*, G4String) override; - private: - using stringcmd_pair = std::pair; - using boolcmd_pair = std::pair; - using directory_array = std::array; - using stringcmd_array = std::array; - using boolcmd_array = std::array; - using boolcmd_vector = std::vector; + private: + using stringcmd_pair = std::pair; + using boolcmd_pair = std::pair; + using directory_array = std::array; + using stringcmd_array = std::array; + using boolcmd_array = std::array; + using boolcmd_vector = std::vector; - G4UIdirectory* profileDirectory; - G4UIdirectory* profileOutputDirectory; - directory_array profileTypeDirs; + G4UIdirectory* profileDirectory; + G4UIdirectory* profileOutputDirectory; + directory_array profileTypeDirs; - boolcmd_array profileEnableCmds; - boolcmd_vector profileGeneralCmds; - stringcmd_array profileCompCmds; + boolcmd_array profileEnableCmds; + boolcmd_vector profileGeneralCmds; + stringcmd_array profileCompCmds; }; #endif diff --git a/source/intercoms/include/G4UIaliasList.hh b/source/intercoms/include/private/G4UIaliasList.hh similarity index 81% rename from source/intercoms/include/G4UIaliasList.hh rename to source/intercoms/include/private/G4UIaliasList.hh index 2faaf913e22..7ea494dc9df 100644 --- a/source/intercoms/include/G4UIaliasList.hh +++ b/source/intercoms/include/private/G4UIaliasList.hh @@ -35,32 +35,31 @@ #ifndef G4UIaliasList_hh #define G4UIaliasList_hh 1 -#include - #include "globals.hh" +#include + class G4UIaliasList { public: + // Add or update alias from aliasName to command path aliasValue + void ChangeAlias(const char* aliasName, const char* aliasValue); - G4UIaliasList() = default; - ~G4UIaliasList(); - + // Remove aliasName from list of aliases. void RemoveAlias(const char* aliasName); - void ChangeAlias(const char* aliasName, const char* aliasValue); - G4String* FindAlias(const char* aliasName); - void List(); - private: + // Return command corresponding to alias, or nullptr if alias does not exist. + // Ownership of the pointer is retained by G4UIaliasList. + const G4String* FindAlias(const char* aliasName) const; - G4bool operator==(const G4UIaliasList& right) const; - G4bool operator!=(const G4UIaliasList& right) const; + // Print alias : command pairs to G4cout + void List() const; + private: + // Adds a new alias/value pair to the map void AddNewAlias(const char* aliasName, const char* aliasValue); - G4int FindAliasID(const char* aliasName); - std::vector alias; - std::vector value; + std::map aliases; }; #endif diff --git a/source/intercoms/include/G4UIcontrolMessenger.hh b/source/intercoms/include/private/G4UIcontrolMessenger.hh similarity index 99% rename from source/intercoms/include/G4UIcontrolMessenger.hh rename to source/intercoms/include/private/G4UIcontrolMessenger.hh index c1feab0f1b6..c71accb316e 100644 --- a/source/intercoms/include/G4UIcontrolMessenger.hh +++ b/source/intercoms/include/private/G4UIcontrolMessenger.hh @@ -80,14 +80,12 @@ class G4UIcommand; class G4UIcontrolMessenger : public G4UImessenger { public: - G4UIcontrolMessenger(); ~G4UIcontrolMessenger() override; void SetNewValue(G4UIcommand* command, G4String newValue) override; G4String GetCurrentValue(G4UIcommand* command) override; - private: - + private: G4UIdirectory* controlDirectory = nullptr; G4UIcmdWithAString* macroPathCommand = nullptr; G4UIcmdWithAString* ExecuteCommand = nullptr; diff --git a/source/intercoms/include/private/G4UIparsing.hh b/source/intercoms/include/private/G4UIparsing.hh new file mode 100644 index 00000000000..3f035a70a56 --- /dev/null +++ b/source/intercoms/include/private/G4UIparsing.hh @@ -0,0 +1,292 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// G4UIparsing +// +// Utilities for parsing/checking inputs in G4UIparameter/G4UIcommand + +#ifndef G4UIparsing_hh +#define G4UIparsing_hh 1 + +#include "G4UItokenNum.hh" +#include "globals.hh" + +#include + +namespace G4UIparsing +{ +// Convert G4String to value of type T +template +inline T StoT(const G4String& s) +{ + T vl; + std::istringstream is(s); + is >> vl; + return vl; +} + +// Convert value of type T to G4String +template +inline G4String TtoS(T value) +{ + std::ostringstream os; + os << value; + return os.str(); +} + +// Return true if `str` parses to an integral number no more than `maxDigit` digits +inline G4bool IsInt(const char* str, short maxDigits) +{ + const char* p = str; + G4int length = 0; + if (*p == '+' || *p == '-') { + ++p; + } + if (isdigit((G4int)(*p)) != 0) { + while (isdigit((G4int)(*p)) != 0) { + ++p; + ++length; + } + if (*p == '\0') { + if (length > maxDigits) { + G4cerr << "digit length exceeds" << G4endl; + return false; + } + return true; + } + } + return false; +} + +// Return true if `str` parses to an exponent +// +// A valid exponent is an integer of no more than 7 digits +inline G4bool ExpectExponent(const char* str) +{ + return IsInt(str, 7); +} + +inline G4bool IsDouble(const char* str) +{ + const char* p = str; + switch (*p) { + case '+': + case '-': + ++p; + if (isdigit(*p) != 0) { + while (isdigit((G4int)(*p)) != 0) { + ++p; + } + switch (*p) { + case '\0': + return true; // break; + case 'E': + case 'e': + return ExpectExponent(++p); // break; + case '.': + ++p; + if (*p == '\0') { + return true; + } + if (*p == 'e' || *p == 'E') { + return ExpectExponent(++p); + } + if (isdigit(*p) != 0) { + while (isdigit((G4int)(*p)) != 0) { + ++p; + } + if (*p == '\0') { + return true; + } + if (*p == 'e' || *p == 'E') { + return ExpectExponent(++p); + } + } + else { + return false; + } + break; + default: + return false; + } + } + if (*p == '.') { + ++p; + if (isdigit(*p) != 0) { + while (isdigit((G4int)(*p)) != 0) { + ++p; + } + if (*p == '\0') { + return true; + } + if (*p == 'e' || *p == 'E') { + return ExpectExponent(++p); + } + } + } + break; + case '.': + ++p; + if (isdigit(*p) != 0) { + while (isdigit((G4int)(*p)) != 0) { + ++p; + } + if (*p == '\0') { + return true; + } + if (*p == 'e' || *p == 'E') { + return ExpectExponent(++p); + } + } + break; + default: // digit is expected + if (isdigit(*p) != 0) { + while (isdigit((G4int)(*p)) != 0) { + ++p; + } + if (*p == '\0') { + return true; + } + if (*p == 'e' || *p == 'E') { + return ExpectExponent(++p); + } + if (*p == '.') { + ++p; + if (*p == '\0') { + return true; + } + if (*p == 'e' || *p == 'E') { + return ExpectExponent(++p); + } + if (isdigit(*p) != 0) { + while (isdigit((G4int)(*p)) != 0) { + ++p; + } + if (*p == '\0') { + return true; + } + if (*p == 'e' || *p == 'E') { + return ExpectExponent(++p); + } + } + } + } + } + return false; +} + +// -------------------------------------------------------------------- +inline G4int CompareInt(G4int arg1, G4int op, G4int arg2, G4int& errCode) +{ + G4int result = -1; + switch (op) { + case G4UItokenNum::GT: + result = static_cast(arg1 > arg2); + break; + case G4UItokenNum::GE: + result = static_cast(arg1 >= arg2); + break; + case G4UItokenNum::LT: + result = static_cast(arg1 < arg2); + break; + case G4UItokenNum::LE: + result = static_cast(arg1 <= arg2); + break; + case G4UItokenNum::EQ: + result = static_cast(arg1 == arg2); + break; + case G4UItokenNum::NE: + result = static_cast(arg1 != arg2); + break; + default: + G4cerr << "Parameter range: error at CompareInt" << G4endl; + errCode = 1; + } + return result; +} + +// -------------------------------------------------------------------- +inline G4int CompareLong(G4long arg1, G4int op, G4long arg2, G4int& errCode) +{ + G4int result = -1; + switch (op) { + case G4UItokenNum::GT: + result = static_cast(arg1 > arg2); + break; + case G4UItokenNum::GE: + result = static_cast(arg1 >= arg2); + break; + case G4UItokenNum::LT: + result = static_cast(arg1 < arg2); + break; + case G4UItokenNum::LE: + result = static_cast(arg1 <= arg2); + break; + case G4UItokenNum::EQ: + result = static_cast(arg1 == arg2); + break; + case G4UItokenNum::NE: + result = static_cast(arg1 != arg2); + break; + default: + G4cerr << "Parameter range: error at CompareInt" << G4endl; + errCode = 1; + } + return result; +} + +// -------------------------------------------------------------------- +inline G4int CompareDouble(G4double arg1, G4int op, G4double arg2, G4int& errCode) +{ + G4int result = -1; + switch (op) { + case G4UItokenNum::GT: + result = static_cast(arg1 > arg2); + break; + case G4UItokenNum::GE: + result = static_cast(arg1 >= arg2); + break; + case G4UItokenNum::LT: + result = static_cast(arg1 < arg2); + break; + case G4UItokenNum::LE: + result = static_cast(arg1 <= arg2); + break; + case G4UItokenNum::EQ: + result = static_cast(arg1 == arg2); + break; + case G4UItokenNum::NE: + result = static_cast(arg1 != arg2); + break; + default: + G4cerr << "Parameter range: error at CompareDouble" << G4endl; + errCode = 1; + } + return result; +} + +} // namespace G4UIparsing + +#endif diff --git a/source/intercoms/include/G4UnitsMessenger.hh b/source/intercoms/include/private/G4UnitsMessenger.hh similarity index 99% rename from source/intercoms/include/G4UnitsMessenger.hh rename to source/intercoms/include/private/G4UnitsMessenger.hh index 76dc21b62c2..8807f041c4a 100644 --- a/source/intercoms/include/G4UnitsMessenger.hh +++ b/source/intercoms/include/private/G4UnitsMessenger.hh @@ -35,8 +35,8 @@ #ifndef G4UnitsMessenger_hh #define G4UnitsMessenger_hh 1 -#include "globals.hh" #include "G4UImessenger.hh" +#include "globals.hh" class G4UIdirectory; class G4UIcmdWithoutParameter; @@ -44,14 +44,12 @@ class G4UIcmdWithoutParameter; class G4UnitsMessenger : public G4UImessenger { public: - G4UnitsMessenger(); ~G4UnitsMessenger() override; void SetNewValue(G4UIcommand*, G4String) override; - private: - + private: G4UIdirectory* UnitsTableDir = nullptr; G4UIcmdWithoutParameter* ListCmd = nullptr; }; diff --git a/source/intercoms/sources.cmake b/source/intercoms/sources.cmake index ca9c04071bf..8b220b304ec 100644 --- a/source/intercoms/sources.cmake +++ b/source/intercoms/sources.cmake @@ -5,9 +5,6 @@ geant4_add_module(G4intercoms G4AnyMethod.hh G4AnyType.hh G4GenericMessenger.hh - G4LocalThreadCoutMessenger.hh - G4ProfilerMessenger.hh - G4UIaliasList.hh G4UIbatch.hh G4UIbridge.hh G4UIcmdWith3Vector.hh @@ -22,17 +19,22 @@ geant4_add_module(G4intercoms G4UIcommand.hh G4UIcommandStatus.hh G4UIcommandTree.hh - G4UIcontrolMessenger.hh G4UIdirectory.hh G4UImanager.hh G4UImessenger.hh G4UIparameter.hh G4UIsession.hh G4UItokenNum.hh - G4UnitsMessenger.hh G4VFlavoredParallelWorld.hh G4VGlobalFastSimulationManager.hh icomsdefs.hh + PRIVATE_HEADERS + G4LocalThreadCoutMessenger.hh + G4ProfilerMessenger.hh + G4UIaliasList.hh + G4UIcontrolMessenger.hh + G4UIparsing.hh + G4UnitsMessenger.hh SOURCES G4LocalThreadCoutMessenger.cc G4GenericMessenger.cc diff --git a/source/intercoms/src/G4GenericMessenger.cc b/source/intercoms/src/G4GenericMessenger.cc index d8de9239636..197b178c6ed 100644 --- a/source/intercoms/src/G4GenericMessenger.cc +++ b/source/intercoms/src/G4GenericMessenger.cc @@ -27,7 +27,7 @@ // Author: // P.Mato, CERN - 27 September 2012 // Updates: -// M.Asai, SLAC - 26 November 2013 +// M.Asai, SLAC - 26 November 2013 // Adding methods with unit declaration and making thread-safe for // version 10. // M.Asai, SLAC - 04 May 2014 @@ -38,31 +38,30 @@ // -------------------------------------------------------------------- #include "G4GenericMessenger.hh" + +#include "G4Threading.hh" #include "G4Types.hh" -#include "G4UImessenger.hh" -#include "G4UIcommand.hh" -#include "G4UIcmdWithADoubleAndUnit.hh" #include "G4UIcmdWith3Vector.hh" #include "G4UIcmdWith3VectorAndUnit.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcommand.hh" #include "G4UIdirectory.hh" -#include "G4Threading.hh" +#include "G4UImessenger.hh" #include class G4InvalidUICommand : public std::bad_cast { public: - G4InvalidUICommand() = default; - const char* what() const throw() override - { - return "G4InvalidUICommand: command does not exist or is of invalid type"; + G4InvalidUICommand() = default; + const char* what() const throw() override + { + return "G4InvalidUICommand: command does not exist or is of invalid type"; } }; -G4GenericMessenger::G4GenericMessenger(void* obj, const G4String& dir, - const G4String& doc) - : directory(dir) - , object(obj) +G4GenericMessenger::G4GenericMessenger(void* obj, const G4String& dir, const G4String& doc) + : directory(dir), object(obj) { dircmd = new G4UIdirectory(dir); dircmd->SetGuidance(doc); @@ -71,136 +70,134 @@ G4GenericMessenger::G4GenericMessenger(void* obj, const G4String& dir, G4GenericMessenger::~G4GenericMessenger() { delete dircmd; - for(const auto& propertie : properties) - { + for (const auto& propertie : properties) { delete propertie.second.command; } - for(const auto& method : methods) - { + for (const auto& method : methods) { delete method.second.command; } } -G4GenericMessenger::Command& G4GenericMessenger::DeclareProperty( - const G4String& name, const G4AnyType& var, const G4String& doc) +G4GenericMessenger::Command& +G4GenericMessenger::DeclareProperty(const G4String& name, const G4AnyType& var, const G4String& doc) { G4String fullpath = directory + name; G4UIcommand* cmd = nullptr; - if(var.TypeInfo() == typeid(G4ThreeVector)) - { + if (var.TypeInfo() == typeid(G4ThreeVector)) { cmd = new G4UIcmdWith3Vector(fullpath.c_str(), this); (static_cast(cmd)) ->SetParameterName("valueX", "valueY", "valueZ", false, false); } - else - { - cmd = new G4UIcommand(fullpath.c_str(), this); + else { + cmd = new G4UIcommand(fullpath.c_str(), this); char ptype; - if(var.TypeInfo() == typeid(int) || var.TypeInfo() == typeid(long) || - var.TypeInfo() == typeid(unsigned int) || - var.TypeInfo() == typeid(unsigned long)) - { ptype = 'i'; } - else if(var.TypeInfo() == typeid(float) || var.TypeInfo() == typeid(double)) - { ptype = 'd'; } - else if(var.TypeInfo() == typeid(bool)) - { ptype = 'b'; } - else if(var.TypeInfo() == typeid(G4String)) - { ptype = 's'; } - else - { ptype = 's'; } + if (var.TypeInfo() == typeid(int) || var.TypeInfo() == typeid(long) + || var.TypeInfo() == typeid(unsigned int) || var.TypeInfo() == typeid(unsigned long)) + { + ptype = 'i'; + } + else if (var.TypeInfo() == typeid(float) || var.TypeInfo() == typeid(double)) { + ptype = 'd'; + } + else if (var.TypeInfo() == typeid(bool)) { + ptype = 'b'; + } + else if (var.TypeInfo() == typeid(G4String)) { + ptype = 's'; + } + else { + ptype = 's'; + } cmd->SetParameter(new G4UIparameter("value", ptype, false)); } - if(!doc.empty()) - { cmd->SetGuidance(doc); } + if (!doc.empty()) { + cmd->SetGuidance(doc); + } return properties[name] = Property(var, cmd); } -G4GenericMessenger::Command& G4GenericMessenger::DeclarePropertyWithUnit( - const G4String& name, const G4String& defaultUnit, const G4AnyType& var, - const G4String& doc) +G4GenericMessenger::Command& +G4GenericMessenger::DeclarePropertyWithUnit(const G4String& name, const G4String& defaultUnit, + const G4AnyType& var, const G4String& doc) { - if(var.TypeInfo() != typeid(float) && var.TypeInfo() != typeid(double) && - var.TypeInfo() != typeid(G4ThreeVector)) + if (var.TypeInfo() != typeid(float) && var.TypeInfo() != typeid(double) + && var.TypeInfo() != typeid(G4ThreeVector)) { return DeclareProperty(name, var, doc); } G4String fullpath = directory + name; G4UIcommand* cmd; - if(var.TypeInfo() == typeid(float) || var.TypeInfo() == typeid(double)) - { + if (var.TypeInfo() == typeid(float) || var.TypeInfo() == typeid(double)) { cmd = new G4UIcmdWithADoubleAndUnit(fullpath.c_str(), this); - (static_cast(cmd)) - ->SetParameterName("value", false, false); + (static_cast(cmd))->SetParameterName("value", false, false); (static_cast(cmd))->SetDefaultUnit(defaultUnit); } - else - { + else { cmd = new G4UIcmdWith3VectorAndUnit(fullpath.c_str(), this); (static_cast(cmd)) ->SetParameterName("valueX", "valueY", "valueZ", false, false); (static_cast(cmd))->SetDefaultUnit(defaultUnit); } - if(!doc.empty()) - { + if (!doc.empty()) { cmd->SetGuidance(doc); } return properties[name] = Property(var, cmd); } -G4GenericMessenger::Command& G4GenericMessenger::DeclareMethod( - const G4String& name, const G4AnyMethod& fun, const G4String& doc) +G4GenericMessenger::Command& +G4GenericMessenger::DeclareMethod(const G4String& name, const G4AnyMethod& fun, const G4String& doc) { G4String fullpath = directory + name; - auto* cmd = new G4UIcommand(fullpath.c_str(), this); - if(!doc.empty()) - { + auto* cmd = new G4UIcommand(fullpath.c_str(), this); + if (!doc.empty()) { cmd->SetGuidance(doc); } - for(std::size_t i = 0; i < fun.NArg(); ++i) - { + for (std::size_t i = 0; i < fun.NArg(); ++i) { G4String argNam = "arg" + ItoS((G4int)i); char ptype = 's'; auto& tInfo = fun.ArgType(i); - if(tInfo == typeid(int) || tInfo == typeid(long) || - tInfo == typeid(unsigned int) || - tInfo == typeid(unsigned long)) - { ptype = 'i'; } - else if(tInfo == typeid(float) || tInfo == typeid(double)) - { ptype = 'd'; } - else if(tInfo == typeid(bool)) - { ptype = 'b'; } - else if(tInfo == typeid(G4String)) - { ptype = 's'; } - else - { ptype = 's'; } + if (tInfo == typeid(int) || tInfo == typeid(long) || tInfo == typeid(unsigned int) + || tInfo == typeid(unsigned long)) + { + ptype = 'i'; + } + else if (tInfo == typeid(float) || tInfo == typeid(double)) { + ptype = 'd'; + } + else if (tInfo == typeid(bool)) { + ptype = 'b'; + } + else if (tInfo == typeid(G4String)) { + ptype = 's'; + } + else { + ptype = 's'; + } cmd->SetParameter(new G4UIparameter(argNam, ptype, false)); } return methods[name] = Method(fun, object, cmd); } -G4GenericMessenger::Command& G4GenericMessenger::DeclareMethodWithUnit( - const G4String& name, const G4String& defaultUnit, const G4AnyMethod& fun, - const G4String& doc) +G4GenericMessenger::Command& G4GenericMessenger::DeclareMethodWithUnit(const G4String& name, + const G4String& defaultUnit, + const G4AnyMethod& fun, + const G4String& doc) { G4String fullpath = directory + name; - if(fun.NArg() != 1) - { + if (fun.NArg() != 1) { G4ExceptionDescription ed; ed << "G4GenericMessenger::DeclareMethodWithUnit() does not support a " "method that has more than\n" << "one arguments (or no argument). Please use " "G4GenericMessenger::DeclareMethod method for\n" << "your command <" << fullpath << ">."; - G4Exception("G4GenericMessenger::DeclareMethodWithUnit()", "Intercom70002", - FatalException, ed); + G4Exception("G4GenericMessenger::DeclareMethodWithUnit()", "Intercom70002", FatalException, ed); } G4UIcommand* cmd = new G4UIcmdWithADoubleAndUnit(fullpath.c_str(), this); - (static_cast(cmd)) - ->SetParameterName("value", false, false); + (static_cast(cmd))->SetParameterName("value", false, false); (static_cast(cmd))->SetDefaultUnit(defaultUnit); - if(!doc.empty()) - { + if (!doc.empty()) { cmd->SetGuidance(doc); } return methods[name] = Method(fun, object, cmd); @@ -208,56 +205,43 @@ G4GenericMessenger::Command& G4GenericMessenger::DeclareMethodWithUnit( G4String G4GenericMessenger::GetCurrentValue(G4UIcommand* command) { - if(properties.find(command->GetCommandName()) != properties.cend()) - { + if (properties.find(command->GetCommandName()) != properties.cend()) { Property& p = properties[command->GetCommandName()]; return p.variable.ToString(); } - else if(methods.find(command->GetCommandName()) != methods.cend()) - { + if (methods.find(command->GetCommandName()) != methods.cend()) { G4cout << " GetCurrentValue() is not available for a command defined by " "G4GenericMessenger::DeclareMethod()." << G4endl; return G4String(); } - else - { - throw G4InvalidUICommand(); - } + + throw G4InvalidUICommand(); } void G4GenericMessenger::SetNewValue(G4UIcommand* command, G4String newValue) { // Check if there are units on this commands - if(typeid(*command) == typeid(G4UIcmdWithADoubleAndUnit)) - { - newValue = G4UIcommand::ConvertToString( - G4UIcommand::ConvertToDimensionedDouble(newValue)); + if (typeid(*command) == typeid(G4UIcmdWithADoubleAndUnit)) { + newValue = G4UIcommand::ConvertToString(G4UIcommand::ConvertToDimensionedDouble(newValue)); } - else if(typeid(*command) == typeid(G4UIcmdWith3VectorAndUnit)) - { - newValue = G4UIcommand::ConvertToString( - G4UIcommand::ConvertToDimensioned3Vector(newValue)); + else if (typeid(*command) == typeid(G4UIcmdWith3VectorAndUnit)) { + newValue = G4UIcommand::ConvertToString(G4UIcommand::ConvertToDimensioned3Vector(newValue)); } - if(properties.find(command->GetCommandName()) != properties.cend()) - { + if (properties.find(command->GetCommandName()) != properties.cend()) { Property& p = properties[command->GetCommandName()]; p.variable.FromString(newValue); } - else if(methods.find(command->GetCommandName()) != methods.cend()) - { + else if (methods.find(command->GetCommandName()) != methods.cend()) { Method& m = methods[command->GetCommandName()]; - if(m.method.NArg() == 0) - { + if (m.method.NArg() == 0) { m.method.operator()(m.object); } - else if(m.method.NArg() > 0) - { + else if (m.method.NArg() > 0) { m.method.operator()(m.object, newValue); } - else - { + else { throw G4InvalidUICommand(); } } @@ -268,14 +252,13 @@ void G4GenericMessenger::SetGuidance(const G4String& s) dircmd->SetGuidance(s); } -G4GenericMessenger::Command& G4GenericMessenger::Command::SetUnit( - const G4String& unit, UnitSpec spec) +G4GenericMessenger::Command& G4GenericMessenger::Command::SetUnit(const G4String& unit, + UnitSpec spec) { // Change the type of command (unfortunatelly this is done a posteriory) // We need to delete the old command before creating the new one and therefore // we need to recover the information before the deletetion - if(G4Threading::IsMultithreadedApplication()) - { + if (G4Threading::IsMultithreadedApplication()) { G4String cmdpath = command->GetCommandPath(); G4ExceptionDescription ed; ed << "G4GenericMessenger::Command::SetUnit() is thread-unsafe and should " @@ -291,23 +274,20 @@ G4GenericMessenger::Command& G4GenericMessenger::Command::SetUnit( << " const G4AnyType& variable, const G4String& " "doc)\n" << "to define a command with a unit <" << unit << ">."; - if(spec != UnitDefault) - { + if (spec != UnitDefault) { ed << "\nPlease use a default unit instead of unit category."; } - G4Exception("G4GenericMessenger::Command::SetUnit()", "Intercom70001", - FatalException, ed); + G4Exception("G4GenericMessenger::Command::SetUnit()", "Intercom70001", FatalException, ed); return *this; } - G4String cmdpath = command->GetCommandPath(); + G4String cmdpath = command->GetCommandPath(); G4UImessenger* messenger = command->GetMessenger(); - G4String range = command->GetRange(); + G4String range = command->GetRange(); std::vector guidance; - G4String par_name = command->GetParameter(0)->GetParameterName(); + G4String par_name = command->GetParameter(0)->GetParameterName(); G4bool par_omitable = command->GetParameter(0)->IsOmittable(); - for(G4int i = 0; i < (G4int)command->GetGuidanceEntries(); ++i) - { + for (G4int i = 0; i < (G4int)command->GetGuidanceEntries(); ++i) { guidance.push_back(command->GetGuidanceLine(i)); } // Before deleting the command we need to add a fake one to avoid deleting @@ -315,62 +295,54 @@ G4GenericMessenger::Command& G4GenericMessenger::Command::SetUnit( G4UIcommand tmp((cmdpath + "_tmp").c_str(), messenger); delete command; - if(*type == typeid(float) || *type == typeid(double)) - { + if (*type == typeid(float) || *type == typeid(double)) { auto* cmd_t = new G4UIcmdWithADoubleAndUnit(cmdpath, messenger); - if(spec == UnitDefault) - { + if (spec == UnitDefault) { cmd_t->SetDefaultUnit(unit); } - else if(spec == UnitCategory) - { + else if (spec == UnitCategory) { cmd_t->SetUnitCategory(unit); } cmd_t->SetParameterName(par_name, par_omitable); command = cmd_t; } - else if(*type == typeid(G4ThreeVector)) - { + else if (*type == typeid(G4ThreeVector)) { auto* cmd_t = new G4UIcmdWith3VectorAndUnit(cmdpath, messenger); - if(spec == UnitDefault) - { + if (spec == UnitDefault) { cmd_t->SetDefaultUnit(unit); } - else if(spec == UnitCategory) - { + else if (spec == UnitCategory) { cmd_t->SetUnitCategory(unit); } command = cmd_t; } - else - { + else { G4cerr << "Only parameters of type or can be associated " "with units" << G4endl; return *this; } - for(auto& i : guidance) - { + for (auto& i : guidance) { command->SetGuidance(i); } command->SetRange(range); return *this; } -G4GenericMessenger::Command& G4GenericMessenger::Command::SetParameterName( - const G4String& name, G4bool omittable, G4bool currentAsDefault) -{ - return SetParameterName(0,name,omittable,currentAsDefault); +G4GenericMessenger::Command& G4GenericMessenger::Command::SetParameterName(const G4String& name, + G4bool omittable, + G4bool currentAsDefault) +{ + return SetParameterName(0, name, omittable, currentAsDefault); } -G4GenericMessenger::Command& G4GenericMessenger::Command::SetParameterName( - G4int pIdx, - const G4String& name, G4bool omittable, G4bool currentAsDefault) +G4GenericMessenger::Command& G4GenericMessenger::Command::SetParameterName(G4int pIdx, + const G4String& name, + G4bool omittable, + G4bool currentAsDefault) { - if(pIdx < 0 || pIdx >= (G4int)(command->GetParameterEntries())) - { - G4cerr << "Invalid parameter index : " << pIdx << "\nMethod ignored." - << G4endl; + if (pIdx < 0 || pIdx >= (G4int)(command->GetParameterEntries())) { + G4cerr << "Invalid parameter index : " << pIdx << "\nMethod ignored." << G4endl; return *this; } G4UIparameter* theParam = command->GetParameter(pIdx); @@ -380,13 +352,14 @@ G4GenericMessenger::Command& G4GenericMessenger::Command::SetParameterName( return *this; } -G4GenericMessenger::Command& G4GenericMessenger::Command::SetParameterName( - const G4String& namex, const G4String& namey, const G4String& namez, - G4bool omittable, G4bool currentAsDefault) +G4GenericMessenger::Command& G4GenericMessenger::Command::SetParameterName(const G4String& namex, + const G4String& namey, + const G4String& namez, + G4bool omittable, + G4bool currentAsDefault) { - if(*type != typeid(G4ThreeVector)) - { - G4cerr << "This SetParameterName method is for G4ThreeVector!! " + if (*type != typeid(G4ThreeVector)) { + G4cerr << "This SetParameterName method is for G4ThreeVector!! " << "Method ignored." << G4endl; return *this; } @@ -405,19 +378,16 @@ G4GenericMessenger::Command& G4GenericMessenger::Command::SetParameterName( return *this; } -G4GenericMessenger::Command& G4GenericMessenger::Command::SetCandidates( - const G4String& candList) +G4GenericMessenger::Command& G4GenericMessenger::Command::SetCandidates(const G4String& candList) { - return SetCandidates(0,candList); + return SetCandidates(0, candList); } -G4GenericMessenger::Command& G4GenericMessenger::Command::SetCandidates( - G4int pIdx, const G4String& candList) +G4GenericMessenger::Command& G4GenericMessenger::Command::SetCandidates(G4int pIdx, + const G4String& candList) { - if(pIdx < 0 || pIdx >= (G4int)(command->GetParameterEntries())) - { - G4cerr << "Invalid parameter index : " << pIdx << "\nMethod ignored." - << G4endl; + if (pIdx < 0 || pIdx >= (G4int)(command->GetParameterEntries())) { + G4cerr << "Invalid parameter index : " << pIdx << "\nMethod ignored." << G4endl; return *this; } G4UIparameter* theParam = command->GetParameter(pIdx); @@ -425,19 +395,16 @@ G4GenericMessenger::Command& G4GenericMessenger::Command::SetCandidates( return *this; } -G4GenericMessenger::Command& G4GenericMessenger::Command::SetDefaultValue( - const G4String& defVal) +G4GenericMessenger::Command& G4GenericMessenger::Command::SetDefaultValue(const G4String& defVal) { - return SetDefaultValue(0,defVal); + return SetDefaultValue(0, defVal); } -G4GenericMessenger::Command& G4GenericMessenger::Command::SetDefaultValue( - G4int pIdx, const G4String& defVal) +G4GenericMessenger::Command& G4GenericMessenger::Command::SetDefaultValue(G4int pIdx, + const G4String& defVal) { - if(pIdx < 0 || pIdx >= (G4int)(command->GetParameterEntries())) - { - G4cerr << "Invalid parameter index : " << pIdx << "\nMethod ignored." - << G4endl; + if (pIdx < 0 || pIdx >= (G4int)(command->GetParameterEntries())) { + G4cerr << "Invalid parameter index : " << pIdx << "\nMethod ignored." << G4endl; return *this; } G4UIparameter* theParam = command->GetParameter(pIdx); diff --git a/source/intercoms/src/G4LocalThreadCoutMessenger.cc b/source/intercoms/src/G4LocalThreadCoutMessenger.cc index e3177044d07..711f7864bfb 100644 --- a/source/intercoms/src/G4LocalThreadCoutMessenger.cc +++ b/source/intercoms/src/G4LocalThreadCoutMessenger.cc @@ -30,15 +30,14 @@ #include "G4LocalThreadCoutMessenger.hh" -#include "G4UImanager.hh" - -#include "G4UIdirectory.hh" -#include "G4UIcommand.hh" +#include "G4Tokenizer.hh" #include "G4UIcmdWithABool.hh" #include "G4UIcmdWithAString.hh" #include "G4UIcmdWithAnInteger.hh" +#include "G4UIcommand.hh" +#include "G4UIdirectory.hh" +#include "G4UImanager.hh" #include "G4UIparameter.hh" -#include "G4Tokenizer.hh" // -------------------------------------------------------------------- G4LocalThreadCoutMessenger::G4LocalThreadCoutMessenger() @@ -47,12 +46,9 @@ G4LocalThreadCoutMessenger::G4LocalThreadCoutMessenger() coutDir->SetGuidance("Control cout/cerr for local thread."); coutFileNameCmd = new G4UIcommand("/control/cout/setCoutFile", this); - coutFileNameCmd->SetGuidance( - "Send G4cout stream to a file dedicated to a thread. "); - coutFileNameCmd->SetGuidance( - "To have a display output, use special keyword \"**Screen**\"."); - coutFileNameCmd->SetGuidance( - "If append flag is true output is appended to file,"); + coutFileNameCmd->SetGuidance("Send G4cout stream to a file dedicated to a thread. "); + coutFileNameCmd->SetGuidance("To have a display output, use special keyword \"**Screen**\"."); + coutFileNameCmd->SetGuidance("If append flag is true output is appended to file,"); coutFileNameCmd->SetGuidance("otherwise file output is overwritten."); coutFileNameCmd->AvailableForStates(G4State_PreInit, G4State_Idle); auto* pp = new G4UIparameter("fileName", 's', true); @@ -63,12 +59,9 @@ G4LocalThreadCoutMessenger::G4LocalThreadCoutMessenger() coutFileNameCmd->SetParameter(pp); cerrFileNameCmd = new G4UIcommand("/control/cout/setCerrFile", this); - cerrFileNameCmd->SetGuidance( - "Send G4cerr stream to a file dedicated to a thread. "); - cerrFileNameCmd->SetGuidance( - "To have a display output, use special keyword \"**Screen**\"."); - cerrFileNameCmd->SetGuidance( - "If append flag is true output is appended to file,"); + cerrFileNameCmd->SetGuidance("Send G4cerr stream to a file dedicated to a thread. "); + cerrFileNameCmd->SetGuidance("To have a display output, use special keyword \"**Screen**\"."); + cerrFileNameCmd->SetGuidance("If append flag is true output is appended to file,"); cerrFileNameCmd->SetGuidance("otherwise file output is overwritten."); cerrFileNameCmd->AvailableForStates(G4State_PreInit, G4State_Idle); pp = new G4UIparameter("fileName", 's', true); @@ -80,43 +73,39 @@ G4LocalThreadCoutMessenger::G4LocalThreadCoutMessenger() bufferCoutCmd = new G4UIcmdWithABool("/control/cout/useBuffer", this); bufferCoutCmd->SetGuidance("Send cout and/or cerr stream to a buffer."); - bufferCoutCmd->SetGuidance( - "The buffered text will be printed at the end of the job"); + bufferCoutCmd->SetGuidance("The buffered text will be printed at the end of the job"); bufferCoutCmd->SetGuidance( "for each thread at a time, so that output of each thread is grouped."); - bufferCoutCmd->SetGuidance( - "This command has no effect if output goes to a file."); + bufferCoutCmd->SetGuidance("This command has no effect if output goes to a file."); bufferCoutCmd->SetParameterName("flag", true); bufferCoutCmd->SetDefaultValue(true); bufferCoutCmd->AvailableForStates(G4State_PreInit, G4State_Idle); prefixCmd = new G4UIcmdWithAString("/control/cout/prefixString", this); - prefixCmd->SetGuidance( - "Set the prefix string for each cout/cerr line from a thread."); + prefixCmd->SetGuidance("Set the prefix string for each cout/cerr line from a thread."); prefixCmd->SetParameterName("prefix", true); prefixCmd->SetDefaultValue("G4WT"); prefixCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - ignoreCmd = - new G4UIcmdWithAnInteger("/control/cout/ignoreThreadsExcept", this); + ignoreCmd = new G4UIcmdWithAnInteger("/control/cout/ignoreThreadsExcept", this); ignoreCmd->SetGuidance("Omit cout from threads except the specified one."); - ignoreCmd->SetGuidance("This command takes effect only if cout destination " - "is screen without buffering."); - ignoreCmd->SetGuidance( - "If specified thread ID is greater than the number of threads,"); ignoreCmd->SetGuidance( - "no cout is displayed from worker threads. -1 to reset."); + "This command takes effect only if cout destination " + "is screen without buffering."); + ignoreCmd->SetGuidance("If specified thread ID is greater than the number of threads,"); + ignoreCmd->SetGuidance("no cout is displayed from worker threads. -1 to reset."); ignoreCmd->SetGuidance("This command does not affect to cerr."); ignoreCmd->SetParameterName("threadID", true); ignoreCmd->SetDefaultValue(0); ignoreCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - ignoreInitCmd = - new G4UIcmdWithABool("/control/cout/ignoreInitializationCout", this); - ignoreInitCmd->SetGuidance("Omit cout from threads during initialization, as " - "they should be identical to the master thread."); - ignoreInitCmd->SetGuidance("This command takes effect only if cout " - "destination is screen without buffering."); + ignoreInitCmd = new G4UIcmdWithABool("/control/cout/ignoreInitializationCout", this); + ignoreInitCmd->SetGuidance( + "Omit cout from threads during initialization, as " + "they should be identical to the master thread."); + ignoreInitCmd->SetGuidance( + "This command takes effect only if cout " + "destination is screen without buffering."); ignoreInitCmd->SetGuidance("This command does not affect to cerr."); ignoreInitCmd->SetParameterName("IgnoreInit", true); ignoreInitCmd->SetDefaultValue(true); @@ -136,38 +125,31 @@ G4LocalThreadCoutMessenger::~G4LocalThreadCoutMessenger() } // -------------------------------------------------------------------- -void G4LocalThreadCoutMessenger::SetNewValue(G4UIcommand* command, - G4String newVal) +void G4LocalThreadCoutMessenger::SetNewValue(G4UIcommand* command, G4String newVal) { G4UImanager* UI = G4UImanager::GetUIpointer(); - if(command == coutFileNameCmd) - { + if (command == coutFileNameCmd) { G4Tokenizer next(newVal); G4String fn = next(); - G4bool af = StoB(next()); + G4bool af = StoB(next()); UI->SetCoutFileName(fn, af); } - else if(command == cerrFileNameCmd) - { + else if (command == cerrFileNameCmd) { G4Tokenizer next(newVal); G4String fn = next(); - G4bool af = StoB(next()); + G4bool af = StoB(next()); UI->SetCerrFileName(fn, af); } - else if(command == bufferCoutCmd) - { + else if (command == bufferCoutCmd) { UI->SetThreadUseBuffer(StoB(newVal)); } - else if(command == prefixCmd) - { + else if (command == prefixCmd) { UI->SetThreadPrefixString(newVal); } - else if(command == ignoreCmd) - { + else if (command == ignoreCmd) { UI->SetThreadIgnore(StoI(newVal)); } - else if(command == ignoreInitCmd) - { + else if (command == ignoreInitCmd) { UI->SetThreadIgnoreInit(StoB(newVal)); } } diff --git a/source/intercoms/src/G4ProfilerMessenger.cc b/source/intercoms/src/G4ProfilerMessenger.cc index 76744873800..61ba1fd9da6 100644 --- a/source/intercoms/src/G4ProfilerMessenger.cc +++ b/source/intercoms/src/G4ProfilerMessenger.cc @@ -31,10 +31,10 @@ #include "G4ProfilerMessenger.hh" #include "G4Profiler.hh" -#include "G4UIdirectory.hh" +#include "G4TiMemory.hh" #include "G4UIcmdWithABool.hh" #include "G4UIcmdWithAString.hh" -#include "G4TiMemory.hh" +#include "G4UIdirectory.hh" // -------------------------------------------------------------------- @@ -46,34 +46,26 @@ G4ProfilerMessenger::G4ProfilerMessenger() profileDirectory->SetGuidance("Profiler controls."); profileOutputDirectory = new G4UIdirectory("/profiler/output/"); - profileOutputDirectory->SetGuidance( - "Control the output modes of the profiler."); + profileOutputDirectory->SetGuidance("Control the output modes of the profiler."); -#define CREATE_DIR(IDX, DIR, GUIDANCE) \ - profileTypeDirs.at(IDX) = new G4UIdirectory(DIR); \ +#define CREATE_DIR(IDX, DIR, GUIDANCE) \ + profileTypeDirs.at(IDX) = new G4UIdirectory(DIR); \ profileTypeDirs.at(IDX)->SetGuidance(GUIDANCE) - CREATE_DIR(Type::Run, "/profiler/run/", - "Profiler controls at the G4Run level"); - CREATE_DIR(Type::Event, "/profiler/event/", - "Profiler controls at the G4Event level"); - CREATE_DIR(Type::Track, "/profiler/track/", - "Profiler controls at the G4Track level"); - CREATE_DIR(Type::Step, "/profiler/step/", - "Profiler controls at the G4Step level"); - CREATE_DIR(Type::User, "/profiler/user/", - "Profiler controls within user code"); - -#define SET_ENABLED_CMD(IDX, CMD, CMDLINE, DEFAULT, GUIDANCE) \ - profileEnableCmds.at(IDX).second = CMDLINE; \ - profileEnableCmds.at(IDX).first = new G4UIcmdWithABool(CMD, this); \ - profileEnableCmds.at(IDX).first->SetDefaultValue(DEFAULT); \ - profileEnableCmds.at(IDX).first->SetGuidance(GUIDANCE); \ - profileEnableCmds.at(IDX).first->AvailableForStates(G4State_PreInit, \ - G4State_Idle) - - SET_ENABLED_CMD(Type::Run, "/profiler/run/enable", "run", true, - "Record metrics for each G4Run"); + CREATE_DIR(Type::Run, "/profiler/run/", "Profiler controls at the G4Run level"); + CREATE_DIR(Type::Event, "/profiler/event/", "Profiler controls at the G4Event level"); + CREATE_DIR(Type::Track, "/profiler/track/", "Profiler controls at the G4Track level"); + CREATE_DIR(Type::Step, "/profiler/step/", "Profiler controls at the G4Step level"); + CREATE_DIR(Type::User, "/profiler/user/", "Profiler controls within user code"); + +#define SET_ENABLED_CMD(IDX, CMD, CMDLINE, DEFAULT, GUIDANCE) \ + profileEnableCmds.at(IDX).second = CMDLINE; \ + profileEnableCmds.at(IDX).first = new G4UIcmdWithABool(CMD, this); \ + profileEnableCmds.at(IDX).first->SetDefaultValue(DEFAULT); \ + profileEnableCmds.at(IDX).first->SetGuidance(GUIDANCE); \ + profileEnableCmds.at(IDX).first->AvailableForStates(G4State_PreInit, G4State_Idle) + + SET_ENABLED_CMD(Type::Run, "/profiler/run/enable", "run", true, "Record metrics for each G4Run"); SET_ENABLED_CMD(Type::Event, "/profiler/event/enable", "event", true, "Record metrics for each G4Event"); SET_ENABLED_CMD(Type::Track, "/profiler/track/enable", "track", false, @@ -83,64 +75,50 @@ G4ProfilerMessenger::G4ProfilerMessenger() SET_ENABLED_CMD(Type::User, "/profiler/user/enable", "user", true, "Record metrics for user specified profiling instances"); -#define SET_COMPONENTS_CMD(IDX, CMD, CMDLINE, DEFAULTS, GUIDANCE) \ - profileCompCmds.at(IDX).second = CMDLINE; \ - profileCompCmds.at(IDX).first = new G4UIcmdWithAString(CMD, this); \ - profileCompCmds.at(IDX).first->SetDefaultValue(DEFAULTS); \ - profileCompCmds.at(IDX).first->SetGuidance(GUIDANCE); \ - profileCompCmds.at(IDX).first->AvailableForStates(G4State_PreInit, \ - G4State_Idle) +#define SET_COMPONENTS_CMD(IDX, CMD, CMDLINE, DEFAULTS, GUIDANCE) \ + profileCompCmds.at(IDX).second = CMDLINE; \ + profileCompCmds.at(IDX).first = new G4UIcmdWithAString(CMD, this); \ + profileCompCmds.at(IDX).first->SetDefaultValue(DEFAULTS); \ + profileCompCmds.at(IDX).first->SetGuidance(GUIDANCE); \ + profileCompCmds.at(IDX).first->AvailableForStates(G4State_PreInit, G4State_Idle) G4String comps = "wall_clock, cpu_clock, cpu_util, peak_rss"; - SET_COMPONENTS_CMD( - Type::Run, "/profiler/run/components", "--run-components", comps, - "Measurment types to record for each G4Run (see `timemory-avail -s`)"); - SET_COMPONENTS_CMD( - Type::Event, "/profiler/event/components", "--event-components", comps, - "Measurment types to record for each G4Event (see `timemory-avail -s`)"); - SET_COMPONENTS_CMD( - Type::Track, "/profiler/track/components", "--track-components", comps, - "Measurment types to record for each G4Track (see `timemory-avail -s`)"); - SET_COMPONENTS_CMD( - Type::Step, "/profiler/step/components", "--step-components", comps, - "Measurment types to record for each G4Step (see `timemory-avail -s`)"); - SET_COMPONENTS_CMD(Type::User, "/profiler/user/components", - "--user-components", comps, + SET_COMPONENTS_CMD(Type::Run, "/profiler/run/components", "--run-components", comps, + "Measurment types to record for each G4Run (see `timemory-avail -s`)"); + SET_COMPONENTS_CMD(Type::Event, "/profiler/event/components", "--event-components", comps, + "Measurment types to record for each G4Event (see `timemory-avail -s`)"); + SET_COMPONENTS_CMD(Type::Track, "/profiler/track/components", "--track-components", comps, + "Measurment types to record for each G4Track (see `timemory-avail -s`)"); + SET_COMPONENTS_CMD(Type::Step, "/profiler/step/components", "--step-components", comps, + "Measurment types to record for each G4Step (see `timemory-avail -s`)"); + SET_COMPONENTS_CMD(Type::User, "/profiler/user/components", "--user-components", comps, "Measurment types to record for user specified profiling " "instances (see `timemory-avail -s`)"); -#define SET_OUTPUT_CMD(CMD, CMDLINE, DEFAULT, GUIDANCE) \ - profileGeneralCmds.push_back({ new G4UIcmdWithABool(CMD, this), CMDLINE }); \ - profileGeneralCmds.back().first->SetDefaultValue(DEFAULT); \ - profileGeneralCmds.back().first->SetGuidance(GUIDANCE); \ - profileGeneralCmds.back().first->AvailableForStates(G4State_PreInit, \ - G4State_Idle) +#define SET_OUTPUT_CMD(CMD, CMDLINE, DEFAULT, GUIDANCE) \ + profileGeneralCmds.push_back({new G4UIcmdWithABool(CMD, this), CMDLINE}); \ + profileGeneralCmds.back().first->SetDefaultValue(DEFAULT); \ + profileGeneralCmds.back().first->SetGuidance(GUIDANCE); \ + profileGeneralCmds.back().first->AvailableForStates(G4State_PreInit, G4State_Idle) SET_OUTPUT_CMD("/profiler/output/dart", "--dart", false, "Enabled Dart output (CTest/CDash data tracking)"); - SET_OUTPUT_CMD("/profiler/output/json", "--json", true, - "Enabled JSON output"); - SET_OUTPUT_CMD("/profiler/output/text", "--text", true, - "Enabled text output"); - SET_OUTPUT_CMD("/profiler/output/cout", "--cout", false, - "Enabled output to console"); - SET_OUTPUT_CMD("/profiler/output/plot", "--plot", false, - "Enabled plotting JSON output"); + SET_OUTPUT_CMD("/profiler/output/json", "--json", true, "Enabled JSON output"); + SET_OUTPUT_CMD("/profiler/output/text", "--text", true, "Enabled text output"); + SET_OUTPUT_CMD("/profiler/output/cout", "--cout", false, "Enabled output to console"); + SET_OUTPUT_CMD("/profiler/output/plot", "--plot", false, "Enabled plotting JSON output"); SET_OUTPUT_CMD("/profiler/tree", "--tree", true, "Display the results as a call-stack hierarchy."); - SET_OUTPUT_CMD("/profiler/flat", "--flat", false, - "Display the results as a flat call-stack"); + SET_OUTPUT_CMD("/profiler/flat", "--flat", false, "Display the results as a flat call-stack"); SET_OUTPUT_CMD("/profiler/timeline", "--timeline", false, "Do not merge duplicate entries at the same call-stack " "position. May be combined with tree or flat profiles."); - SET_OUTPUT_CMD( - "/profiler/per_thread", "--per-thread", false, - "Display the results for each individual thread (default: aggregation)"); - SET_OUTPUT_CMD( - "/profiler/per_event", "--per-event", false, - "Display the results for each individual G4event (default: aggregation)"); + SET_OUTPUT_CMD("/profiler/per_thread", "--per-thread", false, + "Display the results for each individual thread (default: aggregation)"); + SET_OUTPUT_CMD("/profiler/per_event", "--per-event", false, + "Display the results for each individual G4event (default: aggregation)"); } // -------------------------------------------------------------------- @@ -149,20 +127,16 @@ G4ProfilerMessenger::~G4ProfilerMessenger() { delete profileDirectory; delete profileOutputDirectory; - for(auto& itr : profileTypeDirs) - { + for (auto& itr : profileTypeDirs) { delete itr; } - for(auto& itr : profileEnableCmds) - { + for (auto& itr : profileEnableCmds) { delete itr.first; } - for(auto& itr : profileGeneralCmds) - { + for (auto& itr : profileGeneralCmds) { delete itr.first; } - for(auto& itr : profileCompCmds) - { + for (auto& itr : profileCompCmds) { delete itr.first; } } @@ -171,46 +145,39 @@ G4ProfilerMessenger::~G4ProfilerMessenger() void G4ProfilerMessenger::SetNewValue(G4UIcommand* command, G4String value) { - for(size_t i = 0; i < static_cast(G4ProfileType::TypeEnd); ++i) - { + for (size_t i = 0; i < static_cast(G4ProfileType::TypeEnd); ++i) { G4UIcmdWithABool* ui = profileEnableCmds.at(i).first; - if(command == ui) - { + if (command == ui) { G4Profiler::SetEnabled(i, ui->GetNewBoolValue(value)); return; } } // pass the commands to the timemory argparser - std::vector command_line = { "G4ProfilerMessenger" }; + std::vector command_line = {"G4ProfilerMessenger"}; - for(auto& itr : profileGeneralCmds) - { + for (auto& itr : profileGeneralCmds) { G4UIcmdWithABool* ui = itr.first; - if(command == ui) - { + if (command == ui) { command_line.push_back(itr.second.c_str()); command_line.push_back(value); break; } } - for(auto& itr : profileCompCmds) - { + for (auto& itr : profileCompCmds) { G4UIcmdWithAString* ui = itr.first; - if(command == ui) - { + if (command == ui) { command_line.push_back(itr.second); #if defined(GEANT4_USE_TIMEMORY) - for(auto vitr : tim::delimit(value, ", ;")) + for (auto vitr : tim::delimit(value, ", ;")) command_line.push_back(vitr); #endif break; } } - if(command_line.size() > 1) - { + if (command_line.size() > 1) { G4Profiler::Configure(command_line); } } diff --git a/source/intercoms/src/G4UIaliasList.cc b/source/intercoms/src/G4UIaliasList.cc index cc5dc92a945..216d2776e3c 100644 --- a/source/intercoms/src/G4UIaliasList.cc +++ b/source/intercoms/src/G4UIaliasList.cc @@ -29,119 +29,51 @@ // -------------------------------------------------------------------- #include "G4UIaliasList.hh" -#include "G4ios.hh" - -// -------------------------------------------------------------------- -G4UIaliasList::~G4UIaliasList() -{ - std::size_t n_treeEntry = alias.size(); - for(std::size_t i = 0; i < n_treeEntry; ++i) - { - delete alias[i]; - delete value[i]; - } -} -// -------------------------------------------------------------------- -G4bool G4UIaliasList::operator==(const G4UIaliasList& right) const -{ - return (this == &right); -} - -// -------------------------------------------------------------------- -G4bool G4UIaliasList::operator!=(const G4UIaliasList& right) const -{ - return (this != &right); -} +#include "G4ios.hh" // -------------------------------------------------------------------- void G4UIaliasList::AddNewAlias(const char* aliasName, const char* aliasValue) { - if(FindAlias(aliasName) != nullptr) - { - G4cerr << "Alias <" << aliasName << "> already exists. Command ignored." - << G4endl; + if (FindAlias(aliasName) != nullptr) { + G4cerr << "Alias <" << aliasName << "> already exists. Command ignored." << G4endl; return; } - G4String* newAlias = new G4String(aliasName); - alias.push_back(newAlias); - G4String* newValue = new G4String(aliasValue); - value.push_back(newValue); + aliases.emplace(aliasName, aliasValue); } // -------------------------------------------------------------------- void G4UIaliasList::RemoveAlias(const char* aliasName) { - G4int i = FindAliasID(aliasName); - if(i < 0) - { - G4cerr << "Alias <" << aliasName << "> does not exist. Command ignored." - << G4endl; + if (FindAlias(aliasName) == nullptr) { + G4cerr << "Alias <" << aliasName << "> does not exist. Command ignored." << G4endl; return; } - alias.erase(alias.begin() + i); - value.erase(value.begin() + i); + aliases.erase(aliasName); } // -------------------------------------------------------------------- void G4UIaliasList::ChangeAlias(const char* aliasName, const char* aliasValue) { - G4int i = FindAliasID(aliasName); - if(i < 0) - { + if (FindAlias(aliasName) == nullptr) { AddNewAlias(aliasName, aliasValue); return; } - *(value[i]) = aliasValue; + aliases[aliasName] = aliasValue; } // -------------------------------------------------------------------- -G4String* G4UIaliasList::FindAlias(const char* aliasName) +const G4String* G4UIaliasList::FindAlias(const char* aliasName) const { - G4int i = FindAliasID(aliasName); - if(i < 0) - { - return nullptr; - } - return value[i]; + auto it = aliases.find(aliasName); + return (it == aliases.end()) ? nullptr : &(it->second); } // -------------------------------------------------------------------- -G4int G4UIaliasList::FindAliasID(const char* aliasName) +void G4UIaliasList::List() const { - std::size_t i_entry = alias.size(); - for(std::size_t i = 0; i < i_entry; ++i) - { - if(*(alias[i]) == aliasName) - { - return (G4int)i; - } - } - return -1; -} - -// -------------------------------------------------------------------- -void G4UIaliasList::List() -{ - std::size_t i_entry = alias.size(); - for(std::size_t i1 = 0; i1 < i_entry - 1; ++i1) - { - for(std::size_t i2 = i1 + 1; i2 < i_entry; ++i2) - { - if(*(alias[i1]) > *(alias[i2])) - { - G4String* tmp = alias[i1]; - alias[i1] = alias[i2]; - alias[i2] = tmp; - tmp = value[i1]; - value[i1] = value[i2]; - value[i2] = tmp; - } - } - } - - for(std::size_t i = 0; i < i_entry; ++i) - { - G4cout << " " << *(alias[i]) << " : " << *(value[i]) << G4endl; + // Aliases are already sorted by std::less + for (const auto& [a, v] : aliases) { + G4cout << " " << a << " : " << v << G4endl; } } diff --git a/source/intercoms/src/G4UIbatch.cc b/source/intercoms/src/G4UIbatch.cc index 38906785017..68af1e97870 100644 --- a/source/intercoms/src/G4UIbatch.cc +++ b/source/intercoms/src/G4UIbatch.cc @@ -29,9 +29,11 @@ // -------------------------------------------------------------------- #include "G4UIbatch.hh" + #include "G4UImanager.hh" -#include + #include +#include // -------------------------------------------------------------------- static void Tokenize(const G4String& str, std::vector& tokens) @@ -39,48 +41,39 @@ static void Tokenize(const G4String& str, std::vector& tokens) const char* delimiter = " "; G4String::size_type pos0 = str.find_first_not_of(delimiter); - G4String::size_type pos = str.find_first_of(delimiter, pos0); + G4String::size_type pos = str.find_first_of(delimiter, pos0); - while(pos != G4String::npos || pos0 != G4String::npos) - { - if(str[(G4int)pos0] == '\"') - { - pos = str.find_first_of("\"", pos0 + 1); - if(pos != G4String::npos) - { + while (pos != G4String::npos || pos0 != G4String::npos) { + if (str[(G4int)pos0] == '\"') { + pos = str.find_first_of('\"', pos0 + 1); + if (pos != G4String::npos) { pos++; } } - if(str[(G4int)pos0] == '\'') - { - pos = str.find_first_of("\'", pos0 + 1); - if(pos != G4String::npos) - { + if (str[(G4int)pos0] == '\'') { + pos = str.find_first_of('\'', pos0 + 1); + if (pos != G4String::npos) { pos++; } } tokens.emplace_back(str.substr(pos0, pos - pos0)); pos0 = str.find_first_not_of(delimiter, pos); - pos = str.find_first_of(delimiter, pos0); + pos = str.find_first_of(delimiter, pos0); } } // -------------------------------------------------------------------- G4UIbatch::G4UIbatch(const char* fileName, G4UIsession* prevSession) - : G4UIsession(1) - , previousSession(prevSession) + : G4UIsession(1), previousSession(prevSession) { macroStream.open(fileName, std::ios::in); - if(macroStream.fail()) - { + if (macroStream.fail()) { G4cerr << "ERROR: Can not open a macro file <" << fileName - << ">. Set macro path with \"/control/macroPath\" if needed." - << G4endl; + << ">. Set macro path with \"/control/macroPath\" if needed." << G4endl; lastRC = fParameterUnreadable; } - else - { + else { isOpened = true; } @@ -90,8 +83,7 @@ G4UIbatch::G4UIbatch(const char* fileName, G4UIsession* prevSession) // -------------------------------------------------------------------- G4UIbatch::~G4UIbatch() { - if(isOpened) - { + if (isOpened) { macroStream.close(); } } @@ -104,24 +96,21 @@ G4String G4UIbatch::ReadCommand() BUFSIZE = 4096 }; static G4ThreadLocal char* linebuf = nullptr; - if(linebuf == nullptr) - { + if (linebuf == nullptr) { linebuf = new char[BUFSIZE]; } const char ctrM = 0x0d; G4String cmdtotal = ""; G4bool qcontinued = false; - while(macroStream.good()) - { + while (macroStream.good()) { macroStream.getline(linebuf, BUFSIZE); G4String cmdline(linebuf); // TAB-> ' ' conversion G4String::size_type nb = 0; - while((nb = cmdline.find('\t', nb)) != G4String::npos) - { + while ((nb = cmdline.find('\t', nb)) != G4String::npos) { cmdline.replace(nb, 1, " "); } @@ -130,14 +119,12 @@ G4String G4UIbatch::ReadCommand() G4StrUtil::rstrip(cmdline, ctrM); // skip null line if single line - if(!qcontinued && cmdline.empty()) - { + if (!qcontinued && cmdline.empty()) { continue; } // '#' is treated as echoing something - if(cmdline[(std::size_t) 0] == '#') - { + if (cmdline[(std::size_t)0] == '#') { return cmdline; } @@ -145,20 +132,16 @@ G4String G4UIbatch::ReadCommand() std::vector tokens; Tokenize(cmdline, tokens); qcontinued = false; - for(G4int i = 0; i < G4int(tokens.size()); ++i) - { + for (G4int i = 0; i < G4int(tokens.size()); ++i) { // string after '#" is ignored - if(tokens[i][(std::size_t) 0] == '#') - { + if (tokens[i][(std::size_t)0] == '#') { break; } // '\' or '_' is treated as continued line. - if(tokens[i] == "\\" || tokens[i] == "_") - { + if (tokens[i] == "\\" || tokens[i] == "_") { qcontinued = true; // check nothing after line continuation character - if(i != G4int(tokens.size()) - 1) - { + if (i != G4int(tokens.size()) - 1) { G4Exception("G4UIbatch::ReadCommand", "UI0003", JustWarning, "unexpected character after line continuation character"); } @@ -168,17 +151,14 @@ G4String G4UIbatch::ReadCommand() cmdtotal += " "; } - if(qcontinued) - { + if (qcontinued) { continue; // read the next line } - if(!cmdtotal.empty()) - { + if (!cmdtotal.empty()) { break; } - if(macroStream.eof()) - { + if (macroStream.eof()) { break; } } @@ -187,8 +167,7 @@ G4String G4UIbatch::ReadCommand() G4StrUtil::strip(cmdtotal); // finally, - if(macroStream.eof() && cmdtotal.empty()) - { + if (macroStream.eof() && cmdtotal.empty()) { return "exit"; } @@ -199,23 +178,20 @@ G4String G4UIbatch::ReadCommand() G4int G4UIbatch::ExecCommand(const G4String& command) { G4UImanager* UI = G4UImanager::GetUIpointer(); - G4int rc = UI->ApplyCommand(command); + G4int rc = UI->ApplyCommand(command); - switch(rc) - { + switch (rc) { case fCommandSucceeded: break; case fCommandNotFound: G4cerr << "***** COMMAND NOT FOUND <" << command << "> *****" << G4endl; break; case fIllegalApplicationState: - G4cerr << "***** Illegal application state <" << command << "> *****" - << G4endl; + G4cerr << "***** Illegal application state <" << command << "> *****" << G4endl; break; default: G4int pn = rc % 100; - G4cerr << "***** Illegal parameter (" << pn << ") <" << command - << "> *****" << G4endl; + G4cerr << "***** Illegal parameter (" << pn << ") <" << command << "> *****" << G4endl; } return rc; @@ -224,25 +200,20 @@ G4int G4UIbatch::ExecCommand(const G4String& command) // -------------------------------------------------------------------- G4UIsession* G4UIbatch::SessionStart() { - if(!isOpened) - { + if (!isOpened) { return previousSession; } - while(true) - { + while (true) { G4String newCommand = ReadCommand(); - if(newCommand == "exit") - { + if (newCommand == "exit") { break; } // just echo something - if(newCommand[(std::size_t) 0] == '#') - { - if(G4UImanager::GetUIpointer()->GetVerboseLevel() == 2) - { + if (newCommand[(std::size_t)0] == '#') { + if (G4UImanager::GetUIpointer()->GetVerboseLevel() == 2) { G4cout << newCommand << G4endl; } continue; @@ -250,8 +221,7 @@ G4UIsession* G4UIbatch::SessionStart() // execute command G4int rc = ExecCommand(newCommand); - if(rc != fCommandSucceeded) - { + if (rc != fCommandSucceeded) { G4cerr << G4endl << "***** Batch is interrupted!! *****" << G4endl; lastRC = rc; break; diff --git a/source/intercoms/src/G4UIbridge.cc b/source/intercoms/src/G4UIbridge.cc index 795a8a01a61..2c2dc6cbc7a 100644 --- a/source/intercoms/src/G4UIbridge.cc +++ b/source/intercoms/src/G4UIbridge.cc @@ -28,34 +28,29 @@ // Author: A.Dotti, 2013 // -------------------------------------------------------------------- #include "G4UIbridge.hh" + #include "G4UImanager.hh" // -------------------------------------------------------------------- -G4UIbridge::G4UIbridge(G4UImanager* localUI, G4String dir) - : localUImanager(localUI) +G4UIbridge::G4UIbridge(G4UImanager* localUI, G4String dir) : localUImanager(localUI) { // make sure dirName starts and ends with '/' - if(dir[0] == '/') - { + if (dir[0] == '/') { dirName = dir; } - else - { + else { dirName = "/" + dir; } - if(dirName.back() != '/') - { + if (dirName.back() != '/') { dirName += "/"; } // register to the master G4UImanager G4UImanager* masterUI = G4UImanager::GetMasterUIpointer(); - if(masterUI != nullptr) - { + if (masterUI != nullptr) { masterUI->RegisterBridge(this); } - else - { + else { G4Exception("G4UIbridge::G4UIbridge()", "UI7001", FatalException, "G4UImanager for the master thread is not yet instantiated. " "Instantiate G4MTRunManager first."); diff --git a/source/intercoms/src/G4UIcmdWith3Vector.cc b/source/intercoms/src/G4UIcmdWith3Vector.cc index 355fe151f2b..81d2c41437a 100644 --- a/source/intercoms/src/G4UIcmdWith3Vector.cc +++ b/source/intercoms/src/G4UIcmdWith3Vector.cc @@ -31,8 +31,7 @@ #include "G4UIcmdWith3Vector.hh" // -------------------------------------------------------------------- -G4UIcmdWith3Vector::G4UIcmdWith3Vector(const char* theCommandPath, - G4UImessenger* theMessenger) +G4UIcmdWith3Vector::G4UIcmdWith3Vector(const char* theCommandPath, G4UImessenger* theMessenger) : G4UIcommand(theCommandPath, theMessenger) { auto* dblParamX = new G4UIparameter('d'); @@ -51,10 +50,8 @@ G4ThreeVector G4UIcmdWith3Vector::GetNew3VectorValue(const char* paramString) } // -------------------------------------------------------------------- -void G4UIcmdWith3Vector::SetParameterName(const char* theNameX, - const char* theNameY, - const char* theNameZ, - G4bool omittable, +void G4UIcmdWith3Vector::SetParameterName(const char* theNameX, const char* theNameY, + const char* theNameZ, G4bool omittable, G4bool currentAsDefault) { G4UIparameter* theParamX = GetParameter(0); diff --git a/source/intercoms/src/G4UIcmdWith3VectorAndUnit.cc b/source/intercoms/src/G4UIcmdWith3VectorAndUnit.cc index 5e01f147720..a9a25ff8938 100644 --- a/source/intercoms/src/G4UIcmdWith3VectorAndUnit.cc +++ b/source/intercoms/src/G4UIcmdWith3VectorAndUnit.cc @@ -29,14 +29,16 @@ // -------------------------------------------------------------------- #include "G4UIcmdWith3VectorAndUnit.hh" + #include "G4Tokenizer.hh" -#include "G4UnitsTable.hh" #include "G4UIcommandStatus.hh" +#include "G4UnitsTable.hh" + #include // -------------------------------------------------------------------- -G4UIcmdWith3VectorAndUnit::G4UIcmdWith3VectorAndUnit( - const char* theCommandPath, G4UImessenger* theMessenger) +G4UIcmdWith3VectorAndUnit::G4UIcmdWith3VectorAndUnit(const char* theCommandPath, + G4UImessenger* theMessenger) : G4UIcommand(theCommandPath, theMessenger) { auto* dblParamX = new G4UIparameter('d'); @@ -57,21 +59,18 @@ G4int G4UIcmdWith3VectorAndUnit::DoIt(G4String parameterList) std::vector token_vector; G4Tokenizer tkn(parameterList); G4String str; - while(!(str = tkn()).empty()) - { + while (!(str = tkn()).empty()) { token_vector.push_back(str); } // convert a value in default unit G4String converted_parameter; G4String default_unit = GetParameter(3)->GetDefaultValue(); - if(!default_unit.empty() && token_vector.size() >= 4) - { - if(CategoryOf(token_vector[3]) != CategoryOf(default_unit)) - { + if (!default_unit.empty() && token_vector.size() >= 4) { + if (CategoryOf(token_vector[3]) != CategoryOf(default_unit)) { return fParameterOutOfCandidates + 3; } - G4double value_given = ValueOf(token_vector[3]); + G4double value_given = ValueOf(token_vector[3]); G4double value_default = ValueOf(default_unit); G4double x = ConvertToDouble(token_vector[0]) * value_given / value_default; G4double y = ConvertToDouble(token_vector[1]) * value_given / value_default; @@ -85,14 +84,12 @@ G4int G4UIcmdWith3VectorAndUnit::DoIt(G4String parameterList) converted_parameter += ConvertToString(z); converted_parameter += " "; converted_parameter += default_unit; - for(std::size_t i = 4; i < token_vector.size(); ++i) - { + for (std::size_t i = 4; i < token_vector.size(); ++i) { converted_parameter += " "; converted_parameter += token_vector[i]; } } - else - { + else { converted_parameter = parameterList; } @@ -100,15 +97,13 @@ G4int G4UIcmdWith3VectorAndUnit::DoIt(G4String parameterList) } // -------------------------------------------------------------------- -G4ThreeVector G4UIcmdWith3VectorAndUnit::GetNew3VectorValue( - const char* paramString) +G4ThreeVector G4UIcmdWith3VectorAndUnit::GetNew3VectorValue(const char* paramString) { return ConvertToDimensioned3Vector(paramString); } // -------------------------------------------------------------------- -G4ThreeVector G4UIcmdWith3VectorAndUnit::GetNew3VectorRawValue( - const char* paramString) +G4ThreeVector G4UIcmdWith3VectorAndUnit::GetNew3VectorRawValue(const char* paramString) { G4double vx; G4double vy; @@ -133,11 +128,10 @@ G4double G4UIcmdWith3VectorAndUnit::GetNewUnitValue(const char* paramString) } // -------------------------------------------------------------------- -G4String G4UIcmdWith3VectorAndUnit::ConvertToStringWithBestUnit( - const G4ThreeVector& vec) +G4String G4UIcmdWith3VectorAndUnit::ConvertToStringWithBestUnit(const G4ThreeVector& vec) { G4UIparameter* unitParam = GetParameter(3); - G4String canList = unitParam->GetParameterCandidates(); + G4String canList = unitParam->GetParameterCandidates(); G4Tokenizer candidateTokenizer(canList); G4String aToken = candidateTokenizer(); @@ -149,27 +143,22 @@ G4String G4UIcmdWith3VectorAndUnit::ConvertToStringWithBestUnit( } // -------------------------------------------------------------------- -G4String G4UIcmdWith3VectorAndUnit::ConvertToStringWithDefaultUnit( - const G4ThreeVector& vec) +G4String G4UIcmdWith3VectorAndUnit::ConvertToStringWithDefaultUnit(const G4ThreeVector& vec) { G4UIparameter* unitParam = GetParameter(3); G4String st; - if(unitParam->IsOmittable()) - { + if (unitParam->IsOmittable()) { st = ConvertToString(vec, unitParam->GetDefaultValue()); } - else - { + else { st = ConvertToStringWithBestUnit(vec); } return st; } // -------------------------------------------------------------------- -void G4UIcmdWith3VectorAndUnit::SetParameterName(const char* theNameX, - const char* theNameY, - const char* theNameZ, - G4bool omittable, +void G4UIcmdWith3VectorAndUnit::SetParameterName(const char* theNameX, const char* theNameY, + const char* theNameZ, G4bool omittable, G4bool currentAsDefault) { G4UIparameter* theParamX = GetParameter(0); @@ -207,7 +196,7 @@ void G4UIcmdWith3VectorAndUnit::SetUnitCategory(const char* unitCategory) void G4UIcmdWith3VectorAndUnit::SetUnitCandidates(const char* candidateList) { G4UIparameter* untParam = GetParameter(3); - G4String canList = candidateList; + G4String canList = candidateList; untParam->SetParameterCandidates(canList); } diff --git a/source/intercoms/src/G4UIcmdWithABool.cc b/source/intercoms/src/G4UIcmdWithABool.cc index 6317f011e33..19603a56311 100644 --- a/source/intercoms/src/G4UIcmdWithABool.cc +++ b/source/intercoms/src/G4UIcmdWithABool.cc @@ -31,8 +31,7 @@ #include "G4UIcmdWithABool.hh" // -------------------------------------------------------------------- -G4UIcmdWithABool::G4UIcmdWithABool(const char* theCommandPath, - G4UImessenger* theMessenger) +G4UIcmdWithABool::G4UIcmdWithABool(const char* theCommandPath, G4UImessenger* theMessenger) : G4UIcommand(theCommandPath, theMessenger) { auto* blParam = new G4UIparameter('b'); diff --git a/source/intercoms/src/G4UIcmdWithADouble.cc b/source/intercoms/src/G4UIcmdWithADouble.cc index 082657bd1da..e18eca72d90 100644 --- a/source/intercoms/src/G4UIcmdWithADouble.cc +++ b/source/intercoms/src/G4UIcmdWithADouble.cc @@ -31,8 +31,7 @@ #include "G4UIcmdWithADouble.hh" // -------------------------------------------------------------------- -G4UIcmdWithADouble::G4UIcmdWithADouble(const char* theCommandPath, - G4UImessenger* theMessenger) +G4UIcmdWithADouble::G4UIcmdWithADouble(const char* theCommandPath, G4UImessenger* theMessenger) : G4UIcommand(theCommandPath, theMessenger) { auto* dblParam = new G4UIparameter('d'); diff --git a/source/intercoms/src/G4UIcmdWithADoubleAndUnit.cc b/source/intercoms/src/G4UIcmdWithADoubleAndUnit.cc index 4731736f86e..edeee5b3062 100644 --- a/source/intercoms/src/G4UIcmdWithADoubleAndUnit.cc +++ b/source/intercoms/src/G4UIcmdWithADoubleAndUnit.cc @@ -29,15 +29,17 @@ // -------------------------------------------------------------------- #include "G4UIcmdWithADoubleAndUnit.hh" + #include "G4Tokenizer.hh" -#include "G4UnitsTable.hh" #include "G4UIcommandStatus.hh" +#include "G4UnitsTable.hh" + #include #include // -------------------------------------------------------------------- -G4UIcmdWithADoubleAndUnit::G4UIcmdWithADoubleAndUnit( - const char* theCommandPath, G4UImessenger* theMessenger) +G4UIcmdWithADoubleAndUnit::G4UIcmdWithADoubleAndUnit(const char* theCommandPath, + G4UImessenger* theMessenger) : G4UIcommand(theCommandPath, theMessenger) { auto* dblParam = new G4UIparameter('d'); @@ -54,36 +56,30 @@ G4int G4UIcmdWithADoubleAndUnit::DoIt(G4String parameterList) std::vector token_vector; G4Tokenizer tkn(parameterList); G4String str; - while(!(str = tkn()).empty()) - { + while (!(str = tkn()).empty()) { token_vector.push_back(str); } // convert a value in default unit G4String converted_parameter; G4String default_unit = GetParameter(1)->GetDefaultValue(); - if(!default_unit.empty() && token_vector.size() >= 2) - { - if(CategoryOf(token_vector[1]) != CategoryOf(default_unit)) - { + if (!default_unit.empty() && token_vector.size() >= 2) { + if (CategoryOf(token_vector[1]) != CategoryOf(default_unit)) { return fParameterOutOfCandidates + 1; } - G4double value_given = ValueOf(token_vector[1]); + G4double value_given = ValueOf(token_vector[1]); G4double value_default = ValueOf(default_unit); - G4double value = - ConvertToDouble(token_vector[0]) * value_given / value_default; + G4double value = ConvertToDouble(token_vector[0]) * value_given / value_default; // reconstruct parameter list converted_parameter += ConvertToString(value); converted_parameter += " "; converted_parameter += default_unit; - for(std::size_t i = 2; i < token_vector.size(); ++i) - { + for (std::size_t i = 2; i < token_vector.size(); ++i) { converted_parameter += " "; converted_parameter += token_vector[i]; } } - else - { + else { converted_parameter = parameterList; } @@ -97,8 +93,7 @@ G4double G4UIcmdWithADoubleAndUnit::GetNewDoubleValue(const char* paramString) } // -------------------------------------------------------------------- -G4double G4UIcmdWithADoubleAndUnit::GetNewDoubleRawValue( - const char* paramString) +G4double G4UIcmdWithADoubleAndUnit::GetNewDoubleRawValue(const char* paramString) { G4double vl; char unts[30]; @@ -126,7 +121,7 @@ G4double G4UIcmdWithADoubleAndUnit::GetNewUnitValue(const char* paramString) G4String G4UIcmdWithADoubleAndUnit::ConvertToStringWithBestUnit(G4double val) { G4UIparameter* unitParam = GetParameter(1); - G4String canList = unitParam->GetParameterCandidates(); + G4String canList = unitParam->GetParameterCandidates(); G4Tokenizer candidateTokenizer(canList); G4String aToken = candidateTokenizer(); std::ostringstream os; @@ -141,20 +136,17 @@ G4String G4UIcmdWithADoubleAndUnit::ConvertToStringWithDefaultUnit(G4double val) { G4UIparameter* unitParam = GetParameter(1); G4String st; - if(unitParam->IsOmittable()) - { + if (unitParam->IsOmittable()) { st = ConvertToString(val, unitParam->GetDefaultValue()); } - else - { + else { st = ConvertToStringWithBestUnit(val); } return st; } // -------------------------------------------------------------------- -void G4UIcmdWithADoubleAndUnit::SetParameterName(const char* theName, - G4bool omittable, +void G4UIcmdWithADoubleAndUnit::SetParameterName(const char* theName, G4bool omittable, G4bool currentAsDefault) { G4UIparameter* theParam = GetParameter(0); @@ -180,7 +172,7 @@ void G4UIcmdWithADoubleAndUnit::SetUnitCategory(const char* unitCategory) void G4UIcmdWithADoubleAndUnit::SetUnitCandidates(const char* candidateList) { G4UIparameter* untParam = GetParameter(1); - G4String canList = candidateList; + G4String canList = candidateList; untParam->SetParameterCandidates(canList); } diff --git a/source/intercoms/src/G4UIcmdWithALongInt.cc b/source/intercoms/src/G4UIcmdWithALongInt.cc index 83f28f830cd..157185f26fb 100644 --- a/source/intercoms/src/G4UIcmdWithALongInt.cc +++ b/source/intercoms/src/G4UIcmdWithALongInt.cc @@ -31,8 +31,7 @@ #include "G4UIcmdWithALongInt.hh" // -------------------------------------------------------------------- -G4UIcmdWithALongInt::G4UIcmdWithALongInt(const char* theCommandPath, - G4UImessenger* theMessenger) +G4UIcmdWithALongInt::G4UIcmdWithALongInt(const char* theCommandPath, G4UImessenger* theMessenger) : G4UIcommand(theCommandPath, theMessenger) { auto* longParam = new G4UIparameter('l'); @@ -47,9 +46,8 @@ G4long G4UIcmdWithALongInt::GetNewLongIntValue(const char* paramString) } // -------------------------------------------------------------------- -void G4UIcmdWithALongInt::SetParameterName(const char* theName, - G4bool omittable, - G4bool currentAsDefault) +void G4UIcmdWithALongInt::SetParameterName(const char* theName, G4bool omittable, + G4bool currentAsDefault) { G4UIparameter* theParam = GetParameter(0); theParam->SetParameterName(theName); diff --git a/source/intercoms/src/G4UIcmdWithAString.cc b/source/intercoms/src/G4UIcmdWithAString.cc index 32a230c0b36..4f3e156e1b5 100644 --- a/source/intercoms/src/G4UIcmdWithAString.cc +++ b/source/intercoms/src/G4UIcmdWithAString.cc @@ -31,8 +31,7 @@ #include "G4UIcmdWithAString.hh" // -------------------------------------------------------------------- -G4UIcmdWithAString::G4UIcmdWithAString(const char* theCommandPath, - G4UImessenger* theMessenger) +G4UIcmdWithAString::G4UIcmdWithAString(const char* theCommandPath, G4UImessenger* theMessenger) : G4UIcommand(theCommandPath, theMessenger) { auto* strParam = new G4UIparameter('s'); @@ -54,7 +53,7 @@ void G4UIcmdWithAString::SetParameterName(const char* theName, G4bool omittable, void G4UIcmdWithAString::SetCandidates(const char* candidateList) { G4UIparameter* theParam = GetParameter(0); - G4String canList = candidateList; + G4String canList = candidateList; theParam->SetParameterCandidates(canList); } diff --git a/source/intercoms/src/G4UIcmdWithAnInteger.cc b/source/intercoms/src/G4UIcmdWithAnInteger.cc index a36d1b93890..dd5ef6e611a 100644 --- a/source/intercoms/src/G4UIcmdWithAnInteger.cc +++ b/source/intercoms/src/G4UIcmdWithAnInteger.cc @@ -31,8 +31,7 @@ #include "G4UIcmdWithAnInteger.hh" // -------------------------------------------------------------------- -G4UIcmdWithAnInteger::G4UIcmdWithAnInteger(const char* theCommandPath, - G4UImessenger* theMessenger) +G4UIcmdWithAnInteger::G4UIcmdWithAnInteger(const char* theCommandPath, G4UImessenger* theMessenger) : G4UIcommand(theCommandPath, theMessenger) { auto* intParam = new G4UIparameter('i'); @@ -47,8 +46,7 @@ G4int G4UIcmdWithAnInteger::GetNewIntValue(const char* paramString) } // -------------------------------------------------------------------- -void G4UIcmdWithAnInteger::SetParameterName(const char* theName, - G4bool omittable, +void G4UIcmdWithAnInteger::SetParameterName(const char* theName, G4bool omittable, G4bool currentAsDefault) { G4UIparameter* theParam = GetParameter(0); diff --git a/source/intercoms/src/G4UIcommand.cc b/source/intercoms/src/G4UIcommand.cc index 84993930c9e..a3b8c2a6a88 100644 --- a/source/intercoms/src/G4UIcommand.cc +++ b/source/intercoms/src/G4UIcommand.cc @@ -29,55 +29,49 @@ // -------------------------------------------------------------------- #include "G4UIcommand.hh" -#include "G4UImessenger.hh" -#include "G4UImanager.hh" -#include "G4UIcommandStatus.hh" + #include "G4StateManager.hh" -#include "G4UnitsTable.hh" +#include "G4Threading.hh" #include "G4Tokenizer.hh" -#include "G4ios.hh" -#include -#include - +#include "G4UIcommandStatus.hh" +#include "G4UImanager.hh" +#include "G4UImessenger.hh" +#include "G4UIparsing.hh" #include "G4UItokenNum.hh" +#include "G4UnitsTable.hh" +#include "G4ios.hh" -#include "G4Threading.hh" +#include // isalpha(), toupper() +#include +#include using namespace G4UItokenNum; // -------------------------------------------------------------------- -G4UIcommand::G4UIcommand(const char* theCommandPath, - G4UImessenger* theMessenger, G4bool tBB) - : toBeBroadcasted(tBB) - , messenger(theMessenger) +G4UIcommand::G4UIcommand(const char* theCommandPath, G4UImessenger* theMessenger, G4bool tBB) + : toBeBroadcasted(tBB), messenger(theMessenger) { G4String comStr = theCommandPath; G4UIcommandCommonConstructorCode(comStr); - availabelStateList.clear(); - availabelStateList.push_back(G4State_PreInit); - availabelStateList.push_back(G4State_Init); - availabelStateList.push_back(G4State_Idle); - availabelStateList.push_back(G4State_GeomClosed); - availabelStateList.push_back(G4State_EventProc); - availabelStateList.push_back(G4State_Abort); + availabelStateList = {G4State_PreInit, G4State_Init, G4State_Idle, + G4State_GeomClosed, G4State_EventProc, G4State_Abort}; } // -------------------------------------------------------------------- void G4UIcommand::G4UIcommandCommonConstructorCode(const char* theCommandPath) { - commandPath = theCommandPath; - commandName = theCommandPath; - G4int commandNameIndex = (G4int)commandName.rfind('/'); + commandPath = theCommandPath; + commandName = theCommandPath; + auto commandNameIndex = (G4int)commandName.rfind('/'); commandName.erase(0, commandNameIndex + 1); #ifdef G4MULTITHREADED - if((messenger != nullptr) && messenger->CommandsShouldBeInMaster() && - G4Threading::IsWorkerThread()) + if ((messenger != nullptr) && messenger->CommandsShouldBeInMaster() + && G4Threading::IsWorkerThread()) { toBeBroadcasted = false; G4UImanager::GetMasterUIpointer()->AddNewCommand(this); } - else - { + else { G4UImanager::GetUIpointer()->AddNewCommand(this); } #else @@ -88,24 +82,18 @@ void G4UIcommand::G4UIcommandCommonConstructorCode(const char* theCommandPath) // -------------------------------------------------------------------- void G4UIcommand::SetCommandType(CommandType typ) { - if(messenger==nullptr) - { // this must be a directory - if(typ != CmdDirectory) - { + if (messenger == nullptr) { // this must be a directory + if (typ != CmdDirectory) { G4ExceptionDescription ed; - ed << "A UI command <" << commandPath - << "> is defined without vaild messenger."; - G4Exception("G4UIcommand::SetCommandType","UI2031", - FatalException,ed); + ed << "A UI command <" << commandPath << "> is defined without vaild messenger."; + G4Exception("G4UIcommand::SetCommandType", "UI2031", FatalException, ed); } - else if(commandPath.back() != '/') - { + else if (commandPath.back() != '/') { G4ExceptionDescription ed; - ed << "G4UIcommand Warning : \n" - << " <" << commandPath << "> must be a directory." + ed << "G4UIcommand Warning : \n" + << " <" << commandPath << "> must be a directory." << " '/' is appended."; - G4Exception("G4UIcommand::SetCommandType","UI2032", - JustWarning,ed); + G4Exception("G4UIcommand::SetCommandType", "UI2032", JustWarning, ed); commandPath += "/"; } } @@ -116,18 +104,13 @@ void G4UIcommand::SetCommandType(CommandType typ) G4UIcommand::~G4UIcommand() { G4UImanager* fUImanager = G4UImanager::GetUIpointer(); - if(fUImanager != nullptr) - { + if (fUImanager != nullptr) { fUImanager->RemoveCommand(this); } - std::size_t n_parameterEntry = parameter.size(); - for(std::size_t i_thParameter = 0; i_thParameter < n_parameterEntry; - ++i_thParameter) - { - delete parameter[i_thParameter]; + for (const auto& p : parameter) { + delete p; } - parameter.clear(); } // -------------------------------------------------------------------- @@ -147,76 +130,57 @@ G4int G4UIcommand::DoIt(G4String parameterList) { G4String correctParameters; std::size_t n_parameterEntry = parameter.size(); - if(n_parameterEntry != 0) - { + if (n_parameterEntry != 0) { G4String aToken; G4String correctToken; G4Tokenizer parameterToken(parameterList); - for(std::size_t i_thParameter = 0; i_thParameter < n_parameterEntry; - ++i_thParameter) - { - if(i_thParameter > 0) - { + for (std::size_t i_thParameter = 0; i_thParameter < n_parameterEntry; ++i_thParameter) { + if (i_thParameter > 0) { correctParameters.append(" "); } aToken = parameterToken(); - if(aToken.length() > 0 && aToken[0] == '"') - { - while(aToken.back() != '"' || - (aToken.length() == 1 && aToken[0] == '"')) - { + if (aToken.length() > 0 && aToken[0] == '"') { + while (aToken.back() != '"' || (aToken.length() == 1 && aToken[0] == '"')) { G4String additionalToken = parameterToken(); - if(additionalToken.empty()) - { + if (additionalToken.empty()) { return G4int(fParameterUnreadable + i_thParameter); } aToken += " "; aToken += additionalToken; } } - else if(i_thParameter == n_parameterEntry - 1 && - parameter[i_thParameter]->GetParameterType() == 's') + else if (i_thParameter == n_parameterEntry - 1 + && parameter[i_thParameter]->GetParameterType() == 's') { G4String anotherToken; - while(!((anotherToken = parameterToken()).empty())) - { - std::size_t idxs = anotherToken.find("#"); - if(idxs == std::string::npos) - { + while (!((anotherToken = parameterToken()).empty())) { + std::size_t idxs = anotherToken.find('#'); + if (idxs == std::string::npos) { aToken += " "; aToken += anotherToken; } - else if(idxs > 0) - { + else if (idxs > 0) { aToken += " "; aToken += anotherToken.substr(0, idxs); break; } - else - { + else { break; } } } - if(aToken.empty() || aToken == "!") - { - if(parameter[i_thParameter]->IsOmittable()) - { - if(parameter[i_thParameter]->GetCurrentAsDefault()) - { + if (aToken.empty() || aToken == "!") { + if (parameter[i_thParameter]->IsOmittable()) { + if (parameter[i_thParameter]->GetCurrentAsDefault()) { G4Tokenizer cvSt(messenger->GetCurrentValue(this)); G4String parVal; - for(std::size_t ii = 0; ii < i_thParameter; ++ii) - { + for (std::size_t ii = 0; ii < i_thParameter; ++ii) { parVal = cvSt(); - if(parVal[0] == '"') - { - while(parVal.back() != '"') - { + if (parVal[0] == '"') { + while (parVal.back() != '"') { G4String additionalToken = cvSt(); - if(additionalToken.empty()) - { + if (additionalToken.empty()) { return G4int(fParameterUnreadable + i_thParameter); } parVal += " "; @@ -225,13 +189,10 @@ G4int G4UIcommand::DoIt(G4String parameterList) } } G4String aCVToken = cvSt(); - if(aCVToken[0] == '"') - { - while(aCVToken.back() != '"') - { + if (aCVToken[0] == '"') { + while (aCVToken.back() != '"') { G4String additionalToken = cvSt(); - if(additionalToken.empty()) - { + if (additionalToken.empty()) { return G4int(fParameterUnreadable + i_thParameter); } aCVToken += " "; @@ -240,22 +201,17 @@ G4int G4UIcommand::DoIt(G4String parameterList) } correctParameters.append(aCVToken); } - else - { - correctParameters.append( - parameter[i_thParameter]->GetDefaultValue()); + else { + correctParameters.append(parameter[i_thParameter]->GetDefaultValue()); } } - else - { + else { return G4int(fParameterUnreadable + i_thParameter); } } - else - { + else { G4int stat = parameter[i_thParameter]->CheckNewValue(aToken); - if(stat != 0) - { + if (stat != 0) { return stat + G4int(i_thParameter); } correctParameters.append(aToken); @@ -263,13 +219,11 @@ G4int G4UIcommand::DoIt(G4String parameterList) } } - if(CheckNewValue(correctParameters) != 0) - { + if (CheckNewValue(correctParameters) != 0) { return fParameterOutOfRange + 99; } - if(workerThreadOnly && G4Threading::IsMasterThread()) - { + if (workerThreadOnly && G4Threading::IsMasterThread()) { return 0; } @@ -286,84 +240,55 @@ G4String G4UIcommand::GetCurrentValue() // -------------------------------------------------------------------- void G4UIcommand::AvailableForStates(G4ApplicationState s1) { - availabelStateList.clear(); - availabelStateList.push_back(s1); + availabelStateList = {s1}; } // -------------------------------------------------------------------- -void G4UIcommand::AvailableForStates(G4ApplicationState s1, - G4ApplicationState s2) +void G4UIcommand::AvailableForStates(G4ApplicationState s1, G4ApplicationState s2) { - availabelStateList.clear(); - availabelStateList.push_back(s1); - availabelStateList.push_back(s2); + availabelStateList = {s1, s2}; } // -------------------------------------------------------------------- -void G4UIcommand::AvailableForStates(G4ApplicationState s1, - G4ApplicationState s2, +void G4UIcommand::AvailableForStates(G4ApplicationState s1, G4ApplicationState s2, G4ApplicationState s3) { - availabelStateList.clear(); - availabelStateList.push_back(s1); - availabelStateList.push_back(s2); - availabelStateList.push_back(s3); + availabelStateList = {s1, s2, s3}; } // -------------------------------------------------------------------- -void G4UIcommand::AvailableForStates(G4ApplicationState s1, - G4ApplicationState s2, - G4ApplicationState s3, - G4ApplicationState s4) +void G4UIcommand::AvailableForStates(G4ApplicationState s1, G4ApplicationState s2, + G4ApplicationState s3, G4ApplicationState s4) { - availabelStateList.clear(); - availabelStateList.push_back(s1); - availabelStateList.push_back(s2); - availabelStateList.push_back(s3); - availabelStateList.push_back(s4); + availabelStateList = {s1, s2, s3, s4}; } // -------------------------------------------------------------------- -void G4UIcommand::AvailableForStates(G4ApplicationState s1, - G4ApplicationState s2, - G4ApplicationState s3, - G4ApplicationState s4, +void G4UIcommand::AvailableForStates(G4ApplicationState s1, G4ApplicationState s2, + G4ApplicationState s3, G4ApplicationState s4, G4ApplicationState s5) { - availabelStateList.clear(); - availabelStateList.push_back(s1); - availabelStateList.push_back(s2); - availabelStateList.push_back(s3); - availabelStateList.push_back(s4); - availabelStateList.push_back(s5); + availabelStateList = {s1, s2, s3, s4, s5}; } // -------------------------------------------------------------------- G4bool G4UIcommand::IsAvailable() { - G4bool av = false; - G4ApplicationState currentState = - G4StateManager::GetStateManager()->GetCurrentState(); + G4ApplicationState currentState = G4StateManager::GetStateManager()->GetCurrentState(); - std::size_t nState = availabelStateList.size(); - for(std::size_t i = 0; i < nState; ++i) - { - if(availabelStateList[i] == currentState) - { - av = true; - break; + for (const auto& s : availabelStateList) { + if (s == currentState) { + return true; } } - return av; + return false; } // -------------------------------------------------------------------- G4double G4UIcommand::ValueOf(const char* unitName) { - G4double value = 0.; - value = G4UnitDefinition::GetValueOf(unitName); - return value; + return G4UnitDefinition::GetValueOf(unitName); } // -------------------------------------------------------------------- @@ -375,36 +300,30 @@ G4String G4UIcommand::CategoryOf(const char* unitName) // -------------------------------------------------------------------- G4String G4UIcommand::UnitsList(const char* unitCategory) { - G4String retStr; G4UnitsTable& UTbl = G4UnitDefinition::GetUnitsTable(); - std::size_t i; - for(i = 0; i < UTbl.size(); ++i) - { - if(UTbl[i]->GetName() == unitCategory) - { - break; - } - } - if(i == UTbl.size()) - { - G4cerr << "Unit category <" << unitCategory << "> is not defined." - << G4endl; - return retStr; - } - G4UnitsContainer& UCnt = UTbl[i]->GetUnitsList(); - retStr = UCnt[0]->GetSymbol(); - std::size_t je = UCnt.size(); - for(std::size_t j = 1; j < je; ++j) - { - retStr += " "; - retStr += UCnt[j]->GetSymbol(); + + auto ucatIter = std::find_if(std::cbegin(UTbl), std::cend(UTbl), [&unitCategory](const auto& ud) { + return ud->GetName() == unitCategory; + }); + + if (ucatIter == std::cend(UTbl)) { + G4cerr << "Unit category <" << unitCategory << "> is not defined." << G4endl; + return G4String(); } - for(std::size_t k = 0; k < je; ++k) - { - retStr += " "; - retStr += UCnt[k]->GetName(); + + G4String symList; + G4String nameList; + G4UnitsContainer& UCnt = (*ucatIter)->GetUnitsList(); + + for (const auto& uDef : UCnt) { + symList += uDef->GetSymbol(); + symList += " "; + nameList += uDef->GetName(); + nameList += " "; } - return retStr; + symList += nameList; + G4StrUtil::rstrip(symList); + return symList; } // -------------------------------------------------------------------- @@ -412,32 +331,24 @@ void G4UIcommand::List() { G4cout << G4endl; G4cout << G4endl; - if(commandPath.back() != '/') - { + if (commandPath.back() != '/') { G4cout << "Command " << commandPath << G4endl; } - if(workerThreadOnly) - { + if (workerThreadOnly) { G4cout << " ---- available only in worker thread" << G4endl; } + G4cout << "Guidance :" << G4endl; - std::size_t n_guidanceEntry = commandGuidance.size(); - for(std::size_t i_thGuidance = 0; i_thGuidance < n_guidanceEntry; ++i_thGuidance) - { - G4cout << commandGuidance[i_thGuidance] << G4endl; + for (const auto& i_thGuidance : commandGuidance) { + G4cout << i_thGuidance << G4endl; } - if(!rangeString.empty()) - { - G4cout << " Range of parameters : " << rangeString << G4endl; + + if (!rangeExpression.empty()) { + G4cout << " Range of parameters : " << rangeExpression << G4endl; } - std::size_t n_parameterEntry = parameter.size(); - if(n_parameterEntry > 0) - { - for(std::size_t i_thParameter = 0; i_thParameter < n_parameterEntry; - ++i_thParameter) - { - parameter[i_thParameter]->List(); - } + + for (const auto& i_thParameter : parameter) { + i_thParameter->List(); } G4cout << G4endl; } @@ -445,143 +356,90 @@ void G4UIcommand::List() // -------------------------------------------------------------------- G4String G4UIcommand::ConvertToString(G4bool boolVal) { - G4String vl = "0"; - if(boolVal) - { - vl = "1"; - } - return vl; + return boolVal ? "1" : "0"; } // -------------------------------------------------------------------- G4String G4UIcommand::ConvertToString(G4int intValue) { - std::ostringstream os; - os << intValue; - G4String vl = os.str(); - return vl; + return G4UIparsing::TtoS(intValue); } // -------------------------------------------------------------------- G4String G4UIcommand::ConvertToString(G4long longValue) { - std::ostringstream os; - os << longValue; - G4String vl = os.str(); - return vl; + return G4UIparsing::TtoS(longValue); } // -------------------------------------------------------------------- G4String G4UIcommand::ConvertToString(G4double doubleValue) { std::ostringstream os; - if(G4UImanager::DoublePrecisionStr()) - { - os << std::setprecision(17) << doubleValue; - } - else - { - os << doubleValue; + if (G4UImanager::DoublePrecisionStr()) { + os << std::setprecision(17); } - G4String vl = os.str(); - return vl; + os << doubleValue; + return os.str(); } // -------------------------------------------------------------------- -G4String G4UIcommand::ConvertToString(G4double doubleValue, - const char* unitName) +G4String G4UIcommand::ConvertToString(G4double doubleValue, const char* unitName) { - G4String unt = unitName; - G4double uv = ValueOf(unitName); - std::ostringstream os; - if(G4UImanager::DoublePrecisionStr()) - { - os << std::setprecision(17) << doubleValue / uv << " " << unitName; - } - else - { - os << doubleValue / uv << " " << unitName; + if (G4UImanager::DoublePrecisionStr()) { + os << std::setprecision(17); } - G4String vl = os.str(); - return vl; + os << doubleValue / ValueOf(unitName) << " " << unitName; + return os.str(); } // -------------------------------------------------------------------- G4String G4UIcommand::ConvertToString(const G4ThreeVector& vec) { std::ostringstream os; - if(G4UImanager::DoublePrecisionStr()) - { - os << std::setprecision(17) << vec.x() << " " << vec.y() << " " << vec.z(); - } - else - { - os << vec.x() << " " << vec.y() << " " << vec.z(); + if (G4UImanager::DoublePrecisionStr()) { + os << std::setprecision(17); } - G4String vl = os.str(); - return vl; + os << vec.x() << " " << vec.y() << " " << vec.z(); + return os.str(); } // -------------------------------------------------------------------- -G4String G4UIcommand::ConvertToString(const G4ThreeVector& vec, - const char* unitName) +G4String G4UIcommand::ConvertToString(const G4ThreeVector& vec, const char* unitName) { - G4String unt = unitName; - G4double uv = ValueOf(unitName); + G4double uv = ValueOf(unitName); std::ostringstream os; - if(G4UImanager::DoublePrecisionStr()) - { - os << std::setprecision(17) << vec.x() / uv << " " << vec.y() / uv << " " - << vec.z() / uv << " " << unitName; + if (G4UImanager::DoublePrecisionStr()) { + os << std::setprecision(17); } - else - { - os << vec.x() / uv << " " << vec.y() / uv << " " << vec.z() / uv << " " - << unitName; - } - G4String vl = os.str(); - return vl; + os << vec.x() / uv << " " << vec.y() / uv << " " << vec.z() / uv << " " << unitName; + return os.str(); } // -------------------------------------------------------------------- G4bool G4UIcommand::ConvertToBool(const char* st) { G4String v = G4StrUtil::to_upper_copy(st); - G4bool vl = false; - if(v == "Y" || v == "YES" || v == "1" || v == "T" || v == "TRUE") - { - vl = true; - } - return vl; + return (v == "Y" || v == "YES" || v == "1" || v == "T" || v == "TRUE"); } // -------------------------------------------------------------------- G4int G4UIcommand::ConvertToInt(const char* st) { - G4int vl; - std::istringstream is(st); - is >> vl; - return vl; + return G4UIparsing::StoT(st); } // -------------------------------------------------------------------- G4long G4UIcommand::ConvertToLongInt(const char* st) { - G4long vl; - std::istringstream is(st); - is >> vl; - return vl; + return G4UIparsing::StoT(st); } // -------------------------------------------------------------------- G4double G4UIcommand::ConvertToDouble(const char* st) { - G4double vl; - std::istringstream is(st); - is >> vl; - return vl; + return G4UIparsing::StoT(st); } // -------------------------------------------------------------------- @@ -618,289 +476,35 @@ G4ThreeVector G4UIcommand::ConvertToDimensioned3Vector(const char* st) std::istringstream is(st); is >> vx >> vy >> vz >> unts; G4String unt = unts; - G4double uv = ValueOf(unt); + G4double uv = ValueOf(unt); return G4ThreeVector(vx * uv, vy * uv, vz * uv); } // ----- the following is used by CheckNewValue() -------------------- -#include // isalpha(), toupper() - G4int G4UIcommand::CheckNewValue(const char* newValue) { yystype result; - // if( TypeCheck(newValue) == 0 ) return 1; - if(!rangeString.empty()) - { - if(RangeCheck(newValue) == 0) - { - return fParameterOutOfRange; - } + if (!RangeCheck(newValue)) { + return fParameterOutOfRange; } return 0; // succeeded } // -------------------------------------------------------------------- -G4int G4UIcommand::TypeCheck(const char* t) +G4bool G4UIcommand::RangeCheck(const char* t) { - G4String aNewValue; - char type; - std::istringstream is(t); - for(auto& i : parameter) - { - is >> aNewValue; - type = (char)std::toupper(i->GetParameterType()); - switch(type) - { - case 'D': - if(IsDouble(aNewValue) == 0) - { - G4cerr << aNewValue << ": double value expected." << G4endl; - return 0; - } - break; - case 'I': - if(IsInt(aNewValue, 10) == 0) - { - G4cerr << aNewValue << ": integer expected." << G4endl; - return 0; - } - break; - case 'L': - if(IsInt(aNewValue, 20) == 0) - { - G4cerr << aNewValue << ": long int expected." << G4endl; - return 0; - } - break; - case 'S': - break; - case 'B': - G4StrUtil::to_upper(aNewValue); - if(aNewValue == "Y" || aNewValue == "N" || aNewValue == "YES" || - aNewValue == "NO" || aNewValue == "1" || aNewValue == "0" || - aNewValue == "T" || aNewValue == "F" || aNewValue == "TRUE" || - aNewValue == "FALSE") - { - return 1; - } - else - { - return 0; - } - break; - default:; - } + if (rangeExpression.empty()) { + return true; } - return 1; -} -// -------------------------------------------------------------------- -G4int G4UIcommand::IsInt(const char* buf, short maxDigits) -{ - const char* p = buf; - G4int length = 0; - if(*p == '+' || *p == '-') - { - ++p; - } - if(isdigit((G4int) (*p)) != 0) - { - while(isdigit((G4int) (*p)) != 0) - { - ++p; - ++length; - } - if(*p == '\0') - { - if(length > maxDigits) - { - G4cerr << "digit length exceeds" << G4endl; - return 0; - } - return 1; - } - else - { - // G4cerr <<"illegal character after int:"<GetParameterType()); - switch(type) - { + switch (type) { case 'D': is >> newVal[i].D; break; @@ -919,37 +523,28 @@ G4int G4UIcommand::RangeCheck(const char* t) default:; } } - // PrintToken(); // Print tokens (consumes all tokens) - token = Yylex(); + token = Yylex(); result = Expression(); - if(paramERR == 1) - { - return 0; + if (paramERR == 1) { + return false; } - if(result.type != CONSTINT) - { + if (result.type != CONSTINT) { G4cerr << "Illegal Expression in parameter range." << G4endl; - return 0; + return false; } - if(result.I != 0) - { - return 1; + if (result.I != 0) { + return true; } - G4cerr << "parameter out of range: " << rangeString << G4endl; - return 0; + G4cerr << "parameter out of range: " << rangeExpression << G4endl; + return false; } // ------------------ syntax node functions ------------------ yystype G4UIcommand::Expression() { - yystype result; -#ifdef DEBUG - G4cerr << " Expression()" << G4endl; -#endif - result = LogicalORExpression(); - return result; + return LogicalORExpression(); } // -------------------------------------------------------------------- @@ -958,27 +553,22 @@ yystype G4UIcommand::LogicalORExpression() yystype result; yystype p; p = LogicalANDExpression(); - if(token != LOGICALOR) - { + if (token != LOGICALOR) { return p; } - if(p.type == CONSTSTRING || p.type == IDENTIFIER) - { + if (p.type == CONSTSTRING || p.type == IDENTIFIER) { G4cerr << "Parameter range: illegal type at '||'" << G4endl; paramERR = 1; } result.I = p.I; - while(token == LOGICALOR) - { + while (token == LOGICALOR) { token = Yylex(); - p = LogicalANDExpression(); - if(p.type == CONSTSTRING || p.type == IDENTIFIER) - { + p = LogicalANDExpression(); + if (p.type == CONSTSTRING || p.type == IDENTIFIER) { G4cerr << "Parameter range: illegal type at '||'" << G4endl; paramERR = 1; } - switch(p.type) - { + switch (p.type) { case CONSTINT: result.I += p.I; result.type = CONSTINT; @@ -1005,27 +595,22 @@ yystype G4UIcommand::LogicalANDExpression() yystype result; yystype p; p = EqualityExpression(); - if(token != LOGICALAND) - { + if (token != LOGICALAND) { return p; } - if(p.type == CONSTSTRING || p.type == IDENTIFIER) - { + if (p.type == CONSTSTRING || p.type == IDENTIFIER) { G4cerr << "Parameter range: illegal type at '&&'" << G4endl; paramERR = 1; } result.I = p.I; - while(token == LOGICALAND) - { + while (token == LOGICALAND) { token = Yylex(); - p = EqualityExpression(); - if(p.type == CONSTSTRING || p.type == IDENTIFIER) - { + p = EqualityExpression(); + if (p.type == CONSTSTRING || p.type == IDENTIFIER) { G4cerr << "Parameter range: illegal type at '&&'" << G4endl; paramERR = 1; } - switch(p.type) - { + switch (p.type) { case CONSTINT: result.I *= p.I; result.type = CONSTINT; @@ -1052,26 +637,17 @@ yystype G4UIcommand::EqualityExpression() yystype arg1, arg2; G4int operat; yystype result; -#ifdef DEBUG - G4cerr << " EqualityExpression()" << G4endl; -#endif result = RelationalExpression(); - if(token == EQ || token == NE) - { - operat = token; - token = Yylex(); - arg1 = result; - arg2 = RelationalExpression(); - result.I = Eval2(arg1, operat, arg2); // semantic action + if (token == EQ || token == NE) { + operat = token; + token = Yylex(); + arg1 = result; + arg2 = RelationalExpression(); + result.I = Eval2(arg1, operat, arg2); // semantic action result.type = CONSTINT; -#ifdef DEBUG - G4cerr << " return code of Eval2(): " << result.I << G4endl; -#endif } - else - { - if(result.type != CONSTINT && result.type != CONSTDOUBLE) - { + else { + if (result.type != CONSTINT && result.type != CONSTDOUBLE) { G4cerr << "Parameter range: error at EqualityExpression" << G4endl; paramERR = 1; } @@ -1085,43 +661,29 @@ yystype G4UIcommand::RelationalExpression() yystype arg1, arg2; G4int operat; yystype result; -#ifdef DEBUG - G4cerr << " RelationalExpression()" << G4endl; -#endif arg1 = AdditiveExpression(); - if(token == GT || token == GE || token == LT || token == LE) - { - operat = token; - token = Yylex(); - arg2 = AdditiveExpression(); - result.I = Eval2(arg1, operat, arg2); // semantic action + if (token == GT || token == GE || token == LT || token == LE) { + operat = token; + token = Yylex(); + arg2 = AdditiveExpression(); + result.I = Eval2(arg1, operat, arg2); // semantic action result.type = CONSTINT; -#ifdef DEBUG - G4cerr << " return code of Eval2(): " << result.I << G4endl; -#endif } - else - { + else { result = arg1; } -#ifdef DEBUG - G4cerr << " return RelationalExpression()" << G4endl; -#endif return result; } // -------------------------------------------------------------------- yystype G4UIcommand::AdditiveExpression() { - yystype result; - result = MultiplicativeExpression(); - if(token != '+' && token != '-') - { + yystype result = MultiplicativeExpression(); + if (token != '+' && token != '-') { return result; } - G4cerr << "Parameter range: operator " << (char) token << " is not supported." - << G4endl; + G4cerr << "Parameter range: operator " << (char)token << " is not supported." << G4endl; paramERR = 1; return result; } @@ -1129,14 +691,11 @@ yystype G4UIcommand::AdditiveExpression() // -------------------------------------------------------------------- yystype G4UIcommand::MultiplicativeExpression() { - yystype result; - result = UnaryExpression(); - if(token != '*' && token != '/' && token != '%') - { + yystype result = UnaryExpression(); + if (token != '*' && token != '/' && token != '%') { return result; } - G4cerr << "Parameter range: operator " << (char) token << " is not supported." - << G4endl; + G4cerr << "Parameter range: operator " << (char)token << " is not supported." << G4endl; paramERR = 1; return result; } @@ -1146,32 +705,25 @@ yystype G4UIcommand::UnaryExpression() { yystype result; yystype p; -#ifdef DEBUG - G4cerr << " UnaryExpression" << G4endl; -#endif - switch(token) - { + switch (token) { case '-': token = Yylex(); - p = UnaryExpression(); - if(p.type == CONSTINT) - { - result.I = -p.I; + p = UnaryExpression(); + if (p.type == CONSTINT) { + result.I = -p.I; result.type = CONSTINT; } - if(p.type == CONSTLONG) - { - result.L = -p.L; + if (p.type == CONSTLONG) { + result.L = -p.L; result.type = CONSTLONG; } - if(p.type == CONSTDOUBLE) - { - result.D = -p.D; + if (p.type == CONSTDOUBLE) { + result.D = -p.D; result.type = CONSTDOUBLE; } break; case '+': - token = Yylex(); + token = Yylex(); result = UnaryExpression(); break; case '!': @@ -1179,7 +731,7 @@ yystype G4UIcommand::UnaryExpression() G4cerr << "Parameter range error: " << "operator '!' is not supported (sorry)." << G4endl; paramERR = 1; - result = UnaryExpression(); + result = UnaryExpression(); break; default: result = PrimaryExpression(); @@ -1191,36 +743,31 @@ yystype G4UIcommand::UnaryExpression() yystype G4UIcommand::PrimaryExpression() { yystype result; -#ifdef DEBUG - G4cerr << " primary_exp" << G4endl; -#endif - switch(token) - { + switch (token) { case IDENTIFIER: - result.S = yylval.S; + result.S = yylval.S; result.type = token; - token = Yylex(); + token = Yylex(); break; case CONSTINT: - result.I = yylval.I; + result.I = yylval.I; result.type = token; - token = Yylex(); + token = Yylex(); break; case CONSTLONG: - result.L = yylval.L; + result.L = yylval.L; result.type = token; - token = Yylex(); + token = Yylex(); break; case CONSTDOUBLE: - result.D = yylval.D; + result.D = yylval.D; result.type = token; - token = Yylex(); + token = Yylex(); break; case '(': - token = Yylex(); + token = Yylex(); result = Expression(); - if(token != ')') - { + if (token != ')') { G4cerr << " ')' expected" << G4endl; paramERR = 1; } @@ -1237,118 +784,90 @@ yystype G4UIcommand::PrimaryExpression() G4int G4UIcommand::Eval2(const yystype& arg1, G4int op, const yystype& arg2) { char newValtype; - if((arg1.type != IDENTIFIER) && (arg2.type != IDENTIFIER)) - { + if ((arg1.type != IDENTIFIER) && (arg2.type != IDENTIFIER)) { G4cerr << commandName << ": meaningless comparison" << G4endl; paramERR = 1; } - if(arg1.type == IDENTIFIER) - { + if (arg1.type == IDENTIFIER) { unsigned i = IndexOf(arg1.S); newValtype = (char)std::toupper(parameter[i]->GetParameterType()); - switch(newValtype) - { + switch (newValtype) { case 'I': - if(arg2.type == CONSTINT) - { - return CompareInt(newVal[i].I, op, arg2.I); + if (arg2.type == CONSTINT) { + return G4UIparsing::CompareInt(newVal[i].I, op, arg2.I, paramERR); //=================================================================== // MA - 2018.07.23 } - else if(arg2.type == IDENTIFIER) - { - unsigned iii = IndexOf(arg2.S); + else if (arg2.type == IDENTIFIER) { + unsigned iii = IndexOf(arg2.S); char newValtype2 = (char)std::toupper(parameter[iii]->GetParameterType()); - if(newValtype2 == 'I') - { - return CompareInt(newVal[i].I, op, newVal[iii].I); + if (newValtype2 == 'I') { + return G4UIparsing::CompareInt(newVal[i].I, op, newVal[iii].I, paramERR); } - else if(newValtype2 == 'L') - { - G4cerr << "Warning : Integer is compared with long int : " - << rangeString << G4endl; - return CompareLong(newVal[i].I, op, newVal[iii].L); + if (newValtype2 == 'L') { + G4cerr << "Warning : Integer is compared with long int : " << rangeExpression << G4endl; + return G4UIparsing::CompareLong(newVal[i].I, op, newVal[iii].L, paramERR); } - else if(newValtype2 == 'D') - { - G4cerr << "Warning : Integer is compared with double : " - << rangeString << G4endl; - return CompareDouble(newVal[i].I, op, newVal[iii].D); + if (newValtype2 == 'D') { + G4cerr << "Warning : Integer is compared with double : " << rangeExpression << G4endl; + return G4UIparsing::CompareDouble(newVal[i].I, op, newVal[iii].D, paramERR); } //=================================================================== } - else - { - G4cerr << "integer operand expected for " << rangeString << '.' - << G4endl; + else { + G4cerr << "integer operand expected for " << rangeExpression << '.' << G4endl; } break; case 'L': - if(arg2.type == CONSTINT) - { - return CompareLong(newVal[i].L, op, arg2.I); + if (arg2.type == CONSTINT) { + return G4UIparsing::CompareLong(newVal[i].L, op, arg2.I, paramERR); } - else if(arg2.type == CONSTLONG) - { - return CompareLong(newVal[i].L, op, arg2.L); + else if (arg2.type == CONSTLONG) { + return G4UIparsing::CompareLong(newVal[i].L, op, arg2.L, paramERR); } - else if(arg2.type == IDENTIFIER) - { - unsigned iii = IndexOf(arg2.S); + else if (arg2.type == IDENTIFIER) { + unsigned iii = IndexOf(arg2.S); char newValtype2 = (char)std::toupper(parameter[iii]->GetParameterType()); - if(newValtype2 == 'I') - { - return CompareLong(newVal[i].L, op, newVal[iii].I); + if (newValtype2 == 'I') { + return G4UIparsing::CompareLong(newVal[i].L, op, newVal[iii].I, paramERR); } - if(newValtype2 == 'L') - { - return CompareLong(newVal[i].L, op, newVal[iii].L); + if (newValtype2 == 'L') { + return G4UIparsing::CompareLong(newVal[i].L, op, newVal[iii].L, paramERR); } - else if(newValtype2 == 'D') - { - G4cerr << "Warning : Long int is compared with double : " - << rangeString << G4endl; - return CompareDouble(newVal[i].L, op, newVal[iii].D); + if (newValtype2 == 'D') { + G4cerr << "Warning : Long int is compared with double : " << rangeExpression << G4endl; + return G4UIparsing::CompareDouble(newVal[i].L, op, newVal[iii].D, paramERR); } //=================================================================== } - else - { - G4cerr << "integer operand expected for " << rangeString << '.' - << G4endl; + else { + G4cerr << "integer operand expected for " << rangeExpression << '.' << G4endl; } break; case 'D': - if(arg2.type == CONSTDOUBLE) - { - return CompareDouble(newVal[i].D, op, arg2.D); + if (arg2.type == CONSTDOUBLE) { + return G4UIparsing::CompareDouble(newVal[i].D, op, arg2.D, paramERR); } - else if(arg2.type == CONSTINT) - { // integral promotion - return CompareDouble(newVal[i].D, op, arg2.I); + else if (arg2.type == CONSTINT) { // integral promotion + return G4UIparsing::CompareDouble(newVal[i].D, op, arg2.I, paramERR); //=================================================================== // MA - 2018.07.23 } - else if(arg2.type == CONSTLONG) - { - return CompareDouble(newVal[i].D, op, arg2.L); + else if (arg2.type == CONSTLONG) { + return G4UIparsing::CompareDouble(newVal[i].D, op, arg2.L, paramERR); } - else if(arg2.type == IDENTIFIER) - { - unsigned iii = IndexOf(arg2.S); + else if (arg2.type == IDENTIFIER) { + unsigned iii = IndexOf(arg2.S); char newValtype2 = (char)std::toupper(parameter[iii]->GetParameterType()); - if(newValtype2 == 'I') - { - return CompareDouble(newVal[i].D, op, newVal[iii].I); + if (newValtype2 == 'I') { + return G4UIparsing::CompareDouble(newVal[i].D, op, newVal[iii].I, paramERR); } - else if(newValtype2 == 'L') - { - return CompareDouble(newVal[i].D, op, newVal[iii].L); + if (newValtype2 == 'L') { + return G4UIparsing::CompareDouble(newVal[i].D, op, newVal[iii].L, paramERR); } - else if(newValtype2 == 'D') - { - return CompareDouble(newVal[i].D, op, newVal[iii].D); + if (newValtype2 == 'D') { + return G4UIparsing::CompareDouble(newVal[i].D, op, newVal[iii].D, paramERR); } //=================================================================== } @@ -1356,42 +875,32 @@ G4int G4UIcommand::Eval2(const yystype& arg1, G4int op, const yystype& arg2) default:; } } - if(arg2.type == IDENTIFIER) - { + if (arg2.type == IDENTIFIER) { unsigned i = IndexOf(arg2.S); newValtype = (char)std::toupper(parameter[i]->GetParameterType()); - switch(newValtype) - { + switch (newValtype) { case 'I': - if(arg1.type == CONSTINT) - { - return CompareInt(arg1.I, op, newVal[i].I); + if (arg1.type == CONSTINT) { + return G4UIparsing::CompareInt(arg1.I, op, newVal[i].I, paramERR); } - else - { - G4cerr << "integer operand expected for " << rangeString << '.' - << G4endl; + else { + G4cerr << "integer operand expected for " << rangeExpression << '.' << G4endl; } break; case 'L': - if(arg1.type == CONSTLONG) - { - return CompareLong(arg1.L, op, newVal[i].L); + if (arg1.type == CONSTLONG) { + return G4UIparsing::CompareLong(arg1.L, op, newVal[i].L, paramERR); } - else - { - G4cerr << "long int operand expected for " << rangeString << '.' - << G4endl; + else { + G4cerr << "long int operand expected for " << rangeExpression << '.' << G4endl; } break; case 'D': - if(arg1.type == CONSTDOUBLE) - { - return CompareDouble(arg1.D, op, newVal[i].D); + if (arg1.type == CONSTDOUBLE) { + return G4UIparsing::CompareDouble(arg1.D, op, newVal[i].D, paramERR); } - else if(arg1.type == CONSTINT) - { // integral promotion - return CompareDouble(arg1.I, op, newVal[i].D); + else if (arg1.type == CONSTINT) { // integral promotion + return G4UIparsing::CompareDouble(arg1.I, op, newVal[i].D, paramERR); } break; default:; @@ -1400,142 +909,11 @@ G4int G4UIcommand::Eval2(const yystype& arg1, G4int op, const yystype& arg2) return 0; } -// -------------------------------------------------------------------- -G4int G4UIcommand::CompareInt(G4int arg1, G4int op, G4int arg2) -{ - G4int result = -1; - G4String opr; - switch(op) - { - case GT: - result = static_cast(arg1 > arg2); - opr = ">"; - break; - case GE: - result = static_cast(arg1 >= arg2); - opr = ">="; - break; - case LT: - result = static_cast(arg1 < arg2); - opr = "<"; - break; - case LE: - result = static_cast(arg1 <= arg2); - opr = "<="; - break; - case EQ: - result = static_cast(arg1 == arg2); - opr = "=="; - break; - case NE: - result = static_cast(arg1 != arg2); - opr = "!="; - break; - default: - G4cerr << "Parameter range: error at CompareInt" << G4endl; - paramERR = 1; - } -#ifdef DEBUG - G4cerr << "CompareInt " << arg1 << " " << opr << arg2 << " result: " << result - << G4endl; -#endif - return result; -} - -// -------------------------------------------------------------------- -G4int G4UIcommand::CompareLong(G4long arg1, G4int op, G4long arg2) -{ - G4int result = -1; - G4String opr; - switch(op) - { - case GT: - result = static_cast(arg1 > arg2); - opr = ">"; - break; - case GE: - result = static_cast(arg1 >= arg2); - opr = ">="; - break; - case LT: - result = static_cast(arg1 < arg2); - opr = "<"; - break; - case LE: - result = static_cast(arg1 <= arg2); - opr = "<="; - break; - case EQ: - result = static_cast(arg1 == arg2); - opr = "=="; - break; - case NE: - result = static_cast(arg1 != arg2); - opr = "!="; - break; - default: - G4cerr << "Parameter range: error at CompareInt" << G4endl; - paramERR = 1; - } -#ifdef DEBUG - G4cerr << "CompareInt " << arg1 << " " << opr << arg2 << " result: " << result - << G4endl; -#endif - return result; -} - -// -------------------------------------------------------------------- -G4int G4UIcommand::CompareDouble(G4double arg1, G4int op, G4double arg2) -{ - G4int result = -1; - G4String opr; - switch(op) - { - case GT: - result = static_cast(arg1 > arg2); - opr = ">"; - break; - case GE: - result = static_cast(arg1 >= arg2); - opr = ">="; - break; - case LT: - result = static_cast(arg1 < arg2); - opr = "<"; - break; - case LE: - result = static_cast(arg1 <= arg2); - opr = "<="; - break; - case EQ: - result = static_cast(arg1 == arg2); - opr = "=="; - break; - case NE: - result = static_cast(arg1 != arg2); - opr = "!="; - break; - default: - G4cerr << "Parameter range: error at CompareDouble" << G4endl; - paramERR = 1; - } -#ifdef DEBUG - G4cerr << "CompareDouble " << arg1 << " " << opr << " " << arg2 - << " result: " << result << G4endl; -#endif - return result; -} - // -------------------------------------------------------------------- unsigned G4UIcommand::IndexOf(const char* nam) { - unsigned i; - G4String pname; - for(i = 0; i < parameter.size(); ++i) - { - pname = parameter[i]->GetParameterName(); - if(pname == nam) - { + for (unsigned i = 0; i < parameter.size(); ++i) { + if (parameter[i]->GetParameterName() == nam) { return i; } } @@ -1547,12 +925,8 @@ unsigned G4UIcommand::IndexOf(const char* nam) // -------------------------------------------------------------------- unsigned G4UIcommand::IsParameter(const char* nam) { - G4String pname; - for(auto& i : parameter) - { - pname = i->GetParameterName(); - if(pname == nam) - { + for (auto& i : parameter) { + if (i->GetParameterName() == nam) { return 1; } } @@ -1562,80 +936,65 @@ unsigned G4UIcommand::IsParameter(const char* nam) // --------------------- utility functions ---------------------------- tokenNum G4UIcommand::Yylex() // reads input and returns token number, KR486 -{ // (returns EOF) +{ // (returns EOF) G4int c; G4String buf; - while((c = G4UIpGetc()) == ' ' || c == '\t' || c == '\n') - { + while ((c = G4UIpGetc()) == ' ' || c == '\t' || c == '\n') { ; } - if(c == EOF) - { - return (tokenNum) EOF; // KR488 + if (c == EOF) { + return (tokenNum)EOF; // KR488 } buf = ""; - if((isdigit(c) != 0) || c == '.') - { // I or D - do - { + if ((isdigit(c) != 0) || c == '.') { // I or D + do { buf += (unsigned char)c; c = G4UIpGetc(); - } while(c == '.' || (isdigit(c) != 0) || c == 'e' || c == 'E' || c == '+' || - c == '-'); + } while (c == '.' || (isdigit(c) != 0) || c == 'e' || c == 'E' || c == '+' || c == '-'); G4UIpUngetc(c); const char* t = buf; std::istringstream is(t); - if(IsInt(buf.data(), 20) != 0) - { + if (G4UIparsing::IsInt(buf.data(), 20)) { is >> yylval.I; return CONSTINT; } - else if(IsDouble(buf.data()) != 0) - { + if (G4UIparsing::IsDouble(buf.data())) { is >> yylval.D; return CONSTDOUBLE; } - else - { - G4cerr << buf << ": numeric format error." << G4endl; - } + + G4cerr << buf << ": numeric format error." << G4endl; } buf = ""; - if((isalpha(c) != 0) || c == '_') - { // IDENTIFIER - do - { - buf += (unsigned char) c; - } while((c = G4UIpGetc()) != EOF && ((isalnum(c) != 0) || c == '_')); + if ((isalpha(c) != 0) || c == '_') { // IDENTIFIER + do { + buf += (unsigned char)c; + } while ((c = G4UIpGetc()) != EOF && ((isalnum(c) != 0) || c == '_')); G4UIpUngetc(c); - if(IsParameter(buf) != 0u) - { + if (IsParameter(buf) != 0u) { yylval.S = buf; return IDENTIFIER; } - else - { - G4cerr << buf << " is not a parameter name." << G4endl; - paramERR = 1; - } + + G4cerr << buf << " is not a parameter name." << G4endl; + paramERR = 1; } - switch(c) - { + switch (c) { case '>': - return (tokenNum) Follow('=', GE, GT); + return (tokenNum)Follow('=', GE, GT); case '<': - return (tokenNum) Follow('=', LE, LT); + return (tokenNum)Follow('=', LE, LT); case '=': - return (tokenNum) Follow('=', EQ, '='); + return (tokenNum)Follow('=', EQ, '='); case '!': - return (tokenNum) Follow('=', NE, '!'); + return (tokenNum)Follow('=', NE, '!'); case '|': - return (tokenNum) Follow('|', LOGICALOR, '|'); + return (tokenNum)Follow('|', LOGICALOR, '|'); case '&': - return (tokenNum) Follow('&', LOGICALAND, '&'); + return (tokenNum)Follow('&', LOGICALAND, '&'); default: - return (tokenNum) c; + return (tokenNum)c; } } @@ -1643,8 +1002,7 @@ tokenNum G4UIcommand::Yylex() // reads input and returns token number, KR486 G4int G4UIcommand::Follow(G4int expect, G4int ifyes, G4int ifno) { G4int c = G4UIpGetc(); - if(c == expect) - { + if (c == expect) { return ifyes; } G4UIpUngetc(c); @@ -1655,33 +1013,26 @@ G4int G4UIcommand::Follow(G4int expect, G4int ifyes, G4int ifno) G4int G4UIcommand::G4UIpGetc() { // emulation of getc() - std::size_t length = rangeString.length(); - if(bp < (G4int)length) - { - return rangeString[bp++]; - } - else - { - return EOF; + std::size_t length = rangeExpression.length(); + if (bp < (G4int)length) { + return rangeExpression[bp++]; } + + return EOF; } // -------------------------------------------------------------------- G4int G4UIcommand::G4UIpUngetc(G4int c) { // emulation of ungetc() - if(c < 0) - { + if (c < 0) { return -1; } - if(bp > 0 && c == rangeString[bp - 1]) - { + if (bp > 0 && c == rangeExpression[bp - 1]) { --bp; } - else - { + else { G4cerr << "G4UIpUngetc() failed." << G4endl; - G4cerr << "bp=" << bp << " c=" << c << " pR(bp-1)=" << rangeString[bp - 1] - << G4endl; + G4cerr << "bp=" << bp << " c=" << c << " pR(bp-1)=" << rangeExpression[bp - 1] << G4endl; paramERR = 1; return -1; } diff --git a/source/intercoms/src/G4UIcommandTree.cc b/source/intercoms/src/G4UIcommandTree.cc index 6cc0960658e..b30f4b117b3 100644 --- a/source/intercoms/src/G4UIcommandTree.cc +++ b/source/intercoms/src/G4UIcommandTree.cc @@ -31,12 +31,14 @@ // -------------------------------------------------------------------- #include "G4UIcommandTree.hh" -#include "G4UIdirectory.hh" + #include "G4StateManager.hh" +#include "G4UIdirectory.hh" #include "G4UImanager.hh" -#include #include "G4ios.hh" +#include + // -------------------------------------------------------------------- G4UIcommandTree::G4UIcommandTree(const char* thePathName) { @@ -46,9 +48,8 @@ G4UIcommandTree::G4UIcommandTree(const char* thePathName) // -------------------------------------------------------------------- G4UIcommandTree::~G4UIcommandTree() { - for(std::size_t i = 0; i < tree.size(); ++i) - { - delete tree[i]; + for (auto& i : tree) { + delete i; } } @@ -65,154 +66,138 @@ G4bool G4UIcommandTree::operator!=(const G4UIcommandTree& right) const } // -------------------------------------------------------------------- -void G4UIcommandTree::AddNewCommand(G4UIcommand* newCommand, - G4bool workerThreadOnly) +void G4UIcommandTree::AddNewCommand(G4UIcommand* newCommand, G4bool workerThreadOnly) { - G4String commandPath = newCommand->GetCommandPath(); + G4String commandPath = newCommand->GetCommandPath(); G4String remainingPath = commandPath; remainingPath.erase(0, pathName.length()); - if(remainingPath.empty()) - { - if(guidance == nullptr) - { + if (remainingPath.empty()) { + if (guidance == nullptr) { guidance = newCommand; - if(!(newCommand->ToBeBroadcasted())) - { broadcastCommands = false; } - if(workerThreadOnly) - { newCommand->SetWorkerThreadOnly(); } + if (!(newCommand->ToBeBroadcasted())) { + broadcastCommands = false; + } + if (workerThreadOnly) { + newCommand->SetWorkerThreadOnly(); + } } return; } - if(guidance != nullptr) - { + if (guidance != nullptr) { auto* dir = static_cast(guidance); ifSort = dir->IfSort(); } std::size_t i = remainingPath.find('/'); - if(i == std::string::npos) - { + if (i == std::string::npos) { // Adding a new command to this directory std::size_t n_commandEntry = command.size(); - for(std::size_t i_thCommand = 0; i_thCommand < n_commandEntry; ++i_thCommand) - { - if(remainingPath == command[i_thCommand]->GetCommandName()) - { + for (std::size_t i_thCommand = 0; i_thCommand < n_commandEntry; ++i_thCommand) { + if (remainingPath == command[i_thCommand]->GetCommandName()) { // a command of same name has already defined. do nothing and return. - if(G4UImanager::GetUIpointer()->GetVerboseLevel() > 8) - { + if (G4UImanager::GetUIpointer()->GetVerboseLevel() > 8) { G4ExceptionDescription ed; ed << "Command <" << commandPath << "> already exist. New command is not added."; - G4Exception("G4UIcommandTree::AddNewCommand","UI_ComTree_001", - //FatalException, - JustWarning, - ed); + G4Exception("G4UIcommandTree::AddNewCommand", "UI_ComTree_001", + // FatalException, + JustWarning, ed); } return; } } - if(!broadcastCommands) - { newCommand->SetToBeBroadcasted(false); } - if(workerThreadOnly) - { newCommand->SetWorkerThreadOnly(); } - if(ifSort) - { + if (!broadcastCommands) { + newCommand->SetToBeBroadcasted(false); + } + if (workerThreadOnly) { + newCommand->SetWorkerThreadOnly(); + } + if (ifSort) { auto j = command.cbegin(); - for(; j != command.cend(); ++j) { - if (newCommand->GetCommandPath() < (*j)->GetCommandPath()) { break; } + for (; j != command.cend(); ++j) { + if (newCommand->GetCommandPath() < (*j)->GetCommandPath()) { + break; + } } - command.insert(j,newCommand); + command.insert(j, newCommand); + } + else { + command.push_back(newCommand); } - else - { command.push_back(newCommand); } return; } - else - { - // Adding a new command to a sub-directory - G4String nextPath = pathName; - nextPath.append(remainingPath.substr(0, i + 1)); - std::size_t n_treeEntry = tree.size(); - for(std::size_t i_thTree = 0; i_thTree < n_treeEntry; ++i_thTree) - { - if(nextPath == tree[i_thTree]->GetPathName()) - { - if(!broadcastCommands) - { - newCommand->SetToBeBroadcasted(false); - } - tree[i_thTree]->AddNewCommand(newCommand, workerThreadOnly); - return; + + // Adding a new command to a sub-directory + G4String nextPath = pathName; + nextPath.append(remainingPath.substr(0, i + 1)); + std::size_t n_treeEntry = tree.size(); + for (std::size_t i_thTree = 0; i_thTree < n_treeEntry; ++i_thTree) { + if (nextPath == tree[i_thTree]->GetPathName()) { + if (!broadcastCommands) { + newCommand->SetToBeBroadcasted(false); } + tree[i_thTree]->AddNewCommand(newCommand, workerThreadOnly); + return; } - // Creating a new sub-directory - auto* newTree = new G4UIcommandTree(nextPath); - if(ifSort) - { - auto j = tree.cbegin(); - for(; j != tree.cend(); ++j) { - if (newTree->GetPathName() < (*j)->GetPathName()) { break; } + } + // Creating a new sub-directory + auto* newTree = new G4UIcommandTree(nextPath); + if (ifSort) { + auto j = tree.cbegin(); + for (; j != tree.cend(); ++j) { + if (newTree->GetPathName() < (*j)->GetPathName()) { + break; } - tree.insert(j,newTree); } - else - { tree.push_back(newTree); } - if(!broadcastCommands) - { newCommand->SetToBeBroadcasted(false); } - // In case a new sub-directry is created with a new G4UIdirectory - // (most-likely this is the case), inherit the sort flag - newCommand->SetDefaultSortFlag(ifSort); - newTree->AddNewCommand(newCommand, workerThreadOnly); - return; + tree.insert(j, newTree); + } + else { + tree.push_back(newTree); + } + if (!broadcastCommands) { + newCommand->SetToBeBroadcasted(false); } + // In case a new sub-directry is created with a new G4UIdirectory + // (most-likely this is the case), inherit the sort flag + newCommand->SetDefaultSortFlag(ifSort); + newTree->AddNewCommand(newCommand, workerThreadOnly); + return; } // -------------------------------------------------------------------- -void G4UIcommandTree::RemoveCommand(G4UIcommand* aCommand, - G4bool workerThreadOnly) +void G4UIcommandTree::RemoveCommand(G4UIcommand* aCommand, G4bool workerThreadOnly) { - if(workerThreadOnly && !(aCommand->IsWorkerThreadOnly())) - { + if (workerThreadOnly && !(aCommand->IsWorkerThreadOnly())) { return; } - G4String commandPath = aCommand->GetCommandPath(); + G4String commandPath = aCommand->GetCommandPath(); G4String remainingPath = commandPath; remainingPath.erase(0, pathName.length()); - if(remainingPath.empty()) - { + if (remainingPath.empty()) { guidance = nullptr; } - else - { + else { std::size_t i = remainingPath.find('/'); - if(i == std::string::npos) - { + if (i == std::string::npos) { // Find command std::size_t n_commandEntry = command.size(); - for(std::size_t i_thCommand = 0; i_thCommand < n_commandEntry; ++i_thCommand) - { - if(remainingPath == command[i_thCommand]->GetCommandName()) - { + for (std::size_t i_thCommand = 0; i_thCommand < n_commandEntry; ++i_thCommand) { + if (remainingPath == command[i_thCommand]->GetCommandName()) { command.erase(command.begin() + i_thCommand); break; } } } - else - { + else { // Find path G4String nextPath = pathName; nextPath.append(remainingPath.substr(0, i + 1)); std::size_t n_treeEntry = tree.size(); - for(std::size_t i_thTree = 0; i_thTree < n_treeEntry; ++i_thTree) - { - if(nextPath == tree[i_thTree]->GetPathName()) - { + for (std::size_t i_thTree = 0; i_thTree < n_treeEntry; ++i_thTree) { + if (nextPath == tree[i_thTree]->GetPathName()) { tree[i_thTree]->RemoveCommand(aCommand); G4int n_commandRemain = tree[i_thTree]->GetCommandEntry(); - G4int n_treeRemain = tree[i_thTree]->GetTreeEntry(); - if(n_commandRemain == 0 && n_treeRemain == 0) - { + G4int n_treeRemain = tree[i_thTree]->GetTreeEntry(); + if (n_commandRemain == 0 && n_treeRemain == 0) { G4UIcommandTree* emptyTree = tree[i_thTree]; tree.erase(tree.begin() + i_thTree); delete emptyTree; @@ -230,34 +215,27 @@ G4UIcommand* G4UIcommandTree::FindPath(const char* commandPath) const // This function tries to match a command name G4String remainingPath = commandPath; - if(remainingPath.find(pathName) == std::string::npos) - { + if (remainingPath.find(pathName) == std::string::npos) { return nullptr; } remainingPath.erase(0, pathName.length()); std::size_t i = remainingPath.find('/'); - if(i == std::string::npos) - { + if (i == std::string::npos) { // Find command std::size_t n_commandEntry = command.size(); - for(std::size_t i_thCommand = 0; i_thCommand < n_commandEntry; ++i_thCommand) - { - if(remainingPath == command[i_thCommand]->GetCommandName()) - { + for (std::size_t i_thCommand = 0; i_thCommand < n_commandEntry; ++i_thCommand) { + if (remainingPath == command[i_thCommand]->GetCommandName()) { return command[i_thCommand]; } } } - else - { + else { // Find path G4String nextPath = pathName; nextPath.append(remainingPath.substr(0, i + 1)); std::size_t n_treeEntry = tree.size(); - for(std::size_t i_thTree = 0; i_thTree < n_treeEntry; ++i_thTree) - { - if(nextPath == tree[i_thTree]->GetPathName()) - { + for (std::size_t i_thTree = 0; i_thTree < n_treeEntry; ++i_thTree) { + if (nextPath == tree[i_thTree]->GetPathName()) { return tree[i_thTree]->FindPath(commandPath); } } @@ -273,32 +251,26 @@ G4UIcommandTree* G4UIcommandTree::FindCommandTree(const char* commandPath) // @return the commandTree found or nullptr if not G4String remainingPath = commandPath; - if(remainingPath.find(pathName) == std::string::npos) - { + if (remainingPath.find(pathName) == std::string::npos) { return nullptr; } remainingPath.erase(0, pathName.length()); std::size_t i = remainingPath.find('/'); - if(i != std::string::npos) - { + if (i != std::string::npos) { // Find path G4String nextPath = pathName; nextPath.append(remainingPath.substr(0, i + 1)); std::size_t n_treeEntry = tree.size(); - for(std::size_t i_thTree = 0; i_thTree < n_treeEntry; ++i_thTree) - { - if(tree[i_thTree]->GetPathName() == commandPath) - { + for (std::size_t i_thTree = 0; i_thTree < n_treeEntry; ++i_thTree) { + if (tree[i_thTree]->GetPathName() == commandPath) { return tree[i_thTree]; } - else if(nextPath == tree[i_thTree]->GetPathName()) - { + if (nextPath == tree[i_thTree]->GetPathName()) { return tree[i_thTree]->FindCommandTree(commandPath); } } } - else - { + else { return this; } return nullptr; @@ -307,26 +279,23 @@ G4UIcommandTree* G4UIcommandTree::FindCommandTree(const char* commandPath) // -------------------------------------------------------------------- G4String G4UIcommandTree::CompleteCommandPath(const G4String& aCommandPath) { - G4String pName = aCommandPath; + G4String pName = aCommandPath; G4String remainingPath = aCommandPath; - G4String empty = ""; - G4String matchingPath = empty; + G4String empty = ""; + G4String matchingPath = empty; // find the tree auto jpre = pName.rfind('/'); - if(jpre != G4String::npos) - { + if (jpre != G4String::npos) { pName.erase(jpre + 1); } G4UIcommandTree* aTree = FindCommandTree(pName); - if(aTree == nullptr) - { + if (aTree == nullptr) { return empty; } - if(pName.find(pName) == std::string::npos) - { + if (pName.find(pName) == std::string::npos) { return empty; } @@ -340,18 +309,14 @@ G4String G4UIcommandTree::CompleteCommandPath(const G4String& aCommandPath) G4int Ncmd = aTree->GetCommandEntry(); // directory ... - for(G4int idir = 1; idir <= Ndir; ++idir) - { + for (G4int idir = 1; idir <= Ndir; ++idir) { G4String fpdir = aTree->GetTree(idir)->GetPathName(); // matching test - if(fpdir.find(remainingPath, 0) == 0) - { - if(nMatch == 0) - { + if (fpdir.find(remainingPath, 0) == 0) { + if (nMatch == 0) { matchingPath = fpdir; } - else - { + else { matchingPath = GetFirstMatchedString(fpdir, matchingPath); } ++nMatch; @@ -359,11 +324,9 @@ G4String G4UIcommandTree::CompleteCommandPath(const G4String& aCommandPath) } } - if(paths.size() >= 2) - { + if (paths.size() >= 2) { G4cout << "Matching directories :" << G4endl; - for(const auto& path : paths) - { + for (const auto& path : paths) { G4cout << path << G4endl; } } @@ -371,20 +334,15 @@ G4String G4UIcommandTree::CompleteCommandPath(const G4String& aCommandPath) // command ... std::vector commands; - for(G4int icmd = 1; icmd <= Ncmd; ++icmd) - { - G4String fpcmd = - aTree->GetPathName() + aTree->GetCommand(icmd)->GetCommandName(); + for (G4int icmd = 1; icmd <= Ncmd; ++icmd) { + G4String fpcmd = aTree->GetPathName() + aTree->GetCommand(icmd)->GetCommandName(); // matching test - if(fpcmd.find(remainingPath, 0) == 0) - { - if(nMatch == 0) - { + if (fpcmd.find(remainingPath, 0) == 0) { + if (nMatch == 0) { matchingPath = fpcmd + " "; } - else - { - strtmp = fpcmd + " "; + else { + strtmp = fpcmd + " "; matchingPath = GetFirstMatchedString(matchingPath, strtmp); } nMatch++; @@ -392,11 +350,9 @@ G4String G4UIcommandTree::CompleteCommandPath(const G4String& aCommandPath) } } - if(commands.size() >= 2) - { + if (commands.size() >= 2) { G4cout << "Matching commands :" << G4endl; - for(const auto& matched : commands) - { + for (const auto& matched : commands) { G4cout << matched << G4endl; } } @@ -405,8 +361,7 @@ G4String G4UIcommandTree::CompleteCommandPath(const G4String& aCommandPath) } // -------------------------------------------------------------------- -G4String G4UIcommandTree::GetFirstMatchedString(const G4String& str1, - const G4String& str2) const +G4String G4UIcommandTree::GetFirstMatchedString(const G4String& str1, const G4String& str2) const { std::size_t nlen1 = str1.length(); std::size_t nlen2 = str2.length(); @@ -414,14 +369,11 @@ G4String G4UIcommandTree::GetFirstMatchedString(const G4String& str1, std::size_t nmin = nlen1 < nlen2 ? nlen1 : nlen2; G4String strMatched; - for(G4int i = 0; i < (G4int)nmin; ++i) - { - if(str1[i] == str2[i]) - { + for (G4int i = 0; i < (G4int)nmin; ++i) { + if (str1[i] == str2[i]) { strMatched += str1[i]; } - else - { + else { break; } } @@ -433,37 +385,31 @@ G4String G4UIcommandTree::GetFirstMatchedString(const G4String& str1, void G4UIcommandTree::ListCurrent() const { G4cout << "Command directory path : " << pathName << G4endl; - if(guidance != nullptr) - { + if (guidance != nullptr) { guidance->List(); } G4cout << " Sub-directories : " << G4endl; std::size_t n_treeEntry = tree.size(); - for(std::size_t i_thTree = 0; i_thTree < n_treeEntry; ++i_thTree) - { + for (std::size_t i_thTree = 0; i_thTree < n_treeEntry; ++i_thTree) { G4cout << " " << tree[i_thTree]->GetPathName(); - if((tree[i_thTree]->GetGuidance() != nullptr) && - tree[i_thTree]->GetGuidance()->IsWorkerThreadOnly()) + if ((tree[i_thTree]->GetGuidance() != nullptr) + && tree[i_thTree]->GetGuidance()->IsWorkerThreadOnly()) { G4cout << " @ "; } - else - { + else { G4cout << " "; } G4cout << tree[i_thTree]->GetTitle() << G4endl; } G4cout << " Commands : " << G4endl; std::size_t n_commandEntry = command.size(); - for(std::size_t i_thCommand = 0; i_thCommand < n_commandEntry; ++i_thCommand) - { + for (std::size_t i_thCommand = 0; i_thCommand < n_commandEntry; ++i_thCommand) { G4cout << " " << command[i_thCommand]->GetCommandName(); - if(command[i_thCommand]->IsWorkerThreadOnly()) - { + if (command[i_thCommand]->IsWorkerThreadOnly()) { G4cout << " @ "; } - else - { + else { G4cout << " * "; } G4cout << command[i_thCommand]->GetTitle() << G4endl; @@ -474,26 +420,23 @@ void G4UIcommandTree::ListCurrent() const void G4UIcommandTree::ListCurrentWithNum() const { G4cout << "Command directory path : " << pathName << G4endl; - if(guidance != nullptr) - { + if (guidance != nullptr) { guidance->List(); } G4int i = 0; G4cout << " Sub-directories : " << G4endl; std::size_t n_treeEntry = tree.size(); - for(std::size_t i_thTree = 0; i_thTree < n_treeEntry; ++i_thTree) - { + for (std::size_t i_thTree = 0; i_thTree < n_treeEntry; ++i_thTree) { ++i; G4cout << " " << i << ") " << tree[i_thTree]->GetPathName() << " " << tree[i_thTree]->GetTitle() << G4endl; } G4cout << " Commands : " << G4endl; std::size_t n_commandEntry = command.size(); - for(std::size_t i_thCommand = 0; i_thCommand < n_commandEntry; ++i_thCommand) - { + for (std::size_t i_thCommand = 0; i_thCommand < n_commandEntry; ++i_thCommand) { ++i; - G4cout << " " << i << ") " << command[i_thCommand]->GetCommandName() - << " * " << command[i_thCommand]->GetTitle() << G4endl; + G4cout << " " << i << ") " << command[i_thCommand]->GetCommandName() << " * " + << command[i_thCommand]->GetTitle() << G4endl; } } @@ -502,13 +445,11 @@ void G4UIcommandTree::List() const { ListCurrent(); std::size_t n_commandEntry = command.size(); - for(std::size_t i_thCommand = 0; i_thCommand < n_commandEntry; ++i_thCommand) - { + for (std::size_t i_thCommand = 0; i_thCommand < n_commandEntry; ++i_thCommand) { command[i_thCommand]->List(); } std::size_t n_treeEntry = tree.size(); - for(std::size_t i_thTree = 0; i_thTree < n_treeEntry; ++i_thTree) - { + for (std::size_t i_thTree = 0; i_thTree < n_treeEntry; ++i_thTree) { tree[i_thTree]->List(); } } @@ -518,8 +459,7 @@ G4String G4UIcommandTree::CreateFileName(const char* pName) { G4String fn = pName; std::size_t idxs; - while((idxs = fn.find("/")) != std::string::npos) - { + while ((idxs = fn.find('/')) != std::string::npos) { fn[(G4int)idxs] = '_'; } fn += ".html"; @@ -531,11 +471,9 @@ G4String G4UIcommandTree::ModStr(const char* strS) { G4String sx; G4String str = strS; - for(G4int i = 0; i < G4int(str.length()); ++i) - { + for (G4int i = 0; i < G4int(str.length()); ++i) { char c = str[i]; - switch(c) - { + switch (c) { case '<': sx += "<"; break; @@ -558,9 +496,8 @@ void G4UIcommandTree::CreateHTML(const G4String& sideBar) G4String ofileName = CreateFileName(pathName); std::ofstream oF(ofileName, std::ios::out); - oF << "Commands in " << ModStr(pathName) - << "" << G4endl; - oF << ""<< G4endl; + " + << G4endl; oF << "" << G4endl; - // Left Panel - if (createHTMLTreeLevel == 0 ) { + // Left Panel + if (createHTMLTreeLevel == 0) { oF << "
" << sideBar << "
" << G4endl; } // Right Panel oF << "
"; - oF << "

" << ModStr(pathName) << "

" << G4endl; + oF << "

" << ModStr(pathName) << "

" << G4endl; - if(guidance != nullptr) - { - for(G4int i = 0; i < (G4int)guidance->GetGuidanceEntries(); ++i) - { + if (guidance != nullptr) { + for (G4int i = 0; i < (G4int)guidance->GetGuidanceEntries(); ++i) { oF << ModStr(guidance->GetGuidanceLine(i)) << "
" << G4endl; } } - if(!tree.empty()) - { + if (!tree.empty()) { G4String menu = ""; G4String newSideBar = ""; menu += "

Sub-directories

"; - newSideBar += "

Top level

"; + newSideBar += "

Top level

"; // Build menu short version - for(auto& i_thTree : tree) - { - newSideBar += ""; } menu += "
GetPathName()) + "\">" + - ModStr(i_thTree->GetPathName()) + ""; + for (auto& i_thTree : tree) { + newSideBar += "
GetPathName()) + "\">" + + ModStr(i_thTree->GetPathName()) + ""; } // Build menu - for(auto& i_thTree : tree) - { - menu += "
GetPathName()) + - "\">" + ModStr(i_thTree->GetPathName()) + ""; + for (auto& i_thTree : tree) { + menu += "
GetPathName()) + "\">" + + ModStr(i_thTree->GetPathName()) + ""; menu += "" + ModStr(i_thTree->GetTitle()) + "
"; - newSideBar += ""; - for(auto& i_thTree : tree) - { - createHTMLTreeLevel ++; - i_thTree->CreateHTML(newSideBar); - createHTMLTreeLevel --; + newSideBar += ""; + for (auto& i_thTree : tree) { + createHTMLTreeLevel++; + i_thTree->CreateHTML(newSideBar); + createHTMLTreeLevel--; } oF << menu << G4endl; } - if(!command.empty()) - { + if (!command.empty()) { oF << "

Commands

" << G4endl; - + // resume oF << "" << G4endl; - for(std::size_t i_thCommand = 0; i_thCommand < command.size(); ++i_thCommand) - { + for (std::size_t i_thCommand = 0; i_thCommand < command.size(); ++i_thCommand) { G4UIcommand* cmd = command[i_thCommand]; - oF << "" << G4endl; } oF << "
"<< ModStr(cmd->GetCommandName()); + oF << "
" << ModStr(cmd->GetCommandName()); oF << "
" << G4endl; - for(std::size_t i_thCommand = 0; i_thCommand < command.size(); ++i_thCommand) - { + for (std::size_t i_thCommand = 0; i_thCommand < command.size(); ++i_thCommand) { G4UIcommand* cmd = command[i_thCommand]; oF << "

" << ModStr(cmd->GetCommandName()); - if(cmd->GetParameterEntries() > 0) - { - for(G4int i_thParam = 0; i_thParam < (G4int)cmd->GetParameterEntries(); - ++i_thParam) - { - oF << " [" - << ModStr(cmd->GetParameter(i_thParam)->GetParameterName()) - << "]"; + if (cmd->GetParameterEntries() > 0) { + for (G4int i_thParam = 0; i_thParam < (G4int)cmd->GetParameterEntries(); ++i_thParam) { + oF << " [" << ModStr(cmd->GetParameter(i_thParam)->GetParameterName()) << "]"; } } oF << "

" << G4endl; oF << "

" << G4endl; - for(G4int i = 0; i < (G4int)cmd->GetGuidanceEntries(); ++i) - { + for (G4int i = 0; i < (G4int)cmd->GetGuidanceEntries(); ++i) { oF << ModStr(cmd->GetGuidanceLine(i)) << "
" << G4endl; } - if(!(cmd->GetRange()).empty()) - { + if (!(cmd->GetRange()).empty()) { oF << "

Range : " << ModStr(cmd->GetRange()) << G4endl; } std::vector* availabelStateList = cmd->GetStateList(); - if(availabelStateList->size() == 6) - { + if (availabelStateList->size() == 6) { oF << "

Available at all Geant4 states." << G4endl; } - else - { + else { oF << "

Available Geant4 state(s) : "; - for(auto& ias : *availabelStateList) - { - oF << G4StateManager::GetStateManager()->GetStateString(ias) << " " - << G4endl; + for (auto& ias : *availabelStateList) { + oF << G4StateManager::GetStateManager()->GetStateString(ias) << " " << G4endl; } } - if(cmd->GetParameterEntries() > 0) - { + if (cmd->GetParameterEntries() > 0) { oF << "

Parameters" << G4endl; - for(G4int i_thParam = 0; i_thParam < (G4int)cmd->GetParameterEntries(); - ++i_thParam) - { + for (G4int i_thParam = 0; i_thParam < (G4int)cmd->GetParameterEntries(); ++i_thParam) { G4UIparameter* prm = cmd->GetParameter(i_thParam); oF << "
" << ModStr(prm->GetParameterName()) << G4endl; oF << "type " << prm->GetParameterType() << G4endl; oF << ""; - if(prm->IsOmittable()) - { + if (prm->IsOmittable()) { oF << "Omittable : "; - if(prm->GetCurrentAsDefault()) - { + if (prm->GetCurrentAsDefault()) { oF << "current value is used as the default value." << G4endl; } - else - { + else { oF << "default value = " << prm->GetDefaultValue() << G4endl; } } oF << ""; - if(!(prm->GetParameterRange()).empty()) - { - oF << "Parameter range : " << ModStr(prm->GetParameterRange()) - << G4endl; + if (!(prm->GetParameterRange()).empty()) { + oF << "Parameter range : " << ModStr(prm->GetParameterRange()) << G4endl; } - else if(!(prm->GetParameterCandidates()).empty()) - { - oF << "Parameter candidates : " - << ModStr(prm->GetParameterCandidates()) << G4endl; + else if (!(prm->GetParameterCandidates()).empty()) { + oF << "Parameter candidates : " << ModStr(prm->GetParameterCandidates()) << G4endl; } } oF << "
" << G4endl; @@ -774,10 +681,8 @@ void G4UIcommandTree::CreateHTML(const G4String& sideBar) G4UIcommandTree* G4UIcommandTree::GetTree(const char* comNameC) { G4String comName = comNameC; - for(auto& i : tree) - { - if(comName == i->GetPathName()) - { + for (auto& i : tree) { + if (comName == i->GetPathName()) { return i; } } diff --git a/source/intercoms/src/G4UIcontrolMessenger.cc b/source/intercoms/src/G4UIcontrolMessenger.cc index bfb80c8950e..b9d47620140 100644 --- a/source/intercoms/src/G4UIcontrolMessenger.cc +++ b/source/intercoms/src/G4UIcontrolMessenger.cc @@ -28,23 +28,24 @@ // Author: Makoto Asai, SLAC - 2001 // -------------------------------------------------------------------- -#include #include "G4UIcontrolMessenger.hh" -#include "G4UImanager.hh" -#include "G4UIdirectory.hh" -#include "G4UIcommand.hh" -#include "G4UIparameter.hh" -#include "G4UIcmdWithAString.hh" + +#include "G4StateManager.hh" +#include "G4Tokenizer.hh" +#include "G4UIaliasList.hh" #include "G4UIcmdWithABool.hh" +#include "G4UIcmdWithAString.hh" #include "G4UIcmdWithAnInteger.hh" #include "G4UIcmdWithoutParameter.hh" -#include "G4UIaliasList.hh" -#include "G4StateManager.hh" +#include "G4UIcommand.hh" +#include "G4UIdirectory.hh" +#include "G4UImanager.hh" +#include "G4UIparameter.hh" #include "G4UIsession.hh" -#include "G4Tokenizer.hh" - #include "G4ios.hh" +#include + // -------------------------------------------------------------------- G4UIcontrolMessenger::G4UIcontrolMessenger() { @@ -52,8 +53,9 @@ G4UIcontrolMessenger::G4UIcontrolMessenger() controlDirectory->SetGuidance("UI control commands."); macroPathCommand = new G4UIcmdWithAString("/control/macroPath", this); - macroPathCommand->SetGuidance("Set macro search path" - " with colon-separated list."); + macroPathCommand->SetGuidance( + "Set macro search path" + " with colon-separated list."); macroPathCommand->SetParameterName("path", false); ExecuteCommand = new G4UIcmdWithAString("/control/execute", this); @@ -79,8 +81,7 @@ G4UIcontrolMessenger::G4UIcontrolMessenger() foreachCommand = new G4UIcommand("/control/foreach", this); foreachCommand->SetGuidance("Execute a macro file more than once."); - foreachCommand->SetGuidance( - "Loop counter can be used as an aliased variable."); + foreachCommand->SetGuidance("Loop counter can be used as an aliased variable."); foreachCommand->SetGuidance("Values must be separated by a space."); auto* param6 = new G4UIparameter("macroFile", 's', false); foreachCommand->SetParameter(param6); @@ -90,14 +91,10 @@ G4UIcontrolMessenger::G4UIcontrolMessenger() foreachCommand->SetParameter(param8); foreachCommand->SetToBeBroadcasted(false); - suppressAbortionCommand = - new G4UIcmdWithAnInteger("/control/suppressAbortion", this); - suppressAbortionCommand->SetGuidance( - "Suppress the program abortion caused by G4Exception."); - suppressAbortionCommand->SetGuidance( - "Suppression level = 0 : no suppression"); - suppressAbortionCommand->SetGuidance( - " = 1 : suppress during EventProc state"); + suppressAbortionCommand = new G4UIcmdWithAnInteger("/control/suppressAbortion", this); + suppressAbortionCommand->SetGuidance("Suppress the program abortion caused by G4Exception."); + suppressAbortionCommand->SetGuidance("Suppression level = 0 : no suppression"); + suppressAbortionCommand->SetGuidance(" = 1 : suppress during EventProc state"); suppressAbortionCommand->SetGuidance( " = 2 : full suppression, i.e. no abortion by " "G4Exception"); @@ -134,8 +131,7 @@ G4UIcontrolMessenger::G4UIcontrolMessenger() historyCommand->SetDefaultValue("G4History.macro"); historyCommand->SetToBeBroadcasted(false); - stopStoreHistoryCommand = - new G4UIcmdWithoutParameter("/control/stopSavingHistory", this); + stopStoreHistoryCommand = new G4UIcmdWithoutParameter("/control/stopSavingHistory", this); stopStoreHistoryCommand->SetGuidance("Stop saving history file."); stopStoreHistoryCommand->SetToBeBroadcasted(false); @@ -143,8 +139,7 @@ G4UIcontrolMessenger::G4UIcontrolMessenger() aliasCommand->SetGuidance("Set an alias."); aliasCommand->SetGuidance("String can be aliased by this command."); aliasCommand->SetGuidance("The string may contain one or more spaces,"); - aliasCommand->SetGuidance( - "the string must be enclosed by double quotes (\")."); + aliasCommand->SetGuidance("the string must be enclosed by double quotes (\")."); aliasCommand->SetGuidance("To use an alias, enclose the alias name with"); aliasCommand->SetGuidance("parenthesis \"{\" and \"}\"."); auto* aliasNameParam = new G4UIparameter("aliasName", 's', false); @@ -160,13 +155,11 @@ G4UIcontrolMessenger::G4UIcontrolMessenger() listAliasCommand->SetGuidance("List aliases."); getEnvCmd = new G4UIcmdWithAString("/control/getEnv", this); - getEnvCmd->SetGuidance( - "Get a shell environment variable and define it as an alias."); + getEnvCmd->SetGuidance("Get a shell environment variable and define it as an alias."); getEnvCmd->SetToBeBroadcasted(false); getValCmd = new G4UIcommand("/control/getVal", this); - getValCmd->SetGuidance( - "Get the current value of the UI command and define it as an alias."); + getValCmd->SetGuidance("Get the current value of the UI command and define it as an alias."); getValCmd->SetGuidance( "Command is ignored if the UI command does not support GetCurrentValue()."); getValCmd->SetGuidance(" Syntax : "); @@ -195,17 +188,14 @@ G4UIcontrolMessenger::G4UIcontrolMessenger() ManualCommand->SetToBeBroadcasted(false); HTMLCommand = new G4UIcmdWithAString("/control/createHTML", this); - HTMLCommand->SetGuidance( - "Generate HTML files for all of sub-directories and commands."); + HTMLCommand->SetGuidance("Generate HTML files for all of sub-directories and commands."); HTMLCommand->SetGuidance("Directory path should be given by FULL-PATH."); HTMLCommand->SetParameterName("dirPath", true); HTMLCommand->SetDefaultValue("/"); HTMLCommand->SetToBeBroadcasted(false); - maxStoredHistCommand = - new G4UIcmdWithAnInteger("/control/maximumStoredHistory", this); - maxStoredHistCommand->SetGuidance( - "Set maximum number of stored UI commands."); + maxStoredHistCommand = new G4UIcmdWithAnInteger("/control/maximumStoredHistory", this); + maxStoredHistCommand->SetGuidance("Set maximum number of stored UI commands."); maxStoredHistCommand->SetParameterName("max", true); maxStoredHistCommand->SetDefaultValue(20); @@ -240,8 +230,7 @@ G4UIcontrolMessenger::G4UIcontrolMessenger() addCommand = new G4UIcommand("/control/add", this); addCommand->SetGuidance("Define a new alias as the sum of two values."); addCommand->SetGuidance(" Syntax : "); - addCommand->SetGuidance( - " may be an already existing alias. If it is the case,"); + addCommand->SetGuidance(" may be an already existing alias. If it is the case,"); addCommand->SetGuidance(" aliased value is alternated."); auto* newAlias1 = new G4UIparameter("new_alias", 's', false); addCommand->SetParameter(newAlias1); @@ -252,11 +241,9 @@ G4UIcontrolMessenger::G4UIcontrolMessenger() addCommand->SetToBeBroadcasted(false); subtractCommand = new G4UIcommand("/control/subtract", this); - subtractCommand->SetGuidance( - "Define a new alias as the subtraction of two values."); + subtractCommand->SetGuidance("Define a new alias as the subtraction of two values."); subtractCommand->SetGuidance(" Syntax : "); - subtractCommand->SetGuidance( - " may be an already existing alias. If it is the case,"); + subtractCommand->SetGuidance(" may be an already existing alias. If it is the case,"); subtractCommand->SetGuidance(" aliased value is alternated."); auto* newAlias2 = new G4UIparameter("new_alias", 's', false); subtractCommand->SetParameter(newAlias2); @@ -267,11 +254,9 @@ G4UIcontrolMessenger::G4UIcontrolMessenger() subtractCommand->SetToBeBroadcasted(false); multiplyCommand = new G4UIcommand("/control/multiply", this); - multiplyCommand->SetGuidance( - "Define a new alias as the multiplication of two values."); + multiplyCommand->SetGuidance("Define a new alias as the multiplication of two values."); multiplyCommand->SetGuidance(" Syntax : "); - multiplyCommand->SetGuidance( - " may be an already existing alias. If it is the case,"); + multiplyCommand->SetGuidance(" may be an already existing alias. If it is the case,"); multiplyCommand->SetGuidance(" aliased value is alternated."); auto* newAlias3 = new G4UIparameter("new_alias", 's', false); multiplyCommand->SetParameter(newAlias3); @@ -282,11 +267,9 @@ G4UIcontrolMessenger::G4UIcontrolMessenger() multiplyCommand->SetToBeBroadcasted(false); divideCommand = new G4UIcommand("/control/divide", this); - divideCommand->SetGuidance( - "Define a new alias as the division of two values."); + divideCommand->SetGuidance("Define a new alias as the division of two values."); divideCommand->SetGuidance(" Syntax : "); - divideCommand->SetGuidance( - " may be an already existing alias. If it is the case,"); + divideCommand->SetGuidance(" may be an already existing alias. If it is the case,"); divideCommand->SetGuidance(" aliased value is alternated."); auto* newAlias4 = new G4UIparameter("new_alias", 's', false); divideCommand->SetParameter(newAlias4); @@ -298,8 +281,7 @@ G4UIcontrolMessenger::G4UIcontrolMessenger() divideCommand->SetToBeBroadcasted(false); remainderCommand = new G4UIcommand("/control/remainder", this); - remainderCommand->SetGuidance( - "Define a new alias as the remainder of two values."); + remainderCommand->SetGuidance("Define a new alias as the remainder of two values."); remainderCommand->SetGuidance(" Syntax : "); remainderCommand->SetGuidance( " may be an already existing alias. If it is the case,"); @@ -328,10 +310,8 @@ G4UIcontrolMessenger::G4UIcontrolMessenger() strifCommand->SetToBeBroadcasted(false); strdoifCommand = new G4UIcommand("/control/strdoif", this); - strdoifCommand->SetGuidance( - "Execute a UI command if the expression is true."); - strdoifCommand->SetGuidance( - " Syntax : "); + strdoifCommand->SetGuidance("Execute a UI command if the expression is true."); + strdoifCommand->SetGuidance(" Syntax : "); auto* strdoleftParam = new G4UIparameter("left", 's', false); strdoifCommand->SetParameter(strdoleftParam); auto* strdocompParam = new G4UIparameter("comp", 's', false); @@ -344,8 +324,7 @@ G4UIcontrolMessenger::G4UIcontrolMessenger() strdoifCommand->SetToBeBroadcasted(false); ifBatchCommand = new G4UIcmdWithAString("/control/ifBatch", this); - ifBatchCommand->SetGuidance( - "Execute a macro file if program is running in batch mode."); + ifBatchCommand->SetGuidance("Execute a macro file if program is running in batch mode."); ifBatchCommand->SetParameterName("macroFile", false); ifBatchCommand->SetToBeBroadcasted(false); @@ -356,13 +335,11 @@ G4UIcontrolMessenger::G4UIcontrolMessenger() ifInteractiveCommand->SetToBeBroadcasted(false); doifBatchCommand = new G4UIcmdWithAString("/control/doifBatch", this); - doifBatchCommand->SetGuidance( - "Execute a UI command if program is running in batch mode."); + doifBatchCommand->SetGuidance("Execute a UI command if program is running in batch mode."); doifBatchCommand->SetParameterName("UIcommand", false); doifBatchCommand->SetToBeBroadcasted(false); - doifInteractiveCommand = - new G4UIcmdWithAString("/control/doifInteractive", this); + doifInteractiveCommand = new G4UIcmdWithAString("/control/doifInteractive", this); doifInteractiveCommand->SetGuidance( "Execute a UI command if program is running in interactive mode."); doifInteractiveCommand->SetParameterName("UIcommand", false); @@ -412,94 +389,73 @@ void G4UIcontrolMessenger::SetNewValue(G4UIcommand* command, G4String newValue) { G4UImanager* UI = G4UImanager::GetUIpointer(); - if(command == macroPathCommand) - { + if (command == macroPathCommand) { UI->SetMacroSearchPath(newValue); UI->ParseMacroSearchPath(); } - if(command == ExecuteCommand) - { + if (command == ExecuteCommand) { command->ResetFailure(); UI->ExecuteMacroFile(UI->FindMacroPath(newValue)); - if(UI->GetLastReturnCode() != 0) - { + if (UI->GetLastReturnCode() != 0) { G4ExceptionDescription ed; ed << "Command aborted (" << UI->GetLastReturnCode() << ")"; command->CommandFailed(UI->GetLastReturnCode(), ed); } } - if(command == suppressAbortionCommand) - { + if (command == suppressAbortionCommand) { G4StateManager::GetStateManager()->SetSuppressAbortion( suppressAbortionCommand->GetNewIntValue(newValue)); } - if(command == verboseCommand) - { + if (command == verboseCommand) { UI->SetVerboseLevel(verboseCommand->GetNewIntValue(newValue)); } - if(command == doublePrecCommand) - { - G4UImanager::UseDoublePrecisionStr( - doublePrecCommand->GetNewBoolValue(newValue)); + if (command == doublePrecCommand) { + G4UImanager::UseDoublePrecisionStr(doublePrecCommand->GetNewBoolValue(newValue)); } - if(command == historyCommand) - { + if (command == historyCommand) { UI->StoreHistory(newValue); } - if(command == stopStoreHistoryCommand) - { + if (command == stopStoreHistoryCommand) { UI->StoreHistory(false); } - if(command == ManualCommand) - { + if (command == ManualCommand) { UI->ListCommands(newValue); } - if(command == aliasCommand) - { + if (command == aliasCommand) { UI->SetAlias(newValue); } - if(command == unaliasCommand) - { + if (command == unaliasCommand) { UI->RemoveAlias(newValue); } - if(command == listAliasCommand) - { + if (command == listAliasCommand) { UI->ListAlias(); } - if(command == getEnvCmd) - { + if (command == getEnvCmd) { command->ResetFailure(); - if(std::getenv(newValue) != nullptr) - { + if (std::getenv(newValue) != nullptr) { G4String st = newValue; st += " "; st += std::getenv(newValue); UI->SetAlias(st.c_str()); } - else - { + else { G4ExceptionDescription ed; - ed << "<" << newValue - << "> is not defined as a shell variable. Command ignored."; + ed << "<" << newValue << "> is not defined as a shell variable. Command ignored."; command->CommandFailed(ed); } } - if(command == getValCmd) - { + if (command == getValCmd) { G4Tokenizer next(newValue); G4String aliName = next(); - G4String com = next(); - G4String curVal = UI->GetCurrentValues(com); - if(!(curVal.empty())) - { + G4String com = next(); + G4String curVal = UI->GetCurrentValues(com); + if (!(curVal.empty())) { G4String theValue = curVal; - G4String iIdx = next(); - if(!(iIdx.empty())) - { + G4String iIdx = next(); + if (!(iIdx.empty())) { G4int idx = StoI(iIdx); G4Tokenizer nextVal(curVal); - for(G4int i = 0; i <= idx; i++) - { + for (G4int i = 0; i <= idx; i++) { theValue = nextVal(); } } @@ -508,295 +464,240 @@ void G4UIcontrolMessenger::SetNewValue(G4UIcommand* command, G4String newValue) UI->ApplyCommand(st); } } - if(command == echoCmd) - { + if (command == echoCmd) { G4cout << UI->SolveAlias(newValue) << G4endl; } - if(command == shellCommand) - { + if (command == shellCommand) { command->ResetFailure(); int rc = system(newValue); - if(rc < 0) - { + if (rc < 0) { G4ExceptionDescription ed; - ed << "<" << newValue - << "> is not a valid shell command. Command ignored."; + ed << "<" << newValue << "> is not a valid shell command. Command ignored."; command->CommandFailed(ed); } } - if(command == loopCommand) - { + if (command == loopCommand) { command->ResetFailure(); UI->LoopS(newValue); - if(UI->GetLastReturnCode() != 0) - { + if (UI->GetLastReturnCode() != 0) { G4ExceptionDescription ed; ed << "Command aborted (" << UI->GetLastReturnCode() << ")"; command->CommandFailed(UI->GetLastReturnCode(), ed); } } - if(command == foreachCommand) - { + if (command == foreachCommand) { command->ResetFailure(); UI->ForeachS(newValue); - if(UI->GetLastReturnCode() != 0) - { + if (UI->GetLastReturnCode() != 0) { G4ExceptionDescription ed; ed << "Command aborted (" << UI->GetLastReturnCode() << ")"; command->CommandFailed(UI->GetLastReturnCode(), ed); } } - if(command == HTMLCommand) - { + if (command == HTMLCommand) { UI->CreateHTML(newValue); } - if(command == maxStoredHistCommand) - { + if (command == maxStoredHistCommand) { UI->SetMaxHistSize(maxStoredHistCommand->GetNewIntValue(newValue)); } - if(command == ifCommand) - { + if (command == ifCommand) { G4Tokenizer next(newValue); - G4double l = StoD(next()); + G4double l = StoD(next()); G4String comp = next(); - G4double r = StoD(next()); - G4String mac = next(); - G4bool x = false; - if(comp == ">") - { + G4double r = StoD(next()); + G4String mac = next(); + G4bool x = false; + if (comp == ">") { x = (l > r); } - else if(comp == ">=") - { + else if (comp == ">=") { x = (l >= r); } - else if(comp == "<") - { + else if (comp == "<") { x = (l < r); } - else if(comp == "<=") - { + else if (comp == "<=") { x = (l <= r); } - else if(comp == "==") - { + else if (comp == "==") { x = (l == r); } - else if(comp == "!=") - { + else if (comp == "!=") { x = (l != r); } - if(x) - { + if (x) { UI->ExecuteMacroFile(UI->FindMacroPath(mac)); } } - if(command == doifCommand) - { + if (command == doifCommand) { G4Tokenizer next(newValue); - G4double l = StoD(next()); + G4double l = StoD(next()); G4String comp = next(); - G4double r = StoD(next()); + G4double r = StoD(next()); G4String c1 = next(); G4String ca; - while(!((ca = next()).empty())) - { + while (!((ca = next()).empty())) { c1 += " "; c1 += ca; } - if(c1[0] == '"') - { + if (c1[0] == '"') { G4String strippedValue; - if(c1.back() == '"') - { + if (c1.back() == '"') { strippedValue = c1.substr(1, c1.length() - 2); } - else - { + else { strippedValue = c1.substr(1, c1.length() - 1); } c1 = strippedValue; } G4bool x = false; - if(comp == ">") - { + if (comp == ">") { x = (l > r); } - else if(comp == ">=") - { + else if (comp == ">=") { x = (l >= r); } - else if(comp == "<") - { + else if (comp == "<") { x = (l < r); } - else if(comp == "<=") - { + else if (comp == "<=") { x = (l <= r); } - else if(comp == "==") - { + else if (comp == "==") { x = (l == r); } - else if(comp == "!=") - { + else if (comp == "!=") { x = (l != r); } - if(x) - { + if (x) { UI->ApplyCommand(c1); } } - if(command == addCommand) - { + if (command == addCommand) { G4Tokenizer next(newValue); G4String newA = next(); - G4double l = StoD(next()); - G4double r = StoD(next()); - G4String st = "/control/alias "; + G4double l = StoD(next()); + G4double r = StoD(next()); + G4String st = "/control/alias "; st += newA; st += " "; st += DtoS(l + r); UI->ApplyCommand(st); } - if(command == subtractCommand) - { + if (command == subtractCommand) { G4Tokenizer next(newValue); G4String newA = next(); - G4double l = StoD(next()); - G4double r = StoD(next()); - G4String st = "/control/alias "; + G4double l = StoD(next()); + G4double r = StoD(next()); + G4String st = "/control/alias "; st += newA; st += " "; st += DtoS(l - r); UI->ApplyCommand(st); } - if(command == multiplyCommand) - { + if (command == multiplyCommand) { G4Tokenizer next(newValue); G4String newA = next(); - G4double l = StoD(next()); - G4double r = StoD(next()); - G4String st = "/control/alias "; + G4double l = StoD(next()); + G4double r = StoD(next()); + G4String st = "/control/alias "; st += newA; st += " "; st += DtoS(l * r); UI->ApplyCommand(st); } - if(command == divideCommand) - { + if (command == divideCommand) { G4Tokenizer next(newValue); G4String newA = next(); - G4double l = StoD(next()); - G4double r = StoD(next()); - G4String st = "/control/alias "; + G4double l = StoD(next()); + G4double r = StoD(next()); + G4String st = "/control/alias "; st += newA; st += " "; st += DtoS(l / r); UI->ApplyCommand(st); } - if(command == remainderCommand) - { + if (command == remainderCommand) { G4Tokenizer next(newValue); G4String newA = next(); - G4int l = StoI(next()); - G4int r = StoI(next()); - G4String st = "/control/alias "; + G4int l = StoI(next()); + G4int r = StoI(next()); + G4String st = "/control/alias "; st += newA; st += " "; st += DtoS(l % r); UI->ApplyCommand(st); } - if(command == strifCommand) - { + if (command == strifCommand) { G4Tokenizer next(newValue); - G4String l = next(); + G4String l = next(); G4String comp = next(); - G4String r = next(); - G4String mac = next(); - G4bool x = false; - if(comp == "==") - { + G4String r = next(); + G4String mac = next(); + G4bool x = false; + if (comp == "==") { x = (l == r); } - else if(comp == "!=") - { + else if (comp == "!=") { x = (l != r); } - if(x) - { + if (x) { UI->ExecuteMacroFile(UI->FindMacroPath(mac)); } } - if(command == strdoifCommand) - { + if (command == strdoifCommand) { G4Tokenizer next(newValue); - G4String l = next(); + G4String l = next(); G4String comp = next(); - G4String r = next(); + G4String r = next(); G4String c1 = next(); G4String ca; - while(!((ca = next()).empty())) - { + while (!((ca = next()).empty())) { c1 += " "; c1 += ca; } - if(c1[0] == '"') - { + if (c1[0] == '"') { G4String strippedValue; - if(c1.back() == '"') - { + if (c1.back() == '"') { strippedValue = c1.substr(1, c1.length() - 2); } - else - { + else { strippedValue = c1.substr(1, c1.length() - 1); } c1 = strippedValue; } G4bool x = false; - if(comp == "==") - { + if (comp == "==") { x = (l == r); } - else if(comp == "!=") - { + else if (comp == "!=") { x = (l != r); } - if(x) - { + if (x) { UI->ApplyCommand(c1); } } - if(command == ifBatchCommand) - { - if(G4UIsession::InSession() == 0) - { + if (command == ifBatchCommand) { + if (G4UIsession::InSession() == 0) { UI->ExecuteMacroFile(UI->FindMacroPath(newValue)); } } - if(command == ifInteractiveCommand) - { - if(G4UIsession::InSession() > 0) - { + if (command == ifInteractiveCommand) { + if (G4UIsession::InSession() > 0) { UI->ExecuteMacroFile(UI->FindMacroPath(newValue)); } } - if(command == doifBatchCommand) - { - if(G4UIsession::InSession() == 0) - { + if (command == doifBatchCommand) { + if (G4UIsession::InSession() == 0) { UI->ApplyCommand(newValue); } } - if(command == doifInteractiveCommand) - { - if(G4UIsession::InSession() > 0) - { + if (command == doifInteractiveCommand) { + if (G4UIsession::InSession() > 0) { UI->ApplyCommand(newValue); } } @@ -808,26 +709,20 @@ G4String G4UIcontrolMessenger::GetCurrentValue(G4UIcommand* command) G4UImanager* UI = G4UImanager::GetUIpointer(); G4String currentValue; - if(command == macroPathCommand) - { + if (command == macroPathCommand) { currentValue = UI->GetMacroSearchPath(); } - if(command == verboseCommand) - { + if (command == verboseCommand) { currentValue = verboseCommand->ConvertToString(UI->GetVerboseLevel()); } - if(command == doublePrecCommand) - { - currentValue = - doublePrecCommand->ConvertToString(G4UImanager::DoublePrecisionStr()); + if (command == doublePrecCommand) { + currentValue = doublePrecCommand->ConvertToString(G4UImanager::DoublePrecisionStr()); } - if(command == suppressAbortionCommand) - { + if (command == suppressAbortionCommand) { currentValue = suppressAbortionCommand->ConvertToString( G4StateManager::GetStateManager()->GetSuppressAbortion()); } - if(command == maxStoredHistCommand) - { + if (command == maxStoredHistCommand) { currentValue = maxStoredHistCommand->ConvertToString(UI->GetMaxHistSize()); } diff --git a/source/intercoms/src/G4UIdirectory.cc b/source/intercoms/src/G4UIdirectory.cc index 2748f3e65c2..c3cb36b2df0 100644 --- a/source/intercoms/src/G4UIdirectory.cc +++ b/source/intercoms/src/G4UIdirectory.cc @@ -31,16 +31,14 @@ #include "G4UIdirectory.hh" // -------------------------------------------------------------------- -G4UIdirectory::G4UIdirectory(char* theCommandPath, - G4bool commandsToBeBroadcasted) +G4UIdirectory::G4UIdirectory(char* theCommandPath, G4bool commandsToBeBroadcasted) : G4UIcommand(theCommandPath, nullptr, commandsToBeBroadcasted) { SetCommandType(CmdDirectory); } // -------------------------------------------------------------------- -G4UIdirectory::G4UIdirectory(const char* theCommandPath, - G4bool commandsToBeBroadcasted) +G4UIdirectory::G4UIdirectory(const char* theCommandPath, G4bool commandsToBeBroadcasted) : G4UIcommand(theCommandPath, nullptr, commandsToBeBroadcasted) { SetCommandType(CmdDirectory); diff --git a/source/intercoms/src/G4UImanager.cc b/source/intercoms/src/G4UImanager.cc index d7173fd55a0..6ab6c9082ad 100644 --- a/source/intercoms/src/G4UImanager.cc +++ b/source/intercoms/src/G4UImanager.cc @@ -29,25 +29,25 @@ // -------------------------------------------------------------------- #include "G4UImanager.hh" -#include "G4UIcommandTree.hh" -#include "G4UIcommand.hh" -#include "G4UIsession.hh" -#include "G4UIbatch.hh" -#include "G4UIcontrolMessenger.hh" -#include "G4UnitsMessenger.hh" + #include "G4LocalThreadCoutMessenger.hh" +#include "G4MTcoutDestination.hh" #include "G4ProfilerMessenger.hh" -#include "G4ios.hh" -#include "G4strstreambuf.hh" #include "G4StateManager.hh" -#include "G4UIaliasList.hh" +#include "G4Threading.hh" #include "G4Tokenizer.hh" -#include "G4MTcoutDestination.hh" +#include "G4UIaliasList.hh" +#include "G4UIbatch.hh" #include "G4UIbridge.hh" -#include "G4Threading.hh" +#include "G4UIcommand.hh" +#include "G4UIcommandTree.hh" +#include "G4UIcontrolMessenger.hh" +#include "G4UIsession.hh" +#include "G4UnitsMessenger.hh" +#include "G4ios.hh" -#include #include +#include G4bool G4UImanager::doublePrecisionStr = false; G4int G4UImanager::igThreadID = -1; @@ -76,10 +76,8 @@ G4UImanager*& G4UImanager::fMasterUImanager() // -------------------------------------------------------------------- G4UImanager* G4UImanager::GetUIpointer() { - if(fUImanager() == nullptr) - { - if(!fUImanagerHasBeenKilled()) - { + if (fUImanager() == nullptr) { + if (!fUImanagerHasBeenKilled()) { fUImanager() = new G4UImanager; fUImanager()->CreateMessenger(); } @@ -94,11 +92,10 @@ G4UImanager* G4UImanager::GetMasterUIpointer() } // -------------------------------------------------------------------- -G4UImanager::G4UImanager() - : G4VStateDependent(true) +G4UImanager::G4UImanager() : G4VStateDependent(true) { - treeTop = new G4UIcommandTree("/"); - aliasList = new G4UIaliasList; + treeTop = new G4UIcommandTree("/"); + aliasList = new G4UIaliasList; SetCoutDestination(session); commandStack = new std::vector; } @@ -106,27 +103,24 @@ G4UImanager::G4UImanager() // -------------------------------------------------------------------- void G4UImanager::CreateMessenger() { - UImessenger = new G4UIcontrolMessenger; - UnitsMessenger = new G4UnitsMessenger; - CoutMessenger = new G4LocalThreadCoutMessenger; + UImessenger = new G4UIcontrolMessenger; + UnitsMessenger = new G4UnitsMessenger; + CoutMessenger = new G4LocalThreadCoutMessenger; ProfileMessenger = new G4ProfilerMessenger; } // -------------------------------------------------------------------- G4UImanager::~G4UImanager() { - if(bridges != nullptr) - { - for(auto bridge : *bridges) - { + if (bridges != nullptr) { + for (auto bridge : *bridges) { delete bridge; } delete bridges; } SetCoutDestination(nullptr); histVec.clear(); - if(saveHistory) - { + if (saveHistory) { historyFile.close(); } delete CoutMessenger; @@ -136,14 +130,12 @@ G4UImanager::~G4UImanager() delete treeTop; delete aliasList; fUImanagerHasBeenKilled() = true; - fUImanager() = nullptr; - if(commandStack != nullptr) - { + fUImanager() = nullptr; + if (commandStack != nullptr) { commandStack->clear(); delete commandStack; } - if(threadID >= 0) - { + if (threadID >= 0) { delete threadCout; G4iosFinalization(); threadID = -1; @@ -166,9 +158,8 @@ G4bool G4UImanager::DoublePrecisionStr() G4String G4UImanager::GetCurrentValues(const char* aCommand) { G4String theCommand = aCommand; - savedCommand = treeTop->FindPath(theCommand); - if(savedCommand == nullptr) - { + savedCommand = treeTop->FindPath(theCommand); + if (savedCommand == nullptr) { G4cerr << "command not found" << G4endl; return G4String(); } @@ -176,24 +167,20 @@ G4String G4UImanager::GetCurrentValues(const char* aCommand) } // -------------------------------------------------------------------- -G4String G4UImanager::GetCurrentStringValue(const char* aCommand, - G4int parameterNumber, G4bool reGet) +G4String G4UImanager::GetCurrentStringValue(const char* aCommand, G4int parameterNumber, + G4bool reGet) { - if(reGet || savedCommand == nullptr) - { + if (reGet || savedCommand == nullptr) { savedParameters = GetCurrentValues(aCommand); } G4Tokenizer savedToken(savedParameters); G4String token; - for(G4int i_thParameter = 0; i_thParameter < parameterNumber; ++i_thParameter) - { + for (G4int i_thParameter = 0; i_thParameter < parameterNumber; ++i_thParameter) { token = savedToken(); - if(token.empty()) - { + if (token.empty()) { return G4String(); } - if(token[(size_t) 0] == '"') - { + if (token[(size_t)0] == '"') { token.append(" "); token.append(savedToken("\"")); } @@ -202,18 +189,14 @@ G4String G4UImanager::GetCurrentStringValue(const char* aCommand, } // -------------------------------------------------------------------- -G4String G4UImanager::GetCurrentStringValue(const char* aCommand, - const char* aParameterName, +G4String G4UImanager::GetCurrentStringValue(const char* aCommand, const char* aParameterName, G4bool reGet) { - if(reGet || savedCommand == nullptr) - { + if (reGet || savedCommand == nullptr) { G4String parameterValues = GetCurrentValues(aCommand); } - for(G4int i = 0; i < (G4int)savedCommand->GetParameterEntries(); ++i) - { - if(aParameterName == savedCommand->GetParameter(i)->GetParameterName()) - { + for (G4int i = 0; i < (G4int)savedCommand->GetParameterEntries(); ++i) { + if (aParameterName == savedCommand->GetParameter(i)->GetParameterName()) { return GetCurrentStringValue(aCommand, i + 1, false); } } @@ -221,11 +204,10 @@ G4String G4UImanager::GetCurrentStringValue(const char* aCommand, } // -------------------------------------------------------------------- -G4int G4UImanager::GetCurrentIntValue(const char* aCommand, - const char* aParameterName, G4bool reGet) +G4int G4UImanager::GetCurrentIntValue(const char* aCommand, const char* aParameterName, + G4bool reGet) { - G4String targetParameter = - GetCurrentStringValue(aCommand, aParameterName, reGet); + G4String targetParameter = GetCurrentStringValue(aCommand, aParameterName, reGet); G4int value; const char* t = targetParameter; std::istringstream is(t); @@ -234,11 +216,9 @@ G4int G4UImanager::GetCurrentIntValue(const char* aCommand, } // -------------------------------------------------------------------- -G4int G4UImanager::GetCurrentIntValue(const char* aCommand, - G4int parameterNumber, G4bool reGet) +G4int G4UImanager::GetCurrentIntValue(const char* aCommand, G4int parameterNumber, G4bool reGet) { - G4String targetParameter = - GetCurrentStringValue(aCommand, parameterNumber, reGet); + G4String targetParameter = GetCurrentStringValue(aCommand, parameterNumber, reGet); G4int value; const char* t = targetParameter; std::istringstream is(t); @@ -247,12 +227,10 @@ G4int G4UImanager::GetCurrentIntValue(const char* aCommand, } // -------------------------------------------------------------------- -G4double G4UImanager::GetCurrentDoubleValue(const char* aCommand, - const char* aParameterName, +G4double G4UImanager::GetCurrentDoubleValue(const char* aCommand, const char* aParameterName, G4bool reGet) { - G4String targetParameter = - GetCurrentStringValue(aCommand, aParameterName, reGet); + G4String targetParameter = GetCurrentStringValue(aCommand, aParameterName, reGet); G4double value; const char* t = targetParameter; std::istringstream is(t); @@ -261,11 +239,10 @@ G4double G4UImanager::GetCurrentDoubleValue(const char* aCommand, } // -------------------------------------------------------------------- -G4double G4UImanager::GetCurrentDoubleValue(const char* aCommand, - G4int parameterNumber, G4bool reGet) +G4double G4UImanager::GetCurrentDoubleValue(const char* aCommand, G4int parameterNumber, + G4bool reGet) { - G4String targetParameter = - GetCurrentStringValue(aCommand, parameterNumber, reGet); + G4String targetParameter = GetCurrentStringValue(aCommand, parameterNumber, reGet); G4double value; const char* t = targetParameter; std::istringstream is(t); @@ -277,8 +254,7 @@ G4double G4UImanager::GetCurrentDoubleValue(const char* aCommand, void G4UImanager::AddNewCommand(G4UIcommand* newCommand) { treeTop->AddNewCommand(newCommand); - if(fMasterUImanager() != nullptr && G4Threading::G4GetThreadId() == 0) - { + if (fMasterUImanager() != nullptr && G4Threading::G4GetThreadId() == 0) { fMasterUImanager()->AddWorkerCommand(newCommand); } } @@ -293,8 +269,7 @@ void G4UImanager::AddWorkerCommand(G4UIcommand* newCommand) void G4UImanager::RemoveCommand(G4UIcommand* aCommand) { treeTop->RemoveCommand(aCommand); - if(fMasterUImanager() != nullptr && G4Threading::G4GetThreadId() == 0) - { + if (fMasterUImanager() != nullptr && G4Threading::G4GetThreadId() == 0) { fMasterUImanager()->RemoveWorkerCommand(aCommand); } } @@ -308,11 +283,11 @@ void G4UImanager::RemoveWorkerCommand(G4UIcommand* aCommand) // -------------------------------------------------------------------- void G4UImanager::ExecuteMacroFile(const char* fileName) { - G4UIsession* batchSession = new G4UIbatch(fileName, session); - session = batchSession; - lastRC = 0; + G4UIsession* batchSession = new G4UIbatch(fileName, session); + session = batchSession; + lastRC = 0; G4UIsession* previousSession = session->SessionStart(); - lastRC = session->GetLastReturnCode(); + lastRC = session->GetLastReturnCode(); delete session; session = previousSession; } @@ -339,25 +314,20 @@ void G4UImanager::LoopS(const char* valueList) } // -------------------------------------------------------------------- -void G4UImanager::Loop(const char* macroFile, const char* variableName, - G4double initialValue, G4double finalValue, - G4double stepSize) +void G4UImanager::Loop(const char* macroFile, const char* variableName, G4double initialValue, + G4double finalValue, G4double stepSize) { G4String cd; - if(stepSize > 0) - { - for(G4double d = initialValue; d <= finalValue; d += stepSize) - { + if (stepSize > 0) { + for (G4double d = initialValue; d <= finalValue; d += stepSize) { std::ostringstream os; os << d; cd += os.str(); cd += " "; } } - else - { - for(G4double d = initialValue; d >= finalValue; d += stepSize) - { + else { + for (G4double d = initialValue; d >= finalValue; d += stepSize) { std::ostringstream os; os << d; cd += os.str(); @@ -376,22 +346,18 @@ void G4UImanager::ForeachS(const char* valueList) G4String vn = parameterToken(); G4String c1 = parameterToken(); G4String ca; - while(!((ca = parameterToken()).empty())) - { + while (!((ca = parameterToken()).empty())) { c1 += " "; c1 += ca; } G4String aliasValue = c1; - if(aliasValue[0] == '"') - { + if (aliasValue[0] == '"') { G4String strippedValue; - if(aliasValue.back() == '"') - { + if (aliasValue.back() == '"') { strippedValue = aliasValue.substr(1, aliasValue.length() - 2); } - else - { + else { strippedValue = aliasValue.substr(1, aliasValue.length() - 1); } aliasValue = strippedValue; @@ -402,21 +368,18 @@ void G4UImanager::ForeachS(const char* valueList) } // -------------------------------------------------------------------- -void G4UImanager::Foreach(const char* macroFile, const char* variableName, - const char* candidates) +void G4UImanager::Foreach(const char* macroFile, const char* variableName, const char* candidates) { G4String candidatesString = candidates; G4Tokenizer parameterToken(candidatesString); G4String cd; - while(!((cd = parameterToken()).empty())) - { + while (!((cd = parameterToken()).empty())) { G4String vl = variableName; vl += " "; vl += cd; SetAlias(vl); ExecuteMacroFile(FindMacroPath(macroFile)); - if(lastRC != 0) - { + if (lastRC != 0) { G4ExceptionDescription ed; ed << "Loop aborted due to a command execution error - " << "error code " << lastRC; @@ -430,20 +393,15 @@ void G4UImanager::Foreach(const char* macroFile, const char* variableName, G4String G4UImanager::SolveAlias(const char* aCmd) { G4String aCommand = aCmd; - std::size_t ia = aCommand.find("{"); - std::size_t iz = aCommand.find("#"); - while((ia != std::string::npos) && - ((iz == std::string::npos) || (ia < iz))) - { + std::size_t ia = aCommand.find('{'); + std::size_t iz = aCommand.find('#'); + while ((ia != std::string::npos) && ((iz == std::string::npos) || (ia < iz))) { G4int ibx = -1; - while(ibx < 0) - { - std::size_t ib = aCommand.find("}"); - if(ib == std::string::npos) - { + while (ibx < 0) { + std::size_t ib = aCommand.find('}'); + if (ib == std::string::npos) { G4cerr << aCommand << G4endl; - for(std::size_t i = 0; i < ia; ++i) - { + for (std::size_t i = 0; i < ia; ++i) { G4cerr << " "; } G4cerr << "^" << G4endl; @@ -452,35 +410,31 @@ G4String G4UImanager::SolveAlias(const char* aCmd) return nullStr; } G4String ps = aCommand.substr(ia + 1, aCommand.length() - (ia + 1)); - std::size_t ic = ps.find("{"); - std::size_t id = ps.find("}"); - if(ic != std::string::npos && ic < id) - { + std::size_t ic = ps.find('{'); + std::size_t id = ps.find('}'); + if (ic != std::string::npos && ic < id) { ia += ic + 1; } - else - { + else { ibx = (G4int)ib; } } //--- Here ia represents the position of innermost "{" //--- and ibx represents corresponding "}" G4String subs; - if(ia > 0) - { + if (ia > 0) { subs = aCommand.substr(0, ia); } G4String alis = aCommand.substr(ia + 1, ibx - ia - 1); G4String rems = aCommand.substr(ibx + 1, aCommand.length() - ibx); - G4String* alVal = aliasList->FindAlias(alis); - if(alVal == nullptr) - { + const G4String* alVal = aliasList->FindAlias(alis); + if (alVal == nullptr) { G4cerr << "Alias <" << alis << "> not found -- command ignored" << G4endl; G4String nullStr; return nullStr; } aCommand = subs + (*alVal) + rems; - ia = aCommand.find("{"); + ia = aCommand.find('{'); } return aCommand; } @@ -495,14 +449,11 @@ G4int G4UImanager::ApplyCommand(const G4String& aCmd) G4int G4UImanager::ApplyCommand(const char* aCmd) { G4String aCommand = SolveAlias(aCmd); - if(aCommand.empty()) - { + if (aCommand.empty()) { return fAliasNotFound; } - if(verboseLevel != 0) - { - if(isMaster) - { + if (verboseLevel != 0) { + if (isMaster) { fLastCommandOutputTreated = false; } G4cout << aCommand << G4endl; @@ -510,102 +461,80 @@ G4int G4UImanager::ApplyCommand(const char* aCmd) G4String commandString; G4String commandParameter; - std::size_t i = aCommand.find(" "); - if(i != std::string::npos) - { - commandString = aCommand.substr(0, i); + std::size_t i = aCommand.find(' '); + if (i != std::string::npos) { + commandString = aCommand.substr(0, i); commandParameter = aCommand.substr(i + 1, aCommand.length() - (i + 1)); } - else - { + else { commandString = aCommand; } // remove doubled slash std::size_t len = commandString.length(); - std::size_t ll = 0; + std::size_t ll = 0; G4String a1; G4String a2; - while(ll < len - 1) - { - if(commandString.substr(ll, 2) == "//") - { - if(ll == 0) - { + while (ll < len - 1) { + if (commandString.substr(ll, 2) == "//") { + if (ll == 0) { // Safe because index argument always 0 commandString.erase(ll, 1); } - else - { - a1 = commandString.substr(0, ll); - a2 = commandString.substr(ll + 1, len - ll - 1); + else { + a1 = commandString.substr(0, ll); + a2 = commandString.substr(ll + 1, len - ll - 1); commandString = a1 + a2; } --len; } - else - { + else { ++ll; } } - if(isMaster && bridges != nullptr) - { - for(auto bridge : *bridges) - { + if (isMaster && bridges != nullptr) { + for (auto bridge : *bridges) { G4int leng = bridge->DirLength(); - if(commandString.substr(0, leng) == bridge->DirName()) - { - return bridge->LocalUI()->ApplyCommand(commandString + " " + - commandParameter); + if (commandString.substr(0, leng) == bridge->DirName()) { + return bridge->LocalUI()->ApplyCommand(commandString + " " + commandParameter); } } } G4UIcommand* targetCommand = treeTop->FindPath(commandString); - if(targetCommand == nullptr) - { - if(ignoreCmdNotFound) - { - if(stackCommandsForBroadcast) - { + if (targetCommand == nullptr) { + if (ignoreCmdNotFound) { + if (stackCommandsForBroadcast) { commandStack->push_back(commandString + " " + commandParameter); } return fCommandSucceeded; } - else - { - return fCommandNotFound; - } + + return fCommandNotFound; } - if(stackCommandsForBroadcast && targetCommand->ToBeBroadcasted()) - { + if (stackCommandsForBroadcast && targetCommand->ToBeBroadcasted()) { commandStack->push_back(commandString + " " + commandParameter); } - if(!(targetCommand->IsAvailable())) - { + if (!(targetCommand->IsAvailable())) { return fIllegalApplicationState; } - if(saveHistory) - { + if (saveHistory) { historyFile << aCommand << G4endl; } - if(G4int(histVec.size()) >= maxHistSize) - { + if (G4int(histVec.size()) >= maxHistSize) { histVec.erase(histVec.begin()); } histVec.push_back(aCommand); targetCommand->ResetFailure(); G4int commandFailureCode = targetCommand->DoIt(commandParameter); - if(commandFailureCode == 0) - { + if (commandFailureCode == 0) { G4int additionalFailureCode = targetCommand->IfCommandFailed(); - if(additionalFailureCode > 0) - { + if (additionalFailureCode > 0) { G4ExceptionDescription msg; msg << targetCommand->GetFailureDescription() << "\n" << "Error code : " << additionalFailureCode; @@ -616,7 +545,6 @@ G4int G4UImanager::ApplyCommand(const char* aCmd) return commandFailureCode; } - // -------------------------------------------------------------------- G4UIcommand* G4UImanager::FindCommand(const G4String& aCmd) { @@ -627,19 +555,22 @@ G4UIcommand* G4UImanager::FindCommand(const G4String& aCmd) G4UIcommand* G4UImanager::FindCommand(const char* aCmd) { G4String aCommand = SolveAlias(aCmd); - if(aCommand.empty()) - { return nullptr; } + if (aCommand.empty()) { + return nullptr; + } G4String commandString; - std::size_t i = aCommand.find(" "); - if(i != std::string::npos) - { commandString = aCommand.substr(0, i); } - else - { commandString = aCommand; } + std::size_t i = aCommand.find(' '); + if (i != std::string::npos) { + commandString = aCommand.substr(0, i); + } + else { + commandString = aCommand; + } return treeTop->FindPath(commandString); -} +} // -------------------------------------------------------------------- void G4UImanager::StoreHistory(const char* fileName) @@ -650,17 +581,14 @@ void G4UImanager::StoreHistory(const char* fileName) // -------------------------------------------------------------------- void G4UImanager::StoreHistory(G4bool historySwitch, const char* fileName) { - if(historySwitch) - { - if(saveHistory) - { + if (historySwitch) { + if (saveHistory) { historyFile.close(); } - historyFile.open((char*) fileName); + historyFile.open((char*)fileName); saveHistory = true; } - else - { + else { historyFile.close(); saveHistory = false; } @@ -670,8 +598,7 @@ void G4UImanager::StoreHistory(G4bool historySwitch, const char* fileName) // -------------------------------------------------------------------- void G4UImanager::PauseSession(const char* msg) { - if(session != nullptr) - { + if (session != nullptr) { session->PauseSessionStart(msg); } } @@ -680,12 +607,10 @@ void G4UImanager::PauseSession(const char* msg) void G4UImanager::ListCommands(const char* direct) { G4UIcommandTree* comTree = FindDirectory(direct); - if(comTree != nullptr) - { + if (comTree != nullptr) { comTree->List(); } - else - { + else { G4cout << direct << " is not found." << G4endl; } } @@ -693,25 +618,21 @@ void G4UImanager::ListCommands(const char* direct) // -------------------------------------------------------------------- G4UIcommandTree* G4UImanager::FindDirectory(const char* dirName) { - G4String aDirName = dirName; + G4String aDirName = dirName; G4String targetDir = G4StrUtil::strip_copy(aDirName); - if(targetDir.back() != '/') - { + if (targetDir.back() != '/') { targetDir += "/"; } G4UIcommandTree* comTree = treeTop; - if(targetDir == "/") - { + if (targetDir == "/") { return comTree; } std::size_t idx = 1; - while(idx < targetDir.length() - 1) - { - std::size_t i = targetDir.find("/", idx); + while (idx < targetDir.length() - 1) { + std::size_t i = targetDir.find('/', idx); G4String targetDirString = targetDir.substr(0, i + 1); - comTree = comTree->GetTree(targetDirString); - if(comTree == nullptr) - { + comTree = comTree->GetTree(targetDirString); + if (comTree == nullptr) { return nullptr; } idx = i + 1; @@ -722,20 +643,16 @@ G4UIcommandTree* G4UImanager::FindDirectory(const char* dirName) // -------------------------------------------------------------------- G4bool G4UImanager::Notify(G4ApplicationState requestedState) { - if(pauseAtBeginOfEvent) - { - if(requestedState == G4State_EventProc && - G4StateManager::GetStateManager()->GetPreviousState() == - G4State_GeomClosed) + if (pauseAtBeginOfEvent) { + if (requestedState == G4State_EventProc + && G4StateManager::GetStateManager()->GetPreviousState() == G4State_GeomClosed) { PauseSession("BeginOfEvent"); } } - if(pauseAtEndOfEvent) - { - if(requestedState == G4State_GeomClosed && - G4StateManager::GetStateManager()->GetPreviousState() == - G4State_EventProc) + if (pauseAtEndOfEvent) { + if (requestedState == G4State_GeomClosed + && G4StateManager::GetStateManager()->GetPreviousState() == G4State_EventProc) { PauseSession("EndOfEvent"); } @@ -746,26 +663,22 @@ G4bool G4UImanager::Notify(G4ApplicationState requestedState) // -------------------------------------------------------------------- void G4UImanager::SetCoutDestination(G4UIsession* const value) { - G4coutbuf.SetDestination(value); - G4cerrbuf.SetDestination(value); + G4iosSetDestination(value); } // -------------------------------------------------------------------- void G4UImanager::SetAlias(const char* aliasLine) { - G4String aLine = aliasLine; - std::size_t i = aLine.find(" "); - G4String aliasName = aLine.substr(0, i); + G4String aLine = aliasLine; + std::size_t i = aLine.find(' '); + G4String aliasName = aLine.substr(0, i); G4String aliasValue = aLine.substr(i + 1, aLine.length() - (i + 1)); - if(aliasValue[0] == '"') - { + if (aliasValue[0] == '"') { G4String strippedValue; - if(aliasValue.back() == '"') - { + if (aliasValue.back() == '"') { strippedValue = aliasValue.substr(1, aliasValue.length() - 2); } - else - { + else { strippedValue = aliasValue.substr(1, aliasValue.length() - 1); } aliasValue = strippedValue; @@ -777,7 +690,7 @@ void G4UImanager::SetAlias(const char* aliasLine) // -------------------------------------------------------------------- void G4UImanager::RemoveAlias(const char* aliasName) { - G4String aL = aliasName; + G4String aL = aliasName; G4String targetAlias = G4StrUtil::strip_copy(aL); aliasList->RemoveAlias(targetAlias); } @@ -792,12 +705,10 @@ void G4UImanager::ListAlias() void G4UImanager::CreateHTML(const char* dir) { G4UIcommandTree* tr = FindDirectory(dir); - if(tr != nullptr) - { + if (tr != nullptr) { tr->CreateHTML(); } - else - { + else { G4cerr << "Directory <" << dir << "> is not found." << G4endl; } } @@ -808,21 +719,18 @@ void G4UImanager::ParseMacroSearchPath() searchDirs.clear(); std::size_t idxfirst = 0; - std::size_t idxend = 0; - G4String pathstring = ""; - while((idxend = searchPath.find(':', idxfirst)) != G4String::npos) - { + std::size_t idxend = 0; + G4String pathstring = ""; + while ((idxend = searchPath.find(':', idxfirst)) != G4String::npos) { pathstring = searchPath.substr(idxfirst, idxend - idxfirst); - if(!pathstring.empty()) - { + if (!pathstring.empty()) { searchDirs.push_back(pathstring); } idxfirst = idxend + 1; } pathstring = searchPath.substr(idxfirst, searchPath.size() - idxfirst); - if(!pathstring.empty()) - { + if (!pathstring.empty()) { searchDirs.push_back(pathstring); } } @@ -833,8 +741,7 @@ static G4bool FileFound(const G4String& fname) G4bool qopen = false; std::ifstream fs; fs.open(fname.c_str(), std::ios::in); - if(fs.good()) - { + if (fs.good()) { fs.close(); qopen = true; } @@ -846,11 +753,9 @@ G4String G4UImanager::FindMacroPath(const G4String& fname) const { G4String macrofile = fname; - for(const auto& searchDir : searchDirs) - { + for (const auto& searchDir : searchDirs) { G4String fullpath = searchDir + "/" + fname; - if(FileFound(fullpath)) - { + if (FileFound(fullpath)) { macrofile = fullpath; break; } @@ -862,20 +767,18 @@ G4String G4UImanager::FindMacroPath(const G4String& fname) const std::vector* G4UImanager::GetCommandStack() { std::vector* returnValue = commandStack; - commandStack = new std::vector; + commandStack = new std::vector; return returnValue; } // -------------------------------------------------------------------- void G4UImanager::RegisterBridge(G4UIbridge* brg) { - if(brg->LocalUI() == this) - { + if (brg->LocalUI() == this) { G4Exception("G4UImanager::RegisterBridge()", "UI7002", FatalException, "G4UIBridge cannot bridge between same object."); } - else - { + else { bridges->push_back(brg); } } @@ -904,17 +807,14 @@ void G4UImanager::SetUpForSpecialThread(const G4String& pref) void G4UImanager::SetCoutFileName(const G4String& fileN, G4bool ifAppend) { // for sequential mode, ignore this method. - if(threadID < 0) - { + if (threadID < 0) { return; } - if(fileN == "**Screen**") - { + if (fileN == "**Screen**") { threadCout->SetCoutFileName(fileN, ifAppend); } - else - { + else { std::stringstream fn; fn << "G4W_" << threadID << "_" << fileN; threadCout->SetCoutFileName(fn.str(), ifAppend); @@ -925,17 +825,14 @@ void G4UImanager::SetCoutFileName(const G4String& fileN, G4bool ifAppend) void G4UImanager::SetCerrFileName(const G4String& fileN, G4bool ifAppend) { // for sequential mode, ignore this method. - if(threadID < 0) - { + if (threadID < 0) { return; } - if(fileN == "**Screen**") - { + if (fileN == "**Screen**") { threadCout->SetCerrFileName(fileN, ifAppend); } - else - { + else { std::stringstream fn; fn << "G4W_" << threadID << "_" << fileN; threadCout->SetCerrFileName(fn.str(), ifAppend); @@ -946,8 +843,7 @@ void G4UImanager::SetCerrFileName(const G4String& fileN, G4bool ifAppend) void G4UImanager::SetThreadPrefixString(const G4String& s) { // for sequential mode, ignore this method. - if(threadID < 0) - { + if (threadID < 0) { return; } threadCout->SetPrefixString(s); @@ -957,8 +853,7 @@ void G4UImanager::SetThreadPrefixString(const G4String& s) void G4UImanager::SetThreadUseBuffer(G4bool flg) { // for sequential mode, ignore this method. - if(threadID < 0) - { + if (threadID < 0) { return; } threadCout->EnableBuffering(flg); @@ -968,8 +863,7 @@ void G4UImanager::SetThreadUseBuffer(G4bool flg) void G4UImanager::SetThreadIgnore(G4int tid) { // for sequential mode, ignore this method. - if(threadID < 0) - { + if (threadID < 0) { igThreadID = tid; return; } @@ -980,8 +874,7 @@ void G4UImanager::SetThreadIgnore(G4int tid) void G4UImanager::SetThreadIgnoreInit(G4bool flg) { // for sequential mode, ignore this method. - if(threadID < 0) - { + if (threadID < 0) { return; } threadCout->SetIgnoreInit(flg); diff --git a/source/intercoms/src/G4UImessenger.cc b/source/intercoms/src/G4UImessenger.cc index 80aa2e757d6..6fba0f54f87 100644 --- a/source/intercoms/src/G4UImessenger.cc +++ b/source/intercoms/src/G4UImessenger.cc @@ -29,11 +29,14 @@ // -------------------------------------------------------------------- #include "G4UImessenger.hh" -#include "G4UImanager.hh" + #include "G4UIcommand.hh" -#include "G4UIdirectory.hh" #include "G4UIcommandTree.hh" +#include "G4UIdirectory.hh" +#include "G4UImanager.hh" +#include "G4UIparsing.hh" #include "G4ios.hh" + #include #include @@ -53,26 +56,11 @@ G4UImessenger::~G4UImessenger() // -------------------------------------------------------------------- G4String G4UImessenger::GetCurrentValue(G4UIcommand*) { - G4String nullString; - return nullString; -} - -// -------------------------------------------------------------------- -void G4UImessenger::SetNewValue(G4UIcommand*, G4String) -{ + return G4String{}; } // -------------------------------------------------------------------- -G4bool G4UImessenger::operator==(const G4UImessenger& messenger) const -{ - return this == &messenger; -} - -// -------------------------------------------------------------------- -G4bool G4UImessenger::operator!=(const G4UImessenger& messenger) const -{ - return this != &messenger; -} +void G4UImessenger::SetNewValue(G4UIcommand*, G4String) {} // -------------------------------------------------------------------- G4String G4UImessenger::ItoS(G4int i) @@ -93,61 +81,39 @@ G4String G4UImessenger::DtoS(G4double a) // -------------------------------------------------------------------- G4String G4UImessenger::BtoS(G4bool b) { - G4String vl = "0"; - if(b) - { - vl = "true"; - } - return vl; + return b ? "true" : "0"; } // -------------------------------------------------------------------- G4int G4UImessenger::StoI(const G4String& str) { - G4int vl; - const char* t = str; - std::istringstream is(t); - is >> vl; - return vl; + return G4UIparsing::StoT(str); } // -------------------------------------------------------------------- G4long G4UImessenger::StoL(const G4String& str) { - G4long vl; - const char* t = str; - std::istringstream is(t); - is >> vl; - return vl; + return G4UIparsing::StoT(str); } // -------------------------------------------------------------------- G4double G4UImessenger::StoD(const G4String& str) { - G4double vl; - const char* t = str; - std::istringstream is(t); - is >> vl; - return vl; + return G4UIparsing::StoT(str); } // -------------------------------------------------------------------- G4bool G4UImessenger::StoB(G4String str) { G4String v = G4StrUtil::to_upper_copy(std::move(str)); - G4bool vl = false; - if(v == "Y" || v == "YES" || v == "1" || v == "T" || v == "TRUE") - { - vl = true; - } - return vl; + return (v == "Y" || v == "YES" || v == "1" || v == "T" || v == "TRUE"); } // -------------------------------------------------------------------- void G4UImessenger::AddUIcommand(G4UIcommand* newCommand) { - G4cerr << "Warning : Old style definition of G4UIcommand <" - << newCommand->GetCommandPath() << ">." << G4endl; + G4cerr << "Warning : Old style definition of G4UIcommand <" << newCommand->GetCommandPath() + << ">." << G4endl; } // -------------------------------------------------------------------- @@ -157,19 +123,16 @@ void G4UImessenger::CreateDirectory(const G4String& path, const G4String& dsc, G4UImanager* ui = G4UImanager::GetUIpointer(); G4String fullpath = path; - if(fullpath.back() != '/') - { + if (fullpath.back() != '/') { fullpath.append("/"); } G4UIcommandTree* tree = ui->GetTree()->FindCommandTree(fullpath.c_str()); - if(tree != nullptr) - { + if (tree != nullptr) { baseDirName = tree->GetPathName(); } - else - { - baseDir = new G4UIdirectory(fullpath.c_str(), commandsToBeBroadcasted); + else { + baseDir = new G4UIdirectory(fullpath.c_str(), commandsToBeBroadcasted); baseDirName = fullpath; baseDir->SetGuidance(dsc.c_str()); } diff --git a/source/intercoms/src/G4UIparameter.cc b/source/intercoms/src/G4UIparameter.cc index 6a605e7c1fc..5c7d0ec0742 100644 --- a/source/intercoms/src/G4UIparameter.cc +++ b/source/intercoms/src/G4UIparameter.cc @@ -29,77 +29,59 @@ // -------------------------------------------------------------------- #include "G4UIparameter.hh" -#include "G4UIcommandStatus.hh" + #include "G4Tokenizer.hh" -#include "G4ios.hh" #include "G4UIcommand.hh" +#include "G4UIcommandStatus.hh" +#include "G4UIparsing.hh" +#include "G4ios.hh" +#include // for CheckNewValue() #include -#include // for CheckNewValue() using namespace G4UItokenNum; // -------------------------------------------------------------------- G4UIparameter::G4UIparameter(char theType) { - parameterType = theType; + parameterType = theType; } // -------------------------------------------------------------------- -G4UIparameter::G4UIparameter(const char* theName, char theType, - G4bool theOmittable) +G4UIparameter::G4UIparameter(const char* theName, char theType, G4bool theOmittable) { parameterName = theName; parameterType = theType; - omittable = theOmittable; + omittable = theOmittable; } // -------------------------------------------------------------------- G4UIparameter::~G4UIparameter() = default; -// -------------------------------------------------------------------- -G4bool G4UIparameter::operator==(const G4UIparameter& right) const -{ - return (this == &right); -} - -// -------------------------------------------------------------------- -G4bool G4UIparameter::operator!=(const G4UIparameter& right) const -{ - return (this != &right); -} - // -------------------------------------------------------------------- void G4UIparameter::List() { G4cout << G4endl << "Parameter : " << parameterName << G4endl; - if(!parameterGuidance.empty()) - { + if (!parameterGuidance.empty()) { G4cout << parameterGuidance << G4endl; } G4cout << " Parameter type : " << parameterType << G4endl; - if(omittable) - { + if (omittable) { G4cout << " Omittable : True" << G4endl; } - else - { + else { G4cout << " Omittable : False" << G4endl; } - if(currentAsDefaultFlag) - { + if (currentAsDefaultFlag) { G4cout << " Default value : taken from the current value" << G4endl; } - else if(!defaultValue.empty()) - { + else if (!defaultValue.empty()) { G4cout << " Default value : " << defaultValue << G4endl; } - if(!parameterRange.empty()) - { - G4cout << " Parameter range : " << parameterRange << G4endl; + if (!rangeExpression.empty()) { + G4cout << " Parameter range : " << rangeExpression << G4endl; } - if(!parameterCandidate.empty()) - { + if (!parameterCandidate.empty()) { G4cout << " Candidates : " << parameterCandidate << G4endl; } } @@ -107,39 +89,31 @@ void G4UIparameter::List() // -------------------------------------------------------------------- void G4UIparameter::SetDefaultValue(G4int theDefaultValue) { - std::ostringstream os; - os << theDefaultValue; - defaultValue = os.str(); + defaultValue = G4UIparsing::TtoS(theDefaultValue); } // -------------------------------------------------------------------- void G4UIparameter::SetDefaultValue(G4long theDefaultValue) { - std::ostringstream os; - os << theDefaultValue; - defaultValue = os.str(); + defaultValue = G4UIparsing::TtoS(theDefaultValue); } // -------------------------------------------------------------------- void G4UIparameter::SetDefaultValue(G4double theDefaultValue) { - std::ostringstream os; - os << theDefaultValue; - defaultValue = os.str(); + defaultValue = G4UIparsing::TtoS(theDefaultValue); } // -------------------------------------------------------------------- void G4UIparameter::SetDefaultUnit(const char* theDefaultUnit) { char type = (char)std::toupper(parameterType); - if(type != 'S') - { + if (type != 'S') { G4ExceptionDescription ed; ed << "This method can be used only for a string-type parameter that is " "used to specify a unit.\n" << "This parameter <" << parameterName << "> is defined as "; - switch(type) - { + switch (type) { case 'D': ed << "double."; break; @@ -155,364 +129,142 @@ void G4UIparameter::SetDefaultUnit(const char* theDefaultUnit) default: ed << "undefined."; } - G4Exception("G4UIparameter::SetDefaultUnit", "INTERCOM2010", FatalException, - ed); + G4Exception("G4UIparameter::SetDefaultUnit", "INTERCOM2010", FatalException, ed); } SetDefaultValue(theDefaultUnit); - SetParameterCandidates( - G4UIcommand::UnitsList(G4UIcommand::CategoryOf(theDefaultUnit))); + SetParameterCandidates(G4UIcommand::UnitsList(G4UIcommand::CategoryOf(theDefaultUnit))); } // ---------- CheckNewValue() related routines ------------------------ -//#include "checkNewValue_debug.icc" -//#define DEBUG 1 - -// -------------------------------------------------------------------- G4int G4UIparameter::CheckNewValue(const char* newValue) { - if(TypeCheck(newValue) == 0) - { + if (!TypeCheck(newValue)) { return fParameterUnreadable; } - if(!parameterRange.empty()) - { - if(RangeCheck(newValue) == 0) - { - return fParameterOutOfRange; - } + if (!RangeCheck(newValue)) { + return fParameterOutOfRange; } - if(!parameterCandidate.empty()) - { - if(CandidateCheck(newValue) == 0) - { - return fParameterOutOfCandidates; - } + if (!CandidateCheck(newValue)) { + return fParameterOutOfCandidates; } return 0; // succeeded } // -------------------------------------------------------------------- -G4int G4UIparameter::CandidateCheck(const char* newValue) +G4bool G4UIparameter::CandidateCheck(const char* newValue) { + if (parameterCandidate.empty()) { + return true; + } + G4Tokenizer candidateTokenizer(parameterCandidate); G4String aToken; - G4int iToken = 0; - while(!(aToken = candidateTokenizer()).empty()) - { - ++iToken; - if(aToken == newValue) - { - return iToken; + while (!(aToken = candidateTokenizer()).empty()) { + if (aToken == newValue) { + return true; } } - G4cerr << "parameter value (" << newValue - << ") is not listed in the candidate List." << G4endl; + G4cerr << "parameter value (" << newValue << ") is not listed in the candidate List." << G4endl; G4cerr << " Candidates are:"; G4Tokenizer candidateListTokenizer(parameterCandidate); - while(!(aToken = candidateListTokenizer()).empty()) - { + while (!(aToken = candidateListTokenizer()).empty()) { G4cerr << ' ' << aToken; } G4cerr << G4endl; - return 0; + return false; } // -------------------------------------------------------------------- -G4int G4UIparameter::RangeCheck(const char* newValue) -{ - yystype result; - bp = 0; // reset buffer pointer for G4UIpGetc() - std::istringstream is(newValue); - char type = (char)std::toupper(parameterType); - switch(type) - { - case 'D': - is >> newVal.D; - break; - case 'I': - is >> newVal.I; - break; - case 'L': - is >> newVal.L; - break; - default:; - } - // PrintToken(); // Print tokens (consumes all tokens) - token = Yylex(); - result = Expression(); - if(paramERR == 1) - { - return 0; - } - if(result.type != CONSTINT) - { - G4cerr << "Illegal Expression in parameter range." << G4endl; - return 0; - } - if(result.I != 0) - { - return 1; - } - G4cerr << "parameter out of range: " << parameterRange << G4endl; - return 0; -} - -// -------------------------------------------------------------------- -G4int G4UIparameter::TypeCheck(const char* newValue) +G4bool G4UIparameter::TypeCheck(const char* newValue) { G4String newValueString(newValue); char type = (char)std::toupper(parameterType); - switch(type) - { + switch (type) { case 'D': - if(IsDouble(newValueString.data()) == 0) - { + if (!G4UIparsing::IsDouble(newValueString.data())) { G4cerr << newValue << ": double value expected." << G4endl; - return 0; + return false; } break; case 'I': - if(IsInt(newValueString.data(), 10) == 0) - { + if (!G4UIparsing::IsInt(newValueString.data(), 10)) { G4cerr << newValue << ": integer expected." << G4endl; - return 0; + return false; } break; case 'L': - if(IsInt(newValueString.data(), 20) == 0) - { + if (!G4UIparsing::IsInt(newValueString.data(), 20)) { G4cerr << newValue << ": long int expected." << G4endl; - return 0; + return false; } break; case 'S': break; case 'B': G4StrUtil::to_upper(newValueString); - if(newValueString == "Y" || newValueString == "N" || - newValueString == "YES" || newValueString == "NO" || - newValueString == "1" || newValueString == "0" || - newValueString == "T" || newValueString == "F" || - newValueString == "TRUE" || newValueString == "FALSE") + if (newValueString == "Y" || newValueString == "N" || newValueString == "YES" + || newValueString == "NO" || newValueString == "1" || newValueString == "0" + || newValueString == "T" || newValueString == "F" || newValueString == "TRUE" + || newValueString == "FALSE") { - return 1; + return true; } - else - { - G4cerr << newValue << ": bool expected." << G4endl; - return 0; - } - default:; - } - return 1; -} -// -------------------------------------------------------------------- -G4int G4UIparameter::IsInt(const char* buf, - short maxDigits) // do not allow any std::ws -{ - const char* p = buf; - G4int length = 0; - if(*p == '+' || *p == '-') - { - ++p; - } - if(isdigit((G4int) (*p)) != 0) - { - while(isdigit((G4int) (*p)) != 0) - { - ++p; - ++length; - } - if(*p == '\0') - { - if(length > maxDigits) - { - G4cerr << "digit length exceeds" << G4endl; - return 0; - } - return 1; - } - else - { - // G4cerr <<"illegal character after int:"<> newVal.D; break; - case '.': - ++p; - if(isdigit(*p) != 0) - { - while(isdigit((G4int) (*p)) != 0) - { - ++p; - } - if(*p == '\0') - { - return 1; - } - if(*p == 'e' || *p == 'E') - { - return ExpectExponent(++p); - } - } + case 'I': + is >> newVal.I; break; - default: // digit is expected - if(isdigit(*p) != 0) - { - while(isdigit((G4int) (*p)) != 0) - { - ++p; - } - if(*p == '\0') - { - return 1; - } - if(*p == 'e' || *p == 'E') - { - return ExpectExponent(++p); - } - if(*p == '.') - { - ++p; - if(*p == '\0') - { - return 1; - } - if(*p == 'e' || *p == 'E') - { - return ExpectExponent(++p); - } - if(isdigit(*p) != 0) - { - while(isdigit((G4int) (*p)) != 0) - { - ++p; - } - if(*p == '\0') - { - return 1; - } - if(*p == 'e' || *p == 'E') - { - return ExpectExponent(++p); - } - } - } - } + case 'L': + is >> newVal.L; + break; + default:; } - return 0; + // PrintToken(); // Print tokens (consumes all tokens) + token = Yylex(); + result = Expression(); + if (paramERR == 1) { + return false; + } + if (result.type != CONSTINT) { + G4cerr << "Illegal Expression in parameter range." << G4endl; + return false; + } + if (result.I != 0) { + return true; + } + G4cerr << "parameter out of range: " << rangeExpression << G4endl; + return false; } // ------------------ syntax node functions ------------------ yystype G4UIparameter::Expression() { - yystype result; -#ifdef DEBUG - G4cerr << " Expression()" << G4endl; -#endif - result = LogicalORExpression(); - return result; + return LogicalORExpression(); } // -------------------------------------------------------------------- @@ -521,27 +273,22 @@ yystype G4UIparameter::LogicalORExpression() yystype result; yystype p; p = LogicalANDExpression(); - if(token != LOGICALOR) - { + if (token != LOGICALOR) { return p; } - if(p.type == CONSTSTRING || p.type == IDENTIFIER) - { + if (p.type == CONSTSTRING || p.type == IDENTIFIER) { G4cerr << "Parameter range: illegal type at '||'" << G4endl; paramERR = 1; } result.I = p.I; - while(token == LOGICALOR) - { + while (token == LOGICALOR) { token = Yylex(); - p = LogicalANDExpression(); - if(p.type == CONSTSTRING || p.type == IDENTIFIER) - { + p = LogicalANDExpression(); + if (p.type == CONSTSTRING || p.type == IDENTIFIER) { G4cerr << "Parameter range: illegal type at '||'" << G4endl; paramERR = 1; } - switch(p.type) - { + switch (p.type) { case CONSTINT: result.I += p.I; result.type = CONSTINT; @@ -568,27 +315,22 @@ yystype G4UIparameter::LogicalANDExpression() yystype result; yystype p; p = EqualityExpression(); - if(token != LOGICALAND) - { + if (token != LOGICALAND) { return p; } - if(p.type == CONSTSTRING || p.type == IDENTIFIER) - { + if (p.type == CONSTSTRING || p.type == IDENTIFIER) { G4cerr << "Parameter range: illegal type at '&&'" << G4endl; paramERR = 1; } result.I = p.I; - while(token == LOGICALAND) - { + while (token == LOGICALAND) { token = Yylex(); - p = EqualityExpression(); - if(p.type == CONSTSTRING || p.type == IDENTIFIER) - { + p = EqualityExpression(); + if (p.type == CONSTSTRING || p.type == IDENTIFIER) { G4cerr << "Parameter range: illegal type at '&&'" << G4endl; paramERR = 1; } - switch(p.type) - { + switch (p.type) { case CONSTINT: result.I *= p.I; result.type = CONSTINT; @@ -615,26 +357,17 @@ yystype G4UIparameter::EqualityExpression() yystype arg1, arg2; G4int operat; yystype result; -#ifdef DEBUG - G4cerr << " EqualityExpression()" << G4endl; -#endif result = RelationalExpression(); - if(token == EQ || token == NE) - { - operat = token; - token = Yylex(); - arg1 = result; - arg2 = RelationalExpression(); - result.I = Eval2(arg1, operat, arg2); // semantic action + if (token == EQ || token == NE) { + operat = token; + token = Yylex(); + arg1 = result; + arg2 = RelationalExpression(); + result.I = Eval2(arg1, operat, arg2); // semantic action result.type = CONSTINT; -#ifdef DEBUG - G4cerr << " return code of Eval2(): " << result.I << G4endl; -#endif } - else - { - if(result.type != CONSTINT && result.type != CONSTDOUBLE) - { + else { + if (result.type != CONSTINT && result.type != CONSTDOUBLE) { G4cerr << "Parameter range: error at EqualityExpression" << G4endl; paramERR = 1; } @@ -648,43 +381,29 @@ yystype G4UIparameter::RelationalExpression() yystype arg1, arg2; G4int operat; yystype result; -#ifdef DEBUG - G4cerr << " RelationalExpression()" << G4endl; -#endif arg1 = AdditiveExpression(); - if(token == GT || token == GE || token == LT || token == LE) - { - operat = token; - token = Yylex(); - arg2 = AdditiveExpression(); - result.I = Eval2(arg1, operat, arg2); // semantic action + if (token == GT || token == GE || token == LT || token == LE) { + operat = token; + token = Yylex(); + arg2 = AdditiveExpression(); + result.I = Eval2(arg1, operat, arg2); // semantic action result.type = CONSTINT; -#ifdef DEBUG - G4cerr << " return Eval2(): " << G4endl; -#endif } - else - { + else { result = arg1; } -#ifdef DEBUG - G4cerr << " return RelationalExpression()" << G4endl; -#endif return result; } // -------------------------------------------------------------------- yystype G4UIparameter::AdditiveExpression() { - yystype result; - result = MultiplicativeExpression(); - if(token != '+' && token != '-') - { + yystype result = MultiplicativeExpression(); + if (token != '+' && token != '-') { return result; } - G4cerr << "Parameter range: operator " << (char) token << " is not supported." - << G4endl; + G4cerr << "Parameter range: operator " << (char)token << " is not supported." << G4endl; paramERR = 1; return result; } @@ -692,14 +411,11 @@ yystype G4UIparameter::AdditiveExpression() // -------------------------------------------------------------------- yystype G4UIparameter::MultiplicativeExpression() { - yystype result; - result = UnaryExpression(); - if(token != '*' && token != '/' && token != '%') - { + yystype result = UnaryExpression(); + if (token != '*' && token != '/' && token != '%') { return result; } - G4cerr << "Parameter range: operator " << (char) token << " is not supported." - << G4endl; + G4cerr << "Parameter range: operator " << (char)token << " is not supported." << G4endl; paramERR = 1; return result; } @@ -709,32 +425,25 @@ yystype G4UIparameter::UnaryExpression() { yystype result; yystype p; -#ifdef DEBUG - G4cerr << " UnaryExpression" << G4endl; -#endif - switch(token) - { + switch (token) { case '-': token = Yylex(); - p = UnaryExpression(); - if(p.type == CONSTINT) - { - result.I = -p.I; + p = UnaryExpression(); + if (p.type == CONSTINT) { + result.I = -p.I; result.type = CONSTINT; } - if(p.type == CONSTLONG) - { - result.L = -p.L; + if (p.type == CONSTLONG) { + result.L = -p.L; result.type = CONSTLONG; } - if(p.type == CONSTDOUBLE) - { - result.D = -p.D; + if (p.type == CONSTDOUBLE) { + result.D = -p.D; result.type = CONSTDOUBLE; } break; case '+': - token = Yylex(); + token = Yylex(); result = UnaryExpression(); break; case '!': @@ -742,7 +451,7 @@ yystype G4UIparameter::UnaryExpression() G4cerr << "Parameter range error: " << "operator '!' is not supported (sorry)." << G4endl; paramERR = 1; - result = UnaryExpression(); + result = UnaryExpression(); break; default: result = PrimaryExpression(); @@ -754,36 +463,31 @@ yystype G4UIparameter::UnaryExpression() yystype G4UIparameter::PrimaryExpression() { yystype result; -#ifdef DEBUG - G4cerr << " PrimaryExpression" << G4endl; -#endif - switch(token) - { + switch (token) { case IDENTIFIER: - result.S = yylval.S; + result.S = yylval.S; result.type = token; - token = Yylex(); + token = Yylex(); break; case CONSTINT: - result.I = yylval.I; + result.I = yylval.I; result.type = token; - token = Yylex(); + token = Yylex(); break; case CONSTLONG: - result.L = yylval.L; + result.L = yylval.L; result.type = token; - token = Yylex(); + token = Yylex(); break; case CONSTDOUBLE: - result.D = yylval.D; + result.D = yylval.D; result.type = token; - token = Yylex(); + token = Yylex(); break; case '(': - token = Yylex(); + token = Yylex(); result = Expression(); - if(token != ')') - { + if (token != ')') { G4cerr << " ')' expected" << G4endl; paramERR = 1; } @@ -799,94 +503,71 @@ yystype G4UIparameter::PrimaryExpression() G4int G4UIparameter::Eval2(const yystype& arg1, G4int op, const yystype& arg2) { - if((arg1.type != IDENTIFIER) && (arg2.type != IDENTIFIER)) - { - G4cerr << parameterName << ": meaningless comparison " << G4int(arg1.type) - << " " << G4int(arg2.type) << G4endl; + if ((arg1.type != IDENTIFIER) && (arg2.type != IDENTIFIER)) { + G4cerr << parameterName << ": meaningless comparison " << G4int(arg1.type) << " " + << G4int(arg2.type) << G4endl; paramERR = 1; } char type = (char)std::toupper(parameterType); - if(arg1.type == IDENTIFIER) - { - switch(type) - { + if (arg1.type == IDENTIFIER) { + switch (type) { case 'I': - if(arg2.type == CONSTINT) - { - return CompareInt(newVal.I, op, arg2.I); + if (arg2.type == CONSTINT) { + return G4UIparsing::CompareInt(newVal.I, op, arg2.I, paramERR); } - else - { - G4cerr << "integer operand expected for " << parameterRange << '.' - << G4endl; + else { + G4cerr << "integer operand expected for " << rangeExpression << '.' << G4endl; } break; case 'L': - if(arg2.type == CONSTLONG) - { - return CompareLong(newVal.L, op, arg2.L); + if (arg2.type == CONSTLONG) { + return G4UIparsing::CompareLong(newVal.L, op, arg2.L, paramERR); } - else - { - G4cerr << "long int operand expected for " << parameterRange << '.' - << G4endl; + else { + G4cerr << "long int operand expected for " << rangeExpression << '.' << G4endl; } break; case 'D': - if(arg2.type == CONSTDOUBLE) - { - return CompareDouble(newVal.D, op, arg2.D); + if (arg2.type == CONSTDOUBLE) { + return G4UIparsing::CompareDouble(newVal.D, op, arg2.D, paramERR); } - else if(arg2.type == CONSTINT) - { // integral promotion - return CompareDouble(newVal.D, op, arg2.I); + else if (arg2.type == CONSTINT) { // integral promotion + return G4UIparsing::CompareDouble(newVal.D, op, arg2.I, paramERR); } - else if(arg2.type == CONSTLONG) - { - return CompareDouble(newVal.D, op, arg2.L); + else if (arg2.type == CONSTLONG) { + return G4UIparsing::CompareDouble(newVal.D, op, arg2.L, paramERR); } break; default:; } } - if(arg2.type == IDENTIFIER) - { - switch(type) - { + if (arg2.type == IDENTIFIER) { + switch (type) { case 'I': - if(arg1.type == CONSTINT) - { - return CompareInt(arg1.I, op, newVal.I); + if (arg1.type == CONSTINT) { + return G4UIparsing::CompareInt(arg1.I, op, newVal.I, paramERR); } - else - { - G4cerr << "integer operand expected for " << parameterRange << '.' - << G4endl; + else { + G4cerr << "integer operand expected for " << rangeExpression << '.' << G4endl; } break; case 'L': - if(arg1.type == CONSTLONG) - { - return CompareLong(arg1.L, op, newVal.L); + if (arg1.type == CONSTLONG) { + return G4UIparsing::CompareLong(arg1.L, op, newVal.L, paramERR); } - else - { - G4cerr << "long int operand expected for " << parameterRange << '.' - << G4endl; + else { + G4cerr << "long int operand expected for " << rangeExpression << '.' << G4endl; } break; case 'D': - if(arg1.type == CONSTDOUBLE) - { - return CompareDouble(arg1.D, op, newVal.D); + if (arg1.type == CONSTDOUBLE) { + return G4UIparsing::CompareDouble(arg1.D, op, newVal.D, paramERR); } - else if(arg1.type == CONSTINT) - { // integral promotion - return CompareDouble(arg1.I, op, newVal.D); + else if (arg1.type == CONSTINT) { // integral promotion + return G4UIparsing::CompareDouble(arg1.I, op, newVal.D, paramERR); } - else if(arg1.type == CONSTLONG) - { // integral promotion - return CompareDouble(arg1.L, op, newVal.D); + else if (arg1.type == CONSTLONG) { // integral promotion + return G4UIparsing::CompareDouble(arg1.L, op, newVal.D, paramERR); } break; default:; @@ -896,209 +577,68 @@ G4int G4UIparameter::Eval2(const yystype& arg1, G4int op, const yystype& arg2) return 0; } -// -------------------------------------------------------------------- -G4int G4UIparameter::CompareInt(G4int arg1, G4int op, G4int arg2) -{ - G4int result = -1; - G4String opr; - switch(op) - { - case GT: - result = static_cast(arg1 > arg2); - opr = ">"; - break; - case GE: - result = static_cast(arg1 >= arg2); - opr = ">="; - break; - case LT: - result = static_cast(arg1 < arg2); - opr = "<"; - break; - case LE: - result = static_cast(arg1 <= arg2); - opr = "<="; - break; - case EQ: - result = static_cast(arg1 == arg2); - opr = "=="; - break; - case NE: - result = static_cast(arg1 != arg2); - opr = "!="; - break; - default: - G4cerr << "Parameter range: error at CompareInt" << G4endl; - paramERR = 1; - } -#ifdef DEBUG - G4cerr << "CompareInt " << arg1 << " " << opr << arg2 << " result: " << result - << G4endl; -#endif - return result; -} - -// -------------------------------------------------------------------- -G4int G4UIparameter::CompareLong(G4long arg1, G4int op, G4long arg2) -{ - G4int result = -1; - G4String opr; - switch(op) - { - case GT: - result = static_cast(arg1 > arg2); - opr = ">"; - break; - case GE: - result = static_cast(arg1 >= arg2); - opr = ">="; - break; - case LT: - result = static_cast(arg1 < arg2); - opr = "<"; - break; - case LE: - result = static_cast(arg1 <= arg2); - opr = "<="; - break; - case EQ: - result = static_cast(arg1 == arg2); - opr = "=="; - break; - case NE: - result = static_cast(arg1 != arg2); - opr = "!="; - break; - default: - G4cerr << "Parameter range: error at CompareInt" << G4endl; - paramERR = 1; - } -#ifdef DEBUG - G4cerr << "CompareInt " << arg1 << " " << opr << arg2 << " result: " << result - << G4endl; -#endif - return result; -} - -// -------------------------------------------------------------------- -G4int G4UIparameter::CompareDouble(G4double arg1, G4int op, G4double arg2) -{ - G4int result = -1; - G4String opr; - switch(op) - { - case GT: - result = static_cast(arg1 > arg2); - opr = ">"; - break; - case GE: - result = static_cast(arg1 >= arg2); - opr = ">="; - break; - case LT: - result = static_cast(arg1 < arg2); - opr = "<"; - break; - case LE: - result = static_cast(arg1 <= arg2); - opr = "<="; - break; - case EQ: - result = static_cast(arg1 == arg2); - opr = "=="; - break; - case NE: - result = static_cast(arg1 != arg2); - opr = "!="; - break; - default: - G4cerr << "Parameter range: error at CompareDouble" << G4endl; - paramERR = 1; - } -#ifdef DEBUG - G4cerr << "CompareDouble " << arg1 << " " << opr << " " << arg2 - << " result: " << result << G4endl; -#endif - return result; -} - // --------------------- utility functions -------------------------- tokenNum G4UIparameter::Yylex() // reads input and returns token number KR486 -{ // (returns EOF) +{ // (returns EOF) G4int c; G4String buf; - while((c = G4UIpGetc()) == ' ' || c == '\t' || c == '\n') - { + while ((c = G4UIpGetc()) == ' ' || c == '\t' || c == '\n') { ; } - if(c == EOF) - { - return (tokenNum) EOF; // KR488 + if (c == EOF) { + return (tokenNum)EOF; // KR488 } buf = ""; - if((isdigit(c) != 0) || c == '.') - { // I or D - do - { - buf += (unsigned char) c; + if ((isdigit(c) != 0) || c == '.') { // I or D + do { + buf += (unsigned char)c; c = G4UIpGetc(); - } while(c == '.' || (isdigit(c) != 0) || c == 'e' || c == 'E' || c == '+' || - c == '-'); + } while (c == '.' || (isdigit(c) != 0) || c == 'e' || c == 'E' || c == '+' || c == '-'); G4UIpUngetc(c); const char* t = buf; std::istringstream is(t); - if(IsInt(buf.data(), 20) != 0) - { + if (G4UIparsing::IsInt(buf.data(), 20)) { is >> yylval.I; return CONSTINT; } - else if(IsDouble(buf.data()) != 0) - { + if (G4UIparsing::IsDouble(buf.data())) { is >> yylval.D; return CONSTDOUBLE; } - else - { - G4cerr << buf << ": numeric format error." << G4endl; - } + + G4cerr << buf << ": numeric format error." << G4endl; } buf = ""; - if((isalpha(c) != 0) || c == '_') - { // IDENTIFIER - do - { - buf += (unsigned char) c; - } while((c = G4UIpGetc()) != EOF && ((isalnum(c) != 0) || c == '_')); + if ((isalpha(c) != 0) || c == '_') { // IDENTIFIER + do { + buf += (unsigned char)c; + } while ((c = G4UIpGetc()) != EOF && ((isalnum(c) != 0) || c == '_')); G4UIpUngetc(c); - if(buf == parameterName) - { + if (buf == parameterName) { yylval.S = buf; return IDENTIFIER; } - else - { - G4cerr << buf << " is not a parameter name." << G4endl; - paramERR = 1; - } + + G4cerr << buf << " is not a parameter name." << G4endl; + paramERR = 1; } - switch(c) - { + switch (c) { case '>': - return (tokenNum) Follow('=', GE, GT); + return (tokenNum)Follow('=', GE, GT); case '<': - return (tokenNum) Follow('=', LE, LT); + return (tokenNum)Follow('=', LE, LT); case '=': - return (tokenNum) Follow('=', EQ, '='); + return (tokenNum)Follow('=', EQ, '='); case '!': - return (tokenNum) Follow('=', NE, '!'); + return (tokenNum)Follow('=', NE, '!'); case '|': - return (tokenNum) Follow('|', LOGICALOR, '|'); + return (tokenNum)Follow('|', LOGICALOR, '|'); case '&': - return (tokenNum) Follow('&', LOGICALAND, '&'); + return (tokenNum)Follow('&', LOGICALAND, '&'); default: - return (tokenNum) c; + return (tokenNum)c; } } @@ -1106,8 +646,7 @@ tokenNum G4UIparameter::Yylex() // reads input and returns token number KR486 G4int G4UIparameter::Follow(G4int expect, G4int ifyes, G4int ifno) { G4int c = G4UIpGetc(); - if(c == expect) - { + if (c == expect) { return ifyes; } G4UIpUngetc(c); @@ -1118,36 +657,28 @@ G4int G4UIparameter::Follow(G4int expect, G4int ifyes, G4int ifno) G4int G4UIparameter::G4UIpGetc() { // emulation of getc() - G4int length = (G4int)parameterRange.length(); - if(bp < length) - { - return parameterRange[bp++]; - } - else - { - return EOF; + auto length = (G4int)rangeExpression.length(); + if (bp < length) { + return rangeExpression[bp++]; } + + return EOF; } // -------------------------------------------------------------------- G4int G4UIparameter::G4UIpUngetc(G4int c) { // emulation of ungetc() - if(c < 0) - { + if (c < 0) { return -1; } - if(bp > 0 && c == parameterRange[bp - 1]) - { + if (bp > 0 && c == rangeExpression[bp - 1]) { --bp; } - else - { + else { G4cerr << "G4UIpUngetc() failed." << G4endl; - G4cerr << "bp=" << bp << " c=" << c - << " pR(bp-1)=" << parameterRange[bp - 1] << G4endl; + G4cerr << "bp=" << bp << " c=" << c << " pR(bp-1)=" << rangeExpression[bp - 1] << G4endl; paramERR = 1; return -1; } return 0; } -// ***** end of CheckNewValue() related code ****** diff --git a/source/intercoms/src/G4UIsession.cc b/source/intercoms/src/G4UIsession.cc index 62c7a149505..dc17f89717a 100644 --- a/source/intercoms/src/G4UIsession.cc +++ b/source/intercoms/src/G4UIsession.cc @@ -39,16 +39,12 @@ G4UIsession::G4UIsession() } // -------------------------------------------------------------------- -G4UIsession::G4UIsession(G4int iBatch) - : ifBatch(iBatch) -{ -} +G4UIsession::G4UIsession(G4int iBatch) : ifBatch(iBatch) {} // -------------------------------------------------------------------- G4UIsession::~G4UIsession() { - if(ifBatch == 0) - { + if (ifBatch == 0) { --inSession; } } @@ -60,9 +56,7 @@ G4UIsession* G4UIsession::SessionStart() } // -------------------------------------------------------------------- -void G4UIsession::PauseSessionStart(const G4String&) -{ -} +void G4UIsession::PauseSessionStart(const G4String&) {} // -------------------------------------------------------------------- G4int G4UIsession::InSession() @@ -70,6 +64,13 @@ G4int G4UIsession::InSession() return inSession; } +// -------------------------------------------------------------------- +G4int G4UIsession::ReceiveG4debug(const G4String& coutString) +{ + std::cout << coutString << std::flush; + return 0; +} + // -------------------------------------------------------------------- G4int G4UIsession::ReceiveG4cout(const G4String& coutString) { diff --git a/source/intercoms/src/G4UnitsMessenger.cc b/source/intercoms/src/G4UnitsMessenger.cc index d4c99d0a3f2..4c7d212026b 100644 --- a/source/intercoms/src/G4UnitsMessenger.cc +++ b/source/intercoms/src/G4UnitsMessenger.cc @@ -30,9 +30,9 @@ #include "G4UnitsMessenger.hh" -#include "G4UnitsTable.hh" -#include "G4UIdirectory.hh" #include "G4UIcmdWithoutParameter.hh" +#include "G4UIdirectory.hh" +#include "G4UnitsTable.hh" // -------------------------------------------------------------------- G4UnitsMessenger::G4UnitsMessenger() @@ -54,8 +54,7 @@ G4UnitsMessenger::~G4UnitsMessenger() // -------------------------------------------------------------------- void G4UnitsMessenger::SetNewValue(G4UIcommand* command, G4String) { - if(command == ListCmd) - { + if (command == ListCmd) { G4UnitDefinition::PrintUnitsTable(); } } diff --git a/source/intercoms/src/G4VGlobalFastSimulationManager.cc b/source/intercoms/src/G4VGlobalFastSimulationManager.cc index 9308d8b90b9..cb3289f4b98 100644 --- a/source/intercoms/src/G4VGlobalFastSimulationManager.cc +++ b/source/intercoms/src/G4VGlobalFastSimulationManager.cc @@ -30,19 +30,17 @@ #include "G4VGlobalFastSimulationManager.hh" -G4ThreadLocal G4VGlobalFastSimulationManager* - G4VGlobalFastSimulationManager::fpConcreteInstance = nullptr; +G4ThreadLocal G4VGlobalFastSimulationManager* G4VGlobalFastSimulationManager::fpConcreteInstance = + nullptr; // -------------------------------------------------------------------- -G4VGlobalFastSimulationManager* -G4VGlobalFastSimulationManager::GetConcreteInstance() +G4VGlobalFastSimulationManager* G4VGlobalFastSimulationManager::GetConcreteInstance() { return fpConcreteInstance; } // -------------------------------------------------------------------- -void G4VGlobalFastSimulationManager::SetConcreteInstance( - G4VGlobalFastSimulationManager* m) +void G4VGlobalFastSimulationManager::SetConcreteInstance(G4VGlobalFastSimulationManager* m) { fpConcreteInstance = m; } diff --git a/source/interfaces/CMakeLists.txt b/source/interfaces/CMakeLists.txt index 58af15b98dc..1e92455b53f 100644 --- a/source/interfaces/CMakeLists.txt +++ b/source/interfaces/CMakeLists.txt @@ -1,5 +1,5 @@ # - G4interfaces category build -include(basic/sources.cmake) -include(common/sources.cmake) +include(core/sources.cmake) +include(implementation/sources.cmake) -geant4_add_category(G4interfaces MODULES G4UIbasic G4UIcommon) +geant4_add_category(G4interfaces MODULES G4UIcore G4UIimplementation) diff --git a/source/interfaces/GNUmakefile b/source/interfaces/GNUmakefile deleted file mode 100644 index 022c0c80195..00000000000 --- a/source/interfaces/GNUmakefile +++ /dev/null @@ -1,30 +0,0 @@ -# ----------------------------------------------------------------------- -# GNUmakefile for interfaces. John Allison, 5/7/98. -# ----------------------------------------------------------------------- - -MAKEFLAGS= --no-print-directory - -name := G4interfaces - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -GLOBLIBS = libG4intercoms.lib libG4global.lib - -# Definition of macro for moc files (for Qt use only) -MOC_MACRO = -DG4UI_BUILD_QT_SESSION - -include $(G4INSTALL)/config/architecture.gmk -include $(G4INSTALL)/config/G4UI_BUILD.gmk -include $(G4INSTALL)/config/interactivity.gmk - -# Libraries which can be used without external packages or libraries... -ifdef G4UI_BUILD - SUBDIRS := common - SUBLIBS := G4UIcommon - SUBDIRS += basic - SUBLIBS += G4UIbasic -endif - -include $(G4INSTALL)/config/globlib.gmk diff --git a/source/interfaces/History b/source/interfaces/History index 4e4d398b38e..4d050f53b8b 100644 --- a/source/interfaces/History +++ b/source/interfaces/History @@ -6,9 +6,127 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-02-20 Igor Semeniouk (interfaces-V11-00-11) +## 2023-06-07 John Allison (interfaces-V11-01-20) +- Rework double-click using QTreeWidget::itemDoubleClicked. + - Was using QWidget::mouseDoubleClickEvent (I had not noticed the above - much better). + +## 2023-05-31 Ben Morgan (interfaces-V11-01-19) +- Remove support for Qt < 5.9 + - Clarify remaining version checks using QT_VERSION_CHECK instead of raw hex + +## 2023-05-30 John Allison (interfaces-V11-01-18) +- G4UIQt: Fix implicit size to int precision loss warnings. + +## 2023-05-18 John Allison (interfaces-V11-01-17) +- G4UIQt: Improve command - allow for leading space in pvpath. + +## 2023-05-18 John Allison (interfaces-V11-01-16) +- G4UIQt: New scene tree: Add colour choice. + - Introduce G4UIQt::NewSceneTreeItemTreeWidget::mouseDoubleClickEvent. + - Some tidying. + +## 2023-05-09 John Allison (interfaces-V11-01-15) +- Coworks: visman-V11-01-10 and greps-V11-01-04. +- G4UIQt: + - Implement callbacks SceneTreeItemExpanded and SceneTreeItemCollapsed. + +## 2023-04-26 Ben Morgan (interfaces-V11-01-14) +- Remove header no longer used in Qt5, which is also not present in Qt6 + +## 2023-04-24 Guy Barrand (interfaces-V11-01-13) +- G4UIQt: Fix QSplitter issue - necessary for Qt6. + +## 2023-04-23 John Allison (interfaces-V11-01-12) +- G4UIQt.cc: Fix compilation warning - "set but not used". + +## 2023-04-14 John Allison (interfaces-V11-01-11) +- Co-working: visman-V11-01-04, greps-V11-01-03, opengl-V11-01-06, + openinventor-V11-01-04, vis_toolssg-V11-01-05. +- New Scene Tree Phase 2 - first implementation of a no-frills GUI-side + - See visualization/management/History for full description. +- G4VInteractiveSession: + - Add virtual void UpdateSceneTree(const G4SceneTreeItem&). +- G4UIQt: + - Instrument UpdateSceneTree. + - Hitherto it was empty - now it actually does something. + - Add further functions for the "new" scene tree: +``` + // Create the "mother" widget + QWidget* CreateSceneTreeWidget(); + // Create and connect the actual tree widget + void CreateSceneTreeComponent(); + // What to do if a scene tree item is clicked + void SceneTreeItemClicked(QTreeWidgetItem* item); + // Build Physical Volume tree of touchables + void BuildPVQTree(const G4SceneTreeItem& g4stItem, QTreeWidgetItem* qtwItem); +``` + - Add new data members: +``` + QWidget* fNewSceneTreeWidget; + QTreeWidget* fSceneTreeItemTreeWidget; +``` + +## 2023-03-28 John Allison (interfaces-V11-01-10) +- G4UIQt: Introduce UpdateSceneTree(const G4SceneTreeItem&). + - Empty except for some commented out debug statements. +- sources.cmake: + - Add G4graphics_reps to the PUBLIC section of geant4_module_link_libraries. + +## 2023-03-22 Ben Morgan (interfaces-V11-01-09) +- Export public compile definitions to indicate availablity of specific UIs. Moves to + "use on link" model. + +## 2023-02-21 John Allison (interfaces-V11-01-08) +- G4UIQt: Move "smart warning" code outside mutex lock to avoid double locking. + +## 2023-02-20 Igor Semeniouk (interfaces-V11-01-07) - G4UIQt : Replace G4int by int in QT signal/slots +## 2023-02-16 John Allison (interfaces-V11-01-06) +- G4UIQt (again!): Use the same mutex for all 3 output streams. + - I had an app that hammered all 3 output streams from 8 worker threads + and the vis sub-thread simultaneously and occasionally the output to + Qt UI output window was very strange. This MR fixed it for me. + +## 2023-02-15 John Allison (interfaces-V11-01-05) +- G4UIQt.cc: Fix mutex bug in implementation of G4UIQt::ReceiveG4debug. + - Move "workaround output" (std::cout) under control of mutex. + - Limit "workaround output" to master thread. + - This "workaround" is to make sure all flushed output appears on + the terminal after a crash, because even flushed output can + get lost in the Qt UI system. + But...it seems workers write to std::cout/cerr anyway (is that a bug?), + so limit this to the master thread + - See also interfaces-V10-06-08 and interfaces-V10-06-10. + +## 2023-02-07 Ben Morgan (interfaces-V11-01-04) +- Apply clang-tidy, clang-format fixes together with public/protected/private ordering + +## 2023-01-30 Ben Morgan (interfaces-V11-01-03) +- Refactor modules into G4UIcore and G4UIimplementation to isolate core/always on + functionality from concrete UIs requiring external libraries. + - Both modules are still built into a G4interfaces library, with no change to + user interface for applications. + +## 2023-01-15 John Allison (interfaces-V11-01-02) +- Tentative implementation of user-specified output styles - /gui/outputStyle. + - Output streams: cout cerr warn error debug. + - This extendible - see G4VInteractiveSession.hh. + - Only used by G4UIQt at present. + - Based on existing design in G4UIQt. + - Some is a little specific, such as highlight in cout, which, in G4UIQt, + highlights only echoed commands, i.e., commands echoed by + "/control/verbose 2". + - A general implementation of user specified styles - including, for + example, colour, font size, italics - would be a big job. Here + we implement just a few features that have proved to be useful. + +## 2023-01-09 Ben Morgan (interfaces-V11-01-01) +- Implement ReceiveG4debug for concrete sessions. + +## 2022-12-12 Ben Morgan (interfaces-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-11-24 Gabriele Cosmo (interfaces-V11-00-10) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/interfaces/basic/GNUmakefile b/source/interfaces/basic/GNUmakefile deleted file mode 100644 index da92c3a4689..00000000000 --- a/source/interfaces/basic/GNUmakefile +++ /dev/null @@ -1,49 +0,0 @@ -# ------------------------------------------------------------- -# GNUmakefile for interfaces/basic library. John Allison, 6/7/98. - -name := G4UIbasic - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -# Definition of macro for moc files (for Qt use only) -MOC_MACRO = -DG4UI_BUILD_QT_SESSION - -# For debug mode -# CPPFLAGS += -DG4DEBUG_INTERFACES_BASIC - -include $(G4INSTALL)/config/architecture.gmk -include $(G4INSTALL)/config/G4UI_BUILD.gmk -include $(G4INSTALL)/config/interactivity.gmk - -# NO need OGL, then reset OGLGLAGS -OGLFLAGS = -OGLLIBS = - -CPPFLAGS += -I$(G4BASE)/global/management/include -CPPFLAGS += -I$(G4BASE)/interfaces/common/include -CPPFLAGS += -I$(G4BASE)/intercoms/include - -# Locally adjust source list before including common.gmk -sources := $(addprefix src/,G4UIArrayString.cc G4UIExecutive.cc G4UIcsh.cc G4UIterminal.cc G4VUIshell.cc) - -ifeq (,$(findstring WIN32,$(G4SYSTEM))) - sources += src/G4UItcsh.cc -endif - -ifdef G4UI_BUILD_XM_SESSION - sources += src/G4UIXm.cc -endif - -ifdef G4UI_BUILD_QT_SESSION - sources += src/G4UIQt.cc -endif - -ifdef G4UI_BUILD_WIN32_SESSION - sources += src/G4UIWin32.cc -endif - -include $(G4INSTALL)/config/moc.gmk -include $(G4INSTALL)/config/common.gmk - diff --git a/source/interfaces/basic/include/G4UIWin32.hh b/source/interfaces/basic/include/G4UIWin32.hh deleted file mode 100644 index 2d70e5d206d..00000000000 --- a/source/interfaces/basic/include/G4UIWin32.hh +++ /dev/null @@ -1,184 +0,0 @@ -// -// ******************************************************************** -// * 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. * -// ******************************************************************** -// -// G4UIWin32 -// -// Class description : -// -// G4UIWin32 is a class to handle a Windows interactive session. -// It is the Windows version of G4UIterminal. -// -// A command box is at disposal for entering/recalling Geant4 commands. -// A menubar could be customized through the AddMenu, AddButton methods. -// Note that there are corresponding Geant4 commands to add a -// menu in the menubar and add buttons in a menu. -// Ex : -// /gui/addMenu test Test -// /gui/addButton test Init /run/initialize -// /gui/addButton test "Set gun" "/control/execute gun.g4m" -// /gui/addButton test "Run one event" "/run/beamOn 1" -// -// Command completion, by typing "tab" key, is available on the -// command line. - -// Original author: G.Barrand, 1998 -// Revised: O.Pena-Rodriguez, March 2021 -// ------------------------------------------------------------------- -#ifndef G4UIWin32_h -#define G4UIWin32_h - -#define ID_EXIT_APP 40001 -#define ID_OPEN_MACRO 40002 -#define ID_SAVE_VIEWER_STATE 40003 -#define ID_RUN_BEAMON 40004 -#define ID_RUN_CMD 40005 -#define ID_VIEW_SOLID 40006 -#define ID_VIEW_WIREFRAME 40007 -#define ID_PROJ_ORTHOGRAPHIC 40008 -#define ID_PROJ_PERSPECTIVE 40009 -#define ID_ZOOM_IN 40010 -#define ID_ZOOM_OUT 40011 -#define ID_ORIENTATION_XY 40012 -#define ID_ORIENTATION_XZ 40013 -#define ID_ORIENTATION_YZ 40014 -#define ID_ORIENTATION_OBLIQUE 40015 -#define ID_HELP_ABOUT 40016 -#define ID_LOG_CLEAN 40017 -#define ID_LOG_SAVE 40018 - -#define NUM_BUTTONS 12 -#define MAX_HISTORY_ITEMS 10 - -#define IDC_MAIN_EDIT 101 -#define IDC_MAIN_TOOL 102 -#define IDC_MAIN_TREE_VIEW 104 -#define IDC_MAIN_COMBO 105 -#define IDC_MAIN_STATUS 106 - -#include -#include - -#include "G4VBasicShell.hh" -#include "G4VInteractiveSession.hh" - -#include "G4Win32.hh" -#include - -class G4VInteractorManager; - -class G4UIWin32 : public G4VBasicShell, public G4VInteractiveSession -{ - public: - - G4UIWin32(); - ~G4UIWin32() override; - - // To enter interactive Win32 loop ; waiting/executing command,... - G4UIsession* SessionStart() override; - - // To add a pulldown menu in the menu bar. - // First argument is the name of the menu. - // Second argument is the label of the cascade button. - // Ex : AddMenu("my_menu","My menu") - void AddMenu(const char*, const char*) override; - - // To add a push button in a pulldown menu. - // First argument is the name of the menu. - // Second argument is the label of the button. - // Third argument is the Geant4 command executed when the button is fired. - // Ex : AddButton("my_menu","Run","/run/beamOn 1"); - void AddButton(const char*, const char*, const char*) override; - - void Prompt(const G4String&); - void SessionTerminate(); - void PauseSessionStart(const G4String&) override; - - G4int ReceiveG4cout(const G4String&) override; - G4int ReceiveG4cerr(const G4String&) override; - - G4String GetCommand(G4int); - //void TextAppendString(char*); - - private: - - void SecondaryLoop(const G4String&); - G4bool GetHelpChoice(G4int&) override; - void ExitHelp() const override; - - G4bool CreateComponents(HWND); - G4bool ResizeComponents(HWND); - void ProcessTabKey(); - void ProcessEscKey(); - void ProcessEnterKey(); - void ProcessUpKey(); - void ProcessDownKey(); - - G4bool ProcessDefaultCommands(G4int); - static G4String GetToolTips(G4int); - G4String GetHelpTreeToolTips(HTREEITEM); - - static G4String ConvertNewLines(G4String); - - void HelpTreeDoubleClick(HTREEITEM); - - G4bool SaveLogFile(LPCTSTR); - void AddText(LPSTR); - - void DoOpenMacro(HWND); - void DoSaveViewer(HWND); - void DoSaveLog(HWND); - - G4bool InitHelpTreeItems(); - HTREEITEM AddItemToHelpTree(LPTSTR, HTREEITEM = TVI_ROOT); - static G4String GetShortCommandPath(G4String); - LPSTR GetItemPath(HTREEITEM); - - void CreateHelpTree(HTREEITEM, G4UIcommandTree*); - - private: - - HWND fHWndMainWindow; - HWND fHWndEditor; - HWND fHWndToolBar; - HWND fHWndComboBox; - HWND fHWndComboEditor; - HWND fHWndHelpTree; - HWND fHWndStatus; - - G4VInteractorManager* interactorManager; - HMENU menuBar; - std::map > commands; - - static LRESULT CALLBACK MainWindowProc(HWND, UINT, WPARAM, LPARAM); - // New wndproc for the combo box - static LRESULT CALLBACK ComboEditorWindowProc(HWND, UINT, WPARAM, LPARAM); - - G4bool fHelp; - G4int fHelpChoice; - std::vector fHistory; - G4int fHistoryPos; -}; - -#endif diff --git a/source/interfaces/basic/sources.cmake b/source/interfaces/basic/sources.cmake deleted file mode 100644 index 8faeac1a36c..00000000000 --- a/source/interfaces/basic/sources.cmake +++ /dev/null @@ -1,53 +0,0 @@ -# - G4UIbasic module build definition - -# Define the Geant4 Module. -geant4_add_module(G4UIbasic - PUBLIC_HEADERS - G4UIArrayString.hh - G4UIExecutive.hh - G4UIcsh.hh - G4UIterminal.hh - G4VUIshell.hh - SOURCES - G4UIArrayString.cc - G4UIExecutive.cc - G4UIcsh.cc - G4UIterminal.cc - G4VUIshell.cc) - -geant4_module_link_libraries(G4UIbasic - PUBLIC - G4UIcommon - G4intercoms - G4globman - ${timemory_LIBRARIES}) - -# Tcsh only on UNIX style systems, but always built here -if(UNIX) - geant4_module_sources(G4UIbasic PUBLIC_HEADERS G4UItcsh.hh SOURCES G4UItcsh.cc) -endif() - -# Win32 terminal only for MSVC builds, but always built here -if(MSVC) - geant4_module_sources(G4UIbasic PUBLIC_HEADERS G4UIWin32.hh SOURCES G4UIWin32.cc) - geant4_module_compile_definitions(G4UIbasic PRIVATE G4UI_BUILD_WIN32_SESSION) - geant4_module_link_libraries(G4UIbasic PUBLIC COMCTL32) -endif() - -# Qt only if selected. -if(GEANT4_USE_QT) - geant4_module_sources(G4UIbasic PUBLIC_HEADERS G4UIQt.hh SOURCES G4UIQt.cc) - geant4_module_compile_definitions(G4UIbasic PRIVATE G4UI_BUILD_QT_SESSION) - geant4_module_link_libraries(G4UIbasic PUBLIC Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Core) -endif() - -# Xm and only on UNIX and if selected -if(UNIX AND GEANT4_USE_XM) - geant4_module_sources(G4UIbasic PUBLIC_HEADERS G4UIXm.hh SOURCES G4UIXm.cc) - geant4_module_compile_definitions(G4UIbasic PUBLIC G4UI_BUILD_XM_SESSION) - geant4_module_link_libraries(G4UIbasic - PUBLIC - Motif::Xm - X11::SM X11::ICE X11::X11 X11::Xext X11::Xmu X11::Xt) -endif() - diff --git a/source/interfaces/basic/src/G4UIWin32.cc b/source/interfaces/basic/src/G4UIWin32.cc deleted file mode 100644 index b1705aa8627..00000000000 --- a/source/interfaces/basic/src/G4UIWin32.cc +++ /dev/null @@ -1,1309 +0,0 @@ -// -// ******************************************************************** -// * 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. * -// ******************************************************************** -// -// Original author: G.Barrand, 1998 -// Rewrite: O.Pena-Rodriguez, March 2021 -// -------------------------------------------------------------------- - -#include "G4UIWin32.hh" - -#include -#include - -#include -#include -#include - -#include "G4UImanager.hh" -#include "G4UIcommand.hh" -#include "G4StateManager.hh" -#include "G4UIcommandTree.hh" -#include "G4MTcoutDestination.hh" -#include "G4Win32.hh" - - -/***************************************************************************/ -static char mainClassName[] = "G4UIWin32"; -static G4bool exitSession = true; -static G4bool exitPause = true; -static G4bool exitHelp = true; -static G4UIsession* tmpSession = nullptr; - -// Original wndproc for the Combo Editor -static WNDPROC origComboEditorWindowProc; - -static G4bool ConvertStringToInt(const char*, G4int&); - -static G4int actionIdentifier = 0; - - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -G4UIWin32::G4UIWin32() - : fHWndMainWindow(nullptr), fHWndEditor(nullptr), - fHWndToolBar(nullptr), fHWndComboBox(nullptr), - fHWndComboEditor(nullptr), fHWndHelpTree(nullptr), - fHWndStatus(nullptr), menuBar(nullptr), - fHelp(false), fHelpChoice(0), fHistoryPos(-1) { - - G4UImanager* UI = G4UImanager::GetUIpointer(); - if (UI != nullptr) { - UI->SetSession(this); - UI->SetG4UIWindow(this); - } - - // Ensure that the common control DLL is loaded - INITCOMMONCONTROLSEX commCtrls; - commCtrls.dwSize = sizeof(INITCOMMONCONTROLSEX); - commCtrls.dwICC = ICC_BAR_CLASSES | ICC_LISTVIEW_CLASSES; - // this loads list-view and toolbar classes. - InitCommonControlsEx(&commCtrls); - - interactorManager = G4Win32::getInstance(); - - static G4bool Done = false; - if (!Done) { - WNDCLASS wc; - wc.style = 0; - wc.lpfnWndProc = (WNDPROC) G4UIWin32::MainWindowProc; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = ::GetModuleHandle(nullptr); - wc.hIcon = LoadIcon(nullptr, IDI_APPLICATION); - wc.hCursor = LoadCursor(nullptr, IDC_ARROW); - wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); - wc.lpszMenuName = mainClassName; - wc.lpszClassName = mainClassName; - - if (!RegisterClass(&wc)) { - MessageBox(nullptr, "G4UIWin32: Win32 window registration failed!", "Error!", MB_ICONEXCLAMATION | MB_OK); - G4cout << "G4UIWin32: Win32 window registration failed!" << G4endl; - return; - } - - Done = true; - } - - menuBar = CreateMenu(); - - // Add some initial options to the menu - HMENU hMenu = CreatePopupMenu(); - AppendMenu(menuBar, MF_POPUP, (UINT_PTR) hMenu, "&Geant4"); - AddInteractor("Geant4", (G4Interactor) hMenu); - - AppendMenu(hMenu, MF_STRING, ID_OPEN_MACRO, "&Open macro..."); - AppendMenu(hMenu, MF_STRING, ID_SAVE_VIEWER_STATE, "&Save viewer state..."); - AppendMenu(hMenu, MF_SEPARATOR, -1, ""); - AppendMenu(hMenu, MF_STRING, ID_RUN_BEAMON, "&Beam On"); - AppendMenu(hMenu, MF_SEPARATOR, -1, ""); - AppendMenu(hMenu, MF_STRING, ID_EXIT_APP, "E&xit"); - - hMenu = CreatePopupMenu(); - AppendMenu(menuBar, MF_POPUP, (UINT_PTR) hMenu, "&View"); - AddInteractor("View", (G4Interactor) hMenu); - - AppendMenu(hMenu, MF_STRING, ID_VIEW_SOLID, "S&olid"); - AppendMenu(hMenu, MF_STRING, ID_VIEW_WIREFRAME, "&Wireframe"); - AppendMenu(hMenu, MF_SEPARATOR, -1, ""); - AppendMenu(hMenu, MF_STRING, ID_PROJ_ORTHOGRAPHIC, "&Orthographic"); - AppendMenu(hMenu, MF_STRING, ID_PROJ_PERSPECTIVE, "P&erspective"); - AppendMenu(hMenu, MF_SEPARATOR, -1, ""); - AppendMenu(hMenu, MF_STRING, ID_ORIENTATION_XY, "&X-Y Plane"); - AppendMenu(hMenu, MF_STRING, ID_ORIENTATION_XZ, "X-&Z Plane"); - AppendMenu(hMenu, MF_STRING, ID_ORIENTATION_YZ, "&Y-Z Plane"); - AppendMenu(hMenu, MF_STRING, ID_ORIENTATION_OBLIQUE, "&Oblique"); - - hMenu = CreatePopupMenu(); - AppendMenu(menuBar, MF_POPUP, (UINT_PTR) hMenu, "&Zoom"); - AddInteractor("Zoom", (G4Interactor) hMenu); - - AppendMenu(hMenu, MF_STRING, ID_ZOOM_IN, "Zoom &In"); - AppendMenu(hMenu, MF_STRING, ID_ZOOM_OUT, "Zoom &Out"); - - tmpSession = this; - fHWndMainWindow = ::CreateWindowEx(WS_EX_CLIENTEDGE, mainClassName, "Geant4", - WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, - CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, - nullptr, menuBar, - ::GetModuleHandle(nullptr), nullptr); - - if (fHWndMainWindow == nullptr) { - MessageBox(nullptr, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK); - return; - } - tmpSession = nullptr; - ::SetWindowLongPtr(fHWndMainWindow, GWLP_USERDATA, (LONG_PTR) this); - - ::SetForegroundWindow(fHWndMainWindow); - ::ShowWindow(fHWndMainWindow, SW_SHOWDEFAULT); - ::UpdateWindow(fHWndMainWindow); - - if (UI != nullptr) UI->SetCoutDestination(this); - -// TODO: Manage multithreaded output -//#ifdef G4MULTITHREADED - // explicitly request that cout/cerr messages from threads are ALSO propagated to the master. - //masterG4coutDestination = this; -//#endif -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -G4UIWin32::~G4UIWin32() { - G4UImanager* UI = G4UImanager::GetUIpointer(); - if (UI != nullptr) { - UI->SetSession(nullptr); - UI->SetG4UIWindow(nullptr); - UI->SetCoutDestination(nullptr); - } - -// TODO: Manage multithreaded output -//#ifdef G4MULTITHREADED - //masterG4coutDestination = 0; // set to cout when UI is deleted -//#endif - - if (fHWndStatus != nullptr) ::SetWindowLongPtr(fHWndStatus, GWLP_USERDATA, LONG(NULL)); - if (fHWndHelpTree != nullptr) ::SetWindowLongPtr(fHWndHelpTree, GWLP_USERDATA, LONG(NULL)); - if (fHWndComboBox != nullptr) ::SetWindowLongPtr(fHWndComboBox, GWLP_USERDATA, LONG(NULL)); - if (fHWndToolBar != nullptr) ::SetWindowLongPtr(fHWndToolBar, GWLP_USERDATA, LONG(NULL)); - if (fHWndEditor != nullptr) ::SetWindowLongPtr(fHWndEditor, GWLP_USERDATA, LONG(NULL)); - if (fHWndMainWindow != nullptr) { - ::SetWindowLongPtr(fHWndMainWindow, GWLP_USERDATA, LONG(NULL)); - ::DestroyWindow(fHWndMainWindow); - } -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -G4UIsession* G4UIWin32::SessionStart() { - if (interactorManager != nullptr) { - Prompt("session"); - exitSession = false; - - // TODO: Ensure that the list of commands is updated - // Load commands into Help Tree View - InitHelpTreeItems(); - - interactorManager->DisableSecondaryLoop(); - void* event; - while ((event = interactorManager->GetEvent()) != nullptr) { - interactorManager->DispatchEvent(event); - if (exitSession) break; - } - interactorManager->EnableSecondaryLoop(); - return this; - } else return this; -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -void G4UIWin32::Prompt(const G4String& a_prompt) {} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -void G4UIWin32::SessionTerminate() {} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -void G4UIWin32::PauseSessionStart(const G4String& a_state) { - if (a_state == "G4_pause> ") { - SecondaryLoop("Pause, type continue to exit this state"); - } - - if (a_state == "EndOfEvent") { - // Picking with feed back in event data Done here !!! - SecondaryLoop("End of event, type continue to exit this state"); - } -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -void G4UIWin32::SecondaryLoop(const G4String& a_prompt) { - if (interactorManager != nullptr) { - Prompt(a_prompt); - exitPause = false; - void* event; - while ((event = interactorManager->GetEvent()) != nullptr) { - interactorManager->DispatchEvent(event); - if (exitPause) break; - } - Prompt("session"); - } -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -G4int G4UIWin32::ReceiveG4cout(const G4String& a_string) { - // Geant4 uses UNIX's style for new lines (\n) - // we must convert them to Windows' style (\r\n) - G4String str = ConvertNewLines(a_string); - - AddText((LPSTR) str.data()); - - return 0; -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -G4int G4UIWin32::ReceiveG4cerr(const G4String& a_string) { - // Geant4 uses UNIX's style for new lines (\n) - // we must convert them to Windows' style (\r\n) - G4String str = ConvertNewLines(a_string); - - AddText((LPSTR) str.data()); - - return 0; -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -G4bool G4UIWin32::GetHelpChoice(G4int& aInt) { - fHelp = true; - - if (interactorManager != nullptr) { - Prompt("Help"); - exitHelp = false; - void* event; - while ((event = interactorManager->GetEvent()) != nullptr) { - interactorManager->DispatchEvent(event); - if (exitHelp) break; - } - Prompt("session"); - // - if (!fHelp) return false; - aInt = fHelpChoice; - fHelp = false; - return true; - } else return false; -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -void G4UIWin32::ExitHelp() const {} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -void G4UIWin32::AddMenu(const char* a_name, const char* a_label) { - if (a_name != nullptr) { - HMENU hMenu = CreatePopupMenu(); - AppendMenu(menuBar, MF_POPUP, (UINT_PTR) hMenu, a_label); - AddInteractor(a_name, (G4Interactor) hMenu); - DrawMenuBar(fHWndMainWindow); - } -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -void G4UIWin32::AddButton(const char* a_menu, - const char* a_label, - const char* a_command) { - - if ((a_menu != nullptr) && (a_label != nullptr) && (a_command != nullptr)) { - HMENU hMenu = (HMENU) GetInteractor(a_menu); - actionIdentifier++; - commands[actionIdentifier] = a_command; - AppendMenu(hMenu, MF_STRING, actionIdentifier, a_label); - } -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -G4String G4UIWin32::GetCommand(G4int a_id) { - return commands[a_id]; -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -LRESULT CALLBACK G4UIWin32::MainWindowProc(HWND aWindow, UINT aMessage, - WPARAM wParam, LPARAM lParam) { - switch (aMessage) { - case WM_CREATE: { - auto* This = (G4UIWin32*) tmpSession; - if (This != nullptr) { - if (!This->CreateComponents(aWindow)) { - MessageBox(aWindow, "Could not create components.", "Error", MB_OK | MB_ICONERROR); - return false; - } - } - } return 0; - - case WM_SIZE: { - auto* This = (G4UIWin32*) ::GetWindowLongPtr(aWindow, GWLP_USERDATA); - if (This != nullptr) { - if (!This->ResizeComponents(aWindow)) { - MessageBox(aWindow, "Could not resize components.", "Error", MB_OK | MB_ICONERROR); - return false; - } - } - } return 0; - - case WM_CLOSE: - DestroyWindow(aWindow); - return 0; - - case WM_DESTROY: - PostQuitMessage(0); - return 0; - - case WM_SETFOCUS: { - auto* This = (G4UIWin32*) ::GetWindowLongPtr(aWindow, GWLP_USERDATA); - if (This != nullptr) - SetFocus(This->fHWndComboBox); - } return 0; - - case WM_NOTIFY: { - auto* This = (G4UIWin32*) ::GetWindowLongPtr(aWindow, GWLP_USERDATA); - if (This != nullptr) { - switch (((LPNMHDR) lParam)->code) { - // Tooltip for Toolbar - case TTN_NEEDTEXT: { - auto lpttt = (LPTOOLTIPTEXT) lParam; - lpttt->hinst = nullptr; - UINT idButton = lpttt->hdr.idFrom; - lpttt->lpszText = (LPSTR) This->GetToolTips(idButton).c_str(); - } break; - - // Tooltip for TreeView - case TVN_GETINFOTIP: { - auto pTip = (LPNMTVGETINFOTIP) lParam; - pTip->pszText = (LPSTR) This->GetHelpTreeToolTips(pTip->hItem).c_str(); - } break; - - // Double click for TreeView - case NM_DBLCLK: { - auto lpnmh = (LPNMHDR) lParam; - auto item = TreeView_GetSelection(lpnmh->hwndFrom); - This->HelpTreeDoubleClick(item); - } break; - } - } - } return 0; - - case WM_COMMAND: { - auto* This = (G4UIWin32*) ::GetWindowLongPtr(aWindow, GWLP_USERDATA); - if (This != nullptr) - if (!This->ProcessDefaultCommands(LOWORD(wParam))) - // If the command was not processed, do it now - switch (LOWORD(wParam)) { - case IDC_MAIN_EDIT: { - // We have to release some space when the buffer is full - if (HIWORD(wParam) == EN_ERRSPACE || HIWORD(wParam) == EN_MAXTEXT) { - G4int bufferSize = SendMessage(This->fHWndEditor, EM_GETLIMITTEXT, - (WPARAM) 0, (LPARAM) 0); - - // Select the first third of the text - SendMessage(This->fHWndEditor, EM_SETSEL, (WPARAM) 0, (LPARAM) bufferSize/3); - // Delete it - SendMessage(This->fHWndEditor, EM_REPLACESEL, (WPARAM) 0, (LPARAM) ""); - // Scroll to the bottom - SendMessage(This->fHWndEditor, WM_VSCROLL, SB_BOTTOM, NULL); - } - } - break; - default: - if (!This->fHelp) { - G4String command = This->GetCommand(wParam); - This->ApplyShellCommand(command, exitSession, exitPause); - } - } - } return 0; - default: - // For all the other cases, call the default window procedure. - return DefWindowProc(aWindow, aMessage, wParam, lParam); - } -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -LRESULT CALLBACK G4UIWin32::ComboEditorWindowProc(HWND aWindow, UINT aMessage, WPARAM wParam, LPARAM lParam) { - - // We need to go two steps up: Editor -> ComboBox -> Window - HWND parent = GetParent(GetParent(aWindow)); - auto* This = (G4UIWin32*) ::GetWindowLongPtr(parent, GWLP_USERDATA); - - switch (aMessage) { - case WM_KEYDOWN: - switch (wParam) { - case VK_TAB: { - if (This != nullptr) { - if (This->fHelp) break; - - This->ProcessTabKey(); - } - } return 0; //Do not jump into origComboEditorWindowProc. - - case VK_ESCAPE: { - if (This != nullptr) - This->ProcessEscKey(); - } return 0; //Do not jump into origComboEditorWindowProc. - - case VK_RETURN: { - if (This != nullptr) - This->ProcessEnterKey(); - } return 0; //Do not jump into origComboEditorWindowProc. - - case VK_UP: { - if (This != nullptr) - This->ProcessUpKey(); - } return 0; //Do not jump into origComboEditorWindowProc. - - case VK_DOWN: { - if (This != nullptr) - This->ProcessDownKey(); - } return 0; //Do not jump into origComboEditorWindowProc. - } - break; - - case WM_KEYUP: - case WM_CHAR: - switch (wParam) { - case VK_TAB: - case VK_ESCAPE: - case VK_RETURN: - case VK_UP: - case VK_DOWN: - return 0; //Do not jump into origComboEditorWindowProc. - } - } - - // Call the original window procedure for default processing. - return CallWindowProc(origComboEditorWindowProc, aWindow, aMessage, wParam, lParam); -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -G4bool G4UIWin32::CreateComponents(HWND aWindow) { - HFONT hfDefault; - TBBUTTON tbb[NUM_BUTTONS]; - TBADDBITMAP tbab; - RECT rcClient; // dimensions of client area - - G4int statwidths[] = {100, -1}; - - // Create Edit Control - fHWndEditor = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", - WS_CHILD | WS_VISIBLE | WS_VSCROLL | - WS_HSCROLL | ES_MULTILINE | - ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY, - 0, 0, 100, 100, aWindow, (HMENU) IDC_MAIN_EDIT, - GetModuleHandle(nullptr), nullptr); - if (fHWndEditor == nullptr) - MessageBox(aWindow, "Could not create edit box.", "Error", MB_OK | MB_ICONERROR); - - // Set editor font - //hfDefault = (HFONT) GetStockObject(DEFAULT_GUI_FONT); - hfDefault = CreateFont(-10, -8, 0, 0, 0, false, 0, 0, OEM_CHARSET, - OUT_RASTER_PRECIS, CLIP_DEFAULT_PRECIS, - DEFAULT_QUALITY, FIXED_PITCH, "System"); - SendMessage(fHWndEditor, WM_SETFONT, (WPARAM) hfDefault, MAKELPARAM(false, 0)); - - // Set editor's buffer size (the default value is too small) - SendMessage(fHWndEditor, EM_SETLIMITTEXT, (WPARAM) 500000, (LPARAM) 0); - - // Create Toolbar - fHWndToolBar = CreateWindowEx(0, TOOLBARCLASSNAME, nullptr, - WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT | - TBSTYLE_TOOLTIPS, 0, 0, 0, 0, - aWindow, (HMENU) IDC_MAIN_TOOL, - GetModuleHandle(nullptr), nullptr); - if (fHWndToolBar == nullptr) - MessageBox(aWindow, "Could not create tool bar.", "Error", MB_OK | MB_ICONERROR); - - // Required for backward compatibility. - SendMessage(fHWndToolBar, TB_BUTTONSTRUCTSIZE, (WPARAM) sizeof(TBBUTTON), (LPARAM) 0); - - // Load standard images - tbab.hInst = HINST_COMMCTRL; - tbab.nID = IDB_STD_SMALL_COLOR; - SendMessage(fHWndToolBar, TB_ADDBITMAP, (WPARAM) 0, (LPARAM) &tbab); - - // Load history images - tbab.hInst = HINST_COMMCTRL; - tbab.nID = IDB_HIST_SMALL_COLOR; - SendMessage(fHWndToolBar, TB_ADDBITMAP, (WPARAM) 0, (LPARAM) &tbab); - - G4int btnBMP[NUM_BUTTONS] = {STD_FILEOPEN, STD_FILESAVE, -1, - STD_FIND, STD_FIND, -1, - 15 + HIST_FORWARD, -1, - STD_HELP, -1, - STD_FILENEW, STD_FILESAVE}; - G4int btnSTL[NUM_BUTTONS] = {TBSTYLE_BUTTON, TBSTYLE_BUTTON, TBSTYLE_SEP, - TBSTYLE_BUTTON, TBSTYLE_BUTTON, TBSTYLE_SEP, - TBSTYLE_BUTTON, TBSTYLE_SEP, - TBSTYLE_BUTTON, TBSTYLE_SEP, - TBSTYLE_BUTTON, TBSTYLE_BUTTON}; - G4int btnCMD[NUM_BUTTONS] = {ID_OPEN_MACRO, ID_SAVE_VIEWER_STATE, -1, - ID_ZOOM_IN, ID_ZOOM_OUT, -1, - ID_RUN_BEAMON, -1, - ID_HELP_ABOUT, -1, - ID_LOG_CLEAN, ID_LOG_SAVE}; - ZeroMemory(tbb, sizeof(tbb)); - for (G4int i = 0; i < NUM_BUTTONS; i++) { - tbb[i].iBitmap = btnBMP[i]; - tbb[i].fsState = TBSTATE_ENABLED; - tbb[i].fsStyle = btnSTL[i]; - tbb[i].idCommand = btnCMD[i]; - } - - SendMessage(fHWndToolBar, TB_ADDBUTTONS, sizeof(tbb)/sizeof(TBBUTTON), (LPARAM) &tbb); - - // Create the Combobox - fHWndComboBox = CreateWindowEx(0, WC_COMBOBOX, TEXT(""), - CBS_DROPDOWN | CBS_HASSTRINGS | WS_CHILD | - WS_OVERLAPPED | WS_VISIBLE, - 150, 0, 200, 200, aWindow, (HMENU) IDC_MAIN_COMBO, - GetModuleHandle(nullptr), nullptr); - - // Display an initial item in the selection field - SendMessage(fHWndComboBox, CB_SETCURSEL, (WPARAM) 2, (LPARAM) 0); - - //Get aWindow of edit control in combobox created earlier. - fHWndComboEditor = FindWindowEx(fHWndComboBox, nullptr, WC_EDIT, nullptr); - - // Change the window procedure for the edit windows to the subclass procedure. - origComboEditorWindowProc = (WNDPROC) SetWindowLongPtr(fHWndComboEditor, GWLP_WNDPROC, - (LONG_PTR) ComboEditorWindowProc); - - // Create TreeView - - // Get the dimensions of the parent window's client area, and create - // the tree-view control. - GetClientRect(aWindow, &rcClient); - fHWndHelpTree = CreateWindowEx(0, WC_TREEVIEW, - TEXT("Tree View"), - WS_VISIBLE | WS_CHILD | WS_BORDER | TVS_INFOTIP | - TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT, - 0, 0, - rcClient.right, rcClient.bottom, - aWindow, (HMENU) IDC_MAIN_TREE_VIEW, - GetModuleHandle(nullptr), nullptr); - - // Initialize the Help Tree View. -/* if (!InitHelpTreeItems()) { - DestroyWindow(fHWndHelpTree); - return false; - }*/ - - // Create Status bar - fHWndStatus = CreateWindowEx(0, STATUSCLASSNAME, nullptr, - WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP, - 100, 100, 200, 200, - aWindow, (HMENU) IDC_MAIN_STATUS, - GetModuleHandle(nullptr), nullptr); - - SendMessage(fHWndStatus, SB_SETPARTS, sizeof(statwidths)/sizeof(int), (LPARAM) statwidths); - //SendMessage(fHWndStatus, SB_SETTEXT, 0, (LPARAM) "Hi there :)"); - - return true; -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -G4bool G4UIWin32::ResizeComponents(HWND aWindow) { - RECT rcTool; - G4int iToolHeight, iToolWidth; - - RECT rcStatus; - G4int iStatusHeight; - - RECT rcComboBox; - G4int iComboBoxHeight; - - G4int iTreeViewHeight, iTreeViewWidth; - G4int iEditHeight, iEditWidth; - - RECT rcClient; - - // Size toolbar and get height and width - SendMessage(fHWndToolBar, TB_AUTOSIZE, 0, 0); - - GetWindowRect(fHWndToolBar, &rcTool); - iToolHeight = rcTool.bottom - rcTool.top; - iToolWidth = rcTool.right - rcTool.left; - - // Size status bar and get height - SendMessage(fHWndStatus, WM_SIZE, 0, 0); - - GetWindowRect(fHWndStatus, &rcStatus); - iStatusHeight = rcStatus.bottom - rcStatus.top; - - // Size status the Combo Box and get height - SendMessage(fHWndComboBox, WM_SIZE, 0, 0); - - GetWindowRect(fHWndComboBox, &rcComboBox); - iComboBoxHeight = rcComboBox.bottom - rcComboBox.top; - - // Calculate remaining height and size edit - GetClientRect(aWindow, &rcClient); - - iTreeViewHeight = rcClient.bottom - iToolHeight - iStatusHeight; - iTreeViewWidth = iToolWidth/4; - - iEditHeight = rcClient.bottom - iToolHeight - iComboBoxHeight - iStatusHeight; - iEditWidth = iToolWidth - iTreeViewWidth; - - // TreeView location and size - SetWindowPos(fHWndHelpTree, nullptr, 0, iToolHeight, - iTreeViewWidth, iTreeViewHeight, SWP_NOZORDER); - - // Editor location and size - SetWindowPos(fHWndEditor, nullptr, iTreeViewWidth, iToolHeight, - iEditWidth, iEditHeight, SWP_NOZORDER); - - // ComboBox location and size - SetWindowPos(fHWndComboBox, nullptr, iTreeViewWidth, iToolHeight + iEditHeight, - iEditWidth, 200, 0); - - return true; -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -void G4UIWin32::ProcessTabKey() { - char buffer[256]; - - // Only process the command it the user has written something - if (SendMessage(fHWndComboBox, WM_GETTEXT, (WPARAM) sizeof(buffer), (LPARAM) buffer) != 0) { - G4String command(buffer); - - SetFocus(fHWndComboBox); - - G4String cmd = Complete(command); - const char* d = cmd.data(); - G4int l = strlen(d); - Edit_SetText(fHWndComboEditor, d); - Edit_SetSel(fHWndComboEditor, l, l); - } else { - if (GetFocus() == fHWndComboEditor) - SetFocus(fHWndHelpTree); - else - SetFocus(fHWndComboBox); - } -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -void G4UIWin32::ProcessEscKey() { - // Clear the current selection. - SendMessage(fHWndComboBox, CB_SETCURSEL, (WPARAM) (-1), (LPARAM) 0); - // Set the focus to the Combo Box. - SetFocus(fHWndComboBox); -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -void G4UIWin32::ProcessEnterKey() { - char buffer[256]; - DWORD dwIndex, numItems; - - // Only process the command it the user has written something - if (SendMessage(fHWndComboBox, WM_GETTEXT, (WPARAM) sizeof(buffer), (LPARAM) buffer) != 0) { - SetFocus(fHWndComboBox); - - // Read command - G4String command(buffer); - - // Now clear the current selection. - SendMessage(fHWndComboBox, CB_SETCURSEL, (WPARAM) -1, (LPARAM) 0); - - if (fHelp) { - exitHelp = true; - fHelp = ConvertStringToInt(command.data(), fHelpChoice); - } else { - fHistory.push_back(command); - fHistoryPos = -1; - ApplyShellCommand(command, exitSession, exitPause); - - // Now update the history in the ComboBox - - // Check if this command exists in the ComboBox - dwIndex = SendMessage(fHWndComboBox, CB_FINDSTRINGEXACT, (WPARAM) (-1), (LPARAM) buffer); - - // Add the string, if necessary - if (dwIndex == CB_ERR) - dwIndex = SendMessage(fHWndComboBox, CB_INSERTSTRING, (WPARAM) 0, (LPARAM) buffer); - // If the string exists, move it to the first position - if (dwIndex != CB_ERR) { - SendMessage(fHWndComboBox, CB_DELETESTRING, (WPARAM) dwIndex, (LPARAM) 0); - dwIndex = SendMessage(fHWndComboBox, CB_INSERTSTRING, (WPARAM) 0, (LPARAM) buffer); - } - - numItems = SendMessage(fHWndComboBox, CB_GETCOUNT, (WPARAM) 0, (LPARAM) 0); - while (numItems > MAX_HISTORY_ITEMS) { - SendMessage(fHWndComboBox, CB_DELETESTRING, (WPARAM) (numItems - 1), (LPARAM) 0); - numItems = SendMessage(fHWndComboBox, CB_GETCOUNT, (WPARAM) 0, (LPARAM) 0); - } - } - } -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -void G4UIWin32::ProcessUpKey() { - G4int pos = fHistoryPos == -1 ? - fHistory.size() - 1: fHistoryPos - 1; - if ((pos >= 0) && (pos < (G4int) fHistory.size())) { - G4String command = fHistory[pos]; - const char* d = command.data(); - G4int l = strlen(d); - Edit_SetText(fHWndComboEditor, d); - Edit_SetSel(fHWndComboEditor, l, l); - - fHistoryPos = pos; - } -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -void G4UIWin32::ProcessDownKey() { - G4int pos = fHistoryPos + 1; - if ((pos >= 0) && (pos < (G4int) fHistory.size())) { - G4String command = fHistory[pos]; - const char* d = command.data(); - G4int l = strlen(d); - Edit_SetText(fHWndComboEditor, d); - Edit_SetSel(fHWndComboEditor, l, l); - - fHistoryPos = pos; - } else if (pos >= (G4int) fHistory.size()) { - Edit_SetText(fHWndComboEditor, ""); - Edit_SetSel(fHWndComboEditor, 0, 0); - - fHistoryPos = -1; - } -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -G4bool G4UIWin32::ProcessDefaultCommands(G4int idCommand) { - switch (idCommand) { - case ID_EXIT_APP: - PostMessage(fHWndMainWindow, WM_CLOSE, 0, 0); - return true; - case ID_OPEN_MACRO: - DoOpenMacro(fHWndMainWindow); - return true; - case ID_SAVE_VIEWER_STATE: - DoSaveViewer(fHWndMainWindow); - return true; - case ID_RUN_BEAMON: - if(!fHelp) { - G4String command = "/run/beamOn 1"; - ApplyShellCommand(command,exitSession,exitPause); - } return true; - case ID_RUN_CMD: - return true; - case ID_VIEW_SOLID: - if(!fHelp) { - G4String command = "/vis/viewer/set/style s"; - ApplyShellCommand(command,exitSession,exitPause); - } return true; - case ID_VIEW_WIREFRAME: - if(!fHelp) { - G4String command = "/vis/viewer/set/style w"; - ApplyShellCommand(command,exitSession,exitPause); - } return true; - case ID_PROJ_ORTHOGRAPHIC: - if(!fHelp) { - G4String command = "/vis/viewer/set/projection o"; - ApplyShellCommand(command,exitSession,exitPause); - } return true; - case ID_PROJ_PERSPECTIVE: - if(!fHelp) { - G4String command = "/vis/viewer/set/projection p"; - ApplyShellCommand(command,exitSession,exitPause); - } return true; - case ID_ZOOM_IN: - if(!fHelp) { - G4String command = "/vis/viewer/zoom 1.2"; - ApplyShellCommand(command,exitSession,exitPause); - } return true; - case ID_ZOOM_OUT: - if(!fHelp) { - G4String command = "/vis/viewer/zoom 0.8"; - ApplyShellCommand(command,exitSession,exitPause); - } return true; - case ID_ORIENTATION_XY: - if(!fHelp) { - G4String command = "/vis/viewer/set/viewpointThetaPhi 0. 0."; - ApplyShellCommand(command,exitSession,exitPause); - } return true; - case ID_ORIENTATION_XZ: - if(!fHelp) { - G4String command = "/vis/viewer/set/viewpointThetaPhi 90. 0."; - ApplyShellCommand(command,exitSession,exitPause); - } return true; - case ID_ORIENTATION_YZ: - if(!fHelp) { - G4String command = "/vis/viewer/set/viewpointThetaPhi 0. 90."; - ApplyShellCommand(command,exitSession,exitPause); - } return true; - case ID_ORIENTATION_OBLIQUE: - if(!fHelp) { - G4String command = "/vis/viewer/set/viewpointThetaPhi 45. -45."; - ApplyShellCommand(command,exitSession,exitPause); - } return true; - case ID_HELP_ABOUT: - return true; - case ID_LOG_CLEAN: - SetDlgItemText(fHWndMainWindow, IDC_MAIN_EDIT, ""); - return true; - case ID_LOG_SAVE: - DoSaveLog(fHWndMainWindow); - return true; - default: - return false; - } -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -G4String G4UIWin32::GetToolTips(G4int idButton) { - switch (idButton) { - case ID_OPEN_MACRO: - return "Open and execute macro file"; - - case ID_SAVE_VIEWER_STATE: - return "Save viewer state"; - - case ID_ZOOM_IN: - return "Zoom in"; - - case ID_ZOOM_OUT: - return "Zoom out"; - - case ID_RUN_BEAMON: - return "Beam on (one particle)"; - - case ID_HELP_ABOUT: - return "About G4UIWin32"; - - case ID_LOG_CLEAN: - return "Clean log"; - - case ID_LOG_SAVE: - return "Save log"; - - default: - return ""; - } -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -G4String G4UIWin32::GetHelpTreeToolTips(HTREEITEM item) { - // Tooltips for the help tree - G4UImanager* UI = G4UImanager::GetUIpointer(); - if (UI == nullptr) return ""; - G4UIcommandTree* treeTop = UI->GetTree(); - - G4String itemText = GetItemPath(item); - - // Check if it is a command path - if (TreeView_GetChild(fHWndHelpTree, item) != nullptr) - itemText += "/"; - - G4UIcommand* command = treeTop->FindPath(itemText.c_str()); - - if (command) { - // This is a command, return the first line of help - return command->GetGuidanceLine(0).data(); - } else { - // This is not a command, but a sub directory, return the title - G4UIcommandTree* path = treeTop->FindCommandTree(itemText.c_str()); - if (path) return path->GetTitle().data(); - } - - return ""; -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -G4String G4UIWin32::ConvertNewLines(G4String a_string) { - - // Geant4 uses UNIX's style for new lines (\n) - // we must convert them to Windows' style (\r\n) - G4String str = std::move(a_string); - size_t index = str.find("\n", 0); - while (index < str.length()) { - str.replace(index, 2, "\r\n"); - // Advance index forward so the next iteration doesn't pick it up as well. - index = str.find("\n", index + 2); - } - return str; -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -void G4UIWin32::HelpTreeDoubleClick(HTREEITEM item) { - const char* item_path = GetItemPath(item); - G4int l = strlen(item_path); - Edit_SetText(fHWndComboEditor, item_path); - Edit_SetSel(fHWndComboEditor, l, l); - - SetFocus(fHWndComboEditor); -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -G4bool G4UIWin32::SaveLogFile(LPCTSTR fileName) { - HANDLE hFile; - G4bool bSuccess = false; - - hFile = CreateFile(fileName, GENERIC_WRITE, 0, nullptr, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); - if (hFile != INVALID_HANDLE_VALUE) { - DWORD dwTextLength; - - dwTextLength = GetWindowTextLength(fHWndEditor); - // No need to bother if there's no text. - if (dwTextLength > 0) { - LPSTR text; - DWORD dwBufferSize = dwTextLength + 1; - - text = (LPSTR) GlobalAlloc(GPTR, dwBufferSize); - if (text != nullptr) { - if (GetWindowText(fHWndEditor, text, dwBufferSize)) { - DWORD dwWritten; - - if (WriteFile(hFile, text, dwTextLength, &dwWritten, nullptr)) - bSuccess = true; - } - GlobalFree(text); - } - } - CloseHandle(hFile); - } - return bSuccess; -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -void G4UIWin32::AddText(LPSTR text) { - if ((fHWndEditor != nullptr) && (text != nullptr) && (text[0] != '\0')) { - // Get current text length - G4int ndx = GetWindowTextLength(fHWndEditor); - - // Select the end of the text - SendMessage(fHWndEditor, EM_SETSEL, (WPARAM) ndx, (LPARAM) ndx); - //Add the new text - SendMessage(fHWndEditor, EM_REPLACESEL, (WPARAM) 0, (LPARAM) text); - // Scroll to the bottom - SendMessage(fHWndEditor, WM_VSCROLL, SB_BOTTOM, NULL); - } -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -void G4UIWin32::DoOpenMacro(HWND aWindow) { - OPENFILENAME ofn; - char szFileName[MAX_PATH] = ""; - - ZeroMemory(&ofn, sizeof(ofn)); - - ofn.lStructSize = sizeof(ofn); - ofn.hwndOwner = aWindow; - ofn.lpstrFilter = "Macro Files (*.mac)\0*.mac\0All Files (*.*)\0*.*\0"; - ofn.lpstrFile = szFileName; - ofn.nMaxFile = MAX_PATH; - ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; - ofn.lpstrDefExt = "mac"; - - if (GetOpenFileName(&ofn)) { - G4String command = "/control/execute " + G4String(szFileName); - ApplyShellCommand(command,exitSession,exitPause); - - SendDlgItemMessage(aWindow, IDC_MAIN_STATUS, SB_SETTEXT, 0, (LPARAM) "Opened macro..."); - SendDlgItemMessage(aWindow, IDC_MAIN_STATUS, SB_SETTEXT, 1, (LPARAM) szFileName); - } -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -void G4UIWin32::DoSaveViewer(HWND aWindow) { - OPENFILENAME ofn; - char szFileName[MAX_PATH] = ""; - - ZeroMemory(&ofn, sizeof(ofn)); - - ofn.lStructSize = sizeof(ofn); - ofn.hwndOwner = aWindow; - ofn.lpstrFilter = "Macro Files (*.mac)\0*.mac\0All Files (*.*)\0*.*\0"; - ofn.lpstrFile = szFileName; - ofn.nMaxFile = MAX_PATH; - ofn.lpstrDefExt = "mac"; - ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; - - if (GetSaveFileName(&ofn)) { - G4String command = "/vis/viewer/save " + G4String(szFileName); - ApplyShellCommand(command,exitSession,exitPause); - - SendDlgItemMessage(aWindow, IDC_MAIN_STATUS, SB_SETTEXT, 0, (LPARAM) "State saved..."); - SendDlgItemMessage(aWindow, IDC_MAIN_STATUS, SB_SETTEXT, 1, (LPARAM) szFileName); - } -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -void G4UIWin32::DoSaveLog(HWND aWindow) { - OPENFILENAME ofn; - char szFileName[MAX_PATH] = ""; - - ZeroMemory(&ofn, sizeof(ofn)); - - ofn.lStructSize = sizeof(ofn); - ofn.hwndOwner = aWindow; - ofn.lpstrFilter = "Log Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0"; - ofn.lpstrFile = szFileName; - ofn.nMaxFile = MAX_PATH; - ofn.lpstrDefExt = "txt"; - ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; - - if (GetSaveFileName(&ofn)) { - if (SaveLogFile(szFileName)) { - SendDlgItemMessage(aWindow, IDC_MAIN_STATUS, SB_SETTEXT, 0, (LPARAM) "Saved log file..."); - SendDlgItemMessage(aWindow, IDC_MAIN_STATUS, SB_SETTEXT, 1, (LPARAM) szFileName); - } - } -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -G4bool G4UIWin32::InitHelpTreeItems() { - HTREEITEM newItem; - - G4UImanager* UI = G4UImanager::GetUIpointer(); - if (UI == nullptr) return false; - G4UIcommandTree* treeTop = UI->GetTree(); - - G4int treeSize = treeTop->GetTreeEntry(); - G4String commandText; - for (G4int a = 0; a < treeSize; a++) { - // Creating new item - commandText = treeTop->GetTree(a + 1)->GetPathName().data(); - - // Add the item to the tree-view control. - newItem = AddItemToHelpTree(const_cast(GetShortCommandPath(commandText).c_str())); - - if (newItem == nullptr) - return false; - - // Look for children - CreateHelpTree(newItem, treeTop->GetTree(a + 1)); - } - - return true; -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -void G4UIWin32::CreateHelpTree(HTREEITEM aParent, G4UIcommandTree* aCommandTree) { - if ((aParent != nullptr) && (aCommandTree != nullptr)) { - // Creating new item - HTREEITEM newItem; - - G4String commandText; - // Get the Sub directories - for (G4int a = 0; a < aCommandTree->GetTreeEntry(); a++) { - commandText = aCommandTree->GetTree(a + 1)->GetPathName().data(); - - // Add the item to the tree-view control. - newItem = AddItemToHelpTree(const_cast(GetShortCommandPath(commandText).c_str()), aParent); - - // Look for children - CreateHelpTree(newItem, aCommandTree->GetTree(a + 1)); - } - - // Get the Commands - for (G4int a = 0; a < aCommandTree->GetCommandEntry(); a++) { - commandText = aCommandTree->GetCommand(a + 1)->GetCommandPath().data(); - - // Add the item to the tree-view control. - AddItemToHelpTree(const_cast(GetShortCommandPath(commandText).c_str()), aParent); - } - } -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -HTREEITEM G4UIWin32::AddItemToHelpTree(LPTSTR lpszItem, HTREEITEM aParent) { - TVITEM tvi; - TVINSERTSTRUCT tvins; - static auto hPrev = (HTREEITEM) TVI_FIRST; - - tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; - - // Set the text of the item. - tvi.pszText = lpszItem; - tvi.cchTextMax = sizeof(tvi.pszText)/sizeof(tvi.pszText[0]); - - // Save the heading level in the item's application-defined - // data area. - tvi.lParam = (LPARAM) aParent; - tvins.item = tvi; - tvins.hInsertAfter = hPrev; - // Set the parent item. - tvins.hParent = aParent; - - // Add the item to the tree-view control. - hPrev = (HTREEITEM) SendMessage(fHWndHelpTree, TVM_INSERTITEM, (WPARAM) 0, - (LPARAM) (LPTVINSERTSTRUCT) &tvins); - - if (hPrev == nullptr) - return nullptr; - else - return hPrev; -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -G4String G4UIWin32::GetShortCommandPath(G4String commandPath) { - G4String str = std::move(commandPath); - - if (str.find_last_of("/") == (str.size() - 1)) - str = str.erase(str.size() - 1, 1); - - str = str.erase(0, str.find_last_of("/") + 1); - - return str; -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -LPSTR G4UIWin32::GetItemPath(HTREEITEM item) { - // Get the text for the item. - TVITEM tvitem; - tvitem.mask = TVIF_TEXT; - tvitem.hItem = item; - TCHAR infoTipBuf[1024]; - tvitem.pszText = infoTipBuf; - tvitem.cchTextMax = sizeof(infoTipBuf)/sizeof(TCHAR); - - std::string str = ""; - while (item != nullptr) { - TreeView_GetItem(fHWndHelpTree, &tvitem); - str = "/" + std::string(tvitem.pszText) + str; - - item = TreeView_GetParent(fHWndHelpTree, item); - tvitem.hItem = item; - } - - auto* result = new TCHAR[str.size() + 1]; - result[str.size()] = 0; - std::copy(str.begin(), str.end(), result); - - return result; -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ - -/****************************************************************************************************/ -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -G4bool ConvertStringToInt(const char* aString, G4int& aInt) { - aInt = 0; - if (aString == nullptr) return false; - char* s; - G4long value = strtol(aString, &s, 10); - if (s == aString) return false; - aInt = value; - return true; -} -/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -/****************************************************************************************************/ diff --git a/source/interfaces/basic/src/G4UItcsh.cc b/source/interfaces/basic/src/G4UItcsh.cc deleted file mode 100644 index 1c1b57b00dc..00000000000 --- a/source/interfaces/basic/src/G4UItcsh.cc +++ /dev/null @@ -1,758 +0,0 @@ -// -// ******************************************************************** -// * 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. * -// ******************************************************************** -// -// -// - -#ifndef WIN32 - -#include "G4Types.hh" -#include "G4StateManager.hh" -#include "G4UIcommandStatus.hh" -#include "G4UItcsh.hh" -#include -#include -#include -#include - -// ASCII character code -static const char AsciiCtrA = '\001'; -static const char AsciiCtrB = '\002'; -static const char AsciiCtrC = '\003'; -static const char AsciiCtrD = '\004'; -static const char AsciiCtrE = '\005'; -static const char AsciiCtrF = '\006'; -static const char AsciiCtrK = '\013'; -static const char AsciiCtrL = '\014'; -static const char AsciiCtrN = '\016'; -static const char AsciiCtrP = '\020'; -static const char AsciiCtrQ = '\021'; -static const char AsciiCtrS = '\023'; -static const char AsciiCtrZ = '\032'; -static const char AsciiTAB = '\011'; -static const char AsciiBS = '\010'; -static const char AsciiDEL = '\177'; -static const char AsciiESC = '\033'; - -static const int AsciiPrintableMin = 32; - -// history file -static const G4String historyFileName= "/.g4_hist"; - -///////////////////////////////////////////////////////// -G4UItcsh::G4UItcsh(const G4String& prompt, G4int maxhist) - : G4VUIshell(prompt), - commandLine(""), cursorPosition(1), - commandHistory(maxhist), maxHistory(maxhist), - currentHistoryNo(1), relativeHistoryIndex(0) -///////////////////////////////////////////////////////// -{ - // get current terminal mode - tcgetattr(0, &tios); - - // read a shell history file - const char* path = std::getenv("HOME"); - if( path == NULL ) return; - - G4String homedir= path; - G4String fname= homedir + historyFileName; - - std::ifstream histfile; - enum { BUFSIZE= 1024 }; char linebuf[BUFSIZE]; - - histfile.open(fname, std::ios::in); - while (histfile.good()) { - if(histfile.eof()) break; - - histfile.getline(linebuf, BUFSIZE); - G4String aline= G4StrUtil::strip_copy(linebuf); - if(aline.size() != 0) StoreHistory(linebuf); - } - histfile.close(); -} - -///////////////////// -G4UItcsh::~G4UItcsh() -///////////////////// -{ - // store a shell history - const char* path = std::getenv("HOME"); - if( path == NULL ) return; - - G4String homedir= path; - G4String fname= homedir + historyFileName; - - std::ofstream histfile; - histfile.open(fname, std::ios::out); - - G4int n0hist= 1; - if( currentHistoryNo > maxHistory ) n0hist= currentHistoryNo-maxHistory+1; - - for (G4int i=n0hist; i<= currentHistoryNo; i++) { - histfile << RestoreHistory(i) << G4endl; - } - - histfile.close(); -} - -////////////////////////////////////////// -void G4UItcsh::MakePrompt(const char* msg) -////////////////////////////////////////// -{ - if(promptSetting.length()<=1) { - promptString= promptSetting; - return; - } - - promptString=""; - G4int i; - for(i=0; i<(G4int)promptSetting.length()-1; ++i){ - if(promptSetting[i]=='%'){ - switch (promptSetting[i+1]) { - case 's': // current application status - { - G4String stateStr; - if(msg) - { stateStr = msg; } - else - { - G4StateManager* statM= G4StateManager::GetStateManager(); - stateStr= statM-> GetStateString(statM->GetCurrentState()); - } - promptString.append(stateStr); - i++; - } - break; - case '/': // current working directory - promptString.append(currentCommandDir); - i++; - break; - case 'h': // history# - { - std::ostringstream os; - os << currentHistoryNo; - promptString.append(os.str()); - i++; - } - break; - default: - break; - } - } else { - promptString += promptSetting[i]; - } - } - - // append last chaacter - if(i == G4int(promptSetting.length()-1)) - promptString += promptSetting[i]; -} - - -////////////////////////////// -void G4UItcsh::ResetTerminal() -////////////////////////////// -{ - RestoreTerm(); -} - - -// -------------------------------------------------------------------- -// commad line operations -// -------------------------------------------------------------------- -////////////////////////////////////// -void G4UItcsh::InitializeCommandLine() -////////////////////////////////////// -{ - commandLine= ""; - cursorPosition= 1; -} - -/////////////////////////////////////// -void G4UItcsh::InsertCharacter(char cc) -/////////////////////////////////////// -{ - if( ! (cc >= AsciiPrintableMin && isprint(cc)) ) return; - - // display... - G4cout << cc; - std::size_t i; - for(i=cursorPosition-1; i=2; i--) G4cout << AsciiBS; - for(i=1; i<=commandLine.length(); ++i) G4cout << ' '; - for(i=1; i<=commandLine.length(); ++i) G4cout << AsciiBS; - G4cout << std::flush; - - // command line string... - commandLine.erase(); - cursorPosition= 1; -} - -///////////////////////////////// -void G4UItcsh::ClearAfterCursor() -///////////////////////////////// -{ - if(IsCursorLast()) return; - - // display... - for(std::size_t i=cursorPosition; i<=commandLine.length(); ++i) G4cout << ' '; - for(G4int j=(G4int)commandLine.length(); j>=cursorPosition; --j) G4cout << AsciiBS; - G4cout << std::flush; - - // command line string... - commandLine.erase(cursorPosition-1, - commandLine.length()-cursorPosition+1); -} - -//////////////////////////// -void G4UItcsh::ClearScreen() -//////////////////////////// -{ - if(! clearString.empty() ) { - G4cout << clearString; - - G4cout << promptString << commandLine << std::flush; - // reset cursur position - for(G4int i=G4int(commandLine.length()+1); i>=cursorPosition+1; --i) - G4cout << AsciiBS << std::flush; - } -} - -////////////////////////////// -void G4UItcsh::ForwardCursor() -////////////////////////////// -{ - if(IsCursorLast()) return; - - G4cout << commandLine[cursorPosition-1] << std::flush; - cursorPosition++; -} - -/////////////////////////////// -void G4UItcsh::BackwardCursor() -/////////////////////////////// -{ - if(cursorPosition==1) return; - - cursorPosition--; - G4cout << AsciiBS << std::flush; -} - -////////////////////////////// -void G4UItcsh::MoveCursorTop() -////////////////////////////// -{ - for(G4int i=cursorPosition; i>1; --i){ - G4cout << AsciiBS; - } - G4cout << std::flush; - cursorPosition=1; -} - -////////////////////////////// -void G4UItcsh::MoveCursorEnd() -////////////////////////////// -{ - for(G4int i=cursorPosition-1; i<(G4int)commandLine.length(); ++i){ - G4cout << commandLine[i]; - } - G4cout << std::flush; - cursorPosition=G4int(commandLine.length()+1); -} - -//////////////////////////////// -void G4UItcsh::PreviousCommand() -//////////////////////////////// -{ - G4int nhmax= currentHistoryNo-1 >= maxHistory ? - maxHistory : currentHistoryNo-1; - - // retain current input - if(relativeHistoryIndex==0) commandLineBuf= commandLine; - - if(relativeHistoryIndex>=-nhmax+1 && relativeHistoryIndex<=0) { - ClearLine(); - relativeHistoryIndex--; - commandLine= RestoreHistory(currentHistoryNo+relativeHistoryIndex); - - G4cout << commandLine << std::flush; - cursorPosition= G4int(commandLine.length()+1); - } -} - -//////////////////////////// -void G4UItcsh::NextCommand() -//////////////////////////// -{ - G4int nhmax= currentHistoryNo-1 >= maxHistory ? - maxHistory : currentHistoryNo-1; - - if(relativeHistoryIndex>=-nhmax && relativeHistoryIndex<=-1) { - ClearLine(); - relativeHistoryIndex++; - - if(relativeHistoryIndex==0) commandLine= commandLineBuf; - else commandLine= RestoreHistory(currentHistoryNo+relativeHistoryIndex); - - G4cout << commandLine << std::flush; - cursorPosition= G4int(commandLine.length()+1); - } -} - - -/////////////////////////////////// -void G4UItcsh::ListMatchedCommand() -/////////////////////////////////// -{ - G4cout << G4endl; - - // input string - G4String input = G4StrUtil::lstrip_copy(commandLine); - // target token is last token - auto jhead= input.rfind(' '); - if(jhead != G4String::npos) { - input.erase(0, jhead); - G4StrUtil::lstrip(input); - } - - // command tree of "user specified directory" - G4String vpath = currentCommandDir; - G4String vcmd = ""; - - if( !input.empty() ) { - G4int len= (G4int)input.length(); - G4int indx=-1; - for(G4int i=len-1; i>=0; --i) { - if(input[i]=='/') { - indx= (G4int)i; - break; - } - } - // get abs. path - if(indx != -1) vpath= GetAbsCommandDirPath(input.substr(0,indx+1)); - if(!(indx==0 && len==1)) vcmd= input.substr(indx+1,len-indx-1); // care for "/" - } - - // list matched dirs/commands - //G4cout << "@@@ vpath=" << vpath <<":vcmd=" << vcmd << G4endl; - ListCommand(vpath, vpath+vcmd); - - G4cout << promptString << commandLine << std::flush; -} - -//////////////////////////////// -void G4UItcsh::CompleteCommand() -//////////////////////////////// -{ - // inputting string - G4String input = G4StrUtil::lstrip_copy(commandLine); - - // target token is last token - auto jhead= input.rfind(' '); - if(jhead != G4String::npos) { - input.erase(0, jhead); - G4StrUtil::lstrip(input); - } - - // tail string - std::size_t thead = input.find_last_of('/'); - G4String strtail = input; - if (thead != G4String::npos) strtail = input.substr(thead+1, input.size()-thead-1); - - // command tree of "user specified directory" - G4String vpath= currentCommandDir; - G4String vcmd; - - G4int len= (G4int)input.length(); - if(!input.empty()) { - G4int indx= -1; - for(G4int i=len-1; i>=0; --i) { - if(input[i]=='/') { - indx= i; - break; - } - } - // get abs. path - if(indx != -1) vpath= GetAbsCommandDirPath(input.substr(0,indx+1)); - if(!(indx==0 && len==1)) vcmd= input.substr(indx+1,len-indx-1); // care for "/" - } - - G4UIcommandTree* atree= GetCommandTree(vpath); // get command tree - if(atree == NULL) return; - - // list matched directories/commands - G4String stream, strtmp; - G4String inputpath= vpath+vcmd; - G4int nMatch= 0; - - G4int Ndir= atree-> GetTreeEntry(); - G4int Ncmd= atree-> GetCommandEntry(); - - // directory ... - for(G4int idir=1; idir<=Ndir; idir++) { - G4String fpdir= atree-> GetTree(idir)-> GetPathName(); - // matching test - if( fpdir.find(inputpath, 0) == 0) { - if(nMatch==0) { - stream= GetCommandPathTail(fpdir); - } else { - strtmp= GetCommandPathTail(fpdir); - stream= GetFirstMatchedString(stream, strtmp); - } - nMatch++; - } - } - - // command ... - for(G4int icmd=1; icmd<=Ncmd; icmd++){ - G4String fpcmd= atree-> GetPathName() + - atree-> GetCommand(icmd) -> GetCommandName(); - // matching test - if( fpcmd.find(inputpath, 0) ==0) { - if(nMatch==0) { - stream= GetCommandPathTail(fpcmd) + " "; - } else { - strtmp= GetCommandPathTail(fpcmd) + " "; - stream= GetFirstMatchedString(stream, strtmp); - } - nMatch++; - } - } - - // display... - input= commandLine; - // target token is last token - jhead= input.rfind(' '); - if(jhead == G4String::npos) jhead=0; - else jhead++; - - std::size_t jt = jhead; - - G4String dspstr; - std::size_t i; - for(i=jt; i<=input.length()-1; ++i) dspstr+= AsciiBS; - for(i=jt; i<=input.length()-1; ++i) dspstr+= ' '; - for(i=jt; i<=input.length()-1; ++i) dspstr+= AsciiBS; - - dspstr+= (vpath + stream); - if (nMatch == 0) dspstr+= strtail; - G4cout << dspstr << std::flush; - - // command line string - input.erase(jt); - input+= (vpath + stream); - if (nMatch==0) input+= strtail; - - commandLine= input; - cursorPosition= G4int(commandLine.length()+1); -} - -// -------------------------------------------------------------------- -// commad line -// -------------------------------------------------------------------- -///////////////////////////// -G4String G4UItcsh::ReadLine() -///////////////////////////// -{ - InitializeCommandLine(); - - char cc; - do{ // input loop - G4cin.get(cc); - - // treatment for special character - switch(cc){ - case AsciiCtrA: // ... move cursor to the top - MoveCursorTop(); - break; - case AsciiCtrB: // ... backward cursor - BackwardCursor(); - break; - case AsciiCtrD: // ... delete/exit/show matched list - if(commandLine.length()!=0 && IsCursorLast()) ListMatchedCommand(); - else if (commandLine.empty()) { - return G4String("exit"); - } else DeleteCharacter(); - break; - case AsciiCtrE: // ... move cursor to the end - MoveCursorEnd(); - break; - case AsciiCtrF: // ... forward cursor - ForwardCursor(); - break; - case AsciiCtrK: // ... clear after the cursor - ClearAfterCursor(); - break; - case AsciiCtrL: // ... clear screen - // ClearScreen(); - break; - case AsciiCtrN: // ... next command - NextCommand(); - break; - case AsciiCtrP: // ... previous command - PreviousCommand(); - break; - case AsciiTAB: // ... command completion - if( (!commandLine.empty()) && IsCursorLast()) CompleteCommand(); - break; - case AsciiDEL: // ... backspace - BackspaceCharacter(); - break; - case AsciiBS: // ... backspace - BackspaceCharacter(); - break; - case AsciiCtrC: // ... kill prompt - break; - case AsciiCtrQ: // ... restarts suspeded output - break; - case AsciiCtrS: // ... suspend output - break; - case AsciiCtrZ: // ... suspend - break; - default: - break; - } - - // treatment for ESC. character - if( cc == AsciiESC) { // ESC - G4cin.get(cc); - if (cc == '[' || cc == 'O') { // care for another termcap, such as konsole - G4cin.get(cc); - switch(cc) { - case 'A': // [UP] - cc = 'P' - '@'; - PreviousCommand(); // ... show previous commad - break; - case 'B': // [DOWN] - cc = 'N' - '@'; - NextCommand(); // ... show next commad - break; - case 'C': // [RIGHT] - cc = 'F' - '@'; - ForwardCursor(); // ... forward cursor - break; - case 'D': // [LEFT] - cc = 'B' - '@'; - BackwardCursor(); // ... backward cursor - break; - default: // who knows !? - cc = 0; - break; - } - } - } - - // insert character to command line and display - InsertCharacter(cc); - - } while( cc != '\n'); - - return commandLine; -} - -//////////////////////////////////////////////////////// -G4String G4UItcsh::GetCommandLineString(const char* msg) -//////////////////////////////////////////////////////// -{ - SetTermToInputMode(); - - MakePrompt(msg); // update - relativeHistoryIndex= 0; - - G4cout << promptString << std::flush; - - G4String newCommand= ReadLine(); // read line... - // multi-line - while( (newCommand.length() > 0) && - ( newCommand[G4int(newCommand.length()-1)] == '_') ) { - newCommand.erase(newCommand.length()-1); - G4cout << G4endl; - promptString= "? "; - G4cout << promptString << std::flush; - G4String newLine= ReadLine(); - newCommand.append(newLine); - } - - // update history... - G4bool isMeaningfull= FALSE; // check NULL command - for (G4int i=0; i<(G4int)newCommand.length(); ++i) { - if(newCommand[i] != ' ') { - isMeaningfull= TRUE; - break; - } - } - if( !newCommand.empty() && isMeaningfull) StoreHistory(newCommand); - - // reset terminal - RestoreTerm(); - - G4cout << G4endl; - return newCommand; -} - -//////////////////////////////////////////////////////////////////// -G4String G4UItcsh::GetFirstMatchedString(const G4String& str1, - const G4String& str2) const -//////////////////////////////////////////////////////////////////// -{ - std::size_t nlen1= str1.length(); - std::size_t nlen2= str2.length(); - - std::size_t nmin = nlen1= currentHistoryNo) return ""; - - G4int index= histNo%maxHistory; - if(index==0) index= maxHistory; - - return commandHistory[index-1]; // 0-offset -} - -// -------------------------------------------------------------------- -// terminal mode -// -------------------------------------------------------------------- -/////////////////////////////////// -void G4UItcsh::SetTermToInputMode() -/////////////////////////////////// -{ - termios tiosbuf= tios; - - tiosbuf.c_iflag &= ~(BRKINT | ISTRIP); - tiosbuf.c_iflag |= (IGNBRK | IGNPAR); - tiosbuf.c_lflag &= ~(ICANON | IEXTEN | ECHO); - tiosbuf.c_cc[VMIN] = 1; - tiosbuf.c_cc[VTIME] = 0; - - tcsetattr(0, TCSAFLUSH, &tiosbuf); -} - - -//////////////////////////// -void G4UItcsh::RestoreTerm() -//////////////////////////// -{ - tcsetattr(0, TCSAFLUSH, &tios); -} - -#endif diff --git a/source/interfaces/basic/src/G4UIterminal.cc b/source/interfaces/basic/src/G4UIterminal.cc deleted file mode 100644 index 98805b63ee5..00000000000 --- a/source/interfaces/basic/src/G4UIterminal.cc +++ /dev/null @@ -1,340 +0,0 @@ -// -// ******************************************************************** -// * 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. * -// ******************************************************************** -// -// -// -// ==================================================================== -// G4UIterminal.cc -// -// ==================================================================== -#include "G4Types.hh" -#include "G4StateManager.hh" -#include "G4UIcommandTree.hh" -#include "G4UIcommand.hh" -#include "G4UIcommandStatus.hh" -#include "G4UIterminal.hh" -#include "G4UIcsh.hh" -#include - -#ifndef WIN32 -#include -#endif - -// ==================================================================== -// signal handler for soft-abort -// ==================================================================== - -static G4ThreadLocal G4VUIshell* theshell= 0; - -#ifndef WIN32 - -extern "C" { - -//////////////////////////////// -static void SignalHandler(G4int) -//////////////////////////////// -{ - G4StateManager* stateManager= G4StateManager::GetStateManager(); - G4ApplicationState state= stateManager-> GetCurrentState(); - - if(state==G4State_GeomClosed || state==G4State_EventProc) { - G4cout << "aborting Run ..."; - G4UImanager::GetUIpointer()->ApplyCommand("/run/abort"); - G4cout << G4endl; - } else { - G4cout << G4endl - << "Session terminated." << G4endl; - theshell-> ResetTerminal(); - G4Exception("G4UIterminal::SignalHandler()", - "UI0001", - FatalException, - "KeyboardInterrput with Ctrl-C"); - } - - // for original Unix / System V - signal(SIGINT, SignalHandler); -} - -} -#endif - -// ==================================================================== -// -// class description -// -// ==================================================================== - -/////////////////////////////////////////////////////////// -G4UIterminal::G4UIterminal(G4VUIshell* aShell, G4bool qsig) -/////////////////////////////////////////////////////////// -{ - UI= G4UImanager::GetUIpointer(); - UI-> SetSession(this); - UI-> SetCoutDestination(this); - - iExit= FALSE; - iCont= FALSE; - - if(aShell) shell= aShell; - else shell= new G4UIcsh; - theshell= shell; // locally stored for the signal handler - - // add signal handler - if(qsig) { -#ifndef WIN32 - signal(SIGINT, SignalHandler); -#endif - } -} - -///////////////////////////// -G4UIterminal::~G4UIterminal() -///////////////////////////// -{ - if(shell) delete shell; - - if(G4UImanager::GetUIpointer()) { - UI-> SetSession(NULL); - UI-> SetCoutDestination(NULL); - } -} - - -//////////////////////////////////////////////////// -void G4UIterminal::SetPrompt(const G4String& prompt) -//////////////////////////////////////////////////// -{ - shell-> SetPrompt(prompt); -} - -///////////////////////////////////////// -G4UIsession* G4UIterminal::SessionStart() -///////////////////////////////////////// -{ - iExit= TRUE; - - G4String newCommand= GetCommand(); - while(iExit){ - ExecuteCommand(newCommand); - newCommand= GetCommand(); - } - return NULL; -} - -///////////////////////////////////////////////////////// -void G4UIterminal::PauseSessionStart(const G4String& msg) -///////////////////////////////////////////////////////// -{ - iCont= TRUE; - - G4String newCommand= GetCommand(msg); - while(iCont){ - ExecuteCommand(newCommand); - newCommand= GetCommand(msg); - } -} - -/////////////////////////////////////////////////////////// -void G4UIterminal::ExecuteCommand(const G4String& aCommand) -/////////////////////////////////////////////////////////// -{ - if(aCommand.length()<2) return; - - G4int returnVal = UI-> ApplyCommand(aCommand); - - G4int paramIndex = returnVal % 100; - // 0 - 98 : paramIndex-th parameter is invalid - // 99 : convination of parameters is invalid - G4int commandStatus = returnVal - paramIndex; - - G4UIcommand* cmd = 0; - if(commandStatus!=fCommandSucceeded) - { cmd = FindCommand(aCommand); } - - switch(commandStatus) { - case fCommandSucceeded: - break; - case fCommandNotFound: - G4cerr << "command <" << UI->SolveAlias(aCommand) << "> not found" << G4endl; - if( aCommand.find("@@") != G4String::npos) { - G4cout << "@@G4UIterminal" << G4endl; - } - break; - case fIllegalApplicationState: - G4cerr << "illegal application state -- command refused" << G4endl; - break; - case fParameterOutOfRange: - // if(paramIndex<99) { - // G4cerr << "Parameter is out of range (index " << paramIndex << ")" << G4endl; - // G4cerr << "Allowed range : " << cmd->GetParameter(paramIndex)->GetParameterRange() << G4endl; - // } else { - // G4cerr << "Parameter is out of range" << G4endl; - // G4cerr << "Allowed range : " << cmd->GetRange() << G4endl; - // } - break; - case fParameterOutOfCandidates: - G4cerr << "Parameter is out of candidate list (index " << paramIndex << ")" << G4endl; - G4cerr << "Candidates : " << cmd->GetParameter(paramIndex)->GetParameterCandidates() << G4endl; - break; - case fParameterUnreadable: - G4cerr << "Parameter is wrong type and/or is not omittable (index " << paramIndex << ")" << G4endl; - break; - case fAliasNotFound: - default: - G4cerr << "command refused (" << commandStatus << ")" << G4endl; - } -} - -////////////////////////////////////////////////// -G4String G4UIterminal::GetCommand(const char* msg) -////////////////////////////////////////////////// -{ - G4String newCommand = shell->GetCommandLineString(msg); - G4String nullString = ""; - - G4String nC = G4StrUtil::lstrip_copy(newCommand); - - if( nC.length() == 0 ) { - newCommand= nullString; - - } else if( nC[0] == '#' ) { - G4cout << nC << G4endl; - newCommand= nullString; - - } else if(nC=="ls" || nC.substr(0,3)=="ls " ) { // list commands - ListDirectory(nC); - newCommand= nullString; - - } else if(nC=="lc" || nC.substr(0,3)=="lc " ) { // ... by shell - shell-> ListCommand(nC.erase(0,2)); - newCommand= nullString; - - } else if(nC == "pwd") { // show current directory - G4cout << "Current Command Directory : " - << GetCurrentWorkingDirectory() << G4endl; - newCommand= nullString; - - } else if(nC == "cwd") { // ... by shell - shell-> ShowCurrentDirectory(); - newCommand= nullString; - - } else if(nC == "cd" || nC.substr(0,3) == "cd ") { // "cd" - ChangeDirectoryCommand(nC); - shell-> SetCurrentDirectory(GetCurrentWorkingDirectory()); - newCommand= nullString; - - } else if(nC == "help" || nC.substr(0,5) == "help ") { // "help" - TerminalHelp(nC); - newCommand= nullString; - - } else if(nC[0] == '?') { // "show current value of a parameter" - ShowCurrent(nC); - newCommand= nullString; - - } else if(nC == "hist" || nC == "history") { // "hist/history" - G4int nh= UI-> GetNumberOfHistory(); - for (G4int i=0; iGetPreviousCommand(i) << G4endl; - } - newCommand= nullString; - - } else if(nC[0] == '!') { // "!" - G4String ss= nC.substr(1, nC.length()-1); - G4int vl; - const char* tt= ss; - std::istringstream is(tt); - is >> vl; - G4int nh= UI-> GetNumberOfHistory(); - if(vl>=0 && vl GetPreviousCommand(vl); - G4cout << newCommand << G4endl; - } else { - G4cerr << "history " << vl << " is not found." << G4endl; - newCommand= nullString; - } - - } else if(nC == "exit") { // "exit" - if(iCont) { - G4cout << "You are now processing RUN." << G4endl; - G4cout << "Please abort it using \"/run/abort\" command first" << G4endl; - G4cout << " and use \"continue\" command until the application" - << G4endl; - G4cout << " becomes to Idle." << G4endl; - } else { - iExit= FALSE; - newCommand= nullString; - } - - } else if( nC == "cont" || nC == "continue"){ // "cont/continu" - iCont= FALSE; - newCommand= nullString; - - } else if( nC.empty() ){ // NULL command - newCommand= nullString; - - } else { - } - - return ModifyToFullPathCommand(newCommand); -} - - -///////////////////////////////////////////////////////////// -G4int G4UIterminal::ReceiveG4cout(const G4String& coutString) -///////////////////////////////////////////////////////////// -{ - std::cout << coutString << std::flush; - return 0; -} - -///////////////////////////////////////////////////////////// -G4int G4UIterminal::ReceiveG4cerr(const G4String& cerrString) -///////////////////////////////////////////////////////////// -{ - std::cerr << cerrString << std::flush; - return 0; -} - -/////////////////////////////////////////////// -G4bool G4UIterminal::GetHelpChoice(G4int& aInt) -/////////////////////////////////////////////// -{ - G4cin >> aInt; - if(!G4cin.good()){ - G4cin.clear(); - G4cin.ignore(30,'\n'); - return FALSE; - } - return TRUE; -} - -/////////////////////////////////// -void G4UIterminal::ExitHelp() const -/////////////////////////////////// -{ - char temp[100]; - G4cin.getline(temp, 100); -} - diff --git a/source/interfaces/basic/src/G4VUIshell.cc b/source/interfaces/basic/src/G4VUIshell.cc deleted file mode 100644 index 9203927de3d..00000000000 --- a/source/interfaces/basic/src/G4VUIshell.cc +++ /dev/null @@ -1,323 +0,0 @@ -// -// ******************************************************************** -// * 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. * -// ******************************************************************** -// -// -// - -#include "G4UImanager.hh" -#include "G4UIcommand.hh" -#include "G4UIcommandTree.hh" -#include "G4StateManager.hh" -#include "G4UIcommandStatus.hh" -#include "G4VUIshell.hh" -#include "G4UIArrayString.hh" - -// terminal color string -static const G4String strESC(1,'\033'); -static const G4String TermColorString[8] ={ - strESC+"[30m", strESC+"[31m", strESC+"[32m", strESC+"[33m", - strESC+"[34m", strESC+"[35m", strESC+"[36m", strESC+"[37m" -}; - -/////////////////////////////////////////////////////////////////// -G4VUIshell::G4VUIshell(const G4String& prompt) - : promptSetting(prompt), promptString(""), nColumn(80), - lsColorFlag(FALSE), directoryColor(BLACK), commandColor(BLACK), - currentCommandDir("/") -/////////////////////////////////////////////////////////////////// -{ -} - -///////////////////////// -G4VUIshell::~G4VUIshell() -///////////////////////// -{ -} - -//////////////////////////////////////////// -void G4VUIshell::MakePrompt(const char* msg) -//////////////////////////////////////////// -{ - if(promptSetting.length()<=1) { - promptString= promptSetting; - return; - } - - promptString=""; - G4int i; - for(i=0; i<(G4int)promptSetting.length()-1; ++i){ - if(promptSetting[i]=='%'){ - switch (promptSetting[i+1]) { - case 's': // current application status - { - G4String stateStr; - if(msg) - { stateStr = msg; } - else - { - G4StateManager* statM= G4StateManager::GetStateManager(); - stateStr= statM-> GetStateString(statM->GetCurrentState()); - } - promptString.append(stateStr); - i++; - } - break; - case '/': // current working directory - promptString.append(currentCommandDir); - i++; - break; - default: - promptString += promptSetting[i]; - break; - } - } else { - promptString += promptSetting[i]; - } - } - - // append last chaacter - if(i == G4int(promptSetting.length())-1) - promptString += promptSetting[i]; -} - - -//////////////////////////////// -void G4VUIshell::ResetTerminal() -//////////////////////////////// -{ - -} - -// -------------------------------------------------------------------- -// G4command operations -// -------------------------------------------------------------------- -//////////////////////////////////////////////////////////////////////// -G4UIcommandTree* G4VUIshell::GetCommandTree(const G4String& input) const -//////////////////////////////////////////////////////////////////////// -{ - G4UImanager* UI= G4UImanager::GetUIpointer(); - - G4UIcommandTree* cmdTree= UI-> GetTree(); // root tree - - G4String absPath = GetAbsCommandDirPath(G4StrUtil::strip_copy(input)); - - // parsing absolute path ... - if(absPath.length()==0) return NULL; - if(absPath[G4int(absPath.length()-1)] != '/') return NULL; // error?? - if(absPath=="/") return cmdTree; - - for(std::size_t indx=1; indx GetTree(G4String(absPath.substr(0,jslash+1))); - } - indx= jslash+1; - } - - if(cmdTree == NULL) return NULL; - else return cmdTree; -} - -////////////////////////////////////////////////////////////////////// -G4String G4VUIshell::GetAbsCommandDirPath(const G4String& apath) const -////////////////////////////////////////////////////////////////////// -{ - if(apath.empty()) return apath; // null string - - // if "apath" does not start with "/", - // then it is treared as relative path - G4String bpath= apath; - if(apath[(std::size_t)0] != '/') bpath= currentCommandDir + apath; - - // parsing... - G4String absPath= "/"; - for(std::size_t indx=1; indx<=bpath.length()-1; ) { - std::size_t jslash= bpath.find("/", indx); // search index begin with "/" - if(indx == jslash) { // skip first '///' - ++indx; - continue; - } - if(jslash != G4String::npos) { - if(bpath.substr(indx,jslash-indx) == ".."){ // directory up - if(absPath == "/") { - indx = jslash+1; - continue; - } - if(absPath.length() >= 2) { - absPath.erase(absPath.length()-1); // remove last "/" - auto jpre= absPath.rfind('/'); - if(jpre != G4String::npos) absPath.erase(jpre+1); - } - } else if(bpath.substr(indx,jslash-indx) == "."){ // nothing to do - } else { // add - if( !(jslash==indx && bpath[(G4int)indx]=='/') ) // truncate "////" - absPath+= bpath.substr(indx, jslash-indx+1); - // better to be check directory existence. (it costs!) - } - indx= jslash+1; - } else { // directory ONLY (ignore non-"/" terminated string) - break; - } - } - - return absPath; -} - - -//////////////////////////////////////////////////////////////////// -G4String G4VUIshell::GetCommandPathTail(const G4String& apath) const -//////////////////////////////////////////////////////////////////// -{ // xxx/xxx/zzz -> zzz, trancate /// -> / - if(apath.empty()) return apath; - - G4int lstr= (G4int)apath.length(); - - // for trancating "/" - G4bool Qsla= FALSE; - if(apath[lstr-1]=='/') Qsla= TRUE; - - // searching last '/' from tail - G4int indx= -1; - for(G4int i=lstr-1; i>=0; --i) { - if(Qsla && apath[i]!='/') Qsla= FALSE; // break "/" flag!! - if(apath[i]=='/' && !Qsla) { - indx= i; - break; - } - } - - if(indx==-1) return apath; // not found - - if(indx==0 && lstr==1) { // "/" - G4String nullStr; - return nullStr; - } else { - //G4String newPath= apath(indx+1,lstr-indx-1); - G4String newPath= apath; - newPath= newPath.substr(indx+1,lstr-indx-1); - return newPath; - } -} - -// -------------------------------------------------------------------- -// shell commands -// -------------------------------------------------------------------- -///////////////////////////////////////////////////////////// -void G4VUIshell::ListCommand(const G4String& dir, - const G4String& candidate) const -///////////////////////////////////////////////////////////// -{ - // specified directpry - G4String input = G4StrUtil::strip_copy(dir); - - // command tree of "user specified directory" - G4String vpath= currentCommandDir; - G4String vcmd; - - G4int len= (G4int)input.length(); - if(! input.empty()) { - G4int indx= -1; - for(G4int i=len-1; i>=0; --i) { // search last '/' - if(input[i]=='/') { - indx= i; - break; - } - } - // get abs. path - if(indx != -1) vpath= GetAbsCommandDirPath(input.substr(0,indx+1)); - if(!(indx==0 && len==1)) vcmd= input.substr(indx+1,len-indx-1); // care for "/" - } - - // check "vcmd" is directory? - G4String inputpath= vpath+vcmd; - if(! vcmd.empty()){ - G4String tmpstr= inputpath + "/"; - if(GetCommandTree(tmpstr) != NULL) { - vpath= tmpstr; - vcmd= ""; - } - } - - // check "vpath" directory exists? - G4UIcommandTree* atree= GetCommandTree(vpath); - if(atree == NULL) { - G4cout << "<" << input << ">: No such directory" << G4endl; - return; - } - - // list matched directories/commands - G4String stream; - G4bool isMatch= FALSE; - - G4int Ndir= atree-> GetTreeEntry(); - G4int Ncmd= atree-> GetCommandEntry(); - if(Ndir==0 && Ncmd==0) return; // no contents - - // directory ... - for(G4int idir=1; idir<=Ndir; idir++) { - if(idir==1 && lsColorFlag) stream+= TermColorString[directoryColor]; - G4String fpdir= atree-> GetTree(idir)-> GetPathName(); - // matching test - if(candidate.empty()) { // list all - if(vcmd=="" || fpdir==inputpath) { - stream+= GetCommandPathTail(fpdir); stream+= " "; - isMatch= TRUE; - } - } else { // list only matched with candidate - if( fpdir.find(candidate, 0) == 0) { - stream+= GetCommandPathTail(fpdir); stream+= " "; - } - } - } - - // command ... - for(G4int icmd=1; icmd<=Ncmd; icmd++){ - if(icmd==1 && lsColorFlag) stream+= TermColorString[commandColor]; - G4String fpcmd= atree-> GetPathName() + - atree-> GetCommand(icmd) -> GetCommandName(); - // matching test - if(candidate.empty()) { // list all - if(vcmd=="" || fpcmd==inputpath) { - stream+= GetCommandPathTail(fpcmd); stream+= "* "; - isMatch= TRUE; - } - } else { // list only matched with candidate - if( fpcmd.find(candidate, 0) == 0) { - stream+= GetCommandPathTail(fpcmd); stream+= "* "; - } - } - } - - // waring : not matched - if(!isMatch && candidate.empty()) - G4cout << "<" << input - << ">: No such directory or command" << std::flush; - - // display - G4UIArrayString arrayString(stream); - arrayString.Show(nColumn); -} - diff --git a/source/interfaces/common/GNUmakefile b/source/interfaces/common/GNUmakefile deleted file mode 100644 index 22f0a912cb3..00000000000 --- a/source/interfaces/common/GNUmakefile +++ /dev/null @@ -1,40 +0,0 @@ -# ------------------------------------------------------------- -# GNUmakefile for interfaces/common library. John Allison, 6/7/98. - -name := G4UIcommon - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -# For debug mode -# CPPFLAGS += -DG4DEBUG_INTERFACES_COMMON - -include $(G4INSTALL)/config/architecture.gmk -include $(G4INSTALL)/config/G4UI_BUILD.gmk -include $(G4INSTALL)/config/interactivity.gmk - -# NO need OGL, then reset OGLGLAGS -OGLFLAGS = -OGLLIBS = - -CPPFLAGS += -I$(G4BASE)/global/management/include -CPPFLAGS += -I$(G4BASE)/intercoms/include -CPPFLAGS += -I$(G4BASE)/interfaces/basic/include - -# Locally adjust source list before including common.gmk -sources := $(addprefix src/,G4InteractorMessenger.cc G4VBasicShell.cc G4VInteractiveSession.cc G4VInteractorManager.cc) - -ifdef G4INTY_BUILD_XT - sources += src/G4Xt.cc -endif - -ifdef G4INTY_BUILD_QT - sources += src/G4Qt.cc -endif - -ifdef G4INTY_BUILD_WIN32 - sources += src/G4Win32.cc -endif - -include $(G4INSTALL)/config/common.gmk diff --git a/source/interfaces/common/include/G4VInteractorManager.hh b/source/interfaces/common/include/G4VInteractorManager.hh deleted file mode 100644 index a2aaf0b7c26..00000000000 --- a/source/interfaces/common/include/G4VInteractorManager.hh +++ /dev/null @@ -1,102 +0,0 @@ -// -// ******************************************************************** -// * 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. * -// ******************************************************************** -// -// -// -// G.Barrand - -#ifndef G4VINTERACTORMANAGER_HH -#define G4VINTERACTORMANAGER_HH - -#include "globals.hh" -#include - -typedef void* G4Interactor; -typedef G4bool (*G4DispatchFunction)(void*); -typedef void (*G4SecondaryLoopAction)(); - -// Class description : -// -// G4VInteractorManager : a base class to isolate common things -// to various GUI "toolkits" like WIndows, Xt. -// The word "interactor" is for "piece of user interface" or -// "widget" (which means nothing). Then a GUI "toolkit" could be -// defined as a manager of interactors. -// -// Class description - end : - -class G4VInteractorManager { -public: - G4VInteractorManager (); - virtual ~G4VInteractorManager (); - void SetArguments (int,char**); - char** GetArguments (int*); - void SetMainInteractor (G4Interactor); - G4Interactor GetMainInteractor (); - void AddDispatcher (G4DispatchFunction); - void RemoveDispatcher (G4DispatchFunction); - void AddSecondaryLoopPreAction (G4SecondaryLoopAction); - void AddSecondaryLoopPostAction (G4SecondaryLoopAction); - void AddShell (G4Interactor); - void RemoveShell (G4Interactor); - void EnableSecondaryLoop (); - void DisableSecondaryLoop (); - void SecondaryLoopPreActions (); - void SecondaryLoopPostActions (); - void RequireExitSecondaryLoop (int); - void DispatchEvent (void*); - virtual void SecondaryLoop (); - int GetExitSecondaryLoopCode (); - void PutStringInResourceDatabase (char*); - virtual G4bool Inited () = 0; - virtual void* GetEvent () = 0; - virtual void FlushAndWaitExecution () = 0; - void SetParentInteractor (G4Interactor); - G4Interactor GetParentInteractor (); - void SetCreatedInteractor (G4Interactor); - G4Interactor GetCreatedInteractor (); - void SetCreationString (char*); - char* GetCreationString (); -private: - int argc; - char** argv; - G4Interactor mainInteractor; - std::vector dispatchers; - std::vector preActions; - std::vector postActions; - std::vector shells; - G4bool secondaryLoopEnabled; - G4bool alreadyInSecondaryLoop; - int exitSecondaryLoop; - G4Interactor parentInteractor; - G4Interactor createdInteractor; - char* creationString; -}; - -#define OGL_EXIT_CODE 1 -#define OIV_EXIT_CODE 2 -#define XO_EXIT_CODE 3 - -#endif diff --git a/source/interfaces/common/sources.cmake b/source/interfaces/common/sources.cmake deleted file mode 100644 index cd4de430456..00000000000 --- a/source/interfaces/common/sources.cmake +++ /dev/null @@ -1,38 +0,0 @@ -# - G4UIcommon module build definition - -# Define the Geant4 Module. -geant4_add_module(G4UIcommon - PUBLIC_HEADERS - G4InteractorMessenger.hh - G4VBasicShell.hh - G4VInteractiveSession.hh - G4VInteractorManager.hh - SOURCES - G4InteractorMessenger.cc - G4VBasicShell.cc - G4VInteractiveSession.cc - G4VInteractorManager.cc) - -geant4_module_link_libraries(G4UIcommon PUBLIC G4intercoms G4globman) - -# Add Qt if required -if(GEANT4_USE_QT) - geant4_module_sources(G4UIcommon PUBLIC_HEADERS G4Qt.hh SOURCES G4Qt.cc) - geant4_module_link_libraries(G4UIcommon PUBLIC Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Widgets) -endif() - -# Win32 option - always built when we're using MSVC -if(MSVC) - geant4_module_sources(G4UIcommon PUBLIC_HEADERS G4Win32.hh SOURCES G4Win32.cc) -endif() - -# X11 options - we only need this for Xm (and Inventor, which activates XM) -if(UNIX AND GEANT4_USE_XM) - geant4_module_sources(G4UIcommon PUBLIC_HEADERS G4Xt.hh SOURCES G4Xt.cc) - geant4_module_link_libraries(G4UIcommon PUBLIC X11::SM X11::ICE X11::X11 X11::Xext X11::Xmu X11::Xt) -endif() - -if(GEANT4_USE_VTK) - geant4_module_compile_definitions(G4UIcommon PRIVATE G4VIS_USE_VTK_QT) - geant4_module_link_libraries(G4UIcommon PUBLIC ${VTK_LIBRARIES}) -endif() diff --git a/source/interfaces/common/src/G4InteractorMessenger.cc b/source/interfaces/common/src/G4InteractorMessenger.cc deleted file mode 100644 index c0513dd504b..00000000000 --- a/source/interfaces/common/src/G4InteractorMessenger.cc +++ /dev/null @@ -1,244 +0,0 @@ -// -// ******************************************************************** -// * 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. * -// ******************************************************************** -// -// - -#include -#include - -#include "G4UIdirectory.hh" -#include "G4UIcommand.hh" -#include "G4VInteractiveSession.hh" - -#include "G4InteractorMessenger.hh" - -#define STRDUP(str) ((str) != NULL ? (strcpy((char*)malloc((unsigned)strlen(str) + 1), str)) : (char*)NULL) -#define STRDEL(str) {if((str)!=NULL) {free(str);str=NULL;}} - -static G4bool GetValues (G4String, G4int, G4String*); - -G4InteractorMessenger::G4InteractorMessenger ( - G4VInteractiveSession* a_session -) -{ - session = a_session; - - G4UIparameter* parameter; - - // gui commands should *not* be broadcast to workers - G4bool propagateToWorkers; - interactorDirectory = new G4UIdirectory("/gui/",propagateToWorkers=false); - interactorDirectory->SetGuidance("UI interactors commands."); - - // /gui/addMenu : - addMenu = new G4UIcommand("/gui/addMenu",this); - addMenu->SetGuidance("Add a menu to menu bar."); - parameter = new G4UIparameter("Name",'s',false); - parameter->SetDefaultValue("dummy"); - addMenu->SetParameter (parameter); - parameter = new G4UIparameter("Label",'s',false); - parameter->SetDefaultValue("dummy"); - addMenu->SetParameter (parameter); - - // /gui/addButton : - addButton = new G4UIcommand("/gui/addButton",this); - addButton->SetGuidance("Add a button to menu."); - parameter = new G4UIparameter("Menu",'s',false); - parameter->SetDefaultValue("dummy"); - addButton->SetParameter (parameter); - parameter = new G4UIparameter("Label",'s',false); - parameter->SetDefaultValue("dummy"); - addButton->SetParameter (parameter); - parameter = new G4UIparameter("Command",'s',false); - parameter->SetDefaultValue(""); - addButton->SetParameter (parameter); - - // /gui/defaultIcons : - defaultIcons = new G4UIcommand("/gui/defaultIcons",this); - defaultIcons->SetGuidance("Set the Geant4 defaults icons in Qt driver."); - defaultIcons->SetGuidance("By default, Geant4 icons are enable."); - - parameter = new G4UIparameter("bool",'b',true); - parameter->SetDefaultValue("true"); - defaultIcons->SetParameter (parameter); - - // /gui/addIcon : - addIcon = new G4UIcommand("/gui/addIcon",this); - addIcon->SetGuidance - ("Add a non-checkable icon to the Icon toolbar."); - addIcon->SetGuidance - ("If the Icon parameter is set to \"user_icon\", you should provide the icon file in xpm format, otherwise you have to choose one of the candidate icons"); - addIcon->SetGuidance - ("A command given without parameters will display a window that will allow one to choose the parameters (if needed) for this command."); - addIcon->SetGuidance - ("E.g: /gui/addIcon \"Change background color\" user_icon /vis/viewer/set/background ../Images/background.xpm"); - addIcon->SetGuidance - ("Special cases for the Icon parameter:"); - addIcon->SetGuidance - (" - open: Open an open-file-selector that can run the Command with File as argument."); - addIcon->SetGuidance - (" - save: Open a save-file-selector that can run the Command with File as argument."); - addIcon->SetGuidance - (" - move/rotate/pick/zoom_in/zoom_out: Theses icons are radio-button icons that can change cursor action."); - addIcon->SetGuidance - (" - wireframe/solid/hidden_line_removal/hidden_line_and_surface_removal: These icons are radio-button icons that can change drawing style."); - addIcon->SetGuidance - (" - perspective/ortho: These icons are radio-button icons that can change projection style."); - - parameter = new G4UIparameter("Label",'s',false); - parameter->SetDefaultValue(""); - addIcon->SetParameter (parameter); - - parameter = new G4UIparameter("Icon",'s',false); - parameter->SetDefaultValue(""); - parameter->SetParameterCandidates - ("open save move rotate pick zoom_in zoom_out wireframe solid hidden_line_removal hidden_line_and_surface_removal perspective ortho exit user_icon"); - addIcon->SetParameter (parameter); - - parameter = new G4UIparameter("Command",'s',true); - parameter->SetDefaultValue("no_command"); - addIcon->SetParameter (parameter); - - parameter = new G4UIparameter("File",'s',true); - parameter->SetDefaultValue("no_file"); - addIcon->SetParameter (parameter); - - // /gui/system : - sys = new G4UIcommand("/gui/system",this); - sys->SetGuidance("Send a command to the system."); - parameter = new G4UIparameter("Command",'s',false); - parameter->SetDefaultValue(""); - sys->SetParameter (parameter); - - // /gui/outputStyle : - outputStyle = new G4UIcommand("/gui/outputStyle",this); - outputStyle->SetGuidance("Set output style."); - outputStyle->SetGuidance("Highlights commands if requested and if /control/verbose > 0."); - parameter = new G4UIparameter("destination",'s',true); // Omitable - parameter->SetParameterCandidates("cout cerr warnings errors all"); - parameter->SetDefaultValue("all"); - outputStyle->SetParameter (parameter); - parameter = new G4UIparameter("type",'s',true); // Omitable - parameter->SetParameterCandidates("fixed proportional"); - parameter->SetDefaultValue("fixed"); - outputStyle->SetParameter (parameter); - parameter = new G4UIparameter("highlight",'s',true); // Omitable - parameter->SetParameterCandidates("highlight no-highlight"); - parameter->SetDefaultValue("highlight"); - outputStyle->SetParameter (parameter); - - // /gui/nativeMenuBar : - nativeMenu = new G4UIcommand("/gui/nativeMenuBar",this); - nativeMenu->SetGuidance("Allow native menu bar in Geant4 Qt driver."); - nativeMenu->SetGuidance("By default, enable."); - - parameter = new G4UIparameter("bool",'b',true); - parameter->SetDefaultValue("true"); - nativeMenu->SetParameter (parameter); - // /gui/clearMenu - clearMenu = new G4UIcommand("/gui/clearMenu",this); - clearMenu->SetGuidance("Clear menu bar, remove all user defined menu entries."); -} - -G4InteractorMessenger::~G4InteractorMessenger() -{ - delete clearMenu; - delete nativeMenu; - delete outputStyle; - delete sys; - delete defaultIcons; - delete addIcon; - delete addButton; - delete addMenu; - delete interactorDirectory; -} - -void G4InteractorMessenger::SetNewValue ( - G4UIcommand* command -,G4String newValue -) -{ - G4int paramn = (G4int)command->GetParameterEntries(); - G4String* params = new G4String [paramn]; - if(GetValues(newValue,paramn,params)==true) { - if(command==addMenu) { - session->AddMenu((const char*)params[0],(const char*)params[1]); - } else if(command==addButton) { - session->AddButton((const char*)params[0],(const char*)params[1],(const char*)params[2]); - } else if(command==addIcon) { - session->AddIcon((const char*)params[0],(const char*)params[1],(const char*)params[2],(const char*)params[3]); - } else if(command==defaultIcons) { - session->DefaultIcons(command->ConvertToBool(newValue)); - } else if(command==sys) { - G4int rc = system((const char*)params[0]); - if ( rc < 0 ){ } - } else if(command==outputStyle) { - session->OutputStyle((const char*)params[0],(const char*)params[1],(const char*)params[2]); - } else if(command==nativeMenu) { - session->NativeMenu(command->ConvertToBool(newValue)); - } else if(command==clearMenu) { - session->ClearMenu(); - } - } - delete [] params; -} -G4bool GetValues ( - G4String newValue -,G4int paramn -,G4String* params -) -{ - char* value = STRDUP(newValue.data()); - if(value==NULL) return false; - char* tok = strtok(value," "); - for( G4int i=0; i -#include -#include "G4VUIshell.hh" -#include "G4UIcommand.hh" -#include "G4UIcommandTree.hh" +# include "G4UIcommand.hh" +# include "G4UIcommandTree.hh" +# include "G4VUIshell.hh" + +# include + +# include // ==================================================================== // Description: // This class gives tcsh-like shell. -// -// If your terminal supports color code, colored strings are available -// in ListCommand(). For activating color support, +// +// If your terminal supports color code, colored strings are available +// in ListCommand(). For activating color support, // e.g. // tcsh-> SetLsColor(GREEN, CYAN); // (dir, command) color -// +// // [key binding] // ^A ... move cursor to the top // ^B ... backward cursor ([LEFT]) @@ -67,64 +69,90 @@ // // ==================================================================== -class G4UItcsh : public G4VUIshell { -protected: - virtual void MakePrompt(const char* msg=0); +class G4UItcsh : public G4VUIshell +{ + public: + G4UItcsh(const G4String& prompt = "%s> ", G4int maxhist = 100); + ~G4UItcsh() override; - G4String commandLine; // command line string; - G4int cursorPosition; // cursor position - G4String commandLineBuf; // temp. command line; - G4bool IsCursorLast() const; - // Is cursor position at the last of command line ? + void SetLsColor(TermColorIndex dirColor, TermColorIndex cmdColor) override; + G4String GetCommandLineString(const char* msg = nullptr) override; + + void ResetTerminal() override; + + protected: + void MakePrompt(const char* msg = nullptr) override; + + // Is cursor position at the last of command line ? + G4bool IsCursorLast() const; void InitializeCommandLine(); G4String ReadLine(); - void InsertCharacter(char cc); // insert character - void BackspaceCharacter(); // backspace character - void DeleteCharacter(); // delete character - void ClearLine(); // clear command line - void ClearAfterCursor(); // clear after the cursor - void ClearScreen(); // clear screen - - void ForwardCursor(); // move cursor forward - void BackwardCursor(); // move cursor backward - void MoveCursorTop(); // move cursor to the top - void MoveCursorEnd(); // move cursor to the end - - void NextCommand(); // next command - void PreviousCommand(); // previous command - - void ListMatchedCommand(); // list matched commands - void CompleteCommand(); // complete command - - // utilities... - G4String GetFirstMatchedString(const G4String& str1, - const G4String& str2) const; - // history functionality (history# is managed in itself) - std::vector commandHistory; - G4int maxHistory; // max# of histories stored - G4int currentHistoryNo; // global - G4int relativeHistoryIndex; // local index relative to current history# + // insert character + void InsertCharacter(char cc); + + // backspace character + void BackspaceCharacter(); + + // delete character + void DeleteCharacter(); + + // clear command line + void ClearLine(); + + // clear after the cursor + void ClearAfterCursor(); + + // clear screen + void ClearScreen(); + + // move cursor forward + void ForwardCursor(); + + // move cursor backward + void BackwardCursor(); + + // move cursor to the top + void MoveCursorTop(); + + // move cursor to the end + void MoveCursorEnd(); + + // next command + void NextCommand(); + + // previous command + void PreviousCommand(); + + // list matched commands + void ListMatchedCommand(); + + // complete command + void CompleteCommand(); + + // utilities... + G4String GetFirstMatchedString(const G4String& str1, const G4String& str2) const; void StoreHistory(G4String aCommand); - G4String RestoreHistory(G4int index); // index is global history# + // index is global history# + G4String RestoreHistory(G4int index); - // (re)set termios - termios tios; // terminal mode (prestatus) - G4String clearString; // "clear code (^L)" void SetTermToInputMode(); void RestoreTerm(); -public: - G4UItcsh(const G4String& prompt="%s> ", G4int maxhist=100); - ~G4UItcsh(); - - void SetLsColor(TermColorIndex dirColor, TermColorIndex cmdColor); - virtual G4String GetCommandLineString(const char* msg=0); - - virtual void ResetTerminal(); + G4String commandLine; // command line string; + G4int cursorPosition; // cursor position + G4String commandLineBuf; // temp. command line; + // history functionality (history# is managed in itself) + std::vector commandHistory; + G4int maxHistory; // max# of histories stored + G4int currentHistoryNo; // global + G4int relativeHistoryIndex; // local index relative to current history# + // (re)set termios + termios tios; // terminal mode (prestatus) + G4String clearString; // "clear code (^L)" }; // ==================================================================== @@ -132,18 +160,15 @@ public: // ==================================================================== inline G4bool G4UItcsh::IsCursorLast() const { - if(cursorPosition == G4int(commandLine.length()+1)) return TRUE; - else return FALSE; + return cursorPosition == G4int(commandLine.length() + 1); } -inline void G4UItcsh::SetLsColor(TermColorIndex dirColor, - TermColorIndex cmdColor) +inline void G4UItcsh::SetLsColor(TermColorIndex dirColor, TermColorIndex cmdColor) { - lsColorFlag= TRUE; - directoryColor= dirColor; - commandColor= cmdColor; + lsColorFlag = true; + directoryColor = dirColor; + commandColor = cmdColor; } #endif #endif - diff --git a/source/interfaces/basic/include/G4UIterminal.hh b/source/interfaces/core/include/G4UIterminal.hh similarity index 81% rename from source/interfaces/basic/include/G4UIterminal.hh rename to source/interfaces/core/include/G4UIterminal.hh index 791d8db0098..4663884f018 100644 --- a/source/interfaces/basic/include/G4UIterminal.hh +++ b/source/interfaces/core/include/G4UIterminal.hh @@ -32,9 +32,9 @@ // This class inherits the class G4UIsession. // This is the class to use a character-terminal sesion. // -// Usage: -// G4UIsession* terminalSession = new G4UIterminal; -// or G4UIsession* terminalSession = new G4UIterminal(new your-shell); +// Usage: +// G4UIsession* terminalSession = new G4UIterminal; +// or G4UIsession* terminalSession = new G4UIterminal(new your-shell); // // A character-terminal session "terminalSession" is instantiated. // G4cout stream is redirected by default to the constructed instance. @@ -50,9 +50,9 @@ // Which shell? / How to define your own shell? // Currently two kinds of shells, // G4UIcsh / G4UItcsh -// , are presented. +// , are presented. // They inherit the abstract base class, G4VUIshell. -// In order to define your own shell, +// In order to define your own shell, // - Define your own shell class derived from G4VUIshell. // - Implement GetCommandLine() method (pure virtual). // - Add more functionality, if need. @@ -62,13 +62,35 @@ #ifndef G4UIterminal_h #define G4UIterminal_h 1 -#include #include "G4UImanager.hh" #include "G4VBasicShell.hh" #include "G4VUIshell.hh" -class G4UIterminal : public G4VBasicShell { -private: +#include + +class G4UIterminal : public G4VBasicShell +{ + public: + G4UIterminal(G4VUIshell* aShell = nullptr, G4bool qsig = true); + ~G4UIterminal() override; + + void SetPrompt(const G4String& prompt); + + // These methods are implementation of corresponding virtual methods + // of G4UIsession class. + G4UIsession* SessionStart() override; + void PauseSessionStart(const G4String& msg) override; + G4int ReceiveG4debug(const G4String& debugString) override; + G4int ReceiveG4cout(const G4String& coutString) override; + G4int ReceiveG4cerr(const G4String& cerrString) override; + + private: + void ExecuteCommand(const G4String& aCommand) override; + G4bool GetHelpChoice(G4int& aInt) override; + void ExitHelp() const override; + G4String GetCommand(const char* msg = nullptr); + + private: G4UImanager* UI; // shell G4VUIshell* shell; @@ -76,27 +98,6 @@ private: // program states G4bool iExit; G4bool iCont; - -public: - G4UIterminal(G4VUIshell* aShell=0, G4bool qsig=true); - ~G4UIterminal(); - - void SetPrompt(const G4String& prompt); - -private: - virtual void ExecuteCommand(const G4String& aCommand); - virtual G4bool GetHelpChoice(G4int& aInt); - virtual void ExitHelp() const; - G4String GetCommand(const char* msg=0); - -public: - // These methods are implementation of corresponding virtual methods - // of G4UIsession class. - virtual G4UIsession* SessionStart(); - virtual void PauseSessionStart(const G4String& msg); - virtual G4int ReceiveG4cout(const G4String& coutString); - virtual G4int ReceiveG4cerr(const G4String& cerrString); }; #endif - diff --git a/source/interfaces/common/include/G4VBasicShell.hh b/source/interfaces/core/include/G4VBasicShell.hh similarity index 56% rename from source/interfaces/common/include/G4VBasicShell.hh rename to source/interfaces/core/include/G4VBasicShell.hh index 8c5b5a68bd2..1473b601f9f 100644 --- a/source/interfaces/common/include/G4VBasicShell.hh +++ b/source/interfaces/core/include/G4VBasicShell.hh @@ -50,57 +50,57 @@ class G4UIcommand; class G4VBasicShell : public G4UIsession { - public: - G4VBasicShell(); - virtual ~G4VBasicShell(); + public: + G4VBasicShell(); + ~G4VBasicShell() override; - virtual G4UIsession* SessionStart() = 0; - // null should be returned for interactive session + G4UIsession* SessionStart() override = 0; + // null should be returned for interactive session - virtual void PauseSessionStart(const G4String& Prompt) = 0; - // Prompt string can be ignored + void PauseSessionStart(const G4String& Prompt) override = 0; + // Prompt string can be ignored - protected: - G4String ModifyToFullPathCommand(const char* aCommandLine) const; - // convert "BeamOn 10" to "/run/BeamOn 10" if the - // current working directory is "/run/" + protected: + // convert "BeamOn 10" to "/run/BeamOn 10" if the + // current working directory is "/run/" + G4String ModifyToFullPathCommand(const char* aCommandLine) const; - G4String GetCurrentWorkingDirectory() const; - // directory string starts with '/' and ends with '/' + // directory string starts with '/' and ends with '/' + G4String GetCurrentWorkingDirectory() const; - G4bool ChangeDirectory(const char* newDir); - // change directory to newDir - // false will be returned if the target directory doesn't exist + // change directory to newDir + // false will be returned if the target directory doesn't exist + G4bool ChangeDirectory(const char* newDir); - G4UIcommandTree* FindDirectory(const char* dirName) const; - // find G4UIcommandTree object - // null returned if the taregt does not exist + // find G4UIcommandTree object + // null returned if the taregt does not exist + G4UIcommandTree* FindDirectory(const char* dirName) const; - G4UIcommand* FindCommand(const char* commandName) const; - // find G4UIcommand object - // null returned if the target does not exist + // find G4UIcommand object + // null returned if the target does not exist + G4UIcommand* FindCommand(const char* commandName) const; - G4String Complete(const G4String&); - // command completion + // command completion + G4String Complete(const G4String&); - G4String FindMatchingPath(G4UIcommandTree*, const G4String&); + G4String FindMatchingPath(G4UIcommandTree*, const G4String&); - ///////////////////////////////////////////// - // Methods involving an interactive G4cout // - ///////////////////////////////////////////// - virtual void ExecuteCommand(const G4String&); - virtual G4bool GetHelpChoice(G4int&) = 0; - virtual void ExitHelp() const = 0; - void ApplyShellCommand(const G4String&, G4bool&, G4bool&); - void ShowCurrent(const G4String&) const; - void ChangeDirectoryCommand(const G4String&); - void ListDirectory(const G4String&) const; - void TerminalHelp(const G4String&); + ///////////////////////////////////////////// + // Methods involving an interactive G4cout // + ///////////////////////////////////////////// + virtual void ExecuteCommand(const G4String&); + virtual G4bool GetHelpChoice(G4int&) = 0; + virtual void ExitHelp() const = 0; + void ApplyShellCommand(const G4String&, G4bool&, G4bool&); + void ShowCurrent(const G4String&) const; + void ChangeDirectoryCommand(const G4String&); + void ListDirectory(const G4String&) const; + void TerminalHelp(const G4String&); - private: - G4String currentDirectory; + private: + G4String ModifyPath(const G4String& tempPath) const; - G4String ModifyPath(const G4String& tempPath) const; + G4String currentDirectory; }; #endif diff --git a/source/interfaces/common/include/G4VInteractiveSession.hh b/source/interfaces/core/include/G4VInteractiveSession.hh similarity index 65% rename from source/interfaces/common/include/G4VInteractiveSession.hh rename to source/interfaces/core/include/G4VInteractiveSession.hh index 1d01a6ec381..8017f2e77a1 100644 --- a/source/interfaces/common/include/G4VInteractiveSession.hh +++ b/source/interfaces/core/include/G4VInteractiveSession.hh @@ -28,11 +28,12 @@ #ifndef G4VInteractiveSession_H #define G4VInteractiveSession_H 1 -#include - #include "G4VInteractorManager.hh" +#include + class G4UImessenger; +class G4SceneTreeItem; // Class description : // @@ -43,26 +44,41 @@ class G4UImessenger; class G4VInteractiveSession { - public: //with description + public: // with description + struct OutputStyle + { + G4bool fixed, bold, highlight; + }; - G4VInteractiveSession(); - virtual ~G4VInteractiveSession(); - virtual void AddMenu (const char*,const char*); - virtual void AddButton (const char*,const char*,const char*); - virtual void AddIcon (const char*,const char*,const char*,const char*); - virtual void DefaultIcons (bool); - virtual void OutputStyle (const char*,const char*,const char*); - virtual void NativeMenu (bool); - virtual void ClearMenu (); - void AddInteractor(G4String,G4Interactor); - G4Interactor GetInteractor(G4String); + G4VInteractiveSession(); + virtual ~G4VInteractiveSession(); + virtual void AddMenu(const char*, const char*); + virtual void AddButton(const char*, const char*, const char*); + virtual void AddIcon(const char*, const char*, const char*, const char*); + virtual void DefaultIcons(bool); + virtual void SetOutputStyle(const char*, const char*); + virtual void NativeMenu(bool); + virtual void ClearMenu(); + virtual void UpdateSceneTree(const G4SceneTreeItem&); + void AddInteractor(G4String, G4Interactor); + G4Interactor GetInteractor(G4String); + const std::map& GetOutputStyles() const; - private: + protected: + void SetStyleUtility(const G4String& destination, const G4String& style); + // clang-format off + std::map fOutputStyles { + {"cout",{true,false,true}}, + {"cerr",{true,true,true}}, + {"warn",{true,false,true}}, + {"error",{true,true,true}}, + {"debug",{true,false,true}}}; + // clang-format on + private: G4UImessenger* messenger; - typedef std::map > G4interactor_map; + using G4interactor_map = std::map>; G4interactor_map interactors; }; #endif - diff --git a/source/interfaces/core/include/G4VInteractorManager.hh b/source/interfaces/core/include/G4VInteractorManager.hh new file mode 100644 index 00000000000..d9648118d61 --- /dev/null +++ b/source/interfaces/core/include/G4VInteractorManager.hh @@ -0,0 +1,105 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// +// G.Barrand + +#ifndef G4VINTERACTORMANAGER_HH +#define G4VINTERACTORMANAGER_HH + +#include "globals.hh" + +#include + +using G4Interactor = void*; +using G4DispatchFunction = G4bool (*)(void*); +using G4SecondaryLoopAction = void (*)(); + +// Class description : +// +// G4VInteractorManager : a base class to isolate common things +// to various GUI "toolkits" like WIndows, Xt. +// The word "interactor" is for "piece of user interface" or +// "widget" (which means nothing). Then a GUI "toolkit" could be +// defined as a manager of interactors. +// +// Class description - end : + +class G4VInteractorManager +{ + public: + G4VInteractorManager(); + virtual ~G4VInteractorManager(); + void SetArguments(int, char**); + char** GetArguments(int*); + void SetMainInteractor(G4Interactor); + G4Interactor GetMainInteractor(); + void AddDispatcher(G4DispatchFunction); + void RemoveDispatcher(G4DispatchFunction); + void AddSecondaryLoopPreAction(G4SecondaryLoopAction); + void AddSecondaryLoopPostAction(G4SecondaryLoopAction); + void AddShell(G4Interactor); + void RemoveShell(G4Interactor); + void EnableSecondaryLoop(); + void DisableSecondaryLoop(); + void SecondaryLoopPreActions(); + void SecondaryLoopPostActions(); + void RequireExitSecondaryLoop(int); + void DispatchEvent(void*); + virtual void SecondaryLoop(); + int GetExitSecondaryLoopCode(); + void PutStringInResourceDatabase(char*); + virtual G4bool Inited() = 0; + virtual void* GetEvent() = 0; + virtual void FlushAndWaitExecution() = 0; + void SetParentInteractor(G4Interactor); + G4Interactor GetParentInteractor(); + void SetCreatedInteractor(G4Interactor); + G4Interactor GetCreatedInteractor(); + void SetCreationString(char*); + char* GetCreationString(); + + private: + int argc; + char** argv; + G4Interactor mainInteractor; + std::vector dispatchers; + std::vector preActions; + std::vector postActions; + std::vector shells; + G4bool secondaryLoopEnabled; + G4bool alreadyInSecondaryLoop; + int exitSecondaryLoop; + G4Interactor parentInteractor; + G4Interactor createdInteractor; + char* creationString; +}; + +#define OGL_EXIT_CODE 1 +#define OIV_EXIT_CODE 2 +#define XO_EXIT_CODE 3 + +#endif diff --git a/source/interfaces/basic/include/G4VUIshell.hh b/source/interfaces/core/include/G4VUIshell.hh similarity index 76% rename from source/interfaces/basic/include/G4VUIshell.hh rename to source/interfaces/core/include/G4VUIshell.hh index 88c3244e0b5..df5290b04d7 100644 --- a/source/interfaces/basic/include/G4VUIshell.hh +++ b/source/interfaces/core/include/G4VUIshell.hh @@ -32,13 +32,13 @@ #include "globals.hh" // ==================================================================== -// Description: +// Description: // This class is the abstract base class for various UI shells. // // GetCommadLineString() (virtual) returns a command string input from // a commad line. // -// Two pre-inplemented shell commands(still virtual) are also included, +// Two pre-inplemented shell commands(still virtual) are also included, // (somewhat differnt flavor from ones provided by G4VBasicShell) // ShowCurrentDirectory() ... show current directory // ListCommand() ... list commands @@ -50,35 +50,24 @@ // ==================================================================== // terminal color index -enum TermColorIndex{ BLACK=0, RED, GREEN, YELLOW, - BLUE, PURPLE, CYAN, WHITE}; +enum TermColorIndex +{ + BLACK = 0, + RED, + GREEN, + YELLOW, + BLUE, + PURPLE, + CYAN, + WHITE +}; class G4UIcommandTree; -class G4VUIshell { -protected: - G4String promptSetting; // including %-directive - G4String promptString; - virtual void MakePrompt(const char* msg=0); // make prompt string - G4int nColumn; // column size of terminal (default=80) - - // color code support (effective if your terminal supports color code.) - // default setting is off. - G4bool lsColorFlag; // color flag for list command - TermColorIndex directoryColor; - TermColorIndex commandColor; - - // for treating G4 command tree... - G4String currentCommandDir; // current command directory (absolute path) - // get tree node - G4UIcommandTree* GetCommandTree(const G4String& dir) const; - // absolute path name (ignore command) - G4String GetAbsCommandDirPath(const G4String& apath) const; - // tail of path ( xxx/xxx/zzz -> zzz, trancated //// -> /) - G4String GetCommandPathTail(const G4String& apath) const; - -public: - G4VUIshell(const G4String& prompt="> "); +class G4VUIshell +{ + public: + G4VUIshell(const G4String& prompt = "> "); virtual ~G4VUIshell(); void SetNColumn(G4int ncol); @@ -88,41 +77,53 @@ public: // shell commands virtual void ShowCurrentDirectory() const; - virtual void ListCommand(const G4String& input, - const G4String& candidate="") const; + // "candidate" is specified with full path. + virtual void ListCommand(const G4String& input, const G4String& candidate = "") const; // get command string from a command line - virtual G4String GetCommandLineString(const char* msg=0)= 0; + virtual G4String GetCommandLineString(const char* msg = nullptr) = 0; virtual void ResetTerminal(); + + protected: + // make prompt string + virtual void MakePrompt(const char* msg = nullptr); + + // get tree node + G4UIcommandTree* GetCommandTree(const G4String& dir) const; + + // absolute path name (ignore command) + G4String GetAbsCommandDirPath(const G4String& apath) const; + + // tail of path ( xxx/xxx/zzz -> zzz, trancated //// -> /) + G4String GetCommandPathTail(const G4String& apath) const; + + G4String promptSetting; // including %-directive + G4String promptString; + G4int nColumn; // column size of terminal (default=80) + + // color code support (effective if your terminal supports color code.) + // default setting is off. + G4bool lsColorFlag; // color flag for list command + TermColorIndex directoryColor; + TermColorIndex commandColor; + + // for treating G4 command tree... + G4String currentCommandDir; // current command directory (absolute path) }; // ==================================================================== // inline functions // ==================================================================== -inline void G4VUIshell::SetNColumn(G4int ncol) -{ - nColumn= ncol; -} +inline void G4VUIshell::SetNColumn(G4int ncol) { nColumn = ncol; } -inline void G4VUIshell::SetPrompt(const G4String& prompt) -{ - promptSetting= prompt; -} +inline void G4VUIshell::SetPrompt(const G4String& prompt) { promptSetting = prompt; } -inline void G4VUIshell::SetCurrentDirectory(const G4String& dir) -{ - currentCommandDir= dir; -} +inline void G4VUIshell::SetCurrentDirectory(const G4String& dir) { currentCommandDir = dir; } -inline void G4VUIshell::SetLsColor(TermColorIndex, TermColorIndex) -{ -} +inline void G4VUIshell::SetLsColor(TermColorIndex, TermColorIndex) {} -inline void G4VUIshell::ShowCurrentDirectory() const -{ - G4cout << currentCommandDir << G4endl; -} +inline void G4VUIshell::ShowCurrentDirectory() const { G4cout << currentCommandDir << G4endl; } #endif diff --git a/source/interfaces/core/sources.cmake b/source/interfaces/core/sources.cmake new file mode 100644 index 00000000000..c55642d9090 --- /dev/null +++ b/source/interfaces/core/sources.cmake @@ -0,0 +1,29 @@ +# - G4UIcore module build definition + +# Define the Geant4 Module. +geant4_add_module(G4UIcore + PUBLIC_HEADERS + G4InteractorMessenger.hh + G4UIArrayString.hh + G4UIcsh.hh + G4UIterminal.hh + G4VBasicShell.hh + G4VInteractiveSession.hh + G4VInteractorManager.hh + G4VUIshell.hh + SOURCES + G4InteractorMessenger.cc + G4UIArrayString.cc + G4UIcsh.cc + G4UIterminal.cc + G4VBasicShell.cc + G4VInteractiveSession.cc + G4VInteractorManager.cc + G4VUIshell.cc) + +if(UNIX) + geant4_module_sources(G4UIcore PUBLIC_HEADERS G4UItcsh.hh SOURCES G4UItcsh.cc) +endif() + +geant4_module_link_libraries(G4UIcore PUBLIC G4globman G4intercoms) + diff --git a/source/interfaces/core/src/G4InteractorMessenger.cc b/source/interfaces/core/src/G4InteractorMessenger.cc new file mode 100644 index 00000000000..84c152ec6c1 --- /dev/null +++ b/source/interfaces/core/src/G4InteractorMessenger.cc @@ -0,0 +1,263 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// + +#include "G4InteractorMessenger.hh" + +#include "G4UIcommand.hh" +#include "G4UIdirectory.hh" +#include "G4VInteractiveSession.hh" + +#include +#include + +#define STRDUP(str) \ + ((str) != NULL ? (strcpy((char*)malloc((unsigned)strlen(str) + 1), str)) : (char*)NULL) +#define STRDEL(str) \ + { \ + if ((str) != NULL) { \ + free(str); \ + str = NULL; \ + } \ + } + +static G4bool GetValues(G4String, G4int, G4String*); + +G4InteractorMessenger::G4InteractorMessenger(G4VInteractiveSession* a_session) +{ + session = a_session; + + G4UIparameter* parameter; + + // gui commands should *not* be broadcast to workers + G4bool propagateToWorkers; + interactorDirectory = new G4UIdirectory("/gui/", propagateToWorkers = false); + interactorDirectory->SetGuidance("UI interactors commands."); + + // /gui/addMenu : + addMenu = new G4UIcommand("/gui/addMenu", this); + addMenu->SetGuidance("Add a menu to menu bar."); + parameter = new G4UIparameter("Name", 's', false); + parameter->SetDefaultValue("dummy"); + addMenu->SetParameter(parameter); + parameter = new G4UIparameter("Label", 's', false); + parameter->SetDefaultValue("dummy"); + addMenu->SetParameter(parameter); + + // /gui/addButton : + addButton = new G4UIcommand("/gui/addButton", this); + addButton->SetGuidance("Add a button to menu."); + parameter = new G4UIparameter("Menu", 's', false); + parameter->SetDefaultValue("dummy"); + addButton->SetParameter(parameter); + parameter = new G4UIparameter("Label", 's', false); + parameter->SetDefaultValue("dummy"); + addButton->SetParameter(parameter); + parameter = new G4UIparameter("Command", 's', false); + parameter->SetDefaultValue(""); + addButton->SetParameter(parameter); + + // /gui/defaultIcons : + defaultIcons = new G4UIcommand("/gui/defaultIcons", this); + defaultIcons->SetGuidance("Set the Geant4 defaults icons in Qt driver."); + defaultIcons->SetGuidance("By default, Geant4 icons are enable."); + + parameter = new G4UIparameter("bool", 'b', true); + parameter->SetDefaultValue("true"); + defaultIcons->SetParameter(parameter); + + // /gui/addIcon : + addIcon = new G4UIcommand("/gui/addIcon", this); + addIcon->SetGuidance("Add a non-checkable icon to the Icon toolbar."); + addIcon->SetGuidance( + "If the Icon parameter is set to \"user_icon\", you should provide the icon file in xpm " + "format, otherwise you have to choose one of the candidate icons"); + addIcon->SetGuidance( + "A command given without parameters will display a window that will allow one to choose the " + "parameters (if needed) for this command."); + addIcon->SetGuidance( + "E.g: /gui/addIcon \"Change background color\" user_icon /vis/viewer/set/background " + "../Images/background.xpm"); + addIcon->SetGuidance("Special cases for the Icon parameter:"); + addIcon->SetGuidance( + " - open: Open an open-file-selector that can run the Command with File as argument."); + addIcon->SetGuidance( + " - save: Open a save-file-selector that can run the Command with File as argument."); + addIcon->SetGuidance( + " - move/rotate/pick/zoom_in/zoom_out: Theses icons are radio-button icons that can change " + "cursor action."); + addIcon->SetGuidance( + " - wireframe/solid/hidden_line_removal/hidden_line_and_surface_removal: These icons are " + "radio-button icons that can change drawing style."); + addIcon->SetGuidance( + " - perspective/ortho: These icons are radio-button icons that can change projection style."); + + parameter = new G4UIparameter("Label", 's', false); + parameter->SetDefaultValue(""); + addIcon->SetParameter(parameter); + + parameter = new G4UIparameter("Icon", 's', false); + parameter->SetDefaultValue(""); + parameter->SetParameterCandidates( + "open save move rotate pick zoom_in zoom_out wireframe solid hidden_line_removal " + "hidden_line_and_surface_removal perspective ortho exit user_icon"); + addIcon->SetParameter(parameter); + + parameter = new G4UIparameter("Command", 's', true); + parameter->SetDefaultValue("no_command"); + addIcon->SetParameter(parameter); + + parameter = new G4UIparameter("File", 's', true); + parameter->SetDefaultValue("no_file"); + addIcon->SetParameter(parameter); + + // /gui/system : + sys = new G4UIcommand("/gui/system", this); + sys->SetGuidance("Send a command to the system."); + parameter = new G4UIparameter("Command", 's', false); + parameter->SetDefaultValue(""); + sys->SetParameter(parameter); + + // /gui/outputStyle : + outputStyle = new G4UIcommand("/gui/outputStyle", this); + outputStyle->SetGuidance("Set output style."); + outputStyle->SetGuidance("First parameter: destination stream."); + outputStyle->SetGuidance("Second parameter: style."); + outputStyle->SetGuidance( + "Note that highlight for cout refers only to echoed commands, i.e.," + "\ncommands echoed by \"/control/verbose 2\"."); + outputStyle->SetGuidance("Note also that plain resets both highlight and bold."); + parameter = new G4UIparameter("destination", 's', true); // Omitable + const auto& outputStyles = session->GetOutputStyles(); + G4String candidates; + for (const auto& style : outputStyles) { + candidates += style.first + ' '; + } + candidates += "all"; + parameter->SetParameterCandidates(candidates); + parameter->SetDefaultValue("all"); + outputStyle->SetParameter(parameter); + parameter = new G4UIparameter("style", 's', true); // Omitable + parameter->SetParameterCandidates("fixed proportional bold plain highlight"); + parameter->SetDefaultValue("fixed"); + outputStyle->SetParameter(parameter); + + // /gui/nativeMenuBar : + nativeMenu = new G4UIcommand("/gui/nativeMenuBar", this); + nativeMenu->SetGuidance("Allow native menu bar in Geant4 Qt driver."); + nativeMenu->SetGuidance("By default, enable."); + + parameter = new G4UIparameter("bool", 'b', true); + parameter->SetDefaultValue("true"); + nativeMenu->SetParameter(parameter); + // /gui/clearMenu + clearMenu = new G4UIcommand("/gui/clearMenu", this); + clearMenu->SetGuidance("Clear menu bar, remove all user defined menu entries."); +} + +G4InteractorMessenger::~G4InteractorMessenger() +{ + delete clearMenu; + delete nativeMenu; + delete outputStyle; + delete sys; + delete defaultIcons; + delete addIcon; + delete addButton; + delete addMenu; + delete interactorDirectory; +} + +void G4InteractorMessenger::SetNewValue(G4UIcommand* command, G4String newValue) +{ + auto paramn = (G4int)command->GetParameterEntries(); + auto params = new G4String[paramn]; + if (GetValues(newValue, paramn, params)) { + if (command == addMenu) { + session->AddMenu((const char*)params[0], (const char*)params[1]); + } + else if (command == addButton) { + session->AddButton((const char*)params[0], (const char*)params[1], (const char*)params[2]); + } + else if (command == addIcon) { + session->AddIcon((const char*)params[0], (const char*)params[1], (const char*)params[2], + (const char*)params[3]); + } + else if (command == defaultIcons) { + session->DefaultIcons(command->ConvertToBool(newValue)); + } + else if (command == sys) { + G4int rc = system((const char*)params[0]); + if (rc < 0) { + } + } + else if (command == outputStyle) { + session->SetOutputStyle((const char*)params[0], (const char*)params[1]); + } + else if (command == nativeMenu) { + session->NativeMenu(command->ConvertToBool(newValue)); + } + else if (command == clearMenu) { + session->ClearMenu(); + } + } + delete[] params; +} +G4bool GetValues(G4String newValue, G4int paramn, G4String* params) +{ + char* value = STRDUP(newValue.data()); + if (value == nullptr) return false; + char* tok = strtok(value, " "); + for (G4int i = 0; i < paramn; ++i) { + if (tok == nullptr) { + STRDEL(value); + return false; + } + G4String token = tok; + if (token[0] == '"') { + while (token.back() != '"') { + tok = strtok(nullptr, " "); + if ((tok == nullptr) || (*tok == '\0')) { + STRDEL(value); + return false; + } + token += " "; + token += tok; + } + G4StrUtil::strip(token, '"'); + } + if (token.empty()) { + STRDEL(value); + return false; + } + + params[i] = token; + + tok = strtok(nullptr, " "); + } + STRDEL(value); + return true; +} diff --git a/source/interfaces/basic/src/G4UIArrayString.cc b/source/interfaces/core/src/G4UIArrayString.cc similarity index 57% rename from source/interfaces/basic/src/G4UIArrayString.cc rename to source/interfaces/core/src/G4UIArrayString.cc index e1c7e315298..25c0c2aa673 100644 --- a/source/interfaces/basic/src/G4UIArrayString.cc +++ b/source/interfaces/core/src/G4UIArrayString.cc @@ -26,72 +26,77 @@ // // -#include #include "G4UIArrayString.hh" -static const char strESC= '\033'; +#include + +static const char strESC = '\033'; //////////////////////////////////////////////////////// G4UIArrayString::G4UIArrayString(const G4String& stream) //////////////////////////////////////////////////////// { - nElement=0; - nColumn=5; // temporal assignment + nElement = 0; + nColumn = 5; // temporal assignment G4String astream = G4StrUtil::strip_copy(stream); // tokenize... - std::size_t indx=0; - while(1) { - std::size_t jc= astream.find(" ", indx); + std::size_t indx = 0; + while (true) { + std::size_t jc = astream.find(' ', indx); nElement++; - if(jc == G4String::npos) break; - jc++; // fix a tiny mistake... - for(; jc< astream.length(); ) { // skip continuing spaces - if(astream[(G4int)jc]==' ') jc++; - else break; + if (jc == G4String::npos) break; + jc++; // fix a tiny mistake... + for (; jc < astream.length();) { // skip continuing spaces + if (astream[(G4int)jc] == ' ') + jc++; + else + break; } - indx= jc; + indx = jc; } // allocate string array - stringArray= new G4String[nElement]; + stringArray = new G4String[nElement]; // push... - indx=0; - for(G4int i=0; i=1 && irow>=1)) // offset of column/row is "1". +{ + if (icol < 1 || irow < 1) // offset of column/row is "1". G4cerr << "G4UIArrayString: overrange" << G4endl; - if(icol>nColumn) G4cerr << "G4UIArrayString: overrange" << G4endl; + if (icol > nColumn) G4cerr << "G4UIArrayString: overrange" << G4endl; - G4int jq= (irow-1)*nColumn + icol; - if(jq> nElement) G4cerr << "G4UIArrayString: overrange" << G4endl; + G4int jq = (irow - 1) * nColumn + icol; + if (jq > nElement) G4cerr << "G4UIArrayString: overrange" << G4endl; jq--; return &stringArray[jq]; @@ -102,31 +107,33 @@ G4int G4UIArrayString::GetNRow(int icol) const //////////////////////////////////////////// { G4int ni; - if(nElement%nColumn ==0) ni= nElement/nColumn; - else ni= nElement/nColumn + 1; + if (nElement % nColumn == 0) + ni = nElement / nColumn; + else + ni = nElement / nColumn + 1; - G4int nn= nElement%nColumn; - if(nn==0) nn= nColumn; + G4int nn = nElement % nColumn; + if (nn == 0) nn = nColumn; - if(icol<= nn) return ni; - else return ni-1; + if (icol <= nn) return ni; + return ni - 1; } //////////////////////////////////////////////// G4int G4UIArrayString::GetNField(int icol) const //////////////////////////////////////////////// { - std::size_t maxWidth=0; - for (G4int iy=1; iy<= GetNRow(icol); iy++) { - std::size_t ilen= GetElement(icol,iy)->length(); + std::size_t maxWidth = 0; + for (G4int iy = 1; iy <= GetNRow(icol); iy++) { + std::size_t ilen = GetElement(icol, iy)->length(); // care for color code // if(GetElement(icol,iy)-> index(strESC,0) != G4String::npos) { // if(strESC == (*GetElement(icol,iy))[0] ) { - const char tgt = (*GetElement(icol,iy))[(std::size_t)0]; - if(strESC == tgt) { - ilen-= 5; + const char tgt = (*GetElement(icol, iy))[(std::size_t)0]; + if (strESC == tgt) { + ilen -= 5; } - if(ilen> maxWidth) maxWidth= ilen; + if (ilen > maxWidth) maxWidth = ilen; } return (G4int)maxWidth; @@ -136,14 +143,14 @@ G4int G4UIArrayString::GetNField(int icol) const int G4UIArrayString::CalculateColumnWidth() const ///////////////////////////////////////////////// { - G4int totalWidth= 0; + G4int totalWidth = 0; - for(G4int ix=1; ix<= nColumn; ix++) { - totalWidth+= GetNField(ix); + for (G4int ix = 1; ix <= nColumn; ix++) { + totalWidth += GetNField(ix); } - const G4int nwSpace= 2; - totalWidth+= (nColumn-1)*nwSpace; // for space + const G4int nwSpace = 2; + totalWidth += (nColumn - 1) * nwSpace; // for space return totalWidth; } @@ -153,37 +160,38 @@ void G4UIArrayString::Show(G4int ncol) ////////////////////////////////////// { // calculate #colums in need... - while( CalculateColumnWidth()< ncol ) { + while (CalculateColumnWidth() < ncol) { nColumn++; } - while( CalculateColumnWidth()> ncol && nColumn>1 ) { + while (CalculateColumnWidth() > ncol && nColumn > 1) { nColumn--; } - - for(G4int iy=1; iy<= GetNRow(1); iy++) { - G4int nc= nColumn; - if(iy == GetNRow(1)) { // last row - nc= nElement%nColumn; - if(nc==0) nc= nColumn; + + for (G4int iy = 1; iy <= GetNRow(1); iy++) { + G4int nc = nColumn; + if (iy == GetNRow(1)) { // last row + nc = nElement % nColumn; + if (nc == 0) nc = nColumn; } - for(G4int ix=1; ix<=nc; ix++) { - G4String word= GetElement(ix,iy)-> data(); + for (G4int ix = 1; ix <= nc; ix++) { + G4String word = GetElement(ix, iy)->data(); // care for color code G4String colorWord; const char tgt = word[(std::size_t)0]; - if(strESC == tgt) { - colorWord= word.substr(0,5); - word.erase(0,5); + if (strESC == tgt) { + colorWord = word.substr(0, 5); + word.erase(0, 5); } - if(!colorWord.empty()) G4cout << colorWord << std::flush; - - G4cout << std::setiosflags(std::ios::left) << std::setw(GetNField(ix)) - << word.c_str() << std::flush; - // against problem w/ g++ iostream - if(ix != nc) G4cout << " " << std::flush; - else G4cout << G4endl; + if (! colorWord.empty()) G4cout << colorWord << std::flush; + + G4cout << std::setiosflags(std::ios::left) << std::setw(GetNField(ix)) << word.c_str() + << std::flush; + // against problem w/ g++ iostream + if (ix != nc) + G4cout << " " << std::flush; + else + G4cout << G4endl; } } } - diff --git a/source/interfaces/basic/src/G4UIcsh.cc b/source/interfaces/core/src/G4UIcsh.cc similarity index 83% rename from source/interfaces/basic/src/G4UIcsh.cc rename to source/interfaces/core/src/G4UIcsh.cc index 84437102394..0ca73e4dc5d 100644 --- a/source/interfaces/basic/src/G4UIcsh.cc +++ b/source/interfaces/core/src/G4UIcsh.cc @@ -29,18 +29,13 @@ #include "G4UIcsh.hh" //////////////////////////////////////// -G4UIcsh::G4UIcsh(const G4String& prompt) - : G4VUIshell(prompt) +G4UIcsh::G4UIcsh(const G4String& prompt) : G4VUIshell(prompt) //////////////////////////////////////// -{ -} +{} /////////////////// -G4UIcsh::~G4UIcsh() +G4UIcsh::~G4UIcsh() = default; /////////////////// -{ -} - /////////////////////////////////////////////////////// G4String G4UIcsh::GetCommandLineString(const char* msg) @@ -51,26 +46,25 @@ G4String G4UIcsh::GetCommandLineString(const char* msg) G4String newCommand; G4StrUtil::readline(G4cin, newCommand, false); - if (!G4cin.good()) { - G4cin.clear(); - newCommand= "exit"; + if (! G4cin.good()) { + G4cin.clear(); + newCommand = "exit"; return newCommand; } - G4StrUtil::rstrip(newCommand, '\r'); // fix for odd behavior on Windows + G4StrUtil::rstrip(newCommand, '\r'); // fix for odd behavior on Windows // multi-line - while( (newCommand.length() > 0) && - (newCommand[G4int(newCommand.length()-1)] == '_') ) { + while ((newCommand.length() > 0) && (newCommand[G4int(newCommand.length() - 1)] == '_')) { G4String newLine; - newCommand.erase(newCommand.length()-1); + newCommand.erase(newCommand.length() - 1); G4StrUtil::readline(G4cin, newLine, false); - if (!G4cin.good()) { - G4cin.clear(); - newCommand= "exit"; + if (! G4cin.good()) { + G4cin.clear(); + newCommand = "exit"; return newCommand; } newCommand.append(newLine); } - + return newCommand; } diff --git a/source/interfaces/core/src/G4UItcsh.cc b/source/interfaces/core/src/G4UItcsh.cc new file mode 100644 index 00000000000..69f3a87c7ec --- /dev/null +++ b/source/interfaces/core/src/G4UItcsh.cc @@ -0,0 +1,775 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// + +#ifndef WIN32 + +# include "G4UItcsh.hh" + +# include "G4StateManager.hh" +# include "G4Types.hh" +# include "G4UIcommandStatus.hh" + +# include +# include +# include +# include + +// ASCII character code +static const char AsciiCtrA = '\001'; +static const char AsciiCtrB = '\002'; +static const char AsciiCtrC = '\003'; +static const char AsciiCtrD = '\004'; +static const char AsciiCtrE = '\005'; +static const char AsciiCtrF = '\006'; +static const char AsciiCtrK = '\013'; +static const char AsciiCtrL = '\014'; +static const char AsciiCtrN = '\016'; +static const char AsciiCtrP = '\020'; +static const char AsciiCtrQ = '\021'; +static const char AsciiCtrS = '\023'; +static const char AsciiCtrZ = '\032'; +static const char AsciiTAB = '\011'; +static const char AsciiBS = '\010'; +static const char AsciiDEL = '\177'; +static const char AsciiESC = '\033'; + +static const int AsciiPrintableMin = 32; + +// history file +static const G4String historyFileName = "/.g4_hist"; + +///////////////////////////////////////////////////////// +G4UItcsh::G4UItcsh(const G4String& prompt, G4int maxhist) + : G4VUIshell(prompt), + commandLine(""), + cursorPosition(1), + commandHistory(maxhist), + maxHistory(maxhist), + currentHistoryNo(1), + relativeHistoryIndex(0) +///////////////////////////////////////////////////////// +{ + // get current terminal mode + tcgetattr(0, &tios); + + // read a shell history file + const char* path = std::getenv("HOME"); + if (path == nullptr) return; + + G4String homedir = path; + G4String fname = homedir + historyFileName; + + std::ifstream histfile; + enum + { + BUFSIZE = 1024 + }; + char linebuf[BUFSIZE]; + + histfile.open(fname, std::ios::in); + while (histfile.good()) { + if (histfile.eof()) break; + + histfile.getline(linebuf, BUFSIZE); + G4String aline = G4StrUtil::strip_copy(linebuf); + if (! aline.empty()) StoreHistory(linebuf); + } + histfile.close(); +} + +///////////////////// +G4UItcsh::~G4UItcsh() +///////////////////// +{ + // store a shell history + const char* path = std::getenv("HOME"); + if (path == nullptr) return; + + G4String homedir = path; + G4String fname = homedir + historyFileName; + + std::ofstream histfile; + histfile.open(fname, std::ios::out); + + G4int n0hist = 1; + if (currentHistoryNo > maxHistory) n0hist = currentHistoryNo - maxHistory + 1; + + for (G4int i = n0hist; i <= currentHistoryNo; i++) { + histfile << RestoreHistory(i) << G4endl; + } + + histfile.close(); +} + +////////////////////////////////////////// +void G4UItcsh::MakePrompt(const char* msg) +////////////////////////////////////////// +{ + if (promptSetting.length() <= 1) { + promptString = promptSetting; + return; + } + + promptString = ""; + G4int i; + for (i = 0; i < (G4int)promptSetting.length() - 1; ++i) { + if (promptSetting[i] == '%') { + switch (promptSetting[i + 1]) { + case 's': // current application status + { + G4String stateStr; + if (msg != nullptr) { + stateStr = msg; + } + else { + G4StateManager* statM = G4StateManager::GetStateManager(); + stateStr = statM->GetStateString(statM->GetCurrentState()); + } + promptString.append(stateStr); + i++; + } break; + case '/': // current working directory + promptString.append(currentCommandDir); + i++; + break; + case 'h': // history# + { + std::ostringstream os; + os << currentHistoryNo; + promptString.append(os.str()); + i++; + } break; + default: + break; + } + } + else { + promptString += promptSetting[i]; + } + } + + // append last chaacter + if (i == G4int(promptSetting.length() - 1)) promptString += promptSetting[i]; +} + +////////////////////////////// +void G4UItcsh::ResetTerminal() +////////////////////////////// +{ + RestoreTerm(); +} + +// -------------------------------------------------------------------- +// commad line operations +// -------------------------------------------------------------------- +////////////////////////////////////// +void G4UItcsh::InitializeCommandLine() +////////////////////////////////////// +{ + commandLine = ""; + cursorPosition = 1; +} + +/////////////////////////////////////// +void G4UItcsh::InsertCharacter(char cc) +/////////////////////////////////////// +{ + if (cc < AsciiPrintableMin || (isprint(cc) == 0)) return; + + // display... + G4cout << cc; + std::size_t i; + for (i = cursorPosition - 1; i < commandLine.length(); ++i) + G4cout << commandLine[(G4int)i]; + for (i = cursorPosition - 1; i < commandLine.length(); ++i) + G4cout << AsciiBS; + G4cout << std::flush; + + // command line string... + if (IsCursorLast()) { // add + commandLine += cc; + } + else { // insert + commandLine.insert(cursorPosition - 1, G4String(1, cc)); + } + cursorPosition++; +} + +/////////////////////////////////// +void G4UItcsh::BackspaceCharacter() +/////////////////////////////////// +{ + if (cursorPosition == 1) return; + + // display... + if (IsCursorLast()) { + G4cout << AsciiBS << ' ' << AsciiBS << std::flush; + } + else { + G4cout << AsciiBS; + std::size_t i; + for (i = cursorPosition - 2; i < commandLine.length() - 1; ++i) { + G4cout << commandLine[G4int(i + 1)]; + } + G4cout << ' '; + for (i = cursorPosition - 2; i < commandLine.length(); ++i) { + G4cout << AsciiBS; + } + G4cout << std::flush; + } + + // command line string... + commandLine.erase(cursorPosition - 2, 1); + + cursorPosition--; +} + +//////////////////////////////// +void G4UItcsh::DeleteCharacter() +//////////////////////////////// +{ + if (IsCursorLast()) return; + + // display... + std::size_t i; + for (i = cursorPosition - 1; i < commandLine.length() - 1; ++i) { + G4cout << commandLine[G4int(i + 1)]; + } + G4cout << ' '; + for (i = cursorPosition - 1; i < commandLine.length(); ++i) { + G4cout << AsciiBS; + } + G4cout << std::flush; + + // command lin string... + commandLine.erase(cursorPosition - 1, 1); +} + +////////////////////////// +void G4UItcsh::ClearLine() +////////////////////////// +{ + // display... + std::size_t i; + for (i = cursorPosition; i >= 2; i--) + G4cout << AsciiBS; + for (i = 1; i <= commandLine.length(); ++i) + G4cout << ' '; + for (i = 1; i <= commandLine.length(); ++i) + G4cout << AsciiBS; + G4cout << std::flush; + + // command line string... + commandLine.erase(); + cursorPosition = 1; +} + +///////////////////////////////// +void G4UItcsh::ClearAfterCursor() +///////////////////////////////// +{ + if (IsCursorLast()) return; + + // display... + for (std::size_t i = cursorPosition; i <= commandLine.length(); ++i) + G4cout << ' '; + for (auto j = (G4int)commandLine.length(); j >= cursorPosition; --j) + G4cout << AsciiBS; + G4cout << std::flush; + + // command line string... + commandLine.erase(cursorPosition - 1, commandLine.length() - cursorPosition + 1); +} + +//////////////////////////// +void G4UItcsh::ClearScreen() +//////////////////////////// +{ + if (! clearString.empty()) { + G4cout << clearString; + + G4cout << promptString << commandLine << std::flush; + // reset cursur position + for (auto i = G4int(commandLine.length() + 1); i >= cursorPosition + 1; --i) + G4cout << AsciiBS << std::flush; + } +} + +////////////////////////////// +void G4UItcsh::ForwardCursor() +////////////////////////////// +{ + if (IsCursorLast()) return; + + G4cout << commandLine[cursorPosition - 1] << std::flush; + cursorPosition++; +} + +/////////////////////////////// +void G4UItcsh::BackwardCursor() +/////////////////////////////// +{ + if (cursorPosition == 1) return; + + cursorPosition--; + G4cout << AsciiBS << std::flush; +} + +////////////////////////////// +void G4UItcsh::MoveCursorTop() +////////////////////////////// +{ + for (G4int i = cursorPosition; i > 1; --i) { + G4cout << AsciiBS; + } + G4cout << std::flush; + cursorPosition = 1; +} + +////////////////////////////// +void G4UItcsh::MoveCursorEnd() +////////////////////////////// +{ + for (G4int i = cursorPosition - 1; i < (G4int)commandLine.length(); ++i) { + G4cout << commandLine[i]; + } + G4cout << std::flush; + cursorPosition = G4int(commandLine.length() + 1); +} + +//////////////////////////////// +void G4UItcsh::PreviousCommand() +//////////////////////////////// +{ + G4int nhmax = currentHistoryNo - 1 >= maxHistory ? maxHistory : currentHistoryNo - 1; + + // retain current input + if (relativeHistoryIndex == 0) commandLineBuf = commandLine; + + if (relativeHistoryIndex >= -nhmax + 1 && relativeHistoryIndex <= 0) { + ClearLine(); + relativeHistoryIndex--; + commandLine = RestoreHistory(currentHistoryNo + relativeHistoryIndex); + + G4cout << commandLine << std::flush; + cursorPosition = G4int(commandLine.length() + 1); + } +} + +//////////////////////////// +void G4UItcsh::NextCommand() +//////////////////////////// +{ + G4int nhmax = currentHistoryNo - 1 >= maxHistory ? maxHistory : currentHistoryNo - 1; + + if (relativeHistoryIndex >= -nhmax && relativeHistoryIndex <= -1) { + ClearLine(); + relativeHistoryIndex++; + + if (relativeHistoryIndex == 0) + commandLine = commandLineBuf; + else + commandLine = RestoreHistory(currentHistoryNo + relativeHistoryIndex); + + G4cout << commandLine << std::flush; + cursorPosition = G4int(commandLine.length() + 1); + } +} + +/////////////////////////////////// +void G4UItcsh::ListMatchedCommand() +/////////////////////////////////// +{ + G4cout << G4endl; + + // input string + G4String input = G4StrUtil::lstrip_copy(commandLine); + // target token is last token + auto jhead = input.rfind(' '); + if (jhead != G4String::npos) { + input.erase(0, jhead); + G4StrUtil::lstrip(input); + } + + // command tree of "user specified directory" + G4String vpath = currentCommandDir; + G4String vcmd = ""; + + if (! input.empty()) { + auto len = (G4int)input.length(); + G4int indx = -1; + for (G4int i = len - 1; i >= 0; --i) { + if (input[i] == '/') { + indx = (G4int)i; + break; + } + } + // get abs. path + if (indx != -1) vpath = GetAbsCommandDirPath(input.substr(0, indx + 1)); + if (indx != 0 || len != 1) vcmd = input.substr(indx + 1, len - indx - 1); // care for "/" + } + + // list matched dirs/commands + // G4cout << "@@@ vpath=" << vpath <<":vcmd=" << vcmd << G4endl; + ListCommand(vpath, vpath + vcmd); + + G4cout << promptString << commandLine << std::flush; +} + +//////////////////////////////// +void G4UItcsh::CompleteCommand() +//////////////////////////////// +{ + // inputting string + G4String input = G4StrUtil::lstrip_copy(commandLine); + + // target token is last token + auto jhead = input.rfind(' '); + if (jhead != G4String::npos) { + input.erase(0, jhead); + G4StrUtil::lstrip(input); + } + + // tail string + std::size_t thead = input.find_last_of('/'); + G4String strtail = input; + if (thead != G4String::npos) strtail = input.substr(thead + 1, input.size() - thead - 1); + + // command tree of "user specified directory" + G4String vpath = currentCommandDir; + G4String vcmd; + + auto len = (G4int)input.length(); + if (! input.empty()) { + G4int indx = -1; + for (G4int i = len - 1; i >= 0; --i) { + if (input[i] == '/') { + indx = i; + break; + } + } + // get abs. path + if (indx != -1) vpath = GetAbsCommandDirPath(input.substr(0, indx + 1)); + if (indx != 0 || len != 1) vcmd = input.substr(indx + 1, len - indx - 1); // care for "/" + } + + G4UIcommandTree* atree = GetCommandTree(vpath); // get command tree + if (atree == nullptr) return; + + // list matched directories/commands + G4String stream, strtmp; + G4String inputpath = vpath + vcmd; + G4int nMatch = 0; + + G4int Ndir = atree->GetTreeEntry(); + G4int Ncmd = atree->GetCommandEntry(); + + // directory ... + for (G4int idir = 1; idir <= Ndir; idir++) { + G4String fpdir = atree->GetTree(idir)->GetPathName(); + // matching test + if (fpdir.find(inputpath, 0) == 0) { + if (nMatch == 0) { + stream = GetCommandPathTail(fpdir); + } + else { + strtmp = GetCommandPathTail(fpdir); + stream = GetFirstMatchedString(stream, strtmp); + } + nMatch++; + } + } + + // command ... + for (G4int icmd = 1; icmd <= Ncmd; icmd++) { + G4String fpcmd = atree->GetPathName() + atree->GetCommand(icmd)->GetCommandName(); + // matching test + if (fpcmd.find(inputpath, 0) == 0) { + if (nMatch == 0) { + stream = GetCommandPathTail(fpcmd) + " "; + } + else { + strtmp = GetCommandPathTail(fpcmd) + " "; + stream = GetFirstMatchedString(stream, strtmp); + } + nMatch++; + } + } + + // display... + input = commandLine; + // target token is last token + jhead = input.rfind(' '); + if (jhead == G4String::npos) + jhead = 0; + else + jhead++; + + std::size_t jt = jhead; + + G4String dspstr; + std::size_t i; + for (i = jt; i <= input.length() - 1; ++i) + dspstr += AsciiBS; + for (i = jt; i <= input.length() - 1; ++i) + dspstr += ' '; + for (i = jt; i <= input.length() - 1; ++i) + dspstr += AsciiBS; + + dspstr += (vpath + stream); + if (nMatch == 0) dspstr += strtail; + G4cout << dspstr << std::flush; + + // command line string + input.erase(jt); + input += (vpath + stream); + if (nMatch == 0) input += strtail; + + commandLine = input; + cursorPosition = G4int(commandLine.length() + 1); +} + +// -------------------------------------------------------------------- +// commad line +// -------------------------------------------------------------------- +///////////////////////////// +G4String G4UItcsh::ReadLine() +///////////////////////////// +{ + InitializeCommandLine(); + + char cc; + do { // input loop + G4cin.get(cc); + + // treatment for special character + switch (cc) { + case AsciiCtrA: // ... move cursor to the top + MoveCursorTop(); + break; + case AsciiCtrB: // ... backward cursor + BackwardCursor(); + break; + case AsciiCtrD: // ... delete/exit/show matched list + if (commandLine.length() != 0 && IsCursorLast()) + ListMatchedCommand(); + else if (commandLine.empty()) { + return G4String("exit"); + } + else + DeleteCharacter(); + break; + case AsciiCtrE: // ... move cursor to the end + MoveCursorEnd(); + break; + case AsciiCtrF: // ... forward cursor + ForwardCursor(); + break; + case AsciiCtrK: // ... clear after the cursor + ClearAfterCursor(); + break; + case AsciiCtrL: // ... clear screen + // ClearScreen(); + break; + case AsciiCtrN: // ... next command + NextCommand(); + break; + case AsciiCtrP: // ... previous command + PreviousCommand(); + break; + case AsciiTAB: // ... command completion + if ((! commandLine.empty()) && IsCursorLast()) CompleteCommand(); + break; + case AsciiDEL: // ... backspace + BackspaceCharacter(); + break; + case AsciiBS: // ... backspace + BackspaceCharacter(); + break; + case AsciiCtrC: // ... kill prompt + break; + case AsciiCtrQ: // ... restarts suspeded output + break; + case AsciiCtrS: // ... suspend output + break; + case AsciiCtrZ: // ... suspend + break; + default: + break; + } + + // treatment for ESC. character + if (cc == AsciiESC) { // ESC + G4cin.get(cc); + if (cc == '[' || cc == 'O') { // care for another termcap, such as konsole + G4cin.get(cc); + switch (cc) { + case 'A': // [UP] + cc = 'P' - '@'; + PreviousCommand(); // ... show previous commad + break; + case 'B': // [DOWN] + cc = 'N' - '@'; + NextCommand(); // ... show next commad + break; + case 'C': // [RIGHT] + cc = 'F' - '@'; + ForwardCursor(); // ... forward cursor + break; + case 'D': // [LEFT] + cc = 'B' - '@'; + BackwardCursor(); // ... backward cursor + break; + default: // who knows !? + cc = 0; + break; + } + } + } + + // insert character to command line and display + InsertCharacter(cc); + + } while (cc != '\n'); + + return commandLine; +} + +//////////////////////////////////////////////////////// +G4String G4UItcsh::GetCommandLineString(const char* msg) +//////////////////////////////////////////////////////// +{ + SetTermToInputMode(); + + MakePrompt(msg); // update + relativeHistoryIndex = 0; + + G4cout << promptString << std::flush; + + G4String newCommand = ReadLine(); // read line... + // multi-line + while ((newCommand.length() > 0) && (newCommand[G4int(newCommand.length() - 1)] == '_')) { + newCommand.erase(newCommand.length() - 1); + G4cout << G4endl; + promptString = "? "; + G4cout << promptString << std::flush; + G4String newLine = ReadLine(); + newCommand.append(newLine); + } + + // update history... + G4bool isMeaningfull = false; // check NULL command + for (G4int i = 0; i < (G4int)newCommand.length(); ++i) { + if (newCommand[i] != ' ') { + isMeaningfull = true; + break; + } + } + if (! newCommand.empty() && isMeaningfull) StoreHistory(newCommand); + + // reset terminal + RestoreTerm(); + + G4cout << G4endl; + return newCommand; +} + +//////////////////////////////////////////////////////////////////// +G4String G4UItcsh::GetFirstMatchedString(const G4String& str1, const G4String& str2) const +//////////////////////////////////////////////////////////////////// +{ + std::size_t nlen1 = str1.length(); + std::size_t nlen2 = str2.length(); + + std::size_t nmin = nlen1 < nlen2 ? nlen1 : nlen2; + + G4String strMatched; + for (G4int i = 0; i < (G4int)nmin; ++i) { + if (str1[i] == str2[i]) { + strMatched += str1[i]; + } + else { + break; + } + } + + return strMatched; +} + +// -------------------------------------------------------------------- +// history +// -------------------------------------------------------------------- +////////////////////////////////////////////// +void G4UItcsh::StoreHistory(G4String aCommand) +////////////////////////////////////////////// +{ + G4int i = currentHistoryNo % maxHistory; + if (i == 0) i = maxHistory; + + commandHistory[i - 1] = aCommand; // 0-offset + currentHistoryNo++; +} + +/////////////////////////////////////////////// +G4String G4UItcsh::RestoreHistory(G4int histNo) +/////////////////////////////////////////////// +{ + if (histNo >= currentHistoryNo) return ""; + + G4int index = histNo % maxHistory; + if (index == 0) index = maxHistory; + + return commandHistory[index - 1]; // 0-offset +} + +// -------------------------------------------------------------------- +// terminal mode +// -------------------------------------------------------------------- +/////////////////////////////////// +void G4UItcsh::SetTermToInputMode() +/////////////////////////////////// +{ + termios tiosbuf = tios; + + tiosbuf.c_iflag &= ~(BRKINT | ISTRIP); + tiosbuf.c_iflag |= (IGNBRK | IGNPAR); + tiosbuf.c_lflag &= ~(ICANON | IEXTEN | ECHO); + tiosbuf.c_cc[VMIN] = 1; + tiosbuf.c_cc[VTIME] = 0; + + tcsetattr(0, TCSAFLUSH, &tiosbuf); +} + +//////////////////////////// +void G4UItcsh::RestoreTerm() +//////////////////////////// +{ + tcsetattr(0, TCSAFLUSH, &tios); +} + +#endif diff --git a/source/interfaces/core/src/G4UIterminal.cc b/source/interfaces/core/src/G4UIterminal.cc new file mode 100644 index 00000000000..a29406b1390 --- /dev/null +++ b/source/interfaces/core/src/G4UIterminal.cc @@ -0,0 +1,350 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// +// ==================================================================== +// G4UIterminal.cc +// +// ==================================================================== +#include "G4UIterminal.hh" + +#include "G4StateManager.hh" +#include "G4Types.hh" +#include "G4UIcommand.hh" +#include "G4UIcommandStatus.hh" +#include "G4UIcommandTree.hh" +#include "G4UIcsh.hh" + +#include + +#ifndef WIN32 +# include +#endif + +// ==================================================================== +// signal handler for soft-abort +// ==================================================================== + +static G4ThreadLocal G4VUIshell* theshell = nullptr; + +#ifndef WIN32 + +extern "C" +{ + //////////////////////////////// + static void SignalHandler(G4int) + //////////////////////////////// + { + G4StateManager* stateManager = G4StateManager::GetStateManager(); + G4ApplicationState state = stateManager->GetCurrentState(); + + if (state == G4State_GeomClosed || state == G4State_EventProc) { + G4cout << "aborting Run ..."; + G4UImanager::GetUIpointer()->ApplyCommand("/run/abort"); + G4cout << G4endl; + } + else { + G4cout << G4endl << "Session terminated." << G4endl; + theshell->ResetTerminal(); + G4Exception( + "G4UIterminal::SignalHandler()", "UI0001", FatalException, "KeyboardInterrput with Ctrl-C"); + } + + // for original Unix / System V + signal(SIGINT, SignalHandler); + } +} +#endif + +// ==================================================================== +// +// class description +// +// ==================================================================== + +/////////////////////////////////////////////////////////// +G4UIterminal::G4UIterminal(G4VUIshell* aShell, G4bool qsig) +/////////////////////////////////////////////////////////// +{ + UI = G4UImanager::GetUIpointer(); + UI->SetSession(this); + UI->SetCoutDestination(this); + + iExit = false; + iCont = false; + + if (aShell != nullptr) + shell = aShell; + else + shell = new G4UIcsh; + theshell = shell; // locally stored for the signal handler + + // add signal handler + if (qsig) { +#ifndef WIN32 + signal(SIGINT, SignalHandler); +#endif + } +} + +///////////////////////////// +G4UIterminal::~G4UIterminal() +///////////////////////////// +{ + delete shell; + + if (G4UImanager::GetUIpointer() != nullptr) { + UI->SetSession(nullptr); + UI->SetCoutDestination(nullptr); + } +} + +//////////////////////////////////////////////////// +void G4UIterminal::SetPrompt(const G4String& prompt) +//////////////////////////////////////////////////// +{ + shell->SetPrompt(prompt); +} + +///////////////////////////////////////// +G4UIsession* G4UIterminal::SessionStart() +///////////////////////////////////////// +{ + iExit = true; + + G4String newCommand = GetCommand(); + while (iExit) { + ExecuteCommand(newCommand); + newCommand = GetCommand(); + } + return nullptr; +} + +///////////////////////////////////////////////////////// +void G4UIterminal::PauseSessionStart(const G4String& msg) +///////////////////////////////////////////////////////// +{ + iCont = true; + + G4String newCommand = GetCommand(msg); + while (iCont) { + ExecuteCommand(newCommand); + newCommand = GetCommand(msg); + } +} + +/////////////////////////////////////////////////////////// +void G4UIterminal::ExecuteCommand(const G4String& aCommand) +/////////////////////////////////////////////////////////// +{ + if (aCommand.length() < 2) return; + + G4int returnVal = UI->ApplyCommand(aCommand); + + G4int paramIndex = returnVal % 100; + // 0 - 98 : paramIndex-th parameter is invalid + // 99 : convination of parameters is invalid + G4int commandStatus = returnVal - paramIndex; + + G4UIcommand* cmd = nullptr; + if (commandStatus != fCommandSucceeded) { + cmd = FindCommand(aCommand); + } + + switch (commandStatus) { + case fCommandSucceeded: + break; + case fCommandNotFound: + G4cerr << "command <" << UI->SolveAlias(aCommand) << "> not found" << G4endl; + if (aCommand.find("@@") != G4String::npos) { + G4cout << "@@G4UIterminal" << G4endl; + } + break; + case fIllegalApplicationState: + G4cerr << "illegal application state -- command refused" << G4endl; + break; + case fParameterOutOfRange: + // if(paramIndex<99) { + // G4cerr << "Parameter is out of range (index " << paramIndex << ")" << G4endl; + // G4cerr << "Allowed range : " << cmd->GetParameter(paramIndex)->GetParameterRange() << + // G4endl; + // } else { + // G4cerr << "Parameter is out of range" << G4endl; + // G4cerr << "Allowed range : " << cmd->GetRange() << G4endl; + // } + break; + case fParameterOutOfCandidates: + G4cerr << "Parameter is out of candidate list (index " << paramIndex << ")" << G4endl; + G4cerr << "Candidates : " << cmd->GetParameter(paramIndex)->GetParameterCandidates() + << G4endl; + break; + case fParameterUnreadable: + G4cerr << "Parameter is wrong type and/or is not omittable (index " << paramIndex << ")" + << G4endl; + break; + case fAliasNotFound: + default: + G4cerr << "command refused (" << commandStatus << ")" << G4endl; + } +} + +////////////////////////////////////////////////// +G4String G4UIterminal::GetCommand(const char* msg) +////////////////////////////////////////////////// +{ + G4String newCommand = shell->GetCommandLineString(msg); + G4String nullString = ""; + + G4String nC = G4StrUtil::lstrip_copy(newCommand); + + if (nC.length() == 0) { + newCommand = nullString; + } + else if (nC[0] == '#') { + G4cout << nC << G4endl; + newCommand = nullString; + } + else if (nC == "ls" || nC.substr(0, 3) == "ls ") { // list commands + ListDirectory(nC); + newCommand = nullString; + } + else if (nC == "lc" || nC.substr(0, 3) == "lc ") { // ... by shell + shell->ListCommand(nC.erase(0, 2)); + newCommand = nullString; + } + else if (nC == "pwd") { // show current directory + G4cout << "Current Command Directory : " << GetCurrentWorkingDirectory() << G4endl; + newCommand = nullString; + } + else if (nC == "cwd") { // ... by shell + shell->ShowCurrentDirectory(); + newCommand = nullString; + } + else if (nC == "cd" || nC.substr(0, 3) == "cd ") { // "cd" + ChangeDirectoryCommand(nC); + shell->SetCurrentDirectory(GetCurrentWorkingDirectory()); + newCommand = nullString; + } + else if (nC == "help" || nC.substr(0, 5) == "help ") { // "help" + TerminalHelp(nC); + newCommand = nullString; + } + else if (nC[0] == '?') { // "show current value of a parameter" + ShowCurrent(nC); + newCommand = nullString; + } + else if (nC == "hist" || nC == "history") { // "hist/history" + G4int nh = UI->GetNumberOfHistory(); + for (G4int i = 0; i < nh; i++) { + G4cout << i << ": " << UI->GetPreviousCommand(i) << G4endl; + } + newCommand = nullString; + } + else if (nC[0] == '!') { // "!" + G4String ss = nC.substr(1, nC.length() - 1); + G4int vl; + const char* tt = ss; + std::istringstream is(tt); + is >> vl; + G4int nh = UI->GetNumberOfHistory(); + if (vl >= 0 && vl < nh) { + newCommand = UI->GetPreviousCommand(vl); + G4cout << newCommand << G4endl; + } + else { + G4cerr << "history " << vl << " is not found." << G4endl; + newCommand = nullString; + } + } + else if (nC == "exit") { // "exit" + if (iCont) { + G4cout << "You are now processing RUN." << G4endl; + G4cout << "Please abort it using \"/run/abort\" command first" << G4endl; + G4cout << " and use \"continue\" command until the application" << G4endl; + G4cout << " becomes to Idle." << G4endl; + } + else { + iExit = false; + newCommand = nullString; + } + } + else if (nC == "cont" || nC == "continue") { // "cont/continu" + iCont = false; + newCommand = nullString; + } + else if (nC.empty()) { // NULL command + newCommand = nullString; + } + else { + } + + return ModifyToFullPathCommand(newCommand); +} + +///////////////////////////////////////////////////////////// +G4int G4UIterminal::ReceiveG4debug(const G4String& debugString) +///////////////////////////////////////////////////////////// +{ + std::cout << debugString << std::flush; + return 0; +} + +///////////////////////////////////////////////////////////// +G4int G4UIterminal::ReceiveG4cout(const G4String& coutString) +///////////////////////////////////////////////////////////// +{ + std::cout << coutString << std::flush; + return 0; +} + +///////////////////////////////////////////////////////////// +G4int G4UIterminal::ReceiveG4cerr(const G4String& cerrString) +///////////////////////////////////////////////////////////// +{ + std::cerr << cerrString << std::flush; + return 0; +} + +/////////////////////////////////////////////// +G4bool G4UIterminal::GetHelpChoice(G4int& aInt) +/////////////////////////////////////////////// +{ + G4cin >> aInt; + if (! G4cin.good()) { + G4cin.clear(); + G4cin.ignore(30, '\n'); + return false; + } + return true; +} + +/////////////////////////////////// +void G4UIterminal::ExitHelp() const +/////////////////////////////////// +{ + char temp[100]; + G4cin.getline(temp, 100); +} diff --git a/source/interfaces/common/src/G4VBasicShell.cc b/source/interfaces/core/src/G4VBasicShell.cc similarity index 56% rename from source/interfaces/common/src/G4VBasicShell.cc rename to source/interfaces/core/src/G4VBasicShell.cc index 2112bfac49d..4f148250d4b 100644 --- a/source/interfaces/common/src/G4VBasicShell.cc +++ b/source/interfaces/core/src/G4VBasicShell.cc @@ -27,59 +27,54 @@ // #include "G4VBasicShell.hh" + #include "G4StateManager.hh" -#include "G4UIcommandTree.hh" #include "G4UIcommand.hh" #include "G4UIcommandStatus.hh" +#include "G4UIcommandTree.hh" #include "G4UImanager.hh" -#include + #include +#include -G4VBasicShell::G4VBasicShell() -:currentDirectory("/") -{ -} +G4VBasicShell::G4VBasicShell() : currentDirectory("/") {} -G4VBasicShell::~G4VBasicShell() -{ -} +G4VBasicShell::~G4VBasicShell() = default; G4String G4VBasicShell::ModifyToFullPathCommand(const char* aCommandLine) const { G4String rawCommandLine = aCommandLine; - if(rawCommandLine.empty()||rawCommandLine[0]=='\0') return rawCommandLine; + if (rawCommandLine.empty() || rawCommandLine[0] == '\0') return rawCommandLine; G4String commandLine = G4StrUtil::strip_copy(rawCommandLine); G4String commandString; G4String parameterString; - size_t i = commandLine.find(" "); - if( i != std::string::npos ) - { - commandString = commandLine.substr(0,i); + size_t i = commandLine.find(' '); + if (i != std::string::npos) { + commandString = commandLine.substr(0, i); parameterString = " "; - parameterString += commandLine.substr(i+1,commandLine.length()-(i+1)); + parameterString += commandLine.substr(i + 1, commandLine.length() - (i + 1)); + } + else { + commandString = commandLine; } - else - { commandString = commandLine; } - G4String fullPathCommandLine - = ModifyPath( commandString )+parameterString; + G4String fullPathCommandLine = ModifyPath(commandString) + parameterString; return fullPathCommandLine; } -G4String G4VBasicShell::GetCurrentWorkingDirectory() const -{ - return currentDirectory; -} +G4String G4VBasicShell::GetCurrentWorkingDirectory() const { return currentDirectory; } G4bool G4VBasicShell::ChangeDirectory(const char* newDir) { G4String newPrefix = G4StrUtil::strip_copy(newDir); - G4String newDirectory = ModifyPath( newPrefix ); - if( newDirectory.back() != '/' ) - { newDirectory += "/"; } - if( FindDirectory( newDirectory.c_str() ) == NULL ) - { return false; } + G4String newDirectory = ModifyPath(newPrefix); + if (newDirectory.back() != '/') { + newDirectory += "/"; + } + if (FindDirectory(newDirectory.c_str()) == nullptr) { + return false; + } currentDirectory = newDirectory; return true; } @@ -88,20 +83,22 @@ G4UIcommandTree* G4VBasicShell::FindDirectory(const char* dirName) const { G4String theDir = G4StrUtil::strip_copy(dirName); - G4String targetDir = ModifyPath( theDir ); - if( targetDir.back() != '/' ) - { targetDir += "/"; } + G4String targetDir = ModifyPath(theDir); + if (targetDir.back() != '/') { + targetDir += "/"; + } G4UIcommandTree* comTree = G4UImanager::GetUIpointer()->GetTree(); - if( targetDir == "/" ) - { return comTree; } + if (targetDir == "/") { + return comTree; + } size_t idx = 1; - while( idx < targetDir.length()-1 ) - { - size_t i = targetDir.find("/",idx); - comTree = comTree->GetTree(targetDir.substr(0,i+1).c_str()); - if( comTree == NULL ) - { return NULL; } - idx = i+1; + while (idx < targetDir.length() - 1) { + size_t i = targetDir.find('/', idx); + comTree = comTree->GetTree(targetDir.substr(0, i + 1).c_str()); + if (comTree == nullptr) { + return nullptr; + } + idx = i + 1; } return comTree; } @@ -111,11 +108,13 @@ G4UIcommand* G4VBasicShell::FindCommand(const char* commandName) const G4String commandLine = G4StrUtil::strip_copy(commandName); G4String commandString; - size_t i = commandLine.find(" "); - if( i != std::string::npos ) - { commandString = commandLine.substr(0,i); } - else - { commandString = commandLine; } + size_t i = commandLine.find(' '); + if (i != std::string::npos) { + commandString = commandLine.substr(0, i); + } + else { + commandString = commandLine; + } G4String targetCom = ModifyPath(commandString); return G4UImanager::GetUIpointer()->GetTree()->FindPath(targetCom); @@ -123,53 +122,56 @@ G4UIcommand* G4VBasicShell::FindCommand(const char* commandName) const G4String G4VBasicShell::ModifyPath(const G4String& tempPath) const { - if( tempPath.length() == 0 ) return tempPath; + if (tempPath.length() == 0) return tempPath; G4String newPath = ""; // temporal full path - if( tempPath[0] == '/') newPath = tempPath; - else newPath = currentDirectory + tempPath; + if (tempPath[0] == '/') + newPath = tempPath; + else + newPath = currentDirectory + tempPath; // body of path... - while(1){ + while (true) { size_t idx = newPath.find("/./"); - if( idx == G4String::npos) break; - newPath.erase(idx,2); + if (idx == G4String::npos) break; + newPath.erase(idx, 2); } - while(1) { + while (true) { size_t idx = newPath.find("/../"); - if( idx == G4String::npos) break; - if( idx == 0) { - newPath.erase(1,3); + if (idx == G4String::npos) break; + if (idx == 0) { + newPath.erase(1, 3); continue; } - size_t idx2 = newPath.find_last_of('/', idx-1); - if(idx2 != G4String::npos) newPath.erase(idx2, idx-idx2+3); + size_t idx2 = newPath.find_last_of('/', idx - 1); + if (idx2 != G4String::npos) newPath.erase(idx2, idx - idx2 + 3); } // end of path... - if ( newPath.size() >= 3 ) { - if(newPath.substr(newPath.size()-3,3) == "/..") { - if( newPath.size() == 3) { + if (newPath.size() >= 3) { + if (newPath.substr(newPath.size() - 3, 3) == "/..") { + if (newPath.size() == 3) { newPath = "/"; - } else { - size_t idx = newPath.find_last_of('/', newPath.size()-4); - if(idx != G4String::npos) newPath.erase(idx+1); + } + else { + size_t idx = newPath.find_last_of('/', newPath.size() - 4); + if (idx != G4String::npos) newPath.erase(idx + 1); } } } - if ( newPath.size() >= 2 ) { - if(newPath.substr(newPath.size()-2,2) == "/.") newPath.erase(newPath.size()-1,1); + if (newPath.size() >= 2) { + if (newPath.substr(newPath.size() - 2, 2) == "/.") newPath.erase(newPath.size() - 1, 1); } // truncate "/////" to "/" - while(1) { + while (true) { size_t idx = newPath.find("//"); - if( idx == G4String::npos) break; - newPath.erase(idx,1); + if (idx == G4String::npos) break; + newPath.erase(idx, 1); } return newPath; @@ -181,22 +183,22 @@ G4String G4VBasicShell::Complete(const G4String& commandName) { G4String rawCommandLine = commandName; G4String commandLine = G4StrUtil::strip_copy(rawCommandLine); - - size_t i = commandLine.find(" "); - if( i != std::string::npos ) return rawCommandLine; // Already entering parameters, - // assume command path is correct. + + size_t i = commandLine.find(' '); + if (i != std::string::npos) + return rawCommandLine; // Already entering parameters, + // assume command path is correct. G4String commandString = commandLine; G4String targetCom = ModifyPath(commandString); G4UIcommandTree* tree = G4UImanager::GetUIpointer()->GetTree(); - G4String value = FindMatchingPath(tree,targetCom); - if(value=="") return rawCommandLine; + G4String value = FindMatchingPath(tree, targetCom); + if (value.empty()) return rawCommandLine; return value; } -G4String G4VBasicShell::FindMatchingPath(G4UIcommandTree* aTree, - const G4String& aCommandPath) +G4String G4VBasicShell::FindMatchingPath(G4UIcommandTree* aTree, const G4String& aCommandPath) { - return aTree-> CompleteCommandPath(aCommandPath); + return aTree->CompleteCommandPath(aCommandPath); } //////////////////////////////////////////// @@ -208,116 +210,107 @@ void G4VBasicShell::ExecuteCommand(const G4String& aCommand) // Should be put in G4VBasicShell. /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - if(aCommand.length()<2) return; + if (aCommand.length() < 2) return; G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI==NULL) return; + if (UI == nullptr) return; G4int commandStatus = UI->ApplyCommand(aCommand); - switch(commandStatus) { - case fCommandSucceeded: - break; - case fCommandNotFound: - G4cerr << "command not found: " << "\"" << aCommand << "\"" << G4endl; - break; - case fIllegalApplicationState: - G4cerr << "illegal application state -- command refused:" << "\"" << aCommand << "\"" << G4endl; - break; - case fParameterOutOfRange: - case fParameterUnreadable: - case fParameterOutOfCandidates: - default: - G4cerr << "command refused (" << commandStatus << "):" << "\"" << aCommand << "\"" << G4endl; + switch (commandStatus) { + case fCommandSucceeded: + break; + case fCommandNotFound: + G4cerr << "command not found: " + << "\"" << aCommand << "\"" << G4endl; + break; + case fIllegalApplicationState: + G4cerr << "illegal application state -- command refused:" + << "\"" << aCommand << "\"" << G4endl; + break; + case fParameterOutOfRange: + case fParameterUnreadable: + case fParameterOutOfCandidates: + default: + G4cerr << "command refused (" << commandStatus << "):" + << "\"" << aCommand << "\"" << G4endl; } } /***************************************************************************/ -void G4VBasicShell::ApplyShellCommand (const G4String& a_string, - G4bool& exitSession, G4bool& exitPause -) +void G4VBasicShell::ApplyShellCommand( + const G4String& a_string, G4bool& exitSession, G4bool& exitPause) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI==NULL) return; + if (UI == nullptr) return; G4String command = G4StrUtil::lstrip_copy(a_string); - if( command[0] == '#' ) { - + if (command[0] == '#') { G4cout << command << G4endl; - - } else if( command == "ls" || command.substr(0,3) == "ls " ) { - - ListDirectory( command ); - - } else if( command == "pwd" ) { - - G4cout << "Current Working Directory : " - << GetCurrentWorkingDirectory() << G4endl; - - } else if( command == "cd" || command.substr(0,3) == "cd ") { - - ChangeDirectoryCommand ( command ); - - } else if( command == "help" || command.substr(0,5) == "help ") { - - TerminalHelp( command ); - - } else if( command[0] == '?' ) { - - ShowCurrent( command ); - - } else if( command == "hist" || command == "history") { - + } + else if (command == "ls" || command.substr(0, 3) == "ls ") { + ListDirectory(command); + } + else if (command == "pwd") { + G4cout << "Current Working Directory : " << GetCurrentWorkingDirectory() << G4endl; + } + else if (command == "cd" || command.substr(0, 3) == "cd ") { + ChangeDirectoryCommand(command); + } + else if (command == "help" || command.substr(0, 5) == "help ") { + TerminalHelp(command); + } + else if (command[0] == '?') { + ShowCurrent(command); + } + else if (command == "hist" || command == "history") { G4int nh = UI->GetNumberOfHistory(); - for(G4int i=0;iGetPreviousCommand(i) << G4endl; } - - } else if( command[0] == '!' ) { - - G4String ss = command.substr(1,command.length()-1); + } + else if (command[0] == '!') { + G4String ss = command.substr(1, command.length() - 1); G4int vl; const char* tt = ss; std::istringstream is(tt); is >> vl; G4int nh = UI->GetNumberOfHistory(); - if(vl>=0 && vl= 0 && vl < nh) { G4String prev = UI->GetPreviousCommand(vl); G4cout << prev << G4endl; - ExecuteCommand (ModifyToFullPathCommand(prev)); - } else { + ExecuteCommand(ModifyToFullPathCommand(prev)); + } + else { G4cerr << "history " << vl << " is not found." << G4endl; } - - } else if( command == "exit" ) { - - if( exitPause == false) { //In a secondary loop. + } + else if (command == "exit") { + if (!exitPause) { // In a secondary loop. G4cout << "You are now processing RUN." << G4endl; G4cout << "Please abort it using \"/run/abort\" command first" << G4endl; G4cout << " and use \"continue\" command until the application" << G4endl; G4cout << " becomes to Idle." << G4endl; - } else { + } + else { exitSession = true; } - - } else if( command == "cont" || command == "continue"){ - + } + else if (command == "cont" || command == "continue") { exitPause = true; - - } else { - + } + else { ExecuteCommand(ModifyToFullPathCommand(a_string)); - } } void G4VBasicShell::ShowCurrent(const G4String& newCommand) const { G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI==NULL) return; - G4String comString = newCommand.substr(1,newCommand.length()-1); + if (UI == nullptr) return; + G4String comString = newCommand.substr(1, newCommand.length() - 1); G4String theCommand = ModifyToFullPathCommand(comString); G4String curV = UI->GetCurrentValues(theCommand); - if( ! curV.empty() ) { + if (! curV.empty()) { G4cout << "Current value(s) of the parameter(s) : " << curV << G4endl; } } @@ -325,13 +318,14 @@ void G4VBasicShell::ShowCurrent(const G4String& newCommand) const void G4VBasicShell::ChangeDirectoryCommand(const G4String& newCommand) { G4String prefix; - if( newCommand.length() <= 3 ) { + if (newCommand.length() <= 3) { prefix = "/"; - } else { - G4String aNewPrefix = newCommand.substr(3, newCommand.length()-3); + } + else { + G4String aNewPrefix = newCommand.substr(3, newCommand.length() - 3); prefix = G4StrUtil::strip_copy(aNewPrefix); } - if(!ChangeDirectory(prefix)) { + if (! ChangeDirectory(prefix)) { G4cout << "directory <" << prefix << "> not found." << G4endl; } } @@ -339,92 +333,90 @@ void G4VBasicShell::ChangeDirectoryCommand(const G4String& newCommand) void G4VBasicShell::ListDirectory(const G4String& newCommand) const { G4String targetDir; - if( newCommand.length() <= 3 ) { + if (newCommand.length() <= 3) { targetDir = GetCurrentWorkingDirectory(); - } else { - G4String newPrefix = newCommand.substr(3, newCommand.length()-3); + } + else { + G4String newPrefix = newCommand.substr(3, newCommand.length() - 3); targetDir = G4StrUtil::strip_copy(newPrefix); } - G4UIcommandTree* commandTree = FindDirectory( targetDir ); - if( commandTree == NULL ) { + G4UIcommandTree* commandTree = FindDirectory(targetDir); + if (commandTree == nullptr) { G4cout << "Directory <" << targetDir << "> is not found." << G4endl; - } else { + } + else { commandTree->ListCurrent(); } } void G4VBasicShell::TerminalHelp(const G4String& newCommand) { G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI==NULL) return; - G4UIcommandTree * treeTop = UI->GetTree(); - size_t i = newCommand.find(" "); - if( i != std::string::npos ) - { - G4String newValue = newCommand.substr(i+1, newCommand.length()-(i+1)); + if (UI == nullptr) return; + G4UIcommandTree* treeTop = UI->GetTree(); + size_t i = newCommand.find(' '); + if (i != std::string::npos) { + G4String newValue = newCommand.substr(i + 1, newCommand.length() - (i + 1)); G4StrUtil::strip(newValue); G4String targetCom = ModifyToFullPathCommand(newValue); G4UIcommand* theCommand = treeTop->FindPath(targetCom); - if( theCommand != NULL ) - { + if (theCommand != nullptr) { theCommand->List(); return; } - else - { - G4cout << "Command <" << newValue << " is not found." << G4endl; - return; - } + + G4cout << "Command <" << newValue << " is not found." << G4endl; + return; } - G4UIcommandTree * floor[10]; + G4UIcommandTree* floor[10]; floor[0] = treeTop; size_t iFloor = 0; size_t prefixIndex = 1; G4String prefix = GetCurrentWorkingDirectory(); - while( prefixIndex < prefix.length()-1 ) - { - size_t ii = prefix.find("/",prefixIndex); - floor[iFloor+1] = - floor[iFloor]->GetTree(G4String(prefix.substr(0,ii+1))); - prefixIndex = ii+1; + while (prefixIndex < prefix.length() - 1) { + size_t ii = prefix.find('/', prefixIndex); + floor[iFloor + 1] = floor[iFloor]->GetTree(G4String(prefix.substr(0, ii + 1))); + prefixIndex = ii + 1; iFloor++; } floor[iFloor]->ListCurrentWithNum(); // 1998 Oct 2 non-number input - while(1){ - //G4cout << G4endl << "Type the number ( 0:end, -n:n level back ) : "<ListCurrentWithNum(); continue; - } else if(j == 0) { + } + if (j == 0) { break; - } else if( j > 0 ) { + } + if (j > 0) { G4int n_tree = floor[iFloor]->GetTreeEntry(); - if( j > n_tree ) - { - if( j <= n_tree + floor[iFloor]->GetCommandEntry() ) - { - floor[iFloor]->GetCommand(j-n_tree)->List(); + if (j > n_tree) { + if (j <= n_tree + floor[iFloor]->GetCommandEntry()) { + floor[iFloor]->GetCommand(j - n_tree)->List(); } } - else - { - floor[iFloor+1] = floor[iFloor]->GetTree(j); + else { + floor[iFloor + 1] = floor[iFloor]->GetTree(j); iFloor++; floor[iFloor]->ListCurrentWithNum(); } } } G4cout << "Exit from HELP." << G4endl << G4endl; - //G4cout << G4endl; + // G4cout << G4endl; ExitHelp(); } diff --git a/source/interfaces/common/src/G4VInteractiveSession.cc b/source/interfaces/core/src/G4VInteractiveSession.cc similarity index 50% rename from source/interfaces/common/src/G4VInteractiveSession.cc rename to source/interfaces/core/src/G4VInteractiveSession.cc index afcbcafaec8..cc7bb7d0da5 100644 --- a/source/interfaces/common/src/G4VInteractiveSession.cc +++ b/source/interfaces/core/src/G4VInteractiveSession.cc @@ -25,68 +25,105 @@ // // +#include "G4VInteractiveSession.hh" + #include "G4InteractorMessenger.hh" -#include "G4VInteractiveSession.hh" +/***************************************************************************/ +G4VInteractiveSession::G4VInteractiveSession() { messenger = new G4InteractorMessenger(this); } /***************************************************************************/ -G4VInteractiveSession::G4VInteractiveSession () -{ - messenger = new G4InteractorMessenger(this); -} +G4VInteractiveSession::~G4VInteractiveSession() { delete messenger; } /***************************************************************************/ -G4VInteractiveSession::~G4VInteractiveSession() -{ - delete messenger; -} +void G4VInteractiveSession::AddMenu(const char*, const char*) {} /***************************************************************************/ -void G4VInteractiveSession::AddMenu (const char*,const char*) -{ -} +void G4VInteractiveSession::AddButton(const char*, const char*, const char*) {} /***************************************************************************/ -void G4VInteractiveSession::AddButton (const char*,const char*,const char*) -{ -} +void G4VInteractiveSession::DefaultIcons(bool) {} /***************************************************************************/ -void G4VInteractiveSession::DefaultIcons (bool) -{ -} +void G4VInteractiveSession::AddIcon(const char*, const char*, const char*, const char*) {} /***************************************************************************/ -void G4VInteractiveSession::AddIcon (const char*,const char*,const char*,const char*) +void G4VInteractiveSession::SetOutputStyle(const char*, const char*) { + G4Exception("G4VInteractiveSession::SetOutputStyle", "uiqt0001", JustWarning, + "This type of session does not support output styles."); } /***************************************************************************/ -void G4VInteractiveSession::OutputStyle(const char*,const char*,const char*) -{ -} +void G4VInteractiveSession::NativeMenu(bool) {} + +/***************************************************************************/ +void G4VInteractiveSession::ClearMenu() {} /***************************************************************************/ -void G4VInteractiveSession::NativeMenu (bool) +void G4VInteractiveSession::UpdateSceneTree(const G4SceneTreeItem&) {} + +/***************************************************************************/ +void G4VInteractiveSession::AddInteractor(G4String a_name, G4Interactor a_interactor) { + interactors[a_name] = a_interactor; } /***************************************************************************/ -void G4VInteractiveSession::ClearMenu () +G4Interactor G4VInteractiveSession::GetInteractor(G4String a_name) { + G4interactor_map::iterator it; + if ((it = interactors.find(a_name)) == interactors.end()) return nullptr; + return (*it).second; } /***************************************************************************/ -void G4VInteractiveSession::AddInteractor (G4String a_name, - G4Interactor a_interactor) +const std::map& +G4VInteractiveSession::GetOutputStyles() const { - interactors[a_name] = a_interactor; + return fOutputStyles; } -/***************************************************************************/ -G4Interactor G4VInteractiveSession::GetInteractor (G4String a_name) +void G4VInteractiveSession::SetStyleUtility(const G4String& destination, const G4String& style) { - G4interactor_map::iterator it; - if((it=interactors.find(a_name))==interactors.end()) return NULL; - return (*it).second; + G4String destinationG4(destination); + G4String styleG4(style); + + // Lambda expression for changing styles + const auto& setStyle = [&](const G4String& dest) { + auto& styleForThisDestination = fOutputStyles[dest]; + if (styleG4 == "fixed") { + styleForThisDestination.fixed = true; + } + else if (styleG4 == "proportional") { + styleForThisDestination.fixed = false; + } + else if (styleG4 == "bold") { + styleForThisDestination.bold = true; + } + else if (styleG4 == "plain") { + styleForThisDestination.bold = false; + styleForThisDestination.highlight = false; + } + else if (styleG4 == "highlight") { + styleForThisDestination.highlight = true; + } + }; + + // Here is where the lambda expression is used + if (destinationG4 == "all") { + for (auto& i : fOutputStyles) { + setStyle(i.first); + } + } + else { + if (fOutputStyles.find(destinationG4) != fOutputStyles.end()) { + setStyle(destinationG4); + } + else { // Shouldn't happen, but... + G4ExceptionDescription ed; + ed << "Unrecognised output destination \"" << destinationG4 << '"'; + G4Exception("G4VInteractiveSession::SetStyleUtility", "uiqt0002", JustWarning, ed); + } + } } diff --git a/source/interfaces/common/src/G4VInteractorManager.cc b/source/interfaces/core/src/G4VInteractorManager.cc similarity index 69% rename from source/interfaces/common/src/G4VInteractorManager.cc rename to source/interfaces/core/src/G4VInteractorManager.cc index ec72a07f61a..9198723c156 100644 --- a/source/interfaces/common/src/G4VInteractorManager.cc +++ b/source/interfaces/core/src/G4VInteractorManager.cc @@ -27,140 +27,123 @@ // // G.Barrand -#include -#include +#include "G4VInteractorManager.hh" #include +#include +#include -#include "G4VInteractorManager.hh" - -#define NewString(str) \ - ((str) != NULL ? (strcpy((char*)malloc((unsigned)strlen(str) + 1), str)) : NULL) +#define NewString(str) \ + ((str) != NULL ? (strcpy((char*)malloc((unsigned)strlen(str) + 1), str)) : NULL) /***************************************************************************/ -G4VInteractorManager::G4VInteractorManager ( -) -:argc(0) -,argv(NULL) -,mainInteractor(NULL) -,secondaryLoopEnabled(TRUE) -,alreadyInSecondaryLoop(FALSE) -,exitSecondaryLoop(0) -,parentInteractor(NULL) -,createdInteractor(NULL) -,creationString(NULL) +G4VInteractorManager::G4VInteractorManager() + : argc(0), + argv(nullptr), + mainInteractor(nullptr), + secondaryLoopEnabled(true), + alreadyInSecondaryLoop(false), + exitSecondaryLoop(0), + parentInteractor(nullptr), + createdInteractor(nullptr), + creationString(nullptr) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -{ -} +{} /***************************************************************************/ -G4VInteractorManager::~G4VInteractorManager ( -) +G4VInteractorManager::~G4VInteractorManager() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - if(argv!=NULL) { - for(G4int argi=0;argi::iterator it; for (it = shells.begin(); it != shells.end(); ++it) { if (*it == a_shell) { @@ -310,54 +276,44 @@ void G4VInteractorManager::RemoveShell ( } } /***************************************************************************/ -void G4VInteractorManager::SetParentInteractor ( - G4Interactor a_interactor -) +void G4VInteractorManager::SetParentInteractor(G4Interactor a_interactor) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { parentInteractor = a_interactor; } /***************************************************************************/ -G4Interactor G4VInteractorManager::GetParentInteractor ( -) +G4Interactor G4VInteractorManager::GetParentInteractor() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { return parentInteractor; } /***************************************************************************/ -void G4VInteractorManager::SetCreatedInteractor ( - G4Interactor a_interactor -) +void G4VInteractorManager::SetCreatedInteractor(G4Interactor a_interactor) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { createdInteractor = a_interactor; } /***************************************************************************/ -G4Interactor G4VInteractorManager::GetCreatedInteractor ( -) +G4Interactor G4VInteractorManager::GetCreatedInteractor() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { return createdInteractor; } /***************************************************************************/ -void G4VInteractorManager::SetCreationString ( - char* a_string -) +void G4VInteractorManager::SetCreationString(char* a_string) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { creationString = a_string; } /***************************************************************************/ -char* G4VInteractorManager::GetCreationString ( -) +char* G4VInteractorManager::GetCreationString() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { return creationString; } - diff --git a/source/interfaces/core/src/G4VUIshell.cc b/source/interfaces/core/src/G4VUIshell.cc new file mode 100644 index 00000000000..ef04ea6c9df --- /dev/null +++ b/source/interfaces/core/src/G4VUIshell.cc @@ -0,0 +1,321 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// + +#include "G4VUIshell.hh" + +#include "G4StateManager.hh" +#include "G4UIArrayString.hh" +#include "G4UIcommand.hh" +#include "G4UIcommandStatus.hh" +#include "G4UIcommandTree.hh" +#include "G4UImanager.hh" + +// terminal color string +static const G4String strESC(1, '\033'); +static const G4String TermColorString[8] = {strESC + "[30m", strESC + "[31m", strESC + "[32m", + strESC + "[33m", strESC + "[34m", strESC + "[35m", strESC + "[36m", strESC + "[37m"}; + +/////////////////////////////////////////////////////////////////// +G4VUIshell::G4VUIshell(const G4String& prompt) + : promptSetting(prompt), + promptString(""), + nColumn(80), + lsColorFlag(false), + directoryColor(BLACK), + commandColor(BLACK), + currentCommandDir("/") +/////////////////////////////////////////////////////////////////// +{} + +///////////////////////// +G4VUIshell::~G4VUIshell() = default; +///////////////////////// + +//////////////////////////////////////////// +void G4VUIshell::MakePrompt(const char* msg) +//////////////////////////////////////////// +{ + if (promptSetting.length() <= 1) { + promptString = promptSetting; + return; + } + + promptString = ""; + G4int i; + for (i = 0; i < (G4int)promptSetting.length() - 1; ++i) { + if (promptSetting[i] == '%') { + switch (promptSetting[i + 1]) { + case 's': // current application status + { + G4String stateStr; + if (msg != nullptr) { + stateStr = msg; + } + else { + G4StateManager* statM = G4StateManager::GetStateManager(); + stateStr = statM->GetStateString(statM->GetCurrentState()); + } + promptString.append(stateStr); + i++; + } break; + case '/': // current working directory + promptString.append(currentCommandDir); + i++; + break; + default: + promptString += promptSetting[i]; + break; + } + } + else { + promptString += promptSetting[i]; + } + } + + // append last chaacter + if (i == G4int(promptSetting.length()) - 1) promptString += promptSetting[i]; +} + +//////////////////////////////// +void G4VUIshell::ResetTerminal() +//////////////////////////////// +{} + +// -------------------------------------------------------------------- +// G4command operations +// -------------------------------------------------------------------- +//////////////////////////////////////////////////////////////////////// +G4UIcommandTree* G4VUIshell::GetCommandTree(const G4String& input) const +//////////////////////////////////////////////////////////////////////// +{ + G4UImanager* UI = G4UImanager::GetUIpointer(); + + G4UIcommandTree* cmdTree = UI->GetTree(); // root tree + + G4String absPath = GetAbsCommandDirPath(G4StrUtil::strip_copy(input)); + + // parsing absolute path ... + if (absPath.length() == 0) return nullptr; + if (absPath[G4int(absPath.length() - 1)] != '/') return nullptr; // error?? + if (absPath == "/") return cmdTree; + + for (std::size_t indx = 1; indx < absPath.length() - 1;) { + std::size_t jslash = absPath.find('/', indx); // search index begin with "/" + if (jslash != G4String::npos) { + if (cmdTree != nullptr) cmdTree = cmdTree->GetTree(G4String(absPath.substr(0, jslash + 1))); + } + indx = jslash + 1; + } + + if (cmdTree == nullptr) return nullptr; + return cmdTree; +} + +////////////////////////////////////////////////////////////////////// +G4String G4VUIshell::GetAbsCommandDirPath(const G4String& apath) const +////////////////////////////////////////////////////////////////////// +{ + if (apath.empty()) return apath; // null string + + // if "apath" does not start with "/", + // then it is treared as relative path + G4String bpath = apath; + if (apath[(std::size_t)0] != '/') bpath = currentCommandDir + apath; + + // parsing... + G4String absPath = "/"; + for (std::size_t indx = 1; indx <= bpath.length() - 1;) { + std::size_t jslash = bpath.find('/', indx); // search index begin with "/" + if (indx == jslash) { // skip first '///' + ++indx; + continue; + } + if (jslash != G4String::npos) { + if (bpath.substr(indx, jslash - indx) == "..") { // directory up + if (absPath == "/") { + indx = jslash + 1; + continue; + } + if (absPath.length() >= 2) { + absPath.erase(absPath.length() - 1); // remove last "/" + auto jpre = absPath.rfind('/'); + if (jpre != G4String::npos) absPath.erase(jpre + 1); + } + } + else if (bpath.substr(indx, jslash - indx) == ".") { // nothing to do + } + else { // add + if (jslash != indx || bpath[(G4int)indx] != '/') // truncate "////" + absPath += bpath.substr(indx, jslash - indx + 1); + // better to be check directory existence. (it costs!) + } + indx = jslash + 1; + } + else { // directory ONLY (ignore non-"/" terminated string) + break; + } + } + + return absPath; +} + +//////////////////////////////////////////////////////////////////// +G4String G4VUIshell::GetCommandPathTail(const G4String& apath) const +//////////////////////////////////////////////////////////////////// +{ // xxx/xxx/zzz -> zzz, trancate /// -> / + if (apath.empty()) return apath; + + auto lstr = (G4int)apath.length(); + + // for trancating "/" + G4bool Qsla = false; + if (apath[lstr - 1] == '/') Qsla = true; + + // searching last '/' from tail + G4int indx = -1; + for (G4int i = lstr - 1; i >= 0; --i) { + if (Qsla && apath[i] != '/') Qsla = false; // break "/" flag!! + if (apath[i] == '/' && ! Qsla) { + indx = i; + break; + } + } + + if (indx == -1) return apath; // not found + + if (indx == 0 && lstr == 1) { // "/" + G4String nullStr; + return nullStr; + } + // G4String newPath= apath(indx+1,lstr-indx-1); + G4String newPath = apath; + newPath = newPath.substr(indx + 1, lstr - indx - 1); + return newPath; +} + +// -------------------------------------------------------------------- +// shell commands +// -------------------------------------------------------------------- +///////////////////////////////////////////////////////////// +void G4VUIshell::ListCommand(const G4String& dir, const G4String& candidate) const +///////////////////////////////////////////////////////////// +{ + // specified directpry + G4String input = G4StrUtil::strip_copy(dir); + + // command tree of "user specified directory" + G4String vpath = currentCommandDir; + G4String vcmd; + + auto len = (G4int)input.length(); + if (! input.empty()) { + G4int indx = -1; + for (G4int i = len - 1; i >= 0; --i) { // search last '/' + if (input[i] == '/') { + indx = i; + break; + } + } + // get abs. path + if (indx != -1) vpath = GetAbsCommandDirPath(input.substr(0, indx + 1)); + if (indx != 0 || len != 1) vcmd = input.substr(indx + 1, len - indx - 1); // care for "/" + } + + // check "vcmd" is directory? + G4String inputpath = vpath + vcmd; + if (! vcmd.empty()) { + G4String tmpstr = inputpath + "/"; + if (GetCommandTree(tmpstr) != nullptr) { + vpath = tmpstr; + vcmd = ""; + } + } + + // check "vpath" directory exists? + G4UIcommandTree* atree = GetCommandTree(vpath); + if (atree == nullptr) { + G4cout << "<" << input << ">: No such directory" << G4endl; + return; + } + + // list matched directories/commands + G4String stream; + G4bool isMatch = false; + + G4int Ndir = atree->GetTreeEntry(); + G4int Ncmd = atree->GetCommandEntry(); + if (Ndir == 0 && Ncmd == 0) return; // no contents + + // directory ... + for (G4int idir = 1; idir <= Ndir; idir++) { + if (idir == 1 && lsColorFlag) stream += TermColorString[directoryColor]; + G4String fpdir = atree->GetTree(idir)->GetPathName(); + // matching test + if (candidate.empty()) { // list all + if (vcmd.empty() || fpdir == inputpath) { + stream += GetCommandPathTail(fpdir); + stream += " "; + isMatch = true; + } + } + else { // list only matched with candidate + if (fpdir.find(candidate, 0) == 0) { + stream += GetCommandPathTail(fpdir); + stream += " "; + } + } + } + + // command ... + for (G4int icmd = 1; icmd <= Ncmd; icmd++) { + if (icmd == 1 && lsColorFlag) stream += TermColorString[commandColor]; + G4String fpcmd = atree->GetPathName() + atree->GetCommand(icmd)->GetCommandName(); + // matching test + if (candidate.empty()) { // list all + if (vcmd.empty() || fpcmd == inputpath) { + stream += GetCommandPathTail(fpcmd); + stream += "* "; + isMatch = true; + } + } + else { // list only matched with candidate + if (fpcmd.find(candidate, 0) == 0) { + stream += GetCommandPathTail(fpcmd); + stream += "* "; + } + } + } + + // waring : not matched + if (! isMatch && candidate.empty()) + G4cout << "<" << input << ">: No such directory or command" << std::flush; + + // display + G4UIArrayString arrayString(stream); + arrayString.Show(nColumn); +} diff --git a/source/interfaces/common/include/G4Qt.hh b/source/interfaces/implementation/include/G4Qt.hh similarity index 79% rename from source/interfaces/common/include/G4Qt.hh rename to source/interfaces/implementation/include/G4Qt.hh index b9e224db8c8..3a55448fbad 100644 --- a/source/interfaces/common/include/G4Qt.hh +++ b/source/interfaces/implementation/include/G4Qt.hh @@ -25,7 +25,7 @@ // // // -// To unify Qt event treatment between +// To unify Qt event treatment between // G4/interfaces Qt sessions and G4/visualizations Qt drivers. // L. Garnier @@ -39,29 +39,30 @@ class QString; // Class description : // -// G4Qt : a singleton to handle GUI sessions and visualization -// drivers built over Qt. It permits to have one Qt main loop for -// the whole application. The Qt toolkit is inited in the +// G4Qt : a singleton to handle GUI sessions and visualization +// drivers built over Qt. It permits to have one Qt main loop for +// the whole application. The Qt toolkit is inited in the // constructor. It is done once for the whole application. // // Class description - end : -class G4Qt : public G4VInteractorManager { -public: +class G4Qt : public G4VInteractorManager +{ + public: static G4Qt* getInstance(); - static G4Qt* getInstance(int,char**,char*); - G4bool Inited(); - void* GetEvent(); - void FlushAndWaitExecution(); - virtual ~G4Qt(); + static G4Qt* getInstance(int, char**, char*); + G4bool Inited() override; + void* GetEvent() override; + void FlushAndWaitExecution() override; + ~G4Qt() override; bool IsExternalApp(); -private: - G4Qt (const G4Qt&); - G4Qt (int,char**,char*); - G4Qt& operator= (const G4Qt&); - static G4Qt* instance; // Pointer to single instance. - int argn; + private: + G4Qt(const G4Qt&); + G4Qt(int, char**, char*); + G4Qt& operator=(const G4Qt&); + static G4Qt* instance; // Pointer to single instance. + int argn; char** args; bool externalApp; }; diff --git a/source/interfaces/basic/include/G4UIExecutive.hh b/source/interfaces/implementation/include/G4UIExecutive.hh similarity index 90% rename from source/interfaces/basic/include/G4UIExecutive.hh rename to source/interfaces/implementation/include/G4UIExecutive.hh index 466578cd247..f4615f1427d 100644 --- a/source/interfaces/basic/include/G4UIExecutive.hh +++ b/source/interfaces/implementation/include/G4UIExecutive.hh @@ -52,12 +52,14 @@ #define G4UI_EXECUTIVE_HH #include "G4VUIshell.hh" + #include class G4UIsession; -class G4UIExecutive { -public: +class G4UIExecutive +{ + public: G4UIExecutive(G4int argc, char** argv, const G4String& type = ""); ~G4UIExecutive(); @@ -72,8 +74,21 @@ public: void SessionStart(); -private: - enum SessionType { kNone, kQt, kXm, kWin32, kTcsh, kCsh }; + private: + void SelectSessionByArg(const G4String& stype); + void SelectSessionByEnv(); + void SelectSessionByFile(const G4String& appname); + void SelectSessionByBestGuess(); + + enum SessionType + { + kNone, + kQt, + kXm, + kWin32, + kTcsh, + kCsh + }; SessionType selected; G4UIsession* session; @@ -84,27 +99,13 @@ private: G4bool verbose; std::map sessionMap; - - void SelectSessionByArg(const G4String& stype); - void SelectSessionByEnv(); - void SelectSessionByFile(const G4String& appname); - void SelectSessionByBestGuess(); }; // ==================================================================== -inline G4UIsession* G4UIExecutive::GetSession() const -{ - return session; -} +inline G4UIsession* G4UIExecutive::GetSession() const { return session; } -inline G4bool G4UIExecutive::IsGUI() const -{ - return isGUI; -} +inline G4bool G4UIExecutive::IsGUI() const { return isGUI; } -inline void G4UIExecutive::SetVerbose(G4bool val) -{ - verbose = val; -} +inline void G4UIExecutive::SetVerbose(G4bool val) { verbose = val; } #endif diff --git a/source/interfaces/basic/include/G4UIQt.hh b/source/interfaces/implementation/include/G4UIQt.hh similarity index 64% rename from source/interfaces/basic/include/G4UIQt.hh rename to source/interfaces/implementation/include/G4UIQt.hh index eca88295d8b..8343faecfdb 100644 --- a/source/interfaces/basic/include/G4UIQt.hh +++ b/source/interfaces/implementation/include/G4UIQt.hh @@ -26,19 +26,17 @@ // // #ifndef G4UIQt_h -#define G4UIQt_h - -#include +#define G4UIQt_h #include "G4VBasicShell.hh" #include "G4VInteractiveSession.hh" +#include "G4SceneTreeItem.hh" -#include +#include +#include #include -#include +#include #include -#include -#include class QMainWindow; class QLineEdit; @@ -51,7 +49,6 @@ class QTextBrowser; class QLabel; class QResizeEvent; class QTabWidget; -class QStringList; class QSplitter; class QToolBar; class QTableWidget; @@ -69,24 +66,25 @@ class QToolButton; // // A command box is at disposal for entering/recalling Geant4 commands. // A menubar could be customized through the AddMenu, AddButton, AddIcon methods. -// Note that there are corresponding Geant4 commands to add a +// Note that there are corresponding Geant4 commands to add a // menus in the menubar and add buttons in a menu. -// Ex : +// Ex : // /gui/addMenu test Test // /gui/addButton test Init /run/initialize // /gui/addButton test "Set gun" "/control/execute gun.g4m" // /gui/addButton test "Run one event" "/run/beamOn 1" // -// Command completion, by typing "tab" key, is available on the +// Command completion, by typing "tab" key, is available on the // command line. // // Class description - end : -class G4QTabWidget : public QTabWidget { -public : +class G4QTabWidget : public QTabWidget +{ + public: G4QTabWidget(); G4QTabWidget(QWidget* aParent, G4int sizeX, G4int sizeY); - void paintEvent ( QPaintEvent * event ); + void paintEvent(QPaintEvent* event) override; inline void setTabSelected(G4bool a) { fTabSelected = a; }; inline void setLastTabCreated(G4int a) { fLastCreated = a; }; inline bool isTabSelected() { return fTabSelected; }; @@ -94,106 +92,100 @@ public : G4int fLastCreated; G4int fPreferedSizeX; G4int fPreferedSizeY; - inline void setPreferredSize(QSize s) { - fPreferedSizeX = s.width() + 6; // tab label height + margin left+right - fPreferedSizeY = s.height() + 58; // margin left+right - } - inline QSize sizeHint () const { - return QSize(fPreferedSizeX, fPreferedSizeY); + inline void setPreferredSize(QSize s) + { + fPreferedSizeX = s.width() + 6; // tab label height + margin left+right + fPreferedSizeY = s.height() + 58; // margin left+right } + inline QSize sizeHint() const override { return QSize(fPreferedSizeX, fPreferedSizeY); } }; -class G4UIOutputString { - public : - G4UIOutputString(QString text,G4String thread = "",G4String outputstream= "info"); - inline QString GetOutputList() { return " all info warning error ";}; +class G4UIOutputString +{ + public: + G4UIOutputString(QString text, G4String thread = "", G4String outputstream = "info"); + inline QString GetOutputList() { return " all info warning error "; }; QString fText; G4String fThread; - G4String fOutputStream; // Error, Warning, Info + G4String fOutputStream; // Error, Warning, Info }; - -class G4UIDockWidget : public QDockWidget { -public: +class G4UIDockWidget : public QDockWidget +{ + public: G4UIDockWidget(QString txt); - void closeEvent(QCloseEvent *); + void closeEvent(QCloseEvent*) override; }; - -class G4UIQt : public QObject, public G4VBasicShell, public G4VInteractiveSession { +class G4UIQt : public QObject, public G4VBasicShell, public G4VInteractiveSession +{ Q_OBJECT -public: // With description - G4UIQt(G4int,char**); + public: // With description // (argv, argc) or (0, NULL) had to be given. - G4UIsession* SessionStart(); + G4UIQt(G4int, char**); + // To enter interactive X loop ; waiting/executing command,... - void AddMenu(const char*,const char*); - // To add a pulldown menu in the menu bar. + G4UIsession* SessionStart() override; + + // To add a pulldown menu in the menu bar. // First argument is the name of the menu. // Second argument is the label of the cascade button. // Ex : AddMenu("my_menu","My menu") - void AddButton(const char*,const char*,const char*); + void AddMenu(const char*, const char*) override; + // To add a push button in a pulldown menu. // First argument is the name of the menu. // Second argument is the label of the button. // Third argument is the Geant4 command executed when the button is fired. - // Ex : AddButton("my_menu","Run","/run/beamOn 1"); - void AddIcon(const char* userLabel, const char* iconFile, const char* command, const char* file_name=""); + // Ex : AddButton("my_menu","Run","/run/beamOn 1"); + void AddButton(const char*, const char*, const char*) override; + // To add a icon in the toolbar // First argument is the label of the icon. - // Second argument is the selected icon type (open save move rotate pick zoom_in zoom_out wireframe solid hidden_line_removal hidden_line_and_surface_removal perspective ortho user_icon). - // Third argument is the Geant4 command executed when the button is fired. - // Fourth argument is the path to the icon file if "user_icon" selected - // Ex : AddButton("change background color","../background.xpm"," /vis/viewer/set/background"); - void OutputStyle (const char*,const char*,const char*); - // Specify an output style - // First argument destination (cout cerr warnings errors all) - // Second argument is the style (fixed proportional) - // Third argument highlights commands if "highlight" (and if /control/verbose > 0) - - void NativeMenu(G4bool aVal); + // Second argument is the selected icon type (open save move rotate pick zoom_in zoom_out + // wireframe solid hidden_line_removal hidden_line_and_surface_removal perspective ortho + // user_icon). Third argument is the Geant4 command executed when the button is fired. Fourth + // argument is the path to the icon file if "user_icon" selected Ex : AddButton("change background + // color","../background.xpm"," /vis/viewer/set/background"); + void AddIcon(const char* userLabel, const char* iconFile, const char* command, + const char* file_name = "") override; + + // Specify an output style - used by /gui/outputStyle + // First argument destination ("cout" etc or "all") + // Second argument is the required style - see guidance + void SetOutputStyle(const char* destination, const char* style) override; + // Enable/Disable the native Menu Bar in Qt + void NativeMenu(G4bool aVal) override; - void ClearMenu(); // Clear Menu Bar, remove all actions + void ClearMenu() override; - void DefaultIcons(G4bool aVal); // Enable/Disable the default icon ToolBar in Qt + void DefaultIcons(G4bool aVal) override; - G4bool AddTabWidget(QWidget*,QString); // To add a tab for vis openGL Qt driver - - inline QTabWidget* GetViewerTabWidget() { - return fViewerTabWidget; - }; + G4bool AddTabWidget(QWidget*, QString); + + inline QTabWidget* GetViewerTabWidget() { return fViewerTabWidget; }; + // Get the "old" scene tree component QWidget* GetSceneTreeWidget(); - // Get the scene tree component - QWidget* GetViewerPropertiesWidget(); // Get the Viewer Properties Widget + QWidget* GetViewerPropertiesWidget(); - QWidget* GetPickInfosWidget(); // Get the Pick Widget + QWidget* GetPickInfosWidget(); G4bool IsSplitterReleased(); - inline G4bool IsIconMoveSelected() { - return fMoveSelected; - }; - inline G4bool IsIconRotateSelected() { - return fRotateSelected; - }; - inline G4bool IsIconPickSelected() { - return fPickSelected; - }; - inline G4bool IsIconZoomInSelected() { - return fZoomInSelected; - }; - inline G4bool IsIconZoomOutSelected() { - return fZoomOutSelected; - }; + inline G4bool IsIconMoveSelected() { return fMoveSelected; }; + inline G4bool IsIconRotateSelected() { return fRotateSelected; }; + inline G4bool IsIconPickSelected() { return fPickSelected; }; + inline G4bool IsIconZoomInSelected() { return fZoomInSelected; }; + inline G4bool IsIconZoomOutSelected() { return fZoomOutSelected; }; void SetIconMoveSelected(); void SetIconRotateSelected(); @@ -207,97 +199,103 @@ public: // With description void SetIconPerspectiveSelected(); void SetIconOrthoSelected(); - inline QMainWindow * GetMainWindow() { - return fMainWindow; - }; // Return the main window - - inline QPixmap* getSearchIcon() { return fSearchIcon;}; + inline QMainWindow* GetMainWindow() { return fMainWindow; }; + // return the "search" icon pixmap - inline QPixmap* getClearIcon() { return fClearIcon;}; + inline QPixmap* getSearchIcon() { return fSearchIcon; }; + // return the "clear" icon pixmap + inline QPixmap* getClearIcon() { return fClearIcon; }; - void SetStartPage(const std::string&); // Set the text on the first page of the viewer. If "", will take the last value as default // Note: Qt Rich text format could be used, see link for example : // https://qt-project.org/doc/qt-4.8/richtext-html-subset.html#table-cell-attributes + void SetStartPage(const std::string&); - inline QWidget* GetCoutWidget() { - return fCoutDockWidget->widget(); - }; // Return the G4cout widget with filters + inline QWidget* GetCoutWidget() { return fCoutDockWidget->widget(); }; - inline G4UIDockWidget* GetCoutDockWidget() { - return fCoutDockWidget; - }; // Return the cout dockable widget as a QDockWidget - - inline G4UIDockWidget* GetUserInterfaceWidget() { - return fUIDockWidget; - }; + inline G4UIDockWidget* GetCoutDockWidget() { return fCoutDockWidget; }; + // Return the UserInterface widget (including scene tree, help and History widgets) + inline G4UIDockWidget* GetUserInterfaceWidget() { return fUIDockWidget; }; - inline QTabWidget* GetUITabWidget() { - return fUITabWidget; - } // return the viewer widget including all viewers + inline QTabWidget* GetUITabWidget() { return fUITabWidget; } - inline QWidget* GetHistoryWidget() { - return fHistoryTBWidget; - } // return the history widget - - inline QWidget* GetHelpWidget() { - return fHelpTBWidget; - } + inline QWidget* GetHistoryWidget() { return fHistoryTBWidget; } + // return the help widget - - G4bool AddViewerTab(QWidget* w, std::string title); + inline QWidget* GetHelpWidget() { return fHelpTBWidget; } + // Add a new tab in the viewer, could be used to add your own component - - G4bool AddViewerTabFromFile(std::string fileName, std::string title); + G4bool AddViewerTab(QWidget* w, std::string title); + // Add a new tab in the viewer containing the content of the file in a QLabel + G4bool AddViewerTabFromFile(std::string fileName, std::string title); + + // Update "new" scene tree + void UpdateSceneTree(const G4SceneTreeItem&) override; public: - ~G4UIQt(); + ~G4UIQt() override; void Prompt(G4String); void SessionTerminate(); - virtual void PauseSessionStart(const G4String&); - virtual G4int ReceiveG4cout(const G4String&); - virtual G4int ReceiveG4cerr(const G4String&); + void PauseSessionStart(const G4String&) override; + G4int ReceiveG4debug(const G4String&) override; + G4int ReceiveG4cout(const G4String&) override; + G4int ReceiveG4cerr(const G4String&) override; // G4String GetCommand(Widget); -private: - void SecondaryLoop(G4String); // a VIRER + private: + void SecondaryLoop(G4String); // a VIRER void CreateHelpWidget(); void InitHelpTreeAndVisParametersWidget(); void FillHelpTree(); void UpdateCommandCompleter(); void CreateIcons(); - virtual void ExitHelp() const; + void ExitHelp() const override; void SetDefaultIconsToolbar(); - void CreateHelpTree(QTreeWidgetItem*,G4UIcommandTree*); - QTreeWidgetItem* FindTreeItem(QTreeWidgetItem *,const QString&); + void CreateHelpTree(QTreeWidgetItem*, G4UIcommandTree*); + QTreeWidgetItem* FindTreeItem(QTreeWidgetItem*, const QString&); + + // Create the "mother" widget + QWidget* CreateSceneTreeWidget(); + + // Classes/structs and functions for the "new" scene tree + // UpdateSceneTree is in "public" section above. + // Create and connect the new tree widget + void CreateNewSceneTreeWidget(); + // Build Physical Volume tree of touchables + void BuildPVQTree(const G4SceneTreeItem& g4stItem, QTreeWidgetItem* qtwItem); + // Callbacks on new scene tree items + void SceneTreeItemClicked(QTreeWidgetItem*); + void SceneTreeItemDoubleClicked(QTreeWidgetItem*); + void SceneTreeItemExpanded(QTreeWidgetItem*); + void SceneTreeItemCollapsed(QTreeWidgetItem*); QString GetCommandList(const G4UIcommand*); void updateHelpArea(const G4UIcommand*); - virtual G4bool GetHelpChoice(G4int&);// have to be implemeted because we heritate from G4VBasicShell - bool eventFilter(QObject*,QEvent*); + G4bool GetHelpChoice( + G4int&) override; // have to be implemeted because we heritate from G4VBasicShell + bool eventFilter(QObject*, QEvent*) override; void ActivateCommand(G4String); -#if QT_VERSION < 0x050F00 - QMap LookForHelpStringInChildTree(G4UIcommandTree *,const QString&); +#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 0)) + QMap LookForHelpStringInChildTree(G4UIcommandTree*, const QString&); #else - QMultiMap LookForHelpStringInChildTree(G4UIcommandTree *,const QString&); + QMultiMap LookForHelpStringInChildTree(G4UIcommandTree*, const QString&); #endif QWidget* CreateVisParametersTBWidget(); QWidget* CreateHelpTBWidget(); G4UIDockWidget* CreateCoutTBWidget(); QWidget* CreateHistoryTBWidget(); G4UIDockWidget* CreateUITabWidget(); - QWidget* CreateSceneTreeWidget(); void CreateViewerWidget(); - void OpenHelpTreeOnCommand(const QString &); + void OpenHelpTreeOnCommand(const QString&); QString GetShortCommandPath(QString); QString GetLongCommandPath(QTreeWidgetItem*); G4bool IsGUICommand(const G4UIcommand*); @@ -309,49 +307,51 @@ private: void UpdateCoutThreadFilter(); #endif void FilterAllOutputTextArea(); - QString FilterOutput(const G4UIOutputString&,const QString&,const QString&); + QString FilterOutput(const G4UIOutputString&, const QString&, const QString&); G4String GetThreadPrefix(); G4bool CheckG4EnvironmentVariable(char* txt, char* version); QStandardItemModel* CreateCompleterModel(G4String aCmd); void CreateEmptyViewerPropertiesWidget(); void CreateEmptyPickInfosWidget(); -private: - QMainWindow * fMainWindow; - QLabel *fCommandLabel; - QLineEdit * fCommandArea; - QTextEdit *fCoutTBTextArea; + private: + QMainWindow* fMainWindow; + QLabel* fCommandLabel; + QLineEdit* fCommandArea; + QTextEdit* fCoutTBTextArea; QTabWidget* fUITabWidget; - std::vector fG4OutputString; - QLineEdit * fCoutFilter; + std::vector fG4OutputString; + QLineEdit* fCoutFilter; QCompleter* fCompleter; G4bool fDefaultIcons; - - QListWidget *fHistoryTBTableList; - QTreeWidget *fHelpTreeWidget; + + QListWidget* fHistoryTBTableList; + QTreeWidget* fHelpTreeWidget; QWidget* fHelpTBWidget; QWidget* fHistoryTBWidget; G4UIDockWidget* fCoutDockWidget; G4UIDockWidget* fUIDockWidget; QWidget* fSceneTreeWidget; + QWidget* fNewSceneTreeWidget; + QTreeWidget* fNewSceneTreeItemTreeWidget; QWidget* fViewerPropertiesWidget; QWidget* fPickInfosWidget; QLineEdit* fHelpLine; G4QTabWidget* fViewerTabWidget; QString fCoutText; - QTextBrowser *fStartPage; - QSplitter * fHelpVSplitter; + QTextBrowser* fStartPage; + QSplitter* fHelpVSplitter; QTextEdit* fParameterHelpLabel; QTableWidget* fParameterHelpTable; - QToolBar *fToolbarApp; - QToolBar *fToolbarUser; + QToolBar* fToolbarApp; + QToolBar* fToolbarUser; QString fStringSeparator; G4String fLastErrMessage; QString fLastOpenPath; QToolButton* fViewModePopupButton; QToolButton* fSurfaceModePopupButton; - + QPixmap* fSearchIcon; QPixmap* fClearIcon; QPixmap* fSaveIcon; @@ -373,12 +373,12 @@ private: QPixmap* fParamIcon; QPixmap* fPickTargetIcon; QPixmap* fExitIcon; - + #ifdef G4MULTITHREADED QComboBox* fThreadsFilterComboBox; #endif std::string fDefaultViewerFirstPageHTMLText; - + QDialog* fViewerPropertiesDialog; QDialog* fPickInfosDialog; QString fLastCompleteCommand; @@ -387,17 +387,13 @@ private: G4bool fPickSelected; G4bool fZoomInSelected; G4bool fZoomOutSelected; - struct G4UIQtStyle { - G4bool fixed, highlight; - }; - std::map fOutputStyles; -private Q_SLOTS : + private Q_SLOTS: void ExitSession(); void ClearButtonCallback(); void SaveOutputCallback(); void CommandEnteredCallback(); - void CommandEditedCallback(const QString & text); + void CommandEditedCallback(const QString& text); void ButtonCallback(const QString&); void HelpTreeClicCallback(); void HelpTreeDoubleClicCallback(); @@ -405,7 +401,7 @@ private Q_SLOTS : void CommandHistoryCallback(); void LookForHelpStringCallback(); void UpdateTabWidget(int); - void ResizeTabWidget( QResizeEvent* ); + void ResizeTabWidget(QResizeEvent*); void CoutFilterCallback(const QString&); void ThreadComboBoxCallback(int); void TabCloseCallback(int); @@ -421,4 +417,3 @@ private Q_SLOTS : }; #endif - diff --git a/source/interfaces/implementation/include/G4UIWin32.hh b/source/interfaces/implementation/include/G4UIWin32.hh new file mode 100644 index 00000000000..584916fdb20 --- /dev/null +++ b/source/interfaces/implementation/include/G4UIWin32.hh @@ -0,0 +1,182 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// G4UIWin32 +// +// Class description : +// +// G4UIWin32 is a class to handle a Windows interactive session. +// It is the Windows version of G4UIterminal. +// +// A command box is at disposal for entering/recalling Geant4 commands. +// A menubar could be customized through the AddMenu, AddButton methods. +// Note that there are corresponding Geant4 commands to add a +// menu in the menubar and add buttons in a menu. +// Ex : +// /gui/addMenu test Test +// /gui/addButton test Init /run/initialize +// /gui/addButton test "Set gun" "/control/execute gun.g4m" +// /gui/addButton test "Run one event" "/run/beamOn 1" +// +// Command completion, by typing "tab" key, is available on the +// command line. + +// Original author: G.Barrand, 1998 +// Revised: O.Pena-Rodriguez, March 2021 +// ------------------------------------------------------------------- +#ifndef G4UIWin32_h +#define G4UIWin32_h + +#define ID_EXIT_APP 40001 +#define ID_OPEN_MACRO 40002 +#define ID_SAVE_VIEWER_STATE 40003 +#define ID_RUN_BEAMON 40004 +#define ID_RUN_CMD 40005 +#define ID_VIEW_SOLID 40006 +#define ID_VIEW_WIREFRAME 40007 +#define ID_PROJ_ORTHOGRAPHIC 40008 +#define ID_PROJ_PERSPECTIVE 40009 +#define ID_ZOOM_IN 40010 +#define ID_ZOOM_OUT 40011 +#define ID_ORIENTATION_XY 40012 +#define ID_ORIENTATION_XZ 40013 +#define ID_ORIENTATION_YZ 40014 +#define ID_ORIENTATION_OBLIQUE 40015 +#define ID_HELP_ABOUT 40016 +#define ID_LOG_CLEAN 40017 +#define ID_LOG_SAVE 40018 + +#define NUM_BUTTONS 12 +#define MAX_HISTORY_ITEMS 10 + +#define IDC_MAIN_EDIT 101 +#define IDC_MAIN_TOOL 102 +#define IDC_MAIN_TREE_VIEW 104 +#define IDC_MAIN_COMBO 105 +#define IDC_MAIN_STATUS 106 + +#include "G4VBasicShell.hh" +#include "G4VInteractiveSession.hh" +#include "G4Win32.hh" + +#include + +#include +#include + +class G4VInteractorManager; + +class G4UIWin32 : public G4VBasicShell, public G4VInteractiveSession +{ + public: + G4UIWin32(); + ~G4UIWin32() override; + + // To enter interactive Win32 loop ; waiting/executing command,... + G4UIsession* SessionStart() override; + + // To add a pulldown menu in the menu bar. + // First argument is the name of the menu. + // Second argument is the label of the cascade button. + // Ex : AddMenu("my_menu","My menu") + void AddMenu(const char*, const char*) override; + + // To add a push button in a pulldown menu. + // First argument is the name of the menu. + // Second argument is the label of the button. + // Third argument is the Geant4 command executed when the button is fired. + // Ex : AddButton("my_menu","Run","/run/beamOn 1"); + void AddButton(const char*, const char*, const char*) override; + + void Prompt(const G4String&); + void SessionTerminate(); + void PauseSessionStart(const G4String&) override; + + G4int ReceiveG4debug(const G4String&) override; + G4int ReceiveG4cout(const G4String&) override; + G4int ReceiveG4cerr(const G4String&) override; + + G4String GetCommand(G4int); + // void TextAppendString(char*); + + private: + void SecondaryLoop(const G4String&); + G4bool GetHelpChoice(G4int&) override; + void ExitHelp() const override; + + G4bool CreateComponents(HWND); + G4bool ResizeComponents(HWND); + void ProcessTabKey(); + void ProcessEscKey(); + void ProcessEnterKey(); + void ProcessUpKey(); + void ProcessDownKey(); + + G4bool ProcessDefaultCommands(G4int); + static G4String GetToolTips(G4int); + G4String GetHelpTreeToolTips(HTREEITEM); + + static G4String ConvertNewLines(G4String); + + void HelpTreeDoubleClick(HTREEITEM); + + G4bool SaveLogFile(LPCTSTR); + void AddText(LPSTR); + + void DoOpenMacro(HWND); + void DoSaveViewer(HWND); + void DoSaveLog(HWND); + + G4bool InitHelpTreeItems(); + HTREEITEM AddItemToHelpTree(LPTSTR, HTREEITEM = TVI_ROOT); + static G4String GetShortCommandPath(G4String); + LPSTR GetItemPath(HTREEITEM); + + void CreateHelpTree(HTREEITEM, G4UIcommandTree*); + + private: + HWND fHWndMainWindow; + HWND fHWndEditor; + HWND fHWndToolBar; + HWND fHWndComboBox; + HWND fHWndComboEditor; + HWND fHWndHelpTree; + HWND fHWndStatus; + + G4VInteractorManager* interactorManager; + HMENU menuBar; + std::map> commands; + + static LRESULT CALLBACK MainWindowProc(HWND, UINT, WPARAM, LPARAM); + // New wndproc for the combo box + static LRESULT CALLBACK ComboEditorWindowProc(HWND, UINT, WPARAM, LPARAM); + + G4bool fHelp; + G4int fHelpChoice; + std::vector fHistory; + G4int fHistoryPos; +}; + +#endif diff --git a/source/interfaces/basic/include/G4UIXm.hh b/source/interfaces/implementation/include/G4UIXm.hh similarity index 81% rename from source/interfaces/basic/include/G4UIXm.hh rename to source/interfaces/implementation/include/G4UIXm.hh index 43b3478ae4e..c09165df1f2 100644 --- a/source/interfaces/basic/include/G4UIXm.hh +++ b/source/interfaces/implementation/include/G4UIXm.hh @@ -26,14 +26,14 @@ // // #ifndef G4UIXm_h -#define G4UIXm_h +#define G4UIXm_h -#include +#include "G4VBasicShell.hh" +#include "G4VInteractiveSession.hh" #include -#include "G4VBasicShell.hh" -#include "G4VInteractiveSession.hh" +#include class G4UIsession; @@ -44,58 +44,63 @@ class G4UIsession; // // A command box is at disposal for entering/recalling Geant4 commands. // A menubar could be customized through the AddMenu, AddButton methods. -// Note that there are corresponding Geant4 commands to add a +// Note that there are corresponding Geant4 commands to add a // menus in the menubar and add buttons in a menu. -// Ex : +// Ex : // /gui/addMenu test Test // /gui/addButton test Init /run/initialize // /gui/addButton test "Set gun" "/control/execute gun.g4m" // /gui/addButton test "Run one event" "/run/beamOn 1" // -// Command completion, by typing "tab" key, is available on the +// Command completion, by typing "tab" key, is available on the // command line. // // Class description - end : -class G4UIXm : public G4VBasicShell, public G4VInteractiveSession { -public: // With description - G4UIXm(G4int,char**); +class G4UIXm : public G4VBasicShell, public G4VInteractiveSession +{ + public: // With description // (argv, argc) or (0, NULL) had to be given. - G4UIsession* SessionStart(); + G4UIXm(G4int, char**); + ~G4UIXm(); + // To enter interactive X loop ; waiting/executing command,... - void AddMenu(const char*,const char*); - // To add a pulldown menu in the menu bar. + G4UIsession* SessionStart(); + + // To add a pulldown menu in the menu bar. // First argument is the name of the menu. // Second argument is the label of the cascade button. // Ex : AddMenu("my_menu","My menu") - void AddButton(const char*,const char*,const char*); + void AddMenu(const char*, const char*); + // To add a push button in a pulldown menu. // First argument is the name of the menu. // Second argument is the label of the button. // Third argument is the Geant4 command executed when the button is fired. - // Ex : AddButton("my_menu","Run","/run/beamOn 1"); -public: - ~G4UIXm(); + // Ex : AddButton("my_menu","Run","/run/beamOn 1"); + void AddButton(const char*, const char*, const char*); + void Prompt(G4String); void SessionTerminate(); virtual void PauseSessionStart(const G4String&); + virtual G4int ReceiveG4debug(const G4String&); virtual G4int ReceiveG4cout(const G4String&); virtual G4int ReceiveG4cerr(const G4String&); G4String GetCommand(Widget); -private: + + private: void SecondaryLoop(G4String); G4bool GetHelpChoice(G4int&); void ExitHelp() const; - static void CommandEnteredCallback(Widget,XtPointer,XtPointer); - static void keyHandler(Widget,XtPointer,XEvent*,Boolean*); - static void ButtonCallback(Widget,XtPointer,XtPointer); + static void CommandEnteredCallback(Widget, XtPointer, XtPointer); + static void keyHandler(Widget, XtPointer, XEvent*, Boolean*); + static void ButtonCallback(Widget, XtPointer, XtPointer); - Widget form,shell,command,menuBar,text; - std::map > commands; + Widget form, shell, command, menuBar, text; + std::map> commands; G4bool fHelp; G4int fHelpChoice; - G4String menu_str[6] = { "form", "menuBar", "command", - "Clear", "clearButton", "text" }; + G4String menu_str[6] = {"form", "menuBar", "command", "Clear", "clearButton", "text"}; }; #endif diff --git a/source/interfaces/common/include/G4Win32.hh b/source/interfaces/implementation/include/G4Win32.hh similarity index 83% rename from source/interfaces/common/include/G4Win32.hh rename to source/interfaces/implementation/include/G4Win32.hh index 6eafca4cdcd..64180fb0d65 100644 --- a/source/interfaces/common/include/G4Win32.hh +++ b/source/interfaces/implementation/include/G4Win32.hh @@ -27,8 +27,8 @@ // // Class description : // -// A singleton to handle GUI sessions and visualization -// drivers built over Windows. It allows to have one Windows main +// A singleton to handle GUI sessions and visualization +// drivers built over Windows. It allows to have one Windows main // loop for the whole application. // Unifies Windows message treatment between G4/interfaces Windows // sessions and G4/visualizations Windows drivers. @@ -38,26 +38,24 @@ #ifndef G4WIN32_HH #define G4WIN32_HH +#include "G4VInteractorManager.hh" + #include #include -#include "G4VInteractorManager.hh" - class G4Win32 : public G4VInteractorManager { - public: - - static G4Win32* getInstance (); - G4bool Inited (); - void* GetEvent (); - void FlushAndWaitExecution (); - static G4bool DispatchWin32Event (void*); - virtual ~G4Win32 (); - - private: - - G4Win32(); - static G4Win32* instance; // Pointer to single instance. + public: + static G4Win32* getInstance(); + G4bool Inited(); + void* GetEvent(); + void FlushAndWaitExecution(); + static G4bool DispatchWin32Event(void*); + virtual ~G4Win32(); + + private: + G4Win32(); + static G4Win32* instance; // Pointer to single instance. }; #endif diff --git a/source/interfaces/common/include/G4Xt.hh b/source/interfaces/implementation/include/G4Xt.hh similarity index 80% rename from source/interfaces/common/include/G4Xt.hh rename to source/interfaces/implementation/include/G4Xt.hh index ac168ab0479..002a7441248 100644 --- a/source/interfaces/common/include/G4Xt.hh +++ b/source/interfaces/implementation/include/G4Xt.hh @@ -25,44 +25,44 @@ // // // -// To unify X11 event treatment between +// To unify X11 event treatment between // G4/interfaces Xt sessions and G4/visualizations Xt drivers. // G.Barrand #ifndef G4XT_HH #define G4XT_HH -#include - #include "G4VInteractorManager.hh" +#include + // Class description : // -// G4Xt : a singleton to handle GUI sessions and visualization -// drivers built over Xt. It permits to have one Xt main loop for -// the whole application. The Xt toolkit is inited in the +// G4Xt : a singleton to handle GUI sessions and visualization +// drivers built over Xt. It permits to have one Xt main loop for +// the whole application. The Xt toolkit is inited in the // constructor. It is done once for the whole application. // // Class description - end : -class G4Xt : public G4VInteractorManager { -public: +class G4Xt : public G4VInteractorManager +{ + public: static G4Xt* getInstance(); - static G4Xt* getInstance(int,char**,char*); + static G4Xt* getInstance(int, char**, char*); void PutStringInResourceDatabase(char*); G4bool Inited(); void* GetEvent(); void FlushAndWaitExecution(); - virtual ~G4Xt(); + virtual ~G4Xt(); // Workaround for gcc8 Coverity cast warning - static bool xt_dispatch_event(void* a_event) { - return XtDispatchEvent((XEvent*)a_event); - } -private: - G4Xt (const G4Xt&); - G4Xt (int,char**,char*); - G4Xt& operator= (const G4Xt&); - static G4Xt* instance; // Pointer to single instance. + static bool xt_dispatch_event(void* a_event) { return XtDispatchEvent((XEvent*)a_event); } + + private: + G4Xt(const G4Xt&); + G4Xt(int, char**, char*); + G4Xt& operator=(const G4Xt&); + static G4Xt* instance; // Pointer to single instance. }; #endif diff --git a/source/interfaces/implementation/sources.cmake b/source/interfaces/implementation/sources.cmake new file mode 100644 index 00000000000..37f42d94a5d --- /dev/null +++ b/source/interfaces/implementation/sources.cmake @@ -0,0 +1,42 @@ +# - G4UIimplementation module build definition + +# Define the Geant4 Module. +geant4_add_module(G4UIimplementation PUBLIC_HEADERS G4UIExecutive.hh SOURCES G4UIExecutive.cc) +geant4_module_link_libraries(G4UIimplementation PUBLIC G4UIcore PRIVATE G4intercoms G4globman) + +# Win32 terminal only for MSVC builds, but always built here +# ... not in G4UIcore because of the requirement to have G4Win32 interactor manager +if(MSVC) + geant4_module_sources(G4UIimplementation PUBLIC_HEADERS G4UIWin32.hh G4Win32.hh SOURCES G4UIWin32.cc G4Win32.cc) + geant4_module_compile_definitions(G4UIimplementation + PUBLIC G4UI_USE_WIN32 + PRIVATE G4UI_BUILD_WIN32_SESSION) + geant4_module_link_libraries(G4UIimplementation PUBLIC COMCTL32) +endif() + +# Qt only if selected. +if(GEANT4_USE_QT) + geant4_module_sources(G4UIimplementation PUBLIC_HEADERS G4UIQt.hh G4Qt.hh SOURCES G4UIQt.cc G4Qt.cc) + geant4_module_compile_definitions(G4UIimplementation + PUBLIC G4UI_USE_QT + PRIVATE G4UI_BUILD_QT_SESSION) + geant4_module_link_libraries(G4UIimplementation PUBLIC G4graphics_reps Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Core) + + # Coupling... + if(GEANT4_USE_VTK) + geant4_module_compile_definitions(G4UIimplementation PRIVATE G4VIS_USE_VTK_QT) + geant4_module_link_libraries(G4UIimplementation PRIVATE ${VTK_LIBRARIES}) + endif() +endif() + +# Xm and only on UNIX and if selected +if(UNIX AND GEANT4_USE_XM) + geant4_module_sources(G4UIimplementation PUBLIC_HEADERS G4UIXm.hh G4Xt.hh SOURCES G4UIXm.cc G4Xt.cc) + geant4_module_compile_definitions(G4UIimplementation + PUBLIC G4UI_USE_XM + PRIVATE G4UI_BUILD_XM_SESSION) + geant4_module_link_libraries(G4UIimplementation + PUBLIC + Motif::Xm + X11::SM X11::ICE X11::X11 X11::Xext X11::Xmu X11::Xt) +endif() diff --git a/source/interfaces/common/src/G4Qt.cc b/source/interfaces/implementation/src/G4Qt.cc similarity index 78% rename from source/interfaces/common/src/G4Qt.cc rename to source/interfaces/implementation/src/G4Qt.cc index 82eaeaf18c1..c7cba2b3dcb 100644 --- a/source/interfaces/common/src/G4Qt.cc +++ b/source/interfaces/implementation/src/G4Qt.cc @@ -27,119 +27,110 @@ // // L. Garnier -#include -#include +#include "G4Qt.hh" +#include "G4UImanager.hh" #include "G4ios.hh" -#include "G4Qt.hh" -#include "G4UImanager.hh" +#include #include -#include +#include +#include #ifdef G4VIS_USE_VTK_QT -#include -#include "QVTKOpenGLNativeWidget.h" +# include "QVTKOpenGLNativeWidget.h" +# include #endif -G4Qt* G4Qt::instance = NULL; +G4Qt* G4Qt::instance = nullptr; -static G4bool QtInited = FALSE; +static G4bool QtInited = false; /***************************************************************************/ -G4Qt* G4Qt::getInstance ( -) +G4Qt* G4Qt::getInstance() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - return G4Qt::getInstance (0,NULL,(char*)"Geant4"); + return G4Qt::getInstance(0, nullptr, (char*)"Geant4"); } /***************************************************************************/ -G4Qt* G4Qt::getInstance ( - int a_argn -,char** a_args -,char* a_class -) +G4Qt* G4Qt::getInstance(int a_argn, char** a_args, char* a_class) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - if (instance==NULL) { - instance = new G4Qt(a_argn,a_args,a_class); + if (instance == nullptr) { + instance = new G4Qt(a_argn, a_args, a_class); } return instance; } /***************************************************************************/ -G4Qt::G4Qt ( - int a_argn -,char** a_args - ,char* /*a_class */ - ) +G4Qt::G4Qt(int a_argn, char** a_args, char* /*a_class */ +) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { argn = 0; - args = NULL; + args = nullptr; externalApp = false; // Check if Qt already init in another external app - if(qApp) { + if (qApp) { externalApp = true; - QtInited = TRUE; - SetMainInteractor (qApp); - SetArguments (a_argn,a_args); - - } else { - - if(QtInited==FALSE) { //Qt should be Inited once ! + QtInited = true; + SetMainInteractor(qApp); + SetArguments(a_argn, a_args); + } + else { + if (! QtInited) { // Qt should be Inited once ! // Then two cases : // - It is the first time we create G4UI (argc!=0) // -> Inited and register // - It is the first time we create G4VIS (argc == 0) // -> Inited and NOT register - + if (a_argn != 0) { argn = a_argn; args = a_args; + } + else { // argc = 0 - } else { //argc = 0 - - // FIXME : That's not the good arguments, but I don't know how to get args from other Interactor. - // Ex: How to get them from G4Xt ? + // FIXME : That's not the good arguments, but I don't know how to get args from other + // Interactor. Ex: How to get them from G4Xt ? argn = 1; - args = (char **)malloc( 1 * sizeof(char *) ); - args[0] = (char *)malloc(10 * sizeof(char)); + args = (char**)malloc(1 * sizeof(char*)); + args[0] = (char*)malloc(10 * sizeof(char)); strncpy(args[0], "my_app \0", 9); } - int *p_argn = (int*)malloc(sizeof(int)); + int* p_argn = (int*)malloc(sizeof(int)); *p_argn = argn; #ifdef WIN32 - qApp->setAttribute( Qt::AA_UseDesktopOpenGL ); + qApp->setAttribute(Qt::AA_UseDesktopOpenGL); #endif #ifdef G4VIS_USE_VTK_QT QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat()); #endif - new QApplication (*p_argn, args); - if(!qApp) { - + new QApplication(*p_argn, args); + if (! qApp) { G4UImanager* UImanager = G4UImanager::GetUIpointer(); G4int verbose = UImanager->GetVerboseLevel(); if (verbose >= 2) { - G4cout << "G4Qt : Unable to init Qt." << G4endl; + G4cout << "G4Qt : Unable to init Qt." << G4endl; } - } else { - QtInited = TRUE; + } + else { + QtInited = true; if (a_argn != 0) { - SetMainInteractor (qApp); + SetMainInteractor(qApp); } - SetArguments (a_argn,a_args); + SetArguments(a_argn, a_args); } } } // AddDispatcher ((G4DispatchFunction)XtDispatchEvent); - + /* * On some non-English locale, comma is used for the decimal separator instead of dot * bringing to weird behavior of strtod (string to double) function in user application. @@ -154,47 +145,42 @@ G4Qt::G4Qt ( */ // explicitly set the LC_NUMBERIC locale to "C" - setlocale (LC_NUMERIC, "C"); + setlocale(LC_NUMERIC, "C"); } /***************************************************************************/ -G4Qt::~G4Qt ( -) +G4Qt::~G4Qt() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - if(this==instance) { - instance = NULL; + if (this == instance) { + instance = nullptr; } } /***************************************************************************/ -G4bool G4Qt::Inited ( -) +G4bool G4Qt::Inited() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { return QtInited; } /***************************************************************************/ -void* G4Qt::GetEvent ( -) +void* G4Qt::GetEvent() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - return 0; + return nullptr; } /***************************************************************************/ -void G4Qt::FlushAndWaitExecution ( -) +void G4Qt::FlushAndWaitExecution() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - if(!qApp) return; + if (! qApp) return; qApp->processEvents(); } /***************************************************************************/ -bool G4Qt::IsExternalApp ( -) +bool G4Qt::IsExternalApp() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { diff --git a/source/interfaces/basic/src/G4UIExecutive.cc b/source/interfaces/implementation/src/G4UIExecutive.cc similarity index 58% rename from source/interfaces/basic/src/G4UIExecutive.cc rename to source/interfaces/implementation/src/G4UIExecutive.cc index a057c25dfeb..acb61d323de 100644 --- a/source/interfaces/basic/src/G4UIExecutive.cc +++ b/source/interfaces/implementation/src/G4UIExecutive.cc @@ -24,26 +24,27 @@ // ******************************************************************** #include "G4UIExecutive.hh" -#include "G4UIsession.hh" + #include "G4UImanager.hh" +#include "G4UIsession.hh" #if defined(G4UI_BUILD_QT_SESSION) -#include "G4UIQt.hh" -#include "G4Qt.hh" +# include "G4Qt.hh" +# include "G4UIQt.hh" #endif #if defined(G4UI_BUILD_XM_SESSION) -#include "G4UIXm.hh" +# include "G4UIXm.hh" #endif #if defined(G4UI_BUILD_WIN32_SESSION) -#include "G4UIWin32.hh" +# include "G4UIWin32.hh" #endif -#include "G4UIterminal.hh" -#include "G4UItcsh.hh" -#include "G4UIcsh.hh" #include "G4TiMemory.hh" +#include "G4UIcsh.hh" +#include "G4UItcsh.hh" +#include "G4UIterminal.hh" // -------------------------------------------------------------------------- // build flags as variables @@ -76,88 +77,86 @@ static const G4bool tcsh_build = false; // -------------------------------------------------------------------------- G4UIExecutive::G4UIExecutive(G4int argc, char** argv, const G4String& type) - : selected(kNone), session(NULL), shell(NULL), isGUI(false), verbose(true) + : selected(kNone), session(nullptr), shell(nullptr), isGUI(false), verbose(true) { - if ( verbose ) { + if (verbose) { G4cout << "Available UI session types: [ "; - if ( qt_build ) G4cout << "Qt, "; - if ( xm_build ) G4cout << "Xm, "; - if ( win32_build) G4cout << "Win32, "; - if (tcsh_build ) G4cout << "tcsh, "; + if (qt_build) G4cout << "Qt, "; + if (xm_build) G4cout << "Xm, "; + if (win32_build) G4cout << "Win32, "; + if (tcsh_build) G4cout << "tcsh, "; G4cout << "csh ]" << G4endl; } // selecting session type... // 1st priority : in case argumant specified - G4String stype = G4StrUtil::to_lower_copy(type); // session type is case-insensitive. - if (type != "") SelectSessionByArg(stype); + G4String stype = G4StrUtil::to_lower_copy(type); // session type is case-insensitive. + if (! type.empty()) SelectSessionByArg(stype); // 2nd priority : refer environment variables (as backword compatibility) - if ( selected == kNone ) SelectSessionByEnv(); + if (selected == kNone) SelectSessionByEnv(); // 3rd priority : refer $HOME/.g4session - if ( selected == kNone ) { + if (selected == kNone) { G4String appinput = argv[0]; G4String appname = ""; size_t islash = appinput.find_last_of("/\\"); if (islash == G4String::npos) appname = appinput; else - appname = appinput.substr(islash+1, appinput.size()-islash-1); + appname = appinput.substr(islash + 1, appinput.size() - islash - 1); SelectSessionByFile(appname); } // 4th, best guess of session type - if ( selected == kNone) SelectSessionByBestGuess(); + if (selected == kNone) SelectSessionByBestGuess(); // instantiate a session... - switch ( selected ) { - case kQt: + switch (selected) { + case kQt: #if defined(G4UI_BUILD_QT_SESSION) - session = new G4UIQt(argc, argv); - isGUI = true; + session = new G4UIQt(argc, argv); + isGUI = true; #endif - break; - case kXm: + break; + case kXm: #if defined(G4UI_BUILD_XM_SESSION) - session = new G4UIXm(argc, argv); - isGUI = true; + session = new G4UIXm(argc, argv); + isGUI = true; #endif - break; - case kWin32: + break; + case kWin32: #if defined(G4UI_BUILD_WIN32_SESSION) - DISCARD_PARAMETER(argc); - DISCARD_PARAMETER(argv); - session = new G4UIWin32(); - isGUI = true; + DISCARD_PARAMETER(argc); + DISCARD_PARAMETER(argv); + session = new G4UIWin32(); + isGUI = true; #endif - break; - case kTcsh: -#if !(defined(WIN32) || defined(__MINGW32__)) - DISCARD_PARAMETER(argc); - DISCARD_PARAMETER(argv); - shell = new G4UItcsh; - session = new G4UIterminal(shell); + break; + case kTcsh: +#if ! (defined(WIN32) || defined(__MINGW32__)) + DISCARD_PARAMETER(argc); + DISCARD_PARAMETER(argv); + shell = new G4UItcsh; + session = new G4UIterminal(shell); #endif - break; - case kCsh: - DISCARD_PARAMETER(argc); - DISCARD_PARAMETER(argv); - shell = new G4UIcsh; - session = new G4UIterminal(shell); - default: - break; + break; + case kCsh: + DISCARD_PARAMETER(argc); + DISCARD_PARAMETER(argv); + shell = new G4UIcsh; + session = new G4UIterminal(shell); + default: + break; } // fallback (csh) - if ( session == NULL ) { - G4Exception("G4UIExecutive::G4UIExecutive()", - "UI0002", - JustWarning, - "Specified session type is not build in your system,\n" - "or no session type is specified.\n" - "A fallback session type is used."); + if (session == nullptr) { + G4Exception("G4UIExecutive::G4UIExecutive()", "UI0002", JustWarning, + "Specified session type is not build in your system,\n" + "or no session type is specified.\n" + "A fallback session type is used."); selected = kCsh; DISCARD_PARAMETER(argc); @@ -170,66 +169,76 @@ G4UIExecutive::G4UIExecutive(G4int argc, char** argv, const G4String& type) } // -------------------------------------------------------------------------- -G4UIExecutive::~G4UIExecutive() -{ - delete session; -} +G4UIExecutive::~G4UIExecutive() { delete session; } // -------------------------------------------------------------------------- void G4UIExecutive::SelectSessionByArg(const G4String& stype) { - if ( qt_build && stype == "qt" ) selected = kQt; - else if ( xm_build && stype == "xm" ) selected = kXm; - else if ( win32_build && stype == "win32" ) selected = kWin32; - else if ( tcsh_build && stype == "tcsh" ) selected = kTcsh; - else if ( stype == "csh" ) selected = kCsh; + if (qt_build && stype == "qt") + selected = kQt; + else if (xm_build && stype == "xm") + selected = kXm; + else if (win32_build && stype == "win32") + selected = kWin32; + else if (tcsh_build && stype == "tcsh") + selected = kTcsh; + else if (stype == "csh") + selected = kCsh; } // -------------------------------------------------------------------------- void G4UIExecutive::SelectSessionByEnv() { - if ( qt_build && std::getenv("G4UI_USE_QT") ) selected = kQt; - else if ( xm_build && std::getenv("G4UI_USE_XM") ) selected = kXm; - else if ( win32_build && std::getenv("G4UI_USE_WIN32") ) selected = kWin32; - else if ( tcsh_build && std::getenv("G4UI_USE_TCSH") ) selected = kTcsh; + if (qt_build && (std::getenv("G4UI_USE_QT") != nullptr)) + selected = kQt; + else if (xm_build && (std::getenv("G4UI_USE_XM") != nullptr)) + selected = kXm; + else if (win32_build && (std::getenv("G4UI_USE_WIN32") != nullptr)) + selected = kWin32; + else if (tcsh_build && (std::getenv("G4UI_USE_TCSH") != nullptr)) + selected = kTcsh; } // -------------------------------------------------------------------------- void G4UIExecutive::SelectSessionByFile(const G4String& appname) { const char* path = std::getenv("HOME"); - if( path == NULL ) return; + if (path == nullptr) return; G4String homedir = path; #ifndef WIN32 - G4String fname= homedir + "/.g4session"; + G4String fname = homedir + "/.g4session"; #else - G4String fname= homedir + "\\.g4session"; + G4String fname = homedir + "\\.g4session"; #endif std::ifstream fsession; - enum { BUFSIZE= 1024 }; char linebuf[BUFSIZE]; + enum + { + BUFSIZE = 1024 + }; + char linebuf[BUFSIZE]; fsession.open(fname, std::ios::in); G4String default_session = ""; G4int iline = 1; sessionMap.clear(); - while( fsession.good() ) { - if( fsession.eof()) break; + while (fsession.good()) { + if (fsession.eof()) break; fsession.getline(linebuf, BUFSIZE); G4String aline = G4StrUtil::strip_copy(linebuf); - if ( aline[0] == '#' ) continue; - if ( aline == "" ) continue; - if ( iline == 1 ) + if (aline[0] == '#') continue; + if (aline.empty()) continue; + if (iline == 1) default_session = aline; else { - size_t idx = aline.find_first_of(" "); - if ( idx == G4String::npos ) break; + size_t idx = aline.find_first_of(' '); + if (idx == G4String::npos) break; G4String aname = aline.substr(0, idx); - idx = aline.find_first_not_of(" ", idx); - if (idx == G4String::npos ) break; - G4String sname = aline.substr(idx, aline.size()-idx); + idx = aline.find_first_not_of(' ', idx); + if (idx == G4String::npos) break; + G4String sname = aline.substr(idx, aline.size() - idx); sessionMap[aname] = sname; } iline++; @@ -237,43 +246,50 @@ void G4UIExecutive::SelectSessionByFile(const G4String& appname) fsession.close(); G4String stype = ""; - std::map::iterator it = sessionMap.find(appname); - if ( it != sessionMap.end() ) stype = sessionMap[appname]; - else stype = default_session; + auto it = sessionMap.find(appname); + if (it != sessionMap.end()) + stype = sessionMap[appname]; + else + stype = default_session; G4StrUtil::to_lower(stype); // select session... - if ( qt_build && stype == "qt" ) selected = kQt; - else if ( xm_build && stype == "xm" ) selected = kXm; - else if ( win32_build && stype == "win32" ) selected = kWin32; - else if ( tcsh_build && stype == "tcsh" ) selected = kTcsh; - else if ( stype == "csh" ) selected = kCsh; + if (qt_build && stype == "qt") + selected = kQt; + else if (xm_build && stype == "xm") + selected = kXm; + else if (win32_build && stype == "win32") + selected = kWin32; + else if (tcsh_build && stype == "tcsh") + selected = kTcsh; + else if (stype == "csh") + selected = kCsh; } // -------------------------------------------------------------------------- void G4UIExecutive::SelectSessionByBestGuess() { - if ( qt_build ) selected = kQt; - else if ( win32_build ) selected = kWin32; - else if ( tcsh_build ) selected = kTcsh; - else if ( xm_build ) selected = kXm; + if (qt_build) + selected = kQt; + else if (win32_build) + selected = kWin32; + else if (tcsh_build) + selected = kTcsh; + else if (xm_build) + selected = kXm; } // -------------------------------------------------------------------------- void G4UIExecutive::SetPrompt(const G4String& prompt) { - if(shell) shell-> SetPrompt(prompt); + if (shell != nullptr) shell->SetPrompt(prompt); } // -------------------------------------------------------------------------- -void G4UIExecutive::SetLsColor(TermColorIndex dirColor, - TermColorIndex cmdColor) +void G4UIExecutive::SetLsColor(TermColorIndex dirColor, TermColorIndex cmdColor) { - if(shell) shell-> SetLsColor(dirColor, cmdColor); + if (shell != nullptr) shell->SetLsColor(dirColor, cmdColor); } // -------------------------------------------------------------------------- -void G4UIExecutive::SessionStart() -{ - session-> SessionStart(); -} +void G4UIExecutive::SessionStart() { session->SessionStart(); } diff --git a/source/interfaces/basic/src/G4UIQt.cc b/source/interfaces/implementation/src/G4UIQt.cc similarity index 56% rename from source/interfaces/basic/src/G4UIQt.cc rename to source/interfaces/implementation/src/G4UIQt.cc index ac32b373099..90d8f8746b4 100644 --- a/source/interfaces/basic/src/G4UIQt.cc +++ b/source/interfaces/implementation/src/G4UIQt.cc @@ -27,65 +27,63 @@ // // L. Garnier -#include "G4Types.hh" - -#include - #include "G4UIQt.hh" -#include "G4UImanager.hh" -#include "G4UIcommand.hh" -#include "G4StateManager.hh" -#include "G4UIcommandTree.hh" -#include "G4UIcommandStatus.hh" + #include "G4MTcoutDestination.hh" #include "G4Qt.hh" +#include "G4StateManager.hh" +#include "G4Types.hh" +#include "G4UIcommand.hh" +#include "G4UIcommandStatus.hh" +#include "G4UIcommandTree.hh" +#include "G4UImanager.hh" +#include "G4SceneTreeItem.hh" +#include "G4AttCheck.hh" #include -#include +#include +#include +#include +#include #include -#include #include -#include +#include #include -#include -#include #include -#include -#include -#include +#include #include -#if QT_VERSION < 0x050600 -#include -#endif -#include -#include -#include -#include +#include +#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include #include -#include -#include #include -#include -#include -#include -#include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include #ifndef G4GMAKE -#include "moc_G4UIQt.cpp" +# include "moc_G4UIQt.cpp" #endif // Pourquoi Static et non variables de classe ? @@ -112,90 +110,90 @@ static G4bool exitPause = true; +-----------------------+ */ -G4UIQt::G4UIQt ( - G4int argc -,char** argv -) -:fMainWindow(NULL) -,fCommandLabel(NULL) -,fCommandArea(NULL) -,fCoutTBTextArea(NULL) -,fUITabWidget(NULL) -,fCoutFilter(NULL) -,fCompleter(NULL) -,fDefaultIcons(true) -,fHistoryTBTableList(NULL) -,fHelpTreeWidget(NULL) -,fHelpTBWidget(NULL) -,fHistoryTBWidget(NULL) -,fCoutDockWidget(NULL) -,fUIDockWidget(NULL) -,fSceneTreeWidget(NULL) -,fViewerPropertiesWidget(NULL) -,fPickInfosWidget(NULL) -,fHelpLine(NULL) -,fViewerTabWidget(NULL) -,fCoutText("Output") -,fStartPage(NULL) -,fHelpVSplitter(NULL) -,fParameterHelpLabel(NULL) -,fParameterHelpTable(NULL) -,fToolbarApp(NULL) -,fToolbarUser(NULL) -,fStringSeparator("__$$$@%%###__") -,fLastOpenPath("") -,fSearchIcon(NULL) -,fClearIcon(NULL) -,fSaveIcon(NULL) -,fOpenIcon(NULL) -,fMoveIcon(NULL) -,fRotateIcon(NULL) -,fPickIcon(NULL) -,fZoomInIcon(NULL) -,fZoomOutIcon(NULL) -,fWireframeIcon(NULL) -,fSolidIcon(NULL) -,fHiddenLineRemovalIcon(NULL) -,fHiddenLineAndSurfaceRemovalIcon(NULL) -,fPerspectiveIcon(NULL) -,fOrthoIcon(NULL) -,fCommandIcon(NULL) -,fDirIcon(NULL) -,fRunIcon(NULL) -,fParamIcon(NULL) -,fPickTargetIcon(NULL) +G4UIQt::G4UIQt(G4int argc, char** argv) + : fMainWindow(nullptr), + fCommandLabel(nullptr), + fCommandArea(nullptr), + fCoutTBTextArea(nullptr), + fUITabWidget(nullptr), + fCoutFilter(nullptr), + fCompleter(nullptr), + fDefaultIcons(true), + fHistoryTBTableList(nullptr), + fHelpTreeWidget(nullptr), + fHelpTBWidget(nullptr), + fHistoryTBWidget(nullptr), + fCoutDockWidget(nullptr), + fUIDockWidget(nullptr), + fSceneTreeWidget(nullptr), + fNewSceneTreeWidget(nullptr), + fNewSceneTreeItemTreeWidget(nullptr), + fViewerPropertiesWidget(nullptr), + fPickInfosWidget(nullptr), + fHelpLine(nullptr), + fViewerTabWidget(nullptr), + fCoutText("Output"), + fStartPage(nullptr), + fHelpVSplitter(nullptr), + fParameterHelpLabel(nullptr), + fParameterHelpTable(nullptr), + fToolbarApp(nullptr), + fToolbarUser(nullptr), + fStringSeparator("__$$$@%%###__"), + fLastOpenPath(""), + fSearchIcon(nullptr), + fClearIcon(nullptr), + fSaveIcon(nullptr), + fOpenIcon(nullptr), + fMoveIcon(nullptr), + fRotateIcon(nullptr), + fPickIcon(nullptr), + fZoomInIcon(nullptr), + fZoomOutIcon(nullptr), + fWireframeIcon(nullptr), + fSolidIcon(nullptr), + fHiddenLineRemovalIcon(nullptr), + fHiddenLineAndSurfaceRemovalIcon(nullptr), + fPerspectiveIcon(nullptr), + fOrthoIcon(nullptr), + fCommandIcon(nullptr), + fDirIcon(nullptr), + fRunIcon(nullptr), + fParamIcon(nullptr), + fPickTargetIcon(nullptr) #ifdef G4MULTITHREADED -,fThreadsFilterComboBox(NULL) + , + fThreadsFilterComboBox(nullptr) #endif -,fDefaultViewerFirstPageHTMLText("") -,fViewerPropertiesDialog(NULL) -,fPickInfosDialog(NULL) -,fLastCompleteCommand("") -,fMoveSelected(false) -,fRotateSelected(true) -,fPickSelected(false) -,fZoomInSelected(false) -,fZoomOutSelected(false) + , + fDefaultViewerFirstPageHTMLText(""), + fViewerPropertiesDialog(nullptr), + fPickInfosDialog(nullptr), + fLastCompleteCommand(""), + fMoveSelected(false), + fRotateSelected(true), + fPickSelected(false), + fZoomInSelected(false), + fZoomOutSelected(false) { - - G4Qt* interactorManager = G4Qt::getInstance (argc,argv,(char*)"Qt"); - if (!(QApplication*)interactorManager->GetMainInteractor()) { + G4Qt* interactorManager = G4Qt::getInstance(argc, argv, (char*)"Qt"); + if ((QApplication*)interactorManager->GetMainInteractor() == nullptr) { G4UImanager* UImanager = G4UImanager::GetUIpointer(); G4int verbose = UImanager->GetVerboseLevel(); if (verbose >= 2) { - G4cout << "G4UIQt : Unable to init Qt. Aborted" << G4endl; + G4cout << "G4UIQt : Unable to init Qt. Aborted" << G4endl; } } G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI!=NULL) UI->SetSession(this); - if(UI!=NULL) UI->SetG4UIWindow(this); + if (UI != nullptr) UI->SetSession(this); + if (UI != nullptr) UI->SetG4UIWindow(this); // Check if already define in external app QMainWindow G4bool found = false; - Q_FOREACH (QWidget *widget, QApplication::allWidgets()) { - if ((found== false) && (widget->inherits("QMainWindow"))) { + Q_FOREACH (QWidget* widget, QApplication::allWidgets()) { + if ((!found) && (widget->inherits("QMainWindow"))) { found = true; } } @@ -205,51 +203,53 @@ G4UIQt::G4UIQt ( G4int verbose = UImanager->GetVerboseLevel(); if (verbose >= 2) { - G4cout << "G4UIQt : Found an external App with a QMainWindow already defined. Aborted" << G4endl; + G4cout << "G4UIQt : Found an external App with a QMainWindow already defined. Aborted" + << G4endl; } - return ; + return; } CreateIcons(); - // Set default output styles - for (const auto& destination: {"cout","cerr","warnings","errors"}) { - G4UIQtStyle defaultStyle; - defaultStyle.fixed = true; - defaultStyle.highlight = true; - fOutputStyles[destination] = defaultStyle; - } - fMainWindow = new QMainWindow(); fMainWindow->setAttribute(Qt::WA_DeleteOnClose); - fMainWindow->setCorner( Qt::TopLeftCorner, Qt::LeftDockWidgetArea ); - fMainWindow->setCorner( Qt::TopRightCorner, Qt::RightDockWidgetArea ); - fMainWindow->setCorner( Qt::BottomLeftCorner, Qt::LeftDockWidgetArea ); - fMainWindow->setCorner( Qt::BottomRightCorner, Qt::RightDockWidgetArea ); + fMainWindow->setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); + fMainWindow->setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea); + fMainWindow->setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); + fMainWindow->setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); CreateViewerWidget(); fMainWindow->addDockWidget(Qt::LeftDockWidgetArea, CreateUITabWidget()); fMainWindow->addDockWidget(Qt::BottomDockWidgetArea, CreateCoutTBWidget()); + // Create the new scene tree stuff + fNewSceneTreeWidget = new QWidget; + fNewSceneTreeWidget->setStyleSheet ("padding: 0px "); + fNewSceneTreeWidget->setLayout(new QVBoxLayout); + fNewSceneTreeWidget->layout()->setContentsMargins(5,5,5,5); + fNewSceneTreeWidget->setWindowTitle("some name"/*QString(GetName().data())*/); + // Add it to the "old" fSceneTreeWidget + fSceneTreeWidget->layout()->addWidget(fNewSceneTreeWidget); + CreateNewSceneTreeWidget(); // add defaults icons SetDefaultIconsToolbar(); - if(UI!=NULL) UI->SetCoutDestination(this); // TO KEEP + if (UI != nullptr) UI->SetCoutDestination(this); // TO KEEP #ifdef G4MULTITHREADED // explicitly request that cout/cerr messages from threads are ALSO propagated to the master. masterG4coutDestination = this; #endif - fMainWindow->setWindowTitle(QFileInfo( QCoreApplication::applicationFilePath() ).fileName()); - fMainWindow->move(QPoint(50,50)); + fMainWindow->setWindowTitle(QFileInfo(QCoreApplication::applicationFilePath()).fileName()); + fMainWindow->move(QPoint(50, 50)); // force the size at be correct at the beggining // because the widget is not realized yet, the size of the main window is not up to date. But // we need it in order to add some viewer inside - fMainWindow->resize(fUIDockWidget->width()+fCoutDockWidget->width()+20, - fUIDockWidget->height()+fCoutDockWidget->height()+20); + fMainWindow->resize(fUIDockWidget->width() + fCoutDockWidget->width() + 20, + fUIDockWidget->height() + fCoutDockWidget->height() + 20); // set last focus on command line fCommandArea->setFocus(Qt::TabFocusReason); @@ -259,88 +259,60 @@ G4UIQt::G4UIQt ( qRegisterMetaType("QTextCursor"); // add some tips - AddTabWidget(fStartPage,"Useful tips"); + AddTabWidget(fStartPage, "Useful tips"); // Set not visible until session start - #if QT_VERSION < 0x040200 - fMainWindow->hide(); - #else fMainWindow->setVisible(false); - #endif } - - -G4UIQt::~G4UIQt( -) +G4UIQt::~G4UIQt() { G4UImanager* UI = G4UImanager::GetUIpointer(); // TO KEEP - if(UI!=NULL) { // TO KEEP - UI->SetSession(NULL); // TO KEEP - UI->SetG4UIWindow(NULL); - UI->SetCoutDestination(0); // TO KEEP + if (UI != nullptr) { // TO KEEP + UI->SetSession(nullptr); // TO KEEP + UI->SetG4UIWindow(nullptr); + UI->SetCoutDestination(nullptr); // TO KEEP #ifdef G4MULTITHREADED - masterG4coutDestination = 0; // set to cout when UI is deleted + masterG4coutDestination = nullptr; // set to cout when UI is deleted #endif } } - void G4UIQt::DefaultIcons(G4bool aVal) { fDefaultIcons = aVal; -#if QT_VERSION < 0x040200 - if (!fMainWindow->isHidden()) { -#else - if (!fMainWindow->isVisible()) { -#endif + if (! fMainWindow->isVisible()) { return; } - if (fToolbarApp) { + if (fToolbarApp != nullptr) { if (aVal) { -#if QT_VERSION < 0x040200 - fToolbarApp->show(); -#else fToolbarApp->setVisible(true); -#endif - } else { + } + else { // Set not visible until session start -#if QT_VERSION < 0x040200 - fToolbarApp->hide(); -#else - fToolbarApp->setVisible(false); -#endif + fToolbarApp->setVisible(false); } } } - -void G4UIQt::SetDefaultIconsToolbar( -) { - +void G4UIQt::SetDefaultIconsToolbar() +{ if (fDefaultIcons) { - if (fToolbarApp == NULL) { + if (fToolbarApp == nullptr) { fToolbarApp = new QToolBar(); - fToolbarApp->setIconSize (QSize(20,20)); + fToolbarApp->setIconSize(QSize(20, 20)); fMainWindow->addToolBar(Qt::TopToolBarArea, fToolbarApp); } // Open/Save Icons - AddIcon("Open macro file","open", "/control/execute"); + AddIcon("Open macro file", "open", "/control/execute"); AddIcon("Save viewer state", "save", "/vis/viewer/save"); // View parameters -#if QT_VERSION < 0x050600 - QSignalMapper *signalMapperViewerProperties = new QSignalMapper(this); - QAction *actionViewerProperties = fToolbarApp->addAction(QIcon(*fParamIcon),"Viewer properties", signalMapperViewerProperties, SLOT(map())); - connect(signalMapperViewerProperties, SIGNAL(mapped(int)),this, SLOT(ViewerPropertiesIconCallback(int))); - G4int intVP = 0; - signalMapperViewerProperties->setMapping(actionViewerProperties, intVP); -#else - fToolbarApp->addAction(QIcon(*fParamIcon),"Viewer properties", this, [this](){ this->ViewerPropertiesIconCallback(0); }); -#endif + fToolbarApp->addAction(QIcon(*fParamIcon), "Viewer properties", this, + [this]() { this->ViewerPropertiesIconCallback(0); }); // Cursors style icons AddIcon("Move", "move", ""); @@ -355,17 +327,16 @@ void G4UIQt::SetDefaultIconsToolbar( AddIcon("Surfaces", "solid", ""); AddIcon("Wireframe", "wireframe", ""); - // Perspective/Ortho icons - AddIcon("Perspective", "perspective",""); - AddIcon("Orthographic", "ortho",""); - AddIcon("Run beam on", "runBeamOn","/run/beamOn 1"); - AddIcon("Exit Application", "exit","exit"); + // Perspective/Ortho icons + AddIcon("Perspective", "perspective", ""); + AddIcon("Orthographic", "ortho", ""); + AddIcon("Run beam on", "runBeamOn", "/run/beamOn 1"); + AddIcon("Exit Application", "exit", "exit"); } } - -void G4UIQt::CreateIcons( -) +// clang-format off +void G4UIQt::CreateIcons() { const char * const save[]={ "32 32 24 1", @@ -1477,16 +1448,260 @@ void G4UIQt::CreateIcons( }; fExitIcon= new QPixmap(exitIcon); } +// clang-format on + +namespace { + G4SceneTreeItem* ConvertToG4SceneTreeItem(QTreeWidgetItem* item) + { + auto qVariant = item->data(0, Qt::UserRole); + std::istringstream iss(qVariant.toString().toStdString()); + void* itemAddress; iss >> itemAddress; + return static_cast(itemAddress); + } + + QColor ConvertG4ColourToQColor(const G4Colour& g4Colour) + { + return QColor((int)(g4Colour.GetRed()*255), + (int)(g4Colour.GetGreen()*255), + (int)(g4Colour.GetBlue()*255), + (int)(g4Colour.GetAlpha()*255)); + } + + G4Colour ConvertQColorToG4Colour(const QColor& qColor) + { + return G4Color(qColor.red()/255., + qColor.green()/255., + qColor.blue()/255., + qColor.alpha()/255.); + } +} + +void G4UIQt::CreateNewSceneTreeWidget() +{ + auto vLayout = fNewSceneTreeWidget->layout(); + // reduce margins + vLayout->setContentsMargins(0,0,0,0); + + fNewSceneTreeItemTreeWidget = new QTreeWidget; + fNewSceneTreeItemTreeWidget->setSelectionMode(QAbstractItemView::SingleSelection); + vLayout->addWidget(fNewSceneTreeItemTreeWidget); + + // A click on the item is handled here. + // A click on the check box makes the volume visible/invisible + connect(fNewSceneTreeItemTreeWidget, &QTreeWidget::itemClicked, + [&](QTreeWidgetItem* item){SceneTreeItemClicked(item);}); + // A double click on either the colour icon or the name pops up a colour dialogue + connect(fNewSceneTreeItemTreeWidget, &QTreeWidget::itemDoubleClicked, + [&](QTreeWidgetItem* item){SceneTreeItemDoubleClicked(item);}); + + // A click on the expansion triangle is handled here. + connect(fNewSceneTreeItemTreeWidget, &QTreeWidget::itemExpanded, + [&](QTreeWidgetItem* item){SceneTreeItemExpanded(item);}); + connect(fNewSceneTreeItemTreeWidget, &QTreeWidget::itemCollapsed, + [&](QTreeWidgetItem* item){SceneTreeItemCollapsed(item);}); +} + +void G4UIQt::UpdateSceneTree(const G4SceneTreeItem& root) +{ + // G4debug << "\nG4UIQt::UpdateSceneTree: scene tree summary\n"; + // root.DumpTree(G4debug); // Verbosity = 0 (one line per item) + // G4debug << "\nG4UIQt::UpdateSceneTree: scene tree dump\n"; + // root.DumpTree(G4debug,1); // Verbosity = 1 (higher levels available) + + // Clear the existing GUI-side tree + fNewSceneTreeItemTreeWidget->clear(); + // (I think this deletes everything - the top level items and their children.) + + // Build a new GUI-side tree + fNewSceneTreeItemTreeWidget->setHeaderLabel (root.GetDescription().c_str()); + for (const auto& model : root.GetChildren()) { + + auto item = new QTreeWidgetItem(fNewSceneTreeItemTreeWidget); + + // Add this GUI-side representation of the model as a child of the top widget + fNewSceneTreeItemTreeWidget->insertTopLevelItem(0,item); + + // Add text that appears in the scene tree + item->setText(0, model.GetModelType().c_str()); + + // Load with info from model + // There may be a way to add data as a QVariant, or a list of QVariants, + // but let's try adding a G4SceneTreeItem pointer as a hex string. (There + // does not seem to be a way of adding a pointer directly.) + std::ostringstream oss; oss << std::hex << &model; + auto data = QVariant(oss.str().c_str()); + item->setData(0, Qt::UserRole, data); + + // Load a tooltip + item->setToolTip(0, model.GetModelDescription().c_str()); + + // Set the check state + item->setCheckState + (0, model.GetVisAttributes().IsVisible()? Qt::Checked: Qt::Unchecked); + + // Set the expand state + item->setExpanded(model.IsExpanded()); + + if (model.GetType() == G4SceneTreeItem::pvmodel) { + BuildPVQTree(model,item); + } + } +} + +// Build Physical Volume tree of touchables +void G4UIQt::BuildPVQTree(const G4SceneTreeItem& g4stItem, QTreeWidgetItem* qtwItem) +{ + const auto& g4stChildren = g4stItem.GetChildren(); + for (const auto& g4stChild: g4stChildren) { + QStringList qStringList; + qStringList.append(g4stChild.GetDescription().c_str()); + auto newQTWItem = new QTreeWidgetItem(qStringList); + + // Add a GUI-side representation of the touchable as a child + qtwItem->addChild(newQTWItem); + + // Load with info from g4stChild + // There may be a way to add data as a QVariant, or a list of QVariants, + // but let's try adding a G4SceneTreeItem pointer as a hex string. (There + // does not seem to be a way of adding a pointer directly.) + std::ostringstream oss; oss << std::hex << &g4stChild; + auto data = QVariant(oss.str().c_str()); + newQTWItem->setData(0, Qt::UserRole, data); + + // Load a tooltip + if (g4stChild.GetType() == G4SceneTreeItem::ghost) { + auto& nameCopyNo = g4stChild.GetDescription(); + auto name = nameCopyNo.substr(0,nameCopyNo.find(':')); + oss.str(""); oss << nameCopyNo << + ": Click to make visible and get more information." + "\n This may not work if the volume is in the \"base path\". (Hover on" + "\n the model to see base path.) If this is the case," + "\n \"/vis/scene/add/volume " << name << "\" to bring into the displayed tree.)"; + newQTWItem->setToolTip(0, oss.str().c_str()); + } else { // A fully defined touchable + oss.str(""); oss << G4AttCheck(g4stChild.GetAttValues(), g4stChild.GetAttDefs()); + newQTWItem->setToolTip(0, oss.str().c_str()); + } + + // Set the check state + newQTWItem->setCheckState + (0, g4stChild.GetVisAttributes().IsVisible()? Qt::Checked: Qt::Unchecked); + + // Set the expand state + newQTWItem->setExpanded(g4stChild.IsExpanded()); + + // Set colour icon + QPixmap pixmap = QPixmap(QSize(16, 16)); + pixmap.fill(ConvertG4ColourToQColor(g4stChild.GetVisAttributes().GetColour())); + QPainter painter(&pixmap); + painter.setPen(Qt::black); + painter.drawRect(0,0,15,15); // Draw contour + newQTWItem->setIcon(0,pixmap); + + // Continue recursively + BuildPVQTree(g4stChild,newQTWItem); + } +} + +void G4UIQt::SceneTreeItemClicked(QTreeWidgetItem* item) +{ + if (item == nullptr) return; + + auto sceneTreeItem = ConvertToG4SceneTreeItem(item); + if (sceneTreeItem == nullptr) return; + + auto uiMan = G4UImanager::GetUIpointer(); + + // Respond according to type + G4String argument = "false"; + auto newCheckState = item->checkState(0); + auto oldCheckState + = sceneTreeItem->GetVisAttributes().IsVisible()? Qt::Checked: Qt::Unchecked; + switch (sceneTreeItem->GetType()) { + case G4SceneTreeItem::unidentified: + break; // Do nothing + case G4SceneTreeItem::root: + break; // Do nothing + case G4SceneTreeItem::model: + [[fallthrough]]; + case G4SceneTreeItem::pvmodel: + // Construct and apply activate commands + // Clicked - but has checkbox actually been clicked? + if (newCheckState != oldCheckState) { + if (newCheckState == Qt::Checked) argument = "true"; + uiMan->ApplyCommand("/vis/scene/activateModel " + sceneTreeItem->GetModelType() + ' ' + argument); + } + break; + case G4SceneTreeItem::ghost: + [[fallthrough]]; + case G4SceneTreeItem::touchable: + // Construct and apply touchable commands + // Clicked - but has checkbox actually been clicked? + if (newCheckState != oldCheckState) { + if (newCheckState == Qt::Checked) argument = "true"; + uiMan->ApplyCommand("/vis/set/touchable" + sceneTreeItem->GetPVPath()); + uiMan->ApplyCommand("/vis/touchable/set/visibility " + argument); + } + break; + } +} + +void G4UIQt::SceneTreeItemDoubleClicked(QTreeWidgetItem* item) +{ + if (item == nullptr) return; + + auto sceneTreeItem = ConvertToG4SceneTreeItem(item); + if (sceneTreeItem == nullptr) return; + + if (sceneTreeItem->GetType() != G4SceneTreeItem::touchable) return; + + auto oldQColor = ConvertG4ColourToQColor(sceneTreeItem->GetVisAttributes().GetColour()); + auto newQColor = QColorDialog::getColor(oldQColor, fNewSceneTreeItemTreeWidget, "", QColorDialog::ShowAlphaChannel); + if (!newQColor.isValid()) return; + if (newQColor == oldQColor) return; + + auto newColour = ConvertQColorToG4Colour(newQColor); + std::ostringstream oss; oss << std::setprecision(2) + << newColour.GetRed() << ' ' << newColour.GetGreen() + << ' ' << newColour.GetBlue() << ' ' << newColour.GetAlpha(); + auto uiMan = G4UImanager::GetUIpointer(); + uiMan->ApplyCommand("/vis/set/touchable" + sceneTreeItem->GetPVPath()); + uiMan->ApplyCommand("/vis/touchable/set/colour " + oss.str()); +} + +void G4UIQt::SceneTreeItemExpanded(QTreeWidgetItem* item) +{ + if (item == nullptr) return; + + auto sceneTreeItem = ConvertToG4SceneTreeItem(item); + if (sceneTreeItem == nullptr) return; + + if (sceneTreeItem->GetType() == G4SceneTreeItem::ghost || + sceneTreeItem->GetType() == G4SceneTreeItem::touchable) { + sceneTreeItem->SetExpanded(true); + } +} + +void G4UIQt::SceneTreeItemCollapsed(QTreeWidgetItem* item) +{ + if (item == nullptr) return; + + auto sceneTreeItem = ConvertToG4SceneTreeItem(item); + if (sceneTreeItem == nullptr) return; + if (sceneTreeItem->GetType() == G4SceneTreeItem::ghost || + sceneTreeItem->GetType() == G4SceneTreeItem::touchable) { + sceneTreeItem->SetExpanded(false); + } +} /** Create the History ToolBox Widget */ -QWidget* G4UIQt::CreateHistoryTBWidget( -) +QWidget* G4UIQt::CreateHistoryTBWidget() { fHistoryTBWidget = new QWidget(); - QVBoxLayout *layoutHistoryTB = new QVBoxLayout(); + auto layoutHistoryTB = new QVBoxLayout(); fHistoryTBTableList = new QListWidget(); fHistoryTBTableList->setSelectionMode(QAbstractItemView::SingleSelection); connect(fHistoryTBTableList, SIGNAL(itemSelectionChanged()), SLOT(CommandHistoryCallback())); @@ -1497,22 +1712,20 @@ QWidget* G4UIQt::CreateHistoryTBWidget( return fHistoryTBWidget; } - /** Create the Help ToolBox Widget */ -QWidget* G4UIQt::CreateHelpTBWidget( -) +QWidget* G4UIQt::CreateHelpTBWidget() { fHelpTBWidget = new QWidget(); - QWidget *helpWidget = new QWidget(); - QHBoxLayout *helpLayout = new QHBoxLayout(); - QVBoxLayout *vLayout = new QVBoxLayout(); + auto helpWidget = new QWidget(); + auto helpLayout = new QHBoxLayout(); + auto vLayout = new QVBoxLayout(); fHelpVSplitter = new QSplitter(Qt::Vertical); fHelpLine = new QLineEdit(); helpLayout->addWidget(new QLabel("Search :")); helpLayout->addWidget(fHelpLine); - connect( fHelpLine, SIGNAL( editingFinished () ), this, SLOT( LookForHelpStringCallback() ) ); + connect(fHelpLine, SIGNAL(editingFinished()), this, SLOT(LookForHelpStringCallback())); // Create Help tree FillHelpTree(); @@ -1523,27 +1736,23 @@ QWidget* G4UIQt::CreateHelpTBWidget( // Set layouts - if (fHelpTreeWidget) { + if (fHelpTreeWidget != nullptr) { fHelpVSplitter->addWidget(fHelpTreeWidget); + fHelpVSplitter->setStretchFactor(0,4); } fHelpVSplitter->addWidget(fParameterHelpLabel); fHelpVSplitter->addWidget(fParameterHelpTable); fParameterHelpLabel->setVisible(false); fParameterHelpTable->setVisible(false); - QSizePolicy policy = QSizePolicy(QSizePolicy::Maximum,QSizePolicy::Maximum); - policy.setVerticalStretch(4); - if (fHelpTreeWidget) { - fHelpTreeWidget->setSizePolicy(policy); - } - policy = QSizePolicy(QSizePolicy::Minimum,QSizePolicy::Preferred); + QSizePolicy policy = QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); policy.setVerticalStretch(1); fParameterHelpLabel->setSizePolicy(policy); fParameterHelpTable->setSizePolicy(policy); vLayout->addWidget(helpWidget); - vLayout->addWidget(fHelpVSplitter,1); - vLayout->setContentsMargins(5,5,5,5); + vLayout->addWidget(fHelpVSplitter, 1); + vLayout->setContentsMargins(5, 5, 5, 5); helpWidget->setLayout(helpLayout); fHelpTBWidget->setLayout(vLayout); @@ -1551,54 +1760,47 @@ QWidget* G4UIQt::CreateHelpTBWidget( return fHelpTBWidget; } - /** Create the Cout ToolBox Widget */ -G4UIDockWidget* G4UIQt::CreateCoutTBWidget( -) +G4UIDockWidget* G4UIQt::CreateCoutTBWidget() { - QWidget* coutTBWidget = new QWidget(); + auto coutTBWidget = new QWidget(); - QVBoxLayout *layoutCoutTB = new QVBoxLayout(); + auto layoutCoutTB = new QVBoxLayout(); fCoutTBTextArea = new QTextEdit(); fCoutFilter = new QLineEdit(); fCoutFilter->setToolTip("Filter output by..."); -#if QT_VERSION > 0x050100 - fCoutFilter->addAction(*fSearchIcon,QLineEdit::TrailingPosition); - fCoutFilter->setStyleSheet ("border-radius:7px;"); -#else - QPushButton *coutTBFilterButton = new QPushButton(); - coutTBFilterButton->setIcon(QIcon(*fSearchIcon)); - coutTBFilterButton->setStyleSheet ("padding-left: 0px; border:0px;"); - fCoutFilter->setStyleSheet ("padding-right: 0px;"); -#endif + fCoutFilter->addAction(*fSearchIcon, QLineEdit::TrailingPosition); + fCoutFilter->setStyleSheet("border-radius:7px;"); - QPushButton *coutTBClearButton = new QPushButton(); + auto coutTBClearButton = new QPushButton(); coutTBClearButton->setIcon(*fClearIcon); coutTBClearButton->setToolTip("Clear console output"); - coutTBClearButton->setStyleSheet ("border-radius:7px;"); + coutTBClearButton->setStyleSheet("border-radius:7px;"); connect(coutTBClearButton, SIGNAL(clicked()), SLOT(ClearButtonCallback())); - connect(fCoutFilter, SIGNAL(textEdited ( const QString &)), SLOT(CoutFilterCallback( const QString &))); + connect( + fCoutFilter, SIGNAL(textEdited(const QString&)), SLOT(CoutFilterCallback(const QString&))); - QPushButton *coutTBSaveOutputButton = new QPushButton(); + auto coutTBSaveOutputButton = new QPushButton(); coutTBSaveOutputButton->setIcon(*fSaveIcon); coutTBSaveOutputButton->setToolTip("Save console output"); - coutTBSaveOutputButton->setStyleSheet ("border-radius:7px;"); + coutTBSaveOutputButton->setStyleSheet("border-radius:7px;"); connect(coutTBSaveOutputButton, SIGNAL(clicked()), SLOT(SaveOutputCallback())); fCoutTBTextArea->setReadOnly(true); - QWidget* coutButtonWidget = new QWidget(); - QHBoxLayout* layoutCoutTBButtons = new QHBoxLayout(); + auto coutButtonWidget = new QWidget(); + auto layoutCoutTBButtons = new QHBoxLayout(); #ifdef G4MULTITHREADED // add all candidates to widget fThreadsFilterComboBox = new QComboBox(); fThreadsFilterComboBox->setInsertPolicy(QComboBox::InsertAlphabetically); - connect(fThreadsFilterComboBox, SIGNAL(activated(int)), this, SLOT(ThreadComboBoxCallback(int))); + connect( + fThreadsFilterComboBox, SIGNAL(activated(int)), this, SLOT(ThreadComboBoxCallback(int))); UpdateCoutThreadFilter(); @@ -1608,26 +1810,23 @@ G4UIDockWidget* G4UIQt::CreateCoutTBWidget( #endif layoutCoutTBButtons->addWidget(fCoutFilter); -#if QT_VERSION <= 0x050100 - layoutCoutTBButtons->addWidget(coutTBFilterButton); -#endif layoutCoutTBButtons->addWidget(coutTBClearButton); layoutCoutTBButtons->addWidget(coutTBSaveOutputButton); coutButtonWidget->setLayout(layoutCoutTBButtons); // reduce margins - layoutCoutTBButtons->setContentsMargins(3,3,3,0); + layoutCoutTBButtons->setContentsMargins(3, 3, 3, 0); layoutCoutTB->addWidget(coutButtonWidget); layoutCoutTB->addWidget(fCoutTBTextArea); coutTBWidget->setLayout(layoutCoutTB); - fCoutTBTextArea->setMinimumSize(100,100); + fCoutTBTextArea->setMinimumSize(100, 100); // Command line : - QWidget* commandLineWidget = new QWidget(); - QHBoxLayout *layoutCommandLine = new QHBoxLayout(); + auto commandLineWidget = new QWidget(); + auto layoutCommandLine = new QHBoxLayout(); // fill them @@ -1638,60 +1837,52 @@ G4UIDockWidget* G4UIQt::CreateCoutTBWidget( fCommandArea->activateWindow(); - fCommandArea->setFocusPolicy ( Qt::StrongFocus ); + fCommandArea->setFocusPolicy(Qt::StrongFocus); fCommandArea->setFocus(Qt::TabFocusReason); fCommandArea->setToolTip("Apply command"); - layoutCommandLine->addWidget(fCommandLabel); layoutCommandLine->addWidget(fCommandArea); // Connect signal connect(fCommandArea, SIGNAL(returnPressed()), SLOT(CommandEnteredCallback())); - connect(fCommandArea, SIGNAL(textEdited(const QString &)), SLOT(CommandEditedCallback(const QString &))); - + connect( + fCommandArea, SIGNAL(textEdited(const QString&)), SLOT(CommandEditedCallback(const QString&))); commandLineWidget->setLayout(layoutCommandLine); - commandLineWidget->setMinimumSize(50,50); + commandLineWidget->setMinimumSize(50, 50); layoutCoutTB->addWidget(commandLineWidget); - fCoutDockWidget = new G4UIDockWidget ("Output"); + fCoutDockWidget = new G4UIDockWidget("Output"); fCoutDockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea); fCoutDockWidget->setWidget(coutTBWidget); return fCoutDockWidget; } - /** Create the VisParameters ToolBox Widget */ -QWidget* G4UIQt::CreateVisParametersTBWidget( -) -{ - return NULL; -} - +QWidget* G4UIQt::CreateVisParametersTBWidget() { return nullptr; } /** Create the VisParameters ToolBox Widget */ -G4UIDockWidget* G4UIQt::CreateUITabWidget( -) +G4UIDockWidget* G4UIQt::CreateUITabWidget() { fUITabWidget = new QTabWidget(); // the left dock - fUITabWidget->addTab(CreateSceneTreeWidget(),"Scene tree"); - fUITabWidget->addTab(CreateHelpTBWidget(),"Help"); - fUITabWidget->addTab(CreateHistoryTBWidget(),"History"); + fUITabWidget->addTab(CreateSceneTreeWidget(), "Scene tree"); + fUITabWidget->addTab(CreateHelpTBWidget(), "Help"); + fUITabWidget->addTab(CreateHistoryTBWidget(), "History"); fUITabWidget->setCurrentWidget(fHelpTBWidget); - fUITabWidget->setTabToolTip (0,"Scene component tree. Only available in Stored mode"); - fUITabWidget->setTabToolTip (1,"Help widget"); - fUITabWidget->setTabToolTip (2,"All commands history"); + fUITabWidget->setTabToolTip(0, "Tree of scene items"); + fUITabWidget->setTabToolTip(1, "Help widget"); + fUITabWidget->setTabToolTip(2, "All commands history"); connect(fUITabWidget, SIGNAL(currentChanged(int)), SLOT(ToolBoxActivated(int))); - fUIDockWidget = new G4UIDockWidget ("Scene tree, Help, History"); + fUIDockWidget = new G4UIDockWidget(""); fUIDockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); fUIDockWidget->setWidget(fUITabWidget); @@ -1699,27 +1890,22 @@ G4UIDockWidget* G4UIQt::CreateUITabWidget( return fUIDockWidget; } - -QWidget* G4UIQt::CreateSceneTreeWidget(){ - +QWidget* G4UIQt::CreateSceneTreeWidget() +{ fSceneTreeWidget = new QWidget(); - QVBoxLayout* layout = new QVBoxLayout(); + auto layout = new QVBoxLayout(); fSceneTreeWidget->setLayout(layout); -#if QT_VERSION < 0x040200 - fSceneTreeWidget->hide(); -#else fSceneTreeWidget->setVisible(false); -#endif return fSceneTreeWidget; } - -void G4UIQt::CreateViewerWidget(){ - +void G4UIQt::CreateViewerWidget() +{ // Set layouts + // clang-format off SetStartPage(std::string("
Geant4: "+ QApplication::applicationName ().toStdString()+ @@ -1743,52 +1929,37 @@ void G4UIQt::CreateViewerWidget(){ "
  • Get a look at Geant4 User support pages: http://cern.ch/geant4/support
  • "+ "
    " ); - + // clang-format on // fill right splitter - if (fViewerTabWidget == NULL) { + if (fViewerTabWidget == nullptr) { fViewerTabWidget = new G4QTabWidget(); fMainWindow->setCentralWidget(fViewerTabWidget); -#if QT_VERSION < 0x040500 -#else - fViewerTabWidget->setTabsClosable (true); -#endif + fViewerTabWidget->setTabsClosable(true); -#if QT_VERSION < 0x040200 -#else - fViewerTabWidget->setUsesScrollButtons (true); -#endif + fViewerTabWidget->setUsesScrollButtons(true); -#if QT_VERSION < 0x040500 -#else - connect(fViewerTabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(TabCloseCallback(int))); -#endif + connect(fViewerTabWidget, SIGNAL(tabCloseRequested(int)),this, SLOT(TabCloseCallback(int))); connect(fViewerTabWidget, SIGNAL(currentChanged(int)), SLOT(UpdateTabWidget(int))); } -// set the QGLWidget size policy - QSizePolicy policy = QSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred); + // set the QGLWidget size policy + QSizePolicy policy = QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); policy.setVerticalStretch(4); fViewerTabWidget->setSizePolicy(policy); - fViewerTabWidget->setMinimumSize(40,40); + fViewerTabWidget->setMinimumSize(40, 40); } - /** Get the ViewerComponents ToolBox Widget */ -QWidget* G4UIQt::GetSceneTreeWidget( -) -{ - return fSceneTreeWidget; -} +QWidget* G4UIQt::GetSceneTreeWidget() { return fSceneTreeWidget; } /** Get the Viewer properties Widget */ -QWidget* G4UIQt::GetViewerPropertiesWidget( -) +QWidget* G4UIQt::GetViewerPropertiesWidget() { - if (!fViewerPropertiesDialog) { + if (fViewerPropertiesDialog == nullptr) { CreateViewerPropertiesDialog(); } return fViewerPropertiesWidget; @@ -1796,142 +1967,101 @@ QWidget* G4UIQt::GetViewerPropertiesWidget( /** Get the Pick Widget */ -QWidget* G4UIQt::GetPickInfosWidget( -) +QWidget* G4UIQt::GetPickInfosWidget() { - if (!fPickInfosDialog) { + if (fPickInfosDialog == nullptr) { CreatePickInfosDialog(); } return fPickInfosWidget; } - /** Add a new tab in the viewer */ -G4bool G4UIQt::AddViewerTab( - QWidget* aWidget - ,std::string title - ) +G4bool G4UIQt::AddViewerTab(QWidget* aWidget, std::string title) { - if (fViewerTabWidget == NULL) { + if (fViewerTabWidget == nullptr) { return false; } - fViewerTabWidget->addTab(aWidget,title.c_str()); + fViewerTabWidget->addTab(aWidget, title.c_str()); return true; } - /** Add a new tab in the viewer */ -G4bool G4UIQt::AddViewerTabFromFile( - std::string fileName - ,std::string title - ) +G4bool G4UIQt::AddViewerTabFromFile(std::string fileName, std::string title) { - if (fViewerTabWidget == NULL) { + if (fViewerTabWidget == nullptr) { return false; } G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI==NULL) return 0; + if (UI == nullptr) return false; std::ifstream file(UI->FindMacroPath(fileName.c_str()).data()); if (file) { + std::string content((std::istreambuf_iterator(file)), (std::istreambuf_iterator())); - std::string content( (std::istreambuf_iterator(file) ), - (std::istreambuf_iterator() ) ); - - QTextEdit* text = new QTextEdit(); - text->setAcceptRichText (true); - text->setContentsMargins(5,5,5,5); - text->setText(QString("
    ")+content.c_str()+"
    "); + auto text = new QTextEdit(); + text->setAcceptRichText(true); + text->setContentsMargins(5, 5, 5, 5); + text->setText(QString("
    ") + content.c_str() + "
    "); text->setReadOnly(true); - fViewerTabWidget->addTab(text,title.c_str()); - } else { + fViewerTabWidget->addTab(text, title.c_str()); + } + else { return false; } return true; } - /** Add a new tab widget. Create the tab if it was not done */ -G4bool G4UIQt::AddTabWidget( - QWidget* aWidget -,QString name -) +G4bool G4UIQt::AddTabWidget(QWidget* aWidget, QString name) { - // Special case for Qt version between 5.0 and 5.1 on Mac OSX - // Due to a bug in this Qt version, we can't put a OpenGL Widget inside the QTabWidget. - // A work around is to put it outside. Returning false will fore the wiewer to put the QGLWidget - // inside a new QWindow. - -#ifdef Q_OS_MAC - #if QT_VERSION < 0x050100 - #if QT_VERSION >= 0x050000 - QString message = QString( - "This Qt version [")+qVersion ()+"] has some issues with the OpenGL viewer.\n"+ - "To prevent problems, you are not allowed to open a Stored nor Immediate viewer.\n" + - "\n" + - "Please upgrade to Qt version >= 5.1\n"; - - QMessageBox::warning(fMainWindow, tr("Warning"), - tr(message.toStdString().c_str()), - QMessageBox::Ok); - return false; - #endif - #endif -#endif - - if (fViewerTabWidget == NULL) { + if (fViewerTabWidget == nullptr) { CreateViewerWidget(); } - if (!aWidget) { + if (aWidget == nullptr) { return false; } -// Has to be added before we put it into the fViewerTabWidget widget - aWidget->setParent(fViewerTabWidget); // Will create in some cases widget outside + // Has to be added before we put it into the fViewerTabWidget widget + aWidget->setParent(fViewerTabWidget); // Will create in some cases widget outside // of UI for a really short moment - fViewerTabWidget->addTab(aWidget,name); + fViewerTabWidget->addTab(aWidget, name); - fViewerTabWidget->setCurrentIndex(fViewerTabWidget->count()-1); + fViewerTabWidget->setCurrentIndex(fViewerTabWidget->count() - 1); // Set visible - #if QT_VERSION < 0x040200 - fViewerTabWidget->setLastTabCreated(fViewerTabWidget->currentIndex()); - #else - fViewerTabWidget->setLastTabCreated(fViewerTabWidget->currentIndex()); - #endif + fViewerTabWidget->setLastTabCreated(fViewerTabWidget->currentIndex()); // Not the good solution, but ensure that the help tree is correctly build when launching a viewer - // It should be done by a notification when adding a command, but that's nit done yet (Geant4.10.1) + // It should be done by a notification when adding a command, but that's nit done yet + // (Geant4.10.1) FillHelpTree(); return true; } - -void G4UIQt::SetStartPage( -const std::string& text) +void G4UIQt::SetStartPage(const std::string& text) { - if (text != "") { + if (! text.empty()) { fDefaultViewerFirstPageHTMLText = text; } - if (!fStartPage) { + if (fStartPage == nullptr) { fStartPage = new QTextBrowser(); - fStartPage->setContentsMargins(5,5,5,5); + fStartPage->setContentsMargins(5, 5, 5, 5); fStartPage->setReadOnly(true); } fStartPage->setOpenExternalLinks(true); fStartPage->setHtml(fDefaultViewerFirstPageHTMLText.c_str()); } - -void G4UIQt::UpdateTabWidget(int tabNumber) { - if ( fViewerTabWidget == NULL) { +void G4UIQt::UpdateTabWidget(int tabNumber) +{ + if (fViewerTabWidget == nullptr) { fViewerTabWidget = new G4QTabWidget; } @@ -1940,58 +2070,41 @@ void G4UIQt::UpdateTabWidget(int tabNumber) { // Send this signal to unblock graphic updates ! fViewerTabWidget->setTabSelected(false); - #if QT_VERSION < 0x040200 - fViewerTabWidget->show(); - #else fViewerTabWidget->setVisible(true); - #endif // This will send a paintEvent to OGL Viewers fViewerTabWidget->setTabSelected(true); } - /** Send resize event to all tabs */ -void G4UIQt::ResizeTabWidget( QResizeEvent* e) { - if ( fViewerTabWidget) { - for (G4int a=0;acount() ;a++) { +void G4UIQt::ResizeTabWidget(QResizeEvent* e) +{ + if (fViewerTabWidget != nullptr) { + for (G4int a = 0; a < fViewerTabWidget->count(); a++) { fViewerTabWidget->widget(a)->resize(e->size()); } } } - /** Start the Qt main loop -*/ -G4UIsession* G4UIQt::SessionStart ( -) + */ +G4UIsession* G4UIQt::SessionStart() { - G4Qt* interactorManager = G4Qt::getInstance (); + G4Qt* interactorManager = G4Qt::getInstance(); Prompt("Session :"); exitSession = false; - QCoreApplication::sendPostedEvents () ; + QCoreApplication::sendPostedEvents(); - #if QT_VERSION < 0x040200 - fMainWindow->show(); - #else - fMainWindow->setVisible(true); - #endif + fMainWindow->setVisible(true); if (fDefaultIcons) { -#if QT_VERSION < 0x040200 - fToolbarApp->show(); -#else - fToolbarApp->setVisible(true); -#endif - } else { + fToolbarApp->setVisible(true); + } + else { // Set not visible until session start -#if QT_VERSION < 0x040200 - fToolbarApp->hide(); -#else fToolbarApp->setVisible(false); -#endif } // Rebuild help tree (new command could be registered) FillHelpTree(); @@ -2006,39 +2119,31 @@ G4UIsession* G4UIQt::SessionStart ( // Focus on command line fCommandArea->setFocus(); - interactorManager->DisableSecondaryLoop (); // TO KEEP - if ((QApplication*)interactorManager->GetMainInteractor()) + interactorManager->DisableSecondaryLoop(); // TO KEEP + if ((QApplication*)interactorManager->GetMainInteractor() != nullptr) ((QApplication*)interactorManager->GetMainInteractor())->exec(); - interactorManager->EnableSecondaryLoop (); + interactorManager->EnableSecondaryLoop(); return this; } - /** Display the prompt in the prompt area @param aPrompt : string to display as the promt label */ -void G4UIQt::Prompt ( - G4String aPrompt -) +void G4UIQt::Prompt(G4String aPrompt) { - if (!aPrompt) return; + if (aPrompt == nullptr) return; fCommandLabel->setText((char*)aPrompt.data()); } - - -void G4UIQt::SessionTerminate ( -) +void G4UIQt::SessionTerminate() { - G4Qt* interactorManager = G4Qt::getInstance (); + G4Qt* interactorManager = G4Qt::getInstance(); fMainWindow->close(); ((QApplication*)interactorManager->GetMainInteractor())->exit(); } - - /** Called by intercoms/src/G4UImanager.cc
    Called by visualization/management/src/G4VisCommands.cc with "EndOfEvent" argument
    @@ -2047,80 +2152,70 @@ void G4UIQt::SessionTerminate ( @param aState @see : G4VisCommandReviewKeptEvents::SetNewValue */ -void G4UIQt::PauseSessionStart ( - const G4String& aState -) +void G4UIQt::PauseSessionStart(const G4String& aState) { - if (!aState) return; + if (aState == nullptr) return; - if(aState=="G4_pause> ") { // TO KEEP - SecondaryLoop ("Pause, type continue to exit this state"); // TO KEEP - } // TO KEEP + if (aState == "G4_pause> ") { // TO KEEP + SecondaryLoop("Pause, type continue to exit this state"); // TO KEEP + } // TO KEEP - if(aState=="EndOfEvent") { // TO KEEP + if (aState == "EndOfEvent") { // TO KEEP // Picking with feed back in event data Done here !!! - SecondaryLoop ("End of event, type continue to exit this state"); // TO KEEP - } // TO KEEP + SecondaryLoop("End of event, type continue to exit this state"); // TO KEEP + } // TO KEEP } - - /** Begin the secondary loop @param a_prompt : label to display as the prompt label */ -void G4UIQt::SecondaryLoop ( - G4String aPrompt -) +void G4UIQt::SecondaryLoop(G4String aPrompt) { - if (!aPrompt) return; + if (aPrompt == nullptr) return; - G4Qt* interactorManager = G4Qt::getInstance (); // TO KEEP ? - Prompt(aPrompt); // TO KEEP - exitPause = false; // TO KEEP - while(1) { + G4Qt* interactorManager = G4Qt::getInstance(); // TO KEEP ? + Prompt(aPrompt); // TO KEEP + exitPause = false; // TO KEEP + while (true) { ((QApplication*)interactorManager)->processEvents(QEventLoop::WaitForMoreEvents); - if(exitPause==true) break; // TO KEEP - } // TO KEEP - Prompt("Session :"); // TO KEEP + if (exitPause) break; // TO KEEP + } // TO KEEP + Prompt("Session :"); // TO KEEP } #ifdef G4MULTITHREADED -#include "G4Threading.hh" -#include "G4AutoLock.hh" -namespace { - G4Mutex ReceiveG4coutMutex = G4MUTEX_INITIALIZER; - G4Mutex ReceiveG4cerrMutex = G4MUTEX_INITIALIZER; -} +# include "G4AutoLock.hh" +# include "G4Threading.hh" +namespace +{ + G4Mutex ReceiveMutex = G4MUTEX_INITIALIZER; +} // namespace #endif /** - Receive a cout from Geant4. We have to display it in the cout zone + Receive a debug log message from Geant4. We have to display it in the cout zone @param aString : label to add in the display area @return 0 */ -G4int G4UIQt::ReceiveG4cout ( - const G4String& aString - ) +G4int G4UIQt::ReceiveG4debug(const G4String& aString) { - if(aString.empty()) return 0; + if (aString.empty()) return 0; #ifdef G4MULTITHREADED - G4AutoLock al(&ReceiveG4coutMutex); + G4AutoLock al(&ReceiveMutex); #endif - // Try to be smart : - // "*** This is just a warning message. ***" - if (G4StrUtil::contains(aString, "*** This is just a warning message. ***")) { - return ReceiveG4cerr(aString); - } - - // Workaround so that output is not lost after crash or G4Exception - // It seems workers write to std::cout anyway, so limit this to the master + // A workaround so that output is not lost after crash or G4Exception. + // The "workaround" is to make sure all flushed output appears on + // the terminal after a crash, because even flushed output can + // get lost in the Qt UI system. + // But...it seems workers write to std::cout/cerr anyway (is that a bug?), + // so limit this to the master thread #ifdef G4MULTITHREADED if (G4Threading::IsMasterThread()) #endif - std::cout << aString; + std::cout << aString << std::flush; G4String aStringWithStyle; // aString has a \n on the end (maybe it comes from G4endl or from the @@ -2134,80 +2229,88 @@ G4int G4UIQt::ReceiveG4cout ( for (G4int i = 0; i < (G4int)aString.length() - 1; ++i) { if (aString[i] == '\n') { aStringWithStyle += "
    "; - } else if (aString[i] == ' ') { + } + else if (aString[i] == ' ') { aStringWithStyle += " "; - } else if (aString[i] == '\t') { + } + else if (aString[i] == '\t') { aStringWithStyle += "    "; - } else if (aString[i] == '<') { + } + else if (aString[i] == '<') { aStringWithStyle += "<"; - } else { + } + else { aStringWithStyle += aString[i]; } } - if (fOutputStyles["cout"].fixed) { + if (fOutputStyles["debug"].fixed) { aStringWithStyle = "" + aStringWithStyle + ""; - } else { + } + else { aStringWithStyle = "" + aStringWithStyle + ""; } // Add to string - G4UIOutputString txt = G4UIOutputString(QString((char*)aStringWithStyle.data()),GetThreadPrefix()); + G4UIOutputString txt = + G4UIOutputString(QString((char*)aStringWithStyle.data()), GetThreadPrefix()); fG4OutputString.push_back(txt); #ifdef G4MULTITHREADED - QString result = FilterOutput(txt,fThreadsFilterComboBox->currentText(),fCoutFilter->text()); + QString result = FilterOutput(txt, fThreadsFilterComboBox->currentText(), fCoutFilter->text()); #else - QString result = FilterOutput(txt,"",fCoutFilter->text()); + QString result = FilterOutput(txt, "", fCoutFilter->text()); #endif if (result.isEmpty()) { return 0; } - G4UImanager* UI = G4UImanager::GetUIpointer(); - if (fOutputStyles["cout"].highlight) { - if (!UI->IsLastCommandOutputTreated() ) { - QPalette pal; - result = QString(" " - + " " + result + ""; - } + if (fOutputStyles["debug"].highlight) { + QPalette pal; + result = QString(" " + + " " + result + ""; } - UI->SetLastCommandOutputTreated(); + result = QString("") + result + QString(""); fCoutTBTextArea->append(result); - fCoutTBTextArea->ensureCursorVisible (); + fCoutTBTextArea->ensureCursorVisible(); #ifdef G4MULTITHREADED UpdateCoutThreadFilter(); #endif - // reset error stack - fLastErrMessage = aString; return 0; } - /** - Receive a cerr from Geant4. We have to display it in the cout zone + Receive a cout from Geant4. We have to display it in the cout zone @param aString : label to add in the display area @return 0 */ -G4int G4UIQt::ReceiveG4cerr ( - const G4String& aString -) +G4int G4UIQt::ReceiveG4cout(const G4String& aString) { if (aString.empty()) return 0; + // Try to be smart : + // "*** This is just a warning message. ***" + if (G4StrUtil::contains(aString, "*** This is just a warning message. ***")) { + return ReceiveG4cerr(aString); + } + #ifdef G4MULTITHREADED - G4AutoLock al(&ReceiveG4cerrMutex); + G4AutoLock al(&ReceiveMutex); #endif - // Workaround so that output is not lost after crash or G4Exception - // It seems workers write to std::cerr anyway, so limit this to the master + // A workaround so that output is not lost after crash or G4Exception. + // The "workaround" is to make sure all flushed output appears on + // the terminal after a crash, because even flushed output can + // get lost in the Qt UI system. + // But...it seems workers write to std::cout/cerr anyway (is that a bug?), + // so limit this to the master thread #ifdef G4MULTITHREADED if (G4Threading::IsMasterThread()) #endif - std::cerr << aString; + std::cout << aString << std::flush; G4String aStringWithStyle; // aString has a \n on the end (maybe it comes from G4endl or from the @@ -2221,56 +2324,151 @@ G4int G4UIQt::ReceiveG4cerr ( for (G4int i = 0; i < (G4int)aString.length() - 1; ++i) { if (aString[i] == '\n') { aStringWithStyle += "
    "; - } else if (aString[i] == ' ') { + } + else if (aString[i] == ' ') { aStringWithStyle += " "; - } else if (aString[i] == '\t') { + } + else if (aString[i] == '\t') { aStringWithStyle += "    "; - } else if (aString[i] == '<') { + } + else if (aString[i] == '<') { aStringWithStyle += "<"; - } else { + } + else { aStringWithStyle += aString[i]; } } - if (fOutputStyles["cerr"].fixed) { + if (fOutputStyles["cout"].fixed) { aStringWithStyle = "" + aStringWithStyle + ""; - } else { + } + else { aStringWithStyle = "" + aStringWithStyle + ""; } // Add to string - - G4UIOutputString txt = G4UIOutputString(QString((char*)aStringWithStyle.data()).trimmed(), - GetThreadPrefix(), - "error"); + G4UIOutputString txt = + G4UIOutputString(QString((char*)aStringWithStyle.data()), GetThreadPrefix()); fG4OutputString.push_back(txt); #ifdef G4MULTITHREADED - QString result = FilterOutput(txt,fThreadsFilterComboBox->currentText(),fCoutFilter->text()); + QString result = FilterOutput(txt, fThreadsFilterComboBox->currentText(), fCoutFilter->text()); #else - QString result = FilterOutput(txt,"",fCoutFilter->text()); + QString result = FilterOutput(txt, "", fCoutFilter->text()); #endif + if (result.isEmpty()) { return 0; } - // Suppress space, \n,\t,\r... - if (QString(aString.data()).trimmed() != "") { - if ((G4StateManager::GetStateManager()->GetCurrentState() == G4State_Abort) || - (G4StateManager::GetStateManager()->GetCurrentState() == G4State_Quit )) { - // In case of Abort or Quit, the useful error message should be in the last error message ! - fLastErrMessage += "\n"+aString; - QString criticalMessage = fLastErrMessage.data(); -#if QT_VERSION < 0x050000 - criticalMessage = Qt::escape(criticalMessage); + G4UImanager* UI = G4UImanager::GetUIpointer(); + if (fOutputStyles["cout"].highlight) { + if (! UI->IsLastCommandOutputTreated()) { + QPalette pal; + result = QString(" " + " " + result + ""; + } + } + UI->SetLastCommandOutputTreated(); + + fCoutTBTextArea->append(result); + fCoutTBTextArea->ensureCursorVisible(); + +#ifdef G4MULTITHREADED + UpdateCoutThreadFilter(); +#endif + + // reset error stack + fLastErrMessage = aString; + return 0; +} + +/** + Receive a cerr from Geant4. We have to display it in the cout zone + @param aString : label to add in the display area + @return 0 +*/ +G4int G4UIQt::ReceiveG4cerr(const G4String& aString) +{ + if (aString.empty()) return 0; + +#ifdef G4MULTITHREADED + G4AutoLock al(&ReceiveMutex); +#endif + + // A workaround so that output is not lost after crash or G4Exception. + // The "workaround" is to make sure all flushed output appears on + // the terminal after a crash, because even flushed output can + // get lost in the Qt UI system. + // But...it seems workers write to std::cout/cerr anyway (is that a bug?), + // so limit this to the master thread +#ifdef G4MULTITHREADED + if (G4Threading::IsMasterThread()) +#endif + std::cerr << aString << std::flush; + + G4String aStringWithStyle; + // aString has a \n on the end (maybe it comes from G4endl or from the + // Enter key on the command line) - ignore it. That’s why + // i < aString.length() - 1 + // But other \n need to be translated to an HTML newline. + // Similarly, spaces need to be translated to an HTML "non-breaking space". + // Tabs (\t) are more tricky since the number of equivalent spaces depends + // on how many characters precede it. Probably needs an HTML table. For now + // we replace \t with four spaces. + for (G4int i = 0; i < (G4int)aString.length() - 1; ++i) { + if (aString[i] == '\n') { + aStringWithStyle += "
    "; + } + else if (aString[i] == ' ') { + aStringWithStyle += " "; + } + else if (aString[i] == '\t') { + aStringWithStyle += "    "; + } + else if (aString[i] == '<') { + aStringWithStyle += "<"; + } + else { + aStringWithStyle += aString[i]; + } + } + if (fOutputStyles["cerr"].fixed) { + aStringWithStyle = "" + aStringWithStyle + ""; + } + else { + aStringWithStyle = "" + aStringWithStyle + ""; + } + + // Add to string + + G4UIOutputString txt = + G4UIOutputString(QString((char*)aStringWithStyle.data()).trimmed(), GetThreadPrefix(), "error"); + fG4OutputString.push_back(txt); + +#ifdef G4MULTITHREADED + QString result = FilterOutput(txt, fThreadsFilterComboBox->currentText(), fCoutFilter->text()); #else - criticalMessage = criticalMessage.toHtmlEscaped(); + QString result = FilterOutput(txt, "", fCoutFilter->text()); #endif - QMessageBox::critical(fMainWindow, "Error",QString(fLastErrMessage)); + if (result.isEmpty()) { + return 0; + } + + // Suppress space, \n,\t,\r... + if (QString(aString.data()).trimmed() != "") { + if ((G4StateManager::GetStateManager()->GetCurrentState() == G4State_Abort) || + (G4StateManager::GetStateManager()->GetCurrentState() == G4State_Quit)) + { + // In case of Abort or Quit, the useful error message should be in the last error message ! + fLastErrMessage += "\n" + aString; + QString criticalMessage = fLastErrMessage.data(); + criticalMessage = criticalMessage.toHtmlEscaped(); + QMessageBox::critical(fMainWindow, "Error", QString(fLastErrMessage)); } } - fCoutTBTextArea->append(QString("") + - result + QString("")); - fCoutTBTextArea->ensureCursorVisible (); + fCoutTBTextArea->append(QString("") + result + QString("")); + fCoutTBTextArea->ensureCursorVisible(); if (QString(aString.data()).trimmed() != "") { fLastErrMessage += aString; @@ -2281,13 +2479,13 @@ G4int G4UIQt::ReceiveG4cerr ( return 0; } - -G4String G4UIQt::GetThreadPrefix() { +G4String G4UIQt::GetThreadPrefix() +{ G4String threadPrefix = ""; #ifdef G4MULTITHREADED G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI==NULL) return ""; - if (UI->GetThreadCout() != NULL) { + if (UI == nullptr) return ""; + if (UI->GetThreadCout() != nullptr) { threadPrefix = UI->GetThreadCout()->GetFullPrefixString().data(); if (UI->GetThreadCout()->GetPrefixString() == G4String("G4VIS")) { return "G4VIS"; @@ -2297,147 +2495,123 @@ G4String G4UIQt::GetThreadPrefix() { return threadPrefix; } - #ifdef G4MULTITHREADED -void G4UIQt::UpdateCoutThreadFilter() { +void G4UIQt::UpdateCoutThreadFilter() +{ G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI==NULL) return; + if (UI == nullptr) return; // add "All" and "Master" if (fThreadsFilterComboBox->count() < 2) { - if ( fThreadsFilterComboBox->findText("All", Qt::MatchExactly) == -1) { + if (fThreadsFilterComboBox->findText("All", Qt::MatchExactly) == -1) { fThreadsFilterComboBox->addItem("All"); } } if (fThreadsFilterComboBox->count() < 2) { - if ( fThreadsFilterComboBox->findText("Master", Qt::MatchExactly) == -1) { + if (fThreadsFilterComboBox->findText("Master", Qt::MatchExactly) == -1) { fThreadsFilterComboBox->addItem("Master"); } } // Add current Cout G4String prefix = GetThreadPrefix(); - if (prefix != "") { - if ( fThreadsFilterComboBox->findText(prefix.data(), Qt::MatchExactly) == -1) { + if (! prefix.empty()) { + if (fThreadsFilterComboBox->findText(prefix.data(), Qt::MatchExactly) == -1) { fThreadsFilterComboBox->addItem(prefix.data()); } } } #endif - /** Add a new menu to the menu bar @param aName name of menu @param aLabel label to display */ -void G4UIQt::AddMenu ( - const char* aName -,const char* aLabel -) +void G4UIQt::AddMenu(const char* aName, const char* aLabel) { - if (aName == NULL) return; - if (aLabel == NULL) return; + if (aName == nullptr) return; + if (aLabel == nullptr) return; - QMenu *fileMenu = new QMenu(aLabel); + auto fileMenu = new QMenu(aLabel); fMainWindow->menuBar()->addMenu(fileMenu); - AddInteractor (aName,(G4Interactor)fileMenu); + AddInteractor(aName, (G4Interactor)fileMenu); } - /** Add a new button to a menu @param aMenu : parent menu @param aLabel : label to display @param aCommand : command to execute as a callback */ -void G4UIQt::AddButton ( - const char* aMenu -,const char* aLabel -,const char* aCommand -) +void G4UIQt::AddButton(const char* aMenu, const char* aLabel, const char* aCommand) { - if(aMenu==NULL) return; // TO KEEP - if(aLabel==NULL) return; // TO KEEP - if(aCommand==NULL) return; // TO KEEP + if (aMenu == nullptr) return; // TO KEEP + if (aLabel == nullptr) return; // TO KEEP + if (aCommand == nullptr) return; // TO KEEP - QMenu *parentTmp = (QMenu*)GetInteractor(aMenu); + QMenu* parentTmp = (QMenu*)GetInteractor(aMenu); - if(parentTmp==NULL) { + if (parentTmp == nullptr) { G4UImanager* UImanager = G4UImanager::GetUIpointer(); G4int verbose = UImanager->GetVerboseLevel(); if (verbose >= 2) { - G4cout << "Menu name " << aMenu<< " does not exist, please define it before using it."<< G4endl; + G4cout << "Menu name " << aMenu << " does not exist, please define it before using it." + << G4endl; } return; } // Find the command in the command tree G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI==NULL) return; - G4UIcommandTree * treeTop = UI->GetTree(); + if (UI == nullptr) return; + G4UIcommandTree* treeTop = UI->GetTree(); G4String cmd = aCommand; std::size_t cmdEndPos = cmd.find_first_of(" \t"); - if(cmdEndPos!=std::string::npos) { + if (cmdEndPos != std::string::npos) { cmd.erase(cmdEndPos); } - if(treeTop->FindPath(cmd) == NULL) { - if(cmd != "ls" && - cmd.substr(0,3) != "ls " && - cmd != "pwd" && - cmd != "cd" && - cmd.substr(0,3) != "cd " && - cmd != "help" && - cmd.substr(0,5) != "help " && - cmd[0] != '?' && - cmd != "hist" && - cmd != "history" && - cmd[0] != '!' && - cmd != "exit" && - cmd != "cont" && - cmd != "continue"){ + if (treeTop->FindPath(cmd) == nullptr) { + if (cmd != "ls" && cmd.substr(0, 3) != "ls " && cmd != "pwd" && cmd != "cd" && + cmd.substr(0, 3) != "cd " && cmd != "help" && cmd.substr(0, 5) != "help " && + cmd[0] != '?' && cmd != "hist" && cmd != "history" && cmd[0] != '!' && cmd != "exit" && + cmd != "cont" && cmd != "continue") + { G4UImanager* UImanager = G4UImanager::GetUIpointer(); G4int verbose = UImanager->GetVerboseLevel(); if (verbose >= 2) { - G4cout << "Warning: command '"<< cmd <<"' does not exist, please define it before using it."<< G4endl; + G4cout << "Warning: command '" << cmd + << "' does not exist, please define it before using it." << G4endl; } } } -#if QT_VERSION < 0x050600 - QSignalMapper *signalMapper = new QSignalMapper(this); - QAction *action = parentTmp->addAction(aLabel, signalMapper, SLOT(map())); - - connect(signalMapper, SIGNAL(mapped(const QString &)),this, SLOT(ButtonCallback(const QString&))); - signalMapper->setMapping(action, QString(aCommand)); -#else QString cmd_tmp = QString(aCommand); - parentTmp->addAction(aLabel, this, [this, cmd_tmp](){ this->ButtonCallback(cmd_tmp); }); -#endif + parentTmp->addAction(aLabel, this, [this, cmd_tmp]() { this->ButtonCallback(cmd_tmp); }); } - - - /** - special case for the "open" icon. It will open a file selector and map the return file to the given command. + special case for the "open" icon. It will open a file selector and map the return file to the given + command. */ -void G4UIQt::AddIcon(const char* aLabel, const char* aIconFile, const char* aCommand, const char* aFileName){ - if(aLabel==NULL) return; // TO KEEP +void G4UIQt::AddIcon( + const char* aLabel, const char* aIconFile, const char* aCommand, const char* aFileName) +{ + if (aLabel == nullptr) return; // TO KEEP // special case, aCommand could be NULL if aIconFile is not user_icon - if (aCommand==NULL) { + if (aCommand == nullptr) { if (std::string(aIconFile) == "user_icon") { - return; // TO KEEP + return; // TO KEEP } } QPixmap* pix; G4bool userToolBar = false; - if (!fDefaultIcons) { + if (! fDefaultIcons) { userToolBar = true; } if (std::string(aIconFile) == "user_icon") { @@ -2448,61 +2622,79 @@ void G4UIQt::AddIcon(const char* aLabel, const char* aIconFile, const char* aCom G4int verbose = UImanager->GetVerboseLevel(); if (verbose >= 2) { - G4cout << "Warning: file '"<< aFileName <<"' is incorrect or does not exist, this command will not be build"<< G4endl; + G4cout << "Warning: file '" << aFileName + << "' is incorrect or does not exist, this command will not be build" << G4endl; } return; } - } else if (std::string(aIconFile) == "open") { + } + else if (std::string(aIconFile) == "open") { pix = fOpenIcon; - } else if (std::string(aIconFile) == "save") { + } + else if (std::string(aIconFile) == "save") { pix = fSaveIcon; - } else if (std::string(aIconFile) == "move") { + } + else if (std::string(aIconFile) == "move") { pix = fMoveIcon; - } else if (std::string(aIconFile) == "rotate") { + } + else if (std::string(aIconFile) == "rotate") { pix = fRotateIcon; - } else if (std::string(aIconFile) == "pick") { - pix = fPickIcon; - } else if (std::string(aIconFile) == "zoom_in") { + } + else if (std::string(aIconFile) == "pick") { + pix = fPickIcon; + } + else if (std::string(aIconFile) == "zoom_in") { pix = fZoomInIcon; - } else if (std::string(aIconFile) == "zoom_out") { + } + else if (std::string(aIconFile) == "zoom_out") { pix = fZoomOutIcon; - } else if (std::string(aIconFile) == "wireframe") { + } + else if (std::string(aIconFile) == "wireframe") { pix = fWireframeIcon; - } else if (std::string(aIconFile) == "solid") { + } + else if (std::string(aIconFile) == "solid") { pix = fSolidIcon; - } else if (std::string(aIconFile) == "hidden_line_removal") { + } + else if (std::string(aIconFile) == "hidden_line_removal") { pix = fHiddenLineRemovalIcon; - } else if (std::string(aIconFile) == "hidden_line_and_surface_removal") { + } + else if (std::string(aIconFile) == "hidden_line_and_surface_removal") { pix = fHiddenLineAndSurfaceRemovalIcon; - } else if (std::string(aIconFile) == "perspective") { + } + else if (std::string(aIconFile) == "perspective") { pix = fPerspectiveIcon; - } else if (std::string(aIconFile) == "ortho") { + } + else if (std::string(aIconFile) == "ortho") { pix = fOrthoIcon; - } else if (std::string(aIconFile) == "runBeamOn") { + } + else if (std::string(aIconFile) == "runBeamOn") { pix = fRunIcon; - } else if (std::string(aIconFile) == "exit") { + } + else if (std::string(aIconFile) == "exit") { pix = fExitIcon; - } else { + } + else { G4UImanager* UImanager = G4UImanager::GetUIpointer(); G4int verbose = UImanager->GetVerboseLevel(); if (verbose >= 2) { - G4cout << "Parameter"<< aIconFile <<" not defined"<< G4endl; + G4cout << "Parameter" << aIconFile << " not defined" << G4endl; } return; } - QToolBar *currentToolbar = NULL; + QToolBar* currentToolbar = nullptr; if (userToolBar) { - if (fToolbarUser == NULL) { + if (fToolbarUser == nullptr) { fToolbarUser = new QToolBar(); - fToolbarUser->setIconSize (QSize(20,20)); + fToolbarUser->setIconSize(QSize(20, 20)); fMainWindow->addToolBar(Qt::TopToolBarArea, fToolbarUser); } currentToolbar = fToolbarUser; - } else { - if (fToolbarApp == NULL) { + } + else { + if (fToolbarApp == nullptr) { fToolbarApp = new QToolBar(); - fToolbarApp->setIconSize (QSize(20,20)); + fToolbarApp->setIconSize(QSize(20, 20)); fMainWindow->addToolBar(Qt::TopToolBarArea, fToolbarApp); } currentToolbar = fToolbarApp; @@ -2512,56 +2704,41 @@ void G4UIQt::AddIcon(const char* aLabel, const char* aIconFile, const char* aCom QList list = currentToolbar->actions(); - for (G4int i = 0; i < list.size(); ++i) { - if (list.at(i)->text() == QString(aLabel)) { + for (auto i : list) { + if (i->text() == QString(aLabel)) { G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI==NULL) return; - G4int verbose = UI->GetVerboseLevel(); + if (UI == nullptr) return; + G4int verbose = UI->GetVerboseLevel(); if (verbose >= 2) { - G4cout << "Warning: A toolBar icon \""<< aLabel<< "\" already exists with the same name!" << G4endl; + G4cout << "Warning: A toolBar icon \"" << aLabel << "\" already exists with the same name!" + << G4endl; } } } -#if QT_VERSION < 0x050600 - QSignalMapper *signalMapper = new QSignalMapper(this); - QAction *action = currentToolbar->addAction(QIcon(*pix),aLabel, signalMapper, SLOT(map())); -#endif // special cases :"open" if (std::string(aIconFile) == "open") { QString txt = aCommand + fStringSeparator + aLabel; -#if QT_VERSION < 0x050600 - connect(signalMapper, SIGNAL(mapped(const QString &)),this, SLOT(OpenIconCallback(const QString &))); - signalMapper->setMapping(action, QString(txt)); -#else - currentToolbar->addAction(QIcon(*pix), aIconFile, this, [this, txt](){ this->OpenIconCallback(txt); }); -#endif + currentToolbar->addAction( + QIcon(*pix), aIconFile, this, [this, txt]() { this->OpenIconCallback(txt); }); - // special cases :"save" - } else if (std::string(aIconFile) == "save") { + // special cases :"save" + } + else if (std::string(aIconFile) == "save") { QString txt = aCommand + fStringSeparator + aLabel; -#if QT_VERSION < 0x050600 - connect(signalMapper, SIGNAL(mapped(const QString &)),this, SLOT(SaveIconCallback(const QString&))); - signalMapper->setMapping(action, QString(txt)); -#else - currentToolbar->addAction(QIcon(*pix), aIconFile, this, [this, txt](){ this->SaveIconCallback(txt); }); -#endif - - // special cases : cursor style - } else if ((std::string(aIconFile) == "move") || - (std::string(aIconFile) == "rotate") || - (std::string(aIconFile) == "pick") || - (std::string(aIconFile) == "zoom_out") || - (std::string(aIconFile) == "zoom_in")) { -#if QT_VERSION < 0x050600 - connect(signalMapper, SIGNAL(mapped(const QString &)),this, SLOT(ChangeCursorAction(const QString&))); - signalMapper->setMapping(action, QString(aIconFile)); -#else + currentToolbar->addAction( + QIcon(*pix), aIconFile, this, [this, txt]() { this->SaveIconCallback(txt); }); + // special cases : cursor style + } + else if ((std::string(aIconFile) == "move") || (std::string(aIconFile) == "rotate") || + (std::string(aIconFile) == "pick") || (std::string(aIconFile) == "zoom_out") || + (std::string(aIconFile) == "zoom_in")) + { QString txt = QString(aIconFile); - QAction* action = currentToolbar->addAction(QIcon(*pix), aIconFile, this, [this, txt](){ this->ChangeCursorAction(txt); }); -#endif - action->setCheckable(TRUE); - action->setChecked(TRUE); + QAction* action = currentToolbar->addAction( + QIcon(*pix), aIconFile, this, [this, txt]() { this->ChangeCursorAction(txt); }); + action->setCheckable(true); + action->setChecked(true); action->setData(aIconFile); if (std::string(aIconFile) == "move") { @@ -2581,19 +2758,16 @@ void G4UIQt::AddIcon(const char* aLabel, const char* aIconFile, const char* aCom } // special case : surface style - } else if ((std::string(aIconFile) == "hidden_line_removal") || - (std::string(aIconFile) == "hidden_line_and_surface_removal") || - (std::string(aIconFile) == "solid") || - (std::string(aIconFile) == "wireframe")) { -#if QT_VERSION < 0x050600 - connect(signalMapper, SIGNAL(mapped(const QString &)),this, SLOT(ChangeSurfaceStyle(const QString&))); - signalMapper->setMapping(action, QString(aIconFile)); -#else + } + else if ((std::string(aIconFile) == "hidden_line_removal") || + (std::string(aIconFile) == "hidden_line_and_surface_removal") || + (std::string(aIconFile) == "solid") || (std::string(aIconFile) == "wireframe")) + { QString txt = QString(aIconFile); - QAction* action = currentToolbar->addAction(QIcon(*pix), aIconFile, this, [this, txt](){ this->ChangeSurfaceStyle(txt); }); -#endif - action->setCheckable(TRUE); - action->setChecked(TRUE); + QAction* action = currentToolbar->addAction( + QIcon(*pix), aIconFile, this, [this, txt]() { this->ChangeSurfaceStyle(txt); }); + action->setCheckable(true); + action->setChecked(true); action->setData(aIconFile); if (std::string(aIconFile) == "hidden_line_removal") { @@ -2610,17 +2784,13 @@ void G4UIQt::AddIcon(const char* aLabel, const char* aIconFile, const char* aCom } // special case : perspective/ortho - } else if ((std::string(aIconFile) == "perspective") || - (std::string(aIconFile) == "ortho")) { -#if QT_VERSION < 0x050600 - connect(signalMapper, SIGNAL(mapped(const QString &)),this, SLOT(ChangePerspectiveOrtho(const QString&))); - signalMapper->setMapping(action, QString(aIconFile)); -#else + } + else if ((std::string(aIconFile) == "perspective") || (std::string(aIconFile) == "ortho")) { QString txt = QString(aIconFile); - QAction* action = currentToolbar->addAction(QIcon(*pix), aIconFile, this, [this, txt](){ this->ChangePerspectiveOrtho(txt); }); -#endif - action->setCheckable(TRUE); - action->setChecked(TRUE); + QAction* action = currentToolbar->addAction( + QIcon(*pix), aIconFile, this, [this, txt]() { this->ChangePerspectiveOrtho(txt); }); + action->setCheckable(true); + action->setChecked(true); action->setData(aIconFile); if (std::string(aIconFile) == "perspective") { @@ -2629,99 +2799,73 @@ void G4UIQt::AddIcon(const char* aLabel, const char* aIconFile, const char* aCom if (std::string(aIconFile) == "ortho") { SetIconOrthoSelected(); } - - } else { - + } + else { // Find the command in the command tree G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI==NULL) return; - G4UIcommandTree * treeTop = UI->GetTree(); - if (aCommand != NULL) { + if (UI == nullptr) return; + G4UIcommandTree* treeTop = UI->GetTree(); + if (aCommand != nullptr) { std::string str = aCommand; - std::string::size_type pos = str.find(" "); - if (pos != std::string::npos) - { - str = str.substr(0,pos).c_str(); + std::string::size_type pos = str.find(' '); + if (pos != std::string::npos) { + str = str.substr(0, pos).c_str(); } - if(treeTop->FindPath(str.c_str()) == NULL) { + if (treeTop->FindPath(str.c_str()) == nullptr) { G4UImanager* UImanager = G4UImanager::GetUIpointer(); G4int verbose = UImanager->GetVerboseLevel(); if (verbose >= 2) { - G4cout << "Warning: command '"<< aCommand <<"' does not exist, please define it before using it."<< G4endl; + G4cout << "Warning: command '" << aCommand + << "' does not exist, please define it before using it." << G4endl; } } } - -#if QT_VERSION < 0x050600 - connect(signalMapper, SIGNAL(mapped(const QString &)),this, SLOT(ButtonCallback(const QString&))); - signalMapper->setMapping(action, QString(aCommand)); -#else QString txt = QString(aCommand); - currentToolbar->addAction(QIcon(*pix), aCommand, this, [this, txt](){ this->ButtonCallback(txt); }); -#endif + currentToolbar->addAction( + QIcon(*pix), aCommand, this, [this, txt]() { this->ButtonCallback(txt); }); } } - -void G4UIQt::OutputStyle (const char* destination,const char* style,const char* highlight) +void G4UIQt::SetOutputStyle(const char* destination, const char* style) { // Specify an output style - // First argument destination (cout cerr warnings errors all) - // Second argument is the style (fixed proportional) - // Third argument highlights commands if "highlight" (and if /control/verbose > 0) - G4String uiQtDestination(destination); - G4UIQtStyle uiQtStyle; - if (G4String(style) == "fixed") uiQtStyle.fixed = true; else uiQtStyle.fixed = false; - if (G4String(highlight) == "highlight") uiQtStyle.highlight = true; else uiQtStyle.highlight = false; - if (uiQtDestination == "all") { - for (auto& i: fOutputStyles) { - i.second = uiQtStyle; - } - } else { - fOutputStyles[uiQtDestination] = uiQtStyle; - } + // First argument destination ("cout" etc or "all") + // Second argument is the required style - see guidance + + SetStyleUtility(destination, style); } void G4UIQt::NativeMenu(G4bool aVal) { - if ( fMainWindow->menuBar()->isNativeMenuBar() == aVal ) - return; // already in this state + if (fMainWindow->menuBar()->isNativeMenuBar() == aVal) return; // already in this state // Menu become empty when goin from Qt to Native Bar fMainWindow->menuBar()->setNativeMenuBar(aVal); } -void G4UIQt::ClearMenu() -{ - fMainWindow->menuBar()->clear(); -} +void G4UIQt::ClearMenu() { fMainWindow->menuBar()->clear(); } -void G4UIQt::ActivateCommand( - G4String newCommand -) +void G4UIQt::ActivateCommand(G4String newCommand) { - if (!fHelpTreeWidget) { + if (fHelpTreeWidget == nullptr) { return; } // Look for the choosen command "newCommand" - std::size_t i = newCommand.find(" "); - G4String targetCom =""; - if( i != std::string::npos ) - { - G4String newValue = newCommand.substr(i+1,newCommand.length()-(i+1)); - G4StrUtil::strip(newValue); - targetCom = ModifyToFullPathCommand( newValue ); - } - if (targetCom != "") { + std::size_t i = newCommand.find(' '); + G4String targetCom = ""; + if (i != std::string::npos) { + G4String newValue = newCommand.substr(i + 1, newCommand.length() - (i + 1)); + G4StrUtil::strip(newValue); + targetCom = ModifyToFullPathCommand(newValue); + } + if (! targetCom.empty()) { OpenHelpTreeOnCommand(targetCom.data()); } fUITabWidget->setCurrentWidget(fHelpTBWidget); } - - /** Create the help tree widget @param parent : parent of tree widget @@ -2730,8 +2874,7 @@ void G4UIQt::ActivateCommand( void G4UIQt::InitHelpTreeAndVisParametersWidget() { - - if (! fHelpTreeWidget ) { + if (fHelpTreeWidget == nullptr) { fHelpTreeWidget = new QTreeWidget(); } @@ -2741,10 +2884,9 @@ void G4UIQt::InitHelpTreeAndVisParametersWidget() labels << QString("Command"); fHelpTreeWidget->setHeaderLabels(labels); - - connect(fHelpTreeWidget, SIGNAL(itemSelectionChanged ()),this, SLOT(HelpTreeClicCallback())); - connect(fHelpTreeWidget, SIGNAL(itemDoubleClicked (QTreeWidgetItem*,int)),this, SLOT(HelpTreeDoubleClicCallback())); - + connect(fHelpTreeWidget, SIGNAL(itemSelectionChanged()), this, SLOT(HelpTreeClicCallback())); + connect(fHelpTreeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), this, + SLOT(HelpTreeDoubleClicCallback())); } /** Create the help tree widget @@ -2754,154 +2896,129 @@ void G4UIQt::InitHelpTreeAndVisParametersWidget() void G4UIQt::FillHelpTree() { - if (! fHelpTreeWidget ) { + if (fHelpTreeWidget == nullptr) { InitHelpTreeAndVisParametersWidget(); } QString searchText = fHelpLine->text(); - if (searchText =="") { + if (searchText == "") { // clear old help tree // fHelpTreeWidget->clear(); - } else { + } + else { return; } - if (fParameterHelpLabel) { + if (fParameterHelpLabel != nullptr) { fParameterHelpLabel->setText("Choose a command in the command tree"); fParameterHelpTable->setVisible(false); } - if (fHelpLine) { -#if QT_VERSION < 0x040200 - fHelpLine->clear(); -#else + if (fHelpLine != nullptr) { fHelpLine->setText(""); -#endif } G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI==NULL) return; - G4UIcommandTree * treeTop = UI->GetTree(); + if (UI == nullptr) return; + G4UIcommandTree* treeTop = UI->GetTree(); G4int treeSize = treeTop->GetTreeEntry(); - QTreeWidgetItem * newItem = NULL; + QTreeWidgetItem* newItem = nullptr; QString commandText = ""; - for (G4int a=0;aGetTree(a+1)->GetPathName()).data()).trimmed(); + commandText = QString((char*)(treeTop->GetTree(a + 1)->GetPathName()).data()).trimmed(); // if already exist, don't create it ! - for (G4int b=0;btopLevelItemCount();++b) { - if (!newItem) - newItem = FindTreeItem(fHelpTreeWidget->topLevelItem(b),commandText); + for (G4int b = 0; b < fHelpTreeWidget->topLevelItemCount(); ++b) { + if (newItem == nullptr) newItem = FindTreeItem(fHelpTreeWidget->topLevelItem(b), commandText); } - if (newItem == NULL) { - + if (newItem == nullptr) { newItem = new QTreeWidgetItem(); - newItem->setText(0,GetShortCommandPath(commandText)); + newItem->setText(0, GetShortCommandPath(commandText)); fHelpTreeWidget->addTopLevelItem(newItem); } // look for childs - CreateHelpTree(newItem,treeTop->GetTree(a+1)); + CreateHelpTree(newItem, treeTop->GetTree(a + 1)); } - } - - /** Fill the Help Tree Widget @param aParent : parent item to fill @param aCommandTree : commandTree node associate with this part of the Tree */ -void G4UIQt::CreateHelpTree( - QTreeWidgetItem *aParent -,G4UIcommandTree *aCommandTree -) +void G4UIQt::CreateHelpTree(QTreeWidgetItem* aParent, G4UIcommandTree* aCommandTree) { - if (aParent == NULL) return; - if (aCommandTree == NULL) return; - + if (aParent == nullptr) return; + if (aCommandTree == nullptr) return; // Creating new item - QTreeWidgetItem * newItem; + QTreeWidgetItem* newItem; QString commandText = ""; // Get the Sub directories - for (G4int a=0;aGetTreeEntry();++a) { - - commandText = QString((char*)(aCommandTree->GetTree(a+1)->GetPathName()).data()).trimmed(); + for (G4int a = 0; a < aCommandTree->GetTreeEntry(); ++a) { + commandText = QString((char*)(aCommandTree->GetTree(a + 1)->GetPathName()).data()).trimmed(); // if already exist, don't create it ! - newItem = FindTreeItem(aParent,commandText); - if (newItem == NULL) { + newItem = FindTreeItem(aParent, commandText); + if (newItem == nullptr) { newItem = new QTreeWidgetItem(); - newItem->setText(0,GetShortCommandPath(commandText)); + newItem->setText(0, GetShortCommandPath(commandText)); aParent->addChild(newItem); } - CreateHelpTree(newItem,aCommandTree->GetTree(a+1)); + CreateHelpTree(newItem, aCommandTree->GetTree(a + 1)); } // Get the Commands - for (G4int a=0;aGetCommandEntry();++a) { - + for (G4int a = 0; a < aCommandTree->GetCommandEntry(); ++a) { QStringList stringList; - commandText = QString((char*)(aCommandTree->GetCommand(a+1)->GetCommandPath()).data()).trimmed(); + commandText = + QString((char*)(aCommandTree->GetCommand(a + 1)->GetCommandPath()).data()).trimmed(); // if already exist, don't create it ! - newItem = FindTreeItem(aParent,commandText); - if (newItem == NULL) { + newItem = FindTreeItem(aParent, commandText); + if (newItem == nullptr) { newItem = new QTreeWidgetItem(); - newItem->setText(0,GetShortCommandPath(commandText)); + newItem->setText(0, GetShortCommandPath(commandText)); aParent->addChild(newItem); - -#if QT_VERSION < 0x040202 - fHelpTreeWidget->setItemExpanded(newItem,false); -#else newItem->setExpanded(false); -#endif } } } - - - /** Add the following command to the corresponding groupbox If depthLevel is 1 : create ToolBox If depthLevel is 2 or more : create GroupBox */ G4bool G4UIQt::CreateVisCommandGroupAndToolBox( - G4UIcommand* aCommand -,QWidget* aParent -,G4int aDepthLevel -,G4bool isDialog -) + G4UIcommand* aCommand, QWidget* aParent, G4int aDepthLevel, G4bool isDialog) { - QString commandText = QString((char*)(aCommand->GetCommandPath().data())).section("/",-aDepthLevel); + QString commandText = + QString((char*)(aCommand->GetCommandPath().data())).section("/", -aDepthLevel); - if (commandText == NULL) { + if (commandText == nullptr) { return false; } // Look if groupBox is create // QGroupBox* gBoxCommandWidget; - QWidget* newParentWidget = NULL; + QWidget* newParentWidget = nullptr; G4bool found = false; QString commandSection = commandText.left(commandText.indexOf("/")); if (aDepthLevel == 1) { - QToolBox* currentParent = dynamic_cast(aParent); - if (currentParent != 0){ - + auto currentParent = dynamic_cast(aParent); + if (currentParent != nullptr) { // already exists ? - for (G4int a=0; acount(); ++a) { + for (G4int a = 0; a < currentParent->count(); ++a) { if (currentParent->itemText(a) == commandSection) { found = true; newParentWidget = currentParent->widget(a); @@ -2909,52 +3026,51 @@ G4bool G4UIQt::CreateVisCommandGroupAndToolBox( } } // Not found ? create it - if (!found) { + if (! found) { newParentWidget = new QGroupBox(); newParentWidget->setLayout(new QVBoxLayout()); - if (currentParent != 0){ - currentParent->addItem(newParentWidget,commandSection); - } else { - if (!aParent->layout()) { + if (currentParent != nullptr) { + currentParent->addItem(newParentWidget, commandSection); + } + else { + if (aParent->layout() == nullptr) { aParent->setLayout(new QVBoxLayout()); } aParent->layout()->addWidget(newParentWidget); } if (commandText.indexOf("/") == -1) { - // Guidance QString guidance; - G4int n_guidanceEntry = (G4int)aCommand->GetGuidanceEntries(); - for( G4int i_thGuidance=0; i_thGuidance < n_guidanceEntry; i_thGuidance++ ) { + auto n_guidanceEntry = (G4int)aCommand->GetGuidanceEntries(); + for (G4int i_thGuidance = 0; i_thGuidance < n_guidanceEntry; i_thGuidance++) { guidance += QString((char*)(aCommand->GetGuidanceLine(i_thGuidance)).data()) + "\n"; } newParentWidget->setToolTip(guidance); } - QScrollArea* sc = dynamic_cast(newParentWidget->parent()->parent()); - if (sc != 0) { + auto sc = dynamic_cast(newParentWidget->parent()->parent()); + if (sc != nullptr) { sc->ensureWidgetVisible(newParentWidget); - } } - } else { - + } + else { // try to know if this level is already there - QGroupBox* currentParent = dynamic_cast(aParent); - if (currentParent != 0){ - + auto currentParent = dynamic_cast(aParent); + if (currentParent != nullptr) { // if depth==2, then we add a [more parameters inside] to the toolBoxItem parent // QGroupBox > QWidget > QScrollArea > QToolBox - if (aDepthLevel == 2){ - QToolBox* parentToolBox = dynamic_cast(currentParent->parent()->parent()->parent()); - if (parentToolBox != 0) { - // parentToolBox->setItemText(parentToolBox->indexOf(currentParent),"[more parameters inside]"); + if (aDepthLevel == 2) { + auto parentToolBox = dynamic_cast(currentParent->parent()->parent()->parent()); + if (parentToolBox != nullptr) { + // parentToolBox->setItemText(parentToolBox->indexOf(currentParent),"[more + // parameters inside]"); } } - for (G4int a=0; alayout()->count(); ++a) { - QGroupBox* gb = dynamic_cast(aParent->layout()->itemAt(a)->widget()); - if (gb != 0) { + for (G4int a = 0; a < aParent->layout()->count(); ++a) { + auto gb = dynamic_cast(aParent->layout()->itemAt(a)->widget()); + if (gb != nullptr) { if (gb->title() == commandSection) { found = true; newParentWidget = gb; @@ -2964,10 +3080,10 @@ G4bool G4UIQt::CreateVisCommandGroupAndToolBox( } // Not found ? create it - if (!found) { + if (! found) { newParentWidget = new QGroupBox(); newParentWidget->setLayout(new QVBoxLayout()); - if (!aParent->layout()) { + if (aParent->layout() == nullptr) { aParent->setLayout(new QVBoxLayout()); } aParent->layout()->addWidget(newParentWidget); @@ -2975,8 +3091,8 @@ G4bool G4UIQt::CreateVisCommandGroupAndToolBox( // set toolTip // Guidance QString guidance; - G4int n_guidanceEntry = (G4int)aCommand->GetGuidanceEntries(); - for( G4int i_thGuidance=0; i_thGuidance < n_guidanceEntry; i_thGuidance++ ) { + auto n_guidanceEntry = (G4int)aCommand->GetGuidanceEntries(); + for (G4int i_thGuidance = 0; i_thGuidance < n_guidanceEntry; i_thGuidance++) { guidance += QString((char*)(aCommand->GetGuidanceLine(i_thGuidance)).data()) + "\n"; } newParentWidget->setToolTip(guidance); @@ -2985,101 +3101,108 @@ G4bool G4UIQt::CreateVisCommandGroupAndToolBox( // fill command groupbox if (commandText.indexOf("/") == -1) { - if (CreateCommandWidget(aCommand, newParentWidget,isDialog)) { + if (CreateCommandWidget(aCommand, newParentWidget, isDialog)) { return true; } - } else { - CreateVisCommandGroupAndToolBox(aCommand,newParentWidget, aDepthLevel-1,isDialog); + } + else { + CreateVisCommandGroupAndToolBox(aCommand, newParentWidget, aDepthLevel - 1, isDialog); } return true; } - - /** Create a widget with the command parameters inside @param command: command line @parent : parent widget @isDialog : true if we want apply/cancel button and close at end, false if we want only apply */ -G4bool G4UIQt::CreateCommandWidget(G4UIcommand* aCommand, QWidget* aParent, G4bool isDialog) { - - if (aCommand == NULL) { +G4bool G4UIQt::CreateCommandWidget(G4UIcommand* aCommand, QWidget* aParent, G4bool isDialog) +{ + if (aCommand == nullptr) { return false; } - // parameters - G4int n_parameterEntry = (G4int)aCommand->GetParameterEntries(); - if( n_parameterEntry > 0 ) { - G4UIparameter *param; + auto n_parameterEntry = (G4int)aCommand->GetParameterEntries(); + if (n_parameterEntry > 0) { + G4UIparameter* param; // Re-implementation of G4UIparameter.cc - QWidget* paramWidget = new QWidget(); - QGridLayout* gridLayout = new QGridLayout(); + auto paramWidget = new QWidget(); + auto gridLayout = new QGridLayout(); paramWidget->setLayout(gridLayout); // Special case for colour, try to display a color chooser if we found red/green/blue parameter unsigned int nbColorParameter = 0; G4bool isStillColorParameter = false; G4bool isColorDialogAdded = false; - QLabel* redLabel = NULL; - QLabel* greenLabel = NULL; + QLabel* redLabel = nullptr; + QLabel* greenLabel = nullptr; QString redDefaultStr = ""; QString greenDefaultStr = ""; QString blueDefaultStr = ""; - QWidget* redInput = NULL; - QWidget* greenInput = NULL; + QWidget* redInput = nullptr; + QWidget* greenInput = nullptr; - for( G4int i_thParameter=0; i_thParameterGetParameter(i_thParameter); - QLabel* label = new QLabel(QString((char*)(param->GetParameterName()).data())); + auto label = new QLabel(QString((char*)(param->GetParameterName()).data())); - if ((label->text() == "red") || (label->text() == "red_or_string")){ - nbColorParameter ++; + if ((label->text() == "red") || (label->text() == "red_or_string")) { + nbColorParameter++; isStillColorParameter = true; - } else if ((label->text() == "green") && isStillColorParameter) { - nbColorParameter ++; - } else if ((label->text() == "blue") && isStillColorParameter) { - nbColorParameter ++; - } else if (!isColorDialogAdded) { - + } + else if ((label->text() == "green") && isStillColorParameter) { + nbColorParameter++; + } + else if ((label->text() == "blue") && isStillColorParameter) { + nbColorParameter++; + } + else if (! isColorDialogAdded) { // not following red/green/blue parameters ? if (nbColorParameter == 1) { - gridLayout->addWidget(redLabel,i_thParameter-1,0); - gridLayout->addWidget(redInput,i_thParameter-1,1); - } else if (nbColorParameter == 2) { - gridLayout->addWidget(redLabel,i_thParameter-2,0); - gridLayout->addWidget(redInput,i_thParameter-2,1); - gridLayout->addWidget(greenLabel,i_thParameter-1,0); - gridLayout->addWidget(greenInput,i_thParameter-1,1); + gridLayout->addWidget(redLabel, i_thParameter - 1, 0); + gridLayout->addWidget(redInput, i_thParameter - 1, 1); + } + else if (nbColorParameter == 2) { + gridLayout->addWidget(redLabel, i_thParameter - 2, 0); + gridLayout->addWidget(redInput, i_thParameter - 2, 1); + gridLayout->addWidget(greenLabel, i_thParameter - 1, 0); + gridLayout->addWidget(greenInput, i_thParameter - 1, 1); } nbColorParameter = 0; } // Check parameter type, could be NULL if not found - QWidget* input = NULL; - if ((QString(QChar(param->GetParameterType())) == "d") || (QString(QChar(param->GetParameterType())) == "i")) { + QWidget* input = nullptr; + if ((QString(QChar(param->GetParameterType())) == "d") || + (QString(QChar(param->GetParameterType())) == "i")) + { input = new QLineEdit(); // set default value dynamic_cast(input)->setText(QString((char*)(param->GetDefaultValue()).data())); - if (((label->text() == "red") || (label->text() == "red_or_string")) && isStillColorParameter) { + if (((label->text() == "red") || (label->text() == "red_or_string")) && + isStillColorParameter) + { redDefaultStr = QString((char*)(param->GetDefaultValue()).data()); - } else if ((label->text() == "green") && isStillColorParameter) { + } + else if ((label->text() == "green") && isStillColorParameter) { greenDefaultStr = QString((char*)(param->GetDefaultValue()).data()); - } else if ((label->text() == "green") && isStillColorParameter) { + } + else if ((label->text() == "green") && isStillColorParameter) { blueDefaultStr = QString((char*)(param->GetDefaultValue()).data()); } - - } else if (QString(QChar(param->GetParameterType())) == "b") { + } + else if (QString(QChar(param->GetParameterType())) == "b") { input = new QWidget(); - QHBoxLayout* layout = new QHBoxLayout(); + auto layout = new QHBoxLayout(); input->setLayout(layout); - QButtonGroup* buttons = new QButtonGroup(); - QRadioButton* radioOff = new QRadioButton("0"); - QRadioButton* radioOn = new QRadioButton("1"); + auto buttons = new QButtonGroup(); + auto radioOff = new QRadioButton("0"); + auto radioOn = new QRadioButton("1"); buttons->addButton(radioOn); buttons->addButton(radioOff); layout->addWidget(radioOn); @@ -3089,36 +3212,40 @@ G4bool G4UIQt::CreateCommandWidget(G4UIcommand* aCommand, QWidget* aParent, G4bo QString defaultValue = QString((char*)(param->GetDefaultValue()).data()); if (defaultValue == "0") { radioOff->setChecked(true); - } else if (defaultValue == "1") { + } + else if (defaultValue == "1") { radioOn->setChecked(true); } - } else if ((QString(QChar(param->GetParameterType())) == "s") && (!param->GetParameterCandidates().empty())) { + } + else if ((QString(QChar(param->GetParameterType())) == "s") && + (! param->GetParameterCandidates().empty())) + { input = new QComboBox(); QString candidates = QString((char*)(param->GetParameterCandidates()).data()); - QStringList list = candidates.split (" "); + QStringList list = candidates.split(" "); // add all candidates to widget QString defaultValue = QString((char*)(param->GetDefaultValue()).data()); - for (int a=0; a(input)->addItem(list.at(a)); if (list.at(a) == defaultValue) { dynamic_cast(input)->setCurrentIndex(a); } } - - } else if ((QString(QChar(param->GetParameterType())) == "s")) { // string + } + else if ((QString(QChar(param->GetParameterType())) == "s")) { // string input = new QLineEdit(); // set default value dynamic_cast(input)->setText(QString((char*)(param->GetDefaultValue()).data())); - - } else if ((QString(QChar(param->GetParameterType())) == "c")) { // on/off + } + else if ((QString(QChar(param->GetParameterType())) == "c")) { // on/off input = new QWidget(); - QHBoxLayout* layout = new QHBoxLayout(); + auto layout = new QHBoxLayout(); input->setLayout(layout); - QButtonGroup* buttons = new QButtonGroup(); - QRadioButton* radioOff = new QRadioButton("off"); - QRadioButton* radioOn = new QRadioButton("on"); + auto buttons = new QButtonGroup(); + auto radioOff = new QRadioButton("off"); + auto radioOn = new QRadioButton("on"); buttons->addButton(radioOn); buttons->addButton(radioOff); layout->addWidget(radioOn); @@ -3128,146 +3255,133 @@ G4bool G4UIQt::CreateCommandWidget(G4UIcommand* aCommand, QWidget* aParent, G4bo QString defaultValue = QString((char*)(param->GetDefaultValue()).data()); if (defaultValue == "off") { radioOff->setChecked(true); - } else if (defaultValue == "on") { + } + else if (defaultValue == "on") { radioOn->setChecked(true); } - - } else { + } + else { input = new QLineEdit(); dynamic_cast(input)->setText(QString((char*)(param->GetDefaultValue()).data())); } txt += "\nParameter : " + QString((char*)(param->GetParameterName()).data()) + "\n"; - if( ! param->GetParameterGuidance().empty() ) - txt += QString((char*)(param->GetParameterGuidance()).data())+ "\n" ; + if (! param->GetParameterGuidance().empty()) + txt += QString((char*)(param->GetParameterGuidance()).data()) + "\n"; txt += " Parameter type : " + QString(QChar(param->GetParameterType())) + "\n"; - if(param->IsOmittable()){ + if (param->IsOmittable()) { txt += " Omittable : True\n"; - } else { + } + else { txt += " Omittable : False\n"; } - if( param->GetCurrentAsDefault() ) { + if (param->GetCurrentAsDefault()) { txt += " Default value : taken from the current value\n"; - } else if( ! param->GetDefaultValue().empty() ) { - txt += " Default value : " + QString((char*)(param->GetDefaultValue()).data())+ "\n"; } - if( ! param->GetParameterRange().empty() ) { - txt += " Parameter range : " + QString((char*)(param->GetParameterRange()).data())+ "\n"; + else if (! param->GetDefaultValue().empty()) { + txt += " Default value : " + QString((char*)(param->GetDefaultValue()).data()) + "\n"; } - if( ! param->GetParameterCandidates().empty() ) { - txt += " Candidates : " + QString((char*)(param->GetParameterCandidates()).data())+ "\n"; + if (! param->GetParameterRange().empty()) { + txt += " Parameter range : " + QString((char*)(param->GetParameterRange()).data()) + "\n"; + } + if (! param->GetParameterCandidates().empty()) { + txt += + " Candidates : " + QString((char*)(param->GetParameterCandidates()).data()) + "\n"; } if (isStillColorParameter && (nbColorParameter != 0)) { if ((label->text() == "red") || (label->text() == "red_or_string")) { redLabel = label; redInput = input; - } else if (label->text() == "green") { + } + else if (label->text() == "green") { greenLabel = label; greenInput = input; - } else if (label->text() == "blue") { - + } + else if (label->text() == "blue") { // we have all, then add a color chooser // Create a pixmap with the default color QColor qc; if ((redDefaultStr != "") && (redDefaultStr != "") && (redDefaultStr != "")) { - qc.setRgbF(redDefaultStr.toDouble(), - greenDefaultStr.toDouble(), - blueDefaultStr.toDouble()); + qc.setRgbF( + redDefaultStr.toDouble(), greenDefaultStr.toDouble(), blueDefaultStr.toDouble()); } QPixmap pixmap = QPixmap(QSize(16, 16)); - pixmap.fill (qc); + pixmap.fill(qc); QPainter painter(&pixmap); painter.setPen(Qt::black); - painter.drawRect(0,0,15,15); // Draw contour + painter.drawRect(0, 0, 15, 15); // Draw contour input = new QPushButton("Change color"); dynamic_cast(input)->setIcon(pixmap); - dynamic_cast(input)->setAccessibleName(redDefaultStr+" "+greenDefaultStr+" "+blueDefaultStr); + dynamic_cast(input)->setAccessibleName( + redDefaultStr + " " + greenDefaultStr + " " + blueDefaultStr); label = new QLabel("Choose color"); // less 1 because we have to add one to the row number nbColorParameter--; - gridLayout->addWidget(label,i_thParameter-nbColorParameter,0); + gridLayout->addWidget(label, i_thParameter - nbColorParameter, 0); input->setToolTip("Select the current color"); - gridLayout->addWidget(input,i_thParameter-nbColorParameter,1); + gridLayout->addWidget(input, i_thParameter - nbColorParameter, 1); // Connect pushButton to ColorDialog in callback -#if QT_VERSION < 0x050600 - QSignalMapper* signalMapper = new QSignalMapper(this); - signalMapper->setMapping(input,input); - connect(input, SIGNAL(clicked()), signalMapper, SLOT(map())); - connect(signalMapper, SIGNAL(mapped(QWidget*)),this, SLOT(ChangeColorCallback(QWidget*))); -#else - connect(dynamic_cast(input), &QPushButton::clicked , [this, input](){ this->ChangeColorCallback(input);}); -#endif + connect(dynamic_cast(input), &QPushButton::clicked, + [this, input]() { this->ChangeColorCallback(input); }); isColorDialogAdded = true; isStillColorParameter = false; } - } else { - gridLayout->addWidget(label,i_thParameter-nbColorParameter,0); + } + else { + gridLayout->addWidget(label, i_thParameter - nbColorParameter, 0); input->setToolTip(txt); - gridLayout->addWidget(input,i_thParameter-nbColorParameter,1); + gridLayout->addWidget(input, i_thParameter - nbColorParameter, 1); } } // add command name in hidden value at last line position 0 - QLabel* name = new QLabel(QString((char*)(aCommand->GetCommandPath().data()))); + auto name = new QLabel(QString((char*)(aCommand->GetCommandPath().data()))); name->hide(); - gridLayout->addWidget(name,n_parameterEntry-nbColorParameter,0); - - QPushButton* applyButton = new QPushButton("Apply"); - if (!isDialog) { - - gridLayout->addWidget(applyButton,n_parameterEntry-nbColorParameter,1); + gridLayout->addWidget(name, n_parameterEntry - nbColorParameter, 0); -#if QT_VERSION < 0x050600 - QSignalMapper* signalMapper = new QSignalMapper(this); - signalMapper->setMapping(applyButton, paramWidget); - connect(applyButton, SIGNAL(clicked()), signalMapper, SLOT(map())); - connect(signalMapper, SIGNAL(mapped(QWidget*)),this, SLOT(VisParameterCallback(QWidget*))); -#else - connect(applyButton, &QPushButton::clicked , [this, paramWidget](){ this->VisParameterCallback(paramWidget);}); -#endif - } else { + auto applyButton = new QPushButton("Apply"); + if (! isDialog) { + gridLayout->addWidget(applyButton, n_parameterEntry - nbColorParameter, 1); + connect(applyButton, &QPushButton::clicked, + [this, paramWidget]() { this->VisParameterCallback(paramWidget); }); + } + else { // Apply/Cancel buttons - applyButton->setAutoDefault( TRUE ); - applyButton->setDefault( TRUE ); + applyButton->setAutoDefault(true); + applyButton->setDefault(true); - QPushButton* cancelButton = new QPushButton( tr( "&Cancel" )); - cancelButton->setAutoDefault( TRUE ); - gridLayout->addWidget(cancelButton,n_parameterEntry-nbColorParameter,1); - gridLayout->addWidget(applyButton,n_parameterEntry-nbColorParameter,0); + auto cancelButton = new QPushButton(tr("&Cancel")); + cancelButton->setAutoDefault(true); + gridLayout->addWidget(cancelButton, n_parameterEntry - nbColorParameter, 1); + gridLayout->addWidget(applyButton, n_parameterEntry - nbColorParameter, 0); -#if QT_VERSION < 0x050600 - QSignalMapper* signalMapper = new QSignalMapper(this); - signalMapper->setMapping(applyButton, paramWidget); - connect(applyButton, SIGNAL(clicked()), signalMapper, SLOT(map())); - connect(signalMapper, SIGNAL(mapped(QWidget*)),this, SLOT(VisParameterCallback(QWidget*))); -#else - connect(applyButton, &QPushButton::clicked , [this, paramWidget](){ this->VisParameterCallback(paramWidget);}); -#endif + connect(applyButton, &QPushButton::clicked, + [this, paramWidget]() { this->VisParameterCallback(paramWidget); }); - QWidget * parentCheck = aParent; - QDialog* parentDialog = NULL; + QWidget* parentCheck = aParent; + QDialog* parentDialog = nullptr; G4bool found = false; - while ((parentCheck->parentWidget()) != NULL) { + while ((parentCheck->parentWidget()) != nullptr) { parentCheck = parentCheck->parentWidget(); parentDialog = dynamic_cast(parentCheck); - if (parentDialog) { - connect( applyButton, SIGNAL( clicked() ), parentDialog, SLOT( accept() ) ); - connect( cancelButton, SIGNAL( clicked() ), parentDialog, SLOT( reject() ) ); + if (parentDialog != nullptr) { + connect(applyButton, SIGNAL(clicked()), parentDialog, SLOT(accept())); + connect(cancelButton, SIGNAL(clicked()), parentDialog, SLOT(reject())); found = true; } } - if (!found) { + if (! found) { return false; } } - if (!aParent->layout()) { + if (aParent->layout() == nullptr) { aParent->setLayout(new QVBoxLayout()); } aParent->layout()->addWidget(paramWidget); @@ -3276,38 +3390,30 @@ G4bool G4UIQt::CreateCommandWidget(G4UIcommand* aCommand, QWidget* aParent, G4bo return true; } - /** Find a treeItemWidget in the help tree @param aCommand item's String to look for @return item if found, NULL if not */ -QTreeWidgetItem* G4UIQt::FindTreeItem( - QTreeWidgetItem *aParent -,const QString& aCommand -) +QTreeWidgetItem* G4UIQt::FindTreeItem(QTreeWidgetItem* aParent, const QString& aCommand) { - if (aParent == NULL) return NULL; + if (aParent == nullptr) return nullptr; // Suppress last "/" QString myCommand = aCommand; - if (myCommand.lastIndexOf("/") == (myCommand.size()-1)) { - myCommand = myCommand.left(myCommand.size()-1); + if (myCommand.lastIndexOf("/") == (myCommand.size() - 1)) { + myCommand = myCommand.left(myCommand.size() - 1); } - if (GetLongCommandPath(aParent) == myCommand) - return aParent; + if (GetLongCommandPath(aParent) == myCommand) return aParent; - QTreeWidgetItem * tmp = NULL; - for (G4int a=0;achildCount();++a) { - if (!tmp) - tmp = FindTreeItem(aParent->child(a),myCommand); + QTreeWidgetItem* tmp = nullptr; + for (G4int a = 0; a < aParent->childCount(); ++a) { + if (tmp == nullptr) tmp = FindTreeItem(aParent->child(a), myCommand); } return tmp; } - - /** Build the command list parameters in a QString
    Reimplement partialy the G4UIparameter.cc @param aCommand : command to list parameters @@ -3315,71 +3421,68 @@ QTreeWidgetItem* G4UIQt::FindTreeItem( @see G4UIcommand::List() @return the command list parameters, or "" if nothing */ -QString G4UIQt::GetCommandList ( - const G4UIcommand *aCommand - ) +QString G4UIQt::GetCommandList(const G4UIcommand* aCommand) { - - QString txt =""; - if (aCommand == NULL) - return txt; + QString txt = ""; + if (aCommand == nullptr) return txt; G4String commandPath = aCommand->GetCommandPath(); G4String rangeString = aCommand->GetRange(); - G4int n_guidanceEntry = (G4int)aCommand->GetGuidanceEntries(); - G4int n_parameterEntry = (G4int)aCommand->GetParameterEntries(); + auto n_guidanceEntry = (G4int)aCommand->GetGuidanceEntries(); + auto n_parameterEntry = (G4int)aCommand->GetParameterEntries(); - if ((commandPath == "") && - (rangeString == "") && - (n_guidanceEntry == 0) && - (n_parameterEntry == 0)) { + if ((commandPath.empty()) && (rangeString.empty()) && (n_guidanceEntry == 0) && + (n_parameterEntry == 0)) + { return txt; } - if((commandPath.length()-1)!='/') { + if ((commandPath.length() - 1) != '/') { txt += "Command " + QString((char*)(commandPath).data()) + "\n"; } txt += "Guidance :\n"; - for( G4int i_thGuidance=0; i_thGuidance < n_guidanceEntry; i_thGuidance++ ) { + for (G4int i_thGuidance = 0; i_thGuidance < n_guidanceEntry; i_thGuidance++) { txt += QString((char*)(aCommand->GetGuidanceLine(i_thGuidance)).data()) + "\n"; } - if( ! rangeString.empty() ) { + if (! rangeString.empty()) { txt += " Range of parameters : " + QString((char*)(rangeString).data()) + "\n"; } - if( n_parameterEntry > 0 ) { - G4UIparameter *param; + if (n_parameterEntry > 0) { + G4UIparameter* param; // Re-implementation of G4UIparameter.cc - for( G4int i_thParameter=0; i_thParameterGetParameter(i_thParameter); txt += "\nParameter : " + QString((char*)(param->GetParameterName()).data()) + "\n"; - if( ! param->GetParameterGuidance().empty() ) - txt += QString((char*)(param->GetParameterGuidance()).data())+ "\n" ; + if (! param->GetParameterGuidance().empty()) + txt += QString((char*)(param->GetParameterGuidance()).data()) + "\n"; txt += " Parameter type : " + QString(QChar(param->GetParameterType())) + "\n"; - if(param->IsOmittable()){ + if (param->IsOmittable()) { txt += " Omittable : True\n"; - } else { + } + else { txt += " Omittable : False\n"; } - if( param->GetCurrentAsDefault() ) { + if (param->GetCurrentAsDefault()) { txt += " Default value : taken from the current value\n"; - } else if( ! param->GetDefaultValue().empty() ) { - txt += " Default value : " + QString((char*)(param->GetDefaultValue()).data())+ "\n"; } - if( ! param->GetParameterRange().empty() ) { - txt += " Parameter range : " + QString((char*)(param->GetParameterRange()).data())+ "\n"; + else if (! param->GetDefaultValue().empty()) { + txt += " Default value : " + QString((char*)(param->GetDefaultValue()).data()) + "\n"; } - if( ! param->GetParameterCandidates().empty() ) { - txt += " Candidates : " + QString((char*)(param->GetParameterCandidates()).data())+ "\n"; + if (! param->GetParameterRange().empty()) { + txt += " Parameter range : " + QString((char*)(param->GetParameterRange()).data()) + "\n"; + } + if (! param->GetParameterCandidates().empty()) { + txt += + " Candidates : " + QString((char*)(param->GetParameterCandidates()).data()) + "\n"; } } } return txt; } - /** Build the command list parameters in a QString with HTML
    Reimplement partialy the G4UIparameter.cc @param aCommand : command to list parameters @@ -3387,164 +3490,143 @@ QString G4UIQt::GetCommandList ( @see G4UIcommand::List() @return the command list parameters, or "" if nothing */ -void G4UIQt::updateHelpArea ( - const G4UIcommand *aCommand -) +void G4UIQt::updateHelpArea(const G4UIcommand* aCommand) { - if (!fParameterHelpLabel) - return; - if (!fParameterHelpTable) - return; + if (fParameterHelpLabel == nullptr) return; + if (fParameterHelpTable == nullptr) return; fParameterHelpLabel->setTextInteractionFlags(Qt::NoTextInteraction); QString txt; - if (aCommand == NULL) - return; + if (aCommand == nullptr) return; G4String commandPath = aCommand->GetCommandPath(); G4String rangeString = aCommand->GetRange(); - G4int n_guidanceEntry = (G4int)aCommand->GetGuidanceEntries(); - G4int n_parameterEntry = (G4int)aCommand->GetParameterEntries(); + auto n_guidanceEntry = (G4int)aCommand->GetGuidanceEntries(); + auto n_parameterEntry = (G4int)aCommand->GetParameterEntries(); - if ((commandPath == "") && - (rangeString == "") && - (n_guidanceEntry == 0) && - (n_parameterEntry == 0)) { + if ((commandPath.empty()) && (rangeString.empty()) && (n_guidanceEntry == 0) && + (n_parameterEntry == 0)) + { return; } - if((commandPath.length()-1)!='/') { + if ((commandPath.length() - 1) != '/') { txt += "Command " + QString((char*)(commandPath).data()) + "
    "; } txt += "Guidance : "; QString tmpGuidance = ""; - for( G4int i_thGuidance=0; i_thGuidance < n_guidanceEntry; i_thGuidance++ ) { + for (G4int i_thGuidance = 0; i_thGuidance < n_guidanceEntry; i_thGuidance++) { tmpGuidance = QString((char*)(aCommand->GetGuidanceLine(i_thGuidance)).data()); -#if QT_VERSION < 0x050000 - tmpGuidance = Qt::escape(tmpGuidance); -#else - tmpGuidance = tmpGuidance.toHtmlEscaped(); -#endif - tmpGuidance.replace("\n","
    "); + tmpGuidance = tmpGuidance.toHtmlEscaped(); + tmpGuidance.replace("\n", "
    "); txt += tmpGuidance + "
    "; } - if( ! rangeString.empty() ) { - QString range = QString((char*)(rangeString).data()); -#if QT_VERSION < 0x050000 - range = Qt::escape(range); -#else - range = range.toHtmlEscaped(); -#endif - - txt += "Range of parameters : " + range + "
    "; - } else { + if (! rangeString.empty()) { + QString range = QString((char*)(rangeString).data()); + range = range.toHtmlEscaped(); + txt += "Range of parameters : " + range + "
    "; + } + else { txt += "
    "; } fParameterHelpLabel->setHtml(txt); - if( n_parameterEntry > 0 ) { - G4UIparameter *param; + if (n_parameterEntry > 0) { + G4UIparameter* param; // Re-implementation of G4UIparameter.cc fParameterHelpTable->clear(); fParameterHelpTable->setRowCount(n_parameterEntry); fParameterHelpTable->setColumnCount(8); - fParameterHelpTable->setHorizontalHeaderLabels(QStringList() << - tr("") << - tr("Parameter") << - tr("Guidance") << - tr("Type") << - tr("Ommitable") << - tr("Default") << - tr("Range") << - tr("Candidate")); - fParameterHelpTable->setColumnWidth(2,60); + fParameterHelpTable->setHorizontalHeaderLabels( + QStringList() << tr("") << tr("Parameter") << tr("Guidance") << tr("Type") << tr("Ommitable") + << tr("Default") << tr("Range") << tr("Candidate")); + fParameterHelpTable->setColumnWidth(2, 60); fParameterHelpTable->verticalHeader()->setVisible(false); - fParameterHelpTable->setAlternatingRowColors (true); -#if QT_VERSION < 0x050000 - fParameterHelpTable->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents); - fParameterHelpTable->horizontalHeader()->setResizeMode(2, QHeaderView::Stretch); -#else + fParameterHelpTable->setAlternatingRowColors(true); fParameterHelpTable->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); fParameterHelpTable->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Stretch); -#endif fParameterHelpTable->setWordWrap(true); QTableWidgetItem* t = fParameterHelpTable->horizontalHeaderItem(1); QFont fnt = t->font(); G4int size = fnt.pointSize(); - fnt.setPointSize(size-2); + fnt.setPointSize(size - 2); - for( G4int a=0; aGetParameter(a); - fParameterHelpTable->setItem(a, 0, new QTableWidgetItem(QString::number(a+1))); + fParameterHelpTable->setItem(a, 0, new QTableWidgetItem(QString::number(a + 1))); - fParameterHelpTable->setItem(a, 1, new QTableWidgetItem(QString((char*)(param->GetParameterName()).data()))); - if( ! param->GetParameterGuidance().empty() ) { - fParameterHelpTable->setItem(a, 2, new QTableWidgetItem(QString((char*)(param->GetParameterGuidance()).data()))); + fParameterHelpTable->setItem( + a, 1, new QTableWidgetItem(QString((char*)(param->GetParameterName()).data()))); + if (! param->GetParameterGuidance().empty()) { + fParameterHelpTable->setItem( + a, 2, new QTableWidgetItem(QString((char*)(param->GetParameterGuidance()).data()))); } - fParameterHelpTable->setItem(a, 3, new QTableWidgetItem(QString(QChar(param->GetParameterType())))); + fParameterHelpTable->setItem( + a, 3, new QTableWidgetItem(QString(QChar(param->GetParameterType())))); - if(param->IsOmittable()){ + if (param->IsOmittable()) { fParameterHelpTable->setItem(a, 4, new QTableWidgetItem(QString("True"))); - } else { + } + else { fParameterHelpTable->setItem(a, 4, new QTableWidgetItem(QString("False"))); } - if( param->GetCurrentAsDefault() ) { - fParameterHelpTable->setItem(a, 5, new QTableWidgetItem(QString("taken from the current value"))); - } else if( ! param->GetDefaultValue().empty() ) { - fParameterHelpTable->setItem(a, 5, new QTableWidgetItem(QString((char*)(param->GetDefaultValue()).data()))); + if (param->GetCurrentAsDefault()) { + fParameterHelpTable->setItem( + a, 5, new QTableWidgetItem(QString("taken from the current value"))); + } + else if (! param->GetDefaultValue().empty()) { + fParameterHelpTable->setItem( + a, 5, new QTableWidgetItem(QString((char*)(param->GetDefaultValue()).data()))); } - if( ! param->GetParameterRange().empty() ) { - fParameterHelpTable->setItem(a, 6, new QTableWidgetItem(QString((char*)(param->GetParameterRange()).data()))); + if (! param->GetParameterRange().empty()) { + fParameterHelpTable->setItem( + a, 6, new QTableWidgetItem(QString((char*)(param->GetParameterRange()).data()))); } - if( ! param->GetParameterCandidates().empty() ) { - fParameterHelpTable->setItem(a, 7, new QTableWidgetItem(QString((char*)(param->GetParameterCandidates()).data()))); + if (! param->GetParameterCandidates().empty()) { + fParameterHelpTable->setItem( + a, 7, new QTableWidgetItem(QString((char*)(param->GetParameterCandidates()).data()))); } // tooltips - for (G4int b=0; b<8; ++b) { - QTableWidgetItem* tmp = fParameterHelpTable->item(a,b); - if (tmp) { + for (G4int b = 0; b < 8; ++b) { + QTableWidgetItem* tmp = fParameterHelpTable->item(a, b); + if (tmp != nullptr) { tmp->setToolTip(tmp->text()); tmp->setFlags(Qt::NoItemFlags); } } fParameterHelpTable->resizeRowToContents(a); } - for (G4int c=0; c<8; ++c) { - if (c !=2) { + for (G4int c = 0; c < 8; ++c) { + if (c != 2) { fParameterHelpTable->resizeColumnToContents(c); } } fParameterHelpLabel->setVisible(true); fParameterHelpTable->setVisible(true); - } } - /** Return true if this command takes almost a number (int, double, bool, string) as an input or a string with a candidate list */ -G4bool G4UIQt::IsGUICommand( - const G4UIcommand *aCommand -) +G4bool G4UIQt::IsGUICommand(const G4UIcommand* aCommand) { - if (aCommand == NULL) - return false; + if (aCommand == nullptr) return false; - G4int n_parameterEntry = (G4int)aCommand->GetParameterEntries(); + auto n_parameterEntry = (G4int)aCommand->GetParameterEntries(); - if( n_parameterEntry > 0 ) { - G4UIparameter *param; + if (n_parameterEntry > 0) { + G4UIparameter* param; // Re-implementation of G4UIparameter.cc - for( G4int i_thParameter=0; i_thParameterGetParameter(i_thParameter); if (QString(QChar(param->GetParameterType())) == "d") { return true; @@ -3563,16 +3645,9 @@ G4bool G4UIQt::IsGUICommand( return false; } - /** Implement G4VBasicShell vurtual function */ -G4bool G4UIQt::GetHelpChoice( - G4int& -) -{ - return true; -} - +G4bool G4UIQt::GetHelpChoice(G4int&) { return true; } /** Event filter method. Every event from QtApplication goes here.
    We apply a filter only for the Up and Down Arrow press when the QLineEdit
    @@ -3581,15 +3656,13 @@ G4bool G4UIQt::GetHelpChoice( @param obj Emitter of the event @param event Kind of event */ -G4bool G4UIQt::eventFilter( // Should stay with a minuscule eventFilter because of Qt - QObject *aObj -,QEvent *aEvent -) +G4bool G4UIQt::eventFilter( // Should stay with a minuscule eventFilter because of Qt + QObject* aObj, QEvent* aEvent) { G4bool tabKeyPress = false; G4bool moveCommandCursor = false; - if (aObj == NULL) return false; - if (aEvent == NULL) return false; + if (aObj == nullptr) return false; + if (aEvent == nullptr) return false; if (aObj == fHistoryTBTableList) { if (aEvent->type() == QEvent::KeyPress) { @@ -3599,67 +3672,73 @@ G4bool G4UIQt::eventFilter( // Should stay with a minuscule eventFilter because if (aObj == fCompleter->popup()) { if (aEvent->type() == QEvent::KeyPress) { - QKeyEvent *e = static_cast(aEvent); + auto e = static_cast(aEvent); if (e->key() == (Qt::Key_Tab)) { tabKeyPress = true; } - } else if ( aEvent->type() == QEvent::Hide ) { - // Store this value - QString c = fCommandArea->text(); - fLastCompleteCommand = c.left(c.indexOf("<")); + } + else if (aEvent->type() == QEvent::Hide) { + // Store this value + QString c = fCommandArea->text(); + fLastCompleteCommand = c.left(c.indexOf("<")); } } if (aObj == fCommandArea) { if (aEvent->type() == QEvent::KeyPress) { - QKeyEvent *e = static_cast(aEvent); - if ((e->key() == (Qt::Key_Down)) || - (e->key() == (Qt::Key_PageDown)) || - (e->key() == (Qt::Key_Up)) || - (e->key() == (Qt::Key_PageUp))) { + auto e = static_cast(aEvent); + if ((e->key() == (Qt::Key_Down)) || (e->key() == (Qt::Key_PageDown)) || + (e->key() == (Qt::Key_Up)) || (e->key() == (Qt::Key_PageUp))) + { G4int selection = fHistoryTBTableList->currentRow(); - if (fHistoryTBTableList->count()) { + if (fHistoryTBTableList->count() != 0) { if (selection == -1) { - selection = fHistoryTBTableList->count()-1; - } else { + selection = fHistoryTBTableList->count() - 1; + } + else { if (e->key() == (Qt::Key_Down)) { - if (selection <(fHistoryTBTableList->count()-1)) - selection++; - } else if (e->key() == (Qt::Key_PageDown)) { - selection = fHistoryTBTableList->count()-1; - } else if (e->key() == (Qt::Key_Up)) { - if (selection >0) - selection --; - } else if (e->key() == (Qt::Key_PageUp)) { + if (selection < (fHistoryTBTableList->count() - 1)) selection++; + } + else if (e->key() == (Qt::Key_PageDown)) { + selection = fHistoryTBTableList->count() - 1; + } + else if (e->key() == (Qt::Key_Up)) { + if (selection > 0) selection--; + } + else if (e->key() == (Qt::Key_PageUp)) { selection = 0; } } fHistoryTBTableList->clearSelection(); -#if QT_VERSION < 0x040202 - fHistoryTBTableList->setItemSelected(fHistoryTBTableList->item(selection),true); -#else fHistoryTBTableList->item(selection)->setSelected(true); -#endif fHistoryTBTableList->setCurrentItem(fHistoryTBTableList->item(selection)); } moveCommandCursor = true; - } else if (e->key() == (Qt::Key_Tab)) { + } + else if (e->key() == (Qt::Key_Tab)) { tabKeyPress = true; - } else if (((e->modifiers () == Qt::ControlModifier) || (e->modifiers () == Qt::MetaModifier)) && (e->key() == Qt::Key_A)) { - fCommandArea->home(false); - return true; - } else if (((e->modifiers () == Qt::ControlModifier) || (e->modifiers () == Qt::MetaModifier)) && (e->key() == Qt::Key_E)) { - fCommandArea->end(false); - return true; } - } else if (aEvent->type() == QEvent::Paint) { - if (fLastCompleteCommand != "") { - fCommandArea->setText(fLastCompleteCommand); - fLastCompleteCommand = ""; - } + else if (((e->modifiers() == Qt::ControlModifier) || (e->modifiers() == Qt::MetaModifier)) && + (e->key() == Qt::Key_A)) + { + fCommandArea->home(false); + return true; + } + else if (((e->modifiers() == Qt::ControlModifier) || (e->modifiers() == Qt::MetaModifier)) && + (e->key() == Qt::Key_E)) + { + fCommandArea->end(false); + return true; + } + } + else if (aEvent->type() == QEvent::Paint) { + if (fLastCompleteCommand != "") { + fCommandArea->setText(fLastCompleteCommand); + fLastCompleteCommand = ""; + } } } - if (tabKeyPress == true) { + if (tabKeyPress) { G4String ss = Complete(fCommandArea->text().toStdString().c_str()); fCommandArea->setText((char*)(ss.data())); fCommandArea->setFocus(); @@ -3669,26 +3748,27 @@ G4bool G4UIQt::eventFilter( // Should stay with a minuscule eventFilter because // specific #ifdef } - G4bool res= false; + G4bool res = false; // change cursor position if needed - if (moveCommandCursor == true) { - fCommandArea->setCursorPosition ( fCommandArea->text().length() ); - fCommandArea->setCursorPosition (4); - } else { + if (moveCommandCursor) { + fCommandArea->setCursorPosition((int)fCommandArea->text().length()); + fCommandArea->setCursorPosition(4); + } + else { // pass the event on to the parent class res = QObject::eventFilter(aObj, aEvent); } return res; } - -void G4UIQt::UpdateCommandCompleter() { - if (!fCommandArea) return; +void G4UIQt::UpdateCommandCompleter() +{ + if (fCommandArea == nullptr) return; // remove previous one - fCommandArea->setCompleter(NULL); - if (fCompleter) { - if (fCompleter->popup()) { + fCommandArea->setCompleter(nullptr); + if (fCompleter != nullptr) { + if (fCompleter->popup() != nullptr) { fCompleter->popup()->removeEventFilter(this); } } @@ -3698,26 +3778,25 @@ void G4UIQt::UpdateCommandCompleter() { // set all dir visibles in completion G4UImanager* UI = G4UImanager::GetUIpointer(); - G4UIcommandTree * commandTreeTop = UI->GetTree(); + G4UIcommandTree* commandTreeTop = UI->GetTree(); G4UIcommandTree* aTree = commandTreeTop->FindCommandTree("/"); - if (aTree) { - int Ndir= aTree-> GetTreeEntry(); + if (aTree != nullptr) { + int Ndir = aTree->GetTreeEntry(); fCompleter->setMaxVisibleItems(Ndir); } fCommandArea->setCompleter(fCompleter); fCompleter->popup()->installEventFilter(this); } - -QStandardItemModel* G4UIQt::CreateCompleterModel(G4String aCmd) { - - QList< QStandardItem*> dirModelList; - QList< QStandardItem*> commandModelList; - QList< QStandardItem*> subDirModelList; - QList< QStandardItem*> subCommandModelList; +QStandardItemModel* G4UIQt::CreateCompleterModel(G4String aCmd) +{ + QList dirModelList; + QList commandModelList; + QList subDirModelList; + QList subCommandModelList; G4String strtmp; - G4int nMatch= 0; + G4int nMatch = 0; G4String pName = aCmd; G4String remainingPath = aCmd; @@ -3725,40 +3804,40 @@ QStandardItemModel* G4UIQt::CreateCompleterModel(G4String aCmd) { G4String matchingPath = empty; // find the tree - auto jpre= pName.rfind('/'); - if(jpre != G4String::npos) pName.erase(jpre+1); + auto jpre = pName.rfind('/'); + if (jpre != G4String::npos) pName.erase(jpre + 1); G4UImanager* UI = G4UImanager::GetUIpointer(); - G4UIcommandTree * commandTreeTop = UI->GetTree(); + G4UIcommandTree* commandTreeTop = UI->GetTree(); G4UIcommandTree* aTree = commandTreeTop->FindCommandTree(pName); - if (aTree) { - G4int Ndir= aTree-> GetTreeEntry(); - G4int Ncmd= aTree-> GetCommandEntry(); + if (aTree != nullptr) { + G4int Ndir = aTree->GetTreeEntry(); + G4int Ncmd = aTree->GetCommandEntry(); // directory ... - for(G4int idir=1; idir<=Ndir; ++idir) { - G4String fpdir= aTree-> GetTree(idir)-> GetPathName(); + for (G4int idir = 1; idir <= Ndir; ++idir) { + G4String fpdir = aTree->GetTree(idir)->GetPathName(); // matching test - if( fpdir.find(remainingPath, 0) == 0) { - if(nMatch==0) { + if (fpdir.find(remainingPath, 0) == 0) { + if (nMatch == 0) { matchingPath = fpdir; - } else { - matchingPath = aTree->GetFirstMatchedString(fpdir,matchingPath); + } + else { + matchingPath = aTree->GetFirstMatchedString(fpdir, matchingPath); } nMatch++; // append to dir model list - QStandardItem* item1 = new QStandardItem(fpdir.data()); + auto item1 = new QStandardItem(fpdir.data()); QIcon i = QIcon(*fDirIcon); - item1->setData(1); // dir + item1->setData(1); // dir item1->setIcon(QIcon(*fDirIcon)); dirModelList.append(item1); // Go recursively QStandardItemModel* subModel = CreateCompleterModel(fpdir.data()); - for (G4int a=0; a< subModel->rowCount(); ++a) { - + for (G4int a = 0; a < subModel->rowCount(); ++a) { // copy item (an item could only be part of one model - QStandardItem* tempItem = new QStandardItem(subModel->item(a)->text()); + auto tempItem = new QStandardItem(subModel->item(a)->text()); tempItem->setIcon(subModel->item(a)->icon()); tempItem->setToolTip(subModel->item(a)->toolTip()); tempItem->setData(subModel->item(a)->data()); @@ -3780,53 +3859,53 @@ QStandardItemModel* G4UIQt::CreateCompleterModel(G4String aCmd) { G4int n_parameterEntry; G4String rangeString; G4int n_guidanceEntry; - G4UIcommand * command; - G4UIparameter *param; + G4UIcommand* command; + G4UIparameter* param; std::string tooltip; G4String params; - for(G4int icmd=1; icmd<=Ncmd; ++icmd){ + for (G4int icmd = 1; icmd <= Ncmd; ++icmd) { tooltip = ""; params = " "; - command = aTree-> GetCommand(icmd); - G4String longCommandName= aTree-> GetPathName() + - command -> GetCommandName(); + command = aTree->GetCommand(icmd); + G4String longCommandName = aTree->GetPathName() + command->GetCommandName(); rangeString = command->GetRange(); n_guidanceEntry = (G4int)command->GetGuidanceEntries(); n_parameterEntry = (G4int)command->GetParameterEntries(); - // matching test - if( longCommandName.find(remainingPath, 0) ==0) { - if(nMatch==0) { - matchingPath= longCommandName + " "; - } else { - strtmp= longCommandName + " "; - matchingPath= aTree->GetFirstMatchedString(matchingPath, strtmp); + if (longCommandName.find(remainingPath, 0) == 0) { + if (nMatch == 0) { + matchingPath = longCommandName + " "; + } + else { + strtmp = longCommandName + " "; + matchingPath = aTree->GetFirstMatchedString(matchingPath, strtmp); } // guidance - for( G4int i_thGuidance=0; i_thGuidance < n_guidanceEntry; i_thGuidance++ ) { + for (G4int i_thGuidance = 0; i_thGuidance < n_guidanceEntry; i_thGuidance++) { tooltip += std::string((command->GetGuidanceLine(i_thGuidance)).data()); - if (i_thGuidance < n_guidanceEntry-1 ) { - tooltip += "\n"; + if (i_thGuidance < n_guidanceEntry - 1) { + tooltip += "\n"; } } // parameters - for( G4int a=0; aGetParameter(a); - if (param->IsOmittable()) { - params += "[<" + param->GetParameterName()+">] "; - } else { - params += "<" + param->GetParameterName()+"> "; - } + if (param->IsOmittable()) { + params += "[<" + param->GetParameterName() + ">] "; + } + else { + params += "<" + param->GetParameterName() + "> "; + } } nMatch++; // Append to command model list - QStandardItem* item = new QStandardItem(G4String(longCommandName + params).data()); - item->setData(0); // command + auto item = new QStandardItem(G4String(longCommandName + params).data()); + item->setData(0); // command item->setIcon(QIcon(*fCommandIcon)); item->setToolTip(tooltip.c_str()); @@ -3835,28 +3914,27 @@ QStandardItemModel* G4UIQt::CreateCompleterModel(G4String aCmd) { } } - QStandardItemModel* model = new QStandardItemModel(); + auto model = new QStandardItemModel(); // initialize the model model->setColumnCount(1); // concat models - for (G4int a= 0; a< dirModelList.size(); ++a) { - model->appendRow(dirModelList.at(a)); + for (auto a : dirModelList) { + model->appendRow(a); } - for (G4int a= 0; a< subDirModelList.size(); ++a) { - model->appendRow(subDirModelList.at(a)); + for (auto a : subDirModelList) { + model->appendRow(a); } - for (G4int a= 0; a< commandModelList.size(); ++a) { - model->appendRow(commandModelList.at(a)); + for (auto a : commandModelList) { + model->appendRow(a); } - for (G4int a= 0; a< subCommandModelList.size(); ++a) { - model->appendRow(subCommandModelList.at(a)); + for (auto a : subCommandModelList) { + model->appendRow(a); } return model; } - /***************************************************************************/ // // SLOTS DEFINITIONS @@ -3864,69 +3942,54 @@ QStandardItemModel* G4UIQt::CreateCompleterModel(G4String aCmd) { /***************************************************************************/ /** Called when user give "help" command. -*/ -void G4UIQt::ShowHelpCallback ( -) -{ - TerminalHelp(""); -} - + */ +void G4UIQt::ShowHelpCallback() { TerminalHelp(""); } /** Called when user click on clear button. Clear the text Output area -*/ -void G4UIQt::ClearButtonCallback ( -) + */ +void G4UIQt::ClearButtonCallback() { fCoutTBTextArea->clear(); fG4OutputString.clear(); } /** Called when user exit session -*/ -void G4UIQt::ExitSession ( -) -{ - SessionTerminate(); -} + */ +void G4UIQt::ExitSession() { SessionTerminate(); } -void G4UIQt::ExitHelp( -) const -{ -} +void G4UIQt::ExitHelp() const {} /** Callback call when "click on a menu entry.
    Send the associated command to geant4 */ -void G4UIQt::CommandEnteredCallback ( -) +void G4UIQt::CommandEnteredCallback() { // split by any new line character fCommandArea->setText(fCommandArea->text().trimmed()); -#if QT_VERSION < 0x050F00 - // Before Qt5.15 - QStringList list = fCommandArea->text().split(QRegExp("[\r\n]"),QString::SkipEmptyParts); +#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 0)) + QStringList list = fCommandArea->text().split(QRegularExpression("[\r\n]"),QString::SkipEmptyParts); #else - // Qt5.15 and beyond - QStringList list = fCommandArea->text().split(QRegExp("[\r\n]"),Qt::SkipEmptyParts); + QStringList list = fCommandArea->text().split(QRegularExpression("[\r\n]"),Qt::SkipEmptyParts); #endif // Apply for all commands - for (G4int a=0; a< list.size(); ++a) { - QString txt (list[a].trimmed()); + for (G4int a = 0; a < list.size(); ++a) { + QString txt(list[a].trimmed()); if (txt != "") { fHistoryTBTableList->addItem(txt); fHistoryTBTableList->clearSelection(); - fHistoryTBTableList->setCurrentItem(NULL); + fHistoryTBTableList->setCurrentItem(nullptr); fCommandArea->setText(""); - G4Qt* interactorManager = G4Qt::getInstance (); - if (interactorManager) { + G4Qt* interactorManager = G4Qt::getInstance(); + if (interactorManager != nullptr) { interactorManager->FlushAndWaitExecution(); } G4String command = txt.toStdString().c_str(); - if (command.substr(0,4) != "help") { - ApplyShellCommand (command,exitSession,exitPause); - } else { + if (command.substr(0, 4) != "help") { + ApplyShellCommand(command, exitSession, exitPause); + } + else { ActivateCommand(command); } } @@ -3940,129 +4003,123 @@ void G4UIQt::CommandEnteredCallback ( // Rebuild command completion UpdateCommandCompleter(); - if(exitSession==true) - SessionTerminate(); + if (exitSession) SessionTerminate(); } - /** Callback when the text in the line edit is changed. When a newline is inserted, trigger the Activate Command on this text end set unchanged the end of the line after the newline. */ -void G4UIQt::CommandEditedCallback(const QString &) +void G4UIQt::CommandEditedCallback(const QString&) { -#if QT_VERSION < 0x050F00 - // Before Qt5.15 - QStringList list = fCommandArea->text().split(QRegExp("[\r\n]"),QString::SkipEmptyParts); +#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 0)) + QStringList list = fCommandArea->text().split(QRegularExpression("[\r\n]"), QString::SkipEmptyParts); #else - // Qt5.15 and beyond - QStringList list = fCommandArea->text().split(QRegExp("[\r\n]"),Qt::SkipEmptyParts); + QStringList list = fCommandArea->text().split(QRegularExpression("[\r\n]"), Qt::SkipEmptyParts); #endif - if (list.size() > 1) { // trigger ActivateCommand - for (G4int a=0; a 1) { // trigger ActivateCommand + for (G4int a = 0; a < list.size() - 1; ++a) { // set only the first part fCommandArea->setText(list[a]); // trigger callback CommandEnteredCallback(); } // reset unfinished command - fCommandArea->setText(list[list.size()-1]); + fCommandArea->setText(list[list.size() - 1]); } } - /** Callback when one of the scene/vis parameters has changed */ -void G4UIQt::VisParameterCallback(QWidget* widget){ - if (widget == NULL) { +void G4UIQt::VisParameterCallback(QWidget* widget) +{ + if (widget == nullptr) { return; } // Look in all the Grid layout, but only column 1 (0 is the parameter name) - QGridLayout* grid = dynamic_cast(widget->layout()); - if (grid == 0) { + auto grid = dynamic_cast(widget->layout()); + if (grid == nullptr) { return; } QString command; -#if QT_VERSION < 0x040400 - QWidget* name = grid->itemAt(grid->columnCount()*(grid->rowCount()-2))->widget(); -#else - QWidget* name = grid->itemAtPosition(grid->rowCount()-1,0)->widget(); -#endif - if (dynamic_cast(name) == 0) { + QWidget* name = grid->itemAtPosition(grid->rowCount() - 1, 0)->widget(); + if (dynamic_cast(name) == nullptr) { return; } - command += (dynamic_cast(name))->text()+" "; + command += (dynamic_cast(name))->text() + " "; - for (G4int a=0;arowCount()-1; ++a) { -#if QT_VERSION < 0x040400 - QWidget* widgetTmp = grid->itemAt(a*grid->columnCount()+1)->widget(); -#else - QWidget* widgetTmp = grid->itemAtPosition(a,1)->widget(); -#endif + for (G4int a = 0; a < grid->rowCount() - 1; ++a) { + QWidget* widgetTmp = grid->itemAtPosition(a, 1)->widget(); // 4 kind of widgets : QLineEdit / QComboBox / radioButtonsGroup / QPushButton (color chooser) - if (widgetTmp != NULL) { - - if (dynamic_cast(widgetTmp) != 0) { - command += (dynamic_cast(widgetTmp))->text()+" "; - - } else if (dynamic_cast(widgetTmp) != 0){ - command += (dynamic_cast(widgetTmp))->itemText((dynamic_cast(widgetTmp))->currentIndex())+" "; + if (widgetTmp != nullptr) { + if (dynamic_cast(widgetTmp) != nullptr) { + command += (dynamic_cast(widgetTmp))->text() + " "; + } + else if (dynamic_cast(widgetTmp) != nullptr) { + command += (dynamic_cast(widgetTmp)) + ->itemText((dynamic_cast(widgetTmp))->currentIndex()) + + " "; // Color chooser - } else if (dynamic_cast(widgetTmp) != 0){ - command += widgetTmp->accessibleName()+" "; + } + else if (dynamic_cast(widgetTmp) != nullptr) { + command += widgetTmp->accessibleName() + " "; // Check for Button group - } else if (dynamic_cast(widgetTmp) != 0){ - if (widgetTmp->layout()->count() > 0){ - if (dynamic_cast(widgetTmp->layout()->itemAt(0)->widget()) != 0) { - QAbstractButton * checked = (dynamic_cast(widgetTmp->layout()->itemAt(0)->widget()))->group()->checkedButton(); - if (checked != 0) { - command += (dynamic_cast(widgetTmp->layout()->itemAt(0)->widget()))->group()->checkedButton()->text()+" "; + } + else if (dynamic_cast(widgetTmp) != nullptr) { + if (widgetTmp->layout()->count() > 0) { + if (dynamic_cast(widgetTmp->layout()->itemAt(0)->widget()) != nullptr) { + QAbstractButton* checked = + (dynamic_cast(widgetTmp->layout()->itemAt(0)->widget())) + ->group() + ->checkedButton(); + if (checked != nullptr) { + command += (dynamic_cast(widgetTmp->layout()->itemAt(0)->widget())) + ->group() + ->checkedButton() + ->text() + + " "; } } } - } } } if (command != "") { G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI != NULL) { + if (UI != nullptr) { UI->ApplyCommand(command.toStdString().c_str()); } } } - /** Callback call when "enter" clicked on the command zone.
    If command has no parameters :send the command to geant4 Else, open a dialog for parameters input @param aCommand */ -void G4UIQt::ButtonCallback ( - const QString& aCommand -) +void G4UIQt::ButtonCallback(const QString& aCommand) { G4String ss = G4StrUtil::lstrip_copy(G4String(aCommand.toStdString().c_str())); G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI==NULL) return; - G4UIcommandTree * treeTop = UI->GetTree(); + if (UI == nullptr) return; + G4UIcommandTree* treeTop = UI->GetTree(); G4UIcommand* command = treeTop->FindPath(ss); - if (command) { + if (command != nullptr) { // if is GUI, then open a dialog if (IsGUICommand(command)) { - QDialog* menuParameterDialog = new QDialog(); + auto menuParameterDialog = new QDialog(); - if (CreateVisCommandGroupAndToolBox(command,menuParameterDialog,1,true)) { - menuParameterDialog->setWindowTitle (aCommand); - menuParameterDialog->setSizePolicy (QSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum)); + if (CreateVisCommandGroupAndToolBox(command, menuParameterDialog, 1, true)) { + menuParameterDialog->setWindowTitle(aCommand); + menuParameterDialog->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum)); // exec this dialog, apply the command automaticaly, and return menuParameterDialog->exec(); @@ -4072,50 +4129,44 @@ void G4UIQt::ButtonCallback ( } } - ApplyShellCommand(ss,exitSession,exitPause); + ApplyShellCommand(ss, exitSession, exitPause); // Rebuild help tree FillHelpTree(); - if(exitSession==true) - SessionTerminate(); + if (exitSession) SessionTerminate(); } - - /** This callback is activated when user selected a item in the help tree -*/ -void G4UIQt::HelpTreeClicCallback ( -) + */ +void G4UIQt::HelpTreeClicCallback() { - QTreeWidgetItem* item = NULL; - if (!fHelpTreeWidget) - return ; + QTreeWidgetItem* item = nullptr; + if (fHelpTreeWidget == nullptr) return; - QList list =fHelpTreeWidget->selectedItems(); - if (list.isEmpty()) - return; + QList list = fHelpTreeWidget->selectedItems(); + if (list.isEmpty()) return; item = list.first(); - if (!item) - return; + if (item == nullptr) return; G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI==NULL) return; - G4UIcommandTree * treeTop = UI->GetTree(); + if (UI == nullptr) return; + G4UIcommandTree* treeTop = UI->GetTree(); std::string itemText = GetLongCommandPath(item).toStdString(); // check if it is a command path if (item->childCount() > 0) { - itemText +="/"; + itemText += "/"; } G4UIcommand* command = treeTop->FindPath(itemText.c_str()); - if (command) { + if (command != nullptr) { updateHelpArea(command); - } else { // this is a command + } + else { // this is a command G4UIcommandTree* path = treeTop->FindCommandTree(itemText.c_str()); - if ( path) { + if (path != nullptr) { // this is not a command, this is a sub directory // We display the Title fParameterHelpLabel->setVisible(true); @@ -4126,69 +4177,54 @@ void G4UIQt::HelpTreeClicCallback ( } /** This callback is activated when user double clic on a item in the help tree -*/ -void G4UIQt::HelpTreeDoubleClicCallback ( -) + */ +void G4UIQt::HelpTreeDoubleClicCallback() { HelpTreeClicCallback(); - QTreeWidgetItem* item = NULL; - if (!fHelpTreeWidget) - return ; + QTreeWidgetItem* item = nullptr; + if (fHelpTreeWidget == nullptr) return; - QList list =fHelpTreeWidget->selectedItems(); - if (list.isEmpty()) - return; + QList list = fHelpTreeWidget->selectedItems(); + if (list.isEmpty()) return; item = list.first(); - if (!item) - return; + if (item == nullptr) return; fCommandArea->clear(); fCommandArea->setText(GetLongCommandPath(item)); } - /** Callback called when user select an old command in the command history
    Give it to the command area. */ -void G4UIQt::CommandHistoryCallback( -) +void G4UIQt::CommandHistoryCallback() { - QListWidgetItem* item = NULL; - if (!fHistoryTBTableList) - return ; + QListWidgetItem* item = nullptr; + if (fHistoryTBTableList == nullptr) return; - - QList list =fHistoryTBTableList->selectedItems(); - if (list.isEmpty()) - return; + QList list = fHistoryTBTableList->selectedItems(); + if (list.isEmpty()) return; item = list.first(); - if (!item) - return; + if (item == nullptr) return; fCommandArea->setText(item->text()); } +void G4UIQt::ThreadComboBoxCallback(int) { CoutFilterCallback(""); } -void G4UIQt::ThreadComboBoxCallback(int) { - CoutFilterCallback(""); -} - - -void G4UIQt::CoutFilterCallback( -const QString &) { - +void G4UIQt::CoutFilterCallback(const QString&) +{ FilterAllOutputTextArea(); fCoutTBTextArea->repaint(); - fCoutTBTextArea->verticalScrollBar()->setSliderPosition(fCoutTBTextArea->verticalScrollBar()->maximum()); - - } - + fCoutTBTextArea->verticalScrollBar()->setSliderPosition( + fCoutTBTextArea->verticalScrollBar()->maximum()); +} -void G4UIQt::SaveOutputCallback(){ - QString fileName = QFileDialog::getSaveFileName(fMainWindow, "Save console output as...", fLastOpenPath, "Save output as..."); +void G4UIQt::SaveOutputCallback() +{ + QString fileName = QFileDialog::getSaveFileName( + fMainWindow, "Save console output as...", fLastOpenPath, "Save output as..."); if (fileName != "") { - QFile data(fileName); if (data.open(QFile::WriteOnly | QFile::Truncate)) { QTextStream out(&data); @@ -4199,29 +4235,23 @@ void G4UIQt::SaveOutputCallback(){ } } - QString G4UIQt::FilterOutput( - const G4UIOutputString& output -,const QString& currentThread -,const QString& filter -) { - + const G4UIOutputString& output, const QString& currentThread, const QString& filter) +{ #ifdef G4MULTITHREADED - if ((currentThread == "All") || - (currentThread == output.fThread)) { + if ((currentThread == "All") || (currentThread == output.fThread)) { #else - if (currentThread == "") { + if (currentThread == "") { #endif - if (output.fText.contains(QRegExp(filter))) { + if (output.fText.contains(QRegularExpression(filter))) { return output.fText; } } return ""; } - -void G4UIQt::FilterAllOutputTextArea() { - +void G4UIQt::FilterAllOutputTextArea() +{ QString currentThread = ""; #ifdef G4MULTITHREADED currentThread = fThreadsFilterComboBox->currentText(); @@ -4237,22 +4267,22 @@ void G4UIQt::FilterAllOutputTextArea() { fCoutTBTextArea->clear(); - for (unsigned int a=0; a"; - post = ""; - } else { - pref = ""; - post = ""; + if (out.fOutputStream == "info") { + pref = ""; + post = ""; + } + else if (out.fOutputStream == "warning") { + pref = ""; + post = ""; + } + else { + pref = ""; + post = ""; } } fCoutTBTextArea->append(pref + out.fText + post); @@ -4260,40 +4290,34 @@ void G4UIQt::FilterAllOutputTextArea() { } } - /** Callback called when user give a new string to look for
    Display a list of matching commands descriptions. If no string is set, will display the complete help tree */ -void G4UIQt::LookForHelpStringCallback( -) +void G4UIQt::LookForHelpStringCallback() { fHelpLine->setText(fHelpLine->text().trimmed()); QString searchText = fHelpLine->text(); fParameterHelpLabel->setText(""); fParameterHelpTable->setVisible(false); - if (searchText =="") { + if (searchText == "") { // clear old help tree fHelpTreeWidget->clear(); FillHelpTree(); return; - } else { - OpenHelpTreeOnCommand(searchText); } + OpenHelpTreeOnCommand(searchText); } - -void G4UIQt::OpenHelpTreeOnCommand( - const QString & searchText -) +void G4UIQt::OpenHelpTreeOnCommand(const QString& searchText) { // the help tree G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI==NULL) return; - G4UIcommandTree * treeTop = UI->GetTree(); + if (UI == nullptr) return; + G4UIcommandTree* treeTop = UI->GetTree(); G4int treeSize = treeTop->GetTreeEntry(); @@ -4304,23 +4328,24 @@ void G4UIQt::OpenHelpTreeOnCommand( int tmp = 0; -#if QT_VERSION < 0x050F00 +#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 0)) // Before Qt5.15 - QMap commandResultMap; - QMap commandChildResultMap; - for (G4int a=0;aFindPath(treeTop->GetTree(a+1)->GetPathName().data()); - tmp = GetCommandList (command).count(searchText,Qt::CaseInsensitive); - if (tmp >0) { - commandResultMap.insertMulti(tmp,QString((char*)(treeTop->GetTree(a+1)->GetPathName()).data())); + QMap commandResultMap; + QMap commandChildResultMap; + for (G4int a = 0; a < treeSize; ++a) { + G4UIcommand* command = treeTop->FindPath(treeTop->GetTree(a + 1)->GetPathName().data()); + tmp = GetCommandList(command).count(searchText, Qt::CaseInsensitive); + if (tmp > 0) { + commandResultMap.insertMulti( + tmp, QString((char*)(treeTop->GetTree(a + 1)->GetPathName()).data())); } // look for childs - commandChildResultMap = LookForHelpStringInChildTree(treeTop->GetTree(a+1),searchText); + commandChildResultMap = LookForHelpStringInChildTree(treeTop->GetTree(a + 1), searchText); // insert new childs - if (!commandChildResultMap.empty()) { - QMap::const_iterator i = commandChildResultMap.constBegin(); + if (! commandChildResultMap.empty()) { + QMap::const_iterator i = commandChildResultMap.constBegin(); while (i != commandChildResultMap.constEnd()) { - commandResultMap.insertMulti(i.key(),i.value()); + commandResultMap.insertMulti(i.key(), i.value()); i++; } commandChildResultMap.clear(); @@ -4328,21 +4353,21 @@ void G4UIQt::OpenHelpTreeOnCommand( } #else // Qt5.15 and beyond - QMultiMap commandResultMap; - QMultiMap commandChildResultMap; - for (G4int a=0;aFindPath(treeTop->GetTree(a+1)->GetPathName().data()); - tmp = GetCommandList (command).count(searchText,Qt::CaseInsensitive); - if (tmp >0) { - commandResultMap.insert(tmp,QString((char*)(treeTop->GetTree(a+1)->GetPathName()).data())); + QMultiMap commandResultMap; + QMultiMap commandChildResultMap; + for (G4int a = 0; a < treeSize; ++a) { + G4UIcommand* command = treeTop->FindPath(treeTop->GetTree(a + 1)->GetPathName().data()); + tmp = (int)GetCommandList(command).count(searchText, Qt::CaseInsensitive); + if (tmp > 0) { + commandResultMap.insert(tmp, QString((char*)(treeTop->GetTree(a + 1)->GetPathName()).data())); } // look for childs - commandChildResultMap = LookForHelpStringInChildTree(treeTop->GetTree(a+1),searchText); + commandChildResultMap = LookForHelpStringInChildTree(treeTop->GetTree(a + 1), searchText); // insert new childs - if (!commandChildResultMap.empty()) { - QMap::const_iterator i = commandChildResultMap.constBegin(); + if (! commandChildResultMap.empty()) { + auto i = commandChildResultMap.constBegin(); while (i != commandChildResultMap.constEnd()) { - commandResultMap.insert(i.key(),i.value()); + commandResultMap.insert(i.key(), i.value()); ++i; } commandChildResultMap.clear(); @@ -4363,212 +4388,190 @@ void G4UIQt::OpenHelpTreeOnCommand( return; } - QMap::const_iterator i = commandResultMap.constEnd(); + auto i = commandResultMap.constEnd(); i--; // 10 maximum progress values - G4float multValue = 10.0/(G4float)(i.key()); + G4float multValue = 10.0 / (G4float)(i.key()); QString progressChar = "|"; QString progressStr = "|"; - QTreeWidgetItem * newItem; + QTreeWidgetItem* newItem; G4bool end = false; - while (!end) { + while (! end) { if (i == commandResultMap.constBegin()) { end = true; } - for(G4int a=0;asetText(0,commandStr); - newItem->setText(1,progressStr); + newItem->setText(0, commandStr); + newItem->setText(1, progressStr); fHelpTreeWidget->addTopLevelItem(newItem); -#if QT_VERSION < 0x040200 -#else - newItem->setForeground ( 1, QBrush(Qt::blue) ); -#endif + newItem->setForeground(1, QBrush(Qt::blue)); progressStr = "|"; i--; } - fHelpTreeWidget->resizeColumnToContents (0); - fHelpTreeWidget->sortItems(1,Qt::DescendingOrder); + fHelpTreeWidget->resizeColumnToContents(0); + fHelpTreeWidget->sortItems(1, Qt::DescendingOrder); // fHelpTreeWidget->setColumnWidth(1,10);//resizeColumnToContents (1); } -#if QT_VERSION < 0x050F00 +#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 0)) // Before Qt5.15 -QMap G4UIQt::LookForHelpStringInChildTree( - G4UIcommandTree *aCommandTree -,const QString & text - ) +QMap G4UIQt::LookForHelpStringInChildTree( + G4UIcommandTree* aCommandTree, const QString& text) { - QMap commandResultMap; + QMap commandResultMap; if (aCommandTree == NULL) return commandResultMap; // Get the Sub directories G4int tmp = 0; - QMap commandChildResultMap; - for (G4int a=0;aGetTreeEntry();++a) { + QMap commandChildResultMap; + for (G4int a = 0; a < aCommandTree->GetTreeEntry(); ++a) { const G4UIcommand* command = aCommandTree->GetGuidance(); - tmp = GetCommandList (command).count(text,Qt::CaseInsensitive); - if (tmp >0) { - commandResultMap.insertMulti(tmp,QString((char*)(aCommandTree->GetTree(a+1)->GetPathName()).data())); + tmp = GetCommandList(command).count(text, Qt::CaseInsensitive); + if (tmp > 0) { + commandResultMap.insertMulti( + tmp, QString((char*)(aCommandTree->GetTree(a + 1)->GetPathName()).data())); } // look for childs - commandChildResultMap = LookForHelpStringInChildTree(aCommandTree->GetTree(a+1),text); - if (!commandChildResultMap.empty()) { + commandChildResultMap = LookForHelpStringInChildTree(aCommandTree->GetTree(a + 1), text); + if (! commandChildResultMap.empty()) { // insert new childs - QMap::const_iterator i = commandChildResultMap.constBegin(); + QMap::const_iterator i = commandChildResultMap.constBegin(); while (i != commandChildResultMap.constEnd()) { - commandResultMap.insertMulti(i.key(),i.value()); + commandResultMap.insertMulti(i.key(), i.value()); ++i; } commandChildResultMap.clear(); } } // Get the Commands - for (G4int a=0;aGetCommandEntry();++a) { - const G4UIcommand* command = aCommandTree->GetCommand(a+1); - tmp = GetCommandList (command).count(text,Qt::CaseInsensitive); - if (tmp >0) { - commandResultMap.insertMulti(tmp,QString((char*)(aCommandTree->GetCommand(a+1)->GetCommandPath()).data())); + for (G4int a = 0; a < aCommandTree->GetCommandEntry(); ++a) { + const G4UIcommand* command = aCommandTree->GetCommand(a + 1); + tmp = GetCommandList(command).count(text, Qt::CaseInsensitive); + if (tmp > 0) { + commandResultMap.insertMulti( + tmp, QString((char*)(aCommandTree->GetCommand(a + 1)->GetCommandPath()).data())); } } return commandResultMap; } #else // Qt5.15 and beyond -QMultiMap G4UIQt::LookForHelpStringInChildTree( - G4UIcommandTree *aCommandTree -,const QString & text - ) +QMultiMap G4UIQt::LookForHelpStringInChildTree( + G4UIcommandTree* aCommandTree, const QString& text) { - QMultiMap commandResultMap; - if (aCommandTree == NULL) return commandResultMap; + QMultiMap commandResultMap; + if (aCommandTree == nullptr) return commandResultMap; // Get the Sub directories G4int tmp = 0; - QMultiMap commandChildResultMap; - for (G4int a=0;aGetTreeEntry();++a) { + QMultiMap commandChildResultMap; + for (G4int a = 0; a < aCommandTree->GetTreeEntry(); ++a) { const G4UIcommand* command = aCommandTree->GetGuidance(); - tmp = GetCommandList (command).count(text,Qt::CaseInsensitive); - if (tmp >0) { - commandResultMap.insert(tmp,QString((char*)(aCommandTree->GetTree(a+1)->GetPathName()).data())); + tmp = (int)GetCommandList(command).count(text, Qt::CaseInsensitive); + if (tmp > 0) { + commandResultMap.insert( + tmp, QString((char*)(aCommandTree->GetTree(a + 1)->GetPathName()).data())); } // look for childs - commandChildResultMap = LookForHelpStringInChildTree(aCommandTree->GetTree(a+1),text); - if (!commandChildResultMap.empty()) { + commandChildResultMap = LookForHelpStringInChildTree(aCommandTree->GetTree(a + 1), text); + if (! commandChildResultMap.empty()) { // insert new childs - QMap::const_iterator i = commandChildResultMap.constBegin(); + auto i = commandChildResultMap.constBegin(); while (i != commandChildResultMap.constEnd()) { - commandResultMap.insert(i.key(),i.value()); + commandResultMap.insert(i.key(), i.value()); ++i; } commandChildResultMap.clear(); } } // Get the Commands - for (G4int a=0;aGetCommandEntry();++a) { - const G4UIcommand* command = aCommandTree->GetCommand(a+1); - tmp = GetCommandList (command).count(text,Qt::CaseInsensitive); - if (tmp >0) { - commandResultMap.insert(tmp,QString((char*)(aCommandTree->GetCommand(a+1)->GetCommandPath()).data())); + for (G4int a = 0; a < aCommandTree->GetCommandEntry(); ++a) { + const G4UIcommand* command = aCommandTree->GetCommand(a + 1); + tmp = (int)GetCommandList(command).count(text, Qt::CaseInsensitive); + if (tmp > 0) { + commandResultMap.insert( + tmp, QString((char*)(aCommandTree->GetCommand(a + 1)->GetCommandPath()).data())); } } return commandResultMap; } #endif - -QString G4UIQt::GetShortCommandPath( -QString commandPath -) +QString G4UIQt::GetShortCommandPath(QString commandPath) { if (commandPath.indexOf("/") == 0) { - commandPath = commandPath.right(commandPath.size()-1); + commandPath = commandPath.right(commandPath.size() - 1); } - commandPath = commandPath.right(commandPath.size()-commandPath.lastIndexOf("/",-2)-1); + commandPath = commandPath.right(commandPath.size() - commandPath.lastIndexOf("/", -2) - 1); - if (commandPath.lastIndexOf("/") == (commandPath.size()-1)) { - commandPath = commandPath.left(commandPath.size()-1); - } + if (commandPath.lastIndexOf("/") == (commandPath.size() - 1)) { + commandPath = commandPath.left(commandPath.size() - 1); + } - return commandPath; + return commandPath; } - -QString G4UIQt::GetLongCommandPath( - QTreeWidgetItem* item -) +QString G4UIQt::GetLongCommandPath(QTreeWidgetItem* item) { - if (item == NULL) return ""; + if (item == nullptr) return ""; // rebuild path: QString itemText = ""; itemText = item->text(0); - while (item->parent() != NULL) { - itemText = item->parent()->text(0)+"/"+itemText; + while (item->parent() != nullptr) { + itemText = item->parent()->text(0) + "/" + itemText; item = item->parent(); } - itemText = "/"+itemText; + itemText = "/" + itemText; return itemText; } - -void G4UIQt::ChangeColorCallback(QWidget* widget) { - if (widget == NULL) { +void G4UIQt::ChangeColorCallback(QWidget* widget) +{ + if (widget == nullptr) { return; } - QPushButton* button = dynamic_cast(widget); - if (button == 0) { + auto button = dynamic_cast(widget); + if (button == nullptr) { return; } QString value = button->accessibleName(); QColor old; - old.setRgbF(value.section(" ",0,1).toDouble(), - value.section(" ",1,2).toDouble(), - value.section(" ",2,3).toDouble()); -#if QT_VERSION < 0x040500 - G4bool a; - QColor color = QColor(QColorDialog::getRgba (old.rgba(),&a,fUITabWidget)); -#else - QColor color = QColorDialog::getColor(old, - fUITabWidget, - "Change color", - QColorDialog::ShowAlphaChannel); -#endif - + old.setRgbF(value.section(" ", 0, 1).toDouble(), value.section(" ", 1, 2).toDouble(), + value.section(" ", 2, 3).toDouble()); + QColor color = + QColorDialog::getColor(old, fUITabWidget, "Change color", QColorDialog::ShowAlphaChannel); if (color.isValid()) { // rebuild the widget icon QPixmap pixmap = QPixmap(QSize(16, 16)); - pixmap.fill (color); + pixmap.fill(color); QPainter painter(&pixmap); painter.setPen(Qt::black); - painter.drawRect(0,0,15,15); // Draw contour + painter.drawRect(0, 0, 15, 15); // Draw contour - button->setAccessibleName(QString::number(color.redF())+" "+ - QString::number(color.greenF())+" "+ - QString::number(color.blueF())+" " - ); + button->setAccessibleName(QString::number(color.redF()) + " " + + QString::number(color.greenF()) + " " + + QString::number(color.blueF()) + " "); button->setIcon(pixmap); - - } } - -void G4UIQt::ChangeCursorAction(const QString& action) { - +void G4UIQt::ChangeCursorAction(const QString& action) +{ // Theses actions should be in the app toolbar fMoveSelected = true; @@ -4577,12 +4580,12 @@ void G4UIQt::ChangeCursorAction(const QString& action) { fZoomInSelected = true; fZoomOutSelected = true; - if (fToolbarApp == NULL) return; - QList list = fToolbarApp->actions (); - for (int i = 0; i < list.size(); ++i) { - if (list.at(i)->data().toString () == action) { - list.at(i)->setChecked(TRUE); - if (list.at(i)->data().toString () == "pick") { + if (fToolbarApp == nullptr) return; + QList list = fToolbarApp->actions(); + for (auto i : list) { + if (i->data().toString() == action) { + i->setChecked(true); + if (i->data().toString() == "pick") { G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/picking true"); CreatePickInfosDialog(); @@ -4590,54 +4593,62 @@ void G4UIQt::ChangeCursorAction(const QString& action) { fPickInfosDialog->raise(); fPickInfosDialog->activateWindow(); } - } else if (list.at(i)->data().toString () == "move") { + } + else if (i->data().toString() == "move") { fMoveSelected = false; - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "pick") { + i->setChecked(false); + } + else if (i->data().toString() == "pick") { fPickSelected = false; - list.at(i)->setChecked(FALSE); + i->setChecked(false); G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/picking false"); - if (fPickInfosDialog) { + if (fPickInfosDialog != nullptr) { fPickInfosDialog->hide(); } - } else if (list.at(i)->data().toString () == "rotate") { + } + else if (i->data().toString() == "rotate") { fRotateSelected = false; - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "zoom_in") { + i->setChecked(false); + } + else if (i->data().toString() == "zoom_in") { fZoomInSelected = false; - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "zoom_out") { + i->setChecked(false); + } + else if (i->data().toString() == "zoom_out") { fZoomOutSelected = false; - list.at(i)->setChecked(FALSE); + i->setChecked(false); } } // FIXME : Should connect this to Vis } - /* A little bit like "void G4OpenGLQtViewer::toggleDrawingAction(int aAction)" But for all viewers, not only Qt FIXME : Should be a feedback when changing viewer ! */ -void G4UIQt::ChangeSurfaceStyle(const QString& action) { - +void G4UIQt::ChangeSurfaceStyle(const QString& action) +{ // Theses actions should be in the app toolbar - if (fToolbarApp == NULL) return; - QList list = fToolbarApp->actions (); - for (G4int i = 0; i < list.size(); ++i) { - if (list.at(i)->data().toString () == action) { - list.at(i)->setChecked(TRUE); - } else if (list.at(i)->data().toString () == "hidden_line_removal") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "hidden_line_and_surface_removal") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "solid") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "wireframe") { - list.at(i)->setChecked(FALSE); + if (fToolbarApp == nullptr) return; + QList list = fToolbarApp->actions(); + for (auto i : list) { + if (i->data().toString() == action) { + i->setChecked(true); + } + else if (i->data().toString() == "hidden_line_removal") { + i->setChecked(false); + } + else if (i->data().toString() == "hidden_line_and_surface_removal") { + i->setChecked(false); + } + else if (i->data().toString() == "solid") { + i->setChecked(false); + } + else if (i->data().toString() == "wireframe") { + i->setChecked(false); } } // FIXME : Should connect this to Vis @@ -4645,139 +4656,138 @@ void G4UIQt::ChangeSurfaceStyle(const QString& action) { if (action == "hidden_line_removal") { G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/style w"); G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/hiddenEdge 1"); - - } else if (action == "hidden_line_and_surface_removal") { + } + else if (action == "hidden_line_and_surface_removal") { G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/style s"); G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/hiddenEdge 1"); - - } else if (action == "solid") { + } + else if (action == "solid") { G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/style s"); G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/hiddenEdge 0"); - - } else if (action == "wireframe") { + } + else if (action == "wireframe") { G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/style w"); G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/hiddenEdge 0"); } } - -void G4UIQt::OpenIconCallback(const QString& aParam) { - +void G4UIQt::OpenIconCallback(const QString& aParam) +{ QString aCommand = aParam.left(aParam.indexOf(fStringSeparator)); - QString aLabel = aParam.mid(aParam.indexOf(fStringSeparator)+fStringSeparator.length()); + QString aLabel = aParam.mid(aParam.indexOf(fStringSeparator) + fStringSeparator.length()); - QString nomFich = QFileDialog::getOpenFileName(fMainWindow, aLabel, fLastOpenPath, "Macro files (*.mac);;Geant4 files( *.mac *.g4* *.in);;All (*.*)"); + QString nomFich = QFileDialog::getOpenFileName(fMainWindow, aLabel, fLastOpenPath, + "Macro files (*.mac);;Geant4 files( *.mac *.g4* *.in);;All (*.*)"); if (nomFich != "") { - G4UImanager::GetUIpointer()->ApplyCommand((QString(aCommand)+ QString(" ")+ nomFich).toStdString().c_str()); + G4UImanager::GetUIpointer()->ApplyCommand( + (QString(aCommand) + QString(" ") + nomFich).toStdString().c_str()); QDir dir; fLastOpenPath = dir.absoluteFilePath(nomFich); } } - -void G4UIQt::SaveIconCallback(const QString& aParam) { - +void G4UIQt::SaveIconCallback(const QString& aParam) +{ QString aCommand = aParam.left(aParam.indexOf(fStringSeparator)); - QString aLabel = aParam.mid(aParam.indexOf(fStringSeparator)+fStringSeparator.length()); + QString aLabel = aParam.mid(aParam.indexOf(fStringSeparator) + fStringSeparator.length()); - QString nomFich = QFileDialog::getSaveFileName(fMainWindow, aLabel, fLastOpenPath, "Macro files (*.mac)"); + QString nomFich = + QFileDialog::getSaveFileName(fMainWindow, aLabel, fLastOpenPath, "Macro files (*.mac)"); if (nomFich != "") { - G4UImanager::GetUIpointer()->ApplyCommand((QString(aCommand)+ QString(" ")+nomFich).toStdString().c_str()); + G4UImanager::GetUIpointer()->ApplyCommand( + (QString(aCommand) + QString(" ") + nomFich).toStdString().c_str()); QDir dir; fLastOpenPath = dir.absoluteFilePath(nomFich); } } - -void G4UIQt::CreateViewerPropertiesDialog() { - - if (fViewerPropertiesDialog != NULL) { +void G4UIQt::CreateViewerPropertiesDialog() +{ + if (fViewerPropertiesDialog != nullptr) { return; } fViewerPropertiesDialog = new QDialog(); fViewerPropertiesDialog->setWindowTitle("Viewer properties"); - fViewerPropertiesDialog->setSizePolicy (QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding)); + fViewerPropertiesDialog->setSizePolicy( + QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); - if (!fViewerPropertiesWidget) { + if (fViewerPropertiesWidget == nullptr) { fViewerPropertiesWidget = new QWidget(); - QVBoxLayout* layoutPropertiesWidget = new QVBoxLayout(); + auto layoutPropertiesWidget = new QVBoxLayout(); fViewerPropertiesWidget->setLayout(layoutPropertiesWidget); CreateEmptyViewerPropertiesWidget(); } - QVBoxLayout* layoutDialog = new QVBoxLayout(); + auto layoutDialog = new QVBoxLayout(); layoutDialog->addWidget(fViewerPropertiesWidget); - layoutDialog->setContentsMargins(0,0,0,0); + layoutDialog->setContentsMargins(0, 0, 0, 0); fViewerPropertiesDialog->setLayout(layoutDialog); } - -void G4UIQt::CreatePickInfosDialog() { - - if (fPickInfosDialog != NULL) { +void G4UIQt::CreatePickInfosDialog() +{ + if (fPickInfosDialog != nullptr) { return; } fPickInfosDialog = new QDialog(); fPickInfosDialog->setWindowTitle("Pick infos"); - fPickInfosDialog->setSizePolicy (QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding)); + fPickInfosDialog->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); - if (!fPickInfosWidget) { + if (fPickInfosWidget == nullptr) { fPickInfosWidget = new QWidget(); - QVBoxLayout* layoutPickInfos = new QVBoxLayout(); + auto layoutPickInfos = new QVBoxLayout(); fPickInfosWidget->setLayout(layoutPickInfos); CreateEmptyPickInfosWidget(); } - QVBoxLayout* layoutDialog = new QVBoxLayout(); + auto layoutDialog = new QVBoxLayout(); layoutDialog->addWidget(fPickInfosWidget); - layoutDialog->setContentsMargins(0,0,0,0); + layoutDialog->setContentsMargins(0, 0, 0, 0); fPickInfosDialog->setLayout(layoutDialog); fPickInfosDialog->setWindowFlags(Qt::WindowStaysOnTopHint); - } - -void G4UIQt::CreateEmptyViewerPropertiesWidget() { - if(!fViewerPropertiesWidget) return; - if(!fViewerPropertiesWidget->layout()) return; - QLayoutItem * wItem; - if (fViewerPropertiesWidget->layout()->count()) { - while ((wItem = fViewerPropertiesWidget->layout()->takeAt(0)) != 0) { +void G4UIQt::CreateEmptyViewerPropertiesWidget() +{ + if (fViewerPropertiesWidget == nullptr) return; + if (fViewerPropertiesWidget->layout() == nullptr) return; + QLayoutItem* wItem; + if (fViewerPropertiesWidget->layout()->count() != 0) { + while ((wItem = fViewerPropertiesWidget->layout()->takeAt(0)) != nullptr) { delete wItem->widget(); delete wItem; } } // Add empty one - QLabel* label = new QLabel("No viewer - Please open a viewer first"); + auto label = new QLabel("No viewer - Please open a viewer first"); fViewerPropertiesWidget->layout()->addWidget(label); fViewerPropertiesDialog->setWindowTitle("No viewer"); fViewerPropertiesDialog->setVisible(false); } - -void G4UIQt::CreateEmptyPickInfosWidget() { - QLayoutItem * wItem; - if (fPickInfosWidget->layout()->count()) { - while ((wItem = fPickInfosWidget->layout()->takeAt(0)) != 0) { +void G4UIQt::CreateEmptyPickInfosWidget() +{ + QLayoutItem* wItem; + if (fPickInfosWidget->layout()->count() != 0) { + while ((wItem = fPickInfosWidget->layout()->takeAt(0)) != nullptr) { delete wItem->widget(); delete wItem; } } // Add empty one - QLabel* label = new QLabel("Click on the object you want to pick"); + auto label = new QLabel("Click on the object you want to pick"); fPickInfosWidget->layout()->addWidget(label); fPickInfosDialog->setWindowTitle("Nothing to pick"); } - -void G4UIQt::ViewerPropertiesIconCallback(int) { - +void G4UIQt::ViewerPropertiesIconCallback(int) +{ CreateViewerPropertiesDialog(); fViewerPropertiesDialog->show(); @@ -4785,35 +4795,36 @@ void G4UIQt::ViewerPropertiesIconCallback(int) { fViewerPropertiesDialog->activateWindow(); } - -void G4UIQt::ChangePerspectiveOrtho(const QString& action) { - +void G4UIQt::ChangePerspectiveOrtho(const QString& action) +{ // Theses actions should be in the app toolbar - if (fToolbarApp == NULL) return; - QList list = fToolbarApp->actions (); + if (fToolbarApp == nullptr) return; + QList list = fToolbarApp->actions(); QString checked = ""; - for (G4int i = 0; i < list.size(); ++i) { - if (list.at(i)->data().toString () == action) { - list.at(i)->setChecked(TRUE); - checked = list.at(i)->data().toString (); - } else if (list.at(i)->data().toString () == "perspective") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "ortho") { - list.at(i)->setChecked(FALSE); + for (auto i : list) { + if (i->data().toString() == action) { + i->setChecked(true); + checked = i->data().toString(); + } + else if (i->data().toString() == "perspective") { + i->setChecked(false); + } + else if (i->data().toString() == "ortho") { + i->setChecked(false); } } if ((action == "ortho") && (checked == "ortho")) { G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/projection o"); - } else if ((action == "perspective") && (checked == "perspective")) { + } + else if ((action == "perspective") && (checked == "perspective")) { G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/set/projection p"); } } - - -void G4UIQt::SetIconMoveSelected() { +void G4UIQt::SetIconMoveSelected() +{ // Theses actions should be in the app toolbar fMoveSelected = true; fRotateSelected = false; @@ -4821,25 +4832,29 @@ void G4UIQt::SetIconMoveSelected() { fZoomInSelected = false; fZoomOutSelected = false; - if (fToolbarApp == NULL) return; - QList list = fToolbarApp->actions (); - for (G4int i = 0; i < list.size(); ++i) { - if (list.at(i)->data().toString () == "move") { - list.at(i)->setChecked(TRUE); - } else if (list.at(i)->data().toString () == "rotate") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "pick") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "zoom_in") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "zoom_out") { - list.at(i)->setChecked(FALSE); + if (fToolbarApp == nullptr) return; + QList list = fToolbarApp->actions(); + for (auto i : list) { + if (i->data().toString() == "move") { + i->setChecked(true); + } + else if (i->data().toString() == "rotate") { + i->setChecked(false); + } + else if (i->data().toString() == "pick") { + i->setChecked(false); + } + else if (i->data().toString() == "zoom_in") { + i->setChecked(false); + } + else if (i->data().toString() == "zoom_out") { + i->setChecked(false); } } } - -void G4UIQt::SetIconRotateSelected() { +void G4UIQt::SetIconRotateSelected() +{ // Theses actions should be in the app toolbar fRotateSelected = true; fMoveSelected = false; @@ -4847,25 +4862,29 @@ void G4UIQt::SetIconRotateSelected() { fZoomInSelected = false; fZoomOutSelected = false; - if (fToolbarApp == NULL) return; - QList list = fToolbarApp->actions (); - for (G4int i = 0; i < list.size(); ++i) { - if (list.at(i)->data().toString () == "rotate") { - list.at(i)->setChecked(TRUE); - } else if (list.at(i)->data().toString () == "move") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "pick") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "zoom_in") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "zoom_out") { - list.at(i)->setChecked(FALSE); + if (fToolbarApp == nullptr) return; + QList list = fToolbarApp->actions(); + for (auto i : list) { + if (i->data().toString() == "rotate") { + i->setChecked(true); + } + else if (i->data().toString() == "move") { + i->setChecked(false); + } + else if (i->data().toString() == "pick") { + i->setChecked(false); + } + else if (i->data().toString() == "zoom_in") { + i->setChecked(false); + } + else if (i->data().toString() == "zoom_out") { + i->setChecked(false); } } } - -void G4UIQt::SetIconPickSelected() { +void G4UIQt::SetIconPickSelected() +{ // Theses actions should be in the app toolbar fPickSelected = true; fMoveSelected = false; @@ -4874,29 +4893,33 @@ void G4UIQt::SetIconPickSelected() { fZoomOutSelected = false; QToolBar* bar = fToolbarApp; - if (!fDefaultIcons) { + if (! fDefaultIcons) { bar = fToolbarUser; } - if (!bar) return; + if (bar == nullptr) return; - QList list = bar->actions (); - for (G4int i = 0; i < list.size(); ++i) { - if (list.at(i)->data().toString () == "pick") { - list.at(i)->setChecked(TRUE); - } else if (list.at(i)->data().toString () == "move") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "rotate") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "zoom_in") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "zoom_out") { - list.at(i)->setChecked(FALSE); + QList list = bar->actions(); + for (auto i : list) { + if (i->data().toString() == "pick") { + i->setChecked(true); + } + else if (i->data().toString() == "move") { + i->setChecked(false); + } + else if (i->data().toString() == "rotate") { + i->setChecked(false); + } + else if (i->data().toString() == "zoom_in") { + i->setChecked(false); + } + else if (i->data().toString() == "zoom_out") { + i->setChecked(false); } } } - -void G4UIQt::SetIconZoomInSelected() { +void G4UIQt::SetIconZoomInSelected() +{ // Theses actions should be in the app toolbar fZoomInSelected = true; fMoveSelected = false; @@ -4905,29 +4928,33 @@ void G4UIQt::SetIconZoomInSelected() { fZoomOutSelected = false; QToolBar* bar = fToolbarApp; - if (!fDefaultIcons) { + if (! fDefaultIcons) { bar = fToolbarUser; } - if (!bar) return; + if (bar == nullptr) return; - QList list = bar->actions (); - for (G4int i = 0; i < list.size(); ++i) { - if (list.at(i)->data().toString () == "zoom_in") { - list.at(i)->setChecked(TRUE); - } else if (list.at(i)->data().toString () == "move") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "rotate") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "pick") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "zoom_out") { - list.at(i)->setChecked(FALSE); + QList list = bar->actions(); + for (auto i : list) { + if (i->data().toString() == "zoom_in") { + i->setChecked(true); + } + else if (i->data().toString() == "move") { + i->setChecked(false); + } + else if (i->data().toString() == "rotate") { + i->setChecked(false); + } + else if (i->data().toString() == "pick") { + i->setChecked(false); + } + else if (i->data().toString() == "zoom_out") { + i->setChecked(false); } } } - -void G4UIQt::SetIconZoomOutSelected() { +void G4UIQt::SetIconZoomOutSelected() +{ // Theses actions should be in the app toolbar fZoomOutSelected = true; fMoveSelected = false; @@ -4936,228 +4963,224 @@ void G4UIQt::SetIconZoomOutSelected() { fZoomInSelected = false; QToolBar* bar = fToolbarApp; - if (!fDefaultIcons) { + if (! fDefaultIcons) { bar = fToolbarUser; } - if (!bar) return; + if (bar == nullptr) return; - QList list = bar->actions (); - for (G4int i = 0; i < list.size(); ++i) { - if (list.at(i)->data().toString () == "zoom_out") { - list.at(i)->setChecked(TRUE); - } else if (list.at(i)->data().toString () == "move") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "rotate") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "pick") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "zoom_in") { - list.at(i)->setChecked(FALSE); + QList list = bar->actions(); + for (auto i : list) { + if (i->data().toString() == "zoom_out") { + i->setChecked(true); + } + else if (i->data().toString() == "move") { + i->setChecked(false); + } + else if (i->data().toString() == "rotate") { + i->setChecked(false); + } + else if (i->data().toString() == "pick") { + i->setChecked(false); + } + else if (i->data().toString() == "zoom_in") { + i->setChecked(false); } } } - -void G4UIQt::SetIconSolidSelected() { +void G4UIQt::SetIconSolidSelected() +{ // Theses actions should be in the app toolbar QToolBar* bar = fToolbarApp; - if (!fDefaultIcons) { + if (! fDefaultIcons) { bar = fToolbarUser; } - if (!bar) return; + if (bar == nullptr) return; - QList list = bar->actions (); - for (G4int i = 0; i < list.size(); ++i) { - if (list.at(i)->data().toString () == "solid") { - list.at(i)->setChecked(TRUE); - } else if (list.at(i)->data().toString () == "hidden_line_removal") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "hidden_line_and_surface_removal") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "wireframe") { - list.at(i)->setChecked(FALSE); + QList list = bar->actions(); + for (auto i : list) { + if (i->data().toString() == "solid") { + i->setChecked(true); + } + else if (i->data().toString() == "hidden_line_removal") { + i->setChecked(false); + } + else if (i->data().toString() == "hidden_line_and_surface_removal") { + i->setChecked(false); + } + else if (i->data().toString() == "wireframe") { + i->setChecked(false); } } } - -void G4UIQt::SetIconWireframeSelected() { +void G4UIQt::SetIconWireframeSelected() +{ // Theses actions should be in the app toolbar QToolBar* bar = fToolbarApp; - if (!fDefaultIcons) { + if (! fDefaultIcons) { bar = fToolbarUser; } - if (!bar) return; + if (bar == nullptr) return; - QList list = bar->actions (); - for (G4int i = 0; i < list.size(); ++i) { - if (list.at(i)->data().toString () == "wireframe") { - list.at(i)->setChecked(TRUE); - } else if (list.at(i)->data().toString () == "hidden_line_removal") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "hidden_line_and_surface_removal") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "solid") { - list.at(i)->setChecked(FALSE); + QList list = bar->actions(); + for (auto i : list) { + if (i->data().toString() == "wireframe") { + i->setChecked(true); + } + else if (i->data().toString() == "hidden_line_removal") { + i->setChecked(false); + } + else if (i->data().toString() == "hidden_line_and_surface_removal") { + i->setChecked(false); + } + else if (i->data().toString() == "solid") { + i->setChecked(false); } } } - -void G4UIQt::SetIconHLRSelected() { +void G4UIQt::SetIconHLRSelected() +{ // Theses actions should be in the app toolbar QToolBar* bar = fToolbarApp; - if (!fDefaultIcons) { + if (! fDefaultIcons) { bar = fToolbarUser; } - if (!bar) return; - + if (bar == nullptr) return; - QList list = bar->actions (); - for (G4int i = 0; i < list.size(); ++i) { - if (list.at(i)->data().toString () == "hidden_line_removal") { - list.at(i)->setChecked(TRUE); - } else if (list.at(i)->data().toString () == "solid") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "hidden_line_and_surface_removal") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "wireframe") { - list.at(i)->setChecked(FALSE); + QList list = bar->actions(); + for (auto i : list) { + if (i->data().toString() == "hidden_line_removal") { + i->setChecked(true); + } + else if (i->data().toString() == "solid") { + i->setChecked(false); + } + else if (i->data().toString() == "hidden_line_and_surface_removal") { + i->setChecked(false); + } + else if (i->data().toString() == "wireframe") { + i->setChecked(false); } } } - -void G4UIQt::SetIconHLHSRSelected() { +void G4UIQt::SetIconHLHSRSelected() +{ // Theses actions should be in the app toolbar QToolBar* bar = fToolbarApp; - if (!fDefaultIcons) { + if (! fDefaultIcons) { bar = fToolbarUser; } - if (!bar) return; + if (bar == nullptr) return; - QList list = bar->actions (); - for (G4int i = 0; i < list.size(); ++i) { - if (list.at(i)->data().toString () == "hidden_line_and_surface_removal") { - list.at(i)->setChecked(TRUE); - } else if (list.at(i)->data().toString () == "solid") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "hidden_line_removal") { - list.at(i)->setChecked(FALSE); - } else if (list.at(i)->data().toString () == "wireframe") { - list.at(i)->setChecked(FALSE); + QList list = bar->actions(); + for (auto i : list) { + if (i->data().toString() == "hidden_line_and_surface_removal") { + i->setChecked(true); + } + else if (i->data().toString() == "solid") { + i->setChecked(false); + } + else if (i->data().toString() == "hidden_line_removal") { + i->setChecked(false); + } + else if (i->data().toString() == "wireframe") { + i->setChecked(false); } } } - -void G4UIQt::SetIconPerspectiveSelected() { +void G4UIQt::SetIconPerspectiveSelected() +{ // Theses actions should be in the app toolbar QToolBar* bar = fToolbarApp; - if (!fDefaultIcons) { + if (! fDefaultIcons) { bar = fToolbarUser; } - if (!bar) return; + if (bar == nullptr) return; - - QList list = bar->actions (); - for (G4int i = 0; i < list.size(); ++i) { - if (list.at(i)->data().toString () == "perspective") { - list.at(i)->setChecked(TRUE); - } else if (list.at(i)->data().toString () == "ortho") { - list.at(i)->setChecked(FALSE); + QList list = bar->actions(); + for (auto i : list) { + if (i->data().toString() == "perspective") { + i->setChecked(true); + } + else if (i->data().toString() == "ortho") { + i->setChecked(false); } } } - - -void G4UIQt::SetIconOrthoSelected() { +void G4UIQt::SetIconOrthoSelected() +{ // Theses actions should be in the app toolbar QToolBar* bar = fToolbarApp; - if (!fDefaultIcons) { + if (! fDefaultIcons) { bar = fToolbarUser; } - if (!bar) return; + if (bar == nullptr) return; - QList list = bar->actions (); - for (G4int i = 0; i < list.size(); ++i) { - if (list.at(i)->data().toString () == "ortho") { - list.at(i)->setChecked(TRUE); - } else if (list.at(i)->data().toString () == "perspective") { - list.at(i)->setChecked(FALSE); + QList list = bar->actions(); + for (auto i : list) { + if (i->data().toString() == "ortho") { + i->setChecked(true); + } + else if (i->data().toString() == "perspective") { + i->setChecked(false); } } } - - -G4QTabWidget::G4QTabWidget( -QWidget* aParent, -G4int sizeX, -G4int sizeY -):QTabWidget(aParent) - ,fTabSelected(false) - ,fLastCreated(-1) -,fPreferedSizeX(sizeX+6) // margin left+right -,fPreferedSizeY(sizeY+58) // tab label height + margin left+right +G4QTabWidget::G4QTabWidget(QWidget* aParent, G4int sizeX, G4int sizeY) + : QTabWidget(aParent), + fTabSelected(false), + fLastCreated(-1), + fPreferedSizeX(sizeX + 6) // margin left+right + , + fPreferedSizeY(sizeY + 58) // tab label height + margin left+right { - setMinimumSize(100,100); - QSizePolicy policy = QSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred); + setMinimumSize(100, 100); + QSizePolicy policy = QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); setSizePolicy(policy); } -G4QTabWidget::G4QTabWidget( -):QTabWidget() - ,fTabSelected(false) - ,fLastCreated(-1) -,fPreferedSizeX(0) -,fPreferedSizeY(0) -{ -} - +G4QTabWidget::G4QTabWidget() + : QTabWidget(), fTabSelected(false), fLastCreated(-1), fPreferedSizeX(0), fPreferedSizeY(0) +{} -G4UIOutputString::G4UIOutputString( -QString text, -G4String origine, -G4String outputStream -): - fText(text) -,fThread(origine) +G4UIOutputString::G4UIOutputString(QString text, G4String origine, G4String outputStream) + : fText(text), fThread(origine) { - if (!GetOutputList().contains(QString(" ")+outputStream+" ")) { + if (! GetOutputList().contains(QString(" ") + outputStream + " ")) { fOutputStream = "info"; - } else { + } + else { fOutputStream = outputStream; } } -#if QT_VERSION < 0x040500 -void G4UIQt::TabCloseCallback(int){ -#else -void G4UIQt::TabCloseCallback(int a){ -#endif -#if QT_VERSION < 0x040500 -#else - if (fViewerTabWidget == NULL) return; +void G4UIQt::TabCloseCallback(int a) +{ + if (fViewerTabWidget == nullptr) return; // get the address of the widget QWidget* temp = fViewerTabWidget->widget(a); // remove the tab - fViewerTabWidget->removeTab (a); + fViewerTabWidget->removeTab(a); // if last QWidget : Add empty string G4bool lastTab = true; - for (G4int c=0; ccount(); ++c) { + for (G4int c = 0; c < fViewerTabWidget->count(); ++c) { if (fViewerTabWidget->tabText(c).contains("viewer")) { lastTab = false; } @@ -5168,48 +5191,38 @@ void G4UIQt::TabCloseCallback(int a){ } // delete the widget delete temp; -#endif } - -void G4UIQt::ToolBoxActivated(int a){ - +void G4UIQt::ToolBoxActivated(int a) +{ if (fUITabWidget->widget(a) == fHelpTBWidget) { // Rebuild the help tree FillHelpTree(); - } else if (fUITabWidget->widget(a) == fSceneTreeWidget) { -#if QT_VERSION < 0x040200 - fSceneTreeWidget->show(); -#else + } + else if (fUITabWidget->widget(a) == fSceneTreeWidget) { fSceneTreeWidget->setVisible(true); -#endif } } - -void G4QTabWidget::paintEvent( -QPaintEvent * -) +void G4QTabWidget::paintEvent(QPaintEvent*) { - - if (currentWidget()) { - - if ( isTabSelected()) { - + if (currentWidget() != nullptr) { + if (isTabSelected()) { // QCoreApplication::sendPostedEvents () ; - QString text = tabText (currentIndex()); + QString text = tabText(currentIndex()); if (fLastCreated == -1) { - QTextEdit* edit = dynamic_cast(currentWidget()); - if (!edit){ - QString paramSelect = QString("/vis/viewer/select ")+text; + auto edit = dynamic_cast(currentWidget()); + if (edit == nullptr) { + QString paramSelect = QString("/vis/viewer/select ") + text; G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI != NULL) { + if (UI != nullptr) { UI->ApplyCommand(paramSelect.toStdString().c_str()); } } - } else { + } + else { fLastCreated = -1; } setTabSelected(false); @@ -5217,16 +5230,13 @@ QPaintEvent * } } +G4UIDockWidget::G4UIDockWidget(QString txt) : QDockWidget(txt) {} -G4UIDockWidget::G4UIDockWidget(QString txt): - QDockWidget(txt) -{} - - -void G4UIDockWidget::closeEvent(QCloseEvent *aEvent) { - setFloating (false); +void G4UIDockWidget::closeEvent(QCloseEvent* aEvent) +{ + setFloating(false); - //prevent from closing + // prevent from closing aEvent->ignore(); // hide them instead hide(); diff --git a/source/interfaces/implementation/src/G4UIWin32.cc b/source/interfaces/implementation/src/G4UIWin32.cc new file mode 100644 index 00000000000..b93e450ad9c --- /dev/null +++ b/source/interfaces/implementation/src/G4UIWin32.cc @@ -0,0 +1,1352 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Original author: G.Barrand, 1998 +// Rewrite: O.Pena-Rodriguez, March 2021 +// -------------------------------------------------------------------- + +#include "G4UIWin32.hh" + +#include "G4MTcoutDestination.hh" +#include "G4StateManager.hh" +#include "G4UIcommand.hh" +#include "G4UIcommandTree.hh" +#include "G4UImanager.hh" +#include "G4Win32.hh" + +#include +#include +#include + +#include +#include + +/***************************************************************************/ +static char mainClassName[] = "G4UIWin32"; +static G4bool exitSession = true; +static G4bool exitPause = true; +static G4bool exitHelp = true; +static G4UIsession* tmpSession = nullptr; + +// Original wndproc for the Combo Editor +static WNDPROC origComboEditorWindowProc; + +static G4bool ConvertStringToInt(const char*, G4int&); + +static G4int actionIdentifier = 0; + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +G4UIWin32::G4UIWin32() + : fHWndMainWindow(nullptr), + fHWndEditor(nullptr), + fHWndToolBar(nullptr), + fHWndComboBox(nullptr), + fHWndComboEditor(nullptr), + fHWndHelpTree(nullptr), + fHWndStatus(nullptr), + menuBar(nullptr), + fHelp(false), + fHelpChoice(0), + fHistoryPos(-1) +{ + G4UImanager* UI = G4UImanager::GetUIpointer(); + if (UI != nullptr) { + UI->SetSession(this); + UI->SetG4UIWindow(this); + } + + // Ensure that the common control DLL is loaded + INITCOMMONCONTROLSEX commCtrls; + commCtrls.dwSize = sizeof(INITCOMMONCONTROLSEX); + commCtrls.dwICC = ICC_BAR_CLASSES | ICC_LISTVIEW_CLASSES; + // this loads list-view and toolbar classes. + InitCommonControlsEx(&commCtrls); + + interactorManager = G4Win32::getInstance(); + + static G4bool Done = false; + if (! Done) { + WNDCLASS wc; + wc.style = 0; + wc.lpfnWndProc = (WNDPROC)G4UIWin32::MainWindowProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = ::GetModuleHandle(nullptr); + wc.hIcon = LoadIcon(nullptr, IDI_APPLICATION); + wc.hCursor = LoadCursor(nullptr, IDC_ARROW); + wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + wc.lpszMenuName = mainClassName; + wc.lpszClassName = mainClassName; + + if (! RegisterClass(&wc)) { + MessageBox(nullptr, "G4UIWin32: Win32 window registration failed!", "Error!", + MB_ICONEXCLAMATION | MB_OK); + G4cout << "G4UIWin32: Win32 window registration failed!" << G4endl; + return; + } + + Done = true; + } + + menuBar = CreateMenu(); + + // Add some initial options to the menu + HMENU hMenu = CreatePopupMenu(); + AppendMenu(menuBar, MF_POPUP, (UINT_PTR)hMenu, "&Geant4"); + AddInteractor("Geant4", (G4Interactor)hMenu); + + AppendMenu(hMenu, MF_STRING, ID_OPEN_MACRO, "&Open macro..."); + AppendMenu(hMenu, MF_STRING, ID_SAVE_VIEWER_STATE, "&Save viewer state..."); + AppendMenu(hMenu, MF_SEPARATOR, -1, ""); + AppendMenu(hMenu, MF_STRING, ID_RUN_BEAMON, "&Beam On"); + AppendMenu(hMenu, MF_SEPARATOR, -1, ""); + AppendMenu(hMenu, MF_STRING, ID_EXIT_APP, "E&xit"); + + hMenu = CreatePopupMenu(); + AppendMenu(menuBar, MF_POPUP, (UINT_PTR)hMenu, "&View"); + AddInteractor("View", (G4Interactor)hMenu); + + AppendMenu(hMenu, MF_STRING, ID_VIEW_SOLID, "S&olid"); + AppendMenu(hMenu, MF_STRING, ID_VIEW_WIREFRAME, "&Wireframe"); + AppendMenu(hMenu, MF_SEPARATOR, -1, ""); + AppendMenu(hMenu, MF_STRING, ID_PROJ_ORTHOGRAPHIC, "&Orthographic"); + AppendMenu(hMenu, MF_STRING, ID_PROJ_PERSPECTIVE, "P&erspective"); + AppendMenu(hMenu, MF_SEPARATOR, -1, ""); + AppendMenu(hMenu, MF_STRING, ID_ORIENTATION_XY, "&X-Y Plane"); + AppendMenu(hMenu, MF_STRING, ID_ORIENTATION_XZ, "X-&Z Plane"); + AppendMenu(hMenu, MF_STRING, ID_ORIENTATION_YZ, "&Y-Z Plane"); + AppendMenu(hMenu, MF_STRING, ID_ORIENTATION_OBLIQUE, "&Oblique"); + + hMenu = CreatePopupMenu(); + AppendMenu(menuBar, MF_POPUP, (UINT_PTR)hMenu, "&Zoom"); + AddInteractor("Zoom", (G4Interactor)hMenu); + + AppendMenu(hMenu, MF_STRING, ID_ZOOM_IN, "Zoom &In"); + AppendMenu(hMenu, MF_STRING, ID_ZOOM_OUT, "Zoom &Out"); + + tmpSession = this; + fHWndMainWindow = ::CreateWindowEx(WS_EX_CLIENTEDGE, mainClassName, "Geant4", + WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, + CW_USEDEFAULT, nullptr, menuBar, ::GetModuleHandle(nullptr), nullptr); + + if (fHWndMainWindow == nullptr) { + MessageBox(nullptr, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK); + return; + } + tmpSession = nullptr; + ::SetWindowLongPtr(fHWndMainWindow, GWLP_USERDATA, (LONG_PTR)this); + + ::SetForegroundWindow(fHWndMainWindow); + ::ShowWindow(fHWndMainWindow, SW_SHOWDEFAULT); + ::UpdateWindow(fHWndMainWindow); + + if (UI != nullptr) UI->SetCoutDestination(this); + + // TODO: Manage multithreaded output + // #ifdef G4MULTITHREADED + // explicitly request that cout/cerr messages from threads are ALSO propagated to the master. + // masterG4coutDestination = this; + // #endif +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +G4UIWin32::~G4UIWin32() +{ + G4UImanager* UI = G4UImanager::GetUIpointer(); + if (UI != nullptr) { + UI->SetSession(nullptr); + UI->SetG4UIWindow(nullptr); + UI->SetCoutDestination(nullptr); + } + + // TODO: Manage multithreaded output + // #ifdef G4MULTITHREADED + // masterG4coutDestination = 0; // set to cout when UI is deleted + // #endif + + if (fHWndStatus != nullptr) ::SetWindowLongPtr(fHWndStatus, GWLP_USERDATA, LONG(NULL)); + if (fHWndHelpTree != nullptr) ::SetWindowLongPtr(fHWndHelpTree, GWLP_USERDATA, LONG(NULL)); + if (fHWndComboBox != nullptr) ::SetWindowLongPtr(fHWndComboBox, GWLP_USERDATA, LONG(NULL)); + if (fHWndToolBar != nullptr) ::SetWindowLongPtr(fHWndToolBar, GWLP_USERDATA, LONG(NULL)); + if (fHWndEditor != nullptr) ::SetWindowLongPtr(fHWndEditor, GWLP_USERDATA, LONG(NULL)); + if (fHWndMainWindow != nullptr) { + ::SetWindowLongPtr(fHWndMainWindow, GWLP_USERDATA, LONG(NULL)); + ::DestroyWindow(fHWndMainWindow); + } +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +G4UIsession* G4UIWin32::SessionStart() +{ + if (interactorManager != nullptr) { + Prompt("session"); + exitSession = false; + + // TODO: Ensure that the list of commands is updated + // Load commands into Help Tree View + InitHelpTreeItems(); + + interactorManager->DisableSecondaryLoop(); + void* event; + while ((event = interactorManager->GetEvent()) != nullptr) { + interactorManager->DispatchEvent(event); + if (exitSession) break; + } + interactorManager->EnableSecondaryLoop(); + return this; + } + else + return this; +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +void G4UIWin32::Prompt(const G4String& a_prompt) {} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +void G4UIWin32::SessionTerminate() {} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +void G4UIWin32::PauseSessionStart(const G4String& a_state) +{ + if (a_state == "G4_pause> ") { + SecondaryLoop("Pause, type continue to exit this state"); + } + + if (a_state == "EndOfEvent") { + // Picking with feed back in event data Done here !!! + SecondaryLoop("End of event, type continue to exit this state"); + } +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +void G4UIWin32::SecondaryLoop(const G4String& a_prompt) +{ + if (interactorManager != nullptr) { + Prompt(a_prompt); + exitPause = false; + void* event; + while ((event = interactorManager->GetEvent()) != nullptr) { + interactorManager->DispatchEvent(event); + if (exitPause) break; + } + Prompt("session"); + } +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +G4int G4UIWin32::ReceiveG4debug(const G4String& a_string) +{ + // Geant4 uses UNIX's style for new lines (\n) + // we must convert them to Windows' style (\r\n) + G4String str = ConvertNewLines(a_string); + + AddText((LPSTR)str.data()); + + return 0; +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +G4int G4UIWin32::ReceiveG4cout(const G4String& a_string) +{ + // Geant4 uses UNIX's style for new lines (\n) + // we must convert them to Windows' style (\r\n) + G4String str = ConvertNewLines(a_string); + + AddText((LPSTR)str.data()); + + return 0; +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +G4int G4UIWin32::ReceiveG4cerr(const G4String& a_string) +{ + // Geant4 uses UNIX's style for new lines (\n) + // we must convert them to Windows' style (\r\n) + G4String str = ConvertNewLines(a_string); + + AddText((LPSTR)str.data()); + + return 0; +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +G4bool G4UIWin32::GetHelpChoice(G4int& aInt) +{ + fHelp = true; + + if (interactorManager != nullptr) { + Prompt("Help"); + exitHelp = false; + void* event; + while ((event = interactorManager->GetEvent()) != nullptr) { + interactorManager->DispatchEvent(event); + if (exitHelp) break; + } + Prompt("session"); + // + if (! fHelp) return false; + aInt = fHelpChoice; + fHelp = false; + return true; + } + else + return false; +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +void G4UIWin32::ExitHelp() const {} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +void G4UIWin32::AddMenu(const char* a_name, const char* a_label) +{ + if (a_name != nullptr) { + HMENU hMenu = CreatePopupMenu(); + AppendMenu(menuBar, MF_POPUP, (UINT_PTR)hMenu, a_label); + AddInteractor(a_name, (G4Interactor)hMenu); + DrawMenuBar(fHWndMainWindow); + } +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +void G4UIWin32::AddButton(const char* a_menu, const char* a_label, const char* a_command) +{ + if ((a_menu != nullptr) && (a_label != nullptr) && (a_command != nullptr)) { + HMENU hMenu = (HMENU)GetInteractor(a_menu); + actionIdentifier++; + commands[actionIdentifier] = a_command; + AppendMenu(hMenu, MF_STRING, actionIdentifier, a_label); + } +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +G4String G4UIWin32::GetCommand(G4int a_id) { return commands[a_id]; } +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +LRESULT CALLBACK G4UIWin32::MainWindowProc( + HWND aWindow, UINT aMessage, WPARAM wParam, LPARAM lParam) +{ + switch (aMessage) { + case WM_CREATE: { + auto* This = (G4UIWin32*)tmpSession; + if (This != nullptr) { + if (! This->CreateComponents(aWindow)) { + MessageBox(aWindow, "Could not create components.", "Error", MB_OK | MB_ICONERROR); + return false; + } + } + } + return 0; + + case WM_SIZE: { + auto* This = (G4UIWin32*)::GetWindowLongPtr(aWindow, GWLP_USERDATA); + if (This != nullptr) { + if (! This->ResizeComponents(aWindow)) { + MessageBox(aWindow, "Could not resize components.", "Error", MB_OK | MB_ICONERROR); + return false; + } + } + } + return 0; + + case WM_CLOSE: + DestroyWindow(aWindow); + return 0; + + case WM_DESTROY: + PostQuitMessage(0); + return 0; + + case WM_SETFOCUS: { + auto* This = (G4UIWin32*)::GetWindowLongPtr(aWindow, GWLP_USERDATA); + if (This != nullptr) SetFocus(This->fHWndComboBox); + } + return 0; + + case WM_NOTIFY: { + auto* This = (G4UIWin32*)::GetWindowLongPtr(aWindow, GWLP_USERDATA); + if (This != nullptr) { + switch (((LPNMHDR)lParam)->code) { + // Tooltip for Toolbar + case TTN_NEEDTEXT: { + auto lpttt = (LPTOOLTIPTEXT)lParam; + lpttt->hinst = nullptr; + UINT idButton = lpttt->hdr.idFrom; + lpttt->lpszText = (LPSTR)This->GetToolTips(idButton).c_str(); + } break; + + // Tooltip for TreeView + case TVN_GETINFOTIP: { + auto pTip = (LPNMTVGETINFOTIP)lParam; + pTip->pszText = (LPSTR)This->GetHelpTreeToolTips(pTip->hItem).c_str(); + } break; + + // Double click for TreeView + case NM_DBLCLK: { + auto lpnmh = (LPNMHDR)lParam; + auto item = TreeView_GetSelection(lpnmh->hwndFrom); + This->HelpTreeDoubleClick(item); + } break; + } + } + } + return 0; + + case WM_COMMAND: { + auto* This = (G4UIWin32*)::GetWindowLongPtr(aWindow, GWLP_USERDATA); + if (This != nullptr) + if (! This->ProcessDefaultCommands(LOWORD(wParam))) + // If the command was not processed, do it now + switch (LOWORD(wParam)) { + case IDC_MAIN_EDIT: { + // We have to release some space when the buffer is full + if (HIWORD(wParam) == EN_ERRSPACE || HIWORD(wParam) == EN_MAXTEXT) { + G4int bufferSize = + SendMessage(This->fHWndEditor, EM_GETLIMITTEXT, (WPARAM)0, (LPARAM)0); + + // Select the first third of the text + SendMessage(This->fHWndEditor, EM_SETSEL, (WPARAM)0, (LPARAM)bufferSize / 3); + // Delete it + SendMessage(This->fHWndEditor, EM_REPLACESEL, (WPARAM)0, (LPARAM) ""); + // Scroll to the bottom + SendMessage(This->fHWndEditor, WM_VSCROLL, SB_BOTTOM, NULL); + } + } break; + default: + if (! This->fHelp) { + G4String command = This->GetCommand(wParam); + This->ApplyShellCommand(command, exitSession, exitPause); + } + } + } + return 0; + default: + // For all the other cases, call the default window procedure. + return DefWindowProc(aWindow, aMessage, wParam, lParam); + } +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +LRESULT CALLBACK G4UIWin32::ComboEditorWindowProc( + HWND aWindow, UINT aMessage, WPARAM wParam, LPARAM lParam) +{ + // We need to go two steps up: Editor -> ComboBox -> Window + HWND parent = GetParent(GetParent(aWindow)); + auto* This = (G4UIWin32*)::GetWindowLongPtr(parent, GWLP_USERDATA); + + switch (aMessage) { + case WM_KEYDOWN: + switch (wParam) { + case VK_TAB: { + if (This != nullptr) { + if (This->fHelp) break; + + This->ProcessTabKey(); + } + } + return 0; // Do not jump into origComboEditorWindowProc. + + case VK_ESCAPE: { + if (This != nullptr) This->ProcessEscKey(); + } + return 0; // Do not jump into origComboEditorWindowProc. + + case VK_RETURN: { + if (This != nullptr) This->ProcessEnterKey(); + } + return 0; // Do not jump into origComboEditorWindowProc. + + case VK_UP: { + if (This != nullptr) This->ProcessUpKey(); + } + return 0; // Do not jump into origComboEditorWindowProc. + + case VK_DOWN: { + if (This != nullptr) This->ProcessDownKey(); + } + return 0; // Do not jump into origComboEditorWindowProc. + } + break; + + case WM_KEYUP: + case WM_CHAR: + switch (wParam) { + case VK_TAB: + case VK_ESCAPE: + case VK_RETURN: + case VK_UP: + case VK_DOWN: + return 0; // Do not jump into origComboEditorWindowProc. + } + } + + // Call the original window procedure for default processing. + return CallWindowProc(origComboEditorWindowProc, aWindow, aMessage, wParam, lParam); +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +G4bool G4UIWin32::CreateComponents(HWND aWindow) +{ + HFONT hfDefault; + TBBUTTON tbb[NUM_BUTTONS]; + TBADDBITMAP tbab; + RECT rcClient; // dimensions of client area + + G4int statwidths[] = {100, -1}; + + // Create Edit Control + fHWndEditor = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", + WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | + ES_AUTOHSCROLL | ES_READONLY, + 0, 0, 100, 100, aWindow, (HMENU)IDC_MAIN_EDIT, GetModuleHandle(nullptr), nullptr); + if (fHWndEditor == nullptr) + MessageBox(aWindow, "Could not create edit box.", "Error", MB_OK | MB_ICONERROR); + + // Set editor font + // hfDefault = (HFONT) GetStockObject(DEFAULT_GUI_FONT); + hfDefault = CreateFont(-10, -8, 0, 0, 0, false, 0, 0, OEM_CHARSET, OUT_RASTER_PRECIS, + CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH, "System"); + SendMessage(fHWndEditor, WM_SETFONT, (WPARAM)hfDefault, MAKELPARAM(false, 0)); + + // Set editor's buffer size (the default value is too small) + SendMessage(fHWndEditor, EM_SETLIMITTEXT, (WPARAM)500000, (LPARAM)0); + + // Create Toolbar + fHWndToolBar = CreateWindowEx(0, TOOLBARCLASSNAME, nullptr, + WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS, 0, 0, 0, 0, aWindow, + (HMENU)IDC_MAIN_TOOL, GetModuleHandle(nullptr), nullptr); + if (fHWndToolBar == nullptr) + MessageBox(aWindow, "Could not create tool bar.", "Error", MB_OK | MB_ICONERROR); + + // Required for backward compatibility. + SendMessage(fHWndToolBar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), (LPARAM)0); + + // Load standard images + tbab.hInst = HINST_COMMCTRL; + tbab.nID = IDB_STD_SMALL_COLOR; + SendMessage(fHWndToolBar, TB_ADDBITMAP, (WPARAM)0, (LPARAM)&tbab); + + // Load history images + tbab.hInst = HINST_COMMCTRL; + tbab.nID = IDB_HIST_SMALL_COLOR; + SendMessage(fHWndToolBar, TB_ADDBITMAP, (WPARAM)0, (LPARAM)&tbab); + + G4int btnBMP[NUM_BUTTONS] = {STD_FILEOPEN, STD_FILESAVE, -1, STD_FIND, STD_FIND, -1, + 15 + HIST_FORWARD, -1, STD_HELP, -1, STD_FILENEW, STD_FILESAVE}; + G4int btnSTL[NUM_BUTTONS] = {TBSTYLE_BUTTON, TBSTYLE_BUTTON, TBSTYLE_SEP, TBSTYLE_BUTTON, + TBSTYLE_BUTTON, TBSTYLE_SEP, TBSTYLE_BUTTON, TBSTYLE_SEP, TBSTYLE_BUTTON, TBSTYLE_SEP, + TBSTYLE_BUTTON, TBSTYLE_BUTTON}; + G4int btnCMD[NUM_BUTTONS] = {ID_OPEN_MACRO, ID_SAVE_VIEWER_STATE, -1, ID_ZOOM_IN, ID_ZOOM_OUT, -1, + ID_RUN_BEAMON, -1, ID_HELP_ABOUT, -1, ID_LOG_CLEAN, ID_LOG_SAVE}; + ZeroMemory(tbb, sizeof(tbb)); + for (G4int i = 0; i < NUM_BUTTONS; i++) { + tbb[i].iBitmap = btnBMP[i]; + tbb[i].fsState = TBSTATE_ENABLED; + tbb[i].fsStyle = btnSTL[i]; + tbb[i].idCommand = btnCMD[i]; + } + + SendMessage(fHWndToolBar, TB_ADDBUTTONS, sizeof(tbb) / sizeof(TBBUTTON), (LPARAM)&tbb); + + // Create the Combobox + fHWndComboBox = CreateWindowEx(0, WC_COMBOBOX, TEXT(""), + CBS_DROPDOWN | CBS_HASSTRINGS | WS_CHILD | WS_OVERLAPPED | WS_VISIBLE, 150, 0, 200, 200, + aWindow, (HMENU)IDC_MAIN_COMBO, GetModuleHandle(nullptr), nullptr); + + // Display an initial item in the selection field + SendMessage(fHWndComboBox, CB_SETCURSEL, (WPARAM)2, (LPARAM)0); + + // Get aWindow of edit control in combobox created earlier. + fHWndComboEditor = FindWindowEx(fHWndComboBox, nullptr, WC_EDIT, nullptr); + + // Change the window procedure for the edit windows to the subclass procedure. + origComboEditorWindowProc = + (WNDPROC)SetWindowLongPtr(fHWndComboEditor, GWLP_WNDPROC, (LONG_PTR)ComboEditorWindowProc); + + // Create TreeView + + // Get the dimensions of the parent window's client area, and create + // the tree-view control. + GetClientRect(aWindow, &rcClient); + fHWndHelpTree = CreateWindowEx(0, WC_TREEVIEW, TEXT("Tree View"), + WS_VISIBLE | WS_CHILD | WS_BORDER | TVS_INFOTIP | TVS_HASBUTTONS | TVS_HASLINES | + TVS_LINESATROOT, + 0, 0, rcClient.right, rcClient.bottom, aWindow, (HMENU)IDC_MAIN_TREE_VIEW, + GetModuleHandle(nullptr), nullptr); + + // Initialize the Help Tree View. + /* if (!InitHelpTreeItems()) { + DestroyWindow(fHWndHelpTree); + return false; + }*/ + + // Create Status bar + fHWndStatus = CreateWindowEx(0, STATUSCLASSNAME, nullptr, WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP, + 100, 100, 200, 200, aWindow, (HMENU)IDC_MAIN_STATUS, GetModuleHandle(nullptr), nullptr); + + SendMessage(fHWndStatus, SB_SETPARTS, sizeof(statwidths) / sizeof(int), (LPARAM)statwidths); + // SendMessage(fHWndStatus, SB_SETTEXT, 0, (LPARAM) "Hi there :)"); + + return true; +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +G4bool G4UIWin32::ResizeComponents(HWND aWindow) +{ + RECT rcTool; + G4int iToolHeight, iToolWidth; + + RECT rcStatus; + G4int iStatusHeight; + + RECT rcComboBox; + G4int iComboBoxHeight; + + G4int iTreeViewHeight, iTreeViewWidth; + G4int iEditHeight, iEditWidth; + + RECT rcClient; + + // Size toolbar and get height and width + SendMessage(fHWndToolBar, TB_AUTOSIZE, 0, 0); + + GetWindowRect(fHWndToolBar, &rcTool); + iToolHeight = rcTool.bottom - rcTool.top; + iToolWidth = rcTool.right - rcTool.left; + + // Size status bar and get height + SendMessage(fHWndStatus, WM_SIZE, 0, 0); + + GetWindowRect(fHWndStatus, &rcStatus); + iStatusHeight = rcStatus.bottom - rcStatus.top; + + // Size status the Combo Box and get height + SendMessage(fHWndComboBox, WM_SIZE, 0, 0); + + GetWindowRect(fHWndComboBox, &rcComboBox); + iComboBoxHeight = rcComboBox.bottom - rcComboBox.top; + + // Calculate remaining height and size edit + GetClientRect(aWindow, &rcClient); + + iTreeViewHeight = rcClient.bottom - iToolHeight - iStatusHeight; + iTreeViewWidth = iToolWidth / 4; + + iEditHeight = rcClient.bottom - iToolHeight - iComboBoxHeight - iStatusHeight; + iEditWidth = iToolWidth - iTreeViewWidth; + + // TreeView location and size + SetWindowPos( + fHWndHelpTree, nullptr, 0, iToolHeight, iTreeViewWidth, iTreeViewHeight, SWP_NOZORDER); + + // Editor location and size + SetWindowPos( + fHWndEditor, nullptr, iTreeViewWidth, iToolHeight, iEditWidth, iEditHeight, SWP_NOZORDER); + + // ComboBox location and size + SetWindowPos( + fHWndComboBox, nullptr, iTreeViewWidth, iToolHeight + iEditHeight, iEditWidth, 200, 0); + + return true; +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +void G4UIWin32::ProcessTabKey() +{ + char buffer[256]; + + // Only process the command it the user has written something + if (SendMessage(fHWndComboBox, WM_GETTEXT, (WPARAM)sizeof(buffer), (LPARAM)buffer) != 0) { + G4String command(buffer); + + SetFocus(fHWndComboBox); + + G4String cmd = Complete(command); + const char* d = cmd.data(); + G4int l = strlen(d); + Edit_SetText(fHWndComboEditor, d); + Edit_SetSel(fHWndComboEditor, l, l); + } + else { + if (GetFocus() == fHWndComboEditor) + SetFocus(fHWndHelpTree); + else + SetFocus(fHWndComboBox); + } +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +void G4UIWin32::ProcessEscKey() +{ + // Clear the current selection. + SendMessage(fHWndComboBox, CB_SETCURSEL, (WPARAM)(-1), (LPARAM)0); + // Set the focus to the Combo Box. + SetFocus(fHWndComboBox); +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +void G4UIWin32::ProcessEnterKey() +{ + char buffer[256]; + DWORD dwIndex, numItems; + + // Only process the command it the user has written something + if (SendMessage(fHWndComboBox, WM_GETTEXT, (WPARAM)sizeof(buffer), (LPARAM)buffer) != 0) { + SetFocus(fHWndComboBox); + + // Read command + G4String command(buffer); + + // Now clear the current selection. + SendMessage(fHWndComboBox, CB_SETCURSEL, (WPARAM)-1, (LPARAM)0); + + if (fHelp) { + exitHelp = true; + fHelp = ConvertStringToInt(command.data(), fHelpChoice); + } + else { + fHistory.push_back(command); + fHistoryPos = -1; + ApplyShellCommand(command, exitSession, exitPause); + + // Now update the history in the ComboBox + + // Check if this command exists in the ComboBox + dwIndex = SendMessage(fHWndComboBox, CB_FINDSTRINGEXACT, (WPARAM)(-1), (LPARAM)buffer); + + // Add the string, if necessary + if (dwIndex == CB_ERR) + dwIndex = SendMessage(fHWndComboBox, CB_INSERTSTRING, (WPARAM)0, (LPARAM)buffer); + // If the string exists, move it to the first position + if (dwIndex != CB_ERR) { + SendMessage(fHWndComboBox, CB_DELETESTRING, (WPARAM)dwIndex, (LPARAM)0); + dwIndex = SendMessage(fHWndComboBox, CB_INSERTSTRING, (WPARAM)0, (LPARAM)buffer); + } + + numItems = SendMessage(fHWndComboBox, CB_GETCOUNT, (WPARAM)0, (LPARAM)0); + while (numItems > MAX_HISTORY_ITEMS) { + SendMessage(fHWndComboBox, CB_DELETESTRING, (WPARAM)(numItems - 1), (LPARAM)0); + numItems = SendMessage(fHWndComboBox, CB_GETCOUNT, (WPARAM)0, (LPARAM)0); + } + } + } +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +void G4UIWin32::ProcessUpKey() +{ + G4int pos = fHistoryPos == -1 ? fHistory.size() - 1 : fHistoryPos - 1; + if ((pos >= 0) && (pos < (G4int)fHistory.size())) { + G4String command = fHistory[pos]; + const char* d = command.data(); + G4int l = strlen(d); + Edit_SetText(fHWndComboEditor, d); + Edit_SetSel(fHWndComboEditor, l, l); + + fHistoryPos = pos; + } +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +void G4UIWin32::ProcessDownKey() +{ + G4int pos = fHistoryPos + 1; + if ((pos >= 0) && (pos < (G4int)fHistory.size())) { + G4String command = fHistory[pos]; + const char* d = command.data(); + G4int l = strlen(d); + Edit_SetText(fHWndComboEditor, d); + Edit_SetSel(fHWndComboEditor, l, l); + + fHistoryPos = pos; + } + else if (pos >= (G4int)fHistory.size()) { + Edit_SetText(fHWndComboEditor, ""); + Edit_SetSel(fHWndComboEditor, 0, 0); + + fHistoryPos = -1; + } +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +G4bool G4UIWin32::ProcessDefaultCommands(G4int idCommand) +{ + switch (idCommand) { + case ID_EXIT_APP: + PostMessage(fHWndMainWindow, WM_CLOSE, 0, 0); + return true; + case ID_OPEN_MACRO: + DoOpenMacro(fHWndMainWindow); + return true; + case ID_SAVE_VIEWER_STATE: + DoSaveViewer(fHWndMainWindow); + return true; + case ID_RUN_BEAMON: + if (! fHelp) { + G4String command = "/run/beamOn 1"; + ApplyShellCommand(command, exitSession, exitPause); + } + return true; + case ID_RUN_CMD: + return true; + case ID_VIEW_SOLID: + if (! fHelp) { + G4String command = "/vis/viewer/set/style s"; + ApplyShellCommand(command, exitSession, exitPause); + } + return true; + case ID_VIEW_WIREFRAME: + if (! fHelp) { + G4String command = "/vis/viewer/set/style w"; + ApplyShellCommand(command, exitSession, exitPause); + } + return true; + case ID_PROJ_ORTHOGRAPHIC: + if (! fHelp) { + G4String command = "/vis/viewer/set/projection o"; + ApplyShellCommand(command, exitSession, exitPause); + } + return true; + case ID_PROJ_PERSPECTIVE: + if (! fHelp) { + G4String command = "/vis/viewer/set/projection p"; + ApplyShellCommand(command, exitSession, exitPause); + } + return true; + case ID_ZOOM_IN: + if (! fHelp) { + G4String command = "/vis/viewer/zoom 1.2"; + ApplyShellCommand(command, exitSession, exitPause); + } + return true; + case ID_ZOOM_OUT: + if (! fHelp) { + G4String command = "/vis/viewer/zoom 0.8"; + ApplyShellCommand(command, exitSession, exitPause); + } + return true; + case ID_ORIENTATION_XY: + if (! fHelp) { + G4String command = "/vis/viewer/set/viewpointThetaPhi 0. 0."; + ApplyShellCommand(command, exitSession, exitPause); + } + return true; + case ID_ORIENTATION_XZ: + if (! fHelp) { + G4String command = "/vis/viewer/set/viewpointThetaPhi 90. 0."; + ApplyShellCommand(command, exitSession, exitPause); + } + return true; + case ID_ORIENTATION_YZ: + if (! fHelp) { + G4String command = "/vis/viewer/set/viewpointThetaPhi 0. 90."; + ApplyShellCommand(command, exitSession, exitPause); + } + return true; + case ID_ORIENTATION_OBLIQUE: + if (! fHelp) { + G4String command = "/vis/viewer/set/viewpointThetaPhi 45. -45."; + ApplyShellCommand(command, exitSession, exitPause); + } + return true; + case ID_HELP_ABOUT: + return true; + case ID_LOG_CLEAN: + SetDlgItemText(fHWndMainWindow, IDC_MAIN_EDIT, ""); + return true; + case ID_LOG_SAVE: + DoSaveLog(fHWndMainWindow); + return true; + default: + return false; + } +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +G4String G4UIWin32::GetToolTips(G4int idButton) +{ + switch (idButton) { + case ID_OPEN_MACRO: + return "Open and execute macro file"; + + case ID_SAVE_VIEWER_STATE: + return "Save viewer state"; + + case ID_ZOOM_IN: + return "Zoom in"; + + case ID_ZOOM_OUT: + return "Zoom out"; + + case ID_RUN_BEAMON: + return "Beam on (one particle)"; + + case ID_HELP_ABOUT: + return "About G4UIWin32"; + + case ID_LOG_CLEAN: + return "Clean log"; + + case ID_LOG_SAVE: + return "Save log"; + + default: + return ""; + } +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +G4String G4UIWin32::GetHelpTreeToolTips(HTREEITEM item) +{ + // Tooltips for the help tree + G4UImanager* UI = G4UImanager::GetUIpointer(); + if (UI == nullptr) return ""; + G4UIcommandTree* treeTop = UI->GetTree(); + + G4String itemText = GetItemPath(item); + + // Check if it is a command path + if (TreeView_GetChild(fHWndHelpTree, item) != nullptr) itemText += "/"; + + G4UIcommand* command = treeTop->FindPath(itemText.c_str()); + + if (command) { + // This is a command, return the first line of help + return command->GetGuidanceLine(0).data(); + } + else { + // This is not a command, but a sub directory, return the title + G4UIcommandTree* path = treeTop->FindCommandTree(itemText.c_str()); + if (path) return path->GetTitle().data(); + } + + return ""; +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +G4String G4UIWin32::ConvertNewLines(G4String a_string) +{ + // Geant4 uses UNIX's style for new lines (\n) + // we must convert them to Windows' style (\r\n) + G4String str = std::move(a_string); + size_t index = str.find("\n", 0); + while (index < str.length()) { + str.replace(index, 2, "\r\n"); + // Advance index forward so the next iteration doesn't pick it up as well. + index = str.find("\n", index + 2); + } + return str; +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +void G4UIWin32::HelpTreeDoubleClick(HTREEITEM item) +{ + const char* item_path = GetItemPath(item); + G4int l = strlen(item_path); + Edit_SetText(fHWndComboEditor, item_path); + Edit_SetSel(fHWndComboEditor, l, l); + + SetFocus(fHWndComboEditor); +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +G4bool G4UIWin32::SaveLogFile(LPCTSTR fileName) +{ + HANDLE hFile; + G4bool bSuccess = false; + + hFile = + CreateFile(fileName, GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); + if (hFile != INVALID_HANDLE_VALUE) { + DWORD dwTextLength; + + dwTextLength = GetWindowTextLength(fHWndEditor); + // No need to bother if there's no text. + if (dwTextLength > 0) { + LPSTR text; + DWORD dwBufferSize = dwTextLength + 1; + + text = (LPSTR)GlobalAlloc(GPTR, dwBufferSize); + if (text != nullptr) { + if (GetWindowText(fHWndEditor, text, dwBufferSize)) { + DWORD dwWritten; + + if (WriteFile(hFile, text, dwTextLength, &dwWritten, nullptr)) bSuccess = true; + } + GlobalFree(text); + } + } + CloseHandle(hFile); + } + return bSuccess; +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +void G4UIWin32::AddText(LPSTR text) +{ + if ((fHWndEditor != nullptr) && (text != nullptr) && (text[0] != '\0')) { + // Get current text length + G4int ndx = GetWindowTextLength(fHWndEditor); + + // Select the end of the text + SendMessage(fHWndEditor, EM_SETSEL, (WPARAM)ndx, (LPARAM)ndx); + // Add the new text + SendMessage(fHWndEditor, EM_REPLACESEL, (WPARAM)0, (LPARAM)text); + // Scroll to the bottom + SendMessage(fHWndEditor, WM_VSCROLL, SB_BOTTOM, NULL); + } +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +void G4UIWin32::DoOpenMacro(HWND aWindow) +{ + OPENFILENAME ofn; + char szFileName[MAX_PATH] = ""; + + ZeroMemory(&ofn, sizeof(ofn)); + + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = aWindow; + ofn.lpstrFilter = "Macro Files (*.mac)\0*.mac\0All Files (*.*)\0*.*\0"; + ofn.lpstrFile = szFileName; + ofn.nMaxFile = MAX_PATH; + ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; + ofn.lpstrDefExt = "mac"; + + if (GetOpenFileName(&ofn)) { + G4String command = "/control/execute " + G4String(szFileName); + ApplyShellCommand(command, exitSession, exitPause); + + SendDlgItemMessage(aWindow, IDC_MAIN_STATUS, SB_SETTEXT, 0, (LPARAM) "Opened macro..."); + SendDlgItemMessage(aWindow, IDC_MAIN_STATUS, SB_SETTEXT, 1, (LPARAM)szFileName); + } +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +void G4UIWin32::DoSaveViewer(HWND aWindow) +{ + OPENFILENAME ofn; + char szFileName[MAX_PATH] = ""; + + ZeroMemory(&ofn, sizeof(ofn)); + + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = aWindow; + ofn.lpstrFilter = "Macro Files (*.mac)\0*.mac\0All Files (*.*)\0*.*\0"; + ofn.lpstrFile = szFileName; + ofn.nMaxFile = MAX_PATH; + ofn.lpstrDefExt = "mac"; + ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; + + if (GetSaveFileName(&ofn)) { + G4String command = "/vis/viewer/save " + G4String(szFileName); + ApplyShellCommand(command, exitSession, exitPause); + + SendDlgItemMessage(aWindow, IDC_MAIN_STATUS, SB_SETTEXT, 0, (LPARAM) "State saved..."); + SendDlgItemMessage(aWindow, IDC_MAIN_STATUS, SB_SETTEXT, 1, (LPARAM)szFileName); + } +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +void G4UIWin32::DoSaveLog(HWND aWindow) +{ + OPENFILENAME ofn; + char szFileName[MAX_PATH] = ""; + + ZeroMemory(&ofn, sizeof(ofn)); + + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = aWindow; + ofn.lpstrFilter = "Log Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0"; + ofn.lpstrFile = szFileName; + ofn.nMaxFile = MAX_PATH; + ofn.lpstrDefExt = "txt"; + ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT; + + if (GetSaveFileName(&ofn)) { + if (SaveLogFile(szFileName)) { + SendDlgItemMessage(aWindow, IDC_MAIN_STATUS, SB_SETTEXT, 0, (LPARAM) "Saved log file..."); + SendDlgItemMessage(aWindow, IDC_MAIN_STATUS, SB_SETTEXT, 1, (LPARAM)szFileName); + } + } +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +G4bool G4UIWin32::InitHelpTreeItems() +{ + HTREEITEM newItem; + + G4UImanager* UI = G4UImanager::GetUIpointer(); + if (UI == nullptr) return false; + G4UIcommandTree* treeTop = UI->GetTree(); + + G4int treeSize = treeTop->GetTreeEntry(); + G4String commandText; + for (G4int a = 0; a < treeSize; a++) { + // Creating new item + commandText = treeTop->GetTree(a + 1)->GetPathName().data(); + + // Add the item to the tree-view control. + newItem = AddItemToHelpTree(const_cast(GetShortCommandPath(commandText).c_str())); + + if (newItem == nullptr) return false; + + // Look for children + CreateHelpTree(newItem, treeTop->GetTree(a + 1)); + } + + return true; +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +void G4UIWin32::CreateHelpTree(HTREEITEM aParent, G4UIcommandTree* aCommandTree) +{ + if ((aParent != nullptr) && (aCommandTree != nullptr)) { + // Creating new item + HTREEITEM newItem; + + G4String commandText; + // Get the Sub directories + for (G4int a = 0; a < aCommandTree->GetTreeEntry(); a++) { + commandText = aCommandTree->GetTree(a + 1)->GetPathName().data(); + + // Add the item to the tree-view control. + newItem = + AddItemToHelpTree(const_cast(GetShortCommandPath(commandText).c_str()), aParent); + + // Look for children + CreateHelpTree(newItem, aCommandTree->GetTree(a + 1)); + } + + // Get the Commands + for (G4int a = 0; a < aCommandTree->GetCommandEntry(); a++) { + commandText = aCommandTree->GetCommand(a + 1)->GetCommandPath().data(); + + // Add the item to the tree-view control. + AddItemToHelpTree(const_cast(GetShortCommandPath(commandText).c_str()), aParent); + } + } +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +HTREEITEM G4UIWin32::AddItemToHelpTree(LPTSTR lpszItem, HTREEITEM aParent) +{ + TVITEM tvi; + TVINSERTSTRUCT tvins; + static auto hPrev = (HTREEITEM)TVI_FIRST; + + tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM; + + // Set the text of the item. + tvi.pszText = lpszItem; + tvi.cchTextMax = sizeof(tvi.pszText) / sizeof(tvi.pszText[0]); + + // Save the heading level in the item's application-defined + // data area. + tvi.lParam = (LPARAM)aParent; + tvins.item = tvi; + tvins.hInsertAfter = hPrev; + // Set the parent item. + tvins.hParent = aParent; + + // Add the item to the tree-view control. + hPrev = (HTREEITEM)SendMessage( + fHWndHelpTree, TVM_INSERTITEM, (WPARAM)0, (LPARAM)(LPTVINSERTSTRUCT)&tvins); + + if (hPrev == nullptr) + return nullptr; + else + return hPrev; +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +G4String G4UIWin32::GetShortCommandPath(G4String commandPath) +{ + G4String str = std::move(commandPath); + + if (str.find_last_of("/") == (str.size() - 1)) str = str.erase(str.size() - 1, 1); + + str = str.erase(0, str.find_last_of("/") + 1); + + return str; +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +LPSTR G4UIWin32::GetItemPath(HTREEITEM item) +{ + // Get the text for the item. + TVITEM tvitem; + tvitem.mask = TVIF_TEXT; + tvitem.hItem = item; + TCHAR infoTipBuf[1024]; + tvitem.pszText = infoTipBuf; + tvitem.cchTextMax = sizeof(infoTipBuf) / sizeof(TCHAR); + + std::string str = ""; + while (item != nullptr) { + TreeView_GetItem(fHWndHelpTree, &tvitem); + str = "/" + std::string(tvitem.pszText) + str; + + item = TreeView_GetParent(fHWndHelpTree, item); + tvitem.hItem = item; + } + + auto* result = new TCHAR[str.size() + 1]; + result[str.size()] = 0; + std::copy(str.begin(), str.end(), result); + + return result; +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ + +/****************************************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +G4bool ConvertStringToInt(const char* aString, G4int& aInt) +{ + aInt = 0; + if (aString == nullptr) return false; + char* s; + G4long value = strtol(aString, &s, 10); + if (s == aString) return false; + aInt = value; + return true; +} +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +/****************************************************************************************************/ diff --git a/source/interfaces/basic/src/G4UIXm.cc b/source/interfaces/implementation/src/G4UIXm.cc similarity index 54% rename from source/interfaces/basic/src/G4UIXm.cc rename to source/interfaces/implementation/src/G4UIXm.cc index 03b8fb055c4..76fe14a5724 100644 --- a/source/interfaces/basic/src/G4UIXm.cc +++ b/source/interfaces/implementation/src/G4UIXm.cc @@ -27,323 +27,287 @@ // // G.Barrand -//#define DEBUG +// #define DEBUG -#include "G4Types.hh" +#include "G4UIXm.hh" -#include +#include "G4StateManager.hh" +#include "G4Types.hh" +#include "G4UIcommandStatus.hh" +#include "G4UIcommandTree.hh" +#include "G4UImanager.hh" +#include "G4Xt.hh" #include #include #include - -#include +#include #include -#include #include #include -#include +#include #include - -#include "G4UIXm.hh" -#include "G4UImanager.hh" -#include "G4StateManager.hh" -#include "G4UIcommandTree.hh" -#include "G4UIcommandStatus.hh" - -#include "G4Xt.hh" - +#include #include +#include -static void XmTextAppendString (Widget,char*); +static void XmTextAppendString(Widget, char*); -static void clearButtonCallback (Widget,XtPointer,XtPointer); +static void clearButtonCallback(Widget, XtPointer, XtPointer); -static char* XmConvertCompoundStringToString (XmString,G4int); -static G4bool ConvertStringToInt(const char*,G4int&); +static char* XmConvertCompoundStringToString(XmString, G4int); +static G4bool ConvertStringToInt(const char*, G4int&); static void ExecuteChangeSizeFunction(Widget); static G4bool exitSession = true; static G4bool exitPause = true; static G4bool exitHelp = true; /***************************************************************************/ -G4UIXm::G4UIXm ( - G4int argc -,char** argv -) -:shell(NULL) -,command(NULL) -,menuBar(NULL) -,text(NULL) -,fHelp(false) -,fHelpChoice(0) +G4UIXm::G4UIXm(G4int argc, char** argv) + : shell(NULL), command(NULL), menuBar(NULL), text(NULL), fHelp(false), fHelpChoice(0) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI!=NULL) UI->SetSession(this); + if (UI != NULL) UI->SetSession(this); - G4Xt* interactorManager = G4Xt::getInstance (argc,argv,(char*)"Xm"); + G4Xt* interactorManager = G4Xt::getInstance(argc, argv, (char*)"Xm"); Widget top = (Widget)interactorManager->GetMainInteractor(); - if(std::getenv("XENVIRONMENT")==NULL) { + if (std::getenv("XENVIRONMENT") == NULL) { XrmDatabase database = XrmGetDatabase(XtDisplay(top)); - if(database!=NULL) { - XrmPutLineResource(&database,"*topShadowColor:white"); - XrmPutLineResource(&database,"*bottomShadowColor:black"); - XrmPutLineResource(&database,"*foreground:black"); - XrmPutLineResource(&database,"*background:lightgrey"); - XrmPutLineResource(&database,"*borderColor:lightgrey"); - XrmPutLineResource(&database,"*fontList:-*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-1"); - XrmPutLineResource(&database,"*text.background:white"); - XrmPutLineResource(&database,"*text.fontList:*courier*-r-*--14-*"); - XrmPutLineResource(&database,"*text.maxLength:8000"); + if (database != NULL) { + XrmPutLineResource(&database, "*topShadowColor:white"); + XrmPutLineResource(&database, "*bottomShadowColor:black"); + XrmPutLineResource(&database, "*foreground:black"); + XrmPutLineResource(&database, "*background:lightgrey"); + XrmPutLineResource(&database, "*borderColor:lightgrey"); + XrmPutLineResource(&database, "*fontList:-*-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-1"); + XrmPutLineResource(&database, "*text.background:white"); + XrmPutLineResource(&database, "*text.fontList:*courier*-r-*--14-*"); + XrmPutLineResource(&database, "*text.maxLength:8000"); } } Arg args[9]; - XtSetArg(args[0],XmNkeyboardFocusPolicy,XmPOINTER); // For completion. - shell = XtAppCreateShell ("G4UIXm","G4UIXm", - topLevelShellWidgetClass,XtDisplay(top), - args,1); - form = XmCreateForm (shell,(char*)menu_str[0].c_str(),NULL,0); - XtManageChild (form); + XtSetArg(args[0], XmNkeyboardFocusPolicy, XmPOINTER); // For completion. + shell = XtAppCreateShell("G4UIXm", "G4UIXm", topLevelShellWidgetClass, XtDisplay(top), args, 1); + form = XmCreateForm(shell, (char*)menu_str[0].c_str(), NULL, 0); + XtManageChild(form); - XtSetArg(args[0],XmNtopAttachment ,XmATTACH_FORM); - XtSetArg(args[1],XmNleftAttachment ,XmATTACH_FORM); - XtSetArg(args[2],XmNrightAttachment ,XmATTACH_FORM); - menuBar = XmCreateMenuBar (form,(char*)menu_str[1].c_str(),args,3); + XtSetArg(args[0], XmNtopAttachment, XmATTACH_FORM); + XtSetArg(args[1], XmNleftAttachment, XmATTACH_FORM); + XtSetArg(args[2], XmNrightAttachment, XmATTACH_FORM); + menuBar = XmCreateMenuBar(form, (char*)menu_str[1].c_str(), args, 3); - XtSetArg(args[0],XmNtopAttachment ,XmATTACH_NONE); - XtSetArg(args[1],XmNleftAttachment ,XmATTACH_FORM); - XtSetArg(args[2],XmNrightAttachment ,XmATTACH_FORM); - XtSetArg(args[3],XmNbottomAttachment ,XmATTACH_FORM); - command = XmCreateCommand (form,(char*)menu_str[2].c_str(),args,4); - XtManageChild (command); + XtSetArg(args[0], XmNtopAttachment, XmATTACH_NONE); + XtSetArg(args[1], XmNleftAttachment, XmATTACH_FORM); + XtSetArg(args[2], XmNrightAttachment, XmATTACH_FORM); + XtSetArg(args[3], XmNbottomAttachment, XmATTACH_FORM); + command = XmCreateCommand(form, (char*)menu_str[2].c_str(), args, 4); + XtManageChild(command); - XtSetArg(args[0],XmNtopAttachment ,XmATTACH_NONE); - XtSetArg(args[1],XmNleftAttachment ,XmATTACH_FORM); - XtSetArg(args[2],XmNrightAttachment ,XmATTACH_FORM); - XtSetArg(args[3],XmNbottomAttachment,XmATTACH_WIDGET); - XtSetArg(args[4],XmNbottomWidget ,command); - XmString cps = XmStringLtoRCreate((char*)menu_str[3].c_str(),(char*)XmSTRING_DEFAULT_CHARSET); - XtSetArg (args[5],XmNlabelString,cps); - Widget clearButton = XmCreatePushButton(form,(char*)menu_str[4].c_str(),args,6); - XmStringFree (cps); - XtManageChild (clearButton); + XtSetArg(args[0], XmNtopAttachment, XmATTACH_NONE); + XtSetArg(args[1], XmNleftAttachment, XmATTACH_FORM); + XtSetArg(args[2], XmNrightAttachment, XmATTACH_FORM); + XtSetArg(args[3], XmNbottomAttachment, XmATTACH_WIDGET); + XtSetArg(args[4], XmNbottomWidget, command); + XmString cps = XmStringLtoRCreate((char*)menu_str[3].c_str(), (char*)XmSTRING_DEFAULT_CHARSET); + XtSetArg(args[5], XmNlabelString, cps); + Widget clearButton = XmCreatePushButton(form, (char*)menu_str[4].c_str(), args, 6); + XmStringFree(cps); + XtManageChild(clearButton); - XtSetArg(args[0],XmNtopAttachment ,XmATTACH_WIDGET); - XtSetArg(args[1],XmNtopWidget ,menuBar); - XtSetArg(args[2],XmNleftAttachment ,XmATTACH_FORM); - XtSetArg(args[3],XmNrightAttachment ,XmATTACH_FORM); - XtSetArg(args[4],XmNbottomAttachment,XmATTACH_WIDGET); - XtSetArg(args[5],XmNbottomWidget ,clearButton); - XtSetArg(args[6],XmNeditMode ,XmMULTI_LINE_EDIT); - XtSetArg(args[7],XmNrows ,12); - XtSetArg(args[8],XmNcolumns ,80); - text = XmCreateScrolledText (form,(char*)menu_str[5].c_str(),args,9); - XtManageChild (text); + XtSetArg(args[0], XmNtopAttachment, XmATTACH_WIDGET); + XtSetArg(args[1], XmNtopWidget, menuBar); + XtSetArg(args[2], XmNleftAttachment, XmATTACH_FORM); + XtSetArg(args[3], XmNrightAttachment, XmATTACH_FORM); + XtSetArg(args[4], XmNbottomAttachment, XmATTACH_WIDGET); + XtSetArg(args[5], XmNbottomWidget, clearButton); + XtSetArg(args[6], XmNeditMode, XmMULTI_LINE_EDIT); + XtSetArg(args[7], XmNrows, 12); + XtSetArg(args[8], XmNcolumns, 80); + text = XmCreateScrolledText(form, (char*)menu_str[5].c_str(), args, 9); + XtManageChild(text); - XtAddCallback(clearButton,XmNactivateCallback, - clearButtonCallback,(XtPointer)text); - XtAddCallback(command,XmNcommandEnteredCallback, - CommandEnteredCallback,(XtPointer)this); + XtAddCallback(clearButton, XmNactivateCallback, clearButtonCallback, (XtPointer)text); + XtAddCallback(command, XmNcommandEnteredCallback, CommandEnteredCallback, (XtPointer)this); - Widget commandText = XmCommandGetChild(command,XmDIALOG_COMMAND_TEXT); - XtAddEventHandler(commandText,KeyPressMask,False,keyHandler,(XtPointer)this); + Widget commandText = XmCommandGetChild(command, XmDIALOG_COMMAND_TEXT); + XtAddEventHandler(commandText, KeyPressMask, False, keyHandler, (XtPointer)this); XtRealizeWidget(shell); XtMapWidget(shell); - if(UI!=NULL) UI->SetCoutDestination(this); + if (UI != NULL) UI->SetCoutDestination(this); } /***************************************************************************/ -G4UIXm::~G4UIXm( -) +G4UIXm::~G4UIXm() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -{ +{ G4UImanager* UI = G4UImanager::GetUIpointer(); - if(UI!=NULL) { + if (UI != NULL) { UI->SetSession(NULL); UI->SetCoutDestination(NULL); } XtDestroyWidget(shell); } /***************************************************************************/ -G4UIsession* G4UIXm::SessionStart ( -) +G4UIsession* G4UIXm::SessionStart() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - G4Xt* interactorManager = G4Xt::getInstance (); + G4Xt* interactorManager = G4Xt::getInstance(); Prompt("session"); exitSession = false; - interactorManager->DisableSecondaryLoop (); + interactorManager->DisableSecondaryLoop(); void* event; - while((event = interactorManager->GetEvent())!=NULL) { + while ((event = interactorManager->GetEvent()) != NULL) { interactorManager->DispatchEvent(event); - if(exitSession==true) break; + if (exitSession == true) break; } - interactorManager->EnableSecondaryLoop (); + interactorManager->EnableSecondaryLoop(); return this; } /***************************************************************************/ -void G4UIXm::Prompt ( - G4String aPrompt -) +void G4UIXm::Prompt(G4String aPrompt) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { Arg args[1]; char* str = (char*)XtNewString(aPrompt.data()); - XmString cps = XmStringLtoRCreate(str,(char*)XmSTRING_DEFAULT_CHARSET); + XmString cps = XmStringLtoRCreate(str, (char*)XmSTRING_DEFAULT_CHARSET); XtFree(str); - XtSetArg(args[0],XmNpromptString,cps); - XtSetValues(command,args,1); + XtSetArg(args[0], XmNpromptString, cps); + XtSetValues(command, args, 1); XmStringFree(cps); } /***************************************************************************/ -void G4UIXm::SessionTerminate ( -) +void G4UIXm::SessionTerminate() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -{ -} +{} /***************************************************************************/ -void G4UIXm::PauseSessionStart ( - const G4String& a_state -) +void G4UIXm::PauseSessionStart(const G4String& a_state) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - if(a_state=="G4_pause> ") { - SecondaryLoop ("Pause, type continue to exit this state"); + if (a_state == "G4_pause> ") { + SecondaryLoop("Pause, type continue to exit this state"); } - if(a_state=="EndOfEvent") { + if (a_state == "EndOfEvent") { // Picking with feed back in event data Done here !!! - SecondaryLoop ("End of event, type continue to exit this state"); + SecondaryLoop("End of event, type continue to exit this state"); } } /***************************************************************************/ -void G4UIXm::SecondaryLoop ( - G4String a_prompt -) +void G4UIXm::SecondaryLoop(G4String a_prompt) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - G4Xt* interactorManager = G4Xt::getInstance (); + G4Xt* interactorManager = G4Xt::getInstance(); Prompt(a_prompt); exitPause = false; void* event; - while((event = interactorManager->GetEvent())!=NULL) { + while ((event = interactorManager->GetEvent()) != NULL) { interactorManager->DispatchEvent(event); - if(exitPause==true) break; + if (exitPause == true) break; } Prompt("session"); } /***************************************************************************/ -G4int G4UIXm::ReceiveG4cout ( - const G4String& a_string -) +G4int G4UIXm::ReceiveG4debug(const G4String& a_string) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - XmTextAppendString(text,(char*)a_string.data()); + XmTextAppendString(text, (char*)a_string.data()); + return 0; +} /***************************************************************************/ +G4int G4UIXm::ReceiveG4cout(const G4String& a_string) +/***************************************************************************/ +/*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ +{ + XmTextAppendString(text, (char*)a_string.data()); return 0; } /***************************************************************************/ -G4int G4UIXm::ReceiveG4cerr ( - const G4String& a_string -) +G4int G4UIXm::ReceiveG4cerr(const G4String& a_string) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - XmTextAppendString(text,(char*)a_string.data()); + XmTextAppendString(text, (char*)a_string.data()); return 0; } /***************************************************************************/ -G4bool G4UIXm::GetHelpChoice( - G4int& aInt -) +G4bool G4UIXm::GetHelpChoice(G4int& aInt) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { fHelp = true; // SecondaryLoop : - G4Xt* interactorManager = G4Xt::getInstance (); + G4Xt* interactorManager = G4Xt::getInstance(); Prompt("Help"); exitHelp = false; void* event; - while((event = interactorManager->GetEvent())!=NULL) { + while ((event = interactorManager->GetEvent()) != NULL) { interactorManager->DispatchEvent(event); - if(exitHelp==true) break; + if (exitHelp == true) break; } Prompt("session"); // - if(fHelp==false) return false; + if (fHelp == false) return false; aInt = fHelpChoice; fHelp = false; return true; } /***************************************************************************/ -void G4UIXm::ExitHelp( -) const +void G4UIXm::ExitHelp() const /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ -{ -} +{} /***************************************************************************/ -void G4UIXm::AddMenu ( - const char* a_name -,const char* a_label -) +void G4UIXm::AddMenu(const char* a_name, const char* a_label) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - if(menuBar==NULL) return; - if(a_name==NULL) return; - if(a_label==NULL) return; - XtManageChild (menuBar); + if (menuBar == NULL) return; + if (a_name == NULL) return; + if (a_label == NULL) return; + XtManageChild(menuBar); // Pulldown menu : Widget widget; - widget = XmCreatePulldownMenu (menuBar,(char*)a_name,NULL,0); - AddInteractor (a_name,(G4Interactor)widget); + widget = XmCreatePulldownMenu(menuBar, (char*)a_name, NULL, 0); + AddInteractor(a_name, (G4Interactor)widget); // Cascade button : Arg args[2]; - XmString cps = XmStringLtoRCreate((char*)a_label,(char*)XmSTRING_DEFAULT_CHARSET); - XtSetArg (args[0],XmNlabelString,cps); - XtSetArg (args[1],XmNsubMenuId,widget); - widget = XmCreateCascadeButton (menuBar,(char*)a_name,args,2); - XmStringFree (cps); - XtManageChild (widget); + XmString cps = XmStringLtoRCreate((char*)a_label, (char*)XmSTRING_DEFAULT_CHARSET); + XtSetArg(args[0], XmNlabelString, cps); + XtSetArg(args[1], XmNsubMenuId, widget); + widget = XmCreateCascadeButton(menuBar, (char*)a_name, args, 2); + XmStringFree(cps); + XtManageChild(widget); ExecuteChangeSizeFunction(form); } /***************************************************************************/ -void G4UIXm::AddButton ( - const char* a_menu -,const char* a_label -,const char* a_command -) +void G4UIXm::AddButton(const char* a_menu, const char* a_label, const char* a_command) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - if(a_menu==NULL) return; - if(a_label==NULL) return; - if(a_command==NULL) return; + if (a_menu == NULL) return; + if (a_label == NULL) return; + if (a_command == NULL) return; Widget parent = (Widget)GetInteractor(a_menu); - if(parent==NULL) return; - Widget widget = XmCreatePushButton(parent,(char*)a_label,NULL,0); - XtManageChild (widget); - XtAddCallback (widget,XmNactivateCallback,ButtonCallback,(XtPointer)this); + if (parent == NULL) return; + Widget widget = XmCreatePushButton(parent, (char*)a_label, NULL, 0); + XtManageChild(widget); + XtAddCallback(widget, XmNactivateCallback, ButtonCallback, (XtPointer)this); commands[widget] = a_command; } /***************************************************************************/ -G4String G4UIXm::GetCommand ( - Widget a_widget -) +G4String G4UIXm::GetCommand(Widget a_widget) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { @@ -352,103 +316,84 @@ G4String G4UIXm::GetCommand ( /***************************************************************************/ /***************************************************************************/ /***************************************************************************/ -void G4UIXm::CommandEnteredCallback ( - Widget -,XtPointer a_tag -,XtPointer a_data -) +void G4UIXm::CommandEnteredCallback(Widget, XtPointer a_tag, XtPointer a_data) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - G4UIXm* This = (G4UIXm*)a_tag; + G4UIXm* This = (G4UIXm*)a_tag; - XmString cps = ((XmCommandCallbackStruct*)a_data)->value; - char* ss = XmConvertCompoundStringToString(cps,0); - G4String scommand (ss); - XtFree (ss); + XmString cps = ((XmCommandCallbackStruct*)a_data)->value; + char* ss = XmConvertCompoundStringToString(cps, 0); + G4String scommand(ss); + XtFree(ss); - if(This->fHelp==true) { + if (This->fHelp == true) { exitHelp = true; - This->fHelp = ConvertStringToInt(scommand.data(),This->fHelpChoice); - } else { - This->ApplyShellCommand (scommand,exitSession,exitPause); + This->fHelp = ConvertStringToInt(scommand.data(), This->fHelpChoice); + } + else { + This->ApplyShellCommand(scommand, exitSession, exitPause); } - a_tag = NULL; + a_tag = NULL; } /***************************************************************************/ -void G4UIXm::keyHandler ( - Widget a_widget -,XtPointer a_tag -,XEvent* a_event -,Boolean* -) +void G4UIXm::keyHandler(Widget a_widget, XtPointer a_tag, XEvent* a_event, Boolean*) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { KeySym keySym; - XLookupString(&(a_event->xkey),NULL,0,&keySym,NULL); - if(keySym!=XK_Tab) return; + XLookupString(&(a_event->xkey), NULL, 0, &keySym, NULL); + if (keySym != XK_Tab) return; G4UIXm* This = (G4UIXm*)a_tag; char* s = XmTextGetString(a_widget); G4String ss = This->Complete(s); - XmTextSetString(a_widget,(char*)ss.data()); + XmTextSetString(a_widget, (char*)ss.data()); XtFree(s); - XmTextSetInsertionPosition(a_widget,XmTextGetLastPosition(a_widget)); + XmTextSetInsertionPosition(a_widget, XmTextGetLastPosition(a_widget)); } /***************************************************************************/ -void clearButtonCallback ( - Widget -,XtPointer a_tag -,XtPointer -) +void clearButtonCallback(Widget, XtPointer a_tag, XtPointer) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { static const G4String empty_str = ""; - XmTextSetString((Widget)a_tag,(char*)empty_str.c_str()); + XmTextSetString((Widget)a_tag, (char*)empty_str.c_str()); } /***************************************************************************/ -void G4UIXm::ButtonCallback ( - Widget a_widget -,XtPointer a_tag -,XtPointer -) +void G4UIXm::ButtonCallback(Widget a_widget, XtPointer a_tag, XtPointer) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { G4UIXm* This = (G4UIXm*)a_tag; - if(This->fHelp==true) return; // Disabled when in help. - G4String ss = This->GetCommand (a_widget); - This->ApplyShellCommand(ss,exitSession,exitPause); + if (This->fHelp == true) return; // Disabled when in help. + G4String ss = This->GetCommand(a_widget); + This->ApplyShellCommand(ss, exitSession, exitPause); } /***************************************************************************/ /***************************************************************************/ /***************************************************************************/ -char* XmConvertCompoundStringToString ( - XmString a_cps -,G4int a_number -) +char* XmConvertCompoundStringToString(XmString a_cps, G4int a_number) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - if(a_cps==NULL) return NULL; + if (a_cps == NULL) return NULL; char* ss = NULL; XmStringContext context; - XmStringInitContext(&context,a_cps); + XmStringInitContext(&context, a_cps); G4int icount = 0; Boolean Done = False; - while(Done==False) { + while (Done == False) { char* text = NULL; XmStringCharSet charset = NULL; XmStringDirection direct; Boolean sep; - if(XmStringGetNextSegment(context,&text,&charset,&direct,&sep)==True) { + if (XmStringGetNextSegment(context, &text, &charset, &direct, &sep) == True) { XtFree(charset); - if(sep==True) Done = True; - if(icount==a_number) { - ss = text; - break; + if (sep == True) Done = True; + if (icount == a_number) { + ss = text; + break; } icount++; XtFree(text); @@ -460,45 +405,37 @@ char* XmConvertCompoundStringToString ( return ss; } /***************************************************************************/ -void XmTextAppendString ( - Widget This -,char* a_string -) +void XmTextAppendString(Widget This, char* a_string) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - if(This==NULL) return; - if(!XtIsSubclass(This,xmTextWidgetClass)) return; - if(a_string==NULL) return; - XmTextPosition lastpos = XmTextGetLastPosition(This); - XmTextReplace(This,lastpos,lastpos,a_string); - XmTextSetInsertionPosition(This,XmTextGetLastPosition(This)); + if (This == NULL) return; + if (! XtIsSubclass(This, xmTextWidgetClass)) return; + if (a_string == NULL) return; + XmTextPosition lastpos = XmTextGetLastPosition(This); + XmTextReplace(This, lastpos, lastpos, a_string); + XmTextSetInsertionPosition(This, XmTextGetLastPosition(This)); } ////////////////////////////////////////////////////////////////////////////// -G4bool ConvertStringToInt( - const char* aString -,G4int& aInt -) +G4bool ConvertStringToInt(const char* aString, G4int& aInt) ////////////////////////////////////////////////////////////////////////////// //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!// { aInt = 0; - if(aString==NULL) return false; + if (aString == NULL) return false; char* s; - G4long value = strtol(aString,&s,10); - if(s==aString) return false; + G4long value = strtol(aString, &s, 10); + if (s == aString) return false; aInt = (G4int)value; return true; } #include ////////////////////////////////////////////////////////////////////////////// -void ExecuteChangeSizeFunction ( - Widget aWidget -) +void ExecuteChangeSizeFunction(Widget aWidget) ////////////////////////////////////////////////////////////////////////////// //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!// { - if(aWidget==NULL) return; - if(aWidget->core.widget_class->core_class.resize==NULL) return; + if (aWidget == NULL) return; + if (aWidget->core.widget_class->core_class.resize == NULL) return; (aWidget->core.widget_class->core_class.resize)(aWidget); } diff --git a/source/interfaces/common/src/G4Win32.cc b/source/interfaces/implementation/src/G4Win32.cc similarity index 71% rename from source/interfaces/common/src/G4Win32.cc rename to source/interfaces/implementation/src/G4Win32.cc index 08c55a0f882..655fee51647 100644 --- a/source/interfaces/common/src/G4Win32.cc +++ b/source/interfaces/implementation/src/G4Win32.cc @@ -35,114 +35,97 @@ static char className[] = "G4Win32"; -G4Win32* G4Win32::instance = NULL; +G4Win32* G4Win32::instance = NULL; -static G4bool Win32Inited = FALSE; -static HWND topWindow = NULL; +static G4bool Win32Inited = false; +static HWND topWindow = NULL; /***************************************************************************/ -G4Win32* G4Win32::getInstance ( -) +G4Win32* G4Win32::getInstance() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - if (instance==NULL) { + if (instance == NULL) { instance = new G4Win32(); } return instance; } /***************************************************************************/ -G4Win32::G4Win32 ( -) +G4Win32::G4Win32() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - if(Win32Inited==FALSE) { // Should be Done once. + if (Win32Inited == false) { // Should be Done once. - WNDCLASS wc; - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.lpfnWndProc = (WNDPROC)DefWindowProc; - wc.cbClsExtra = 0; - wc.cbWndExtra = 0; - wc.hInstance = ::GetModuleHandle(NULL); - wc.hIcon = LoadIcon (NULL,IDI_APPLICATION); - wc.hCursor = LoadCursor(NULL,IDC_ARROW); + WNDCLASS wc; + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.lpfnWndProc = (WNDPROC)DefWindowProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = ::GetModuleHandle(NULL); + wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = GetStockBrush(BLACK_BRUSH); - wc.lpszMenuName = className; + wc.lpszMenuName = className; wc.lpszClassName = className; - ::RegisterClass (&wc); - - topWindow = ::CreateWindowEx(WS_EX_CLIENTEDGE, - className, - "Test", - WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, - CW_USEDEFAULT, - CW_USEDEFAULT, - CW_USEDEFAULT, - NULL, - NULL, - ::GetModuleHandle(NULL), - NULL); - - if(topWindow==NULL) { + ::RegisterClass(&wc); + + topWindow = + ::CreateWindowEx(WS_EX_CLIENTEDGE, className, "Test", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, + CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, ::GetModuleHandle(NULL), NULL); + + if (topWindow == NULL) { G4cout << "G4Win32: Unable to create Win32 window." << G4endl; } - Win32Inited = TRUE; + Win32Inited = true; } AddDispatcher((G4DispatchFunction)G4Win32::DispatchWin32Event); SetMainInteractor(topWindow); } /***************************************************************************/ -G4Win32::~G4Win32 ( -) +G4Win32::~G4Win32() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - if(this==instance) { + if (this == instance) { instance = NULL; } } /***************************************************************************/ -G4bool G4Win32::Inited ( -) +G4bool G4Win32::Inited() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { return Win32Inited; } /***************************************************************************/ -void* G4Win32::GetEvent ( -) +void* G4Win32::GetEvent() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { static MSG event; BOOL status = ::GetMessage(&event, NULL, 0, 0); - if(status==FALSE) return NULL; + if (status == FALSE) return NULL; return &event; } /***************************************************************************/ -void G4Win32::FlushAndWaitExecution ( -) +void G4Win32::FlushAndWaitExecution() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { MSG event; - while ( ::PeekMessage(&event, NULL, 0, 0, PM_REMOVE) ) { + while (::PeekMessage(&event, NULL, 0, 0, PM_REMOVE)) { ::TranslateMessage(&event); - ::DispatchMessage (&event); + ::DispatchMessage(&event); } } /***************************************************************************/ -G4bool G4Win32::DispatchWin32Event ( - void* a_event -) +G4bool G4Win32::DispatchWin32Event(void* a_event) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { ::TranslateMessage((MSG*)a_event); - ::DispatchMessage ((MSG*)a_event); - return TRUE; + ::DispatchMessage((MSG*)a_event); + return true; } diff --git a/source/interfaces/common/src/G4Xt.cc b/source/interfaces/implementation/src/G4Xt.cc similarity index 63% rename from source/interfaces/common/src/G4Xt.cc rename to source/interfaces/implementation/src/G4Xt.cc index 61bb3ed3696..57a1914f57e 100644 --- a/source/interfaces/common/src/G4Xt.cc +++ b/source/interfaces/implementation/src/G4Xt.cc @@ -27,162 +27,145 @@ // // G.Barrand -#include -#include - -#include -#include +#include "G4Xt.hh" #include "G4ios.hh" -#include "G4Xt.hh" +#include +#include +#include +#include -#define NewString(str) \ - ((str) != NULL ? (strcpy((char*)malloc((unsigned)strlen(str) + 1), str)) : NULL) +#define NewString(str) \ + ((str) != NULL ? (strcpy((char*)malloc((unsigned)strlen(str) + 1), str)) : NULL) -//static void XWidgetIconify (Widget); -//static void XWidgetUniconify (Widget); -//static void XDisplaySetWindowToNormalState (Display*,Window); +// static void XWidgetIconify (Widget); +// static void XWidgetUniconify (Widget); +// static void XDisplaySetWindowToNormalState (Display*,Window); -G4Xt* G4Xt::instance = NULL; +G4Xt* G4Xt::instance = NULL; -static G4bool XtInited = FALSE; -static int argn = 0; -static char** args = NULL; +static G4bool XtInited = false; +static int argn = 0; +static char** args = NULL; static XtAppContext appContext = NULL; static Widget topWidget = NULL; /***************************************************************************/ -G4Xt* G4Xt::getInstance ( -) +G4Xt* G4Xt::getInstance() /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - return G4Xt::getInstance (0,NULL,(char*)"Geant4"); + return G4Xt::getInstance(0, NULL, (char*)"Geant4"); } /***************************************************************************/ -G4Xt* G4Xt::getInstance ( - int a_argn -,char** a_args -,char* a_class -) +G4Xt* G4Xt::getInstance(int a_argn, char** a_args, char* a_class) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - if (instance==NULL) { - instance = new G4Xt(a_argn,a_args,a_class); + if (instance == NULL) { + instance = new G4Xt(a_argn, a_args, a_class); } return instance; } /***************************************************************************/ -G4Xt::G4Xt ( - int a_argn -,char** a_args -,char* a_class -) +G4Xt::G4Xt(int a_argn, char** a_args, char* a_class) /***************************************************************************/ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ { - if(XtInited==FALSE) { //Xt should be Inited once ! - if(a_argn!=0) { //Save args. + if (XtInited == false) { // Xt should be Inited once ! + if (a_argn != 0) { // Save args. args = (char**)malloc(a_argn * sizeof(char*)); - if(args!=NULL) { - argn = a_argn; - for(int argi=0;argi -#include #include "G4Exp.hh" +#include "globals.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#include +#include class G4AtomicFormFactor { -private: - static G4AtomicFormFactor* s_G4AtomicFormFactorManager; - -public: - static G4AtomicFormFactor* GetManager() { - if(s_G4AtomicFormFactorManager == nullptr) - { - s_G4AtomicFormFactorManager = new G4AtomicFormFactor(); - } - return s_G4AtomicFormFactorManager; + public: + static G4AtomicFormFactor* GetManager() + { + if (s_G4AtomicFormFactorManager == nullptr) { + s_G4AtomicFormFactorManager = new G4AtomicFormFactor(); } - - // - // theCoefficientsMap stores the coefficients for the form factor - // calculations. It can be loaded only by LoadCoefficiencts() - // and accessed by theCoefficients[]. - // -private: - std::map > theCoefficientsMap; - G4double theCoefficients[9]; - G4int loadedIndex; - - // - // LoadCoefficiencts() method allows the evaluation of the atomic form - // factor coefficients and the storage in theCoefficients. - // If theCoefficients are already correct, no need to get new ones - // Reference: International Tables for Crystallography (2006). - // Vol. C, ch. 6.1, pp. 554-595 - // doi: 10.1107/97809553602060000600 - // Chapter 6.1. Intensity of diffracted intensities - // IUCr Eq. 6.1.1.15, Coefficients Table 6.1.1.4 - // -private: - void InsertCoefficients(G4int index, const std::vector& aDoubleVec) - { - theCoefficientsMap.insert( - std::pair>(index, aDoubleVec)); - } + return s_G4AtomicFormFactorManager; + } - void LoadCoefficiencts(G4int index){ - loadedIndex = index; - for(unsigned int i0=0;i0<9;i0++){ - theCoefficients[i0] = theCoefficientsMap[index][i0]; - } - + G4double Get(G4double kScatteringVector, G4int Z, G4int charge = 0) + { + if (loadedIndex != GetIndex(Z, charge)) { + LoadCoefficiencts(GetIndex(Z, charge)); } - - inline - G4int GetIndex(G4int Z, G4int charge = 0) {return Z*100 + charge;} - - - // - // Get() function gives back the Atomic Form Factor of the Z material - // -public: - G4double Get(G4double kScatteringVector, G4int Z, G4int charge = 0){ - if(loadedIndex != GetIndex(Z,charge)){ - LoadCoefficiencts(GetIndex(Z,charge)); - } - G4double result = 0.; - G4double kVecOn4PiSquared = (kScatteringVector / 1.e-7 / 3.1415926536) * 0.125; // (k/(4pi))/ angstrom - kVecOn4PiSquared= kVecOn4PiSquared * kVecOn4PiSquared; // (k/(4pi))^2 - - for(unsigned int i0=0;i0<4;i0++){ - result += theCoefficients[i0*2] * G4Exp(- theCoefficients[i0*2+1] * kVecOn4PiSquared); - } - result += theCoefficients[8]; - return result; + G4double result = 0.; + G4double kVecOn4PiSquared = + (kScatteringVector / 1.e-7 / 3.1415926536) * 0.125; // (k/(4pi))/ angstrom + kVecOn4PiSquared = kVecOn4PiSquared * kVecOn4PiSquared; // (k/(4pi))^2 + + for (unsigned int i0 = 0; i0 < 4; i0++) { + result += theCoefficients[i0 * 2] * G4Exp(-theCoefficients[i0 * 2 + 1] * kVecOn4PiSquared); } - - // - // Singleton constructor to create the atomic form factor calculator - // Atomic form factor are evaluated using IUCr tables - // http://it.iucr.org/Cb/ch6o1v0001/ - // -protected: - G4AtomicFormFactor() { - InsertCoefficients(100,{0.489918,20.6593,0.262003,7.74039,0.196767,49.5519,0.049879,2.20159,0.001305}); - InsertCoefficients(99,{0.897661,53.1368,0.565616,15.187,0.415815,186.576,0.116973,3.56709,0.002389}); - InsertCoefficients(200,{0.8734,9.1037,0.6309,3.3568,0.3112,22.9276,0.178,0.9821,0.0064}); - InsertCoefficients(300,{1.1282,3.9546,0.7508,1.0524,0.6175,85.3905,0.4653,168.261,0.0377}); - InsertCoefficients(301,{0.6968,4.6237,0.7888,1.9557,0.3414,0.6316,0.1563,10.0953,0.0167}); - InsertCoefficients(400,{1.5919,43.6427,1.1278,1.8623,0.5391,103.483,0.7029,0.542,0.0385}); - InsertCoefficients(402,{6.2603,0.0027,0.8849,0.8313,0.7993,2.2758,0.1647,5.1146,-6.1092}); - InsertCoefficients(500,{2.0545,23.2185,1.3326,1.021,1.0979,60.3498,0.7068,0.1403,-0.19320}); - InsertCoefficients(600,{2.31,20.8439,1.02,10.2075,1.5886,0.5687,0.865,51.6512,0.2156}); - InsertCoefficients(610,{2.26069,22.6907,1.56165,0.656665,1.05075,9.75618,0.839259,55.5949,0.286977}); - InsertCoefficients(700,{12.2126,0.0057,3.1322,9.8933,2.0125,28.9975,1.1663,0.5826,-11.529}); - InsertCoefficients(800,{3.0485,13.2771,2.2868,5.7011,1.5463,0.3239,0.867,32.9089,0.2508}); - InsertCoefficients(799,{4.1916,12.8573,1.63969,4.17236,1.52673,47.0179,-20.307,-0.01404,21.9412}); - InsertCoefficients(900,{3.5392,10.2825,2.6412,4.2944,1.517,0.2615,1.0243,26.1476,0.2776}); - InsertCoefficients(899,{3.6322,5.27756,3.51057,14.7353,1.26064,0.442258,0.940706,47.3437,0.653396}); - InsertCoefficients(1000,{3.9553,8.4042,3.1125,3.4262,1.4546,0.2306,1.1251,21.7184,0.3515}); - InsertCoefficients(1100,{4.7626,3.285,3.1736,8.8422,1.2674,0.3136,1.1128,129.424,0.676}); - InsertCoefficients(1101,{3.2565,2.6671,3.9362,6.1153,1.3998,0.2001,1.0032,14.039,0.404}); - InsertCoefficients(1200,{5.4204,2.8275,2.1735,79.2611,1.2269,0.3808,2.3073,7.1937,0.8584}); - InsertCoefficients(1202,{3.4988,2.1676,3.8378,4.7542,1.3284,0.185,0.8497,10.1411,0.4853}); - InsertCoefficients(1300,{6.4202,3.0387,1.9002,0.7426,1.5936,31.5472,1.9646,85.0886,1.1151}); - InsertCoefficients(1303,{4.17448,1.93816,3.3876,4.14553,1.20296,0.228753,0.528137,8.28524,0.706786}); - InsertCoefficients(1400,{6.2915,2.4386,3.0353,32.3337,1.9891,0.6785,1.541,81.6937,1.1407}); - InsertCoefficients(1410,{5.66269,2.6652,3.07164,38.6634,2.62446,0.916946,1.3932,93.5458,1.24707}); - InsertCoefficients(1404,{4.43918,1.64167,3.20345,3.43757,1.19453,0.2149,0.41653,6.65365,0.746297}); - InsertCoefficients(1500,{6.4345,1.9067,4.1791,27.157,1.78,0.526,1.4908,68.1645,1.1149}); - InsertCoefficients(1600,{6.9053,1.4679,5.2034,22.2151,1.4379,0.2536,1.5863,56.172,0.8669}); - InsertCoefficients(1700,{11.4604,0.0104,7.1964,1.1662,6.2556,18.5194,1.6455,47.7784,-9.5574}); - InsertCoefficients(1699,{18.2915,0.0066,7.2084,1.1717,6.5337,19.5424,2.3386,60.4486,-16.378}); - InsertCoefficients(1800,{7.4845,0.9072,6.7723,14.8407,0.6539,43.8983,1.6442,33.3929,1.4445}); - InsertCoefficients(1900,{8.2186,12.7949,7.4398,0.7748,1.0519,213.187,0.8659,41.6841,1.4228}); - InsertCoefficients(1901,{7.9578,12.6331,7.4917,0.7674,6.359,-0.00200,1.1915,31.9128,-4.9978}); - InsertCoefficients(2000,{8.6266,10.4421,7.3873,0.6599,1.5899,85.7484,1.0211,178.437,1.3751}); - InsertCoefficients(2002,{15.6348,-0.00740,7.9518,0.6089,8.4372,10.3116,0.8537,25.9905,-14.875}); - InsertCoefficients(2100,{9.189,9.0213,7.3679,0.5729,1.6409,136.108,1.468,51.3531,1.3329}); - InsertCoefficients(2103,{13.4008,0.29854,8.0273,7.9629,1.65943,-0.28604,1.57936,16.0662,-6.6667}); - InsertCoefficients(2200,{9.7595,7.8508,7.3558,0.5,1.6991,35.6338,1.9021,116.105,1.2807}); - InsertCoefficients(2202,{9.11423,7.5243,7.62174,0.457585,2.2793,19.5361,0.087899,61.6558,0.897155}); - InsertCoefficients(2203,{17.7344,0.22061,8.73816,7.04716,5.25691,-0.15762,1.92134,15.9768,-14.652}); - InsertCoefficients(2204,{19.5114,0.178847,8.23473,6.67018,2.01341,-0.29263,1.5208,12.9464,-13.280}); - InsertCoefficients(2300,{10.2971,6.8657,7.3511,0.4385,2.0703,26.8938,2.0571,102.478,1.2199}); - InsertCoefficients(2302,{10.106,6.8818,7.3541,0.4409,2.2884,20.3004,0.0223,115.122,1.2298}); - InsertCoefficients(2303,{9.43141,6.39535,7.7419,0.383349,2.15343,15.1908,0.016865,63.969,0.656565}); - InsertCoefficients(2305,{15.6887,0.679003,8.14208,5.40135,2.03081,9.97278,-9.5760,0.940464,1.7143}); - InsertCoefficients(2400,{10.6406,6.1038,7.3537,0.392,3.324,20.2626,1.4922,98.7399,1.1832}); - InsertCoefficients(2402,{9.54034,5.66078,7.7509,0.344261,3.58274,13.3075,0.509107,32.4224,0.616898}); - InsertCoefficients(2433,{9.6809,5.59463,7.81136,0.334393,2.87603,12.8288,0.113575,32.8761,0.518275}); - InsertCoefficients(2500,{11.2819,5.3409,7.3573,0.3432,3.0193,17.8674,2.2441,83.7543,1.0896}); - InsertCoefficients(2502,{10.8061,5.2796,7.362,0.3435,3.5268,14.343,0.2184,41.3235,1.0874}); - InsertCoefficients(2503,{9.84521,4.91797,7.87194,0.294393,3.56531,10.8171,0.323613,24.1281,0.393974}); - InsertCoefficients(2504,{9.96253,4.8485,7.97057,0.283303,2.76067,10.4852,0.054447,27.573,0.251877}); - InsertCoefficients(2600,{11.7695,4.7611,7.3573,0.3072,3.5222,15.3535,2.3045,76.8805,1.0369}); - InsertCoefficients(2602,{11.0424,4.6538,7.374,0.3053,4.1346,12.0546,0.4399,31.2809,1.0097}); - InsertCoefficients(2603,{11.1764,4.6147,7.3863,0.3005,3.3948,11.6729,0.0724,38.5566,0.9707}); - InsertCoefficients(2700,{12.2841,4.2791,7.3409,0.2784,4.0034,13.5359,2.3488,71.1692,1.0118}); - InsertCoefficients(2702,{11.2296,4.1231,7.3883,0.2726,4.7393,10.2443,0.7108,25.6466,0.9324}); - InsertCoefficients(2703,{10.338,3.90969,7.88173,0.238668,4.76795,8.35583,0.725591,18.3491,0.286667}); - InsertCoefficients(2800,{12.8376,3.8785,7.292,0.2565,4.4438,12.1763,2.38,66.3421,1.0341}); - InsertCoefficients(2802,{11.4166,3.6766,7.4005,0.2449,5.3442,8.873,0.9773,22.1626,0.8614}); - InsertCoefficients(2803,{10.7806,3.5477,7.75868,0.22314,5.22746,7.64468,0.847114,16.9673,0.386044}); - InsertCoefficients(2900,{13.338,3.5828,7.1676,0.247,5.6158,11.3966,1.6735,64.8126,1.191}); - InsertCoefficients(2901,{11.9475,3.3669,7.3573,0.2274,6.2455,8.6625,1.5578,25.8487,0.89}); - InsertCoefficients(2902,{11.8168,3.37484,7.11181,0.244078,5.78135,7.9876,1.14523,19.897,1.14431}); - InsertCoefficients(3000,{14.0743,3.2655,7.0318,0.2333,5.1652,10.3163,2.41,58.7097,1.3041}); - InsertCoefficients(3002,{11.9719,2.9946,7.3862,0.2031,6.4668,7.0826,1.394,18.0995,0.7807}); - InsertCoefficients(3100,{15.2354,3.0669,6.7006,0.2412,4.3591,10.7805,2.9623,61.4135,1.7189}); - InsertCoefficients(3103,{12.692,2.81262,6.69883,0.22789,6.06692,6.36441,1.0066,14.4122,1.53545}); - InsertCoefficients(3200,{16.0816,2.8509,6.3747,0.2516,3.7068,11.4468,3.683,54.7625,2.1313}); - InsertCoefficients(3204,{12.9172,2.53718,6.70003,0.205855,6.06791,5.47913,0.859041,11.603,1.45572}); - InsertCoefficients(3300,{16.6723,2.6345,6.0701,0.2647,3.4313,12.9479,4.2779,47.7972,2.531}); - InsertCoefficients(3400,{17.0006,2.4098,5.8196,0.2726,3.9731,15.2372,4.3543,43.8163,2.8409}); - InsertCoefficients(3500,{17.1789,2.1723,5.2358,16.5796,5.6377,0.2609,3.9851,41.4328,2.9557}); - InsertCoefficients(3499,{17.1718,2.2059,6.3338,19.3345,5.5754,0.2871,3.7272,58.1535,3.1776}); - InsertCoefficients(3600,{17.3555,1.9384,6.7286,16.5623,5.5493,0.2261,3.5375,39.3972,2.825}); - InsertCoefficients(3700,{17.1784,1.7888,9.6435,17.3151,5.1399,0.2748,1.5292,164.934,3.4873}); - InsertCoefficients(3701,{17.5816,1.7139,7.6598,14.7957,5.8981,0.1603,2.7817,31.2087,2.0782}); - InsertCoefficients(3800,{17.5663,1.5564,9.8184,14.0988,5.422,0.1664,2.6694,132.376,2.5064}); - InsertCoefficients(3802,{18.0874,1.4907,8.1373,12.6963,2.5654,24.5651,-34.193,-0.01380,41.4025}); - InsertCoefficients(3900,{17.776,1.4029,10.2946,12.8006,5.72629,0.125599,3.26588,104.354,1.91213}); - InsertCoefficients(3903,{17.9268,1.35417,9.1531,11.2145,1.76795,22.6599,-33.108,-0.01319,40.2602}); - InsertCoefficients(4000,{17.8765,1.27618,10.948,11.916,5.41732,0.117622,3.65721,87.6627,2.06929}); - InsertCoefficients(4004,{18.1668,1.2148,10.0562,10.1483,1.01118,21.6054,-2.6479,-0.10276,9.41454}); - InsertCoefficients(4100,{17.6142,1.18865,12.0144,11.766,4.04183,0.204785,3.53346,69.7957,3.75591}); - InsertCoefficients(4103,{19.8812,0.019175,18.0653,1.13305,11.0177,10.1621,1.94715,28.3389,-12.912}); - InsertCoefficients(4105,{17.9163,1.12446,13.3417,0.028781,10.799,9.28206,0.337905,25.7228,-6.3934}); - InsertCoefficients(4200,{3.7025,0.2772,17.2356,1.0958,12.8876,11.004,3.7429,61.6584,4.3875}); - InsertCoefficients(4203,{21.1664,0.014734,18.2017,1.03031,11.7423,9.53659,2.30951,26.6307,-14.421}); - InsertCoefficients(4205,{21.0149,0.014345,18.0992,1.02238,11.4632,8.78809,0.740625,23.3452,-14.316}); - InsertCoefficients(4206,{17.8871,1.03649,11.175,8.48061,6.57891,0.058881,0,0,0.344941}); - InsertCoefficients(4300,{19.1301,0.864132,11.0948,8.14487,4.64901,21.5707,2.71263,86.8472,5.40428}); - InsertCoefficients(4400,{19.2674,0.80852,12.9182,8.43467,4.86337,24.7997,1.56756,94.2928,5.37874}); - InsertCoefficients(4403,{18.5638,0.847329,13.2885,8.37164,9.32602,0.017662,3.00964,22.887,-3.1892}); - InsertCoefficients(4404,{18.5003,0.844582,13.1787,8.12534,4.71304,0.36495,2.18535,20.8504,1.42357}); - InsertCoefficients(4500,{19.2957,0.751536,14.3501,8.21758,4.73425,25.8749,1.28918,98.6062,5.328}); - InsertCoefficients(4503,{18.8785,0.764252,14.1259,7.84438,3.32515,21.2487,-6.1989,-0.01036,11.8678}); - InsertCoefficients(4504,{18.8545,0.760825,13.9806,7.62436,2.53464,19.3317,-5.6526,-0.01020,11.2835}); - InsertCoefficients(4600,{19.3319,0.698655,15.5017,7.98929,5.29537,25.2052,0.605844,76.8986,5.26593}); - InsertCoefficients(4602,{19.1701,0.696219,15.2096,7.55573,4.32234,22.5057,0,0,5.2916}); - InsertCoefficients(4604,{19.2493,0.683839,14.79,7.14833,2.89289,17.9144,-7.9492,0.005127,13.0174}); - InsertCoefficients(4700,{19.2808,0.6446,16.6885,7.4726,4.8045,24.6605,1.0463,99.8156,5.179}); - InsertCoefficients(4701,{19.1812,0.646179,15.9719,7.19123,5.27475,21.7326,0.357534,66.1147,5.21572}); - InsertCoefficients(4702,{19.1643,0.645643,16.2456,7.18544,4.3709,21.4072,0,0,5.21404}); - InsertCoefficients(4800,{19.2214,0.5946,17.6444,6.9089,4.461,24.7008,1.6029,87.4825,5.0694}); - InsertCoefficients(4802,{19.1514,0.597922,17.2535,6.80639,4.47128,20.2521,0,0,5.11937}); - InsertCoefficients(4900,{19.1624,0.5476,18.5596,6.3776,4.2948,25.8499,2.0396,92.8029,4.9391}); - InsertCoefficients(4903,{19.1045,0.551522,18.1108,6.3247,3.78897,17.3595,0,0,4.99635}); - InsertCoefficients(5000,{19.1889,5.8303,19.1005,0.5031,4.4585,26.8909,2.4663,83.9571,4.7821}); - InsertCoefficients(5002,{19.1094,0.5036,19.0548,5.8378,4.5648,23.3752,0.487,62.2061,4.7861}); - InsertCoefficients(5004,{18.9333,5.764,19.7131,0.4655,3.4182,14.0049,0.0193,-0.75830,3.9182}); - InsertCoefficients(5100,{19.6418,5.3034,19.0455,0.4607,5.0371,27.9074,2.6827,75.2825,4.5909}); - InsertCoefficients(5103,{18.9755,0.467196,18.933,5.22126,5.10789,19.5902,0.288753,55.5113,4.69626}); - InsertCoefficients(5105,{19.8685,5.44853,19.0302,0.467973,2.41253,14.1259,0,0,4.69263}); - InsertCoefficients(5200,{19.9644,4.81742,19.0138,0.420885,6.14487,28.5284,2.5239,70.8403,4.352}); - InsertCoefficients(5300,{20.1472,4.347,18.9949,0.3814,7.5138,27.766,2.2735,66.8776,4.0712}); - InsertCoefficients(5301,{20.2332,4.3579,18.997,0.3815,7.8069,29.5259,2.8868,84.9304,4.0714}); - InsertCoefficients(5400,{20.2933,3.9282,19.0298,0.344,8.9767,26.4659,1.99,64.2658,3.7118}); - InsertCoefficients(5500,{20.3892,3.569,19.1062,0.3107,10.662,24.3879,1.4953,213.904,3.3352}); - InsertCoefficients(5501,{20.3524,3.552,19.1278,0.3086,10.2821,23.7128,0.9615,59.4565,3.2791}); - InsertCoefficients(5600,{20.3361,3.216,19.297,0.2756,10.888,20.2073,2.6959,167.202,2.7731}); - InsertCoefficients(5602,{20.1807,3.21367,19.1136,0.28331,10.9054,20.0558,0.77634,51.746,3.02902}); - InsertCoefficients(5700,{20.578,2.94817,19.599,0.244475,11.3727,18.7726,3.28719,133.124,2.14678}); - InsertCoefficients(5703,{20.2489,2.9207,19.3763,0.250698,11.6323,17.8211,0.336048,54.9453,2.4086}); - InsertCoefficients(5800,{21.1671,2.81219,19.7695,0.226836,11.8513,17.6083,3.33049,127.113,1.86264}); - InsertCoefficients(5803,{20.8036,2.77691,19.559,0.23154,11.9369,16.5408,0.612376,43.1692,2.09013}); - InsertCoefficients(5804,{20.3235,2.65941,19.8186,0.21885,12.1233,15.7992,0.144583,62.2355,1.5918}); - InsertCoefficients(5900,{22.044,2.77393,19.6697,0.222087,12.3856,16.7669,2.82428,143.644,2.0583}); - InsertCoefficients(5903,{21.3727,2.6452,19.7491,0.214299,12.1329,15.323,0.97518,36.4065,1.77132}); - InsertCoefficients(5904,{20.9413,2.54467,20.0539,0.202481,12.4668,14.8137,0.296689,45.4643,1.24285}); - InsertCoefficients(6000,{22.6845,2.66248,19.6847,0.210628,12.774,15.885,2.85137,137.903,1.98486}); - InsertCoefficients(6003,{21.961,2.52722,19.9339,0.199237,12.12,14.1783,1.51031,30.8717,1.47588}); - InsertCoefficients(6100,{23.3405,2.5627,19.6095,0.202088,13.1235,15.1009,2.87516,132.721,2.02876}); - InsertCoefficients(6103,{22.5527,2.4174,20.1108,0.185769,12.0671,13.1275,2.07492,27.4491,1.19499}); - InsertCoefficients(6200,{24.0042,2.47274,19.4258,0.196451,13.4396,14.3996,2.89604,128.007,2.20963}); - InsertCoefficients(6203,{23.1504,2.31641,20.2599,0.174081,11.9202,12.1571,2.71488,24.8242,0.954586}); - InsertCoefficients(6300,{24.6274,2.3879,19.0886,0.1942,13.7603,13.7546,2.9227,123.174,2.5745}); - InsertCoefficients(6302,{24.0063,2.27783,19.9504,0.17353,11.8034,11.6096,3.87243,26.5156,1.36389}); - InsertCoefficients(6303,{23.7497,2.22258,20.3745,0.16394,11.8509,11.311,3.26503,22.9966,0.759344}); - InsertCoefficients(6400,{25.0709,2.25341,19.0798,0.181951,13.8518,12.9331,3.54545,101.398,2.4196}); - InsertCoefficients(6403,{24.3466,2.13553,20.4208,0.155525,11.8708,10.5782,3.7149,21.7029,0.645089}); - InsertCoefficients(6500,{25.8976,2.24256,18.2185,0.196143,14.3167,12.6648,2.95354,115.362,3.58324}); - InsertCoefficients(6503,{24.9559,2.05601,20.3271,0.149525,12.2471,10.0499,3.773,21.2773,0.691967}); - InsertCoefficients(6600,{26.507,2.1802,17.6383,0.202172,14.5596,12.1899,2.96577,111.874,4.29728}); - InsertCoefficients(6603,{25.5395,1.9804,20.2861,0.143384,11.9812,9.34972,4.50073,19.581,0.68969}); - InsertCoefficients(6700,{26.9049,2.07051,17.294,0.19794,14.5583,11.4407,3.63837,92.6566,4.56796}); - InsertCoefficients(6703,{26.1296,1.91072,20.0994,0.139358,11.9788,8.80018,4.93676,18.5908,0.852795}); - InsertCoefficients(6800,{27.6563,2.07356,16.4285,0.223545,14.9779,11.3604,2.98233,105.703,5.92046}); - InsertCoefficients(6803,{26.722,1.84659,19.7748,0.13729,12.1506,8.36225,5.17379,17.8974,1.17613}); - InsertCoefficients(6900,{28.1819,2.02859,15.8851,0.238849,15.1542,10.9975,2.98706,102.961,6.75621}); - InsertCoefficients(6903,{27.3083,1.78711,19.332,0.136974,12.3339,7.96778,5.38348,17.2922,1.63929}); - InsertCoefficients(7000,{28.6641,1.9889,15.4345,0.257119,15.3087,10.6647,2.98963,100.417,7.56672}); - InsertCoefficients(7002,{28.1209,1.78503,17.6817,0.15997,13.3335,8.18304,5.14657,20.39,3.70983}); - InsertCoefficients(7003,{27.8917,1.73272,18.7614,0.13879,12.6072,7.64412,5.47647,16.8153,2.26001}); - InsertCoefficients(7100,{28.9476,1.90182,15.2208,9.98519,15.1,0.261033,3.71601,84.3298,7.97628}); - InsertCoefficients(7103,{28.4628,1.68216,18.121,0.142292,12.8429,7.33727,5.59415,16.3535,2.97573}); - InsertCoefficients(7200,{29.144,1.83262,15.1726,9.5999,14.7586,0.275116,4.30013,72.029,8.58154}); - InsertCoefficients(7204,{28.8131,1.59136,18.4601,0.128903,12.7285,6.76232,5.59927,14.0366,2.39699}); - InsertCoefficients(7300,{29.2024,1.77333,15.2293,9.37046,14.5135,0.295977,4.76492,63.3644,9.24354}); - InsertCoefficients(7305,{29.1587,1.50711,18.8407,0.116741,12.8268,6.31524,5.38695,12.4244,1.78555}); - InsertCoefficients(7400,{29.0818,1.72029,15.43,9.2259,14.4327,0.321703,5.11982,57.056,9.8875}); - InsertCoefficients(7406,{29.4936,1.42755,19.3763,0.104621,13.0544,5.93667,5.06412,11.1972,1.01074}); - InsertCoefficients(7500,{28.7621,1.67191,15.7189,9.09227,14.5564,0.3505,5.44174,52.0861,10.472}); - InsertCoefficients(7600,{28.1894,1.62903,16.155,8.97948,14.9305,0.382661,5.67589,48.1647,11.0005}); - InsertCoefficients(7604,{30.419,1.37113,15.2637,6.84706,14.7458,0.165191,5.06795,18.003,6.49804}); - InsertCoefficients(7700,{27.3049,1.59279,16.7296,8.86553,15.6115,0.417916,5.83377,45.0011,11.4722}); - InsertCoefficients(7703,{30.4156,1.34323,15.862,7.10909,13.6145,0.204633,5.82008,20.3254,8.27903}); - InsertCoefficients(7704,{30.7058,1.30923,15.5512,6.71983,14.2326,0.167252,5.53672,17.4911,6.96824}); - InsertCoefficients(7800,{27.0059,1.51293,17.7639,8.81174,15.7131,0.424593,5.7837,38.6103,11.6883}); - InsertCoefficients(7802,{29.8429,1.32927,16.7224,7.38979,13.2153,0.263297,6.35234,22.9426,9.85329}); - InsertCoefficients(7804,{30.9612,1.24813,15.9829,6.60834,13.7348,0.16864,5.92034,16.9392,7.39534}); - InsertCoefficients(7900,{16.8819,0.4611,18.5913,8.6216,25.5582,1.4826,5.86,36.3956,12.0658}); - InsertCoefficients(7901,{28.0109,1.35321,17.8204,7.7395,14.3359,0.356752,6.58077,26.4043,11.2299}); - InsertCoefficients(7903,{30.6886,1.2199,16.9029,6.82872,12.7801,0.212867,6.52354,18.659,9.0968}); - InsertCoefficients(8000,{20.6809,0.545,19.0417,8.4484,21.6575,1.5729,5.9676,38.3246,12.6089}); - InsertCoefficients(8001,{25.0853,1.39507,18.4973,7.65105,16.8883,0.443378,6.48216,28.2262,12.0205}); - InsertCoefficients(8002,{29.5641,1.21152,18.06,7.05639,12.8374,0.284738,6.89912,20.7482,10.6268}); - InsertCoefficients(8100,{27.5446,0.65515,19.1584,8.70751,15.538,1.96347,5.52593,45.8149,13.1746}); - InsertCoefficients(8101,{21.3985,1.4711,20.4723,0.517394,18.7478,7.43463,6.82847,28.8482,12.5258}); - InsertCoefficients(8103,{30.8695,1.1008,18.3481,6.53852,11.9328,0.219074,7.00574,17.2114,9.8027}); - InsertCoefficients(8200,{31.0617,0.6902,13.0637,2.3576,18.442,8.618,5.9696,47.2579,13.4118}); - InsertCoefficients(8202,{21.7886,1.3366,19.5682,0.488383,19.1406,6.7727,7.01107,23.8132,12.4734}); - InsertCoefficients(8204,{32.1244,1.00566,18.8003,6.10926,12.0175,0.147041,6.96886,14.714,8.08428}); - InsertCoefficients(8300,{33.3689,0.704,12.951,2.9238,16.5877,8.7937,6.4692,48.0093,13.5782}); - InsertCoefficients(8303,{21.8053,1.2356,19.5026,6.24149,19.1053,0.469999,7.10295,20.3185,12.4711}); - InsertCoefficients(8305,{33.5364,0.91654,25.0946,0.39042,19.2497,5.71414,6.91555,12.8285,-6.7994}); - InsertCoefficients(8400,{34.6726,0.700999,15.4733,3.55078,13.1138,9.55642,7.02588,47.0045,13.677}); - InsertCoefficients(8500,{35.3163,0.68587,19.0211,3.97458,9.49887,11.3824,7.42518,45.4715,13.7108}); - InsertCoefficients(8600,{35.5631,0.6631,21.2816,4.0691,8.0037,14.0422,7.4433,44.2473,13.6905}); - InsertCoefficients(8700,{35.9299,0.646453,23.0547,4.17619,12.1439,23.1052,2.11253,150.645,13.7247}); - InsertCoefficients(8800,{35.763,0.616341,22.9064,3.87135,12.4739,19.9887,3.21097,142.325,13.6211}); - InsertCoefficients(8802,{35.215,0.604909,21.67,3.5767,7.91342,12.601,7.65078,29.8436,13.5431}); - InsertCoefficients(8900,{35.6597,0.589092,23.1032,3.65155,12.5977,18.599,4.08655,117.02,13.5266}); - InsertCoefficients(8903,{35.1736,0.579689,22.1112,3.41437,8.19216,12.9187,7.05545,25.9443,13.4637}); - InsertCoefficients(9000,{35.5645,0.563359,23.4219,3.46204,12.7473,17.8309,4.80703,99.1722,13.4314}); - InsertCoefficients(9004,{35.1007,0.555054,22.4418,3.24498,9.78554,13.4661,5.29444,23.9533,13.376}); - InsertCoefficients(9100,{35.8847,0.547751,23.2948,3.41519,14.1891,16.9235,4.17287,105.251,13.4287}); - InsertCoefficients(9200,{36.0228,0.5293,23.4128,3.3253,14.9491,16.0927,4.188,100.613,13.3966}); - InsertCoefficients(9203,{35.5747,0.52048,22.5259,3.12293,12.2165,12.7148,5.37073,26.3394,13.3092}); - InsertCoefficients(9204,{35.3715,0.516598,22.5326,3.05053,12.0291,12.5723,4.7984,23.4582,13.2671}); - InsertCoefficients(9206,{34.8509,0.507079,22.7584,2.8903,14.0099,13.1767,1.21457,25.2017,13.1665}); - InsertCoefficients(9300,{36.1874,0.511929,23.5964,3.25396,15.6402,15.3622,4.1855,97.4908,13.3573}); - InsertCoefficients(9303,{35.7074,0.502322,22.613,3.03807,12.9898,12.1449,5.43227,25.4928,13.2544}); - InsertCoefficients(9304,{35.5103,0.498626,22.5787,2.96627,12.7766,11.9484,4.92159,22.7502,13.2116}); - InsertCoefficients(9306,{35.0136,0.48981,22.7286,2.81099,14.3884,12.33,1.75669,22.6581,13.113}); - InsertCoefficients(9400,{36.5254,0.499384,23.8083,3.26371,16.7707,14.9455,3.47947,105.98,13.3812}); - InsertCoefficients(9403,{35.84,0.484938,22.7169,2.96118,13.5807,11.5331,5.66016,24.3992,13.1991}); - InsertCoefficients(9404,{35.6493,0.481422,22.646,2.8902,13.3595,11.316,5.18831,21.8301,13.1555}); - InsertCoefficients(9406,{35.1736,0.473204,22.7181,2.73848,14.7635,11.553,2.28678,20.9303,13.0582}); - InsertCoefficients(9500,{36.6706,0.483629,24.0992,3.20647,17.3415,14.3136,3.49331,102.273,13.3592}); - InsertCoefficients(9600,{36.6488,0.465154,24.4096,3.08997,17.399,13.4346,4.21665,88.4834,13.2887}); - InsertCoefficients(9700,{36.7881,0.451018,24.7736,3.04619,17.8919,12.8946,4.23284,86.003,13.2754}); - InsertCoefficients(9800,{36.9185,0.437533,25.1995,3.00775,18.3317,12.4044,4.24391,83.7881,13.2674}); - - loadedIndex = -1; + result += theCoefficients[8]; + return result; + } + + protected: + G4AtomicFormFactor(); + ~G4AtomicFormFactor() = default; + + private: + void InsertCoefficients(G4int index, const std::vector& aDoubleVec) + { + theCoefficientsMap.insert(std::pair>(index, aDoubleVec)); + } + + // LoadCoefficiencts() method allows the evaluation of the atomic form + // factor coefficients and the storage in theCoefficients. + // If theCoefficients are already correct, no need to get new ones + // Reference: International Tables for Crystallography (2006). + // Vol. C, ch. 6.1, pp. 554-595 + // doi: 10.1107/97809553602060000600 + // Chapter 6.1. Intensity of diffracted intensities + // IUCr Eq. 6.1.1.15, Coefficients Table 6.1.1.4 + void LoadCoefficiencts(G4int index) + { + loadedIndex = index; + for (unsigned int i0 = 0; i0 < 9; i0++) { + theCoefficients[i0] = theCoefficientsMap[index][i0]; } + } + + // Get() function gives back the Atomic Form Factor of the Z material + inline G4int GetIndex(G4int Z, G4int charge = 0) { return Z * 100 + charge; } + + private: + inline static G4AtomicFormFactor* s_G4AtomicFormFactorManager = nullptr; - ~G4AtomicFormFactor() = default; + // theCoefficientsMap stores the coefficients for the form factor + // calculations. It can be loaded only by LoadCoefficiencts() + // and accessed by theCoefficients[]. + std::map> theCoefficientsMap; + G4double theCoefficients[9]; + G4int loadedIndex; }; #endif diff --git a/source/materials/include/G4AtomicShells.hh b/source/materials/include/G4AtomicShells.hh index e40a9b653aa..428ceb17f6b 100644 --- a/source/materials/include/G4AtomicShells.hh +++ b/source/materials/include/G4AtomicShells.hh @@ -22,7 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// + // class description // // Class consists of atomic subshell binding energies for first 100 elements. @@ -36,48 +36,35 @@ // // a) CRC, Handbook of Chemistry and Physics, 73rd Edition, // 1992-1993 - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... - +// // 24-04-98, implementation of the first version, V. Grichine // 16-11-98, GetBindingEnergy(Z,ShellNb), M.Maire // 11-02-05, GetNumberOfElectrons(Z,ShellNb), V.Ivanchenko // 30-04-10, added fIndexOfShells, V.Ivanchenko -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... - #ifndef G4ATOMICSHELLS_H #define G4ATOMICSHELLS_H #include "globals.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... - -class G4AtomicShells +class G4AtomicShells { -public : //with description - - static G4int GetNumberOfShells(G4int Z); - static G4int GetNumberOfElectrons(G4int Z, G4int SubshellNb); - static G4int GetNumberOfFreeElectrons(G4int Z, G4double th); + public: // with description + static G4int GetNumberOfShells(G4int Z); + static G4int GetNumberOfElectrons(G4int Z, G4int SubshellNb); + static G4int GetNumberOfFreeElectrons(G4int Z, G4double th); static G4double GetBindingEnergy(G4int Z, G4int SubshellNb); static G4double GetTotalBindingEnergy(G4int Z); -private : - + private: #ifdef G4VERBOSE static G4int PrintErrorZ(G4int Z, const G4String&); static G4int PrintErrorShell(G4int Z, G4int SubshellNb, const G4String&); #endif - - G4AtomicShells(const G4AtomicShells&) = delete; - const G4AtomicShells& operator=(const G4AtomicShells&) = delete; - - static const G4int fNumberOfShells[105]; - static const G4int fIndexOfShells[105]; - static const G4int fNumberOfElectrons[1650]; + static const G4int fNumberOfShells[105]; + static const G4int fIndexOfShells[105]; + static const G4int fNumberOfElectrons[1650]; static const G4double fBindingEnergies[1650]; - }; /* ********************************************************* @@ -87,14 +74,14 @@ The data were given from: I from Janni J.F. 1982 (I for F from estimation with formula). I(i) from T.A.Carlson, Photoelectron and Auger Spectroscopy, - Plenum, New York, 1976, p.337. + Plenum, New York, 1976, p.337. - a) CRC, Handbook of Chemistry and Physics, 73rd Edition, - 1992-1993 + a) CRC, Handbook of Chemistry and Physics, 73rd Edition, + 1992-1993 - Free Atom Subshells Binding Energies - I(i) - ---------------------------------------------- + Free Atom Subshells Binding Energies - I(i) + ---------------------------------------------- El A Z I err I Z(i) I(i) comments eV % eV @@ -1787,4 +1774,4 @@ FM 253. 100 00.0 0.00 K 2 143090. 1S a) 535.0 448.0 319.0 190.0 171.0 26.0 22.8 82.0 ********************************************************** */ -#endif // end of G4AtomicShells.hh +#endif // end of G4AtomicShells.hh diff --git a/source/materials/include/G4AtomicShells_XDB_EADL.hh b/source/materials/include/G4AtomicShells_XDB_EADL.hh index f0795bb7609..ed4ba96ec46 100644 --- a/source/materials/include/G4AtomicShells_XDB_EADL.hh +++ b/source/materials/include/G4AtomicShells_XDB_EADL.hh @@ -22,8 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + //////////////////////////////////////////////////////////////////////////////// // // // File: G4AtomicShells_XDB_EADL.hh // @@ -34,42 +33,36 @@ // and binding energies for atoms from Z = 1 to Z = 120. // // Most entries are taken from the X-ray Data Book, with // // unmeasured values supplied by Kibedi. See documentation // -// file in G4EMLOW7.3 or later, directory fluor/ // +// file in G4EMLOW7.3 or later, directory fluor/ // // // //////////////////////////////////////////////////////////////////////////////// - #ifndef G4ATOMICSHELLS_XDB_EADL_H #define G4ATOMICSHELLS_XDB_EADL_H #include "globals.hh" - class G4AtomicShells_XDB_EADL { - public : //with description + public: // with description + G4AtomicShells_XDB_EADL(const G4AtomicShells_XDB_EADL&) = delete; + const G4AtomicShells_XDB_EADL& operator=(const G4AtomicShells_XDB_EADL&) = delete; - static G4int GetNumberOfShells (G4int Z); - static G4int GetNumberOfElectrons (G4int Z, G4int SubshellNb); - static G4int GetNumberOfFreeElectrons(G4int Z, G4double th); - static G4double GetBindingEnergy (G4int Z, G4int SubshellNb); - static G4double GetTotalBindingEnergy(G4int Z); - - private : + static G4int GetNumberOfShells(G4int Z); + static G4int GetNumberOfElectrons(G4int Z, G4int SubshellNb); + static G4int GetNumberOfFreeElectrons(G4int Z, G4double th); + static G4double GetBindingEnergy(G4int Z, G4int SubshellNb); + static G4double GetTotalBindingEnergy(G4int Z); + private: #ifdef G4VERBOSE - static G4int PrintErrorZ(G4int Z, const G4String&); - static G4int PrintErrorShell(G4int Z, G4int SubshellNb, const G4String&); + static G4int PrintErrorZ(G4int Z, const G4String&); + static G4int PrintErrorShell(G4int Z, G4int SubshellNb, const G4String&); #endif - - G4AtomicShells_XDB_EADL(const G4AtomicShells_XDB_EADL&) = delete; - const G4AtomicShells_XDB_EADL& operator=(const G4AtomicShells_XDB_EADL&) = delete; - - static const G4int fNumberOfShells [121]; - static const G4int fIndexOfShells [121]; - static const G4int fNumberOfElectrons[2171]; - static const G4double fBindingEnergies [2171]; + static const G4int fNumberOfShells[121]; + static const G4int fIndexOfShells[121]; + static const G4int fNumberOfElectrons[2171]; + static const G4double fBindingEnergies[2171]; }; -#endif // end of G4AtomicShells_XDB_EADL.hh - +#endif // end of G4AtomicShells_XDB_EADL.hh diff --git a/source/materials/include/G4CrystalAtomBase.hh b/source/materials/include/G4CrystalAtomBase.hh index 456269a1845..2c87d9a7a7c 100644 --- a/source/materials/include/G4CrystalAtomBase.hh +++ b/source/materials/include/G4CrystalAtomBase.hh @@ -22,9 +22,6 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// //--------------------------------------------------------------------------- // @@ -36,56 +33,39 @@ // // XXX // - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - // 21-04-16, created by E.Bagli -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #ifndef G4CrystalAtomBase_HH #define G4CrystalAtomBase_HH 1 -#include -#include #include -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#include +#include class G4CrystalAtomBase { -public: // with description - // - // Constructor to create a lattice - // - G4CrystalAtomBase() {;}; - G4CrystalAtomBase(const G4ThreeVector& apos) { AddPos(apos); }; - ~G4CrystalAtomBase() {;}; - - // - // Atom positions in the lattice are stored in fractional coordinates - // i.e. the position in the unit cell described as a fractional - // position along each cell edge. - // Atoms may be removed or added - // -private: - std::vector thePos; + public: // with description + // + // Constructor to create a lattice + // + G4CrystalAtomBase() = default; + G4CrystalAtomBase(const G4ThreeVector& apos) { AddPos(apos); }; + ~G4CrystalAtomBase() = default; -public: - inline - std::vector GetPos() {return thePos;} + inline std::vector GetPos() { return thePos; } - inline - G4ThreeVector GetPos(G4int idx) {return thePos[idx];} - inline void AddPos(const G4ThreeVector& a3vec) { thePos.push_back(a3vec); } - inline - void SetPos(std::vector a3vecvec) { - thePos = std::move(a3vecvec); - } - inline - void DelPos(G4int idx) {thePos.erase(thePos.begin()+idx);} -}; + inline G4ThreeVector GetPos(G4int idx) { return thePos[idx]; } + inline void AddPos(const G4ThreeVector& a3vec) { thePos.push_back(a3vec); } + inline void SetPos(std::vector a3vecvec) { thePos = std::move(a3vecvec); } + inline void DelPos(G4int idx) { thePos.erase(thePos.begin() + idx); } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + private: + // Atom positions in the lattice are stored in fractional coordinates + // i.e. the position in the unit cell described as a fractional + // position along each cell edge. + // Atoms may be removed or added + std::vector thePos; +}; #endif diff --git a/source/materials/include/G4CrystalBravaisLattices.h b/source/materials/include/G4CrystalBravaisLattices.h index 1919ed8854f..60d5c81d092 100644 --- a/source/materials/include/G4CrystalBravaisLattices.h +++ b/source/materials/include/G4CrystalBravaisLattices.h @@ -22,10 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// -// + //--------------------------------------------------------------- // // G4CrystalBravaisLattices @@ -33,20 +30,19 @@ // Class Description: // - #ifndef G4CrystalBravaisLattices_H #define G4CrystalBravaisLattices_H 1 // Bravais Lattices -enum theBravaisLatticeType { - Primitive = 0, - BodyCentered = 1, - FaceCentered = 2, - aBaseCentered = 3, //bc faces - bBaseCentered = 4, //ca faces - cBaseCentered = 5, //ab faces - Rombohedral = 6 +enum theBravaisLatticeType +{ + Primitive = 0, + BodyCentered = 1, + FaceCentered = 2, + aBaseCentered = 3, // bc faces + bBaseCentered = 4, // ca faces + cBaseCentered = 5, // ab faces + Rombohedral = 6 }; #endif - diff --git a/source/materials/include/G4CrystalExtension.hh b/source/materials/include/G4CrystalExtension.hh index ff1f53887d3..4723f184be7 100644 --- a/source/materials/include/G4CrystalExtension.hh +++ b/source/materials/include/G4CrystalExtension.hh @@ -22,9 +22,6 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// //--------------------------------------------------------------------------- // @@ -38,147 +35,105 @@ // structure. It has to be attached to a G4ExtendedMaterial // in order to instantiate a G4LogicalCrystalVolume. // - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - // 21-04-16, created by E.Bagli -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #ifndef G4CrystalExtension_HH #define G4CrystalExtension_HH 1 -#include "G4VMaterialExtension.hh" -#include "G4CrystalAtomBase.hh" #include "G4AtomicBond.hh" +#include "G4CrystalAtomBase.hh" #include "G4CrystalUnitCell.hh" #include "G4NistManager.hh" -#include +#include "G4VMaterialExtension.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#include class G4CrystalExtension : public G4VMaterialExtension { -public: // with description - // - // Constructor to create a material - // - G4CrystalExtension(G4Material* ,const G4String& name = "crystal"); - - ~G4CrystalExtension() override; - - void Print() const override { ; }; - - private: - G4Material* fMaterial; - -public: - G4Material* GetMaterial() {return fMaterial;}; - void SetMaterial(G4Material* aMat) {fMaterial = aMat;}; - - - // - // Crystal cell description, i.e. space group - // and cell parameters - // - -private: - G4CrystalUnitCell* theUnitCell; -public: - inline void SetUnitCell(G4CrystalUnitCell* aUC) {theUnitCell=aUC;} - inline G4CrystalUnitCell* GetUnitCell() - const {return theUnitCell;} - - // - // Elasticity and reduced elasticity tensors - // - -public: - typedef G4double Elasticity[3][3][3][3]; - typedef G4double ReducedElasticity[6][6]; - -protected: - Elasticity fElasticity; // Full 4D elasticity tensor - ReducedElasticity fElReduced; // Reduced 2D elasticity tensor - -public: - const Elasticity& GetElasticity() const { return fElasticity; } - const ReducedElasticity& GetElReduced() const { return fElReduced; } - -public: - G4double GetCijkl(G4int i, G4int j, G4int k, G4int l) const { - return fElasticity[i][j][k][l]; - } - - // Reduced elasticity tensor: C11-C66 interface for clarity - void SetElReduced(const ReducedElasticity& mat); - - void SetCpq(G4int p, G4int q, G4double value); - G4double GetCpq(G4int p, G4int q) const { return fElReduced[p-1][q-1]; } - - // - // Map of atom positions for each element - // The coordinate system is the unit cell - // -private: - std::map theCrystalAtomBaseMap; - -public: - G4CrystalAtomBase* GetAtomBase(const G4Element* anElement); - - void AddAtomBase(const G4Element* anElement,G4CrystalAtomBase* aBase){ - theCrystalAtomBaseMap.insert(std::pair(anElement,aBase)); - } - - - G4CrystalAtomBase* GetAtomBase(G4int anElIdx){ - return GetAtomBase(fMaterial->GetElement(anElIdx)); - } - - void AddAtomBase(G4int anElIdx,G4CrystalAtomBase* aLattice){ - AddAtomBase(fMaterial->GetElement(anElIdx),aLattice); - } - - // - // Get the position of all the atoms in the unit cell - // for a single element or all the elements - // - G4bool GetAtomPos(const G4Element* anEl, std::vector& vecout); - G4bool GetAtomPos(std::vector& vecout); - - G4bool GetAtomPos(G4int anElIdx, std::vector& vecout){ - GetAtomPos(fMaterial->GetElement(anElIdx),vecout); - return true; - } - - - // - // Structure factor calculations - // Eq. 46, Chapter 2 , Introduction to solid state physics, C. Kittel - // - G4complex ComputeStructureFactor(G4double kScatteringVector, - G4int h, - G4int k, - G4int l); - G4complex ComputeStructureFactorGeometrical(G4int h, - G4int k, - G4int l); - - // - // Bond between atoms. Each bond is mapped with two Elements - // and the number of the atoms in the corresponding G4CrystalBaseAtomPos - // - -private: - std::vector theAtomicBondVector; - -public: - void AddAtomicBond(G4AtomicBond* aBond) {theAtomicBondVector.push_back(aBond);}; - G4AtomicBond* GetAtomicBond(G4int idx) {return theAtomicBondVector[idx];}; - std::vector GetAtomicBondVector() {return theAtomicBondVector;}; - -}; + public: + // Elasticity and reduced elasticity tensors + using Elasticity = G4double[3][3][3][3]; + using ReducedElasticity = G4double[6][6]; + + public: // with description + // Constructor to create a material + G4CrystalExtension(G4Material*, const G4String& name = "crystal"); + + ~G4CrystalExtension() override = default; + + void Print() const override { ; }; + + G4Material* GetMaterial() { return fMaterial; }; + void SetMaterial(G4Material* aMat) { fMaterial = aMat; }; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + inline void SetUnitCell(G4CrystalUnitCell* aUC) { theUnitCell = aUC; } + inline G4CrystalUnitCell* GetUnitCell() const { return theUnitCell; } + + const Elasticity& GetElasticity() const { return fElasticity; } + const ReducedElasticity& GetElReduced() const { return fElReduced; } + + G4double GetCijkl(G4int i, G4int j, G4int k, G4int l) const { return fElasticity[i][j][k][l]; } + + // Reduced elasticity tensor: C11-C66 interface for clarity + void SetElReduced(const ReducedElasticity& mat); + + void SetCpq(G4int p, G4int q, G4double value); + G4double GetCpq(G4int p, G4int q) const { return fElReduced[p - 1][q - 1]; } + + G4CrystalAtomBase* GetAtomBase(const G4Element* anElement); + void AddAtomBase(const G4Element* anElement, G4CrystalAtomBase* aBase) + { + theCrystalAtomBaseMap.insert(std::pair(anElement, aBase)); + } + + G4CrystalAtomBase* GetAtomBase(G4int anElIdx) + { + return GetAtomBase(fMaterial->GetElement(anElIdx)); + } + + void AddAtomBase(G4int anElIdx, G4CrystalAtomBase* aLattice) + { + AddAtomBase(fMaterial->GetElement(anElIdx), aLattice); + } + + // Get the position of all the atoms in the unit cell + // for a single element or all the elements + G4bool GetAtomPos(const G4Element* anEl, std::vector& vecout); + G4bool GetAtomPos(std::vector& vecout); + + G4bool GetAtomPos(G4int anElIdx, std::vector& vecout) + { + GetAtomPos(fMaterial->GetElement(anElIdx), vecout); + return true; + } + + // Structure factor calculations + // Eq. 46, Chapter 2 , Introduction to solid state physics, C. Kittel + G4complex ComputeStructureFactor(G4double kScatteringVector, G4int h, G4int k, G4int l); + G4complex ComputeStructureFactorGeometrical(G4int h, G4int k, G4int l); + + void AddAtomicBond(G4AtomicBond* aBond) { theAtomicBondVector.push_back(aBond); }; + G4AtomicBond* GetAtomicBond(G4int idx) { return theAtomicBondVector[idx]; }; + std::vector GetAtomicBondVector() { return theAtomicBondVector; }; + + protected: + Elasticity fElasticity; // Full 4D elasticity tensor + ReducedElasticity fElReduced; // Reduced 2D elasticity tensor + + private: + G4Material* fMaterial; + + // Crystal cell description, i.e. space group + // and cell parameters + G4CrystalUnitCell* theUnitCell{nullptr}; + + // Map of atom positions for each element + // The coordinate system is the unit cell + std::map theCrystalAtomBaseMap; + + // Bond between atoms. Each bond is mapped with two Elements + // and the number of the atoms in the corresponding G4CrystalBaseAtomPos + std::vector theAtomicBondVector; +}; #endif diff --git a/source/materials/include/G4CrystalLatticeSystems.h b/source/materials/include/G4CrystalLatticeSystems.h index 1c71902c251..1bd0ed6d23e 100644 --- a/source/materials/include/G4CrystalLatticeSystems.h +++ b/source/materials/include/G4CrystalLatticeSystems.h @@ -22,10 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// -// + //--------------------------------------------------------------- // // G4LatticeSystems @@ -33,21 +30,20 @@ // Class Description: // - #ifndef G4LatticeSystems_H #define G4LatticeSystems_H 1 // Lattice Systems -enum theLatticeSystemType { - Amorphous = -1, - Triclinic = 1, - Monoclinic = 2, - Orthorhombic = 3, - Tetragonal = 4, - Rhombohedral = 5, - Hexagonal = 6, - Cubic = 7, +enum theLatticeSystemType +{ + Amorphous = -1, + Triclinic = 1, + Monoclinic = 2, + Orthorhombic = 3, + Tetragonal = 4, + Rhombohedral = 5, + Hexagonal = 6, + Cubic = 7, }; #endif - diff --git a/source/materials/include/G4CrystalUnitCell.hh b/source/materials/include/G4CrystalUnitCell.hh index e2ffe8bea0e..4719ff088c2 100644 --- a/source/materials/include/G4CrystalUnitCell.hh +++ b/source/materials/include/G4CrystalUnitCell.hh @@ -22,10 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// -// + //--------------------------------------------------------------- // // G4CrystalUnitCell @@ -33,148 +30,106 @@ // Class Description: // - #ifndef G4CrystalUnitCell_H #define G4CrystalUnitCell_H 1 -#include "globals.hh" -#include #include "G4ThreeVector.hh" +#include "globals.hh" + #include "G4CrystalBravaisLattices.h" #include "G4CrystalLatticeSystems.h" -//#include "sginfo.h" + +#include class G4CrystalUnitCell { -public: - G4CrystalUnitCell(G4double sizeA, - G4double sizeB, - G4double sizeC, - G4double alpha, - G4double beta, - G4double gamma, - G4int spacegroup); - - virtual ~G4CrystalUnitCell(); - -private: - G4int theSpaceGroup; // -public: - inline G4int GetSpaceGroup() const {return theSpaceGroup;}; - inline void SetSpaceGroup(G4int aInt) {theSpaceGroup=aInt;}; - -private: - theLatticeSystemType GetLatticeSystem(G4int aGroup); - theBravaisLatticeType GetBravaisLattice(G4int aGroup); - -public: - theLatticeSystemType GetLatticeSystem(){ - return GetLatticeSystem(theSpaceGroup); - } - theBravaisLatticeType GetBravaisLattice(){ - return GetBravaisLattice(theSpaceGroup); - } - -private: - //T_SgInfo SgInfo; - /*!< struct from SgInfo library needed for further calculations - see SgInfo documentation on http://cci.lbl.gov/sginfo/ */ -private: - G4double cosa,cosb,cosg; - G4double sina,sinb,sing; - G4double cosar,cosbr,cosgr; - - // - // Size and angles of the crystalline unit cell - // -protected: - G4ThreeVector nullVec; - - G4ThreeVector theSize; // cell sizes - G4ThreeVector theAngle; // cell angles - G4ThreeVector theUnitBasis[3]; // Basis unit vectors in direct orientation - G4ThreeVector theBasis[3]; // Basis vectors in direct orientation - -public: - const G4ThreeVector& GetBasis(G4int idx) const; - const G4ThreeVector& GetUnitBasis(G4int idx) const; - inline G4ThreeVector GetSize() const {return theSize;} - inline G4ThreeVector GetAngle() const {return theAngle;} - - G4ThreeVector GetUnitBasisTrigonal(); // return theUnitBase[2] vector - // - // Reciprocal size and angles of the crystalline unit cell - // -protected: - G4ThreeVector theRecSize; // reciprocal cell sizes - G4ThreeVector theRecAngle; // reciprocal cell angles - G4ThreeVector theRecUnitBasis[3]; // Basis unit vectors in reciprocal orientation - G4ThreeVector theRecBasis[3]; // Basis vectors in reciprocal orientation - -public: - const G4ThreeVector& GetRecBasis(G4int idx) const; - const G4ThreeVector& GetRecUnitBasis(G4int idx) const; - inline G4ThreeVector GetRecSize() const {return theRecSize;} - inline G4ThreeVector GetRecAngle() const {return theRecAngle;} - - // - // Methods to populate atom position in the lattice from the basis - // and the unit basis - // -public: - G4bool FillAtomicUnitPos(G4ThreeVector& pos, std::vector& vecout); - G4bool FillAtomicPos(G4ThreeVector& pos, std::vector& vecout); - - // - // Methods to populate elasticity and reduced elasticity tensors - // -public: - G4bool FillElReduced(G4double Cij[6][6]); -private: - G4bool FillAmorphous(G4double Cij[6][6]) const; - G4bool FillCubic(G4double Cij[6][6]) const; - G4bool FillTetragonal(G4double Cij[6][6]) const; - G4bool FillOrthorhombic(G4double Cij[6][6]) const; - G4bool FillRhombohedral(G4double Cij[6][6]) const; - G4bool FillMonoclinic(G4double Cij[6][6]) const; - G4bool FillTriclinic(G4double Cij[6][6]) const; - G4bool FillHexagonal(G4double Cij[6][6]) const; - - G4bool ReflectElReduced(G4double Cij[6][6]) const; - - // - // The volumes of the cell - // -public: - G4double ComputeCellVolume(); //compute and store the volume - - inline G4double GetVolume() const {return theVolume;} //get the stored volume - inline G4double GetRecVolume() const {return theRecVolume;} //get the stored volume - -private: - G4double theVolume; // the cell volume - G4double theRecVolume; // the cell volume - - // - // Squared Reciprocal and direct interplanar spacing - // -public: - G4double GetIntSp2(G4int h, - G4int k, - G4int l); // squared interplanar spacing - - G4double GetRecIntSp2(G4int h, - G4int k, - G4int l); // squared reciprocal interplanar spacing - - G4double GetIntCosAng(G4int h1, - G4int k1, - G4int l1, - G4int h2, - G4int k2, - G4int l2); // cosine of the angle between two planes - + public: + G4CrystalUnitCell(G4double sizeA, G4double sizeB, G4double sizeC, G4double alpha, G4double beta, + G4double gamma, G4int spacegroup); + + virtual ~G4CrystalUnitCell() = default; + + inline G4int GetSpaceGroup() const { return theSpaceGroup; }; + inline void SetSpaceGroup(G4int aInt) { theSpaceGroup = aInt; }; + + theLatticeSystemType GetLatticeSystem() { return GetLatticeSystem(theSpaceGroup); } + theBravaisLatticeType GetBravaisLattice() { return GetBravaisLattice(theSpaceGroup); } + + const G4ThreeVector& GetBasis(G4int idx) const; + const G4ThreeVector& GetUnitBasis(G4int idx) const; + inline G4ThreeVector GetSize() const { return theSize; } + inline G4ThreeVector GetAngle() const { return theAngle; } + + // return theUnitBase[2] vector + G4ThreeVector GetUnitBasisTrigonal(); + + const G4ThreeVector& GetRecBasis(G4int idx) const; + const G4ThreeVector& GetRecUnitBasis(G4int idx) const; + inline G4ThreeVector GetRecSize() const { return theRecSize; } + inline G4ThreeVector GetRecAngle() const { return theRecAngle; } + + // Methods to populate atom position in the lattice from the basis + // and the unit basis + G4bool FillAtomicUnitPos(G4ThreeVector& pos, std::vector& vecout); + G4bool FillAtomicPos(G4ThreeVector& pos, std::vector& vecout); + + // Methods to populate elasticity and reduced elasticity tensors + G4bool FillElReduced(G4double Cij[6][6]); + + // The volumes of the cell + G4double ComputeCellVolume(); // compute and store the volume + + inline G4double GetVolume() const { return theVolume; } // get the stored volume + inline G4double GetRecVolume() const { return theRecVolume; } // get the stored volume + + // Squared Reciprocal and direct interplanar spacing + G4double GetIntSp2(G4int h, G4int k, + G4int l); // squared interplanar spacing + + G4double GetRecIntSp2(G4int h, G4int k, + G4int l); // squared reciprocal interplanar spacing + + G4double GetIntCosAng(G4int h1, G4int k1, G4int l1, G4int h2, G4int k2, + G4int l2); // cosine of the angle between two planes + + protected: + G4ThreeVector nullVec; // Size and angles of the crystalline unit cell + + G4ThreeVector theSize; // cell sizes + G4ThreeVector theAngle; // cell angles + G4ThreeVector theUnitBasis[3]; // Basis unit vectors in direct orientation + G4ThreeVector theBasis[3]; // Basis vectors in direct orientation + // + // Reciprocal size and angles of the crystalline unit cell + // + G4ThreeVector theRecSize; // reciprocal cell sizes + G4ThreeVector theRecAngle; // reciprocal cell angles + G4ThreeVector theRecUnitBasis[3]; // Basis unit vectors in reciprocal orientation + G4ThreeVector theRecBasis[3]; // Basis vectors in reciprocal orientation + + private: + theLatticeSystemType GetLatticeSystem(G4int aGroup); + theBravaisLatticeType GetBravaisLattice(G4int aGroup); + G4bool FillAmorphous(G4double Cij[6][6]) const; + G4bool FillCubic(G4double Cij[6][6]) const; + G4bool FillTetragonal(G4double Cij[6][6]) const; + G4bool FillOrthorhombic(G4double Cij[6][6]) const; + G4bool FillRhombohedral(G4double Cij[6][6]) const; + G4bool FillMonoclinic(G4double Cij[6][6]) const; + G4bool FillTriclinic(G4double Cij[6][6]) const; + G4bool FillHexagonal(G4double Cij[6][6]) const; + + G4bool ReflectElReduced(G4double Cij[6][6]) const; + + private: + G4int theSpaceGroup; // + + G4double cosa, cosb, cosg; + G4double sina, sinb, sing; + G4double cosar, cosbr, cosgr; + + G4double theVolume; // the cell volume + G4double theRecVolume; // the cell volume }; #endif - diff --git a/source/materials/include/G4DensityEffectCalculator.hh b/source/materials/include/G4DensityEffectCalculator.hh index 6bed8943a79..84e625f0aa4 100644 --- a/source/materials/include/G4DensityEffectCalculator.hh +++ b/source/materials/include/G4DensityEffectCalculator.hh @@ -22,7 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// + /* * Interface to calculation of the Fermi density effect as per the method * described in: @@ -52,16 +52,14 @@ class G4Material; class G4DensityEffectCalculator { -public: - + public: G4DensityEffectCalculator(const G4Material*, G4int); ~G4DensityEffectCalculator(); // The Sternheimer 'x' defined as log10(p/m) == log10(beta*gamma). G4double ComputeDensityCorrection(G4double x); -private: - + private: /* * Given a material defined in 'par' with a plasma energy, mean excitation * energy, and set of atomic energy levels ("oscillator frequencies") with @@ -86,8 +84,8 @@ private: G4double DeltaOnceSolved(G4double); const G4Material* fMaterial; - G4int fVerbose; - G4int fWarnings; + G4int fVerbose{0}; + G4int fWarnings{0}; // Number of energy levels. If a single element, this is the number // of subshells. If several elements, this is the sum of the number @@ -99,7 +97,7 @@ private: const G4int nlev; G4double fConductivity; - + // Current Sternheimer 'x' defined as log10(p/m) == log10(beta*gamma). G4double sternx; @@ -117,7 +115,7 @@ private: // it is weighted by the number fraction of electrons contributed by // each element, e.g. for water, oxygen's electrons are given 8/10 of the // weight. - G4double * sternf; + G4double* sternf; // Energy levels. Can be found for free atoms in, e.g., T. A. Carlson. // Photoelectron and Auger Spectroscopy. Plenum Press, New York and London, @@ -126,15 +124,15 @@ private: // Sternheimer 1984 implies that the energy level for conduction electrons // (the final element of this array) should be set to zero, although the // computation could be run with other values. - G4double * levE; + G4double* levE; /***** Results of intermediate calculations *****/ // The Sternheimer parameters l_i which appear in Sternheimer 1984 eq(1). - G4double * sternl; + G4double* sternl; // The adjusted energy levels, as found using Sternheimer 1984 eq(8). - G4double * sternEbar; + G4double* sternEbar; }; #endif diff --git a/source/materials/include/G4DensityEffectData.hh b/source/materials/include/G4DensityEffectData.hh index 9ea3f0f3c60..72ffdcfaf45 100644 --- a/source/materials/include/G4DensityEffectData.hh +++ b/source/materials/include/G4DensityEffectData.hh @@ -22,7 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// + //--------------------------------------------------------------------------- // // GEANT4 Class file @@ -33,37 +33,37 @@ // //---------------------------------------------------------------------------- // -// Data are taken from: -// R.M. Sternheimer et al. Density Effect for the Ionization Loss of Charged -// Particles in Various Substances. Atom. Data Nucl. Data Tabl. 30 (1984) 261-271. +// Data are taken from: +// R.M. Sternheimer et al. Density Effect for the Ionization Loss of Charged +// Particles in Various Substances. Atom. Data Nucl. Data Tabl. 30 (1984) 261-271. #ifndef DensityEffectData_h #define DensityEffectData_h 1 -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -#include "globals.hh" #include "G4Material.hh" -#include +#include "globals.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#include -const G4int NDENSDATA = 278; +const G4int NDENSDATA = 278; const G4int NDENSARRAY = 10; -const G4int NDENSELEM = 98; +const G4int NDENSELEM = 98; -class G4DensityEffectData +class G4DensityEffectData { -public: - + public: explicit G4DensityEffectData(); ~G4DensityEffectData() = default; - // return index by Z, -1 if material is not in the table + // Assignment operator and copy constructor + G4DensityEffectData& operator=(const G4DensityEffectData& right) = delete; + G4DensityEffectData(const G4DensityEffectData&) = delete; + + // return index by Z, -1 if material is not in the table G4int GetElementIndex(G4int Z, G4State st = kStateUndefined) const; - // return index by material name, -1 if material is not in the table + // return index by material name, -1 if material is not in the table G4int GetIndex(const G4String& matName) const; // printout data for material @@ -73,23 +73,18 @@ public: void DumpData() const; // Access to the data via index - inline G4double GetPlasmaEnergy(G4int idx) const; - inline G4double GetAdjustmentFactor(G4int idx) const; - inline G4double GetCdensity(G4int idx) const; - inline G4double GetX0density(G4int idx) const; - inline G4double GetX1density(G4int idx) const; - inline G4double GetAdensity(G4int idx) const; - inline G4double GetMdensity(G4int idx) const; - inline G4double GetDelta0density(G4int idx) const; - inline G4double GetErrorDensity(G4int idx) const; - inline G4double GetMeanIonisationPotential(G4int idx) const; - - // Assignment operator and copy constructor - G4DensityEffectData & operator=(const G4DensityEffectData &right) = delete; - G4DensityEffectData(const G4DensityEffectData&) = delete; - -private: - + inline G4double GetPlasmaEnergy(G4int idx) const; + inline G4double GetAdjustmentFactor(G4int idx) const; + inline G4double GetCdensity(G4int idx) const; + inline G4double GetX0density(G4int idx) const; + inline G4double GetX1density(G4int idx) const; + inline G4double GetAdensity(G4int idx) const; + inline G4double GetMdensity(G4int idx) const; + inline G4double GetDelta0density(G4int idx) const; + inline G4double GetErrorDensity(G4int idx) const; + inline G4double GetMeanIonisationPotential(G4int idx) const; + + private: void Initialize(); void AddMaterial(G4double* val, const G4String& matName); @@ -97,65 +92,61 @@ private: G4double data[NDENSDATA][NDENSARRAY]; std::vector names; - // indexes defined only for pure materials + // indexes defined only for pure materials G4int indexZ[NDENSELEM]; G4State state[NDENSELEM]; - G4int index; + G4int index{0}; }; inline G4double G4DensityEffectData::GetPlasmaEnergy(G4int idx) const { - return (idx >= 0 && idx < NDENSDATA) ? data[idx][0] : DBL_MAX; -} + return (idx >= 0 && idx < NDENSDATA) ? data[idx][0] : DBL_MAX; +} inline G4double G4DensityEffectData::GetAdjustmentFactor(G4int idx) const { - return (idx >= 0 && idx < NDENSDATA) ? data[idx][1] : DBL_MAX; -} + return (idx >= 0 && idx < NDENSDATA) ? data[idx][1] : DBL_MAX; +} inline G4double G4DensityEffectData::GetCdensity(G4int idx) const { return (idx >= 0 && idx < NDENSDATA) ? data[idx][2] : DBL_MAX; -} +} inline G4double G4DensityEffectData::GetX0density(G4int idx) const { - return (idx >= 0 && idx < NDENSDATA) ? data[idx][3] : DBL_MAX; -} + return (idx >= 0 && idx < NDENSDATA) ? data[idx][3] : DBL_MAX; +} inline G4double G4DensityEffectData::GetX1density(G4int idx) const { - return (idx >= 0 && idx < NDENSDATA) ? data[idx][4] : DBL_MAX; -} + return (idx >= 0 && idx < NDENSDATA) ? data[idx][4] : DBL_MAX; +} inline G4double G4DensityEffectData::GetAdensity(G4int idx) const { - return (idx >= 0 && idx < NDENSDATA) ? data[idx][5] : DBL_MAX; + return (idx >= 0 && idx < NDENSDATA) ? data[idx][5] : DBL_MAX; } - + inline G4double G4DensityEffectData::GetMdensity(G4int idx) const { - return (idx >= 0 && idx < NDENSDATA) ? data[idx][6] : DBL_MAX; -} + return (idx >= 0 && idx < NDENSDATA) ? data[idx][6] : DBL_MAX; +} inline G4double G4DensityEffectData::GetDelta0density(G4int idx) const { - return (idx >= 0 && idx < NDENSDATA) ? data[idx][7] : DBL_MAX; -} + return (idx >= 0 && idx < NDENSDATA) ? data[idx][7] : DBL_MAX; +} inline G4double G4DensityEffectData::GetErrorDensity(G4int idx) const { - return (idx >= 0 && idx < NDENSDATA) ? data[idx][8] : DBL_MAX; -} + return (idx >= 0 && idx < NDENSDATA) ? data[idx][8] : DBL_MAX; +} inline G4double G4DensityEffectData::GetMeanIonisationPotential(G4int idx) const { - return (idx >= 0 && idx < NDENSDATA) ? data[idx][9] : DBL_MAX; -} - - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + return (idx >= 0 && idx < NDENSDATA) ? data[idx][9] : DBL_MAX; +} #endif - diff --git a/source/materials/include/G4Element.hh b/source/materials/include/G4Element.hh index 5e72c40a846..610b200a358 100644 --- a/source/materials/include/G4Element.hh +++ b/source/materials/include/G4Element.hh @@ -22,9 +22,6 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// //--------------------------------------------------------------------------- // @@ -39,10 +36,10 @@ // Z (effective atomic number) // N (effective number of nucleons) // A (effective mass of a mole) -// or in terms of a collection of constituent isotopes with specified +// or in terms of a collection of constituent isotopes with specified // relative abundance (i.e. fraction of nb of atoms per volume). // -// Quantities, with physical meaning or not, which are constant in a given +// Quantities, with physical meaning or not, which are constant in a given // element are computed and stored here as Derived data members. // // The class contains as a private static member the table of defined @@ -52,11 +49,9 @@ // in volume definitions via the G4Material class. // // It is strongly recommended do not delete G4Element instance in the -// user code. All G4Elements will be automatically deleted at the end +// user code. All G4Elements will be automatically deleted at the end // of Geant4 session -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - // 09-07-96, new data members added by L.Urban // 17-01-97, aesthetic rearrangement, M.Maire // 20-01-97, Tsai formula for the rad length, M.Maire @@ -74,201 +69,157 @@ // 17-07-01, migration to STL, M. Verderi // 13-09-01, stl migration. Suppression of the data member fIndexInTable // 14-09-01, fCountUse: nb of materials which use this element -// 26-02-02, fIndexInTable renewed +// 26-02-02, fIndexInTable renewed // 01-04-05, new data member fIndexZ to count the number of elements with same Z // 17-10-06: Add Get/Set fNaturalAbundance (V.Ivanchenko) // 17.09.09, add fNbOfShellElectrons and methods (V. Grichine) -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #ifndef G4ELEMENT_HH #define G4ELEMENT_HH 1 -#include "globals.hh" -#include -#include "G4ios.hh" -#include "G4Isotope.hh" -#include "G4IonisParamElm.hh" -#include "G4IsotopeVector.hh" #include "G4ElementTable.hh" #include "G4ElementVector.hh" +#include "G4IonisParamElm.hh" +#include "G4Isotope.hh" +#include "G4IsotopeVector.hh" +#include "G4ios.hh" +#include "globals.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#include class G4Element { -public: // with description - - // + public: // with description // Constructor to Build an element directly; no reference to isotopes - // - G4Element(const G4String& name, //its name - const G4String& symbol, //its symbol - G4double Zeff, //atomic number - G4double Aeff); //mass of mole - - // + G4Element(const G4String& name, // its name + const G4String& symbol, // its symbol + G4double Zeff, // atomic number + G4double Aeff); // mass of mole + // Constructor to Build an element from isotopes via AddIsotope - // - G4Element(const G4String& name, //its name - const G4String& symbol, //its symbol - G4int nbIsotopes); //nb of isotopes + G4Element(const G4String& name, // its name + const G4String& symbol, // its symbol + G4int nbIsotopes); // nb of isotopes - // - // Add an isotope to the element - // - void AddIsotope(G4Isotope* isotope, //isotope - G4double RelativeAbundance); //fraction of nb of - //atomes per volume virtual ~G4Element(); - - // + + G4Element(G4Element&) = delete; + const G4Element& operator=(const G4Element&) = delete; + + // Add an isotope to the element + void AddIsotope(G4Isotope* isotope, // isotope + G4double RelativeAbundance); // fraction of nb of + // atomes per volume + // Retrieval methods - // - inline const G4String& GetName() const {return fName;} - inline const G4String& GetSymbol() const {return fSymbol;} + inline const G4String& GetName() const { return fName; } + inline const G4String& GetSymbol() const { return fSymbol; } // Atomic number - inline G4double GetZ() const {return fZeff;} - inline G4int GetZasInt() const {return fZ;} + inline G4double GetZ() const { return fZeff; } + inline G4int GetZasInt() const { return fZ; } // Atomic weight in atomic units - inline G4double GetN() const {return fNeff;} - inline G4double GetAtomicMassAmu() const {return fNeff;} + inline G4double GetN() const { return fNeff; } + inline G4double GetAtomicMassAmu() const { return fNeff; } // Mass of a mole in Geant4 units for atoms with atomic shell - inline G4double GetA() const {return fAeff;} - - inline G4bool GetNaturalAbundanceFlag() const; - - inline void SetNaturalAbundanceFlag(G4bool); - - //the number of atomic shells in this element: - // - inline G4int GetNbOfAtomicShells() const {return fNbOfAtomicShells;} - - //the binding energy of the shell, ground shell index=0 - // + inline G4double GetA() const { return fAeff; } + + inline G4bool GetNaturalAbundanceFlag() const; + + inline void SetNaturalAbundanceFlag(G4bool); + + // the number of atomic shells in this element: + inline G4int GetNbOfAtomicShells() const { return fNbOfAtomicShells; } + + // the binding energy of the shell, ground shell index=0 G4double GetAtomicShell(G4int index) const; - //the number of electrons at the shell, ground shell index=0 - // + // the number of electrons at the shell, ground shell index=0 G4int GetNbOfShellElectrons(G4int index) const; - - //number of isotopes constituing this element: - // - inline size_t GetNumberOfIsotopes() const {return fNumberOfIsotopes;} - - //vector of pointers to isotopes constituing this element: - // - inline G4IsotopeVector* GetIsotopeVector() const {return theIsotopeVector;} - - //vector of relative abundance of each isotope: - // - inline G4double* GetRelativeAbundanceVector() const - {return fRelativeAbundanceVector;} - - inline const G4Isotope* GetIsotope(G4int iso) const - {return (*theIsotopeVector)[iso];} - - //the (static) Table of Elements: - // + + // number of isotopes constituing this element: + inline size_t GetNumberOfIsotopes() const { return fNumberOfIsotopes; } + + // vector of pointers to isotopes constituing this element: + inline G4IsotopeVector* GetIsotopeVector() const { return theIsotopeVector; } + + // vector of relative abundance of each isotope: + inline G4double* GetRelativeAbundanceVector() const { return fRelativeAbundanceVector; } + + inline const G4Isotope* GetIsotope(G4int iso) const { return (*theIsotopeVector)[iso]; } + + // the (static) Table of Elements: static G4ElementTable* GetElementTable(); - - static - size_t GetNumberOfElements(); - - //the index of this element in the Table: - // - inline size_t GetIndex() const {return fIndexInTable;} - - //return pointer to an element, given its name: - // + + static size_t GetNumberOfElements(); + + // the index of this element in the Table: + inline size_t GetIndex() const { return fIndexInTable; } + + // return pointer to an element, given its name: static G4Element* GetElement(const G4String& name, G4bool warning = true); - //Coulomb correction factor: - // - inline G4double GetfCoulomb() const {return fCoulomb;} - - //Tsai formula for the radiation length: - // - inline G4double GetfRadTsai() const {return fRadTsai;} - - //pointer to ionisation parameters: - // - inline G4IonisParamElm* GetIonisation() const {return fIonisation;} - + // Coulomb correction factor: + inline G4double GetfCoulomb() const { return fCoulomb; } + + // Tsai formula for the radiation length: + inline G4double GetfRadTsai() const { return fRadTsai; } + + // pointer to ionisation parameters: + inline G4IonisParamElm* GetIonisation() const { return fIonisation; } + // printing methods - // friend std::ostream& operator<<(std::ostream&, const G4Element*); friend std::ostream& operator<<(std::ostream&, const G4Element&); friend std::ostream& operator<<(std::ostream&, const G4ElementTable&); friend std::ostream& operator<<(std::ostream&, const G4ElementVector&); -public: // without description - - G4Element(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. - - inline void SetName(const G4String& name) {fName=name;} + inline void SetName(const G4String& name) { fName = name; } - G4Element(G4Element&) = delete; - const G4Element & operator=(const G4Element&) = delete; G4bool operator==(const G4Element&) const = delete; G4bool operator!=(const G4Element&) const = delete; -private: - + private: void InitializePointers(); void ComputeDerivedQuantities(); void ComputeCoulombFactor(); void ComputeLradTsaiFactor(); void AddNaturalIsotopes(); - // // Basic data members (which define an Element) - // - G4String fName; // name - G4String fSymbol; // symbol - G4double fZeff; // Effective atomic number - G4double fNeff; // Effective number of nucleons - G4double fAeff; // Effective mass of a mole - G4int fZ; - - G4int fNbOfAtomicShells; // number of atomic shells - G4double* fAtomicShells ; // Pointer to atomic shell binding energies + + G4String fName; // name + G4String fSymbol; // symbol + G4double fZeff; // Effective atomic number + G4double fNeff; // Effective number of nucleons + G4double fAeff; // Effective mass of a mole + G4int fZ; + + G4int fNbOfAtomicShells; // number of atomic shells + G4double* fAtomicShells; // Pointer to atomic shell binding energies G4int* fNbOfShellElectrons; // Pointer to the number of subshell electrons - - // Isotope vector contains constituent isotopes of the element - G4int fNumberOfIsotopes; // Number of isotopes added to the element - G4IsotopeVector* theIsotopeVector; - G4double* fRelativeAbundanceVector; // Fraction nb of atomes per volume - // for each constituent + + G4int fNumberOfIsotopes; // Number of isotopes added to the element + G4IsotopeVector* theIsotopeVector; // vector of constituent isotopes of the element + G4double* fRelativeAbundanceVector; // Fraction nb of atomes per volume + // for each constituent // Set up the static Table of Elements static G4ElementTable theElementTable; size_t fIndexInTable; G4bool fNaturalAbundance; - // // Derived data members (computed from the basic data members) - // - G4double fCoulomb; // Coulomb correction factor - G4double fRadTsai; // Tsai formula for the radiation length + + G4double fCoulomb; // Coulomb correction factor + G4double fRadTsai; // Tsai formula for the radiation length G4IonisParamElm* fIonisation; // Pointer to ionisation parameters }; -inline G4bool G4Element::GetNaturalAbundanceFlag() const -{ - return fNaturalAbundance; -} - -inline void G4Element::SetNaturalAbundanceFlag(G4bool val) -{ - fNaturalAbundance = val; -} +inline G4bool G4Element::GetNaturalAbundanceFlag() const { return fNaturalAbundance; } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +inline void G4Element::SetNaturalAbundanceFlag(G4bool val) { fNaturalAbundance = val; } #endif diff --git a/source/materials/include/G4ElementData.hh b/source/materials/include/G4ElementData.hh index e01c366dd56..690caea0618 100644 --- a/source/materials/include/G4ElementData.hh +++ b/source/materials/include/G4ElementData.hh @@ -22,8 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + //--------------------------------------------------------------------------- // // GEANT4 Class file @@ -42,23 +41,23 @@ #ifndef ElementData_h #define ElementData_h 1 -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -#include "globals.hh" -#include "G4PhysicsVector.hh" #include "G4Physics2DVector.hh" -#include +#include "G4PhysicsVector.hh" +#include "globals.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#include -class G4ElementData +class G4ElementData { -public: - + public: explicit G4ElementData(); ~G4ElementData(); + // Assignment operator and copy constructor + G4ElementData& operator=(const G4ElementData& right) = delete; + G4ElementData(const G4ElementData&) = delete; + // add cross section for the element void InitialiseForElement(G4int Z, G4PhysicsVector* v); @@ -66,7 +65,7 @@ public: void InitialiseForElement(G4int Z, G4Physics2DVector* v); // reserve vector of components - void InitialiseForComponent(G4int Z, G4int nComponents=0); + void InitialiseForComponent(G4int Z, G4int nComponents = 0); // prepare vector of components void AddComponent(G4int Z, G4int id, G4PhysicsVector* v); @@ -76,21 +75,21 @@ public: //-------------------------------------------------------------- // - // run time methods - no check on validity of input index + // run time methods - no check on validity of input index // it is a responsibility of the consume code to check the input // //-------------------------------------------------------------- - // get vector for the element + // get vector for the element inline G4PhysicsVector* GetElementData(G4int Z); - // get 2-D vector for the element + // get 2-D vector for the element inline G4Physics2DVector* GetElement2DData(G4int Z); - // get number of components for the element + // get number of components for the element inline size_t GetNumberOfComponents(G4int Z); - // get component ID which may be number of nucleons, + // get component ID which may be number of nucleons, // or shell number, or any other integer inline G4int GetComponentID(G4int Z, G4int idx); @@ -100,71 +99,45 @@ public: // get vector per shell or per isotope inline G4PhysicsVector* GetComponentDataByID(G4int Z, G4int id); - // return cross section per element + // return cross section per element // if not available return zero inline G4double GetValueForElement(G4int Z, G4double kinEnergy); - // return cross section per element + // return cross section per element // if not available return zero - inline G4double GetValueForComponent(G4int Z, G4int idx, - G4double kinEnergy); - - // Assignment operator and copy constructor - G4ElementData & operator=(const G4ElementData &right) = delete; - G4ElementData(const G4ElementData&) = delete; - -private: + inline G4double GetValueForComponent(G4int Z, G4int idx, G4double kinEnergy); + private: static const G4int maxNumElm = 99; - G4PhysicsVector* elmData[maxNumElm]; + G4PhysicsVector* elmData[maxNumElm]; G4Physics2DVector* elm2Data[maxNumElm]; std::vector* compData[maxNumElm]; std::vector* compID[maxNumElm]; G4int compLength[maxNumElm]; - + G4String name = ""; }; -inline void G4ElementData::SetName(const G4String& nam) -{ - name = nam; -} +inline void G4ElementData::SetName(const G4String& nam) { name = nam; } -inline -G4PhysicsVector* G4ElementData::GetElementData(G4int Z) -{ - return elmData[Z]; -} +inline G4PhysicsVector* G4ElementData::GetElementData(G4int Z) { return elmData[Z]; } -inline -G4Physics2DVector* G4ElementData::GetElement2DData(G4int Z) -{ - return elm2Data[Z]; -} +inline G4Physics2DVector* G4ElementData::GetElement2DData(G4int Z) { return elm2Data[Z]; } -inline -size_t G4ElementData::GetNumberOfComponents(G4int Z) -{ - return compID[Z]->size(); -} +inline size_t G4ElementData::GetNumberOfComponents(G4int Z) { return compID[Z]->size(); } -inline G4int G4ElementData::GetComponentID(G4int Z, G4int idx) -{ - return (*(compID[Z]))[idx]; -} +inline G4int G4ElementData::GetComponentID(G4int Z, G4int idx) { return (*(compID[Z]))[idx]; } -inline G4PhysicsVector* -G4ElementData::GetComponentDataByIndex(G4int Z, G4int idx) +inline G4PhysicsVector* G4ElementData::GetComponentDataByIndex(G4int Z, G4int idx) { return (*(compData[Z]))[idx]; } -inline -G4PhysicsVector* G4ElementData::GetComponentDataByID(G4int Z, G4int id) +inline G4PhysicsVector* G4ElementData::GetComponentDataByID(G4int Z, G4int id) { G4PhysicsVector* v = nullptr; - for(G4int i=0; iValue(kinEnergy); } -inline G4double -G4ElementData::GetValueForComponent(G4int Z, G4int idx, G4double kinEnergy) +inline G4double G4ElementData::GetValueForComponent(G4int Z, G4int idx, G4double kinEnergy) { return (*(compData[Z]))[idx]->Value(kinEnergy); } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #endif - diff --git a/source/materials/include/G4ElementTable.hh b/source/materials/include/G4ElementTable.hh index b312c968b32..a03ce649176 100644 --- a/source/materials/include/G4ElementTable.hh +++ b/source/materials/include/G4ElementTable.hh @@ -22,18 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// -// -// ------------------------------------------------------------ -// GEANT 4 class header file -// -// ---------------- G4ElementTable ---------------- -// History: -// First implementation: Torre Wenaus, November 1995 -// ------------------------------------------------------------ - + #ifndef G4ELEMENTTABLE_HH #define G4ELEMENTTABLE_HH diff --git a/source/materials/include/G4ElementVector.hh b/source/materials/include/G4ElementVector.hh index 4d1445d0d19..257a38baa67 100644 --- a/source/materials/include/G4ElementVector.hh +++ b/source/materials/include/G4ElementVector.hh @@ -22,18 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// -// -// ------------------------------------------------------------ -// GEANT 4 class header file -// -// ---------------- G4ElementVector ---------------- -// History: -// First implementation: Torre Wenaus, November 1995 -// ------------------------------------------------------------ - + #ifndef G4ELEMENTVECTOR_HH #define G4ELEMENTVECTOR_HH diff --git a/source/materials/include/G4ExtDEDXTable.hh b/source/materials/include/G4ExtDEDXTable.hh index 52f6c822d94..c5549521443 100644 --- a/source/materials/include/G4ExtDEDXTable.hh +++ b/source/materials/include/G4ExtDEDXTable.hh @@ -22,15 +22,14 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + // =========================================================================== // GEANT4 class header file // // Class: G4ExtDEDXTable // -// Base class: G4VIonDEDXTable -// +// Base class: G4VIonDEDXTable +// // Author: Anton Lechner (Anton.Lechner@cern.ch) // // First implementation: 29. 02. 2009 @@ -47,123 +46,110 @@ // // Comments: // -// =========================================================================== -// +// =========================================================================== #ifndef G4EXTDEDXTABLE_HH #define G4EXTDEDXTABLE_HH -#include "globals.hh" #include "G4VIonDEDXTable.hh" +#include "globals.hh" + +#include #include #include -#include - - -class G4ExtDEDXTable : public G4VIonDEDXTable { +class G4ExtDEDXTable : public G4VIonDEDXTable +{ public: - explicit G4ExtDEDXTable() = default; - ~G4ExtDEDXTable() override; - - G4bool BuildPhysicsVector(G4int ionZ, const G4String& matName) override; - - G4bool BuildPhysicsVector(G4int ionZ, G4int matZ) override; - - // Function for checking the availability of stopping power tables - // for a given ion-material couple, where the material consists of - // a single element only. - G4bool IsApplicable( - G4int atomicNumberIon, // Atomic number of ion - G4int atomicNumberElem // Atomic number of elemental material - ) override; - - // Function for checking the availability of stopping power tables - // for given ion-material couples. - G4bool IsApplicable( - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdentifier // Name or chemical formula of material - ) override; - - // Function returning the stopping power vector for given ion-material - // couples, where the material consists of a single element only. - G4PhysicsVector* GetPhysicsVector( - G4int atomicNumberIon, // Atomic number of ion - G4int atomicNumberElem // Atomic number of elemental material - ) override; - - // Function returning the stopping power vector for given ion-material - // couples. - G4PhysicsVector* GetPhysicsVector( - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdenfier // Name or chemical formula of material - ) override; - - // Function returning the stopping power value for given ion-material - // couples, where the material consists of a single element only, and - // given energy. - G4double GetDEDX( - G4double kinEnergyPerNucleon, // Kinetic energy per nucleon - G4int atomicNumberIon, // Atomic number of ion - G4int atomicNumberElem // Atomic number of elemental material - ); - - // Function returning the stopping power value for given ion-material - // couples and given energy. - G4double GetDEDX( - G4double kinEnergyPerNucleon, // Kinetic energy per nucleon - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdenfier // Name or chemical formula of material - ); - - // Function for adding dE/dx vector for an elemental materials. The last - // argument only applies to elemental materials. - G4bool AddPhysicsVector( - G4PhysicsVector* physicsVector, // Physics vector - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdenfier, // Name or chemical formula of material - G4int atomicNumberElem = 0 // Atomic number of elemental material - ); - - // Function for removing dE/dx vector for a compound materials - G4bool RemovePhysicsVector( - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdentifier // Name or chemical formula of material - ); - - // Function writing all stopping power vectors to file - G4bool StorePhysicsTable( - const G4String& fileName // File name - ); - - // Function retrieving all stopping power vectors from file - G4bool RetrievePhysicsTable( - const G4String& fileName // File name - ); - - // Function deleting all physics vectors and clearing the maps - void ClearTable(); - - // Function printing the ion-material pairs of available vectors to stdout - void DumpMap(); + explicit G4ExtDEDXTable() = default; + ~G4ExtDEDXTable() override; + G4ExtDEDXTable(G4ExtDEDXTable&) = delete; + const G4ExtDEDXTable& operator=(const G4ExtDEDXTable&) = delete; + + G4bool BuildPhysicsVector(G4int ionZ, const G4String& matName) override; + + G4bool BuildPhysicsVector(G4int ionZ, G4int matZ) override; + + // Function for checking the availability of stopping power tables + // for a given ion-material couple, where the material consists of + // a single element only. + G4bool IsApplicable(G4int atomicNumberIon, // Atomic number of ion + G4int atomicNumberElem // Atomic number of elemental material + ) override; + + // Function for checking the availability of stopping power tables + // for given ion-material couples. + G4bool IsApplicable(G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdentifier // Name or chemical formula of material + ) override; + + // Function returning the stopping power vector for given ion-material + // couples, where the material consists of a single element only. + G4PhysicsVector* GetPhysicsVector(G4int atomicNumberIon, // Atomic number of ion + G4int atomicNumberElem // Atomic number of elemental material + ) override; + + // Function returning the stopping power vector for given ion-material + // couples. + G4PhysicsVector* GetPhysicsVector(G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdenfier // Name or chemical formula of material + ) override; + + // Function returning the stopping power value for given ion-material + // couples, where the material consists of a single element only, and + // given energy. + G4double GetDEDX(G4double kinEnergyPerNucleon, // Kinetic energy per nucleon + G4int atomicNumberIon, // Atomic number of ion + G4int atomicNumberElem // Atomic number of elemental material + ); + + // Function returning the stopping power value for given ion-material + // couples and given energy. + G4double GetDEDX(G4double kinEnergyPerNucleon, // Kinetic energy per nucleon + G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdenfier // Name or chemical formula of material + ); + + // Function for adding dE/dx vector for an elemental materials. The last + // argument only applies to elemental materials. + G4bool AddPhysicsVector(G4PhysicsVector* physicsVector, // Physics vector + G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdenfier, // Name or chemical formula of material + G4int atomicNumberElem = 0 // Atomic number of elemental material + ); + + // Function for removing dE/dx vector for a compound materials + G4bool RemovePhysicsVector(G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdentifier // Name or chemical formula of material + ); + + // Function writing all stopping power vectors to file + G4bool StorePhysicsTable(const G4String& fileName // File name + ); + + // Function retrieving all stopping power vectors from file + G4bool RetrievePhysicsTable(const G4String& fileName // File name + ); + + // Function deleting all physics vectors and clearing the maps + void ClearTable(); + + // Function printing the ion-material pairs of available vectors to stdout + void DumpMap(); private: + G4PhysicsVector* CreatePhysicsVector(G4int vectorType); - G4ExtDEDXTable(G4ExtDEDXTable&) = delete; - const G4ExtDEDXTable & operator=(const G4ExtDEDXTable&) = delete; - - G4PhysicsVector* CreatePhysicsVector(G4int vectorType); - - G4int FindAtomicNumberElement(G4PhysicsVector* physicsVector); + G4int FindAtomicNumberElement(G4PhysicsVector* physicsVector); - using G4IonDEDXKeyElem = std::pair; - using G4IonDEDXKeyMat = std::pair; + using G4IonDEDXKeyElem = std::pair; + using G4IonDEDXKeyMat = std::pair; - using G4IonDEDXMapElem = std::map; - using G4IonDEDXMapMat = std::map; + using G4IonDEDXMapElem = std::map; + using G4IonDEDXMapMat = std::map; - G4IonDEDXMapElem dedxMapElements; - G4IonDEDXMapMat dedxMapMaterials; + G4IonDEDXMapElem dedxMapElements; + G4IonDEDXMapMat dedxMapMaterials; }; -#endif // G4EXTDEDXTABLE_HH +#endif // G4EXTDEDXTABLE_HH diff --git a/source/materials/include/G4ExtendedMaterial.hh b/source/materials/include/G4ExtendedMaterial.hh index cbf7589b97c..68e8b38ab65 100644 --- a/source/materials/include/G4ExtendedMaterial.hh +++ b/source/materials/include/G4ExtendedMaterial.hh @@ -22,9 +22,6 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// //--------------------------------------------------------------------------- // @@ -38,86 +35,67 @@ // contains a map of G4VMaterialExtension associated with an integer key. // -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #ifndef G4EXTENDEDMATERIAL_HH #define G4EXTENDEDMATERIAL_HH 1 #include "G4Material.hh" -#include -#include -#include "G4VMaterialExtension.hh"//Needed for hash defintion - - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#include "G4VMaterialExtension.hh" //Needed for hash defintion +#include +#include // A map for material extensions based on the hash of the name. // Extensions are owned by the map -using G4MaterialExtensionMap=std::unordered_map,//VALUE - G4MaterialExtensionHash>;//HASHING FUNCTOR +using G4MaterialExtensionMap = std::unordered_map, // VALUE + G4MaterialExtensionHash>; // HASHING FUNCTOR class G4ExtendedMaterial : public G4Material { -public: // with description - // + public: // with description // Constructor to create an extended material from the base-class G4Material - // - G4ExtendedMaterial(const G4String& name, //its name - const G4Material* baseMaterial); //base material + G4ExtendedMaterial(const G4String& name, // its name + const G4Material* baseMaterial); // base material - // // Constructor to create an extended material from single element - // - G4ExtendedMaterial(const G4String& name, //its name - G4double z, //atomic number - G4double a, //mass of mole - G4double density, //density - G4State state = kStateUndefined, //solid,gas - G4double temp = NTP_Temperature, //temperature - G4double pressure = CLHEP::STP_Pressure); //pressure - - // + G4ExtendedMaterial(const G4String& name, // its name + G4double z, // atomic number + G4double a, // mass of mole + G4double density, // density + G4State state = kStateUndefined, // solid,gas + G4double temp = NTP_Temperature, // temperature + G4double pressure = CLHEP::STP_Pressure); // pressure + // Constructor to create an extended material from a combination of elements // and/or materials subsequently added via AddElement and/or AddMaterial - // - G4ExtendedMaterial(const G4String& name, //its name - G4double density, //density - G4int nComponents, //nbOfComponents - G4State state = kStateUndefined, //solid,gas - G4double temp = NTP_Temperature, //temperature - G4double pressure = CLHEP::STP_Pressure); //pressure - - // + G4ExtendedMaterial(const G4String& name, // its name + G4double density, // density + G4int nComponents, // nbOfComponents + G4State state = kStateUndefined, // solid,gas + G4double temp = NTP_Temperature, // temperature + G4double pressure = CLHEP::STP_Pressure); // pressure + // Constructor to create an extended material from the base extended material - // - G4ExtendedMaterial(const G4String& name, //its name - G4double density, //density - const G4ExtendedMaterial* baseMaterial, //base material - G4State state = kStateUndefined, //solid,gas - G4double temp = NTP_Temperature, //temperature - G4double pressure = CLHEP::STP_Pressure); //pressure - -public: - ~G4ExtendedMaterial() override = default; - -private: - G4MaterialExtensionMap fExtensionMap; -public: // with description - // + G4ExtendedMaterial(const G4String& name, // its name + G4double density, // density + const G4ExtendedMaterial* baseMaterial, // base material + G4State state = kStateUndefined, // solid,gas + G4double temp = NTP_Temperature, // temperature + G4double pressure = CLHEP::STP_Pressure); // pressure + + ~G4ExtendedMaterial() override = default; + // register G4VMaterialExtension // This class owns extensions. Register with: // RegisterExtension(std::unique_ptr(new MyExtension("name"))); // or: // RegisteerExtension(std::make_unique("name")); void RegisterExtension(std::unique_ptr extension); - // + // retrieve G4VMaterialExtension, null pointer is returned if model is not available G4VMaterialExtension* RetrieveExtension(const G4String& name); - inline G4int GetNumberOfExtensions() const - { return G4int(fExtensionMap.size()); } + inline G4int GetNumberOfExtensions() const { return G4int(fExtensionMap.size()); } // Retrieve iterators, proxyes to c++ methods. These are const for read-only // access. Use Register/RetreiveExtension to modify map @@ -126,11 +104,11 @@ public: // with description G4MaterialExtensionMap::const_iterator end() const { return fExtensionMap.end(); } G4MaterialExtensionMap::const_iterator cend() const { return fExtensionMap.cend(); } -public: - G4bool IsExtended() const override; - void Print(std::ostream& flux) const; -}; + G4bool IsExtended() const override; + void Print(std::ostream& flux) const; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + private: + G4MaterialExtensionMap fExtensionMap; +}; #endif diff --git a/source/materials/include/G4ICRU90StoppingData.hh b/source/materials/include/G4ICRU90StoppingData.hh index 9d1cb5b7925..d21463ca114 100644 --- a/source/materials/include/G4ICRU90StoppingData.hh +++ b/source/materials/include/G4ICRU90StoppingData.hh @@ -38,56 +38,47 @@ // Creation date: 03.09.2018 // // Modifications: 25.09.2018 V.Ivanchenko adopted for material sub-library -// +// //---------------------------------------------------------------------------- // // Class Description: // // Data on electonic stopping powers from ICRU 90 report -// +// // -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -#include "globals.hh" #include "G4Material.hh" #include "G4PhysicsFreeVector.hh" +#include "globals.hh" -class G4ICRU90StoppingData -{ -public: - +class G4ICRU90StoppingData +{ + public: explicit G4ICRU90StoppingData(); ~G4ICRU90StoppingData(); + // hide assignment operator + G4ICRU90StoppingData& operator=(const G4ICRU90StoppingData& right) = delete; + G4ICRU90StoppingData(const G4ICRU90StoppingData&) = delete; + void Initialise(); - G4double - GetElectronicDEDXforProton(const G4Material*, G4double kinEnergy) const; + G4double GetElectronicDEDXforProton(const G4Material*, G4double kinEnergy) const; - G4double - GetElectronicDEDXforAlpha(const G4Material*, G4double scaledKinEnergy) const; + G4double GetElectronicDEDXforAlpha(const G4Material*, G4double scaledKinEnergy) const; inline G4int GetIndex(const G4Material*) const; inline G4int GetIndex(const G4String&) const; - inline G4double - GetElectronicDEDXforProton(G4int idx, G4double kinEnergy) const; + inline G4double GetElectronicDEDXforProton(G4int idx, G4double kinEnergy) const; - inline G4double - GetElectronicDEDXforAlpha(G4int idx, G4double scaledKinEnergy) const; - - inline G4bool IsApplicable(const G4Material*) const; + inline G4double GetElectronicDEDXforAlpha(G4int idx, G4double scaledKinEnergy) const; - // hide assignment operator - G4ICRU90StoppingData & operator= - (const G4ICRU90StoppingData &right) = delete; - G4ICRU90StoppingData(const G4ICRU90StoppingData&) = delete; - -private: + inline G4bool IsApplicable(const G4Material*) const; + private: inline G4double GetDEDX(G4PhysicsFreeVector*, G4double e) const; void FillData(); @@ -98,7 +89,7 @@ private: const G4Material* materials[nvectors]; G4PhysicsFreeVector* sdata_proton[nvectors]; G4PhysicsFreeVector* sdata_alpha[nvectors]; - G4bool isInitialized; + G4bool isInitialized{false}; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -108,12 +99,20 @@ inline G4bool G4ICRU90StoppingData::IsApplicable(const G4Material* mat) const return (mat == materials[0] || mat == materials[1] || mat == materials[2]); } +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + inline G4int G4ICRU90StoppingData::GetIndex(const G4Material* mat) const -{ +{ G4int idx = -1; - if (mat == materials[0]) { idx = 0; } - else if(mat == materials[1]) { idx = 1; } - else if(mat == materials[2]) { idx = 2; } + if (mat == materials[0]) { + idx = 0; + } + else if (mat == materials[1]) { + idx = 1; + } + else if (mat == materials[2]) { + idx = 2; + } return idx; } @@ -122,39 +121,40 @@ inline G4int G4ICRU90StoppingData::GetIndex(const G4Material* mat) const inline G4int G4ICRU90StoppingData::GetIndex(const G4String& nam) const { G4int idx = -1; - if (nam == materials[0]->GetName()) { idx = 0; } - else if(nam == materials[1]->GetName()) { idx = 1; } - else if(nam == materials[2]->GetName()) { idx = 2; } + if (nam == materials[0]->GetName()) { + idx = 0; + } + else if (nam == materials[1]->GetName()) { + idx = 1; + } + else if (nam == materials[2]->GetName()) { + idx = 2; + } return idx; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline G4double -G4ICRU90StoppingData::GetDEDX(G4PhysicsFreeVector* data, G4double e) const +inline G4double G4ICRU90StoppingData::GetDEDX(G4PhysicsFreeVector* data, G4double e) const { G4double emin = data->Energy(0); - return (e <= emin) ? (*data)[0]*std::sqrt(e/emin) : data->Value(e); + return (e <= emin) ? (*data)[0] * std::sqrt(e / emin) : data->Value(e); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... inline G4double G4ICRU90StoppingData::GetElectronicDEDXforProton( - G4int idx, G4double kinEnergy) const + G4int idx, G4double kinEnergy) const { - return (idx < 0 || idx >= nvectors) ? 0.0 - : GetDEDX(sdata_proton[idx], kinEnergy); + return (idx < 0 || idx >= nvectors) ? 0.0 : GetDEDX(sdata_proton[idx], kinEnergy); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... inline G4double G4ICRU90StoppingData::GetElectronicDEDXforAlpha( - G4int idx, G4double scaledKinEnergy) const + G4int idx, G4double scaledKinEnergy) const { - return (idx < 0 || idx >= nvectors) ? 0.0 - : GetDEDX(sdata_alpha[idx], scaledKinEnergy); + return (idx < 0 || idx >= nvectors) ? 0.0 : GetDEDX(sdata_alpha[idx], scaledKinEnergy); } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #endif diff --git a/source/materials/include/G4IonStoppingData.hh b/source/materials/include/G4IonStoppingData.hh index 070c08b2ec8..c904336ecbf 100644 --- a/source/materials/include/G4IonStoppingData.hh +++ b/source/materials/include/G4IonStoppingData.hh @@ -22,15 +22,14 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + // =========================================================================== // GEANT4 class header file // // Class: G4IonStoppingData // -// Base class: G4VIonDEDXTable -// +// Base class: G4VIonDEDXTable +// // Author: Anton Lechner (Anton.Lechner@cern.ch) // // First implementation: 03. 11. 2009 @@ -43,127 +42,116 @@ // // Comments: // -// =========================================================================== -// +// =========================================================================== #ifndef G4IONSTOPPINGDATA_HH #define G4IONSTOPPINGDATA_HH -#include "globals.hh" #include "G4VIonDEDXTable.hh" +#include "globals.hh" + +#include #include #include -#include - -class G4IonStoppingData : public G4VIonDEDXTable { - -public: - G4IonStoppingData(const G4String& dir, G4bool icru); - ~G4IonStoppingData() override; - - // Function for checking the availability of stopping power tables - // for a given ion-material couple, where the material consists of - // a single element only. - G4bool IsApplicable( - G4int atomicNumberIon, // Atomic number of ion - G4int atomicNumberElem // Atomic number of elemental material - ) override; - - // Function for checking the availability of stopping power tables - // for given ion-material couples. - G4bool IsApplicable( - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdentifier // Name or chemical formula of material - ) override; - - // Function which invokes the read/build process of physics vectors from - // files in G4LEDATA - G4bool BuildPhysicsVector(G4int ionZ, const G4String& matName) override; - - // Function which invokes the read/build process of physics vectors from - // files in G4LEDATA - G4bool BuildPhysicsVector(G4int ionZ, G4int matZ) override; - - // Function returning the stopping power vector for given ion-material - // couples, where the material consists of a single element only. - G4PhysicsVector* GetPhysicsVector( - G4int atomicNumberIon, // Atomic number of ion - G4int atomicNumberElem // Atomic number of elemental material - ) override; - - // Function returning the stopping power vector for given ion-material - // couples. - G4PhysicsVector* GetPhysicsVector( - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdenfier // Name or chemical formula of material - ) override; - - // Function returning the stopping power value for given ion-material - // couples, where the material consists of a single element only, and - // given energy. - G4double GetDEDX(G4double kinEnergyPerNucleon, // Kinetic energy per nucleon - G4int atomicNumberIon, // Atomic number of ion - G4int atomicNumberElem // Atomic number of elemental material - ); - - // Function returning the stopping power value for given ion-material - // couples and given energy. - G4double GetDEDX( - G4double kinEnergyPerNucleon, // Kinetic energy per nucleon - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdentifier // Name or chemical formula of material - ); - - // Function for adding dE/dx vector for an elemental materials. The last - // argument only applies to elemental materials. - G4bool AddPhysicsVector( - G4PhysicsVector* physicsVector, // Physics vector - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdentifier // Name or chemical formula of material - ); - - // Function for adding dE/dx vector for an elemental materials. The last - // argument only applies to elemental materials. - G4bool AddPhysicsVector( - G4PhysicsVector* physicsVector, // Physics vector - G4int atomicNumberIon, // Atomic number of ion - G4int atomicNumberElem // Atomic number of elemental material - ); - - // Function for removing dE/dx vector for a compound materials - G4bool RemovePhysicsVector( - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdentifier // Name or chemical formula of material - ); - // Function for removing dE/dx vector for a compound materials - G4bool RemovePhysicsVector( - G4int atomicNumberIon, // Atomic number of ion - G4int atomicNumberElem // Atomic number of elemental material - ); - // Function deleting all physics vectors and clearing the maps - void ClearTable(); - - // Function printing the ion-material pairs of available vectors to stdout - void DumpMap(); - -private: - G4IonStoppingData(G4IonStoppingData&) = delete; - const G4IonStoppingData& operator=(const G4IonStoppingData&) = delete; - - // Subdirectory of G4LEDATA - G4String subDir; - - using G4IonDEDXKeyElem = std::pair; - using G4IonDEDXKeyMat = std::pair; - - using G4IonDEDXMapElem = std::map; - using G4IonDEDXMapMat = std::map; - - G4IonDEDXMapElem dedxMapElements; - G4IonDEDXMapMat dedxMapMaterials; - - G4bool fICRU90; +class G4IonStoppingData : public G4VIonDEDXTable +{ + public: + G4IonStoppingData(const G4String& dir, G4bool icru); + ~G4IonStoppingData() override; + G4IonStoppingData(G4IonStoppingData&) = delete; + const G4IonStoppingData& operator=(const G4IonStoppingData&) = delete; + + // Function for checking the availability of stopping power tables + // for a given ion-material couple, where the material consists of + // a single element only. + G4bool IsApplicable(G4int atomicNumberIon, // Atomic number of ion + G4int atomicNumberElem // Atomic number of elemental material + ) override; + + // Function for checking the availability of stopping power tables + // for given ion-material couples. + G4bool IsApplicable(G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdentifier // Name or chemical formula of material + ) override; + + // Function which invokes the read/build process of physics vectors from + // files in G4LEDATA + G4bool BuildPhysicsVector(G4int ionZ, const G4String& matName) override; + + // Function which invokes the read/build process of physics vectors from + // files in G4LEDATA + G4bool BuildPhysicsVector(G4int ionZ, G4int matZ) override; + + // Function returning the stopping power vector for given ion-material + // couples, where the material consists of a single element only. + G4PhysicsVector* GetPhysicsVector(G4int atomicNumberIon, // Atomic number of ion + G4int atomicNumberElem // Atomic number of elemental material + ) override; + + // Function returning the stopping power vector for given ion-material + // couples. + G4PhysicsVector* GetPhysicsVector(G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdenfier // Name or chemical formula of material + ) override; + + // Function returning the stopping power value for given ion-material + // couples, where the material consists of a single element only, and + // given energy. + G4double GetDEDX(G4double kinEnergyPerNucleon, // Kinetic energy per nucleon + G4int atomicNumberIon, // Atomic number of ion + G4int atomicNumberElem // Atomic number of elemental material + ); + + // Function returning the stopping power value for given ion-material + // couples and given energy. + G4double GetDEDX(G4double kinEnergyPerNucleon, // Kinetic energy per nucleon + G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdentifier // Name or chemical formula of material + ); + + // Function for adding dE/dx vector for an elemental materials. The last + // argument only applies to elemental materials. + G4bool AddPhysicsVector(G4PhysicsVector* physicsVector, // Physics vector + G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdentifier // Name or chemical formula of material + ); + + // Function for adding dE/dx vector for an elemental materials. The last + // argument only applies to elemental materials. + G4bool AddPhysicsVector(G4PhysicsVector* physicsVector, // Physics vector + G4int atomicNumberIon, // Atomic number of ion + G4int atomicNumberElem // Atomic number of elemental material + ); + + // Function for removing dE/dx vector for a compound materials + G4bool RemovePhysicsVector(G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdentifier // Name or chemical formula of material + ); + // Function for removing dE/dx vector for a compound materials + G4bool RemovePhysicsVector(G4int atomicNumberIon, // Atomic number of ion + G4int atomicNumberElem // Atomic number of elemental material + ); + // Function deleting all physics vectors and clearing the maps + void ClearTable(); + + // Function printing the ion-material pairs of available vectors to stdout + void DumpMap(); + + private: + // Subdirectory of G4LEDATA + G4String subDir; + + using G4IonDEDXKeyElem = std::pair; + using G4IonDEDXKeyMat = std::pair; + + using G4IonDEDXMapElem = std::map; + using G4IonDEDXMapMat = std::map; + + G4IonDEDXMapElem dedxMapElements; + G4IonDEDXMapMat dedxMapMaterials; + + G4bool fICRU90; }; -#endif // G4IONSTOPPINGDATA_HH +#endif // G4IONSTOPPINGDATA_HH diff --git a/source/materials/include/G4IonisParamElm.hh b/source/materials/include/G4IonisParamElm.hh index ce18998286c..fec41cfe87c 100644 --- a/source/materials/include/G4IonisParamElm.hh +++ b/source/materials/include/G4IonisParamElm.hh @@ -22,22 +22,14 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// // class description // // The class contains few (physical) quantities related to the Ionisation // process, for the Element defined by its atomic number Z // - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... - // 09.03.01: copy constructor and assignement operator in public (mma) -// 09.07.98: data moved from G4Element (mma) - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... +// 09.07.98: data moved from G4Element (mma) #ifndef G4IonisParamElm_HH #define G4IonisParamElm_HH @@ -45,74 +37,72 @@ #include "G4ios.hh" #include "globals.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... - class G4IonisParamElm { -public: // with description - - G4IonisParamElm(G4double Z); - ~G4IonisParamElm(); - - // retrieval methods - - G4double GetZ() const {return fZ;} // atomic number Z - G4double GetZ3() const {return fZ3;} // std::pow (Z,1/3) - G4double GetZZ3() const {return fZZ3;} // std::pow (Z(Z+1),1/3) - G4double GetlogZ3() const {return flogZ3;} // std::log(Z)/3 - - G4double GetTau0() const {return fTau0;}; - // 0.1*std::pow(Z,1/3)*MeV/proton_mass_c2 - - G4double GetTaul() const {return fTaul;} // 2*MeV/proton mass - - G4double GetAlow() const {return fAlow;} - G4double GetBlow() const {return fBlow;} - G4double GetClow() const {return fClow;} - // parameters for the low energy ion.loss - - G4double GetMeanExcitationEnergy() const {return fMeanExcitationEnergy;} - // ICRU'37 report - - G4double GetFermiVelocity() const {return fVFermi;}; - G4double GetLFactor() const {return fLFactor;}; - - G4double* GetShellCorrectionVector() const {return fShellCorrectionVector;} - // shell correction coefficients - - G4IonisParamElm(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. - - // operators - G4IonisParamElm& operator=(const G4IonisParamElm&) = delete; - G4bool operator==(const G4IonisParamElm&) const = delete; - G4bool operator!=(const G4IonisParamElm&) const = delete; - G4IonisParamElm(G4IonisParamElm&) = delete; - -private: - - // - // data members - // - G4double fZ; // effective Z - G4double fZ3; // std::pow (Z,1/3) - G4double fZZ3; // std::pow (Z(Z+1),1/3) - G4double flogZ3; // std::log(Z)/3 - - // ------ ionisation loss --------------------------------- - - G4double fTau0 ; // 0.1*std::pow(Z,1/3)*MeV/proton_mass_c2 - G4double fTaul ; // 2*MeV/proton mass - G4double fBetheBlochLow; // Bethe-Bloch at fTaul*particle mass - G4double fAlow,fBlow,fClow; // parameters for the low energy ion.loss - G4double fMeanExcitationEnergy; // - G4double* fShellCorrectionVector; // shell correction coefficients - - // parameters for ion corrections computations - G4double fVFermi; - G4double fLFactor; + public: // with description + G4IonisParamElm(G4double Z); + ~G4IonisParamElm(); + G4IonisParamElm& operator=(const G4IonisParamElm&) = delete; + G4IonisParamElm(G4IonisParamElm&) = delete; + + // retrieval methods + + // atomic number Z + G4double GetZ() const { return fZ; } + + // std::pow (Z,1/3) + G4double GetZ3() const { return fZ3; } + + // std::pow (Z(Z+1),1/3) + G4double GetZZ3() const { return fZZ3; } + + // std::log(Z)/3 + G4double GetlogZ3() const { return flogZ3; } + + // 0.1*std::pow(Z,1/3)*MeV/proton_mass_c2 + G4double GetTau0() const { return fTau0; }; + + // 2*MeV/proton mass + G4double GetTaul() const { return fTaul; } + + // parameters for the low energy ion.loss + G4double GetAlow() const { return fAlow; } + G4double GetBlow() const { return fBlow; } + G4double GetClow() const { return fClow; } + + // ICRU'37 report + G4double GetMeanExcitationEnergy() const { return fMeanExcitationEnergy; } + + G4double GetFermiVelocity() const { return fVFermi; }; + G4double GetLFactor() const { return fLFactor; }; + + // shell correction coefficients + G4double* GetShellCorrectionVector() const { return fShellCorrectionVector; } + + G4bool operator==(const G4IonisParamElm&) const = delete; + G4bool operator!=(const G4IonisParamElm&) const = delete; + + private: + // + // data members + // + G4double fZ; // effective Z + G4double fZ3; // std::pow (Z,1/3) + G4double fZZ3; // std::pow (Z(Z+1),1/3) + G4double flogZ3; // std::log(Z)/3 + + // ------ ionisation loss --------------------------------- + + G4double fTau0; // 0.1*std::pow(Z,1/3)*MeV/proton_mass_c2 + G4double fTaul; // 2*MeV/proton mass + G4double fBetheBlochLow; // Bethe-Bloch at fTaul*particle mass + G4double fAlow, fBlow, fClow; // parameters for the low energy ion.loss + G4double fMeanExcitationEnergy; // + G4double* fShellCorrectionVector; // shell correction coefficients + + // parameters for ion corrections computations + G4double fVFermi; + G4double fLFactor; }; #endif diff --git a/source/materials/include/G4IonisParamMat.hh b/source/materials/include/G4IonisParamMat.hh index 753091a2e13..25a7fc390a1 100644 --- a/source/materials/include/G4IonisParamMat.hh +++ b/source/materials/include/G4IonisParamMat.hh @@ -22,17 +22,12 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// // class description // // The class contains few (physical) quantities related to the Ionisation // process, for a material defined by its pointer G4Material* // - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... - // 09-07-98: data moved from G4Material (mma) // 09-03-01: copy constructor and assignement operator in public (mma) // 28-10-02: add setMeanExcitationEnergy (V.Ivanchenko) @@ -40,62 +35,47 @@ // 04-03-08: add fBirks constant (mma) // 16-01-19, add exact computation of the density effect (M. Strait) -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... - #ifndef G4IonisParamMat_HH #define G4IonisParamMat_HH +#include "G4DensityEffectCalculator.hh" #include "G4ios.hh" #include "globals.hh" -#include "G4DensityEffectCalculator.hh" class G4Material; class G4DensityEffectData; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... - class G4IonisParamMat { -public: - - G4IonisParamMat(const G4Material*); + public: + G4IonisParamMat(const G4Material*); ~G4IonisParamMat(); + G4IonisParamMat& operator=(const G4IonisParamMat&) = delete; + G4IonisParamMat(const G4IonisParamMat&) = delete; // parameters for mean energy loss calculation: - inline - G4double GetMeanExcitationEnergy() const {return fMeanExcitationEnergy;}; - - void SetMeanExcitationEnergy(G4double value); - G4double FindMeanExcitationEnergy(const G4Material*) const; - - inline - G4double GetLogMeanExcEnergy() const {return fLogMeanExcEnergy;}; - inline - G4double* GetShellCorrectionVector() const {return fShellCorrectionVector;}; - inline - G4double GetTaul() const {return fTaul;}; - + inline G4double GetMeanExcitationEnergy() const { return fMeanExcitationEnergy; }; + + void SetMeanExcitationEnergy(G4double value); + G4double FindMeanExcitationEnergy(const G4Material*) const; + + inline G4double GetLogMeanExcEnergy() const { return fLogMeanExcEnergy; }; + inline G4double* GetShellCorrectionVector() const { return fShellCorrectionVector; }; + inline G4double GetTaul() const { return fTaul; }; + // parameters of the density correction: - inline - G4double GetPlasmaEnergy() const {return fPlasmaEnergy;}; - inline - G4double GetAdjustmentFactor() const {return fAdjustmentFactor;}; - inline - G4double GetCdensity() const {return fCdensity;}; - inline - G4double GetMdensity() const {return fMdensity;}; - inline - G4double GetAdensity() const {return fAdensity;}; - inline - G4double GetX0density() const {return fX0density;}; - inline - G4double GetX1density() const {return fX1density;}; - inline - G4double GetD0density() const {return fD0density;}; + inline G4double GetPlasmaEnergy() const { return fPlasmaEnergy; }; + inline G4double GetAdjustmentFactor() const { return fAdjustmentFactor; }; + inline G4double GetCdensity() const { return fCdensity; }; + inline G4double GetMdensity() const { return fMdensity; }; + inline G4double GetAdensity() const { return fAdensity; }; + inline G4double GetX0density() const { return fX0density; }; + inline G4double GetX1density() const { return fX1density; }; + inline G4double GetD0density() const { return fD0density; }; // user defined density correction parameterisation - void SetDensityEffectParameters(G4double cd, G4double md, G4double ad, - G4double x0, G4double x1, G4double d0); + void SetDensityEffectParameters( + G4double cd, G4double md, G4double ad, G4double x0, G4double x1, G4double d0); // defined density correction parameterisation via base material void SetDensityEffectParameters(const G4Material* bmat); @@ -103,13 +83,17 @@ public: void ComputeDensityEffectOnFly(G4bool); inline G4DensityEffectCalculator* GetDensityEffectCalculator() const - { return fDensityEffectCalc; } + { + return fDensityEffectCalc; + } // compute density correction as a function of the kinematic variable // x = log10(beta*gamma) using parameterisation of calculator inline G4double DensityCorrection(G4double x) const - { return (nullptr == fDensityEffectCalc) ? GetDensityCorrection(x) - : fDensityEffectCalc->ComputeDensityCorrection(x); } + { + return (nullptr == fDensityEffectCalc) ? GetDensityCorrection(x) + : fDensityEffectCalc->ComputeDensityCorrection(x); + } // use parameterisation G4double GetDensityCorrection(G4double x) const; @@ -117,58 +101,34 @@ public: static G4DensityEffectData* GetDensityEffectData(); // parameters of the energy loss fluctuation model: - inline - G4double GetF1fluct() const {return fF1fluct;}; - inline - G4double GetF2fluct() const {return fF2fluct;}; - inline - G4double GetEnergy1fluct() const {return fEnergy1fluct;}; - inline - G4double GetLogEnergy1fluct() const {return fLogEnergy1fluct;}; - inline - G4double GetEnergy2fluct() const {return fEnergy2fluct;}; - inline - G4double GetLogEnergy2fluct() const {return fLogEnergy2fluct;}; - inline - G4double GetEnergy0fluct() const {return fEnergy0fluct;}; - inline - G4double GetRateionexcfluct() const {return fRateionexcfluct;}; + inline G4double GetF1fluct() const { return fF1fluct; }; + inline G4double GetF2fluct() const { return fF2fluct; }; + inline G4double GetEnergy1fluct() const { return fEnergy1fluct; }; + inline G4double GetLogEnergy1fluct() const { return fLogEnergy1fluct; }; + inline G4double GetEnergy2fluct() const { return fEnergy2fluct; }; + inline G4double GetLogEnergy2fluct() const { return fLogEnergy2fluct; }; + inline G4double GetEnergy0fluct() const { return fEnergy0fluct; }; + inline G4double GetRateionexcfluct() const { return fRateionexcfluct; }; // parameters for ion corrections computations - inline - G4double GetZeffective() const {return fZeff;}; - inline - G4double GetFermiEnergy() const {return fFermiEnergy;}; - inline - G4double GetLFactor() const {return fLfactor;}; - inline - G4double GetInvA23() const {return fInvA23;}; - + inline G4double GetZeffective() const { return fZeff; }; + inline G4double GetFermiEnergy() const { return fFermiEnergy; }; + inline G4double GetLFactor() const { return fLfactor; }; + inline G4double GetInvA23() const { return fInvA23; }; + // parameters for Birks attenuation: - inline - void SetBirksConstant(G4double value) {fBirks = value;}; - inline - G4double GetBirksConstant() const {return fBirks;}; - - // parameters for average energy per ion - inline - void SetMeanEnergyPerIonPair(G4double value) {fMeanEnergyPerIon = value;}; - inline - G4double GetMeanEnergyPerIonPair() const {return fMeanEnergyPerIon;}; - - G4IonisParamMat(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. + inline void SetBirksConstant(G4double value) { fBirks = value; }; + inline G4double GetBirksConstant() const { return fBirks; }; + + // parameters for average energy per ion + inline void SetMeanEnergyPerIonPair(G4double value) { fMeanEnergyPerIon = value; }; + inline G4double GetMeanEnergyPerIonPair() const { return fMeanEnergyPerIon; }; // operators - G4IonisParamMat& operator=(const G4IonisParamMat&) = delete; G4bool operator==(const G4IonisParamMat&) const = delete; G4bool operator!=(const G4IonisParamMat&) const = delete; - G4IonisParamMat(const G4IonisParamMat&) = delete; -private: - + private: // Compute mean parameters : ExcitationEnergy,Shell corretion vector ... void ComputeMeanParameters(); @@ -184,30 +144,30 @@ private: // // data members // - const G4Material* fMaterial; // this material + const G4Material* fMaterial; // this material - G4DensityEffectCalculator* fDensityEffectCalc; // online calculator - G4double* fShellCorrectionVector; // shell correction coefficients + G4DensityEffectCalculator* fDensityEffectCalc; // online calculator + G4double* fShellCorrectionVector; // shell correction coefficients // parameters for mean energy loss calculation - G4double fMeanExcitationEnergy; // - G4double fLogMeanExcEnergy; // - G4double fTaul; // lower limit of Bethe-Bloch formula + G4double fMeanExcitationEnergy; // + G4double fLogMeanExcEnergy; // + G4double fTaul; // lower limit of Bethe-Bloch formula // parameters of the density correction - G4double fCdensity; // mat.constant - G4double fMdensity; // exponent - G4double fAdensity; // - G4double fX0density; // - G4double fX1density; // + G4double fCdensity; // mat.constant + G4double fMdensity; // exponent + G4double fAdensity; // + G4double fX0density; // + G4double fX1density; // G4double fD0density; G4double fPlasmaEnergy; G4double fAdjustmentFactor; // parameters of the energy loss fluctuation model - G4double fF1fluct; - G4double fF2fluct; + G4double fF1fluct; + G4double fF2fluct; G4double fEnergy1fluct; G4double fLogEnergy1fluct; G4double fEnergy2fluct; @@ -220,7 +180,7 @@ private: G4double fFermiEnergy; G4double fLfactor; G4double fInvA23; - + // parameter for Birks attenuation G4double fBirks; // average energy per ion pair @@ -231,6 +191,4 @@ private: static G4DensityEffectData* fDensityData; }; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... - #endif diff --git a/source/materials/include/G4Isotope.hh b/source/materials/include/G4Isotope.hh index 6ee1c19d75f..24c798b4956 100644 --- a/source/materials/include/G4Isotope.hh +++ b/source/materials/include/G4Isotope.hh @@ -22,16 +22,12 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... // class description // // An isotope is a chemical isotope defined by its name, // Z: atomic number -// N: number of nucleons +// N: number of nucleons // A: mass of a mole (optional) // m: isomer state (optional) // If A is not defined it is taken from Geant4 database @@ -41,115 +37,86 @@ // // Isotopes can be assembled into elements via the G4Element class. // - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... - // 20.08.11: Add flag fm for isomer level (mma) // 15.11.05: GetIsotope(isotopeName, G4bool warning=false) -// 31.03.05: A becomes optional. Taken from Nist data base by default (mma) -// 26.02.02: fIndexInTable renewed -// 14.09.01: fCountUse: nb of elements which use this isotope +// 31.03.05: A becomes optional. Taken from Nist data base by default (mma) +// 26.02.02: fIndexInTable renewed +// 14.09.01: fCountUse: nb of elements which use this isotope // 13.09.01: stl migration. Suppression of the data member fIndexInTable // 30.03.01: suppression of the warning message in GetIsotope // 04.08.98: new method GetIsotope(isotopeName) (mma) // 17.01.97: aesthetic rearrangement (mma) -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... - #ifndef G4ISOTOPE_HH #define G4ISOTOPE_HH -#include "globals.hh" #include "G4ios.hh" +#include "globals.hh" + #include class G4Isotope; using G4IsotopeTable = std::vector; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... - class G4Isotope { public: // with description + // Make an isotope + G4Isotope(const G4String& name, // its name + G4int z, // atomic number + G4int n, // number of nucleons + G4double a = 0., // mass of mole + G4int mlevel = 0); // isomer level - // Make an isotope - // - G4Isotope(const G4String& name, //its name - G4int z, //atomic number - G4int n, //number of nucleons - G4double a = 0., //mass of mole - G4int mlevel = 0); //isomer level - - ~G4Isotope(); - - // Retrieval methods - // - const G4String& GetName() const {return fName;} - - // Atomic number - G4int GetZ() const {return fZ;} - - // Number of nucleous - G4int GetN() const {return fN;} - - // Atomic mass of mole in Geant4 units with electron shell - G4double GetA() const {return fA;} - - // Isomer level - G4int Getm() const {return fm;} - - static - G4Isotope* GetIsotope(const G4String& name, G4bool warning=false); - - static const - G4IsotopeTable* GetIsotopeTable(); - - static - size_t GetNumberOfIsotopes(); - - size_t GetIndex() const {return fIndexInTable;} - - friend - std::ostream& operator<<(std::ostream&, const G4Isotope*); - - friend - std::ostream& operator<<(std::ostream&, const G4Isotope&); - - friend - std::ostream& operator<<(std::ostream&, G4IsotopeTable); - - public: // without description - - G4bool operator==(const G4Isotope&) const; - G4bool operator!=(const G4Isotope&) const; - - G4Isotope(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. - - void SetName(const G4String& name) {fName=name;} + ~G4Isotope(); - private: - - G4Isotope(G4Isotope&); - G4Isotope& operator=(const G4Isotope&); + G4Isotope(const G4Isotope&) = delete; + G4Isotope& operator=(const G4Isotope&) = delete; - private: + // Retrieval methods + const G4String& GetName() const { return fName; } - G4String fName; // name of the Isotope - G4int fZ; // atomic number - G4int fN; // number of nucleons - G4double fA; // atomic mass of a mole - G4int fm; // isomer level - - static - G4IsotopeTable theIsotopeTable; - - size_t fIndexInTable; // index in the Isotope table -}; + // Atomic number + G4int GetZ() const { return fZ; } + + // Number of nucleous + G4int GetN() const { return fN; } + + // Atomic mass of mole in Geant4 units with electron shell + G4double GetA() const { return fA; } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + // Isomer level + G4int Getm() const { return fm; } + static G4Isotope* GetIsotope(const G4String& name, G4bool warning = false); + + static const G4IsotopeTable* GetIsotopeTable(); + + static size_t GetNumberOfIsotopes(); + + size_t GetIndex() const { return fIndexInTable; } + + friend std::ostream& operator<<(std::ostream&, const G4Isotope*); + + friend std::ostream& operator<<(std::ostream&, const G4Isotope&); + + friend std::ostream& operator<<(std::ostream&, const G4IsotopeTable&); + + G4bool operator==(const G4Isotope&) const; + G4bool operator!=(const G4Isotope&) const; + + void SetName(const G4String& name) { fName = name; } + + private: + G4String fName; // name of the Isotope + G4int fZ; // atomic number + G4int fN; // number of nucleons + G4double fA; // atomic mass of a mole + G4int fm; // isomer level + + static G4IsotopeTable theIsotopeTable; + + size_t fIndexInTable; // index in the Isotope table +}; #endif diff --git a/source/materials/include/G4IsotopeVector.hh b/source/materials/include/G4IsotopeVector.hh index 8c4e12bf3c4..ac698e2f6eb 100644 --- a/source/materials/include/G4IsotopeVector.hh +++ b/source/materials/include/G4IsotopeVector.hh @@ -22,24 +22,14 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// -// -// ------------------------------------------------------------ -// GEANT 4 class header file -// -// ---------------- G4IsotopeVector ---------------- -// History: -// First implementation: Torre Wenaus, November 1995 -// ------------------------------------------------------------ #ifndef G4ISOTOPEVECTOR_HH #define G4ISOTOPEVECTOR_HH -#include #include "G4Isotope.hh" +#include + using G4IsotopeVector = std::vector; #endif diff --git a/source/materials/include/G4LatticeLogical.hh b/source/materials/include/G4LatticeLogical.hh index 7447ba542f5..b88d92e4150 100644 --- a/source/materials/include/G4LatticeLogical.hh +++ b/source/materials/include/G4LatticeLogical.hh @@ -22,26 +22,32 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// + /// \file materials/include/G4LatticeLogical.hh /// \brief Definition of the G4LatticeLogical class // -// // 20131114 Add verbosity for diagnostic output // 20131115 Expose maximum array dimensions for use by LatticeReader #ifndef G4LatticeLogical_h #define G4LatticeLogical_h -#include "globals.hh" #include "G4ThreeVector.hh" +#include "globals.hh" + #include +class G4LatticeLogical +{ + public: + enum + { + MAXRES = 322 + }; // Maximum map resolution (bins) -class G4LatticeLogical { -public: + public: G4LatticeLogical(); - virtual ~G4LatticeLogical(); + virtual ~G4LatticeLogical() = default; void SetVerboseLevel(G4int vb) { verboseLevel = vb; } @@ -49,27 +55,29 @@ public: G4bool Load_NMap(G4int, G4int, G4int, G4String); // Get group velocity magnitude for input polarization and wavevector - virtual G4double MapKtoV(G4int, const G4ThreeVector& ) const; + virtual G4double MapKtoV(G4int, const G4ThreeVector&) const; // Get group velocity direction (unit vector) for input polarization and K - virtual G4ThreeVector MapKtoVDir(G4int, const G4ThreeVector& ) const; + virtual G4ThreeVector MapKtoVDir(G4int, const G4ThreeVector&) const; // Dump structure in format compatible with reading back void Dump(std::ostream& os) const; void DumpMap(std::ostream& os, G4int pol, const G4String& name) const; void Dump_NMap(std::ostream& os, G4int pol, const G4String& name) const; -public: - void SetDynamicalConstants(G4double Beta, G4double Gamma, - G4double Lambda, G4double Mu) { - fBeta=Beta; fGamma=Gamma; fLambda=Lambda; fMu=Mu; + void SetDynamicalConstants(G4double Beta, G4double Gamma, G4double Lambda, G4double Mu) + { + fBeta = Beta; + fGamma = Gamma; + fLambda = Lambda; + fMu = Mu; } - void SetScatteringConstant(G4double b) { fB=b; } - void SetAnhDecConstant(G4double a) { fA=a; } - void SetLDOS(G4double LDOS) { fLDOS=LDOS; } - void SetSTDOS(G4double STDOS) { fSTDOS=STDOS; } - void SetFTDOS(G4double FTDOS) { fFTDOS=FTDOS; } + void SetScatteringConstant(G4double b) { fB = b; } + void SetAnhDecConstant(G4double a) { fA = a; } + void SetLDOS(G4double LDOS) { fLDOS = LDOS; } + void SetSTDOS(G4double STDOS) { fSTDOS = STDOS; } + void SetFTDOS(G4double FTDOS) { fFTDOS = FTDOS; } G4double GetBeta() const { return fBeta; } G4double GetGamma() const { return fGamma; } @@ -81,32 +89,28 @@ public: G4double GetSTDOS() const { return fSTDOS; } G4double GetFTDOS() const { return fFTDOS; } -public: - enum { MAXRES=322 }; // Maximum map resolution (bins) - -private: - G4int verboseLevel; // Enable diagnostic output + private: + G4int verboseLevel{0}; // Enable diagnostic output - G4double fMap[3][MAXRES][MAXRES]; // map for group velocity scalars + G4double fMap[3][MAXRES][MAXRES]; // map for group velocity scalars G4ThreeVector fN_map[3][MAXRES][MAXRES]; // map for direction vectors - G4int fVresTheta; //velocity map theta resolution (inclination) - G4int fVresPhi; //velocity map phi resolution (azimuth) - G4int fDresTheta; //direction map theta resn - G4int fDresPhi; //direction map phi resn - - G4double fA; //Scaling constant for Anh.Dec. mean free path - G4double fB; //Scaling constant for Iso.Scat. mean free path - G4double fLDOS; //Density of states for L-phonons - G4double fSTDOS; //Density of states for ST-phonons - G4double fFTDOS; //Density of states for FT-phonons - G4double fBeta, fGamma, fLambda, fMu; //dynamical constants for material + G4int fVresTheta{0}; // velocity map theta resolution (inclination) + G4int fVresPhi{0}; // velocity map phi resolution (azimuth) + G4int fDresTheta{0}; // direction map theta resn + G4int fDresPhi{0}; // direction map phi resn + + G4double fA{0}; // Scaling constant for Anh.Dec. mean free path + G4double fB{0}; // Scaling constant for Iso.Scat. mean free path + G4double fLDOS{0}; // Density of states for L-phonons + G4double fSTDOS{0}; // Density of states for ST-phonons + G4double fFTDOS{0}; // Density of states for FT-phonons + G4double fBeta{0}, fGamma{0}, fLambda{0}, fMu{0}; // dynamical constants for material }; // Write lattice structure to output stream - -inline std::ostream& -operator<<(std::ostream& os, const G4LatticeLogical& lattice) { +inline std::ostream& operator<<(std::ostream& os, const G4LatticeLogical& lattice) +{ lattice.Dump(os); return os; } diff --git a/source/materials/include/G4LatticePhysical.hh b/source/materials/include/G4LatticePhysical.hh index 8c46dd78c57..db0f9ab8db5 100644 --- a/source/materials/include/G4LatticePhysical.hh +++ b/source/materials/include/G4LatticePhysical.hh @@ -22,11 +22,10 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// + /// \file materials/include/G4LatticePhysical.hh /// \brief Definition of the G4LatticePhysical class // -// // 20131114 Add verbosity for diagnostic output // 20131116 Replace G4Transform3D with G4RotationMatrix @@ -37,47 +36,46 @@ #include "G4RotationMatrix.hh" #include "G4ThreeVector.hh" +class G4LatticePhysical +{ + public: + G4LatticePhysical(const G4LatticeLogical* Lat = nullptr, + const G4RotationMatrix* Rot = nullptr); // Use FRAME rotation + virtual ~G4LatticePhysical() = default; -class G4LatticePhysical { -public: - G4LatticePhysical( - const G4LatticeLogical* Lat = nullptr, - const G4RotationMatrix* Rot = nullptr); // Use FRAME rotation - virtual ~G4LatticePhysical(); - - void SetVerboseLevel(G4int vb) { verboseLevel = vb; } + void SetVerboseLevel(G4int vb) { verboseLevel = vb; } - // NOTE: Pass by value to allow in-situ rotations - G4double MapKtoV(G4int, G4ThreeVector) const; - G4ThreeVector MapKtoVDir(G4int, G4ThreeVector) const; + // NOTE: Pass by value to allow in-situ rotations + G4double MapKtoV(G4int, G4ThreeVector) const; + G4ThreeVector MapKtoVDir(G4int, G4ThreeVector) const; - void SetLatticeLogical(const G4LatticeLogical* Lat) { fLattice = Lat; } - void SetPhysicalOrientation(const G4RotationMatrix* Rot); // FRAME rotation - void SetLatticeOrientation(G4double, G4double); - void SetMillerOrientation(G4int, G4int, G4int); + void SetLatticeLogical(const G4LatticeLogical* Lat) { fLattice = Lat; } + void SetPhysicalOrientation(const G4RotationMatrix* Rot); // FRAME rotation + void SetLatticeOrientation(G4double, G4double); + void SetMillerOrientation(G4int, G4int, G4int); -public: + public: const G4LatticeLogical* GetLattice() const { return fLattice; } G4double GetScatteringConstant() const { return fLattice->GetScatteringConstant(); } G4double GetAnhDecConstant() const { return fLattice->GetAnhDecConstant(); } - G4double GetLDOS() const { return fLattice->GetLDOS(); } - G4double GetSTDOS() const { return fLattice->GetSTDOS(); } - G4double GetFTDOS() const { return fLattice->GetFTDOS(); } - G4double GetBeta() const { return fLattice->GetBeta(); } - G4double GetGamma() const { return fLattice->GetGamma(); } - G4double GetLambda() const { return fLattice->GetLambda(); } - G4double GetMu() const { return fLattice->GetMu(); } + G4double GetLDOS() const { return fLattice->GetLDOS(); } + G4double GetSTDOS() const { return fLattice->GetSTDOS(); } + G4double GetFTDOS() const { return fLattice->GetFTDOS(); } + G4double GetBeta() const { return fLattice->GetBeta(); } + G4double GetGamma() const { return fLattice->GetGamma(); } + G4double GetLambda() const { return fLattice->GetLambda(); } + G4double GetMu() const { return fLattice->GetMu(); } // Apply orientation transforms to specified vector G4ThreeVector RotateToGlobal(const G4ThreeVector& dir) const; G4ThreeVector RotateToLocal(const G4ThreeVector& dir) const; -private: - G4int verboseLevel; // Enable diagnostic output + private: + G4int verboseLevel{0}; // Enable diagnostic output - G4double fTheta, fPhi; // Lattice orientation within object - const G4LatticeLogical* fLattice; // Underlying lattice parameters + G4double fTheta{0}, fPhi{0}; // Lattice orientation within object + const G4LatticeLogical* fLattice; // Underlying lattice parameters G4RotationMatrix fLocalToGlobal; G4RotationMatrix fGlobalToLocal; diff --git a/source/materials/include/G4Material.hh b/source/materials/include/G4Material.hh index 1775178116d..a1281ccb070 100644 --- a/source/materials/include/G4Material.hh +++ b/source/materials/include/G4Material.hh @@ -22,7 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// + //--------------------------------------------------------------------------- // // ClassName: G4Material @@ -32,20 +32,20 @@ // Class description: // // Is used to define the material composition of Geant4 volumes. -// A G4Material is always made of G4Elements. It should has the name, -// the list of G4Elements, material density, material state, temperature, -// pressure. Other parameters are optional and may be set by the user code -// or computed at initialisation. -// +// A G4Material is always made of G4Elements. It should has the name, +// the list of G4Elements, material density, material state, temperature, +// pressure. Other parameters are optional and may be set by the user code +// or computed at initialisation. +// // There is several ways to construct G4Material: // - from single element; // - from a list of components (elements or other materials); // - from internal Geant4 database of materials // -// A collection of constituent Elements/Materials should be defined +// A collection of constituent Elements/Materials should be defined // with specified weights by fractional mass or atom counts (only for Elements). // -// Quantities, with physical meaning or not, which are constant in a given +// Quantities, with physical meaning or not, which are constant in a given // material are computed and stored here as Derived data members. // // The class contains as a private static member the Table of defined @@ -54,23 +54,20 @@ // It is strongly not recommended to delete materials in user code. // All materials will be deleted automatically at the end of Geant4 session. // - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - // 10-07-96, new data members added by L.Urban // 12-12-96, new data members added by L.Urban // 20-01-97, aesthetic rearrangement. RadLength calculation modified // Data members Zeff and Aeff REMOVED (i.e. passed to the Elements). // (local definition of Zeff in DensityEffect and FluctModel...) -// Vacuum defined as a G4State. Mixture flag removed, M.Maire +// Vacuum defined as a G4State. Mixture flag removed, M.Maire // 29-01-97, State=Vacuum automatically set density=0 in the contructors. -// Subsequent protections have been put in the calculation of +// Subsequent protections have been put in the calculation of // MeanExcEnergy, ShellCorrectionVector, DensityEffect, M.Maire // 20-03-97, corrected initialization of pointers, M.Maire // 10-06-97, new data member added by V.Grichine (fSandiaPhotoAbsCof) // 27-06-97, new function GetElement(int), M.Maire // 24-02-98, fFractionVector become fMassFractionVector -// 28-05-98, kState=kVacuum removed: +// 28-05-98, kState=kVacuum removed: // The vacuum is an ordinary gas vith very low density, M.Maire // 12-06-98, new method AddMaterial() allowing mixture of materials, M.Maire // 09-07-98, Ionisation parameters removed from the class, M.Maire @@ -89,218 +86,192 @@ // 13-04-12, std::map fMatComponents (mma) // 21-04-12, fMassOfMolecule (mma) -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #ifndef G4MATERIAL_HH #define G4MATERIAL_HH 1 -#include -#include -#include - -#include "globals.hh" -#include "G4ios.hh" #include "G4Element.hh" -#include "G4MaterialPropertiesTable.hh" -#include "G4IonisParamMat.hh" -#include "G4SandiaTable.hh" #include "G4ElementVector.hh" +#include "G4IonisParamMat.hh" +#include "G4MaterialPropertiesTable.hh" #include "G4MaterialTable.hh" +#include "G4SandiaTable.hh" +#include "G4ios.hh" +#include "globals.hh" -enum G4State { kStateUndefined = 0, kStateSolid, kStateLiquid, kStateGas }; +#include -static const G4double NTP_Temperature = 293.15*CLHEP::kelvin; +#include +#include -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +enum G4State +{ + kStateUndefined = 0, + kStateSolid, + kStateLiquid, + kStateGas +}; + +static const G4double NTP_Temperature = 293.15 * CLHEP::kelvin; class G4Material { -public: // with description - // + public: // with description // Constructor to create a material from single element - // - G4Material(const G4String& name, //its name - G4double z, //atomic number - G4double a, //mass of mole - G4double density, //density - G4State state = kStateUndefined, //solid,gas - G4double temp = NTP_Temperature, //temperature - G4double pressure = CLHEP::STP_Pressure); //pressure + G4Material(const G4String& name, // its name + G4double z, // atomic number + G4double a, // mass of mole + G4double density, // density + G4State state = kStateUndefined, // solid,gas + G4double temp = NTP_Temperature, // temperature + G4double pressure = CLHEP::STP_Pressure); // pressure - // // Constructor to create a material from a combination of elements // and/or materials subsequently added via AddElement and/or AddMaterial - // - G4Material(const G4String& name, //its name - G4double density, //density - G4int nComponents, //nbOfComponents - G4State state = kStateUndefined, //solid,gas - G4double temp = NTP_Temperature, //temperature - G4double pressure = CLHEP::STP_Pressure); //pressure + G4Material(const G4String& name, // its name + G4double density, // density + G4int nComponents, // nbOfComponents + G4State state = kStateUndefined, // solid,gas + G4double temp = NTP_Temperature, // temperature + G4double pressure = CLHEP::STP_Pressure); // pressure - // // Constructor to create a material from the base material - // - G4Material(const G4String& name, //its name - G4double density, //density - const G4Material* baseMaterial, //base material - G4State state = kStateUndefined, //solid,gas - G4double temp = NTP_Temperature, //temperature - G4double pressure = CLHEP::STP_Pressure); //pressure + G4Material(const G4String& name, // its name + G4double density, // density + const G4Material* baseMaterial, // base material + G4State state = kStateUndefined, // solid,gas + G4double temp = NTP_Temperature, // temperature + G4double pressure = CLHEP::STP_Pressure); // pressure + + virtual ~G4Material(); + + G4Material(const G4Material&) = delete; + const G4Material& operator=(const G4Material&) = delete; - // // Add an element, giving number of atoms - // - void AddElementByNumberOfAtoms(const G4Element* elm, G4int nAtoms); - inline - void AddElement(G4Element* elm, G4int nAtoms) - { AddElementByNumberOfAtoms(elm, nAtoms); } + void AddElementByNumberOfAtoms(const G4Element* elm, G4int nAtoms); + inline void AddElement(G4Element* elm, G4int nAtoms) { AddElementByNumberOfAtoms(elm, nAtoms); } - // // Add an element or material, giving fraction of mass - // - void AddElementByMassFraction(const G4Element* elm, G4double fraction); - inline void AddElement (G4Element* elm, G4double frac) - { AddElementByMassFraction(elm, frac); } + void AddElementByMassFraction(const G4Element* elm, G4double fraction); + inline void AddElement(G4Element* elm, G4double frac) { AddElementByMassFraction(elm, frac); } void AddMaterial(G4Material* material, G4double fraction); - - virtual ~G4Material(); + // // retrieval methods - // - inline const G4String& GetName() const {return fName;} - inline const G4String& GetChemicalFormula() const {return fChemicalFormula;} - inline G4double GetFreeElectronDensity() const {return fFreeElecDensity;} - inline G4double GetDensity() const {return fDensity;} - inline G4State GetState() const {return fState;} - inline G4double GetTemperature() const {return fTemp;} - inline G4double GetPressure() const {return fPressure;} - - //number of elements constituing this material: - inline size_t GetNumberOfElements() const {return fNumberOfElements;} - - //vector of pointers to elements constituing this material: - inline const - G4ElementVector* GetElementVector() const {return theElementVector;} - - //vector of fractional mass of each element: - inline const - G4double* GetFractionVector() const {return fMassFractionVector;} - - //vector of atom count of each element: - inline const - G4int* GetAtomsVector() const {return fAtomsVector;} - - //return a pointer to an element, given its index in the material: - inline const - G4Element* GetElement(G4int iel) const {return (*theElementVector)[iel];} - - //vector of nb of atoms per volume of each element in this material: - inline const - G4double* GetVecNbOfAtomsPerVolume() const {return fVecNbOfAtomsPerVolume;} - //total number of atoms per volume: - inline - G4double GetTotNbOfAtomsPerVolume() const {return fTotNbOfAtomsPerVolume;} - //total number of electrons per volume: - inline - G4double GetTotNbOfElectPerVolume() const {return fTotNbOfElectPerVolume;} - - //obsolete names (5-10-98) see the 2 functions above - inline const - G4double* GetAtomicNumDensityVector() const {return fVecNbOfAtomsPerVolume;} - inline G4double GetElectronDensity() const {return fTotNbOfElectPerVolume;} - - // Radiation length: - inline G4double GetRadlen() const {return fRadlen;} - - // Nuclear interaction length - inline G4double GetNuclearInterLength() const {return fNuclInterLen;} - + // + inline const G4String& GetName() const { return fName; } + inline const G4String& GetChemicalFormula() const { return fChemicalFormula; } + inline G4double GetFreeElectronDensity() const { return fFreeElecDensity; } + inline G4double GetDensity() const { return fDensity; } + inline G4State GetState() const { return fState; } + inline G4double GetTemperature() const { return fTemp; } + inline G4double GetPressure() const { return fPressure; } + + // number of elements constituing this material: + inline size_t GetNumberOfElements() const { return fNumberOfElements; } + + // vector of pointers to elements constituing this material: + inline const G4ElementVector* GetElementVector() const { return theElementVector; } + + // vector of fractional mass of each element: + inline const G4double* GetFractionVector() const { return fMassFractionVector; } + + // vector of atom count of each element: + inline const G4int* GetAtomsVector() const { return fAtomsVector; } + + // return a pointer to an element, given its index in the material: + inline const G4Element* GetElement(G4int iel) const { return (*theElementVector)[iel]; } + + // vector of nb of atoms per volume of each element in this material: + inline const G4double* GetVecNbOfAtomsPerVolume() const { return fVecNbOfAtomsPerVolume; } + // total number of atoms per volume: + inline G4double GetTotNbOfAtomsPerVolume() const { return fTotNbOfAtomsPerVolume; } + // total number of electrons per volume: + inline G4double GetTotNbOfElectPerVolume() const { return fTotNbOfElectPerVolume; } + + // obsolete names (5-10-98) see the 2 functions above + inline const G4double* GetAtomicNumDensityVector() const { return fVecNbOfAtomsPerVolume; } + inline G4double GetElectronDensity() const { return fTotNbOfElectPerVolume; } + + // Radiation length: + inline G4double GetRadlen() const { return fRadlen; } + + // Nuclear interaction length + inline G4double GetNuclearInterLength() const { return fNuclInterLen; } + // ionisation parameters: - inline G4IonisParamMat* GetIonisation() const {return fIonisation;} + inline G4IonisParamMat* GetIonisation() const { return fIonisation; } // Sandia table: - inline G4SandiaTable* GetSandiaTable() const {return fSandiaTable; } - + inline G4SandiaTable* GetSandiaTable() const { return fSandiaTable; } + // Base material: - inline - const G4Material* GetBaseMaterial() const {return fBaseMaterial;} - + inline const G4Material* GetBaseMaterial() const { return fBaseMaterial; } + // material components: - inline - const std::map& GetMatComponents() const - {return fMatComponents;} - + inline const std::map& GetMatComponents() const { return fMatComponents; } + // for chemical compound - inline G4double GetMassOfMolecule() const {return fMassOfMolecule;} + inline G4double GetMassOfMolecule() const { return fMassOfMolecule; } void SetChemicalFormula(const G4String& chF); void SetFreeElectronDensity(G4double val); void ComputeDensityEffectOnFly(G4bool); - + // meaningful only for single material: G4double GetZ() const; G4double GetA() const; - //the MaterialPropertiesTable (if any) attached to this material: + // the MaterialPropertiesTable (if any) attached to this material: void SetMaterialPropertiesTable(G4MaterialPropertiesTable* anMPT); - + inline G4MaterialPropertiesTable* GetMaterialPropertiesTable() const - {return fMaterialPropertiesTable;} + { + return fMaterialPropertiesTable; + } - //the index of this material in the Table: - inline size_t GetIndex() const {return fIndexInTable;} + // the index of this material in the Table: + inline size_t GetIndex() const { return fIndexInTable; } // the static Table of Materials: - // static G4MaterialTable* GetMaterialTable(); - + static size_t GetNumberOfMaterials(); - - //return pointer to a material, given its name: - static G4Material* GetMaterial(const G4String& name, G4bool warning=true); - //return pointer to a simple material, given its propeties: + // return pointer to a material, given its name: + static G4Material* GetMaterial(const G4String& name, G4bool warning = true); + + // return pointer to a simple material, given its propeties: static G4Material* GetMaterial(G4double z, G4double a, G4double dens); - //return pointer to a composit material, given its propeties: + // return pointer to a composit material, given its propeties: static G4Material* GetMaterial(size_t nComp, G4double dens); - - // - //printing methods - // - friend std::ostream& operator<<(std::ostream&, const G4Material*); - friend std::ostream& operator<<(std::ostream&, const G4Material&); + + // printing methods + friend std::ostream& operator<<(std::ostream&, const G4Material*); + friend std::ostream& operator<<(std::ostream&, const G4Material&); friend std::ostream& operator<<(std::ostream&, const G4MaterialTable&); - - G4Material(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. - inline void SetName (const G4String& name) {fName=name;} + inline void SetName(const G4String& name) { fName = name; } virtual G4bool IsExtended() const; // operators G4bool operator==(const G4Material&) const = delete; G4bool operator!=(const G4Material&) const = delete; - G4Material(const G4Material&) = delete; - const G4Material& operator=(const G4Material&) = delete; - -private: + private: void InitializePointers(); - + // Header routine for all derived quantities void ComputeDerivedQuantities(); // Compute Radiation length void ComputeRadiationLength(); - + // Compute Nuclear interaction length void ComputeNuclearInterLength(); @@ -311,57 +282,54 @@ private: G4bool IsLocked(); - static - G4MaterialTable theMaterialTable; // the material table + static G4MaterialTable theMaterialTable; // the material table - const G4Material* fBaseMaterial; // Pointer to the base material + const G4Material* fBaseMaterial; // Pointer to the base material G4MaterialPropertiesTable* fMaterialPropertiesTable; // // General atomic properties defined in constructor or // computed from the basic data members // - - G4ElementVector* theElementVector;// vector of constituent G4Elements - G4int* fAtomsVector; // composition by atom count - G4double* fMassFractionVector; // composition by fractional mass - G4double* fVecNbOfAtomsPerVolume;// number of atoms per volume - - G4IonisParamMat* fIonisation; // ionisation parameters - G4SandiaTable* fSandiaTable; // Sandia table - - G4double fDensity; // Material density - G4double fFreeElecDensity; // Free electron density - G4double fTemp; // Temperature (defaults: STP) - G4double fPressure; // Pressure (defaults: STP) - - G4double fTotNbOfAtomsPerVolume; // Total nb of atoms per volume - G4double fTotNbOfElectPerVolume; // Total nb of electrons per volume - G4double fRadlen; // Radiation length - G4double fNuclInterLen; // Nuclear interaction length - G4double fMassOfMolecule; // Correct for materials built by atoms count - - G4State fState; // Material state - size_t fIndexInTable; // Index in the material table - G4int fNumberOfElements; // Number of G4Elements in the material + + G4ElementVector* theElementVector; // vector of constituent G4Elements + G4int* fAtomsVector; // composition by atom count + G4double* fMassFractionVector; // composition by fractional mass + G4double* fVecNbOfAtomsPerVolume; // number of atoms per volume + + G4IonisParamMat* fIonisation; // ionisation parameters + G4SandiaTable* fSandiaTable; // Sandia table + + G4double fDensity; // Material density + G4double fFreeElecDensity; // Free electron density + G4double fTemp; // Temperature (defaults: STP) + G4double fPressure; // Pressure (defaults: STP) + + G4double fTotNbOfAtomsPerVolume; // Total nb of atoms per volume + G4double fTotNbOfElectPerVolume; // Total nb of electrons per volume + G4double fRadlen; // Radiation length + G4double fNuclInterLen; // Nuclear interaction length + G4double fMassOfMolecule; // Correct for materials built by atoms count + + G4State fState; // Material state + size_t fIndexInTable; // Index in the material table + G4int fNumberOfElements; // Number of G4Elements in the material // Class members used only at initialisation - G4int fNbComponents; // Number of components - G4int fIdxComponent; // Index of a new component - G4bool fMassFraction; // Flag of the method to add components + G4int fNbComponents; // Number of components + G4int fIdxComponent; // Index of a new component + G4bool fMassFraction; // Flag of the method to add components - // For composites built + // For composites built std::vector* fAtoms = nullptr; std::vector* fElmFrac = nullptr; std::vector* fElm = nullptr; // For composites built via AddMaterial() - std::map fMatComponents; + std::map fMatComponents; - G4String fName; // Material name - G4String fChemicalFormula; // Material chemical formula + G4String fName; // Material name + G4String fChemicalFormula; // Material chemical formula }; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #endif diff --git a/source/materials/include/G4MaterialPropertiesIndex.hh b/source/materials/include/G4MaterialPropertiesIndex.hh index 038d3a88e11..54936dc5f29 100644 --- a/source/materials/include/G4MaterialPropertiesIndex.hh +++ b/source/materials/include/G4MaterialPropertiesIndex.hh @@ -22,20 +22,20 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + // File: G4MaterialPropertiesIndex.hh // Description: Indices and Names for G4MaterialProperties // Created: 29-06-2017 // Author: Soon Yung Jun -//////////////////////////////////////////////////////////////////////// #ifndef G4MaterialPropertiesIndex_h #define G4MaterialPropertiesIndex_h 1 -#include #include "G4String.hh" +#include + +// clang-format off enum G4MaterialPropertyIndex { kNullPropertyIndex = -1, // the number of G4MaterialPropertyIndex kRINDEX, // index of refraction @@ -68,8 +68,8 @@ enum G4MaterialPropertyIndex { kNumberOfPropertyIndex // the number of G4MaterialPropertyIndex } ; -enum G4MaterialConstPropertyIndex -{ +enum G4MaterialConstPropertyIndex +{ kNullConstPropertyIndex = -1, // the number of G4MaterialPropertyIndex kSURFACEROUGHNESS, // surface microroughness kISOTHERMAL_COMPRESSIBILITY, // isothermal compressibility @@ -134,5 +134,6 @@ enum G4MaterialConstPropertyIndex kNumberOfConstPropertyIndex // the number of G4MaterialConstPropertyIndex }; +// clang-format on #endif /* G4MaterialPropertiesIndex_h */ diff --git a/source/materials/include/G4MaterialPropertiesTable.hh b/source/materials/include/G4MaterialPropertiesTable.hh index 2ea26aad791..1be51937e36 100644 --- a/source/materials/include/G4MaterialPropertiesTable.hh +++ b/source/materials/include/G4MaterialPropertiesTable.hh @@ -22,9 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// + //////////////////////////////////////////////////////////////////////// // // class G4MaterialPropertiesTable @@ -34,7 +32,7 @@ // A Material properties table is a hash table, with // key = property name, and value either G4double or // G4MaterialPropertyVector - +// // File: G4MaterialPropertiesTable.hh // Version: 1.0 // Created: 1996-02-08 @@ -52,9 +50,9 @@ #ifndef G4MaterialPropertiesTable_h #define G4MaterialPropertiesTable_h 1 -#include "globals.hh" #include "G4MaterialPropertiesIndex.hh" #include "G4MaterialPropertyVector.hh" +#include "globals.hh" #include @@ -64,123 +62,101 @@ class G4MaterialPropertiesTable G4MaterialPropertiesTable(); virtual ~G4MaterialPropertiesTable(); - void AddConstProperty(const G4String& key, G4double propertyValue, - G4bool createNewKey = false); - void AddConstProperty(const char* key, G4double propertyValue, - G4bool createNewKey = false); // Add a new property to the table by giving a key-name and value + void AddConstProperty(const G4String& key, G4double propertyValue, G4bool createNewKey = false); + void AddConstProperty(const char* key, G4double propertyValue, G4bool createNewKey = false); - G4MaterialPropertyVector* AddProperty( - const G4String& key, const std::vector& photonEnergies, - const std::vector& propertyValues, G4bool createNewKey = false, - G4bool spline = false); // Add a new property to the table by giving a key-name and // vectors of values + G4MaterialPropertyVector* AddProperty(const G4String& key, + const std::vector& photonEnergies, const std::vector& propertyValues, + G4bool createNewKey = false, G4bool spline = false); - G4MaterialPropertyVector* AddProperty( - const char* key, G4double* photonEnergies, G4double* propertyValues, - G4int numEntries, G4bool createNewKey = false, G4bool spline = false); // Add a new property to the table by giving a key-name and the // arrays x and y of size NumEntries. + G4MaterialPropertyVector* AddProperty(const char* key, G4double* photonEnergies, + G4double* propertyValues, G4int numEntries, G4bool createNewKey = false, G4bool spline = false); - void AddProperty(const G4String& key, G4MaterialPropertyVector* opv, - G4bool createNewKey = false); - void AddProperty(const char* key, G4MaterialPropertyVector* opv, - G4bool createNewKey = false); // Add a new property to the table by giving a key-name and an // already constructed G4MaterialPropertyVector. + void AddProperty(const G4String& key, G4MaterialPropertyVector* opv, G4bool createNewKey = false); + void AddProperty(const char* key, G4MaterialPropertyVector* opv, G4bool createNewKey = false); - void AddProperty(const G4String& key, const G4String& mat); // Add a new property to the table by giving a key name and a material // name. Properties are in namespace G4OpticalMaterialProperties // Not possible to create a new key with this method. + void AddProperty(const G4String& key, const G4String& mat); + // Remove a constant property from the table. void RemoveConstProperty(const G4String& key); void RemoveConstProperty(const char* key); - // Remove a constant property from the table. + // Remove a property from the table. void RemoveProperty(const G4String& key); void RemoveProperty(const char* key); - // Remove a property from the table. - G4double GetConstProperty(const G4String& key) const; - G4double GetConstProperty(const char* key) const; - G4double GetConstProperty(const G4int index) const; // Get a constant property from the table // It is an error to ask for a const property that the user has not defined. // Check if it has been defined with ConstPropertyExists() first. + G4double GetConstProperty(const G4String& key) const; + G4double GetConstProperty(const char* key) const; + G4double GetConstProperty(const G4int index) const; - G4bool ConstPropertyExists(const G4String& key) const; - G4bool ConstPropertyExists(const char* key) const; - G4bool ConstPropertyExists(const G4int index) const; // Return true if a const property has been defined by the user. // Despite the name, this returns false for a const property in // GetMaterialConstPropertyNames() but not defined by user. // Use this method before calling GetConstProperty(). + G4bool ConstPropertyExists(const G4String& key) const; + G4bool ConstPropertyExists(const char* key) const; + G4bool ConstPropertyExists(const G4int index) const; + // Get the property from the table corresponding to the key-index or index. + // nullptr is returned if the property has not been defined by the user. G4MaterialPropertyVector* GetProperty(const char* key) const; G4MaterialPropertyVector* GetProperty(const G4String& key) const; G4MaterialPropertyVector* GetProperty(const G4int index) const; - // Get the property from the table corresponding to the key-index or index. - // nullptr is returned if the property has not been defined by the user. - void AddEntry(const G4String& key, G4double aPhotonEnergy, - G4double aPropertyValue); - void AddEntry(const char* key, G4double aPhotonEnergy, - G4double aPropertyValue); // Add a new entry (pair of numbers) to the table for a given key. + void AddEntry(const G4String& key, G4double aPhotonEnergy, G4double aPropertyValue); + void AddEntry(const char* key, G4double aPhotonEnergy, G4double aPropertyValue); - G4int GetConstPropertyIndex(const G4String& key) const; // Get the constant property index from the key-name // It is an error to request the index of a non-existent key (key not // present in fMaterialConstPropertyNames()). + G4int GetConstPropertyIndex(const G4String& key) const; - G4int GetPropertyIndex(const G4String& key) const; // Get the property index by the key-name. // It is an error to request the index of a non-existent key (key not // present in GetMaterialPropertyNames()). + G4int GetPropertyIndex(const G4String& key) const; - void DumpTable() const; // print the material properties and material constant properties + void DumpTable() const; // the next four methods are used in persistency/GDML: - const std::vector& GetMaterialPropertyNames() const - { - return fMatPropNames; - } - const std::vector& GetMaterialConstPropertyNames() const - { - return fMatConstPropNames; - } - const std::vector& GetProperties() const - { - return fMP; - } - const std::vector>& GetConstProperties() - const - { - return fMCP; - } + const std::vector& GetMaterialPropertyNames() const { return fMatPropNames; } + const std::vector& GetMaterialConstPropertyNames() const { return fMatConstPropNames; } // return references to the vectors of material (constant) properties. + const std::vector& GetProperties() const { return fMP; } + const std::vector>& GetConstProperties() const { return fMCP; } private: - G4MaterialPropertyVector* CalculateGROUPVEL(); // Calculate the group velocity based on RINDEX + G4MaterialPropertyVector* CalculateGROUPVEL(); - std::vector fMP; - // Vector of pointer to material property vectors. All entries are - // initialized to nullptr. Pointer is not null when mat.prop. vector defined. + // Vector of pointer to material property vectors. + // All entries are initialized to nullptr. Pointer is not null when mat.prop. vector defined. // Order of entries in MP defined by enum in G4MaterialPropertiesIndex. + std::vector fMP; - std::vector> fMCP; // Vector of energy-independent (i.e., "constant") material properties. We // need to keep track if a property is defined or not: the bool in the pair // is 'true' if the property is defined. // Order of entries in MCP defined by enum in G4MaterialPropertiesIndex. + std::vector> fMCP; - std::vector fMatPropNames; - std::vector fMatConstPropNames; - // vectors of strings of property names + std::vector fMatPropNames; // vector of strings of property names + std::vector fMatConstPropNames; // vector of strings of property names }; #endif /* G4MaterialPropertiesTable_h */ diff --git a/source/materials/include/G4MaterialPropertyVector.hh b/source/materials/include/G4MaterialPropertyVector.hh index 25b7ce49a82..c9be1355a34 100644 --- a/source/materials/include/G4MaterialPropertyVector.hh +++ b/source/materials/include/G4MaterialPropertyVector.hh @@ -22,17 +22,14 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// -// + //////////////////////////////////////////////////////////////////////// // // class G4MaterialPropertyVector // // Class description: // -// A one-to-one mapping from Photon Energy to some optical property +// A one-to-one mapping from Photon Energy to some optical property // File: G4MaterialPropertyVector.hh // @@ -44,19 +41,10 @@ // //////////////////////////////////////////////////////////////////////// -#ifndef G4MaterialPropertyVector_h +#ifndef G4MaterialPropertyVector_h #define G4MaterialPropertyVector_h 1 -///////////// -// Includes -///////////// - #include "G4PhysicsFreeVector.hh" - -///////////////////// -// Class Definition -///////////////////// - using G4MaterialPropertyVector = G4PhysicsFreeVector; #endif /* G4MaterialPropertyVector_h */ diff --git a/source/materials/include/G4MaterialTable.hh b/source/materials/include/G4MaterialTable.hh index d21243d9172..114fc385047 100644 --- a/source/materials/include/G4MaterialTable.hh +++ b/source/materials/include/G4MaterialTable.hh @@ -22,18 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// -// -// ------------------------------------------------------------ -// GEANT 4 class header file -// -// ---------------- G4MaterialTable ---------------- -// History: -// First implementation: Torre Wenaus, November 1995 -// ------------------------------------------------------------ - + #ifndef G4MATERIALTABLE_HH #define G4MATERIALTABLE_HH diff --git a/source/materials/include/G4MicroElecMaterialStructure.hh b/source/materials/include/G4MicroElecMaterialStructure.hh index de925360167..1eaa85c1089 100644 --- a/source/materials/include/G4MicroElecMaterialStructure.hh +++ b/source/materials/include/G4MicroElecMaterialStructure.hh @@ -22,10 +22,9 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + // G4MicroElecMaterialStructure.hh, 2011/08/29 A.Valentin, M. Raine are with CEA [a] -// 2020/05/20 P. Caron, C. Inguimbert are with ONERA [b] +// 2020/05/20 P. Caron, C. Inguimbert are with ONERA [b] // Q. Gibaru is with CEA [a], ONERA [b] and CNES [c] // M. Raine and D. Lambert are with CEA [a] // @@ -35,7 +34,7 @@ // [c] CNES, 18 av.E.Belin, 31401 Toulouse CEDEX, France // // Based on the following publications -// - A.Valentin, M. Raine, +// - A.Valentin, M. Raine, // Inelastic cross-sections of low energy electrons in silicon // for the simulation of heavy ion tracks with the Geant4-DNA toolkit, // NSS Conf. Record 2010, pp. 80-85 @@ -50,42 +49,40 @@ // https://doi.org/10.1016/j.nimb.2012.07.028 // // - M. Raine, M. Gaillardin, P. Paillet -// Geant4 physics processes for silicon microdosimetry simulation: +// Geant4 physics processes for silicon microdosimetry simulation: // Improvements and extension of the energy-range validity up to 10 GeV/nucleon // NIM B, vol. 325, pp. 97-100, 2014 // https://doi.org/10.1016/j.nimb.2014.01.014 // // - J. Pierron, C. Inguimbert, M. Belhaj, T. Gineste, J. Puech, M. Raine -// Electron emission yield for low energy electrons: +// Electron emission yield for low energy electrons: // Monte Carlo simulation and experimental comparison for Al, Ag, and Si -// Journal of Applied Physics 121 (2017) 215107. +// Journal of Applied Physics 121 (2017) 215107. // https://doi.org/10.1063/1.4984761 // // - P. Caron, // Study of Electron-Induced Single-Event Upset in Integrated Memory Devices // PHD, 16th October 2019 // -// - Q.Gibaru, C.Inguimbert, P.Caron, M.Raine, D.Lambert, J.Puech, -// Geant4 physics processes for microdosimetry and secondary electron emission simulation : +// - Q.Gibaru, C.Inguimbert, P.Caron, M.Raine, D.Lambert, J.Puech, +// Geant4 physics processes for microdosimetry and secondary electron emission simulation : // Extension of MicroElec to very low energies and new materials // NIM B, 2020, in review. -// -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -#ifndef G4MICROELECMATERIALSTRUCTURE_HH -#define G4MICROELECMATERIALSTRUCTURE_HH 1 +#ifndef G4MICROELECMATERIALSTRUCTURE_HH +#define G4MICROELECMATERIALSTRUCTURE_HH 1 -#include "globals.hh" #include "G4Material.hh" +#include "globals.hh" + #include class G4MicroElecMaterialStructure { -public: + public: G4MicroElecMaterialStructure(const G4String& matName = ""); virtual ~G4MicroElecMaterialStructure() = default; - + void ReadMaterialFile(); G4double Energy(G4int level); G4int NumberOfLevels() { return nLevels; } @@ -97,15 +94,14 @@ public: G4double GetWorkFunction() { return workFunction; }; G4String GetMaterialName() { return materialName; }; G4double GetLimitEnergy(G4int level); - G4double GetElasticModelLowLimit() {return limitElastic[0];} + G4double GetElasticModelLowLimit() { return limitElastic[0]; } G4double GetElasticModelHighLimit() { return limitElastic[1]; } G4double GetInelasticModelLowLimit(G4int pdg); G4double GetInelasticModelHighLimit(G4int pdg); G4bool IsShellWeaklyBound(G4int level); - -private: - // private elements - G4int nLevels = 3; // Number of levels of material + + private: + G4int nLevels = 3; // Number of levels of material G4bool isCompound = false; G4String materialName = ""; std::vector isShellWeaklyBoundVector; @@ -117,8 +113,8 @@ private: std::vector compoundShellZ; G4double Z = 0.0; G4double energyGap = 0.0; - G4double limitElastic[2] = { 0,0 }; - G4double limitInelastic[4] = { 0,0,0,0 }; + G4double limitElastic[2] = {0, 0}; + G4double limitInelastic[4] = {0, 0, 0, 0}; }; -#endif +#endif diff --git a/source/materials/include/G4MicroElecSiStructure.hh b/source/materials/include/G4MicroElecSiStructure.hh index 11aabbd7e2a..0252b0a88b4 100644 --- a/source/materials/include/G4MicroElecSiStructure.hh +++ b/source/materials/include/G4MicroElecSiStructure.hh @@ -22,8 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + // G4MicroElecSiStructure.hh, 2011/08/29 A.Valentin, M. Raine // // Based on the following publications @@ -37,37 +36,29 @@ // - Geant4 physics processes for microdosimetry simulation: // very low energy electromagnetic models for protons and // heavy ions in Si, NIM B, vol. 287, pp. 124-129, 2012. -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #ifndef G4MICROELECSISTRUCTURE_HH #define G4MICROELECSISTRUCTURE_HH 1 - + #include "globals.hh" + #include - class G4MicroElecSiStructure { -public: - + public: G4MicroElecSiStructure(); - + virtual ~G4MicroElecSiStructure() = default; - + G4double Energy(G4int level); G4int NumberOfLevels() { return nLevels; } - - -private: - - // Number of levels of silicon - G4int nLevels; + + private: + G4int nLevels{6}; // Number of levels of silicon std::vector energyConstant; - }; #endif diff --git a/source/materials/include/G4NistElementBuilder.hh b/source/materials/include/G4NistElementBuilder.hh index e6ebd0e3c79..85630ef41e6 100644 --- a/source/materials/include/G4NistElementBuilder.hh +++ b/source/materials/include/G4NistElementBuilder.hh @@ -37,51 +37,45 @@ // Author: V.Ivanchenko 21.11.2004 // // Modifications: -// 27.02.06 V.Ivanchenko Return m=0 if Z&N combination is out of NIST -// 27.02.06 V.Ivanchenko add GetAtomicMassAmu +// 27.02.06 V.Ivanchenko Return m=0 if Z&N combination is out of NIST +// 27.02.06 V.Ivanchenko add GetAtomicMassAmu // 17.10.06 V.Ivanchenko add GetAtomicMass and GetNistElementNames methods -// 02.05.07 V.Ivanchenko add GetNistFirstIsotopeN and GetNumberOfNistIsotopes -// 06.08.08 V.Ivanchenko add binding energy parameterisation and use isotope -// mass in G4 units -// -//---------------------------------------------------------------------------- +// 02.05.07 V.Ivanchenko add GetNistFirstIsotopeN and GetNumberOfNistIsotopes +// 06.08.08 V.Ivanchenko add binding energy parameterisation and use isotope +// mass in G4 units // // Class Description: // // Element data from the NIST DB on Atomic Weights and Isotope Compositions // http://physics.nist.gov/PhysRefData/Compositions/index.html // -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -#include -#include - -#include "globals.hh" #include "G4Element.hh" +#include "globals.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#include + +#include const G4int maxNumElements = 108; -const G4int maxAbundance = 3500; +const G4int maxAbundance = 3500; class G4NistElementBuilder { -public: - + public: explicit G4NistElementBuilder(G4int vb); ~G4NistElementBuilder() = default; // Find or build a G4Element by atomic number - inline G4Element* FindElement (G4int Z) const; - G4Element* FindOrBuildElement (G4int Z, G4bool buildIsotopes = true); + inline G4Element* FindElement(G4int Z) const; + G4Element* FindOrBuildElement(G4int Z, G4bool buildIsotopes = true); // Find or build a G4Element by symbol - G4Element* FindOrBuildElement (const G4String& symb, - G4bool buildIsotopes = true); + G4Element* FindOrBuildElement(const G4String& symb, G4bool buildIsotopes = true); // print element information - void PrintElement (G4int Z) const; + void PrintElement(G4int Z) const; - // Access to the vector of Geant4 predefined element names + // Access to the vector of Geant4 predefined element names const std::vector& GetElementNames() const; // Get atomic number by element symbol @@ -90,22 +84,22 @@ public: // Get atomic weight in atomic units by element symbol G4double GetAtomicMassAmu(const G4String& symb) const; - // Get atomic weight in atomic units - mean mass in units of amu of an atom - // with electron shell for the natural isotope composition + // Get atomic weight in atomic units - mean mass in units of amu of an atom + // with electron shell for the natural isotope composition inline G4double GetAtomicMassAmu(G4int Z) const; - // Get mass of isotope without electron shell in Geant4 energy units + // Get mass of isotope without electron shell in Geant4 energy units inline G4double GetIsotopeMass(G4int Z, G4int N) const; - // Get mass in Geant4 energy units of an atom of a particular isotope - // with the electron shell + // Get mass in Geant4 energy units of an atom of a particular isotope + // with the electron shell inline G4double GetAtomicMass(G4int Z, G4int N) const; // Get total ionisation energy of an atom inline G4double GetTotalElectronBindingEnergy(G4int Z) const; // Get natural isotope abundance - inline G4double GetIsotopeAbundance (G4int Z, G4int N) const; + inline G4double GetIsotopeAbundance(G4int Z, G4int N) const; // Get N for the first natural isotope inline G4int GetNistFirstIsotopeN(G4int Z) const; @@ -114,51 +108,47 @@ public: inline G4int GetNumberOfNistIsotopes(G4int Z) const; // Get max Z in the Geant4 element database - inline G4int GetMaxNumElements() const; + inline G4int GetMaxNumElements() const; inline void SetVerbose(G4int); -private: - + private: void Initialise(); - // Add element parameters to internal G4 database: + // Add element parameters to internal G4 database: // Z - atomic number, N - number of nucleons, A - atomic mass (amu), - // sigmaA - accuracy of mass in last digits, W - natural abundances (percent) - void AddElement(const G4String& symbol, G4int Z, G4int NumberOfIsotopes, - const G4int& N, const G4double& A, const G4double& sigmaA, - const G4double& W); + // sigmaA - accuracy of mass in last digits, W - natural abundances (percent) + void AddElement(const G4String& symbol, G4int Z, G4int NumberOfIsotopes, const G4int& N, + const G4double& A, const G4double& sigmaA, const G4double& W); // Build a G4Element from the G4 dataBase G4Element* BuildElement(G4int Z); -private: + private: + G4String elmSymbol[maxNumElements]; + G4double atomicMass[maxNumElements]; // amu + G4double bindingEnergy[maxNumElements]; + G4int nIsotopes[maxNumElements]; + G4int nFirstIsotope[maxNumElements]; + G4int idxIsotopes[maxNumElements]; - G4String elmSymbol [maxNumElements]; - G4double atomicMass [maxNumElements]; // amu - G4double bindingEnergy [maxNumElements]; - G4int nIsotopes [maxNumElements]; - G4int nFirstIsotope [maxNumElements]; - G4int idxIsotopes [maxNumElements]; + G4int elmIndex[maxNumElements]; - G4int elmIndex [maxNumElements]; + G4double massIsotopes[maxAbundance]; // G4 units + G4double sigMass[maxAbundance]; // G4 units + G4double relAbundance[maxAbundance]; - G4double massIsotopes [maxAbundance]; // G4 units - G4double sigMass [maxAbundance]; // G4 units - G4double relAbundance [maxAbundance]; + G4int index; + G4int verbose; - G4int index; - G4int verbose; - - std::vector elmNames; + std::vector elmNames; }; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... inline G4double G4NistElementBuilder::GetAtomicMassAmu(G4int Z) const { - return (Z>0 && Z 0 && Z < maxNumElements) ? atomicMass[Z] : 0.0; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -166,9 +156,11 @@ inline G4double G4NistElementBuilder::GetAtomicMassAmu(G4int Z) const inline G4double G4NistElementBuilder::GetIsotopeMass(G4int Z, G4int N) const { G4double mass = 0.0; - if(Z > 0 && Z < maxNumElements) { + if (Z > 0 && Z < maxNumElements) { G4int i = N - nFirstIsotope[Z]; - if(i >= 0 && i = 0 && i < nIsotopes[Z]) { + mass = massIsotopes[i + idxIsotopes[Z]]; + } } return mass; } @@ -178,11 +170,10 @@ inline G4double G4NistElementBuilder::GetIsotopeMass(G4int Z, G4int N) const inline G4double G4NistElementBuilder::GetAtomicMass(G4int Z, G4int N) const { G4double mass = 0.0; - if(Z > 0 && Z < maxNumElements) { + if (Z > 0 && Z < maxNumElements) { G4int i = N - nFirstIsotope[Z]; - if(i >= 0 && i = 0 && i < nIsotopes[Z]) { + mass = massIsotopes[i + idxIsotopes[Z]] + Z * CLHEP::electron_mass_c2 - bindingEnergy[Z]; } } return mass; @@ -190,22 +181,21 @@ inline G4double G4NistElementBuilder::GetAtomicMass(G4int Z, G4int N) const //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline -G4double G4NistElementBuilder::GetTotalElectronBindingEnergy(G4int Z) const +inline G4double G4NistElementBuilder::GetTotalElectronBindingEnergy(G4int Z) const { return (Z > 0 && Z < maxNumElements) ? bindingEnergy[Z] : 0.0; } - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline -G4double G4NistElementBuilder::GetIsotopeAbundance(G4int Z, G4int N) const +inline G4double G4NistElementBuilder::GetIsotopeAbundance(G4int Z, G4int N) const { G4double x = 0.0; - if(Z > 0 && Z < maxNumElements) { + if (Z > 0 && Z < maxNumElements) { G4int i = N - nFirstIsotope[Z]; - if(i >= 0 && i = 0 && i < nIsotopes[Z]) { + x = relAbundance[i + idxIsotopes[Z]]; + } } return x; } @@ -226,36 +216,26 @@ inline G4int G4NistElementBuilder::GetNumberOfNistIsotopes(G4int Z) const //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline -const std::vector& G4NistElementBuilder::GetElementNames() const +inline const std::vector& G4NistElementBuilder::GetElementNames() const { return elmNames; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline G4int G4NistElementBuilder::GetMaxNumElements() const -{ - return maxNumElements-1; -} +inline G4int G4NistElementBuilder::GetMaxNumElements() const { return maxNumElements - 1; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline void G4NistElementBuilder::SetVerbose(G4int val) -{ - verbose = val; -} +inline void G4NistElementBuilder::SetVerbose(G4int val) { verbose = val; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... inline G4Element* G4NistElementBuilder::FindElement(G4int Z) const { const G4ElementTable* theElementTable = G4Element::GetElementTable(); - return (Z > 0 && Z < maxNumElements && elmIndex[Z] >= 0) ? - (*theElementTable)[elmIndex[Z]] : nullptr; + return (Z > 0 && Z < maxNumElements && elmIndex[Z] >= 0) ? (*theElementTable)[elmIndex[Z]] + : nullptr; } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - - #endif diff --git a/source/materials/include/G4NistManager.hh b/source/materials/include/G4NistManager.hh index 8ebdef12512..128e9e29fe3 100644 --- a/source/materials/include/G4NistManager.hh +++ b/source/materials/include/G4NistManager.hh @@ -22,8 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + // ------------------------------------------------------------------- // // GEANT4 Class header file @@ -39,67 +38,56 @@ // 11.05.06 V.Ivanchneko add warning flag to FindMaterial method // 17.10.06 V.Ivanchneko add methods: GetAtomicMass, GetNistElementNames, // GetNistMaterialNames -// 02.05.07 V.Ivanchneko add GetNistFirstIsotopeN and GetNumberOfNistIsotopes +// 02.05.07 V.Ivanchneko add GetNistFirstIsotopeN and GetNumberOfNistIsotopes // 28.07.07 V.Ivanchneko make simple methods inline // 28.10.07 V.Ivanchneko add state, T, P to maetrial build -// 29.04.10 V.Ivanchneko add GetMeanIonisationEnergy method -// 01.11.10 V.Ivanchneko add G4Pow for fast computations +// 29.04.10 V.Ivanchneko add GetMeanIonisationEnergy method +// 01.11.10 V.Ivanchneko add G4Pow for fast computations // 09.02.12 P.Gumplinger add ConstructNewIdealGasMaterial // // Class Description: // // A utility static class // - -// ------------------------------------------------------------------- -// -// Class Description: -// // Element data from the NIST DB on Atomic Weights and Isotope Compositions // http://physics.nist.gov/PhysRefData/Compositions/index.html // // ------------------------------------------------------------------- -// #ifndef G4NistManager_h #define G4NistManager_h 1 -#include -#include - -#include "globals.hh" +#include "G4ICRU90StoppingData.hh" #include "G4Material.hh" #include "G4NistElementBuilder.hh" #include "G4NistMaterialBuilder.hh" -#include "G4ICRU90StoppingData.hh" #include "G4Pow.hh" +#include "globals.hh" -class G4NistMessenger; +#include -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... +#include + +class G4NistMessenger; class G4NistManager { - -public: - + public: static G4NistManager* Instance(); ~G4NistManager(); // Get G4Element by index // inline G4Element* GetElement(size_t index) const; - + // Find or build G4Element by atomic number // inline G4Element* FindElement(G4int Z) const; - inline G4Element* FindOrBuildElement(G4int Z, G4bool isotopes=true); - + inline G4Element* FindOrBuildElement(G4int Z, G4bool isotopes = true); + // Find or build G4Element by symbol // - inline G4Element* FindOrBuildElement(const G4String& symb, - G4bool isotopes=true); + inline G4Element* FindOrBuildElement(const G4String& symb, G4bool isotopes = true); // Get number of elements // @@ -109,22 +97,22 @@ public: // inline G4int GetZ(const G4String& symb) const; - // Get atomic weight by element symbol - mean mass in units of amu of - // an atom with electron shell for the natural isotope composition + // Get atomic weight by element symbol - mean mass in units of amu of + // an atom with electron shell for the natural isotope composition // inline G4double GetAtomicMassAmu(const G4String& symb) const; - // Get atomic weight in atomic units - mean mass in units of amu of an atom - // with electron shell for the natural isotope composition + // Get atomic weight in atomic units - mean mass in units of amu of an atom + // with electron shell for the natural isotope composition // inline G4double GetAtomicMassAmu(G4int Z) const; - // Get mass of isotope without electron shell in Geant4 energy units + // Get mass of isotope without electron shell in Geant4 energy units // inline G4double GetIsotopeMass(G4int Z, G4int N) const; - // Get mass in Geant4 energy units of an atom of a particular isotope - // with the electron shell + // Get mass in Geant4 energy units of an atom of a particular isotope + // with the electron shell // inline G4double GetAtomicMass(G4int Z, G4int N) const; @@ -154,90 +142,68 @@ public: // Print G4Element by name, if "all" - print all G4Elements // - void PrintG4Element(const G4String&) const; + void PrintG4Element(const G4String&) const; - // Access to the vector of Geant4 predefined element names + // Access to the vector of Geant4 predefined element names // inline const std::vector& GetNistElementNames() const; - // Access mean ionisation energy for atoms (Z <= 98) by its index - // + // Access mean ionisation energy for atoms (Z <= 98) by its index + // inline G4double GetMeanIonisationEnergy(G4int Z) const; - // Access nominal density by atomic number for simple materials and - // by the index for other NIST materials + // Access nominal density by atomic number for simple materials and + // by the index for other NIST materials // inline G4double GetNominalDensity(G4int Z) const; - // Get G4Material by index + // Get G4Material by index // inline G4Material* GetMaterial(size_t index) const; - + // Find or build a G4Material by name, from the Geant4 dataBase // - inline G4Material* FindMaterial(const G4String& name) const; - inline G4Material* FindOrBuildMaterial(const G4String& name, - G4bool isotopes=true, - G4bool warning=false); + inline G4Material* FindMaterial(const G4String& name) const; + inline G4Material* FindOrBuildMaterial( + const G4String& name, G4bool isotopes = true, G4bool warning = false); // Find or build a simple material via atomic number // - inline G4Material* FindSimpleMaterial(G4int Z) const; - inline G4Material* FindOrBuildSimpleMaterial(G4int Z, - G4bool warning=false); - + inline G4Material* FindSimpleMaterial(G4int Z) const; + inline G4Material* FindOrBuildSimpleMaterial(G4int Z, G4bool warning = false); + // Build G4Material with user defined name and density on base // of a material from Geant4 dataBase // - G4Material* BuildMaterialWithNewDensity(const G4String& name, - const G4String& basename, - G4double density = 0.0, - G4double temp = NTP_Temperature, - G4double pres = CLHEP::STP_Pressure); + G4Material* BuildMaterialWithNewDensity(const G4String& name, const G4String& basename, + G4double density = 0.0, G4double temp = NTP_Temperature, G4double pres = CLHEP::STP_Pressure); // Construct a G4Material from scratch by atome count // temperature and pressure should be consistent with the density - // - inline G4Material* ConstructNewMaterial( - const G4String& name, - const std::vector& elm, - const std::vector& nbAtoms, - G4double dens, - G4bool isotopes=true, - G4State state = kStateSolid, - G4double temp = NTP_Temperature, - G4double pressure = CLHEP::STP_Pressure); + // + inline G4Material* ConstructNewMaterial(const G4String& name, const std::vector& elm, + const std::vector& nbAtoms, G4double dens, G4bool isotopes = true, + G4State state = kStateSolid, G4double temp = NTP_Temperature, + G4double pressure = CLHEP::STP_Pressure); // Construct a G4Material from scratch by fraction mass // temperature and pressure should be consistent with the density - // - inline G4Material* ConstructNewMaterial( - const G4String& name, - const std::vector& elm, - const std::vector& weight, - G4double dens, - G4bool isotopes=true, - G4State state = kStateSolid, - G4double temp = NTP_Temperature, - G4double pressure = CLHEP::STP_Pressure); + // + inline G4Material* ConstructNewMaterial(const G4String& name, const std::vector& elm, + const std::vector& weight, G4double dens, G4bool isotopes = true, + G4State state = kStateSolid, G4double temp = NTP_Temperature, + G4double pressure = CLHEP::STP_Pressure); // Construct a gas G4Material from scratch by atome count - // - inline G4Material* ConstructNewGasMaterial(const G4String& name, - const G4String& nameNist, - G4double temp, - G4double pres, - G4bool isotopes=true); + // + inline G4Material* ConstructNewGasMaterial(const G4String& name, const G4String& nameNist, + G4double temp, G4double pres, G4bool isotopes = true); // Construct an ideal gas G4Material from scratch by atom count // - inline G4Material* ConstructNewIdealGasMaterial( - const G4String& name, - const std::vector& elm, - const std::vector& nbAtoms, - G4bool isotopes = true, - G4double temp = NTP_Temperature, - G4double pressure = CLHEP::STP_Pressure); + inline G4Material* ConstructNewIdealGasMaterial(const G4String& name, + const std::vector& elm, const std::vector& nbAtoms, G4bool isotopes = true, + G4double temp = NTP_Temperature, G4double pressure = CLHEP::STP_Pressure); // enable/disable density effect calculator by material name // @@ -250,7 +216,7 @@ public: // Get number of G4Materials // inline size_t GetNumberOfMaterials() const; - + inline G4int GetVerbose() const; void SetVerbose(G4int); @@ -288,83 +254,65 @@ public: G4ICRU90StoppingData* GetICRU90StoppingData(); -private: - + private: explicit G4NistManager(); static G4NistManager* instance; - - std::vector elements; + + std::vector elements; std::vector materials; - G4ICRU90StoppingData* fICRU90; - G4NistElementBuilder* elmBuilder; + G4ICRU90StoppingData* fICRU90; + G4NistElementBuilder* elmBuilder; G4NistMaterialBuilder* matBuilder; - G4NistMessenger* messenger; - G4Pow* g4pow; + G4NistMessenger* messenger; + G4Pow* g4pow; G4double POWERA27[101]; G4double LOGAZ[101]; - size_t nElements; - size_t nMaterials; - G4int verbose; + size_t nElements; + size_t nMaterials; + G4int verbose; }; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline size_t G4NistManager::GetNumberOfMaterials() const -{ - return nMaterials; -} +inline size_t G4NistManager::GetNumberOfMaterials() const { return nMaterials; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... inline G4Element* G4NistManager::GetElement(size_t index) const { const G4ElementTable* theElementTable = G4Element::GetElementTable(); - return (index < theElementTable->size()) ? (*theElementTable)[index] : nullptr; + return (index < theElementTable->size()) ? (*theElementTable)[index] : nullptr; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline -G4Element* G4NistManager::FindElement(G4int Z) const -{ - return elmBuilder->FindElement(Z); -} +inline G4Element* G4NistManager::FindElement(G4int Z) const { return elmBuilder->FindElement(Z); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline -G4Element* G4NistManager::FindOrBuildElement(G4int Z, G4bool isotopes) +inline G4Element* G4NistManager::FindOrBuildElement(G4int Z, G4bool isotopes) { return elmBuilder->FindOrBuildElement(Z, isotopes); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline -G4Element* G4NistManager::FindOrBuildElement(const G4String& symb, - G4bool isotopes) +inline G4Element* G4NistManager::FindOrBuildElement(const G4String& symb, G4bool isotopes) { return elmBuilder->FindOrBuildElement(symb, isotopes); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline size_t G4NistManager::GetNumberOfElements() const -{ - return nElements; -} +inline size_t G4NistManager::GetNumberOfElements() const { return nElements; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline G4int G4NistManager::GetZ(const G4String& symb) const -{ - return elmBuilder->GetZ(symb); -} +inline G4int G4NistManager::GetZ(const G4String& symb) const { return elmBuilder->GetZ(symb); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -382,56 +330,49 @@ inline G4double G4NistManager::GetAtomicMassAmu(G4int Z) const //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline -G4double G4NistManager::GetIsotopeMass(G4int Z, G4int N) const +inline G4double G4NistManager::GetIsotopeMass(G4int Z, G4int N) const { return elmBuilder->GetIsotopeMass(Z, N); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline -G4double G4NistManager::GetAtomicMass(G4int Z, G4int N) const +inline G4double G4NistManager::GetAtomicMass(G4int Z, G4int N) const { return elmBuilder->GetAtomicMass(Z, N); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline -G4double G4NistManager::GetTotalElectronBindingEnergy(G4int Z) const +inline G4double G4NistManager::GetTotalElectronBindingEnergy(G4int Z) const { return elmBuilder->GetTotalElectronBindingEnergy(Z); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline -G4double G4NistManager::GetIsotopeAbundance(G4int Z, G4int N) const +inline G4double G4NistManager::GetIsotopeAbundance(G4int Z, G4int N) const { return elmBuilder->GetIsotopeAbundance(Z, N); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline -G4int G4NistManager::GetNistFirstIsotopeN(G4int Z) const +inline G4int G4NistManager::GetNistFirstIsotopeN(G4int Z) const { return elmBuilder->GetNistFirstIsotopeN(Z); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline -G4int G4NistManager::GetNumberOfNistIsotopes(G4int Z) const +inline G4int G4NistManager::GetNumberOfNistIsotopes(G4int Z) const { return elmBuilder->GetNumberOfNistIsotopes(Z); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline -const std::vector& G4NistManager::GetNistElementNames() const +inline const std::vector& G4NistManager::GetNistElementNames() const { return elmBuilder->GetElementNames(); } @@ -452,10 +393,7 @@ inline G4double G4NistManager::GetNominalDensity(G4int Z) const //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline void G4NistManager::PrintElement(G4int Z) const -{ - elmBuilder->PrintElement(Z); -} +inline void G4NistManager::PrintElement(G4int Z) const { elmBuilder->PrintElement(Z); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -467,99 +405,70 @@ inline G4Material* G4NistManager::GetMaterial(size_t index) const //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline G4int G4NistManager::GetVerbose() const -{ - return verbose; -} +inline G4int G4NistManager::GetVerbose() const { return verbose; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline -G4Material* G4NistManager::FindMaterial(const G4String& name) const +inline G4Material* G4NistManager::FindMaterial(const G4String& name) const { - return matBuilder->FindMaterial(name); + return matBuilder->FindMaterial(name); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline -G4Material* G4NistManager::FindOrBuildMaterial(const G4String& name, - G4bool, G4bool warning) +inline G4Material* G4NistManager::FindOrBuildMaterial(const G4String& name, G4bool, G4bool warning) { return matBuilder->FindOrBuildMaterial(name, warning); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline -G4Material* G4NistManager::FindSimpleMaterial(G4int Z) const +inline G4Material* G4NistManager::FindSimpleMaterial(G4int Z) const { - return matBuilder->FindSimpleMaterial(Z); + return matBuilder->FindSimpleMaterial(Z); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline -G4Material* G4NistManager::FindOrBuildSimpleMaterial(G4int Z, G4bool warning) +inline G4Material* G4NistManager::FindOrBuildSimpleMaterial(G4int Z, G4bool warning) { - return matBuilder->FindOrBuildSimpleMaterial(Z, warning); + return matBuilder->FindOrBuildSimpleMaterial(Z, warning); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline G4Material* G4NistManager::ConstructNewMaterial( - const G4String& name, - const std::vector& elm, - const std::vector& nbAtoms, - G4double dens, - G4bool, - G4State state, - G4double T, - G4double P) +inline G4Material* G4NistManager::ConstructNewMaterial(const G4String& name, + const std::vector& elm, const std::vector& nbAtoms, G4double dens, G4bool, + G4State state, G4double T, G4double P) { - return - matBuilder->ConstructNewMaterial(name,elm,nbAtoms,dens,state,T,P); + return matBuilder->ConstructNewMaterial(name, elm, nbAtoms, dens, state, T, P); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline G4Material* G4NistManager::ConstructNewMaterial( - const G4String& name, - const std::vector& elm, - const std::vector& w, - G4double dens, - G4bool, - G4State state, - G4double T, - G4double P) +inline G4Material* G4NistManager::ConstructNewMaterial(const G4String& name, + const std::vector& elm, const std::vector& w, G4double dens, G4bool, + G4State state, G4double T, G4double P) { - return matBuilder->ConstructNewMaterial(name,elm,w,dens,state,T,P); + return matBuilder->ConstructNewMaterial(name, elm, w, dens, state, T, P); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... inline G4Material* G4NistManager::ConstructNewGasMaterial( - const G4String& name, - const G4String& nameNist, - G4double temp, G4double pres, - G4bool) + const G4String& name, const G4String& nameNist, G4double temp, G4double pres, G4bool) { - return matBuilder->ConstructNewGasMaterial(name,nameNist,temp,pres); + return matBuilder->ConstructNewGasMaterial(name, nameNist, temp, pres); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline G4Material* G4NistManager::ConstructNewIdealGasMaterial( - const G4String& name, - const std::vector& elm, - const std::vector& nbAtoms, - G4bool, - G4double T, - G4double P) +inline G4Material* G4NistManager::ConstructNewIdealGasMaterial(const G4String& name, + const std::vector& elm, const std::vector& nbAtoms, G4bool, G4double T, + G4double P) { - return - matBuilder->ConstructNewIdealGasMaterial(name,elm,nbAtoms,T,P); + return matBuilder->ConstructNewIdealGasMaterial(name, elm, nbAtoms, T, P); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -571,25 +480,18 @@ inline void G4NistManager::ListMaterials(const G4String& list) const //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline -const std::vector& G4NistManager::GetNistMaterialNames() const +inline const std::vector& G4NistManager::GetNistMaterialNames() const { return matBuilder->GetMaterialNames(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline G4double G4NistManager::GetZ13(G4double A) const -{ - return g4pow->A13(A); -} +inline G4double G4NistManager::GetZ13(G4double A) const { return g4pow->A13(A); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline G4double G4NistManager::GetZ13(G4int Z) const -{ - return g4pow->Z13(Z); -} +inline G4double G4NistManager::GetZ13(G4int Z) const { return g4pow->Z13(Z); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -600,10 +502,7 @@ inline G4double G4NistManager::GetA27(G4int Z) const //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -inline G4double G4NistManager::GetLOGZ(G4int Z) const -{ - return g4pow->logZ(Z); -} +inline G4double G4NistManager::GetLOGZ(G4int Z) const { return g4pow->logZ(Z); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -615,4 +514,3 @@ inline G4double G4NistManager::GetLOGAMU(G4int Z) const //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #endif - diff --git a/source/materials/include/G4NistMaterialBuilder.hh b/source/materials/include/G4NistMaterialBuilder.hh index 1d0296e5f22..57d57aff21f 100644 --- a/source/materials/include/G4NistMaterialBuilder.hh +++ b/source/materials/include/G4NistMaterialBuilder.hh @@ -53,87 +53,61 @@ // http://physics.nist.gov/PhysRefData/Compositions/index.html // -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#include "G4Material.hh" +#include "globals.hh" -#include #include -#include "globals.hh" -#include "G4Material.hh" - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#include class G4NistElementBuilder; class G4NistMaterialBuilder { -public: + public: + G4NistMaterialBuilder(G4NistElementBuilder*, G4int verb = 0); - G4NistMaterialBuilder(G4NistElementBuilder*, G4int verb=0); - ~G4NistMaterialBuilder() = default; - + // Find or build a G4Material by name, from dataBase - // - inline G4Material* FindMaterial (const G4String& name) const; - G4Material* FindOrBuildMaterial (const G4String& name, - G4bool warning = true); - + inline G4Material* FindMaterial(const G4String& name) const; + G4Material* FindOrBuildMaterial(const G4String& name, G4bool warning = true); + // Find or build a simple material via atomic number - // inline G4Material* FindSimpleMaterial(G4int Z) const; G4Material* FindOrBuildSimpleMaterial(G4int Z, G4bool warning); // construct a G4Material from scratch by atome count - // - G4Material* ConstructNewMaterial (const G4String& name, - const std::vector& elm, - const std::vector& nbAtoms, - G4double dens, - G4State state = kStateSolid, - G4double temp = NTP_Temperature, - G4double pressure = CLHEP::STP_Pressure); + G4Material* ConstructNewMaterial(const G4String& name, const std::vector& elm, + const std::vector& nbAtoms, G4double dens, G4State state = kStateSolid, + G4double temp = NTP_Temperature, G4double pressure = CLHEP::STP_Pressure); // construct a G4Material from scratch by fraction mass - // - G4Material* ConstructNewMaterial (const G4String& name, - const std::vector& elm, - const std::vector& weight, - G4double dens, - G4State state = kStateSolid, - G4double temp = NTP_Temperature, - G4double pressure = CLHEP::STP_Pressure); - + G4Material* ConstructNewMaterial(const G4String& name, const std::vector& elm, + const std::vector& weight, G4double dens, G4State state = kStateSolid, + G4double temp = NTP_Temperature, G4double pressure = CLHEP::STP_Pressure); // construct a gas G4Material from scratch by atome count - // - G4Material* ConstructNewGasMaterial(const G4String& name, - const G4String& nameDB, - G4double temp, G4double pres); + G4Material* ConstructNewGasMaterial( + const G4String& name, const G4String& nameDB, G4double temp, G4double pres); // Construct an ideal gas G4Material from scratch by atom count - // - G4Material* ConstructNewIdealGasMaterial(const G4String& name, - const std::vector& elm, - const std::vector& nbAtoms, - G4double temp = NTP_Temperature, - G4double pressure = CLHEP::STP_Pressure); - + G4Material* ConstructNewIdealGasMaterial(const G4String& name, const std::vector& elm, + const std::vector& nbAtoms, G4double temp = NTP_Temperature, + G4double pressure = CLHEP::STP_Pressure); + // verbosity level defined by G4NistManager - // void SetVerbose(G4int val); // cout predefined materials: // "simple" - only pure materials in basic state (Z = 1, ..., 98) // "compound" - NIST compounds // "hep" - HEP materials and compounds - // "biochemical" - bio-chemical materials + // "biochemical" - bio-chemical materials // "all" - all - // void ListMaterials(const G4String&) const; // cout lists of predefined materials - // void ListNistSimpleMaterials() const; void ListNistCompoundMaterials() const; void ListHepMaterials() const; @@ -141,11 +115,9 @@ public: void ListBioChemicalMaterials() const; // access to the list of names of Geant4 predefined materials - // const std::vector& GetMaterialNames() const; // access to the NIST mean ionisation potentials and nominal densities - // inline G4double GetMeanIonisationEnergy(G4int index) const; inline G4double GetNominalDensity(G4int index) const; @@ -154,8 +126,7 @@ public: G4NistMaterialBuilder(const G4NistMaterialBuilder&) = delete; const G4NistMaterialBuilder& operator=(const G4NistMaterialBuilder&) = delete; -private: - + private: void Initialise(); void NistSimpleMaterials(); void NistCompoundMaterials(); @@ -166,18 +137,17 @@ private: // add parameters of material from NIST DB to internal vectors // density in g/cm3, mean ionisation potential in eV - // - void AddMaterial(const G4String& nameMat, G4double dens, G4int Z=0, - G4double pot=0.0, G4int ncomp=1, - G4State=kStateSolid, G4bool stp = true); + // + void AddMaterial(const G4String& nameMat, G4double dens, G4int Z = 0, G4double pot = 0.0, + G4int ncomp = 1, G4State = kStateSolid, G4bool stp = true); void AddGas(const G4String& nameMat, G4double T, G4double P); void AddElementByWeightFraction(G4int Z, G4double); - void AddElementByAtomCount (G4int Z, G4int); + void AddElementByAtomCount(G4int Z, G4int); void AddElementByWeightFraction(const G4String& name, G4double); - void AddElementByAtomCount (const G4String& name, G4int); + void AddElementByAtomCount(const G4String& name, G4int); // build a G4Material from dataBase G4Material* BuildNistMaterial(const G4String& matname, G4bool warning); @@ -186,74 +156,68 @@ private: void DumpElm(G4int) const; void DumpMix(G4int) const; -private: - - G4NistElementBuilder* elmBuilder; - - G4int verbose; - G4int nMaterials; - G4int nComponents; - G4int nCurrent; - G4int nElementary; - G4int nNIST; - G4int nHEP; - G4int nSpace; - - std::vector names; - std::vector chFormulas; - - std::vector densities; - std::vector ionPotentials; - std::vector states; - std::vector fractions; - std::vector atomCount; - std::vector components; - std::vector indexes; - std::vector elements; - std::vector matIndex; - std::vector STP; - - std::vector idxGas; - std::vector gasTemperature; - std::vector gasPressure; + private: + G4NistElementBuilder* elmBuilder; + + G4int verbose; + G4int nMaterials{0}; + G4int nComponents{0}; + G4int nCurrent{0}; + G4int nElementary; + G4int nNIST; + G4int nHEP; + G4int nSpace; + + std::vector names; + std::vector chFormulas; + + std::vector densities; + std::vector ionPotentials; + std::vector states; + std::vector fractions; + std::vector atomCount; + std::vector components; + std::vector indexes; + std::vector elements; + std::vector matIndex; + std::vector STP; + + std::vector idxGas; + std::vector gasTemperature; + std::vector gasPressure; }; -inline const std::vector& -G4NistMaterialBuilder::GetMaterialNames() const +inline const std::vector& G4NistMaterialBuilder::GetMaterialNames() const { return names; } -inline G4double -G4NistMaterialBuilder::GetMeanIonisationEnergy(G4int index) const +inline G4double G4NistMaterialBuilder::GetMeanIonisationEnergy(G4int index) const { - return (index >= 0 && index < nMaterials) ? ionPotentials[index] : 10.0*index; + return (index >= 0 && index < nMaterials) ? ionPotentials[index] : 10.0 * index; } -inline G4double -G4NistMaterialBuilder::GetNominalDensity(G4int index) const +inline G4double G4NistMaterialBuilder::GetNominalDensity(G4int index) const { return (index >= 0 && index < nMaterials) ? densities[index] : 0.0; } -inline G4Material* -G4NistMaterialBuilder::FindMaterial(const G4String& name) const +inline G4Material* G4NistMaterialBuilder::FindMaterial(const G4String& name) const { const G4MaterialTable* theMaterialTable = G4Material::GetMaterialTable(); G4Material* ptr = nullptr; - for(auto & mat : *theMaterialTable) { - if(name == mat->GetName()) { + for (auto& mat : *theMaterialTable) { + if (name == mat->GetName()) { ptr = mat; break; - } + } } return ptr; } -inline G4Material* -G4NistMaterialBuilder::FindSimpleMaterial(G4int Z) const +inline G4Material* G4NistMaterialBuilder::FindSimpleMaterial(G4int Z) const { - return (Z>0 && Z 0 && Z < nElementary) ? FindMaterial(names[Z]) : nullptr; } #endif diff --git a/source/materials/include/G4NistMessenger.hh b/source/materials/include/G4NistMessenger.hh index 41f1859e2ed..abd68bb6b9d 100644 --- a/source/materials/include/G4NistMessenger.hh +++ b/source/materials/include/G4NistMessenger.hh @@ -22,8 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + // File name: G4NistMessenger // // Author: Vladimir Ivanchenko @@ -57,53 +56,42 @@ // printElement name output element parameters // printMaterial name output material parameters -// ------------------------------------------------------------------- -// - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #ifndef G4NistMessenger_h #define G4NistMessenger_h 1 -#include "globals.hh" #include "G4UImessenger.hh" +#include "globals.hh" class G4NistManager; class G4UIdirectory; class G4UIcmdWithAnInteger; class G4UIcmdWithAString; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -class G4NistMessenger: public G4UImessenger +class G4NistMessenger : public G4UImessenger { -public: - - explicit G4NistMessenger(G4NistManager* ); + public: + explicit G4NistMessenger(G4NistManager*); ~G4NistMessenger() override; void SetNewValue(G4UIcommand*, G4String) final; -private: + private: + G4NistManager* manager; - G4NistManager* manager; - - G4UIdirectory* matDir; - G4UIcmdWithAnInteger* verCmd; - - G4UIdirectory* nistDir; - G4UIcmdWithAString* prtElmCmd; - G4UIcmdWithAnInteger* przElmCmd; - G4UIcmdWithAString* lisMatCmd; - - G4UIdirectory* g4Dir; - G4UIcmdWithAString* g4ElmCmd; - G4UIcmdWithAString* g4MatCmd; - G4UIcmdWithAString* g4DensCmd; - G4UIcmdWithAString* densCmd; - G4UIcmdWithAString* adensCmd; + G4UIdirectory* matDir; + G4UIcmdWithAnInteger* verCmd; + + G4UIdirectory* nistDir; + G4UIcmdWithAString* prtElmCmd; + G4UIcmdWithAnInteger* przElmCmd; + G4UIcmdWithAString* lisMatCmd; + + G4UIdirectory* g4Dir; + G4UIcmdWithAString* g4ElmCmd; + G4UIcmdWithAString* g4MatCmd; + G4UIcmdWithAString* g4DensCmd; + G4UIcmdWithAString* densCmd; + G4UIcmdWithAString* adensCmd; }; #endif - diff --git a/source/materials/include/G4OpticalMaterialProperties.hh b/source/materials/include/G4OpticalMaterialProperties.hh index ee3b607315d..6369edc48d2 100644 --- a/source/materials/include/G4OpticalMaterialProperties.hh +++ b/source/materials/include/G4OpticalMaterialProperties.hh @@ -22,7 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// + // ------------------------------------------------------------------- // // File name: G4OpticalMaterialProperties.hh @@ -49,14 +49,14 @@ #include "G4MaterialPropertyVector.hh" #include + #include namespace G4OpticalMaterialProperties { void ConvertToEnergy(std::vector& wavelength) { - for(auto& val : wavelength) - { + for (auto& val : wavelength) { val = CLHEP::h_Planck * CLHEP::c_light / (val / 1000.); } } @@ -64,11 +64,11 @@ void ConvertToEnergy(std::vector& wavelength) G4MaterialPropertyVector* GetRefractiveIndex(const G4String& material) { G4MaterialPropertyVector* v = nullptr; - if(material == "Air") - { + if (material == "Air") { // P. E. Ciddor. Refractive index of air: new equations for the visible // and near infrared, Appl. Optics 35, 1566-1573 (1996) via // refractiveindex.info + // clang-format off std::vector wl = { 1.69, 1.675, 1.661, 1.646, 1.632, 1.617, 1.602, 1.588, 1.573, 1.559, 1.544, 1.529, 1.515, 1.5, 1.486, 1.471, 1.456, 1.442, @@ -112,15 +112,15 @@ G4MaterialPropertyVector* GetRefractiveIndex(const G4String& material) 1.0002933286388, 1.000295937727, 1.0002991101754, 1.0003030361805, 1.0003080029552 }; - + // clang-format on ConvertToEnergy(wl); v = new G4MaterialPropertyVector(wl, ri); } - else if(material == "Water") - { + else if (material == "Water") { // M. Daimon and A. Masumura. Measurement of the refractive index of // distilled water from the near-infrared region to the ultraviolet // region, Appl. Opt. 46, 3811-3820 (2007) via refractiveindex.info + // clang-format off std::vector wl = { 1.129, 1.12, 1.11, 1.101, 1.091, 1.082, 1.072, 1.063, 1.053, 1.044, 1.034, 1.025, 1.015, 1.006, 0.9964, 0.987, 0.9775, 0.968, @@ -164,15 +164,15 @@ G4MaterialPropertyVector* GetRefractiveIndex(const G4String& material) 1.399064758142, 1.4093866965284, 1.422764121467, 1.4407913910231, 1.4679465862259 }; - + // clang-format on ConvertToEnergy(wl); v = new G4MaterialPropertyVector(wl, ri); } - else if(material == "PMMA") - { + else if (material == "PMMA") { // G. Beadie, M. Brindza, R. A. Flynn, A. Rosenberg, and J. S. Shirk. // Refractive index measurements of poly(methyl methacrylate) (PMMA) from // 0.4-1.6 μm, Appl. Opt. 54, F139-F143 (2015) via refractiveindex.info + // clang-format off std::vector wl = { 1.620, 1.608, 1.596, 1.584, 1.572, 1.560, 1.548, 1.536, 1.524, 1.512, 1.500, 1.488, 1.476, 1.464, 1.452, 1.440, 1.428, 1.416, 1.404, 1.392, @@ -215,19 +215,20 @@ G4MaterialPropertyVector* GetRefractiveIndex(const G4String& material) 1.4998800687986, 1.5009965515508, 1.5022113611478, 1.5035296480805, 1.5049521933717 }; + // clang-format on ConvertToEnergy(wl); v = new G4MaterialPropertyVector(wl, ri); } - else if(material == "Fused Silica") - { + else if (material == "Fused Silica") { // 1) I. H. Malitson. Interspecimen comparison of the refractive index of // fused silica, J. Opt. Soc. Am. 55, 1205-1208 (1965) 2) C. Z. Tan. - //Determination of refractive index of silica glass for infrared - //wavelengths by IR spectroscopy, J. Non-Cryst. Solids 223, 158-163 (1998) + // Determination of refractive index of silica glass for infrared + // wavelengths by IR spectroscopy, J. Non-Cryst. Solids 223, 158-163 (1998) // Sellmeier formula is reported in Ref. 1 for the 0.21-3.71 um wavelength // range. Ref. 2 verifies the validity of the formula up to 6.7 um. // via refractiveindex.info + // clang-format off std::vector wl = { 6.700, 6.472, 6.252, 6.039, 5.833, 5.635, 5.443, 5.258, 5.079, 4.906, 4.739, 4.578, 4.422, 4.271, 4.126, 3.986, 3.850, 3.719, @@ -271,17 +272,16 @@ G4MaterialPropertyVector* GetRefractiveIndex(const G4String& material) 1.5125721155558, 1.5180417677275, 1.5240789072975, 1.530846431063, 1.5383576204905 }; + // clang-format on ConvertToEnergy(wl); v = new G4MaterialPropertyVector(wl, ri); } - else - { + else { G4ExceptionDescription ed; ed << "Material " << material << " not found."; - G4Exception("G4OpticalMaterialProperties::GetRefractiveIndex", "mat400", - FatalException, ed); + G4Exception("G4OpticalMaterialProperties::GetRefractiveIndex", "mat400", FatalException, ed); return nullptr; } @@ -290,19 +290,14 @@ G4MaterialPropertyVector* GetRefractiveIndex(const G4String& material) G4MaterialPropertyVector* GetProperty(const G4String& key, const G4String& mat) { - if (key == "RINDEX") - { + if (key == "RINDEX") { return GetRefractiveIndex(mat); } - else - { - G4ExceptionDescription ed; - ed << "Property name " << key - << " doesn't exist in optical properties data table."; - G4Exception("G4OpticalMaterialProperties::GetProperty", "mat401", - FatalException, ed); - return nullptr; - } + + G4ExceptionDescription ed; + ed << "Property name " << key << " doesn't exist in optical properties data table."; + G4Exception("G4OpticalMaterialProperties::GetProperty", "mat401", FatalException, ed); + return nullptr; } } // namespace G4OpticalMaterialProperties diff --git a/source/materials/include/G4OpticalSurface.hh b/source/materials/include/G4OpticalSurface.hh index d97aa830db0..51ee163620d 100644 --- a/source/materials/include/G4OpticalSurface.hh +++ b/source/materials/include/G4OpticalSurface.hh @@ -22,10 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// -// + //////////////////////////////////////////////////////////////////////// // G4OpticalSurface Definition //////////////////////////////////////////////////////////////////////// @@ -38,21 +35,20 @@ // Updated: 1999-10-29 add method and class descriptors // 2017-02-24 Mariele Stockhoff add DAVIS model // +// Class Description: +// A optical surface class for use in the G4OpBoundaryProcess class. +// Contains the enumerations: G4OpticalSurfaceFinish, G4OpticalSurfaceType, +// and G4OpticalSurfaceModel. //////////////////////////////////////////////////////////////////////// #ifndef G4OpticalSurface_h #define G4OpticalSurface_h 1 -#include "G4Types.hh" #include "G4Physics2DVector.hh" #include "G4SurfaceProperty.hh" +#include "G4Types.hh" -// Class Description: -// A optical surface class for use in the G4OpBoundaryProcess class. -// Contains the enumerations: G4OpticalSurfaceFinish, G4OpticalSurfaceType, -// and G4OpticalSurfaceModel. -// Class Description - End: - +// clang-format off enum G4OpticalSurfaceFinish { polished, // smooth perfectly polished surface @@ -116,125 +112,129 @@ enum G4OpticalSurfaceModel dichroic // dichroic filter }; +// clang-format on + class G4MaterialPropertiesTable; class G4OpticalSurface : public G4SurfaceProperty { public: + // Constructor of an optical surface object. + G4OpticalSurface(const G4String& name, G4OpticalSurfaceModel model = glisur, + G4OpticalSurfaceFinish finish = polished, G4SurfaceType type = dielectric_dielectric, + G4double value = 1.0); + + ~G4OpticalSurface() override; + G4OpticalSurface(const G4OpticalSurface& right); G4OpticalSurface& operator=(const G4OpticalSurface& right); G4bool operator==(const G4OpticalSurface& right) const; G4bool operator!=(const G4OpticalSurface& right) const; - G4OpticalSurface(const G4String& name, G4OpticalSurfaceModel model = glisur, - G4OpticalSurfaceFinish finish = polished, - G4SurfaceType type = dielectric_dielectric, - G4double value = 1.0); - // Constructor of an optical surface object. - - ~G4OpticalSurface() override; - void SetType(const G4SurfaceType& type) override; - inline G4OpticalSurfaceFinish GetFinish() const { return theFinish; } // Returns the optical surface finish. - void SetFinish(const G4OpticalSurfaceFinish); + inline G4OpticalSurfaceFinish GetFinish() const { return theFinish; } + // Sets the optical surface finish. + void SetFinish(const G4OpticalSurfaceFinish); - inline G4OpticalSurfaceModel GetModel() const { return theModel; } // Returns the optical surface model used. - inline void SetModel(const G4OpticalSurfaceModel model) { theModel = model; } + inline G4OpticalSurfaceModel GetModel() const { return theModel; } + // Sets the optical surface model to be followed. + inline void SetModel(const G4OpticalSurfaceModel model) { theModel = model; } - inline G4double GetSigmaAlpha() const { return sigma_alpha; } // Returns an unified model surface parameter. - inline void SetSigmaAlpha(const G4double s_a) { sigma_alpha = s_a; } + inline G4double GetSigmaAlpha() const { return sigma_alpha; } + // Sets an unified model surface parameter. + inline void SetSigmaAlpha(const G4double s_a) { sigma_alpha = s_a; } - G4double GetPolish() const { return polish; } // Returns the optical surface polish type. - inline void SetPolish(const G4double plsh) { polish = plsh; } + G4double GetPolish() const { return polish; } + // Sets the optical surface polish type. + inline void SetPolish(const G4double plsh) { polish = plsh; } + // Retrieves the pointer of the G4MaterialPropertiesTable + // attached to optical surface. inline G4MaterialPropertiesTable* GetMaterialPropertiesTable() const { return theMaterialPropertiesTable; } - // Retrieves the pointer of the G4MaterialPropertiesTable - // attached to optical surface. + // Attaches a G4MaterialPropertiesTable to the optical surface. inline void SetMaterialPropertiesTable(G4MaterialPropertiesTable* anMPT) { theMaterialPropertiesTable = anMPT; } - // Attaches a G4MaterialPropertiesTable to the optical surface. - void DumpInfo() const; // Prints information about the optical surface. + void DumpInfo() const; - void ReadDataFile(); // call the correct ReadXXXFile + void ReadDataFile(); - void ReadCompressedFile(const G4String&, std::istringstream&); // read a zlib-compressed file + void ReadCompressedFile(const G4String&, std::istringstream&); - void ReadLUTFile(); // Method to read the Look-Up-Table into array AngularDistribution - - inline G4double GetAngularDistributionValue(G4int, G4int, G4int); + void ReadLUTFile(); // for DAVIS model + inline G4double GetAngularDistributionValue(G4int, G4int, G4int); - inline G4double GetAngularDistributionValueLUT(G4int); // Returns the AngularDistributionValue + inline G4double GetAngularDistributionValueLUT(G4int); - void ReadLUTDAVISFile(); // Method to read the Davis Look-Up-Table into array AngularDistribution + void ReadLUTDAVISFile(); - void ReadReflectivityLUTFile(); // Method to read the Look-Up-Table for reflectivity + void ReadReflectivityLUTFile(); - inline G4double GetReflectivityLUTValue(G4int); // Returns the reflectivity value from the Davis Look-Up-Table + inline G4double GetReflectivityLUTValue(G4int); - G4int GetInmax() const; // Returns the number of lines in the Davis Look-Up-Table + G4int GetInmax() const; - G4int GetLUTbins() const; // Returns the number of probability values per incidentangle + G4int GetLUTbins() const; - G4int GetRefMax() const; // Returns the number of reflectivity values per angle + G4int GetRefMax() const; G4int GetThetaIndexMax() const; G4int GetPhiIndexMax() const; - void ReadDichroicFile(); // Method to read the dichroic surface data file into Dichroic + void ReadDichroicFile(); inline G4Physics2DVector* GetDichroicVector(); private: - G4OpticalSurfaceModel theModel; // Surface model + G4OpticalSurfaceModel theModel; // Surface model G4OpticalSurfaceFinish theFinish; // Surface finish G4double sigma_alpha; // The sigma of micro-facet polar angle - G4double polish; // Polish parameter in glisur model + G4double polish; // Polish parameter in glisur model - G4MaterialPropertiesTable* theMaterialPropertiesTable; + G4MaterialPropertiesTable* theMaterialPropertiesTable{nullptr}; static const G4int incidentIndexMax = 91; - static const G4int thetaIndexMax = 45; - static const G4int phiIndexMax = 37; + static const G4int thetaIndexMax = 45; + static const G4int phiIndexMax = 37; G4float* AngularDistribution; G4Physics2DVector* DichroicVector; // for DAVIS model static const G4int indexmax = 7280001; // 3640001; - static const G4int RefMax = 90; - static const G4int LUTbins = 20000; + static const G4int RefMax = 90; + static const G4int LUTbins = 20000; G4float* AngularDistributionLUT; G4float* Reflectivity; }; @@ -247,50 +247,39 @@ inline G4double G4OpticalSurface::GetAngularDistributionValue( G4int angleIncident, G4int thetaIndex, G4int phiIndex) { G4int product = angleIncident * thetaIndex * phiIndex; - if(product < 0 || product >= incidentIndexMax * thetaIndexMax * phiIndexMax) - { + if (product < 0 || product >= incidentIndexMax * thetaIndexMax * phiIndexMax) { G4ExceptionDescription ed; - ed << "Index angleIncident: " << angleIncident - << " thetaIndex: " << thetaIndex << " phiIndex: " << phiIndex - << " out of range!"; - G4Exception("G4OpticalSurface::GetAngularDistributionValue", "mat317", - FatalException, ed); + ed << "Index angleIncident: " << angleIncident << " thetaIndex: " << thetaIndex + << " phiIndex: " << phiIndex << " out of range!"; + G4Exception("G4OpticalSurface::GetAngularDistributionValue", "mat317", FatalException, ed); return 0.; } - return (G4double) - AngularDistribution[angleIncident + thetaIndex * incidentIndexMax + - phiIndex * thetaIndexMax * incidentIndexMax]; + return (G4double)AngularDistribution[angleIncident + thetaIndex * incidentIndexMax + + phiIndex * thetaIndexMax * incidentIndexMax]; } inline G4double G4OpticalSurface::GetAngularDistributionValueLUT(G4int i) { - if(i < 0 || i >= indexmax) - { + if (i < 0 || i >= indexmax) { G4ExceptionDescription ed; ed << "Index " << i << " out of range!"; - G4Exception("G4OpticalSurface::GetAngularDistributionValueLUT", "mat318", - FatalException, ed); + G4Exception("G4OpticalSurface::GetAngularDistributionValueLUT", "mat318", FatalException, ed); return 0.; } - return (G4double) AngularDistributionLUT[i]; + return (G4double)AngularDistributionLUT[i]; } inline G4double G4OpticalSurface::GetReflectivityLUTValue(G4int i) { - if(i < 0 || i >= RefMax) - { + if (i < 0 || i >= RefMax) { G4ExceptionDescription ed; ed << "Index " << i << " out of range!"; - G4Exception("G4OpticalSurface::GetReflectivityLUTValue", "mat319", - FatalException, ed); + G4Exception("G4OpticalSurface::GetReflectivityLUTValue", "mat319", FatalException, ed); return 0.; } - return (G4double) Reflectivity[i]; + return (G4double)Reflectivity[i]; } -inline G4Physics2DVector* G4OpticalSurface::GetDichroicVector() -{ - return DichroicVector; -} +inline G4Physics2DVector* G4OpticalSurface::GetDichroicVector() { return DichroicVector; } #endif /* G4OpticalSurface_h */ diff --git a/source/materials/include/G4SandiaTable.hh b/source/materials/include/G4SandiaTable.hh index 70698921951..7af880f9f6d 100644 --- a/source/materials/include/G4SandiaTable.hh +++ b/source/materials/include/G4SandiaTable.hh @@ -22,16 +22,13 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// + // class description // // This class is an interface to G4StaticSandiaData. // it provides - Sandia coeff for an element, given its Z // - sandia coeff for a material, given a pointer to it // - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -// // History: // // 10.06.97 created. V. Grichine @@ -40,131 +37,111 @@ // in GetSandiaCofPerAtom(). mma // 03.04.01 fnulcof[4] added; returned if energy < emin // 05.03.04 V.Grichine, new methods for old sorting algorithm for PAI model -// 21.21.13 V.Ivanchenko, changed signature of methods, reduced number of +// 21.21.13 V.Ivanchenko, changed signature of methods, reduced number of // static variables, methods // -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... #ifndef G4SANDIATABLE_HH #define G4SANDIATABLE_HH -#include "G4OrderedTable.hh" +#include "G4OrderedTable.hh" #include "G4ios.hh" #include "globals.hh" -#include -#include #include +#include -class G4Material; +#include -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... +class G4Material; class G4SandiaTable { -public: // with description - - G4SandiaTable(const G4Material*); - + public: // with description + G4SandiaTable(); + G4SandiaTable(const G4Material*); + G4SandiaTable(G4int matIndex); ~G4SandiaTable(); - //main computation per atom: - void GetSandiaCofPerAtom(G4int Z, G4double energy, - std::vector& coeff) const; + G4SandiaTable(G4SandiaTable&) = delete; + G4SandiaTable& operator=(const G4SandiaTable& right) = delete; + + // main computation per atom: + void GetSandiaCofPerAtom(G4int Z, G4double energy, std::vector& coeff) const; - void GetSandiaCofWater(G4double energy, - std::vector& coeff) const; + void GetSandiaCofWater(G4double energy, std::vector& coeff) const; G4double GetWaterEnergyLimit() const; - G4double GetWaterCofForMaterial(G4int,G4int) const; + G4double GetWaterCofForMaterial(G4int, G4int) const; static G4double GetZtoA(G4int Z); - //per volume of a material: + // per volume of a material: G4int GetMatNbOfIntervals() const; - G4double GetSandiaCofForMaterial(G4int,G4int) const; - G4double GetSandiaMatTable(G4int,G4int) const; + G4double GetSandiaCofForMaterial(G4int, G4int) const; + G4double GetSandiaMatTable(G4int, G4int) const; const G4double* GetSandiaCofForMaterial(G4double energy) const; - G4double GetSandiaMatTablePAI(G4int,G4int) const; + G4double GetSandiaMatTablePAI(G4int, G4int) const; const G4double* GetSandiaCofForMaterialPAI(G4double energy) const; inline void SetVerbose(G4int ver) { fVerbose = ver; }; -public: // without description + ///////////////////////////////////////////////////////////////////// + // + // Methods for implementation of PAI model + // + ///////////////////////////////////////////////////////////////////// - G4SandiaTable(__void__&); - // Fake default constructor for usage restricted to direct object - // persistency for clients requiring preallocation of memory for - // persistifiable objects. + void Initialize(const G4Material*); -private: + G4int SandiaIntervals(G4int Z[], G4int el); + + G4int SandiaMixing(G4int Z[], const G4double* fractionW, G4int el, G4int mi); + + G4double GetPhotoAbsorpCof(G4int i, G4int j) const; + + G4int GetMaxInterval() const; + + inline G4bool GetLowerI1() { return fLowerI1; }; + inline void SetLowerI1(G4bool flag) { fLowerI1 = flag; }; + + // operators + G4bool operator==(const G4SandiaTable&) const = delete; + G4bool operator!=(const G4SandiaTable&) const = delete; + private: void ComputeMatSandiaMatrix(); void ComputeMatSandiaMatrixPAI(); // methods per atom - G4double GetSandiaPerAtom(G4int Z, G4int, G4int) const; + G4double GetSandiaPerAtom(G4int Z, G4int, G4int) const; #ifdef G4VERBOSE static G4int PrintErrorZ(G4int Z, const G4String&); static void PrintErrorV(const G4String&); #endif + void ComputeMatTable(); + + void SandiaSwap(G4double** da, G4int i, G4int j); + + void SandiaSort(G4double** da, G4int sz); + + G4double** GetPointerToCof(); + // computed once - static G4int fCumulInterval[101]; + static G4int fCumulInterval[101]; static const G4double funitc[5]; // used at initialisation std::vector fSandiaCofPerAtom; - + // members of the class const G4Material* fMaterial; - G4int fMatNbOfIntervals; + G4int fMatNbOfIntervals; G4OrderedTable* fMatSandiaMatrix; G4OrderedTable* fMatSandiaMatrixPAI; - -///////////////////////////////////////////////////////////////////// -// -// Methods for implementation of PAI model -// -///////////////////////////////////////////////////////////////////// - -public: // without description - - G4SandiaTable(G4int matIndex); - - G4SandiaTable(); - - void Initialize(const G4Material*); - - G4int SandiaIntervals(G4int Z[], G4int el); - - G4int SandiaMixing(G4int Z[], const G4double* fractionW, - G4int el, G4int mi); - - G4double GetPhotoAbsorpCof(G4int i , G4int j) const; - - G4int GetMaxInterval() const; - - inline G4bool GetLowerI1() {return fLowerI1;}; - inline void SetLowerI1(G4bool flag) {fLowerI1=flag;}; - - // operators - G4bool operator==(const G4SandiaTable&) const = delete; - G4bool operator!=(const G4SandiaTable&) const = delete; - G4SandiaTable(G4SandiaTable &) = delete; - G4SandiaTable & operator=(const G4SandiaTable &right) = delete; - -private: - - void ComputeMatTable(); - - void SandiaSwap(G4double** da, G4int i, G4int j); - - void SandiaSort(G4double** da, G4int sz); - - G4double** GetPointerToCof(); static const G4double fSandiaTable[981][5]; static const G4int fNumberOfElements; @@ -175,9 +152,9 @@ private: // data members for PAI model G4double** fPhotoAbsorptionCof; // SandiaTable for mixture - G4int fMaxInterval ; + G4int fMaxInterval; G4int fVerbose; - G4bool fLowerI1; + G4bool fLowerI1; }; - -#endif + +#endif diff --git a/source/materials/include/G4StaticSandiaData.hh b/source/materials/include/G4StaticSandiaData.hh index 228b3060fd0..0324562b428 100644 --- a/source/materials/include/G4StaticSandiaData.hh +++ b/source/materials/include/G4StaticSandiaData.hh @@ -22,26 +22,10 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... +// class description // -// 30.11.13 V. Grichine, add array of sandia cofs for H2O lower I1 -// 15.04.02 V.Grichine, bug fixed in Pb: comma after 15.861, -// 09.11.98 simplified public interface; removed mixting stuf. MMA -// 10.06.97 created. V. Grichine -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... - -#include"G4SandiaTable.hh" - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... - -// class description -// -// File for static data of PhotoAbsorption cross section coefficients +// File for static data of PhotoAbsorption cross section coefficients // according to the Sandia parametrisation // // const G4double G4SandiaTable::fSandiaTable[981][5] @@ -88,6 +72,17 @@ // and Technology, January 1990). Here the ionization energy is the least // energy necessary to remove to infinity one electron from an atom of the // element. +// +//------------------------------------------------------------------------------ +// +// 30.11.13 V. Grichine, add array of sandia cofs for H2O lower I1 +// 15.04.02 V.Grichine, bug fixed in Pb: comma after 15.861, +// 09.11.98 simplified public interface; removed mixting stuf. MMA +// 10.06.97 created. V. Grichine + +#include "G4SandiaTable.hh" + +// clang-format off const G4double G4SandiaTable::fSandiaTable[981][5] = { @@ -1589,8 +1584,4 @@ const G4int G4SandiaTable::fIntervalLimit = 100; const G4int G4SandiaTable::fNumberOfIntervals = 980; const G4int G4SandiaTable::fH2OlowerInt = 23; -// -// -/////////////////////////////////////////////////////////////////////////////////////// - - +// clang-format on diff --git a/source/materials/include/G4SurfaceProperty.hh b/source/materials/include/G4SurfaceProperty.hh index 515245a8218..995683c4f89 100644 --- a/source/materials/include/G4SurfaceProperty.hh +++ b/source/materials/include/G4SurfaceProperty.hh @@ -22,10 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// -// + //////////////////////////////////////////////////////////////////////// // G4SurfaceProperty Definition //////////////////////////////////////////////////////////////////////// @@ -48,15 +45,16 @@ #ifndef G4SurfaceProperty_h #define G4SurfaceProperty_h 1 -#include - -#include "G4Types.hh" #include "G4String.hh" +#include "G4Types.hh" + +#include class G4SurfaceProperty; using G4SurfacePropertyTable = std::vector; +// clang-format off enum G4SurfaceType { dielectric_metal, // dielectric-metal interface @@ -68,39 +66,38 @@ enum G4SurfaceType x_ray, // for x-ray mirror process coated // coated_dielectric-dielectric interface }; +// clang-format on class G4SurfaceProperty { public: - G4SurfaceProperty(const G4String& name, G4SurfaceType type = x_ray); // Constructor of a X-ray optical surface object. - G4SurfaceProperty(); + G4SurfaceProperty(const G4String& name, G4SurfaceType type = x_ray); virtual ~G4SurfaceProperty() = default; - const G4String& GetName() const { return theName; } // Returns the surface name. - void SetName(const G4String& name) { theName = name; } + const G4String& GetName() const { return theName; } // Sets the surface name. + void SetName(const G4String& name) { theName = name; } - const G4SurfaceType& GetType() const { return theType; } // Returns the surface type. - virtual void SetType(const G4SurfaceType& type) { theType = type; } + const G4SurfaceType& GetType() const { return theType; } // Sets the surface type. + virtual void SetType(const G4SurfaceType& type) { theType = type; } + // To handle the table of surface properties. static void CleanSurfacePropertyTable(); static const G4SurfacePropertyTable* GetSurfacePropertyTable(); static size_t GetNumberOfSurfaceProperties(); static void DumpTableInfo(); - // To handle the table of surface properties. protected: G4String theName; // Surface name G4SurfaceType theType; // Surface type - static G4SurfacePropertyTable theSurfacePropertyTable; - // The static Table of SurfaceProperties. + static G4SurfacePropertyTable theSurfacePropertyTable; // The static Table of SurfaceProperties. }; #endif /* G4SurfaceProperty_h */ diff --git a/source/materials/include/G4UCNMaterialPropertiesTable.hh b/source/materials/include/G4UCNMaterialPropertiesTable.hh index e1239ae8b33..762f19dd62e 100644 --- a/source/materials/include/G4UCNMaterialPropertiesTable.hh +++ b/source/materials/include/G4UCNMaterialPropertiesTable.hh @@ -22,8 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + //--------------------------------------------------------------------------- // // ClassName: G4UCNMaterialPropertiesTable @@ -50,8 +49,7 @@ class G4UCNMaterialPropertiesTable : public G4MaterialPropertiesTable { -public: - + public: G4UCNMaterialPropertiesTable(); ~G4UCNMaterialPropertiesTable() override; @@ -72,13 +70,13 @@ public: void ComputeMicroRoughnessTables(); // returns the integral prob. value for a theta_i - E pair - G4double GetMRIntProbability (G4double, G4double); + G4double GetMRIntProbability(G4double, G4double); // returns the maximum prob. value for a theta_i - E pair - G4double GetMRMaxProbability (G4double, G4double); + G4double GetMRMaxProbability(G4double, G4double); // sets the maximum prob. value for a theta_i - E pair - void SetMRMaxProbability (G4double, G4double, G4double); + void SetMRMaxProbability(G4double, G4double, G4double); // returns the mr-prob. @@ -88,40 +86,35 @@ public: // 3) V_F // 4) theta_o // 5) phi_o - - G4double GetMRProbability (G4double, G4double, G4double, G4double, G4double); + G4double GetMRProbability(G4double, G4double, G4double, G4double, G4double); // returns the integral transmission prob. value for a theta_i - E pair - G4double GetMRIntTransProbability (G4double, G4double); + G4double GetMRIntTransProbability(G4double, G4double); // returns the maximum transmission prob. for a theta_i - E pair - G4double GetMRMaxTransProbability (G4double, G4double); + G4double GetMRMaxTransProbability(G4double, G4double); // sets the maximum prob. value for a theta_i - E pair - void SetMRMaxTransProbability (G4double, G4double, G4double); + void SetMRMaxTransProbability(G4double, G4double, G4double); // returns the mr-transmission-prob. - // arguments: // 1) theta_i // 2) E // 3) V_F // 4) theta_o // 5) phi_o - - G4double GetMRTransProbability (G4double, G4double, - G4double, G4double, G4double); + G4double GetMRTransProbability(G4double, G4double, G4double, G4double, G4double); // Checks if the validity condition for the microroughness model are // satisfied, cf. Steyerl-paper p. 175 - G4bool ConditionsValid (G4double E, G4double VFermi, G4double theta_i); + G4bool ConditionsValid(G4double E, G4double VFermi, G4double theta_i); // Checks if the validity conditions for the transmission of the // microroughness model are satisfied - G4bool TransConditionsValid (G4double E, G4double VFermi, G4double theta_i); + G4bool TransConditionsValid(G4double E, G4double VFermi, G4double theta_i); // Adds the values for mr-related units to the MaterialPropertiesTable - // arguments: // 1) w // 2) b @@ -134,10 +127,8 @@ public: // 9) number of angles theta_o in the look-up table calculation // 10) number of angles phi_o in the look-up table calculation // 11) angular cut - - void SetMicroRoughnessParameters(G4double, G4double, G4int, G4int, G4double, - G4double, G4double, G4double, G4int, G4int, - G4double); + void SetMicroRoughnessParameters(G4double, G4double, G4int, G4int, G4double, G4double, G4double, + G4double, G4int, G4int, G4double); // returns b G4double GetRMS() const; @@ -145,8 +136,7 @@ public: // returns w G4double GetCorrLen() const; -private: - + private: // Pointer to the integral reflection probability table G4double* theMicroRoughnessTable; @@ -177,7 +167,7 @@ private: // inline functions // ========================================================================== -inline G4double G4UCNMaterialPropertiesTable::GetRMS() const {return b;} -inline G4double G4UCNMaterialPropertiesTable::GetCorrLen() const {return w;} +inline G4double G4UCNMaterialPropertiesTable::GetRMS() const { return b; } +inline G4double G4UCNMaterialPropertiesTable::GetCorrLen() const { return w; } #endif diff --git a/source/materials/include/G4UCNMicroRoughnessHelper.hh b/source/materials/include/G4UCNMicroRoughnessHelper.hh index ab8e3dff366..22ce1066a79 100644 --- a/source/materials/include/G4UCNMicroRoughnessHelper.hh +++ b/source/materials/include/G4UCNMicroRoughnessHelper.hh @@ -22,10 +22,8 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + //--------------------------------------------------------------------------- -// // ClassName: G4UCNMicroRoughnessHelper // // Class description: @@ -39,8 +37,6 @@ // hang-up at the generation of the polar angle due to a very sharp angular // distribution // -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - // 12-05-14, adopted from Stefan Heule (PSI) Thesis by P.Gumplinger // reported in F. Atchison et al., Eur. Phys. J. A 44, 23–29 (2010) // DOI: 10.1140/epja/i2010-10926-x @@ -55,134 +51,110 @@ #include "G4Types.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - class G4UCNMicroRoughnessHelper { - public: // with description - - static G4UCNMicroRoughnessHelper* GetInstance(); - - protected: - - G4UCNMicroRoughnessHelper(); - ~G4UCNMicroRoughnessHelper(); - - public: // with description - -// Transmitted intensity with k-vector in vacuum - -// arguments: -// 1) cos(theta)^2, -// 2) (k_l/k)^2 - - G4double S2(G4double, G4double) const; - -// Transmitted intensity with k-vector within the medium - -// arguments: -// 1) cos(theta')^2, -// 2) (k_l/k')^2 - - G4double SS2(G4double, G4double) const; - -// Fourier-tranform of the autocorrelation function with k-vector in vacuum - -// arguments: -// 1) k^2, -// 2) theta_i, -// 3) theta_o, -// 4) phi_o, -// 5) b^2, -// 6) w^2, -// 7) angular cut - - G4double Fmu(G4double, G4double, G4double, - G4double, G4double, G4double, G4double) const; - -// Fourier-tranform of the autocorrelation function with k-vector within -// the medium - -// arguments: -// 1) k, -// 2) k', -// 3) theta_i, -// 4) theta'_o, -// 5) phi'_o, -// 6) b^2, -// 7) w^2, -// 8) angular cut -// 9) theta_refract - - G4double FmuS(G4double, G4double, G4double, G4double, - G4double, G4double, G4double, G4double, G4double) const; - -// Integral probability for non-specular reflection - -// arguments: -// 1) E, -// 2) V_F, -// 3) theta_i, -// 4) number of angles theta_o for which the probability is calculated, -// 5) number of angles phi_o for which the probability is calculated, -// 6) b^2, -// 7) w^2, -// 8) pointer to G4double array with max values of the probability, -// 9) angular cut - - G4double IntIplus(G4double, G4double, G4double, G4int, G4int, - G4double, G4double, G4double*, G4double) const; - -// Probability of non-specular reflection with the microroughness model - -// arguments: -// 1) E, -// 2) V_F, -// 3) theta_i, -// 4) theta_o, -// 5) phi_o, -// 6) b, -// 7) w, -// 8) angular cut - - G4double ProbIplus (G4double, G4double, G4double, G4double, - G4double, G4double, G4double, G4double) const; - -// Integral probability for non-specular transmission - -// arguments: -// 1) E, -// 2) V_F, -// 3) theta_i, -// 4) number of angles theta_o for which the probability is calculated, -// 5) number of angles phi_o for which the probability is calculated, -// 6) b^2, -// 7) w^2, -// 8) pointer to G4double array with max values of the probability, -// 9) angular cut - - G4double IntIminus(G4double, G4double, G4double, G4int, G4int, - G4double, G4double, G4double*, G4double) const; - -// Probability of non-specular transmission with the microroughness model - -// arguments: -// 1) E, -// 2) V_F, -// 3) theta_i, -// 4) theta'_o, -// 5) phi'_o, -// 6) b, -// 7) w, -// 8) angular cut - - G4double ProbIminus (G4double, G4double, G4double, G4double, - G4double, G4double, G4double, G4double) const; - - private: - - static G4UCNMicroRoughnessHelper* fpInstance; - + public: // with description + static G4UCNMicroRoughnessHelper* GetInstance(); + + public: // with description + // Transmitted intensity with k-vector in vacuum + // arguments: + // 1) cos(theta)^2, + // 2) (k_l/k)^2 + G4double S2(G4double, G4double) const; + + // Transmitted intensity with k-vector within the medium + // arguments: + // 1) cos(theta')^2, + // 2) (k_l/k')^2 + G4double SS2(G4double, G4double) const; + + // Fourier-tranform of the autocorrelation function with k-vector in vacuum + // arguments: + // 1) k^2, + // 2) theta_i, + // 3) theta_o, + // 4) phi_o, + // 5) b^2, + // 6) w^2, + // 7) angular cut + G4double Fmu(G4double, G4double, G4double, G4double, G4double, G4double, G4double) const; + + // Fourier-tranform of the autocorrelation function with k-vector within + // the medium + // arguments: + // 1) k, + // 2) k', + // 3) theta_i, + // 4) theta'_o, + // 5) phi'_o, + // 6) b^2, + // 7) w^2, + // 8) angular cut + // 9) theta_refract + G4double FmuS( + G4double, G4double, G4double, G4double, G4double, G4double, G4double, G4double, G4double) const; + + // Integral probability for non-specular reflection + // arguments: + // 1) E, + // 2) V_F, + // 3) theta_i, + // 4) number of angles theta_o for which the probability is calculated, + // 5) number of angles phi_o for which the probability is calculated, + // 6) b^2, + // 7) w^2, + // 8) pointer to G4double array with max values of the probability, + // 9) angular cut + G4double IntIplus( + G4double, G4double, G4double, G4int, G4int, G4double, G4double, G4double*, G4double) const; + + // Probability of non-specular reflection with the microroughness model + // arguments: + // 1) E, + // 2) V_F, + // 3) theta_i, + // 4) theta_o, + // 5) phi_o, + // 6) b, + // 7) w, + // 8) angular cut + G4double ProbIplus( + G4double, G4double, G4double, G4double, G4double, G4double, G4double, G4double) const; + + // Integral probability for non-specular transmission + // arguments: + // 1) E, + // 2) V_F, + // 3) theta_i, + // 4) number of angles theta_o for which the probability is calculated, + // 5) number of angles phi_o for which the probability is calculated, + // 6) b^2, + // 7) w^2, + // 8) pointer to G4double array with max values of the probability, + // 9) angular cut + G4double IntIminus( + G4double, G4double, G4double, G4int, G4int, G4double, G4double, G4double*, G4double) const; + + // Probability of non-specular transmission with the microroughness model + // arguments: + // 1) E, + // 2) V_F, + // 3) theta_i, + // 4) theta'_o, + // 5) phi'_o, + // 6) b, + // 7) w, + // 8) angular cut + G4double ProbIminus( + G4double, G4double, G4double, G4double, G4double, G4double, G4double, G4double) const; + + protected: + G4UCNMicroRoughnessHelper() = default; + ~G4UCNMicroRoughnessHelper(); + + private: + static G4UCNMicroRoughnessHelper* fpInstance; }; -#endif // G4MICROROUGHNESSHELPER_HH +#endif // G4MICROROUGHNESSHELPER_HH diff --git a/source/materials/include/G4VIonDEDXTable.hh b/source/materials/include/G4VIonDEDXTable.hh index 599ee786665..a9c58551c16 100644 --- a/source/materials/include/G4VIonDEDXTable.hh +++ b/source/materials/include/G4VIonDEDXTable.hh @@ -22,19 +22,17 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// + // =========================================================================== // GEANT4 class header file // -// Class: G4VIonDEDXTable -// +// Class: G4VIonDEDXTable +// // Author: Anton Lechner (Anton.Lechner@cern.ch) // // First implementation: 15. 02. 2009 // -// Modifications: +// Modifications: // 02. 11. 2009 A. Lechner: Added BuildPhysicsVector function which should // invoke the build process of physics vectors. // @@ -43,8 +41,7 @@ // // Comments: // -// =========================================================================== -// +// =========================================================================== #ifndef G4VIONDEDXTABLE_HH #define G4VIONDEDXTABLE_HH @@ -53,61 +50,52 @@ class G4PhysicsVector; - -class G4VIonDEDXTable { - +class G4VIonDEDXTable +{ public: - explicit G4VIonDEDXTable() = default; - virtual ~G4VIonDEDXTable() = default; - - // Function for building a stopping power table for a material consisting of - // a single element only. - virtual G4bool BuildPhysicsVector( - G4int, // Atomic number of ion - G4int // Atomic number of elemental material - ) = 0; - - // Function building stopping power table for a given ion-material pair. - virtual G4bool BuildPhysicsVector( - G4int, // Atomic number of ion - const G4String& // Name or chemical formula of material - ) = 0; + explicit G4VIonDEDXTable() = default; + virtual ~G4VIonDEDXTable() = default; + G4VIonDEDXTable(G4VIonDEDXTable&) = delete; + const G4VIonDEDXTable& operator=(const G4VIonDEDXTable&) = delete; - // Function for checking the availability of stopping power tables - // for a given ion-material pair, where the material consists of - // a single element only. - virtual G4bool IsApplicable( - G4int, // Atomic number of ion - G4int // Atomic number of elemental material - ) = 0; + // Function for building a stopping power table for a material consisting of + // a single element only. + virtual G4bool BuildPhysicsVector(G4int, // Atomic number of ion + G4int // Atomic number of elemental material + ) = 0; - // Function for checking the availability of stopping power tables - // for a given ion-material pair. - virtual G4bool IsApplicable( - G4int, // Atomic number of ion - const G4String& // Name or chemical formula of material - ) = 0; + // Function building stopping power table for a given ion-material pair. + virtual G4bool BuildPhysicsVector(G4int, // Atomic number of ion + const G4String& // Name or chemical formula of material + ) = 0; - // Function returning the stopping power vector for a given ion-material - // pair, where the material consists of a single element only (the - // physics vector returned by this function must contain the kinetic - // energy per nucleon vs the mass stopping power of the elemental material). - virtual G4PhysicsVector* GetPhysicsVector( - G4int, // Atomic number of ion - G4int // Atomic number of elemental material - ) = 0; + // Function for checking the availability of stopping power tables + // for a given ion-material pair, where the material consists of + // a single element only. + virtual G4bool IsApplicable(G4int, // Atomic number of ion + G4int // Atomic number of elemental material + ) = 0; - // Function returning the stopping power vector for given ion-material - // pair (the physics vector returned by this function must contain the - // kinetic energy per nucleon vs the mass stopping power of the material). - virtual G4PhysicsVector* GetPhysicsVector( - G4int, // Atomic number of ion - const G4String& // Name or chemical formula of material - ) = 0; + // Function for checking the availability of stopping power tables + // for a given ion-material pair. + virtual G4bool IsApplicable(G4int, // Atomic number of ion + const G4String& // Name or chemical formula of material + ) = 0; - G4VIonDEDXTable(G4VIonDEDXTable&) = delete; - const G4VIonDEDXTable & operator=(const G4VIonDEDXTable&) = delete; + // Function returning the stopping power vector for a given ion-material + // pair, where the material consists of a single element only (the + // physics vector returned by this function must contain the kinetic + // energy per nucleon vs the mass stopping power of the elemental material). + virtual G4PhysicsVector* GetPhysicsVector(G4int, // Atomic number of ion + G4int // Atomic number of elemental material + ) = 0; + // Function returning the stopping power vector for given ion-material + // pair (the physics vector returned by this function must contain the + // kinetic energy per nucleon vs the mass stopping power of the material). + virtual G4PhysicsVector* GetPhysicsVector(G4int, // Atomic number of ion + const G4String& // Name or chemical formula of material + ) = 0; }; -#endif // G4VIONDEDXTABLE_HH +#endif // G4VIONDEDXTABLE_HH diff --git a/source/materials/include/G4VMaterialExtension.hh b/source/materials/include/G4VMaterialExtension.hh index d74eb2a18d8..928a227d77d 100644 --- a/source/materials/include/G4VMaterialExtension.hh +++ b/source/materials/include/G4VMaterialExtension.hh @@ -22,9 +22,6 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// //--------------------------------------------------------------------------- // @@ -40,38 +37,35 @@ // G4ExtendedMaterial. // -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #ifndef G4VMATERIALEXTENSION_HH #define G4VMATERIALEXTENSION_HH 1 -#include "globals.hh" +#include "G4String.hh" #include "G4ios.hh" +#include "globals.hh" + #include #include -#include "G4String.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -//Hash of extension material name -using G4MaterialExtensionHash=std::hash; +// Hash of extension material name +using G4MaterialExtensionHash = std::hash; class G4VMaterialExtension { -public: // with description - // + public: // with description // Base class constructor - // - G4VMaterialExtension(const G4String& name) : - fName(name),fHash(G4MaterialExtensionHash{}(name)) {} - virtual ~G4VMaterialExtension() {;} + G4VMaterialExtension(const G4String& name) : fName(name), fHash(G4MaterialExtensionHash{}(name)) + {} + virtual ~G4VMaterialExtension() = default; virtual void Print() const = 0; // Return the hash value of this extension - const std::size_t& GetHash() const { return fHash;} + const std::size_t& GetHash() const { return fHash; } // Return the extension name const G4String& GetName() const { return fName; } -protected: + + protected: // Name of the extension const G4String& fName; // Hash value of the name. @@ -79,6 +73,4 @@ protected: const std::size_t fHash; }; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #endif diff --git a/source/materials/sources.cmake b/source/materials/sources.cmake index 7950bc6d3be..30335a15768 100644 --- a/source/materials/sources.cmake +++ b/source/materials/sources.cmake @@ -48,8 +48,7 @@ geant4_add_module(G4materials G4VIonDEDXTable.hh G4VMaterialExtension.hh SOURCES - G4AtomicBond.cc - G4AtomicFormFactor.cc + G4AtomicFormFactor.cc G4AtomicShells.cc G4AtomicShells_XDB_EADL.cc G4CrystalExtension.cc diff --git a/source/materials/src/G4AtomicFormFactor.cc b/source/materials/src/G4AtomicFormFactor.cc index 2992d5497d3..e6115d61233 100644 --- a/source/materials/src/G4AtomicFormFactor.cc +++ b/source/materials/src/G4AtomicFormFactor.cc @@ -26,24 +26,423 @@ // // -//--------------------------------------------------------------------------- -// -// ClassName: G4AtomicFormFactor -// -// Description: Contains the function for the evaluation of the atomic form -// factor. The tabulated data are available on IUCr website -// -// Class description: -// -// XXX -// - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -// 21-04-16, created by E.Bagli - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - #include "G4AtomicFormFactor.hh" -G4AtomicFormFactor* G4AtomicFormFactor::s_G4AtomicFormFactorManager = nullptr; +// Singleton constructor to create the atomic form factor calculator +// Atomic form factor are evaluated using IUCr tables +// http://it.iucr.org/Cb/ch6o1v0001/ +G4AtomicFormFactor::G4AtomicFormFactor() +{ + InsertCoefficients( + 100, {0.489918, 20.6593, 0.262003, 7.74039, 0.196767, 49.5519, 0.049879, 2.20159, 0.001305}); + InsertCoefficients( + 99, {0.897661, 53.1368, 0.565616, 15.187, 0.415815, 186.576, 0.116973, 3.56709, 0.002389}); + InsertCoefficients(200, {0.8734, 9.1037, 0.6309, 3.3568, 0.3112, 22.9276, 0.178, 0.9821, 0.0064}); + InsertCoefficients( + 300, {1.1282, 3.9546, 0.7508, 1.0524, 0.6175, 85.3905, 0.4653, 168.261, 0.0377}); + InsertCoefficients( + 301, {0.6968, 4.6237, 0.7888, 1.9557, 0.3414, 0.6316, 0.1563, 10.0953, 0.0167}); + InsertCoefficients( + 400, {1.5919, 43.6427, 1.1278, 1.8623, 0.5391, 103.483, 0.7029, 0.542, 0.0385}); + InsertCoefficients( + 402, {6.2603, 0.0027, 0.8849, 0.8313, 0.7993, 2.2758, 0.1647, 5.1146, -6.1092}); + InsertCoefficients( + 500, {2.0545, 23.2185, 1.3326, 1.021, 1.0979, 60.3498, 0.7068, 0.1403, -0.19320}); + InsertCoefficients(600, {2.31, 20.8439, 1.02, 10.2075, 1.5886, 0.5687, 0.865, 51.6512, 0.2156}); + InsertCoefficients( + 610, {2.26069, 22.6907, 1.56165, 0.656665, 1.05075, 9.75618, 0.839259, 55.5949, 0.286977}); + InsertCoefficients( + 700, {12.2126, 0.0057, 3.1322, 9.8933, 2.0125, 28.9975, 1.1663, 0.5826, -11.529}); + InsertCoefficients( + 800, {3.0485, 13.2771, 2.2868, 5.7011, 1.5463, 0.3239, 0.867, 32.9089, 0.2508}); + InsertCoefficients( + 799, {4.1916, 12.8573, 1.63969, 4.17236, 1.52673, 47.0179, -20.307, -0.01404, 21.9412}); + InsertCoefficients( + 900, {3.5392, 10.2825, 2.6412, 4.2944, 1.517, 0.2615, 1.0243, 26.1476, 0.2776}); + InsertCoefficients( + 899, {3.6322, 5.27756, 3.51057, 14.7353, 1.26064, 0.442258, 0.940706, 47.3437, 0.653396}); + InsertCoefficients( + 1000, {3.9553, 8.4042, 3.1125, 3.4262, 1.4546, 0.2306, 1.1251, 21.7184, 0.3515}); + InsertCoefficients(1100, {4.7626, 3.285, 3.1736, 8.8422, 1.2674, 0.3136, 1.1128, 129.424, 0.676}); + InsertCoefficients(1101, {3.2565, 2.6671, 3.9362, 6.1153, 1.3998, 0.2001, 1.0032, 14.039, 0.404}); + InsertCoefficients( + 1200, {5.4204, 2.8275, 2.1735, 79.2611, 1.2269, 0.3808, 2.3073, 7.1937, 0.8584}); + InsertCoefficients( + 1202, {3.4988, 2.1676, 3.8378, 4.7542, 1.3284, 0.185, 0.8497, 10.1411, 0.4853}); + InsertCoefficients( + 1300, {6.4202, 3.0387, 1.9002, 0.7426, 1.5936, 31.5472, 1.9646, 85.0886, 1.1151}); + InsertCoefficients( + 1303, {4.17448, 1.93816, 3.3876, 4.14553, 1.20296, 0.228753, 0.528137, 8.28524, 0.706786}); + InsertCoefficients( + 1400, {6.2915, 2.4386, 3.0353, 32.3337, 1.9891, 0.6785, 1.541, 81.6937, 1.1407}); + InsertCoefficients( + 1410, {5.66269, 2.6652, 3.07164, 38.6634, 2.62446, 0.916946, 1.3932, 93.5458, 1.24707}); + InsertCoefficients( + 1404, {4.43918, 1.64167, 3.20345, 3.43757, 1.19453, 0.2149, 0.41653, 6.65365, 0.746297}); + InsertCoefficients(1500, {6.4345, 1.9067, 4.1791, 27.157, 1.78, 0.526, 1.4908, 68.1645, 1.1149}); + InsertCoefficients( + 1600, {6.9053, 1.4679, 5.2034, 22.2151, 1.4379, 0.2536, 1.5863, 56.172, 0.8669}); + InsertCoefficients( + 1700, {11.4604, 0.0104, 7.1964, 1.1662, 6.2556, 18.5194, 1.6455, 47.7784, -9.5574}); + InsertCoefficients( + 1699, {18.2915, 0.0066, 7.2084, 1.1717, 6.5337, 19.5424, 2.3386, 60.4486, -16.378}); + InsertCoefficients( + 1800, {7.4845, 0.9072, 6.7723, 14.8407, 0.6539, 43.8983, 1.6442, 33.3929, 1.4445}); + InsertCoefficients( + 1900, {8.2186, 12.7949, 7.4398, 0.7748, 1.0519, 213.187, 0.8659, 41.6841, 1.4228}); + InsertCoefficients( + 1901, {7.9578, 12.6331, 7.4917, 0.7674, 6.359, -0.00200, 1.1915, 31.9128, -4.9978}); + InsertCoefficients( + 2000, {8.6266, 10.4421, 7.3873, 0.6599, 1.5899, 85.7484, 1.0211, 178.437, 1.3751}); + InsertCoefficients( + 2002, {15.6348, -0.00740, 7.9518, 0.6089, 8.4372, 10.3116, 0.8537, 25.9905, -14.875}); + InsertCoefficients( + 2100, {9.189, 9.0213, 7.3679, 0.5729, 1.6409, 136.108, 1.468, 51.3531, 1.3329}); + InsertCoefficients( + 2103, {13.4008, 0.29854, 8.0273, 7.9629, 1.65943, -0.28604, 1.57936, 16.0662, -6.6667}); + InsertCoefficients(2200, {9.7595, 7.8508, 7.3558, 0.5, 1.6991, 35.6338, 1.9021, 116.105, 1.2807}); + InsertCoefficients( + 2202, {9.11423, 7.5243, 7.62174, 0.457585, 2.2793, 19.5361, 0.087899, 61.6558, 0.897155}); + InsertCoefficients( + 2203, {17.7344, 0.22061, 8.73816, 7.04716, 5.25691, -0.15762, 1.92134, 15.9768, -14.652}); + InsertCoefficients( + 2204, {19.5114, 0.178847, 8.23473, 6.67018, 2.01341, -0.29263, 1.5208, 12.9464, -13.280}); + InsertCoefficients( + 2300, {10.2971, 6.8657, 7.3511, 0.4385, 2.0703, 26.8938, 2.0571, 102.478, 1.2199}); + InsertCoefficients( + 2302, {10.106, 6.8818, 7.3541, 0.4409, 2.2884, 20.3004, 0.0223, 115.122, 1.2298}); + InsertCoefficients( + 2303, {9.43141, 6.39535, 7.7419, 0.383349, 2.15343, 15.1908, 0.016865, 63.969, 0.656565}); + InsertCoefficients( + 2305, {15.6887, 0.679003, 8.14208, 5.40135, 2.03081, 9.97278, -9.5760, 0.940464, 1.7143}); + InsertCoefficients( + 2400, {10.6406, 6.1038, 7.3537, 0.392, 3.324, 20.2626, 1.4922, 98.7399, 1.1832}); + InsertCoefficients( + 2402, {9.54034, 5.66078, 7.7509, 0.344261, 3.58274, 13.3075, 0.509107, 32.4224, 0.616898}); + InsertCoefficients( + 2433, {9.6809, 5.59463, 7.81136, 0.334393, 2.87603, 12.8288, 0.113575, 32.8761, 0.518275}); + InsertCoefficients( + 2500, {11.2819, 5.3409, 7.3573, 0.3432, 3.0193, 17.8674, 2.2441, 83.7543, 1.0896}); + InsertCoefficients( + 2502, {10.8061, 5.2796, 7.362, 0.3435, 3.5268, 14.343, 0.2184, 41.3235, 1.0874}); + InsertCoefficients( + 2503, {9.84521, 4.91797, 7.87194, 0.294393, 3.56531, 10.8171, 0.323613, 24.1281, 0.393974}); + InsertCoefficients( + 2504, {9.96253, 4.8485, 7.97057, 0.283303, 2.76067, 10.4852, 0.054447, 27.573, 0.251877}); + InsertCoefficients( + 2600, {11.7695, 4.7611, 7.3573, 0.3072, 3.5222, 15.3535, 2.3045, 76.8805, 1.0369}); + InsertCoefficients( + 2602, {11.0424, 4.6538, 7.374, 0.3053, 4.1346, 12.0546, 0.4399, 31.2809, 1.0097}); + InsertCoefficients( + 2603, {11.1764, 4.6147, 7.3863, 0.3005, 3.3948, 11.6729, 0.0724, 38.5566, 0.9707}); + InsertCoefficients( + 2700, {12.2841, 4.2791, 7.3409, 0.2784, 4.0034, 13.5359, 2.3488, 71.1692, 1.0118}); + InsertCoefficients( + 2702, {11.2296, 4.1231, 7.3883, 0.2726, 4.7393, 10.2443, 0.7108, 25.6466, 0.9324}); + InsertCoefficients( + 2703, {10.338, 3.90969, 7.88173, 0.238668, 4.76795, 8.35583, 0.725591, 18.3491, 0.286667}); + InsertCoefficients( + 2800, {12.8376, 3.8785, 7.292, 0.2565, 4.4438, 12.1763, 2.38, 66.3421, 1.0341}); + InsertCoefficients( + 2802, {11.4166, 3.6766, 7.4005, 0.2449, 5.3442, 8.873, 0.9773, 22.1626, 0.8614}); + InsertCoefficients( + 2803, {10.7806, 3.5477, 7.75868, 0.22314, 5.22746, 7.64468, 0.847114, 16.9673, 0.386044}); + InsertCoefficients( + 2900, {13.338, 3.5828, 7.1676, 0.247, 5.6158, 11.3966, 1.6735, 64.8126, 1.191}); + InsertCoefficients( + 2901, {11.9475, 3.3669, 7.3573, 0.2274, 6.2455, 8.6625, 1.5578, 25.8487, 0.89}); + InsertCoefficients( + 2902, {11.8168, 3.37484, 7.11181, 0.244078, 5.78135, 7.9876, 1.14523, 19.897, 1.14431}); + InsertCoefficients( + 3000, {14.0743, 3.2655, 7.0318, 0.2333, 5.1652, 10.3163, 2.41, 58.7097, 1.3041}); + InsertCoefficients( + 3002, {11.9719, 2.9946, 7.3862, 0.2031, 6.4668, 7.0826, 1.394, 18.0995, 0.7807}); + InsertCoefficients( + 3100, {15.2354, 3.0669, 6.7006, 0.2412, 4.3591, 10.7805, 2.9623, 61.4135, 1.7189}); + InsertCoefficients( + 3103, {12.692, 2.81262, 6.69883, 0.22789, 6.06692, 6.36441, 1.0066, 14.4122, 1.53545}); + InsertCoefficients( + 3200, {16.0816, 2.8509, 6.3747, 0.2516, 3.7068, 11.4468, 3.683, 54.7625, 2.1313}); + InsertCoefficients( + 3204, {12.9172, 2.53718, 6.70003, 0.205855, 6.06791, 5.47913, 0.859041, 11.603, 1.45572}); + InsertCoefficients( + 3300, {16.6723, 2.6345, 6.0701, 0.2647, 3.4313, 12.9479, 4.2779, 47.7972, 2.531}); + InsertCoefficients( + 3400, {17.0006, 2.4098, 5.8196, 0.2726, 3.9731, 15.2372, 4.3543, 43.8163, 2.8409}); + InsertCoefficients( + 3500, {17.1789, 2.1723, 5.2358, 16.5796, 5.6377, 0.2609, 3.9851, 41.4328, 2.9557}); + InsertCoefficients( + 3499, {17.1718, 2.2059, 6.3338, 19.3345, 5.5754, 0.2871, 3.7272, 58.1535, 3.1776}); + InsertCoefficients( + 3600, {17.3555, 1.9384, 6.7286, 16.5623, 5.5493, 0.2261, 3.5375, 39.3972, 2.825}); + InsertCoefficients( + 3700, {17.1784, 1.7888, 9.6435, 17.3151, 5.1399, 0.2748, 1.5292, 164.934, 3.4873}); + InsertCoefficients( + 3701, {17.5816, 1.7139, 7.6598, 14.7957, 5.8981, 0.1603, 2.7817, 31.2087, 2.0782}); + InsertCoefficients( + 3800, {17.5663, 1.5564, 9.8184, 14.0988, 5.422, 0.1664, 2.6694, 132.376, 2.5064}); + InsertCoefficients( + 3802, {18.0874, 1.4907, 8.1373, 12.6963, 2.5654, 24.5651, -34.193, -0.01380, 41.4025}); + InsertCoefficients( + 3900, {17.776, 1.4029, 10.2946, 12.8006, 5.72629, 0.125599, 3.26588, 104.354, 1.91213}); + InsertCoefficients( + 3903, {17.9268, 1.35417, 9.1531, 11.2145, 1.76795, 22.6599, -33.108, -0.01319, 40.2602}); + InsertCoefficients( + 4000, {17.8765, 1.27618, 10.948, 11.916, 5.41732, 0.117622, 3.65721, 87.6627, 2.06929}); + InsertCoefficients( + 4004, {18.1668, 1.2148, 10.0562, 10.1483, 1.01118, 21.6054, -2.6479, -0.10276, 9.41454}); + InsertCoefficients( + 4100, {17.6142, 1.18865, 12.0144, 11.766, 4.04183, 0.204785, 3.53346, 69.7957, 3.75591}); + InsertCoefficients( + 4103, {19.8812, 0.019175, 18.0653, 1.13305, 11.0177, 10.1621, 1.94715, 28.3389, -12.912}); + InsertCoefficients( + 4105, {17.9163, 1.12446, 13.3417, 0.028781, 10.799, 9.28206, 0.337905, 25.7228, -6.3934}); + InsertCoefficients( + 4200, {3.7025, 0.2772, 17.2356, 1.0958, 12.8876, 11.004, 3.7429, 61.6584, 4.3875}); + InsertCoefficients( + 4203, {21.1664, 0.014734, 18.2017, 1.03031, 11.7423, 9.53659, 2.30951, 26.6307, -14.421}); + InsertCoefficients( + 4205, {21.0149, 0.014345, 18.0992, 1.02238, 11.4632, 8.78809, 0.740625, 23.3452, -14.316}); + InsertCoefficients(4206, {17.8871, 1.03649, 11.175, 8.48061, 6.57891, 0.058881, 0, 0, 0.344941}); + InsertCoefficients( + 4300, {19.1301, 0.864132, 11.0948, 8.14487, 4.64901, 21.5707, 2.71263, 86.8472, 5.40428}); + InsertCoefficients( + 4400, {19.2674, 0.80852, 12.9182, 8.43467, 4.86337, 24.7997, 1.56756, 94.2928, 5.37874}); + InsertCoefficients( + 4403, {18.5638, 0.847329, 13.2885, 8.37164, 9.32602, 0.017662, 3.00964, 22.887, -3.1892}); + InsertCoefficients( + 4404, {18.5003, 0.844582, 13.1787, 8.12534, 4.71304, 0.36495, 2.18535, 20.8504, 1.42357}); + InsertCoefficients( + 4500, {19.2957, 0.751536, 14.3501, 8.21758, 4.73425, 25.8749, 1.28918, 98.6062, 5.328}); + InsertCoefficients( + 4503, {18.8785, 0.764252, 14.1259, 7.84438, 3.32515, 21.2487, -6.1989, -0.01036, 11.8678}); + InsertCoefficients( + 4504, {18.8545, 0.760825, 13.9806, 7.62436, 2.53464, 19.3317, -5.6526, -0.01020, 11.2835}); + InsertCoefficients( + 4600, {19.3319, 0.698655, 15.5017, 7.98929, 5.29537, 25.2052, 0.605844, 76.8986, 5.26593}); + InsertCoefficients(4602, {19.1701, 0.696219, 15.2096, 7.55573, 4.32234, 22.5057, 0, 0, 5.2916}); + InsertCoefficients( + 4604, {19.2493, 0.683839, 14.79, 7.14833, 2.89289, 17.9144, -7.9492, 0.005127, 13.0174}); + InsertCoefficients( + 4700, {19.2808, 0.6446, 16.6885, 7.4726, 4.8045, 24.6605, 1.0463, 99.8156, 5.179}); + InsertCoefficients( + 4701, {19.1812, 0.646179, 15.9719, 7.19123, 5.27475, 21.7326, 0.357534, 66.1147, 5.21572}); + InsertCoefficients(4702, {19.1643, 0.645643, 16.2456, 7.18544, 4.3709, 21.4072, 0, 0, 5.21404}); + InsertCoefficients( + 4800, {19.2214, 0.5946, 17.6444, 6.9089, 4.461, 24.7008, 1.6029, 87.4825, 5.0694}); + InsertCoefficients(4802, {19.1514, 0.597922, 17.2535, 6.80639, 4.47128, 20.2521, 0, 0, 5.11937}); + InsertCoefficients( + 4900, {19.1624, 0.5476, 18.5596, 6.3776, 4.2948, 25.8499, 2.0396, 92.8029, 4.9391}); + InsertCoefficients(4903, {19.1045, 0.551522, 18.1108, 6.3247, 3.78897, 17.3595, 0, 0, 4.99635}); + InsertCoefficients( + 5000, {19.1889, 5.8303, 19.1005, 0.5031, 4.4585, 26.8909, 2.4663, 83.9571, 4.7821}); + InsertCoefficients( + 5002, {19.1094, 0.5036, 19.0548, 5.8378, 4.5648, 23.3752, 0.487, 62.2061, 4.7861}); + InsertCoefficients( + 5004, {18.9333, 5.764, 19.7131, 0.4655, 3.4182, 14.0049, 0.0193, -0.75830, 3.9182}); + InsertCoefficients( + 5100, {19.6418, 5.3034, 19.0455, 0.4607, 5.0371, 27.9074, 2.6827, 75.2825, 4.5909}); + InsertCoefficients( + 5103, {18.9755, 0.467196, 18.933, 5.22126, 5.10789, 19.5902, 0.288753, 55.5113, 4.69626}); + InsertCoefficients(5105, {19.8685, 5.44853, 19.0302, 0.467973, 2.41253, 14.1259, 0, 0, 4.69263}); + InsertCoefficients( + 5200, {19.9644, 4.81742, 19.0138, 0.420885, 6.14487, 28.5284, 2.5239, 70.8403, 4.352}); + InsertCoefficients( + 5300, {20.1472, 4.347, 18.9949, 0.3814, 7.5138, 27.766, 2.2735, 66.8776, 4.0712}); + InsertCoefficients( + 5301, {20.2332, 4.3579, 18.997, 0.3815, 7.8069, 29.5259, 2.8868, 84.9304, 4.0714}); + InsertCoefficients( + 5400, {20.2933, 3.9282, 19.0298, 0.344, 8.9767, 26.4659, 1.99, 64.2658, 3.7118}); + InsertCoefficients( + 5500, {20.3892, 3.569, 19.1062, 0.3107, 10.662, 24.3879, 1.4953, 213.904, 3.3352}); + InsertCoefficients( + 5501, {20.3524, 3.552, 19.1278, 0.3086, 10.2821, 23.7128, 0.9615, 59.4565, 3.2791}); + InsertCoefficients( + 5600, {20.3361, 3.216, 19.297, 0.2756, 10.888, 20.2073, 2.6959, 167.202, 2.7731}); + InsertCoefficients( + 5602, {20.1807, 3.21367, 19.1136, 0.28331, 10.9054, 20.0558, 0.77634, 51.746, 3.02902}); + InsertCoefficients( + 5700, {20.578, 2.94817, 19.599, 0.244475, 11.3727, 18.7726, 3.28719, 133.124, 2.14678}); + InsertCoefficients( + 5703, {20.2489, 2.9207, 19.3763, 0.250698, 11.6323, 17.8211, 0.336048, 54.9453, 2.4086}); + InsertCoefficients( + 5800, {21.1671, 2.81219, 19.7695, 0.226836, 11.8513, 17.6083, 3.33049, 127.113, 1.86264}); + InsertCoefficients( + 5803, {20.8036, 2.77691, 19.559, 0.23154, 11.9369, 16.5408, 0.612376, 43.1692, 2.09013}); + InsertCoefficients( + 5804, {20.3235, 2.65941, 19.8186, 0.21885, 12.1233, 15.7992, 0.144583, 62.2355, 1.5918}); + InsertCoefficients( + 5900, {22.044, 2.77393, 19.6697, 0.222087, 12.3856, 16.7669, 2.82428, 143.644, 2.0583}); + InsertCoefficients( + 5903, {21.3727, 2.6452, 19.7491, 0.214299, 12.1329, 15.323, 0.97518, 36.4065, 1.77132}); + InsertCoefficients( + 5904, {20.9413, 2.54467, 20.0539, 0.202481, 12.4668, 14.8137, 0.296689, 45.4643, 1.24285}); + InsertCoefficients( + 6000, {22.6845, 2.66248, 19.6847, 0.210628, 12.774, 15.885, 2.85137, 137.903, 1.98486}); + InsertCoefficients( + 6003, {21.961, 2.52722, 19.9339, 0.199237, 12.12, 14.1783, 1.51031, 30.8717, 1.47588}); + InsertCoefficients( + 6100, {23.3405, 2.5627, 19.6095, 0.202088, 13.1235, 15.1009, 2.87516, 132.721, 2.02876}); + InsertCoefficients( + 6103, {22.5527, 2.4174, 20.1108, 0.185769, 12.0671, 13.1275, 2.07492, 27.4491, 1.19499}); + InsertCoefficients( + 6200, {24.0042, 2.47274, 19.4258, 0.196451, 13.4396, 14.3996, 2.89604, 128.007, 2.20963}); + InsertCoefficients( + 6203, {23.1504, 2.31641, 20.2599, 0.174081, 11.9202, 12.1571, 2.71488, 24.8242, 0.954586}); + InsertCoefficients( + 6300, {24.6274, 2.3879, 19.0886, 0.1942, 13.7603, 13.7546, 2.9227, 123.174, 2.5745}); + InsertCoefficients( + 6302, {24.0063, 2.27783, 19.9504, 0.17353, 11.8034, 11.6096, 3.87243, 26.5156, 1.36389}); + InsertCoefficients( + 6303, {23.7497, 2.22258, 20.3745, 0.16394, 11.8509, 11.311, 3.26503, 22.9966, 0.759344}); + InsertCoefficients( + 6400, {25.0709, 2.25341, 19.0798, 0.181951, 13.8518, 12.9331, 3.54545, 101.398, 2.4196}); + InsertCoefficients( + 6403, {24.3466, 2.13553, 20.4208, 0.155525, 11.8708, 10.5782, 3.7149, 21.7029, 0.645089}); + InsertCoefficients( + 6500, {25.8976, 2.24256, 18.2185, 0.196143, 14.3167, 12.6648, 2.95354, 115.362, 3.58324}); + InsertCoefficients( + 6503, {24.9559, 2.05601, 20.3271, 0.149525, 12.2471, 10.0499, 3.773, 21.2773, 0.691967}); + InsertCoefficients( + 6600, {26.507, 2.1802, 17.6383, 0.202172, 14.5596, 12.1899, 2.96577, 111.874, 4.29728}); + InsertCoefficients( + 6603, {25.5395, 1.9804, 20.2861, 0.143384, 11.9812, 9.34972, 4.50073, 19.581, 0.68969}); + InsertCoefficients( + 6700, {26.9049, 2.07051, 17.294, 0.19794, 14.5583, 11.4407, 3.63837, 92.6566, 4.56796}); + InsertCoefficients( + 6703, {26.1296, 1.91072, 20.0994, 0.139358, 11.9788, 8.80018, 4.93676, 18.5908, 0.852795}); + InsertCoefficients( + 6800, {27.6563, 2.07356, 16.4285, 0.223545, 14.9779, 11.3604, 2.98233, 105.703, 5.92046}); + InsertCoefficients( + 6803, {26.722, 1.84659, 19.7748, 0.13729, 12.1506, 8.36225, 5.17379, 17.8974, 1.17613}); + InsertCoefficients( + 6900, {28.1819, 2.02859, 15.8851, 0.238849, 15.1542, 10.9975, 2.98706, 102.961, 6.75621}); + InsertCoefficients( + 6903, {27.3083, 1.78711, 19.332, 0.136974, 12.3339, 7.96778, 5.38348, 17.2922, 1.63929}); + InsertCoefficients( + 7000, {28.6641, 1.9889, 15.4345, 0.257119, 15.3087, 10.6647, 2.98963, 100.417, 7.56672}); + InsertCoefficients( + 7002, {28.1209, 1.78503, 17.6817, 0.15997, 13.3335, 8.18304, 5.14657, 20.39, 3.70983}); + InsertCoefficients( + 7003, {27.8917, 1.73272, 18.7614, 0.13879, 12.6072, 7.64412, 5.47647, 16.8153, 2.26001}); + InsertCoefficients( + 7100, {28.9476, 1.90182, 15.2208, 9.98519, 15.1, 0.261033, 3.71601, 84.3298, 7.97628}); + InsertCoefficients( + 7103, {28.4628, 1.68216, 18.121, 0.142292, 12.8429, 7.33727, 5.59415, 16.3535, 2.97573}); + InsertCoefficients( + 7200, {29.144, 1.83262, 15.1726, 9.5999, 14.7586, 0.275116, 4.30013, 72.029, 8.58154}); + InsertCoefficients( + 7204, {28.8131, 1.59136, 18.4601, 0.128903, 12.7285, 6.76232, 5.59927, 14.0366, 2.39699}); + InsertCoefficients( + 7300, {29.2024, 1.77333, 15.2293, 9.37046, 14.5135, 0.295977, 4.76492, 63.3644, 9.24354}); + InsertCoefficients( + 7305, {29.1587, 1.50711, 18.8407, 0.116741, 12.8268, 6.31524, 5.38695, 12.4244, 1.78555}); + InsertCoefficients( + 7400, {29.0818, 1.72029, 15.43, 9.2259, 14.4327, 0.321703, 5.11982, 57.056, 9.8875}); + InsertCoefficients( + 7406, {29.4936, 1.42755, 19.3763, 0.104621, 13.0544, 5.93667, 5.06412, 11.1972, 1.01074}); + InsertCoefficients( + 7500, {28.7621, 1.67191, 15.7189, 9.09227, 14.5564, 0.3505, 5.44174, 52.0861, 10.472}); + InsertCoefficients( + 7600, {28.1894, 1.62903, 16.155, 8.97948, 14.9305, 0.382661, 5.67589, 48.1647, 11.0005}); + InsertCoefficients( + 7604, {30.419, 1.37113, 15.2637, 6.84706, 14.7458, 0.165191, 5.06795, 18.003, 6.49804}); + InsertCoefficients( + 7700, {27.3049, 1.59279, 16.7296, 8.86553, 15.6115, 0.417916, 5.83377, 45.0011, 11.4722}); + InsertCoefficients( + 7703, {30.4156, 1.34323, 15.862, 7.10909, 13.6145, 0.204633, 5.82008, 20.3254, 8.27903}); + InsertCoefficients( + 7704, {30.7058, 1.30923, 15.5512, 6.71983, 14.2326, 0.167252, 5.53672, 17.4911, 6.96824}); + InsertCoefficients( + 7800, {27.0059, 1.51293, 17.7639, 8.81174, 15.7131, 0.424593, 5.7837, 38.6103, 11.6883}); + InsertCoefficients( + 7802, {29.8429, 1.32927, 16.7224, 7.38979, 13.2153, 0.263297, 6.35234, 22.9426, 9.85329}); + InsertCoefficients( + 7804, {30.9612, 1.24813, 15.9829, 6.60834, 13.7348, 0.16864, 5.92034, 16.9392, 7.39534}); + InsertCoefficients( + 7900, {16.8819, 0.4611, 18.5913, 8.6216, 25.5582, 1.4826, 5.86, 36.3956, 12.0658}); + InsertCoefficients( + 7901, {28.0109, 1.35321, 17.8204, 7.7395, 14.3359, 0.356752, 6.58077, 26.4043, 11.2299}); + InsertCoefficients( + 7903, {30.6886, 1.2199, 16.9029, 6.82872, 12.7801, 0.212867, 6.52354, 18.659, 9.0968}); + InsertCoefficients( + 8000, {20.6809, 0.545, 19.0417, 8.4484, 21.6575, 1.5729, 5.9676, 38.3246, 12.6089}); + InsertCoefficients( + 8001, {25.0853, 1.39507, 18.4973, 7.65105, 16.8883, 0.443378, 6.48216, 28.2262, 12.0205}); + InsertCoefficients( + 8002, {29.5641, 1.21152, 18.06, 7.05639, 12.8374, 0.284738, 6.89912, 20.7482, 10.6268}); + InsertCoefficients( + 8100, {27.5446, 0.65515, 19.1584, 8.70751, 15.538, 1.96347, 5.52593, 45.8149, 13.1746}); + InsertCoefficients( + 8101, {21.3985, 1.4711, 20.4723, 0.517394, 18.7478, 7.43463, 6.82847, 28.8482, 12.5258}); + InsertCoefficients( + 8103, {30.8695, 1.1008, 18.3481, 6.53852, 11.9328, 0.219074, 7.00574, 17.2114, 9.8027}); + InsertCoefficients( + 8200, {31.0617, 0.6902, 13.0637, 2.3576, 18.442, 8.618, 5.9696, 47.2579, 13.4118}); + InsertCoefficients( + 8202, {21.7886, 1.3366, 19.5682, 0.488383, 19.1406, 6.7727, 7.01107, 23.8132, 12.4734}); + InsertCoefficients( + 8204, {32.1244, 1.00566, 18.8003, 6.10926, 12.0175, 0.147041, 6.96886, 14.714, 8.08428}); + InsertCoefficients( + 8300, {33.3689, 0.704, 12.951, 2.9238, 16.5877, 8.7937, 6.4692, 48.0093, 13.5782}); + InsertCoefficients( + 8303, {21.8053, 1.2356, 19.5026, 6.24149, 19.1053, 0.469999, 7.10295, 20.3185, 12.4711}); + InsertCoefficients( + 8305, {33.5364, 0.91654, 25.0946, 0.39042, 19.2497, 5.71414, 6.91555, 12.8285, -6.7994}); + InsertCoefficients( + 8400, {34.6726, 0.700999, 15.4733, 3.55078, 13.1138, 9.55642, 7.02588, 47.0045, 13.677}); + InsertCoefficients( + 8500, {35.3163, 0.68587, 19.0211, 3.97458, 9.49887, 11.3824, 7.42518, 45.4715, 13.7108}); + InsertCoefficients( + 8600, {35.5631, 0.6631, 21.2816, 4.0691, 8.0037, 14.0422, 7.4433, 44.2473, 13.6905}); + InsertCoefficients( + 8700, {35.9299, 0.646453, 23.0547, 4.17619, 12.1439, 23.1052, 2.11253, 150.645, 13.7247}); + InsertCoefficients( + 8800, {35.763, 0.616341, 22.9064, 3.87135, 12.4739, 19.9887, 3.21097, 142.325, 13.6211}); + InsertCoefficients( + 8802, {35.215, 0.604909, 21.67, 3.5767, 7.91342, 12.601, 7.65078, 29.8436, 13.5431}); + InsertCoefficients( + 8900, {35.6597, 0.589092, 23.1032, 3.65155, 12.5977, 18.599, 4.08655, 117.02, 13.5266}); + InsertCoefficients( + 8903, {35.1736, 0.579689, 22.1112, 3.41437, 8.19216, 12.9187, 7.05545, 25.9443, 13.4637}); + InsertCoefficients( + 9000, {35.5645, 0.563359, 23.4219, 3.46204, 12.7473, 17.8309, 4.80703, 99.1722, 13.4314}); + InsertCoefficients( + 9004, {35.1007, 0.555054, 22.4418, 3.24498, 9.78554, 13.4661, 5.29444, 23.9533, 13.376}); + InsertCoefficients( + 9100, {35.8847, 0.547751, 23.2948, 3.41519, 14.1891, 16.9235, 4.17287, 105.251, 13.4287}); + InsertCoefficients( + 9200, {36.0228, 0.5293, 23.4128, 3.3253, 14.9491, 16.0927, 4.188, 100.613, 13.3966}); + InsertCoefficients( + 9203, {35.5747, 0.52048, 22.5259, 3.12293, 12.2165, 12.7148, 5.37073, 26.3394, 13.3092}); + InsertCoefficients( + 9204, {35.3715, 0.516598, 22.5326, 3.05053, 12.0291, 12.5723, 4.7984, 23.4582, 13.2671}); + InsertCoefficients( + 9206, {34.8509, 0.507079, 22.7584, 2.8903, 14.0099, 13.1767, 1.21457, 25.2017, 13.1665}); + InsertCoefficients( + 9300, {36.1874, 0.511929, 23.5964, 3.25396, 15.6402, 15.3622, 4.1855, 97.4908, 13.3573}); + InsertCoefficients( + 9303, {35.7074, 0.502322, 22.613, 3.03807, 12.9898, 12.1449, 5.43227, 25.4928, 13.2544}); + InsertCoefficients( + 9304, {35.5103, 0.498626, 22.5787, 2.96627, 12.7766, 11.9484, 4.92159, 22.7502, 13.2116}); + InsertCoefficients( + 9306, {35.0136, 0.48981, 22.7286, 2.81099, 14.3884, 12.33, 1.75669, 22.6581, 13.113}); + InsertCoefficients( + 9400, {36.5254, 0.499384, 23.8083, 3.26371, 16.7707, 14.9455, 3.47947, 105.98, 13.3812}); + InsertCoefficients( + 9403, {35.84, 0.484938, 22.7169, 2.96118, 13.5807, 11.5331, 5.66016, 24.3992, 13.1991}); + InsertCoefficients( + 9404, {35.6493, 0.481422, 22.646, 2.8902, 13.3595, 11.316, 5.18831, 21.8301, 13.1555}); + InsertCoefficients( + 9406, {35.1736, 0.473204, 22.7181, 2.73848, 14.7635, 11.553, 2.28678, 20.9303, 13.0582}); + InsertCoefficients( + 9500, {36.6706, 0.483629, 24.0992, 3.20647, 17.3415, 14.3136, 3.49331, 102.273, 13.3592}); + InsertCoefficients( + 9600, {36.6488, 0.465154, 24.4096, 3.08997, 17.399, 13.4346, 4.21665, 88.4834, 13.2887}); + InsertCoefficients( + 9700, {36.7881, 0.451018, 24.7736, 3.04619, 17.8919, 12.8946, 4.23284, 86.003, 13.2754}); + InsertCoefficients( + 9800, {36.9185, 0.437533, 25.1995, 3.00775, 18.3317, 12.4044, 4.24391, 83.7881, 13.2674}); + + loadedIndex = -1; +} diff --git a/source/materials/src/G4AtomicShells.cc b/source/materials/src/G4AtomicShells.cc index 43bc3fac792..e6ce0ebbffa 100644 --- a/source/materials/src/G4AtomicShells.cc +++ b/source/materials/src/G4AtomicShells.cc @@ -22,8 +22,6 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... // 24-04-98, implementation of the first version, V. Grichine // 16-11-98, GetBindingEnergy(Z,ShellNb), M.Maire @@ -34,15 +32,15 @@ // Electron Binding energy from Table of Isotopes 8th Ed // Electron Configuration from CRC Handbook of Chemestry // and Physics 8th Ed -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... #include "G4AtomicShells.hh" + #include "G4SystemOfUnits.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -const G4int -G4AtomicShells::fNumberOfShells[105] = +// clang-format off +const G4int G4AtomicShells::fNumberOfShells[105] = { 1, // nonexistent zero element 1, 1, 2, 2, 3, 3, 4, 4, 3, 4, // 1 - 10 @@ -63,8 +61,7 @@ G4AtomicShells::fNumberOfShells[105] = //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -const G4int -G4AtomicShells::fIndexOfShells[105] = +const G4int G4AtomicShells::fIndexOfShells[105] = { 0, // nonexistent zero element 1, 2, 3, 5, 7, 10, 13, 17, 21, 24, // 1 - 10 @@ -82,8 +79,7 @@ G4AtomicShells::fIndexOfShells[105] = //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -const G4double -G4AtomicShells::fBindingEnergies[1650] = +const G4double G4AtomicShells::fBindingEnergies[1650] = { 0.0, // Nonexisting zero element @@ -548,8 +544,7 @@ G4AtomicShells::fBindingEnergies[1650] = 55.0, 33.0, 5.0, 7.5 }; -const G4int -G4AtomicShells::fNumberOfElectrons[1650] = +const G4int G4AtomicShells::fNumberOfElectrons[1650] = { 0, // nonexistent zero element // H --------------------------------------------------------- @@ -761,40 +756,44 @@ G4AtomicShells::fNumberOfElectrons[1650] = // Rf --------------------------------------------------------------- 2, 2, 2, 4, 2, 2, 4, 4, 6, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 4, 6, 6, 8, 2, 2, 4, 2, 2 //=104 }; +// clang-format on //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -G4int -G4AtomicShells::GetNumberOfShells(G4int Z) +G4int G4AtomicShells::GetNumberOfShells(G4int Z) { #ifdef G4VERBOSE - if(Z<0 || Z>104) { Z = PrintErrorZ(Z, "GetNumberOfShells"); } + if (Z < 0 || Z > 104) { + Z = PrintErrorZ(Z, "GetNumberOfShells"); + } #endif return fNumberOfShells[Z]; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -G4double -G4AtomicShells::GetBindingEnergy(G4int Z, G4int ShellNb) +G4double G4AtomicShells::GetBindingEnergy(G4int Z, G4int ShellNb) { #ifdef G4VERBOSE - if(Z<0 || Z>104) { Z = PrintErrorZ(Z, "GetBindingEnergy"); } - if(ShellNb < 0 || ShellNb>=fNumberOfShells[Z]) { + if (Z < 0 || Z > 104) { + Z = PrintErrorZ(Z, "GetBindingEnergy"); + } + if (ShellNb < 0 || ShellNb >= fNumberOfShells[Z]) { ShellNb = PrintErrorShell(Z, ShellNb, "GetBindingEnergy"); } #endif - return fBindingEnergies[fIndexOfShells[Z] + ShellNb]*CLHEP::eV; + return fBindingEnergies[fIndexOfShells[Z] + ShellNb] * CLHEP::eV; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -G4int -G4AtomicShells::GetNumberOfElectrons(G4int Z, G4int ShellNb) +G4int G4AtomicShells::GetNumberOfElectrons(G4int Z, G4int ShellNb) { #ifdef G4VERBOSE - if(Z<0 || Z>104) { Z = PrintErrorZ(Z, "GetNumberOfElectrons"); } - if(ShellNb < 0 || ShellNb>=fNumberOfShells[Z]) { + if (Z < 0 || Z > 104) { + Z = PrintErrorZ(Z, "GetNumberOfElectrons"); + } + if (ShellNb < 0 || ShellNb >= fNumberOfShells[Z]) { ShellNb = PrintErrorShell(Z, ShellNb, "GetNumberOfElectrons"); } #endif @@ -803,33 +802,40 @@ G4AtomicShells::GetNumberOfElectrons(G4int Z, G4int ShellNb) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -G4int -G4AtomicShells::GetNumberOfFreeElectrons(G4int Z, G4double th) +G4int G4AtomicShells::GetNumberOfFreeElectrons(G4int Z, G4double th) { #ifdef G4VERBOSE - if(Z<0 || Z>104) { Z = PrintErrorZ(Z, "GetNumberOfFreeElectrons"); } + if (Z < 0 || Z > 104) { + Z = PrintErrorZ(Z, "GetNumberOfFreeElectrons"); + } #endif G4int idx = fIndexOfShells[Z]; - G4int idxmax = idx + fNumberOfShells[Z]; + G4int idxmax = idx + fNumberOfShells[Z]; G4int n = 0; - for (G4int i=idx; i104) { Z = PrintErrorZ(Z, "GetTotalBindingEnergy"); } + if (Z < 0 || Z > 104) { + Z = PrintErrorZ(Z, "GetTotalBindingEnergy"); + } #endif G4int idx = fIndexOfShells[Z]; - G4int idxmax = idx + fNumberOfShells[Z]; + G4int idxmax = idx + fNumberOfShells[Z]; G4double energy = 0.0; - for (G4int i=idx; i 120) { Z = PrintErrorZ(Z, "GetNumberOfShells"); } + if (Z < 0 || Z > 120) { + Z = PrintErrorZ(Z, "GetNumberOfShells"); + } #endif return fNumberOfShells[Z]; } - -G4double -G4AtomicShells_XDB_EADL::GetBindingEnergy(G4int Z, G4int ShellNb) +G4double G4AtomicShells_XDB_EADL::GetBindingEnergy(G4int Z, G4int ShellNb) { #ifdef G4VERBOSE - if (Z < 0 || Z > 120) { Z = PrintErrorZ(Z, "GetBindingEnergy"); } - if(ShellNb < 0 || ShellNb >= fNumberOfShells[Z]) { - ShellNb = PrintErrorShell(Z, ShellNb, "GetBindingEnergy"); + if (Z < 0 || Z > 120) { + Z = PrintErrorZ(Z, "GetBindingEnergy"); + } + if (ShellNb < 0 || ShellNb >= fNumberOfShells[Z]) { + ShellNb = PrintErrorShell(Z, ShellNb, "GetBindingEnergy"); } #endif - return fBindingEnergies[fIndexOfShells[Z] + ShellNb]*CLHEP::keV; + return fBindingEnergies[fIndexOfShells[Z] + ShellNb] * CLHEP::keV; } - -G4int -G4AtomicShells_XDB_EADL::GetNumberOfElectrons(G4int Z, G4int ShellNb) +G4int G4AtomicShells_XDB_EADL::GetNumberOfElectrons(G4int Z, G4int ShellNb) { #ifdef G4VERBOSE - if (Z < 0 || Z > 120) { Z = PrintErrorZ(Z, "GetNumberOfElectrons"); } - if(ShellNb < 0 || ShellNb >= fNumberOfShells[Z]) { - ShellNb = PrintErrorShell(Z, ShellNb, "GetNumberOfElectrons"); + if (Z < 0 || Z > 120) { + Z = PrintErrorZ(Z, "GetNumberOfElectrons"); + } + if (ShellNb < 0 || ShellNb >= fNumberOfShells[Z]) { + ShellNb = PrintErrorShell(Z, ShellNb, "GetNumberOfElectrons"); } #endif return fNumberOfElectrons[fIndexOfShells[Z] + ShellNb]; @@ -1237,17 +1236,20 @@ G4AtomicShells_XDB_EADL::GetNumberOfElectrons(G4int Z, G4int ShellNb) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -G4int -G4AtomicShells_XDB_EADL::GetNumberOfFreeElectrons(G4int Z, G4double th) +G4int G4AtomicShells_XDB_EADL::GetNumberOfFreeElectrons(G4int Z, G4double th) { #ifdef G4VERBOSE - if(Z<0 || Z>120) { Z = PrintErrorZ(Z, "GetNumberOfFreeElectrons"); } + if (Z < 0 || Z > 120) { + Z = PrintErrorZ(Z, "GetNumberOfFreeElectrons"); + } #endif G4int idx = fIndexOfShells[Z]; - G4int idxmax = idx + fNumberOfShells[Z]; + G4int idxmax = idx + fNumberOfShells[Z]; G4int n = 0; - for (G4int i=idx; i 120) { Z = PrintErrorZ(Z, "GetTotalBindingEnergy"); } + if (Z < 0 || Z > 120) { + Z = PrintErrorZ(Z, "GetTotalBindingEnergy"); + } #endif G4int idx = fIndexOfShells[Z]; - G4int idxmax = idx + fNumberOfShells[Z]; + G4int idxmax = idx + fNumberOfShells[Z]; G4double energy = 0.0; - for (G4int i=idx; iGetElementVector())) { + G4double AFF = G4AtomicFormFactor::GetManager()->Get(kScatteringVector, anElement->GetZ()); + + G4complex GFS = G4complex(0., 0.); -G4complex G4CrystalExtension:: -ComputeStructureFactor(G4double kScatteringVector, - G4int h, - G4int k, - G4int l){ - //SF == Structure Factor - //AFF == Atomic Form Factor - //GFS == Geometrical Structure Factor - G4complex SF = G4complex(0.,0.); - - for(auto & anElement: *(fMaterial->GetElementVector())){ - G4double AFF = G4AtomicFormFactor::GetManager()->Get(kScatteringVector,anElement->GetZ()); - - G4complex GFS = G4complex(0.,0.); - - for(const auto& anAtomPos : GetAtomBase(anElement)->GetPos()) - { - G4double aDouble = h * anAtomPos.x() - + k * anAtomPos.y() - + l * anAtomPos.z(); - GFS += G4complex(std::cos(CLHEP::twopi * aDouble), - std::sin(CLHEP::twopi * aDouble)); - } - - - SF += G4complex(AFF * GFS.real(),AFF * GFS.imag()); + for (const auto& anAtomPos : GetAtomBase(anElement)->GetPos()) { + G4double aDouble = h * anAtomPos.x() + k * anAtomPos.y() + l * anAtomPos.z(); + GFS += G4complex(std::cos(CLHEP::twopi * aDouble), std::sin(CLHEP::twopi * aDouble)); } - return SF; + + SF += G4complex(AFF * GFS.real(), AFF * GFS.imag()); + } + return SF; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4complex G4CrystalExtension:: -ComputeStructureFactorGeometrical(G4int h, - G4int k, - G4int l){ - //GFS == Geometrical Structure Form Factor - G4complex GFS = G4complex(0.,0.); - - for(auto & anElement: *(fMaterial->GetElementVector())){ - for(const auto& anAtomPos : GetAtomBase(anElement)->GetPos()) - { - G4double aDouble = - h * anAtomPos.x() + k * anAtomPos.y() + l * anAtomPos.z(); - GFS += G4complex(std::cos(CLHEP::twopi * aDouble), - std::sin(CLHEP::twopi * aDouble)); - } +G4complex G4CrystalExtension::ComputeStructureFactorGeometrical(G4int h, G4int k, G4int l) +{ + // GFS == Geometrical Structure Form Factor + G4complex GFS = G4complex(0., 0.); + + for (auto& anElement : *(fMaterial->GetElementVector())) { + for (const auto& anAtomPos : GetAtomBase(anElement)->GetPos()) { + G4double aDouble = h * anAtomPos.x() + k * anAtomPos.y() + l * anAtomPos.z(); + GFS += G4complex(std::cos(CLHEP::twopi * aDouble), std::sin(CLHEP::twopi * aDouble)); } - return GFS; + } + return GFS; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4CrystalExtension::SetElReduced(const ReducedElasticity& mat) { - for (size_t i=0; i<6; ++i) { - for (size_t j=0; j<6; ++j) { +void G4CrystalExtension::SetElReduced(const ReducedElasticity& mat) +{ + for (size_t i = 0; i < 6; ++i) { + for (size_t j = 0; j < 6; ++j) { fElReduced[i][j] = mat[i][j]; } } @@ -109,50 +87,49 @@ void G4CrystalExtension::SetElReduced(const ReducedElasticity& mat) { //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4CrystalExtension::SetCpq(G4int p, G4int q, G4double value) { - if(p > 0 && p < 7 && q > 0 && q < 7) - { +void G4CrystalExtension::SetCpq(G4int p, G4int q, G4double value) +{ + if (p > 0 && p < 7 && q > 0 && q < 7) { fElReduced[p - 1][q - 1] = value; } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4CrystalAtomBase* G4CrystalExtension::GetAtomBase(const G4Element* anElement){ - if((theCrystalAtomBaseMap.count(anElement)<1)){ - G4String astring = "Atom base for element " + anElement->GetName() - + " is not registered." ; - G4Exception ("G4CrystalExtension::GetAtomBase()", "cry001", JustWarning,astring); - - AddAtomBase(anElement, new G4CrystalAtomBase()); - } - return theCrystalAtomBaseMap[anElement]; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +G4CrystalAtomBase* G4CrystalExtension::GetAtomBase(const G4Element* anElement) +{ + if ((theCrystalAtomBaseMap.count(anElement) < 1)) { + G4String astring = "Atom base for element " + anElement->GetName() + " is not registered."; + G4Exception("G4CrystalExtension::GetAtomBase()", "cry001", JustWarning, astring); -G4bool G4CrystalExtension::GetAtomPos(const G4Element* anEl, std::vector& vecout){ - std::vector pos; - for(auto & asinglepos: GetAtomBase(anEl)->GetPos()){ - pos.clear(); - theUnitCell->FillAtomicPos(asinglepos,pos); - vecout.insert(std::end(vecout), std::begin(pos), std::end(pos)); - } - return true; + AddAtomBase(anElement, new G4CrystalAtomBase()); + } + return theCrystalAtomBaseMap[anElement]; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool G4CrystalExtension::GetAtomPos(std::vector& vecout){ - std::vector pos; - vecout.clear(); - for(auto & anElement: *(fMaterial->GetElementVector())){ - pos.clear(); - GetAtomPos(anElement,pos); - vecout.insert(std::end(vecout), std::begin(pos), std::end(pos)); - } - return true; +G4bool G4CrystalExtension::GetAtomPos(const G4Element* anEl, std::vector& vecout) +{ + std::vector pos; + for (auto& asinglepos : GetAtomBase(anEl)->GetPos()) { + pos.clear(); + theUnitCell->FillAtomicPos(asinglepos, pos); + vecout.insert(std::end(vecout), std::begin(pos), std::end(pos)); + } + return true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +G4bool G4CrystalExtension::GetAtomPos(std::vector& vecout) +{ + std::vector pos; + vecout.clear(); + for (auto& anElement : *(fMaterial->GetElementVector())) { + pos.clear(); + GetAtomPos(anElement, pos); + vecout.insert(std::end(vecout), std::begin(pos), std::end(pos)); + } + return true; +} diff --git a/source/materials/src/G4CrystalUnitCell.cc b/source/materials/src/G4CrystalUnitCell.cc index b00c1e7154d..80fad9a677c 100644 --- a/source/materials/src/G4CrystalUnitCell.cc +++ b/source/materials/src/G4CrystalUnitCell.cc @@ -23,616 +23,583 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -// 21-04-16, created by E.Bagli - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "G4CrystalUnitCell.hh" + #include "G4PhysicalConstants.hh" + #include -G4CrystalUnitCell::G4CrystalUnitCell(G4double sizeA, - G4double sizeB, - G4double sizeC, - G4double alpha, - G4double beta, - G4double gamma, - G4int spacegroup): -theSpaceGroup(spacegroup), -theSize(G4ThreeVector(sizeA,sizeB,sizeC)), -theAngle(G4ThreeVector(alpha,beta,gamma)) +G4CrystalUnitCell::G4CrystalUnitCell(G4double sizeA, G4double sizeB, G4double sizeC, G4double alpha, + G4double beta, G4double gamma, G4int spacegroup) + : theSize(G4ThreeVector(sizeA, sizeB, sizeC)), + theAngle(G4ThreeVector(alpha, beta, gamma)), + theSpaceGroup(spacegroup) { - - nullVec = G4ThreeVector(0.,0.,0.); - theUnitBasis[0] = CLHEP::HepXHat; - theUnitBasis[1] = CLHEP::HepYHat; - theUnitBasis[2] = CLHEP::HepZHat; - - theRecUnitBasis[0] = CLHEP::HepXHat; - theRecUnitBasis[1] = CLHEP::HepYHat; - theRecUnitBasis[2] = CLHEP::HepZHat; - - cosa=std::cos(alpha), cosb=std::cos(beta), cosg=std::cos(gamma); - sina=std::sin(alpha), sinb=std::sin(beta), sing=std::sin(gamma); - - cosar = (cosb*cosg-cosa)/(sinb*sing); - cosbr = (cosa*cosg-cosb)/(sina*sing); - cosgr = (cosa*cosb-cosg)/(sina*sinb); - - theVolume = ComputeCellVolume(); - theRecVolume = 1. / theVolume; - - theRecSize[0] = sizeB * sizeC * sina / theVolume; - theRecSize[1] = sizeC * sizeA * sinb / theVolume; - theRecSize[2] = sizeA * sizeB * sing / theVolume; - - theRecAngle[0] = std::acos(cosar); - theRecAngle[1] = std::acos(cosbr); - theRecAngle[2] = std::acos(cosgr); - - G4double x3,y3,z3; - - switch (GetLatticeSystem(theSpaceGroup)) { - case Amorphous: - break; - case Cubic: // Cubic, C44 set - break; - case Tetragonal: - break; - case Orthorhombic: - break; - case Rhombohedral: - theUnitBasis[1].rotateZ(gamma-CLHEP::halfpi); // X-Y opening angle - // Z' axis computed by hand to get both opening angles right - // X'.Z' = cos(alpha), Y'.Z' = cos(beta), solve for Z' components - x3=cosa, y3=(cosb-cosa*cosg)/sing, z3=std::sqrt(1.-x3*x3-y3*y3); - theUnitBasis[2] = G4ThreeVector(x3, y3, z3).unit(); - break; - case Monoclinic: - theUnitBasis[2].rotateX(beta-CLHEP::halfpi); // Z-Y opening angle - break; - case Triclinic: - theUnitBasis[1].rotateZ(gamma-CLHEP::halfpi); // X-Y opening angle - // Z' axis computed by hand to get both opening angles right - // X'.Z' = cos(alpha), Y'.Z' = cos(beta), solve for Z' components - x3=cosa, y3=(cosb-cosa*cosg)/sing, z3=std::sqrt(1.-x3*x3-y3*y3); - theUnitBasis[2] = G4ThreeVector(x3, y3, z3).unit(); - break; - case Hexagonal: // Tetragonal, C16=0 - theUnitBasis[1].rotateZ(30.*CLHEP::deg); // X-Y opening angle - break; - default: - break; - } - - for(auto i:{0,1,2}){ - theBasis[i] = theUnitBasis[i] * theSize[i]; - theRecBasis[i] = theRecUnitBasis[i] * theRecSize[i]; - } - - // Initialize sgInfo - /* at first some initialization for SgInfo */ - /* - const T_TabSgName *tsgn = NULL; - - SgInfo.MaxList = 192; - SgInfo.ListSeitzMx = malloc( SgInfo.MaxList * sizeof(*SgInfo.ListSeitzMx) ); - - // no list info needed here - SgInfo.ListRotMxInfo = NULL; - tsgn = FindTabSgNameEntry(SchoenfliesSymbols[theSpaceGroup], 'A'); - - // initialize SgInfo struct - InitSgInfo( &SgInfo ); - SgInfo.TabSgName = tsgn; - if ( tsgn ){ - SgInfo.GenOption = 1; - } - - ParseHallSymbol( SchoenfliesSymbols[theSpaceGroup], &SgInfo ); - CompleteSgInfo( &SgInfo ); - Set_si( &SgInfo ); - */ - + nullVec = G4ThreeVector(0., 0., 0.); + theUnitBasis[0] = CLHEP::HepXHat; + theUnitBasis[1] = CLHEP::HepYHat; + theUnitBasis[2] = CLHEP::HepZHat; + + theRecUnitBasis[0] = CLHEP::HepXHat; + theRecUnitBasis[1] = CLHEP::HepYHat; + theRecUnitBasis[2] = CLHEP::HepZHat; + + cosa = std::cos(alpha), cosb = std::cos(beta), cosg = std::cos(gamma); + sina = std::sin(alpha), sinb = std::sin(beta), sing = std::sin(gamma); + + cosar = (cosb * cosg - cosa) / (sinb * sing); + cosbr = (cosa * cosg - cosb) / (sina * sing); + cosgr = (cosa * cosb - cosg) / (sina * sinb); + + theVolume = ComputeCellVolume(); + theRecVolume = 1. / theVolume; + + theRecSize[0] = sizeB * sizeC * sina / theVolume; + theRecSize[1] = sizeC * sizeA * sinb / theVolume; + theRecSize[2] = sizeA * sizeB * sing / theVolume; + + theRecAngle[0] = std::acos(cosar); + theRecAngle[1] = std::acos(cosbr); + theRecAngle[2] = std::acos(cosgr); + + G4double x3, y3, z3; + + switch (GetLatticeSystem(theSpaceGroup)) { + case Amorphous: + break; + case Cubic: // Cubic, C44 set + break; + case Tetragonal: + break; + case Orthorhombic: + break; + case Rhombohedral: + theUnitBasis[1].rotateZ(gamma - CLHEP::halfpi); // X-Y opening angle + // Z' axis computed by hand to get both opening angles right + // X'.Z' = cos(alpha), Y'.Z' = cos(beta), solve for Z' components + x3 = cosa, y3 = (cosb - cosa * cosg) / sing, z3 = std::sqrt(1. - x3 * x3 - y3 * y3); + theUnitBasis[2] = G4ThreeVector(x3, y3, z3).unit(); + break; + case Monoclinic: + theUnitBasis[2].rotateX(beta - CLHEP::halfpi); // Z-Y opening angle + break; + case Triclinic: + theUnitBasis[1].rotateZ(gamma - CLHEP::halfpi); // X-Y opening angle + // Z' axis computed by hand to get both opening angles right + // X'.Z' = cos(alpha), Y'.Z' = cos(beta), solve for Z' components + x3 = cosa, y3 = (cosb - cosa * cosg) / sing, z3 = std::sqrt(1. - x3 * x3 - y3 * y3); + theUnitBasis[2] = G4ThreeVector(x3, y3, z3).unit(); + break; + case Hexagonal: // Tetragonal, C16=0 + theUnitBasis[1].rotateZ(30. * CLHEP::deg); // X-Y opening angle + break; + default: + break; + } + + for (auto i : {0, 1, 2}) { + theBasis[i] = theUnitBasis[i] * theSize[i]; + theRecBasis[i] = theRecUnitBasis[i] * theRecSize[i]; + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4CrystalUnitCell::~G4CrystalUnitCell(){;} +theLatticeSystemType G4CrystalUnitCell::GetLatticeSystem(G4int aGroup) +{ + if (aGroup >= 1 && aGroup <= 2) { + return Triclinic; + } + if (aGroup >= 3 && aGroup <= 15) { + return Monoclinic; + } + if (aGroup >= 16 && aGroup <= 74) { + return Orthorhombic; + } + if (aGroup >= 75 && aGroup <= 142) { + return Tetragonal; + } + if (aGroup == 146 || aGroup == 148 || aGroup == 155 || aGroup == 160 || aGroup == 161 || + aGroup == 166 || aGroup == 167) + { + return Rhombohedral; + } + if (aGroup >= 143 && aGroup <= 167) { + return Hexagonal; + } + if (aGroup >= 168 && aGroup <= 194) { + return Hexagonal; + } + if (aGroup >= 195 && aGroup <= 230) { + return Cubic; + } + + return Amorphous; +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -theLatticeSystemType G4CrystalUnitCell::GetLatticeSystem(G4int aGroup){ - - if( aGroup >= 1 && aGroup <= 2 ) {return Triclinic;} - else if(aGroup >= 3 && aGroup <= 15 ) {return Monoclinic;} - else if(aGroup >= 16 && aGroup <= 74 ) {return Orthorhombic;} - else if(aGroup >= 75 && aGroup <= 142) {return Tetragonal;} - else if(aGroup == 146 || aGroup == 148 || - aGroup == 155 || aGroup == 160 || - aGroup == 161 || aGroup == 166 || - aGroup == 167) {return Rhombohedral;} - else if(aGroup >= 143 && aGroup <= 167) {return Hexagonal;} - else if(aGroup >= 168 && aGroup <= 194) {return Hexagonal;} - else if(aGroup >= 195 && aGroup <= 230) {return Cubic;} - - return Amorphous; +const G4ThreeVector& G4CrystalUnitCell::GetUnitBasis(G4int idx) const +{ + return (idx >= 0 && idx < 3 ? theUnitBasis[idx] : nullVec); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -/* -theBravaisLatticeType G4CrystalUnitCell::GetBravaisLattice(G4int aGroup){ - ; + +const G4ThreeVector& G4CrystalUnitCell::GetBasis(G4int idx) const +{ + return (idx >= 0 && idx < 3 ? theBasis[idx] : nullVec); } -*/ + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -const G4ThreeVector& G4CrystalUnitCell::GetUnitBasis(G4int idx) const { - return (idx>=0 && idx<3 ? theUnitBasis[idx] : nullVec); +const G4ThreeVector& G4CrystalUnitCell::GetRecUnitBasis(G4int idx) const +{ + return (idx >= 0 && idx < 3 ? theRecUnitBasis[idx] : nullVec); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -const G4ThreeVector& G4CrystalUnitCell::GetBasis(G4int idx) const { - return (idx>=0 && idx<3 ? theBasis[idx] : nullVec); +const G4ThreeVector& G4CrystalUnitCell::GetRecBasis(G4int idx) const +{ + return (idx >= 0 && idx < 3 ? theRecBasis[idx] : nullVec); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -const G4ThreeVector& G4CrystalUnitCell::GetRecUnitBasis(G4int idx) const { - return (idx>=0 && idx<3 ? theRecUnitBasis[idx] : nullVec); +G4ThreeVector G4CrystalUnitCell::GetUnitBasisTrigonal() +{ + // Z' axis computed by hand to get both opening angles right + // X'.Z' = cos(alpha), Y'.Z' = cos(beta), solve for Z' components + G4double x3 = cosa, y3 = (cosb - cosa * cosg) / sing, z3 = std::sqrt(1. - x3 * x3 - y3 * y3); + return G4ThreeVector(x3, y3, z3).unit(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -const G4ThreeVector& G4CrystalUnitCell::GetRecBasis(G4int idx) const { - return (idx>=0 && idx<3 ? theRecBasis[idx] : nullVec); +G4bool G4CrystalUnitCell::FillAtomicUnitPos(G4ThreeVector& pos, std::vector& vecout) +{ + // Just for testing the infrastructure + G4ThreeVector aaa = pos; + vecout.push_back(aaa); + vecout.emplace_back(2., 5., 3.); + return true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4ThreeVector G4CrystalUnitCell::GetUnitBasisTrigonal(){ - // Z' axis computed by hand to get both opening angles right - // X'.Z' = cos(alpha), Y'.Z' = cos(beta), solve for Z' components - G4double x3=cosa, y3=(cosb-cosa*cosg)/sing, z3=std::sqrt(1.-x3*x3-y3*y3); - return G4ThreeVector(x3, y3, z3).unit(); +G4bool G4CrystalUnitCell::FillAtomicPos(G4ThreeVector& posin, std::vector& vecout) +{ + FillAtomicUnitPos(posin, vecout); + for (auto& vec : vecout) { + vec.setX(vec.x() * theSize[0]); + vec.setY(vec.y() * theSize[1]); + vec.setZ(vec.z() * theSize[2]); + } + return true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool G4CrystalUnitCell::FillAtomicUnitPos(G4ThreeVector& pos, std::vector& vecout){ - // Just for testing the infrastructure - G4ThreeVector aaa = pos; - vecout.push_back(aaa); - vecout.emplace_back(2., 5., 3.); - return true; +G4bool G4CrystalUnitCell::FillElReduced(G4double Cij[6][6]) +{ + switch (GetLatticeSystem()) { + case Amorphous: + return FillAmorphous(Cij); + break; + case Cubic: // Cubic, C44 set + return FillCubic(Cij); + break; + case Tetragonal: + return FillTetragonal(Cij); + break; + case Orthorhombic: + return FillOrthorhombic(Cij); + break; + case Rhombohedral: + return FillRhombohedral(Cij); + break; + case Monoclinic: + return FillMonoclinic(Cij); + break; + case Triclinic: + return FillTriclinic(Cij); + break; + case Hexagonal: // Tetragonal, C16=0 + return FillHexagonal(Cij); + break; + default: + break; + } + + return false; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool G4CrystalUnitCell::FillAtomicPos(G4ThreeVector& posin, std::vector& vecout){ - FillAtomicUnitPos(posin,vecout); - for(auto &vec:vecout){ - vec.setX(vec.x()*theSize[0]); - vec.setY(vec.y()*theSize[1]); - vec.setZ(vec.z()*theSize[2]); - } - return true; +G4bool G4CrystalUnitCell::FillAmorphous(G4double Cij[6][6]) const +{ + Cij[3][3] = 0.5 * (Cij[0][0] - Cij[0][1]); + return true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool G4CrystalUnitCell::FillElReduced(G4double Cij[6][6]) { - switch (GetLatticeSystem()) { - case Amorphous: - return FillAmorphous(Cij); - break; - case Cubic: // Cubic, C44 set - return FillCubic(Cij); - break; - case Tetragonal: - return FillTetragonal(Cij); - break; - case Orthorhombic: - return FillOrthorhombic(Cij); - break; - case Rhombohedral: - return FillRhombohedral(Cij); - break; - case Monoclinic: - return FillMonoclinic(Cij); - break; - case Triclinic: - return FillTriclinic(Cij); - break; - case Hexagonal: // Tetragonal, C16=0 - return FillHexagonal(Cij); - break; - default: - break; +G4bool G4CrystalUnitCell::FillCubic(G4double Cij[6][6]) const +{ + G4double C11 = Cij[0][0], C12 = Cij[0][1], C44 = Cij[3][3]; + + for (size_t i = 0; i < 6; i++) { + for (size_t j = i; j < 6; j++) { + if (i < 3 && j < 3) { + Cij[i][j] = (i == j) ? C11 : C12; + } + else if (i == j && i >= 3) { + Cij[i][i] = C44; + } + else { + Cij[i][j] = 0.; + } } - - return false; -} + } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + ReflectElReduced(Cij); -G4bool G4CrystalUnitCell::FillAmorphous(G4double Cij[6][6]) const { - Cij[3][3] = 0.5*(Cij[0][0]-Cij[0][1]); - return true; + return (C11 != 0. && C12 != 0. && C44 != 0.); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool G4CrystalUnitCell::FillCubic(G4double Cij[6][6]) const { - G4double C11=Cij[0][0], C12=Cij[0][1], C44=Cij[3][3]; - - for (size_t i=0; i<6; i++) { - for (size_t j=i; j<6; j++) { - if(i < 3 && j < 3) - { - Cij[i][j] = (i == j) ? C11 : C12; - } - else if(i == j && i >= 3) - { - Cij[i][i] = C44; - } - else - { - Cij[i][j] = 0.; - } - } - } - - ReflectElReduced(Cij); - - return (C11!=0. && C12!=0. && C44!=0.); -} +G4bool G4CrystalUnitCell::FillTetragonal(G4double Cij[6][6]) const +{ + G4double C11 = Cij[0][0], C12 = Cij[0][1], C13 = Cij[0][2], C16 = Cij[0][5]; + G4double C33 = Cij[2][2], C44 = Cij[3][3], C66 = Cij[5][5]; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + Cij[1][1] = C11; // Copy small number of individual elements + Cij[1][2] = C13; + Cij[1][5] = -C16; + Cij[4][4] = C44; -G4bool G4CrystalUnitCell::FillTetragonal(G4double Cij[6][6]) const { - G4double C11=Cij[0][0], C12=Cij[0][1], C13=Cij[0][2], C16=Cij[0][5]; - G4double C33=Cij[2][2], C44=Cij[3][3], C66=Cij[5][5]; - - Cij[1][1] = C11; // Copy small number of individual elements - Cij[1][2] = C13; - Cij[1][5] = -C16; - Cij[4][4] = C44; - - ReflectElReduced(Cij); - - // NOTE: Do not test for C16 != 0., to allow calling from Hexagonal - return (C11!=0. && C12!=0. && C13!=0. && C33!=0. && C44!=0. && C66!=0.); + ReflectElReduced(Cij); + + // NOTE: Do not test for C16 != 0., to allow calling from Hexagonal + return (C11 != 0. && C12 != 0. && C13 != 0. && C33 != 0. && C44 != 0. && C66 != 0.); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool G4CrystalUnitCell::FillOrthorhombic(G4double Cij[6][6]) const { - // No degenerate elements; just check for all non-zero - ReflectElReduced(Cij); - - G4bool good = true; - for (size_t i=0; i<6; i++) { - for(size_t j = i + 1; j < 3; j++) - { - good &= (Cij[i][j] != 0); - } +G4bool G4CrystalUnitCell::FillOrthorhombic(G4double Cij[6][6]) const +{ + // No degenerate elements; just check for all non-zero + ReflectElReduced(Cij); + + G4bool good = true; + for (size_t i = 0; i < 6; i++) { + for (size_t j = i + 1; j < 3; j++) { + good &= (Cij[i][j] != 0); } - - return good; + } + + return good; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool G4CrystalUnitCell::FillRhombohedral(G4double Cij[6][6]) const { - G4double C11=Cij[0][0], C12=Cij[0][1], C13=Cij[0][2], C14=Cij[0][3]; - G4double C15=Cij[0][4], C33=Cij[2][2], C44=Cij[3][3], C66=0.5*(C11-C12); - - Cij[1][1] = C11; // Copy small number of individual elements - Cij[1][2] = C13; - Cij[1][3] = -C14; - Cij[1][4] = -C15; - Cij[3][5] = -C15; - Cij[4][4] = C44; - Cij[4][5] = C14; - - // NOTE: C15 may be zero (c.f. rhombohedral(I) vs. (II)) - return (C11!=0 && C12!=0 && C13!=0 && C14!=0. && - C33!=0. && C44!=0. && C66!=0.); +G4bool G4CrystalUnitCell::FillRhombohedral(G4double Cij[6][6]) const +{ + G4double C11 = Cij[0][0], C12 = Cij[0][1], C13 = Cij[0][2], C14 = Cij[0][3]; + G4double C15 = Cij[0][4], C33 = Cij[2][2], C44 = Cij[3][3], C66 = 0.5 * (C11 - C12); + + Cij[1][1] = C11; // Copy small number of individual elements + Cij[1][2] = C13; + Cij[1][3] = -C14; + Cij[1][4] = -C15; + Cij[3][5] = -C15; + Cij[4][4] = C44; + Cij[4][5] = C14; + + // NOTE: C15 may be zero (c.f. rhombohedral(I) vs. (II)) + return (C11 != 0 && C12 != 0 && C13 != 0 && C14 != 0. && C33 != 0. && C44 != 0. && C66 != 0.); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool G4CrystalUnitCell::FillMonoclinic(G4double Cij[6][6]) const { - // The monoclinic matrix has 13 independent elements with no degeneracies - // Sanity condition is same as orthorhombic, plus C45, C(1,2,3)6 - - return (FillOrthorhombic(Cij) && Cij[0][5]!=0. && Cij[1][5]!=0. && - Cij[2][5] != 0. && Cij[3][4]!=0.); +G4bool G4CrystalUnitCell::FillMonoclinic(G4double Cij[6][6]) const +{ + // The monoclinic matrix has 13 independent elements with no degeneracies + // Sanity condition is same as orthorhombic, plus C45, C(1,2,3)6 + + return (FillOrthorhombic(Cij) && Cij[0][5] != 0. && Cij[1][5] != 0. && Cij[2][5] != 0. && + Cij[3][4] != 0.); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool G4CrystalUnitCell::FillTriclinic(G4double Cij[6][6]) const { - // The triclinic matrix has the entire upper half filled (21 elements) - - ReflectElReduced(Cij); - - G4bool good = true; - for (size_t i=0; i<6; i++) { - for(size_t j = i; j < 6; j++) - { - good &= (Cij[i][j] != 0); - } +G4bool G4CrystalUnitCell::FillTriclinic(G4double Cij[6][6]) const +{ + // The triclinic matrix has the entire upper half filled (21 elements) + + ReflectElReduced(Cij); + + G4bool good = true; + for (size_t i = 0; i < 6; i++) { + for (size_t j = i; j < 6; j++) { + good &= (Cij[i][j] != 0); } - - return good; -} + } + return good; +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool G4CrystalUnitCell::FillHexagonal(G4double Cij[6][6]) const { - Cij[0][5] = 0.; - Cij[4][5] = 0.5*(Cij[0][0] - Cij[0][1]); - return true; +G4bool G4CrystalUnitCell::FillHexagonal(G4double Cij[6][6]) const +{ + Cij[0][5] = 0.; + Cij[4][5] = 0.5 * (Cij[0][0] - Cij[0][1]); + return true; } - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool G4CrystalUnitCell::ReflectElReduced(G4double Cij[6][6]) const { - for (size_t i=1; i<6; i++) { - for (size_t j=i+1; j<6; j++) { - Cij[j][i] = Cij[i][j]; - } +G4bool G4CrystalUnitCell::ReflectElReduced(G4double Cij[6][6]) const +{ + for (size_t i = 1; i < 6; i++) { + for (size_t j = i + 1; j < 6; j++) { + Cij[j][i] = Cij[i][j]; } - return true; + } + return true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4CrystalUnitCell::ComputeCellVolume(){ - G4double a = theSize[0], b = theSize[1], c = theSize[2]; - - switch(GetLatticeSystem()) - { - case Amorphous: - return 0.; - break; - case Cubic: - return a * a * a; - break; - case Tetragonal: - return a * a * c; - break; - case Orthorhombic: - return a * b * c; - break; - case Rhombohedral: - return a*a*a*std::sqrt(1.-3.*cosa*cosa+2.*cosa*cosa*cosa); - break; - case Monoclinic: - return a*b*c*sinb; - break; - case Triclinic: - return a*b*c*std::sqrt(1.-cosa*cosa-cosb*cosb-cosg*cosg*2.*cosa*cosb*cosg); - break; - case Hexagonal: - return std::sqrt(3.0)/2.*a*a*c; - break; - default: - break; - } - - return 0.; +G4double G4CrystalUnitCell::ComputeCellVolume() +{ + G4double a = theSize[0], b = theSize[1], c = theSize[2]; + + switch (GetLatticeSystem()) { + case Amorphous: + return 0.; + break; + case Cubic: + return a * a * a; + break; + case Tetragonal: + return a * a * c; + break; + case Orthorhombic: + return a * b * c; + break; + case Rhombohedral: + return a * a * a * std::sqrt(1. - 3. * cosa * cosa + 2. * cosa * cosa * cosa); + break; + case Monoclinic: + return a * b * c * sinb; + break; + case Triclinic: + return a * b * c * + std::sqrt(1. - cosa * cosa - cosb * cosb - cosg * cosg * 2. * cosa * cosb * cosg); + break; + case Hexagonal: + return std::sqrt(3.0) / 2. * a * a * c; + break; + default: + break; + } + + return 0.; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4CrystalUnitCell::GetIntSp2(G4int h, - G4int k, - G4int l){ - - /* Reference: - Table 2.4, pag. 65 - - @Inbook{Ladd2003, - author="Ladd, Mark and Palmer, Rex", - title="Lattices and Space-Group Theory", - bookTitle="Structure Determination by X-ray Crystallography", - year="2003", - publisher="Springer US", - address="Boston, MA", - pages="51--116", - isbn="978-1-4615-0101-5", - doi="10.1007/978-1-4615-0101-5_2", - url="http://dx.doi.org/10.1007/978-1-4615-0101-5_2" - } - */ - - G4double a = theSize[0], b = theSize[1], c = theSize[2]; - G4double a2 = a*a, b2 = b*b, c2 = c*c; - G4double h2 = h*h, k2 = k*k, l2 = l*l; - - G4double cos2a,sin2a,sin2b; - G4double R,T; - - switch(GetLatticeSystem()) - { - case Amorphous: - return 0.; - break; - case Cubic: - return a2 / ( h2+k2+l2 ); - break; - case Tetragonal: - return 1.0 / ( (h2 + k2)/a2 + l2/c2 ); - break; - case Orthorhombic: - return 1.0 / ( h2/a2 + k2/b2 + l2/c2 ); - break; - case Rhombohedral: - cos2a=cosa*cosa; sin2a=sina*sina; - T = h2+k2+l2+2.*(h*k+k*l+h*l) * ((cos2a-cosa)/sin2a); - R = sin2a / (1. - 3*cos2a + 2.*cos2a*cosa); - return a*a / (T*R); - break; - case Monoclinic: - sin2b=sinb*sinb; - return 1./(1./sin2b * (h2/a2+l2/c2-2*h*l*cosb/(a*c)) + k2/b2); - break; - case Triclinic: - return 1./GetRecIntSp2(h,k,l); - break; - case Hexagonal: - return 1. / ( (4.*(h2+k2+h*k) / (3.*a2)) + l2/c2 ); - break; - default: - break; - } - - return 0.; +G4double G4CrystalUnitCell::GetIntSp2(G4int h, G4int k, G4int l) +{ + /* Reference: + Table 2.4, pag. 65 + + @Inbook{Ladd2003, + author="Ladd, Mark and Palmer, Rex", + title="Lattices and Space-Group Theory", + bookTitle="Structure Determination by X-ray Crystallography", + year="2003", + publisher="Springer US", + address="Boston, MA", + pages="51--116", + isbn="978-1-4615-0101-5", + doi="10.1007/978-1-4615-0101-5_2", + url="http://dx.doi.org/10.1007/978-1-4615-0101-5_2" + } + */ + + G4double a = theSize[0], b = theSize[1], c = theSize[2]; + G4double a2 = a * a, b2 = b * b, c2 = c * c; + G4double h2 = h * h, k2 = k * k, l2 = l * l; + + G4double cos2a, sin2a, sin2b; + G4double R, T; + + switch (GetLatticeSystem()) { + case Amorphous: + return 0.; + break; + case Cubic: + return a2 / (h2 + k2 + l2); + break; + case Tetragonal: + return 1.0 / ((h2 + k2) / a2 + l2 / c2); + break; + case Orthorhombic: + return 1.0 / (h2 / a2 + k2 / b2 + l2 / c2); + break; + case Rhombohedral: + cos2a = cosa * cosa; + sin2a = sina * sina; + T = h2 + k2 + l2 + 2. * (h * k + k * l + h * l) * ((cos2a - cosa) / sin2a); + R = sin2a / (1. - 3 * cos2a + 2. * cos2a * cosa); + return a * a / (T * R); + break; + case Monoclinic: + sin2b = sinb * sinb; + return 1. / (1. / sin2b * (h2 / a2 + l2 / c2 - 2 * h * l * cosb / (a * c)) + k2 / b2); + break; + case Triclinic: + return 1. / GetRecIntSp2(h, k, l); + break; + case Hexagonal: + return 1. / ((4. * (h2 + k2 + h * k) / (3. * a2)) + l2 / c2); + break; + default: + break; + } + + return 0.; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4CrystalUnitCell::GetRecIntSp2(G4int h, - G4int k, - G4int l){ - /* Reference: - Table 2.4, pag. 65 - - @Inbook{Ladd2003, - author="Ladd, Mark and Palmer, Rex", - title="Lattices and Space-Group Theory", - bookTitle="Structure Determination by X-ray Crystallography", - year="2003", - publisher="Springer US", - address="Boston, MA", - pages="51--116", - isbn="978-1-4615-0101-5", - doi="10.1007/978-1-4615-0101-5_2", - url="http://dx.doi.org/10.1007/978-1-4615-0101-5_2" - } - */ - - G4double a = theRecSize[0], b = theRecSize[1], c = theRecSize[2]; - G4double a2 = a*a, b2 = b*b, c2 = c*c; - G4double h2 = h*h, k2 = k*k, l2 = l*l; - - switch(GetLatticeSystem()) - { - case Amorphous: - return 0.; - break; - case Cubic: - return a2 * (h2+k2+l2); - break; - case Tetragonal: - return (h2+k2)*a2 + l2*c2 ; - break; - case Orthorhombic: - return h2*a2 + k2+b2 + h2*c2; - break; - case Rhombohedral: - return (h2+k2+l2+2.*(h*k+k*l+h*l) * cosar)*a2; - break; - case Monoclinic: - return h2*a2+k2*b2+l2*c2+2.*h*l*a*c*cosbr; - break; - case Triclinic: - return h2*a2+k2*b2+l2*c2+2.*k*l*b*c*cosar+2.*l*h*c*a*cosbr+2.*h*k*a*b*cosgr; - break; - case Hexagonal: - return (h2+k2+h*k)*a2 + l2*c2; - break; - default: - break; - } - - return 0.; +G4double G4CrystalUnitCell::GetRecIntSp2(G4int h, G4int k, G4int l) +{ + /* Reference: + Table 2.4, pag. 65 + + @Inbook{Ladd2003, + author="Ladd, Mark and Palmer, Rex", + title="Lattices and Space-Group Theory", + bookTitle="Structure Determination by X-ray Crystallography", + year="2003", + publisher="Springer US", + address="Boston, MA", + pages="51--116", + isbn="978-1-4615-0101-5", + doi="10.1007/978-1-4615-0101-5_2", + url="http://dx.doi.org/10.1007/978-1-4615-0101-5_2" + } + */ + + G4double a = theRecSize[0], b = theRecSize[1], c = theRecSize[2]; + G4double a2 = a * a, b2 = b * b, c2 = c * c; + G4double h2 = h * h, k2 = k * k, l2 = l * l; + + switch (GetLatticeSystem()) { + case Amorphous: + return 0.; + break; + case Cubic: + return a2 * (h2 + k2 + l2); + break; + case Tetragonal: + return (h2 + k2) * a2 + l2 * c2; + break; + case Orthorhombic: + return h2 * a2 + k2 + b2 + h2 * c2; + break; + case Rhombohedral: + return (h2 + k2 + l2 + 2. * (h * k + k * l + h * l) * cosar) * a2; + break; + case Monoclinic: + return h2 * a2 + k2 * b2 + l2 * c2 + 2. * h * l * a * c * cosbr; + break; + case Triclinic: + return h2 * a2 + k2 * b2 + l2 * c2 + 2. * k * l * b * c * cosar + 2. * l * h * c * a * cosbr + + 2. * h * k * a * b * cosgr; + break; + case Hexagonal: + return (h2 + k2 + h * k) * a2 + l2 * c2; + break; + default: + break; + } + + return 0.; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4CrystalUnitCell::GetIntCosAng(G4int h1, - G4int k1, - G4int l1, - G4int h2, - G4int k2, - G4int l2){ - - /* Reference: - Table 2.4, pag. 65 - - @Inbook{Kelly2012, - author="Anthony A. Kelly and Kevin M. Knowles", - title="Appendix 3 Interplanar Spacings and Interplanar Angles", - bookTitle="Crystallography and Crystal Defects, 2nd Edition", - year="2012", - publisher="John Wiley & Sons, Ltd.", - isbn="978-0-470-75014-8", - doi="10.1002/9781119961468", - url="http://onlinelibrary.wiley.com/book/10.1002/9781119961468" - } - */ - - G4double a = theRecSize[0], b = theRecSize[1], c = theRecSize[2]; - G4double a2 = a*a, b2 = b*b, c2 = c*c; - G4double dsp1dsp2; - switch(GetLatticeSystem()) - { - case Amorphous: - return 0.; - break; - case Cubic: - return (h1*h2 + k1*k2 + l1+l2) / (std::sqrt(h1*h1 + k1*k1 + l1*l1) * std::sqrt(h2*h2 + k2*k2 + l2*l2)); - break; - case Tetragonal: - dsp1dsp2 = std::sqrt(GetIntSp2(h1,k1,l1)*GetIntSp2(h2,k2,l2)); - return 0. ; - break; - case Orthorhombic: - dsp1dsp2 = std::sqrt(GetIntSp2(h1,k1,l1)*GetIntSp2(h2,k2,l2)); - return dsp1dsp2 * (h1*h2*a2 + k1*k2*a2 + l1*l2*c2); - break; - case Rhombohedral: - dsp1dsp2 = std::sqrt(GetIntSp2(h1,k1,l1)*GetIntSp2(h2,k2,l2)); - return dsp1dsp2 * (h1*h2*a2 + k1*k2*b2 + l1*l2*c2+ - (k1*l2+k2*l1)*b*c*cosar+ - (h1*l2+h2*l1)*a*c*cosbr+ - (h1*k2+h2*k1)*a*b*cosgr); - break; - case Monoclinic: - dsp1dsp2 = std::sqrt(GetIntSp2(h1,k1,l1)*GetIntSp2(h2,k2,l2)); - return dsp1dsp2 * (h1*h2*a2 + k1*k2*b2 + l1*l2*c2+ - (k1*l2+k2*l1)*b*c*cosar+ - (h1*l2+h2*l1)*a*c*cosbr+ - (h1*k2+h2*k1)*a*b*cosgr); - break; - case Triclinic: - dsp1dsp2 = std::sqrt(GetIntSp2(h1,k1,l1)*GetIntSp2(h2,k2,l2)); - return dsp1dsp2 * (h1*h2*a2 + k1*k2*b2 + l1*l2*c2+ - (k1*l2+k2*l1)*b*c*cosar+ - (h1*l2+h2*l1)*a*c*cosbr+ - (h1*k2+h2*k1)*a*b*cosgr); - break; - case Hexagonal: - dsp1dsp2 = std::sqrt(GetIntSp2(h1,k1,l1)*GetIntSp2(h2,k2,l2)); - return dsp1dsp2 *( (h1*h2 + k1*k2 + 0.5*(h1*k2+k1*h2))*a2 + l1*l2*c2); - break; - default: - break; - } - - return 0.; +G4double G4CrystalUnitCell::GetIntCosAng(G4int h1, G4int k1, G4int l1, G4int h2, G4int k2, G4int l2) +{ + /* Reference: + Table 2.4, pag. 65 + + @Inbook{Kelly2012, + author="Anthony A. Kelly and Kevin M. Knowles", + title="Appendix 3 Interplanar Spacings and Interplanar Angles", + bookTitle="Crystallography and Crystal Defects, 2nd Edition", + year="2012", + publisher="John Wiley & Sons, Ltd.", + isbn="978-0-470-75014-8", + doi="10.1002/9781119961468", + url="http://onlinelibrary.wiley.com/book/10.1002/9781119961468" + } + */ + + G4double a = theRecSize[0], b = theRecSize[1], c = theRecSize[2]; + G4double a2 = a * a, b2 = b * b, c2 = c * c; + G4double dsp1dsp2; + switch (GetLatticeSystem()) { + case Amorphous: + return 0.; + break; + case Cubic: + return (h1 * h2 + k1 * k2 + l1 + l2) / + (std::sqrt(h1 * h1 + k1 * k1 + l1 * l1) * std::sqrt(h2 * h2 + k2 * k2 + l2 * l2)); + break; + case Tetragonal: + dsp1dsp2 = std::sqrt(GetIntSp2(h1, k1, l1) * GetIntSp2(h2, k2, l2)); + return 0.; + break; + case Orthorhombic: + dsp1dsp2 = std::sqrt(GetIntSp2(h1, k1, l1) * GetIntSp2(h2, k2, l2)); + return dsp1dsp2 * (h1 * h2 * a2 + k1 * k2 * a2 + l1 * l2 * c2); + break; + case Rhombohedral: + dsp1dsp2 = std::sqrt(GetIntSp2(h1, k1, l1) * GetIntSp2(h2, k2, l2)); + return dsp1dsp2 * + (h1 * h2 * a2 + k1 * k2 * b2 + l1 * l2 * c2 + (k1 * l2 + k2 * l1) * b * c * cosar + + (h1 * l2 + h2 * l1) * a * c * cosbr + (h1 * k2 + h2 * k1) * a * b * cosgr); + break; + case Monoclinic: + dsp1dsp2 = std::sqrt(GetIntSp2(h1, k1, l1) * GetIntSp2(h2, k2, l2)); + return dsp1dsp2 * + (h1 * h2 * a2 + k1 * k2 * b2 + l1 * l2 * c2 + (k1 * l2 + k2 * l1) * b * c * cosar + + (h1 * l2 + h2 * l1) * a * c * cosbr + (h1 * k2 + h2 * k1) * a * b * cosgr); + break; + case Triclinic: + dsp1dsp2 = std::sqrt(GetIntSp2(h1, k1, l1) * GetIntSp2(h2, k2, l2)); + return dsp1dsp2 * + (h1 * h2 * a2 + k1 * k2 * b2 + l1 * l2 * c2 + (k1 * l2 + k2 * l1) * b * c * cosar + + (h1 * l2 + h2 * l1) * a * c * cosbr + (h1 * k2 + h2 * k1) * a * b * cosgr); + break; + case Hexagonal: + dsp1dsp2 = std::sqrt(GetIntSp2(h1, k1, l1) * GetIntSp2(h2, k2, l2)); + return dsp1dsp2 * ((h1 * h2 + k1 * k2 + 0.5 * (h1 * k2 + k1 * h2)) * a2 + l1 * l2 * c2); + break; + default: + break; + } + + return 0.; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - diff --git a/source/materials/src/G4DensityEffectCalculator.cc b/source/materials/src/G4DensityEffectCalculator.cc index b8ab6641caf..91313e09203 100644 --- a/source/materials/src/G4DensityEffectCalculator.cc +++ b/source/materials/src/G4DensityEffectCalculator.cc @@ -45,27 +45,28 @@ */ #include "G4DensityEffectCalculator.hh" + #include "G4AtomicShells.hh" #include "G4NistManager.hh" #include "G4Pow.hh" -static G4Pow * gpow = G4Pow::GetInstance(); +static G4Pow* gpow = G4Pow::GetInstance(); const G4int maxWarnings = 20; G4DensityEffectCalculator::G4DensityEffectCalculator(const G4Material* mat, G4int n) - : fMaterial(mat), fVerbose(0), fWarnings(0), nlev(n) + : fMaterial(mat), nlev(n) { fVerbose = std::max(fVerbose, G4NistManager::Instance()->GetVerbose()); - sternf = new G4double [nlev]; - levE = new G4double [nlev]; - sternl = new G4double [nlev]; - sternEbar = new G4double [nlev]; - for(G4int i=0; iGetTotNbOfAtomsPerVolume(); - for(size_t j = 0; j < fMaterial->GetNumberOfElements(); ++j) { + for (size_t j = 0; j < fMaterial->GetNumberOfElements(); ++j) { // The last subshell is considered to contain the conduction // electrons. Sternheimer 1984 says "the lowest chemical valance of // the element" is used to set the number of conduction electrons. @@ -83,67 +84,65 @@ G4DensityEffectCalculator::G4DensityEffectCalculator(const G4Material* mat, G4in // shell, but in any case, he also says that the choice is arbitrary // and offers a possible alternative. This is one of the sources of // uncertainty in the model. - const G4double frac = fMaterial->GetVecNbOfAtomsPerVolume()[j]/tot; + const G4double frac = fMaterial->GetVecNbOfAtomsPerVolume()[j] / tot; const G4int Z = fMaterial->GetElement((G4int)j)->GetZasInt(); const G4int nshell = G4AtomicShells::GetNumberOfShells(Z); - for(G4int i = 0; i < nshell; ++i) { + for (G4int i = 0; i < nshell; ++i) { // For conductors, put *all* top shell electrons into the conduction // band, regardless of element. - const G4double xx = frac*G4AtomicShells::GetNumberOfElectrons(Z, i); - if(i < nshell-1 || !conductor) { - sternf[sh] += xx; - } else { + const G4double xx = frac * G4AtomicShells::GetNumberOfElectrons(Z, i); + if (i < nshell - 1 || ! conductor) { + sternf[sh] += xx; + } + else { fConductivity += xx; } - levE[sh] = G4AtomicShells::GetBindingEnergy(Z, i)/CLHEP::eV; + levE[sh] = G4AtomicShells::GetBindingEnergy(Z, i) / CLHEP::eV; ++sh; } } - for(G4int i=0; i 0.0) ? 1./sum : 0.0; - for(G4int i=0; i 0.0) ? 1. / sum : 0.0; + for (G4int i = 0; i < nlev; ++i) { sternf[i] *= invsum; } - fConductivity *= invsum; - plasmaE = fMaterial->GetIonisation()->GetPlasmaEnergy()/CLHEP::eV; - meanexcite = fMaterial->GetIonisation()->GetMeanExcitationEnergy()/CLHEP::eV; + fConductivity *= invsum; + plasmaE = fMaterial->GetIonisation()->GetPlasmaEnergy() / CLHEP::eV; + meanexcite = fMaterial->GetIonisation()->GetMeanExcitationEnergy() / CLHEP::eV; } G4DensityEffectCalculator::~G4DensityEffectCalculator() { - delete [] sternf; - delete [] levE; - delete [] sternl; - delete [] sternEbar; + delete[] sternf; + delete[] levE; + delete[] sternl; + delete[] sternEbar; } G4double G4DensityEffectCalculator::ComputeDensityCorrection(G4double x) { - if(fVerbose > 1) { - G4cout << "G4DensityEffectCalculator::ComputeDensityCorrection for " - << fMaterial->GetName() << ", x= " << x << G4endl; + if (fVerbose > 1) { + G4cout << "G4DensityEffectCalculator::ComputeDensityCorrection for " << fMaterial->GetName() + << ", x= " << x << G4endl; } const G4double approx = fMaterial->GetIonisation()->GetDensityCorrection(x); - const G4double exact = FermiDeltaCalculation(x); + const G4double exact = FermiDeltaCalculation(x); - if(fVerbose > 1) { - G4cout << " Delta: computed= " << exact - << ", parametrized= " << approx << G4endl; + if (fVerbose > 1) { + G4cout << " Delta: computed= " << exact << ", parametrized= " << approx << G4endl; } - if(approx >= 0. && exact < 0.) { - if(fVerbose > 0) { + if (approx >= 0. && exact < 0.) { + if (fVerbose > 0) { ++fWarnings; - if(fWarnings < maxWarnings) { - G4ExceptionDescription ed; - ed << "Sternheimer fit failed for " << fMaterial->GetName() - << ", x = " << x << ": Delta exact= " - << exact << ", approx= " << approx; - G4Exception("G4DensityEffectCalculator::DensityCorrection", "mat008", - JustWarning, ed); + if (fWarnings < maxWarnings) { + G4ExceptionDescription ed; + ed << "Sternheimer fit failed for " << fMaterial->GetName() << ", x = " << x + << ": Delta exact= " << exact << ", approx= " << approx; + G4Exception("G4DensityEffectCalculator::DensityCorrection", "mat008", JustWarning, ed); } } return approx; @@ -153,16 +152,14 @@ G4double G4DensityEffectCalculator::ComputeDensityCorrection(G4double x) // somehow, with the exception of the case where approx is negative. I // have seen this clearly-wrong result occur for substances with extremely // low density (1e-25 g/cc). - if(approx >= 0. && std::abs(exact - approx) > 1.) { - if(fVerbose > 0) { + if (approx >= 0. && std::abs(exact - approx) > 1.) { + if (fVerbose > 0) { ++fWarnings; - if(fWarnings < maxWarnings) { - G4ExceptionDescription ed; - ed << "Sternheimer exact= " << exact << " and approx= " - << approx << " are too different for " - << fMaterial->GetName() << ", x = " << x; - G4Exception("G4DensityEffectCalculator::DensityCorrection", "mat008", - JustWarning, ed); + if (fWarnings < maxWarnings) { + G4ExceptionDescription ed; + ed << "Sternheimer exact= " << exact << " and approx= " << approx + << " are too different for " << fMaterial->GetName() << ", x = " << x; + G4Exception("G4DensityEffectCalculator::DensityCorrection", "mat008", JustWarning, ed); } } return approx; @@ -179,32 +176,31 @@ G4double G4DensityEffectCalculator::FermiDeltaCalculation(G4double x) // this energy is relevant (x = 20 -> 10^19 GeV for muons). So this // is mostly not here for physical reasons, but rather to avoid ugly // discontinuities in the return value. - if(x > 20.) { return -1.; } + if (x > 20.) { + return -1.; + } sternx = x; G4double sternrho = Newton(1.5, true); // Negative values, and values much larger than unity are non-physical. // Values between zero and one are also suspect, but not as clearly wrong. - if(sternrho <= 0. || sternrho > 100.) { - if(fVerbose > 0) { + if (sternrho <= 0. || sternrho > 100.) { + if (fVerbose > 0) { ++fWarnings; - if(fWarnings < maxWarnings) { - G4ExceptionDescription ed; - ed << "Sternheimer computation failed for " << fMaterial->GetName() - << ", x = " << x << ":\n" - << "Could not solve for Sternheimer rho. Probably you have a \n" - << "mean ionization energy which is incompatible with your\n" - << "distribution of energy levels, or an unusually dense material.\n" - << "Number of levels: " << nlev - << " Mean ionization energy(eV): " << meanexcite - << " Plasma energy(eV): " << plasmaE << "\n"; - for(G4int i = 0; i < nlev; ++i) { - ed << "Level " << i << ": strength " << sternf[i] - << ": energy(eV)= " << levE[i] << "\n"; - } - G4Exception("G4DensityEffectCalculator::SetupFermiDeltaCalc", "mat008", - JustWarning, ed); + if (fWarnings < maxWarnings) { + G4ExceptionDescription ed; + ed << "Sternheimer computation failed for " << fMaterial->GetName() << ", x = " << x + << ":\n" + << "Could not solve for Sternheimer rho. Probably you have a \n" + << "mean ionization energy which is incompatible with your\n" + << "distribution of energy levels, or an unusually dense material.\n" + << "Number of levels: " << nlev << " Mean ionization energy(eV): " << meanexcite + << " Plasma energy(eV): " << plasmaE << "\n"; + for (G4int i = 0; i < nlev; ++i) { + ed << "Level " << i << ": strength " << sternf[i] << ": energy(eV)= " << levE[i] << "\n"; + } + G4Exception("G4DensityEffectCalculator::SetupFermiDeltaCalc", "mat008", JustWarning, ed); } } return -1.; @@ -212,9 +208,9 @@ G4double G4DensityEffectCalculator::FermiDeltaCalculation(G4double x) // Calculate the Sternheimer adjusted energy levels and parameters l_i given // the Sternheimer parameter rho. - for(G4int i=0; ipowN(sternEbar[i], 2) + (2./3.)*sternf[i]); + for (G4int i = 0; i < nlev; ++i) { + sternEbar[i] = levE[i] * (sternrho / plasmaE); + sternl[i] = std::sqrt(gpow->powN(sternEbar[i], 2) + (2. / 3.) * sternf[i]); } // The derivative of the function we are solving for is strictly // negative for positive (physical) values, so if the value at @@ -227,22 +223,21 @@ G4double G4DensityEffectCalculator::FermiDeltaCalculation(G4double x) // positive infinity. In the code we don't return inf, though, but // rather set that term to zero, which means that if this test were // used, it would give the wrong result for some materials. - if(fConductivity == 0 && Ell(0) <= 0) - { + if (fConductivity == 0 && Ell(0) <= 0) { return 0; } // Attempt to find the root from 40 starting points evenly distributed // in log space. Trying a single starting point is not sufficient for // convergence in most cases. - for(G4int startLi = -10; startLi < 30; ++startLi){ + for (G4int startLi = -10; startLi < 30; ++startLi) { const G4double sternL = Newton(gpow->powN(2, startLi), false); - if(sternL != -1.) { + if (sternL != -1.) { return DeltaOnceSolved(sternL); } } - return -1.; // Signal the caller to use the Sternheimer approximation, - // because we have been unable to solve the exact form. + return -1.; // Signal the caller to use the Sternheimer approximation, + // because we have been unable to solve the exact form. } /* Newton's method for finding roots. Adapted from G4PolynominalSolver, but @@ -255,39 +250,44 @@ G4double G4DensityEffectCalculator::Newton(G4double start, G4bool first) G4double lambda(start), value(0.), dvalue(0.); - if(fVerbose > 2) { - G4cout << "G4DensityEffectCalculator::Newton: strat= " << start - << " type: " << first << G4endl; + if (fVerbose > 2) { + G4cout << "G4DensityEffectCalculator::Newton: strat= " << start << " type: " << first << G4endl; } - while(true) { - if(first) { + while (true) { + if (first) { value = FRho(lambda); dvalue = DFRho(lambda); - } else { + } + else { value = Ell(lambda); dvalue = DEll(lambda); } - if(dvalue == 0.0) { break; } - const G4double del = value/dvalue; + if (dvalue == 0.0) { + break; + } + const G4double del = value / dvalue; lambda -= del; - const G4double eps = std::abs(del/lambda); - if(eps <= 1.e-12) { + const G4double eps = std::abs(del / lambda); + if (eps <= 1.e-12) { ++ngood; - if(ngood == 2) { - if(fVerbose > 2) { - G4cout << " Converged with result= " << lambda << G4endl; - } - return lambda; + if (ngood == 2) { + if (fVerbose > 2) { + G4cout << " Converged with result= " << lambda << G4endl; + } + return lambda; } - } else { + } + else { ++nbad; } - if(nbad > maxIter || std::isnan(value) || std::isinf(value)) { break; } + if (nbad > maxIter || std::isnan(value) || std::isinf(value)) { + break; + } } - if(fVerbose > 2) { - G4cout << " Failed to converge last value= " << value - << " dvalue= " << dvalue << " lambda= " << lambda << G4endl; + if (fVerbose > 2) { + G4cout << " Failed to converge last value= " << value << " dvalue= " << dvalue + << " lambda= " << lambda << G4endl; } return -1.; } @@ -297,11 +297,10 @@ G4double G4DensityEffectCalculator::Newton(G4double start, G4bool first) G4double G4DensityEffectCalculator::DFRho(G4double rho) { G4double ans = 0.0; - for(G4int i = 0; i < nlev; ++i) { - if(sternf[i] > 0.) { + for (G4int i = 0; i < nlev; ++i) { + if (sternf[i] > 0.) { ans += sternf[i] * gpow->powN(levE[i], 2) * rho / - (gpow->powN(levE[i] * rho, 2) - + 2./3. * sternf[i] * gpow->powN(plasmaE, 2)); + (gpow->powN(levE[i] * rho, 2) + 2. / 3. * sternf[i] * gpow->powN(plasmaE, 2)); } } return ans; @@ -312,15 +311,15 @@ G4double G4DensityEffectCalculator::DFRho(G4double rho) G4double G4DensityEffectCalculator::FRho(G4double rho) { G4double ans = 0.0; - for(G4int i = 0; i 0.) { - ans += sternf[i] * G4Log(gpow->powN(levE[i]*rho, 2) + - 2./3. * sternf[i]*gpow->powN(plasmaE, 2)); - } + for (G4int i = 0; i < nlev; ++i) { + if (sternf[i] > 0.) { + ans += sternf[i] * + G4Log(gpow->powN(levE[i] * rho, 2) + 2. / 3. * sternf[i] * gpow->powN(plasmaE, 2)); + } } - ans *= 0.5; // pulled out of loop for efficiency + ans *= 0.5; // pulled out of loop for efficiency - if(fConductivity > 0.) { + if (fConductivity > 0.) { ans += fConductivity * G4Log(plasmaE * std::sqrt(fConductivity)); } ans -= G4Log(meanexcite); @@ -332,14 +331,14 @@ G4double G4DensityEffectCalculator::FRho(G4double rho) G4double G4DensityEffectCalculator::DEll(G4double L) { G4double ans = 0.; - for(G4int i=0; i 0 && (sternEbar[i] > 0. || L != 0.)) { + for (G4int i = 0; i < nlev; ++i) { + if (sternf[i] > 0 && (sternEbar[i] > 0. || L != 0.)) { const G4double y = gpow->powN(sternEbar[i], 2); - ans += sternf[i]/gpow->powN(y + L*L, 2); + ans += sternf[i] / gpow->powN(y + L * L, 2); } } - ans += fConductivity/gpow->powN(L*L, 2); - ans *= (-2*L); // pulled out of the loop for efficiency + ans += fConductivity / gpow->powN(L * L, 2); + ans *= (-2 * L); // pulled out of the loop for efficiency return ans; } @@ -348,14 +347,14 @@ G4double G4DensityEffectCalculator::DEll(G4double L) G4double G4DensityEffectCalculator::Ell(G4double L) { G4double ans = 0.; - for(G4int i=0; i 0. && (sternEbar[i] > 0. || L != 0.)) { - ans += sternf[i]/(gpow->powN(sternEbar[i], 2) + L*L); + for (G4int i = 0; i < nlev; ++i) { + if (sternf[i] > 0. && (sternEbar[i] > 0. || L != 0.)) { + ans += sternf[i] / (gpow->powN(sternEbar[i], 2) + L * L); } } - if(fConductivity > 0. && L != 0.) { - ans += fConductivity/(L*L); - } + if (fConductivity > 0. && L != 0.) { + ans += fConductivity / (L * L); + } ans -= gpow->powZ(10, -2 * sternx); return ans; } @@ -368,18 +367,17 @@ G4double G4DensityEffectCalculator::Ell(G4double L) G4double G4DensityEffectCalculator::DeltaOnceSolved(G4double sternL) { G4double ans = 0.; - for(G4int i=0; i 0.) { - ans += sternf[i] * G4Log((gpow->powN(sternl[i], 2) - + gpow->powN(sternL, 2))/gpow->powN(sternl[i], 2)); + for (G4int i = 0; i < nlev; ++i) { + if (sternf[i] > 0.) { + ans += sternf[i] * + G4Log((gpow->powN(sternl[i], 2) + gpow->powN(sternL, 2)) / gpow->powN(sternl[i], 2)); } } // sternl for the conduction electrons is sqrt(fConductivity), with // no factor of 2./3 as with the other levels. - if(fConductivity > 0) { - ans += fConductivity * G4Log((fConductivity - + gpow->powN(sternL, 2))/fConductivity); + if (fConductivity > 0) { + ans += fConductivity * G4Log((fConductivity + gpow->powN(sternL, 2)) / fConductivity); } - ans -= gpow->powN(sternL, 2)/(1 + gpow->powZ(10, 2 * sternx)); + ans -= gpow->powN(sternL, 2) / (1 + gpow->powZ(10, 2 * sternx)); return ans; } diff --git a/source/materials/src/G4DensityEffectData.cc b/source/materials/src/G4DensityEffectData.cc index ebd865d4773..5d153511dd4 100644 --- a/source/materials/src/G4DensityEffectData.cc +++ b/source/materials/src/G4DensityEffectData.cc @@ -32,21 +32,14 @@ // Authors: A.Bagulya, A.Ivanchenko 28.10.2009 // //---------------------------------------------------------------------------- -// - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -#include #include "G4DensityEffectData.hh" + #include "G4SystemOfUnits.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +#include -G4DensityEffectData::G4DensityEffectData():index(0) -{ - Initialize(); -} +G4DensityEffectData::G4DensityEffectData() { Initialize(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -55,1239 +48,1505 @@ void G4DensityEffectData::Initialize() // R.M. Sternheimer et al. Density Effect for the Ionization Loss of Charged // Particles in Various Substances. Atom. Data Nucl. Data Tabl. 30 (1984) 261-271. // - // Data[10]: Eplasma rho -C X_0 X_1 a m delta_0 DELTA_{max} I + // Data[10]: Eplasma rho -C X_0 X_1 a m delta_0 DELTA_{max} I // Eplasma - Plasma energy (in eV) // rho - Sternheimer adjustment factor for the atomic excitation energies - // -C + // -C // X_0, X_1, m, a - parameters in fitting formulas // delta_0 - Density-effect value delta(X_0) // DELTA_{max} - Upper bound for the error inherent in the fitting procedure // I - Mean ionisation potential in keV used in this parameterisation - - for (G4int i=0; i< NDENSELEM; ++i) - { - indexZ[i] = -1; - state[i] = kStateSolid; - } - -//G4_lH2 index=0 - G4double M1[NDENSARRAY]={7.031,1.546,3.2632,0.4759,1.9215,0.13483,5.6249,0.,0.021,21.8 }; - AddMaterial(M1,"G4_lH2"); - -//G4_H index=1 - G4double M0[NDENSARRAY]={0.263,1.412,9.5835,1.8639,3.2718,0.14092,5.7273,0.0,0.024,19.2 }; - AddMaterial(M0,"G4_H"); - indexZ[1]=1; - state[1]=kStateGas; - -//G4_He index=2 - G4double M2[NDENSARRAY]={0.263,1.7,11.1393,2.2017,3.6122,0.13443,5.8347,0,0.024,41.8 }; - AddMaterial(M2,"G4_He"); - indexZ[2]=2; - state[2]=kStateGas; - -//G4_Li index=3 - G4double M3[NDENSARRAY]={13.844,1.535,3.1221,0.1304,1.6397,0.95136,2.4993,0.14,0.062,40.0 }; - AddMaterial(M3,"G4_Li"); - indexZ[3]=3; - -//G4_Be index=4 - G4double M4[NDENSARRAY]={26.098,1.908,2.7847,0.0392,1.6922,0.80392,2.4339,0.14,0.029,63.7 }; - AddMaterial(M4,"G4_Be"); - indexZ[4]=4; - -//G4_B index=5 - G4double M5[NDENSARRAY]={30.17,2.32,2.8477,0.0305,1.9688,0.56224,2.4512,0.14,0.024,76.0 }; - AddMaterial(M5,"G4_B"); - indexZ[5]=5; - -//G4_C index=6 - G4double M6[NDENSARRAY]={28.803,2.376,2.9925,-0.0351,2.486,0.2024,3.0036,0.1,0.038,78.0 }; - AddMaterial(M6,"G4_C"); - indexZ[6]=6; - -//G4_N index=7 - G4double M7[NDENSARRAY]={0.695,1.984,10.5400,1.7378,4.1323,0.15349,3.2125,0.0,0.086,82. }; - AddMaterial(M7,"G4_N"); - indexZ[7]=7; - state[7]=kStateGas; - -//G4_O index=8 - G4double M8[NDENSARRAY]={0.744,2.314,10.7004,1.7541,4.3213,0.11778,3.2913,0.0,0.101,95. }; - AddMaterial(M8,"G4_O"); - indexZ[8]=8; - state[8]=kStateGas; - -//G4_F index=9 - G4double M9[NDENSARRAY]={0.788,2.450,10.9653,1.8433,4.4096,0.11083,3.2962,0.0,0.121,115. }; - AddMaterial(M9,"G4_F"); - indexZ[9]=9; - state[9]=kStateGas; - -//G4_Ne index=10 - G4double M10[NDENSARRAY]={0.587,2.577,11.9041,2.0735,4.6421,0.08064,3.5771,0.0,0.110,137. }; - AddMaterial(M10,"G4_Ne"); - indexZ[10]=10; - state[10]=kStateGas; - -//G4_Na index=11 - G4double M11[NDENSARRAY]={19.641,2.648,5.0526,0.2880,3.1962,0.07772,3.6452,0.08,0.098,149. }; - AddMaterial(M11,"G4_Na"); - indexZ[11]=11; - -//G4_Mg index=12 - G4double M12[NDENSARRAY]={26.708,2.331,4.5297,0.1499,3.0668,0.08163,3.6166,0.08,0.073,156. }; - AddMaterial(M12,"G4_Mg"); - indexZ[12]=12; - -//G4_Al index=13 - G4double M13[NDENSARRAY]={32.86,2.18,4.2395,0.1708,3.0127,0.08024,3.6345,0.12,0.061,166. }; - AddMaterial(M13,"G4_Al"); - indexZ[13]=13; - -//G4_Si index=14 - G4double M14[NDENSARRAY]={31.055,2.103,4.4351,0.2014,2.8715,0.14921,3.2546,0.14,0.059,173. }; - AddMaterial(M14,"G4_Si"); - indexZ[14]=14; - -//G4_P index=15 - G4double M15[NDENSARRAY]={29.743,2.056,4.5214,0.1696,2.7815,0.2361,2.9158,0.14,0.057,173. }; - AddMaterial(M15,"G4_P"); - indexZ[15]=15; - -//G4_S index=16 - G4double M16[NDENSARRAY]={28.789,2.131,4.6659,0.158,2.7159,0.33992,2.6456,0.14,0.059,180. }; - AddMaterial(M16,"G4_S"); - indexZ[16]=16; - -//G4_Cl index=17 - G4double M17[NDENSARRAY]={1.092,1.734,11.1421,1.5555,4.2994,0.19849,2.9702,0.0,0.041,174. }; - AddMaterial(M17,"G4_Cl"); - indexZ[17]=17; - state[17]=kStateGas; - -//G4_Ar index=18 - G4double M18[NDENSARRAY]={0.789,1.753,11.9480,1.7635,4.4855,0.19714,2.9618,0.0,0.037,188. }; - AddMaterial(M18,"G4_Ar"); - indexZ[18]=18; - state[18]=kStateGas; - -//G4_K index=19 - G4double M19[NDENSARRAY]={18.65,1.830,5.6423,0.3851,3.1724,0.19827,2.9233,0.10,0.035,190. }; - AddMaterial(M19,"G4_K"); - indexZ[19]=19; - -//G4_Ca index=20 - G4double M20[NDENSARRAY]={25.342,1.666,5.0396,0.3228,3.1191,0.15643,3.0745,0.14,0.031,191. }; - AddMaterial(M20,"G4_Ca"); - indexZ[20]=20; - -//G4_Sc index=21 - G4double M21[NDENSARRAY]={34.050,1.826,4.6949,0.1640,3.0593,0.15754,3.0517,0.10,0.027,216. }; - AddMaterial(M21,"G4_Sc"); - indexZ[21]=21; - -//G4_Ti index=22 - G4double M22[NDENSARRAY]={41.619,1.969,4.4450,0.0957,3.0386,0.15662,3.0302,0.12,0.025,233. }; - AddMaterial(M22,"G4_Ti"); - indexZ[22]=22; - -//G4_V index=23 - G4double M23[NDENSARRAY]={47.861,2.070,4.2659,0.0691,3.0322,0.15436,3.0163,0.14,0.024,245. }; - AddMaterial(M23,"G4_V"); - indexZ[23]=23; - -//G4_Cr index=24 - G4double M24[NDENSARRAY]={52.458,2.181,4.1781,0.0340,3.0451,0.15419,2.9896,0.14,0.023,257. }; - AddMaterial(M24,"G4_Cr"); - indexZ[24]=24; - -//G4_Mn index=25 - G4double M25[NDENSARRAY]={53.022,2.347,4.2702,0.0447,3.1074,0.14973,2.9796,0.14,0.021,272. }; - AddMaterial(M25,"G4_Mn"); - indexZ[25]=25; - -//G4_Fe index=26 - G4double M26[NDENSARRAY]={55.172,2.504,4.2911,-0.0012,3.1531,0.1468,2.9632,0.12,0.021,286. }; - AddMaterial(M26,"G4_Fe"); - indexZ[26]=26; - -//G4_Co index=27 - G4double M27[NDENSARRAY]={58.188,2.626,4.2601,-0.0187,3.1790,0.14474,2.9502,0.12,0.019,297. }; - AddMaterial(M27,"G4_Co"); - indexZ[27]=27; - -//G4_Ni index=28 - G4double M28[NDENSARRAY]={59.385,2.889,4.3115,-0.0566,3.1851,0.16496,2.843,0.10,0.020,311. }; - AddMaterial(M28,"G4_Ni"); - indexZ[28]=28; - -//G4_Cu index=29 - G4double M29[NDENSARRAY]={58.270,2.956,4.4190,-0.0254,3.2792,0.14339,2.9044,0.08,0.019,322. }; - AddMaterial(M29,"G4_Cu"); - indexZ[29]=29; - -//G4_Zn index=30 - G4double M30[NDENSARRAY]={52.132,3.142,4.6906,0.0049,3.3668,0.14714,2.8652,0.08,0.019,330. }; - AddMaterial(M30,"G4_Zn"); - indexZ[30]=30; - -//G4_Ga index=31 - G4double M31[NDENSARRAY]={46.688,2.747,4.9353,0.2267,3.5434,0.09440,3.1314,0.14,0.019,334. }; - AddMaterial(M31,"G4_Ga"); - indexZ[31]=31; - -//G4_Ge index=32 - G4double M32[NDENSARRAY]={44.141,2.461,5.1411,0.3376,3.6096,0.07188,3.3306,0.14,0.025,350. }; - AddMaterial(M32,"G4_Ge"); - indexZ[32]=32; - -//G4_As index=33 - G4double M33[NDENSARRAY]={45.779,2.219,5.0510,0.1767,3.5702,0.06633,3.4176,0.00,0.030,347. }; - AddMaterial(M33,"G4_As"); - indexZ[33]=33; - -//G4_Se index=34 - G4double M34[NDENSARRAY]={40.112,2.104,5.3210,0.2258,3.6264,0.06568,3.4317,0.10,0.024,348. }; - AddMaterial(M34,"G4_Se"); - indexZ[34]=34; - -//G4_Br index=35 - G4double M35[NDENSARRAY]={1.604,1.845,11.7307,1.5262,4.9899,0.06335,3.467,0,0.022,343. }; - AddMaterial(M35,"G4_Br"); - indexZ[35]=35; - state[35]=kStateGas; - -//G4_Kr index=36 - G4double M36[NDENSARRAY]={1.114,1.77,12.5115,1.7158,5.0748,0.07446,3.4051,0,0.025,352. }; - AddMaterial(M36,"G4_Kr"); - indexZ[36]=36; - state[36]=kStateGas; - -//G4_Rb index=37 - G4double M37[NDENSARRAY]={23.467,1.823,6.4776,0.5737,3.7995,0.07261,3.4177,0.14,0.026,363. }; - AddMaterial(M37,"G4_Rb"); - indexZ[37]=37; - -//G4_Sr index=38 - G4double M38[NDENSARRAY]={30.244,1.707,5.9867,0.4585,3.6778,0.07165,3.4435,0.14,0.026,366. }; - AddMaterial(M38,"G4_Sr"); - indexZ[38]=38; - -//G4_Y index=39 - G4double M39[NDENSARRAY]={40.346,1.649,5.4801,0.3608,3.5542,0.07138,3.4585,0.14,0.027,379. }; - AddMaterial(M39,"G4_Y"); - indexZ[39]=39; - -//G4_Zr index=40 - G4double M40[NDENSARRAY]={48.671,1.638,5.1774,0.2957,3.489,0.07177,3.4533,0.14,0.028,393. }; - AddMaterial(M40,"G4_Zr"); - indexZ[40]=40; - -//G4_Nb index=41 - G4double M41[NDENSARRAY]={56.039,1.734,5.0141,0.1785,3.2201,0.13883,3.093,0.14,0.036,417. }; - AddMaterial(M41,"G4_Nb"); - indexZ[41]=41; - -//G4_Mo index=42 - G4double M42[NDENSARRAY]={60.951,1.658,4.8793,0.2267,3.2784,0.10525,3.2549,0.14,0.03,424. }; - AddMaterial(M42,"G4_Mo"); - indexZ[42]=42; - -//G4_Tc index=43 - G4double M43[NDENSARRAY]={64.760,1.727,4.7769,0.0949,3.1253,0.16572,2.9738,0.14,0.040,428. }; - AddMaterial(M43,"G4_Tc"); - indexZ[43]=43; - -//G4_Ru index=44 - G4double M44[NDENSARRAY]={66.978,1.780,4.7694,0.0599,3.0834,0.19342,2.8707,0.14,0.046,441. }; - AddMaterial(M44,"G4_Ru"); - indexZ[44]=44; - -//G4_Rh index=45 - G4double M45[NDENSARRAY]={67.128,1.804,4.8008,0.0576,3.1069,0.19205,2.8633,0.14,0.046,449. }; - AddMaterial(M45,"G4_Rh"); - indexZ[45]=45; - -//G4_Pd index=46 - G4double M46[NDENSARRAY]={65.683,1.911,4.9358,0.0563,3.0555,0.24178,2.7239,0.14,0.047,470. }; - AddMaterial(M46,"G4_Pd"); - indexZ[46]=46; - -//G4_Ag index=47 - G4double M47[NDENSARRAY]={61.635,1.933,5.0630,0.0657,3.1074,0.24585,2.6899,0.14,0.052,470. }; - AddMaterial(M47,"G4_Ag"); - indexZ[47]=47; - -//G4_Cd index=48 - G4double M48[NDENSARRAY]={55.381,1.895,5.2727,0.1281,3.1667,0.24609,2.6772,0.14,0.051,469. }; - AddMaterial(M48,"G4_Cd"); - indexZ[48]=48; - -//G4_In index=49 - G4double M49[NDENSARRAY]={50.896,1.851,5.5211,0.2406,3.2032,0.23879,2.7144,0.14,0.044,488. }; - AddMaterial(M49,"G4_In"); - indexZ[49]=49; - -//G4_Sn index=50 - G4double M50[NDENSARRAY]={50.567,1.732,5.5340,0.2879,3.2959,0.18689,2.8576,0.14,0.037,488. }; - AddMaterial(M50,"G4_Sn"); - indexZ[50]=50; - -//G4_Sb index=51 - G4double M51[NDENSARRAY]={48.242,1.645,5.6241,0.3189,3.3489,0.16652,2.9319,0.14,0.034,487. }; - AddMaterial(M51,"G4_Sb"); - indexZ[51]=51; - -//G4_Te index=52 - G4double M52[NDENSARRAY]={45.952,1.577,5.7131,0.3296,3.4418,0.13815,3.0354,0.14,0.033,485. }; - AddMaterial(M52,"G4_Te"); - indexZ[52]=52; - -//G4_I index=53 - G4double M53[NDENSARRAY]={41.348,1.498,5.9488,0.0549,3.2596,0.23766,2.7276,0.0,0.045,491. }; - AddMaterial(M53,"G4_I"); - indexZ[53]=53; - -//G4_Xe index=54 - G4double M54[NDENSARRAY]={1.369,1.435,12.7281,1.563,4.7371,0.23314,2.7414,0,0.043,482. }; - AddMaterial(M54,"G4_Xe"); - indexZ[54]=54; - state[54]=kStateGas; - -//G4_Cs index=55 - G4double M55[NDENSARRAY]={25.37,1.462,6.9135,0.5473,3.5914,0.18233,2.8866,0.14,0.035,488. }; - AddMaterial(M55,"G4_Cs"); - indexZ[55]=55; - -//G4_Ba index=56 - G4double M56[NDENSARRAY]={34.425,1.410,6.3153,0.4190,3.4547,0.18268,2.8906,0.14,0.035,491. }; - AddMaterial(M56,"G4_Ba"); - indexZ[56]=56; - -//G4_La index=57 - G4double M57[NDENSARRAY]={45.792,1.392,5.7850,0.3161,3.3293,0.18591,2.8828,0.14,0.036,501. }; - AddMaterial(M57,"G4_La"); - indexZ[57]=57; - -//G4_Ce index=58 - G4double M58[NDENSARRAY]={47.834,1.461,5.7837,0.2713,3.3432,0.18885,2.8592,0.14,0.040,523. }; - AddMaterial(M58,"G4_Ce"); - indexZ[58]=58; - -//G4_Pr index=59 - G4double M59[NDENSARRAY]={48.301,1.520,5.8096,0.2333,3.2773,0.23265,2.7331,0.14,0.041,535. }; - AddMaterial(M59,"G4_Pr"); - indexZ[59]=59; - -//G4_Ne index=60 - G4double M60[NDENSARRAY]={48.819,1.588,5.8290,0.1984,3.3063,0.23530,2.7050,0.14,0.044,546. }; - AddMaterial(M60,"G4_Ne"); - indexZ[60]=60; - -//G4_Pr index=61 - G4double M61[NDENSARRAY]={50.236,1.672,5.8224,0.1627,3.3199,0.24280,2.6674,0.14,0.048,560. }; - AddMaterial(M61,"G4_Pr"); - indexZ[61]=61; - -//G4_Sa index=62 - G4double M62[NDENSARRAY]={50.540,1.749,5.8597,0.1520,3.3460,0.24698,2.6403,0.14,0.053,574. }; - AddMaterial(M62,"G4_Sa"); - indexZ[62]=62; - -//G4_Eu index=63 - G4double M63[NDENSARRAY]={42.484,1.838,6.2278,0.1888,3.4633,0.24448,2.6245,0.14,0.06,580. }; - AddMaterial(M63,"G4_Eu"); - indexZ[63]=63; - -//G4_Gd index=64 - G4double M64[NDENSARRAY]={51.672,1.882,5.8738,0.1058,3.3932,0.25109,2.5977,0.14,0.061,591. }; - AddMaterial(M64,"G4_Gd"); - indexZ[64]=64; - -//G4_Tb index=65 - G4double M65[NDENSARRAY]={52.865,1.993,5.9045,0.0947,3.4224,0.24453,2.6056,0.14,0.063,614. }; - AddMaterial(M65,"G4_Tb"); - indexZ[65]=65; - -//G4_Dy index=66 - G4double M66[NDENSARRAY]={53.698,2.081,5.9183,0.0822,3.4474,0.24665,2.5849,0.14,0.061,628. }; - AddMaterial(M66,"G4_Dy"); - indexZ[66]=66; - -//G4_Ho index=67 - G4double M67[NDENSARRAY]={54.467,2.197,5.9587,0.0761,3.4782,0.24638,2.5726,0.14,0.062,650. }; - AddMaterial(M67,"G4_Ho"); - indexZ[67]=67; - -//G4_Er index=68 - G4double M68[NDENSARRAY]={55.322,2.26,5.9521,0.0648,3.4922,0.24823,2.5573,0.14,0.061,658. }; - AddMaterial(M68,"G4_Er"); - indexZ[68]=68; - -//G4_Tm index=69 - G4double M69[NDENSARRAY]={56.225,2.333,5.9677,0.0812,3.5085,0.24889,2.5469,0.14,0.062,674. }; - AddMaterial(M69,"G4_Tm"); - indexZ[69]=69; - -//G4_Yb index=70 - G4double M70[NDENSARRAY]={47.546,2.505,6.3325,0.1199,3.6246,0.25295,2.5141,0.14,0.071,684. }; - AddMaterial(M70,"G4_Yb"); - indexZ[70]=70; - -//G4_Lu index=71 - G4double M71[NDENSARRAY]={57.581,2.348,5.9785,0.1560,3.5218,0.24033,2.5643,0.14,0.054,694. }; - AddMaterial(M71,"G4_Lu"); - indexZ[71]=71; - -//G4_Hf index=72 - G4double M72[NDENSARRAY]={66.770,2.174,5.7139,0.1965,3.4337,0.22918,2.6155,0.14,0.035,705. }; - AddMaterial(M72,"G4_Hf"); - indexZ[72]=72; - -//G4_Ta index=73 - G4double M73[NDENSARRAY]={74.692,2.07,5.5262,0.2117,3.4805,0.17798,2.7623,0.14,0.03,718. }; - AddMaterial(M73,"G4_Ta"); - indexZ[73]=73; - -//G4_W index=74 - G4double M74[NDENSARRAY]={80.315,1.997,5.4059,0.2167,3.496,0.15509,2.8447,0.14,0.027,727. }; - AddMaterial(M74,"G4_W"); - indexZ[74]=74; - -//G4_Re index=75 - G4double M75[NDENSARRAY]={83.846,1.976,5.3445,0.0559,3.4845,0.15184,2.8627,0.08,0.026,736. }; - AddMaterial(M75,"G4_Re"); - indexZ[75]=75; - -//G4_Os index=76 - G4double M76[NDENSARRAY]={86.537,1.947,5.3083,0.0891,3.5414,0.12751,2.9608,0.10,0.023,746. }; - AddMaterial(M76,"G4_Os"); - indexZ[76]=76; - -//G4_Ir index=77 - G4double M77[NDENSARRAY]={86.357,1.927,5.3418,0.0819,3.5480,0.12690,2.9658,0.10,0.023,757. }; - AddMaterial(M77,"G4_Ir"); - indexZ[77]=77; - -//G4_Pt index=78 - G4double M78[NDENSARRAY]={84.389,1.965,5.4732,0.1484,3.6212,0.11128,3.0417,0.12,0.021,790. }; - AddMaterial(M78,"G4_Pt"); - indexZ[78]=78; - -//G4_Au index=79 - G4double M79[NDENSARRAY]={80.215,1.926,5.5747,0.2021,3.6979,0.09756,3.1101,0.14,0.020,790. }; - AddMaterial(M79,"G4_Au"); - indexZ[79]=79; - -//G4_Hg index=80 - G4double M80[NDENSARRAY]={66.977,1.904,5.9605,0.2756,3.7275,0.11014,3.0519,0.14,0.021,800. }; - AddMaterial(M80,"G4_Hg"); - indexZ[80]=80; - -//G4_Tl index=81 - G4double M81[NDENSARRAY]={62.104,1.814,6.1365,0.3491,3.8044,0.09455,3.1450,0.14,0.019,810. }; - AddMaterial(M81,"G4_Tl"); - indexZ[81]=81; - -//G4_Pb index=82 - G4double M82[NDENSARRAY]={61.072,1.755,6.2018,0.3776,3.8073,0.09359,3.1608,0.14,0.019,823. }; - AddMaterial(M82,"G4_Pb"); - indexZ[82]=82; - -//G4_Bi index=83 - G4double M83[NDENSARRAY]={56.696,1.684,6.3505,0.4152,3.8248,0.0941,3.1671,0.14,0.02,823. }; - AddMaterial(M83,"G4_Bi"); - indexZ[83]=83; - -//G4_Po index=84 - G4double M84[NDENSARRAY]={55.773,1.637,6.4003,0.4267,3.8293,0.09282,3.183,0.14,0.02,830. }; - AddMaterial(M84,"G4_Po"); - indexZ[84]=84; - -//G4_Rn index=85 - G4double M85[NDENSARRAY]={1.708,1.458,13.2839,1.5368,4.9889,0.20798,2.7409,0,0.057,794. }; - AddMaterial(M85,"G4_Rn"); - indexZ[86]=85; - state[86]=kStateGas; - -//G4_Ra index=86 - G4double M86[NDENSARRAY]={40.205,1.403,7.0452,0.5991,3.9428,0.08804,3.2454,0.14,0.022,826. }; - AddMaterial(M86,"G4_Ra"); - indexZ[88]=86; - -//G4_Ac index=87 - G4double M87[NDENSARRAY]={57.254,1.380,6.3742,0.4559,3.7966,0.08567,3.2683,0.14,0.023,841. }; - AddMaterial(M87,"G4_Ac"); - indexZ[89]=87; - -//G4_Th index=88 - G4double M88[NDENSARRAY]={61.438,1.363,6.2473,0.4202,3.7681,0.08655,3.2610,0.14,0.025,847. }; - AddMaterial(M88,"G4_Th"); - indexZ[90]=88; - -//G4_Pa index=89 - G4double M89[NDENSARRAY]={70.901,1.42,6.0327,0.3144,3.5079,.14770,2.9845,0.14,0.036,878. }; - AddMaterial(M89,"G4_Pa"); - indexZ[91]=89; - -//G4_U index=90 - G4double M90[NDENSARRAY]={77.986,1.447,5.8694,0.2260,3.3721,.19677,2.8171,0.14,0.043,890. }; - AddMaterial(M90,"G4_U"); - indexZ[92]=90; - -//G4_Np index=91 - G4double M91[NDENSARRAY]={81.221,1.468,5.8149,0.1869,3.369,0.19741,2.8082,0.14,0.043,902. }; - AddMaterial(M91,"G4_Np"); - indexZ[93]=91; - -//G4_Pu index=92 - G4double M92[NDENSARRAY]={80.486,1.519,5.8748,0.1557,3.3981,0.20419,2.7679,0.14,0.057,921. }; - AddMaterial(M92,"G4_Pu"); - indexZ[94]=92; - -//G4_Am index=93 - G4double M93[NDENSARRAY]={66.607,1.552,6.2813,0.2274,3.5021,0.20308,2.7615,0.14,0.056,934. }; - AddMaterial(M93,"G4_Am"); - indexZ[95]=93; - -//G4_Cm index=94 - G4double M94[NDENSARRAY]={66.022,1.559,6.3097,0.2484,3.516,.20257,2.7579,0.14,0.056,939. }; - AddMaterial(M94,"G4_Cm"); - indexZ[96]=94; - -//G4_Bk index=95 - G4double M95[NDENSARRAY]={67.557,1.574,6.2912,0.2378,3.5186,.20192,2.7560,0.14,0.062,952. }; - AddMaterial(M95,"G4_Bk"); - indexZ[97]=95; - -//G4_A-150_TISSUE index=96 - G4double M96[NDENSARRAY]={22.667,1.950,3.1100,0.1329,2.6234,0.10783,3.4442,0,0.048,65.1 }; - AddMaterial(M96,"G4_A-150_TISSUE"); - -//G4_ACETONE index=97 - G4double M97[NDENSARRAY]={19.010,1.976,3.4341,0.2197,2.6928,0.11100,3.4047,0,0.069,64.2 }; - AddMaterial(M97,"G4_ACETONE"); - -//G4_ACETYLENE index=98 - G4double M98[NDENSARRAY]={0.700,1.784,9.8419,1.6017,4.0074,0.12167,3.4277,0,0.080,58.2 }; - AddMaterial(M98,"G4_ACETYLENE"); - -//G4_ADENINE index=99 - G4double M99[NDENSARRAY]={24.098,1.892,3.1724,0.1295,2.4219,0.20908,3.0271,0,0.052,71.4 }; - AddMaterial(M99,"G4_ADENINE"); - -//G4_ADIPOSE_TISSUE_ICRP index=100 - G4double M100[NDENSARRAY]={20.655,1.987,3.2367,0.1827,2.6530,0.10278,3.4817,0,0.060,63.2 }; - AddMaterial(M100,"G4_ADIPOSE_TISSUE_ICRP"); - -//G4_AIR index=101 - G4double M101[NDENSARRAY]={0.707,2.054,10.5961,1.7418,4.2759,0.10914,3.3994,0,0.090,85.7 }; - AddMaterial(M101,"G4_AIR"); - -//G4_ALANINE index=102 - G4double M102[NDENSARRAY]={25.204,2.074,3.0965,0.1354,2.6336,0.11484,3.3526,0,0.056,71.9 }; - AddMaterial(M102,"G4_ALANINE"); - -//G4_ALUMINIM_OXIDE index=103 - G4double M103[NDENSARRAY]={40.206,2.394,3.5682,0.0402,2.8665,0.08500,3.5458,0,0.031,145.2 }; - AddMaterial(M103,"G4_ALUMINIM_OXIDE"); - -//G4_AMBER index=104 - G4double M104[NDENSARRAY]={22.450,1.946,3.0701,0.1335,2.5610,0.11934,3.4098,0,0.053,63.2 }; - AddMaterial(M104,"G4_AMBER"); - -//G4_AMMONIA index=105 - G4double M105[NDENSARRAY]={0.635,1.814,9.8763,1.6822,4.1158,0.08315,3.6464,0,0.102,53.7 }; - AddMaterial(M105,"G4_AMMONIA"); - -//G4_ANILINE index=106 - G4double M106[NDENSARRAY]={21.361,1.938,3.2622,0.1618,2.5805,0.13134,3.3434,0,0.052,66.2 }; - AddMaterial(M106,"G4_ANILINE"); - -//G4_ANTHRACENE index=107 - G4double M107[NDENSARRAY]={23.704,1.954,3.1514,0.1146,2.5213,0.14677,3.2831,0,0.042,69.5 }; - AddMaterial(M107,"G4_ANTHRACENE"); - -//G4_B-100_BONE index=108 - G4double M108[NDENSARRAY]={25.199,2.013,3.4528,0.1252,3.042,0.05268,3.7365,0,0.043,85.9 }; - AddMaterial(M108,"G4_B-100_BONE"); - -//G4_BAKELITE index=109 - G4double M109[NDENSARRAY]={23.408,2.046,3.2582,0.1471,2.6055,0.12713,3.347,0,0.052,72.4 }; - AddMaterial(M109,"G4_BAKELITE"); - -//G4_BARIUM_FLUORIDE index=110 - G4double M110[NDENSARRAY]={41.398,1.727,5.4122,-0.0098,3.3871,0.15991,2.8867,0,0.034,375.9 }; - AddMaterial(M110,"G4_BARIUM_FLUORIDE"); - -//G4_BARIUM_SULFATE index=111 - G4double M111[NDENSARRAY]={40.805,1.893,4.8923,-0.0128,3.4069,0.11747,3.0427,0,0.03,285.7 }; - AddMaterial(M111,"G4_BARIUM_SULFATE"); - -//G4_BENZENE index=112 - G4double M112[NDENSARRAY]={19.806,1.873,3.3269,0.171,2.5091,0.16519,3.2174,0,0.052,63.4 }; - AddMaterial(M112,"G4_BENZENE"); - -//G4_BERYLLIUM_OXIDE index=113 - G4double M113[NDENSARRAY]={34.629,2.296,2.9801,0.0241,2.5846,0.10755,3.4927,0,0.031,93.2 }; - AddMaterial(M113,"G4_BERYLLIUM_OXIDE"); - -//G4_BGO index=114 - G4double M114[NDENSARRAY]={49.904,2.121,5.7409,0.0456,3.7816,0.09569,3.0781,0,0.023,534.1 }; - AddMaterial(M114,"G4_BGO"); - -//G4_BLOOD_ICRP index=115 - G4double M115[NDENSARRAY]={22.001,2.184,3.4581,0.2239,2.8017,0.08492,3.5406,0,0.088,75.2 }; - AddMaterial(M115,"G4_BLOOD_ICRP"); - -//G4_BONE_COMPACT_ICRU index=116 - G4double M116[NDENSARRAY]={28.536,2.091,3.3390,0.0944,3.0201,0.05822,3.6419,0,0.042,91.9 }; - AddMaterial(M116,"G4_BONE_COMPACT_ICRU"); - -//G4_BONE_CORTICAL_ICRP index=117 - G4double M117[NDENSARRAY]={28.298,2.118,3.6488,0.1161,3.0919,0.06198,3.5919,0,0.04,106.4 }; - AddMaterial(M117,"G4_BONE_CORTICAL_ICRP"); - -//G4_BORON_CARBIDE index=118 - G4double M118[NDENSARRAY]={31.38,2.14,2.9859,0.0093,2.1006,0.37087,2.8076,0,0.022,84.7 }; - AddMaterial(M118,"G4_BORON_CARBIDE"); - -//G4_BORON_OXIDE index=119 - G4double M119[NDENSARRAY]={27.107,2.446,3.6027,0.1843,2.7379,0.11548,3.3832,0,0.053,99.6 }; - AddMaterial(M119,"G4_BORON_OXIDE"); - -//G4_BRAIN_ICRP index=120 - G4double M120[NDENSARRAY]={21.772,2.162,3.4279,0.2206,2.8021,0.08255,3.5585,0,0.086,73.3 }; - AddMaterial(M120,"G4_BRAIN_ICRP"); - -//G4_BUTANE index=121 - G4double M121[NDENSARRAY]={1.101,1.727,8.5633,1.3788,3.7524,0.10852,3.4884,0,0.1,48.3 }; - AddMaterial(M121,"G4_BUTANE"); - -//G4_N-BUTYL_ALCOHOL index=122 - G4double M122[NDENSARRAY]={19.52,1.942,3.2425,0.1937,2.6439,0.10081,3.5139,0,0.065,59.9 }; - AddMaterial(M122,"G4_N-BUTYL_ALCOHOL"); - -//G4_C-552 index=123 - G4double M123[NDENSARRAY]={27.023,2.128,3.3338,0.151,2.7083,0.10492,3.4344,0,0.053,86.8 }; - AddMaterial(M123,"G4_C-552"); - -//G4_CADMIUM_TELLURIDE index=124 - G4double M124[NDENSARRAY]={46.314,1.935,5.9096,0.0438,3.2836,0.2484,2.6665,0,0.057,539.3 }; - AddMaterial(M124,"G4_CADMIUM_TELLURIDE"); - -//G4_CADMIUM_TUNGSTATE index=125 - G4double M125[NDENSARRAY]={52.954,2.289,5.3594,0.0123,3.5941,0.12861,2.915,0,0.027,468.3 }; - AddMaterial(M125,"G4_CADMIUM_TUNGSTATE"); - -//G4_CALCIUM_CARBONATE index=126 - G4double M126[NDENSARRAY]={34.08,2.141,3.7738,0.0492,3.0549,0.08301,3.412,0,0.037,136.4 }; - AddMaterial(M126,"G4_CALCIUM_CARBONATE"); - -//G4_CALCIUM_FLUORIDE index=127 - G4double M127[NDENSARRAY]={35.849,2.127,4.0653,0.0676,3.1683,0.06942,3.5263,0,0.044,166.0 }; - AddMaterial(M127,"G4_CALCIUM_FLUORIDE"); - -//G4_CALCIUM_OXIDE index=128 - G4double M128[NDENSARRAY]={36.988,1.973,4.1209,-0.0172,3.0171,0.12128,3.1936,0,0.024,176.1 }; - AddMaterial(M128,"G4_CALCIUM_OXIDE"); - -//G4_CALCIUM_SULFATE index=129 - G4double M129[NDENSARRAY]={35.038,2.179,3.9388,0.0587,3.1229,0.07708,3.4495,0,0.021,152.3 }; - AddMaterial(M129,"G4_CALCIUM_SULFATE"); - -//G4_CALCIUM_TUNGSTATE index=130 - G4double M130[NDENSARRAY]={46.934,2.262,5.2603,0.0323,3.8932,0.0621,3.2649,0,0.021,395.0 }; - AddMaterial(M130,"G4_CALCIUM_TUNGSTATE"); - -//G4_CARBON_DIOXIDE index=131 - G4double M131[NDENSARRAY]={0.874,2.118,10.1537,1.6294,4.1825,0.11768,3.3227,0,0.091,85.0 }; - AddMaterial(M131,"G4_CARBON_DIOXIDE"); - -//G4_CARBON_TETRACHLORIDE index=132 - G4double M132[NDENSARRAY]={25.234,1.742,4.7712,0.1773,2.9165,0.19018,3.0116,0,0.041,166.3 }; - AddMaterial(M132,"G4_CARBON_TETRACHLORIDE"); - -//G4_CELLULOSE_CELLOPHANE index=133 - G4double M133[NDENSARRAY]={25.008,2.17,3.2647,0.158,2.6778,0.11151,3.381,0,0.06,77.6 }; - AddMaterial(M133,"G4_CELLULOSE_CELLOPHANE"); - -//G4_CELLULOSE_BUTYRATE index=134 - G4double M134[NDENSARRAY]={23.041,2.128,3.3497,0.1794,2.6809,0.11444,3.3738,0,0.056,74.6 }; - AddMaterial(M134,"G4_CELLULOSE_BUTYRATE"); - -//G4_CELLULOSE_NITRATE index=135 - G4double M135[NDENSARRAY]={25.224,2.252,3.4762,0.1897,2.7253,0.11813,3.3237,0,0.063,87.0 }; - AddMaterial(M135,"G4_CELLULOSE_NITRATE"); - -//G4_CERIC_SULFATE index=136 - G4double M136[NDENSARRAY]={21.743,2.205,3.5212,0.2363,2.8769,0.07666,3.5607,0,0.095,76.7 }; - AddMaterial(M136,"G4_CERIC_SULFATE"); - -//G4_CESIUM_FLUORIDE index=137 - G4double M137[NDENSARRAY]={37.942,1.714,5.9046,0.0084,3.3374,0.22052,2.728,0,0.044,440.7 }; - AddMaterial(M137,"G4_CESIUM_FLUORIDE"); - -//G4_CESIUM_IODIDE index=138 - G4double M138[NDENSARRAY]={39.455,1.672,6.2807,0.0395,3.3353,0.25381,2.6657,0,0.067,553.1 }; - AddMaterial(M138,"G4_CESIUM_IODIDE"); - -//G4_CHLOROBENZENE index=139 - G4double M139[NDENSARRAY]={21.752,1.889,3.8201,0.1714,2.9272,0.09856,3.3797,0,0.031,89.1 }; - AddMaterial(M139,"G4_CHLOROBENZENE"); - -//G4_CHLOROFORM index=140 - G4double M140[NDENSARRAY]={24.462,1.734,4.7055,0.1786,2.9581,0.16959,3.0627,0,0.038,156. }; - AddMaterial(M140,"G4_CHLOROFORM"); - -//G4_CONCRETE index=141 - G4double M141[NDENSARRAY]={30.986,2.322,3.9464,0.1301,3.0466,0.07515,3.5467,0,0.024,135.2 }; - AddMaterial(M141,"G4_CONCRETE"); - -//G4_CYCLOHEXANE index=142 - G4double M142[NDENSARRAY]={19.207,1.861,3.1544,0.1728,2.5549,0.12035,3.4278,0,0.057,56.4 }; - AddMaterial(M142,"G4_CYCLOHEXANE"); - -//G4_1,2-DICHLOROBENZENE index=143 - G4double M143[NDENSARRAY]={23.354,1.862,4.0348,0.1587,2.8276,0.1601,3.0836,0,0.029,106.5 }; - AddMaterial(M143,"G4_1,2-DICHLOROBENZENE"); - -//G4_DICHLORODIETHYL_ETHER index=144 - G4double M144[NDENSARRAY]={22.894,1.903,4.0135,0.1773,3.1586,0.06799,3.525,0,0.026,103.3 }; - AddMaterial(M144,"G4_DICHLORODIETHYL_ETHER"); - -//G4_1,2-DICHLOROETHANE index=145 - G4double M145[NDENSARRAY]={22.764,1.618,4.1849,0.1375,2.9529,0.13383,3.1675,0,0.03,111.9 }; - AddMaterial(M145,"G4_1,2-DICHLOROETHANE"); - -//G4_DIETHYL_ETHER index=146 - G4double M146[NDENSARRAY]={18.326,1.951,3.3721,0.2231,2.6745,0.1055,3.4586,0,0.07,60.0 }; - AddMaterial(M146,"G4_DIETHYL_ETHER"); - -//G4_N,N-DIMETHYL_FORMAMIDE index=147 - G4double M147[NDENSARRAY]={20.763,2.005,3.3311,0.1977,2.6686,0.1147,3.371,0,0.065,66.6 }; - AddMaterial(M147,"G4_N,N-DIMETHYL_FORMAMIDE"); - -//G4_DIMETHYL_SULFOXIDE index=148 - G4double M148[NDENSARRAY]={22.173,2.075,3.9844,0.2021,3.1263,0.06619,3.5708,0,0.03,98.6 }; - AddMaterial(M148,"G4_DIMETHYL_SULFOXIDE"); - -//G4_ETHANE index=149 - G4double M149[NDENSARRAY]={0.789,1.69,9.1043,1.5107,3.8743,0.09627,3.6095,0,0.097,45.4 }; - AddMaterial(M149,"G4_ETHANE"); - -//G4_ETHYL_ALCOHOL index=150 - G4double M150[NDENSARRAY]={19.232,2.013,3.3699,0.2218,2.7052,0.09878,3.4834,0,0.071,62.9 }; - AddMaterial(M150,"G4_ETHYL_ALCOHOL"); - -//G4_ETHYL_CELLULOSE index=151 - G4double M151[NDENSARRAY]={22.594,2.065,3.2415,0.1683,2.6527,0.11077,3.4098,0,0.057,69.3 }; - AddMaterial(M151,"G4_ETHYL_CELLULOSE"); - -//G4_ETHYLENE index=152 - G4double M152[NDENSARRAY]={0.746,1.733,9.438,1.5528,3.9327,0.10636,3.5387,0,0.085,50.7 }; - AddMaterial(M152,"G4_ETHYLENE"); - -//G4_EYE_LENS_ICRP index=153 - G4double M153[NDENSARRAY]={22.388,2.154,3.372,0.207,2.7446,0.0969,3.455,0,0.077,73.3 }; - AddMaterial(M153,"G4_EYE_LENS_ICRP"); - -//G4_FERRIC_OXIDE index=154 - G4double M154[NDENSARRAY]={45.331,2.747,4.2245,-0.0074,3.2573,0.10478,3.1313,0,0.026,227.3 }; - AddMaterial(M154,"G4_FERRIC_OXIDE"); - -//G4_FERROBORIDE index=155 - G4double M155[NDENSARRAY]={52.546,2.726,4.2057,-0.0988,3.1749,0.12911,3.024,0,0.022,261.0 }; - AddMaterial(M155,"G4_FERROBORIDE"); - -//G4_FERROUS_OXIDE index=156 - G4double M156[NDENSARRAY]={47.327,2.769,4.3175,-0.0279,3.2002,0.12959,3.0168,0,0.022,248.6 }; - AddMaterial(M156,"G4_FERROUS_OXIDE"); - -//G4_FERROUS_SULFATE index=157 - G4double M157[NDENSARRAY]={21.69,2.208,3.5183,0.2378,2.8254,0.08759,3.4923,0,0.096,76.4 }; - AddMaterial(M157,"G4_FERROUS_SULFATE"); - -//G4_FREON-12 index=158 - G4double M158[NDENSARRAY]={21.121,1.974,4.8251,0.3035,3.2659,0.07978,3.4626,0,0.025,143.0 }; - AddMaterial(M158,"G4_FREON-12"); - -//G4_FREON-12B2 index=159 - G4double M159[NDENSARRAY]={25.877,2.195,5.7976,0.3406,3.7956,0.05144,3.5565,0,0.021,284.9 }; - AddMaterial(M159,"G4_FREON-12B2"); - -//G4_FREON-13 index=160 - G4double M160[NDENSARRAY]={19.432,2.116,4.7483,0.3659,3.2337,0.07238,3.5551,0,0.05,126.6 }; - AddMaterial(M160,"G4_FREON-13"); - -//G4_FREON-13B1 index=161 - G4double M161[NDENSARRAY]={23.849,2.233,5.3555,0.3522,3.7554,0.03925,3.7194,0,0.036,210.5 }; - AddMaterial(M161,"G4_FREON-13B1"); - -//G4_FREON-13I1 index=162 - G4double M162[NDENSARRAY]={25.615,1.924,5.8774,0.2847,3.728,0.09112,3.1658,0,0.025,293.5 }; - AddMaterial(M162,"G4_FREON-13I1"); - -//G4_GADOLINIUM_OXYSULFIDE index=163 - G4double M163[NDENSARRAY]={51.099,2.179,5.5347,-0.1774,3.4045,0.22161,2.63,0,0.056,493.3 }; - AddMaterial(M163,"G4_GADOLINIUM_OXYSULFIDE"); - -//G4_GALLIUM_ARSENIDE index=164 - G4double M164[NDENSARRAY]={44.17,2.652,5.3299,0.1764,3.642,0.07152,3.3356,0,0.027,384.9 }; - AddMaterial(M164,"G4_GALLIUM_ARSENIDE"); - -//G4_GEL_PHOTO_EMULSION index=165 - G4double M165[NDENSARRAY]={24.058,2.156,3.2687,0.1709,2.7058,0.10102,3.4418,0,0.06,74.8 }; - AddMaterial(M165,"G4_GEL_PHOTO_EMULSION"); - -//G4_Pyrex_Glass index=166 - G4double M166[NDENSARRAY]={30.339,2.369,3.9708,0.1479,2.9933,0.0827,3.5224,0,0.022,134.0 }; - AddMaterial(M166,"G4_Pyrex_Glass"); - -//G4_GLASS_LEAD index=167 - G4double M167[NDENSARRAY]={46.631,2.085,5.8476,0.0614,3.8146,0.09544,3.074,0,0.025,526.4 }; - AddMaterial(M167,"G4_GLASS_LEAD"); - -//G4_GLASS_PLATE index=168 - G4double M168[NDENSARRAY]={31.481,2.329,4.0602,0.1237,3.0649,0.07678,3.5381,0,0.025,145.4 }; - AddMaterial(M168,"G4_GLASS_PLATE"); - -//G4_GLUCOSE index=169 - G4double M169[NDENSARRAY]={26.153,2.174,3.1649,0.1411,2.67,0.10783,3.3946,0,0.061,77.2 }; - AddMaterial(M169,"G4_GLUCOSE"); - -//G4_GLUTAMINE index=170 - G4double M170[NDENSARRAY]={25.437,2.077,3.1167,0.1347,2.6301,0.11931,3.3254,0,0.055,73.3 }; - AddMaterial(M170,"G4_GLUTAMINE"); - -//G4_GLYCEROL index=171 - G4double M171[NDENSARRAY]={23.846,2.12,3.2267,0.1653,2.6862,0.10168,3.4481,0,0.067,72.6 }; - AddMaterial(M171,"G4_GLYCEROL"); - -//G4_GUANINE index=172 - G4double M172[NDENSARRAY]={26.022,1.97,3.1171,0.1163,2.4296,0.2053,3.0186,0,0.069,75.0 }; - AddMaterial(M172,"G4_GUANINE"); - -//G4_GYPSUM index=173 - G4double M173[NDENSARRAY]={31.379,2.187,3.8382,0.0995,3.1206,0.06949,3.5134,0,0.038,129.7 }; - AddMaterial(M173,"G4_GYPSUM"); - -//G4_N-HEPTANE index=174 - G4double M174[NDENSARRAY]={18.128,1.848,3.1978,0.1928,2.5706,0.11255,3.4885,0,0.059,54.4 }; - AddMaterial(M174,"G4_N-HEPTANE"); - -//G4_N-HEXANE index=175 - G4double M175[NDENSARRAY]={17.836,1.843,3.2156,0.1984,2.5757,0.11085,3.5027,0,0.061,54.0 }; - AddMaterial(M175,"G4_N-HEXANE"); - -//G4_KAPTON index=176 - G4double M176[NDENSARRAY]={24.586,2.109,3.3497,0.1509,2.5631,0.15972,3.1921,0,0.05,79.6 }; - AddMaterial(M176,"G4_KAPTON"); - -//G4_LANTHANUM_OXYBROMIDE index=177 - G4double M177[NDENSARRAY]={47.125,1.831,5.4666,-0.035,3.3288,0.1783,2.8457,0,0.04,439.7 }; - AddMaterial(M177,"G4_LANTHANUM_OXYBROMIDE"); - -//G4_LANTHANUM_OXYSULFIDE index=178 - G4double M178[NDENSARRAY]={45.394,1.681,5.6151,-0.0934,3.2741,0.22579,2.7075,0,0.065,456.2 }; - AddMaterial(M178,"G4_LANTHANUM_OXYSULFIDE"); - -//G4_LEAD_OXIDE index=179 - G4double M179[NDENSARRAY]={56.488,2.012,6.2162,0.0356,3.5456,0.19645,2.7299,0,0.039,766.7 }; - AddMaterial(M179,"G4_LEAD_OXIDE"); - -//G4_LITHIUM_AMIDE index=180 - G4double M180[NDENSARRAY]={22.609,1.74,2.7961,0.0198,2.5152,0.0874,3.7534,0,0.05,55.5 }; - AddMaterial(M180,"G4_LITHIUM_AMIDE"); - -//G4_LITHIUM_CARBONATE index=181 - G4double M181[NDENSARRAY]={29.217,2.246,3.2029,0.0551,2.6598,0.09936,3.5417,0,0.062,87.9 }; - AddMaterial(M181,"G4_LITHIUM_CARBONATE"); - -//G4_LITHIUM_FLUORIDE index=182 - G4double M182[NDENSARRAY]={31.815,2.197,3.1667,0.0171,2.7049,0.07593,3.7478,0,0.084,94.0 }; - AddMaterial(M182,"G4_LITHIUM_FLUORIDE"); - -//G4_LITHIUM_HYDRIDE index=183 - G4double M183[NDENSARRAY]={18.51,1.482,2.358,-0.0988,1.4515,0.90567,2.5849,0,0.035,36.5 }; - AddMaterial(M183,"G4_LITHIUM_HYDRIDE"); - -//G4_LITHIUM_IODIDE index=184 - G4double M184[NDENSARRAY]={34.841,1.706,6.2671,0.0892,3.3702,0.23274,2.7146,0,0.043,485.1 }; - AddMaterial(M184,"G4_LITHIUM_IODIDE"); - -//G4_LITHIUM_OXIDE index=185 - G4double M185[NDENSARRAY]={27.984,2.039,2.934,-0.0511,2.5874,0.08035,3.7878,0,0.043,73.6 }; - AddMaterial(M185,"G4_LITHIUM_OXIDE"); - -//G4_LITHIUM_TETRABORATE index=186 - G4double M186[NDENSARRAY]={31.343,2.36,3.2093,0.0737,2.6502,0.11075,3.4389,0,0.048,94.6 }; - AddMaterial(M186,"G4_LITHIUM_TETRABORATE"); - -//G4_LUNG_ICRP index=187 - G4double M187[NDENSARRAY]={21.891,2.184,3.4708,0.2261,2.8001,0.08588,3.5353,0,0.089,75.3 }; - AddMaterial(M187,"G4_LUNG_ICRP"); - -//G4_M3_WAX index=188 - G4double M188[NDENSARRAY]={22,1.975,3.254,0.1523,2.7529,0.07864,3.6412,0,0.044,67.9 }; - AddMaterial(M188,"G4_M3_WAX"); - -//G4_MAGNESIUM_CARBONATE index=189 - G4double M189[NDENSARRAY]={34.979,2.388,3.4319,0.086,2.7997,0.09219,3.5003,0,0.045,118.0 }; - AddMaterial(M189,"G4_MAGNESIUM_CARBONATE"); - -//G4_MAGNESIUM_FLUORIDE index=190 - G4double M190[NDENSARRAY]={34.634,2.33,3.7105,0.1369,2.863,0.07934,3.6485,0,0.085,134.3 }; - AddMaterial(M190,"G4_MAGNESIUM_FLUORIDE"); - -//G4_MAGNESIUM_OXIDE index=191 - G4double M191[NDENSARRAY]={38.407,2.412,3.6404,0.0575,2.858,0.08313,3.5968,0,0.055,143.8 }; - AddMaterial(M191,"G4_MAGNESIUM_OXIDE"); -//G4_MAGNESIUM_TETRABORATE index=192 - G4double M192[NDENSARRAY]={32.089,2.43,3.4328,0.1147,2.7635,0.09703,3.4893,0,0.044,108.3 }; - AddMaterial(M192,"G4_MAGNESIUM_TETRABORATE"); - -//G4_MERCURIC_IODIDE index=193 - G4double M193[NDENSARRAY]={46.494,1.892,6.3787,0.104,3.4728,0.21513,2.7264,0,0.047,684.5 }; - AddMaterial(M193,"G4_MERCURIC_IODIDE"); - -//G4_METHANE index=194 - G4double M194[NDENSARRAY]={0.588,1.662,9.5243,1.6263,3.9716,0.09253,3.6257,0,0.112,41.7 }; - AddMaterial(M194,"G4_METHANE"); - -//G4_METHANOL index=195 - G4double M195[NDENSARRAY]={19.214,2.125,3.516,0.2529,2.7639,0.0897,3.5477,0,0.08,67.6 }; - AddMaterial(M195,"G4_METHANOL"); - -//G4_MIX_D_WAX index=196 - G4double M196[NDENSARRAY]={21.547,1.905,3.078,0.1371,2.7145,0.0749,3.6823,0,0.047,60.9 }; - AddMaterial(M196,"G4_MIX_D_WAX"); - -//G4_MS20_TISSUE index=197 - G4double M197[NDENSARRAY]={21.153,2.07,3.5341,0.1997,2.8033,0.08294,3.6061,0,0.053,75.1 }; - AddMaterial(M197,"G4_MS20_TISSUE"); - -//G4_MUSCLE_SCELETAL_ICRP index=198 - G4double M198[NDENSARRAY]={21.781,2.185,3.4809,0.2282,2.7999,0.08636,3.533,0,0.089,75.3 }; - AddMaterial(M198,"G4_MUSCLE_SCELETAL_ICRP"); - -//G4_MUSCLE_STRIATED_ICRU index=199 - G4double M199[NDENSARRAY]={21.795,2.174,3.4636,0.2249,2.8032,0.08507,3.5383,0,0.086,74.7 }; - AddMaterial(M199,"G4_MUSCLE_STRIATED_ICRU"); - -//G4_MUSCLE_WITH_SUCROSE index=200 - G4double M200[NDENSARRAY]={22.48,2.169,3.391,0.2098,2.755,0.09481,3.4699,0,0.08,74.3 }; - AddMaterial(M200,"G4_MUSCLE_WITH_SUCROSE"); - -//G4_MUSCLE_WITHOUT_SUCROSE index=201 - G4double M201[NDENSARRAY]={22.109,2.173,3.4216,0.2187,2.768,0.09143,3.4982,0,0.056,74.2 }; - AddMaterial(M201,"G4_MUSCLE_WITHOUT_SUCROSE"); - -//G4_NAPHTALENE index=202 - G4double M202[NDENSARRAY]={22.459,1.956,3.2274,0.1374,2.5429,0.14766,3.2654,0,0.051,68.4 }; - AddMaterial(M202,"G4_NAPHTALENE"); - -//G4_NITROBENZENE index=203 - G4double M203[NDENSARRAY]={22.747,2.065,3.4073,0.1777,2.663,0.12727,3.3091,0,0.051,75.8 }; - AddMaterial(M203,"G4_NITROBENZENE"); - -//G4_NITROUS_OXIDE index=204 - G4double M204[NDENSARRAY]={0.872,2.059,10.1575,1.6477,4.1565,0.11992,3.3318,0,0.086,84.9 }; - AddMaterial(M204,"G4_NITROUS_OXIDE"); - -//G4_NYLON-8062 index=205 - G4double M205[NDENSARRAY]={22.221,1.967,3.125,0.1503,2.6004,0.11513,3.4044,0,0.054,64.3 }; - AddMaterial(M205,"G4_NYLON-8062"); - -//G4_NYLON-6/6 index=206 - G4double M206[NDENSARRAY]={22.774,1.931,3.0634,0.1336,2.5834,0.11818,3.3826,0,0.051,63.9 }; - AddMaterial(M206,"G4_NYLON-6-6"); - -//G4_NYLON-6/10 index=207 - G4double M207[NDENSARRAY]={22.866,1.942,3.0333,0.1304,2.5681,0.11852,3.3912,0,0.05,63.2 }; - AddMaterial(M207,"G4_NYLON-6-10"); - -//G4_NYLON-11_RILSAN index=208 - G4double M208[NDENSARRAY]={25.661,1.902,2.7514,0.0678,2.4281,0.14868,3.2576,0,0.044,61.6 }; - AddMaterial(M208,"G4_NYLON-11_RILSAN"); - -//G4_OCTANE index=209 - G4double M209[NDENSARRAY]={18.36,1.851,3.1834,0.1882,2.5664,0.11387,3.4776,0,0.057,54.7 }; - AddMaterial(M209,"G4_OCTANE"); - -//G4_PARAFFIN index=210 - G4double M210[NDENSARRAY]={21.031,1.844,2.9551,0.1289,2.5084,0.12087,3.4288,0,0.052,55.9 }; - AddMaterial(M210,"G4_PARAFFIN"); - -//G4_N-PENTANE index=211 - G4double M211[NDENSARRAY]={17.398,1.842,3.2504,0.2086,2.5855,0.10809,3.5265,0,0.064,53.6 }; - AddMaterial(M211,"G4_N-PENTANE"); - -//G4_PHOTO_EMULSION index=212 - G4double M212[NDENSARRAY]={37.946,2.264,5.3319,0.1009,3.4866,0.12399,3.0094,0,0.028,331.0 }; - AddMaterial(M212,"G4_PHOTO_EMULSION"); - -//G4_PLASTIC_SC_VINYLTOLUENE index=213 - G4double M213[NDENSARRAY]={21.54,1.929,3.1997,0.1464,2.4855,0.16101,3.2393,0,0.05,64.7 }; - AddMaterial(M213,"G4_PLASTIC_SC_VINYLTOLUENE"); - -//G4_PLUTONIUM_DIOXIDE index=214 - G4double M214[NDENSARRAY]={62.143,1.846,5.9719,-0.2311,3.5554,0.20594,2.6522,0,0.111,746.5 }; - AddMaterial(M214,"G4_PLUTONIUM_DIOXIDE"); - -//G4_POLYACRYLONITRILE index=215 - G4double M215[NDENSARRAY]={22.642,1.955,3.2459,0.1504,2.5159,0.16275,3.1975,0,0.05,69.6 }; - AddMaterial(M215,"G4_POLYACRYLONITRILE"); - -//G4_POLYCARBONATE index=216 - G4double M216[NDENSARRAY]={22.915,2.06,3.3201,0.1606,2.6225,0.1286,3.3288,0,0.049,73.1 }; - AddMaterial(M216,"G4_POLYCARBONATE"); - -//G4_POLYCHLOROSTYRENE index=217 - G4double M217[NDENSARRAY]={23.81,1.902,3.4659,0.1238,2.9241,0.0753,3.5441,0,0.029,81.7 }; - AddMaterial(M217,"G4_POLYCHLOROSTYRENE"); - -//G4_POLYETHYLENE index=218 - G4double M218[NDENSARRAY]={21.099,1.882,3.0016,0.137,2.5177,0.12108,3.4292,0,0.051,57.4 }; - AddMaterial(M218,"G4_POLYETHYLENE"); - -//G4_MYLAR index=219 - G4double M219[NDENSARRAY]={24.595,2.144,3.3262,0.1562,2.6507,0.12679,3.3076,0,0.052,78.7 }; - AddMaterial(M219,"G4_MYLAR"); - -//G4_LUCITE index=220 - G4double M220[NDENSARRAY]={23.086,2.173,3.3297,0.1824,2.6681,0.11433,3.3836,0,0.056,74.0 }; - AddMaterial(M220,"G4_LUCITE"); - -//G4_POLYOXOMETHYLENE index=221 - G4double M221[NDENSARRAY]={25.11,2.175,3.2514,0.1584,2.6838,0.10808,3.4002,0,0.063,77.4 }; - AddMaterial(M221,"G4_POLYOXOMETHYLENE"); - -//G4_POLYPROPYLENE index=222 - G4double M222[NDENSARRAY]={20.457,1.884,3.1252,0.1534,2.4822,0.15045,3.2855,0,0.055,59.2 }; - AddMaterial(M222,"G4_POLYPROPYLENE"); - -//G4_POLYSTYRENE index=223 - G4double M223[NDENSARRAY]={21.754,2.027,3.2999,0.1647,2.5031,0.16454,3.2224,0,0.051,68.7 }; - AddMaterial(M223,"G4_POLYSTYRENE"); - -//G4_TEFLON index=224 - G4double M224[NDENSARRAY]={29.609,2.142,3.4161,0.1648,2.7404,0.10606,3.4046,0,0.073,99.1 }; - AddMaterial(M224,"G4_TEFLON"); - -//G4_POLYTRIFLUOROCHLOROETHYLENE index=225 - G4double M225[NDENSARRAY]={28.955,2.094,3.8551,0.1714,3.0265,0.07727,3.5085,0,0.035,120.7 }; - AddMaterial(M225,"G4_POLYTRIFLUOROCHLOROETHYLENE"); - -//G4_POLYVINYL_ACETATE index=226 - G4double M226[NDENSARRAY]={22.978,2.116,3.3309,0.1769,2.6747,0.11442,3.3762,0,0.055,73.7 }; - AddMaterial(M226,"G4_POLYVINYL_ACETATE"); - -//G4_PLOYVINYL_ALCOHOL index=227 - G4double M227[NDENSARRAY]={24.251,2.071,3.1115,0.1401,2.6315,0.11178,3.3893,0,0.056,69.7 }; - AddMaterial(M227,"G4_PLOYVINYL_ALCOHOL"); - -//G4_POLYVINYL_BUTYRAL index=228 - G4double M228[NDENSARRAY]={22.521,2.021,3.1865,0.1555,2.6186,0.11544,3.3983,0,0.054,67.2 }; - AddMaterial(M228,"G4_POLYVINYL_BUTYRAL"); - -//G4_POLYVINYL_CHLORIDE index=229 - G4double M229[NDENSARRAY]={23.51,1.84,4.0532,0.1559,2.9415,0.12438,3.2104,0,0.027,108.2 }; - AddMaterial(M229,"G4_POLYVINYL_CHLORIDE"); - -//G4_POLYVINYLIDENE_CHLORIDE index=230 - G4double M230[NDENSARRAY]={26.437,1.814,4.2506,0.1314,2.9009,0.15466,3.102,0,0.034,134.3 }; - AddMaterial(M230,"G4_POLYVINYLIDENE_CHLORIDE"); - -//G4_POLYVINYLIDENE_FLUORIDE index=231 - G4double M231[NDENSARRAY]={27.024,2.16,3.3793,0.1717,2.7375,0.10316,3.42,0,0.067,88.8 }; - AddMaterial(M231,"G4_POLYVINYLIDENE_FLUORIDE"); - -//G4_POLYVINYL_PYRROLIDONE index=232 - G4double M232[NDENSARRAY]={23.671,1.989,3.1017,0.1324,2.5867,0.12504,3.3326,0,0.031,67.7 }; - AddMaterial(M232,"G4_POLYVINYL_PYRROLIDONE"); - -//G4_POTASSIUM_IODIDE index=233 - G4double M233[NDENSARRAY]={33.575,1.784,6.1088,0.1044,3.3442,0.22053,2.7558,0,0.042,431.9 }; - AddMaterial(M233,"G4_POTASSIUM_IODIDE"); - -//G4_POTASSIUM_OXIDE index=234 - G4double M234[NDENSARRAY]={30.672,2.065,4.6463,0.048,3.011,0.16789,3.0121,0,0.027,189.9 }; - AddMaterial(M234,"G4_POTASSIUM_OXIDE"); - -//G4_PROPANE index=235 - G4double M235[NDENSARRAY]={0.959,1.708,8.7878,1.4326,3.7998,0.09916,3.592,0,0.093,47.1 }; - AddMaterial(M235,"G4_PROPANE"); - -//G4_lPROPANE index=236 - G4double M236[NDENSARRAY]={14.509,1.844,3.5529,0.2861,2.6568,0.10329,3.562,0,0.068,52.0 }; - AddMaterial(M236,"G4_lPROPANE"); - -//G4_N-PROPYL_ALCOHOL index=237 - G4double M237[NDENSARRAY]={19.429,1.972,3.2915,0.2046,2.6681,0.09644,3.5415,0,0.07,61.1 }; - AddMaterial(M237,"N-PROPYL_ALCOHOL"); - -//G4_PYRIDINE index=238 - G4double M238[NDENSARRAY]={20.807,1.895,3.3148,0.167,2.5245,0.16399,3.1977,0,0.051,66.2 }; - AddMaterial(M238,"G4_PYRIDINE"); - -//G4_RUBBER_BUTYL index=239 - G4double M239[NDENSARRAY]={20.873,1.852,2.9915,0.1347,2.5154,0.12108,3.4296,0,0.051,56.5 }; - AddMaterial(M239,"G4_RUBBER_BUTYL"); - -//G4_RUBBER_NATURAL index=240 - G4double M240[NDENSARRAY]={20.644,1.889,3.1272,0.1512,2.4815,0.15058,3.2879,0,0.053,59.8 }; - AddMaterial(M240,"G4_RUBBER_NATURAL"); - -//G4_RUBBER_NEOPRENE index=241 - G4double M241[NDENSARRAY]={23.036,1.874,3.7911,0.1501,2.9461,0.09763,3.3632,0,0.026,93.0 }; - AddMaterial(M241,"G4_RUBBER_NEOPRENE"); - -//G4_SILICON_DIOXIDE index=242 - G4double M242[NDENSARRAY]={31.014,2.335,4.0029,0.1385,3.0025,0.08408,3.5064,0,0.018,139.2 }; - AddMaterial(M242,"G4_SILICON_DIOXIDE"); - -//G4_SILVER_BROMIDE index=243 - G4double M243[NDENSARRAY]={48.448,2.271,5.6139,0.0352,3.2109,0.24582,2.682,0,0.043,486.6 }; - AddMaterial(M243,"G4_SILVER_BROMIDE"); - -//G4_SILVER_CHLORIDE index=244 - G4double M244[NDENSARRAY]={45.405,2.096,5.3437,-0.0139,3.2022,0.22968,2.7041,0,0.062,398.4 }; - AddMaterial(M244,"G4_SILVER_CHLORIDE"); - -//G4_SILVER_HALIDES index=245 - G4double M245[NDENSARRAY]={48.433,2.27,5.6166,0.0353,3.2117,0.24593,2.6814,0,0.043,487.1 }; - AddMaterial(M245,"G4_SILVER_HALIDES"); - -//G4_SILVER_IODIDE index=246 - G4double M246[NDENSARRAY]={46.105,1.945,5.9342,0.0148,3.2908,0.25059,2.6572,0,0.071,543.5 }; - AddMaterial(M246,"G4_SILVER_IODIDE"); - -//G4_SKIN_ICRP index=247 - G4double M247[NDENSARRAY]={22.4,2.14,3.3546,0.2019,2.7526,0.09459,3.4643,0,0.076,72.7 }; - AddMaterial(M247,"G4_SKIN_ICRP"); - -//G4_SODIUM_CARBONATE index=248 - G4double M248[NDENSARRAY]={32.117,2.557,3.7178,0.1287,2.8591,0.08715,3.5638,0,0.074,125.0 }; - AddMaterial(M248,"G4_SODIUM_CARBONATE"); - -//G4_SODIUM_IODIDE index=249 - G4double M249[NDENSARRAY]={36.057,1.857,6.0572,0.1203,3.592,0.12516,3.0398,0,0.031,452.0 }; - AddMaterial(M249,"G4_SODIUM_IODIDE"); - -//G4_SODIUM_MONOXIDE index=250 - G4double M250[NDENSARRAY]={30.205,2.689,4.1892,0.1652,2.9793,0.07501,3.6943,0,0.097,148.8 }; - AddMaterial(M250,"G4_SODIUM_MONOXIDE"); - -//G4_SODIUM_NITRATE index=251 - G4double M251[NDENSARRAY]={30.459,2.456,3.6502,0.1534,2.8221,0.09391,3.5097,0,0.081,114.6 }; - AddMaterial(M251,"G4_SODIUM_NITRATE"); - -//G4_STILBENE index=252 - G4double M252[NDENSARRAY]={20.719,1.963,3.368,0.1734,2.5142,0.16659,3.2168,0,0.052,67.7 }; - AddMaterial(M252,"G4_STILBENE"); - -//G4_SUCROSE index=253 - G4double M253[NDENSARRAY]={26.416,2.167,3.1526,0.1341,2.6558,0.11301,3.363,0,0.057,77.5 }; - AddMaterial(M253,"G4_SUCROSE"); - -//G4_TERPHENYL index=254 - G4double M254[NDENSARRAY]={23.116,1.976,3.2639,0.1322,2.5429,0.14964,3.2685,0,0.043,71.7 }; - AddMaterial(M254,"G4_TERPHENYL"); - -//G4_TESTES_ICRP index=255 - G4double M255[NDENSARRAY]={21.815,2.185,3.4698,0.2274,2.7988,0.08533,3.5428,0,0.091,75.0 }; - AddMaterial(M255,"G4_TESTES_ICRP"); - -//G4_TETRACHLOROETHYLENE index=256 - G4double M256[NDENSARRAY]={25.513,1.79,4.6619,0.1713,2.9083,0.18595,3.0156,0,0.038,159.2 }; - AddMaterial(M256,"G4_TETRACHLOROETHYLENE"); - -//G4_THALIUM_CHLORIDE index=257 - G4double M257[NDENSARRAY]={48.749,1.997,6.3009,0.0705,3.5716,0.18599,2.769,0,0.04,690.3 }; - AddMaterial(M257,"G4_THALIUM_CHLORIDE"); - -//G4_TISSUE_SOFT_ICRP index=258 - G4double M258[NDENSARRAY]={21.394,2.144,3.4354,0.2211,2.7799,0.08926,3.511,0,0.077,72.3 }; - AddMaterial(M258,"G4_TISSUE_SOFT_ICRP"); - -//G4_TISSUE_SOFT_ICRU-4 index=259 - G4double M259[NDENSARRAY]={21.366,2.192,3.5087,0.2377,2.7908,0.09629,3.4371,0,0.092,74.9 }; - AddMaterial(M259,"G4_TISSUE_SOFT_ICRU-4"); - -//G4_TISSUE-METHANE index=260 - G4double M260[NDENSARRAY]={0.697,1.89,9.95,1.6442,4.1399,0.09946,3.4708,0,0.098,61.2 }; - AddMaterial(M260,"G4_TISSUE-METHANE"); - -//G4_TISSUE-PROPANE index=261 - G4double M261[NDENSARRAY]={0.913,1.856,9.3529,1.5139,3.9916,0.09802,3.5159,0,0.092,59.5 }; - AddMaterial(M261,"G4_TISSUE-PROPANE"); - -//G4_TITANIUM_DIOXIDE index=262 - G4double M262[NDENSARRAY]={41.022,2.307,3.9522,-0.0119,3.1647,0.08569,3.3267,0,0.027,179.5 }; - AddMaterial(M262,"G4_TITANIUM_DIOXIDE"); - -//G4_TOLUENE index=263 - G4double M263[NDENSARRAY]={19.764,1.88,3.3026,0.1722,2.5728,0.13284,3.3558,0,0.052,62.5 }; - AddMaterial(M263,"G4_TOLUENE"); - -//G4_TRICHLOROETHYLENE index=264 - G4double M264[NDENSARRAY]={24.301,1.789,4.6148,0.1803,2.914,0.18272,3.0137,0,0.036,148.1 }; - AddMaterial(M264,"G4_TRICHLOROETHYLENE"); - -//G4_TRIETHYL_PHOSPHATE index=265 - G4double M265[NDENSARRAY]={21.863,2.1,3.6242,0.2054,2.9428,0.06922,3.6302,0,0.049,81.2 }; - AddMaterial(M265,"G4_TRIETHYL_PHOSPHATE"); - -//G4_TUNGSTEN_HEXAFLUORIDE index=266 - G4double M266[NDENSARRAY]={29.265,2.325,5.9881,0.302,4.2602,0.03658,3.5134,0,0.055,354.4 }; - AddMaterial(M266,"G4_TUNGSTEN_HEXAFLUORIDE"); - -//G4_URANIUM_DICARBIDE index=267 - G4double M267[NDENSARRAY]={60.969,1.703,6.0247,-0.2191,3.5208,0.2112,2.6577,0,0.12,752.0 }; - AddMaterial(M267,"G4_URANIUM_DICARBIDE"); - -//G4_URANIUM_MONOCARBIDE index=268 - G4double M268[NDENSARRAY]={66.602,1.68,6.121,-0.2524,3.4941,0.22972,2.6169,0,0.132,862.0 }; - AddMaterial(M268,"G4_URANIUM_MONOCARBIDE"); - -//G4_URANIUM_OXIDE index=269 - G4double M269[NDENSARRAY]={60.332,1.76,5.9605,-0.1938,3.5292,0.20463,2.6711,0,0.098,720.6 }; - AddMaterial(M269,"G4_URANIUM_OXIDE"); - -//G4_UREA index=270 - G4double M270[NDENSARRAY]={24.194,2.022,3.2032,0.1603,2.6525,0.11609,3.3461,0,0.06,72.8 }; - AddMaterial(M270,"G4_UREA"); - -//G4_VALINE index=271 - G4double M271[NDENSARRAY]={23.622,2.024,3.1059,0.1441,2.6227,0.11386,3.3774,0,0.056,67.7 }; - AddMaterial(M271,"G4_VALINE"); - -//G4_VITON index=272 - G4double M272[NDENSARRAY]={26.948,2.227,3.5943,0.2106,2.7874,0.09965,3.4556,0,0.07,98.6 }; - AddMaterial(M272,"G4_VITON"); - -//G4_WATER index=273 - G4double M273[NDENSARRAY]={21.469,2.203,3.5017,0.24,2.8004,0.09116,3.4773,0,0.097,75.0 }; - AddMaterial(M273,"G4_WATER"); - -//G4_WATER_VAPOR index=274 - G4double M274[NDENSARRAY]={0.59,2.175,10.5962,1.7952,4.3437,0.08101,3.5901,0,0.121,71.6 }; - AddMaterial(M274,"G4_WATER_VAPOR"); - -//G4_XYLENE index=275 - G4double M275[NDENSARRAY]={19.866,1.882,3.2698,0.1695,2.5675,0.13216,3.3564,0,0.051,61.8 }; - AddMaterial(M275,"G4_XYLENE"); - -//G4_GRAPHITE index=276 - G4double M276[NDENSARRAY]={30.652,2.29,2.868,-0.0178,2.3415,0.26142,2.8697,0.12,0.038,78.0 }; - AddMaterial(M276,"G4_GRAPHITE"); + for (G4int i = 0; i < NDENSELEM; ++i) { + indexZ[i] = -1; + state[i] = kStateSolid; + } -//G4_GRAPHITE_POROUS index=277 - G4double M277[NDENSARRAY]={26.555,2.49,3.155,0.048,2.5387,0.20762,2.9532,0.14,0.038,78.0 }; - AddMaterial(M277,"G4_GRAPHITE_POROUS"); + // G4_lH2 index=0 + G4double M1[NDENSARRAY] = { + 7.031, 1.546, 3.2632, 0.4759, 1.9215, 0.13483, 5.6249, 0., 0.021, 21.8}; + AddMaterial(M1, "G4_lH2"); + + // G4_H index=1 + G4double M0[NDENSARRAY] = { + 0.263, 1.412, 9.5835, 1.8639, 3.2718, 0.14092, 5.7273, 0.0, 0.024, 19.2}; + AddMaterial(M0, "G4_H"); + indexZ[1] = 1; + state[1] = kStateGas; + + // G4_He index=2 + G4double M2[NDENSARRAY] = {0.263, 1.7, 11.1393, 2.2017, 3.6122, 0.13443, 5.8347, 0, 0.024, 41.8}; + AddMaterial(M2, "G4_He"); + indexZ[2] = 2; + state[2] = kStateGas; + + // G4_Li index=3 + G4double M3[NDENSARRAY] = { + 13.844, 1.535, 3.1221, 0.1304, 1.6397, 0.95136, 2.4993, 0.14, 0.062, 40.0}; + AddMaterial(M3, "G4_Li"); + indexZ[3] = 3; + + // G4_Be index=4 + G4double M4[NDENSARRAY] = { + 26.098, 1.908, 2.7847, 0.0392, 1.6922, 0.80392, 2.4339, 0.14, 0.029, 63.7}; + AddMaterial(M4, "G4_Be"); + indexZ[4] = 4; + + // G4_B index=5 + G4double M5[NDENSARRAY] = { + 30.17, 2.32, 2.8477, 0.0305, 1.9688, 0.56224, 2.4512, 0.14, 0.024, 76.0}; + AddMaterial(M5, "G4_B"); + indexZ[5] = 5; + + // G4_C index=6 + G4double M6[NDENSARRAY] = { + 28.803, 2.376, 2.9925, -0.0351, 2.486, 0.2024, 3.0036, 0.1, 0.038, 78.0}; + AddMaterial(M6, "G4_C"); + indexZ[6] = 6; + + // G4_N index=7 + G4double M7[NDENSARRAY] = { + 0.695, 1.984, 10.5400, 1.7378, 4.1323, 0.15349, 3.2125, 0.0, 0.086, 82.}; + AddMaterial(M7, "G4_N"); + indexZ[7] = 7; + state[7] = kStateGas; + + // G4_O index=8 + G4double M8[NDENSARRAY] = { + 0.744, 2.314, 10.7004, 1.7541, 4.3213, 0.11778, 3.2913, 0.0, 0.101, 95.}; + AddMaterial(M8, "G4_O"); + indexZ[8] = 8; + state[8] = kStateGas; + + // G4_F index=9 + G4double M9[NDENSARRAY] = { + 0.788, 2.450, 10.9653, 1.8433, 4.4096, 0.11083, 3.2962, 0.0, 0.121, 115.}; + AddMaterial(M9, "G4_F"); + indexZ[9] = 9; + state[9] = kStateGas; + + // G4_Ne index=10 + G4double M10[NDENSARRAY] = { + 0.587, 2.577, 11.9041, 2.0735, 4.6421, 0.08064, 3.5771, 0.0, 0.110, 137.}; + AddMaterial(M10, "G4_Ne"); + indexZ[10] = 10; + state[10] = kStateGas; + + // G4_Na index=11 + G4double M11[NDENSARRAY] = { + 19.641, 2.648, 5.0526, 0.2880, 3.1962, 0.07772, 3.6452, 0.08, 0.098, 149.}; + AddMaterial(M11, "G4_Na"); + indexZ[11] = 11; + + // G4_Mg index=12 + G4double M12[NDENSARRAY] = { + 26.708, 2.331, 4.5297, 0.1499, 3.0668, 0.08163, 3.6166, 0.08, 0.073, 156.}; + AddMaterial(M12, "G4_Mg"); + indexZ[12] = 12; + + // G4_Al index=13 + G4double M13[NDENSARRAY] = { + 32.86, 2.18, 4.2395, 0.1708, 3.0127, 0.08024, 3.6345, 0.12, 0.061, 166.}; + AddMaterial(M13, "G4_Al"); + indexZ[13] = 13; + + // G4_Si index=14 + G4double M14[NDENSARRAY] = { + 31.055, 2.103, 4.4351, 0.2014, 2.8715, 0.14921, 3.2546, 0.14, 0.059, 173.}; + AddMaterial(M14, "G4_Si"); + indexZ[14] = 14; + + // G4_P index=15 + G4double M15[NDENSARRAY] = { + 29.743, 2.056, 4.5214, 0.1696, 2.7815, 0.2361, 2.9158, 0.14, 0.057, 173.}; + AddMaterial(M15, "G4_P"); + indexZ[15] = 15; + + // G4_S index=16 + G4double M16[NDENSARRAY] = { + 28.789, 2.131, 4.6659, 0.158, 2.7159, 0.33992, 2.6456, 0.14, 0.059, 180.}; + AddMaterial(M16, "G4_S"); + indexZ[16] = 16; + + // G4_Cl index=17 + G4double M17[NDENSARRAY] = { + 1.092, 1.734, 11.1421, 1.5555, 4.2994, 0.19849, 2.9702, 0.0, 0.041, 174.}; + AddMaterial(M17, "G4_Cl"); + indexZ[17] = 17; + state[17] = kStateGas; + + // G4_Ar index=18 + G4double M18[NDENSARRAY] = { + 0.789, 1.753, 11.9480, 1.7635, 4.4855, 0.19714, 2.9618, 0.0, 0.037, 188.}; + AddMaterial(M18, "G4_Ar"); + indexZ[18] = 18; + state[18] = kStateGas; + + // G4_K index=19 + G4double M19[NDENSARRAY] = { + 18.65, 1.830, 5.6423, 0.3851, 3.1724, 0.19827, 2.9233, 0.10, 0.035, 190.}; + AddMaterial(M19, "G4_K"); + indexZ[19] = 19; + + // G4_Ca index=20 + G4double M20[NDENSARRAY] = { + 25.342, 1.666, 5.0396, 0.3228, 3.1191, 0.15643, 3.0745, 0.14, 0.031, 191.}; + AddMaterial(M20, "G4_Ca"); + indexZ[20] = 20; + + // G4_Sc index=21 + G4double M21[NDENSARRAY] = { + 34.050, 1.826, 4.6949, 0.1640, 3.0593, 0.15754, 3.0517, 0.10, 0.027, 216.}; + AddMaterial(M21, "G4_Sc"); + indexZ[21] = 21; + + // G4_Ti index=22 + G4double M22[NDENSARRAY] = { + 41.619, 1.969, 4.4450, 0.0957, 3.0386, 0.15662, 3.0302, 0.12, 0.025, 233.}; + AddMaterial(M22, "G4_Ti"); + indexZ[22] = 22; + + // G4_V index=23 + G4double M23[NDENSARRAY] = { + 47.861, 2.070, 4.2659, 0.0691, 3.0322, 0.15436, 3.0163, 0.14, 0.024, 245.}; + AddMaterial(M23, "G4_V"); + indexZ[23] = 23; + + // G4_Cr index=24 + G4double M24[NDENSARRAY] = { + 52.458, 2.181, 4.1781, 0.0340, 3.0451, 0.15419, 2.9896, 0.14, 0.023, 257.}; + AddMaterial(M24, "G4_Cr"); + indexZ[24] = 24; + + // G4_Mn index=25 + G4double M25[NDENSARRAY] = { + 53.022, 2.347, 4.2702, 0.0447, 3.1074, 0.14973, 2.9796, 0.14, 0.021, 272.}; + AddMaterial(M25, "G4_Mn"); + indexZ[25] = 25; + + // G4_Fe index=26 + G4double M26[NDENSARRAY] = { + 55.172, 2.504, 4.2911, -0.0012, 3.1531, 0.1468, 2.9632, 0.12, 0.021, 286.}; + AddMaterial(M26, "G4_Fe"); + indexZ[26] = 26; + + // G4_Co index=27 + G4double M27[NDENSARRAY] = { + 58.188, 2.626, 4.2601, -0.0187, 3.1790, 0.14474, 2.9502, 0.12, 0.019, 297.}; + AddMaterial(M27, "G4_Co"); + indexZ[27] = 27; + + // G4_Ni index=28 + G4double M28[NDENSARRAY] = { + 59.385, 2.889, 4.3115, -0.0566, 3.1851, 0.16496, 2.843, 0.10, 0.020, 311.}; + AddMaterial(M28, "G4_Ni"); + indexZ[28] = 28; + + // G4_Cu index=29 + G4double M29[NDENSARRAY] = { + 58.270, 2.956, 4.4190, -0.0254, 3.2792, 0.14339, 2.9044, 0.08, 0.019, 322.}; + AddMaterial(M29, "G4_Cu"); + indexZ[29] = 29; + + // G4_Zn index=30 + G4double M30[NDENSARRAY] = { + 52.132, 3.142, 4.6906, 0.0049, 3.3668, 0.14714, 2.8652, 0.08, 0.019, 330.}; + AddMaterial(M30, "G4_Zn"); + indexZ[30] = 30; + + // G4_Ga index=31 + G4double M31[NDENSARRAY] = { + 46.688, 2.747, 4.9353, 0.2267, 3.5434, 0.09440, 3.1314, 0.14, 0.019, 334.}; + AddMaterial(M31, "G4_Ga"); + indexZ[31] = 31; + + // G4_Ge index=32 + G4double M32[NDENSARRAY] = { + 44.141, 2.461, 5.1411, 0.3376, 3.6096, 0.07188, 3.3306, 0.14, 0.025, 350.}; + AddMaterial(M32, "G4_Ge"); + indexZ[32] = 32; + + // G4_As index=33 + G4double M33[NDENSARRAY] = { + 45.779, 2.219, 5.0510, 0.1767, 3.5702, 0.06633, 3.4176, 0.00, 0.030, 347.}; + AddMaterial(M33, "G4_As"); + indexZ[33] = 33; + + // G4_Se index=34 + G4double M34[NDENSARRAY] = { + 40.112, 2.104, 5.3210, 0.2258, 3.6264, 0.06568, 3.4317, 0.10, 0.024, 348.}; + AddMaterial(M34, "G4_Se"); + indexZ[34] = 34; + + // G4_Br index=35 + G4double M35[NDENSARRAY] = { + 1.604, 1.845, 11.7307, 1.5262, 4.9899, 0.06335, 3.467, 0, 0.022, 343.}; + AddMaterial(M35, "G4_Br"); + indexZ[35] = 35; + state[35] = kStateGas; + + // G4_Kr index=36 + G4double M36[NDENSARRAY] = { + 1.114, 1.77, 12.5115, 1.7158, 5.0748, 0.07446, 3.4051, 0, 0.025, 352.}; + AddMaterial(M36, "G4_Kr"); + indexZ[36] = 36; + state[36] = kStateGas; + + // G4_Rb index=37 + G4double M37[NDENSARRAY] = { + 23.467, 1.823, 6.4776, 0.5737, 3.7995, 0.07261, 3.4177, 0.14, 0.026, 363.}; + AddMaterial(M37, "G4_Rb"); + indexZ[37] = 37; + + // G4_Sr index=38 + G4double M38[NDENSARRAY] = { + 30.244, 1.707, 5.9867, 0.4585, 3.6778, 0.07165, 3.4435, 0.14, 0.026, 366.}; + AddMaterial(M38, "G4_Sr"); + indexZ[38] = 38; + + // G4_Y index=39 + G4double M39[NDENSARRAY] = { + 40.346, 1.649, 5.4801, 0.3608, 3.5542, 0.07138, 3.4585, 0.14, 0.027, 379.}; + AddMaterial(M39, "G4_Y"); + indexZ[39] = 39; + + // G4_Zr index=40 + G4double M40[NDENSARRAY] = { + 48.671, 1.638, 5.1774, 0.2957, 3.489, 0.07177, 3.4533, 0.14, 0.028, 393.}; + AddMaterial(M40, "G4_Zr"); + indexZ[40] = 40; + + // G4_Nb index=41 + G4double M41[NDENSARRAY] = { + 56.039, 1.734, 5.0141, 0.1785, 3.2201, 0.13883, 3.093, 0.14, 0.036, 417.}; + AddMaterial(M41, "G4_Nb"); + indexZ[41] = 41; + + // G4_Mo index=42 + G4double M42[NDENSARRAY] = { + 60.951, 1.658, 4.8793, 0.2267, 3.2784, 0.10525, 3.2549, 0.14, 0.03, 424.}; + AddMaterial(M42, "G4_Mo"); + indexZ[42] = 42; + + // G4_Tc index=43 + G4double M43[NDENSARRAY] = { + 64.760, 1.727, 4.7769, 0.0949, 3.1253, 0.16572, 2.9738, 0.14, 0.040, 428.}; + AddMaterial(M43, "G4_Tc"); + indexZ[43] = 43; + + // G4_Ru index=44 + G4double M44[NDENSARRAY] = { + 66.978, 1.780, 4.7694, 0.0599, 3.0834, 0.19342, 2.8707, 0.14, 0.046, 441.}; + AddMaterial(M44, "G4_Ru"); + indexZ[44] = 44; + + // G4_Rh index=45 + G4double M45[NDENSARRAY] = { + 67.128, 1.804, 4.8008, 0.0576, 3.1069, 0.19205, 2.8633, 0.14, 0.046, 449.}; + AddMaterial(M45, "G4_Rh"); + indexZ[45] = 45; + + // G4_Pd index=46 + G4double M46[NDENSARRAY] = { + 65.683, 1.911, 4.9358, 0.0563, 3.0555, 0.24178, 2.7239, 0.14, 0.047, 470.}; + AddMaterial(M46, "G4_Pd"); + indexZ[46] = 46; + + // G4_Ag index=47 + G4double M47[NDENSARRAY] = { + 61.635, 1.933, 5.0630, 0.0657, 3.1074, 0.24585, 2.6899, 0.14, 0.052, 470.}; + AddMaterial(M47, "G4_Ag"); + indexZ[47] = 47; + + // G4_Cd index=48 + G4double M48[NDENSARRAY] = { + 55.381, 1.895, 5.2727, 0.1281, 3.1667, 0.24609, 2.6772, 0.14, 0.051, 469.}; + AddMaterial(M48, "G4_Cd"); + indexZ[48] = 48; + + // G4_In index=49 + G4double M49[NDENSARRAY] = { + 50.896, 1.851, 5.5211, 0.2406, 3.2032, 0.23879, 2.7144, 0.14, 0.044, 488.}; + AddMaterial(M49, "G4_In"); + indexZ[49] = 49; + + // G4_Sn index=50 + G4double M50[NDENSARRAY] = { + 50.567, 1.732, 5.5340, 0.2879, 3.2959, 0.18689, 2.8576, 0.14, 0.037, 488.}; + AddMaterial(M50, "G4_Sn"); + indexZ[50] = 50; + + // G4_Sb index=51 + G4double M51[NDENSARRAY] = { + 48.242, 1.645, 5.6241, 0.3189, 3.3489, 0.16652, 2.9319, 0.14, 0.034, 487.}; + AddMaterial(M51, "G4_Sb"); + indexZ[51] = 51; + + // G4_Te index=52 + G4double M52[NDENSARRAY] = { + 45.952, 1.577, 5.7131, 0.3296, 3.4418, 0.13815, 3.0354, 0.14, 0.033, 485.}; + AddMaterial(M52, "G4_Te"); + indexZ[52] = 52; + + // G4_I index=53 + G4double M53[NDENSARRAY] = { + 41.348, 1.498, 5.9488, 0.0549, 3.2596, 0.23766, 2.7276, 0.0, 0.045, 491.}; + AddMaterial(M53, "G4_I"); + indexZ[53] = 53; + + // G4_Xe index=54 + G4double M54[NDENSARRAY] = { + 1.369, 1.435, 12.7281, 1.563, 4.7371, 0.23314, 2.7414, 0, 0.043, 482.}; + AddMaterial(M54, "G4_Xe"); + indexZ[54] = 54; + state[54] = kStateGas; + + // G4_Cs index=55 + G4double M55[NDENSARRAY] = { + 25.37, 1.462, 6.9135, 0.5473, 3.5914, 0.18233, 2.8866, 0.14, 0.035, 488.}; + AddMaterial(M55, "G4_Cs"); + indexZ[55] = 55; + + // G4_Ba index=56 + G4double M56[NDENSARRAY] = { + 34.425, 1.410, 6.3153, 0.4190, 3.4547, 0.18268, 2.8906, 0.14, 0.035, 491.}; + AddMaterial(M56, "G4_Ba"); + indexZ[56] = 56; + + // G4_La index=57 + G4double M57[NDENSARRAY] = { + 45.792, 1.392, 5.7850, 0.3161, 3.3293, 0.18591, 2.8828, 0.14, 0.036, 501.}; + AddMaterial(M57, "G4_La"); + indexZ[57] = 57; + + // G4_Ce index=58 + G4double M58[NDENSARRAY] = { + 47.834, 1.461, 5.7837, 0.2713, 3.3432, 0.18885, 2.8592, 0.14, 0.040, 523.}; + AddMaterial(M58, "G4_Ce"); + indexZ[58] = 58; + + // G4_Pr index=59 + G4double M59[NDENSARRAY] = { + 48.301, 1.520, 5.8096, 0.2333, 3.2773, 0.23265, 2.7331, 0.14, 0.041, 535.}; + AddMaterial(M59, "G4_Pr"); + indexZ[59] = 59; + + // G4_Ne index=60 + G4double M60[NDENSARRAY] = { + 48.819, 1.588, 5.8290, 0.1984, 3.3063, 0.23530, 2.7050, 0.14, 0.044, 546.}; + AddMaterial(M60, "G4_Ne"); + indexZ[60] = 60; + + // G4_Pr index=61 + G4double M61[NDENSARRAY] = { + 50.236, 1.672, 5.8224, 0.1627, 3.3199, 0.24280, 2.6674, 0.14, 0.048, 560.}; + AddMaterial(M61, "G4_Pr"); + indexZ[61] = 61; + + // G4_Sa index=62 + G4double M62[NDENSARRAY] = { + 50.540, 1.749, 5.8597, 0.1520, 3.3460, 0.24698, 2.6403, 0.14, 0.053, 574.}; + AddMaterial(M62, "G4_Sa"); + indexZ[62] = 62; + + // G4_Eu index=63 + G4double M63[NDENSARRAY] = { + 42.484, 1.838, 6.2278, 0.1888, 3.4633, 0.24448, 2.6245, 0.14, 0.06, 580.}; + AddMaterial(M63, "G4_Eu"); + indexZ[63] = 63; + + // G4_Gd index=64 + G4double M64[NDENSARRAY] = { + 51.672, 1.882, 5.8738, 0.1058, 3.3932, 0.25109, 2.5977, 0.14, 0.061, 591.}; + AddMaterial(M64, "G4_Gd"); + indexZ[64] = 64; + + // G4_Tb index=65 + G4double M65[NDENSARRAY] = { + 52.865, 1.993, 5.9045, 0.0947, 3.4224, 0.24453, 2.6056, 0.14, 0.063, 614.}; + AddMaterial(M65, "G4_Tb"); + indexZ[65] = 65; + + // G4_Dy index=66 + G4double M66[NDENSARRAY] = { + 53.698, 2.081, 5.9183, 0.0822, 3.4474, 0.24665, 2.5849, 0.14, 0.061, 628.}; + AddMaterial(M66, "G4_Dy"); + indexZ[66] = 66; + + // G4_Ho index=67 + G4double M67[NDENSARRAY] = { + 54.467, 2.197, 5.9587, 0.0761, 3.4782, 0.24638, 2.5726, 0.14, 0.062, 650.}; + AddMaterial(M67, "G4_Ho"); + indexZ[67] = 67; + + // G4_Er index=68 + G4double M68[NDENSARRAY] = { + 55.322, 2.26, 5.9521, 0.0648, 3.4922, 0.24823, 2.5573, 0.14, 0.061, 658.}; + AddMaterial(M68, "G4_Er"); + indexZ[68] = 68; + + // G4_Tm index=69 + G4double M69[NDENSARRAY] = { + 56.225, 2.333, 5.9677, 0.0812, 3.5085, 0.24889, 2.5469, 0.14, 0.062, 674.}; + AddMaterial(M69, "G4_Tm"); + indexZ[69] = 69; + + // G4_Yb index=70 + G4double M70[NDENSARRAY] = { + 47.546, 2.505, 6.3325, 0.1199, 3.6246, 0.25295, 2.5141, 0.14, 0.071, 684.}; + AddMaterial(M70, "G4_Yb"); + indexZ[70] = 70; + + // G4_Lu index=71 + G4double M71[NDENSARRAY] = { + 57.581, 2.348, 5.9785, 0.1560, 3.5218, 0.24033, 2.5643, 0.14, 0.054, 694.}; + AddMaterial(M71, "G4_Lu"); + indexZ[71] = 71; + + // G4_Hf index=72 + G4double M72[NDENSARRAY] = { + 66.770, 2.174, 5.7139, 0.1965, 3.4337, 0.22918, 2.6155, 0.14, 0.035, 705.}; + AddMaterial(M72, "G4_Hf"); + indexZ[72] = 72; + + // G4_Ta index=73 + G4double M73[NDENSARRAY] = { + 74.692, 2.07, 5.5262, 0.2117, 3.4805, 0.17798, 2.7623, 0.14, 0.03, 718.}; + AddMaterial(M73, "G4_Ta"); + indexZ[73] = 73; + + // G4_W index=74 + G4double M74[NDENSARRAY] = { + 80.315, 1.997, 5.4059, 0.2167, 3.496, 0.15509, 2.8447, 0.14, 0.027, 727.}; + AddMaterial(M74, "G4_W"); + indexZ[74] = 74; + + // G4_Re index=75 + G4double M75[NDENSARRAY] = { + 83.846, 1.976, 5.3445, 0.0559, 3.4845, 0.15184, 2.8627, 0.08, 0.026, 736.}; + AddMaterial(M75, "G4_Re"); + indexZ[75] = 75; + + // G4_Os index=76 + G4double M76[NDENSARRAY] = { + 86.537, 1.947, 5.3083, 0.0891, 3.5414, 0.12751, 2.9608, 0.10, 0.023, 746.}; + AddMaterial(M76, "G4_Os"); + indexZ[76] = 76; + + // G4_Ir index=77 + G4double M77[NDENSARRAY] = { + 86.357, 1.927, 5.3418, 0.0819, 3.5480, 0.12690, 2.9658, 0.10, 0.023, 757.}; + AddMaterial(M77, "G4_Ir"); + indexZ[77] = 77; + + // G4_Pt index=78 + G4double M78[NDENSARRAY] = { + 84.389, 1.965, 5.4732, 0.1484, 3.6212, 0.11128, 3.0417, 0.12, 0.021, 790.}; + AddMaterial(M78, "G4_Pt"); + indexZ[78] = 78; + + // G4_Au index=79 + G4double M79[NDENSARRAY] = { + 80.215, 1.926, 5.5747, 0.2021, 3.6979, 0.09756, 3.1101, 0.14, 0.020, 790.}; + AddMaterial(M79, "G4_Au"); + indexZ[79] = 79; + + // G4_Hg index=80 + G4double M80[NDENSARRAY] = { + 66.977, 1.904, 5.9605, 0.2756, 3.7275, 0.11014, 3.0519, 0.14, 0.021, 800.}; + AddMaterial(M80, "G4_Hg"); + indexZ[80] = 80; + + // G4_Tl index=81 + G4double M81[NDENSARRAY] = { + 62.104, 1.814, 6.1365, 0.3491, 3.8044, 0.09455, 3.1450, 0.14, 0.019, 810.}; + AddMaterial(M81, "G4_Tl"); + indexZ[81] = 81; + + // G4_Pb index=82 + G4double M82[NDENSARRAY] = { + 61.072, 1.755, 6.2018, 0.3776, 3.8073, 0.09359, 3.1608, 0.14, 0.019, 823.}; + AddMaterial(M82, "G4_Pb"); + indexZ[82] = 82; + + // G4_Bi index=83 + G4double M83[NDENSARRAY] = { + 56.696, 1.684, 6.3505, 0.4152, 3.8248, 0.0941, 3.1671, 0.14, 0.02, 823.}; + AddMaterial(M83, "G4_Bi"); + indexZ[83] = 83; + + // G4_Po index=84 + G4double M84[NDENSARRAY] = { + 55.773, 1.637, 6.4003, 0.4267, 3.8293, 0.09282, 3.183, 0.14, 0.02, 830.}; + AddMaterial(M84, "G4_Po"); + indexZ[84] = 84; + + // G4_Rn index=85 + G4double M85[NDENSARRAY] = { + 1.708, 1.458, 13.2839, 1.5368, 4.9889, 0.20798, 2.7409, 0, 0.057, 794.}; + AddMaterial(M85, "G4_Rn"); + indexZ[86] = 85; + state[86] = kStateGas; + + // G4_Ra index=86 + G4double M86[NDENSARRAY] = { + 40.205, 1.403, 7.0452, 0.5991, 3.9428, 0.08804, 3.2454, 0.14, 0.022, 826.}; + AddMaterial(M86, "G4_Ra"); + indexZ[88] = 86; + + // G4_Ac index=87 + G4double M87[NDENSARRAY] = { + 57.254, 1.380, 6.3742, 0.4559, 3.7966, 0.08567, 3.2683, 0.14, 0.023, 841.}; + AddMaterial(M87, "G4_Ac"); + indexZ[89] = 87; + + // G4_Th index=88 + G4double M88[NDENSARRAY] = { + 61.438, 1.363, 6.2473, 0.4202, 3.7681, 0.08655, 3.2610, 0.14, 0.025, 847.}; + AddMaterial(M88, "G4_Th"); + indexZ[90] = 88; + + // G4_Pa index=89 + G4double M89[NDENSARRAY] = { + 70.901, 1.42, 6.0327, 0.3144, 3.5079, .14770, 2.9845, 0.14, 0.036, 878.}; + AddMaterial(M89, "G4_Pa"); + indexZ[91] = 89; + + // G4_U index=90 + G4double M90[NDENSARRAY] = { + 77.986, 1.447, 5.8694, 0.2260, 3.3721, .19677, 2.8171, 0.14, 0.043, 890.}; + AddMaterial(M90, "G4_U"); + indexZ[92] = 90; + + // G4_Np index=91 + G4double M91[NDENSARRAY] = { + 81.221, 1.468, 5.8149, 0.1869, 3.369, 0.19741, 2.8082, 0.14, 0.043, 902.}; + AddMaterial(M91, "G4_Np"); + indexZ[93] = 91; + + // G4_Pu index=92 + G4double M92[NDENSARRAY] = { + 80.486, 1.519, 5.8748, 0.1557, 3.3981, 0.20419, 2.7679, 0.14, 0.057, 921.}; + AddMaterial(M92, "G4_Pu"); + indexZ[94] = 92; + + // G4_Am index=93 + G4double M93[NDENSARRAY] = { + 66.607, 1.552, 6.2813, 0.2274, 3.5021, 0.20308, 2.7615, 0.14, 0.056, 934.}; + AddMaterial(M93, "G4_Am"); + indexZ[95] = 93; + + // G4_Cm index=94 + G4double M94[NDENSARRAY] = { + 66.022, 1.559, 6.3097, 0.2484, 3.516, .20257, 2.7579, 0.14, 0.056, 939.}; + AddMaterial(M94, "G4_Cm"); + indexZ[96] = 94; + + // G4_Bk index=95 + G4double M95[NDENSARRAY] = { + 67.557, 1.574, 6.2912, 0.2378, 3.5186, .20192, 2.7560, 0.14, 0.062, 952.}; + AddMaterial(M95, "G4_Bk"); + indexZ[97] = 95; + + // G4_A-150_TISSUE index=96 + G4double M96[NDENSARRAY] = { + 22.667, 1.950, 3.1100, 0.1329, 2.6234, 0.10783, 3.4442, 0, 0.048, 65.1}; + AddMaterial(M96, "G4_A-150_TISSUE"); + + // G4_ACETONE index=97 + G4double M97[NDENSARRAY] = { + 19.010, 1.976, 3.4341, 0.2197, 2.6928, 0.11100, 3.4047, 0, 0.069, 64.2}; + AddMaterial(M97, "G4_ACETONE"); + + // G4_ACETYLENE index=98 + G4double M98[NDENSARRAY] = { + 0.700, 1.784, 9.8419, 1.6017, 4.0074, 0.12167, 3.4277, 0, 0.080, 58.2}; + AddMaterial(M98, "G4_ACETYLENE"); + + // G4_ADENINE index=99 + G4double M99[NDENSARRAY] = { + 24.098, 1.892, 3.1724, 0.1295, 2.4219, 0.20908, 3.0271, 0, 0.052, 71.4}; + AddMaterial(M99, "G4_ADENINE"); + + // G4_ADIPOSE_TISSUE_ICRP index=100 + G4double M100[NDENSARRAY] = { + 20.655, 1.987, 3.2367, 0.1827, 2.6530, 0.10278, 3.4817, 0, 0.060, 63.2}; + AddMaterial(M100, "G4_ADIPOSE_TISSUE_ICRP"); + + // G4_AIR index=101 + G4double M101[NDENSARRAY] = { + 0.707, 2.054, 10.5961, 1.7418, 4.2759, 0.10914, 3.3994, 0, 0.090, 85.7}; + AddMaterial(M101, "G4_AIR"); + + // G4_ALANINE index=102 + G4double M102[NDENSARRAY] = { + 25.204, 2.074, 3.0965, 0.1354, 2.6336, 0.11484, 3.3526, 0, 0.056, 71.9}; + AddMaterial(M102, "G4_ALANINE"); + + // G4_ALUMINIM_OXIDE index=103 + G4double M103[NDENSARRAY] = { + 40.206, 2.394, 3.5682, 0.0402, 2.8665, 0.08500, 3.5458, 0, 0.031, 145.2}; + AddMaterial(M103, "G4_ALUMINIM_OXIDE"); + + // G4_AMBER index=104 + G4double M104[NDENSARRAY] = { + 22.450, 1.946, 3.0701, 0.1335, 2.5610, 0.11934, 3.4098, 0, 0.053, 63.2}; + AddMaterial(M104, "G4_AMBER"); + + // G4_AMMONIA index=105 + G4double M105[NDENSARRAY] = { + 0.635, 1.814, 9.8763, 1.6822, 4.1158, 0.08315, 3.6464, 0, 0.102, 53.7}; + AddMaterial(M105, "G4_AMMONIA"); + + // G4_ANILINE index=106 + G4double M106[NDENSARRAY] = { + 21.361, 1.938, 3.2622, 0.1618, 2.5805, 0.13134, 3.3434, 0, 0.052, 66.2}; + AddMaterial(M106, "G4_ANILINE"); + + // G4_ANTHRACENE index=107 + G4double M107[NDENSARRAY] = { + 23.704, 1.954, 3.1514, 0.1146, 2.5213, 0.14677, 3.2831, 0, 0.042, 69.5}; + AddMaterial(M107, "G4_ANTHRACENE"); + + // G4_B-100_BONE index=108 + G4double M108[NDENSARRAY] = { + 25.199, 2.013, 3.4528, 0.1252, 3.042, 0.05268, 3.7365, 0, 0.043, 85.9}; + AddMaterial(M108, "G4_B-100_BONE"); + + // G4_BAKELITE index=109 + G4double M109[NDENSARRAY] = { + 23.408, 2.046, 3.2582, 0.1471, 2.6055, 0.12713, 3.347, 0, 0.052, 72.4}; + AddMaterial(M109, "G4_BAKELITE"); + + // G4_BARIUM_FLUORIDE index=110 + G4double M110[NDENSARRAY] = { + 41.398, 1.727, 5.4122, -0.0098, 3.3871, 0.15991, 2.8867, 0, 0.034, 375.9}; + AddMaterial(M110, "G4_BARIUM_FLUORIDE"); + + // G4_BARIUM_SULFATE index=111 + G4double M111[NDENSARRAY] = { + 40.805, 1.893, 4.8923, -0.0128, 3.4069, 0.11747, 3.0427, 0, 0.03, 285.7}; + AddMaterial(M111, "G4_BARIUM_SULFATE"); + + // G4_BENZENE index=112 + G4double M112[NDENSARRAY] = { + 19.806, 1.873, 3.3269, 0.171, 2.5091, 0.16519, 3.2174, 0, 0.052, 63.4}; + AddMaterial(M112, "G4_BENZENE"); + + // G4_BERYLLIUM_OXIDE index=113 + G4double M113[NDENSARRAY] = { + 34.629, 2.296, 2.9801, 0.0241, 2.5846, 0.10755, 3.4927, 0, 0.031, 93.2}; + AddMaterial(M113, "G4_BERYLLIUM_OXIDE"); + + // G4_BGO index=114 + G4double M114[NDENSARRAY] = { + 49.904, 2.121, 5.7409, 0.0456, 3.7816, 0.09569, 3.0781, 0, 0.023, 534.1}; + AddMaterial(M114, "G4_BGO"); + + // G4_BLOOD_ICRP index=115 + G4double M115[NDENSARRAY] = { + 22.001, 2.184, 3.4581, 0.2239, 2.8017, 0.08492, 3.5406, 0, 0.088, 75.2}; + AddMaterial(M115, "G4_BLOOD_ICRP"); + + // G4_BONE_COMPACT_ICRU index=116 + G4double M116[NDENSARRAY] = { + 28.536, 2.091, 3.3390, 0.0944, 3.0201, 0.05822, 3.6419, 0, 0.042, 91.9}; + AddMaterial(M116, "G4_BONE_COMPACT_ICRU"); + + // G4_BONE_CORTICAL_ICRP index=117 + G4double M117[NDENSARRAY] = { + 28.298, 2.118, 3.6488, 0.1161, 3.0919, 0.06198, 3.5919, 0, 0.04, 106.4}; + AddMaterial(M117, "G4_BONE_CORTICAL_ICRP"); + + // G4_BORON_CARBIDE index=118 + G4double M118[NDENSARRAY] = { + 31.38, 2.14, 2.9859, 0.0093, 2.1006, 0.37087, 2.8076, 0, 0.022, 84.7}; + AddMaterial(M118, "G4_BORON_CARBIDE"); + + // G4_BORON_OXIDE index=119 + G4double M119[NDENSARRAY] = { + 27.107, 2.446, 3.6027, 0.1843, 2.7379, 0.11548, 3.3832, 0, 0.053, 99.6}; + AddMaterial(M119, "G4_BORON_OXIDE"); + + // G4_BRAIN_ICRP index=120 + G4double M120[NDENSARRAY] = { + 21.772, 2.162, 3.4279, 0.2206, 2.8021, 0.08255, 3.5585, 0, 0.086, 73.3}; + AddMaterial(M120, "G4_BRAIN_ICRP"); + + // G4_BUTANE index=121 + G4double M121[NDENSARRAY] = {1.101, 1.727, 8.5633, 1.3788, 3.7524, 0.10852, 3.4884, 0, 0.1, 48.3}; + AddMaterial(M121, "G4_BUTANE"); + + // G4_N-BUTYL_ALCOHOL index=122 + G4double M122[NDENSARRAY] = { + 19.52, 1.942, 3.2425, 0.1937, 2.6439, 0.10081, 3.5139, 0, 0.065, 59.9}; + AddMaterial(M122, "G4_N-BUTYL_ALCOHOL"); + + // G4_C-552 index=123 + G4double M123[NDENSARRAY] = { + 27.023, 2.128, 3.3338, 0.151, 2.7083, 0.10492, 3.4344, 0, 0.053, 86.8}; + AddMaterial(M123, "G4_C-552"); + + // G4_CADMIUM_TELLURIDE index=124 + G4double M124[NDENSARRAY] = { + 46.314, 1.935, 5.9096, 0.0438, 3.2836, 0.2484, 2.6665, 0, 0.057, 539.3}; + AddMaterial(M124, "G4_CADMIUM_TELLURIDE"); + + // G4_CADMIUM_TUNGSTATE index=125 + G4double M125[NDENSARRAY] = { + 52.954, 2.289, 5.3594, 0.0123, 3.5941, 0.12861, 2.915, 0, 0.027, 468.3}; + AddMaterial(M125, "G4_CADMIUM_TUNGSTATE"); + + // G4_CALCIUM_CARBONATE index=126 + G4double M126[NDENSARRAY] = { + 34.08, 2.141, 3.7738, 0.0492, 3.0549, 0.08301, 3.412, 0, 0.037, 136.4}; + AddMaterial(M126, "G4_CALCIUM_CARBONATE"); + + // G4_CALCIUM_FLUORIDE index=127 + G4double M127[NDENSARRAY] = { + 35.849, 2.127, 4.0653, 0.0676, 3.1683, 0.06942, 3.5263, 0, 0.044, 166.0}; + AddMaterial(M127, "G4_CALCIUM_FLUORIDE"); + + // G4_CALCIUM_OXIDE index=128 + G4double M128[NDENSARRAY] = { + 36.988, 1.973, 4.1209, -0.0172, 3.0171, 0.12128, 3.1936, 0, 0.024, 176.1}; + AddMaterial(M128, "G4_CALCIUM_OXIDE"); + + // G4_CALCIUM_SULFATE index=129 + G4double M129[NDENSARRAY] = { + 35.038, 2.179, 3.9388, 0.0587, 3.1229, 0.07708, 3.4495, 0, 0.021, 152.3}; + AddMaterial(M129, "G4_CALCIUM_SULFATE"); + + // G4_CALCIUM_TUNGSTATE index=130 + G4double M130[NDENSARRAY] = { + 46.934, 2.262, 5.2603, 0.0323, 3.8932, 0.0621, 3.2649, 0, 0.021, 395.0}; + AddMaterial(M130, "G4_CALCIUM_TUNGSTATE"); + + // G4_CARBON_DIOXIDE index=131 + G4double M131[NDENSARRAY] = { + 0.874, 2.118, 10.1537, 1.6294, 4.1825, 0.11768, 3.3227, 0, 0.091, 85.0}; + AddMaterial(M131, "G4_CARBON_DIOXIDE"); + + // G4_CARBON_TETRACHLORIDE index=132 + G4double M132[NDENSARRAY] = { + 25.234, 1.742, 4.7712, 0.1773, 2.9165, 0.19018, 3.0116, 0, 0.041, 166.3}; + AddMaterial(M132, "G4_CARBON_TETRACHLORIDE"); + + // G4_CELLULOSE_CELLOPHANE index=133 + G4double M133[NDENSARRAY] = {25.008, 2.17, 3.2647, 0.158, 2.6778, 0.11151, 3.381, 0, 0.06, 77.6}; + AddMaterial(M133, "G4_CELLULOSE_CELLOPHANE"); + + // G4_CELLULOSE_BUTYRATE index=134 + G4double M134[NDENSARRAY] = { + 23.041, 2.128, 3.3497, 0.1794, 2.6809, 0.11444, 3.3738, 0, 0.056, 74.6}; + AddMaterial(M134, "G4_CELLULOSE_BUTYRATE"); + + // G4_CELLULOSE_NITRATE index=135 + G4double M135[NDENSARRAY] = { + 25.224, 2.252, 3.4762, 0.1897, 2.7253, 0.11813, 3.3237, 0, 0.063, 87.0}; + AddMaterial(M135, "G4_CELLULOSE_NITRATE"); + + // G4_CERIC_SULFATE index=136 + G4double M136[NDENSARRAY] = { + 21.743, 2.205, 3.5212, 0.2363, 2.8769, 0.07666, 3.5607, 0, 0.095, 76.7}; + AddMaterial(M136, "G4_CERIC_SULFATE"); + + // G4_CESIUM_FLUORIDE index=137 + G4double M137[NDENSARRAY] = { + 37.942, 1.714, 5.9046, 0.0084, 3.3374, 0.22052, 2.728, 0, 0.044, 440.7}; + AddMaterial(M137, "G4_CESIUM_FLUORIDE"); + + // G4_CESIUM_IODIDE index=138 + G4double M138[NDENSARRAY] = { + 39.455, 1.672, 6.2807, 0.0395, 3.3353, 0.25381, 2.6657, 0, 0.067, 553.1}; + AddMaterial(M138, "G4_CESIUM_IODIDE"); + + // G4_CHLOROBENZENE index=139 + G4double M139[NDENSARRAY] = { + 21.752, 1.889, 3.8201, 0.1714, 2.9272, 0.09856, 3.3797, 0, 0.031, 89.1}; + AddMaterial(M139, "G4_CHLOROBENZENE"); + + // G4_CHLOROFORM index=140 + G4double M140[NDENSARRAY] = { + 24.462, 1.734, 4.7055, 0.1786, 2.9581, 0.16959, 3.0627, 0, 0.038, 156.}; + AddMaterial(M140, "G4_CHLOROFORM"); + + // G4_CONCRETE index=141 + G4double M141[NDENSARRAY] = { + 30.986, 2.322, 3.9464, 0.1301, 3.0466, 0.07515, 3.5467, 0, 0.024, 135.2}; + AddMaterial(M141, "G4_CONCRETE"); + + // G4_CYCLOHEXANE index=142 + G4double M142[NDENSARRAY] = { + 19.207, 1.861, 3.1544, 0.1728, 2.5549, 0.12035, 3.4278, 0, 0.057, 56.4}; + AddMaterial(M142, "G4_CYCLOHEXANE"); + + // G4_1,2-DICHLOROBENZENE index=143 + G4double M143[NDENSARRAY] = { + 23.354, 1.862, 4.0348, 0.1587, 2.8276, 0.1601, 3.0836, 0, 0.029, 106.5}; + AddMaterial(M143, "G4_1,2-DICHLOROBENZENE"); + + // G4_DICHLORODIETHYL_ETHER index=144 + G4double M144[NDENSARRAY] = { + 22.894, 1.903, 4.0135, 0.1773, 3.1586, 0.06799, 3.525, 0, 0.026, 103.3}; + AddMaterial(M144, "G4_DICHLORODIETHYL_ETHER"); + + // G4_1,2-DICHLOROETHANE index=145 + G4double M145[NDENSARRAY] = { + 22.764, 1.618, 4.1849, 0.1375, 2.9529, 0.13383, 3.1675, 0, 0.03, 111.9}; + AddMaterial(M145, "G4_1,2-DICHLOROETHANE"); + + // G4_DIETHYL_ETHER index=146 + G4double M146[NDENSARRAY] = { + 18.326, 1.951, 3.3721, 0.2231, 2.6745, 0.1055, 3.4586, 0, 0.07, 60.0}; + AddMaterial(M146, "G4_DIETHYL_ETHER"); + + // G4_N,N-DIMETHYL_FORMAMIDE index=147 + G4double M147[NDENSARRAY] = { + 20.763, 2.005, 3.3311, 0.1977, 2.6686, 0.1147, 3.371, 0, 0.065, 66.6}; + AddMaterial(M147, "G4_N,N-DIMETHYL_FORMAMIDE"); + + // G4_DIMETHYL_SULFOXIDE index=148 + G4double M148[NDENSARRAY] = { + 22.173, 2.075, 3.9844, 0.2021, 3.1263, 0.06619, 3.5708, 0, 0.03, 98.6}; + AddMaterial(M148, "G4_DIMETHYL_SULFOXIDE"); + + // G4_ETHANE index=149 + G4double M149[NDENSARRAY] = { + 0.789, 1.69, 9.1043, 1.5107, 3.8743, 0.09627, 3.6095, 0, 0.097, 45.4}; + AddMaterial(M149, "G4_ETHANE"); + + // G4_ETHYL_ALCOHOL index=150 + G4double M150[NDENSARRAY] = { + 19.232, 2.013, 3.3699, 0.2218, 2.7052, 0.09878, 3.4834, 0, 0.071, 62.9}; + AddMaterial(M150, "G4_ETHYL_ALCOHOL"); + + // G4_ETHYL_CELLULOSE index=151 + G4double M151[NDENSARRAY] = { + 22.594, 2.065, 3.2415, 0.1683, 2.6527, 0.11077, 3.4098, 0, 0.057, 69.3}; + AddMaterial(M151, "G4_ETHYL_CELLULOSE"); + + // G4_ETHYLENE index=152 + G4double M152[NDENSARRAY] = { + 0.746, 1.733, 9.438, 1.5528, 3.9327, 0.10636, 3.5387, 0, 0.085, 50.7}; + AddMaterial(M152, "G4_ETHYLENE"); + + // G4_EYE_LENS_ICRP index=153 + G4double M153[NDENSARRAY] = {22.388, 2.154, 3.372, 0.207, 2.7446, 0.0969, 3.455, 0, 0.077, 73.3}; + AddMaterial(M153, "G4_EYE_LENS_ICRP"); + + // G4_FERRIC_OXIDE index=154 + G4double M154[NDENSARRAY] = { + 45.331, 2.747, 4.2245, -0.0074, 3.2573, 0.10478, 3.1313, 0, 0.026, 227.3}; + AddMaterial(M154, "G4_FERRIC_OXIDE"); + + // G4_FERROBORIDE index=155 + G4double M155[NDENSARRAY] = { + 52.546, 2.726, 4.2057, -0.0988, 3.1749, 0.12911, 3.024, 0, 0.022, 261.0}; + AddMaterial(M155, "G4_FERROBORIDE"); + + // G4_FERROUS_OXIDE index=156 + G4double M156[NDENSARRAY] = { + 47.327, 2.769, 4.3175, -0.0279, 3.2002, 0.12959, 3.0168, 0, 0.022, 248.6}; + AddMaterial(M156, "G4_FERROUS_OXIDE"); + + // G4_FERROUS_SULFATE index=157 + G4double M157[NDENSARRAY] = { + 21.69, 2.208, 3.5183, 0.2378, 2.8254, 0.08759, 3.4923, 0, 0.096, 76.4}; + AddMaterial(M157, "G4_FERROUS_SULFATE"); + + // G4_FREON-12 index=158 + G4double M158[NDENSARRAY] = { + 21.121, 1.974, 4.8251, 0.3035, 3.2659, 0.07978, 3.4626, 0, 0.025, 143.0}; + AddMaterial(M158, "G4_FREON-12"); + + // G4_FREON-12B2 index=159 + G4double M159[NDENSARRAY] = { + 25.877, 2.195, 5.7976, 0.3406, 3.7956, 0.05144, 3.5565, 0, 0.021, 284.9}; + AddMaterial(M159, "G4_FREON-12B2"); + + // G4_FREON-13 index=160 + G4double M160[NDENSARRAY] = { + 19.432, 2.116, 4.7483, 0.3659, 3.2337, 0.07238, 3.5551, 0, 0.05, 126.6}; + AddMaterial(M160, "G4_FREON-13"); + + // G4_FREON-13B1 index=161 + G4double M161[NDENSARRAY] = { + 23.849, 2.233, 5.3555, 0.3522, 3.7554, 0.03925, 3.7194, 0, 0.036, 210.5}; + AddMaterial(M161, "G4_FREON-13B1"); + + // G4_FREON-13I1 index=162 + G4double M162[NDENSARRAY] = { + 25.615, 1.924, 5.8774, 0.2847, 3.728, 0.09112, 3.1658, 0, 0.025, 293.5}; + AddMaterial(M162, "G4_FREON-13I1"); + + // G4_GADOLINIUM_OXYSULFIDE index=163 + G4double M163[NDENSARRAY] = { + 51.099, 2.179, 5.5347, -0.1774, 3.4045, 0.22161, 2.63, 0, 0.056, 493.3}; + AddMaterial(M163, "G4_GADOLINIUM_OXYSULFIDE"); + + // G4_GALLIUM_ARSENIDE index=164 + G4double M164[NDENSARRAY] = { + 44.17, 2.652, 5.3299, 0.1764, 3.642, 0.07152, 3.3356, 0, 0.027, 384.9}; + AddMaterial(M164, "G4_GALLIUM_ARSENIDE"); + + // G4_GEL_PHOTO_EMULSION index=165 + G4double M165[NDENSARRAY] = { + 24.058, 2.156, 3.2687, 0.1709, 2.7058, 0.10102, 3.4418, 0, 0.06, 74.8}; + AddMaterial(M165, "G4_GEL_PHOTO_EMULSION"); + + // G4_Pyrex_Glass index=166 + G4double M166[NDENSARRAY] = { + 30.339, 2.369, 3.9708, 0.1479, 2.9933, 0.0827, 3.5224, 0, 0.022, 134.0}; + AddMaterial(M166, "G4_Pyrex_Glass"); + + // G4_GLASS_LEAD index=167 + G4double M167[NDENSARRAY] = { + 46.631, 2.085, 5.8476, 0.0614, 3.8146, 0.09544, 3.074, 0, 0.025, 526.4}; + AddMaterial(M167, "G4_GLASS_LEAD"); + + // G4_GLASS_PLATE index=168 + G4double M168[NDENSARRAY] = { + 31.481, 2.329, 4.0602, 0.1237, 3.0649, 0.07678, 3.5381, 0, 0.025, 145.4}; + AddMaterial(M168, "G4_GLASS_PLATE"); + + // G4_GLUCOSE index=169 + G4double M169[NDENSARRAY] = { + 26.153, 2.174, 3.1649, 0.1411, 2.67, 0.10783, 3.3946, 0, 0.061, 77.2}; + AddMaterial(M169, "G4_GLUCOSE"); + + // G4_GLUTAMINE index=170 + G4double M170[NDENSARRAY] = { + 25.437, 2.077, 3.1167, 0.1347, 2.6301, 0.11931, 3.3254, 0, 0.055, 73.3}; + AddMaterial(M170, "G4_GLUTAMINE"); + + // G4_GLYCEROL index=171 + G4double M171[NDENSARRAY] = { + 23.846, 2.12, 3.2267, 0.1653, 2.6862, 0.10168, 3.4481, 0, 0.067, 72.6}; + AddMaterial(M171, "G4_GLYCEROL"); + + // G4_GUANINE index=172 + G4double M172[NDENSARRAY] = { + 26.022, 1.97, 3.1171, 0.1163, 2.4296, 0.2053, 3.0186, 0, 0.069, 75.0}; + AddMaterial(M172, "G4_GUANINE"); + + // G4_GYPSUM index=173 + G4double M173[NDENSARRAY] = { + 31.379, 2.187, 3.8382, 0.0995, 3.1206, 0.06949, 3.5134, 0, 0.038, 129.7}; + AddMaterial(M173, "G4_GYPSUM"); + + // G4_N-HEPTANE index=174 + G4double M174[NDENSARRAY] = { + 18.128, 1.848, 3.1978, 0.1928, 2.5706, 0.11255, 3.4885, 0, 0.059, 54.4}; + AddMaterial(M174, "G4_N-HEPTANE"); + + // G4_N-HEXANE index=175 + G4double M175[NDENSARRAY] = { + 17.836, 1.843, 3.2156, 0.1984, 2.5757, 0.11085, 3.5027, 0, 0.061, 54.0}; + AddMaterial(M175, "G4_N-HEXANE"); + + // G4_KAPTON index=176 + G4double M176[NDENSARRAY] = { + 24.586, 2.109, 3.3497, 0.1509, 2.5631, 0.15972, 3.1921, 0, 0.05, 79.6}; + AddMaterial(M176, "G4_KAPTON"); + + // G4_LANTHANUM_OXYBROMIDE index=177 + G4double M177[NDENSARRAY] = { + 47.125, 1.831, 5.4666, -0.035, 3.3288, 0.1783, 2.8457, 0, 0.04, 439.7}; + AddMaterial(M177, "G4_LANTHANUM_OXYBROMIDE"); + + // G4_LANTHANUM_OXYSULFIDE index=178 + G4double M178[NDENSARRAY] = { + 45.394, 1.681, 5.6151, -0.0934, 3.2741, 0.22579, 2.7075, 0, 0.065, 456.2}; + AddMaterial(M178, "G4_LANTHANUM_OXYSULFIDE"); + + // G4_LEAD_OXIDE index=179 + G4double M179[NDENSARRAY] = { + 56.488, 2.012, 6.2162, 0.0356, 3.5456, 0.19645, 2.7299, 0, 0.039, 766.7}; + AddMaterial(M179, "G4_LEAD_OXIDE"); + + // G4_LITHIUM_AMIDE index=180 + G4double M180[NDENSARRAY] = {22.609, 1.74, 2.7961, 0.0198, 2.5152, 0.0874, 3.7534, 0, 0.05, 55.5}; + AddMaterial(M180, "G4_LITHIUM_AMIDE"); + + // G4_LITHIUM_CARBONATE index=181 + G4double M181[NDENSARRAY] = { + 29.217, 2.246, 3.2029, 0.0551, 2.6598, 0.09936, 3.5417, 0, 0.062, 87.9}; + AddMaterial(M181, "G4_LITHIUM_CARBONATE"); + + // G4_LITHIUM_FLUORIDE index=182 + G4double M182[NDENSARRAY] = { + 31.815, 2.197, 3.1667, 0.0171, 2.7049, 0.07593, 3.7478, 0, 0.084, 94.0}; + AddMaterial(M182, "G4_LITHIUM_FLUORIDE"); + + // G4_LITHIUM_HYDRIDE index=183 + G4double M183[NDENSARRAY] = { + 18.51, 1.482, 2.358, -0.0988, 1.4515, 0.90567, 2.5849, 0, 0.035, 36.5}; + AddMaterial(M183, "G4_LITHIUM_HYDRIDE"); + + // G4_LITHIUM_IODIDE index=184 + G4double M184[NDENSARRAY] = { + 34.841, 1.706, 6.2671, 0.0892, 3.3702, 0.23274, 2.7146, 0, 0.043, 485.1}; + AddMaterial(M184, "G4_LITHIUM_IODIDE"); + + // G4_LITHIUM_OXIDE index=185 + G4double M185[NDENSARRAY] = { + 27.984, 2.039, 2.934, -0.0511, 2.5874, 0.08035, 3.7878, 0, 0.043, 73.6}; + AddMaterial(M185, "G4_LITHIUM_OXIDE"); + + // G4_LITHIUM_TETRABORATE index=186 + G4double M186[NDENSARRAY] = { + 31.343, 2.36, 3.2093, 0.0737, 2.6502, 0.11075, 3.4389, 0, 0.048, 94.6}; + AddMaterial(M186, "G4_LITHIUM_TETRABORATE"); + + // G4_LUNG_ICRP index=187 + G4double M187[NDENSARRAY] = { + 21.891, 2.184, 3.4708, 0.2261, 2.8001, 0.08588, 3.5353, 0, 0.089, 75.3}; + AddMaterial(M187, "G4_LUNG_ICRP"); + + // G4_M3_WAX index=188 + G4double M188[NDENSARRAY] = {22, 1.975, 3.254, 0.1523, 2.7529, 0.07864, 3.6412, 0, 0.044, 67.9}; + AddMaterial(M188, "G4_M3_WAX"); + + // G4_MAGNESIUM_CARBONATE index=189 + G4double M189[NDENSARRAY] = { + 34.979, 2.388, 3.4319, 0.086, 2.7997, 0.09219, 3.5003, 0, 0.045, 118.0}; + AddMaterial(M189, "G4_MAGNESIUM_CARBONATE"); + + // G4_MAGNESIUM_FLUORIDE index=190 + G4double M190[NDENSARRAY] = { + 34.634, 2.33, 3.7105, 0.1369, 2.863, 0.07934, 3.6485, 0, 0.085, 134.3}; + AddMaterial(M190, "G4_MAGNESIUM_FLUORIDE"); + + // G4_MAGNESIUM_OXIDE index=191 + G4double M191[NDENSARRAY] = { + 38.407, 2.412, 3.6404, 0.0575, 2.858, 0.08313, 3.5968, 0, 0.055, 143.8}; + AddMaterial(M191, "G4_MAGNESIUM_OXIDE"); + + // G4_MAGNESIUM_TETRABORATE index=192 + G4double M192[NDENSARRAY] = { + 32.089, 2.43, 3.4328, 0.1147, 2.7635, 0.09703, 3.4893, 0, 0.044, 108.3}; + AddMaterial(M192, "G4_MAGNESIUM_TETRABORATE"); + + // G4_MERCURIC_IODIDE index=193 + G4double M193[NDENSARRAY] = { + 46.494, 1.892, 6.3787, 0.104, 3.4728, 0.21513, 2.7264, 0, 0.047, 684.5}; + AddMaterial(M193, "G4_MERCURIC_IODIDE"); + + // G4_METHANE index=194 + G4double M194[NDENSARRAY] = { + 0.588, 1.662, 9.5243, 1.6263, 3.9716, 0.09253, 3.6257, 0, 0.112, 41.7}; + AddMaterial(M194, "G4_METHANE"); + + // G4_METHANOL index=195 + G4double M195[NDENSARRAY] = {19.214, 2.125, 3.516, 0.2529, 2.7639, 0.0897, 3.5477, 0, 0.08, 67.6}; + AddMaterial(M195, "G4_METHANOL"); + + // G4_MIX_D_WAX index=196 + G4double M196[NDENSARRAY] = { + 21.547, 1.905, 3.078, 0.1371, 2.7145, 0.0749, 3.6823, 0, 0.047, 60.9}; + AddMaterial(M196, "G4_MIX_D_WAX"); + + // G4_MS20_TISSUE index=197 + G4double M197[NDENSARRAY] = { + 21.153, 2.07, 3.5341, 0.1997, 2.8033, 0.08294, 3.6061, 0, 0.053, 75.1}; + AddMaterial(M197, "G4_MS20_TISSUE"); + + // G4_MUSCLE_SCELETAL_ICRP index=198 + G4double M198[NDENSARRAY] = { + 21.781, 2.185, 3.4809, 0.2282, 2.7999, 0.08636, 3.533, 0, 0.089, 75.3}; + AddMaterial(M198, "G4_MUSCLE_SCELETAL_ICRP"); + + // G4_MUSCLE_STRIATED_ICRU index=199 + G4double M199[NDENSARRAY] = { + 21.795, 2.174, 3.4636, 0.2249, 2.8032, 0.08507, 3.5383, 0, 0.086, 74.7}; + AddMaterial(M199, "G4_MUSCLE_STRIATED_ICRU"); + + // G4_MUSCLE_WITH_SUCROSE index=200 + G4double M200[NDENSARRAY] = {22.48, 2.169, 3.391, 0.2098, 2.755, 0.09481, 3.4699, 0, 0.08, 74.3}; + AddMaterial(M200, "G4_MUSCLE_WITH_SUCROSE"); + + // G4_MUSCLE_WITHOUT_SUCROSE index=201 + G4double M201[NDENSARRAY] = { + 22.109, 2.173, 3.4216, 0.2187, 2.768, 0.09143, 3.4982, 0, 0.056, 74.2}; + AddMaterial(M201, "G4_MUSCLE_WITHOUT_SUCROSE"); + + // G4_NAPHTALENE index=202 + G4double M202[NDENSARRAY] = { + 22.459, 1.956, 3.2274, 0.1374, 2.5429, 0.14766, 3.2654, 0, 0.051, 68.4}; + AddMaterial(M202, "G4_NAPHTALENE"); + + // G4_NITROBENZENE index=203 + G4double M203[NDENSARRAY] = { + 22.747, 2.065, 3.4073, 0.1777, 2.663, 0.12727, 3.3091, 0, 0.051, 75.8}; + AddMaterial(M203, "G4_NITROBENZENE"); + + // G4_NITROUS_OXIDE index=204 + G4double M204[NDENSARRAY] = { + 0.872, 2.059, 10.1575, 1.6477, 4.1565, 0.11992, 3.3318, 0, 0.086, 84.9}; + AddMaterial(M204, "G4_NITROUS_OXIDE"); + + // G4_NYLON-8062 index=205 + G4double M205[NDENSARRAY] = { + 22.221, 1.967, 3.125, 0.1503, 2.6004, 0.11513, 3.4044, 0, 0.054, 64.3}; + AddMaterial(M205, "G4_NYLON-8062"); + + // G4_NYLON-6/6 index=206 + G4double M206[NDENSARRAY] = { + 22.774, 1.931, 3.0634, 0.1336, 2.5834, 0.11818, 3.3826, 0, 0.051, 63.9}; + AddMaterial(M206, "G4_NYLON-6-6"); + + // G4_NYLON-6/10 index=207 + G4double M207[NDENSARRAY] = { + 22.866, 1.942, 3.0333, 0.1304, 2.5681, 0.11852, 3.3912, 0, 0.05, 63.2}; + AddMaterial(M207, "G4_NYLON-6-10"); + + // G4_NYLON-11_RILSAN index=208 + G4double M208[NDENSARRAY] = { + 25.661, 1.902, 2.7514, 0.0678, 2.4281, 0.14868, 3.2576, 0, 0.044, 61.6}; + AddMaterial(M208, "G4_NYLON-11_RILSAN"); + + // G4_OCTANE index=209 + G4double M209[NDENSARRAY] = { + 18.36, 1.851, 3.1834, 0.1882, 2.5664, 0.11387, 3.4776, 0, 0.057, 54.7}; + AddMaterial(M209, "G4_OCTANE"); + + // G4_PARAFFIN index=210 + G4double M210[NDENSARRAY] = { + 21.031, 1.844, 2.9551, 0.1289, 2.5084, 0.12087, 3.4288, 0, 0.052, 55.9}; + AddMaterial(M210, "G4_PARAFFIN"); + + // G4_N-PENTANE index=211 + G4double M211[NDENSARRAY] = { + 17.398, 1.842, 3.2504, 0.2086, 2.5855, 0.10809, 3.5265, 0, 0.064, 53.6}; + AddMaterial(M211, "G4_N-PENTANE"); + + // G4_PHOTO_EMULSION index=212 + G4double M212[NDENSARRAY] = { + 37.946, 2.264, 5.3319, 0.1009, 3.4866, 0.12399, 3.0094, 0, 0.028, 331.0}; + AddMaterial(M212, "G4_PHOTO_EMULSION"); + + // G4_PLASTIC_SC_VINYLTOLUENE index=213 + G4double M213[NDENSARRAY] = { + 21.54, 1.929, 3.1997, 0.1464, 2.4855, 0.16101, 3.2393, 0, 0.05, 64.7}; + AddMaterial(M213, "G4_PLASTIC_SC_VINYLTOLUENE"); + + // G4_PLUTONIUM_DIOXIDE index=214 + G4double M214[NDENSARRAY] = { + 62.143, 1.846, 5.9719, -0.2311, 3.5554, 0.20594, 2.6522, 0, 0.111, 746.5}; + AddMaterial(M214, "G4_PLUTONIUM_DIOXIDE"); + + // G4_POLYACRYLONITRILE index=215 + G4double M215[NDENSARRAY] = { + 22.642, 1.955, 3.2459, 0.1504, 2.5159, 0.16275, 3.1975, 0, 0.05, 69.6}; + AddMaterial(M215, "G4_POLYACRYLONITRILE"); + + // G4_POLYCARBONATE index=216 + G4double M216[NDENSARRAY] = { + 22.915, 2.06, 3.3201, 0.1606, 2.6225, 0.1286, 3.3288, 0, 0.049, 73.1}; + AddMaterial(M216, "G4_POLYCARBONATE"); + + // G4_POLYCHLOROSTYRENE index=217 + G4double M217[NDENSARRAY] = { + 23.81, 1.902, 3.4659, 0.1238, 2.9241, 0.0753, 3.5441, 0, 0.029, 81.7}; + AddMaterial(M217, "G4_POLYCHLOROSTYRENE"); + + // G4_POLYETHYLENE index=218 + G4double M218[NDENSARRAY] = { + 21.099, 1.882, 3.0016, 0.137, 2.5177, 0.12108, 3.4292, 0, 0.051, 57.4}; + AddMaterial(M218, "G4_POLYETHYLENE"); + + // G4_MYLAR index=219 + G4double M219[NDENSARRAY] = { + 24.595, 2.144, 3.3262, 0.1562, 2.6507, 0.12679, 3.3076, 0, 0.052, 78.7}; + AddMaterial(M219, "G4_MYLAR"); + + // G4_LUCITE index=220 + G4double M220[NDENSARRAY] = { + 23.086, 2.173, 3.3297, 0.1824, 2.6681, 0.11433, 3.3836, 0, 0.056, 74.0}; + AddMaterial(M220, "G4_LUCITE"); + + // G4_POLYOXOMETHYLENE index=221 + G4double M221[NDENSARRAY] = { + 25.11, 2.175, 3.2514, 0.1584, 2.6838, 0.10808, 3.4002, 0, 0.063, 77.4}; + AddMaterial(M221, "G4_POLYOXOMETHYLENE"); + + // G4_POLYPROPYLENE index=222 + G4double M222[NDENSARRAY] = { + 20.457, 1.884, 3.1252, 0.1534, 2.4822, 0.15045, 3.2855, 0, 0.055, 59.2}; + AddMaterial(M222, "G4_POLYPROPYLENE"); + + // G4_POLYSTYRENE index=223 + G4double M223[NDENSARRAY] = { + 21.754, 2.027, 3.2999, 0.1647, 2.5031, 0.16454, 3.2224, 0, 0.051, 68.7}; + AddMaterial(M223, "G4_POLYSTYRENE"); + + // G4_TEFLON index=224 + G4double M224[NDENSARRAY] = { + 29.609, 2.142, 3.4161, 0.1648, 2.7404, 0.10606, 3.4046, 0, 0.073, 99.1}; + AddMaterial(M224, "G4_TEFLON"); + + // G4_POLYTRIFLUOROCHLOROETHYLENE index=225 + G4double M225[NDENSARRAY] = { + 28.955, 2.094, 3.8551, 0.1714, 3.0265, 0.07727, 3.5085, 0, 0.035, 120.7}; + AddMaterial(M225, "G4_POLYTRIFLUOROCHLOROETHYLENE"); + + // G4_POLYVINYL_ACETATE index=226 + G4double M226[NDENSARRAY] = { + 22.978, 2.116, 3.3309, 0.1769, 2.6747, 0.11442, 3.3762, 0, 0.055, 73.7}; + AddMaterial(M226, "G4_POLYVINYL_ACETATE"); + + // G4_PLOYVINYL_ALCOHOL index=227 + G4double M227[NDENSARRAY] = { + 24.251, 2.071, 3.1115, 0.1401, 2.6315, 0.11178, 3.3893, 0, 0.056, 69.7}; + AddMaterial(M227, "G4_PLOYVINYL_ALCOHOL"); + + // G4_POLYVINYL_BUTYRAL index=228 + G4double M228[NDENSARRAY] = { + 22.521, 2.021, 3.1865, 0.1555, 2.6186, 0.11544, 3.3983, 0, 0.054, 67.2}; + AddMaterial(M228, "G4_POLYVINYL_BUTYRAL"); + + // G4_POLYVINYL_CHLORIDE index=229 + G4double M229[NDENSARRAY] = { + 23.51, 1.84, 4.0532, 0.1559, 2.9415, 0.12438, 3.2104, 0, 0.027, 108.2}; + AddMaterial(M229, "G4_POLYVINYL_CHLORIDE"); + + // G4_POLYVINYLIDENE_CHLORIDE index=230 + G4double M230[NDENSARRAY] = { + 26.437, 1.814, 4.2506, 0.1314, 2.9009, 0.15466, 3.102, 0, 0.034, 134.3}; + AddMaterial(M230, "G4_POLYVINYLIDENE_CHLORIDE"); + + // G4_POLYVINYLIDENE_FLUORIDE index=231 + G4double M231[NDENSARRAY] = {27.024, 2.16, 3.3793, 0.1717, 2.7375, 0.10316, 3.42, 0, 0.067, 88.8}; + AddMaterial(M231, "G4_POLYVINYLIDENE_FLUORIDE"); + + // G4_POLYVINYL_PYRROLIDONE index=232 + G4double M232[NDENSARRAY] = { + 23.671, 1.989, 3.1017, 0.1324, 2.5867, 0.12504, 3.3326, 0, 0.031, 67.7}; + AddMaterial(M232, "G4_POLYVINYL_PYRROLIDONE"); + + // G4_POTASSIUM_IODIDE index=233 + G4double M233[NDENSARRAY] = { + 33.575, 1.784, 6.1088, 0.1044, 3.3442, 0.22053, 2.7558, 0, 0.042, 431.9}; + AddMaterial(M233, "G4_POTASSIUM_IODIDE"); + + // G4_POTASSIUM_OXIDE index=234 + G4double M234[NDENSARRAY] = { + 30.672, 2.065, 4.6463, 0.048, 3.011, 0.16789, 3.0121, 0, 0.027, 189.9}; + AddMaterial(M234, "G4_POTASSIUM_OXIDE"); + + // G4_PROPANE index=235 + G4double M235[NDENSARRAY] = { + 0.959, 1.708, 8.7878, 1.4326, 3.7998, 0.09916, 3.592, 0, 0.093, 47.1}; + AddMaterial(M235, "G4_PROPANE"); + + // G4_lPROPANE index=236 + G4double M236[NDENSARRAY] = { + 14.509, 1.844, 3.5529, 0.2861, 2.6568, 0.10329, 3.562, 0, 0.068, 52.0}; + AddMaterial(M236, "G4_lPROPANE"); + + // G4_N-PROPYL_ALCOHOL index=237 + G4double M237[NDENSARRAY] = { + 19.429, 1.972, 3.2915, 0.2046, 2.6681, 0.09644, 3.5415, 0, 0.07, 61.1}; + AddMaterial(M237, "N-PROPYL_ALCOHOL"); + + // G4_PYRIDINE index=238 + G4double M238[NDENSARRAY] = { + 20.807, 1.895, 3.3148, 0.167, 2.5245, 0.16399, 3.1977, 0, 0.051, 66.2}; + AddMaterial(M238, "G4_PYRIDINE"); + + // G4_RUBBER_BUTYL index=239 + G4double M239[NDENSARRAY] = { + 20.873, 1.852, 2.9915, 0.1347, 2.5154, 0.12108, 3.4296, 0, 0.051, 56.5}; + AddMaterial(M239, "G4_RUBBER_BUTYL"); + + // G4_RUBBER_NATURAL index=240 + G4double M240[NDENSARRAY] = { + 20.644, 1.889, 3.1272, 0.1512, 2.4815, 0.15058, 3.2879, 0, 0.053, 59.8}; + AddMaterial(M240, "G4_RUBBER_NATURAL"); + + // G4_RUBBER_NEOPRENE index=241 + G4double M241[NDENSARRAY] = { + 23.036, 1.874, 3.7911, 0.1501, 2.9461, 0.09763, 3.3632, 0, 0.026, 93.0}; + AddMaterial(M241, "G4_RUBBER_NEOPRENE"); + + // G4_SILICON_DIOXIDE index=242 + G4double M242[NDENSARRAY] = { + 31.014, 2.335, 4.0029, 0.1385, 3.0025, 0.08408, 3.5064, 0, 0.018, 139.2}; + AddMaterial(M242, "G4_SILICON_DIOXIDE"); + + // G4_SILVER_BROMIDE index=243 + G4double M243[NDENSARRAY] = { + 48.448, 2.271, 5.6139, 0.0352, 3.2109, 0.24582, 2.682, 0, 0.043, 486.6}; + AddMaterial(M243, "G4_SILVER_BROMIDE"); + + // G4_SILVER_CHLORIDE index=244 + G4double M244[NDENSARRAY] = { + 45.405, 2.096, 5.3437, -0.0139, 3.2022, 0.22968, 2.7041, 0, 0.062, 398.4}; + AddMaterial(M244, "G4_SILVER_CHLORIDE"); + + // G4_SILVER_HALIDES index=245 + G4double M245[NDENSARRAY] = { + 48.433, 2.27, 5.6166, 0.0353, 3.2117, 0.24593, 2.6814, 0, 0.043, 487.1}; + AddMaterial(M245, "G4_SILVER_HALIDES"); + + // G4_SILVER_IODIDE index=246 + G4double M246[NDENSARRAY] = { + 46.105, 1.945, 5.9342, 0.0148, 3.2908, 0.25059, 2.6572, 0, 0.071, 543.5}; + AddMaterial(M246, "G4_SILVER_IODIDE"); + + // G4_SKIN_ICRP index=247 + G4double M247[NDENSARRAY] = {22.4, 2.14, 3.3546, 0.2019, 2.7526, 0.09459, 3.4643, 0, 0.076, 72.7}; + AddMaterial(M247, "G4_SKIN_ICRP"); + + // G4_SODIUM_CARBONATE index=248 + G4double M248[NDENSARRAY] = { + 32.117, 2.557, 3.7178, 0.1287, 2.8591, 0.08715, 3.5638, 0, 0.074, 125.0}; + AddMaterial(M248, "G4_SODIUM_CARBONATE"); + + // G4_SODIUM_IODIDE index=249 + G4double M249[NDENSARRAY] = { + 36.057, 1.857, 6.0572, 0.1203, 3.592, 0.12516, 3.0398, 0, 0.031, 452.0}; + AddMaterial(M249, "G4_SODIUM_IODIDE"); + + // G4_SODIUM_MONOXIDE index=250 + G4double M250[NDENSARRAY] = { + 30.205, 2.689, 4.1892, 0.1652, 2.9793, 0.07501, 3.6943, 0, 0.097, 148.8}; + AddMaterial(M250, "G4_SODIUM_MONOXIDE"); + + // G4_SODIUM_NITRATE index=251 + G4double M251[NDENSARRAY] = { + 30.459, 2.456, 3.6502, 0.1534, 2.8221, 0.09391, 3.5097, 0, 0.081, 114.6}; + AddMaterial(M251, "G4_SODIUM_NITRATE"); + + // G4_STILBENE index=252 + G4double M252[NDENSARRAY] = { + 20.719, 1.963, 3.368, 0.1734, 2.5142, 0.16659, 3.2168, 0, 0.052, 67.7}; + AddMaterial(M252, "G4_STILBENE"); + + // G4_SUCROSE index=253 + G4double M253[NDENSARRAY] = { + 26.416, 2.167, 3.1526, 0.1341, 2.6558, 0.11301, 3.363, 0, 0.057, 77.5}; + AddMaterial(M253, "G4_SUCROSE"); + + // G4_TERPHENYL index=254 + G4double M254[NDENSARRAY] = { + 23.116, 1.976, 3.2639, 0.1322, 2.5429, 0.14964, 3.2685, 0, 0.043, 71.7}; + AddMaterial(M254, "G4_TERPHENYL"); + + // G4_TESTES_ICRP index=255 + G4double M255[NDENSARRAY] = { + 21.815, 2.185, 3.4698, 0.2274, 2.7988, 0.08533, 3.5428, 0, 0.091, 75.0}; + AddMaterial(M255, "G4_TESTES_ICRP"); + + // G4_TETRACHLOROETHYLENE index=256 + G4double M256[NDENSARRAY] = { + 25.513, 1.79, 4.6619, 0.1713, 2.9083, 0.18595, 3.0156, 0, 0.038, 159.2}; + AddMaterial(M256, "G4_TETRACHLOROETHYLENE"); + + // G4_THALIUM_CHLORIDE index=257 + G4double M257[NDENSARRAY] = { + 48.749, 1.997, 6.3009, 0.0705, 3.5716, 0.18599, 2.769, 0, 0.04, 690.3}; + AddMaterial(M257, "G4_THALIUM_CHLORIDE"); + + // G4_TISSUE_SOFT_ICRP index=258 + G4double M258[NDENSARRAY] = { + 21.394, 2.144, 3.4354, 0.2211, 2.7799, 0.08926, 3.511, 0, 0.077, 72.3}; + AddMaterial(M258, "G4_TISSUE_SOFT_ICRP"); + + // G4_TISSUE_SOFT_ICRU-4 index=259 + G4double M259[NDENSARRAY] = { + 21.366, 2.192, 3.5087, 0.2377, 2.7908, 0.09629, 3.4371, 0, 0.092, 74.9}; + AddMaterial(M259, "G4_TISSUE_SOFT_ICRU-4"); + + // G4_TISSUE-METHANE index=260 + G4double M260[NDENSARRAY] = {0.697, 1.89, 9.95, 1.6442, 4.1399, 0.09946, 3.4708, 0, 0.098, 61.2}; + AddMaterial(M260, "G4_TISSUE-METHANE"); + + // G4_TISSUE-PROPANE index=261 + G4double M261[NDENSARRAY] = { + 0.913, 1.856, 9.3529, 1.5139, 3.9916, 0.09802, 3.5159, 0, 0.092, 59.5}; + AddMaterial(M261, "G4_TISSUE-PROPANE"); + + // G4_TITANIUM_DIOXIDE index=262 + G4double M262[NDENSARRAY] = { + 41.022, 2.307, 3.9522, -0.0119, 3.1647, 0.08569, 3.3267, 0, 0.027, 179.5}; + AddMaterial(M262, "G4_TITANIUM_DIOXIDE"); + + // G4_TOLUENE index=263 + G4double M263[NDENSARRAY] = { + 19.764, 1.88, 3.3026, 0.1722, 2.5728, 0.13284, 3.3558, 0, 0.052, 62.5}; + AddMaterial(M263, "G4_TOLUENE"); + + // G4_TRICHLOROETHYLENE index=264 + G4double M264[NDENSARRAY] = { + 24.301, 1.789, 4.6148, 0.1803, 2.914, 0.18272, 3.0137, 0, 0.036, 148.1}; + AddMaterial(M264, "G4_TRICHLOROETHYLENE"); + + // G4_TRIETHYL_PHOSPHATE index=265 + G4double M265[NDENSARRAY] = { + 21.863, 2.1, 3.6242, 0.2054, 2.9428, 0.06922, 3.6302, 0, 0.049, 81.2}; + AddMaterial(M265, "G4_TRIETHYL_PHOSPHATE"); + + // G4_TUNGSTEN_HEXAFLUORIDE index=266 + G4double M266[NDENSARRAY] = { + 29.265, 2.325, 5.9881, 0.302, 4.2602, 0.03658, 3.5134, 0, 0.055, 354.4}; + AddMaterial(M266, "G4_TUNGSTEN_HEXAFLUORIDE"); + + // G4_URANIUM_DICARBIDE index=267 + G4double M267[NDENSARRAY] = { + 60.969, 1.703, 6.0247, -0.2191, 3.5208, 0.2112, 2.6577, 0, 0.12, 752.0}; + AddMaterial(M267, "G4_URANIUM_DICARBIDE"); + + // G4_URANIUM_MONOCARBIDE index=268 + G4double M268[NDENSARRAY] = { + 66.602, 1.68, 6.121, -0.2524, 3.4941, 0.22972, 2.6169, 0, 0.132, 862.0}; + AddMaterial(M268, "G4_URANIUM_MONOCARBIDE"); + + // G4_URANIUM_OXIDE index=269 + G4double M269[NDENSARRAY] = { + 60.332, 1.76, 5.9605, -0.1938, 3.5292, 0.20463, 2.6711, 0, 0.098, 720.6}; + AddMaterial(M269, "G4_URANIUM_OXIDE"); + + // G4_UREA index=270 + G4double M270[NDENSARRAY] = { + 24.194, 2.022, 3.2032, 0.1603, 2.6525, 0.11609, 3.3461, 0, 0.06, 72.8}; + AddMaterial(M270, "G4_UREA"); + + // G4_VALINE index=271 + G4double M271[NDENSARRAY] = { + 23.622, 2.024, 3.1059, 0.1441, 2.6227, 0.11386, 3.3774, 0, 0.056, 67.7}; + AddMaterial(M271, "G4_VALINE"); + + // G4_VITON index=272 + G4double M272[NDENSARRAY] = { + 26.948, 2.227, 3.5943, 0.2106, 2.7874, 0.09965, 3.4556, 0, 0.07, 98.6}; + AddMaterial(M272, "G4_VITON"); + + // G4_WATER index=273 + G4double M273[NDENSARRAY] = { + 21.469, 2.203, 3.5017, 0.24, 2.8004, 0.09116, 3.4773, 0, 0.097, 75.0}; + AddMaterial(M273, "G4_WATER"); + + // G4_WATER_VAPOR index=274 + G4double M274[NDENSARRAY] = { + 0.59, 2.175, 10.5962, 1.7952, 4.3437, 0.08101, 3.5901, 0, 0.121, 71.6}; + AddMaterial(M274, "G4_WATER_VAPOR"); + + // G4_XYLENE index=275 + G4double M275[NDENSARRAY] = { + 19.866, 1.882, 3.2698, 0.1695, 2.5675, 0.13216, 3.3564, 0, 0.051, 61.8}; + AddMaterial(M275, "G4_XYLENE"); + + // G4_GRAPHITE index=276 + G4double M276[NDENSARRAY] = { + 30.652, 2.29, 2.868, -0.0178, 2.3415, 0.26142, 2.8697, 0.12, 0.038, 78.0}; + AddMaterial(M276, "G4_GRAPHITE"); + + // G4_GRAPHITE_POROUS index=277 + G4double M277[NDENSARRAY] = { + 26.555, 2.49, 3.155, 0.048, 2.5387, 0.20762, 2.9532, 0.14, 0.038, 78.0}; + AddMaterial(M277, "G4_GRAPHITE_POROUS"); } G4int G4DensityEffectData::GetElementIndex(G4int Z, G4State) const @@ -1299,8 +1558,8 @@ G4int G4DensityEffectData::GetIndex(const G4String& matName) const { G4int idx = -1; - for (G4int i=0; i= 0) { - G4cout << "G4DensityEffectData for <" << matName - << "> index= " << idx << G4endl; - G4cout << "I(eV)= " << data[idx][9]/CLHEP::eV - << "Eplasma(eV)= " << data[idx][0]/CLHEP::eV - << " rho= " << data[idx][1] - << " -C= " << data[idx][2] - << " x0= " << data[idx][3] - << " x1= " << data[idx][4] - << " a= " << data[idx][5] - << " m= " << data[idx][6] - << " d0= " << data[idx][7] - << " err= " << data[idx][8] - << G4endl; - } else { - G4cout << "G4DensityEffectData does not have <" << matName << ">" << G4endl; + if (idx >= 0) { + G4cout << "G4DensityEffectData for <" << matName << "> index= " << idx << G4endl; + G4cout << "I(eV)= " << data[idx][9] / CLHEP::eV << "Eplasma(eV)= " << data[idx][0] / CLHEP::eV + << " rho= " << data[idx][1] << " -C= " << data[idx][2] << " x0= " << data[idx][3] + << " x1= " << data[idx][4] << " a= " << data[idx][5] << " m= " << data[idx][6] + << " d0= " << data[idx][7] << " err= " << data[idx][8] << G4endl; + } + else { + G4cout << "G4DensityEffectData does not have <" << matName << ">" << G4endl; } } void G4DensityEffectData::DumpData() const { - G4cout << "======================================================================" - << G4endl; - G4cout << " Material Eplasma(eV) rho -C x0 x1 a m d0 err" - << G4endl; - G4cout << "======================================================================" - << G4endl; - for(G4int i=0; i etc.) correctly, P. Urban // 09-07-96: new data members added by L.Urban // 17-01-97: aesthetic rearrangement, M.Maire // 20-01-97: Compute Tsai's formula for the rad length, M.Maire // 21-01-97: remove mixture flag, M.Maire -// 24-01-97: ComputeIonisationParameters(). +// 24-01-97: ComputeIonisationParameters(). // new data member: fTaul, M.Maire // 29-01-97: Forbidden to create Element with Z<1 or N Shell; GetBindingEnergy() (mma) // 09-03-01: assignement operator revised (mma) @@ -46,76 +42,68 @@ // 14-09-01: fCountUse: nb of materials which use this element // 26-02-02: fIndexInTable renewed // 30-03-05: warning in GetElement(elementName) -// 15-11-05: GetElement(elementName, G4bool warning=true) +// 15-11-05: GetElement(elementName, G4bool warning=true) // 17-10-06: Add fNaturalAbundances (V.Ivanchenko) -// 27-07-07: improve destructor (V.Ivanchenko) -// 18-10-07: move definition of material index to ComputeDerivedQuantities (VI) +// 27-07-07: improve destructor (V.Ivanchenko) +// 18-10-07: move definition of material index to ComputeDerivedQuantities (VI) // 25.10.11: new scheme for G4Exception (mma) -// 05-03-12: always create isotope vector (V.Ivanchenko) - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -#include -#include +// 05-03-12: always create isotope vector (V.Ivanchenko) #include "G4Element.hh" + #include "G4AtomicShells.hh" +#include "G4Log.hh" #include "G4NistManager.hh" #include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" -#include "G4Log.hh" -G4ElementTable G4Element::theElementTable; +#include +#include +#include -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +G4ElementTable G4Element::theElementTable; // Constructor to Generate an element from scratch -G4Element::G4Element(const G4String& name, const G4String& symbol, - G4double zeff, G4double aeff) - : fName(name), fSymbol(symbol) +G4Element::G4Element(const G4String& name, const G4String& symbol, G4double zeff, G4double aeff) + : fName(name), fSymbol(symbol) { G4int iz = G4lrint(zeff); if (iz < 1) { G4ExceptionDescription ed; - ed << "Failed to create G4Element " << name - << " Z= " << zeff << " < 1 !"; - G4Exception ("G4Element::G4Element()", "mat011", FatalException, ed); + ed << "Failed to create G4Element " << name << " Z= " << zeff << " < 1 !"; + G4Exception("G4Element::G4Element()", "mat011", FatalException, ed); } if (std::abs(zeff - iz) > perMillion) { G4ExceptionDescription ed; - ed << "G4Element Warning: " << name << " Z= " << zeff - << " A= " << aeff/(g/mole); + ed << "G4Element Warning: " << name << " Z= " << zeff << " A= " << aeff / (g / mole); G4Exception("G4Element::G4Element()", "mat017", JustWarning, ed); } InitializePointers(); - fZeff = zeff; - fAeff = aeff; - fNeff = fAeff/(g/mole); + fZeff = zeff; + fAeff = aeff; + fNeff = fAeff / (g / mole); - if(fNeff < 1.0) - { + if (fNeff < 1.0) { fNeff = 1.0; } if (fNeff < zeff) { G4ExceptionDescription ed; - ed << "Failed to create G4Element " << name - << " with Z= " << zeff << " N= " << fNeff + ed << "Failed to create G4Element " << name << " with Z= " << zeff << " N= " << fNeff << " N < Z is not allowed" << G4endl; - G4Exception("G4Element::G4Element()", "mat012", FatalException, ed); + G4Exception("G4Element::G4Element()", "mat012", FatalException, ed); } - - fNbOfAtomicShells = G4AtomicShells::GetNumberOfShells(iz); - fAtomicShells = new G4double[fNbOfAtomicShells]; - fNbOfShellElectrons = new G4int[fNbOfAtomicShells]; + + fNbOfAtomicShells = G4AtomicShells::GetNumberOfShells(iz); + fAtomicShells = new G4double[fNbOfAtomicShells]; + fNbOfShellElectrons = new G4int[fNbOfAtomicShells]; AddNaturalIsotopes(); - for (G4int i=0; i= nIsotopes) { + if (0 >= nIsotopes) { G4ExceptionDescription ed; - ed << "Failed to create G4Element " << name - << " <" << symbol << "> with " << nIsotopes + ed << "Failed to create G4Element " << name << " <" << symbol << "> with " << nIsotopes << " isotopes."; - G4Exception ("G4Element::G4Element()", "mat012", FatalException, ed); - } else { - theIsotopeVector = new G4IsotopeVector(n, nullptr); + G4Exception("G4Element::G4Element()", "mat012", FatalException, ed); + } + else { + theIsotopeVector = new G4IsotopeVector(n, nullptr); fRelativeAbundanceVector = new G4double[nIsotopes]; } } @@ -153,66 +140,68 @@ G4Element::G4Element(const G4String& name, void G4Element::AddIsotope(G4Isotope* isotope, G4double abundance) { - if(theIsotopeVector == nullptr) - { + if (theIsotopeVector == nullptr) { G4ExceptionDescription ed; - ed << "Failed to add Isotope to G4Element " << fName - << " with Z= " << fZeff << " N= " << fNeff; - G4Exception ("G4Element::AddIsotope()", "mat013", FatalException, ed); + ed << "Failed to add Isotope to G4Element " << fName << " with Z= " << fZeff + << " N= " << fNeff; + G4Exception("G4Element::AddIsotope()", "mat013", FatalException, ed); return; } G4int iz = isotope->GetZ(); // filling ... - if ( fNumberOfIsotopes < (G4int)theIsotopeVector->size() ) { + if (fNumberOfIsotopes < (G4int)theIsotopeVector->size()) { // check same Z - if (fNumberOfIsotopes==0) { fZeff = G4double(iz); } - else if (G4double(iz) != fZeff) { + if (fNumberOfIsotopes == 0) { + fZeff = G4double(iz); + } + else if (G4double(iz) != fZeff) { G4ExceptionDescription ed; ed << "Failed to add Isotope Z= " << iz << " to G4Element " << fName - << " with different Z= " << fZeff << fNeff; - G4Exception ("G4Element::AddIsotope()", "mat014", FatalException, ed); + << " with different Z= " << fZeff << fNeff; + G4Exception("G4Element::AddIsotope()", "mat014", FatalException, ed); return; } - //Z ok + // Z ok fRelativeAbundanceVector[fNumberOfIsotopes] = abundance; (*theIsotopeVector)[fNumberOfIsotopes] = isotope; ++fNumberOfIsotopes; - - } else { + } + else { G4ExceptionDescription ed; ed << "Failed to add Isotope Z= " << iz << " to G4Element " << fName << " - more isotopes than declared."; - G4Exception ("G4Element::AddIsotope()", "mat015", FatalException, ed); + G4Exception("G4Element::AddIsotope()", "mat015", FatalException, ed); return; } // filled. - if ( fNumberOfIsotopes == (G4int)theIsotopeVector->size() ) { - G4double wtSum=0.0; + if (fNumberOfIsotopes == (G4int)theIsotopeVector->size()) { + G4double wtSum = 0.0; fAeff = 0.0; - for (G4int i=0; iGetA(); - wtSum += fRelativeAbundanceVector[i]; + for (G4int i = 0; i < fNumberOfIsotopes; ++i) { + fAeff += fRelativeAbundanceVector[i] * (*theIsotopeVector)[i]->GetA(); + wtSum += fRelativeAbundanceVector[i]; + } + if (wtSum > 0.0) { + fAeff /= wtSum; } - if(wtSum > 0.0) { fAeff /= wtSum; } - fNeff = fAeff/(g/mole); + fNeff = fAeff / (g / mole); - if(wtSum != 1.0) { - for (G4int i=0; iGetNumberOfNistIsotopes(Z); G4int N0 = nist->GetNistFirstIsotopeN(Z); - if(fSymbol.empty()) - { - const std::vector elmnames = - G4NistManager::Instance()->GetNistElementNames(); - if(Z < (G4int)elmnames.size()) { fSymbol = elmnames[Z]; } - else { fSymbol = fName; } + if (fSymbol.empty()) { + const std::vector elmnames = G4NistManager::Instance()->GetNistElementNames(); + if (Z < (G4int)elmnames.size()) { + fSymbol = elmnames[Z]; + } + else { + fSymbol = fName; + } } fNumberOfIsotopes = 0; - for(G4int i=0; iGetIsotopeAbundance(Z, N0+i) > 0.0) { ++fNumberOfIsotopes; } + for (G4int i = 0; i < n; ++i) { + if (nist->GetIsotopeAbundance(Z, N0 + i) > 0.0) { + ++fNumberOfIsotopes; + } } - theIsotopeVector = - new G4IsotopeVector((unsigned int) fNumberOfIsotopes, nullptr); + theIsotopeVector = new G4IsotopeVector((unsigned int)fNumberOfIsotopes, nullptr); fRelativeAbundanceVector = new G4double[fNumberOfIsotopes]; G4int idx = 0; G4double xsum = 0.0; - for(G4int i=0; iGetIsotopeAbundance(Z, N); - if(x > 0.0) { + G4double x = nist->GetIsotopeAbundance(Z, N); + if (x > 0.0) { std::ostringstream strm; strm << fSymbol << N; (*theIsotopeVector)[idx] = new G4Isotope(strm.str(), Z, N, 0.0, 0); @@ -361,8 +348,10 @@ void G4Element::AddNaturalIsotopes() ++idx; } } - if(xsum != 0.0 && xsum != 1.0) { - for(G4int i=0; i=fNbOfAtomicShells) { + if (i < 0 || i >= fNbOfAtomicShells) { G4ExceptionDescription ed; - ed << "Invalid argument " << i << " in for G4Element " << fName - << " with Z= " << fZeff + ed << "Invalid argument " << i << " in for G4Element " << fName << " with Z= " << fZeff << " and Nshells= " << fNbOfAtomicShells; G4Exception("G4Element::GetAtomicShell()", "mat016", FatalException, ed); return 0.0; @@ -386,13 +374,11 @@ G4double G4Element::GetAtomicShell(G4int i) const G4int G4Element::GetNbOfShellElectrons(G4int i) const { - if (i<0 || i>=fNbOfAtomicShells) { + if (i < 0 || i >= fNbOfAtomicShells) { G4ExceptionDescription ed; - ed << "Invalid argument " << i << " for G4Element " << fName - << " with Z= " << fZeff + ed << "Invalid argument " << i << " for G4Element " << fName << " with Z= " << fZeff << " and Nshells= " << fNbOfAtomicShells; - G4Exception("G4Element::GetNbOfShellElectrons()", "mat016", - FatalException, ed); + G4Exception("G4Element::GetNbOfShellElectrons()", "mat016", FatalException, ed); return 0; } return fNbOfShellElectrons[i]; @@ -400,37 +386,28 @@ G4int G4Element::GetNbOfShellElectrons(G4int i) const //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4ElementTable* G4Element::GetElementTable() -{ - return &theElementTable; -} +G4ElementTable* G4Element::GetElementTable() { return &theElementTable; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -size_t G4Element::GetNumberOfElements() -{ - return theElementTable.size(); -} +size_t G4Element::GetNumberOfElements() { return theElementTable.size(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4Element* G4Element::GetElement(const G4String& elementName, G4bool warning) -{ +{ // search the element by its name - for(auto J : theElementTable) - { - if(J->GetName() == elementName) - { + for (auto J : theElementTable) { + if (J->GetName() == elementName) { return J; } } - + // the element does not exist in the table if (warning) { - G4cout << "\n---> warning from G4Element::GetElement(). The element: " - << elementName << " does not exist in the table. Return NULL pointer." - << G4endl; - } + G4cout << "\n---> warning from G4Element::GetElement(). The element: " << elementName + << " does not exist in the table. Return NULL pointer." << G4endl; + } return nullptr; } @@ -439,67 +416,58 @@ G4Element* G4Element::GetElement(const G4String& elementName, G4bool warning) std::ostream& operator<<(std::ostream& flux, const G4Element* element) { std::ios::fmtflags mode = flux.flags(); - flux.setf(std::ios::fixed,std::ios::floatfield); + flux.setf(std::ios::fixed, std::ios::floatfield); G4long prec = flux.precision(3); - - flux - << " Element: " << element->fName << " (" << element->fSymbol << ")" - << " Z = " << std::setw(4) << std::setprecision(1) << element->fZeff - << " N = " << std::setw(5) << std::setprecision(1) - << G4lrint(element->fNeff) - << " A = " << std::setw(6) << std::setprecision(3) - << (element->fAeff)/(g/mole) << " g/mole"; - - for(G4int i = 0; i < element->fNumberOfIsotopes; i++) - { + + flux << " Element: " << element->fName << " (" << element->fSymbol << ")" + << " Z = " << std::setw(4) << std::setprecision(1) << element->fZeff + << " N = " << std::setw(5) << std::setprecision(1) << G4lrint(element->fNeff) + << " A = " << std::setw(6) << std::setprecision(3) << (element->fAeff) / (g / mole) + << " g/mole"; + + for (G4int i = 0; i < element->fNumberOfIsotopes; i++) { flux << "\n ---> " << (*(element->theIsotopeVector))[i] << " abundance: " << std::setw(6) << std::setprecision(3) << (element->fRelativeAbundanceVector[i]) / perCent << " %"; } - flux.precision(prec); - flux.setf(mode,std::ios::floatfield); + flux.precision(prec); + flux.setf(mode, std::ios::floatfield); return flux; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - std::ostream& operator<<(std::ostream& flux, const G4Element& element) +std::ostream& operator<<(std::ostream& flux, const G4Element& element) { - flux << &element; + flux << &element; return flux; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - + std::ostream& operator<<(std::ostream& flux, const G4ElementTable& ElementTable) { - //Dump info for all known elements - flux << "\n***** Table : Nb of elements = " << ElementTable.size() - << " *****\n" << G4endl; + // Dump info for all known elements + flux << "\n***** Table : Nb of elements = " << ElementTable.size() << " *****\n" << G4endl; - for(auto i : ElementTable) - { + for (auto i : ElementTable) { flux << i << G4endl << G4endl; } return flux; } - + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... std::ostream& operator<<(std::ostream& flux, const G4ElementVector& ElementVector) { - //Dump info for all known elements - flux << "\n***** Vector : Nb of elements = " << ElementVector.size() - << " *****\n" << G4endl; + // Dump info for all known elements + flux << "\n***** Vector : Nb of elements = " << ElementVector.size() << " *****\n" << G4endl; - for(auto i : ElementVector) - { + for (auto i : ElementVector) { flux << i << G4endl << G4endl; } return flux; } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/materials/src/G4ElementData.cc b/source/materials/src/G4ElementData.cc index 8b77b4a1656..3fdd1130e01 100644 --- a/source/materials/src/G4ElementData.cc +++ b/source/materials/src/G4ElementData.cc @@ -22,8 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + //--------------------------------------------------------------------------- // // GEANT4 Class file @@ -36,17 +35,12 @@ // Modifications: // //---------------------------------------------------------------------------- -// - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "G4ElementData.hh" -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - G4ElementData::G4ElementData() { - for(G4int i=0; isize(); ++j) { - delete (*(compData[i]))[j]; + if (nullptr != compID[i]) { + for (size_t j = 0; j < compID[i]->size(); ++j) { + delete (*(compData[i]))[j]; } delete compID[i]; delete compData[i]; @@ -74,43 +67,46 @@ G4ElementData::~G4ElementData() void G4ElementData::InitialiseForElement(G4int Z, G4PhysicsVector* v) { - if(Z < 1 || Z >= maxNumElm) { - G4cout << "G4ElementData::InitialiseForElement ERROR for " << name - << " Z = " << Z << " is out of range!" << G4endl; - G4Exception("G4ElementData::InitialiseForElement()", "mat601", - FatalException, "Wrong data handling"); + if (Z < 1 || Z >= maxNumElm) { + G4cout << "G4ElementData::InitialiseForElement ERROR for " << name << " Z = " << Z + << " is out of range!" << G4endl; + G4Exception( + "G4ElementData::InitialiseForElement()", "mat601", FatalException, "Wrong data handling"); return; - } - if(nullptr != elmData[Z]) { delete elmData[Z]; } + } + if (nullptr != elmData[Z]) { + delete elmData[Z]; + } elmData[Z] = v; } void G4ElementData::InitialiseForElement(G4int Z, G4Physics2DVector* v) { - if(Z < 1 || Z >= maxNumElm) { - G4cout << "G4ElementData::InitialiseForElement ERROR for " << name - << " Z = " << Z << " is out of range!" << G4endl; - G4Exception("G4ElementData::InitialiseForElement()", "mat601", - FatalException, "Wrong data handling"); + if (Z < 1 || Z >= maxNumElm) { + G4cout << "G4ElementData::InitialiseForElement ERROR for " << name << " Z = " << Z + << " is out of range!" << G4endl; + G4Exception( + "G4ElementData::InitialiseForElement()", "mat601", FatalException, "Wrong data handling"); return; - } - if(nullptr != elm2Data[Z]) { delete elm2Data[Z]; } + } + if (nullptr != elm2Data[Z]) { + delete elm2Data[Z]; + } elm2Data[Z] = v; } void G4ElementData::InitialiseForComponent(G4int Z, G4int nComponents) { - if(Z < 1 || Z >= maxNumElm || nComponents < 0) { - G4cout << "G4ElementData::InitialiseForComponent ERROR for " << name - << " Z= " << Z << " Ncomp= " << nComponents - << " is out of range!" << G4endl; - G4Exception("G4ElementData::InitialiseForComponent()", "mat602", - FatalException, "Wrong data handling"); + if (Z < 1 || Z >= maxNumElm || nComponents < 0) { + G4cout << "G4ElementData::InitialiseForComponent ERROR for " << name << " Z= " << Z + << " Ncomp= " << nComponents << " is out of range!" << G4endl; + G4Exception( + "G4ElementData::InitialiseForComponent()", "mat602", FatalException, "Wrong data handling"); return; } // reserve a new structure - if(nullptr == compID[Z]) { + if (nullptr == compID[Z]) { compID[Z] = new std::vector(); compData[Z] = new std::vector(); } @@ -121,12 +117,10 @@ void G4ElementData::InitialiseForComponent(G4int Z, G4int nComponents) void G4ElementData::AddComponent(G4int Z, G4int id, G4PhysicsVector* v) { - if(Z < 1 || Z >= maxNumElm || - (G4int)compID[Z]->size() == compLength[Z]) { - G4cout << "G4ElementData::AddComponent ERROR for " << name - << " Z = " << Z << " is out of range!" << G4endl; - G4Exception("G4ElementData::AddComponent()", "mat603", - FatalException, "Wrong data handling"); + if (Z < 1 || Z >= maxNumElm || (G4int)compID[Z]->size() == compLength[Z]) { + G4cout << "G4ElementData::AddComponent ERROR for " << name << " Z = " << Z + << " is out of range!" << G4endl; + G4Exception("G4ElementData::AddComponent()", "mat603", FatalException, "Wrong data handling"); return; } (*(compData[Z]))[compLength[Z]] = v; diff --git a/source/materials/src/G4ExtDEDXTable.cc b/source/materials/src/G4ExtDEDXTable.cc index 81512fe120c..a0be5ed5ac8 100644 --- a/source/materials/src/G4ExtDEDXTable.cc +++ b/source/materials/src/G4ExtDEDXTable.cc @@ -22,15 +22,14 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + // =========================================================================== // GEANT4 class source file // // Class: G4ExtDEDXTable // -// Base class: G4VIonDEDXTable -// +// Base class: G4VIonDEDXTable +// // Author: Anton Lechner (Anton.Lechner@cern.ch) // // First implementation: 29. 02. 2009 @@ -38,9 +37,9 @@ // Modifications: // 03.11.2009 A. Lechner: Added new methods BuildPhysicsVector according // to interface changes in base class G4VIonDEDXTable. -// 25.10.2010 V.Ivanchenko fixed bug in usage of iterators reported by the +// 25.10.2010 V.Ivanchenko fixed bug in usage of iterators reported by the // Coverity tool -// 01.11.2010 V.Ivanchenko fixed remaining bugs reported by Coverity +// 01.11.2010 V.Ivanchenko fixed remaining bugs reported by Coverity // // // Class description: @@ -50,48 +49,43 @@ // // Comments: // -// =========================================================================== -// +// =========================================================================== + +#include "G4ExtDEDXTable.hh" -#include "G4ExtDEDXTable.hh" -#include "G4PhysicsVector.hh" -#include "G4PhysicsVectorType.hh" #include "G4PhysicsFreeVector.hh" -#include "G4PhysicsLogVector.hh" #include "G4PhysicsLinearVector.hh" +#include "G4PhysicsLogVector.hh" +#include "G4PhysicsVector.hh" +#include "G4PhysicsVectorType.hh" + #include -#include #include +#include // ######################################################################### -G4ExtDEDXTable::~G4ExtDEDXTable() { - - ClearTable(); -} +G4ExtDEDXTable::~G4ExtDEDXTable() { ClearTable(); } // ######################################################################### -G4bool G4ExtDEDXTable::BuildPhysicsVector(G4int ionZ, G4int matZ) { - - return IsApplicable( ionZ, matZ ); +G4bool G4ExtDEDXTable::BuildPhysicsVector(G4int ionZ, G4int matZ) +{ + return IsApplicable(ionZ, matZ); } - // ######################################################################### -G4bool G4ExtDEDXTable::BuildPhysicsVector(G4int ionZ, - const G4String& matName) { - - return IsApplicable( ionZ, matName ); +G4bool G4ExtDEDXTable::BuildPhysicsVector(G4int ionZ, const G4String& matName) +{ + return IsApplicable(ionZ, matName); } // ######################################################################### -G4bool G4ExtDEDXTable::IsApplicable( - G4int atomicNumberIon, // Atomic number of ion - G4int atomicNumberElem // Atomic number of elemental material - ) +G4bool G4ExtDEDXTable::IsApplicable(G4int atomicNumberIon, // Atomic number of ion + G4int atomicNumberElem // Atomic number of elemental material +) { G4IonDEDXKeyElem key = std::make_pair(atomicNumberIon, atomicNumberElem); @@ -102,10 +96,9 @@ G4bool G4ExtDEDXTable::IsApplicable( // ######################################################################### -G4bool G4ExtDEDXTable::IsApplicable( - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdentifier // Name or chemical formula of material - ) +G4bool G4ExtDEDXTable::IsApplicable(G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdentifier // Name or chemical formula of material +) { G4IonDEDXKeyMat key = std::make_pair(atomicNumberIon, matIdentifier); @@ -116,112 +109,101 @@ G4bool G4ExtDEDXTable::IsApplicable( // ######################################################################### -G4PhysicsVector* G4ExtDEDXTable::GetPhysicsVector( - G4int atomicNumberIon, // Atomic number of ion - G4int atomicNumberElem // Atomic number of elemental material - ) +G4PhysicsVector* G4ExtDEDXTable::GetPhysicsVector(G4int atomicNumberIon, // Atomic number of ion + G4int atomicNumberElem // Atomic number of elemental material +) { G4IonDEDXKeyElem key = std::make_pair(atomicNumberIon, atomicNumberElem); auto iter = dedxMapElements.find(key); - return (iter != dedxMapElements.end()) ? iter->second : nullptr; + return (iter != dedxMapElements.end()) ? iter->second : nullptr; } // ######################################################################### -G4PhysicsVector* G4ExtDEDXTable::GetPhysicsVector( - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdentifier // Name or chemical formula of material - ) +G4PhysicsVector* G4ExtDEDXTable::GetPhysicsVector(G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdentifier // Name or chemical formula of material +) { G4IonDEDXKeyMat key = std::make_pair(atomicNumberIon, matIdentifier); auto iter = dedxMapMaterials.find(key); - return (iter != dedxMapMaterials.end()) ? iter->second : nullptr; + return (iter != dedxMapMaterials.end()) ? iter->second : nullptr; } // ######################################################################### -G4double G4ExtDEDXTable::GetDEDX( - G4double kinEnergyPerNucleon, // Kinetic energy per nucleon - G4int atomicNumberIon, // Atomic number of ion - G4int atomicNumberElem // Atomic number of elemental material - ) +G4double G4ExtDEDXTable::GetDEDX(G4double kinEnergyPerNucleon, // Kinetic energy per nucleon + G4int atomicNumberIon, // Atomic number of ion + G4int atomicNumberElem // Atomic number of elemental material +) { G4IonDEDXKeyElem key = std::make_pair(atomicNumberIon, atomicNumberElem); auto iter = dedxMapElements.find(key); - return ( iter != dedxMapElements.end() ) ? - (iter->second)->Value( kinEnergyPerNucleon) : 0.0; + return (iter != dedxMapElements.end()) ? (iter->second)->Value(kinEnergyPerNucleon) : 0.0; } // ######################################################################### -G4double G4ExtDEDXTable::GetDEDX( - G4double kinEnergyPerNucleon, // Kinetic energy per nucleon - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdentifier // Name or chemical formula of material - ) +G4double G4ExtDEDXTable::GetDEDX(G4double kinEnergyPerNucleon, // Kinetic energy per nucleon + G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdentifier // Name or chemical formula of material +) { G4IonDEDXKeyMat key = std::make_pair(atomicNumberIon, matIdentifier); auto iter = dedxMapMaterials.find(key); - return (iter != dedxMapMaterials.end()) ? - (iter->second)->Value( kinEnergyPerNucleon) : 0.0; + return (iter != dedxMapMaterials.end()) ? (iter->second)->Value(kinEnergyPerNucleon) : 0.0; } // ######################################################################### -G4bool G4ExtDEDXTable::AddPhysicsVector( - G4PhysicsVector* physicsVector, // Physics vector - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdentifier, // Name of elemental material - G4int atomicNumberElem // Atomic number of elemental material - ) { - - if(physicsVector == nullptr) { - G4Exception ("G4ExtDEDXTable::AddPhysicsVector() for material", - "mat037", FatalException, - "Pointer to vector is null-pointer."); +G4bool G4ExtDEDXTable::AddPhysicsVector(G4PhysicsVector* physicsVector, // Physics vector + G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdentifier, // Name of elemental material + G4int atomicNumberElem // Atomic number of elemental material +) +{ + if (physicsVector == nullptr) { + G4Exception("G4ExtDEDXTable::AddPhysicsVector() for material", "mat037", FatalException, + "Pointer to vector is null-pointer."); return false; } - if(matIdentifier.empty()) { - G4Exception ("G4ExtDEDXTable::AddPhysicsVector() for material", - "mat038", FatalException, "Invalid name of the material."); - return false; + if (matIdentifier.empty()) { + G4Exception("G4ExtDEDXTable::AddPhysicsVector() for material", "mat038", FatalException, + "Invalid name of the material."); + return false; } - if(atomicNumberIon <= 2) { - G4Exception ("G4ExtDEDXTable::AddPhysicsVector() for material", - "mat039", FatalException, "Illegal atomic number."); + if (atomicNumberIon <= 2) { + G4Exception("G4ExtDEDXTable::AddPhysicsVector() for material", "mat039", FatalException, + "Illegal atomic number."); return false; } - if(atomicNumberElem > 0) { + if (atomicNumberElem > 0) { + G4IonDEDXKeyElem key = std::make_pair(atomicNumberIon, atomicNumberElem); - G4IonDEDXKeyElem key = std::make_pair(atomicNumberIon, atomicNumberElem); - - if(dedxMapElements.count(key) == 1) { - G4Exception ("G4ExtDEDXTable::AddPhysicsVector() for material", - "mat037", FatalException, - "Vector already exist, remove it before replacing."); - return false; - } + if (dedxMapElements.count(key) == 1) { + G4Exception("G4ExtDEDXTable::AddPhysicsVector() for material", "mat037", FatalException, + "Vector already exist, remove it before replacing."); + return false; + } - dedxMapElements[key] = physicsVector; + dedxMapElements[key] = physicsVector; } G4IonDEDXKeyMat mkey = std::make_pair(atomicNumberIon, matIdentifier); - if(dedxMapMaterials.count(mkey) == 1) { - G4Exception ("G4ExtDEDXTable::AddPhysicsVector() for material", - "mat037", FatalException, - "Vector already exist, remove it before replacing."); + if (dedxMapMaterials.count(mkey) == 1) { + G4Exception("G4ExtDEDXTable::AddPhysicsVector() for material", "mat037", FatalException, + "Vector already exist, remove it before replacing."); return false; } @@ -232,11 +214,10 @@ G4bool G4ExtDEDXTable::AddPhysicsVector( // ######################################################################### -G4bool G4ExtDEDXTable::RemovePhysicsVector( - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdentifier // Name or chemical formula of material - ) { - +G4bool G4ExtDEDXTable::RemovePhysicsVector(G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdentifier // Name or chemical formula of material +) +{ G4PhysicsVector* physicsVector = nullptr; // Deleting key of physics vector from material map @@ -244,10 +225,9 @@ G4bool G4ExtDEDXTable::RemovePhysicsVector( auto iter = dedxMapMaterials.find(key); - if(iter == dedxMapMaterials.end()) { - G4Exception ("G4ExtDEDXTable::RemovePhysicsVector() for material", - "mat037", FatalException, - "Pointer to vector is null-pointer."); + if (iter == dedxMapMaterials.end()) { + G4Exception("G4ExtDEDXTable::RemovePhysicsVector() for material", "mat037", FatalException, + "Pointer to vector is null-pointer."); return false; } @@ -256,13 +236,12 @@ G4bool G4ExtDEDXTable::RemovePhysicsVector( // Deleting key of physics vector from elemental material map (if it exists) G4IonDEDXMapElem::iterator it; - - for(it=dedxMapElements.begin(); it!=dedxMapElements.end(); ++it) { - if( (*it).second == physicsVector ) { - dedxMapElements.erase(it); - break; - } + for (it = dedxMapElements.begin(); it != dedxMapElements.end(); ++it) { + if ((*it).second == physicsVector) { + dedxMapElements.erase(it); + break; + } } // Deleting physics vector @@ -273,120 +252,112 @@ G4bool G4ExtDEDXTable::RemovePhysicsVector( // ######################################################################### -G4bool G4ExtDEDXTable::StorePhysicsTable( - const G4String& fileName // File name - ) { +G4bool G4ExtDEDXTable::StorePhysicsTable(const G4String& fileName // File name +) +{ G4bool success = true; std::ofstream ofilestream; - ofilestream.open( fileName, std::ios::out ); + ofilestream.open(fileName, std::ios::out); - if( !ofilestream ) { + if (! ofilestream) { G4ExceptionDescription ed; - ed << "Cannot open file " << fileName; - G4Exception ("G4IonStoppingData::StorePhysicsTable()", - "mat030", FatalException, ed); + ed << "Cannot open file " << fileName; + G4Exception("G4IonStoppingData::StorePhysicsTable()", "mat030", FatalException, ed); success = false; - } + } else { + size_t nmbMatTables = dedxMapMaterials.size(); - size_t nmbMatTables = dedxMapMaterials.size(); + ofilestream << nmbMatTables << G4endl << G4endl; - ofilestream << nmbMatTables << G4endl << G4endl; + auto iterMat = dedxMapMaterials.begin(); + auto iterMat_end = dedxMapMaterials.end(); - auto iterMat = dedxMapMaterials.begin(); - auto iterMat_end = dedxMapMaterials.end(); + for (; iterMat != iterMat_end; iterMat++) { + G4IonDEDXKeyMat key = iterMat->first; + G4PhysicsVector* physicsVector = iterMat->second; - for(;iterMat != iterMat_end; iterMat++) { - G4IonDEDXKeyMat key = iterMat -> first; - G4PhysicsVector* physicsVector = iterMat -> second; - - G4int atomicNumberIon = key.first; - G4String matIdentifier = key.second; + G4int atomicNumberIon = key.first; + G4String matIdentifier = key.second; - G4int atomicNumberElem = FindAtomicNumberElement(physicsVector); + G4int atomicNumberElem = FindAtomicNumberElement(physicsVector); - if(physicsVector != nullptr) { - ofilestream << atomicNumberIon << " " << matIdentifier; + if (physicsVector != nullptr) { + ofilestream << atomicNumberIon << " " << matIdentifier; - if(atomicNumberElem > 0) - { + if (atomicNumberElem > 0) { ofilestream << " " << atomicNumberElem; } - ofilestream << " # "; + ofilestream << " # "; - if(atomicNumberElem > 0) - { - ofilestream << ""; - } + if (atomicNumberElem > 0) { + ofilestream << ""; + } - ofilestream << G4endl << physicsVector -> GetType() << G4endl; + ofilestream << G4endl << physicsVector->GetType() << G4endl; - physicsVector -> Store(ofilestream, true); + physicsVector->Store(ofilestream, true); - ofilestream << G4endl; - } else { - G4Exception ("G4IonStoppingData::StorePhysicsTable()", - "mat030", FatalException,"Cannot store vector."); - } - } + ofilestream << G4endl; + } + else { + G4Exception("G4IonStoppingData::StorePhysicsTable()", "mat030", FatalException, + "Cannot store vector."); + } + } } ofilestream.close(); - return success; + return success; } // ######################################################################### -G4bool G4ExtDEDXTable::RetrievePhysicsTable(const G4String& fileName) -{ +G4bool G4ExtDEDXTable::RetrievePhysicsTable(const G4String& fileName) +{ std::ifstream ifilestream; - ifilestream.open( fileName, std::ios::in|std::ios::binary ); - if( ! ifilestream ) { + ifilestream.open(fileName, std::ios::in | std::ios::binary); + if (! ifilestream) { G4ExceptionDescription ed; - ed << "Cannot open file " << fileName; - G4Exception ("G4IonStoppingData::RetrievePhysicsTable()", - "mat030", FatalException, ed); + ed << "Cannot open file " << fileName; + G4Exception("G4IonStoppingData::RetrievePhysicsTable()", "mat030", FatalException, ed); return false; - } + } - //std::string::size_type nmbVectors; + // std::string::size_type nmbVectors; G4int nmbVectors = 0; ifilestream >> nmbVectors; - if( ifilestream.fail() || nmbVectors <= 0) { - G4cout << "G4ExtDEDXTable::RetrievePhysicsTable() " - << " File content of " << fileName << " ill-formated." - << " Nvectors= " << nmbVectors - << G4endl; - ifilestream.close(); - return false; + if (ifilestream.fail() || nmbVectors <= 0) { + G4cout << "G4ExtDEDXTable::RetrievePhysicsTable() " + << " File content of " << fileName << " ill-formated." + << " Nvectors= " << nmbVectors << G4endl; + ifilestream.close(); + return false; } - for(G4int i = 0; i 0) { - line = line.substr(0, pos); + std::string::size_type pos = line.find_first_of('#'); + if (pos != std::string::npos && pos > 0) { + line = line.substr(0, pos); } } - std::istringstream headerstream( line ); + std::istringstream headerstream(line); std::string::size_type atomicNumberIon; headerstream >> atomicNumberIon; @@ -394,49 +365,45 @@ G4bool G4ExtDEDXTable::RetrievePhysicsTable(const G4String& fileName) G4String materialName; headerstream >> materialName; - if( headerstream.fail() || std::string::npos == atomicNumberIon) { - G4cout << "G4ExtDEDXTable::RetrievePhysicsTable() " - << " File content of " << fileName << " ill-formated " - << " (vector header)." - << G4endl; + if (headerstream.fail() || std::string::npos == atomicNumberIon) { + G4cout << "G4ExtDEDXTable::RetrievePhysicsTable() " + << " File content of " << fileName << " ill-formated " + << " (vector header)." << G4endl; ifilestream.close(); return false; - } + } std::string::size_type atomicNumberMat; headerstream >> atomicNumberMat; - if( headerstream.eof() || std::string::npos == atomicNumberMat) { - atomicNumberMat = 0; + if (headerstream.eof() || std::string::npos == atomicNumberMat) { + atomicNumberMat = 0; } G4int vectorType; ifilestream >> vectorType; - + G4PhysicsVector* physicsVector = CreatePhysicsVector(vectorType); - if(physicsVector == nullptr) { + if (physicsVector == nullptr) { G4cout << "G4ExtDEDXTable::RetrievePhysicsTable " - << " illegal physics Vector type " << vectorType - << " in " << fileName - << G4endl; + << " illegal physics Vector type " << vectorType << " in " << fileName << G4endl; ifilestream.close(); return false; } - if( !physicsVector -> Retrieve(ifilestream, true) ) { - G4cout << "G4ExtDEDXTable::RetrievePhysicsTable() " - << " File content of " << fileName << " ill-formated." - << G4endl; + if (! physicsVector->Retrieve(ifilestream, true)) { + G4cout << "G4ExtDEDXTable::RetrievePhysicsTable() " + << " File content of " << fileName << " ill-formated." << G4endl; ifilestream.close(); return false; - } - physicsVector -> FillSecondDerivatives(); + } + physicsVector->FillSecondDerivatives(); // Retrieved vector is added to material store - if( !AddPhysicsVector(physicsVector, (G4int)atomicNumberIon, - materialName, (G4int)atomicNumberMat) ) { - + if (! AddPhysicsVector( + physicsVector, (G4int)atomicNumberIon, materialName, (G4int)atomicNumberMat)) + { delete physicsVector; ifilestream.close(); return false; @@ -450,48 +417,43 @@ G4bool G4ExtDEDXTable::RetrievePhysicsTable(const G4String& fileName) // ######################################################################### -G4PhysicsVector* G4ExtDEDXTable::CreatePhysicsVector(G4int vectorType) { - +G4PhysicsVector* G4ExtDEDXTable::CreatePhysicsVector(G4int vectorType) +{ G4PhysicsVector* physicsVector = nullptr; switch (vectorType) { + case T_G4PhysicsLinearVector: + physicsVector = new G4PhysicsLinearVector(true); + break; - case T_G4PhysicsLinearVector: - physicsVector = new G4PhysicsLinearVector(true); - break; + case T_G4PhysicsLogVector: + physicsVector = new G4PhysicsLogVector(true); + break; - case T_G4PhysicsLogVector: - physicsVector = new G4PhysicsLogVector(true); - break; + case T_G4PhysicsFreeVector: + physicsVector = new G4PhysicsFreeVector(true); + break; - case T_G4PhysicsFreeVector: - physicsVector = new G4PhysicsFreeVector(true); - break; - - default: - break; + default: + break; } return physicsVector; } // ######################################################################### -G4int G4ExtDEDXTable::FindAtomicNumberElement( - G4PhysicsVector* physicsVector - ) { - +G4int G4ExtDEDXTable::FindAtomicNumberElement(G4PhysicsVector* physicsVector) +{ G4int atomicNumber = 0; - auto iter = dedxMapElements.begin(); + auto iter = dedxMapElements.begin(); auto iter_end = dedxMapElements.end(); - for(;iter != iter_end; ++iter) { - - if( (*iter).second == physicsVector ) { - - G4IonDEDXKeyElem key = (*iter).first; - atomicNumber = key.second; - } + for (; iter != iter_end; ++iter) { + if ((*iter).second == physicsVector) { + G4IonDEDXKeyElem key = (*iter).first; + atomicNumber = key.second; + } } return atomicNumber; @@ -499,13 +461,13 @@ G4int G4ExtDEDXTable::FindAtomicNumberElement( // ######################################################################### -void G4ExtDEDXTable::ClearTable() { - auto iterMat = dedxMapMaterials.begin(); +void G4ExtDEDXTable::ClearTable() +{ + auto iterMat = dedxMapMaterials.begin(); auto iterMat_end = dedxMapMaterials.end(); - for(;iterMat != iterMat_end; ++iterMat) { - - G4PhysicsVector* vec = iterMat -> second; + for (; iterMat != iterMat_end; ++iterMat) { + G4PhysicsVector* vec = iterMat->second; delete vec; } @@ -516,47 +478,37 @@ void G4ExtDEDXTable::ClearTable() { // ######################################################################### -void G4ExtDEDXTable::DumpMap() { - auto iterMat = dedxMapMaterials.begin(); +void G4ExtDEDXTable::DumpMap() +{ + auto iterMat = dedxMapMaterials.begin(); auto iterMat_end = dedxMapMaterials.end(); - G4cout << std::setw(15) << std::right - << "Atomic nmb ion" - << std::setw(25) << std::right - << "Material name" - << std::setw(25) << std::right - << "Atomic nmb material" - << G4endl; + G4cout << std::setw(15) << std::right << "Atomic nmb ion" << std::setw(25) << std::right + << "Material name" << std::setw(25) << std::right << "Atomic nmb material" << G4endl; - for(;iterMat != iterMat_end; ++iterMat) { - G4IonDEDXKeyMat key = iterMat -> first; - G4PhysicsVector* physicsVector = iterMat -> second; + for (; iterMat != iterMat_end; ++iterMat) { + G4IonDEDXKeyMat key = iterMat->first; + G4PhysicsVector* physicsVector = iterMat->second; - G4int atomicNumberIon = key.first; - G4String matIdentifier = key.second; + G4int atomicNumberIon = key.first; + G4String matIdentifier = key.second; - G4int atomicNumberElem = FindAtomicNumberElement(physicsVector); + G4int atomicNumberElem = FindAtomicNumberElement(physicsVector); - if(physicsVector != nullptr) - { - G4cout << std::setw(15) << std::right << atomicNumberIon - << std::setw(25) << std::right << matIdentifier << std::setw(25) - << std::right; + if (physicsVector != nullptr) { + G4cout << std::setw(15) << std::right << atomicNumberIon << std::setw(25) << std::right + << matIdentifier << std::setw(25) << std::right; - if(atomicNumberElem > 0) - { - G4cout << atomicNumberElem; - } - else - { - G4cout << "N/A"; - } - - G4cout << G4endl; + if (atomicNumberElem > 0) { + G4cout << atomicNumberElem; + } + else { + G4cout << "N/A"; } - } + G4cout << G4endl; + } + } } // ######################################################################### - diff --git a/source/materials/src/G4ExtendedMaterial.cc b/source/materials/src/G4ExtendedMaterial.cc index 30932fc672e..bcb10b6f434 100644 --- a/source/materials/src/G4ExtendedMaterial.cc +++ b/source/materials/src/G4ExtendedMaterial.cc @@ -22,111 +22,82 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -// -// 18-10-07, move definition of material index to InitialisePointers (V.Ivanchenko) + +// 18-10-07, move definition of material index to InitialisePointers (V.Ivanchenko) // 13-08-08, do not use fixed size arrays (V.Ivanchenko) // 26-10-11, new scheme for G4Exception (mma) // 13-04-12, map fMatComponents, filled in AddMaterial() // 21-04-12, fMassOfMolecule, computed for AtomsCount (mma) -// -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "G4ExtendedMaterial.hh" + #include "G4VMaterialExtension.hh" // Constructor to create an extended material from the base-class G4Material -G4ExtendedMaterial::G4ExtendedMaterial(const G4String& name, - const G4Material* baseMaterial) - : G4Material(name,baseMaterial->GetDensity(),baseMaterial, - baseMaterial->GetState(),baseMaterial->GetTemperature(), - baseMaterial->GetPressure()) -{;} +G4ExtendedMaterial::G4ExtendedMaterial(const G4String& name, const G4Material* baseMaterial) + : G4Material(name, baseMaterial->GetDensity(), baseMaterial, baseMaterial->GetState(), + baseMaterial->GetTemperature(), baseMaterial->GetPressure()) +{} // Constructor to create an extended material from single element -G4ExtendedMaterial::G4ExtendedMaterial(const G4String& name, G4double z, - G4double a, G4double density, - G4State state, G4double temp, G4double pressure) - : G4Material(name,z,a,density,state,temp,pressure) -{;} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +G4ExtendedMaterial::G4ExtendedMaterial(const G4String& name, G4double z, G4double a, + G4double density, G4State state, G4double temp, G4double pressure) + : G4Material(name, z, a, density, state, temp, pressure) +{} // Constructor to create an extended material from a combination of elements // (elements and/or materials) added with AddElement or AddMaterial -G4ExtendedMaterial::G4ExtendedMaterial(const G4String& name, G4double density, - G4int nComponents, - G4State state, G4double temp, G4double pressure) - : G4Material(name,density,nComponents,state,temp,pressure) -{;} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +G4ExtendedMaterial::G4ExtendedMaterial(const G4String& name, G4double density, G4int nComponents, + G4State state, G4double temp, G4double pressure) + : G4Material(name, density, nComponents, state, temp, pressure) +{} // Constructor to create an extended material from the base extended material G4ExtendedMaterial::G4ExtendedMaterial(const G4String& name, G4double density, - const G4ExtendedMaterial* bmat, - G4State state, G4double temp, G4double pressure) - : G4Material(name,density,bmat,state,temp,pressure) -{;} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - + const G4ExtendedMaterial* bmat, G4State state, G4double temp, G4double pressure) + : G4Material(name, density, bmat, state, temp, pressure) +{} // register G4VMaterialExtension void G4ExtendedMaterial::RegisterExtension(std::unique_ptr extension) { auto iter = fExtensionMap.find(extension->GetName()); - if(iter!=fExtensionMap.end()) - { - G4ExceptionDescription msg; - msg << "G4ExtendedMaterial <"< already has extension for " - << extension->GetName() - << ". Extension is replaced."; - G4Exception("G4ExtendedMaterial::RegisterExtension(...)","MatExt001",JustWarning,msg); + if (iter != fExtensionMap.end()) { + G4ExceptionDescription msg; + msg << "G4ExtendedMaterial <" << GetName() << "> already has extension for " + << extension->GetName() << ". Extension is replaced."; + G4Exception("G4ExtendedMaterial::RegisterExtension(...)", "MatExt001", JustWarning, msg); } - fExtensionMap.insert(std::make_pair(extension->GetName(),std::move(extension))); + fExtensionMap.insert(std::make_pair(extension->GetName(), std::move(extension))); } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - // retrieve G4VMaterialExtension, null pointer is returned if model is not available G4VMaterialExtension* G4ExtendedMaterial::RetrieveExtension(const G4String& name) { const auto iter = fExtensionMap.find(name); - if(iter!=fExtensionMap.end()) - { return iter->second.get(); } - else - { - G4ExceptionDescription msg; - msg << "G4ExtendedMAterial <"< cannot find extension for " - << name; - G4Exception("G4ExtendedMaterial::RetreiveExtension(...)","MatExt002",JustWarning,msg); - return nullptr; + if (iter != fExtensionMap.end()) { + return iter->second.get(); } -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool G4ExtendedMaterial::IsExtended() const -{ return true; } + G4ExceptionDescription msg; + msg << "G4ExtendedMAterial <" << GetName() << "> cannot find extension for " << name; + G4Exception("G4ExtendedMaterial::RetreiveExtension(...)", "MatExt002", JustWarning, msg); + return nullptr; +} -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +G4bool G4ExtendedMaterial::IsExtended() const { return true; } void G4ExtendedMaterial::Print(std::ostream& flux) const -{ +{ flux << "\n Registered material extensions :\n"; auto iter = fExtensionMap.begin(); - for(;iter!=fExtensionMap.end();iter++) - { flux << " " << iter->first << "\n"; } + for (; iter != fExtensionMap.end(); iter++) { + flux << " " << iter->first << "\n"; + } } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/materials/src/G4ICRU90StoppingData.cc b/source/materials/src/G4ICRU90StoppingData.cc index 72293625396..2a2b2ba3f0c 100644 --- a/source/materials/src/G4ICRU90StoppingData.cc +++ b/source/materials/src/G4ICRU90StoppingData.cc @@ -22,8 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + //--------------------------------------------------------------------------- // // GEANT4 Class file @@ -37,26 +36,23 @@ // Creation date: 03.09.2018 // // Modifications: 25.09.2018 V.Ivanchenko adopted for material sub-library -// -//---------------------------------------------------------------------------- // +//---------------------------------------------------------------------------- -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -#include "G4ICRU90StoppingData.hh" +#include "G4ICRU90StoppingData.hh" -#include "G4SystemOfUnits.hh" #include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4ICRU90StoppingData::G4ICRU90StoppingData() : isInitialized(false) +G4ICRU90StoppingData::G4ICRU90StoppingData() { - // 1st initialisation - for(size_t i=0; iGetName(); - for(G4int j=0; jPutValues(i, e[i]*CLHEP::MeV, ((G4double)dedx[i])*fac); + for (G4int i = 0; i < n; ++i) { + data->PutValues(i, e[i] * CLHEP::MeV, ((G4double)dedx[i]) * fac); } data->FillSecondDerivatives(); return data; } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... diff --git a/source/materials/src/G4IonStoppingData.cc b/source/materials/src/G4IonStoppingData.cc index 8cec9e799cf..60776c7a2ee 100644 --- a/source/materials/src/G4IonStoppingData.cc +++ b/source/materials/src/G4IonStoppingData.cc @@ -22,15 +22,14 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + // =========================================================================== // GEANT4 class source file // // Class: G4IonStoppingData // -// Base class: G4VIonDEDXTable -// +// Base class: G4VIonDEDXTable +// // Author: Anton Lechner (Anton.Lechner@cern.ch) // // First implementation: 03. 11. 2009 @@ -45,37 +44,33 @@ // // Comments: // -// =========================================================================== -// +// =========================================================================== -#include -#include -#include +#include "G4IonStoppingData.hh" -#include "G4IonStoppingData.hh" -#include "G4PhysicsVector.hh" -#include "G4PhysicsFreeVector.hh" #include "G4PhysicalConstants.hh" +#include "G4PhysicsFreeVector.hh" +#include "G4PhysicsVector.hh" #include "G4SystemOfUnits.hh" +#include +#include +#include +#include + // ######################################################################### -G4IonStoppingData::G4IonStoppingData(const G4String& dir, G4bool val) : - subDir(dir), fICRU90(val) { -} +G4IonStoppingData::G4IonStoppingData(const G4String& dir, G4bool val) : subDir(dir), fICRU90(val) {} // ######################################################################### -G4IonStoppingData::~G4IonStoppingData() { - ClearTable(); -} +G4IonStoppingData::~G4IonStoppingData() { ClearTable(); } // ######################################################################### -G4bool G4IonStoppingData::IsApplicable( - G4int atomicNumberIon, // Atomic number of ion - G4int atomicNumberElem // Atomic number of elemental material - ) +G4bool G4IonStoppingData::IsApplicable(G4int atomicNumberIon, // Atomic number of ion + G4int atomicNumberElem // Atomic number of elemental material +) { G4IonDEDXKeyElem key = std::make_pair(atomicNumberIon, atomicNumberElem); @@ -86,10 +81,9 @@ G4bool G4IonStoppingData::IsApplicable( // ######################################################################### -G4bool G4IonStoppingData::IsApplicable( - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdentifier // Name or chemical formula of material - ) +G4bool G4IonStoppingData::IsApplicable(G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdentifier // Name or chemical formula of material +) { G4IonDEDXKeyMat key = std::make_pair(atomicNumberIon, matIdentifier); @@ -100,100 +94,90 @@ G4bool G4IonStoppingData::IsApplicable( // ######################################################################### -G4PhysicsVector* G4IonStoppingData::GetPhysicsVector( - G4int atomicNumberIon, // Atomic number of ion - G4int atomicNumberElem // Atomic number of elemental material - ) +G4PhysicsVector* G4IonStoppingData::GetPhysicsVector(G4int atomicNumberIon, // Atomic number of ion + G4int atomicNumberElem // Atomic number of elemental material +) { G4IonDEDXKeyElem key = std::make_pair(atomicNumberIon, atomicNumberElem); auto iter = dedxMapElements.find(key); - return (iter != dedxMapElements.end()) ? iter->second : nullptr; + return (iter != dedxMapElements.end()) ? iter->second : nullptr; } // ######################################################################### -G4PhysicsVector* G4IonStoppingData::GetPhysicsVector( - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdentifier // Name or chemical formula of material - ) +G4PhysicsVector* G4IonStoppingData::GetPhysicsVector(G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdentifier // Name or chemical formula of material +) { G4IonDEDXKeyMat key = std::make_pair(atomicNumberIon, matIdentifier); auto iter = dedxMapMaterials.find(key); - return (iter != dedxMapMaterials.end()) ? iter->second : nullptr; + return (iter != dedxMapMaterials.end()) ? iter->second : nullptr; } // ######################################################################### -G4double G4IonStoppingData::GetDEDX( - G4double kinEnergyPerNucleon, // Kinetic energy per nucleon - G4int atomicNumberIon, // Atomic number of ion - G4int atomicNumberElem // Atomic number of elemental material - ) +G4double G4IonStoppingData::GetDEDX(G4double kinEnergyPerNucleon, // Kinetic energy per nucleon + G4int atomicNumberIon, // Atomic number of ion + G4int atomicNumberElem // Atomic number of elemental material +) { G4IonDEDXKeyElem key = std::make_pair(atomicNumberIon, atomicNumberElem); auto iter = dedxMapElements.find(key); - return ( iter != dedxMapElements.end()) ? - (iter->second)->Value( kinEnergyPerNucleon) : 0.0; + return (iter != dedxMapElements.end()) ? (iter->second)->Value(kinEnergyPerNucleon) : 0.0; } // ######################################################################### -G4double G4IonStoppingData::GetDEDX( - G4double kinEnergyPerNucleon, // Kinetic energy per nucleon - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdentifier // Name or chemical formula of material - ) +G4double G4IonStoppingData::GetDEDX(G4double kinEnergyPerNucleon, // Kinetic energy per nucleon + G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdentifier // Name or chemical formula of material +) { G4IonDEDXKeyMat key = std::make_pair(atomicNumberIon, matIdentifier); auto iter = dedxMapMaterials.find(key); - return (iter != dedxMapMaterials.end()) ? - (iter->second)->Value(kinEnergyPerNucleon) : 0.0; + return (iter != dedxMapMaterials.end()) ? (iter->second)->Value(kinEnergyPerNucleon) : 0.0; } // ######################################################################### -G4bool G4IonStoppingData::AddPhysicsVector( - G4PhysicsVector* physicsVector, // Physics vector - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdentifier // Name of elemental material - ) +G4bool G4IonStoppingData::AddPhysicsVector(G4PhysicsVector* physicsVector, // Physics vector + G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdentifier // Name of elemental material +) { - if(physicsVector == nullptr) { - G4Exception ("G4IonStoppingData::AddPhysicsVector() for material", - "mat037", FatalException, - "Pointer to vector is null-pointer."); + if (physicsVector == nullptr) { + G4Exception("G4IonStoppingData::AddPhysicsVector() for material", "mat037", FatalException, + "Pointer to vector is null-pointer."); return false; } - if(matIdentifier.empty()) { - G4Exception ("G4IonStoppingData::AddPhysicsVector() for material", - "mat038", FatalException, "Invalid name of the material."); + if (matIdentifier.empty()) { + G4Exception("G4IonStoppingData::AddPhysicsVector() for material", "mat038", FatalException, + "Invalid name of the material."); return false; } - if(atomicNumberIon <= 0) { - G4Exception ("G4IonStoppingData::AddPhysicsVector() for material", - "mat039", FatalException, "Illegal atomic number."); + if (atomicNumberIon <= 0) { + G4Exception("G4IonStoppingData::AddPhysicsVector() for material", "mat039", FatalException, + "Illegal atomic number."); return false; } G4IonDEDXKeyMat mkey = std::make_pair(atomicNumberIon, matIdentifier); - if(dedxMapMaterials.count(mkey) == 1) { + if (dedxMapMaterials.count(mkey) == 1) { G4ExceptionDescription ed; - ed << "Vector with Z1 = " << atomicNumberIon << ", mat = " - << matIdentifier + ed << "Vector with Z1 = " << atomicNumberIon << ", mat = " << matIdentifier << "already exists. Remove first before replacing."; - G4Exception ("G4IonStoppingData::AddPhysicsVector() for material", - "mat040", FatalException, ed); + G4Exception("G4IonStoppingData::AddPhysicsVector() for material", "mat040", FatalException, ed); return false; } @@ -204,39 +188,36 @@ G4bool G4IonStoppingData::AddPhysicsVector( // ######################################################################### -G4bool G4IonStoppingData::AddPhysicsVector( - G4PhysicsVector* physicsVector, // Physics vector - G4int atomicNumberIon, // Atomic number of ion - G4int atomicNumberElem // Atomic number of elemental material - ) +G4bool G4IonStoppingData::AddPhysicsVector(G4PhysicsVector* physicsVector, // Physics vector + G4int atomicNumberIon, // Atomic number of ion + G4int atomicNumberElem // Atomic number of elemental material +) { - if(physicsVector == nullptr) { - G4Exception ("G4IonStoppingData::AddPhysicsVector() for element", "mat037", - FatalException, "Pointer to vector is null-pointer."); - return false; + if (physicsVector == nullptr) { + G4Exception("G4IonStoppingData::AddPhysicsVector() for element", "mat037", FatalException, + "Pointer to vector is null-pointer."); + return false; } - if(atomicNumberIon <= 0) { - G4Exception ("G4IonStoppingData::AddPhysicsVector() for element", "mat038", - FatalException, "Invalid ion number."); + if (atomicNumberIon <= 0) { + G4Exception("G4IonStoppingData::AddPhysicsVector() for element", "mat038", FatalException, + "Invalid ion number."); return false; } - if(atomicNumberElem <= 0) { - G4Exception ("G4IonStoppingData::AddPhysicsVector() for element", "mat039", - FatalException, "Illegal atomic number."); + if (atomicNumberElem <= 0) { + G4Exception("G4IonStoppingData::AddPhysicsVector() for element", "mat039", FatalException, + "Illegal atomic number."); return false; } G4IonDEDXKeyElem key = std::make_pair(atomicNumberIon, atomicNumberElem); - if(dedxMapElements.count(key) == 1) { + if (dedxMapElements.count(key) == 1) { G4ExceptionDescription ed; - ed << "Vector with Z1 = " << atomicNumberIon << ", Z= " - << atomicNumberElem + ed << "Vector with Z1 = " << atomicNumberIon << ", Z= " << atomicNumberElem << "already exists. Remove first before replacing."; - G4Exception ("G4IonStoppingData::AddPhysicsVector() for element", "mat040", - FatalException, ed); + G4Exception("G4IonStoppingData::AddPhysicsVector() for element", "mat040", FatalException, ed); return false; } @@ -247,18 +228,17 @@ G4bool G4IonStoppingData::AddPhysicsVector( // ######################################################################### -G4bool G4IonStoppingData::RemovePhysicsVector( - G4int atomicNumberIon, // Atomic number of ion - const G4String& matIdentifier // Name or chemical formula of material - ) { - +G4bool G4IonStoppingData::RemovePhysicsVector(G4int atomicNumberIon, // Atomic number of ion + const G4String& matIdentifier // Name or chemical formula of material +) +{ G4IonDEDXKeyMat key = std::make_pair(atomicNumberIon, matIdentifier); auto iter = dedxMapMaterials.find(key); - if(iter == dedxMapMaterials.end()) { - G4Exception ("G4IonStoppingData::RemovePhysicsVector() for material", - "mat038", FatalException, "Invalid name of the material."); + if (iter == dedxMapMaterials.end()) { + G4Exception("G4IonStoppingData::RemovePhysicsVector() for material", "mat038", FatalException, + "Invalid name of the material."); return false; } @@ -275,17 +255,17 @@ G4bool G4IonStoppingData::RemovePhysicsVector( // ######################################################################### -G4bool G4IonStoppingData::RemovePhysicsVector( - G4int atomicNumberIon, // Atomic number of ion - G4int atomicNumberElem // Atomic number of elemental material - ) { +G4bool G4IonStoppingData::RemovePhysicsVector(G4int atomicNumberIon, // Atomic number of ion + G4int atomicNumberElem // Atomic number of elemental material +) +{ G4IonDEDXKeyElem key = std::make_pair(atomicNumberIon, atomicNumberElem); auto iter = dedxMapElements.find(key); - if(iter == dedxMapElements.end()) { - G4Exception ("G4IonStoppingData::RemovePhysicsVector() for element", - "mat038", FatalException, "Invalid element."); + if (iter == dedxMapElements.end()) { + G4Exception("G4IonStoppingData::RemovePhysicsVector() for element", "mat038", FatalException, + "Invalid element."); return false; } @@ -302,55 +282,50 @@ G4bool G4IonStoppingData::RemovePhysicsVector( // ######################################################################### -G4bool G4IonStoppingData::BuildPhysicsVector( - G4int atomicNumberIon, // Atomic number of ion - const G4String& matname // Name of material - ) { - if(IsApplicable(atomicNumberIon, matname)) - { +G4bool G4IonStoppingData::BuildPhysicsVector(G4int atomicNumberIon, // Atomic number of ion + const G4String& matname // Name of material +) +{ + if (IsApplicable(atomicNumberIon, matname)) { return true; } const char* path = G4FindDataDir("G4LEDATA"); - if(path == nullptr) - { - G4Exception("G4IonStoppingData::BuildPhysicsVector()", "mat521", - FatalException, "G4LEDATA environment variable not set"); + if (path == nullptr) { + G4Exception("G4IonStoppingData::BuildPhysicsVector()", "mat521", FatalException, + "G4LEDATA environment variable not set"); return false; } std::ostringstream file; - G4String ww = (fICRU90 && (matname == "G4_WATER" || - matname == "G4_AIR" || - matname == "G4_GRAPHITE")) ? "90" : "73"; - - file << path << "/" << subDir << ww << "/z" - << atomicNumberIon << "_" << matname << ".dat"; - G4String fileName = G4String( file.str().c_str() ); - - std::ifstream ifilestream( fileName ); - - if(!ifilestream.is_open()) - { + G4String ww = + (fICRU90 && (matname == "G4_WATER" || matname == "G4_AIR" || matname == "G4_GRAPHITE")) ? "90" + : "73"; + + file << path << "/" << subDir << ww << "/z" << atomicNumberIon << "_" << matname << ".dat"; + G4String fileName = G4String(file.str().c_str()); + + std::ifstream ifilestream(fileName); + + if (! ifilestream.is_open()) { return false; } auto* physicsVector = new G4PhysicsFreeVector(true); - if( !physicsVector -> Retrieve(ifilestream, true) ) { - - ifilestream.close(); - return false; + if (! physicsVector->Retrieve(ifilestream, true)) { + ifilestream.close(); + return false; } - physicsVector -> ScaleVector( MeV, MeV * cm2 /( 0.001 * g) ); - physicsVector -> FillSecondDerivatives(); + physicsVector->ScaleVector(MeV, MeV * cm2 / (0.001 * g)); + physicsVector->FillSecondDerivatives(); // Retrieved vector is added to material store - if( !AddPhysicsVector(physicsVector, atomicNumberIon, matname) ) { - delete physicsVector; - ifilestream.close(); - return false; + if (! AddPhysicsVector(physicsVector, atomicNumberIon, matname)) { + delete physicsVector; + ifilestream.close(); + return false; } ifilestream.close(); @@ -359,53 +334,47 @@ G4bool G4IonStoppingData::BuildPhysicsVector( // ######################################################################### -G4bool G4IonStoppingData::BuildPhysicsVector( - G4int ZIon, // Atomic number of ion - G4int ZElem // Atomic number of elemental material - ) +G4bool G4IonStoppingData::BuildPhysicsVector(G4int ZIon, // Atomic number of ion + G4int ZElem // Atomic number of elemental material +) { - if(IsApplicable(ZIon, ZElem)) - { + if (IsApplicable(ZIon, ZElem)) { return true; } const char* path = G4FindDataDir("G4LEDATA"); - if(path == nullptr) - { - G4Exception("G4IonStoppingData::BuildPhysicsVector()", "mat522", - FatalException, "G4LEDATA environment variable not set"); + if (path == nullptr) { + G4Exception("G4IonStoppingData::BuildPhysicsVector()", "mat522", FatalException, + "G4LEDATA environment variable not set"); return false; } std::ostringstream file; - G4String ww = (fICRU90 && ZIon <= 18 && - (ZElem == 1 || ZElem == 6 || - ZElem == 7 || ZElem == 8)) ? "90" : "73"; - - file << path << "/" << subDir << ww << "/z" - << ZIon << "_" << ZElem << ".dat"; - - G4String fileName = G4String( file.str().c_str() ); - std::ifstream ifilestream( fileName ); - - if(!ifilestream.is_open()) - { + G4String ww = + (fICRU90 && ZIon <= 18 && (ZElem == 1 || ZElem == 6 || ZElem == 7 || ZElem == 8)) ? "90" : "73"; + + file << path << "/" << subDir << ww << "/z" << ZIon << "_" << ZElem << ".dat"; + + G4String fileName = G4String(file.str().c_str()); + std::ifstream ifilestream(fileName); + + if (! ifilestream.is_open()) { return false; } auto* physicsVector = new G4PhysicsFreeVector(true); - if( !physicsVector -> Retrieve(ifilestream, true) ) { - ifilestream.close(); - return false; + if (! physicsVector->Retrieve(ifilestream, true)) { + ifilestream.close(); + return false; } - physicsVector -> ScaleVector( MeV, MeV * cm2 /( 0.001 * g) ); - physicsVector -> FillSecondDerivatives(); + physicsVector->ScaleVector(MeV, MeV * cm2 / (0.001 * g)); + physicsVector->FillSecondDerivatives(); // Retrieved vector is added to material store - if( !AddPhysicsVector(physicsVector, ZIon, ZElem) ) { - delete physicsVector; - ifilestream.close(); - return false; + if (! AddPhysicsVector(physicsVector, ZIon, ZElem)) { + delete physicsVector; + ifilestream.close(); + return false; } ifilestream.close(); @@ -414,25 +383,24 @@ G4bool G4IonStoppingData::BuildPhysicsVector( // ######################################################################### -void G4IonStoppingData::ClearTable() { - auto iterMat = dedxMapMaterials.begin(); +void G4IonStoppingData::ClearTable() +{ + auto iterMat = dedxMapMaterials.begin(); auto iterMat_end = dedxMapMaterials.end(); - for(;iterMat != iterMat_end; iterMat++) { - - G4PhysicsVector* vec = iterMat -> second; + for (; iterMat != iterMat_end; iterMat++) { + G4PhysicsVector* vec = iterMat->second; delete vec; } dedxMapMaterials.clear(); - auto iterElem = dedxMapElements.begin(); + auto iterElem = dedxMapElements.begin(); auto iterElem_end = dedxMapElements.end(); - for(;iterElem != iterElem_end; iterElem++) { - - G4PhysicsVector* vec = iterElem -> second; + for (; iterElem != iterElem_end; iterElem++) { + G4PhysicsVector* vec = iterElem->second; delete vec; } @@ -442,54 +410,45 @@ void G4IonStoppingData::ClearTable() { // ######################################################################### -void G4IonStoppingData::DumpMap() { - auto iterMat = dedxMapMaterials.begin(); +void G4IonStoppingData::DumpMap() +{ + auto iterMat = dedxMapMaterials.begin(); auto iterMat_end = dedxMapMaterials.end(); - G4cout << std::setw(15) << std::right - << "Atomic nmb ion" - << std::setw(25) << std::right - << "Material name" - << G4endl; + G4cout << std::setw(15) << std::right << "Atomic nmb ion" << std::setw(25) << std::right + << "Material name" << G4endl; - for(;iterMat != iterMat_end; iterMat++) { - G4IonDEDXKeyMat key = iterMat -> first; - G4PhysicsVector* physicsVector = iterMat -> second; + for (; iterMat != iterMat_end; iterMat++) { + G4IonDEDXKeyMat key = iterMat->first; + G4PhysicsVector* physicsVector = iterMat->second; - G4int atomicNumberIon = key.first; - G4String matIdentifier = key.second; + G4int atomicNumberIon = key.first; + G4String matIdentifier = key.second; - if(physicsVector != nullptr) - { - G4cout << std::setw(15) << std::right << atomicNumberIon - << std::setw(25) << std::right << matIdentifier << G4endl; - } + if (physicsVector != nullptr) { + G4cout << std::setw(15) << std::right << atomicNumberIon << std::setw(25) << std::right + << matIdentifier << G4endl; + } } - auto iterElem = dedxMapElements.begin(); + auto iterElem = dedxMapElements.begin(); auto iterElem_end = dedxMapElements.end(); - G4cout << std::setw(15) << std::right - << "Atomic nmb ion" - << std::setw(25) << std::right - << "Atomic nmb material" - << G4endl; + G4cout << std::setw(15) << std::right << "Atomic nmb ion" << std::setw(25) << std::right + << "Atomic nmb material" << G4endl; - for(;iterElem != iterElem_end; iterElem++) { - G4IonDEDXKeyElem key = iterElem -> first; - G4PhysicsVector* physicsVector = iterElem -> second; + for (; iterElem != iterElem_end; iterElem++) { + G4IonDEDXKeyElem key = iterElem->first; + G4PhysicsVector* physicsVector = iterElem->second; - G4int atomicNumberIon = key.first; - G4int atomicNumberElem = key.second; + G4int atomicNumberIon = key.first; + G4int atomicNumberElem = key.second; - if(physicsVector != nullptr) - { - G4cout << std::setw(15) << std::right << atomicNumberIon - << std::setw(25) << std::right << atomicNumberElem << G4endl; - } + if (physicsVector != nullptr) { + G4cout << std::setw(15) << std::right << atomicNumberIon << std::setw(25) << std::right + << atomicNumberElem << G4endl; + } } - } // ######################################################################### - diff --git a/source/materials/src/G4IonisParamElm.cc b/source/materials/src/G4IonisParamElm.cc index 2d7237e3fa9..fcadd8805f0 100644 --- a/source/materials/src/G4IonisParamElm.cc +++ b/source/materials/src/G4IonisParamElm.cc @@ -22,28 +22,22 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -// + // 09-07-98, data moved from G4Element. M.Maire -// 22-11-00, tabulation of ionisation potential from +// 22-11-00, tabulation of ionisation potential from // the ICRU Report N#37. V.Ivanchenko // 08-03-01, correct handling of fShellCorrectionVector. M.Maire // 17-10-02, Fix excitation energy interpolation. V.Ivanchenko -// 06-09-04, Update calculated values after any change of ionisation +// 06-09-04, Update calculated values after any change of ionisation // potential change. V.Ivanchenko // 29-04-10, Using G4Pow and mean ionisation energy from NIST V.Ivanchenko // 27.10.11: new scheme for G4Exception (mma) -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... #include "G4IonisParamElm.hh" + #include "G4NistManager.hh" -#include "G4Pow.hh" #include "G4PhysicalConstants.hh" +#include "G4Pow.hh" #include "G4SystemOfUnits.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... @@ -52,19 +46,18 @@ G4IonisParamElm::G4IonisParamElm(G4double AtomNumber) { G4int Z = G4lrint(AtomNumber); if (Z < 1) { - G4Exception("G4IonisParamElm::G4IonisParamElm()", "mat501", FatalException, - "It is not allowed to create an Element with Z<1"); + G4Exception("G4IonisParamElm::G4IonisParamElm()", "mat501", FatalException, + "It is not allowed to create an Element with Z<1"); } G4Pow* g4pow = G4Pow::GetInstance(); // some basic functions of the atomic number - fZ = Z; - fZ3 = g4pow->Z13(Z); - fZZ3 = fZ3*g4pow->Z13(Z+1); - flogZ3 = g4pow->logZ(Z)/3.; - - fMeanExcitationEnergy = - G4NistManager::Instance()->GetMeanIonisationEnergy(Z); + fZ = Z; + fZ3 = g4pow->Z13(Z); + fZZ3 = fZ3 * g4pow->Z13(Z + 1); + flogZ3 = g4pow->logZ(Z) / 3.; + + fMeanExcitationEnergy = G4NistManager::Instance()->GetMeanIonisationEnergy(Z); // compute parameters for ion transport // The aproximation from: @@ -74,8 +67,11 @@ G4IonisParamElm::G4IonisParamElm(G4double AtomNumber) // Fast ions or hadrons G4int iz = Z - 1; - if(91 < iz) { iz = 91; } + if (91 < iz) { + iz = 91; + } + // clang-format off static const G4double vFermi[92] = { 1.0309, 0.15976, 0.59782, 1.0781, 1.0486, 1.0, 1.058, 0.93942, 0.74562, 0.3424, 0.45259, 0.71074, 0.90519, 0.97411, 0.97184, 0.89852, 0.70827, 0.39816, 0.36552, 0.62712, @@ -99,53 +95,35 @@ G4IonisParamElm::G4IonisParamElm(G4double AtomNumber) 1.08, 1.08, 1.09, 1.09, 1.1, 1.11, 1.12, 1.13, 1.14, 1.15, 1.17, 1.2, 1.18, 1.17, 1.17, 1.16, 1.16, 1.16, 1.16, 1.16, 1.16, 1.16} ; + // clang-format on - fVFermi = vFermi[iz]; + fVFermi = vFermi[iz]; fLFactor = lFactor[iz]; // obsolete parameters for ionisation - fTau0 = 0.1*fZ3*MeV/proton_mass_c2; - fTaul = 2.*MeV/proton_mass_c2; + fTau0 = 0.1 * fZ3 * MeV / proton_mass_c2; + fTaul = 2. * MeV / proton_mass_c2; // compute the Bethe-Bloch formula for energy = fTaul*particle mass - G4double rate = fMeanExcitationEnergy/electron_mass_c2 ; - G4double w = fTaul*(fTaul+2.) ; - fBetheBlochLow = (fTaul+1.)*(fTaul+1.)*std::log(2.*w/rate)/w - 1. ; - fBetheBlochLow = 2.*fZ*twopi_mc2_rcl2*fBetheBlochLow ; - - fClow = std::sqrt(fTaul)*fBetheBlochLow; - fAlow = 6.458040 * fClow/fTau0; - G4double Taum = 0.035*fZ3*MeV/proton_mass_c2; - fBlow =-3.229020*fClow/(fTau0*std::sqrt(Taum)); - - // Shell correction parameterization - fShellCorrectionVector = new G4double[3]; //[3] - rate = 0.001*fMeanExcitationEnergy/eV; - G4double rate2 = rate*rate; - /* - fShellCorrectionVector[0] = ( 1.10289e5 + 5.14781e8*rate)*rate2 ; - fShellCorrectionVector[1] = ( 7.93805e3 - 2.22565e7*rate)*rate2 ; - fShellCorrectionVector[2] = (-9.92256e1 + 2.10823e5*rate)*rate2 ; - */ - fShellCorrectionVector[0] = ( 0.422377 + 3.858019*rate)*rate2 ; - fShellCorrectionVector[1] = ( 0.0304043 - 0.1667989*rate)*rate2 ; - fShellCorrectionVector[2] = (-0.00038106 + 0.00157955*rate)*rate2 ; -} + G4double rate = fMeanExcitationEnergy / electron_mass_c2; + G4double w = fTaul * (fTaul + 2.); + fBetheBlochLow = (fTaul + 1.) * (fTaul + 1.) * std::log(2. * w / rate) / w - 1.; + fBetheBlochLow = 2. * fZ * twopi_mc2_rcl2 * fBetheBlochLow; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... + fClow = std::sqrt(fTaul) * fBetheBlochLow; + fAlow = 6.458040 * fClow / fTau0; + G4double Taum = 0.035 * fZ3 * MeV / proton_mass_c2; + fBlow = -3.229020 * fClow / (fTau0 * std::sqrt(Taum)); -// Fake default constructor - sets only member data and allocates memory -// for usage restricted to object persistency - -G4IonisParamElm::G4IonisParamElm(__void__&) - : fShellCorrectionVector(nullptr) -{ - fZ=fZ3=fZZ3=flogZ3=fTau0=fTaul=fBetheBlochLow=fAlow=fBlow=fClow - =fMeanExcitationEnergy=fVFermi=fLFactor=0.0; + // Shell correction parameterization + fShellCorrectionVector = new G4double[3]; //[3] + rate = 0.001 * fMeanExcitationEnergy / eV; + G4double rate2 = rate * rate; + fShellCorrectionVector[0] = (0.422377 + 3.858019 * rate) * rate2; + fShellCorrectionVector[1] = (0.0304043 - 0.1667989 * rate) * rate2; + fShellCorrectionVector[2] = (-0.00038106 + 0.00157955 * rate) * rate2; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... G4IonisParamElm::~G4IonisParamElm() { delete[] fShellCorrectionVector; } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... diff --git a/source/materials/src/G4IonisParamMat.cc b/source/materials/src/G4IonisParamMat.cc index 0dbe89915aa..135bce25a8a 100644 --- a/source/materials/src/G4IonisParamMat.cc +++ b/source/materials/src/G4IonisParamMat.cc @@ -22,55 +22,53 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... // 09-07-98, data moved from G4Material, M.Maire // 18-07-98, bug corrected in ComputeDensityEffect() for gas // 16-01-01, bug corrected in ComputeDensityEffect() E100eV (L.Urban) // 08-02-01, fShellCorrectionVector correctly handled (mma) // 28-10-02, add setMeanExcitationEnergy (V.Ivanchenko) -// 06-09-04, factor 2 to shell correction term (V.Ivanchenko) +// 06-09-04, factor 2 to shell correction term (V.Ivanchenko) // 10-05-05, add a missing coma in FindMeanExcitationEnergy() - Bug#746 (mma) // 27-09-07, add computation of parameters for ions (V.Ivanchenko) // 04-03-08, remove reference to G4NistManager. Add fBirks constant (mma) // 30-10-09, add G4DensityEffectData class and density effect computation (VI) -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... - #include "G4IonisParamMat.hh" -#include "G4Material.hh" -#include "G4DensityEffectData.hh" + #include "G4AtomicShells.hh" -#include "G4NistManager.hh" -#include "G4Pow.hh" -#include "G4Log.hh" +#include "G4AutoLock.hh" +#include "G4DensityEffectData.hh" #include "G4Exp.hh" +#include "G4Log.hh" +#include "G4Material.hh" +#include "G4NistManager.hh" #include "G4PhysicalConstants.hh" +#include "G4Pow.hh" #include "G4SystemOfUnits.hh" -#include "G4AutoLock.hh" G4DensityEffectData* G4IonisParamMat::fDensityData = nullptr; namespace { - G4Mutex ionisMutex = G4MUTEX_INITIALIZER; +G4Mutex ionisMutex = G4MUTEX_INITIALIZER; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -G4IonisParamMat::G4IonisParamMat(const G4Material* material) - : fMaterial(material) +G4IonisParamMat::G4IonisParamMat(const G4Material* material) : fMaterial(material) { fBirks = 0.; fMeanEnergyPerIon = 0.0; - twoln10 = 2.*G4Pow::GetInstance()->logZ(10); + twoln10 = 2. * G4Pow::GetInstance()->logZ(10); // minimal set of default parameters for density effect fCdensity = 0.0; fD0density = 0.0; fAdjustmentFactor = 1.0; - if(fDensityData == nullptr) { fDensityData = new G4DensityEffectData(); } + if (fDensityData == nullptr) { + fDensityData = new G4DensityEffectData(); + } fDensityEffectCalc = nullptr; // compute parameters @@ -82,48 +80,10 @@ G4IonisParamMat::G4IonisParamMat(const G4Material* material) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -// Fake default constructor - sets only member data and allocates memory -// for usage restricted to object persistency - -G4IonisParamMat::G4IonisParamMat(__void__&) - : fMaterial(nullptr), fShellCorrectionVector(nullptr) -{ - fMeanExcitationEnergy = 0.0; - fLogMeanExcEnergy = 0.0; - fTaul = 0.0; - fCdensity = 0.0; - fMdensity = 0.0; - fAdensity = 0.0; - fX0density = 0.0; - fX1density = 0.0; - fD0density = 0.0; - fPlasmaEnergy = 0.0; - fAdjustmentFactor = 0.0; - fF1fluct = 0.0; - fF2fluct = 0.0; - fEnergy1fluct = 0.0; - fLogEnergy1fluct = 0.0; - fEnergy2fluct = 0.0; - fLogEnergy2fluct = 0.0; - fEnergy0fluct = 0.0; - fRateionexcfluct = 0.0; - fZeff = 0.0; - fFermiEnergy = 0.0; - fLfactor = 0.0; - fInvA23 = 0.0; - fBirks = 0.0; - fMeanEnergyPerIon = 0.0; - twoln10 = 2.*G4Pow::GetInstance()->logZ(10); - - fDensityEffectCalc = nullptr; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... - G4IonisParamMat::~G4IonisParamMat() { delete fDensityEffectCalc; - delete [] fShellCorrectionVector; + delete[] fShellCorrectionVector; delete fDensityData; fDensityData = nullptr; fShellCorrectionVector = nullptr; @@ -134,15 +94,18 @@ G4IonisParamMat::~G4IonisParamMat() G4double G4IonisParamMat::GetDensityCorrection(G4double x) const { - // x = log10(beta*gamma) + // x = log10(beta*gamma) G4double y = 0.0; - if(x < fX0density) { - if(fD0density > 0.0) { y = fD0density*G4Exp(twoln10*(x - fX0density)); } - } else if(x >= fX1density) { - y = twoln10*x - fCdensity; - } else { - y = twoln10*x - fCdensity + - fAdensity*G4Exp(G4Log(fX1density - x)*fMdensity); + if (x < fX0density) { + if (fD0density > 0.0) { + y = fD0density * G4Exp(twoln10 * (x - fX0density)); + } + } + else if (x >= fX1density) { + y = twoln10 * x - fCdensity; + } + else { + y = twoln10 * x - fCdensity + fAdensity * G4Exp(G4Log(fX1density - x) * fMdensity); } return y; } @@ -157,55 +120,52 @@ void G4IonisParamMat::ComputeMeanParameters() size_t nElements = fMaterial->GetNumberOfElements(); const G4ElementVector* elmVector = fMaterial->GetElementVector(); const G4double* nAtomsPerVolume = fMaterial->GetVecNbOfAtomsPerVolume(); - + fMeanExcitationEnergy = FindMeanExcitationEnergy(fMaterial); fLogMeanExcEnergy = 0.; // Chemical formula defines mean excitation energy - if(fMeanExcitationEnergy > 0.0) { + if (fMeanExcitationEnergy > 0.0) { fLogMeanExcEnergy = G4Log(fMeanExcitationEnergy); - // Compute average - } else { - for (size_t i=0; i < nElements; ++i) { + // Compute average + } + else { + for (size_t i = 0; i < nElements; ++i) { const G4Element* elm = (*elmVector)[i]; - fLogMeanExcEnergy += nAtomsPerVolume[i]*elm->GetZ() - *G4Log(elm->GetIonisation()->GetMeanExcitationEnergy()); + fLogMeanExcEnergy += + nAtomsPerVolume[i] * elm->GetZ() * G4Log(elm->GetIonisation()->GetMeanExcitationEnergy()); } fLogMeanExcEnergy /= fMaterial->GetTotNbOfElectPerVolume(); fMeanExcitationEnergy = G4Exp(fLogMeanExcEnergy); } - fShellCorrectionVector = new G4double[3]; + fShellCorrectionVector = new G4double[3]; - for (G4int j=0; j<=2; ++j) - { + for (G4int j = 0; j <= 2; ++j) { fShellCorrectionVector[j] = 0.; - for (size_t k=0; kGetIonisation()->GetShellCorrectionVector())[j]; + for (size_t k = 0; k < nElements; ++k) { + fShellCorrectionVector[j] += + nAtomsPerVolume[k] * (((*elmVector)[k])->GetIonisation()->GetShellCorrectionVector())[j]; } - fShellCorrectionVector[j] *= 2.0/fMaterial->GetTotNbOfElectPerVolume(); - } + fShellCorrectionVector[j] *= 2.0 / fMaterial->GetTotNbOfElectPerVolume(); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -G4DensityEffectData* G4IonisParamMat::GetDensityEffectData() -{ - return fDensityData; -} +G4DensityEffectData* G4IonisParamMat::GetDensityEffectData() { return fDensityData; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... - -void G4IonisParamMat::ComputeDensityEffectParameters() + +void G4IonisParamMat::ComputeDensityEffectParameters() { G4State State = fMaterial->GetState(); G4double density = fMaterial->GetDensity(); - if(nullptr == fDensityData) { + if (nullptr == fDensityData) { G4AutoLock l(&ionisMutex); - if(nullptr == fDensityData) { + if (nullptr == fDensityData) { fDensityData = new G4DensityEffectData(); } l.unlock(); @@ -215,72 +175,80 @@ void G4IonisParamMat::ComputeDensityEffectParameters() // R.M. Sternheimer, Atomic Data and Nuclear Data Tables, 30: 261 (1984) // or is assign to one of data set in this table G4int idx = fDensityData->GetIndex(fMaterial->GetName()); - G4int nelm= (G4int)fMaterial->GetNumberOfElements(); - G4int Z0 = ((*(fMaterial->GetElementVector()))[0])->GetZasInt(); + auto nelm = (G4int)fMaterial->GetNumberOfElements(); + G4int Z0 = ((*(fMaterial->GetElementVector()))[0])->GetZasInt(); const G4Material* bmat = fMaterial->GetBaseMaterial(); G4NistManager* nist = G4NistManager::Instance(); - // arbitrary empirical limits + // arbitrary empirical limits // parameterisation with very different density is not applicable static const G4double corrmax = 1.; static const G4double massfracmax = 0.9; - // for simple non-NIST materials + // for simple non-NIST materials G4double corr = 0.0; - if(idx < 0 && 1 == nelm) { - G4int z = (1 == Z0 && State == kStateLiquid) ? 0 : Z0; + if (idx < 0 && 1 == nelm) { + G4int z = (1 == Z0 && State == kStateLiquid) ? 0 : Z0; idx = fDensityData->GetElementIndex(z); // Correction for base material or for non-nominal density // Except cases of very different density defined in user code - if(idx >= 0 && 0 < z) { + if (idx >= 0 && 0 < z) { G4double dens = nist->GetNominalDensity(Z0); - if(dens <= 0.0) { idx = -1; } + if (dens <= 0.0) { + idx = -1; + } else { - corr = G4Log(dens/density); - if(std::abs(corr) > corrmax) { idx = -1; } + corr = G4Log(dens / density); + if (std::abs(corr) > corrmax) { + idx = -1; + } } } } // for base material case - if(idx < 0 && nullptr != bmat) { + if (idx < 0 && nullptr != bmat) { idx = fDensityData->GetIndex(bmat->GetName()); - if(idx >= 0) { - corr = G4Log(bmat->GetDensity()/density); - if(std::abs(corr) > corrmax) { idx = -1; } + if (idx >= 0) { + corr = G4Log(bmat->GetDensity() / density); + if (std::abs(corr) > corrmax) { + idx = -1; + } } } - // for compound non-NIST materials with one element dominating - if(idx < 0 && 1 < nelm) { + // for compound non-NIST materials with one element dominating + if (idx < 0 && 1 < nelm) { const G4double tot = fMaterial->GetTotNbOfAtomsPerVolume(); - for(G4int i=0; iGetVecNbOfAtomsPerVolume()[i]/tot; - if(frac > massfracmax) { + for (G4int i = 0; i < nelm; ++i) { + const G4double frac = fMaterial->GetVecNbOfAtomsPerVolume()[i] / tot; + if (frac > massfracmax) { Z0 = ((*(fMaterial->GetElementVector()))[i])->GetZasInt(); - idx = fDensityData->GetElementIndex(Z0); - G4double dens = nist->GetNominalDensity(Z0); - if(idx >= 0 && dens > 0.0) { - corr = G4Log(dens/density); - if(std::abs(corr) > corrmax) { idx = -1; } - else { break; } - } + idx = fDensityData->GetElementIndex(Z0); + G4double dens = nist->GetNominalDensity(Z0); + if (idx >= 0 && dens > 0.0) { + corr = G4Log(dens / density); + if (std::abs(corr) > corrmax) { + idx = -1; + } + else { + break; + } + } } } } - //G4cout<<"DensityEffect for "<GetName()<<" "<< idx << G4endl; - - if(idx >= 0) { + if (idx >= 0) { // Take parameters for the density effect correction from - // R.M. Sternheimer et al. Density Effect For The Ionization Loss - // of Charged Particles in Various Substances. - // Atom. Data Nucl. Data Tabl. 30 (1984) 261-271. + // R.M. Sternheimer et al. Density Effect For The Ionization Loss + // of Charged Particles in Various Substances. + // Atom. Data Nucl. Data Tabl. 30 (1984) 261-271. - fCdensity = fDensityData->GetCdensity(idx); - fMdensity = fDensityData->GetMdensity(idx); - fAdensity = fDensityData->GetAdensity(idx); + fCdensity = fDensityData->GetCdensity(idx); + fMdensity = fDensityData->GetMdensity(idx); + fAdensity = fDensityData->GetAdensity(idx); fX0density = fDensityData->GetX0density(idx); fX1density = fDensityData->GetX1density(idx); fD0density = fDensityData->GetDelta0density(idx); @@ -288,121 +256,126 @@ void G4IonisParamMat::ComputeDensityEffectParameters() fAdjustmentFactor = fDensityData->GetAdjustmentFactor(idx); // parameter C is computed and not taken from Sternheimer tables - //fCdensity = 1. + 2*G4Log(fMeanExcitationEnergy/fPlasmaEnergy); - //G4cout << "IonisParamMat: " << fMaterial->GetName() + // fCdensity = 1. + 2*G4Log(fMeanExcitationEnergy/fPlasmaEnergy); + // G4cout << "IonisParamMat: " << fMaterial->GetName() // << " Cst= " << Cdensity << " C= " << fCdensity << G4endl; // correction on nominal density - fCdensity += corr; - fX0density += corr/twoln10; - fX1density += corr/twoln10; - - } else { - - static const G4double Cd2 = - 4*CLHEP::pi*CLHEP::hbarc_squared*CLHEP::classic_electr_radius; - fPlasmaEnergy = std::sqrt(Cd2*fMaterial->GetTotNbOfElectPerVolume()); + fCdensity += corr; + fX0density += corr / twoln10; + fX1density += corr / twoln10; + } + else { + static const G4double Cd2 = 4 * CLHEP::pi * CLHEP::hbarc_squared * CLHEP::classic_electr_radius; + fPlasmaEnergy = std::sqrt(Cd2 * fMaterial->GetTotNbOfElectPerVolume()); // Compute parameters for the density effect correction in DE/Dx formula. // The parametrization is from R.M. Sternheimer, Phys. Rev.B,3:3681 (1971) G4int icase; - - fCdensity = 1. + 2*G4Log(fMeanExcitationEnergy/fPlasmaEnergy); + + fCdensity = 1. + 2 * G4Log(fMeanExcitationEnergy / fPlasmaEnergy); // // condensed materials - // + // if ((State == kStateSolid) || (State == kStateLiquid)) { + static const G4double E100eV = 100. * CLHEP::eV; + static const G4double ClimiS[] = {3.681, 5.215}; + static const G4double X0valS[] = {1.0, 1.5}; + static const G4double X1valS[] = {2.0, 3.0}; - static const G4double E100eV = 100.*CLHEP::eV; - static const G4double ClimiS[] = {3.681 , 5.215 }; - static const G4double X0valS[] = {1.0 , 1.5 }; - static const G4double X1valS[] = {2.0 , 3.0 }; - - if(fMeanExcitationEnergy < E100eV) { icase = 0; } - else { icase = 1; } + if (fMeanExcitationEnergy < E100eV) { + icase = 0; + } + else { + icase = 1; + } - if(fCdensity < ClimiS[icase]) { fX0density = 0.2; } - else { fX0density = 0.326*fCdensity - X0valS[icase]; } + if (fCdensity < ClimiS[icase]) { + fX0density = 0.2; + } + else { + fX0density = 0.326 * fCdensity - X0valS[icase]; + } - fX1density = X1valS[icase]; fMdensity = 3.0; - - //special: Hydrogen + fX1density = X1valS[icase]; + fMdensity = 3.0; + + // special: Hydrogen if (1 == nelm && 1 == Z0) { - fX0density = 0.425; fX1density = 2.0; fMdensity = 5.949; + fX0density = 0.425; + fX1density = 2.0; + fMdensity = 5.949; } - } else { + } + else { // // gases // fMdensity = 3.; fX1density = 4.0; - if(fCdensity <= 10.) { - fX0density = 1.6; - } else if(fCdensity <= 10.5) { - fX0density = 1.7; - } else if(fCdensity <= 11.0) { - fX0density = 1.8; - } else if(fCdensity <= 11.5) { - fX0density = 1.9; - } else if(fCdensity <= 12.25) { - fX0density = 2.0; - } else if(fCdensity <= 13.804) { - fX0density = 2.0; - fX1density = 5.0; - } else { - fX0density = 0.326*fCdensity-2.5; - fX1density = 5.0; + if (fCdensity <= 10.) { + fX0density = 1.6; + } + else if (fCdensity <= 10.5) { + fX0density = 1.7; + } + else if (fCdensity <= 11.0) { + fX0density = 1.8; + } + else if (fCdensity <= 11.5) { + fX0density = 1.9; + } + else if (fCdensity <= 12.25) { + fX0density = 2.0; } - - //special: Hydrogen + else if (fCdensity <= 13.804) { + fX0density = 2.0; + fX1density = 5.0; + } + else { + fX0density = 0.326 * fCdensity - 2.5; + fX1density = 5.0; + } + + // special: Hydrogen if (1 == nelm && 1 == Z0) { - fX0density = 1.837; fX1density = 3.0; fMdensity = 4.754; + fX0density = 1.837; + fX1density = 3.0; + fMdensity = 4.754; } - - //special: Helium + + // special: Helium if (1 == nelm && 2 == Z0) { - fX0density = 2.191; fX1density = 3.0; fMdensity = 3.297; + fX0density = 2.191; + fX1density = 3.0; + fMdensity = 3.297; } } } // change parameters if the gas is not in STP. - // For the correction the density(STP) is needed. - // Density(STP) is calculated here : - - if (State == kStateGas) { + // For the correction the density(STP) is needed. + // Density(STP) is calculated here : + + if (State == kStateGas) { G4double Pressure = fMaterial->GetPressure(); G4double Temp = fMaterial->GetTemperature(); - - G4double DensitySTP = density*STP_Pressure*Temp/(Pressure*NTP_Temperature); - - G4double ParCorr = G4Log(density/DensitySTP); - - fCdensity -= ParCorr; - fX0density -= ParCorr/twoln10; - fX1density -= ParCorr/twoln10; + + G4double DensitySTP = density * STP_Pressure * Temp / (Pressure * NTP_Temperature); + + G4double ParCorr = G4Log(density / DensitySTP); + + fCdensity -= ParCorr; + fX0density -= ParCorr / twoln10; + fX1density -= ParCorr / twoln10; } - // fAdensity parameter can be fixed for not conductive materials - if(0.0 == fD0density) { - G4double Xa = fCdensity/twoln10; - fAdensity = twoln10*(Xa-fX0density) - /std::pow((fX1density-fX0density),fMdensity); + // fAdensity parameter can be fixed for not conductive materials + if (0.0 == fD0density) { + G4double Xa = fCdensity / twoln10; + fAdensity = twoln10 * (Xa - fX0density) / std::pow((fX1density - fX0density), fMdensity); } - /* - G4cout << "G4IonisParamMat: density effect data for <" - << fMaterial->GetName() - << "> " << G4endl; - G4cout << "Eplasma(eV)= " << fPlasmaEnergy/eV - << " rho= " << fAdjustmentFactor - << " -C= " << fCdensity - << " x0= " << fX0density - << " x1= " << fX1density - << " a= " << fAdensity - << " m= " << fMdensity - << G4endl; - */ } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... @@ -410,21 +383,19 @@ void G4IonisParamMat::ComputeDensityEffectParameters() void G4IonisParamMat::ComputeFluctModel() { // compute parameters for the energy loss fluctuation model - // needs an 'effective Z' + // needs an 'effective Z' G4double Zeff = 0.; - for (size_t i=0; iGetNumberOfElements(); ++i) { - Zeff += (fMaterial->GetFractionVector())[i] - *((*(fMaterial->GetElementVector()))[i]->GetZ()); + for (size_t i = 0; i < fMaterial->GetNumberOfElements(); ++i) { + Zeff += (fMaterial->GetFractionVector())[i] * ((*(fMaterial->GetElementVector()))[i]->GetZ()); } - fF2fluct = (Zeff > 2.) ? 2./Zeff : 0.0; + fF2fluct = (Zeff > 2.) ? 2. / Zeff : 0.0; - fF1fluct = 1. - fF2fluct; - fEnergy2fluct = 10.*Zeff*Zeff*CLHEP::eV; + fF1fluct = 1. - fF2fluct; + fEnergy2fluct = 10. * Zeff * Zeff * CLHEP::eV; fLogEnergy2fluct = G4Log(fEnergy2fluct); - fLogEnergy1fluct = (fLogMeanExcEnergy - fF2fluct*fLogEnergy2fluct) - /fF1fluct; - fEnergy1fluct = G4Exp(fLogEnergy1fluct); - fEnergy0fluct = 10.*CLHEP::eV; + fLogEnergy1fluct = (fLogMeanExcEnergy - fF2fluct * fLogEnergy2fluct) / fF1fluct; + fEnergy1fluct = G4Exp(fLogEnergy1fluct); + fEnergy0fluct = 10. * CLHEP::eV; fRateionexcfluct = 0.4; } @@ -433,66 +404,65 @@ void G4IonisParamMat::ComputeFluctModel() void G4IonisParamMat::ComputeIonParameters() { // get elements in the actual material, - const G4ElementVector* theElementVector = fMaterial->GetElementVector() ; - const G4double* theAtomicNumDensityVector = - fMaterial->GetAtomicNumDensityVector() ; - const G4int NumberOfElements = (G4int)fMaterial->GetNumberOfElements() ; + const G4ElementVector* theElementVector = fMaterial->GetElementVector(); + const G4double* theAtomicNumDensityVector = fMaterial->GetAtomicNumDensityVector(); + const auto NumberOfElements = (G4int)fMaterial->GetNumberOfElements(); // loop for the elements in the material // to find out average values Z, vF, lF G4double z(0.0), vF(0.0), lF(0.0), a23(0.0); G4Pow* g4pow = G4Pow::GetInstance(); - if( 1 == NumberOfElements ) { + if (1 == NumberOfElements) { const G4Element* element = (*theElementVector)[0]; z = element->GetZ(); - vF= element->GetIonisation()->GetFermiVelocity(); - lF= element->GetIonisation()->GetLFactor(); - a23 = 1.0/g4pow->A23(element->GetN()); - - } else { + vF = element->GetIonisation()->GetFermiVelocity(); + lF = element->GetIonisation()->GetLFactor(); + a23 = 1.0 / g4pow->A23(element->GetN()); + } + else { G4double norm(0.0); - for (G4int iel=0; ielGetZ() * weight; - vF += element->GetIonisation()->GetFermiVelocity() * weight; - lF += element->GetIonisation()->GetLFactor() * weight; - a23 += weight/g4pow->A23(element->GetN()); + z += element->GetZ() * weight; + vF += element->GetIonisation()->GetFermiVelocity() * weight; + lF += element->GetIonisation()->GetLFactor() * weight; + a23 += weight / g4pow->A23(element->GetN()); } - z /= norm; - vF /= norm; - lF /= norm; + z /= norm; + vF /= norm; + lF /= norm; a23 /= norm; - } - fZeff = z; - fLfactor = lF; - fFermiEnergy = 25.*CLHEP::keV*vF*vF; - fInvA23 = a23; + } + fZeff = z; + fLfactor = lF; + fFermiEnergy = 25. * CLHEP::keV * vF * vF; + fInvA23 = a23; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... void G4IonisParamMat::SetMeanExcitationEnergy(G4double value) { - if(value == fMeanExcitationEnergy || value <= 0.0) { return; } + if (value == fMeanExcitationEnergy || value <= 0.0) { + return; + } if (G4NistManager::Instance()->GetVerbose() > 1) { - G4cout << "G4Material: Mean excitation energy is changed for " - << fMaterial->GetName() - << " Iold= " << fMeanExcitationEnergy/CLHEP::eV - << "eV; Inew= " << value/eV << " eV;" + G4cout << "G4Material: Mean excitation energy is changed for " << fMaterial->GetName() + << " Iold= " << fMeanExcitationEnergy / CLHEP::eV << "eV; Inew= " << value / eV << " eV;" << G4endl; } - + fMeanExcitationEnergy = value; // add corrections to density effect G4double newlog = G4Log(value); - G4double corr = 2*(newlog - fLogMeanExcEnergy); - fCdensity += corr; - fX0density += corr/twoln10; - fX1density += corr/twoln10; + G4double corr = 2 * (newlog - fLogMeanExcEnergy); + fCdensity += corr; + fX0density += corr / twoln10; + fX1density += corr / twoln10; // recompute parameters of fluctuation model fLogMeanExcEnergy = newlog; @@ -501,15 +471,14 @@ void G4IonisParamMat::SetMeanExcitationEnergy(G4double value) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -void G4IonisParamMat::SetDensityEffectParameters(G4double cd, G4double md, - G4double ad, G4double x0, - G4double x1, G4double d0) +void G4IonisParamMat::SetDensityEffectParameters( + G4double cd, G4double md, G4double ad, G4double x0, G4double x1, G4double d0) { - // no check on consistence of user parameters + // no check on consistence of user parameters G4AutoLock l(&ionisMutex); - fCdensity = cd; - fMdensity = md; - fAdensity = ad; + fCdensity = cd; + fMdensity = md; + fAdensity = ad; fX0density = x0; fX1density = x1; fD0density = d0; @@ -524,17 +493,17 @@ void G4IonisParamMat::SetDensityEffectParameters(const G4Material* bmat) G4MUTEXLOCK(&ionisMutex); #endif const G4IonisParamMat* ipm = bmat->GetIonisation(); - fCdensity = ipm->GetCdensity(); - fMdensity = ipm->GetMdensity(); - fAdensity = ipm->GetAdensity(); + fCdensity = ipm->GetCdensity(); + fMdensity = ipm->GetMdensity(); + fAdensity = ipm->GetAdensity(); fX0density = ipm->GetX0density(); fX1density = ipm->GetX1density(); fD0density = ipm->GetD0density(); - G4double corr = G4Log(bmat->GetDensity()/fMaterial->GetDensity()); - fCdensity += corr; - fX0density += corr/twoln10; - fX1density += corr/twoln10; + G4double corr = G4Log(bmat->GetDensity() / fMaterial->GetDensity()); + fCdensity += corr; + fX0density += corr / twoln10; + fX1density += corr / twoln10; #ifdef G4MULTITHREADED G4MUTEXUNLOCK(&ionisMutex); #endif @@ -544,18 +513,19 @@ void G4IonisParamMat::SetDensityEffectParameters(const G4Material* bmat) void G4IonisParamMat::ComputeDensityEffectOnFly(G4bool val) { - if(val) { - if(nullptr == fDensityEffectCalc) { + if (val) { + if (nullptr == fDensityEffectCalc) { G4int n = 0; - for(size_t i=0; iGetNumberOfElements(); ++i) { - const G4int Z = fMaterial->GetElement((G4int)i)->GetZasInt(); + for (size_t i = 0; i < fMaterial->GetNumberOfElements(); ++i) { + const G4int Z = fMaterial->GetElement((G4int)i)->GetZasInt(); n += G4AtomicShells::GetNumberOfShells(Z); } // The last level is the conduction level. If this is *not* a conductor, // make a dummy conductor level with zero electrons in it. fDensityEffectCalc = new G4DensityEffectCalculator(fMaterial, n); } - } else { + } + else { delete fDensityEffectCalc; fDensityEffectCalc = nullptr; } @@ -567,10 +537,9 @@ G4double G4IonisParamMat::FindMeanExcitationEnergy(const G4Material* mat) const { G4double res = 0.0; // data from density effect data - if(fDensityData != nullptr) - { + if (fDensityData != nullptr) { G4int idx = fDensityData->GetIndex(mat->GetName()); - if(idx >= 0) { + if (idx >= 0) { res = fDensityData->GetMeanIonisationPotential(idx); } } @@ -580,9 +549,9 @@ G4double G4IonisParamMat::FindMeanExcitationEnergy(const G4Material* mat) const // ICRU Report N#37, 1984 (energy in eV) // this value overwrites Density effect data G4String chFormula = mat->GetChemicalFormula(); - if(!chFormula.empty()) - { - static const size_t numberOfMolecula = 54; + if (! chFormula.empty()) { + static const size_t numberOfMolecula = 54; + // clang-format off static const G4String name[numberOfMolecula] = { // gas 0 - 12 "NH_3", "C_4H_10", "CO_2", "C_2H_6", "C_7H_16-Gas", @@ -594,14 +563,14 @@ G4double G4IonisParamMat::FindMeanExcitationEnergy(const G4Material* mat) const // liquid 13 - 39 "C_3H_6O", "C_6H_5NH_2", "C_6H_6", "C_4H_9OH", "CCl_4", - //"G4_ACETONE","G4_ANILINE","G4_BENZENE","G4_N-BUTYL_ALCOHOL","G4_CARBON_TETRACHLORIDE" + //"G4_ACETONE","G4_ANILINE","G4_BENZENE","G4_N-BUTYL_ALCOHOL","G4_CARBON_TETRACHLORIDE" "C_6H_5Cl", "CHCl_3", "C_6H_12", "C_6H_4Cl_2", "C_4Cl_2H_8O", //"G4_CHLOROBENZENE","G4_CHLOROFORM","G4_CYCLOHEXANE","G4_1,2-DICHLOROBENZENE", //"G4_DICHLORODIETHYL_ETHER" "C_2Cl_2H_4", "(C_2H_5)_2O", "C_2H_5OH", "C_3H_5(OH)_3","C_7H_16", //"G4_1,2-DICHLOROETHANE","G4_DIETHYL_ETHER","G4_ETHYL_ALCOHOL","G4_GLYCEROL","G4_N-HEPTANE" "C_6H_14", "CH_3OH", "C_6H_5NO_2","C_5H_12", "C_3H_7OH", - //"G4_N-HEXANE","G4_METHANOL","G4_NITROBENZENE","G4_N-PENTANE","G4_N-PROPYL_ALCOHOL", + //"G4_N-HEXANE","G4_METHANOL","G4_NITROBENZENE","G4_N-PENTANE","G4_N-PROPYL_ALCOHOL", "C_5H_5N", "C_8H_8", "C_2Cl_4", "C_7H_8", "C_2Cl_3H", //"G4_PYRIDINE","G4_POLYSTYRENE","G4_TETRACHLOROETHYLENE","G4_TOLUENE","G4_TRICHLOROETHYLENE" "H_2O", "C_8H_10", @@ -617,7 +586,7 @@ G4double G4IonisParamMat::FindMeanExcitationEnergy(const G4Material* mat) const "LiF", "Photo_Emulsion", "(C_2F_4)-Teflon", "SiO_2" // "G4_LITHIUM_FLUORIDE", "G4_PHOTO_EMULSION", "G4_TEFLON", "G4_SILICON_DIOXIDE" } ; - + static const G4double meanExcitation[numberOfMolecula] = { 53.7, 48.3, 85.0, 45.4, 49.2, @@ -635,16 +604,14 @@ G4double G4IonisParamMat::FindMeanExcitationEnergy(const G4Material* mat) const 74.0, 68.7, 65.1, 145.2, 166., 94.0, 331.0, 99.1, 139.2 }; + // clang-format on - for(size_t i=0; i etc.) correctly, P. Urban // 29.01.97: Forbidden to create Isotope with Z<1 or N - #include "G4Isotope.hh" + #include "G4NistManager.hh" #include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" +#include + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4IsotopeTable G4Isotope::theIsotopeTable; @@ -55,22 +50,22 @@ G4IsotopeTable G4Isotope::theIsotopeTable; // Create an isotope // -G4Isotope::G4Isotope(const G4String& Name,G4int Z,G4int N,G4double A,G4int il) +G4Isotope::G4Isotope(const G4String& Name, G4int Z, G4int N, G4double A, G4int il) : fName(Name), fZ(Z), fN(N), fA(A), fm(il) { - if (Z<1) { + if (Z < 1) { G4ExceptionDescription ed; ed << "Wrong Isotope " << Name << " Z= " << Z << G4endl; - G4Exception ("G4Isotope::G4Isotope()", "mat001", FatalException, ed); + G4Exception("G4Isotope::G4Isotope()", "mat001", FatalException, ed); } - if (N N= " << N << G4endl; - G4Exception ("G4Isotope::G4Isotope()", "mat002", FatalException, ed); + G4Exception("G4Isotope::G4Isotope()", "mat002", FatalException, ed); } - if (A<=0.0) { - fA = (G4NistManager::Instance()->GetAtomicMass(Z,N)) - *CLHEP::g/(CLHEP::mole*CLHEP::amu_c2); + if (A <= 0.0) { + fA = + (G4NistManager::Instance()->GetAtomicMass(Z, N)) * CLHEP::g / (CLHEP::mole * CLHEP::amu_c2); } theIsotopeTable.push_back(this); fIndexInTable = theIsotopeTable.size() - 1; @@ -78,78 +73,35 @@ G4Isotope::G4Isotope(const G4String& Name,G4int Z,G4int N,G4double A,G4int il) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -// Fake default constructor - sets only member data and allocates memory -// for usage restricted to object persistency - -G4Isotope::G4Isotope(__void__&) - : fZ(0), fN(0), fA(0), fm(0), fIndexInTable(0) -{ -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4Isotope::~G4Isotope() -{ - theIsotopeTable[fIndexInTable] = nullptr; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4Isotope::G4Isotope(G4Isotope& right) -{ - *this = right; - - //insert this new isotope in table - theIsotopeTable.push_back(this); - fIndexInTable = theIsotopeTable.size() - 1; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4Isotope & G4Isotope::operator=(const G4Isotope& right) -{ - if (this != &right) - { - fName = right.fName; - fZ = right.fZ; - fN = right.fN; - fA = right.fA; - fm = right.fm; - } - return *this; -} +G4Isotope::~G4Isotope() { theIsotopeTable[fIndexInTable] = nullptr; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool G4Isotope::operator==(const G4Isotope &right) const -{ - return (this == (G4Isotope *) &right); -} +G4bool G4Isotope::operator==(const G4Isotope& right) const { return (this == (G4Isotope*)&right); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool G4Isotope::operator!=(const G4Isotope &right) const -{ - return (this != (G4Isotope *) &right); -} +G4bool G4Isotope::operator!=(const G4Isotope& right) const { return (this != (G4Isotope*)&right); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... std::ostream& operator<<(std::ostream& flux, const G4Isotope* isotope) { std::ios::fmtflags mode = flux.flags(); - flux.setf(std::ios::fixed,std::ios::floatfield); + flux.setf(std::ios::fixed, std::ios::floatfield); G4long prec = flux.precision(3); - + + // clang-format off flux << " Isotope: " << std::setw(5) << isotope->fName << " Z = " << std::setw(2) << isotope->fZ << " N = " << std::setw(3) << isotope->fN << " A = " << std::setw(6) << std::setprecision(2) << (isotope->fA)/(g/mole) << " g/mole"; - - flux.precision(prec); - flux.setf(mode,std::ios::floatfield); + // clang-format on + + flux.precision(prec); + flux.setf(mode, std::ios::floatfield); return flux; } @@ -157,61 +109,47 @@ std::ostream& operator<<(std::ostream& flux, const G4Isotope* isotope) std::ostream& operator<<(std::ostream& flux, const G4Isotope& isotope) { - flux << &isotope; + flux << &isotope; return flux; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -std::ostream& operator<<(std::ostream& flux, G4IsotopeTable IsotopeTable) + +std::ostream& operator<<(std::ostream& flux, const G4IsotopeTable& IsotopeTable) { - //Dump info for all known isotopes - flux - << "\n***** Table : Nb of isotopes = " << IsotopeTable.size() - << " *****\n" << G4endl; + // Dump info for all known isotopes + flux << "\n***** Table : Nb of isotopes = " << IsotopeTable.size() << " *****\n" << G4endl; - for(auto& i : IsotopeTable) - { - flux << i << G4endl; - } + for (auto& i : IsotopeTable) { + flux << i << G4endl; + } - return flux; + return flux; } - + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -const G4IsotopeTable* G4Isotope::GetIsotopeTable() -{ - return &theIsotopeTable; -} +const G4IsotopeTable* G4Isotope::GetIsotopeTable() { return &theIsotopeTable; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -size_t G4Isotope::GetNumberOfIsotopes() -{ - return theIsotopeTable.size(); -} +size_t G4Isotope::GetNumberOfIsotopes() { return theIsotopeTable.size(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4Isotope* G4Isotope::GetIsotope(const G4String& isotopeName, G4bool warning) -{ +{ // search the isotope by its name - for(auto& J : theIsotopeTable) - { - if(J->GetName() == isotopeName) - { + for (auto& J : theIsotopeTable) { + if (J->GetName() == isotopeName) { return J; } - } - + } + // the isotope does not exist in the table if (warning) { - G4cout << "\n---> warning from G4Isotope::GetIsotope(). The isotope: " - << isotopeName << " does not exist in the table. Return NULL pointer." - << G4endl; + G4cout << "\n---> warning from G4Isotope::GetIsotope(). The isotope: " << isotopeName + << " does not exist in the table. Return NULL pointer." << G4endl; } return nullptr; } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/materials/src/G4LatticeLogical.cc b/source/materials/src/G4LatticeLogical.cc index d0c3bded13d..f2d10eb726e 100644 --- a/source/materials/src/G4LatticeLogical.cc +++ b/source/materials/src/G4LatticeLogical.cc @@ -22,206 +22,184 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// + /// \file materials/src/G4LatticeLogical.cc /// \brief Implementation of the G4LatticeLogical class -// -// + #include "G4LatticeLogical.hh" -#include "G4SystemOfUnits.hh" + #include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" + #include #include -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - G4LatticeLogical::G4LatticeLogical() - : verboseLevel(0), fVresTheta(0), fVresPhi(0), fDresTheta(0), fDresPhi(0), - fA(0), fB(0), fLDOS(0), fSTDOS(0), fFTDOS(0), - fBeta(0), fGamma(0), fLambda(0), fMu(0) { - for (G4int i=0; i<3; i++) { - for (G4int j=0; jMAXRES || pRes>MAXRES) { - G4cerr << "G4LatticeLogical::LoadMap exceeds maximum resolution of " - << MAXRES << " by " << MAXRES << ". terminating." << G4endl; - return false; //terminate if resolution out of bounds. +G4bool G4LatticeLogical::LoadMap(G4int tRes, G4int pRes, G4int polarizationState, G4String map) +{ + if (tRes > MAXRES || pRes > MAXRES) { + G4cerr << "G4LatticeLogical::LoadMap exceeds maximum resolution of " << MAXRES << " by " + << MAXRES << ". terminating." << G4endl; + return false; // terminate if resolution out of bounds. } std::ifstream fMapFile(map.data()); - if(!fMapFile.is_open()) - { + if (! fMapFile.is_open()) { return false; } G4double vgrp = 0.; - for (G4int theta = 0; theta> vgrp; - fMap[polarizationState][theta][phi] = vgrp * (m/s); + fMap[polarizationState][theta][phi] = vgrp * (m / s); } } - if(verboseLevel != 0) - { + if (verboseLevel != 0) { G4cout << "\nG4LatticeLogical::LoadMap(" << map << ") successful" - << " (Vg scalars " << tRes << " x " << pRes << " for polarization " - << polarizationState << ")." << G4endl; + << " (Vg scalars " << tRes << " x " << pRes << " for polarization " << polarizationState + << ")." << G4endl; } - fVresTheta=tRes; //store map dimensions - fVresPhi=pRes; + fVresTheta = tRes; // store map dimensions + fVresPhi = pRes; return true; } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - //////////////////////////////////// -//Load map of group velocity unit vectors +// Load map of group velocity unit vectors /////////////////////////////////// -G4bool G4LatticeLogical::Load_NMap(G4int tRes, G4int pRes, - G4int polarizationState, G4String map) { - if (tRes>MAXRES || pRes>MAXRES) { - G4cerr << "G4LatticeLogical::LoadMap exceeds maximum resolution of " - << MAXRES << " by " << MAXRES << ". terminating." << G4endl; - return false; //terminate if resolution out of bounds. +G4bool G4LatticeLogical::Load_NMap(G4int tRes, G4int pRes, G4int polarizationState, G4String map) +{ + if (tRes > MAXRES || pRes > MAXRES) { + G4cerr << "G4LatticeLogical::LoadMap exceeds maximum resolution of " << MAXRES << " by " + << MAXRES << ". terminating." << G4endl; + return false; // terminate if resolution out of bounds. } std::ifstream fMapFile(map.data()); - if(!fMapFile.is_open()) - { + if (! fMapFile.is_open()) { return false; } - G4double x,y,z; // Buffers to read coordinates from file + G4double x, y, z; // Buffers to read coordinates from file G4ThreeVector dir; - for (G4int theta = 0; theta> x >> y >> z; - dir.set(x,y,z); - fN_map[polarizationState][theta][phi] = dir.unit(); // Enforce unity + dir.set(x, y, z); + fN_map[polarizationState][theta][phi] = dir.unit(); // Enforce unity } } - if(verboseLevel != 0) - { + if (verboseLevel != 0) { G4cout << "\nG4LatticeLogical::Load_NMap(" << map << ") successful" - << " (Vdir " << tRes << " x " << pRes << " for polarization " - << polarizationState << ")." << G4endl; + << " (Vdir " << tRes << " x " << pRes << " for polarization " << polarizationState + << ")." << G4endl; } - fDresTheta=tRes; //store map dimensions - fDresPhi=pRes; + fDresTheta = tRes; // store map dimensions + fDresPhi = pRes; return true; } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -//Given the phonon wave vector k, phonon physical volume Vol -//and polarizationState(0=LON, 1=FT, 2=ST), -//returns phonon velocity in m/s +// Given the phonon wave vector k, phonon physical volume Vol +// and polarizationState(0=LON, 1=FT, 2=ST), +// returns phonon velocity in m/s -G4double G4LatticeLogical::MapKtoV(G4int polarizationState, - const G4ThreeVector& k) const { +G4double G4LatticeLogical::MapKtoV(G4int polarizationState, const G4ThreeVector& k) const +{ G4double theta, phi, tRes, pRes; - tRes=pi/fVresTheta; - pRes=twopi/fVresPhi; - - theta=k.getTheta(); - phi=k.getPhi(); + tRes = pi / fVresTheta; + pRes = twopi / fVresPhi; - if(phi < 0) - { + theta = k.getTheta(); + phi = k.getPhi(); + + if (phi < 0) { phi = phi + twopi; } - if(theta > pi) - { + if (theta > pi) { theta = theta - pi; } - G4double Vg = fMap[polarizationState][int(theta/tRes)][int(phi/pRes)]; + G4double Vg = fMap[polarizationState][int(theta / tRes)][int(phi / pRes)]; - if(Vg == 0){ - G4cout<<"\nFound v=0 for polarization "<1) { - G4cout << "G4LatticeLogical::MapKtoV theta,phi=" << theta << " " << phi - << " : ith,iph " << int(theta/tRes) << " " << int(phi/pRes) - << " : V " << Vg << G4endl; + if (verboseLevel > 1) { + G4cout << "G4LatticeLogical::MapKtoV theta,phi=" << theta << " " << phi << " : ith,iph " + << int(theta / tRes) << " " << int(phi / pRes) << " : V " << Vg << G4endl; } return Vg; } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -//Given the phonon wave vector k, phonon physical volume Vol -//and polarizationState(0=LON, 1=FT, 2=ST), -//returns phonon propagation direction as dimensionless unit vector +// Given the phonon wave vector k, phonon physical volume Vol +// and polarizationState(0=LON, 1=FT, 2=ST), +// returns phonon propagation direction as dimensionless unit vector -G4ThreeVector G4LatticeLogical::MapKtoVDir(G4int polarizationState, - const G4ThreeVector& k) const { +G4ThreeVector G4LatticeLogical::MapKtoVDir(G4int polarizationState, const G4ThreeVector& k) const +{ G4double theta, phi, tRes, pRes; - tRes=pi/(fDresTheta-1);//The summant "-1" is required:index=[0:array length-1] - pRes=2*pi/(fDresPhi-1); + tRes = pi / (fDresTheta - 1); // The summant "-1" is required:index=[0:array length-1] + pRes = 2 * pi / (fDresPhi - 1); - theta=k.getTheta(); - phi=k.getPhi(); + theta = k.getTheta(); + phi = k.getPhi(); - if(theta > pi) - { + if (theta > pi) { theta = theta - pi; } - //phi=[0 to 2 pi] in accordance with DMC //if(phi>pi/2) phi=phi-pi/2; - if(phi < 0) - { + // phi=[0 to 2 pi] in accordance with DMC //if(phi>pi/2) phi=phi-pi/2; + if (phi < 0) { phi = phi + 2 * pi; } - G4int iTheta = int(theta/tRes+0.5); - G4int iPhi = int(phi/pRes+0.5); + auto iTheta = int(theta / tRes + 0.5); + auto iPhi = int(phi / pRes + 0.5); - if (verboseLevel>1) { - G4cout << "G4LatticeLogical::MapKtoVDir theta,phi=" << theta << " " << phi - << " : ith,iph " << iTheta << " " << iPhi - << " : dir " << fN_map[polarizationState][iTheta][iPhi] << G4endl; + if (verboseLevel > 1) { + G4cout << "G4LatticeLogical::MapKtoVDir theta,phi=" << theta << " " << phi << " : ith,iph " + << iTheta << " " << iPhi << " : dir " << fN_map[polarizationState][iTheta][iPhi] + << G4endl; } return fN_map[polarizationState][iTheta][iPhi]; } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... // Dump structure in format compatible with reading back -void G4LatticeLogical::Dump(std::ostream& os) const { - os << "dyn " << fBeta << " " << fGamma << " " << fLambda << " " << fMu - << "\nscat " << fB << " decay " << fA - << "\nLDOS " << fLDOS << " STDOS " << fSTDOS << " FTDOS " << fFTDOS +void G4LatticeLogical::Dump(std::ostream& os) const +{ + os << "dyn " << fBeta << " " << fGamma << " " << fLambda << " " << fMu << "\nscat " << fB + << " decay " << fA << "\nLDOS " << fLDOS << " STDOS " << fSTDOS << " FTDOS " << fFTDOS << std::endl; Dump_NMap(os, 0, "LVec.ssv"); @@ -233,30 +211,35 @@ void G4LatticeLogical::Dump(std::ostream& os) const { DumpMap(os, 2, "ST.ssv"); } -void G4LatticeLogical::DumpMap(std::ostream& os, G4int pol, - const G4String& name) const { - os << "VG " << name << " " << (pol==0?"L":pol==1?"FT":pol==2?"ST":"??") +void G4LatticeLogical::DumpMap(std::ostream& os, G4int pol, const G4String& name) const +{ + os << "VG " << name << " " + << (pol == 0 ? "L" + : pol == 1 ? "FT" + : pol == 2 ? "ST" + : "??") << " " << fVresTheta << " " << fVresPhi << std::endl; - for (G4int iTheta=0; iTheta 1) - { +G4double G4LatticePhysical::MapKtoV(G4int polarizationState, G4ThreeVector k) const +{ + if (verboseLevel > 1) { G4cout << "G4LatticePhysical::MapKtoV " << k << G4endl; } - k.rotate(yhat,fTheta).rotate(zhat, fPhi); + k.rotate(yhat, fTheta).rotate(zhat, fPhi); return fLattice->MapKtoV(polarizationState, k); } /////////////////////////////// -//Loads the normalized direction vector along VG +// Loads the normalized direction vector along VG /////////////////////////////// -G4ThreeVector G4LatticePhysical::MapKtoVDir(G4int polarizationState, - G4ThreeVector k) const { - if(verboseLevel > 1) - { +G4ThreeVector G4LatticePhysical::MapKtoVDir(G4int polarizationState, G4ThreeVector k) const +{ + if (verboseLevel > 1) { G4cout << "G4LatticePhysical::MapKtoVDir " << k << G4endl; } - k.rotate(yhat,fTheta).rotate(zhat,fPhi); + k.rotate(yhat, fTheta).rotate(zhat, fPhi); - G4ThreeVector VG = fLattice->MapKtoVDir(polarizationState, k); + G4ThreeVector VG = fLattice->MapKtoVDir(polarizationState, k); - return VG.rotate(zhat,-fPhi).rotate(yhat,-fTheta); + return VG.rotate(zhat, -fPhi).rotate(yhat, -fTheta); } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... // Apply orientation transforms to specified vector -G4ThreeVector -G4LatticePhysical::RotateToGlobal(const G4ThreeVector& dir) const { - if (verboseLevel>1) { - G4cout << "G4LatticePhysical::RotateToGlobal " << dir - << "\nusing fLocalToGlobal " << fLocalToGlobal - << G4endl; +G4ThreeVector G4LatticePhysical::RotateToGlobal(const G4ThreeVector& dir) const +{ + if (verboseLevel > 1) { + G4cout << "G4LatticePhysical::RotateToGlobal " << dir << "\nusing fLocalToGlobal " + << fLocalToGlobal << G4endl; } - G4ThreeVector result = fLocalToGlobal*dir; - if(verboseLevel > 1) - { + G4ThreeVector result = fLocalToGlobal * dir; + if (verboseLevel > 1) { G4cout << " result " << result << G4endl; } return result; } -G4ThreeVector -G4LatticePhysical::RotateToLocal(const G4ThreeVector& dir) const { - if (verboseLevel>1) { - G4cout << "G4LatticePhysical::RotateToLocal " << dir - << "\nusing fGlobalToLocal " << fGlobalToLocal - << G4endl; +G4ThreeVector G4LatticePhysical::RotateToLocal(const G4ThreeVector& dir) const +{ + if (verboseLevel > 1) { + G4cout << "G4LatticePhysical::RotateToLocal " << dir << "\nusing fGlobalToLocal " + << fGlobalToLocal << G4endl; } - G4ThreeVector result = fGlobalToLocal*dir; - if(verboseLevel > 1) - { + G4ThreeVector result = fGlobalToLocal * dir; + if (verboseLevel > 1) { G4cout << " result " << result << G4endl; } diff --git a/source/materials/src/G4Material.cc b/source/materials/src/G4Material.cc index 3eb5337abcd..ddb05bcb719 100644 --- a/source/materials/src/G4Material.cc +++ b/source/materials/src/G4Material.cc @@ -22,25 +22,22 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -// + // 26-06-96, Code uses operators (+=, *=, ++, -> etc.) correctly, P. Urban // 10-07-96, new data members added by L.Urban // 12-12-96, new data members added by L.Urban // 20-01-97, aesthetic rearrangement. RadLength calculation modified. // Data members Zeff and Aeff REMOVED (i.e. passed to the Elements). // (local definition of Zeff in DensityEffect and FluctModel...) -// Vacuum defined as a G4State. Mixture flag removed, M.Maire. +// Vacuum defined as a G4State. Mixture flag removed, M.Maire. // 29-01-97, State=Vacuum automatically set density=0 in the contructors. -// Subsequent protections have been put in the calculation of +// Subsequent protections have been put in the calculation of // MeanExcEnergy, ShellCorrectionVector, DensityEffect, M.Maire. // 11-02-97, ComputeDensityEffect() rearranged, M.Maire. // 20-03-97, corrected initialization of pointers, M.Maire. // 28-05-98, the kState=kVacuum has been removed. -// automatic check for a minimal density, M.Maire -// 12-06-98, new method AddMaterial() allowing mixture of materials, M.Maire +// automatic check for a minimal density, M.Maire +// 12-06-98, new method AddMaterial() allowing mixture of materials, M.Maire // 09-07-98, ionisation parameters removed from the class, M.Maire // 05-10-98, change names: NumDensity -> NbOfAtomsPerVolume // 18-11-98, new interface to SandiaTable @@ -57,32 +54,30 @@ // 06-05-02, remove the check of the ideal gas state equation // 06-08-02, remove constructors with chemical formula (mma) // 22-01-04, proper STL handling of theElementVector (Hisaya) -// 30-03-05, warning in GetMaterial(materialName) -// 09-03-06, minor change of printout (V.Ivanchenko) -// 10-01-07, compute fAtomVector in the case of mass fraction (V.Ivanchenko) -// 27-07-07, improve destructor (V.Ivanchenko) -// 18-10-07, moved definition of mat index to InitialisePointers (V.Ivanchenko) +// 30-03-05, warning in GetMaterial(materialName) +// 09-03-06, minor change of printout (V.Ivanchenko) +// 10-01-07, compute fAtomVector in the case of mass fraction (V.Ivanchenko) +// 27-07-07, improve destructor (V.Ivanchenko) +// 18-10-07, moved definition of mat index to InitialisePointers (V.Ivanchenko) // 13-08-08, do not use fixed size arrays (V.Ivanchenko) // 26-10-11, new scheme for G4Exception (mma) // 13-04-12, map fMatComponents, filled in AddMaterial() // 21-04-12, fMassOfMolecule, computed for AtomsCount (mma) -// -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -#include #include "G4Material.hh" -#include "G4NistManager.hh" -#include "G4UnitsTable.hh" -#include "G4PhysicalConstants.hh" -#include "G4SystemOfUnits.hh" -#include "G4ExtendedMaterial.hh" -#include "G4AtomicShells.hh" + #include "G4ApplicationState.hh" -#include "G4StateManager.hh" +#include "G4AtomicShells.hh" #include "G4Exp.hh" +#include "G4ExtendedMaterial.hh" #include "G4Log.hh" +#include "G4NistManager.hh" +#include "G4PhysicalConstants.hh" +#include "G4StateManager.hh" +#include "G4SystemOfUnits.hh" +#include "G4UnitsTable.hh" + +#include G4MaterialTable G4Material::theMaterialTable; @@ -90,26 +85,24 @@ G4MaterialTable G4Material::theMaterialTable; // Constructor to create a material from scratch -G4Material::G4Material(const G4String& name, G4double z, - G4double a, G4double density, - G4State state, G4double temp, G4double pressure) - : fName(name) +G4Material::G4Material(const G4String& name, G4double z, G4double a, G4double density, + G4State state, G4double temp, G4double pressure) + : fName(name) { InitializePointers(); - - if (density < universe_mean_density) - { - G4cout << " G4Material WARNING:" - << " define a material with density=0 is not allowed. \n" - << " The material " << name << " will be constructed with the" - << " default minimal density: " << universe_mean_density/(g/cm3) - << "g/cm3" << G4endl; - density = universe_mean_density; - } - - fDensity = density; - fState = state; - fTemp = temp; + + if (density < universe_mean_density) { + G4cout << " G4Material WARNING:" + << " define a material with density=0 is not allowed. \n" + << " The material " << name << " will be constructed with the" + << " default minimal density: " << universe_mean_density / (g / cm3) << "g/cm3" + << G4endl; + density = universe_mean_density; + } + + fDensity = density; + fState = state; + fTemp = temp; fPressure = pressure; // Initialize theElementVector allocating one @@ -121,21 +114,23 @@ G4Material::G4Material(const G4String& name, G4double z, G4NistManager* nist = G4NistManager::Instance(); G4int iz = G4lrint(z); auto elm = nist->FindOrBuildElement(iz); - if(elm == nullptr) - { + if (elm == nullptr) { elm = new G4Element("ELM_" + name, name, z, a); } - theElementVector->push_back(elm); + theElementVector->push_back(elm); - fMassFractionVector = new G4double[1]; + fMassFractionVector = new G4double[1]; fMassFractionVector[0] = 1.; - fMassOfMolecule = a/CLHEP::Avogadro; - - if (fState == kStateUndefined) - { - if (fDensity > kGasThreshold) { fState = kStateSolid; } - else { fState = kStateGas; } + fMassOfMolecule = a / CLHEP::Avogadro; + + if (fState == kStateUndefined) { + if (fDensity > kGasThreshold) { + fState = kStateSolid; + } + else { + fState = kStateGas; } + } ComputeDerivedQuantities(); } @@ -145,78 +140,79 @@ G4Material::G4Material(const G4String& name, G4double z, // Constructor to create a material from a List of constituents // (elements and/or materials) added with AddElement or AddMaterial -G4Material::G4Material(const G4String& name, G4double density, - G4int nComponents, - G4State state, G4double temp, G4double pressure) - : fName(name) +G4Material::G4Material(const G4String& name, G4double density, G4int nComponents, G4State state, + G4double temp, G4double pressure) + : fName(name) { InitializePointers(); - - if (density < universe_mean_density) - { - G4cout << "--- Warning from G4Material::G4Material()" - << " define a material with density=0 is not allowed. \n" - << " The material " << name << " will be constructed with the" - << " default minimal density: " << universe_mean_density/(g/cm3) - << "g/cm3" << G4endl; - density = universe_mean_density; - } - - fDensity = density; - fState = state; - fTemp = temp; + + if (density < universe_mean_density) { + G4cout << "--- Warning from G4Material::G4Material()" + << " define a material with density=0 is not allowed. \n" + << " The material " << name << " will be constructed with the" + << " default minimal density: " << universe_mean_density / (g / cm3) << "g/cm3" + << G4endl; + density = universe_mean_density; + } + + fDensity = density; + fState = state; + fTemp = temp; fPressure = pressure; - + fNbComponents = nComponents; fMassFraction = true; - - if (fState == kStateUndefined) - { - if (fDensity > kGasThreshold) { fState = kStateSolid; } - else { fState = kStateGas; } + + if (fState == kStateUndefined) { + if (fDensity > kGasThreshold) { + fState = kStateSolid; + } + else { + fState = kStateGas; } + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // Constructor to create a material from base material -G4Material::G4Material(const G4String& name, G4double density, - const G4Material* bmat, - G4State state, G4double temp, G4double pressure) - : fName(name) +G4Material::G4Material(const G4String& name, G4double density, const G4Material* bmat, + G4State state, G4double temp, G4double pressure) + : fName(name) { InitializePointers(); - - if (density < universe_mean_density) - { - G4cout << "--- Warning from G4Material::G4Material()" - << " define a material with density=0 is not allowed. \n" - << " The material " << name << " will be constructed with the" - << " default minimal density: " << universe_mean_density/(g/cm3) - << "g/cm3" << G4endl; - density = universe_mean_density; - } - fDensity = density; - fState = state; - fTemp = temp; + if (density < universe_mean_density) { + G4cout << "--- Warning from G4Material::G4Material()" + << " define a material with density=0 is not allowed. \n" + << " The material " << name << " will be constructed with the" + << " default minimal density: " << universe_mean_density / (g / cm3) << "g/cm3" + << G4endl; + density = universe_mean_density; + } + + fDensity = density; + fState = state; + fTemp = temp; fPressure = pressure; fBaseMaterial = bmat; auto ptr = bmat; - if(nullptr != ptr) { - while(1) { + if (nullptr != ptr) { + while (true) { ptr = ptr->GetBaseMaterial(); - if(nullptr == ptr) { break; } - else { fBaseMaterial = ptr; } + if (nullptr == ptr) { + break; + } + fBaseMaterial = ptr; } } fChemicalFormula = fBaseMaterial->GetChemicalFormula(); - fMassOfMolecule = fBaseMaterial->GetMassOfMolecule(); + fMassOfMolecule = fBaseMaterial->GetMassOfMolecule(); - fNumberOfElements = (G4int)fBaseMaterial->GetNumberOfElements(); + fNumberOfElements = (G4int)fBaseMaterial->GetNumberOfElements(); fNbComponents = fNumberOfElements; CopyPointersOfBaseMaterial(); @@ -224,28 +220,16 @@ G4Material::G4Material(const G4String& name, G4double density, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -// Fake default constructor - sets only member data and allocates memory -// for usage restricted to object persistency - -G4Material::G4Material(__void__&) - : fName("") -{ - InitializePointers(); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - G4Material::~G4Material() { - // G4cout << "### Destruction of material " << fName << " started" <GetName() == fName) { - G4cout << "G4Material WARNING: duplicate name of material " - << fName << G4endl; + for (size_t i = 0; i < fIndexInTable; ++i) { + if (theMaterialTable[i]->GetName() == fName) { + G4cout << "G4Material WARNING: duplicate name of material " << fName << G4endl; break; } } @@ -293,7 +276,7 @@ void G4Material::InitializePointers() void G4Material::ComputeDerivedQuantities() { // Header routine to compute various properties of material. - // + // // Number of atoms per volume (per element), total nb of electrons per volume G4double Zi, Ai; fTotNbOfAtomsPerVolume = 0.; @@ -301,28 +284,26 @@ void G4Material::ComputeDerivedQuantities() fVecNbOfAtomsPerVolume = new G4double[fNumberOfElements]; fTotNbOfElectPerVolume = 0.; fFreeElecDensity = 0.; - const G4double elecTh = 15.*CLHEP::eV; // threshold for conductivity e- - for (G4int i=0; iGetZ(); Ai = (*theElementVector)[i]->GetA(); - fVecNbOfAtomsPerVolume[i] = Avogadro*fDensity*fMassFractionVector[i]/Ai; + fVecNbOfAtomsPerVolume[i] = Avogadro * fDensity * fMassFractionVector[i] / Ai; fTotNbOfAtomsPerVolume += fVecNbOfAtomsPerVolume[i]; - fTotNbOfElectPerVolume += fVecNbOfAtomsPerVolume[i]*Zi; - if(fState != kStateGas) { - fFreeElecDensity += fVecNbOfAtomsPerVolume[i]* - G4AtomicShells::GetNumberOfFreeElectrons(Zi, elecTh); + fTotNbOfElectPerVolume += fVecNbOfAtomsPerVolume[i] * Zi; + if (fState != kStateGas) { + fFreeElecDensity += + fVecNbOfAtomsPerVolume[i] * G4AtomicShells::GetNumberOfFreeElectrons(Zi, elecTh); } } - + ComputeRadiationLength(); ComputeNuclearInterLength(); - if(fIonisation == nullptr) - { + if (fIonisation == nullptr) { fIonisation = new G4IonisParamMat(this); } - if(fSandiaTable == nullptr) - { + if (fSandiaTable == nullptr) { fSandiaTable = new G4SandiaTable(this); } } @@ -331,35 +312,33 @@ void G4Material::ComputeDerivedQuantities() void G4Material::CopyPointersOfBaseMaterial() { - G4double factor = fDensity/fBaseMaterial->GetDensity(); - fTotNbOfAtomsPerVolume = factor*fBaseMaterial->GetTotNbOfAtomsPerVolume(); - fTotNbOfElectPerVolume = factor*fBaseMaterial->GetTotNbOfElectPerVolume(); - fFreeElecDensity = factor*fBaseMaterial->GetFreeElectronDensity(); + G4double factor = fDensity / fBaseMaterial->GetDensity(); + fTotNbOfAtomsPerVolume = factor * fBaseMaterial->GetTotNbOfAtomsPerVolume(); + fTotNbOfElectPerVolume = factor * fBaseMaterial->GetTotNbOfElectPerVolume(); + fFreeElecDensity = factor * fBaseMaterial->GetFreeElectronDensity(); - if(fState == kStateUndefined) { fState = fBaseMaterial->GetState(); } + if (fState == kStateUndefined) { + fState = fBaseMaterial->GetState(); + } - theElementVector = - const_cast(fBaseMaterial->GetElementVector()); - fMassFractionVector = - const_cast(fBaseMaterial->GetFractionVector()); + theElementVector = const_cast(fBaseMaterial->GetElementVector()); + fMassFractionVector = const_cast(fBaseMaterial->GetFractionVector()); fAtomsVector = const_cast(fBaseMaterial->GetAtomsVector()); const G4double* v = fBaseMaterial->GetVecNbOfAtomsPerVolume(); delete[] fVecNbOfAtomsPerVolume; fVecNbOfAtomsPerVolume = new G4double[fNumberOfElements]; - for (G4int i=0; iGetRadlen()/factor; - fNuclInterLen = fBaseMaterial->GetNuclearInterLength()/factor; + fRadlen = fBaseMaterial->GetRadlen() / factor; + fNuclInterLen = fBaseMaterial->GetNuclearInterLength() / factor; - if(fIonisation == nullptr) - { + if (fIonisation == nullptr) { fIonisation = new G4IonisParamMat(this); } fIonisation->SetMeanExcitationEnergy(fBaseMaterial->GetIonisation()->GetMeanExcitationEnergy()); - if(fBaseMaterial->GetIonisation()->GetDensityEffectCalculator() != nullptr) - { + if (fBaseMaterial->GetIonisation()->GetDensityEffectCalculator() != nullptr) { ComputeDensityEffectOnFly(true); } @@ -369,136 +348,123 @@ void G4Material::CopyPointersOfBaseMaterial() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void -G4Material::AddElementByNumberOfAtoms(const G4Element* elm, G4int nAtoms) -{ +void G4Material::AddElementByNumberOfAtoms(const G4Element* elm, G4int nAtoms) +{ // perform checks consistency - if(0 == fIdxComponent) { + if (0 == fIdxComponent) { fMassFraction = false; fAtoms = new std::vector; fElm = new std::vector; } - if(fIdxComponent >= fNbComponents) { + if (fIdxComponent >= fNbComponents) { G4ExceptionDescription ed; - ed << "For material " << fName << " and added element " - << elm->GetName() << " with Natoms=" << nAtoms - << " wrong attempt to add more than the declared number of elements " - << fIdxComponent << " >= " << fNbComponents; - G4Exception ("G4Material::AddElementByNumberOfAtoms()", "mat031", - FatalException, ed, ""); - } - if(fMassFraction) { + ed << "For material " << fName << " and added element " << elm->GetName() + << " with Natoms=" << nAtoms + << " wrong attempt to add more than the declared number of elements " << fIdxComponent + << " >= " << fNbComponents; + G4Exception("G4Material::AddElementByNumberOfAtoms()", "mat031", FatalException, ed, ""); + } + if (fMassFraction) { G4ExceptionDescription ed; - ed << "For material " << fName << " and added element " - << elm->GetName() << " with Natoms=" << nAtoms - << " problem: cannot add by number of atoms after " + ed << "For material " << fName << " and added element " << elm->GetName() + << " with Natoms=" << nAtoms << " problem: cannot add by number of atoms after " << "addition of elements by mass fraction"; - G4Exception ("G4Material::AddElementByNumberOfAtoms()", "mat031", - FatalException, ed, ""); + G4Exception("G4Material::AddElementByNumberOfAtoms()", "mat031", FatalException, ed, ""); } - if(0 >= nAtoms) { + if (0 >= nAtoms) { G4ExceptionDescription ed; - ed << "For material " << fName << " and added element " - << elm->GetName() << " with Natoms=" << nAtoms - << " problem: number of atoms should be above zero"; - G4Exception ("G4Material::AddElementByNumberOfAtoms()", "mat031", - FatalException, ed, ""); + ed << "For material " << fName << " and added element " << elm->GetName() + << " with Natoms=" << nAtoms << " problem: number of atoms should be above zero"; + G4Exception("G4Material::AddElementByNumberOfAtoms()", "mat031", FatalException, ed, ""); } // filling G4bool isAdded = false; - if(!fElm->empty()) { - for (G4int i=0; iempty()) { + for (G4int i = 0; i < fNumberOfElements; ++i) { + if (elm == (*fElm)[i]) { + (*fAtoms)[i] += nAtoms; + isAdded = true; + break; } } } - if(!isAdded) { - fElm->push_back(elm); + if (! isAdded) { + fElm->push_back(elm); fAtoms->push_back(nAtoms); ++fNumberOfElements; - } + } ++fIdxComponent; // is filled - complete composition of atoms - if (fIdxComponent == fNbComponents) { + if (fIdxComponent == fNbComponents) { theElementVector = new G4ElementVector(); theElementVector->reserve(fNumberOfElements); fAtomsVector = new G4int[fNumberOfElements]; fMassFractionVector = new G4double[fNumberOfElements]; - + G4double Amol = 0.; - for (G4int i=0; ipush_back((*fElm)[i]); fAtomsVector[i] = (*fAtoms)[i]; - G4double w = fAtomsVector[i]*(*fElm)[i]->GetA(); + G4double w = fAtomsVector[i] * (*fElm)[i]->GetA(); Amol += w; fMassFractionVector[i] = w; } - for (G4int i=0; i 1.0) { + if (fraction < 0.0 || fraction > 1.0) { G4ExceptionDescription ed; - ed << "For material " << fName << " and added element " - << elm->GetName() << " massFraction= " << fraction - << " is wrong "; - G4Exception ("G4Material::AddElementByMassFraction()", "mat031", - FatalException, ed, ""); + ed << "For material " << fName << " and added element " << elm->GetName() + << " massFraction= " << fraction << " is wrong "; + G4Exception("G4Material::AddElementByMassFraction()", "mat031", FatalException, ed, ""); } - if(!fMassFraction) { + if (! fMassFraction) { G4ExceptionDescription ed; - ed << "For material " << fName << " and added element " - << elm->GetName() << ", massFraction= " << fraction - << ", fIdxComponent=" << fIdxComponent + ed << "For material " << fName << " and added element " << elm->GetName() + << ", massFraction= " << fraction << ", fIdxComponent=" << fIdxComponent << " problem: cannot add by mass fraction after " << "addition of elements by number of atoms"; - G4Exception ("G4Material::AddElementByMassFraction()", "mat031", - FatalException, ed, ""); + G4Exception("G4Material::AddElementByMassFraction()", "mat031", FatalException, ed, ""); } - if(fIdxComponent >= fNbComponents) { + if (fIdxComponent >= fNbComponents) { G4ExceptionDescription ed; - ed << "For material " << fName << " and added element " - << elm->GetName() << ", massFraction= " << fraction - << ", fIdxComponent=" << fIdxComponent - << "; attempt to add more than the declared number of components " - << fIdxComponent << " >= " << fNbComponents; - G4Exception ("G4Material::AddElementByMassFraction()", "mat031", - FatalException, ed, ""); - } - if(0 == fIdxComponent) { + ed << "For material " << fName << " and added element " << elm->GetName() + << ", massFraction= " << fraction << ", fIdxComponent=" << fIdxComponent + << "; attempt to add more than the declared number of components " << fIdxComponent + << " >= " << fNbComponents; + G4Exception("G4Material::AddElementByMassFraction()", "mat031", FatalException, ed, ""); + } + if (0 == fIdxComponent) { fElmFrac = new std::vector; fElm = new std::vector; } - // filling + // filling G4bool isAdded = false; - if(!fElm->empty()) { - for (G4int i=0; iempty()) { + for (G4int i = 0; i < fNumberOfElements; ++i) { + if (elm == (*fElm)[i]) { + (*fElmFrac)[i] += fraction; + isAdded = true; break; } } } - if(!isAdded) { + if (! isAdded) { fElm->push_back(elm); fElmFrac->push_back(fraction); ++fNumberOfElements; @@ -506,7 +472,9 @@ G4Material::AddElementByMassFraction(const G4Element* elm, G4double fraction) ++fIdxComponent; // is filled - if(fIdxComponent == fNbComponents) { FillVectors(); } + if (fIdxComponent == fNbComponents) { + FillVectors(); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -514,56 +482,51 @@ G4Material::AddElementByMassFraction(const G4Element* elm, G4double fraction) // composition by fraction of mass void G4Material::AddMaterial(G4Material* material, G4double fraction) { - if(fraction < 0.0 || fraction > 1.0) { + if (fraction < 0.0 || fraction > 1.0) { G4ExceptionDescription ed; - ed << "For material " << fName << " and added material " - << material->GetName() << ", massFraction= " << fraction - << " is wrong "; - G4Exception ("G4Material::AddMaterial()", "mat031", FatalException, - ed, ""); + ed << "For material " << fName << " and added material " << material->GetName() + << ", massFraction= " << fraction << " is wrong "; + G4Exception("G4Material::AddMaterial()", "mat031", FatalException, ed, ""); } - if(!fMassFraction) { + if (! fMassFraction) { G4ExceptionDescription ed; - ed << "For material " << fName << " and added material " - << material->GetName() << ", massFraction= " << fraction - << ", fIdxComponent=" << fIdxComponent + ed << "For material " << fName << " and added material " << material->GetName() + << ", massFraction= " << fraction << ", fIdxComponent=" << fIdxComponent << " problem: cannot add by mass fraction after " << "addition of elements by number of atoms"; - G4Exception ("G4Material::AddMaterial()", "mat031", FatalException, - ed, ""); + G4Exception("G4Material::AddMaterial()", "mat031", FatalException, ed, ""); } - if(fIdxComponent >= fNbComponents) { + if (fIdxComponent >= fNbComponents) { G4ExceptionDescription ed; - ed << "For material " << fName << " and added material " - << material->GetName() << ", massFraction= " << fraction - << "; attempt to add more than the declared number of components " - << fIdxComponent << " >= " << fNbComponents; - G4Exception ("G4Material::AddMaterial()", "mat031", FatalException, - ed, ""); - } - if(0 == fIdxComponent) { + ed << "For material " << fName << " and added material " << material->GetName() + << ", massFraction= " << fraction + << "; attempt to add more than the declared number of components " << fIdxComponent + << " >= " << fNbComponents; + G4Exception("G4Material::AddMaterial()", "mat031", FatalException, ed, ""); + } + if (0 == fIdxComponent) { fElmFrac = new std::vector; fElm = new std::vector; } - // filling - G4int nelm = (G4int)material->GetNumberOfElements(); - for(G4int j=0; jGetNumberOfElements(); + for (G4int j = 0; j < nelm; ++j) { auto elm = material->GetElement(j); auto frac = material->GetFractionVector(); G4bool isAdded = false; - if(!fElm->empty()) { - for (G4int i=0; iempty()) { + for (G4int i = 0; i < fNumberOfElements; ++i) { + if (elm == (*fElm)[i]) { + (*fElmFrac)[i] += fraction * frac[j]; + isAdded = true; + break; + } } } - if(!isAdded) { - fElm->push_back(elm); - fElmFrac->push_back(fraction*frac[j]); + if (! isAdded) { + fElm->push_back(elm); + fElmFrac->push_back(fraction * frac[j]); ++fNumberOfElements; } } @@ -572,7 +535,9 @@ void G4Material::AddMaterial(G4Material* material, G4double fraction) ++fIdxComponent; // is filled - if(fIdxComponent == fNbComponents) { FillVectors(); } + if (fIdxComponent == fNbComponents) { + FillVectors(); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -584,9 +549,9 @@ void G4Material::FillVectors() theElementVector->reserve(fNumberOfElements); fAtomsVector = new G4int[fNumberOfElements]; fMassFractionVector = new G4double[fNumberOfElements]; - + G4double wtSum(0.0); - for (G4int i=0; ipush_back((*fElm)[i]); fMassFractionVector[i] = (*fElmFrac)[i]; wtSum += fMassFractionVector[i]; @@ -595,22 +560,20 @@ void G4Material::FillVectors() delete fElm; // check sum of weights -- OK? - if (std::abs(1.-wtSum) > perThousand) { + if (std::abs(1. - wtSum) > perThousand) { G4ExceptionDescription ed; - ed << "For material " << fName << " sum of fractional masses " - << wtSum << " is not 1 - results may be wrong"; - G4Exception ("G4Material::FillVectors()", "mat031", JustWarning, - ed, ""); + ed << "For material " << fName << " sum of fractional masses " << wtSum + << " is not 1 - results may be wrong"; + G4Exception("G4Material::FillVectors()", "mat031", JustWarning, ed, ""); } - G4double coeff = (wtSum > 0.0) ? 1./wtSum : 1.0; + G4double coeff = (wtSum > 0.0) ? 1. / wtSum : 1.0; G4double Amol(0.); - for (G4int i=0; iGetA(); + Amol += fMassFractionVector[i] * (*theElementVector)[i]->GetA(); } - for (G4int i=0; iGetA()); + for (G4int i = 0; i < fNumberOfElements; ++i) { + fAtomsVector[i] = G4lrint(fMassFractionVector[i] * Amol / (*theElementVector)[i]->GetA()); } ComputeDerivedQuantities(); } @@ -619,54 +582,59 @@ void G4Material::FillVectors() void G4Material::ComputeRadiationLength() { - G4double radinv = 0.0 ; - for (G4int i=0; iGetfRadTsai()); + G4double radinv = 0.0; + for (G4int i = 0; i < fNumberOfElements; ++i) { + radinv += fVecNbOfAtomsPerVolume[i] * ((*theElementVector)[i]->GetfRadTsai()); } - fRadlen = (radinv <= 0.0 ? DBL_MAX : 1./radinv); + fRadlen = (radinv <= 0.0 ? DBL_MAX : 1. / radinv); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4Material::ComputeNuclearInterLength() { - const G4double lambda0 = 35*CLHEP::g/CLHEP::cm2; - const G4double twothird = 2.0/3.0; + const G4double lambda0 = 35 * CLHEP::g / CLHEP::cm2; + const G4double twothird = 2.0 / 3.0; G4double NILinv = 0.0; - for (G4int i=0; iGetZasInt(); G4double A = (*theElementVector)[i]->GetN(); - if(1 == Z) { - NILinv += fVecNbOfAtomsPerVolume[i]*A; - } else { - NILinv += fVecNbOfAtomsPerVolume[i]*G4Exp(twothird*G4Log(A)); - } - } - NILinv *= amu/lambda0; - fNuclInterLen = (NILinv <= 0.0 ? DBL_MAX : 1./NILinv); + if (1 == Z) { + NILinv += fVecNbOfAtomsPerVolume[i] * A; + } + else { + NILinv += fVecNbOfAtomsPerVolume[i] * G4Exp(twothird * G4Log(A)); + } + } + NILinv *= amu / lambda0; + fNuclInterLen = (NILinv <= 0.0 ? DBL_MAX : 1. / NILinv); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void G4Material::SetChemicalFormula(const G4String& chF) +void G4Material::SetChemicalFormula(const G4String& chF) { - if(!IsLocked()) { fChemicalFormula = chF; } + if (! IsLocked()) { + fChemicalFormula = chF; + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4Material::SetFreeElectronDensity(G4double val) { - if(val >= 0. && !IsLocked()) { fFreeElecDensity = val; } + if (val >= 0. && ! IsLocked()) { + fFreeElecDensity = val; + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4Material::ComputeDensityEffectOnFly(G4bool val) { - if(!IsLocked()) { + if (! IsLocked()) { if (nullptr == fIonisation) { - fIonisation = new G4IonisParamMat(this); + fIonisation = new G4IonisParamMat(this); } fIonisation->ComputeDensityEffectOnFly(val); } @@ -674,50 +642,39 @@ void G4Material::ComputeDensityEffectOnFly(G4bool val) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4MaterialTable* G4Material::GetMaterialTable() -{ - return &theMaterialTable; -} +G4MaterialTable* G4Material::GetMaterialTable() { return &theMaterialTable; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -size_t G4Material::GetNumberOfMaterials() -{ - return theMaterialTable.size(); -} +size_t G4Material::GetNumberOfMaterials() { return theMaterialTable.size(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4Material* G4Material::GetMaterial(const G4String& materialName, G4bool warn) -{ +{ // search the material by its name - for(auto& j : theMaterialTable) - { - if(j->GetName() == materialName) - { + for (auto& j : theMaterialTable) { + if (j->GetName() == materialName) { return j; } } // the material does not exist in the table if (warn) { - G4cout << "G4Material::GetMaterial() WARNING: The material: " - << materialName - << " does not exist in the table. Return NULL pointer." - << G4endl; - } + G4cout << "G4Material::GetMaterial() WARNING: The material: " << materialName + << " does not exist in the table. Return NULL pointer." << G4endl; + } return nullptr; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4Material* G4Material::GetMaterial(G4double z, G4double a, G4double dens) -{ +{ // search the material by its name - for(auto mat : theMaterialTable) - { - if(1 == mat->GetNumberOfElements() && z == mat->GetZ() && - a == mat->GetA() && dens == mat->GetDensity()) + for (auto mat : theMaterialTable) { + if (1 == mat->GetNumberOfElements() && z == mat->GetZ() && a == mat->GetA() && + dens == mat->GetDensity()) { return mat; } @@ -728,12 +685,10 @@ G4Material* G4Material::GetMaterial(G4double z, G4double a, G4double dens) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4Material* G4Material::GetMaterial(size_t nComp, G4double dens) -{ +{ // search the material by its name - for(auto mat : theMaterialTable) - { - if(nComp == mat->GetNumberOfElements() && dens == mat->GetDensity()) - { + for (auto mat : theMaterialTable) { + if (nComp == mat->GetNumberOfElements() && dens == mat->GetDensity()) { return mat; } } @@ -743,29 +698,27 @@ G4Material* G4Material::GetMaterial(size_t nComp, G4double dens) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4double G4Material::GetZ() const -{ +{ if (fNumberOfElements > 1) { G4ExceptionDescription ed; - ed << "For material " << fName << " ERROR in GetZ() - Nelm=" - << fNumberOfElements << " > 1, which is not allowed"; - G4Exception ("G4Material::GetZ()", "mat036", FatalException, - ed, ""); - } - return (*theElementVector)[0]->GetZ(); + ed << "For material " << fName << " ERROR in GetZ() - Nelm=" << fNumberOfElements + << " > 1, which is not allowed"; + G4Exception("G4Material::GetZ()", "mat036", FatalException, ed, ""); + } + return (*theElementVector)[0]->GetZ(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4double G4Material::GetA() const -{ - if (fNumberOfElements > 1) { +{ + if (fNumberOfElements > 1) { G4ExceptionDescription ed; - ed << "For material " << fName << " ERROR in GetA() - Nelm=" - << fNumberOfElements << " > 1, which is not allowed"; - G4Exception ("G4Material::GetA()", "mat036", FatalException, - ed, ""); - } - return (*theElementVector)[0]->GetA(); + ed << "For material " << fName << " ERROR in GetA() - Nelm=" << fNumberOfElements + << " > 1, which is not allowed"; + G4Exception("G4Material::GetA()", "mat036", FatalException, ed, ""); + } + return (*theElementVector)[0]->GetA(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -773,42 +726,38 @@ G4double G4Material::GetA() const std::ostream& operator<<(std::ostream& flux, const G4Material* material) { std::ios::fmtflags mode = flux.flags(); - flux.setf(std::ios::fixed,std::ios::floatfield); + flux.setf(std::ios::fixed, std::ios::floatfield); G4long prec = flux.precision(3); - - flux - << " Material: " << std::setw(8) << material->fName - << " " << material->fChemicalFormula << " " - << " density: " << std::setw(6) << std::setprecision(3) - << G4BestUnit(material->fDensity,"Volumic Mass") - << " RadL: " << std::setw(7) << std::setprecision(3) - << G4BestUnit(material->fRadlen,"Length") - << " Nucl.Int.Length: " << std::setw(7) << std::setprecision(3) - << G4BestUnit(material->fNuclInterLen,"Length") - << "\n" << std::setw(30) - << " Imean: " << std::setw(7) << std::setprecision(3) - << G4BestUnit(material->GetIonisation()->GetMeanExcitationEnergy(),"Energy") - << " temperature: " << std::setw(6) << std::setprecision(2) - << (material->fTemp)/CLHEP::kelvin << " K" - << " pressure: " << std::setw(6) << std::setprecision(2) - << (material->fPressure)/CLHEP::atmosphere << " atm" << "\n"; - - for (G4int i=0; ifNumberOfElements; i++) { - flux - << "\n ---> " << (*(material->theElementVector))[i] - << "\n ElmMassFraction: " - << std::setw(6)<< std::setprecision(2) - << (material->fMassFractionVector[i])/perCent << " %" - << " ElmAbundance " << std::setw(6)<< std::setprecision(2) - << 100*(material->fVecNbOfAtomsPerVolume[i]) - /(material->fTotNbOfAtomsPerVolume) - << " % \n"; - } - flux.precision(prec); - flux.setf(mode,std::ios::floatfield); - - if(material->IsExtended()) - { static_cast(material)->Print(flux); } + + flux << " Material: " << std::setw(8) << material->fName << " " << material->fChemicalFormula + << " " + << " density: " << std::setw(6) << std::setprecision(3) + << G4BestUnit(material->fDensity, "Volumic Mass") << " RadL: " << std::setw(7) + << std::setprecision(3) << G4BestUnit(material->fRadlen, "Length") + << " Nucl.Int.Length: " << std::setw(7) << std::setprecision(3) + << G4BestUnit(material->fNuclInterLen, "Length") << "\n" + << std::setw(30) << " Imean: " << std::setw(7) << std::setprecision(3) + << G4BestUnit(material->GetIonisation()->GetMeanExcitationEnergy(), "Energy") + << " temperature: " << std::setw(6) << std::setprecision(2) + << (material->fTemp) / CLHEP::kelvin << " K" + << " pressure: " << std::setw(6) << std::setprecision(2) + << (material->fPressure) / CLHEP::atmosphere << " atm" + << "\n"; + + for (G4int i = 0; i < material->fNumberOfElements; i++) { + flux << "\n ---> " << (*(material->theElementVector))[i] + << "\n ElmMassFraction: " << std::setw(6) << std::setprecision(2) + << (material->fMassFractionVector[i]) / perCent << " %" + << " ElmAbundance " << std::setw(6) << std::setprecision(2) + << 100 * (material->fVecNbOfAtomsPerVolume[i]) / (material->fTotNbOfAtomsPerVolume) + << " % \n"; + } + flux.precision(prec); + flux.setf(mode, std::ios::floatfield); + + if (material->IsExtended()) { + static_cast(material)->Print(flux); + } return flux; } @@ -817,38 +766,33 @@ std::ostream& operator<<(std::ostream& flux, const G4Material* material) std::ostream& operator<<(std::ostream& flux, const G4Material& material) { - flux << &material; + flux << &material; return flux; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - + std::ostream& operator<<(std::ostream& flux, const G4MaterialTable& MaterialTable) { - //Dump info for all known materials - flux << "\n***** Table : Nb of materials = " << MaterialTable.size() - << " *****\n" << G4endl; + // Dump info for all known materials + flux << "\n***** Table : Nb of materials = " << MaterialTable.size() << " *****\n" << G4endl; - for(auto i : MaterialTable) - { + for (auto i : MaterialTable) { flux << i << G4endl << G4endl; } return flux; -} +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool G4Material::IsExtended() const -{ - return false; -} +G4bool G4Material::IsExtended() const { return false; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4Material::SetMaterialPropertiesTable(G4MaterialPropertiesTable* anMPT) { - if(fMaterialPropertiesTable != anMPT && !IsLocked()) { + if (fMaterialPropertiesTable != anMPT && ! IsLocked()) { delete fMaterialPropertiesTable; fMaterialPropertiesTable = anMPT; } @@ -859,9 +803,5 @@ void G4Material::SetMaterialPropertiesTable(G4MaterialPropertiesTable* anMPT) G4bool G4Material::IsLocked() { auto state = G4StateManager::GetStateManager()->GetCurrentState(); - return !(state == G4State_PreInit || - state == G4State_Init || - state == G4State_Idle); + return state != G4State_PreInit && state != G4State_Init && state != G4State_Idle; } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/materials/src/G4MaterialPropertiesTable.cc b/source/materials/src/G4MaterialPropertiesTable.cc index 14c3d98ffab..89ea73041d1 100644 --- a/source/materials/src/G4MaterialPropertiesTable.cc +++ b/source/materials/src/G4MaterialPropertiesTable.cc @@ -22,10 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// -// + //////////////////////////////////////////////////////////////////////// // G4MaterialPropertiesTable Implementation //////////////////////////////////////////////////////////////////////// @@ -46,10 +43,10 @@ #include "G4MaterialPropertiesTable.hh" -#include "globals.hh" #include "G4Log.hh" #include "G4OpticalMaterialProperties.hh" #include "G4PhysicalConstants.hh" +#include "globals.hh" #include #include @@ -58,7 +55,7 @@ # include "G4AutoLock.hh" namespace { - G4Mutex materialPropertyTableMutex = G4MUTEX_INITIALIZER; +G4Mutex materialPropertyTableMutex = G4MUTEX_INITIALIZER; } #endif @@ -160,51 +157,43 @@ G4MaterialPropertiesTable::G4MaterialPropertiesTable() assert(fMatConstPropNames.size() == kNumberOfConstPropertyIndex); - fMCP.assign(kNumberOfConstPropertyIndex, { 0., false }); + fMCP.assign(kNumberOfConstPropertyIndex, {0., false}); } G4MaterialPropertiesTable::~G4MaterialPropertiesTable() { - for(auto prop : fMP) - { - delete(prop); + for (auto prop : fMP) { + delete (prop); } } -G4int G4MaterialPropertiesTable::GetConstPropertyIndex( - const G4String& key) const +G4int G4MaterialPropertiesTable::GetConstPropertyIndex(const G4String& key) const { // Returns the constant material property index corresponding to a key - std::size_t index = std::distance( - fMatConstPropNames.cbegin(), + std::size_t index = std::distance(fMatConstPropNames.cbegin(), std::find(fMatConstPropNames.cbegin(), fMatConstPropNames.cend(), key)); - if(index < fMatConstPropNames.size()) - { + if (index < fMatConstPropNames.size()) { return (G4int)index; } G4ExceptionDescription ed; ed << "Constant Material Property Index for key " << key << " not found."; - G4Exception("G4MaterialPropertiesTable::GetConstPropertyIndex()", "mat200", - FatalException, ed); + G4Exception("G4MaterialPropertiesTable::GetConstPropertyIndex()", "mat200", FatalException, ed); return 0; } G4int G4MaterialPropertiesTable::GetPropertyIndex(const G4String& key) const { // Returns the material property index corresponding to a key - std::size_t index = - std::distance(fMatPropNames.cbegin(), - std::find(fMatPropNames.cbegin(), fMatPropNames.cend(), key)); - if(index < fMatPropNames.size()) - { + std::size_t index = std::distance( + fMatPropNames.cbegin(), std::find(fMatPropNames.cbegin(), fMatPropNames.cend(), key)); + if (index < fMatPropNames.size()) { return (G4int)index; } G4ExceptionDescription ed; ed << "Material Property Index for key " << key << " not found."; - G4Exception("G4MaterialPropertiesTable::GetPropertyIndex()", "mat201", - FatalException, ed); + G4Exception("G4MaterialPropertiesTable::GetPropertyIndex()", "mat201", FatalException, ed); return 0; } @@ -213,14 +202,12 @@ G4double G4MaterialPropertiesTable::GetConstProperty(const G4int index) const // Returns the constant material property corresponding to an index // fatal exception if property not found - if(index < (G4int) fMCP.size() && fMCP[index].second) - { + if (index < (G4int)fMCP.size() && fMCP[index].second) { return fMCP[index].first; } G4ExceptionDescription ed; ed << "Constant Material Property Index " << index << " not found."; - G4Exception("G4MaterialPropertiesTable::GetConstProperty()", "mat202", - FatalException, ed); + G4Exception("G4MaterialPropertiesTable::GetConstProperty()", "mat202", FatalException, ed); return 0.; } @@ -241,17 +228,15 @@ G4bool G4MaterialPropertiesTable::ConstPropertyExists(const G4int index) const { // Returns true if a const property corresponding to 'index' exists - return index >= 0 && index < (G4int) fMCP.size() && fMCP[index].second; + return index >= 0 && index < (G4int)fMCP.size() && fMCP[index].second; } G4bool G4MaterialPropertiesTable::ConstPropertyExists(const G4String& key) const { // Returns true if a const property 'key' exists - std::size_t index = std::distance( - fMatConstPropNames.cbegin(), + std::size_t index = std::distance(fMatConstPropNames.cbegin(), std::find(fMatConstPropNames.cbegin(), fMatConstPropNames.cend(), key)); - if(index < fMatConstPropNames.size()) - { // index is type std::size_t so >= 0 + if (index < fMatConstPropNames.size()) { // index is type std::size_t so >= 0 return ConstPropertyExists((G4int)index); } return false; @@ -259,124 +244,98 @@ G4bool G4MaterialPropertiesTable::ConstPropertyExists(const G4String& key) const G4bool G4MaterialPropertiesTable::ConstPropertyExists(const char* key) const { - std::size_t index = std::distance( - fMatConstPropNames.cbegin(), + std::size_t index = std::distance(fMatConstPropNames.cbegin(), std::find(fMatConstPropNames.cbegin(), fMatConstPropNames.cend(), key)); - if(index < fMatConstPropNames.size()) - { // index is type std::size_t so >= 0 + if (index < fMatConstPropNames.size()) { // index is type std::size_t so >= 0 return ConstPropertyExists((G4int)index); } return false; } -G4MaterialPropertyVector* G4MaterialPropertiesTable::GetProperty( - const G4String& key) const +G4MaterialPropertyVector* G4MaterialPropertiesTable::GetProperty(const G4String& key) const { // Returns a Material Property Vector corresponding to a key - if(std::find(fMatPropNames.cbegin(), fMatPropNames.cend(), key) != - fMatPropNames.cend()) - { + if (std::find(fMatPropNames.cbegin(), fMatPropNames.cend(), key) != fMatPropNames.cend()) { const G4int index = GetPropertyIndex(G4String(key)); return GetProperty(index); } return nullptr; } -G4MaterialPropertyVector* G4MaterialPropertiesTable::GetProperty( - const char* key) const +G4MaterialPropertyVector* G4MaterialPropertiesTable::GetProperty(const char* key) const { - if(std::find(fMatPropNames.cbegin(), fMatPropNames.cend(), key) != - fMatPropNames.cend()) - { + if (std::find(fMatPropNames.cbegin(), fMatPropNames.cend(), key) != fMatPropNames.cend()) { const G4int index = GetPropertyIndex(G4String(key)); return GetProperty(index); } return nullptr; } -G4MaterialPropertyVector* G4MaterialPropertiesTable::GetProperty( - const G4int index) const +G4MaterialPropertyVector* G4MaterialPropertiesTable::GetProperty(const G4int index) const { // Returns a Material Property Vector corresponding to an index // returns nullptr if the property has not been defined by user - if(index >= 0 && index < (G4int) fMP.size()) - { + if (index >= 0 && index < (G4int)fMP.size()) { return fMP[index]; } return nullptr; } -G4MaterialPropertyVector* G4MaterialPropertiesTable::AddProperty( - const G4String& key, const std::vector& photonEnergies, - const std::vector& propertyValues, G4bool createNewKey, - G4bool spline) +G4MaterialPropertyVector* G4MaterialPropertiesTable::AddProperty(const G4String& key, + const std::vector& photonEnergies, const std::vector& propertyValues, + G4bool createNewKey, G4bool spline) { - if(photonEnergies.size() != propertyValues.size()) - { + if (photonEnergies.size() != propertyValues.size()) { G4ExceptionDescription ed; ed << "AddProperty error!"; - G4Exception("G4MaterialPropertiesTable::AddProperty()", "mat204", - FatalException, ed); + G4Exception("G4MaterialPropertiesTable::AddProperty()", "mat204", FatalException, ed); } // G4PhysicsVector assumes energies are in increasing order - for (std::size_t i = 0; i < photonEnergies.size() - 1; ++i) - { - if(photonEnergies.at(i+1) < photonEnergies.at(i)) - { + for (std::size_t i = 0; i < photonEnergies.size() - 1; ++i) { + if (photonEnergies.at(i + 1) < photonEnergies.at(i)) { G4ExceptionDescription ed; ed << "Energies in material property table must be in increasing " - << "order. Key: " << key << " Energy: " << photonEnergies.at(i+1); - G4Exception("G4MaterialPropertiesTable::AddProperty()", "mat215", - FatalException, ed); + << "order. Key: " << key << " Energy: " << photonEnergies.at(i + 1); + G4Exception("G4MaterialPropertiesTable::AddProperty()", "mat215", FatalException, ed); } } // if the key doesn't exist, add it if requested - if(std::find(fMatPropNames.cbegin(), fMatPropNames.cend(), key) == - fMatPropNames.cend()) - { - if(createNewKey) - { + if (std::find(fMatPropNames.cbegin(), fMatPropNames.cend(), key) == fMatPropNames.cend()) { + if (createNewKey) { fMatPropNames.push_back(key); fMP.push_back(nullptr); } - else - { + else { G4ExceptionDescription ed; - ed << "Attempting to create a new material property key " << key - << " without setting\n" + ed << "Attempting to create a new material property key " << key << " without setting\n" << "createNewKey parameter of AddProperty to true."; - G4Exception("G4MaterialPropertiesTable::AddProperty()", "mat205", - FatalException, ed); + G4Exception("G4MaterialPropertiesTable::AddProperty()", "mat205", FatalException, ed); } } - auto* mpv = - new G4MaterialPropertyVector(photonEnergies, propertyValues, spline); + auto* mpv = new G4MaterialPropertyVector(photonEnergies, propertyValues, spline); mpv->SetVerboseLevel(1); - if(spline) - { + if (spline) { mpv->FillSecondDerivatives(); } G4int index = GetPropertyIndex(key); - fMP[index] = mpv; + fMP[index] = mpv; // if key is RINDEX, we calculate GROUPVEL - // contribution from Tao Lin (IHEP, the JUNO experiment) - if(key == "RINDEX") - { + if (key == "RINDEX") { CalculateGROUPVEL(); } return mpv; } -G4MaterialPropertyVector* G4MaterialPropertiesTable::AddProperty( - const char* key, G4double* photonEnergies, G4double* propertyValues, - G4int numEntries, G4bool createNewKey, G4bool spline) +G4MaterialPropertyVector* G4MaterialPropertiesTable::AddProperty(const char* key, + G4double* photonEnergies, G4double* propertyValues, G4int numEntries, G4bool createNewKey, + G4bool spline) { - // Provides a way of adding a property to the Material Properties // Table given a pair of arrays and a key G4String k(key); @@ -386,9 +345,8 @@ G4MaterialPropertyVector* G4MaterialPropertiesTable::AddProperty( return AddProperty(k, energies, values, createNewKey, spline); } -void G4MaterialPropertiesTable::AddProperty(const G4String& key, - G4MaterialPropertyVector* mpv, - G4bool createNewKey) +void G4MaterialPropertiesTable::AddProperty( + const G4String& key, G4MaterialPropertyVector* mpv, G4bool createNewKey) { // Provides a way of adding a property to the Material Properties // Table given an G4MaterialPropertyVector Reference and a key @@ -396,97 +354,79 @@ void G4MaterialPropertiesTable::AddProperty(const G4String& key, // G4PhysicsVector assumes energies are in increasing order // An MPV with size==0 or 1 is also ok if (mpv->GetVectorLength() > 1) { - for (std::size_t i = 0; i < mpv->GetVectorLength() - 1; ++i) - { - if(mpv->Energy(i+1) < mpv->Energy(i)) - { + for (std::size_t i = 0; i < mpv->GetVectorLength() - 1; ++i) { + if (mpv->Energy(i + 1) < mpv->Energy(i)) { G4ExceptionDescription ed; ed << "Energies in material property vector must be in increasing " - << "order. Key: " << key << " Energy: " << mpv->Energy(i+1); - G4Exception("G4MaterialPropertiesTable::AddProperty()", "mat216", - FatalException, ed); + << "order. Key: " << key << " Energy: " << mpv->Energy(i + 1); + G4Exception("G4MaterialPropertiesTable::AddProperty()", "mat216", FatalException, ed); } } } // if the key doesn't exist, add it - if(std::find(fMatPropNames.cbegin(), fMatPropNames.cend(), key) == - fMatPropNames.cend()) - { - if(createNewKey) - { + if (std::find(fMatPropNames.cbegin(), fMatPropNames.cend(), key) == fMatPropNames.cend()) { + if (createNewKey) { fMatPropNames.push_back(key); fMP.push_back(nullptr); } - else - { + else { G4ExceptionDescription ed; - ed << "Attempting to create a new material property key " << key - << " without setting\n" + ed << "Attempting to create a new material property key " << key << " without setting\n" << "createNewKey parameter of AddProperty to true."; - G4Exception("G4MaterialPropertiesTable::AddProperty()", "mat206", - FatalException, ed); + G4Exception("G4MaterialPropertiesTable::AddProperty()", "mat206", FatalException, ed); } } G4int index = GetPropertyIndex(key); - fMP[index] = mpv; + fMP[index] = mpv; // if key is RINDEX, we calculate GROUPVEL - // contribution from Tao Lin (IHEP, the JUNO experiment) - if(key == "RINDEX") - { + if (key == "RINDEX") { CalculateGROUPVEL(); } } -void G4MaterialPropertiesTable::AddProperty(const char* key, - G4MaterialPropertyVector* mpv, - G4bool createNewKey) +void G4MaterialPropertiesTable::AddProperty( + const char* key, G4MaterialPropertyVector* mpv, G4bool createNewKey) { AddProperty(G4String(key), mpv, createNewKey); } -void G4MaterialPropertiesTable::AddProperty(const G4String& key, - const G4String& mat) +void G4MaterialPropertiesTable::AddProperty(const G4String& key, const G4String& mat) { // load a material property vector defined in Geant4 source - G4MaterialPropertyVector* v = - G4OpticalMaterialProperties::GetProperty(key, mat); + G4MaterialPropertyVector* v = G4OpticalMaterialProperties::GetProperty(key, mat); AddProperty(key, v); } -void G4MaterialPropertiesTable::AddConstProperty(const G4String& key, - G4double propertyValue, - G4bool createNewKey) +void G4MaterialPropertiesTable::AddConstProperty( + const G4String& key, G4double propertyValue, G4bool createNewKey) { // Provides a way of adding a constant property to the Material Properties // Table given a key - if(std::find(fMatConstPropNames.cbegin(), fMatConstPropNames.cend(), key) == - fMatConstPropNames.cend()) + if (std::find(fMatConstPropNames.cbegin(), fMatConstPropNames.cend(), key) == + fMatConstPropNames.cend()) { - if(createNewKey) - { + if (createNewKey) { fMatConstPropNames.push_back(key); fMCP.emplace_back(0., true); } - else - { + else { G4ExceptionDescription ed; ed << "Attempting to create a new material constant property key " << key << " without setting" << " createNewKey parameter of AddProperty to true."; - G4Exception("G4MaterialPropertiesTable::AddProperty()", "mat207", - FatalException, ed); + G4Exception("G4MaterialPropertiesTable::AddProperty()", "mat207", FatalException, ed); } } G4int index = GetConstPropertyIndex(key); - fMCP[index] = std::pair{ propertyValue, true }; + fMCP[index] = std::pair{propertyValue, true}; } -void G4MaterialPropertiesTable::AddConstProperty(const char* key, - G4double propertyValue, - G4bool createNewKey) +void G4MaterialPropertiesTable::AddConstProperty( + const char* key, G4double propertyValue, G4bool createNewKey) { // Provides a way of adding a constant property to the Material Properties // Table given a key @@ -496,9 +436,8 @@ void G4MaterialPropertiesTable::AddConstProperty(const char* key, void G4MaterialPropertiesTable::RemoveConstProperty(const G4String& key) { G4int index = GetConstPropertyIndex(key); - if(index < (G4int) fMCP.size()) - { - fMCP[index] = std::pair{ 0., false }; + if (index < (G4int)fMCP.size()) { + fMCP[index] = std::pair{0., false}; } } @@ -514,57 +453,44 @@ void G4MaterialPropertiesTable::RemoveProperty(const G4String& key) fMP[index] = nullptr; } -void G4MaterialPropertiesTable::RemoveProperty(const char* key) -{ - RemoveProperty(G4String(key)); -} +void G4MaterialPropertiesTable::RemoveProperty(const char* key) { RemoveProperty(G4String(key)); } -void G4MaterialPropertiesTable::AddEntry(const G4String& key, - G4double aPhotonEnergy, - G4double aPropertyValue) +void G4MaterialPropertiesTable::AddEntry( + const G4String& key, G4double aPhotonEnergy, G4double aPropertyValue) { // Allows to add an entry pair directly to the Material Property Vector // given a key. - if(std::find(fMatPropNames.cbegin(), fMatPropNames.cend(), key) == - fMatPropNames.cend()) - { - G4Exception("G4MaterialPropertiesTable::AddEntry()", "mat214", - FatalException, "Material Property Vector not found."); + if (std::find(fMatPropNames.cbegin(), fMatPropNames.cend(), key) == fMatPropNames.cend()) { + G4Exception("G4MaterialPropertiesTable::AddEntry()", "mat214", FatalException, + "Material Property Vector not found."); } G4int index = GetPropertyIndex(key); G4MaterialPropertyVector* targetVector = fMP[index]; - if(targetVector != nullptr) - { + if (targetVector != nullptr) { // do not allow duplicate energies - for (std::size_t i = 0; i < targetVector->GetVectorLength(); ++i) - { - if(aPhotonEnergy == targetVector->Energy(i)) - { + for (std::size_t i = 0; i < targetVector->GetVectorLength(); ++i) { + if (aPhotonEnergy == targetVector->Energy(i)) { G4ExceptionDescription ed; ed << "Energy values in material property vector must be unique. " << "Key: " << key; - G4Exception("G4MaterialPropertiesTable::AddEntry()", "mat217", - FatalException, ed); + G4Exception("G4MaterialPropertiesTable::AddEntry()", "mat217", FatalException, ed); } } targetVector->InsertValues(aPhotonEnergy, aPropertyValue); } - else - { - G4Exception("G4MaterialPropertiesTable::AddEntry()", "mat208", - FatalException, "Material Property Vector not found."); + else { + G4Exception("G4MaterialPropertiesTable::AddEntry()", "mat208", FatalException, + "Material Property Vector not found."); } - if(key == "RINDEX") - { + if (key == "RINDEX") { CalculateGROUPVEL(); } } -void G4MaterialPropertiesTable::AddEntry(const char* key, - G4double aPhotonEnergy, - G4double aPropertyValue) +void G4MaterialPropertiesTable::AddEntry( + const char* key, G4double aPhotonEnergy, G4double aPropertyValue) { AddEntry(G4String(key), aPhotonEnergy, aPropertyValue); } @@ -573,10 +499,8 @@ void G4MaterialPropertiesTable::DumpTable() const { // material properties G4int j = 0; - for(const auto& prop : fMP) - { - if(prop != nullptr) - { + for (const auto& prop : fMP) { + if (prop != nullptr) { G4cout << j << ": " << fMatPropNames[j] << G4endl; prop->DumpValues(); } @@ -584,12 +508,9 @@ void G4MaterialPropertiesTable::DumpTable() const } // material constant properties j = 0; - for(const auto& cprop : fMCP) - { - if(cprop.second) - { - G4cout << j << ": " << fMatConstPropNames[j] << " " << cprop.first - << G4endl; + for (const auto& cprop : fMCP) { + if (cprop.second) { + G4cout << j << ": " << fMatConstPropNames[j] << " " << cprop.first << G4endl; } ++j; } @@ -602,21 +523,18 @@ G4MaterialPropertyVector* G4MaterialPropertiesTable::CalculateGROUPVEL() #endif // check if "GROUPVEL" already exists. If so, remove it. - if(fMP[kGROUPVEL] != nullptr) - { + if (fMP[kGROUPVEL] != nullptr) { this->RemoveProperty("GROUPVEL"); } // fetch RINDEX data, give up if unavailable G4MaterialPropertyVector* rindex = this->GetProperty(kRINDEX); - if(rindex == nullptr) - { + if (rindex == nullptr) { return nullptr; } // RINDEX exists but has no entries, give up - if(rindex->GetVectorLength() == 0) - { + if (rindex->GetVectorLength() == 0) { return nullptr; } @@ -629,24 +547,21 @@ G4MaterialPropertyVector* G4MaterialPropertiesTable::CalculateGROUPVEL() G4double E0 = rindex->Energy(0); G4double n0 = (*rindex)[0]; - if(E0 <= 0.) - { - G4Exception("G4MaterialPropertiesTable::CalculateGROUPVEL()", "mat211", - FatalException, "Optical Photon Energy <= 0"); + if (E0 <= 0.) { + G4Exception("G4MaterialPropertiesTable::CalculateGROUPVEL()", "mat211", FatalException, + "Optical Photon Energy <= 0"); } - if(rindex->GetVectorLength() >= 2) - { + if (rindex->GetVectorLength() >= 2) { // good, we have at least two entries in RINDEX // get next energy/value pair G4double E1 = rindex->Energy(1); G4double n1 = (*rindex)[1]; - if(E1 <= 0.) - { - G4Exception("G4MaterialPropertiesTable::CalculateGROUPVEL()", "mat212", - FatalException, "Optical Photon Energy <= 0"); + if (E1 <= 0.) { + G4Exception("G4MaterialPropertiesTable::CalculateGROUPVEL()", "mat212", FatalException, + "Optical Photon Energy <= 0"); } G4double vg; @@ -655,21 +570,18 @@ G4MaterialPropertyVector* G4MaterialPropertiesTable::CalculateGROUPVEL() vg = c_light / (n0 + (n1 - n0) / G4Log(E1 / E0)); // allow only for 'normal dispersion' -> dn/d(logE) > 0 - if((vg < 0) || (vg > c_light / n0)) - { + if ((vg < 0) || (vg > c_light / n0)) { vg = c_light / n0; } groupvel->InsertValues(E0, vg); // add entries at midpoints between remaining photon energies - for(std::size_t i = 2; i < rindex->GetVectorLength(); ++i) - { + for (std::size_t i = 2; i < rindex->GetVectorLength(); ++i) { vg = c_light / (0.5 * (n0 + n1) + (n1 - n0) / G4Log(E1 / E0)); // allow only for 'normal dispersion' -> dn/d(logE) > 0 - if((vg < 0) || (vg > c_light / (0.5 * (n0 + n1)))) - { + if ((vg < 0) || (vg > c_light / (0.5 * (n0 + n1)))) { vg = c_light / (0.5 * (n0 + n1)); } groupvel->InsertValues(0.5 * (E0 + E1), vg); @@ -680,10 +592,9 @@ G4MaterialPropertyVector* G4MaterialPropertiesTable::CalculateGROUPVEL() E1 = rindex->Energy(i); n1 = (*rindex)[i]; - if(E1 <= 0.) - { - G4Exception("G4MaterialPropertiesTable::CalculateGROUPVEL()", "mat213", - FatalException, "Optical Photon Energy <= 0"); + if (E1 <= 0.) { + G4Exception("G4MaterialPropertiesTable::CalculateGROUPVEL()", "mat213", FatalException, + "Optical Photon Energy <= 0"); } } @@ -691,8 +602,7 @@ G4MaterialPropertyVector* G4MaterialPropertiesTable::CalculateGROUPVEL() vg = c_light / (n1 + (n1 - n0) / G4Log(E1 / E0)); // allow only for 'normal dispersion' -> dn/d(logE) > 0 - if((vg < 0) || (vg > c_light / n1)) - { + if ((vg < 0) || (vg > c_light / n1)) { vg = c_light / n1; } groupvel->InsertValues(E1, vg); diff --git a/source/materials/src/G4MicroElecMaterialStructure.cc b/source/materials/src/G4MicroElecMaterialStructure.cc index fe2e17f4e93..fcbf88a65a0 100644 --- a/source/materials/src/G4MicroElecMaterialStructure.cc +++ b/source/materials/src/G4MicroElecMaterialStructure.cc @@ -22,10 +22,9 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + // G4MicroElecMaterialStructure.cc, 2011/08/29 A.Valentin, M. Raine are with CEA [a] -// 2020/05/20 P. Caron, C. Inguimbert are with ONERA [b] +// 2020/05/20 P. Caron, C. Inguimbert are with ONERA [b] // Q. Gibaru is with CEA [a], ONERA [b] and CNES [c] // M. Raine and D. Lambert are with CEA [a] // @@ -35,7 +34,7 @@ // [c] CNES, 18 av.E.Belin, 31401 Toulouse CEDEX, France // // Based on the following publications -// - A.Valentin, M. Raine, +// - A.Valentin, M. Raine, // Inelastic cross-sections of low energy electrons in silicon // for the simulation of heavy ion tracks with the Geant4-DNA toolkit, // NSS Conf. Record 2010, pp. 80-85 @@ -50,30 +49,28 @@ // https://doi.org/10.1016/j.nimb.2012.07.028 // // - M. Raine, M. Gaillardin, P. Paillet -// Geant4 physics processes for silicon microdosimetry simulation: +// Geant4 physics processes for silicon microdosimetry simulation: // Improvements and extension of the energy-range validity up to 10 GeV/nucleon // NIM B, vol. 325, pp. 97-100, 2014 // https://doi.org/10.1016/j.nimb.2014.01.014 // // - J. Pierron, C. Inguimbert, M. Belhaj, T. Gineste, J. Puech, M. Raine -// Electron emission yield for low energy electrons: +// Electron emission yield for low energy electrons: // Monte Carlo simulation and experimental comparison for Al, Ag, and Si -// Journal of Applied Physics 121 (2017) 215107. +// Journal of Applied Physics 121 (2017) 215107. // https://doi.org/10.1063/1.4984761 // // - P. Caron, // Study of Electron-Induced Single-Event Upset in Integrated Memory Devices // PHD, 16th October 2019 // -// - Q.Gibaru, C.Inguimbert, P.Caron, M.Raine, D.Lambert, J.Puech, -// Geant4 physics processes for microdosimetry and secondary electron emission simulation : +// - Q.Gibaru, C.Inguimbert, P.Caron, M.Raine, D.Lambert, J.Puech, +// Geant4 physics processes for microdosimetry and secondary electron emission simulation : // Extension of MicroElec to very low energies and new materials // NIM B, 2020, in review. -// -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "G4MicroElecMaterialStructure.hh" + #include "G4SystemOfUnits.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... @@ -93,117 +90,115 @@ G4MicroElecMaterialStructure::G4MicroElecMaterialStructure(const G4String& matNa //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4MicroElecMaterialStructure::ReadMaterialFile() +void G4MicroElecMaterialStructure::ReadMaterialFile() { const char* path = G4FindDataDir("G4LEDATA"); if (materialName[0] == 'G' && materialName[1] == '4') { - //in the case the NIST database is used + // in the case the NIST database is used materialName.erase(0, 1); materialName.erase(0, 1); materialName.erase(0, 1); } - + std::ostringstream fileName; fileName << path << "/microelec/Structure/Data_" + materialName + ".dat"; std::ifstream fichier(fileName.str().c_str()); - + int varLength = 0; G4String nameParameter; - - G4String unitName; + + G4String unitName; G4double unitValue; G4double data; - G4String filler; + G4String filler; G4String type; - - if (fichier) - { - fichier >> filler >> type; - materialName = filler; - if (type == "Compound") {isCompound = true; Z = 0; } - else { isCompound = false; Z = std::stoi(type); } - while(!fichier.eof()) { - - getline(fichier, filler); - std::stringstream line(filler); - - if (filler[0] == '#' || filler.empty()) {continue;} - - line >> varLength; - line >> nameParameter; - line >> unitName; - unitValue = ConvertUnit(unitName); - - for (int i = 0; i < varLength; i++) - { - line >> data; data = data*unitValue; - - if(nameParameter == "WorkFunction") - { - workFunction = data; - } - if(nameParameter == "EnergyGap") - { - energyGap = data; - } - if(nameParameter == "EnergyPeak") - { - energyConstant.push_back(data); - } - if(nameParameter == "EnergyLimit") - { - LimitEnergy.push_back(data); - } - if(nameParameter == "EADL") - { - EADL_Enumerator.push_back(data); + if (fichier) { + fichier >> filler >> type; + materialName = filler; + if (type == "Compound") { + isCompound = true; + Z = 0; + } + else { + isCompound = false; + Z = std::stoi(type); + } + while (! fichier.eof()) { + getline(fichier, filler); + std::stringstream line(filler); + + if (filler[0] == '#' || filler.empty()) { + continue; } - if (nameParameter == "WeaklyBoundShell") - {if (data == 0) { isShellWeaklyBoundVector.push_back(false); } - else {isShellWeaklyBoundVector.push_back(true);}} + line >> varLength; + line >> nameParameter; + line >> unitName; + unitValue = ConvertUnit(unitName); + + for (int i = 0; i < varLength; i++) { + line >> data; + data = data * unitValue; + + if (nameParameter == "WorkFunction") { + workFunction = data; + } + if (nameParameter == "EnergyGap") { + energyGap = data; + } - if(nameParameter == "WeaklyBoundInitialEnergy") - { + if (nameParameter == "EnergyPeak") { + energyConstant.push_back(data); + } + if (nameParameter == "EnergyLimit") { + LimitEnergy.push_back(data); + } + if (nameParameter == "EADL") { + EADL_Enumerator.push_back(data); + } + + if (nameParameter == "WeaklyBoundShell") { + if (data == 0) { + isShellWeaklyBoundVector.push_back(false); + } + else { + isShellWeaklyBoundVector.push_back(true); + } + } + + if (nameParameter == "WeaklyBoundInitialEnergy") { initialEnergy = data; } - if(nameParameter == "ShellAtomicNumber") - { + if (nameParameter == "ShellAtomicNumber") { compoundShellZ.push_back(data); } - if(nameParameter == "DielectricModelLowEnergyLimit_e") - { + if (nameParameter == "DielectricModelLowEnergyLimit_e") { limitInelastic[0] = data; } - if(nameParameter == "DielectricModelHighEnergyLimit_e") - { + if (nameParameter == "DielectricModelHighEnergyLimit_e") { limitInelastic[1] = data; } - if(nameParameter == "DielectricModelLowEnergyLimit_p") - { + if (nameParameter == "DielectricModelLowEnergyLimit_p") { limitInelastic[2] = data; } - if(nameParameter == "DielectricModelHighEnergyLimit_p") - { + if (nameParameter == "DielectricModelHighEnergyLimit_p") { limitInelastic[3] = data; } - if(nameParameter == "ElasticModelLowEnergyLimit") - { + if (nameParameter == "ElasticModelLowEnergyLimit") { limitElastic[0] = data; } - if(nameParameter == "ElasticModelHighEnergyLimit") - { + if (nameParameter == "ElasticModelHighEnergyLimit") { limitElastic[1] = data; } - } } - fichier.close(); // on ferme le fichier } + fichier.close(); // on ferme le fichier + } else { G4String str = "file "; str += fileName.str() + " not found!"; @@ -223,19 +218,14 @@ G4double G4MicroElecMaterialStructure::Energy(G4int level) G4double G4MicroElecMaterialStructure::GetZ(G4int Shell) { if (Shell >= 0 && Shell < nLevels) { - if(!isCompound) - { + if (! isCompound) { return Z; } - else - { - return compoundShellZ[Shell]; - } - } - else - { - return 0; + + return compoundShellZ[Shell]; } + + return 0; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... @@ -243,24 +233,19 @@ G4double G4MicroElecMaterialStructure::GetZ(G4int Shell) G4double G4MicroElecMaterialStructure::ConvertUnit(const G4String& unitName) { G4double unitValue = 0; - if(unitName == "meV") - { + if (unitName == "meV") { unitValue = 1e-3 * CLHEP::eV; } - else if(unitName == "eV") - { + else if (unitName == "eV") { unitValue = CLHEP::eV; } - else if(unitName == "keV") - { + else if (unitName == "keV") { unitValue = CLHEP::keV; } - else if(unitName == "MeV") - { + else if (unitName == "MeV") { unitValue = CLHEP::MeV; } - else if(unitName == "noUnit") - { + else if (unitName == "noUnit") { unitValue = 1; } @@ -272,7 +257,9 @@ G4double G4MicroElecMaterialStructure::ConvertUnit(const G4String& unitName) G4double G4MicroElecMaterialStructure::GetLimitEnergy(G4int level) { G4double E = LimitEnergy[level]; - if (IsShellWeaklyBound(level)) { E = energyGap+ initialEnergy; } + if (IsShellWeaklyBound(level)) { + E = energyGap + initialEnergy; + } return E; } @@ -281,12 +268,10 @@ G4double G4MicroElecMaterialStructure::GetLimitEnergy(G4int level) G4double G4MicroElecMaterialStructure::GetInelasticModelLowLimit(G4int pdg) { G4double res = 0.0; - if(pdg == 11) - { + if (pdg == 11) { res = limitInelastic[0]; } - else if(pdg == 2212) - { + else if (pdg == 2212) { res = limitInelastic[2]; } return res; @@ -297,12 +282,10 @@ G4double G4MicroElecMaterialStructure::GetInelasticModelLowLimit(G4int pdg) G4double G4MicroElecMaterialStructure::GetInelasticModelHighLimit(G4int pdg) { G4double res = 0.0; - if(pdg == 11) - { + if (pdg == 11) { res = limitInelastic[1]; } - else if(pdg == 2212) - { + else if (pdg == 2212) { res = limitInelastic[3]; } return res; @@ -314,6 +297,3 @@ G4bool G4MicroElecMaterialStructure::IsShellWeaklyBound(G4int level) { return isShellWeaklyBoundVector[level]; } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - diff --git a/source/materials/src/G4MicroElecSiStructure.cc b/source/materials/src/G4MicroElecSiStructure.cc index 5aaadf8bd53..7e4f27f2e9f 100644 --- a/source/materials/src/G4MicroElecSiStructure.cc +++ b/source/materials/src/G4MicroElecSiStructure.cc @@ -22,8 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + // G4MicroElecSiStructure.cc, 2011/08/29 A.Valentin, M. Raine // // Based on the following publications @@ -38,19 +37,19 @@ // very low energy electromagnetic models for protons and // heavy ions in Si, NIM B, vol. 287, pp. 124 - 129, 2012. // -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "G4MicroElecSiStructure.hh" + #include "G4SystemOfUnits.hh" -G4MicroElecSiStructure::G4MicroElecSiStructure(): nLevels(6) +G4MicroElecSiStructure::G4MicroElecSiStructure() { - energyConstant.push_back(16.65*eV); - energyConstant.push_back(6.52*eV); - energyConstant.push_back(13.63*eV); - energyConstant.push_back(107.98*eV); - energyConstant.push_back(151.55*eV); - energyConstant.push_back(1828.5*eV); + energyConstant.push_back(16.65 * eV); + energyConstant.push_back(6.52 * eV); + energyConstant.push_back(13.63 * eV); + energyConstant.push_back(107.98 * eV); + energyConstant.push_back(151.55 * eV); + energyConstant.push_back(1828.5 * eV); nLevels = (G4int)energyConstant.size(); } @@ -59,8 +58,7 @@ G4double G4MicroElecSiStructure::Energy(G4int level) { G4double energ = 0.; - if(level >= 0 && level < nLevels) - { + if (level >= 0 && level < nLevels) { energ = energyConstant[level]; } diff --git a/source/materials/src/G4NistElementBuilder.cc b/source/materials/src/G4NistElementBuilder.cc index bf6a75199fa..23d8158d1fd 100644 --- a/source/materials/src/G4NistElementBuilder.cc +++ b/source/materials/src/G4NistElementBuilder.cc @@ -22,8 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + // ------------------------------------------------------------------- // // GEANT4 Class file @@ -35,10 +34,10 @@ // Creation date: 23.12.2004 // // Modifications: -// 02.05.2006 Subtract mass of atomic electrons from NIST mass (VI) -// 11.05.2006 Do not subtract mass of atomic electrons from NIST mass (VI) -// 17.10.2006 Add natiral abundances flag to element and -// use G4 units for isotope mass vector (VI) +// 02.05.2006 Subtract mass of atomic electrons from NIST mass (VI) +// 11.05.2006 Do not subtract mass of atomic electrons from NIST mass (VI) +// 17.10.2006 Add natiral abundances flag to element and +// use G4 units for isotope mass vector (VI) // 10.05.2007 Add protection agains Z>101 (VI) // 26.07.2007 Create one and only one Nist element with given Z and // allow users to create there own elements with the same Z (VI) @@ -49,33 +48,29 @@ // // Element data from the NIST DB on Atomic Weights and Isotope Compositions // http://physics.nist.gov/PhysRefData/Compositions/index.html -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -#include #include "G4NistElementBuilder.hh" + +#include "G4AutoLock.hh" #include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" -#include "G4AutoLock.hh" + +#include namespace { - G4Mutex nistElementMutex = G4MUTEX_INITIALIZER; +G4Mutex nistElementMutex = G4MUTEX_INITIALIZER; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4NistElementBuilder::G4NistElementBuilder(G4int vb): - verbose(vb) +G4NistElementBuilder::G4NistElementBuilder(G4int vb) : verbose(vb) { nFirstIsotope[0] = 0; nIsotopes[0] = 0; relAbundance[0] = 0.0; Initialise(); - for(int& i : elmIndex) - { + for (int& i : elmIndex) { i = -1; } } @@ -86,7 +81,9 @@ G4int G4NistElementBuilder::GetZ(const G4String& name) const { G4int Z = maxNumElements; // Loop checking, 07-Aug-2015, Vladimir Ivanchenko - do {--Z;} while( Z>0 && elmSymbol[Z] != name); + do { + --Z; + } while (Z > 0 && elmSymbol[Z] != name); return Z; } @@ -96,7 +93,9 @@ G4double G4NistElementBuilder::GetAtomicMassAmu(const G4String& name) const { G4int Z = maxNumElements; // Loop checking, 07-Aug-2015, Vladimir Ivanchenko - do {--Z;} while( Z>0 && elmSymbol[Z] != name); + do { + --Z; + } while (Z > 0 && elmSymbol[Z] != name); return GetAtomicMassAmu(Z); } @@ -105,7 +104,7 @@ G4double G4NistElementBuilder::GetAtomicMassAmu(const G4String& name) const G4Element* G4NistElementBuilder::FindOrBuildElement(G4int Z, G4bool) { G4Element* anElement = FindElement(Z); - if(anElement == nullptr && Z > 0 && Z < maxNumElements) { + if (anElement == nullptr && Z > 0 && Z < maxNumElements) { anElement = BuildElement(Z); } return anElement; @@ -113,23 +112,22 @@ G4Element* G4NistElementBuilder::FindOrBuildElement(G4int Z, G4bool) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4Element* -G4NistElementBuilder::FindOrBuildElement(const G4String& symb, G4bool) +G4Element* G4NistElementBuilder::FindOrBuildElement(const G4String& symb, G4bool) { G4Element* elm = nullptr; const G4ElementTable* theElementTable = G4Element::GetElementTable(); size_t nelm = theElementTable->size(); - for(size_t i=0; iGetSymbol()) { + for (size_t i = 0; i < nelm; ++i) { + if (symb == ((*theElementTable)[i])->GetSymbol()) { elm = (*theElementTable)[i]; break; } } - if(nullptr == elm) { - for(G4int Z = 1; Z=maxNumElements) { return theElement; } + if (Z < 1 || Z >= maxNumElements) { + return theElement; + } G4AutoLock l(&nistElementMutex); - if(0 <= elmIndex[Z]) { + if (0 <= elmIndex[Z]) { // Nist element was already built const G4ElementTable* theTable = G4Element::GetElementTable(); - theElement = (*theTable)[elmIndex[Z]]; - } else { + theElement = (*theTable)[elmIndex[Z]]; + } + else { G4double Aeff = atomicMass[Z]; if (verbose > 1) { - G4cout << "G4NistElementBuilder: Build Element <" << elmSymbol[Z] - << "> Z= " << Z << " Aeff= " << Aeff; - G4cout << " with natural isotope composition" << G4endl; + G4cout << "G4NistElementBuilder: Build Element <" << elmSymbol[Z] << "> Z= " << Z + << " Aeff= " << Aeff; + G4cout << " with natural isotope composition" << G4endl; } - - //build Element with its Isotopes + + // build Element with its Isotopes // - G4int nc = nIsotopes[Z]; - G4int n0 = nFirstIsotope[Z]; + G4int nc = nIsotopes[Z]; + G4int n0 = nFirstIsotope[Z]; G4int idx = idxIsotopes[Z]; std::vector iso; G4Isotope* ist; - for (G4int i=0; i 0.0) { - std::ostringstream os; - os << elmSymbol[Z] << n0 + i; - ist = new G4Isotope(os.str(), Z, n0 + i, - GetAtomicMass(Z, n0 + i)*g/(mole*amu_c2)); - /* - G4cout << " Z= " << Z << " N= " << n0 + i - << " miso(amu)= " << GetIsotopeMass(Z, n0 + i)/amu_c2 - << " matom(amu)= " << GetAtomicMass(Z, n0 + i)/amu_c2 << G4endl; - */ - iso.push_back(ist); + std::ostringstream os; + os << elmSymbol[Z] << n0 + i; + ist = new G4Isotope(os.str(), Z, n0 + i, GetAtomicMass(Z, n0 + i) * g / (mole * amu_c2)); + /* + G4cout << " Z= " << Z << " N= " << n0 + i + << " miso(amu)= " << GetIsotopeMass(Z, n0 + i)/amu_c2 + << " matom(amu)= " << GetAtomicMass(Z, n0 + i)/amu_c2 << G4endl; + */ + iso.push_back(ist); } } - G4int ni = (G4int)iso.size(); + auto ni = (G4int)iso.size(); G4double w; - theElement = new G4Element(elmSymbol[Z],elmSymbol[Z],ni); - for(G4int j=0; jGetN() - n0]; ist = iso[j]; theElement->AddIsotope(ist, w); } theElement->SetNaturalAbundanceFlag(true); elmIndex[Z] = (G4int)theElement->GetIndex(); - } + } l.unlock(); return theElement; } @@ -197,93 +197,95 @@ G4Element* G4NistElementBuilder::BuildElement(G4int Z) void G4NistElementBuilder::PrintElement(G4int Z) const { G4int imin = Z; - G4int imax = Z+1; + G4int imax = Z + 1; if (Z == 0) { imin = 1; imax = maxNumElements; } - if(imax > maxNumElements) { imax = maxNumElements; } + if (imax > maxNumElements) { + imax = maxNumElements; + } - for(G4int i=imin; i Z= " << i - << " Aeff(amu)= " << atomicMass[i] << " " - << nc << " isotopes:" - << G4endl; + G4cout << "Nist Element: <" << elmSymbol[i] << "> Z= " << i << " Aeff(amu)= " << atomicMass[i] + << " " << nc << " isotopes:" << G4endl; G4int j; G4int idx = idxIsotopes[i]; - G4int n0 = nFirstIsotope[i]; + G4int n0 = nFirstIsotope[i]; G4cout << " N: "; - for(j=0; j 1) { + if (verbose > 1) { G4cout << "AddElement " << name << " Z= " << Z << " nc= " << nc << G4endl; } if (Z >= maxNumElements) { - G4cout << "G4NistElementBuilder::AddElement: Warning! Z= " << Z - << " is too big" << G4endl; + G4cout << "G4NistElementBuilder::AddElement: Warning! Z= " << Z << " is too big" << G4endl; return; } - - if (index+nc >= maxAbundance) { - G4cout << "G4NistElementBuilder::AddElement: ERROR index= " << index - << " + nc= " << nc + + if (index + nc >= maxAbundance) { + G4cout << "G4NistElementBuilder::AddElement: ERROR index= " << index << " + nc= " << nc << " is above array size " << maxAbundance << G4endl; return; } - elmSymbol[Z] = name; - atomicMass[Z] = 0.0; + elmSymbol[Z] = name; + atomicMass[Z] = 0.0; idxIsotopes[Z] = index; - nIsotopes[Z] = nc; + nIsotopes[Z] = nc; nFirstIsotope[Z] = (&N)[0]; G4double ww = 0.0; G4double www; - for(G4int i=0; i 1) { PrintElement(Z); } - else if(1 == verbose) { - G4cout << "Nist Element " << elmSymbol[Z] - << " Z= " << Z - << " Aeff(amu)= " << atomicMass[Z] << " " - << nIsotopes[Z] << " isotopes:" - << G4endl; + if (verbose > 1) { + PrintElement(Z); + } + else if (1 == verbose) { + G4cout << "Nist Element " << elmSymbol[Z] << " Z= " << Z << " Aeff(amu)= " << atomicMass[Z] + << " " << nIsotopes[Z] << " isotopes:" << G4endl; } } @@ -291,2227 +293,1710 @@ void G4NistElementBuilder::AddElement(const G4String& name, G4int Z, G4int nc, void G4NistElementBuilder::Initialise() { - // Parameterisation from D.Lunney,J.M.Pearson,C.Thibault, - // Rev.Mod.Phys. 75 (2003) 1021 + // Parameterisation from D.Lunney,J.M.Pearson,C.Thibault, + // Rev.Mod.Phys. 75 (2003) 1021 bindingEnergy[0] = 0.0; - for(G4int i=1; isize(); size_t i; - for(i=0; isize(); - for(i=0; isize(); - for(i=0; i cannot be built because material" - << " with the same name already exists." << G4endl; - G4Exception("G4NistManager::BuildMaterialWithNewDensity()", "mat101", - FatalException, "Wrong material name"); + << " with the same name already exists." << G4endl; + G4Exception("G4NistManager::BuildMaterialWithNewDensity()", "mat101", FatalException, + "Wrong material name"); return nullptr; } bmat = FindOrBuildMaterial(basename); - if(bmat == nullptr) - { + if (bmat == nullptr) { G4cout << "G4NistManager::BuildMaterialWithNewDensity ERROR: " << G4endl; - G4cout << " New material <" << name << "> cannot be built because " - << G4endl; + G4cout << " New material <" << name << "> cannot be built because " << G4endl; G4cout << " base material <" << basename << "> does not exist." << G4endl; - G4Exception("G4NistManager::BuildMaterialWithNewDensity()", "mat102", - FatalException, "Wrong material name"); + G4Exception("G4NistManager::BuildMaterialWithNewDensity()", "mat102", FatalException, + "Wrong material name"); return nullptr; } G4double dens = density; G4double temp = temperature; G4double pres = pressure; - if(dens == 0.0) { + if (dens == 0.0) { dens = bmat->GetDensity(); temp = bmat->GetTemperature(); - pres = bmat->GetPressure(); + pres = bmat->GetPressure(); } - G4Material* mat = new G4Material(name, dens, bmat, bmat->GetState(), - temp, pres); + auto mat = new G4Material(name, dens, bmat, bmat->GetState(), temp, pres); return mat; } - + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4NistManager::PrintElement(const G4String& symbol) const { - if (symbol == "all") { elmBuilder->PrintElement(0); } - else { elmBuilder->PrintElement(elmBuilder->GetZ(symbol)); } + if (symbol == "all") { + elmBuilder->PrintElement(0); + } + else { + elmBuilder->PrintElement(elmBuilder->GetZ(symbol)); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -167,9 +153,9 @@ void G4NistManager::PrintG4Element(const G4String& name) const { const G4ElementTable* theElementTable = G4Element::GetElementTable(); size_t nelm = theElementTable->size(); - for(size_t i=0; iGetName() || "all" == name) { + if (name == elm->GetName() || "all" == name) { G4cout << *elm << G4endl; } } @@ -181,9 +167,9 @@ void G4NistManager::PrintG4Material(const G4String& name) const { const G4MaterialTable* theMaterialTable = G4Material::GetMaterialTable(); size_t nmat = theMaterialTable->size(); - for(size_t i=0; iGetName() || "all" == name) { + if (name == mat->GetName() || "all" == name) { G4cout << *mat << G4endl; } } @@ -202,24 +188,24 @@ void G4NistManager::SetVerbose(G4int val) G4NistManager::G4NistManager() { - nElements = 0; + nElements = 0; nMaterials = 0; - verbose = 0; + verbose = 0; elmBuilder = new G4NistElementBuilder(verbose); - matBuilder = new G4NistMaterialBuilder(elmBuilder,verbose); - - messenger = new G4NistMessenger(this); + matBuilder = new G4NistMaterialBuilder(elmBuilder, verbose); + + messenger = new G4NistMessenger(this); g4pow = G4Pow::GetInstance(); // compute frequently used values for mean atomic numbers - for(G4int j=1; j<101; ++j) { + for (G4int j = 1; j < 101; ++j) { G4double A = elmBuilder->GetAtomicMassAmu(j); - POWERA27[j] = std::pow(A,0.27); - LOGAZ[j] = std::log(A); + POWERA27[j] = std::pow(A, 0.27); + LOGAZ[j] = std::log(A); } POWERA27[0] = 1.0; - LOGAZ[0] = 0.0; + LOGAZ[0] = 0.0; fICRU90 = nullptr; } @@ -227,10 +213,9 @@ G4NistManager::G4NistManager() G4ICRU90StoppingData* G4NistManager::GetICRU90StoppingData() { - if(fICRU90 == nullptr) - { + if (fICRU90 == nullptr) { G4AutoLock l(&nistManagerMutex); - if(fICRU90 == nullptr) { + if (fICRU90 == nullptr) { fICRU90 = new G4ICRU90StoppingData(); } l.unlock(); @@ -240,14 +225,14 @@ G4ICRU90StoppingData* G4NistManager::GetICRU90StoppingData() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void G4NistManager::SetDensityEffectCalculatorFlag(const G4String& mname, - G4bool val) +void G4NistManager::SetDensityEffectCalculatorFlag(const G4String& mname, G4bool val) { - if(mname == "all") { - for(auto mat : materials) { + if (mname == "all") { + for (auto mat : materials) { SetDensityEffectCalculatorFlag(mat, val); } - } else { + } + else { G4Material* mat = FindMaterial(mname); SetDensityEffectCalculatorFlag(mat, val); } @@ -257,10 +242,7 @@ void G4NistManager::SetDensityEffectCalculatorFlag(const G4String& mname, void G4NistManager::SetDensityEffectCalculatorFlag(G4Material* mat, G4bool val) { - if(mat != nullptr) - { + if (mat != nullptr) { mat->ComputeDensityEffectOnFly(val); } } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/materials/src/G4NistMaterialBuilder.cc b/source/materials/src/G4NistMaterialBuilder.cc index b3a9568ed75..bae15bf09d6 100644 --- a/source/materials/src/G4NistMaterialBuilder.cc +++ b/source/materials/src/G4NistMaterialBuilder.cc @@ -22,8 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + // ------------------------------------------------------------------- // // GEANT4 Class file @@ -49,15 +48,15 @@ // BioChemicalMaterials() and SpaceMaterials(), // where new materials are introduced // 14.06.11 A.Ivantchenko updated body materials (G4_....ICRP) -// according ICRU Report 46 (1992) instead of 1975 +// according ICRU Report 46 (1992) instead of 1975 // data from ICRU Report 37 used previously // 26.10.11 new scheme for G4Exception (mma) // 09.02.12 P.Gumplinger add ConstructNewIdealGasMaterial // 30.04.13 M.Trocme & S.Seltzer: -// - Replace AddElementByWeightFraction() by AddElementByAtomCount() +// - Replace AddElementByWeightFraction() by AddElementByAtomCount() // as much as possible -// - Comment out ill-defined material GLUCOSE -// - Fixed density and atom composition of POLYCHLOROSTYRENE, +// - Comment out ill-defined material GLUCOSE +// - Fixed density and atom composition of POLYCHLOROSTYRENE, // POLYVINYL_BUTYRAL, TERPHENYL // ------------------------------------------------------------------- // @@ -65,98 +64,93 @@ // // Element data from the NIST DB on Atomic Weights and Isotope Compositions // http://physics.nist.gov/PhysRefData/Compositions/index.html -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "G4NistMaterialBuilder.hh" -#include "G4NistElementBuilder.hh" + +#include "G4ApplicationState.hh" +#include "G4AutoLock.hh" #include "G4Element.hh" +#include "G4NistElementBuilder.hh" #include "G4PhysicalConstants.hh" -#include "G4SystemOfUnits.hh" -#include "G4ApplicationState.hh" #include "G4StateManager.hh" -#include "G4AutoLock.hh" +#include "G4SystemOfUnits.hh" + #include namespace { - G4Mutex nistMaterialMutex = G4MUTEX_INITIALIZER; +G4Mutex nistMaterialMutex = G4MUTEX_INITIALIZER; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4NistMaterialBuilder::G4NistMaterialBuilder(G4NistElementBuilder* eb, G4int vb) -: elmBuilder(eb), - verbose(vb), - nMaterials(0), - nComponents(0), - nCurrent(0) + : elmBuilder(eb), verbose(vb) { Initialise(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4Material* G4NistMaterialBuilder::FindOrBuildMaterial(const G4String& matname, - G4bool warning) +G4Material* G4NistMaterialBuilder::FindOrBuildMaterial(const G4String& matname, G4bool warning) { - if(verbose > 1) { - G4cout << "G4NistMaterialBuilder::FindOrBuildMaterial " - << matname << G4endl; + if (verbose > 1) { + G4cout << "G4NistMaterialBuilder::FindOrBuildMaterial " << matname << G4endl; } G4String name = matname; - if("G4_NYLON-6/6" == matname) { name = "G4_NYLON-6-6"; } - else if(name == "G4_NYLON-6/10") { name = "G4_NYLON-6-10"; } + if ("G4_NYLON-6/6" == matname) { + name = "G4_NYLON-6-6"; + } + else if (name == "G4_NYLON-6/10") { + name = "G4_NYLON-6-10"; + } G4Material* mat = FindMaterial(name); - if(mat != nullptr) { return mat; } + if (mat != nullptr) { + return mat; + } mat = BuildNistMaterial(name, warning); - return mat; + return mat; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4Material* G4NistMaterialBuilder::BuildNistMaterial(const G4String& name, - G4bool warning) +G4Material* G4NistMaterialBuilder::BuildNistMaterial(const G4String& name, G4bool warning) { G4Material* mat = nullptr; // Check if name inside DB - for (G4int i=0; i 1) { + if ((verbose == 1 && warning) || verbose > 1) { G4cout << "G4NistMaterialBuilder::FindOrBuildMaterial WARNING:" - << " material <" << name - << "> is not found." << G4endl; + << " material <" << name << "> is not found." << G4endl; } return mat; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4Material* -G4NistMaterialBuilder::FindOrBuildSimpleMaterial(G4int Z, G4bool warn) +G4Material* G4NistMaterialBuilder::FindOrBuildSimpleMaterial(G4int Z, G4bool warn) { G4Material* mat = FindSimpleMaterial(Z); - if(mat == nullptr) { - mat = BuildNistMaterial(names[Z], warn); + if (mat == nullptr) { + mat = BuildNistMaterial(names[Z], warn); } - return mat; + return mat; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -164,19 +158,19 @@ G4NistMaterialBuilder::FindOrBuildSimpleMaterial(G4int Z, G4bool warn) G4Material* G4NistMaterialBuilder::BuildMaterial(G4int i) { G4Material* mat = nullptr; - if(i >= nMaterials) { return mat; } + if (i >= nMaterials) { + return mat; + } G4AutoLock l(&nistMaterialMutex); - if(matIndex[i] >= 0) { + if (matIndex[i] >= 0) { // Nist material was already built - const G4MaterialTable* theMaterialTable = - G4Material::GetMaterialTable(); + const G4MaterialTable* theMaterialTable = G4Material::GetMaterialTable(); mat = (*theMaterialTable)[matIndex[i]]; - - } else { + } + else { if (verbose > 1) { - G4cout << "G4NistMaterialBuilder: BuildMaterial #" << i - << G4endl; + G4cout << "G4NistMaterialBuilder: BuildMaterial #" << i << G4endl; } G4int nc = components[i]; @@ -185,40 +179,42 @@ G4Material* G4NistMaterialBuilder::BuildMaterial(G4int i) // defaults may be changed via AddGas() method G4double t = NTP_Temperature; G4double p = STP_Pressure; - if(kStateGas == states[i]) { + if (kStateGas == states[i]) { size_t nn = idxGas.size(); - if(nn > 0) { - for(size_t j=0; j 0) { + for (size_t j = 0; j < nn; ++j) { + if (i == idxGas[j]) { + t = gasTemperature[j]; + p = gasPressure[j]; + break; + } + } } } - mat = new G4Material(names[i],densities[i],nc,states[i],t,p); + mat = new G4Material(names[i], densities[i], nc, states[i], t, p); - if (verbose>1) { G4cout << "New material nComponents= " << nc << G4endl; } + if (verbose > 1) { + G4cout << "New material nComponents= " << nc << G4endl; + } if (nc > 0) { G4int idx = indexes[i]; - for (G4int j=0; jFindOrBuildElement(Z); - if(el == nullptr) - { - G4cout << "G4NistMaterialBuilder::BuildMaterial:" - << " ERROR: elements Z= " << Z << " is not found" - << " for material " << names[i] << G4endl; - G4Exception("G4NistMaterialBuilder::BuildMaterial()", "mat103", - FatalException, "Failed to construct material"); - return nullptr; - } - if(atomCount[i]) { - mat->AddElement(el,G4lrint(fractions[idx+j])); - } else { - mat->AddElement(el,fractions[idx+j]); - } + for (G4int j = 0; j < nc; ++j) { + G4int Z = elements[idx + j]; + G4Element* el = elmBuilder->FindOrBuildElement(Z); + if (el == nullptr) { + G4cout << "G4NistMaterialBuilder::BuildMaterial:" + << " ERROR: elements Z= " << Z << " is not found" + << " for material " << names[i] << G4endl; + G4Exception("G4NistMaterialBuilder::BuildMaterial()", "mat103", FatalException, + "Failed to construct material"); + return nullptr; + } + if (atomCount[i]) { + mat->AddElement(el, G4lrint(fractions[idx + j])); + } + else { + mat->AddElement(el, fractions[idx + j]); + } } } @@ -227,13 +223,17 @@ G4Material* G4NistMaterialBuilder::BuildMaterial(G4int i) G4IonisParamMat* ion = mat->GetIonisation(); G4double exc0 = ion->GetMeanExcitationEnergy(); G4double exc1 = exc0; - if(!chFormulas[i].empty()) { + if (! chFormulas[i].empty()) { mat->SetChemicalFormula(chFormulas[i]); exc1 = ion->FindMeanExcitationEnergy(mat); } // If exists, NIST DB data always overwrites other data - if(ionPotentials[i] > 0.0) { exc1 = ionPotentials[i]; } - if(exc0 != exc1) { ion->SetMeanExcitationEnergy(exc1); } + if (ionPotentials[i] > 0.0) { + exc1 = ionPotentials[i]; + } + if (exc0 != exc1) { + ion->SetMeanExcitationEnergy(exc1); + } // Index in Material Table matIndex[i] = (G4int)mat->GetIndex(); @@ -244,236 +244,202 @@ G4Material* G4NistMaterialBuilder::BuildMaterial(G4int i) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4Material* G4NistMaterialBuilder::ConstructNewMaterial( - const G4String& name, - const std::vector& elm, - const std::vector& nbAtoms, - G4double dens, - G4State state, - G4double temp, - G4double pres) +G4Material* G4NistMaterialBuilder::ConstructNewMaterial(const G4String& name, + const std::vector& elm, const std::vector& nbAtoms, G4double dens, G4State state, + G4double temp, G4double pres) { // Material is in DB G4Material* mat = FindOrBuildMaterial(name); - if(mat != nullptr) - { + if (mat != nullptr) { G4cout << "G4NistMaterialBuilder::ConstructNewMaterial:" - << " WARNING: the material <" << name - << "> already exists." << G4endl; - G4cout << " New material will NOT be built!" - << G4endl; + << " WARNING: the material <" << name << "> already exists." << G4endl; + G4cout << " New material will NOT be built!" << G4endl; return mat; } // Material not in DB - G4int els = (G4int)elm.size(); - if(els == 0) { + auto els = (G4int)elm.size(); + if (els == 0) { G4cout << "G4NistMaterialBuilder::ConstructNewMaterial:" - << " WARNING: empty list of elements for " << name - << G4endl; - G4cout << " New material will NOT be built!" - << G4endl; + << " WARNING: empty list of elements for " << name << G4endl; + G4cout << " New material will NOT be built!" << G4endl; return nullptr; - } + } // add parameters of material into internal vectors // density in g/cm3, mean ionisation potential is not defined G4bool stp = true; - if(state == kStateGas && - (temp != NTP_Temperature || pres != CLHEP::STP_Pressure)) - { stp = false; } + if (state == kStateGas && (temp != NTP_Temperature || pres != CLHEP::STP_Pressure)) { + stp = false; + } - AddMaterial(name,dens*CLHEP::cm3/CLHEP::g,0,0.,els,state,stp); - if(!stp) { AddGas(name,temp,pres); } + AddMaterial(name, dens * CLHEP::cm3 / CLHEP::g, 0, 0., els, state, stp); + if (! stp) { + AddGas(name, temp, pres); + } - for (G4int i=0; iGetZ(elm[i]), nbAtoms[i]); } - return BuildMaterial(nMaterials-1); + return BuildMaterial(nMaterials - 1); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4Material* G4NistMaterialBuilder::ConstructNewMaterial( - const G4String& name, - const std::vector& elm, - const std::vector& w, - G4double dens, - G4State state, - G4double temp, - G4double pres) +G4Material* G4NistMaterialBuilder::ConstructNewMaterial(const G4String& name, + const std::vector& elm, const std::vector& w, G4double dens, G4State state, + G4double temp, G4double pres) { // Material is in DB G4Material* mat = FindOrBuildMaterial(name); - if(mat != nullptr) - { + if (mat != nullptr) { G4cout << "G4NistMaterialBuilder::ConstructNewMaterial:" - << " WARNING: the material <" << name - << "> already exists." << G4endl; - G4cout << " New material will NOT be built!" - << G4endl; + << " WARNING: the material <" << name << "> already exists." << G4endl; + G4cout << " New material will NOT be built!" << G4endl; return mat; } // Material not in DB - G4int els = (G4int)elm.size(); - if(els == 0) { + auto els = (G4int)elm.size(); + if (els == 0) { G4cout << "G4NistMaterialBuilder::ConstructNewMaterial:" - << " WARNING: empty list of elements for " << name - << G4endl; - G4cout << " New material will NOT be built!" - << G4endl; + << " WARNING: empty list of elements for " << name << G4endl; + G4cout << " New material will NOT be built!" << G4endl; return nullptr; - } + } // add parameters of material into internal vectors // density in g/cm3, mean ionisation potential is not defined G4bool stp = true; - if(state == kStateGas && - (temp != NTP_Temperature || pres != CLHEP::STP_Pressure)) - { stp = false; } - AddMaterial(name,dens*CLHEP::cm3/CLHEP::g,0,0.,els,state,stp); - if(!stp) { AddGas(name,temp,pres); } + if (state == kStateGas && (temp != NTP_Temperature || pres != CLHEP::STP_Pressure)) { + stp = false; + } + AddMaterial(name, dens * CLHEP::cm3 / CLHEP::g, 0, 0., els, state, stp); + if (! stp) { + AddGas(name, temp, pres); + } - for (G4int i=0; iGetZ(elm[i]), w[i]); } - - return BuildMaterial(nMaterials-1); + + return BuildMaterial(nMaterials - 1); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4Material* G4NistMaterialBuilder::ConstructNewGasMaterial( - const G4String& name, - const G4String& nameDB, - G4double temp, - G4double pres) + const G4String& name, const G4String& nameDB, G4double temp, G4double pres) { // Material name is in DB G4Material* mat = FindOrBuildMaterial(name); - if(mat != nullptr) - { + if (mat != nullptr) { G4cout << "G4NistMaterialBuilder::ConstructNewGasMaterial:" - << " WARNING: the material <" << name - << "> already exists." << G4endl; - G4cout << " New material will NOT be built!" - << G4endl; + << " WARNING: the material <" << name << "> already exists." << G4endl; + G4cout << " New material will NOT be built!" << G4endl; return mat; } G4Material* bmat = FindOrBuildMaterial(nameDB); - if(bmat == nullptr) - { + if (bmat == nullptr) { G4cout << "G4NistMaterialBuilder::ConstructNewGasMaterial:" - << " WARNING: the Name <" << nameDB - << "> is NOT in the database: no new gas will be constructed." - << G4endl; + << " WARNING: the Name <" << nameDB + << "> is NOT in the database: no new gas will be constructed." << G4endl; return nullptr; } - if(bmat->GetState() != kStateGas) { + if (bmat->GetState() != kStateGas) { G4cout << "G4NistMaterialBuilder::ConstructNewGasMaterial:" - << " WARNING: <" << nameDB - << "> is NOT a gas - no new gas will be constructed." - << G4endl; + << " WARNING: <" << nameDB << "> is NOT a gas - no new gas will be constructed." + << G4endl; return nullptr; } - G4double dens = bmat->GetDensity()*pres*bmat->GetTemperature() - /(temp*bmat->GetPressure()); - mat = new G4Material(name,dens,bmat,kStateGas,temp,pres); + G4double dens = bmat->GetDensity() * pres * bmat->GetTemperature() / (temp * bmat->GetPressure()); + mat = new G4Material(name, dens, bmat, kStateGas, temp, pres); - if (verbose>1) { + if (verbose > 1) { G4cout << "G4NistMaterialBuilder::ConstructNewGasMaterial: done" << G4endl; - G4cout << &mat << G4endl; - } + G4cout << &mat << G4endl; + } return mat; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4Material* G4NistMaterialBuilder::ConstructNewIdealGasMaterial( - const G4String& name, - const std::vector& elm, - const std::vector& nbAtoms, - G4double temp, - G4double pres) +G4Material* G4NistMaterialBuilder::ConstructNewIdealGasMaterial(const G4String& name, + const std::vector& elm, const std::vector& nbAtoms, G4double temp, G4double pres) { G4State state = kStateGas; // Material is in DB G4Material* mat = FindOrBuildMaterial(name); - if(mat != nullptr) - { + if (mat != nullptr) { G4cout << "G4NistMaterialBuilder::ConstructNewMaterial:" - << " WARNING: the material <" << name - << "> already exists." << G4endl; - G4cout << " New material will NOT be built!" - << G4endl; + << " WARNING: the material <" << name << "> already exists." << G4endl; + G4cout << " New material will NOT be built!" << G4endl; return mat; } // Material not in DB - G4int els = (G4int)elm.size(); - if(els == 0) { + auto els = (G4int)elm.size(); + if (els == 0) { G4cout << "G4NistMaterialBuilder::ConstructNewMaterial:" - << " WARNING: empty list of elements for " << name - << G4endl; - G4cout << " New material will NOT be built!" - << G4endl; + << " WARNING: empty list of elements for " << name << G4endl; + G4cout << " New material will NOT be built!" << G4endl; return nullptr; } // add parameters of material into internal vectors // density in g/cm3, mean ionisation potential is not defined G4bool stp = true; - if(temp != NTP_Temperature || pres != CLHEP::STP_Pressure) - { stp = false; } + if (temp != NTP_Temperature || pres != CLHEP::STP_Pressure) { + stp = false; + } G4double massPerMole = 0.; G4int Z = 0; - for (G4int i=0; iGetZ(elm[i]); - massPerMole += nbAtoms[i]*elmBuilder->GetAtomicMassAmu(Z)*CLHEP::amu_c2; + massPerMole += nbAtoms[i] * elmBuilder->GetAtomicMassAmu(Z) * CLHEP::amu_c2; } - G4double dens = massPerMole/(CLHEP::Avogadro*CLHEP::k_Boltzmann*temp/pres); + G4double dens = massPerMole / (CLHEP::Avogadro * CLHEP::k_Boltzmann * temp / pres); - if (els == 1) { AddMaterial(name,dens,Z,0.,els,state,stp); } + if (els == 1) { + AddMaterial(name, dens, Z, 0., els, state, stp); + } else { - AddMaterial(name,dens,0,0.,els,state,stp); - for (G4int i=0; iGetZ(elm[i]), nbAtoms[i]); } } - if(!stp) { AddGas(name,temp,pres); } + if (! stp) { + AddGas(name, temp, pres); + } - return BuildMaterial(nMaterials-1); + return BuildMaterial(nMaterials - 1); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void G4NistMaterialBuilder::AddMaterial(const G4String& nameMat, G4double dens, - G4int Z, G4double pot, - G4int ncomp, G4State state, - G4bool stp) +void G4NistMaterialBuilder::AddMaterial(const G4String& nameMat, G4double dens, G4int Z, + G4double pot, G4int ncomp, G4State state, G4bool stp) { // add parameters of material into internal vectors // density in g/cm3, mean ionisation potential in eV - // if ncomp == 1 then Z should be defined and + // if ncomp == 1 then Z should be defined and // AddElement should not be applied if (nCurrent != 0) { G4cout << "G4NistMaterialBuilder::AddMaterial WARNING: previous " - << "mixture " << nMaterials << " " << names[nMaterials] - << " is not yet complete!" - << G4endl; - G4cout << " New material " << nameMat << " will not be added." - << G4endl; + << "mixture " << nMaterials << " " << names[nMaterials] << " is not yet complete!" + << G4endl; + G4cout << " New material " << nameMat << " will not be added." << G4endl; return; } @@ -481,8 +447,8 @@ void G4NistMaterialBuilder::AddMaterial(const G4String& nameMat, G4double dens, names.push_back(nameMat); chFormulas.emplace_back(""); - densities.push_back(dens*CLHEP::g/CLHEP::cm3); - ionPotentials.push_back(pot*CLHEP::eV); + densities.push_back(dens * CLHEP::g / CLHEP::cm3); + ionPotentials.push_back(pot * CLHEP::eV); states.push_back(state); components.push_back(ncomp); indexes.push_back(nComponents); @@ -496,18 +462,17 @@ void G4NistMaterialBuilder::AddMaterial(const G4String& nameMat, G4double dens, atomCount[nMaterials] = true; ++nComponents; nCurrent = 0; - } else { + } + else { nCurrent = ncomp; } ++nMaterials; - if(verbose > 1) { + if (verbose > 1) { G4cout << "New material " << nameMat << " is prepared; " - << " nMaterials= " << nMaterials - << " nComponents= " << nComponents - << " nCurrent= " << nCurrent - << G4endl; + << " nMaterials= " << nMaterials << " nComponents= " << nComponents + << " nCurrent= " << nCurrent << G4endl; } } @@ -523,11 +488,21 @@ void G4NistMaterialBuilder::SetVerbose(G4int val) void G4NistMaterialBuilder::ListMaterials(const G4String& mnam) const { - if (mnam == "simple") { ListNistSimpleMaterials(); } - else if (mnam == "compound") { ListNistCompoundMaterials(); } - else if (mnam == "hep") { ListHepMaterials(); } - else if (mnam == "space") { ListSpaceMaterials(); } - else if (mnam == "bio") { ListBioChemicalMaterials(); } + if (mnam == "simple") { + ListNistSimpleMaterials(); + } + else if (mnam == "compound") { + ListNistCompoundMaterials(); + } + else if (mnam == "hep") { + ListHepMaterials(); + } + else if (mnam == "space") { + ListSpaceMaterials(); + } + else if (mnam == "bio") { + ListBioChemicalMaterials(); + } else if (mnam == "all") { ListNistSimpleMaterials(); @@ -535,10 +510,10 @@ void G4NistMaterialBuilder::ListMaterials(const G4String& mnam) const ListHepMaterials(); ListSpaceMaterials(); ListBioChemicalMaterials(); - - } else { - G4cout << "### G4NistMaterialBuilder::ListMaterials: Warning " - << mnam << " list is not known." << G4endl; + } + else { + G4cout << "### G4NistMaterialBuilder::ListMaterials: Warning " << mnam << " list is not known." + << G4endl; } } @@ -551,7 +526,9 @@ void G4NistMaterialBuilder::ListNistSimpleMaterials() const G4cout << "=======================================================" << G4endl; G4cout << " Z Name density(g/cm^3) I(eV) " << G4endl; G4cout << "=======================================================" << G4endl; - for (G4int i=1; i 1) { G4int imin = indexes[i]; G4int imax = imin + nc; - for (G4int j=imin; j 0.0) - { - for(G4int i = imin; i < imax; ++i) - { + if (! atomCount[n]) { + for (G4int i = imin; i < imax; ++i) { + sum += fractions[i]; + } + if (sum > 0.0) { + for (G4int i = imin; i < imax; ++i) { fractions[i] /= sum; } } @@ -683,8 +659,7 @@ void G4NistMaterialBuilder::AddElementByWeightFraction(G4int Z, G4double w) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void G4NistMaterialBuilder::AddElementByWeightFraction(const G4String& name, - G4double w) +void G4NistMaterialBuilder::AddElementByWeightFraction(const G4String& name, G4double w) { G4int Z = elmBuilder->GetZ(name); AddElementByWeightFraction(Z, w); @@ -694,23 +669,21 @@ void G4NistMaterialBuilder::AddElementByWeightFraction(const G4String& name, void G4NistMaterialBuilder::AddElementByAtomCount(G4int Z, G4int nb) { - atomCount[nMaterials-1] = true; - G4double w = (G4double)nb; + atomCount[nMaterials - 1] = true; + auto w = (G4double)nb; AddElementByWeightFraction(Z, w); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void G4NistMaterialBuilder::AddElementByAtomCount(const G4String& name, - G4int nb) +void G4NistMaterialBuilder::AddElementByAtomCount(const G4String& name, G4int nb) { - atomCount[nMaterials-1] = true; + atomCount[nMaterials - 1] = true; G4int Z = elmBuilder->GetZ(name); - G4double w = (G4double)nb; + auto w = (G4double)nb; AddElementByWeightFraction(Z, w); } - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4NistMaterialBuilder::Initialise() @@ -725,7 +698,9 @@ void G4NistMaterialBuilder::Initialise() SpaceMaterials(); BioChemicalMaterials(); - if (verbose > 1) { ListMaterials("all"); } + if (verbose > 1) { + ListMaterials("all"); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -733,7 +708,7 @@ void G4NistMaterialBuilder::Initialise() void G4NistMaterialBuilder::NistSimpleMaterials() { // density in g/cm3, mean ionisation potential in eV - + // clang-format off AddMaterial("G4_WATER", 1.0,0, 78., 2); AddElementByAtomCount("H" , 2); AddElementByAtomCount("O" , 1); @@ -1258,14 +1233,6 @@ void G4NistMaterialBuilder::NistCompoundMaterials() AddElementByWeightFraction(14, 0.336553); AddElementByWeightFraction(20, 0.107205); - // AddMaterial("G4_GLUCOSE", 1.54, 0, 77.2, 3); - // AddElementByWeightFraction( 1, 0.071204); - // AddElementByWeightFraction( 6, 0.363652); - // AddElementByWeightFraction( 8, 0.565144); - // These weight fractions correspond to 0.90909 glucose + 0.09091 water - // (in mass), not pure glucose. The density used is that of pure glucose! - // M.Trocme & S.Seltzer - AddMaterial("G4_GLUTAMINE", 1.46, 0, 73.3, 4); AddElementByAtomCount("C" , 5); AddElementByAtomCount("H" , 10); @@ -1444,7 +1411,7 @@ void G4NistMaterialBuilder::NistCompoundMaterials2() AddElementByWeightFraction( 6, 0.156214); AddElementByWeightFraction( 7, 0.035451); AddElementByWeightFraction( 8, 0.7101 ); - + AddMaterial("G4_MUSCLE_WITHOUT_SUCROSE", 1.07, 0, 74.2, 4); AddElementByWeightFraction( 1, 0.101969); AddElementByWeightFraction( 6, 0.120058); @@ -1514,7 +1481,7 @@ void G4NistMaterialBuilder::NistCompoundMaterials2() AddMaterial("G4_PLASTIC_SC_VINYLTOLUENE", 1.032, 0, 64.7, 2); // AddElementByWeightFraction( 1, 0.085); // AddElementByWeightFraction( 6, 0.915); - // Watch out! These weight fractions do not correspond to pure PVT + // Watch out! These weight fractions do not correspond to pure PVT // (PolyVinylToluene, C_9H_10) but to an unknown mixture... // M.Trocme & S.Seltzer AddElementByAtomCount("C" , 9); @@ -1538,7 +1505,7 @@ void G4NistMaterialBuilder::NistCompoundMaterials2() // AddElementByWeightFraction( 1, 0.061869); // AddElementByWeightFraction( 6, 0.696325); // AddElementByWeightFraction(17, 0.241806); - // These weight fractions correspond to C_17H_18Cl_2 which is not + // These weight fractions correspond to C_17H_18Cl_2 which is not // POLYCHLOROSTYRENE. POLYCHLOROSTYRENE is C_8H_7Cl! // M.Trocme & S.Seltzer AddElementByAtomCount("C" , 8); @@ -1598,7 +1565,7 @@ void G4NistMaterialBuilder::NistCompoundMaterials2() // AddElementByWeightFraction( 1, 0.092802); // AddElementByWeightFraction( 6, 0.680561); // AddElementByWeightFraction( 8, 0.226637); - // These weight fractions correspond to C_8H_13O_2 which is not + // These weight fractions correspond to C_8H_13O_2 which is not // POLYVINYL_BUTYRAL. POLYVINYL_BUTYRAL is C_8H_14O_2! // M.Trocme & S.Seltzer AddElementByAtomCount("C" , 8); @@ -1728,7 +1695,7 @@ void G4NistMaterialBuilder::NistCompoundMaterials2() AddMaterial("G4_TERPHENYL", 1.24 /*1.234*/, 0, 71.7, 2); // AddElementByWeightFraction( 1, 0.044543); // AddElementByWeightFraction( 6, 0.955457); - // These weight fractions correspond to C_18H_10 which is not TERPHENYL. + // These weight fractions correspond to C_18H_10 which is not TERPHENYL. // TERPHENYL is C_18H_14! The current density is 1.24 g/cm3 // M.Trocme & S.Seltzer AddElementByAtomCount("C" , 18); @@ -1985,7 +1952,7 @@ void G4NistMaterialBuilder::BioChemicalMaterials() AddElementByAtomCount("H", 3); AddElementByAtomCount("P", 1); AddElementByAtomCount("O", 4); - + // END UNBONDED MATERIALS / BEGIN BONDED MATERIALS // Deoxyribose loses 3 OH groups in bonding to bond with PO4 and a base pair @@ -2031,24 +1998,5 @@ void G4NistMaterialBuilder::BioChemicalMaterials() // END BONDED MATERIALS - /* - // Complete 70 kg body of adult men from en.wikipedia.org/ see References there - AddMaterial("G4_BODY", 1.8, 0, 78, 12); - AddElementByWeightFraction( 8, 0.650); - AddElementByWeightFraction( 6, 0.180); - AddElementByWeightFraction( 1, 0.100); - AddElementByWeightFraction( 7, 0.030); - AddElementByWeightFraction(20, 0.015); - AddElementByWeightFraction(15, 0.010); - AddElementByWeightFraction(19, 0.0025); - AddElementByWeightFraction(16, 0.0025); - AddElementByWeightFraction(11, 0.0015); - AddElementByWeightFraction(17, 0.0015); - AddElementByWeightFraction(12, 0.0005); - AddElementByWeightFraction(26, 0.00006); - */ + // clang-format on } - - - - diff --git a/source/materials/src/G4NistMessenger.cc b/source/materials/src/G4NistMessenger.cc index 4315b33b8e6..e4a199cc053 100644 --- a/source/materials/src/G4NistMessenger.cc +++ b/source/materials/src/G4NistMessenger.cc @@ -22,8 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// + // File name: G4NistMessenger // // Author: Vladimir Ivanchenko @@ -34,50 +33,44 @@ // // // ------------------------------------------------------------------- -// - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... #include "G4NistMessenger.hh" +#include "G4DensityEffectData.hh" +#include "G4IonisParamMat.hh" #include "G4NistManager.hh" - -#include "G4UIdirectory.hh" -#include "G4UIcmdWithAnInteger.hh" #include "G4UIcmdWithAString.hh" -#include "G4IonisParamMat.hh" -#include "G4DensityEffectData.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIdirectory.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4NistMessenger::G4NistMessenger(G4NistManager* man) - : manager(man) +G4NistMessenger::G4NistMessenger(G4NistManager* man) : manager(man) { matDir = new G4UIdirectory("/material/"); matDir->SetGuidance("Commands for materials"); - verCmd = new G4UIcmdWithAnInteger("/material/verbose",this); + verCmd = new G4UIcmdWithAnInteger("/material/verbose", this); verCmd->SetGuidance("Set verbose level."); - + nistDir = new G4UIdirectory("/material/nist/"); nistDir->SetGuidance("Commands for the nist dataBase"); - - prtElmCmd = new G4UIcmdWithAString("/material/nist/printElement",this); + + prtElmCmd = new G4UIcmdWithAString("/material/nist/printElement", this); prtElmCmd->SetGuidance("print element(s) in dataBase."); prtElmCmd->SetGuidance("symbol = element."); prtElmCmd->SetGuidance("all = all elements."); prtElmCmd->SetParameterName("symbol", true); prtElmCmd->SetDefaultValue("all"); - - przElmCmd = new G4UIcmdWithAnInteger("/material/nist/printElementZ",this); + + przElmCmd = new G4UIcmdWithAnInteger("/material/nist/printElementZ", this); przElmCmd->SetGuidance("print element Z in dataBase."); przElmCmd->SetGuidance("0 = all elements."); przElmCmd->SetParameterName("Z", true); przElmCmd->SetDefaultValue(0); przElmCmd->SetRange("0<=Z && Z<108"); - - lisMatCmd = new G4UIcmdWithAString("/material/nist/listMaterials",this); + + lisMatCmd = new G4UIcmdWithAString("/material/nist/listMaterials", this); lisMatCmd->SetGuidance("Materials in Geant4 dataBase."); lisMatCmd->SetGuidance("simple - simple NIST materials."); lisMatCmd->SetGuidance("compound - compound NIST materials."); @@ -87,35 +80,35 @@ G4NistMessenger::G4NistMessenger(G4NistManager* man) lisMatCmd->SetParameterName("matlist", true); // lisMatCmd->SetCandidates("simple compound hep bio all"); lisMatCmd->SetDefaultValue("all"); - + g4Dir = new G4UIdirectory("/material/g4/"); g4Dir->SetGuidance("Commands for G4MaterialTable"); - - g4ElmCmd = new G4UIcmdWithAString("/material/g4/printElement",this); + + g4ElmCmd = new G4UIcmdWithAString("/material/g4/printElement", this); g4ElmCmd->SetGuidance("print Element from G4ElementTable."); g4ElmCmd->SetGuidance("all - all elements."); g4ElmCmd->SetParameterName("elm", true); g4ElmCmd->SetDefaultValue("all"); - - g4MatCmd = new G4UIcmdWithAString("/material/g4/printMaterial",this); + + g4MatCmd = new G4UIcmdWithAString("/material/g4/printMaterial", this); g4MatCmd->SetGuidance("print Material from G4MaterialTable."); g4MatCmd->SetGuidance("all - all materials"); g4MatCmd->SetParameterName("pmat", true); g4MatCmd->SetDefaultValue("all"); - g4DensCmd = new G4UIcmdWithAString("/material/g4/printDensityEffParam",this); + g4DensCmd = new G4UIcmdWithAString("/material/g4/printDensityEffParam", this); g4DensCmd->SetGuidance("print Material from G4DensityEffectData."); g4DensCmd->SetGuidance("all - all materials"); g4DensCmd->SetParameterName("dmat", true); g4DensCmd->SetDefaultValue("all"); - densCmd = new G4UIcmdWithAString("/material/g4/enableDensityEffOnFly",this); + densCmd = new G4UIcmdWithAString("/material/g4/enableDensityEffOnFly", this); densCmd->SetGuidance("enable accurate computation of density effect."); densCmd->SetGuidance("all - all materials."); densCmd->SetParameterName("dens", true); densCmd->SetDefaultValue("all"); - adensCmd = new G4UIcmdWithAString("/material/g4/disableDensityEffOnFly",this); + adensCmd = new G4UIcmdWithAString("/material/g4/disableDensityEffOnFly", this); adensCmd->SetGuidance("disable accurate computation of density effect."); adensCmd->SetGuidance("all - all materials."); adensCmd->SetParameterName("dens", true); @@ -126,46 +119,54 @@ G4NistMessenger::G4NistMessenger(G4NistManager* man) G4NistMessenger::~G4NistMessenger() { - delete verCmd; + delete verCmd; delete prtElmCmd; delete przElmCmd; delete lisMatCmd; delete nistDir; - - delete g4ElmCmd; + + delete g4ElmCmd; delete g4MatCmd; delete g4DensCmd; delete densCmd; delete adensCmd; delete g4Dir; - delete matDir; + delete matDir; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4NistMessenger::SetNewValue(G4UIcommand* command, G4String newValue) { - //G4cout << "G4NistMessenger::SetNewValue <" << newValue << ">" << G4endl; - if (command == verCmd) - { manager->SetVerbose(verCmd->GetNewIntValue(newValue));} - else if (command == prtElmCmd) - { manager->PrintElement(newValue); } + // G4cout << "G4NistMessenger::SetNewValue <" << newValue << ">" << G4endl; + if (command == verCmd) { + manager->SetVerbose(verCmd->GetNewIntValue(newValue)); + } + else if (command == prtElmCmd) { + manager->PrintElement(newValue); + } else if (command == przElmCmd) { G4int Z = przElmCmd->GetNewIntValue(newValue); - if(Z >= 0 && Z < 108) { manager->PrintElement(Z); } + if (Z >= 0 && Z < 108) { + manager->PrintElement(Z); + } + } + else if (command == lisMatCmd) { + manager->ListMaterials(newValue); + } + else if (command == g4ElmCmd) { + manager->PrintG4Element(newValue); + } + else if (command == g4MatCmd) { + manager->PrintG4Material(newValue); + } + else if (command == g4DensCmd) { + G4IonisParamMat::GetDensityEffectData()->PrintData(newValue); + } + else if (command == densCmd) { + manager->SetDensityEffectCalculatorFlag(newValue, true); + } + else if (command == adensCmd) { + manager->SetDensityEffectCalculatorFlag(newValue, false); } - else if (command == lisMatCmd) - { manager->ListMaterials(newValue); } - else if (command == g4ElmCmd) - { manager->PrintG4Element(newValue); } - else if (command == g4MatCmd) - { manager->PrintG4Material(newValue); } - else if (command == g4DensCmd) - { G4IonisParamMat::GetDensityEffectData()->PrintData(newValue); } - else if (command == densCmd) - { manager->SetDensityEffectCalculatorFlag(newValue,true); } - else if (command == adensCmd) - { manager->SetDensityEffectCalculatorFlag(newValue,false); } } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/source/materials/src/G4OpticalSurface.cc b/source/materials/src/G4OpticalSurface.cc index 48246520340..03754b78f47 100644 --- a/source/materials/src/G4OpticalSurface.cc +++ b/source/materials/src/G4OpticalSurface.cc @@ -22,9 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// + //////////////////////////////////////////////////////////////////////// // Optical Surface Class Implementation //////////////////////////////////////////////////////////////////////// @@ -37,65 +35,59 @@ // updated: 2017-02-24 Mariele Stockhoff add DAVIS model //////////////////////////////////////////////////////////////////////// -#include -#include -#include +#include "G4OpticalSurface.hh" #include "globals.hh" -#include "G4OpticalSurface.hh" + +#include + +#include +#include G4OpticalSurface& G4OpticalSurface::operator=(const G4OpticalSurface& right) { - if(this != &right) - { - theName = right.theName; - theType = right.theType; - theModel = right.theModel; - theFinish = right.theFinish; - sigma_alpha = right.sigma_alpha; - polish = right.polish; + if (this != &right) { + theName = right.theName; + theType = right.theType; + theModel = right.theModel; + theFinish = right.theFinish; + sigma_alpha = right.sigma_alpha; + polish = right.polish; theMaterialPropertiesTable = right.theMaterialPropertiesTable; delete[] AngularDistribution; - AngularDistribution = - new G4float[incidentIndexMax * thetaIndexMax * phiIndexMax]; + AngularDistribution = new G4float[incidentIndexMax * thetaIndexMax * phiIndexMax]; *(AngularDistribution) = *(right.AngularDistribution); delete[] AngularDistributionLUT; - AngularDistributionLUT = new G4float[indexmax]; + AngularDistributionLUT = new G4float[indexmax]; *(AngularDistributionLUT) = *(right.AngularDistributionLUT); delete[] Reflectivity; - Reflectivity = new G4float[RefMax]; + Reflectivity = new G4float[RefMax]; *(Reflectivity) = *(right.Reflectivity); delete DichroicVector; - DichroicVector = new G4Physics2DVector(); + DichroicVector = new G4Physics2DVector(); *DichroicVector = *(right.DichroicVector); } return *this; } -G4OpticalSurface::G4OpticalSurface(const G4String& name, - G4OpticalSurfaceModel model, - G4OpticalSurfaceFinish finish, - G4SurfaceType type, G4double value) - : G4SurfaceProperty(name, type) - , theModel(model) - , theFinish(finish) - , theMaterialPropertiesTable(nullptr) +G4OpticalSurface::G4OpticalSurface(const G4String& name, G4OpticalSurfaceModel model, + G4OpticalSurfaceFinish finish, G4SurfaceType type, G4double value) + : G4SurfaceProperty(name, type), theModel(model), theFinish(finish) { AngularDistribution = nullptr; AngularDistributionLUT = nullptr; - Reflectivity = nullptr; + Reflectivity = nullptr; DichroicVector = nullptr; - switch(theModel) - { + switch (theModel) { case glisur: - polish = value; + polish = value; sigma_alpha = 0.0; break; case LUT: @@ -105,63 +97,62 @@ G4OpticalSurface::G4OpticalSurface(const G4String& name, // fall through case unified: sigma_alpha = value; - polish = 0.0; + polish = 0.0; break; default: - G4Exception("G4OpticalSurface::G4OpticalSurface()", "mat309", - FatalException, "Constructor called with INVALID model."); + G4Exception("G4OpticalSurface::G4OpticalSurface()", "mat309", FatalException, + "Constructor called with INVALID model."); } } G4OpticalSurface::~G4OpticalSurface() { - delete[] AngularDistribution; + delete[] AngularDistribution; - delete[] AngularDistributionLUT; + delete[] AngularDistributionLUT; - delete[] Reflectivity; + delete[] Reflectivity; - delete DichroicVector; + delete DichroicVector; } G4OpticalSurface::G4OpticalSurface(const G4OpticalSurface& right) : G4SurfaceProperty(right.theName, right.theType) { - *this = right; - this->theName = right.theName; - this->theType = right.theType; - this->theModel = right.theModel; - this->theFinish = right.theFinish; - this->sigma_alpha = right.sigma_alpha; - this->polish = right.polish; + *this = right; + this->theName = right.theName; + this->theType = right.theType; + this->theModel = right.theModel; + this->theFinish = right.theFinish; + this->sigma_alpha = right.sigma_alpha; + this->polish = right.polish; this->theMaterialPropertiesTable = right.theMaterialPropertiesTable; - delete[] AngularDistribution; - this->AngularDistribution = - new G4float[incidentIndexMax * thetaIndexMax * phiIndexMax]; + delete[] AngularDistribution; + this->AngularDistribution = new G4float[incidentIndexMax * thetaIndexMax * phiIndexMax]; *(this->AngularDistribution) = *(right.AngularDistribution); - delete[] AngularDistributionLUT; - this->AngularDistributionLUT = new G4float[indexmax]; + delete[] AngularDistributionLUT; + this->AngularDistributionLUT = new G4float[indexmax]; *(this->AngularDistributionLUT) = *(right.AngularDistributionLUT); - delete[] Reflectivity; - this->Reflectivity = new G4float[RefMax]; + delete[] Reflectivity; + this->Reflectivity = new G4float[RefMax]; *(this->Reflectivity) = *(right.Reflectivity); - delete DichroicVector; - this->DichroicVector = new G4Physics2DVector(); + delete DichroicVector; + this->DichroicVector = new G4Physics2DVector(); *(this->DichroicVector) = *(right.DichroicVector); } G4bool G4OpticalSurface::operator==(const G4OpticalSurface& right) const { - return (this == (G4OpticalSurface*) &right); + return (this == (G4OpticalSurface*)&right); } G4bool G4OpticalSurface::operator!=(const G4OpticalSurface& right) const { - return (this != (G4OpticalSurface*) &right); + return (this != (G4OpticalSurface*)&right); } G4int G4OpticalSurface::GetInmax() const { return indexmax; } @@ -180,16 +171,13 @@ void G4OpticalSurface::DumpInfo() const G4cout << " Surface type = " << G4int(theType) << G4endl << " Surface finish = " << G4int(theFinish) << G4endl - << " Surface model = " << G4int(theModel) << G4endl << G4endl - << " Surface parameter " << G4endl << " ----------------- " - << G4endl; + << " Surface model = " << G4int(theModel) << G4endl << G4endl << " Surface parameter " + << G4endl << " ----------------- " << G4endl; - if(theModel == glisur) - { + if (theModel == glisur) { G4cout << " polish: " << polish << G4endl; } - else - { + else { G4cout << " sigma_alpha: " << sigma_alpha << G4endl; } G4cout << G4endl; @@ -211,32 +199,26 @@ void G4OpticalSurface::ReadDataFile() { // type and finish can be set in either order. Thus, we can't check // for consistency. Need to read file on setting either type or finish. - switch(theType) - { + switch (theType) { case dielectric_LUT: - if(AngularDistribution == nullptr) - { - AngularDistribution = - new G4float[incidentIndexMax * thetaIndexMax * phiIndexMax]; + if (AngularDistribution == nullptr) { + AngularDistribution = new G4float[incidentIndexMax * thetaIndexMax * phiIndexMax]; } ReadLUTFile(); break; case dielectric_LUTDAVIS: - if(AngularDistributionLUT == nullptr) - { + if (AngularDistributionLUT == nullptr) { AngularDistributionLUT = new G4float[indexmax]; } ReadLUTDAVISFile(); - if(Reflectivity == nullptr) - { + if (Reflectivity == nullptr) { Reflectivity = new G4float[RefMax]; } ReadReflectivityLUTFile(); break; case dielectric_dichroic: - if(DichroicVector == nullptr) - { + if (DichroicVector == nullptr) { DichroicVector = new G4Physics2DVector(); } ReadDichroicFile(); @@ -250,8 +232,7 @@ void G4OpticalSurface::ReadLUTFile() { G4String readLUTFileName; - switch(theFinish) - { + switch (theFinish) { case polishedlumirrorglue: readLUTFileName = "PolishedLumirrorGlue.z"; break; @@ -323,8 +304,7 @@ void G4OpticalSurface::ReadLUTFile() ReadCompressedFile(readLUTFileName, iss); size_t idxmax = incidentIndexMax * thetaIndexMax * phiIndexMax; - for(size_t i = 0; i < idxmax; ++i) - { + for (size_t i = 0; i < idxmax; ++i) { iss >> AngularDistribution[i]; } G4cout << "LUT - data file: " << readLUTFileName << " read in! " << G4endl; @@ -334,8 +314,7 @@ void G4OpticalSurface::ReadLUTDAVISFile() { G4String readLUTDAVISFileName; - switch(theFinish) - { + switch (theFinish) { case Rough_LUT: readLUTDAVISFileName = "Rough_LUT.z"; break; @@ -370,20 +349,17 @@ void G4OpticalSurface::ReadLUTDAVISFile() std::istringstream iss; ReadCompressedFile(readLUTDAVISFileName, iss); - for(size_t i = 0; i < indexmax; ++i) - { + for (size_t i = 0; i < indexmax; ++i) { iss >> AngularDistributionLUT[i]; } - G4cout << "LUT DAVIS - data file: " << readLUTDAVISFileName << " read in! " - << G4endl; + G4cout << "LUT DAVIS - data file: " << readLUTDAVISFileName << " read in! " << G4endl; } void G4OpticalSurface::ReadReflectivityLUTFile() { G4String readReflectivityLUTFileName; - switch(theFinish) - { + switch (theFinish) { case Rough_LUT: readReflectivityLUTFileName = "Rough_LUTR.z"; break; @@ -418,40 +394,35 @@ void G4OpticalSurface::ReadReflectivityLUTFile() std::istringstream iss; ReadCompressedFile(readReflectivityLUTFileName, iss); - for(size_t i = 0; i < RefMax; ++i) - { + for (size_t i = 0; i < RefMax; ++i) { iss >> Reflectivity[i]; } - G4cout << "LUT DAVIS - reflectivity data file: " - << readReflectivityLUTFileName << " read in! " << G4endl; + G4cout << "LUT DAVIS - reflectivity data file: " << readReflectivityLUTFileName << " read in! " + << G4endl; } // uncompress one data file into the input string stream -void G4OpticalSurface::ReadCompressedFile(const G4String& filename, - std::istringstream& iss) +void G4OpticalSurface::ReadCompressedFile(const G4String& filename, std::istringstream& iss) { - G4String* dataString = nullptr; - G4String path = G4FindDataDir("G4REALSURFACEDATA"); + G4String* dataString = nullptr; + G4String path = G4FindDataDir("G4REALSURFACEDATA"); G4String compfilename = path + "/" + filename; // create input stream with binary mode operation and position at end of file std::ifstream in(compfilename, std::ios::binary | std::ios::ate); - if(in.good()) - { + if (in.good()) { // get current position in the stream (was set to the end) G4int fileSize = (G4int)in.tellg(); // set current position being the beginning of the stream in.seekg(0, std::ios::beg); // create (zlib) byte buffer for the data - Bytef* compdata = new Bytef[fileSize]; - while(in) - { - in.read((char*) compdata, fileSize); + auto compdata = new Bytef[fileSize]; + while (in) { + in.read((char*)compdata, fileSize); } // create (zlib) byte buffer for the uncompressed data - uLongf complen = (uLongf)(fileSize * 4); - Bytef* uncompdata = new Bytef[complen]; - while(Z_OK != uncompress(uncompdata, &complen, compdata, fileSize)) - { + auto complen = (uLongf)(fileSize * 4); + auto uncompdata = new Bytef[complen]; + while (Z_OK != uncompress(uncompdata, &complen, compdata, fileSize)) { // increase uncompressed byte buffer delete[] uncompdata; complen *= 2; @@ -460,26 +431,22 @@ void G4OpticalSurface::ReadCompressedFile(const G4String& filename, // delete the compressed data buffer delete[] compdata; // create a string from uncompressed data (will be deallocated by caller) - dataString = new G4String((char*) uncompdata, (long) complen); + dataString = new G4String((char*)uncompdata, (long)complen); // delete the uncompressed data buffer delete[] uncompdata; } - else - { + else { G4ExceptionDescription ed; ed << "Problem while trying to read " + compfilename + " data file.\n"; - G4Exception("G4OpticalSurface::ReadCompressedFile", "mat316", - FatalException, ed); + G4Exception("G4OpticalSurface::ReadCompressedFile", "mat316", FatalException, ed); return; } // create the input string stream from the data string - if(dataString != nullptr) - { + if (dataString != nullptr) { iss.str(*dataString); in.close(); delete dataString; - G4cout << "G4OpticalSurface: data file " << compfilename - << " successfully read in." << G4endl; + G4cout << "G4OpticalSurface: data file " << compfilename << " successfully read in." << G4endl; } } @@ -487,34 +454,26 @@ void G4OpticalSurface::ReadDichroicFile() { const char* datadir = G4FindDataDir("G4DICHROICDATA"); - if(datadir == nullptr) - { - G4Exception("G4OpticalSurface::ReadDichroicFile()", "mat313", - FatalException, - "Environment variable G4DICHROICDATA not defined"); + if (datadir == nullptr) { + G4Exception("G4OpticalSurface::ReadDichroicFile()", "mat313", FatalException, + "Environment variable G4DICHROICDATA not defined"); return; } std::ostringstream ost; ost << datadir; std::ifstream fin(ost.str().c_str()); - if(!fin.is_open()) - { + if (! fin.is_open()) { G4ExceptionDescription ed; - ed << "Dichroic surface data file <" << ost.str().c_str() - << "> is not opened!" << G4endl; - G4Exception("G4OpticalSurface::ReadDichroicFile()", "mat314", - FatalException, ed, " "); + ed << "Dichroic surface data file <" << ost.str().c_str() << "> is not opened!" << G4endl; + G4Exception("G4OpticalSurface::ReadDichroicFile()", "mat314", FatalException, ed, " "); return; } - if(!(DichroicVector->Retrieve(fin))) - { + if (! (DichroicVector->Retrieve(fin))) { G4ExceptionDescription ed; - ed << "Dichroic surface data file <" << ost.str().c_str() - << "> is not opened!" << G4endl; - G4Exception("G4OpticalSurface::ReadDichroicFile()", "mat315", - FatalException, ed, " "); + ed << "Dichroic surface data file <" << ost.str().c_str() << "> is not opened!" << G4endl; + G4Exception("G4OpticalSurface::ReadDichroicFile()", "mat315", FatalException, ed, " "); return; } @@ -522,18 +481,16 @@ void G4OpticalSurface::ReadDichroicFile() G4cout << " *** Dichroic surface data file *** " << G4endl; - G4int numberOfXNodes = (G4int)DichroicVector->GetLengthX(); - G4int numberOfYNodes = (G4int)DichroicVector->GetLengthY(); + auto numberOfXNodes = (G4int)DichroicVector->GetLengthX(); + auto numberOfYNodes = (G4int)DichroicVector->GetLengthY(); G4cout << "numberOfXNodes: " << numberOfXNodes << G4endl; G4cout << "numberOfYNodes: " << numberOfYNodes << G4endl; - if(0 > numberOfXNodes || numberOfXNodes >= INT_MAX) - { + if (0 > numberOfXNodes || numberOfXNodes >= INT_MAX) { numberOfXNodes = 0; } - if(0 > numberOfYNodes || numberOfYNodes >= INT_MAX) - { + if (0 > numberOfYNodes || numberOfYNodes >= INT_MAX) { numberOfYNodes = 0; } @@ -543,23 +500,18 @@ void G4OpticalSurface::ReadDichroicFile() xVector.resize(numberOfXNodes, 0.); yVector.resize(numberOfYNodes, 0.); - for(G4int i = 0; i < numberOfXNodes; ++i) - { + for (G4int i = 0; i < numberOfXNodes; ++i) { G4cout << "i: " << DichroicVector->GetX(i) << G4endl; xVector[i] = DichroicVector->GetX(i); } - for(G4int j = 0; j < numberOfYNodes; ++j) - { + for (G4int j = 0; j < numberOfYNodes; ++j) { G4cout << "j: " << DichroicVector->GetY(j) << G4endl; yVector[j] = DichroicVector->GetY(j); } - for(G4int j = 0; j < numberOfYNodes; ++j) - { - for(G4int i = 0; i < numberOfXNodes; ++i) - { - G4cout << " i: " << i << " j: " << j << " " - << DichroicVector->GetValue(i, j) << G4endl; + for (G4int j = 0; j < numberOfYNodes; ++j) { + for (G4int i = 0; i < numberOfXNodes; ++i) { + G4cout << " i: " << i << " j: " << j << " " << DichroicVector->GetValue(i, j) << G4endl; } } } diff --git a/source/materials/src/G4SandiaTable.cc b/source/materials/src/G4SandiaTable.cc index 1732320dac0..e02b59d1dd1 100644 --- a/source/materials/src/G4SandiaTable.cc +++ b/source/materials/src/G4SandiaTable.cc @@ -22,9 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -// + // 10.06.97 created. V. Grichine // 18.11.98 simplified public interface; new methods for materials. mma // 31.01.01 redesign of ComputeMatSandiaMatrix(). mma @@ -34,184 +32,158 @@ // 10.07.01 Migration to STL. M. Verderi. // 03.02.04 Update distructor V.Ivanchenko // 05.03.04 New methods for old sorting algorithm for PAI model. V.Grichine -// 26.10.11 new scheme for G4Exception (mma) +// 26.10.11 new scheme for G4Exception (mma) // 22.05.13 preparation of material table without dynamical arrays. V. Grichine -// 09.07.14 modify low limit in GetSandiaCofPerAtom() and material. mma -// 10.07.14 modify low limit for water. VI -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... - +// 09.07.14 modify low limit in GetSandiaCofPerAtom() and material. mma +// 10.07.14 modify low limit for water. VI #include "G4SandiaTable.hh" -#include "G4StaticSandiaData.hh" + #include "G4Material.hh" #include "G4MaterialTable.hh" #include "G4PhysicalConstants.hh" +#include "G4StaticSandiaData.hh" #include "G4SystemOfUnits.hh" -const G4double G4SandiaTable::funitc[5] = -{ - CLHEP::keV, - CLHEP::cm2*CLHEP::keV/CLHEP::g, - CLHEP::cm2*CLHEP::keV*CLHEP::keV/CLHEP::g, - CLHEP::cm2*CLHEP::keV*CLHEP::keV*CLHEP::keV/CLHEP::g, - CLHEP::cm2*CLHEP::keV*CLHEP::keV*CLHEP::keV*CLHEP::keV/CLHEP::g -}; +const G4double G4SandiaTable::funitc[5] = {CLHEP::keV, CLHEP::cm2* CLHEP::keV / CLHEP::g, + CLHEP::cm2* CLHEP::keV* CLHEP::keV / CLHEP::g, + CLHEP::cm2* CLHEP::keV* CLHEP::keV* CLHEP::keV / CLHEP::g, + CLHEP::cm2* CLHEP::keV* CLHEP::keV* CLHEP::keV* CLHEP::keV / CLHEP::g}; G4int G4SandiaTable::fCumulInterval[] = {0}; - + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -G4SandiaTable::G4SandiaTable(const G4Material* material) - : fMaterial(material) +G4SandiaTable::G4SandiaTable(const G4Material* material) : fMaterial(material) { - fMatSandiaMatrix = nullptr; + fMatSandiaMatrix = nullptr; fMatSandiaMatrixPAI = nullptr; fPhotoAbsorptionCof = nullptr; - fMatNbOfIntervals = 0; - - fMaxInterval = 0; - fVerbose = 0; + fMatNbOfIntervals = 0; + + fMaxInterval = 0; + fVerbose = 0; - //build the CumulInterval array - if(0 == fCumulInterval[0]) { + // build the CumulInterval array + if (0 == fCumulInterval[0]) { fCumulInterval[0] = 1; - for (G4int Z=1; Z<101; ++Z) { - fCumulInterval[Z] = fCumulInterval[Z-1] + fNbOfIntervals[Z]; + for (G4int Z = 1; Z < 101; ++Z) { + fCumulInterval[Z] = fCumulInterval[Z - 1] + fNbOfIntervals[Z]; } } - - fMaxInterval = 0; - fSandiaCofPerAtom.resize(4,0.0); - fLowerI1 = false; - //compute macroscopic Sandia coefs for a material - ComputeMatSandiaMatrix(); // mma -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -// Fake default constructor - sets only member data and allocates memory -// for usage restricted to object persistency - -G4SandiaTable::G4SandiaTable(__void__&) - : fMaterial(nullptr),fMatSandiaMatrix(nullptr), - fMatSandiaMatrixPAI(nullptr),fPhotoAbsorptionCof(nullptr) -{ fMaxInterval = 0; - fMatNbOfIntervals = 0; + fSandiaCofPerAtom.resize(4, 0.0); fLowerI1 = false; - fVerbose = 0; - fSandiaCofPerAtom.resize(4,0.0); + // compute macroscopic Sandia coefs for a material + ComputeMatSandiaMatrix(); // mma } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... G4SandiaTable::~G4SandiaTable() { - if(fMatSandiaMatrix != nullptr) - { + if (fMatSandiaMatrix != nullptr) { fMatSandiaMatrix->clearAndDestroy(); delete fMatSandiaMatrix; } - if(fMatSandiaMatrixPAI != nullptr) - { + if (fMatSandiaMatrixPAI != nullptr) { fMatSandiaMatrixPAI->clearAndDestroy(); delete fMatSandiaMatrixPAI; } - delete [] fPhotoAbsorptionCof; + delete[] fPhotoAbsorptionCof; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -void -G4SandiaTable::GetSandiaCofPerAtom(G4int Z, G4double energy, - std::vector& coeff) const +void G4SandiaTable::GetSandiaCofPerAtom( + G4int Z, G4double energy, std::vector& coeff) const { #ifdef G4VERBOSE - if(Z < 1 || Z > 100) { + if (Z < 1 || Z > 100) { Z = PrintErrorZ(Z, "GetSandiaCofPerAtom"); - } - if(4 > coeff.size()) { - PrintErrorV("GetSandiaCofPerAtom(): input vector is resized"); + } + if (4 > coeff.size()) { + PrintErrorV("GetSandiaCofPerAtom(): input vector is resized"); coeff.resize(4); } #endif - G4double Emin = fSandiaTable[fCumulInterval[Z-1]][0]*CLHEP::keV; - //G4double Iopot = fIonizationPotentials[Z]*eV; - //if (Emin < Iopot) Emin = Iopot; + G4double Emin = fSandiaTable[fCumulInterval[Z - 1]][0] * CLHEP::keV; + // G4double Iopot = fIonizationPotentials[Z]*eV; + // if (Emin < Iopot) Emin = Iopot; - G4int row = 0; - if (energy <= Emin) { - energy = Emin; - - } else { + G4int row = 0; + if (energy <= Emin) { + energy = Emin; + } + else { G4int interval = fNbOfIntervals[Z] - 1; - row = fCumulInterval[Z-1] + interval; + row = fCumulInterval[Z - 1] + interval; // Loop checking, 07-Aug-2015, Vladimir Ivanchenko - while ((interval>0) && (energy 0) && (energy < fSandiaTable[row][0] * CLHEP::keV)) { --interval; - row = fCumulInterval[Z-1] + interval; + row = fCumulInterval[Z - 1] + interval; } } - G4double AoverAvo = Z*amu/fZtoAratio[Z]; - - coeff[0]=AoverAvo*funitc[1]*fSandiaTable[row][1]; - coeff[1]=AoverAvo*funitc[2]*fSandiaTable[row][2]; - coeff[2]=AoverAvo*funitc[3]*fSandiaTable[row][3]; - coeff[3]=AoverAvo*funitc[4]*fSandiaTable[row][4]; + G4double AoverAvo = Z * amu / fZtoAratio[Z]; + + coeff[0] = AoverAvo * funitc[1] * fSandiaTable[row][1]; + coeff[1] = AoverAvo * funitc[2] * fSandiaTable[row][2]; + coeff[2] = AoverAvo * funitc[3] * fSandiaTable[row][3]; + coeff[3] = AoverAvo * funitc[4] * fSandiaTable[row][4]; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... -void -G4SandiaTable::GetSandiaCofWater(G4double energy, - std::vector& coeff) const +void G4SandiaTable::GetSandiaCofWater(G4double energy, std::vector& coeff) const { #ifdef G4VERBOSE - if(4 > coeff.size()) { - PrintErrorV("GetSandiaCofWater: input vector is resized"); + if (4 > coeff.size()) { + PrintErrorV("GetSandiaCofWater: input vector is resized"); coeff.resize(4); } #endif G4int i = 0; - if(energy > fH2OlowerI1[0][0]*CLHEP::keV) { + if (energy > fH2OlowerI1[0][0] * CLHEP::keV) { i = fH2OlowerInt - 1; - for(; i>0; --i) { - if(energy >= fH2OlowerI1[i][0]*CLHEP::keV) { break; } + for (; i > 0; --i) { + if (energy >= fH2OlowerI1[i][0] * CLHEP::keV) { + break; + } } } - coeff[0]=funitc[1]*fH2OlowerI1[i][1]; - coeff[1]=funitc[2]*fH2OlowerI1[i][2]; - coeff[2]=funitc[3]*fH2OlowerI1[i][3]; - coeff[3]=funitc[4]*fH2OlowerI1[i][4]; + coeff[0] = funitc[1] * fH2OlowerI1[i][1]; + coeff[1] = funitc[2] * fH2OlowerI1[i][2]; + coeff[2] = funitc[3] * fH2OlowerI1[i][3]; + coeff[3] = funitc[4] * fH2OlowerI1[i][4]; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... G4double G4SandiaTable::GetWaterEnergyLimit() const { - return fH2OlowerI1[fH2OlowerInt - 1][0]*CLHEP::keV; + return fH2OlowerI1[fH2OlowerInt - 1][0] * CLHEP::keV; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... G4double G4SandiaTable::GetWaterCofForMaterial(G4int i, G4int j) const { - return fH2OlowerI1[i][j]*funitc[j]; + return fH2OlowerI1[i][j] * funitc[j]; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... - + G4double G4SandiaTable::GetZtoA(G4int Z) { #ifdef G4VERBOSE - if(Z < 1 || Z > 100) { + if (Z < 1 || Z > 100) { Z = PrintErrorZ(Z, "GetSandiaCofPerAtom"); - } + } #endif return fZtoAratio[Z]; } @@ -222,10 +194,10 @@ G4double G4SandiaTable::GetZtoA(G4int Z) G4int G4SandiaTable::PrintErrorZ(G4int Z, const G4String& ss) { - G4String sss = "G4SandiaTable::"+ss+"()"; + G4String sss = "G4SandiaTable::" + ss + "()"; G4ExceptionDescription ed; ed << "Atomic number out of range Z= " << Z << "; closest value is used"; - G4Exception(sss,"mat060",JustWarning,ed,""); + G4Exception(sss, "mat060", JustWarning, ed, ""); return (Z > 100) ? 100 : 1; } @@ -233,140 +205,133 @@ G4int G4SandiaTable::PrintErrorZ(G4int Z, const G4String& ss) void G4SandiaTable::PrintErrorV(const G4String& ss) { - G4String sss = "G4SandiaTable::"+ss; + G4String sss = "G4SandiaTable::" + ss; G4ExceptionDescription ed; - G4Exception(sss,"mat061",JustWarning,"Wrong input parameters"); + G4Exception(sss, "mat061", JustWarning, "Wrong input parameters"); } #endif //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... ....oooOO0OOooo.... void G4SandiaTable::ComputeMatSandiaMatrix() -{ - //get list of elements - const G4int NbElm = (G4int)fMaterial->GetNumberOfElements(); +{ + // get list of elements + const auto NbElm = (G4int)fMaterial->GetNumberOfElements(); const G4ElementVector* ElementVector = fMaterial->GetElementVector(); - - G4int* Z = new G4int[NbElm]; //Atomic number - - //determine the maximum number of energy-intervals for this material + + auto Z = new G4int[NbElm]; // Atomic number + + // determine the maximum number of energy-intervals for this material G4int MaxIntervals = 0; G4int elm, z; - + // here we compute only for a mixture, so no waring or exception // if z is out of validity interval - for (elm = 0; elm < NbElm; ++elm) - { + for (elm = 0; elm < NbElm; ++elm) { z = G4lrint((*ElementVector)[elm]->GetZ()); - if(z < 1) { z = 1; } - else if(z > 100) { z = 100; } + if (z < 1) { + z = 1; + } + else if (z > 100) { + z = 100; + } Z[elm] = z; MaxIntervals += fNbOfIntervals[z]; - } - - //copy the Energy bins in a tmp1 array + } + + // copy the Energy bins in a tmp1 array //(take care of the Ionization Potential of each element) - G4double* tmp1 = new G4double[MaxIntervals]; + auto tmp1 = new G4double[MaxIntervals]; G4double IonizationPot; G4int interval1 = 0; - for (elm = 0; elm < NbElm; ++elm) - { - z = Z[elm]; - IonizationPot = fIonizationPotentials[z]*CLHEP::eV; - for(G4int row = fCumulInterval[z-1]; rowpush_back( new G4DataVector(5,0.) ); + for (interval = 0; interval < interval2; ++interval) { + fMatSandiaMatrix->push_back(new G4DataVector(5, 0.)); } - - //ready to compute the Sandia coefs for the material - + + // ready to compute the Sandia coefs for the material + const G4double* NbOfAtomsPerVolume = fMaterial->GetVecNbOfAtomsPerVolume(); - - static const G4double prec = 1.e-03*CLHEP::eV; + + static const G4double prec = 1.e-03 * CLHEP::eV; G4double coef, oldsum(0.), newsum(0.); fMatNbOfIntervals = 0; - - for ( interval = 0; interval < interval2; ++interval) - { + + for (interval = 0; interval < interval2; ++interval) { Emin = (*(*fMatSandiaMatrix)[fMatNbOfIntervals])[0] = tmp2[interval]; - for ( G4int k = 1; k < 5; ++k ) { - (*(*fMatSandiaMatrix)[fMatNbOfIntervals])[k] = 0.; + for (G4int k = 1; k < 5; ++k) { + (*(*fMatSandiaMatrix)[fMatNbOfIntervals])[k] = 0.; } newsum = 0.; - - for ( elm = 0; elm < NbElm; elm++ ) - { - GetSandiaCofPerAtom(Z[elm], Emin+prec, fSandiaCofPerAtom); - for ( G4int j = 1; j < 5; ++j ) - { - coef = NbOfAtomsPerVolume[elm]*fSandiaCofPerAtom[j-1]; - (*(*fMatSandiaMatrix)[fMatNbOfIntervals])[j] += coef; - newsum += std::abs(coef); - } - } - //check for null or redondant intervals - - if (newsum != oldsum) { oldsum = newsum; ++fMatNbOfIntervals;} + for (elm = 0; elm < NbElm; elm++) { + GetSandiaCofPerAtom(Z[elm], Emin + prec, fSandiaCofPerAtom); + + for (G4int j = 1; j < 5; ++j) { + coef = NbOfAtomsPerVolume[elm] * fSandiaCofPerAtom[j - 1]; + (*(*fMatSandiaMatrix)[fMatNbOfIntervals])[j] += coef; + newsum += std::abs(coef); + } + } + // check for null or redondant intervals + + if (newsum != oldsum) { + oldsum = newsum; + ++fMatNbOfIntervals; + } } - delete [] Z; - delete [] tmp1; - delete [] tmp2; + delete[] Z; + delete[] tmp1; + delete[] tmp2; - if ( fVerbose > 0 ) - { - G4cout<<"G4SandiaTable::ComputeMatSandiaMatrix(), mat = " - <GetName()< 0) { + G4cout << "G4SandiaTable::ComputeMatSandiaMatrix(), mat = " << fMaterial->GetName() << G4endl; - for( G4int i = 0; i < fMatNbOfIntervals; ++i) - { - G4cout<GetNumberOfElements(); + const auto noElm = (G4int)fMaterial->GetNumberOfElements(); const G4ElementVector* ElementVector = fMaterial->GetElementVector(); - - std::vector Z(noElm); //Atomic number - for ( elm = 0; elm < noElm; ++elm ) - { + std::vector Z(noElm); // Atomic number + + for (elm = 0; elm < noElm; ++elm) { z = G4lrint((*ElementVector)[elm]->GetZ()); - if(z < 1) { z = 1; } - else if(z > 100) { z = 100; } + if (z < 1) { + z = 1; + } + else if (z > 100) { + z = 100; + } Z[elm] = z; MaxIntervals += fNbOfIntervals[Z[elm]]; - } + } fMaxInterval = MaxIntervals + 2; - if ( fVerbose > 0 ) - { - G4cout<<"G4SandiaTable::ComputeMatSandiaMatrixPAI: fMaxInterval = " - < 0) { + G4cout << "G4SandiaTable::ComputeMatSandiaMatrixPAI: fMaxInterval = " << fMaxInterval << G4endl; + } G4DataVector fPhotoAbsorptionCof0(fMaxInterval); G4DataVector fPhotoAbsorptionCof1(fMaxInterval); @@ -406,7 +372,7 @@ void G4SandiaTable::ComputeMatSandiaMatrixPAI() G4DataVector fPhotoAbsorptionCof3(fMaxInterval); G4DataVector fPhotoAbsorptionCof4(fMaxInterval); - for( c = 0; c < fMaxInterval; ++c ) // just in case + for (c = 0; c < fMaxInterval; ++c) // just in case { fPhotoAbsorptionCof0[c] = 0.; fPhotoAbsorptionCof1[c] = 0.; @@ -416,247 +382,210 @@ void G4SandiaTable::ComputeMatSandiaMatrixPAI() } c = 1; - for(i = 0; i < noElm; ++i) - { - G4double I1 = fIonizationPotentials[Z[i]]*CLHEP::keV; // I1 in keV - n1 = 1; + for (i = 0; i < noElm; ++i) { + G4double I1 = fIonizationPotentials[Z[i]] * CLHEP::keV; // I1 in keV + n1 = 1; - for(j = 1; j < Z[i]; ++j) - { + for (j = 1; j < Z[i]; ++j) { n1 += fNbOfIntervals[j]; } G4int n2 = n1 + fNbOfIntervals[Z[i]]; - - for( k1 = n1; k1 < n2; ++k1 ) - { - if( I1 > fSandiaTable[k1][0] ) - { - continue; // no ionization for energies smaller than I1 (first - } // ionisation potential) + + for (k1 = n1; k1 < n2; ++k1) { + if (I1 > fSandiaTable[k1][0]) { + continue; // no ionization for energies smaller than I1 (first + } // ionisation potential) break; } G4int flag = 0; - - for( c1 = 1; c1 < c; ++c1 ) - { - if( fPhotoAbsorptionCof0[c1] == I1 ) // this value already has existed + + for (c1 = 1; c1 < c; ++c1) { + if (fPhotoAbsorptionCof0[c1] == I1) // this value already has existed { - flag = 1; - break; + flag = 1; + break; } } - if(flag == 0) - { + if (flag == 0) { fPhotoAbsorptionCof0[c] = I1; ++c; } - for( k2 = k1; k2 < n2; ++k2 ) - { + for (k2 = k1; k2 < n2; ++k2) { flag = 0; - for( c1 = 1; c1 < c; ++c1 ) - { - if( fPhotoAbsorptionCof0[c1] == fSandiaTable[k2][0] ) - { - flag = 1; - break; + for (c1 = 1; c1 < c; ++c1) { + if (fPhotoAbsorptionCof0[c1] == fSandiaTable[k2][0]) { + flag = 1; + break; } } - if(flag == 0) - { + if (flag == 0) { fPhotoAbsorptionCof0[c] = fSandiaTable[k2][0]; - ++c; + ++c; } - } - } // end for(i) + } + } // end for(i) // sort out - for( i = 1; i < c; ++i ) - { - for( j = i + 1; j < c; ++j ) - { - if( fPhotoAbsorptionCof0[i] > fPhotoAbsorptionCof0[j] ) - { + for (i = 1; i < c; ++i) { + for (j = i + 1; j < c; ++j) { + if (fPhotoAbsorptionCof0[i] > fPhotoAbsorptionCof0[j]) { G4double tmp = fPhotoAbsorptionCof0[i]; - fPhotoAbsorptionCof0[i] = fPhotoAbsorptionCof0[j]; - fPhotoAbsorptionCof0[j] = tmp; + fPhotoAbsorptionCof0[i] = fPhotoAbsorptionCof0[j]; + fPhotoAbsorptionCof0[j] = tmp; } } - if ( fVerbose > 0) - { - G4cout< 0) { + G4cout << c << " = number with zero cofs" << G4endl; + } + for (jj = 2; jj < fMaxInterval; ++jj) { + fPhotoAbsorptionCof0[jj - 1] = fPhotoAbsorptionCof0[jj]; + fPhotoAbsorptionCof1[jj - 1] = fPhotoAbsorptionCof1[jj]; + fPhotoAbsorptionCof2[jj - 1] = fPhotoAbsorptionCof2[jj]; + fPhotoAbsorptionCof3[jj - 1] = fPhotoAbsorptionCof3[jj]; + fPhotoAbsorptionCof4[jj - 1] = fPhotoAbsorptionCof4[jj]; } --fMaxInterval; - --c; + --c; } // Loop checking, 07-Aug-2015, Vladimir Ivanchenko - while( c < fMaxInterval - 1 ); + while (c < fMaxInterval - 1); - if(fPhotoAbsorptionCof0[fMaxInterval - 1] == 0.0) - { + if (fPhotoAbsorptionCof0[fMaxInterval - 1] == 0.0) { fMaxInterval--; } // create the sandia matrix for this material - + fMatSandiaMatrixPAI = new G4OrderedTable(); G4double density = fMaterial->GetDensity(); - for (i = 0; i < fMaxInterval; ++i) // -> G4units + for (i = 0; i < fMaxInterval; ++i) // -> G4units { - fPhotoAbsorptionCof0[i+1] *= funitc[0]; - fPhotoAbsorptionCof1[i+1] *= funitc[1]*density; - fPhotoAbsorptionCof2[i+1] *= funitc[2]*density; - fPhotoAbsorptionCof3[i+1] *= funitc[3]*density; - fPhotoAbsorptionCof4[i+1] *= funitc[4]*density; + fPhotoAbsorptionCof0[i + 1] *= funitc[0]; + fPhotoAbsorptionCof1[i + 1] *= funitc[1] * density; + fPhotoAbsorptionCof2[i + 1] *= funitc[2] * density; + fPhotoAbsorptionCof3[i + 1] *= funitc[3] * density; + fPhotoAbsorptionCof4[i + 1] *= funitc[4] * density; } - if(fLowerI1) - { - if( fMaterial->GetName() == "G4_WATER") - { + if (fLowerI1) { + if (fMaterial->GetName() == "G4_WATER") { fMaxInterval += fH2OlowerInt; - for (i = 0; i < fMaxInterval; ++i) // init vector table - { - fMatSandiaMatrixPAI->push_back( new G4DataVector(5,0.) ); - } - for (i = 0; i < fH2OlowerInt; ++i) + for (i = 0; i < fMaxInterval; ++i) // init vector table { + fMatSandiaMatrixPAI->push_back(new G4DataVector(5, 0.)); + } + for (i = 0; i < fH2OlowerInt; ++i) { (*(*fMatSandiaMatrixPAI)[i])[0] = fH2OlowerI1[i][0]; (*(*fMatSandiaMatrixPAI)[i])[1] = fH2OlowerI1[i][1]; (*(*fMatSandiaMatrixPAI)[i])[2] = fH2OlowerI1[i][2]; (*(*fMatSandiaMatrixPAI)[i])[3] = fH2OlowerI1[i][3]; (*(*fMatSandiaMatrixPAI)[i])[4] = fH2OlowerI1[i][4]; } - for (i = fH2OlowerInt; i < fMaxInterval; ++i) - { - (*(*fMatSandiaMatrixPAI)[i])[0] = fPhotoAbsorptionCof0[i+1-fH2OlowerInt]; - (*(*fMatSandiaMatrixPAI)[i])[1] = fPhotoAbsorptionCof1[i+1-fH2OlowerInt]; - (*(*fMatSandiaMatrixPAI)[i])[2] = fPhotoAbsorptionCof2[i+1-fH2OlowerInt]; - (*(*fMatSandiaMatrixPAI)[i])[3] = fPhotoAbsorptionCof3[i+1-fH2OlowerInt]; - (*(*fMatSandiaMatrixPAI)[i])[4] = fPhotoAbsorptionCof4[i+1-fH2OlowerInt]; + for (i = fH2OlowerInt; i < fMaxInterval; ++i) { + (*(*fMatSandiaMatrixPAI)[i])[0] = fPhotoAbsorptionCof0[i + 1 - fH2OlowerInt]; + (*(*fMatSandiaMatrixPAI)[i])[1] = fPhotoAbsorptionCof1[i + 1 - fH2OlowerInt]; + (*(*fMatSandiaMatrixPAI)[i])[2] = fPhotoAbsorptionCof2[i + 1 - fH2OlowerInt]; + (*(*fMatSandiaMatrixPAI)[i])[3] = fPhotoAbsorptionCof3[i + 1 - fH2OlowerInt]; + (*(*fMatSandiaMatrixPAI)[i])[4] = fPhotoAbsorptionCof4[i + 1 - fH2OlowerInt]; } } } - else - { - for (i = 0; i < fMaxInterval; ++i) // init vector table - { - fMatSandiaMatrixPAI->push_back( new G4DataVector(5,0.) ); - } - for (i = 0; i < fMaxInterval; ++i) + else { + for (i = 0; i < fMaxInterval; ++i) // init vector table { - (*(*fMatSandiaMatrixPAI)[i])[0] = fPhotoAbsorptionCof0[i+1]; - (*(*fMatSandiaMatrixPAI)[i])[1] = fPhotoAbsorptionCof1[i+1]; // *density; - (*(*fMatSandiaMatrixPAI)[i])[2] = fPhotoAbsorptionCof2[i+1]; // *density; - (*(*fMatSandiaMatrixPAI)[i])[3] = fPhotoAbsorptionCof3[i+1]; // *density; - (*(*fMatSandiaMatrixPAI)[i])[4] = fPhotoAbsorptionCof4[i+1]; // *density; + fMatSandiaMatrixPAI->push_back(new G4DataVector(5, 0.)); + } + for (i = 0; i < fMaxInterval; ++i) { + (*(*fMatSandiaMatrixPAI)[i])[0] = fPhotoAbsorptionCof0[i + 1]; + (*(*fMatSandiaMatrixPAI)[i])[1] = fPhotoAbsorptionCof1[i + 1]; // *density; + (*(*fMatSandiaMatrixPAI)[i])[2] = fPhotoAbsorptionCof2[i + 1]; // *density; + (*(*fMatSandiaMatrixPAI)[i])[3] = fPhotoAbsorptionCof3[i + 1]; // *density; + (*(*fMatSandiaMatrixPAI)[i])[4] = fPhotoAbsorptionCof4[i + 1]; // *density; } } - // --fMaxInterval; + // --fMaxInterval; // to avoid duplicate at 500 keV or extra zeros in last interval - if ( fVerbose > 0 ) - { - G4cout<<"G4SandiaTable::ComputeMatSandiaMatrixPAI(), mat = " - <GetName()< 0) { + G4cout << "G4SandiaTable::ComputeMatSandiaMatrixPAI(), mat = " << fMaterial->GetName() + << G4endl; - for( i = 0; i < fMaxInterval; ++i) - { - G4cout<= 0 && matIndex < numberOfMat) - { - fMaterial = (*theMaterialTable)[matIndex]; - } - else - { - G4Exception("G4SandiaTable::G4SandiaTable(G4int matIndex)", "mat401", - FatalException, "wrong matIndex"); - } + if (matIndex >= 0 && matIndex < numberOfMat) { + fMaterial = (*theMaterialTable)[matIndex]; + } + else { + G4Exception( + "G4SandiaTable::G4SandiaTable(G4int matIndex)", "mat401", FatalException, "wrong matIndex"); + } } //////////////////////////////////////////////////////////////////////////////// G4SandiaTable::G4SandiaTable() -{ - fMaterial = nullptr; - fMatNbOfIntervals = 0; - fMatSandiaMatrix = nullptr; +{ + fMaterial = nullptr; + fMatNbOfIntervals = 0; + fMatSandiaMatrix = nullptr; fMatSandiaMatrixPAI = nullptr; fPhotoAbsorptionCof = nullptr; - fMaxInterval = 0; - fVerbose = 0; + fMaxInterval = 0; + fVerbose = 0; fLowerI1 = false; - fSandiaCofPerAtom.resize(4,0.0); + fSandiaCofPerAtom.resize(4, 0.0); } //////////////////////////////////////////////////////////////////////////////// - + void G4SandiaTable::Initialize(const G4Material* mat) { fMaterial = mat; @@ -720,17 +647,13 @@ void G4SandiaTable::Initialize(const G4Material* mat) //////////////////////////////////////////////////////////////////////////////// -G4int G4SandiaTable::GetMaxInterval() const -{ - return fMaxInterval; -} +G4int G4SandiaTable::GetMaxInterval() const { return fMaxInterval; } //////////////////////////////////////////////////////////////////////////////// -G4double** G4SandiaTable::GetPointerToCof() +G4double** G4SandiaTable::GetPointerToCof() { - if(fPhotoAbsorptionCof == nullptr) - { + if (fPhotoAbsorptionCof == nullptr) { ComputeMatTable(); } return fPhotoAbsorptionCof; @@ -738,20 +661,18 @@ G4double** G4SandiaTable::GetPointerToCof() //////////////////////////////////////////////////////////////////////////////// -void G4SandiaTable::SandiaSwap( G4double** da , - G4int i, - G4int j ) +void G4SandiaTable::SandiaSwap(G4double** da, G4int i, G4int j) { - G4double tmp = da[i][0] ; - da[i][0] = da[j][0] ; - da[j][0] = tmp ; + G4double tmp = da[i][0]; + da[i][0] = da[j][0]; + da[j][0] = tmp; } //////////////////////////////////////////////////////////////////////////////// G4double G4SandiaTable::GetPhotoAbsorpCof(G4int i, G4int j) const { - return fPhotoAbsorptionCof[i][j]*funitc[j]; + return fPhotoAbsorptionCof[i][j] * funitc[j]; } //////////////////////////////////////////////////////////////////////////////// @@ -759,341 +680,302 @@ G4double G4SandiaTable::GetPhotoAbsorpCof(G4int i, G4int j) const // Bubble sorting of left energy interval in SandiaTable in ascening order // -void -G4SandiaTable::SandiaSort(G4double** da, G4int sz) +void G4SandiaTable::SandiaSort(G4double** da, G4int sz) { - for(G4int i = 1;i < sz; ++i ) - { - for(G4int j = i + 1;j < sz; ++j ) - { - if(da[i][0] > da[j][0]) - { - SandiaSwap(da, i, j); - } - } - } + for (G4int i = 1; i < sz; ++i) { + for (G4int j = i + 1; j < sz; ++j) { + if (da[i][0] > da[j][0]) { + SandiaSwap(da, i, j); + } + } + } } //////////////////////////////////////////////////////////////////////////////// // -// SandiaIntervals +// SandiaIntervals // -G4int G4SandiaTable::SandiaIntervals(G4int Z[], G4int el ) +G4int G4SandiaTable::SandiaIntervals(G4int Z[], G4int el) { - G4int c, i, flag = 0, n1 = 1; + G4int c, i, flag = 0, n1 = 1; G4int j, c1, k1, k2; G4double I1; fMaxInterval = 0; - for(i = 0; i < el; ++i) - { + for (i = 0; i < el; ++i) { fMaxInterval += fNbOfIntervals[Z[i]]; } fMaxInterval += 2; - if( fVerbose > 0 ) { - G4cout<<"begin sanInt, fMaxInterval = "< 0) { + G4cout << "begin sanInt, fMaxInterval = " << fMaxInterval << G4endl; } - fPhotoAbsorptionCof = new G4double* [fMaxInterval]; + fPhotoAbsorptionCof = new G4double*[fMaxInterval]; - for( i = 0; i < fMaxInterval; ++i ) { + for (i = 0; i < fMaxInterval; ++i) { fPhotoAbsorptionCof[i] = new G4double[5]; } // for(c = 0; c < fIntervalLimit; ++c) // just in case - for( c = 0; c < fMaxInterval; ++c ) { fPhotoAbsorptionCof[c][0] = 0.; } - + for (c = 0; c < fMaxInterval; ++c) { + fPhotoAbsorptionCof[c][0] = 0.; + } + c = 1; - for( i = 0; i < el; ++i ) - { - I1 = fIonizationPotentials[ Z[i] ]*keV; // First ionization - n1 = 1; // potential in keV + for (i = 0; i < el; ++i) { + I1 = fIonizationPotentials[Z[i]] * keV; // First ionization + n1 = 1; // potential in keV - for(j = 1; j < Z[i]; ++j) - { + for (j = 1; j < Z[i]; ++j) { n1 += fNbOfIntervals[j]; } G4int n2 = n1 + fNbOfIntervals[Z[i]]; - - for( k1 = n1; k1 < n2; k1++ ) - { - if( I1 > fSandiaTable[k1][0] ) - { - continue; // no ionization for energies smaller than I1 (first - } // ionisation potential) + + for (k1 = n1; k1 < n2; k1++) { + if (I1 > fSandiaTable[k1][0]) { + continue; // no ionization for energies smaller than I1 (first + } // ionisation potential) break; } flag = 0; - - for( c1 = 1; c1 < c; c1++ ) - { - if( fPhotoAbsorptionCof[c1][0] == I1 ) // this value already has existed + + for (c1 = 1; c1 < c; c1++) { + if (fPhotoAbsorptionCof[c1][0] == I1) // this value already has existed { - flag = 1; - break; + flag = 1; + break; } } - if( flag == 0 ) - { + if (flag == 0) { fPhotoAbsorptionCof[c][0] = I1; ++c; } - for( k2 = k1; k2 < n2; k2++ ) - { + for (k2 = k1; k2 < n2; k2++) { flag = 0; - for( c1 = 1; c1 < c; c1++ ) - { - if( fPhotoAbsorptionCof[c1][0] == fSandiaTable[k2][0] ) - { - flag = 1; - break; + for (c1 = 1; c1 < c; c1++) { + if (fPhotoAbsorptionCof[c1][0] == fSandiaTable[k2][0]) { + flag = 1; + break; } } - if( flag == 0 ) - { + if (flag == 0) { fPhotoAbsorptionCof[c][0] = fSandiaTable[k2][0]; - if( fVerbose > 0 ) { - G4cout<<"sanInt, c = "<=fNbOfIntervals[Z]) { + } + if (interval < 0 || interval >= fNbOfIntervals[Z]) { PrintErrorV("GetSandiaPerAtom"); - interval = (interval<0) ? 0 : fNbOfIntervals[Z]-1; + interval = (interval < 0) ? 0 : fNbOfIntervals[Z] - 1; } - if(j<0 || j>4) { + if (j < 0 || j > 4) { PrintErrorV("GetSandiaPerAtom"); - j = (j<0) ? 0 : 4; + j = (j < 0) ? 0 : 4; } #endif - G4int row = fCumulInterval[Z-1] + interval; - G4double x = fSandiaTable[row][0]*CLHEP::keV; + G4int row = fCumulInterval[Z - 1] + interval; + G4double x = fSandiaTable[row][0] * CLHEP::keV; if (j > 0) { - x = Z*CLHEP::amu/fZtoAratio[Z]*fSandiaTable[row][j]*funitc[j]; + x = Z * CLHEP::amu / fZtoAratio[Z] * fSandiaTable[row][j] * funitc[j]; } return x; } //////////////////////////////////////////////////////////////////////////////// -G4double -G4SandiaTable::GetSandiaCofForMaterial(G4int interval, G4int j) const +G4double G4SandiaTable::GetSandiaCofForMaterial(G4int interval, G4int j) const { #ifdef G4VERBOSE - if(interval<0 || interval>=fMatNbOfIntervals) { + if (interval < 0 || interval >= fMatNbOfIntervals) { PrintErrorV("GetSandiaCofForMaterial"); - interval = (interval<0) ? 0 : fMatNbOfIntervals-1; + interval = (interval < 0) ? 0 : fMatNbOfIntervals - 1; } - if(j<0 || j>4) { + if (j < 0 || j > 4) { PrintErrorV("GetSandiaCofForMaterial"); - j = (j<0) ? 0 : 4; + j = (j < 0) ? 0 : 4; } #endif - return ((*(*fMatSandiaMatrix)[interval])[j]); + return ((*(*fMatSandiaMatrix)[interval])[j]); } //////////////////////////////////////////////////////////////////////////////// -const G4double* -G4SandiaTable::GetSandiaCofForMaterial(G4double energy) const +const G4double* G4SandiaTable::GetSandiaCofForMaterial(G4double energy) const { G4int interval = 0; - if (energy > (*(*fMatSandiaMatrix)[0])[0]) { + if (energy > (*(*fMatSandiaMatrix)[0])[0]) { interval = fMatNbOfIntervals - 1; // Loop checking, 07-Aug-2015, Vladimir Ivanchenko - while ((interval>0)&&(energy<(*(*fMatSandiaMatrix)[interval])[0])) - { --interval; } - } + while ((interval > 0) && (energy < (*(*fMatSandiaMatrix)[interval])[0])) { + --interval; + } + } return &((*(*fMatSandiaMatrix)[interval])[1]); } //////////////////////////////////////////////////////////////////////////////// -G4double -G4SandiaTable::GetSandiaMatTable(G4int interval, G4int j) const +G4double G4SandiaTable::GetSandiaMatTable(G4int interval, G4int j) const { #ifdef G4VERBOSE - if(interval<0 || interval>=fMatNbOfIntervals) { + if (interval < 0 || interval >= fMatNbOfIntervals) { PrintErrorV("GetSandiaCofForMaterial"); - interval = (interval<0) ? 0 : fMatNbOfIntervals-1; + interval = (interval < 0) ? 0 : fMatNbOfIntervals - 1; } - if(j<0 || j>4) { + if (j < 0 || j > 4) { PrintErrorV("GetSandiaCofForMaterial"); - j = (j<0) ? 0 : 4; + j = (j < 0) ? 0 : 4; } #endif - return ((*(*fMatSandiaMatrix)[interval])[j])*funitc[j]; + return ((*(*fMatSandiaMatrix)[interval])[j]) * funitc[j]; } //////////////////////////////////////////////////////////////////////////////// -G4double -G4SandiaTable::GetSandiaMatTablePAI(G4int interval, G4int j) const +G4double G4SandiaTable::GetSandiaMatTablePAI(G4int interval, G4int j) const { #ifdef G4VERBOSE - if(interval<0 || interval>=fMaxInterval) { + if (interval < 0 || interval >= fMaxInterval) { PrintErrorV("GetSandiaCofForMaterialPAI"); - interval = (interval<0) ? 0 : fMaxInterval-1; + interval = (interval < 0) ? 0 : fMaxInterval - 1; } - if(j<0 || j>4) { + if (j < 0 || j > 4) { PrintErrorV("GetSandiaCofForMaterialPAI"); - j = (j<0) ? 0 : 4; + j = (j < 0) ? 0 : 4; } #endif - return ((*(*fMatSandiaMatrixPAI)[interval])[j]); + return ((*(*fMatSandiaMatrixPAI)[interval])[j]); } //////////////////////////////////////////////////////////////////////////////// // -// Sandia interval and mixing calculations for materialCutsCouple constructor +// Sandia interval and mixing calculations for materialCutsCouple constructor // void G4SandiaTable::ComputeMatTable() { - G4int elm, c, i, j, jj, k, kk, k1, k2, c1, n1; + G4int elm, c, i, j, jj, k, kk, k1, k2, c1, n1; - const G4int noElm = (G4int)fMaterial->GetNumberOfElements(); - const G4ElementVector* ElementVector = fMaterial->GetElementVector(); - G4int* Z = new G4int[noElm]; //Atomic number + const auto noElm = (G4int)fMaterial->GetNumberOfElements(); + const G4ElementVector* ElementVector = fMaterial->GetElementVector(); + auto Z = new G4int[noElm]; // Atomic number fMaxInterval = 0; - for (elm = 0; elmGetZasInt(); fMaxInterval += fNbOfIntervals[Z[elm]]; } @@ -1101,191 +983,151 @@ void G4SandiaTable::ComputeMatTable() // G4cout<<"fMaxInterval = "< fSandiaTable[k1][0]) - { - continue; // no ionization for energies smaller than I1 (first - } // ionisation potential) + + for (k1 = n1; k1 < n2; ++k1) { + if (I1 > fSandiaTable[k1][0]) { + continue; // no ionization for energies smaller than I1 (first + } // ionisation potential) break; } G4int flag = 0; - - for(c1 = 1; c1 < c; ++c1) - { - if(fPhotoAbsorptionCof[c1][0] == I1) // this value already has existed + + for (c1 = 1; c1 < c; ++c1) { + if (fPhotoAbsorptionCof[c1][0] == I1) // this value already has existed { - flag = 1; - break; + flag = 1; + break; } } - if(flag == 0) - { + if (flag == 0) { fPhotoAbsorptionCof[c][0] = I1; ++c; } - for(k2 = k1; k2 < n2; ++k2) - { + for (k2 = k1; k2 < n2; ++k2) { flag = 0; - for(c1 = 1; c1 < c; ++c1) - { - if(fPhotoAbsorptionCof[c1][0] == fSandiaTable[k2][0]) - { - flag = 1; - break; + for (c1 = 1; c1 < c; ++c1) { + if (fPhotoAbsorptionCof[c1][0] == fSandiaTable[k2][0]) { + flag = 1; + break; } } - if(flag == 0) - { + if (flag == 0) { fPhotoAbsorptionCof[c][0] = fSandiaTable[k2][0]; - ++c; + ++c; } - } - } // end for(i) - - SandiaSort(fPhotoAbsorptionCof,c); + } + } // end for(i) + + SandiaSort(fPhotoAbsorptionCof, c); fMaxInterval = c; - + const G4double* fractionW = fMaterial->GetFractionVector(); - - for(i = 0; i < fMaxInterval; ++i) - { - for(j = 1; j < 5; ++j) - { + + for (i = 0; i < fMaxInterval; ++i) { + for (j = 1; j < 5; ++j) { fPhotoAbsorptionCof[i][j] = 0.; } } - for(i = 0; i < noElm; ++i) - { - n1 = 1; - G4double I1 = fIonizationPotentials[Z[i]]*keV; + for (i = 0; i < noElm; ++i) { + n1 = 1; + G4double I1 = fIonizationPotentials[Z[i]] * keV; - for(j = 1; j < Z[i]; ++j) - { - n1 += fNbOfIntervals[j]; + for (j = 1; j < Z[i]; ++j) { + n1 += fNbOfIntervals[j]; + } + G4int n2 = n1 + fNbOfIntervals[Z[i]] - 1; + + for (k = n1; k < n2; ++k) { + G4double B1 = fSandiaTable[k][0]; + G4double B2 = fSandiaTable[k + 1][0]; + for (G4int q = 1; q < fMaxInterval - 1; q++) { + G4double E1 = fPhotoAbsorptionCof[q][0]; + G4double E2 = fPhotoAbsorptionCof[q + 1][0]; + if (B1 > E1 || B2 < E2 || E1 < I1) { + continue; + } + for (j = 1; j < 5; ++j) { + fPhotoAbsorptionCof[q][j] += fSandiaTable[k][j] * fractionW[i]; + } } - G4int n2 = n1 + fNbOfIntervals[Z[i]] - 1; + } + for (j = 1; j < 5; ++j) // Last interval + { + fPhotoAbsorptionCof[fMaxInterval - 1][j] += fSandiaTable[k][j] * fractionW[i]; + } + } // for(i) - for(k = n1; k < n2; ++k) - { - G4double B1 = fSandiaTable[k][0]; - G4double B2 = fSandiaTable[k+1][0]; - for(G4int q = 1; q < fMaxInterval-1; q++) - { - G4double E1 = fPhotoAbsorptionCof[q][0]; - G4double E2 = fPhotoAbsorptionCof[q+1][0]; - if(B1 > E1 || B2 < E2 || E1 < I1) - { - continue; - } - for(j = 1; j < 5; ++j) - { - fPhotoAbsorptionCof[q][j] += fSandiaTable[k][j]*fractionW[i]; - } - } - } - for(j = 1; j < 5; ++j) // Last interval - { - fPhotoAbsorptionCof[fMaxInterval-1][j] += - fSandiaTable[k][j]*fractionW[i]; - } - } // for(i) - - c = 0; // Deleting of first intervals where all coefficients = 0 - - do - { + c = 0; // Deleting of first intervals where all coefficients = 0 + + do { ++c; - if(fPhotoAbsorptionCof[c][1] != 0.0 || fPhotoAbsorptionCof[c][2] != 0.0 || - fPhotoAbsorptionCof[c][3] != 0.0 || fPhotoAbsorptionCof[c][4] != 0.0) + if (fPhotoAbsorptionCof[c][1] != 0.0 || fPhotoAbsorptionCof[c][2] != 0.0 || + fPhotoAbsorptionCof[c][3] != 0.0 || fPhotoAbsorptionCof[c][4] != 0.0) { continue; } - for(jj = 2; jj < fMaxInterval; ++jj) - { - for(kk = 0; kk < 5; ++kk) - { - fPhotoAbsorptionCof[jj-1][kk]= fPhotoAbsorptionCof[jj][kk]; + for (jj = 2; jj < fMaxInterval; ++jj) { + for (kk = 0; kk < 5; ++kk) { + fPhotoAbsorptionCof[jj - 1][kk] = fPhotoAbsorptionCof[jj][kk]; } } --fMaxInterval; --c; } // Loop checking, 07-Aug-2015, Vladimir Ivanchenko - while( c < fMaxInterval - 1 ); - + while (c < fMaxInterval - 1); + // create the sandia matrix for this material --fMaxInterval; // vmg 20.11.10 - + fMatSandiaMatrix = new G4OrderedTable(); - - for (i = 0; i < fMaxInterval; ++i) - { - fMatSandiaMatrix->push_back(new G4DataVector(5,0.)); - } - for ( i = 0; i < fMaxInterval; ++i ) - { - for( j = 0; j < 5; ++j ) - { - (*(*fMatSandiaMatrix)[i])[j] = fPhotoAbsorptionCof[i+1][j]; - } + + for (i = 0; i < fMaxInterval; ++i) { + fMatSandiaMatrix->push_back(new G4DataVector(5, 0.)); } - fMatNbOfIntervals = fMaxInterval; - - if ( fVerbose > 0 ) - { - G4cout<<"vmg, G4SandiaTable::ComputeMatTable(), mat = " - <GetName()<GetSandiaCofForMaterial(i,1) - <<"\t"<GetSandiaCofForMaterial(i,2) - <<"\t"<GetSandiaCofForMaterial(i,3) - <<"\t"<GetSandiaCofForMaterial(i,4)< 0) { + G4cout << "vmg, G4SandiaTable::ComputeMatTable(), mat = " << fMaterial->GetName() << G4endl; + + for (i = 0; i < fMaxInterval; ++i) { + G4cout << i << "\t" << GetSandiaCofForMaterial(i, 0) / keV << " keV \t" + << this->GetSandiaCofForMaterial(i, 1) << "\t" << this->GetSandiaCofForMaterial(i, 2) + << "\t" << this->GetSandiaCofForMaterial(i, 3) << "\t" + << this->GetSandiaCofForMaterial(i, 4) << G4endl; } - } - delete [] Z; + } + delete[] Z; return; -} - -// -// -//////////////////////////////////////////////////////////////////////////////// +} diff --git a/source/materials/src/G4SurfaceProperty.cc b/source/materials/src/G4SurfaceProperty.cc index 1cfa23d9a11..a07a211973f 100644 --- a/source/materials/src/G4SurfaceProperty.cc +++ b/source/materials/src/G4SurfaceProperty.cc @@ -22,10 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// -// + //////////////////////////////////////////////////////////////////////// // G4SurfaceProperty Implementation //////////////////////////////////////////////////////////////////////// @@ -42,22 +39,21 @@ // //////////////////////////////////////////////////////////////////////// +#include "G4SurfaceProperty.hh" + #include "globals.hh" -#include "G4SurfaceProperty.hh" +#include G4SurfacePropertyTable G4SurfaceProperty::theSurfacePropertyTable; G4SurfaceProperty::G4SurfaceProperty(const G4String& name, G4SurfaceType type) - : theName(name) - , theType(type) + : theName(name), theType(type) { theSurfacePropertyTable.push_back(this); } -G4SurfaceProperty::G4SurfaceProperty() - : theName("Dielectric") - , theType(dielectric_metal) +G4SurfaceProperty::G4SurfaceProperty() : theName("Dielectric"), theType(dielectric_metal) { theSurfacePropertyTable.push_back(this); } @@ -67,10 +63,7 @@ const G4SurfacePropertyTable* G4SurfaceProperty::GetSurfacePropertyTable() return &theSurfacePropertyTable; } -size_t G4SurfaceProperty::GetNumberOfSurfaceProperties() -{ - return theSurfacePropertyTable.size(); -} +size_t G4SurfaceProperty::GetNumberOfSurfaceProperties() { return theSurfacePropertyTable.size(); } // Dump info for known surface properties void G4SurfaceProperty::DumpTableInfo() @@ -78,11 +71,9 @@ void G4SurfaceProperty::DumpTableInfo() G4cout << "***** Surface Property Table : Nb of Surface Properties = " << GetNumberOfSurfaceProperties() << " *****" << G4endl; - for(auto pSurfaceProperty : theSurfacePropertyTable) - { + for (auto pSurfaceProperty : theSurfacePropertyTable) { G4cout << pSurfaceProperty->GetName() << " : " << G4endl - << " Surface Property type = " << pSurfaceProperty->GetType() - << G4endl; + << " Surface Property type = " << pSurfaceProperty->GetType() << G4endl; } G4cout << G4endl; } @@ -91,11 +82,8 @@ void G4SurfaceProperty::CleanSurfacePropertyTable() { DumpTableInfo(); G4SurfacePropertyTable::iterator pos; - for(pos = theSurfacePropertyTable.begin(); - pos != theSurfacePropertyTable.end(); pos++) - { - if(*pos != nullptr) - { + for (pos = theSurfacePropertyTable.begin(); pos != theSurfacePropertyTable.end(); pos++) { + if (*pos != nullptr) { delete *pos; } } diff --git a/source/materials/src/G4UCNMaterialPropertiesTable.cc b/source/materials/src/G4UCNMaterialPropertiesTable.cc index 7e7c87e4448..19f749d8dd5 100644 --- a/source/materials/src/G4UCNMaterialPropertiesTable.cc +++ b/source/materials/src/G4UCNMaterialPropertiesTable.cc @@ -42,38 +42,37 @@ // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -#include - #include "G4UCNMaterialPropertiesTable.hh" -#include "G4UCNMicroRoughnessHelper.hh" -#include "G4SystemOfUnits.hh" #include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" +#include "G4UCNMicroRoughnessHelper.hh" + +#include G4UCNMaterialPropertiesTable::G4UCNMaterialPropertiesTable() - : G4MaterialPropertiesTable() { theMicroRoughnessTable = nullptr; maxMicroRoughnessTable = nullptr; theMicroRoughnessTransTable = nullptr; maxMicroRoughnessTransTable = nullptr; - theta_i_min = 0.*degree; - theta_i_max = 90.*degree; + theta_i_min = 0. * degree; + theta_i_max = 90. * degree; - Emin = 0.e-9*eV; - Emax = 1000.e-9*eV; + Emin = 0.e-9 * eV; + Emax = 1000.e-9 * eV; no_theta_i = 90; noE = 100; - theta_i_step = (theta_i_max-theta_i_min)/(no_theta_i-1); - E_step = (Emax-Emin)/(noE-1); + theta_i_step = (theta_i_max - theta_i_min) / (no_theta_i - 1); + E_step = (Emax - Emin) / (noE - 1); - b = 1*nm; - w = 30*nm; + b = 1 * nm; + w = 30 * nm; - AngCut = 0.01*degree; + AngCut = 0.01 * degree; } G4UCNMaterialPropertiesTable::~G4UCNMaterialPropertiesTable() @@ -84,53 +83,44 @@ G4UCNMaterialPropertiesTable::~G4UCNMaterialPropertiesTable() delete maxMicroRoughnessTransTable; } -G4double* G4UCNMaterialPropertiesTable::GetMicroRoughnessTable () -{ - return theMicroRoughnessTable; -} +G4double* G4UCNMaterialPropertiesTable::GetMicroRoughnessTable() { return theMicroRoughnessTable; } -G4double* G4UCNMaterialPropertiesTable::GetMicroRoughnessTransTable () +G4double* G4UCNMaterialPropertiesTable::GetMicroRoughnessTransTable() { return theMicroRoughnessTransTable; } -void G4UCNMaterialPropertiesTable:: - LoadMicroRoughnessTables(G4double* pMicroRoughnessTable, - G4double* pmaxMicroRoughnessTable, - G4double* pMicroRoughnessTransTable, - G4double* pmaxMicroRoughnessTransTable) +void G4UCNMaterialPropertiesTable::LoadMicroRoughnessTables(G4double* pMicroRoughnessTable, + G4double* pmaxMicroRoughnessTable, G4double* pMicroRoughnessTransTable, + G4double* pmaxMicroRoughnessTransTable) { - theMicroRoughnessTable = pMicroRoughnessTable; - maxMicroRoughnessTable = pmaxMicroRoughnessTable; + theMicroRoughnessTable = pMicroRoughnessTable; + maxMicroRoughnessTable = pmaxMicroRoughnessTable; theMicroRoughnessTransTable = pMicroRoughnessTransTable; maxMicroRoughnessTransTable = pmaxMicroRoughnessTransTable; } void G4UCNMaterialPropertiesTable::InitMicroRoughnessTables() { - G4int NEdim = 0; + G4int NEdim = 0; G4int Nthetadim = 0; // Checks if the number of angles is available and stores it - if(ConstPropertyExists("MR_NBTHETA")) - { + if (ConstPropertyExists("MR_NBTHETA")) { Nthetadim = G4int(GetConstProperty("MR_NBTHETA") + 0.1); } // Checks if the number of energies is available and stores it - if(ConstPropertyExists("MR_NBE")) - { + if (ConstPropertyExists("MR_NBE")) { NEdim = G4int(GetConstProperty("MR_NBE") + 0.1); } - //G4cout << "thetadim: " << Nthetadim << " , Edim: " << NEdim << G4endl; - // If both dimensions of the lookup-table are non-trivial: // delete old tables if existing and allocate memory for new tables - if (Nthetadim*NEdim > 0) { + if (Nthetadim * NEdim > 0) { delete theMicroRoughnessTable; theMicroRoughnessTable = new G4double[Nthetadim * NEdim]; delete maxMicroRoughnessTable; @@ -144,79 +134,64 @@ void G4UCNMaterialPropertiesTable::InitMicroRoughnessTables() void G4UCNMaterialPropertiesTable::ComputeMicroRoughnessTables() { -// Reads the parameters for the mr-probability computation from the -// corresponding material properties and stores it in the appropriate -// variables + // Reads the parameters for the mr-probability computation from the + // corresponding material properties and stores it in the appropriate + // variables b = GetConstProperty("MR_RRMS"); - G4double b2 = b*b; + G4double b2 = b * b; w = GetConstProperty("MR_CORRLEN"); - G4double w2 = w*w; + G4double w2 = w * w; - no_theta_i = G4int(GetConstProperty("MR_NBTHETA")+0.1); - //G4cout << "no_theta: " << no_theta_i << G4endl; - noE = G4int(GetConstProperty("MR_NBE")+0.1); - //G4cout << "noE: " << noE << G4endl; + no_theta_i = G4int(GetConstProperty("MR_NBTHETA") + 0.1); + noE = G4int(GetConstProperty("MR_NBE") + 0.1); theta_i_min = GetConstProperty("MR_THETAMIN"); theta_i_max = GetConstProperty("MR_THETAMAX"); Emin = GetConstProperty("MR_EMIN"); Emax = GetConstProperty("MR_EMAX"); - G4int AngNoTheta = G4int(GetConstProperty("MR_ANGNOTHETA")+0.1); - G4int AngNoPhi = G4int(GetConstProperty("MR_ANGNOPHI")+0.1); + auto AngNoTheta = G4int(GetConstProperty("MR_ANGNOTHETA") + 0.1); + auto AngNoPhi = G4int(GetConstProperty("MR_ANGNOPHI") + 0.1); AngCut = GetConstProperty("MR_ANGCUT"); // The Fermi potential was saved in neV by P.F. - G4double fermipot = GetConstProperty("FERMIPOT")*(1.e-9*eV); - - //G4cout << "Fermipot: " << fermipot/(1.e-9*eV) << "neV" << G4endl; + G4double fermipot = GetConstProperty("FERMIPOT") * (1.e-9 * eV); G4double theta_i, E; // Calculates the increment in theta_i in the lookup-table - theta_i_step = (theta_i_max-theta_i_min)/(no_theta_i-1); - - //G4cout << "theta_i_step: " << theta_i_step << G4endl; + theta_i_step = (theta_i_max - theta_i_min) / (no_theta_i - 1); // Calculates the increment in energy in the lookup-table - E_step = (Emax-Emin)/(noE-1); + E_step = (Emax - Emin) / (noE - 1); // Runs the lookup-table memory allocation InitMicroRoughnessTables(); G4int counter = 0; - //G4cout << "Calculating Microroughnesstables..."; - // Writes the mr-lookup-tables to files for immediate control + std::ofstream dateir("MRrefl.dat", std::ios::out); + std::ofstream dateit("MRtrans.dat", std::ios::out); - std::ofstream dateir("MRrefl.dat",std::ios::out); - std::ofstream dateit("MRtrans.dat",std::ios::out); + // G4cout << theMicroRoughnessTable << G4endl; - //G4cout << theMicroRoughnessTable << G4endl; + for (theta_i = theta_i_min; theta_i <= theta_i_max + 1e-6; theta_i += theta_i_step) { + // Calculation for each cell in the lookup-table + for (E = Emin; E <= Emax; E += E_step) { + *(theMicroRoughnessTable + counter) = G4UCNMicroRoughnessHelper::GetInstance()->IntIplus(E, + fermipot, theta_i, AngNoTheta, AngNoPhi, b2, w2, maxMicroRoughnessTable + counter, AngCut); - for (theta_i=theta_i_min; theta_i<=theta_i_max+1e-6; theta_i+=theta_i_step) { - // Calculation for each cell in the lookup-table - for (E=Emin; E<=Emax; E+=E_step) { - *(theMicroRoughnessTable+counter) = - G4UCNMicroRoughnessHelper::GetInstance() -> - IntIplus(E, fermipot, theta_i, AngNoTheta, AngNoPhi, - b2, w2, maxMicroRoughnessTable+counter, AngCut); + *(theMicroRoughnessTransTable + counter) = + G4UCNMicroRoughnessHelper::GetInstance()->IntIminus(E, fermipot, theta_i, AngNoTheta, + AngNoPhi, b2, w2, maxMicroRoughnessTransTable + counter, AngCut); - *(theMicroRoughnessTransTable+counter) = - G4UCNMicroRoughnessHelper::GetInstance() -> - IntIminus(E, fermipot, theta_i, AngNoTheta, AngNoPhi, - b2, w2, maxMicroRoughnessTransTable+counter, - AngCut); + dateir << *(theMicroRoughnessTable + counter) << G4endl; + dateit << *(theMicroRoughnessTransTable + counter) << G4endl; - dateir << *(theMicroRoughnessTable+counter) << G4endl; - dateit << *(theMicroRoughnessTransTable+counter) << G4endl; - - counter++; - - //G4cout << counter << G4endl; - } + counter++; + } } dateir.close(); @@ -224,20 +199,19 @@ void G4UCNMaterialPropertiesTable::ComputeMicroRoughnessTables() // Writes the mr-lookup-tables to files for immediate control - std::ofstream dateic("MRcheck.dat",std::ios::out); - std::ofstream dateimr("MRmaxrefl.dat",std::ios::out); - std::ofstream dateimt("MRmaxtrans.dat",std::ios::out); + std::ofstream dateic("MRcheck.dat", std::ios::out); + std::ofstream dateimr("MRmaxrefl.dat", std::ios::out); + std::ofstream dateimt("MRmaxtrans.dat", std::ios::out); - for (theta_i=theta_i_min; theta_i<=theta_i_max+1e-6; theta_i+=theta_i_step) { - for (E=Emin; E<=Emax; E+=E_step) { + for (theta_i = theta_i_min; theta_i <= theta_i_max + 1e-6; theta_i += theta_i_step) { + for (E = Emin; E <= Emax; E += E_step) { + // tests the GetXXProbability functions by writing the entries + // of the lookup tables to files - // tests the GetXXProbability functions by writing the entries - // of the lookup tables to files - - dateic << GetMRIntProbability(theta_i,E) << G4endl; - dateimr << GetMRMaxProbability(theta_i,E) << G4endl; - dateimt << GetMRMaxTransProbability(theta_i,E) << G4endl; - } + dateic << GetMRIntProbability(theta_i, E) << G4endl; + dateimr << GetMRMaxProbability(theta_i, E) << G4endl; + dateimt << GetMRMaxTransProbability(theta_i, E) << G4endl; + } } dateic.close(); @@ -245,119 +219,92 @@ void G4UCNMaterialPropertiesTable::ComputeMicroRoughnessTables() dateimt.close(); } -G4double G4UCNMaterialPropertiesTable:: - GetMRIntProbability(G4double theta_i, G4double Energy) +G4double G4UCNMaterialPropertiesTable::GetMRIntProbability(G4double theta_i, G4double Energy) { - if(theMicroRoughnessTable == nullptr) - { + if (theMicroRoughnessTable == nullptr) { G4cout << "Do not have theMicroRoughnessTable" << G4endl; return 0.; } // if theta_i or energy outside the range for which the lookup table is // calculated, the probability is set to zero - - //G4cout << "theta_i: " << theta_i/degree << "degree" - // << " theta_i_min: " << theta_i_min/degree << "degree" - // << " theta_i_max: " << theta_i_max/degree << "degree" - // << " Energy: " << Energy/(1.e-9*eV) << "neV" - // << " Emin: " << Emin/(1.e-9*eV) << "neV" - // << " Emax: " << Emax/(1.e-9*eV) << "neV" << G4endl; - - if(theta_i < theta_i_min || theta_i > theta_i_max || Energy < Emin || - Energy > Emax) - { + if (theta_i < theta_i_min || theta_i > theta_i_max || Energy < Emin || Energy > Emax) { return 0.; } // Determines the nearest cell in the lookup table which contains // the probability - G4int theta_i_pos = G4int((theta_i-theta_i_min)/theta_i_step+0.5); - G4int E_pos = G4int((Energy-Emin)/E_step+0.5); + auto theta_i_pos = G4int((theta_i - theta_i_min) / theta_i_step + 0.5); + auto E_pos = G4int((Energy - Emin) / E_step + 0.5); // lookup table is onedimensional (1 row), energy is in rows, // theta_i in columns - - //G4cout << "E_pos: " << E_pos << " theta_i_pos: " << theta_i_pos << G4endl; - //G4cout << "Probability: " << *(theMicroRoughnessTable+E_pos+theta_i_pos*(noE-1)) << G4endl; - - return *(theMicroRoughnessTable+E_pos+theta_i_pos*(noE - 1)); + return *(theMicroRoughnessTable + E_pos + theta_i_pos * (noE - 1)); } -G4double G4UCNMaterialPropertiesTable:: - GetMRIntTransProbability(G4double theta_i, G4double Energy) +G4double G4UCNMaterialPropertiesTable::GetMRIntTransProbability(G4double theta_i, G4double Energy) { - if(theMicroRoughnessTransTable == nullptr) - { + if (theMicroRoughnessTransTable == nullptr) { return 0.; } // if theta_i or energy outside the range for which the lookup table // is calculated, the probability is set to zero - if(theta_i < theta_i_min || theta_i > theta_i_max || Energy < Emin || - Energy > Emax) - { + if (theta_i < theta_i_min || theta_i > theta_i_max || Energy < Emin || Energy > Emax) { return 0.; } // Determines the nearest cell in the lookup table which contains // the probability - G4int theta_i_pos = G4int((theta_i-theta_i_min)/theta_i_step+0.5); - G4int E_pos = G4int((Energy-Emin)/E_step+0.5); + auto theta_i_pos = G4int((theta_i - theta_i_min) / theta_i_step + 0.5); + auto E_pos = G4int((Energy - Emin) / E_step + 0.5); // lookup table is onedimensional (1 row), energy is in rows, // theta_i in columns - return *(theMicroRoughnessTransTable+E_pos+theta_i_pos*(noE - 1)); + return *(theMicroRoughnessTransTable + E_pos + theta_i_pos * (noE - 1)); } -G4double G4UCNMaterialPropertiesTable:: - GetMRMaxProbability(G4double theta_i, G4double Energy) +G4double G4UCNMaterialPropertiesTable::GetMRMaxProbability(G4double theta_i, G4double Energy) { - if(maxMicroRoughnessTable == nullptr) - { + if (maxMicroRoughnessTable == nullptr) { return 0.; } // if theta_i or energy outside the range for which the lookup table // is calculated, the probability is set to zero - if(theta_i < theta_i_min || theta_i > theta_i_max || Energy < Emin || - Energy > Emax) - { + if (theta_i < theta_i_min || theta_i > theta_i_max || Energy < Emin || Energy > Emax) { return 0.; } // Determines the nearest cell in the lookup table which contains // the probability - G4int theta_i_pos = G4int((theta_i-theta_i_min)/theta_i_step+0.5); - G4int E_pos = G4int((Energy-Emin)/E_step+0.5); + auto theta_i_pos = G4int((theta_i - theta_i_min) / theta_i_step + 0.5); + auto E_pos = G4int((Energy - Emin) / E_step + 0.5); // lookup table is onedimensional (1 row), energy is in rows, // theta_i in columns - return *(maxMicroRoughnessTable+E_pos+theta_i_pos*noE); + return *(maxMicroRoughnessTable + E_pos + theta_i_pos * noE); } -void G4UCNMaterialPropertiesTable:: - SetMRMaxProbability(G4double theta_i, G4double Energy, G4double value) +void G4UCNMaterialPropertiesTable::SetMRMaxProbability( + G4double theta_i, G4double Energy, G4double value) { - if(maxMicroRoughnessTable != nullptr) - { - if(theta_i < theta_i_min || theta_i > theta_i_max || Energy < Emin || - Energy > Emax) - {} - else - { + if (maxMicroRoughnessTable != nullptr) { + if (theta_i < theta_i_min || theta_i > theta_i_max || Energy < Emin || Energy > Emax) { + } + else { // Determines the nearest cell in the lookup table which contains // the probability - G4int theta_i_pos = G4int((theta_i - theta_i_min) / theta_i_step + 0.5); - G4int E_pos = G4int((Energy - Emin) / E_step + 0.5); + auto theta_i_pos = G4int((theta_i - theta_i_min) / theta_i_step + 0.5); + auto E_pos = G4int((Energy - Emin) / E_step + 0.5); // lookup table is onedimensional (1 row), energy is in rows, // theta_i in columns @@ -367,50 +314,43 @@ void G4UCNMaterialPropertiesTable:: } } -G4double G4UCNMaterialPropertiesTable:: - GetMRMaxTransProbability(G4double theta_i, G4double Energy) +G4double G4UCNMaterialPropertiesTable::GetMRMaxTransProbability(G4double theta_i, G4double Energy) { - if(maxMicroRoughnessTransTable == nullptr) - { + if (maxMicroRoughnessTransTable == nullptr) { return 0.; } // if theta_i or energy outside the range for which the lookup table // is calculated, the probability is set to zero - if(theta_i < theta_i_min || theta_i > theta_i_max || Energy < Emin || - Energy > Emax) - { + if (theta_i < theta_i_min || theta_i > theta_i_max || Energy < Emin || Energy > Emax) { return 0.; } // Determines the nearest cell in the lookup table which contains // the probability - G4int theta_i_pos = G4int((theta_i-theta_i_min)/theta_i_step+0.5); - G4int E_pos = G4int((Energy-Emin)/E_step+0.5); + auto theta_i_pos = G4int((theta_i - theta_i_min) / theta_i_step + 0.5); + auto E_pos = G4int((Energy - Emin) / E_step + 0.5); // lookup table is onedimensional (1 row), energy is in rows, // theta_i in columns - return *(maxMicroRoughnessTransTable+E_pos+theta_i_pos*noE); + return *(maxMicroRoughnessTransTable + E_pos + theta_i_pos * noE); } -void G4UCNMaterialPropertiesTable:: - SetMRMaxTransProbability(G4double theta_i, G4double Energy, G4double value) +void G4UCNMaterialPropertiesTable::SetMRMaxTransProbability( + G4double theta_i, G4double Energy, G4double value) { - if(maxMicroRoughnessTransTable != nullptr) - { - if(theta_i < theta_i_min || theta_i > theta_i_max || Energy < Emin || - Energy > Emax) - {} - else - { + if (maxMicroRoughnessTransTable != nullptr) { + if (theta_i < theta_i_min || theta_i > theta_i_max || Energy < Emin || Energy > Emax) { + } + else { // Determines the nearest cell in the lookup table which contains // the probability - G4int theta_i_pos = G4int((theta_i - theta_i_min) / theta_i_step + 0.5); - G4int E_pos = G4int((Energy - Emin) / E_step + 0.5); + auto theta_i_pos = G4int((theta_i - theta_i_min) / theta_i_step + 0.5); + auto E_pos = G4int((Energy - Emin) / E_step + 0.5); // lookup table is onedimensional (1 row), energy is in rows, // theta_i in columns @@ -420,200 +360,137 @@ void G4UCNMaterialPropertiesTable:: } } -G4double G4UCNMaterialPropertiesTable:: - GetMRProbability(G4double theta_i, G4double Energy, - G4double fermipot, - G4double theta_o, G4double phi_o) +G4double G4UCNMaterialPropertiesTable::GetMRProbability( + G4double theta_i, G4double Energy, G4double fermipot, G4double theta_o, G4double phi_o) { - return G4UCNMicroRoughnessHelper::GetInstance()-> - ProbIplus(Energy, fermipot, theta_i, theta_o, phi_o, b, w, AngCut); + return G4UCNMicroRoughnessHelper::GetInstance()->ProbIplus( + Energy, fermipot, theta_i, theta_o, phi_o, b, w, AngCut); } -G4double G4UCNMaterialPropertiesTable:: - GetMRTransProbability(G4double theta_i, G4double Energy, - G4double fermipot, - G4double theta_o, G4double phi_o) +G4double G4UCNMaterialPropertiesTable::GetMRTransProbability( + G4double theta_i, G4double Energy, G4double fermipot, G4double theta_o, G4double phi_o) { - return G4UCNMicroRoughnessHelper::GetInstance()-> - ProbIminus(Energy, fermipot,theta_i, theta_o, phi_o, b, w, AngCut); + return G4UCNMicroRoughnessHelper::GetInstance()->ProbIminus( + Energy, fermipot, theta_i, theta_o, phi_o, b, w, AngCut); } -G4bool G4UCNMaterialPropertiesTable::ConditionsValid(G4double E, - G4double VFermi, - G4double theta_i) +G4bool G4UCNMaterialPropertiesTable::ConditionsValid(G4double E, G4double VFermi, G4double theta_i) { - G4double k = std::sqrt(2*neutron_mass_c2*E / hbarc_squared); - G4double k_l = std::sqrt(2*neutron_mass_c2*VFermi / hbarc_squared); - - //G4cout << " Energy: " << E/(1.e-9*eV) << "neV" - // << " VFermi: " << VFermi/(1.e-9*eV) << "neV" - // << " theta: " << theta_i/degree << "degree" << G4endl; - - //G4cout << " Conditions - 2*b*k*cos(theta): " << 2*b*k*cos(theta_i) - // << ", 2*b*kl: " << 2*b*k_l << G4endl; + G4double k = std::sqrt(2 * neutron_mass_c2 * E / hbarc_squared); + G4double k_l = std::sqrt(2 * neutron_mass_c2 * VFermi / hbarc_squared); // see eq. 17 of the Steyerl paper - return 2 * b * k * std::cos(theta_i) < 1 && 2 * b * k_l < 1; } -G4bool G4UCNMaterialPropertiesTable::TransConditionsValid(G4double E, - G4double VFermi, - G4double theta_i) +G4bool G4UCNMaterialPropertiesTable::TransConditionsValid( + G4double E, G4double VFermi, G4double theta_i) { - G4double k2 = 2*neutron_mass_c2*E / hbarc_squared; - G4double k_l2 = 2*neutron_mass_c2*VFermi / hbarc_squared; + G4double k2 = 2 * neutron_mass_c2 * E / hbarc_squared; + G4double k_l2 = 2 * neutron_mass_c2 * VFermi / hbarc_squared; - if(E * (std::cos(theta_i) * std::cos(theta_i)) < VFermi) - { + if (E * (std::cos(theta_i) * std::cos(theta_i)) < VFermi) { return false; } G4double kS2 = k_l2 - k2; - //G4cout << "Conditions; 2bk' cos(theta): " << 2*b*sqrt(kS2)*cos(theta_i) << - // ", 2bk_l: " << 2*b*sqrt(k_l2) << G4endl; - // see eq. 18 of the Steyerl paper - - return 2 * b * std::sqrt(kS2) * std::cos(theta_i) < 1 && - 2 * b * std::sqrt(k_l2) < 1; + return 2 * b * std::sqrt(kS2) * std::cos(theta_i) < 1 && 2 * b * std::sqrt(k_l2) < 1; } -void G4UCNMaterialPropertiesTable:: - SetMicroRoughnessParameters(G4double ww, G4double bb, - G4int no_theta, G4int no_E, - G4double theta_min, G4double theta_max, - G4double E_min, G4double E_max, - G4int AngNoTheta, G4int AngNoPhi, - G4double AngularCut) +void G4UCNMaterialPropertiesTable::SetMicroRoughnessParameters(G4double ww, G4double bb, + G4int no_theta, G4int no_E, G4double theta_min, G4double theta_max, G4double E_min, + G4double E_max, G4int AngNoTheta, G4int AngNoPhi, G4double AngularCut) { - //G4cout << "Setting Microroughness Parameters..."; - // Removes an existing RMS roughness - if(ConstPropertyExists("MR_RRMS")) - { + if (ConstPropertyExists("MR_RRMS")) { RemoveConstProperty("MR_RRMS"); } // Adds a new RMS roughness AddConstProperty("MR_RRMS", bb); - //G4cout << "b: " << bb << G4endl; - // Removes an existing correlation length - if(ConstPropertyExists("MR_CORRLEN")) - { + if (ConstPropertyExists("MR_CORRLEN")) { RemoveConstProperty("MR_CORRLEN"); } // Adds a new correlation length AddConstProperty("MR_CORRLEN", ww); - //G4cout << "w: " << ww << G4endl; - // Removes an existing number of thetas - if(ConstPropertyExists("MR_NBTHETA")) - { + if (ConstPropertyExists("MR_NBTHETA")) { RemoveConstProperty("MR_NBTHETA"); } // Adds a new number of thetas AddConstProperty("MR_NBTHETA", (G4double)no_theta); - //G4cout << "no_theta: " << no_theta << G4endl; - // Removes an existing number of Energies - if(ConstPropertyExists("MR_NBE")) - { + if (ConstPropertyExists("MR_NBE")) { RemoveConstProperty("MR_NBE"); } // Adds a new number of Energies AddConstProperty("MR_NBE", (G4double)no_E); - //G4cout << "no_E: " << no_E << G4endl; - // Removes an existing minimum theta - if(ConstPropertyExists("MR_THETAMIN")) - { + if (ConstPropertyExists("MR_THETAMIN")) { RemoveConstProperty("MR_THETAMIN"); } // Adds a new minimum theta AddConstProperty("MR_THETAMIN", theta_min); - //G4cout << "theta_min: " << theta_min << G4endl; - // Removes an existing maximum theta - if(ConstPropertyExists("MR_THETAMAX")) - { + if (ConstPropertyExists("MR_THETAMAX")) { RemoveConstProperty("MR_THETAMAX"); } // Adds a new maximum theta AddConstProperty("MR_THETAMAX", theta_max); - //G4cout << "theta_max: " << theta_max << G4endl; - // Removes an existing minimum energy - if(ConstPropertyExists("MR_EMIN")) - { + if (ConstPropertyExists("MR_EMIN")) { RemoveConstProperty("MR_EMIN"); } // Adds a new minimum energy AddConstProperty("MR_EMIN", E_min); - //G4cout << "Emin: " << E_min << G4endl; - // Removes an existing maximum energy - if(ConstPropertyExists("MR_EMAX")) - { + if (ConstPropertyExists("MR_EMAX")) { RemoveConstProperty("MR_EMAX"); } // Adds a new maximum energy AddConstProperty("MR_EMAX", E_max); - //G4cout << "Emax: " << E_max << G4endl; - // Removes an existing Theta angle number - if(ConstPropertyExists("MR_ANGNOTHETA")) - { + if (ConstPropertyExists("MR_ANGNOTHETA")) { RemoveConstProperty("MR_ANGNOTHETA"); } // Adds a new Theta angle number AddConstProperty("MR_ANGNOTHETA", (G4double)AngNoTheta); - //G4cout << "AngNoTheta: " << AngNoTheta << G4endl; - // Removes an existing Phi angle number - if(ConstPropertyExists("MR_ANGNOPHI")) - { + if (ConstPropertyExists("MR_ANGNOPHI")) { RemoveConstProperty("MR_ANGNOPHI"); } // Adds a new Phi angle number AddConstProperty("MR_ANGNOPHI", (G4double)AngNoPhi); - //G4cout << "AngNoPhi: " << AngNoPhi << G4endl; - // Removes an existing angular cut - if(ConstPropertyExists("MR_ANGCUT")) - { + if (ConstPropertyExists("MR_ANGCUT")) { RemoveConstProperty("MR_ANGCUT"); } // Adds a new angle number AddConstProperty("MR_ANGCUT", AngularCut); - //G4cout << "AngularCut: " << AngularCut/degree << "degree" << G4endl; - // Starts the lookup table calculation - ComputeMicroRoughnessTables(); - - //G4cout << " *** DONE! ***" << G4endl; } diff --git a/source/materials/src/G4UCNMicroRoughnessHelper.cc b/source/materials/src/G4UCNMicroRoughnessHelper.cc index 279194828e1..cc4a242a59a 100644 --- a/source/materials/src/G4UCNMicroRoughnessHelper.cc +++ b/source/materials/src/G4UCNMicroRoughnessHelper.cc @@ -22,49 +22,31 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// -// -// -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -// + // This file contains the source code of various functions all related to the // calculation of microroughness. // // see A. Steyerl, Z. Physik 254 (1972) 169. // // A description of the functions can be found in the corresponding header file -// -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... #include "G4UCNMicroRoughnessHelper.hh" -#include "globals.hh" - -#include "G4SystemOfUnits.hh" #include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" +#include "globals.hh" G4UCNMicroRoughnessHelper* G4UCNMicroRoughnessHelper::fpInstance = nullptr; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -// Constructor - -G4UCNMicroRoughnessHelper::G4UCNMicroRoughnessHelper() {;} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4UCNMicroRoughnessHelper::~G4UCNMicroRoughnessHelper() -{ - fpInstance = nullptr; -} +G4UCNMicroRoughnessHelper::~G4UCNMicroRoughnessHelper() { fpInstance = nullptr; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4UCNMicroRoughnessHelper* G4UCNMicroRoughnessHelper::GetInstance() { - if(fpInstance == nullptr) - { + if (fpInstance == nullptr) { fpInstance = new G4UCNMicroRoughnessHelper; } return fpInstance; @@ -72,117 +54,93 @@ G4UCNMicroRoughnessHelper* G4UCNMicroRoughnessHelper::GetInstance() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double -G4UCNMicroRoughnessHelper::S2(G4double costheta2, G4double klk2) const +G4double G4UCNMicroRoughnessHelper::S2(G4double costheta2, G4double klk2) const { // case 1: radicand is positive, // case 2: radicand is negative, cf. p. 174 of the Steyerl paper - if(costheta2 >= klk2) - { - return 4 * costheta2 / - (2 * costheta2 - klk2 + - 2 * std::sqrt(costheta2 * (costheta2 - klk2))); - } - else - { - return std::norm(2 * std::sqrt(costheta2) / - (std::sqrt(costheta2) + - std::sqrt(std::complex(costheta2 - klk2)))); + if (costheta2 >= klk2) { + return 4 * costheta2 / (2 * costheta2 - klk2 + 2 * std::sqrt(costheta2 * (costheta2 - klk2))); } + + return std::norm(2 * std::sqrt(costheta2) / + (std::sqrt(costheta2) + std::sqrt(std::complex(costheta2 - klk2)))); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double -G4UCNMicroRoughnessHelper::SS2(G4double costhetas2, G4double klks2) const +G4double G4UCNMicroRoughnessHelper::SS2(G4double costhetas2, G4double klks2) const { // cf. p. 175 of the Steyerl paper - return 4*costhetas2/ - (2*costhetas2+klks2+2*std::sqrt(costhetas2*(costhetas2+klks2))); + return 4 * costhetas2 / + (2 * costhetas2 + klks2 + 2 * std::sqrt(costhetas2 * (costhetas2 + klks2))); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4UCNMicroRoughnessHelper::Fmu(G4double k2, G4double thetai, - G4double thetao, G4double phio, - G4double b2, G4double w2, - G4double AngCut) const +G4double G4UCNMicroRoughnessHelper::Fmu(G4double k2, G4double thetai, G4double thetao, + G4double phio, G4double b2, G4double w2, G4double AngCut) const { G4double mu_squared; // Checks if the distribution is peaked around the specular direction - if((std::fabs(thetai - thetao) < AngCut) && (std::fabs(phio) < AngCut)) - { - mu_squared=0.; + if ((std::fabs(thetai - thetao) < AngCut) && (std::fabs(phio) < AngCut)) { + mu_squared = 0.; } - else - { + else { // cf. p. 177 of the Steyerl paper G4double sinthetai = std::sin(thetai); G4double sinthetao = std::sin(thetao); - mu_squared = k2 * (sinthetai * sinthetai + sinthetao * sinthetao - - 2. * sinthetai * sinthetao * std::cos(phio)); - } + mu_squared = k2 * (sinthetai * sinthetai + sinthetao * sinthetao - + 2. * sinthetai * sinthetao * std::cos(phio)); + } // cf. p. 177 of the Steyerl paper - return b2*w2/twopi*std::exp(-mu_squared*w2/2); + return b2 * w2 / twopi * std::exp(-mu_squared * w2 / 2); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double -G4UCNMicroRoughnessHelper::FmuS(G4double k, G4double kS, - G4double thetai, G4double thetaSo, - G4double phiSo, - G4double b2, G4double w2, - G4double AngCut, G4double thetarefract) const +G4double G4UCNMicroRoughnessHelper::FmuS(G4double k, G4double kS, G4double thetai, G4double thetaSo, + G4double phiSo, G4double b2, G4double w2, G4double AngCut, G4double thetarefract) const { G4double mu_squared; // Checks if the distribution is peaked around the direction of // unperturbed refraction - if((std::fabs(thetarefract - thetaSo) < AngCut) && - (std::fabs(phiSo) < AngCut)) - { - mu_squared=0.; + if ((std::fabs(thetarefract - thetaSo) < AngCut) && (std::fabs(phiSo) < AngCut)) { + mu_squared = 0.; } - else - { - G4double sinthetai = std::sin(thetai); + else { + G4double sinthetai = std::sin(thetai); G4double sinthetaSo = std::sin(thetaSo); // cf. p. 177 of the Steyerl paper - mu_squared = k * k * sinthetai * sinthetai + - kS * kS * sinthetaSo * sinthetaSo - + mu_squared = k * k * sinthetai * sinthetai + kS * kS * sinthetaSo * sinthetaSo - 2. * k * kS * sinthetai * sinthetaSo * std::cos(phiSo); - } + } // cf. p. 177 of the Steyerl paper - return b2*w2/twopi*std::exp(-mu_squared*w2/2); + return b2 * w2 / twopi * std::exp(-mu_squared * w2 / 2); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double -G4UCNMicroRoughnessHelper::IntIplus(G4double E, G4double fermipot, - G4double theta_i, G4int AngNoTheta, - G4int AngNoPhi, G4double b2, - G4double w2, G4double* max, - G4double AngCut) const +G4double G4UCNMicroRoughnessHelper::IntIplus(G4double E, G4double fermipot, G4double theta_i, + G4int AngNoTheta, G4int AngNoPhi, G4double b2, G4double w2, G4double* max, G4double AngCut) const { - *max=0.; + *max = 0.; // max_theta_o saves the theta-position of the max probability, // the previous value is saved in a_max_theta_o - G4double a_max_theta_o, max_theta_o=theta_i, a_max_phi_o, max_phi_o=0.; + G4double a_max_theta_o, max_theta_o = theta_i, a_max_phi_o, max_phi_o = 0.; // max_phi_o saves the phi-position of the max probability, // the previous value is saved in a_max_phi_o @@ -192,308 +150,262 @@ G4UCNMicroRoughnessHelper::IntIplus(G4double E, G4double fermipot, G4double theta_o; G4double phi_o; G4double Intens; - G4double ang_steptheta=90.*degree/(AngNoTheta-1); - G4double ang_stepphi=360.*degree/(AngNoPhi-1); - G4double costheta_i=std::cos(theta_i); - G4double costheta_i_squared=costheta_i*costheta_i; + G4double ang_steptheta = 90. * degree / (AngNoTheta - 1); + G4double ang_stepphi = 360. * degree / (AngNoPhi - 1); + G4double costheta_i = std::cos(theta_i); + G4double costheta_i_squared = costheta_i * costheta_i; // (k_l/k)^2 - G4double kl4d4=neutron_mass_c2/hbarc_squared*neutron_mass_c2/ - hbarc_squared*fermipot*fermipot; + G4double kl4d4 = + neutron_mass_c2 / hbarc_squared * neutron_mass_c2 / hbarc_squared * fermipot * fermipot; // (k_l/k)^2 - G4double klk2=fermipot/E; + G4double klk2 = fermipot / E; G4double costheta_o_squared; // k^2 - G4double k2=2*neutron_mass_c2*E/hbarc_squared; + G4double k2 = 2 * neutron_mass_c2 * E / hbarc_squared; - G4double wkeit=0.; + G4double wkeit = 0.; // Loop through theta_o - - for (theta_o=0.*degree; theta_o<=90.*degree+1e-6; theta_o+=ang_steptheta) - { - costheta_o_squared=std::cos(theta_o)*std::cos(theta_o); - - // Loop through phi_o - - for (phi_o=-180.*degree; phi_o<=180.*degree+1e-6; phi_o+=ang_stepphi) - { - //calculates probability for a certain theta_o,phi_o pair - - Intens=kl4d4/costheta_i*S2(costheta_i_squared,klk2)* - S2(costheta_o_squared,klk2)* - Fmu(k2,theta_i,theta_o,phi_o,b2,w2,AngCut)*std::sin(theta_o); - - //G4cout << "S2: " << S2(costheta_i_squared,klk2) << G4endl; - //G4cout << "S2: " << S2(costheta_o_squared,klk2) << G4endl; - //G4cout << "Fmu: " << Fmu(k2,theta_i,theta_o,phi_o,b2,w2,AngCut)*sin(theta_o) << G4endl; - // checks if the new probability is larger than the - // maximum found so far - - if (Intens>*max) - { - *max=Intens; - max_theta_o=theta_o; - max_phi_o=phi_o; - } - - // Adds the newly found probability to the integral probability - - wkeit+=Intens*ang_steptheta*ang_stepphi; - } + + for (theta_o = 0. * degree; theta_o <= 90. * degree + 1e-6; theta_o += ang_steptheta) { + costheta_o_squared = std::cos(theta_o) * std::cos(theta_o); + + // Loop through phi_o + + for (phi_o = -180. * degree; phi_o <= 180. * degree + 1e-6; phi_o += ang_stepphi) { + // calculates probability for a certain theta_o,phi_o pair + + Intens = kl4d4 / costheta_i * S2(costheta_i_squared, klk2) * S2(costheta_o_squared, klk2) * + Fmu(k2, theta_i, theta_o, phi_o, b2, w2, AngCut) * std::sin(theta_o); + + if (Intens > *max) { + *max = Intens; + max_theta_o = theta_o; + max_phi_o = phi_o; + } + + // Adds the newly found probability to the integral probability + + wkeit += Intens * ang_steptheta * ang_stepphi; } + } // Fine-Iteration to find maximum of distribution // only if the energy is not zero - if (E>1e-10*eV) - { + if (E > 1e-10 * eV) { + // Break-condition for refining - // Break-condition for refining - - // Loop checking, 07-Aug-2015, Vladimir Ivanchenko - while ((ang_stepphi>=AngCut*AngCut) || (ang_steptheta>=AngCut*AngCut)) - { - a_max_theta_o=max_theta_o; - a_max_phi_o=max_phi_o; + // Loop checking, 07-Aug-2015, Vladimir Ivanchenko + while ((ang_stepphi >= AngCut * AngCut) || (ang_steptheta >= AngCut * AngCut)) { + a_max_theta_o = max_theta_o; + a_max_phi_o = max_phi_o; ang_stepphi /= 2.; ang_steptheta /= 2.; - //G4cout << ang_stepphi/degree << ", " - // << ang_steptheta/degree << "," - // << AngCut/degree << G4endl; - - for (theta_o=a_max_theta_o-ang_steptheta; - theta_o<=a_max_theta_o-ang_steptheta+1e-6; - theta_o+=ang_steptheta) - { - //G4cout << "theta_o: " << theta_o/degree << G4endl; - costheta_o_squared=std::cos(theta_o)*std::cos(theta_o); - for (phi_o=a_max_phi_o-ang_stepphi; - phi_o<=a_max_phi_o+ang_stepphi+1e-6; - phi_o+=ang_stepphi) - { - //G4cout << "phi_o: " << phi_o/degree << G4endl; - Intens=kl4d4/costheta_i*S2(costheta_i_squared, klk2)* - S2(costheta_o_squared,klk2)* - Fmu(k2,theta_i,theta_o,phi_o,b2,w2,AngCut)*std::sin(theta_o); - if (Intens>*max) - { - *max=Intens; - max_theta_o=theta_o; - max_phi_o=phi_o; - } - } - } - } + for (theta_o = a_max_theta_o - ang_steptheta; theta_o <= a_max_theta_o - ang_steptheta + 1e-6; + theta_o += ang_steptheta) + { + // G4cout << "theta_o: " << theta_o/degree << G4endl; + costheta_o_squared = std::cos(theta_o) * std::cos(theta_o); + for (phi_o = a_max_phi_o - ang_stepphi; phi_o <= a_max_phi_o + ang_stepphi + 1e-6; + phi_o += ang_stepphi) + { + // G4cout << "phi_o: " << phi_o/degree << G4endl; + Intens = kl4d4 / costheta_i * S2(costheta_i_squared, klk2) * + S2(costheta_o_squared, klk2) * Fmu(k2, theta_i, theta_o, phi_o, b2, w2, AngCut) * + std::sin(theta_o); + if (Intens > *max) { + *max = Intens; + max_theta_o = theta_o; + max_phi_o = phi_o; + } + } + } } + } return wkeit; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4UCNMicroRoughnessHelper::IntIminus(G4double E, G4double fermipot, - G4double theta_i, - G4int AngNoTheta, - G4int AngNoPhi, G4double b2, - G4double w2, G4double* max, - G4double AngCut) const +G4double G4UCNMicroRoughnessHelper::IntIminus(G4double E, G4double fermipot, G4double theta_i, + G4int AngNoTheta, G4int AngNoPhi, G4double b2, G4double w2, G4double* max, G4double AngCut) const { G4double a_max_thetas_o, max_thetas_o = theta_i; G4double a_max_phis_o, max_phis_o = 0.; G4double thetas_o; G4double phis_o; G4double IntensS; - G4double ang_steptheta=180.*degree/(AngNoTheta-1); - G4double ang_stepphi=180.*degree/(AngNoPhi-1); - G4double costheta_i=std::cos(theta_i); - G4double costheta_i_squared=costheta_i*costheta_i; + G4double ang_steptheta = 180. * degree / (AngNoTheta - 1); + G4double ang_stepphi = 180. * degree / (AngNoPhi - 1); + G4double costheta_i = std::cos(theta_i); + G4double costheta_i_squared = costheta_i * costheta_i; *max = 0.; - G4double wkeit=0.; + G4double wkeit = 0.; - if(E < fermipot) - { + if (E < fermipot) { return wkeit; } - //k_l^4/4 - G4double kl4d4=neutron_mass_c2/hbarc_squared*neutron_mass_c2/ - hbarc_squared*fermipot*fermipot; + // k_l^4/4 + G4double kl4d4 = + neutron_mass_c2 / hbarc_squared * neutron_mass_c2 / hbarc_squared * fermipot * fermipot; // (k_l/k)^2 - G4double klk2=fermipot/E; + G4double klk2 = fermipot / E; // (k_l/k')^2 - G4double klks2=fermipot/(E-fermipot); + G4double klks2 = fermipot / (E - fermipot); // k'/k - G4double ksdk=std::sqrt((E-fermipot)/E); + G4double ksdk = std::sqrt((E - fermipot) / E); G4double costhetas_o_squared; // k - G4double k=std::sqrt(2*neutron_mass_c2*E/hbarc_squared); + G4double k = std::sqrt(2 * neutron_mass_c2 * E / hbarc_squared); // k' - G4double kS=ksdk*k; - - for (thetas_o=0.*degree; thetas_o<=90.*degree+1e-6; thetas_o+=ang_steptheta) - { - costhetas_o_squared=std::cos(thetas_o)*std::cos(thetas_o); - - for (phis_o=-180.*degree; phis_o<=180.*degree+1e-6; phis_o+=ang_stepphi) - { - //cf. Steyerl-paper p. 176, eq. 21 - if (costhetas_o_squared>=-klks2) { - - //calculates probability for a certain theta'_o, phi'_o pair - - G4double thetarefract = thetas_o; - if(std::fabs(std::sin(theta_i) / ksdk) <= 1.) - { - thetarefract = std::asin(std::sin(theta_i) / ksdk); - } - - IntensS = kl4d4/costheta_i*ksdk*S2(costheta_i_squared, klk2)* - SS2(costhetas_o_squared,klks2)* - FmuS(k,kS,theta_i,thetas_o,phis_o,b2,w2,AngCut,thetarefract)* - std::sin(thetas_o); - } else { - IntensS=0.; - } - // checks if the new probability is larger than - // the maximum found so far - if (IntensS>*max) - { - *max=IntensS; - } - wkeit+=IntensS*ang_steptheta*ang_stepphi; - } + G4double kS = ksdk * k; + + for (thetas_o = 0. * degree; thetas_o <= 90. * degree + 1e-6; thetas_o += ang_steptheta) { + costhetas_o_squared = std::cos(thetas_o) * std::cos(thetas_o); + + for (phis_o = -180. * degree; phis_o <= 180. * degree + 1e-6; phis_o += ang_stepphi) { + // cf. Steyerl-paper p. 176, eq. 21 + if (costhetas_o_squared >= -klks2) { + // calculates probability for a certain theta'_o, phi'_o pair + + G4double thetarefract = thetas_o; + if (std::fabs(std::sin(theta_i) / ksdk) <= 1.) { + thetarefract = std::asin(std::sin(theta_i) / ksdk); + } + + IntensS = kl4d4 / costheta_i * ksdk * S2(costheta_i_squared, klk2) * + SS2(costhetas_o_squared, klks2) * + FmuS(k, kS, theta_i, thetas_o, phis_o, b2, w2, AngCut, thetarefract) * + std::sin(thetas_o); + } + else { + IntensS = 0.; + } + // checks if the new probability is larger than + // the maximum found so far + if (IntensS > *max) { + *max = IntensS; + } + wkeit += IntensS * ang_steptheta * ang_stepphi; } + } // Fine-Iteration to find maximum of distribution - if (E>1e-10*eV) - { - - // Break-condition for refining + if (E > 1e-10 * eV) { + // Break-condition for refining - while (ang_stepphi>=AngCut*AngCut || ang_steptheta>=AngCut*AngCut) - { - a_max_thetas_o=max_thetas_o; - a_max_phis_o=max_phis_o; + while (ang_stepphi >= AngCut * AngCut || ang_steptheta >= AngCut * AngCut) { + a_max_thetas_o = max_thetas_o; + a_max_phis_o = max_phis_o; ang_stepphi /= 2.; ang_steptheta /= 2.; - //G4cout << ang_stepphi/degree << ", " << ang_steptheta/degree - // << ", " << AngCut/degree << G4endl; - for (thetas_o=a_max_thetas_o-ang_steptheta; - thetas_o<=a_max_thetas_o-ang_steptheta+1e-6; - thetas_o+=ang_steptheta) - { - costhetas_o_squared=std::cos(thetas_o)*std::cos(thetas_o); - for (phis_o=a_max_phis_o-ang_stepphi; - phis_o<=a_max_phis_o+ang_stepphi+1e-6; - phis_o+=ang_stepphi) - { - G4double thetarefract = thetas_o; - if(std::fabs(std::sin(theta_i) / ksdk) <= 1.) - { - thetarefract = std::asin(std::sin(theta_i) / ksdk); - } - - IntensS=kl4d4/costheta_i*ksdk*S2(costheta_i_squared, klk2)* - SS2(costhetas_o_squared,klks2)* - FmuS(k,kS,theta_i,thetas_o,phis_o,b2,w2,AngCut,thetarefract)* - std::sin(thetas_o); - if (IntensS>*max) - { - *max=IntensS; - max_thetas_o=thetas_o; - max_phis_o=phis_o; - } - } - } - } + + for (thetas_o = a_max_thetas_o - ang_steptheta; + thetas_o <= a_max_thetas_o - ang_steptheta + 1e-6; thetas_o += ang_steptheta) + { + costhetas_o_squared = std::cos(thetas_o) * std::cos(thetas_o); + for (phis_o = a_max_phis_o - ang_stepphi; phis_o <= a_max_phis_o + ang_stepphi + 1e-6; + phis_o += ang_stepphi) + { + G4double thetarefract = thetas_o; + if (std::fabs(std::sin(theta_i) / ksdk) <= 1.) { + thetarefract = std::asin(std::sin(theta_i) / ksdk); + } + + IntensS = kl4d4 / costheta_i * ksdk * S2(costheta_i_squared, klk2) * + SS2(costhetas_o_squared, klks2) * + FmuS(k, kS, theta_i, thetas_o, phis_o, b2, w2, AngCut, thetarefract) * + std::sin(thetas_o); + if (IntensS > *max) { + *max = IntensS; + max_thetas_o = thetas_o; + max_phis_o = phis_o; + } + } + } } + } return wkeit; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4UCNMicroRoughnessHelper::ProbIplus(G4double E, G4double fermipot, - G4double theta_i, - G4double theta_o, - G4double phi_o, - G4double b, G4double w, - G4double AngCut) const +G4double G4UCNMicroRoughnessHelper::ProbIplus(G4double E, G4double fermipot, G4double theta_i, + G4double theta_o, G4double phi_o, G4double b, G4double w, G4double AngCut) const { - //k_l^4/4 - G4double kl4d4=neutron_mass_c2/hbarc_squared*neutron_mass_c2/ - hbarc_squared*fermipot*fermipot; + // k_l^4/4 + G4double kl4d4 = + neutron_mass_c2 / hbarc_squared * neutron_mass_c2 / hbarc_squared * fermipot * fermipot; // (k_l/k)^2 - G4double klk2=fermipot/E; + G4double klk2 = fermipot / E; - G4double costheta_i=std::cos(theta_i); - G4double costheta_o=std::cos(theta_o); + G4double costheta_i = std::cos(theta_i); + G4double costheta_o = std::cos(theta_o); // eq. 20 on page 176 in the steyerl paper - return kl4d4/costheta_i*S2(costheta_i*costheta_i, klk2)* - S2(costheta_o*costheta_o,klk2)* - Fmu(2*neutron_mass_c2*E/hbarc_squared,theta_i,theta_o,phi_o,b*b,w*w,AngCut)* - std::sin(theta_o); + return kl4d4 / costheta_i * S2(costheta_i * costheta_i, klk2) * + S2(costheta_o * costheta_o, klk2) * + Fmu( + 2 * neutron_mass_c2 * E / hbarc_squared, theta_i, theta_o, phi_o, b * b, w * w, AngCut) * + std::sin(theta_o); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4UCNMicroRoughnessHelper::ProbIminus(G4double E, G4double fermipot, - G4double theta_i, - G4double thetas_o, - G4double phis_o, G4double b, - G4double w, G4double AngCut) const +G4double G4UCNMicroRoughnessHelper::ProbIminus(G4double E, G4double fermipot, G4double theta_i, + G4double thetas_o, G4double phis_o, G4double b, G4double w, G4double AngCut) const { - //k_l^4/4 - G4double kl4d4=neutron_mass_c2/hbarc_squared*neutron_mass_c2/ - hbarc_squared*fermipot*fermipot; + // k_l^4/4 + G4double kl4d4 = + neutron_mass_c2 / hbarc_squared * neutron_mass_c2 / hbarc_squared * fermipot * fermipot; // (k_l/k)^2 - G4double klk2=fermipot/E; + G4double klk2 = fermipot / E; // (k_l/k')^2 - G4double klks2=fermipot/(E-fermipot); + G4double klks2 = fermipot / (E - fermipot); if (E < fermipot) { - G4cout << " ProbIminus E < fermipot " << G4endl; - return 0.; + G4cout << " ProbIminus E < fermipot " << G4endl; + return 0.; } // k'/k - G4double ksdk=std::sqrt((E-fermipot)/E); + G4double ksdk = std::sqrt((E - fermipot) / E); // k - G4double k=std::sqrt(2*neutron_mass_c2*E/hbarc_squared); + G4double k = std::sqrt(2 * neutron_mass_c2 * E / hbarc_squared); // k'/k - G4double kS=ksdk*k; + G4double kS = ksdk * k; - G4double costheta_i=std::cos(theta_i); - G4double costhetas_o=std::cos(thetas_o); + G4double costheta_i = std::cos(theta_i); + G4double costhetas_o = std::cos(thetas_o); // eq. 20 on page 176 in the steyerl paper G4double thetarefract = thetas_o; - if(std::fabs(std::sin(theta_i) / ksdk) <= 1.) - { + if (std::fabs(std::sin(theta_i) / ksdk) <= 1.) { thetarefract = std::asin(std::sin(theta_i) / ksdk); } - return kl4d4/costheta_i*ksdk*S2(costheta_i*costheta_i, klk2)* - SS2(costhetas_o*costhetas_o,klks2)* - FmuS(k,kS,theta_i,thetas_o,phis_o,b*b,w*w,AngCut,thetarefract)* + return kl4d4 / costheta_i * ksdk * S2(costheta_i * costheta_i, klk2) * + SS2(costhetas_o * costhetas_o, klks2) * + FmuS(k, kS, theta_i, thetas_o, phis_o, b * b, w * w, AngCut, thetarefract) * std::sin(thetas_o); } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/parameterisations/CMakeLists.txt b/source/parameterisations/CMakeLists.txt index 0e45ee4c4db..09d49f4b797 100644 --- a/source/parameterisations/CMakeLists.txt +++ b/source/parameterisations/CMakeLists.txt @@ -1,3 +1,4 @@ # - G4parmodels category build +include(channeling/sources.cmake) include(gflash/sources.cmake) -geant4_add_category(G4parmodels MODULES G4gflash) +geant4_add_category(G4parmodels MODULES G4channeling G4gflash) diff --git a/source/parameterisations/GNUmakefile b/source/parameterisations/GNUmakefile deleted file mode 100644 index c389ea49686..00000000000 --- a/source/parameterisations/GNUmakefile +++ /dev/null @@ -1,18 +0,0 @@ -# ---------------------------------------------------------------- -# GNUmakefile for parameterisations library. -# ---------------------------------------------------------------- - -name := G4parmodels - -SUBDIRS := gflash -SUBLIBS = G4gflash - -GLOBLIBS = libG4processes.lib libG4digits_hits.lib libG4track.lib -GLOBLIBS += libG4particles.lib libG4geometry.lib libG4materials.lib -GLOBLIBS += libG4graphics_reps.lib libG4intercoms.lib libG4global.lib - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -include $(G4INSTALL)/config/globlib.gmk diff --git a/source/parameterisations/History b/source/parameterisations/History index 50765072201..da48eda13f4 100644 --- a/source/parameterisations/History +++ b/source/parameterisations/History @@ -4,6 +4,12 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-05-25 Luciano Pandola (gpara-V11-01-01) +- Add new submodule G4channeling + +## 2022-12-12 Ben Morgan (gpara-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-01-28 Ben Morgan (gpara-V11-00-01) - Replace `geant4_global_library_target` with direct file inclusion and call to `geant4_add_category` to define library build from source modules. diff --git a/source/parameterisations/channeling/History b/source/parameterisations/channeling/History new file mode 100644 index 00000000000..0294375deb4 --- /dev/null +++ b/source/parameterisations/channeling/History @@ -0,0 +1,16 @@ +# Category param History + +See `CONTRIBUTING.rst` for details of **required** info/format for each entry, +which **must** added in reverse chronological order (newest at the top). +It must **not** be used as a substitute for writing good git commit messages! + +------------------------------------------------------------------------------- + +## 2023-06-15 Gabriele Cosmo (fastsimchanneling-V11-01-02) +- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. + +## 2023-06-08 Alexei Sytov (fastsimchanneling-V11-01-01) +- Fix Coverity defects + +## 2023-05-17 Alexei Sytov (fastsimchanneling-V11-01-00) +- Created Channeling FastSimulation model and Baier Katkov method diff --git a/source/parameterisations/channeling/include/G4BaierKatkov.hh b/source/parameterisations/channeling/include/G4BaierKatkov.hh new file mode 100644 index 00000000000..55beda3f304 --- /dev/null +++ b/source/parameterisations/channeling/include/G4BaierKatkov.hh @@ -0,0 +1,304 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +#ifndef G4BaierKatkov_h +#define G4BaierKatkov_h 1 + +#include "globals.hh" +#include +#include +#include "G4ThreeVector.hh" + +#include "G4VFastSimulationModel.hh" + +/** \file G4BaierKatkov.hh +* \brief Definition of the G4BaierKatkov class +* This class is designed for the calculation of radiation probability, radiation point +* and the parameters of the photon produced as well as spectrum accumulation using +* the Baier-Katkov integral: +* V. N. Baier, V. M. Katkov, and V. M. Strakhovenko, +* Electromagnetic Processes at High Energies in Oriented Single Crystals +* (World Scientific, Singapore, 1998). +*/ + +class G4BaierKatkov +{ +public: + // default constructor + G4BaierKatkov(); + + // destructor + ~G4BaierKatkov() = default; + + /** + You may call DoRadiation at each step of your trajectory + CAUTION: please ensure that your steps are physically small enough for calculation + of the radiation type you are interested in + CAUTION: do ResetRadIntegral() before the start of a new trajectory + + 1) change some model defaults if necessary (SetSinglePhotonRadiationProbabilityLimit, + SetNSmallTrajectorySteps, SetSpectrumEnergyRange) + 2) call DoRadiation at each step of your trajectory + 3) if DoRadiation returns TRUE, this means that a photon is produced (not added + as a secondary yet) and its parameters are calculated. + 4) You may generate a new photon using GeneratePhoton either with + the parameters calculated in DoRadiation or your own parameters. + CAUTION: By now GeneratePhoton works only for a FastSim model + 5) Use GetPhotonEnergyInSpectrum() and GetTotalSpectrum() to return calculated + total spectrum (all the photons altogether) + Caution: is not normalized on the event number + 6) Get the charged particle parameters in the radiation point: + GetParticleNewTotalEnergy(), + GetParticleNewAngleX(), GetParticleNewAngleY(), + GetNewGlobalTime(), + GetParticleNewCoordinateXYZ() + */ + + ///get functions + + /// get maximal radiation probability to preserve single photon radiation + G4double GetSinglePhotonRadiationProbabilityLimit() + {return fSinglePhotonRadiationProbabilityLimit;} + + ///CAUTION! : use the get functions below ONLY AFTER the call of DoRadiation + /// and ONLY IF IT RETURNS true + + ///total probability of radiation: needs calculation of DoRadiation first + G4double GetTotalRadiationProbability(){return fTotalRadiationProbability;} + ///get new parameters of the particle + ///(the parameters at the point of radiation emission) + ///needs calculation of DoRadiation first + G4double GetParticleNewTotalEnergy(){return fNewParticleEnergy;} + G4double GetParticleNewAngleX(){return fNewParticleAngleX;} + G4double GetParticleNewAngleY(){return fNewParticleAngleY;} + G4double GetNewGlobalTime(){return fNewGlobalTime;} + const G4ThreeVector& GetParticleNewCoordinateXYZ(){return fNewParticleCoordinateXYZ;} + + ///get photon energies (x-value in spectrum) + const std::vector& GetPhotonEnergyInSpectrum(){return fPhotonEnergyInSpectrum;} + + ///get fTotalSpectrum after finishing the trajectory part with DoRadiation + const std::vector& GetTotalSpectrum(){return fTotalSpectrum;} + + ///set functions + + ///set maximal radiation probability to preserve single photon radiation + void SetSinglePhotonRadiationProbabilityLimit(G4double wmax) + {fSinglePhotonRadiationProbabilityLimit = wmax;} + + ///number of steps in a trajectory small piece before + ///the next call of the radiation integral + void SetNSmallTrajectorySteps(G4double nSmallTrajectorySteps) + {fNSmallTrajectorySteps = nSmallTrajectorySteps;} + + ///reinitialize intermediate integrals fFa, fSs, fSc, fSsx, fSsy, fScx, fScy; + ///reset radiation integral internal variables to defaults; + ///reset the trajectory and radiation probability along the trajectory + void ResetRadIntegral(); + + ///setting the number of photons in sampling of Baier-Katkov Integral + ///(MC integration by photon energy and angles <=> photon momentum) + void SetSamplingPhotonsNumber(G4double nPhotons){fNMCPhotons = nPhotons;} + + ///CAUTION, the bins width is logarithmic + ///Do not worry if the maximal energy > particle energy. + ///This elements of spectrum with non-physical energies + ///will not be processed (they will be 0). + void SetSpectrumEnergyRange(G4double emin, + G4double emax, + G4int numberOfBins); + /// SetSpectrumEnergyRange also calls ResetRadIntegral() + + void SetMinPhotonEnergy(G4double emin){SetSpectrumEnergyRange(emin, + fMaxPhotonEnergy, + fNBinsSpectrum);} + void SetMaxPhotonEnergy(G4double emax){SetSpectrumEnergyRange(fMinPhotonEnergy, + emax, + fNBinsSpectrum);} + void SetNBinsSpectrum(G4int nbin){SetSpectrumEnergyRange(fMinPhotonEnergy, + fMaxPhotonEnergy, + nbin);} + + /// add the new elements of the trajectory, calculate radiation in a crystal + /// see complete description in G4BaierKatkov::DoRadiation + /// calls RadIntegral and all the necessary functions + /// sets the parameters of a photon produced (if any) + /// using SetPhotonProductionParameters() + /// returns true in the case of photon generation, false if not + G4bool DoRadiation(G4double etotal, G4double mass, + G4double angleX, G4double angleY, + G4double angleScatteringX, G4double angleScatteringY, + G4double step, G4double globalTime, + G4ThreeVector coordinateXYZ, + G4bool flagEndTrajectory=false); + + /// generates secondary photon belonging to fastStep with variables + /// photon energy, momentum direction, coordinates and global time + /// CALCULATED IN DoRadiation => USE IT ONLY AFTER DoRadiation returns true + void GeneratePhoton(G4FastStep &fastStep); + +private: + + ///set functions + + ///function setting the photon sampling parameters in the Baier-Katkov integral; + ///only the maximal energy is set, while fMinPhotonEnergy is used as a minimal energy; + ///the angles set the angular distribution (the tails are infinite) + void SetPhotonSamplingParameters(G4double ekin, + G4double minPhotonAngleX, G4double maxPhotonAngleX, + G4double minPhotonAngleY, G4double maxPhotonAngleY); + + ///main functions: + + ///generation of the photons in sampling of Baier-Katkov Integral + ///(MC integration by photon energy and angles <=> by photon momentum) + void GeneratePhotonSampling(); + + ///Baier-Katkov method: calculation of integral, spectrum, full probability; + ///returns the total radiation probability; + ///calculates the radiation spectrum on this trajectory piece + G4double RadIntegral(G4double etotal, G4double mass, + std::vector &vectorParticleAnglesX, + std::vector &vectorParticleAnglesY, + std::vector &vectorScatteringAnglesX, + std::vector &vectorScatteringAnglesY, + std::vector &vectorSteps, + G4int imin); + + ///set photon production parameters (returns false if no photon produced) + ///accumulates fTotalSpectrum + ///CAUTION: it is an accessory function of DoRadiation, do not use it separately + G4bool SetPhotonProductionParameters(G4double etotal, G4double mass); + + G4int FindVectorIndex(std::vector &myvector, G4double value); + + G4double fTotalRadiationProbability = 0.; + G4double fSinglePhotonRadiationProbabilityLimit=0.05;//Maximal radiation + //probability to preserve single photon radiation + + //number of steps in a trajectory piece before the next call of the radiation integral + G4int fNSmallTrajectorySteps=1000; + ///trajectory element No (the first element of the array feeded in RadIntegral) + G4int fImin0 = 0; + ///number of Monte Carlo points of integration on photon angles + G4int fNMCPhotons =150; + ///the number of bins in photon spectrum + G4int fNBinsSpectrum = 110; + G4double fMinPhotonEnergy = 0.1*CLHEP::MeV;//min energy in spectrum output + G4double fMaxPhotonEnergy = 1*CLHEP::GeV; //max energy in spectrum output + G4double fLogEmaxdEmin = 1.;// = log(fMaxPhotonEnergy/fMinPhotonEnergy), + // 1/normalizing coefficient in + // 1/E distribution between + // fMinPhotonEnergy and fMaxPhotonEnergy + // is used only for spectrum output, not for simulations + //(we take bremsstrahlung for photon sampling) + G4double fLogEdEmin = 1.; // = log(E/fMinPhotonEnergy), the same as fLogEmaxdEmin + // but with the particle energy as the maximal limit + + ///number of trajectories + //(at each of the Baier-Katkov Integral is calculated for the same photons) + G4int fItrajectories = 0; + + G4double fEph0=0; //energy of the photon produced + G4ThreeVector PhMomentumDirection; //momentum direction of the photon produced + + ///Radiation integral variables + G4double fMeanPhotonAngleX =0.; //average angle of radiated photon direction + //in sampling, x-plane + G4double fParamPhotonAngleX=1.e-3*CLHEP::rad; //a parameter radiated photon + //sampling distribution, x-plane + G4double fMeanPhotonAngleY =0.; //average angle of radiated photon direction + //in sampling, y-plane + G4double fParamPhotonAngleY=1.e-3*CLHEP::rad; //a parameter radiated photon + //sampling distribution, y-plane + + ///new particle parameters (the parameters at the point of radiation emission) + G4double fNewParticleEnergy=0; + G4double fNewParticleAngleX=0; + G4double fNewParticleAngleY=0; + G4double fNewGlobalTime=0; + G4ThreeVector fNewParticleCoordinateXYZ; + + ///sampling of the energy and the angles of a photon emission + ///(integration variables, Monte Carlo integration) + std::vector fPhotonEnergyInIntegral; + std::vector fPhotonAngleInIntegralX; + std::vector fPhotonAngleInIntegralY; + std::vector fPhotonAngleNormCoef; + ///spectrum bin index for each photon + std::vector fIBinsSpectrum; + ///the vector of the discrete CDF of the radiation of sampling photons + std::vector fPhotonProductionCDF; + + ///vectors of the trajectory + std::vector fParticleAnglesX; + std::vector fParticleAnglesY; + std::vector fScatteringAnglesX; + std::vector fScatteringAnglesY; + std::vector fSteps; + std::vector fGlobalTimes; + std::vector fParticleCoordinatesXYZ; + + ///intermediate integrals (different for each photon energy value)!!! + std::vector fFa;//phase + std::vector fSs; + std::vector fSc; + std::vector fSsx; + std::vector fSsy; + std::vector fScx; + std::vector fScy; + + ///output + std::vector fPhotonEnergyInSpectrum; //energy values in spectrum + + std::vector fNPhotonsPerBin; //number of photons per spectrum bin + //(accumulating during total run) + + std::vector fSpectrum; //spectrum normalized by the total radiation probability + //of one particle at one call of RadIntegral + + std::vector> fAccumSpectrum; //accumulate Spectrum during + //the part of a trajectory + + std::vector fAccumTotalSpectrum; //spectrum normalized by the total radiation + //probability summed + //for all the particles (is not divided + //of one particle number fNPhotonsPerBin) + + std::vector fTotalSpectrum; //spectrum normalized by + //the total radiation probability summed + //for all the particles + //(is divided by the photon number fNPhotonsPerBin) + //multiplied by the number of trajectories + //(fItrajectories) + + std::vector fImax0; //trajectory element numbers at the end of each small piece + //G4double just for security of some operations + ///total radiation probability along this trajectory + std::vector fTotalRadiationProbabilityAlongTrajectory; +}; + +#endif diff --git a/source/parameterisations/channeling/include/G4ChannelingFastSimCrystalData.hh b/source/parameterisations/channeling/include/G4ChannelingFastSimCrystalData.hh new file mode 100644 index 00000000000..f865a5d2759 --- /dev/null +++ b/source/parameterisations/channeling/include/G4ChannelingFastSimCrystalData.hh @@ -0,0 +1,113 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// + +#ifndef G4ChannelingFastSimCrystalData_h +#define G4ChannelingFastSimCrystalData_h 1 + +#include "G4ios.hh" +#include "globals.hh" +#include +#include "G4ThreeVector.hh" +#include "Randomize.hh" +#include "G4Material.hh" +#include + +#include "G4VChannelingFastSimCrystalData.hh" +#include "G4ChannelingFastSimInterpolation.hh" + +/** \file G4ChannelingFastSimCrystalData.hh +* \brief Definition of the G4ChannelingFastSimCrystalData class +* The class inherits G4VChannelingFastSimCrystalData containing the data and properties +* related to the crystal lattice. +* The functions related to the crystal geometry (transformation of coordinates and angles +* from the reference system of the bounding box of the local volume to +* the crystal lattice co-rotating reference system and vice versa) and +* initialization function SetMaterialProperties are compiled in this class. +*/ + +class G4ChannelingFastSimCrystalData : public G4VChannelingFastSimCrystalData +{ +public: + + G4ChannelingFastSimCrystalData(); + virtual ~G4ChannelingFastSimCrystalData() = default; + +public: + + ///find and upload crystal lattice input files, calculate all the basic values + ///(to do only once) + void SetMaterialProperties(const G4Material* crystal, const G4String &lattice); + + ///calculate the coordinates in the co-rotating reference system + ///within a channel (periodic cell) + ///(connected with crystal planes/axes either bent or straight) + G4ThreeVector CoordinatesFromBoxToLattice(const G4ThreeVector &pos0); + + ///calculate the coordinates in the Box reference system + ///(connected with the bounding box of the volume) + G4ThreeVector CoordinatesFromLatticeToBox(const G4ThreeVector &pos); + + ///change the channel if necessary, recalculate x o y + G4ThreeVector ChannelChange(G4double &x, G4double &y, G4double &z); + + ///calculate the horizontal angle in the co-rotating reference system + ///within a channel (periodic cell) + ///(connected with crystal planes/axes either bent or straight) + G4double AngleXFromBoxToLattice(G4double tx, G4double z){return tx-AngleXShift(z);} + + ///calculate the horizontal angle in the Box reference system + ///(connected with the bounding box of the volume) + G4double AngleXFromLatticeToBox(G4double tx, G4double z){return tx+AngleXShift(z);} + + ///auxialiary function to transform the horizontal angle + G4double AngleXShift(G4double z){return fMiscutAngle + z*fCurv;} + +private: + + ///variables + G4int fNsteps=353;//number of steps per channeling oscillation + G4double fR0=1.1*CLHEP::fermi;//*A^(1/3) - radius of nucleus + + ///Values related to coordinate transformation + long long int fNChannelx=0;//horizontal number of channel + //(either straight of bent) inside the box + long long int fNChannely=0;//vertical number of channel (either straight of bent) + //inside the box; =0 in the case of planes + + ///values related to the crystal lattice + G4int fNpointsx=0,fNpointsy=0;// number of horizontal and vertical nodes of interpolation + G4double fDx=0, fDy=0;// channel (periodic cell) + //horizontal and vertical dimensions + + ///fundamental constants of material + std::vector fN0; // nuclear concentration + std::vector fU1; // amplitude of thermal oscillations + std::vector fZ1;//atomic number of each element + std::vector fAN; //atomic mass of each element +}; + +#endif diff --git a/source/parameterisations/channeling/include/G4ChannelingFastSimInterpolation.hh b/source/parameterisations/channeling/include/G4ChannelingFastSimInterpolation.hh new file mode 100644 index 00000000000..539b992382d --- /dev/null +++ b/source/parameterisations/channeling/include/G4ChannelingFastSimInterpolation.hh @@ -0,0 +1,96 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + +#ifndef G4ChannelingFastSimInterpolation_h +#define G4ChannelingFastSimInterpolation_h + +#include "G4PhysicsVector.hh" +#include "G4Physics2DVector.hh" +#include "G4ThreeVector.hh" +#include "G4PhysicsLinearVector.hh" + +/** \file G4ChannelingFastSimInterpolation.hh +* \brief Definition of the G4ChannelingFastSimInterpolation class +* The class includes spline interpolation coefficients for the important functions +* needed in Channeling FastSimulation model, i.e. electric fields, nuclear and +* electron densities and minimum energy of ionization. All the functions have +* transverse coordinates as arguments (x for crystal planes, x and y for crystal axes). +* All the functions are calculated in the co-rotating reference system (along crystal +* planes/axes). +*/ + +class G4ChannelingFastSimInterpolation { + +public: + G4ChannelingFastSimInterpolation(G4double dx0, + G4double dy0, + G4int nPointsx0, + G4int nPointsy0, + G4int iModel0); + ~G4ChannelingFastSimInterpolation() = default; + + ///Get Spline Function + G4double GetIF(G4double xx, G4double yy); + + ///Set spline coefficients + void SetCoefficients1D(G4double AI0, + G4double BI0, + G4double CI0, + G4double DI0, + G4int i); + void SetCoefficients2D(G4double AI3D0, + G4double BI3D0, + G4double CI3D0, + G4int i, + G4int j, + G4int k); + +private: + G4double Spline1D(G4double xx); + G4double Spline2D(G4double xx, G4double yy);// cubic spline of 2-variable function + + G4double fDx=0, fDy=0; //channel width and height + G4double fStepi=0, fStepj=0; //interpolation steps in x and y, respectively + G4double fStepi2=0; //=fStepi*fStepi + G4int nPointsx=0, nPointsy=0; //number of interpolation nodes in x and y, respectively + + std::vector fAI; + std::vector fBI; + std::vector fCI; + std::vector fDI; + + std::vector> fAI3D; + std::vector> fBI3D; + std::vector> fCI3D; + std::vector> fAI3D3; + std::vector> fBI3D3; + std::vector> fCI3D3; + + G4int iModel=1; + +}; + +#endif diff --git a/source/parameterisations/channeling/include/G4ChannelingFastSimModel.hh b/source/parameterisations/channeling/include/G4ChannelingFastSimModel.hh new file mode 100644 index 00000000000..4d431915548 --- /dev/null +++ b/source/parameterisations/channeling/include/G4ChannelingFastSimModel.hh @@ -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. * +// ******************************************************************** +// + +#ifndef G4ChannelingFastSimModel_h +#define G4ChannelingFastSimModel_h 1 + +#include "G4VFastSimulationModel.hh" +#include "G4Step.hh" +#include "G4TouchableHandle.hh" +#include +#include +#include + +#include "G4ChannelingFastSimCrystalData.hh" +#include +#include "G4BaierKatkov.hh" +#include "G4LogicalVolume.hh" +#include "G4ParticleTable.hh" + +/** \file G4ChannelingFastSimModel.hh +* \brief Definition of the G4ChannelingFastSimModel class +* FastSimulation Channeling model: calculates charge particle trajectories +* in oriented crystals in the field of crystal planes/axes either straight or bent. +* It is also possible to simulate radiation using Baier-Katkov method. +*/ + +class G4ChannelingFastSimModel : public G4VFastSimulationModel +{ +public: + // Constructor, destructor + G4ChannelingFastSimModel (const G4String&, G4Region*); + G4ChannelingFastSimModel (const G4String&); + ~G4ChannelingFastSimModel (); + + /// -- IsApplicable + G4bool IsApplicable(const G4ParticleDefinition&) override; + /// -- ModelTrigger + G4bool ModelTrigger(const G4FastTrack &) override; + /// -- User method DoIt + void DoIt(const G4FastTrack&, G4FastStep&) override; + + ///special functions + void Input(const G4Material* crystal, const G4String &lattice); + + void RadiationModelActivate(); + + G4ChannelingFastSimCrystalData* GetCrystalData() {return fCrystalData;} + + G4BaierKatkov* GetRadiationModel() {return fBaierKatkov;} + + G4bool GetIfRadiationModelActive(){return fRad;} + + ///set cuts + void SetLowKineticEnergyLimit(G4double ekinetic, const G4String& particleName) + {fLowEnergyLimit[particleTable->FindParticle(particleName)-> + GetParticleDefinitionID()] = ekinetic;} + void SetLindhardAngleNumberHighLimit(G4double angleNumber, const G4String& particleName) + {fLindhardAngleNumberHighLimit[particleTable->FindParticle(particleName)-> + GetParticleDefinitionID()]=angleNumber;} + + void SetDefaultLowKineticEnergyLimit(G4double ekinetic) + {fDefaultLowEnergyLimit=ekinetic;} + void SetDefaultLindhardAngleNumberHighLimit(G4double angleNumber) + {fDefaultLindhardAngleNumberHighLimit=angleNumber;} + + + /// get the maximal number of photons that can be produced per fastStep + /// Caution: is redundant, if the radiation model is not activated + void SetMaxPhotonsProducedPerStep(G4double nPhotons) + {fMaxPhotonsProducedPerStep=nPhotons;} + + ///get cuts + G4double GetLowKineticEnergyLimit(const G4String& particleName) + {return GetLowKineticEnergyLimit(particleTable-> + FindParticle(particleName)-> + GetParticleDefinitionID());} + G4double GetLindhardAngleNumberHighLimit(const G4String& particleName) + {return GetLindhardAngleNumberHighLimit(particleTable-> + FindParticle(particleName)-> + GetParticleDefinitionID());} + //the same functions but using particleDefinitionID (needed for faster model execution) + G4double GetLowKineticEnergyLimit(G4int particleDefinitionID) + {return (fLowEnergyLimit.count(particleDefinitionID) == 1) + ? fLowEnergyLimit[particleDefinitionID] + : fDefaultLowEnergyLimit;} + G4double GetLindhardAngleNumberHighLimit(G4int particleDefinitionID) + {return (fLindhardAngleNumberHighLimit.count(particleDefinitionID) == 1) + ? fLindhardAngleNumberHighLimit[particleDefinitionID] + : fDefaultLindhardAngleNumberHighLimit;} + + /// get the maximal number of photons that can be produced per fastStep + G4int GetMaxPhotonsProducedPerStep(){return fMaxPhotonsProducedPerStep;} + +private: + + G4ChannelingFastSimCrystalData* fCrystalData{nullptr}; + G4BaierKatkov* fBaierKatkov{nullptr}; + + G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable(); + + ///flag of radiation model + G4bool fRad = false; + + /// maps of cuts + std::unordered_map fLowEnergyLimit; + std::unordered_map fLindhardAngleNumberHighLimit; + + G4double fDefaultLowEnergyLimit = 200*CLHEP::MeV; + G4double fDefaultLindhardAngleNumberHighLimit = 100.; + + /// the maximal number of photons that can be produced per fastStep + G4int fMaxPhotonsProducedPerStep=1000.; + +}; +#endif + + + + diff --git a/source/parameterisations/channeling/include/G4VChannelingFastSimCrystalData.hh b/source/parameterisations/channeling/include/G4VChannelingFastSimCrystalData.hh new file mode 100644 index 00000000000..56b3886188b --- /dev/null +++ b/source/parameterisations/channeling/include/G4VChannelingFastSimCrystalData.hh @@ -0,0 +1,302 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// + +#ifndef G4VChannelingFastSimCrystalData_h +#define G4VChannelingFastSimCrystalData_h 1 + +#include "G4ios.hh" +#include "globals.hh" +#include "G4ThreeVector.hh" +#include "Randomize.hh" +#include "G4LogicalVolume.hh" +#include "G4Material.hh" +#include "G4VSolid.hh" +#include + +#include "G4ChannelingFastSimInterpolation.hh" + +/** \file G4VChannelingFastSimCrystalData.hh +* \brief Definition of the G4VChannelingFastSimCrystalData class +* The class contains the data and properties related to the crystal lattice as well as +* functions to simulate of important physical processes, i.e. coulomb scattering on +* screened atomic potential, on single electrons and ionization energy losses; +* functions of electric fields, nuclear and electron densities and minimum energy +* of ionization (the corresponding interpolation coefficients are in +* G4ChannelingFastSimInterpolation). +* The functions related to the crystal geometry (transformation of coordinates and angles +* from the reference system of the bounding box of the local volume to +* the crystal lattice co-rotating reference system and vice versa) and +* initialization function SetMaterialProperties are created as virtual to make +* material data input and geometry functions flexible for modification. +*/ + +class G4VChannelingFastSimCrystalData{ +public: + + G4VChannelingFastSimCrystalData(); + virtual ~G4VChannelingFastSimCrystalData(); + + ///electric fields produced by crystal lattice + G4double Ex(G4double x,G4double y) {return (fElectricFieldX->GetIF(x,y))*(-fZ2/fPV);} + G4double Ey(G4double x,G4double y) {return (fElectricFieldY->GetIF(x,y))*(-fZ2/fPV);} + + ///electron density function + G4double ElectronDensity(G4double x,G4double y) + { + G4double nel0=fElectronDensity->GetIF(x,y); + if(nel0<0.) {nel0=0.;}//exception, errors of interpolation functions + return nel0; + } + ///minimum energy of ionization function + G4double MinIonizationEnergy(G4double x,G4double y) + {return fMinIonizationEnergy->GetIF(x,y);} + ///nuclear density function (normalized to average nuclear density) + G4double NuclearDensity(G4double x,G4double y, G4int ielement) + {return std::abs(fNucleiDensity[ielement]->GetIF(x,y));} + //abs to describe exception, errors of interpolation functions, + //don't put it =0, otherwise division on 0 in CoulombAtomicScattering + + ///Calculate the value of the Lindhard angle (!!! the value for a straight crystal) + G4double GetLindhardAngle(G4double etotal, G4double mass); + ///Calculate the value of the Lindhard angle (!!! the value for a straight crystal) + G4double GetLindhardAngle();//return the Lindhard angle value calculated in + //SetParticleProperties + + ///Calculate simulation step (standard value for channeling particles and + ///reduced value for overbarrier particles) + G4double GetSimulationStep(G4double tx,G4double ty); + ///Calculate maximal simulation step (standard value for channeling particles) + G4double GetMaxSimulationStep(G4double etotal, G4double mass); + + ///get particle velocity/c + G4double GetBeta(){return fBeta;} + + G4int GetNelements() {return fNelements;} + G4int GetModel() {return iModel;}//=1 for planes, =2 for axes + + ///get bending angle of the crystal planes/axes + ///(default BendingAngle=0 => straight crystal); + G4double GetBendingAngle(){return fBendingAngle;} + ///fBendingAngle MAY BE NOT THE SAME AS THE BENDING ANGLE OF THE CRYSTAL VOLUME: + ///THE VOLUME OF A BENT CRYSTAL MAY BE G4Box, while the planes/axes inside may be bent + + G4double GetMiscutAngle(){return fMiscutAngle;} + + ///get crystal curvature + G4double GetCurv(){return fCurv;} + + ///find and upload crystal lattice input files, calculate all the basic values + ///(to do only once) + virtual void SetMaterialProperties(const G4Material* crystal, + const G4String &lattice) = 0; + + ///set geometry parameters from current logical volume + void SetGeometryParameters(const G4LogicalVolume *crystallogic); + + ///set bending angle of the crystal planes/axes + ///(default fBendingAngle=0 => straight crystal); + ///only non-negative values! crystal is bent in the positive direction of x + void SetBendingAngle(G4double tetab, const G4LogicalVolume *crystallogic); + ///fBendingAngle MAY BE NOT THE SAME AS THE BENDING ANGLE OF THE CRYSTAL VOLUME + ///THE VOLUME OF A BENT CRYSTAL MAY BE G4Box, while the planes/axes inside may be bent + + ///set miscut angle (default fMiscutAngle=0), acceptable range +-1 mrad, + ///otherwise geometry routines may be unstable + void SetMiscutAngle(G4double tetam, const G4LogicalVolume *crystallogic); + + ///recalculate all the important values + ///(to do both at the trajectory start and after energy loss) + void SetParticleProperties(G4double etotal, + G4double mp, + G4double charge, + G4bool ifhadron); + + ///calculate the coordinates in the co-rotating reference system + ///within a channel (periodic cell) + ///(connected with crystal planes/axes either bent or straight) + virtual G4ThreeVector CoordinatesFromBoxToLattice(const G4ThreeVector &pos0) = 0; + + ///calculate the coordinates in the Box reference system + ///(connected with the bounding box of the volume) + virtual G4ThreeVector CoordinatesFromLatticeToBox(const G4ThreeVector &pos) = 0; + + ///change the channel if necessary, recalculate x o y + virtual G4ThreeVector ChannelChange(G4double& x, G4double& y, + G4double& z) = 0; + + ///return correction of the longitudinal coordinate + /// (along current plane/axis vs "central plane/axis") + G4double GetCorrectionZ(){return fCorrectionZ;} + + ///calculate the horizontal angle in the co-rotating reference system + ///within a channel (periodic cell) + ///(connected with crystal planes/axes either bent or straight) + virtual G4double AngleXFromBoxToLattice(G4double tx, G4double z)=0; + + ///calculate the horizontal angle in the Box reference system + ///(connected with the bounding box of the volume) + virtual G4double AngleXFromLatticeToBox(G4double tx, G4double z)=0; + + ///auxialiary function to transform the horizontal angle + virtual G4double AngleXShift(G4double z)=0; + + ///multiple and single scattering on screened potential + G4ThreeVector CoulombAtomicScattering( + G4double effectiveStep, + G4double step, + G4int ielement); + ///multiple and single scattering on electrons + G4ThreeVector CoulombElectronScattering(G4double eMinIonization, + G4double electronDensity, + G4double step); + ///ionization losses + G4double IonizationLosses(G4double dz, G4int ielement); + + void SetVerbosity(G4int ver){fVerbosity = ver;} + +protected: + ///classes containing interpolation coefficients + //horizontal electric field data + G4ChannelingFastSimInterpolation* fElectricFieldX{nullptr}; + //vertical electric field data + G4ChannelingFastSimInterpolation* fElectricFieldY{nullptr}; + //electron density data + G4ChannelingFastSimInterpolation* fElectronDensity{nullptr}; + //minimal energy of ionization data + G4ChannelingFastSimInterpolation* fMinIonizationEnergy{nullptr}; + //nuclear density distributions data + std::vector fNucleiDensity; + + ///values related to the crystal geometry + G4ThreeVector fHalfDimBoundingBox;//bounding box half dimensions + G4int fBent=0;//flag of bent crystal, + //=0 for straight and =1 for bent, by default straight crystal + + G4double fBendingAngle=0.;// angle of bending of the crystal planes/axes + //inside the crystal volume + //MAY BE NOT THE SAME AS THE BENDING ANGLE OF THE CRYSTAL VOLUME + //THE VOLUME OF A BENT CRYSTAL MAY BE G4Box, + //while the planes/axes inside may be bent + G4double fBendingR = 0.; // bending radius of the crystal planes/axes + G4double fBending2R=0.; // =2*fBendingR + G4double fBendingRsquare=0.; // =fBendingR**2 + G4double fCurv=0.; //=1/fBendingR bending curvature of the crystal planes/axes + + G4double fMiscutAngle = 0.;// miscut angle, can be of either sign or 0; + //safe values |ThetaMiscut|<0.001 + G4double fCosMiscutAngle=1.;// = std::cos(fMiscutAngle), to economy operations + G4double fSinMiscutAngle=0.;// = std::sin(fMiscutAngle), to economy operations + + G4double fCorrectionZ = 1.;//correction of the longitudinal coordinate + //(along current plane/axis vs "central plane/axis"), 1 is default value + //(for "central plane/axis" or a straight crystal) + + ///values related to the crystal lattice + G4int fNelements=1;//number of nuclear elements in a crystal + G4int iModel=1;// model type (iModel=1 for interplanar potential, + //iModel=2 for the interaxial one) + + G4double fVmax=0; // the height of the potential well + G4double fVmax2=0; // =2*fVmax + G4double fVMinCrystal=0;// non-zero minimal potential inside the crystal, + // necessary for angle recalculation for entrance/exit + //through the crystal lateral surface + + G4double fChangeStep=0;// fChannelingStep = fChangeStep/fTetaL + + std::vector fI0; //Mean excitation energy + + std::vector fRF;//Thomas-Fermi screening radius + + ///angles necessary for multiple and single coulomb scattering + + //minimal scattering angle by coulomb scattering on nuclei + //defined by shielding by electrons + std::vector fTeta10;//(in the Channeling model + //teta1=fTeta10/fPz*(1.13+fK40/vz**2) + //maximal scattering angle by coulomb scattering on nuclei defined by nucleus radius + std::vector fTetamax0;//(in the Channeling model tetamax=fTetamax0/fPz) + std::vector fTetamax2;//=tetamax*tetamax + std::vector fTetamax12;//=teta1*teta1+tetamax*tetamax + std::vector fTeta12; //= teta1*teta1 + + ///coefficients necessary for multiple and single coulomb scattering + std::vector fK20; //a useful coefficient, fK2=fK20/fPV/fPV + std::vector fK2; //a useful coefficient, + //fK2=(fZ2*alpha*hdc)**2*4.*pi*fN0*(fZ1/fPV)**2 + std::vector fK40; //a useful coefficient, fK40=3.76D0*(alpha*fZ1)**2 + G4double fK30=0;//a useful coefficient, fK3=fK30/fPV/fPV + G4double fK3=0;//a useful coefficient, fK3=2.*pi*alpha*hdc/electron_mass_c2/(fPV)**2 + + std::vector fKD; //a useful coefficient for dE/dx + + ///coefficients for multiple scattering suppression + std::vector fPu11;//a useful coefficient for exponent containing u1 + std::vector fPzu11;//a useful coefficient for exponent containing u1 + std::vector fBB;//a useful coefficient + std::vector fE1XBbb;//a useful coefficient + std::vector fBBDEXP;//a useful coefficient + + //Variable to control printout + G4int fVerbosity = 1; + + +private: + + //exponential integral + G4double expint(G4double x); + + ///private variables + + std::unordered_map fMapBendingAngle;//the map fBendingAngle + //for different logical volumes + + std::unordered_map fMapMiscutAngle;//the map fMiscutAngle + //for different logical volumes + + G4double fChannelingStep=0;// simulation step under the channeling conditions = + //channeling oscillation length/fNsteps + // channeling oscillation length: Biryukov book Eq. (1.24) + + ///energy depended values + G4double fPz=0; // particle momentum absolute value + G4double fPV=0; // pv + G4double fTetaL=0; //Lindhard angle + G4double fBeta=0; //particle (velocity/c) + G4double fV2=0; // particle (velocity/c)^2 + G4double fGamma=0; //Lorentz factor + G4double fMe2Gamma=0; // me^2*fGamma + G4double fTmax=0; // max ionization losses + + ///particle properties flags + G4bool fHadron=false;//=true (for hadrons); =false (for leptons) + G4double fZ2=0; //particle charge + +}; + +#endif + diff --git a/source/parameterisations/channeling/sources.cmake b/source/parameterisations/channeling/sources.cmake new file mode 100644 index 00000000000..d60d0fce8ed --- /dev/null +++ b/source/parameterisations/channeling/sources.cmake @@ -0,0 +1,29 @@ +# - G4channeling module build definition + +# Define the Geant4 Module. +geant4_add_module(G4channeling + PUBLIC_HEADERS + G4BaierKatkov.hh + G4ChannelingFastSimCrystalData.hh + G4ChannelingFastSimInterpolation.hh + G4ChannelingFastSimModel.hh + G4VChannelingFastSimCrystalData.hh + SOURCES + G4BaierKatkov.cc + G4ChannelingFastSimCrystalData.cc + G4ChannelingFastSimInterpolation.cc + G4ChannelingFastSimModel.cc + G4VChannelingFastSimCrystalData.cc) + + geant4_module_link_libraries(G4channeling + PUBLIC + G4geometrymng + G4globman + G4heprandom + G4materials + G4parameterisation + G4track + G4partman + PRIVATE + G4bosons + G4navigation) \ No newline at end of file diff --git a/source/parameterisations/channeling/src/G4BaierKatkov.cc b/source/parameterisations/channeling/src/G4BaierKatkov.cc new file mode 100644 index 00000000000..336e3ea568c --- /dev/null +++ b/source/parameterisations/channeling/src/G4BaierKatkov.cc @@ -0,0 +1,583 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + +#include "G4BaierKatkov.hh" + +#include "Randomize.hh" +#include "G4Gamma.hh" +#include "G4SystemOfUnits.hh" +#include "G4PhysicalConstants.hh" + +G4BaierKatkov::G4BaierKatkov() +{ + //sets the default spectrum energy range of integration and + //calls ResetRadIntegral() + SetSpectrumEnergyRange(0.1*MeV,1.*GeV,110); + + //Do not worry if the maximal energy > particle energy + //this elements of spectrum with non-physical energies + //will not be processed (they will be 0) +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4BaierKatkov::ResetRadIntegral() +{ + fAccumSpectrum.clear(); + + //reinitialize intermediate integrals with zeros + fFa.resize(fNMCPhotons); + fSs.resize(fNMCPhotons); + fSc.resize(fNMCPhotons); + fSsx.resize(fNMCPhotons); + fSsy.resize(fNMCPhotons); + fScx.resize(fNMCPhotons); + fScy.resize(fNMCPhotons); + std::fill(fFa.begin(), fFa.end(), 0.); + std::fill(fSs.begin(), fSs.end(), 0.); + std::fill(fSc.begin(), fSc.end(), 0.); + std::fill(fSsx.begin(), fSsx.end(), 0.); + std::fill(fSsy.begin(), fSsy.end(), 0.); + std::fill(fScx.begin(), fScx.end(), 0.); + std::fill(fScy.begin(), fScy.end(), 0.); + + //Reset radiation integral internal variables to defaults + fMeanPhotonAngleX =0.; //average angle of + //radiated photon direction in sampling, x-plane + fParamPhotonAngleX=1.e-3*rad; //a parameter of + //radiated photon sampling distribution, x-plane + fMeanPhotonAngleY =0.; //average angle of + //radiated photon direction in sampling, y-plane + fParamPhotonAngleY=1.e-3*rad; //a parameter of + //radiated photon sampling distribution, y-plane + + fImin0 = 0;//set the first vector element to 0 + + //reset the trajectory + fParticleAnglesX.clear(); + fParticleAnglesY.clear(); + fScatteringAnglesX.clear(); + fScatteringAnglesY.clear(); + fSteps.clear(); + fGlobalTimes.clear(); + fParticleCoordinatesXYZ.clear(); + + //resets the vector of element numbers at the trajectory start + fImax0.clear(); + //sets 0 element of the vector of element numbers + fImax0.push_back(0.); + + //resets the radiation probability + fTotalRadiationProbabilityAlongTrajectory.clear(); + //sets the radiation probability at the trajectory start + fTotalRadiationProbabilityAlongTrajectory.push_back(0.); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4BaierKatkov::SetSpectrumEnergyRange(G4double emin, + G4double emax, + G4int numberOfBins) +{ + fMinPhotonEnergy = emin; + fMaxPhotonEnergy = emax; + fNBinsSpectrum = numberOfBins; + + fLogEmaxdEmin = std::log(fMaxPhotonEnergy/fMinPhotonEnergy); + + //in initializing fNPhotonsPerBin + fNPhotonsPerBin.resize(fNBinsSpectrum); + std::fill(fNPhotonsPerBin.begin(), fNPhotonsPerBin.end(), 0); + + //initializing the Spectrum + fSpectrum.resize(fNBinsSpectrum); + std::fill(fSpectrum.begin(), fSpectrum.end(), 0); + + //initializing the fAccumTotalSpectrum + fAccumTotalSpectrum.resize(fNBinsSpectrum); + std::fill(fAccumTotalSpectrum.begin(), fAccumTotalSpectrum.end(), 0); + + //initializing the fTotalSpectrum + fTotalSpectrum.resize(fNBinsSpectrum); + std::fill(fTotalSpectrum.begin(), fTotalSpectrum.end(), 0); + + fPhotonEnergyInSpectrum.clear(); + for (G4int j=0;jEmax => fLogEdEmin>fLogEmaxdEmin) + //in this case we don't count the photon in the spectrum output + if(fIBinsSpectrum[j] half of statistics of photons + do + { + rho = std::sqrt(std::tan(CLHEP::halfpi*G4UniformRand())); + } + while (rho>rhocut); + + ksi = G4UniformRand(); + fPhotonAngleInIntegralX.push_back(fMeanPhotonAngleX+ + fParamPhotonAngleX* + rho*std::cos(CLHEP::twopi*ksi)); + fPhotonAngleInIntegralY.push_back(fMeanPhotonAngleY+ + fParamPhotonAngleY* + rho*std::sin(CLHEP::twopi*ksi)); + fPhotonAngleNormCoef.push_back((1.+rho*rho*rho*rho)*norm); + } + //reinitialize the vector of radiation CDF for each photon + fPhotonProductionCDF.resize(fNMCPhotons+1);// 0 element is equal to 0 + std::fill(fPhotonProductionCDF.begin(), fPhotonProductionCDF.end(), 0.); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4double G4BaierKatkov::RadIntegral(G4double etotal, G4double mass, + std::vector &vectorParticleAnglesX, + std::vector &vectorParticleAnglesY, + std::vector &vectorScatteringAnglesX, + std::vector &vectorScatteringAnglesY, + std::vector &vectorSteps, + G4int imin) +{ + //preliminary values are defined: + + G4double om=0.;// photon energy + G4double eprime=0., eprime2=0.; //E'=E-omega eprime2=eprime*eprime + G4double omprime=0.,omprimed2=0.;//om'=(E*om/E'), omprimed2=omprime/2 + G4double vxin =0.,vyin=0.,vxno=0.,vyno=0.; + + G4double dzmod=0.; + G4double fa1=0.,faseBefore=0.,faseBeforedz=0.,faseBeforedzd2=0.; + G4double faseAfter=0.,fa2dfaseBefore2=0.; + + G4double skJ=0, skIx=0., skIy=0.; + G4double sinfa1=0.,cosfa1=0.; + G4double i2=0.,j2=0.;// Ix^2+Iy^2 and of BK Jvector^2 + + std::size_t nparts=vectorParticleAnglesX.size(); + G4int kmin = imin; + if(imin==0) {kmin=1;}//skipping 0 trajectory element + + //total radiation probability for each photon + G4double totalRadiationProbabilityPhj = 0.; + + //total radiation probability along this trajectory (fill with 0 only new elements) + fTotalRadiationProbabilityAlongTrajectory.resize(nparts); + + //reset Spectrum + std::fill(fSpectrum.begin(), fSpectrum.end(), 0.); + + //intermediate vectors to reduce calculations + std::vector axt;//acceleration of a charged particle in a horizontal plane + axt.resize(nparts); + std::vector ayt;//acceleration of a charged particle in a vertical plane + ayt.resize(nparts); + std::vector dz;//step in in MeV^-1 + dz.resize(nparts); + //setting values interesting for us + for(std::size_t k=kmin;kEmax => fLogEdEmin>fLogEmaxdEmin) + //in this case we don't count the photon in the spectrum output + if(fIBinsSpectrum[j] &myvector, G4double value) +{ + auto iteratorbegin = myvector.begin(); + auto iteratorend = myvector.end(); + + //vector index (for non precise values lower_bound gives upper value) + auto loweriterator = std::lower_bound(iteratorbegin, iteratorend, value); + //return the index of the vector element + return (G4int)std::distance(iteratorbegin, loweriterator); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4bool G4BaierKatkov::SetPhotonProductionParameters(G4double etotal, G4double mass) +{ + //flag if a photon was produced + G4bool flagPhotonProduced = false; + + //how many small pieces of a trajectory are + //before radiation (all if not radiation) + std::size_t nodeNumber = fAccumSpectrum.size()-1; + + //ksi is a random number + //Generally ksi = G4UniformRand() is ok, but + //we use as a correction for the case + //when the radiation probability becomes too high (> 0.1) + G4double ksi = -std::log(G4UniformRand()); + + if (ksi< fTotalRadiationProbabilityAlongTrajectory.back()) // photon produced + { + //randomly choosing the photon to be produced from the sampling list + //according to the probabilities calculated in the Baier-Katkov integral + G4int iphoton = FindVectorIndex(fPhotonProductionCDF,ksi)-1;//index of + //a photon produced + + //energy of the photon produced + fEph0 = fPhotonEnergyInIntegral[iphoton]; + //anagles of the photon produced + G4double photonAngleX = fPhotonAngleInIntegralX[iphoton]; + G4double photonAngleY = fPhotonAngleInIntegralY[iphoton]; + + G4double momentumDirectionZ = 1./ + std::sqrt(1.+std::pow(std::tan(photonAngleX),2)+ + std::pow(std::tan(photonAngleY),2)); + + //momentum direction vector of the photon produced + PhMomentumDirection.set(momentumDirectionZ*std::tan(photonAngleX), + momentumDirectionZ*std::tan(photonAngleY), + momentumDirectionZ); + + //random calculation of the radiation point index (iNode) + ksi = G4UniformRand()*fTotalRadiationProbabilityAlongTrajectory.back(); + + //sort fTotalRadiationProbabilityAlongTrajectory + //(increasing but oscillating function => non-monotonic) + std::vector temporaryVector; + temporaryVector.assign(fTotalRadiationProbabilityAlongTrajectory.begin(), + fTotalRadiationProbabilityAlongTrajectory.end()); + std::sort(temporaryVector.begin(), temporaryVector.end()); + + //index of the point of radiation ("poststep") in sorted vector + G4int iNode = FindVectorIndex(temporaryVector,ksi); + + //index of the point of radiation ("poststep") in unsorted vector + auto it = std::find_if(fTotalRadiationProbabilityAlongTrajectory.begin(), + fTotalRadiationProbabilityAlongTrajectory.end(), + [&](G4double value) + {return std::abs(value - temporaryVector[iNode]) < DBL_EPSILON;}); + iNode = (G4int)std::distance(fTotalRadiationProbabilityAlongTrajectory.begin(), it); + + //the piece of trajectory number (necessary only for the spectrum output) + nodeNumber = FindVectorIndex(fImax0,iNode*1.)-1; + + //set new parameters of the charged particle + //(returning the particle back to the radiation point, i.e. + //remembering the new parameters for corresponding get functions) + fNewParticleEnergy = etotal-fEph0; + fNewParticleAngleX = fParticleAnglesX[iNode]; + fNewParticleAngleY = fParticleAnglesY[iNode]; + fNewGlobalTime = fGlobalTimes[iNode]; + fNewParticleCoordinateXYZ = fParticleCoordinatesXYZ[iNode]; + + //particle angle correction from momentum conservation + //(important for fEph0 comparable to E, + // may kick off a particle from channeling) + G4double pratio = fEph0/std::sqrt(etotal*etotal-mass*mass); + fNewParticleAngleX -= std::asin(pratio*std::sin(photonAngleX)); + fNewParticleAngleY -= std::asin(pratio*std::sin(photonAngleY)); + + flagPhotonProduced = true; + } + + //accumulation during entire code run + for (G4int j=0;j to simulate the photon emission + if(fTotalRadiationProbability>fSinglePhotonRadiationProbabilityLimit|| + flagEndTrajectory) + { + flagPhotonProduced = SetPhotonProductionParameters(etotal,mass); + + fItrajectories += 1; //count this trajectory + + //reinitialize intermediate integrals fFa, fSs, fSc, fSsx, fSsy, fScx, fScy; + //reset radiation integral internal variables to defaults; + //reset the trajectory and radiation probability along the trajectory + ResetRadIntegral(); + } + } + + return flagPhotonProduced; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4BaierKatkov::GeneratePhoton(G4FastStep &fastStep) +{ + const G4DynamicParticle theGamma = G4DynamicParticle(G4Gamma::Gamma(), + PhMomentumDirection,fEph0); + //generation of a secondary photon + fastStep.CreateSecondaryTrack(theGamma,fNewParticleCoordinateXYZ,fNewGlobalTime,true); +} diff --git a/source/parameterisations/channeling/src/G4ChannelingFastSimCrystalData.cc b/source/parameterisations/channeling/src/G4ChannelingFastSimCrystalData.cc new file mode 100644 index 00000000000..5d6a8fcd326 --- /dev/null +++ b/source/parameterisations/channeling/src/G4ChannelingFastSimCrystalData.cc @@ -0,0 +1,408 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + +#include "G4ChannelingFastSimCrystalData.hh" +#include "G4SystemOfUnits.hh" +#include "G4PhysicalConstants.hh" + +G4ChannelingFastSimCrystalData::G4ChannelingFastSimCrystalData() +{ + +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4ChannelingFastSimCrystalData::SetMaterialProperties(const G4Material *crystal, + const G4String &lattice) +{ + G4String filename=crystal->GetName(); //input file + filename.erase(0,3); + + if (fVerbosity) + { + G4cout << + "=======================================================================" + << G4endl; + G4cout << + "====== Crystal lattice data ========" + << G4endl; + G4cout << + "=======================================================================" + << G4endl; + G4cout << "Crystal material: " << filename << G4endl; + } + + //choice between planes (1D model) and axes (2D model) + if (lattice.compare(0,1,"(")==0) + { + iModel=1; //planes + filename = filename + "_planes_"; //temporary name + if (fVerbosity) + G4cout << "Crystal planes: " << lattice << G4endl; + } + else if (lattice.compare(0,1,"<")==0) + { + iModel=2; //axes + filename = filename + "_axes_"; //temporary name + if (fVerbosity) + G4cout << "Crystal axes: " << lattice << G4endl; + } + + //input file: + filename = filename + lattice.substr(1,(lattice.length())-2) + ".dat"; + + fNelements=(G4int)crystal->GetNumberOfElements(); + for(G4int i=0; iGetElement(i)->GetZ()); + fAN.push_back(crystal->GetElement(i)->GetAtomicMassAmu()); + fI0.push_back(crystal->GetElement(i)->GetIonisation()->GetMeanExcitationEnergy()); + } + + G4double var;//just variable + G4double unitIF;//unit of interpolation function + + std::ifstream vfilein; + vfilein.open(filename); + + //read nuclear concentration + for(G4int i=0; i> var; + fN0.push_back(var/cm3); + } + + //read amplitude of thermal oscillations + for(G4int i=0; i> var; + fU1.push_back(var*cm); + } + + if (iModel==1) + { + // read channel dimensions + vfilein >> fDx; + fDx*=cm; + // read interpolation step size + vfilein >> fNpointsx; + + fDy = fDx; + fNpointsy = 0; + } + else if (iModel==2) + { + // read channel dimensions + vfilein >> fDx >> fDy; + fDx*=cm; + fDy*=cm; + // read the number of nodes of interpolation + vfilein >> fNpointsx >> fNpointsy; + } + + //read the height of the potential well, necessary only for step length calculation + vfilein >> fVmax; + fVmax*=eV; + fVmax2=2.*fVmax; + + //read the on-zero minimal potential inside the crystal, + //necessary for angle recalculation for entrance/exit through the crystal lateral surface + vfilein >> fVMinCrystal; + fVMinCrystal*=eV; + + // to create the class of interpolation for any function + fElectricFieldX = + new G4ChannelingFastSimInterpolation(fDx,fDy,fNpointsx,fNpointsy,iModel); + if(iModel==2) {fElectricFieldY = + new G4ChannelingFastSimInterpolation(fDx,fDy,fNpointsx,fNpointsy,iModel);} + fElectronDensity = + new G4ChannelingFastSimInterpolation(fDx,fDy,fNpointsx,fNpointsy,iModel); + fMinIonizationEnergy = + new G4ChannelingFastSimInterpolation(fDx,fDy,fNpointsx,fNpointsy,iModel); + + // do it for any element of crystal material + for(G4int i=0; i> ai >> bi >> ci >> di; + //setting spline coefficients for electric field + unitIF=eV/cm; + fElectricFieldX->SetCoefficients1D(ai*unitIF, bi*unitIF, + ci*unitIF, di*unitIF, i); + + //reading the coefficients of cubic spline + vfilein >> ai >> bi >> ci >> di; + //setting spline coefficients for nuclear density (first element) + unitIF=1.; + fNucleiDensity[0]->SetCoefficients1D(ai*unitIF, bi*unitIF, + ci*unitIF, di*unitIF, i); + + //reading the coefficients of cubic spline + vfilein >> ai >> bi >> ci >> di; + //setting spline coefficients for electron density + unitIF=1./cm3; + fElectronDensity->SetCoefficients1D(ai*unitIF, bi*unitIF, + ci*unitIF, di*unitIF, i); + + //reading the coefficients of cubic spline + vfilein >> ai >> bi >> ci >> di; + //setting spline coefficients for minimal ionization energy + unitIF=eV; + fMinIonizationEnergy->SetCoefficients1D(ai*unitIF, bi*unitIF, + ci*unitIF, di*unitIF, i); + + for(G4int ii=1; ii> ai >> bi >> ci >> di; + //setting spline coefficients for nuclear density (other elements if any) + unitIF=1.; + fNucleiDensity[ii]->SetCoefficients1D(ai*unitIF, bi*unitIF, + ci*unitIF, di*unitIF, i); + } + } + } + else if (iModel==2) + { + G4double ai3D, bi3D, ci3D; + for(G4int j=0; j> ai3D >> bi3D >> ci3D; + unitIF=eV; + //setting spline coefficients for minimal ionization energy + fMinIonizationEnergy->SetCoefficients2D(ai3D*unitIF, bi3D*unitIF, ci3D*unitIF, + i, j, k); + + //reading the coefficients of cubic spline + vfilein >> ai3D >> bi3D >> ci3D; + //setting spline coefficients for horizontal electric field + unitIF=eV/cm; + fElectricFieldX->SetCoefficients2D(ai3D*unitIF, bi3D*unitIF, ci3D*unitIF, + i, j, k); + + //reading the coefficients of cubic spline + vfilein >> ai3D >> bi3D >> ci3D; + //setting spline coefficients for vertical electric field + unitIF=eV/cm; + fElectricFieldY->SetCoefficients2D(ai3D*unitIF, bi3D*unitIF, ci3D*unitIF, + i, j, k); + + //reading the coefficients of cubic spline + vfilein >> ai3D >> bi3D >> ci3D; + //setting spline coefficients for nuclear density (first element) + unitIF=1.; + fNucleiDensity[0]->SetCoefficients2D(ai3D*unitIF, bi3D*unitIF, ci3D*unitIF, + i, j, k); + + //reading the coefficients of cubic spline + vfilein >> ai3D >> bi3D >> ci3D; + //setting spline coefficients for electron density + unitIF=1./cm3; + fElectronDensity->SetCoefficients2D(ai3D*unitIF, bi3D*unitIF, ci3D*unitIF, + i, j, k); + + for(G4int ii=1; ii> ai3D >> bi3D >> ci3D; + //setting spline coefficients for nuclear density (other elements if any) + unitIF=1.; + fNucleiDensity[ii]->SetCoefficients2D(ai3D*unitIF, bi3D*unitIF, + ci3D*unitIF, + i, j, k); + } + + } + } + } + } + + vfilein.close(); + + //set special values and coefficients + G4double alphahbarc2=std::pow(CLHEP::fine_structure_const*CLHEP::hbarc ,2.); + fK30=2.*CLHEP::pi*alphahbarc2/CLHEP::electron_mass_c2; + + for(G4int i=0; i=fDx) + { + fNChannelx+=1; + x-=fDx; //enter in other channel + //correction of the longitudinal coordinate + if (fBent) {fCorrectionZ = fBendingR/(fBendingR-fNChannelx*fDx);} + } + + //test of enter in other channel + if (y<0) + { + fNChannely-=1; + y+=fDy; //enter in other channel + } + else if (y>=fDy) + { + fNChannely+=1; + y-=fDy; //enter in other channel + } + + return G4ThreeVector(x,y,z); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/source/parameterisations/channeling/src/G4ChannelingFastSimInterpolation.cc b/source/parameterisations/channeling/src/G4ChannelingFastSimInterpolation.cc new file mode 100644 index 00000000000..cb898b8b207 --- /dev/null +++ b/source/parameterisations/channeling/src/G4ChannelingFastSimInterpolation.cc @@ -0,0 +1,201 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + +/// \file G4ChannelingFastSimInterpolation.cc +/// \brief Implementation of the G4ChannelingFastSimInterpolation class + +#include "G4ChannelingFastSimInterpolation.hh" +#include "G4SystemOfUnits.hh" + +G4ChannelingFastSimInterpolation::G4ChannelingFastSimInterpolation(G4double dx0, + G4double dy0, + G4int nPointsx0, + G4int nPointsy0, + G4int iModel0) +{ + fDx = dx0; + fDy = dy0; + nPointsx = nPointsx0; + nPointsy = nPointsy0; + fStepi = fDx/nPointsx; + fStepi2= fStepi*fStepi; + iModel = iModel0; + + //resize vectors for interpolation coefficients + if(iModel==1) + { + fAI.resize(nPointsx+1); + fBI.resize(nPointsx+1); + fCI.resize(nPointsx+1); + fDI.resize(nPointsx+1); + } + else if(iModel==2) + { + fStepj = fDy/nPointsy; + fAI3D.resize(nPointsx+1, std::vector(nPointsy+1)); + fBI3D.resize(nPointsx+1, std::vector(nPointsy+1)); + fCI3D.resize(nPointsx+1, std::vector(nPointsy+1)); + fAI3D3.resize(nPointsx+1, std::vector(nPointsy+1)); + fBI3D3.resize(nPointsx+1, std::vector(nPointsy+1)); + fCI3D3.resize(nPointsx+1, std::vector(nPointsy+1)); + + for(G4int i=0; i<=nPointsx; i++) + { + fCI3D[i][nPointsy]=0.; + } + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4double G4ChannelingFastSimInterpolation::GetIF(G4double xx, G4double yy){ + G4double SplineF=0.; + if(iModel==1) + { + SplineF = Spline1D(xx); + } + else if(iModel==2) + { + SplineF = Spline2D(xx, yy); + } + return SplineF; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4ChannelingFastSimInterpolation::SetCoefficients1D(G4double AI0, + G4double BI0, + G4double CI0, + G4double DI0, + G4int i){ + fAI[i] = AI0; + fBI[i] = BI0/cm; + fCI[i] = CI0/cm2; + fDI[i] = DI0/cm3; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4ChannelingFastSimInterpolation::SetCoefficients2D(G4double AI3D0, + G4double BI3D0, + G4double CI3D0, + G4int i, + G4int j, + G4int k){ + if (k==0) + { + fAI3D[i][j] = AI3D0/fStepj/fStepi/6.; + fBI3D[i][j] = BI3D0/fStepj/fStepi/6.; + fCI3D[i][j] = CI3D0/fStepj/fStepi/6./cm2; + } + else if (k==1) + { + fAI3D3[i][j] = AI3D0/fStepj/fStepi/6./cm2; + fBI3D3[i][j] = BI3D0/fStepj/fStepi/6./cm2; + fCI3D3[i][j] = CI3D0/fStepj/fStepi/6./cm2/cm2; + } +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4double G4ChannelingFastSimInterpolation::Spline1D(G4double xx) //cubic spline of + //1-variable function +{ + G4double x1 = xx; + + //if a particle escapes the interpolation area + if (x1<0.) + { + x1 += fDx; + } + else if (x1>=fDx) + { + x1 -= fDx; + } + +// calculation of interpolation function + G4int mmx = std::floor(x1/fStepi); + x1 -= (mmx+1)*fStepi; + G4double Spline3 = fAI[mmx]+x1*(fBI[mmx]+x1*(fCI[mmx]+fDI[mmx]*x1)); + return Spline3; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + + G4double G4ChannelingFastSimInterpolation::Spline2D(G4double xx, G4double yy)//cubic + //spline of 2-variable function + { + G4double x1 = xx; + G4double y1 = yy; + + //if a particle escapes the interpolation area + if (x1<0.) + { + x1 += fDx; + } + else if (x1>=fDx) + { + x1 -= fDx; + } + if (y1<0.) + { + y1 += fDy; + } + else if (y1>=fDy) + { + y1 -= fDy; + } + + // calculation of interpolation function + G4int mmx = std::floor(x1/fStepi); + G4int mmy = std::floor(y1/fStepj); + + G4double tt1 = x1-mmx*fStepi; + G4double tt2 = fStepi-tt1; + G4double tt13 = tt1*tt1*tt1; + G4double tt23 = tt2*tt2*tt2; + + G4double tt1y = y1-mmy*fStepj; + G4double tt2y = fStepj-tt1y; + G4double tt1y3 = tt1y*tt1y*tt1y; + G4double tt2y3 = tt2y*tt2y*tt2y; + + G4double spl3dxx1 = fCI3D3[mmx ][mmy]*tt2y3 + fCI3D3[mmx ][mmy+1]*tt1y3 + + fAI3D3[mmx ][mmy]*tt2y + fBI3D3[mmx ][mmy]*tt1y; + G4double spl3dxx2 = fCI3D3[mmx+1][mmy]*tt2y3 + fCI3D3[mmx+1][mmy+1]*tt1y3 + + fAI3D3[mmx+1][mmy]*tt2y + fBI3D3[mmx+1][mmy]*tt1y; + G4double spl3d1 = fCI3D[ mmx ][mmy]*tt2y3 + fCI3D[mmx ][mmy+1]*tt1y3 + + fAI3D[ mmx ][mmy]*tt2y + fBI3D[mmx ][mmy]*tt1y; + G4double spl3d2 = fCI3D[ mmx+1][mmy]*tt2y3 + fCI3D[mmx+1][mmy+1]*tt1y3 + + fAI3D[ mmx+1][mmy]*tt2y + fBI3D[mmx+1][mmy]*tt1y; + + G4double spl3d = spl3dxx1*tt23 + spl3dxx2*tt13 + + (spl3d1*6.-spl3dxx1*fStepi2)*tt2 + (spl3d2*6.-spl3dxx2*fStepi2)*tt1; + + return spl3d; + } + + diff --git a/source/parameterisations/channeling/src/G4ChannelingFastSimModel.cc b/source/parameterisations/channeling/src/G4ChannelingFastSimModel.cc new file mode 100644 index 00000000000..b06bfa4bb87 --- /dev/null +++ b/source/parameterisations/channeling/src/G4ChannelingFastSimModel.cc @@ -0,0 +1,505 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +/// \file B107FastSim/src/G4ChannelingFastSimModel.cc +/// \brief Implementation of the G4ChannelingFastSimModel class +// +// +// +#include "G4ChannelingFastSimModel.hh" + +#include "Randomize.hh" + +#include "G4TransportationManager.hh" +#include "G4SystemOfUnits.hh" + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4ChannelingFastSimModel::G4ChannelingFastSimModel(const G4String& modelName, G4Region* envelope) +: G4VFastSimulationModel(modelName, envelope) +{ +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4ChannelingFastSimModel::G4ChannelingFastSimModel(const G4String& modelName) +: G4VFastSimulationModel(modelName) +{ + +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4ChannelingFastSimModel::~G4ChannelingFastSimModel() +{ +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4bool G4ChannelingFastSimModel::IsApplicable(const G4ParticleDefinition& particleType) +{ + return std::abs(particleType.GetPDGCharge())>DBL_EPSILON; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +G4bool G4ChannelingFastSimModel::ModelTrigger(const G4FastTrack& fastTrack) +{ + //default output + G4bool modelTrigger = false; + + G4int particleDefinitionID = + fastTrack.GetPrimaryTrack()->GetParticleDefinition()->GetParticleDefinitionID(); + //kinetic energy + G4double ekinetic = fastTrack.GetPrimaryTrack()->GetKineticEnergy(); + + //energy cut, at the beginning, to not check everything else + if(ekinetic > GetLowKineticEnergyLimit(particleDefinitionID)) + { + //current logical volume + G4LogicalVolume* crystallogic = fastTrack.GetEnvelopeLogicalVolume(); + fCrystalData->SetGeometryParameters(crystallogic); + + G4ThreeVector momentumDirection = fastTrack.GetPrimaryTrackLocalDirection(); + // the particle angle vs crystal plane or axis + G4double angle = std::atan(momentumDirection.x()/momentumDirection.z()); + //recalculate angle into the lattice reference system + angle = fCrystalData-> + AngleXFromBoxToLattice(angle, + (fCrystalData->CoordinatesFromBoxToLattice( + fastTrack.GetPrimaryTrackLocalPosition())).z()); + if (fCrystalData->GetModel()==2) + { + angle = std::sqrt(angle*angle+ + std::pow(std::atan(momentumDirection.y()/ + momentumDirection.z()),2)); + } + + //particle mass + G4double mass = fastTrack.GetPrimaryTrack()->GetParticleDefinition()->GetPDGMass(); + //particle total energy + G4double etotal = fastTrack.GetPrimaryTrack()->GetTotalEnergy(); + + //Particle position + G4ThreeVector xyz0 = fastTrack.GetPrimaryTrackLocalPosition(); + //Step estimate + G4double dz0 = fCrystalData->GetMaxSimulationStep(etotal,mass); + xyz0 += 2*dz0*momentumDirection;//overestimated particle shift on the next step + //in channeling + + //Applies the parameterisation not at the last step, only forward local direction + //above low energy limit and below angular limit + + modelTrigger = (crystallogic->GetSolid()-> + Inside(xyz0)==kInside) && + momentumDirection.z()>0. && + std::abs(angle) < GetLindhardAngleNumberHighLimit(particleDefinitionID) * + fCrystalData->GetLindhardAngle(etotal,mass); + } + + return modelTrigger; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4ChannelingFastSimModel::DoIt(const G4FastTrack& fastTrack, + G4FastStep& fastStep) +{ + G4double etotal;//particle total energy + G4double etotalPreStep;//etotal at the previous step + G4double etotalToSetParticleProperties;//etotal value at which + //SetParticleProperties is called + G4double mass; //particle mass + G4double charge;//particle charge + G4double tGlobal; //global time + G4double tGlobalPreStep; //global time at the previous step + G4ThreeVector xyz0;// the coordinates in the local reference system of the volume + G4ThreeVector xyz0PreStep;// xyz at the previous step + G4ThreeVector xyz;// the coordinates in the co-rotating reference system within + //a channel (elementary periodic cell) + G4double x,y,z; // the coordinates in the co-rotating reference system within + //a channel (elementary periodic cell) + G4double tx0,ty0; // the angles in the local reference system of the volume + G4double tx,ty; // the angles in the co-rotating reference system within + //a channel (elementary periodic cell) + G4double txPreStep,tyPreStep;// tx,ty at the previous step + G4ThreeVector momentumDirection; + G4ThreeVector scatteringAnglesAndEnergyLoss;//output of scattering functions + G4double lindhardAngleNumberHighLimit0; //current high limit of the angle expressed in + //[Lindhard angle] units + + //coordinates in Runge-Kutta calculations + G4double x1=0.,x2=0.,x3=0.,x4=0.,y1=0.,y2=0.,y3=0.,y4=0.; + //angles in Runge-Kutta calculations + G4double tx1=0.,tx2=0.,tx3=0.,tx4=0.,ty1=0.,ty2=0.,ty3=0.,ty4=0.; + //variables in Runge-Kutta calculations + G4double kvx1=0.,kvx2=0.,kvx3=0.,kvx4=0.,kvy1=0.,kvy2=0.,kvy3=0.,kvy4=0.; + //simulation step along z (internal step of the model) and its parts + G4double dz,dzd3,dzd8;//dzd3 = dz/3; dzd8 = dz/8; + //simulation step along the momentum direction + G4double momentumDirectionStep; + //effective simulation step (taking into account nuclear density along the trajectory) + G4double effectiveStep; + + // flag, if Inside(xyz0) switches to kInside + G4bool inside = false; + + G4LogicalVolume* crystallogic = fastTrack.GetEnvelopeLogicalVolume(); + fCrystalData->SetGeometryParameters(crystallogic); + + //set the max number of secondaries (photons) that can be added at this fastStep + if (fRad) + { + fastStep.SetNumberOfSecondaryTracks(fMaxPhotonsProducedPerStep); + //reseting the BaierKatkov integral to start it with the new trajectory + fBaierKatkov->ResetRadIntegral();//to avoid any memory from the previous trajectory + } + + etotal = fastTrack.GetPrimaryTrack()->GetTotalEnergy(); + mass = fastTrack.GetPrimaryTrack()->GetParticleDefinition()->GetPDGMass(); + charge = fastTrack.GetPrimaryTrack()->GetParticleDefinition()->GetPDGCharge(); + + // we need to distunguish only charge particles, either leptons or hadrons + G4bool hadron = + fastTrack.GetPrimaryTrack()->GetParticleDefinition()->GetLeptonNumber()==0; + + lindhardAngleNumberHighLimit0 = + GetLindhardAngleNumberHighLimit(fastTrack.GetPrimaryTrack()-> + GetParticleDefinition()->GetParticleDefinitionID()); + + //set fCrystalData parameters depending on the particle parameters + fCrystalData->SetParticleProperties(etotal, mass, charge, hadron); + + //global time + tGlobal = fastTrack.GetPrimaryTrack()->GetGlobalTime(); + + //coordinates in the co-rotating reference system within a channel + xyz0= fastTrack.GetPrimaryTrackLocalPosition(); + xyz = fCrystalData->CoordinatesFromBoxToLattice(xyz0); + x=xyz.x(); + y=xyz.y(); + z=xyz.z(); + + momentumDirection=fastTrack.GetPrimaryTrackLocalDirection(); + //angle in the co-rotating reference system within a channel + //(!!! ONLY FORWARD DIRECTION, momentumDirection.getZ()>0, + //valid for high energies defined by the standard energy cuts) + tx0 = std::atan(momentumDirection.x()/momentumDirection.z()); + ty0 = std::atan(momentumDirection.y()/momentumDirection.z()); + + //angles in the co-rotating reference system within a channel + tx = fCrystalData->AngleXFromBoxToLattice(tx0,z); + ty = ty0; + + etotalToSetParticleProperties = etotal*0.999; + G4bool inCrystal=true;//flag necessary to escape the cycle (at inCrystal=0;) + //do calculations until the particle is inside the volume + do + { + //remember the global time before the next step dz + tGlobalPreStep=tGlobal; + //remember the coordinates before the next step dz + xyz0PreStep = xyz0; + //remember the angles and the total energy before the step dz + txPreStep = tx; + tyPreStep = ty; + etotalPreStep = etotal; + + dz = fCrystalData->GetSimulationStep(tx,ty); + dzd3=dz/3; + dzd8=dz/8; + + //trajectory calculation: + //Runge-Cutt "3/8" + //fCrystalData->GetCurv()*fCrystalData->GetCorrectionZ() is due to dependence of + //the radius on x; GetCurv gets 1/R for the central ("central plane/axis") + + //first step + kvx1=fCrystalData->Ex(x,y); + x1=x+tx*dzd3; + tx1=tx+(kvx1-fCrystalData->GetCurv()*fCrystalData->GetCorrectionZ())*dzd3; + if (fCrystalData->GetModel()==2) + { + kvy1=fCrystalData->Ey(x,y); + y1=y+ty*dzd3; + ty1=ty+kvy1*dzd3; + } + + //second step + kvx2=fCrystalData->Ex(x1,y1); + x2=x-tx*dzd3+tx1*dz; + tx2=tx-(kvx1-fCrystalData->GetCurv()*fCrystalData->GetCorrectionZ())*dzd3+ + (kvx2-fCrystalData->GetCurv()*fCrystalData->GetCorrectionZ())*dz; + if (fCrystalData->GetModel()==2) + { + kvy2=fCrystalData->Ey(x1,y1); + y2=y-ty*dzd3+ty1*dz; + ty2=ty-kvy1*dzd3+kvy2*dz; + } + + //third step + kvx3=fCrystalData->Ex(x2,y2); + x3=x+(tx-tx1+tx2)*dz; + tx3=tx+(kvx1-kvx2+kvx3-fCrystalData->GetCurv()*fCrystalData->GetCorrectionZ())*dz; + if (fCrystalData->GetModel()==2) + { + kvy3=fCrystalData->Ey(x2,y2); + y3=y+(ty-ty1+ty2)*dz; + ty3=ty+(kvy1-kvy2+kvy3)*dz; + } + + //fourth step + kvx4=fCrystalData->Ex(x3,y3); + x4=x+(tx+3.*tx1+3.*tx2+tx3)*dzd8; + tx4=tx+(kvx1+3.*kvx2+3.*kvx3+kvx4)*dzd8- + fCrystalData->GetCurv()*fCrystalData->GetCorrectionZ()*dz; + if (fCrystalData->GetModel()==2) + { + kvy4=fCrystalData->Ey(x3,y3); + y4=y+(ty+3.*ty1+3.*ty2+ty3)*dzd8; + ty4=ty+(kvy1+3.*kvy2+3.*kvy3+kvy4)*dzd8; + } + else + { + y4 =y+ty*dz; + ty4=ty; + } + + x=x4; + tx=tx4; + y=y4; + ty=ty4; + + z+=dz*fCrystalData->GetCorrectionZ();//motion along the z coordinate + //("central plane/axis", no current plane/axis) + + xyz = fCrystalData->ChannelChange(x,y,z); + x=xyz.x(); + y=xyz.y(); + z=xyz.z(); + + //the coordinates in the local reference system of the volume + //this vector will be used in the cycle escape condition and + //in the radiation model (if activated) + xyz0=fCrystalData->CoordinatesFromLatticeToBox(xyz); + + momentumDirectionStep= + dz*std::sqrt(1+std::pow(std::tan(tx),2)+std::pow(std::tan(ty),2)); + tGlobal+=momentumDirectionStep/(fCrystalData->GetBeta())/CLHEP::c_light; + + //default scattering and energy loss 0 + scatteringAnglesAndEnergyLoss = G4ThreeVector(0.,0.,0.); + + //calculate separately for each element of the crystal + for (G4int i = 0; i < fCrystalData->GetNelements(); i++) + { + //effective step taking into account nuclear density along the trajectory + effectiveStep = momentumDirectionStep*fCrystalData->NuclearDensity(x,y,i); + //Coulomb scattering on screened atomic potential (both multiple and single) + scatteringAnglesAndEnergyLoss += fCrystalData-> + CoulombAtomicScattering(effectiveStep,momentumDirectionStep,i); + + //Amorphous part of ionization energy losses + etotal-=fCrystalData->IonizationLosses(momentumDirectionStep, i); + } + //electron scattering and coherent part of ionization energy losses + scatteringAnglesAndEnergyLoss += fCrystalData->CoulombElectronScattering( + fCrystalData->MinIonizationEnergy(x,y), + fCrystalData->ElectronDensity(x,y), + momentumDirectionStep); + tx += scatteringAnglesAndEnergyLoss.x(); + ty += scatteringAnglesAndEnergyLoss.y(); + etotal -= scatteringAnglesAndEnergyLoss.z(); + + // recalculate the energy depended parameters + //(only if the energy decreased enough, not at each step) + if (etotalToSetParticleProperties>etotal) + { + fCrystalData->SetParticleProperties(etotal, mass, charge, hadron); + etotalToSetParticleProperties = etotal*0.999; + } + + //chain of conditions to escape the cycle + // if Inside(xyz0)==kInside has been already true + //(a particle has been inside the crystal) + if (inside) + { + // if low energy + if (etotal-mass<=GetLowKineticEnergyLimit(fastTrack.GetPrimaryTrack()-> + GetParticleDefinition()-> + GetParticleDefinitionID())) + {inCrystal = false;}//escape the cycle + //check if the angle w.r.t. the axes or planes is too high => + //return to standard Geant4: + else if (fCrystalData->GetModel()==1) //1D model, field of planes + { + //if the angle w.r.t. the planes is too high + if (std::abs(tx) >= + lindhardAngleNumberHighLimit0*fCrystalData->GetLindhardAngle()) + {inCrystal = false;}//escape the cycle + } + else if (fCrystalData->GetModel()==2) //2D model, field of axes + { + //if the angle w.r.t. the axes is too high + if (std::sqrt(tx*tx+ty*ty) >= lindhardAngleNumberHighLimit0* + fCrystalData->GetLindhardAngle()) + {inCrystal = false;}//escape the cycle + } + + //radiation production & radiation energy losses + //works only if the radiation model is activated + if (fRad) + { + //back to the local reference system of the volume + tx0 = fCrystalData->AngleXFromLatticeToBox(tx,z); + ty0 = ty; + //xyz0 was calculated above + + //running the radiation model and checking if a photon has been emitted + if(fBaierKatkov->DoRadiation(etotal,mass, + tx0,ty0, + scatteringAnglesAndEnergyLoss.x(), + scatteringAnglesAndEnergyLoss.y(), + momentumDirectionStep,tGlobal,xyz0, + crystallogic-> + GetSolid()-> + Inside(xyz0)!=kInside&&inCrystal)) + // also it was checked if the particle is escaping the volume + // calculate the radiation integral immidiately in this case + { + //a photon has been emitted! + //shift the particle back into the radiation point + etotal = fBaierKatkov->GetParticleNewTotalEnergy(); + tx0 = fBaierKatkov->GetParticleNewAngleX(); + ty0 = fBaierKatkov->GetParticleNewAngleY(); + tGlobal = fBaierKatkov->GetNewGlobalTime(); + xyz0 = fBaierKatkov->GetParticleNewCoordinateXYZ(); + + //add secondary photon + fBaierKatkov->GeneratePhoton(fastStep); + + //particle energy was changed + fCrystalData->SetParticleProperties(etotal, mass, charge, hadron); + + //coordinates in the co-rotating reference system within a channel + xyz = fCrystalData->CoordinatesFromBoxToLattice(xyz0); + x=xyz.x(); + y=xyz.y(); + z=xyz.z(); + + //angles in the co-rotating reference system within a channel + tx = fCrystalData->AngleXFromBoxToLattice(tx0,z); + ty = ty0; + } + } + + //precise check if the particle is escaping the volume + if (crystallogic->GetSolid()-> + Inside(xyz0)!=kInside) + { + //one step back to remain inside the volume + //after the escape of the volume + tGlobal = tGlobalPreStep; + xyz0 = xyz0PreStep; + tx = txPreStep; + ty = tyPreStep; + etotal = etotalPreStep; + z-=dz*fCrystalData->GetCorrectionZ(); + // change the flag => this particle will not enter + // the model before escape this volume + + inCrystal = false; //escape the cycle + } + } + else + { + // if Inside(xyz0)==kInside we can enable checking of particle escape + if (crystallogic->GetSolid()-> + Inside(xyz0)==kInside) + {inside = true;} + // a very rare case, if a particle remains + // on the boundary and escapes the crystal + else if (crystallogic->GetSolid()-> + Inside(xyz0)==kOutside) + {inCrystal = false;}//escape the cycle + } + } + while (inCrystal); + + //the angles in the local reference system of the volume + tx0 = fCrystalData->AngleXFromLatticeToBox(tx,z); + ty0 = ty; + + //set global time + fastStep.ProposePrimaryTrackFinalTime(tGlobal); + //set final position + fastStep.ProposePrimaryTrackFinalPosition(xyz0); + //set final kinetic energy + fastStep.ProposePrimaryTrackFinalKineticEnergy(etotal- + fastTrack.GetPrimaryTrack()-> + GetParticleDefinition()->GetPDGMass()); + //set final momentum direction + G4double momentumDirectionZ = + 1./std::sqrt(1.+std::pow(std::tan(tx0),2)+std::pow(std::tan(ty0),2)); + fastStep.ProposePrimaryTrackFinalMomentumDirection( + G4ThreeVector(momentumDirectionZ*std::tan(tx0), + momentumDirectionZ*std::tan(ty0), + momentumDirectionZ)); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4ChannelingFastSimModel::Input(const G4Material *crystal, const G4String &lattice) +{ + //initializing the class with containing all + //the crystal material and crystal lattice data and + //Channeling scattering and ionization processes + fCrystalData = new G4ChannelingFastSimCrystalData(); + //setting all the crystal material and lattice data + fCrystalData->SetMaterialProperties(crystal,lattice); + + //setting default low energy cuts for kinetic energy + SetLowKineticEnergyLimit(1*GeV,"proton"); + SetLowKineticEnergyLimit(1*GeV,"anti_proton"); + SetLowKineticEnergyLimit(200*MeV,"e-"); + SetLowKineticEnergyLimit(200*MeV,"e+"); + + //set the model high limit of the angle expressed in [Lindhard angle] units + SetLindhardAngleNumberHighLimit(100.,"proton"); + SetLindhardAngleNumberHighLimit(100.,"anti_proton"); + SetLindhardAngleNumberHighLimit(100.,"e-"); + SetLindhardAngleNumberHighLimit(100.,"e+"); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4ChannelingFastSimModel::RadiationModelActivate() +{ + fRad = true; + //activate the Baier-Katkov radiation model + fBaierKatkov = new G4BaierKatkov(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/parameterisations/channeling/src/G4VChannelingFastSimCrystalData.cc b/source/parameterisations/channeling/src/G4VChannelingFastSimCrystalData.cc new file mode 100644 index 00000000000..b08875411b0 --- /dev/null +++ b/source/parameterisations/channeling/src/G4VChannelingFastSimCrystalData.cc @@ -0,0 +1,485 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// + +#include "G4VChannelingFastSimCrystalData.hh" +#include "G4SystemOfUnits.hh" +#include "G4PhysicalConstants.hh" + +G4VChannelingFastSimCrystalData::G4VChannelingFastSimCrystalData() +{ + +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4VChannelingFastSimCrystalData::~G4VChannelingFastSimCrystalData(){;} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4VChannelingFastSimCrystalData::SetGeometryParameters + (const G4LogicalVolume *crystallogic) +{ + G4int crystalID = crystallogic->GetInstanceID(); + + //set bending angle if the volume exists in the list, otherwise default = 0 + (fMapBendingAngle.count(crystalID) > 0) + ? SetBendingAngle(fMapBendingAngle[crystalID],crystallogic) + : SetBendingAngle(0.,crystallogic); + + //set miscut angle if the volume exists in the list, otherwise default = 0 + (fMapMiscutAngle.count(crystalID) > 0) + ? SetMiscutAngle(fMapMiscutAngle[crystalID],crystallogic) + : SetMiscutAngle(0.,crystallogic); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4VChannelingFastSimCrystalData::SetBendingAngle(G4double tetab, + const G4LogicalVolume* crystallogic) +{ + G4int crystalID = crystallogic->GetInstanceID(); + + //set the bending angle for this logical volume + fMapBendingAngle[crystalID]=tetab; + + G4ThreeVector limboxmin;//minimal limits of the box bounding the logical volume + G4ThreeVector limboxmax;//maximal limits of the box bounding the logical volume + //save the limits of the box bounding the logical volume + crystallogic->GetSolid()->BoundingLimits(limboxmin,limboxmax); + + //bounding box half dimensions + fHalfDimBoundingBox = (limboxmax-limboxmin)/2.; + + G4double lcr = limboxmax.getZ()-limboxmin.getZ();//crystal thickness + + fBendingAngle=std::abs(tetab); + if (fBendingAngle<0.000001)//no bending less then 1 urad + { + fBent=0; + fBendingAngle=0.; + fBendingR=0.;//just for convenience (infinity in reality) + fBending2R=0.; + fBendingRsquare=0.; + fCurv=0.; + + G4cout << "Channeling model: volume " << crystallogic->GetName() << G4endl; + G4cout << "Warning: bending angle is lower than 1 urad => set to 0" << G4endl; + } + else + { + fBent=1; + fBendingR=lcr/fBendingAngle; + fBending2R=2.*fBendingR; + fBendingRsquare=fBendingR*fBendingR; + fCurv=1./fBendingR; + + if (tetab<0.) + { + G4cout << "Channeling model: volume " << crystallogic->GetName() << G4endl; + G4cout << "Warning: bending angle is negative => set to be positive" << G4endl; + } + } + +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4VChannelingFastSimCrystalData::SetMiscutAngle(G4double tetam, + const G4LogicalVolume *crystallogic) +{ + G4int crystalID = crystallogic->GetInstanceID(); + + //set the bending angle for this logical volume + fMapMiscutAngle[crystalID]=tetam; + + // fMiscutAngle>0: rotation of xz coordinate planes clockwise in the xz plane + fMiscutAngle=tetam; + if (std::abs(tetam)>1.*mrad) + { + G4cout << "Channeling model: volume " << crystallogic->GetName() << G4endl; + G4cout << "Warning: miscut angle is higher than 1 mrad => " << G4endl; + G4cout << "coordinate transformation routines may be unstable" << G4endl; + } + fCosMiscutAngle=std::cos(fMiscutAngle); + fSinMiscutAngle=std::sin(fMiscutAngle); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4VChannelingFastSimCrystalData::SetParticleProperties(G4double etotal, + G4double mass, + G4double charge, + G4bool ifhadron) +{ + G4double teta1; + fZ2=charge; + G4double zz22=fZ2*fZ2; + fHadron=ifhadron; + +// particle momentum and energy + G4double t=etotal*etotal-mass*mass; // economy of operations + fPz=std::sqrt(t); // momentum of particle + fPV=t/etotal; // pv + fBeta=fPz/etotal; // velocity/c + fTetaL = std::sqrt(fVmax2/fPV); //Lindhard angle + fChannelingStep = fChangeStep/fTetaL; //standard simulation step + +// Energy losses + fV2 = fBeta*fBeta; // particle (velocity/c)^2 + fGamma = etotal/mass; // Lorentz factor + fMe2Gamma = 2*CLHEP::electron_mass_c2*fGamma; +// max ionization losses + fTmax = fMe2Gamma*fGamma*fV2/ + (CLHEP::electron_mass_c2/mass*CLHEP::electron_mass_c2/mass + + 1. + fMe2Gamma/mass); + + for(G4int i=0; ino scattering + fPzu11[i]=fPu11[i]*fPz*fPz; + + teta1=teta1/fPz; // + fTeta12[i]=teta1*teta1; +// maximal scattering angle by coulomb scattering on nuclei +// defining by nucleus radius +// tetamax=hc/(fPz*1.D-6*fR0*fAN**(1.D0/3.D0))// {Mev*fermi/(MeV*fermi)} + G4double tetamax=fTetamax0[i]/fPz; + fTetamax2[i]=tetamax*tetamax; + fTetamax12[i]=fTeta12[i]+fTetamax2[i]; + +// a cofficient in a formula for scattering (for high speed of simulation) +// fK2=(fZ2*alpha*hdc)**2*4.*pi*fN0*(fZ1/fPV)**2 +// fK3=(fZ2*alpha*hdc)**2*4.*pi*fN0/(fPV)**2 + fK2[i]=fK20[i]*zz22/fPV/fPV; + } + +// nuclear diffractive scattering angle + //tetaQEL=1./sqrt(2.*(9.26-4.94/sqrt(fPz/GeV)+0.28*log(fPz/GeV))); + + fK3=fK30/fV2; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4double G4VChannelingFastSimCrystalData::GetLindhardAngle(G4double etotal, G4double mass) +{ + G4double pv0 = etotal-mass*mass/etotal; + return std::sqrt(2*fVmax/pv0); //Calculate the value of the Lindhard angle + //(!!! the value for a straight crystal) +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4double G4VChannelingFastSimCrystalData::GetLindhardAngle() +{ + return fTetaL; //return the Lindhard angle value calculated in SetParticleProperties +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4double G4VChannelingFastSimCrystalData::GetSimulationStep(G4double tx,G4double ty) +{ + G4double simulationstep; + //find angle of particle w.r.t. the plane or axis + G4double angle=0.; + if (iModel==1)//1D model + { + angle = std::abs(tx); + } + else if (iModel==2)//2D model + { + angle = std::sqrt(tx*tx+ty*ty); + } + + //compare this angle with the Lindhard angle + if (angle minimal possible angle of a single scattering is equal to teta1 + if (teta122<=fTeta12[ielement]*1.000125) + { + teta22=0.; + teta122=fTeta12[ielement]; + } + else + { + teta22=teta122-fTeta12[ielement]; + G4double aa=teta22/fTeta12[ielement]; + G4double aa1=1.+aa; + +// crystal, with scattering suppression + G4double tetamsi=e1*(std::log(aa1)+ + (1.-std::exp(-aa*fBB[ielement]))/aa1+ + fBBDEXP[ielement]* + (expint(fBB[ielement]*aa1)-fE1XBbb[ielement])); + +// sumilation of multiple coulomb scattering by nuclei and electrons +// for high speed of a program, real formula is +// 4*pi*fN0*wpl(x)*dz*(fZ1*zz2*alpha*hdc/fPV)**2* +// *(ln(1+a)+(1-exp(-a*b))/(1+a)+(1+b)*exp(b)*(E1XB(b*(1+a))-E1XB(b))) + + ksi=G4UniformRand(); + t=std::sqrt(-tetamsi*std::log(ksi)); + + ksi=G4UniformRand(); + + tx+=t*std::cos(CLHEP::twopi*ksi); + ty+=t*std::sin(CLHEP::twopi*ksi); + + } +// simulation of single coulomb scattering by nuclei (with screened potential) + G4double zss=0.; + G4double dzss=step; + +// (calculation of a distance, at which another single scattering can happen) + ksi=G4UniformRand(); + + zss=-std::log(ksi)*step/(e1*(1./teta122-1./fTetamax12[ielement])); + G4double tt; + +// At some step several single scattering can occur. +// So,if the distance of the next scattering is less than the step, +// another scattering can occur. If the distance of the next scattering +// is less than the difference between the step and the distance of +// the previous scattering, another scattering can occur. And so on, and so on. +// In the cycle we simulate each of them. The cycle is finished, when +// the remaining part of step is less than a distance of the next single scattering. +//******************************************** +// if at a step a single scattering occurs + while (zssDBL_EPSILON)) + { + +// (calculation of a distance, at which another single scattering can happen) +// simulation of scattering length (by the same way single scattering by nucleus + ksi=G4UniformRand(); + + zss=-1.0*std::log(ksi)/(fK3*electronDensity)/(1./eMinIonization-1./fTmax); + +//******************************************** +// if at a step a single scattering occur + while (zss=1; K--) + { + T0=K/(1.0+K/(X+T0)); + } + + T=1.0/(X+T0); + E1=std::exp(-X)*T; +} + +return E1; +} diff --git a/source/parameterisations/gflash/GNUmakefile b/source/parameterisations/gflash/GNUmakefile deleted file mode 100644 index 9f40cc841f3..00000000000 --- a/source/parameterisations/gflash/GNUmakefile +++ /dev/null @@ -1,42 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for gflash sub-library. HP, 26/10/04. -# -------------------------------------------------------------------- - -name := G4gflash - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/graphics_reps/include \ - -I$(G4BASE)/digits_hits/detector/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/processes/parameterisation/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/electromagnetic/muons/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - -CXXFLAGS_WITHOUT_O := $(filter-out -O% , $(CXXFLAGS)) -CXXFLAGS_WITHOUT_O := $(filter-out +O% , $(CXXFLAGS_WITHOUT_O)) - diff --git a/source/particles/GNUmakefile b/source/particles/GNUmakefile deleted file mode 100644 index 8b4491cfc39..00000000000 --- a/source/particles/GNUmakefile +++ /dev/null @@ -1,21 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for particles library. Gabriele Cosmo, 4/4/97. -# -------------------------------------------------------------- - -name := G4particles - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -GLOBLIBS = libG4geometry.lib libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -SUBDIRS = management bosons leptons shortlived -SUBDIRS += hadrons/mesons hadrons/barions hadrons/ions -SUBDIRS += adjoint utils -SUBLIBS = G4partman G4bosons G4leptons G4shortlived -SUBLIBS += G4mesons G4baryons G4ions -SUBLIBS += G4partadj G4partutils - -include $(G4INSTALL)/config/globlib.gmk diff --git a/source/particles/History b/source/particles/History index 2dd5e7774ea..6e5dc1d8844 100644 --- a/source/particles/History +++ b/source/particles/History @@ -6,7 +6,22 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-02-23 Alberto Ribon (particles-V11-00-18) +## 2023-06-13 Ben Morgan (particles-V11-01-06) +- Apply core/recommended clang-tidy fixes + +## 2023-06-10 Vladimir Ivanchenko (particles-V11-01-05) +- G4IonTable - attempt to fix non-reproducibility for HP physics and isometers + with floating levels + +## 2023-05-25 Vladimir Ivanchenko (particles-V11-01-04) +- G4IonTable - fix GetIon(..) method for the case if the ground state level + of an isomere is floating (Geant4 Forum thread 10448); removed some + duplications in FindIon and GetIon methods - only two methods of each kind + have full implementation, others redirect calls +- G4NuclideTable - take into account floating ground state levels +- G4Ion - added protection against unphysical index of floating level + +## 2023-02-23 Alberto Ribon (particles-V11-01-03) - G4XicZero, G4AntiXicZero : updated mean lifetime values according to the PDG-2022. - Note: the particles' properties in Geant4 are currently consistent with @@ -15,15 +30,18 @@ It must **not** be used as a substitute for writing good git commit messages! Xi_c0 and Omega_c0. For this reason, only the latter two have been updated, while the rest will be updated in the near future. -## 2023-02-07 Sandro Wenzel (particles-V11-00-17) +## 2023-02-07 Sandro Wenzel (particles-V11-01-02) - G4OmegacZero, G4AntiOmegacZero : fixed mean lifetime according to the PDG. Thanks to Francesco Mazzaschi of ALICE for reporting it. -## 2023-01-11 Alberto Ribon (particles-V11-00-16) +## 2023-01-11 Alberto Ribon (particles-V11-01-01) - G4AntiNeutron : set the "PDG stable" flag to "false", as for G4Neutron (this has no practical consequences, i.e. anti_neutron decays regardless of this flag, but it is confusing). +## 2022-12-12 Ben Morgan (particles-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-11-18 Gabriele Cosmo (particles-V11-00-15) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1 in G4IonTable. diff --git a/source/particles/adjoint/GNUmakefile b/source/particles/adjoint/GNUmakefile deleted file mode 100644 index 86add005b28..00000000000 --- a/source/particles/adjoint/GNUmakefile +++ /dev/null @@ -1,21 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for adjoint library. Hisaya Kurashige, 06/11/08. -# -------------------------------------------------------------- - -name := G4partadj - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4PARTICLES_ALLOC_EXPORT -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/particles/management/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/particles/adjoint/include/G4AdjointAlpha.hh b/source/particles/adjoint/include/G4AdjointAlpha.hh index 2bb247b911d..629abf5f15c 100644 --- a/source/particles/adjoint/include/G4AdjointAlpha.hh +++ b/source/particles/adjoint/include/G4AdjointAlpha.hh @@ -54,7 +54,7 @@ class G4AdjointAlpha : public G4AdjointIons private: static G4AdjointAlpha* theInstance; G4AdjointAlpha(){} - ~G4AdjointAlpha(){} + ~G4AdjointAlpha() override= default; public: static G4AdjointAlpha* Definition(); diff --git a/source/particles/adjoint/include/G4AdjointDeuteron.hh b/source/particles/adjoint/include/G4AdjointDeuteron.hh index 61012dd768e..94f5ce6dd55 100644 --- a/source/particles/adjoint/include/G4AdjointDeuteron.hh +++ b/source/particles/adjoint/include/G4AdjointDeuteron.hh @@ -54,7 +54,7 @@ class G4AdjointDeuteron : public G4AdjointIons private: static G4AdjointDeuteron* theInstance; G4AdjointDeuteron(){} - ~G4AdjointDeuteron(){} + ~G4AdjointDeuteron() override= default; public: static G4AdjointDeuteron* Definition(); diff --git a/source/particles/adjoint/include/G4AdjointElectron.hh b/source/particles/adjoint/include/G4AdjointElectron.hh index 11b706d62ad..975f030297f 100644 --- a/source/particles/adjoint/include/G4AdjointElectron.hh +++ b/source/particles/adjoint/include/G4AdjointElectron.hh @@ -55,7 +55,7 @@ class G4AdjointElectron : public G4ParticleDefinition private: static G4AdjointElectron* theInstance; G4AdjointElectron(){} - ~G4AdjointElectron(){} + ~G4AdjointElectron() override= default; public: static G4AdjointElectron* Definition(); diff --git a/source/particles/adjoint/include/G4AdjointElectronFI.hh b/source/particles/adjoint/include/G4AdjointElectronFI.hh index 4a09cc8affb..0eb0b349cbd 100644 --- a/source/particles/adjoint/include/G4AdjointElectronFI.hh +++ b/source/particles/adjoint/include/G4AdjointElectronFI.hh @@ -55,7 +55,7 @@ class G4AdjointElectronFI : public G4ParticleDefinition private: static G4AdjointElectronFI* theInstance; G4AdjointElectronFI(){} - ~G4AdjointElectronFI(){} + ~G4AdjointElectronFI() override= default; public: static G4AdjointElectronFI* Definition(); diff --git a/source/particles/adjoint/include/G4AdjointGamma.hh b/source/particles/adjoint/include/G4AdjointGamma.hh index 84b64fb33e9..d0e659c2ba7 100644 --- a/source/particles/adjoint/include/G4AdjointGamma.hh +++ b/source/particles/adjoint/include/G4AdjointGamma.hh @@ -60,7 +60,7 @@ class G4AdjointGamma : public G4ParticleDefinition G4AdjointGamma(){} public: - ~G4AdjointGamma(){} + ~G4AdjointGamma() override= default; static G4AdjointGamma* Definition(); static G4AdjointGamma* AdjointGammaDefinition(); diff --git a/source/particles/adjoint/include/G4AdjointGenericIon.hh b/source/particles/adjoint/include/G4AdjointGenericIon.hh index 427e6b7c87c..54da7791bb6 100644 --- a/source/particles/adjoint/include/G4AdjointGenericIon.hh +++ b/source/particles/adjoint/include/G4AdjointGenericIon.hh @@ -55,7 +55,7 @@ class G4AdjointGenericIon : public G4AdjointIons private: static G4AdjointGenericIon* theInstance; G4AdjointGenericIon(){} - ~G4AdjointGenericIon(){} + ~G4AdjointGenericIon() override= default; public: static G4AdjointGenericIon* Definition(); diff --git a/source/particles/adjoint/include/G4AdjointHe3.hh b/source/particles/adjoint/include/G4AdjointHe3.hh index cc59561d0ec..1c392663299 100644 --- a/source/particles/adjoint/include/G4AdjointHe3.hh +++ b/source/particles/adjoint/include/G4AdjointHe3.hh @@ -54,7 +54,7 @@ class G4AdjointHe3 : public G4AdjointIons private: static G4AdjointHe3* theInstance; G4AdjointHe3(){} - ~G4AdjointHe3(){} + ~G4AdjointHe3() override= default; public: static G4AdjointHe3* Definition(); diff --git a/source/particles/adjoint/include/G4AdjointIons.hh b/source/particles/adjoint/include/G4AdjointIons.hh index f84ddd15d46..3d3bc6d3e16 100644 --- a/source/particles/adjoint/include/G4AdjointIons.hh +++ b/source/particles/adjoint/include/G4AdjointIons.hh @@ -60,7 +60,7 @@ class G4AdjointIons : public G4ParticleDefinition // the normal particle properties. protected: - G4AdjointIons(){}; + G4AdjointIons() = default; public: //With Description @@ -80,7 +80,7 @@ class G4AdjointIons : public G4ParticleDefinition ); public: - virtual ~G4AdjointIons(); + ~G4AdjointIons() override = default; G4AdjointIons* IonsDefinition(); G4AdjointIons* Ions(); diff --git a/source/particles/adjoint/include/G4AdjointPositron.hh b/source/particles/adjoint/include/G4AdjointPositron.hh index 9084b47c7b3..b4a4f812c20 100644 --- a/source/particles/adjoint/include/G4AdjointPositron.hh +++ b/source/particles/adjoint/include/G4AdjointPositron.hh @@ -55,7 +55,7 @@ class G4AdjointPositron : public G4ParticleDefinition private: static G4AdjointPositron* theInstance; G4AdjointPositron(){} - ~G4AdjointPositron(){} + ~G4AdjointPositron() override= default; public: static G4AdjointPositron* Definition(); diff --git a/source/particles/adjoint/include/G4AdjointProton.hh b/source/particles/adjoint/include/G4AdjointProton.hh index 384e98f50d7..b3934d574d8 100644 --- a/source/particles/adjoint/include/G4AdjointProton.hh +++ b/source/particles/adjoint/include/G4AdjointProton.hh @@ -55,7 +55,7 @@ class G4AdjointProton : public G4ParticleDefinition private: static G4AdjointProton* theInstance; G4AdjointProton(){} - ~G4AdjointProton(){} + ~G4AdjointProton() override= default; public: static G4AdjointProton* Definition(); diff --git a/source/particles/adjoint/include/G4AdjointTriton.hh b/source/particles/adjoint/include/G4AdjointTriton.hh index 28171d6e215..e36f76376cb 100644 --- a/source/particles/adjoint/include/G4AdjointTriton.hh +++ b/source/particles/adjoint/include/G4AdjointTriton.hh @@ -54,7 +54,7 @@ class G4AdjointTriton : public G4AdjointIons private: static G4AdjointTriton* theInstance; G4AdjointTriton(){} - ~G4AdjointTriton(){} + ~G4AdjointTriton() override= default; public: static G4AdjointTriton* Definition(); diff --git a/source/particles/adjoint/src/G4AdjointAlpha.cc b/source/particles/adjoint/src/G4AdjointAlpha.cc index 6ebe07d9178..de7c16d1989 100644 --- a/source/particles/adjoint/src/G4AdjointAlpha.cc +++ b/source/particles/adjoint/src/G4AdjointAlpha.cc @@ -33,16 +33,16 @@ // ### ADJOINT ALPHA ### // ###################################################################### -G4AdjointAlpha* G4AdjointAlpha::theInstance = 0; +G4AdjointAlpha* G4AdjointAlpha::theInstance = nullptr; G4AdjointAlpha* G4AdjointAlpha::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "adj_alpha"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4AdjointIons* anInstance = static_cast(pTable->FindParticle(name)); - if (anInstance ==0) + auto anInstance = static_cast(pTable->FindParticle(name)); + if (anInstance ==nullptr) { // create particle // @@ -59,7 +59,7 @@ G4AdjointAlpha* G4AdjointAlpha::Definition() 0, +1, 0, 0, 0, 0, "adjoint_nucleus", 0, +4, 1000020040, - true, -1.0, NULL, + true, -1.0, nullptr, false, "static", 0, 0.0 ); diff --git a/source/particles/adjoint/src/G4AdjointDeuteron.cc b/source/particles/adjoint/src/G4AdjointDeuteron.cc index 38d80c485ba..0da8d4520a2 100644 --- a/source/particles/adjoint/src/G4AdjointDeuteron.cc +++ b/source/particles/adjoint/src/G4AdjointDeuteron.cc @@ -33,17 +33,17 @@ // ### ADJOINT DEUTERON ### // ###################################################################### -G4AdjointDeuteron* G4AdjointDeuteron::theInstance = 0; +G4AdjointDeuteron* G4AdjointDeuteron::theInstance = nullptr; G4AdjointDeuteron* G4AdjointDeuteron::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "adj_deuteron"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4AdjointIons* anInstance = static_cast(pTable->FindParticle(name)); - if (anInstance ==0) + auto anInstance = static_cast(pTable->FindParticle(name)); + if (anInstance ==nullptr) { // create particle // @@ -60,7 +60,7 @@ G4AdjointDeuteron* G4AdjointDeuteron::Definition() 2, +1, 0, 0, 0, 0, "adjoint_nucleus", 0, +2, 1000010020, - true, -1.0, NULL, + true, -1.0, nullptr, false, "static", 0, 0.0 ); diff --git a/source/particles/adjoint/src/G4AdjointElectron.cc b/source/particles/adjoint/src/G4AdjointElectron.cc index f1327dad781..2d8fedd7b8d 100644 --- a/source/particles/adjoint/src/G4AdjointElectron.cc +++ b/source/particles/adjoint/src/G4AdjointElectron.cc @@ -44,17 +44,17 @@ // ###################################################################### // ### ADJOINT ELECTRON ### // ###################################################################### -G4AdjointElectron* G4AdjointElectron::theInstance = 0; +G4AdjointElectron* G4AdjointElectron::theInstance = nullptr; G4AdjointElectron* G4AdjointElectron::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "adj_e-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle @@ -79,7 +79,7 @@ G4AdjointElectron* G4AdjointElectron::Definition() 1, 0, 0, 0, 0, 0, "adjoint", 1, 0, 10000011, - true, -1.0, NULL, + true, -1.0, nullptr, false, "adj_lepton" ); // Bohr Magnetron diff --git a/source/particles/adjoint/src/G4AdjointElectronFI.cc b/source/particles/adjoint/src/G4AdjointElectronFI.cc index 054e7ce747b..478b46c36fd 100644 --- a/source/particles/adjoint/src/G4AdjointElectronFI.cc +++ b/source/particles/adjoint/src/G4AdjointElectronFI.cc @@ -44,17 +44,17 @@ // ###################################################################### // ### ADJOINT ELECTRON FOR FORCED INTERACTION ### // ###################################################################### -G4AdjointElectronFI* G4AdjointElectronFI::theInstance = 0; +G4AdjointElectronFI* G4AdjointElectronFI::theInstance = nullptr; G4AdjointElectronFI* G4AdjointElectronFI::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "adj_e-_FI"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle @@ -79,7 +79,7 @@ G4AdjointElectronFI* G4AdjointElectronFI::Definition() 1, 0, 0, 0, 0, 0, "adjoint", 1, 0, 90000011, - true, -1.0, NULL, + true, -1.0, nullptr, false, "adj_lepton" ); // Bohr Magnetron diff --git a/source/particles/adjoint/src/G4AdjointGamma.cc b/source/particles/adjoint/src/G4AdjointGamma.cc index 611889b3a97..908a0e9c0ca 100644 --- a/source/particles/adjoint/src/G4AdjointGamma.cc +++ b/source/particles/adjoint/src/G4AdjointGamma.cc @@ -40,18 +40,18 @@ // ###################################################################### // ### GAMMA ### // ###################################################################### -G4AdjointGamma* G4AdjointGamma::theInstance = 0; +G4AdjointGamma* G4AdjointGamma::theInstance = nullptr; G4AdjointGamma* G4AdjointGamma::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "adj_gamma"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -67,7 +67,7 @@ G4AdjointGamma* G4AdjointGamma::Definition() 2, -1, -1, 0, 0, 0, "adjoint", 0, 0, 10000022, - true, 0.0, NULL, + true, 0.0, nullptr, false, "adj_gamma", 10000022 ); } diff --git a/source/particles/adjoint/src/G4AdjointGenericIon.cc b/source/particles/adjoint/src/G4AdjointGenericIon.cc index b84fc14abca..243b893ca1a 100644 --- a/source/particles/adjoint/src/G4AdjointGenericIon.cc +++ b/source/particles/adjoint/src/G4AdjointGenericIon.cc @@ -31,16 +31,16 @@ // ###################################################################### // ### ADJOINT GenericIon ### // ###################################################################### -G4AdjointGenericIon* G4AdjointGenericIon::theInstance = 0; +G4AdjointGenericIon* G4AdjointGenericIon::theInstance = nullptr; G4AdjointGenericIon* G4AdjointGenericIon::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "adj_GenericIon"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4AdjointIons* anInstance = static_cast(pTable->FindParticle(name)); - if (anInstance ==0) + auto anInstance = static_cast(pTable->FindParticle(name)); + if (anInstance ==nullptr) { // create particle // @@ -61,7 +61,7 @@ G4AdjointGenericIon* G4AdjointGenericIon::Definition() 1, +1, 0, 1, +1, 0, "adjoint_nucleus", 0, +1, 0, - true, -1.0, NULL, + true, -1.0, nullptr, false, "adjoint_generic", 0, 0.0 ); diff --git a/source/particles/adjoint/src/G4AdjointHe3.cc b/source/particles/adjoint/src/G4AdjointHe3.cc index 94bc105961c..b03ad2a614c 100644 --- a/source/particles/adjoint/src/G4AdjointHe3.cc +++ b/source/particles/adjoint/src/G4AdjointHe3.cc @@ -33,17 +33,17 @@ // ### ADJOINT He3 ### // ###################################################################### -G4AdjointHe3* G4AdjointHe3::theInstance = 0; +G4AdjointHe3* G4AdjointHe3::theInstance = nullptr; G4AdjointHe3* G4AdjointHe3::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "adj_He3"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4AdjointIons* anInstance = static_cast(pTable->FindParticle(name)); - if (anInstance ==0) + auto anInstance = static_cast(pTable->FindParticle(name)); + if (anInstance ==nullptr) { // create particle // @@ -60,7 +60,7 @@ G4AdjointHe3* G4AdjointHe3::Definition() 1, +1, 0, 0, 0, 0, "adjoint_nucleus", 0, +3, 1000020030, - true, -1.0, NULL, + true, -1.0, nullptr, false, "static", 0, 0.0 ); diff --git a/source/particles/adjoint/src/G4AdjointIons.cc b/source/particles/adjoint/src/G4AdjointIons.cc index c1d03bb7a24..4b7cfe260e4 100644 --- a/source/particles/adjoint/src/G4AdjointIons.cc +++ b/source/particles/adjoint/src/G4AdjointIons.cc @@ -62,13 +62,6 @@ G4AdjointIons::G4AdjointIons( } -G4AdjointIons::~G4AdjointIons() -{ - - //G4cout << "G4AdjointIons::" << GetParticleName() << G4endl; -} - - G4AdjointIons* G4AdjointIons::IonsDefinition() { return this; diff --git a/source/particles/adjoint/src/G4AdjointPositron.cc b/source/particles/adjoint/src/G4AdjointPositron.cc index 902897e4dda..453751cf807 100644 --- a/source/particles/adjoint/src/G4AdjointPositron.cc +++ b/source/particles/adjoint/src/G4AdjointPositron.cc @@ -44,17 +44,17 @@ // ###################################################################### // ### ADJOINT ELECTRON ### // ###################################################################### -G4AdjointPositron* G4AdjointPositron::theInstance = 0; +G4AdjointPositron* G4AdjointPositron::theInstance = nullptr; G4AdjointPositron* G4AdjointPositron::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "adj_e+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle @@ -78,7 +78,7 @@ G4AdjointPositron* G4AdjointPositron::Definition() 1, 0, 0, 0, 0, 0, "adjoint", -1, 0, -10000011, - true, -1.0, NULL, + true, -1.0, nullptr, false, "adj_lepton" ); // Bohr Magnetron diff --git a/source/particles/adjoint/src/G4AdjointProton.cc b/source/particles/adjoint/src/G4AdjointProton.cc index 978cb3853e5..bba42f8dc99 100644 --- a/source/particles/adjoint/src/G4AdjointProton.cc +++ b/source/particles/adjoint/src/G4AdjointProton.cc @@ -34,16 +34,16 @@ // ###################################################################### // ### PROTON ### // ###################################################################### -G4AdjointProton* G4AdjointProton::theInstance = 0; +G4AdjointProton* G4AdjointProton::theInstance = nullptr; G4AdjointProton* G4AdjointProton::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "adj_proton"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -62,7 +62,7 @@ G4AdjointProton* G4AdjointProton::Definition() 1, +1, 0, 1, +1, 0, "adjoint", 0, +1, 100002212, - true, -1.0, NULL, + true, -1.0, nullptr, false, "adjoint_ion", 0, 0.0 ); diff --git a/source/particles/adjoint/src/G4AdjointTriton.cc b/source/particles/adjoint/src/G4AdjointTriton.cc index 1a3ee71eafb..09e2a63f4e0 100644 --- a/source/particles/adjoint/src/G4AdjointTriton.cc +++ b/source/particles/adjoint/src/G4AdjointTriton.cc @@ -33,16 +33,16 @@ // ### ADJOINT TRITON ### // ###################################################################### -G4AdjointTriton* G4AdjointTriton::theInstance = 0; +G4AdjointTriton* G4AdjointTriton::theInstance = nullptr; G4AdjointTriton* G4AdjointTriton::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "adj_triton"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4AdjointIons* anInstance = static_cast(pTable->FindParticle(name)); - if (anInstance ==0) + auto anInstance = static_cast(pTable->FindParticle(name)); + if (anInstance ==nullptr) { // create particle // @@ -59,7 +59,7 @@ G4AdjointTriton* G4AdjointTriton::Definition() 1, +1, 0, 0, 0, 0, "adjoint_nucleus", 0, +3, 1000010030, - true, -1.0, NULL, + true, -1.0, nullptr, false, "static", 0, 0.0 ); diff --git a/source/particles/bosons/GNUmakefile b/source/particles/bosons/GNUmakefile deleted file mode 100644 index 1584bbc4516..00000000000 --- a/source/particles/bosons/GNUmakefile +++ /dev/null @@ -1,20 +0,0 @@ -# ---------------------------------------------------------- -# GNUmakefile for bosons library. Gabriele Cosmo, 18/9/96. -# ---------------------------------------------------------- - -name := G4bosons - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4PARTICLES_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/particles/management/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/particles/bosons/include/G4BosonConstructor.hh b/source/particles/bosons/include/G4BosonConstructor.hh index a8d1594b8b0..e6106218aa1 100644 --- a/source/particles/bosons/include/G4BosonConstructor.hh +++ b/source/particles/bosons/include/G4BosonConstructor.hh @@ -38,11 +38,6 @@ class G4BosonConstructor { //This class is a utility class for constructBoson - - public: - G4BosonConstructor(); - ~G4BosonConstructor(); - public: static void ConstructParticle(); }; diff --git a/source/particles/bosons/include/G4ChargedGeantino.hh b/source/particles/bosons/include/G4ChargedGeantino.hh index 5b994c3b6d2..01a308b3a4c 100644 --- a/source/particles/bosons/include/G4ChargedGeantino.hh +++ b/source/particles/bosons/include/G4ChargedGeantino.hh @@ -55,7 +55,7 @@ class G4ChargedGeantino : public G4ParticleDefinition G4ChargedGeantino(){} public: - ~G4ChargedGeantino(){} + ~G4ChargedGeantino() override= default; static G4ChargedGeantino* Definition(); static G4ChargedGeantino* ChargedGeantinoDefinition(); diff --git a/source/particles/bosons/include/G4Gamma.hh b/source/particles/bosons/include/G4Gamma.hh index 23560bd0c9c..04c266ba01b 100644 --- a/source/particles/bosons/include/G4Gamma.hh +++ b/source/particles/bosons/include/G4Gamma.hh @@ -55,7 +55,7 @@ class G4Gamma : public G4ParticleDefinition G4Gamma(){} public: - ~G4Gamma(){} + ~G4Gamma() override= default; static G4Gamma* Definition(); static G4Gamma* GammaDefinition(); diff --git a/source/particles/bosons/include/G4Geantino.hh b/source/particles/bosons/include/G4Geantino.hh index 463820a1762..ae42edf94c1 100644 --- a/source/particles/bosons/include/G4Geantino.hh +++ b/source/particles/bosons/include/G4Geantino.hh @@ -55,7 +55,7 @@ class G4Geantino : public G4ParticleDefinition G4Geantino() {} public: - ~G4Geantino(){} + ~G4Geantino() override= default; static G4Geantino* Definition(); static G4Geantino* GeantinoDefinition(); diff --git a/source/particles/bosons/include/G4OpticalPhoton.hh b/source/particles/bosons/include/G4OpticalPhoton.hh index b6d44c9a41e..e4c08cf4f88 100644 --- a/source/particles/bosons/include/G4OpticalPhoton.hh +++ b/source/particles/bosons/include/G4OpticalPhoton.hh @@ -55,7 +55,7 @@ class G4OpticalPhoton : public G4ParticleDefinition G4OpticalPhoton () {} public: - ~G4OpticalPhoton (){} + ~G4OpticalPhoton () override= default; static G4OpticalPhoton* Definition(); static G4OpticalPhoton* OpticalPhotonDefinition(); diff --git a/source/particles/bosons/include/G4PhononLong.hh b/source/particles/bosons/include/G4PhononLong.hh index 4e278e42300..952feb5ea64 100644 --- a/source/particles/bosons/include/G4PhononLong.hh +++ b/source/particles/bosons/include/G4PhononLong.hh @@ -41,7 +41,7 @@ private: G4PhononLong() {;} public: - virtual ~G4PhononLong() {;} + ~G4PhononLong() override {;} static G4PhononLong* Definition(); static G4PhononLong* PhononDefinition(); diff --git a/source/particles/bosons/include/G4PhononTransFast.hh b/source/particles/bosons/include/G4PhononTransFast.hh index 9d27e13a0db..1d25a97b03a 100644 --- a/source/particles/bosons/include/G4PhononTransFast.hh +++ b/source/particles/bosons/include/G4PhononTransFast.hh @@ -42,7 +42,7 @@ private: G4PhononTransFast() {;} public: - virtual ~G4PhononTransFast() {;} + ~G4PhononTransFast() override {;} static G4PhononTransFast* Definition(); static G4PhononTransFast* PhononDefinition(); diff --git a/source/particles/bosons/include/G4PhononTransSlow.hh b/source/particles/bosons/include/G4PhononTransSlow.hh index d655c4a61cc..197a785187f 100644 --- a/source/particles/bosons/include/G4PhononTransSlow.hh +++ b/source/particles/bosons/include/G4PhononTransSlow.hh @@ -41,7 +41,7 @@ private: G4PhononTransSlow() {;} public: - virtual ~G4PhononTransSlow () {;} + ~G4PhononTransSlow () override {;} static G4PhononTransSlow* Definition(); static G4PhononTransSlow* PhononDefinition(); diff --git a/source/particles/bosons/include/G4UnknownParticle.hh b/source/particles/bosons/include/G4UnknownParticle.hh index 5173c7437bd..9815beec5d9 100644 --- a/source/particles/bosons/include/G4UnknownParticle.hh +++ b/source/particles/bosons/include/G4UnknownParticle.hh @@ -55,7 +55,7 @@ class G4UnknownParticle : public G4ParticleDefinition G4UnknownParticle(){} public: - ~G4UnknownParticle(){} + ~G4UnknownParticle() override= default; static G4UnknownParticle* Definition(); static G4UnknownParticle* UnknownParticleDefinition(); diff --git a/source/particles/bosons/src/G4BosonConstructor.cc b/source/particles/bosons/src/G4BosonConstructor.cc index dcdb7a5371d..0ce9a135bfc 100644 --- a/source/particles/bosons/src/G4BosonConstructor.cc +++ b/source/particles/bosons/src/G4BosonConstructor.cc @@ -40,15 +40,6 @@ #include "G4Gamma.hh" #include "G4OpticalPhoton.hh" -G4BosonConstructor::G4BosonConstructor() -{ -} - -G4BosonConstructor::~G4BosonConstructor() -{ -} - - void G4BosonConstructor::ConstructParticle() { // pseudo-particles diff --git a/source/particles/bosons/src/G4ChargedGeantino.cc b/source/particles/bosons/src/G4ChargedGeantino.cc index c59cdae26aa..d5522a5da03 100644 --- a/source/particles/bosons/src/G4ChargedGeantino.cc +++ b/source/particles/bosons/src/G4ChargedGeantino.cc @@ -43,17 +43,17 @@ // ###################################################################### // ### ChargedGeantino ### // ###################################################################### -G4ChargedGeantino* G4ChargedGeantino::theInstance = 0; +G4ChargedGeantino* G4ChargedGeantino::theInstance = nullptr; G4ChargedGeantino* G4ChargedGeantino::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "chargedgeantino"; // search in particle table G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -69,7 +69,7 @@ G4ChargedGeantino* G4ChargedGeantino::Definition() 0, 0, 0, 0, 0, 0, "geantino", 0, 0, 0, - true, -1.0, NULL, + true, -1.0, nullptr, false, "geantino", 0 ); } diff --git a/source/particles/bosons/src/G4Gamma.cc b/source/particles/bosons/src/G4Gamma.cc index aa15c009541..0fa43aaec00 100644 --- a/source/particles/bosons/src/G4Gamma.cc +++ b/source/particles/bosons/src/G4Gamma.cc @@ -42,18 +42,18 @@ // ###################################################################### // ### GAMMA ### // ###################################################################### -G4Gamma* G4Gamma::theInstance = 0; +G4Gamma* G4Gamma::theInstance = nullptr; G4Gamma* G4Gamma::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "gamma"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -69,7 +69,7 @@ G4Gamma* G4Gamma::Definition() 2, -1, -1, 0, 0, 0, "gamma", 0, 0, 22, - true, -1.0, NULL, + true, -1.0, nullptr, false, "photon", 22 ); } diff --git a/source/particles/bosons/src/G4Geantino.cc b/source/particles/bosons/src/G4Geantino.cc index 81b8994f04f..404d956f109 100644 --- a/source/particles/bosons/src/G4Geantino.cc +++ b/source/particles/bosons/src/G4Geantino.cc @@ -43,17 +43,17 @@ // ###################################################################### // ### GEANTINO ### // ###################################################################### -G4Geantino* G4Geantino::theInstance = 0; +G4Geantino* G4Geantino::theInstance = nullptr; G4Geantino* G4Geantino::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "geantino"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -69,7 +69,7 @@ G4Geantino* G4Geantino::Definition() 0, 0, 0, 0, 0, 0, "geantino", 0, 0, 0, - true, -1.0, NULL, + true, -1.0, nullptr, false, "geantino", 0 ); } diff --git a/source/particles/bosons/src/G4OpticalPhoton.cc b/source/particles/bosons/src/G4OpticalPhoton.cc index 92c3d0540ef..5323c809bde 100644 --- a/source/particles/bosons/src/G4OpticalPhoton.cc +++ b/source/particles/bosons/src/G4OpticalPhoton.cc @@ -43,17 +43,17 @@ // ###################################################################### // ### OPTICAL PHOTON ### // ###################################################################### -G4OpticalPhoton* G4OpticalPhoton::theInstance = 0; +G4OpticalPhoton* G4OpticalPhoton::theInstance = nullptr; G4OpticalPhoton* G4OpticalPhoton::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "opticalphoton"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -69,7 +69,7 @@ G4OpticalPhoton* G4OpticalPhoton::Definition() 2, -1, -1, 0, 0, 0, "opticalphoton", 0, 0, -22, - true, -1.0, NULL, + true, -1.0, nullptr, false, "photon", 0 ); } diff --git a/source/particles/bosons/src/G4PhononLong.cc b/source/particles/bosons/src/G4PhononLong.cc index 23dcc56e8e5..b10b2fd4f34 100644 --- a/source/particles/bosons/src/G4PhononLong.cc +++ b/source/particles/bosons/src/G4PhononLong.cc @@ -32,19 +32,19 @@ #include "G4ParticleTable.hh" #include "G4SystemOfUnits.hh" -G4PhononLong* G4PhononLong::theInstance = 0; +G4PhononLong* G4PhononLong::theInstance = nullptr; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4PhononLong* G4PhononLong::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "phononL"; // search in particle table G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -60,7 +60,7 @@ G4PhononLong* G4PhononLong::Definition() 0, 0, 0, 0, 0, 0, "phonon", 0, 0, 0, - true, -1.0, NULL, + true, -1.0, nullptr, false, "phononL", 0 ); } diff --git a/source/particles/bosons/src/G4PhononTransFast.cc b/source/particles/bosons/src/G4PhononTransFast.cc index d3cc42e5f77..35e8c973090 100644 --- a/source/particles/bosons/src/G4PhononTransFast.cc +++ b/source/particles/bosons/src/G4PhononTransFast.cc @@ -32,17 +32,17 @@ #include "G4ParticleTable.hh" #include "G4SystemOfUnits.hh" -G4PhononTransFast* G4PhononTransFast::theInstance = 0; +G4PhononTransFast* G4PhononTransFast::theInstance = nullptr; G4PhononTransFast* G4PhononTransFast::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "phononTF"; // search in particle table G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -58,7 +58,7 @@ G4PhononTransFast* G4PhononTransFast::Definition() 0, 0, 0, 0, 0, 0, "phonon", 0, 0, 0, - true, -1.0, NULL, + true, -1.0, nullptr, false, "phononTF", 0 ); } diff --git a/source/particles/bosons/src/G4PhononTransSlow.cc b/source/particles/bosons/src/G4PhononTransSlow.cc index 38557402f95..3e66db964d6 100644 --- a/source/particles/bosons/src/G4PhononTransSlow.cc +++ b/source/particles/bosons/src/G4PhononTransSlow.cc @@ -32,17 +32,17 @@ #include "G4ParticleTable.hh" #include "G4SystemOfUnits.hh" -G4PhononTransSlow* G4PhononTransSlow::theInstance = 0; +G4PhononTransSlow* G4PhononTransSlow::theInstance = nullptr; G4PhononTransSlow* G4PhononTransSlow::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "phononTS"; // search in particle table G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -58,7 +58,7 @@ G4PhononTransSlow* G4PhononTransSlow::Definition() 0, 0, 0, 0, 0, 0, "phonon", 0, 0, 0, - true, -1.0, NULL, + true, -1.0, nullptr, false, "phononTS", 0 ); } diff --git a/source/particles/bosons/src/G4UnknownParticle.cc b/source/particles/bosons/src/G4UnknownParticle.cc index f3a302f158a..56c85c50f26 100644 --- a/source/particles/bosons/src/G4UnknownParticle.cc +++ b/source/particles/bosons/src/G4UnknownParticle.cc @@ -42,17 +42,17 @@ // ###################################################################### // ### Unknown Particle ### // ###################################################################### -G4UnknownParticle* G4UnknownParticle::theInstance = 0; +G4UnknownParticle* G4UnknownParticle::theInstance = nullptr; G4UnknownParticle* G4UnknownParticle::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "unknown"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -68,7 +68,7 @@ G4UnknownParticle* G4UnknownParticle::Definition() 0, 0, 0, 0, 0, 0, "geantino", 0, 0, 0, - true, -1.0, NULL, + true, -1.0, nullptr, false, "geantino", 0 ); } diff --git a/source/particles/hadrons/GNUmakefile b/source/particles/hadrons/GNUmakefile deleted file mode 100644 index d746bb1e3f4..00000000000 --- a/source/particles/hadrons/GNUmakefile +++ /dev/null @@ -1,15 +0,0 @@ -# --------------------------------------------------------------- -# Makes libraries for each subdomain: barions, ions, mesons. -# GNUmakefile for particles libraries. Gabriele Cosmo, 18/9/96. -# --------------------------------------------------------------- - -SUBDIRS = barions ions mesons - -all: - @for dir in $(SUBDIRS); do (cd $$dir; $(MAKE)); done - -clean: - @for dir in $(SUBDIRS); do (cd $$dir; $(MAKE) clean); done - -clean_libs: - @for dir in $(SUBDIRS); do (cd $$dir; $(MAKE) clean_libs); done diff --git a/source/particles/hadrons/barions/GNUmakefile b/source/particles/hadrons/barions/GNUmakefile deleted file mode 100644 index d270a9ec998..00000000000 --- a/source/particles/hadrons/barions/GNUmakefile +++ /dev/null @@ -1,20 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for barions library. Gabriele Cosmo, 18/9/96. -# -------------------------------------------------------------- - -name := G4baryons - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4PARTICLES_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/particles/management/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/particles/hadrons/barions/include/G4AntiLambda.hh b/source/particles/hadrons/barions/include/G4AntiLambda.hh index a57c75389e2..a0272c228c8 100644 --- a/source/particles/hadrons/barions/include/G4AntiLambda.hh +++ b/source/particles/hadrons/barions/include/G4AntiLambda.hh @@ -51,7 +51,7 @@ class G4AntiLambda : public G4ParticleDefinition private: static G4AntiLambda* theInstance; G4AntiLambda(){} - ~G4AntiLambda(){} + ~G4AntiLambda() override= default; public: static G4AntiLambda* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiLambdab.hh b/source/particles/hadrons/barions/include/G4AntiLambdab.hh index 5462682b8fe..3ab62e4e35b 100644 --- a/source/particles/hadrons/barions/include/G4AntiLambdab.hh +++ b/source/particles/hadrons/barions/include/G4AntiLambdab.hh @@ -53,7 +53,7 @@ class G4AntiLambdab : public G4ParticleDefinition private: static G4AntiLambdab* theInstance; G4AntiLambdab(){} - ~G4AntiLambdab(){} + ~G4AntiLambdab() override= default; public: static G4AntiLambdab* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiLambdacPlus.hh b/source/particles/hadrons/barions/include/G4AntiLambdacPlus.hh index 678141e6baf..691f5bf33aa 100644 --- a/source/particles/hadrons/barions/include/G4AntiLambdacPlus.hh +++ b/source/particles/hadrons/barions/include/G4AntiLambdacPlus.hh @@ -51,7 +51,7 @@ class G4AntiLambdacPlus : public G4ParticleDefinition private: static G4AntiLambdacPlus* theInstance; G4AntiLambdacPlus(){} - ~G4AntiLambdacPlus(){} + ~G4AntiLambdacPlus() override= default; public: static G4AntiLambdacPlus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiNeutron.hh b/source/particles/hadrons/barions/include/G4AntiNeutron.hh index 0e0d514ad64..3877213a037 100644 --- a/source/particles/hadrons/barions/include/G4AntiNeutron.hh +++ b/source/particles/hadrons/barions/include/G4AntiNeutron.hh @@ -51,7 +51,7 @@ class G4AntiNeutron : public G4ParticleDefinition private: static G4AntiNeutron* theInstance; G4AntiNeutron(){} - ~G4AntiNeutron(){} + ~G4AntiNeutron() override= default; public: static G4AntiNeutron* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiOmegaMinus.hh b/source/particles/hadrons/barions/include/G4AntiOmegaMinus.hh index 7c3db90954e..1183e422e7e 100644 --- a/source/particles/hadrons/barions/include/G4AntiOmegaMinus.hh +++ b/source/particles/hadrons/barions/include/G4AntiOmegaMinus.hh @@ -51,7 +51,7 @@ class G4AntiOmegaMinus : public G4ParticleDefinition private: static G4AntiOmegaMinus* theInstance; G4AntiOmegaMinus(){} - ~G4AntiOmegaMinus(){} + ~G4AntiOmegaMinus() override= default; public: static G4AntiOmegaMinus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiOmegabMinus.hh b/source/particles/hadrons/barions/include/G4AntiOmegabMinus.hh index 3d9a848f479..6e67d404f96 100644 --- a/source/particles/hadrons/barions/include/G4AntiOmegabMinus.hh +++ b/source/particles/hadrons/barions/include/G4AntiOmegabMinus.hh @@ -51,7 +51,7 @@ class G4AntiOmegabMinus : public G4ParticleDefinition private: static G4AntiOmegabMinus* theInstance; G4AntiOmegabMinus(){} - ~G4AntiOmegabMinus(){} + ~G4AntiOmegabMinus() override= default; public: static G4AntiOmegabMinus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiOmegacZero.hh b/source/particles/hadrons/barions/include/G4AntiOmegacZero.hh index 169050299f6..52d78936ff4 100644 --- a/source/particles/hadrons/barions/include/G4AntiOmegacZero.hh +++ b/source/particles/hadrons/barions/include/G4AntiOmegacZero.hh @@ -51,7 +51,7 @@ class G4AntiOmegacZero : public G4ParticleDefinition private: static G4AntiOmegacZero* theInstance; G4AntiOmegacZero(){} - ~G4AntiOmegacZero(){} + ~G4AntiOmegacZero() override= default; public: static G4AntiOmegacZero* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiProton.hh b/source/particles/hadrons/barions/include/G4AntiProton.hh index 814745e3b3f..98a2cdaf2b4 100644 --- a/source/particles/hadrons/barions/include/G4AntiProton.hh +++ b/source/particles/hadrons/barions/include/G4AntiProton.hh @@ -51,7 +51,7 @@ class G4AntiProton : public G4ParticleDefinition private: static G4AntiProton* theInstance; G4AntiProton(){} - ~G4AntiProton(){} + ~G4AntiProton() override= default; public: static G4AntiProton* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiSigmaMinus.hh b/source/particles/hadrons/barions/include/G4AntiSigmaMinus.hh index 2b50b8e2592..1eb1efdda7e 100644 --- a/source/particles/hadrons/barions/include/G4AntiSigmaMinus.hh +++ b/source/particles/hadrons/barions/include/G4AntiSigmaMinus.hh @@ -51,7 +51,7 @@ class G4AntiSigmaMinus : public G4ParticleDefinition private: static G4AntiSigmaMinus* theInstance; G4AntiSigmaMinus(){} - ~G4AntiSigmaMinus(){} + ~G4AntiSigmaMinus() override= default; public: static G4AntiSigmaMinus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiSigmaPlus.hh b/source/particles/hadrons/barions/include/G4AntiSigmaPlus.hh index 5b1d440f747..af06c7189a8 100644 --- a/source/particles/hadrons/barions/include/G4AntiSigmaPlus.hh +++ b/source/particles/hadrons/barions/include/G4AntiSigmaPlus.hh @@ -51,7 +51,7 @@ class G4AntiSigmaPlus : public G4ParticleDefinition private: static G4AntiSigmaPlus* theInstance; G4AntiSigmaPlus(){} - ~G4AntiSigmaPlus(){} + ~G4AntiSigmaPlus() override= default; public: static G4AntiSigmaPlus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiSigmaZero.hh b/source/particles/hadrons/barions/include/G4AntiSigmaZero.hh index d85f946cdee..a558014b716 100644 --- a/source/particles/hadrons/barions/include/G4AntiSigmaZero.hh +++ b/source/particles/hadrons/barions/include/G4AntiSigmaZero.hh @@ -51,7 +51,7 @@ class G4AntiSigmaZero : public G4ParticleDefinition private: static G4AntiSigmaZero* theInstance; G4AntiSigmaZero(){} - ~G4AntiSigmaZero(){} + ~G4AntiSigmaZero() override= default; public: static G4AntiSigmaZero* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiSigmabMinus.hh b/source/particles/hadrons/barions/include/G4AntiSigmabMinus.hh index 66cdc3c0f1e..b783c558776 100644 --- a/source/particles/hadrons/barions/include/G4AntiSigmabMinus.hh +++ b/source/particles/hadrons/barions/include/G4AntiSigmabMinus.hh @@ -52,7 +52,7 @@ class G4AntiSigmabMinus : public G4ParticleDefinition private: static G4AntiSigmabMinus* theInstance; G4AntiSigmabMinus(){} - ~G4AntiSigmabMinus(){} + ~G4AntiSigmabMinus() override= default; public: static G4AntiSigmabMinus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiSigmabPlus.hh b/source/particles/hadrons/barions/include/G4AntiSigmabPlus.hh index be6fc7838b4..cfd4bb68c27 100644 --- a/source/particles/hadrons/barions/include/G4AntiSigmabPlus.hh +++ b/source/particles/hadrons/barions/include/G4AntiSigmabPlus.hh @@ -52,7 +52,7 @@ class G4AntiSigmabPlus : public G4ParticleDefinition private: static G4AntiSigmabPlus* theInstance; G4AntiSigmabPlus(){} - ~G4AntiSigmabPlus(){} + ~G4AntiSigmabPlus() override= default; public: static G4AntiSigmabPlus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiSigmabZero.hh b/source/particles/hadrons/barions/include/G4AntiSigmabZero.hh index e639f1551f8..78bf6a4ea1b 100644 --- a/source/particles/hadrons/barions/include/G4AntiSigmabZero.hh +++ b/source/particles/hadrons/barions/include/G4AntiSigmabZero.hh @@ -52,7 +52,7 @@ class G4AntiSigmabZero : public G4ParticleDefinition private: static G4AntiSigmabZero* theInstance; G4AntiSigmabZero(){} - ~G4AntiSigmabZero(){} + ~G4AntiSigmabZero() override= default; public: static G4AntiSigmabZero* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiSigmacPlus.hh b/source/particles/hadrons/barions/include/G4AntiSigmacPlus.hh index 5a853314e6a..81cc7410a04 100644 --- a/source/particles/hadrons/barions/include/G4AntiSigmacPlus.hh +++ b/source/particles/hadrons/barions/include/G4AntiSigmacPlus.hh @@ -51,7 +51,7 @@ class G4AntiSigmacPlus : public G4ParticleDefinition private: static G4AntiSigmacPlus* theInstance; G4AntiSigmacPlus(){} - ~G4AntiSigmacPlus(){} + ~G4AntiSigmacPlus() override= default; public: static G4AntiSigmacPlus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiSigmacPlusPlus.hh b/source/particles/hadrons/barions/include/G4AntiSigmacPlusPlus.hh index 09c16102e89..92b21cd02f7 100644 --- a/source/particles/hadrons/barions/include/G4AntiSigmacPlusPlus.hh +++ b/source/particles/hadrons/barions/include/G4AntiSigmacPlusPlus.hh @@ -51,7 +51,7 @@ class G4AntiSigmacPlusPlus : public G4ParticleDefinition private: static G4AntiSigmacPlusPlus* theInstance; G4AntiSigmacPlusPlus(){} - ~G4AntiSigmacPlusPlus(){} + ~G4AntiSigmacPlusPlus() override= default; public: static G4AntiSigmacPlusPlus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiSigmacZero.hh b/source/particles/hadrons/barions/include/G4AntiSigmacZero.hh index c0d4b226bf0..0305fcad2e3 100644 --- a/source/particles/hadrons/barions/include/G4AntiSigmacZero.hh +++ b/source/particles/hadrons/barions/include/G4AntiSigmacZero.hh @@ -51,7 +51,7 @@ class G4AntiSigmacZero : public G4ParticleDefinition private: static G4AntiSigmacZero* theInstance; G4AntiSigmacZero(){} - ~G4AntiSigmacZero(){} + ~G4AntiSigmacZero() override= default; public: static G4AntiSigmacZero* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiXiMinus.hh b/source/particles/hadrons/barions/include/G4AntiXiMinus.hh index 32b399f89bf..151c5a101fc 100644 --- a/source/particles/hadrons/barions/include/G4AntiXiMinus.hh +++ b/source/particles/hadrons/barions/include/G4AntiXiMinus.hh @@ -51,7 +51,7 @@ class G4AntiXiMinus : public G4ParticleDefinition private: static G4AntiXiMinus* theInstance; G4AntiXiMinus(){} - ~G4AntiXiMinus(){} + ~G4AntiXiMinus() override= default; public: static G4AntiXiMinus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiXiZero.hh b/source/particles/hadrons/barions/include/G4AntiXiZero.hh index 0969784de8c..d7280b2ec67 100644 --- a/source/particles/hadrons/barions/include/G4AntiXiZero.hh +++ b/source/particles/hadrons/barions/include/G4AntiXiZero.hh @@ -51,7 +51,7 @@ class G4AntiXiZero : public G4ParticleDefinition private: static G4AntiXiZero* theInstance; G4AntiXiZero(){} - ~G4AntiXiZero(){} + ~G4AntiXiZero() override= default; public: static G4AntiXiZero* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiXibMinus.hh b/source/particles/hadrons/barions/include/G4AntiXibMinus.hh index deaeab34bad..740b436896b 100644 --- a/source/particles/hadrons/barions/include/G4AntiXibMinus.hh +++ b/source/particles/hadrons/barions/include/G4AntiXibMinus.hh @@ -52,7 +52,7 @@ class G4AntiXibMinus : public G4ParticleDefinition private: static G4AntiXibMinus* theInstance; G4AntiXibMinus(){} - ~G4AntiXibMinus(){} + ~G4AntiXibMinus() override= default; public: static G4AntiXibMinus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiXibZero.hh b/source/particles/hadrons/barions/include/G4AntiXibZero.hh index ffdce4a35a9..87d0e4d2bd9 100644 --- a/source/particles/hadrons/barions/include/G4AntiXibZero.hh +++ b/source/particles/hadrons/barions/include/G4AntiXibZero.hh @@ -52,7 +52,7 @@ class G4AntiXibZero : public G4ParticleDefinition private: static G4AntiXibZero* theInstance; G4AntiXibZero(){} - ~G4AntiXibZero(){} + ~G4AntiXibZero() override= default; public: static G4AntiXibZero* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiXicPlus.hh b/source/particles/hadrons/barions/include/G4AntiXicPlus.hh index 0a67c528475..e9accd5a777 100644 --- a/source/particles/hadrons/barions/include/G4AntiXicPlus.hh +++ b/source/particles/hadrons/barions/include/G4AntiXicPlus.hh @@ -51,7 +51,7 @@ class G4AntiXicPlus : public G4ParticleDefinition private: static G4AntiXicPlus* theInstance; G4AntiXicPlus(){} - ~G4AntiXicPlus(){} + ~G4AntiXicPlus() override= default; public: static G4AntiXicPlus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4AntiXicZero.hh b/source/particles/hadrons/barions/include/G4AntiXicZero.hh index e3eef86ee2a..5100a7571f1 100644 --- a/source/particles/hadrons/barions/include/G4AntiXicZero.hh +++ b/source/particles/hadrons/barions/include/G4AntiXicZero.hh @@ -51,7 +51,7 @@ class G4AntiXicZero : public G4ParticleDefinition private: static G4AntiXicZero* theInstance; G4AntiXicZero(){} - ~G4AntiXicZero(){} + ~G4AntiXicZero() override= default; public: static G4AntiXicZero* Definition(); diff --git a/source/particles/hadrons/barions/include/G4BaryonConstructor.hh b/source/particles/hadrons/barions/include/G4BaryonConstructor.hh index 77b6b759ec7..99c938ab3f1 100644 --- a/source/particles/hadrons/barions/include/G4BaryonConstructor.hh +++ b/source/particles/hadrons/barions/include/G4BaryonConstructor.hh @@ -38,11 +38,6 @@ class G4BaryonConstructor { //This class is a utility class for construction - - public: - G4BaryonConstructor(); - ~G4BaryonConstructor(); - public: static void ConstructParticle(); diff --git a/source/particles/hadrons/barions/include/G4Lambda.hh b/source/particles/hadrons/barions/include/G4Lambda.hh index cd933dacdcb..21fd1c141b0 100644 --- a/source/particles/hadrons/barions/include/G4Lambda.hh +++ b/source/particles/hadrons/barions/include/G4Lambda.hh @@ -51,7 +51,7 @@ class G4Lambda : public G4ParticleDefinition private: static G4Lambda* theInstance; G4Lambda(){} - ~G4Lambda(){} + ~G4Lambda() override= default; public: static G4Lambda* Definition(); diff --git a/source/particles/hadrons/barions/include/G4Lambdab.hh b/source/particles/hadrons/barions/include/G4Lambdab.hh index 8c95cdfc242..c613564ad9b 100644 --- a/source/particles/hadrons/barions/include/G4Lambdab.hh +++ b/source/particles/hadrons/barions/include/G4Lambdab.hh @@ -53,7 +53,7 @@ class G4Lambdab : public G4ParticleDefinition private: static G4Lambdab* theInstance; G4Lambdab(){} - ~G4Lambdab(){} + ~G4Lambdab() override= default; public: static G4Lambdab* Definition(); diff --git a/source/particles/hadrons/barions/include/G4LambdacPlus.hh b/source/particles/hadrons/barions/include/G4LambdacPlus.hh index bfa4831f7ec..d8218c5ecd4 100644 --- a/source/particles/hadrons/barions/include/G4LambdacPlus.hh +++ b/source/particles/hadrons/barions/include/G4LambdacPlus.hh @@ -51,7 +51,7 @@ class G4LambdacPlus : public G4ParticleDefinition private: static G4LambdacPlus* theInstance; G4LambdacPlus(){} - ~G4LambdacPlus(){} + ~G4LambdacPlus() override= default; public: static G4LambdacPlus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4Neutron.hh b/source/particles/hadrons/barions/include/G4Neutron.hh index dcda8d5d67f..fe2614403c0 100644 --- a/source/particles/hadrons/barions/include/G4Neutron.hh +++ b/source/particles/hadrons/barions/include/G4Neutron.hh @@ -52,7 +52,7 @@ class G4Neutron : public G4Ions private: static G4Neutron* theInstance; G4Neutron(){} - ~G4Neutron(){} + ~G4Neutron() override= default; public: static G4Neutron* Definition(); diff --git a/source/particles/hadrons/barions/include/G4OmegaMinus.hh b/source/particles/hadrons/barions/include/G4OmegaMinus.hh index b06338024ac..4ac894f9ffe 100644 --- a/source/particles/hadrons/barions/include/G4OmegaMinus.hh +++ b/source/particles/hadrons/barions/include/G4OmegaMinus.hh @@ -51,7 +51,7 @@ class G4OmegaMinus : public G4ParticleDefinition private: static G4OmegaMinus* theInstance; G4OmegaMinus(){} - ~G4OmegaMinus(){} + ~G4OmegaMinus() override= default; public: static G4OmegaMinus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4OmegabMinus.hh b/source/particles/hadrons/barions/include/G4OmegabMinus.hh index 0630e77b0f4..b17d14ee060 100644 --- a/source/particles/hadrons/barions/include/G4OmegabMinus.hh +++ b/source/particles/hadrons/barions/include/G4OmegabMinus.hh @@ -51,7 +51,7 @@ class G4OmegabMinus : public G4ParticleDefinition private: static G4OmegabMinus* theInstance; G4OmegabMinus(){} - ~G4OmegabMinus(){} + ~G4OmegabMinus() override= default; public: static G4OmegabMinus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4OmegacZero.hh b/source/particles/hadrons/barions/include/G4OmegacZero.hh index 38876d765eb..6a7116644dd 100644 --- a/source/particles/hadrons/barions/include/G4OmegacZero.hh +++ b/source/particles/hadrons/barions/include/G4OmegacZero.hh @@ -51,7 +51,7 @@ class G4OmegacZero : public G4ParticleDefinition private: static G4OmegacZero* theInstance; G4OmegacZero(){} - ~G4OmegacZero(){} + ~G4OmegacZero() override= default; public: static G4OmegacZero* Definition(); diff --git a/source/particles/hadrons/barions/include/G4Proton.hh b/source/particles/hadrons/barions/include/G4Proton.hh index 129e3c26b8d..090b7089f61 100644 --- a/source/particles/hadrons/barions/include/G4Proton.hh +++ b/source/particles/hadrons/barions/include/G4Proton.hh @@ -52,7 +52,7 @@ class G4Proton : public G4Ions private: static G4Proton* theInstance; G4Proton(){} - ~G4Proton(){} + ~G4Proton() override= default; public: static G4Proton* Definition(); diff --git a/source/particles/hadrons/barions/include/G4SigmaMinus.hh b/source/particles/hadrons/barions/include/G4SigmaMinus.hh index 0719918cea1..b8a55fc8eec 100644 --- a/source/particles/hadrons/barions/include/G4SigmaMinus.hh +++ b/source/particles/hadrons/barions/include/G4SigmaMinus.hh @@ -51,7 +51,7 @@ class G4SigmaMinus : public G4ParticleDefinition private: static G4SigmaMinus* theInstance; G4SigmaMinus(){} - ~G4SigmaMinus(){} + ~G4SigmaMinus() override= default; public: static G4SigmaMinus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4SigmaPlus.hh b/source/particles/hadrons/barions/include/G4SigmaPlus.hh index b1b9d281ac6..c17150bf0db 100644 --- a/source/particles/hadrons/barions/include/G4SigmaPlus.hh +++ b/source/particles/hadrons/barions/include/G4SigmaPlus.hh @@ -51,7 +51,7 @@ class G4SigmaPlus : public G4ParticleDefinition private: static G4SigmaPlus* theInstance; G4SigmaPlus(){} - ~G4SigmaPlus(){} + ~G4SigmaPlus() override= default; public: static G4SigmaPlus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4SigmaZero.hh b/source/particles/hadrons/barions/include/G4SigmaZero.hh index c0c8963cfe7..00b4fc3265a 100644 --- a/source/particles/hadrons/barions/include/G4SigmaZero.hh +++ b/source/particles/hadrons/barions/include/G4SigmaZero.hh @@ -51,7 +51,7 @@ class G4SigmaZero : public G4ParticleDefinition private: static G4SigmaZero* theInstance; G4SigmaZero(){} - ~G4SigmaZero(){} + ~G4SigmaZero() override= default; public: static G4SigmaZero* Definition(); diff --git a/source/particles/hadrons/barions/include/G4SigmabMinus.hh b/source/particles/hadrons/barions/include/G4SigmabMinus.hh index ae29cd92cb2..fd731438372 100644 --- a/source/particles/hadrons/barions/include/G4SigmabMinus.hh +++ b/source/particles/hadrons/barions/include/G4SigmabMinus.hh @@ -52,7 +52,7 @@ class G4SigmabMinus : public G4ParticleDefinition private: static G4SigmabMinus* theInstance; G4SigmabMinus(){} - ~G4SigmabMinus(){} + ~G4SigmabMinus() override= default; public: static G4SigmabMinus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4SigmabPlus.hh b/source/particles/hadrons/barions/include/G4SigmabPlus.hh index cb01593ca83..4c801feadff 100644 --- a/source/particles/hadrons/barions/include/G4SigmabPlus.hh +++ b/source/particles/hadrons/barions/include/G4SigmabPlus.hh @@ -52,7 +52,7 @@ class G4SigmabPlus : public G4ParticleDefinition private: static G4SigmabPlus* theInstance; G4SigmabPlus(){} - ~G4SigmabPlus(){} + ~G4SigmabPlus() override= default; public: static G4SigmabPlus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4SigmabZero.hh b/source/particles/hadrons/barions/include/G4SigmabZero.hh index 1e40358ccb3..2ec5814e326 100644 --- a/source/particles/hadrons/barions/include/G4SigmabZero.hh +++ b/source/particles/hadrons/barions/include/G4SigmabZero.hh @@ -52,7 +52,7 @@ class G4SigmabZero : public G4ParticleDefinition private: static G4SigmabZero* theInstance; G4SigmabZero(){} - ~G4SigmabZero(){} + ~G4SigmabZero() override= default; public: static G4SigmabZero* Definition(); diff --git a/source/particles/hadrons/barions/include/G4SigmacPlus.hh b/source/particles/hadrons/barions/include/G4SigmacPlus.hh index 5c57b98125a..48fce2ddab3 100644 --- a/source/particles/hadrons/barions/include/G4SigmacPlus.hh +++ b/source/particles/hadrons/barions/include/G4SigmacPlus.hh @@ -51,7 +51,7 @@ class G4SigmacPlus : public G4ParticleDefinition private: static G4SigmacPlus* theInstance; G4SigmacPlus(){} - ~G4SigmacPlus(){} + ~G4SigmacPlus() override= default; public: static G4SigmacPlus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4SigmacPlusPlus.hh b/source/particles/hadrons/barions/include/G4SigmacPlusPlus.hh index 0a0be8e8a6f..70fae34c31f 100644 --- a/source/particles/hadrons/barions/include/G4SigmacPlusPlus.hh +++ b/source/particles/hadrons/barions/include/G4SigmacPlusPlus.hh @@ -51,7 +51,7 @@ class G4SigmacPlusPlus : public G4ParticleDefinition private: static G4SigmacPlusPlus* theInstance; G4SigmacPlusPlus(){} - ~G4SigmacPlusPlus(){} + ~G4SigmacPlusPlus() override= default; public: static G4SigmacPlusPlus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4SigmacZero.hh b/source/particles/hadrons/barions/include/G4SigmacZero.hh index 5eb96223f99..7c8c65631db 100644 --- a/source/particles/hadrons/barions/include/G4SigmacZero.hh +++ b/source/particles/hadrons/barions/include/G4SigmacZero.hh @@ -51,7 +51,7 @@ class G4SigmacZero : public G4ParticleDefinition private: static G4SigmacZero* theInstance; G4SigmacZero(){} - ~G4SigmacZero(){} + ~G4SigmacZero() override= default; public: static G4SigmacZero* Definition(); diff --git a/source/particles/hadrons/barions/include/G4XiMinus.hh b/source/particles/hadrons/barions/include/G4XiMinus.hh index 8840361dc6f..c88b7659873 100644 --- a/source/particles/hadrons/barions/include/G4XiMinus.hh +++ b/source/particles/hadrons/barions/include/G4XiMinus.hh @@ -51,7 +51,7 @@ class G4XiMinus : public G4ParticleDefinition private: static G4XiMinus* theInstance; G4XiMinus(){} - ~G4XiMinus(){} + ~G4XiMinus() override= default; public: static G4XiMinus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4XiZero.hh b/source/particles/hadrons/barions/include/G4XiZero.hh index 7ab84641f32..9f8b3ddf82e 100644 --- a/source/particles/hadrons/barions/include/G4XiZero.hh +++ b/source/particles/hadrons/barions/include/G4XiZero.hh @@ -51,7 +51,7 @@ class G4XiZero : public G4ParticleDefinition private: static G4XiZero* theInstance; G4XiZero(){} - ~G4XiZero(){} + ~G4XiZero() override= default; public: static G4XiZero* Definition(); diff --git a/source/particles/hadrons/barions/include/G4XibMinus.hh b/source/particles/hadrons/barions/include/G4XibMinus.hh index a00600b5f40..a57c4f122df 100644 --- a/source/particles/hadrons/barions/include/G4XibMinus.hh +++ b/source/particles/hadrons/barions/include/G4XibMinus.hh @@ -52,7 +52,7 @@ class G4XibMinus : public G4ParticleDefinition private: static G4XibMinus* theInstance; G4XibMinus(){} - ~G4XibMinus(){} + ~G4XibMinus() override= default; public: static G4XibMinus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4XibZero.hh b/source/particles/hadrons/barions/include/G4XibZero.hh index 1a562351ec6..67f138a4a01 100644 --- a/source/particles/hadrons/barions/include/G4XibZero.hh +++ b/source/particles/hadrons/barions/include/G4XibZero.hh @@ -52,7 +52,7 @@ class G4XibZero : public G4ParticleDefinition private: static G4XibZero* theInstance; G4XibZero(){} - ~G4XibZero(){} + ~G4XibZero() override= default; public: static G4XibZero* Definition(); diff --git a/source/particles/hadrons/barions/include/G4XicPlus.hh b/source/particles/hadrons/barions/include/G4XicPlus.hh index 9b6443d96ab..f7039b6b0f2 100644 --- a/source/particles/hadrons/barions/include/G4XicPlus.hh +++ b/source/particles/hadrons/barions/include/G4XicPlus.hh @@ -51,7 +51,7 @@ class G4XicPlus : public G4ParticleDefinition private: static G4XicPlus* theInstance; G4XicPlus(){} - ~G4XicPlus(){} + ~G4XicPlus() override= default; public: static G4XicPlus* Definition(); diff --git a/source/particles/hadrons/barions/include/G4XicZero.hh b/source/particles/hadrons/barions/include/G4XicZero.hh index 4b765f8b742..29d3390107c 100644 --- a/source/particles/hadrons/barions/include/G4XicZero.hh +++ b/source/particles/hadrons/barions/include/G4XicZero.hh @@ -51,7 +51,7 @@ class G4XicZero : public G4ParticleDefinition private: static G4XicZero* theInstance; G4XicZero(){} - ~G4XicZero(){} + ~G4XicZero() override= default; public: static G4XicZero* Definition(); diff --git a/source/particles/hadrons/barions/src/G4AntiLambda.cc b/source/particles/hadrons/barions/src/G4AntiLambda.cc index 141f37e1f62..e41238e4ea7 100644 --- a/source/particles/hadrons/barions/src/G4AntiLambda.cc +++ b/source/particles/hadrons/barions/src/G4AntiLambda.cc @@ -47,16 +47,16 @@ // ### AntiLambda ### // ###################################################################### -G4AntiLambda* G4AntiLambda::theInstance = 0; +G4AntiLambda* G4AntiLambda::theInstance = nullptr; G4AntiLambda* G4AntiLambda::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_lambda"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4AntiLambda* G4AntiLambda::Definition() 1, +1, 0, 0, 0, 0, "baryon", 0, -1, -3122, - false, 0.2631*ns, NULL, + false, 0.2631*ns, nullptr, false, "lambda"); // Magnetic Moment @@ -81,10 +81,10 @@ G4AntiLambda* G4AntiLambda::Definition() anInstance->SetPDGMagneticMoment( 0.613 * mN); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[2]; + auto mode = new G4VDecayChannel*[2]; // anti_lambda -> anti_proton + pi+ mode[0] = new G4PhaseSpaceDecayChannel("anti_lambda",0.639,2,"anti_proton","pi+"); // anti_lambda -> anti_neutron + pi0 diff --git a/source/particles/hadrons/barions/src/G4AntiLambdab.cc b/source/particles/hadrons/barions/src/G4AntiLambdab.cc index 92f9d210e22..cae8e5d192e 100644 --- a/source/particles/hadrons/barions/src/G4AntiLambdab.cc +++ b/source/particles/hadrons/barions/src/G4AntiLambdab.cc @@ -47,16 +47,16 @@ // ### AntiLambdab ### // ###################################################################### -G4AntiLambdab* G4AntiLambdab::theInstance = 0; +G4AntiLambdab* G4AntiLambdab::theInstance = nullptr; G4AntiLambdab* G4AntiLambdab::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_lambda_b"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4AntiLambdab* G4AntiLambdab::Definition() 1, +1, 0, 0, 0, 0, "baryon", 0, -1, -5122, - false, 1.470e-3*ns, NULL, + false, 1.470e-3*ns, nullptr, false, "lambda_b"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/barions/src/G4AntiLambdacPlus.cc b/source/particles/hadrons/barions/src/G4AntiLambdacPlus.cc index 8750b243de4..9d1440f41f8 100644 --- a/source/particles/hadrons/barions/src/G4AntiLambdacPlus.cc +++ b/source/particles/hadrons/barions/src/G4AntiLambdacPlus.cc @@ -46,16 +46,16 @@ // ### AntiLambdacPlus ### // ###################################################################### -G4AntiLambdacPlus* G4AntiLambdacPlus::theInstance = 0; +G4AntiLambdacPlus* G4AntiLambdacPlus::theInstance = nullptr; G4AntiLambdacPlus* G4AntiLambdacPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_lambda_c+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -72,7 +72,7 @@ G4AntiLambdacPlus* G4AntiLambdacPlus::Definition() 1, +1, 0, 0, 0, 0, "baryon", 0, -1, -4122, - false, 0.200e-3*ns, NULL, + false, 0.200e-3*ns, nullptr, false, "lambda_c"); // decay mode is not defined here, with expectation of pre-assigned. diff --git a/source/particles/hadrons/barions/src/G4AntiNeutron.cc b/source/particles/hadrons/barions/src/G4AntiNeutron.cc index 181d2930d7f..f9bef8a34b8 100644 --- a/source/particles/hadrons/barions/src/G4AntiNeutron.cc +++ b/source/particles/hadrons/barions/src/G4AntiNeutron.cc @@ -47,16 +47,16 @@ // ###################################################################### // ### ANTI NEUTRON ### // ###################################################################### -G4AntiNeutron* G4AntiNeutron::theInstance = 0; +G4AntiNeutron* G4AntiNeutron::theInstance = nullptr; G4AntiNeutron* G4AntiNeutron::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_neutron"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -75,14 +75,14 @@ G4AntiNeutron* G4AntiNeutron::Definition() 1, +1, 0, 1, +1, 0, "baryon", 0, -1, -2112, - false, 880.2*second, NULL, + false, 880.2*second, nullptr, false, "nucleon", 2112 ); // Magnetic Moment G4double mN = eplus*hbar_Planck/2./(proton_mass_c2 /c_squared); anInstance->SetPDGMagneticMoment( 1.9130427 * mN); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create a decay channel G4VDecayChannel* mode = new G4NeutronBetaDecayChannel("anti_neutron",1.00); table->Insert(mode); diff --git a/source/particles/hadrons/barions/src/G4AntiOmegaMinus.cc b/source/particles/hadrons/barions/src/G4AntiOmegaMinus.cc index 669ed9f3f63..730e721bd79 100644 --- a/source/particles/hadrons/barions/src/G4AntiOmegaMinus.cc +++ b/source/particles/hadrons/barions/src/G4AntiOmegaMinus.cc @@ -47,16 +47,16 @@ // ### AntiOmegaMinus ### // ###################################################################### -G4AntiOmegaMinus* G4AntiOmegaMinus::theInstance = 0; +G4AntiOmegaMinus* G4AntiOmegaMinus::theInstance = nullptr; G4AntiOmegaMinus* G4AntiOmegaMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_omega-"; // search in particle table G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4AntiOmegaMinus* G4AntiOmegaMinus::Definition() 3, +1, 0, 0, 0, 0, "baryon", 0, -1, -3334, - false, 0.0821*ns, NULL, + false, 0.0821*ns, nullptr, false, "omega"); // Magnetic Moment @@ -81,10 +81,10 @@ G4AntiOmegaMinus* G4AntiOmegaMinus::Definition() anInstance->SetPDGMagneticMoment( -2.02 * mN); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[3]; + auto mode = new G4VDecayChannel*[3]; // anti_omega- -> anti_lambda + kaon+ mode[0] = new G4PhaseSpaceDecayChannel("anti_omega-",0.678,2,"anti_lambda","kaon+"); // anti_omega- -> anti_xi0 + pi+ diff --git a/source/particles/hadrons/barions/src/G4AntiOmegabMinus.cc b/source/particles/hadrons/barions/src/G4AntiOmegabMinus.cc index 527edc3ed92..e7eec82aca4 100644 --- a/source/particles/hadrons/barions/src/G4AntiOmegabMinus.cc +++ b/source/particles/hadrons/barions/src/G4AntiOmegabMinus.cc @@ -46,16 +46,16 @@ // ### AntiOmegabMinus ### // ###################################################################### -G4AntiOmegabMinus* G4AntiOmegabMinus::theInstance = 0; +G4AntiOmegabMinus* G4AntiOmegabMinus::theInstance = nullptr; G4AntiOmegabMinus* G4AntiOmegabMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_omega_b-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -72,7 +72,7 @@ G4AntiOmegabMinus* G4AntiOmegabMinus::Definition() 1, +1, 0, 0, 0, 0, "baryon", 0, -1, -5332, - false, 1.640e-3*ns, NULL, + false, 1.640e-3*ns, nullptr, false, "omega_b"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/barions/src/G4AntiOmegacZero.cc b/source/particles/hadrons/barions/src/G4AntiOmegacZero.cc index d52f8b8b137..9c037efdcb1 100644 --- a/source/particles/hadrons/barions/src/G4AntiOmegacZero.cc +++ b/source/particles/hadrons/barions/src/G4AntiOmegacZero.cc @@ -46,16 +46,16 @@ // ### AntiOmegacZero ### // ###################################################################### -G4AntiOmegacZero* G4AntiOmegacZero::theInstance = 0; +G4AntiOmegacZero* G4AntiOmegacZero::theInstance = nullptr; G4AntiOmegacZero* G4AntiOmegacZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_omega_c0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -72,7 +72,7 @@ G4AntiOmegacZero* G4AntiOmegacZero::Definition() 1, +1, 0, 0, 0, 0, "baryon", 0, -1, -4332, - false, 2.68e-4*ns, NULL, + false, 2.68e-4*ns, nullptr, false, "omega_c"); //Decay Table is not defined here, wth expectation of pre-assigned diff --git a/source/particles/hadrons/barions/src/G4AntiProton.cc b/source/particles/hadrons/barions/src/G4AntiProton.cc index e9253980194..d5e09b8641d 100644 --- a/source/particles/hadrons/barions/src/G4AntiProton.cc +++ b/source/particles/hadrons/barions/src/G4AntiProton.cc @@ -45,16 +45,16 @@ // ### ANTIPROTON ### // ###################################################################### -G4AntiProton* G4AntiProton::theInstance = 0; +G4AntiProton* G4AntiProton::theInstance = nullptr; G4AntiProton* G4AntiProton::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_proton"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4AntiProton* G4AntiProton::Definition() 1, +1, 0, 1, -1, 0, "baryon", 0, -1, -2212, - true, -1.0, NULL, + true, -1.0, nullptr, false, "nucleon", 2212 ); // Magnetic Moment diff --git a/source/particles/hadrons/barions/src/G4AntiSigmaMinus.cc b/source/particles/hadrons/barions/src/G4AntiSigmaMinus.cc index c64b921dd01..08f628e8a2c 100644 --- a/source/particles/hadrons/barions/src/G4AntiSigmaMinus.cc +++ b/source/particles/hadrons/barions/src/G4AntiSigmaMinus.cc @@ -47,16 +47,16 @@ // ### AntiSigmaMinus ### // ###################################################################### -G4AntiSigmaMinus* G4AntiSigmaMinus::theInstance = 0; +G4AntiSigmaMinus* G4AntiSigmaMinus::theInstance = nullptr; G4AntiSigmaMinus* G4AntiSigmaMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_sigma-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4AntiSigmaMinus* G4AntiSigmaMinus::Definition() 1, +1, 0, 2, +2, 0, "baryon", 0, -1, -3112, - false, 0.1479*ns, NULL, + false, 0.1479*ns, nullptr, false, "sigma"); // Magnetic Moment @@ -81,10 +81,10 @@ G4AntiSigmaMinus* G4AntiSigmaMinus::Definition() anInstance->SetPDGMagneticMoment( 1.160 * mN); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[1]; + auto mode = new G4VDecayChannel*[1]; // anti_sigma- -> anti_neutron + pi+ mode[0] = new G4PhaseSpaceDecayChannel("anti_sigma-",1.00,2,"anti_neutron","pi+"); diff --git a/source/particles/hadrons/barions/src/G4AntiSigmaPlus.cc b/source/particles/hadrons/barions/src/G4AntiSigmaPlus.cc index a8f1c559834..8a12ec30c26 100644 --- a/source/particles/hadrons/barions/src/G4AntiSigmaPlus.cc +++ b/source/particles/hadrons/barions/src/G4AntiSigmaPlus.cc @@ -47,16 +47,16 @@ // ### AntiSigmaPlus #### // ###################################################################### -G4AntiSigmaPlus* G4AntiSigmaPlus::theInstance = 0; +G4AntiSigmaPlus* G4AntiSigmaPlus::theInstance = nullptr; G4AntiSigmaPlus* G4AntiSigmaPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_sigma+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4AntiSigmaPlus* G4AntiSigmaPlus::Definition() 1, +1, 0, 2, -2, 0, "baryon", 0, -1, -3222, - false, 0.08018*ns, NULL, + false, 0.08018*ns, nullptr, false, "sigma"); // Magnetic Moment @@ -81,10 +81,10 @@ G4AntiSigmaPlus* G4AntiSigmaPlus::Definition() anInstance->SetPDGMagneticMoment( -2.458 * mN); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[2]; + auto mode = new G4VDecayChannel*[2]; // anti_sigma+ -> anti_proton + pi0 mode[0] = new G4PhaseSpaceDecayChannel("anti_sigma+",0.516,2,"anti_proton","pi0"); // anti_sigma+ -> anti_neutron + pi+ diff --git a/source/particles/hadrons/barions/src/G4AntiSigmaZero.cc b/source/particles/hadrons/barions/src/G4AntiSigmaZero.cc index 694cfc81a8a..7bf05bd8102 100644 --- a/source/particles/hadrons/barions/src/G4AntiSigmaZero.cc +++ b/source/particles/hadrons/barions/src/G4AntiSigmaZero.cc @@ -47,16 +47,16 @@ // ### AntiSigmaZero ### // ###################################################################### -G4AntiSigmaZero* G4AntiSigmaZero::theInstance = 0; +G4AntiSigmaZero* G4AntiSigmaZero::theInstance = nullptr; G4AntiSigmaZero* G4AntiSigmaZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_sigma0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,14 +73,14 @@ G4AntiSigmaZero* G4AntiSigmaZero::Definition() 1, +1, 0, 2, 0, 0, "baryon", 0, -1, -3212, - false, 7.4e-11*ns, NULL, + false, 7.4e-11*ns, nullptr, false, "sigma"); // Life time is given from width anInstance->SetPDGLifeTime( hbar_Planck/(anInstance->GetPDGWidth()) ); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels // anti_sigma0 -> anti_lambda + gamma diff --git a/source/particles/hadrons/barions/src/G4AntiSigmabMinus.cc b/source/particles/hadrons/barions/src/G4AntiSigmabMinus.cc index 763911a9c3f..20443e4577a 100644 --- a/source/particles/hadrons/barions/src/G4AntiSigmabMinus.cc +++ b/source/particles/hadrons/barions/src/G4AntiSigmabMinus.cc @@ -47,16 +47,16 @@ // ### AntiSigmabMinus ### // ###################################################################### -G4AntiSigmabMinus* G4AntiSigmabMinus::theInstance = 0; +G4AntiSigmabMinus* G4AntiSigmabMinus::theInstance = nullptr; G4AntiSigmabMinus* G4AntiSigmabMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_sigma_b-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (theInstance ==0) + if (theInstance ==nullptr) { // create particle // @@ -73,14 +73,14 @@ G4AntiSigmabMinus* G4AntiSigmabMinus::Definition() 1, +1, 0, 2, +2, 0, "baryon", 0, -1, -5112, - false, 0.0*ns, NULL, + false, 0.0*ns, nullptr, false, "sigma_b"); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[1]; + auto mode = new G4VDecayChannel*[1]; // anti_sigma_b- -> anti_lambda_b + pi+ mode[0] = new G4PhaseSpaceDecayChannel("anti_sigma_b-",1.000,2,"anti_lambda_b","pi+"); diff --git a/source/particles/hadrons/barions/src/G4AntiSigmabPlus.cc b/source/particles/hadrons/barions/src/G4AntiSigmabPlus.cc index 6ca6fbcbc0f..4a3394c0359 100644 --- a/source/particles/hadrons/barions/src/G4AntiSigmabPlus.cc +++ b/source/particles/hadrons/barions/src/G4AntiSigmabPlus.cc @@ -47,16 +47,16 @@ // ### AntiSigmabPlus ### // ###################################################################### -G4AntiSigmabPlus* G4AntiSigmabPlus::theInstance = 0; +G4AntiSigmabPlus* G4AntiSigmabPlus::theInstance = nullptr; G4AntiSigmabPlus* G4AntiSigmabPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_sigma_b+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (theInstance ==0) + if (theInstance ==nullptr) { // create particle // @@ -73,14 +73,14 @@ G4AntiSigmabPlus* G4AntiSigmabPlus::Definition() 1, +1, 0, 2, -2, 0, "baryon", 0, -1, -5222, - false, 0.0*ns, NULL, + false, 0.0*ns, nullptr, false, "sigma_b"); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[1]; + auto mode = new G4VDecayChannel*[1]; // anti_sigma_b+ -> anti_lambda_b + pi- mode[0] = new G4PhaseSpaceDecayChannel("anti_sigma_b+",1.000,2,"anti_lambda_b","pi-"); diff --git a/source/particles/hadrons/barions/src/G4AntiSigmabZero.cc b/source/particles/hadrons/barions/src/G4AntiSigmabZero.cc index c29c646cfe6..1ecea49c5c3 100644 --- a/source/particles/hadrons/barions/src/G4AntiSigmabZero.cc +++ b/source/particles/hadrons/barions/src/G4AntiSigmabZero.cc @@ -47,16 +47,16 @@ // ### AntiSigmabZero ### // ###################################################################### -G4AntiSigmabZero* G4AntiSigmabZero::theInstance = 0; +G4AntiSigmabZero* G4AntiSigmabZero::theInstance = nullptr; G4AntiSigmabZero* G4AntiSigmabZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_sigma_b0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (theInstance ==0) + if (theInstance ==nullptr) { // create particle // @@ -73,14 +73,14 @@ G4AntiSigmabZero* G4AntiSigmabZero::Definition() 1, +1, 0, 2, 0, 0, "baryon", 0, -1, -5212, - false, 0.0*ns, NULL, + false, 0.0*ns, nullptr, false, "sigma_b"); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[1]; + auto mode = new G4VDecayChannel*[1]; // anti_sigma_b0 -> lambda_b + pi0 mode[0] = new G4PhaseSpaceDecayChannel("anti_sigma_b0",1.000,2,"anti_lambda_b","pi0"); diff --git a/source/particles/hadrons/barions/src/G4AntiSigmacPlus.cc b/source/particles/hadrons/barions/src/G4AntiSigmacPlus.cc index f959b06f364..eac0ef03099 100644 --- a/source/particles/hadrons/barions/src/G4AntiSigmacPlus.cc +++ b/source/particles/hadrons/barions/src/G4AntiSigmacPlus.cc @@ -46,16 +46,16 @@ // ### AntiSigmacPlus ### // ###################################################################### -G4AntiSigmacPlus* G4AntiSigmacPlus::theInstance = 0; +G4AntiSigmacPlus* G4AntiSigmacPlus::theInstance = nullptr; G4AntiSigmacPlus* G4AntiSigmacPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_sigma_c+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -72,13 +72,13 @@ G4AntiSigmacPlus* G4AntiSigmacPlus::Definition() 1, +1, 0, 2, 0, 0, "baryon", 0, -1, -4212, - false, 0.0*ns, NULL, + false, 0.0*ns, nullptr, false, "sigma_c"); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[1]; + auto mode = new G4VDecayChannel*[1]; // anti_sigmac+ -> anti_lambda_c + pi0 mode[0] = new G4PhaseSpaceDecayChannel("anti_sigma_c+",1.000,2,"anti_lambda_c+","pi0"); diff --git a/source/particles/hadrons/barions/src/G4AntiSigmacPlusPlus.cc b/source/particles/hadrons/barions/src/G4AntiSigmacPlusPlus.cc index d4bc40c1054..b6166b49972 100644 --- a/source/particles/hadrons/barions/src/G4AntiSigmacPlusPlus.cc +++ b/source/particles/hadrons/barions/src/G4AntiSigmacPlusPlus.cc @@ -46,16 +46,16 @@ // ### AntiSigmacPlusPlus ### // ###################################################################### -G4AntiSigmacPlusPlus* G4AntiSigmacPlusPlus::theInstance = 0; +G4AntiSigmacPlusPlus* G4AntiSigmacPlusPlus::theInstance = nullptr; G4AntiSigmacPlusPlus* G4AntiSigmacPlusPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_sigma_c++"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -72,13 +72,13 @@ G4AntiSigmacPlusPlus* G4AntiSigmacPlusPlus::Definition() 1, +1, 0, 2, -2, 0, "baryon", 0, -1, -4222, - false, 0.0*ns, NULL, + false, 0.0*ns, nullptr, false, "sigma_c"); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[1]; + auto mode = new G4VDecayChannel*[1]; // anti_sigma_c++ -> anti_lambda_c+ + pi- mode[0] = new G4PhaseSpaceDecayChannel("anti_sigma_c++",1.000,2,"anti_lambda_c+","pi-"); diff --git a/source/particles/hadrons/barions/src/G4AntiSigmacZero.cc b/source/particles/hadrons/barions/src/G4AntiSigmacZero.cc index 20c6f09da4c..222f63eb118 100644 --- a/source/particles/hadrons/barions/src/G4AntiSigmacZero.cc +++ b/source/particles/hadrons/barions/src/G4AntiSigmacZero.cc @@ -46,16 +46,16 @@ // ### AntiSigmacZero ### // ###################################################################### -G4AntiSigmacZero* G4AntiSigmacZero::theInstance = 0; +G4AntiSigmacZero* G4AntiSigmacZero::theInstance = nullptr; G4AntiSigmacZero* G4AntiSigmacZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_sigma_c0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -72,13 +72,13 @@ G4AntiSigmacZero* G4AntiSigmacZero::Definition() 1, +1, 0, 2, +2, 0, "baryon", 0, -1, -4112, - false, 0.0*ns, NULL, + false, 0.0*ns, nullptr, false, "sigma_c"); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[1]; + auto mode = new G4VDecayChannel*[1]; // anti_sigmac0 -> anti_lambda_c+ + pi+ mode[0] = new G4PhaseSpaceDecayChannel("anti_sigma_c0",1.000,2,"anti_lambda_c+","pi+"); diff --git a/source/particles/hadrons/barions/src/G4AntiXiMinus.cc b/source/particles/hadrons/barions/src/G4AntiXiMinus.cc index 09a7213830c..abafc8f1afb 100644 --- a/source/particles/hadrons/barions/src/G4AntiXiMinus.cc +++ b/source/particles/hadrons/barions/src/G4AntiXiMinus.cc @@ -47,16 +47,16 @@ // ### AntiXiMinus ### // ###################################################################### -G4AntiXiMinus* G4AntiXiMinus::theInstance = 0; +G4AntiXiMinus* G4AntiXiMinus::theInstance = nullptr; G4AntiXiMinus* G4AntiXiMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_xi-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4AntiXiMinus* G4AntiXiMinus::Definition() 1, +1, 0, 1, +1, 0, "baryon", 0, -1, -3312, - false, 0.1639*ns, NULL, + false, 0.1639*ns, nullptr, false, "xi"); // Magnetic Moment @@ -81,9 +81,9 @@ G4AntiXiMinus* G4AntiXiMinus::Definition() anInstance->SetPDGMagneticMoment( 0.6507 * mN); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[1]; + auto mode = new G4VDecayChannel*[1]; // anti_xi- -> anti_lambda + pi+ mode[0] = new G4PhaseSpaceDecayChannel("anti_xi-",1.000,2,"anti_lambda","pi+"); diff --git a/source/particles/hadrons/barions/src/G4AntiXiZero.cc b/source/particles/hadrons/barions/src/G4AntiXiZero.cc index 2373a905601..bd5aae6dc13 100644 --- a/source/particles/hadrons/barions/src/G4AntiXiZero.cc +++ b/source/particles/hadrons/barions/src/G4AntiXiZero.cc @@ -47,16 +47,16 @@ // ### AntiXiZero ### // ###################################################################### -G4AntiXiZero* G4AntiXiZero::theInstance = 0; +G4AntiXiZero* G4AntiXiZero::theInstance = nullptr; G4AntiXiZero* G4AntiXiZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_xi0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4AntiXiZero* G4AntiXiZero::Definition() 1, +1, 0, 1, -1, 0, "baryon", 0, -1, -3322, - false, 0.290*ns, NULL, + false, 0.290*ns, nullptr, false, "xi"); // Magnetic Moment @@ -81,10 +81,10 @@ G4AntiXiZero* G4AntiXiZero::Definition() anInstance->SetPDGMagneticMoment( 1.250 * mN); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[1]; + auto mode = new G4VDecayChannel*[1]; // anti_xi0 -> anti_lambda + pi0 mode[0] = new G4PhaseSpaceDecayChannel("anti_xi0",1.000,2,"anti_lambda","pi0"); diff --git a/source/particles/hadrons/barions/src/G4AntiXibMinus.cc b/source/particles/hadrons/barions/src/G4AntiXibMinus.cc index a04e280449e..59753b57b2b 100644 --- a/source/particles/hadrons/barions/src/G4AntiXibMinus.cc +++ b/source/particles/hadrons/barions/src/G4AntiXibMinus.cc @@ -47,16 +47,16 @@ // ### AntiXibMinus ### // ###################################################################### -G4AntiXibMinus* G4AntiXibMinus::theInstance = 0; +G4AntiXibMinus* G4AntiXibMinus::theInstance = nullptr; G4AntiXibMinus* G4AntiXibMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_xi_b-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4AntiXibMinus* G4AntiXibMinus::Definition() 1, +1, 0, 1, +1, 0, "baryon", 0, -1, -5132, - false, 1.571e-3*ns, NULL, + false, 1.571e-3*ns, nullptr, false, "xi_b"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/barions/src/G4AntiXibZero.cc b/source/particles/hadrons/barions/src/G4AntiXibZero.cc index 0d3112b161a..9d0ac809c31 100644 --- a/source/particles/hadrons/barions/src/G4AntiXibZero.cc +++ b/source/particles/hadrons/barions/src/G4AntiXibZero.cc @@ -47,16 +47,16 @@ // ### AntiXibZero ### // ###################################################################### -G4AntiXibZero* G4AntiXibZero::theInstance = 0; +G4AntiXibZero* G4AntiXibZero::theInstance = nullptr; G4AntiXibZero* G4AntiXibZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_xi_b0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4AntiXibZero* G4AntiXibZero::Definition() 1, +1, 0, 1, -1, 0, "baryon", 0, -1, -5232, - false, 1.479e-3*ns, NULL, + false, 1.479e-3*ns, nullptr, false, "xi_b"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/barions/src/G4AntiXicPlus.cc b/source/particles/hadrons/barions/src/G4AntiXicPlus.cc index bac338c0d54..5932defdf82 100644 --- a/source/particles/hadrons/barions/src/G4AntiXicPlus.cc +++ b/source/particles/hadrons/barions/src/G4AntiXicPlus.cc @@ -46,16 +46,16 @@ // ### AntiXicPlus ### // ###################################################################### -G4AntiXicPlus* G4AntiXicPlus::theInstance = 0; +G4AntiXicPlus* G4AntiXicPlus::theInstance = nullptr; G4AntiXicPlus* G4AntiXicPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_xi_c+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -72,7 +72,7 @@ G4AntiXicPlus* G4AntiXicPlus::Definition() 1, +1, 0, 1, -1, 0, "baryon", 0, -1, -4232, - false, 0.442e-3*ns, NULL, + false, 0.442e-3*ns, nullptr, false, "xi_c"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/barions/src/G4AntiXicZero.cc b/source/particles/hadrons/barions/src/G4AntiXicZero.cc index 8705c3e5437..cb86dba4375 100644 --- a/source/particles/hadrons/barions/src/G4AntiXicZero.cc +++ b/source/particles/hadrons/barions/src/G4AntiXicZero.cc @@ -46,16 +46,16 @@ // ### AntiXicZero ### // ###################################################################### -G4AntiXicZero* G4AntiXicZero::theInstance = 0; +G4AntiXicZero* G4AntiXicZero::theInstance = nullptr; G4AntiXicZero* G4AntiXicZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_xi_c0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -72,7 +72,7 @@ G4AntiXicZero* G4AntiXicZero::Definition() 1, +1, 0, 1, +1, 0, "baryon", 0, -1, -4132, - false, 1.519e-4*ns, NULL, + false, 1.519e-4*ns, nullptr, false, "xi_c"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/barions/src/G4BaryonConstructor.cc b/source/particles/hadrons/barions/src/G4BaryonConstructor.cc index 76c004d4da8..1120739d284 100644 --- a/source/particles/hadrons/barions/src/G4BaryonConstructor.cc +++ b/source/particles/hadrons/barions/src/G4BaryonConstructor.cc @@ -89,15 +89,6 @@ #include "G4AntiOmegabMinus.hh" -G4BaryonConstructor::G4BaryonConstructor() -{ -} - -G4BaryonConstructor::~G4BaryonConstructor() -{ -} - - void G4BaryonConstructor::ConstructParticle() { ConstructNucleons(); diff --git a/source/particles/hadrons/barions/src/G4Lambda.cc b/source/particles/hadrons/barions/src/G4Lambda.cc index a92f0ff4ac2..57a05ad9bb1 100644 --- a/source/particles/hadrons/barions/src/G4Lambda.cc +++ b/source/particles/hadrons/barions/src/G4Lambda.cc @@ -47,16 +47,16 @@ // ### Lambda ### // ###################################################################### -G4Lambda* G4Lambda::theInstance = 0; +G4Lambda* G4Lambda::theInstance = nullptr; G4Lambda* G4Lambda::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "lambda"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4Lambda* G4Lambda::Definition() 1, +1, 0, 0, 0, 0, "baryon", 0, +1, 3122, - false, 0.2631*ns, NULL, + false, 0.2631*ns, nullptr, false, "lambda"); // Magnetic Moment @@ -81,10 +81,10 @@ G4Lambda* G4Lambda::Definition() anInstance->SetPDGMagneticMoment( -0.613 * mN); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[2]; + auto mode = new G4VDecayChannel*[2]; // lambda -> proton + pi- mode[0] = new G4PhaseSpaceDecayChannel("lambda",0.639,2,"proton","pi-"); // lambda -> neutron + pi0 diff --git a/source/particles/hadrons/barions/src/G4Lambdab.cc b/source/particles/hadrons/barions/src/G4Lambdab.cc index dc5a300367d..5e8f6f3e791 100644 --- a/source/particles/hadrons/barions/src/G4Lambdab.cc +++ b/source/particles/hadrons/barions/src/G4Lambdab.cc @@ -47,16 +47,16 @@ // ### Lambdab ### // ###################################################################### -G4Lambdab* G4Lambdab::theInstance = 0; +G4Lambdab* G4Lambdab::theInstance = nullptr; G4Lambdab* G4Lambdab::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "lambda_b"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4Lambdab* G4Lambdab::Definition() 1, +1, 0, 0, 0, 0, "baryon", 0, +1, 5122, - false, 1.470e-3*ns, NULL, + false, 1.470e-3*ns, nullptr, false, "lambda_b"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/barions/src/G4LambdacPlus.cc b/source/particles/hadrons/barions/src/G4LambdacPlus.cc index 92a78c0ee3a..e55ef55e331 100644 --- a/source/particles/hadrons/barions/src/G4LambdacPlus.cc +++ b/source/particles/hadrons/barions/src/G4LambdacPlus.cc @@ -46,16 +46,16 @@ // ### LambdacPlus ### // ###################################################################### -G4LambdacPlus* G4LambdacPlus::theInstance = 0; +G4LambdacPlus* G4LambdacPlus::theInstance = nullptr; G4LambdacPlus* G4LambdacPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "lambda_c+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -72,7 +72,7 @@ G4LambdacPlus* G4LambdacPlus::Definition() 1, +1, 0, 0, 0, 0, "baryon", 0, +1, 4122, - false, 0.200e-3*ns, NULL, + false, 0.200e-3*ns, nullptr, false, "lambda_c"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/barions/src/G4Neutron.cc b/source/particles/hadrons/barions/src/G4Neutron.cc index 687cbb350e9..8e49ec92723 100644 --- a/source/particles/hadrons/barions/src/G4Neutron.cc +++ b/source/particles/hadrons/barions/src/G4Neutron.cc @@ -48,16 +48,16 @@ // ###################################################################### // ### NEUTRON ### // ###################################################################### -G4Neutron* G4Neutron::theInstance = 0; +G4Neutron* G4Neutron::theInstance = nullptr; G4Neutron* G4Neutron::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "neutron"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast(pTable->FindParticle(name)); - if (anInstance ==0) + auto anInstance = static_cast(pTable->FindParticle(name)); + if (anInstance ==nullptr) { // create particle // @@ -76,7 +76,7 @@ G4Neutron* G4Neutron::Definition() 1, +1, 0, 1, -1, 0, "baryon", 0, +1, 2112, - false, 880.2*second, NULL, + false, 880.2*second, nullptr, false, "nucleon", -2112, 0.0, 0 ); @@ -84,7 +84,7 @@ G4Neutron* G4Neutron::Definition() G4double mN = eplus*hbar_Planck/2./(proton_mass_c2 /c_squared); anInstance->SetPDGMagneticMoment( -1.9130427 * mN); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create a decay channel G4VDecayChannel* mode = new G4NeutronBetaDecayChannel("neutron",1.00); table->Insert(mode); diff --git a/source/particles/hadrons/barions/src/G4OmegaMinus.cc b/source/particles/hadrons/barions/src/G4OmegaMinus.cc index a417f7432a4..478004c6861 100644 --- a/source/particles/hadrons/barions/src/G4OmegaMinus.cc +++ b/source/particles/hadrons/barions/src/G4OmegaMinus.cc @@ -47,16 +47,16 @@ // ### OmegaMinus ### // ###################################################################### -G4OmegaMinus* G4OmegaMinus::theInstance = 0; +G4OmegaMinus* G4OmegaMinus::theInstance = nullptr; G4OmegaMinus* G4OmegaMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "omega-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4OmegaMinus* G4OmegaMinus::Definition() 3, +1, 0, 0, 0, 0, "baryon", 0, +1, 3334, - false, 0.0821*ns, NULL, + false, 0.0821*ns, nullptr, false, "omega"); // Magnetic Moment @@ -81,10 +81,10 @@ G4OmegaMinus* G4OmegaMinus::Definition() anInstance->SetPDGMagneticMoment( -2.02 * mN); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[3]; + auto mode = new G4VDecayChannel*[3]; // omega- -> lambda + kaon- mode[0] = new G4PhaseSpaceDecayChannel("omega-",0.678,2,"lambda","kaon-"); // omega- -> xi0 + pi- diff --git a/source/particles/hadrons/barions/src/G4OmegabMinus.cc b/source/particles/hadrons/barions/src/G4OmegabMinus.cc index 9fcc0a05e66..ddd2c6a3dfd 100644 --- a/source/particles/hadrons/barions/src/G4OmegabMinus.cc +++ b/source/particles/hadrons/barions/src/G4OmegabMinus.cc @@ -46,16 +46,16 @@ // ### OmegabMinus ### // ###################################################################### -G4OmegabMinus* G4OmegabMinus::theInstance = 0; +G4OmegabMinus* G4OmegabMinus::theInstance = nullptr; G4OmegabMinus* G4OmegabMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "omega_b-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -72,7 +72,7 @@ G4OmegabMinus* G4OmegabMinus::Definition() 1, +1, 0, 0, 0, 0, "baryon", 0, +1, 5332, - false, 1.640e-3*ns, NULL, + false, 1.640e-3*ns, nullptr, false, "omega_b"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/barions/src/G4OmegacZero.cc b/source/particles/hadrons/barions/src/G4OmegacZero.cc index 54df1cb290f..674af1a6af7 100644 --- a/source/particles/hadrons/barions/src/G4OmegacZero.cc +++ b/source/particles/hadrons/barions/src/G4OmegacZero.cc @@ -46,16 +46,16 @@ // ### OmegacZero ### // ###################################################################### -G4OmegacZero* G4OmegacZero::theInstance = 0; +G4OmegacZero* G4OmegacZero::theInstance = nullptr; G4OmegacZero* G4OmegacZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "omega_c0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -72,7 +72,7 @@ G4OmegacZero* G4OmegacZero::Definition() 1, +1, 0, 0, 0, 0, "baryon", 0, +1, 4332, - false, 2.68e-4*ns, NULL, + false, 2.68e-4*ns, nullptr, false, "omega_c"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/barions/src/G4Proton.cc b/source/particles/hadrons/barions/src/G4Proton.cc index d38c678ff10..1157fa2618f 100644 --- a/source/particles/hadrons/barions/src/G4Proton.cc +++ b/source/particles/hadrons/barions/src/G4Proton.cc @@ -43,16 +43,16 @@ // ###################################################################### // ### PROTON ### // ###################################################################### -G4Proton* G4Proton::theInstance = 0; +G4Proton* G4Proton::theInstance = nullptr; G4Proton* G4Proton::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "proton"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast(pTable->FindParticle(name)); - if (anInstance ==0) + auto anInstance = static_cast(pTable->FindParticle(name)); + if (anInstance ==nullptr) { // create particle // @@ -71,7 +71,7 @@ G4Proton* G4Proton::Definition() 1, +1, 0, 1, +1, 0, "baryon", 0, +1, 2212, - true, -1.0, NULL, + true, -1.0, nullptr, false, "nucleon", -2212, 0.0, 0 ); diff --git a/source/particles/hadrons/barions/src/G4SigmaMinus.cc b/source/particles/hadrons/barions/src/G4SigmaMinus.cc index 281d59975d9..750cd4d9560 100644 --- a/source/particles/hadrons/barions/src/G4SigmaMinus.cc +++ b/source/particles/hadrons/barions/src/G4SigmaMinus.cc @@ -47,16 +47,16 @@ // ### SigmaMinus ### // ###################################################################### -G4SigmaMinus* G4SigmaMinus::theInstance = 0; +G4SigmaMinus* G4SigmaMinus::theInstance = nullptr; G4SigmaMinus* G4SigmaMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "sigma-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4SigmaMinus* G4SigmaMinus::Definition() 1, +1, 0, 2, -2, 0, "baryon", 0, +1, 3112, - false, 0.1479*ns, NULL, + false, 0.1479*ns, nullptr, false, "sigma"); // Magnetic Moment @@ -81,10 +81,10 @@ G4SigmaMinus* G4SigmaMinus::Definition() anInstance->SetPDGMagneticMoment( -1.160 * mN); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[1]; + auto mode = new G4VDecayChannel*[1]; // sigma- -> neutron + pi- mode[0] = new G4PhaseSpaceDecayChannel("sigma-",1.00,2,"neutron","pi-"); diff --git a/source/particles/hadrons/barions/src/G4SigmaPlus.cc b/source/particles/hadrons/barions/src/G4SigmaPlus.cc index 23047a727f1..45a1de56f9f 100644 --- a/source/particles/hadrons/barions/src/G4SigmaPlus.cc +++ b/source/particles/hadrons/barions/src/G4SigmaPlus.cc @@ -47,16 +47,16 @@ // ### SigmaPlus ### // ###################################################################### -G4SigmaPlus* G4SigmaPlus::theInstance = 0; +G4SigmaPlus* G4SigmaPlus::theInstance = nullptr; G4SigmaPlus* G4SigmaPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "sigma+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4SigmaPlus* G4SigmaPlus::Definition() 1, +1, 0, 2, +2, 0, "baryon", 0, +1, 3222, - false, 0.08018*ns, NULL, + false, 0.08018*ns, nullptr, false, "sigma"); // Magnetic Moment @@ -81,10 +81,10 @@ G4SigmaPlus* G4SigmaPlus::Definition() anInstance->SetPDGMagneticMoment( 2.458 * mN); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[2]; + auto mode = new G4VDecayChannel*[2]; // sigma+ -> proton + pi0 mode[0] = new G4PhaseSpaceDecayChannel("sigma+",0.516,2,"proton","pi0"); // sigma+ -> neutron + pi+ diff --git a/source/particles/hadrons/barions/src/G4SigmaZero.cc b/source/particles/hadrons/barions/src/G4SigmaZero.cc index 6574e9d5a8b..837f273cb02 100644 --- a/source/particles/hadrons/barions/src/G4SigmaZero.cc +++ b/source/particles/hadrons/barions/src/G4SigmaZero.cc @@ -47,16 +47,16 @@ // ### SigmaZero ### // ###################################################################### -G4SigmaZero* G4SigmaZero::theInstance = 0; +G4SigmaZero* G4SigmaZero::theInstance = nullptr; G4SigmaZero* G4SigmaZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "sigma0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,13 +73,13 @@ G4SigmaZero* G4SigmaZero::Definition() 1, +1, 0, 2, 0, 0, "baryon", 0, +1, 3212, - false, 7.4e-11*ns, NULL, + false, 7.4e-11*ns, nullptr, false, "sigma"); // Life time is given from width anInstance->SetPDGLifeTime( hbar_Planck/(anInstance->GetPDGWidth()) ); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels // sigma0 -> lambda + gamma diff --git a/source/particles/hadrons/barions/src/G4SigmabMinus.cc b/source/particles/hadrons/barions/src/G4SigmabMinus.cc index 9669abdb786..e5a0ac40e63 100644 --- a/source/particles/hadrons/barions/src/G4SigmabMinus.cc +++ b/source/particles/hadrons/barions/src/G4SigmabMinus.cc @@ -47,16 +47,16 @@ // ### SigmabMinus ### // ###################################################################### -G4SigmabMinus* G4SigmabMinus::theInstance = 0; +G4SigmabMinus* G4SigmabMinus::theInstance = nullptr; G4SigmabMinus* G4SigmabMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "sigma_b-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (theInstance ==0) + if (theInstance ==nullptr) { // create particle // @@ -73,14 +73,14 @@ G4SigmabMinus* G4SigmabMinus::Definition() 1, +1, 0, 2, -2, 0, "baryon", 0, +1, 5112, - false, 0.0*ns, NULL, + false, 0.0*ns, nullptr, false, "sigma_b"); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[1]; + auto mode = new G4VDecayChannel*[1]; // sigma_b- -> lambda_b + pi- mode[0] = new G4PhaseSpaceDecayChannel("sigma_b-",1.000,2,"lambda_b","pi-"); diff --git a/source/particles/hadrons/barions/src/G4SigmabPlus.cc b/source/particles/hadrons/barions/src/G4SigmabPlus.cc index f3be1e2025d..56e84e717ed 100644 --- a/source/particles/hadrons/barions/src/G4SigmabPlus.cc +++ b/source/particles/hadrons/barions/src/G4SigmabPlus.cc @@ -47,16 +47,16 @@ // ### SigmabPlus ### // ###################################################################### -G4SigmabPlus* G4SigmabPlus::theInstance = 0; +G4SigmabPlus* G4SigmabPlus::theInstance = nullptr; G4SigmabPlus* G4SigmabPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "sigma_b+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (theInstance ==0) + if (theInstance ==nullptr) { // create particle // @@ -73,14 +73,14 @@ G4SigmabPlus* G4SigmabPlus::Definition() 1, +1, 0, 2, +2, 0, "baryon", 0, +1, 5222, - false, 0.0*ns, NULL, + false, 0.0*ns, nullptr, false, "sigma_b"); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[1]; + auto mode = new G4VDecayChannel*[1]; // sigma_b+ -> lambda_b + pi+ mode[0] = new G4PhaseSpaceDecayChannel("sigma_b+",1.000,2,"lambda_b","pi+"); diff --git a/source/particles/hadrons/barions/src/G4SigmabZero.cc b/source/particles/hadrons/barions/src/G4SigmabZero.cc index ce972dd08ff..96abd64e1b8 100644 --- a/source/particles/hadrons/barions/src/G4SigmabZero.cc +++ b/source/particles/hadrons/barions/src/G4SigmabZero.cc @@ -47,16 +47,16 @@ // ### SigmabZero ### // ###################################################################### -G4SigmabZero* G4SigmabZero::theInstance = 0; +G4SigmabZero* G4SigmabZero::theInstance = nullptr; G4SigmabZero* G4SigmabZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "sigma_b0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (theInstance ==0) + if (theInstance ==nullptr) { // create particle // @@ -73,14 +73,14 @@ G4SigmabZero* G4SigmabZero::Definition() 1, +1, 0, 2, 0, 0, "baryon", 0, +1, 5212, - false, 0.0*ns, NULL, + false, 0.0*ns, nullptr, false, "sigma_b"); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[1]; + auto mode = new G4VDecayChannel*[1]; // sigma_b0 -> lambda_b + pi0 mode[0] = new G4PhaseSpaceDecayChannel("sigma_b0",1.000,2,"lambda_b","pi0"); diff --git a/source/particles/hadrons/barions/src/G4SigmacPlus.cc b/source/particles/hadrons/barions/src/G4SigmacPlus.cc index 39f541794b9..e935b30170b 100644 --- a/source/particles/hadrons/barions/src/G4SigmacPlus.cc +++ b/source/particles/hadrons/barions/src/G4SigmacPlus.cc @@ -46,16 +46,16 @@ // ### SigmacPlus ### // ###################################################################### -G4SigmacPlus* G4SigmacPlus::theInstance = 0; +G4SigmacPlus* G4SigmacPlus::theInstance = nullptr; G4SigmacPlus* G4SigmacPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "sigma_c+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -72,13 +72,13 @@ G4SigmacPlus* G4SigmacPlus::Definition() 1, +1, 0, 2, 0, 0, "baryon", 0, +1, 4212, - false, 0.0*ns, NULL, + false, 0.0*ns, nullptr, false, "sigma_c"); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[1]; + auto mode = new G4VDecayChannel*[1]; // sigmac+ -> lambda_c + pi0 mode[0] = new G4PhaseSpaceDecayChannel("sigma_c+",1.000,2,"lambda_c+","pi0"); diff --git a/source/particles/hadrons/barions/src/G4SigmacPlusPlus.cc b/source/particles/hadrons/barions/src/G4SigmacPlusPlus.cc index 93c384d339a..cd8af015bbf 100644 --- a/source/particles/hadrons/barions/src/G4SigmacPlusPlus.cc +++ b/source/particles/hadrons/barions/src/G4SigmacPlusPlus.cc @@ -46,16 +46,16 @@ // ### SigmacPlusPlus ### // ###################################################################### -G4SigmacPlusPlus* G4SigmacPlusPlus::theInstance = 0; +G4SigmacPlusPlus* G4SigmacPlusPlus::theInstance = nullptr; G4SigmacPlusPlus* G4SigmacPlusPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "sigma_c++"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (theInstance ==0) + if (theInstance ==nullptr) { // create particle // @@ -72,13 +72,13 @@ G4SigmacPlusPlus* G4SigmacPlusPlus::Definition() 1, +1, 0, 2, +2, 0, "baryon", 0, +1, 4222, - false, 0.0*ns, NULL, + false, 0.0*ns, nullptr, false, "sigma_c"); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[1]; + auto mode = new G4VDecayChannel*[1]; // sigma_c++ -> lambda_c+ + pi+ mode[0] = new G4PhaseSpaceDecayChannel("sigma_c++",1.000,2,"lambda_c+","pi+"); diff --git a/source/particles/hadrons/barions/src/G4SigmacZero.cc b/source/particles/hadrons/barions/src/G4SigmacZero.cc index f573fb69b61..b7d14509cf2 100644 --- a/source/particles/hadrons/barions/src/G4SigmacZero.cc +++ b/source/particles/hadrons/barions/src/G4SigmacZero.cc @@ -46,16 +46,16 @@ // ### SigmacZero ### // ###################################################################### -G4SigmacZero* G4SigmacZero::theInstance = 0; +G4SigmacZero* G4SigmacZero::theInstance = nullptr; G4SigmacZero* G4SigmacZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "sigma_c0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -72,13 +72,13 @@ G4SigmacZero* G4SigmacZero::Definition() 1, +1, 0, 2, -1, 0, "baryon", 0, +1, 4112, - false, 0.0*ns, NULL, + false, 0.0*ns, nullptr, false, "sigma_c"); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[1]; + auto mode = new G4VDecayChannel*[1]; // sigmac0 -> lambda_c+ + pi- mode[0] = new G4PhaseSpaceDecayChannel("sigma_c0",1.000,2,"lambda_c+","pi-"); diff --git a/source/particles/hadrons/barions/src/G4XiMinus.cc b/source/particles/hadrons/barions/src/G4XiMinus.cc index 4a89829cedc..0c91cff4607 100644 --- a/source/particles/hadrons/barions/src/G4XiMinus.cc +++ b/source/particles/hadrons/barions/src/G4XiMinus.cc @@ -47,16 +47,16 @@ // ### XiMinus ### // ###################################################################### -G4XiMinus* G4XiMinus::theInstance = 0; +G4XiMinus* G4XiMinus::theInstance = nullptr; G4XiMinus* G4XiMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "xi-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4XiMinus* G4XiMinus::Definition() 1, +1, 0, 1, -1, 0, "baryon", 0, +1, 3312, - false, 0.1639*ns, NULL, + false, 0.1639*ns, nullptr, false, "xi"); // Magnetic Moment @@ -81,10 +81,10 @@ G4XiMinus* G4XiMinus::Definition() anInstance->SetPDGMagneticMoment( -0.6507 * mN); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[1]; + auto mode = new G4VDecayChannel*[1]; // xi- -> lambda + pi- mode[0] = new G4PhaseSpaceDecayChannel("xi-",1.000,2,"lambda","pi-"); diff --git a/source/particles/hadrons/barions/src/G4XiZero.cc b/source/particles/hadrons/barions/src/G4XiZero.cc index df3ec001ce0..17c36df34f8 100644 --- a/source/particles/hadrons/barions/src/G4XiZero.cc +++ b/source/particles/hadrons/barions/src/G4XiZero.cc @@ -47,16 +47,16 @@ // ### XiZero ### // ###################################################################### -G4XiZero* G4XiZero::theInstance = 0; +G4XiZero* G4XiZero::theInstance = nullptr; G4XiZero* G4XiZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "xi0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4XiZero* G4XiZero::Definition() 1, +1, 0, 1, +1, 0, "baryon", 0, +1, 3322, - false, 0.290*ns, NULL, + false, 0.290*ns, nullptr, false, "xi"); // Magnetic Moment @@ -81,10 +81,10 @@ G4XiZero* G4XiZero::Definition() anInstance->SetPDGMagneticMoment( -1.250 * mN); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[1]; + auto mode = new G4VDecayChannel*[1]; // xi0 -> lambda + pi0 mode[0] = new G4PhaseSpaceDecayChannel("xi0",1.000,2,"lambda","pi0"); diff --git a/source/particles/hadrons/barions/src/G4XibMinus.cc b/source/particles/hadrons/barions/src/G4XibMinus.cc index 02c0e446034..8c47d6c9c60 100644 --- a/source/particles/hadrons/barions/src/G4XibMinus.cc +++ b/source/particles/hadrons/barions/src/G4XibMinus.cc @@ -47,16 +47,16 @@ // ### XibMinus ### // ###################################################################### -G4XibMinus* G4XibMinus::theInstance = 0; +G4XibMinus* G4XibMinus::theInstance = nullptr; G4XibMinus* G4XibMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "xi_b-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4XibMinus* G4XibMinus::Definition() 1, +1, 0, 1, -1, 0, "baryon", 0, +1, 5132, - false, 1.571e-3*ns, NULL, + false, 1.571e-3*ns, nullptr, false, "xi_b"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/barions/src/G4XibZero.cc b/source/particles/hadrons/barions/src/G4XibZero.cc index 0d4abd13d1b..5722c532e26 100644 --- a/source/particles/hadrons/barions/src/G4XibZero.cc +++ b/source/particles/hadrons/barions/src/G4XibZero.cc @@ -47,16 +47,16 @@ // ### XibZero ### // ###################################################################### -G4XibZero* G4XibZero::theInstance = 0; +G4XibZero* G4XibZero::theInstance = nullptr; G4XibZero* G4XibZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "xi_b0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4XibZero* G4XibZero::Definition() 1, +1, 0, 1, +1, 0, "baryon", 0, +1, 5232, - false, 1.479e-3*ns, NULL, + false, 1.479e-3*ns, nullptr, false, "xi_b"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/barions/src/G4XicPlus.cc b/source/particles/hadrons/barions/src/G4XicPlus.cc index 57ace9d40bc..a6c77ccdc50 100644 --- a/source/particles/hadrons/barions/src/G4XicPlus.cc +++ b/source/particles/hadrons/barions/src/G4XicPlus.cc @@ -46,16 +46,16 @@ // ### XicPlus ### // ###################################################################### -G4XicPlus* G4XicPlus::theInstance = 0; +G4XicPlus* G4XicPlus::theInstance = nullptr; G4XicPlus* G4XicPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "xi_c+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -72,7 +72,7 @@ G4XicPlus* G4XicPlus::Definition() 1, +1, 0, 1, +1, 0, "baryon", 0, +1, 4232, - false, 0.442e-3*ns, NULL, + false, 0.442e-3*ns, nullptr, false, "xi_c"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/barions/src/G4XicZero.cc b/source/particles/hadrons/barions/src/G4XicZero.cc index 6918415e913..2bd89b5ffc9 100644 --- a/source/particles/hadrons/barions/src/G4XicZero.cc +++ b/source/particles/hadrons/barions/src/G4XicZero.cc @@ -46,16 +46,16 @@ // ### XicZero ### // ###################################################################### -G4XicZero* G4XicZero::theInstance = 0; +G4XicZero* G4XicZero::theInstance = nullptr; G4XicZero* G4XicZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "xi_c0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -72,7 +72,7 @@ G4XicZero* G4XicZero::Definition() 1, +1, 0, 1, -1, 0, "baryon", 0, +1, 4132, - false, 1.519e-4*ns, NULL, + false, 1.519e-4*ns, nullptr, false, "xi_c"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/ions/GNUmakefile b/source/particles/hadrons/ions/GNUmakefile deleted file mode 100644 index d9db62a205e..00000000000 --- a/source/particles/hadrons/ions/GNUmakefile +++ /dev/null @@ -1,20 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for ions library. Gabriele Cosmo, 18/9/96. -# -------------------------------------------------------------- - -name := G4ions - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4PARTICLES_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/particles/management/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/particles/hadrons/ions/include/G4Alpha.hh b/source/particles/hadrons/ions/include/G4Alpha.hh index efd11e4bf93..f1503457291 100644 --- a/source/particles/hadrons/ions/include/G4Alpha.hh +++ b/source/particles/hadrons/ions/include/G4Alpha.hh @@ -52,7 +52,7 @@ class G4Alpha : public G4Ions private: static G4Alpha* theInstance; G4Alpha(){} - ~G4Alpha(){} + ~G4Alpha() override= default; public: static G4Alpha* Definition(); diff --git a/source/particles/hadrons/ions/include/G4AntiAlpha.hh b/source/particles/hadrons/ions/include/G4AntiAlpha.hh index 1ad8ca81f39..a3ac6b30431 100644 --- a/source/particles/hadrons/ions/include/G4AntiAlpha.hh +++ b/source/particles/hadrons/ions/include/G4AntiAlpha.hh @@ -52,7 +52,7 @@ class G4AntiAlpha : public G4Ions private: static G4AntiAlpha* theInstance; G4AntiAlpha(){} - ~G4AntiAlpha(){} + ~G4AntiAlpha() override= default; public: static G4AntiAlpha* Definition(); diff --git a/source/particles/hadrons/ions/include/G4AntiDeuteron.hh b/source/particles/hadrons/ions/include/G4AntiDeuteron.hh index cb8a3d32070..5b8d18db06b 100644 --- a/source/particles/hadrons/ions/include/G4AntiDeuteron.hh +++ b/source/particles/hadrons/ions/include/G4AntiDeuteron.hh @@ -52,7 +52,7 @@ class G4AntiDeuteron : public G4Ions private: static G4AntiDeuteron* theInstance; G4AntiDeuteron(){} - ~G4AntiDeuteron(){} + ~G4AntiDeuteron() override= default; public: static G4AntiDeuteron* Definition(); diff --git a/source/particles/hadrons/ions/include/G4AntiDoubleHyperDoubleNeutron.hh b/source/particles/hadrons/ions/include/G4AntiDoubleHyperDoubleNeutron.hh index db72a0bb498..fb5a135e2a7 100644 --- a/source/particles/hadrons/ions/include/G4AntiDoubleHyperDoubleNeutron.hh +++ b/source/particles/hadrons/ions/include/G4AntiDoubleHyperDoubleNeutron.hh @@ -47,7 +47,7 @@ class G4AntiDoubleHyperDoubleNeutron : public G4Ions { private: static G4AntiDoubleHyperDoubleNeutron* theInstance; G4AntiDoubleHyperDoubleNeutron() {} - ~G4AntiDoubleHyperDoubleNeutron() {} + ~G4AntiDoubleHyperDoubleNeutron() override = default; }; #endif diff --git a/source/particles/hadrons/ions/include/G4AntiDoubleHyperH4.hh b/source/particles/hadrons/ions/include/G4AntiDoubleHyperH4.hh index c466b1cf773..2070acaa030 100644 --- a/source/particles/hadrons/ions/include/G4AntiDoubleHyperH4.hh +++ b/source/particles/hadrons/ions/include/G4AntiDoubleHyperH4.hh @@ -47,7 +47,7 @@ class G4AntiDoubleHyperH4 : public G4Ions { private: static G4AntiDoubleHyperH4* theInstance; G4AntiDoubleHyperH4() {} - ~G4AntiDoubleHyperH4() {} + ~G4AntiDoubleHyperH4() override = default; }; #endif diff --git a/source/particles/hadrons/ions/include/G4AntiHe3.hh b/source/particles/hadrons/ions/include/G4AntiHe3.hh index ed7214bf602..c2f9cf13b6a 100644 --- a/source/particles/hadrons/ions/include/G4AntiHe3.hh +++ b/source/particles/hadrons/ions/include/G4AntiHe3.hh @@ -52,7 +52,7 @@ class G4AntiHe3 : public G4Ions private: static G4AntiHe3* theInstance; G4AntiHe3(){} - ~G4AntiHe3(){} + ~G4AntiHe3() override= default; public: static G4AntiHe3* Definition(); diff --git a/source/particles/hadrons/ions/include/G4AntiHyperAlpha.hh b/source/particles/hadrons/ions/include/G4AntiHyperAlpha.hh index e52145b1ce6..d94f8f1c21f 100644 --- a/source/particles/hadrons/ions/include/G4AntiHyperAlpha.hh +++ b/source/particles/hadrons/ions/include/G4AntiHyperAlpha.hh @@ -47,7 +47,7 @@ class G4AntiHyperAlpha : public G4Ions { private: static G4AntiHyperAlpha* theInstance; G4AntiHyperAlpha() {} - ~G4AntiHyperAlpha() {} + ~G4AntiHyperAlpha() override = default; }; #endif diff --git a/source/particles/hadrons/ions/include/G4AntiHyperH4.hh b/source/particles/hadrons/ions/include/G4AntiHyperH4.hh index af22fffbec3..04cca8ef3c3 100644 --- a/source/particles/hadrons/ions/include/G4AntiHyperH4.hh +++ b/source/particles/hadrons/ions/include/G4AntiHyperH4.hh @@ -47,7 +47,7 @@ class G4AntiHyperH4 : public G4Ions { private: static G4AntiHyperH4* theInstance; G4AntiHyperH4() {} - ~G4AntiHyperH4() {} + ~G4AntiHyperH4() override = default; }; #endif diff --git a/source/particles/hadrons/ions/include/G4AntiHyperHe5.hh b/source/particles/hadrons/ions/include/G4AntiHyperHe5.hh index 18147e81164..e8d98dc8056 100644 --- a/source/particles/hadrons/ions/include/G4AntiHyperHe5.hh +++ b/source/particles/hadrons/ions/include/G4AntiHyperHe5.hh @@ -47,7 +47,7 @@ class G4AntiHyperHe5 : public G4Ions { private: static G4AntiHyperHe5* theInstance; G4AntiHyperHe5() {} - ~G4AntiHyperHe5() {} + ~G4AntiHyperHe5() override = default; }; #endif diff --git a/source/particles/hadrons/ions/include/G4AntiHyperTriton.hh b/source/particles/hadrons/ions/include/G4AntiHyperTriton.hh index 4ccccad135f..4018423f876 100644 --- a/source/particles/hadrons/ions/include/G4AntiHyperTriton.hh +++ b/source/particles/hadrons/ions/include/G4AntiHyperTriton.hh @@ -47,7 +47,7 @@ class G4AntiHyperTriton : public G4Ions { private: static G4AntiHyperTriton* theInstance; G4AntiHyperTriton() {} - ~G4AntiHyperTriton() {} + ~G4AntiHyperTriton() override = default; }; #endif diff --git a/source/particles/hadrons/ions/include/G4AntiTriton.hh b/source/particles/hadrons/ions/include/G4AntiTriton.hh index ad51bac7e88..8615c17238f 100644 --- a/source/particles/hadrons/ions/include/G4AntiTriton.hh +++ b/source/particles/hadrons/ions/include/G4AntiTriton.hh @@ -52,7 +52,7 @@ class G4AntiTriton : public G4Ions private: static G4AntiTriton* theInstance; G4AntiTriton(){} - ~G4AntiTriton(){} + ~G4AntiTriton() override= default; public: static G4AntiTriton* Definition(); diff --git a/source/particles/hadrons/ions/include/G4Deuteron.hh b/source/particles/hadrons/ions/include/G4Deuteron.hh index 150dfdcb62f..971fdb819a6 100644 --- a/source/particles/hadrons/ions/include/G4Deuteron.hh +++ b/source/particles/hadrons/ions/include/G4Deuteron.hh @@ -52,7 +52,7 @@ class G4Deuteron : public G4Ions private: static G4Deuteron* theInstance; G4Deuteron(){} - ~G4Deuteron(){} + ~G4Deuteron() override= default; public: static G4Deuteron* Definition(); diff --git a/source/particles/hadrons/ions/include/G4DoubleHyperDoubleNeutron.hh b/source/particles/hadrons/ions/include/G4DoubleHyperDoubleNeutron.hh index 20a81114732..28dc670215c 100644 --- a/source/particles/hadrons/ions/include/G4DoubleHyperDoubleNeutron.hh +++ b/source/particles/hadrons/ions/include/G4DoubleHyperDoubleNeutron.hh @@ -47,7 +47,7 @@ class G4DoubleHyperDoubleNeutron : public G4Ions { private: static G4DoubleHyperDoubleNeutron* theInstance; G4DoubleHyperDoubleNeutron() {} - ~G4DoubleHyperDoubleNeutron() {} + ~G4DoubleHyperDoubleNeutron() override = default; }; #endif diff --git a/source/particles/hadrons/ions/include/G4DoubleHyperH4.hh b/source/particles/hadrons/ions/include/G4DoubleHyperH4.hh index fe5af3be00b..16c41064d05 100644 --- a/source/particles/hadrons/ions/include/G4DoubleHyperH4.hh +++ b/source/particles/hadrons/ions/include/G4DoubleHyperH4.hh @@ -47,7 +47,7 @@ class G4DoubleHyperH4 : public G4Ions { private: static G4DoubleHyperH4* theInstance; G4DoubleHyperH4() {} - ~G4DoubleHyperH4() {} + ~G4DoubleHyperH4() override = default; }; #endif diff --git a/source/particles/hadrons/ions/include/G4GenericIon.hh b/source/particles/hadrons/ions/include/G4GenericIon.hh index 24fb8c17cfe..a31fd9be9c9 100644 --- a/source/particles/hadrons/ions/include/G4GenericIon.hh +++ b/source/particles/hadrons/ions/include/G4GenericIon.hh @@ -58,7 +58,7 @@ class G4GenericIon : public G4Ions private: static G4GenericIon* theInstance; G4GenericIon(){} - ~G4GenericIon(){} + ~G4GenericIon() override= default; public: static G4GenericIon* Definition(); diff --git a/source/particles/hadrons/ions/include/G4GenericMuonicAtom.hh b/source/particles/hadrons/ions/include/G4GenericMuonicAtom.hh index e7c8e23cca7..e95f0e0837a 100644 --- a/source/particles/hadrons/ions/include/G4GenericMuonicAtom.hh +++ b/source/particles/hadrons/ions/include/G4GenericMuonicAtom.hh @@ -55,7 +55,7 @@ class G4GenericMuonicAtom : public G4MuonicAtom private: static G4GenericMuonicAtom* theInstance; G4GenericMuonicAtom(){} - ~G4GenericMuonicAtom(){} + ~G4GenericMuonicAtom() override= default; public: static G4GenericMuonicAtom* Definition(); diff --git a/source/particles/hadrons/ions/include/G4He3.hh b/source/particles/hadrons/ions/include/G4He3.hh index 053a98c1ba4..86f67285489 100644 --- a/source/particles/hadrons/ions/include/G4He3.hh +++ b/source/particles/hadrons/ions/include/G4He3.hh @@ -52,7 +52,7 @@ class G4He3 : public G4Ions private: static G4He3* theInstance; G4He3(){} - ~G4He3(){} + ~G4He3() override= default; public: static G4He3* Definition(); diff --git a/source/particles/hadrons/ions/include/G4HyperAlpha.hh b/source/particles/hadrons/ions/include/G4HyperAlpha.hh index d95ecf8b312..5fad77fd9bb 100644 --- a/source/particles/hadrons/ions/include/G4HyperAlpha.hh +++ b/source/particles/hadrons/ions/include/G4HyperAlpha.hh @@ -47,7 +47,7 @@ class G4HyperAlpha : public G4Ions { private: static G4HyperAlpha* theInstance; G4HyperAlpha() {} - ~G4HyperAlpha() {} + ~G4HyperAlpha() override = default; }; #endif diff --git a/source/particles/hadrons/ions/include/G4HyperH4.hh b/source/particles/hadrons/ions/include/G4HyperH4.hh index 91cebfcbdd4..3a9436687a8 100644 --- a/source/particles/hadrons/ions/include/G4HyperH4.hh +++ b/source/particles/hadrons/ions/include/G4HyperH4.hh @@ -47,7 +47,7 @@ class G4HyperH4 : public G4Ions { private: static G4HyperH4* theInstance; G4HyperH4() {} - ~G4HyperH4() {} + ~G4HyperH4() override = default; }; #endif diff --git a/source/particles/hadrons/ions/include/G4HyperHe5.hh b/source/particles/hadrons/ions/include/G4HyperHe5.hh index a07d4fead65..dd528c07b47 100644 --- a/source/particles/hadrons/ions/include/G4HyperHe5.hh +++ b/source/particles/hadrons/ions/include/G4HyperHe5.hh @@ -47,7 +47,7 @@ class G4HyperHe5 : public G4Ions { private: static G4HyperHe5* theInstance; G4HyperHe5() {} - ~G4HyperHe5() {} + ~G4HyperHe5() override = default; }; #endif diff --git a/source/particles/hadrons/ions/include/G4HyperTriton.hh b/source/particles/hadrons/ions/include/G4HyperTriton.hh index 038b89277f9..b560d9316dd 100644 --- a/source/particles/hadrons/ions/include/G4HyperTriton.hh +++ b/source/particles/hadrons/ions/include/G4HyperTriton.hh @@ -47,7 +47,7 @@ class G4HyperTriton : public G4Ions { private: static G4HyperTriton* theInstance; G4HyperTriton() {} - ~G4HyperTriton() {} + ~G4HyperTriton() override = default; }; #endif diff --git a/source/particles/hadrons/ions/include/G4IonConstructor.hh b/source/particles/hadrons/ions/include/G4IonConstructor.hh index 9037166b73d..0602e73cc50 100644 --- a/source/particles/hadrons/ions/include/G4IonConstructor.hh +++ b/source/particles/hadrons/ions/include/G4IonConstructor.hh @@ -38,11 +38,7 @@ class G4IonConstructor { //This class is a utility class for construction - public: - G4IonConstructor(); - ~G4IonConstructor(); - static void ConstructParticle(); protected: diff --git a/source/particles/hadrons/ions/include/G4Triton.hh b/source/particles/hadrons/ions/include/G4Triton.hh index 57442169011..162c2f7dbfb 100644 --- a/source/particles/hadrons/ions/include/G4Triton.hh +++ b/source/particles/hadrons/ions/include/G4Triton.hh @@ -52,7 +52,7 @@ class G4Triton : public G4Ions private: static G4Triton* theInstance; G4Triton(){} - ~G4Triton(){} + ~G4Triton() override= default; public: static G4Triton* Definition(); diff --git a/source/particles/hadrons/ions/src/G4Alpha.cc b/source/particles/hadrons/ions/src/G4Alpha.cc index 8ece8734f99..d10c6cdfb9a 100644 --- a/source/particles/hadrons/ions/src/G4Alpha.cc +++ b/source/particles/hadrons/ions/src/G4Alpha.cc @@ -43,16 +43,16 @@ // ### ALPHA ### // ###################################################################### -G4Alpha* G4Alpha::theInstance = 0; +G4Alpha* G4Alpha::theInstance = nullptr; G4Alpha* G4Alpha::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "alpha"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast(pTable->FindParticle(name)); - if (anInstance ==0) + auto anInstance = static_cast(pTable->FindParticle(name)); + if (anInstance ==nullptr) { // create particle // @@ -69,7 +69,7 @@ G4Alpha* G4Alpha::Definition() 0, +1, 0, 0, 0, 0, "nucleus", 0, +4, 1000020040, - true, -1.0, NULL, + true, -1.0, nullptr, false, "static", -1000020040, 0.0, 0 ); diff --git a/source/particles/hadrons/ions/src/G4AntiAlpha.cc b/source/particles/hadrons/ions/src/G4AntiAlpha.cc index 5b05daccbf9..f21ba1fa941 100644 --- a/source/particles/hadrons/ions/src/G4AntiAlpha.cc +++ b/source/particles/hadrons/ions/src/G4AntiAlpha.cc @@ -43,16 +43,16 @@ // ### ANTI ALPHA ### // ###################################################################### -G4AntiAlpha* G4AntiAlpha::theInstance = 0; +G4AntiAlpha* G4AntiAlpha::theInstance = nullptr; G4AntiAlpha* G4AntiAlpha::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_alpha"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast(pTable->FindParticle(name)); - if (anInstance ==0) + auto anInstance = static_cast(pTable->FindParticle(name)); + if (anInstance ==nullptr) { // create particle // @@ -69,7 +69,7 @@ G4AntiAlpha* G4AntiAlpha::Definition() 0, +1, 0, 0, 0, 0, "anti_nucleus", 0, -4, -1000020040, - true, -1.0, NULL, + true, -1.0, nullptr, false, "static", 1000020040, 0.0, 0 ); diff --git a/source/particles/hadrons/ions/src/G4AntiDeuteron.cc b/source/particles/hadrons/ions/src/G4AntiDeuteron.cc index 343b8ac3ad4..63edc54cf8e 100644 --- a/source/particles/hadrons/ions/src/G4AntiDeuteron.cc +++ b/source/particles/hadrons/ions/src/G4AntiDeuteron.cc @@ -44,16 +44,16 @@ // ### ANTI DEUTERON ### // ###################################################################### -G4AntiDeuteron* G4AntiDeuteron::theInstance = 0; +G4AntiDeuteron* G4AntiDeuteron::theInstance = nullptr; G4AntiDeuteron* G4AntiDeuteron::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_deuteron"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast(pTable->FindParticle(name)); - if (anInstance ==0) + auto anInstance = static_cast(pTable->FindParticle(name)); + if (anInstance ==nullptr) { // create particle // @@ -70,7 +70,7 @@ G4AntiDeuteron* G4AntiDeuteron::Definition() 2, +1, 0, 0, 0, 0, "anti_nucleus", 0, -2, -1000010020, - true, -1.0, NULL, + true, -1.0, nullptr, false, "static", 1000010020, 0.0, 0 ); diff --git a/source/particles/hadrons/ions/src/G4AntiDoubleHyperDoubleNeutron.cc b/source/particles/hadrons/ions/src/G4AntiDoubleHyperDoubleNeutron.cc index a19516b9196..d88cedae1ff 100644 --- a/source/particles/hadrons/ions/src/G4AntiDoubleHyperDoubleNeutron.cc +++ b/source/particles/hadrons/ions/src/G4AntiDoubleHyperDoubleNeutron.cc @@ -47,7 +47,7 @@ G4AntiDoubleHyperDoubleNeutron* G4AntiDoubleHyperDoubleNeutron::Definition() { const G4String name = "anti_doublehyperdoubleneutron"; // search in particle table G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); + auto anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); if ( anInstance == nullptr ) { // create particle // @@ -71,11 +71,11 @@ G4AntiDoubleHyperDoubleNeutron* G4AntiDoubleHyperDoubleNeutron::Definition() { anInstance->SetPDGMagneticMoment( 2.97896248 * mN ); // create Decay Table - G4DecayTable* table = new G4DecayTable; + auto table = new G4DecayTable; // create decay channels const G4double half_br_lambda_to_p_pim = 0.5*0.639; const G4double br_lambda_to_n_piz = 0.358; - G4VDecayChannel** mode = new G4VDecayChannel*[3]; + auto mode = new G4VDecayChannel*[3]; // anti_lambda -> anti_proton + pi+ , with 50% probability of capturing the anti_proton mode[0] = new G4PhaseSpaceDecayChannel( "anti_doublehyperdoubleneutron", half_br_lambda_to_p_pim, 5, "anti_neutron", "anti_neutron", "anti_lambda", "anti_proton", "pi+" ); diff --git a/source/particles/hadrons/ions/src/G4AntiDoubleHyperH4.cc b/source/particles/hadrons/ions/src/G4AntiDoubleHyperH4.cc index f9e2e9c1561..61fab1d80ac 100644 --- a/source/particles/hadrons/ions/src/G4AntiDoubleHyperH4.cc +++ b/source/particles/hadrons/ions/src/G4AntiDoubleHyperH4.cc @@ -47,7 +47,7 @@ G4AntiDoubleHyperH4* G4AntiDoubleHyperH4::Definition() { const G4String name = "anti_doublehyperH4"; // search in particle table G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); + auto anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); if ( anInstance == nullptr ) { // create particle // @@ -71,11 +71,11 @@ G4AntiDoubleHyperH4* G4AntiDoubleHyperH4::Definition() { anInstance->SetPDGMagneticMoment( 2.97896248 * mN ); // create Decay Table - G4DecayTable* table = new G4DecayTable; + auto table = new G4DecayTable; // create decay channels const G4double half_br_lambda_to_p_pim = 0.5*0.639; const G4double half_br_lambda_to_n_piz = 0.5*0.358; - G4VDecayChannel** mode = new G4VDecayChannel*[4]; + auto mode = new G4VDecayChannel*[4]; // anti_lambda -> anti_proton + pi+ , with 50% probability of capturing the anti_proton mode[0] = new G4PhaseSpaceDecayChannel( "anti_doublehyperH4", half_br_lambda_to_p_pim, 3, "anti_hypertriton", "anti_proton", "pi+" ); diff --git a/source/particles/hadrons/ions/src/G4AntiHe3.cc b/source/particles/hadrons/ions/src/G4AntiHe3.cc index c17ab09d0fc..b1bfecdba92 100644 --- a/source/particles/hadrons/ions/src/G4AntiHe3.cc +++ b/source/particles/hadrons/ions/src/G4AntiHe3.cc @@ -44,16 +44,16 @@ // ### ANTI He3 ### // ###################################################################### -G4AntiHe3* G4AntiHe3::theInstance = 0; +G4AntiHe3* G4AntiHe3::theInstance = nullptr; G4AntiHe3* G4AntiHe3::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_He3"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast(pTable->FindParticle(name)); - if (anInstance ==0) + auto anInstance = static_cast(pTable->FindParticle(name)); + if (anInstance ==nullptr) { // create particle // @@ -70,7 +70,7 @@ G4AntiHe3* G4AntiHe3::Definition() 1, +1, 0, 0, 0, 0, "anti_nucleus", 0, -3, -1000020030, - true, -1.0, NULL, + true, -1.0, nullptr, false, "static", 1000020030, 0.0, 0 ); diff --git a/source/particles/hadrons/ions/src/G4AntiHyperAlpha.cc b/source/particles/hadrons/ions/src/G4AntiHyperAlpha.cc index 33244ec0ec3..b6e741bbd45 100644 --- a/source/particles/hadrons/ions/src/G4AntiHyperAlpha.cc +++ b/source/particles/hadrons/ions/src/G4AntiHyperAlpha.cc @@ -47,7 +47,7 @@ G4AntiHyperAlpha* G4AntiHyperAlpha::Definition() { const G4String name = "anti_hyperalpha"; // search in particle table G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); + auto anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); if ( anInstance == nullptr ) { // create particle // @@ -71,7 +71,7 @@ G4AntiHyperAlpha* G4AntiHyperAlpha::Definition() { anInstance->SetPDGMagneticMoment( 2.97896248 * mN ); // create Decay Table - G4DecayTable* table = new G4DecayTable; + auto table = new G4DecayTable; // create decay channels /* // The decay "mode[1]" produces the secondary "anti_Li4" which is not existing @@ -95,7 +95,7 @@ G4AntiHyperAlpha* G4AntiHyperAlpha::Definition() { // Replacement decay for the time being const G4double br_lambda_to_p_pim = 0.639; const G4double half_br_lambda_to_n_piz = 0.5*0.358; - G4VDecayChannel** mode = new G4VDecayChannel*[3]; + auto mode = new G4VDecayChannel*[3]; // anti_lambda -> anti_proton + pi+ , with 0% probability of capturing the anti_proton mode[0] = new G4PhaseSpaceDecayChannel( "anti_hyperalpha", br_lambda_to_p_pim, 3, "anti_He3", "anti_proton", "pi+" ); diff --git a/source/particles/hadrons/ions/src/G4AntiHyperH4.cc b/source/particles/hadrons/ions/src/G4AntiHyperH4.cc index df6bccbb864..cf730903ca4 100644 --- a/source/particles/hadrons/ions/src/G4AntiHyperH4.cc +++ b/source/particles/hadrons/ions/src/G4AntiHyperH4.cc @@ -47,7 +47,7 @@ G4AntiHyperH4* G4AntiHyperH4::Definition() { const G4String name = "anti_hyperH4"; // search in particle table G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); + auto anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); if ( anInstance == nullptr ) { // create particle // @@ -71,7 +71,7 @@ G4AntiHyperH4* G4AntiHyperH4::Definition() { anInstance->SetPDGMagneticMoment( 2.97896248 * mN ); // create Decay Table - G4DecayTable* table = new G4DecayTable; + auto table = new G4DecayTable; // create decay channels /* // The decay "mode[3]" produces the secondary "anti_H4" which is not existing @@ -95,7 +95,7 @@ G4AntiHyperH4* G4AntiHyperH4::Definition() { // Replacement decay for the time being const G4double half_br_lambda_to_p_pim = 0.5*0.639; const G4double br_lambda_to_n_piz = 0.358; - G4VDecayChannel** mode = new G4VDecayChannel*[3]; + auto mode = new G4VDecayChannel*[3]; // anti_lambda -> anti_proton + pi+ , with 50% probability of capturing the anti_proton mode[0] = new G4PhaseSpaceDecayChannel( "anti_hyperH4", half_br_lambda_to_p_pim, 3, "anti_triton", "anti_proton", "pi+" ); diff --git a/source/particles/hadrons/ions/src/G4AntiHyperHe5.cc b/source/particles/hadrons/ions/src/G4AntiHyperHe5.cc index 8a0a15f0fd8..d923e52caf3 100644 --- a/source/particles/hadrons/ions/src/G4AntiHyperHe5.cc +++ b/source/particles/hadrons/ions/src/G4AntiHyperHe5.cc @@ -47,7 +47,7 @@ G4AntiHyperHe5* G4AntiHyperHe5::Definition() { const G4String name = "anti_hyperHe5"; // search in particle table G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); + auto anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); if ( anInstance == nullptr ) { // create particle // @@ -71,7 +71,7 @@ G4AntiHyperHe5* G4AntiHyperHe5::Definition() { anInstance->SetPDGMagneticMoment( 2.97896248 * mN ); // create Decay Table - G4DecayTable* table = new G4DecayTable; + auto table = new G4DecayTable; // create decay channels /* // The decays "mode[1]" and "mode[3]" produce the secondaries "anti_Li5" and "anti_He5", @@ -95,7 +95,7 @@ G4AntiHyperHe5* G4AntiHyperHe5::Definition() { // Replacement decay for the time being const G4double br_lambda_to_p_pim = 0.639; const G4double br_lambda_to_n_piz = 0.358; - G4VDecayChannel** mode = new G4VDecayChannel*[2]; + auto mode = new G4VDecayChannel*[2]; // anti_lambda -> anti_proton + pi+ , with 0% probability of capturing the anti_proton mode[0] = new G4PhaseSpaceDecayChannel( "anti_hyperHe5", br_lambda_to_p_pim, 3, "anti_alpha", "anti_proton", "pi+" ); diff --git a/source/particles/hadrons/ions/src/G4AntiHyperTriton.cc b/source/particles/hadrons/ions/src/G4AntiHyperTriton.cc index 89aceac730d..56f9cf03a95 100644 --- a/source/particles/hadrons/ions/src/G4AntiHyperTriton.cc +++ b/source/particles/hadrons/ions/src/G4AntiHyperTriton.cc @@ -47,7 +47,7 @@ G4AntiHyperTriton* G4AntiHyperTriton::Definition() { const G4String name = "anti_hypertriton"; // search in particle table G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); + auto anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); if ( anInstance == nullptr ) { // create particle // @@ -71,11 +71,11 @@ G4AntiHyperTriton* G4AntiHyperTriton::Definition() { anInstance->SetPDGMagneticMoment( 2.97896248 * mN ); // create Decay Table - G4DecayTable* table = new G4DecayTable; + auto table = new G4DecayTable; // create decay channels const G4double half_br_lambda_to_p_pim = 0.5*0.639; const G4double half_br_lambda_to_n_piz = 0.5*0.358; - G4VDecayChannel** mode = new G4VDecayChannel*[4]; + auto mode = new G4VDecayChannel*[4]; // anti_lambda -> anti_proton + pi+ , with 50% probability of capturing the anti_proton mode[0] = new G4PhaseSpaceDecayChannel( "anti_hypertriton", half_br_lambda_to_p_pim, 3, "anti_deuteron", "anti_proton", "pi+" ); diff --git a/source/particles/hadrons/ions/src/G4AntiTriton.cc b/source/particles/hadrons/ions/src/G4AntiTriton.cc index 3c924118166..1b7976c2a9a 100644 --- a/source/particles/hadrons/ions/src/G4AntiTriton.cc +++ b/source/particles/hadrons/ions/src/G4AntiTriton.cc @@ -44,16 +44,16 @@ // ### ANTI TRITON ### // ###################################################################### -G4AntiTriton* G4AntiTriton::theInstance = 0; +G4AntiTriton* G4AntiTriton::theInstance = nullptr; G4AntiTriton* G4AntiTriton::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_triton"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast(pTable->FindParticle(name)); - if (anInstance ==0) + auto anInstance = static_cast(pTable->FindParticle(name)); + if (anInstance ==nullptr) { // create particle // diff --git a/source/particles/hadrons/ions/src/G4Deuteron.cc b/source/particles/hadrons/ions/src/G4Deuteron.cc index ca225ece074..ec08b766bf1 100644 --- a/source/particles/hadrons/ions/src/G4Deuteron.cc +++ b/source/particles/hadrons/ions/src/G4Deuteron.cc @@ -44,16 +44,16 @@ // ### DEUTERON ### // ###################################################################### -G4Deuteron* G4Deuteron::theInstance = 0; +G4Deuteron* G4Deuteron::theInstance = nullptr; G4Deuteron* G4Deuteron::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "deuteron"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast(pTable->FindParticle(name)); - if (anInstance ==0) + auto anInstance = static_cast(pTable->FindParticle(name)); + if (anInstance ==nullptr) { // create particle // @@ -70,7 +70,7 @@ G4Deuteron* G4Deuteron::Definition() 2, +1, 0, 0, 0, 0, "nucleus", 0, +2, 1000010020, - true, -1.0, NULL, + true, -1.0, nullptr, false, "static", -1000010020, 0.0, 0 ); diff --git a/source/particles/hadrons/ions/src/G4DoubleHyperDoubleNeutron.cc b/source/particles/hadrons/ions/src/G4DoubleHyperDoubleNeutron.cc index 3e5bea2f6ee..59b9c9c4ec1 100644 --- a/source/particles/hadrons/ions/src/G4DoubleHyperDoubleNeutron.cc +++ b/source/particles/hadrons/ions/src/G4DoubleHyperDoubleNeutron.cc @@ -47,7 +47,7 @@ G4DoubleHyperDoubleNeutron* G4DoubleHyperDoubleNeutron::Definition() { const G4String name = "doublehyperdoubleneutron"; // search in particle table G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); + auto anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); if ( anInstance == nullptr ) { // create particle // @@ -71,11 +71,11 @@ G4DoubleHyperDoubleNeutron* G4DoubleHyperDoubleNeutron::Definition() { anInstance->SetPDGMagneticMoment( 2.97896248 * mN ); // create Decay Table - G4DecayTable* table = new G4DecayTable; + auto table = new G4DecayTable; // create decay channels const G4double half_br_lambda_to_p_pim = 0.5*0.639; const G4double br_lambda_to_n_piz = 0.358; - G4VDecayChannel** mode = new G4VDecayChannel*[3]; + auto mode = new G4VDecayChannel*[3]; // lambda -> proton + pi- , with 50% probability of capturing the proton mode[0] = new G4PhaseSpaceDecayChannel( "doublehyperdoubleneutron", half_br_lambda_to_p_pim, 5, "neutron", "neutron", "lambda", "proton", "pi-" ); diff --git a/source/particles/hadrons/ions/src/G4DoubleHyperH4.cc b/source/particles/hadrons/ions/src/G4DoubleHyperH4.cc index b2dd13b0885..ab7f30728a4 100644 --- a/source/particles/hadrons/ions/src/G4DoubleHyperH4.cc +++ b/source/particles/hadrons/ions/src/G4DoubleHyperH4.cc @@ -47,7 +47,7 @@ G4DoubleHyperH4* G4DoubleHyperH4::Definition() { const G4String name = "doublehyperH4"; // search in particle table G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); + auto anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); if ( anInstance == nullptr ) { // create particle // @@ -71,11 +71,11 @@ G4DoubleHyperH4* G4DoubleHyperH4::Definition() { anInstance->SetPDGMagneticMoment( 2.97896248 * mN ); // create Decay Table - G4DecayTable* table = new G4DecayTable; + auto table = new G4DecayTable; // create decay channels const G4double half_br_lambda_to_p_pim = 0.5*0.639; const G4double half_br_lambda_to_n_piz = 0.5*0.358; - G4VDecayChannel** mode = new G4VDecayChannel*[4]; + auto mode = new G4VDecayChannel*[4]; // lambda -> proton + pi- , with 50% probability of capturing the proton mode[0] = new G4PhaseSpaceDecayChannel( "doublehyperH4", half_br_lambda_to_p_pim, 3, "hypertriton", "proton", "pi-" ); diff --git a/source/particles/hadrons/ions/src/G4GenericIon.cc b/source/particles/hadrons/ions/src/G4GenericIon.cc index ecd0b77145d..eb14a490fb9 100644 --- a/source/particles/hadrons/ions/src/G4GenericIon.cc +++ b/source/particles/hadrons/ions/src/G4GenericIon.cc @@ -43,16 +43,16 @@ // ###################################################################### // ### GenericIon ### // ###################################################################### -G4GenericIon* G4GenericIon::theInstance = 0; +G4GenericIon* G4GenericIon::theInstance = nullptr; G4GenericIon* G4GenericIon::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "GenericIon"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast(pTable->FindParticle(name)); - if (anInstance ==0) + auto anInstance = static_cast(pTable->FindParticle(name)); + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4GenericIon* G4GenericIon::Definition() 1, +1, 0, 1, +1, 0, "nucleus", 0, +1, 0, - true, -1.0, NULL, + true, -1.0, nullptr, false, "generic", 0, 0.0 ); diff --git a/source/particles/hadrons/ions/src/G4GenericMuonicAtom.cc b/source/particles/hadrons/ions/src/G4GenericMuonicAtom.cc index 5888237ec25..3ece12b74b0 100644 --- a/source/particles/hadrons/ions/src/G4GenericMuonicAtom.cc +++ b/source/particles/hadrons/ions/src/G4GenericMuonicAtom.cc @@ -50,7 +50,7 @@ G4GenericMuonicAtom* G4GenericMuonicAtom::Definition() const G4String name = "GenericMuonicAtom"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4MuonicAtom* anInstance = static_cast(pTable->FindParticle(name)); + auto anInstance = static_cast(pTable->FindParticle(name)); if (anInstance == nullptr) { // create particle @@ -73,7 +73,7 @@ G4GenericMuonicAtom* G4GenericMuonicAtom::Definition() 1, +1, 0, "MuonicAtom", 0, +1, 0, true, -1.0, nullptr, - false, "generic", 0, + false, "generic", nullptr, 0.0 ); } diff --git a/source/particles/hadrons/ions/src/G4He3.cc b/source/particles/hadrons/ions/src/G4He3.cc index 815e7d30feb..34df24ff4da 100644 --- a/source/particles/hadrons/ions/src/G4He3.cc +++ b/source/particles/hadrons/ions/src/G4He3.cc @@ -44,16 +44,16 @@ // ### He3 ### // ###################################################################### -G4He3* G4He3::theInstance = 0; +G4He3* G4He3::theInstance = nullptr; G4He3* G4He3::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "He3"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast(pTable->FindParticle(name)); - if (anInstance ==0) + auto anInstance = static_cast(pTable->FindParticle(name)); + if (anInstance ==nullptr) { // create particle // @@ -70,7 +70,7 @@ G4He3* G4He3::Definition() 1, +1, 0, 0, 0, 0, "nucleus", 0, +3, 1000020030, - true, -1.0, NULL, + true, -1.0, nullptr, false, "static", -1000020030, 0.0, 0 ); diff --git a/source/particles/hadrons/ions/src/G4HyperAlpha.cc b/source/particles/hadrons/ions/src/G4HyperAlpha.cc index 0e1f60faa7e..c00ed2ccc5d 100644 --- a/source/particles/hadrons/ions/src/G4HyperAlpha.cc +++ b/source/particles/hadrons/ions/src/G4HyperAlpha.cc @@ -47,7 +47,7 @@ G4HyperAlpha* G4HyperAlpha::Definition() { const G4String name = "hyperalpha"; // search in particle table G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); + auto anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); if ( anInstance == nullptr ) { // create particle // @@ -71,7 +71,7 @@ G4HyperAlpha* G4HyperAlpha::Definition() { anInstance->SetPDGMagneticMoment( 2.97896248 * mN ); // create Decay Table - G4DecayTable* table = new G4DecayTable; + auto table = new G4DecayTable; // create decay channels /* // The decay "mode[1]" produces the secondary "Li4" whose corresponding anti-particle @@ -95,7 +95,7 @@ G4HyperAlpha* G4HyperAlpha::Definition() { // Replacement decay for the time being const G4double br_lambda_to_p_pim = 0.639; const G4double half_br_lambda_to_n_piz = 0.5*0.358; - G4VDecayChannel** mode = new G4VDecayChannel*[3]; + auto mode = new G4VDecayChannel*[3]; // lambda -> proton + pi- , with 0% probability of capturing the proton mode[0] = new G4PhaseSpaceDecayChannel( "hyperalpha", br_lambda_to_p_pim, 3, "He3", "proton", "pi-" ); diff --git a/source/particles/hadrons/ions/src/G4HyperH4.cc b/source/particles/hadrons/ions/src/G4HyperH4.cc index 60796165312..1e9af5b11a1 100644 --- a/source/particles/hadrons/ions/src/G4HyperH4.cc +++ b/source/particles/hadrons/ions/src/G4HyperH4.cc @@ -47,7 +47,7 @@ G4HyperH4* G4HyperH4::Definition() { const G4String name = "hyperH4"; // search in particle table G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); + auto anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); if ( anInstance == nullptr ) { // create particle // @@ -71,7 +71,7 @@ G4HyperH4* G4HyperH4::Definition() { anInstance->SetPDGMagneticMoment( 2.97896248 * mN ); // create Decay Table - G4DecayTable* table = new G4DecayTable; + auto table = new G4DecayTable; // create decay channels /* // The decay "mode[3]" produces the secondary "H4" whose corresponding @@ -95,7 +95,7 @@ G4HyperH4* G4HyperH4::Definition() { // Replacement decay for the time being const G4double half_br_lambda_to_p_pim = 0.5*0.639; const G4double br_lambda_to_n_piz = 0.358; - G4VDecayChannel** mode = new G4VDecayChannel*[3]; + auto mode = new G4VDecayChannel*[3]; // lambda -> proton + pi- , with 50% probability of capturing the proton mode[0] = new G4PhaseSpaceDecayChannel( "hyperH4", half_br_lambda_to_p_pim, 3, "triton", "proton", "pi-" ); diff --git a/source/particles/hadrons/ions/src/G4HyperHe5.cc b/source/particles/hadrons/ions/src/G4HyperHe5.cc index ce2af1d0778..730f75d3656 100644 --- a/source/particles/hadrons/ions/src/G4HyperHe5.cc +++ b/source/particles/hadrons/ions/src/G4HyperHe5.cc @@ -47,7 +47,7 @@ G4HyperHe5* G4HyperHe5::Definition() { const G4String name = "hyperHe5"; // search in particle table G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); + auto anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); if ( anInstance == nullptr ) { // create particle // @@ -71,7 +71,7 @@ G4HyperHe5* G4HyperHe5::Definition() { anInstance->SetPDGMagneticMoment( 2.97896248 * mN ); // create Decay Table - G4DecayTable* table = new G4DecayTable; + auto table = new G4DecayTable; // create decay channels /* // The decays "mode[1]" and "mode[3]" produce the secondaries "Li5" and "He5", @@ -96,7 +96,7 @@ G4HyperHe5* G4HyperHe5::Definition() { // Replacement decay for the time being const G4double br_lambda_to_p_pim = 0.639; const G4double br_lambda_to_n_piz = 0.358; - G4VDecayChannel** mode = new G4VDecayChannel*[2]; + auto mode = new G4VDecayChannel*[2]; // lambda -> proton + pi- , with 0% probability of capturing the proton mode[0] = new G4PhaseSpaceDecayChannel( "hyperHe5", br_lambda_to_p_pim, 3, "alpha", "proton", "pi-" ); diff --git a/source/particles/hadrons/ions/src/G4HyperTriton.cc b/source/particles/hadrons/ions/src/G4HyperTriton.cc index 9eadebfc262..341f7af4d21 100644 --- a/source/particles/hadrons/ions/src/G4HyperTriton.cc +++ b/source/particles/hadrons/ions/src/G4HyperTriton.cc @@ -47,7 +47,7 @@ G4HyperTriton* G4HyperTriton::Definition() { const G4String name = "hypertriton"; // search in particle table G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); + auto anInstance = static_cast< G4Ions* >( pTable->FindParticle( name ) ); if ( anInstance == nullptr ) { // create particle // @@ -71,11 +71,11 @@ G4HyperTriton* G4HyperTriton::Definition() { anInstance->SetPDGMagneticMoment( 2.97896248 * mN ); // create Decay Table - G4DecayTable* table = new G4DecayTable; + auto table = new G4DecayTable; // create decay channels const G4double half_br_lambda_to_p_pim = 0.5*0.639; const G4double half_br_lambda_to_n_piz = 0.5*0.358; - G4VDecayChannel** mode = new G4VDecayChannel*[4]; + auto mode = new G4VDecayChannel*[4]; // lambda -> proton + pi- , with 50% probability of capturing the proton mode[0] = new G4PhaseSpaceDecayChannel( "hypertriton", half_br_lambda_to_p_pim, 3, "deuteron", "proton", "pi-" ); diff --git a/source/particles/hadrons/ions/src/G4IonConstructor.cc b/source/particles/hadrons/ions/src/G4IonConstructor.cc index 4d40babffee..87d70144762 100644 --- a/source/particles/hadrons/ions/src/G4IonConstructor.cc +++ b/source/particles/hadrons/ions/src/G4IonConstructor.cc @@ -60,13 +60,6 @@ #include "G4AntiHyperHe5.hh" #include "G4AntiHyperTriton.hh" -G4IonConstructor::G4IonConstructor() -{ -} - -G4IonConstructor::~G4IonConstructor() -{ -} void G4IonConstructor::ConstructParticle() { diff --git a/source/particles/hadrons/ions/src/G4Triton.cc b/source/particles/hadrons/ions/src/G4Triton.cc index d323867c2db..91561ff075d 100644 --- a/source/particles/hadrons/ions/src/G4Triton.cc +++ b/source/particles/hadrons/ions/src/G4Triton.cc @@ -48,12 +48,12 @@ G4Triton* G4Triton::theInstance = nullptr; G4Triton* G4Triton::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "triton"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); - G4Ions* anInstance = static_cast(pTable->FindParticle(name)); - if (anInstance ==0) + auto anInstance = static_cast(pTable->FindParticle(name)); + if (anInstance ==nullptr) { // create particle // diff --git a/source/particles/hadrons/mesons/GNUmakefile b/source/particles/hadrons/mesons/GNUmakefile deleted file mode 100644 index 472ea3f58e6..00000000000 --- a/source/particles/hadrons/mesons/GNUmakefile +++ /dev/null @@ -1,20 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for mesons library. Gabriele Cosmo, 18/9/96. -# -------------------------------------------------------------- - -name := G4mesons - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4PARTICLES_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/particles/management/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/particles/hadrons/mesons/include/G4AntiBMesonZero.hh b/source/particles/hadrons/mesons/include/G4AntiBMesonZero.hh index 9303ed17fb8..4bc820ee8c1 100644 --- a/source/particles/hadrons/mesons/include/G4AntiBMesonZero.hh +++ b/source/particles/hadrons/mesons/include/G4AntiBMesonZero.hh @@ -51,7 +51,7 @@ class G4AntiBMesonZero : public G4ParticleDefinition private: static G4AntiBMesonZero* theInstance; G4AntiBMesonZero(){} - ~G4AntiBMesonZero(){} + ~G4AntiBMesonZero() override= default; public: static G4AntiBMesonZero* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4AntiBsMesonZero.hh b/source/particles/hadrons/mesons/include/G4AntiBsMesonZero.hh index 1179be1a696..1273efd1200 100644 --- a/source/particles/hadrons/mesons/include/G4AntiBsMesonZero.hh +++ b/source/particles/hadrons/mesons/include/G4AntiBsMesonZero.hh @@ -51,7 +51,7 @@ class G4AntiBsMesonZero : public G4ParticleDefinition private: static G4AntiBsMesonZero* theInstance; G4AntiBsMesonZero(){} - ~G4AntiBsMesonZero(){} + ~G4AntiBsMesonZero() override= default; public: static G4AntiBsMesonZero* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4AntiDMesonZero.hh b/source/particles/hadrons/mesons/include/G4AntiDMesonZero.hh index 2c3a7fff4c5..f21ca28b535 100644 --- a/source/particles/hadrons/mesons/include/G4AntiDMesonZero.hh +++ b/source/particles/hadrons/mesons/include/G4AntiDMesonZero.hh @@ -51,7 +51,7 @@ class G4AntiDMesonZero : public G4ParticleDefinition private: static G4AntiDMesonZero* theInstance; G4AntiDMesonZero(){} - ~G4AntiDMesonZero(){} + ~G4AntiDMesonZero() override= default; public: static G4AntiDMesonZero* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4AntiKaonZero.hh b/source/particles/hadrons/mesons/include/G4AntiKaonZero.hh index 60ffb8ca7d1..86829230cd7 100644 --- a/source/particles/hadrons/mesons/include/G4AntiKaonZero.hh +++ b/source/particles/hadrons/mesons/include/G4AntiKaonZero.hh @@ -51,7 +51,7 @@ class G4AntiKaonZero : public G4ParticleDefinition private: static G4AntiKaonZero* theInstance; G4AntiKaonZero(){} - ~G4AntiKaonZero(){} + ~G4AntiKaonZero() override= default; public: static G4AntiKaonZero* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4BMesonMinus.hh b/source/particles/hadrons/mesons/include/G4BMesonMinus.hh index 2ffc30629d6..cb7907a80db 100644 --- a/source/particles/hadrons/mesons/include/G4BMesonMinus.hh +++ b/source/particles/hadrons/mesons/include/G4BMesonMinus.hh @@ -51,7 +51,7 @@ class G4BMesonMinus : public G4ParticleDefinition private: static G4BMesonMinus* theInstance; G4BMesonMinus(){} - ~G4BMesonMinus(){} + ~G4BMesonMinus() override= default; public: static G4BMesonMinus* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4BMesonPlus.hh b/source/particles/hadrons/mesons/include/G4BMesonPlus.hh index 97c929c1eeb..8d953ad744b 100644 --- a/source/particles/hadrons/mesons/include/G4BMesonPlus.hh +++ b/source/particles/hadrons/mesons/include/G4BMesonPlus.hh @@ -51,7 +51,7 @@ class G4BMesonPlus : public G4ParticleDefinition private: static G4BMesonPlus* theInstance; G4BMesonPlus(){} - ~G4BMesonPlus(){} + ~G4BMesonPlus() override= default; public: static G4BMesonPlus* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4BMesonZero.hh b/source/particles/hadrons/mesons/include/G4BMesonZero.hh index f5c76a4e41b..e688d9142b9 100644 --- a/source/particles/hadrons/mesons/include/G4BMesonZero.hh +++ b/source/particles/hadrons/mesons/include/G4BMesonZero.hh @@ -51,7 +51,7 @@ class G4BMesonZero : public G4ParticleDefinition private: static G4BMesonZero* theInstance; G4BMesonZero(){} - ~G4BMesonZero(){} + ~G4BMesonZero() override= default; public: static G4BMesonZero* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4BcMesonMinus.hh b/source/particles/hadrons/mesons/include/G4BcMesonMinus.hh index 077d896a8e7..2566ccb9afe 100644 --- a/source/particles/hadrons/mesons/include/G4BcMesonMinus.hh +++ b/source/particles/hadrons/mesons/include/G4BcMesonMinus.hh @@ -50,7 +50,7 @@ class G4BcMesonMinus : public G4ParticleDefinition private: static G4BcMesonMinus* theInstance; G4BcMesonMinus(){} - ~G4BcMesonMinus(){} + ~G4BcMesonMinus() override= default; public: static G4BcMesonMinus* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4BcMesonPlus.hh b/source/particles/hadrons/mesons/include/G4BcMesonPlus.hh index 7edbf4feb1e..6a9f253b300 100644 --- a/source/particles/hadrons/mesons/include/G4BcMesonPlus.hh +++ b/source/particles/hadrons/mesons/include/G4BcMesonPlus.hh @@ -50,7 +50,7 @@ class G4BcMesonPlus : public G4ParticleDefinition private: static G4BcMesonPlus* theInstance; G4BcMesonPlus(){} - ~G4BcMesonPlus(){} + ~G4BcMesonPlus() override= default; public: static G4BcMesonPlus* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4BsMesonZero.hh b/source/particles/hadrons/mesons/include/G4BsMesonZero.hh index 396a1a2edb1..48cb34a1358 100644 --- a/source/particles/hadrons/mesons/include/G4BsMesonZero.hh +++ b/source/particles/hadrons/mesons/include/G4BsMesonZero.hh @@ -51,7 +51,7 @@ class G4BsMesonZero : public G4ParticleDefinition private: static G4BsMesonZero* theInstance; G4BsMesonZero(){} - ~G4BsMesonZero(){} + ~G4BsMesonZero() override= default; public: static G4BsMesonZero* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4DMesonMinus.hh b/source/particles/hadrons/mesons/include/G4DMesonMinus.hh index 9697defcd7c..3f4ce04458e 100644 --- a/source/particles/hadrons/mesons/include/G4DMesonMinus.hh +++ b/source/particles/hadrons/mesons/include/G4DMesonMinus.hh @@ -51,7 +51,7 @@ class G4DMesonMinus : public G4ParticleDefinition private: static G4DMesonMinus* theInstance; G4DMesonMinus(){} - ~G4DMesonMinus(){} + ~G4DMesonMinus() override= default; public: static G4DMesonMinus* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4DMesonPlus.hh b/source/particles/hadrons/mesons/include/G4DMesonPlus.hh index f7267718adc..5d125608438 100644 --- a/source/particles/hadrons/mesons/include/G4DMesonPlus.hh +++ b/source/particles/hadrons/mesons/include/G4DMesonPlus.hh @@ -51,7 +51,7 @@ class G4DMesonPlus : public G4ParticleDefinition private: static G4DMesonPlus* theInstance; G4DMesonPlus(){} - ~G4DMesonPlus(){} + ~G4DMesonPlus() override= default; public: static G4DMesonPlus* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4DMesonZero.hh b/source/particles/hadrons/mesons/include/G4DMesonZero.hh index 1b40127f668..aa81b3ff06b 100644 --- a/source/particles/hadrons/mesons/include/G4DMesonZero.hh +++ b/source/particles/hadrons/mesons/include/G4DMesonZero.hh @@ -51,7 +51,7 @@ class G4DMesonZero : public G4ParticleDefinition private: static G4DMesonZero* theInstance; G4DMesonZero(){} - ~G4DMesonZero(){} + ~G4DMesonZero() override= default; public: static G4DMesonZero* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4DsMesonMinus.hh b/source/particles/hadrons/mesons/include/G4DsMesonMinus.hh index 7b887052733..8108ae4d669 100644 --- a/source/particles/hadrons/mesons/include/G4DsMesonMinus.hh +++ b/source/particles/hadrons/mesons/include/G4DsMesonMinus.hh @@ -51,7 +51,7 @@ class G4DsMesonMinus : public G4ParticleDefinition private: static G4DsMesonMinus* theInstance; G4DsMesonMinus(){} - ~G4DsMesonMinus(){} + ~G4DsMesonMinus() override= default; public: static G4DsMesonMinus* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4DsMesonPlus.hh b/source/particles/hadrons/mesons/include/G4DsMesonPlus.hh index bbde9eb0655..fde8ba055b7 100644 --- a/source/particles/hadrons/mesons/include/G4DsMesonPlus.hh +++ b/source/particles/hadrons/mesons/include/G4DsMesonPlus.hh @@ -51,7 +51,7 @@ class G4DsMesonPlus : public G4ParticleDefinition private: static G4DsMesonPlus* theInstance; G4DsMesonPlus(){} - ~G4DsMesonPlus(){} + ~G4DsMesonPlus() override= default; public: static G4DsMesonPlus* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4Eta.hh b/source/particles/hadrons/mesons/include/G4Eta.hh index 6f0383dfae1..ffd4d87a4b8 100644 --- a/source/particles/hadrons/mesons/include/G4Eta.hh +++ b/source/particles/hadrons/mesons/include/G4Eta.hh @@ -51,7 +51,7 @@ class G4Eta : public G4ParticleDefinition private: static G4Eta* theInstance; G4Eta(){} - ~G4Eta(){} + ~G4Eta() override= default; public: static G4Eta* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4EtaPrime.hh b/source/particles/hadrons/mesons/include/G4EtaPrime.hh index 21a29387098..3b09f637207 100644 --- a/source/particles/hadrons/mesons/include/G4EtaPrime.hh +++ b/source/particles/hadrons/mesons/include/G4EtaPrime.hh @@ -50,7 +50,7 @@ class G4EtaPrime : public G4ParticleDefinition private: static G4EtaPrime* theInstance; G4EtaPrime(){} - ~G4EtaPrime(){} + ~G4EtaPrime() override= default; public: static G4EtaPrime* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4Etac.hh b/source/particles/hadrons/mesons/include/G4Etac.hh index 05496f5dcdf..a30073a6287 100644 --- a/source/particles/hadrons/mesons/include/G4Etac.hh +++ b/source/particles/hadrons/mesons/include/G4Etac.hh @@ -52,7 +52,7 @@ class G4Etac : public G4ParticleDefinition private: static G4Etac* theInstance; G4Etac(){} - ~G4Etac(){} + ~G4Etac() override= default; public: static G4Etac* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4JPsi.hh b/source/particles/hadrons/mesons/include/G4JPsi.hh index f96c4c7bbf0..793a756fca3 100644 --- a/source/particles/hadrons/mesons/include/G4JPsi.hh +++ b/source/particles/hadrons/mesons/include/G4JPsi.hh @@ -51,7 +51,7 @@ class G4JPsi : public G4ParticleDefinition private: static G4JPsi* theInstance; G4JPsi(){} - ~G4JPsi(){} + ~G4JPsi() override= default; public: static G4JPsi* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4KaonMinus.hh b/source/particles/hadrons/mesons/include/G4KaonMinus.hh index b354d2318cf..bc0bde1c5ba 100644 --- a/source/particles/hadrons/mesons/include/G4KaonMinus.hh +++ b/source/particles/hadrons/mesons/include/G4KaonMinus.hh @@ -51,7 +51,7 @@ class G4KaonMinus : public G4ParticleDefinition private: static G4KaonMinus* theInstance; G4KaonMinus(){} - ~G4KaonMinus(){} + ~G4KaonMinus() override= default; public: static G4KaonMinus* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4KaonPlus.hh b/source/particles/hadrons/mesons/include/G4KaonPlus.hh index 67cf819d4ae..1289f9a7a2f 100644 --- a/source/particles/hadrons/mesons/include/G4KaonPlus.hh +++ b/source/particles/hadrons/mesons/include/G4KaonPlus.hh @@ -51,7 +51,7 @@ class G4KaonPlus : public G4ParticleDefinition private: static G4KaonPlus* theInstance; G4KaonPlus(){} - ~G4KaonPlus(){} + ~G4KaonPlus() override= default; public: static G4KaonPlus* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4KaonZero.hh b/source/particles/hadrons/mesons/include/G4KaonZero.hh index eafe9bcb8f9..977c1401ccd 100644 --- a/source/particles/hadrons/mesons/include/G4KaonZero.hh +++ b/source/particles/hadrons/mesons/include/G4KaonZero.hh @@ -51,7 +51,7 @@ class G4KaonZero : public G4ParticleDefinition private: static G4KaonZero* theInstance; G4KaonZero(){} - ~G4KaonZero(){} + ~G4KaonZero() override= default; public: static G4KaonZero* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4KaonZeroLong.hh b/source/particles/hadrons/mesons/include/G4KaonZeroLong.hh index 20342c234e6..c430af69e89 100644 --- a/source/particles/hadrons/mesons/include/G4KaonZeroLong.hh +++ b/source/particles/hadrons/mesons/include/G4KaonZeroLong.hh @@ -51,7 +51,7 @@ class G4KaonZeroLong : public G4ParticleDefinition private: static G4KaonZeroLong* theInstance; G4KaonZeroLong(){} - ~G4KaonZeroLong(){} + ~G4KaonZeroLong() override= default; public: static G4KaonZeroLong* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4KaonZeroShort.hh b/source/particles/hadrons/mesons/include/G4KaonZeroShort.hh index 8517ab21b02..b9454eef130 100644 --- a/source/particles/hadrons/mesons/include/G4KaonZeroShort.hh +++ b/source/particles/hadrons/mesons/include/G4KaonZeroShort.hh @@ -51,7 +51,7 @@ class G4KaonZeroShort : public G4ParticleDefinition private: static G4KaonZeroShort* theInstance; G4KaonZeroShort(){} - ~G4KaonZeroShort(){} + ~G4KaonZeroShort() override= default; public: static G4KaonZeroShort* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4MesonConstructor.hh b/source/particles/hadrons/mesons/include/G4MesonConstructor.hh index 9f09459db3b..786973db343 100644 --- a/source/particles/hadrons/mesons/include/G4MesonConstructor.hh +++ b/source/particles/hadrons/mesons/include/G4MesonConstructor.hh @@ -39,10 +39,6 @@ class G4MesonConstructor { //This class is a utility class for construction - public: - G4MesonConstructor(); - ~G4MesonConstructor(); - public: static void ConstructParticle(); diff --git a/source/particles/hadrons/mesons/include/G4PionMinus.hh b/source/particles/hadrons/mesons/include/G4PionMinus.hh index 8143543e603..65eb34e62e6 100644 --- a/source/particles/hadrons/mesons/include/G4PionMinus.hh +++ b/source/particles/hadrons/mesons/include/G4PionMinus.hh @@ -51,7 +51,7 @@ class G4PionMinus : public G4ParticleDefinition private: static G4PionMinus* theInstance; G4PionMinus(){} - ~G4PionMinus(){} + ~G4PionMinus() override= default; public: static G4PionMinus* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4PionPlus.hh b/source/particles/hadrons/mesons/include/G4PionPlus.hh index 6fdb42c648e..ca7271b406b 100644 --- a/source/particles/hadrons/mesons/include/G4PionPlus.hh +++ b/source/particles/hadrons/mesons/include/G4PionPlus.hh @@ -51,7 +51,7 @@ class G4PionPlus : public G4ParticleDefinition private: static G4PionPlus* theInstance; G4PionPlus(){} - ~G4PionPlus(){} + ~G4PionPlus() override= default; public: static G4PionPlus* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4PionZero.hh b/source/particles/hadrons/mesons/include/G4PionZero.hh index c1f1796b8b6..4db39bc47f0 100644 --- a/source/particles/hadrons/mesons/include/G4PionZero.hh +++ b/source/particles/hadrons/mesons/include/G4PionZero.hh @@ -51,7 +51,7 @@ class G4PionZero : public G4ParticleDefinition private: static G4PionZero* theInstance; G4PionZero(){} - ~G4PionZero(){} + ~G4PionZero() override= default; public: static G4PionZero* Definition(); diff --git a/source/particles/hadrons/mesons/include/G4Upsilon.hh b/source/particles/hadrons/mesons/include/G4Upsilon.hh index 2938370d678..d4968324266 100644 --- a/source/particles/hadrons/mesons/include/G4Upsilon.hh +++ b/source/particles/hadrons/mesons/include/G4Upsilon.hh @@ -50,7 +50,7 @@ class G4Upsilon : public G4ParticleDefinition private: static G4Upsilon* theInstance; G4Upsilon(){} - ~G4Upsilon(){} + ~G4Upsilon() override= default; public: static G4Upsilon* Definition(); diff --git a/source/particles/hadrons/mesons/src/G4AntiBMesonZero.cc b/source/particles/hadrons/mesons/src/G4AntiBMesonZero.cc index 2fde4ed36a0..1cef452c0a7 100644 --- a/source/particles/hadrons/mesons/src/G4AntiBMesonZero.cc +++ b/source/particles/hadrons/mesons/src/G4AntiBMesonZero.cc @@ -42,16 +42,16 @@ // ### AntiBMesonZero ### // ###################################################################### -G4AntiBMesonZero* G4AntiBMesonZero::theInstance = 0; +G4AntiBMesonZero* G4AntiBMesonZero::theInstance = nullptr; G4AntiBMesonZero* G4AntiBMesonZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_B0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -68,7 +68,7 @@ G4AntiBMesonZero* G4AntiBMesonZero::Definition() 0, -1, 0, 1, +1, 0, "meson", 0, 0, -511, - false, 1.520e-3*ns, NULL, + false, 1.520e-3*ns, nullptr, false, "B"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/mesons/src/G4AntiBsMesonZero.cc b/source/particles/hadrons/mesons/src/G4AntiBsMesonZero.cc index 355f340b9c8..d1b0b97d2d5 100644 --- a/source/particles/hadrons/mesons/src/G4AntiBsMesonZero.cc +++ b/source/particles/hadrons/mesons/src/G4AntiBsMesonZero.cc @@ -42,16 +42,16 @@ // ### AntiBsMesonZero ### // ###################################################################### -G4AntiBsMesonZero* G4AntiBsMesonZero::theInstance = 0; +G4AntiBsMesonZero* G4AntiBsMesonZero::theInstance = nullptr; G4AntiBsMesonZero* G4AntiBsMesonZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_Bs0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -68,7 +68,7 @@ G4AntiBsMesonZero* G4AntiBsMesonZero::Definition() 0, -1, 0, 0, 0, 0, "meson", 0, 0, -531, - false, 1.505e-3*ns, NULL, + false, 1.505e-3*ns, nullptr, false, "Bs"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/mesons/src/G4AntiDMesonZero.cc b/source/particles/hadrons/mesons/src/G4AntiDMesonZero.cc index 28f4d68bed7..834c49c0570 100644 --- a/source/particles/hadrons/mesons/src/G4AntiDMesonZero.cc +++ b/source/particles/hadrons/mesons/src/G4AntiDMesonZero.cc @@ -42,16 +42,16 @@ // ### AntiDMesonZero ### // ###################################################################### -G4AntiDMesonZero* G4AntiDMesonZero::theInstance = 0; +G4AntiDMesonZero* G4AntiDMesonZero::theInstance = nullptr; G4AntiDMesonZero* G4AntiDMesonZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_D0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -68,7 +68,7 @@ G4AntiDMesonZero* G4AntiDMesonZero::Definition() 0, -1, 0, 1, +1, 0, "meson", 0, 0, -421, - false, 0.4101e-3*ns, NULL, + false, 0.4101e-3*ns, nullptr, false, "D"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/mesons/src/G4AntiKaonZero.cc b/source/particles/hadrons/mesons/src/G4AntiKaonZero.cc index d64fcd2b524..859cb1203be 100644 --- a/source/particles/hadrons/mesons/src/G4AntiKaonZero.cc +++ b/source/particles/hadrons/mesons/src/G4AntiKaonZero.cc @@ -47,16 +47,16 @@ // ### ANTIKAONZERO ### // ###################################################################### -G4AntiKaonZero* G4AntiKaonZero::theInstance = 0; +G4AntiKaonZero* G4AntiKaonZero::theInstance = nullptr; G4AntiKaonZero* G4AntiKaonZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_kaon0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,13 +73,13 @@ G4AntiKaonZero* G4AntiKaonZero::Definition() 0, -1, 0, 1, 1, 0, "meson", 0, 0, -311, - false, 0.0, NULL, + false, 0.0, nullptr, false, "kaon"); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[2]; + auto mode = new G4VDecayChannel*[2]; // kaon0 -> Kaon0L mode[0] = new G4PhaseSpaceDecayChannel("anti_kaon0",0.500,1,"kaon0L"); // kaon0 -> Kaon0S diff --git a/source/particles/hadrons/mesons/src/G4BMesonMinus.cc b/source/particles/hadrons/mesons/src/G4BMesonMinus.cc index cc3a4e6e916..9d05648a9bf 100644 --- a/source/particles/hadrons/mesons/src/G4BMesonMinus.cc +++ b/source/particles/hadrons/mesons/src/G4BMesonMinus.cc @@ -42,16 +42,16 @@ // ### BMesonMinus ### // ###################################################################### -G4BMesonMinus* G4BMesonMinus::theInstance = 0; +G4BMesonMinus* G4BMesonMinus::theInstance = nullptr; G4BMesonMinus* G4BMesonMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "B-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -68,7 +68,7 @@ G4BMesonMinus* G4BMesonMinus::Definition() 0, -1, 0, 1, -1, 0, "meson", 0, 0, -521, - false, 1.638e-3*ns, NULL, + false, 1.638e-3*ns, nullptr, false, "B"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/mesons/src/G4BMesonPlus.cc b/source/particles/hadrons/mesons/src/G4BMesonPlus.cc index e94ce825f66..fae759b89de 100644 --- a/source/particles/hadrons/mesons/src/G4BMesonPlus.cc +++ b/source/particles/hadrons/mesons/src/G4BMesonPlus.cc @@ -42,16 +42,16 @@ // ### BMesonPLUS ### // ###################################################################### -G4BMesonPlus* G4BMesonPlus::theInstance = 0; +G4BMesonPlus* G4BMesonPlus::theInstance = nullptr; G4BMesonPlus* G4BMesonPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "B+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -68,7 +68,7 @@ G4BMesonPlus* G4BMesonPlus::Definition() 0, -1, 0, 1, +1, 0, "meson", 0, 0, 521, - false, 1.638e-3*ns, NULL, + false, 1.638e-3*ns, nullptr, false, "B"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/mesons/src/G4BMesonZero.cc b/source/particles/hadrons/mesons/src/G4BMesonZero.cc index 7fa48409b6f..bb82e77d3a0 100644 --- a/source/particles/hadrons/mesons/src/G4BMesonZero.cc +++ b/source/particles/hadrons/mesons/src/G4BMesonZero.cc @@ -42,16 +42,16 @@ // ### BMesonZero ### // ###################################################################### -G4BMesonZero* G4BMesonZero::theInstance = 0; +G4BMesonZero* G4BMesonZero::theInstance = nullptr; G4BMesonZero* G4BMesonZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "B0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -68,7 +68,7 @@ G4BMesonZero* G4BMesonZero::Definition() 0, -1, 0, 1, -1, 0, "meson", 0, 0, 511, - false, 1.520e-3*ns, NULL, + false, 1.520e-3*ns, nullptr, false, "B"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/mesons/src/G4BcMesonMinus.cc b/source/particles/hadrons/mesons/src/G4BcMesonMinus.cc index 453801dbc1d..10176cb8888 100644 --- a/source/particles/hadrons/mesons/src/G4BcMesonMinus.cc +++ b/source/particles/hadrons/mesons/src/G4BcMesonMinus.cc @@ -41,16 +41,16 @@ // ### BcMesonMinus ### // ###################################################################### -G4BcMesonMinus* G4BcMesonMinus::theInstance = 0; +G4BcMesonMinus* G4BcMesonMinus::theInstance = nullptr; G4BcMesonMinus* G4BcMesonMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "Bc-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -67,7 +67,7 @@ G4BcMesonMinus* G4BcMesonMinus::Definition() 0, -1, 0, 0, 0, 0, "meson", 0, 0, -541, - false, 0.507e-3*ns, NULL, + false, 0.507e-3*ns, nullptr, false, "Bc"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/mesons/src/G4BcMesonPlus.cc b/source/particles/hadrons/mesons/src/G4BcMesonPlus.cc index 84f9735df65..c6f0adb832f 100644 --- a/source/particles/hadrons/mesons/src/G4BcMesonPlus.cc +++ b/source/particles/hadrons/mesons/src/G4BcMesonPlus.cc @@ -41,16 +41,16 @@ // ### BcMesonPlus ### // ###################################################################### -G4BcMesonPlus* G4BcMesonPlus::theInstance = 0; +G4BcMesonPlus* G4BcMesonPlus::theInstance = nullptr; G4BcMesonPlus* G4BcMesonPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "Bc+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -67,7 +67,7 @@ G4BcMesonPlus* G4BcMesonPlus::Definition() 0, -1, 0, 0, 0, 0, "meson", 0, 0, 541, - false, 0.507e-3*ns, NULL, + false, 0.507e-3*ns, nullptr, false, "Bc"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/mesons/src/G4BsMesonZero.cc b/source/particles/hadrons/mesons/src/G4BsMesonZero.cc index 42911fd873b..6e9b2ba60f0 100644 --- a/source/particles/hadrons/mesons/src/G4BsMesonZero.cc +++ b/source/particles/hadrons/mesons/src/G4BsMesonZero.cc @@ -41,16 +41,16 @@ // ### BsMesonZero ### // ###################################################################### -G4BsMesonZero* G4BsMesonZero::theInstance = 0; +G4BsMesonZero* G4BsMesonZero::theInstance = nullptr; G4BsMesonZero* G4BsMesonZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "Bs0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -67,7 +67,7 @@ G4BsMesonZero* G4BsMesonZero::Definition() 0, -1, 0, 0, 0, 0, "meson", 0, 0, 531, - false, 1.505e-3*ns, NULL, + false, 1.505e-3*ns, nullptr, false, "Bs"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/mesons/src/G4DMesonMinus.cc b/source/particles/hadrons/mesons/src/G4DMesonMinus.cc index ad2d1c6ae17..af8109f269b 100644 --- a/source/particles/hadrons/mesons/src/G4DMesonMinus.cc +++ b/source/particles/hadrons/mesons/src/G4DMesonMinus.cc @@ -43,16 +43,16 @@ // ### DMesonMinus ### // ###################################################################### -G4DMesonMinus* G4DMesonMinus::theInstance = 0; +G4DMesonMinus* G4DMesonMinus::theInstance = nullptr; G4DMesonMinus* G4DMesonMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "D-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -69,7 +69,7 @@ G4DMesonMinus* G4DMesonMinus::Definition() 0, -1, 0, 1, -1, 0, "meson", 0, 0, -411, - false, 1.040e-3*ns, NULL, + false, 1.040e-3*ns, nullptr, false, "D"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/mesons/src/G4DMesonPlus.cc b/source/particles/hadrons/mesons/src/G4DMesonPlus.cc index cd86a5323a9..84074ca7210 100644 --- a/source/particles/hadrons/mesons/src/G4DMesonPlus.cc +++ b/source/particles/hadrons/mesons/src/G4DMesonPlus.cc @@ -43,16 +43,16 @@ // ### DMesonPLUS ### // ###################################################################### -G4DMesonPlus* G4DMesonPlus::theInstance = 0; +G4DMesonPlus* G4DMesonPlus::theInstance = nullptr; G4DMesonPlus* G4DMesonPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "D+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -69,7 +69,7 @@ G4DMesonPlus* G4DMesonPlus::Definition() 0, -1, 0, 1, +1, 0, "meson", 0, 0, 411, - false, 1.040e-3*ns, NULL, + false, 1.040e-3*ns, nullptr, false, "D"); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/mesons/src/G4DMesonZero.cc b/source/particles/hadrons/mesons/src/G4DMesonZero.cc index 1634d44a2a0..638f05b1174 100644 --- a/source/particles/hadrons/mesons/src/G4DMesonZero.cc +++ b/source/particles/hadrons/mesons/src/G4DMesonZero.cc @@ -42,16 +42,16 @@ // ### DMesonZero ### // ###################################################################### -G4DMesonZero* G4DMesonZero::theInstance = 0; +G4DMesonZero* G4DMesonZero::theInstance = nullptr; G4DMesonZero* G4DMesonZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "D0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -67,7 +67,7 @@ G4DMesonZero* G4DMesonZero::Definition() 0, -1, 0, 1, -1, 0, "meson", 0, 0, 421, - false, 0.4101e-3*ns, NULL, + false, 0.4101e-3*ns, nullptr, false, "D" ); } diff --git a/source/particles/hadrons/mesons/src/G4DsMesonMinus.cc b/source/particles/hadrons/mesons/src/G4DsMesonMinus.cc index 21b99685887..9ce85503895 100644 --- a/source/particles/hadrons/mesons/src/G4DsMesonMinus.cc +++ b/source/particles/hadrons/mesons/src/G4DsMesonMinus.cc @@ -43,16 +43,16 @@ // ### DsMesonMinus ### // ###################################################################### -G4DsMesonMinus* G4DsMesonMinus::theInstance = 0; +G4DsMesonMinus* G4DsMesonMinus::theInstance = nullptr; G4DsMesonMinus* G4DsMesonMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "Ds-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -68,7 +68,7 @@ G4DsMesonMinus* G4DsMesonMinus::Definition() 0, -1, 0, 0, 0, 0, "meson", 0, 0, -431, - false, 0.500e-3*ns, NULL, + false, 0.500e-3*ns, nullptr, false, "Ds" ); } diff --git a/source/particles/hadrons/mesons/src/G4DsMesonPlus.cc b/source/particles/hadrons/mesons/src/G4DsMesonPlus.cc index 30b75c47588..1da4376a8cd 100644 --- a/source/particles/hadrons/mesons/src/G4DsMesonPlus.cc +++ b/source/particles/hadrons/mesons/src/G4DsMesonPlus.cc @@ -43,16 +43,16 @@ // ### DsMesonPLUS ### // ###################################################################### -G4DsMesonPlus* G4DsMesonPlus::theInstance = 0; +G4DsMesonPlus* G4DsMesonPlus::theInstance = nullptr; G4DsMesonPlus* G4DsMesonPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "Ds+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -68,7 +68,7 @@ G4DsMesonPlus* G4DsMesonPlus::Definition() 0, -1, 0, 0, 0, 0, "meson", 0, 0, 431, - false, 0.500e-3*ns, NULL, + false, 0.500e-3*ns, nullptr, false, "Ds" ); } diff --git a/source/particles/hadrons/mesons/src/G4Eta.cc b/source/particles/hadrons/mesons/src/G4Eta.cc index 1515a86476c..3d610cc3fab 100644 --- a/source/particles/hadrons/mesons/src/G4Eta.cc +++ b/source/particles/hadrons/mesons/src/G4Eta.cc @@ -49,16 +49,16 @@ // ### ETA ### // ###################################################################### -G4Eta* G4Eta::theInstance = 0; +G4Eta* G4Eta::theInstance = nullptr; G4Eta* G4Eta::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "eta"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -75,13 +75,13 @@ G4Eta* G4Eta::Definition() 0, -1, +1, 0, 0, +1, "meson", 0, 0, 221, - false, 0.0*ns, NULL, + false, 0.0*ns, nullptr, false, "eta", 221); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[4]; + auto mode = new G4VDecayChannel*[4]; // eta -> gamma + gamma mode[0] = new G4PhaseSpaceDecayChannel("eta",0.3942,2,"gamma","gamma"); // eta -> pi0 + pi0 + pi0 diff --git a/source/particles/hadrons/mesons/src/G4EtaPrime.cc b/source/particles/hadrons/mesons/src/G4EtaPrime.cc index f550d5da366..1a27acb2158 100644 --- a/source/particles/hadrons/mesons/src/G4EtaPrime.cc +++ b/source/particles/hadrons/mesons/src/G4EtaPrime.cc @@ -47,16 +47,16 @@ // ### EtaPrime ### // ###################################################################### -G4EtaPrime* G4EtaPrime::theInstance = 0; +G4EtaPrime* G4EtaPrime::theInstance = nullptr; G4EtaPrime* G4EtaPrime::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "eta_prime"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,13 +73,13 @@ G4EtaPrime* G4EtaPrime::Definition() 0, -1, +1, 0, 0, +1, "meson", 0, 0, 331, - false, 0.0*ns, NULL, + false, 0.0*ns, nullptr, false, "eta_prime", 331); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[5]; + auto mode = new G4VDecayChannel*[5]; // EtaPrime -> eta + pi+ + pi- mode[0] = new G4PhaseSpaceDecayChannel("eta_prime",0.429,3,"eta","pi+","pi-"); // EtaPrime -> eta + pi0 + pi0 diff --git a/source/particles/hadrons/mesons/src/G4Etac.cc b/source/particles/hadrons/mesons/src/G4Etac.cc index 5704c9c48e9..f706fcfd211 100644 --- a/source/particles/hadrons/mesons/src/G4Etac.cc +++ b/source/particles/hadrons/mesons/src/G4Etac.cc @@ -47,16 +47,16 @@ // ### ETA ### // ###################################################################### -G4Etac* G4Etac::theInstance = 0; +G4Etac* G4Etac::theInstance = nullptr; G4Etac* G4Etac::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "etac"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4Etac* G4Etac::Definition() 0, -1, +1, 0, 0, +1, "meson", 0, 0, 441, - false, 0.0*ns, NULL, + false, 0.0*ns, nullptr, false, "etac", 441); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/mesons/src/G4JPsi.cc b/source/particles/hadrons/mesons/src/G4JPsi.cc index 7702e45188a..60deeb2d31d 100644 --- a/source/particles/hadrons/mesons/src/G4JPsi.cc +++ b/source/particles/hadrons/mesons/src/G4JPsi.cc @@ -42,16 +42,16 @@ // ### JPsi ### // ###################################################################### -G4JPsi* G4JPsi::theInstance = 0; +G4JPsi* G4JPsi::theInstance = nullptr; G4JPsi* G4JPsi::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "J/psi"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -68,7 +68,7 @@ G4JPsi* G4JPsi::Definition() 2, -1, -1, 0, 0, -1, "meson", 0, 0, 443, - false, 0.0*ns, NULL, + false, 0.0*ns, nullptr, false, "J/psi", 443); } theInstance = static_cast(anInstance); diff --git a/source/particles/hadrons/mesons/src/G4KaonMinus.cc b/source/particles/hadrons/mesons/src/G4KaonMinus.cc index 26228a3323c..53249aa7221 100644 --- a/source/particles/hadrons/mesons/src/G4KaonMinus.cc +++ b/source/particles/hadrons/mesons/src/G4KaonMinus.cc @@ -48,16 +48,16 @@ // ### KAONMINUS ### // ###################################################################### -G4KaonMinus* G4KaonMinus::theInstance = 0; +G4KaonMinus* G4KaonMinus::theInstance = nullptr; G4KaonMinus* G4KaonMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "kaon-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -74,14 +74,14 @@ G4KaonMinus* G4KaonMinus::Definition() 0, -1, 0, 1, -1, 0, "meson", 0, 0, -321, - false, 12.380*ns, NULL, + false, 12.380*ns, nullptr, false, "kaon"); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[6]; + auto mode = new G4VDecayChannel*[6]; // kaon- -> mu- + anti_nu_mu mode[0] = new G4PhaseSpaceDecayChannel("kaon-",0.6355,2,"mu-","anti_nu_mu"); // kaon- -> pi- + pi0 diff --git a/source/particles/hadrons/mesons/src/G4KaonPlus.cc b/source/particles/hadrons/mesons/src/G4KaonPlus.cc index 0acf8a70c28..59190b42944 100644 --- a/source/particles/hadrons/mesons/src/G4KaonPlus.cc +++ b/source/particles/hadrons/mesons/src/G4KaonPlus.cc @@ -48,16 +48,16 @@ // ### KAONPLUS ### // ###################################################################### -G4KaonPlus* G4KaonPlus::theInstance = 0; +G4KaonPlus* G4KaonPlus::theInstance = nullptr; G4KaonPlus* G4KaonPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "kaon+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -74,14 +74,14 @@ G4KaonPlus* G4KaonPlus::Definition() 0, -1, 0, 1, +1, 0, "meson", 0, 0, 321, - false, 12.380*ns, NULL, + false, 12.380*ns, nullptr, false, "kaon"); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[6]; + auto mode = new G4VDecayChannel*[6]; // kaon+ -> mu+ + nu_mu mode[0] = new G4PhaseSpaceDecayChannel("kaon+",0.6355,2,"mu+","nu_mu"); // kaon+ -> pi+ + pi0 diff --git a/source/particles/hadrons/mesons/src/G4KaonZero.cc b/source/particles/hadrons/mesons/src/G4KaonZero.cc index 0f59dd7c7b6..de2e34c90fa 100644 --- a/source/particles/hadrons/mesons/src/G4KaonZero.cc +++ b/source/particles/hadrons/mesons/src/G4KaonZero.cc @@ -47,16 +47,16 @@ // ### KAONZERO ### // ###################################################################### -G4KaonZero* G4KaonZero::theInstance = 0; +G4KaonZero* G4KaonZero::theInstance = nullptr; G4KaonZero* G4KaonZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "kaon0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,14 +73,14 @@ G4KaonZero* G4KaonZero::Definition() 0, -1, 0, 1, -1, 0, "meson", 0, 0, 311, - false, 0.0, NULL, + false, 0.0, nullptr, false, "kaon"); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[2]; + auto mode = new G4VDecayChannel*[2]; // kaon0 -> Kaon0L mode[0] = new G4PhaseSpaceDecayChannel("kaon0",0.500,1,"kaon0L"); // kaon0 -> Kaon0S diff --git a/source/particles/hadrons/mesons/src/G4KaonZeroLong.cc b/source/particles/hadrons/mesons/src/G4KaonZeroLong.cc index a06ba485fbc..96570866af4 100644 --- a/source/particles/hadrons/mesons/src/G4KaonZeroLong.cc +++ b/source/particles/hadrons/mesons/src/G4KaonZeroLong.cc @@ -50,16 +50,16 @@ // ### KAONZEROLONG ### // ###################################################################### -G4KaonZeroLong* G4KaonZeroLong::theInstance = 0; +G4KaonZeroLong* G4KaonZeroLong::theInstance = nullptr; G4KaonZeroLong* G4KaonZeroLong::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "kaon0L"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -76,14 +76,14 @@ G4KaonZeroLong* G4KaonZeroLong::Definition() 0, -1, 0, 1, 0, 0, "meson", 0, 0, 130, - false, 51.16*ns, NULL, + false, 51.16*ns, nullptr, false, "kaon", 130); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[6]; + auto mode = new G4VDecayChannel*[6]; // kaon0L -> pi0 + pi0 + pi0 mode[0] = new G4PhaseSpaceDecayChannel("kaon0L",0.1952,3,"pi0","pi0","pi0"); // kaon0L -> pi0 + pi+ + pi- diff --git a/source/particles/hadrons/mesons/src/G4KaonZeroShort.cc b/source/particles/hadrons/mesons/src/G4KaonZeroShort.cc index c4a2fb4ba7d..934eaea1756 100644 --- a/source/particles/hadrons/mesons/src/G4KaonZeroShort.cc +++ b/source/particles/hadrons/mesons/src/G4KaonZeroShort.cc @@ -47,16 +47,16 @@ // ### KAONZEROSHORT ### // ###################################################################### -G4KaonZeroShort* G4KaonZeroShort::theInstance = 0; +G4KaonZeroShort* G4KaonZeroShort::theInstance = nullptr; G4KaonZeroShort* G4KaonZeroShort::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "kaon0S"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,14 +73,14 @@ G4KaonZeroShort* G4KaonZeroShort::Definition() 0, -1, 0, 1, 0, 0, "meson", 0, 0, 310, - false, 0.08954*ns, NULL, + false, 0.08954*ns, nullptr, false, "kaon", 310); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels - G4VDecayChannel** mode = new G4VDecayChannel*[2]; + auto mode = new G4VDecayChannel*[2]; // kaon0s -> pi+ + pi- mode[0] = new G4PhaseSpaceDecayChannel("kaon0S",0.6920,2,"pi+","pi-"); // kaon0s -> pi0 + pi0 diff --git a/source/particles/hadrons/mesons/src/G4MesonConstructor.cc b/source/particles/hadrons/mesons/src/G4MesonConstructor.cc index f2ed954d6ce..a334fa64886 100644 --- a/source/particles/hadrons/mesons/src/G4MesonConstructor.cc +++ b/source/particles/hadrons/mesons/src/G4MesonConstructor.cc @@ -67,15 +67,6 @@ #include "G4BcMesonMinus.hh" #include "G4Upsilon.hh" -G4MesonConstructor::G4MesonConstructor() -{ -} - -G4MesonConstructor::~G4MesonConstructor() -{ -} - - void G4MesonConstructor::ConstructParticle() { ConstructLightMesons(); diff --git a/source/particles/hadrons/mesons/src/G4PionMinus.cc b/source/particles/hadrons/mesons/src/G4PionMinus.cc index e75b60b7b49..aebd5a0a54e 100644 --- a/source/particles/hadrons/mesons/src/G4PionMinus.cc +++ b/source/particles/hadrons/mesons/src/G4PionMinus.cc @@ -46,16 +46,16 @@ // ### PIONMINUS ### // ###################################################################### -G4PionMinus* G4PionMinus::theInstance = 0; +G4PionMinus* G4PionMinus::theInstance = nullptr; G4PionMinus* G4PionMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "pi-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -72,11 +72,11 @@ G4PionMinus* G4PionMinus::Definition() 0, -1, 0, 2, -2, -1, "meson", 0, 0, -211, - false, 26.033*ns, NULL, + false, 26.033*ns, nullptr, false, "pi"); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create a decay channel // pi- -> mu- + anti_nu_mu diff --git a/source/particles/hadrons/mesons/src/G4PionPlus.cc b/source/particles/hadrons/mesons/src/G4PionPlus.cc index 6a06d830e0c..0c1b13b19da 100644 --- a/source/particles/hadrons/mesons/src/G4PionPlus.cc +++ b/source/particles/hadrons/mesons/src/G4PionPlus.cc @@ -46,16 +46,16 @@ // ### PIONPLUS ### // ###################################################################### -G4PionPlus* G4PionPlus::theInstance = 0; +G4PionPlus* G4PionPlus::theInstance = nullptr; G4PionPlus* G4PionPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "pi+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -72,11 +72,11 @@ G4PionPlus* G4PionPlus::Definition() 0, -1, 0, 2, +2, -1, "meson", 0, 0, 211, - false, 26.033*ns, NULL, + false, 26.033*ns, nullptr, false, "pi"); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create a decay channel // pi+ -> mu+ + nu_mu diff --git a/source/particles/hadrons/mesons/src/G4PionZero.cc b/source/particles/hadrons/mesons/src/G4PionZero.cc index 49bece72304..23206b6e1d5 100644 --- a/source/particles/hadrons/mesons/src/G4PionZero.cc +++ b/source/particles/hadrons/mesons/src/G4PionZero.cc @@ -49,16 +49,16 @@ // ### PIONZERO ### // ###################################################################### -G4PionZero* G4PionZero::theInstance = 0; +G4PionZero* G4PionZero::theInstance = nullptr; G4PionZero* G4PionZero::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "pi0"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -75,14 +75,14 @@ G4PionZero* G4PionZero::Definition() 0, -1, +1, 2, 0, -1, "meson", 0, 0, 111, - false, 8.52e-8*ns, NULL, + false, 8.52e-8*ns, nullptr, false, "pi", 111); // Life time is given from width anInstance->SetPDGLifeTime( hbar_Planck/(anInstance->GetPDGWidth()) ); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create a decay channel G4VDecayChannel* mode; diff --git a/source/particles/hadrons/mesons/src/G4Upsilon.cc b/source/particles/hadrons/mesons/src/G4Upsilon.cc index b5cf6199792..cc544471c3c 100644 --- a/source/particles/hadrons/mesons/src/G4Upsilon.cc +++ b/source/particles/hadrons/mesons/src/G4Upsilon.cc @@ -41,16 +41,16 @@ // ### Upsilon ### // ###################################################################### -G4Upsilon* G4Upsilon::theInstance = 0; +G4Upsilon* G4Upsilon::theInstance = nullptr; G4Upsilon* G4Upsilon::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "Upsilon"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -67,7 +67,7 @@ G4Upsilon* G4Upsilon::Definition() 2, -1, -1, 0, 0, -1, "meson", 0, 0, 553, - false, 0.0*ns, NULL, + false, 0.0*ns, nullptr, false, "Upsilon", 553); } theInstance = static_cast(anInstance); diff --git a/source/particles/leptons/GNUmakefile b/source/particles/leptons/GNUmakefile deleted file mode 100644 index fd3b75cc417..00000000000 --- a/source/particles/leptons/GNUmakefile +++ /dev/null @@ -1,21 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for leptons library. Gabriele Cosmo, 18/9/96. -# -------------------------------------------------------------- - -name := G4leptons - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4PARTICLES_ALLOC_EXPORT -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/particles/management/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/particles/leptons/include/G4AntiNeutrinoE.hh b/source/particles/leptons/include/G4AntiNeutrinoE.hh index 239f29911ce..f7a412800b9 100644 --- a/source/particles/leptons/include/G4AntiNeutrinoE.hh +++ b/source/particles/leptons/include/G4AntiNeutrinoE.hh @@ -51,7 +51,7 @@ class G4AntiNeutrinoE : public G4ParticleDefinition private: static G4AntiNeutrinoE* theInstance; G4AntiNeutrinoE(){} - ~G4AntiNeutrinoE(){} + ~G4AntiNeutrinoE() override= default; public: static G4AntiNeutrinoE* Definition(); diff --git a/source/particles/leptons/include/G4AntiNeutrinoMu.hh b/source/particles/leptons/include/G4AntiNeutrinoMu.hh index 492a61cd32e..543ee9f18b8 100644 --- a/source/particles/leptons/include/G4AntiNeutrinoMu.hh +++ b/source/particles/leptons/include/G4AntiNeutrinoMu.hh @@ -51,7 +51,7 @@ class G4AntiNeutrinoMu : public G4ParticleDefinition private: static G4AntiNeutrinoMu* theInstance; G4AntiNeutrinoMu(){} - ~G4AntiNeutrinoMu(){} + ~G4AntiNeutrinoMu() override= default; public: static G4AntiNeutrinoMu* Definition(); diff --git a/source/particles/leptons/include/G4AntiNeutrinoTau.hh b/source/particles/leptons/include/G4AntiNeutrinoTau.hh index 89addc2179b..c3d902af5de 100644 --- a/source/particles/leptons/include/G4AntiNeutrinoTau.hh +++ b/source/particles/leptons/include/G4AntiNeutrinoTau.hh @@ -51,7 +51,7 @@ class G4AntiNeutrinoTau : public G4ParticleDefinition private: static G4AntiNeutrinoTau* theInstance; G4AntiNeutrinoTau(){} - ~G4AntiNeutrinoTau(){} + ~G4AntiNeutrinoTau() override= default; public: static G4AntiNeutrinoTau* Definition(); diff --git a/source/particles/leptons/include/G4Electron.hh b/source/particles/leptons/include/G4Electron.hh index 71199bbc8bd..e415e9b4a9e 100644 --- a/source/particles/leptons/include/G4Electron.hh +++ b/source/particles/leptons/include/G4Electron.hh @@ -51,7 +51,7 @@ class G4Electron : public G4ParticleDefinition private: static G4Electron* theInstance; G4Electron(){} - ~G4Electron(){} + ~G4Electron() override= default; public: static G4Electron* Definition(); diff --git a/source/particles/leptons/include/G4LeptonConstructor.hh b/source/particles/leptons/include/G4LeptonConstructor.hh index 2f51365c2fb..471823d2aba 100644 --- a/source/particles/leptons/include/G4LeptonConstructor.hh +++ b/source/particles/leptons/include/G4LeptonConstructor.hh @@ -37,12 +37,6 @@ class G4LeptonConstructor { - //This class is a utility class for constructLepton - - public: - G4LeptonConstructor(); - ~G4LeptonConstructor(); - public: static void ConstructParticle(); diff --git a/source/particles/leptons/include/G4MuonMinus.hh b/source/particles/leptons/include/G4MuonMinus.hh index 51b18b15306..d5f0d394901 100644 --- a/source/particles/leptons/include/G4MuonMinus.hh +++ b/source/particles/leptons/include/G4MuonMinus.hh @@ -51,7 +51,7 @@ class G4MuonMinus : public G4ParticleDefinition private: static G4MuonMinus* theInstance; G4MuonMinus(){} - ~G4MuonMinus(){} + ~G4MuonMinus() override= default; public: static G4MuonMinus* Definition(); diff --git a/source/particles/leptons/include/G4MuonPlus.hh b/source/particles/leptons/include/G4MuonPlus.hh index 40d358efc35..6d7bc40e299 100644 --- a/source/particles/leptons/include/G4MuonPlus.hh +++ b/source/particles/leptons/include/G4MuonPlus.hh @@ -51,7 +51,7 @@ class G4MuonPlus : public G4ParticleDefinition private: static G4MuonPlus* theInstance; G4MuonPlus(){} - ~G4MuonPlus(){} + ~G4MuonPlus() override= default; public: static G4MuonPlus* Definition(); diff --git a/source/particles/leptons/include/G4NeutrinoE.hh b/source/particles/leptons/include/G4NeutrinoE.hh index c4b2875d1bf..540b75fd888 100644 --- a/source/particles/leptons/include/G4NeutrinoE.hh +++ b/source/particles/leptons/include/G4NeutrinoE.hh @@ -51,7 +51,7 @@ class G4NeutrinoE : public G4ParticleDefinition private: static G4NeutrinoE* theInstance; G4NeutrinoE(){} - ~G4NeutrinoE(){} + ~G4NeutrinoE() override= default; public: static G4NeutrinoE* Definition(); diff --git a/source/particles/leptons/include/G4NeutrinoMu.hh b/source/particles/leptons/include/G4NeutrinoMu.hh index a105dccde05..f921d0f3a7b 100644 --- a/source/particles/leptons/include/G4NeutrinoMu.hh +++ b/source/particles/leptons/include/G4NeutrinoMu.hh @@ -51,7 +51,7 @@ class G4NeutrinoMu : public G4ParticleDefinition private: static G4NeutrinoMu* theInstance; G4NeutrinoMu(){} - ~G4NeutrinoMu(){} + ~G4NeutrinoMu() override= default; public: static G4NeutrinoMu* Definition(); diff --git a/source/particles/leptons/include/G4NeutrinoTau.hh b/source/particles/leptons/include/G4NeutrinoTau.hh index 01aed5c75f3..8bd7606d82b 100644 --- a/source/particles/leptons/include/G4NeutrinoTau.hh +++ b/source/particles/leptons/include/G4NeutrinoTau.hh @@ -51,7 +51,7 @@ class G4NeutrinoTau : public G4ParticleDefinition private: static G4NeutrinoTau* theInstance; G4NeutrinoTau(){} - ~G4NeutrinoTau(){} + ~G4NeutrinoTau() override= default; public: static G4NeutrinoTau* Definition(); diff --git a/source/particles/leptons/include/G4Positron.hh b/source/particles/leptons/include/G4Positron.hh index 71ad21a0c67..0cfe4504d47 100644 --- a/source/particles/leptons/include/G4Positron.hh +++ b/source/particles/leptons/include/G4Positron.hh @@ -52,7 +52,7 @@ class G4Positron : public G4ParticleDefinition private: static G4Positron* theInstance; G4Positron(){} - ~G4Positron(){} + ~G4Positron() override= default; public: static G4Positron* Definition(); diff --git a/source/particles/leptons/include/G4TauMinus.hh b/source/particles/leptons/include/G4TauMinus.hh index 2fd507f708f..96dabcbf8b5 100644 --- a/source/particles/leptons/include/G4TauMinus.hh +++ b/source/particles/leptons/include/G4TauMinus.hh @@ -51,7 +51,7 @@ class G4TauMinus : public G4ParticleDefinition private: static G4TauMinus* theInstance; G4TauMinus(){} - ~G4TauMinus(){} + ~G4TauMinus() override= default; public: static G4TauMinus* Definition(); diff --git a/source/particles/leptons/include/G4TauPlus.hh b/source/particles/leptons/include/G4TauPlus.hh index 6778e1bf8f0..6cde6819ed0 100644 --- a/source/particles/leptons/include/G4TauPlus.hh +++ b/source/particles/leptons/include/G4TauPlus.hh @@ -51,7 +51,7 @@ class G4TauPlus : public G4ParticleDefinition private: static G4TauPlus* theInstance; G4TauPlus(){} - ~G4TauPlus(){} + ~G4TauPlus() override= default; public: static G4TauPlus* Definition(); diff --git a/source/particles/leptons/src/G4AntiNeutrinoE.cc b/source/particles/leptons/src/G4AntiNeutrinoE.cc index c7479058d64..1ab5eaebff9 100644 --- a/source/particles/leptons/src/G4AntiNeutrinoE.cc +++ b/source/particles/leptons/src/G4AntiNeutrinoE.cc @@ -43,16 +43,16 @@ // ### ANTI NEUTRINO E ### // ###################################################################### -G4AntiNeutrinoE* G4AntiNeutrinoE::theInstance = 0; +G4AntiNeutrinoE* G4AntiNeutrinoE::theInstance = nullptr; G4AntiNeutrinoE* G4AntiNeutrinoE::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_nu_e"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -68,7 +68,7 @@ G4AntiNeutrinoE* G4AntiNeutrinoE::Definition() 1, 0, 0, 0, 0, 0, "lepton", -1, 0, -12, - true, -1.0, NULL, + true, -1.0, nullptr, false, "e" ); } diff --git a/source/particles/leptons/src/G4AntiNeutrinoMu.cc b/source/particles/leptons/src/G4AntiNeutrinoMu.cc index 4d272f4441f..44f8de0d055 100644 --- a/source/particles/leptons/src/G4AntiNeutrinoMu.cc +++ b/source/particles/leptons/src/G4AntiNeutrinoMu.cc @@ -43,16 +43,16 @@ // ###################################################################### // ### ANTI MU NEUTRINO ### // ###################################################################### -G4AntiNeutrinoMu* G4AntiNeutrinoMu::theInstance = 0; +G4AntiNeutrinoMu* G4AntiNeutrinoMu::theInstance = nullptr; G4AntiNeutrinoMu* G4AntiNeutrinoMu::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_nu_mu"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -68,7 +68,7 @@ G4AntiNeutrinoMu* G4AntiNeutrinoMu::Definition() 1, 0, 0, 0, 0, 0, "lepton", -1, 0, -14, - true, -1.0, NULL, + true, -1.0, nullptr, false, "mu" ); } diff --git a/source/particles/leptons/src/G4AntiNeutrinoTau.cc b/source/particles/leptons/src/G4AntiNeutrinoTau.cc index d109de41a01..9b4ac0fee11 100644 --- a/source/particles/leptons/src/G4AntiNeutrinoTau.cc +++ b/source/particles/leptons/src/G4AntiNeutrinoTau.cc @@ -44,16 +44,16 @@ // ###################################################################### // ### ANTI TAU NEUTRINO ### // ###################################################################### -G4AntiNeutrinoTau* G4AntiNeutrinoTau::theInstance = 0; +G4AntiNeutrinoTau* G4AntiNeutrinoTau::theInstance = nullptr; G4AntiNeutrinoTau* G4AntiNeutrinoTau::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "anti_nu_tau"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -69,7 +69,7 @@ G4AntiNeutrinoTau* G4AntiNeutrinoTau::Definition() 1, 0, 0, 0, 0, 0, "lepton", -1, 0, -16, - true, -1.0, NULL, + true, -1.0, nullptr, false, "tau" ); } diff --git a/source/particles/leptons/src/G4Electron.cc b/source/particles/leptons/src/G4Electron.cc index 12c9a4944db..f9f9ef36aee 100644 --- a/source/particles/leptons/src/G4Electron.cc +++ b/source/particles/leptons/src/G4Electron.cc @@ -43,16 +43,16 @@ // ###################################################################### // ### ELECTRON ### // ###################################################################### -G4Electron* G4Electron::theInstance = 0; +G4Electron* G4Electron::theInstance = nullptr; G4Electron* G4Electron::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "e-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -72,7 +72,7 @@ G4Electron* G4Electron::Definition() 1, 0, 0, 0, 0, 0, "lepton", 1, 0, 11, - true, -1.0, NULL, + true, -1.0, nullptr, false, "e" ); // Bohr Magnetron diff --git a/source/particles/leptons/src/G4LeptonConstructor.cc b/source/particles/leptons/src/G4LeptonConstructor.cc index dedc25507f7..5d87a934e82 100644 --- a/source/particles/leptons/src/G4LeptonConstructor.cc +++ b/source/particles/leptons/src/G4LeptonConstructor.cc @@ -47,13 +47,6 @@ #include "G4AntiNeutrinoMu.hh" #include "G4NeutrinoE.hh" #include "G4AntiNeutrinoE.hh" -G4LeptonConstructor::G4LeptonConstructor() -{ -} - -G4LeptonConstructor::~G4LeptonConstructor() -{ -} void G4LeptonConstructor::ConstructParticle() diff --git a/source/particles/leptons/src/G4MuonMinus.cc b/source/particles/leptons/src/G4MuonMinus.cc index 83e4549af35..c300f22c9ef 100644 --- a/source/particles/leptons/src/G4MuonMinus.cc +++ b/source/particles/leptons/src/G4MuonMinus.cc @@ -46,16 +46,16 @@ // ###################################################################### // ### MUONMINUS ### // ###################################################################### -G4MuonMinus* G4MuonMinus::theInstance = 0; +G4MuonMinus* G4MuonMinus::theInstance = nullptr; G4MuonMinus* G4MuonMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "mu-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -71,7 +71,7 @@ G4MuonMinus* G4MuonMinus::Definition() 1, 0, 0, 0, 0, 0, "lepton", 1, 0, 13, - false, 2196.98*ns, NULL, + false, 2196.98*ns, nullptr, false, "mu" ); // Bohr Magnetron @@ -80,7 +80,7 @@ G4MuonMinus* G4MuonMinus::Definition() anInstance->SetPDGMagneticMoment( muB * 1.0011659209); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create a decay channel G4VDecayChannel* mode = new G4MuonDecayChannel("mu-",1.00); diff --git a/source/particles/leptons/src/G4MuonPlus.cc b/source/particles/leptons/src/G4MuonPlus.cc index 863e5264ec1..f6d2ed5ddaa 100644 --- a/source/particles/leptons/src/G4MuonPlus.cc +++ b/source/particles/leptons/src/G4MuonPlus.cc @@ -46,16 +46,16 @@ // ###################################################################### // ### MUONPLUS ### // ###################################################################### -G4MuonPlus* G4MuonPlus::theInstance = 0; +G4MuonPlus* G4MuonPlus::theInstance = nullptr; G4MuonPlus* G4MuonPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "mu+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -71,7 +71,7 @@ G4MuonPlus* G4MuonPlus::Definition() 1, 0, 0, 0, 0, 0, "lepton", -1, 0, -13, - false, 2196.98*ns, NULL, + false, 2196.98*ns, nullptr, false, "mu" ); // Bohr Magnetron @@ -80,7 +80,7 @@ G4MuonPlus* G4MuonPlus::Definition() anInstance->SetPDGMagneticMoment( muB * 1.0011659209); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create a decay channel G4VDecayChannel* mode = new G4MuonDecayChannel("mu+",1.00); table->Insert(mode); diff --git a/source/particles/leptons/src/G4NeutrinoE.cc b/source/particles/leptons/src/G4NeutrinoE.cc index 93172f86915..ad89da4c12f 100644 --- a/source/particles/leptons/src/G4NeutrinoE.cc +++ b/source/particles/leptons/src/G4NeutrinoE.cc @@ -43,16 +43,16 @@ // ###################################################################### // ### NEUTRINO E ### // ###################################################################### -G4NeutrinoE* G4NeutrinoE::theInstance = 0; +G4NeutrinoE* G4NeutrinoE::theInstance = nullptr; G4NeutrinoE* G4NeutrinoE::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "nu_e"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -68,7 +68,7 @@ G4NeutrinoE* G4NeutrinoE::Definition() 1, 0, 0, 0, 0, 0, "lepton", 1, 0, 12, - true, -1.0, NULL, + true, -1.0, nullptr, false, "e" ); } diff --git a/source/particles/leptons/src/G4NeutrinoMu.cc b/source/particles/leptons/src/G4NeutrinoMu.cc index c8b01a92e22..3a127221636 100644 --- a/source/particles/leptons/src/G4NeutrinoMu.cc +++ b/source/particles/leptons/src/G4NeutrinoMu.cc @@ -43,16 +43,16 @@ // ###################################################################### // ### MU NEUTRINO ### // ###################################################################### -G4NeutrinoMu* G4NeutrinoMu::theInstance = 0; +G4NeutrinoMu* G4NeutrinoMu::theInstance = nullptr; G4NeutrinoMu* G4NeutrinoMu::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "nu_mu"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -68,7 +68,7 @@ G4NeutrinoMu* G4NeutrinoMu::Definition() 1, 0, 0, 0, 0, 0, "lepton", 1, 0, 14, - true, -1.0, NULL, + true, -1.0, nullptr, false, "mu" ); } diff --git a/source/particles/leptons/src/G4NeutrinoTau.cc b/source/particles/leptons/src/G4NeutrinoTau.cc index 0e444149dda..35ce12d0225 100644 --- a/source/particles/leptons/src/G4NeutrinoTau.cc +++ b/source/particles/leptons/src/G4NeutrinoTau.cc @@ -43,16 +43,16 @@ // ###################################################################### // ### TAU NEUTRINO ### // ###################################################################### -G4NeutrinoTau* G4NeutrinoTau::theInstance = 0; +G4NeutrinoTau* G4NeutrinoTau::theInstance = nullptr; G4NeutrinoTau* G4NeutrinoTau::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "nu_tau"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -68,7 +68,7 @@ G4NeutrinoTau* G4NeutrinoTau::Definition() 1, 0, 0, 0, 0, 0, "lepton", 1, 0, 16, - true, -1.0, NULL, + true, -1.0, nullptr, false, "tau" ); } diff --git a/source/particles/leptons/src/G4Positron.cc b/source/particles/leptons/src/G4Positron.cc index 62b3c5757f9..981a2391ec2 100644 --- a/source/particles/leptons/src/G4Positron.cc +++ b/source/particles/leptons/src/G4Positron.cc @@ -43,16 +43,16 @@ // ###################################################################### // ### POSITRON ### // ###################################################################### -G4Positron* G4Positron::theInstance = 0; +G4Positron* G4Positron::theInstance = nullptr; G4Positron* G4Positron::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "e+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -71,7 +71,7 @@ G4Positron* G4Positron::Definition() 1, 0, 0, 0, 0, 0, "lepton", -1, 0, -11, - true, -1.0, NULL, + true, -1.0, nullptr, false, "e" ); diff --git a/source/particles/leptons/src/G4TauMinus.cc b/source/particles/leptons/src/G4TauMinus.cc index 666630d485c..a690d382506 100644 --- a/source/particles/leptons/src/G4TauMinus.cc +++ b/source/particles/leptons/src/G4TauMinus.cc @@ -48,16 +48,16 @@ // ###################################################################### // ### TAUMINUS ### // ###################################################################### -G4TauMinus* G4TauMinus::theInstance = 0; +G4TauMinus* G4TauMinus::theInstance = nullptr; G4TauMinus* G4TauMinus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "tau-"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4TauMinus* G4TauMinus::Definition() 1, 0, 0, 0, 0, 0, "lepton", 1, 0, 15, - false, 290.3e-6*ns, NULL, + false, 290.3e-6*ns, nullptr, false, "tau" ); @@ -83,7 +83,7 @@ G4TauMinus* G4TauMinus::Definition() anInstance->SetPDGMagneticMoment( muB * 1.00118); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels G4VDecayChannel* mode; diff --git a/source/particles/leptons/src/G4TauPlus.cc b/source/particles/leptons/src/G4TauPlus.cc index 7dff4da6817..200c530aa58 100644 --- a/source/particles/leptons/src/G4TauPlus.cc +++ b/source/particles/leptons/src/G4TauPlus.cc @@ -48,16 +48,16 @@ // ###################################################################### // ### TAPLUS ### // ###################################################################### -G4TauPlus* G4TauPlus::theInstance = 0; +G4TauPlus* G4TauPlus::theInstance = nullptr; G4TauPlus* G4TauPlus::Definition() { - if (theInstance !=0) return theInstance; + if (theInstance !=nullptr) return theInstance; const G4String name = "tau+"; // search in particle table] G4ParticleTable* pTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* anInstance = pTable->FindParticle(name); - if (anInstance ==0) + if (anInstance ==nullptr) { // create particle // @@ -73,7 +73,7 @@ G4TauPlus* G4TauPlus::Definition() 1, 0, 0, 0, 0, 0, "lepton", -1, 0, -15, - false, 290.3e-6*ns, NULL, + false, 290.3e-6*ns, nullptr, false, "tau" ); // Bohr Magnetron @@ -82,7 +82,7 @@ G4TauPlus* G4TauPlus::Definition() anInstance->SetPDGMagneticMoment( muB * 1.00118); //create Decay Table - G4DecayTable* table = new G4DecayTable(); + auto table = new G4DecayTable(); // create decay channels G4VDecayChannel* mode; diff --git a/source/particles/management/GNUmakefile b/source/particles/management/GNUmakefile deleted file mode 100644 index 40fc0f53c67..00000000000 --- a/source/particles/management/GNUmakefile +++ /dev/null @@ -1,24 +0,0 @@ -# ---------------------------------------------------------------- -# GNUmakefile for particle management library. G.Cosmo, 4/4/97. -# ---------------------------------------------------------------- - -name := G4partman - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4PARTICLES_ALLOC_EXPORT -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/materials/include - - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/particles/management/include/G4DalitzDecayChannel.hh b/source/particles/management/include/G4DalitzDecayChannel.hh index 1f2fa655f67..4073e164496 100644 --- a/source/particles/management/include/G4DalitzDecayChannel.hh +++ b/source/particles/management/include/G4DalitzDecayChannel.hh @@ -49,19 +49,19 @@ class G4DalitzDecayChannel : public G4VDecayChannel const G4String& theLeptonName, const G4String& theAntiLeptonName); - virtual ~G4DalitzDecayChannel(); + ~G4DalitzDecayChannel() override = default; - virtual G4DecayProducts* DecayIt(G4double); + G4DecayProducts* DecayIt(G4double) override; protected: - G4DalitzDecayChannel(const G4DalitzDecayChannel&); + G4DalitzDecayChannel(const G4DalitzDecayChannel&) = default; G4DalitzDecayChannel& operator=(const G4DalitzDecayChannel&); // Copy constructor and assignment operator private: - G4DalitzDecayChannel(); + G4DalitzDecayChannel() = default; enum{idGamma=0, idLepton=1, idAntiLepton=2}; }; diff --git a/source/particles/management/include/G4DecayTableMessenger.hh b/source/particles/management/include/G4DecayTableMessenger.hh index 567daffce00..db8d488186b 100644 --- a/source/particles/management/include/G4DecayTableMessenger.hh +++ b/source/particles/management/include/G4DecayTableMessenger.hh @@ -59,10 +59,10 @@ class G4DecayTableMessenger : public G4UImessenger public: G4DecayTableMessenger(G4ParticleTable* pTable = nullptr); - virtual ~G4DecayTableMessenger(); + ~G4DecayTableMessenger() override; - virtual void SetNewValue(G4UIcommand* command, G4String newValues); - virtual G4String GetCurrentValue(G4UIcommand* command); + void SetNewValue(G4UIcommand* command, G4String newValues) override; + G4String GetCurrentValue(G4UIcommand* command) override; G4DecayTableMessenger(const G4DecayTableMessenger&) = delete; G4DecayTableMessenger& operator= (const G4DecayTableMessenger&) = delete; diff --git a/source/particles/management/include/G4DynamicParticle.icc b/source/particles/management/include/G4DynamicParticle.icc index d7b99e1f008..7e25ae1312e 100644 --- a/source/particles/management/include/G4DynamicParticle.icc +++ b/source/particles/management/include/G4DynamicParticle.icc @@ -61,12 +61,12 @@ G4DynamicParticle::GetElectronOccupancy() const inline G4int G4DynamicParticle::GetTotalOccupancy() const { - return (theElectronOccupancy) ? theElectronOccupancy->GetTotalOccupancy() : 0; + return (theElectronOccupancy) != nullptr ? theElectronOccupancy->GetTotalOccupancy() : 0; } inline G4int G4DynamicParticle::GetOccupancy(G4int orbit) const { - return (theElectronOccupancy) ? theElectronOccupancy->GetOccupancy(orbit) : 0; + return (theElectronOccupancy) != nullptr ? theElectronOccupancy->GetOccupancy(orbit) : 0; } inline void G4DynamicParticle::AddElectron(G4int orbit, G4int number) diff --git a/source/particles/management/include/G4HyperNucleiProperties.hh b/source/particles/management/include/G4HyperNucleiProperties.hh index b78d21a3276..d9569d051a0 100644 --- a/source/particles/management/include/G4HyperNucleiProperties.hh +++ b/source/particles/management/include/G4HyperNucleiProperties.hh @@ -46,8 +46,8 @@ class G4HyperNucleiProperties public: - G4HyperNucleiProperties() {} - ~G4HyperNucleiProperties() {} + G4HyperNucleiProperties() = default; + ~G4HyperNucleiProperties() = default; static G4double GetAtomicMass(G4int A, G4int Z, G4int L); // Calculate Mass Excess of nucleus A, Z, L(number of Lambda) diff --git a/source/particles/management/include/G4Ions.hh b/source/particles/management/include/G4Ions.hh index 908450d76f9..f4b2227eb4b 100644 --- a/source/particles/management/include/G4Ions.hh +++ b/source/particles/management/include/G4Ions.hh @@ -68,7 +68,7 @@ class G4Ions : public G4ParticleDefinition G4int isomer = 0 ); - virtual ~G4Ions(); + ~G4Ions() override = default; inline G4Ions* IonsDefinition(); inline G4Ions* Ions(); @@ -100,7 +100,7 @@ class G4Ions : public G4ParticleDefinition protected: - G4Ions(); + G4Ions() = default; private: diff --git a/source/particles/management/include/G4IsotopeProperty.hh b/source/particles/management/include/G4IsotopeProperty.hh index 70c8d274824..17d8b262184 100644 --- a/source/particles/management/include/G4IsotopeProperty.hh +++ b/source/particles/management/include/G4IsotopeProperty.hh @@ -42,7 +42,7 @@ class G4IsotopeProperty { public: - G4IsotopeProperty(); + G4IsotopeProperty() = default; virtual ~G4IsotopeProperty(); // Constructor & destructor @@ -106,7 +106,7 @@ class G4IsotopeProperty G4DecayTable* fDecayTable = nullptr; // decay Table G4double fMagneticMoment = 0.0; // magnetic moment G4int fIsomerLevel = -1; // isomer level - G4Ions::G4FloatLevelBase fFloatLevelBase; // floating level base + G4Ions::G4FloatLevelBase fFloatLevelBase{G4Ions::G4FloatLevelBase::no_Float}; // floating level base }; // ------------------------ diff --git a/source/particles/management/include/G4KL3DecayChannel.hh b/source/particles/management/include/G4KL3DecayChannel.hh index 94a2ab1db3e..5dce1b0a5b5 100644 --- a/source/particles/management/include/G4KL3DecayChannel.hh +++ b/source/particles/management/include/G4KL3DecayChannel.hh @@ -43,10 +43,10 @@ class G4KL3DecayChannel : public G4VDecayChannel const G4String& thePionName, const G4String& theLeptonName, const G4String& theNutrinoName); - virtual ~G4KL3DecayChannel(); + ~G4KL3DecayChannel() override = default; // Constructor & destructor - virtual G4DecayProducts* DecayIt(G4double); + G4DecayProducts* DecayIt(G4double) override; inline void SetDalitzParameter(G4double aLambda, G4double aXi ); inline G4double GetDalitzParameterLambda() const; @@ -54,7 +54,7 @@ class G4KL3DecayChannel : public G4VDecayChannel protected: - G4KL3DecayChannel(const G4KL3DecayChannel&); + G4KL3DecayChannel(const G4KL3DecayChannel&) = default; G4KL3DecayChannel& operator=(const G4KL3DecayChannel&); // Copy constructor and assignment operator @@ -83,7 +83,7 @@ class G4KL3DecayChannel : public G4VDecayChannel private: - G4KL3DecayChannel(); + G4KL3DecayChannel() = default; private: diff --git a/source/particles/management/include/G4MuonDecayChannel.hh b/source/particles/management/include/G4MuonDecayChannel.hh index 3448473b5bd..36b45979ae6 100644 --- a/source/particles/management/include/G4MuonDecayChannel.hh +++ b/source/particles/management/include/G4MuonDecayChannel.hh @@ -46,16 +46,16 @@ class G4MuonDecayChannel : public G4VDecayChannel G4MuonDecayChannel(const G4String& parentName, G4double BR); - virtual ~G4MuonDecayChannel(); + ~G4MuonDecayChannel() override = default; // Constructor & destructor - virtual G4DecayProducts* DecayIt(G4double); + G4DecayProducts* DecayIt(G4double) override; protected: - G4MuonDecayChannel(); + G4MuonDecayChannel() = default; - G4MuonDecayChannel(const G4MuonDecayChannel&); + G4MuonDecayChannel(const G4MuonDecayChannel&) = default; G4MuonDecayChannel& operator=(const G4MuonDecayChannel&); // Copy constructor and assignment operator }; diff --git a/source/particles/management/include/G4MuonDecayChannelWithSpin.hh b/source/particles/management/include/G4MuonDecayChannelWithSpin.hh index c362685f587..c1520baa7bd 100644 --- a/source/particles/management/include/G4MuonDecayChannelWithSpin.hh +++ b/source/particles/management/include/G4MuonDecayChannelWithSpin.hh @@ -54,19 +54,19 @@ class G4MuonDecayChannelWithSpin : public G4MuonDecayChannel G4MuonDecayChannelWithSpin(const G4String& theParentName, G4double theBR); - virtual ~G4MuonDecayChannelWithSpin(); + ~G4MuonDecayChannelWithSpin() override = default; - virtual G4DecayProducts* DecayIt(G4double); + G4DecayProducts* DecayIt(G4double) override; protected: - G4MuonDecayChannelWithSpin(const G4MuonDecayChannelWithSpin&); + G4MuonDecayChannelWithSpin(const G4MuonDecayChannelWithSpin&) = default; G4MuonDecayChannelWithSpin& operator=(const G4MuonDecayChannelWithSpin&); // Copy constructor and assignment operator private: - G4MuonDecayChannelWithSpin(); + G4MuonDecayChannelWithSpin() = default; // Radiative Correction Factors diff --git a/source/particles/management/include/G4MuonRadiativeDecayChannelWithSpin.hh b/source/particles/management/include/G4MuonRadiativeDecayChannelWithSpin.hh index c6993df0be0..739983d9385 100644 --- a/source/particles/management/include/G4MuonRadiativeDecayChannelWithSpin.hh +++ b/source/particles/management/include/G4MuonRadiativeDecayChannelWithSpin.hh @@ -56,19 +56,19 @@ class G4MuonRadiativeDecayChannelWithSpin : public G4VDecayChannel G4MuonRadiativeDecayChannelWithSpin(const G4String& theParentName, G4double theBR); - virtual ~G4MuonRadiativeDecayChannelWithSpin(); + ~G4MuonRadiativeDecayChannelWithSpin() override = default; - virtual G4DecayProducts* DecayIt(G4double); + G4DecayProducts* DecayIt(G4double) override; protected: - G4MuonRadiativeDecayChannelWithSpin(const G4MuonRadiativeDecayChannelWithSpin&); + G4MuonRadiativeDecayChannelWithSpin(const G4MuonRadiativeDecayChannelWithSpin&) = default; G4MuonRadiativeDecayChannelWithSpin& operator=(const G4MuonRadiativeDecayChannelWithSpin&); // Copy constructor and assignment operator private: - G4MuonRadiativeDecayChannelWithSpin(); + G4MuonRadiativeDecayChannelWithSpin() = default; G4double fron(G4double Pmu, G4double x, G4double y, G4double cthetaE, G4double cthetaG, G4double cthetaEG); diff --git a/source/particles/management/include/G4MuonicAtom.hh b/source/particles/management/include/G4MuonicAtom.hh index 6f8c3b7e591..d766e3b1e28 100644 --- a/source/particles/management/include/G4MuonicAtom.hh +++ b/source/particles/management/include/G4MuonicAtom.hh @@ -56,7 +56,7 @@ class G4MuonicAtom : public G4Ions G4double NCLifeTime = -1.0 ); - virtual ~G4MuonicAtom(); + ~G4MuonicAtom() override = default; G4MuonicAtom* MuonicAtomDefinition(); G4MuonicAtom* MuonicAtom(); G4Ions const* GetBaseIon() const; diff --git a/source/particles/management/include/G4NeutronBetaDecayChannel.hh b/source/particles/management/include/G4NeutronBetaDecayChannel.hh index 9f1500d7a35..a7b3d125f09 100644 --- a/source/particles/management/include/G4NeutronBetaDecayChannel.hh +++ b/source/particles/management/include/G4NeutronBetaDecayChannel.hh @@ -45,13 +45,13 @@ class G4NeutronBetaDecayChannel : public G4VDecayChannel G4NeutronBetaDecayChannel(const G4String& theParentName, G4double theBR); - virtual ~G4NeutronBetaDecayChannel(); + ~G4NeutronBetaDecayChannel() override = default; - virtual G4DecayProducts* DecayIt(G4double); + G4DecayProducts* DecayIt(G4double) override; protected: - G4NeutronBetaDecayChannel(); + G4NeutronBetaDecayChannel() = default; G4NeutronBetaDecayChannel(const G4NeutronBetaDecayChannel&); G4NeutronBetaDecayChannel& operator=(const G4NeutronBetaDecayChannel&); diff --git a/source/particles/management/include/G4NucleiProperties.hh b/source/particles/management/include/G4NucleiProperties.hh index 06b9d026da1..e1e00846975 100644 --- a/source/particles/management/include/G4NucleiProperties.hh +++ b/source/particles/management/include/G4NucleiProperties.hh @@ -45,8 +45,8 @@ class G4NucleiProperties { public: - G4NucleiProperties() {} - ~G4NucleiProperties() {} + G4NucleiProperties() = default; + ~G4NucleiProperties() = default; static G4double GetNuclearMass(const G4double A, const G4double Z); static G4double GetNuclearMass(const G4int A, const G4int Z); diff --git a/source/particles/management/include/G4NucleiPropertiesTableAME12.hh b/source/particles/management/include/G4NucleiPropertiesTableAME12.hh index f84aa4aca28..bea516521d1 100644 --- a/source/particles/management/include/G4NucleiPropertiesTableAME12.hh +++ b/source/particles/management/include/G4NucleiPropertiesTableAME12.hh @@ -52,7 +52,7 @@ class G4NucleiPropertiesTableAME12 { public: - ~G4NucleiPropertiesTableAME12() {} + ~G4NucleiPropertiesTableAME12() = default; // Destructor enum {nEntries = 3353,MaxA = 295, ZMax = 120}; @@ -63,7 +63,7 @@ class G4NucleiPropertiesTableAME12 private: - G4NucleiPropertiesTableAME12(); + G4NucleiPropertiesTableAME12() = default; // Default constructor - this class should only be created once! static G4double GetMassExcess(G4int Z, G4int A); diff --git a/source/particles/management/include/G4NucleiPropertiesTheoreticalTable.hh b/source/particles/management/include/G4NucleiPropertiesTheoreticalTable.hh index ba51ed6114f..fc84ca4fc0e 100644 --- a/source/particles/management/include/G4NucleiPropertiesTheoreticalTable.hh +++ b/source/particles/management/include/G4NucleiPropertiesTheoreticalTable.hh @@ -44,7 +44,7 @@ class G4NucleiPropertiesTheoreticalTable { public: - ~G4NucleiPropertiesTheoreticalTable(){} + ~G4NucleiPropertiesTheoreticalTable()= default; enum {nEntries = 8979, shortTableSize = 137}; diff --git a/source/particles/management/include/G4NuclideTable.hh b/source/particles/management/include/G4NuclideTable.hh index ca90c8e6b8e..1366fb226da 100644 --- a/source/particles/management/include/G4NuclideTable.hh +++ b/source/particles/management/include/G4NuclideTable.hh @@ -55,7 +55,7 @@ class G4NuclideTable : public G4VIsotopeTable using G4IsotopeList = std::vector; - virtual ~G4NuclideTable(); + ~G4NuclideTable() override; G4NuclideTable (const G4NuclideTable&) = delete; G4NuclideTable& operator = (const G4NuclideTable&) = delete; @@ -83,10 +83,10 @@ class G4NuclideTable : public G4VIsotopeTable inline std::size_t GetSizeOfIsotopeList(); - virtual G4IsotopeProperty* GetIsotope(G4int Z, G4int A, G4double E, - G4Ions::G4FloatLevelBase flb=G4Ions::G4FloatLevelBase::no_Float); - virtual G4IsotopeProperty* GetIsotopeByIsoLvl(G4int Z, G4int A, - G4int lvl=0); + G4IsotopeProperty* GetIsotope(G4int Z, G4int A, G4double E, + G4Ions::G4FloatLevelBase flb=G4Ions::G4FloatLevelBase::no_Float) override; + G4IsotopeProperty* GetIsotopeByIsoLvl(G4int Z, G4int A, + G4int lvl=0) override; // It will replace the pure virtual one in the abstract base class. // Z: Atomic Number // A: Atomic Mass @@ -171,20 +171,20 @@ G4double G4NuclideTable::GetLevelTolerance() inline std::size_t G4NuclideTable::GetSizeOfIsotopeList() { - return (fIsotopeList ? fIsotopeList->size() : static_cast(0) ); + return (fIsotopeList != nullptr ? fIsotopeList->size() : static_cast(0) ); } inline std::size_t G4NuclideTable::entries() const { - return (fIsotopeList ? fIsotopeList->size() : std::size_t(0) ); + return (fIsotopeList != nullptr ? fIsotopeList->size() : std::size_t(0) ); } inline G4IsotopeProperty* G4NuclideTable::GetIsotopeByIndex(std::size_t idx) const { - if (fIsotopeList && idxsize() ) return (*fIsotopeList)[idx]; - else return nullptr; + if ((fIsotopeList != nullptr) && idxsize() ) return (*fIsotopeList)[idx]; + return nullptr; } #endif diff --git a/source/particles/management/include/G4NuclideTableMessenger.hh b/source/particles/management/include/G4NuclideTableMessenger.hh index 1bf1125f39c..9652acaed6c 100644 --- a/source/particles/management/include/G4NuclideTableMessenger.hh +++ b/source/particles/management/include/G4NuclideTableMessenger.hh @@ -51,12 +51,12 @@ class G4NuclideTableMessenger : public G4UImessenger public: G4NuclideTableMessenger(G4NuclideTable* nuclideTable = nullptr); - virtual ~G4NuclideTableMessenger(); + ~G4NuclideTableMessenger() override; G4NuclideTableMessenger(const G4NuclideTableMessenger&) = delete; G4NuclideTableMessenger& operator=(const G4NuclideTableMessenger&) = delete; - virtual void SetNewValue(G4UIcommand* command, G4String newValues); + void SetNewValue(G4UIcommand* command, G4String newValues) override; private: diff --git a/source/particles/management/include/G4PDGCodeChecker.hh b/source/particles/management/include/G4PDGCodeChecker.hh index 9a4ea7b3cd4..72a6c85c448 100644 --- a/source/particles/management/include/G4PDGCodeChecker.hh +++ b/source/particles/management/include/G4PDGCodeChecker.hh @@ -38,7 +38,7 @@ class G4PDGCodeChecker public: G4PDGCodeChecker(); - ~G4PDGCodeChecker(); + ~G4PDGCodeChecker() = default; G4int CheckPDGCode(G4int code, const G4String& type); diff --git a/source/particles/management/include/G4PDefManager.hh b/source/particles/management/include/G4PDefManager.hh index f7c6914a11a..25425cbcf8f 100644 --- a/source/particles/management/include/G4PDefManager.hh +++ b/source/particles/management/include/G4PDefManager.hh @@ -110,7 +110,7 @@ class G4PDefManager private: - G4int totalobj; + G4int totalobj{0}; G4Mutex mutex; }; diff --git a/source/particles/management/include/G4ParticleDefinition.icc b/source/particles/management/include/G4ParticleDefinition.icc index 7bb188f48d2..4a1088e9056 100644 --- a/source/particles/management/include/G4ParticleDefinition.icc +++ b/source/particles/management/include/G4ParticleDefinition.icc @@ -40,8 +40,8 @@ G4bool G4ParticleDefinition::GetPDGStable() const { if(IsGeneralIon()) { return (GetIonLifeTime()<0.); } - else - { return thePDGStable; } + + return thePDGStable; } inline @@ -216,8 +216,7 @@ G4int G4ParticleDefinition::GetParticleDefinitionID() const inline G4bool G4ParticleDefinition::IsHypernucleus() const { - if ( GetNumberOfLambdasInHypernucleus() > 0 ) return true; - return false; + return GetNumberOfLambdasInHypernucleus() > 0; } inline @@ -234,8 +233,7 @@ G4int G4ParticleDefinition::GetNumberOfLambdasInHypernucleus() const inline G4bool G4ParticleDefinition::IsAntiHypernucleus() const { - if ( GetNumberOfAntiLambdasInAntiHypernucleus() > 0 ) return true; - return false; + return GetNumberOfAntiLambdasInAntiHypernucleus() > 0; } inline diff --git a/source/particles/management/include/G4ParticleMessenger.hh b/source/particles/management/include/G4ParticleMessenger.hh index b178697c80f..e2dcf800a74 100644 --- a/source/particles/management/include/G4ParticleMessenger.hh +++ b/source/particles/management/include/G4ParticleMessenger.hh @@ -77,13 +77,13 @@ class G4ParticleMessenger : public G4UImessenger public: G4ParticleMessenger(G4ParticleTable* pTable = nullptr); - virtual ~G4ParticleMessenger(); + ~G4ParticleMessenger() override; G4ParticleMessenger(const G4ParticleMessenger&) = delete; G4ParticleMessenger& operator=(const G4ParticleMessenger&) = delete; - void SetNewValue(G4UIcommand* command, G4String newValues); - G4String GetCurrentValue(G4UIcommand* command); + void SetNewValue(G4UIcommand* command, G4String newValues) override; + G4String GetCurrentValue(G4UIcommand* command) override; private: diff --git a/source/particles/management/include/G4ParticlePropertyData.hh b/source/particles/management/include/G4ParticlePropertyData.hh index 34d1c2688a9..2aa1f2a970e 100644 --- a/source/particles/management/include/G4ParticlePropertyData.hh +++ b/source/particles/management/include/G4ParticlePropertyData.hh @@ -53,7 +53,7 @@ class G4ParticlePropertyData G4ParticlePropertyData(const G4ParticlePropertyData& right); - virtual ~G4ParticlePropertyData(); + virtual ~G4ParticlePropertyData() = default; G4ParticlePropertyData& operator=(const G4ParticlePropertyData& right); diff --git a/source/particles/management/include/G4ParticlePropertyData.icc b/source/particles/management/include/G4ParticlePropertyData.icc index fa55f6ed0e6..fe3c7d3ec84 100644 --- a/source/particles/management/include/G4ParticlePropertyData.icc +++ b/source/particles/management/include/G4ParticlePropertyData.icc @@ -47,10 +47,9 @@ G4int G4ParticlePropertyData::GetQuarkContent(G4int flavor) const { return theQuarkContent[flavor-1]; } - else - { - return 0; - } + + return 0; + } inline @@ -60,10 +59,9 @@ G4int G4ParticlePropertyData::GetAntiQuarkContent(G4int flavor) const { return theAntiQuarkContent[flavor-1]; } - else - { - return 0; - } + + return 0; + } inline diff --git a/source/particles/management/include/G4ParticlePropertyMessenger.hh b/source/particles/management/include/G4ParticlePropertyMessenger.hh index 257d4153e0a..f09db5ae335 100644 --- a/source/particles/management/include/G4ParticlePropertyMessenger.hh +++ b/source/particles/management/include/G4ParticlePropertyMessenger.hh @@ -60,13 +60,13 @@ class G4ParticlePropertyMessenger : public G4UImessenger public: G4ParticlePropertyMessenger(G4ParticleTable* pTable = nullptr); - virtual ~G4ParticlePropertyMessenger(); + ~G4ParticlePropertyMessenger() override; G4ParticlePropertyMessenger(const G4ParticlePropertyMessenger&) = delete; G4ParticlePropertyMessenger& operator=(const G4ParticlePropertyMessenger&) = delete; - virtual void SetNewValue(G4UIcommand* command, G4String newValues); - virtual G4String GetCurrentValue(G4UIcommand* command); + void SetNewValue(G4UIcommand* command, G4String newValues) override; + G4String GetCurrentValue(G4UIcommand* command) override; private: diff --git a/source/particles/management/include/G4ParticleTableIterator.hh b/source/particles/management/include/G4ParticleTableIterator.hh index 638bb113ee0..1d2caf9706d 100644 --- a/source/particles/management/include/G4ParticleTableIterator.hh +++ b/source/particles/management/include/G4ParticleTableIterator.hh @@ -49,7 +49,7 @@ template < class K, class V > class G4ParticleTableIterator { if(!defined) return false; ++it; - return it!=mydict->end() ? true : false; + return static_cast(it!=mydict->end()); } G4bool operator()() diff --git a/source/particles/management/include/G4ParticlesWorkspace.hh b/source/particles/management/include/G4ParticlesWorkspace.hh index 01c0da05998..d7fcaf05484 100644 --- a/source/particles/management/include/G4ParticlesWorkspace.hh +++ b/source/particles/management/include/G4ParticlesWorkspace.hh @@ -54,7 +54,7 @@ class G4ParticlesWorkspace using pool_type = G4TWorkspacePool; G4ParticlesWorkspace(G4bool verbose=false); - ~G4ParticlesWorkspace(); + ~G4ParticlesWorkspace() = default; void UseWorkspace(); // Take ownership void ReleaseWorkspace(); // Release ownership diff --git a/source/particles/management/include/G4PhaseSpaceDecayChannel.hh b/source/particles/management/include/G4PhaseSpaceDecayChannel.hh index fa8894ce3e7..d60bbbe638a 100644 --- a/source/particles/management/include/G4PhaseSpaceDecayChannel.hh +++ b/source/particles/management/include/G4PhaseSpaceDecayChannel.hh @@ -56,7 +56,7 @@ class G4PhaseSpaceDecayChannel : public G4VDecayChannel const G4String& theDaughterName5 = "" ); // Constructors - virtual ~G4PhaseSpaceDecayChannel(); + ~G4PhaseSpaceDecayChannel() override = default; // Destructor G4bool SetDaughterMasses( G4double masses[]); @@ -65,8 +65,8 @@ class G4PhaseSpaceDecayChannel : public G4VDecayChannel G4bool SampleDaughterMasses(); - virtual G4DecayProducts* DecayIt(G4double); - G4bool IsOKWithParentMass(G4double parentMass); + G4DecayProducts* DecayIt(G4double) override; + G4bool IsOKWithParentMass(G4double parentMass) override; static G4double Pmx(G4double e, G4double p1, G4double p2); diff --git a/source/particles/management/include/G4PionRadiativeDecayChannel.hh b/source/particles/management/include/G4PionRadiativeDecayChannel.hh index c94b08a37a2..f7cd9670ae3 100644 --- a/source/particles/management/include/G4PionRadiativeDecayChannel.hh +++ b/source/particles/management/include/G4PionRadiativeDecayChannel.hh @@ -49,15 +49,15 @@ class G4PionRadiativeDecayChannel : public G4VDecayChannel G4PionRadiativeDecayChannel(const G4String& theParentName, G4double theBR); - virtual ~G4PionRadiativeDecayChannel(); + ~G4PionRadiativeDecayChannel() override = default; - virtual G4DecayProducts* DecayIt(G4double); + G4DecayProducts* DecayIt(G4double) override; protected: - G4PionRadiativeDecayChannel(); + G4PionRadiativeDecayChannel() = default; - G4PionRadiativeDecayChannel(const G4PionRadiativeDecayChannel&); + G4PionRadiativeDecayChannel(const G4PionRadiativeDecayChannel&) = default; G4PionRadiativeDecayChannel& operator=(const G4PionRadiativeDecayChannel&); // Copy constructor and assignment operator }; diff --git a/source/particles/management/include/G4PrimaryParticle.hh b/source/particles/management/include/G4PrimaryParticle.hh index d4b27402fd9..2369d192235 100644 --- a/source/particles/management/include/G4PrimaryParticle.hh +++ b/source/particles/management/include/G4PrimaryParticle.hh @@ -236,7 +236,7 @@ inline G4double G4PrimaryParticle::GetTotalMomentum() const { if (mass<0.) return kinE; - else return std::sqrt(kinE*(kinE+2.*mass)); + return std::sqrt(kinE*(kinE+2.*mass)); } inline @@ -278,7 +278,7 @@ G4double G4PrimaryParticle::GetPz() const inline G4double G4PrimaryParticle::GetTotalEnergy() const { if (mass<0.) return kinE; - else return kinE+mass; + return kinE+mass; } inline diff --git a/source/particles/management/include/G4PrimaryVertex.hh b/source/particles/management/include/G4PrimaryVertex.hh index 37c380ab095..70d55c8956e 100644 --- a/source/particles/management/include/G4PrimaryVertex.hh +++ b/source/particles/management/include/G4PrimaryVertex.hh @@ -50,7 +50,7 @@ class G4PrimaryVertex { public: - G4PrimaryVertex(); + G4PrimaryVertex() = default; G4PrimaryVertex(G4double x0,G4double y0,G4double z0,G4double t0); G4PrimaryVertex(G4ThreeVector xyz0, G4double t0); // Constructors diff --git a/source/particles/management/include/G4TauLeptonicDecayChannel.hh b/source/particles/management/include/G4TauLeptonicDecayChannel.hh index 0ea4f78225f..8eb76396986 100644 --- a/source/particles/management/include/G4TauLeptonicDecayChannel.hh +++ b/source/particles/management/include/G4TauLeptonicDecayChannel.hh @@ -47,15 +47,15 @@ class G4TauLeptonicDecayChannel : public G4VDecayChannel G4TauLeptonicDecayChannel(const G4String& theParentName, G4double theBR, const G4String& theLeptonName); - virtual ~G4TauLeptonicDecayChannel(); + ~G4TauLeptonicDecayChannel() override = default; - virtual G4DecayProducts* DecayIt(G4double); + G4DecayProducts* DecayIt(G4double) override; protected: - G4TauLeptonicDecayChannel(); + G4TauLeptonicDecayChannel() = default; - G4TauLeptonicDecayChannel(const G4TauLeptonicDecayChannel&); + G4TauLeptonicDecayChannel(const G4TauLeptonicDecayChannel&) = default; G4TauLeptonicDecayChannel& operator=(const G4TauLeptonicDecayChannel&); private: diff --git a/source/particles/management/include/G4VDecayChannel.hh b/source/particles/management/include/G4VDecayChannel.hh index bd2cf30547d..08877280dcb 100644 --- a/source/particles/management/include/G4VDecayChannel.hh +++ b/source/particles/management/include/G4VDecayChannel.hh @@ -208,13 +208,12 @@ G4ParticleDefinition* G4VDecayChannel::GetDaughter(G4int anIndex) { return G4MT_daughters[anIndex]; } - else - { - if (verboseLevel>0) + + if (verboseLevel>0) G4cout << "G4VDecayChannel::GetDaughter index out of range " << anIndex << G4endl; return nullptr; - } + } inline @@ -224,15 +223,14 @@ const G4String& G4VDecayChannel::GetDaughterName(G4int anIndex) const { return *daughters_name[anIndex]; } - else - { - if (verboseLevel>0) + + if (verboseLevel>0) { G4cout << "G4VDecayChannel::GetDaughterName "; G4cout << "index out of range " << anIndex << G4endl; } return GetNoName(); - } + } inline @@ -242,15 +240,14 @@ G4double G4VDecayChannel::GetDaughterMass(G4int anIndex) const { return G4MT_daughters_mass[anIndex]; } - else - { - if (verboseLevel>0) + + if (verboseLevel>0) { G4cout << "G4VDecayChannel::GetDaughterMass "; G4cout << "index out of range " << anIndex << G4endl; } return 0.0; - } + } inline @@ -277,7 +274,7 @@ G4double G4VDecayChannel::GetParentMass() const inline void G4VDecayChannel::SetParent(const G4String& particle_name) { - if (parent_name != nullptr) delete parent_name; + delete parent_name; parent_name = new G4String(particle_name); G4MT_parent = nullptr; } diff --git a/source/particles/management/include/G4VIsotopeTable.hh b/source/particles/management/include/G4VIsotopeTable.hh index e1814b5af0a..657ab94eb39 100644 --- a/source/particles/management/include/G4VIsotopeTable.hh +++ b/source/particles/management/include/G4VIsotopeTable.hh @@ -45,15 +45,15 @@ class G4VIsotopeTable { public: - G4VIsotopeTable(); + G4VIsotopeTable() = default; explicit G4VIsotopeTable(const G4String&); // Constructors - G4VIsotopeTable(const G4VIsotopeTable&); + G4VIsotopeTable(const G4VIsotopeTable&) = default; G4VIsotopeTable& operator=(const G4VIsotopeTable&); // Copy contructor and assignment operator - virtual ~G4VIsotopeTable(); + virtual ~G4VIsotopeTable() = default; // Destructor virtual G4IsotopeProperty* GetIsotope(G4int Z, G4int A, G4double E, diff --git a/source/particles/management/include/G4VUserPrimaryParticleInformation.hh b/source/particles/management/include/G4VUserPrimaryParticleInformation.hh index 38ea06c9f1e..859a6cbbee0 100644 --- a/source/particles/management/include/G4VUserPrimaryParticleInformation.hh +++ b/source/particles/management/include/G4VUserPrimaryParticleInformation.hh @@ -44,8 +44,8 @@ class G4VUserPrimaryParticleInformation { public: - G4VUserPrimaryParticleInformation(); - virtual ~G4VUserPrimaryParticleInformation(); + G4VUserPrimaryParticleInformation() = default; + virtual ~G4VUserPrimaryParticleInformation() = default; virtual void Print() const = 0; }; diff --git a/source/particles/management/include/G4VUserPrimaryVertexInformation.hh b/source/particles/management/include/G4VUserPrimaryVertexInformation.hh index 341651dee55..7db50a6fe88 100644 --- a/source/particles/management/include/G4VUserPrimaryVertexInformation.hh +++ b/source/particles/management/include/G4VUserPrimaryVertexInformation.hh @@ -44,8 +44,8 @@ class G4VUserPrimaryVertexInformation { public: - G4VUserPrimaryVertexInformation(); - virtual ~G4VUserPrimaryVertexInformation(); + G4VUserPrimaryVertexInformation() = default; + virtual ~G4VUserPrimaryVertexInformation() = default; virtual void Print() const = 0; }; diff --git a/source/particles/management/sources.cmake b/source/particles/management/sources.cmake index ea1265fef42..e292ef656be 100644 --- a/source/particles/management/sources.cmake +++ b/source/particles/management/sources.cmake @@ -90,8 +90,6 @@ geant4_add_module(G4partman G4PrimaryVertex.cc G4TauLeptonicDecayChannel.cc G4VDecayChannel.cc - G4VIsotopeTable.cc - G4VUserPrimaryParticleInformation.cc - G4VUserPrimaryVertexInformation.cc) + G4VIsotopeTable.cc) geant4_module_link_libraries(G4partman PUBLIC G4globman G4hepgeometry G4heprandom G4intercoms) diff --git a/source/particles/management/src/G4DalitzDecayChannel.cc b/source/particles/management/src/G4DalitzDecayChannel.cc index 8b9fce28bf3..ab0dfbf6992 100644 --- a/source/particles/management/src/G4DalitzDecayChannel.cc +++ b/source/particles/management/src/G4DalitzDecayChannel.cc @@ -39,11 +39,6 @@ #include "G4LorentzVector.hh" #include "G4LorentzRotation.hh" -G4DalitzDecayChannel::G4DalitzDecayChannel() - : G4VDecayChannel() -{ -} - G4DalitzDecayChannel:: G4DalitzDecayChannel(const G4String& theParentName, G4double theBR, @@ -61,15 +56,6 @@ G4DalitzDecayChannel(const G4String& theParentName, SetDaughter(idAntiLepton, theAntiLeptonName); } -G4DalitzDecayChannel::~G4DalitzDecayChannel() -{ -} - -G4DalitzDecayChannel::G4DalitzDecayChannel(const G4DalitzDecayChannel& right) - : G4VDecayChannel(right) -{ -} - G4DalitzDecayChannel& G4DalitzDecayChannel::operator=(const G4DalitzDecayChannel& right) { @@ -114,7 +100,7 @@ G4DecayProducts* G4DalitzDecayChannel::DecayIt(G4double) // create parent G4DynamicParticle at rest G4ThreeVector dummy; - G4DynamicParticle* parentparticle + auto parentparticle = new G4DynamicParticle( G4MT_parent, dummy, 0.0); //daughters' mass @@ -157,7 +143,7 @@ G4DecayProducts* G4DalitzDecayChannel::DecayIt(G4double) costheta); // create G4DynamicParticle for gamma - G4DynamicParticle* gammaparticle + auto gammaparticle = new G4DynamicParticle(G4MT_daughters[idGamma] , gdirection, Pgamma); // calculate beta of (l+ l-)system @@ -174,10 +160,10 @@ G4DecayProducts* G4DalitzDecayChannel::DecayIt(G4double) sintheta*std::sin(phi), costheta); // create G4DynamicParticle for leptons in the rest frame of (l+ l-)system - G4DynamicParticle* leptonparticle + auto leptonparticle = new G4DynamicParticle(G4MT_daughters[idLepton] , ldirection, Elepton-leptonmass ); - G4DynamicParticle* antileptonparticle + auto antileptonparticle = new G4DynamicParticle(G4MT_daughters[idAntiLepton] , -1.0*ldirection, Elepton-leptonmass ); //boost leptons in the rest frame of the parent @@ -193,7 +179,7 @@ G4DecayProducts* G4DalitzDecayChannel::DecayIt(G4double) antileptonparticle->Set4Momentum(p4); //create G4Decayproducts - G4DecayProducts* products = new G4DecayProducts(*parentparticle); + auto products = new G4DecayProducts(*parentparticle); delete parentparticle; products->PushProducts(gammaparticle); products->PushProducts(leptonparticle); diff --git a/source/particles/management/src/G4DecayProducts.cc b/source/particles/management/src/G4DecayProducts.cc index e13fe4bc276..b459b93d086 100644 --- a/source/particles/management/src/G4DecayProducts.cc +++ b/source/particles/management/src/G4DecayProducts.cc @@ -59,7 +59,7 @@ G4DecayProducts::G4DecayProducts(const G4DecayProducts& right) for (G4int index=0; indexat(index); - G4DynamicParticle* pDaughter = new G4DynamicParticle(*daughter); + auto pDaughter = new G4DynamicParticle(*daughter); G4double properTime = daughter->GetPreAssignedDecayProperTime(); if(properTime>0.0) pDaughter->SetPreAssignedDecayProperTime(properTime); @@ -68,7 +68,7 @@ G4DecayProducts::G4DecayProducts(const G4DecayProducts& right) = daughter->GetPreAssignedDecayProducts(); if (pPreAssigned != nullptr) { - G4DecayProducts* pPA = new G4DecayProducts(*pPreAssigned); + auto pPA = new G4DecayProducts(*pPreAssigned); pDaughter->SetPreAssignedDecayProducts(pPA); } theProductVector->push_back( pDaughter ); @@ -83,7 +83,7 @@ G4DecayProducts& G4DecayProducts::operator=(const G4DecayProducts& right) if (this != &right) { // recreate parent - if (theParentParticle != nullptr) delete theParentParticle; + delete theParentParticle; theParentParticle = new G4DynamicParticle(*right.theParentParticle); // delete G4DynamicParticle objects @@ -97,7 +97,7 @@ G4DecayProducts& G4DecayProducts::operator=(const G4DecayProducts& right) for (index=0; indexat(index); - G4DynamicParticle* pDaughter = new G4DynamicParticle(*daughter); + auto pDaughter = new G4DynamicParticle(*daughter); G4double properTime = daughter->GetPreAssignedDecayProperTime(); if(properTime>0.0) pDaughter->SetPreAssignedDecayProperTime(properTime); @@ -106,7 +106,7 @@ G4DecayProducts& G4DecayProducts::operator=(const G4DecayProducts& right) = daughter->GetPreAssignedDecayProducts(); if (pPreAssigned != nullptr) { - G4DecayProducts* pPA = new G4DecayProducts(*pPreAssigned); + auto pPA = new G4DecayProducts(*pPreAssigned); pDaughter->SetPreAssignedDecayProducts(pPA); } theProductVector->push_back( pDaughter ); @@ -119,7 +119,7 @@ G4DecayProducts& G4DecayProducts::operator=(const G4DecayProducts& right) G4DecayProducts::~G4DecayProducts() { //delete parent - if (theParentParticle != nullptr) delete theParentParticle; + delete theParentParticle; theParentParticle = nullptr; // delete G4DynamicParticle object @@ -142,10 +142,9 @@ G4DynamicParticle* G4DecayProducts::PopProducts() theProductVector->pop_back(); return part; } - else - { - return nullptr; - } + + return nullptr; + } G4int G4DecayProducts::PushProducts(G4DynamicParticle* aParticle) @@ -161,15 +160,14 @@ G4DynamicParticle* G4DecayProducts::operator[](G4int anIndex) const { return theProductVector->at(anIndex); } - else - { - return nullptr; - } + + return nullptr; + } void G4DecayProducts::SetParentParticle(const G4DynamicParticle& aParticle) { - if (theParentParticle != nullptr) delete theParentParticle; + delete theParentParticle; theParentParticle = new G4DynamicParticle(aParticle); } @@ -335,7 +333,7 @@ void G4DecayProducts::DumpInfo() const { G4cout << " ----- List of DecayProducts -----" << G4endl; G4cout << " ------ Parent Particle ----------" << G4endl; - if (theParentParticle != 0) theParentParticle->DumpInfo(); + if (theParentParticle != nullptr) theParentParticle->DumpInfo(); G4cout << " ------ Daughter Particles ------" << G4endl; for (G4int index=0; indexcbegin(); iCh!= channels->cend(); ++iCh) + for (const auto channel : *channels) { - delete (*iCh); + delete channel; } channels->clear(); delete channels; @@ -82,15 +82,15 @@ void G4DecayTable::Insert(G4VDecayChannel* aChannel) G4VDecayChannel* G4DecayTable::SelectADecayChannel(G4double parentMass) { // check if contents exist - if (channels->size()<1) return nullptr; + if (channels->empty()) return nullptr; if(parentMass < 0.) parentMass=parent->GetPDGMass(); G4double sumBR = 0.; - for (auto iCh = channels->cbegin(); iCh!= channels->cend(); ++iCh) + for (const auto channel : *channels) { - if ( !((*iCh)->IsOKWithParentMass(parentMass)) ) continue; - sumBR += (*iCh)->GetBR(); + if ( !(channel->IsOKWithParentMass(parentMass)) ) continue; + sumBR += channel->GetBR(); } if (sumBR <= 0.0) { @@ -107,11 +107,11 @@ G4VDecayChannel* G4DecayTable::SelectADecayChannel(G4double parentMass) G4double sum = 0.0; G4double br= sumBR*G4UniformRand(); // select decay channel - for (auto iCh = channels->cbegin(); iCh!= channels->cend(); ++iCh) + for (const auto channel : *channels) { - sum += (*iCh)->GetBR(); - if ( !((*iCh)->IsOKWithParentMass(parentMass)) ) continue; - if (br < sum) return (*iCh); + sum += channel->GetBR(); + if ( !(channel->IsOKWithParentMass(parentMass)) ) continue; + if (br < sum) return channel; } } return nullptr; @@ -121,10 +121,10 @@ void G4DecayTable::DumpInfo() const { G4cout << "G4DecayTable: " << parent->GetParticleName() << G4endl; G4int index =0; - for (auto iCh = channels->cbegin(); iCh!= channels->cend(); ++iCh) + for (const auto channel : *channels) { G4cout << index << ": "; - (*iCh)->DumpInfo(); + channel->DumpInfo(); index += 1; } G4cout << G4endl; diff --git a/source/particles/management/src/G4DecayTableMessenger.cc b/source/particles/management/src/G4DecayTableMessenger.cc index 4920499390e..eca6a0ee884 100644 --- a/source/particles/management/src/G4DecayTableMessenger.cc +++ b/source/particles/management/src/G4DecayTableMessenger.cc @@ -75,10 +75,10 @@ G4DecayTableMessenger::G4DecayTableMessenger(G4ParticleTable* pTable) G4DecayTableMessenger::~G4DecayTableMessenger() { - if (dumpCmd != nullptr) delete dumpCmd; - if (selectCmd != nullptr) delete selectCmd; - if (brCmd != nullptr) delete brCmd; - if (thisDirectory != nullptr) delete thisDirectory; + delete dumpCmd; + delete selectCmd; + delete brCmd; + delete thisDirectory; } void G4DecayTableMessenger::SetNewValue(G4UIcommand* command, G4String newValue) diff --git a/source/particles/management/src/G4DynamicParticle.cc b/source/particles/management/src/G4DynamicParticle.cc index 339dde4206c..06f1b5b5fb5 100644 --- a/source/particles/management/src/G4DynamicParticle.cc +++ b/source/particles/management/src/G4DynamicParticle.cc @@ -178,8 +178,7 @@ G4DynamicParticle::G4DynamicParticle(const G4DynamicParticle& right) : theMomentumDirection(right.theMomentumDirection), thePolarization(right.thePolarization), theParticleDefinition(right.theParticleDefinition), - theElectronOccupancy(nullptr), - thePreAssignedDecayProducts(nullptr), // Don't copy preassignedDecayProducts + // Don't copy preassignedDecayProducts primaryParticle(right.primaryParticle), theKineticEnergy(right.theKineticEnergy), theLogKineticEnergy(right.theLogKineticEnergy), @@ -189,7 +188,7 @@ G4DynamicParticle::G4DynamicParticle(const G4DynamicParticle& right) theDynamicalCharge(right.theDynamicalCharge), theDynamicalSpin(right.theDynamicalSpin), theDynamicalMagneticMoment(right.theDynamicalMagneticMoment), - thePreAssignedDecayTime(-1.0), + verboseLevel(right.verboseLevel), thePDGcode(right.thePDGcode) { @@ -205,7 +204,7 @@ G4DynamicParticle::G4DynamicParticle(G4DynamicParticle&& from) thePolarization(from.thePolarization), theParticleDefinition(from.theParticleDefinition), theElectronOccupancy(from.theElectronOccupancy), - thePreAssignedDecayProducts(nullptr), // Don't move preassignedDecayProducts + // Don't move preassignedDecayProducts primaryParticle(from.primaryParticle), theKineticEnergy(from.theKineticEnergy), theLogKineticEnergy(from.theLogKineticEnergy), @@ -215,7 +214,7 @@ G4DynamicParticle::G4DynamicParticle(G4DynamicParticle&& from) theDynamicalCharge(from.theDynamicalCharge), theDynamicalSpin(from.theDynamicalSpin), theDynamicalMagneticMoment(from.theDynamicalMagneticMoment), - thePreAssignedDecayTime(-1.0), + verboseLevel(from.verboseLevel), thePDGcode(from.thePDGcode) { @@ -231,11 +230,11 @@ G4DynamicParticle::G4DynamicParticle(G4DynamicParticle&& from) //////////////////// G4DynamicParticle::~G4DynamicParticle() { - if (thePreAssignedDecayProducts != nullptr) + delete thePreAssignedDecayProducts; thePreAssignedDecayProducts = nullptr; - if (theElectronOccupancy != nullptr) + delete theElectronOccupancy; theElectronOccupancy = nullptr; } @@ -258,7 +257,7 @@ G4DynamicParticle& G4DynamicParticle::operator=(const G4DynamicParticle& right) theDynamicalSpin = right.theDynamicalSpin; theDynamicalMagneticMoment = right.theDynamicalMagneticMoment; - if (theElectronOccupancy != nullptr) { delete theElectronOccupancy; } + delete theElectronOccupancy; if (right.theElectronOccupancy != nullptr) { theElectronOccupancy = @@ -298,7 +297,7 @@ G4DynamicParticle& G4DynamicParticle::operator=(G4DynamicParticle&& from) theDynamicalSpin = from.theDynamicalSpin; theDynamicalMagneticMoment = from.theDynamicalMagneticMoment; - if (theElectronOccupancy != nullptr) { delete theElectronOccupancy; } + delete theElectronOccupancy; theElectronOccupancy = from.theElectronOccupancy; from.theElectronOccupancy = nullptr; diff --git a/source/particles/management/src/G4ElectronOccupancy.cc b/source/particles/management/src/G4ElectronOccupancy.cc index cba79e1c7de..119267acb32 100644 --- a/source/particles/management/src/G4ElectronOccupancy.cc +++ b/source/particles/management/src/G4ElectronOccupancy.cc @@ -87,7 +87,7 @@ G4ElectronOccupancy::operator=(const G4ElectronOccupancy& right) theSizeOfOrbit = right.theSizeOfOrbit; // allocate and clear the array of theOccupancies - if ( theOccupancies != nullptr ) delete [] theOccupancies; + delete [] theOccupancies; theOccupancies = new G4int[theSizeOfOrbit]; for (G4int index = 0; index < theSizeOfOrbit; ++index) { @@ -111,11 +111,11 @@ G4bool G4ElectronOccupancy::operator==(const G4ElectronOccupancy& right) const } else if ((index < theSizeOfOrbit ) && ( index >= right.theSizeOfOrbit)) { - value = value && (theOccupancies[index] == false); + value = value && (!static_cast(theOccupancies[index])); } else if ((index >= theSizeOfOrbit ) && ( index (right.theOccupancies[index])); } } return value; diff --git a/source/particles/management/src/G4HyperNucleiProperties.cc b/source/particles/management/src/G4HyperNucleiProperties.cc index b82c0a87fa0..073c7c73c17 100644 --- a/source/particles/management/src/G4HyperNucleiProperties.cc +++ b/source/particles/management/src/G4HyperNucleiProperties.cc @@ -56,7 +56,7 @@ G4double G4HyperNucleiProperties::GetNuclearMass(G4int A, G4int Z, G4int LL) #endif return 0.0; } - else if ( A == 2 ) + if ( A == 2 ) { #ifdef G4VERBOSE if ( G4ParticleTable::GetParticleTable()->GetVerboseLevel() > 0 ) diff --git a/source/particles/management/src/G4IonTable.cc b/source/particles/management/src/G4IonTable.cc index 02ce7164a7a..84d1aad70ad 100644 --- a/source/particles/management/src/G4IonTable.cc +++ b/source/particles/management/src/G4IonTable.cc @@ -142,9 +142,8 @@ G4IonTable::~G4IonTable() // delete IsotopeTable if existing if (fIsotopeTableList != nullptr ) { - for (std::size_t i=0; isize(); ++i) + for (const auto fIsotopeTable : *fIsotopeTableList) { - G4VIsotopeTable* fIsotopeTable= (*fIsotopeTableList)[i]; if( fIsotopeTable != G4NuclideTable::GetNuclideTable() ) { delete fIsotopeTable; @@ -182,9 +181,9 @@ void G4IonTable::WorkerG4IonTable() if( fIonList == nullptr ) { fIonList = new G4IonList(); } else { fIonList->clear(); } - for (auto it = fIonListShadow->cbegin(); it != fIonListShadow->cend(); ++it ) + for (const auto& it : *fIonListShadow) { - fIonList->insert(*it); + fIonList->insert(it); } // Do not copy Isotope Table to Worker thread @@ -192,9 +191,9 @@ void G4IonTable::WorkerG4IonTable() if( fIsotopeTableList == nullptr ) { fIsotopeTableList = new std::vector; - for (std::size_t i = 0; i < fIsotopeTableListShadow->size(); ++i) + for (const auto i : *fIsotopeTableListShadow) { - fIsotopeTableList->push_back((*fIsotopeTableListShadow)[i]); + fIsotopeTableList->push_back(i); } } } @@ -216,9 +215,8 @@ void G4IonTable::DestroyWorkerG4IonTable() // delete IsotopeTable if existing if (fIsotopeTableList != nullptr ) { - for (std::size_t i=0; isize(); ++i) + for (auto fIsotopeTable : *fIsotopeTableList) { - G4VIsotopeTable* fIsotopeTable= (*fIsotopeTableList)[i]; if( fIsotopeTable != G4NuclideTable::GetNuclideTable() ) { delete fIsotopeTable; @@ -375,7 +373,7 @@ G4ParticleDefinition* G4IonTable::CreateIon(G4int Z, G4int A, G4double E, // Fill decay channels if this method is invoked from worker if(G4Threading::IsWorkerThread()) { - if(!stable && decayTable) + if(!stable && (decayTable != nullptr)) { G4int nCh = decayTable->entries(); for(G4int iCh=0; iCh0) - { - G4ExceptionDescription ed; - ed << "Isomer level " << lvl << " is unknown for the isotope (Z=" - << Z << ", A=" << A << ", L=" << LL << "). Null pointer is returned."; - G4Exception( "G4IonTable::GetIon()","PART106", JustWarning, ed); - return nullptr; - } - return nullptr; + return (LL == 0) ? CreateIon(Z, A, 0.0, G4Ions::G4FloatLevelBase(lvl)) + : CreateIon(Z, A, LL, 0.0, G4Ions::G4FloatLevelBase::no_Float); } // -------------------------------------------------------------------- @@ -521,102 +507,15 @@ G4IonTable::CreateIon(G4int Z, G4int A, G4int LL, G4int lvl) // G4ParticleDefinition* G4IonTable::GetIon(G4int Z, G4int A, G4int lvl) { - if ( (A<1) || (Z<=0) || (lvl<0) || (A>999) ) - { -#ifdef G4VERBOSE - if (GetVerboseLevel()>0) - { - G4cout << "G4IonTable::GetIon() : illegal atomic number/mass" - << " Z =" << Z << " A = " << A << " Lvl = " << lvl << G4endl; - } -#endif - return nullptr; - } - if ( lvl == 0 ) return GetIon(Z,A,0.0); - - // Search ions with A, Z, lvl - G4ParticleDefinition* ion = FindIon(Z,A,lvl); - - // create ion -#ifdef G4MULTITHREADED - if (ion == nullptr ) - { - if(G4Threading::IsWorkerThread()) - { - G4MUTEXLOCK(&G4IonTable::ionTableMutex); - ion = FindIonInMaster(Z,A,lvl); - if(ion != nullptr ) InsertWorker(ion); - G4MUTEXUNLOCK(&G4IonTable::ionTableMutex); - } - } -#endif - if (ion == nullptr ) - { - G4Exception( "G4IonTable::GetIon()","PART105", JustWarning, - "Ion cannot be created by an isomer level. Use excitation energy."); - } - return ion; + return GetIon(Z, A, 0.0, G4Ions::G4FloatLevelBase(lvl), 0); } // -------------------------------------------------------------------- // G4ParticleDefinition* G4IonTable::GetIon(G4int Z, G4int A, G4int LL, G4int lvl) { - if (LL==0) return GetIon(Z,A,lvl); - - if (A < 2 || Z < 0 || Z > A-LL || LL>A || A>999 ) - { -#ifdef G4VERBOSE - if (GetVerboseLevel()>0) - { - G4cout << "G4IonTable::GetIon() : illegal atomic number/mass" - << " Z =" << Z << " A = " << A << " L = " << LL - <<" IsomerLvl = " << lvl << G4endl; - } -#endif - return nullptr; - } - else if( A==2 ) - { -#ifdef G4VERBOSE - if (GetVerboseLevel()>0) - { - G4cout << "G4IonTable::GetIon() : No boud state for " - << " Z =" << Z << " A = " << A << " L = " << LL - <<" IsomerLvl = " << lvl << G4endl; - } -#endif - return nullptr; - } - - // Search ions with A, Z - G4ParticleDefinition* ion = FindIon(Z,A,LL,lvl); - - // create ion - if (ion == nullptr) - { - if (lvl==0) - { -#ifdef G4MULTITHREADED - if(G4Threading::IsWorkerThread()) - { - G4MUTEXLOCK(&G4IonTable::ionTableMutex); - ion = FindIonInMaster(Z,A,LL,lvl); - if(ion == nullptr) ion = CreateIon(Z, A, LL, lvl); - InsertWorker(ion); - G4MUTEXUNLOCK(&G4IonTable::ionTableMutex); - } - else - { - ion = CreateIon(Z, A, LL, lvl); - } -#else - ion = CreateIon(Z, A, LL, lvl); -#endif - } - } - - return ion; + return (LL == 0) ? GetIon(Z, A, 0.0, G4Ions::G4FloatLevelBase(lvl), 0) + : GetIon(Z, A, LL, 0.0, G4Ions::G4FloatLevelBase::no_Float, 0); } // -------------------------------------------------------------------- @@ -650,10 +549,25 @@ G4ParticleDefinition* G4IonTable::GetIon(G4int Z, G4int A, G4double E, #endif return nullptr; } + auto flb1 = flb; // Search ions with A, Z G4ParticleDefinition* ion = FindIon(Z,A,E,flb,J); + // find out ground state floating level + if(ion == nullptr && E == 0.0) + { + const G4IsotopeProperty* fProperty = FindIsotope(Z, A, E, flb); + if (nullptr != fProperty) + { + flb1 = fProperty->GetFloatLevelBase(); + if (flb != flb1) + { + ion = FindIon(Z,A,E,flb1,J); + } + } + } + // create ion #ifdef G4MULTITHREADED if(ion == nullptr ) @@ -661,18 +575,18 @@ G4ParticleDefinition* G4IonTable::GetIon(G4int Z, G4int A, G4double E, if(G4Threading::IsWorkerThread()) { G4MUTEXLOCK(&G4IonTable::ionTableMutex); - ion = FindIonInMaster(Z,A,E,flb,J); - if(ion == nullptr) ion = CreateIon(Z,A,E,flb); + ion = FindIonInMaster(Z,A,E,flb1,J); + if(ion == nullptr) ion = CreateIon(Z,A,E,flb1); InsertWorker(ion); G4MUTEXUNLOCK(&G4IonTable::ionTableMutex); } else { - ion = CreateIon(Z,A,E,flb); + ion = CreateIon(Z,A,E,flb1); } } #else - if (ion == nullptr) ion = CreateIon(Z,A,E,flb); + if (ion == nullptr) ion = CreateIon(Z,A,E,flb1); #endif return ion; @@ -715,7 +629,7 @@ G4IonTable::GetIon(G4int Z, G4int A, G4int LL, G4double E, #endif return nullptr; } - else if( A==2 ) + if( A==2 ) { #ifdef G4VERBOSE if (GetVerboseLevel()>0) @@ -829,14 +743,17 @@ G4IonTable::FindIon(G4int Z, G4int A, G4double E, { // -- loop over all particles in Ion table G4int encoding = GetNucleusEncoding(Z, A); + const G4ParticleDefinition* ion1 = nullptr; for(auto i = fIonList->find(encoding); i != fIonList->cend(); ++i) { ion = i->second; if ( (ion->GetAtomicNumber() != Z) || (ion->GetAtomicMass()!=A) ) break; // excitation level G4double anExcitaionEnergy= ((const G4Ions*)(ion))->GetExcitationEnergy(); + if (std::fabs(E - anExcitaionEnergy) < pNuclideTable->GetLevelTolerance()) { + if(nullptr == ion1) ion1 = ion; if(((const G4Ions*)(ion))->GetFloatLevelBase()==flb) { isFound = true; @@ -844,24 +761,30 @@ G4IonTable::FindIon(G4int Z, G4int A, G4double E, } } } + // rerun search on ground level without check on floating + if ( !isFound && E == 0.0 && nullptr != ion1) + { + isFound = true; + ion = ion1; + } } if ( isFound ) { return const_cast(ion); } - else - { - return nullptr; - } + + return nullptr; + } // -------------------------------------------------------------------- // G4ParticleDefinition* G4IonTable::FindIon(G4int Z, G4int A, G4int LL, G4double E, G4int J) -{ - return FindIon(Z,A,LL,E,G4Ions::G4FloatLevelBase::no_Float,J); +{ + return (LL == 0) ? FindIon(Z,A,E,G4Ions::G4FloatLevelBase::no_Float,J) + : FindIon(Z,A,LL,E,G4Ions::G4FloatLevelBase::no_Float,J); } // -------------------------------------------------------------------- @@ -924,72 +847,16 @@ G4IonTable::FindIon(G4int Z, G4int A, G4int LL, G4double E, { return const_cast(ion); } - else - { - return nullptr; - } + + return nullptr; + } // -------------------------------------------------------------------- // G4ParticleDefinition* G4IonTable::FindIon(G4int Z, G4int A, G4int lvl) { - if ( (A<1) || (Z<=0) || (lvl<0) || (A>999) ) - { -#ifdef G4VERBOSE - if (GetVerboseLevel()>0) - { - G4cout << "G4IonTable::FindIon(): illegal atomic number/mass" - << " or excitation level:" << G4endl - << " Z =" << Z << " A = " << A << " IsoLvl = " << lvl << G4endl; - } -#endif - G4Exception("G4IonTable::FindIon()", "PART107", - JustWarning, "illegal atomic number/mass"); - return nullptr; - } - // Search ions with A, Z ,E - // !! J is omitted now !! - const G4ParticleDefinition* ion = nullptr; - G4bool isFound = false; - - // check if light ion - ion = GetLightIon(Z,A); - if (ion != nullptr && lvl==0) - { - // light ion - isFound = true; - } - else - { - // -- loop over all particles in Ion table - G4int encoding=GetNucleusEncoding(Z, A); - for(auto i = fIonList->find(encoding); i != fIonList->cend(); ++i) - { - ion = i->second; - if ( (ion->GetAtomicNumber() != Z) || (ion->GetAtomicMass()!=A) ) break; - // excitation level - if ( ((const G4Ions*)(ion))->GetIsomerLevel() == lvl) - { - isFound = true; - break; - } - } - } - - if ( isFound ) - { - if(lvl==9) - { - G4Exception("G4IonTable::FindIon()","PART5107", JustWarning, - "Isomer level 9 may be ambiguous."); - } - return const_cast(ion); - } - else - { - return nullptr; - } + return FindIon(Z, A, 0.0, G4Ions::FloatLevelBase(lvl), 0); } // -------------------------------------------------------------------- @@ -997,56 +864,8 @@ G4ParticleDefinition* G4IonTable::FindIon(G4int Z, G4int A, G4int lvl) G4ParticleDefinition* G4IonTable::FindIon(G4int Z, G4int A, G4int LL, G4int lvl) { - if (LL==0) return FindIon(Z,A,lvl); - - if (A < 2 || Z < 0 || Z > A-LL || LL>A || A>999 ) - { -#ifdef G4VERBOSE - if (GetVerboseLevel()>0) - { - G4cout << "G4IonTable::FindIon(): illegal atomic number/mass" - << " or excitation level:" << G4endl - << " Z =" << Z << " A = " << A << " L = " << LL - <<" IsomerLvl = " << lvl << G4endl; - } -#endif - G4Exception( "G4IonTable::FindIon()", "PART107", - JustWarning, "illegal atomic number/mass"); - return nullptr; - } - - // Search ions with A, Z ,E, lvl - const G4ParticleDefinition* ion = nullptr; - G4bool isFound = false; - - // -- loop over all particles in Ion table - G4int encoding=GetNucleusEncoding(Z, A, LL); - for(auto i = fIonList->find(encoding); i != fIonList->cend() ; ++i) - { - ion = i->second; - if ( (ion->GetAtomicNumber() != Z) || (ion->GetAtomicMass()!=A) ) break; - if ( ion->GetQuarkContent(3) != LL) break; - // excitation level - if ( ((const G4Ions*)(ion))->GetIsomerLevel() == lvl) - { - isFound = true; - break; - } - } - - if ( isFound ) - { - if(lvl==9) - { - G4Exception("G4IonTable::FindIon()", "PART5107", JustWarning, - "Isomer level 9 may be ambiguous."); - } - return const_cast(ion); - } - else - { - return nullptr; - } + return (LL==0) ? FindIon(Z, A, 0.0, G4Ions::FloatLevelBase(lvl), 0) + : FindIon(Z, A, LL, 0.0, G4Ions::G4FloatLevelBase::no_Float, 0); } // -------------------------------------------------------------------- @@ -1309,8 +1128,7 @@ G4bool G4IonTable::IsIon(const G4ParticleDefinition* particle) if ( (particle->GetAtomicMass()>0) && (particle->GetAtomicNumber()>0) ) { - if (particle->GetBaryonNumber()>0) return true; - else return false; + return particle->GetBaryonNumber()>0; } // Particles derived from G4Ions @@ -1335,8 +1153,7 @@ G4bool G4IonTable::IsAntiIon(const G4ParticleDefinition* particle) if ( (particle->GetAtomicMass()>0) && (particle->GetAtomicNumber()>0) ) { - if (particle->GetBaryonNumber()<0) return true; - else return false; + return particle->GetBaryonNumber()<0; } // Particles derived from G4Ions @@ -1564,7 +1381,7 @@ void G4IonTable::Insert(const G4ParticleDefinition* particle) // void G4IonTable::InsertWorker(const G4ParticleDefinition* particle) { - if(!particle) return; + if(particle == nullptr) return; G4int Z = particle->GetAtomicNumber(); G4int A = particle->GetAtomicMass(); @@ -1617,16 +1434,15 @@ void G4IonTable::Remove(const G4ParticleDefinition* particle) "PART117", JustWarning, msg); return; } - else - { -#ifdef G4VERBOSE + + #ifdef G4VERBOSE if (GetVerboseLevel()>0) { G4cout << particle->GetParticleName() << " will be removed from the IonTable " << G4endl; } #endif - } + } if (IsIon(particle)) @@ -1666,9 +1482,9 @@ void G4IonTable::Remove(const G4ParticleDefinition* particle) void G4IonTable::DumpTable(const G4String& particle_name) const { const G4ParticleDefinition* ion; - for (auto idx = fIonList->cbegin(); idx!= fIonList->cend(); ++idx) + for (const auto& idx : *fIonList) { - ion = idx->second; + ion = idx.second; if (( particle_name == "ALL" ) || (particle_name == "all")) { ion->DumpTable(); @@ -1734,7 +1550,7 @@ void G4IonTable::AddProcessManager(G4ParticleDefinition* ion) else { // Is this a MuonicAtom ? - G4MuonicAtom* muatom = dynamic_cast (ion); + auto muatom = dynamic_cast (ion); if ( muatom != nullptr ) { @@ -1787,9 +1603,8 @@ void G4IonTable::RegisterIsotopeTable(G4VIsotopeTable* table) { //check duplication G4String name = table->GetName(); - for (std::size_t i=0; isize(); ++i) + for (const auto fIsotopeTable : *fIsotopeTableList) { - G4VIsotopeTable* fIsotopeTable= (*fIsotopeTableList)[i]; if (name == fIsotopeTable->GetName()) return; } // register @@ -1816,7 +1631,7 @@ G4IsotopeProperty* G4IonTable::FindIsotope(G4int Z, G4int A, G4double E, G4Ions::G4FloatLevelBase flb) const { if (fIsotopeTableList == nullptr) return nullptr; - if (fIsotopeTableList->size() == 0) return nullptr; + if (fIsotopeTableList->empty()) return nullptr; G4IsotopeProperty* property = nullptr; @@ -1825,7 +1640,7 @@ G4IsotopeProperty* G4IonTable::FindIsotope(G4int Z, G4int A, G4double E, G4VIsotopeTable* fIsotopeTable = (*fIsotopeTableList)[fIsotopeTableList->size()-i-1]; property = fIsotopeTable->GetIsotope(Z,A,E,flb); - if(property) break; + if(property != nullptr) break; } return property; @@ -1837,7 +1652,7 @@ G4IsotopeProperty* G4IonTable::FindIsotope(G4int Z, G4int A, G4double E, G4IsotopeProperty* G4IonTable::FindIsotope(G4int Z, G4int A, G4int lvl) const { if (fIsotopeTableList == nullptr) return nullptr; - if (fIsotopeTableList->size()==0) return nullptr; + if (fIsotopeTableList->empty()) return nullptr; G4IsotopeProperty* property = nullptr; @@ -1847,7 +1662,7 @@ G4IsotopeProperty* G4IonTable::FindIsotope(G4int Z, G4int A, G4int lvl) const G4VIsotopeTable* fIsotopeTable = (*fIsotopeTableList)[fIsotopeTableList->size()-i-1]; property = fIsotopeTable->GetIsotope(Z,A,lvl); - if(property) break; + if(property != nullptr) break; } return property; @@ -2006,10 +1821,9 @@ G4IonTable::FindIonInMaster(G4int Z, G4int A, G4double E, { return const_cast(ion); } - else - { - return nullptr; - } + + return nullptr; + } // -------------------------------------------------------------------- @@ -2049,10 +1863,9 @@ G4IonTable::FindIonInMaster(G4int Z, G4int A, G4int LL, G4double E, { return const_cast(ion); } - else - { - return nullptr; - } + + return nullptr; + } // -------------------------------------------------------------------- @@ -2083,10 +1896,9 @@ G4ParticleDefinition* G4IonTable::FindIonInMaster(G4int Z, G4int A, G4int lvl) { return const_cast(ion); } - else - { - return nullptr; - } + + return nullptr; + } // -------------------------------------------------------------------- @@ -2120,10 +1932,9 @@ G4IonTable::FindIonInMaster(G4int Z, G4int A, G4int LL, G4int lvl) { return const_cast(ion); } - else - { - return nullptr; - } + + return nullptr; + } // -------------------------------------------------------------------- diff --git a/source/particles/management/src/G4Ions.cc b/source/particles/management/src/G4Ions.cc index 5c96e17d22f..7ff4793019f 100644 --- a/source/particles/management/src/G4Ions.cc +++ b/source/particles/management/src/G4Ions.cc @@ -60,8 +60,7 @@ G4Ions::G4Ions( lepton,baryon,encoding,stable,lifetime,decaytable, shortlived, subType, anti_encoding), theExcitationEnergy(excitation), - theIsomerLevel(isomer), - floatLevelBase(G4FloatLevelBase::no_Float) + theIsomerLevel(isomer) { if ((aName == "proton") || (aName == "neutron")) { isGeneralIon = false ; @@ -99,14 +98,6 @@ G4Ions::G4Ions( } } -G4Ions::G4Ions() -{ -} - -G4Ions::~G4Ions() -{ -} - G4Ions::G4FloatLevelBase G4Ions::FloatLevelBase(char flbChar) { G4Ions::G4FloatLevelBase flb = noFloat; @@ -166,7 +157,7 @@ G4Ions::G4FloatLevelBase G4Ions::FloatLevelBase(G4int flbIdx) { noFloat, plusX, plusY, plusZ, plusU, plusV, plusW, plusR, plusS, plusT, plusA, plusB, plusC, plusD, plusE }; - return flb[flbIdx]; + return (flbIdx >=0 && flbIdx < 15) ? flb[flbIdx] : flb[0]; } char G4Ions::FloatLevelBaseChar(G4Ions::G4FloatLevelBase flb) diff --git a/source/particles/management/src/G4IsotopeProperty.cc b/source/particles/management/src/G4IsotopeProperty.cc index 5d181cee6bf..da42225690b 100644 --- a/source/particles/management/src/G4IsotopeProperty.cc +++ b/source/particles/management/src/G4IsotopeProperty.cc @@ -40,14 +40,9 @@ // ### IsotopeProperty ### // ###################################################################### -G4IsotopeProperty::G4IsotopeProperty() - : fFloatLevelBase(G4Ions::G4FloatLevelBase::no_Float) -{ -} - G4IsotopeProperty::~G4IsotopeProperty() { - if (fDecayTable != nullptr) delete fDecayTable; + delete fDecayTable; fDecayTable = nullptr; } @@ -57,7 +52,7 @@ G4IsotopeProperty::G4IsotopeProperty(const G4IsotopeProperty& right) fISpin(right.fISpin), fEnergy(right.fEnergy), fLifeTime(right.fLifeTime), - fDecayTable(nullptr), + fMagneticMoment(right.fMagneticMoment), fIsomerLevel(right.fIsomerLevel), fFloatLevelBase(right.fFloatLevelBase) @@ -107,7 +102,7 @@ void G4IsotopeProperty::DumpInfo() const #ifdef G4VERBOSE G4cout << "AtomicNumber: " << fAtomicNumber << ", " << "AtomicMass: " << fAtomicMass << G4endl; - if (fISpin %2) + if ((fISpin %2) != 0) { G4cout << "Spin: " << fISpin << "/2"; } diff --git a/source/particles/management/src/G4KL3DecayChannel.cc b/source/particles/management/src/G4KL3DecayChannel.cc index e8af7586a9d..1e8f87a3ef5 100644 --- a/source/particles/management/src/G4KL3DecayChannel.cc +++ b/source/particles/management/src/G4KL3DecayChannel.cc @@ -38,12 +38,6 @@ #include "G4LorentzVector.hh" #include "G4LorentzRotation.hh" -G4KL3DecayChannel::G4KL3DecayChannel() - : G4VDecayChannel() -{ -} - - G4KL3DecayChannel:: G4KL3DecayChannel(const G4String& theParentName, G4double theBR, @@ -106,17 +100,6 @@ G4KL3DecayChannel(const G4String& theParentName, } } -G4KL3DecayChannel::~G4KL3DecayChannel() -{ -} - -G4KL3DecayChannel::G4KL3DecayChannel(const G4KL3DecayChannel& right) - : G4VDecayChannel(right), - pLambda(right.pLambda), - pXi0(right.pXi0) -{ -} - G4KL3DecayChannel& G4KL3DecayChannel::operator=(const G4KL3DecayChannel& right) { if (this != &right) @@ -135,7 +118,7 @@ G4KL3DecayChannel& G4KL3DecayChannel::operator=(const G4KL3DecayChannel& right) numberOfDaughters = right.numberOfDaughters; if ( numberOfDaughters >0 ) { - if (daughters_name !=0) ClearDaughtersName(); + if (daughters_name !=nullptr) ClearDaughtersName(); daughters_name = new G4String*[numberOfDaughters]; //copy daughters name for (G4int index=0; indexPushProducts(daughterparticle); diff --git a/source/particles/management/src/G4MuonDecayChannel.cc b/source/particles/management/src/G4MuonDecayChannel.cc index a4f318316dc..09421142aa2 100644 --- a/source/particles/management/src/G4MuonDecayChannel.cc +++ b/source/particles/management/src/G4MuonDecayChannel.cc @@ -42,11 +42,6 @@ #include "G4LorentzRotation.hh" #include "G4RotationMatrix.hh" -G4MuonDecayChannel::G4MuonDecayChannel() - : G4VDecayChannel() -{ -} - G4MuonDecayChannel::G4MuonDecayChannel(const G4String& theParentName, G4double theBR) : G4VDecayChannel("Muon Decay", 1) @@ -83,15 +78,6 @@ G4MuonDecayChannel::G4MuonDecayChannel(const G4String& theParentName, } } -G4MuonDecayChannel::G4MuonDecayChannel(const G4MuonDecayChannel& right) - : G4VDecayChannel(right) -{ -} - -G4MuonDecayChannel::~G4MuonDecayChannel() -{ -} - G4MuonDecayChannel& G4MuonDecayChannel::operator=(const G4MuonDecayChannel& right) { @@ -111,7 +97,7 @@ G4MuonDecayChannel::operator=(const G4MuonDecayChannel& right) numberOfDaughters = right.numberOfDaughters; if ( numberOfDaughters >0 ) { - if (daughters_name !=0) ClearDaughtersName(); + if (daughters_name !=nullptr) ClearDaughtersName(); daughters_name = new G4String*[numberOfDaughters]; // copy daughters name for (G4int index=0; index < numberOfDaughters; ++index) @@ -151,10 +137,10 @@ G4DecayProducts* G4MuonDecayChannel::DecayIt(G4double) // create parent G4DynamicParticle at rest G4ThreeVector dummy; - G4DynamicParticle* parentparticle + auto parentparticle = new G4DynamicParticle( G4MT_parent, dummy, 0.0); // create G4Decayproducts - G4DecayProducts *products = new G4DecayProducts(*parentparticle); + auto products = new G4DecayProducts(*parentparticle); delete parentparticle; // calculate daughter momentum @@ -206,7 +192,7 @@ G4DecayProducts* G4MuonDecayChannel::DecayIt(G4double) direction0 *= rot; - G4DynamicParticle* daughterparticle + auto daughterparticle = new G4DynamicParticle (G4MT_daughters[0], direction0*daughtermomentum[0]); products->PushProducts(daughterparticle); @@ -219,7 +205,7 @@ G4DecayProducts* G4MuonDecayChannel::DecayIt(G4double) direction1 *= rot; - G4DynamicParticle* daughterparticle1 + auto daughterparticle1 = new G4DynamicParticle (G4MT_daughters[1], direction1*daughtermomentum[1]); products->PushProducts(daughterparticle1); @@ -231,7 +217,7 @@ G4DecayProducts* G4MuonDecayChannel::DecayIt(G4double) direction2 *= rot; - G4DynamicParticle* daughterparticle2 + auto daughterparticle2 = new G4DynamicParticle (G4MT_daughters[2], direction2*daughtermomentum[2]); products->PushProducts(daughterparticle2); diff --git a/source/particles/management/src/G4MuonDecayChannelWithSpin.cc b/source/particles/management/src/G4MuonDecayChannelWithSpin.cc index 505e5cddafb..aa551469172 100644 --- a/source/particles/management/src/G4MuonDecayChannelWithSpin.cc +++ b/source/particles/management/src/G4MuonDecayChannelWithSpin.cc @@ -43,11 +43,6 @@ #include "G4DecayProducts.hh" #include "G4LorentzVector.hh" -G4MuonDecayChannelWithSpin::G4MuonDecayChannelWithSpin() - : G4MuonDecayChannel() -{ -} - G4MuonDecayChannelWithSpin:: G4MuonDecayChannelWithSpin(const G4String& theParentName, G4double theBR) @@ -55,16 +50,6 @@ G4MuonDecayChannelWithSpin(const G4String& theParentName, { } -G4MuonDecayChannelWithSpin::~G4MuonDecayChannelWithSpin() -{ -} - -G4MuonDecayChannelWithSpin:: -G4MuonDecayChannelWithSpin(const G4MuonDecayChannelWithSpin& right) - : G4MuonDecayChannel(right) -{ -} - G4MuonDecayChannelWithSpin& G4MuonDecayChannelWithSpin:: operator=(const G4MuonDecayChannelWithSpin& right) { @@ -127,10 +112,10 @@ G4DecayProducts* G4MuonDecayChannelWithSpin::DecayIt(G4double) // create parent G4DynamicParticle at rest G4ThreeVector dummy; - G4DynamicParticle* parentparticle + auto parentparticle = new G4DynamicParticle( G4MT_parent, dummy, 0.0); // create G4Decayproducts - G4DecayProducts *products = new G4DecayProducts(*parentparticle); + auto products = new G4DecayProducts(*parentparticle); delete parentparticle; // calculate electron energy @@ -244,7 +229,7 @@ G4DecayProducts* G4MuonDecayChannelWithSpin::DecayIt(G4double) direction0.rotateUz(parent_polarization); - G4DynamicParticle * daughterparticle0 + auto daughterparticle0 = new G4DynamicParticle( G4MT_daughters[0], daughtermomentum[0]*direction0); products->PushProducts(daughterparticle0); @@ -263,9 +248,9 @@ G4DecayProducts* G4MuonDecayChannelWithSpin::DecayIt(G4double) G4double cosphin = std::cos(phin); G4ThreeVector direction1(sinthetan*cosphin,sinthetan*sinphin,costhetan); - G4DynamicParticle * daughterparticle1 + auto daughterparticle1 = new G4DynamicParticle( G4MT_daughters[1], direction1*(vmass/2.)); - G4DynamicParticle * daughterparticle2 + auto daughterparticle2 = new G4DynamicParticle( G4MT_daughters[2], direction1*(-1.0*vmass/2.)); // boost to the muon rest frame @@ -303,7 +288,7 @@ G4DecayProducts* G4MuonDecayChannelWithSpin::DecayIt(G4double) G4double G4MuonDecayChannelWithSpin::R_c(G4double x,G4double omega) { - G4int n_max = (G4int)(100.*x); + auto n_max = (G4int)(100.*x); if(n_max<10)n_max=10; diff --git a/source/particles/management/src/G4MuonRadiativeDecayChannelWithSpin.cc b/source/particles/management/src/G4MuonRadiativeDecayChannelWithSpin.cc index 53b3dfa7e11..3f7a302dbdd 100644 --- a/source/particles/management/src/G4MuonRadiativeDecayChannelWithSpin.cc +++ b/source/particles/management/src/G4MuonRadiativeDecayChannelWithSpin.cc @@ -44,11 +44,6 @@ #include "G4DecayProducts.hh" #include "G4LorentzVector.hh" -G4MuonRadiativeDecayChannelWithSpin::G4MuonRadiativeDecayChannelWithSpin() - : G4VDecayChannel() -{ -} - G4MuonRadiativeDecayChannelWithSpin:: G4MuonRadiativeDecayChannelWithSpin(const G4String& theParentName, G4double theBR) @@ -88,16 +83,6 @@ G4MuonRadiativeDecayChannelWithSpin(const G4String& theParentName, } } -G4MuonRadiativeDecayChannelWithSpin::~G4MuonRadiativeDecayChannelWithSpin() -{ -} - -G4MuonRadiativeDecayChannelWithSpin:: -G4MuonRadiativeDecayChannelWithSpin(const G4MuonRadiativeDecayChannelWithSpin& r) - : G4VDecayChannel(r) -{ -} - G4MuonRadiativeDecayChannelWithSpin& G4MuonRadiativeDecayChannelWithSpin:: operator=(const G4MuonRadiativeDecayChannelWithSpin& right) { @@ -159,11 +144,11 @@ G4DecayProducts* G4MuonRadiativeDecayChannelWithSpin::DecayIt(G4double) //create parent G4DynamicParticle at rest G4ThreeVector dummy; - G4DynamicParticle* parentparticle + auto parentparticle = new G4DynamicParticle( G4MT_parent, dummy, 0.0 ); // create G4Decayproducts - G4DecayProducts *products = new G4DecayProducts(*parentparticle); + auto products = new G4DecayProducts(*parentparticle); delete parentparticle; G4double eps = EMASS/EMMU; @@ -300,7 +285,7 @@ G4DecayProducts* G4MuonRadiativeDecayChannelWithSpin::DecayIt(G4double) direction0.rotateUz(parent_polarization); - G4DynamicParticle * daughterparticle0 + auto daughterparticle0 = new G4DynamicParticle( G4MT_daughters[0], daughtermomentum[0]*direction0); products->PushProducts(daughterparticle0); @@ -321,7 +306,7 @@ G4DecayProducts* G4MuonRadiativeDecayChannelWithSpin::DecayIt(G4double) direction1.rotateUz(parent_polarization); - G4DynamicParticle * daughterparticle1 + auto daughterparticle1 = new G4DynamicParticle( G4MT_daughters[1], daughtermomentum[1]*direction1); products->PushProducts(daughterparticle1); @@ -344,9 +329,9 @@ G4DecayProducts* G4MuonRadiativeDecayChannelWithSpin::DecayIt(G4double) G4ThreeVector direction2(sinthetan*cosphin,sinthetan*sinphin,costhetan); - G4DynamicParticle * daughterparticle2 + auto daughterparticle2 = new G4DynamicParticle( G4MT_daughters[2], direction2*(vmass/2.)); - G4DynamicParticle * daughterparticle3 + auto daughterparticle3 = new G4DynamicParticle( G4MT_daughters[3], direction2*(-1.0*vmass/2.)); // boost to the muon rest frame diff --git a/source/particles/management/src/G4MuonicAtom.cc b/source/particles/management/src/G4MuonicAtom.cc index f82163b99e8..4f83491c7be 100644 --- a/source/particles/management/src/G4MuonicAtom.cc +++ b/source/particles/management/src/G4MuonicAtom.cc @@ -63,7 +63,3 @@ G4MuonicAtom::G4MuonicAtom( isGeneralIon = false; isMuonicAtom = true; } - -G4MuonicAtom::~G4MuonicAtom() -{ -} diff --git a/source/particles/management/src/G4MuonicAtomHelper.cc b/source/particles/management/src/G4MuonicAtomHelper.cc index 6031fbcd8a0..9a9681e6d84 100644 --- a/source/particles/management/src/G4MuonicAtomHelper.cc +++ b/source/particles/management/src/G4MuonicAtomHelper.cc @@ -60,7 +60,7 @@ ConstructMuonicAtom(const G4String& name, G4int encoding, G4Ions const* baseion) (G4ParticleTable::GetParticleTable()->FindParticle("mu-"))->GetPDGMass() + baseion->GetPDGMass() - GetKShellEnergy(G4double(Z)); //fixme check - G4DecayTable* decayTable = new G4DecayTable(); + auto decayTable = new G4DecayTable(); auto muatom = new G4MuonicAtom(name, mass, 0.0, charge, baseion->GetPDGiSpin(), baseion->GetPDGiParity(), diff --git a/source/particles/management/src/G4NeutronBetaDecayChannel.cc b/source/particles/management/src/G4NeutronBetaDecayChannel.cc index e95b4c97049..6702863f461 100644 --- a/source/particles/management/src/G4NeutronBetaDecayChannel.cc +++ b/source/particles/management/src/G4NeutronBetaDecayChannel.cc @@ -39,11 +39,6 @@ #include "G4LorentzVector.hh" #include "G4LorentzRotation.hh" -G4NeutronBetaDecayChannel::G4NeutronBetaDecayChannel() - : G4VDecayChannel() -{ -} - G4NeutronBetaDecayChannel:: G4NeutronBetaDecayChannel(const G4String& theParentName, G4double theBR) @@ -81,10 +76,6 @@ G4NeutronBetaDecayChannel(const G4String& theParentName, } } -G4NeutronBetaDecayChannel::~G4NeutronBetaDecayChannel() -{ -} - G4NeutronBetaDecayChannel:: G4NeutronBetaDecayChannel(const G4NeutronBetaDecayChannel& right) : G4VDecayChannel(right) @@ -150,11 +141,11 @@ G4DecayProducts* G4NeutronBetaDecayChannel::DecayIt(G4double) // create parent G4DynamicParticle at rest G4ThreeVector dummy; - G4DynamicParticle* parentparticle + auto parentparticle = new G4DynamicParticle( G4MT_parent, dummy, 0.0); // create G4Decayproducts - G4DecayProducts *products = new G4DecayProducts(*parentparticle); + auto products = new G4DecayProducts(*parentparticle); delete parentparticle; // calculate daughter momentum @@ -192,7 +183,7 @@ G4DecayProducts* G4NeutronBetaDecayChannel::DecayIt(G4double) daughtermomentum[0] = p; G4ThreeVector direction0(0.0, 0.0, 1.0); direction0 = rm * direction0; - G4DynamicParticle* daughterparticle0 + auto daughterparticle0 = new G4DynamicParticle(G4MT_daughters[0], direction0*daughtermomentum[0]); products->PushProducts(daughterparticle0); @@ -207,7 +198,7 @@ G4DecayProducts* G4NeutronBetaDecayChannel::DecayIt(G4double) G4ThreeVector direction1(sinn*std::cos(phin), sinn*std::sin(phin), cosn); direction1 = rm * direction1; - G4DynamicParticle* daughterparticle1 + auto daughterparticle1 = new G4DynamicParticle( G4MT_daughters[1], direction1*eNu); products->PushProducts(daughterparticle1); @@ -220,7 +211,7 @@ G4DecayProducts* G4NeutronBetaDecayChannel::DecayIt(G4double) G4ThreeVector direction2(pPx/pP*std::cos(phin), pPx/pP*std::sin(phin), pPz/pP); direction2 = rm * direction2; - G4DynamicParticle* daughterparticle2 + auto daughterparticle2 = new G4DynamicParticle( G4MT_daughters[2], direction2*pP); products->PushProducts(daughterparticle2); diff --git a/source/particles/management/src/G4NucleiProperties.cc b/source/particles/management/src/G4NucleiProperties.cc index 020cfa1b95c..8aa06876504 100644 --- a/source/particles/management/src/G4NucleiProperties.cc +++ b/source/particles/management/src/G4NucleiProperties.cc @@ -59,8 +59,8 @@ G4double G4NucleiProperties::GetNuclearMass(const G4double A, const G4double Z) else { // use mass table - G4int iZ = G4int(Z); - G4int iA = G4int(A); + auto iZ = G4int(Z); + auto iA = G4int(A); mass =GetNuclearMass(iA,iZ); } return mass; @@ -145,8 +145,8 @@ G4double G4NucleiProperties::GetNuclearMass(const G4int A, const G4int Z) G4bool G4NucleiProperties::IsInStableTable(const G4double A, const G4double Z) { - G4int iA = G4int(A); - G4int iZ = G4int(Z); + auto iA = G4int(A); + auto iZ = G4int(Z); return IsInStableTable(iA, iZ); } @@ -169,8 +169,8 @@ G4bool G4NucleiProperties::IsInStableTable(const G4int A, const G4int Z) G4double G4NucleiProperties::GetMassExcess(const G4double A, const G4double Z) { - G4int iA = G4int(A); - G4int iZ = G4int(Z); + auto iA = G4int(A); + auto iZ = G4int(Z); return GetMassExcess(iA,iZ); } @@ -188,18 +188,16 @@ G4double G4NucleiProperties::GetMassExcess(const G4int A, const G4int Z) return 0.0; } - else - { - + + if ( G4NucleiPropertiesTableAME12::IsInTable(Z,A) ){ // AME table return G4NucleiPropertiesTableAME12::GetMassExcess(Z,A); - } else if (G4NucleiPropertiesTheoreticalTable::IsInTable(Z,A)){ + } if (G4NucleiPropertiesTheoreticalTable::IsInTable(Z,A)){ return G4NucleiPropertiesTheoreticalTable::GetMassExcess(Z,A); - } else { - return MassExcess(A,Z); - } - } + } return MassExcess(A,Z); + + } @@ -217,29 +215,27 @@ G4double G4NucleiProperties::GetAtomicMass(const G4double A, const G4double Z) return 0.0; } - else if (std::fabs(A - G4int(A)) > 1.e-10) + if (std::fabs(A - G4int(A)) > 1.e-10) { return AtomicMass(A,Z); } - else - { - G4int iA = G4int(A); - G4int iZ = G4int(Z); + + auto iA = G4int(A); + auto iZ = G4int(Z); if ( G4NucleiPropertiesTableAME12::IsInTable(Z,A) ) { return G4NucleiPropertiesTableAME12::GetAtomicMass(Z,A); - } else if (G4NucleiPropertiesTheoreticalTable::IsInTable(iZ,iA)){ + } if (G4NucleiPropertiesTheoreticalTable::IsInTable(iZ,iA)){ return G4NucleiPropertiesTheoreticalTable::GetAtomicMass(iZ,iA); - } else { - return AtomicMass(A,Z); - } - } + } return AtomicMass(A,Z); + + } G4double G4NucleiProperties::GetBindingEnergy(const G4double A, const G4double Z) { - G4int iA = G4int(A); - G4int iZ = G4int(Z); + auto iA = G4int(A); + auto iZ = G4int(Z); return GetBindingEnergy(iA,iZ); } @@ -257,16 +253,14 @@ G4double G4NucleiProperties::GetBindingEnergy(const G4int A, const G4int Z) return 0.0; } - else - { - if ( G4NucleiPropertiesTableAME12::IsInTable(Z,A) ) { + + if ( G4NucleiPropertiesTableAME12::IsInTable(Z,A) ) { return G4NucleiPropertiesTableAME12::GetBindingEnergy(Z,A); - } else if (G4NucleiPropertiesTheoreticalTable::IsInTable(Z,A)) { + } if (G4NucleiPropertiesTheoreticalTable::IsInTable(Z,A)) { return G4NucleiPropertiesTheoreticalTable::GetBindingEnergy(Z,A); - }else { - return BindingEnergy(A,Z); - } - } + } return BindingEnergy(A,Z); + + } G4double G4NucleiProperties::MassExcess(G4double A, G4double Z) diff --git a/source/particles/management/src/G4NucleiPropertiesTableAME12.cc b/source/particles/management/src/G4NucleiPropertiesTableAME12.cc index b7b18d093f7..744d721368c 100644 --- a/source/particles/management/src/G4NucleiPropertiesTableAME12.cc +++ b/source/particles/management/src/G4NucleiPropertiesTableAME12.cc @@ -46,10 +46,6 @@ G4ThreadLocal G4bool G4NucleiPropertiesTableAME12::isIntialized = false; G4ThreadLocal G4double G4NucleiPropertiesTableAME12::electronMass[ZMax]; -G4NucleiPropertiesTableAME12::G4NucleiPropertiesTableAME12() -{ -} - // Determine the table index for a Nuclide with Z protons and A nucleons. // G4int G4NucleiPropertiesTableAME12::GetIndex(G4int Z, G4int A) @@ -61,14 +57,14 @@ G4int G4NucleiPropertiesTableAME12::GetIndex(G4int Z, G4int A) EventMustBeAborted,"Nucleon number larger than 293"); return -1; } - else if(A<1) + if(A<1) { G4Exception("G4NucleiPropertiesTableAME12::GetIndex", "Illegal arguemntPART201", EventMustBeAborted," Nucleon number is negative"); return -1; } - else if(Z>A) + if(Z>A) { G4Exception("G4NucleiPropertiesTableAME12::GetIndex", "PART201", @@ -126,10 +122,9 @@ G4double G4NucleiPropertiesTableAME12::GetMassExcess(G4int Z, G4int A) { return MassExcess[i]*keV; } - else - { - return 0.0; - } + + return 0.0; + } G4double G4NucleiPropertiesTableAME12::GetBindingEnergy(G4int Z, G4int A) @@ -140,10 +135,10 @@ G4double G4NucleiPropertiesTableAME12::GetBindingEnergy(G4int Z, G4int A) return (G4double(A-Z)*MassExcess[0] + G4double(Z)*MassExcess[1] - MassExcess[i])*keV; } - else - { + + return 0.0; - } + } G4double G4NucleiPropertiesTableAME12::GetBetaDecayEnergy(G4int Z, G4int A) @@ -153,10 +148,10 @@ G4double G4NucleiPropertiesTableAME12::GetBetaDecayEnergy(G4int Z, G4int A) { return BetaEnergy[i]*keV; } - else - { + + return 0.0; - } + } G4double G4NucleiPropertiesTableAME12::GetAtomicMass(G4int Z, G4int A) @@ -166,10 +161,10 @@ G4double G4NucleiPropertiesTableAME12::GetAtomicMass(G4int Z, G4int A) { return MassExcess[i]*keV + G4double(A)*amu_c2; } - else - { + + return 0.0; - } + } G4bool G4NucleiPropertiesTableAME12::IsInTable(G4int Z, G4int A) diff --git a/source/particles/management/src/G4NucleiPropertiesTheoreticalTableA.cc b/source/particles/management/src/G4NucleiPropertiesTheoreticalTableA.cc index b3664f5daa1..5e85cd2297d 100644 --- a/source/particles/management/src/G4NucleiPropertiesTheoreticalTableA.cc +++ b/source/particles/management/src/G4NucleiPropertiesTheoreticalTableA.cc @@ -74,10 +74,9 @@ G4double G4NucleiPropertiesTheoreticalTable::GetMassExcess(G4int Z, G4int A) { return AtomicMassExcess[i]*MeV; } - else - { - return 0.0; - } + + return 0.0; + } G4double G4NucleiPropertiesTheoreticalTable::GetBindingEnergy(G4int Z, G4int A) @@ -89,10 +88,10 @@ G4double G4NucleiPropertiesTheoreticalTable::GetBindingEnergy(G4int Z, G4int A) const G4double Mn = 8.071431*MeV; // neutron mass excess return G4double(Z)*Mh + G4double(A-Z)*Mn - AtomicMassExcess[i]*MeV; } - else - { + + return 0.0; - } + } G4double G4NucleiPropertiesTheoreticalTable::GetAtomicMass(G4int Z, G4int A) @@ -102,10 +101,9 @@ G4double G4NucleiPropertiesTheoreticalTable::GetAtomicMass(G4int Z, G4int A) { return AtomicMassExcess[i]*MeV + A*amu_c2; } - else - { - return 0.0; - } + + return 0.0; + } G4double G4NucleiPropertiesTheoreticalTable::GetNuclearMass(G4int Z, G4int A) @@ -116,10 +114,9 @@ G4double G4NucleiPropertiesTheoreticalTable::GetNuclearMass(G4int Z, G4int A) return GetAtomicMass(Z,A) - G4double(Z)*electron_mass_c2 + ElectronicBindingEnergy(Z); } - else - { - return 0.0; - } + + return 0.0; + } G4double G4NucleiPropertiesTheoreticalTable::ElectronicBindingEnergy(G4int Z) diff --git a/source/particles/management/src/G4NuclideTable.cc b/source/particles/management/src/G4NuclideTable.cc index ab5052b157f..fdca980acf6 100644 --- a/source/particles/management/src/G4NuclideTable.cc +++ b/source/particles/management/src/G4NuclideTable.cc @@ -68,23 +68,23 @@ G4NuclideTable::G4NuclideTable() // -------------------------------------------------------------------- G4NuclideTable::~G4NuclideTable() { - for (auto it=map_pre_load_list.begin(); it!=map_pre_load_list.end(); ++it) + for (auto & it : map_pre_load_list) { - it->second.clear(); + it.second.clear(); } map_pre_load_list.clear(); - for (auto it=map_full_list.begin(); it!=map_full_list.end(); ++it) + for (auto & it : map_full_list) { - it->second.clear(); + it.second.clear(); } map_full_list.clear(); if (fIsotopeList != nullptr) { - for (std::size_t i = 0 ; isize(); ++i) + for (const auto & i : *fIsotopeList) { - delete (*fIsotopeList)[i]; + delete i; } fIsotopeList->clear(); delete fIsotopeList; @@ -100,20 +100,20 @@ G4IsotopeProperty* G4NuclideTable::GetIsotope(G4int Z, G4int A, G4double E, G4IsotopeProperty* fProperty = nullptr; // At first searching UserDefined - if ( fUserDefinedList ) + if ( fUserDefinedList != nullptr ) { - for (auto it=fUserDefinedList->cbegin(); it!=fUserDefinedList->cend(); ++it) + for (const auto it : *fUserDefinedList) { - if ( Z == (*it)->GetAtomicNumber() && A == (*it)->GetAtomicMass() ) + if ( Z == it->GetAtomicNumber() && A == it->GetAtomicMass() ) { - G4double levelE = (*it)->GetEnergy(); + G4double levelE = it->GetEnergy(); if ( levelE - flevelTolerance/2 <= E && E < levelE + flevelTolerance/2 ) { - if( flb == (*it)->GetFloatLevelBase() ) { return *it; } //found + if( flb == it->GetFloatLevelBase() ) { return it; } //found } } } - } + } // Searching pre-load // Note: isomer level is properly set only for pre_load_list @@ -131,7 +131,7 @@ G4IsotopeProperty* G4NuclideTable::GetIsotope(G4int Z, G4int A, G4double E, levelE = lower_bound_itr->first; if ( levelE - flevelTolerance/2 <= E && E < levelE + flevelTolerance/2 ) { - if ( flb == (lower_bound_itr->second)->GetFloatLevelBase() ) + if ( flb == (lower_bound_itr->second)->GetFloatLevelBase() || E == 0.0) { return lower_bound_itr->second; // found } @@ -237,7 +237,7 @@ void G4NuclideTable::GenerateNuclide() if (ionE > 0) ++iLevel; if (iLevel > 9) iLevel = 9; - G4IsotopeProperty* fProperty = new G4IsotopeProperty(); + auto fProperty = new G4IsotopeProperty(); // Set Isotope Property fProperty->SetAtomicNumber(ionZ); @@ -270,14 +270,14 @@ void G4NuclideTable::GenerateNuclide() } // Clear current map - for (auto it = map_pre_load_list.begin(); it != map_pre_load_list.end(); ++it) { - it->second.clear(); + for (auto & it : map_pre_load_list) { + it.second.clear(); } map_pre_load_list.clear(); // Build map based on current threshold value - for (auto it = map_full_list.cbegin(); it != map_full_list.cend(); ++it) { - G4int ionCode = it->first; + for (const auto & it : map_full_list) { + G4int ionCode = it.first; auto itf = map_pre_load_list.find(ionCode); if (itf == map_pre_load_list.cend() ) { std::multimap aMultiMap; @@ -287,15 +287,15 @@ void G4NuclideTable::GenerateNuclide() } G4int iLevel = 0; - for (auto itt = it->second.cbegin(); itt != it->second.cend(); ++itt) { - G4double exEnergy = itt->first; - G4double meanLife = itt->second->GetLifeTime(); + for (const auto& itt : it.second) { + G4double exEnergy = itt.first; + G4double meanLife = itt.second->GetLifeTime(); if (exEnergy == 0.0 || meanLife > mean_life_threshold) { - if (itt->first != 0.0) ++iLevel; + if (itt.first != 0.0) ++iLevel; if (iLevel > 9) iLevel = 9; - itt->second->SetIsomerLevel(iLevel); + itt.second->SetIsomerLevel(iLevel); itf->second.insert( - std::pair(exEnergy, itt->second) ); + std::pair(exEnergy, itt.second) ); } } } @@ -322,7 +322,7 @@ void G4NuclideTable::AddState( G4int ionZ, G4int ionA, G4double ionE, { if ( fUserDefinedList == nullptr ) fUserDefinedList = new G4IsotopeList(); - G4IsotopeProperty* fProperty = new G4IsotopeProperty(); + auto fProperty = new G4IsotopeProperty(); // Set Isotope Property fProperty->SetAtomicNumber(ionZ); @@ -349,7 +349,7 @@ void G4NuclideTable::AddState( G4int ionZ, G4int ionA, G4double ionE, { if ( fUserDefinedList == nullptr ) fUserDefinedList = new G4IsotopeList(); - G4IsotopeProperty* fProperty = new G4IsotopeProperty(); + auto fProperty = new G4IsotopeProperty(); // Set Isotope Property fProperty->SetAtomicNumber(ionZ); @@ -358,7 +358,7 @@ void G4NuclideTable::AddState( G4int ionZ, G4int ionA, G4double ionE, fProperty->SetEnergy(ionE); fProperty->SetiSpin(ionJ); fProperty->SetLifeTime(ionLife); - fProperty->SetDecayTable(0); + fProperty->SetDecayTable(nullptr); fProperty->SetMagneticMoment(ionMu); fProperty->SetFloatLevelBase(flb); @@ -399,7 +399,7 @@ G4double G4NuclideTable::StripFloatLevelBase(G4double E, G4int& flbIndex) G4Ions::G4FloatLevelBase G4NuclideTable::StripFloatLevelBase( const G4String& sFLB ) { - if ( sFLB.size() < 1 || 2 < sFLB.size() ) + if ( sFLB.empty() || 2 < sFLB.size() ) { G4String text; text += sFLB; diff --git a/source/particles/management/src/G4PDGCodeChecker.cc b/source/particles/management/src/G4PDGCodeChecker.cc index e52049c1f29..9d83d816109 100644 --- a/source/particles/management/src/G4PDGCodeChecker.cc +++ b/source/particles/management/src/G4PDGCodeChecker.cc @@ -47,11 +47,6 @@ G4PDGCodeChecker::G4PDGCodeChecker() } } -// -------------------------------------------------------------------- -G4PDGCodeChecker::~G4PDGCodeChecker() -{ -} - // -------------------------------------------------------------------- G4int G4PDGCodeChecker::CheckPDGCode( G4int PDGcode, const G4String& particleType ) @@ -80,20 +75,20 @@ G4int G4PDGCodeChecker::CheckPDGCode( G4int PDGcode, { return CheckForQuarks(); } - else if (theParticleType =="diquarks") + if (theParticleType =="diquarks") { return CheckForDiQuarks(); } - else if (theParticleType =="gluons") + if (theParticleType =="gluons") { return code; // gluons, do not care about } - else if (theParticleType == "meson") + if (theParticleType == "meson") { return CheckForMesons(); } - else if (theParticleType == "baryon") + if (theParticleType == "baryon") { return CheckForBaryons(); } @@ -274,7 +269,7 @@ G4int G4PDGCodeChecker::CheckForMesons() } // check heavier quark type - if (quark2 & 1) + if ((quark2 & 1) != 0) { // down type qurak if (tempPDGcode >0) @@ -315,13 +310,13 @@ G4int G4PDGCodeChecker::CheckForDiQuarks() return 0; } - else if (quark1 < quark2) + if (quark1 < quark2) { // --- code is wrong return 0; } - else if (quark2>NumberOfQuarkFlavor) + if (quark2>NumberOfQuarkFlavor) { #ifdef G4VERBOSE if (verboseLevel>0) diff --git a/source/particles/management/src/G4PDefManager.cc b/source/particles/management/src/G4PDefManager.cc index 584d43e09e7..21e12c6810e 100644 --- a/source/particles/management/src/G4PDefManager.cc +++ b/source/particles/management/src/G4PDefManager.cc @@ -29,12 +29,14 @@ // from automatic MT conversion. // -------------------------------------------------------------------- -#include - #include "G4PDefManager.hh" + +#include "G4AutoLock.hh" #include "globals.hh" + #include "pwdefs.hh" -#include "G4AutoLock.hh" + +#include void G4PDefData::initialize() { @@ -54,7 +56,7 @@ G4PDefData*& G4PDefManager::offset() return _instance; } -G4PDefManager::G4PDefManager() : totalobj(0) +G4PDefManager::G4PDefManager() { G4MUTEXINIT(mutex); } diff --git a/source/particles/management/src/G4ParticleDefinition.cc b/source/particles/management/src/G4ParticleDefinition.cc index ffd5cfd6091..9ffb96ddfb6 100644 --- a/source/particles/management/src/G4ParticleDefinition.cc +++ b/source/particles/management/src/G4ParticleDefinition.cc @@ -108,7 +108,7 @@ G4ParticleDefinition::G4ParticleDefinition( static const G4String muAtom("MuonicAtom"); g4particleDefinitionInstanceID = -1; - theProcessManagerShadow = 0; + theProcessManagerShadow = nullptr; theParticleTable = G4ParticleTable::GetParticleTable(); @@ -195,15 +195,14 @@ G4ParticleDefinition::~G4ParticleDefinition() "PART117", JustWarning, msg); return ; } - else - { -#ifdef G4VERBOSE + + #ifdef G4VERBOSE if (verboseLevel>0) { G4cout << GetParticleName() << " will be deleted..." << G4endl; } #endif - } + } delete theDecayTable; } @@ -435,10 +434,9 @@ G4double G4ParticleDefinition::CalculateAnomaly() const return 0.5*std::fabs(thePDGMagneticMoment/muB - 2.*thePDGCharge/CLHEP::eplus); } - else - { - return 0.0; - } + + return 0.0; + } // -------------------------------------------------------------------- diff --git a/source/particles/management/src/G4ParticleMessenger.cc b/source/particles/management/src/G4ParticleMessenger.cc index 18f4f88d762..75fd9b46daf 100644 --- a/source/particles/management/src/G4ParticleMessenger.cc +++ b/source/particles/management/src/G4ParticleMessenger.cc @@ -226,12 +226,11 @@ G4String G4ParticleMessenger::GetCurrentValue(G4UIcommand* command) // no particle is selected. return null return noName; } - else - { - return currentParticle->GetParticleName(); - } + + return currentParticle->GetParticleName(); + } - else if( command==verboseCmd ) + if( command==verboseCmd ) { // Command /particle/verbose return verboseCmd->ConvertToString(theParticleTable->GetVerboseLevel()); diff --git a/source/particles/management/src/G4ParticlePropertyData.cc b/source/particles/management/src/G4ParticlePropertyData.cc index 92b564ff6ab..388c5315cc7 100644 --- a/source/particles/management/src/G4ParticlePropertyData.cc +++ b/source/particles/management/src/G4ParticlePropertyData.cc @@ -34,11 +34,6 @@ #include "G4SystemOfUnits.hh" #include "G4ParticlePropertyData.hh" -// -------------------------------------------------------------------- -G4ParticlePropertyData::~G4ParticlePropertyData() -{ -} - // -------------------------------------------------------------------- G4ParticlePropertyData::G4ParticlePropertyData(const G4String& particleName) : theParticleName(particleName) diff --git a/source/particles/management/src/G4ParticlePropertyMessenger.cc b/source/particles/management/src/G4ParticlePropertyMessenger.cc index ad938a62b74..cfe8dfd2fb8 100644 --- a/source/particles/management/src/G4ParticlePropertyMessenger.cc +++ b/source/particles/management/src/G4ParticlePropertyMessenger.cc @@ -29,16 +29,16 @@ // -------------------------------------------------------------------- #include "G4ParticlePropertyMessenger.hh" -#include "G4UImanager.hh" -#include "G4UIdirectory.hh" -#include "G4UIcmdWithoutParameter.hh" -#include "G4UIcmdWithAnInteger.hh" -#include "G4UIcmdWithADoubleAndUnit.hh" -#include "G4UIcmdWithABool.hh" -#include "G4ParticleDefinition.hh" + #include "G4DecayTableMessenger.hh" -#include "G4ParticlePropertyMessenger.hh" +#include "G4ParticleDefinition.hh" #include "G4ParticleTable.hh" +#include "G4UIcmdWithABool.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIcmdWithoutParameter.hh" +#include "G4UIdirectory.hh" +#include "G4UImanager.hh" #include "G4ios.hh" #include // Include from 'system' @@ -107,7 +107,7 @@ G4ParticlePropertyMessenger::~G4ParticlePropertyMessenger() void G4ParticlePropertyMessenger:: SetNewValue(G4UIcommand* command, G4String newValue) { - G4ParticleDefinition* currentParticle + auto currentParticle = const_cast(theParticleTable->GetSelectedParticle()); if (currentParticle == nullptr) diff --git a/source/particles/management/src/G4ParticlePropertyTable.cc b/source/particles/management/src/G4ParticlePropertyTable.cc index 16c7ab2f7e8..e8114240329 100644 --- a/source/particles/management/src/G4ParticlePropertyTable.cc +++ b/source/particles/management/src/G4ParticlePropertyTable.cc @@ -52,9 +52,9 @@ G4ParticlePropertyTable* G4ParticlePropertyTable::GetParticlePropertyTable() // -------------------------------------------------------------------- G4ParticlePropertyTable::~G4ParticlePropertyTable() { - for (std::size_t idx=0; idxGetParticleName()); pData->thePDGMass = aParticle->GetPDGMass(); pData->thePDGWidth = aParticle->GetPDGWidth(); diff --git a/source/particles/management/src/G4ParticleTable.cc b/source/particles/management/src/G4ParticleTable.cc index 839464f6a27..df78e25a598 100644 --- a/source/particles/management/src/G4ParticleTable.cc +++ b/source/particles/management/src/G4ParticleTable.cc @@ -196,7 +196,7 @@ G4ParticleTable::~G4ParticleTable() RemoveAllParticles(); // delete Ion Table - if (fIonTable != nullptr) delete fIonTable; + delete fIonTable; fIonTable = nullptr; // delete dictionary for encoding @@ -209,7 +209,7 @@ G4ParticleTable::~G4ParticleTable() if( fDictionary != nullptr) { - if (fIterator != nullptr ) delete fIterator; + delete fIterator; fIterator = nullptr; fDictionary->clear(); @@ -217,7 +217,7 @@ G4ParticleTable::~G4ParticleTable() fDictionary =nullptr; } - if ( fParticleMessenger != nullptr) delete fParticleMessenger; + delete fParticleMessenger; fParticleMessenger = nullptr; fgParticleTable = nullptr; @@ -241,7 +241,7 @@ void G4ParticleTable::DestroyWorkerG4ParticleTable() if( fDictionary != nullptr) { - if (fIterator != nullptr ) delete fIterator; + delete fIterator; fIterator = nullptr; fDictionary->clear(); @@ -339,8 +339,8 @@ G4ParticleDefinition* G4ParticleTable::Insert(G4ParticleDefinition* particle) #endif return nullptr; } - else - { + + if (contains(particle)) { #ifdef G4VERBOSE @@ -356,9 +356,8 @@ G4ParticleDefinition* G4ParticleTable::Insert(G4ParticleDefinition* particle) return particle; } - else - { - G4PTblDictionary* pdic = fDictionaryShadow; + + G4PTblDictionary* pdic = fDictionaryShadow; // insert into Dictionary pdic->insert( std::pair0) { G4cout << particle->GetParticleName() << " will be removed from the ParticleTable " << G4endl; } #endif - } + } - G4PTblDictionary::iterator it = fDictionaryShadow->find(GetKey(particle)); + auto it = fDictionaryShadow->find(GetKey(particle)); if (it != fDictionaryShadow->end()) { fDictionaryShadow->erase(it); @@ -513,29 +511,27 @@ const G4String& G4ParticleTable::GetParticleName(G4int index) const { return aParticle->GetParticleName(); } - else - { - return noName; - } + + return noName; + } // -------------------------------------------------------------------- G4ParticleDefinition* G4ParticleTable::FindParticle(const G4String& particle_name) { - G4PTblDictionary::iterator it = fDictionary->find(particle_name); + auto it = fDictionary->find(particle_name); if (it != fDictionary->end()) { return (*it).second; } - else - { -#ifdef G4MULTITHREADED + + #ifdef G4MULTITHREADED G4ParticleDefinition* ptcl = nullptr; if(G4Threading::IsWorkerThread()) { G4MUTEXLOCK(&G4ParticleTable::particleTableMutex()); - G4PTblDictionary::iterator its = fDictionaryShadow->find(particle_name); + auto its = fDictionaryShadow->find(particle_name); if(its != fDictionaryShadow->end()) { fDictionary->insert(*its); @@ -550,7 +546,7 @@ G4ParticleTable::FindParticle(const G4String& particle_name) #else return nullptr; #endif - } + } // -------------------------------------------------------------------- @@ -559,7 +555,7 @@ void G4ParticleTable::SelectParticle(const G4String& name) if(name != selectedName) { const G4ParticleDefinition* part = FindParticle(name); - if(part) + if(part != nullptr) { #ifdef G4MULTITHREADED G4MUTEXLOCK(&G4ParticleTable::particleTableMutex()); @@ -602,9 +598,9 @@ G4ParticleDefinition* G4ParticleTable::FindParticle(G4int aPDGEncoding ) G4PTblEncodingDictionary* pedic = fEncodingDictionary; G4ParticleDefinition* particle = nullptr; - if (pedic) + if (pedic != nullptr) { - G4PTblEncodingDictionary::iterator it = pedic->find(aPDGEncoding ); + auto it = pedic->find(aPDGEncoding ); if (it != pedic->end()) { particle = (*it).second; @@ -615,7 +611,7 @@ G4ParticleDefinition* G4ParticleTable::FindParticle(G4int aPDGEncoding ) if(particle == nullptr && G4Threading::IsWorkerThread()) { G4MUTEXLOCK(&G4ParticleTable::particleTableMutex()); - G4PTblEncodingDictionary::iterator its + auto its = fEncodingDictionaryShadow->find(aPDGEncoding); if(its!=fEncodingDictionaryShadow->end()) { @@ -722,7 +718,7 @@ G4ParticleTable::GetEncodingDictionary() const // -------------------------------------------------------------------- G4bool G4ParticleTable::contains(const G4String& particle_name) const { - G4PTblDictionary::iterator it = fDictionaryShadow->find(particle_name); + auto it = fDictionaryShadow->find(particle_name); return (it != fDictionaryShadow->cend()); } diff --git a/source/particles/management/src/G4ParticlesWorkspace.cc b/source/particles/management/src/G4ParticlesWorkspace.cc index f3b7d308838..23fbf201c47 100644 --- a/source/particles/management/src/G4ParticlesWorkspace.cc +++ b/source/particles/management/src/G4ParticlesWorkspace.cc @@ -53,9 +53,7 @@ G4ParticlesWorkspace::G4ParticlesWorkspace(G4bool verbose) fpPDefOffset = fpPDefSIM->GetOffset(); } -G4ParticlesWorkspace::~G4ParticlesWorkspace() -{ -} + void G4ParticlesWorkspace::UseWorkspace() { @@ -71,7 +69,7 @@ void G4ParticlesWorkspace::UseWorkspace() void G4ParticlesWorkspace::ReleaseWorkspace() { - fpPDefSIM->UseWorkArea(0); + fpPDefSIM->UseWorkArea(nullptr); } void G4ParticlesWorkspace::InitialiseParticles() diff --git a/source/particles/management/src/G4PhaseSpaceDecayChannel.cc b/source/particles/management/src/G4PhaseSpaceDecayChannel.cc index 25677c6771c..862388cea93 100644 --- a/source/particles/management/src/G4PhaseSpaceDecayChannel.cc +++ b/source/particles/management/src/G4PhaseSpaceDecayChannel.cc @@ -59,11 +59,6 @@ G4PhaseSpaceDecayChannel(const G4String& theParentName, { } -// -------------------------------------------------------------------- -G4PhaseSpaceDecayChannel::~G4PhaseSpaceDecayChannel() -{ -} - // -------------------------------------------------------------------- G4DecayProducts* G4PhaseSpaceDecayChannel::DecayIt(G4double parentMass) { @@ -127,14 +122,14 @@ G4DecayProducts* G4PhaseSpaceDecayChannel::OneBodyDecayIt() // create parent G4DynamicParticle at rest G4ThreeVector dummy; - G4DynamicParticle* parentparticle + auto parentparticle = new G4DynamicParticle( G4MT_parent, dummy, 0.0, parentmass); // create G4Decayproducts - G4DecayProducts *products = new G4DecayProducts(*parentparticle); + auto products = new G4DecayProducts(*parentparticle); delete parentparticle; // create daughter G4DynamicParticle at rest - G4DynamicParticle* daughterparticle + auto daughterparticle = new G4DynamicParticle( G4MT_daughters[0], dummy, 0.0); if (useGivenDaughterMass) daughterparticle->SetMass(givenDaughterMasses[0]); products->PushProducts(daughterparticle); @@ -169,10 +164,10 @@ G4DecayProducts* G4PhaseSpaceDecayChannel::TwoBodyDecayIt() // create parent G4DynamicParticle at rest G4ThreeVector dummy; - G4DynamicParticle* parentparticle + auto parentparticle = new G4DynamicParticle( G4MT_parent, dummy, 0.0, parentmass); // create G4Decayproducts - G4DecayProducts* products = new G4DecayProducts(*parentparticle); + auto products = new G4DecayProducts(*parentparticle); delete parentparticle; if (!useGivenDaughterMass) @@ -267,7 +262,7 @@ G4DecayProducts* G4PhaseSpaceDecayChannel::TwoBodyDecayIt() // create daughter G4DynamicParticle G4double Ekin = std::sqrt(daughtermomentum*daughtermomentum + daughtermass[0]*daughtermass[0]) - daughtermass[0]; - G4DynamicParticle* daughterparticle + auto daughterparticle = new G4DynamicParticle(G4MT_daughters[0],direction,Ekin,daughtermass[0]); products->PushProducts(daughterparticle); Ekin = std::sqrt(daughtermomentum*daughtermomentum @@ -315,11 +310,11 @@ G4DecayProducts* G4PhaseSpaceDecayChannel::ThreeBodyDecayIt() // create parent G4DynamicParticle at rest G4ThreeVector dummy; - G4DynamicParticle* parentparticle + auto parentparticle = new G4DynamicParticle( G4MT_parent, dummy, 0.0, parentmass); // create G4Decayproducts - G4DecayProducts* products = new G4DecayProducts(*parentparticle); + auto products = new G4DecayProducts(*parentparticle); delete parentparticle; if (!useGivenDaughterMass) @@ -480,7 +475,7 @@ G4DecayProducts* G4PhaseSpaceDecayChannel::ThreeBodyDecayIt() G4ThreeVector direction0(sintheta*cosphi,sintheta*sinphi,costheta); G4double Ekin = std::sqrt(daughtermomentum[0]*daughtermomentum[0] + daughtermass[0]*daughtermass[0]) - daughtermass[0]; - G4DynamicParticle* daughterparticle + auto daughterparticle = new G4DynamicParticle(G4MT_daughters[0],direction0,Ekin,daughtermass[0]); products->PushProducts(daughterparticle); @@ -547,15 +542,15 @@ G4DecayProducts* G4PhaseSpaceDecayChannel::ManyBodyDecayIt() // parent particle G4ThreeVector dummy; - G4DynamicParticle* parentparticle + auto parentparticle = new G4DynamicParticle( G4MT_parent, dummy, 0.0, parentmass); // create G4Decayproducts - G4DecayProducts* products = new G4DecayProducts(*parentparticle); + auto products = new G4DecayProducts(*parentparticle); delete parentparticle; // daughters'mass - G4double* daughtermass = new G4double[numberOfDaughters]; + auto daughtermass = new G4double[numberOfDaughters]; G4double sumofdaughtermass = 0.0; for (index=0; index1) @@ -714,7 +708,7 @@ G4DecayProducts* G4PhaseSpaceDecayChannel::ManyBodyDecayIt() << G4endl; } #endif - } + } #ifdef G4VERBOSE @@ -872,5 +866,5 @@ G4double G4PhaseSpaceDecayChannel::Pmx(G4double e, G4double p1, G4double p2) // calcurate momentum of daughter particles in two-body decay G4double ppp = (e+p1+p2)*(e+p1-p2)*(e-p1+p2)*(e-p1-p2)/(4.0*e*e); if (ppp>0) return std::sqrt(ppp); - else return -1.; + return -1.; } diff --git a/source/particles/management/src/G4PionRadiativeDecayChannel.cc b/source/particles/management/src/G4PionRadiativeDecayChannel.cc index fc77e3d5341..2886250ecf0 100644 --- a/source/particles/management/src/G4PionRadiativeDecayChannel.cc +++ b/source/particles/management/src/G4PionRadiativeDecayChannel.cc @@ -65,12 +65,6 @@ namespace const G4double d2wmax = D2W(xl,yl); } -// -------------------------------------------------------------------- -G4PionRadiativeDecayChannel::G4PionRadiativeDecayChannel() - : G4VDecayChannel() -{ -} - // -------------------------------------------------------------------- G4PionRadiativeDecayChannel:: G4PionRadiativeDecayChannel(const G4String& theParentName, @@ -110,18 +104,6 @@ G4PionRadiativeDecayChannel(const G4String& theParentName, } } -// -------------------------------------------------------------------- -G4PionRadiativeDecayChannel::~G4PionRadiativeDecayChannel() -{ -} - -// -------------------------------------------------------------------- -G4PionRadiativeDecayChannel:: -G4PionRadiativeDecayChannel(const G4PionRadiativeDecayChannel& right) - : G4VDecayChannel(right) -{ -} - G4PionRadiativeDecayChannel& G4PionRadiativeDecayChannel::operator=(const G4PionRadiativeDecayChannel& right) { @@ -184,10 +166,10 @@ G4DecayProducts* G4PionRadiativeDecayChannel::DecayIt(G4double) // create parent G4DynamicParticle at rest G4ThreeVector dummy; - G4DynamicParticle* parentparticle + auto parentparticle = new G4DynamicParticle( G4MT_parent, dummy, 0.0); // create G4Decayproducts - G4DecayProducts *products = new G4DecayProducts(*parentparticle); + auto products = new G4DecayProducts(*parentparticle); delete parentparticle; G4double x, y; @@ -236,7 +218,7 @@ G4DecayProducts* G4PionRadiativeDecayChannel::DecayIt(G4double) G4ThreeVector direction0(px,py,pz); - G4DynamicParticle * daughterparticle0 + auto daughterparticle0 = new G4DynamicParticle(G4MT_daughters[0], daughtermomentum[0]*direction0); products->PushProducts(daughterparticle0); @@ -259,7 +241,7 @@ G4DecayProducts* G4PionRadiativeDecayChannel::DecayIt(G4double) direction1.rotateUz(direction0); - G4DynamicParticle * daughterparticle1 + auto daughterparticle1 = new G4DynamicParticle(G4MT_daughters[1], daughtermomentum[1]*direction1); products->PushProducts(daughterparticle1); diff --git a/source/particles/management/src/G4PrimaryParticle.cc b/source/particles/management/src/G4PrimaryParticle.cc index ab6c91301b9..e57523ea736 100644 --- a/source/particles/management/src/G4PrimaryParticle.cc +++ b/source/particles/management/src/G4PrimaryParticle.cc @@ -145,7 +145,7 @@ G4PrimaryParticle::operator=(const G4PrimaryParticle& right) G4code = right.G4code; direction = right.direction; kinE = right.kinE; - if (nextParticle != nullptr) delete nextParticle; + delete nextParticle; if ( right.nextParticle == nullptr ) { nextParticle = nullptr; @@ -154,7 +154,7 @@ G4PrimaryParticle::operator=(const G4PrimaryParticle& right) { nextParticle = new G4PrimaryParticle(*right.nextParticle); } - if (daughterParticle != nullptr) delete daughterParticle; + delete daughterParticle; if ( right.daughterParticle == nullptr ) { daughterParticle = nullptr; @@ -207,7 +207,7 @@ G4PrimaryParticle::~G4PrimaryParticle() // -------------------------------------------------------------------- void G4PrimaryParticle::SetMomentum(G4double px, G4double py, G4double pz) { - if ((mass<0.)&&(G4code!=0)) + if ((mass<0.)&&(G4code!=nullptr)) { mass = G4code->GetPDGMass(); } @@ -310,7 +310,7 @@ void G4PrimaryParticle::Print() const G4cout << " PreAssigned proper decay time : " << properTime/ns << " [ns] " << G4endl; } - if(userInfo != 0) { userInfo->Print(); } + if(userInfo != nullptr) { userInfo->Print(); } if(daughterParticle != nullptr) { G4cout << ">>>> Daughters" << G4endl; diff --git a/source/particles/management/src/G4PrimaryVertex.cc b/source/particles/management/src/G4PrimaryVertex.cc index d189ed3b8bd..9474c061fef 100644 --- a/source/particles/management/src/G4PrimaryVertex.cc +++ b/source/particles/management/src/G4PrimaryVertex.cc @@ -40,11 +40,6 @@ G4Allocator*& aPrimaryVertexAllocator() return _instance; } -// -------------------------------------------------------------------- -G4PrimaryVertex::G4PrimaryVertex() -{ -} - // -------------------------------------------------------------------- G4PrimaryVertex:: G4PrimaryVertex(G4double x0, G4double y0, G4double z0, G4double t0) @@ -101,7 +96,7 @@ G4PrimaryVertex& G4PrimaryVertex::operator=(const G4PrimaryVertex& right) Weight0 = right.Weight0; numberOfParticle = right.numberOfParticle; - if (theParticle != nullptr) delete theParticle; + delete theParticle; theParticle = nullptr; theTail = nullptr; if (right.theParticle != nullptr ) @@ -116,7 +111,7 @@ G4PrimaryVertex& G4PrimaryVertex::operator=(const G4PrimaryVertex& right) } } - if (nextVertex != nullptr ) delete nextVertex; + delete nextVertex; nextVertex = nullptr; tailVertex = nullptr; if (right.nextVertex != nullptr ) @@ -162,10 +157,10 @@ G4PrimaryParticle* G4PrimaryVertex::GetPrimary(G4int i) const } return particle; } - else - { + + return nullptr; - } + } // -------------------------------------------------------------------- diff --git a/source/particles/management/src/G4TauLeptonicDecayChannel.cc b/source/particles/management/src/G4TauLeptonicDecayChannel.cc index 9c1001a5ccb..63dc3123838 100644 --- a/source/particles/management/src/G4TauLeptonicDecayChannel.cc +++ b/source/particles/management/src/G4TauLeptonicDecayChannel.cc @@ -39,11 +39,6 @@ #include "G4LorentzRotation.hh" -G4TauLeptonicDecayChannel::G4TauLeptonicDecayChannel() - : G4VDecayChannel() -{ -} - // -------------------------------------------------------------------- G4TauLeptonicDecayChannel:: G4TauLeptonicDecayChannel(const G4String& theParentName, @@ -101,18 +96,6 @@ G4TauLeptonicDecayChannel(const G4String& theParentName, } } -// -------------------------------------------------------------------- -G4TauLeptonicDecayChannel::~G4TauLeptonicDecayChannel() -{ -} - -// -------------------------------------------------------------------- -G4TauLeptonicDecayChannel:: -G4TauLeptonicDecayChannel(const G4TauLeptonicDecayChannel& right) - : G4VDecayChannel(right) -{ -} - // -------------------------------------------------------------------- G4TauLeptonicDecayChannel& G4TauLeptonicDecayChannel::operator=(const G4TauLeptonicDecayChannel& right) @@ -133,7 +116,7 @@ G4TauLeptonicDecayChannel::operator=(const G4TauLeptonicDecayChannel& right) numberOfDaughters = right.numberOfDaughters; if ( numberOfDaughters >0 ) { - if (daughters_name !=0) ClearDaughtersName(); + if (daughters_name !=nullptr) ClearDaughtersName(); daughters_name = new G4String*[numberOfDaughters]; // copy daughters name for (G4int index=0; indexPushProducts(daughterparticle); @@ -223,9 +206,9 @@ G4DecayProducts* G4TauLeptonicDecayChannel::DecayIt(G4double) G4double cosphin = std::cos(phin); G4ThreeVector direction1(sinthetan*cosphin,sinthetan*sinphin,costhetan); - G4DynamicParticle * daughterparticle1 + auto daughterparticle1 = new G4DynamicParticle( G4MT_daughters[1], direction1*(vmass/2.)); - G4DynamicParticle * daughterparticle2 + auto daughterparticle2 = new G4DynamicParticle( G4MT_daughters[2], direction1*(-1.0*vmass/2.)); // boost to the muon rest frame diff --git a/source/particles/management/src/G4VDecayChannel.cc b/source/particles/management/src/G4VDecayChannel.cc index 9f8ecad29b2..0238912b82d 100644 --- a/source/particles/management/src/G4VDecayChannel.cc +++ b/source/particles/management/src/G4VDecayChannel.cc @@ -41,7 +41,6 @@ const G4String G4VDecayChannel::noName = " "; // -------------------------------------------------------------------- G4VDecayChannel::G4VDecayChannel() - : parent_polarization() { // set pointer to G4ParticleTable (static and singleton object) particletable = G4ParticleTable::GetParticleTable(); @@ -49,7 +48,7 @@ G4VDecayChannel::G4VDecayChannel() // -------------------------------------------------------------------- G4VDecayChannel::G4VDecayChannel(const G4String& aName, G4int verbose) - : kinematics_name(aName), parent_polarization(), verboseLevel(verbose) + : kinematics_name(aName), verboseLevel(verbose) { // set pointer to G4ParticleTable (static and singleton object) particletable = G4ParticleTable::GetParticleTable(); @@ -65,7 +64,7 @@ G4VDecayChannel::G4VDecayChannel(const G4String& aName, const G4String& theDaughterName3, const G4String& theDaughterName4, const G4String& theDaughterName5 ) - : kinematics_name(aName), rbranch(theBR), parent_polarization(), + : kinematics_name(aName), rbranch(theBR), numberOfDaughters(theNumberOfDaughters) { // set pointer to G4ParticleTable (static and singleton object) @@ -350,8 +349,8 @@ void G4VDecayChannel::FillDaughters() // create and set the array of pointers to daughter particles G4MT_daughters = new G4ParticleDefinition*[numberOfDaughters]; - if (G4MT_daughters_mass != nullptr) delete [] G4MT_daughters_mass; - if (G4MT_daughters_width != nullptr) delete [] G4MT_daughters_width; + delete [] G4MT_daughters_mass; + delete [] G4MT_daughters_width; G4MT_daughters_mass = new G4double[numberOfDaughters]; G4MT_daughters_width = new G4double[numberOfDaughters]; // loop over all daughters diff --git a/source/particles/management/src/G4VIsotopeTable.cc b/source/particles/management/src/G4VIsotopeTable.cc index 36ce863f45c..3a8c482966c 100644 --- a/source/particles/management/src/G4VIsotopeTable.cc +++ b/source/particles/management/src/G4VIsotopeTable.cc @@ -35,12 +35,6 @@ // ###################################################################### #include "G4IsotopeProperty.hh" -#include "G4VIsotopeTable.hh" - -// -------------------------------------------------------------------- -G4VIsotopeTable::G4VIsotopeTable() -{ -} // -------------------------------------------------------------------- G4VIsotopeTable::G4VIsotopeTable(const G4String& name) @@ -48,12 +42,6 @@ G4VIsotopeTable::G4VIsotopeTable(const G4String& name) { } -// -------------------------------------------------------------------- -G4VIsotopeTable::G4VIsotopeTable(const G4VIsotopeTable& right) - : fName(right.fName), verboseLevel(right.verboseLevel) -{ -} - // -------------------------------------------------------------------- G4VIsotopeTable& G4VIsotopeTable::operator=(const G4VIsotopeTable& right) { @@ -65,18 +53,13 @@ G4VIsotopeTable& G4VIsotopeTable::operator=(const G4VIsotopeTable& right) return *this; } -// -------------------------------------------------------------------- -G4VIsotopeTable::~G4VIsotopeTable() -{ -} - // -------------------------------------------------------------------- G4IsotopeProperty* G4VIsotopeTable::GetIsotopeByIsoLvl(G4int Z, G4int A, G4int level) { // temporal implementation if (level==0) return GetIsotope(Z, A, 0.0); - else return nullptr; + return nullptr; } // -------------------------------------------------------------------- diff --git a/source/particles/shortlived/GNUmakefile b/source/particles/shortlived/GNUmakefile deleted file mode 100644 index 518f5f1e885..00000000000 --- a/source/particles/shortlived/GNUmakefile +++ /dev/null @@ -1,21 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for shortlived library. Gabriele Cosmo, 18/9/96. -# -------------------------------------------------------------- - -name := G4shortlived - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4PARTICLES_ALLOC_EXPORT -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/particles/management/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/particles/shortlived/include/G4DiQuarks.hh b/source/particles/shortlived/include/G4DiQuarks.hh index 9b927e2b564..bcf074e37cd 100644 --- a/source/particles/shortlived/include/G4DiQuarks.hh +++ b/source/particles/shortlived/include/G4DiQuarks.hh @@ -59,7 +59,7 @@ class G4DiQuarks : public G4VShortLivedParticle G4bool stable, G4double lifetime, G4DecayTable *decaytable ); - virtual ~G4DiQuarks(); + ~G4DiQuarks() override = default; }; diff --git a/source/particles/shortlived/include/G4ExcitedBaryonConstructor.hh b/source/particles/shortlived/include/G4ExcitedBaryonConstructor.hh index b08638fcba8..8a562ad0cba 100644 --- a/source/particles/shortlived/include/G4ExcitedBaryonConstructor.hh +++ b/source/particles/shortlived/include/G4ExcitedBaryonConstructor.hh @@ -46,7 +46,7 @@ class G4ExcitedBaryonConstructor public: G4ExcitedBaryonConstructor(G4int nStates = 0, G4int isoSpin=0); - virtual ~G4ExcitedBaryonConstructor(); + virtual ~G4ExcitedBaryonConstructor() = default; public: virtual void Construct(G4int indexOfState = -1); @@ -64,10 +64,10 @@ class G4ExcitedBaryonConstructor G4int iIsoSpin; const G4String type; - const G4int iConjugation; - const G4int iGParity; - const G4int leptonNumber; - const G4int baryonNumber; + const G4int iConjugation{0}; + const G4int iGParity{0}; + const G4int leptonNumber{0}; + const G4int baryonNumber{1}; // following methods are pure virtual // thes methods should be implemented in derived classes diff --git a/source/particles/shortlived/include/G4ExcitedBaryons.hh b/source/particles/shortlived/include/G4ExcitedBaryons.hh index 66160f1d8e4..06a472e4e3c 100644 --- a/source/particles/shortlived/include/G4ExcitedBaryons.hh +++ b/source/particles/shortlived/include/G4ExcitedBaryons.hh @@ -59,7 +59,7 @@ class G4ExcitedBaryons : public G4VShortLivedParticle G4bool stable, G4double lifetime, G4DecayTable *decaytable ); - virtual ~G4ExcitedBaryons(); + ~G4ExcitedBaryons() override = default; void SetMultipletName(const G4String& name); }; diff --git a/source/particles/shortlived/include/G4ExcitedDeltaConstructor.hh b/source/particles/shortlived/include/G4ExcitedDeltaConstructor.hh index b8f7dae7478..5d17abb39d7 100644 --- a/source/particles/shortlived/include/G4ExcitedDeltaConstructor.hh +++ b/source/particles/shortlived/include/G4ExcitedDeltaConstructor.hh @@ -46,27 +46,27 @@ class G4ExcitedDeltaConstructor: public G4ExcitedBaryonConstructor public: G4ExcitedDeltaConstructor(); - virtual ~G4ExcitedDeltaConstructor(); + ~G4ExcitedDeltaConstructor() override = default; protected: - virtual G4int GetEncoding(G4int iIsoSpin3, G4int idxState); + G4int GetEncoding(G4int iIsoSpin3, G4int idxState) override; protected: - virtual G4bool Exist( G4int ){return true;} + G4bool Exist( G4int ) override{return true;} - virtual G4int GetQuarkContents(G4int, G4int); - virtual G4String GetName(G4int iIso3, G4int iState); - virtual G4String GetMultipletName(G4int iState); + G4int GetQuarkContents(G4int, G4int) override; + G4String GetName(G4int iIso3, G4int iState) override; + G4String GetMultipletName(G4int iState) override; - virtual G4double GetMass( G4int state, G4int iso); - virtual G4double GetWidth( G4int state, G4int iso); - virtual G4int GetiSpin(G4int iState); - virtual G4int GetiParity(G4int iState); - virtual G4int GetEncodingOffset(G4int iState); + G4double GetMass( G4int state, G4int iso) override; + G4double GetWidth( G4int state, G4int iso) override; + G4int GetiSpin(G4int iState) override; + G4int GetiParity(G4int iState) override; + G4int GetEncodingOffset(G4int iState) override; - virtual G4DecayTable* CreateDecayTable(const G4String& name, + G4DecayTable* CreateDecayTable(const G4String& name, G4int iIso3, G4int iState, - G4bool fAnti = false); + G4bool fAnti = false) override; private: G4DecayTable* AddNGammaMode( G4DecayTable* table, const G4String& name, G4double br, G4int iIso3, G4bool fAnti); diff --git a/source/particles/shortlived/include/G4ExcitedLambdaConstructor.hh b/source/particles/shortlived/include/G4ExcitedLambdaConstructor.hh index 04200088568..3be913303d0 100644 --- a/source/particles/shortlived/include/G4ExcitedLambdaConstructor.hh +++ b/source/particles/shortlived/include/G4ExcitedLambdaConstructor.hh @@ -46,23 +46,23 @@ class G4ExcitedLambdaConstructor: public G4ExcitedBaryonConstructor public: G4ExcitedLambdaConstructor(); - virtual ~G4ExcitedLambdaConstructor(); + ~G4ExcitedLambdaConstructor() override = default; protected: - virtual G4bool Exist( G4int ){return true;} - - virtual G4int GetQuarkContents(G4int, G4int); - virtual G4String GetName(G4int iIso3, G4int iState); - virtual G4String GetMultipletName(G4int iState); - virtual G4double GetMass( G4int state, G4int iso); - virtual G4double GetWidth( G4int state, G4int iso); - virtual G4int GetiSpin(G4int iState); - virtual G4int GetiParity(G4int iState); - virtual G4int GetEncodingOffset(G4int iState); - - virtual G4DecayTable* CreateDecayTable(const G4String& name, + G4bool Exist( G4int ) override{return true;} + + G4int GetQuarkContents(G4int, G4int) override; + G4String GetName(G4int iIso3, G4int iState) override; + G4String GetMultipletName(G4int iState) override; + G4double GetMass( G4int state, G4int iso) override; + G4double GetWidth( G4int state, G4int iso) override; + G4int GetiSpin(G4int iState) override; + G4int GetiParity(G4int iState) override; + G4int GetEncodingOffset(G4int iState) override; + + G4DecayTable* CreateDecayTable(const G4String& name, G4int iIso3, G4int iState, - G4bool fAnti = false); + G4bool fAnti = false) override; private: G4DecayTable* AddNKMode( G4DecayTable* table, const G4String& name, G4double br, G4int iIso3, G4bool fAnti); diff --git a/source/particles/shortlived/include/G4ExcitedMesonConstructor.hh b/source/particles/shortlived/include/G4ExcitedMesonConstructor.hh index a7d723af004..8b0fa3f468f 100644 --- a/source/particles/shortlived/include/G4ExcitedMesonConstructor.hh +++ b/source/particles/shortlived/include/G4ExcitedMesonConstructor.hh @@ -52,7 +52,7 @@ class G4ExcitedMesonConstructor public: G4ExcitedMesonConstructor(G4int nStates = 0, G4int isoSpin=0); - virtual ~G4ExcitedMesonConstructor(); + virtual ~G4ExcitedMesonConstructor() = default; public: virtual void Construct(G4int indexOfState = -1); @@ -81,8 +81,8 @@ class G4ExcitedMesonConstructor protected: const G4String type; - const G4int leptonNumber; - const G4int baryonNumber; + const G4int leptonNumber{0}; + const G4int baryonNumber{0}; G4bool Exist(G4int idxState, G4int idxType); G4double GetCharge(G4int iIsoSpin3, G4int idxType); diff --git a/source/particles/shortlived/include/G4ExcitedMesons.hh b/source/particles/shortlived/include/G4ExcitedMesons.hh index 8143a56770c..dcd9292365c 100644 --- a/source/particles/shortlived/include/G4ExcitedMesons.hh +++ b/source/particles/shortlived/include/G4ExcitedMesons.hh @@ -59,7 +59,7 @@ class G4ExcitedMesons : public G4VShortLivedParticle G4bool stable, G4double lifetime, G4DecayTable *decaytable ); - virtual ~G4ExcitedMesons(); + ~G4ExcitedMesons() override = default; void SetMultipletName(const G4String& ); }; diff --git a/source/particles/shortlived/include/G4ExcitedNucleonConstructor.hh b/source/particles/shortlived/include/G4ExcitedNucleonConstructor.hh index 31335747d9e..cce2fa292b0 100644 --- a/source/particles/shortlived/include/G4ExcitedNucleonConstructor.hh +++ b/source/particles/shortlived/include/G4ExcitedNucleonConstructor.hh @@ -46,26 +46,26 @@ class G4ExcitedNucleonConstructor: public G4ExcitedBaryonConstructor public: G4ExcitedNucleonConstructor(); - virtual ~G4ExcitedNucleonConstructor(); + ~G4ExcitedNucleonConstructor() override = default; protected: - virtual G4int GetEncoding(G4int iIsoSpin3, G4int idxState); + G4int GetEncoding(G4int iIsoSpin3, G4int idxState) override; protected: - virtual G4bool Exist( G4int ){return true;} - - virtual G4int GetQuarkContents(G4int, G4int); - virtual G4String GetName(G4int iIso3, G4int iState); - virtual G4String GetMultipletName(G4int iState); - virtual G4double GetMass( G4int state, G4int iso); - virtual G4double GetWidth( G4int state, G4int iso); - virtual G4int GetiSpin(G4int iState); - virtual G4int GetiParity(G4int iState); - virtual G4int GetEncodingOffset(G4int iState); - - virtual G4DecayTable* CreateDecayTable(const G4String& name, + G4bool Exist( G4int ) override{return true;} + + G4int GetQuarkContents(G4int, G4int) override; + G4String GetName(G4int iIso3, G4int iState) override; + G4String GetMultipletName(G4int iState) override; + G4double GetMass( G4int state, G4int iso) override; + G4double GetWidth( G4int state, G4int iso) override; + G4int GetiSpin(G4int iState) override; + G4int GetiParity(G4int iState) override; + G4int GetEncodingOffset(G4int iState) override; + + G4DecayTable* CreateDecayTable(const G4String& name, G4int iIso3, G4int iState, - G4bool fAnti = false); + G4bool fAnti = false) override; private: G4DecayTable* AddNGammaMode( G4DecayTable* table, const G4String& name, G4double br, G4int iIso3, G4bool fAnti); diff --git a/source/particles/shortlived/include/G4ExcitedSigmaConstructor.hh b/source/particles/shortlived/include/G4ExcitedSigmaConstructor.hh index 2515425023c..b12f0ec9a76 100644 --- a/source/particles/shortlived/include/G4ExcitedSigmaConstructor.hh +++ b/source/particles/shortlived/include/G4ExcitedSigmaConstructor.hh @@ -46,23 +46,23 @@ class G4ExcitedSigmaConstructor: public G4ExcitedBaryonConstructor public: G4ExcitedSigmaConstructor(); - virtual ~G4ExcitedSigmaConstructor(); + ~G4ExcitedSigmaConstructor() override = default; protected: - virtual G4bool Exist( G4int ){return true;} - - virtual G4int GetQuarkContents(G4int, G4int); - virtual G4String GetName(G4int iIso3, G4int iState); - virtual G4String GetMultipletName(G4int iState); - virtual G4double GetMass( G4int state, G4int iso); - virtual G4double GetWidth( G4int state, G4int iso); - virtual G4int GetiSpin(G4int iState); - virtual G4int GetiParity(G4int iState); - virtual G4int GetEncodingOffset(G4int iState); - - virtual G4DecayTable* CreateDecayTable(const G4String& name, + G4bool Exist( G4int ) override{return true;} + + G4int GetQuarkContents(G4int, G4int) override; + G4String GetName(G4int iIso3, G4int iState) override; + G4String GetMultipletName(G4int iState) override; + G4double GetMass( G4int state, G4int iso) override; + G4double GetWidth( G4int state, G4int iso) override; + G4int GetiSpin(G4int iState) override; + G4int GetiParity(G4int iState) override; + G4int GetEncodingOffset(G4int iState) override; + + G4DecayTable* CreateDecayTable(const G4String& name, G4int iIso3, G4int iState, - G4bool fAnti = false); + G4bool fAnti = false) override; private: G4DecayTable* AddNKMode( G4DecayTable* table, const G4String& name, G4double br, G4int iIso3, G4bool fAnti); diff --git a/source/particles/shortlived/include/G4ExcitedXiConstructor.hh b/source/particles/shortlived/include/G4ExcitedXiConstructor.hh index 9030695d54e..1fdbebc3ec3 100644 --- a/source/particles/shortlived/include/G4ExcitedXiConstructor.hh +++ b/source/particles/shortlived/include/G4ExcitedXiConstructor.hh @@ -46,23 +46,23 @@ class G4ExcitedXiConstructor: public G4ExcitedBaryonConstructor public: G4ExcitedXiConstructor(); - virtual ~G4ExcitedXiConstructor(); + ~G4ExcitedXiConstructor() override = default; protected: - virtual G4bool Exist( G4int ){return true;} - - virtual G4int GetQuarkContents(G4int, G4int); - virtual G4String GetName(G4int iIso3, G4int iState); - virtual G4String GetMultipletName(G4int iState); - virtual G4double GetMass( G4int state, G4int iso); - virtual G4double GetWidth( G4int state, G4int iso); - virtual G4int GetiSpin(G4int iState); - virtual G4int GetiParity(G4int iState); - virtual G4int GetEncodingOffset(G4int iState); - - virtual G4DecayTable* CreateDecayTable(const G4String& name, + G4bool Exist( G4int ) override{return true;} + + G4int GetQuarkContents(G4int, G4int) override; + G4String GetName(G4int iIso3, G4int iState) override; + G4String GetMultipletName(G4int iState) override; + G4double GetMass( G4int state, G4int iso) override; + G4double GetWidth( G4int state, G4int iso) override; + G4int GetiSpin(G4int iState) override; + G4int GetiParity(G4int iState) override; + G4int GetEncodingOffset(G4int iState) override; + + G4DecayTable* CreateDecayTable(const G4String& name, G4int iIso3, G4int iState, - G4bool fAnti = false); + G4bool fAnti = false) override; private: G4DecayTable* AddXiPiMode( G4DecayTable* table, const G4String& name, G4double br, G4int iIso3, G4bool fAnti); diff --git a/source/particles/shortlived/include/G4Gluons.hh b/source/particles/shortlived/include/G4Gluons.hh index 22a049aea3b..0df84dde6be 100644 --- a/source/particles/shortlived/include/G4Gluons.hh +++ b/source/particles/shortlived/include/G4Gluons.hh @@ -59,7 +59,7 @@ class G4Gluons : public G4VShortLivedParticle G4bool stable, G4double lifetime, G4DecayTable *decaytable ); - virtual ~G4Gluons(); + ~G4Gluons() override = default; }; diff --git a/source/particles/shortlived/include/G4Quarks.hh b/source/particles/shortlived/include/G4Quarks.hh index 8e5ad27d2a4..601eae62378 100644 --- a/source/particles/shortlived/include/G4Quarks.hh +++ b/source/particles/shortlived/include/G4Quarks.hh @@ -59,7 +59,7 @@ class G4Quarks : public G4VShortLivedParticle G4bool stable, G4double lifetime, G4DecayTable *decaytable ); - virtual ~G4Quarks(); + ~G4Quarks() override = default; }; diff --git a/source/particles/shortlived/include/G4ShortLivedConstructor.hh b/source/particles/shortlived/include/G4ShortLivedConstructor.hh index b7405ccda24..424cb357bf7 100644 --- a/source/particles/shortlived/include/G4ShortLivedConstructor.hh +++ b/source/particles/shortlived/include/G4ShortLivedConstructor.hh @@ -40,10 +40,6 @@ class G4ShortLivedConstructor //This class is a utility class for construction //short lived particles - public: - G4ShortLivedConstructor(); - ~G4ShortLivedConstructor(); - public: static void ConstructParticle(); diff --git a/source/particles/shortlived/include/G4VShortLivedParticle.hh b/source/particles/shortlived/include/G4VShortLivedParticle.hh index b0d7547ebae..c4fec9f6268 100644 --- a/source/particles/shortlived/include/G4VShortLivedParticle.hh +++ b/source/particles/shortlived/include/G4VShortLivedParticle.hh @@ -69,7 +69,7 @@ class G4VShortLivedParticle : public G4ParticleDefinition G4double lifetime, G4DecayTable *decaytable); - virtual ~G4VShortLivedParticle(); + ~G4VShortLivedParticle() override = default; G4bool operator==(const G4VShortLivedParticle &right) const; G4bool operator!=(const G4VShortLivedParticle &right) const; diff --git a/source/particles/shortlived/src/G4DiQuarks.cc b/source/particles/shortlived/src/G4DiQuarks.cc index 527dd977ea8..bd2390620e3 100644 --- a/source/particles/shortlived/src/G4DiQuarks.cc +++ b/source/particles/shortlived/src/G4DiQuarks.cc @@ -58,6 +58,3 @@ G4DiQuarks::G4DiQuarks( { SetParticleSubType("di_quark"); } - -G4DiQuarks::~G4DiQuarks() {} - diff --git a/source/particles/shortlived/src/G4ExcitedBaryonConstructor.cc b/source/particles/shortlived/src/G4ExcitedBaryonConstructor.cc index 43f5f585630..1f6568b737b 100644 --- a/source/particles/shortlived/src/G4ExcitedBaryonConstructor.cc +++ b/source/particles/shortlived/src/G4ExcitedBaryonConstructor.cc @@ -46,12 +46,7 @@ G4ExcitedBaryonConstructor::G4ExcitedBaryonConstructor(G4int nStates, G4int isoSpin) - : NumberOfStates(nStates), iIsoSpin(isoSpin), type("baryon"), - iConjugation(0), iGParity(0), leptonNumber(0), baryonNumber(1) -{ -} - -G4ExcitedBaryonConstructor::~G4ExcitedBaryonConstructor() + : NumberOfStates(nStates), iIsoSpin(isoSpin), type("baryon") { } @@ -102,7 +97,7 @@ void G4ExcitedBaryonConstructor::ConstructParticle(G4int idx) GetiSpin(idx), GetiParity(idx), iConjugation, iIsoSpin, iIso3, iGParity, type, leptonNumber, baryonNumber, GetEncoding( iIso3,idx), - false, 0.0, NULL + false, 0.0, nullptr ); ((G4ExcitedBaryons*)(particle))->SetMultipletName(GetMultipletName(idx)); particle->SetDecayTable(CreateDecayTable( name, iIso3, idx, false)); @@ -136,7 +131,7 @@ void G4ExcitedBaryonConstructor::ConstructAntiParticle(G4int idx) type, leptonNumber, -1*baryonNumber, -1*GetEncoding( iIso3,idx), - false, 0.0, NULL + false, 0.0, nullptr ); ((G4ExcitedBaryons*)(particle))->SetMultipletName(GetMultipletName(idx)); diff --git a/source/particles/shortlived/src/G4ExcitedBaryons.cc b/source/particles/shortlived/src/G4ExcitedBaryons.cc index ba3ba6f65f6..d47b1e891ce 100644 --- a/source/particles/shortlived/src/G4ExcitedBaryons.cc +++ b/source/particles/shortlived/src/G4ExcitedBaryons.cc @@ -57,6 +57,3 @@ G4ExcitedBaryons::G4ExcitedBaryons( lepton,baryon,encoding,stable,lifetime,decaytable ) { } - -G4ExcitedBaryons::~G4ExcitedBaryons() {} - diff --git a/source/particles/shortlived/src/G4ExcitedDeltaConstructor.cc b/source/particles/shortlived/src/G4ExcitedDeltaConstructor.cc index 2a9c3723149..999eaec62f7 100644 --- a/source/particles/shortlived/src/G4ExcitedDeltaConstructor.cc +++ b/source/particles/shortlived/src/G4ExcitedDeltaConstructor.cc @@ -50,10 +50,6 @@ G4ExcitedDeltaConstructor::G4ExcitedDeltaConstructor(): } -G4ExcitedDeltaConstructor::~G4ExcitedDeltaConstructor() -{ -} - G4int G4ExcitedDeltaConstructor::GetEncoding(G4int iIsoSpin3, G4int idxState) { G4int encoding; @@ -89,7 +85,7 @@ G4DecayTable* G4ExcitedDeltaConstructor::CreateDecayTable( G4bool fAnti) { // create decay table - G4DecayTable* decayTable = new G4DecayTable(); + auto decayTable = new G4DecayTable(); G4double br; if ( (br=bRatio[iState][NGamma]) >0.0) { diff --git a/source/particles/shortlived/src/G4ExcitedLambdaConstructor.cc b/source/particles/shortlived/src/G4ExcitedLambdaConstructor.cc index dd6ee5eaf70..9ff3d3e5ca7 100644 --- a/source/particles/shortlived/src/G4ExcitedLambdaConstructor.cc +++ b/source/particles/shortlived/src/G4ExcitedLambdaConstructor.cc @@ -49,10 +49,6 @@ G4ExcitedLambdaConstructor::G4ExcitedLambdaConstructor(): } -G4ExcitedLambdaConstructor::~G4ExcitedLambdaConstructor() -{ -} - G4DecayTable* G4ExcitedLambdaConstructor::CreateDecayTable( const G4String& parentName, G4int iIso3, @@ -60,7 +56,7 @@ G4DecayTable* G4ExcitedLambdaConstructor::CreateDecayTable( G4bool fAnti) { // create decay table - G4DecayTable* decayTable = new G4DecayTable(); + auto decayTable = new G4DecayTable(); G4double br; if ( (br=bRatio[iState][NK]) >0.0) { diff --git a/source/particles/shortlived/src/G4ExcitedMesonConstructor.cc b/source/particles/shortlived/src/G4ExcitedMesonConstructor.cc index 67972f9f251..9f2e39f98a3 100644 --- a/source/particles/shortlived/src/G4ExcitedMesonConstructor.cc +++ b/source/particles/shortlived/src/G4ExcitedMesonConstructor.cc @@ -45,11 +45,7 @@ G4ExcitedMesonConstructor::G4ExcitedMesonConstructor(G4int , G4int ) - : type("meson"), leptonNumber(0), baryonNumber(0) -{ -} - -G4ExcitedMesonConstructor::~G4ExcitedMesonConstructor() + : type("meson") { } @@ -125,7 +121,7 @@ void G4ExcitedMesonConstructor::ConstructMesons(G4int iState, G4int iType) iGParity[iState][iType], type, leptonNumber, baryonNumber, GetEncoding(iIso3, iState, iType), - false, 0.0, NULL + false, 0.0, nullptr ); if ( (iType==TEta) || (iType==TEtaPrime) || ((iType==TPi)&&(iIso3==0)) ) { @@ -254,7 +250,7 @@ G4DecayTable* G4ExcitedMesonConstructor::CreateDecayTable( G4int iType) { // create decay table - G4DecayTable* decayTable = new G4DecayTable(); + auto decayTable = new G4DecayTable(); G4double br; if ((iType==TK)||(iType==TAntiK)) { diff --git a/source/particles/shortlived/src/G4ExcitedMesons.cc b/source/particles/shortlived/src/G4ExcitedMesons.cc index 23f580bda0c..f1038087e6a 100644 --- a/source/particles/shortlived/src/G4ExcitedMesons.cc +++ b/source/particles/shortlived/src/G4ExcitedMesons.cc @@ -57,6 +57,3 @@ G4ExcitedMesons::G4ExcitedMesons( lepton,baryon,encoding,stable,lifetime,decaytable ) { } - -G4ExcitedMesons::~G4ExcitedMesons() {} - diff --git a/source/particles/shortlived/src/G4ExcitedNucleonConstructor.cc b/source/particles/shortlived/src/G4ExcitedNucleonConstructor.cc index 025c7c43691..030d68041a4 100644 --- a/source/particles/shortlived/src/G4ExcitedNucleonConstructor.cc +++ b/source/particles/shortlived/src/G4ExcitedNucleonConstructor.cc @@ -49,10 +49,6 @@ G4ExcitedNucleonConstructor::G4ExcitedNucleonConstructor(): } -G4ExcitedNucleonConstructor::~G4ExcitedNucleonConstructor() -{ -} - G4int G4ExcitedNucleonConstructor::GetEncoding(G4int iIsoSpin3, G4int idxState) { G4int encoding; @@ -89,7 +85,7 @@ G4DecayTable* G4ExcitedNucleonConstructor::CreateDecayTable( G4bool fAnti) { // create decay table - G4DecayTable* decayTable = new G4DecayTable(); + auto decayTable = new G4DecayTable(); G4double br; if ( (br=bRatio[iState][NGamma]) >0.0) { diff --git a/source/particles/shortlived/src/G4ExcitedSigmaConstructor.cc b/source/particles/shortlived/src/G4ExcitedSigmaConstructor.cc index f1f10db680b..f0136c9b2a1 100644 --- a/source/particles/shortlived/src/G4ExcitedSigmaConstructor.cc +++ b/source/particles/shortlived/src/G4ExcitedSigmaConstructor.cc @@ -49,10 +49,6 @@ G4ExcitedSigmaConstructor::G4ExcitedSigmaConstructor(): } -G4ExcitedSigmaConstructor::~G4ExcitedSigmaConstructor() -{ -} - G4DecayTable* G4ExcitedSigmaConstructor::CreateDecayTable( const G4String& parentName, G4int iIso3, @@ -61,7 +57,7 @@ G4DecayTable* G4ExcitedSigmaConstructor::CreateDecayTable( { // create decay table - G4DecayTable* decayTable = new G4DecayTable(); + auto decayTable = new G4DecayTable(); G4double br; if ( (br=bRatio[iState][NK]) >0.0) { diff --git a/source/particles/shortlived/src/G4ExcitedXiConstructor.cc b/source/particles/shortlived/src/G4ExcitedXiConstructor.cc index 29b477f84c5..59cca92206b 100644 --- a/source/particles/shortlived/src/G4ExcitedXiConstructor.cc +++ b/source/particles/shortlived/src/G4ExcitedXiConstructor.cc @@ -49,10 +49,6 @@ G4ExcitedXiConstructor::G4ExcitedXiConstructor(): } -G4ExcitedXiConstructor::~G4ExcitedXiConstructor() -{ -} - G4DecayTable* G4ExcitedXiConstructor::CreateDecayTable( const G4String& parentName, G4int iIso3, @@ -61,7 +57,7 @@ G4DecayTable* G4ExcitedXiConstructor::CreateDecayTable( { // create decay table - G4DecayTable* decayTable = new G4DecayTable(); + auto decayTable = new G4DecayTable(); G4double br; if ( (br=bRatio[iState][XiPi]) >0.0) { diff --git a/source/particles/shortlived/src/G4Gluons.cc b/source/particles/shortlived/src/G4Gluons.cc index 7ab246c95c3..c21fce5e188 100644 --- a/source/particles/shortlived/src/G4Gluons.cc +++ b/source/particles/shortlived/src/G4Gluons.cc @@ -58,6 +58,3 @@ G4Gluons::G4Gluons( { SetParticleSubType("gluon"); } - -G4Gluons::~G4Gluons() {} - diff --git a/source/particles/shortlived/src/G4Quarks.cc b/source/particles/shortlived/src/G4Quarks.cc index 7902323b491..0e35a360769 100644 --- a/source/particles/shortlived/src/G4Quarks.cc +++ b/source/particles/shortlived/src/G4Quarks.cc @@ -58,6 +58,3 @@ G4Quarks::G4Quarks( { SetParticleSubType("quark"); } - -G4Quarks::~G4Quarks() {} - diff --git a/source/particles/shortlived/src/G4ShortLivedConstructor.cc b/source/particles/shortlived/src/G4ShortLivedConstructor.cc index 9647766c563..c6ec922016e 100644 --- a/source/particles/shortlived/src/G4ShortLivedConstructor.cc +++ b/source/particles/shortlived/src/G4ShortLivedConstructor.cc @@ -46,15 +46,6 @@ G4bool G4ShortLivedConstructor::isConstructed = false; -G4ShortLivedConstructor::G4ShortLivedConstructor() -{ -} - -G4ShortLivedConstructor::~G4ShortLivedConstructor() -{ -} - - void G4ShortLivedConstructor::ConstructParticle() { if (!isConstructed){ @@ -85,7 +76,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, -1, 0, 0, 0, 0, "gluons", 0, 0, 21, - true, -1.0, NULL); + true, -1.0, nullptr); particle->SetAntiPDGEncoding(21); // u-quark particle = new G4Quarks( @@ -93,84 +84,84 @@ void G4ShortLivedConstructor::ConstructQuarks() 1, +1, 0, 1, +1, 0, "quarks", 0, 0, 2, - true, -1.0, NULL); + true, -1.0, nullptr); // d-quark particle = new G4Quarks( "d_quark", 4.7*MeV, 0.0*keV, -1./3.*eplus, 1, +1, 0, 1, -1, 0, "quarks", 0, 0, 1, - true, -1.0, NULL); + true, -1.0, nullptr); // s-quark particle = new G4Quarks( "s_quark", 96.0*MeV, 0.0*keV, -1./3.*eplus, 1, +1, 0, 0, 0, 0, "quarks", 0, 0, 3, - true, -1.0, NULL); + true, -1.0, nullptr); // c-quark particle = new G4Quarks( "c_quark", 1.28*GeV, 0.0*keV, +2./3.*eplus, 1, +1, 0, 0, 0, 0, "quarks", 0, 0, 4, - true, -1.0, NULL); + true, -1.0, nullptr); // b-quark particle = new G4Quarks( "b_quark", 4.18*GeV, 0.0*keV, -1./3.*eplus, 1, +1, 0, 0, 0, 0, "quarks", 0, 0, 5, - true, -1.0, NULL); + true, -1.0, nullptr); // t-quark particle = new G4Quarks( "t_quark", 173.1*GeV, 1.41*GeV, +2./3.*eplus, 1, +1, 0, 0, 0, 0, "quarks", 0, 0, 6, - true, -1.0, NULL); + true, -1.0, nullptr); // anti u-quark particle = new G4Quarks( "anti_u_quark", 2.2*MeV, 0.0*keV, -2./3.*eplus, 1, +1, 0, 1, -1, 0, "quarks", 0, 0, -2, - true, -1.0, NULL); + true, -1.0, nullptr); // anti d-quark particle = new G4Quarks( "anti_d_quark", 4.7*MeV, 0.0*keV, 1./3.*eplus, 1, +1, 0, 1, +1, 0, "quarks", 0, 0, -1, - true, -1.0, NULL); + true, -1.0, nullptr); // anti s-quark particle = new G4Quarks( "anti_s_quark", 96.0*MeV, 0.0*keV, 1./3.*eplus, 1, +1, 0, 0, 0, 0, "quarks", 0, 0, -3, - true, -1.0, NULL); + true, -1.0, nullptr); // anti c-quark particle = new G4Quarks( "anti_c_quark", 1.28*GeV, 0.0*keV, -2./3.*eplus, 1, +1, 0, 0, 0, 0, "quarks", 0, 0, -4, - true, -1.0, NULL); + true, -1.0, nullptr); // anti b-quark particle = new G4Quarks( "anti_b_quark", 4.18*GeV, 0.0*keV, 1./3.*eplus, 1, +1, 0, 0, 0, 0, "quarks", 0, 0, -5, - true, -1.0, NULL); + true, -1.0, nullptr); // anti t-quark particle = new G4Quarks( "anti_t_quark", 173.1*GeV, 1.41*GeV, -2./3.*eplus, 1, +1, 0, 0, 0, 0, "quarks", 0, 0, -6, - true, -1.0, NULL); + true, -1.0, nullptr); // uu1-Diquark particle = new G4DiQuarks( @@ -178,21 +169,21 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +2, 0, "diquarks", 0, 0, 2203, - true, -1.0, NULL); + true, -1.0, nullptr); // ud1-Diquark particle = new G4DiQuarks( "ud1_diquark", 7.0*MeV, 0.0*MeV, 1./3.*eplus, 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, 2103, - true, -1.0, NULL); + true, -1.0, nullptr); // dd1-Diquark particle = new G4DiQuarks( "dd1_diquark", 9.6*MeV, 0.0*MeV, -2./3.*eplus, 2, +1, 0, 2, -2, 0, "diquarks", 0, 0, 1103, - true, -1.0, NULL); + true, -1.0, nullptr); // ud0-Diquark particle = new G4DiQuarks( @@ -200,7 +191,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 0, +0, 0, "diquarks", 0, 0, 2101, - true, -1.0, NULL); + true, -1.0, nullptr); // sd1-Diquark particle = new G4DiQuarks( @@ -208,7 +199,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 1, -1, 0, "diquarks", 0, 0, 3103, - true, -1.0, NULL); + true, -1.0, nullptr); // su1-Diquark particle = new G4DiQuarks( @@ -216,7 +207,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 1, +1, 0, "diquarks", 0, 0, 3203, - true, -1.0, NULL); + true, -1.0, nullptr); // sd0-Diquark particle = new G4DiQuarks( @@ -224,7 +215,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 1, -1, 0, "diquarks", 0, 0, 3101, - true, -1.0, NULL); + true, -1.0, nullptr); // su0-Diquark particle = new G4DiQuarks( @@ -232,7 +223,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 1, +1, 0, "diquarks", 0, 0, 3201, - true, -1.0, NULL); + true, -1.0, nullptr); // anti uu1-Diquark particle = new G4DiQuarks( @@ -240,21 +231,21 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, -2, 0, "diquarks", 0, 0, -2203, - true, -1.0, NULL); + true, -1.0, nullptr); // anti ud1-Diquark particle = new G4DiQuarks( "anti_ud1_diquark", 7.0*MeV, 0.0*MeV, -1./3.*eplus, 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, -2103, - true, -1.0, NULL); + true, -1.0, nullptr); // anti dd1-Diquark particle = new G4DiQuarks( "anti_dd1_diquark", 9.6*MeV, 0.0*MeV, 2./3.*eplus, 2, +1, 0, 2, +2, 0, "diquarks", 0, 0, -1103, - true, -1.0, NULL); + true, -1.0, nullptr); // anti ud0-Diquark particle = new G4DiQuarks( @@ -262,7 +253,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 0, +0, 0, "diquarks", 0, 0, -2101, - true, -1.0, NULL); + true, -1.0, nullptr); // anti sd1-Diquark particle = new G4DiQuarks( @@ -270,7 +261,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 1, +1, 0, "diquarks", 0, 0, -3103, - true, -1.0, NULL); + true, -1.0, nullptr); // anti su1-Diquark particle = new G4DiQuarks( @@ -278,7 +269,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 1, -1, 0, "diquarks", 0, 0, -3203, - true, -1.0, NULL); + true, -1.0, nullptr); // anti sd0-Diquark particle = new G4DiQuarks( @@ -286,7 +277,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 1, +1, 0, "diquarks", 0, 0, -3101, - true, -1.0, NULL); + true, -1.0, nullptr); // anti su0-Diquark particle = new G4DiQuarks( @@ -294,14 +285,14 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 1, -1, 0, "diquarks", 0, 0, -3201, - true, -1.0, NULL); + true, -1.0, nullptr); // ss1-Diquark particle = new G4DiQuarks( "ss1_diquark", 198.0*MeV, 0.0*MeV, -2./3.*eplus, 2, +1, 0, 0, 0, 0, "diquarks", 0, 0, 3303, - true, -1.0, NULL); + true, -1.0, nullptr); // anti ss1-Diquark particle = new G4DiQuarks( @@ -309,7 +300,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 0, 0, 0, "diquarks", 0, 0, -3303, - true, -1.0, NULL); + true, -1.0, nullptr); // ----------- V. Uzhinsky October 2019: Add di-quarks having c and b quarks ---------------- // They have to be improved. @@ -320,7 +311,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 0, +0, 0, "diquarks", 0, 0, 4101, - true, -1.0, NULL); + true, -1.0, nullptr); // cd1-Diquark particle = new G4DiQuarks( @@ -328,7 +319,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, 4103, - true, -1.0, NULL); + true, -1.0, nullptr); // cu0-Diquark particle = new G4DiQuarks( @@ -336,7 +327,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 0, +0, 0, "diquarks", 0, 0, 4201, - true, -1.0, NULL); + true, -1.0, nullptr); // cu1-Diquark particle = new G4DiQuarks( @@ -344,7 +335,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, 4203, - true, -1.0, NULL); + true, -1.0, nullptr); // cs0-Diquark particle = new G4DiQuarks( @@ -352,7 +343,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 0, +0, 0, "diquarks", 0, 0, 4301, - true, -1.0, NULL); + true, -1.0, nullptr); // cs1-Diquark particle = new G4DiQuarks( @@ -360,7 +351,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, 4303, - true, -1.0, NULL); + true, -1.0, nullptr); // cc1-Diquark particle = new G4DiQuarks( @@ -368,7 +359,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, 4403, - true, -1.0, NULL); + true, -1.0, nullptr); //--------------------------------------------- @@ -378,7 +369,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 0, +0, 0, "diquarks", 0, 0, 5101, - true, -1.0, NULL); + true, -1.0, nullptr); // bd1-Diquark particle = new G4DiQuarks( @@ -386,7 +377,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, 5103, - true, -1.0, NULL); + true, -1.0, nullptr); // bu0-Diquark particle = new G4DiQuarks( @@ -394,7 +385,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 0, +0, 0, "diquarks", 0, 0, 5201, - true, -1.0, NULL); + true, -1.0, nullptr); // bu1-Diquark particle = new G4DiQuarks( @@ -402,7 +393,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, 5203, - true, -1.0, NULL); + true, -1.0, nullptr); // bs0-Diquark particle = new G4DiQuarks( @@ -410,7 +401,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 0, +0, 0, "diquarks", 0, 0, 5301, - true, -1.0, NULL); + true, -1.0, nullptr); // bs1-Diquark particle = new G4DiQuarks( @@ -418,7 +409,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, 5303, - true, -1.0, NULL); + true, -1.0, nullptr); // bc0-Diquark particle = new G4DiQuarks( @@ -426,7 +417,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 0, +0, 0, "diquarks", 0, 0, 5401, - true, -1.0, NULL); + true, -1.0, nullptr); // bc1-Diquark particle = new G4DiQuarks( @@ -434,7 +425,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, 5403, - true, -1.0, NULL); + true, -1.0, nullptr); // bb1-Diquark particle = new G4DiQuarks( @@ -442,7 +433,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, 5503, - true, -1.0, NULL); + true, -1.0, nullptr); //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -452,7 +443,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 0, +0, 0, "diquarks", 0, 0, -4101, - true, -1.0, NULL); + true, -1.0, nullptr); // anti cd1-Diquark particle = new G4DiQuarks( @@ -460,7 +451,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, -4103, - true, -1.0, NULL); + true, -1.0, nullptr); // anti cu0-Diquark particle = new G4DiQuarks( @@ -468,7 +459,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 0, +0, 0, "diquarks", 0, 0, -4201, - true, -1.0, NULL); + true, -1.0, nullptr); // anti cu1-Diquark particle = new G4DiQuarks( @@ -476,7 +467,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, -4203, - true, -1.0, NULL); + true, -1.0, nullptr); // anti cs0-Diquark particle = new G4DiQuarks( @@ -484,7 +475,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 0, +0, 0, "diquarks", 0, 0, -4301, - true, -1.0, NULL); + true, -1.0, nullptr); // anti cs1-Diquark particle = new G4DiQuarks( @@ -492,7 +483,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, -4303, - true, -1.0, NULL); + true, -1.0, nullptr); // anti cc1-Diquark particle = new G4DiQuarks( @@ -500,7 +491,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, -4403, - true, -1.0, NULL); + true, -1.0, nullptr); //--------------------------------------------- @@ -510,7 +501,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 0, +0, 0, "diquarks", 0, 0, -5101, - true, -1.0, NULL); + true, -1.0, nullptr); // anti bd1-Diquark particle = new G4DiQuarks( @@ -518,7 +509,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, -5103, - true, -1.0, NULL); + true, -1.0, nullptr); // anti bu0-Diquark particle = new G4DiQuarks( @@ -526,7 +517,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 0, +0, 0, "diquarks", 0, 0, -5201, - true, -1.0, NULL); + true, -1.0, nullptr); // anti bu1-Diquark particle = new G4DiQuarks( @@ -534,7 +525,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, -5203, - true, -1.0, NULL); + true, -1.0, nullptr); // anti bs0-Diquark particle = new G4DiQuarks( @@ -542,7 +533,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 0, +0, 0, "diquarks", 0, 0, -5301, - true, -1.0, NULL); + true, -1.0, nullptr); // anti bs1-Diquark particle = new G4DiQuarks( @@ -550,7 +541,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, -5303, - true, -1.0, NULL); + true, -1.0, nullptr); // anti bc0-Diquark particle = new G4DiQuarks( @@ -558,7 +549,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 0, +1, 0, 0, +0, 0, "diquarks", 0, 0, -5401, - true, -1.0, NULL); + true, -1.0, nullptr); // anti bc1-Diquark particle = new G4DiQuarks( @@ -566,7 +557,7 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, -5403, - true, -1.0, NULL); + true, -1.0, nullptr); // anti bb1-Diquark particle = new G4DiQuarks( @@ -574,11 +565,11 @@ void G4ShortLivedConstructor::ConstructQuarks() 2, +1, 0, 2, +0, 0, "diquarks", 0, 0, -5503, - true, -1.0, NULL); + true, -1.0, nullptr); //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - particle = NULL; + particle = nullptr; } #include "G4ExcitedNucleonConstructor.hh" @@ -641,7 +632,7 @@ void G4ShortLivedConstructor::ConstructBaryons() 3, +1, 0, 3, +3, 0, "baryon", 0, +1, 2224, - false, 0.0, NULL); + false, 0.0, nullptr); // set sub type particle->SetMultipletName("delta"); // create decay table @@ -660,7 +651,7 @@ void G4ShortLivedConstructor::ConstructBaryons() 3, +1, 0, 3, +1, 0, "baryon", 0, +1, 2214, - false, 0.0, NULL); + false, 0.0, nullptr); // set sub type particle->SetMultipletName("delta(1232)"); // create decay table @@ -690,7 +681,7 @@ void G4ShortLivedConstructor::ConstructBaryons() 3, +1, 0, 3, -1, 0, "baryon", 0, +1, 2114, - false, 0.0, NULL); + false, 0.0, nullptr); // set sub type particle->SetMultipletName("delta(1232)"); // create decay table @@ -718,7 +709,7 @@ void G4ShortLivedConstructor::ConstructBaryons() 3, +1, 0, 3, -3, 0, "baryon", 0, +1, 1114, - false, 0.0, NULL); + false, 0.0, nullptr); // set sub type particle->SetMultipletName("delta(1232)"); // create decay table @@ -739,7 +730,7 @@ void G4ShortLivedConstructor::ConstructBaryons() 3, +1, 0, 3, -3, 0, "baryon", 0, -1, -2224, - false, 0.0, NULL); + false, 0.0, nullptr); // set sub type particle->SetMultipletName("delta(1232)"); // create decay table @@ -758,7 +749,7 @@ void G4ShortLivedConstructor::ConstructBaryons() 3, +1, 0, 3, -1, 0, "baryon", 0, -1, -2214, - false, 0.0, NULL); + false, 0.0, nullptr); // set sub type particle->SetMultipletName("delta(1232)"); // create decay table @@ -781,7 +772,7 @@ void G4ShortLivedConstructor::ConstructBaryons() 3, +1, 0, 3, +1, 0, "baryon", 0, -1, -2114, - false, 0.0, NULL); + false, 0.0, nullptr); // set sub type particle->SetMultipletName("delta(1232)"); // create decay table @@ -804,7 +795,7 @@ void G4ShortLivedConstructor::ConstructBaryons() 3, +1, 0, 3, +3, 0, "baryon", 0, -1, -1114, - false, 0.0, NULL); + false, 0.0, nullptr); // set sub type particle->SetMultipletName("delta(1232)"); // create decay table @@ -841,7 +832,7 @@ void G4ShortLivedConstructor::ConstructMesons() 2, -1, -1, 0, +0, -1, "meson", 0, 0, 223, - false, 0.0, NULL); + false, 0.0, nullptr); particle->SetAntiPDGEncoding(223); // set sub type particle->SetMultipletName("omega"); @@ -875,7 +866,7 @@ void G4ShortLivedConstructor::ConstructMesons() 2, -1, -1, 0, +0, -1, "meson", 0, 0, 333, - false, 0.0, NULL); + false, 0.0, nullptr); particle->SetAntiPDGEncoding(333); // set sub type particle->SetMultipletName("phi"); @@ -906,7 +897,7 @@ void G4ShortLivedConstructor::ConstructMesons() 2, -1, -1, 2, +2, +1, "meson", 0, 0, 213, - false, 0.0, NULL); + false, 0.0, nullptr); // set sub type particle->SetMultipletName("rho"); // create decay table @@ -925,7 +916,7 @@ void G4ShortLivedConstructor::ConstructMesons() 2, -1, -1, 2, -2, +1, "meson", 0, 0, -213, - false, 0.0, NULL); + false, 0.0, nullptr); // set sub type particle->SetMultipletName("rho"); // create decay table @@ -944,7 +935,7 @@ void G4ShortLivedConstructor::ConstructMesons() 2, -1, -1, 2, 0, +1, "meson", 0, 0, 113, - false, 0.0*ns, NULL ); + false, 0.0*ns, nullptr ); particle->SetAntiPDGEncoding(113); // set sub type particle->SetMultipletName("rho"); @@ -964,7 +955,7 @@ void G4ShortLivedConstructor::ConstructMesons() 0, +1, +1, 2, +2, -1, "meson", 0, 0, 9000211, - false, 0.0, NULL); + false, 0.0, nullptr); // set sub type particle->SetMultipletName("a0(980)"); // create decay table @@ -983,7 +974,7 @@ void G4ShortLivedConstructor::ConstructMesons() 0, +1, +1, 2, -2, -1, "meson", 0, 0, -9000211, - false, 0.0, NULL); + false, 0.0, nullptr); // set sub type particle->SetMultipletName("a0(980)"); // create decay table @@ -1002,7 +993,7 @@ void G4ShortLivedConstructor::ConstructMesons() 0, +1, +1, 2, 0, -1, "meson", 0, 0, 9000111, - false, 0.0, NULL); + false, 0.0, nullptr); particle->SetAntiPDGEncoding(9000111); // set sub type particle->SetMultipletName("a0(980)"); @@ -1022,7 +1013,7 @@ void G4ShortLivedConstructor::ConstructMesons() 0, +1, +1, 0, 0, +1, "meson", 0, 0, 9000221, - false, 0.0, NULL); + false, 0.0, nullptr); particle->SetAntiPDGEncoding(9000221); // set sub type particle->SetMultipletName("f0(500)"); @@ -1043,7 +1034,7 @@ void G4ShortLivedConstructor::ConstructMesons() 0, +1, +1, 0, 0, +1, "meson", 0, 0, 9010221, - false, 0.0, NULL); + false, 0.0, nullptr); particle->SetAntiPDGEncoding(9010221); // set sub type particle->SetMultipletName("f0(980)"); @@ -1063,7 +1054,7 @@ void G4ShortLivedConstructor::ConstructMesons() 0, -1, +1, 0, 0, +1, "meson", 0, 0, 9020221, - false, 0.0, NULL); + false, 0.0, nullptr); particle->SetAntiPDGEncoding(9020221); // set sub type particle->SetMultipletName("eta(1405)"); @@ -1082,7 +1073,7 @@ void G4ShortLivedConstructor::ConstructMesons() 0, +1, +1, 0, 0, +1, "meson", 0, 0, 9030221, - false, 0.0, NULL); + false, 0.0, nullptr); particle->SetAntiPDGEncoding(9030221); // set sub type particle->SetMultipletName("f0(1500)"); @@ -1102,7 +1093,7 @@ void G4ShortLivedConstructor::ConstructMesons() 0, +1, +1, 0, 0, +1, "meson", 0, 0, 10331, - false, 0.0, NULL); + false, 0.0, nullptr); particle->SetAntiPDGEncoding(10331); // set sub type particle->SetMultipletName("f0(1710)"); @@ -1138,7 +1129,7 @@ void G4ShortLivedConstructor::ConstructMesons() 2, -1, 0, 1, +1, 0, "meson", 0, 0, 323, - false, 0.0, NULL); + false, 0.0, nullptr); // set sub type particle->SetMultipletName("k_star"); // create decay table @@ -1163,7 +1154,7 @@ void G4ShortLivedConstructor::ConstructMesons() 2, -1, 0, 1, -1, 0, "meson", 0, 0, 313, - false, 0.0, NULL); + false, 0.0, nullptr); // set sub type particle->SetMultipletName("k_star"); // create decay table @@ -1188,7 +1179,7 @@ void G4ShortLivedConstructor::ConstructMesons() 2, -1, 0, 1, +1, 0, "meson", 0, 0, -323, - false, 0.0, NULL); + false, 0.0, nullptr); // set sub type particle->SetMultipletName("k_star"); // create decay table @@ -1214,7 +1205,7 @@ void G4ShortLivedConstructor::ConstructMesons() 2, -1, 0, 1, -1, 0, "meson", 0, 0, -313, - false, 0.0, NULL); + false, 0.0, nullptr); // set sub type particle->SetMultipletName("k_star"); // create decay table diff --git a/source/particles/shortlived/src/G4VShortLivedParticle.cc b/source/particles/shortlived/src/G4VShortLivedParticle.cc index 48a15695bb2..4dacea93e2c 100644 --- a/source/particles/shortlived/src/G4VShortLivedParticle.cc +++ b/source/particles/shortlived/src/G4VShortLivedParticle.cc @@ -59,8 +59,6 @@ G4VShortLivedParticle::G4VShortLivedParticle(const G4String& aName, } -G4VShortLivedParticle::~G4VShortLivedParticle() {} - G4bool G4VShortLivedParticle::operator==(const G4VShortLivedParticle &right) const { return (this->GetParticleName() == right.GetParticleName()); diff --git a/source/particles/utils/GNUmakefile b/source/particles/utils/GNUmakefile deleted file mode 100644 index 5727da6a677..00000000000 --- a/source/particles/utils/GNUmakefile +++ /dev/null @@ -1,24 +0,0 @@ -# ---------------------------------------------------------------- -# GNUmakefile for particle management library. G.Cosmo, 4/4/97. -# ---------------------------------------------------------------- - -name := G4partutils - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4PARTICLES_ALLOC_EXPORT -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/particles/management/include - - -include $(G4INSTALL)/config/common.gmk diff --git a/source/particles/utils/include/G4HtmlPPReporter.hh b/source/particles/utils/include/G4HtmlPPReporter.hh index ebd3ef4ed24..b58769db49d 100644 --- a/source/particles/utils/include/G4HtmlPPReporter.hh +++ b/source/particles/utils/include/G4HtmlPPReporter.hh @@ -44,14 +44,7 @@ class G4HtmlPPReporter: public G4VParticlePropertyReporter { public: - //constructors - G4HtmlPPReporter(); - - //destructor - virtual ~G4HtmlPPReporter(); - - public: - virtual void Print(const G4String& option=""); + void Print(const G4String& option="") override; private: void SparseOption(const G4String& option); diff --git a/source/particles/utils/include/G4IsotopeMagneticMomentTable.hh b/source/particles/utils/include/G4IsotopeMagneticMomentTable.hh index 94c5fde137a..5456b1cebee 100644 --- a/source/particles/utils/include/G4IsotopeMagneticMomentTable.hh +++ b/source/particles/utils/include/G4IsotopeMagneticMomentTable.hh @@ -59,8 +59,8 @@ class G4IsotopeMagneticMomentTable : public G4VIsotopeTable // public: // - typedef std::vector G4IsotopeList; - typedef std::vector G4IsotopeNameList; + using G4IsotopeList = std::vector; + using G4IsotopeNameList = std::vector; public: // constructor @@ -74,7 +74,7 @@ protected: public: // destructor - virtual ~G4IsotopeMagneticMomentTable(); + ~G4IsotopeMagneticMomentTable() override; public: // with description @@ -84,9 +84,9 @@ public: // abstract base class G4VIstopeTable. We don't use this fuction in this // implementation, instead we use the next function. // - virtual G4IsotopeProperty* GetIsotope(G4int Z, G4int A, G4double E, - G4Ions::G4FloatLevelBase flb=G4Ions::G4FloatLevelBase::no_Float); - virtual G4IsotopeProperty* GetIsotopeByIsoLvl(G4int Z, G4int A, G4int lvl=0); + G4IsotopeProperty* GetIsotope(G4int Z, G4int A, G4double E, + G4Ions::G4FloatLevelBase flb=G4Ions::G4FloatLevelBase::no_Float) override; + G4IsotopeProperty* GetIsotopeByIsoLvl(G4int Z, G4int A, G4int lvl=0) override; // // again it will replace the pure virtual one in the abstract base class. // diff --git a/source/particles/utils/include/G4SimplePPReporter.hh b/source/particles/utils/include/G4SimplePPReporter.hh index 78325405faa..96ca7e71126 100644 --- a/source/particles/utils/include/G4SimplePPReporter.hh +++ b/source/particles/utils/include/G4SimplePPReporter.hh @@ -42,15 +42,8 @@ class G4SimplePPReporter: public G4VParticlePropertyReporter { - public: - //constructors - G4SimplePPReporter(); - - //destructor - virtual ~G4SimplePPReporter(); - public: - virtual void Print(const G4String& option=""); + void Print(const G4String& option="") override; }; diff --git a/source/particles/utils/include/G4TextPPReporter.hh b/source/particles/utils/include/G4TextPPReporter.hh index 302cb4ea195..72132482f02 100644 --- a/source/particles/utils/include/G4TextPPReporter.hh +++ b/source/particles/utils/include/G4TextPPReporter.hh @@ -43,14 +43,7 @@ class G4TextPPReporter: public G4VParticlePropertyReporter { public: - //constructors - G4TextPPReporter(); - - //destructor - virtual ~G4TextPPReporter(); - - public: - virtual void Print(const G4String& option=""); + void Print(const G4String& option="") override; protected: void SparseOption(const G4String& option); diff --git a/source/particles/utils/include/G4TextPPRetriever.hh b/source/particles/utils/include/G4TextPPRetriever.hh index 9436113e31e..a135ef3d068 100644 --- a/source/particles/utils/include/G4TextPPRetriever.hh +++ b/source/particles/utils/include/G4TextPPRetriever.hh @@ -45,14 +45,7 @@ class G4TextPPRetriever: public G4VParticlePropertyRetriever { public: - //constructors - G4TextPPRetriever(); - - //destructor - virtual ~G4TextPPRetriever(); - - public: - virtual void Retrieve(const G4String& option=""); + void Retrieve(const G4String& option="") override; protected: void SparseOption(const G4String& option); diff --git a/source/particles/utils/include/G4VParticlePropertyReporter.hh b/source/particles/utils/include/G4VParticlePropertyReporter.hh index 789e593133d..ef803c4cbc0 100644 --- a/source/particles/utils/include/G4VParticlePropertyReporter.hh +++ b/source/particles/utils/include/G4VParticlePropertyReporter.hh @@ -60,7 +60,7 @@ class G4VParticlePropertyReporter { return (this != &right); } public: - typedef std::vector G4PPDContainer; + using G4PPDContainer = std::vector; public: virtual G4bool FillList(G4String name); diff --git a/source/particles/utils/src/G4HtmlPPReporter.cc b/source/particles/utils/src/G4HtmlPPReporter.cc index 41b1b5d2162..7acc8b6e294 100644 --- a/source/particles/utils/src/G4HtmlPPReporter.cc +++ b/source/particles/utils/src/G4HtmlPPReporter.cc @@ -43,23 +43,14 @@ #include "G4Tokenizer.hh" #include - G4HtmlPPReporter::G4HtmlPPReporter():G4VParticlePropertyReporter() -{ - -} - - G4HtmlPPReporter::~G4HtmlPPReporter() -{ -} - void G4HtmlPPReporter::Print(const G4String& option) { SparseOption( option ); GenerateIndex(); - for (size_t i=0; i< pList.size(); i++){ - G4ParticleDefinition* particle = G4ParticleTable::GetParticleTable()->FindParticle( pList[i]->GetParticleName() ); + for (const auto & i : pList){ + G4ParticleDefinition* particle = G4ParticleTable::GetParticleTable()->FindParticle( i->GetParticleName() ); GeneratePropertyTable(particle); } } @@ -116,14 +107,14 @@ void G4HtmlPPReporter::SparseOption(const G4String& option) outFile << sTD << " " << eTD; outFile << eTR << G4endl;; - for (size_t i=0; i< pList.size(); i++){ - if (pList[i]->GetPDGEncoding()<0) continue; + for (const auto & i : pList){ + if (i->GetPDGEncoding()<0) continue; outFile << sTR << G4endl;; // column 1 : endcoding - outFile << sTD << pList[i]->GetPDGEncoding() << eTD << G4endl;; + outFile << sTD << i->GetPDGEncoding() << eTD << G4endl;; // column 2 : name - G4String name = pList[i]->GetParticleName(); + G4String name = i->GetParticleName(); G4String fname = name +".html"; // exception @@ -134,18 +125,18 @@ void G4HtmlPPReporter::SparseOption(const G4String& option) outFile << name << "" << eTD << G4endl; // column 3 mass - outFile << sTD << pList[i]->GetPDGMass()/GeV << eTD << G4endl; + outFile << sTD << i->GetPDGMass()/GeV << eTD << G4endl; // column 4 charge - outFile << sTD << pList[i]->GetPDGCharge()/eplus << eTD << G4endl; + outFile << sTD << i->GetPDGCharge()/eplus << eTD << G4endl; // column 5 life time - outFile << sTD << pList[i]->GetPDGLifeTime()/ns << eTD << G4endl; + outFile << sTD << i->GetPDGLifeTime()/ns << eTD << G4endl; // column 6 AntiParticle - if ( (pList[i]->GetAntiPDGEncoding()!= 0) && - (pList[i]->GetAntiPDGEncoding() != pList[i]->GetPDGEncoding() ) ) { - G4ParticleDefinition* anti_particle = G4ParticleTable::GetParticleTable()->FindParticle( pList[i]->GetAntiPDGEncoding() ); + if ( (i->GetAntiPDGEncoding()!= 0) && + (i->GetAntiPDGEncoding() != i->GetPDGEncoding() ) ) { + G4ParticleDefinition* anti_particle = G4ParticleTable::GetParticleTable()->FindParticle( i->GetAntiPDGEncoding() ); outFile << sTD << anti_particle->GetParticleName() << eTD << G4endl;; } @@ -300,7 +291,7 @@ void G4HtmlPPReporter::SparseOption(const G4String& option) // Decay Table G4DecayTable* dcyTable = particle->GetDecayTable(); - if (dcyTable != 0) { + if (dcyTable != nullptr) { outFile << "

    " << " Decay Table " << "

    " << G4endl; outFile << sTABLE << '"' << "80%" << '"' << " > " << G4endl; diff --git a/source/particles/utils/src/G4IsotopeMagneticMomentTable.cc b/source/particles/utils/src/G4IsotopeMagneticMomentTable.cc index ea2572738b4..5f2e7fbf19f 100644 --- a/source/particles/utils/src/G4IsotopeMagneticMomentTable.cc +++ b/source/particles/utils/src/G4IsotopeMagneticMomentTable.cc @@ -56,7 +56,7 @@ const G4double G4IsotopeMagneticMomentTable::nuclearMagneton = eplus*hbar_Planck G4IsotopeMagneticMomentTable::G4IsotopeMagneticMomentTable() :G4VIsotopeTable("MagneticMoment") { - if ( !std::getenv("G4IONMAGNETICMOMENT")) { + if ( std::getenv("G4IONMAGNETICMOMENT") == nullptr) { #ifdef G4VERBOSE if (GetVerboseLevel()>1) { G4cout << "G4IsotopeMagneticMomentTable::G4IsotopeMagneticMomentTable(): " @@ -108,7 +108,7 @@ G4IsotopeMagneticMomentTable::G4IsotopeMagneticMomentTable() >> ionLife >> ionLifeUnit >> ionJ >> ionMu; - G4IsotopeProperty* fProperty = new G4IsotopeProperty(); + auto fProperty = new G4IsotopeProperty(); // Set Isotope Property fProperty->SetAtomicNumber(ionZ); fProperty->SetAtomicMass(ionA); @@ -132,8 +132,8 @@ G4IsotopeMagneticMomentTable::G4IsotopeMagneticMomentTable() /////////////////////////////////////////////////////////////////////////////// G4IsotopeMagneticMomentTable::~G4IsotopeMagneticMomentTable() { - for (size_t i = 0 ; i< fIsotopeList.size(); i++) { - delete fIsotopeList[i]; + for (const auto & i : fIsotopeList) { + delete i; } fIsotopeList.clear(); } @@ -154,9 +154,7 @@ G4IsotopeMagneticMomentTable & G4IsotopeMagneticMomentTable::operator= (const G /////////////////////////////////////////////////////////////////////////////// G4bool G4IsotopeMagneticMomentTable::FindIsotope(G4IsotopeProperty* pP) { - for (size_t i = 0 ; i< fIsotopeList.size(); ++i) { - G4IsotopeProperty* fP = fIsotopeList[i]; - + for (const auto fP : fIsotopeList) { // check Z if ( fP->GetAtomicNumber() > pP->GetAtomicNumber()) { // Not Found @@ -194,11 +192,9 @@ G4IsotopeProperty* G4IsotopeMagneticMomentTable::GetIsotope(G4int Z, G4int A, G4double E, G4Ions::G4FloatLevelBase /*flb*/) { - G4IsotopeProperty* fProperty = 0; - for (size_t i = 0 ; i< fIsotopeList.size(); ++i) { - G4IsotopeProperty* fP = fIsotopeList[i]; - - // check Z + G4IsotopeProperty* fProperty = nullptr; + for (const auto fP : fIsotopeList) { + // check Z if ( fP->GetAtomicNumber() > Z) { // Not Found break; @@ -232,11 +228,9 @@ G4IsotopeProperty* G4IsotopeProperty* G4IsotopeMagneticMomentTable::GetIsotopeByIsoLvl(G4int Z, G4int A, G4int lvl) { - G4IsotopeProperty* fProperty = 0; - for (size_t i = 0 ; i< fIsotopeList.size(); ++i) { - G4IsotopeProperty* fP = fIsotopeList[i]; - - // check Z + G4IsotopeProperty* fProperty = nullptr; + for (const auto fP : fIsotopeList) { + // check Z if ( fP->GetAtomicNumber() > Z) { // Not Found break; diff --git a/source/particles/utils/src/G4SimplePPReporter.cc b/source/particles/utils/src/G4SimplePPReporter.cc index 75df25fb9c0..0a756aaa40f 100644 --- a/source/particles/utils/src/G4SimplePPReporter.cc +++ b/source/particles/utils/src/G4SimplePPReporter.cc @@ -36,21 +36,10 @@ #include "G4ios.hh" #include "globals.hh" -////////////////////////////// -G4SimplePPReporter::G4SimplePPReporter():G4VParticlePropertyReporter() -{ -} - -//////////////////////////// -G4SimplePPReporter::~G4SimplePPReporter() -{ -} - ///////////////////// void G4SimplePPReporter::Print(const G4String& ) { - for (size_t i=0; iPrint(); G4cout << G4endl; } diff --git a/source/particles/utils/src/G4TextPPReporter.cc b/source/particles/utils/src/G4TextPPReporter.cc index 3bec4963aab..87c760b7a13 100644 --- a/source/particles/utils/src/G4TextPPReporter.cc +++ b/source/particles/utils/src/G4TextPPReporter.cc @@ -44,23 +44,13 @@ #include #include -////////////////////////////// -G4TextPPReporter::G4TextPPReporter():G4VParticlePropertyReporter() -{ -} - -//////////////////////////// -G4TextPPReporter::~G4TextPPReporter() -{ -} - ///////////////////// void G4TextPPReporter::Print(const G4String& option) { SparseOption( option ); - for (size_t i=0; i< pList.size(); i++){ - G4ParticleDefinition* particle = G4ParticleTable::GetParticleTable()->FindParticle( pList[i]->GetParticleName() ); + for (const auto & i : pList){ + G4ParticleDefinition* particle = G4ParticleTable::GetParticleTable()->FindParticle( i->GetParticleName() ); GeneratePropertyTable(particle); } @@ -115,7 +105,7 @@ void G4TextPPReporter::GeneratePropertyTable(const G4ParticleDefinition* partic // Decay Table G4DecayTable* dcyTable = particle->GetDecayTable(); - if (dcyTable != 0) { + if (dcyTable != nullptr) { for (G4int i=0; i< dcyTable->entries(); i++){ G4VDecayChannel * channel = dcyTable->GetDecayChannel(i); // column 1 : BR diff --git a/source/particles/utils/src/G4TextPPRetriever.cc b/source/particles/utils/src/G4TextPPRetriever.cc index b705930a318..50f4a24a3db 100644 --- a/source/particles/utils/src/G4TextPPRetriever.cc +++ b/source/particles/utils/src/G4TextPPRetriever.cc @@ -44,16 +44,6 @@ #include #include -////////////////////////////// -G4TextPPRetriever::G4TextPPRetriever():G4VParticlePropertyRetriever() -{ -} - -//////////////////////////// -G4TextPPRetriever::~G4TextPPRetriever() -{ -} - ///////////////////// void G4TextPPRetriever::Retrieve(const G4String& option) { @@ -147,7 +137,7 @@ G4bool G4TextPPRetriever::ModifyPropertyTable(const G4ParticleDefinition* parti // Decay Table G4DecayTable* dcyTable = particle->GetDecayTable(); - if (dcyTable == 0) return true; + if (dcyTable == nullptr) return true; G4int idx =0; while (!inFile.eof() ) { // Loop checking, 09.08.2015, K.Kurashige diff --git a/source/particles/utils/src/G4VParticlePropertyReporter.cc b/source/particles/utils/src/G4VParticlePropertyReporter.cc index c1ffd104bba..4a27082535e 100644 --- a/source/particles/utils/src/G4VParticlePropertyReporter.cc +++ b/source/particles/utils/src/G4VParticlePropertyReporter.cc @@ -54,7 +54,7 @@ G4bool G4VParticlePropertyReporter::FillList(G4String name) { G4ParticlePropertyData* pData = pPropertyTable->GetParticleProperty(name); G4bool result = false; - if (pData != 0) { + if (pData != nullptr) { //the particle exists pList.push_back(pData); result = true; diff --git a/source/persistency/CMakeLists.txt b/source/persistency/CMakeLists.txt index 26677e11b80..264986d398b 100644 --- a/source/persistency/CMakeLists.txt +++ b/source/persistency/CMakeLists.txt @@ -1,10 +1,11 @@ # - G4persistency category build include(ascii/sources.cmake) -include(mctruth/sources.cmake) +geant4_add_category(G4geomtext MODULES G4geomtext) -geant4_add_category(G4persistency MODULES G4geomtext G4mctruth) +include(mctruth/sources.cmake) +geant4_add_category(G4mctruth MODULES G4mctruth) if(GEANT4_USE_GDML) include(gdml/sources.cmake) - geant4_category_modules(G4persistency G4gdml) + geant4_add_category(G4gdml MODULES G4gdml) endif() diff --git a/source/persistency/GNUmakefile b/source/persistency/GNUmakefile deleted file mode 100644 index 35f18dfb0ed..00000000000 --- a/source/persistency/GNUmakefile +++ /dev/null @@ -1,25 +0,0 @@ -# ----------------------------------------------------------------------- -# GNUmakefile for persistency library. Gabriele Cosmo, 16/11/96. -# ----------------------------------------------------------------------- - -name := G4persistency - -SUBDIRS := mctruth ascii -SUBLIBS = G4mctruth G4geomtext - -ifdef G4LIB_BUILD_GDML - SUBDIRS += gdml - SUBLIBS += G4gdml -endif - -GLOBLIBS = libG4run.lib libG4event.lib libG4tracking.lib -GLOBLIBS += libG4processes.lib libG4digits_hits.lib libG4track.lib -GLOBLIBS += libG4particles.lib libG4geometry.lib libG4materials.lib -GLOBLIBS += libG4graphics_reps.lib libG4intercoms.lib libG4global.lib - - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -include $(G4INSTALL)/config/globlib.gmk diff --git a/source/persistency/History b/source/persistency/History index 0de2915503f..d97721a5b57 100644 --- a/source/persistency/History +++ b/source/persistency/History @@ -6,6 +6,13 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2022-05-10 Ben Morgan (persistency-V11-01-01) +- Split build of G4persistency into G4mctruth, G4geomtext and (optional) G4gdml + libraries. + +## 2022-12-12 Ben Morgan (persistency-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-11-11 Gabriele Cosmo (persistency-V11-00-03) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/persistency/ascii/GNUmakefile b/source/persistency/ascii/GNUmakefile deleted file mode 100644 index c85d590cbc6..00000000000 --- a/source/persistency/ascii/GNUmakefile +++ /dev/null @@ -1,29 +0,0 @@ -# ----------------------------------------------------------------------- -# GNUmakefile for persistency library. Gabriele Cosmo, 16/11/96. -# ----------------------------------------------------------------------- - -name := G4geomtext - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/graphics_reps/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/geometry/solids/CSG/include \ - -I$(G4BASE)/geometry/solids/specific/include \ - -I$(G4BASE)/geometry/solids/Boolean/include \ - -I$(G4BASE)/geometry/divisions/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/persistency/gdml/GNUmakefile b/source/persistency/gdml/GNUmakefile deleted file mode 100644 index 326e28c9494..00000000000 --- a/source/persistency/gdml/GNUmakefile +++ /dev/null @@ -1,48 +0,0 @@ -# ----------------------------------------------------------------------- -# GNUmakefile for persistency library. Gabriele Cosmo, 16/11/96. -# ----------------------------------------------------------------------- - -name := G4gdml - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/digits_hits/digits/include \ - -I$(G4BASE)/digits_hits/detector/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/run/include \ - -I$(G4BASE)/event/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/tracking/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/solids/CSG/include \ - -I$(G4BASE)/geometry/solids/Boolean/include \ - -I$(G4BASE)/geometry/solids/specific/include \ - -I$(G4BASE)/geometry/divisions/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/graphics_reps/include - -ifdef G4LIB_USE_GDML - ifndef XERCESCROOT - @echo XERCESCROOT not defined! - endif -endif - -include $(G4INSTALL)/config/common.gmk diff --git a/source/persistency/gdml/History b/source/persistency/gdml/History index c36801878ac..5e0278198ab 100644 --- a/source/persistency/gdml/History +++ b/source/persistency/gdml/History @@ -6,11 +6,33 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-06-16 I. Hrivnacova (gdml-V11-00-06) +## 2023-06-16 I. Hrivnacova (gdml-V11-01-02) - Let G4ThreeVectorCompare obey the strict weak ordering requirements; which fixes failures in inserting elements in the std::map with this compare operator used in writing tessellated solid. +# 2023-05-31 Ben Morgan (gdml-V11-01-01) +- Allow setting of alternative grammar for schema validation via an environment + variable `G4GDML_SCHEMA_FILE`, which overrides the value set by `SetImportSchema` + if both are non-empty strings. +- Update checking of grammar and schema override to fail on missing schema, and + to force parser to ignore any schema set in the input GDML file. + +## 2023-04-26 Gabriele Cosmo (gdml-V11-01-00) +- Added possibility to set alternative grammar for schema validation while + reading a GDML file. This can be achieved by either calling the new method + SetImportSchema(..) from G4GDMLParser, providing the absolute path and file + name of the XML schema, or by using the new UI command: + /persistency/gdml/schema "[absolute_path]/schema_filename" + before importing the GDML file. + By setting a locally stored alternative grammar, it will instruct the parser + to ignore the default schema specified in the GDML file and therefore + no longer require access to the network for retrieving the schema. +- In G4GDMLWriteStructure::ExportSD(), use GetMasterSensitiveDetector() from + logical volume to retrieve the shadow pointer of the sensitive detector. + Fixes issue reported by CMS when exporting sensitive detector auxiliary + data in MT mode. + ## 2022-11-11 Gabriele Cosmo (gdml-V11-00-05) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/persistency/gdml/include/G4GDMLMessenger.hh b/source/persistency/gdml/include/G4GDMLMessenger.hh index 4e06ba4a539..6d75793713d 100644 --- a/source/persistency/gdml/include/G4GDMLMessenger.hh +++ b/source/persistency/gdml/include/G4GDMLMessenger.hh @@ -61,6 +61,7 @@ class G4GDMLMessenger : public G4UImessenger G4UIdirectory* persistencyDir = nullptr; G4UIdirectory* gdmlDir = nullptr; + G4UIcmdWithAString* ReaderSchema = nullptr; G4UIcmdWithAString* ReaderCmd = nullptr; G4UIcmdWithAString* WriterCmd = nullptr; G4UIcmdWithAString* TopVolCmd = nullptr; diff --git a/source/persistency/gdml/include/G4GDMLParser.hh b/source/persistency/gdml/include/G4GDMLParser.hh index 7115f694563..62cc9883dcf 100644 --- a/source/persistency/gdml/include/G4GDMLParser.hh +++ b/source/persistency/gdml/include/G4GDMLParser.hh @@ -125,6 +125,7 @@ class G4GDMLParser inline void SetEnergyCutsExport(G4bool); inline void SetSDExport(G4bool); inline void SetReverseSearch(G4bool); + inline void SetImportSchema(const G4String& path_and_filename); inline G4int GetMaxExportLevel() const; // Manage max number of levels inline void SetMaxExportLevel(G4int); // to export diff --git a/source/persistency/gdml/include/G4GDMLParser.icc b/source/persistency/gdml/include/G4GDMLParser.icc index b3e6e4b1f37..1cbac3ef9d3 100644 --- a/source/persistency/gdml/include/G4GDMLParser.icc +++ b/source/persistency/gdml/include/G4GDMLParser.icc @@ -249,6 +249,11 @@ inline void G4GDMLParser::Clear() reader->Clear(); } +inline void G4GDMLParser::SetImportSchema(const G4String& path_and_filename) +{ + reader->SetSchemaFile(path_and_filename); +} + // -------------------------------------------------------------------- // Methods for Writer // -------------------------------------------------------------------- diff --git a/source/persistency/gdml/include/G4GDMLRead.hh b/source/persistency/gdml/include/G4GDMLRead.hh index c72858c9e42..a0d3c9cc521 100644 --- a/source/persistency/gdml/include/G4GDMLRead.hh +++ b/source/persistency/gdml/include/G4GDMLRead.hh @@ -131,6 +131,11 @@ class G4GDMLRead // // Strip off pointers from entity IDs. + const G4String& GetSchemaFile() const; + void SetSchemaFile(const G4String& schemaFile); + // + // Set/Get alternative XML schema path/file for parsing validation. + void OverlapCheck(G4bool); // // Activate/de-activate surface check for overlaps (default is off). @@ -157,6 +162,7 @@ class G4GDMLRead G4bool validate = true; G4bool check = false; G4bool dostrip = true; + G4String schema = ""; private: diff --git a/source/persistency/gdml/src/G4GDMLMessenger.cc b/source/persistency/gdml/src/G4GDMLMessenger.cc index d2e33e04d1b..b73a71c2da7 100644 --- a/source/persistency/gdml/src/G4GDMLMessenger.cc +++ b/source/persistency/gdml/src/G4GDMLMessenger.cc @@ -52,6 +52,12 @@ G4GDMLMessenger::G4GDMLMessenger(G4GDMLParser* myPars) gdmlDir = new G4UIdirectory("/persistency/gdml/"); gdmlDir->SetGuidance("GDML parser and writer."); + ReaderSchema = new G4UIcmdWithAString("/persistency/gdml/schema", this); + ReaderSchema->SetGuidance("Set alternative GDML schema file for import validation."); + ReaderSchema->SetParameterName("schema_path_and_filename", false); + ReaderSchema->AvailableForStates(G4State_PreInit, G4State_Idle); + ReaderSchema->SetToBeBroadcasted(false); + ReaderCmd = new G4UIcmdWithAString("/persistency/gdml/read", this); ReaderCmd->SetGuidance("Read GDML file."); ReaderCmd->SetParameterName("filename", false); @@ -121,6 +127,7 @@ G4GDMLMessenger::G4GDMLMessenger(G4GDMLParser* myPars) // -------------------------------------------------------------------- G4GDMLMessenger::~G4GDMLMessenger() { + delete ReaderSchema; delete ReaderCmd; delete WriterCmd; delete ClearCmd; @@ -149,6 +156,11 @@ void G4GDMLMessenger::SetNewValue(G4UIcommand* command, G4String newValue) myParser->SetAddPointerToName(pFlag); } + if(command == ReaderSchema) + { + myParser->SetImportSchema(newValue); + } + if(command == ReaderCmd) { G4GeometryManager::GetInstance()->OpenGeometry(); diff --git a/source/persistency/gdml/src/G4GDMLRead.cc b/source/persistency/gdml/src/G4GDMLRead.cc index 35eb73e40b4..c7fbe65e6c0 100644 --- a/source/persistency/gdml/src/G4GDMLRead.cc +++ b/source/persistency/gdml/src/G4GDMLRead.cc @@ -38,6 +38,8 @@ #include "G4SolidStore.hh" #include "G4LogicalVolumeStore.hh" #include "G4PhysicalVolumeStore.hh" +#include "G4EnvironmentUtils.hh" +#include "G4Exception.hh" // -------------------------------------------------------------------- G4GDMLRead::G4GDMLRead() @@ -418,6 +420,18 @@ void G4GDMLRead::ExtensionRead(const xercesc::DOMElement* const) error_msg); } +// -------------------------------------------------------------------- +const G4String& G4GDMLRead::GetSchemaFile() const +{ + return schema; +} + +// -------------------------------------------------------------------- +void G4GDMLRead::SetSchemaFile(const G4String& schemaFile) +{ + schema = schemaFile; +} + // -------------------------------------------------------------------- void G4GDMLRead::Read(const G4String& fileName, G4bool validation, G4bool isModule, G4bool strip) @@ -442,6 +456,29 @@ void G4GDMLRead::Read(const G4String& fileName, G4bool validation, if(validate) { parser->setValidationScheme(xercesc::XercesDOMParser::Val_Always); + + // Load alternative schema path if specified by user in + // 1. environment variable, or + // 2. `schema` data member, or + // Will fall back to default validation otherwise (`xsi:noNamespaceSchemaLocation` in input file) + if(auto schemaPath = G4GetEnv("G4GDML_SCHEMA_FILE", schema); schemaPath != "") + { + // Pre-parse grammar to check it's present/valid + if(parser->loadGrammar(schemaPath.c_str(), xercesc::Grammar::SchemaGrammarType, true) != nullptr) + { + G4cout << "G4GDML: Loaded alternative schema URI: " << schemaPath << G4endl; + } + else + { + G4Exception("G4GDMLRead::Read()", + "InvalidGDMLSchemaFile", + FatalException, + G4String("Failed to load/parse schema file '" + schemaPath + "'").c_str()); + } + parser->useCachedGrammarInParse(true); + // If the schema has been set manually then we want to ignore path set in input file, if any + parser->setExternalNoNamespaceSchemaLocation(schemaPath.c_str()); + } } parser->setValidationSchemaFullChecking(validate); parser->setCreateEntityReferenceNodes(false); diff --git a/source/persistency/gdml/src/G4GDMLWriteStructure.cc b/source/persistency/gdml/src/G4GDMLWriteStructure.cc index bb0d07cbc24..252e4f1bf18 100644 --- a/source/persistency/gdml/src/G4GDMLWriteStructure.cc +++ b/source/persistency/gdml/src/G4GDMLWriteStructure.cc @@ -890,7 +890,7 @@ void G4GDMLWriteStructure::SetSDExport(G4bool fsd) // -------------------------------------------------------------------- void G4GDMLWriteStructure::ExportSD(const G4LogicalVolume* const lvol) { - G4VSensitiveDetector* sd = lvol->GetSensitiveDetector(); + G4VSensitiveDetector* sd = lvol->GetMasterSensitiveDetector(); if(sd != nullptr) { diff --git a/source/persistency/mctruth/GNUmakefile b/source/persistency/mctruth/GNUmakefile deleted file mode 100644 index cc5ef5c053d..00000000000 --- a/source/persistency/mctruth/GNUmakefile +++ /dev/null @@ -1,26 +0,0 @@ -# ----------------------------------------------------------------------- -# GNUmakefile for persistency library. Gabriele Cosmo, 16/11/96. -# ----------------------------------------------------------------------- - -name := G4mctruth - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/digits_hits/digits/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/run/include \ - -I$(G4BASE)/event/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/tracking/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/geometry/management/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/physics_lists/GNUmakefile b/source/physics_lists/GNUmakefile deleted file mode 100644 index 81347cdecdd..00000000000 --- a/source/physics_lists/GNUmakefile +++ /dev/null @@ -1,48 +0,0 @@ -# ---------------------------------------------------------------------- -# GNUmakefile for physicslists library, Gunter Folger 25-October 2006 -# ---------------------------------------------------------------------- - -name := G4physicslists - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -GLOBLIBS = libG4run.lib libG4event.lib -GLOBLIBS += libG4tracking.lib libG4processes.lib libG4digits_hits.lib -GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib -ifdef G4LIB_BUILD_EXPAT - GLOBLIBS += libG4expat.lib -endif - -include $(G4INSTALL)/config/architecture.gmk - -SUBDIRS = lists -SUBDIRS += builders -SUBDIRS += constructors/decay -SUBDIRS += constructors/electromagnetic -SUBDIRS += constructors/factory -SUBDIRS += constructors/gamma_lepto_nuclear -SUBDIRS += constructors/hadron_elastic -SUBDIRS += constructors/hadron_inelastic -SUBDIRS += constructors/ions -SUBDIRS += constructors/limiters -SUBDIRS += constructors/stopping -SUBDIRS += util - -SUBLIBS = G4phys_lists -SUBLIBS += G4phys_builders -SUBLIBS += G4phys_ctor_decay -SUBLIBS += G4phys_ctor_em -SUBLIBS += G4phys_ctor_factory -SUBLIBS += G4phys_ctor_glnuclear -SUBLIBS += G4phys_ctor_helastic -SUBLIBS += G4phys_ctor_hinelastic -SUBLIBS += G4phys_ctor_ions -SUBLIBS += G4phys_ctor_limiters -SUBLIBS += G4phys_ctor_stopping -SUBLIBS += G4physlist_util - -include $(G4INSTALL)/config/globlib.gmk diff --git a/source/physics_lists/History b/source/physics_lists/History index 27316e4ad1d..01e18506ed9 100644 --- a/source/physics_lists/History +++ b/source/physics_lists/History @@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2022-12-12 Ben Morgan (physics-lists-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-11-24 Gabriele Cosmo (physics-lists-V11-00-02) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/physics_lists/builders/GNUmakefile b/source/physics_lists/builders/GNUmakefile deleted file mode 100644 index 62358b92421..00000000000 --- a/source/physics_lists/builders/GNUmakefile +++ /dev/null @@ -1,91 +0,0 @@ -# --------------------------------------------------------------------------- -# GNUmakefile for physics_lists/builders library. Gunter Folger 25-Oct-2006. -# --------------------------------------------------------------------------- - -name := G4phys_builders - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4PROCESSES_EXPORT - -ifdef G4LIB_BUILD_EXPAT -CPPFLAGS += -I$(G4BASE)/externals/expat/include -endif - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/run/include \ - -I$(G4BASE)/physics_lists/constructors/factory/include \ - -I$(G4BASE)/physics_lists/util/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/transportation/include \ - -I$(G4BASE)/processes/decay/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/optical/include \ - -I$(G4BASE)/processes/electromagnetic/highenergy/include \ - -I$(G4BASE)/processes/electromagnetic/standard/include \ - -I$(G4BASE)/processes/electromagnetic/muons/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/electromagnetic/xrays/include \ - -I$(G4BASE)/processes/electromagnetic/lowenergy/include \ - -I$(G4BASE)/processes/electromagnetic/dna/management/include \ - -I$(G4BASE)/processes/electromagnetic/dna/molecules/management/include \ - -I$(G4BASE)/processes/electromagnetic/dna/molecules/types/include \ - -I$(G4BASE)/processes/electromagnetic/dna/models/include \ - -I$(G4BASE)/processes/electromagnetic/dna/processes/include \ - -I$(G4BASE)/processes/electromagnetic/dna/utils/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/stopping/include \ - -I$(G4BASE)/processes/hadronic/management/include \ - -I$(G4BASE)/processes/hadronic/processes/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/models/binary_cascade/include \ - -I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \ - -I$(G4BASE)/processes/hadronic/models/qmd/include \ - -I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fission/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/utils/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/incl_physics/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/interface/include \ - -I$(G4BASE)/processes/hadronic/models/lend/include \ - -I$(G4BASE)/processes/hadronic/models/lepto_nuclear/include \ - -I$(G4BASE)/processes/hadronic/models/particle_hp/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/management/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \ - -I$(G4BASE)/processes/hadronic/models/photolepton_hadron/muon_nuclear/include \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \ - -I$(G4BASE)/processes/hadronic/models/radioactive_decay/include \ - -I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/physics_lists/builders/History b/source/physics_lists/builders/History index 1566ba868a6..976abf3865d 100644 --- a/source/physics_lists/builders/History +++ b/source/physics_lists/builders/History @@ -6,11 +6,11 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-03-17 Alberto Ribon (phys-builders-V11-00-04) +## 2023-03-17 Alberto Ribon (phys-builders-V11-01-01) - G4HadronicBuilder : fixed bug in the method BuildKaonsFTFQGSP_BERT(). Thanks to Dmitri Konstantinov for reporting it. -## 2022-12-30 Vladimir Ivanchenko (phys-builders-V11-00-03) +## 2022-12-30 Vladimir Ivanchenko (phys-builders-V11-01-00) - Updated table of processes ## 2022-11-24 Gabriele Cosmo (phys-builders-V11-00-02) diff --git a/source/physics_lists/constructors/GNUmakefile b/source/physics_lists/constructors/GNUmakefile deleted file mode 100644 index 031e5b88c29..00000000000 --- a/source/physics_lists/constructors/GNUmakefile +++ /dev/null @@ -1,33 +0,0 @@ -# ---------------------------------------------------------------------- -# GNUmakefile for physicslists library, Gunter Folger 25-October 2006 -# ---------------------------------------------------------------------- - -name := G4physlist_ctor - -SUBDIRS = decay -SUBDIRS += electromagnetic -SUBDIRS += factory -SUBDIRS += gamma_lepto_nuclear -SUBDIRS += hadron_elastic -SUBDIRS += hadron_inelastic -SUBDIRS += ions -SUBDIRS += limiters -SUBDIRS += stopping - - - -SUBLIBS = G4phys_ctor_decay -SUBLIBS += G4phys_ctor_em -SUBLIBS += G4phys_ctor_factory -SUBLIBS += G4phys_ctor_glnuclear -SUBLIBS += G4phys_ctor_helastic -SUBLIBS += G4phys_ctor_hinelastic -SUBLIBS += G4phys_ctor_ions -SUBLIBS += G4phys_ctor_limiters -SUBLIBS += G4phys_ctor_stopping - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/globlib.gmk diff --git a/source/physics_lists/constructors/decay/GNUmakefile b/source/physics_lists/constructors/decay/GNUmakefile deleted file mode 100644 index ebc4c68c59d..00000000000 --- a/source/physics_lists/constructors/decay/GNUmakefile +++ /dev/null @@ -1,77 +0,0 @@ -# --------------------------------------------------------------------------- -# GNUmakefile for physics_lists/constructors/decay library. -# Gunter Folger 10-Jan-2012. -# --------------------------------------------------------------------------- - -name := G4phys_ctor_decay - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/run/include \ - -I$(G4BASE)/physics_lists/builders/include \ - -I$(G4BASE)/physics_lists/constructors/electromagnetic/include \ - -I$(G4BASE)/physics_lists/util/include \ - -I$(G4BASE)/physics_lists/constructors/factory/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/transportation/include \ - -I$(G4BASE)/processes/decay/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/electromagnetic/lowenergy/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/stopping/include \ - -I$(G4BASE)/processes/hadronic/management/include \ - -I$(G4BASE)/processes/hadronic/processes/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/models/binary_cascade/include \ - -I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \ - -I$(G4BASE)/processes/hadronic/models/qmd/include \ - -I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/utils/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/incl_physics/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/interface/include \ - -I$(G4BASE)/processes/hadronic/models/lend/include \ - -I$(G4BASE)/processes/hadronic/models/lepto_nuclear/include \ - -I$(G4BASE)/processes/hadronic/models/particle_hp/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/management/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \ - -I$(G4BASE)/processes/hadronic/models/photolepton_hadron/muon_nuclear/include \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \ - -I$(G4BASE)/processes/hadronic/models/radioactive_decay/include \ - -I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/physics_lists/constructors/decay/History b/source/physics_lists/constructors/decay/History index 6f4c2bf03eb..4f3da2e0a5c 100644 --- a/source/physics_lists/constructors/decay/History +++ b/source/physics_lists/constructors/decay/History @@ -1,12 +1,10 @@ # Category phys-ctor-decay History See `CONTRIBUTING.rst` for details of **required** info/format for each entry, -which **must** added in reverse chronological order (newest at the top). -It must **not** be used as a substitute for writing good git commit messages! +which **must** added in reverse chronological order (newest at the top). It must **not** +be used as a substitute for writing good git commit messages! -------------------------------------------------------------------------------- - -## 2023-01-11 Alberto Ribon (phys-ctor-decay-V11-00-04) +## 2023-01-11 Alberto Ribon (phys-ctor-decay-V11-01-00) - G4RadioactiveDecayPhysics : assigned the RadioactiveDecay process to G4Triton (which is the only light ion that decays). Note: before, triton did not have beta decay, i.e. it was wrongly diff --git a/source/physics_lists/constructors/electromagnetic/GNUmakefile b/source/physics_lists/constructors/electromagnetic/GNUmakefile deleted file mode 100644 index b030d395d33..00000000000 --- a/source/physics_lists/constructors/electromagnetic/GNUmakefile +++ /dev/null @@ -1,58 +0,0 @@ -# --------------------------------------------------------------------------- -# GNUmakefile for physics_lists/constructors/electromagnetic library. -# Gunter Folger 10-Jan-2012. -# --------------------------------------------------------------------------- - -name := G4phys_ctor_em - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/run/include \ - -I$(G4BASE)/physics_lists/builders/include \ - -I$(G4BASE)/physics_lists/constructors/factory/include \ - -I$(G4BASE)/physics_lists/util/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/management/include \ - -I$(G4BASE)/processes/hadronic/processes/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/transportation/include \ - -I$(G4BASE)/processes/decay/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/optical/include \ - -I$(G4BASE)/processes/electromagnetic/highenergy/include \ - -I$(G4BASE)/processes/electromagnetic/standard/include \ - -I$(G4BASE)/processes/electromagnetic/muons/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/electromagnetic/xrays/include \ - -I$(G4BASE)/processes/electromagnetic/lowenergy/include \ - -I$(G4BASE)/processes/electromagnetic/dna/management/include \ - -I$(G4BASE)/processes/electromagnetic/dna/molecules/management/include \ - -I$(G4BASE)/processes/electromagnetic/dna/molecules/types/include \ - -I$(G4BASE)/processes/electromagnetic/dna/models/include \ - -I$(G4BASE)/processes/electromagnetic/dna/processes/include \ - -I$(G4BASE)/processes/electromagnetic/dna/utils/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/physics_lists/constructors/electromagnetic/History b/source/physics_lists/constructors/electromagnetic/History index bb00bf75003..8aeb5c96910 100644 --- a/source/physics_lists/constructors/electromagnetic/History +++ b/source/physics_lists/constructors/electromagnetic/History @@ -6,7 +6,38 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2022-12-09 Vladimir Ivanchenko (phys-ctor-em-V11-00-36) +## 2023-04-06 Hoang Tran (phys-ctor-em-V11-01-07) +- Introduced G4ChemDissociationChannels and G4ChemDissociationChannels_option1 + +## 2023-03-08 Gabriele Cosmo (phys-ctor-em-V11-01-06) +- Fixed compilation warning on macOS/XCode for implicit type conversion + in G4EmModelActivator::FindOrAddProcess(). + +## 2023-03-04 Vladimir Ivanchenko (phys-ctor-em-V11-01-05) +- G4EmParticleList - added method EmChargedPartNames(), which returns a minimal + list of charged EM particles +- G4EmModelActivator - fix #2530 - single scattering per region is implemented + by addition of extra sngle scattering process, which is active inside this + region, and not active outside; multiple scattering and single scattering + processes for a given charged particle are disabled to this region + +## 2023-02-27 Vladimir Ivanchenko (phys-ctor-em-V11-01-04) +- G4EmModelActivator - attempt to fix #2530 - single scattering per region + +## 2023-02-24 Vladimir Ivanchenko (phys-ctor-em-V11-01-03) +- G4GammaGeneralProcess - added method GetGammaNuclear() useful for testing + +## 2023-02-21 Vladimir Ivanchenko (phys-ctor-em-V11-01-02) +- G4EmBuilder, G4EmStandardPhysicsSS - use new constructor for + the G4CoulombScattering process +- G4EmModelActivator - use new constructor for the G4CoulombScattering process, + allow add G4EmStandardPhysicsSS on top of G4EmStandardPhysics_option3 + +## 2023-02-16 Vladimir Ivanchenko (phys-ctor-em-V11-01-01) +- G4EmBuilder, G4EmModelActivator, G4EmStandardPhysicsSS - fix #2530, + single scattering model definition per region for e+, e-, and light hadrons + +## 2022-12-09 Vladimir Ivanchenko (phys-ctor-em-V11-01-00) - G4GammaGeneralProcess - in all cases select sub-process (fix problem #2521) ## 2022-11-24 Gabriele Cosmo (phys-ctor-em-V11-00-35) diff --git a/source/physics_lists/constructors/electromagnetic/include/G4ChemDissociationChannels.hh b/source/physics_lists/constructors/electromagnetic/include/G4ChemDissociationChannels.hh new file mode 100644 index 00000000000..7a4ed52961f --- /dev/null +++ b/source/physics_lists/constructors/electromagnetic/include/G4ChemDissociationChannels.hh @@ -0,0 +1,42 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// Geant4 class G4ChemDissociationChannels +// +// Author H. Tran 16.12.2022 +// + +#ifndef G4ChemDissociationChannels_h +#define G4ChemDissociationChannels_h 1 + +class G4ChemDissociationChannels{ + public: + ~G4ChemDissociationChannels() = default; + static void ConstructDissociationChannels(); + static void ConstructMolecule(); +}; + +#endif // G4ChemDissociationChannels_h diff --git a/source/physics_lists/constructors/electromagnetic/include/G4ChemDissociationChannels_option1.hh b/source/physics_lists/constructors/electromagnetic/include/G4ChemDissociationChannels_option1.hh new file mode 100644 index 00000000000..d0da9c284d8 --- /dev/null +++ b/source/physics_lists/constructors/electromagnetic/include/G4ChemDissociationChannels_option1.hh @@ -0,0 +1,42 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// Geant4 class G4ChemDissociationChannels +// +// H. Tran 16.12.2022 +// + +#ifndef G4ChemDissociationChannels_option1_h +#define G4ChemDissociationChannels_option1_h 1 + +class G4ChemDissociationChannels_option1{ + public: + ~G4ChemDissociationChannels_option1() = default; + static void ConstructDissociationChannels(); + static void ConstructMolecule(); +}; + +#endif diff --git a/source/physics_lists/constructors/electromagnetic/include/G4EmDNAChemistry.hh b/source/physics_lists/constructors/electromagnetic/include/G4EmDNAChemistry.hh index 24263bbd6fb..d3dde461cfe 100644 --- a/source/physics_lists/constructors/electromagnetic/include/G4EmDNAChemistry.hh +++ b/source/physics_lists/constructors/electromagnetic/include/G4EmDNAChemistry.hh @@ -32,26 +32,19 @@ class G4DNAMolecularReactionTable; -class G4EmDNAChemistry : public G4VUserChemistryList, - public G4VPhysicsConstructor +class G4EmDNAChemistry : public G4VUserChemistryList, public G4VPhysicsConstructor { + public: + G4EmDNAChemistry(); + ~G4EmDNAChemistry() override = default; -public: - - explicit G4EmDNAChemistry(); - virtual ~G4EmDNAChemistry(); - - virtual void ConstructParticle() - { - ConstructMolecule(); - } - virtual void ConstructMolecule(); - virtual void ConstructProcess(); - - virtual void ConstructDissociationChannels(); - virtual void ConstructReactionTable(G4DNAMolecularReactionTable* reactionTable); - virtual void ConstructTimeStepModel(G4DNAMolecularReactionTable* reactionTable); + void ConstructParticle() override { ConstructMolecule(); } + void ConstructMolecule() override; + void ConstructProcess() override; + void ConstructDissociationChannels() override; + void ConstructReactionTable(G4DNAMolecularReactionTable* reactionTable) override; + void ConstructTimeStepModel(G4DNAMolecularReactionTable* reactionTable) override; }; #endif diff --git a/source/physics_lists/constructors/electromagnetic/include/G4EmDNAChemistry_option1.hh b/source/physics_lists/constructors/electromagnetic/include/G4EmDNAChemistry_option1.hh index b5a84b632e3..a6a667b0a2a 100644 --- a/source/physics_lists/constructors/electromagnetic/include/G4EmDNAChemistry_option1.hh +++ b/source/physics_lists/constructors/electromagnetic/include/G4EmDNAChemistry_option1.hh @@ -32,26 +32,22 @@ class G4DNAMolecularReactionTable; -class G4EmDNAChemistry_option1 : public G4VUserChemistryList, - public G4VPhysicsConstructor +class G4EmDNAChemistry_option1 : public G4VUserChemistryList, public G4VPhysicsConstructor { + public: + G4EmDNAChemistry_option1(); + ~G4EmDNAChemistry_option1() override = default; -public: - - explicit G4EmDNAChemistry_option1(); - virtual ~G4EmDNAChemistry_option1(); - - virtual void ConstructParticle() + void ConstructParticle() override { ConstructMolecule(); } - virtual void ConstructMolecule(); - virtual void ConstructProcess(); - - virtual void ConstructDissociationChannels(); - virtual void ConstructReactionTable(G4DNAMolecularReactionTable* reactionTable); - virtual void ConstructTimeStepModel(G4DNAMolecularReactionTable* reactionTable); + void ConstructMolecule() override; + void ConstructProcess() override; + void ConstructDissociationChannels() override; + void ConstructReactionTable(G4DNAMolecularReactionTable* reactionTable) override; + void ConstructTimeStepModel(G4DNAMolecularReactionTable* reactionTable) override; }; #endif diff --git a/source/physics_lists/constructors/electromagnetic/include/G4EmDNAChemistry_option2.hh b/source/physics_lists/constructors/electromagnetic/include/G4EmDNAChemistry_option2.hh index 12dbdaa45a0..47add5ba68a 100644 --- a/source/physics_lists/constructors/electromagnetic/include/G4EmDNAChemistry_option2.hh +++ b/source/physics_lists/constructors/electromagnetic/include/G4EmDNAChemistry_option2.hh @@ -34,24 +34,20 @@ class G4MolecularConfiguration; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -class G4EmDNAChemistry_option2 - : public G4VUserChemistryList - , public G4VPhysicsConstructor +class G4EmDNAChemistry_option2 : public G4VUserChemistryList, public G4VPhysicsConstructor { -public: - G4EmDNAChemistry_option2(); - virtual ~G4EmDNAChemistry_option2() override; + public: + G4EmDNAChemistry_option2(); + ~G4EmDNAChemistry_option2() override = default; - void ConstructParticle() override - { - ConstructMolecule(); - } - void ConstructMolecule() override; - void ConstructProcess() override; + void ConstructParticle() override + { + ConstructMolecule(); + } + void ConstructMolecule() override; + void ConstructProcess() override; - void ConstructDissociationChannels() override; - void ConstructReactionTable( - G4DNAMolecularReactionTable* pTable) override; - void ConstructTimeStepModel( - G4DNAMolecularReactionTable* pTable) override; + void ConstructDissociationChannels() override; + void ConstructReactionTable(G4DNAMolecularReactionTable* pTable) override; + void ConstructTimeStepModel(G4DNAMolecularReactionTable* pTable) override; }; diff --git a/source/physics_lists/constructors/electromagnetic/include/G4EmDNAChemistry_option3.hh b/source/physics_lists/constructors/electromagnetic/include/G4EmDNAChemistry_option3.hh index 3b91e97e24f..72126187654 100644 --- a/source/physics_lists/constructors/electromagnetic/include/G4EmDNAChemistry_option3.hh +++ b/source/physics_lists/constructors/electromagnetic/include/G4EmDNAChemistry_option3.hh @@ -47,18 +47,18 @@ class G4EmDNAChemistry_option3 : public G4VUserChemistryList, public: G4EmDNAChemistry_option3(); - virtual ~G4EmDNAChemistry_option3(); + ~G4EmDNAChemistry_option3() override = default; - virtual void ConstructParticle() + void ConstructParticle() override { ConstructMolecule(); } - virtual void ConstructMolecule(); - virtual void ConstructProcess(); + void ConstructMolecule() override; + void ConstructProcess() override; - virtual void ConstructDissociationChannels(); - virtual void ConstructReactionTable(G4DNAMolecularReactionTable* reactionTable); - virtual void ConstructTimeStepModel(G4DNAMolecularReactionTable* reactionTable); + void ConstructDissociationChannels() override; + void ConstructReactionTable(G4DNAMolecularReactionTable* reactionTable) override; + void ConstructTimeStepModel(G4DNAMolecularReactionTable* reactionTable) override; inline void SetTimeStepModel(const TimeStepModel& model) { fTimeStepModel = model; diff --git a/source/physics_lists/constructors/electromagnetic/include/G4EmModelActivator.hh b/source/physics_lists/constructors/electromagnetic/include/G4EmModelActivator.hh index 02b4c59b2f0..ed2cf090d95 100644 --- a/source/physics_lists/constructors/electromagnetic/include/G4EmModelActivator.hh +++ b/source/physics_lists/constructors/electromagnetic/include/G4EmModelActivator.hh @@ -54,6 +54,7 @@ class G4ProcessManager; class G4ParticleDefinition; class G4EmConfigurator; class G4VMscModel; +class G4VEmProcess; class G4EmModelActivator { @@ -72,7 +73,7 @@ private: void ActivateEmOptions(); - void FindOrAddProcess(const G4ParticleDefinition*, const G4String&); + G4VEmProcess* FindOrAddProcess(const G4ParticleDefinition*, const G4String&); void AddStandardScattering(const G4ParticleDefinition*, G4EmConfigurator*, G4VMscModel*, const G4String&, diff --git a/source/physics_lists/constructors/electromagnetic/include/G4EmParticleList.hh b/source/physics_lists/constructors/electromagnetic/include/G4EmParticleList.hh index 854f2a1a5bc..2690722f8fc 100644 --- a/source/physics_lists/constructors/electromagnetic/include/G4EmParticleList.hh +++ b/source/physics_lists/constructors/electromagnetic/include/G4EmParticleList.hh @@ -53,13 +53,17 @@ public: explicit G4EmParticleList(); - ~G4EmParticleList(); + ~G4EmParticleList() = default; + // list of names of main EM particles const std::vector& PartNames() const; + // minimal list of names of charged particles + const std::vector& EmChargedPartNames() const; + private: - std::vector pNames; - + std::vector pNames; + std::vector cNames; }; #endif diff --git a/source/physics_lists/constructors/electromagnetic/include/G4GammaGeneralProcess.hh b/source/physics_lists/constructors/electromagnetic/include/G4GammaGeneralProcess.hh index f551350c6e2..02df509cdc1 100644 --- a/source/physics_lists/constructors/electromagnetic/include/G4GammaGeneralProcess.hh +++ b/source/physics_lists/constructors/electromagnetic/include/G4GammaGeneralProcess.hh @@ -118,17 +118,17 @@ public: const G4String& directory, G4bool ascii) override; - // Temporary method - const G4String& GetSubProcessName() const; + // Return sub-process limiting current step + const G4VProcess* GetCreatorProcess() const override; + inline const G4VProcess* GetSelectedProcess() const; - // Temporary method + // Temporary methods + const G4String& GetSubProcessName() const; G4int GetSubProcessSubType() const; G4VEmProcess* GetEmProcess(const G4String& name) override; - inline const G4VProcess* GetSelectedProcess() const; - - const G4VProcess* GetCreatorProcess() const override; + inline G4HadronicProcess* GetGammaNuclear() const; // hide copy constructor and assignment operator G4GammaGeneralProcess(G4GammaGeneralProcess &) = delete; @@ -231,6 +231,14 @@ inline const G4VProcess* G4GammaGeneralProcess::GetSelectedProcess() const return selectedProc; } + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +inline G4HadronicProcess* G4GammaGeneralProcess::GetGammaNuclear() const +{ + return theGammaNuclear; +} + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... #endif diff --git a/source/physics_lists/constructors/electromagnetic/sources.cmake b/source/physics_lists/constructors/electromagnetic/sources.cmake index 5ce7898c0c0..d8e29dc4f35 100644 --- a/source/physics_lists/constructors/electromagnetic/sources.cmake +++ b/source/physics_lists/constructors/electromagnetic/sources.cmake @@ -39,6 +39,8 @@ geant4_add_module(G4phys_ctor_em G4EmStandardPhysics_option4.hh G4GammaGeneralProcess.hh G4OpticalPhysics.hh + G4ChemDissociationChannels.hh + G4ChemDissociationChannels_option1.hh SOURCES G4EmBuilder.cc G4EmDNABuilder.cc @@ -75,7 +77,9 @@ geant4_add_module(G4phys_ctor_em G4EmStandardPhysics_option3.cc G4EmStandardPhysics_option4.cc G4GammaGeneralProcess.cc - G4OpticalPhysics.cc) + G4OpticalPhysics.cc + G4ChemDissociationChannels.cc + G4ChemDissociationChannels_option1.cc) geant4_module_link_libraries(G4phys_ctor_em PUBLIC diff --git a/source/physics_lists/constructors/electromagnetic/src/G4ChemDissociationChannels.cc b/source/physics_lists/constructors/electromagnetic/src/G4ChemDissociationChannels.cc new file mode 100644 index 00000000000..f004fe6c023 --- /dev/null +++ b/source/physics_lists/constructors/electromagnetic/src/G4ChemDissociationChannels.cc @@ -0,0 +1,319 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// Geant4 class G4ChemDissociationChannels +// +// Author H. Tran 16.12.2022 +// + +#include "G4ChemDissociationChannels.hh" + +#include "G4DNAWaterDissociationDisplacer.hh" +#include "G4DNAWaterExcitationStructure.hh" +#include "G4Electron_aq.hh" +#include "G4H2.hh" +#include "G4H2O.hh" +#include "G4H2O2.hh" +#include "G4H3O.hh" +#include "G4Hydrogen.hh" +#include "G4MolecularConfiguration.hh" +#include "G4MoleculeTable.hh" +#include "G4OH.hh" +#include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void G4ChemDissociationChannels::ConstructMolecule() +{ + // Create the definition + G4H2O::Definition(); + G4Hydrogen::Definition(); + G4H3O::Definition(); + G4OH::Definition(); + G4Electron_aq::Definition(); + G4H2O2::Definition(); + G4H2::Definition(); + auto molTable = G4MoleculeTable::Instance(); + + molTable->CreateConfiguration("H3Op", G4H3O::Definition()); + G4MolecularConfiguration* OHm = + molTable->CreateConfiguration("OHm", // just a tag to store and retrieve + // from G4MoleculeTable + G4OH::Definition(), + -1, // charge + 5.0e-9 * (m2 / s)); + OHm->SetMass(17.0079 * g / Avogadro * c_squared); + molTable->CreateConfiguration("OH", G4OH::Definition()); + molTable->CreateConfiguration("e_aq", G4Electron_aq::Definition()); + molTable->CreateConfiguration("H", G4Hydrogen::Definition()); + molTable->CreateConfiguration("H2", G4H2::Definition()); + molTable->CreateConfiguration("H2O2", G4H2O2::Definition()); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4ChemDissociationChannels::ConstructDissociationChannels() +{ + //----------------------------------- + // Get the molecular configuration + auto molTable = G4MoleculeTable::Instance(); + G4MolecularConfiguration* OH = molTable->GetConfiguration("OH"); + G4MolecularConfiguration* OHm = molTable->GetConfiguration("OHm"); + G4MolecularConfiguration* e_aq = molTable->GetConfiguration("e_aq"); + G4MolecularConfiguration* H2 = molTable->GetConfiguration("H2"); + G4MolecularConfiguration* H3O = molTable->GetConfiguration("H3Op"); + G4MolecularConfiguration* H = molTable->GetConfiguration("H"); + + //------------------------------------- + // Define the decay channels + G4MoleculeDefinition* water = G4H2O::Definition(); + G4MolecularDissociationChannel* decCh1; + G4MolecularDissociationChannel* decCh2; + + auto occ = new G4ElectronOccupancy(*(water->GetGroundStateElectronOccupancy())); + + ////////////////////////////////////////////////////////// + // EXCITATIONS // + ////////////////////////////////////////////////////////// + G4DNAWaterExcitationStructure waterExcitation; + //-------------------------------------------------------- + //---------------Excitation on the fifth layer------------ + + decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relax"); + decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociDecay"); + // Decay 1 : OH + H + decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0)); + decCh1->SetProbability(0.35); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::NoDisplacement); + + decCh2->AddProduct(OH); + decCh2->AddProduct(H); + decCh2->SetProbability(0.65); + decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay); + + // water->AddExcitedState("A^1B_1"); + occ->RemoveElectron(4, 1); // this is the transition form ground state to + occ->AddElectron(5, 1); // the first unoccupied orbital: A^1B_1 + + water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ); + water->AddDecayChannel("A^1B_1", decCh1); + water->AddDecayChannel("A^1B_1", decCh2); + + //-------------------------------------------------------- + //---------------Excitation on the fourth layer----------- + decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relax_Channel"); + decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociDecay"); + auto decCh3 = new G4MolecularDissociationChannel("B^1A_1_AutoIoni_Channel"); + + // Decay 1 : energy + decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1)); + decCh1->SetProbability(0.3); + + // Decay 2 : 2OH + H_2 + decCh2->AddProduct(H2); + decCh2->AddProduct(OH); + decCh2->AddProduct(OH); + decCh2->SetProbability(0.15); + decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay); + + // Decay 3 : OH + H_3Op + e_aq + decCh3->AddProduct(OH); + decCh3->AddProduct(H3O); + decCh3->AddProduct(e_aq); + decCh3->SetProbability(0.55); + decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(3); // this is the transition form ground state to + occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1 + + water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ); + water->AddDecayChannel("B^1A_1", decCh1); + water->AddDecayChannel("B^1A_1", decCh2); + water->AddDecayChannel("B^1A_1", decCh3); + + //------------------------------------------------------- + //-------------------Excitation of 3rd layer----------------- + decCh1 = new G4MolecularDissociationChannel("Exc3rdLayer_AutoIoni_Channel"); + decCh2 = new G4MolecularDissociationChannel("Exc3rdLayer_Relax_Channel"); + + // Decay channel 1 : : OH + H_3Op + e_aq + decCh1->AddProduct(OH); + decCh1->AddProduct(H3O); + decCh1->AddProduct(e_aq); + + decCh1->SetProbability(0.5); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); + + // Decay channel 2 : energy + decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2)); + decCh2->SetProbability(0.5); + + // Electronic configuration of this decay + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(2, 1); + occ->AddElectron(5, 1); + + // Configure the water molecule + water->NewConfigurationWithElectronOccupancy("Exci3rdLayer", *occ); + water->AddDecayChannel("Exci3rdLayer", decCh1); + water->AddDecayChannel("Exci3rdLayer", decCh2); + + //------------------------------------------------------- + //-------------------Excitation of 2nd layer----------------- + decCh1 = new G4MolecularDissociationChannel("Exc2ndLayer_AutoIoni_Channel"); + decCh2 = new G4MolecularDissociationChannel("Exc2ndLayer_Relax_Channel"); + + // Decay Channel 1 : : OH + H_3Op + e_aq + decCh1->AddProduct(OH); + decCh1->AddProduct(H3O); + decCh1->AddProduct(e_aq); + + decCh1->SetProbability(0.5); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); + + // Decay channel 2 : energy + decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3)); + decCh2->SetProbability(0.5); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(1, 1); + occ->AddElectron(5, 1); + + water->NewConfigurationWithElectronOccupancy("Exci2ndLayer", *occ); + water->AddDecayChannel("Exci2ndLayer", decCh1); + water->AddDecayChannel("Exci2ndLayer", decCh2); + + //------------------------------------------------------- + //-------------------Excitation of 1st layer----------------- + decCh1 = new G4MolecularDissociationChannel("Exci1stLayer_AutoIoni_Channel"); + decCh2 = new G4MolecularDissociationChannel("Exci1stLayer_Relax_Channel"); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(0, 1); + occ->AddElectron(5, 1); + + // Decay Channel 1 : : OH + H_3Op + e_aq + decCh1->AddProduct(OH); + decCh1->AddProduct(H3O); + decCh1->AddProduct(e_aq); + decCh1->SetProbability(0.5); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); + + // Decay channel 2 : energy + decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4)); + decCh2->SetProbability(0.5); + + water->NewConfigurationWithElectronOccupancy("Exci1stLayer", *occ); + water->AddDecayChannel("Exci1stLayer", decCh1); + water->AddDecayChannel("Exci1stLayer", decCh2); + + ///////////////////////////////////////////////////////// + // IONISATION // + ///////////////////////////////////////////////////////// + //-------------------------------------------------------- + //------------------- Ionisation ------------------------- + + decCh1 = new G4MolecularDissociationChannel("Ioni_Channel"); + + // Decay Channel 1 : : OH + H_3Op + decCh1->AddProduct(H3O); + decCh1->AddProduct(OH); + decCh1->SetProbability(1); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(4, 1); + // this is a ionized h2O with a hole in its last orbital + water->NewConfigurationWithElectronOccupancy("Ioni5", *occ); + water->AddDecayChannel("Ioni5", decCh1); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(3, 1); + water->NewConfigurationWithElectronOccupancy("Ioni4", *occ); + water->AddDecayChannel("Ioni4", new G4MolecularDissociationChannel(*decCh1)); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(2, 1); + water->NewConfigurationWithElectronOccupancy("Ioni3", *occ); + water->AddDecayChannel("Ioni3", new G4MolecularDissociationChannel(*decCh1)); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(1, 1); + water->NewConfigurationWithElectronOccupancy("Ioni2", *occ); + water->AddDecayChannel("Ioni2", new G4MolecularDissociationChannel(*decCh1)); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(0, 1); + water->NewConfigurationWithElectronOccupancy("Ioni1", *occ); + water->AddDecayChannel("Ioni1", new G4MolecularDissociationChannel(*decCh1)); + + ////////////////////////////////////////////////////////// + // Dissociative Attachment // + ////////////////////////////////////////////////////////// + decCh1 = new G4MolecularDissociationChannel("DissociAttachment"); + + // Decay 1 : 2OH + H_2 + decCh1->AddProduct(H2); + decCh1->AddProduct(OHm); + decCh1->AddProduct(OH); + decCh1->SetProbability(1); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::DissociativeAttachment); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->AddElectron(5, 1); // H_2O^- + water->NewConfigurationWithElectronOccupancy("DissociAttachment", *occ); + water->AddDecayChannel("DissociAttachment", decCh1); + + ////////////////////////////////////////////////////////// + // Electron-hole recombination // + ////////////////////////////////////////////////////////// + decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay1"); + decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay2"); + decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay3"); + + // Decay 1 : 2OH + H_2 + decCh1->AddProduct(H2); + decCh1->AddProduct(OH); + decCh1->AddProduct(OH); + decCh1->SetProbability(0.15); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay); + + // Decay 2 : OH + H + decCh2->AddProduct(OH); + decCh2->AddProduct(H); + decCh2->SetProbability(0.55); + decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay); + + // Decay 3 : relaxation + decCh3->SetProbability(0.30); + + const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib"); + water->AddDecayChannel(pH2Ovib, decCh1); + water->AddDecayChannel(pH2Ovib, decCh2); + water->AddDecayChannel(pH2Ovib, decCh3); + + delete occ; +} \ No newline at end of file diff --git a/source/physics_lists/constructors/electromagnetic/src/G4ChemDissociationChannels_option1.cc b/source/physics_lists/constructors/electromagnetic/src/G4ChemDissociationChannels_option1.cc new file mode 100644 index 00000000000..e0ae939e3a8 --- /dev/null +++ b/source/physics_lists/constructors/electromagnetic/src/G4ChemDissociationChannels_option1.cc @@ -0,0 +1,456 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// Geant4 class G4ChemDissociationChannels_option1 +// +// H. Tran 16.12.2022 +// + +#include "G4ChemDissociationChannels_option1.hh" + +#include "G4DNAWaterDissociationDisplacer.hh" +#include "G4DNAWaterExcitationStructure.hh" +#include "G4Electron_aq.hh" +#include "G4FakeMolecule.hh" +#include "G4H2.hh" +#include "G4H2O.hh" +#include "G4H2O2.hh" +#include "G4H3O.hh" +#include "G4HO2.hh" +#include "G4Hydrogen.hh" +#include "G4MolecularConfiguration.hh" +#include "G4MoleculeTable.hh" +#include "G4O2.hh" +#include "G4O3.hh" +#include "G4OH.hh" +#include "G4Oxygen.hh" +#include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" +#include "G4Scheduler.hh" +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void G4ChemDissociationChannels_option1::ConstructMolecule() +{ + //----------------------------------- + // G4Electron::Definition(); // safety + + //----------------------------------- + // Create the definition + + G4H2O::Definition(); + G4Hydrogen::Definition(); + G4H3O::Definition(); + G4OH::Definition(); + G4Electron_aq::Definition(); + G4H2O2::Definition(); + G4H2::Definition(); + + G4O2::Definition(); + G4HO2::Definition(); + G4Oxygen::Definition(); + G4O3::Definition(); + + //____________________________________________________________________________ + auto molTable = G4MoleculeTable::Instance(); + molTable->CreateConfiguration("H3Op", G4H3O::Definition()); + molTable->GetConfiguration("H3Op")->SetDiffusionCoefficient(9.46e-9 + * (m2 / s)); + molTable->GetConfiguration("H3Op")->SetVanDerVaalsRadius(0.25 * nm); + + molTable->CreateConfiguration("OH", G4OH::Definition()); + molTable->GetConfiguration("OH")->SetDiffusionCoefficient(2.2e-9 * (m2 / s)); + molTable->GetConfiguration("OH")->SetVanDerVaalsRadius(0.22 * nm); + + G4MolecularConfiguration* OHm = + molTable->CreateConfiguration("OHm", // just a tag to store and retrieve + // from G4MoleculeTable + G4OH::Definition(), + -1, // charge + 5.3e-9 * (m2 / s)); + OHm->SetMass(17.0079 * g / Avogadro * c_squared); + OHm->SetVanDerVaalsRadius(0.33 * nm); + + molTable->CreateConfiguration("e_aq", G4Electron_aq::Definition()); + molTable->GetConfiguration("e_aq")->SetVanDerVaalsRadius(0.50 * nm); + + molTable->CreateConfiguration("H", G4Hydrogen::Definition()); + molTable->GetConfiguration("H")->SetVanDerVaalsRadius(0.19 * nm); + + molTable->CreateConfiguration("H2", G4H2::Definition()); + molTable->GetConfiguration("H2")->SetDiffusionCoefficient(4.8e-9 * (m2 / s)); + molTable->GetConfiguration("H2")->SetVanDerVaalsRadius(0.14 * nm); + + molTable->CreateConfiguration("H2O2", G4H2O2::Definition()); + molTable->GetConfiguration("H2O2")->SetDiffusionCoefficient(2.3e-9 * (m2 / s)); + molTable->GetConfiguration("H2O2")->SetVanDerVaalsRadius(0.21 * nm); + + // molecules extension (RITRACKS) + + molTable->CreateConfiguration("HO2", G4HO2::Definition()); + molTable->GetConfiguration("HO2")->SetVanDerVaalsRadius(0.21 * nm); + + G4MolecularConfiguration* HO2m = + molTable->CreateConfiguration("HO2m", // just a tag to store and retrieve + // from G4MoleculeTable + G4HO2::Definition(), + -1, // charge + 1.4e-9 * (m2 / s)); + HO2m->SetMass(33.00396 * g / Avogadro * c_squared); + HO2m->SetVanDerVaalsRadius(0.25 * nm); + + molTable->CreateConfiguration("Oxy", G4Oxygen::Definition()); + molTable->GetConfiguration("Oxy")->SetVanDerVaalsRadius(0.20 * nm); + + G4MolecularConfiguration* Om = + molTable->CreateConfiguration("Om", // just a tag to store and retrieve from + // G4MoleculeTable + G4Oxygen::Definition(), + -1, // charge + 2.0e-9 * (m2 / s)); + Om->SetMass(15.99829 * g / Avogadro * c_squared); + Om->SetVanDerVaalsRadius(0.25 * nm); + + molTable->CreateConfiguration("O2", G4O2::Definition()); + molTable->GetConfiguration("O2")->SetVanDerVaalsRadius(0.17 * nm); + + G4MolecularConfiguration* O2m = + molTable->CreateConfiguration("O2m", // just a tag to store and retrieve + // from G4MoleculeTable + G4O2::Definition(), + -1, // charge + 1.75e-9 * (m2 / s)); + O2m->SetMass(31.99602 * g / Avogadro * c_squared); + O2m->SetVanDerVaalsRadius(0.22 * nm); + + molTable->CreateConfiguration("O3", G4O3::Definition()); + molTable->GetConfiguration("O3")->SetVanDerVaalsRadius(0.20 * nm); + + G4MolecularConfiguration* O3m = + molTable->CreateConfiguration("O3m", // just a tag to store and retrieve + // from G4MoleculeTable + G4O3::Definition(), + -1, // charge + 2.0e-9 * (m2 / s)); + O3m->SetMass(47.99375 * g / Avogadro * c_squared); + O3m->SetVanDerVaalsRadius(0.20 * nm); + + molTable->CreateConfiguration("H2O(B)", // just a tag to store and retrieve + // from G4MoleculeTable + G4H2O::Definition(), + 0, // charge + 0 * (m2 / s)); + + molTable->CreateConfiguration("H3Op(B)", // just a tag to store and retrieve + // from G4MoleculeTable + G4H3O::Definition(), + 1, // charge + 0 * (m2 / s)); + + molTable->CreateConfiguration("OHm(B)", // just a tag to store and retrieve + // from G4MoleculeTable + G4OH::Definition(), + -1, // charge + 0 * (m2 / s)); + + molTable->CreateConfiguration("NoneM", G4FakeMolecule::Definition()); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +void G4ChemDissociationChannels_option1::ConstructDissociationChannels() +{ + //----------------------------------- + // Get the molecular configuration + auto molTable = G4MoleculeTable::Instance(); + G4MolecularConfiguration* OH = molTable->GetConfiguration("OH"); + G4MolecularConfiguration* OHm = molTable->GetConfiguration("OHm"); + G4MolecularConfiguration* e_aq = molTable->GetConfiguration("e_aq"); + G4MolecularConfiguration* H2 = molTable->GetConfiguration("H2"); + G4MolecularConfiguration* H3O = molTable->GetConfiguration("H3Op"); + G4MolecularConfiguration* H = molTable->GetConfiguration("H"); + G4MolecularConfiguration* O = molTable->GetConfiguration("Oxy"); + + //------------------------------------- + // Define the decay channels + G4MoleculeDefinition* water = G4H2O::Definition(); + G4MolecularDissociationChannel* decCh1; + G4MolecularDissociationChannel* decCh2; + G4MolecularDissociationChannel* decCh3; + G4MolecularDissociationChannel* decCh4; + G4MolecularDissociationChannel* decCh5; + + G4ElectronOccupancy* occ = new G4ElectronOccupancy(*(water->GetGroundStateElectronOccupancy())); + + ////////////////////////////////////////////////////////// + // EXCITATIONS // + ////////////////////////////////////////////////////////// + G4DNAWaterExcitationStructure waterExcitation; + //-------------------------------------------------------- + //---------------Excitation on the fifth layer------------ + + decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relax"); + decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociDecay"); + // Decay 1 : OH + H + decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0)); + decCh1->SetProbability(0.35); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::NoDisplacement); + + decCh2->AddProduct(OH); + decCh2->AddProduct(H); + decCh2->SetProbability(0.65); + decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay); + + occ->RemoveElectron(4, 1); // this is the transition form ground state to + occ->AddElectron(5, 1); // the first unoccupied orbital: A^1B_1 + + water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ); + water->AddDecayChannel("A^1B_1", decCh1); + water->AddDecayChannel("A^1B_1", decCh2); + + //-------------------------------------------------------- + //---------------Excitation on the fourth layer----------- + decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relax_Channel"); + decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociDecay"); + decCh3 = new G4MolecularDissociationChannel("B^1A_1_AutoIoni_Channel"); + decCh4 = new G4MolecularDissociationChannel("A^1B_1_DissociDecay"); + decCh5 = new G4MolecularDissociationChannel("B^1A_1_DissociDecay2"); + + // Decay 1 : energy + decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1)); + decCh1->SetProbability(0.175); + + // Decay 2 : 2OH + H_2 + decCh2->AddProduct(H2); + decCh2->AddProduct(OH); + decCh2->AddProduct(OH); + decCh2->SetProbability(0.0325); + decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay); + + // Decay 3 : OH + H_3Op + e_aq + decCh3->AddProduct(OH); + decCh3->AddProduct(H3O); + decCh3->AddProduct(e_aq); + decCh3->SetProbability(0.50); + decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); + + // Decay 4 : H + OH + decCh4->AddProduct(H); + decCh4->AddProduct(OH); + decCh4->SetProbability(0.2535); + decCh4->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay); + + // Decay 5 : 2H + O + decCh5->AddProduct(O); + decCh5->AddProduct(H); + decCh5->AddProduct(H); + decCh5->SetProbability(0.039); + decCh5->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay2); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(3); // this is the transition form ground state to + occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1 + + water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ); + water->AddDecayChannel("B^1A_1", decCh1); + water->AddDecayChannel("B^1A_1", decCh2); + water->AddDecayChannel("B^1A_1", decCh3); + water->AddDecayChannel("B^1A_1", decCh4); + water->AddDecayChannel("B^1A_1", decCh5); + + //------------------------------------------------------- + //-------------------Excitation of 3rd layer----------------- + decCh1 = new G4MolecularDissociationChannel("Exci3rdLayer_AutoIoni_Channel"); + decCh2 = new G4MolecularDissociationChannel("Exci3rdLayer_Relax_Channel"); + + // Decay channel 1 : : OH + H_3Op + e_aq + decCh1->AddProduct(OH); + decCh1->AddProduct(H3O); + decCh1->AddProduct(e_aq); + + decCh1->SetProbability(0.5); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); + + // Decay channel 2 : energy + decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2)); + decCh2->SetProbability(0.5); + + // Electronic configuration of this decay + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(2, 1); + occ->AddElectron(5, 1); + + // Configure the water molecule + water->NewConfigurationWithElectronOccupancy("Exci3rdLayer", *occ); + water->AddDecayChannel("Exci3rdLayer", decCh1); + water->AddDecayChannel("Exci3rdLayer", decCh2); + + //------------------------------------------------------- + //-------------------Excitation of 2nd layer----------------- + decCh1 = new G4MolecularDissociationChannel("Exci2ndLayer_AutoIoni_Channel"); + decCh2 = new G4MolecularDissociationChannel("Exci2ndLayer_Relax_Channel"); + + // Decay Channel 1 : : OH + H_3Op + e_aq + decCh1->AddProduct(OH); + decCh1->AddProduct(H3O); + decCh1->AddProduct(e_aq); + + decCh1->SetProbability(0.5); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); + + // Decay channel 2 : energy + decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3)); + decCh2->SetProbability(0.5); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(1, 1); + occ->AddElectron(5, 1); + + water->NewConfigurationWithElectronOccupancy("Exci2ndLayer", *occ); + water->AddDecayChannel("Exci2ndLayer", decCh1); + water->AddDecayChannel("Exci2ndLayer", decCh2); + + //------------------------------------------------------- + //-------------------Excitation of 1st layer----------------- + decCh1 = new G4MolecularDissociationChannel("Exci1stLayer_AutoIoni_Channel"); + decCh2 = new G4MolecularDissociationChannel("Exci1stLayer_Relax_Channel"); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(0, 1); + occ->AddElectron(5, 1); + + // Decay Channel 1 : : OH + H_3Op + e_aq + decCh1->AddProduct(OH); + decCh1->AddProduct(H3O); + decCh1->AddProduct(e_aq); + decCh1->SetProbability(0.5); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); + + // Decay channel 2 : energy + decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4)); + decCh2->SetProbability(0.5); + + water->NewConfigurationWithElectronOccupancy("Exci1stLayer", *occ); + water->AddDecayChannel("Exci1stLayer", decCh1); + water->AddDecayChannel("Exci1stLayer", decCh2); + + ///////////////////////////////////////////////////////// + // IONISATION // + ///////////////////////////////////////////////////////// + //-------------------------------------------------------- + //------------------- Ionisation ------------------------- + + decCh1 = new G4MolecularDissociationChannel("Ioni_Channel"); + + // Decay Channel 1 : : OH + H_3Op + decCh1->AddProduct(H3O); + decCh1->AddProduct(OH); + decCh1->SetProbability(1); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(4, 1); + // this is a ionized h2O with a hole in its last orbital + water->NewConfigurationWithElectronOccupancy("Ioni5", *occ); + water->AddDecayChannel("Ioni5", decCh1); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(3, 1); + water->NewConfigurationWithElectronOccupancy("Ioni4", *occ); + water->AddDecayChannel("Ioni4", new G4MolecularDissociationChannel(*decCh1)); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(2, 1); + water->NewConfigurationWithElectronOccupancy("Ioni3", *occ); + water->AddDecayChannel("Ioni3", new G4MolecularDissociationChannel(*decCh1)); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(1, 1); + water->NewConfigurationWithElectronOccupancy("Ioni2", *occ); + water->AddDecayChannel("Ioni2", new G4MolecularDissociationChannel(*decCh1)); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->RemoveElectron(0, 1); + water->NewConfigurationWithElectronOccupancy("Ioni1", *occ); + water->AddDecayChannel("Ioni1", new G4MolecularDissociationChannel(*decCh1)); + + ////////////////////////////////////////////////////////// + // Dissociative Attachment // + ////////////////////////////////////////////////////////// + decCh1 = new G4MolecularDissociationChannel("DissociAttachment_ch1"); + + // Decay 1 : OHm + H + decCh1->AddProduct(H2); + decCh1->AddProduct(OHm); + decCh1->AddProduct(OH); + decCh1->SetProbability(1); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::DissociativeAttachment); + + *occ = *(water->GetGroundStateElectronOccupancy()); + occ->AddElectron(5, 1); // H_2O^- + + water->NewConfigurationWithElectronOccupancy("DissociAttachment_ch1", *occ); + water->AddDecayChannel("DissociAttachment_ch1", decCh1); + + ////////////////////////////////////////////////////////// + // Electron-hole recombination // + ////////////////////////////////////////////////////////// + decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay1"); + decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay2"); + decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay3"); + decCh4 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay4"); + + // Decay 1 : 2OH + H_2 + decCh1->AddProduct(H2); + decCh1->AddProduct(OH); + decCh1->AddProduct(OH); + decCh1->SetProbability(0.1365); + decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay); + + // Decay 2 : OH + H + decCh2->AddProduct(OH); + decCh2->AddProduct(H); + decCh2->SetProbability(0.3575); + decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay); + + // Decay 3 : 2H + O(3p) + decCh3->AddProduct(O); + decCh3->AddProduct(H); + decCh3->AddProduct(H); + decCh3->SetProbability(0.156); + decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay2); + + // Decay 4 : relaxation + decCh4->SetProbability(0.35); + + const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib"); + assert(pH2Ovib != nullptr); + + water->AddDecayChannel(pH2Ovib, decCh1); + water->AddDecayChannel(pH2Ovib, decCh2); + water->AddDecayChannel(pH2Ovib, decCh3); + water->AddDecayChannel(pH2Ovib, decCh4); + + delete occ; +} \ No newline at end of file diff --git a/source/physics_lists/constructors/electromagnetic/src/G4EmBuilder.cc b/source/physics_lists/constructors/electromagnetic/src/G4EmBuilder.cc index 5bd5efe8c1e..0222635e80c 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4EmBuilder.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4EmBuilder.cc @@ -64,7 +64,6 @@ #include "G4MuMultipleScattering.hh" #include "G4hMultipleScattering.hh" -#include "G4CoulombScattering.hh" #include "G4ParticleTable.hh" #include "G4Gamma.hh" @@ -150,19 +149,19 @@ void G4EmBuilder::ConstructIonEmPhysicsSS() G4ParticleDefinition* part = G4Deuteron::Deuteron(); ph->RegisterProcess(new G4hIonisation(), part); - ph->RegisterProcess(new G4CoulombScattering(), part); + ph->RegisterProcess(new G4CoulombScattering(false), part); part = G4Triton::Triton(); ph->RegisterProcess(new G4hIonisation(), part); - ph->RegisterProcess(new G4CoulombScattering(), part); + ph->RegisterProcess(new G4CoulombScattering(false), part); part = G4Alpha::Alpha(); ph->RegisterProcess(new G4ionIonisation(), part); - ph->RegisterProcess(new G4CoulombScattering(), part); + ph->RegisterProcess(new G4CoulombScattering(false), part); part = G4He3::He3(); ph->RegisterProcess(new G4ionIonisation(), part); - ph->RegisterProcess(new G4CoulombScattering(), part); + ph->RegisterProcess(new G4CoulombScattering(false), part); } void G4EmBuilder::ConstructLightHadrons(G4ParticleDefinition* part1, @@ -219,14 +218,15 @@ void G4EmBuilder::ConstructLightHadronsSS(G4ParticleDefinition* part1, ph->RegisterProcess(brem, part1); ph->RegisterProcess(pair, part1); } - ph->RegisterProcess(new G4CoulombScattering(), part1); + auto ss = new G4CoulombScattering(false); + ph->RegisterProcess(ss, part1); ph->RegisterProcess(new G4hIonisation(), part2); if( isHEP ) { ph->RegisterProcess(brem, part2); ph->RegisterProcess(pair, part2); } - ph->RegisterProcess(new G4CoulombScattering(), part2); + ph->RegisterProcess(new G4CoulombScattering(false), part2); } void G4EmBuilder::ConstructCharged(G4hMultipleScattering* hmsc, @@ -306,7 +306,7 @@ void G4EmBuilder::ConstructChargedSS(G4hMultipleScattering* hmsc) G4bool isHEP = ( param->MaxKinEnergy() > hpar->EnergyThresholdForHeavyHadrons() ); // muon multiple and single scattering - G4CoulombScattering* muss = new G4CoulombScattering(); + G4CoulombScattering* muss = new G4CoulombScattering(false); // Add standard EM Processes // mu+- diff --git a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAChemistry.cc b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAChemistry.cc index 20d98514a13..4b9ddd7ef0b 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAChemistry.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAChemistry.cc @@ -24,13 +24,12 @@ // ******************************************************************** // #include "G4EmDNAChemistry.hh" +#include "G4ChemDissociationChannels.hh" -#include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" #include "G4DNAWaterDissociationDisplacer.hh" #include "G4DNAChemistryManager.hh" -#include "G4DNAWaterExcitationStructure.hh" #include "G4ProcessManager.hh" #include "G4DNAGenericIonsManager.hh" @@ -39,15 +38,9 @@ #include "G4DNAElectronSolvation.hh" -#include "G4DNAAttachment.hh" #include "G4DNAVibExcitation.hh" #include "G4DNASancheExcitationModel.hh" -#include "G4DNAElastic.hh" -#include "G4DNAChampionElasticModel.hh" -#include "G4DNAScreenedRutherfordElasticModel.hh" -#include "G4DNAUeharaScreenedRutherfordElasticModel.hh" - #include "G4DNAMolecularDissociation.hh" #include "G4DNABrownianTransportation.hh" #include "G4DNAMolecularReactionTable.hh" @@ -56,30 +49,16 @@ #include "G4DNASmoluchowskiReactionModel.hh" #include "G4DNAElectronHoleRecombination.hh" - // particles #include "G4Electron.hh" -#include "G4Proton.hh" -#include "G4GenericIon.hh" - #include "G4MoleculeTable.hh" #include "G4H2O.hh" -#include "G4H2.hh" -#include "G4Hydrogen.hh" -#include "G4OH.hh" -#include "G4H3O.hh" -#include "G4Electron_aq.hh" -#include "G4H2O2.hh" - #include "G4PhysicsListHelper.hh" -#include "G4BuilderType.hh" /****/ #include "G4DNAMoleculeEncounterStepper.hh" -#include "G4ProcessVector.hh" #include "G4ProcessTable.hh" -#include "G4DNASecondOrderReaction.hh" #include "G4MolecularConfiguration.hh" /****/ @@ -98,316 +77,16 @@ G4EmDNAChemistry::G4EmDNAChemistry() : //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4EmDNAChemistry::~G4EmDNAChemistry() -{ -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void G4EmDNAChemistry::ConstructMolecule() { - //----------------------------------- - G4Electron::Definition(); // safety - - //----------------------------------- - // Create the definition - G4H2O::Definition(); - G4Hydrogen::Definition(); - G4H3O::Definition(); - G4OH::Definition(); - G4Electron_aq::Definition(); - G4H2O2::Definition(); - G4H2::Definition(); - - //____________________________________________________________________________ - - G4MoleculeTable::Instance()->CreateConfiguration("H3Op", G4H3O::Definition()); - G4MolecularConfiguration* OHm = G4MoleculeTable::Instance()-> - CreateConfiguration("OHm", // just a tag to store and retrieve from - // G4MoleculeTable - G4OH::Definition(), - -1, // charge - 5.0e-9 * (m2 / s)); - OHm->SetMass(17.0079 * g / Avogadro * c_squared); - G4MoleculeTable::Instance()->CreateConfiguration("OH", G4OH::Definition()); - G4MoleculeTable::Instance()->CreateConfiguration("e_aq", - G4Electron_aq::Definition()); - G4MoleculeTable::Instance()->CreateConfiguration("H", - G4Hydrogen::Definition()); - G4MoleculeTable::Instance()->CreateConfiguration("H2", G4H2::Definition()); - G4MoleculeTable::Instance()->CreateConfiguration("H2O2", G4H2O2::Definition()); + G4ChemDissociationChannels::ConstructMolecule(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4EmDNAChemistry::ConstructDissociationChannels() { - //----------------------------------- - //Get the molecular configuration - G4MolecularConfiguration* OH = - G4MoleculeTable::Instance()->GetConfiguration("OH"); - G4MolecularConfiguration* OHm = - G4MoleculeTable::Instance()->GetConfiguration("OHm"); - G4MolecularConfiguration* e_aq = - G4MoleculeTable::Instance()->GetConfiguration("e_aq"); - G4MolecularConfiguration* H2 = - G4MoleculeTable::Instance()->GetConfiguration("H2"); - G4MolecularConfiguration* H3O = - G4MoleculeTable::Instance()->GetConfiguration("H3Op"); - G4MolecularConfiguration* H = - G4MoleculeTable::Instance()->GetConfiguration("H"); - - //------------------------------------- - //Define the decay channels - G4MoleculeDefinition* water = G4H2O::Definition(); - G4MolecularDissociationChannel* decCh1; - G4MolecularDissociationChannel* decCh2; - - G4ElectronOccupancy* occ = new G4ElectronOccupancy( - *(water->GetGroundStateElectronOccupancy())); - - ////////////////////////////////////////////////////////// - // EXCITATIONS // - ////////////////////////////////////////////////////////// - G4DNAWaterExcitationStructure waterExcitation; - //-------------------------------------------------------- - //---------------Excitation on the fifth layer------------ - - decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relaxation"); - decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociativeDecay"); - //Decay 1 : OH + H - decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0)); - decCh1->SetProbability(0.35); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::NoDisplacement); - - decCh2->AddProduct(OH); - decCh2->AddProduct(H); - decCh2->SetProbability(0.65); - decCh2->SetDisplacementType( - G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay); - -// water->AddExcitedState("A^1B_1"); - occ->RemoveElectron(4, 1); // this is the transition form ground state to - occ->AddElectron(5, 1); // the first unoccupied orbital: A^1B_1 - - water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ); - water->AddDecayChannel("A^1B_1", decCh1); - water->AddDecayChannel("A^1B_1", decCh2); - - //-------------------------------------------------------- - //---------------Excitation on the fourth layer----------- - decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relaxation_Channel"); - decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociativeDecay"); - G4MolecularDissociationChannel* decCh3 = new G4MolecularDissociationChannel( - "B^1A_1_AutoIonisation_Channel"); - - //Decay 1 : energy - decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1)); - decCh1->SetProbability(0.3); - - //Decay 2 : 2OH + H_2 - decCh2->AddProduct(H2); - decCh2->AddProduct(OH); - decCh2->AddProduct(OH); - decCh2->SetProbability(0.15); - decCh2->SetDisplacementType( - G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay); - - //Decay 3 : OH + H_3Op + e_aq - decCh3->AddProduct(OH); - decCh3->AddProduct(H3O); - decCh3->AddProduct(e_aq); - decCh3->SetProbability(0.55); - decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(3); // this is the transition form ground state to - occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1 - - water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ); - water->AddDecayChannel("B^1A_1", decCh1); - water->AddDecayChannel("B^1A_1", decCh2); - water->AddDecayChannel("B^1A_1", decCh3); - - //------------------------------------------------------- - //-------------------Excitation of 3rd layer----------------- - decCh1 = new G4MolecularDissociationChannel( - "Excitation3rdLayer_AutoIonisation_Channel"); - decCh2 = new G4MolecularDissociationChannel( - "Excitation3rdLayer_Relaxation_Channel"); - - //Decay channel 1 : : OH + H_3Op + e_aq - decCh1->AddProduct(OH); - decCh1->AddProduct(H3O); - decCh1->AddProduct(e_aq); - - decCh1->SetProbability(0.5); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); - - //Decay channel 2 : energy - decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2)); - decCh2->SetProbability(0.5); - - //Electronic configuration of this decay - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(2, 1); - occ->AddElectron(5, 1); - - //Configure the water molecule - water->NewConfigurationWithElectronOccupancy("Excitation3rdLayer", *occ); - water->AddDecayChannel("Excitation3rdLayer", decCh1); - water->AddDecayChannel("Excitation3rdLayer", decCh2); - - //------------------------------------------------------- - //-------------------Excitation of 2nd layer----------------- - decCh1 = new G4MolecularDissociationChannel( - "Excitation2ndLayer_AutoIonisation_Channel"); - decCh2 = new G4MolecularDissociationChannel( - "Excitation2ndLayer_Relaxation_Channel"); - - //Decay Channel 1 : : OH + H_3Op + e_aq - decCh1->AddProduct(OH); - decCh1->AddProduct(H3O); - decCh1->AddProduct(e_aq); - - decCh1->SetProbability(0.5); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); - - //Decay channel 2 : energy - decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3)); - decCh2->SetProbability(0.5); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(1, 1); - occ->AddElectron(5, 1); - - water->NewConfigurationWithElectronOccupancy("Excitation2ndLayer", *occ); - water->AddDecayChannel("Excitation2ndLayer", decCh1); - water->AddDecayChannel("Excitation2ndLayer", decCh2); - - //------------------------------------------------------- - //-------------------Excitation of 1st layer----------------- - decCh1 = new G4MolecularDissociationChannel( - "Excitation1stLayer_AutoIonisation_Channel"); - decCh2 = new G4MolecularDissociationChannel( - "Excitation1stLayer_Relaxation_Channel"); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(0, 1); - occ->AddElectron(5, 1); - - //Decay Channel 1 : : OH + H_3Op + e_aq - decCh1->AddProduct(OH); - decCh1->AddProduct(H3O); - decCh1->AddProduct(e_aq); - decCh1->SetProbability(0.5); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); - - //Decay channel 2 : energy - decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4)); - decCh2->SetProbability(0.5); - - water->NewConfigurationWithElectronOccupancy("Excitation1stLayer", *occ); - water->AddDecayChannel("Excitation1stLayer", decCh1); - water->AddDecayChannel("Excitation1stLayer", decCh2); - - ///////////////////////////////////////////////////////// - // IONISATION // - ///////////////////////////////////////////////////////// - //-------------------------------------------------------- - //------------------- Ionisation ------------------------- - - decCh1 = new G4MolecularDissociationChannel("Ionisation_Channel"); - - //Decay Channel 1 : : OH + H_3Op - decCh1->AddProduct(H3O); - decCh1->AddProduct(OH); - decCh1->SetProbability(1); - decCh1->SetDisplacementType( - G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(4, 1); - // this is a ionized h2O with a hole in its last orbital - water->NewConfigurationWithElectronOccupancy("Ionisation5", *occ); - water->AddDecayChannel("Ionisation5", - decCh1); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(3, 1); - water->NewConfigurationWithElectronOccupancy("Ionisation4", *occ); - water->AddDecayChannel("Ionisation4", - new G4MolecularDissociationChannel(*decCh1)); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(2, 1); - water->NewConfigurationWithElectronOccupancy("Ionisation3", *occ); - water->AddDecayChannel("Ionisation3", - new G4MolecularDissociationChannel(*decCh1)); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(1, 1); - water->NewConfigurationWithElectronOccupancy("Ionisation2", *occ); - water->AddDecayChannel("Ionisation2", - new G4MolecularDissociationChannel(*decCh1)); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(0, 1); - water->NewConfigurationWithElectronOccupancy("Ionisation1", *occ); - water->AddDecayChannel("Ionisation1", - new G4MolecularDissociationChannel(*decCh1)); - - ////////////////////////////////////////////////////////// - // Dissociative Attachment // - ////////////////////////////////////////////////////////// - decCh1 = new G4MolecularDissociationChannel("DissociativeAttachment"); - - //Decay 1 : 2OH + H_2 - decCh1->AddProduct(H2); - decCh1->AddProduct(OHm); - decCh1->AddProduct(OH); - decCh1->SetProbability(1); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer:: - DissociativeAttachment); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->AddElectron(5, 1); // H_2O^- - water->NewConfigurationWithElectronOccupancy("DissociativeAttachment", *occ); - water->AddDecayChannel("DissociativeAttachment", decCh1); - - ////////////////////////////////////////////////////////// - // Electron-hole recombination // - ////////////////////////////////////////////////////////// - decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay1"); - decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay2"); - decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay3"); - - //Decay 1 : 2OH + H_2 - decCh1->AddProduct(H2); - decCh1->AddProduct(OH); - decCh1->AddProduct(OH); - decCh1->SetProbability(0.15); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer:: - B1A1_DissociationDecay); - - //Decay 2 : OH + H - decCh2->AddProduct(OH); - decCh2->AddProduct(H); - decCh2->SetProbability(0.55); - decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer:: - A1B1_DissociationDecay); - - //Decay 3 : relaxation - decCh3->SetProbability(0.30); - - const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib"); - assert(pH2Ovib != nullptr); - - water->AddDecayChannel(pH2Ovib, decCh1); - water->AddDecayChannel(pH2Ovib, decCh2); - water->AddDecayChannel(pH2Ovib, decCh3); - - delete occ; + G4ChemDissociationChannels::ConstructDissociationChannels(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAChemistry_option1.cc b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAChemistry_option1.cc index 54bd8180e2a..474234096a1 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAChemistry_option1.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAChemistry_option1.cc @@ -24,13 +24,9 @@ // ******************************************************************** // #include "G4EmDNAChemistry_option1.hh" - -#include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" - #include "G4DNAWaterDissociationDisplacer.hh" #include "G4DNAChemistryManager.hh" -#include "G4DNAWaterExcitationStructure.hh" #include "G4ProcessManager.hh" #include "G4DNAGenericIonsManager.hh" @@ -39,47 +35,25 @@ #include "G4DNAElectronSolvation.hh" -#include "G4DNAAttachment.hh" #include "G4DNAVibExcitation.hh" #include "G4DNASancheExcitationModel.hh" -#include "G4DNAElastic.hh" -#include "G4DNAChampionElasticModel.hh" -#include "G4DNAScreenedRutherfordElasticModel.hh" -#include "G4DNAUeharaScreenedRutherfordElasticModel.hh" - #include "G4DNAMolecularDissociation.hh" #include "G4DNABrownianTransportation.hh" #include "G4DNAMolecularReactionTable.hh" #include "G4DNAMolecularStepByStepModel.hh" #include "G4VDNAReactionModel.hh" #include "G4DNASmoluchowskiReactionModel.hh" - #include "G4DNAElectronHoleRecombination.hh" - +#include "G4ChemDissociationChannels.hh" // particles - #include "G4Electron.hh" -#include "G4Proton.hh" -#include "G4GenericIon.hh" - #include "G4MoleculeTable.hh" #include "G4H2O.hh" -#include "G4H2.hh" -#include "G4Hydrogen.hh" -#include "G4OH.hh" -#include "G4H3O.hh" -#include "G4Electron_aq.hh" -#include "G4H2O2.hh" - #include "G4PhysicsListHelper.hh" -#include "G4BuilderType.hh" - /****/ #include "G4DNAMoleculeEncounterStepper.hh" -#include "G4ProcessVector.hh" #include "G4ProcessTable.hh" -#include "G4DNASecondOrderReaction.hh" #include "G4MolecularConfiguration.hh" /****/ @@ -88,8 +62,6 @@ G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistry_option1); -#include "G4Threading.hh" - G4EmDNAChemistry_option1::G4EmDNAChemistry_option1() : G4VUserChemistryList(true) { @@ -98,324 +70,29 @@ G4EmDNAChemistry_option1::G4EmDNAChemistry_option1() : //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4EmDNAChemistry_option1::~G4EmDNAChemistry_option1() -{ -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void G4EmDNAChemistry_option1::ConstructMolecule() { - //----------------------------------- - G4Electron::Definition(); // safety - - //----------------------------------- - // Create the definition - G4H2O::Definition(); - G4Hydrogen::Definition(); - G4H3O::Definition(); - G4OH::Definition(); - G4Electron_aq::Definition(); - G4H2O2::Definition(); - G4H2::Definition(); + G4ChemDissociationChannels::ConstructMolecule(); //____________________________________________________________________________ - G4MoleculeTable::Instance()->CreateConfiguration("H3Op", G4H3O::Definition()); G4MoleculeTable::Instance()->GetConfiguration("H3Op")->SetDiffusionCoefficient( 9.46e-9 * (m2/s)); - G4MolecularConfiguration* OHm = G4MoleculeTable::Instance()-> - CreateConfiguration("OHm", // just a tag to store and retrieve from - // G4MoleculeTable - G4OH::Definition(), - -1, // charge - 5.3e-9 * (m2 / s)); - OHm->SetMass(17.0079 * g / Avogadro * c_squared); - G4MoleculeTable::Instance()->CreateConfiguration("OH", G4OH::Definition()); + G4MoleculeTable::Instance()->GetConfiguration("OHm")->SetDiffusionCoefficient( + 5.3e-9 * (m2 / s)); G4MoleculeTable::Instance()->GetConfiguration("OH")->SetDiffusionCoefficient( - 2.2e-9 * (m2/s)); - G4MoleculeTable::Instance()->CreateConfiguration("e_aq", - G4Electron_aq::Definition()); - G4MoleculeTable::Instance()->CreateConfiguration("H", - G4Hydrogen::Definition()); - G4MoleculeTable::Instance()->CreateConfiguration("H2", G4H2::Definition()); + 2.2e-9 * (m2/s)); G4MoleculeTable::Instance()->GetConfiguration("H2")->SetDiffusionCoefficient( - 4.8e-9 * (m2/s)); - G4MoleculeTable::Instance()->CreateConfiguration("H2O2", G4H2O2::Definition()); + 4.8e-9 * (m2/s)); G4MoleculeTable::Instance()->GetConfiguration("H2O2")->SetDiffusionCoefficient( - 2.3e-9 * (m2/s)); + 2.3e-9 * (m2/s)); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4EmDNAChemistry_option1::ConstructDissociationChannels() { - //----------------------------------- - //Get the molecular configuration - G4MolecularConfiguration* OH = - G4MoleculeTable::Instance()->GetConfiguration("OH"); - G4MolecularConfiguration* OHm = - G4MoleculeTable::Instance()->GetConfiguration("OHm"); - G4MolecularConfiguration* e_aq = - G4MoleculeTable::Instance()->GetConfiguration("e_aq"); - G4MolecularConfiguration* H2 = - G4MoleculeTable::Instance()->GetConfiguration("H2"); - G4MolecularConfiguration* H3O = - G4MoleculeTable::Instance()->GetConfiguration("H3Op"); - G4MolecularConfiguration* H = - G4MoleculeTable::Instance()->GetConfiguration("H"); - - //------------------------------------- - //Define the decay channels - G4MoleculeDefinition* water = G4H2O::Definition(); - G4MolecularDissociationChannel* decCh1; - G4MolecularDissociationChannel* decCh2; - - G4ElectronOccupancy* occ = new G4ElectronOccupancy( - *(water->GetGroundStateElectronOccupancy())); - - ////////////////////////////////////////////////////////// - // EXCITATIONS // - ////////////////////////////////////////////////////////// - G4DNAWaterExcitationStructure waterExcitation; - //-------------------------------------------------------- - //---------------Excitation on the fifth layer------------ - - decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relaxation"); - decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociativeDecay"); - //Decay 1 : OH + H - decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0)); - decCh1->SetProbability(0.35); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::NoDisplacement); - - decCh2->AddProduct(OH); - decCh2->AddProduct(H); - decCh2->SetProbability(0.65); - decCh2->SetDisplacementType( - G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay); - -// water->AddExcitedState("A^1B_1"); - occ->RemoveElectron(4, 1); // this is the transition form ground state to - occ->AddElectron(5, 1); // the first unoccupied orbital: A^1B_1 - - water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ); - water->AddDecayChannel("A^1B_1", decCh1); - water->AddDecayChannel("A^1B_1", decCh2); - - //-------------------------------------------------------- - //---------------Excitation on the fourth layer----------- - decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relaxation_Channel"); - decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociativeDecay"); - G4MolecularDissociationChannel* decCh3 = new G4MolecularDissociationChannel( - "B^1A_1_AutoIonisation_Channel"); - - //Decay 1 : energy - decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1)); - decCh1->SetProbability(0.3); - - //Decay 2 : 2OH + H_2 - decCh2->AddProduct(H2); - decCh2->AddProduct(OH); - decCh2->AddProduct(OH); - decCh2->SetProbability(0.15); - decCh2->SetDisplacementType( - G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay); - - //Decay 3 : OH + H_3Op + e_aq - decCh3->AddProduct(OH); - decCh3->AddProduct(H3O); - decCh3->AddProduct(e_aq); - decCh3->SetProbability(0.55); - decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(3); // this is the transition form ground state to - occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1 - - water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ); - water->AddDecayChannel("B^1A_1", decCh1); - water->AddDecayChannel("B^1A_1", decCh2); - water->AddDecayChannel("B^1A_1", decCh3); - - //------------------------------------------------------- - //-------------------Excitation of 3rd layer----------------- - decCh1 = new G4MolecularDissociationChannel( - "Excitation3rdLayer_AutoIonisation_Channel"); - decCh2 = new G4MolecularDissociationChannel( - "Excitation3rdLayer_Relaxation_Channel"); - - //Decay channel 1 : : OH + H_3Op + e_aq - decCh1->AddProduct(OH); - decCh1->AddProduct(H3O); - decCh1->AddProduct(e_aq); - - decCh1->SetProbability(0.5); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); - - //Decay channel 2 : energy - decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2)); - decCh2->SetProbability(0.5); - - //Electronic configuration of this decay - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(2, 1); - occ->AddElectron(5, 1); - - //Configure the water molecule - water->NewConfigurationWithElectronOccupancy("Excitation3rdLayer", *occ); - water->AddDecayChannel("Excitation3rdLayer", decCh1); - water->AddDecayChannel("Excitation3rdLayer", decCh2); - - //------------------------------------------------------- - //-------------------Excitation of 2nd layer----------------- - decCh1 = new G4MolecularDissociationChannel( - "Excitation2ndLayer_AutoIonisation_Channel"); - decCh2 = new G4MolecularDissociationChannel( - "Excitation2ndLayer_Relaxation_Channel"); - - //Decay Channel 1 : : OH + H_3Op + e_aq - decCh1->AddProduct(OH); - decCh1->AddProduct(H3O); - decCh1->AddProduct(e_aq); - - decCh1->SetProbability(0.5); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); - - //Decay channel 2 : energy - decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3)); - decCh2->SetProbability(0.5); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(1, 1); - occ->AddElectron(5, 1); - - water->NewConfigurationWithElectronOccupancy("Excitation2ndLayer", *occ); - water->AddDecayChannel("Excitation2ndLayer", decCh1); - water->AddDecayChannel("Excitation2ndLayer", decCh2); - - //------------------------------------------------------- - //-------------------Excitation of 1st layer----------------- - decCh1 = new G4MolecularDissociationChannel( - "Excitation1stLayer_AutoIonisation_Channel"); - decCh2 = new G4MolecularDissociationChannel( - "Excitation1stLayer_Relaxation_Channel"); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(0, 1); - occ->AddElectron(5, 1); - - //Decay Channel 1 : : OH + H_3Op + e_aq - decCh1->AddProduct(OH); - decCh1->AddProduct(H3O); - decCh1->AddProduct(e_aq); - decCh1->SetProbability(0.5); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); - - //Decay channel 2 : energy - decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4)); - decCh2->SetProbability(0.5); - - water->NewConfigurationWithElectronOccupancy("Excitation1stLayer", *occ); - water->AddDecayChannel("Excitation1stLayer", decCh1); - water->AddDecayChannel("Excitation1stLayer", decCh2); - - ///////////////////////////////////////////////////////// - // IONISATION // - ///////////////////////////////////////////////////////// - //-------------------------------------------------------- - //------------------- Ionisation ------------------------- - - decCh1 = new G4MolecularDissociationChannel("Ionisation_Channel"); - - //Decay Channel 1 : : OH + H_3Op - decCh1->AddProduct(H3O); - decCh1->AddProduct(OH); - decCh1->SetProbability(1); - decCh1->SetDisplacementType( - G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(4, 1); - // this is a ionized h2O with a hole in its last orbital - water->NewConfigurationWithElectronOccupancy("Ionisation5", *occ); - water->AddDecayChannel("Ionisation5", - decCh1); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(3, 1); - water->NewConfigurationWithElectronOccupancy("Ionisation4", *occ); - water->AddDecayChannel("Ionisation4", - new G4MolecularDissociationChannel(*decCh1)); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(2, 1); - water->NewConfigurationWithElectronOccupancy("Ionisation3", *occ); - water->AddDecayChannel("Ionisation3", - new G4MolecularDissociationChannel(*decCh1)); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(1, 1); - water->NewConfigurationWithElectronOccupancy("Ionisation2", *occ); - water->AddDecayChannel("Ionisation2", - new G4MolecularDissociationChannel(*decCh1)); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(0, 1); - water->NewConfigurationWithElectronOccupancy("Ionisation1", *occ); - water->AddDecayChannel("Ionisation1", - new G4MolecularDissociationChannel(*decCh1)); - - ////////////////////////////////////////////////////////// - // Dissociative Attachment // - ////////////////////////////////////////////////////////// - decCh1 = new G4MolecularDissociationChannel("DissociativeAttachment"); - - //Decay 1 : 2OH + H_2 - decCh1->AddProduct(H2); - decCh1->AddProduct(OHm); - decCh1->AddProduct(OH); - decCh1->SetProbability(1); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer:: - DissociativeAttachment); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->AddElectron(5, 1); // H_2O^- - water->NewConfigurationWithElectronOccupancy("DissociativeAttachment", *occ); - water->AddDecayChannel("DissociativeAttachment", decCh1); - - ////////////////////////////////////////////////////////// - // Electron-hole recombination // - ////////////////////////////////////////////////////////// - decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay1"); - decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay2"); - decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay3"); - - //Decay 1 : 2OH + H_2 - decCh1->AddProduct(H2); - decCh1->AddProduct(OH); - decCh1->AddProduct(OH); - decCh1->SetProbability(0.15); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer:: - B1A1_DissociationDecay); - - //Decay 2 : OH + H - decCh2->AddProduct(OH); - decCh2->AddProduct(H); - decCh2->SetProbability(0.55); - decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer:: - A1B1_DissociationDecay); - - //Decay 3 : relaxation - decCh3->SetProbability(0.30); - - const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib"); - assert(pH2Ovib != nullptr); - - water->AddDecayChannel(pH2Ovib, decCh1); - water->AddDecayChannel(pH2Ovib, decCh2); - water->AddDecayChannel(pH2Ovib, decCh3); - - delete occ; + G4ChemDissociationChannels::ConstructDissociationChannels(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAChemistry_option2.cc b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAChemistry_option2.cc index 91b804339fc..9a378a75139 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAChemistry_option2.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAChemistry_option2.cc @@ -56,6 +56,7 @@ #include "G4MolecularConfiguration.hh" #include "G4PhysicsConstructorFactory.hh" #include "G4VDNAReactionModel.hh" +#include "G4ChemDissociationChannels.hh" G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistry_option2); @@ -69,23 +70,11 @@ G4EmDNAChemistry_option2::G4EmDNAChemistry_option2() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4EmDNAChemistry_option2::~G4EmDNAChemistry_option2() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void G4EmDNAChemistry_option2::ConstructMolecule() { - //----------------------------------- - G4Electron::Definition(); // safety - //----------------------------------- - G4H2O::Definition(); - G4Hydrogen::Definition(); - G4H3O::Definition(); - G4OH::Definition(); - G4Electron_aq::Definition(); - G4H2O2::Definition(); - G4H2::Definition(); + G4ChemDissociationChannels::ConstructMolecule(); + //____________________________________________________________________________ + G4Deoxyribose::Definition(); G4Phosphate::Definition(); G4Adenine::Definition(); @@ -101,27 +90,6 @@ void G4EmDNAChemistry_option2::ConstructMolecule() G4DamagedCytosine::Definition(); G4ModifiedHistone::Definition(); -//_________________species___________________________________________________________ - - G4MoleculeTable::Instance()-> - CreateConfiguration("H3Op", G4H3O::Definition()); - G4MolecularConfiguration* OHm = G4MoleculeTable::Instance()-> - CreateConfiguration("OHm", - G4OH::Definition(), - -1, // charge - 5.0e-9 * (m2 / s)); - OHm->SetMass(17.0079 * g / Avogadro * c_squared); - G4MoleculeTable::Instance()-> - CreateConfiguration("OH", G4OH::Definition()); - G4MoleculeTable::Instance()-> - CreateConfiguration("e_aq",G4Electron_aq::Definition()); - G4MoleculeTable::Instance()-> - CreateConfiguration("H",G4Hydrogen::Definition()); - G4MoleculeTable::Instance()-> - CreateConfiguration("H2", G4H2::Definition()); - G4MoleculeTable::Instance()-> - CreateConfiguration("H2O2", G4H2O2::Definition()); - //________________DNA_______________________________________________ G4MoleculeTable::Instance()-> @@ -162,289 +130,7 @@ void G4EmDNAChemistry_option2::ConstructMolecule() void G4EmDNAChemistry_option2::ConstructDissociationChannels() { -//----------------------------------- -//Get the molecular configuration - G4MolecularConfiguration* OH = - G4MoleculeTable::Instance()->GetConfiguration("OH"); - G4MolecularConfiguration* OHm = - G4MoleculeTable::Instance()->GetConfiguration("OHm"); - G4MolecularConfiguration* e_aq = - G4MoleculeTable::Instance()->GetConfiguration("e_aq"); - G4MolecularConfiguration* H2 = - G4MoleculeTable::Instance()->GetConfiguration("H2"); - G4MolecularConfiguration* H3O = - G4MoleculeTable::Instance()->GetConfiguration("H3Op"); - G4MolecularConfiguration* H = - G4MoleculeTable::Instance()->GetConfiguration("H"); - -//------------------------------------- -//Define the decay channels - G4MoleculeDefinition* water = G4H2O::Definition(); - G4MolecularDissociationChannel* decCh1; - G4MolecularDissociationChannel* decCh2; - - G4ElectronOccupancy* occ = new G4ElectronOccupancy( - *(water->GetGroundStateElectronOccupancy())); - -////////////////////////////////////////////////////////// -// EXCITATIONS // -////////////////////////////////////////////////////////// - G4DNAWaterExcitationStructure waterExcitation; -//-------------------------------------------------------- -//---------------Excitation on the fifth layer------------ - - decCh1 = new G4MolecularDissociationChannel( - "A^1B_1_Relaxation"); - decCh2 = new G4MolecularDissociationChannel( - "A^1B_1_DissociativeDecay"); - -//Decay 1 : OH + H - decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0)); - decCh1->SetProbability(0.35); - decCh1->SetDisplacementType( - G4DNAWaterDissociationDisplacer::NoDisplacement); - - decCh2->AddProduct(OH); - decCh2->AddProduct(H); - decCh2->SetProbability(0.65); - decCh2->SetDisplacementType( - G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay); - -// water->AddExcitedState("A^1B_1"); -// this is the transition form ground state to - occ->RemoveElectron(4, 1); -// the first unoccupied orbital: A^1B_1 - occ->AddElectron(5, 1); - - water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ); - water->AddDecayChannel("A^1B_1", decCh1); - water->AddDecayChannel("A^1B_1", decCh2); - -//-------------------------------------------------------- -//---------------Excitation on the fourth layer----------- - decCh1 = new G4MolecularDissociationChannel( - "B^1A_1_Relaxation_Channel"); - decCh2 = new G4MolecularDissociationChannel( - "B^1A_1_DissociativeDecay"); - G4MolecularDissociationChannel* decCh3 = - new G4MolecularDissociationChannel("B^1A_1_AutoIonisation_Channel"); - -//Decay 1 : energy - decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1)); - decCh1->SetProbability(0.3); - -//Decay 2 : 2OH + H_2 - decCh2->AddProduct(H2); - decCh2->AddProduct(OH); - decCh2->AddProduct(OH); - decCh2->SetProbability(0.15); - decCh2->SetDisplacementType( - G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay); - -//Decay 3 : OH + H_3Op + e_aq - decCh3->AddProduct(OH); - decCh3->AddProduct(H3O); - decCh3->AddProduct(e_aq); - decCh3->SetProbability(0.55); - decCh3->SetDisplacementType( - G4DNAWaterDissociationDisplacer::AutoIonisation); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(3); // this is the transition form ground state to - occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1 - - water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ); - water->AddDecayChannel("B^1A_1", decCh1); - water->AddDecayChannel("B^1A_1", decCh2); - water->AddDecayChannel("B^1A_1", decCh3); - -//------------------------------------------------------- -//-------------------Excitation of 3rd layer----------------- - decCh1 = new G4MolecularDissociationChannel( - "Excitation3rdLayer_AutoIonisation_Channel"); - decCh2 = new G4MolecularDissociationChannel( - "Excitation3rdLayer_Relaxation_Channel"); - -//Decay channel 1 : : OH + H_3Op + e_aq - decCh1->AddProduct(OH); - decCh1->AddProduct(H3O); - decCh1->AddProduct(e_aq); - - decCh1->SetProbability(0.5); - decCh1->SetDisplacementType( - G4DNAWaterDissociationDisplacer::AutoIonisation); - -//Decay channel 2 : energy - decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2)); - decCh2->SetProbability(0.5); - -//Electronic configuration of this decay - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(2, 1); - occ->AddElectron(5, 1); - -//Configure the water molecule - water->NewConfigurationWithElectronOccupancy( - "Excitation3rdLayer", *occ); - water->AddDecayChannel("Excitation3rdLayer", decCh1); - water->AddDecayChannel("Excitation3rdLayer", decCh2); - -//------------------------------------------------------- -//-------------------Excitation of 2nd layer----------------- - decCh1 = new G4MolecularDissociationChannel( - "Excitation2ndLayer_AutoIonisation_Channel"); - decCh2 = new G4MolecularDissociationChannel( - "Excitation2ndLayer_Relaxation_Channel"); - -//Decay Channel 1 : : OH + H_3Op + e_aq - decCh1->AddProduct(OH); - decCh1->AddProduct(H3O); - decCh1->AddProduct(e_aq); - - decCh1->SetProbability(0.5); - decCh1->SetDisplacementType( - G4DNAWaterDissociationDisplacer::AutoIonisation); - -//Decay channel 2 : energy - decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3)); - decCh2->SetProbability(0.5); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(1, 1); - occ->AddElectron(5, 1); - - water->NewConfigurationWithElectronOccupancy( - "Excitation2ndLayer", *occ); - water->AddDecayChannel("Excitation2ndLayer", decCh1); - water->AddDecayChannel("Excitation2ndLayer", decCh2); - -//------------------------------------------------------- -//-------------------Excitation of 1st layer----------------- - decCh1 = new G4MolecularDissociationChannel( - "Excitation1stLayer_AutoIonisation_Channel"); - decCh2 = new G4MolecularDissociationChannel( - "Excitation1stLayer_Relaxation_Channel"); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(0, 1); - occ->AddElectron(5, 1); - -//Decay Channel 1 : : OH + H_3Op + e_aq - decCh1->AddProduct(OH); - decCh1->AddProduct(H3O); - decCh1->AddProduct(e_aq); - decCh1->SetProbability(0.5); - decCh1->SetDisplacementType( - G4DNAWaterDissociationDisplacer::AutoIonisation); - -//Decay channel 2 : energy - decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4)); - decCh2->SetProbability(0.5); - - water->NewConfigurationWithElectronOccupancy( - "Excitation1stLayer", *occ); - water->AddDecayChannel("Excitation1stLayer", decCh1); - water->AddDecayChannel("Excitation1stLayer", decCh2); - -///////////////////////////////////////////////////////// -// IONISATION // -///////////////////////////////////////////////////////// -//-------------------------------------------------------- -//------------------- Ionisation ------------------------- - - decCh1 = new G4MolecularDissociationChannel("Ionisation_Channel"); - -//Decay Channel 1 : : OH + H_3Op - decCh1->AddProduct(H3O); - decCh1->AddProduct(OH); - decCh1->SetProbability(1); - decCh1->SetDisplacementType( - G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(4, 1); -// this is a ionized h2O with a hole in its last orbital - water->NewConfigurationWithElectronOccupancy("Ionisation5", *occ); - water->AddDecayChannel("Ionisation5", decCh1); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(3, 1); - water->NewConfigurationWithElectronOccupancy("Ionisation4", *occ); - water->AddDecayChannel("Ionisation4", - new G4MolecularDissociationChannel(*decCh1)); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(2, 1); - water->NewConfigurationWithElectronOccupancy("Ionisation3", *occ); - water->AddDecayChannel("Ionisation3", - new G4MolecularDissociationChannel(*decCh1)); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(1, 1); - water->NewConfigurationWithElectronOccupancy("Ionisation2", *occ); - water->AddDecayChannel("Ionisation2", - new G4MolecularDissociationChannel(*decCh1)); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(0, 1); - water->NewConfigurationWithElectronOccupancy("Ionisation1", *occ); - water->AddDecayChannel("Ionisation1", - new G4MolecularDissociationChannel(*decCh1)); - -////////////////////////////////////////////////////////// -// Dissociative Attachment // -////////////////////////////////////////////////////////// - decCh1 = new G4MolecularDissociationChannel( - "DissociativeAttachment"); - -//Decay 1 : 2OH + H_2 - decCh1->AddProduct(H2); - decCh1->AddProduct(OHm); - decCh1->AddProduct(OH); - decCh1->SetProbability(1); - decCh1->SetDisplacementType( - G4DNAWaterDissociationDisplacer::DissociativeAttachment); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->AddElectron(5, 1); // H_2O^- - water->NewConfigurationWithElectronOccupancy( - "DissociativeAttachment", *occ); - water->AddDecayChannel( - "DissociativeAttachment", decCh1); - - ////////////////////////////////////////////////////////// - // Electron-hole recombination // - ////////////////////////////////////////////////////////// - decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay1"); - decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay2"); - decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay3"); - -//Decay 1 : 2OH + H_2 - decCh1->AddProduct(H2); - decCh1->AddProduct(OH); - decCh1->AddProduct(OH); - decCh1->SetProbability(0.15); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer:: - B1A1_DissociationDecay); - -//Decay 2 : OH + H - decCh2->AddProduct(OH); - decCh2->AddProduct(H); - decCh2->SetProbability(0.55); - decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer:: - A1B1_DissociationDecay); - -//Decay 3 : relaxation - decCh3->SetProbability(0.30); - - const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib"); - assert(pH2Ovib != nullptr); - - water->AddDecayChannel(pH2Ovib, decCh1); - water->AddDecayChannel(pH2Ovib, decCh2); - water->AddDecayChannel(pH2Ovib, decCh3); - - delete occ; + G4ChemDissociationChannels::ConstructDissociationChannels(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAChemistry_option3.cc b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAChemistry_option3.cc index 6355102cd8c..b315db8641a 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4EmDNAChemistry_option3.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4EmDNAChemistry_option3.cc @@ -33,81 +33,42 @@ */ #include "G4EmDNAChemistry_option3.hh" - -#include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" - #include "G4DNAWaterDissociationDisplacer.hh" #include "G4DNAChemistryManager.hh" #include "G4DNAWaterExcitationStructure.hh" #include "G4ProcessManager.hh" - -#include "G4DNAGenericIonsManager.hh" - // *** Processes and models for Geant4-DNA #include "G4DNAElectronSolvation.hh" -#include "G4DNAAttachment.hh" #include "G4DNAVibExcitation.hh" #include "G4DNASancheExcitationModel.hh" - -#include "G4DNAElastic.hh" -#include "G4DNAChampionElasticModel.hh" -#include "G4DNAScreenedRutherfordElasticModel.hh" #include "G4DNAUeharaScreenedRutherfordElasticModel.hh" - #include "G4DNAMolecularDissociation.hh" #include "G4DNABrownianTransportation.hh" #include "G4DNAMolecularReactionTable.hh" - #include "G4DNAMolecularStepByStepModel.hh" #include "G4DNAMolecularIRTModel.hh" #include "G4DNAIndependentReactionTimeModel.hh" - #include "G4VDNAReactionModel.hh" -#include "G4DNASmoluchowskiReactionModel.hh" - #include "G4DNAIRT.hh" - #include "G4DNAElectronHoleRecombination.hh" - // particles - #include "G4Electron.hh" -#include "G4Proton.hh" -#include "G4GenericIon.hh" - #include "G4MoleculeTable.hh" #include "G4H2O.hh" -#include "G4H2.hh" -#include "G4Hydrogen.hh" -#include "G4OH.hh" -#include "G4H3O.hh" -#include "G4Electron_aq.hh" - -#include "G4Oxygen.hh" -#include "G4H2O2.hh" -#include "G4O2.hh" -#include "G4HO2.hh" -#include "G4O3.hh" #include "G4FakeMolecule.hh" - #include "G4PhysicsListHelper.hh" -#include "G4BuilderType.hh" /****/ #include "G4DNAMoleculeEncounterStepper.hh" -#include "G4ProcessVector.hh" #include "G4ProcessTable.hh" -#include "G4DNASecondOrderReaction.hh" #include "G4MolecularConfiguration.hh" /****/ - -#include "G4Scheduler.hh" - // factory #include "G4PhysicsConstructorFactory.hh" +#include "G4ChemDissociationChannels_option1.hh" G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistry_option3); @@ -121,453 +82,16 @@ G4EmDNAChemistry_option3::G4EmDNAChemistry_option3() : //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4EmDNAChemistry_option3::~G4EmDNAChemistry_option3() -{ -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - void G4EmDNAChemistry_option3::ConstructMolecule() { - //----------------------------------- - // G4Electron::Definition(); // safety - - //----------------------------------- - // Create the definition - - G4H2O::Definition(); - G4Hydrogen::Definition(); - G4H3O::Definition(); - G4OH::Definition(); - G4Electron_aq::Definition(); - G4H2O2::Definition(); - G4H2::Definition(); - - G4O2::Definition(); - G4HO2::Definition(); - G4Oxygen::Definition(); - G4O3::Definition(); - - //____________________________________________________________________________ - - G4MoleculeTable::Instance()->CreateConfiguration("H3Op", G4H3O::Definition()); - G4MoleculeTable::Instance()->GetConfiguration("H3Op")->SetDiffusionCoefficient( - 9.46e-9 * (m2/s)); - G4MoleculeTable::Instance()->GetConfiguration("H3Op")->SetVanDerVaalsRadius(0.25*nm); - - G4MoleculeTable::Instance()->CreateConfiguration("OH", G4OH::Definition()); - G4MoleculeTable::Instance()->GetConfiguration("OH")->SetDiffusionCoefficient( - 2.2e-9 * (m2/s)); - G4MoleculeTable::Instance()->GetConfiguration("OH")->SetVanDerVaalsRadius(0.22*nm); - - G4MolecularConfiguration* OHm = G4MoleculeTable::Instance()-> - CreateConfiguration("OHm", // just a tag to store and retrieve from - // G4MoleculeTable - G4OH::Definition(), - -1, // charge - 5.3e-9 * (m2 / s)); - OHm->SetMass(17.0079 * g / Avogadro * c_squared); - OHm->SetVanDerVaalsRadius(0.33*nm); - - - - - G4MoleculeTable::Instance()->CreateConfiguration("e_aq", - G4Electron_aq::Definition()); - G4MoleculeTable::Instance()->GetConfiguration("e_aq")->SetVanDerVaalsRadius(0.50*nm); - - G4MoleculeTable::Instance()->CreateConfiguration("H", - G4Hydrogen::Definition()); - G4MoleculeTable::Instance()->GetConfiguration("H")->SetVanDerVaalsRadius(0.19*nm); - - G4MoleculeTable::Instance()->CreateConfiguration("H2", G4H2::Definition()); - G4MoleculeTable::Instance()->GetConfiguration("H2")->SetDiffusionCoefficient( - 4.8e-9 * (m2/s)); - G4MoleculeTable::Instance()->GetConfiguration("H2")->SetVanDerVaalsRadius(0.14*nm); - - - G4MoleculeTable::Instance()->CreateConfiguration("H2O2", G4H2O2::Definition()); - G4MoleculeTable::Instance()->GetConfiguration("H2O2")->SetDiffusionCoefficient( - 2.3e-9 * (m2/s)); - G4MoleculeTable::Instance()->GetConfiguration("H2O2")->SetVanDerVaalsRadius(0.21*nm); - - // molecules extension (RITRACKS) - - G4MoleculeTable::Instance()->CreateConfiguration("HO2",G4HO2::Definition()); - G4MoleculeTable::Instance()->GetConfiguration("HO2")->SetVanDerVaalsRadius(0.21*nm); - - G4MolecularConfiguration* HO2m = G4MoleculeTable::Instance()-> - CreateConfiguration("HO2m", // just a tag to store and retrieve from - // G4MoleculeTable - G4HO2::Definition(), - -1, // charge - 1.4e-9 * (m2 / s)); - HO2m->SetMass(33.00396 * g / Avogadro * c_squared); - HO2m->SetVanDerVaalsRadius(0.25*nm); - - G4MoleculeTable::Instance()->CreateConfiguration("Oxy",G4Oxygen::Definition()); - G4MoleculeTable::Instance()->GetConfiguration("Oxy")->SetVanDerVaalsRadius(0.20*nm); - - G4MolecularConfiguration* Om = G4MoleculeTable::Instance()-> - CreateConfiguration("Om", // just a tag to store and retrieve from - // G4MoleculeTable - G4Oxygen::Definition(), - -1, // charge - 2.0e-9 * (m2 / s)); - Om->SetMass(15.99829 * g / Avogadro * c_squared); - Om->SetVanDerVaalsRadius(0.25*nm); - - G4MoleculeTable::Instance()->CreateConfiguration("O2",G4O2::Definition()); - G4MoleculeTable::Instance()->GetConfiguration("O2")->SetVanDerVaalsRadius(0.17*nm); - - G4MolecularConfiguration* O2m = G4MoleculeTable::Instance()-> - CreateConfiguration("O2m", // just a tag to store and retrieve from - // G4MoleculeTable - G4O2::Definition(), - -1, // charge - 1.75e-9 * (m2 / s)); - O2m->SetMass(31.99602 * g / Avogadro * c_squared); - O2m->SetVanDerVaalsRadius(0.22*nm); - - G4MoleculeTable::Instance()->CreateConfiguration("O3",G4O3::Definition()); - G4MoleculeTable::Instance()->GetConfiguration("O3")->SetVanDerVaalsRadius(0.20*nm); - - G4MolecularConfiguration* O3m = G4MoleculeTable::Instance()-> - CreateConfiguration("O3m", // just a tag to store and retrieve from - // G4MoleculeTable - G4O3::Definition(), - -1, // charge - 2.0e-9 * (m2 / s)); - O3m->SetMass(47.99375 * g / Avogadro * c_squared); - O3m->SetVanDerVaalsRadius(0.20*nm); - - G4MoleculeTable::Instance()-> - CreateConfiguration("H2O(B)", // just a tag to store and retrieve from - // G4MoleculeTable - G4H2O::Definition(), - 0, // charge - 0 * (m2 / s)); - - G4MoleculeTable::Instance()-> - CreateConfiguration("H3Op(B)", // just a tag to store and retrieve from - // G4MoleculeTable - G4H3O::Definition(), - 1, // charge - 0 * (m2 / s)); - - G4MoleculeTable::Instance()-> - CreateConfiguration("OHm(B)", // just a tag to store and retrieve from - // G4MoleculeTable - G4OH::Definition(), - -1, // charge - 0 * (m2 / s)); - - G4MoleculeTable::Instance()->CreateConfiguration("NoneM",G4FakeMolecule::Definition()); - + G4ChemDissociationChannels_option1::ConstructMolecule(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4EmDNAChemistry_option3::ConstructDissociationChannels() { - //----------------------------------- - //Get the molecular configuration - G4MolecularConfiguration* OH = - G4MoleculeTable::Instance()->GetConfiguration("OH"); - G4MolecularConfiguration* OHm = - G4MoleculeTable::Instance()->GetConfiguration("OHm"); - G4MolecularConfiguration* e_aq = - G4MoleculeTable::Instance()->GetConfiguration("e_aq"); - G4MolecularConfiguration* H2 = - G4MoleculeTable::Instance()->GetConfiguration("H2"); - G4MolecularConfiguration* H3O = - G4MoleculeTable::Instance()->GetConfiguration("H3Op"); - G4MolecularConfiguration* H = - G4MoleculeTable::Instance()->GetConfiguration("H"); - G4MolecularConfiguration* O = - G4MoleculeTable::Instance()->GetConfiguration("Oxy"); - - //------------------------------------- - //Define the decay channels - G4MoleculeDefinition* water = G4H2O::Definition(); - G4MolecularDissociationChannel* decCh1; - G4MolecularDissociationChannel* decCh2; - G4MolecularDissociationChannel* decCh3; - G4MolecularDissociationChannel* decCh4; - G4MolecularDissociationChannel* decCh5; - - G4ElectronOccupancy* occ = new G4ElectronOccupancy( - *(water->GetGroundStateElectronOccupancy())); - - ////////////////////////////////////////////////////////// - // EXCITATIONS // - ////////////////////////////////////////////////////////// - G4DNAWaterExcitationStructure waterExcitation; - //-------------------------------------------------------- - //---------------Excitation on the fifth layer------------ - - decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relaxation"); - decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociativeDecay"); - //Decay 1 : OH + H - decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0)); - decCh1->SetProbability(0.35); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::NoDisplacement); - - decCh2->AddProduct(OH); - decCh2->AddProduct(H); - decCh2->SetProbability(0.65); - decCh2->SetDisplacementType( - G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay); - - occ->RemoveElectron(4, 1); // this is the transition form ground state to - occ->AddElectron(5, 1); // the first unoccupied orbital: A^1B_1 - - water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ); - water->AddDecayChannel("A^1B_1", decCh1); - water->AddDecayChannel("A^1B_1", decCh2); - - //-------------------------------------------------------- - //---------------Excitation on the fourth layer----------- - decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relaxation_Channel"); - decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociativeDecay"); - decCh3 = new G4MolecularDissociationChannel("B^1A_1_AutoIonisation_Channel"); - decCh4 = new G4MolecularDissociationChannel("A^1B_1_DissociativeDecay"); - decCh5 = new G4MolecularDissociationChannel("B^1A_1_DissociativeDecay2"); - - - //Decay 1 : energy - decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1)); - decCh1->SetProbability(0.175); - - //Decay 2 : 2OH + H_2 - decCh2->AddProduct(H2); - decCh2->AddProduct(OH); - decCh2->AddProduct(OH); - decCh2->SetProbability(0.0325); - decCh2->SetDisplacementType( - G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay); - - //Decay 3 : OH + H_3Op + e_aq - decCh3->AddProduct(OH); - decCh3->AddProduct(H3O); - decCh3->AddProduct(e_aq); - decCh3->SetProbability(0.50); - decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); - - //Decay 4 : H + OH - decCh4->AddProduct(H); - decCh4->AddProduct(OH); - decCh4->SetProbability(0.2535); - decCh4->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay); - - //Decay 5 : 2H + O - decCh5->AddProduct(O); - decCh5->AddProduct(H); - decCh5->AddProduct(H); - decCh5->SetProbability(0.039); - decCh5->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay2); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(3); // this is the transition form ground state to - occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1 - - water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ); - water->AddDecayChannel("B^1A_1", decCh1); - water->AddDecayChannel("B^1A_1", decCh2); - water->AddDecayChannel("B^1A_1", decCh3); - water->AddDecayChannel("B^1A_1", decCh4); - water->AddDecayChannel("B^1A_1", decCh5); - - //------------------------------------------------------- - //-------------------Excitation of 3rd layer----------------- - decCh1 = new G4MolecularDissociationChannel( - "Excitation3rdLayer_AutoIonisation_Channel"); - decCh2 = new G4MolecularDissociationChannel( - "Excitation3rdLayer_Relaxation_Channel"); - - //Decay channel 1 : : OH + H_3Op + e_aq - decCh1->AddProduct(OH); - decCh1->AddProduct(H3O); - decCh1->AddProduct(e_aq); - - decCh1->SetProbability(0.5); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); - - //Decay channel 2 : energy - decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2)); - decCh2->SetProbability(0.5); - - //Electronic configuration of this decay - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(2, 1); - occ->AddElectron(5, 1); - - //Configure the water molecule - water->NewConfigurationWithElectronOccupancy("Excitation3rdLayer", *occ); - water->AddDecayChannel("Excitation3rdLayer", decCh1); - water->AddDecayChannel("Excitation3rdLayer", decCh2); - - //------------------------------------------------------- - //-------------------Excitation of 2nd layer----------------- - decCh1 = new G4MolecularDissociationChannel( - "Excitation2ndLayer_AutoIonisation_Channel"); - decCh2 = new G4MolecularDissociationChannel( - "Excitation2ndLayer_Relaxation_Channel"); - - //Decay Channel 1 : : OH + H_3Op + e_aq - decCh1->AddProduct(OH); - decCh1->AddProduct(H3O); - decCh1->AddProduct(e_aq); - - decCh1->SetProbability(0.5); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); - - //Decay channel 2 : energy - decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3)); - decCh2->SetProbability(0.5); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(1, 1); - occ->AddElectron(5, 1); - - water->NewConfigurationWithElectronOccupancy("Excitation2ndLayer", *occ); - water->AddDecayChannel("Excitation2ndLayer", decCh1); - water->AddDecayChannel("Excitation2ndLayer", decCh2); - - //------------------------------------------------------- - //-------------------Excitation of 1st layer----------------- - decCh1 = new G4MolecularDissociationChannel( - "Excitation1stLayer_AutoIonisation_Channel"); - decCh2 = new G4MolecularDissociationChannel( - "Excitation1stLayer_Relaxation_Channel"); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(0, 1); - occ->AddElectron(5, 1); - - //Decay Channel 1 : : OH + H_3Op + e_aq - decCh1->AddProduct(OH); - decCh1->AddProduct(H3O); - decCh1->AddProduct(e_aq); - decCh1->SetProbability(0.5); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation); - - //Decay channel 2 : energy - decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4)); - decCh2->SetProbability(0.5); - - water->NewConfigurationWithElectronOccupancy("Excitation1stLayer", *occ); - water->AddDecayChannel("Excitation1stLayer", decCh1); - water->AddDecayChannel("Excitation1stLayer", decCh2); - - ///////////////////////////////////////////////////////// - // IONISATION // - ///////////////////////////////////////////////////////// - //-------------------------------------------------------- - //------------------- Ionisation ------------------------- - - decCh1 = new G4MolecularDissociationChannel("Ionisation_Channel"); - - //Decay Channel 1 : : OH + H_3Op - decCh1->AddProduct(H3O); - decCh1->AddProduct(OH); - decCh1->SetProbability(1); - decCh1->SetDisplacementType( - G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(4, 1); - // this is a ionized h2O with a hole in its last orbital - water->NewConfigurationWithElectronOccupancy("Ionisation5", *occ); - water->AddDecayChannel("Ionisation5", - decCh1); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(3, 1); - water->NewConfigurationWithElectronOccupancy("Ionisation4", *occ); - water->AddDecayChannel("Ionisation4", - new G4MolecularDissociationChannel(*decCh1)); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(2, 1); - water->NewConfigurationWithElectronOccupancy("Ionisation3", *occ); - water->AddDecayChannel("Ionisation3", - new G4MolecularDissociationChannel(*decCh1)); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(1, 1); - water->NewConfigurationWithElectronOccupancy("Ionisation2", *occ); - water->AddDecayChannel("Ionisation2", - new G4MolecularDissociationChannel(*decCh1)); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->RemoveElectron(0, 1); - water->NewConfigurationWithElectronOccupancy("Ionisation1", *occ); - water->AddDecayChannel("Ionisation1", - new G4MolecularDissociationChannel(*decCh1)); - - ////////////////////////////////////////////////////////// - // Dissociative Attachment // - ////////////////////////////////////////////////////////// - decCh1 = new G4MolecularDissociationChannel("DissociativeAttachment_ch1"); - - //Decay 1 : OHm + H - decCh1->AddProduct(H2); - decCh1->AddProduct(OHm); - decCh1->AddProduct(OH); - decCh1->SetProbability(1); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer:: - DissociativeAttachment); - - *occ = *(water->GetGroundStateElectronOccupancy()); - occ->AddElectron(5,1); // H_2O^- - - water->NewConfigurationWithElectronOccupancy("DissociativeAttachment_ch1", *occ); - water->AddDecayChannel("DissociativeAttachment_ch1", decCh1); - - ////////////////////////////////////////////////////////// - // Electron-hole recombination // - ////////////////////////////////////////////////////////// - decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay1"); - decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay2"); - decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay3"); - decCh4 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay4"); - - //Decay 1 : 2OH + H_2 - decCh1->AddProduct(H2); - decCh1->AddProduct(OH); - decCh1->AddProduct(OH); - decCh1->SetProbability(0.1365); - decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer:: - B1A1_DissociationDecay); - - //Decay 2 : OH + H - decCh2->AddProduct(OH); - decCh2->AddProduct(H); - decCh2->SetProbability(0.3575); - decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer:: - A1B1_DissociationDecay); - - //Decay 3 : 2H + O(3p) - decCh3->AddProduct(O); - decCh3->AddProduct(H); - decCh3->AddProduct(H); - decCh3->SetProbability(0.156); - decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer:: - B1A1_DissociationDecay2); - - //Decay 4 : relaxation - decCh4->SetProbability(0.35); - - const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib"); - assert(pH2Ovib != nullptr); - - water->AddDecayChannel(pH2Ovib, decCh1); - water->AddDecayChannel(pH2Ovib, decCh2); - water->AddDecayChannel(pH2Ovib, decCh3); - water->AddDecayChannel(pH2Ovib, decCh4); - - delete occ; + G4ChemDissociationChannels_option1::ConstructDissociationChannels(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/physics_lists/constructors/electromagnetic/src/G4EmModelActivator.cc b/source/physics_lists/constructors/electromagnetic/src/G4EmModelActivator.cc index fb9fea4744a..7d95aee15bc 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4EmModelActivator.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4EmModelActivator.cc @@ -67,6 +67,7 @@ #include "G4EmProcessSubType.hh" #include "G4PhysicsListHelper.hh" #include "G4EmParticleList.hh" +#include "G4EmUtility.hh" #include "G4MicroElecElastic.hh" #include "G4MicroElecElasticModel.hh" @@ -88,6 +89,7 @@ #include "G4ionIonisation.hh" #include "G4KleinNishinaModel.hh" +#include "G4GammaGeneralProcess.hh" #include "G4CoulombScattering.hh" #include "G4eCoulombScatteringModel.hh" #include "G4WentzelVIModel.hh" @@ -149,7 +151,7 @@ void G4EmModelActivator::ActivateEmOptions() const std::vector& regnamesPhys = theParameters->RegionsPhysics(); std::size_t nreg = regnamesPhys.size(); if(0 == nreg) { return; } - G4int verbose = theParameters->Verbose() - 1; + G4int verbose = theParameters->Verbose() - 1; if(verbose > 0) { G4cout << "### G4EmModelActivator::ActivateEmOptions for " << nreg << " regions" << G4endl; @@ -165,7 +167,8 @@ void G4EmModelActivator::ActivateEmOptions() G4EmConfigurator* em_config = man->EmConfigurator(); G4VAtomDeexcitation* adeexc = man->AtomDeexcitation(); G4ParticleTable* table = G4ParticleTable::GetParticleTable(); - G4VEmModel* mod; + G4VEmModel* mod = nullptr; + G4VEmProcess* proc = nullptr; // high energy limit for low-energy e+- model of msc G4double mscEnergyLimit = theParameters->MscEnergyLimit(); @@ -177,12 +180,13 @@ void G4EmModelActivator::ActivateEmOptions() G4double highEnergy = theParameters->MaxKinEnergy(); for(std::size_t i=0; i 0) { - G4cout << i << ". region <" << reg << ">; type <" << typesPhys[i] << "> " - << G4endl; + G4cout << i << ". region <" << reg << ">; physics type <" + << typesPhys[i] << "> region ptr: " << region << G4endl; } - + if(baseName == typesPhys[i]) { continue; } if("G4EmStandard" == typesPhys[i]) { @@ -205,35 +209,30 @@ void G4EmModelActivator::ActivateEmOptions() G4UrbanMscModel* msc = new G4UrbanMscModel(); SetMscParameters(elec, msc, typesPhys[i]); em_config->SetExtraEmModel("e-", "msc", msc, reg); - FindOrAddProcess(elec, "CoulombScat"); - em_config->SetExtraEmModel("e-", "CoulombScat", dummy, reg); + proc = FindOrAddProcess(elec, "CoulombScat"); + proc->AddEmModel(-1, dummy, region); msc = new G4UrbanMscModel(); SetMscParameters(posi, msc, typesPhys[i]); em_config->SetExtraEmModel("e+", "msc", msc, reg); - FindOrAddProcess(posi, "CoulombScat"); - em_config->SetExtraEmModel("e+", "CoulombScat", dummy, reg); + proc = FindOrAddProcess(posi, "CoulombScat"); + proc->AddEmModel(-1, dummy, region); msc = new G4UrbanMscModel(); SetMscParameters(prot, msc, typesPhys[i]); em_config->SetExtraEmModel("proton", "msc", msc, reg); - FindOrAddProcess(prot, "CoulombScat"); - em_config->SetExtraEmModel("proton", "CoulombScat", dummy, reg); + proc = FindOrAddProcess(prot, "CoulombScat"); + proc->AddEmModel(-1, dummy, region); theParameters->SetNumberOfBinsPerDecade(20); if(G4Threading::IsMasterThread()) { theParameters->SetDeexActiveRegion(reg, true, false, false); } theParameters->DefineRegParamForDeex(adeexc); - FindOrAddProcess(phot, "Rayl"); - mod = new G4LivermoreRayleighModel(); - em_config->SetExtraEmModel("gamma", "Rayl", mod, reg); - FindOrAddProcess(phot, "phot"); - mod = new G4LivermorePhotoElectricModel(); - em_config->SetExtraEmModel("gamma", "phot", mod, reg); - FindOrAddProcess(phot, "compt"); - mod = new G4KleinNishinaModel(); - em_config->SetExtraEmModel("gamma", "compt", mod, reg); + proc = FindOrAddProcess(phot, "Rayl"); + proc->AddEmModel(-1, new G4LivermoreRayleighModel(), region); + proc = FindOrAddProcess(phot, "compt"); + proc->AddEmModel(-1, new G4KleinNishinaModel(), region); } else if("G4EmStandard_opt4" == typesPhys[i]) { G4VMscModel* msc = new G4GoudsmitSaundersonMscModel(); @@ -249,20 +248,15 @@ void G4EmModelActivator::ActivateEmOptions() } theParameters->DefineRegParamForDeex(adeexc); - FindOrAddProcess(phot, "Rayl"); - mod = new G4LivermoreRayleighModel(); - em_config->SetExtraEmModel("gamma", "Rayl", mod, reg); - FindOrAddProcess(phot, "phot"); - mod = new G4LivermorePhotoElectricModel(); - FindOrAddProcess(phot, "compt"); - mod = new G4KleinNishinaModel(); - em_config->SetExtraEmModel("gamma", "compt", mod, reg); + proc = FindOrAddProcess(phot, "Rayl"); + proc->AddEmModel(-1, new G4LivermoreRayleighModel(), region); + proc = FindOrAddProcess(phot, "compt"); + proc->AddEmModel(-1, new G4KleinNishinaModel(), region); mod = new G4LowEPComptonModel(); mod->SetHighEnergyLimit(20*MeV); - em_config->SetExtraEmModel("gamma", "compt", mod, reg); - FindOrAddProcess(phot, "conv"); - mod = new G4BetheHeitler5DModel(); - em_config->SetExtraEmModel("gamma", "conv", mod, reg); + proc->AddEmModel(-2, mod, region); + proc = FindOrAddProcess(phot, "conv"); + proc->AddEmModel(-1, new G4BetheHeitler5DModel(), region); } else if("G4EmStandardGS" == typesPhys[i]) { G4GoudsmitSaundersonMscModel* msc = new G4GoudsmitSaundersonMscModel(); @@ -285,17 +279,31 @@ void G4EmModelActivator::ActivateEmOptions() } theParameters->DefineRegParamForDeex(adeexc); - } else if("G4EmStandardSS" == typesPhys[i] && - baseName != "G4EmStandard_opt3") { + } else if("G4EmStandardSS" == typesPhys[i]) { G4EmParticleList emList; - for(const auto& particleName : emList.PartNames()) { + for(const auto& particleName : emList.EmChargedPartNames()) { G4ParticleDefinition* particle = table->FindParticle(particleName); - if(particle && 0.0 != particle->GetPDGCharge()) { - FindOrAddProcess(particle, "CoulombScat"); - G4eCoulombScatteringModel* sc = new G4eCoulombScatteringModel(); - sc->SetPolarAngleLimit(0.0); - sc->SetLocked(true); - em_config->SetExtraEmModel(particleName, "CoulombScat", sc, reg); + if(nullptr != particle && 0.0 != particle->GetPDGCharge()) { + proc = FindOrAddProcess(particle, "CoulombScat"); + if(nullptr != proc) { + proc->AddEmModel(-1, new G4DummyModel(), region); + } + auto pm = particle->GetProcessManager(); + proc = new G4CoulombScattering("SingleCoulombScat", false); + pm->AddDiscreteProcess(proc); + proc->SetEmModel(new G4DummyModel()); + G4VEmModel* scmod = nullptr; + if(particle->GetPDGMass() > CLHEP::GeV || + particle->GetParticleType() == "nucleus") { + scmod = new G4IonCoulombScatteringModel(); + } else { + scmod = new G4eCoulombScatteringModel(false); + } + scmod->SetPolarAngleLimit(0.0); + scmod->SetLocked(true); + proc->AddEmModel(-1, scmod, region); + + // multiple scattering should be disabled if(particleName == "mu+" || particleName == "mu-") { em_config->SetExtraEmModel(particleName, "muMsc", new G4DummyModel(), reg); @@ -753,24 +761,31 @@ void G4EmModelActivator::SetMscParameters(const G4ParticleDefinition* part, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void G4EmModelActivator::FindOrAddProcess(const G4ParticleDefinition* part, - const G4String& name) +G4VEmProcess* +G4EmModelActivator::FindOrAddProcess(const G4ParticleDefinition* part, + const G4String& name) { - G4ProcessManager* pm = part->GetProcessManager(); - G4ProcessVector* pv = pm->GetProcessList(); - G4int nproc = pm->GetProcessListLength(); - for(G4int i = 0; iGetProcessName() == name) { return; } + G4VEmProcess* proc = nullptr; + auto pm = part->GetProcessManager(); + auto emproc = pm->GetProcessList(); + G4int n = (G4int)emproc->size(); + for(auto i=0; iGetPDGEncoding() == 22 && + ptr->GetProcessSubType() == fGammaGeneralProcess) { + proc = (static_cast(ptr))->GetEmProcess(name); + } else if(ptr->GetProcessName() == name) { + proc = dynamic_cast(ptr); + } + if(nullptr != proc) { return proc; } } - if(name == "CoulombScat") { - G4CoulombScattering* cs = new G4CoulombScattering(); - cs->SetEmModel(new G4DummyModel()); - pm->AddDiscreteProcess(cs); - } else if(name == "Rayl") { + if(name == "Rayl") { G4RayleighScattering* rs = new G4RayleighScattering(); rs->SetEmModel(new G4DummyModel()); pm->AddDiscreteProcess(rs); + return rs; } + return proc; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/physics_lists/constructors/electromagnetic/src/G4EmParticleList.cc b/source/physics_lists/constructors/electromagnetic/src/G4EmParticleList.cc index 1f5d75722ee..a37e53850aa 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4EmParticleList.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4EmParticleList.cc @@ -53,13 +53,22 @@ G4EmParticleList::G4EmParticleList() "Bc-", "omega_b-","anti_omega_b-", "sigma_b+", "sigma_b-", "anti_sigma_b+", "anti_sigma_b-", "xi_b-", "anti_xi_b-" }; -} -G4EmParticleList::~G4EmParticleList() -{} + cNames = + { + "e-", "e+", "mu+", "mu-", "pi+", + "pi-", "kaon+", "kaon-", "proton", "anti_proton", + "alpha", "He3", "GenericIon", "deuteron", "triton" + }; +} const std::vector& G4EmParticleList::PartNames() const { return pNames; } +const std::vector& G4EmParticleList::EmChargedPartNames() const +{ + return cNames; +} + diff --git a/source/physics_lists/constructors/electromagnetic/src/G4EmStandardPhysicsSS.cc b/source/physics_lists/constructors/electromagnetic/src/G4EmStandardPhysicsSS.cc index 0f7ade81fad..c4b313a1ce3 100644 --- a/source/physics_lists/constructors/electromagnetic/src/G4EmStandardPhysicsSS.cc +++ b/source/physics_lists/constructors/electromagnetic/src/G4EmStandardPhysicsSS.cc @@ -182,11 +182,11 @@ void G4EmStandardPhysicsSS::ConstructProcess() // e- particle = G4Electron::Electron(); - G4CoulombScattering* ss = new G4CoulombScattering(); + G4CoulombScattering* ss = new G4CoulombScattering(false); if(param->UseMottCorrection()) { ss->SetEmModel(new G4eDPWACoulombScatteringModel()); } else { - ss->SetEmModel(new G4eCoulombScatteringModel()); + ss->SetEmModel(new G4eCoulombScatteringModel(false)); } ph->RegisterProcess(new G4eIonisation(), particle); ph->RegisterProcess(new G4eBremsstrahlung(), particle); @@ -198,11 +198,11 @@ void G4EmStandardPhysicsSS::ConstructProcess() // e+ particle = G4Positron::Positron(); - ss = new G4CoulombScattering(); + ss = new G4CoulombScattering(false); if(param->UseMottCorrection()) { ss->SetEmModel(new G4eDPWACoulombScatteringModel()); } else { - ss->SetEmModel(new G4eCoulombScatteringModel()); + ss->SetEmModel(new G4eCoulombScatteringModel(false)); } ph->RegisterProcess(new G4eIonisation(), particle); ph->RegisterProcess(new G4eBremsstrahlung(), particle); @@ -217,7 +217,8 @@ void G4EmStandardPhysicsSS::ConstructProcess() ionIoni->SetFluctModel(fluc); ionIoni->SetEmModel(new G4LindhardSorensenIonModel()); ph->RegisterProcess(ionIoni, particle); - ph->RegisterProcess(new G4CoulombScattering(), particle); + ss = new G4CoulombScattering(false); + ph->RegisterProcess(ss, particle); // muons, hadrons, ions G4EmBuilder::ConstructChargedSS(hmsc); diff --git a/source/physics_lists/constructors/factory/GNUmakefile b/source/physics_lists/constructors/factory/GNUmakefile deleted file mode 100644 index 5f14365396b..00000000000 --- a/source/physics_lists/constructors/factory/GNUmakefile +++ /dev/null @@ -1,96 +0,0 @@ -# --------------------------------------------------------------------------- -# GNUmakefile for physics_lists/constructors/factory library. -# Gunter Folger 10-Jan-2012. -# --------------------------------------------------------------------------- - -name := G4phys_ctor_factory - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/biasing/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/run/include \ - -I$(G4BASE)/physics_lists/builders/include \ - -I$(G4BASE)/physics_lists/constructors/decay/include \ - -I$(G4BASE)/physics_lists/constructors/electromagnetic/include \ - -I$(G4BASE)/physics_lists/constructors/gamma_lepto_nuclear/include \ - -I$(G4BASE)/physics_lists/constructors/hadron_elastic/include \ - -I$(G4BASE)/physics_lists/constructors/hadron_inelastic/include \ - -I$(G4BASE)/physics_lists/constructors/limiters/include \ - -I$(G4BASE)/physics_lists/constructors/ions/include \ - -I$(G4BASE)/physics_lists/constructors/stopping/include \ - -I$(G4BASE)/physics_lists/util/include \ - -I$(G4BASE)/processes/biasing/importance/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/transportation/include \ - -I$(G4BASE)/processes/decay/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/optical/include \ - -I$(G4BASE)/processes/electromagnetic/highenergy/include \ - -I$(G4BASE)/processes/electromagnetic/standard/include \ - -I$(G4BASE)/processes/electromagnetic/muons/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/electromagnetic/xrays/include \ - -I$(G4BASE)/processes/electromagnetic/lowenergy/include \ - -I$(G4BASE)/processes/electromagnetic/dna/management/include \ - -I$(G4BASE)/processes/electromagnetic/dna/molecules/management/include \ - -I$(G4BASE)/processes/electromagnetic/dna/molecules/types/include \ - -I$(G4BASE)/processes/electromagnetic/dna/models/include \ - -I$(G4BASE)/processes/electromagnetic/dna/processes/include \ - -I$(G4BASE)/processes/electromagnetic/dna/utils/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/stopping/include \ - -I$(G4BASE)/processes/hadronic/management/include \ - -I$(G4BASE)/processes/hadronic/processes/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/models/binary_cascade/include \ - -I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \ - -I$(G4BASE)/processes/hadronic/models/qmd/include \ - -I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/utils/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/incl_physics/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/interface/include \ - -I$(G4BASE)/processes/hadronic/models/lend/include \ - -I$(G4BASE)/processes/hadronic/models/lepto_nuclear/include \ - -I$(G4BASE)/processes/hadronic/models/particle_hp/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/management/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \ - -I$(G4BASE)/processes/hadronic/models/photolepton_hadron/muon_nuclear/include \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \ - -I$(G4BASE)/processes/hadronic/models/radioactive_decay/include \ - -I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/physics_lists/constructors/factory/History b/source/physics_lists/constructors/factory/History index 116c47f9d82..7e442abf914 100644 --- a/source/physics_lists/constructors/factory/History +++ b/source/physics_lists/constructors/factory/History @@ -5,6 +5,9 @@ which **must** added in reverse chronological order (newest at the top). It must be used as a substitute for writing good git commit messages! +## 2023-05-15 Alberto Ribon (phys-ctor-fact-V11-01-00) +- Added G4StoppingPhysicsWithINCLXX in G4RegisterPhysicsConstructors . + ## 2021-12-10 Ben Morgan (phys-ctor-fact-V11-00-00) - Change to new Markdown History format diff --git a/source/physics_lists/constructors/factory/include/G4RegisterPhysicsConstructors.icc b/source/physics_lists/constructors/factory/include/G4RegisterPhysicsConstructors.icc index f7c785561a4..3fb65400e6d 100644 --- a/source/physics_lists/constructors/factory/include/G4RegisterPhysicsConstructors.icc +++ b/source/physics_lists/constructors/factory/include/G4RegisterPhysicsConstructors.icc @@ -267,6 +267,9 @@ G4_REFERENCE_PHYSCONSTR_FACTORY(G4StepLimiterPhysics); //#include "G4StoppingPhysics.hh" G4_REFERENCE_PHYSCONSTR_FACTORY(G4StoppingPhysics); +//#include "G4StoppingPhysicsWithINCLXX.hh" +G4_REFERENCE_PHYSCONSTR_FACTORY(G4StoppingPhysicsWithINCLXX); + //#include "G4WeightWindowBiasing.hh" G4_REFERENCE_PHYSCONSTR_FACTORY(G4WeightWindowBiasing); diff --git a/source/physics_lists/constructors/gamma_lepto_nuclear/GNUmakefile b/source/physics_lists/constructors/gamma_lepto_nuclear/GNUmakefile deleted file mode 100644 index d901b77459f..00000000000 --- a/source/physics_lists/constructors/gamma_lepto_nuclear/GNUmakefile +++ /dev/null @@ -1,73 +0,0 @@ -# --------------------------------------------------------------------------- -# GNUmakefile for physics_lists/constructors/electromagnetic library. -# Gunter Folger 10-Jan-2012. -# --------------------------------------------------------------------------- - -name := G4phys_ctor_glnuclear - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/run/include \ - -I$(G4BASE)/physics_lists/builders/include \ - -I$(G4BASE)/physics_lists/constructors/electromagnetic/include \ - -I$(G4BASE)/physics_lists/constructors/factory/include \ - -I$(G4BASE)/physics_lists/util/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/transportation/include \ - -I$(G4BASE)/processes/decay/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/electromagnetic/highenergy/include \ - -I$(G4BASE)/processes/electromagnetic/muons/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/electromagnetic/xrays/include \ - -I$(G4BASE)/processes/optical/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/management/include \ - -I$(G4BASE)/processes/hadronic/models/binary_cascade/include \ - -I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \ - -I$(G4BASE)/processes/hadronic/models/qmd/include \ - -I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/gamma_nuclear/include \ - -I$(G4BASE)/processes/hadronic/models/lend/include \ - -I$(G4BASE)/processes/hadronic/models/lepto_nuclear/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/management/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \ - -I$(G4BASE)/processes/hadronic/models/radioactive_decay/include \ - -I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \ - -I$(G4BASE)/processes/hadronic/processes/include \ - -I$(G4BASE)/processes/hadronic/util/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/physics_lists/constructors/gamma_lepto_nuclear/History b/source/physics_lists/constructors/gamma_lepto_nuclear/History index c5f0736a1a4..027f687411d 100644 --- a/source/physics_lists/constructors/gamma_lepto_nuclear/History +++ b/source/physics_lists/constructors/gamma_lepto_nuclear/History @@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-02-12 Vladimir Grichine (phys-ctor-glnuclear-V11-01-00) +- G4EmExtraPhysics - biasing is activated in processes, not XS + ## 2022-11-03 Vladimir Grichine (phys-ctor-glnuclear-V11-00-07) - G4EmExtraPhysics - update for tau-neutrino nucleus processes diff --git a/source/physics_lists/constructors/gamma_lepto_nuclear/src/G4EmExtraPhysics.cc b/source/physics_lists/constructors/gamma_lepto_nuclear/src/G4EmExtraPhysics.cc index c54f3720cc4..cffe344c900 100644 --- a/source/physics_lists/constructors/gamma_lepto_nuclear/src/G4EmExtraPhysics.cc +++ b/source/physics_lists/constructors/gamma_lepto_nuclear/src/G4EmExtraPhysics.cc @@ -377,7 +377,6 @@ void G4EmExtraPhysics::ConstructProcess() else { theNuEleProcess->SetBiasingFactors(fNuEleCcBias,fNuEleNcBias); - theNuEleTotXsc->SetBiasingFactors(fNuEleCcBias,fNuEleNcBias); } theNuEleProcess->AddDataSet(theNuEleTotXsc); diff --git a/source/physics_lists/constructors/hadron_elastic/GNUmakefile b/source/physics_lists/constructors/hadron_elastic/GNUmakefile deleted file mode 100644 index 72211729291..00000000000 --- a/source/physics_lists/constructors/hadron_elastic/GNUmakefile +++ /dev/null @@ -1,56 +0,0 @@ -# --------------------------------------------------------------------------- -# GNUmakefile for physics_lists/constructors/electromagnetic library. -# Gunter Folger 10-Jan-2012. -# --------------------------------------------------------------------------- - -name := G4phys_ctor_helastic - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4PROCESSES_EXPORT - -ifdef G4LIB_BUILD_EXPAT -CPPFLAGS += -I$(G4BASE)/externals/expat/include -endif - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/run/include \ - -I$(G4BASE)/physics_lists/builders/include \ - -I$(G4BASE)/physics_lists/util/include \ - -I$(G4BASE)/physics_lists/constructors/factory/include \ - -I$(G4BASE)/physics_lists/constructors/hadron_inelastic/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/transportation/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/stopping/include \ - -I$(G4BASE)/processes/hadronic/management/include \ - -I$(G4BASE)/processes/hadronic/processes/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \ - -I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \ - -I$(G4BASE)/processes/hadronic/models/lend/include \ - -I$(G4BASE)/processes/hadronic/models/particle_hp/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/physics_lists/constructors/hadron_elastic/History b/source/physics_lists/constructors/hadron_elastic/History index f0ce06b985f..c5f1cd996e5 100644 --- a/source/physics_lists/constructors/hadron_elastic/History +++ b/source/physics_lists/constructors/hadron_elastic/History @@ -6,6 +6,14 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-04-13 Alberto Ribon (phys-ctor-helastic-V11-01-00) +- Created new class G4HadronElasticPhysicsHPT, which inherits from + G4HadronElasticPhysicsHP and activates the special treatment of elastic + scattering of thermal neutrons. +- G4HadronElasticPhysicsHP : changed the method ConstructProcess from "final" + to "override", to be able to define the ConstructProcess method for the + derived class G4HadronElasticPhysicsHPT. + ## 2022-11-24 Gabriele Cosmo (phys-ctor-helastic-V11-00-03) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/physics_lists/constructors/hadron_elastic/README b/source/physics_lists/constructors/hadron_elastic/README index c5d0ad2fcbb..589f748b37a 100644 --- a/source/physics_lists/constructors/hadron_elastic/README +++ b/source/physics_lists/constructors/hadron_elastic/README @@ -37,6 +37,14 @@ below 20 MeV, NeutronHP elastic is used (for both cross section and final-state model). + G4HadronElasticPhysicsHPT + ------------------------- + As G4HadronElasticPhysicsHP, with the only difference that for neutrons + below 4 eV, a special treatment of elastic scattering is activated. + This special treatment, called Thermal Scattering Law (TSL), is based on + the S(alpha, beta) approach, which relieas on both experimental measurements + and molecular dynamics calculations. + G4HadronElasticPhysicsLEND -------------------------- As G4HadronElasticPhysics, with the only difference that for neutrons diff --git a/source/physics_lists/constructors/hadron_elastic/include/G4HadronElasticPhysicsHP.hh b/source/physics_lists/constructors/hadron_elastic/include/G4HadronElasticPhysicsHP.hh index 59fdc45dc1a..d3781442b91 100644 --- a/source/physics_lists/constructors/hadron_elastic/include/G4HadronElasticPhysicsHP.hh +++ b/source/physics_lists/constructors/hadron_elastic/include/G4HadronElasticPhysicsHP.hh @@ -51,7 +51,7 @@ public: // This method will be invoked in the Construct() method. // each physics process will be instantiated and // registered to the process manager of each particle type - void ConstructProcess() final; + void ConstructProcess() override; G4HadronElasticPhysicsHP(G4HadronElasticPhysicsHP &) = delete; G4HadronElasticPhysicsHP & operator=(const G4HadronElasticPhysicsHP &right) = delete; diff --git a/source/physics_lists/constructors/hadron_elastic/include/G4HadronElasticPhysicsHPT.hh b/source/physics_lists/constructors/hadron_elastic/include/G4HadronElasticPhysicsHPT.hh new file mode 100644 index 00000000000..3baeb2da27a --- /dev/null +++ b/source/physics_lists/constructors/hadron_elastic/include/G4HadronElasticPhysicsHPT.hh @@ -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. * +// ******************************************************************** +// +// +//--------------------------------------------------------------------------- +// +// ClassName: G4HadronElasticPhysicsHPT +// +// Author: Alberto Ribon (CERN), April 2023 +// +// This class inherits from G4HadronElasticPhysicsHP and activates +// the special treatment of elastic scattering of thermal neutrons +// (i.e. with kinetic energy below 4 eV). +// This special treatment, called Thermal Scattering Law (TSL), is based on +// the S(alpha, beta) approach, which relies on both experimental measurements +// and molecular dynamics calculations. +// +// Modified: +// +//---------------------------------------------------------------------------- +// + +#ifndef G4HadronElasticPhysicsHPT_h +#define G4HadronElasticPhysicsHPT_h 1 + +#include "G4HadronElasticPhysicsHP.hh" + + +class G4HadronElasticPhysicsHPT : public G4HadronElasticPhysicsHP { + public: + explicit G4HadronElasticPhysicsHPT( G4int ver = 1 ); + virtual ~G4HadronElasticPhysicsHPT() = default; + void ConstructProcess() final; + G4HadronElasticPhysicsHPT( G4HadronElasticPhysicsHPT & ) = delete; + G4HadronElasticPhysicsHPT & operator=( const G4HadronElasticPhysicsHPT &right ) = delete; +}; + + +#endif diff --git a/source/physics_lists/constructors/hadron_elastic/sources.cmake b/source/physics_lists/constructors/hadron_elastic/sources.cmake index 2cfb7ca483b..295d8639da3 100644 --- a/source/physics_lists/constructors/hadron_elastic/sources.cmake +++ b/source/physics_lists/constructors/hadron_elastic/sources.cmake @@ -7,6 +7,7 @@ geant4_add_module(G4phys_ctor_helastic G4HadronDElasticPhysics.hh G4HadronElasticPhysics.hh G4HadronElasticPhysicsHP.hh + G4HadronElasticPhysicsHPT.hh G4HadronElasticPhysicsLEND.hh G4HadronElasticPhysicsXS.hh G4HadronHElasticPhysics.hh @@ -18,6 +19,7 @@ geant4_add_module(G4phys_ctor_helastic G4HadronDElasticPhysics.cc G4HadronElasticPhysics.cc G4HadronElasticPhysicsHP.cc + G4HadronElasticPhysicsHPT.cc G4HadronElasticPhysicsLEND.cc G4HadronElasticPhysicsXS.cc G4HadronHElasticPhysics.cc diff --git a/source/physics_lists/constructors/hadron_elastic/src/G4HadronElasticPhysicsHPT.cc b/source/physics_lists/constructors/hadron_elastic/src/G4HadronElasticPhysicsHPT.cc new file mode 100644 index 00000000000..97228022589 --- /dev/null +++ b/source/physics_lists/constructors/hadron_elastic/src/G4HadronElasticPhysicsHPT.cc @@ -0,0 +1,87 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +//--------------------------------------------------------------------------- +// +// ClassName: G4HadronElasticPhysicsHPT +// +// Author: Alberto Ribon (CERN), April 2023 +// +// This class inherits from G4HadronElasticPhysicsHP and activates +// the special treatment of elastic scattering of thermal neutrons +// (i.e. with kinetic energy below 4 eV). +// This special treatment, called Thermal Scattering Law (TSL), is based on +// the S(alpha, beta) approach, which relies on both experimental measurements +// and molecular dynamics calculations. +// +// Modified: +// +//---------------------------------------------------------------------------- +// + +#include "G4HadronElasticPhysicsHPT.hh" +#include "G4SystemOfUnits.hh" +#include "G4Neutron.hh" +#include "G4ParticleDefinition.hh" +#include "G4HadronicProcess.hh" +#include "G4ParticleHPThermalScattering.hh" +#include "G4ParticleHPThermalScatteringData.hh" +#include "G4HadronicParameters.hh" +#include "G4PhysListUtil.hh" +#include "G4PhysicsConstructorFactory.hh" + + +G4_DECLARE_PHYSCONSTR_FACTORY( G4HadronElasticPhysicsHPT ); + + +G4HadronElasticPhysicsHPT::G4HadronElasticPhysicsHPT( G4int ver ) : G4HadronElasticPhysicsHP( ver ) { + if ( ver > 1 ) G4cout << "### G4HadronElasticPhysicsHPT: " << GetPhysicsName() << G4endl; +} + + +void G4HadronElasticPhysicsHPT::ConstructProcess() { + G4HadronElasticPhysicsHP::ConstructProcess(); + const G4Neutron* neutron = G4Neutron::Neutron(); + G4HadronicProcess* neutronElasticProcess = G4PhysListUtil::FindElasticProcess( neutron ); + if ( neutronElasticProcess == nullptr ) { + G4cout << "### " << GetPhysicsName() + << " WARNING: Fail to add thermal neutron scattering" << G4endl; + return; + } + std::size_t sizeInteractionList = neutronElasticProcess->GetHadronicInteractionList().size(); + if ( sizeInteractionList < 1 ) { + G4cout << "### " << GetPhysicsName() + << " WARNING: Fail to add thermal neutron scattering ! sizeInteractionList=" + << sizeInteractionList << G4endl; + return; + } + neutronElasticProcess->GetHadronicInteractionList()[ sizeInteractionList-1 ]->SetMinEnergy( 4.0*CLHEP::eV ); + neutronElasticProcess->RegisterMe( new G4ParticleHPThermalScattering ); + neutronElasticProcess->AddDataSet( new G4ParticleHPThermalScatteringData ); + if ( G4HadronicParameters::Instance()->GetVerboseLevel() > 1 ) { + G4cout << "### HadronElasticPhysicsHPT is constructed " << G4endl; + } +} diff --git a/source/physics_lists/constructors/hadron_inelastic/GNUmakefile b/source/physics_lists/constructors/hadron_inelastic/GNUmakefile deleted file mode 100644 index f85fc3e5980..00000000000 --- a/source/physics_lists/constructors/hadron_inelastic/GNUmakefile +++ /dev/null @@ -1,81 +0,0 @@ -# --------------------------------------------------------------------------- -# GNUmakefile for physics_lists/constructors/factory library. -# Gunter Folger 10-Jan-2012. -# --------------------------------------------------------------------------- - -name := G4phys_ctor_hinelastic - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4PROCESSES_EXPORT - -ifdef G4LIB_BUILD_EXPAT -CPPFLAGS += -I$(G4BASE)/externals/expat/include -endif - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/run/include \ - -I$(G4BASE)/physics_lists/builders/include \ - -I$(G4BASE)/physics_lists/util/include \ - -I$(G4BASE)/physics_lists/constructors/factory/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/transportation/include \ - -I$(G4BASE)/processes/decay/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/stopping/include \ - -I$(G4BASE)/processes/hadronic/management/include \ - -I$(G4BASE)/processes/hadronic/processes/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/models/binary_cascade/include \ - -I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \ - -I$(G4BASE)/processes/hadronic/models/qmd/include \ - -I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fission/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/fission/include \ - -I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/utils/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/incl_physics/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/interface/include \ - -I$(G4BASE)/processes/hadronic/models/lend/include \ - -I$(G4BASE)/processes/hadronic/models/lepto_nuclear/include \ - -I$(G4BASE)/processes/hadronic/models/particle_hp/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/management/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \ - -I$(G4BASE)/processes/hadronic/models/photolepton_hadron/muon_nuclear/include \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \ - -I$(G4BASE)/processes/hadronic/models/radioactive_decay/include \ - -I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/physics_lists/constructors/hadron_inelastic/History b/source/physics_lists/constructors/hadron_inelastic/History index 7bd25bef2ac..c8e1ef0a2e2 100644 --- a/source/physics_lists/constructors/hadron_inelastic/History +++ b/source/physics_lists/constructors/hadron_inelastic/History @@ -4,6 +4,21 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-04-19 Alberto Ribon (phys-ctor-hinelastic-V11-01-00) +- Created the new class G4HadronInelasticQBBC_ABLA, which is similar to + G4HadronInelasticQBBC_ABLA, except that, for the final-state of nuclear + inelastic interactions of charged pions and nucleons projectiles, + the ABLA model (instead of the usual Precompound/de-excitation) is utilized + for nuclear de-excitation. + This is meant for testing purposes of the coupling between the hadronic + string models (FTF and QGS) and ABLA (via G4GeneratorPrecompoundInterface), + as well as of the coupling between intra-nuclear cascade models (BERT and BIC) + and ABLA. + In principle, these couplings with ABLA nuclear de-excitation can be + extended to all types of projectiles, and to other reference physics lists, + but, for the time being, in order to minimize code changes or new code, + it is restricted to pion+, pion-, proton and neutron, and only for QBBC. + ## 2022-11-11 Alberto Ribon (phys-ctor-hinelastic-V11-00-02) - G4HadronPhysicsFTFP_BERT, G4HadronPhysicsINCLXX : extension to inelastic nuclear interactions of light hypernuclei (with either FTFP only or diff --git a/source/physics_lists/constructors/hadron_inelastic/README b/source/physics_lists/constructors/hadron_inelastic/README index e21354573ca..204b47ef376 100644 --- a/source/physics_lists/constructors/hadron_inelastic/README +++ b/source/physics_lists/constructors/hadron_inelastic/README @@ -35,6 +35,14 @@ - final-state: FTFP for all energies + G4HadronInelasticQBBC_ABLA + -------------------------- + Similar to G4HadronInelasticQBBC, with the difference that for the final-state + of nuclear inelastic interactions of pion+, pion-, proton and neutron projectiles + the ABLA model (instead of the usual Precompound/de-excitation) is utilized for + nuclear de-excitation. + + G4HadronPhysicsFTFP_BERT ------------------------ Hadron nuclear inelastic processes for all hadrons: @@ -72,6 +80,7 @@ - cross-section: Galoyan-Uzhinsky-Glauber-Gribov - final-state: FTFP for all energies + G4HadronPhysicsFTFP_BERT_ATL ---------------------------- Similar to G4HadronPhysicsFTFP_BERT, with the difference that for proton, diff --git a/source/physics_lists/constructors/hadron_inelastic/include/G4HadronInelasticQBBC_ABLA.hh b/source/physics_lists/constructors/hadron_inelastic/include/G4HadronInelasticQBBC_ABLA.hh new file mode 100644 index 00000000000..9177c7e8eb5 --- /dev/null +++ b/source/physics_lists/constructors/hadron_inelastic/include/G4HadronInelasticQBBC_ABLA.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. * +// ******************************************************************** +// +// +//--------------------------------------------------------------------------- +// +// ClassName: G4HadronInelasticQBBC_ABLA +// +// Author: Alberto Ribon (CERN), April 2023 +// +// Similar to the physics list constructor G4HadronInelasticQBBC_ABLA, +// except for the final-state of inelastic interactions of charged pions and +// nucleons in which ABLA nuclear de-excitation is utilized (instead of the +// usual Precompound/de-excitation). +// This is meant for testing purposes of the coupling between the hadronic +// string models (FTF and QGS) and ABLA (via G4GeneratorPrecompoundInterface), +// as well as of the coupling between intra-nuclear cascade models (BERT and BIC) +// and ABLA. +// +// Modified: +// +//---------------------------------------------------------------------------- +// + +#ifndef G4HadronInelasticQBBC_ABLA_h +#define G4HadronInelasticQBBC_ABLA_h 1 + +#include "globals.hh" +#include "G4VHadronPhysics.hh" + + +class G4HadronInelasticQBBC_ABLA : public G4VHadronPhysics { + public: + G4HadronInelasticQBBC_ABLA( G4int ver = 1 ); + virtual ~G4HadronInelasticQBBC_ABLA() = default; + void ConstructProcess() override; + G4HadronInelasticQBBC_ABLA( G4HadronInelasticQBBC_ABLA& ) = delete; + G4HadronInelasticQBBC_ABLA& operator=( const G4HadronInelasticQBBC_ABLA& right ) = delete; +}; + +#endif diff --git a/source/physics_lists/constructors/hadron_inelastic/sources.cmake b/source/physics_lists/constructors/hadron_inelastic/sources.cmake index 3b59a2e72cc..312a91aefbf 100644 --- a/source/physics_lists/constructors/hadron_inelastic/sources.cmake +++ b/source/physics_lists/constructors/hadron_inelastic/sources.cmake @@ -4,6 +4,7 @@ geant4_add_module(G4phys_ctor_hinelastic PUBLIC_HEADERS G4HadronInelasticQBBC.hh + G4HadronInelasticQBBC_ABLA.hh G4HadronPhysicsFTF_BIC.hh G4HadronPhysicsFTFP_BERT.hh G4HadronPhysicsFTFP_BERT_HP.hh @@ -24,6 +25,7 @@ geant4_add_module(G4phys_ctor_hinelastic G4HadronPhysicsQGSP_BIC_AllHP.hh SOURCES G4HadronInelasticQBBC.cc + G4HadronInelasticQBBC_ABLA.cc G4HadronPhysicsFTF_BIC.cc G4HadronPhysicsFTFP_BERT.cc G4HadronPhysicsFTFP_BERT_HP.cc @@ -57,6 +59,7 @@ geant4_module_link_libraries(G4phys_ctor_hinelastic G4had_string_diff G4had_string_frag G4had_theo_max + G4hadronic_abla G4hadronic_bert_cascade G4hadronic_binary G4hadronic_deex_photon_evaporation diff --git a/source/physics_lists/constructors/hadron_inelastic/src/G4HadronInelasticQBBC_ABLA.cc b/source/physics_lists/constructors/hadron_inelastic/src/G4HadronInelasticQBBC_ABLA.cc new file mode 100644 index 00000000000..d2e2280258a --- /dev/null +++ b/source/physics_lists/constructors/hadron_inelastic/src/G4HadronInelasticQBBC_ABLA.cc @@ -0,0 +1,202 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +//--------------------------------------------------------------------------- +// +// ClassName: G4HadronInelasticQBBC_ABLA +// +// Author: Alberto Ribon (CERN), April 2023 +// +// Similar to the physics list constructor G4HadronInelasticQBBC_ABLA, +// except for the final-state of inelastic interactions of charged pions and +// nucleons in which ABLA nuclear de-excitation is utilized (instead of the +// usual Precompound/de-excitation). +// This is meant for testing purposes of the coupling between the hadronic +// string models (FTF and QGS) and ABLA (via G4GeneratorPrecompoundInterface), +// as well as of the coupling between intra-nuclear cascade models (BERT and BIC) +// and ABLA. +// +// Modified: +// +//---------------------------------------------------------------------------- +// + +#include "G4HadronInelasticQBBC_ABLA.hh" +#include "G4SystemOfUnits.hh" +#include "G4HadronicProcess.hh" +#include "G4HadronInelasticProcess.hh" +#include "G4HadronicInteraction.hh" +#include "G4ParticleDefinition.hh" +#include "G4TheoFSGenerator.hh" +#include "G4FTFModel.hh" +#include "G4ExcitedStringDecay.hh" +#include "G4GeneratorPrecompoundInterface.hh" +#include "G4BGGNucleonInelasticXS.hh" +#include "G4BGGPionInelasticXS.hh" +#include "G4ParticleInelasticXS.hh" +#include "G4NeutronInelasticXS.hh" +#include "G4NeutronGeneralProcess.hh" +#include "G4CrossSectionInelastic.hh" +#include "G4CascadeInterface.hh" +#include "G4BinaryCascade.hh" +#include "G4PreCompoundModel.hh" +#include "G4AblaInterface.hh" +#include "G4HadronicInteractionRegistry.hh" +#include "G4HadronicParameters.hh" +#include "G4HadronicBuilder.hh" +#include "G4HadParticles.hh" +#include "G4HadProcesses.hh" +#include "G4BuilderType.hh" +#include "G4PhysicsConstructorFactory.hh" + + +G4_DECLARE_PHYSCONSTR_FACTORY( G4HadronInelasticQBBC_ABLA ); + + +G4HadronInelasticQBBC_ABLA::G4HadronInelasticQBBC_ABLA( G4int ver ) + : G4VHadronPhysics( "hInelasticQBBC_ABLA" ) +{ + SetPhysicsType( bHadronInelastic ); + auto param = G4HadronicParameters::Instance(); + param->SetEnableBCParticles( true ); + param->SetEnableNeutronGeneralProcess( true ); + param->SetVerboseLevel( ver ); +} + + +void G4HadronInelasticQBBC_ABLA::ConstructProcess() { + G4HadronicParameters* param = G4HadronicParameters::Instance(); + G4bool useFactorXS = param->ApplyFactorXS(); + G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper(); + + // configure models + const G4double eminFtf = param->GetMinEnergyTransitionFTF_Cascade(); + const G4double eminBert = 1.0*CLHEP::GeV; + const G4double emaxBic = 1.5*CLHEP::GeV; + const G4double emaxBert = param->GetMaxEnergyTransitionFTF_Cascade(); + const G4double emaxBertPions = 12.0*CLHEP::GeV; + const G4double emax = param->GetMaxEnergy(); + if ( G4Threading::IsMasterThread() && param->GetVerboseLevel() > 0 ) { + G4cout << "### HadronInelasticQBBC_ABLA Construct Process:\n" + << " Emin(FTFP)= " << eminFtf/CLHEP::GeV + << " GeV; Emax(FTFP)= " << emax/CLHEP::GeV << " GeV\n" + << " Emin(BERT)= " << eminBert/CLHEP::GeV + << " GeV; Emax(BERT)= " << emaxBert/CLHEP::GeV + << " GeV; Emax(BERTpions)= " << emaxBertPions/CLHEP::GeV + << " GeV;\n" << " Emin(BIC) = 0 GeV; Emax(BIC)= " + << emaxBic/CLHEP::GeV << " GeV." << G4endl; + } + + G4PreCompoundModel* thePreCompound = nullptr; + G4HadronicInteraction* p = G4HadronicInteractionRegistry::Instance()->FindModel( "PRECO" ); + thePreCompound = static_cast< G4PreCompoundModel* >( p ); + if ( thePreCompound == nullptr ) thePreCompound = new G4PreCompoundModel; + + G4AblaInterface* theAblaInterface = nullptr; + G4HadronicInteraction* pAbla = G4HadronicInteractionRegistry::Instance()->FindModel( "ABLAXX" ); + theAblaInterface = static_cast< G4AblaInterface* >( pAbla ); + if ( theAblaInterface == nullptr ) theAblaInterface = new G4AblaInterface; + + auto theFTFP = new G4TheoFSGenerator( "FTFP" ); + auto theStringModel = new G4FTFModel; + theStringModel->SetFragmentationModel( new G4ExcitedStringDecay ); + theFTFP->SetHighEnergyGenerator( theStringModel ); + // theFTFP->SetTransport( new G4GeneratorPrecompoundInterface ); + theFTFP->SetTransport( new G4GeneratorPrecompoundInterface( theAblaInterface ) ); + theFTFP->SetMinEnergy( eminFtf ); + theFTFP->SetMaxEnergy( emax ); + + auto theBERT = new G4CascadeInterface; + theBERT->SetMinEnergy( eminBert ); + theBERT->SetMaxEnergy( emaxBert ); + // theBERT->usePreCompoundDeexcitation(); + theBERT->useAblaDeexcitation(); + + auto theBERT1 = new G4CascadeInterface; + theBERT1->SetMinEnergy( eminBert ); + theBERT1->SetMaxEnergy( emaxBertPions ); + // theBERT1->usePreCompoundDeexcitation(); + theBERT1->useAblaDeexcitation(); + + // auto theBIC = new G4BinaryCascade( thePreCompound ); + auto theBIC = new G4BinaryCascade( theAblaInterface ); + theBIC->SetMaxEnergy( emaxBic ); + + // p + G4ParticleDefinition* particle = G4Proton::Proton(); + G4HadronicProcess* hp = + new G4HadronInelasticProcess( particle->GetParticleName() + "Inelastic", particle ); + hp->AddDataSet( new G4ParticleInelasticXS( particle ) ); + hp->RegisterMe( theFTFP ); + hp->RegisterMe( theBERT ); + hp->RegisterMe( theBIC ); + ph->RegisterProcess( hp, particle ); + if ( useFactorXS ) hp->MultiplyCrossSectionBy( param->XSFactorNucleonInelastic() ); + + // n + particle = G4Neutron::Neutron(); + G4HadronicProcess* ni = new G4HadronInelasticProcess( "neutronInelastic", particle ); + ni->RegisterMe( theFTFP ); + ni->RegisterMe( theBERT ); + ni->RegisterMe( theBIC ); + G4HadProcesses::BuildNeutronInelasticAndCapture( ni ); + + // pi+ + particle = G4PionPlus::PionPlus(); + hp = new G4HadronInelasticProcess( particle->GetParticleName() + "Inelastic", particle ); + hp->AddDataSet( new G4BGGPionInelasticXS( particle ) ); + hp->RegisterMe( theFTFP ); + hp->RegisterMe( theBERT1 ); + hp->RegisterMe( theBIC ); + ph->RegisterProcess( hp, particle ); + if ( useFactorXS ) hp->MultiplyCrossSectionBy( param->XSFactorPionInelastic() ); + + // pi- + particle = G4PionMinus::PionMinus(); + hp = new G4HadronInelasticProcess( particle->GetParticleName() + "Inelastic", particle ); + hp->AddDataSet( new G4BGGPionInelasticXS( particle ) ); + hp->RegisterMe( theFTFP ); + hp->RegisterMe( theBERT1 ); + hp->RegisterMe( theBIC ); + ph->RegisterProcess( hp, particle ); + if ( useFactorXS ) hp->MultiplyCrossSectionBy( param->XSFactorPionInelastic() ); + + // kaons + G4HadronicBuilder::BuildKaonsFTFP_BERT(); + + // high energy particles + if ( emax > param->EnergyThresholdForHeavyHadrons() ) { + + // pbar, nbar, anti light ions + G4HadronicBuilder::BuildAntiLightIonsFTFP(); + + // hyperons + G4HadronicBuilder::BuildHyperonsFTFP_BERT(); + + // b-, c- baryons and mesons + if ( param->EnableBCParticles() ) G4HadronicBuilder::BuildBCHadronsFTFP_BERT(); + } +} diff --git a/source/physics_lists/constructors/ions/GNUmakefile b/source/physics_lists/constructors/ions/GNUmakefile deleted file mode 100644 index 41e2517d750..00000000000 --- a/source/physics_lists/constructors/ions/GNUmakefile +++ /dev/null @@ -1,74 +0,0 @@ -# --------------------------------------------------------------------------- -# GNUmakefile for physics_lists/constructors/factory library. -# Gunter Folger 10-Jan-2012. -# --------------------------------------------------------------------------- - -name := G4phys_ctor_ions - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/run/include \ - -I$(G4BASE)/physics_lists/builders/include \ - -I$(G4BASE)/physics_lists/util/include \ - -I$(G4BASE)/physics_lists/constructors/factory/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/transportation/include \ - -I$(G4BASE)/processes/decay/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/stopping/include \ - -I$(G4BASE)/processes/hadronic/management/include \ - -I$(G4BASE)/processes/hadronic/models/binary_cascade/include \ - -I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \ - -I$(G4BASE)/processes/hadronic/models/qmd/include \ - -I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fission/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/utils/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/incl_physics/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/interface/include \ - -I$(G4BASE)/processes/hadronic/models/lend/include \ - -I$(G4BASE)/processes/hadronic/models/lepto_nuclear/include \ - -I$(G4BASE)/processes/hadronic/models/particle_hp/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/management/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \ - -I$(G4BASE)/processes/hadronic/models/photolepton_hadron/muon_nuclear/include \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \ - -I$(G4BASE)/processes/hadronic/models/radioactive_decay/include \ - -I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \ - -I$(G4BASE)/processes/hadronic/processes/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/physics_lists/constructors/limiters/GNUmakefile b/source/physics_lists/constructors/limiters/GNUmakefile deleted file mode 100644 index 483300a0569..00000000000 --- a/source/physics_lists/constructors/limiters/GNUmakefile +++ /dev/null @@ -1,81 +0,0 @@ -# --------------------------------------------------------------------------- -# GNUmakefile for physics_lists/constructors/factory library. -# Gunter Folger 10-Jan-2012. -# --------------------------------------------------------------------------- - -name := G4phys_ctor_limiters - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4PROCESSES_EXPORT - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/biasing/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/run/include \ - -I$(G4BASE)/physics_lists/builders/include \ - -I$(G4BASE)/physics_lists/util/include \ - -I$(G4BASE)/physics_lists/constructors/factory/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/scoring/include \ - -I$(G4BASE)/processes/transportation/include \ - -I$(G4BASE)/processes/decay/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/biasing/generic/include \ - -I$(G4BASE)/processes/biasing/importance/include \ - -I$(G4BASE)/processes/parameterisation/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/stopping/include \ - -I$(G4BASE)/processes/hadronic/management/include \ - -I$(G4BASE)/processes/hadronic/processes/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/models/binary_cascade/include \ - -I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \ - -I$(G4BASE)/processes/hadronic/models/qmd/include \ - -I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/utils/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/incl_physics/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/interface/include \ - -I$(G4BASE)/processes/hadronic/models/lend/include \ - -I$(G4BASE)/processes/hadronic/models/lepto_nuclear/include \ - -I$(G4BASE)/processes/hadronic/models/particle_hp/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/management/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \ - -I$(G4BASE)/processes/hadronic/models/photolepton_hadron/muon_nuclear/include \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \ - -I$(G4BASE)/processes/hadronic/models/radioactive_decay/include \ - -I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/physics_lists/constructors/stopping/GNUmakefile b/source/physics_lists/constructors/stopping/GNUmakefile deleted file mode 100644 index 067b88c14c2..00000000000 --- a/source/physics_lists/constructors/stopping/GNUmakefile +++ /dev/null @@ -1,74 +0,0 @@ -# --------------------------------------------------------------------------- -# GNUmakefile for physics_lists/constructors/factory library. -# Gunter Folger 10-Jan-2012. -# --------------------------------------------------------------------------- - -name := G4phys_ctor_stopping - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/run/include \ - -I$(G4BASE)/physics_lists/builders/include \ - -I$(G4BASE)/physics_lists/util/include \ - -I$(G4BASE)/physics_lists/constructors/factory/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/transportation/include \ - -I$(G4BASE)/processes/decay/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/stopping/include \ - -I$(G4BASE)/processes/hadronic/management/include \ - -I$(G4BASE)/processes/hadronic/processes/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/models/binary_cascade/include \ - -I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \ - -I$(G4BASE)/processes/hadronic/models/qmd/include \ - -I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/utils/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/incl_physics/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/interface/include \ - -I$(G4BASE)/processes/hadronic/models/lend/include \ - -I$(G4BASE)/processes/hadronic/models/lepto_nuclear/include \ - -I$(G4BASE)/processes/hadronic/models/particle_hp/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/management/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \ - -I$(G4BASE)/processes/hadronic/models/photolepton_hadron/muon_nuclear/include \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \ - -I$(G4BASE)/processes/hadronic/models/radioactive_decay/include \ - -I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/physics_lists/constructors/stopping/History b/source/physics_lists/constructors/stopping/History index f6b7201b4d8..8a8fc094a8c 100644 --- a/source/physics_lists/constructors/stopping/History +++ b/source/physics_lists/constructors/stopping/History @@ -5,6 +5,11 @@ which **must** added in reverse chronological order (newest at the top). It must be used as a substitute for writing good git commit messages! +## 2023-05-15 Alberto Ribon (phys-ctor-stopping-V11-01-00) +- G4StoppingPhysicsWithINCLXX : new class, similar to G4StoppingPhysics, + with the only difference that the INCLXX model (instead of FTFP) is + utilized for the antiproton annihilation at rest. + ## 2021-12-10 Ben Morgan (phys-ctor-stopping-V11-00-00) - Change to new Markdown History format diff --git a/source/physics_lists/constructors/stopping/README b/source/physics_lists/constructors/stopping/README index ddc6be077f4..0fbca1335f4 100644 --- a/source/physics_lists/constructors/stopping/README +++ b/source/physics_lists/constructors/stopping/README @@ -17,3 +17,7 @@ The same as G4StoppingPhysics, except that for anti-proton and anti-neutron annihilation at rest it uses Fritiof coupled with Binary Cascade. + G4StoppingPhysicsWithINCLXX + --------------------------- + The same as G4StoppingPhysics, except that for anti-proton annihilation + at rest it uses the INCLXX model. diff --git a/source/physics_lists/constructors/stopping/include/G4StoppingPhysicsWithINCLXX.hh b/source/physics_lists/constructors/stopping/include/G4StoppingPhysicsWithINCLXX.hh new file mode 100644 index 00000000000..01fec6574ed --- /dev/null +++ b/source/physics_lists/constructors/stopping/include/G4StoppingPhysicsWithINCLXX.hh @@ -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. * +// ******************************************************************** +// +// +//--------------------------------------------------------------------------- +// +// ClassName: G4StoppingPhysicsWithINCLXX +// +// Author: Alberto Ribon +// +// Date: May 2023 +// +// Modified: +// +// Class Description: +// +// This class provides the nuclear capture at rest of negatively charged +// particles, using: Bertini for pi-, K-, Sigma-, Xi-, and Omega-; +// INCLXX for anti-proton; +// Fritiof/Precompound for anti-neutron, anti-lambda, +// anti-sigma0, anti-sigma+, anti-xi0 and anti-nuclei; +// another model for mu-. +// +//---------------------------------------------------------------------------- + +#ifndef G4StoppingPhysicsWithINCLXX_h +#define G4StoppingPhysicsWithINCLXX_h 1 + +#include "globals.hh" +#include "G4VPhysicsConstructor.hh" + +class G4StoppingPhysicsWithINCLXX : public G4VPhysicsConstructor { + public: + G4StoppingPhysicsWithINCLXX( G4int ver = 1 ); + G4StoppingPhysicsWithINCLXX( const G4String& name, G4int ver = 1, + G4bool UseMuonMinusCapture = true ); + ~G4StoppingPhysicsWithINCLXX() override; + + // This method will be invoked in the Construct() method. + // each particle type will be instantiated + virtual void ConstructParticle() override; + + // This method will be invoked in the Construct() method. + // each physics process will be instantiated and + // registered to the process manager of each particle type + virtual void ConstructProcess() override; + + void SetMuonMinusCapture(G4bool val) { useMuonMinusCapture = val; }; + + private: + G4int verbose; + G4bool useMuonMinusCapture; +}; + +#endif diff --git a/source/physics_lists/constructors/stopping/sources.cmake b/source/physics_lists/constructors/stopping/sources.cmake index 151a81ff68d..dbbcfaeef61 100644 --- a/source/physics_lists/constructors/stopping/sources.cmake +++ b/source/physics_lists/constructors/stopping/sources.cmake @@ -5,9 +5,11 @@ geant4_add_module(G4phys_ctor_stopping PUBLIC_HEADERS G4StoppingPhysics.hh G4StoppingPhysicsFritiofWithBinaryCascade.hh + G4StoppingPhysicsWithINCLXX.hh SOURCES G4StoppingPhysics.cc - G4StoppingPhysicsFritiofWithBinaryCascade.cc) + G4StoppingPhysicsFritiofWithBinaryCascade.cc + G4StoppingPhysicsWithINCLXX.cc) geant4_module_link_libraries(G4phys_ctor_stopping PUBLIC diff --git a/source/physics_lists/constructors/stopping/src/G4StoppingPhysicsWithINCLXX.cc b/source/physics_lists/constructors/stopping/src/G4StoppingPhysicsWithINCLXX.cc new file mode 100644 index 00000000000..2f6e8629a33 --- /dev/null +++ b/source/physics_lists/constructors/stopping/src/G4StoppingPhysicsWithINCLXX.cc @@ -0,0 +1,177 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +//--------------------------------------------------------------------------- +// +// ClassName: G4StoppingPhysicsWithINCLXX +// +// Author: Alberto Ribon +// +// Date: May 2023 +// +// Modified: +// +//---------------------------------------------------------------------------- + +#include "G4StoppingPhysicsWithINCLXX.hh" +#include "G4SystemOfUnits.hh" +#include "G4HadronicAbsorptionBertini.hh" +#include "G4HadronicAbsorptionFritiof.hh" +#include "G4HadronicAbsorptionINCLXX.hh" +#include "G4MuonMinusCapture.hh" +#include "G4ParticleDefinition.hh" +#include "G4ProcessManager.hh" +#include "G4LeptonConstructor.hh" +#include "G4MesonConstructor.hh" +#include "G4BaryonConstructor.hh" +#include "G4MuonMinus.hh" +#include "G4PionMinus.hh" +#include "G4BuilderType.hh" + +// factory +#include "G4PhysicsConstructorFactory.hh" +// +G4_DECLARE_PHYSCONSTR_FACTORY(G4StoppingPhysicsWithINCLXX); + + +G4StoppingPhysicsWithINCLXX::G4StoppingPhysicsWithINCLXX( G4int ver ) : + G4StoppingPhysicsWithINCLXX( "stopping", ver ) {} + + +G4StoppingPhysicsWithINCLXX::G4StoppingPhysicsWithINCLXX( const G4String& name, G4int ver, + G4bool useMuCapture ) : + G4VPhysicsConstructor( name ), + verbose( ver ), + useMuonMinusCapture( useMuCapture ) +{ + SetPhysicsType( bStopping ); + if ( verbose > 1 ) G4cout << "### G4StoppingPhysicsWithINCLXX" << G4endl; +} + + +G4StoppingPhysicsWithINCLXX::~G4StoppingPhysicsWithINCLXX() {} + + +void G4StoppingPhysicsWithINCLXX::ConstructParticle() { + // G4cout << "G4StoppingPhysicsWithINCLXX::ConstructParticle" << G4endl; + G4LeptonConstructor pLeptonConstructor; + pLeptonConstructor.ConstructParticle(); + + G4MesonConstructor pMesonConstructor; + pMesonConstructor.ConstructParticle(); + + G4BaryonConstructor pBaryonConstructor; + pBaryonConstructor.ConstructParticle(); +} + + +void G4StoppingPhysicsWithINCLXX::ConstructProcess() { + if ( verbose > 1 ) G4cout << "### G4StoppingPhysicsWithINCLXX::ConstructProcess " << G4endl; + + G4MuonMinusCapture* muProcess = nullptr; + if ( useMuonMinusCapture ) muProcess = new G4MuonMinusCapture; + + G4HadronicAbsorptionBertini* hBertiniProcess = new G4HadronicAbsorptionBertini; + G4HadronicAbsorptionFritiof* hFritiofProcess = new G4HadronicAbsorptionFritiof; + G4HadronicAbsorptionINCLXX* hINCLXXProcess = new G4HadronicAbsorptionINCLXX; + + const G4double mThreshold = 130.0*MeV; + + // Add Stopping Process + G4ParticleDefinition* particle = nullptr; + G4ProcessManager* pmanager = nullptr; + + auto myParticleIterator = GetParticleIterator(); + myParticleIterator->reset(); + + while ( (*myParticleIterator)() ) { + + particle = myParticleIterator->value(); + pmanager = particle->GetProcessManager(); + + if ( useMuonMinusCapture && particle == G4MuonMinus::MuonMinus() ) { + pmanager->AddRestProcess( muProcess ); + if ( verbose > 1 ) { + G4cout << "### G4StoppingPhysicsWithINCLXX added G4MuonMinusCapture for " + << particle->GetParticleName() << G4endl; + } + } + + if ( particle->GetPDGCharge() <= 0.0 && + particle->GetPDGMass() > mThreshold && + ! particle->IsShortLived() ) { + + // Use Fritiof/Precompound for: anti-neutron, anti-lambda, + // anti-sigma0, anti-sigma+, anti-xi0 and anti-nuclei. + if ( particle == G4AntiNeutron::Definition() || + particle == G4AntiLambda::Definition() || + particle == G4AntiSigmaZero::Definition() || + particle == G4AntiSigmaPlus::Definition() || + particle == G4AntiXiZero::Definition() || + particle->GetBaryonNumber() < -1 ) { // Anti-nuclei + if ( hFritiofProcess->IsApplicable( *particle ) ) { + pmanager->AddRestProcess( hFritiofProcess ); + if ( verbose > 1 ) { + G4cout << "### G4HadronicAbsorptionFritiof added for " + << particle->GetParticleName() << G4endl; + } + } + + // Use INCLXX/Precompound for antiproton + } else if ( particle == G4AntiProton::Definition() ) { + if ( hINCLXXProcess->IsApplicable( *particle ) ) { + pmanager->AddRestProcess( hINCLXXProcess ); + if ( verbose > 1 ) { + G4cout << "### G4HadronicAbsorptionINCLXX added for " + << particle->GetParticleName() << G4endl; + } + } + + // Use Bertini for pi-, K-, Sigma-, Xi-, and Omega- + } else if ( particle == G4PionMinus::Definition() || + particle == G4KaonMinus::Definition() || + particle == G4SigmaMinus::Definition() || + particle == G4XiMinus::Definition() || + particle == G4OmegaMinus::Definition() ) { + if ( hBertiniProcess->IsApplicable( *particle ) ) { + pmanager->AddRestProcess( hBertiniProcess ); + if ( verbose > 1 ) { + G4cout << "### G4HadronicAbsorptionBertini added for " + << particle->GetParticleName() << G4endl; + } + } + + } else { + if ( verbose > 1 ) { + G4cout << "WARNING in G4StoppingPhysicsWithINCLXX::ConstructProcess: \ + not able to deal with nuclear stopping of " + << particle->GetParticleName() << G4endl; + } + } + } + + } // end of while loop +} diff --git a/source/physics_lists/lists/GNUmakefile b/source/physics_lists/lists/GNUmakefile deleted file mode 100644 index 99083284c5b..00000000000 --- a/source/physics_lists/lists/GNUmakefile +++ /dev/null @@ -1,99 +0,0 @@ -# --------------------------------------------------------------------------- -# GNUmakefile for physics_lists/lists library. Gunter Folger 25-Oct-2006. -# --------------------------------------------------------------------------- - -name := G4phys_lists - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4PROCESSES_EXPORT - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/event/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/run/include \ - -I$(G4BASE)/tracking/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/digits_hits/digits/include \ - -I$(G4BASE)/physics_lists/builders/include \ - -I$(G4BASE)/physics_lists/constructors/decay/include \ - -I$(G4BASE)/physics_lists/constructors/electromagnetic/include \ - -I$(G4BASE)/physics_lists/constructors/factory/include \ - -I$(G4BASE)/physics_lists/constructors/gamma_lepto_nuclear/include \ - -I$(G4BASE)/physics_lists/constructors/hadron_elastic/include \ - -I$(G4BASE)/physics_lists/constructors/hadron_inelastic/include \ - -I$(G4BASE)/physics_lists/constructors/ions/include \ - -I$(G4BASE)/physics_lists/constructors/limiters/include \ - -I$(G4BASE)/physics_lists/constructors/stopping/include \ - -I$(G4BASE)/physics_lists/util/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/decay/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/optical/include \ - -I$(G4BASE)/processes/transportation/include \ - -I$(G4BASE)/processes/electromagnetic/dna/include \ - -I$(G4BASE)/processes/electromagnetic/lowenergy/include \ - -I$(G4BASE)/processes/electromagnetic/highenergy/include \ - -I$(G4BASE)/processes/electromagnetic/standard/include \ - -I$(G4BASE)/processes/electromagnetic/muons/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/electromagnetic/xrays/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/stopping/include \ - -I$(G4BASE)/processes/hadronic/management/include \ - -I$(G4BASE)/processes/hadronic/processes/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/physics_lists/builders/include \ - -I$(G4BASE)/physics_lists/constructors/limiters/include \ - -I$(G4BASE)/processes/hadronic/models/binary_cascade/include \ - -I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \ - -I$(G4BASE)/processes/hadronic/models/cascade/evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/cascade/utils/include \ - -I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fission/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/gem_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/utils/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/incl_physics/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/interface/include \ - -I$(G4BASE)/processes/hadronic/models/isotope_production/include \ - -I$(G4BASE)/processes/hadronic/models/lend/include \ - -I$(G4BASE)/processes/hadronic/models/lepto_nuclear/include \ - -I$(G4BASE)/processes/hadronic/models/particle_hp/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/management/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \ - -I$(G4BASE)/processes/hadronic/models/photolepton_hadron/muon_nuclear/include \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \ - -I$(G4BASE)/processes/hadronic/models/radioactive_decay/include \ - -I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/physics_lists/lists/History b/source/physics_lists/lists/History index 6921a76a09f..b8d83dd9038 100644 --- a/source/physics_lists/lists/History +++ b/source/physics_lists/lists/History @@ -4,6 +4,45 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-05-15 Alberto Ribon (phys-lists-V11-01-03) +- Use the new class G4StoppingPhysicsWithINCLXX (instead of G4StoppingPhysics) + in INCLXXPhysicsListHelper : all the INCLXX-based physics lists use INCLXX + for the antiproton annihilation at rest. + +## 2023-05-10 Alberto Ribon (phys-lists-V11-01-02) +- G4PhysListFactory : introduced the new physics list names `Shielding_HP` and + `ShieldingM_HP` as alias of, respectively, `Shielding` and `ShieldingM`; + replaced `Shielding_T` and `ShieldingM_T` with, respectively, `Shielding_HPT` + and `ShieldingM_HPT`. + These new aliases allow to have a consistent notation `_HPT` for all the + HP-based physics lists when the special elastic scattering treatment of + thermal neutrons is enabled. +- Shielding : inform the user that the new physics list names (to be used + with the physics list factory) `Shielding_HP` and `ShieldingM_HP` are + equivalent to, respectively, `Shielding` and `ShieldingM`. + +## 2023-04-19 Alberto Ribon (phys-lists-V11-01-01) +- Created the new class QBBC_ABLA, which is similar to QBBC, except that for + hadron inelastic the constructor G4HadronInelasticQBBC_ABLA is used + (instead of G4HadronInelasticQBBC): this means that the physics list + QBBC_ABLA behaves as QBBC, with the only difference that for the final-state + of nuclear inelastic interactions of charged pions and nucleons projectiles, + the ABLA model (instead of the usual Precompound/de-excitation) is utilized + for nuclear de-excitation. + +## 2023-04-13 Alberto Ribon (phys-lists-V11-01-00) +- Created the new class QGSP_BIC_HPT, which is similar to QGSP_BIC_HP, but with + special treatment of elastic scattering of thermal neutrons activated. +- G4PhysListFactory : added 6 new physics lists, corresponding to "HPT" variants + (i.e. with special treatment of elastic scattering of thermal neutrons) of + physics lists with "HP" already present (FTFP_BERT_HPT, QGSP_BERT_HPT, + FTFP_INCLXX_HPT, QGSP_INCLXX_HPT, QGSP_BIC_HPT, QGSP_BIC_AllHPT, + Shielding_T, ShieldingM_T). Of these, only one (QGSP_BIC_HPT) corresponds + to a concrete new physics list, whereas the others are obtained from the + "HP" physics lists by adding the physics constructor G4ThermalNeutrons. +- G4PhysListFactoryMessenger : added the new UI command + "/physics_lists/factory/addThermal" to enable the special treatment of + elastic scattering of thermal neutrons for HP-based physics lists. ## 2021-12-10 Ben Morgan (phys-lists-V11-00-00) - Change to new Markdown History format diff --git a/source/physics_lists/lists/include/G4PhysListFactoryMessenger.hh b/source/physics_lists/lists/include/G4PhysListFactoryMessenger.hh index 7d91046a8cb..42da3618c0f 100644 --- a/source/physics_lists/lists/include/G4PhysListFactoryMessenger.hh +++ b/source/physics_lists/lists/include/G4PhysListFactoryMessenger.hh @@ -28,11 +28,7 @@ // // ClassName: G4PhysListFactoryMessenger // -// Author: 2002 J.P. Wellisch -// -// Modified: -// 09.11.2005 V.Ivanchenko edit to provide a standard -// 19.06.2006 V.Ivanchenko add mu-nuclear process +// Author: 2017 V.Ivanchenko // //---------------------------------------------------------------------------- // @@ -59,6 +55,7 @@ private: G4VModularPhysicsList* thePhysList; G4UIcommand* theRadDecay; G4UIcommand* theOptical; + G4UIcommand* theThermal; G4UIdirectory* theDir; }; diff --git a/source/physics_lists/lists/include/INCLXXPhysicsListHelper.icc b/source/physics_lists/lists/include/INCLXXPhysicsListHelper.icc index 177165d29a8..7774da3e17a 100644 --- a/source/physics_lists/lists/include/INCLXXPhysicsListHelper.icc +++ b/source/physics_lists/lists/include/INCLXXPhysicsListHelper.icc @@ -52,6 +52,7 @@ #include "G4EmExtraPhysics.hh" #include "G4IonINCLXXPhysics.hh" #include "G4StoppingPhysics.hh" +#include "G4StoppingPhysicsWithINCLXX.hh" #include "G4HadronElasticPhysics.hh" #include "G4HadronElasticPhysicsHP.hh" #include "G4NeutronTrackingCut.hh" @@ -99,7 +100,7 @@ template TINCLXXPhysicsListHelperRegisterPhysics( new G4HadronPhysicsINCLXX(G4String(1,static_cast(ver)),true,withNeutronHP,withFTFP)); // Stopping Physics - this->RegisterPhysics( new G4StoppingPhysics(ver) ); + this->RegisterPhysics( new G4StoppingPhysicsWithINCLXX(ver) ); // Ion Physics this->RegisterPhysics( new G4IonINCLXXPhysics(ver)); diff --git a/source/physics_lists/lists/include/QBBC_ABLA.hh b/source/physics_lists/lists/include/QBBC_ABLA.hh new file mode 100644 index 00000000000..f76981fde2e --- /dev/null +++ b/source/physics_lists/lists/include/QBBC_ABLA.hh @@ -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. * +// ******************************************************************** +// +// +//--------------------------------------------------------------------------- +// +// ClassName: QBBC_ABLA +// +// Author: Alberto Ribon (CERN), April 2023 +// +// The new, experimental physics list QBBC_ABLA is similar to the reference +// physics list QBBC, except that for hadron inelastic the physics constructor +// G4HadronInelasticQBBC_ABLA is used (instead of G4HadronInelasticQBBC): +// in practice, QBBC_ABLA behaves as QBBC, with the only difference that for +// the final-state of nuclear inelastic interactions of charged pions and +// nucleons projectiles, the ABLA model (instead of the usual +// Precompound/de-excitation) is utilized for nuclear de-excitation. +// +// Modified: +// +//---------------------------------------------------------------------------- +// +#ifndef QBBC_ABLA_h +#define QBBC_ABLA_h 1 + +#include "globals.hh" +#include "G4VModularPhysicsList.hh" + + +class QBBC_ABLA : public G4VModularPhysicsList { + public: + explicit QBBC_ABLA( G4int ver = 1, const G4String& type = "QBBC_ABLA" ); + virtual ~QBBC_ABLA() = default; + QBBC_ABLA( const QBBC_ABLA& ) = delete; + QBBC_ABLA& operator=( const QBBC_ABLA& right ) = delete; +}; + +#endif diff --git a/source/physics_lists/lists/include/QGSP_BIC_HPT.hh b/source/physics_lists/lists/include/QGSP_BIC_HPT.hh new file mode 100644 index 00000000000..a8f0d3d3d87 --- /dev/null +++ b/source/physics_lists/lists/include/QGSP_BIC_HPT.hh @@ -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. * +// ******************************************************************** +// +// +//--------------------------------------------------------------------------- +// +// ClassName: QGSP_BIC_HPT +// +// Author: Alberto Ribon (CERN), April 2023 +// +// Similar to QGSP_BIC_HP, with the special treatment of elastic scattering +// of thermal neutrons (i.e. with kinetic energy below 4 eV) activated. +// This special treatment, called Thermal Scattering Law (TSL), is based on +// the S(alpha, beta) approach, which relies on both experimental measurements +// and molecular dynamics calculations. +// +// Modified: +// +//---------------------------------------------------------------------------- +// +#ifndef QGSP_BIC_HPT_h +#define QGSP_BIC_HPT_h 1 + +#include "globals.hh" +#include "G4VModularPhysicsList.hh" + + +class QGSP_BIC_HPT : public G4VModularPhysicsList { + public: + QGSP_BIC_HPT( G4int ver = 1 ); + virtual ~QGSP_BIC_HPT() = default; + QGSP_BIC_HPT( const QGSP_BIC_HPT &) = delete; + QGSP_BIC_HPT & operator=( const QGSP_BIC_HPT &right ) = delete; +}; + +#endif diff --git a/source/physics_lists/lists/sources.cmake b/source/physics_lists/lists/sources.cmake index 5cc5058bdee..d62e1a5b46e 100644 --- a/source/physics_lists/lists/sources.cmake +++ b/source/physics_lists/lists/sources.cmake @@ -16,11 +16,13 @@ geant4_add_module(G4phys_lists LBE.hh NuBeam.hh QBBC.hh + QBBC_ABLA.hh QGS_BIC.hh QGSP_BERT.hh QGSP_BERT_HP.hh QGSP_BIC.hh QGSP_BIC_HP.hh + QGSP_BIC_HPT.hh QGSP_BIC_AllHP.hh QGSP_FTFP_BERT.hh INCLXXPhysicsListHelper.hh @@ -49,12 +51,14 @@ geant4_add_module(G4phys_lists LBE.cc NuBeam.cc QBBC.cc + QBBC_ABLA.cc QGS_BIC.cc QGSP_BERT.cc QGSP_BERT_HP.cc QGSP_BIC_AllHP.cc QGSP_BIC.cc QGSP_BIC_HP.cc + QGSP_BIC_HPT.cc QGSP_FTFP_BERT.cc Shielding.cc) diff --git a/source/physics_lists/lists/src/G4PhysListFactory.cc b/source/physics_lists/lists/src/G4PhysListFactory.cc index 23e83bc8b87..dff6ace3a4d 100644 --- a/source/physics_lists/lists/src/G4PhysListFactory.cc +++ b/source/physics_lists/lists/src/G4PhysListFactory.cc @@ -32,6 +32,7 @@ // // Modified: // +// 2023.04.12 A.Ribon added _HPT variants (i.e. HP + thermal scattering) // 2014.08.05 K.L.Genser used provision for Hadronic Physics Variant M in // Shielding for ShieldingM // @@ -53,6 +54,7 @@ #include "QGSP_BERT_HP.hh" #include "QGSP_BIC.hh" #include "QGSP_BIC_HP.hh" +#include "QGSP_BIC_HPT.hh" #include "QGSP_BIC_AllHP.hh" #include "QGSP_FTFP_BERT.hh" #include "QGS_BIC.hh" @@ -61,6 +63,7 @@ #include "Shielding.hh" #include "ShieldingLEND.hh" #include "NuBeam.hh" +#include "G4ThermalNeutrons.hh" #include "G4EmStandardPhysics.hh" #include "G4EmStandardPhysics_option1.hh" @@ -79,13 +82,16 @@ G4PhysListFactory::G4PhysListFactory(G4int ver) : defName("FTFP_BERT"),verbose(ver),theMessenger(nullptr) { - nlists_hadr = 23; - G4String ss[23] = { + nlists_hadr = 33; + G4String ss[33] = { "FTFP_BERT","FTFP_BERT_TRV","FTFP_BERT_ATL","FTFP_BERT_HP","FTFQGSP_BERT", "FTFP_INCLXX","FTFP_INCLXX_HP","FTF_BIC", "LBE","QBBC", "QGSP_BERT","QGSP_BERT_HP","QGSP_BIC","QGSP_BIC_HP","QGSP_BIC_AllHP", "QGSP_FTFP_BERT","QGSP_INCLXX","QGSP_INCLXX_HP","QGS_BIC", - "Shielding","ShieldingLEND","ShieldingM","NuBeam"}; + "Shielding","ShieldingLEND","ShieldingM","NuBeam", + "Shielding_HP","ShieldingM_HP", + "FTFP_BERT_HPT", "FTFP_INCLXX_HPT", "QGSP_BERT_HPT", "QGSP_BIC_HPT", + "QGSP_BIC_AllHPT", "QGSP_INCLXX_HPT", "Shielding_HPT", "ShieldingM_HPT" }; for(size_t i=0; iRegisterPhysics(new G4ThermalNeutrons);} + else if(had_name == "FTFP_INCLXX_HPT"){p = new FTFP_INCLXX_HP(verbose); + p->RegisterPhysics(new G4ThermalNeutrons);} + else if(had_name == "QGSP_BERT_HPT") {p = new QGSP_BERT_HP(verbose); + p->RegisterPhysics(new G4ThermalNeutrons);} + else if(had_name == "QGSP_BIC_HPT") {p = new QGSP_BIC_HPT(verbose);} + else if(had_name == "QGSP_BIC_AllHPT"){p = new QGSP_BIC_AllHP(verbose); + p->RegisterPhysics(new G4ThermalNeutrons);} + else if(had_name == "QGSP_INCLXX_HPT"){p = new QGSP_INCLXX_HP(verbose); + p->RegisterPhysics(new G4ThermalNeutrons);} + else if(had_name == "Shielding_HPT") {p = new Shielding(verbose); + p->RegisterPhysics(new G4ThermalNeutrons);} + else if(had_name == "ShieldingM_HPT") {p = new Shielding(verbose,"HP","M"); + p->RegisterPhysics(new G4ThermalNeutrons);} else { p = new FTFP_BERT(verbose); G4ExceptionDescription ed; diff --git a/source/physics_lists/lists/src/G4PhysListFactoryMessenger.cc b/source/physics_lists/lists/src/G4PhysListFactoryMessenger.cc index cc358c84283..6b11514d812 100644 --- a/source/physics_lists/lists/src/G4PhysListFactoryMessenger.cc +++ b/source/physics_lists/lists/src/G4PhysListFactoryMessenger.cc @@ -37,6 +37,8 @@ #include "G4VModularPhysicsList.hh" #include "G4RadioactiveDecayPhysics.hh" #include "G4OpticalPhysics.hh" +#include "G4ThermalNeutrons.hh" + G4PhysListFactoryMessenger::G4PhysListFactoryMessenger(G4VModularPhysicsList* pl) { @@ -53,10 +55,16 @@ G4PhysListFactoryMessenger::G4PhysListFactoryMessenger(G4VModularPhysicsList* pl theOptical = new G4UIcommand("/physics_lists/factory/addOptical",this); theOptical->SetGuidance("Enable optical physics."); theOptical->AvailableForStates(G4State_PreInit); + + theThermal = new G4UIcommand("/physics_lists/factory/addThermal",this); + theThermal->SetGuidance("Enable special elastic scattering of thermal neutrons (Ekin < 4 eV)."); + theThermal->SetGuidance("Important note: to be used only with HP-based physics lists!"); + theThermal->AvailableForStates(G4State_PreInit); } G4PhysListFactoryMessenger::~G4PhysListFactoryMessenger() { + delete theThermal; delete theOptical; delete theRadDecay; delete theDir; @@ -69,5 +77,7 @@ void G4PhysListFactoryMessenger::SetNewValue(G4UIcommand* aComm, G4String) thePhysList->RegisterPhysics(new G4RadioactiveDecayPhysics(ver)); } else if(aComm == theOptical) { thePhysList->RegisterPhysics(new G4OpticalPhysics(ver)); + } else if(aComm == theThermal) { + thePhysList->RegisterPhysics(new G4ThermalNeutrons(ver)); } } diff --git a/source/physics_lists/lists/src/QBBC_ABLA.cc b/source/physics_lists/lists/src/QBBC_ABLA.cc new file mode 100644 index 00000000000..3711f0e369e --- /dev/null +++ b/source/physics_lists/lists/src/QBBC_ABLA.cc @@ -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. * +// ******************************************************************** +// +// +//--------------------------------------------------------------------------- +// +// ClassName: QBBC_ABLA +// +// Author: Alberto Ribon (CERN), April 2023 +// +// The new, experimental physics list QBBC_ABLA is similar to the reference +// physics list QBBC, except that for hadron inelastic the physics constructor +// G4HadronInelasticQBBC_ABLA is used (instead of G4HadronInelasticQBBC): +// in practice, QBBC_ABLA behaves as QBBC, with the only difference that for +// the final-state of nuclear inelastic interactions of charged pions and +// nucleons projectiles, the ABLA model (instead of the usual +// Precompound/de-excitation) is utilized for nuclear de-excitation. +// +// Modified: +// +//---------------------------------------------------------------------------- +// + +#include "QBBC_ABLA.hh" +#include "globals.hh" +#include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" +#include "G4DecayPhysics.hh" +#include "G4EmStandardPhysics.hh" +#include "G4EmExtraPhysics.hh" +#include "G4StoppingPhysics.hh" +#include "G4HadronInelasticQBBC_ABLA.hh" +#include "G4HadronElasticPhysicsXS.hh" +#include "G4IonPhysicsXS.hh" +#include "G4IonElasticPhysics.hh" +#include "G4NeutronTrackingCut.hh" + + +QBBC_ABLA::QBBC_ABLA( G4int ver, const G4String& ) { + if ( ver > 0 ) G4cout << "<<< Experimental Reference Physics List QBBC_ABLA " << G4endl; + defaultCutValue = 0.7*CLHEP::mm; + SetVerboseLevel( ver ); + RegisterPhysics( new G4EmStandardPhysics(ver) ); + RegisterPhysics( new G4EmExtraPhysics(ver) ); + RegisterPhysics( new G4DecayPhysics(ver) ); + RegisterPhysics( new G4HadronElasticPhysicsXS(ver) ); + RegisterPhysics( new G4StoppingPhysics(ver) ); + RegisterPhysics( new G4IonPhysicsXS(ver) ); + RegisterPhysics( new G4IonElasticPhysics(ver) ); + RegisterPhysics( new G4HadronInelasticQBBC_ABLA(ver) ); + RegisterPhysics( new G4NeutronTrackingCut(ver) ); +} diff --git a/source/physics_lists/lists/src/QGSP_BIC_HPT.cc b/source/physics_lists/lists/src/QGSP_BIC_HPT.cc new file mode 100644 index 00000000000..2bb5a544871 --- /dev/null +++ b/source/physics_lists/lists/src/QGSP_BIC_HPT.cc @@ -0,0 +1,86 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +//--------------------------------------------------------------------------- +// +// ClassName: QGSP_BIC_HPT +// +// Author: Alberto Ribon (CERN), April 2023 +// +// Similar to QGSP_BIC_HP, with the special treatment of elastic scattering +// of thermal neutrons (i.e. with kinetic energy below 4 eV) activated. +// This special treatment, called Thermal Scattering Law (TSL), is based on +// the S(alpha, beta) approach, which relies on both experimental measurements +// and molecular dynamics calculations. +// +// Modified: +// +//---------------------------------------------------------------------------- +// + +#include "G4DecayPhysics.hh" +#include "G4RadioactiveDecayPhysics.hh" +#include "G4EmStandardPhysics_option4.hh" +#include "G4EmExtraPhysics.hh" +#include "G4IonPhysics.hh" +#include "G4IonElasticPhysics.hh" +#include "G4StoppingPhysics.hh" +#include "G4HadronElasticPhysicsHPT.hh" +#include "QGSP_BIC_HPT.hh" +#include "G4HadronPhysicsQGSP_BIC_HP.hh" + + +QGSP_BIC_HPT::QGSP_BIC_HPT( G4int ver ) { + if ( ver > 0 ) { + G4cout << "<<< Geant4 Physics List simulation engine: QGSP_BIC_HPT" << G4endl << G4endl; + } + defaultCutValue = 0.7*CLHEP::mm; + SetCutValue( 0.0, "proton" ); + SetVerboseLevel( ver ); + + // EM Physics + RegisterPhysics( new G4EmStandardPhysics_option4(ver) ); + + // Synchroton Radiation & GN Physics + RegisterPhysics( new G4EmExtraPhysics(ver) ); + + // Decays + RegisterPhysics( new G4DecayPhysics(ver) ); + RegisterPhysics( new G4RadioactiveDecayPhysics(ver) ); + + // Hadron Elastic scattering + RegisterPhysics( new G4HadronElasticPhysicsHPT(ver) ); + + // Hadron Physics + RegisterPhysics( new G4HadronPhysicsQGSP_BIC_HP(ver) ); + + // Stopping Physics + RegisterPhysics( new G4StoppingPhysics(ver) ); + + // Ion Physics + RegisterPhysics( new G4IonElasticPhysics(ver) ); + RegisterPhysics( new G4IonPhysics(ver) ); +} diff --git a/source/physics_lists/lists/src/Shielding.cc b/source/physics_lists/lists/src/Shielding.cc index ce444236302..86ddf0059c8 100644 --- a/source/physics_lists/lists/src/Shielding.cc +++ b/source/physics_lists/lists/src/Shielding.cc @@ -82,8 +82,12 @@ Shielding::Shielding(G4int verbose, const G4String& n_model, if(verbose > 0) { G4cout << "<<< Geant4 Physics List simulation engine: Shielding" << HadrPhysVariant << G4endl; - if ( LEN_model=="LEND" ) + if ( LEN_model=="LEND" ) { G4cout << "<<< LEND will be used for low energy neutron and gamma projectiles" << G4endl; + } else { + G4cout << "<<< (Note that Shielding" << HadrPhysVariant << " and Shielding" + << HadrPhysVariant << "_HP are equivalent!)" << G4endl; + } } defaultCutValue = 0.7*CLHEP::mm; SetCutValue(0, "proton"); diff --git a/source/physics_lists/util/GNUmakefile b/source/physics_lists/util/GNUmakefile deleted file mode 100644 index 9776376202b..00000000000 --- a/source/physics_lists/util/GNUmakefile +++ /dev/null @@ -1,39 +0,0 @@ -# --------------------------------------------------------------------------- -# GNUmakefile for physics_lists/lists library. Gunter Folger 25-Oct-2006. -# --------------------------------------------------------------------------- - -name := G4physlist_util - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4PROCESSES_EXPORT - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \ - -I$(G4BASE)/processes/hadronic/processes/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/run/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/physics_lists/util/History b/source/physics_lists/util/History index 094a5b9f45f..f6ea4070763 100644 --- a/source/physics_lists/util/History +++ b/source/physics_lists/util/History @@ -6,7 +6,8 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2022-12-30 Vladimir Ivanchenko (phys-util-V11-00-10) + +## 2022-12-30 Vladimir Ivanchenko (phys-util-V11-01-00) - G4HadProcesses - avoid double instantiation of capture cross section ## 2022-11-24 Gabriele Cosmo (phys-util-V11-00-09) diff --git a/source/processes/GNUmakefile b/source/processes/GNUmakefile deleted file mode 100644 index b2bbf1f4124..00000000000 --- a/source/processes/GNUmakefile +++ /dev/null @@ -1,160 +0,0 @@ -# ---------------------------------------------------------------------- -# GNUmakefile for processes library, Gabriele Cosmo 27-Jun-1998 -# ---------------------------------------------------------------------- - -name := G4processes - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -GLOBLIBS = libG4digits_hits.lib -GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib libG4analysis.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib -ifdef G4LIB_BUILD_EXPAT - GLOBLIBS += libG4expat.lib -endif -ifdef G4LIB_BUILD_ZLIB - GLOBLIBS += libG4zlib.lib -endif - -include $(G4INSTALL)/config/architecture.gmk - -SUBDIRS = management -SUBDIRS += cuts -SUBDIRS += solidstate/channeling -SUBDIRS += solidstate/phonon -SUBDIRS += optical -SUBDIRS += decay -SUBDIRS += scoring -SUBDIRS += biasing/management -SUBDIRS += biasing/generic -SUBDIRS += biasing/importance -SUBDIRS += transportation -SUBDIRS += parameterisation -SUBDIRS += electromagnetic/adjoint -SUBDIRS += electromagnetic/muons -SUBDIRS += electromagnetic/standard -SUBDIRS += electromagnetic/utils -SUBDIRS += electromagnetic/xrays -SUBDIRS += electromagnetic/lowenergy -SUBDIRS += electromagnetic/dna/processes -SUBDIRS += electromagnetic/dna/models -SUBDIRS += electromagnetic/dna/utils -SUBDIRS += electromagnetic/dna/management -SUBDIRS += electromagnetic/dna/molecules/management -SUBDIRS += electromagnetic/dna/molecules/types -SUBDIRS += electromagnetic/pii -SUBDIRS += electromagnetic/highenergy -SUBDIRS += electromagnetic/polarisation - -SUBLIBS = G4procman -SUBLIBS += G4cuts -SUBLIBS += G4optical -SUBLIBS += G4channeling -SUBLIBS += G4phonon -SUBLIBS += G4decay -SUBLIBS += G4scoring -SUBLIBS += G4biasing_mgt -SUBLIBS += G4biasing_gen -SUBLIBS += G4biasing_imp -SUBLIBS += G4transportation -SUBLIBS += G4parameterisation -SUBLIBS += G4muons -SUBLIBS += G4emstandard -SUBLIBS += G4emutils -SUBLIBS += G4xrays -SUBLIBS += G4emlowenergy -SUBLIBS += G4emhighenergy -SUBLIBS += G4emadjoint -SUBLIBS += G4emdna-processes -SUBLIBS += G4emdna-models -SUBLIBS += G4emdna-utils -SUBLIBS += G4emdna-man -SUBLIBS += G4emdna-molman -SUBLIBS += G4emdna-moltypes -SUBLIBS += G4empii -SUBLIBS += G4empolar - -SUBDIRS += hadronic/cross_sections -SUBDIRS += hadronic/management -SUBDIRS += hadronic/models/abla -SUBDIRS += hadronic/models/abrasion -SUBDIRS += hadronic/models/binary_cascade -SUBDIRS += hadronic/models/cascade/cascade -SUBDIRS += hadronic/models/coherent_elastic -SUBDIRS += hadronic/models/de_excitation/ablation -SUBDIRS += hadronic/models/de_excitation/evaporation -SUBDIRS += hadronic/models/de_excitation/fermi_breakup -SUBDIRS += hadronic/models/de_excitation/fission -SUBDIRS += hadronic/models/de_excitation/gem_evaporation -SUBDIRS += hadronic/models/de_excitation/handler -SUBDIRS += hadronic/models/de_excitation/management -SUBDIRS += hadronic/models/de_excitation/multifragmentation -SUBDIRS += hadronic/models/de_excitation/photon_evaporation -SUBDIRS += hadronic/models/de_excitation/util -SUBDIRS += hadronic/models/em_dissociation -SUBDIRS += hadronic/models/fission -SUBDIRS += hadronic/models/gamma_nuclear -SUBDIRS += hadronic/models/im_r_matrix -SUBDIRS += hadronic/models/inclxx/utils -SUBDIRS += hadronic/models/inclxx/incl_physics -SUBDIRS += hadronic/models/inclxx/interface -SUBDIRS += hadronic/models/lend -SUBDIRS += hadronic/models/particle_hp -SUBDIRS += hadronic/models/parton_string/diffraction -SUBDIRS += hadronic/models/parton_string/hadronization -SUBDIRS += hadronic/models/parton_string/management -SUBDIRS += hadronic/models/parton_string/qgsm -SUBDIRS += hadronic/models/lepto_nuclear -SUBDIRS += hadronic/models/pre_equilibrium/exciton_model -SUBDIRS += hadronic/models/qmd -SUBDIRS += hadronic/models/quasi_elastic -SUBDIRS += hadronic/models/radioactive_decay -SUBDIRS += hadronic/models/theo_high_energy -SUBDIRS += hadronic/processes -SUBDIRS += hadronic/stopping -SUBDIRS += hadronic/util - -SUBLIBS += G4hadronic_abla_abla -SUBLIBS += G4hadronic_abrasion -SUBLIBS += G4hadronic_xsect -SUBLIBS += G4hadronic_mgt -SUBLIBS += G4hadronic_proc -SUBLIBS += G4hadronic_stop -SUBLIBS += G4hadronic_util -SUBLIBS += G4hadronic_binary -SUBLIBS += G4hadronic_coherent_elastic -SUBLIBS += G4had_im_r_matrix -SUBLIBS += G4hadronic_qmd -SUBLIBS += G4had_fission -SUBLIBS += G4had_gamm_nuclear -SUBLIBS += G4had_lend -SUBLIBS += G4had_part_hp -SUBLIBS += G4hadronic_radioactivedecay -SUBLIBS += G4had_theo_max -SUBLIBS += G4hadronic_bert_cascade -SUBLIBS += G4hadronic_inclxx_utils -SUBLIBS += G4hadronic_inclxx_physics -SUBLIBS += G4hadronic_inclxx_interface -SUBLIBS += G4hadronic_deex_evaporation -SUBLIBS += G4hadronic_deex_fermi_breakup -SUBLIBS += G4hadronic_deex_fission -SUBLIBS += G4hadronic_deex_gem_evaporation -SUBLIBS += G4hadronic_deex_handler -SUBLIBS += G4hadronic_deex_management -SUBLIBS += G4hadronic_deex_multifragmentation -SUBLIBS += G4hadronic_deex_photon_evaporation -SUBLIBS += G4hadronic_deex_util -SUBLIBS += G4hadronic_ablation -SUBLIBS += G4hadronic_em_dissociation -SUBLIBS += G4had_preequ_exciton -SUBLIBS += G4had_lept_nuclear -SUBLIBS += G4had_string_diff -SUBLIBS += G4had_string_frag -SUBLIBS += G4had_string_man -SUBLIBS += G4hadronic_quasi_elastic -SUBLIBS += G4hadronic_qgstring - -include $(G4INSTALL)/config/globlib.gmk diff --git a/source/processes/History b/source/processes/History index 50facffa8e4..5048d3b9281 100644 --- a/source/processes/History +++ b/source/processes/History @@ -4,6 +4,9 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2022-12-12 Ben Morgan (processes-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-11-14 I. Hrivnacova (processes-V11-00-02) - Replaced reinterpret_cast with static_cast where possible diff --git a/source/processes/biasing/GNUmakefile b/source/processes/biasing/GNUmakefile deleted file mode 100644 index 94034b1775c..00000000000 --- a/source/processes/biasing/GNUmakefile +++ /dev/null @@ -1,17 +0,0 @@ -# ---------------------------------------------------------------- -# GNUmakefile for biasing processes library. -# ---------------------------------------------------------------- - -name := G4biasing - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -SUBDIRS = management generic importance - -SUBLIBS = G4biasing_mgt G4biasing_gen G4biasing_imp - -include $(G4INSTALL)/config/globlib.gmk diff --git a/source/processes/biasing/generic/GNUmakefile b/source/processes/biasing/generic/GNUmakefile deleted file mode 100644 index 677626b90f8..00000000000 --- a/source/processes/biasing/generic/GNUmakefile +++ /dev/null @@ -1,34 +0,0 @@ -# ------------------------------------------------------------ -# GNUmakefile for biasing process library. -# ------------------------------------------------------------ - -name := G4biasing_gen - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/biasing/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/biasing/management/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/digits_hits/detector/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/processes/transportation/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/biasing/importance/GNUmakefile b/source/processes/biasing/importance/GNUmakefile deleted file mode 100644 index d672b5d8736..00000000000 --- a/source/processes/biasing/importance/GNUmakefile +++ /dev/null @@ -1,34 +0,0 @@ -# ------------------------------------------------------------ -# GNUmakefile for biasing process library. -# ------------------------------------------------------------ - -name := G4biasing_imp - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/biasing/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/biasing/management/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/digits_hits/detector/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/processes/transportation/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/biasing/management/GNUmakefile b/source/processes/biasing/management/GNUmakefile deleted file mode 100644 index fb91f979820..00000000000 --- a/source/processes/biasing/management/GNUmakefile +++ /dev/null @@ -1,33 +0,0 @@ -# ------------------------------------------------------------ -# GNUmakefile for biasing process library. -# ------------------------------------------------------------ - -name := G4biasing_mgt - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/biasing/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/digits_hits/detector/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/processes/transportation/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/cuts/GNUmakefile b/source/processes/cuts/GNUmakefile deleted file mode 100644 index 49964465ad0..00000000000 --- a/source/processes/cuts/GNUmakefile +++ /dev/null @@ -1,21 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for processes/decay library. G.Folger 9/12/97 -# -------------------------------------------------------------- - -name := G4cuts - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/intercoms/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/decay/GNUmakefile b/source/processes/decay/GNUmakefile deleted file mode 100644 index 37d083e916e..00000000000 --- a/source/processes/decay/GNUmakefile +++ /dev/null @@ -1,28 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for processes/decay library. G.Folger 9/12/97 -# -------------------------------------------------------------- - -name := G4decay - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/solids/CSG/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/electromagnetic/GNUmakefile b/source/processes/electromagnetic/GNUmakefile deleted file mode 100644 index 5aad8673db7..00000000000 --- a/source/processes/electromagnetic/GNUmakefile +++ /dev/null @@ -1,23 +0,0 @@ -# ------------------------------------------------------------------ -# GNUmakefile for electromagnetic library. Gabriele Cosmo, 18/9/96. -# ------------------------------------------------------------------ - -MAKEFLAGS= --no-print-directory - -name := G4electromagnetic - -SUBDIRS = muons standard utils xrays lowenergy -SUBDIRS += pii highenergy adjoint polarisation -SUBDIRS += dna/processes dna/models dna/utils dna/management -SUBDIRS += dna/molecules/management dna/molecules/types - -SUBLIBS = G4muons G4emstandard G4emutils G4xrays G4emlowenergy -SUBLIBS += G4empii G4emhighenergy G4emadjoint G4empolar -SUBLIBS += G4emdna-processes G4emdna-models G4emdna-utils G4emdna-man -SUBLIBS += G4emdna-molman G4emdna-moltypes - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/globlib.gmk diff --git a/source/processes/electromagnetic/adjoint/GNUmakefile b/source/processes/electromagnetic/adjoint/GNUmakefile deleted file mode 100644 index bcef4aa330c..00000000000 --- a/source/processes/electromagnetic/adjoint/GNUmakefile +++ /dev/null @@ -1,37 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for electromagnetic sub-library. G.Cosmo, 14/11/2008. -# -------------------------------------------------------------------- - -name := G4emadjoint - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/electromagnetic/standard/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/adjoint/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/electromagnetic/dna/GNUmakefile b/source/processes/electromagnetic/dna/GNUmakefile deleted file mode 100644 index 45e2b4971e5..00000000000 --- a/source/processes/electromagnetic/dna/GNUmakefile +++ /dev/null @@ -1,15 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for electromagnetic sub-library. John Allison, 25/6/98. -# -------------------------------------------------------------------- - -name := G4emdna - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -SUBDIRS = management molecules/management molecules/types utils models processes -SUBLIBS = G4emdna-man G4emdna-molman G4emdna-moltypes G4emdna-utils G4emdna-models G4emdna-processes - -include $(G4INSTALL)/config/globlib.gmk - diff --git a/source/processes/electromagnetic/dna/History b/source/processes/electromagnetic/dna/History index 1c92eda1921..aa9e07520fe 100644 --- a/source/processes/electromagnetic/dna/History +++ b/source/processes/electromagnetic/dna/History @@ -6,6 +6,69 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-06-10 Hoang Tran (emdna-V11-01-15) +- minor correction for DNA material in option6 + +## 2023-06-09 Hoang Tran (emdna-V11-01-14) +- use analytical method for DNA material in option6, water is unchanged + +## 2023-06-03 Vladimir Ivanchenko (emdna-V11-01-13) +- G4DNARuddIonisationExtendedModel - model re-written: shared date between + threads, applicable for scaled energy interval 100 eV to 100 MeV, if for + an ion data is not available proton x-section and effective charge are + used, sampling of delta-electron is done using two regions regression method + +## 2023-05-25 Hoang Tran (emdna-V11-01-12) +- Modified DNA cross section file name to new G4EMLOW8.4 + +## 2023-05-19 Hoang Tran (emdna-V11-01-11) +- Add DNA cross section to dna_option6 + +## 2023-05-17 Hoang Tran (emdna-V11-01-10) +- Fix Compilation warnings on XCode + +## 2023-05-04 Hoang Tran (emdna-V11-01-09) +- correct the initial values of G4DNAEventScheduler + +## 2023-04-28 Hoang Tran (emdna-V11-01-08) +- add time structure (pulsed beam) to water radiolysis (G4VUserPulseInfo) + +## 2023-04-26 Hoang Tran (emdna-V11-01-07) +- correct KDTree bug + +## 2023-03-24 Hoang Tran (emdna-V11-01-06) +- icsd physicslist: deleted unused model, +- Apdated RegisterModel function with new structure +- added model data to G4DNAMaterialManager singleton + +## 2023-03-08 Gabriele Cosmo (emdna-V11-01-05) +- Fixed compilation warning on macOS/XCode for implicit type conversion + in G4DNAVacuumModel::Initialise(). + +## 2023-02-09 Hoang Tran (emdna-V11-01-04) +- Introduced G4DNAMaterialManager to manage available DNA material +and keeps DNA cross section data in one thread. +- minor change in G4VDNAModel + +## 2023-01-27 Hoang Tran (emdna-V11-01-03) +- reorganize multiple material model of PTB model. +G4VDNAModel plays like a data layer for multiple material model. +The concrete models are independent of G4DNAModelInterface. + +## 2023-01-17 Hoang Tran (emdna-V11-01-02) +- replaced string to material index and clean the files(G4DNAPTBExcitationModel, +G4DNAPTBIonisationModel, G4DNAPTBElasticModel,G4DNAPTBIonisationStructure, +G4DNAPTBExcitationStructure) - PTB models +- added material pointer members for each concrete models(PTB models) +- removed unused objects (G4DataVector()) + +## 2023-01-06 Hoang Tran (emdna-V11-01-01) +- clean G4DNAModelInterface file for the model combination of different materials + +## 2022-12-12 Hoang Tran (emdna-V11-01-00) +- fix coverity of G4DNARuddIonisationExtendedModel, G4DNADingfelderChargeIncreaseModel +(Uninitialized scalar variable) from cand1 analysis + ## 2022-11-24 Vladimir Ivanchenko (emdna-V11-00-39) - G4DNARuddIonisationExtendedModel - fixed common work between DNA physics and radioactive decay module - before this update test2.in macro crash, because diff --git a/source/processes/electromagnetic/dna/management/GNUmakefile b/source/processes/electromagnetic/dna/management/GNUmakefile deleted file mode 100644 index 39f9478d22f..00000000000 --- a/source/processes/electromagnetic/dna/management/GNUmakefile +++ /dev/null @@ -1,35 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for electromagnetic sub-library. John Allison, 25/6/98. -# -------------------------------------------------------------------- - -name := G4emdna-man - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4EM_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/tracking/include \ - -I$(G4BASE)/event/include \ - -I$(G4BASE)/digits_hits/digits/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/intercoms/include - -include $(G4INSTALL)/config/common.gmk - - diff --git a/source/processes/electromagnetic/dna/management/include/G4KDTree.hh b/source/processes/electromagnetic/dna/management/include/G4KDTree.hh index 7d25679e19c..aeea8476ba6 100644 --- a/source/processes/electromagnetic/dna/management/include/G4KDTree.hh +++ b/source/processes/electromagnetic/dna/management/include/G4KDTree.hh @@ -138,10 +138,10 @@ class G4KDTree template void SetMinMax(const Position& min, const Position& max) { - for(G4int i = 0; i < (G4int)fDim; ++i) + for(std::size_t i = 0; i < fDim; ++i) { - fMin[i] = min[i]; - fMax[i] = max[i]; + fMin[i] = min[(G4int)i]; + fMax[i] = max[(G4int)i]; } } @@ -185,15 +185,15 @@ class G4KDTree { G4double result = 0; - for(G4int i = 0; i < (G4int)fDim; ++i) + for(std::size_t i = 0; i < fDim; ++i) { - if(pos[i] < fMin[i]) + if(pos[(G4int)i] < fMin[i]) { - result += sqr(fMin[i] - pos[i]); + result += sqr(fMin[i] - pos[(G4int)i]); } - else if(pos[i] > fMax[i]) + else if(pos[(G4int)i] > fMax[i]) { - result += sqr(fMax[i] - pos[i]); + result += sqr(fMax[i] - pos[(G4int)i]); } if(result >= *bestmatch){ diff --git a/source/processes/electromagnetic/dna/management/include/G4KDTree.icc b/source/processes/electromagnetic/dna/management/include/G4KDTree.icc index 02b63d0795e..14526200fb6 100644 --- a/source/processes/electromagnetic/dna/management/include/G4KDTree.icc +++ b/source/processes/electromagnetic/dna/management/include/G4KDTree.icc @@ -160,9 +160,9 @@ template { G4bool do_break = false; dist_sq = 0; - for (G4int i = 0; i < (G4int)fDim; ++i) + for (std::size_t i = 0; i < fDim; ++i) { - dist_sq += sqr((*node)[i] - pos[i]); + dist_sq += sqr((*node)[i] - pos[(G4int)i]); if (dist_sq > range_sq) { do_break = true; @@ -244,9 +244,9 @@ template { dist_sq = 0; G4bool do_break = false; - for (G4int i = 0; i < (G4int)fDim; ++i) + for (std::size_t i = 0; i < fDim; ++i) { - dist_sq += sqr((*node)[i] - pos[i]); + dist_sq += sqr((*node)[i] - pos[(G4int)i]); if (dist_sq > *result_dist_sq) { do_break = true; diff --git a/source/processes/electromagnetic/dna/management/include/G4VUserPulseInfo.hh b/source/processes/electromagnetic/dna/management/include/G4VUserPulseInfo.hh new file mode 100644 index 00000000000..e4b2687b74c --- /dev/null +++ b/source/processes/electromagnetic/dna/management/include/G4VUserPulseInfo.hh @@ -0,0 +1,40 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// + +#ifndef G4VUSERPULSEINFO_HH +#define G4VUSERPULSEINFO_HH + +#include "G4VUserTrackInformation.hh" + +class G4VUserPulseInfo : public G4VUserTrackInformation +{ + public: + G4VUserPulseInfo(); + ~G4VUserPulseInfo() override = default; + virtual G4double GetDelayedTime() const { return 0.; }; +}; +#endif diff --git a/source/processes/electromagnetic/dna/management/sources.cmake b/source/processes/electromagnetic/dna/management/sources.cmake index 3416931a83f..c120c10006b 100644 --- a/source/processes/electromagnetic/dna/management/sources.cmake +++ b/source/processes/electromagnetic/dna/management/sources.cmake @@ -77,6 +77,7 @@ geant4_add_module(G4emdna-man G4VScavengerMaterial.hh G4VUserBrownianAction.hh G4VDNAMesh.hh + G4VUserPulseInfo.hh SOURCES G4AllITFinder.cc G4ITBox.cc @@ -125,7 +126,8 @@ geant4_add_module(G4emdna-man G4VITTimeStepComputer.cc G4VITTrackHolder.cc G4VScheduler.cc - G4DNABoundingBox.cc) + G4DNABoundingBox.cc + G4VUserPulseInfo.cc) geant4_module_link_libraries(G4emdna-man PUBLIC diff --git a/source/processes/electromagnetic/dna/management/src/G4Scheduler.cc b/source/processes/electromagnetic/dna/management/src/G4Scheduler.cc index 9570aa55e86..11373354475 100644 --- a/source/processes/electromagnetic/dna/management/src/G4Scheduler.cc +++ b/source/processes/electromagnetic/dna/management/src/G4Scheduler.cc @@ -540,7 +540,10 @@ void G4Scheduler::SynchronizeTracks() while(fTrackContainer.MergeNextTimeToMainList(tmpGlobalTime) && carryOn) { -// assert(tmpGlobalTime == fGlobalTime); + if(tmpGlobalTime != fGlobalTime) + { + fGlobalTime = tmpGlobalTime; + }; fStopTime = min(fTrackContainer.GetNextTime(), fEndTime); while((nextWatchedTime = GetNextWatchedTime()) < fTrackContainer.GetNextTime() && (carryOn = CanICarryOn())) diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPGamma.hh b/source/processes/electromagnetic/dna/management/src/G4VUserPulseInfo.cc similarity index 92% rename from source/processes/hadronic/models/particle_hp/include/G4NeutronHPGamma.hh rename to source/processes/electromagnetic/dna/management/src/G4VUserPulseInfo.cc index 831075bd994..cdb36c34a4a 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPGamma.hh +++ b/source/processes/electromagnetic/dna/management/src/G4VUserPulseInfo.cc @@ -23,10 +23,8 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -#ifndef G4NeutronHPGamma_h -#define G4NeutronHPGamma_h +// -#include "G4ParticleHPGamma.hh" -using G4NeutronHPGamma = G4ParticleHPGamma; +#include "G4VUserPulseInfo.hh" -#endif +G4VUserPulseInfo::G4VUserPulseInfo() : G4VUserTrackInformation("") {} diff --git a/source/processes/electromagnetic/dna/models/GNUmakefile b/source/processes/electromagnetic/dna/models/GNUmakefile deleted file mode 100644 index a4d9581100d..00000000000 --- a/source/processes/electromagnetic/dna/models/GNUmakefile +++ /dev/null @@ -1,42 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for electromagnetic sub-library. John Allison, 25/6/98. -# -------------------------------------------------------------------- - -name := G4emdna-models - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4EM_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/electromagnetic/standard/include \ - -I$(G4BASE)/processes/electromagnetic/lowenergy/include \ - -I$(G4BASE)/processes/electromagnetic/dna/utils/include \ - -I$(G4BASE)/processes/electromagnetic/dna/molecules/management/include \ - -I$(G4BASE)/processes/electromagnetic/dna/molecules/types/include \ - -I$(G4BASE)/processes/electromagnetic/dna/management/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/materials/include \ - -include $(G4INSTALL)/config/common.gmk - - diff --git a/source/processes/electromagnetic/dna/models/include/G4DNACPA100ElasticModel.hh b/source/processes/electromagnetic/dna/models/include/G4DNACPA100ElasticModel.hh index 8f8776e497a..a491ec8376b 100644 --- a/source/processes/electromagnetic/dna/models/include/G4DNACPA100ElasticModel.hh +++ b/source/processes/electromagnetic/dna/models/include/G4DNACPA100ElasticModel.hh @@ -29,126 +29,111 @@ // // Users are requested to cite the following papers: // - M. Terrissol, A. Baudre, Radiat. Prot. Dosim. 31 (1990) 175-177 -// - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries, +// - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries, // M. Bardies, N. Lampe, S. Incerti, Phys. Med. 32 (2016) 1833-1840 // -// Authors of this class: +// Authors of this class: // M.C. Bordage, M. Terrissol, S. Edel, J. Bordes, S. Incerti // // 15.01.2014: creation -// +// Based on the study by S. Zein et. al. Nucl. Inst. Meth. B 488 (2021) 70-82 +// 1/2/2023 : Hoang added modification #ifndef G4DNACPA100ElasticModel_h #define G4DNACPA100ElasticModel_h 1 -#include #include "G4DNACrossSectionDataSet.hh" -#include "G4VEmModel.hh" #include "G4Electron.hh" -#include "G4ParticleChangeForGamma.hh" #include "G4LogLogInterpolation.hh" -//#include "G4DNACPA100LogLogInterpolation.hh" -#include "G4ProductionCutsTable.hh" #include "G4NistManager.hh" +#include "G4ParticleChangeForGamma.hh" +#include "G4ProductionCutsTable.hh" +#include "G4VDNAModel.hh" + +#include -class G4DNACPA100ElasticModel : public G4VEmModel +class G4DNACPA100ElasticModel : public G4VDNAModel { + using TriDimensionMap = + std::map>>>; + using VecMap = + std::map>>>; -public: - - G4DNACPA100ElasticModel(const G4ParticleDefinition* p = 0, - const G4String& nam = "DNACPA100ElasticModel"); - - virtual ~G4DNACPA100ElasticModel(); - - virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&); - - virtual G4double CrossSectionPerVolume(const G4Material* material, - const G4ParticleDefinition* p, - G4double ekin, - G4double emin, - G4double emax); - - virtual void SampleSecondaries(std::vector*, - const G4MaterialCutsCouple*, - const G4DynamicParticle*, - G4double tmin, - G4double maxEnergy); - - inline void SelectStationary(G4bool input); - -protected: - - G4ParticleChangeForGamma* fParticleChangeForGamma; - -private: - - G4bool statCode; - - // Water density table - const std::vector* fpMolWaterDensity; - - G4bool isInitialised; - G4int verboseLevel; - - // Cross section - - typedef std::map > MapFile; - MapFile tableFile; - - typedef std::map > MapData; - MapData tableData; - - // Final state - - //G4double DifferentialCrossSection(G4ParticleDefinition * aParticleDefinition, G4double k, G4double theta); - - G4double Theta(G4ParticleDefinition * aParticleDefinition, G4double k, G4double integrDiff); - - G4double LinLinInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); - - G4double LinLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); - - G4double LogLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); - - G4double QuadInterpolator(G4double e11, - G4double e12, - G4double e21, - G4double e22, - G4double x11, - G4double x12, - G4double x21, - G4double x22, - G4double t1, - G4double t2, - G4double t, - G4double e); - - typedef std::map > TriDimensionMap; - - TriDimensionMap eDiffCrossSectionData; - std::vector eTdummyVec; - - typedef std::map > VecMap; - VecMap eVecm; - - G4double RandomizeCosTheta(G4double k); - - // - - G4DNACPA100ElasticModel & operator=(const G4DNACPA100ElasticModel &right); - G4DNACPA100ElasticModel(const G4DNACPA100ElasticModel&); + public: + explicit G4DNACPA100ElasticModel(const G4ParticleDefinition* p = nullptr, + const G4String& nam = "DNACPA100ElasticModel"); -}; + ~G4DNACPA100ElasticModel() override = default; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + void Initialise(const G4ParticleDefinition*, const G4DataVector&) override; + + G4double CrossSectionPerVolume(const G4Material* material, const G4ParticleDefinition* p, + G4double ekin, G4double emin, G4double emax) override; + + void SampleSecondaries(std::vector*, const G4MaterialCutsCouple*, + const G4DynamicParticle*, G4double tmin, G4double maxEnergy) override; + + inline void SelectStationary(G4bool input); + + G4DNACPA100ElasticModel& operator=(const G4DNACPA100ElasticModel& right) = delete; + + G4DNACPA100ElasticModel(const G4DNACPA100ElasticModel&) = delete; -inline void G4DNACPA100ElasticModel::SelectStationary (G4bool input) -{ - statCode = input; -} + inline G4double GetElasticLevel(const std::size_t& l) + { + return fLevels[l]; + } + + private: + G4ParticleChangeForGamma* fParticleChangeForGamma = nullptr; + G4bool statCode = false; + G4bool isInitialised = false; + G4int verboseLevel = 0; + + G4double Theta(const G4ParticleDefinition* p, G4double k, G4double integrDiff, + const std::size_t& materialID); + + G4double LinLinInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); + + G4double LinLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); + + G4double LogLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); + + G4double QuadInterpolator(G4double e11, G4double e12, G4double e21, G4double e22, G4double x11, + G4double x12, G4double x21, G4double x22, G4double t1, G4double t2, + G4double t, G4double e); + + G4double fKillBelowEnergy = 0.; + TriDimensionMap diffCrossSectionData; + VecMap eValuesVect; + std::map>> tValuesVec; + + G4double RandomizeCosTheta(G4double k, const std::size_t& materialID); + + void ReadDiffCSFile(const std::size_t& id, const G4ParticleDefinition* p, const G4String& file, + const G4double&) override; + + const G4Material* fpGuanine = nullptr; + const G4Material* fpG4_WATER = nullptr; + const G4Material* fpDeoxyribose = nullptr; + const G4Material* fpCytosine = nullptr; + const G4Material* fpThymine = nullptr; + const G4Material* fpAdenine = nullptr; + const G4Material* fpPhosphate = nullptr; + const G4ParticleDefinition* fpParticle = nullptr; + + G4DNACPA100ElasticModel* fpModelData = nullptr; + + std::map fLevels; +}; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... +inline void G4DNACPA100ElasticModel::SelectStationary(G4bool input) +{ + statCode = input; +} #endif diff --git a/source/processes/electromagnetic/dna/models/include/G4DNACPA100ExcitationModel.hh b/source/processes/electromagnetic/dna/models/include/G4DNACPA100ExcitationModel.hh index 6e0ed6d0fdd..68e475dcd6d 100644 --- a/source/processes/electromagnetic/dna/models/include/G4DNACPA100ExcitationModel.hh +++ b/source/processes/electromagnetic/dna/models/include/G4DNACPA100ExcitationModel.hh @@ -29,102 +29,75 @@ // // Users are requested to cite the following papers: // - M. Terrissol, A. Baudre, Radiat. Prot. Dosim. 31 (1990) 175-177 -// - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries, +// - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries, // M. Bardies, N. Lampe, S. Incerti, Phys. Med. 32 (2016) 1833-1840 // -// Authors of this class: +// Authors of this class: // M.C. Bordage, M. Terrissol, S. Edel, J. Bordes, S. Incerti // // 15.01.2014: creation // +// Based on the study by S. Zein et. al. Nucl. Inst. Meth. B 488 (2021) 70-82 +// 1/2/2023 : Hoang added modification for DNA cross sections #ifndef G4DNACPA100ExcitationModel_h #define G4DNACPA100ExcitationModel_h 1 -#include "G4VEmModel.hh" -#include "G4ParticleChangeForGamma.hh" -#include "G4ProductionCutsTable.hh" - +#include "G4DNACPA100ExcitationStructure.hh" #include "G4DNACrossSectionDataSet.hh" -#include "G4LogLogInterpolation.hh" -//#include "G4DNACPA100LogLogInterpolation.hh" #include "G4Electron.hh" -#include "G4Proton.hh" -#include "G4DNACPA100WaterExcitationStructure.hh" +#include "G4LogLogInterpolation.hh" #include "G4NistManager.hh" +#include "G4ParticleChangeForGamma.hh" +#include "G4ProductionCutsTable.hh" +#include "G4Proton.hh" +#include "G4VDNAModel.hh" -class G4DNACPA100ExcitationModel : public G4VEmModel +class G4DNACPA100ExcitationModel : public G4VDNAModel { + public: + explicit G4DNACPA100ExcitationModel(const G4ParticleDefinition* p = nullptr, + const G4String& nam = "DNACPA100ExcitationModel"); -public: - - G4DNACPA100ExcitationModel(const G4ParticleDefinition* p = 0, - const G4String& nam = "DNACPA100ExcitationModel"); - - virtual ~G4DNACPA100ExcitationModel(); + ~G4DNACPA100ExcitationModel() override = default; - virtual void Initialise(const G4ParticleDefinition*, const G4DataVector& = *(new G4DataVector()) ); + void Initialise(const G4ParticleDefinition*, const G4DataVector&) override; - virtual G4double CrossSectionPerVolume( const G4Material* material, - const G4ParticleDefinition* p, - G4double ekin, - G4double emin, - G4double emax); + G4double CrossSectionPerVolume(const G4Material* material, const G4ParticleDefinition* p, + G4double ekin, G4double emin, G4double emax) override; - virtual void SampleSecondaries(std::vector*, - const G4MaterialCutsCouple*, - const G4DynamicParticle*, - G4double tmin, - G4double maxEnergy); + void SampleSecondaries(std::vector*, const G4MaterialCutsCouple*, + const G4DynamicParticle*, G4double tmin, G4double maxEnergy) override; - inline void SelectStationary(G4bool input); + inline void SelectStationary(G4bool input); -protected: + G4DNACPA100ExcitationModel& operator=(const G4DNACPA100ExcitationModel& right) = delete; - G4ParticleChangeForGamma* fParticleChangeForGamma; - -private: - - G4bool statCode; - - // Water density table - const std::vector* fpMolWaterDensity; - - std::map > lowEnergyLimit; - std::map > highEnergyLimit; - - G4bool isInitialised; - G4int verboseLevel; - - // Cross section - - typedef std::map > MapFile; - MapFile tableFile; - - typedef std::map > MapData; - MapData tableData; - - // Partial cross section - - G4int RandomSelect(G4double energy,const G4String& particle ); - - // Final state - - G4DNACPA100WaterExcitationStructure waterStructure; - - // - - G4DNACPA100ExcitationModel & operator=(const G4DNACPA100ExcitationModel &right); - G4DNACPA100ExcitationModel(const G4DNACPA100ExcitationModel&); + G4DNACPA100ExcitationModel(const G4DNACPA100ExcitationModel&) = delete; + G4int verboseLevel = 0; + private: + G4ParticleChangeForGamma* fParticleChangeForGamma = nullptr; + G4bool statCode = false; + G4bool isInitialised = false; + G4DNACPA100ExcitationStructure eStructure; + const G4Material* fpGuanine = nullptr; + const G4Material* fpG4_WATER = nullptr; + const G4Material* fpDeoxyribose = nullptr; + const G4Material* fpCytosine = nullptr; + const G4Material* fpThymine = nullptr; + const G4Material* fpAdenine = nullptr; + const G4Material* fpPhosphate = nullptr; + const G4ParticleDefinition* fpParticle = nullptr; + G4DNACPA100ExcitationModel* fpModelData = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -inline void G4DNACPA100ExcitationModel::SelectStationary (G4bool input) -{ - statCode = input; -} +inline void G4DNACPA100ExcitationModel::SelectStationary(G4bool input) +{ + statCode = input; +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/source/processes/electromagnetic/dna/models/include/G4DNACPA100IonisationModel.hh b/source/processes/electromagnetic/dna/models/include/G4DNACPA100IonisationModel.hh index 6e792c9afd7..b1c690b52b4 100644 --- a/source/processes/electromagnetic/dna/models/include/G4DNACPA100IonisationModel.hh +++ b/source/processes/electromagnetic/dna/models/include/G4DNACPA100IonisationModel.hh @@ -29,173 +29,153 @@ // // Users are requested to cite the following papers: // - M. Terrissol, A. Baudre, Radiat. Prot. Dosim. 31 (1990) 175-177 -// - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries, +// - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries, // M. Bardies, N. Lampe, S. Incerti, Phys. Med. 32 (2016) 1833-1840 // -// Authors of this class: +// Authors of this class: // M.C. Bordage, M. Terrissol, S. Edel, J. Bordes, S. Incerti // // 15.01.2014: creation // +// Based on the study by S. Zein et. al. Nucl. Inst. Meth. B 488 (2021) 70-82 +// 1/2/2023 : Hoang added modification for DNA cross sections #ifndef G4DNACPA100IonisationModel_h #define G4DNACPA100IonisationModel_h 1 -#include "G4VEmModel.hh" -#include "G4ParticleChangeForGamma.hh" -#include "G4ProductionCutsTable.hh" - +#include "G4DNACPA100IonisationStructure.hh" #include "G4DNACrossSectionDataSet.hh" #include "G4Electron.hh" -#include "G4Proton.hh" - #include "G4LogLogInterpolation.hh" -//#include "G4DNACPA100LogLogInterpolation.hh" - -#include "G4DNACPA100WaterIonisationStructure.hh" -#include "G4VAtomDeexcitation.hh" #include "G4NistManager.hh" +#include "G4ParticleChangeForGamma.hh" +#include "G4ProductionCutsTable.hh" +#include "G4VAtomDeexcitation.hh" +#include "G4VDNAModel.hh" - -class G4DNACPA100IonisationModel : public G4VEmModel +class G4DNACPA100IonisationModel : public G4VDNAModel { + using TriDimensionMap = + std::map>>>>; + using VecMap = + std::map>>>; + using VecMapWithShell = + std::map>>>>; + using PartKineticInMat = + const std::tuple&; -public: - - G4DNACPA100IonisationModel(const G4ParticleDefinition* p = 0, - const G4String& nam = "DNACPA100IonisationModel"); - - virtual ~G4DNACPA100IonisationModel(); + public: + explicit G4DNACPA100IonisationModel(const G4ParticleDefinition* p = nullptr, + const G4String& nam = "DNACPA100IonisationModel"); - virtual void Initialise(const G4ParticleDefinition*, const G4DataVector& = *(new G4DataVector())); + ~G4DNACPA100IonisationModel() override = default; - virtual G4double CrossSectionPerVolume( const G4Material* material, - const G4ParticleDefinition* p, - G4double ekin, - G4double emin, - G4double emax); + void Initialise(const G4ParticleDefinition*, const G4DataVector&) override; - virtual void SampleSecondaries(std::vector*, - const G4MaterialCutsCouple*, - const G4DynamicParticle*, - G4double tmin, - G4double maxEnergy); - - G4double DifferentialCrossSection(G4ParticleDefinition * aParticleDefinition, G4double k, G4double energyTransfer, G4int shell); + G4double CrossSectionPerVolume(const G4Material* material, const G4ParticleDefinition* p, + G4double ekin, G4double emin, G4double emax) override; - inline void SelectFasterComputation(G4bool input); + void SampleSecondaries(std::vector*, const G4MaterialCutsCouple*, + const G4DynamicParticle*, G4double tmin, G4double maxEnergy) override; - inline void SelectUseDcs(G4bool input); + G4double DifferentialCrossSection(PartKineticInMat info, const G4double& energyTransfer); - inline void SelectStationary(G4bool input); + // G4double DifferentialCrossSection(const G4double& k, + // const G4double& energyTransfer, const G4int& + // ionizationLevelIndex, const std::size_t& materialID); -protected: + inline void SelectFasterComputation(G4bool input); - G4ParticleChangeForGamma* fParticleChangeForGamma; + inline void SelectUseDcs(G4bool input); -private: + inline void SelectStationary(G4bool input); - G4bool statCode; + G4DNACPA100IonisationModel& operator=(const G4DNACPA100IonisationModel& right) = delete; + G4DNACPA100IonisationModel(const G4DNACPA100IonisationModel&) = delete; + void ReadDiffCSFile(const std::size_t& materialID, const G4ParticleDefinition* p, + const G4String& file, const G4double& scaleFactor) override; - G4bool fasterCode; - G4bool useDcs; + protected: + G4ParticleChangeForGamma* fParticleChangeForGamma = nullptr; - // Water density table - const std::vector* fpMolWaterDensity; + private: + G4bool statCode = false; + G4bool fasterCode = true; + G4bool useDcs = false; - // Deexcitation manager to produce fluo photons and e- - G4VAtomDeexcitation* fAtomDeexcitation; + // const std::vector* fpMolMaterialDensity; - std::map > lowEnergyLimit; - std::map > highEnergyLimit; + // Deexcitation manager to produce fluo photons and e- + G4VAtomDeexcitation* fAtomDeexcitation = nullptr; - G4bool isInitialised; - G4int verboseLevel; - - // Cross section + G4bool isInitialised = false; + G4int verboseLevel = 0; - typedef std::map > MapFile; - MapFile tableFile; + G4DNACPA100IonisationStructure iStructure; - typedef std::map > MapData; - MapData tableData; - - // Final state - - G4DNACPA100WaterIonisationStructure waterStructure; + G4double RandomizeEjectedElectronEnergy(PartKineticInMat info); - G4double RandomizeEjectedElectronEnergy(G4ParticleDefinition * aParticleDefinition, G4double incomingParticleEnergy, G4int shell) ; + G4double RandomizeEjectedElectronEnergyFromCumulatedDcs(PartKineticInMat info); - G4double RandomizeEjectedElectronEnergyFromCumulatedDcs(G4ParticleDefinition * aParticleDefinition, G4double incomingParticleEnergy, G4int shell) ; + G4double RandomizeEjectedElectronEnergyFromanalytical(PartKineticInMat info); - G4double RandomizeEjectedElectronEnergyFromCompositionSampling(G4ParticleDefinition * aParticleDefinition, G4double incomingParticleEnergy, G4int shell) ; + G4double RandomTransferedEnergy(PartKineticInMat info); - G4double RandomTransferedEnergy(G4ParticleDefinition * aParticleDefinition, G4double incomingParticleEnergy, G4int shell) ; + void RandomizeEjectedElectronDirection(G4ParticleDefinition* aParticleDefinition, + G4double incomingParticleEnergy, + G4double outgoingParticleEnergy, G4double& cosTheta, + G4double& phi); - void RandomizeEjectedElectronDirection(G4ParticleDefinition * aParticleDefinition, G4double incomingParticleEnergy, G4double - outgoingParticleEnergy, G4double & cosTheta, G4double & phi ); - - G4double Interpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); - - G4double QuadInterpolator( G4double e11, - G4double e12, - G4double e21, - G4double e22, - G4double x11, - G4double x12, - G4double x21, - G4double x22, - G4double t1, - G4double t2, - G4double t, - G4double e); + G4double Interpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); - typedef std::map > TriDimensionMap; - - TriDimensionMap eDiffCrossSectionData[6]; - TriDimensionMap eNrjTransfData[6]; // for cumulated dcs - - std::vector eTdummyVec; + G4double QuadInterpolator(G4double e11, G4double e12, G4double e21, G4double e22, G4double x11, + G4double x12, G4double x21, G4double x22, G4double t1, G4double t2, + G4double t, G4double e); - typedef std::map > VecMap; - - VecMap eVecm; - - VecMap eProbaShellMap[6]; // for cumulated dcs - - // Partial cross section - - G4int RandomSelect(G4double energy,const G4String& particle ); - - // - - G4DNACPA100IonisationModel & operator=(const G4DNACPA100IonisationModel &right); - G4DNACPA100IonisationModel(const G4DNACPA100IonisationModel&); + TriDimensionMap diffCrossSectionData, fEnergySecondaryData; + std::map>> + fTMapWithVec; + VecMap fEMapWithVector; + VecMapWithShell fProbaShellMap; + const G4Material* fpGuanine = nullptr; + const G4Material* fpG4_WATER = nullptr; + const G4Material* fpDeoxyribose = nullptr; + const G4Material* fpCytosine = nullptr; + const G4Material* fpThymine = nullptr; + const G4Material* fpAdenine = nullptr; + const G4Material* fpPhosphate = nullptr; + const G4ParticleDefinition* fpParticle = nullptr; + G4DNACPA100IonisationModel* fpModelData = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -inline void G4DNACPA100IonisationModel::SelectFasterComputation (G4bool input) -{ - fasterCode = input; -} +inline void G4DNACPA100IonisationModel::SelectFasterComputation(G4bool input) +{ + fasterCode = input; +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -inline void G4DNACPA100IonisationModel::SelectUseDcs (G4bool input) -{ - useDcs = input; -} +inline void G4DNACPA100IonisationModel::SelectUseDcs(G4bool input) +{ + useDcs = input; +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -inline void G4DNACPA100IonisationModel::SelectStationary (G4bool input) -{ - statCode = input; -} +inline void G4DNACPA100IonisationModel::SelectStationary(G4bool input) +{ + statCode = input; +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/source/processes/electromagnetic/dna/models/include/G4DNADingfelderChargeIncreaseModel.hh b/source/processes/electromagnetic/dna/models/include/G4DNADingfelderChargeIncreaseModel.hh index 89f551ee574..bf2bde7636f 100644 --- a/source/processes/electromagnetic/dna/models/include/G4DNADingfelderChargeIncreaseModel.hh +++ b/source/processes/electromagnetic/dna/models/include/G4DNADingfelderChargeIncreaseModel.hh @@ -31,7 +31,6 @@ #include "G4VEmModel.hh" #include "G4ParticleChangeForGamma.hh" #include "G4ProductionCutsTable.hh" - #include "G4Electron.hh" #include "G4Proton.hh" #include "G4DNAGenericIonsManager.hh" @@ -39,94 +38,78 @@ class G4DNADingfelderChargeIncreaseModel : public G4VEmModel { - public: - G4DNADingfelderChargeIncreaseModel(const G4ParticleDefinition* p = 0, + explicit G4DNADingfelderChargeIncreaseModel(const G4ParticleDefinition* p = nullptr, const G4String& nam = "DNADingfelderChargeIncreaseModel"); - - virtual ~G4DNADingfelderChargeIncreaseModel(); - - virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&); - - virtual G4double CrossSectionPerVolume(const G4Material* material, + ~G4DNADingfelderChargeIncreaseModel() override = default; + void Initialise(const G4ParticleDefinition*, const G4DataVector&) override; + G4double CrossSectionPerVolume(const G4Material* material, const G4ParticleDefinition* p, G4double ekin, G4double emin, - G4double emax); - - virtual void SampleSecondaries(std::vector*, + G4double emax) override; + void SampleSecondaries(std::vector*, const G4MaterialCutsCouple*, const G4DynamicParticle*, G4double tmin, - G4double maxEnergy); - - inline void SelectStationary(G4bool input); - + G4double maxEnergy) override; + inline void SelectStationary(G4bool input); protected: - - G4ParticleChangeForGamma* fParticleChangeForGamma; - + G4ParticleChangeForGamma* fParticleChangeForGamma = nullptr; private: - // Water density table - const std::vector* fpMolWaterDensity; + const std::vector* fpMolWaterDensity = nullptr; std::map > lowEnergyLimit; std::map > highEnergyLimit; - G4bool isInitialised, statCode; - G4int verboseLevel; + G4bool isInitialised = false, statCode = false; + // Verbosity scale: + // 0 = nothing + // 1 = warning for energy non-conservation + // 2 = details of energy budget + // 3 = calculation of cross sections, file openings, sampling of atoms + // 4 = entering in methods + G4int verboseLevel = 0; // Partial cross section - G4double PartialCrossSection(G4double energy, G4int level, const G4ParticleDefinition* particle); + G4double PartialCrossSection(const G4double& energy, const G4int& level, const G4ParticleDefinition* particle); - G4double Sum(G4double energy, const G4ParticleDefinition* particle); + G4double Sum(const G4double& energy, const G4ParticleDefinition* particle); - G4int RandomSelect(G4double energy, const G4ParticleDefinition* particle); + G4int RandomSelect(const G4double& energy, const G4ParticleDefinition* particle); - G4int numberOfPartialCrossSections[2]; // 2 is the particle type index - - G4double f0[2][2]; - G4double a0[2][2]; - G4double a1[2][2]; - G4double b0[2][2]; - G4double b1[2][2]; - G4double c0[2][2]; - G4double d0[2][2]; - G4double x0[2][2]; - G4double x1[2][2]; + G4int numberOfPartialCrossSections[2] = {0}; // 2 is the particle type index + G4double f0[2][2] = {{0, 0},{0, 0}}; + G4double a0[2][2] = {{0, 0},{0, 0}}; + G4double a1[2][2] = {{0, 0},{0, 0}}; + G4double b0[2][2] = {{0, 0},{0, 0}}; + G4double b1[2][2] = {{0, 0},{0, 0}}; + G4double c0[2][2] = {{0, 0},{0, 0}}; + G4double d0[2][2] = {{0, 0},{0, 0}}; + G4double x0[2][2] = {{0, 0},{0, 0}}; + G4double x1[2][2] = {{0, 0},{0, 0}}; // Final state - G4int NumberOfFinalStates(G4ParticleDefinition* particleDefinition, G4int finalStateIndex); - G4ParticleDefinition* OutgoingParticleDefinition(G4ParticleDefinition* particleDefinition, G4int finalStateIndex); - - G4double WaterBindingEnergyConstant(G4ParticleDefinition * aParticleDefinition, G4int finalStateIndex); - - G4double OutgoingParticleBindingEnergyConstant(G4ParticleDefinition* particleDefinition, G4int finalStateIndex); - G4double IncomingParticleBindingEnergyConstant(G4ParticleDefinition* particleDefinition, G4int finalStateIndex); - - // - - G4DNADingfelderChargeIncreaseModel & operator=(const G4DNADingfelderChargeIncreaseModel &right); - G4DNADingfelderChargeIncreaseModel(const G4DNADingfelderChargeIncreaseModel&); - + G4DNADingfelderChargeIncreaseModel & operator=(const G4DNADingfelderChargeIncreaseModel &right)= delete; + G4DNADingfelderChargeIncreaseModel(const G4DNADingfelderChargeIncreaseModel&) = delete; // Reusable particle definitions - G4ParticleDefinition* hydrogenDef; - G4ParticleDefinition* alphaPlusPlusDef; - G4ParticleDefinition* alphaPlusDef; - G4ParticleDefinition* heliumDef; + G4ParticleDefinition* hydrogenDef = nullptr; + G4ParticleDefinition* alphaPlusPlusDef = nullptr; + G4ParticleDefinition* alphaPlusDef = nullptr; + G4ParticleDefinition* heliumDef = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... inline void G4DNADingfelderChargeIncreaseModel::SelectStationary (G4bool input) { - statCode = input; + statCode = input; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/source/processes/electromagnetic/dna/models/include/G4DNADummyModel.hh b/source/processes/electromagnetic/dna/models/include/G4DNADummyModel.hh deleted file mode 100644 index 2bb3f34b5cd..00000000000 --- a/source/processes/electromagnetic/dna/models/include/G4DNADummyModel.hh +++ /dev/null @@ -1,77 +0,0 @@ -// -// ******************************************************************** -// * 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. * -// ******************************************************************** -// -// -// Contact authors: S. Meylan, C. Villagrasa -// -// email: sylvain.meylan@symalgo-tech.com, carmen.villagrasa@irsn.fr - -#ifndef G4DNADUMMYMODEL_HH -#define G4DNADUMMYMODEL_HH - -#include "G4VDNAModel.hh" -#include "G4VEmModel.hh" -#include "G4Electron.hh" -#include "G4Proton.hh" -#include "G4ParticleChangeForGamma.hh" - -class G4DNADummyModel : public G4VDNAModel -{ -public: - G4DNADummyModel(const G4String& applyToMaterial, - const G4ParticleDefinition* p, - const G4String& nam, - G4VEmModel* emModel); - ~G4DNADummyModel(); - - virtual void Initialise(const G4ParticleDefinition* particle, const G4DataVector& = *(new G4DataVector()), G4ParticleChangeForGamma* changeForGamme=nullptr); - - virtual G4double CrossSectionPerVolume(const G4Material* material, - const G4String& materialName, - const G4ParticleDefinition* p, - G4double ekin, - G4double emin, - G4double emax); - - virtual void SampleSecondaries(std::vector*, - const G4MaterialCutsCouple*, - const G4String& materialName, - const G4DynamicParticle*, - G4ParticleChangeForGamma *particleChangeForGamma, - G4double tmin, - G4double tmax); - - const G4VEmModel* GetEmModel() const {return fpEmModel;} - G4VEmModel* GetEmModel() {return fpEmModel;} - -private: - G4VEmModel* fpEmModel; - const G4ParticleDefinition* fpParticleDef; - const std::vector* fMaterialMolPerVol; - - G4double GetNumMoleculePerVolumeUnitForMaterial(const G4Material *mat); -}; - -#endif // G4DNADUMMYMODEL_HH diff --git a/source/processes/electromagnetic/dna/models/include/G4DNAEventScheduler.hh b/source/processes/electromagnetic/dna/models/include/G4DNAEventScheduler.hh index 51fef26be1e..a12d583d8ea 100644 --- a/source/processes/electromagnetic/dna/models/include/G4DNAEventScheduler.hh +++ b/source/processes/electromagnetic/dna/models/include/G4DNAEventScheduler.hh @@ -57,11 +57,11 @@ class G4DNAEventScheduler : public IEventScheduler using MolType = const G4MolecularConfiguration*; using MapList = std::map; using MapCounter = std::map; - G4DNAEventScheduler(const G4DNABoundingBox& boundingBox, G4int pixel); + G4DNAEventScheduler(); ~G4DNAEventScheduler() override; G4DNAEventScheduler(const G4DNAEventScheduler&) = delete; G4DNAEventScheduler& operator=(const G4DNAEventScheduler& right) = delete; - void Initialize(); + void Initialize(const G4DNABoundingBox& boundingBox, G4int pixel); void InitializeInMesh(); void Voxelizing(); void ReVoxelizing(G4int); @@ -106,11 +106,10 @@ class G4DNAEventScheduler : public IEventScheduler G4double fGlobalTime = 1 * CLHEP::picosecond; G4double fJumpingNumber = 0; G4double fReactionNumber = 0; - G4int fPixel; + G4int fPixel = 0; G4bool fIsChangeMesh = false; G4bool fSetChangeMesh = true; G4int fStepNumberInMesh = 0; - G4double fInitialPixels; G4double fTransferTime = 0.; const G4double C = 20; const G4double D = G4H2O2::Definition()->GetDiffusionCoefficient(); // this is the biggest D diff --git a/source/processes/electromagnetic/dna/models/include/G4DNAModelInterface.hh b/source/processes/electromagnetic/dna/models/include/G4DNAModelInterface.hh index 1b21641374b..30c22047b32 100644 --- a/source/processes/electromagnetic/dna/models/include/G4DNAModelInterface.hh +++ b/source/processes/electromagnetic/dna/models/include/G4DNAModelInterface.hh @@ -27,150 +27,134 @@ // Contact authors: S. Meylan, C. Villagrasa // // email: sylvain.meylan@symalgo-tech.com, carmen.villagrasa@irsn.fr +// updated : Hoang Tran : 6/1/2023 clean code #ifndef G4DNAMODELINTERFACE_HH #define G4DNAMODELINTERFACE_HH -#include -#include "G4DNACrossSectionDataSet.hh" #include "G4VEmModel.hh" -#include "G4VDNAModel.hh" -#include "G4Electron.hh" -#include "G4ParticleChangeForGamma.hh" -#include "G4LogLogInterpolation.hh" -#include "G4ProductionCutsTable.hh" -#include "G4NistManager.hh" -#include "G4DNADummyModel.hh" +#include +class G4ParticleChangeForGamma; +class G4VDNAModel; class G4DNAModelInterface : public G4VEmModel { - -public: - - /*! - * \brief G4DNAModelManager - * Constructor - * \param nam - */ - G4DNAModelInterface(const G4String& nam); - - /*! - * \brief ~G4DNAModelManager - * Destructor - */ - virtual ~G4DNAModelInterface(); - - /*! - * \brief Initialise - * Initialise method to call all the initialise methods of the registered models - * \param particle - * \param cuts - */ - virtual void Initialise(const G4ParticleDefinition* particle, const G4DataVector& cuts); - - /*! - * \brief CrossSectionPerVolume - * Method called by the process and used to call the CrossSectionPerVolume method of the registered models. - * The method also calculates through G4DNAMolecularMaterial the number of molecule per volume unit for the current - * material or (component of a composite material). - * \param material - * \param p - * \param ekin - * \param emin - * \param emax - * \return the final cross section value times with the number of molecule per volume unit - */ - virtual G4double CrossSectionPerVolume(const G4Material* material, - const G4ParticleDefinition* p, - G4double ekin, - G4double emin, - G4double emax); - - /*! - * \brief SampleSecondaries - * Used to call the SampleSecondaries method of the registered models. A sampling is done to select - * a component if the material is a composite one. - * \param fVect - * \param couple - * \param aDynamicElectron - * \param tmin - * \param tmax - */ - virtual void SampleSecondaries(std::vector*fVect, - const G4MaterialCutsCouple* couple, - const G4DynamicParticle* aDynamicElectron, - G4double tmin, - G4double tmax); - - /*! - * \brief RegisterModel - * Method used to associate a model with the interaction - * \param model - */ - void RegisterModel(G4VDNAModel* model); - - void RegisterModel(G4VEmModel* model, const G4ParticleDefinition* particle); - - /*! - * \brief GetSelectedMaterial - * To allow the user to retrieve the selected material in case of a composite material. - * \return the last selected material by SampleSecondaries. - */ - G4String GetSelectedMaterial(){return fSampledMat;} - -private: - - const G4String fName; ///< name of the interaction - - G4ParticleChangeForGamma* fpParticleChangeForGamma; ///< pointer used to change the characteristics of the current particle - - std::vector fRegisteredModels; ///< vector containing all the registered models - - std::map fMaterialCS; ///< map used to share information between CrossSectionPerVolume and SampleSecondaries - - G4double fCSsumTot; ///< value which contains the sum of all the component cross sections in case of a composite material - - G4String fSampledMat; ///< for the user to retrieve selected material/component - - typedef std::map > > MaterialParticleModelTable; - MaterialParticleModelTable fMaterialParticleModelTable; ///< map: [materialName][particleName] = vector of models - - std::map* > fMaterialMolPerVol; - - /*! - * \brief BuildMaterialParticleModelTable - * Method used to build a map allowing the code to quickly retrieve the good model for a particle/material couple - * \param p - */ - void BuildMaterialParticleModelTable(const G4ParticleDefinition *p); - - void BuildMaterialMolPerVolTable(); - - /*! - * \brief InsertModelInTable - * Used to put a model in the table after performing some checks. - * \param matName - * \param pName - */ - void InsertModelInTable(const G4String& matName, const G4String& pName); - - /*! - * \brief GetDNAModel - * \param material - * \param particle - * \param ekin - * \return G4VDNAModel* - * Return the model corresponding to the material, particle and energy specified. - * This method will check the energy range of the models to find to good one for the current ekin. - */ - G4VDNAModel* GetDNAModel(const G4String& material, const G4String& particle, G4double ekin); - - G4double GetNumMoleculePerVolumeUnitForMaterial(const G4Material *mat); - G4double GetNumMolPerVolUnitForComponentInComposite(const G4Material *component, const G4Material* composite); - - // copy constructor and hide assignment operator - G4DNAModelInterface(const G4DNAModelInterface&); // prevent copy-construction - G4DNAModelInterface & operator=(const G4DNAModelInterface &right); // prevent assignement +using MaterialParticleModelTable = + std::map>; +//should have only one model + public: + /*! + * \brief G4DNAModelManager + * Constructor + * \param nam + */ + explicit G4DNAModelInterface(const G4String& nam); + + /*! + * \brief ~G4DNAModelManager + * Destructor + */ + ~G4DNAModelInterface() override = default; + + /*! + * \brief Initialise + * Initialise method to call all the initialise methods of the registered models + * \param particle + * \param cuts + */ + void Initialise(const G4ParticleDefinition* particle, const G4DataVector& cuts) override; + + /*! + * \brief CrossSectionPerVolume + * Method called by the process and used to call the CrossSectionPerVolume method of the + * registered models. The method also calculates through G4DNAMolecularMaterial the number of + * molecule per volume unit for the current material or (component of a composite material). + * \param material + * \param p + * \param ekin + * \param emin + * \param emax + * \return the final cross section value times with the number of molecule per volume unit + */ + G4double CrossSectionPerVolume(const G4Material* material, const G4ParticleDefinition* p, + G4double ekin, G4double emin, G4double emax) override; + + /*! + * \brief SampleSecondaries + * Used to call the SampleSecondaries method of the registered models. A sampling is done to + * select a component if the material is a composite one. \param fVect \param couple \param + * aDynamicElectron \param tmin \param tmax + */ + void SampleSecondaries(std::vector* fVect, const G4MaterialCutsCouple* couple, + const G4DynamicParticle* aDynamicElectron, G4double tmin, G4double tmax) override; + + /*! + * \brief RegisterModel + * Method used to associate a model with the interaction + * \param model + */ + void RegisterModel(G4VEmModel* model); + /*! + * \brief GetSelectedMaterial + * To allow the user to retrieve the selected material in case of a composite material. + * \return the last selected material by SampleSecondaries. + */ + inline std::size_t GetSelectedMaterial() + { + return fSampledMat; + } + + void StreamInfo(std::ostream& os) const; + + private: + /*! + * \brief BuildMaterialParticleModelTable + * Method used to build a map allowing the code to quickly retrieve the good model for a + * particle/material couple \param p + */ + void BuildMaterialParticleModelTable(const G4ParticleDefinition* p); + + void BuildMaterialMolPerVolTable(); + + /*! + * \brief InsertModelInTable + * Used to put a model in the table after performing some checks. + * \param matName + * \param pName + */ + void InsertModelInTable(const std::size_t& matID, const G4ParticleDefinition* p); + + /*! + * \brief GetDNAModel + * \param material + * \param particle + * \param ekin + * \return G4VDNAModel* + * Return the model corresponding to the material, particle and energy specified. + * This method will check the energy range of the models to find to good one for the current ekin. + */ + G4VEmModel* SelectModel( + const std::size_t& material, const G4ParticleDefinition* particle, const G4double& ekin); + + G4double GetNumMoleculePerVolumeUnitForMaterial(const G4Material* mat); + G4double GetNumMolPerVolUnitForComponentInComposite( + const G4Material* component, const G4Material* composite); + + // copy constructor and hide assignment operator + G4DNAModelInterface(const G4DNAModelInterface&) = delete; // prevent copy-construction + G4DNAModelInterface& operator=(const G4DNAModelInterface& right) = delete; // prevent assignement + const G4String fName; ///< name of the interaction + G4ParticleChangeForGamma* fpParticleChangeForGamma = nullptr; + std::vector fRegisteredModels; ///< vector containing all the registered models + + std::map fMaterialCS; ///< map used to share information between + ///< CrossSectionPerVolume and SampleSecondaries + G4double fCSsumTot = 0; ///< value which contains the sum of all the component cross sections in + ///< case of a composite material + std::size_t fSampledMat = 0; ///< for the user to retrieve selected material/component + MaterialParticleModelTable fMaterialParticleModelTable; + std::map*> fMaterialMolPerVol; + G4Material* fpG4_WATER = nullptr; }; -#endif // G4DNAMODELINTERFACE_HH +#endif // G4DNAMODELINTERFACE_HH diff --git a/source/processes/electromagnetic/dna/models/include/G4DNAPTBElasticModel.hh b/source/processes/electromagnetic/dna/models/include/G4DNAPTBElasticModel.hh index b39c5d971f3..1884de31d0d 100644 --- a/source/processes/electromagnetic/dna/models/include/G4DNAPTBElasticModel.hh +++ b/source/processes/electromagnetic/dna/models/include/G4DNAPTBElasticModel.hh @@ -28,18 +28,18 @@ // M. Bug et al, Rad. Phys and Chem. 130, 459-479 (2017) // - #ifndef G4DNAPTBElasticModel_h #define G4DNAPTBElasticModel_h 1 -#include #include "G4DNACrossSectionDataSet.hh" -#include "G4VDNAModel.hh" #include "G4Electron.hh" -#include "G4ParticleChangeForGamma.hh" #include "G4LogLogInterpolation.hh" -#include "G4ProductionCutsTable.hh" #include "G4NistManager.hh" +#include "G4ParticleChangeForGamma.hh" +#include "G4ProductionCutsTable.hh" +#include "G4VDNAModel.hh" + +#include /*! * \brief The G4DNAPTBElasticModel class @@ -47,182 +47,179 @@ */ class G4DNAPTBElasticModel : public G4VDNAModel { - -public: - - /*! - * \brief G4DNAPTBElasticModel - * Constructor - * \param applyToMaterial - * \param p - * \param nam - */ - G4DNAPTBElasticModel(const G4String &applyToMaterial = "all", const G4ParticleDefinition* p = 0, - const G4String& nam = "DNAPTBElasticModel"); - - /*! - * \brief ~G4DNAPTBElasticModel - * Destructor - */ - virtual ~G4DNAPTBElasticModel(); - - /*! - * \brief Initialise - * Mandatory method for every model class. The material/particle for which the model - * can be used have to be added here through the AddCrossSectionData method. - * Then the LoadCrossSectionData method must be called to trigger the load process. - * Scale factors to be applied to the cross section can be defined here. - */ - virtual void Initialise(const G4ParticleDefinition* particle, const G4DataVector&, G4ParticleChangeForGamma* fpChangeForGamme=nullptr); - - /*! - * \brief CrossSectionPerVolume - * This method is mandatory for any model class. It finds and return the cross section value - * for the current material, particle and energy values. - * The number of molecule per volume is not used here but in the G4DNAModelInterface class. - * \param material - * \param materialName - * \param p - * \param ekin - * \param emin - * \param emax - * \return the cross section value - */ - virtual G4double CrossSectionPerVolume(const G4Material* material, - const G4String& materialName, - const G4ParticleDefinition* p, - G4double ekin, - G4double emin, - G4double emax); - - /*! - * \brief SampleSecondaries - * Method called after CrossSectionPerVolume if the process is the one which is selected (according to the sampling on the calculated path length). - * Here, the characteristics of the incident and created (if any) particle(s) are set (energy, momentum ...). - * \param materialName - * \param particleChangeForGamma - * \param tmin - * \param tmax - */ - virtual void SampleSecondaries(std::vector*, - const G4MaterialCutsCouple*, - const G4String& materialName, - const G4DynamicParticle*, - G4ParticleChangeForGamma *particleChangeForGamma, - G4double tmin, - G4double tmax); - -protected: - - - -private: - - G4int verboseLevel; ///< verbose level - std::map killBelowEnergyTable; ///< map to save the different energy kill limits for the materials - G4double fKillBelowEnergy; ///< energy kill limit - - typedef std::map > > > TriDimensionMap; - TriDimensionMap diffCrossSectionData; ///< A map: [materialName][particleName]=DiffCrossSectionTable - - typedef std::map > > > VecMap; - VecMap eValuesVect; /*!< map with vectors containing all the output energy (E) of the differential file */ - std::map > > tValuesVec; ///< map with vectors containing all the incident (T) energy of the differential file - - /*! - * \brief ReadDiffCSFile - * Method to read the differential cross section files. This method is not standard yet so every model must implement its own. - * \param materialName - * \param particleName - * \param file - */ - void ReadDiffCSFile(const G4String &materialName, const G4String &particleName, const G4String &file, const G4double); - - /*! - * \brief Theta - * To return an angular theta value from the differential file. This method uses interpolations to calculate - * the theta value. - * \param fParticleDefinition - * \param k - * \param integrDiff - * \param materialName - * \return a theta value - */ - G4double Theta(G4ParticleDefinition * fParticleDefinition, G4double k, G4double integrDiff, const G4String &materialName); - - /*! - * \brief LinLinInterpolate - * \param e1 - * \param e2 - * \param e - * \param xs1 - * \param xs2 - * \return - */ - G4double LinLinInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); - - /*! - * \brief LinLogInterpolate - * \param e1 - * \param e2 - * \param e - * \param xs1 - * \param xs2 - * \return - */ - G4double LinLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); - - /*! - * \brief LogLogInterpolate - * \param e1 - * \param e2 - * \param e - * \param xs1 - * \param xs2 - * \return - */ - G4double LogLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); - - /*! - * \brief QuadInterpolator - * \param e11 - * \param e12 - * \param e21 - * \param e22 - * \param x11 - * \param x12 - * \param x21 - * \param x22 - * \param t1 - * \param t2 - * \param t - * \param e - * \return - */ - G4double QuadInterpolator(G4double e11, - G4double e12, - G4double e21, - G4double e22, - G4double x11, - G4double x12, - G4double x21, - G4double x22, - G4double t1, - G4double t2, - G4double t, - G4double e); - - /*! - * \brief RandomizeCosTheta - * \param k - * \param materialName - * \return - */ - G4double RandomizeCosTheta(G4double k, const G4String &materialName); - - // copy constructor and hide assignment operator - G4DNAPTBElasticModel(G4DNAPTBElasticModel &); // prevent copy-construction - G4DNAPTBElasticModel & operator=(const G4DNAPTBElasticModel &right); // prevent assignement + public: + using TriDimensionMap = std::map>>>; + using VecMap = std::map>>>; + /*! + * \brief G4DNAPTBElasticModel + * Constructor + * \param applyToMaterial + * \param p + * \param nam + */ + G4DNAPTBElasticModel(const G4String& applyToMaterial = "all", + const G4ParticleDefinition* p = nullptr, const G4String& nam = "DNAPTBElasticModel"); + + /*! + * \brief ~G4DNAPTBElasticModel + * Destructor + */ + ~G4DNAPTBElasticModel() override = default; + + /*! + * \brief Initialise + * Mandatory method for every model class. The material/particle for which the model + * can be used have to be added here through the AddCrossSectionData method. + * Then the LoadCrossSectionData method must be called to trigger the load process. + * Scale factors to be applied to the cross section can be defined here. + */ + void Initialise(const G4ParticleDefinition* particle, const G4DataVector&) override; + + /*! + * \brief CrossSectionPerVolume + * This method is mandatory for any model class. It finds and return the cross section value + * for the current material, particle and energy values. + * The number of molecule per volume is not used here but in the G4DNAModelInterface class. + * \param material + * \param materialName + * \param p + * \param ekin + * \param emin + * \param emax + * \return the cross section value + */ + G4double CrossSectionPerVolume(const G4Material* material, const G4ParticleDefinition* p, + G4double ekin, G4double emin, G4double emax) override; + + /*! + * \brief SampleSecondaries + * Method called after CrossSectionPerVolume if the process is the one which is selected + * (according to the sampling on the calculated path length). Here, the characteristics of the + * incident and created (if any) particle(s) are set (energy, momentum ...). \param materialName + * \param particleChangeForGamma + * \param tmin + * \param tmax + */ + void SampleSecondaries(std::vector*, const G4MaterialCutsCouple*, + const G4DynamicParticle*, G4double tmin, G4double tmax) override; + + protected: + G4ParticleChangeForGamma* fParticleChangeForGamma = nullptr; + + private: + G4int verboseLevel = 0; ///< verbose level + // Verbosity scale: + // 0 = nothing + // 1 = warning for energy non-conservation + // 2 = details of energy budget + // 3 = calculation of cross sections, file openings, sampling of atoms + // 4 = entering in methods + G4double fKillBelowEnergy = 0.; + ///< energy kill limit + TriDimensionMap diffCrossSectionData; + ///< A map: [materialName][particleName]=DiffCrossSectionTable + VecMap eValuesVect; + /*!< map with vectors containing all the output energy (E) of the diff. file */ + std::map>> tValuesVec; + ///< map with vectors containing all the incident (T) energy of the dif. file + + G4Material* fpGuanine_PU = nullptr; + G4Material* fpTHF = nullptr; + G4Material* fpPY = nullptr; + G4Material* fpPU = nullptr; + G4Material* fpTMP = nullptr; + G4Material* fpG4_WATER = nullptr; + G4Material* fpBackbone_THF = nullptr; + G4Material* fpCytosine_PY = nullptr; + G4Material* fpThymine_PY = nullptr; + G4Material* fpAdenine_PU = nullptr; + G4Material* fpBackbone_TMP = nullptr; + G4Material* fpN2 = nullptr; + G4DNAPTBElasticModel* fpModelData = nullptr; + + /*! + * \brief ReadDiffCSFile + * Method to read the differential cross section files. This method is not standard yet so every + * model must implement its own. \param materialName \param particleName \param file + */ + void ReadDiffCSFile(const std::size_t& materialID, const G4ParticleDefinition* particleName, + const G4String& file, const G4double&) override; + + /*! + * \brief Theta + * To return an angular theta value from the differential file. This method uses interpolations to + * calculate the theta value. \param fParticleDefinition \param k \param integrDiff \param + * materialName \return a theta value + */ + G4double Theta( + const G4ParticleDefinition* p, G4double k, G4double integrDiff, const std::size_t& materialID); + + /*! + * \brief LinLinInterpolate + * \param e1 + * \param e2 + * \param e + * \param xs1 + * \param xs2 + * \return + */ + G4double LinLinInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); + + /*! + * \brief LinLogInterpolate + * \param e1 + * \param e2 + * \param e + * \param xs1 + * \param xs2 + * \return + */ + G4double LinLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); + + /*! + * \brief LogLogInterpolate + * \param e1 + * \param e2 + * \param e + * \param xs1 + * \param xs2 + * \return + */ + G4double LogLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); + + /*! + * \brief QuadInterpolator + * \param e11 + * \param e12 + * \param e21 + * \param e22 + * \param x11 + * \param x12 + * \param x21 + * \param x22 + * \param t1 + * \param t2 + * \param t + * \param e + * \return + */ + G4double QuadInterpolator(G4double e11, G4double e12, G4double e21, G4double e22, G4double x11, + G4double x12, G4double x21, G4double x22, G4double t1, G4double t2, G4double t, G4double e); + + /*! + * \brief RandomizeCosTheta + * \param k + * \param materialName + * \return + */ + G4double RandomizeCosTheta(const G4double& k, const std::size_t& materialName); + + // copy constructor and hide assignment operator + G4DNAPTBElasticModel(G4DNAPTBElasticModel&) = delete; // prevent copy-construction + G4DNAPTBElasticModel& operator=( + const G4DNAPTBElasticModel& right) = delete; // prevent assignement }; #endif diff --git a/source/processes/electromagnetic/dna/models/include/G4DNAPTBExcitationModel.hh b/source/processes/electromagnetic/dna/models/include/G4DNAPTBExcitationModel.hh index 435c5e60142..b686facd919 100644 --- a/source/processes/electromagnetic/dna/models/include/G4DNAPTBExcitationModel.hh +++ b/source/processes/electromagnetic/dna/models/include/G4DNAPTBExcitationModel.hh @@ -31,53 +31,49 @@ #ifndef G4DNAPTBExcitationModel_h #define G4DNAPTBExcitationModel_h 1 -#include "G4VDNAModel.hh" -#include "G4ParticleChangeForGamma.hh" -#include "G4ProductionCutsTable.hh" - #include "G4DNACrossSectionDataSet.hh" -#include "G4LogLogInterpolation.hh" -#include "G4Electron.hh" -#include "G4Proton.hh" -#include "G4NistManager.hh" - -#include "G4DNAWaterExcitationStructure.hh" - #include "G4DNAPTBExcitationStructure.hh" #include "G4DNAPTBIonisationStructure.hh" - +#include "G4DNAWaterExcitationStructure.hh" +#include "G4Electron.hh" +#include "G4LogLogInterpolation.hh" +#include "G4NistManager.hh" +#include "G4ParticleChangeForGamma.hh" +#include "G4ProductionCutsTable.hh" +#include "G4Proton.hh" +#include "G4VDNAModel.hh" /*! * \brief The G4DNAPTBExcitationModel class * This class implements the PTB excitation model. */ +class G4Material; class G4DNAPTBExcitationModel : public G4VDNAModel { + public: + using MapMeanEnergy = std::map; + /*! + * \brief G4DNAPTBExcitationModel + * Constructor + * \param applyToMaterial + * \param p + * \param nam + */ + G4DNAPTBExcitationModel(const G4String& applyToMaterial = "all", + const G4ParticleDefinition* p = nullptr, const G4String& nam = "DNAPTBExcitationModel"); -public: - - /*! - * \brief G4DNAPTBExcitationModel - * Constructor - * \param applyToMaterial - * \param p - * \param nam - */ - G4DNAPTBExcitationModel(const G4String &applyToMaterial = "all", const G4ParticleDefinition* p = 0, - const G4String& nam = "DNAPTBExcitationModel"); - - /*! + /*! * \brief ~G4DNAPTBExcitationModel * Destructor */ - virtual ~G4DNAPTBExcitationModel(); + ~G4DNAPTBExcitationModel() override = default; - /*! + /*! * \brief Initialise * Set the materials for which the model can be used and defined the energy limits */ - virtual void Initialise(const G4ParticleDefinition* particle, const G4DataVector& = *(new G4DataVector()), G4ParticleChangeForGamma* fpChangeForGamme=nullptr); + void Initialise(const G4ParticleDefinition* particle, const G4DataVector&) override; - /*! + /*! * \brief CrossSectionPerVolume * Retrieve the cross section corresponding to the current material, particle and energy * \param material @@ -88,47 +84,54 @@ public: * \param emax * \return the cross section value */ - virtual G4double CrossSectionPerVolume(const G4Material* material, - const G4String& materialName, - const G4ParticleDefinition* p, - G4double ekin, - G4double emin, - G4double emax); + G4double CrossSectionPerVolume(const G4Material* material, const G4ParticleDefinition* p, + G4double ekin, G4double emin, G4double emax) override; - /*! + /*! * \brief SampleSecondaries - * If the model is selected for the ModelInterface then the SampleSecondaries method will be called. - * The method sets the incident particle characteristics after the ModelInterface. - * \param materialName - * \param particleChangeForGamma - * \param tmin - * \param tmax + * If the model is selected for the ModelInterface then the SampleSecondaries method will be + * called. The method sets the incident particle characteristics after the ModelInterface. \param + * materialName \param particleChangeForGamma \param tmin \param tmax */ - virtual void SampleSecondaries(std::vector*, - const G4MaterialCutsCouple*, - const G4String& materialName, - const G4DynamicParticle*, - G4ParticleChangeForGamma *particleChangeForGamma, - G4double tmin, - G4double tmax); - -protected: - -private: - - G4int verboseLevel; ///< verbose level - + void SampleSecondaries(std::vector*, const G4MaterialCutsCouple*, + const G4DynamicParticle*, G4double tmin, G4double tmax) override; + + G4ParticleChangeForGamma* fParticleChangeForGamma = nullptr; + + private: + G4int verboseLevel = 0; ///< verbose level + // Verbosity scale: + // 0 = nothing + // 1 = warning for energy non-conservation + // 2 = details of energy budget + // 3 = calculation of cross sections, file openings, sampling of atoms + // 4 = entering in methods G4DNAWaterExcitationStructure waterStructure; G4DNAPTBExcitationStructure ptbExcitationStructure; G4DNAPTBIonisationStructure ptbIonisationStructure; - - typedef std::map > MapMeanEnergy; - MapMeanEnergy tableMeanEnergyPTB; ///< map: [materialName]=energyValue - + + MapMeanEnergy fTableMeanEnergyPTB; ///< map: [materialName]=energyValue + // copy constructor and hide assignment operator - G4DNAPTBExcitationModel(const G4DNAPTBExcitationModel&); // prevent copy-construction - G4DNAPTBExcitationModel & operator=(const G4DNAPTBExcitationModel &right); // prevent assignement + G4DNAPTBExcitationModel(const G4DNAPTBExcitationModel&) = delete; // prevent copy-construction + G4DNAPTBExcitationModel& operator=( + const G4DNAPTBExcitationModel& right) = delete; // prevent assignement + + G4Material* fpGuanine_PU = nullptr; + G4Material* fpTHF = nullptr; + G4Material* fpPY = nullptr; + G4Material* fpPU = nullptr; + G4Material* fpTMP = nullptr; + G4Material* fpG4_WATER = nullptr; + G4Material* fpBackbone_THF = nullptr; + G4Material* fpCytosine_PY = nullptr; + G4Material* fpThymine_PY = nullptr; + G4Material* fpAdenine_PU = nullptr; + G4Material* fpBackbone_TMP = nullptr; + G4Material* fpN2 = nullptr; + G4DNAPTBExcitationModel* fpModelData = nullptr; + }; #endif diff --git a/source/processes/electromagnetic/dna/models/include/G4DNAPTBIonisationModel.hh b/source/processes/electromagnetic/dna/models/include/G4DNAPTBIonisationModel.hh index 1622c0a54bd..ace939621c1 100644 --- a/source/processes/electromagnetic/dna/models/include/G4DNAPTBIonisationModel.hh +++ b/source/processes/electromagnetic/dna/models/include/G4DNAPTBIonisationModel.hh @@ -31,20 +31,17 @@ #ifndef G4DNAPTBIONISATIONMODEL_h #define G4DNAPTBIONISATIONMODEL_h 1 -#include "G4VDNAModel.hh" -#include "G4ParticleChangeForGamma.hh" -#include "G4ProductionCutsTable.hh" - #include "G4DNACrossSectionDataSet.hh" -#include "G4Electron.hh" -#include "G4Proton.hh" #include "G4DNAGenericIonsManager.hh" - -#include "G4LogLogInterpolation.hh" - -#include "G4DNAPTBIonisationStructure.hh" #include "G4DNAPTBAugerModel.hh" +#include "G4DNAPTBIonisationStructure.hh" +#include "G4Electron.hh" +#include "G4LogLogInterpolation.hh" #include "G4NistManager.hh" +#include "G4ParticleChangeForGamma.hh" +#include "G4ProductionCutsTable.hh" +#include "G4Proton.hh" +#include "G4VDNAModel.hh" /*! * \brief The G4DNAPTBIonisationModel class @@ -52,156 +49,169 @@ */ class G4DNAPTBIonisationModel : public G4VDNAModel { + public: + using TriDimensionMap = + std::map>>>>; + using VecMap = std::map>>>; + using VecMapWithShell = + std::map>>>>; + /*! + * \brief G4DNAPTBIonisationModel + * Constructor + * \param applyToMaterial + * \param p + * \param nam + * \param isAuger + */ + explicit G4DNAPTBIonisationModel(const G4String& applyToMaterial = "all", + const G4ParticleDefinition* p = nullptr, const G4String& nam = "DNAPTBIonisationModel", + const G4bool isAuger = true); + + /*! + * \brief ~G4DNAPTBIonisationModel + * Destructor + */ + ~G4DNAPTBIonisationModel() override = default; + + /*! + * \brief Initialise + * Method called once at the beginning of the simulation. It is used to setup the list of the + * materials managed by the model and the energy limits. All the materials are setup but only a + * part of them can be activated by the user through the constructor. + */ + void Initialise(const G4ParticleDefinition* particle, const G4DataVector& data) override; + + /*! + * \brief CrossSectionPerVolume + * Mandatory for every model the CrossSectionPerVolume method is in charge of returning the + * cross section value corresponding to the material, particle and energy current values. + * \param material + * \param materialName + * \param p + * \param ekin + * \param emin + * \param emax + * \return the cross section value + */ + G4double CrossSectionPerVolume(const G4Material* material, const G4ParticleDefinition* p, + G4double ekin, G4double emin, G4double emax) override; + + /*! + * \brief SampleSecondaries + * If the model is selected for the ModelInterface then SampleSecondaries will be called. + * The method sets the characteristics of the particles implied with the physical process after + * the ModelInterface (energy, momentum...). This method is mandatory for every model. \param + * materialName \param particleChangeForGamma \param tmin \param tmax + */ + void SampleSecondaries(std::vector*, const G4MaterialCutsCouple*, + const G4DynamicParticle*, G4double tmin, G4double tmax) override; + + G4ParticleChangeForGamma* fParticleChangeForGamma = nullptr; + + private: + std::unique_ptr + fpDNAPTBAugerModel; ///< PTB Auger model instanciated in the constructor and deleted in the + ///< destructor of the class + G4int verboseLevel = 0; ///< verbose level + G4DNAPTBIonisationStructure + ptbStructure; /*!< ptbStructure class which contains the shell binding energies */ + TriDimensionMap diffCrossSectionData; + TriDimensionMap fEnergySecondaryData; + std::map>> fTMapWithVec; + VecMap fEMapWithVector; + VecMapWithShell fProbaShellMap; + + G4double RandomizeEjectedElectronEnergy(const G4ParticleDefinition* aP, + G4double incomingParticleEnergy, G4int shell, const std::size_t& materialName); + G4double DifferentialCrossSection(const G4ParticleDefinition* p, G4double k, + G4double energyTransfer, G4int shell, const std::size_t& materialName); + + /*! + * \brief RandomizeEjectedElectronEnergyFromCumulated + * Uses the cumulated tables to find the energy of the ejected particle (electron) + * \param particleDefinition + * \param k + * \param shell + * \param materialName + * \return the ejected electron energy + */ + G4double RandomizeEjectedElectronEnergyFromCumulated( + const G4ParticleDefinition*, G4double k, G4int shell, const std::size_t& materialID); + + /*! + * \brief RandomizeEjectedElectronDirection + * Method to calculate the ejected electron direction + * \param aParticleDefinition + * \param incomingParticleEnergy + * \param outgoingParticleEnergy + * \param cosTheta + * \param phi + */ + void RandomizeEjectedElectronDirection(const G4ParticleDefinition*, + G4double incomingParticleEnergy, G4double outgoingParticleEnergy, G4double& cosTheta, + G4double& phi); + /*! + * \brief ReadDiffCSFile + * Method to read the differential cross section files. + * \param materialName + * \param particleName + * \param file + * \param scaleFactor + */ + void ReadDiffCSFile(const std::size_t& materialName, const G4ParticleDefinition* p, + const G4String& file, const G4double& scaleFactor) override; + + /*! + * \brief QuadInterpolator + * \param e11 + * \param e12 + * \param e21 + * \param e22 + * \param xs11 + * \param xs12 + * \param xs21 + * \param xs22 + * \param t1 + * \param t2 + * \param t + * \param e + * \return the interpolated value + */ + G4double QuadInterpolator(G4double e11, G4double e12, G4double e21, G4double e22, G4double xs11, + G4double xs12, G4double xs21, G4double xs22, G4double t1, G4double t2, G4double t, G4double e); + /*! + * \brief LogLogInterpolate + * \param e1 + * \param e2 + * \param e + * \param xs1 + * \param xs2 + * \return the interpolate value + */ + G4double LogLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); + + // copy constructor and hide assignment operator + G4DNAPTBIonisationModel(const G4DNAPTBIonisationModel&) = delete; // prevent copy-construction + G4DNAPTBIonisationModel& operator=( + const G4DNAPTBIonisationModel& right) = delete; // prevent assignement + + G4Material* fpGuanine_PU = nullptr; + G4Material* fpTHF = nullptr; + G4Material* fpPY = nullptr; + G4Material* fpPU = nullptr; + G4Material* fpTMP = nullptr; + G4Material* fpG4_WATER = nullptr; + G4Material* fpBackbone_THF = nullptr; + G4Material* fpCytosine_PY = nullptr; + G4Material* fpThymine_PY = nullptr; + G4Material* fpAdenine_PU = nullptr; + G4Material* fpBackbone_TMP = nullptr; + G4Material* fpN2 = nullptr; + G4DNAPTBIonisationModel* fpModelData = nullptr; -public: - /*! - * \brief G4DNAPTBIonisationModel - * Constructor - * \param applyToMaterial - * \param p - * \param nam - * \param isAuger - */ - G4DNAPTBIonisationModel(const G4String &applyToMaterial = "all", - const G4ParticleDefinition* p = 0, - const G4String &nam = "DNAPTBIonisationModel", - const G4bool isAuger=true); - - /*! - * \brief ~G4DNAPTBIonisationModel - * Destructor - */ - virtual ~G4DNAPTBIonisationModel(); - - /*! - * \brief Initialise - * Method called once at the beginning of the simulation. It is used to setup the list of the materials managed by the model - * and the energy limits. All the materials are setup but only a part of them can be activated by the user through the constructor. - */ - virtual void Initialise(const G4ParticleDefinition* particle, const G4DataVector& = *(new G4DataVector()), G4ParticleChangeForGamma* fpChangeForGamme=nullptr); - - /*! - * \brief CrossSectionPerVolume - * Mandatory for every model the CrossSectionPerVolume method is in charge of returning the - * cross section value corresponding to the material, particle and energy current values. - * \param material - * \param materialName - * \param p - * \param ekin - * \param emin - * \param emax - * \return the cross section value - */ - virtual G4double CrossSectionPerVolume(const G4Material* material, - const G4String& materialName, - const G4ParticleDefinition* p, - G4double ekin, - G4double emin, - G4double emax); - - /*! - * \brief SampleSecondaries - * If the model is selected for the ModelInterface then SampleSecondaries will be called. - * The method sets the characteristics of the particles implied with the physical process after the ModelInterface (energy, momentum...). - * This method is mandatory for every model. - * \param materialName - * \param particleChangeForGamma - * \param tmin - * \param tmax - */ - virtual void SampleSecondaries(std::vector*, - const G4MaterialCutsCouple*, - const G4String& materialName, - const G4DynamicParticle*, - G4ParticleChangeForGamma *particleChangeForGamma, - G4double tmin, - G4double tmax); - -protected: - -private: - - G4DNAPTBAugerModel* fDNAPTBAugerModel; ///< PTB Auger model instanciated in the constructor and deleted in the destructor of the class - - G4int verboseLevel; ///< verbose level - - G4DNAPTBIonisationStructure ptbStructure; /*!< ptbStructure class which contains the shell binding energies */ - - typedef std::map > > > > TriDimensionMap; - TriDimensionMap diffCrossSectionData; - TriDimensionMap fEnergySecondaryData; - std::map > > fTMapWithVec; - typedef std::map > > > VecMap; - VecMap fEMapWithVector; - typedef std::map > > > > VecMapWithShell; - VecMapWithShell fProbaShellMap; - - G4double RandomizeEjectedElectronEnergy(G4ParticleDefinition * aParticleDefinition, G4double incomingParticleEnergy, G4int shell, const G4String& materialName); - double DifferentialCrossSection(G4ParticleDefinition * aParticleDefinition, G4double k, G4double energyTransfer, G4int shell, const G4String &materialName); - - /*! - * \brief RandomizeEjectedElectronEnergyFromCumulated - * Uses the cumulated tables to find the energy of the ejected particle (electron) - * \param particleDefinition - * \param k - * \param shell - * \param materialName - * \return the ejected electron energy - */ - G4double RandomizeEjectedElectronEnergyFromCumulated(G4ParticleDefinition *particleDefinition, G4double k, G4int shell, const G4String& materialName); - - /*! - * \brief RandomizeEjectedElectronDirection - * Method to calculate the ejected electron direction - * \param aParticleDefinition - * \param incomingParticleEnergy - * \param outgoingParticleEnergy - * \param cosTheta - * \param phi - */ - void RandomizeEjectedElectronDirection(G4ParticleDefinition * aParticleDefinition, G4double incomingParticleEnergy, G4double - outgoingParticleEnergy, G4double & cosTheta, G4double & phi ); - /*! - * \brief ReadDiffCSFile - * Method to read the differential cross section files. - * \param materialName - * \param particleName - * \param file - * \param scaleFactor - */ - void ReadDiffCSFile(const G4String &materialName, const G4String &particleName, const G4String &file, const G4double scaleFactor); - - /*! - * \brief QuadInterpolator - * \param e11 - * \param e12 - * \param e21 - * \param e22 - * \param xs11 - * \param xs12 - * \param xs21 - * \param xs22 - * \param t1 - * \param t2 - * \param t - * \param e - * \return the interpolated value - */ - G4double QuadInterpolator(G4double e11, G4double e12, G4double e21, G4double e22, G4double xs11, G4double xs12, G4double xs21, G4double xs22, G4double t1, G4double t2, G4double t, G4double e); - /*! - * \brief LogLogInterpolate - * \param e1 - * \param e2 - * \param e - * \param xs1 - * \param xs2 - * \return the interpolate value - */ - G4double LogLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2); - - // copy constructor and hide assignment operator - G4DNAPTBIonisationModel(const G4DNAPTBIonisationModel&); // prevent copy-construction - G4DNAPTBIonisationModel & operator=(const G4DNAPTBIonisationModel &right); // prevent assignement }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/source/processes/electromagnetic/dna/models/include/G4DNARuddIonisationExtendedModel.hh b/source/processes/electromagnetic/dna/models/include/G4DNARuddIonisationExtendedModel.hh index cee15dbd3f1..b3b43a000e0 100644 --- a/source/processes/electromagnetic/dna/models/include/G4DNARuddIonisationExtendedModel.hh +++ b/source/processes/electromagnetic/dna/models/include/G4DNARuddIonisationExtendedModel.hh @@ -23,6 +23,10 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +// Created by Z. Francis, S. Incerti 2010 +// +// Modified for inverse rudd function sampling 26.10.2010 +// Rewitten by V.Ivanchenko 21.05.2023 // #ifndef G4DNARuddIonisationExtendedModel_h @@ -32,6 +36,7 @@ #include "G4ParticleChangeForGamma.hh" #include "G4ProductionCutsTable.hh" +#include "G4EmCorrections.hh" #include "G4DNAGenericIonsManager.hh" #include "G4DNACrossSectionDataSet.hh" #include "G4Electron.hh" @@ -41,150 +46,128 @@ #include "G4DNAWaterIonisationStructure.hh" #include "G4VAtomDeexcitation.hh" #include "G4NistManager.hh" +#include class G4DNARuddIonisationExtendedModel : public G4VEmModel { - public: - G4DNARuddIonisationExtendedModel(const G4ParticleDefinition* p = 0, + explicit G4DNARuddIonisationExtendedModel(const G4ParticleDefinition* p = nullptr, const G4String& nam = "DNARuddIonisationExtendedModel"); - virtual ~G4DNARuddIonisationExtendedModel(); + ~G4DNARuddIonisationExtendedModel() override; - virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&); + void Initialise(const G4ParticleDefinition*, const G4DataVector&) override; - virtual G4double CrossSectionPerVolume( const G4Material* material, - const G4ParticleDefinition* p, - G4double ekin, - G4double emin, - G4double emax); + G4double CrossSectionPerVolume(const G4Material* material, + const G4ParticleDefinition* p, + G4double ekin, + G4double emin, + G4double emax) override; - virtual void SampleSecondaries(std::vector*, - const G4MaterialCutsCouple*, - const G4DynamicParticle*, - G4double tmin, - G4double maxEnergy); + void SampleSecondaries(std::vector*, + const G4MaterialCutsCouple*, + const G4DynamicParticle*, + G4double tmin, + G4double maxEnergy) override; - inline void SelectStationary(G4bool input); + void SelectStationary(G4bool val) { statCode = val; }; -protected: + // method for unit tests + G4double ComputeProbabilityFunction(const G4ParticleDefinition*, G4double kine, + G4double deltae, G4int shell); - G4ParticleChangeForGamma* fParticleChangeForGamma = nullptr; + G4DNARuddIonisationExtendedModel & operator= + (const G4DNARuddIonisationExtendedModel &right) = delete; + G4DNARuddIonisationExtendedModel(const G4DNARuddIonisationExtendedModel&) = delete; private: - G4bool statCode; - - // Water density table - const std::vector* fpWaterDensity = nullptr; - - //deexcitation manager to produce fluo photns and e- - G4VAtomDeexcitation* fAtomDeexcitation; - - std::map > lowEnergyLimit; - std::map > highEnergyLimit; - - // ZF: 26-10-2010 - std::map lowEnergyLimitForA, lowEnergyLimitOfModelForA, killBelowEnergyForA; - - G4bool isInitialised; - G4bool isIon = false; - G4int verboseLevel; - - // Cross section - G4DNACrossSectionDataSet* mainTable = nullptr; - G4DNACrossSectionDataSet* currentTable = nullptr; - const G4ParticleDefinition* currParticle = nullptr; - - typedef std::map > MapFile; - MapFile tableFile; - - typedef std::map > MapData; - MapData tableData; - - // Final state - - G4DNAWaterIonisationStructure waterStructure; + void SetParticle(const G4ParticleDefinition*); - G4double RandomizeEjectedElectronEnergy(G4ParticleDefinition* particleDefinition, - G4double incomingParticleEnergy, - G4int shell); + G4int SelectShell(G4double energy); - G4double RejectionFunction(G4ParticleDefinition* particle, - G4double k, - G4double proposed_ws, - G4int ionizationLevelIndex); + G4double SampleElectronEnergy(G4double kine, G4double bindingEnergy, G4int shell); - G4double ProposedSampledEnergy(G4ParticleDefinition* particle, - G4double k, - G4int ionizationLevelIndex); - - G4double CorrectionFactor(G4ParticleDefinition* particleDefinition, G4double k, G4int shell); + G4double ProbabilityFunction(G4double kine, G4double deltae, + G4double bindingEnergy, G4int shell); - G4double S_1s(G4double t, - G4double energyTransferred, - G4double slaterEffectiveChg, + G4double S_1s(G4double t, + G4double energyTransferred, + G4double slaterEffectiveChg, G4double shellNumber); - G4double S_2s(G4double t, - G4double energyTransferred, - G4double slaterEffectiveChg, + G4double S_2s(G4double t, + G4double energyTransferred, + G4double slaterEffectiveChg, G4double shellNumber); - G4double S_2p(G4double t, - G4double energyTransferred, - G4double slaterEffectiveChg, + G4double S_2p(G4double t, + G4double energyTransferred, + G4double slaterEffectiveChg, G4double shellNumber); - G4double R(G4double t, - G4double energyTransferred, - G4double slaterEffectiveChg, - G4double shellNumber) ; - - G4double slaterEffectiveCharge[3]; - G4double sCoefficient[3]; - G4double localMinEnergy = 0.0; - G4double currentScaledEnergy = 0.0; - G4double massC12 = 0.0; - - // Partial cross section - - G4double PartialCrossSection(const G4Track& track); - - G4double Sum(G4double energy, const G4String& particle); - - G4int RandomSelect(G4double energy); - - G4ParticleDefinition* GetDNAIonParticleDefinition(const G4ParticleDefinition* particleDefinition); - - // - - G4DNARuddIonisationExtendedModel & operator=(const G4DNARuddIonisationExtendedModel &right); - G4DNARuddIonisationExtendedModel(const G4DNARuddIonisationExtendedModel&); - - // Reusable particle definitions - G4ParticleDefinition* protonDef = nullptr; - G4ParticleDefinition* hydrogenDef = nullptr; - G4ParticleDefinition* alphaPlusPlusDef = nullptr; - G4ParticleDefinition* alphaPlusDef = nullptr; - G4ParticleDefinition* heliumDef = nullptr; - - G4ParticleDefinition* carbonDef = nullptr; - G4ParticleDefinition* nitrogenDef = nullptr; - G4ParticleDefinition* oxygenDef = nullptr; - G4ParticleDefinition* siliconDef = nullptr; - G4ParticleDefinition* ironDef = nullptr; + G4double Rh(G4double t, + G4double energyTransferred, + G4double slaterEffectiveChg, + G4double shellNumber); -}; + G4double CorrectionFactor(G4double kine, G4int shell); -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... +protected: + + G4ParticleChangeForGamma* fParticleChangeForGamma{nullptr}; + +private: -inline void G4DNARuddIonisationExtendedModel::SelectStationary (G4bool input) -{ - statCode = input; -} + // idx = 0 - hydrogen + // idx = 1 - proton + // idx = 2%26 - ions idx=Z + // idx = -1 - alpha+ + // idx = -1 - helium + static const G4int RUDDZMAX = 27; + static G4DNACrossSectionDataSet* xsdata[RUDDZMAX]; + static G4DNACrossSectionDataSet* xsalphaplus; + static G4DNACrossSectionDataSet* xshelium; + + // Water density table + static const std::vector* fpWaterDensity; + + G4DNACrossSectionDataSet* xscurrent{nullptr}; + const G4ParticleDefinition* fParticle{nullptr}; + G4EmCorrections* fEmCorrections; + G4Pow* fGpow; + + //deexcitation manager to produce fluo photons and e- + G4VAtomDeexcitation* fAtomDeexcitation{nullptr}; + + // tracking cut and low-energy limit of proton x-section table + G4double fLowestEnergy; + // scaled low-energy limit of ion x-section table + G4double fLimitEnergy; + + G4double fMass{0.0}; + G4double fAmass{0.0}; + G4double fMassRate{1.0}; + G4double fElow{0.0}; + + G4double slaterEffectiveCharge[3] = {0.0}; + G4double sCoefficient[3] = {0.0}; + G4double fTemp[5] = {0.0}; + + G4int idx{-1}; + G4int verbose{0}; + + G4bool isIon{false}; + G4bool isFirst{false}; + G4bool isHelium{false}; + G4bool statCode{false}; + G4bool useDNAWaterStructure{true}; + + // energy levels of water molecule + G4DNAWaterIonisationStructure waterStructure; +}; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/source/processes/electromagnetic/dna/models/include/G4DNAVacuumModel.hh b/source/processes/electromagnetic/dna/models/include/G4DNAVacuumModel.hh index bd72a550c72..b3900badaac 100644 --- a/source/processes/electromagnetic/dna/models/include/G4DNAVacuumModel.hh +++ b/source/processes/electromagnetic/dna/models/include/G4DNAVacuumModel.hh @@ -28,15 +28,14 @@ #ifndef G4DNAVacuumModel_h #define G4DNAVacuumModel_h 1 -#include "G4VDNAModel.hh" -#include "G4ParticleChangeForGamma.hh" -#include "G4ProductionCutsTable.hh" - #include "G4DNACrossSectionDataSet.hh" -#include "G4LogLogInterpolation.hh" #include "G4Electron.hh" -#include "G4Proton.hh" +#include "G4LogLogInterpolation.hh" #include "G4NistManager.hh" +#include "G4ParticleChangeForGamma.hh" +#include "G4ProductionCutsTable.hh" +#include "G4Proton.hh" +#include "G4VDNAModel.hh" /*! * \brief The G4DNAVacuumModel class @@ -45,32 +44,30 @@ */ class G4DNAVacuumModel : public G4VDNAModel { + public: + /*! + * \brief G4DNAVacuumModel + * Constructor + * \param applyToMaterial + * \param p + * \param nam + */ + G4DNAVacuumModel(const G4String& applyToMaterial = "all", const G4ParticleDefinition* p = nullptr, + const G4String& nam = "DNAPTBVacuumModel"); -public: - - /*! - * \brief G4DNAVacuumModel - * Constructor - * \param applyToMaterial - * \param p - * \param nam - */ - G4DNAVacuumModel(const G4String &applyToMaterial = "all", const G4ParticleDefinition* p = 0, - const G4String& nam = "DNAPTBVacuumModel"); - - /*! + /*! * \brief ~G4DNAVacuumModel * Destructor */ virtual ~G4DNAVacuumModel(); - /*! + /*! * \brief Initialise * Registers the G4_Galactic material as "void material" for every particle */ - virtual void Initialise(const G4ParticleDefinition*, const G4DataVector& = *(new G4DataVector()), G4ParticleChangeForGamma* fpChangeForGamme=nullptr); + void Initialise(const G4ParticleDefinition*, const G4DataVector&) override; - /*! + /*! * \brief CrossSectionPerVolume * \param material * \param materialName @@ -81,36 +78,23 @@ public: * \return cross section value */ virtual G4double CrossSectionPerVolume(const G4Material* material, - const G4String& materialName, - const G4ParticleDefinition* p, - G4double ekin, - G4double emin, - G4double emax); + const G4ParticleDefinition* p, G4double ekin, G4double emin, G4double emax) override; - /*! + /*! * \brief SampleSecondaries * \param materialName * \param particleChangeForGamma * \param tmin * \param tmax */ - virtual void SampleSecondaries(std::vector*, - const G4MaterialCutsCouple*, - const G4String& materialName, - const G4DynamicParticle*, - G4ParticleChangeForGamma *particleChangeForGamma, - G4double tmin, - G4double tmax); - -protected: - -private: + void SampleSecondaries(std::vector*, const G4MaterialCutsCouple*, const G4DynamicParticle*, G4double tmin, G4double tmax) override; - G4int verboseLevel; ///< verbose level + private: + G4int verboseLevel = 0; ///< verbose level // copy constructor and hide assignment operator - G4DNAVacuumModel(const G4DNAVacuumModel&); // prevent copy-construction - G4DNAVacuumModel & operator=(const G4DNAVacuumModel &right); // prevent assignement + G4DNAVacuumModel(const G4DNAVacuumModel&) = delete; // prevent copy-construction + G4DNAVacuumModel& operator=(const G4DNAVacuumModel& right) = delete; // prevent assignement }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/source/processes/electromagnetic/dna/models/include/G4VDNAModel.hh b/source/processes/electromagnetic/dna/models/include/G4VDNAModel.hh index bfb2cf112b0..96db01768eb 100644 --- a/source/processes/electromagnetic/dna/models/include/G4VDNAModel.hh +++ b/source/processes/electromagnetic/dna/models/include/G4VDNAModel.hh @@ -32,275 +32,275 @@ #define G4VDNAModel_HH #ifdef _MSC_VER - #pragma warning(disable : 4503) +# pragma warning(disable : 4503) #endif #include "G4DNACrossSectionDataSet.hh" #include "G4DNAMolecularMaterial.hh" #include "G4LogLogInterpolation.hh" #include "G4VEmModel.hh" - +#include "G4DNAMaterialManager.hh" /*! \class G4VDNAModel * \brief The G4VDNAModel class * * All the models using the DNA material management should inherit from that class. - * The goal is to allow the use of the material management system with little code interferences within the model classes. + * The goal is to allow the use of the material management system with little code interferences + * within the model classes. */ -class G4VDNAModel +class G4VDNAModel : public G4VEmModel { - -public: - /*! - * \brief G4VDNAModel - * Constructeur of the G4VDNAModel class. - * \param nam - * \param applyToMaterial - */ - G4VDNAModel(const G4String& nam, const G4String& applyToMaterial); - - /*! - * \brief ~G4VDNAModel - */ - virtual ~G4VDNAModel(); - - /*! - * \brief Initialise - * Each model must implement an Initialize method. - * \param particle - * \param cuts - */ - virtual void Initialise(const G4ParticleDefinition* particle, - const G4DataVector& cuts, - G4ParticleChangeForGamma* fpChangeForGamme=nullptr) =0; - - - /*! - * \brief CrossSectionPerVolume - * Every model must implement its own CrossSectionPerVolume method. - * It is used by the process to determine the step path and must return a cross section times a number - * of molecules per volume unit. - * \param material - * \param materialName - * \param p - * \param ekin - * \param emin - * \param emax - * \return crossSection*numberOfMoleculesPerVolumeUnit - */ - virtual G4double CrossSectionPerVolume(const G4Material* material, - const G4String& materialName, - const G4ParticleDefinition* p, - G4double ekin, - G4double emin, - G4double emax) = 0; - - /*! - * \brief SampleSecondaries - * Each model must implement SampleSecondaries to decide if a particle will be created after the ModelInterface or - * if any charateristic of the incident particle will change. - * \param materialName - * \param particleChangeForGamma - * \param tmin - * \param tmax - */ - virtual void SampleSecondaries(std::vector*, - const G4MaterialCutsCouple*, - const G4String& materialName, - const G4DynamicParticle*, - G4ParticleChangeForGamma *particleChangeForGamma, - G4double tmin = 0, - G4double tmax = DBL_MAX) = 0; - - /*! - * \brief IsMaterialDefine - * Check if the given material is defined in the simulation - * \param materialName - * \return true if the material is defined in the simulation - */ - G4bool IsMaterialDefine(const G4String &materialName); - - /*! - * \brief IsMaterialExistingInModel - * Check if the given material is defined in the current model class - * \param materialName - * \return true if the material is defined in the model - */ - G4bool IsMaterialExistingInModel(const G4String &materialName); - - /*! - * \brief IsParticleExistingInModelForMaterial - * To check two things: - * 1- is the material existing in model ? - * 2- if yes, is the particle defined for that material ? - * \param particleName - * \param materialName - * \return true if the particle/material couple is defined in the model - */ - G4bool IsParticleExistingInModelForMaterial(const G4String &particleName, const G4String &materialName); - - /*! - * \brief GetName - * \return the name of the model - */ - G4String GetName(){return fName;} - - /*! - * \brief GetHighEnergyLimit - * \param material - * \param particle - * \return fHighEnergyLimits[material][particle] - */ - G4double GetHighELimit(const G4String& material, const G4String& particle) {return fHighEnergyLimits[material][particle];} - - /*! - * \brief GetLowEnergyLimit - * \param material - * \param particle - * \return fLowEnergyLimits[material][particle] - */ - G4double GetLowELimit(const G4String& material, const G4String& particle) {return fLowEnergyLimits[material][particle];} - - /*! - * \brief SetHighEnergyLimit - * \param material - * \param particle - * \param lim - */ - void SetHighELimit(const G4String& material, const G4String& particle, G4double lim) {fHighEnergyLimits[material][particle]=lim;} - - /*! - * \brief SetLowEnergyLimit - * \param material - * \param particle - * \param lim - */ - void SetLowELimit(const G4String& material, const G4String& particle, G4double lim) {fLowEnergyLimits[material][particle]=lim;} - -protected: - - // typedef used to ease the data container reading - // - typedef std::map > > TableMapData; - typedef std::map > RatioMapData; - typedef std::map::const_iterator ItCompoMapData; - - // Getters - // - /*! - * \brief GetTableData - * \return a pointer to a map with the following structure: [materialName][particleName]=G4DNACrossSectionDataSet* - */ - TableMapData* GetTableData(){return &fTableData;} - - // Setters - // ... no setters - - /*! - * \brief BuildApplyToMatVect - * Build the material name vector which is used to know the materials the user want to include in the model. - * \param materials - * \return a vector with all the material names - */ - std::vector BuildApplyToMatVect(const G4String &materials); - - /*! - * \brief ReadAndSaveCSFile - * Read and save a "simple" cross section file : use of G4DNACrossSectionDataSet->loadData() - * \param materialName - * \param particleName - * \param file - * \param scaleFactor - */ - void ReadAndSaveCSFile(const G4String &materialName, const G4String &particleName, const G4String &file, G4double scaleFactor); - - /*! - * \brief RandomSelectShell - * Method to randomely select a shell from the data table uploaded. - * The size of the table (number of columns) is used to determine the total number of possible shells. - * \param k - * \param particle - * \param materialName - * \return the selected shell - */ - G4int RandomSelectShell(G4double k, const G4String &particle, const G4String &materialName); - - /*! - * \brief AddCrossSectionData - * Method used during the initialization of the model class to add a new material. It adds a material to the model and fills vectors with informations. - * \param materialName - * \param particleName - * \param fileCS - * \param fileDiffCS - * \param scaleFactor - */ - void AddCrossSectionData(G4String materialName, G4String particleName, G4String fileCS, G4String fileDiffCS, G4double scaleFactor); - - /*! - * \brief AddCrossSectionData - * Method used during the initialization of the model class to add a new material. It adds a material to the model and fills vectors with informations. - * Not every model needs differential cross sections. - * \param materialName - * \param particleName - * \param fileCS - * \param scaleFactor - */ - void AddCrossSectionData(G4String materialName, G4String particleName, G4String fileCS, G4double scaleFactor); - - /*! - * \brief LoadCrossSectionData - * Method to loop on all the registered materials in the model and load the corresponding data. - */ - void LoadCrossSectionData(const G4String &particleName); - - /*! - * \brief ReadDiffCSFile - * Virtual method that need to be implemented if one wish to use the differential cross sections. - * The read method for that kind of information is not standardized yet. - * \param materialName - * \param particleName - * \param path - * \param scaleFactor - */ - virtual void ReadDiffCSFile(const G4String& materialName, - const G4String& particleName, - const G4String& path, - const G4double scaleFactor); - - /*! - * \brief EnableMaterialAndParticle - * \param materialName - * \param particleName - * Meant to fill fTableData with 0 for the specified material and particle, therefore allowing the ModelInterface class to proceed with the material and particle even if no data - * are registered here. The data should obviously be registered somewhere in the child class. - * This method is here to allow an easy use of the no-ModelInterface dna models within the ModelInterface system. - */ - void EnableForMaterialAndParticle(const G4String& materialName, const G4String& particleName); - -private: - /*! - * \brief fStringOfMaterials - * The user can decide to specify by hand which are the materials the be activated among those implemented in the model. - * If the user does then only the specified materials contained in this string variable will be activated. - * The string is like: mat1/mat2/mat3/mat4 - */ - const G4String fStringOfMaterials; - - /*! - * \brief fTableData - * It contains the cross section data and can be used like: dataTable=fTableData[material][particle] - */ - TableMapData fTableData; - - std::vector fModelMaterials; ///< List the materials that can be activated (and will be by default) within the model. - std::vector fModelParticles; ///< List the particles that can be activated within the model - std::vector fModelCSFiles; ///< List the cross section data files - std::vector fModelDiffCSFiles; ///< List the differential corss section data files - std::vector fModelScaleFactors; ///< List the model scale factors (they could change with material) - - std::map > fLowEnergyLimits; ///< List the low energy limits - std::map > fHighEnergyLimits; ///< List the high energy limits - - G4String fName; ///< model name + public: + /*! + * \brief G4VDNAModel + * Constructeur of the G4VDNAModel class. + * \param nam + * \param applyToMaterial + */ + G4VDNAModel(const G4String& nam, const G4String& applyToMaterial = ""); + + /*! + * \brief ~G4VDNAModel + */ + virtual ~G4VDNAModel(); + + /*! + * \brief Initialise + * Each model must implement an Initialize method. + * \param particle + * \param cuts + */ + virtual void Initialise(const G4ParticleDefinition* particle, const G4DataVector& cuts) = 0; + + /*! + * \brief CrossSectionPerVolume + * Every model must implement its own CrossSectionPerVolume method. + * It is used by the process to determine the step path and must return a cross section times a + * number of molecules per volume unit. \param material \param materialName \param p \param ekin + * \param emin + * \param emax + * \return crossSection*numberOfMoleculesPerVolumeUnit + */ + virtual G4double CrossSectionPerVolume(const G4Material* material, const G4ParticleDefinition* p, + G4double ekin, G4double emin, G4double emax) = 0; + + /*! + * \brief SampleSecondaries + * Each model must implement SampleSecondaries to decide if a particle will be created after the + * ModelInterface or if any charateristic of the incident particle will change. \param + * materialName \param particleChangeForGamma \param tmin \param tmax + */ + virtual void SampleSecondaries(std::vector*, const G4MaterialCutsCouple*, + const G4DynamicParticle*, G4double tmin = 0, G4double tmax = DBL_MAX) = 0; + + /*! + * \brief IsMaterialDefine + * Check if the given material is defined in the simulation + * \param materialName + * \return true if the material is defined in the simulation + */ + G4bool IsMaterialDefine(const size_t& materialID); + + /*! + * \brief IsParticleExistingInModelForMaterial + * To check two things: + * 1- is the material existing in model ? + * 2- if yes, is the particle defined for that material ? + * \param particleName + * \param materialName + * \return true if the particle/material couple is defined in the model + */ + G4bool IsParticleExistingInModelForMaterial( + const G4ParticleDefinition* particleName, const size_t& materialID); + + /*! + * \brief GetName + * \return the name of the model + */ + G4String GetName() + { + return fName; + } + + /*! + * \brief GetHighEnergyLimit + * \param material + * \param particle + * \return fHighEnergyLimits[material][particle] + */ + G4double GetHighELimit(const size_t& materialID, const G4ParticleDefinition* particle) + { + return fHighEnergyLimits[materialID][particle]; + } + + /*! + * \brief GetLowEnergyLimit + * \param material + * \param particle + * \return fLowEnergyLimits[material][particle] + */ + G4double GetLowELimit(const size_t& materialID, const G4ParticleDefinition* particle) + { + return fLowEnergyLimits[materialID][particle]; + } + + /*! + * \brief SetHighEnergyLimit + * \param material + * \param particle + * \param lim + */ + void SetHighELimit(const size_t& materialID, const G4ParticleDefinition* particle, G4double lim) + { + fHighEnergyLimits[materialID][particle] = lim; + } + + /*! + * \brief SetLowEnergyLimit + * \param material + * \param particle + * \param lim + */ + void SetLowELimit(const size_t& materialID, const G4ParticleDefinition* particle, G4double lim) + { + fLowEnergyLimits[materialID][particle] = lim; + } + + protected: + G4bool isInitialised = false; + + // typedef used to ease the data container reading + // + using MaterialParticleMapData = std::map>>; + + // Getters + // + /*! + * \brief GetTableData + * \return a pointer to a map with the following structure: + * [materialName][particleName]=G4DNACrossSectionDataSet* + */ + MaterialParticleMapData* GetData() + { + return &fData; + } + + // Setters + // ... no setters + + /*! + * \brief BuildApplyToMatVect + * Build the material name vector which is used to know the materials the user want to include in + * the model. \param materials \return a vector with all the material names + */ + std::vector BuildApplyToMatVect(const G4String& materials); + + /*! + * \brief ReadAndSaveCSFile + * Read and save a "simple" cross section file : use of G4DNACrossSectionDataSet->loadData() + * \param materialName + * \param particleName + * \param file + * \param scaleFactor + */ + void ReadAndSaveCSFile(const size_t& materialID, const G4ParticleDefinition* p, + const G4String& file, const G4double& scaleFactor); + + /*! + * \brief RandomSelectShell + * Method to randomely select a shell from the data table uploaded. + * The size of the table (number of columns) is used to determine the total number of possible + * shells. \param k \param particle \param materialName \return the selected shell + */ + G4int RandomSelectShell( + const G4double& k, const G4ParticleDefinition* particle, const size_t& materialName); + + /*! + * \brief AddCrossSectionData + * Method used during the initialization of the model class to add a new material. It adds a + * material to the model and fills vectors with informations. \param materialName \param + * particleName \param fileCS \param fileDiffCS \param scaleFactor + */ + void AddCrossSectionData(const size_t& materialName, const G4ParticleDefinition* particleName, + const G4String& fileCS, const G4String& fileDiffCS, const G4double& scaleFactor); + + /*! + * \brief AddCrossSectionData + * Method used during the initialization of the model class to add a new material. It adds a + * material to the model and fills vectors with informations. Not every model needs differential + * cross sections. \param materialName \param particleName \param fileCS \param scaleFactor + */ + void AddCrossSectionData(const size_t& materialName, const G4ParticleDefinition* particleName, + const G4String& fileCS, const G4double& scaleFactor); + + /*! + * \brief LoadCrossSectionData + * Method to loop on all the registered materials in the model and load the corresponding data. + */ + void LoadCrossSectionData(const G4ParticleDefinition* particleName); + + /*! + * \brief ReadDiffCSFile + * Virtual method that need to be implemented if one wish to use the differential cross sections. + * The read method for that kind of information is not standardized yet. + * \param materialName + * \param particleName + * \param path + * \param scaleFactor + */ + virtual void ReadDiffCSFile(const size_t& materialName, const G4ParticleDefinition* particleName, + const G4String& path, const G4double& scaleFactor); + + /*! + * \brief EnableMaterialAndParticle + * \param materialName + * \param particleName + * Meant to fill fTableData with 0 for the specified material and particle, therefore allowing the + * ModelInterface class to proceed with the material and particle even if no data are registered + * here. The data should obviously be registered somewhere in the child class. This method is here + * to allow an easy use of the no-ModelInterface dna models within the ModelInterface system. + */ + void EnableForMaterialAndParticle(const size_t& materialID, const G4ParticleDefinition* p); + + private: + + /*! + * \brief IsMaterialExistingInModel + * Check if the given material is defined in the current model class + * \param materialName + * \return true if the material is defined in the model + */ + G4bool IsMaterialExistingInModel(const size_t& materialID); + + G4String fName; ///< model name + /*! + * \brief fStringOfMaterials + * The user can decide to specify by hand which are the materials the be activated among those + * implemented in the model. If the user does then only the specified materials contained in this + * string variable will be activated. The string is like: mat1/mat2/mat3/mat4 + */ + const G4String fStringOfMaterials; + + /*! + * \brief fTableData + * It contains the cross section data and can be used like: + * dataTable=fTableData[material][particle] + */ + MaterialParticleMapData fData; + + std::vector fModelMaterials; ///< List the materials that can be activated (and will be + ///< by default) within the model. + std::vector + fModelParticles; ///< List the particles that can be activated within the model + std::vector fModelCSFiles; ///< List the cross section data files + std::vector fModelDiffCSFiles; ///< List the differential corss section data files + std::vector + fModelScaleFactors; ///< List the model scale factors (they could change with material) + + std::map> + fLowEnergyLimits; ///< List the low energy limits + std::map> + fHighEnergyLimits; ///< List the high energy limits }; -#endif // G4VDNAModel_HH +#endif // G4VDNAModel_HH diff --git a/source/processes/electromagnetic/dna/models/sources.cmake b/source/processes/electromagnetic/dna/models/sources.cmake index a477ffc16b8..c328e5a7998 100644 --- a/source/processes/electromagnetic/dna/models/sources.cmake +++ b/source/processes/electromagnetic/dna/models/sources.cmake @@ -58,7 +58,6 @@ geant4_add_module(G4emdna-models G4LEPTSExcitationModel.hh G4VDNAModel.hh G4DNAModelInterface.hh - G4DNADummyModel.hh G4DNADiracRMatrixExcitationModel.hh G4DNAQuinnPlasmonExcitationModel.hh G4DNARelativisticIonisationModel.hh @@ -127,7 +126,6 @@ geant4_add_module(G4emdna-models G4LEPTSDiffXS.cc G4VDNAModel.cc G4DNAModelInterface.cc - G4DNADummyModel.cc G4DNADiracRMatrixExcitationModel.cc G4DNAQuinnPlasmonExcitationModel.cc G4DNARelativisticIonisationModel.cc diff --git a/source/processes/electromagnetic/dna/models/src/G4DNACPA100ElasticModel.cc b/source/processes/electromagnetic/dna/models/src/G4DNACPA100ElasticModel.cc index d0be7e42d7e..25b170a605f 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNACPA100ElasticModel.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNACPA100ElasticModel.cc @@ -29,552 +29,359 @@ // // Users are requested to cite the following papers: // - M. Terrissol, A. Baudre, Radiat. Prot. Dosim. 31 (1990) 175-177 -// - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries, +// - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries, // M. Bardies, N. Lampe, S. Incerti, Phys. Med. 32 (2016) 1833-1840 // -// Authors of this class: +// Authors of this class: // M.C. Bordage, M. Terrissol, S. Edel, J. Bordes, S. Incerti // // 15.01.2014: creation // +// Based on the study by S. Zein et. al. Nucl. Inst. Meth. B 488 (2021) 70-82 +// 1/2/2023 : Hoang added modification #include "G4DNACPA100ElasticModel.hh" -#include "G4PhysicalConstants.hh" -#include "G4SystemOfUnits.hh" -#include "G4DNAMolecularMaterial.hh" - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... +#include "G4DNAMaterialManager.hh" +#include "G4DNAMolecularMaterial.hh" +#include "G4SystemOfUnits.hh" using namespace std; - -// #define CPA100_VERBOSE - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - -G4DNACPA100ElasticModel::G4DNACPA100ElasticModel(const G4ParticleDefinition*, - const G4String& nam) -:G4VEmModel(nam),isInitialised(false) +G4DNACPA100ElasticModel::G4DNACPA100ElasticModel(const G4ParticleDefinition*, const G4String& nam) + : G4VDNAModel(nam, "all") { - - SetLowEnergyLimit(11*eV); - SetHighEnergyLimit(255955*eV); - - verboseLevel= 0; - // Verbosity scale: - // 0 = nothing - // 1 = warning for energy non-conservation - // 2 = details of energy budget - // 3 = calculation of cross sections, file openings, sampling of atoms - // 4 = entering in methods - -#ifdef UEHARA_VERBOSE - if( verboseLevel>0 ) - { - G4cout << "CPA100 Elastic model is constructed " << G4endl - << "Energy range: " - << LowEnergyLimit()/eV << " eV - " - << HighEnergyLimit()/ keV << " keV" - << G4endl; - } -#endif - - fParticleChangeForGamma = 0; - fpMolWaterDensity = 0; - - // Selection of stationary mode - - statCode = false; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - -G4DNACPA100ElasticModel::~G4DNACPA100ElasticModel() -{ - // For total cross section - - std::map< G4String,G4DNACrossSectionDataSet*,std::less >::iterator pos; - for (pos = tableData.begin(); pos != tableData.end(); ++pos) - { - G4DNACrossSectionDataSet* table = pos->second; - delete table; - } - - // For final state - eVecm.clear(); - + fpGuanine = G4Material::GetMaterial("G4_GUANINE", false); + fpG4_WATER = G4Material::GetMaterial("G4_WATER", false); + fpDeoxyribose = G4Material::GetMaterial("G4_DEOXYRIBOSE", false); + fpCytosine = G4Material::GetMaterial("G4_CYTOSINE", false); + fpThymine = G4Material::GetMaterial("G4_THYMINE", false); + fpAdenine = G4Material::GetMaterial("G4_ADENINE", false); + fpPhosphate = G4Material::GetMaterial("G4_PHOSPHORIC_ACID", false); + fpParticle = G4Electron::ElectronDefinition(); } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - -void G4DNACPA100ElasticModel::Initialise(const G4ParticleDefinition* - particle, - const G4DataVector& /*cuts*/) +void G4DNACPA100ElasticModel::Initialise(const G4ParticleDefinition* p, + const G4DataVector& /*cuts*/) { - -#ifdef UEHARA_VERBOSE - if (verboseLevel > 3) - G4cout << "Calling G4DNACPA100ElasticModel::Initialise()" << G4endl; -#endif - - if(particle->GetParticleName() != "e-") - { - G4Exception("*** WARNING: the G4DNACPA100ElasticModel is " - "not intented to be used with another particle than the electron", - "",FatalException,"") ; - } - - // Energy limits - - if (LowEnergyLimit() < 11.*eV) - { - G4cout << "G4DNACPA100ElasticModel: low energy limit increased from " << - LowEnergyLimit()/eV << " eV to " << 11 << " eV" << G4endl; - SetLowEnergyLimit(11.*eV); + if (isInitialised) { + return; } - - if (HighEnergyLimit() > 255955.*eV) - { - G4cout << "G4DNACPA100ElasticModel: high energy limit decreased from " << - HighEnergyLimit()/keV << " keV to " << 255.955 << " keV" - << G4endl; - SetHighEnergyLimit(255955.*eV); + if (verboseLevel > 3) { + G4cout << "Calling G4DNACPA100ExcitationModel::Initialise()" << G4endl; } - // Reading of data files - - G4double scaleFactor = 1e-20*m*m; - - G4String fileElectron("dna/sigma_elastic_e_cpa100"); + if (!G4DNAMaterialManager::Instance()->IsLocked()) { + if (p != fpParticle) { + std::ostringstream oss; + oss << " Model is not applied for this particle " << p->GetParticleName(); + G4Exception("G4DNACPA100ElasticModel::G4DNACPA100ElasticModel", "CPA001", FatalException, + oss.str().c_str()); + } - G4ParticleDefinition* electronDef = G4Electron::ElectronDefinition(); - G4String electron; - - // *** ELECTRON - - // For total cross section - - electron = electronDef->GetParticleName(); + char* path = getenv("G4LEDATA"); - tableFile[electron] = fileElectron; + if (!path) { + G4Exception("G4DNACPA100ElasticModel::Initialise", "em0006", FatalException, + "G4LEDATA environment variable not set."); + return; + } - G4DNACrossSectionDataSet* tableE = - new G4DNACrossSectionDataSet(new G4LogLogInterpolation, - eV,scaleFactor ); - - /* - G4DNACrossSectionDataSet* tableE = - new G4DNACrossSectionDataSet(new G4DNACPA100LogLogInterpolation, - eV,scaleFactor ); - */ - - tableE->LoadData(fileElectron); - - tableData[electron] = tableE; - - // For final state - - const char *path = G4FindDataDir("G4LEDATA"); - - if (!path) - { - G4Exception("G4DNACPA100ElasticModel::Initialise","em0006", - FatalException,"G4LEDATA environment variable not set."); - return; - } - - std::ostringstream eFullFileName; - - eFullFileName << path - << "/dna/sigmadiff_cumulated_elastic_e_cpa100.dat"; - - std::ifstream eDiffCrossSection(eFullFileName.str().c_str()); - - if (!eDiffCrossSection) - G4Exception("G4DNACPA100ElasticModel::Initialise","em0003", - FatalException, - "Missing data file:/dna/sigmadiff_cumulated_elastic_e_cpa100.dat"); - - // March 25th, 2014 - Vaclav Stepan, Sebastien Incerti - // Added clear for MT - - eTdummyVec.clear(); - eVecm.clear(); - eDiffCrossSectionData.clear(); - - // - - eTdummyVec.push_back(0.); - - while(!eDiffCrossSection.eof()) - { - G4double tDummy; - G4double eDummy; - eDiffCrossSection>>tDummy>>eDummy; - - // SI : mandatory eVecm initialization - - if (tDummy != eTdummyVec.back()) - { - eTdummyVec.push_back(tDummy); - eVecm[tDummy].push_back(0.); + std::size_t index; + if (fpG4_WATER != nullptr) { + index = fpG4_WATER->GetIndex(); + fLevels[index] = 1.214e-4; + AddCrossSectionData(index, p, "dna/sigma_elastic_e_cpa100", + "dna/sigmadiff_cumulated_elastic_e_cpa100", 1e-20 * m * m); + SetLowELimit(index, p, 11. * eV); + SetHighELimit(index, p, 255955. * eV); + } + if (fpGuanine != nullptr) { + index = fpGuanine->GetIndex(); + fLevels[index] = 1.4504480e-05; + AddCrossSectionData(index, p, "dna/sigma_elastic_e_cpa100_guanine", + "dna/sigmadiff_cumulated_elastic_e_cpa100_guanine", 1 * cm * cm); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 1 * MeV); + } + if (fpDeoxyribose != nullptr) { + index = fpDeoxyribose->GetIndex(); + fLevels[index] = 1.6343100e-05; + AddCrossSectionData(index, p, "dna/sigma_elastic_e_cpa100_deoxyribose", + "dna/sigmadiff_cumulated_elastic_e_cpa100_deoxyribose", 1 * cm * cm); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 1 * MeV); + } + if (fpCytosine != nullptr) { + index = fpCytosine->GetIndex(); + fLevels[index] = 1.9729660e-05; + AddCrossSectionData(index, p, "dna/sigma_elastic_e_cpa100_cytosine", + "dna/sigmadiff_cumulated_elastic_e_cpa100_cytosine", 1 * cm * cm); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 1 * MeV); + } + if (fpThymine != nullptr) { + index = fpThymine->GetIndex(); + fLevels[index] = 1.7381300e-05; + AddCrossSectionData(index, p, "dna/sigma_elastic_e_cpa100_thymine", + "dna/sigmadiff_cumulated_elastic_e_cpa100_thymine", 1 * cm * cm); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 1 * MeV); + } + if (fpAdenine != nullptr) { + index = fpAdenine->GetIndex(); + fLevels[index] = 1.6221800e-05; + AddCrossSectionData(index, p, "dna/sigma_elastic_e_cpa100_adenine", + "dna/sigmadiff_cumulated_elastic_e_cpa100_adenine", 1 * cm * cm); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 1 * MeV); + } + if (fpPhosphate != nullptr) { + index = fpPhosphate->GetIndex(); + fLevels[index] = 2.2369600e-05; + AddCrossSectionData(index, p, "dna/sigma_elastic_e_cpa100_phosphoric_acid", + "dna/sigmadiff_cumulated_elastic_e_cpa100_phosphoric_acid", 1 * cm * cm); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 1 * MeV); } - - eDiffCrossSection>>eDiffCrossSectionData[tDummy][eDummy]; - if (eDummy != eVecm[tDummy].back()) eVecm[tDummy].push_back(eDummy); + // Load data + LoadCrossSectionData(p); + G4DNAMaterialManager::Instance()->SetMasterDataModel(DNAModelType::fDNAElastics, this); + fpModelData = this; } - - // End final state - -#ifdef UEHARA_VERBOSE - if (verboseLevel > 2) - G4cout << "Loaded cross section files for CPA100 Elastic model" << G4endl; -#endif - -#ifdef UEHARA_VERBOSE - if( verboseLevel>0 ) - { - G4cout << "CPA100 Elastic model is initialized " << G4endl - << "Energy range: " - << LowEnergyLimit() / eV << " eV - " - << HighEnergyLimit() / keV << " keV" - << G4endl; + else { + auto dataModel = dynamic_cast( + G4DNAMaterialManager::Instance()->GetModel(DNAModelType::fDNAElastics)); + if (dataModel == nullptr) { + G4cout << "G4DNACPA100ElasticModel::CrossSectionPerVolume:: not good modelData" << G4endl; + G4Exception("G4DNACPA100ElasticModel::CrossSectionPerVolume", "em004", FatalException, + "no modelData is registered"); + } + else { + fpModelData = dataModel; + } } -#endif - - // Initialize water density pointer - fpMolWaterDensity = G4DNAMolecularMaterial::Instance() - ->GetNumMolPerVolTableFor(G4Material::GetMaterial("G4_WATER")); - if (isInitialised) { return; } fParticleChangeForGamma = GetParticleChangeForGamma(); isInitialised = true; - } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNACPA100ElasticModel::CrossSectionPerVolume -(const G4Material* material, - const G4ParticleDefinition* p, - G4double ekin, - G4double, - G4double) +G4double G4DNACPA100ElasticModel::CrossSectionPerVolume(const G4Material* pMaterial, + const G4ParticleDefinition* p, + G4double ekin, G4double, G4double) { + // Get the name of the current particle + const G4String& particleName = p->GetParticleName(); + auto materialID = pMaterial->GetIndex(); -#ifdef UEHARA_VERBOSE - if (verboseLevel > 3) - G4cout << - "Calling CrossSectionPerVolume() of G4DNACPA100ElasticModel" << G4endl; -#endif + // set killBelowEnergy value for current material + fKillBelowEnergy = fpModelData->GetLowELimit(materialID, p); - // Calculate total cross section for model + G4double sigma = 0.; - G4double sigma=0; + if (ekin < fpModelData->GetHighELimit(materialID, p)) { + if (ekin < fKillBelowEnergy) { + return DBL_MAX; + } - G4double waterDensity = (*fpMolWaterDensity)[material->GetIndex()]; + auto tableData = fpModelData->GetData(); - const G4String& particleName = p->GetParticleName(); - - if (ekin <= HighEnergyLimit() && ekin >= LowEnergyLimit()) - { - //SI : XS must not be zero otherwise sampling of secondaries - // method ignored - - std::map< G4String,G4DNACrossSectionDataSet*,std::less >::iterator pos; - pos = tableData.find(particleName); - - if (pos != tableData.end()) - { - G4DNACrossSectionDataSet* table = pos->second; - if (table != 0) - { - sigma = table->FindValue(ekin); - // - //Dump in non-MT mode - // - /* - G4double minEnergy = 10.481 * eV; - G4double maxEnergy = 255955. * eV; - G4int nEnergySteps = 1000; - G4double energy(minEnergy); - G4double - stpEnergy(std::pow(maxEnergy/energy, - 1./static_cast(nEnergySteps-1))); - G4int step(nEnergySteps); - system ("rm -rf elastic-cpa100.out"); - FILE* myFile=fopen("elastic-cpa100.out","a"); - while (step>0) - { - step--; - fprintf (myFile,"%16.9le %16.9le\n", - energy/eV, - table->FindValue(energy)/(1e-20*m*m)); - energy*=stpEnergy; - } - fclose (myFile); - abort(); - */ - // - // end of dump - // - } - } - else - { - G4Exception("G4DNACPA100ElasticModel::ComputeCrossSectionPerVolume", - "em0002", - FatalException,"Model not applicable to particle type."); - } + if ((*tableData)[materialID][p] == nullptr) { + G4Exception("G4DNACPA100ElasticModel::CrossSectionPerVolume", "em00236", FatalException, + "No model is registered"); + } + sigma = (*tableData)[materialID][p]->FindValue(ekin); } -#ifdef UEHARA_VERBOSE - if (verboseLevel > 2) - { + if (verboseLevel > 2) { + auto MolDensity = + (*G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(pMaterial))[materialID]; G4cout << "__________________________________" << G4endl; - G4cout << "G4DNACPA100ElasticModel - XS INFO START" << G4endl; - G4cout << "Kinetic energy(eV)=" << ekin/eV << " particle : " << particleName << G4endl; - G4cout << "Cross section per water molecule (cm^2)=" << sigma/cm/cm << G4endl; - G4cout << "Cross section per water molecule (cm^-1)=" << sigma*waterDensity/(1./cm) << G4endl; - // G4cout << " - Cross section per water molecule (cm^-1)=" - // << sigma*material->GetAtomicNumDensityVector()[1]/(1./cm) << G4endl; - G4cout << "G4DNACPA100ElasticModel - XS INFO END" << G4endl; - } -#endif - - return sigma*waterDensity; + G4cout << "°°° G4DNACPA100ElasticModel - XS INFO START" << G4endl; + G4cout << "°°° Kinetic energy(eV)=" << ekin / eV << " particle : " << particleName << G4endl; + G4cout << "°°° lowLim (eV) = " << GetLowELimit(materialID, p) / eV + << " highLim (eV) : " << GetHighELimit(materialID, p) / eV << G4endl; + G4cout << "°°° Materials = " << (*G4Material::GetMaterialTable())[materialID]->GetName() + << G4endl; + G4cout << "°°° Cross section per molecule (cm^2)=" << sigma / cm / cm << G4endl; + G4cout << "°°° Cross section per Phosphate molecule (cm^-1)=" << sigma * MolDensity / (1. / cm) + << G4endl; + G4cout << "°°° G4DNACPA100ElasticModel - XS INFO END" << G4endl; + } + + auto MolDensity = + (*G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(pMaterial))[materialID]; + return sigma * MolDensity; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... void G4DNACPA100ElasticModel::SampleSecondaries(std::vector* /*fvect*/, - const G4MaterialCutsCouple* /*couple*/, - const G4DynamicParticle* aDynamicElectron, - G4double, - G4double) + const G4MaterialCutsCouple* couple, + const G4DynamicParticle* aDynamicElectron, G4double, + G4double) { -#ifdef UEHARA_VERBOSE - if (verboseLevel > 3) - G4cout << "Calling SampleSecondaries() of G4DNACPA100ElasticModel" << G4endl; -#endif - G4double electronEnergy0 = aDynamicElectron->GetKineticEnergy(); - - G4double cosTheta = RandomizeCosTheta(electronEnergy0); - G4double phi = 2. * pi * G4UniformRand(); - - G4ThreeVector zVers = aDynamicElectron->GetMomentumDirection(); + auto materialID = couple->GetMaterial()->GetIndex(); + auto p = aDynamicElectron->GetParticleDefinition(); - //G4ThreeVector xVers = zVers.orthogonal(); - //G4ThreeVector yVers = zVers.cross(xVers); - //G4double xDir = std::sqrt(1. - cosTheta*cosTheta); - //G4double yDir = xDir; - //xDir *= std::cos(phi); - //yDir *= std::sin(phi); + if (p != fpParticle) { + G4Exception("G4DNACPA100ElasticModel::SampleSecondaries", "em00436", FatalException, + "This particle is not applied for this model"); + } + if (electronEnergy0 < fKillBelowEnergy) { + return; + } + G4double cosTheta = fpModelData->RandomizeCosTheta(electronEnergy0, materialID); + G4double phi = 2. * CLHEP::pi * G4UniformRand(); - // Computation of scattering angles (from Subroutine DIRAN in CPA100) + const G4ThreeVector& zVers = aDynamicElectron->GetMomentumDirection(); G4double CT1, ST1, CF1, SF1, CT2, ST2, CF2, SF2; - G4double sinTheta = std::sqrt (1-cosTheta*cosTheta); - - CT1=0; - ST1=0; - CF1=0; - SF1=0; - CT2=0; - ST2=0; - CF2=0; - SF2=0; + G4double sinTheta = std::sqrt(1 - cosTheta * cosTheta); CT1 = zVers.z(); - ST1=std::sqrt(1.-CT1*CT1); + ST1 = std::sqrt(1. - CT1 * CT1); - if (ST1!=0) CF1 = zVers.x()/ST1; else CF1 = std::cos(2. * pi * G4UniformRand()); - if (ST1!=0) SF1 = zVers.y()/ST1; else SF1 = std::sqrt(1.-CF1*CF1); + if (ST1 != 0) + CF1 = zVers.x() / ST1; + else + CF1 = std::cos(2. * CLHEP::pi * G4UniformRand()); + if (ST1 != 0) + SF1 = zVers.y() / ST1; + else + SF1 = std::sqrt(1. - CF1 * CF1); G4double A3, A4, A5, A2, A1; - A3=0; - A4=0; - A5=0; - A2=0; - A1=0; - - A3 = sinTheta*std::cos(phi); - A4 = A3*CT1 + ST1*cosTheta; + + A3 = sinTheta * std::cos(phi); + A4 = A3 * CT1 + ST1 * cosTheta; A5 = sinTheta * std::sin(phi); A2 = A4 * SF1 + A5 * CF1; A1 = A4 * CF1 - A5 * SF1; - CT2 = CT1*cosTheta - ST1*A3; - ST2 = std::sqrt(1.-CT2*CT2); - - if (ST2==0) ST2=1E-6; - CF2 = A1/ST2; - SF2 = A2/ST2; - - /* - G4cout << "CT1=" << CT1 << G4endl; - G4cout << "ST1=" << ST1 << G4endl; - G4cout << "CF1=" << CF1 << G4endl; - G4cout << "SF1=" << SF1 << G4endl; - G4cout << "cosTheta=" << cosTheta << G4endl; - G4cout << "sinTheta=" << sinTheta << G4endl; - G4cout << "cosPhi=" << std::cos(phi) << G4endl; - G4cout << "sinPhi=" << std::sin(phi) << G4endl; - G4cout << "CT2=" << CT2 << G4endl; - G4cout << "ST2=" << ST2 << G4endl; - G4cout << "CF2=" << CF2 << G4endl; - G4cout << "SF2=" << SF2 << G4endl; - */ + CT2 = CT1 * cosTheta - ST1 * A3; + ST2 = std::sqrt(1. - CT2 * CT2); - G4ThreeVector zPrimeVers(ST2*CF2,ST2*SF2,CT2); + if (ST2 == 0) ST2 = 1E-6; + CF2 = A1 / ST2; + SF2 = A2 / ST2; + G4ThreeVector zPrimeVers(ST2 * CF2, ST2 * SF2, CT2); - // + fParticleChangeForGamma->ProposeMomentumDirection(zPrimeVers.unit()); - fParticleChangeForGamma->ProposeMomentumDirection(zPrimeVers.unit()) ; - - if (!statCode) - - fParticleChangeForGamma->SetProposedKineticEnergy - (electronEnergy0-1.214E-4*(1.-cosTheta)*electronEnergy0); - - else fParticleChangeForGamma->SetProposedKineticEnergy(electronEnergy0); + auto EnergyDeposit = fpModelData->GetElasticLevel(materialID) * (1. - cosTheta) * electronEnergy0; + fParticleChangeForGamma->ProposeLocalEnergyDeposit(EnergyDeposit); + if (statCode) { + fParticleChangeForGamma->SetProposedKineticEnergy(electronEnergy0); + } + else { + auto newEnergy = electronEnergy0 - EnergyDeposit; + fParticleChangeForGamma->SetProposedKineticEnergy(newEnergy); + } +} - // +G4double G4DNACPA100ElasticModel::Theta(const G4ParticleDefinition* p, G4double k, + G4double integrDiff, const std::size_t& materialID) +{ + G4double theta, valueT1, valueT2, valueE21, valueE22, valueE12, valueE11; + G4double xs11 = 0; + G4double xs12 = 0; + G4double xs21 = 0; + G4double xs22 = 0; + if (p == G4Electron::ElectronDefinition()) { + if (k == tValuesVec[materialID][p].back()) { + k = k * (1. - 1e-12); + } + auto t2 = + std::upper_bound(tValuesVec[materialID][p].begin(), tValuesVec[materialID][p].end(), k); + auto t1 = t2 - 1; + + auto e12 = std::upper_bound(eValuesVect[materialID][p][(*t1)].begin(), + eValuesVect[materialID][p][(*t1)].end(), integrDiff); + auto e11 = e12 - 1; + + auto e22 = std::upper_bound(eValuesVect[materialID][p][(*t2)].begin(), + eValuesVect[materialID][p][(*t2)].end(), integrDiff); + auto e21 = e22 - 1; + + valueT1 = *t1; + valueT2 = *t2; + valueE21 = *e21; + valueE22 = *e22; + valueE12 = *e12; + valueE11 = *e11; + + xs11 = diffCrossSectionData[materialID][p][valueT1][valueE11]; + xs12 = diffCrossSectionData[materialID][p][valueT1][valueE12]; + xs21 = diffCrossSectionData[materialID][p][valueT2][valueE21]; + xs22 = diffCrossSectionData[materialID][p][valueT2][valueE22]; + } - fParticleChangeForGamma->ProposeLocalEnergyDeposit(1.214E-4*(1.-cosTheta)*electronEnergy0); - -} + if (xs11 == 0 && xs12 == 0 && xs21 == 0 && xs22 == 0) { + return (0.); + } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + theta = QuadInterpolator(valueE11, valueE12, valueE21, valueE22, xs11, xs12, xs21, xs22, valueT1, + valueT2, k, integrDiff); -G4double G4DNACPA100ElasticModel::Theta - (G4ParticleDefinition *, G4double k, G4double integrDiff) -{ - - G4double theta = 0.; - G4double valueT1 = 0; - G4double valueT2 = 0; - G4double valueE21 = 0; - G4double valueE22 = 0; - G4double valueE12 = 0; - G4double valueE11 = 0; - G4double xs11 = 0; - G4double xs12 = 0; - G4double xs21 = 0; - G4double xs22 = 0; - - // Protection against out of boundary access - if (k==eTdummyVec.back()) k=k*(1.-1e-12); - // - - std::vector::iterator t2 = std::upper_bound(eTdummyVec.begin(),eTdummyVec.end(), k); - std::vector::iterator t1 = t2-1; - - std::vector::iterator e12 = std::upper_bound(eVecm[(*t1)].begin(),eVecm[(*t1)].end(), - integrDiff); - std::vector::iterator e11 = e12-1; - - std::vector::iterator e22 = std::upper_bound(eVecm[(*t2)].begin(),eVecm[(*t2)].end(), - integrDiff); - std::vector::iterator e21 = e22-1; - - valueT1 =*t1; - valueT2 =*t2; - valueE21 =*e21; - valueE22 =*e22; - valueE12 =*e12; - valueE11 =*e11; - - xs11 = eDiffCrossSectionData[valueT1][valueE11]; - xs12 = eDiffCrossSectionData[valueT1][valueE12]; - xs21 = eDiffCrossSectionData[valueT2][valueE21]; - xs22 = eDiffCrossSectionData[valueT2][valueE22]; - - //TEST CPA100 - //if(k==valueT1) xs22 = eDiffCrossSectionData[valueT1][valueE12]; - - if (xs11==0 && xs12==0 && xs21==0 && xs22==0) return (0.); - - theta = QuadInterpolator( - valueE11, valueE12, - valueE21, valueE22, - xs11, xs12, - xs21, xs22, - valueT1, valueT2, - k, integrDiff); - return theta; - - //TEST CPA100 - //return xs22; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNACPA100ElasticModel::LinLogInterpolate(G4double e1, - G4double e2, - G4double e, - G4double xs1, - G4double xs2) +G4double G4DNACPA100ElasticModel::LinLogInterpolate(G4double e1, G4double e2, G4double e, + G4double xs1, G4double xs2) { G4double d1 = std::log(xs1); G4double d2 = std::log(xs2); - G4double value = std::exp(d1 + (d2 - d1)*(e - e1)/ (e2 - e1)); + G4double value = std::exp(d1 + (d2 - d1) * (e - e1) / (e2 - e1)); return value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNACPA100ElasticModel::LinLinInterpolate(G4double e1, - G4double e2, - G4double e, - G4double xs1, - G4double xs2) +G4double G4DNACPA100ElasticModel::LinLinInterpolate(G4double e1, G4double e2, G4double e, + G4double xs1, G4double xs2) { G4double d1 = xs1; G4double d2 = xs2; - G4double value = (d1 + (d2 - d1)*(e - e1)/ (e2 - e1)); + G4double value = (d1 + (d2 - d1) * (e - e1) / (e2 - e1)); return value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNACPA100ElasticModel::LogLogInterpolate(G4double e1, - G4double e2, - G4double e, - G4double xs1, - G4double xs2) +G4double G4DNACPA100ElasticModel::LogLogInterpolate(G4double e1, G4double e2, G4double e, + G4double xs1, G4double xs2) { - G4double a = (std::log10(xs2)-std::log10(xs1)) / (std::log10(e2)-std::log10(e1)); - G4double b = std::log10(xs2) - a*std::log10(e2); - G4double sigma = a*std::log10(e) + b; - G4double value = (std::pow(10.,sigma)); + G4double a = (std::log10(xs2) - std::log10(xs1)) / (std::log10(e2) - std::log10(e1)); + G4double b = std::log10(xs2) - a * std::log10(e2); + G4double sigma = a * std::log10(e) + b; + G4double value = (std::pow(10., sigma)); return value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - -G4double G4DNACPA100ElasticModel::QuadInterpolator(G4double e11, G4double e12, - G4double e21, G4double e22, - G4double xs11, G4double xs12, - G4double xs21, G4double xs22, - G4double t1, G4double t2, - G4double t, G4double e) +G4double G4DNACPA100ElasticModel::QuadInterpolator(G4double e11, G4double e12, G4double e21, + G4double e22, G4double xs11, G4double xs12, + G4double xs21, G4double xs22, G4double t1, + G4double t2, G4double t, G4double e) { // Log-Log -/* - G4double interpolatedvalue1 = LogLogInterpolate(e11, e12, e, xs11, xs12); - G4double interpolatedvalue2 = LogLogInterpolate(e21, e22, e, xs21, xs22); - G4double value = LogLogInterpolate(t1, t2, t, interpolatedvalue1, interpolatedvalue2); + /* + G4double interpolatedvalue1 = LogLogInterpolate(e11, e12, e, xs11, xs12); + G4double interpolatedvalue2 = LogLogInterpolate(e21, e22, e, xs21, xs22); + G4double value = LogLogInterpolate(t1, t2, t, interpolatedvalue1, interpolatedvalue2); - // Lin-Log - G4double interpolatedvalue1 = LinLogInterpolate(e11, e12, e, xs11, xs12); - G4double interpolatedvalue2 = LinLogInterpolate(e21, e22, e, xs21, xs22); - G4double value = LinLogInterpolate(t1, t2, t, interpolatedvalue1, interpolatedvalue2); -*/ + // Lin-Log + G4double interpolatedvalue1 = LinLogInterpolate(e11, e12, e, xs11, xs12); + G4double interpolatedvalue2 = LinLogInterpolate(e21, e22, e, xs21, xs22); + G4double value = LinLogInterpolate(t1, t2, t, interpolatedvalue1, interpolatedvalue2); + */ // Lin-Lin G4double interpolatedvalue1 = LinLinInterpolate(e11, e12, e, xs11, xs12); @@ -586,53 +393,73 @@ G4double G4DNACPA100ElasticModel::QuadInterpolator(G4double e11, G4double e12, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNACPA100ElasticModel::RandomizeCosTheta(G4double k) +G4double G4DNACPA100ElasticModel::RandomizeCosTheta(G4double k, const std::size_t& materialID) { - - G4double integrdiff=0; // PROBABILITY between 0 and 1. - G4double uniformRand=G4UniformRand(); + G4double integrdiff = 0; // PROBABILITY between 0 and 1. + G4double uniformRand = G4UniformRand(); integrdiff = uniformRand; - - G4double cosTheta=0.; - - // 1 - COS THETA is read from the data file - cosTheta = 1 - Theta(G4Electron::ElectronDefinition(),k/eV,integrdiff); - - // - // - //Dump - // - //G4cout << "theta=" << theta << G4endl; - //G4cout << "cos theta=" << std::cos(theta*pi/180) << G4endl; - //G4cout << "sin theta=" << std::sin(theta*pi/180) << G4endl; - //G4cout << "acos(cos theta)=" << std::acos(cosTheta) << G4endl; - //G4cout << "cos theta="<< cosTheta << G4endl; - //G4cout << "1 - cos theta="<< 1. - cosTheta << G4endl; - //G4cout << "sin theta=" << std::sqrt(1-cosTheta*cosTheta) << G4endl; - // - /* - G4double minProb = 0; // we scan probability between 0 and one - G4double maxProb = 1; - G4int nProbSteps = 100; - G4double prob(minProb); - G4double stepProb((maxProb-minProb)/static_cast(nProbSteps)); - G4int step(nProbSteps); - system ("rm -rf elastic-cumul-cpa100-100keV.out"); - FILE* myFile=fopen("elastic-cumul-cpa100-100keV.out","a"); - while (step>=0) - { - step--; - fprintf (myFile,"%16.9le %16.9le\n", - prob, - Theta(G4Electron::ElectronDefinition(),100000,prob)); // SELECT NRJ IN eV !!! - prob=prob+stepProb; - } - fclose (myFile); - abort(); - */ - // - // end of dump - // - - return cosTheta; + G4double cosTheta = 0.; + cosTheta = 1 - Theta(G4Electron::ElectronDefinition(), k / eV, integrdiff, materialID); + // cosTheta = std::cos(theta * CLHEP::pi / 180); ??? + return cosTheta; } +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4DNACPA100ElasticModel::ReadDiffCSFile(const std::size_t& materialName, + const G4ParticleDefinition* particleName, + const G4String& file, const G4double&) +{ + const char* path = G4FindDataDir("G4LEDATA"); + if (!path) { + G4Exception("G4DNACPA100ElasticModel::ReadAllDiffCSFiles", "em0006", FatalException, + "G4LEDATA environment variable not set."); + return; + } + + std::ostringstream fullFileName; + fullFileName << path << "/" << file << ".dat"; + + std::ifstream diffCrossSection(fullFileName.str().c_str()); + // error if file is not there + std::stringstream endPath; + if (!diffCrossSection) { + endPath << "Missing data file: " << file; + G4Exception("G4DNACPA100ElasticModel::Initialise", "em0003", FatalException, + endPath.str().c_str()); + } + + tValuesVec[materialName][particleName].push_back(0.); + + G4String line; + while (std::getline(diffCrossSection, line)) { + // + std::istringstream testIss(line); + G4String test; + testIss >> test; + if (test == "#") { + continue; + } + // check if line is empty + else if (line.empty()) { + continue; + } + std::istringstream iss(line); + + G4double tDummy; + G4double eDummy; + + iss >> tDummy >> eDummy; + + if (tDummy != tValuesVec[materialName][particleName].back()) { + // Add the current T value + tValuesVec[materialName][particleName].push_back(tDummy); + // Make it correspond to a default zero E value + eValuesVect[materialName][particleName][tDummy].push_back(0.); + } + iss >> diffCrossSectionData[materialName][particleName][tDummy][eDummy]; + + if (eDummy != eValuesVect[materialName][particleName][tDummy].back()) { + eValuesVect[materialName][particleName][tDummy].push_back(eDummy); + } + } +} \ No newline at end of file diff --git a/source/processes/electromagnetic/dna/models/src/G4DNACPA100ExcitationModel.cc b/source/processes/electromagnetic/dna/models/src/G4DNACPA100ExcitationModel.cc index 0fed9bb5df4..7a58ff09c6d 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNACPA100ExcitationModel.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNACPA100ExcitationModel.cc @@ -37,12 +37,15 @@ // // 15.01.2014: creation // +// 1/2/2023 : Hoang added modification for DNA cross sections #include "G4DNACPA100ExcitationModel.hh" -#include "G4SystemOfUnits.hh" -#include "G4PhysicalConstants.hh" + #include "G4DNAChemistryManager.hh" +#include "G4DNAMaterialManager.hh" #include "G4DNAMolecularMaterial.hh" +#include "G4PhysicalConstants.hh" +#include "G4SystemOfUnits.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... @@ -52,387 +55,271 @@ using namespace std; G4DNACPA100ExcitationModel::G4DNACPA100ExcitationModel(const G4ParticleDefinition*, const G4String& nam) -:G4VEmModel(nam),isInitialised(false) + : G4VDNAModel(nam, "all") { - fpMolWaterDensity = 0; - - SetLowEnergyLimit(11*eV); - SetHighEnergyLimit(255955*eV); - - verboseLevel= 0; - // Verbosity scale: - // 0 = nothing - // 1 = warning for energy non-conservation - // 2 = details of energy budget - // 3 = calculation of cross sections, file openings, sampling of atoms - // 4 = entering in methods - - if( verboseLevel>0 ) - { - G4cout << "CPA100 excitation model is constructed " << G4endl; - } - fParticleChangeForGamma = 0; - - // Selection of stationary mode - - statCode = false; + fpGuanine = G4Material::GetMaterial("G4_GUANINE", false); + fpG4_WATER = G4Material::GetMaterial("G4_WATER", false); + fpDeoxyribose = G4Material::GetMaterial("G4_DEOXYRIBOSE", false); + fpCytosine = G4Material::GetMaterial("G4_CYTOSINE", false); + fpThymine = G4Material::GetMaterial("G4_THYMINE", false); + fpAdenine = G4Material::GetMaterial("G4_ADENINE", false); + fpPhosphate = G4Material::GetMaterial("G4_PHOSPHORIC_ACID", false); + fpParticle = G4Electron::ElectronDefinition(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4DNACPA100ExcitationModel::~G4DNACPA100ExcitationModel() -{ - // Cross section - - std::map< G4String,G4DNACrossSectionDataSet*,std::less >::iterator pos; - for (pos = tableData.begin(); pos != tableData.end(); ++pos) - { - G4DNACrossSectionDataSet* table = pos->second; - delete table; - } - -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - -void G4DNACPA100ExcitationModel::Initialise(const G4ParticleDefinition* particle, +void G4DNACPA100ExcitationModel::Initialise(const G4ParticleDefinition* p, const G4DataVector& /*cuts*/) { + if (isInitialised) { + return; + } + if (verboseLevel > 3) { + G4cout << "Calling G4DNACPA100ExcitationModel::Initialise()" << G4endl; + } + + if (!G4DNAMaterialManager::Instance()->IsLocked()) { + if (p != fpParticle) { + std::ostringstream oss; + oss << " Model is not applied for this particle " << p->GetParticleName(); + G4Exception("G4DNACPA100ExcitationModel::G4DNACPA100ExcitationModel", "CPA001", + FatalException, oss.str().c_str()); + } - if (verboseLevel > 3) - G4cout << "Calling G4DNACPA100ExcitationModel::Initialise()" << G4endl; - - G4String fileElectron("dna/sigma_excitation_e_cpa100"); - - G4double scaleFactor = 1.e-20 *m*m; - - // *** ELECTRON - - G4ParticleDefinition* electronDef = G4Electron::ElectronDefinition(); - G4String electron; - electron = electronDef->GetParticleName(); - - tableFile[electron] = fileElectron; - - // Cross section - - G4DNACrossSectionDataSet* tableE - = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, eV, scaleFactor ); - - /* - G4DNACrossSectionDataSet* tableE = - new G4DNACrossSectionDataSet(new G4DNACPA100LogLogInterpolation, eV, scaleFactor ); - */ - - tableE->LoadData(fileElectron); - - tableData[electron] = tableE; - - // + char* path = getenv("G4LEDATA"); - if( verboseLevel>0 ) - { - G4cout << "CPA100 excitation model is initialized " << G4endl - << "Energy range: " - << LowEnergyLimit() / eV << " eV - " - << HighEnergyLimit() / keV << " keV for " - << particle->GetParticleName() - << G4endl; + if (!path) { + G4Exception("G4DNACPA100ExcitationModel::Initialise", "em0006", FatalException, + "G4LEDATA environment variable not set."); + return; } - // Initialize water density pointer - fpMolWaterDensity = - G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(G4Material::GetMaterial("G4_WATER")); + std::size_t index; + if (fpG4_WATER != nullptr) { + index = fpG4_WATER->GetIndex(); + AddCrossSectionData(index, p, "dna/sigma_excitation_e_cpa100", 1.e-20 * m * m); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 255955 * eV); + } + if (fpGuanine != nullptr) { + index = fpGuanine->GetIndex(); + AddCrossSectionData(index, p, "dna/sigma_excitation_e_cpa100_guanine", 1. * cm * cm); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 1 * MeV); + } + if (fpDeoxyribose != nullptr) { + index = fpDeoxyribose->GetIndex(); + AddCrossSectionData(index, p, "dna/sigma_excitation_e_cpa100_deoxyribose", 1. * cm * cm); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 1 * MeV); + } + if (fpCytosine != nullptr) { + index = fpCytosine->GetIndex(); + AddCrossSectionData(index, p, "dna/sigma_excitation_e_cpa100_cytosine", 1. * cm * cm); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 1 * MeV); + } + if (fpThymine != nullptr) { + index = fpThymine->GetIndex(); + AddCrossSectionData(index, p, "dna/sigma_excitation_e_cpa100_thymine", 1. * cm * cm); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 1 * MeV); + } + if (fpAdenine != nullptr) { + index = fpAdenine->GetIndex(); + AddCrossSectionData(index, p, "dna/sigma_excitation_e_cpa100_adenine", 1. * cm * cm); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 1 * MeV); + } + if (fpPhosphate != nullptr) { + index = fpPhosphate->GetIndex(); + AddCrossSectionData(index, p, "dna/sigma_excitation_e_cpa100_phosphoric_acid", 1. * cm * cm); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 1 * MeV); + } - if (isInitialised) return; - fParticleChangeForGamma = GetParticleChangeForGamma(); - isInitialised = true; + LoadCrossSectionData(p); + G4DNAMaterialManager::Instance()->SetMasterDataModel(DNAModelType::fDNAExcitation, this); + fpModelData = this; + } + else { + auto dataModel = dynamic_cast( + G4DNAMaterialManager::Instance()->GetModel(DNAModelType::fDNAExcitation)); + if (dataModel == nullptr) { + G4cout << "G4DNACPA100ExcitationModel::CrossSectionPerVolume:: not good modelData" << G4endl; + throw; + } + else { + fpModelData = dataModel; + } + } + fParticleChangeForGamma = GetParticleChangeForGamma(); + isInitialised = true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4double G4DNACPA100ExcitationModel::CrossSectionPerVolume(const G4Material* material, - const G4ParticleDefinition* particleDefinition, - G4double ekin, - G4double, - G4double) + const G4ParticleDefinition* p, + G4double ekin, G4double, G4double) { - - if (verboseLevel > 3) - G4cout << "Calling CrossSectionPerVolume() of G4DNACPA100ExcitationModel" << G4endl; - - if (particleDefinition != G4Electron::ElectronDefinition()) return 0; - - // Calculate total cross section for model - - G4double sigma=0; - - G4double waterDensity = (*fpMolWaterDensity)[material->GetIndex()]; - - const G4String& particleName = particleDefinition->GetParticleName(); - - if (ekin >= LowEnergyLimit() && ekin <= HighEnergyLimit()) - { - std::map< G4String,G4DNACrossSectionDataSet*,std::less >::iterator pos; - pos = tableData.find(particleName); - - if (pos != tableData.end()) - { - G4DNACrossSectionDataSet* table = pos->second; - if (table != 0) - { - sigma = table->FindValue(ekin); - } - } - else - { - G4Exception("G4DNACPA100ExcitationModel::CrossSectionPerVolume","em0002", - FatalException,"Model not applicable to particle type."); - } + // Get the name of the current particle + G4String particleName = p->GetParticleName(); + auto MatID = material->GetIndex(); + // initialise variables + G4double lowLim; + G4double highLim; + G4double sigma = 0; + + // Get the low energy limit for the current particle + lowLim = fpModelData->GetLowELimit(MatID, p); + + // Get the high energy limit for the current particle + highLim = fpModelData->GetHighELimit(MatID, p); + + // Check that we are in the correct energy range + if (ekin >= lowLim && ekin < highLim) { + // Get the map with all the data tables + auto Data = fpModelData->GetData(); + + if ((*Data)[MatID][p] == nullptr) { + G4Exception("G4DNACPA100ExcitationModel::CrossSectionPerVolume", "em00236", FatalException, + "No model is registered"); } - - if (verboseLevel > 2) - { - G4cout << "__________________________________" << G4endl; - G4cout << "G4DNACPA100ExcitationModel - XS INFO START" << G4endl; - G4cout << "Kinetic energy(eV)=" << ekin/eV << " particle : " << particleName << G4endl; - G4cout << "Cross section per water molecule (cm^2)=" << sigma/cm/cm << G4endl; - G4cout << "Cross section per water molecule (cm^-1)=" << sigma*waterDensity/(1./cm) << G4endl; - // G4cout << " - Cross section per water molecule (cm^-1)=" - // << sigma*material->GetAtomicNumDensityVector()[1]/(1./cm) << G4endl; - G4cout << "G4DNACPA100ExcitationModel - XS INFO END" << G4endl; + // Retrieve the cross section value + sigma = (*Data)[MatID][p]->FindValue(ekin); + + if (verboseLevel > 2) { + auto MolDensity = + (*G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(material))[MatID]; + G4cout << "__________________________________" << G4endl; + G4cout << "°°° G4DNACPA100ExcitationModel - XS INFO START" << G4endl; + G4cout << "°°° Kinetic energy(eV)=" << ekin / eV << " particle : " << particleName << G4endl; + G4cout << "°°° lowLim (eV) = " << lowLim / eV << " highLim (eV) : " << highLim / eV << G4endl; + G4cout << "°°° Materials = " << (*G4Material::GetMaterialTable())[MatID]->GetName() << G4endl; + G4cout << "°°° Cross section per " << MatID << " ID molecule (cm^2)=" << sigma / cm / cm + << G4endl; + G4cout << "°°° Cross section per Phosphate molecule (cm^-1)=" + << sigma * MolDensity / (1. / cm) << G4endl; + G4cout << "°°° G4DNACPA100ExcitationModel - XS INFO END" << G4endl; } + } - return sigma*waterDensity; - + // Return the cross section value + auto MolDensity = (*G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(material))[MatID]; + return sigma * MolDensity; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4DNACPA100ExcitationModel::SampleSecondaries(std::vector* , - const G4MaterialCutsCouple*, - const G4DynamicParticle* aDynamicParticle, - G4double, - G4double) +void G4DNACPA100ExcitationModel::SampleSecondaries(std::vector*, + const G4MaterialCutsCouple* couple, + const G4DynamicParticle* aDynamicParticle, + G4double, G4double) { - - if (verboseLevel > 3) - G4cout << "Calling SampleSecondaries() of G4DNACPA100ExcitationModel" << G4endl; - - G4double k = aDynamicParticle->GetKineticEnergy(); - - const G4String& particleName = aDynamicParticle->GetDefinition()->GetParticleName(); - - G4int level = RandomSelect(k,particleName); - G4double excitationEnergy = waterStructure.ExcitationEnergy(level); - G4double newEnergy = k - excitationEnergy; - - if (newEnergy > 0) - { - // fParticleChangeForGamma->ProposeMomentumDirection(aDynamicParticle->GetMomentumDirection()); - - // We take into account direction change as described page 87 (II.92) in thesis by S. Edel - - G4double cosTheta = - - (excitationEnergy/k) / (1. + (k/(2*electron_mass_c2))*(1.-excitationEnergy/k) ); - - cosTheta = std::sqrt(1.-cosTheta); - - G4double phi = 2. * pi * G4UniformRand(); - - G4ThreeVector zVers = aDynamicParticle->GetMomentumDirection(); - - //G4ThreeVector xVers = zVers.orthogonal(); - //G4ThreeVector yVers = zVers.cross(xVers); - //G4double xDir = std::sqrt(1. - cosTheta*cosTheta); - //G4double yDir = xDir; - //xDir *= std::cos(phi); - //yDir *= std::sin(phi); - // G4ThreeVector zPrimeVers((xDir*xVers + yDir*yVers + cosTheta*zVers)); - - // Computation of scattering angles (from Subroutine DIRAN in CPA100) - - G4double CT1, ST1, CF1, SF1, CT2, ST2, CF2, SF2; - G4double sinTheta = std::sqrt (1-cosTheta*cosTheta); - - CT1=0; - ST1=0; - CF1=0; - SF1=0; - CT2=0; - ST2=0; - CF2=0; - SF2=0; - - CT1 = zVers.z(); - ST1=std::sqrt(1.-CT1*CT1); - - if (ST1!=0) CF1 = zVers.x()/ST1; else CF1 = std::cos(2. * pi * G4UniformRand()); - if (ST1!=0) SF1 = zVers.y()/ST1; else SF1 = std::sqrt(1.-CF1*CF1); - - G4double A3, A4, A5, A2, A1; - A3=0; - A4=0; - A5=0; - A2=0; - A1=0; - - A3 = sinTheta*std::cos(phi); - A4 = A3*CT1 + ST1*cosTheta; - A5 = sinTheta * std::sin(phi); - A2 = A4 * SF1 + A5 * CF1; - A1 = A4 * CF1 - A5 * SF1; - - CT2 = CT1*cosTheta - ST1*A3; - ST2 = std::sqrt(1.-CT2*CT2); - - if (ST2==0) ST2=1E-6; - CF2 = A1/ST2; - SF2 = A2/ST2; - - /* - G4cout << "CT1=" << CT1 << G4endl; - G4cout << "ST1=" << ST1 << G4endl; - G4cout << "CF1=" << CF1 << G4endl; - G4cout << "SF1=" << SF1 << G4endl; - G4cout << "cosTheta=" << cosTheta << G4endl; - G4cout << "sinTheta=" << sinTheta << G4endl; - G4cout << "cosPhi=" << std::cos(phi) << G4endl; - G4cout << "sinPhi=" << std::sin(phi) << G4endl; - G4cout << "CT2=" << CT2 << G4endl; - G4cout << "ST2=" << ST2 << G4endl; - G4cout << "CF2=" << CF2 << G4endl; - G4cout << "SF2=" << SF2 << G4endl; - */ - - G4ThreeVector zPrimeVers(ST2*CF2,ST2*SF2,CT2); - - // - - fParticleChangeForGamma->ProposeMomentumDirection(zPrimeVers.unit()) ; - - // - - if (!statCode) fParticleChangeForGamma->SetProposedKineticEnergy(newEnergy); - else fParticleChangeForGamma->SetProposedKineticEnergy(k); - - fParticleChangeForGamma->ProposeLocalEnergyDeposit(excitationEnergy); + auto materialID = couple->GetMaterial()->GetIndex(); + G4double k = aDynamicParticle->GetKineticEnergy(); + const auto& particle = aDynamicParticle->GetDefinition(); + G4double lowLim = fpModelData->GetLowELimit(materialID, particle); + G4double highLim = fpModelData->GetHighELimit(materialID, particle); + + // Check if we are in the correct energy range + if (k >= lowLim && k < highLim) { + G4int level; + G4double excitationEnergy; + G4double newEnergy; + if (materialID == fpG4_WATER->GetIndex()) { + level = fpModelData->RandomSelectShell(k, particle, materialID); + excitationEnergy = eStructure.ExcitationEnergy(level, materialID); + } + else { + do { + level = eStructure.NumberOfLevels(materialID) * G4UniformRand(); + excitationEnergy = eStructure.ExcitationEnergy(level, materialID); + } while ((k - eStructure.ExcitationEnergy(level, materialID)) < 0); + } + newEnergy = k - excitationEnergy; + + if (k - newEnergy <= 0) { + G4cout << "k : " << k << " newEnergy : " << newEnergy << G4endl; + G4cout << "newEnergy : " << newEnergy << " k : " << k + << " excitationEnergy: " << excitationEnergy << G4endl; + G4cout << "G4DNACPA100ExcitationModel::level : " << eStructure.NumberOfLevels(materialID) + << " excitationEnergy : " << excitationEnergy << G4endl; + G4cout << "°°° Materials = " << (*G4Material::GetMaterialTable())[materialID]->GetName() + << G4endl; + G4cout << "Attention an error occured !!!" << G4endl; + abort(); } - // Chemistry - - const G4Track * theIncomingTrack = fParticleChangeForGamma->GetCurrentTrack(); - G4DNAChemistryManager::Instance()->CreateWaterMolecule(eExcitedMolecule, - level, - theIncomingTrack); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4int G4DNACPA100ExcitationModel::RandomSelect(G4double k, const G4String& particle) -{ - G4int level = 0; - - std::map< G4String,G4DNACrossSectionDataSet*,std::less >::iterator pos; - pos = tableData.find(particle); - - if (pos != tableData.end()) - { - G4DNACrossSectionDataSet* table = pos->second; - - if (table != 0) - { - G4double* valuesBuffer = new G4double[table->NumberOfComponents()]; - const G4int n = (G4int)table->NumberOfComponents(); - G4int i(n); - G4double value = 0.; - - //Verification - /* - G4double tmp=10.481*eV; - G4cout << table->GetComponent(0)->FindValue(tmp)/(1e-20*m*m) << G4endl; - G4cout << table->GetComponent(1)->FindValue(tmp)/(1e-20*m*m) << G4endl; - G4cout << table->GetComponent(2)->FindValue(tmp)/(1e-20*m*m) << G4endl; - G4cout << table->GetComponent(3)->FindValue(tmp)/(1e-20*m*m) << G4endl; - G4cout << table->GetComponent(4)->FindValue(tmp)/(1e-20*m*m) << G4endl; - G4cout << - table->GetComponent(0)->FindValue(tmp)/(1e-20*m*m) + - table->GetComponent(1)->FindValue(tmp)/(1e-20*m*m) + - table->GetComponent(2)->FindValue(tmp)/(1e-20*m*m) + - table->GetComponent(3)->FindValue(tmp)/(1e-20*m*m) + - table->GetComponent(4)->FindValue(tmp)/(1e-20*m*m) - << G4endl; - abort(); - */ - // - //Dump - // - /* - G4double minEnergy = 10.481 * eV; - G4double maxEnergy = 255955. * eV; - G4int nEnergySteps = 1000; - G4double energy(minEnergy); - G4double stpEnergy(std::pow(maxEnergy/energy, 1./static_cast(nEnergySteps-1))); - G4int step(nEnergySteps); - system ("rm -rf excitation-cap100.out"); - FILE* myFile=fopen("excitation-cpa100.out","a"); - while (step>0) - { - step--; - fprintf (myFile,"%16.9le %16.9le %16.9le %16.9le %16.9le %16.9le %16.9le \n", - energy/eV, - table->GetComponent(0)->FindValue(energy)/(1e-20*m*m), - table->GetComponent(1)->FindValue(energy)/(1e-20*m*m), - table->GetComponent(2)->FindValue(energy)/(1e-20*m*m), - table->GetComponent(3)->FindValue(energy)/(1e-20*m*m), - table->GetComponent(4)->FindValue(energy)/(1e-20*m*m), - table->GetComponent(0)->FindValue(energy)/(1e-20*m*m)+ - table->GetComponent(1)->FindValue(energy)/(1e-20*m*m)+ - table->GetComponent(2)->FindValue(energy)/(1e-20*m*m)+ - table->GetComponent(3)->FindValue(energy)/(1e-20*m*m)+ - table->GetComponent(4)->FindValue(energy)/(1e-20*m*m) - ); - energy*=stpEnergy; - } - fclose (myFile); - abort(); - */ - // - // end of dump - // - - while (i>0) - { - i--; - valuesBuffer[i] = table->GetComponent(i)->FindValue(k); - value += valuesBuffer[i]; - } - - value *= G4UniformRand(); - - i = n; - - while (i > 0) - { - i--; - - if (valuesBuffer[i] > value) - { - delete[] valuesBuffer; - return i; - } - value -= valuesBuffer[i]; - } - - if (valuesBuffer) delete[] valuesBuffer; - - } + if (newEnergy >= 0) { + // We take into account direction change as described page 87 (II.92) in thesis by S. Edel + + G4double cosTheta = + (excitationEnergy / k) / (1. + (k / (2 * electron_mass_c2)) * (1. - excitationEnergy / k)); + + cosTheta = std::sqrt(1. - cosTheta); + G4double phi = 2. * pi * G4UniformRand(); + const G4ThreeVector& zVers = aDynamicParticle->GetMomentumDirection(); + // Computation of scattering angles (from Subroutine DIRAN in CPA100) + + G4double CT1, ST1, CF1, SF1, CT2, ST2, CF2, SF2; + G4double sinTheta = std::sqrt(1 - cosTheta * cosTheta); + CT1 = zVers.z(); + ST1 = std::sqrt(1. - CT1 * CT1); + + ST1 != 0 ? CF1 = zVers.x() / ST1 : CF1 = std::cos(2. * pi * G4UniformRand()); + ST1 != 0 ? SF1 = zVers.y() / ST1 : SF1 = std::sqrt(1. - CF1 * CF1); + G4double A3, A4, A5, A2, A1; + A3 = sinTheta * std::cos(phi); + A4 = A3 * CT1 + ST1 * cosTheta; + A5 = sinTheta * std::sin(phi); + A2 = A4 * SF1 + A5 * CF1; + A1 = A4 * CF1 - A5 * SF1; + + CT2 = CT1 * cosTheta - ST1 * A3; + ST2 = std::sqrt(1. - CT2 * CT2); + + if (ST2 == 0) { + ST2 = 1E-6; + } + CF2 = A1 / ST2; + SF2 = A2 / ST2; + + G4ThreeVector zPrimeVers(ST2 * CF2, ST2 * SF2, CT2); + fParticleChangeForGamma->ProposeMomentumDirection(zPrimeVers.unit()); + if (!statCode) { + fParticleChangeForGamma->SetProposedKineticEnergy(newEnergy); + } + else { + fParticleChangeForGamma->SetProposedKineticEnergy(k); + } + + fParticleChangeForGamma->ProposeLocalEnergyDeposit(excitationEnergy); + + // Chemistry only for water; + if (materialID == fpG4_WATER->GetIndex()) { + const G4Track* theIncomingTrack = fParticleChangeForGamma->GetCurrentTrack(); + G4DNAChemistryManager::Instance()->CreateWaterMolecule(eExcitedMolecule, level, + theIncomingTrack); + } } - else - { - G4Exception("G4DNACPA100ExcitationModel::RandomSelect","em0002", - FatalException,"Model not applicable to particle type."); + else { + G4cerr << "newEnergy : " << newEnergy << " k : " << k + << " excitationEnergy: " << excitationEnergy << G4endl; + G4cerr << "G4DNACPA100ExcitationModel::level : " << eStructure.NumberOfLevels(materialID) + << " excitationEnergy : " << excitationEnergy << G4endl; + G4cerr << "°°° Materials = " << (*G4Material::GetMaterialTable())[materialID]->GetName() + << G4endl; + G4cerr << "Attention an error occured !!!" << G4endl; + G4Exception("G4DNACPA100ExcitationModel::SampleSecondaries", "em00236", FatalException, + "model is not registered for this energy"); } - return level; + } + else { + G4cerr << "k : " << k << " lowLim : " << lowLim << " highLim : " << highLim << G4endl; + G4Exception("G4DNACPA100ExcitationModel::SampleSecondaries", "em00236", FatalException, + "model is not registered for this energy"); + } } diff --git a/source/processes/electromagnetic/dna/models/src/G4DNACPA100IonisationModel.cc b/source/processes/electromagnetic/dna/models/src/G4DNACPA100IonisationModel.cc index a3752773e91..6ceeea02531 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNACPA100IonisationModel.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNACPA100IonisationModel.cc @@ -37,14 +37,20 @@ // // 15.01.2014: creation // +// Based on the study by S. Zein et. al. Nucl. Inst. Meth. B 488 (2021) 70-82 +// 1/2/2023 : Hoang added modification #include "G4DNACPA100IonisationModel.hh" + +#include "G4DNAChemistryManager.hh" +#include "G4DNAMaterialManager.hh" +#include "G4DNAMolecularMaterial.hh" +#include "G4LossTableManager.hh" #include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" #include "G4UAtomicDeexcitation.hh" -#include "G4LossTableManager.hh" -#include "G4DNAChemistryManager.hh" -#include "G4DNAMolecularMaterial.hh" + +#include //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... @@ -54,1206 +60,803 @@ using namespace std; G4DNACPA100IonisationModel::G4DNACPA100IonisationModel(const G4ParticleDefinition*, const G4String& nam) -:G4VEmModel(nam),isInitialised(false) + : G4VDNAModel(nam, "all") { - verboseLevel= 0; - // Verbosity scale: - // 0 = nothing - // 1 = warning for energy non-conservation - // 2 = details of energy budget - // 3 = calculation of cross sections, file openings, sampling of atoms - // 4 = entering in methods - - if( verboseLevel>0 ) - { - G4cout << "CPA100 ionisation model is constructed " << G4endl; - } - - SetLowEnergyLimit(11*eV); - SetHighEnergyLimit(255955*eV); - - // Mark this model as "applicable" for atomic deexcitation - SetDeexcitationFlag(true); - fAtomDeexcitation = 0; - fParticleChangeForGamma = 0; - fpMolWaterDensity = 0; - - // Selection of computation method - - // useDcs = true if usage of dcs for sampling of secondaries - // useDcs = false if usage of composition sampling (DEFAULT) - - useDcs = true; - - // if useDcs is true, one has the following choice - // fasterCode = true for usage of cumulated dcs (DEFAULT) - // fasterCode = false for usage of non-cumulated dcs - - fasterCode = true; - - // Selection of stationary mode - - statCode = false; + fpGuanine = G4Material::GetMaterial("G4_GUANINE", false); + fpG4_WATER = G4Material::GetMaterial("G4_WATER", false); + fpDeoxyribose = G4Material::GetMaterial("G4_DEOXYRIBOSE", false); + fpCytosine = G4Material::GetMaterial("G4_CYTOSINE", false); + fpThymine = G4Material::GetMaterial("G4_THYMINE", false); + fpAdenine = G4Material::GetMaterial("G4_ADENINE", false); + fpPhosphate = G4Material::GetMaterial("G4_PHOSPHORIC_ACID", false); + fpParticle = G4Electron::ElectronDefinition(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4DNACPA100IonisationModel::~G4DNACPA100IonisationModel() +void G4DNACPA100IonisationModel::Initialise(const G4ParticleDefinition* p, + const G4DataVector& /*cuts*/) { - // Cross section + if (isInitialised) { + return; + } + if (verboseLevel > 3) { + G4cout << "Calling G4DNACPA100IonisationModel::Initialise()" << G4endl; + } - std::map< G4String,G4DNACrossSectionDataSet*,std::less >::iterator pos; - for (pos = tableData.begin(); pos != tableData.end(); ++pos) - { - G4DNACrossSectionDataSet* table = pos->second; - delete table; + if (!G4DNAMaterialManager::Instance()->IsLocked()) { + if (p != fpParticle) { + std::ostringstream oss; + oss << " Model is not applied for this particle " << p->GetParticleName(); + G4Exception("G4DNACPA100IonisationModel::G4DNACPA100IonisationModel", "CPA001", + FatalException, oss.str().c_str()); } - // Final state - - eVecm.clear(); - -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - -void G4DNACPA100IonisationModel::Initialise(const G4ParticleDefinition* particle, - const G4DataVector& /*cuts*/) -{ - - if (verboseLevel > 3) - G4cout << "Calling G4DNACPA100IonisationModel::Initialise()" << G4endl; - - // Energy limits - - // The following file is proved by M. Terrissol et al. (sigion3) - - G4String fileElectron("dna/sigma_ionisation_e_cpa100_form_rel"); - - G4ParticleDefinition* electronDef = G4Electron::ElectronDefinition(); - - G4String electron; - - G4double scaleFactor = 1.e-20 * m*m; - - const char *path = G4FindDataDir("G4LEDATA"); - - // *** ELECTRON + char* path = getenv("G4LEDATA"); - electron = electronDef->GetParticleName(); - - tableFile[electron] = fileElectron; - - // Cross section - - G4DNACrossSectionDataSet* tableE = - new G4DNACrossSectionDataSet(new G4LogLogInterpolation, eV,scaleFactor ); - - //G4DNACrossSectionDataSet* tableE = - // new G4DNACrossSectionDataSet(new G4DNACPA100LogLogInterpolation, eV,scaleFactor ); - - tableE->LoadData(fileElectron); - - tableData[electron] = tableE; - - // Final state - - // ****************************** - - if (useDcs) - { - - std::ostringstream eFullFileName; - - if (fasterCode) eFullFileName << path << "/dna/sigmadiff_cumulated_ionisation_e_cpa100_rel.dat"; - - if (!fasterCode) eFullFileName << path << "/dna/sigmadiff_ionisation_e_cpa100_rel.dat"; - - std::ifstream eDiffCrossSection(eFullFileName.str().c_str()); - - if (!eDiffCrossSection) - { - if (fasterCode) G4Exception("G4DNACPA100IonisationModel::Initialise","em0003", - FatalException,"Missing data file:/dna/sigmadiff_cumulated_ionisation_e_cpa100_rel.dat"); - - if (!fasterCode) G4Exception("G4DNACPA100IonisationModel::Initialise","em0003", - FatalException,"Missing data file:/dna/sigmadiff_ionisation_e_cpa100_rel.dat"); + if (!path) { + G4Exception("G4DNACPA100IonisationModel::Initialise", "em0006", FatalException, + "G4LEDATA environment variable not set."); + return; } - // Clear the arrays for re-initialization case (MT mode) - // March 25th, 2014 - Vaclav Stepan, Sebastien Incerti - - eTdummyVec.clear(); - eVecm.clear(); - eProbaShellMap->clear(); - eDiffCrossSectionData->clear(); - eNrjTransfData->clear(); - - // - - eTdummyVec.push_back(0.); - while(!eDiffCrossSection.eof()) - { - G4double tDummy; - G4double eDummy; - eDiffCrossSection>>tDummy>>eDummy; - if (tDummy != eTdummyVec.back()) eTdummyVec.push_back(tDummy); - for (G4int j=0; j<5; j++) - { - eDiffCrossSection>>eDiffCrossSectionData[j][tDummy][eDummy]; - - if (fasterCode) - { - eNrjTransfData[j][tDummy][eDiffCrossSectionData[j][tDummy][eDummy]]=eDummy; - eProbaShellMap[j][tDummy].push_back(eDiffCrossSectionData[j][tDummy][eDummy]); - } - - // SI - only if eof is not reached - if (!eDiffCrossSection.eof() && !fasterCode) - eDiffCrossSectionData[j][tDummy][eDummy]*=scaleFactor; - - if (!fasterCode) eVecm[tDummy].push_back(eDummy); - - } + std::size_t index; + if (fpG4_WATER != nullptr) { + index = fpG4_WATER->GetIndex(); + G4String eFullFileName = ""; + fasterCode ? eFullFileName = "/dna/sigmadiff_cumulated_ionisation_e_cpa100_rel" + : eFullFileName = "/dna/sigmadiff_ionisation_e_cpa100_rel"; + AddCrossSectionData(index, p, "dna/sigma_ionisation_e_cpa100_form_rel", eFullFileName, + 1.e-20 * m * m); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 255955 * eV); } - - // - - } // end of if (useDcs) - - // ****************************** - - // - - if( verboseLevel>0 ) - { - G4cout << "CPA100 ionisation model is initialized " << G4endl - << "Energy range: " - << LowEnergyLimit() / eV << " eV - " - << HighEnergyLimit() / keV << " keV for " - << particle->GetParticleName() - << G4endl; + if (fpGuanine != nullptr) { + index = fpGuanine->GetIndex(); + G4String eFullFileName = ""; + if(useDcs) { + fasterCode ? eFullFileName = "/dna/sigmadiff_cumulated_elastic_e_cpa100_guanine" + : eFullFileName = "/dna/sigmadiff_ionisation_e_cpa100_guanine"; + } + AddCrossSectionData(index, p, "dna/sigma_ionisation_e_cpa100_guanine", eFullFileName, + 1. * cm * cm); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 1 * MeV); } + if (fpDeoxyribose != nullptr) { + index = fpDeoxyribose->GetIndex(); + G4String eFullFileName = ""; + if(useDcs) { + eFullFileName = "/dna/sigmadiff_cumulated_ionisation_e_cpa100_deoxyribose"; + } + AddCrossSectionData(index, p, "dna/sigma_ionisation_e_cpa100_deoxyribose", eFullFileName, + 1. * cm * cm); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 1 * MeV); + } + if (fpCytosine != nullptr) { + index = fpCytosine->GetIndex(); + G4String eFullFileName = ""; + if(useDcs) { + fasterCode ? eFullFileName = "/dna/sigmadiff_cumulated_ionisation_e_cpa100_cytosine" + : eFullFileName = "/dna/sigmadiff_ionisation_e_cpa100_cytosine"; + } + AddCrossSectionData(index, p, "dna/sigma_ionisation_e_cpa100_cytosine", eFullFileName, + 1. * cm * cm); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 1 * MeV); + } + if (fpThymine != nullptr) { + index = fpThymine->GetIndex(); + G4String eFullFileName = ""; + if(useDcs) { + fasterCode ? eFullFileName = "/dna/sigmadiff_cumulated_ionisation_e_cpa100_thymine" + : eFullFileName = "/dna/sigmadiff_ionisation_e_cpa100_thymine"; + } + AddCrossSectionData(index, p, "dna/sigma_ionisation_e_cpa100_thymine", eFullFileName, + 1. * cm * cm); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 1 * MeV); + } + if (fpAdenine != nullptr) { + index = fpAdenine->GetIndex(); + G4String eFullFileName = ""; + if(useDcs) { + fasterCode ? eFullFileName = "/dna/sigmadiff_cumulated_ionisation_e_cpa100_adenine" + : eFullFileName = "/dna/sigmadiff_ionisation_e_cpa100_adenine"; + } + AddCrossSectionData(index, p, "dna/sigma_ionisation_e_cpa100_adenine", eFullFileName, + 1. * cm * cm); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 1 * MeV); + } + if (fpPhosphate != nullptr) { + index = fpPhosphate->GetIndex(); + G4String eFullFileName = ""; + if(useDcs) { + eFullFileName = "dna/sigmadiff_cumulated_ionisation_e_cpa100_phosphoric_acid"; + } + AddCrossSectionData(index, p, "dna/sigma_ionisation_e_cpa100_phosphoric_acid",eFullFileName, + 1. * cm * cm); + SetLowELimit(index, p, 11 * eV); + SetHighELimit(index, p, 1 * MeV); + } + LoadCrossSectionData(p); + G4DNAMaterialManager::Instance()->SetMasterDataModel(DNAModelType::fDNAIonisation, this); + fpModelData = this; + } + else { + auto dataModel = dynamic_cast( + G4DNAMaterialManager::Instance()->GetModel(DNAModelType::fDNAIonisation)); + if (dataModel == nullptr) { + G4cout << "G4DNACPA100IonisationModel::CrossSectionPerVolume:: not good modelData" << G4endl; + throw; + } + else { + fpModelData = dataModel; + } + } - // Initialize water density pointer - fpMolWaterDensity = G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(G4Material::GetMaterial("G4_WATER")); - - // AD - fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation(); + fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation(); - if (isInitialised) return; - fParticleChangeForGamma = GetParticleChangeForGamma(); - isInitialised = true; + fParticleChangeForGamma = GetParticleChangeForGamma(); + isInitialised = true; } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - -G4double G4DNACPA100IonisationModel::CrossSectionPerVolume( const G4Material* material, - const G4ParticleDefinition* particleDefinition, - G4double ekin, - G4double, - G4double) +G4double G4DNACPA100IonisationModel::CrossSectionPerVolume(const G4Material* material, + const G4ParticleDefinition* p, + G4double ekin, G4double, G4double) { + // initialise the cross section value (output value) + G4double sigma(0); - if (verboseLevel > 3) - G4cout << "Calling CrossSectionPerVolume() of G4DNACPA100IonisationModel" << G4endl; - - if (particleDefinition != G4Electron::ElectronDefinition()) return 0; + // Get the current particle name + const G4String& particleName = p->GetParticleName(); - // Calculate total cross section for model + if (p != fpParticle) { + G4Exception("G4DNACPA100IonisationModel::CrossSectionPerVolume", "em00223", FatalException, + "No model is registered for this particle"); + } - G4double sigma=0; + auto matID = material->GetIndex(); - G4double waterDensity = (*fpMolWaterDensity)[material->GetIndex()]; + // Set the low and high energy limits + G4double lowLim = fpModelData->GetLowELimit(matID, p); + G4double highLim = fpModelData->GetHighELimit(matID, p); - const G4String& particleName = particleDefinition->GetParticleName(); + // Check that we are in the correct energy range + if (ekin >= lowLim && ekin < highLim) { + // Get the map with all the model data tables + auto tableData = fpModelData->GetData(); - if (ekin >= LowEnergyLimit() && ekin <= HighEnergyLimit()) - { - std::map< G4String,G4DNACrossSectionDataSet*,std::less >::iterator pos; - pos = tableData.find(particleName); - - if (pos != tableData.end()) - { - G4DNACrossSectionDataSet* table = pos->second; - if (table != 0) sigma = table->FindValue(ekin); - } - else - { - G4Exception("G4DNACPA100IonisationModel::CrossSectionPerVolume","em0002", - FatalException,"Model not applicable to particle type."); - } + if ((*tableData)[matID][p] == nullptr) { + G4Exception("G4DNACPA100IonisationModel::CrossSectionPerVolume", "em00236", FatalException, + "No model is registered"); + } + else { + sigma = (*tableData)[matID][p]->FindValue(ekin); } - if (verboseLevel > 2) - { + if (verboseLevel > 2) { + auto MolDensity = + (*G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(material))[matID]; G4cout << "__________________________________" << G4endl; - G4cout << "G4DNACPA100IonisationModel - XS INFO START" << G4endl; - G4cout << "Kinetic energy(eV)=" << ekin/eV << " particle : " << particleName << G4endl; - G4cout << "Cross section per water molecule (cm^2)=" << sigma/cm/cm << G4endl; - G4cout << "Cross section per water molecule (cm^-1)=" << sigma*waterDensity/(1./cm) << G4endl; - G4cout << "G4DNACPA100IonisationModel - XS INFO END" << G4endl; + G4cout << "°°° G4DNACPA100IonisationModel - XS INFO START" << G4endl; + G4cout << "°°° Kinetic energy(eV)=" << ekin / eV << " particle : " << particleName << G4endl; + G4cout << "°°° lowLim (eV) = " << lowLim / eV << " highLim (eV) : " << highLim / eV << G4endl; + G4cout << "°°° Materials = " << (*G4Material::GetMaterialTable())[matID]->GetName() << G4endl; + G4cout << "°°° Cross section per " << matID << " index molecule (cm^2)=" << sigma / cm / cm + << G4endl; + G4cout << "°°° Cross section per Phosphate molecule (cm^-1)=" + << sigma * MolDensity / (1. / cm) << G4endl; + G4cout << "°°° G4DNACPA100IonisationModel - XS INFO END" << G4endl; } + } - return sigma*waterDensity; + auto MolDensity = (*G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(material))[matID]; + return sigma * MolDensity; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4DNACPA100IonisationModel::SampleSecondaries(std::vector* fvect, - const G4MaterialCutsCouple* ,//must be set! - const G4DynamicParticle* particle, - G4double, - G4double) +void G4DNACPA100IonisationModel::SampleSecondaries( + std::vector* fvect, + const G4MaterialCutsCouple* couple, // must be set! + const G4DynamicParticle* particle, G4double, G4double) { - if (verboseLevel > 3) + if (verboseLevel > 3) { G4cout << "Calling SampleSecondaries() of G4DNACPA100IonisationModel" << G4endl; + } + auto k = particle->GetKineticEnergy(); - G4double k = particle->GetKineticEnergy(); - - const G4String& particleName = particle->GetDefinition()->GetParticleName(); - - if (k >= LowEnergyLimit() && k <= HighEnergyLimit()) - { - G4ParticleMomentum primaryDirection = particle->GetMomentumDirection(); - G4double particleMass = particle->GetDefinition()->GetPDGMass(); - G4double totalEnergy = k + particleMass; - G4double pSquare = k * (totalEnergy + particleMass); - G4double totalMomentum = std::sqrt(pSquare); - - G4int ionizationShell = -1; - - ionizationShell = RandomSelect(k,particleName); - - //SI: PROTECTION FOR G4LOGLOGINTERPOLATION ON UPPER VALUE - if (kGetMaterial(); - if (useDcs && !fasterCode) - secondaryKinetic = RandomizeEjectedElectronEnergy(particle->GetDefinition(),k,ionizationShell); + auto MatID = material->GetIndex(); - if (useDcs && fasterCode) - secondaryKinetic = RandomizeEjectedElectronEnergyFromCumulatedDcs(particle->GetDefinition(),k,ionizationShell); + auto p = particle->GetDefinition(); - if (!useDcs) - secondaryKinetic = RandomizeEjectedElectronEnergyFromCompositionSampling(particle->GetDefinition(),k,ionizationShell); + auto lowLim = fpModelData->GetLowELimit(MatID, p); + auto highLim = fpModelData->GetHighELimit(MatID, p); - // Quick test - /* - FILE* myFile; - myFile=fopen("nrj.txt","a"); - fprintf(myFile,"%e\n", secondaryKinetic/eV ); - fclose(myFile); - */ + // Check if we are in the correct energy range + if (k >= lowLim && k < highLim) { + const auto& primaryDirection = particle->GetMomentumDirection(); + auto particleMass = particle->GetDefinition()->GetPDGMass(); + auto totalEnergy = k + particleMass; + auto pSquare = k * (totalEnergy + particleMass); + auto totalMomentum = std::sqrt(pSquare); + G4int shell = -1; + G4double bindingEnergy, secondaryKinetic; + shell = fpModelData->RandomSelectShell(k, p, MatID); + bindingEnergy = iStructure.IonisationEnergy(shell, MatID); - G4double cosTheta = 0.; - G4double phi = 0.; - RandomizeEjectedElectronDirection(particle->GetDefinition(), k,secondaryKinetic, cosTheta, phi); + if (k < bindingEnergy) { + return; + } - G4double sinTheta = std::sqrt(1.-cosTheta*cosTheta); - G4double dirX = sinTheta*std::cos(phi); - G4double dirY = sinTheta*std::sin(phi); - G4double dirZ = cosTheta; - G4ThreeVector deltaDirection(dirX,dirY,dirZ); - deltaDirection.rotateUz(primaryDirection); + auto info = std::make_tuple(MatID, k, shell); - // SI - For atom. deexc. tagging - 23/05/2017 - if (secondaryKinetic>0) - { - G4DynamicParticle* dp = new G4DynamicParticle (G4Electron::Electron(),deltaDirection,secondaryKinetic) ; - fvect->push_back(dp); - } - // + secondaryKinetic = -1000 * eV; - if (particle->GetDefinition() == G4Electron::ElectronDefinition()) - { - G4double deltaTotalMomentum = std::sqrt(secondaryKinetic*(secondaryKinetic + 2.*electron_mass_c2 )); - - G4double finalPx = totalMomentum*primaryDirection.x() - deltaTotalMomentum*deltaDirection.x(); - G4double finalPy = totalMomentum*primaryDirection.y() - deltaTotalMomentum*deltaDirection.y(); - G4double finalPz = totalMomentum*primaryDirection.z() - deltaTotalMomentum*deltaDirection.z(); - G4double finalMomentum = std::sqrt(finalPx*finalPx + finalPy*finalPy + finalPz*finalPz); - finalPx /= finalMomentum; - finalPy /= finalMomentum; - finalPz /= finalMomentum; + if (useDcs && !fasterCode) { + secondaryKinetic = fpModelData->RandomizeEjectedElectronEnergy(info); + } + if ( (useDcs && fasterCode) || fpG4_WATER->GetIndex() == MatID) { + secondaryKinetic = fpModelData->RandomizeEjectedElectronEnergyFromCumulatedDcs(info); + } + if (!useDcs && fpG4_WATER->GetIndex() != MatID) { + secondaryKinetic = fpModelData->RandomizeEjectedElectronEnergyFromanalytical(info); + } - G4ThreeVector direction; - direction.set(finalPx,finalPy,finalPz); + G4double cosTheta = 0.; + G4double phi = 0.; + RandomizeEjectedElectronDirection(particle->GetDefinition(), k, secondaryKinetic, cosTheta, + phi); + + G4double sinTheta = std::sqrt(1. - cosTheta * cosTheta); + G4double dirX = sinTheta * std::cos(phi); + G4double dirY = sinTheta * std::sin(phi); + G4double dirZ = cosTheta; + G4ThreeVector deltaDirection(dirX, dirY, dirZ); + deltaDirection.rotateUz(primaryDirection); + + // SI - For atom. deexc. tagging - 23/05/2017 + if (secondaryKinetic > 0) { + auto dp = new G4DynamicParticle(G4Electron::Electron(), deltaDirection, secondaryKinetic); + fvect->push_back(dp); + } - fParticleChangeForGamma->ProposeMomentumDirection(direction.unit()) ; - } + if (particle->GetDefinition() != fpParticle) { + fParticleChangeForGamma->ProposeMomentumDirection(primaryDirection); + } + else { + G4double deltaTotalMomentum = + std::sqrt(secondaryKinetic * (secondaryKinetic + 2. * electron_mass_c2)); + G4double finalPx = + totalMomentum * primaryDirection.x() - deltaTotalMomentum * deltaDirection.x(); + G4double finalPy = + totalMomentum * primaryDirection.y() - deltaTotalMomentum * deltaDirection.y(); + G4double finalPz = + totalMomentum * primaryDirection.z() - deltaTotalMomentum * deltaDirection.z(); + G4double finalMomentum = std::sqrt(finalPx * finalPx + finalPy * finalPy + finalPz * finalPz); + finalPx /= finalMomentum; + finalPy /= finalMomentum; + finalPz /= finalMomentum; + + G4ThreeVector direction; + direction.set(finalPx, finalPy, finalPz); + + fParticleChangeForGamma->ProposeMomentumDirection(direction.unit()); + } - else fParticleChangeForGamma->ProposeMomentumDirection(primaryDirection) ; - - // SI - For atom. deexc. tagging - 23/05/2017 - - // AM: sample deexcitation - // here we assume that H_{2}O electronic levels are the same of Oxigen. - // this can be considered true with a rough 10% error in energy on K-shell, - - std::size_t secNumberInit = 0;// need to know at a certain point the energy of secondaries - std::size_t secNumberFinal = 0;// So I'll make the diference and then sum the energies - - G4double scatteredEnergy = k-bindingEnergy-secondaryKinetic; - - // SI: only atomic deexcitation from K shell is considered - if(fAtomDeexcitation && ionizationShell == 4) - { - G4int Z = 8; - const G4AtomicShell* shell = - fAtomDeexcitation->GetAtomicShell(Z, G4AtomicShellEnumerator(0)); - secNumberInit = fvect->size(); - fAtomDeexcitation->GenerateParticles(fvect, shell, Z, 0, 0); - secNumberFinal = fvect->size(); - - if(secNumberFinal > secNumberInit) - { - for (std::size_t i=secNumberInit; i= ((*fvect)[i])->GetKineticEnergy()) - { - //Ok, this is a valid secondary: keep it - bindingEnergy -= ((*fvect)[i])->GetKineticEnergy(); - } - else - { - //Invalid secondary: not enough energy to create it! - //Keep its energy in the local deposit - delete (*fvect)[i]; - (*fvect)[i]=0; - } - } + // SI - For atom. deexc. tagging - 23/05/2017 + + // AM: sample deexcitation + // here we assume that H_{2}O electronic levels are the same of Oxigen. + // this can be considered true with a rough 10% error in energy on K-shell, + + G4double scatteredEnergy = k - bindingEnergy - secondaryKinetic; + + // SI: only atomic deexcitation from K shell is considered + // Hoang: only for water + if (fpG4_WATER != nullptr && material == G4Material::GetMaterial("G4_WATER")) { + std::size_t secNumberInit = 0; // need to know at a certain point the energy of secondaries + std::size_t secNumberFinal = 0; // So I'll make the diference and then sum the energies + if (fAtomDeexcitation && shell == 4) { + G4int Z = 8; + auto Kshell = fAtomDeexcitation->GetAtomicShell(Z, G4AtomicShellEnumerator(0)); + secNumberInit = fvect->size(); + fAtomDeexcitation->GenerateParticles(fvect, Kshell, Z, 0, 0); + secNumberFinal = fvect->size(); + if (secNumberFinal > secNumberInit) { + for (std::size_t i = secNumberInit; i < secNumberFinal; ++i) { + // Check if there is enough residual energy + if (bindingEnergy >= ((*fvect)[i])->GetKineticEnergy()) { + // Ok, this is a valid secondary: keep it + bindingEnergy -= ((*fvect)[i])->GetKineticEnergy(); + } + else { + // Invalid secondary: not enough energy to create it! + // Keep its energy in the local deposit + delete (*fvect)[i]; + (*fvect)[i] = nullptr; + } } - - } - - //This should never happen - if(bindingEnergy < 0.0) - G4Exception("G4DNACPA100IonisatioModel1::SampleSecondaries()", - "em2050",FatalException,"Negative local energy deposit"); - - //bindingEnergy has been decreased - //by the amount of energy taken away by deexc. products - - if (!statCode) - { - fParticleChangeForGamma->SetProposedKineticEnergy(scatteredEnergy); - fParticleChangeForGamma->ProposeLocalEnergyDeposit(bindingEnergy); - } - else - { - fParticleChangeForGamma->SetProposedKineticEnergy(k); - fParticleChangeForGamma->ProposeLocalEnergyDeposit(k-scatteredEnergy); } + } + } - // TEST ////////////////////////// - // if (secondaryKinetic<0) abort(); - // if (scatteredEnergy<0) abort(); - // if (k-scatteredEnergy-secondaryKinetic-deexSecEnergy<0) abort(); - // if (k-scatteredEnergy<0) abort(); - ///////////////////////////////// - - const G4Track * theIncomingTrack = fParticleChangeForGamma->GetCurrentTrack(); - G4DNAChemistryManager::Instance()->CreateWaterMolecule(eIonizedMolecule, - ionizationShell, - theIncomingTrack); + // This should never happen + if (bindingEnergy < 0.0) { + G4Exception("G4DNACPA100IonisatioModel1::SampleSecondaries()", "em2050", FatalException, + "Negative local energy deposit"); + } + if (!statCode) { + fParticleChangeForGamma->SetProposedKineticEnergy(scatteredEnergy); + fParticleChangeForGamma->ProposeLocalEnergyDeposit(bindingEnergy); + } + else { + fParticleChangeForGamma->SetProposedKineticEnergy(k); + fParticleChangeForGamma->ProposeLocalEnergyDeposit(k - scatteredEnergy); } + // only water for chemistry + if (fpG4_WATER != nullptr && material == G4Material::GetMaterial("G4_WATER")) { + const G4Track* theIncomingTrack = fParticleChangeForGamma->GetCurrentTrack(); + G4DNAChemistryManager::Instance()->CreateWaterMolecule(eIonizedMolecule, shell, + theIncomingTrack); + } + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4DNACPA100IonisationModel::RandomizeEjectedElectronEnergy(G4ParticleDefinition* particleDefinition, - G4double k, G4int shell) +G4double G4DNACPA100IonisationModel::RandomizeEjectedElectronEnergy(PartKineticInMat info) { - // G4cout << "*** SLOW computation for " << " " << particleDefinition->GetParticleName() << G4endl; - - if (particleDefinition == G4Electron::ElectronDefinition()) - { - G4double maximumEnergyTransfer=0.; - if ((k+waterStructure.IonisationEnergy(shell))/2. > k) maximumEnergyTransfer=k; - else maximumEnergyTransfer = (k+waterStructure.IonisationEnergy(shell))/2.; - - // SI : original method - /* - G4double crossSectionMaximum = 0.; - for(G4double value=waterStructure.IonisationEnergy(shell); value<=maximumEnergyTransfer; value+=0.1*eV) - { - G4double differentialCrossSection = DifferentialCrossSection(particleDefinition, k/eV, value/eV, shell); - if(differentialCrossSection >= crossSectionMaximum) crossSectionMaximum = differentialCrossSection; - } - */ - - // SI : alternative method - - G4double crossSectionMaximum = 0.; - - G4double minEnergy = waterStructure.IonisationEnergy(shell); - G4double maxEnergy = maximumEnergyTransfer; - - // nEnergySteps can be optimized - 100 by default - G4int nEnergySteps = 50; - - // *** METHOD 1 - // FOR SLOW COMPUTATION ONLY - /* - G4double value(minEnergy); - G4double stpEnergy(std::pow(maxEnergy/value, 1./static_cast(nEnergySteps-1))); - G4int step(nEnergySteps); - while (step>0) - { - step--; - G4double differentialCrossSection = DifferentialCrossSection(particleDefinition, k/eV, value/eV, shell); - if(differentialCrossSection >= crossSectionMaximum) crossSectionMaximum = differentialCrossSection; - value*=stpEnergy; - } - */ - - // *** METHOD 2 : Faster method for CPA100 only since DCS is monotonously decreasing - // FOR SLOW COMPUTATION ONLY - - G4double value(minEnergy); - G4double stpEnergy(std::pow(maxEnergy/value, 1./static_cast(nEnergySteps-1))); - G4int step(nEnergySteps); - G4double differentialCrossSection = 0.; - while (step>0) - { - step--; - differentialCrossSection = DifferentialCrossSection(particleDefinition, k/eV, value/eV, shell); - if(differentialCrossSection >0) - { - crossSectionMaximum=differentialCrossSection; - break; - } - value*=stpEnergy; - } - - // - - G4double secondaryElectronKineticEnergy=0.; - do - { - secondaryElectronKineticEnergy = G4UniformRand() * (maximumEnergyTransfer-waterStructure.IonisationEnergy(shell)); - } while(G4UniformRand()*crossSectionMaximum > - DifferentialCrossSection(particleDefinition, k/eV, - (secondaryElectronKineticEnergy+waterStructure.IonisationEnergy(shell))/eV,shell)); - - return secondaryElectronKineticEnergy; - + auto MatID = std::get<0>(info); + auto k = std::get<1>(info); + auto shell = std::get<2>(info); + G4double maximumEnergyTransfer = 0.; + auto IonLevel = iStructure.IonisationEnergy(shell, MatID); + (k + IonLevel) / 2. > k ? maximumEnergyTransfer = k : maximumEnergyTransfer = (k + IonLevel) / 2.; + + G4double crossSectionMaximum = 0.; + + G4double minEnergy = IonLevel; + G4double maxEnergy = maximumEnergyTransfer; + + // nEnergySteps can be optimized - 100 by default + G4int nEnergySteps = 50; + + G4double value(minEnergy); + G4double stpEnergy(std::pow(maxEnergy / value, 1. / static_cast(nEnergySteps - 1))); + G4int step(nEnergySteps); + G4double differentialCrossSection = 0.; + while (step > 0) { + step--; + differentialCrossSection = DifferentialCrossSection(info, value / eV); + + if (differentialCrossSection > 0) { + crossSectionMaximum = differentialCrossSection; + break; } + value *= stpEnergy; + } - return 0; + G4double secondaryElectronKineticEnergy = 0.; + do { + secondaryElectronKineticEnergy = G4UniformRand() * (maximumEnergyTransfer - IonLevel); + } while (G4UniformRand() * crossSectionMaximum + > DifferentialCrossSection(info, (secondaryElectronKineticEnergy + IonLevel) / eV)); + + return secondaryElectronKineticEnergy; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4DNACPA100IonisationModel::RandomizeEjectedElectronDirection(G4ParticleDefinition*, - G4double k, - G4double secKinetic, - G4double & cosTheta, - G4double & phi ) + G4double k, G4double secKinetic, + G4double& cosTheta, + G4double& phi) { - - phi = twopi * G4UniformRand(); - G4double sin2O = (1.-secKinetic/k) / (1.+secKinetic/(2.*electron_mass_c2)); - cosTheta = std::sqrt(1.-sin2O); - + phi = twopi * G4UniformRand(); + G4double sin2O = (1. - secKinetic / k) / (1. + secKinetic / (2. * electron_mass_c2)); + cosTheta = std::sqrt(1. - sin2O); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4DNACPA100IonisationModel::DifferentialCrossSection(G4ParticleDefinition * particleDefinition, - G4double k, - G4double energyTransfer, - G4int ionizationLevelIndex) +G4double G4DNACPA100IonisationModel::DifferentialCrossSection(PartKineticInMat info, + const G4double& energyTransfer) { - G4double sigma = 0.; - - if (energyTransfer >= waterStructure.IonisationEnergy(ionizationLevelIndex)/eV) + auto MatID = std::get<0>(info); + auto k = std::get<1>(info) / eV; // in eV unit + auto shell = std::get<2>(info); + G4double sigma = 0.; + G4double shellEnergy = iStructure.IonisationEnergy(shell, MatID); + G4double kSE(energyTransfer - shellEnergy); + + if (energyTransfer >= shellEnergy) { + G4double valueT1 = 0; + G4double valueT2 = 0; + G4double valueE21 = 0; + G4double valueE22 = 0; + G4double valueE12 = 0; + G4double valueE11 = 0; + + G4double xs11 = 0; + G4double xs12 = 0; + G4double xs21 = 0; + G4double xs22 = 0; + + auto t2 = std::upper_bound(fTMapWithVec[MatID][fpParticle].begin(), + fTMapWithVec[MatID][fpParticle].end(), k); + auto t1 = t2 - 1; + + if (kSE <= fEMapWithVector[MatID][fpParticle][(*t1)].back() + && kSE <= fEMapWithVector[MatID][fpParticle][(*t2)].back()) { - G4double valueT1 = 0; - G4double valueT2 = 0; - G4double valueE21 = 0; - G4double valueE22 = 0; - G4double valueE12 = 0; - G4double valueE11 = 0; - - G4double xs11 = 0; - G4double xs12 = 0; - G4double xs21 = 0; - G4double xs22 = 0; - - if (particleDefinition == G4Electron::ElectronDefinition()) - { - // Protection against out of boundary access - if (k==eTdummyVec.back()) k=k*(1.-1e-12); - // - - // k should be in eV and energy transfer eV also - - std::vector::iterator t2 = std::upper_bound(eTdummyVec.begin(),eTdummyVec.end(), k); - - std::vector::iterator t1 = t2-1; - - // SI : the following condition avoids situations where energyTransfer >last vector element - - if (energyTransfer <= eVecm[(*t1)].back() && energyTransfer <= eVecm[(*t2)].back() ) - { - std::vector::iterator e12 = std::upper_bound(eVecm[(*t1)].begin(),eVecm[(*t1)].end(), energyTransfer); - std::vector::iterator e11 = e12-1; - - std::vector::iterator e22 = std::upper_bound(eVecm[(*t2)].begin(),eVecm[(*t2)].end(), energyTransfer); - std::vector::iterator e21 = e22-1; - - valueT1 =*t1; - valueT2 =*t2; - valueE21 =*e21; - valueE22 =*e22; - valueE12 =*e12; - valueE11 =*e11; - - xs11 = eDiffCrossSectionData[ionizationLevelIndex][valueT1][valueE11]; - xs12 = eDiffCrossSectionData[ionizationLevelIndex][valueT1][valueE12]; - xs21 = eDiffCrossSectionData[ionizationLevelIndex][valueT2][valueE21]; - xs22 = eDiffCrossSectionData[ionizationLevelIndex][valueT2][valueE22]; - - } + auto e12 = std::upper_bound(fEMapWithVector[MatID][fpParticle][(*t1)].begin(), + fEMapWithVector[MatID][fpParticle][(*t1)].end(), kSE); + auto e11 = e12 - 1; + + auto e22 = std::upper_bound(fEMapWithVector[MatID][fpParticle][(*t2)].begin(), + fEMapWithVector[MatID][fpParticle][(*t2)].end(), kSE); + auto e21 = e22 - 1; + + valueT1 = *t1; + valueT2 = *t2; + valueE21 = *e21; + valueE22 = *e22; + valueE12 = *e12; + valueE11 = *e11; + + xs11 = diffCrossSectionData[MatID][fpParticle][shell][valueT1][valueE11]; + xs12 = diffCrossSectionData[MatID][fpParticle][shell][valueT1][valueE12]; + xs21 = diffCrossSectionData[MatID][fpParticle][shell][valueT2][valueE21]; + xs22 = diffCrossSectionData[MatID][fpParticle][shell][valueT2][valueE22]; + } - } - - G4double xsProduct = xs11 * xs12 * xs21 * xs22; - if (xsProduct != 0.) - { - sigma = QuadInterpolator( valueE11, valueE12, - valueE21, valueE22, - xs11, xs12, - xs21, xs22, - valueT1, valueT2, - k, energyTransfer); - } + G4double xsProduct = xs11 * xs12 * xs21 * xs22; + if (xsProduct != 0.) { + sigma = QuadInterpolator(valueE11, valueE12, valueE21, valueE22, xs11, xs12, xs21, xs22, + valueT1, valueT2, k, kSE); } - return sigma; + } + + return sigma; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4DNACPA100IonisationModel::Interpolate( G4double e1, - G4double e2, - G4double e, - G4double xs1, - G4double xs2) +G4double G4DNACPA100IonisationModel::Interpolate(G4double e1, G4double e2, G4double e, G4double xs1, + G4double xs2) { + G4double value = 0.; - G4double value = 0.; - - // Log-log interpolation by default - - if (e1!=0 && e2!=0 && (std::log10(e2)-std::log10(e1)) !=0 && !fasterCode && useDcs) - { - G4double a = (std::log10(xs2)-std::log10(xs1)) / (std::log10(e2)-std::log10(e1)); - G4double b = std::log10(xs2) - a*std::log10(e2); - G4double sigma = a*std::log10(e) + b; - value = (std::pow(10.,sigma)); - } + // Log-log interpolation by default - // Switch to lin-lin interpolation - /* - if ((e2-e1)!=0) - { - G4double d1 = xs1; - G4double d2 = xs2; - value = (d1 + (d2 - d1)*(e - e1)/ (e2 - e1)); - } - */ - - // Switch to log-lin interpolation for faster code + if (e1 != 0 && e2 != 0 && (std::log10(e2) - std::log10(e1)) != 0 && !fasterCode) { + G4double a = (std::log10(xs2) - std::log10(xs1)) / (std::log10(e2) - std::log10(e1)); + G4double b = std::log10(xs2) - a * std::log10(e2); + G4double sigma = a * std::log10(e) + b; + value = (std::pow(10., sigma)); + } - if ((e2-e1)!=0 && xs1 !=0 && xs2 !=0 && fasterCode && useDcs ) - { - G4double d1 = std::log10(xs1); - G4double d2 = std::log10(xs2); - value = std::pow(10.,(d1 + (d2 - d1)*(e - e1)/ (e2 - e1)) ); - } + // Switch to lin-lin interpolation + /* + if ((e2-e1)!=0) + { + G4double d1 = xs1; + G4double d2 = xs2; + value = (d1 + (d2 - d1)*(e - e1)/ (e2 - e1)); + } + */ - // Switch to lin-lin interpolation for faster code - // in case one of xs1 or xs2 (=cum proba) value is zero + // Switch to log-lin interpolation for faster code - if ((e2-e1)!=0 && (xs1 ==0 || xs2 ==0) && fasterCode && useDcs ) - { - G4double d1 = xs1; - G4double d2 = xs2; - value = (d1 + (d2 - d1)*(e - e1)/ (e2 - e1)); - } + if ((e2 - e1) != 0 && xs1 != 0 && xs2 != 0 && fasterCode) { + G4double d1 = std::log10(xs1); + G4double d2 = std::log10(xs2); + value = std::pow(10., (d1 + (d2 - d1) * (e - e1) / (e2 - e1))); + } - /* - G4cout - << e1 << " " - << e2 << " " - << e << " " - << xs1 << " " - << xs2 << " " - << value - << G4endl; - */ + // Switch to lin-lin interpolation for faster code + // in case one of xs1 or xs2 (=cum proba) value is zero - return value; + if ((e2 - e1) != 0 && (xs1 == 0 || xs2 == 0) && fasterCode) { + G4double d1 = xs1; + G4double d2 = xs2; + value = (d1 + (d2 - d1) * (e - e1) / (e2 - e1)); + } + return value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4DNACPA100IonisationModel::QuadInterpolator(G4double e11, G4double e12, - G4double e21, G4double e22, - G4double xs11, G4double xs12, - G4double xs21, G4double xs22, - G4double t1, G4double t2, - G4double t, G4double e) +G4double G4DNACPA100IonisationModel::QuadInterpolator(G4double e11, G4double e12, G4double e21, + G4double e22, G4double xs11, G4double xs12, + G4double xs21, G4double xs22, G4double t1, + G4double t2, G4double t, G4double e) { - G4double interpolatedvalue1 = Interpolate(e11, e12, e, xs11, xs12); - G4double interpolatedvalue2 = Interpolate(e21, e22, e, xs21, xs22); - G4double value = Interpolate(t1, t2, t, interpolatedvalue1, interpolatedvalue2); + G4double interpolatedvalue1 = Interpolate(e11, e12, e, xs11, xs12); + G4double interpolatedvalue2 = Interpolate(e21, e22, e, xs21, xs22); + G4double value = Interpolate(t1, t2, t, interpolatedvalue1, interpolatedvalue2); - return value; + return value; } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4int G4DNACPA100IonisationModel::RandomSelect(G4double k, const G4String& particle ) +G4double +G4DNACPA100IonisationModel::RandomizeEjectedElectronEnergyFromCumulatedDcs(PartKineticInMat info) { - G4int level = 0; - - std::map< G4String,G4DNACrossSectionDataSet*,std::less >::iterator pos; - pos = tableData.find(particle); - - if (pos != tableData.end()) - { - G4DNACrossSectionDataSet* table = pos->second; - - if (table != 0) - { - G4double* valuesBuffer = new G4double[table->NumberOfComponents()]; - const G4int n = (G4int)table->NumberOfComponents(); - G4int i(n); - G4double value = 0.; - - //Verification - /* - G4double tmp=200*keV; - G4cout << table->GetComponent(0)->FindValue(tmp)/(1e-20*m*m) << G4endl; - G4cout << table->GetComponent(1)->FindValue(tmp)/(1e-20*m*m) << G4endl; - G4cout << table->GetComponent(2)->FindValue(tmp)/(1e-20*m*m) << G4endl; - G4cout << table->GetComponent(3)->FindValue(tmp)/(1e-20*m*m) << G4endl; - G4cout << table->GetComponent(4)->FindValue(tmp)/(1e-20*m*m) << G4endl; - G4cout << - table->GetComponent(0)->FindValue(tmp)/(1e-20*m*m) + - table->GetComponent(1)->FindValue(tmp)/(1e-20*m*m) + - table->GetComponent(2)->FindValue(tmp)/(1e-20*m*m) + - table->GetComponent(3)->FindValue(tmp)/(1e-20*m*m) - << G4endl; - abort(); - */ - // - //Dump - // - /* - G4double minEnergy = 10.985 * eV; - G4double maxEnergy = 255955. * eV; - G4int nEnergySteps = 1000; - G4double energy(minEnergy); - G4double stpEnergy(std::pow(maxEnergy/energy, 1./static_cast(nEnergySteps-1))); - G4int step(nEnergySteps); - system ("rm -rf ionisation-cpa100.out"); - FILE* myFile=fopen("ionisation-cpa100.out","a"); - while (step>0) - { - step--; - fprintf (myFile,"%16.9le %16.9le %16.9le %16.9le %16.9le %16.9le %16.9le \n", - energy/eV, - table->GetComponent(0)->FindValue(energy)/(1e-20*m*m), - table->GetComponent(1)->FindValue(energy)/(1e-20*m*m), - table->GetComponent(2)->FindValue(energy)/(1e-20*m*m), - table->GetComponent(3)->FindValue(energy)/(1e-20*m*m), - table->GetComponent(4)->FindValue(energy)/(1e-20*m*m), - table->GetComponent(0)->FindValue(energy)/(1e-20*m*m)+ - table->GetComponent(1)->FindValue(energy)/(1e-20*m*m)+ - table->GetComponent(2)->FindValue(energy)/(1e-20*m*m)+ - table->GetComponent(3)->FindValue(energy)/(1e-20*m*m)+ - table->GetComponent(4)->FindValue(energy)/(1e-20*m*m) - ); - energy*=stpEnergy; - } - fclose (myFile); - abort(); - */ - // - // end of dump - // - // Test of diff XS - // G4double nrj1 = .26827E+04; // in eV - // G4double nrj2 = .57991E+03; // in eV - // Shells run from 0 to 4 - // G4cout << DifferentialCrossSection(G4Electron::ElectronDefinition(), nrj1, nrj2, 0)/(1e-20*m*m) << G4endl; - // G4cout << DifferentialCrossSection(G4Electron::ElectronDefinition(), nrj1, nrj2, 1)/(1e-20*m*m) << G4endl; - // G4cout << DifferentialCrossSection(G4Electron::ElectronDefinition(), nrj1, nrj2, 2)/(1e-20*m*m) << G4endl; - // G4cout << DifferentialCrossSection(G4Electron::ElectronDefinition(), nrj1, nrj2, 3)/(1e-20*m*m) << G4endl; - // G4cout << DifferentialCrossSection(G4Electron::ElectronDefinition(), nrj1, nrj2, 4)/(1e-20*m*m) << G4endl; - // abort(); - // - - while (i>0) - { - i--; - valuesBuffer[i] = table->GetComponent(i)->FindValue(k); - value += valuesBuffer[i]; - } - - value *= G4UniformRand(); - - i = n; - - while (i > 0) - { - i--; - if (valuesBuffer[i] > value) - { - delete[] valuesBuffer; + auto MatID = std::get<0>(info); + auto shell = std::get<2>(info); + G4double secondaryElectronKineticEnergy = + RandomTransferedEnergy(info) * eV - iStructure.IonisationEnergy(shell, MatID); + if (secondaryElectronKineticEnergy < 0.) { + return 0.; + } + return secondaryElectronKineticEnergy; +} - return i; - } - value -= valuesBuffer[i]; - } +G4double G4DNACPA100IonisationModel::RandomTransferedEnergy(PartKineticInMat info) +{ + auto materialID = std::get<0>(info); + auto k = std::get<1>(info) / eV; // data table in eV + auto shell = std::get<2>(info); + G4double ejectedElectronEnergy = 0.; + G4double valueK1 = 0; + G4double valueK2 = 0; + G4double valueCumulCS21 = 0; + G4double valueCumulCS22 = 0; + G4double valueCumulCS12 = 0; + G4double valueCumulCS11 = 0; + G4double secElecE11 = 0; + G4double secElecE12 = 0; + G4double secElecE21 = 0; + G4double secElecE22 = 0; + + if (k == fTMapWithVec[materialID][fpParticle].back()) { + k = k * (1. - 1e-12); + } - if (valuesBuffer) delete[] valuesBuffer; + G4double random = G4UniformRand(); + auto k2 = std::upper_bound(fTMapWithVec[materialID][fpParticle].begin(), + fTMapWithVec[materialID][fpParticle].end(), k); + auto k1 = k2 - 1; - } - } - else - { - G4Exception("G4DNACPA100IonisationModel::RandomSelect","em0002", - FatalException,"Model not applicable to particle type."); + if (random <= fProbaShellMap[materialID][fpParticle][shell][(*k1)].back() + && random <= fProbaShellMap[materialID][fpParticle][shell][(*k2)].back()) + { + auto cumulCS12 = + std::upper_bound(fProbaShellMap[materialID][fpParticle][shell][(*k1)].begin(), + fProbaShellMap[materialID][fpParticle][shell][(*k1)].end(), random); + auto cumulCS11 = cumulCS12 - 1; + // Second one. + auto cumulCS22 = + std::upper_bound(fProbaShellMap[materialID][fpParticle][shell][(*k2)].begin(), + fProbaShellMap[materialID][fpParticle][shell][(*k2)].end(), random); + auto cumulCS21 = cumulCS22 - 1; + + valueK1 = *k1; + valueK2 = *k2; + valueCumulCS11 = *cumulCS11; + valueCumulCS12 = *cumulCS12; + valueCumulCS21 = *cumulCS21; + valueCumulCS22 = *cumulCS22; + + secElecE11 = fEnergySecondaryData[materialID][fpParticle][shell][valueK1][valueCumulCS11]; + secElecE12 = fEnergySecondaryData[materialID][fpParticle][shell][valueK1][valueCumulCS12]; + secElecE21 = fEnergySecondaryData[materialID][fpParticle][shell][valueK2][valueCumulCS21]; + secElecE22 = fEnergySecondaryData[materialID][fpParticle][shell][valueK2][valueCumulCS22]; + + if (valueCumulCS11 == 0. && valueCumulCS12 == 1.) { + auto interpolatedvalue2 = + Interpolate(valueCumulCS21, valueCumulCS22, random, secElecE21, secElecE22); + G4double valueNrjTransf = Interpolate(valueK1, valueK2, k, 0., interpolatedvalue2); + return valueNrjTransf; } + } - return level; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4double G4DNACPA100IonisationModel::RandomizeEjectedElectronEnergyFromCumulatedDcs -(G4ParticleDefinition* particleDefinition, G4double k, G4int shell) -{ - //G4cout << "*** FAST computation for " << " " << particleDefinition->GetParticleName() << G4endl; + if (random > fProbaShellMap[materialID][fpParticle][shell][(*k1)].back()) { + auto cumulCS22 = + std::upper_bound(fProbaShellMap[materialID][fpParticle][shell][(*k2)].begin(), + fProbaShellMap[materialID][fpParticle][shell][(*k2)].end(), random); + auto cumulCS21 = cumulCS22 - 1; + valueK1 = *k1; + valueK2 = *k2; + valueCumulCS21 = *cumulCS21; + valueCumulCS22 = *cumulCS22; - G4double secondaryElectronKineticEnergy = 0.; + secElecE21 = fEnergySecondaryData[materialID][fpParticle][shell][valueK2][valueCumulCS21]; + secElecE22 = fEnergySecondaryData[materialID][fpParticle][shell][valueK2][valueCumulCS22]; - secondaryElectronKineticEnergy= - RandomTransferedEnergy(particleDefinition, k/eV, shell)*eV-waterStructure.IonisationEnergy(shell); + G4double interpolatedvalue2 = + Interpolate(valueCumulCS21, valueCumulCS22, random, secElecE21, secElecE22); - //G4cout << RandomTransferedEnergy(particleDefinition, k/eV, shell) << G4endl; - if (secondaryElectronKineticEnergy<0.) return 0.; - // + G4double value = Interpolate(valueK1, valueK2, k, 0., interpolatedvalue2); + return value; + } + G4double nrjTransfProduct = secElecE11 * secElecE12 * secElecE21 * secElecE22; - return secondaryElectronKineticEnergy; + if (nrjTransfProduct != 0.) { + ejectedElectronEnergy = + QuadInterpolator(valueCumulCS11, valueCumulCS12, valueCumulCS21, valueCumulCS22, secElecE11, + secElecE12, secElecE21, secElecE22, valueK1, valueK2, k, random); + } + return ejectedElectronEnergy; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4DNACPA100IonisationModel::RandomTransferedEnergy -(G4ParticleDefinition* particleDefinition,G4double k, G4int ionizationLevelIndex) +G4double +G4DNACPA100IonisationModel::RandomizeEjectedElectronEnergyFromanalytical(PartKineticInMat info) { + auto MatID = std::get<0>(info); + auto tt = std::get<1>(info); + auto shell = std::get<2>(info); + // ***** METHOD by M. C. Bordage ***** (optimized) + // Composition sampling method based on eq 7 in (Guerra et al. 2015) the RBEBV - G4double random = G4UniformRand(); - - G4double nrj = 0.; - - G4double valueK1 = 0; - G4double valueK2 = 0; - G4double valuePROB21 = 0; - G4double valuePROB22 = 0; - G4double valuePROB12 = 0; - G4double valuePROB11 = 0; - - G4double nrjTransf11 = 0; - G4double nrjTransf12 = 0; - G4double nrjTransf21 = 0; - G4double nrjTransf22 = 0; - - if (particleDefinition == G4Electron::ElectronDefinition()) - { - - // Protection against out of boundary access - if (k==eTdummyVec.back()) k=k*(1.-1e-12); - // - - // k should be in eV - - std::vector::iterator k2 = std::upper_bound(eTdummyVec.begin(),eTdummyVec.end(), k); + //// Defining constants + G4double alfa = 1. / 137; // fine structure constant + G4double e_charge = 1.6e-19; // electron charge + G4double e_mass = 9.1e-31; // electron mass in kg + G4double c = 3e8; // speed of light in vacuum constant c (m/s) + G4double mc2 = e_mass * c * c / e_charge; // - std::vector::iterator k1 = k2-1; + G4double BB = iStructure.IonisationEnergy(shell, MatID); // binding energy of the shell (eV) - /* - G4cout << "----> k=" << k - << " " << *k1 - << " " << *k2 - << " " << random - << " " << ionizationLevelIndex - << " " << eProbaShellMap[ionizationLevelIndex][(*k1)].back() - << " " << eProbaShellMap[ionizationLevelIndex][(*k2)].back() - << G4endl; - */ + if (tt <= BB) return 0.; - // SI : the following condition avoids situations where random >last vector element + G4double b_prime = BB / mc2; // binding energy divided by mc2 + G4double beta_b2 = 1. - 1. / ((1 + b_prime) * (1 + b_prime)); // binding energy Beta - if ( random <= eProbaShellMap[ionizationLevelIndex][(*k1)].back() - && random <= eProbaShellMap[ionizationLevelIndex][(*k2)].back() ) + //// Indicent energy + //// tt is the incident electron energy - { + G4double t_prime = tt / mc2; // incident energy divided by mc2 + G4double t = tt / BB; // reduced incident energy by binding energy - std::vector::iterator prob12 = - std::upper_bound(eProbaShellMap[ionizationLevelIndex][(*k1)].begin(), - eProbaShellMap[ionizationLevelIndex][(*k1)].end(), random); + G4double D = (1 + 2 * t_prime) / ((1 + t_prime / 2) * (1 + t_prime / 2)); + G4double F = b_prime * b_prime / ((1 + t_prime / 2) * (1 + t_prime / 2)); - std::vector::iterator prob11 = prob12-1; + G4double beta_t2 = 1 - 1 / ((1 + t_prime) * (1 + t_prime)); // incident energy Beta + G4double PHI_R = std::cos(std::sqrt(alfa * alfa / (beta_t2 + beta_b2)) + * std::log(beta_t2 / beta_b2)); // relativistic Vriens function phi + G4double G_R = std::log(beta_t2 / (1 - beta_t2)) - beta_t2 - std::log(2 * b_prime); - std::vector::iterator prob22 = - std::upper_bound(eProbaShellMap[ionizationLevelIndex][(*k2)].begin(), - eProbaShellMap[ionizationLevelIndex][(*k2)].end(), random); + G4double tplus1 = t + 1; + G4double tminus1 = t - 1; + G4double tplus12 = tplus1 * tplus1; + G4double ZH1max = 1 + F - (PHI_R * D * (2 * t + 1) / (2 * t * tplus1)); + G4double ZH2max = 1 - PHI_R * D / 4; - std::vector::iterator prob21 = prob22-1; + G4double A1_p = ZH1max * tminus1 / tplus1; // A1' + G4double A2_p = ZH2max * tminus1 / (t * tplus1); // A2' + G4double A3_p = ((tplus12 - 4) / tplus12) * G_R; // A3' - valueK1 =*k1; - valueK2 =*k2; - valuePROB21 =*prob21; - valuePROB22 =*prob22; - valuePROB12 =*prob12; - valuePROB11 =*prob11; + G4double AAA = A1_p + A2_p + A3_p; + G4double AA1_R = A1_p / AAA; + G4double AA2_R = (A1_p + A2_p) / AAA; - /* - G4cout << " " << random << " " << valuePROB11 << " " - << valuePROB12 << " " << valuePROB21 << " " << valuePROB22 << G4endl; - */ + G4int FF = 0; + G4double fx = 0; + G4double gx = 0; + G4double gg = 0; + G4double wx = 0; - nrjTransf11 = eNrjTransfData[ionizationLevelIndex][valueK1][valuePROB11]; - nrjTransf12 = eNrjTransfData[ionizationLevelIndex][valueK1][valuePROB12]; - nrjTransf21 = eNrjTransfData[ionizationLevelIndex][valueK2][valuePROB21]; - nrjTransf22 = eNrjTransfData[ionizationLevelIndex][valueK2][valuePROB22]; + G4double r1 = 0; + G4double r2 = 0; + G4double r3 = 0; - /* - G4cout << " " << ionizationLevelIndex << " " - << random << " " < AA2_R) + FF = 3; + else if ((r1 > AA1_R) && (r1 < AA2_R)) + FF = 2; + else + FF = 1; + + switch (FF) { + case 1: { + fx = r2 * tminus1 / tplus1; + wx = 1 / (1 - fx) - 1; + gg = PHI_R * D * (wx + 1) / tplus1; + gx = 1 - gg; + gx = gx - gg * (wx + 1) / (2 * (t - wx)); + gx = gx + F * (wx + 1) * (wx + 1); + gx = gx / ZH1max; + break; } - // Avoids cases where cum xs is zero for k1 and is not for k2 (with always k1 eProbaShellMap[ionizationLevelIndex][(*k1)].back() ) - { - - std::vector::iterator prob22 = - - std::upper_bound(eProbaShellMap[ionizationLevelIndex][(*k2)].begin(), - eProbaShellMap[ionizationLevelIndex][(*k2)].end(), random); - - std::vector::iterator prob21 = prob22-1; - - valueK1 =*k1; - valueK2 =*k2; - valuePROB21 =*prob21; - valuePROB22 =*prob22; - - //G4cout << " " << random << " " << valuePROB21 << " " << valuePROB22 << G4endl; - - nrjTransf21 = eNrjTransfData[ionizationLevelIndex][valueK2][valuePROB21]; - nrjTransf22 = eNrjTransfData[ionizationLevelIndex][valueK2][valuePROB22]; - - G4double interpolatedvalue2 = Interpolate(valuePROB21, valuePROB22, random, nrjTransf21, nrjTransf22); - - // zero is explicitly set - - G4double value = Interpolate(valueK1, valueK2, k, 0., interpolatedvalue2); - - /* - G4cout << " " << ionizationLevelIndex << " " - << random << " " <GetParticleName() << G4endl; - - // ***** METHOD 1 ***** (sequential) - /* - - // ww is KINETIC ENERGY OF SECONDARY ELECTRON - G4double un=1.; - G4double deux=2.; - - G4double bb = waterStructure.IonisationEnergy(shell); - G4double uu = waterStructure.UEnergy(shell); - - if (tt<=bb) return 0.; - - G4double t = tt/bb; - G4double u = uu/bb; - G4double tp1 = t + un; - G4double tu1 = t + u + un; - G4double tm1 = t - un; - G4double tp12 = tp1 * tp1; - G4double dlt = std::log(t); - - G4double a1 = t * tm1 / tu1 / tp12; - G4double a2 = tm1 / tu1 / t / tp1 / deux; - G4double a3 = dlt * (tp12 - deux * deux ) / tu1 / tp12; - G4double ato = a1 + a2 + a3; - - // 15 - - G4double r1 =G4UniformRand(); - G4double r2 =G4UniformRand(); - G4double r3 =G4UniformRand(); - - while (r1<=a1/ato) - { - G4double fx1=r2*tm1/tp1; - G4double wx1=un/(un-fx1)-un; - G4double gx1=(t-wx1)/t; - if(r3 <= gx1) return wx1*bb; - - r1 =G4UniformRand(); - r2 =G4UniformRand(); - r3 =G4UniformRand(); - - } - - // 20 - - while (r1<=(a1+a2)/ato) - { - G4double fx2=tp1+r2*tm1; - G4double wx2=t-t*tp1/fx2; - G4double gx2=deux*(un-(t-wx2)/tp1); - if(r3 <= gx2) return wx2*bb; - - // REPEAT 15 - r1 =G4UniformRand(); - r2 =G4UniformRand(); - r3 =G4UniformRand(); - - while (r1<=a1/ato) - { - G4double fx1=r2*tm1/tp1; - G4double wx1=un/(un-fx1)-un; - G4double gx1=(t-wx1)/t; - if(r3 <= gx1) return wx1*bb; - r1 =G4UniformRand(); - r2 =G4UniformRand(); - r3 =G4UniformRand(); - } - // END 15 - - } - - // 30 - - G4double wx3=std::sqrt(un/(un-r2*(tp12-deux*deux)/tp12))-un; - G4double gg3=(wx3+un)/(t-wx3); - G4double gx3=(un+gg3*gg3*gg3)/deux; - - while (r3>gx3) - { - - // 15 - - r1 =G4UniformRand(); - r2 =G4UniformRand(); - r3 =G4UniformRand(); - - while (r1<=a1/ato) - { - G4double fx1=r2*tm1/tp1; - G4double wx1=un/(un-fx1)-un; - G4double gx1=(t-wx1)/t; - if(r3 <= gx1) return wx1*bb; - - r1 =G4UniformRand(); - r2 =G4UniformRand(); - r3 =G4UniformRand(); - + const char* path = G4FindDataDir("G4LEDATA"); + if (!path) { + G4Exception("G4DNACPA100IonisationModel::ReadAllDiffCSFiles", "em0006", FatalException, + "G4LEDATA environment variable was not set."); + return; } - // 20 - - while (r1<=(a1+a2)/ato) - { - G4double fx2=tp1+r2*tm1; - G4double wx2=t-t*tp1/fx2; - G4double gx2=deux*(un-(t-wx2)/tp1); - if(r3 <= gx2)return wx2*bb; - - // REPEAT 15 - r1 =G4UniformRand(); - r2 =G4UniformRand(); - r3 =G4UniformRand(); - - while (r1<=a1/ato) - { - G4double fx1=r2*tm1/tp1; - G4double wx1=un/(un-fx1)-un; - G4double gx1=(t-wx1)/t; - if(r3 <= gx1) return wx1*bb; - - r1 =G4UniformRand(); - r2 =G4UniformRand(); - r3 =G4UniformRand(); - } - // - - } - - wx3=std::sqrt(un/(un-r2*(tp12-deux*deux)/tp12))-un; - gg3=(wx3+un)/(t-wx3); - gx3=(un+gg3*gg3*gg3)/deux; + std::ostringstream fullFileName; + fullFileName << path << "/" << file << ".dat"; + std::ifstream diffCrossSection(fullFileName.str().c_str()); + std::stringstream endPath; + if (!diffCrossSection) { + endPath << "Missing data file: " << file; + G4Exception("G4DNACPA100IonisationModel::Initialise", "em0003", FatalException, + endPath.str().c_str()); } - // - - return wx3*bb; - */ - - // ***** METHOD by M. C. Bordage ***** (optimized) + // load data from the file + fTMapWithVec[materialID][p].push_back(0.); - G4double un=1.; - G4double deux=2.; + G4String line; - G4double bb = waterStructure.IonisationEnergy(shell); - G4double uu = waterStructure.UEnergy(shell); + while (!diffCrossSection.eof()) { + G4double T, E; + diffCrossSection >> T >> E; - if (tt<=bb) return 0.; - - G4double t = tt/bb; - G4double u = uu/bb; - G4double tp1 = t + un; - G4double tu1 = t + u + un; - G4double tm1 = t - un; - G4double tp12 = tp1 * tp1; - G4double dlt = std::log(t); - - G4double a1 = t * tm1 / tu1 / tp12; - G4double a2 = tm1 / tu1 / t / tp1 / deux; - G4double a3 = dlt * (tp12 - deux * deux ) / tu1 / tp12; - G4double ato = a1 + a2 + a3; - - G4double A1 = a1/ato; - G4double A2 = (a1+a2)/ato; - G4int F = 0; - G4double fx=0; - G4double gx=0; - G4double gg=0; - G4double wx=0; - - G4double r1=0; - G4double r2=0; - G4double r3=0; - - // - - do - { - r1 =G4UniformRand(); - r2 =G4UniformRand(); - r3 =G4UniformRand(); - - if (r1>A2) - F=3; - else if ((r1>A1) && (r1< A2)) - F=2; - else - F=1; - - switch (F) - { - case 1: - { - fx=r2*tm1/tp1; - wx=un/(un-fx)-un; - gx=(t-wx)/t; - break; - } - - case 2: - { - fx=tp1+r2*tm1; - wx=t-t*tp1/fx; - gx=deux*(un-(t-wx)/tp1); - break; - } - - case 3: - { - fx=un-r2*(tp12-deux*deux)/tp12; - wx=sqrt(un/fx)-un; - gg=(wx+un)/(t-wx); - gx=(un+gg*gg*gg)/deux; - break; - } - } // switch + if (T != fTMapWithVec[materialID][p].back()) { + fTMapWithVec[materialID][p].push_back(T); + } - } while (r3>gx); + // T is incident energy, E is the energy transferred + if (T != fTMapWithVec[materialID][p].back()) { + fTMapWithVec[materialID][p].push_back(T); + } - return wx*bb; + auto eshell = (G4int)iStructure.NumberOfLevels(materialID); + for (G4int shell = 0; shell < eshell; ++shell) { + diffCrossSection >> diffCrossSectionData[materialID][p][shell][T][E]; + if (fasterCode) { + fEnergySecondaryData[materialID][p][shell][T] + [diffCrossSectionData[materialID][p][shell][T][E]] = E; -} + fProbaShellMap[materialID][p][shell][T].push_back( + diffCrossSectionData[materialID][p][shell][T][E]); + } + else { + diffCrossSectionData[materialID][p][shell][T][E] *= scaleFactor; + fEMapWithVector[materialID][p][T].push_back(E); + } + } + } +} \ No newline at end of file diff --git a/source/processes/electromagnetic/dna/models/src/G4DNADingfelderChargeIncreaseModel.cc b/source/processes/electromagnetic/dna/models/src/G4DNADingfelderChargeIncreaseModel.cc index 86e03a7c78a..99d7db79ac9 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNADingfelderChargeIncreaseModel.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNADingfelderChargeIncreaseModel.cc @@ -43,39 +43,16 @@ using namespace std; G4DNADingfelderChargeIncreaseModel::G4DNADingfelderChargeIncreaseModel(const G4ParticleDefinition*, const G4String& nam) : -G4VEmModel(nam), isInitialised(false) +G4VEmModel(nam) { - fpMolWaterDensity = 0; - - numberOfPartialCrossSections[0] = 0; - numberOfPartialCrossSections[1] = 0; - - verboseLevel = 0; - // Verbosity scale: - // 0 = nothing - // 1 = warning for energy non-conservation - // 2 = details of energy budget - // 3 = calculation of cross sections, file openings, sampling of atoms - // 4 = entering in methods - if (verboseLevel > 0) { G4cout << "Dingfelder charge increase model is constructed " << G4endl; } - fParticleChangeForGamma = 0; - - // Selection of stationary mode - - statCode = false; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4DNADingfelderChargeIncreaseModel::~G4DNADingfelderChargeIncreaseModel() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - void G4DNADingfelderChargeIncreaseModel::Initialise(const G4ParticleDefinition* particle, const G4DataVector& /*cuts*/) { @@ -340,7 +317,7 @@ void G4DNADingfelderChargeIncreaseModel::SampleSecondaries(std::vector< FatalException,"Final kinetic energy is negative."); } - G4DynamicParticle* dp = new G4DynamicParticle(OutgoingParticleDefinition(definition,finalStateIndex), + auto dp = new G4DynamicParticle(OutgoingParticleDefinition(definition,finalStateIndex), aDynamicParticle->GetMomentumDirection(), outK); @@ -432,8 +409,8 @@ G4double G4DNADingfelderChargeIncreaseModel::IncomingParticleBindingEnergyConsta //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4DNADingfelderChargeIncreaseModel::PartialCrossSection(G4double k, - G4int index, +G4double G4DNADingfelderChargeIncreaseModel::PartialCrossSection(const G4double& k, + const G4int& index, const G4ParticleDefinition* particleDefinition) { G4int particleTypeIndex = 0; @@ -507,7 +484,7 @@ G4double G4DNADingfelderChargeIncreaseModel::PartialCrossSection(G4double k, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4int G4DNADingfelderChargeIncreaseModel::RandomSelect(G4double k, +G4int G4DNADingfelderChargeIncreaseModel::RandomSelect(const G4double& k, const G4ParticleDefinition* particleDefinition) { G4int particleTypeIndex = 0; @@ -522,7 +499,7 @@ G4int G4DNADingfelderChargeIncreaseModel::RandomSelect(G4double k, particleTypeIndex = 1; const G4int n = numberOfPartialCrossSections[particleTypeIndex]; - G4double* values(new G4double[n]); + auto values(new G4double[n]); G4double value = 0; G4int i = n; @@ -553,7 +530,7 @@ G4int G4DNADingfelderChargeIncreaseModel::RandomSelect(G4double k, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4DNADingfelderChargeIncreaseModel::Sum(G4double k, +G4double G4DNADingfelderChargeIncreaseModel::Sum(const G4double& k, const G4ParticleDefinition* particleDefinition) { G4int particleTypeIndex = 0; diff --git a/source/processes/electromagnetic/dna/models/src/G4DNADummyModel.cc b/source/processes/electromagnetic/dna/models/src/G4DNADummyModel.cc deleted file mode 100644 index d90ae11edaa..00000000000 --- a/source/processes/electromagnetic/dna/models/src/G4DNADummyModel.cc +++ /dev/null @@ -1,79 +0,0 @@ -// -// ******************************************************************** -// * 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. * -// ******************************************************************** -// -// -// Contact authors: S. Meylan, C. Villagrasa -// -// email: sylvain.meylan@symalgo-tech.com, carmen.villagrasa@irsn.fr - -#include "../include/G4DNADummyModel.hh" - -#include "G4SystemOfUnits.hh" - -G4DNADummyModel::G4DNADummyModel(const G4String& applyToMaterial, const G4ParticleDefinition* p, const G4String& nam, G4VEmModel* emModel) - : G4VDNAModel(nam, applyToMaterial) -{ - fpEmModel = emModel; - fpParticleDef = p; -} - -G4DNADummyModel::~G4DNADummyModel() -{ - // There is no need to delete the model because it will be done in some G4 class. - //if(fpEmModel) delete fpEmModel; -} - -void G4DNADummyModel::Initialise(const G4ParticleDefinition* particle, const G4DataVector& v, G4ParticleChangeForGamma* changeForGamme) -{ - fMaterialMolPerVol = G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(G4Material::GetMaterial("G4_WATER") ); - - fpEmModel->SetParticleChange(changeForGamme, nullptr); - fpEmModel->Initialise(particle, v); - - // MatManagSys - EnableForMaterialAndParticle("G4_WATER", fpParticleDef->GetParticleName() ); - SetLowELimit("G4_WATER", fpParticleDef->GetParticleName(), fpEmModel->LowEnergyLimit() ); - SetHighELimit("G4_WATER",fpParticleDef->GetParticleName(), fpEmModel->HighEnergyLimit() ); -} - -G4double G4DNADummyModel::CrossSectionPerVolume(const G4Material* material, const G4String& /*materialName*/, const G4ParticleDefinition* p, G4double ekin, G4double emin, G4double emax) -{ - G4double crossSectionTimesDensity = fpEmModel->CrossSectionPerVolume(material, p, ekin, emin, emax); - G4double crossSection = crossSectionTimesDensity / GetNumMoleculePerVolumeUnitForMaterial(G4Material::GetMaterial("G4_WATER") ); - - return crossSection; -} - -void G4DNADummyModel::SampleSecondaries(std::vector* a, const G4MaterialCutsCouple* b, const G4String& /*materialName*/, const G4DynamicParticle* c, G4ParticleChangeForGamma* /*particleChangeForGamma*/, G4double tmin, G4double tmax) -{ - fpEmModel->SampleSecondaries(a, b, c, tmin, tmax); -} - -G4double G4DNADummyModel::GetNumMoleculePerVolumeUnitForMaterial(const G4Material* mat) -{ - return fMaterialMolPerVol->at(mat->GetIndex() ); -} - - diff --git a/source/processes/electromagnetic/dna/models/src/G4DNAEventScheduler.cc b/source/processes/electromagnetic/dna/models/src/G4DNAEventScheduler.cc index b8cf237f0a0..724924f510f 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNAEventScheduler.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNAEventScheduler.cc @@ -38,23 +38,13 @@ #include "G4DNAScavengerMaterial.hh" #include "G4Molecule.hh" -G4DNAEventScheduler::G4DNAEventScheduler(const G4DNABoundingBox& boundingBox, - G4int pixel) +G4DNAEventScheduler::G4DNAEventScheduler() : IEventScheduler() - , fPixel(pixel) - , fInitialPixels(fPixel) - , fpMesh(new G4DNAMesh(boundingBox, fPixel)) , fpGillespieReaction(new G4DNAGillespieDirectMethod()) , fpEventSet(new G4DNAEventSet()) , fpUpdateSystem(new G4DNAUpdateSystemModel()) { - if(!CheckingReactionRadius(fpMesh->GetResolution())) - { - G4String WarMessage = "resolution is not good : " + - std::to_string(fpMesh->GetResolution() / nm); - G4Exception("G4DNAEventScheduler::InitializeInMesh()", "WrongResolution", - JustWarning, WarMessage); - } + } void G4DNAEventScheduler::ClearAndReChargeCounter() @@ -230,12 +220,21 @@ void G4DNAEventScheduler::Reset() fpMesh->Reset(); } -void G4DNAEventScheduler::Initialize() +void G4DNAEventScheduler::Initialize(const G4DNABoundingBox& boundingBox, + G4int pixel) { if(!fInitialized) { - fPixel = fInitialPixels; - fpMesh = std::make_unique(fpMesh->GetBoundingBox(), fPixel); + fPixel = pixel; + fpMesh = std::make_unique(boundingBox, pixel); + + if(!CheckingReactionRadius(fpMesh->GetResolution())) + { + G4String WarMessage = "resolution is not good : " + + std::to_string(fpMesh->GetResolution() / nm); + G4Exception("G4DNAEventScheduler::InitializeInMesh()", "WrongResolution", + JustWarning, WarMessage); + } // Scavenger(); diff --git a/source/processes/electromagnetic/dna/models/src/G4DNAModelInterface.cc b/source/processes/electromagnetic/dna/models/src/G4DNAModelInterface.cc index 7b04e448187..0c1ab686894 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNAModelInterface.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNAModelInterface.cc @@ -25,622 +25,512 @@ // // // Contact authors: S. Meylan, C. Villagrasa -// // email: sylvain.meylan@symalgo-tech.com, carmen.villagrasa@irsn.fr +// updated : Hoang Tran : 6/1/2023 clean code #include "G4DNAModelInterface.hh" -#include "G4PhysicalConstants.hh" -#include "G4SystemOfUnits.hh" -#include "G4DNAMolecularMaterial.hh" - - -G4DNAModelInterface::G4DNAModelInterface(const G4String &nam) - : G4VEmModel(nam), fName(nam), fpParticleChangeForGamma(0), fSampledMat("") -{ -} +#include "G4DNAMolecularMaterial.hh" +#include "G4LossTableManager.hh" +#include "G4ParticleChangeForGamma.hh" +#include "G4VDNAModel.hh" +#include "G4VEmModel.hh" +G4DNAModelInterface::G4DNAModelInterface(const G4String& nam) : G4VEmModel(nam), fName(nam) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4DNAModelInterface::~G4DNAModelInterface() +void G4DNAModelInterface::Initialise(const G4ParticleDefinition* particle, const G4DataVector& cuts) { - // Loop on all the registered models to properly delete them (free the memory) - for(std::size_t i=0, ie = fRegisteredModels.size(); iInitialise(particle, cuts, fpParticleChangeForGamma); - } + // Loop on all the registered models to initialise them + for (std::size_t i = 0, ie = fRegisteredModels.size(); i < ie; ++i) { + fRegisteredModels.at(i)->SetParticleChange(fpParticleChangeForGamma); + fRegisteredModels.at(i)->Initialise(particle, cuts); + } + // used to retrieve the model corresponding to the current material/particle couple + BuildMaterialParticleModelTable(particle); + BuildMaterialMolPerVolTable(); - // Build the [material][particle]=Models table - // used to retrieve the model corresponding to the current material/particle couple - BuildMaterialParticleModelTable(particle); + StreamInfo(G4cout); - BuildMaterialMolPerVolTable(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4double G4DNAModelInterface::CrossSectionPerVolume(const G4Material* material, - const G4ParticleDefinition* p, - G4double ekin, - G4double emin, - G4double emax) + const G4ParticleDefinition* p, G4double ekin, + G4double emin, G4double emax) { - // Method to return the crossSection * nbMoleculePerUnitVolume to the process class. - // Process class then calculates the path. - // The cross section is calculated in the registered model(s) and this class just call the method - // Two cases are handled here: normal material and composite material. - // - // Idea: - // *** Simple material *** - // Ask for the cross section of the chosen model. - // Multiply it by the number of medium molecules per volume unit. - // Return the value. - // *** Composite material *** - // Ask for the cross section of the chosen model for each component. - // Apply a factor to each cross section and sum the results. The factor is the molecule number of component per composite volume unit. - // The total cross section is returned. - - // To reset the sampledMat variable. - // Can be used by user to retrieve current component - fSampledMat = ""; - - // This is the value to be sum up and to be returned at then end - G4double crossSectionTimesNbMolPerVol (0); - - // Reset the map saving the material and the cumulated corresponding cross section - // Used in SampleSecondaries if the interaction is selected for the step and if the material is a composite - fMaterialCS.clear(); - - // This is the value to be used by SampleSecondaries - fCSsumTot = 0; - - // ***************************** - // Material is not a composite - // ***************************** - // - if(material->GetMatComponents().empty()) - { - // Get the material name - const G4String& materialName = material->GetName(); - - // Use the table to get the model - G4VDNAModel* model = GetDNAModel(materialName, p->GetParticleName(), ekin); - - // Get the nunber of molecules per volume unit for that material - G4double nbOfMoleculePerVolumeUnit = GetNumMoleculePerVolumeUnitForMaterial(material); - - // Calculate the cross section times the number of molecules - if(model != 0) - crossSectionTimesNbMolPerVol = nbOfMoleculePerVolumeUnit * model->CrossSectionPerVolume(material, materialName, p, ekin, emin, emax); - else // no model was selected, we are out of the energy ranges - crossSectionTimesNbMolPerVol = 0.; + // Method to return the crossSection * nbMoleculePerUnitVolume to the process class. + // Process class then calculates the path. + // The cross section is calculated in the registered model(s) and this class just call the method + // Two cases are handled here: normal material and composite material. + // + // Idea: + // *** Simple material *** + // Ask for the cross section of the chosen model. + // Multiply it by the number of medium molecules per volume unit. + // Return the value. + // *** Composite material *** + // Ask for the cross section of the chosen model for each component. + // Apply a factor to each cross section and sum the results. The factor is the molecule number of + // component per composite volume unit. The total cross section is returned. + + // To reset the sampledMat variable. + // Can be used by user to retrieve current component + fSampledMat = 0; + + // This is the value to be sum up and to be returned at then end + G4double crossSectionTimesNbMolPerVol(0.); + + // Reset the map saving the material and the cumulated corresponding cross section + // Used in SampleSecondaries if the interaction is selected for the step and if the material is a + // composite + fMaterialCS.clear(); + + // This is the value to be used by SampleSecondaries + fCSsumTot = 0; + + // ***************************** + // Material is not a composite + // ***************************** + // + if (material->GetMatComponents().empty()) { + // Get the material name + const size_t & materialID = material->GetIndex(); + + // Use the table to get the model + auto model = SelectModel(materialID, p, ekin); + + // Get the nunber of molecules per volume unit for that material + + // Calculate the cross section times the number of molecules + if (model != nullptr) { + if (dynamic_cast(model) == nullptr) { + // water material models only + crossSectionTimesNbMolPerVol = model->CrossSectionPerVolume(material, p, ekin, emin, emax); + } + else { + crossSectionTimesNbMolPerVol = model->CrossSectionPerVolume(material, p, ekin, emin, emax); + } } - - // ******************************** - // Material is a composite - // ******************************** - // - else - { - // Copy the map in a local variable - // Otherwise we get segmentation fault and iterator pointing to nowhere: do not know why... - // Maybe MatComponents map is overrided by something somewhere ? - std::map componentsMap = material->GetMatComponents(); - - // Retrieve the iterator - std::map::const_iterator it = componentsMap.begin(); - - // Get the size - std::size_t componentNumber = componentsMap.size(); - - // Loop on all the components - //for(it = material->GetMatComponents().begin(); it!=material->GetMatComponents().end();++it) - for(std::size_t i=0; ifirst; - - // Get the current component mass fraction - //G4double massFraction = it->second; - - // Get the number of component molecules in a volume unit of composite material - G4double nbMoleculeOfComponentInCompositeMat = GetNumMolPerVolUnitForComponentInComposite(component, material); - - // Get the current component name - const G4String componentName = component->GetName(); - - // Retrieve the model corresponding to the current component (ie material) - G4VDNAModel* model = GetDNAModel(componentName, p->GetParticleName(), ekin); - - // Add the component part of the cross section to the cross section variable. - // The component cross section is multiplied by the total molecule number in the composite scaled by the mass fraction. - if(model != 0) - crossSectionTimesNbMolPerVol = - nbMoleculeOfComponentInCompositeMat * model->CrossSectionPerVolume(component, componentName, p, ekin, emin, emax); - else // no model was selected, we are out of the energy ranges - crossSectionTimesNbMolPerVol = 0.; - - // Save the component name and its calculated crossSectionTimesNbMolPerVol - // To be used by sampling secondaries if the interaction is selected for the step - fMaterialCS[componentName] = crossSectionTimesNbMolPerVol; - - // Save the component name and its calculated crossSectionTimesNbMolPerVol - // To be used by sampling secondaries if the interaction is selected for the step - fCSsumTot += crossSectionTimesNbMolPerVol; - - // Move forward the iterator - ++it; + else // no model was selected, we are out of the energy ranges + crossSectionTimesNbMolPerVol = 0.; + } + + // ******************************** + // Material is a composite + // ******************************** + // + else { + // Copy the map in a local variable + // Otherwise we get segmentation fault and iterator pointing to nowhere: do not know why... + // Maybe MatComponents map is overrided by something somewhere ? + auto componentsMap = material->GetMatComponents(); + + G4cout << material->GetName() << G4endl; + + // Loop on all the components + for (const auto& it : componentsMap) { + // Get the current component + auto component = it.first; + // Get the current component mass fraction + // G4double massFraction = it->second; + + // Get the number of component molecules in a volume unit of composite material + G4double nbMoleculeOfComponentInCompositeMat = + GetNumMolPerVolUnitForComponentInComposite(component, material); + G4cout << " ==========>component : " << component->GetName() + << " nbMoleculeOfComponentInCompositeMat: " << nbMoleculeOfComponentInCompositeMat + << G4endl; + + // Get the current component name + const std::size_t & componentID = component->GetIndex(); + + // Retrieve the model corresponding to the current component (ie material) + auto model = SelectModel(componentID, p, ekin); + + // Add the component part of the cross section to the cross section variable. + // The component cross section is multiplied by the total molecule number in the composite + // scaled by the mass fraction. + G4double crossSection; + if (model != nullptr) { + if (dynamic_cast(model) == nullptr) { + // water models + crossSection = + model->CrossSectionPerVolume(component, p, ekin, emin, emax) + / GetNumMoleculePerVolumeUnitForMaterial(fpG4_WATER); } - - crossSectionTimesNbMolPerVol = fCSsumTot; - + else { + crossSection = model->CrossSectionPerVolume(component, p, ekin, emin, emax) + / GetNumMoleculePerVolumeUnitForMaterial(component); + } + crossSectionTimesNbMolPerVol = nbMoleculeOfComponentInCompositeMat * crossSection; + } + else // no model was selected, we are out of the energy ranges + { + crossSectionTimesNbMolPerVol = 0.; + } + + // Save the component name and its calculated crossSectionTimesNbMolPerVol + // To be used by sampling secondaries if the interaction is selected for the step + fMaterialCS[componentID] = crossSectionTimesNbMolPerVol; + + // Save the component name and its calculated crossSectionTimesNbMolPerVol + // To be used by sampling secondaries if the interaction is selected for the step + fCSsumTot += crossSectionTimesNbMolPerVol; } + crossSectionTimesNbMolPerVol = fCSsumTot; + } - // return the cross section times the number of molecules - // the path of the interaction will be calculated using that value - return crossSectionTimesNbMolPerVol; + // return the cross section times the number of molecules + // the path of the interaction will be calculated using that value + return crossSectionTimesNbMolPerVol; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... void G4DNAModelInterface::SampleSecondaries(std::vector* fVect, - const G4MaterialCutsCouple* couple, - const G4DynamicParticle* aDynamicParticle, - G4double tmin, - G4double tmax) + const G4MaterialCutsCouple* couple, + const G4DynamicParticle* aDynamicParticle, + G4double tmin, G4double tmax) { - // To call the sampleSecondaries method of the registered model(s) - // In the case of composite material, we need to choose a component to call the method from. - // To do so we use a random sampling on the crossSectionTimesNbMolPerVol used in CrossSectionPerVolume method. - // If we enter that method it means the corresponding interaction (and process) has been chosen for the current step. - - G4String materialName; - - // ******************************* - // Material is not a composite - // ******************************* - // - if(couple->GetMaterial()->GetMatComponents().empty()) - { - materialName = couple->GetMaterial()->GetName(); - } - - // **************************** + // To call the sampleSecondaries method of the registered model(s) + // In the case of composite material, we need to choose a component to call the method from. + // To do so we use a random sampling on the crossSectionTimesNbMolPerVol used in + // CrossSectionPerVolume method. If we enter that method it means the corresponding interaction + // (and process) has been chosen for the current step. + + std::size_t materialID; + + // ******************************* + // Material is not a composite + // ******************************* + // + if (couple->GetMaterial()->GetMatComponents().empty()) { + materialID = couple->GetMaterial()->GetIndex(); + } + + // **************************** + // Material is a composite + // **************************** + // + else { // Material is a composite - // **************************** - // - else - { - // Material is a composite - // We need to select a component - - // We select a random number between 0 and fCSSumTot - G4double rand = G4UniformRand()*fCSsumTot; - - G4double cumulCS (0); - - G4bool result = false; - - // We loop on each component cumulated cross section - // - // Retrieve the iterators - std::map::const_iterator it = fMaterialCS.begin(); - std::map::const_iterator ite = fMaterialCS.end(); - // While this is true we do not have found our component. - while(rand>cumulCS) - { - // Check if the sampling is ok - if(it==ite) - { - G4Exception("G4DNAModelManager::SampleSecondaries","em0006", - FatalException, - "The random component selection has failed: we ran into the end of the map without having a selected component"); - return; // to make some compilers happy - } - - // Set the cumulated value for the iteration - cumulCS += it->second; - - // Check if we have reach the material to be selected - // The DBL_MAX is here to take into account a return DBL_MAX in CSPerVol for the elastic model - // to force elastic sampleSecondaries where the particle can be killed. - // Used when paticle energy is lower than limit. - if(rand= DBL_MAX) - { - // we have our selected material - materialName = it->first; - result = true; - break; - } - - // make the iterator move forward - ++it; - } + // We need to select a component - // Check that we get a result - if(!result) - { - // it is possible to end up here if the return DBL_MAX of CSPerVol in the elastic model is not taken into account + // We select a random number between 0 and fCSSumTot + G4double rand = G4UniformRand() * fCSsumTot; - G4Exception("G4DNAModelManager::SampleSecondaries","em0006", - FatalException, - "The random component selection has failed: while loop ended without a selected component."); - return; // to make some compilers happy - } + G4double cumulCS(0); + G4bool result = false; + + // We loop on each component cumulated cross section + // + // Retrieve the iterators + auto it = fMaterialCS.begin(); + auto ite = fMaterialCS.end(); + // While this is true we do not have found our component. + while (rand > cumulCS) { + // Check if the sampling is ok + if (it == ite) { + G4Exception( + "G4DNAModelManager::SampleSecondaries", "em0003", FatalException, + "The random component selection has failed: we ran into the end of the map without " + "having a selected component"); + return; // to make some compilers happy + } + + // Set the cumulated value for the iteration + cumulCS += it->second; + + // Check if we have reach the material to be selected + // The DBL_MAX is here to take into account a return DBL_MAX in CSPerVol for the elastic model + // to force elastic sampleSecondaries where the particle can be killed. + // Used when paticle energy is lower than limit. + if (rand < cumulCS || cumulCS >= DBL_MAX) { + // we have our selected material + materialID = it->first; + result = true; + break; + } + + // make the iterator move forward + ++it; } - // ************************************** - // Call the SampleSecondaries method - // ************************************** + // Check that we get a result + if (!result) { + // it is possible to end up here if the return DBL_MAX of CSPerVol in the elastic model is not + // taken into account - // Rename material if modified NIST material - // This is needed when material is obtained from G4MaterialCutsCouple - if(materialName.find("_MODIFIED")!=G4String::npos) - { - materialName = materialName.substr(0,materialName.size()-9); + G4Exception("G4DNAModelManager::SampleSecondaries", "em0005", FatalException, + "The random component selection has failed: while loop ended without a selected " + "component."); + return; // to make some compilers happy } + } - fSampledMat = materialName; + // ************************************** + // Call the SampleSecondaries method + // ************************************** - G4VDNAModel* model = GetDNAModel(materialName, - aDynamicParticle->GetParticleDefinition()->GetParticleName(), - aDynamicParticle->GetKineticEnergy() ); - //fMaterialParticleModelTable[materialName][aDynamicParticle->GetDefinition()->GetParticleName()][0]; + // Rename material if modified NIST material + // This is needed when material is obtained from G4MaterialCutsCouple + // if (materialName.find("_MODIFIED") != G4String::npos) { + // materialName = materialName.substr(0, materialName.size() - 9); + // } - model->SampleSecondaries(fVect, couple, materialName, aDynamicParticle, fpParticleChangeForGamma, tmin, tmax); -} + fSampledMat = materialID; -void G4DNAModelInterface::RegisterModel(G4VDNAModel* model) -{ - fRegisteredModels.push_back(model); + auto model = SelectModel(materialID, aDynamicParticle->GetParticleDefinition(), + aDynamicParticle->GetKineticEnergy()); + + model->SampleSecondaries(fVect, couple, aDynamicParticle, tmin, tmax); } -void G4DNAModelInterface::RegisterModel(G4VEmModel* model, const G4ParticleDefinition* particle) +void G4DNAModelInterface::RegisterModel(G4VEmModel* model) { - G4DNADummyModel* dummyWrapper = new G4DNADummyModel("G4_WATER", particle, model->GetName(), model); - - RegisterModel(dummyWrapper); + fRegisteredModels.push_back(model); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... void G4DNAModelInterface::BuildMaterialParticleModelTable(const G4ParticleDefinition* p) { - // Method to build a map: [material][particle] = Model*. - // The map is used to retrieve the correct model for the current particle/material couple. - - // Get the current particle name - const G4String& pName = p->GetParticleName(); - - // Retrieve the iterator - G4MaterialTable::iterator it; - - // Loop on all materials registered in the simulation - for(it = G4Material::GetMaterialTable()->begin(); it!=G4Material::GetMaterialTable()->end(); ++it) - { - // Get the material pointer - G4Material* mat = *it; - - // Get the map - std::map componentMap = mat->GetMatComponents(); - - // Get the number of component within the composite - std::size_t compositeSize = componentMap.size(); - - // Check that the material is not a composite material - if(componentMap.empty()) - { - // Get the material name - const G4String& matName = mat->GetName(); - - // Insert the model in the table. - InsertModelInTable(matName, pName); - } - // if the material is a composite material then we need to loop on all its components to register them - else - { - // Retrieve the component map begin iterator - std::map::const_iterator itComp = componentMap.begin(); - - // Loop on all the components of the material - //for(itComp = mat->GetMatComponents().begin(); itComp != eitComp; ++itComp) - for(unsigned int k=0; kfirst; - -// // Check that the component is not itself a composite -// if(component->GetMatComponents().size()!=0) -// { -// std::ostringstream oss; -// oss<<"Material "<GetName()<<" is a composite and its component "; -// oss<GetName()<<" is also a composite material. Building composite with other composites is not implemented yet"; -// oss<GetName(); - - // If there is a model then insert the model corresponding to the component in the table - // contains a if statement to check we have not registered the material as a component or a normal material before. - InsertModelInTable(compName, pName); - - // move forward the iterator - ++itComp; - } + // Method to build a map: [material][particle] = Model*. + // The map is used to retrieve the correct model for the current particle/material couple. + + // Loop on all materials registered in the simulation + for (auto it : *G4Material::GetMaterialTable()) { + // Get the material pointer + G4Material* mat = it; + // Get the map + // Check that the material is not a composite material + auto componentMap = mat->GetMatComponents(); + if (componentMap.empty()) { + // Get the material name + const std::size_t & matID = mat->GetIndex(); + InsertModelInTable(matID, p); + } + // if the material is a composite material then we need to loop on all its components to + // register them + else { + // Loop on all the components of the material + for (const auto& itComp : componentMap) { + G4Material* component = itComp.first; + // Check that the component is not itself a composite + if (component->GetMatComponents().size() != 0) { + std::ostringstream oss; + oss << "Material " << mat->GetName() << " is a composite and its component"; + oss << " " << component->GetName(); + G4Exception("G4DNAModelManager::BuildMaterialParticleModelTable", "em0007", + FatalException, oss.str().c_str()); + return; // to make some compilers happy } + // Get the current component name + const std::size_t & compID = component->GetIndex(); + // If there is a model then insert the model corresponding to the component in the table + // contains a if statement to check we have not registered the material as a component or a + // normal material before. + InsertModelInTable(compID, p); + // move forward the iterator + } } + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... void G4DNAModelInterface::BuildMaterialMolPerVolTable() { - // To be sure the G4DNAMolecularMaterial is initialized - G4DNAMolecularMaterial::Instance()->Initialize(); - - G4MaterialTable* materialTable = G4Material::GetMaterialTable(); - - // Loop on all the materials inside the "materialTable" - for(size_t i=0, ie=materialTable->size(); iat(i); - - // Current material name - const G4String& currentMatName = currentMaterial->GetName(); - - // Will the material be used in this interface instance ? - // Loop on all the materials that can be dealt with in this class - MaterialParticleModelTable::iterator it = fMaterialParticleModelTable.begin(); - MaterialParticleModelTable::iterator ite = fMaterialParticleModelTable.end(); - for(; it != ite; it++) - { - const G4String& materialName = it->first; - - if(materialName == currentMatName) - { - const std::vector* numMolPerVolForMat = G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(currentMaterial); - fMaterialMolPerVol[materialName] = numMolPerVolForMat; - } - } + // To be sure the G4DNAMolecularMaterial is initialized + G4DNAMolecularMaterial::Instance()->Initialize(); + + G4MaterialTable* materialTable = G4Material::GetMaterialTable(); + + // Loop on all the materials inside the "materialTable" + for (std::size_t i = 0, ie = materialTable->size(); i < ie; i++) { + // Current material + auto currentMaterial = materialTable->at(i); + + // Current material name + const std::size_t & currentMatID = currentMaterial->GetIndex(); + + // Will the material be used in this interface instance ? + // Loop on all the materials that can be dealt with in this class + auto it = fMaterialParticleModelTable.begin(); + auto ite = fMaterialParticleModelTable.end(); + for (; it != ite; it++) { + const std::size_t & materialID = it->first; + + if (materialID == currentMatID) { + const std::vector* numMolPerVolForMat = + G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(currentMaterial); + fMaterialMolPerVol[materialID] = numMolPerVolForMat; + } } + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4DNAModelInterface::InsertModelInTable(const G4String& matName, const G4String& pName) +void G4DNAModelInterface::InsertModelInTable(const std::size_t& matID, const G4ParticleDefinition* p) { - // To insert the model(s) in the table Material Particule -> Model(s) - - // First, we need to check if the current material has already been inserted in the table. - // This is possible because of the composite material. We could add a component M1 and then try to add the independant M1 material. - // This case must be avoided. Checking if M1 is already in the table is the way to avoid it. - // - // Chech if the current material and particle are already in the table. - // If they are: do nothing. - // If they are not: add the model(s) - // - // Check for the material - if(fMaterialParticleModelTable.find(matName) == fMaterialParticleModelTable.end()) - { - // Check for the particle - if(fMaterialParticleModelTable[matName].find(pName) == fMaterialParticleModelTable[matName].end()) - { - G4int modelNbForMaterial (0); - - // Loop on all models registered in the simulation to check: - // 1- if they can be applied to the current material - // 2- if they can be applied to the current particle - for(std::size_t i=0, ie=fRegisteredModels.size(); iIsParticleExistingInModelForMaterial(pName, matName)) - { - // if yes then add the model in the map - fMaterialParticleModelTable[matName][pName].push_back(fRegisteredModels[i]); - - // and add one to the "there is a model" material flag - ++modelNbForMaterial; - } - } - - // The model(s) applicable to the currently selected material should be in the map. - // We check if there are several models for the material. - if(modelNbForMaterial>1) - { - // If there are several models for a given material and particle couple it could be - // because of the energy ranges. We will check if the energy ranges are coherent. - - // Get the models (vector) - std::vector& models = fMaterialParticleModelTable[matName][pName]; - - // Declare a map to sort the limits (G4double) and a model "id" (G4int). - // The model id is created on the fly here. - // The idea is to fill a map with [limit] = counter. This map will be auto-sorted - // and we will check by iterating on it that the counter order is maintained. - - // Delcare the map - std::map > sortMap; - - G4double smallDiff = 0.01 *eV; - - // Loop on all the model for the current couple - // and fill a map with [lim] = modelNumber - for(std::size_t ii=0, em=models.size(); iiGetLowELimit(matName, pName); - G4double highLim = models[ii]->GetHighELimit(matName, pName); - - if(sortMap.find(lowLim) != sortMap.end() ) - { - lowLim += smallDiff; - } - - sortMap[lowLim] = (G4int)ii; - - if(sortMap.find(highLim) != sortMap.end() ) - { - highLim -= smallDiff; - } - - sortMap[highLim] = (G4int)ii; - } - - // The map has been created and ordered at this point. - // We will check the map order. - - // Loop on the sortMap with iterator and check the order is correct. - std::map::iterator it = sortMap.begin(); - - // First energy limit value - G4double dummyLim = it->first - smallDiff; - - // Loop on all the models again. - // The goal is to check if for each limit pairs we have the same model number - // and that the upper and lower limit are consistent. - for(std::size_t ii=0, eii=models.size(); iifirst - smallDiff; - G4int count1 = it->second; - - // Iterate - ++it; - - G4double lim2 = it->first + smallDiff; - G4int count2 = it->second; - - // Iterate - ++it; - - // Check model number and energy limit consistency - // std::abs(dummyLim - lim1) > 1.*eV because we cannot do (dummyLim != lim1) - // without experimenting precision loss. Therefore, the std::abs(...) > tolerance is the usual way of avoiding - // the issue. - if( (count1 != count2) || ( std::abs(dummyLim - lim1) > 1.*eV ) ) - { - // Error - - std::ostringstream oss; - oss<<"The material "<GetName()<<"\n"; - oss<<"low: "<GetLowELimit(matName, pName)/eV<<" eV \n"; - oss<<"high: "<GetHighELimit(matName, pName)/eV<<" eV \n"; - } - - G4Exception("G4DNAModelManager::InsertModelInTable","em0006", - FatalException, oss.str().c_str()); - return; // to make some compilers happy - } - - dummyLim = lim2; - } - - // If we are here then everything was ok. - } - // no model for the material case - else if(modelNbForMaterial==0) - { -// std::ostringstream oss; -// oss<<"The material "< Model(s) + + // First, we need to check if the current material has already been inserted in the table. + // This is possible because of the composite material. We could add a component M1 and then try to + // add the independant M1 material. This case must be avoided. Checking if M1 is already in the + // table is the way to avoid it. + // + // Check if the current material and particle are already in the table. + // If they are: do nothing. + // If they are not: add the model(s) + // + // Check for the material + if (fMaterialParticleModelTable.find(matID) == fMaterialParticleModelTable.end()) { + // Check for the particle + if (fMaterialParticleModelTable[matID].find(p) == fMaterialParticleModelTable[matID].end()) { + G4int modelNbForMaterial = 0; + for (const auto& it : fRegisteredModels) { + auto model = dynamic_cast(it); + if (model != nullptr) { + if (model->IsParticleExistingInModelForMaterial(p, matID)) { + fMaterialParticleModelTable[matID][p] = it; + // and add one to the "there is a model" material flag + ++modelNbForMaterial; + } + } + else { + auto index = fpG4_WATER->GetIndex(); + fMaterialParticleModelTable[index][p] = it; + ++modelNbForMaterial; } + } + if (modelNbForMaterial == 0) { + std::ostringstream oss; + oss << "The material " << (*G4Material::GetMaterialTable())[matID]->GetName() + << " and the particle " << p->GetParticleName(); + oss << " does not have any model registered for the " << fName << " interaction."; + G4Exception("G4DNAModelInterface::InsertModelInTable", "em0006", FatalException, + oss.str().c_str()); + return; // to make some compilers happy + } } + } } -G4VDNAModel *G4DNAModelInterface::GetDNAModel(const G4String &material, const G4String &particle, G4double ekin) +G4VEmModel* G4DNAModelInterface::SelectModel(const std::size_t& materialID, + const G4ParticleDefinition* particle, + const G4double& ekin) { - // Output pointer - G4VDNAModel* model = 0; - - // Get a reference to all the models for the couple (material and particle) - std::vector& models = fMaterialParticleModelTable[material][particle]; - - // We must choose one of the model(s) accordingly to the particle energy and the model energy range(s) - - //G4bool isOneModelSelected = false; - - // Loop on all the models within the models vector and check if ekin is within the energy range. - for(std::size_t i=0, ie=models.size(); i= models[i]->GetLowELimit(material, particle) - && ekin < models[i]->GetHighELimit(material, particle) ) - { - // Select the model - model = models[i]; - - // Boolean flag - //isOneModelSelected = true; - - // Quit the for loop - break; - } - - // ekin is not in the energy range: we continue the loop. + // Output pointer + G4VEmModel* model = nullptr; + + // Get a reference to all the models for the couple (material and particle) + auto modelData = fMaterialParticleModelTable[materialID][particle]; + + // We must choose one of the model(s) accordingly to the particle energy and the model energy + // range(s) + + // Loop on all the models within the models vector and check if ekin is within the energy range. + auto DNAModel = dynamic_cast(modelData); + G4double lowL, highL; + if (DNAModel == nullptr) { + // ekin is in the energy range: we select the model and stop the loop. + lowL = modelData->LowEnergyLimit(); + highL = modelData->HighEnergyLimit(); + if (ekin >= lowL && ekin < highL) { + // Select the model + + model = modelData; + // return model; + // Quit the for loop + // break; } - -// // If no model was selected then fatal error -// if(!isOneModelSelected) -// { -// G4String msg = "No model has "; -// msg += ekin/eV; -// msg += " eV in its energy range. Therefore nothing was selected."; - -// G4Exception("G4DNAModelManager::GetDNAModel","em0006", -// FatalException, -// msg); -// } - - // Return a pointer to the selected model - return model; + // ekin is not in the energy range: we continue the loop. + } + else { + // ekin is in the energy range: we select the model and stop the loop. + lowL = DNAModel->GetLowELimit(materialID, particle); + highL = DNAModel->GetHighELimit(materialID, particle); + if (ekin >= lowL && ekin < highL) { + // Select the model + model = modelData; + // return model; + // Quit the for loop + // break; + } + // ekin is not in the energy range: we continue the loop. + } + //} + return model; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4double G4DNAModelInterface::GetNumMoleculePerVolumeUnitForMaterial(const G4Material* mat) { - return fMaterialMolPerVol[mat->GetName()]->at(mat->GetIndex() ); + return fMaterialMolPerVol[mat->GetIndex()]->at(mat->GetIndex()); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNAModelInterface::GetNumMolPerVolUnitForComponentInComposite(const G4Material* component, const G4Material* composite) +G4double +G4DNAModelInterface::GetNumMolPerVolUnitForComponentInComposite(const G4Material* component, + const G4Material* composite) { - return fMaterialMolPerVol[component->GetName() ]->at(composite->GetIndex() ); + return fMaterialMolPerVol[component->GetIndex()]->at(composite->GetIndex()); } + +void G4DNAModelInterface::StreamInfo(std::ostream& os) const +{ + G4long prec = os.precision(5); + os << "======================================= Materials of " << std::setw(17) + << this->GetName() << " ================================================" + << "\n"; + os << std::setw(15) << "Material#" << std::setw(13) << "Particle" << std::setw(35) << "Model" + << std::setw(17) << "LowLimit(MeV)" << std::setw(17) << "HighLimit(MeV)" << std::setw(13) + << "Fast" << std::setw(13) << "Stationary" << std::setw(13) << "Chemistry" << G4endl; + for (const auto& it1 : fMaterialParticleModelTable) { + os << std::setw(15) << (*G4Material::GetMaterialTable())[it1.first]->GetName(); + for (const auto& it2 : it1.second) { + os << std::setw(13) << it2.first->GetParticleName(); + os << std::setw(35) << it2.second->GetName(); + auto DNAModel = dynamic_cast(it2.second); + if (DNAModel == nullptr) { + os << std::setw(17) << it2.second->LowEnergyLimit(); + os << std::setw(17) << it2.second->HighEnergyLimit(); + } + else { + auto lowL = DNAModel->GetLowELimit(it1.first, it2.first); + auto highL = DNAModel->GetHighELimit(it1.first, it2.first); + os << std::setw(17) << lowL; + os << std::setw(17) << highL; + } + os << std::setw(13) << "no"; + os << std::setw(13) << "no"; + os << std::setw(13) << "no" << G4endl; + } + } + + os << "========================================================================================" + "==================================================" + << G4endl; + os.precision(prec); +} \ No newline at end of file diff --git a/source/processes/electromagnetic/dna/models/src/G4DNAPTBElasticModel.cc b/source/processes/electromagnetic/dna/models/src/G4DNAPTBElasticModel.cc index 0a7aee48861..4318b2324aa 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNAPTBElasticModel.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNAPTBElasticModel.cc @@ -29,528 +29,513 @@ // #include "G4DNAPTBElasticModel.hh" + #include "G4DNAChampionElasticModel.hh" -#include "G4PhysicalConstants.hh" -#include "G4SystemOfUnits.hh" +#include "G4DNAMaterialManager.hh" #include "G4DNAMolecularMaterial.hh" #include "G4Proton.hh" +#include "G4SystemOfUnits.hh" -G4DNAPTBElasticModel::G4DNAPTBElasticModel(const G4String& applyToMaterial, const G4ParticleDefinition*, - const G4String& nam) - : G4VDNAModel(nam, applyToMaterial) -{ - fKillBelowEnergy = 10*eV; // will be override by the limits defined for each material - - verboseLevel= 0; - // Verbosity scale: - // 0 = nothing - // 1 = warning for energy non-conservation - // 2 = details of energy budget - // 3 = calculation of cross sections, file openings, sampling of atoms - // 4 = entering in methods - - if( verboseLevel>0 ) - { - G4cout << "PTB Elastic model is constructed " << G4endl; - } -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - -G4DNAPTBElasticModel::~G4DNAPTBElasticModel() +G4DNAPTBElasticModel::G4DNAPTBElasticModel(const G4String& applyToMaterial, + const G4ParticleDefinition*, const G4String& nam) + : G4VDNAModel(nam, applyToMaterial) { - + if (verboseLevel > 0) { + G4cout << "PTB Elastic model is constructed : " << G4endl; + } + fpTHF = G4Material::GetMaterial("THF", false); + fpPY = G4Material::GetMaterial("PY", false); + fpPU = G4Material::GetMaterial("PU", false); + fpTMP = G4Material::GetMaterial("TMP", false); + fpG4_WATER = G4Material::GetMaterial("G4_WATER", false); + fpBackbone_THF = G4Material::GetMaterial("backbone_THF", false); + fpCytosine_PY = G4Material::GetMaterial("cytosine_PY", false); + fpThymine_PY = G4Material::GetMaterial("thymine_PY", false); + fpAdenine_PU = G4Material::GetMaterial("adenine_PU", false); + fpBackbone_TMP = G4Material::GetMaterial("backbone_TMP", false); + fpGuanine_PU = G4Material::GetMaterial("guanine_PU", false); + fpN2 = G4Material::GetMaterial("N2", false); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... void G4DNAPTBElasticModel::Initialise(const G4ParticleDefinition* particle, - const G4DataVector& /*cuts*/, G4ParticleChangeForGamma*) + const G4DataVector& /*cuts*/) { - if (verboseLevel > 3) - G4cout << "Calling G4DNAPTBElasticModel::Initialise()" << G4endl; - - G4double scaleFactor = 1e-16*cm*cm; - - G4ParticleDefinition* electronDef = G4Electron::ElectronDefinition(); - - //******************************************************* - // Cross section data - //******************************************************* - - if(particle == electronDef) - { - G4String particleName = particle->GetParticleName(); - - // MPietrzak, adding paths for N2 - AddCrossSectionData("N2", - particleName, - "dna/sigma_elastic_e-_PTB_N2", - "dna/sigmadiff_cumulated_elastic_e-_PTB_N2", - scaleFactor); - SetLowELimit("N2", particleName, 10*eV); - SetHighELimit("N2", particleName, 1.02*MeV); - // MPietrzak - - AddCrossSectionData("THF", - particleName, - "dna/sigma_elastic_e-_PTB_THF", - "dna/sigmadiff_cumulated_elastic_e-_PTB_THF", - scaleFactor); - SetLowELimit("THF", particleName, 10*eV); - SetHighELimit("THF", particleName, 1*keV); - - AddCrossSectionData("PY", - particleName, - "dna/sigma_elastic_e-_PTB_PY", - "dna/sigmadiff_cumulated_elastic_e-_PTB_PY", - scaleFactor); - SetLowELimit("PY", particleName, 10*eV); - SetHighELimit("PY", particleName, 1*keV); - - AddCrossSectionData("PU", - particleName, - "dna/sigma_elastic_e-_PTB_PU", - "dna/sigmadiff_cumulated_elastic_e-_PTB_PU", - scaleFactor); - SetLowELimit("PU", particleName, 10*eV); - SetHighELimit("PU", particleName, 1*keV); - - AddCrossSectionData("TMP", - particleName, - "dna/sigma_elastic_e-_PTB_TMP", - "dna/sigmadiff_cumulated_elastic_e-_PTB_TMP", - scaleFactor); - SetLowELimit("TMP", particleName, 10*eV); - SetHighELimit("TMP", particleName, 1*keV); - - AddCrossSectionData("G4_WATER", - particleName, - "dna/sigma_elastic_e_champion", - "dna/sigmadiff_cumulated_elastic_e_champion", - scaleFactor); - SetLowELimit("G4_WATER", particleName, 10*eV); - SetHighELimit("G4_WATER", particleName, 1*keV); - - // DNA materials - // - AddCrossSectionData("backbone_THF", - particleName, - "dna/sigma_elastic_e-_PTB_THF", - "dna/sigmadiff_cumulated_elastic_e-_PTB_THF", - scaleFactor*33./30); - SetLowELimit("backbone_THF", particleName, 10*eV); - SetHighELimit("backbone_THF", particleName, 1*keV); - - AddCrossSectionData("cytosine_PY", - particleName, - "dna/sigma_elastic_e-_PTB_PY", - "dna/sigmadiff_cumulated_elastic_e-_PTB_PY", - scaleFactor*42./30); - SetLowELimit("cytosine_PY", particleName, 10*eV); - SetHighELimit("cytosine_PY", particleName, 1*keV); - - AddCrossSectionData("thymine_PY", - particleName, - "dna/sigma_elastic_e-_PTB_PY", - "dna/sigmadiff_cumulated_elastic_e-_PTB_PY", - scaleFactor*48./30); - SetLowELimit("thymine_PY", particleName, 10*eV); - SetHighELimit("thymine_PY", particleName, 1*keV); - - AddCrossSectionData("adenine_PU", - particleName, - "dna/sigma_elastic_e-_PTB_PU", - "dna/sigmadiff_cumulated_elastic_e-_PTB_PU", - scaleFactor*50./44); - SetLowELimit("adenine_PU", particleName, 10*eV); - SetHighELimit("adenine_PU", particleName, 1*keV); - - AddCrossSectionData("guanine_PU", - particleName, - "dna/sigma_elastic_e-_PTB_PU", - "dna/sigmadiff_cumulated_elastic_e-_PTB_PU", - scaleFactor*56./44); - SetLowELimit("guanine_PU", particleName, 10*eV); - SetHighELimit("guanine_PU", particleName, 1*keV); - - AddCrossSectionData("backbone_TMP", - particleName, - "dna/sigma_elastic_e-_PTB_TMP", - "dna/sigmadiff_cumulated_elastic_e-_PTB_TMP", - scaleFactor*33./50); - SetLowELimit("backbone_TMP", particleName, 10*eV); - SetHighELimit("backbone_TMP", particleName, 1*keV); - } - - //******************************************************* + if (isInitialised) { + return; + } + if (verboseLevel > 3) + { + G4cout << "Calling G4DNAPTBElasticModel::Initialise()" << G4endl; + } + if (particle != G4Electron::ElectronDefinition()) { + std::ostringstream oss; + oss << " Model is not applied for this particle " << particle->GetParticleName(); + G4Exception("G4DNAPTBElasticModel::G4DNAPTBElasticModel", "PTB001", FatalException, + oss.str().c_str()); + } + G4double scaleFactor = 1e-16 * cm * cm; + //******************************************************* + // Cross section data + //******************************************************* + + std::size_t index; + // MPietrzak, adding paths for N2 + if (fpN2 != nullptr) { + index = fpN2->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_elastic_e-_PTB_N2", + "dna/sigmadiff_cumulated_elastic_e-_PTB_N2", scaleFactor); + SetLowELimit(index, particle, 10 * eV); + SetHighELimit(index, particle, 1.02 * MeV); + } + // MPietrzak + + if (fpTHF != nullptr) { + index = fpTHF->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_elastic_e-_PTB_THF", + "dna/sigmadiff_cumulated_elastic_e-_PTB_THF", scaleFactor); + SetLowELimit(index, particle, 10 * eV); + SetHighELimit(index, particle, 1 * keV); + } + + if (fpPY != nullptr) { + index = fpPY->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_elastic_e-_PTB_PY", + "dna/sigmadiff_cumulated_elastic_e-_PTB_PY", scaleFactor); + SetLowELimit(index, particle, 10 * eV); + SetHighELimit(index, particle, 1 * keV); + } + + if (fpPU != nullptr) { + index = fpPU->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_elastic_e-_PTB_PU", + "dna/sigmadiff_cumulated_elastic_e-_PTB_PU", scaleFactor); + SetLowELimit(index, particle, 10 * eV); + SetHighELimit(index, particle, 1 * keV); + } + + if (fpTMP != nullptr) { + index = fpTMP->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_elastic_e-_PTB_TMP", + "dna/sigmadiff_cumulated_elastic_e-_PTB_TMP", scaleFactor); + SetLowELimit(index, particle, 10 * eV); + SetHighELimit(index, particle, 1 * keV); + } + //???? + if (fpG4_WATER != nullptr) { + index = fpG4_WATER->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_elastic_e_champion", + "dna/sigmadiff_cumulated_elastic_e_champion", scaleFactor); + SetLowELimit(index, particle, 10 * eV); + SetHighELimit(index, particle, 1 * keV); + } + // DNA materials + // + if (fpBackbone_THF != nullptr) { + index = fpBackbone_THF->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_elastic_e-_PTB_THF", + "dna/sigmadiff_cumulated_elastic_e-_PTB_THF", scaleFactor * 33. / 30); + SetLowELimit(index, particle, 10 * eV); + SetHighELimit(index, particle, 1 * keV); + } + + if (fpCytosine_PY != nullptr) { + index = fpCytosine_PY->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_elastic_e-_PTB_PY", + "dna/sigmadiff_cumulated_elastic_e-_PTB_PY", scaleFactor * 42. / 30); + SetLowELimit(index, particle, 10 * eV); + SetHighELimit(index, particle, 1 * keV); + } + + if (fpThymine_PY != nullptr) { + index = fpThymine_PY->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_elastic_e-_PTB_PY", + "dna/sigmadiff_cumulated_elastic_e-_PTB_PY", scaleFactor * 48. / 30); + SetLowELimit(index, particle, 10 * eV); + SetHighELimit(index, particle, 1 * keV); + } + + if (fpAdenine_PU != nullptr) { + index = fpAdenine_PU->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_elastic_e-_PTB_PU", + "dna/sigmadiff_cumulated_elastic_e-_PTB_PU", scaleFactor * 50. / 44); + SetLowELimit(index, particle, 10 * eV); + SetHighELimit(index, particle, 1 * keV); + } + if (fpGuanine_PU != nullptr) { + index = fpGuanine_PU->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_elastic_e-_PTB_PU", + "dna/sigmadiff_cumulated_elastic_e-_PTB_PU", scaleFactor * 56. / 44); + SetLowELimit(index, particle, 10 * eV); + SetHighELimit(index, particle, 1 * keV); + } + + if (fpBackbone_TMP != nullptr) { + index = fpBackbone_TMP->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_elastic_e-_PTB_TMP", + "dna/sigmadiff_cumulated_elastic_e-_PTB_TMP", scaleFactor * 33. / 50); + SetLowELimit(index, particle, 10 * eV); + SetHighELimit(index, particle, 1 * keV); + } + + if (!G4DNAMaterialManager::Instance()->IsLocked()) { // Load the data - //******************************************************* - - LoadCrossSectionData(particle->GetParticleName() ); - - //******************************************************* - // Verbose output - //******************************************************* + LoadCrossSectionData(particle); + G4DNAMaterialManager::Instance()->SetMasterDataModel(DNAModelType::fDNAElastics, this); + fpModelData = this; + } + else { + auto dataModel = dynamic_cast( + G4DNAMaterialManager::Instance()->GetModel(DNAModelType::fDNAElastics)); + if (dataModel == nullptr) { + G4cout << "G4DNAPTBElasticModel::Initialise:: not good modelData" << G4endl; + G4Exception("G4DNAPTBElasticModel::Initialise", "PTB0006", FatalException, + "not good modelData"); + } + else { + fpModelData = dataModel; + } + } - if (verboseLevel > 2) - G4cout << "Loaded cross section files for PTB Elastic model" << G4endl; + if (verboseLevel > 2) { + G4cout << "Loaded cross section files for PTB Elastic model" << G4endl; + } - if( verboseLevel>0 ) - { - G4cout << "PTB Elastic model is initialized " << G4endl; - } + fParticleChangeForGamma = GetParticleChangeForGamma(); + isInitialised = true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4DNAPTBElasticModel::ReadDiffCSFile(const G4String& materialName, - const G4String& particleName, - const G4String& file, - const G4double) +void G4DNAPTBElasticModel::ReadDiffCSFile(const std::size_t& materialName, + const G4ParticleDefinition* particleName, + const G4String& file, const G4double&) { - // Method to read and save the information contained within the differential cross section files. - // This method is not yet standard. - - // get the path of the G4LEDATA data folder - const char* path = G4FindDataDir("G4LEDATA"); - // if it is not found then quit and print error message - if(!path) - { - G4Exception("G4DNAPTBElasticModel::ReadAllDiffCSFiles","em0006", - FatalException,"G4LEDATA environment variable not set."); - return; + // Method to read and save the information contained within the differential cross section files. + // This method is not yet standard. + + // get the path of the G4LEDATA data folder + const char* path = G4FindDataDir("G4LEDATA"); + // if it is not found then quit and print error message + if (!path) { + G4Exception("G4DNAPTBElasticModel::ReadAllDiffCSFiles", "em0006", FatalException, + "G4LEDATA environment variable not set."); + return; + } + + // build the fullFileName path of the data file + std::ostringstream fullFileName; + fullFileName << path << "/" << file << ".dat"; + + // open the data file + std::ifstream diffCrossSection(fullFileName.str().c_str()); + // error if file is not there + std::stringstream endPath; + if (!diffCrossSection) { + endPath << "Missing data file: " << file; + G4Exception("G4DNAPTBElasticModel::Initialise", "em0003", FatalException, + endPath.str().c_str()); + } + + tValuesVec[materialName][particleName].push_back(0.); + + G4String line; + + // read the file line by line until we reach the end of file point + while (std::getline(diffCrossSection, line)) { + // check if the line is comment or empty + // + std::istringstream testIss(line); + G4String test; + testIss >> test; + // check first caracter to determine if following information is data or comments + if (test == "#") { + // skip the line by beginning a new while loop. + continue; } - - // build the fullFileName path of the data file - std::ostringstream fullFileName; - fullFileName << path <<"/"<< file<<".dat"; - - // open the data file - std::ifstream diffCrossSection (fullFileName.str().c_str()); - // error if file is not there - std::stringstream endPath; - if (!diffCrossSection) - { - endPath << "Missing data file: "<> tDummy >> eDummy; + + // SI : mandatory Vecm initialization + + // Fill two vectors contained in maps of types: + // [materialName][particleName]=vector + // [materialName][particleName][T]=vector + // to list all the incident energies (tValues) and all the output energies (eValues) within the + // file + // + // Check if we already have the current T value in the vector. + // If not then add it + if (tDummy != tValuesVec[materialName][particleName].back()) { + // Add the current T value + tValuesVec[materialName][particleName].push_back(tDummy); + // Make it correspond to a default zero E value + eValuesVect[materialName][particleName][tDummy].push_back(0.); + } + + // Put the differential cross section value of the input file within the diffCrossSectionData + // map + iss >> diffCrossSectionData[materialName][particleName][tDummy][eDummy]; - tValuesVec[materialName][particleName].push_back(0.); - - G4String line; - - // read the file line by line until we reach the end of file point - while(std::getline(diffCrossSection, line)) - { - // check if the line is comment or empty - // - std::istringstream testIss(line); - G4String test; - testIss >> test; - // check first caracter to determine if following information is data or comments - if(test=="#") - { - // skip the line by beginning a new while loop. - continue; - } - // check if line is empty - else if(line.empty()) - { - // skip the line by beginning a new while loop. - continue; - } - // - // end of the check - - // transform the line into a iss - std::istringstream iss(line); - - // Variables to be filled by the input file - double tDummy; - double eDummy; - - // fill the variables with the content of the line - iss>>tDummy>>eDummy; - - // SI : mandatory Vecm initialization - - // Fill two vectors contained in maps of types: - // [materialName][particleName]=vector - // [materialName][particleName][T]=vector - // to list all the incident energies (tValues) and all the output energies (eValues) within the file - // - // Check if we already have the current T value in the vector. - // If not then add it - if (tDummy != tValuesVec[materialName][particleName].back()) - { - // Add the current T value - tValuesVec[materialName][particleName].push_back(tDummy); - - // Make it correspond to a default zero E value - eValuesVect[materialName][particleName][tDummy].push_back(0.); - } - - // Put the differential cross section value of the input file within the diffCrossSectionData map - iss>>diffCrossSectionData[materialName][particleName][tDummy][eDummy]; - - // If the current E value (eDummy) is different from the one already registered in the eVector then add it to the vector - if (eDummy != eValuesVect[materialName][particleName][tDummy].back()) eValuesVect[materialName][particleName][tDummy].push_back(eDummy); + // If the current E value (eDummy) is different from the one already registered in the eVector + // then add it to the vector + if (eDummy != eValuesVect[materialName][particleName][tDummy].back()) { + eValuesVect[materialName][particleName][tDummy].push_back(eDummy); } + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNAPTBElasticModel::CrossSectionPerVolume(const G4Material* /*material*/, - const G4String& materialName, - const G4ParticleDefinition* p, - G4double ekin, - G4double /*emin*/, - G4double /*emax*/) +G4double G4DNAPTBElasticModel::CrossSectionPerVolume(const G4Material* pMaterial, + const G4ParticleDefinition* p, G4double ekin, + G4double /*emin*/, G4double /*emax*/) { - if (verboseLevel > 3) - G4cout << "Calling CrossSectionPerVolume() of G4DNAPTBElasticModel" << G4endl; - - // Get the name of the current particle - const G4String& particleName = p->GetParticleName(); - - // set killBelowEnergy value for current material - fKillBelowEnergy = GetLowELimit(materialName, particleName); - - // initialise the return value (cross section) to zero - G4double sigma(0); - - // check if we are below the high energy limit - if (ekin < GetHighELimit(materialName, particleName) ) - { - // This is used to kill the particle if its kinetic energy is below fKillBelowEnergy. - // If the energy is lower then we return a maximum cross section and thus the SampleSecondaries method will be called for sure. - // SampleSecondaries will remove the particle from the simulation. - // - //SI : XS must not be zero otherwise sampling of secondaries method ignored - if (ekin < fKillBelowEnergy) return DBL_MAX; - - // Get the tables with the cross section data - TableMapData* tableData = GetTableData(); - - // Retrieve the cross section value - sigma = (*tableData)[materialName][particleName]->FindValue(ekin); + if (verboseLevel > 3){ + G4cout << "Calling CrossSectionPerVolume() of G4DNAPTBElasticModel" << G4endl; + } + + // Get the name of the current particle + const G4String& particleName = p->GetParticleName(); + const std::size_t& materialID = pMaterial->GetIndex(); + + // set killBelowEnergy value for current material + fKillBelowEnergy = fpModelData->GetLowELimit(materialID, p); + // initialise the return value (cross section) to zero + G4double sigma = 0.; + + // check if we are below the high energy limit + if (ekin < fpModelData->GetHighELimit(materialID, p)) { + // This is used to kill the particle if its kinetic energy is below fKillBelowEnergy. + // If the energy is lower then we return a maximum cross section and thus the SampleSecondaries + // method will be called for sure. SampleSecondaries will remove the particle from the + // simulation. + // + // SI : XS must not be zero otherwise sampling of secondaries method ignored + if (ekin < fKillBelowEnergy) { + return DBL_MAX; } - if (verboseLevel > 2) - { - G4cout << "__________________________________" << G4endl; - G4cout << "°°° G4DNAPTBElasticModel - XS INFO START" << G4endl; - G4cout << "°°° Kinetic energy(eV)=" << ekin/eV << " particle : " << particleName << G4endl; - G4cout << "°°° Cross section per molecule (cm^2)=" << sigma/cm/cm << G4endl; - G4cout << "°°° G4DNAPTBElasticModel - XS INFO END" << G4endl; + // Get the tables with the cross section data + auto tableData = fpModelData->GetData(); + if ((*tableData)[materialID][p] == nullptr) { + G4Exception("G4DNAPTBElasticModel::CrossSectionPerVolume", "em00236", FatalException, + "No model is registered"); } - - // Return the cross section - return sigma; + // Retrieve the cross section value + sigma = (*tableData)[materialID][p]->FindValue(ekin); + } + + if (verboseLevel > 2) { + G4cout << "__________________________________" << G4endl; + G4cout << "°°° G4DNAPTBElasticModel - XS INFO START" << G4endl; + G4cout << "°°° Kinetic energy(eV)=" << ekin / eV << " particle : " << particleName << G4endl; + G4cout << "°°° Cross section per molecule (cm^2)=" << sigma / cm / cm << G4endl; + G4cout << "°°° G4DNAPTBElasticModel - XS INFO END" << G4endl; + } + + // Return the cross section + auto MolDensity = + (*G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(pMaterial))[materialID]; + return sigma * MolDensity; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... void G4DNAPTBElasticModel::SampleSecondaries(std::vector* /*fvect*/, - const G4MaterialCutsCouple* /*couple*/, - const G4String& materialName, + const G4MaterialCutsCouple* couple, const G4DynamicParticle* aDynamicElectron, - G4ParticleChangeForGamma* particleChangeForGamma, - G4double /*tmin*/, - G4double /*tmax*/) + G4double /*tmin*/, G4double /*tmax*/) { - if (verboseLevel > 3) - G4cout << "Calling SampleSecondaries() of G4DNAPTBElasticModel" << G4endl; - - G4double electronEnergy0 = aDynamicElectron->GetKineticEnergy(); - - const G4String& particleName = aDynamicElectron->GetParticleDefinition()->GetParticleName(); - - // set killBelowEnergy value for material - fKillBelowEnergy = GetLowELimit(materialName, particleName); - - // If the particle (electron here) energy is below the kill limit then we remove it from the simulation - if (electronEnergy0 < fKillBelowEnergy) - { - particleChangeForGamma->SetProposedKineticEnergy(0.); - particleChangeForGamma->ProposeTrackStatus(fStopAndKill); - particleChangeForGamma->ProposeLocalEnergyDeposit(electronEnergy0); - } - // If we are above the kill limite and below the high limit then we proceed - else if (electronEnergy0>= fKillBelowEnergy && electronEnergy0 < GetHighELimit(materialName, particleName) ) - { - // Random sampling of the cosTheta - G4double cosTheta = RandomizeCosTheta(electronEnergy0, materialName); - - // Random sampling of phi - G4double phi = 2. * pi * G4UniformRand(); - - G4ThreeVector zVers = aDynamicElectron->GetMomentumDirection(); - G4ThreeVector xVers = zVers.orthogonal(); - G4ThreeVector yVers = zVers.cross(xVers); - - G4double xDir = std::sqrt(1. - cosTheta*cosTheta); - G4double yDir = xDir; - xDir *= std::cos(phi); - yDir *= std::sin(phi); - - // Particle direction after ModelInterface - G4ThreeVector zPrikeVers((xDir*xVers + yDir*yVers + cosTheta*zVers)); - - // Give the new direction - particleChangeForGamma->ProposeMomentumDirection(zPrikeVers.unit()) ; - - // Update the energy which does not change here - particleChangeForGamma->SetProposedKineticEnergy(electronEnergy0); - } + if (verboseLevel > 3) { + G4cout << "Calling SampleSecondaries() of G4DNAPTBElasticModel" << G4endl; + } + + G4double electronEnergy0 = aDynamicElectron->GetKineticEnergy(); + const std::size_t& materialID = couple->GetIndex(); + auto p = aDynamicElectron->GetParticleDefinition(); + + // set killBelowEnergy value for material + fKillBelowEnergy = fpModelData->GetLowELimit(materialID, p); + + // If the particle (electron here) energy is below the kill limit then we remove it from the + // simulation + if (electronEnergy0 < fKillBelowEnergy) { + fParticleChangeForGamma->SetProposedKineticEnergy(0.); + fParticleChangeForGamma->ProposeTrackStatus(fStopAndKill); + fParticleChangeForGamma->ProposeLocalEnergyDeposit(electronEnergy0); + } + // If we are above the kill limite and below the high limit then we proceed + else if (electronEnergy0 >= fKillBelowEnergy && electronEnergy0 < GetHighELimit(materialID, p)) { + // Random sampling of the cosTheta + G4double cosTheta = fpModelData->RandomizeCosTheta(electronEnergy0, materialID); + + // Random sampling of phi + G4double phi = 2. * CLHEP::pi * G4UniformRand(); + + auto zVers = aDynamicElectron->GetMomentumDirection(); + auto xVers = zVers.orthogonal(); + auto yVers = zVers.cross(xVers); + + G4double xDir = std::sqrt(1. - cosTheta * cosTheta); + G4double yDir = xDir; + xDir *= std::cos(phi); + yDir *= std::sin(phi); + + // Particle direction after ModelInterface + G4ThreeVector zPrikeVers((xDir * xVers + yDir * yVers + cosTheta * zVers)); + + // Give the new direction + fParticleChangeForGamma->ProposeMomentumDirection(zPrikeVers.unit()); + + // Update the energy which does not change here + fParticleChangeForGamma->SetProposedKineticEnergy(electronEnergy0); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNAPTBElasticModel::Theta -(G4ParticleDefinition * particleDefinition, G4double k, G4double integrDiff, const G4String& materialName) -{ - G4double theta = 0.; - G4double valueT1 = 0; - G4double valueT2 = 0; - G4double valueE21 = 0; - G4double valueE22 = 0; - G4double valueE12 = 0; - G4double valueE11 = 0; - G4double xs11 = 0; - G4double xs12 = 0; - G4double xs21 = 0; - G4double xs22 = 0; - G4String particleName = particleDefinition->GetParticleName(); - - if (particleDefinition == G4Electron::ElectronDefinition()) - { - std::vector::iterator t2 = std::upper_bound(tValuesVec[materialName][particleName].begin(),tValuesVec[materialName][particleName].end(), k); - std::vector::iterator t1 = t2-1; - - std::vector::iterator e12 = std::upper_bound(eValuesVect[materialName][particleName][(*t1)].begin(),eValuesVect[materialName][particleName][(*t1)].end(), integrDiff); - std::vector::iterator e11 = e12-1; - - std::vector::iterator e22 = std::upper_bound(eValuesVect[materialName][particleName][(*t2)].begin(),eValuesVect[materialName][particleName][(*t2)].end(), integrDiff); - std::vector::iterator e21 = e22-1; - - valueT1 =*t1; - valueT2 =*t2; - valueE21 =*e21; - valueE22 =*e22; - valueE12 =*e12; - valueE11 =*e11; - - xs11 = diffCrossSectionData[materialName][particleName][valueT1][valueE11]; - xs12 = diffCrossSectionData[materialName][particleName][valueT1][valueE12]; - xs21 = diffCrossSectionData[materialName][particleName][valueT2][valueE21]; - xs22 = diffCrossSectionData[materialName][particleName][valueT2][valueE22]; - } - - if (xs11==0 && xs12==0 && xs21==0 && xs22==0) return (0.); - - theta = QuadInterpolator ( valueE11, valueE12, - valueE21, valueE22, - xs11, xs12, - xs21, xs22, - valueT1, valueT2, - k, integrDiff ); - - return theta; +G4double G4DNAPTBElasticModel::Theta(const G4ParticleDefinition* p, G4double k, G4double integrDiff, + const std::size_t& materialID) +{ + G4double theta = 0.; + G4double valueT1 = 0; + G4double valueT2 = 0; + G4double valueE21 = 0; + G4double valueE22 = 0; + G4double valueE12 = 0; + G4double valueE11 = 0; + G4double xs11 = 0; + G4double xs12 = 0; + G4double xs21 = 0; + G4double xs22 = 0; + if (p == G4Electron::ElectronDefinition()) { + auto t2 = + std::upper_bound(tValuesVec[materialID][p].begin(), tValuesVec[materialID][p].end(), k); + auto t1 = t2 - 1; + + auto e12 = std::upper_bound(eValuesVect[materialID][p][(*t1)].begin(), + eValuesVect[materialID][p][(*t1)].end(), integrDiff); + auto e11 = e12 - 1; + + auto e22 = std::upper_bound(eValuesVect[materialID][p][(*t2)].begin(), + eValuesVect[materialID][p][(*t2)].end(), integrDiff); + auto e21 = e22 - 1; + + valueT1 = *t1; + valueT2 = *t2; + valueE21 = *e21; + valueE22 = *e22; + valueE12 = *e12; + valueE11 = *e11; + + xs11 = diffCrossSectionData[materialID][p][valueT1][valueE11]; + xs12 = diffCrossSectionData[materialID][p][valueT1][valueE12]; + xs21 = diffCrossSectionData[materialID][p][valueT2][valueE21]; + xs22 = diffCrossSectionData[materialID][p][valueT2][valueE22]; + } + + if (xs11 == 0 && xs12 == 0 && xs21 == 0 && xs22 == 0) { + return (0.); + } + + theta = QuadInterpolator(valueE11, valueE12, valueE21, valueE22, xs11, xs12, xs21, xs22, valueT1, + valueT2, k, integrDiff); + + return theta; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNAPTBElasticModel::LinLogInterpolate(G4double e1, - G4double e2, - G4double e, - G4double xs1, +G4double G4DNAPTBElasticModel::LinLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2) { - G4double d1 = std::log(xs1); - G4double d2 = std::log(xs2); - G4double value = std::exp(d1 + (d2 - d1)*(e - e1)/ (e2 - e1)); - return value; + G4double d1 = std::log(xs1); + G4double d2 = std::log(xs2); + G4double value = std::exp(d1 + (d2 - d1) * (e - e1) / (e2 - e1)); + return value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNAPTBElasticModel::LinLinInterpolate(G4double e1, - G4double e2, - G4double e, - G4double xs1, +G4double G4DNAPTBElasticModel::LinLinInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2) { - G4double d1 = xs1; - G4double d2 = xs2; - G4double value = (d1 + (d2 - d1)*(e - e1)/ (e2 - e1)); - return value; + G4double d1 = xs1; + G4double d2 = xs2; + G4double value = (d1 + (d2 - d1) * (e - e1) / (e2 - e1)); + return value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNAPTBElasticModel::LogLogInterpolate(G4double e1, - G4double e2, - G4double e, - G4double xs1, +G4double G4DNAPTBElasticModel::LogLogInterpolate(G4double e1, G4double e2, G4double e, G4double xs1, G4double xs2) { - G4double a = (std::log10(xs2)-std::log10(xs1)) / (std::log10(e2)-std::log10(e1)); - G4double b = std::log10(xs2) - a*std::log10(e2); - G4double sigma = a*std::log10(e) + b; - G4double value = (std::pow(10.,sigma)); - return value; + G4double a = (std::log10(xs2) - std::log10(xs1)) / (std::log10(e2) - std::log10(e1)); + G4double b = std::log10(xs2) - a * std::log10(e2); + G4double sigma = a * std::log10(e) + b; + G4double value = (std::pow(10., sigma)); + return value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNAPTBElasticModel::QuadInterpolator(G4double e11, G4double e12, - G4double e21, G4double e22, - G4double xs11, G4double xs12, - G4double xs21, G4double xs22, - G4double t1, G4double t2, - G4double t, G4double e) +G4double G4DNAPTBElasticModel::QuadInterpolator(G4double e11, G4double e12, G4double e21, + G4double e22, G4double xs11, G4double xs12, + G4double xs21, G4double xs22, G4double t1, + G4double t2, G4double t, G4double e) { - // Log-Log - /* - G4double interpolatedvalue1 = LogLogInterpolate(e11, e12, e, xs11, xs12); - G4double interpolatedvalue2 = LogLogInterpolate(e21, e22, e, xs21, xs22); - G4double value = LogLogInterpolate(t1, t2, t, interpolatedvalue1, interpolatedvalue2); + // Log-Log + /* + G4double interpolatedvalue1 = LogLogInterpolate(e11, e12, e, xs11, xs12); + G4double interpolatedvalue2 = LogLogInterpolate(e21, e22, e, xs21, xs22); + G4double value = LogLogInterpolate(t1, t2, t, interpolatedvalue1, interpolatedvalue2); - // Lin-Log - G4double interpolatedvalue1 = LinLogInterpolate(e11, e12, e, xs11, xs12); - G4double interpolatedvalue2 = LinLogInterpolate(e21, e22, e, xs21, xs22); - G4double value = LinLogInterpolate(t1, t2, t, interpolatedvalue1, interpolatedvalue2); -*/ + // Lin-Log + G4double interpolatedvalue1 = LinLogInterpolate(e11, e12, e, xs11, xs12); + G4double interpolatedvalue2 = LinLogInterpolate(e21, e22, e, xs21, xs22); + G4double value = LinLogInterpolate(t1, t2, t, interpolatedvalue1, interpolatedvalue2); + */ - // Lin-Lin - G4double interpolatedvalue1 = LinLinInterpolate(e11, e12, e, xs11, xs12); - G4double interpolatedvalue2 = LinLinInterpolate(e21, e22, e, xs21, xs22); - G4double value = LinLinInterpolate(t1, t2, t, interpolatedvalue1, interpolatedvalue2); + // Lin-Lin + G4double interpolatedvalue1 = LinLinInterpolate(e11, e12, e, xs11, xs12); + G4double interpolatedvalue2 = LinLinInterpolate(e21, e22, e, xs21, xs22); + G4double value = LinLinInterpolate(t1, t2, t, interpolatedvalue1, interpolatedvalue2); - return value; + return value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNAPTBElasticModel::RandomizeCosTheta(G4double k, const G4String& materialName) +G4double G4DNAPTBElasticModel::RandomizeCosTheta(const G4double& k, const std::size_t& materialID) { - G4double integrdiff=0; - G4double uniformRand=G4UniformRand(); - integrdiff = uniformRand; + G4double integrdiff = 0; + G4double uniformRand = G4UniformRand(); + integrdiff = uniformRand; - G4double theta=0.; - G4double cosTheta=0.; - theta = Theta(G4Electron::ElectronDefinition(),k/eV,integrdiff, materialName); + G4double theta = 0.; + G4double cosTheta = 0.; + theta = Theta(G4Electron::ElectronDefinition(), k / eV, integrdiff, materialID); - cosTheta= std::cos(theta*pi/180); + cosTheta = std::cos(theta * CLHEP::pi / 180); - return cosTheta; + return cosTheta; } - - - - diff --git a/source/processes/electromagnetic/dna/models/src/G4DNAPTBExcitationModel.cc b/source/processes/electromagnetic/dna/models/src/G4DNAPTBExcitationModel.cc index 893e72121ea..58a87c0e0da 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNAPTBExcitationModel.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNAPTBExcitationModel.cc @@ -29,316 +29,316 @@ // #include "G4DNAPTBExcitationModel.hh" -#include "G4SystemOfUnits.hh" + #include "G4DNAChemistryManager.hh" +#include "G4DNAMaterialManager.hh" #include "G4DNAMolecularMaterial.hh" +#include "G4SystemOfUnits.hh" -G4DNAPTBExcitationModel::G4DNAPTBExcitationModel(const G4String& applyToMaterial, const G4ParticleDefinition*, - const G4String& nam) - : G4VDNAModel(nam, applyToMaterial) +G4DNAPTBExcitationModel::G4DNAPTBExcitationModel(const G4String& applyToMaterial, + const G4ParticleDefinition*, const G4String& nam) + : G4VDNAModel(nam, applyToMaterial) { - verboseLevel= 0; - // Verbosity scale: - // 0 = nothing - // 1 = warning for energy non-conservation - // 2 = details of energy budget - // 3 = calculation of cross sections, file openings, sampling of atoms - // 4 = entering in methods - - // initialisation of mean energy loss for each material - tableMeanEnergyPTB["THF"] = 8.01*eV; - tableMeanEnergyPTB["PY"] = 7.61*eV; - tableMeanEnergyPTB["PU"] = 7.61*eV; - tableMeanEnergyPTB["TMP"] = 8.01*eV; - - if( verboseLevel>0 ) - { - G4cout << "PTB excitation model is constructed " << G4endl; - } -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - -G4DNAPTBExcitationModel::~G4DNAPTBExcitationModel() -{ - + fpTHF = G4Material::GetMaterial("THF", false); + fpPY = G4Material::GetMaterial("PY", false); + fpPU = G4Material::GetMaterial("PU", false); + fpTMP = G4Material::GetMaterial("TMP", false); + fpG4_WATER = G4Material::GetMaterial("G4_WATER", false); + fpBackbone_THF = G4Material::GetMaterial("backbone_THF", false); + fpCytosine_PY = G4Material::GetMaterial("cytosine_PY", false); + fpThymine_PY = G4Material::GetMaterial("thymine_PY", false); + fpAdenine_PU = G4Material::GetMaterial("adenine_PU", false); + fpBackbone_TMP = G4Material::GetMaterial("backbone_TMP", false); + fpGuanine_PU = G4Material::GetMaterial("guanine_PU", false); + fpN2 = G4Material::GetMaterial("N2", false); + // initialisation of mean energy loss for each material + + if (fpTHF != nullptr) { + fTableMeanEnergyPTB[fpTHF->GetIndex()] = 8.01 * eV; + } + + if (fpPY != nullptr) { + fTableMeanEnergyPTB[fpPY->GetIndex()] = 7.61 * eV; + } + + if (fpPU != nullptr) { + fTableMeanEnergyPTB[fpPU->GetIndex()] = 7.61 * eV; + } + if (fpTMP) { + fTableMeanEnergyPTB[fpTMP->GetIndex()] = 8.01 * eV; + } + + if (verboseLevel > 0) { + G4cout << "PTB excitation model is constructed " << G4endl; + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... void G4DNAPTBExcitationModel::Initialise(const G4ParticleDefinition* particle, - const G4DataVector& /*cuts*/, G4ParticleChangeForGamma*) + const G4DataVector& /*cuts*/) { - if (verboseLevel > 3) - G4cout << "Calling G4DNAPTBExcitationModel::Initialise()" << G4endl; - - G4double scaleFactor = 1e-16*cm*cm; - G4double scaleFactorBorn = (1.e-22 / 3.343) * m*m; - - G4ParticleDefinition* electronDef = G4Electron::ElectronDefinition(); - - //******************************************************* - // Cross section data - //******************************************************* - - if(particle == electronDef) - { - G4String particleName = particle->GetParticleName(); - - AddCrossSectionData("THF", - particleName, - "dna/sigma_excitation_e-_PTB_THF", - scaleFactor); - SetLowELimit("THF", particleName, 9.*eV); - SetHighELimit("THF", particleName, 1.*keV); - - AddCrossSectionData("PY", - particleName, - "dna/sigma_excitation_e-_PTB_PY", - scaleFactor); - SetLowELimit("PY", particleName, 9.*eV); - SetHighELimit("PY", particleName, 1.*keV); - - AddCrossSectionData("PU", - particleName, - "dna/sigma_excitation_e-_PTB_PU", - scaleFactor); - SetLowELimit("PU", particleName, 9.*eV); - SetHighELimit("PU", particleName, 1.*keV); - - AddCrossSectionData("TMP", - particleName, - "dna/sigma_excitation_e-_PTB_TMP", - scaleFactor); - SetLowELimit("TMP", particleName, 9.*eV); - SetHighELimit("TMP", particleName, 1.*keV); - - AddCrossSectionData("G4_WATER", - particleName, - "dna/sigma_excitation_e_born", - scaleFactorBorn); - SetLowELimit("G4_WATER", particleName, 9.*eV); - SetHighELimit("G4_WATER", particleName, 1.*keV); - - // DNA materials - // - AddCrossSectionData("backbone_THF", - particleName, - "dna/sigma_excitation_e-_PTB_THF", - scaleFactor*33./30); - SetLowELimit("backbone_THF", particleName, 9.*eV); - SetHighELimit("backbone_THF", particleName, 1.*keV); - - AddCrossSectionData("cytosine_PY", - particleName, - "dna/sigma_excitation_e-_PTB_PY", - scaleFactor*42./30); - SetLowELimit("cytosine_PY", particleName, 9.*eV); - SetHighELimit("cytosine_PY", particleName, 1.*keV); - - AddCrossSectionData("thymine_PY", - particleName, - "dna/sigma_excitation_e-_PTB_PY", - scaleFactor*48./30); - SetLowELimit("thymine_PY", particleName, 9.*eV); - SetHighELimit("thymine_PY", particleName, 1.*keV); - - AddCrossSectionData("adenine_PU", - particleName, - "dna/sigma_excitation_e-_PTB_PU", - scaleFactor*50./44); - SetLowELimit("adenine_PU", particleName, 9.*eV); - SetHighELimit("adenine_PU", particleName, 1.*keV); - - AddCrossSectionData("guanine_PU", - particleName, - "dna/sigma_excitation_e-_PTB_PU", - scaleFactor*56./44); - SetLowELimit("guanine_PU", particleName, 9.*eV); - SetHighELimit("guanine_PU", particleName, 1.*keV); - - AddCrossSectionData("backbone_TMP", - particleName, - "dna/sigma_excitation_e-_PTB_TMP", - scaleFactor*33./50); - SetLowELimit("backbone_TMP", particleName, 9.*eV); - SetHighELimit("backbone_TMP", particleName, 1.*keV); - - // MPietrzak, adding paths for N2 - AddCrossSectionData("N2", - particleName, - "dna/sigma_excitation_e-_PTB_N2", - scaleFactor); - SetLowELimit("N2", particleName, 13.*eV); - SetHighELimit("N2", particleName, 1.02*MeV); - // MPietrzak - } - - //******************************************************* + if (isInitialised) { + return; + } + if (verboseLevel > 3) + { + G4cout << "Calling G4DNAPTBExcitationModel::Initialise()" << G4endl; + } + + if (particle != G4Electron::ElectronDefinition()) { + std::ostringstream oss; + oss << " Model is not applied for this particle " << particle->GetParticleName(); + G4Exception("G4DNAPTBExcitationModel::Initialise", "PTB001", FatalException, oss.str().c_str()); + } + + G4double scaleFactor = 1e-16 * cm * cm; + G4double scaleFactorBorn = (1.e-22 / 3.343) * m * m; + + //******************************************************* + // Cross section data + //******************************************************* + std::size_t index; + if (fpTHF != nullptr) { + index = fpTHF->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_excitation_e-_PTB_THF", scaleFactor); + SetLowELimit(index, particle, 9. * eV); + SetHighELimit(index, particle, 1. * keV); + } + if (fpPY != nullptr) { + index = fpPY->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_excitation_e-_PTB_PY", scaleFactor); + SetLowELimit(index, particle, 9. * eV); + SetHighELimit(index, particle, 1. * keV); + } + + if (fpPU != nullptr) { + index = fpPU->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_excitation_e-_PTB_PU", scaleFactor); + SetLowELimit(index, particle, 9. * eV); + SetHighELimit(index, particle, 1. * keV); + } + + if (fpTMP != nullptr) { + index = fpTMP->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_excitation_e-_PTB_TMP", scaleFactor); + SetLowELimit(index, particle, 9. * eV); + SetHighELimit(index, particle, 1. * keV); + } + if (fpG4_WATER != nullptr) { + index = fpG4_WATER->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_excitation_e_born", scaleFactorBorn); + SetLowELimit(index, particle, 9. * eV); + SetHighELimit(index, particle, 1. * keV); + } + // DNA materials + // + if (fpBackbone_THF != nullptr) { + index = fpBackbone_THF->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_excitation_e-_PTB_THF", scaleFactor * 33. / 30); + SetLowELimit(index, particle, 9. * eV); + SetHighELimit(index, particle, 1. * keV); + } + if (fpCytosine_PY != nullptr) { + index = fpCytosine_PY->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_excitation_e-_PTB_PY", scaleFactor * 42. / 30); + SetLowELimit(index, particle, 9. * eV); + SetHighELimit(index, particle, 1. * keV); + } + if (fpThymine_PY != nullptr) { + index = fpThymine_PY->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_excitation_e-_PTB_PY", scaleFactor * 48. / 30); + SetLowELimit(index, particle, 9. * eV); + SetHighELimit(index, particle, 1. * keV); + } + if (fpAdenine_PU != nullptr) { + index = fpAdenine_PU->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_excitation_e-_PTB_PU", scaleFactor * 50. / 44); + SetLowELimit(index, particle, 9. * eV); + SetHighELimit(index, particle, 1. * keV); + } + if (fpGuanine_PU != nullptr) { + index = fpGuanine_PU->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_excitation_e-_PTB_PU", scaleFactor * 56. / 44); + SetLowELimit(index, particle, 9. * eV); + SetHighELimit(index, particle, 1. * keV); + } + if (fpBackbone_TMP != nullptr) { + index = fpBackbone_TMP->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_excitation_e-_PTB_TMP", scaleFactor * 33. / 50); + SetLowELimit(index, particle, 9. * eV); + SetHighELimit(index, particle, 1. * keV); + } + // MPietrzak, adding paths for N2 + if (fpN2 != nullptr) { + index = fpN2->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_excitation_e-_PTB_N2", scaleFactor); + SetLowELimit(index, particle, 13. * eV); + SetHighELimit(index, particle, 1.02 * MeV); + } + if (!G4DNAMaterialManager::Instance()->IsLocked()) { // Load data - //******************************************************* - - LoadCrossSectionData(particle->GetParticleName() ); - - //******************************************************* - // Verbose - //******************************************************* - - if( verboseLevel>0 ) - { - G4cout << "PTB excitation model is initialized " << G4endl; + LoadCrossSectionData(particle); + G4DNAMaterialManager::Instance()->SetMasterDataModel(DNAModelType::fDNAExcitation, this); + fpModelData = this; + } + else { + auto dataModel = dynamic_cast( + G4DNAMaterialManager::Instance()->GetModel(DNAModelType::fDNAExcitation)); + if (dataModel == nullptr) { + G4cout << "G4DNAPTBExcitationModel::Initialise:: not good modelData" << G4endl; + G4Exception("G4DNAPTBExcitationModel::Initialise", "PTB0006", FatalException, + "not good modelData"); + } + else { + fpModelData = dataModel; } + } + + fParticleChangeForGamma = GetParticleChangeForGamma(); + isInitialised = true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNAPTBExcitationModel::CrossSectionPerVolume(const G4Material* /*material*/, - const G4String& materialName, - const G4ParticleDefinition* particleDefinition, - G4double ekin, - G4double /*emin*/, +G4double G4DNAPTBExcitationModel::CrossSectionPerVolume(const G4Material* material, + const G4ParticleDefinition* p, + G4double ekin, G4double /*emin*/, G4double /*emax*/) { - if (verboseLevel > 3) - G4cout << "Calling CrossSectionPerVolume() of G4DNAPTBExcitationModel" << G4endl; - - // Get the name of the current particle - G4String particleName = particleDefinition->GetParticleName(); - - // initialise variables - G4double lowLim = 0; - G4double highLim = 0; - G4double sigma=0; - - // Get the low energy limit for the current particle - lowLim = GetLowELimit(materialName, particleName); - - // Get the high energy limit for the current particle - highLim = GetHighELimit(materialName, particleName); - - // Check that we are in the correct energy range - if (ekin >= lowLim && ekin < highLim) - { - // Get the map with all the data tables - TableMapData* tableData = GetTableData(); - - // Retrieve the cross section value - sigma = (*tableData)[materialName][particleName]->FindValue(ekin); - - if (verboseLevel > 2) - { - G4cout << "__________________________________" << G4endl; - G4cout << "°°° G4DNAPTBExcitationModel - XS INFO START" << G4endl; - G4cout << "°°° Kinetic energy(eV)=" << ekin/eV << " particle : " << particleName << G4endl; - G4cout << "°°° Cross section per "<< materialName <<" molecule (cm^2)=" << sigma/cm/cm << G4endl; - G4cout << "°°° G4DNAPTBExcitationModel - XS INFO END" << G4endl; - } - + // Get the name of the current particle + G4String particleName = p->GetParticleName(); + const std::size_t& MatID = material->GetIndex(); + // initialise variables + G4double lowLim; + G4double highLim; + G4double sigma = 0; + + // Get the low energy limit for the current particle + lowLim = fpModelData->GetLowELimit(MatID, p); + + // Get the high energy limit for the current particle + highLim = fpModelData->GetHighELimit(MatID, p); + + // Check that we are in the correct energy range + if (ekin >= lowLim && ekin < highLim) { + // Get the map with all the data tables + auto Data = fpModelData->GetData(); + + if ((*Data)[MatID][p] == nullptr) { + G4Exception("G4DNAPTBExcitationModel::CrossSectionPerVolume", "em00236", FatalException, + "No model is registered"); } + // Retrieve the cross section value + sigma = (*Data)[MatID][p]->FindValue(ekin); + + if (verboseLevel > 2) { + G4cout << "__________________________________" << G4endl; + G4cout << "°°° G4DNAPTBExcitationModel - XS INFO START" << G4endl; + G4cout << "°°° Kinetic energy(eV)=" << ekin / eV << " particle : " << particleName << G4endl; + G4cout << "°°° Cross section per " << MatID << " ID molecule (cm^2)=" << sigma / cm / cm + << G4endl; + G4cout << "°°° G4DNAPTBExcitationModel - XS INFO END" << G4endl; + } + } - // Return the cross section value - return sigma; + // Return the cross section value + auto MolDensity = + (*G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(material))[MatID]; + return sigma * MolDensity; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... void G4DNAPTBExcitationModel::SampleSecondaries(std::vector* fvect, - const G4MaterialCutsCouple* /*couple*/, - const G4String& materialName, + const G4MaterialCutsCouple* couple, const G4DynamicParticle* aDynamicParticle, - G4ParticleChangeForGamma* particleChangeForGamma, - G4double /*tmin*/, - G4double /*tmax*/) + G4double /*tmin*/, G4double /*tmax*/) { - if (verboseLevel > 3) - G4cout << "Calling SampleSecondaries() of G4DNAPTBExcitationModel" << G4endl; - - // Get the incident particle kinetic energy - G4double k = aDynamicParticle->GetKineticEnergy(); - //Get the particle name - const G4String& particleName = aDynamicParticle->GetDefinition()->GetParticleName(); - // Get the energy limits - G4double lowLim = GetLowELimit(materialName, particleName); - G4double highLim = GetHighELimit(materialName, particleName); - - // Check if we are in the correct energy range - if (k >= lowLim && k < highLim) - { - if(materialName=="N2") - { - - // Retrieve the excitation energy for the current material - G4int level = RandomSelectShell(k,particleName,materialName); - G4double excitationEnergy = ptbExcitationStructure.ExcitationEnergy(level, materialName); - - // Calculate the new energy of the particle - G4double newEnergy = k - excitationEnergy; - - // Check that the new energy is above zero before applying it the particle. - // Otherwise, do nothing. - if (newEnergy > 0) - { - particleChangeForGamma->ProposeMomentumDirection(aDynamicParticle->GetMomentumDirection()); - particleChangeForGamma->SetProposedKineticEnergy(newEnergy); - particleChangeForGamma->ProposeLocalEnergyDeposit(excitationEnergy); - G4double ioniThres = ptbIonisationStructure.IonisationEnergy(0,materialName); - // if excitation energy greater than ionisation threshold, then autoionisaiton - if((excitationEnergy>ioniThres)&&(G4UniformRand()<0.5)) - { - particleChangeForGamma->ProposeLocalEnergyDeposit(ioniThres); - // energy of ejected electron - G4double secondaryKinetic = excitationEnergy - ioniThres; - // random direction - G4double cosTheta = 2*G4UniformRand() - 1., phi = CLHEP::twopi*G4UniformRand(); - G4double sinTheta = std::sqrt(1. - cosTheta*cosTheta); - G4double ux = sinTheta*std::cos(phi), - uy = sinTheta*std::sin(phi), - uz = cosTheta; - G4ThreeVector deltaDirection(ux,uy,uz); - // Create the new particle with its characteristics - G4DynamicParticle* dp = new G4DynamicParticle (G4Electron::Electron(),deltaDirection,secondaryKinetic) ; - fvect->push_back(dp); - } - } else { - G4ExceptionDescription description; - description<<"Kinetic energy <= 0 at "< 0){ - particleChangeForGamma->ProposeMomentumDirection(aDynamicParticle->GetMomentumDirection()); - particleChangeForGamma->SetProposedKineticEnergy(newEnergy); - particleChangeForGamma->ProposeLocalEnergyDeposit(excitationEnergy); - } else { - G4ExceptionDescription description; - description<<"Kinetic energy <= 0 at "< 0){ - particleChangeForGamma->ProposeMomentumDirection(aDynamicParticle->GetMomentumDirection()); - particleChangeForGamma->SetProposedKineticEnergy(newEnergy); - particleChangeForGamma->ProposeLocalEnergyDeposit(excitationEnergy); - const G4Track * theIncomingTrack = particleChangeForGamma->GetCurrentTrack(); - G4DNAChemistryManager::Instance()->CreateWaterMolecule(eExcitedMolecule, - level, - theIncomingTrack); - } else { - G4ExceptionDescription description; - description<<"Kinetic energy <= 0 at "<GetIndex(); + + // Get the incident particle kinetic energy + G4double k = aDynamicParticle->GetKineticEnergy(); + // Get the particle name + const auto& particle = aDynamicParticle->GetDefinition(); + // Get the energy limits + G4double lowLim = fpModelData->GetLowELimit(materialID, particle); + G4double highLim = fpModelData->GetHighELimit(materialID, particle); + + // Check if we are in the correct energy range + if (k >= lowLim && k < highLim) { + if (fpN2 != nullptr && materialID == fpN2->GetIndex()) { + // Retrieve the excitation energy for the current material + G4int level = fpModelData->RandomSelectShell(k, particle, materialID); + G4double excitationEnergy = ptbExcitationStructure.ExcitationEnergy(level, fpN2->GetIndex()); + + // Calculate the new energy of the particle + G4double newEnergy = k - excitationEnergy; + + // Check that the new energy is above zero before applying it the particle. + // Otherwise, do nothing. + if (newEnergy > 0) { + fParticleChangeForGamma->ProposeMomentumDirection(aDynamicParticle->GetMomentumDirection()); + fParticleChangeForGamma->SetProposedKineticEnergy(newEnergy); + fParticleChangeForGamma->ProposeLocalEnergyDeposit(excitationEnergy); + G4double ioniThres = ptbIonisationStructure.IonisationEnergy(0, fpN2->GetIndex()); + // if excitation energy greater than ionisation threshold, then autoionisaiton + if ((excitationEnergy > ioniThres) && (G4UniformRand() < 0.5)) { + fParticleChangeForGamma->ProposeLocalEnergyDeposit(ioniThres); + // energy of ejected electron + G4double secondaryKinetic = excitationEnergy - ioniThres; + // random direction + G4double cosTheta = 2 * G4UniformRand() - 1., phi = CLHEP::twopi * G4UniformRand(); + G4double sinTheta = std::sqrt(1. - cosTheta * cosTheta); + G4double ux = sinTheta * std::cos(phi), uy = sinTheta * std::sin(phi), uz = cosTheta; + G4ThreeVector deltaDirection(ux, uy, uz); + // Create the new particle with its characteristics + auto dp = new G4DynamicParticle(G4Electron::Electron(), deltaDirection, secondaryKinetic); + fvect->push_back(dp); } + } + else { + G4ExceptionDescription description; + description << "Kinetic energy <= 0 at " << fpN2->GetName() << " material !!!"; + G4Exception("G4DNAPTBExcitationModel::SampleSecondaries", "", FatalException, description); + } + } + else if (fpG4_WATER == nullptr || materialID != fpG4_WATER->GetIndex()) { + // Retrieve the excitation energy for the current material + G4double excitationEnergy = fTableMeanEnergyPTB[materialID]; + // Calculate the new energy of the particle + G4double newEnergy = k - excitationEnergy; + // Check that the new energy is above zero before applying it the particle. + // Otherwise, do nothing. + if (newEnergy > 0) { + fParticleChangeForGamma->ProposeMomentumDirection(aDynamicParticle->GetMomentumDirection()); + fParticleChangeForGamma->SetProposedKineticEnergy(newEnergy); + fParticleChangeForGamma->ProposeLocalEnergyDeposit(excitationEnergy); + } + else { + G4ExceptionDescription description; + description << "Kinetic energy <= 0 at " << materialID << " index material !!!"; + G4Exception("G4DNAPTBExcitationModel::SampleSecondaries", "", FatalException, description); + } + } + else { + G4int level = RandomSelectShell(k, particle, materialID); + G4double excitationEnergy = waterStructure.ExcitationEnergy(level); + G4double newEnergy = k - excitationEnergy; + + if (newEnergy > 0) { + fParticleChangeForGamma->ProposeMomentumDirection(aDynamicParticle->GetMomentumDirection()); + fParticleChangeForGamma->SetProposedKineticEnergy(newEnergy); + fParticleChangeForGamma->ProposeLocalEnergyDeposit(excitationEnergy); + const G4Track* theIncomingTrack = fParticleChangeForGamma->GetCurrentTrack(); + G4DNAChemistryManager::Instance()->CreateWaterMolecule(eExcitedMolecule, level, + theIncomingTrack); + } + else { + G4ExceptionDescription description; + description << "Kinetic energy <= 0 at " << materialID << " ID material !!!"; + G4Exception("G4DNAPTBExcitationModel::SampleSecondaries", "", FatalException, description); + } } - + } } diff --git a/source/processes/electromagnetic/dna/models/src/G4DNAPTBIonisationModel.cc b/source/processes/electromagnetic/dna/models/src/G4DNAPTBIonisationModel.cc index 61e7bda4246..2a1738d4bfa 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNAPTBIonisationModel.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNAPTBIonisationModel.cc @@ -29,978 +29,948 @@ // #include "G4DNAPTBIonisationModel.hh" + +#include "G4DNAChemistryManager.hh" +#include "G4DNAMaterialManager.hh" +#include "G4LossTableManager.hh" #include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" #include "G4UAtomicDeexcitation.hh" -#include "G4LossTableManager.hh" -#include "G4DNAChemistryManager.hh" - G4DNAPTBIonisationModel::G4DNAPTBIonisationModel(const G4String& applyToMaterial, - const G4ParticleDefinition*, - const G4String& nam, const G4bool isAuger) - : G4VDNAModel(nam, applyToMaterial) + const G4ParticleDefinition*, const G4String& nam, + const G4bool isAuger) + : G4VDNAModel(nam, applyToMaterial) { - verboseLevel= 0; - // Verbosity scale: - // 0 = nothing - // 1 = warning for energy non-conservation - // 2 = details of energy budget - // 3 = calculation of cross sections, file openings, sampling of atoms - // 4 = entering in methods - - if( verboseLevel>0 ) - { - G4cout << "PTB ionisation model is constructed " << G4endl; - } - - if(isAuger) - { - // create the PTB Auger model - fDNAPTBAugerModel = new G4DNAPTBAugerModel("e-_G4DNAPTBAugerModel"); - } - else - { - // no PTB Auger model - fDNAPTBAugerModel = 0; - } + if (isAuger) { + // create the PTB Auger model + fpDNAPTBAugerModel = std::make_unique("e-_G4DNAPTBAugerModel"); + } + fpTHF = G4Material::GetMaterial("THF", false); + fpPY = G4Material::GetMaterial("PY", false); + fpPU = G4Material::GetMaterial("PU", false); + fpTMP = G4Material::GetMaterial("TMP", false); + fpG4_WATER = G4Material::GetMaterial("G4_WATER", false); + fpBackbone_THF = G4Material::GetMaterial("backbone_THF", false); + fpCytosine_PY = G4Material::GetMaterial("cytosine_PY", false); + fpThymine_PY = G4Material::GetMaterial("thymine_PY", false); + fpAdenine_PU = G4Material::GetMaterial("adenine_PU", false); + fpBackbone_TMP = G4Material::GetMaterial("backbone_TMP", false); + fpGuanine_PU = G4Material::GetMaterial("guanine_PU", false); + fpN2 = G4Material::GetMaterial("N2", false); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4DNAPTBIonisationModel::~G4DNAPTBIonisationModel() +void G4DNAPTBIonisationModel::Initialise(const G4ParticleDefinition* particle, + const G4DataVector& /*cuts*/) { - // To delete the DNAPTBAugerModel created at initialisation of the ionisation class - if(fDNAPTBAugerModel) delete fDNAPTBAugerModel; -} + if (isInitialised) { + return; + } + if (verboseLevel > 3) { + G4cout << "Calling G4DNAPTBIonisationModel::Initialise()" << G4endl; + } + + G4double scaleFactor = 1e-16 * cm * cm; + G4double scaleFactorBorn = (1.e-22 / 3.343) * m * m; + + G4ParticleDefinition* electronDef = G4Electron::ElectronDefinition(); + G4ParticleDefinition* protonDef = G4Proton::ProtonDefinition(); + + //******************************************************* + // Cross section data + //******************************************************* + std::size_t index; + if (particle == electronDef) { + // Raw materials + // + // MPietrzak + if (fpN2 != nullptr) { + index = fpN2->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_ionisation_e-_PTB_N2", + "dna/sigmadiff_cumulated_ionisation_e-_PTB_N2", scaleFactor); + SetLowELimit(index, particle, 15.5 * eV); + SetHighELimit(index, particle, 1.02 * MeV); + } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + // MPietrzak -void G4DNAPTBIonisationModel::Initialise(const G4ParticleDefinition* particle, - const G4DataVector& /*cuts*/, G4ParticleChangeForGamma*) -{ + if (fpTHF != nullptr) { + index = fpTHF->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_ionisation_e-_PTB_THF", + "dna/sigmadiff_cumulated_ionisation_e-_PTB_THF", scaleFactor); + SetLowELimit(index, particle, 12. * eV); + SetHighELimit(index, particle, 1. * keV); + } - if (verboseLevel > 3) - G4cout << "Calling G4DNAPTBIonisationModel::Initialise()" << G4endl; + if (fpPY != nullptr) { + index = fpPY->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_ionisation_e-_PTB_PY", + "dna/sigmadiff_cumulated_ionisation_e-_PTB_PY", scaleFactor); + SetLowELimit(index, particle, 12. * eV); + SetHighELimit(index, particle, 1. * keV); + } - G4double scaleFactor = 1e-16 * cm*cm; - G4double scaleFactorBorn = (1.e-22 / 3.343) * m*m; + if (fpPU != nullptr) { + index = fpPU->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_ionisation_e-_PTB_PU", + "dna/sigmadiff_cumulated_ionisation_e-_PTB_PU", scaleFactor); + SetLowELimit(index, particle, 12. * eV); + SetHighELimit(index, particle, 1. * keV); + } + if (fpTMP != nullptr) { + index = fpTMP->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_ionisation_e-_PTB_TMP", + "dna/sigmadiff_cumulated_ionisation_e-_PTB_TMP", scaleFactor); + SetLowELimit(index, particle, 12. * eV); + SetHighELimit(index, particle, 1. * keV); + } - G4ParticleDefinition* electronDef = G4Electron::ElectronDefinition(); - G4ParticleDefinition* protonDef= G4Proton::ProtonDefinition(); + if (fpG4_WATER != nullptr) { + index = fpG4_WATER->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_ionisation_e_born", + "dna/sigmadiff_ionisation_e_born", scaleFactorBorn); + SetLowELimit(index, particle, 12. * eV); + SetHighELimit(index, particle, 1. * keV); + } + // DNA materials + // + if (fpBackbone_THF != nullptr) { + index = fpBackbone_THF->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_ionisation_e-_PTB_THF", + "dna/sigmadiff_cumulated_ionisation_e-_PTB_THF", scaleFactor * 33. / 30); + SetLowELimit(index, particle, 12. * eV); + SetHighELimit(index, particle, 1. * keV); + } - //******************************************************* - // Cross section data - //******************************************************* + if (fpCytosine_PY != nullptr) { + index = fpCytosine_PY->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_ionisation_e-_PTB_PY", + "dna/sigmadiff_cumulated_ionisation_e-_PTB_PY", scaleFactor * 42. / 30); + SetLowELimit(index, particle, 12. * eV); + SetHighELimit(index, particle, 1. * keV); + } - if(particle == electronDef) - { - G4String particleName = particle->GetParticleName(); - - // Raw materials - // - // MPietrzak - AddCrossSectionData("N2", - particleName, - "dna/sigma_ionisation_e-_PTB_N2", - "dna/sigmadiff_cumulated_ionisation_e-_PTB_N2", - scaleFactor); - SetLowELimit("N2", particleName, 15.5*eV); - SetHighELimit("N2", particleName, 1.02*MeV); - // MPietrzak - - AddCrossSectionData("THF", - particleName, - "dna/sigma_ionisation_e-_PTB_THF", - "dna/sigmadiff_cumulated_ionisation_e-_PTB_THF", - scaleFactor); - SetLowELimit("THF", particleName, 12.*eV); - SetHighELimit("THF", particleName, 1.*keV); - - AddCrossSectionData("PY", - particleName, - "dna/sigma_ionisation_e-_PTB_PY", - "dna/sigmadiff_cumulated_ionisation_e-_PTB_PY", - scaleFactor); - SetLowELimit("PY", particleName, 12.*eV); - SetHighELimit("PY", particleName, 1.*keV); - - AddCrossSectionData("PU", - particleName, - "dna/sigma_ionisation_e-_PTB_PU", - "dna/sigmadiff_cumulated_ionisation_e-_PTB_PU", - scaleFactor); - SetLowELimit("PU", particleName, 12.*eV); - SetHighELimit("PU", particleName, 1.*keV); - - AddCrossSectionData("TMP", - particleName, - "dna/sigma_ionisation_e-_PTB_TMP", - "dna/sigmadiff_cumulated_ionisation_e-_PTB_TMP", - scaleFactor); - SetLowELimit("TMP", particleName, 12.*eV); - SetHighELimit("TMP", particleName, 1.*keV); - - AddCrossSectionData("G4_WATER", - particleName, - "dna/sigma_ionisation_e_born", - "dna/sigmadiff_ionisation_e_born", - scaleFactorBorn); - SetLowELimit("G4_WATER", particleName, 12.*eV); - SetHighELimit("G4_WATER", particleName, 1.*keV); - - // DNA materials - // - AddCrossSectionData("backbone_THF", - particleName, - "dna/sigma_ionisation_e-_PTB_THF", - "dna/sigmadiff_cumulated_ionisation_e-_PTB_THF", - scaleFactor*33./30); - SetLowELimit("backbone_THF", particleName, 12.*eV); - SetHighELimit("backbone_THF", particleName, 1.*keV); - - AddCrossSectionData("cytosine_PY", - particleName, - "dna/sigma_ionisation_e-_PTB_PY", - "dna/sigmadiff_cumulated_ionisation_e-_PTB_PY", - scaleFactor*42./30); - SetLowELimit("cytosine_PY", particleName, 12.*eV); - SetHighELimit("cytosine_PY", particleName, 1.*keV); - - AddCrossSectionData("thymine_PY", - particleName, - "dna/sigma_ionisation_e-_PTB_PY", - "dna/sigmadiff_cumulated_ionisation_e-_PTB_PY", - scaleFactor*48./30); - SetLowELimit("thymine_PY", particleName, 12.*eV); - SetHighELimit("thymine_PY", particleName, 1.*keV); - - AddCrossSectionData("adenine_PU", - particleName, - "dna/sigma_ionisation_e-_PTB_PU", - "dna/sigmadiff_cumulated_ionisation_e-_PTB_PU", - scaleFactor*50./44); - SetLowELimit("adenine_PU", particleName, 12.*eV); - SetHighELimit("adenine_PU", particleName, 1.*keV); - - AddCrossSectionData("guanine_PU", - particleName, - "dna/sigma_ionisation_e-_PTB_PU", - "dna/sigmadiff_cumulated_ionisation_e-_PTB_PU", - scaleFactor*56./44); - SetLowELimit("guanine_PU", particleName, 12.*eV); - SetHighELimit("guanine_PU", particleName, 1.*keV); - - AddCrossSectionData("backbone_TMP", - particleName, - "dna/sigma_ionisation_e-_PTB_TMP", - "dna/sigmadiff_cumulated_ionisation_e-_PTB_TMP", - scaleFactor*33./50); - SetLowELimit("backbone_TMP", particleName, 12.*eV); - SetHighELimit("backbone_TMP", particleName, 1.*keV); - } - - else if (particle == protonDef) - { - G4String particleName = particle->GetParticleName(); - - // Raw materials - // - AddCrossSectionData("THF", - particleName, - "dna/sigma_ionisation_p_HKS_THF", - "dna/sigmadiff_cumulated_ionisation_p_PTB_THF", - scaleFactor); - SetLowELimit("THF", particleName, 70.*keV); - SetHighELimit("THF", particleName, 10.*MeV); - - - AddCrossSectionData("PY", - particleName, - "dna/sigma_ionisation_p_HKS_PY", - "dna/sigmadiff_cumulated_ionisation_p_PTB_PY", - scaleFactor); - SetLowELimit("PY", particleName, 70.*keV); - SetHighELimit("PY", particleName, 10.*MeV); - - /* - AddCrossSectionData("PU", - particleName, - "dna/sigma_ionisation_e-_PTB_PU", - "dna/sigmadiff_cumulated_ionisation_e-_PTB_PU", - scaleFactor); - SetLowELimit("PU", particleName2, 70.*keV); - SetHighELimit("PU", particleName2, 10.*keV); -*/ + if (fpThymine_PY != nullptr) { + index = fpThymine_PY->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_ionisation_e-_PTB_PY", + "dna/sigmadiff_cumulated_ionisation_e-_PTB_PY", scaleFactor * 48. / 30); + SetLowELimit(index, particle, 12. * eV); + SetHighELimit(index, particle, 1. * keV); + } - AddCrossSectionData("TMP", - particleName, - "dna/sigma_ionisation_p_HKS_TMP", - "dna/sigmadiff_cumulated_ionisation_p_PTB_TMP", - scaleFactor); - SetLowELimit("TMP", particleName, 70.*keV); - SetHighELimit("TMP", particleName, 10.*MeV); + if (fpAdenine_PU != nullptr) { + index = fpAdenine_PU->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_ionisation_e-_PTB_PU", + "dna/sigmadiff_cumulated_ionisation_e-_PTB_PU", scaleFactor * 50. / 44); + SetLowELimit(index, particle, 12. * eV); + SetHighELimit(index, particle, 1. * keV); } - // ******************************************************* - // deal with composite materials - // ******************************************************* + if (fpGuanine_PU != nullptr) { + index = fpGuanine_PU->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_ionisation_e-_PTB_PU", + "dna/sigmadiff_cumulated_ionisation_e-_PTB_PU", scaleFactor * 56. / 44); + SetLowELimit(index, particle, 12. * eV); + SetHighELimit(index, particle, 1. * keV); + } + + if (fpBackbone_TMP != nullptr) { + index = fpBackbone_TMP->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_ionisation_e-_PTB_TMP", + "dna/sigmadiff_cumulated_ionisation_e-_PTB_TMP", scaleFactor * 33. / 50); + SetLowELimit(index, particle, 12. * eV); + SetHighELimit(index, particle, 1. * keV); + } + } + + else if (particle == protonDef) { + G4String particleName = particle->GetParticleName(); - LoadCrossSectionData(particle->GetParticleName() ); + // Raw materials + // + if (fpTHF != nullptr) { + index = fpTHF->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_ionisation_p_HKS_THF", + "dna/sigmadiff_cumulated_ionisation_p_PTB_THF", scaleFactor); + SetLowELimit(index, particle, 70. * keV); + SetHighELimit(index, particle, 10. * MeV); + } - // ******************************************************* - // Verbose - // ******************************************************* + if (fpPY != nullptr) { + index = fpPY->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_ionisation_p_HKS_PY", + "dna/sigmadiff_cumulated_ionisation_p_PTB_PY", scaleFactor); + SetLowELimit(index, particle, 70. * keV); + SetHighELimit(index, particle, 10. * MeV); + } + /* + AddCrossSectionData("PU", + particleName, + "dna/sigma_ionisation_e-_PTB_PU", + "dna/sigmadiff_cumulated_ionisation_e-_PTB_PU", + scaleFactor); + SetLowELimit("PU", particleName2, 70.*keV); + SetHighELimit("PU", particleName2, 10.*keV); +*/ - // initialise DNAPTBAugerModel - if(fDNAPTBAugerModel) fDNAPTBAugerModel->Initialise(); + if (fpTMP != nullptr) { + index = fpTMP->GetIndex(); + AddCrossSectionData(index, particle, "dna/sigma_ionisation_p_HKS_TMP", + "dna/sigmadiff_cumulated_ionisation_p_PTB_TMP", scaleFactor); + SetLowELimit(index, particle, 70. * keV); + SetHighELimit(index, particle, 10. * MeV); + } + } + // ******************************************************* + // deal with composite materials + // ******************************************************* + if (!G4DNAMaterialManager::Instance()->IsLocked()) { + LoadCrossSectionData(particle); + G4DNAMaterialManager::Instance()->SetMasterDataModel(DNAModelType::fDNAIonisation, this); + fpModelData = this; + } + else { + auto dataModel = dynamic_cast( + G4DNAMaterialManager::Instance()->GetModel(DNAModelType::fDNAIonisation)); + if (dataModel == nullptr) { + G4cout << "G4DNAPTBIonisationModel::Initialise:: not good modelData" << G4endl; + G4Exception("G4DNAPTBIonisationModel::Initialise", "PTB0004", FatalException, + "not good modelData"); + } + else { + fpModelData = dataModel; + } + } + // initialise DNAPTBAugerModel + if (fpDNAPTBAugerModel) { + fpDNAPTBAugerModel->Initialise(); + } + fParticleChangeForGamma = GetParticleChangeForGamma(); + isInitialised = true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNAPTBIonisationModel::CrossSectionPerVolume(const G4Material* /*material*/, - const G4String& materialName, +G4double G4DNAPTBIonisationModel::CrossSectionPerVolume(const G4Material* material, const G4ParticleDefinition* p, - G4double ekin, - G4double /*emin*/, + G4double ekin, G4double /*emin*/, G4double /*emax*/) { - if(verboseLevel > 3) - G4cout << "Calling CrossSectionPerVolume() of G4DNAPTBIonisationModel" << G4endl; - - // initialise the cross section value (output value) - G4double sigma(0); - - // Get the current particle name - const G4String& particleName = p->GetParticleName(); - - // Set the low and high energy limits - G4double lowLim = GetLowELimit(materialName, particleName); - G4double highLim = GetHighELimit(materialName, particleName); - - // Check that we are in the correct energy range - if (ekin >= lowLim && ekin < highLim) - { - // Get the map with all the model data tables - TableMapData* tableData = GetTableData(); - - // Retrieve the cross section value for the current material, particle and energy values - sigma = (*tableData)[materialName][particleName]->FindValue(ekin); - - if (verboseLevel > 2) - { - G4cout << "__________________________________" << G4endl; - G4cout << "°°° G4DNAPTBIonisationModel - XS INFO START" << G4endl; - G4cout << "°°° Kinetic energy(eV)=" << ekin/eV << " particle : " << particleName << G4endl; - G4cout << "°°° Cross section per "<< materialName <<" molecule (cm^2)=" << sigma/cm/cm << G4endl; - G4cout << "°°° G4DNAPTBIonisationModel - XS INFO END" << G4endl; - } + // initialise the cross section value (output value) + G4double sigma(0); + + // Get the current particle name + const G4String& particleName = p->GetParticleName(); + const std::size_t& matID = material->GetIndex(); + + // Set the low and high energy limits + G4double lowLim = fpModelData->GetLowELimit(matID, p); + G4double highLim = fpModelData->GetHighELimit(matID, p); + + // Check that we are in the correct energy range + if (ekin >= lowLim && ekin < highLim) { + // Get the map with all the model data tables + auto tableData = fpModelData->GetData(); + if ((*tableData)[matID][p] == nullptr) { + G4Exception("G4DNAPTBIonisationModel::CrossSectionPerVolume", "em00236", FatalException, + "No model is registered"); } + // Retrieve the cross section value for the current material, particle and energy values + sigma = (*tableData)[matID][p]->FindValue(ekin); + + if (verboseLevel > 2) { + G4cout << "__________________________________" << G4endl; + G4cout << "°°° G4DNAPTBIonisationModel - XS INFO START" << G4endl; + G4cout << "°°° Kinetic energy(eV)=" << ekin / eV << " particle : " << particleName << G4endl; + G4cout << "°°° Cross section per " << matID << " index molecule (cm^2)=" << sigma / cm / cm + << G4endl; + G4cout << "°°° G4DNAPTBIonisationModel - XS INFO END" << G4endl; + } + } - // Return the cross section value - return sigma; + // Return the cross section value + auto MolDensity = + (*G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(material))[matID]; + return sigma * MolDensity; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... void G4DNAPTBIonisationModel::SampleSecondaries(std::vector* fvect, - const G4MaterialCutsCouple* /*couple*/, - const G4String& materialName, + const G4MaterialCutsCouple* pCouple, const G4DynamicParticle* aDynamicParticle, - G4ParticleChangeForGamma* particleChangeForGamma, - G4double /*tmin*/, - G4double /*tmax*/) + G4double /*tmin*/, G4double /*tmax*/) { - if (verboseLevel > 3) - G4cout << "Calling SampleSecondaries() of G4DNAPTBIonisationModel" << G4endl; + // Get the current particle energy + G4double k = aDynamicParticle->GetKineticEnergy(); + const std::size_t& materialID = pCouple->GetMaterial()->GetIndex(); + + // Get the current particle name + const auto& p = aDynamicParticle->GetDefinition(); + auto materialName = pCouple->GetMaterial()->GetName(); + // Get the energy limits + G4double lowLim = fpModelData->GetLowELimit(materialID, p); + G4double highLim = fpModelData->GetHighELimit(materialID, p); + + // Check if we are in the correct energy range + if (k >= lowLim && k < highLim) { + G4ParticleMomentum primaryDirection = aDynamicParticle->GetMomentumDirection(); + G4double particleMass = aDynamicParticle->GetDefinition()->GetPDGMass(); + G4double totalEnergy = k + particleMass; + G4double pSquare = k * (totalEnergy + particleMass); + G4double totalMomentum = std::sqrt(pSquare); + + // Get the ionisation shell from a random sampling + G4int ionizationShell = fpModelData->RandomSelectShell(k, p, materialID); + + // Get the binding energy from the ptbStructure class + G4double bindingEnergy = ptbStructure.IonisationEnergy(ionizationShell, materialID); + + // Initialize the secondary kinetic energy to a negative value. + G4double secondaryKinetic(-1000 * eV); + + if (fpG4_WATER == nullptr || materialID != fpG4_WATER->GetIndex()) { + // Get the energy of the secondary particle + secondaryKinetic = fpModelData->RandomizeEjectedElectronEnergyFromCumulated( + aDynamicParticle->GetDefinition(), k / eV, ionizationShell, materialID); + } + else { + secondaryKinetic = fpModelData->RandomizeEjectedElectronEnergy( + aDynamicParticle->GetDefinition(), k, ionizationShell, materialID); + } - // Get the current particle energy - G4double k = aDynamicParticle->GetKineticEnergy(); + if (secondaryKinetic <= 0) { + G4cout << "Fatal error *************************************** " << secondaryKinetic / eV + << G4endl; + G4cout << "secondaryKinetic: " << secondaryKinetic / eV << G4endl; + G4cout << "k: " << k / eV << G4endl; + G4cout << "shell: " << ionizationShell << G4endl; + G4cout << "material:" << materialName << G4endl; + G4Exception("G4DNAPTBIonisationModel::SampleSecondaries", "em0026", FatalException, + "Fatal error:: scatteredEnergy <= 0"); + } - // Get the current particle name - const G4String& particleName = aDynamicParticle->GetDefinition()->GetParticleName(); + G4double cosTheta = 0.; + G4double phi = 0.; + RandomizeEjectedElectronDirection(aDynamicParticle->GetDefinition(), k, secondaryKinetic, + cosTheta, phi); + + G4double sinTheta = std::sqrt(1. - cosTheta * cosTheta); + G4double dirX = sinTheta * std::cos(phi); + G4double dirY = sinTheta * std::sin(phi); + G4double dirZ = cosTheta; + G4ThreeVector deltaDirection(dirX, dirY, dirZ); + deltaDirection.rotateUz(primaryDirection); + + // The model is written only for electron and thus we want the change the direction of the + // incident electron after each ionization. However, if other particle are going to be + // introduced within this model the following should be added: + // + // Check if the particle is an electron + if (aDynamicParticle->GetDefinition() == G4Electron::ElectronDefinition()) { + // If yes do the following code until next commented "else" statement + + G4double deltaTotalMomentum = + std::sqrt(secondaryKinetic * (secondaryKinetic + 2. * electron_mass_c2)); + G4double finalPx = + totalMomentum * primaryDirection.x() - deltaTotalMomentum * deltaDirection.x(); + G4double finalPy = + totalMomentum * primaryDirection.y() - deltaTotalMomentum * deltaDirection.y(); + G4double finalPz = + totalMomentum * primaryDirection.z() - deltaTotalMomentum * deltaDirection.z(); + G4double finalMomentum = std::sqrt(finalPx * finalPx + finalPy * finalPy + finalPz * finalPz); + finalPx /= finalMomentum; + finalPy /= finalMomentum; + finalPz /= finalMomentum; + + G4ThreeVector direction(finalPx, finalPy, finalPz); + if (direction.unit().getX() > 1 || direction.unit().getY() > 1 || direction.unit().getZ() > 1) + { + G4cout << "Fatal error ****************************" << G4endl; + G4cout << "direction problem " << direction.unit() << G4endl; + G4Exception("G4DNAPTBIonisationModel::SampleSecondaries", "em0017", FatalException, + "Fatal error:: direction problem"); + } + + // Give the new direction to the particle + fParticleChangeForGamma->ProposeMomentumDirection(direction.unit()); + } + // If the particle is not an electron + else { + fParticleChangeForGamma->ProposeMomentumDirection(primaryDirection); + } + + // note that secondaryKinetic is the energy of the delta ray, not of all secondaries. + G4double scatteredEnergy = k - bindingEnergy - secondaryKinetic; + + if (scatteredEnergy <= 0) { + G4cout << "Fatal error ****************************" << G4endl; + G4cout << "k: " << k / eV << G4endl; + G4cout << "secondaryKinetic: " << secondaryKinetic / eV << G4endl; + G4cout << "shell: " << ionizationShell << G4endl; + G4cout << "bindingEnergy: " << bindingEnergy / eV << G4endl; + G4cout << "scatteredEnergy: " << scatteredEnergy / eV << G4endl; + G4cout << "material: " << materialName << G4endl; + G4Exception("G4DNAPTBIonisationModel::SampleSecondaries", "em0016", FatalException, + "Fatal error:: scatteredEnergy <= 0"); + } - // Get the energy limits - G4double lowLim = GetLowELimit(materialName, particleName); - G4double highLim = GetHighELimit(materialName, particleName); + // Set the new energy of the particle + fParticleChangeForGamma->SetProposedKineticEnergy(scatteredEnergy); - // Check if we are in the correct energy range - if (k >= lowLim && k < highLim) - { - G4ParticleMomentum primaryDirection = aDynamicParticle->GetMomentumDirection(); - G4double particleMass = aDynamicParticle->GetDefinition()->GetPDGMass(); - G4double totalEnergy = k + particleMass; - G4double pSquare = k * (totalEnergy + particleMass); - G4double totalMomentum = std::sqrt(pSquare); - - // Get the ionisation shell from a random sampling - G4int ionizationShell = RandomSelectShell(k, particleName, materialName); - - // Get the binding energy from the ptbStructure class - G4double bindingEnergy = ptbStructure.IonisationEnergy(ionizationShell, materialName); - - // Initialize the secondary kinetic energy to a negative value. - G4double secondaryKinetic (-1000*eV); - - if(materialName!="G4_WATER") - { - // Get the energy of the secondary particle - secondaryKinetic = RandomizeEjectedElectronEnergyFromCumulated(aDynamicParticle->GetDefinition(),k/eV,ionizationShell, materialName); - } - else - { - secondaryKinetic = RandomizeEjectedElectronEnergy(aDynamicParticle->GetDefinition(),k,ionizationShell, materialName); - } - - if(secondaryKinetic<=0) - { - G4cout<<"Fatal error *************************************** "<GetDefinition(), k, secondaryKinetic, cosTheta, phi); - - G4double sinTheta = std::sqrt(1.-cosTheta*cosTheta); - G4double dirX = sinTheta*std::cos(phi); - G4double dirY = sinTheta*std::sin(phi); - G4double dirZ = cosTheta; - G4ThreeVector deltaDirection(dirX,dirY,dirZ); - deltaDirection.rotateUz(primaryDirection); - - // The model is written only for electron and thus we want the change the direction of the incident electron - // after each ionization. However, if other particle are going to be introduced within this model the following should be added: - // - // Check if the particle is an electron - if(aDynamicParticle->GetDefinition() == G4Electron::ElectronDefinition() ) - { - // If yes do the following code until next commented "else" statement - - G4double deltaTotalMomentum = std::sqrt(secondaryKinetic*(secondaryKinetic + 2.*electron_mass_c2 )); - G4double finalPx = totalMomentum*primaryDirection.x() - deltaTotalMomentum*deltaDirection.x(); - G4double finalPy = totalMomentum*primaryDirection.y() - deltaTotalMomentum*deltaDirection.y(); - G4double finalPz = totalMomentum*primaryDirection.z() - deltaTotalMomentum*deltaDirection.z(); - G4double finalMomentum = std::sqrt(finalPx*finalPx + finalPy*finalPy + finalPz*finalPz); - finalPx /= finalMomentum; - finalPy /= finalMomentum; - finalPz /= finalMomentum; - - G4ThreeVector direction(finalPx,finalPy,finalPz); - if(direction.unit().getX()>1||direction.unit().getY()>1||direction.unit().getZ()>1) - { - G4cout<<"Fatal error ****************************"<ProposeMomentumDirection(direction.unit()) ; - } - // If the particle is not an electron - else particleChangeForGamma->ProposeMomentumDirection(primaryDirection) ; - - // note that secondaryKinetic is the energy of the delta ray, not of all secondaries. - G4double scatteredEnergy = k-bindingEnergy-secondaryKinetic; - - if(scatteredEnergy<=0) - { - G4cout<<"Fatal error ****************************"<SetProposedKineticEnergy(scatteredEnergy); - - // Set the energy deposited by the ionization - particleChangeForGamma->ProposeLocalEnergyDeposit(k-scatteredEnergy-secondaryKinetic); - - // Create the new particle with its characteristics - G4DynamicParticle* dp = new G4DynamicParticle (G4Electron::Electron(),deltaDirection,secondaryKinetic) ; - fvect->push_back(dp); - - // Check if the auger model is activated (ie instanciated) - if(fDNAPTBAugerModel) - { - // run the PTB Auger model - if(materialName!="G4_WATER") fDNAPTBAugerModel->ComputeAugerEffect(fvect, materialName, bindingEnergy); - } + // Set the energy deposited by the ionization + fParticleChangeForGamma->ProposeLocalEnergyDeposit(k - scatteredEnergy - secondaryKinetic); + + // Create the new particle with its characteristics + auto dp = new G4DynamicParticle(G4Electron::Electron(), deltaDirection, secondaryKinetic); + fvect->push_back(dp); + + // Check if the auger model is activated (ie instanciated) + if (fpDNAPTBAugerModel) { + // run the PTB Auger model + if (materialName != "G4_WATER") { + fpDNAPTBAugerModel->ComputeAugerEffect(fvect, materialName, bindingEnergy); + } } + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4DNAPTBIonisationModel::ReadDiffCSFile(const G4String& materialName, - const G4String& particleName, - const G4String& file, - const G4double scaleFactor) +void G4DNAPTBIonisationModel::ReadDiffCSFile(const std::size_t& materialID, + const G4ParticleDefinition* p, const G4String& file, + const G4double& scaleFactor) { - // To read and save the informations contained within the differential cross section files - - // get the path of the G4LEDATA data folder - const char* path = G4FindDataDir("G4LEDATA"); - // if it is not found then quit and print error message - if(!path) - { - G4Exception("G4DNAPTBIonisationModel::ReadAllDiffCSFiles","em0006", - FatalException,"G4LEDATA environment variable not set."); - return; + // To read and save the informations contained within the differential cross section files + + // get the path of the G4LEDATA data folder + const char* path = G4FindDataDir("G4LEDATA"); + // if it is not found then quit and print error message + if (!path) { + G4Exception("G4DNAPTBIonisationModel::ReadAllDiffCSFiles", "em0006", FatalException, + "G4LEDATA environment variable was not set."); + return; + } + + // build the fullFileName path of the data file + std::ostringstream fullFileName; + fullFileName << path << "/" << file << ".dat"; + + // open the data file + std::ifstream diffCrossSection(fullFileName.str().c_str()); + // error if file is not there + std::stringstream endPath; + if (!diffCrossSection) { + endPath << "Missing data file: " << file; + G4Exception("G4DNAPTBIonisationModel::Initialise", "em0003", FatalException, + endPath.str().c_str()); + } + + // load data from the file + fTMapWithVec[materialID][p].push_back(0.); + + G4String line; + + // read the file until we reach the end of file point + // fill fTMapWithVec, diffCrossSectionData, fEnergyTransferData, fProbaShellMap and + // fEMapWithVector + while (std::getline(diffCrossSection, line)) { + // check if the line is comment or empty + // + std::istringstream testIss(line); + G4String test; + testIss >> test; + // check first caracter to determine if following information is data or comments + if (test == "#") { + // skip the line by beginning a new while loop. + continue; } - - // build the fullFileName path of the data file - std::ostringstream fullFileName; - fullFileName << path <<"/"<< file<<".dat"; - - // open the data file - std::ifstream diffCrossSection (fullFileName.str().c_str()); - // error if file is not there - std::stringstream endPath; - if (!diffCrossSection) - { - endPath << "Missing data file: "<> test; - // check first caracter to determine if following information is data or comments - if(test=="#") - { - // skip the line by beginning a new while loop. - continue; - } - // check if line is empty - else if(line.empty()) - { - // skip the line by beginning a new while loop. - continue; - } - // - // end of the check - - // transform the line into a iss - std::istringstream iss(line); - - // Initialise the variables to be filled - double T; - double E; - - // Filled T and E with the first two numbers of each file line - iss>>T>>E; - - // Fill the fTMapWithVec container with all the different T values contained within the file. - // Duplicate must be avoided and this is the purpose of the if statement - if (T != fTMapWithVec[materialName][particleName].back()) fTMapWithVec[materialName][particleName].push_back(T); - - // iterate on each shell of the corresponding material - for (int shell=0, eshell=ptbStructure.NumberOfLevels(materialName); shell>diffCrossSectionData[materialName][particleName][shell][T][E]; - - if(materialName!="G4_WATER") - { - // map[material][particle][shell][T][CS]=E - // Fill the map - fEnergySecondaryData[materialName][particleName][shell][T][diffCrossSectionData[materialName][particleName][shell][T][E] ]=E; - - // map[material][particle][shell][T]=CS_vector - // Fill the vector within the map - fProbaShellMap[materialName][particleName][shell][T].push_back(diffCrossSectionData[materialName][particleName][shell][T][E]); - } - else - { - diffCrossSectionData[materialName][particleName][shell][T][E]*=scaleFactor; - - fEMapWithVector[materialName][particleName][T].push_back(E); - } - } + // + // end of the check + + // transform the line into a iss + std::istringstream iss(line); + + // Initialise the variables to be filled + G4double T; + G4double E; + + // Filled T and E with the first two numbers of each file line + iss >> T >> E; + + // Fill the fTMapWithVec container with all the different T values contained within the file. + // Duplicate must be avoided and this is the purpose of the if statement + if (T != fTMapWithVec[materialID][p].back()) fTMapWithVec[materialID][p].push_back(T); + + // iterate on each shell of the corresponding material + for (int shell = 0, eshell = ptbStructure.NumberOfLevels(materialID); shell < eshell; ++shell) { + // map[material][particle][shell][T][E]=diffCrossSectionValue + // Fill the map with the informations of the input file + iss >> diffCrossSectionData[materialID][p][shell][T][E]; + + if (fpG4_WATER != nullptr && fpG4_WATER->GetIndex() != materialID) { + // map[material][particle][shell][T][CS]=E + // Fill the map + fEnergySecondaryData[materialID][p][shell][T] + [diffCrossSectionData[materialID][p][shell][T][E]] = E; + + // map[material][particle][shell][T]=CS_vector + // Fill the vector within the map + fProbaShellMap[materialID][p][shell][T].push_back( + diffCrossSectionData[materialID][p][shell][T][E]); + } + else { + diffCrossSectionData[materialID][p][shell][T][E] *= scaleFactor; + fEMapWithVector[materialID][p][T].push_back(E); + } } + } } - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNAPTBIonisationModel::RandomizeEjectedElectronEnergy(G4ParticleDefinition* particleDefinition, - G4double k, G4int shell, const G4String& materialName) +G4double G4DNAPTBIonisationModel::RandomizeEjectedElectronEnergy( + const G4ParticleDefinition* particleDefinition, G4double k, G4int shell, const std::size_t& materialID) { - if (particleDefinition == G4Electron::ElectronDefinition()) + if (particleDefinition == G4Electron::ElectronDefinition()) { + // G4double Tcut=25.0E-6; + G4double maximumEnergyTransfer; + ((k + ptbStructure.IonisationEnergy(shell, materialID)) / 2. > k) + ? maximumEnergyTransfer = k + : maximumEnergyTransfer = (k + ptbStructure.IonisationEnergy(shell, materialID)) / 2.; + + // SI : original method + /* + G4double crossSectionMaximum = 0.; + for(G4double value=waterStructure.IonisationEnergy(shell); value<=maximumEnergyTransfer; + value+=0.1*eV) { - //G4double Tcut=25.0E-6; - G4double maximumEnergyTransfer=0.; - if ((k+ptbStructure.IonisationEnergy(shell, materialName))/2. > k) maximumEnergyTransfer=k; - else maximumEnergyTransfer = (k+ptbStructure.IonisationEnergy(shell,materialName))/2.; - - // SI : original method - /* - G4double crossSectionMaximum = 0.; - for(G4double value=waterStructure.IonisationEnergy(shell); value<=maximumEnergyTransfer; value+=0.1*eV) - { - G4double differentialCrossSection = DifferentialCrossSection(particleDefinition, k/eV, value/eV, shell); - if(differentialCrossSection >= crossSectionMaximum) crossSectionMaximum = differentialCrossSection; - } - */ - - - // SI : alternative method - - //if (k > Tcut) - //{ - G4double crossSectionMaximum = 0.; - - G4double minEnergy = ptbStructure.IonisationEnergy(shell, materialName); - G4double maxEnergy = maximumEnergyTransfer; - G4int nEnergySteps = 50; - G4double value(minEnergy); - G4double stpEnergy(std::pow(maxEnergy/value, 1./static_cast(nEnergySteps-1))); - G4int step(nEnergySteps); - while (step>0) - { - step--; - G4double differentialCrossSection = DifferentialCrossSection(particleDefinition, k/eV, value/eV, shell, materialName); - if(differentialCrossSection >= crossSectionMaximum) crossSectionMaximum = differentialCrossSection; - value *= stpEnergy; - - } - // - - - G4double secondaryElectronKineticEnergy=0.; - - do - { - secondaryElectronKineticEnergy = G4UniformRand() * (maximumEnergyTransfer-ptbStructure.IonisationEnergy(shell, materialName)); - - } while(G4UniformRand()*crossSectionMaximum > - DifferentialCrossSection(particleDefinition, k/eV,(secondaryElectronKineticEnergy+ptbStructure.IonisationEnergy(shell, materialName))/eV,shell, materialName)); - - return secondaryElectronKineticEnergy; + G4double differentialCrossSection = DifferentialCrossSection(particleDefinition, k/eV, + value/eV, shell); if(differentialCrossSection >= crossSectionMaximum) crossSectionMaximum = + differentialCrossSection; + } + */ + + // SI : alternative method + + // if (k > Tcut) + //{ + G4double crossSectionMaximum = 0.; + + G4double minEnergy = ptbStructure.IonisationEnergy(shell, materialID); + G4double maxEnergy = maximumEnergyTransfer; + G4int nEnergySteps = 50; + G4double value(minEnergy); + G4double stpEnergy(std::pow(maxEnergy / value, 1. / static_cast(nEnergySteps - 1))); + G4int step(nEnergySteps); + while (step > 0) { + step--; + G4double differentialCrossSection = + DifferentialCrossSection(particleDefinition, k / eV, value / eV, shell, materialID); + if (differentialCrossSection >= crossSectionMaximum) + crossSectionMaximum = differentialCrossSection; + value *= stpEnergy; + } + // - // } + G4double secondaryElectronKineticEnergy = 0.; - // else if (k < Tcut) - // { + do { + secondaryElectronKineticEnergy = + G4UniformRand() + * (maximumEnergyTransfer - ptbStructure.IonisationEnergy(shell, materialID)); - // G4double bindingEnergy = ptbStructure.IonisationEnergy(shell, materialName); - // G4double maxEnergy = ((k-bindingEnergy)/2.); + } while ( + G4UniformRand() * crossSectionMaximum > DifferentialCrossSection( + particleDefinition, k / eV, + (secondaryElectronKineticEnergy + ptbStructure.IonisationEnergy(shell, materialID)) / eV, + shell, materialID)); - // G4double secondaryElectronKineticEnergy = G4UniformRand()*maxEnergy; - // return secondaryElectronKineticEnergy; - // } - } + return secondaryElectronKineticEnergy; + } + else if (particleDefinition == G4Proton::ProtonDefinition()) { + G4double maximumKineticEnergyTransfer = 4. * (electron_mass_c2 / proton_mass_c2) * k; - else if (particleDefinition == G4Proton::ProtonDefinition()) + G4double crossSectionMaximum = 0.; + for (G4double value = ptbStructure.IonisationEnergy(shell, materialID); + value <= 4. * ptbStructure.IonisationEnergy(shell, materialID); value += 0.1 * eV) { - G4double maximumKineticEnergyTransfer = 4.* (electron_mass_c2 / proton_mass_c2) * k; - - G4double crossSectionMaximum = 0.; - for (G4double value = ptbStructure.IonisationEnergy(shell, materialName); - value<=4.*ptbStructure.IonisationEnergy(shell, materialName) ; - value+=0.1*eV) - { - G4double differentialCrossSection = DifferentialCrossSection(particleDefinition, k/eV, value/eV, shell, materialName); - if (differentialCrossSection >= crossSectionMaximum) crossSectionMaximum = differentialCrossSection; - } + G4double differentialCrossSection = + DifferentialCrossSection(particleDefinition, k / eV, value / eV, shell, materialID); + if (differentialCrossSection >= crossSectionMaximum) + crossSectionMaximum = differentialCrossSection; + } - G4double secondaryElectronKineticEnergy = 0.; - do - { - secondaryElectronKineticEnergy = G4UniformRand() * maximumKineticEnergyTransfer; - } while(G4UniformRand()*crossSectionMaximum >= - DifferentialCrossSection(particleDefinition, k/eV,(secondaryElectronKineticEnergy+ptbStructure.IonisationEnergy(shell, materialName))/eV,shell, materialName)); + G4double secondaryElectronKineticEnergy = 0.; + do { + secondaryElectronKineticEnergy = G4UniformRand() * maximumKineticEnergyTransfer; + } while ( + G4UniformRand() * crossSectionMaximum >= DifferentialCrossSection( + particleDefinition, k / eV, + (secondaryElectronKineticEnergy + ptbStructure.IonisationEnergy(shell, materialID)) / eV, + shell, materialID)); - return secondaryElectronKineticEnergy; - } + return secondaryElectronKineticEnergy; + } - return 0; + return 0; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void G4DNAPTBIonisationModel::RandomizeEjectedElectronDirection(G4ParticleDefinition* particleDefinition, - G4double k, - G4double secKinetic, - G4double & cosTheta, - G4double & phi) +void G4DNAPTBIonisationModel::RandomizeEjectedElectronDirection(const G4ParticleDefinition* p, + G4double k, G4double secKinetic, + G4double& cosTheta, G4double& phi) { - if (particleDefinition == G4Electron::ElectronDefinition()) - { - phi = twopi * G4UniformRand(); - if (secKinetic < 50.*eV) cosTheta = (2.*G4UniformRand())-1.; - else if (secKinetic <= 200.*eV) - { - if (G4UniformRand() <= 0.1) cosTheta = (2.*G4UniformRand())-1.; - else cosTheta = G4UniformRand()*(std::sqrt(2.)/2); - } - else - { - G4double sin2O = (1.-secKinetic/k) / (1.+secKinetic/(2.*electron_mass_c2)); - cosTheta = std::sqrt(1.-sin2O); - } - } - - else if (particleDefinition == G4Proton::ProtonDefinition()) - { - G4double maxSecKinetic = 4.* (electron_mass_c2 / proton_mass_c2) * k; - phi = twopi * G4UniformRand(); + if (p == G4Electron::ElectronDefinition()) { + phi = twopi * G4UniformRand(); + if (secKinetic < 50. * eV) + cosTheta = (2. * G4UniformRand()) - 1.; + else if (secKinetic <= 200. * eV) { + if (G4UniformRand() <= 0.1) + cosTheta = (2. * G4UniformRand()) - 1.; + else + cosTheta = G4UniformRand() * (std::sqrt(2.) / 2); + } + else { + G4double sin2O = (1. - secKinetic / k) / (1. + secKinetic / (2. * electron_mass_c2)); + cosTheta = std::sqrt(1. - sin2O); + } + } + else if (p == G4Proton::ProtonDefinition()) { + G4double maxSecKinetic = 4. * (electron_mass_c2 / proton_mass_c2) * k; + phi = twopi * G4UniformRand(); - // cosTheta = std::sqrt(secKinetic / maxSecKinetic); + // cosTheta = std::sqrt(secKinetic / maxSecKinetic); - // Restriction below 100 eV from Emfietzoglou (2000) + // Restriction below 100 eV from Emfietzoglou (2000) - if (secKinetic>100*eV) cosTheta = std::sqrt(secKinetic / maxSecKinetic); - else cosTheta = (2.*G4UniformRand())-1.; - - } + (secKinetic > 100 * eV) ? cosTheta = std::sqrt(secKinetic / maxSecKinetic) + : cosTheta = (2. * G4UniformRand()) - 1.; + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -double G4DNAPTBIonisationModel::DifferentialCrossSection(G4ParticleDefinition * particleDefinition, - G4double k, +double G4DNAPTBIonisationModel::DifferentialCrossSection(const G4ParticleDefinition* p, G4double k, G4double energyTransfer, G4int ionizationLevelIndex, - const G4String& materialName) + const std::size_t& materialID) { - G4double sigma = 0.; - const G4String& particleName = particleDefinition->GetParticleName(); - - G4double shellEnergy (ptbStructure.IonisationEnergy(ionizationLevelIndex, materialName)); - G4double kSE (energyTransfer-shellEnergy); - - if (energyTransfer >= shellEnergy) - { - G4double valueT1 = 0; - G4double valueT2 = 0; - G4double valueE21 = 0; - G4double valueE22 = 0; - G4double valueE12 = 0; - G4double valueE11 = 0; - - G4double xs11 = 0; - G4double xs12 = 0; - G4double xs21 = 0; - G4double xs22 = 0; - - if (particleDefinition == G4Electron::ElectronDefinition()) - { - // k should be in eV and energy transfer eV also - std::vector::iterator t2 = std::upper_bound(fTMapWithVec[materialName][particleName].begin(),fTMapWithVec[materialName][particleName].end(), k); - std::vector::iterator t1 = t2-1; - - // SI : the following condition avoids situations where energyTransfer >last vector element - if (kSE <= fEMapWithVector[materialName][particleName][(*t1)].back() && kSE <= fEMapWithVector[materialName][particleName][(*t2)].back() ) - { - std::vector::iterator e12 = std::upper_bound(fEMapWithVector[materialName][particleName][(*t1)].begin(),fEMapWithVector[materialName][particleName][(*t1)].end(), kSE); - std::vector::iterator e11 = e12-1; - - std::vector::iterator e22 = std::upper_bound(fEMapWithVector[materialName][particleName][(*t2)].begin(),fEMapWithVector[materialName][particleName][(*t2)].end(), kSE); - std::vector::iterator e21 = e22-1; - - valueT1 =*t1; - valueT2 =*t2; - valueE21 =*e21; - valueE22 =*e22; - valueE12 =*e12; - valueE11 =*e11; - - xs11 = diffCrossSectionData[materialName][particleName][ionizationLevelIndex][valueT1][valueE11]; - xs12 = diffCrossSectionData[materialName][particleName][ionizationLevelIndex][valueT1][valueE12]; - xs21 = diffCrossSectionData[materialName][particleName][ionizationLevelIndex][valueT2][valueE21]; - xs22 = diffCrossSectionData[materialName][particleName][ionizationLevelIndex][valueT2][valueE22]; - } - } - - if (particleDefinition == G4Proton::ProtonDefinition()) - { - // k should be in eV and energy transfer eV also - std::vector::iterator t2 = std::upper_bound(fTMapWithVec[materialName][particleName].begin(),fTMapWithVec[materialName][particleName].end(), k); - std::vector::iterator t1 = t2-1; - - std::vector::iterator e12 = std::upper_bound(fEMapWithVector[materialName][particleName][(*t1)].begin(),fEMapWithVector[materialName][particleName][(*t1)].end(), kSE); - std::vector::iterator e11 = e12-1; - - std::vector::iterator e22 = std::upper_bound(fEMapWithVector[materialName][particleName][(*t2)].begin(),fEMapWithVector[materialName][particleName][(*t2)].end(), kSE); - std::vector::iterator e21 = e22-1; - - valueT1 =*t1; - valueT2 =*t2; - valueE21 =*e21; - valueE22 =*e22; - valueE12 =*e12; - valueE11 =*e11; - - xs11 = diffCrossSectionData[materialName][particleName][ionizationLevelIndex][valueT1][valueE11]; - xs12 = diffCrossSectionData[materialName][particleName][ionizationLevelIndex][valueT1][valueE12]; - xs21 = diffCrossSectionData[materialName][particleName][ionizationLevelIndex][valueT2][valueE21]; - xs22 = diffCrossSectionData[materialName][particleName][ionizationLevelIndex][valueT2][valueE22]; - } - - G4double xsProduct = xs11 * xs12 * xs21 * xs22; - - if (xsProduct != 0.) - { - sigma = QuadInterpolator(valueE11, valueE12, - valueE21, valueE22, - xs11, xs12, - xs21, xs22, - valueT1, valueT2, - k, kSE); - } - } - - - return sigma; -} + G4double sigma = 0.; + G4double shellEnergy(ptbStructure.IonisationEnergy(ionizationLevelIndex, materialID)); + G4double kSE(energyTransfer - shellEnergy); + + if (energyTransfer >= shellEnergy) { + G4double valueT1 = 0; + G4double valueT2 = 0; + G4double valueE21 = 0; + G4double valueE22 = 0; + G4double valueE12 = 0; + G4double valueE11 = 0; + + G4double xs11 = 0; + G4double xs12 = 0; + G4double xs21 = 0; + G4double xs22 = 0; + + if (p == G4Electron::ElectronDefinition()) { + // k should be in eV and energy transfer eV also + auto t2 = + std::upper_bound(fTMapWithVec[materialID][p].begin(), fTMapWithVec[materialID][p].end(), k); + auto t1 = t2 - 1; + + // SI : the following condition avoids situations where energyTransfer >last vector element + if (kSE <= fEMapWithVector[materialID][p][(*t1)].back() + && kSE <= fEMapWithVector[materialID][p][(*t2)].back()) + { + auto e12 = std::upper_bound(fEMapWithVector[materialID][p][(*t1)].begin(), + fEMapWithVector[materialID][p][(*t1)].end(), kSE); + auto e11 = e12 - 1; + + auto e22 = std::upper_bound(fEMapWithVector[materialID][p][(*t2)].begin(), + fEMapWithVector[materialID][p][(*t2)].end(), kSE); + auto e21 = e22 - 1; + + valueT1 = *t1; + valueT2 = *t2; + valueE21 = *e21; + valueE22 = *e22; + valueE12 = *e12; + valueE11 = *e11; + + xs11 = diffCrossSectionData[materialID][p][ionizationLevelIndex][valueT1][valueE11]; + xs12 = diffCrossSectionData[materialID][p][ionizationLevelIndex][valueT1][valueE12]; + xs21 = diffCrossSectionData[materialID][p][ionizationLevelIndex][valueT2][valueE21]; + xs22 = diffCrossSectionData[materialID][p][ionizationLevelIndex][valueT2][valueE22]; + } + } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + if (p == G4Proton::ProtonDefinition()) { + // k should be in eV and energy transfer eV also + auto t2 = + std::upper_bound(fTMapWithVec[materialID][p].begin(), fTMapWithVec[materialID][p].end(), k); + auto t1 = t2 - 1; + + auto e12 = std::upper_bound(fEMapWithVector[materialID][p][(*t1)].begin(), + fEMapWithVector[materialID][p][(*t1)].end(), kSE); + auto e11 = e12 - 1; + + auto e22 = std::upper_bound(fEMapWithVector[materialID][p][(*t2)].begin(), + fEMapWithVector[materialID][p][(*t2)].end(), kSE); + auto e21 = e22 - 1; + + valueT1 = *t1; + valueT2 = *t2; + valueE21 = *e21; + valueE22 = *e22; + valueE12 = *e12; + valueE11 = *e11; + + xs11 = diffCrossSectionData[materialID][p][ionizationLevelIndex][valueT1][valueE11]; + xs12 = diffCrossSectionData[materialID][p][ionizationLevelIndex][valueT1][valueE12]; + xs21 = diffCrossSectionData[materialID][p][ionizationLevelIndex][valueT2][valueE21]; + xs22 = diffCrossSectionData[materialID][p][ionizationLevelIndex][valueT2][valueE22]; + } -G4double G4DNAPTBIonisationModel::RandomizeEjectedElectronEnergyFromCumulated(G4ParticleDefinition* particleDefinition,G4double k, G4int ionizationLevelIndex, const G4String& materialName) -{ - // k should be in eV + G4double xsProduct = xs11 * xs12 * xs21 * xs22; - // Schematic explanation. - // We will do an interpolation to get a final E value (ejected electron energy). - // 1/ We choose a random number between 0 and 1 (ie we select a cumulated cross section). - // 2/ We look for T_lower and T_upper. - // 3/ We look for the cumulated corresponding cross sections and their associated E values. - // - // T_low | CS_low_1 -> E_low_1 - // | CS_low_2 -> E_low_2 - // T_up | CS_up_1 -> E_up_1 - // | CS_up_2 -> E_up_2 - // - // 4/ We interpolate to get our E value. - // - // T_low | CS_low_1 -> E_low_1 ----- - // | |----> E_low -- - // | CS_low_2 -> E_low_2 ----- | - // | ---> E_final - // T_up | CS_up_1 -> E_up_1 ------- | - // | |----> E_up --- - // | CS_up_2 -> E_up_2 ------- - - // Initialize some values - // - G4double ejectedElectronEnergy = 0.; - G4double valueK1 = 0; - G4double valueK2 = 0; - G4double valueCumulCS21 = 0; - G4double valueCumulCS22 = 0; - G4double valueCumulCS12 = 0; - G4double valueCumulCS11 = 0; - G4double secElecE11 = 0; - G4double secElecE12 = 0; - G4double secElecE21 = 0; - G4double secElecE22 = 0; - G4String particleName = particleDefinition->GetParticleName(); - - // *************************************************************************** - // Get a random number between 0 and 1 to compare with the cumulated CS - // *************************************************************************** - // - // It will allow us to choose an ejected electron energy with respect to the CS. - G4double random = G4UniformRand(); - - // ********************************************** - // Take the input from the data tables - // ********************************************** - - // Cumulated tables are like this: T E cumulatedCS1 cumulatedCS2 cumulatedCS3 - // We have two sets of loaded data: fTMapWithVec which contains data about T (incident particle energy) - // and fProbaShellMap which contains cumulated cross section data. - // Since we already have a specific T energy value which could not be explicitly in the table, we must interpolate all the values. - - // First, we select the upper and lower T data values surrounding our T value (ie "k"). - std::vector::iterator k2 = std::upper_bound(fTMapWithVec[materialName][particleName].begin(),fTMapWithVec[materialName][particleName].end(), k); - std::vector::iterator k1 = k2-1; - - // Check if we have found a k2 value (0 if we did not found it). - // A missing k2 value can be caused by a energy to high for the data table, - // Ex : table done for 12*eV -> 1000*eV and k=2000*eV - // then k2 = 0 and k1 = max of the table. - // To detect this, we check that k1 is not superior to k2. - if(*k1 > *k2) - { - // Error - G4cerr<<"**************** Fatal error ******************"< *k2 with k1 "<<*k1<<" and k2 "<<*k2<::iterator cumulCS12 = std::upper_bound(fProbaShellMap[materialName][particleName][ionizationLevelIndex][(*k1)].begin(), - fProbaShellMap[materialName][particleName][ionizationLevelIndex][(*k1)].end(), random); - std::vector::iterator cumulCS11 = cumulCS12-1; - // Second one. - std::vector::iterator cumulCS22 = std::upper_bound(fProbaShellMap[materialName][particleName][ionizationLevelIndex][(*k2)].begin(), - fProbaShellMap[materialName][particleName][ionizationLevelIndex][(*k2)].end(), random); - std::vector::iterator cumulCS21 = cumulCS22-1; - - // Now that we have the "values" through pointers, we access them. - valueK1 = *k1; - valueK2 = *k2; - valueCumulCS11 = *cumulCS11; - valueCumulCS12 = *cumulCS12; - valueCumulCS21 = *cumulCS21; - valueCumulCS22 = *cumulCS22; - - // ************************************************************* - // Do the interpolation to get the ejected electron energy - // ************************************************************* - - // Here we will get four E values corresponding to our four cumulated cross section values previously selected. - // But we need to take into account a specific case: we have selected a shell by using the ionisation cross section table - // and, since we get two T values, we could have differential cross sections (or cumulated) equal to 0 for the lower T - // and not for the upper T. When looking for the cumulated cross section values which surround the selected random number (for the lower T), - // the upper_bound method will only found 0 values. Thus, the upper_bound method will return the last E value present in the table for the - // selected T. The last E value being the highest, we will later perform an interpolation between a high E value (for the lower T) and - // a small E value (for the upper T). This is inconsistent because if the cross section are equal to zero for the lower T then it - // means it is not possible to ionize and, thus, to have a secondary electron. But, in our situation, it is possible to ionize for the upper T - // AND for an interpolate T value between Tupper Tlower. That's why the final E value should be interpolate between 0 and the E value (upper T). - // - if(cumulCS12==fProbaShellMap[materialName][particleName][ionizationLevelIndex][(*k1)].end()) - { - // Here we are in the special case and we force Elower1 and Elower2 to be equal at 0 for the interpolation. - secElecE11 = 0; - secElecE12 = 0; - secElecE21 = fEnergySecondaryData[materialName][particleName][ionizationLevelIndex][valueK2][valueCumulCS21]; - secElecE22 = fEnergySecondaryData[materialName][particleName][ionizationLevelIndex][valueK2][valueCumulCS22]; +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - valueCumulCS11 = 0; - valueCumulCS12 = 0; - } - else - { - // No special case, interpolation will happen as usual. - secElecE11 = fEnergySecondaryData[materialName][particleName][ionizationLevelIndex][valueK1][valueCumulCS11]; - secElecE12 = fEnergySecondaryData[materialName][particleName][ionizationLevelIndex][valueK1][valueCumulCS12]; - secElecE21 = fEnergySecondaryData[materialName][particleName][ionizationLevelIndex][valueK2][valueCumulCS21]; - secElecE22 = fEnergySecondaryData[materialName][particleName][ionizationLevelIndex][valueK2][valueCumulCS22]; - } - - ejectedElectronEnergy = QuadInterpolator(valueCumulCS11, valueCumulCS12, - valueCumulCS21, valueCumulCS22, - secElecE11, secElecE12, - secElecE21, secElecE22, - valueK1, valueK2, - k, random); - - // ********************************************** - // Some tests for debugging - // ********************************************** - - G4double bindingEnergy (ptbStructure.IonisationEnergy(ionizationLevelIndex, materialName)/eV); - if(k-ejectedElectronEnergy-bindingEnergy<=0 || ejectedElectronEnergy<=0) - { - G4cout<<"k "< E_low_1 + // | CS_low_2 -> E_low_2 + // T_up | CS_up_1 -> E_up_1 + // | CS_up_2 -> E_up_2 + // + // 4/ We interpolate to get our E value. + // + // T_low | CS_low_1 -> E_low_1 ----- + // | |----> E_low -- + // | CS_low_2 -> E_low_2 ----- | + // | ---> E_final + // T_up | CS_up_1 -> E_up_1 ------- | + // | |----> E_up --- + // | CS_up_2 -> E_up_2 ------- + + // Initialize some values + // + G4double ejectedElectronEnergy = 0.; + G4double valueK1 = 0; + G4double valueK2 = 0; + G4double valueCumulCS21 = 0; + G4double valueCumulCS22 = 0; + G4double valueCumulCS12 = 0; + G4double valueCumulCS11 = 0; + G4double secElecE11 = 0; + G4double secElecE12 = 0; + G4double secElecE21 = 0; + G4double secElecE22 = 0; + G4String particleName = p->GetParticleName(); + + // *************************************************************************** + // Get a random number between 0 and 1 to compare with the cumulated CS + // *************************************************************************** + // + // It will allow us to choose an ejected electron energy with respect to the CS. + G4double random = G4UniformRand(); + + // ********************************************** + // Take the input from the data tables + // ********************************************** + + // Cumulated tables are like this: T E cumulatedCS1 cumulatedCS2 cumulatedCS3 + // We have two sets of loaded data: fTMapWithVec which contains data about T (incident particle + // energy) and fProbaShellMap which contains cumulated cross section data. Since we already have a + // specific T energy value which could not be explicitly in the table, we must interpolate all the + // values. + + // First, we select the upper and lower T data values surrounding our T value (ie "k"). + auto k2 = + std::upper_bound(fTMapWithVec[materialID][p].begin(), fTMapWithVec[materialID][p].end(), k); + auto k1 = k2 - 1; + + // Check if we have found a k2 value (0 if we did not found it). + // A missing k2 value can be caused by a energy to high for the data table, + // Ex : table done for 12*eV -> 1000*eV and k=2000*eV + // then k2 = 0 and k1 = max of the table. + // To detect this, we check that k1 is not superior to k2. + if (*k1 > *k2) { + // Error + G4cerr << "**************** Fatal error ******************" << G4endl; + G4cerr << "G4DNAPTBIonisationModel::RandomizeEjectedElectronEnergyFromCumulated" << G4endl; + G4cerr << "You have *k1 > *k2 with k1 " << *k1 << " and k2 " << *k2 << G4endl; + G4cerr + << "This may be because the energy of the incident particle is to high for the data table." + << G4endl; + G4cerr << "Particle energy (eV): " << k << G4endl; + exit(EXIT_FAILURE); + } + + // We have a random number and we select the cumulated cross section data values surrounding our + // random number. But we need to do that for each T value (ie two T values) previously selected. + // + // First one. + auto cumulCS12 = + std::upper_bound(fProbaShellMap[materialID][p][ionizationLevelIndex][(*k1)].begin(), + fProbaShellMap[materialID][p][ionizationLevelIndex][(*k1)].end(), random); + auto cumulCS11 = cumulCS12 - 1; + // Second one. + auto cumulCS22 = + std::upper_bound(fProbaShellMap[materialID][p][ionizationLevelIndex][(*k2)].begin(), + fProbaShellMap[materialID][p][ionizationLevelIndex][(*k2)].end(), random); + auto cumulCS21 = cumulCS22 - 1; + + // Now that we have the "values" through pointers, we access them. + valueK1 = *k1; + valueK2 = *k2; + valueCumulCS11 = *cumulCS11; + valueCumulCS12 = *cumulCS12; + valueCumulCS21 = *cumulCS21; + valueCumulCS22 = *cumulCS22; + + // ************************************************************* + // Do the interpolation to get the ejected electron energy + // ************************************************************* + + // Here we will get four E values corresponding to our four cumulated cross section values + // previously selected. But we need to take into account a specific case: we have selected a shell + // by using the ionisation cross section table and, since we get two T values, we could have + // differential cross sections (or cumulated) equal to 0 for the lower T and not for the upper T. + // When looking for the cumulated cross section values which surround the selected random number + // (for the lower T), the upper_bound method will only found 0 values. Thus, the upper_bound + // method will return the last E value present in the table for the selected T. The last E value + // being the highest, we will later perform an interpolation between a high E value (for the lower + // T) and a small E value (for the upper T). This is inconsistent because if the cross section are + // equal to zero for the lower T then it means it is not possible to ionize and, thus, to have a + // secondary electron. But, in our situation, it is possible to ionize for the upper T AND for an + // interpolate T value between Tupper Tlower. That's why the final E value should be interpolate + // between 0 and the E value (upper T). + // + if (cumulCS12 == fProbaShellMap[materialID][p][ionizationLevelIndex][(*k1)].end()) { + // Here we are in the special case and we force Elower1 and Elower2 to be equal at 0 for the + // interpolation. + secElecE11 = 0; + secElecE12 = 0; + secElecE21 = fEnergySecondaryData[materialID][p][ionizationLevelIndex][valueK2][valueCumulCS21]; + secElecE22 = fEnergySecondaryData[materialID][p][ionizationLevelIndex][valueK2][valueCumulCS22]; + + valueCumulCS11 = 0; + valueCumulCS12 = 0; + } + else { + // No special case, interpolation will happen as usual. + secElecE11 = fEnergySecondaryData[materialID][p][ionizationLevelIndex][valueK1][valueCumulCS11]; + secElecE12 = fEnergySecondaryData[materialID][p][ionizationLevelIndex][valueK1][valueCumulCS12]; + secElecE21 = fEnergySecondaryData[materialID][p][ionizationLevelIndex][valueK2][valueCumulCS21]; + secElecE22 = fEnergySecondaryData[materialID][p][ionizationLevelIndex][valueK2][valueCumulCS22]; + } + + ejectedElectronEnergy = + QuadInterpolator(valueCumulCS11, valueCumulCS12, valueCumulCS21, valueCumulCS22, secElecE11, + secElecE12, secElecE21, secElecE22, valueK1, valueK2, k, random); + + // ********************************************** + // Some tests for debugging + // ********************************************** + + G4double bindingEnergy(ptbStructure.IonisationEnergy(ionizationLevelIndex, materialID) / eV); + if (k - ejectedElectronEnergy - bindingEnergy <= 0 || ejectedElectronEnergy <= 0) { + G4cout << "k " << k << G4endl; + G4cout << "material ID : " << materialID << G4endl; + G4cout << "secondaryKin " << ejectedElectronEnergy << G4endl; + G4cout << "shell " << ionizationLevelIndex << G4endl; + G4cout << "bindingEnergy " << bindingEnergy << G4endl; + G4cout << "scatteredEnergy " << k - ejectedElectronEnergy - bindingEnergy << G4endl; + G4cout << "rand " << random << G4endl; + G4cout << "surrounding k values: valueK1 valueK2\n" << valueK1 << " " << valueK2 << G4endl; + G4cout << "surrounding E values: secElecE11 secElecE12 secElecE21 secElecE22\n" + << secElecE11 << " " << secElecE12 << " " << secElecE21 << " " << secElecE22 << " " + << G4endl; + G4cout + << "surrounding cumulCS values: valueCumulCS11 valueCumulCS12 valueCumulCS21 valueCumulCS22\n" + << valueCumulCS11 << " " << valueCumulCS12 << " " << valueCumulCS21 << " " << valueCumulCS22 + << " " << G4endl; + G4ExceptionDescription errmsg; + errmsg << "*****************************" << G4endl; + errmsg << "Fatal error, EXIT." << G4endl; + G4Exception("G4DNAPTBIonisationModel::RandomizeEjectedElectronEnergyFromCumulated", "", + FatalException, errmsg); + exit(EXIT_FAILURE); + } + + return ejectedElectronEnergy * eV; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNAPTBIonisationModel::LogLogInterpolate(G4double e1, - G4double e2, - G4double e, - G4double xs1, - G4double xs2) +G4double G4DNAPTBIonisationModel::LogLogInterpolate(G4double e1, G4double e2, G4double e, + G4double xs1, G4double xs2) { - G4double value (0); + G4double value(0); - // Switch to log-lin interpolation for faster code + // Switch to log-lin interpolation for faster code - if ((e2-e1)!=0 && xs1 !=0 && xs2 !=0) - { - G4double d1 = std::log10(xs1); - G4double d2 = std::log10(xs2); - value = std::pow(10.,(d1 + (d2 - d1)*(e - e1)/ (e2 - e1)) ); - } + if ((e2 - e1) != 0 && xs1 != 0 && xs2 != 0) { + G4double d1 = std::log10(xs1); + G4double d2 = std::log10(xs2); + value = std::pow(10., (d1 + (d2 - d1) * (e - e1) / (e2 - e1))); + } - // Switch to lin-lin interpolation for faster code - // in case one of xs1 or xs2 (=cum proba) value is zero + // Switch to lin-lin interpolation for faster code + // in case one of xs1 or xs2 (=cum proba) value is zero - if ((e2-e1)!=0 && (xs1 ==0 || xs2 ==0)) - { - G4double d1 = xs1; - G4double d2 = xs2; - value = (d1 + (d2 - d1)*(e - e1)/ (e2 - e1)); - } + if ((e2 - e1) != 0 && (xs1 == 0 || xs2 == 0)) { + G4double d1 = xs1; + G4double d2 = xs2; + value = (d1 + (d2 - d1) * (e - e1) / (e2 - e1)); + } - return value; + return value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNAPTBIonisationModel::QuadInterpolator(G4double e11, G4double e12, - G4double e21, G4double e22, - G4double xs11, G4double xs12, - G4double xs21, G4double xs22, - G4double t1, G4double t2, - G4double t, G4double e) +G4double G4DNAPTBIonisationModel::QuadInterpolator(G4double e11, G4double e12, G4double e21, + G4double e22, G4double xs11, G4double xs12, + G4double xs21, G4double xs22, G4double t1, + G4double t2, G4double t, G4double e) { - G4double interpolatedvalue1 (-1); - if(xs11!=xs12) interpolatedvalue1 = LogLogInterpolate(e11, e12, e, xs11, xs12); - else interpolatedvalue1 = xs11; - - G4double interpolatedvalue2 (-1); - if(xs21!=xs22) interpolatedvalue2 = LogLogInterpolate(e21, e22, e, xs21, xs22); - else interpolatedvalue2 = xs21; - - G4double value (-1); - if(interpolatedvalue1!=interpolatedvalue2) value = LogLogInterpolate(t1, t2, t, interpolatedvalue1, interpolatedvalue2); - else value = interpolatedvalue1; + G4double interpolatedvalue1, interpolatedvalue2, value; + (xs11 != xs12) ? interpolatedvalue1 = LogLogInterpolate(e11, e12, e, xs11, xs12) + : interpolatedvalue1 = xs11; - return value; + (xs21 != xs22) ? interpolatedvalue2 = LogLogInterpolate(e21, e22, e, xs21, xs22) + : interpolatedvalue2 = xs21; - // G4double interpolatedvalue1 = LogLogInterpolate(e11, e12, e, xs11, xs12); - // G4double interpolatedvalue2 = LogLogInterpolate(e21, e22, e, xs21, xs22); - // G4double value = LogLogInterpolate(t1, t2, t, interpolatedvalue1, interpolatedvalue2); - // return value; + (interpolatedvalue1 != interpolatedvalue2) + ? value = LogLogInterpolate(t1, t2, t, interpolatedvalue1, interpolatedvalue2) + : value = interpolatedvalue1; + return value; } diff --git a/source/processes/electromagnetic/dna/models/src/G4DNARuddIonisationExtendedModel.cc b/source/processes/electromagnetic/dna/models/src/G4DNARuddIonisationExtendedModel.cc index 2f1e661261c..f043c6fef37 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNARuddIonisationExtendedModel.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNARuddIonisationExtendedModel.cc @@ -26,12 +26,17 @@ // // Modified by Z. Francis, S. Incerti to handle HZE // && inverse rudd function sampling 26-10-2010 +// +// Rewitten by V.Ivanchenko 21.05.2023 +// +#include "G4EmCorrections.hh" #include "G4DNARuddIonisationExtendedModel.hh" #include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" #include "G4UAtomicDeexcitation.hh" #include "G4LossTableManager.hh" +#include "G4NistManager.hh" #include "G4DNAChemistryManager.hh" #include "G4DNAMolecularMaterial.hh" @@ -42,919 +47,621 @@ #include "G4Log.hh" #include "G4Pow.hh" #include "G4Alpha.hh" - -static G4Pow * gpow = G4Pow::GetInstance(); - +#include "G4Proton.hh" +#include "G4AutoLock.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -using namespace std; +G4DNACrossSectionDataSet* G4DNARuddIonisationExtendedModel::xsdata[] = {nullptr}; +G4DNACrossSectionDataSet* G4DNARuddIonisationExtendedModel::xshelium = nullptr; +G4DNACrossSectionDataSet* G4DNARuddIonisationExtendedModel::xsalphaplus = nullptr; +const std::vector* G4DNARuddIonisationExtendedModel::fpWaterDensity = nullptr; + +namespace +{ + G4Mutex ionDNAMutex = G4MUTEX_INITIALIZER; + const G4double scaleFactor = CLHEP::m*CLHEP::m; + const G4double tolerance = 1*CLHEP::eV; + const G4double Ry = 13.6*CLHEP::eV; + const G4double Gj[5] = {0.99, 1.11, 1.11, 0.52, 1.}; + + // Following values provided by M. Dingfelder (priv. comm) + const G4double Bj[5] = {12.60*CLHEP::eV, 14.70*CLHEP::eV, 18.40*CLHEP::eV, + 32.20*CLHEP::eV, 539*CLHEP::eV}; +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4DNARuddIonisationExtendedModel::G4DNARuddIonisationExtendedModel(const G4ParticleDefinition*, const G4String& nam) -:G4VEmModel(nam),isInitialised(false) + : G4VEmModel(nam) { - slaterEffectiveCharge[0]=0.; - slaterEffectiveCharge[1]=0.; - slaterEffectiveCharge[2]=0.; - sCoefficient[0]=0.; - sCoefficient[1]=0.; - sCoefficient[2]=0.; - - lowEnergyLimitForA[1] = 0 * eV; - lowEnergyLimitForA[2] = 0 * eV; - lowEnergyLimitForA[3] = 0 * eV; - lowEnergyLimitOfModelForA[1] = 100 * eV; - lowEnergyLimitOfModelForA[4] = 1 * keV; - lowEnergyLimitOfModelForA[5] = 0.5 * MeV; // For A = 3 or above, limit is MeV/uma - killBelowEnergyForA[1] = lowEnergyLimitOfModelForA[1]; - killBelowEnergyForA[4] = lowEnergyLimitOfModelForA[4]; - killBelowEnergyForA[5] = lowEnergyLimitOfModelForA[5]; - - verboseLevel= 0; - // Verbosity scale: - // 0 = nothing - // 1 = warning for energy non-conservation - // 2 = details of energy budget - // 3 = calculation of cross sections, file openings, sampling of atoms - // 4 = entering in methods - - if( verboseLevel>0 ) - { - G4cout << "Rudd ionisation model is constructed " << G4endl; - } - - // Define default angular generator - SetAngularDistribution(new G4DNARuddAngle()); - - // Mark this model as "applicable" for atomic deexcitation - SetDeexcitationFlag(true); + fEmCorrections = G4LossTableManager::Instance()->EmCorrections(); + fGpow = G4Pow::GetInstance(); + fLowestEnergy = 100*CLHEP::eV; + fLimitEnergy = 1*CLHEP::keV; - // Selection of stationary mode + // Mark this model as "applicable" for atomic deexcitation + SetDeexcitationFlag(true); - statCode = false; + // Define default angular generator + SetAngularDistribution(new G4DNARuddAngle()); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4DNARuddIonisationExtendedModel::~G4DNARuddIonisationExtendedModel() { - if(isIon) { - std::map< G4String,G4DNACrossSectionDataSet*,std::less >::iterator pos; - for (pos = tableData.begin(); pos != tableData.end(); ++pos) - { - G4DNACrossSectionDataSet* table = pos->second; - delete table; - } - } else { - delete mainTable; + if(isFirst) { + for(G4int i=0; i 3) - G4cout << "Calling G4DNARuddIonisationExtendedModel::Initialise()" << G4endl; - - // Energy limits - G4String fileProton("dna/sigma_ionisation_p_rudd"); - G4String fileHydrogen("dna/sigma_ionisation_h_rudd"); - G4String fileAlphaPlusPlus("dna/sigma_ionisation_alphaplusplus_rudd"); - G4String fileAlphaPlus("dna/sigma_ionisation_alphaplus_rudd"); - G4String fileHelium("dna/sigma_ionisation_he_rudd"); - G4String fileCarbon("dna/sigma_ionisation_c_rudd"); - G4String fileNitrogen("dna/sigma_ionisation_n_rudd"); - G4String fileOxygen("dna/sigma_ionisation_o_rudd"); - G4String fileSilicon("dna/sigma_ionisation_si_rudd"); - G4String fileIron("dna/sigma_ionisation_fe_rudd"); - - G4String pname = particle->GetParticleName(); - - G4DNAGenericIonsManager *instance; - instance = G4DNAGenericIonsManager::Instance(); - protonDef = G4Proton::ProtonDefinition(); - hydrogenDef = instance->GetIon("hydrogen"); - alphaPlusPlusDef = G4Alpha::Alpha(); - alphaPlusDef = instance->GetIon("alpha+"); - heliumDef = instance->GetIon("helium"); - - carbonDef = instance->GetIon("carbon"); - nitrogenDef = instance->GetIon("nitrogen"); - oxygenDef = instance->GetIon("oxygen"); - siliconDef = instance->GetIon("silicon"); - ironDef = instance->GetIon("iron"); - - G4String carbon; - G4String nitrogen; - G4String oxygen; - G4String silicon; - G4String iron; - - G4double scaleFactor = 1 * m*m; - massC12 = carbonDef->GetPDGMass(); - - // LIMITS AND DATA - - // ********************************************************************************************** - - if(pname == "proton") { - localMinEnergy = lowEnergyLimitForA[1]; + if(p != fParticle) { SetParticle(p); } + + // initialisation of static data once + if(nullptr == xsdata[0]) { + G4AutoLock l(&ionDNAMutex); + if(nullptr == xsdata[0]) { + isFirst = true; + G4String filename("dna/sigma_ionisation_h_rudd"); + xsdata[0] = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, CLHEP::eV, scaleFactor); + xsdata[0]->LoadData(filename); + + filename = "dna/sigma_ionisation_p_rudd"; + xsdata[1] = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, CLHEP::eV, scaleFactor); + xsdata[1]->LoadData(filename); + + filename = "dna/sigma_ionisation_alphaplusplus_rudd"; + xsdata[2] = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, CLHEP::eV, scaleFactor); + xsdata[2]->LoadData(filename); + + filename = "dna/sigma_ionisation_li_rudd"; + xsdata[3] = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, CLHEP::eV, scaleFactor); + xsdata[3]->LoadData(filename); + + filename = "dna/sigma_ionisation_be_rudd"; + xsdata[4] = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, CLHEP::eV, scaleFactor); + xsdata[4]->LoadData(filename); + + filename = "dna/sigma_ionisation_b_rudd"; + xsdata[5] = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, CLHEP::eV, scaleFactor); + xsdata[5]->LoadData(filename); + + filename = "dna/sigma_ionisation_c_rudd"; + xsdata[6] = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, CLHEP::eV, scaleFactor); + xsdata[6]->LoadData(filename); + + filename = "dna/sigma_ionisation_n_rudd"; + xsdata[7] = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, CLHEP::eV, scaleFactor); + xsdata[7]->LoadData(filename); + + filename = "dna/sigma_ionisation_o_rudd"; + xsdata[8] = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, CLHEP::eV, scaleFactor); + xsdata[8]->LoadData(filename); + + filename = "dna/sigma_ionisation_si_rudd"; + xsdata[14] = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, CLHEP::eV, scaleFactor); + xsdata[14]->LoadData(filename); + + filename = "dna/sigma_ionisation_fe_rudd"; + xsdata[26] = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, CLHEP::eV, scaleFactor); + xsdata[26]->LoadData(filename); + filename = "dna/sigma_ionisation_alphaplus_rudd"; + xsalphaplus = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, CLHEP::eV, scaleFactor); + xsalphaplus->LoadData(filename); + + filename = "dna/sigma_ionisation_he_rudd"; + xshelium = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, CLHEP::eV, scaleFactor); + xshelium->LoadData(filename); + } + // to avoid possible threading problem fill this vector only once + auto water = G4NistManager::Instance()->FindMaterial("G4_WATER"); + fpWaterDensity = + G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(water); - // Cross section - mainTable = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, eV, scaleFactor ); - mainTable->LoadData(fileProton); + l.unlock(); + } - // ********************************************************************************************** - + // initialisation once in each thread + if(nullptr == fParticleChangeForGamma) { + fParticleChangeForGamma = GetParticleChangeForGamma(); + const G4String& pname = fParticle->GetParticleName(); + if(pname == "proton") { + idx = 1; + xscurrent = xsdata[1]; + fElow = fLowestEnergy; } else if(pname == "hydrogen") { - - localMinEnergy = lowEnergyLimitForA[1]; - - // Cross section - mainTable = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, eV, scaleFactor ); - mainTable->LoadData(fileHydrogen); - - // ********************************************************************************************** - + idx = 0; + xscurrent = xsdata[0]; + fElow = fLowestEnergy; } else if(pname == "alpha") { - - localMinEnergy = lowEnergyLimitForA[4]; - - // Cross section - mainTable = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, eV, scaleFactor ); - mainTable->LoadData(fileAlphaPlusPlus); - - // ********************************************************************************************** - + idx = 1; + xscurrent = xsdata[2]; + isHelium = true; + fElow = fLimitEnergy; } else if(pname == "alpha+") { - - localMinEnergy = lowEnergyLimitForA[4]; - - // Cross section - mainTable = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, eV, scaleFactor ); - mainTable->LoadData(fileAlphaPlus); - - // ********************************************************************************************** - + idx = 1; + isHelium = true; + xscurrent = xsalphaplus; + fElow = fLimitEnergy; + // The following values are provided by M. Dingfelder (priv. comm) + slaterEffectiveCharge[0]=2.0; + slaterEffectiveCharge[1]=2.0; + slaterEffectiveCharge[2]=2.0; + sCoefficient[0]=0.7; + sCoefficient[1]=0.15; + sCoefficient[2]=0.15; } else if(pname == "helium") { - - localMinEnergy = lowEnergyLimitForA[4]; - - // Cross section - mainTable = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, eV, scaleFactor ); - mainTable->LoadData(fileHelium); - - // ********************************************************************************************** - - } else if(pname == "GenericIon") { - + idx = 0; + isHelium = true; + fElow = fLimitEnergy; + xscurrent = xshelium; + slaterEffectiveCharge[0]=1.7; + slaterEffectiveCharge[1]=1.15; + slaterEffectiveCharge[2]=1.15; + sCoefficient[0]=0.5; + sCoefficient[1]=0.25; + sCoefficient[2]=0.25; + } else { isIon = true; - carbon = carbonDef->GetParticleName(); - localMinEnergy = lowEnergyLimitForA[5]*massC12/proton_mass_c2; - - // Cross section - mainTable = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, eV, scaleFactor ); - mainTable->LoadData(fileCarbon); - - tableData[carbon] = mainTable; - - // ********************************************************************************************** - - oxygen = oxygenDef->GetParticleName(); - tableFile[oxygen] = fileOxygen; - - // Cross section - G4DNACrossSectionDataSet* tableOxygen = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, - eV, scaleFactor ); - tableOxygen->LoadData(fileOxygen); - tableData[oxygen] = tableOxygen; - - // ********************************************************************************************** - - nitrogen = nitrogenDef->GetParticleName(); - tableFile[nitrogen] = fileNitrogen; - - // Cross section - G4DNACrossSectionDataSet* tableNitrogen = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, - eV, scaleFactor ); - tableNitrogen->LoadData(fileNitrogen); - tableData[nitrogen] = tableNitrogen; - - // ********************************************************************************************** - - silicon = siliconDef->GetParticleName(); - tableFile[silicon] = fileSilicon; - - // Cross section - G4DNACrossSectionDataSet* tableSilicon = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, - eV, scaleFactor ); - tableSilicon->LoadData(fileSilicon); - tableData[silicon] = tableSilicon; - - // ********************************************************************************************** - - iron = ironDef->GetParticleName(); - tableFile[iron] = fileIron; - - // Cross section - - G4DNACrossSectionDataSet* tableIron = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, - eV, scaleFactor ); - tableIron->LoadData(fileIron); - tableData[iron] = tableIron; - } - // ********************************************************************************************** - - if( verboseLevel>0 ) - { - G4cout << "Rudd ionisation model is initialized " << G4endl - << "Energy range for model: " - << LowEnergyLimit() / keV << " keV - " - << HighEnergyLimit() / keV << " keV for " - << pname - << " internal low energy limit E(keV)=" << localMinEnergy / keV - << G4endl; } + // defined stationary mode + statCode = G4EmParameters::Instance()->DNAStationary(); - // Initialize water density pointer - fpWaterDensity = G4DNAMolecularMaterial::Instance()->GetNumMolPerVolTableFor(G4Material::GetMaterial("G4_WATER")); + // initialise atomic de-excitation + fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation(); - // - fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation(); - - fParticleChangeForGamma = GetParticleChangeForGamma(); - isInitialised = true; + if (verbose > 0) { + G4cout << "### G4DNARuddIonisationExtendedModel::Initialise(..) " << pname + << "/n idx=" << idx << " Amass=" << fAmass + << " isIon=" << isIon << " isHelium=" << isHelium << G4endl; + } + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNARuddIonisationExtendedModel::CrossSectionPerVolume(const G4Material* material, - const G4ParticleDefinition* partDef, - G4double k, - G4double, - G4double) +void G4DNARuddIonisationExtendedModel::SetParticle(const G4ParticleDefinition* p) { - if (verboseLevel > 3) - G4cout << "Calling CrossSectionPerVolume() of G4DNARuddIonisationExtendedModel" << G4endl; - - currParticle = GetDNAIonParticleDefinition(partDef); - currentScaledEnergy = k; - G4double e = k; - G4double q2 = 1.0; - currentTable = mainTable; - - if (isIon){ - if (currParticle == nullptr) {//not DNA particle - currentScaledEnergy *= massC12/partDef->GetPDGMass(); - G4double q = partDef->GetPDGCharge()/(eplus*6); - q2 *= q*q; - e = currentScaledEnergy; - currParticle = carbonDef; - } - G4String pname = currParticle->GetParticleName(); - auto goodTable = tableData.find(pname); - currentTable = goodTable->second; + fParticle = p; + fMass = p->GetPDGMass(); + fAmass = p->GetAtomicMass(); + + // for generic ions idx is dynamic, -1 means that data for the ion does not exist + if(isIon) { + G4int i = p->GetAtomicNumber(); + idx = -1; + if (i < RUDDZMAX && nullptr != xsdata[i]) { + idx = i; + fElow = fAmass*fLowestEnergy; } - // below low the ion should be stopped - if (currentScaledEnergy < localMinEnergy) { return DBL_MAX; } - - G4double waterDensity = (*fpWaterDensity)[material->GetIndex()]; - G4double sigma = 0.0; - if (nullptr != currentTable) { - sigma = currentTable->FindValue(e)*q2; - } else { - G4cout << "G4DNARuddIonisationExtendedModel - no data table for " - << partDef->GetParticleName() << G4endl; - G4Exception("G4DNARuddIonisationExtendedModel::CrossSectionPerVolume(...)","em0002", - FatalException,"Data table is not available for the model."); - } - if (verboseLevel > 2) - { - G4cout << "__________________________________" << G4endl; - G4cout << "G4DNARuddIonisationExtendedModel - XS INFO START" << G4endl; - G4cout << "Kinetic energy(eV)=" << k/eV << " particle : " << partDef->GetParticleName() << G4endl; - G4cout << "Cross section per water molecule (cm^2)=" << sigma/cm/cm << G4endl; - G4cout << "Cross section per water molecule (cm^-1)=" << sigma*waterDensity/(1./cm) << G4endl; - G4cout << "G4DNARuddIonisationExtendedModel - XS INFO END" << G4endl; - } - return sigma*waterDensity; + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4DNARuddIonisationExtendedModel::SampleSecondaries(std::vector* fvect, - const G4MaterialCutsCouple* couple, - const G4DynamicParticle* particle, - G4double, - G4double) +G4double +G4DNARuddIonisationExtendedModel::CrossSectionPerVolume(const G4Material* material, + const G4ParticleDefinition* part, + G4double kinE, + G4double, G4double) { - if (verboseLevel > 3) - G4cout << "Calling SampleSecondaries() of G4DNARuddIonisationExtendedModel" << G4endl; - - // stop ion with energy below low energy limit - G4double k = particle->GetKineticEnergy(); - if (currentScaledEnergy < localMinEnergy) { - fParticleChangeForGamma->SetProposedKineticEnergy(0.); - fParticleChangeForGamma->ProposeTrackStatus(fStopButAlive); - fParticleChangeForGamma->ProposeLocalEnergyDeposit(k); - return; - } + // check if model is applicable for given material + G4double density = (material->GetIndex() < fpWaterDensity->size()) + ? (*fpWaterDensity)[material->GetIndex()] : 0.0; + if (0.0 == density) { return 0.0; } + + // ion may be different + if (fParticle != part) { SetParticle(part); } + + // initilise mass rate + fMassRate = 1.0; + + // ion shoud be stopped - check on kinetic energy and not scaled energy + if (kinE < fLowestEnergy) { return DBL_MAX; } + + G4double sigma = 0.; + + // use ion table if available for given energy + // for proton, hydrogen, alpha, alpha+, and helium no scaling to proton x-section + if (idx == 0 || idx == 1) { + sigma = (kinE > fElow) ? xscurrent->FindValue(kinE) + : xscurrent->FindValue(fElow)*kinE/fElow; + + // for ions with data above limit energy + } else if (idx > 1) { + sigma = (kinE > fElow) ? xsdata[idx]->FindValue(kinE) + : xsdata[idx]->FindValue(fElow)*kinE/fElow; + + // scaling from proton + } else { + fMassRate = CLHEP::proton_mass_c2/fMass; + G4double e = kinE*fMassRate; + sigma = (e > fLowestEnergy) ? xsdata[1]->FindValue(e) + : xsdata[1]->FindValue(fLowestEnergy)*e/fLowestEnergy; + sigma *= fEmCorrections->EffectiveChargeSquareRatio(part, material, kinE); + } + sigma *= density; - // sampling of final state - G4ParticleDefinition* definition = particle->GetDefinition(); - const G4ThreeVector& primaryDirection = particle->GetMomentumDirection(); - - G4int ionizationShell = RandomSelect(currentScaledEnergy); - - // sample deexcitation - // here we assume that H_{2}O electronic levels are the same as Oxygen. - // this can be considered true with a rough 10% error in energy on K-shell, - - G4double bindingEnergy = waterStructure.IonisationEnergy(ionizationShell); - - //SI: additional protection if tcs interpolation method is modified - if (k < bindingEnergy) return; - // - - G4double secondaryKinetic = RandomizeEjectedElectronEnergy(definition,k,ionizationShell); - - // is ionisation possible? - G4double scatteredEnergy = k - bindingEnergy - secondaryKinetic; - if(scatteredEnergy < 0.0) { return; } - - G4int Z = 8; - - G4ThreeVector deltaDirection = - GetAngularDistribution()->SampleDirectionForShell(particle, secondaryKinetic, - Z, ionizationShell, - couple->GetMaterial()); - - G4DynamicParticle* dp = new G4DynamicParticle (G4Electron::Electron(),deltaDirection,secondaryKinetic) ; - fvect->push_back(dp); - - fParticleChangeForGamma->ProposeMomentumDirection(primaryDirection); - - size_t secNumberInit = 0;// need to know at a certain point the energy of secondaries - size_t secNumberFinal = 0;// So I'll make the diference and then sum the energies - - // SI: only atomic deexcitation from K shell is considered - if(fAtomDeexcitation != nullptr && ionizationShell == 4) - { - const G4AtomicShell* shell - = fAtomDeexcitation->GetAtomicShell(Z, G4AtomicShellEnumerator(0)); - secNumberInit = fvect->size(); - fAtomDeexcitation->GenerateParticles(fvect, shell, Z, 0, 0); - secNumberFinal = fvect->size(); - - if(secNumberFinal > secNumberInit) - { - for (size_t i=secNumberInit; i= ((*fvect)[i])->GetKineticEnergy()) - { - //Ok, this is a valid secondary: keep it - bindingEnergy -= ((*fvect)[i])->GetKineticEnergy(); - } - else - { - //Invalid secondary: not enough energy to create it! - //Keep its energy in the local deposit - delete (*fvect)[i]; - (*fvect)[i]=0; - } - } - } - } - - //bindingEnergy has been decreased - //by the amount of energy taken away by deexc. products - if (!statCode) - { - fParticleChangeForGamma->SetProposedKineticEnergy(scatteredEnergy); - fParticleChangeForGamma->ProposeLocalEnergyDeposit(bindingEnergy); - } - else - { - fParticleChangeForGamma->SetProposedKineticEnergy(k); - fParticleChangeForGamma->ProposeLocalEnergyDeposit(k-scatteredEnergy); - } - - // TEST ////////////////////////// - // if (secondaryKinetic<0) abort(); - // if (scatteredEnergy<0) abort(); - // if (k-scatteredEnergy-secondaryKinetic-deexSecEnergy<0) abort(); - // if (k-scatteredEnergy<0) abort(); - ///////////////////////////////// - - const G4Track * theIncomingTrack = fParticleChangeForGamma->GetCurrentTrack(); - G4DNAChemistryManager::Instance()->CreateWaterMolecule(eIonizedMolecule, - ionizationShell, - theIncomingTrack); - // SI - not useful since low energy of model is 0 eV + if (verbose > 1) { + G4cout << "G4DNARuddIonisationExtendedModel for " << part->GetParticleName() + << " Ekin(keV)=" << kinE/CLHEP::keV + << " sigma(cm^2)=" << sigma/CLHEP::cm2 << G4endl; + } + return sigma; } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNARuddIonisationExtendedModel::RandomizeEjectedElectronEnergy(G4ParticleDefinition* particleDefinition, - G4double k, - G4int shell) +void +G4DNARuddIonisationExtendedModel::SampleSecondaries(std::vector* fvect, + const G4MaterialCutsCouple* couple, + const G4DynamicParticle* dpart, + G4double, G4double) { - //-- Fast sampling method ----- - G4double proposed_energy; - G4double random1; - G4double value_sampling; - G4double max1; - - do - { - proposed_energy = ProposedSampledEnergy(particleDefinition, k, shell); // Proposed energy by inverse function sampling - - max1=0.; - - for(G4double en=0.; en<20.; en+=1.) if(RejectionFunction(particleDefinition, k, en, shell) > max1) - max1=RejectionFunction(particleDefinition, k, en, shell); + const G4ParticleDefinition* pd = dpart->GetDefinition(); + if (fParticle != pd) { SetParticle(pd); } + + // stop ion with energy below low energy limit + G4double kinE = dpart->GetKineticEnergy(); + // ion shoud be stopped - check on kinetic energy and not scaled energy + if (kinE <= fLowestEnergy) { + fParticleChangeForGamma->SetProposedKineticEnergy(0.); + fParticleChangeForGamma->ProposeTrackStatus(fStopButAlive); + fParticleChangeForGamma->ProposeLocalEnergyDeposit(kinE); + return; + } - random1 = G4UniformRand()*max1; + G4int shell = SelectShell(kinE); + G4double bindingEnergy = (useDNAWaterStructure) + ? waterStructure.IonisationEnergy(shell) : Bj[shell]; + + //Si: additional protection if tcs interpolation method is modified + if (kinE < bindingEnergy) return; + + G4double esec = SampleElectronEnergy(kinE, bindingEnergy, shell); + G4double esum = 0.0; + + // sample deexcitation + // here we assume that H2O electronic levels are the same as Oxygen. + // this can be considered true with a rough 10% error in energy on K-shell, + G4int Z = 8; + G4ThreeVector deltaDir = + GetAngularDistribution()->SampleDirectionForShell(dpart, esec, Z, shell, couple->GetMaterial()); + + // SI: only atomic deexcitation from K shell is considered + if(fAtomDeexcitation != nullptr && shell == 4) { + auto as = G4AtomicShellEnumerator(shell); + auto ashell = fAtomDeexcitation->GetAtomicShell(Z, as); + fAtomDeexcitation->GenerateParticles(fvect, ashell, Z, 0, 0); + + // compute energy sum from de-excitation + std::size_t nn = fvect->size(); + for (std::size_t i=0; iGetKineticEnergy(); + } + } + // check energy balance + // remaining excitation energy of water molecule + G4double exc = bindingEnergy - esum; + + // remaining projectile energy + G4double scatteredEnergy = kinE - bindingEnergy - esec; + if(scatteredEnergy < -tolerance || exc < -tolerance) { + G4cout << "G4DNARuddIonisationExtendedModel::SampleSecondaries: " + << "negative final E(keV)=" << scatteredEnergy/CLHEP::keV << " Ein(keV)=" + << kinE/CLHEP::keV << " " << pd->GetParticleName() + << " Edelta(keV)=" << esec/CLHEP::keV << " MeV, Exc(keV)=" << exc/CLHEP::keV + << G4endl; + } - value_sampling = RejectionFunction(particleDefinition, k, proposed_energy, shell); + // projectile + if (!statCode) { + fParticleChangeForGamma->SetProposedKineticEnergy(scatteredEnergy); + fParticleChangeForGamma->ProposeLocalEnergyDeposit(exc); + } else { + fParticleChangeForGamma->SetProposedKineticEnergy(kinE); + fParticleChangeForGamma->ProposeLocalEnergyDeposit(kinE - scatteredEnergy); + } - } while(random1 > value_sampling); + // delta-electron + G4DynamicParticle* dp = new G4DynamicParticle(G4Electron::Electron(), deltaDir, esec); + fvect->push_back(dp); - return(proposed_energy); + // create radical + const G4Track* theIncomingTrack = fParticleChangeForGamma->GetCurrentTrack(); + G4DNAChemistryManager::Instance()->CreateWaterMolecule(eIonizedMolecule, shell, + theIncomingTrack); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4DNARuddIonisationExtendedModel::RejectionFunction(G4ParticleDefinition* particleDefinition, - G4double k, - G4double proposed_ws, - G4int ionizationLevelIndex) +G4int G4DNARuddIonisationExtendedModel::SelectShell(G4double e) { - const G4int j=ionizationLevelIndex; - G4double Bj_energy, alphaConst; - G4double Ry = 13.6*eV; - const G4double Gj[5] = {0.99, 1.11, 1.11, 0.52, 1.}; - - // const G4double Bj[5] = {12.61*eV, 14.73*eV, 18.55*eV, 32.20*eV, 539.7*eV}; //Ding Paper - - // Following values provided by M. Dingfelder (priv. comm) - const G4double Bj[5] = {12.60*eV, 14.70*eV, 18.40*eV, 32.20*eV, 540*eV}; - - if (j == 4) - { - alphaConst = 0.66; - //---Note that the following (j==4) cases are provided by M. Dingfelder (priv. comm) - Bj_energy = waterStructure.IonisationEnergy(ionizationLevelIndex); - //--- - } - else - { - alphaConst = 0.64; - Bj_energy = Bj[ionizationLevelIndex]; - } - - G4double energyTransfer = proposed_ws + Bj_energy; - proposed_ws/=Bj_energy; - - G4double tau = 0.; - G4double A_ion = 0.; - tau = (electron_mass_c2 / particleDefinition->GetPDGMass()) * k; - A_ion = particleDefinition->GetAtomicMass(); - - G4double v2; - G4double beta2; - - if((tau/MeV)<5.447761194e-2) - { - v2 = tau / Bj_energy; - beta2 = 2.*tau / electron_mass_c2; - } - // Relativistic - else - { - v2 = (electron_mass_c2 / 2. / Bj_energy) * (1. - (1./ pow( (1.+ (tau/electron_mass_c2)),2) )); - beta2 =1. - 1./(1.+ (tau/electron_mass_c2/A_ion))/(1.+ (tau/electron_mass_c2/A_ion)); - } - - G4double v = std::sqrt(v2); - G4double wc = 4.*v2 - 2.*v - (Ry/(4.*Bj_energy)); - G4double rejection_term = 1.+G4Exp(alphaConst*(proposed_ws - wc) / v); - rejection_term = (1./rejection_term)*CorrectionFactor(particleDefinition,k,ionizationLevelIndex) * Gj[j]; - //* (S/Bj_energy) ; Not needed anymore - - G4bool isHelium = false; - - if ( particleDefinition == protonDef - || particleDefinition == hydrogenDef - ) - { - return(rejection_term); - } - - else if(particleDefinition->GetAtomicMass() > 4) // anything above Helium - { - G4double Z = particleDefinition->GetAtomicNumber(); - - G4double x = 100.*std::sqrt(beta2)/gpow->powA(Z, 2./3.); - G4double Zeffion = Z*(1.-G4Exp(-1.316*x+0.112*x*x-0.0650*x*x*x)); - rejection_term*=Zeffion*Zeffion; - } - - else if (particleDefinition == alphaPlusPlusDef ) - { - isHelium = true; - slaterEffectiveCharge[0]=0.; - slaterEffectiveCharge[1]=0.; - slaterEffectiveCharge[2]=0.; - sCoefficient[0]=0.; - sCoefficient[1]=0.; - sCoefficient[2]=0.; - } + G4double sum = 0.0; + G4double xs; + for(G4int i=0; i<5; ++i) { + if (idx == 0 || idx == 1) { + auto ptr = xscurrent->GetComponent(i); + xs = (e > fElow) ? ptr->FindValue(e) : ptr->FindValue(fElow)*e/fElow; - else if (particleDefinition == alphaPlusDef ) - { - isHelium = true; - slaterEffectiveCharge[0]=2.0; - // The following values are provided by M. Dingfelder (priv. comm) - slaterEffectiveCharge[1]=2.0; - slaterEffectiveCharge[2]=2.0; - // - sCoefficient[0]=0.7; - sCoefficient[1]=0.15; - sCoefficient[2]=0.15; - } - - else if (particleDefinition == heliumDef ) - { - isHelium = true; - slaterEffectiveCharge[0]=1.7; - slaterEffectiveCharge[1]=1.15; - slaterEffectiveCharge[2]=1.15; - sCoefficient[0]=0.5; - sCoefficient[1]=0.25; - sCoefficient[2]=0.25; - } - - if (isHelium) - { - - G4double zEff = particleDefinition->GetPDGCharge() / eplus + particleDefinition->GetLeptonNumber(); + } else if (idx > 1) { + auto ptr = xsdata[idx]->GetComponent(i); + xs = (e > fElow) ? ptr->FindValue(e) : ptr->FindValue(fElow)*e/fElow; - zEff -= ( sCoefficient[0] * S_1s(k, energyTransfer, slaterEffectiveCharge[0], 1.) + - sCoefficient[1] * S_2s(k, energyTransfer, slaterEffectiveCharge[1], 2.) + - sCoefficient[2] * S_2p(k, energyTransfer, slaterEffectiveCharge[2], 2.) ); - - rejection_term*= zEff * zEff; + } else { + // use scaling from proton + auto ptr = xsdata[1]->GetComponent(i); + G4double x = e*fMassRate; + xs = (x >= fLowestEnergy) ? ptr->FindValue(x) + : ptr->FindValue(fLowestEnergy)*x/fLowestEnergy; } - - return (rejection_term); + sum += xs; + fTemp[i] = sum; + } + sum *= G4UniformRand(); + for(G4int i=0; i<5; ++i) { + if(sum <= fTemp[i]) { return i; } + } + return 0; } - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4double G4DNARuddIonisationExtendedModel::ProposedSampledEnergy(G4ParticleDefinition* particle, - G4double k, - G4int ionizationLevelIndex) +G4double G4DNARuddIonisationExtendedModel::SampleElectronEnergy(G4double kine, + G4double eexc, + G4int shell) { - - const G4int j=ionizationLevelIndex; - - G4double A1, B1, C1, D1, E1, A2, B2, C2, D2; - //G4double alphaConst ; - G4double Bj_energy; - - // const G4double Bj[5] = {12.61*eV, 14.73*eV, 18.55*eV, 32.20*eV, 539.7*eV}; //Ding Paper - // Following values provided by M. Dingfelder (priv. comm) - - const G4double Bj[5] = {12.60*eV, 14.70*eV, 18.40*eV, 32.20*eV, 540*eV}; - - if (j == 4) - { - //Data For Liquid Water K SHELL from Dingfelder (Protons in Water) - A1 = 1.25; - B1 = 0.5; - C1 = 1.00; - D1 = 1.00; - E1 = 3.00; - A2 = 1.10; - B2 = 1.30; - C2 = 1.00; - D2 = 0.00; - //alphaConst = 0.66; - //---Note that the following (j==4) cases are provided by M. Dingfelder (priv. comm) - Bj_energy = waterStructure.IonisationEnergy(ionizationLevelIndex); - //--- + // kinematic limit + G4double tau = kine/fMass; + G4double emax = 2.0*CLHEP::electron_mass_c2*tau*(tau + 2.0); + // compute cumulative probability function + G4double step = 1*CLHEP::eV; + G4int nn = (G4int)(emax/step); + nn = std::max(nn, 10); + step = emax/(G4double)nn; + + // find max probability + G4double pmax = ProbabilityFunction(kine, 0.0, eexc, shell); + //G4cout << "E(keV)=" << kine/keV << " emax=" << emax/keV + // << " pmax(0)=" << pmax << " shell=" << shell << " nn=" << nn << G4endl; + + G4double e2 = 0.0; // backup energy + G4double e0 = 0.0; // energy with max probability + G4double e = 0.0; + for (G4int i=0; iGetPDGMass()) * k; - - A_ion = particle->GetAtomicMass(); - - G4double v2; - G4double beta2; - if((tau/MeV)<5.447761194e-2) - { - v2 = tau / Bj_energy; - beta2 = 2.*tau / electron_mass_c2; - } - // Relativistic - else - { - v2 = (electron_mass_c2 / 2. / Bj_energy) * (1. - (1./ pow( (1.+ (tau/electron_mass_c2)),2) )); - beta2 =1. - 1./(1.+ (tau/electron_mass_c2/A_ion))/(1.+ (tau/electron_mass_c2/A_ion)); + pmax = prob; + e0 = e; + } + //G4cout << " E0(keV)=" << e0/keV << " pmax=" << pmax << G4endl; + pmax *= 1.05; + // regression method with two regions + G4double e1 = emax; + G4double p1 = 0.0; + if (2*e0 < emax) { + e1 = e0 + 0.25*(emax - e0); + p1 = ProbabilityFunction(kine, e1, eexc, shell); + } + G4double s2 = p1*(emax - e1); + s2 /= (s2 + e1*pmax); + G4double s1 = 1.0 - s2; + + // sampling + G4int count = 0; + G4double ymax, y, deltae; + for (G4int i = 0; i<100000; ++i) { + G4double q = G4UniformRand(); + if (q <= s1) { + ymax = pmax; + deltae = e1 * q / s1; + } else { + ymax = p1; + deltae = e1 + (emax - e1)* (q - s1) / s2; } - - G4double v = std::sqrt(v2); - //G4double wc = 4.*v2 - 2.*v - (Ry/(4.*Bj_energy)); - G4double L1 = (C1* gpow->powA(v,(D1))) / (1.+ E1*gpow->powA(v, (D1+4.))); - G4double L2 = C2*gpow->powA(v,(D2)); - G4double H1 = (A1*G4Log(1.+v2)) / (v2+(B1/v2)); - G4double H2 = (A2/v2) + (B2/(v2*v2)); - G4double F1 = L1+H1; - G4double F2 = (L2*H2)/(L2+H2); - - // ZF. generalized & relativistic version - G4double maximumEnergy; - - //---- maximum kinetic energy , non relativistic ------ - if( (k/MeV)/(particle->GetPDGMass()/MeV) <= 0.1 ) - { - maximumEnergy = 4.* (electron_mass_c2 / particle->GetPDGMass()) * k; + y = ProbabilityFunction(kine, deltae, eexc, shell); + //G4cout << " " << i << ". deltae=" << deltae/CLHEP::keV + // << " y=" << y << " ymax=" << ymax << G4endl; + if (y > ymax && count < 10) { + ++count; + G4cout << "G4DNARuddIonisationExtendedModel::SampleElectronEnergy warning: " + << fParticle->GetParticleName() << " E(keV)=" << kine/CLHEP::keV + << " Edelta(keV)=" << deltae/CLHEP::keV + << " y=" << y << " ymax=" << ymax << " n=" << i << G4endl; } - //---- relativistic ----------------------------------- - else - { - G4double gamma = 1./sqrt(1.-beta2); - maximumEnergy = 2.*electron_mass_c2*(gamma*gamma-1.)/ - (1.+2.*gamma*(electron_mass_c2/particle->GetPDGMass())+pow(electron_mass_c2/particle->GetPDGMass(), 2.) ); + if (ymax * G4UniformRand() < y) { + return deltae; } - - //either it is transfered energy or secondary electron energy ... - //maximumEnergy-=Bj_energy; - - //----------------------------------------------------- - G4double wmax = maximumEnergy/Bj_energy; - G4double c = wmax*(F2*wmax+F1*(2.+wmax))/(2.*(1.+wmax)*(1.+wmax)); - c=1./c; //!!!!!!!!!!! manual calculus leads to c=1/c - G4double randVal = G4UniformRand(); - G4double proposed_ws = F1*F1*c*c + 2.*F2*c*randVal - 2.*F1*c*randVal; - proposed_ws = -F1*c+2.*randVal+std::sqrt(proposed_ws); - // proposed_ws = -F1*c+2.*randVal-std::sqrt(proposed_ws); - proposed_ws/= ( F1*c + F2*c - 2.*randVal ); - proposed_ws*=Bj_energy; - - return(proposed_ws); - + } + deltae = e2; + return deltae; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4DNARuddIonisationExtendedModel::S_1s(G4double t, - G4double energyTransferred, - G4double slaterEffectiveChg, - G4double shellNumber) +G4double G4DNARuddIonisationExtendedModel::ProbabilityFunction(G4double kine, + G4double deltae, + G4double bindingEnergy, + G4int shell) { - // 1 - e^(-2r) * ( 1 + 2 r + 2 r^2) - // Dingfelder, in Chattanooga 2005 proceedings, formula (7) - - G4double r = R(t, energyTransferred, slaterEffectiveChg, shellNumber); - G4double value = 1. - G4Exp(-2 * r) * ( ( 2. * r + 2. ) * r + 1. ); - - return value; + // Shells ids are 0 1 2 3 4 (4 is k shell) + // !!Attention, "energyTransfer" here is the energy transfered to the electron which means + // that the secondary kinetic energy is w = energyTransfer - bindingEnergy + // + // ds S F1(nu) + w * F2(nu) + // ---- = G(k) * ---- ------------------------------------------- + // dw Bj (1+w)^3 * [1 + exp{alpha * (w - wc) / nu}] + // + // w is the secondary electron kinetic Energy in eV + // + // All the other parameters can be found in Rudd's Papers + // + // M.Eugene Rudd, 1988, User-Friendly model for the energy distribution of + // electrons from protons or electron collisions. Nucl. Tracks Rad. Meas.Vol 16 N0 2/3 pp 219-218 + // + G4double A1, B1, C1, D1, E1, A2, B2, C2, D2, alphaConst; + if (shell == 4) { + //Data For Liquid Water K SHELL from Dingfelder (Protons in Water) + A1 = 1.25; + B1 = 0.5; + C1 = 1.00; + D1 = 1.00; + E1 = 3.00; + A2 = 1.10; + B2 = 1.30; + C2 = 1.00; + D2 = 0.00; + alphaConst = 0.66; + } else { + //Data For Liquid Water from Dingfelder (Protons in Water) + A1 = 1.02; + B1 = 82.0; + C1 = 0.45; + D1 = -0.80; + E1 = 0.38; + A2 = 1.07; + // Value provided by M. Dingfelder (priv. comm) + B2 = 11.6; + C2 = 0.60; + D2 = 0.04; + alphaConst = 0.64; + } + G4double bEnergy = Bj[shell]; + G4double w = deltae/bEnergy; + G4double u = Ry/bEnergy; + G4double tau = kine/fMass; + G4double gam = 1.0 + tau;; + + G4double v2 = 0.5*CLHEP::electron_mass_c2*tau*(tau + 2.0)/(bEnergy*gam*gam); + G4double v = std::sqrt(v2); + G4double wc = 4.*v2 - 2.*v - 0.25*u; + + G4double x = alphaConst*(w - wc)/v; + G4double y = (x > -15.) ? 1.0 + G4Exp(x) : 1.0; + + G4double L1 = (C1 * fGpow->powA(v, D1)) / (1. + E1 * fGpow->powA(v, (D1 + 4.))); + G4double L2 = C2 * fGpow->powA(v, D2); + G4double H1 = (A1 * G4Log(1. + v2)) / (v2 + (B1 / v2)); + G4double H2 = (A2 / v2) + (B2 / (v2 * v2)); + + G4double F1 = L1 + H1; + G4double F2 = (L2 * H2) / (L2 + H2); + + G4double res = CorrectionFactor(kine, shell) * (F1 + w*F2) * Gj[shell] / + (fGpow->powN((1. + w)/u, 3) * y); + + if(isHelium) { + G4double energyTransfer = deltae + bindingEnergy; + G4double Zeff = 2.0 - + (sCoefficient[0] * S_1s(kine, energyTransfer, slaterEffectiveCharge[0], 1.) + + sCoefficient[1] * S_2s(kine, energyTransfer, slaterEffectiveCharge[1], 2.) + + sCoefficient[2] * S_2p(kine, energyTransfer, slaterEffectiveCharge[2], 2.) ); + + res *= Zeff * Zeff; + } + return std::max(res, 0.0); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4DNARuddIonisationExtendedModel::S_2s(G4double t, - G4double energyTransferred, - G4double slaterEffectiveChg, - G4double shellNumber) +G4double G4DNARuddIonisationExtendedModel::ComputeProbabilityFunction( + const G4ParticleDefinition* p, G4double e, G4double deltae, G4int shell) { - // 1 - e^(-2 r) * ( 1 + 2 r + 2 r^2 + 2 r^4) - // Dingfelder, in Chattanooga 2005 proceedings, formula (8) - - G4double r = R(t, energyTransferred, slaterEffectiveChg, shellNumber); - G4double value = 1. - G4Exp(-2 * r) * (((2. * r * r + 2.) * r + 2.) * r + 1.); - - return value; - + if (fParticle != p) { SetParticle(p); } + G4double bEnergy = (useDNAWaterStructure) + ? waterStructure.IonisationEnergy(shell) : Bj[shell]; + return ProbabilityFunction(e, deltae, bEnergy, shell); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4DNARuddIonisationExtendedModel::S_2p(G4double t, - G4double energyTransferred, - G4double slaterEffectiveChg, +G4double G4DNARuddIonisationExtendedModel::S_1s(G4double kine, + G4double energyTransfer, + G4double slaterEffCharge, G4double shellNumber) { - // 1 - e^(-2 r) * ( 1 + 2 r + 2 r^2 + 4/3 r^3 + 2/3 r^4) - // Dingfelder, in Chattanooga 2005 proceedings, formula (9) - - G4double r = R(t, energyTransferred, slaterEffectiveChg, shellNumber); - G4double value = 1. - G4Exp(-2 * r) * (((( 2./3. * r + 4./3.) * r + 2.) * r + 2.) * r + 1.); + // 1 - e^(-2r) * ( 1 + 2 r + 2 r^2) + // Dingfelder, in Chattanooga 2005 proceedings, formula (7) - return value; + G4double r = Rh(kine, energyTransfer, slaterEffCharge, shellNumber); + G4double value = 1. - G4Exp(-2 * r) * ( ( 2. * r + 2. ) * r + 1. ); + return value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4DNARuddIonisationExtendedModel::R(G4double t, - G4double energyTransferred, - G4double slaterEffectiveChg, - G4double shellNumber) +G4double G4DNARuddIonisationExtendedModel::S_2s(G4double kine, + G4double energyTransfer, + G4double slaterEffCharge, + G4double shellNumber) { - // tElectron = m_electron / m_alpha * t - // Dingfelder, in Chattanooga 2005 proceedings, p 4 + // 1 - e^(-2 r) * ( 1 + 2 r + 2 r^2 + 2 r^4) + // Dingfelder, in Chattanooga 2005 proceedings, formula (8) - G4double tElectron = 0.511/3728. * t; - // The following values are provided by M. Dingfelder (priv. comm) - G4double H = 2.*13.60569172 * eV; - G4double value = std::sqrt ( 2. * tElectron / H ) / ( energyTransferred / H ) * (slaterEffectiveChg/shellNumber); + G4double r = Rh(kine, energyTransfer, slaterEffCharge, shellNumber); + G4double value = + 1. - G4Exp(-2 * r) * (((2. * r * r + 2.) * r + 2.) * r + 1.); - return value; + return value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4DNARuddIonisationExtendedModel::CorrectionFactor(G4ParticleDefinition* particleDefinition, G4double k, G4int shell) +G4double G4DNARuddIonisationExtendedModel::S_2p(G4double kine, + G4double energyTransfer, + G4double slaterEffCharge, + G4double shellNumber) { - // ZF Shortened - - if (particleDefinition == hydrogenDef && shell < 4) - { - G4double value = ((G4Log(k/eV)/gpow->logZ(10))-4.2)/0.5; - // The following values are provided by M. Dingfelder (priv. comm) - return((0.6/(1+G4Exp(value))) + 0.9); - } - else - { - return(1.); - } -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4int G4DNARuddIonisationExtendedModel::RandomSelect(G4double k) -{ - G4int level = 0; - - // Retrieve data table corresponding to the current particle type - - G4DNACrossSectionDataSet* table = currentTable; - - if (table != nullptr) - { - G4double* valuesBuffer = new G4double[table->NumberOfComponents()]; - - const G4int n = (G4int)table->NumberOfComponents(); - G4int i(n); - G4double value = 0.; - - while (i>0) - { - --i; - valuesBuffer[i] = table->GetComponent(i)->FindValue(k); - - value += valuesBuffer[i]; - } - - value *= G4UniformRand(); - - i = n; - - while (i > 0) - { - --i; - - if (valuesBuffer[i] > value) - { - delete[] valuesBuffer; - return i; - } - value -= valuesBuffer[i]; - } + // 1 - e^(-2 r) * ( 1 + 2 r + 2 r^2 + 4/3 r^3 + 2/3 r^4) + // Dingfelder, in Chattanooga 2005 proceedings, formula (9) - if (valuesBuffer) delete[] valuesBuffer; + G4double r = Rh(kine, energyTransfer, slaterEffCharge, shellNumber); + G4double value = + 1. - G4Exp(-2 * r) * (((( 2./3. * r + 4./3.) * r + 2.) * r + 2.) * r + 1.); - } - return level; + return value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4DNARuddIonisationExtendedModel::PartialCrossSection(const G4Track& track ) +G4double G4DNARuddIonisationExtendedModel::Rh(G4double ekin, G4double etrans, + G4double q, G4double shell) { - G4double sigma = 0.; + // The following values are provided by M. Dingfelder (priv. comm) + // Dingfelder, in Chattanooga 2005 proceedings, p 4 - const G4DynamicParticle* particle = track.GetDynamicParticle(); - G4double k = particle->GetKineticEnergy(); + G4double escaled = CLHEP::electron_mass_c2/fMass * ekin; + const G4double H = 13.60569172 * CLHEP::eV; + G4double value = 2.0*std::sqrt(escaled / H)*q*H /(etrans*shell); - G4double lowLim = 0; - G4double highLim = 0; - - const G4String& particleName = particle->GetDefinition()->GetParticleName(); - - std::map< G4String,G4double,std::less >::iterator pos1; - pos1 = lowEnergyLimit.find(particleName); - - if (pos1 != lowEnergyLimit.end()) - { - lowLim = pos1->second; - } - - std::map< G4String,G4double,std::less >::iterator pos2; - pos2 = highEnergyLimit.find(particleName); - - if (pos2 != highEnergyLimit.end()) - { - highLim = pos2->second; - } - - if (k >= lowLim && k <= highLim) - { - std::map< G4String,G4DNACrossSectionDataSet*,std::less >::iterator pos; - pos = tableData.find(particleName); - - if (pos != tableData.end()) - { - G4DNACrossSectionDataSet* table = pos->second; - if (table != 0) - { - sigma = table->FindValue(k); - } - } - else - { - G4Exception("G4DNARuddIonisationExtendedModel::PartialCrossSection","em0002", - FatalException,"Model not applicable to particle type."); - } - } - - return sigma; + return value; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4DNARuddIonisationExtendedModel::Sum(G4double /* energy */, const G4String& /* particle */) +G4double +G4DNARuddIonisationExtendedModel::CorrectionFactor(G4double kine, G4int shell) { - return 0; + // ZF Shortened + G4double res = 1.0; + if (shell < 4 && 0 != idx) { + const G4double ln10 = fGpow->logZ(10); + G4double x = 2.0*((G4Log(kine/CLHEP::eV)/ln10) - 4.2); + // The following values are provided by M. Dingfelder (priv. comm) + res = 0.6/(1.0 + G4Exp(x)) + 0.9; + } + return res; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4ParticleDefinition* G4DNARuddIonisationExtendedModel::GetDNAIonParticleDefinition(const G4ParticleDefinition* particleDefinition) -{ - //for proton, hydrogen, alphas - if(particleDefinition->GetAtomicMass() <= 4) - { - return const_cast(particleDefinition); - } - else{ - auto instance = G4DNAGenericIonsManager::Instance(); - - auto PDGEncoding = particleDefinition->GetPDGEncoding(); - if(PDGEncoding == 1000140280){ - return instance->GetIon("silicon"); - }else if(PDGEncoding == 1000260560){ - return instance->GetIon("iron"); - }else if(PDGEncoding == 1000080160){ - return instance->GetIon("oxygen"); - }else if(PDGEncoding == 1000070140){ - return instance->GetIon("nitrogen"); - }else if(PDGEncoding == 1000060120){ - return instance->GetIon("carbon"); - } - //if there is no DNA particle, get nullptr - return nullptr; - } -} diff --git a/source/processes/electromagnetic/dna/models/src/G4DNAVacuumModel.cc b/source/processes/electromagnetic/dna/models/src/G4DNAVacuumModel.cc index 795a98017e4..4f78fd603e7 100644 --- a/source/processes/electromagnetic/dna/models/src/G4DNAVacuumModel.cc +++ b/source/processes/electromagnetic/dna/models/src/G4DNAVacuumModel.cc @@ -26,71 +26,60 @@ // #include "G4DNAVacuumModel.hh" -#include "G4SystemOfUnits.hh" -#include "G4DNAChemistryManager.hh" #include "G4DNAMolecularMaterial.hh" -G4DNAVacuumModel::G4DNAVacuumModel(const G4String& applyToMaterial, const G4ParticleDefinition*, - const G4String& nam) - : G4VDNAModel(nam, applyToMaterial) +G4DNAVacuumModel::G4DNAVacuumModel( + const G4String& applyToMaterial, const G4ParticleDefinition*, const G4String& nam) + : G4VDNAModel(nam, applyToMaterial) { - verboseLevel = 0; + verboseLevel = 0; - if( verboseLevel>0 ) - { - G4cout << "G4DNAVacuumModel is constructed " << G4endl; - } + if (verboseLevel > 0) { + G4cout << "G4DNAVacuumModel is constructed " << G4endl; + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4DNAVacuumModel::~G4DNAVacuumModel() -{ - if (verboseLevel > 3) - G4cout << "Calling G4DNAVacuumModel::Initialise()" << G4endl; - +{ + if (verboseLevel > 3) G4cout << "Calling G4DNAVacuumModel::Initialise()" << G4endl; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4DNAVacuumModel::Initialise(const G4ParticleDefinition* particle, - const G4DataVector& /*cuts*/, G4ParticleChangeForGamma*) +void G4DNAVacuumModel::Initialise( + const G4ParticleDefinition* particle, const G4DataVector& /*cuts*/) { - - if (verboseLevel > 3) - G4cout << "Calling G4DNAVacuumModel::Initialise()" << G4endl; - - EnableForMaterialAndParticle("G4_Galactic", particle->GetParticleName() ); + if (verboseLevel > 3) { + G4cout << "Calling G4DNAVacuumModel::Initialise()" << G4endl; + } + if(G4Material::GetMaterial("G4_Galactic",false) != nullptr) + { + auto index = (G4int)G4Material::GetMaterial("G4_Galactic")->GetIndex(); + EnableForMaterialAndParticle(index, particle); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4DNAVacuumModel::CrossSectionPerVolume(const G4Material* /*material*/, - const G4String& /*materialName*/, - const G4ParticleDefinition* /*particleDefinition*/, - G4double /*ekin*/, - G4double /*emin*/, - G4double /*emax*/) +G4double G4DNAVacuumModel::CrossSectionPerVolume(const G4Material* /*material*/, const G4ParticleDefinition* /*particleDefinition*/, + G4double /*ekin*/, G4double /*emin*/, G4double /*emax*/) { - if (verboseLevel > 3) - G4cout << "Calling CrossSectionPerVolume() of G4DNAVacuumModel" << G4endl; + if (verboseLevel > 3) { + G4cout << "Calling CrossSectionPerVolume() of G4DNAVacuumModel" << G4endl; + } - return 0; + return 0; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... void G4DNAVacuumModel::SampleSecondaries(std::vector* /*fvect*/, - const G4MaterialCutsCouple* /*couple*/, - const G4String& /*materialName*/, - const G4DynamicParticle* /*aDynamicParticle*/, - G4ParticleChangeForGamma* /*particleChangeForGamma*/, - G4double /*tmin*/, - G4double /*tmax*/) + const G4MaterialCutsCouple* /*couple*/, + const G4DynamicParticle* /*aDynamicParticle*/, G4double /*tmin*/, G4double /*tmax*/) { - - if (verboseLevel > 3) - G4cout << "Calling SampleSecondaries() of G4DNAVacuumModel" << G4endl; - + if (verboseLevel > 3) { + G4cout << "Calling SampleSecondaries() of G4DNAVacuumModel" << G4endl; + } } - diff --git a/source/processes/electromagnetic/dna/models/src/G4VDNAModel.cc b/source/processes/electromagnetic/dna/models/src/G4VDNAModel.cc index 14da7a4610f..b87daa2a79f 100644 --- a/source/processes/electromagnetic/dna/models/src/G4VDNAModel.cc +++ b/source/processes/electromagnetic/dna/models/src/G4VDNAModel.cc @@ -29,258 +29,247 @@ // #include "G4VDNAModel.hh" -#include "G4SystemOfUnits.hh" + #include "G4ParticleTable.hh" +#include "G4SystemOfUnits.hh" -G4VDNAModel::G4VDNAModel(const G4String &nam, const G4String &applyToMaterial) - : fStringOfMaterials(applyToMaterial), fName(nam) -{ +G4VDNAModel::G4VDNAModel(const G4String& nam, const G4String& applyToMaterial) + : G4VEmModel(nam), fStringOfMaterials(applyToMaterial) +{} -} +G4VDNAModel::~G4VDNAModel() = default; -G4VDNAModel::~G4VDNAModel() +void G4VDNAModel::AddCrossSectionData(const std::size_t& materialID, + const G4ParticleDefinition* particleName, + const G4String& fileCS, const G4String& fileDiffCS, + const G4double& scaleFactor) { - // Clean fTableData - std::map > >::iterator posOuter; - std::map >::iterator posInner; - // iterate on each material - for (posOuter = fTableData.begin(); posOuter != fTableData.end(); ++posOuter) - { - // iterate on each particle - for(posInner = posOuter->second.begin(); posInner != posOuter->second.end(); ++posInner) - { - G4DNACrossSectionDataSet* table = posInner->second; - if(table != 0) delete table; - } - } + fModelMaterials.push_back(materialID); + fModelParticles.push_back(particleName); + fModelCSFiles.push_back(fileCS); + fModelDiffCSFiles.push_back(fileDiffCS); + fModelScaleFactors.push_back(scaleFactor); } -void G4VDNAModel::AddCrossSectionData(G4String materialName, G4String particleName, G4String fileCS, G4String fileDiffCS, G4double scaleFactor) +void G4VDNAModel::AddCrossSectionData(const std::size_t& materialID, + const G4ParticleDefinition* particleName, + const G4String& fileCS, const G4double& scaleFactor) { - fModelMaterials.push_back(materialName); - fModelParticles.push_back(particleName); - fModelCSFiles.push_back(fileCS); - fModelDiffCSFiles.push_back(fileDiffCS); - fModelScaleFactors.push_back(scaleFactor); + fModelMaterials.push_back(materialID); + fModelParticles.push_back(particleName); + fModelCSFiles.push_back(fileCS); + fModelScaleFactors.push_back(scaleFactor); } -void G4VDNAModel::AddCrossSectionData(G4String materialName, G4String particleName, G4String fileCS, G4double scaleFactor) +void G4VDNAModel::LoadCrossSectionData(const G4ParticleDefinition* particleName) { - fModelMaterials.push_back(materialName); - fModelParticles.push_back(particleName); - fModelCSFiles.push_back(fileCS); - fModelScaleFactors.push_back(scaleFactor); -} + G4String fileElectron, fileDiffElectron = ""; + G4String materialName, modelParticleName; + G4double scaleFactor; + std::size_t materialID; + + const G4ParticleDefinition* pParticle; + + // construct applyToMatVect with materials specified by the user + std::vector applyToMatVect = BuildApplyToMatVect(fStringOfMaterials); + + // iterate on each material contained into the fStringOfMaterials variable (through + // applyToMatVect) + for (unsigned int i = 0; i < applyToMatVect.size(); ++i) { + auto pMat = G4Material::GetMaterial(applyToMatVect[i], false); + if (applyToMatVect[i] != "all" && pMat == nullptr) { + continue; + } -void G4VDNAModel::LoadCrossSectionData(const G4String& particleName) -{ - G4String fileElectron, fileDiffElectron; - G4String materialName, modelParticleName; - G4double scaleFactor; - - // construct applyToMatVect with materials specified by the user - std::vector applyToMatVect = BuildApplyToMatVect(fStringOfMaterials); - - // iterate on each material contained into the fStringOfMaterials variable (through applyToMatVect) - for(unsigned int i=0;iGetIndex() == fModelMaterials[j]) { + isMatFound = true; + materialID = fModelMaterials[j]; + pParticle = fModelParticles[j]; + fileElectron = fModelCSFiles[j]; + if (!fModelDiffCSFiles.empty()) fileDiffElectron = fModelDiffCSFiles[j]; + scaleFactor = fModelScaleFactors[j]; + + ReadAndSaveCSFile(materialID, pParticle, fileElectron, scaleFactor); + + if (fileDiffElectron != "") + ReadDiffCSFile(materialID, pParticle, fileDiffElectron, scaleFactor); + } + } - // check if we found a correspondance, if not: fatal error - if(!isMatFound) - { - std::ostringstream oss; - oss << applyToMatVect[i] << " material was not found. It means the material specified in the UserPhysicsList is not a model material for "; - oss << particleName; - G4Exception("G4VDNAModel::LoadCrossSectionData","em0003", - FatalException, oss.str().c_str()); - return; - } + // check if we found a correspondance, if not: fatal error + if (!isMatFound) { + std::ostringstream oss; + oss << applyToMatVect[i] + << " material was not found. It means the material specified in the UserPhysicsList is " + "not a model material for "; + oss << particleName; + G4Exception("G4VDNAModel::LoadCrossSectionData", "em0003", FatalException, oss.str().c_str()); + return; } + } } -void G4VDNAModel::ReadDiffCSFile(const G4String&, const G4String&, const G4String&, const G4double) +void G4VDNAModel::ReadDiffCSFile(const std::size_t&, const G4ParticleDefinition*, const G4String&, + const G4double&) { - G4String text("ReadDiffCSFile must be implemented in the model class using a differential cross section data file"); + G4String text( + "ReadDiffCSFile must be implemented in the model class using a differential cross section data " + "file"); - G4Exception("G4VDNAModel::ReadDiffCSFile","em0003", - FatalException, text); + G4Exception("G4VDNAModel::ReadDiffCSFile", "em0003", FatalException, text); } -void G4VDNAModel::EnableForMaterialAndParticle(const G4String &materialName, const G4String &particleName) +void G4VDNAModel::EnableForMaterialAndParticle(const std::size_t& materialID, + const G4ParticleDefinition* p) { - fTableData[materialName][particleName] = 0; + fData[materialID][p] = nullptr; } std::vector G4VDNAModel::BuildApplyToMatVect(const G4String& materials) { - // output material vector - std::vector materialVect; - - // if we don't find any "/" then it means we only have one "material" (could be the "all" option) - if(materials.find("/")==std::string::npos) - { - // we add the material to the output vector - materialVect.push_back(materials); + // output material vector + std::vector materialVect; + + // if we don't find any "/" then it means we only have one "material" (could be the "all" option) + if (materials.find("/") == std::string::npos) { + // we add the material to the output vector + materialVect.push_back(materials); + } + // if we have several materials listed in the string then we must retrieve them + else { + G4String materialsNonIdentified = materials; + + while (materialsNonIdentified.find_first_of("/") != std::string::npos) { + // we select the first material and stop at the "/" caracter + G4String mat = materialsNonIdentified.substr(0, materialsNonIdentified.find_first_of("/")); + materialVect.push_back(mat); + + // we remove the previous material from the materialsNonIdentified string + materialsNonIdentified = materialsNonIdentified.substr( + materialsNonIdentified.find_first_of("/") + 1, + materialsNonIdentified.size() - materialsNonIdentified.find_first_of("/")); } - // if we have several materials listed in the string then we must retrieve them - else - { - G4String materialsNonIdentified = materials; - - while(materialsNonIdentified.find_first_of("/") != std::string::npos) - { - // we select the first material and stop at the "/" caracter - G4String mat = materialsNonIdentified.substr(0, materialsNonIdentified.find_first_of("/")); - materialVect.push_back(mat); - - // we remove the previous material from the materialsNonIdentified string - materialsNonIdentified = materialsNonIdentified.substr(materialsNonIdentified.find_first_of("/")+1, - materialsNonIdentified.size()-materialsNonIdentified.find_first_of("/")); - } - // we don't find "/" anymore, it means we only have one material string left - // we get it - materialVect.push_back(materialsNonIdentified); - } + // we don't find "/" anymore, it means we only have one material string left + // we get it + materialVect.push_back(materialsNonIdentified); + } - return materialVect; + return materialVect; } -void G4VDNAModel::ReadAndSaveCSFile(const G4String& materialName, - const G4String& particleName, - const G4String& file, G4double scaleFactor) +void G4VDNAModel::ReadAndSaveCSFile(const std::size_t& materialID, const G4ParticleDefinition* p, + const G4String& file, const G4double& scaleFactor) { - fTableData[materialName][particleName] = new G4DNACrossSectionDataSet(new G4LogLogInterpolation, eV, scaleFactor); - fTableData[materialName][particleName]->LoadData(file); + fData[materialID][p] = + std::make_unique(new G4LogLogInterpolation, eV, scaleFactor); + fData[materialID][p]->LoadData(file); } -G4int G4VDNAModel::RandomSelectShell(G4double k, const G4String& particle, const G4String& materialName) +G4int G4VDNAModel::RandomSelectShell(const G4double& k, const G4ParticleDefinition* particle, + const std::size_t& materialID) { - G4int level = 0; - - TableMapData* tableData = GetTableData(); - - std::map< G4String,G4DNACrossSectionDataSet*,std::less >::iterator pos; - pos = (*tableData)[materialName].find(particle); + G4int level = 0; - if (pos != (*tableData)[materialName].end()) - { - G4DNACrossSectionDataSet* table = pos->second; + auto pos = fData[materialID].find(particle); - if (table != 0) - { - G4double* valuesBuffer = new G4double[table->NumberOfComponents()]; - const G4int n = (G4int)table->NumberOfComponents(); - G4int i(n); - G4double value = 0.; + if (pos != fData[materialID].end()) { + G4DNACrossSectionDataSet* table = pos->second.get(); - while (i>0) - { - --i; - valuesBuffer[i] = table->GetComponent(i)->FindValue(k); - value += valuesBuffer[i]; - } + if (table != nullptr) { + auto valuesBuffer = new G4double[table->NumberOfComponents()]; + auto n = (G4int)table->NumberOfComponents(); + G4int i(n); + G4double value = 0.; - value *= G4UniformRand(); + while (i > 0) { + --i; + valuesBuffer[i] = table->GetComponent(i)->FindValue(k); + value += valuesBuffer[i]; + } - i = n; + value *= G4UniformRand(); - while (i > 0) - { - --i; + i = n; - if (valuesBuffer[i] > value) - { - delete[] valuesBuffer; - return i; - } - value -= valuesBuffer[i]; - } - - if (valuesBuffer) delete[] valuesBuffer; + while (i > 0) { + --i; + if (valuesBuffer[i] > value) { + delete[] valuesBuffer; + return i; } + value -= valuesBuffer[i]; + } + + delete[] valuesBuffer; } - else - { - G4Exception("G4VDNAModel::RandomSelectShell","em0002", - FatalException,"Model not applicable to particle type."); - } - return level; + } + else { + G4cout << "particle : " << particle->GetParticleName() + << " Materials : " << (*G4Material::GetMaterialTable())[materialID]->GetName() << " " + << this->GetName() << G4endl; + G4Exception("G4VDNAModel::RandomSelectShell", "em0002", FatalException, + "Model not applicable to particle type : "); + } + return level; } -G4bool G4VDNAModel::IsMaterialDefine(const G4String& materialName) +G4bool G4VDNAModel::IsMaterialDefine(const std::size_t& materialID) { - // Check if the given material is defined in the simulation + // Check if the given material is defined in the simulation - G4bool exist (false); + G4bool exist(false); - double matTableSize = G4Material::GetMaterialTable()->size(); + G4double matTableSize = G4Material::GetMaterialTable()->size(); - for(int i=0;iat(i)->GetName()) - { - exist = true; - return exist; - } + for (int i = 0; i < matTableSize; i++) { + if (materialID == G4Material::GetMaterialTable()->at(i)->GetIndex()) { + exist = true; + return exist; } + } - return exist; + G4Exception("G4VDNAModel::IsMaterialDefine", "em0003", FatalException, + "Materials are not defined!!"); + return exist; } -G4bool G4VDNAModel::IsMaterialExistingInModel(const G4String& materialName) +G4bool G4VDNAModel::IsMaterialExistingInModel(const std::size_t& materialID) { - // Check if the given material is defined in the current model class + // Check if the given material is defined in the current model class - if (fTableData.find(materialName) == fTableData.end()) - { - return false; - } - else - { - return true; + for (const auto& it : fModelMaterials) { + if (it == materialID) { + return true; } + } + return false; } -G4bool G4VDNAModel::IsParticleExistingInModelForMaterial(const G4String& particleName, const G4String& materialName) +G4bool G4VDNAModel::IsParticleExistingInModelForMaterial(const G4ParticleDefinition* particleName, + const std::size_t& materialID) { - // To check two things: - // 1- is the material existing in model ? - // 2- if yes, is the particle defined for that material ? - - if(IsMaterialExistingInModel(materialName)) - { - if (fTableData[materialName].find(particleName) == fTableData[materialName].end()) - { - return false; - } - else return true; + // To check two things: + // 1- is the material existing in model ? + // 2- if yes, is the particle defined for that material ? + + if (IsMaterialExistingInModel(materialID)) { + for (const auto& it : fModelParticles) { + if (it == particleName) { + return true; + } } - else return false; + } + return false; } diff --git a/source/processes/electromagnetic/dna/molecules/GNUmakefile b/source/processes/electromagnetic/dna/molecules/GNUmakefile deleted file mode 100644 index 48dc0458d3c..00000000000 --- a/source/processes/electromagnetic/dna/molecules/GNUmakefile +++ /dev/null @@ -1,7 +0,0 @@ -SUBDIR = management types - -% : - @for dir in $(SUBDIR); do (cd $$dir ; $(MAKE) $(MFLAGS) $@); done;: - -all : - @for dir in $(SUBDIR); do (cd $$dir ; $(MAKE) $(MFLAGS) ); done;: diff --git a/source/processes/electromagnetic/dna/molecules/management/GNUmakefile b/source/processes/electromagnetic/dna/molecules/management/GNUmakefile deleted file mode 100644 index f4db6ae0ed1..00000000000 --- a/source/processes/electromagnetic/dna/molecules/management/GNUmakefile +++ /dev/null @@ -1,28 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for electromagnetic sub-library. John Allison, 25/6/98. -# -------------------------------------------------------------------- - -name := G4emdna-molman - -ifndef G4INSTALL - G4INSTALL = ../../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -ifndef G4BASE -G4BASE := $(G4INSTALL)/source -endif - -CPPFLAGS += -DG4EM_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/processes/electromagnetic/dna/management/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/electromagnetic/dna/molecules/types/GNUmakefile b/source/processes/electromagnetic/dna/molecules/types/GNUmakefile deleted file mode 100644 index 3d3dccffcd3..00000000000 --- a/source/processes/electromagnetic/dna/molecules/types/GNUmakefile +++ /dev/null @@ -1,25 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for electromagnetic sub-library. John Allison, 25/6/98. -# -------------------------------------------------------------------- - -name := G4emdna-moltypes - -ifndef G4INSTALL - G4INSTALL = ../../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4EM_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/processes/electromagnetic/dna/management/include \ - -I$(G4BASE)/processes/electromagnetic/dna/molecules/management/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - - diff --git a/source/processes/electromagnetic/dna/processes/GNUmakefile b/source/processes/electromagnetic/dna/processes/GNUmakefile deleted file mode 100644 index d8f2644e64a..00000000000 --- a/source/processes/electromagnetic/dna/processes/GNUmakefile +++ /dev/null @@ -1,43 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for electromagnetic sub-library. John Allison, 25/6/98. -# -------------------------------------------------------------------- - -name := G4emdna-processes - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4EM_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/electromagnetic/standard/include \ - -I$(G4BASE)/processes/electromagnetic/lowenergy/include \ - -I$(G4BASE)/processes/electromagnetic/dna/models/include \ - -I$(G4BASE)/processes/electromagnetic/dna/utils/include \ - -I$(G4BASE)/processes/electromagnetic/dna/molecules/management/include \ - -I$(G4BASE)/processes/electromagnetic/dna/molecules/types/include \ - -I$(G4BASE)/processes/electromagnetic/dna/management/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - - diff --git a/source/processes/electromagnetic/dna/utils/GNUmakefile b/source/processes/electromagnetic/dna/utils/GNUmakefile deleted file mode 100644 index 53181465c8b..00000000000 --- a/source/processes/electromagnetic/dna/utils/GNUmakefile +++ /dev/null @@ -1,41 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for electromagnetic sub-library. John Allison, 25/6/98. -# -------------------------------------------------------------------- - -name := G4emdna-utils - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4EM_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/electromagnetic/standard/include \ - -I$(G4BASE)/processes/electromagnetic/lowenergy/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/processes/electromagnetic/dna/molecules/management/include \ - -I$(G4BASE)/processes/electromagnetic/dna/molecules/types/include \ - -I$(G4BASE)/processes/electromagnetic/dna/management/include \ - -I$(G4BASE)/externals/g4tools/include \ - -I$(G4BASE)/analysis/management/include - -include $(G4INSTALL)/config/common.gmk - - diff --git a/source/processes/electromagnetic/dna/utils/src/G4DNACPA100WaterIonisationStructure.cc b/source/processes/electromagnetic/dna/utils/include/G4DNACPA100ExcitationStructure.hh similarity index 60% rename from source/processes/electromagnetic/dna/utils/src/G4DNACPA100WaterIonisationStructure.cc rename to source/processes/electromagnetic/dna/utils/include/G4DNACPA100ExcitationStructure.hh index 7b5fdc94f4a..57d8473a5cf 100644 --- a/source/processes/electromagnetic/dna/utils/src/G4DNACPA100WaterIonisationStructure.cc +++ b/source/processes/electromagnetic/dna/utils/include/G4DNACPA100ExcitationStructure.hh @@ -27,59 +27,55 @@ // // Users are requested to cite the following papers: // - M. Terrissol, A. Baudre, Radiat. Prot. Dosim. 31 (1990) 175-177 -// - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries, +// - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries, // M. Bardies, N. Lampe, S. Incerti, Phys. Med. 32 (2016) 1833-1840 // -// Authors of this class: +// Authors of this class: // M.C. Bordage, M. Terrissol, S. Edel, J. Bordes, S. Incerti // // 15.01.2014: creation // +// +// Based on the study by S. Zein et. al. Nucl. Inst. Meth. B 488 (2021) 70-82 -#include "G4DNACPA100WaterIonisationStructure.hh" -#include "G4SystemOfUnits.hh" - -G4DNACPA100WaterIonisationStructure::G4DNACPA100WaterIonisationStructure(): nLevels(5) -{ - energyConstant.push_back(10.79*eV); - energyConstant.push_back(13.39*eV); - energyConstant.push_back(16.05*eV); - energyConstant.push_back(32.30*eV); - energyConstant.push_back(539.0*eV); - - UConstant.push_back(61.91*eV); - UConstant.push_back(59.52*eV); - UConstant.push_back(48.36*eV); - UConstant.push_back(70.71*eV); - UConstant.push_back(796.2*eV); - - nLevels = (G4int)energyConstant.size(); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - -G4DNACPA100WaterIonisationStructure::~G4DNACPA100WaterIonisationStructure() -{ } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... +#ifndef G4DNACPA100ExcitationStructure_hh +#define G4DNACPA100ExcitationStructure_hh 1 +#include "globals.hh" -G4double G4DNACPA100WaterIonisationStructure::IonisationEnergy(G4int level) +#include +class G4Material; +class G4DNACPA100ExcitationStructure { - G4double ionisation = 0.; - - if (level >=0 && level < nLevels) ionisation = energyConstant[level]; - - return ionisation; -} + public: + G4DNACPA100ExcitationStructure(); + ~G4DNACPA100ExcitationStructure() = default; + G4double ExcitationEnergy(const std::size_t& level, const std::size_t& MatID); + G4double UEnergy(const std::size_t& level, const std::size_t& MatID); + inline std::size_t NumberOfLevels(const std::size_t& MatID) + { + return fnLevels[MatID]; + } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - -G4double G4DNACPA100WaterIonisationStructure::UEnergy(G4int level) -{ - G4double ionisation = 0.; + private: + void InitialiseGuanine(); + void InitialiseWater(); + void InitialiseDeoxyribose(); + void InitialiseCytosine(); + void InitialiseThymine(); + void InitialiseAdenine(); + void InitialisePhosphate(); - if (level >=0 && level < nLevels) ionisation = UConstant[level]; + std::map fnLevels; + std::map> fEnergyConstant; + std::map> fUConstant; - return ionisation; -} + G4Material* fpGuanine = nullptr; + G4Material* fpG4_WATER = nullptr; + G4Material* fpDeoxyribose = nullptr; + G4Material* fpCytosine = nullptr; + G4Material* fpThymine = nullptr; + G4Material* fpAdenine = nullptr; + G4Material* fpPhosphate = nullptr; +}; +#endif // diff --git a/source/processes/electromagnetic/dna/utils/include/G4DNACPA100IonisationStructure.hh b/source/processes/electromagnetic/dna/utils/include/G4DNACPA100IonisationStructure.hh new file mode 100644 index 00000000000..c3f84e56877 --- /dev/null +++ b/source/processes/electromagnetic/dna/utils/include/G4DNACPA100IonisationStructure.hh @@ -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. * +// ******************************************************************** +// +// Based on the work of M. Terrissol and M. C. Bordage +// +// Users are requested to cite the following papers: +// - M. Terrissol, A. Baudre, Radiat. Prot. Dosim. 31 (1990) 175-177 +// - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries, +// M. Bardies, N. Lampe, S. Incerti, Phys. Med. 32 (2016) 1833-1840 +// +// Authors of this class: +// M.C. Bordage, M. Terrissol, S. Edel, J. Bordes, S. Incerti +// +// 15.01.2014: creation +// +// +// Based on the study by S. Zein et. al. Nucl. Inst. Meth. B 488 (2021) 70-82 +// 1/2/2023 : Hoang added modification for DNA cross sections + +#ifndef G4DNACPA100IonisationStructure_hh +#define G4DNACPA100IonisationStructure_hh + +#include "globals.hh" + +#include + +class G4Material; + +class G4DNACPA100IonisationStructure +{ + public: + G4DNACPA100IonisationStructure(); + + ~G4DNACPA100IonisationStructure() = default; + + G4double IonisationEnergy(const std::size_t& level, const std::size_t& MatID); + + G4double UEnergy(const std::size_t& level, const std::size_t& MatID); + + inline std::size_t NumberOfLevels(const std::size_t& MatID) + { + return fnLevels[MatID]; + } + + private: + void InitialiseGuanine(); + void InitialiseWater(); + void InitialiseDeoxyribose(); + void InitialiseCytosine(); + void InitialiseThymine(); + void InitialiseAdenine(); + void InitialisePhosphate(); + + std::map fnLevels; + std::map> fEnergyConstant; + std::map> fUConstant; + + G4Material* fpGuanine = nullptr; + G4Material* fpG4_WATER = nullptr; + G4Material* fpDeoxyribose = nullptr; + G4Material* fpCytosine = nullptr; + G4Material* fpThymine = nullptr; + G4Material* fpAdenine = nullptr; + G4Material* fpPhosphate = nullptr; +}; + +#endif // G4DNACPA100IonisationStructure_hh diff --git a/source/processes/electromagnetic/dna/utils/include/G4DNAMaterialManager.hh b/source/processes/electromagnetic/dna/utils/include/G4DNAMaterialManager.hh new file mode 100644 index 00000000000..c992737b1a5 --- /dev/null +++ b/source/processes/electromagnetic/dna/utils/include/G4DNAMaterialManager.hh @@ -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. * +// ******************************************************************** +// +// 1/2/2023: Hoang: this file is used to check avaiable DNA materils, +// and keeps DNA cross sections. + +#ifndef G4DNAMaterialManager_hh +#define G4DNAMaterialManager_hh 1 + +#include "globals.hh" +#include "G4DNACrossSectionDataSet.hh" +#include +class G4Material; +class G4ParticleDefinition; +class G4StateManager; +class G4VEmModel; +enum class DNAModelType +{ + fDNAIonisation = 0, + fDNAExcitation, + fDNAElastics, + fDNADefault +}; + +class G4DNAMaterialManager { +public: + using MaterialMap = std::map; + + static G4DNAMaterialManager *Instance(); + + G4DNAMaterialManager(const G4DNAMaterialManager &) = delete; + + const G4DNAMaterialManager &operator=(const G4DNAMaterialManager &) = delete; + + G4VEmModel* GetModel(const DNAModelType& t); + + void SetMasterDataModel(const DNAModelType& t, G4VEmModel* m); + + G4bool IsLocked() const; + +private: + G4DNAMaterialManager(); + + ~G4DNAMaterialManager() = default; + + static G4DNAMaterialManager *theInstance; + + MaterialMap fMaterials; + G4StateManager* fStateManager = nullptr; + //this data stores only master models. + //this data is only to read then non conflits + std::map fData; +}; + +#endif diff --git a/source/processes/electromagnetic/dna/utils/include/G4DNAPTBExcitationStructure.hh b/source/processes/electromagnetic/dna/utils/include/G4DNAPTBExcitationStructure.hh index 0a49cc5f948..76544667212 100644 --- a/source/processes/electromagnetic/dna/utils/include/G4DNAPTBExcitationStructure.hh +++ b/source/processes/electromagnetic/dna/utils/include/G4DNAPTBExcitationStructure.hh @@ -30,29 +30,24 @@ #include "globals.hh" #include #include - - +class G4Material; class G4DNAPTBExcitationStructure { public: - - G4DNAPTBExcitationStructure(); - - virtual ~G4DNAPTBExcitationStructure() = default; - - G4double ExcitationEnergy(G4int ExcLevel, const G4String &materialName); - G4int NumberOfExcLevels(const G4String& materialName); - - + G4DNAPTBExcitationStructure(); + ~G4DNAPTBExcitationStructure() = default; + G4double ExcitationEnergy(const G4int& ExcLevel, const size_t &materialID); + G4int NumberOfExcLevels(const size_t& materialID); + G4DNAPTBExcitationStructure(const G4DNAPTBExcitationStructure&) = delete; // prevent copy-construction + G4DNAPTBExcitationStructure& operator=( + const G4DNAPTBExcitationStructure& right) = delete; // prevent assignement private: - // Number of Excitation levels of the water molecule - std::map nExcLevels; - - std::map > energyConstant; - - G4String ReplaceMaterial(const G4String &materialName); + std::map nExcLevels; + std::map > energyConstant; + size_t ReplaceMaterial(const size_t &materialName); + G4Material* fpN2; }; #endif diff --git a/source/processes/electromagnetic/dna/utils/include/G4DNAPTBIonisationStructure.hh b/source/processes/electromagnetic/dna/utils/include/G4DNAPTBIonisationStructure.hh index 1f4706ff44e..67416299171 100644 --- a/source/processes/electromagnetic/dna/utils/include/G4DNAPTBIonisationStructure.hh +++ b/source/processes/electromagnetic/dna/utils/include/G4DNAPTBIonisationStructure.hh @@ -29,34 +29,38 @@ #ifndef G4DNAPTBIonisationStructure_HH #define G4DNAPTBIonisationStructure_HH 1 - #include "globals.hh" -#include #include - - +#include +class G4Material; class G4DNAPTBIonisationStructure { -public: - + public: G4DNAPTBIonisationStructure(); - - virtual ~G4DNAPTBIonisationStructure(); - - G4double IonisationEnergy(G4int level, const G4String &materialName); + ~G4DNAPTBIonisationStructure() = default; + G4double IonisationEnergy(G4int level, const size_t& materialName); + G4int NumberOfLevels(const size_t& materialName); + G4DNAPTBIonisationStructure(const G4DNAPTBIonisationStructure&) = delete; // prevent copy-construction + G4DNAPTBIonisationStructure& operator=( + const G4DNAPTBIonisationStructure& right) = delete; // prevent assignement - G4int NumberOfLevels(const G4String& materialName); - - // Copy constructor and assignment operator to be added here - -private: - + private: // Number of Ionisation levels of the water molecule - std::map nLevels; - - std::map > energyConstant; - - G4String ReplaceMaterial(const G4String &materialName); + std::map nLevels; + std::map> energyConstant; + size_t ReplaceMaterial(const size_t& materialID); + G4Material* fpGuanine_PU = nullptr; + G4Material* fpTHF = nullptr; + G4Material* fpPY = nullptr; + G4Material* fpPU = nullptr; + G4Material* fpTMP = nullptr; + G4Material* fpG4_WATER = nullptr; + G4Material* fpBackbone_THF = nullptr; + G4Material* fpCytosine_PY = nullptr; + G4Material* fpThymine_PY = nullptr; + G4Material* fpAdenine_PU = nullptr; + G4Material* fpBackbone_TMP = nullptr; + G4Material* fpN2 = nullptr; }; #endif diff --git a/source/processes/electromagnetic/dna/utils/sources.cmake b/source/processes/electromagnetic/dna/utils/sources.cmake index 281238d06e9..a73ce1a2cd5 100644 --- a/source/processes/electromagnetic/dna/utils/sources.cmake +++ b/source/processes/electromagnetic/dna/utils/sources.cmake @@ -5,8 +5,8 @@ geant4_add_module(G4emdna-utils PUBLIC_HEADERS G4DNAChemistryManager.hh G4DNACPA100LogLogInterpolation.hh - G4DNACPA100WaterExcitationStructure.hh - G4DNACPA100WaterIonisationStructure.hh + G4DNACPA100ExcitationStructure.hh + G4DNACPA100IonisationStructure.hh G4DNACrossSectionDataSet.hh G4DNADamage.hh G4DNAGenericIonsManager.hh @@ -35,11 +35,12 @@ geant4_add_module(G4emdna-utils G4DNAMesh.hh G4DNAEventSet.hh G4ChemicalMoleculeFinder.hh + G4DNAMaterialManager.hh SOURCES G4DNAChemistryManager.cc G4DNACPA100LogLogInterpolation.cc - G4DNACPA100WaterExcitationStructure.cc - G4DNACPA100WaterIonisationStructure.cc + G4DNACPA100ExcitationStructure.cc + G4DNACPA100IonisationStructure.cc G4DNACrossSectionDataSet.cc G4DNADamage.cc G4DNAGenericIonsManager.cc @@ -64,7 +65,8 @@ geant4_add_module(G4emdna-utils G4IRTUtils.cc G4DNAScavengerMaterial.cc G4DNAMesh.cc - G4DNAEventSet.cc) + G4DNAEventSet.cc + G4DNAMaterialManager.cc) geant4_module_link_libraries(G4emdna-utils PUBLIC diff --git a/source/processes/electromagnetic/dna/utils/src/G4DNACPA100ExcitationStructure.cc b/source/processes/electromagnetic/dna/utils/src/G4DNACPA100ExcitationStructure.cc new file mode 100644 index 00000000000..5c3f16f6386 --- /dev/null +++ b/source/processes/electromagnetic/dna/utils/src/G4DNACPA100ExcitationStructure.cc @@ -0,0 +1,261 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Based on the work of M. Terrissol and M. C. Bordage +// +// Users are requested to cite the following papers: +// - M. Terrissol, A. Baudre, Radiat. Prot. Dosim. 31 (1990) 175-177 +// - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries, +// M. Bardies, N. Lampe, S. Incerti, Phys. Med. 32 (2016) 1833-1840 +// +// Authors of this class: +// M.C. Bordage, M. Terrissol, S. Edel, J. Bordes, S. Incerti +// +// 15.01.2014: creation +// +// +// Modified for Adenine material by S. Zein on 20.04.2021 +// Based on the study by S. Zein et. al. Nucl. Inst. Meth. B 488 (2021) 70-82 + +#include "G4DNACPA100ExcitationStructure.hh" + +#include "G4Material.hh" +#include "G4SystemOfUnits.hh" +G4DNACPA100ExcitationStructure::G4DNACPA100ExcitationStructure() +{ + fpGuanine = G4Material::GetMaterial("G4_GUANINE", false); + fpG4_WATER = G4Material::GetMaterial("G4_WATER", false); + fpDeoxyribose = G4Material::GetMaterial("G4_DEOXYRIBOSE", false); + fpCytosine = G4Material::GetMaterial("G4_CYTOSINE", false); + fpThymine = G4Material::GetMaterial("G4_THYMINE", false); + fpAdenine = G4Material::GetMaterial("G4_ADENINE", false); + fpPhosphate = G4Material::GetMaterial("G4_PHOSPHORIC_ACID", false); + + if (fpGuanine != nullptr) { + InitialiseGuanine(); + } + + if (fpG4_WATER != nullptr) { + InitialiseWater(); + } + + if (fpDeoxyribose != nullptr) { + InitialiseDeoxyribose(); + } + + if (fpCytosine != nullptr) { + InitialiseCytosine(); + } + + if (fpThymine != nullptr) { + InitialiseThymine(); + } + + if (fpAdenine != nullptr) { + InitialiseAdenine(); + } + + if (fpPhosphate != nullptr) { + InitialisePhosphate(); + } +} + +void G4DNACPA100ExcitationStructure::InitialiseGuanine() +{ + auto index = fpGuanine->GetIndex(); + fEnergyConstant[index].push_back(8.2315 * eV); + fEnergyConstant[index].push_back(11.0928 * eV); + fEnergyConstant[index].push_back(11.5984 * eV); + fEnergyConstant[index].push_back(11.7906 * eV); + fEnergyConstant[index].push_back(11.9382 * eV); + fEnergyConstant[index].push_back(12.4424 * eV); + fEnergyConstant[index].push_back(13.3581 * eV); + fEnergyConstant[index].push_back(15.1381 * eV); + fEnergyConstant[index].push_back(16.4059 * eV); + fEnergyConstant[index].push_back(16.496 * eV); + fEnergyConstant[index].push_back(16.8457 * eV); + fEnergyConstant[index].push_back(17.297 * eV); + fEnergyConstant[index].push_back(18.0608 * eV); + fEnergyConstant[index].push_back(18.441 * eV); + fEnergyConstant[index].push_back(19.2414 * eV); + + fnLevels[index] = fEnergyConstant[index].size(); +} +void G4DNACPA100ExcitationStructure::InitialiseWater() +{ + auto index = fpG4_WATER->GetIndex(); + // The following values are extracted from the thesis of S. Edel, + // Paul Sabatier University, Toulouse, France, July 7, 2006 + // Page 36 + fEnergyConstant[index].push_back(8.17 * eV); + fEnergyConstant[index].push_back(10.13 * eV); + fEnergyConstant[index].push_back(11.31 * eV); + fEnergyConstant[index].push_back(12.91 * eV); + fEnergyConstant[index].push_back(14.50 * eV); + + fUConstant[index].push_back(61.91 * eV); + fUConstant[index].push_back(59.52 * eV); + fUConstant[index].push_back(48.36 * eV); + fUConstant[index].push_back(70.71 * eV); + fUConstant[index].push_back(796.2 * eV); + + fnLevels[index] = fEnergyConstant[index].size(); +} +void G4DNACPA100ExcitationStructure::InitialiseDeoxyribose() +{ + auto index = fpDeoxyribose->GetIndex(); + fEnergyConstant[index].push_back(11.2410 * eV); + fEnergyConstant[index].push_back(11.7927 * eV); + fEnergyConstant[index].push_back(12.6579 * eV); + fEnergyConstant[index].push_back(12.8163 * eV); + fEnergyConstant[index].push_back(13.3238 * eV); + fEnergyConstant[index].push_back(13.9487 * eV); + fEnergyConstant[index].push_back(14.4374 * eV); + fEnergyConstant[index].push_back(14.7433 * eV); + fEnergyConstant[index].push_back(15.0818 * eV); + fEnergyConstant[index].push_back(15.6112 * eV); + fEnergyConstant[index].push_back(16.0547 * eV); + fEnergyConstant[index].push_back(16.8319 * eV); + fEnergyConstant[index].push_back(17.4294 * eV); + fEnergyConstant[index].push_back(18.0000 * eV); + fEnergyConstant[index].push_back(18.2696 * eV); + fEnergyConstant[index].push_back(18.6049 * eV); + fEnergyConstant[index].push_back(19.8378 * eV); + + fnLevels[index] = fEnergyConstant[index].size(); +} +void G4DNACPA100ExcitationStructure::InitialiseCytosine() +{ + auto index = fpCytosine->GetIndex(); + // The following values are extracted from the thesis of S. Edel, + fEnergyConstant[index].push_back(9.3222 * eV); + fEnergyConstant[index].push_back(10.4601 * eV); + fEnergyConstant[index].push_back(11.3044 * eV); + fEnergyConstant[index].push_back(11.9986 * eV); + fEnergyConstant[index].push_back(13.4528 * eV); + fEnergyConstant[index].push_back(14.7371 * eV); + fEnergyConstant[index].push_back(16.2286 * eV); + fEnergyConstant[index].push_back(16.5877 * eV); + fEnergyConstant[index].push_back(17.0741 * eV); + fEnergyConstant[index].push_back(17.1875 * eV); + fEnergyConstant[index].push_back(18.638 * eV); + fEnergyConstant[index].push_back(19.6884 * eV); + fnLevels[index] = fEnergyConstant[index].size(); +} +void G4DNACPA100ExcitationStructure::InitialiseThymine() +{ + // The following values are extracted from the thesis of S. Edel, + auto index = fpThymine->GetIndex(); + + fEnergyConstant[index].push_back(9.639 * eV); + fEnergyConstant[index].push_back(11.8278 * eV); + fEnergyConstant[index].push_back(12.0876 * eV); + fEnergyConstant[index].push_back(12.9656 * eV); + fEnergyConstant[index].push_back(13.9555 * eV); + fEnergyConstant[index].push_back(15.0774 * eV); + fEnergyConstant[index].push_back(15.4078 * eV); + fEnergyConstant[index].push_back(15.4689 * eV); + fEnergyConstant[index].push_back(16.1964 * eV); + fEnergyConstant[index].push_back(16.8955 * eV); + fEnergyConstant[index].push_back(17.5018 * eV); + fEnergyConstant[index].push_back(18.2979 * eV); + fEnergyConstant[index].push_back(18.4495 * eV); + fEnergyConstant[index].push_back(19.3186 * eV); + fnLevels[index] = fEnergyConstant[index].size(); +} +void G4DNACPA100ExcitationStructure::InitialiseAdenine() +{ + auto index = fpAdenine->GetIndex(); + // The following values are extracted from the thesis of S. Edel, + + fEnergyConstant[index].push_back(8.5114 * eV); + fEnergyConstant[index].push_back(10.1294 * eV); + fEnergyConstant[index].push_back(11.0606 * eV); + fEnergyConstant[index].push_back(11.5849 * eV); + fEnergyConstant[index].push_back(12.1533 * eV); + fEnergyConstant[index].push_back(13.356 * eV); + fEnergyConstant[index].push_back(13.6554 * eV); + fEnergyConstant[index].push_back(15.3296 * eV); + fEnergyConstant[index].push_back(16.179 * eV); + fEnergyConstant[index].push_back(16.7676 * eV); + fEnergyConstant[index].push_back(17.3489 * eV); + fEnergyConstant[index].push_back(17.5568 * eV); + fEnergyConstant[index].push_back(18.554 * eV); + fEnergyConstant[index].push_back(19.0866 * eV); + fnLevels[index] = fEnergyConstant[index].size(); +} +void G4DNACPA100ExcitationStructure::InitialisePhosphate() +{ + // The following values are extracted from the thesis of S. Edel, + auto index = fpPhosphate->GetIndex(); + fEnergyConstant[index].push_back(12.9963 * eV); + fEnergyConstant[index].push_back(12.9972 * eV); + fEnergyConstant[index].push_back(14.3109 * eV); + fEnergyConstant[index].push_back(15.2221 * eV); + fEnergyConstant[index].push_back(16.0591 * eV); + fEnergyConstant[index].push_back(16.0622 * eV); + fEnergyConstant[index].push_back(17.6365 * eV); + fEnergyConstant[index].push_back(17.6401 * eV); + fEnergyConstant[index].push_back(18.8803 * eV); + fnLevels[index] = fEnergyConstant[index].size(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4double G4DNACPA100ExcitationStructure::ExcitationEnergy(const std::size_t& level, + const std::size_t& MatID) +{ + G4double ionisation = 0.; + + if (level < fnLevels[MatID]) { + ionisation = fEnergyConstant[MatID][level]; + } + else { + std::ostringstream oss; + oss << " material was not found. "; + G4Exception("G4DNACPA100ExcitationStructure::ExcitationEnergy", "CPA001", FatalException, + oss.str().c_str()); + } + + return ionisation; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4double G4DNACPA100ExcitationStructure::UEnergy(const std::size_t& level, const std::size_t& MatID) +{ + G4double UEnergy = 0.; + if (level < fnLevels[MatID]) { + UEnergy = fUConstant[MatID][level]; + } + else { + std::ostringstream oss; + oss << " material was not found. "; + G4Exception("G4DNACPA100ExcitationStructure::ExcitationEnergy", "CPA001", FatalException, + oss.str().c_str()); + } + + return UEnergy; +} diff --git a/source/processes/electromagnetic/dna/utils/src/G4DNACPA100IonisationStructure.cc b/source/processes/electromagnetic/dna/utils/src/G4DNACPA100IonisationStructure.cc new file mode 100644 index 00000000000..54012d06b7d --- /dev/null +++ b/source/processes/electromagnetic/dna/utils/src/G4DNACPA100IonisationStructure.cc @@ -0,0 +1,387 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Based on the work of M. Terrissol and M. C. Bordage +// +// Users are requested to cite the following papers: +// - M. Terrissol, A. Baudre, Radiat. Prot. Dosim. 31 (1990) 175-177 +// - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries, +// M. Bardies, N. Lampe, S. Incerti, Phys. Med. 32 (2016) 1833-1840 +// +// Authors of this class: +// M.C. Bordage, M. Terrissol, S. Edel, J. Bordes, S. Incerti +// +// 15.01.2014: creation +// +// +// Modified for Adenine material by S. Zein on 20.04.2021 +// Based on the study by S. Zein et. al. Nucl. Inst. Meth. B 488 (2021) 70-82 + +#include "G4DNACPA100IonisationStructure.hh" + +#include "G4Material.hh" +#include "G4SystemOfUnits.hh" + +G4DNACPA100IonisationStructure::G4DNACPA100IonisationStructure() +{ + fpGuanine = G4Material::GetMaterial("G4_GUANINE", false); + fpG4_WATER = G4Material::GetMaterial("G4_WATER", false); + fpDeoxyribose = G4Material::GetMaterial("G4_DEOXYRIBOSE", false); + fpCytosine = G4Material::GetMaterial("G4_CYTOSINE", false); + fpThymine = G4Material::GetMaterial("G4_THYMINE", false); + fpAdenine = G4Material::GetMaterial("G4_ADENINE", false); + fpPhosphate = G4Material::GetMaterial("G4_PHOSPHORIC_ACID", false); + + if (fpGuanine != nullptr) { + InitialiseGuanine(); + } + + if (fpG4_WATER != nullptr) { + InitialiseWater(); + } + + if (fpDeoxyribose != nullptr) { + InitialiseDeoxyribose(); + } + + if (fpCytosine != nullptr) { + InitialiseCytosine(); + } + + if (fpThymine != nullptr) { + InitialiseThymine(); + } + + if (fpAdenine != nullptr) { + InitialiseAdenine(); + } + + if (fpPhosphate != nullptr) { + InitialisePhosphate(); + } +} + +void G4DNACPA100IonisationStructure::InitialiseGuanine() +{ + auto index = fpGuanine->GetIndex(); + /// Guanine has 39 ionization levels + + fEnergyConstant[index].push_back(8.2315 * eV); + fEnergyConstant[index].push_back(11.0928 * eV); + fEnergyConstant[index].push_back(11.5984 * eV); + fEnergyConstant[index].push_back(11.7906 * eV); + fEnergyConstant[index].push_back(11.9382 * eV); + fEnergyConstant[index].push_back(12.4424 * eV); + fEnergyConstant[index].push_back(13.3581 * eV); + fEnergyConstant[index].push_back(15.1381 * eV); + fEnergyConstant[index].push_back(16.4059 * eV); + fEnergyConstant[index].push_back(16.496 * eV); + fEnergyConstant[index].push_back(16.8457 * eV); + fEnergyConstant[index].push_back(17.297 * eV); + fEnergyConstant[index].push_back(18.0608 * eV); + fEnergyConstant[index].push_back(18.441 * eV); + fEnergyConstant[index].push_back(19.2414 * eV); + fEnergyConstant[index].push_back(20.0877 * eV); + fEnergyConstant[index].push_back(20.3321 * eV); + fEnergyConstant[index].push_back(22.0153 * eV); + fEnergyConstant[index].push_back(22.9048 * eV); + fEnergyConstant[index].push_back(24.2447 * eV); + fEnergyConstant[index].push_back(24.692 * eV); + fEnergyConstant[index].push_back(28.2049 * eV); + fEnergyConstant[index].push_back(32.1299 * eV); + fEnergyConstant[index].push_back(33.2774 * eV); + fEnergyConstant[index].push_back(33.3958 * eV); + fEnergyConstant[index].push_back(36.6377 * eV); + fEnergyConstant[index].push_back(37.3483 * eV); + fEnergyConstant[index].push_back(38.3743 * eV); + fEnergyConstant[index].push_back(305.7284 * eV); + fEnergyConstant[index].push_back(307.4187 * eV); + fEnergyConstant[index].push_back(307.8468 * eV); + fEnergyConstant[index].push_back(308.9415 * eV); + fEnergyConstant[index].push_back(309.8057 * eV); + fEnergyConstant[index].push_back(423.1456 * eV); + fEnergyConstant[index].push_back(423.2615 * eV); + fEnergyConstant[index].push_back(424.5211 * eV); + fEnergyConstant[index].push_back(425.006 * eV); + fEnergyConstant[index].push_back(425.0315 * eV); + fEnergyConstant[index].push_back(558.2487 * eV); + fnLevels[index] = fEnergyConstant[index].size(); +} + +void G4DNACPA100IonisationStructure::InitialiseWater() +{ + auto index = fpG4_WATER->GetIndex(); + // The following values are extracted from the thesis of S. Edel, + // Paul Sabatier University, Toulouse, France, July 7, 2006 + // Page 36 + fEnergyConstant[index].push_back(10.79 * eV); + fEnergyConstant[index].push_back(13.39 * eV); + fEnergyConstant[index].push_back(16.05 * eV); + fEnergyConstant[index].push_back(32.30 * eV); + fEnergyConstant[index].push_back(539.0 * eV); + + fUConstant[index].push_back(61.91 * eV); + fUConstant[index].push_back(59.52 * eV); + fUConstant[index].push_back(48.36 * eV); + fUConstant[index].push_back(70.71 * eV); + fUConstant[index].push_back(796.2 * eV); + fnLevels[index] = fEnergyConstant[index].size(); +} + +void G4DNACPA100IonisationStructure::InitialiseDeoxyribose() +{ + auto index = fpDeoxyribose->GetIndex(); + fEnergyConstant[index].push_back(11.241 * eV); + fEnergyConstant[index].push_back(11.7927 * eV); + fEnergyConstant[index].push_back(12.6579 * eV); + fEnergyConstant[index].push_back(12.8163 * eV); + fEnergyConstant[index].push_back(13.3238 * eV); + fEnergyConstant[index].push_back(13.9487 * eV); + fEnergyConstant[index].push_back(14.4374 * eV); + fEnergyConstant[index].push_back(14.7433 * eV); + fEnergyConstant[index].push_back(15.0818 * eV); + fEnergyConstant[index].push_back(15.6112 * eV); + fEnergyConstant[index].push_back(16.0547 * eV); + fEnergyConstant[index].push_back(16.8319 * eV); + fEnergyConstant[index].push_back(17.4294 * eV); + fEnergyConstant[index].push_back(18.0 * eV); + fEnergyConstant[index].push_back(18.2696 * eV); + fEnergyConstant[index].push_back(18.6049 * eV); + fEnergyConstant[index].push_back(19.8378 * eV); + fEnergyConstant[index].push_back(20.5787 * eV); + fEnergyConstant[index].push_back(22.0146 * eV); + fEnergyConstant[index].push_back(22.9176 * eV); + fEnergyConstant[index].push_back(24.9005 * eV); + fEnergyConstant[index].push_back(28.0268 * eV); + fEnergyConstant[index].push_back(28.7417 * eV); + fEnergyConstant[index].push_back(36.9571 * eV); + fEnergyConstant[index].push_back(37.1881 * eV); + fEnergyConstant[index].push_back(37.5798 * eV); + fEnergyConstant[index].push_back(39.2622 * eV); + fEnergyConstant[index].push_back(305.446 * eV); + fEnergyConstant[index].push_back(306.6421 * eV); + fEnergyConstant[index].push_back(306.8925 * eV); + fEnergyConstant[index].push_back(307.0377 * eV); + fEnergyConstant[index].push_back(308.5849 * eV); + fEnergyConstant[index].push_back(559.0236 * eV); + fEnergyConstant[index].push_back(559.3832 * eV); + fEnergyConstant[index].push_back(559.6416 * eV); + fEnergyConstant[index].push_back(559.7734 * eV); + + fnLevels[index] = fEnergyConstant[index].size(); +} + +void G4DNACPA100IonisationStructure::InitialiseCytosine() +{ + auto index = fpCytosine->GetIndex(); + /// Cytosine has 29 ionization levels + fEnergyConstant[index].push_back(9.3222 * eV); + fEnergyConstant[index].push_back(10.4601 * eV); + fEnergyConstant[index].push_back(11.3044 * eV); + fEnergyConstant[index].push_back(11.9986 * eV); + fEnergyConstant[index].push_back(13.4528 * eV); + fEnergyConstant[index].push_back(14.7371 * eV); + fEnergyConstant[index].push_back(16.2286 * eV); + fEnergyConstant[index].push_back(16.5877 * eV); + fEnergyConstant[index].push_back(17.0741 * eV); + fEnergyConstant[index].push_back(17.1875 * eV); + fEnergyConstant[index].push_back(18.638 * eV); + fEnergyConstant[index].push_back(19.6884 * eV); + fEnergyConstant[index].push_back(20.8713 * eV); + fEnergyConstant[index].push_back(20.9056 * eV); + fEnergyConstant[index].push_back(24.0179 * eV); + fEnergyConstant[index].push_back(24.5543 * eV); + fEnergyConstant[index].push_back(29.0576 * eV); + fEnergyConstant[index].push_back(32.0504 * eV); + fEnergyConstant[index].push_back(34.5499 * eV); + fEnergyConstant[index].push_back(35.5664 * eV); + fEnergyConstant[index].push_back(38.0707 * eV); + fEnergyConstant[index].push_back(305.7622 * eV); + fEnergyConstant[index].push_back(307.9891 * eV); + fEnergyConstant[index].push_back(308.674 * eV); + fEnergyConstant[index].push_back(309.0146 * eV); + fEnergyConstant[index].push_back(422.5331 * eV); + fEnergyConstant[index].push_back(424.1245 * eV); + fEnergyConstant[index].push_back(424.7781 * eV); + fEnergyConstant[index].push_back(557.6346 * eV); + fnLevels[index] = fEnergyConstant[index].size(); +} + +void G4DNACPA100IonisationStructure::InitialiseThymine() +{ + // The following values are extracted from the thesis of S. Edel, + auto index = fpThymine->GetIndex(); + + /// THYMINE has 33 ionization levels + + fEnergyConstant[index].push_back(9.639 * eV); + fEnergyConstant[index].push_back(11.8278 * eV); + fEnergyConstant[index].push_back(12.0876 * eV); + fEnergyConstant[index].push_back(12.9656 * eV); + fEnergyConstant[index].push_back(13.9555 * eV); + fEnergyConstant[index].push_back(15.0774 * eV); + fEnergyConstant[index].push_back(15.4078 * eV); + fEnergyConstant[index].push_back(15.4689 * eV); + fEnergyConstant[index].push_back(16.1964 * eV); + fEnergyConstant[index].push_back(16.8955 * eV); + fEnergyConstant[index].push_back(17.5018 * eV); + fEnergyConstant[index].push_back(18.2979 * eV); + fEnergyConstant[index].push_back(18.4495 * eV); + fEnergyConstant[index].push_back(19.3186 * eV); + fEnergyConstant[index].push_back(20.9944 * eV); + fEnergyConstant[index].push_back(21.0797 * eV); + fEnergyConstant[index].push_back(24.3676 * eV); + fEnergyConstant[index].push_back(24.9072 * eV); + fEnergyConstant[index].push_back(26.3981 * eV); + fEnergyConstant[index].push_back(30.1684 * eV); + fEnergyConstant[index].push_back(33.9007 * eV); + fEnergyConstant[index].push_back(35.6553 * eV); + fEnergyConstant[index].push_back(38.4935 * eV); + fEnergyConstant[index].push_back(39.3191 * eV); + fEnergyConstant[index].push_back(305.6808 * eV); + fEnergyConstant[index].push_back(306.1885 * eV); + fEnergyConstant[index].push_back(307.9374 * eV); + fEnergyConstant[index].push_back(309.3127 * eV); + fEnergyConstant[index].push_back(310.2121 * eV); + fEnergyConstant[index].push_back(424.8945 * eV); + fEnergyConstant[index].push_back(425.2178 * eV); + fEnergyConstant[index].push_back(558.7154 * eV); + fEnergyConstant[index].push_back(558.8106 * eV); + fnLevels[index] = fEnergyConstant[index].size(); +} + +void G4DNACPA100IonisationStructure::InitialiseAdenine() +{ + auto index = fpAdenine->GetIndex(); + /// Adenine has 35 ionization levels + + fEnergyConstant[index].push_back(8.5114 * eV); + fEnergyConstant[index].push_back(10.1294 * eV); + fEnergyConstant[index].push_back(11.0606 * eV); + fEnergyConstant[index].push_back(11.5849 * eV); + fEnergyConstant[index].push_back(12.1533 * eV); + fEnergyConstant[index].push_back(13.356 * eV); + fEnergyConstant[index].push_back(13.6554 * eV); + fEnergyConstant[index].push_back(15.3296 * eV); + fEnergyConstant[index].push_back(16.179 * eV); + fEnergyConstant[index].push_back(16.7676 * eV); + fEnergyConstant[index].push_back(17.3489 * eV); + fEnergyConstant[index].push_back(17.5568 * eV); + fEnergyConstant[index].push_back(18.554 * eV); + fEnergyConstant[index].push_back(19.0866 * eV); + fEnergyConstant[index].push_back(20.2559 * eV); + fEnergyConstant[index].push_back(21.4027 * eV); + fEnergyConstant[index].push_back(23.0384 * eV); + fEnergyConstant[index].push_back(23.9742 * eV); + fEnergyConstant[index].push_back(24.479 * eV); + fEnergyConstant[index].push_back(28.3224 * eV); + fEnergyConstant[index].push_back(31.4796 * eV); + fEnergyConstant[index].push_back(32.4597 * eV); + fEnergyConstant[index].push_back(34.1263 * eV); + fEnergyConstant[index].push_back(35.6423 * eV); + fEnergyConstant[index].push_back(37.5026 * eV); + fEnergyConstant[index].push_back(305.9305 * eV); + fEnergyConstant[index].push_back(307.4532 * eV); + fEnergyConstant[index].push_back(307.6866 * eV); + fEnergyConstant[index].push_back(307.8303 * eV); + fEnergyConstant[index].push_back(308.2887 * eV); + fEnergyConstant[index].push_back(422.8443 * eV); + fEnergyConstant[index].push_back(423.0296 * eV); + fEnergyConstant[index].push_back(423.3954 * eV); + fEnergyConstant[index].push_back(423.8101 * eV); + fEnergyConstant[index].push_back(425.0749 * eV); + fnLevels[index] = fEnergyConstant[index].size(); +} + +void G4DNACPA100IonisationStructure::InitialisePhosphate() +{ + auto index = fpPhosphate->GetIndex(); + /// Phosphate has 25 ionization levels + + fEnergyConstant[index].push_back(12.9963 * eV); + fEnergyConstant[index].push_back(12.9972 * eV); + fEnergyConstant[index].push_back(14.3109 * eV); + fEnergyConstant[index].push_back(15.2221 * eV); + fEnergyConstant[index].push_back(16.0591 * eV); + fEnergyConstant[index].push_back(16.0622 * eV); + fEnergyConstant[index].push_back(17.6365 * eV); + fEnergyConstant[index].push_back(17.6401 * eV); + fEnergyConstant[index].push_back(18.8803 * eV); + fEnergyConstant[index].push_back(20.6975 * eV); + fEnergyConstant[index].push_back(20.7054 * eV); + fEnergyConstant[index].push_back(24.2764 * eV); + fEnergyConstant[index].push_back(35.6676 * eV); + fEnergyConstant[index].push_back(38.1681 * eV); + fEnergyConstant[index].push_back(38.1685 * eV); + fEnergyConstant[index].push_back(40.1946 * eV); + fEnergyConstant[index].push_back(150.138 * eV); + fEnergyConstant[index].push_back(150.1381 * eV); + fEnergyConstant[index].push_back(150.1414 * eV); + fEnergyConstant[index].push_back(207.3392 * eV); + fEnergyConstant[index].push_back(558.1119 * eV); + fEnergyConstant[index].push_back(560.5803 * eV); + fEnergyConstant[index].push_back(560.5808 * eV); + fEnergyConstant[index].push_back(560.5817 * eV); + fEnergyConstant[index].push_back(2179.592 * eV); + fnLevels[index] = fEnergyConstant[index].size(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4double G4DNACPA100IonisationStructure::IonisationEnergy(const std::size_t& level, + const std::size_t& MatID) +{ + G4double ionisation = 0.; + + if (level < fnLevels[MatID]) { + ionisation = fEnergyConstant[MatID][level]; + } + else { + std::ostringstream oss; + oss << " material was not found. "; + G4Exception("G4DNACPA100IonisationStructure::IonisationEnergy", "CPA013", FatalException, + oss.str().c_str()); + } + + return ionisation; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4double G4DNACPA100IonisationStructure::UEnergy(const std::size_t& level, const std::size_t& MatID) +{ + G4double UEnergy = 0.; + if (level < fnLevels[MatID]) { + UEnergy = fUConstant[MatID][level]; + } + else { + std::ostringstream oss; + oss << " material was not found. "; + G4Exception("G4DNACPA100IonisationStructure::IonisationEnergy", "CPA001", FatalException, + oss.str().c_str()); + } + + return UEnergy; +} diff --git a/source/processes/electromagnetic/dna/utils/src/G4DNAChemistryManager.cc b/source/processes/electromagnetic/dna/utils/src/G4DNAChemistryManager.cc index ef12f91f73e..1d2dcc3866b 100644 --- a/source/processes/electromagnetic/dna/utils/src/G4DNAChemistryManager.cc +++ b/source/processes/electromagnetic/dna/utils/src/G4DNAChemistryManager.cc @@ -59,7 +59,7 @@ #include "G4MoleculeFinder.hh" #include "G4MoleculeTable.hh" #include "G4PhysChemIO.hh" - +#include "G4VUserPulseInfo.hh" G4DNAChemistryManager* G4DNAChemistryManager::fgInstance = nullptr; @@ -648,7 +648,18 @@ void G4DNAChemistryManager::CreateWaterMolecule(ElectronicModification modificat break; } - G4Track* pH2OTrack = pH2OMolecule->BuildTrack(picosecond, + G4double delayedTime = 0.; + if(pIncomingTrack->GetUserInformation() != nullptr) + { + auto pPulseInfo = dynamic_cast + (pIncomingTrack->GetUserInformation()); + if(pPulseInfo != nullptr) + { + delayedTime = pPulseInfo->GetDelayedTime(); + } + } + + G4Track* pH2OTrack = pH2OMolecule->BuildTrack(picosecond + delayedTime, pIncomingTrack->GetPosition()); pH2OTrack->SetParentID(pIncomingTrack->GetTrackID()); @@ -671,8 +682,19 @@ void G4DNAChemistryManager::CreateSolvatedElectron(const G4Track* pIncomingTrack if (fActiveChemistry) { + G4double delayedTime = 0.; + if(pIncomingTrack->GetUserInformation() != nullptr) + { + auto pPulseInfo = dynamic_cast + (pIncomingTrack->GetUserInformation()); + if(pPulseInfo != nullptr) + { + delayedTime = pPulseInfo->GetDelayedTime(); + } + } + PushMolecule(std::unique_ptr(new G4Molecule(G4Electron_aq::Definition())), - picosecond, + picosecond + delayedTime, pFinalPosition ? *pFinalPosition : pIncomingTrack->GetPosition(), pIncomingTrack->GetTrackID()); } diff --git a/source/processes/electromagnetic/dna/utils/src/G4DNAMaterialManager.cc b/source/processes/electromagnetic/dna/utils/src/G4DNAMaterialManager.cc new file mode 100644 index 00000000000..7d53f3b86f5 --- /dev/null +++ b/source/processes/electromagnetic/dna/utils/src/G4DNAMaterialManager.cc @@ -0,0 +1,69 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// 1/2/2023: Hoang: this file is used to check available DNA materials, +// and keeps DNA cross sections. + +#include "G4DNAMaterialManager.hh" +#include "G4StateManager.hh" +#include "G4Threading.hh" +#include "G4AutoLock.hh" +#include "G4NistManager.hh" + +G4DNAMaterialManager *G4DNAMaterialManager::theInstance = nullptr; + +namespace { + G4Mutex MaterialMutex = G4MUTEX_INITIALIZER; +} + +G4DNAMaterialManager *G4DNAMaterialManager::Instance() { + if (nullptr == theInstance) { + G4AutoLock l(&MaterialMutex); + if (nullptr == theInstance) { + static G4DNAMaterialManager manager; + theInstance = &manager; + } + l.unlock(); + } + return theInstance; +} + +G4DNAMaterialManager::G4DNAMaterialManager() { + G4NistManager::Instance(); + fStateManager = G4StateManager::GetStateManager(); +} + +G4VEmModel* G4DNAMaterialManager::GetModel(const DNAModelType& t){ + return fData[t]; +} + +void G4DNAMaterialManager::SetMasterDataModel(const DNAModelType& t, G4VEmModel* m){ + fData[t] = m; +} + +G4bool G4DNAMaterialManager::IsLocked() const +{ + return (!G4Threading::IsMasterThread()); +} diff --git a/source/processes/electromagnetic/dna/utils/src/G4DNAPTBExcitationStructure.cc b/source/processes/electromagnetic/dna/utils/src/G4DNAPTBExcitationStructure.cc index 2c3d25bca41..74ed17c7ac0 100644 --- a/source/processes/electromagnetic/dna/utils/src/G4DNAPTBExcitationStructure.cc +++ b/source/processes/electromagnetic/dna/utils/src/G4DNAPTBExcitationStructure.cc @@ -24,91 +24,98 @@ // ******************************************************************** #include "G4DNAPTBExcitationStructure.hh" + +#include "G4Material.hh" #include "G4SystemOfUnits.hh" G4DNAPTBExcitationStructure::G4DNAPTBExcitationStructure() { - -// taken directly from PTra code by MPietrzak - energyConstant["N2"].push_back( 1.85*eV); - energyConstant["N2"].push_back( 2.15*eV); - energyConstant["N2"].push_back( 8.00*eV); - energyConstant["N2"].push_back( 8.50*eV); - energyConstant["N2"].push_back( 8.60*eV); - energyConstant["N2"].push_back(11.05*eV); - energyConstant["N2"].push_back(11.79*eV); - energyConstant["N2"].push_back(11.90*eV); - energyConstant["N2"].push_back(12.25*eV); - energyConstant["N2"].push_back(12.50*eV); - energyConstant["N2"].push_back(13.01*eV); - energyConstant["N2"].push_back(13.19*eV); - energyConstant["N2"].push_back(13.30*eV); - energyConstant["N2"].push_back(14.33*eV); - energyConstant["N2"].push_back(14.84*eV); - energyConstant["N2"].push_back(15.18*eV); - energyConstant["N2"].push_back(15.70*eV); - energyConstant["N2"].push_back(15.75*eV); - energyConstant["N2"].push_back(15.86*eV); - energyConstant["N2"].push_back(17.36*eV); - energyConstant["N2"].push_back(17.95*eV); - energyConstant["N2"].push_back(19.77*eV); - energyConstant["N2"].push_back(20.79*eV); - energyConstant["N2"].push_back(20.87*eV); - energyConstant["N2"].push_back(22.27*eV); - energyConstant["N2"].push_back(22.83*eV); - energyConstant["N2"].push_back(37.19*eV); - energyConstant["N2"].push_back(38.67*eV); - energyConstant["N2"].push_back(39.23*eV); - - - for(const auto& [name,levels] : energyConstant) - { - nExcLevels[name] = (G4int)levels.size(); - } -} + fpN2 = G4Material::GetMaterial("N2", false); + // taken directly from PTra code by MPietrzak + if (fpN2 != nullptr) { + auto index = fpN2->GetIndex(); + energyConstant[index].push_back(1.85 * eV); + energyConstant[index].push_back(2.15 * eV); + energyConstant[index].push_back(8.00 * eV); + energyConstant[index].push_back(8.50 * eV); + energyConstant[index].push_back(8.60 * eV); + energyConstant[index].push_back(11.05 * eV); + energyConstant[index].push_back(11.79 * eV); + energyConstant[index].push_back(11.90 * eV); + energyConstant[index].push_back(12.25 * eV); + energyConstant[index].push_back(12.50 * eV); + energyConstant[index].push_back(13.01 * eV); + energyConstant[index].push_back(13.19 * eV); + energyConstant[index].push_back(13.30 * eV); + energyConstant[index].push_back(14.33 * eV); + energyConstant[index].push_back(14.84 * eV); + energyConstant[index].push_back(15.18 * eV); + energyConstant[index].push_back(15.70 * eV); + energyConstant[index].push_back(15.75 * eV); + energyConstant[index].push_back(15.86 * eV); + energyConstant[index].push_back(17.36 * eV); + energyConstant[index].push_back(17.95 * eV); + energyConstant[index].push_back(19.77 * eV); + energyConstant[index].push_back(20.79 * eV); + energyConstant[index].push_back(20.87 * eV); + energyConstant[index].push_back(22.27 * eV); + energyConstant[index].push_back(22.83 * eV); + energyConstant[index].push_back(37.19 * eV); + energyConstant[index].push_back(38.67 * eV); + energyConstant[index].push_back(39.23 * eV); + } + + for (const auto& [index, levels] : energyConstant) { + nExcLevels[index] = (G4int)levels.size(); + } +} -G4double G4DNAPTBExcitationStructure::ExcitationEnergy(G4int ExcLevel, const G4String& materialName) +G4double G4DNAPTBExcitationStructure::ExcitationEnergy( + const G4int& ExcLevel, const size_t& materialID) { - G4String matNameModif = ReplaceMaterial(materialName); + size_t matNameModif = ReplaceMaterial(materialID); - // check if the material exist in the map - if(energyConstant.find(matNameModif)==energyConstant.end()) - { - std::ostringstream oss; - oss << "Material name was not found in energyConstantMap. Problematic material is: "<=0 && ExcLevel < nExcLevels[matNameModif]) excitation = energyConstant[matNameModif][ExcLevel]; + if (ExcLevel >= 0 && ExcLevel < nExcLevels[matNameModif]) + excitation = energyConstant[matNameModif][ExcLevel]; - return excitation; + return excitation; } -G4int G4DNAPTBExcitationStructure::NumberOfExcLevels(const G4String& materialName) +G4int G4DNAPTBExcitationStructure::NumberOfExcLevels(const size_t& matID) { - G4String matNameModif = ReplaceMaterial(materialName); + auto matNameModif = ReplaceMaterial(matID); - // check if the material exist in the map - if(nExcLevels.find(matNameModif)==nExcLevels.end()) - { - std::ostringstream oss; - oss << "Material name was not found in energyConstantMap. Problematic material is: "<GetIndex(); + if (materialID == G4_N2) { + output = fpN2->GetIndex(); + } - if(materialName=="G4_N2") materialNameModified = "N2"; - - return materialNameModified; + return output; } diff --git a/source/processes/electromagnetic/dna/utils/src/G4DNAPTBIonisationStructure.cc b/source/processes/electromagnetic/dna/utils/src/G4DNAPTBIonisationStructure.cc index 8612bf729ae..8f8141dd65a 100644 --- a/source/processes/electromagnetic/dna/utils/src/G4DNAPTBIonisationStructure.cc +++ b/source/processes/electromagnetic/dna/utils/src/G4DNAPTBIonisationStructure.cc @@ -27,193 +27,227 @@ // M. Bug et al, Rad. Phys and Chem. 130, 459-479 (2017) #include "G4DNAPTBIonisationStructure.hh" +#include "G4Material.hh" #include "G4SystemOfUnits.hh" G4DNAPTBIonisationStructure::G4DNAPTBIonisationStructure() { - // MPietrzak - energyConstant["N2"].push_back(15.58*eV); - energyConstant["N2"].push_back(17.07*eV); - energyConstant["N2"].push_back(21.00*eV); - energyConstant["N2"].push_back(41.72*eV); - // MPietrzak - - energyConstant["G4_WATER"].push_back(10.79*eV); - energyConstant["G4_WATER"].push_back(13.39*eV); - energyConstant["G4_WATER"].push_back(16.05*eV); - energyConstant["G4_WATER"].push_back(32.30*eV); - energyConstant["G4_WATER"].push_back(539.0*eV); - - energyConstant["THF"].push_back(9.74*eV); - energyConstant["THF"].push_back(12.31*eV); - energyConstant["THF"].push_back(12.99*eV); - energyConstant["THF"].push_back(13.57*eV); - energyConstant["THF"].push_back(13.60*eV); - energyConstant["THF"].push_back(15.11*eV); - energyConstant["THF"].push_back(15.97*eV); - energyConstant["THF"].push_back(16.28*eV); - energyConstant["THF"].push_back(18.19*eV); - energyConstant["THF"].push_back(18.69*eV); - energyConstant["THF"].push_back(22.14*eV); - energyConstant["THF"].push_back(22.25*eV); - energyConstant["THF"].push_back(27.21*eV); - energyConstant["THF"].push_back(28.97*eV); - energyConstant["THF"].push_back(36.97*eV); - energyConstant["THF"].push_back(305.07*eV); - energyConstant["THF"].push_back(305.08*eV); - energyConstant["THF"].push_back(306.17*eV); - energyConstant["THF"].push_back(306.17*eV); - energyConstant["THF"].push_back(557.94*eV); - - energyConstant["PY"].push_back(9.73*eV); - energyConstant["PY"].push_back(10.96*eV); - energyConstant["PY"].push_back(11.54*eV); - energyConstant["PY"].push_back(12.58*eV); - energyConstant["PY"].push_back(15.96*eV); - energyConstant["PY"].push_back(16.27*eV); - energyConstant["PY"].push_back(16.53*eV); - energyConstant["PY"].push_back(17.98*eV); - energyConstant["PY"].push_back(19.37*eV); - energyConstant["PY"].push_back(20.52*eV); - energyConstant["PY"].push_back(24.55*eV); - energyConstant["PY"].push_back(24.64*eV); - energyConstant["PY"].push_back(29.75*eV); - energyConstant["PY"].push_back(33.02*eV); - energyConstant["PY"].push_back(36.57*eV); - energyConstant["PY"].push_back(305.92*eV); - energyConstant["PY"].push_back(307.09*eV); - energyConstant["PY"].push_back(307.09*eV); - energyConstant["PY"].push_back(307.52*eV); - energyConstant["PY"].push_back(423.44*eV); - energyConstant["PY"].push_back(423.44*eV); - - energyConstant["PU"].push_back(9.58*eV); - energyConstant["PU"].push_back(10.57*eV); - energyConstant["PU"].push_back(10.97*eV); - energyConstant["PU"].push_back(12.22*eV); - energyConstant["PU"].push_back(12.92*eV); - energyConstant["PU"].push_back(13.44*eV); - energyConstant["PU"].push_back(15.05*eV); - energyConstant["PU"].push_back(16.56*eV); - energyConstant["PU"].push_back(17.18*eV); - energyConstant["PU"].push_back(17.88*eV); - energyConstant["PU"].push_back(17.90*eV); - energyConstant["PU"].push_back(19.11*eV); - energyConstant["PU"].push_back(20.09*eV); - energyConstant["PU"].push_back(21.70*eV); - energyConstant["PU"].push_back(23.52*eV); - energyConstant["PU"].push_back(24.35*eV); - energyConstant["PU"].push_back(25.41*eV); - energyConstant["PU"].push_back(29.34*eV); - energyConstant["PU"].push_back(32.44*eV); - energyConstant["PU"].push_back(33.67*eV); - energyConstant["PU"].push_back(36.26*eV); - energyConstant["PU"].push_back(38.22*eV); - energyConstant["PU"].push_back(306.53*eV); - energyConstant["PU"].push_back(307.19*eV); - energyConstant["PU"].push_back(307.64*eV); - energyConstant["PU"].push_back(308.14*eV); - energyConstant["PU"].push_back(308.17*eV); - energyConstant["PU"].push_back(423.31*eV); - energyConstant["PU"].push_back(423.43*eV); - energyConstant["PU"].push_back(423.64*eV); - energyConstant["PU"].push_back(423.98*eV); - - energyConstant["TMP"].push_back(10.81*eV); - energyConstant["TMP"].push_back(10.81*eV); - energyConstant["TMP"].push_back(12.90*eV); - energyConstant["TMP"].push_back(13.32*eV); - energyConstant["TMP"].push_back(13.32*eV); - energyConstant["TMP"].push_back(13.59*eV); - energyConstant["TMP"].push_back(14.33*eV); - energyConstant["TMP"].push_back(14.33*eV); - energyConstant["TMP"].push_back(15.90*eV); - energyConstant["TMP"].push_back(17.09*eV); - energyConstant["TMP"].push_back(17.09*eV); - energyConstant["TMP"].push_back(17.13*eV); - energyConstant["TMP"].push_back(17.85*eV); - energyConstant["TMP"].push_back(17.85*eV); - energyConstant["TMP"].push_back(18.44*eV); - energyConstant["TMP"].push_back(19.37*eV); - energyConstant["TMP"].push_back(19.37*eV); - energyConstant["TMP"].push_back(21.40*eV); - energyConstant["TMP"].push_back(26.20*eV); - energyConstant["TMP"].push_back(26.20*eV); - energyConstant["TMP"].push_back(27.43*eV); - energyConstant["TMP"].push_back(35.23*eV); - energyConstant["TMP"].push_back(37.67*eV); - energyConstant["TMP"].push_back(37.67*eV); - energyConstant["TMP"].push_back(39.64*eV); - energyConstant["TMP"].push_back(152.42*eV); - energyConstant["TMP"].push_back(152.42*eV); - energyConstant["TMP"].push_back(152.44*eV); - energyConstant["TMP"].push_back(209.59*eV); - energyConstant["TMP"].push_back(306.92*eV); - energyConstant["TMP"].push_back(306.92*eV); - energyConstant["TMP"].push_back(306.92*eV); - energyConstant["TMP"].push_back(557.34*eV); - energyConstant["TMP"].push_back(559.40*eV); - energyConstant["TMP"].push_back(559.40*eV); - energyConstant["TMP"].push_back(559.41*eV); - energyConstant["TMP"].push_back(2178.05*eV); - - for(auto it=energyConstant.cbegin();it!=energyConstant.cend();++it) - { - nLevels[it->first] = (G4int)(it->second).size(); - } + fpTHF = G4Material::GetMaterial("THF", false); + fpPY = G4Material::GetMaterial("PY", false); + fpPU = G4Material::GetMaterial("PU", false); + fpTMP = G4Material::GetMaterial("TMP", false); + fpG4_WATER = G4Material::GetMaterial("G4_WATER", false); + fpBackbone_THF = G4Material::GetMaterial("backbone_THF", false); + fpCytosine_PY = G4Material::GetMaterial("cytosine_PY", false); + fpThymine_PY = G4Material::GetMaterial("thymine_PY", false); + fpAdenine_PU = G4Material::GetMaterial("adenine_PU", false); + fpBackbone_TMP = G4Material::GetMaterial("backbone_TMP", false); + fpGuanine_PU = G4Material::GetMaterial("guanine_PU", false); + fpN2 = G4Material::GetMaterial("N2", false); + + // MPietrzak + if (fpN2 != nullptr) { + auto index = fpN2->GetIndex(); + energyConstant[index].push_back(15.58 * eV); + energyConstant[index].push_back(17.07 * eV); + energyConstant[index].push_back(21.00 * eV); + energyConstant[index].push_back(41.72 * eV); + } + + // MPietrzak + if (fpG4_WATER != nullptr) { + auto index = fpG4_WATER->GetIndex(); + energyConstant[index].push_back(10.79 * eV); + energyConstant[index].push_back(13.39 * eV); + energyConstant[index].push_back(16.05 * eV); + energyConstant[index].push_back(32.30 * eV); + energyConstant[index].push_back(539.0 * eV); + } + if (fpTHF != nullptr) { + auto index = fpTHF->GetIndex(); + energyConstant[index].push_back(9.74 * eV); + energyConstant[index].push_back(12.31 * eV); + energyConstant[index].push_back(12.99 * eV); + energyConstant[index].push_back(13.57 * eV); + energyConstant[index].push_back(13.60 * eV); + energyConstant[index].push_back(15.11 * eV); + energyConstant[index].push_back(15.97 * eV); + energyConstant[index].push_back(16.28 * eV); + energyConstant[index].push_back(18.19 * eV); + energyConstant[index].push_back(18.69 * eV); + energyConstant[index].push_back(22.14 * eV); + energyConstant[index].push_back(22.25 * eV); + energyConstant[index].push_back(27.21 * eV); + energyConstant[index].push_back(28.97 * eV); + energyConstant[index].push_back(36.97 * eV); + energyConstant[index].push_back(305.07 * eV); + energyConstant[index].push_back(305.08 * eV); + energyConstant[index].push_back(306.17 * eV); + energyConstant[index].push_back(306.17 * eV); + energyConstant[index].push_back(557.94 * eV); + } + + if (fpPY != nullptr) { + auto index = fpPY->GetIndex(); + energyConstant[index].push_back(9.73 * eV); + energyConstant[index].push_back(10.96 * eV); + energyConstant[index].push_back(11.54 * eV); + energyConstant[index].push_back(12.58 * eV); + energyConstant[index].push_back(15.96 * eV); + energyConstant[index].push_back(16.27 * eV); + energyConstant[index].push_back(16.53 * eV); + energyConstant[index].push_back(17.98 * eV); + energyConstant[index].push_back(19.37 * eV); + energyConstant[index].push_back(20.52 * eV); + energyConstant[index].push_back(24.55 * eV); + energyConstant[index].push_back(24.64 * eV); + energyConstant[index].push_back(29.75 * eV); + energyConstant[index].push_back(33.02 * eV); + energyConstant[index].push_back(36.57 * eV); + energyConstant[index].push_back(305.92 * eV); + energyConstant[index].push_back(307.09 * eV); + energyConstant[index].push_back(307.09 * eV); + energyConstant[index].push_back(307.52 * eV); + energyConstant[index].push_back(423.44 * eV); + energyConstant[index].push_back(423.44 * eV); + } + + if (fpPU != nullptr) { + auto index = fpPU->GetIndex(); + energyConstant[index].push_back(9.58 * eV); + energyConstant[index].push_back(10.57 * eV); + energyConstant[index].push_back(10.97 * eV); + energyConstant[index].push_back(12.22 * eV); + energyConstant[index].push_back(12.92 * eV); + energyConstant[index].push_back(13.44 * eV); + energyConstant[index].push_back(15.05 * eV); + energyConstant[index].push_back(16.56 * eV); + energyConstant[index].push_back(17.18 * eV); + energyConstant[index].push_back(17.88 * eV); + energyConstant[index].push_back(17.90 * eV); + energyConstant[index].push_back(19.11 * eV); + energyConstant[index].push_back(20.09 * eV); + energyConstant[index].push_back(21.70 * eV); + energyConstant[index].push_back(23.52 * eV); + energyConstant[index].push_back(24.35 * eV); + energyConstant[index].push_back(25.41 * eV); + energyConstant[index].push_back(29.34 * eV); + energyConstant[index].push_back(32.44 * eV); + energyConstant[index].push_back(33.67 * eV); + energyConstant[index].push_back(36.26 * eV); + energyConstant[index].push_back(38.22 * eV); + energyConstant[index].push_back(306.53 * eV); + energyConstant[index].push_back(307.19 * eV); + energyConstant[index].push_back(307.64 * eV); + energyConstant[index].push_back(308.14 * eV); + energyConstant[index].push_back(308.17 * eV); + energyConstant[index].push_back(423.31 * eV); + energyConstant[index].push_back(423.43 * eV); + energyConstant[index].push_back(423.64 * eV); + energyConstant[index].push_back(423.98 * eV); + } + + if (fpTMP != nullptr) { + auto index = fpTMP->GetIndex(); + energyConstant[index].push_back(10.81 * eV); + energyConstant[index].push_back(10.81 * eV); + energyConstant[index].push_back(12.90 * eV); + energyConstant[index].push_back(13.32 * eV); + energyConstant[index].push_back(13.32 * eV); + energyConstant[index].push_back(13.59 * eV); + energyConstant[index].push_back(14.33 * eV); + energyConstant[index].push_back(14.33 * eV); + energyConstant[index].push_back(15.90 * eV); + energyConstant[index].push_back(17.09 * eV); + energyConstant[index].push_back(17.09 * eV); + energyConstant[index].push_back(17.13 * eV); + energyConstant[index].push_back(17.85 * eV); + energyConstant[index].push_back(17.85 * eV); + energyConstant[index].push_back(18.44 * eV); + energyConstant[index].push_back(19.37 * eV); + energyConstant[index].push_back(19.37 * eV); + energyConstant[index].push_back(21.40 * eV); + energyConstant[index].push_back(26.20 * eV); + energyConstant[index].push_back(26.20 * eV); + energyConstant[index].push_back(27.43 * eV); + energyConstant[index].push_back(35.23 * eV); + energyConstant[index].push_back(37.67 * eV); + energyConstant[index].push_back(37.67 * eV); + energyConstant[index].push_back(39.64 * eV); + energyConstant[index].push_back(152.42 * eV); + energyConstant[index].push_back(152.42 * eV); + energyConstant[index].push_back(152.44 * eV); + energyConstant[index].push_back(209.59 * eV); + energyConstant[index].push_back(306.92 * eV); + energyConstant[index].push_back(306.92 * eV); + energyConstant[index].push_back(306.92 * eV); + energyConstant[index].push_back(557.34 * eV); + energyConstant[index].push_back(559.40 * eV); + energyConstant[index].push_back(559.40 * eV); + energyConstant[index].push_back(559.41 * eV); + energyConstant[index].push_back(2178.05 * eV); + } + + for (const auto& [index, levels] : energyConstant) { + nLevels[index] = (G4int)levels.size(); + } } - -G4DNAPTBIonisationStructure::~G4DNAPTBIonisationStructure() -{ } - - -G4double G4DNAPTBIonisationStructure::IonisationEnergy(G4int level, const G4String& materialName) +G4double G4DNAPTBIonisationStructure::IonisationEnergy(G4int level, const size_t& materialID) { - G4String matNameModif = ReplaceMaterial(materialName); + size_t matNameModif = ReplaceMaterial(materialID); - // check if the material exist in the map - if(energyConstant.find(matNameModif)==energyConstant.end()) - { - std::ostringstream oss; - oss << "Material name was not found in energyConstantMap. Problematic material is: "<=0 && level < nLevels[matNameModif]) ionisation = energyConstant[matNameModif][level]; + if (level >= 0 && level < nLevels[matNameModif]) ionisation = energyConstant[matNameModif][level]; - return ionisation; + return ionisation; } -G4int G4DNAPTBIonisationStructure::NumberOfLevels(const G4String& materialName) +G4int G4DNAPTBIonisationStructure::NumberOfLevels(const size_t& materialID) { - G4String matNameModif = ReplaceMaterial(materialName); - - // check if the material exist in the map - if(nLevels.find(matNameModif)==nLevels.end()) - { - std::ostringstream oss; - oss << "Material name was not found in energyConstantMap. Problematic material is: "<GetIndex()) { + return fpTHF->GetIndex(); + } + else if (fpBackbone_TMP != nullptr && materialID == fpBackbone_TMP->GetIndex()) { + return fpTMP->GetIndex(); + } + else if (fpAdenine_PU != nullptr && materialID == fpAdenine_PU->GetIndex()) { + return fpPU->GetIndex(); + } + else if (fpGuanine_PU != nullptr && materialID == fpGuanine_PU->GetIndex()) { + return fpPU->GetIndex(); + } + else if (fpThymine_PY != nullptr && materialID == fpThymine_PY->GetIndex()) { + return fpPY->GetIndex(); + } + else if (fpCytosine_PY != nullptr && materialID == fpCytosine_PY->GetIndex()) { + return fpPY->GetIndex(); + } + return materialID; } diff --git a/source/processes/electromagnetic/highenergy/GNUmakefile b/source/processes/electromagnetic/highenergy/GNUmakefile deleted file mode 100644 index 974d76de0f2..00000000000 --- a/source/processes/electromagnetic/highenergy/GNUmakefile +++ /dev/null @@ -1,37 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for electromagnetic sub-library. John Allison, 25/6/98. -# Modified: -# 19.11.2004 V.Ivanchenko remove obsolete parts -# -------------------------------------------------------------------- - -name := G4emhighenergy - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/electromagnetic/standard/include \ - -I$(G4BASE)/processes/electromagnetic/muons/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/electromagnetic/highenergy/History b/source/processes/electromagnetic/highenergy/History index 0418e60c9d8..19805840030 100644 --- a/source/processes/electromagnetic/highenergy/History +++ b/source/processes/electromagnetic/highenergy/History @@ -6,7 +6,11 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-06-02 Vladimir Ivanchenko (emhighenergy-V11-00-05) +## 2023-06-06 Helmut Burkhardt (emhighenergy-V11-01-01) +- G4GammaConversionToMuons removing using namespace std + cling-tidy +- G4AnnihiToMuPair removing using namespace std + cling-tidy + +## 2023-06-02 Vladimir Ivanchenko (emhighenergy-V11-01-00) - G4GammaConversionToMuons - fixed FPE exception in compound, when selected element and address issue of cross section factor reported in #2543 diff --git a/source/processes/electromagnetic/highenergy/include/G4GammaConversionToMuons.hh b/source/processes/electromagnetic/highenergy/include/G4GammaConversionToMuons.hh index 0c5fc3f7ea7..b3c8fafc71f 100644 --- a/source/processes/electromagnetic/highenergy/include/G4GammaConversionToMuons.hh +++ b/source/processes/electromagnetic/highenergy/include/G4GammaConversionToMuons.hh @@ -138,7 +138,7 @@ private: const G4ParticleDefinition* theGamma; const G4ParticleDefinition* theMuonPlus; const G4ParticleDefinition* theMuonMinus; - std::vector fTemp; + std::vector temp; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/processes/electromagnetic/highenergy/src/G4AnnihiToMuPair.cc b/source/processes/electromagnetic/highenergy/src/G4AnnihiToMuPair.cc index c1197b0ec68..7eea122d912 100644 --- a/source/processes/electromagnetic/highenergy/src/G4AnnihiToMuPair.cc +++ b/source/processes/electromagnetic/highenergy/src/G4AnnihiToMuPair.cc @@ -40,25 +40,22 @@ #include "G4AnnihiToMuPair.hh" -#include "G4ios.hh" -#include "Randomize.hh" +#include "G4Exp.hh" +#include "G4LossTableManager.hh" +#include "G4Material.hh" +#include "G4MuonMinus.hh" +#include "G4MuonPlus.hh" #include "G4PhysicalConstants.hh" -#include "G4SystemOfUnits.hh" - #include "G4Positron.hh" -#include "G4MuonPlus.hh" -#include "G4MuonMinus.hh" -#include "G4TauPlus.hh" -#include "G4TauMinus.hh" -#include "G4Material.hh" #include "G4Step.hh" -#include "G4LossTableManager.hh" -#include "G4Exp.hh" +#include "G4SystemOfUnits.hh" +#include "G4TauMinus.hh" +#include "G4TauPlus.hh" +#include "G4ios.hh" +#include "Randomize.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -using namespace std; - G4AnnihiToMuPair::G4AnnihiToMuPair(const G4String& processName, G4ProcessType type):G4VDiscreteProcess (processName, type) { @@ -74,12 +71,11 @@ G4AnnihiToMuPair::G4AnnihiToMuPair(const G4String& processName, part2 = G4MuonMinus::MuonMinus(); } fMass = part1->GetPDGMass(); - fLowEnergyLimit = - 2.*fMass*fMass/CLHEP::electron_mass_c2 - CLHEP::electron_mass_c2; - - //model is ok up to 1000 TeV due to neglected Z-interference - fHighEnergyLimit = 1000.*TeV; - + fLowEnergyLimit = 2. * fMass * fMass / CLHEP::electron_mass_c2 - CLHEP::electron_mass_c2; + + // model is ok up to 1000 TeV due to neglected Z-interference + fHighEnergyLimit = 1000. * TeV; + fCurrentSigma = 0.0; fCrossSecFactor = 1.; fManager = G4LossTableManager::Instance(); @@ -138,12 +134,14 @@ G4double G4AnnihiToMuPair::ComputeCrossSectionPerElectron(const G4double e) // Sigma per electron * number of electrons per atom if(xi <= 1.0 - 100*piaxi*piaxi) { sigma *= std::sqrt(1.0 - xi); - } else if( xi >= 1.0 - 0.01*piaxi*piaxi) { + } + else if (xi >= 1.0 - 0.01 * piaxi * piaxi) { sigma *= piaxi; - } else { - sigma *= piaxi/(1. - G4Exp( -piaxi/std::sqrt(1-xi) )); } - //G4cout << "### sigma= " << sigma << G4endl; + else { + sigma *= piaxi / (1. - G4Exp(-piaxi / std::sqrt(1 - xi))); + } + // G4cout << "### sigma= " << sigma << G4endl; return sigma; } @@ -197,10 +195,9 @@ G4VParticleChange* G4AnnihiToMuPair::PostStepDoIt(const G4Track& aTrack, G4double xs = CrossSectionPerVolume(Epos, aTrack.GetMaterial()); // test of cross section - if(xs > 0.0 && fCurrentSigma*G4UniformRand() > xs) - { - return G4VDiscreteProcess::PostStepDoIt(aTrack,aStep); - } + if(xs > 0.0 && fCurrentSigma*G4UniformRand() > xs) { + return G4VDiscreteProcess::PostStepDoIt(aTrack,aStep); + } const G4ThreeVector PosiDirection = aDynamicPositron->GetMomentumDirection(); G4double xi = fLowEnergyLimit/Epos; // xi is always less than 1, @@ -212,7 +209,7 @@ G4VParticleChange* G4AnnihiToMuPair::PostStepDoIt(const G4Track& aTrack, do { cost = 2.*G4UniformRand()-1.; } // Loop checking, 07-Aug-2015, Vladimir Ivanchenko while (2.*G4UniformRand() > 1.+xi+cost*cost*(1.-xi) ); - G4double sint = sqrt(1.-cost*cost); + G4double sint = std::sqrt(1.-cost*cost); // generate phi // @@ -240,10 +237,8 @@ G4VParticleChange* G4AnnihiToMuPair::PostStepDoIt(const G4Track& aTrack, // mu+ mu- directions for Positron in z-direction // - G4ThreeVector - MuPlusDirection(PmuPlusX/PmuPlus, PmuPlusY/PmuPlus, PmuPlusZ/PmuPlus); - G4ThreeVector - MuMinusDirection(PmuMinusX/PmuMinus,PmuMinusY/PmuMinus,PmuMinusZ/PmuMinus); + G4ThreeVector MuPlusDirection(PmuPlusX / PmuPlus, PmuPlusY / PmuPlus, PmuPlusZ / PmuPlus); + G4ThreeVector MuMinusDirection(PmuMinusX / PmuMinus, PmuMinusY / PmuMinus, PmuMinusZ / PmuMinus); // rotate to actual Positron direction // @@ -253,12 +248,10 @@ G4VParticleChange* G4AnnihiToMuPair::PostStepDoIt(const G4Track& aTrack, aParticleChange.SetNumberOfSecondaries(2); // create G4DynamicParticle object for the particle1 - G4DynamicParticle* aParticle1 = - new G4DynamicParticle(part1, MuPlusDirection, EmuPlus-fMass); + auto aParticle1 = new G4DynamicParticle(part1, MuPlusDirection, EmuPlus - fMass); aParticleChange.AddSecondary(aParticle1); // create G4DynamicParticle object for the particle2 - G4DynamicParticle* aParticle2 = - new G4DynamicParticle(part2, MuMinusDirection, EmuMinus-fMass); + auto aParticle2 = new G4DynamicParticle(part2, MuMinusDirection, EmuMinus - fMass); aParticleChange.AddSecondary(aParticle2); // Kill the incident positron @@ -274,11 +267,10 @@ G4VParticleChange* G4AnnihiToMuPair::PostStepDoIt(const G4Track& aTrack, void G4AnnihiToMuPair::PrintInfoDefinition() { G4String comments = fInfo + " annihilation, atomic e- at rest, SubType="; - G4cout << G4endl << GetProcessName() << ": " << comments - << GetProcessSubType() << G4endl; - G4cout << " threshold at " << fLowEnergyLimit/CLHEP::GeV << " GeV" - << " good description up to " - << fHighEnergyLimit/CLHEP::TeV << " TeV for all Z." << G4endl; + G4cout << G4endl << GetProcessName() << ": " << comments << GetProcessSubType() << G4endl; + G4cout << " threshold at " << fLowEnergyLimit / CLHEP::GeV << " GeV" + << " good description up to " << fHighEnergyLimit / CLHEP::TeV << " TeV for all Z." + << G4endl; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/processes/electromagnetic/highenergy/src/G4GammaConversionToMuons.cc b/source/processes/electromagnetic/highenergy/src/G4GammaConversionToMuons.cc index d609f5a29a1..40e7a226728 100644 --- a/source/processes/electromagnetic/highenergy/src/G4GammaConversionToMuons.cc +++ b/source/processes/electromagnetic/highenergy/src/G4GammaConversionToMuons.cc @@ -33,42 +33,41 @@ // --------------------------------------------------------------------------- #include "G4GammaConversionToMuons.hh" -#include "G4PhysicalConstants.hh" -#include "G4SystemOfUnits.hh" -#include "G4UnitsTable.hh" -#include "G4MuonPlus.hh" -#include "G4MuonMinus.hh" -#include "G4EmProcessSubType.hh" -#include "G4EmParameters.hh" -#include "G4LossTableManager.hh" + #include "G4BetheHeitler5DModel.hh" -#include "G4Gamma.hh" #include "G4Electron.hh" -#include "G4Positron.hh" -#include "G4NistManager.hh" -#include "G4Log.hh" +#include "G4EmParameters.hh" +#include "G4EmProcessSubType.hh" #include "G4Exp.hh" +#include "G4Gamma.hh" +#include "G4Log.hh" +#include "G4LossTableManager.hh" +#include "G4MuonMinus.hh" +#include "G4MuonPlus.hh" +#include "G4NistManager.hh" +#include "G4PhysicalConstants.hh" +#include "G4Positron.hh" #include "G4ProductionCutsTable.hh" +#include "G4SystemOfUnits.hh" +#include "G4UnitsTable.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... -using namespace std; - -static const G4double sqrte=sqrt(exp(1.)); -static const G4double PowSat=-0.88; +static const G4double sqrte = std::sqrt(std::exp(1.)); +static const G4double PowSat = -0.88; G4GammaConversionToMuons::G4GammaConversionToMuons(const G4String& processName, G4ProcessType type) : G4VDiscreteProcess (processName, type), Mmuon(G4MuonPlus::MuonPlus()->GetPDGMass()), - Rc(CLHEP::elm_coupling/Mmuon), - LimitEnergy (5.*Mmuon), - LowestEnergyLimit (2.*Mmuon), - HighestEnergyLimit(1e12*CLHEP::GeV), // ok to 1e12GeV, then LPM suppression + Rc(CLHEP::elm_coupling / Mmuon), + LimitEnergy(5. * Mmuon), + LowestEnergyLimit(2. * Mmuon), + HighestEnergyLimit(1e12 * CLHEP::GeV), // ok to 1e12GeV, then LPM suppression theGamma(G4Gamma::Gamma()), theMuonPlus(G4MuonPlus::MuonPlus()), theMuonMinus(G4MuonMinus::MuonMinus()) -{ +{ SetProcessSubType(fGammaConversionToMuMu); fManager = G4LossTableManager::Instance(); fManager->Register(this); @@ -76,7 +75,7 @@ G4GammaConversionToMuons::G4GammaConversionToMuons(const G4String& processName, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... -G4GammaConversionToMuons::~G4GammaConversionToMuons() +G4GammaConversionToMuons::~G4GammaConversionToMuons() { fManager->DeRegister(this); } @@ -96,13 +95,13 @@ void G4GammaConversionToMuons::BuildPhysicsTable(const G4ParticleDefinition& p) auto table = G4Material::GetMaterialTable(); std::size_t nelm = 0; - for(auto const & mat : *table) { + for (auto const& mat : *table) { std::size_t n = mat->GetNumberOfElements(); nelm = std::max(nelm, n); } - fTemp.resize(nelm, 0); + temp.resize(nelm, 0); - if(Energy5DLimit > 0.0 && nullptr != f5Dmodel) { + if (Energy5DLimit > 0.0 && nullptr != f5Dmodel) { f5Dmodel = new G4BetheHeitler5DModel(); f5Dmodel->SetLeptonPair(theMuonPlus, theMuonMinus); const std::size_t numElems = G4ProductionCutsTable::GetProductionCutsTable()->GetTableSize(); @@ -114,8 +113,8 @@ void G4GammaConversionToMuons::BuildPhysicsTable(const G4ParticleDefinition& p) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4GammaConversionToMuons::GetMeanFreePath(const G4Track& aTrack, - G4double, G4ForceCondition*) +G4double G4GammaConversionToMuons::GetMeanFreePath(const G4Track& aTrack, G4double, + G4ForceCondition*) // returns the photon mean free path in GEANT4 internal units { const G4DynamicParticle* aDynamicGamma = aTrack.GetDynamicParticle(); @@ -179,31 +178,31 @@ G4double G4GammaConversionToMuons::ComputeCrossSectionPerAtom( G4NistManager* nist = G4NistManager::Instance(); - G4double PowThres,Ecor,B,Dn,Zthird,Winfty,WMedAppr, - Wsatur,sigfac; - - if(Z==1) // special case of Hydrogen - { B=202.4; - Dn=1.49; - } - else - { B=183.; - Dn=1.54*nist->GetA27(Z); - } - Zthird=1./nist->GetZ13(Z); // Z**(-1/3) - Winfty=B*Zthird*Mmuon/(Dn*electron_mass_c2); - WMedAppr=1./(4.*Dn*sqrte*Mmuon); - Wsatur=Winfty/WMedAppr; - sigfac=4.*fine_structure_const*Z*Z*Rc*Rc; - PowThres=1.479+0.00799*Dn; - Ecor=-18.+4347./(B*Zthird); - - G4double CorFuc=1.+.04*G4Log(1.+Ecor/Egam); - G4double Eg=G4Exp(G4Log(1.-4.*Mmuon/Egam)*PowThres)* - G4Exp(G4Log(G4Exp(G4Log(Wsatur)*PowSat) + G4Exp(G4Log(Egam)*PowSat))/PowSat); - - G4double CrossSection=7./9.*sigfac*G4Log(1.+WMedAppr*CorFuc*Eg); - CrossSection *= CrossSecFactor; // increase the CrossSection by (by default 1) + G4double PowThres, Ecor, B, Dn, Zthird, Winfty, WMedAppr, Wsatur, sigfac; + + if (Z == 1) { // special case of Hydrogen + B = 202.4; + Dn = 1.49; + } + else { + B = 183.; + Dn = 1.54 * nist->GetA27(Z); + } + Zthird = 1. / nist->GetZ13(Z); // Z**(-1/3) + Winfty = B * Zthird * Mmuon / (Dn * electron_mass_c2); + WMedAppr = 1. / (4. * Dn * sqrte * Mmuon); + Wsatur = Winfty / WMedAppr; + sigfac = 4. * fine_structure_const * Z * Z * Rc * Rc; + PowThres = 1.479 + 0.00799 * Dn; + Ecor = -18. + 4347. / (B * Zthird); + + G4double CorFuc = 1. + .04 * G4Log(1. + Ecor / Egam); + G4double Eg = + G4Exp(G4Log(1. - 4. * Mmuon / Egam) * PowThres) + * G4Exp(G4Log(G4Exp(G4Log(Wsatur) * PowSat) + G4Exp(G4Log(Egam) * PowSat)) / PowSat); + + G4double CrossSection = 7. / 9. * sigfac * G4Log(1. + WMedAppr * CorFuc * Eg); + CrossSection *= CrossSecFactor; // increase the CrossSection by (by default 1) return CrossSection; } @@ -211,12 +210,12 @@ G4double G4GammaConversionToMuons::ComputeCrossSectionPerAtom( void G4GammaConversionToMuons::SetCrossSecFactor(G4double fac) // Set the factor to artificially increase the cross section -{ - if(fac < 0.0) return; - CrossSecFactor=fac; - if (verboseLevel > 0) { +{ + if (fac < 0.0) return; + CrossSecFactor = fac; + if (verboseLevel > 1) { G4cout << "The cross section for GammaConversionToMuons is artificially " - << "increased by the CrossSecFactor=" << CrossSecFactor << G4endl; + << "increased by the CrossSecFactor=" << CrossSecFactor << G4endl; } } @@ -233,7 +232,7 @@ G4VParticleChange* G4GammaConversionToMuons::PostStepDoIt( const G4Material* aMaterial = aTrack.GetMaterial(); // current Gamma energy and direction, return if energy too low - const G4DynamicParticle *aDynamicGamma = aTrack.GetDynamicParticle(); + const G4DynamicParticle* aDynamicGamma = aTrack.GetDynamicParticle(); G4double Egam = aDynamicGamma->GetKineticEnergy(); if (Egam <= LowestEnergyLimit) { return G4VDiscreteProcess::PostStepDoIt(aTrack,aStep); @@ -260,34 +259,34 @@ G4VParticleChange* G4GammaConversionToMuons::PostStepDoIt( G4int Z = anElement->GetZasInt(); G4NistManager* nist = G4NistManager::Instance(); - G4double B,Dn; + G4double B, Dn; G4double A027 = nist->GetA27(Z); - if(Z==1) // special case of Hydrogen - { B=202.4; - Dn=1.49; - } - else - { B=183.; - Dn=1.54*A027; - } - G4double Zthird=1./nist->GetZ13(Z); // Z**(-1/3) - G4double Winfty=B*Zthird*Mmuon/(Dn*electron_mass_c2); + if (Z == 1) { // special case of Hydrogen + B = 202.4; + Dn = 1.49; + } + else { + B = 183.; + Dn = 1.54 * A027; + } + G4double Zthird = 1. / nist->GetZ13(Z); // Z**(-1/3) + G4double Winfty = B * Zthird * Mmuon / (Dn * electron_mass_c2); - G4double C1Num=0.138*A027; - G4double C1Num2=C1Num*C1Num; - G4double C2Term2=electron_mass_c2/(183.*Zthird*Mmuon); + G4double C1Num = 0.138 * A027; + G4double C1Num2 = C1Num * C1Num; + G4double C2Term2 = electron_mass_c2 / (183. * Zthird * Mmuon); - G4double GammaMuonInv=Mmuon/Egam; + G4double GammaMuonInv = Mmuon / Egam; // generate xPlus according to the differential cross section by rejection - G4double xmin=(Egam <= LimitEnergy) ? 0.5 : 0.5 - std::sqrt(0.25 - GammaMuonInv); - G4double xmax=1.-xmin; + G4double xmin = (Egam <= LimitEnergy) ? 0.5 : 0.5 - std::sqrt(0.25 - GammaMuonInv); + G4double xmax = 1. - xmin; - G4double Ds2=(Dn*sqrte-2.); - G4double sBZ=sqrte*B*Zthird/electron_mass_c2; - G4double LogWmaxInv=1./G4Log(Winfty*(1.+2.*Ds2*GammaMuonInv) - /(1.+2.*sBZ*Mmuon*GammaMuonInv)); + G4double Ds2 = (Dn * sqrte - 2.); + G4double sBZ = sqrte * B * Zthird / electron_mass_c2; + G4double LogWmaxInv = + 1. / G4Log(Winfty * (1. + 2. * Ds2 * GammaMuonInv) / (1. + 2. * sBZ * Mmuon * GammaMuonInv)); G4double xPlus = 0.5; G4double xMinus = 0.5; G4double xPM = 0.25; @@ -297,18 +296,18 @@ G4VParticleChange* G4GammaConversionToMuons::PostStepDoIt( // sampling for Egam > LimitEnergy if (xmin < 0.5) { - G4double result,W; + G4double result, W; do { - xPlus=xmin+G4UniformRand()*(xmax-xmin); - xMinus=1.-xPlus; - xPM=xPlus*xMinus; - G4double del=Mmuon*Mmuon/(2.*Egam*xPM); - W=Winfty*(1.+Ds2*del/Mmuon)/(1.+sBZ*del); - G4double xxp=1.-4./3.*xPM; // the main xPlus dependence - result=(xxp > 0.) ? xxp*G4Log(W)*LogWmaxInv : 0.0; - if(result>1.) { - G4cout << "G4GammaConversionToMuons::PostStepDoIt WARNING:" - << " in dSigxPlusGen, result=" << result << " > 1" << G4endl; + xPlus = xmin + G4UniformRand() * (xmax - xmin); + xMinus = 1. - xPlus; + xPM = xPlus * xMinus; + G4double del = Mmuon * Mmuon / (2. * Egam * xPM); + W = Winfty * (1. + Ds2 * del / Mmuon) / (1. + sBZ * del); + G4double xxp = 1. - 4. / 3. * xPM; // the main xPlus dependence + result = (xxp > 0.) ? xxp * G4Log(W) * LogWmaxInv : 0.0; + if (result > 1.) { + G4cout << "G4GammaConversionToMuons::PostStepDoIt WARNING:" + << " in dSigxPlusGen, result=" << result << " > 1" << G4endl; } ++nn; if(nn >= nmax) { break; } @@ -322,8 +321,8 @@ G4VParticleChange* G4GammaConversionToMuons::PostStepDoIt( G4double psi; G4double rho; - G4double a3 = (GammaMuonInv/(2.*xPM)); - G4double a33 = a3*a3; + G4double a3 = (GammaMuonInv / (2. * xPM)); + G4double a33 = a3 * a3; G4double f1; G4double b1 = 1./(4.*C1Num2); G4double b3 = b1*b1*b1; @@ -341,23 +340,20 @@ G4VParticleChange* G4GammaConversionToMuons::PostStepDoIt( t=G4UniformRand(); G4double a34=a33/(t*t); G4double a22 = a34 + b1; - if(std::abs(b1)<0.0001*a34) - // special case of a34=a22 because of logarithm accuracy - { - f1=(1.-2.*xPM+4.*xPM*t*(1.-t))/(12.*a34*a34*a34*a34); - } - else - { - f1=-(1.-2.*xPM+4.*xPM*t*(1.-t))*(2.*b1+(a22+a34)*G4Log(a34/a22))/(2*b3); - } - if(f1<0.0 || f1> f1_max) // should never happend - { - G4cout << "G4GammaConversionToMuons::PostStepDoIt WARNING:" - << "outside allowed range f1=" << f1 - << " is set to zero, a34 = "<< a34 << " a22 = "< f1_max) { // should never happend + G4cout << "G4GammaConversionToMuons::PostStepDoIt WARNING:" + << "outside allowed range f1=" << f1 + << " is set to zero, a34 = "<< a34 << " a22 = "< nmax) { break; } // Loop checking, 07-Aug-2015, Vladimir Ivanchenko } while ( G4UniformRand()*f1_max > f1); @@ -368,14 +364,12 @@ G4VParticleChange* G4GammaConversionToMuons::PostStepDoIt( do { ++nn; psi=twopi*G4UniformRand(); - f2=1.-2.*xPM+4.*xPM*t*(1.-t)*(1.+cos(2.*psi)); - if(f2<0 || f2> f2_max) // should never happend - { - G4cout << "G4GammaConversionToMuons::PostStepDoIt WARNING:" - << "outside allowed range f2=" << f2 << " is set to zero" - << G4endl; - f2 = 0.0; - } + f2=1.-2.*xPM+4.*xPM*t*(1.-t)*(1.+std::cos(2.*psi)); + if(f2<0 || f2> f2_max) { // should never happend + G4cout << "G4GammaConversionToMuons::PostStepDoIt WARNING:" + << "outside allowed range f2=" << f2 << " is set to zero" << G4endl; + f2 = 0.0; + } if(nn >= nmax) { break; } // Loop checking, 07-Aug-2015, Vladimir Ivanchenko } while ( G4UniformRand()*f2_max > f2); @@ -383,15 +377,15 @@ G4VParticleChange* G4GammaConversionToMuons::PostStepDoIt( // generate rho by direct transformation G4double C2Term1=GammaMuonInv/(2.*xPM*t); G4double C22 = C2Term1*C2Term1+C2Term2*C2Term2; - G4double C2=4.*C22*C22/sqrt(xPM); + G4double C2=4.*C22*C22/std::sqrt(xPM); G4double rhomax=(1./t-1.)*1.9/A027; G4double beta=G4Log( (C2+rhomax*rhomax*rhomax*rhomax)/C2 ); rho=G4Exp(G4Log(C2 *( G4Exp(beta*G4UniformRand())-1. ))*0.25); //now get from t and psi the kinematical variables - G4double u=sqrt(1./t-1.); - G4double xiHalf=0.5*rho*cos(psi); - phiHalf=0.5*rho/u*sin(psi); + G4double u=std::sqrt(1./t-1.); + G4double xiHalf=0.5*rho*std::cos(psi); + phiHalf=0.5*rho/u*std::sin(psi); thetaPlus =GammaMuonInv*(u+xiHalf)/xPlus; thetaMinus=GammaMuonInv*(u-xiHalf)/xMinus; @@ -412,21 +406,19 @@ G4VParticleChange* G4GammaConversionToMuons::PostStepDoIt( G4double EMinus=xMinus*Egam; // mu+ mu- directions for gamma in z-direction - G4ThreeVector MuPlusDirection ( sin(thetaPlus) *cos(phi0+phiHalf), - sin(thetaPlus) *sin(phi0+phiHalf), cos(thetaPlus) ); - G4ThreeVector MuMinusDirection (-sin(thetaMinus)*cos(phi0-phiHalf), - -sin(thetaMinus) *sin(phi0-phiHalf), cos(thetaMinus) ); + G4ThreeVector MuPlusDirection ( std::sin(thetaPlus) *std::cos(phi0+phiHalf), + std::sin(thetaPlus) *std::sin(phi0+phiHalf), std::cos(thetaPlus) ); + G4ThreeVector MuMinusDirection (-std::sin(thetaMinus)*std::cos(phi0-phiHalf), + -std::sin(thetaMinus) *std::sin(phi0-phiHalf), std::cos(thetaMinus) ); // rotate to actual gamma direction MuPlusDirection.rotateUz(GammaDirection); MuMinusDirection.rotateUz(GammaDirection); // create G4DynamicParticle object for the particle1 - G4DynamicParticle* aParticle1 = - new G4DynamicParticle(theMuonPlus,MuPlusDirection,EPlus-Mmuon); + auto aParticle1 = new G4DynamicParticle(theMuonPlus, MuPlusDirection, EPlus - Mmuon); aParticleChange.AddSecondary(aParticle1); // create G4DynamicParticle object for the particle2 - G4DynamicParticle* aParticle2 = - new G4DynamicParticle(theMuonMinus,MuMinusDirection,EMinus-Mmuon); + auto aParticle2 = new G4DynamicParticle(theMuonMinus, MuMinusDirection, EMinus - Mmuon); aParticleChange.AddSecondary(aParticle2); // Reset NbOfInteractionLengthLeft and return aParticleChange return G4VDiscreteProcess::PostStepDoIt( aTrack, aStep ); @@ -449,18 +441,16 @@ const G4Element* G4GammaConversionToMuons::SelectRandomAtom( const G4double* natom = aMaterial->GetVecNbOfAtomsPerVolume(); G4double sum = 0.; - for (std::size_t i=0; iGetZasInt()); - fTemp[i] = sum; + temp[i] = sum; } sum *= G4UniformRand(); - for (std::size_t i=0; i class G4ParticleChangeForGamma; @@ -51,82 +50,64 @@ class G4LivermorePhotoElectricModel : public G4VEmModel { public: explicit G4LivermorePhotoElectricModel(const G4String& nam = "LivermorePhElectric"); - - virtual ~G4LivermorePhotoElectricModel(); - + + ~G4LivermorePhotoElectricModel() override; + void Initialise(const G4ParticleDefinition*, const G4DataVector&) override; - - G4double CrossSectionPerVolume(const G4Material*, - const G4ParticleDefinition*, - G4double energy, - G4double cutEnergy = 0.0, - G4double maxEnergy = DBL_MAX) override; - - G4double ComputeCrossSectionPerAtom( - const G4ParticleDefinition*, - G4double energy, - G4double Z, - G4double A=0, - G4double cut=0, - G4double emax=DBL_MAX) override; - - void SampleSecondaries(std::vector*, - const G4MaterialCutsCouple*, - const G4DynamicParticle*, - G4double tmin, - G4double maxEnergy) override; - - + + G4double CrossSectionPerVolume(const G4Material*, const G4ParticleDefinition*, G4double energy, + G4double cutEnergy = 0.0, G4double maxEnergy = DBL_MAX) override; + + G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*, G4double energy, G4double Z, + G4double A = 0, G4double cut = 0, + G4double emax = DBL_MAX) override; + + void SampleSecondaries(std::vector*, const G4MaterialCutsCouple*, + const G4DynamicParticle*, G4double tmin, G4double maxEnergy) override; + void InitialiseForElement(const G4ParticleDefinition*, G4int Z) override; - - inline void SetLimitNumberOfShells(G4int); - G4double GetBindingEnergy (G4int Z, G4int shell); - - G4LivermorePhotoElectricModel & operator= - (const G4LivermorePhotoElectricModel &right) = delete; + + [[maybe_unused]] inline void SetLimitNumberOfShells(G4int); + G4double GetBindingEnergy(G4int Z, G4int shell); + + G4LivermorePhotoElectricModel& operator=(const G4LivermorePhotoElectricModel& right) = delete; G4LivermorePhotoElectricModel(const G4LivermorePhotoElectricModel&) = delete; -protected: - G4ParticleChangeForGamma* fParticleChange; - +protected: + G4ParticleChangeForGamma* fParticleChange = nullptr; + private: - void ReadData(G4int Z); + void ReadData(const G4int Z); const G4String& FindDirectoryPath(); - - const G4ParticleDefinition* theGamma; - const G4ParticleDefinition* theElectron; - - static G4PhysicsFreeVector* fCrossSection[101]; // 101 because Z range is 1-100 - static G4PhysicsFreeVector* fCrossSectionLE[101]; - static std::vector* fParamHigh[101]; - static std::vector* fParamLow[101]; - static G4int fNShells[101]; - static G4int fNShellsUsed[101]; - static G4ElementData* fShellCrossSection; - static G4Material* fWater; - static G4double fWaterEnergyLimit; - static G4String fDataDirectory; - -#ifdef G4MULTITHREADED - static G4Mutex livPhotoeffMutex; -#endif - - G4VAtomDeexcitation* fAtomDeexcitation; - std::vector fSandiaCof; - - G4double fCurrSection; - G4int verboseLevel; - G4int maxZ; - G4int nShellLimit; - G4bool fDeexcitationActive; - G4bool isInitialised; - + + const G4ParticleDefinition* theGamma; + const G4ParticleDefinition* theElectron; + + static G4PhysicsFreeVector* fCrossSection[101]; // 101 because Z range is 1-100 + static G4PhysicsFreeVector* fCrossSectionLE[101]; + static std::vector* fParamHigh[101]; + static std::vector* fParamLow[101]; + static G4int fNShells[101]; + static G4int fNShellsUsed[101]; + static G4ElementData* fShellCrossSection; + static G4Material* fWater; + static G4double fWaterEnergyLimit; + static G4String fDataDirectory; + + G4VAtomDeexcitation* fAtomDeexcitation = nullptr; + std::vector fSandiaCof; + + G4double fCurrSection = 0.0; + G4int verboseLevel; + G4int maxZ = 100; + G4int nShellLimit = 100; + G4bool fDeexcitationActive = false; + G4bool isInitialised = false; }; -inline -void G4LivermorePhotoElectricModel::SetLimitNumberOfShells(G4int n) +[[maybe_unused]] inline void G4LivermorePhotoElectricModel::SetLimitNumberOfShells(G4int n) { - nShellLimit = n; + nShellLimit = n; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/source/processes/electromagnetic/lowenergy/include/G4LivermoreRayleighModel.hh b/source/processes/electromagnetic/lowenergy/include/G4LivermoreRayleighModel.hh index e7875d96afe..51c299bdb6a 100644 --- a/source/processes/electromagnetic/lowenergy/include/G4LivermoreRayleighModel.hh +++ b/source/processes/electromagnetic/lowenergy/include/G4LivermoreRayleighModel.hh @@ -31,55 +31,49 @@ #ifndef G4LivermoreRayleighModel_h #define G4LivermoreRayleighModel_h 1 -#include "G4VEmModel.hh" #include "G4ParticleChangeForGamma.hh" #include "G4PhysicsFreeVector.hh" #include "G4ProductionCutsTable.hh" +#include "G4VEmModel.hh" class G4LivermoreRayleighModel : public G4VEmModel { public: explicit G4LivermoreRayleighModel(); - ~G4LivermoreRayleighModel(); + ~G4LivermoreRayleighModel() override; void Initialise(const G4ParticleDefinition*, const G4DataVector&) override; - void InitialiseLocal(const G4ParticleDefinition*, - G4VEmModel* masterModel) override; + void InitialiseLocal(const G4ParticleDefinition*, G4VEmModel* masterModel) override; void InitialiseForElement(const G4ParticleDefinition*, G4int Z) override; - G4double ComputeCrossSectionPerAtom( - const G4ParticleDefinition*, - G4double kinEnergy, - G4double Z, - G4double A=0, - G4double cut=0, - G4double emax=DBL_MAX) override; + G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*, G4double kinEnergy, G4double Z, + G4double A = 0, G4double cut = 0, + G4double emax = DBL_MAX) override; - void SampleSecondaries(std::vector*, - const G4MaterialCutsCouple*, - const G4DynamicParticle*, - G4double tmin, - G4double maxEnergy) override; + void SampleSecondaries(std::vector*, const G4MaterialCutsCouple*, + const G4DynamicParticle*, G4double tmin, G4double maxEnergy) override; - inline void SetLowEnergyThreshold(G4double); + [[maybe_unused]] inline void SetLowEnergyThreshold(G4double); - G4LivermoreRayleighModel & operator=(const G4LivermoreRayleighModel &right) = delete; + G4LivermoreRayleighModel& operator=(const G4LivermoreRayleighModel& right) = delete; G4LivermoreRayleighModel(const G4LivermoreRayleighModel&) = delete; private: - void ReadData(size_t Z, const char* path = 0); + void ReadData(const G4int ZZ); + const G4String& FindDirectoryPath(); G4ParticleChangeForGamma* fParticleChange; - static G4PhysicsFreeVector* dataCS[101]; // 101 because Z range is 1-100 + static G4PhysicsFreeVector* dataCS[101]; // 101 because Z range is 1-100 + static G4String gDataDirectory; - G4double lowEnergyLimit; + G4double lowEnergyLimit; G4int verboseLevel; - G4int maxZ; - G4bool isInitialised; + G4int maxZ = 100; + G4bool isInitialised = false; }; -inline void G4LivermoreRayleighModel::SetLowEnergyThreshold(G4double val) +[[maybe_unused]] inline void G4LivermoreRayleighModel::SetLowEnergyThreshold(G4double val) { lowEnergyLimit = val; } diff --git a/source/processes/electromagnetic/lowenergy/include/G4LowEWentzelVIModel.hh b/source/processes/electromagnetic/lowenergy/include/G4LowEWentzelVIModel.hh index c4fef5213f6..70fd2c48095 100644 --- a/source/processes/electromagnetic/lowenergy/include/G4LowEWentzelVIModel.hh +++ b/source/processes/electromagnetic/lowenergy/include/G4LowEWentzelVIModel.hh @@ -58,7 +58,7 @@ class G4LowEWentzelVIModel : public G4WentzelVIModel { public: explicit G4LowEWentzelVIModel(); - virtual ~G4LowEWentzelVIModel(); + ~G4LowEWentzelVIModel() override = default; G4double ComputeTruePathLengthLimit(const G4Track& track, G4double& currentMinimalStep) override; diff --git a/source/processes/electromagnetic/lowenergy/src/G4LivermoreComptonModel.cc b/source/processes/electromagnetic/lowenergy/src/G4LivermoreComptonModel.cc index a9c3a9b6a19..18219350ec5 100644 --- a/source/processes/electromagnetic/lowenergy/src/G4LivermoreComptonModel.cc +++ b/source/processes/electromagnetic/lowenergy/src/G4LivermoreComptonModel.cc @@ -32,76 +32,77 @@ // History: // -------- // 18 Apr 2009 V Ivanchenko Cleanup initialisation and generation of secondaries: -// - apply internal high-energy limit only in constructor +// - apply internal high-energy limit only in constructor // - do not apply low-energy limit (default is 0) // - remove GetMeanFreePath method and table -// - added protection against numerical problem in energy sampling +// - added protection against numerical problem in energy sampling // - use G4ElementSelector // 26 Dec 2010 V Ivanchenko Load data tables only once to avoid memory leak #include "G4LivermoreComptonModel.hh" -#include "G4PhysicalConstants.hh" -#include "G4SystemOfUnits.hh" -#include "G4Electron.hh" -#include "G4ParticleChangeForGamma.hh" -#include "G4LossTableManager.hh" -#include "G4VAtomDeexcitation.hh" + #include "G4AtomicShell.hh" -#include "G4Gamma.hh" #include "G4AutoLock.hh" -#include "G4ShellData.hh" #include "G4DopplerProfile.hh" -#include "G4Log.hh" +#include "G4Electron.hh" #include "G4Exp.hh" +#include "G4Log.hh" +#include "G4LossTableManager.hh" +#include "G4ParticleChangeForGamma.hh" +#include "G4PhysicalConstants.hh" +#include "G4ShellData.hh" +#include "G4SystemOfUnits.hh" +#include "G4VAtomDeexcitation.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -namespace { G4Mutex LivermoreComptonModelMutex = G4MUTEX_INITIALIZER; } +namespace +{ +G4Mutex LivermoreComptonModelMutex = G4MUTEX_INITIALIZER; +} using namespace std; G4PhysicsFreeVector* G4LivermoreComptonModel::data[] = {nullptr}; -G4ShellData* G4LivermoreComptonModel::shellData = nullptr; -G4DopplerProfile* G4LivermoreComptonModel::profileData = nullptr; +G4ShellData* G4LivermoreComptonModel::shellData = nullptr; +G4DopplerProfile* G4LivermoreComptonModel::profileData = nullptr; +G4String G4LivermoreComptonModel::gDataDirectory = ""; static const G4double ln10 = G4Log(10.); -G4LivermoreComptonModel::G4LivermoreComptonModel(const G4ParticleDefinition*, - const G4String& nam) - : G4VEmModel(nam),maxZ(100),isInitialised(false) -{ - verboseLevel=1 ; +G4LivermoreComptonModel::G4LivermoreComptonModel(const G4ParticleDefinition*, const G4String& nam) + : G4VEmModel(nam) +{ + fParticleChange = nullptr; + verboseLevel = 1; // Verbosity scale: - // 0 = nothing - // 1 = warning for energy non-conservation + // 0 = nothing + // 1 = warning for energy non-conservation // 2 = details of energy budget // 3 = calculation of cross sections, file openings, sampling of atoms // 4 = entering in methods - if( verboseLevel>1 ) { + if (verboseLevel > 1) { G4cout << "Livermore Compton model is constructed " << G4endl; } - //Mark this model as "applicable" for atomic deexcitation + // Mark this model as "applicable" for atomic deexcitation SetDeexcitationFlag(true); - fParticleChange = 0; - fAtomDeexcitation = 0; + fParticleChange = nullptr; + fAtomDeexcitation = nullptr; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4LivermoreComptonModel::~G4LivermoreComptonModel() { - if(IsMaster()) - { + if (IsMaster()) { delete shellData; shellData = nullptr; delete profileData; profileData = nullptr; - for(G4int i = 0; i <= maxZ; ++i) - { - if(data[i]) - { + for (G4int i = 0; i <= maxZ; ++i) { + if (data[i]) { delete data[i]; data[i] = nullptr; } @@ -112,176 +113,181 @@ G4LivermoreComptonModel::~G4LivermoreComptonModel() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... void G4LivermoreComptonModel::Initialise(const G4ParticleDefinition* particle, - const G4DataVector& cuts) + const G4DataVector& cuts) { if (verboseLevel > 1) { G4cout << "Calling G4LivermoreComptonModel::Initialise()" << G4endl; } - // Initialise element selector - if(IsMaster()) { - // Access to elements - const char* path = G4FindDataDir("G4LEDATA"); + // Initialise element selector + if (IsMaster()) { + // Initialise element selector + InitialiseElementSelectors(particle, cuts); + // Access to elements const G4ElementTable* elemTable = G4Element::GetElementTable(); - size_t numElems = (*elemTable).size(); - for(size_t ie = 0; ie < numElems; ++ie) - { + size_t numElems = (*elemTable).size(); + for (size_t ie = 0; ie < numElems; ++ie) { const G4Element* elem = (*elemTable)[ie]; - const G4int Z = std::min(maxZ, elem->GetZasInt()); - - if(data[Z] == nullptr) - { - ReadData(Z, path); + const G4int Z = std::min(maxZ, elem->GetZasInt()); + if (data[Z] == nullptr) { + ReadData(Z); } } // For Doppler broadening - if(shellData == nullptr) { - shellData = new G4ShellData(); + if (shellData == nullptr) { + shellData = new G4ShellData(); shellData->SetOccupancyData(); G4String file = "/doppler/shell-doppler"; shellData->LoadData(file); } - if(profileData == nullptr) { profileData = new G4DopplerProfile(); } - - InitialiseElementSelectors(particle, cuts); + if (profileData == nullptr) { + profileData = new G4DopplerProfile(); + } } if (verboseLevel > 2) { G4cout << "Loaded cross section files" << G4endl; } - - if( verboseLevel>1 ) { + + if (verboseLevel > 1) { G4cout << "G4LivermoreComptonModel is initialized " << G4endl - << "Energy range: " - << LowEnergyLimit() / eV << " eV - " - << HighEnergyLimit() / GeV << " GeV" - << G4endl; + << "Energy range: " << LowEnergyLimit() / eV << " eV - " << HighEnergyLimit() / GeV + << " GeV" << G4endl; + } + // + if (isInitialised) { + return; } - // - if(isInitialised) { return; } fParticleChange = GetParticleChangeForGamma(); - fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation(); + fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation(); isInitialised = true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4LivermoreComptonModel::InitialiseLocal(const G4ParticleDefinition*, - G4VEmModel* masterModel) +void G4LivermoreComptonModel::InitialiseLocal(const G4ParticleDefinition*, G4VEmModel* masterModel) { SetElementSelectors(masterModel->GetElementSelectors()); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4LivermoreComptonModel::ReadData(size_t Z, const char* path) +const G4String& G4LivermoreComptonModel::FindDirectoryPath() { - if (verboseLevel > 1) - { - G4cout << "G4LivermoreComptonModel::ReadData()" - << G4endl; - } - if(data[Z] != nullptr) { return; } - const char* datadir = path; - if(datadir == nullptr) - { - datadir = G4FindDataDir("G4LEDATA"); - if(datadir == nullptr) - { - G4Exception("G4LivermoreComptonModel::ReadData()", - "em0006",FatalException, - "Environment variable G4LEDATA not defined"); - return; + // no check in this method - environment variable is check by utility + if (gDataDirectory.empty()) { + auto param = G4EmParameters::Instance(); + std::ostringstream ost; + if (param->LivermoreDataDir() == "livermore") { + ost << param->GetDirLEDATA() << "/livermore/comp/"; + } + else { + ost << param->GetDirLEDATA() << "/epics2017/comp/"; } + gDataDirectory = ost.str(); + } + return gDataDirectory; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4LivermoreComptonModel::ReadData(const G4int ZZ) +{ + if (verboseLevel > 1) { + G4cout << "G4LivermoreComptonModel::ReadData()" << G4endl; } - + const G4int Z = std::min(ZZ, maxZ); + + if (data[Z] != nullptr) { + return; + } + data[Z] = new G4PhysicsFreeVector(); - + std::ostringstream ost; - if(G4EmParameters::Instance()->LivermoreDataDir() == "livermore"){ - ost << datadir << "/livermore/comp/ce-cs-" << Z <<".dat"; - }else{ - ost << datadir << "/epics2017/comp/ce-cs-" << Z <<".dat"; - } + ost << FindDirectoryPath() << "ce-cs-" << Z << ".dat"; std::ifstream fin(ost.str().c_str()); - - if( !fin.is_open()) - { - G4ExceptionDescription ed; - ed << "G4LivermoreComptonModel data file <" << ost.str().c_str() - << "> is not opened!" << G4endl; - G4Exception("G4LivermoreComptonModel::ReadData()", - "em0003",FatalException, - ed,"G4LEDATA version should be G4EMLOW8.0 or later"); - return; - } else { - if(verboseLevel > 3) { - G4cout << "File " << ost.str() - << " is opened by G4LivermoreComptonModel" << G4endl; - } - data[Z]->Retrieve(fin, true); - data[Z]->ScaleVector(MeV, MeV*barn); - } + + if (!fin.is_open()) { + G4ExceptionDescription ed; + ed << "G4LivermoreComptonModel data file <" << ost.str().c_str() << "> is not opened!" + << G4endl; + G4Exception("G4LivermoreComptonModel::ReadData()", "em0003", FatalException, ed, + "G4LEDATA version should be G4EMLOW8.0 or later"); + return; + } + else { + if (verboseLevel > 3) { + G4cout << "File " << ost.str() << " is opened by G4LivermoreComptonModel" << G4endl; + } + data[Z]->Retrieve(fin, true); + data[Z]->ScaleVector(MeV, MeV * barn); + } fin.close(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double -G4LivermoreComptonModel::ComputeCrossSectionPerAtom(const G4ParticleDefinition*, - G4double GammaEnergy, - G4double Z, G4double, - G4double, G4double) +G4double G4LivermoreComptonModel::ComputeCrossSectionPerAtom(const G4ParticleDefinition*, + G4double GammaEnergy, G4double Z, + G4double, G4double, G4double) { if (verboseLevel > 3) { - G4cout << "G4LivermoreComptonModel::ComputeCrossSectionPerAtom()" - << G4endl; + G4cout << "G4LivermoreComptonModel::ComputeCrossSectionPerAtom()" << G4endl; } - G4double cs = 0.0; + G4double cs = 0.0; - if (GammaEnergy < LowEnergyLimit()) { return 0.0; } + if (GammaEnergy < LowEnergyLimit()) { + return 0.0; + } G4int intZ = G4lrint(Z); - if(intZ < 1 || intZ > maxZ) { return cs; } + if (intZ < 1 || intZ > maxZ) { + return cs; + } G4PhysicsFreeVector* pv = data[intZ]; // if element was not initialised // do initialisation safely for MT mode - if(pv == nullptr) - { - InitialiseForElement(0, intZ); - pv = data[intZ]; - if(pv == nullptr) { return cs; } + if (pv == nullptr) { + InitialiseForElement(nullptr, intZ); + pv = data[intZ]; + if (pv == nullptr) { + return cs; } + } - G4int n = G4int(pv->GetVectorLength() - 1); + auto n = G4int(pv->GetVectorLength() - 1); G4double e1 = pv->Energy(0); G4double e2 = pv->Energy(n); - if(GammaEnergy <= e1) { cs = GammaEnergy/(e1*e1)*pv->Value(e1); } - else if(GammaEnergy <= e2) { cs = pv->Value(GammaEnergy)/GammaEnergy; } - else if(GammaEnergy > e2) { cs = pv->Value(e2)/GammaEnergy; } - + if (GammaEnergy <= e1) { + cs = GammaEnergy / (e1 * e1) * pv->Value(e1); + } + else if (GammaEnergy <= e2) { + cs = pv->Value(GammaEnergy) / GammaEnergy; + } + else if (GammaEnergy > e2) { + cs = pv->Value(e2) / GammaEnergy; + } + return cs; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - -void G4LivermoreComptonModel::SampleSecondaries( - std::vector* fvect, - const G4MaterialCutsCouple* couple, - const G4DynamicParticle* aDynamicGamma, - G4double, G4double) +void G4LivermoreComptonModel::SampleSecondaries(std::vector* fvect, + const G4MaterialCutsCouple* couple, + const G4DynamicParticle* aDynamicGamma, G4double, + G4double) { - - // The scattered gamma energy is sampled according to Klein - Nishina - // formula then accepted or rejected depending on the Scattering Function + // The scattered gamma energy is sampled according to Klein - Nishina + // formula then accepted or rejected depending on the Scattering Function // multiplied by factor from Klein - Nishina formula. // Expression of the angular distribution as Klein Nishina // angular and energy distribution and Scattering fuctions is taken from @@ -297,22 +303,20 @@ void G4LivermoreComptonModel::SampleSecondaries( G4double photonEnergy0 = aDynamicGamma->GetKineticEnergy(); if (verboseLevel > 3) { - G4cout << "G4LivermoreComptonModel::SampleSecondaries() E(MeV)= " - << photonEnergy0/MeV << " in " << couple->GetMaterial()->GetName() - << G4endl; + G4cout << "G4LivermoreComptonModel::SampleSecondaries() E(MeV)= " << photonEnergy0 / MeV + << " in " << couple->GetMaterial()->GetName() << G4endl; } // do nothing below the threshold // should never get here because the XS is zero below the limit - if (photonEnergy0 < LowEnergyLimit()) - return ; + if (photonEnergy0 < LowEnergyLimit()) return; - G4double e0m = photonEnergy0 / electron_mass_c2 ; + G4double e0m = photonEnergy0 / electron_mass_c2; G4ParticleMomentum photonDirection0 = aDynamicGamma->GetMomentumDirection(); // Select randomly one element in the current material - const G4ParticleDefinition* particle = aDynamicGamma->GetDefinition(); - const G4Element* elm = SelectRandomAtom(couple,particle,photonEnergy0); + const G4ParticleDefinition* particle = aDynamicGamma->GetDefinition(); + const G4Element* elm = SelectRandomAtom(couple, particle, photonEnergy0); G4int Z = elm->GetZasInt(); @@ -321,7 +325,7 @@ void G4LivermoreComptonModel::SampleSecondaries( G4double alpha1 = -G4Log(epsilon0Local); G4double alpha2 = 0.5 * (1. - epsilon0Sq); - G4double wlPhoton = h_Planck*c_light/photonEnergy0; + G4double wlPhoton = h_Planck * c_light / photonEnergy0; // Sample the energy of the scattered photon G4double epsilon; @@ -333,39 +337,37 @@ void G4LivermoreComptonModel::SampleSecondaries( if (verboseLevel > 3) { G4cout << "Started loop to sample gamma energy" << G4endl; } - + do { - if ( alpha1/(alpha1+alpha2) > G4UniformRand()) - { - epsilon = G4Exp(-alpha1 * G4UniformRand()); - epsilonSq = epsilon * epsilon; - } - else - { - epsilonSq = epsilon0Sq + (1. - epsilon0Sq) * G4UniformRand(); - epsilon = std::sqrt(epsilonSq); - } + if (alpha1 / (alpha1 + alpha2) > G4UniformRand()) { + epsilon = G4Exp(-alpha1 * G4UniformRand()); + epsilonSq = epsilon * epsilon; + } + else { + epsilonSq = epsilon0Sq + (1. - epsilon0Sq) * G4UniformRand(); + epsilon = std::sqrt(epsilonSq); + } - oneCosT = (1. - epsilon) / ( epsilon * e0m); - sinT2 = oneCosT * (2. - oneCosT); - G4double x = std::sqrt(oneCosT/2.) * cm / wlPhoton; - G4double scatteringFunction = ComputeScatteringFunction(x, Z); - gReject = (1. - epsilon * sinT2 / (1. + epsilonSq)) * scatteringFunction; + oneCosT = (1. - epsilon) / (epsilon * e0m); + sinT2 = oneCosT * (2. - oneCosT); + G4double x = std::sqrt(oneCosT / 2.) * cm / wlPhoton; + G4double scatteringFunction = ComputeScatteringFunction(x, Z); + gReject = (1. - epsilon * sinT2 / (1. + epsilonSq)) * scatteringFunction; - } while(gReject < G4UniformRand()*Z); + } while (gReject < G4UniformRand() * Z); G4double cosTheta = 1. - oneCosT; - G4double sinTheta = std::sqrt (sinT2); - G4double phi = twopi * G4UniformRand() ; + G4double sinTheta = std::sqrt(sinT2); + G4double phi = twopi * G4UniformRand(); G4double dirx = sinTheta * std::cos(phi); G4double diry = sinTheta * std::sin(phi); - G4double dirz = cosTheta ; + G4double dirz = cosTheta; // Doppler broadening - Method based on: - // Y. Namito, S. Ban and H. Hirayama, - // "Implementation of the Doppler Broadening of a Compton-Scattered Photon + // Y. Namito, S. Ban and H. Hirayama, + // "Implementation of the Doppler Broadening of a Compton-Scattered Photon // into the EGS4 Code", NIM A 349, pp. 489-494, 1994 - + // Maximum number of sampling iterations static G4int maxDopplerIterations = 1000; G4double bindingE = 0.; @@ -380,71 +382,70 @@ void G4LivermoreComptonModel::SampleSecondaries( G4cout << "Started loop to sample broading" << G4endl; } - do - { - ++iteration; - // Select shell based on shell occupancy - shellIdx = shellData->SelectRandomShell(Z); - bindingE = shellData->BindingEnergy(Z,shellIdx); + do { + ++iteration; + // Select shell based on shell occupancy + shellIdx = shellData->SelectRandomShell(Z); + bindingE = shellData->BindingEnergy(Z, shellIdx); + + if (verboseLevel > 3) { + G4cout << "Shell ID= " << shellIdx << " Ebind(keV)= " << bindingE / keV << G4endl; + } + + eMax = photonEnergy0 - bindingE; - if (verboseLevel > 3) { - G4cout << "Shell ID= " << shellIdx - << " Ebind(keV)= " << bindingE/keV << G4endl; + // Randomly sample bound electron momentum + // (memento: the data set is in Atomic Units) + G4double pSample = profileData->RandomSelectMomentum(Z, shellIdx); + if (verboseLevel > 3) { + G4cout << "pSample= " << pSample << G4endl; + } + // Rescale from atomic units + G4double pDoppler = pSample * fine_structure_const; + G4double pDoppler2 = pDoppler * pDoppler; + G4double var2 = 1. + oneCosT * e0m; + G4double var3 = var2 * var2 - pDoppler2; + G4double var4 = var2 - pDoppler2 * cosTheta; + G4double var = var4 * var4 - var3 + pDoppler2 * var3; + if (var > 0.) { + G4double varSqrt = std::sqrt(var); + G4double scale = photonEnergy0 / var3; + // Random select either root + if (G4UniformRand() < 0.5) { + photonE = (var4 - varSqrt) * scale; } - - eMax = photonEnergy0 - bindingE; - - // Randomly sample bound electron momentum - // (memento: the data set is in Atomic Units) - G4double pSample = profileData->RandomSelectMomentum(Z,shellIdx); - if (verboseLevel > 3) { - G4cout << "pSample= " << pSample << G4endl; + else { + photonE = (var4 + varSqrt) * scale; } - // Rescale from atomic units - G4double pDoppler = pSample * fine_structure_const; - G4double pDoppler2 = pDoppler * pDoppler; - G4double var2 = 1. + oneCosT * e0m; - G4double var3 = var2*var2 - pDoppler2; - G4double var4 = var2 - pDoppler2 * cosTheta; - G4double var = var4*var4 - var3 + pDoppler2 * var3; - if (var > 0.) - { - G4double varSqrt = std::sqrt(var); - G4double scale = photonEnergy0 / var3; - // Random select either root - if (G4UniformRand() < 0.5) { photonE = (var4 - varSqrt) * scale; } - else { photonE = (var4 + varSqrt) * scale; } - } - else - { - photonE = -1.; - } - } while (iteration <= maxDopplerIterations && photonE > eMax); - + } + else { + photonE = -1.; + } + } while (iteration <= maxDopplerIterations && photonE > eMax); + // End of recalculation of photon energy with Doppler broadening - // Revert to original if maximum number of iterations threshold + // Revert to original if maximum number of iterations threshold // has been reached - if (iteration >= maxDopplerIterations) - { - photonE = photonEoriginal; - bindingE = 0.; - } + if (iteration >= maxDopplerIterations) { + photonE = photonEoriginal; + bindingE = 0.; + } // Update G4VParticleChange for the scattered photon - G4ThreeVector photonDirection1(dirx,diry,dirz); + G4ThreeVector photonDirection1(dirx, diry, dirz); photonDirection1.rotateUz(photonDirection0); - fParticleChange->ProposeMomentumDirection(photonDirection1) ; + fParticleChange->ProposeMomentumDirection(photonDirection1); G4double photonEnergy1 = photonE; if (photonEnergy1 > 0.) { - fParticleChange->SetProposedKineticEnergy(photonEnergy1) ; - - } else { + fParticleChange->SetProposedKineticEnergy(photonEnergy1); + } + else { // photon absorbed photonEnergy1 = 0.; - fParticleChange->SetProposedKineticEnergy(0.) ; - fParticleChange->ProposeTrackStatus(fStopAndKill); + fParticleChange->SetProposedKineticEnergy(0.); + fParticleChange->ProposeTrackStatus(fStopAndKill); fParticleChange->ProposeLocalEnergyDeposit(photonEnergy0); return; } @@ -453,33 +454,29 @@ void G4LivermoreComptonModel::SampleSecondaries( G4double eKineticEnergy = photonEnergy0 - photonEnergy1 - bindingE; // protection against negative final energy: no e- is created - if(eKineticEnergy < 0.0) { + if (eKineticEnergy < 0.0) { fParticleChange->ProposeLocalEnergyDeposit(photonEnergy0 - photonEnergy1); return; } G4double eTotalEnergy = eKineticEnergy + electron_mass_c2; - G4double electronE = photonEnergy0 * (1. - epsilon) + electron_mass_c2; - G4double electronP2 = - electronE*electronE - electron_mass_c2*electron_mass_c2; + G4double electronE = photonEnergy0 * (1. - epsilon) + electron_mass_c2; + G4double electronP2 = electronE * electronE - electron_mass_c2 * electron_mass_c2; G4double sinThetaE = -1.; G4double cosThetaE = 0.; - if (electronP2 > 0.) - { - cosThetaE = (eTotalEnergy + photonEnergy1 )* - (1. - epsilon) / std::sqrt(electronP2); - sinThetaE = -1. * sqrt(1. - cosThetaE * cosThetaE); - } - + if (electronP2 > 0.) { + cosThetaE = (eTotalEnergy + photonEnergy1) * (1. - epsilon) / std::sqrt(electronP2); + sinThetaE = -1. * sqrt(1. - cosThetaE * cosThetaE); + } + G4double eDirX = sinThetaE * std::cos(phi); G4double eDirY = sinThetaE * std::sin(phi); G4double eDirZ = cosThetaE; - G4ThreeVector eDirection(eDirX,eDirY,eDirZ); + G4ThreeVector eDirection(eDirX, eDirY, eDirZ); eDirection.rotateUz(photonDirection0); - G4DynamicParticle* dp = new G4DynamicParticle (G4Electron::Electron(), - eDirection,eKineticEnergy) ; + auto dp = new G4DynamicParticle(G4Electron::Electron(), eDirection, eKineticEnergy); fvect->push_back(dp); // sample deexcitation @@ -487,30 +484,28 @@ void G4LivermoreComptonModel::SampleSecondaries( G4cout << "Started atomic de-excitation " << fAtomDeexcitation << G4endl; } - if(nullptr != fAtomDeexcitation && iteration < maxDopplerIterations) { + if (nullptr != fAtomDeexcitation && iteration < maxDopplerIterations) { G4int index = couple->GetIndex(); - if(fAtomDeexcitation->CheckDeexcitationActiveRegion(index)) { + if (fAtomDeexcitation->CheckDeexcitationActiveRegion(index)) { size_t nbefore = fvect->size(); - G4AtomicShellEnumerator as = G4AtomicShellEnumerator(shellIdx); + auto as = G4AtomicShellEnumerator(shellIdx); const G4AtomicShell* shell = fAtomDeexcitation->GetAtomicShell(Z, as); fAtomDeexcitation->GenerateParticles(fvect, shell, Z, index); size_t nafter = fvect->size(); - if(nafter > nbefore) { - for (size_t i=nbefore; i= ((*fvect)[i])->GetKineticEnergy()) - { - //Ok, this is a valid secondary: keep it - bindingE -= ((*fvect)[i])->GetKineticEnergy(); - } - else - { - //Invalid secondary: not enough energy to create it! - //Keep its energy in the local deposit - delete (*fvect)[i]; - (*fvect)[i]=0; - } - } + if (nafter > nbefore) { + for (size_t i = nbefore; i < nafter; ++i) { + // Check if there is enough residual energy + if (bindingE >= ((*fvect)[i])->GetKineticEnergy()) { + // Ok, this is a valid secondary: keep it + bindingE -= ((*fvect)[i])->GetKineticEnergy(); + } + else { + // Invalid secondary: not enough energy to create it! + // Keep its energy in the local deposit + delete (*fvect)[i]; + (*fvect)[i] = nullptr; + } + } } } } @@ -520,33 +515,30 @@ void G4LivermoreComptonModel::SampleSecondaries( //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double -G4LivermoreComptonModel::ComputeScatteringFunction(G4double x, G4int Z) +G4double G4LivermoreComptonModel::ComputeScatteringFunction(G4double x, G4int Z) { G4double value = Z; - if(x <= ScatFuncFitParam[Z][3]) - { + if (x <= ScatFuncFitParam[Z][3]) { G4double lgq = G4Log(x) / ln10; - if(lgq < ScatFuncFitParam[Z][1]) - { + if (lgq < ScatFuncFitParam[Z][1]) { value = ScatFuncFitParam[Z][4] + lgq * ScatFuncFitParam[Z][5]; } - else if(lgq >= ScatFuncFitParam[Z][1] && lgq < ScatFuncFitParam[Z][2]) - { - value = ScatFuncFitParam[Z][6] + - lgq * (ScatFuncFitParam[Z][7] + - lgq * (ScatFuncFitParam[Z][8] + - lgq * (ScatFuncFitParam[Z][9] + - lgq * ScatFuncFitParam[Z][10]))); + else if (lgq >= ScatFuncFitParam[Z][1] && lgq < ScatFuncFitParam[Z][2]) { + value = ScatFuncFitParam[Z][6] + + lgq + * (ScatFuncFitParam[Z][7] + + lgq + * (ScatFuncFitParam[Z][8] + + lgq * (ScatFuncFitParam[Z][9] + lgq * ScatFuncFitParam[Z][10]))); } - else - { - value = ScatFuncFitParam[Z][11] + - lgq * (ScatFuncFitParam[Z][12] + - lgq * (ScatFuncFitParam[Z][13] + - lgq * (ScatFuncFitParam[Z][14] + - lgq * ScatFuncFitParam[Z][15]))); + else { + value = ScatFuncFitParam[Z][11] + + lgq + * (ScatFuncFitParam[Z][12] + + lgq + * (ScatFuncFitParam[Z][13] + + lgq * (ScatFuncFitParam[Z][14] + lgq * ScatFuncFitParam[Z][15]))); } value = G4Exp(value * ln10); } @@ -556,119 +548,318 @@ G4LivermoreComptonModel::ComputeScatteringFunction(G4double x, G4int Z) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void -G4LivermoreComptonModel::InitialiseForElement(const G4ParticleDefinition*, - G4int Z) +void G4LivermoreComptonModel::InitialiseForElement(const G4ParticleDefinition*, G4int Z) { G4AutoLock l(&LivermoreComptonModelMutex); - if(data[Z] == nullptr) { ReadData(Z); } + if (data[Z] == nullptr) { + ReadData(Z); + } l.unlock(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -//Fitting data to compute scattering function based on EPICS2017 +// Fitting data to compute scattering function based on EPICS2017 const G4double G4LivermoreComptonModel::ScatFuncFitParam[101][16] = { - {0, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}, - {1, 6.000000000e+00, 7.087999300e+00, 1.499680000e+08, -1.435559123e+01, 2.000000043e+00, -3.925518125e+02, 2.434944521e+02, -5.784393623e+01, 6.160181204e+00, -2.461326602e-01, -1.649463594e+03, 8.121933215e+02, -1.498313316e+02, 1.227279742e+01, -3.765996345e-01}, - {2, 6.000000000e+00, 7.199000403e+00, 2.500350000e+08, -1.430103027e+01, 2.000000041e+00, 3.574019365e+02, -1.978574937e+02, 3.971327838e+01, -3.443224867e+00, 1.091825227e-01, -4.009960832e+02, 1.575831469e+02, -2.174763446e+01, 1.185163045e+00, -1.814503741e-02}, - {3, 6.000000000e+00, 7.301000136e+00, 3.999450000e+08, -1.357675458e+01, 2.000000074e+00, 7.051635443e+02, -4.223841786e+02, 9.318729225e+01, -9.002642767e+00, 3.220625771e-01, 1.524679907e+03, -7.851479582e+02, 1.509941052e+02, -1.285477984e+01, 4.089348830e-01}, - {4, 6.000000000e+00, 7.349500202e+00, 5.000350000e+08, -1.375202671e+01, 1.999999994e+00, -1.832909604e+02, 1.193997722e+02, -3.034328318e+01, 3.471545044e+00, -1.484222463e-01, 1.397476657e+03, -7.026416933e+02, 1.320720559e+02, -1.099824430e+01, 3.424610532e-01}, - {5, 6.000000000e+00, 7.388999972e+00, 5.997910000e+08, -1.380548571e+01, 2.000000004e+00, -2.334197545e+02, 1.467013466e+02, -3.574851109e+01, 3.925047955e+00, -1.616186492e-01, 6.784713308e+02, -3.419562074e+02, 6.433945831e+01, -5.354244209e+00, 1.663784966e-01}, - {6, 6.000000000e+00, 7.422500001e+00, 6.998420000e+08, -1.388639003e+01, 1.999999863e+00, -2.460254935e+02, 1.516613633e+02, -3.622024219e+01, 3.900099543e+00, -1.576557530e-01, -1.610185428e+02, 7.010907070e+01, -1.142375397e+01, 8.303365180e-01, -2.273786010e-02}, - {7, 6.000000000e+00, 7.451499931e+00, 7.998340000e+08, -1.388605429e+01, 1.999999612e+00, -3.054540719e+02, 1.877740247e+02, -4.440273010e+01, 4.718886370e+00, -1.881615004e-01, -2.263864349e+02, 1.017885461e+02, -1.716982752e+01, 1.292954622e+00, -3.668301946e-02}, - {8, 6.000000000e+00, 7.451499931e+00, 7.998340000e+08, -1.395860675e+01, 1.999999906e+00, -3.877174895e+02, 2.345831969e+02, -5.431822300e+01, 5.643262324e+00, -2.200840540e-01, -7.949384302e+02, 3.757293602e+02, -6.661741851e+01, 5.256265086e+00, -1.556986777e-01}, - {9, 6.000000000e+00, 7.451499931e+00, 7.998340000e+08, -1.400000063e+01, 2.000000106e+00, -2.939854827e+02, 1.784214589e+02, -4.168473845e+01, 4.377669850e+00, -1.724300716e-01, -1.169326170e+03, 5.545642014e+02, -9.863024948e+01, 7.801721240e+00, -2.315522357e-01}, - {10, 6.000000000e+00, 7.451499931e+00, 7.998340000e+08, -1.404575854e+01, 2.000000178e+00, -2.615701853e+02, 1.582596311e+02, -3.698114811e+01, 3.889093901e+00, -1.533613504e-01, -1.275287356e+03, 6.022076554e+02, -1.066410301e+02, 8.398773148e+00, -2.481899800e-01}, - {11, 6.000000000e+00, 7.500000000e+00, 1.000000000e+09, -1.344369665e+01, 1.999999860e+00, 1.112662501e+03, -6.807056448e+02, 1.545837472e+02, -1.548462180e+01, 5.785425068e-01, -1.007702307e+03, 4.699937040e+02, -8.220352105e+01, 6.396099420e+00, -1.867816054e-01}, - {12, 6.000000000e+00, 7.500000000e+00, 1.000000000e+09, -1.339794047e+01, 2.000000080e+00, 9.895649717e+02, -5.983228286e+02, 1.340681576e+02, -1.323046651e+01, 4.863434994e-01, -5.790532602e+02, 2.626052403e+02, -4.463548055e+01, 3.376239891e+00, -9.588786915e-02}, - {13, 6.000000000e+00, 7.587999300e+00, 1.499680000e+09, -1.340893585e+01, 2.000000078e+00, 7.335256091e+02, -4.405291562e+02, 9.770954287e+01, -9.519317788e+00, 3.448067237e-01, -5.328832253e+02, 2.398514938e+02, -4.044557740e+01, 3.034597500e+00, -8.547410419e-02}, - {14, 6.000000000e+00, 7.587999300e+00, 1.499680000e+09, -1.345593195e+01, 2.000000000e+00, 3.978691889e+02, -2.370975001e+02, 5.158692183e+01, -4.884868277e+00, 1.707270518e-01, -2.340256277e+02, 9.813362251e+01, -1.527892110e+01, 1.051070768e+00, -2.692716945e-02}, - {15, 6.000000000e+00, 7.587999300e+00, 1.499680000e+09, -1.349485049e+01, 2.000000083e+00, 2.569833671e+02, -1.513623448e+02, 3.210087153e+01, -2.925756803e+00, 9.724379436e-02, -1.345727293e+01, -6.291081167e+00, 3.235960888e+00, -4.059236666e-01, 1.601245178e-02}, - {16, 6.000000000e+00, 7.587999300e+00, 1.499680000e+09, -1.353760159e+01, 1.999999937e+00, 1.015293074e+02, -5.721639224e+01, 1.078607152e+01, -7.890593144e-01, 1.726056327e-02, 1.854818165e+02, -1.000803879e+02, 1.979815884e+01, -1.704221744e+00, 5.413372375e-02}, - {17, 6.000000000e+00, 7.587999300e+00, 1.499680000e+09, -1.358502705e+01, 2.000000066e+00, -4.294163461e+01, 2.862162412e+01, -8.285972104e+00, 1.087745268e+00, -5.172153610e-02, 1.676674074e+02, -8.976414784e+01, 1.763329621e+01, -1.507161653e+00, 4.753277254e-02}, - {18, 6.000000000e+00, 7.587999300e+00, 1.499680000e+09, -1.361978902e+01, 2.000000042e+00, -3.573422746e+01, 2.403066369e+01, -7.173617800e+00, 9.657608431e-01, -4.662317662e-02, 1.811925229e+02, -9.574636323e+01, 1.861940167e+01, -1.578810247e+00, 4.946799877e-02}, - {19, 6.000000000e+00, 7.650499797e+00, 1.999860000e+09, -1.320760816e+01, 1.999999979e+00, 1.263152069e+02, -8.738932892e+01, 2.109042182e+01, -2.166733566e+00, 8.146018979e-02, 9.183312428e+01, -5.232836676e+01, 1.072450810e+01, -9.419512971e-01, 3.023884410e-02}, - {20, 6.000000000e+00, 7.650499797e+00, 1.999860000e+09, -1.314266674e+01, 1.999999876e+00, 6.620218058e+02, -4.057504297e+02, 9.180787767e+01, -9.124184449e+00, 3.372518137e-01, 7.034138711e+01, -4.198325416e+01, 8.861351614e+00, -7.930506530e-01, 2.578454342e-02}, - {21, 6.000000000e+00, 7.650499797e+00, 1.999860000e+09, -1.317392498e+01, 1.999999966e+00, 6.766093786e+02, -4.129087029e+02, 9.305090790e+01, -9.212128925e+00, 3.392408033e-01, 1.916559096e+01, -1.807294109e+01, 4.677205921e+00, -4.679350245e-01, 1.632115420e-02}, - {22, 6.000000000e+00, 7.650499797e+00, 1.999860000e+09, -1.320065945e+01, 1.999999999e+00, 6.969823082e+02, -4.236620289e+02, 9.513714106e+01, -9.388294642e+00, 3.446942719e-01, -6.501317146e+01, 2.138553133e+01, -2.250998891e+00, 7.219326079e-02, 5.467529893e-04}, - {23, 6.000000000e+00, 7.650499797e+00, 1.999860000e+09, -1.322914744e+01, 1.999999909e+00, 6.889749928e+02, -4.181421624e+02, 9.373529727e+01, -9.233142268e+00, 3.383772151e-01, -1.382770534e+02, 5.540647456e+01, -8.170017489e+00, 5.295569200e-01, -1.269556386e-02}, - {24, 6.000000000e+00, 7.650499797e+00, 1.999860000e+09, -1.333724128e+01, 1.999999854e+00, 4.365566411e+02, -2.672774427e+02, 6.001631369e+01, -5.895458454e+00, 2.149710735e-01, -2.393534124e+02, 1.020845165e+02, -1.624744211e+01, 1.150387566e+00, -3.057723021e-02}, - {25, 6.000000000e+00, 7.650499797e+00, 1.999860000e+09, -1.328399669e+01, 2.000000008e+00, 6.461381990e+02, -3.918546518e+02, 8.769548644e+01, -8.618784385e+00, 3.150660827e-01, -2.597409979e+02, 1.113332866e+02, -1.782124571e+01, 1.269519197e+00, -3.396126698e-02}, - {26, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.330103000e+01, 1.999999998e+00, 4.261007401e+02, -2.588846763e+02, 5.764613910e+01, -5.609660122e+00, 2.024165636e-01, -1.982896712e+02, 8.274273985e+01, -1.284074215e+01, 8.845687432e-01, -2.282143299e-02}, - {27, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.332790165e+01, 1.999999922e+00, 4.006816638e+02, -2.439311564e+02, 5.435031497e+01, -5.287693457e+00, 1.906696163e-01, -2.205075564e+02, 9.262919772e+01, -1.448909443e+01, 1.006686819e+00, -2.621294059e-02}, - {28, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.334678710e+01, 1.999999939e+00, 3.967750019e+02, -2.411866801e+02, 5.364872608e+01, -5.210295834e+00, 1.875525119e-01, -2.516823030e+02, 1.065117131e+02, -1.680533335e+01, 1.178363534e+00, -3.098194406e-02}, - {29, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.344369664e+01, 1.999999853e+00, 2.437671888e+02, -1.499592208e+02, 3.332221026e+01, -3.206587185e+00, 1.138639692e-01, -2.874130637e+02, 1.223381969e+02, -1.943178054e+01, 1.371979484e+00, -3.633119448e-02}, - {30, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.338721562e+01, 1.999999911e+00, 3.914867984e+02, -2.378147085e+02, 5.284517777e+01, -5.126420186e+00, 1.843322562e-01, -3.235063319e+02, 1.384252948e+02, -2.211844479e+01, 1.571300198e+00, -4.187323186e-02}, - {31, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.335654643e+01, 1.999999847e+00, 4.325820127e+02, -2.614587597e+02, 5.793273998e+01, -5.611190206e+00, 2.015836827e-01, -3.359152840e+02, 1.437507638e+02, -2.297457475e+01, 1.632470701e+00, -4.351215346e-02}, - {32, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.337675047e+01, 1.999999960e+00, 4.388195965e+02, -2.642662297e+02, 5.834159168e+01, -5.629419790e+00, 2.014339673e-01, -3.430730654e+02, 1.467102631e+02, -2.343160019e+01, 1.663765504e+00, -4.431369286e-02}, - {33, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.339794046e+01, 2.000000074e+00, 3.931399547e+02, -2.363700718e+02, 5.197696913e+01, -4.987097655e+00, 1.772567576e-01, -3.501570134e+02, 1.497141578e+02, -2.390888062e+01, 1.697503580e+00, -4.520887478e-02}, - {34, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.342021680e+01, 2.000000064e+00, 3.772588127e+02, -2.256347960e+02, 4.929790851e+01, -4.694628847e+00, 1.654667382e-01, -3.481053019e+02, 1.486490112e+02, -2.370745096e+01, 1.680991482e+00, -4.471064364e-02}, - {35, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.344369666e+01, 1.999999864e+00, 3.344685842e+02, -1.994816236e+02, 4.332267376e+01, -4.090542180e+00, 1.426839031e-01, -3.227660675e+02, 1.370301996e+02, -2.171543883e+01, 1.529681552e+00, -4.041331983e-02}, - {36, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.345593194e+01, 1.999999999e+00, 3.004054446e+02, -1.781334135e+02, 3.834850324e+01, -3.580074471e+00, 1.232168921e-01, -2.980827664e+02, 1.257508661e+02, -1.978792154e+01, 1.383723149e+00, -3.628014907e-02}, - {37, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.310790583e+01, 2.000000075e+00, -3.687188343e+01, 1.054409719e+01, -8.516586814e-01, 9.339751003e-03, 8.809383936e-04, -2.699384784e+02, 1.129635316e+02, -1.761447452e+01, 1.219971043e+00, -3.166503704e-02}, - {38, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.304095795e+01, 1.999999892e+00, 1.969969064e+02, -1.286503864e+02, 3.008431767e+01, -3.031946980e+00, 1.124456346e-01, -2.331258613e+02, 9.627987243e+01, -1.478515961e+01, 1.007215642e+00, -2.567873120e-02}, - {39, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.306048023e+01, 1.999999916e+00, 2.891710763e+02, -1.819536752e+02, 4.158265841e+01, -4.128940218e+00, 1.515168697e-01, -1.997404800e+02, 8.119476676e+01, -1.223426670e+01, 8.159269666e-01, -2.031079820e-02}, - {40, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.308092198e+01, 2.000000013e+00, 3.393782172e+02, -2.103908454e+02, 4.758278737e+01, -4.688308235e+00, 1.709723418e-01, -1.549247582e+02, 6.091403935e+01, -8.799307373e+00, 5.578963961e-01, -1.305663921e-02}, - {41, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.316749062e+01, 1.999999920e+00, 2.748604341e+02, -1.706429616e+02, 3.843757441e+01, -3.759045290e+00, 1.358263430e-01, -1.163607425e+02, 4.350905533e+01, -5.859305970e+00, 3.376426246e-01, -6.881281652e-03}, - {42, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.318708720e+01, 2.000000093e+00, 3.203285955e+02, -1.966282865e+02, 4.398204769e+01, -4.283031482e+00, 1.543480828e-01, -9.364181222e+01, 3.329814493e+01, -4.141689265e+00, 2.095170962e-01, -3.304665813e-03}, - {43, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.314266674e+01, 1.999999876e+00, 4.184977165e+02, -2.552902161e+02, 5.707764818e+01, -5.576436872e+00, 2.020184726e-01, -8.395646154e+01, 2.898228589e+01, -3.422356654e+00, 1.564059753e-01, -1.838508896e-03}, - {44, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.322914744e+01, 1.999999909e+00, 3.243555305e+02, -1.978255470e+02, 4.397580841e+01, -4.256142657e+00, 1.524431452e-01, -5.506292375e+01, 1.599310639e+01, -1.237152904e+00, -6.611574411e-03, 2.712232383e-03}, - {45, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.325181249e+01, 2.000000089e+00, 3.037823599e+02, -1.856628295e+02, 4.128167884e+01, -3.991656133e+00, 1.427469878e-01, -5.014186072e+01, 1.386962969e+01, -8.950806420e-01, -3.095321225e-02, 3.357984426e-03}, - {46, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.340893584e+01, 2.000000073e+00, 3.529797051e+02, -2.101512262e+02, 4.563946029e+01, -4.315279704e+00, 1.509248358e-01, -4.815922691e+01, 1.301508788e+01, -7.580854951e-01, -4.059091985e-02, 3.608993811e-03}, - {47, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.328399669e+01, 2.000000008e+00, 3.074953924e+02, -1.872462583e+02, 4.149827252e+01, -4.000811852e+00, 1.426973118e-01, -4.897188379e+01, 1.335300002e+01, -8.110051997e-01, -3.684788190e-02, 3.508156457e-03}, - {48, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.322914743e+01, 1.999999904e+00, 4.059717166e+02, -2.462737702e+02, 5.472040126e+01, -5.311320062e+00, 1.911670149e-01, -5.901534554e+01, 1.791385249e+01, -1.587065943e+00, 2.182673278e-02, 1.845559896e-03}, - {49, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.320760815e+01, 1.999999973e+00, 4.369774251e+02, -2.639721687e+02, 5.849617557e+01, -5.667842049e+00, 2.037342202e-01, -7.399698219e+01, 2.469785523e+01, -2.737881327e+00, 1.085351830e-01, -6.022720695e-04}, - {50, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.322184869e+01, 1.999999993e+00, 4.289361021e+02, -2.585593024e+02, 5.714058683e+01, -5.518600115e+00, 1.976499817e-01, -9.269047286e+01, 3.314422349e+01, -4.167341855e+00, 2.159629039e-01, -3.626802503e-03}, - {51, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.323657166e+01, 1.999999946e+00, 3.866985836e+02, -2.328379698e+02, 5.128884878e+01, -4.929614910e+00, 1.755331333e-01, -1.067869310e+02, 3.950715983e+01, -5.243321447e+00, 2.967791238e-01, -5.901223876e-03}, - {52, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.325181248e+01, 2.000000083e+00, 3.947511198e+02, -2.363799049e+02, 5.179393756e+01, -4.951603918e+00, 1.753404387e-01, -1.069681982e+02, 3.995521754e+01, -5.382071424e+00, 3.120248901e-01, -6.467957474e-03}, - {53, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.326760745e+01, 2.000000205e+00, 3.694394448e+02, -2.204699428e+02, 4.806381052e+01, -4.565474883e+00, 1.604614344e-01, -1.180749905e+02, 4.460080701e+01, -6.105217447e+00, 3.616537171e-01, -7.733059623e-03}, - {54, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.328399667e+01, 2.000000001e+00, 3.423943987e+02, -2.041330669e+02, 4.437639784e+01, -4.197363553e+00, 1.467594367e-01, -1.288973984e+02, 4.985324046e+01, -7.056041375e+00, 4.378018318e-01, -1.000965926e-02}, - {55, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.297881025e+01, 1.999999927e+00, -7.663422017e+01, 3.462700567e+01, -6.273553579e+00, 5.487612834e-01, -1.912897528e-02, -1.318428276e+02, 5.081036112e+01, -7.154907590e+00, 4.405355674e-01, -9.955685075e-03}, - {56, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.290657751e+01, 1.999999869e+00, 1.084179205e+02, -7.602229206e+01, 1.843754298e+01, -1.892451591e+00, 7.085434176e-02, -1.346311376e+02, 5.207427468e+01, -7.369834199e+00, 4.568138610e-01, -1.041859875e-02}, - {57, 6.000000000e+00, 7.725500002e+00, 2.824880000e+09, -1.292445241e+01, 1.999999898e+00, 2.995898890e+02, -1.889477671e+02, 4.336642429e+01, -4.330424108e+00, 1.599942758e-01, 5.503972208e+00, -1.227641064e+01, 3.699182312e+00, -3.884476060e-01, 1.375966896e-02}, - {58, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.293554133e+01, 1.999999890e+00, 1.709135500e+02, -1.120124681e+02, 2.615893820e+01, -2.624416758e+00, 9.674223967e-02, -1.375860132e+02, 5.337811974e+01, -7.586786386e+00, 4.730023198e-01, -1.087482303e-02}, - {59, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.293554133e+01, 1.999999890e+00, 1.214691988e+02, -8.336119630e+01, 1.996468944e+01, -2.032283439e+00, 7.562254632e-02, -1.631005912e+02, 6.472051894e+01, -9.476098737e+00, 6.127875286e-01, -1.475060958e-02}, - {60, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.294309494e+01, 1.999999967e+00, 1.302719596e+02, -8.835087414e+01, 2.101971144e+01, -2.131084478e+00, 7.908549730e-02, -1.692901279e+02, 6.742727614e+01, -9.920661139e+00, 6.453186854e-01, -1.564524492e-02}, - {61, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.295078139e+01, 1.999999905e+00, 1.127680235e+02, -7.782238836e+01, 1.865126163e+01, -1.895116816e+00, 7.030502833e-02, -2.059821608e+02, 8.384774285e+01, -1.267344799e+01, 8.502354115e-01, -2.135994609e-02}, - {62, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.295860692e+01, 1.999999936e+00, 1.203145109e+02, -8.212556537e+01, 1.956606386e+01, -1.981212240e+00, 7.333626288e-02, -2.158058793e+02, 8.810144391e+01, -1.336380022e+01, 9.000362964e-01, -2.270715579e-02}, - {63, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.296657573e+01, 1.999999918e+00, 1.212159597e+02, -8.256559477e+01, 1.964122173e+01, -1.986442056e+00, 7.345564343e-02, -2.278531434e+02, 9.336519465e+01, -1.422588608e+01, 9.627883381e-01, -2.441986614e-02}, - {64, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.298296617e+01, 1.999999921e+00, 1.689382403e+02, -1.099987696e+02, 2.551961464e+01, -2.543234152e+00, 9.313568005e-02, -2.282716670e+02, 9.348611199e+01, -1.423588448e+01, 9.628551072e-01, -2.440492772e-02}, - {65, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.299139910e+01, 1.999999880e+00, 1.724155378e+02, -1.120798437e+02, 2.598264738e+01, -2.588807295e+00, 9.481417896e-02, -2.322687147e+02, 9.517466656e+01, -1.450332749e+01, 9.817069914e-01, -2.490386807e-02}, - {66, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.298716240e+01, 1.999999941e+00, 1.286079419e+02, -8.646296410e+01, 2.039801258e+01, -2.050839207e+00, 7.549033493e-02, -2.420048480e+02, 9.935663043e+01, -1.517653800e+01, 1.029875015e+00, -2.619626869e-02}, - {67, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.299567846e+01, 1.999999971e+00, 1.182799697e+02, -8.043389241e+01, 1.908027783e+01, -1.923209794e+00, 7.087268462e-02, -2.464462609e+02, 1.012059056e+02, -1.546468270e+01, 1.049814070e+00, -2.671320158e-02}, - {68, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.300436459e+01, 1.999999966e+00, 1.150510247e+02, -7.859576077e+01, 1.868688175e+01, -1.885844183e+00, 6.954765052e-02, -2.457555063e+02, 1.007538481e+02, -1.536692833e+01, 1.041070997e+00, -2.643279207e-02}, - {69, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.300877391e+01, 2.000000000e+00, 1.266280406e+02, -8.514491730e+01, 2.007089332e+01, -2.015475088e+00, 7.409191965e-02, -2.492442707e+02, 1.021615320e+02, -1.557878384e+01, 1.055183253e+00, -2.678362279e-02}, - {70, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.301772826e+01, 1.999999912e+00, 1.224253568e+02, -8.281395858e+01, 1.958609738e+01, -1.970785167e+00, 7.255458061e-02, -2.488808342e+02, 1.018569466e+02, -1.550601866e+01, 1.048325396e+00, -2.655661748e-02}, - {71, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.303151733e+01, 2.000000051e+00, 1.862181262e+02, -1.199038630e+02, 2.763107534e+01, -2.742586837e+00, 1.001956495e-01, -2.403102476e+02, 9.796272016e+01, -1.484525920e+01, 9.987147871e-01, -2.516533876e-02}, - {72, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.304575796e+01, 2.000000081e+00, 2.297759959e+02, -1.448485621e+02, 3.295877082e+01, -3.245850428e+00, 1.179456377e-01, -2.282155654e+02, 9.249921555e+01, -1.392266984e+01, 9.297052139e-01, -2.323558576e-02}, - {73, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.306048022e+01, 1.999999910e+00, 2.646909006e+02, -1.647716545e+02, 3.719903613e+01, -3.645113853e+00, 1.319890617e-01, -2.165150972e+02, 8.722660467e+01, -1.303415548e+01, 8.633600348e-01, -2.138300143e-02}, - {74, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.308092196e+01, 2.000000008e+00, 2.251239174e+02, -1.414731209e+02, 3.206048507e+01, -3.142433101e+00, 1.135971917e-01, -2.070173544e+02, 8.296725365e+01, -1.231986936e+01, 8.102887128e-01, -1.990853407e-02}, - {75, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.309151488e+01, 1.999999984e+00, 2.627532736e+02, -1.629008146e+02, 3.661592385e+01, -3.571257833e+00, 1.286871297e-01, -1.945762063e+02, 7.740995255e+01, -1.139129234e+01, 7.415172466e-01, -1.800335280e-02}, - {76, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.310790581e+01, 2.000000068e+00, 2.644549626e+02, -1.637369900e+02, 3.675734857e+01, -3.580665992e+00, 1.288721975e-01, -1.725967865e+02, 6.755389456e+01, -9.737633351e+00, 6.184954292e-01, -1.457897448e-02}, - {77, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.311918599e+01, 1.999999933e+00, 2.677629012e+02, -1.650589135e+02, 3.690999414e+01, -3.582378706e+00, 1.284763849e-01, -1.584140848e+02, 6.122430396e+01, -8.680876005e+00, 5.402879020e-01, -1.241386995e-02}, - {78, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.319382006e+01, 2.000000009e+00, 2.420702029e+02, -1.484461630e+02, 3.292288306e+01, -3.162757529e+00, 1.121487556e-01, -1.319886050e+02, 4.940494114e+01, -6.702740089e+00, 3.934770465e-01, -8.336673895e-03}, - {79, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.320760814e+01, 1.999999969e+00, 2.346714957e+02, -1.439356552e+02, 3.189416251e+01, -3.059071523e+00, 1.082595858e-01, -1.130109430e+02, 4.093029258e+01, -5.286747014e+00, 2.885753389e-01, -5.428939868e-03}, - {80, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.316115147e+01, 2.000000093e+00, 2.747370538e+02, -1.689673404e+02, 3.771696324e+01, -3.655841153e+00, 1.309852214e-01, -9.001823908e+01, 3.066094857e+01, -3.570459523e+00, 1.613797666e-01, -1.901561361e-03}, - {81, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.313667715e+01, 2.000000002e+00, 3.142563781e+02, -1.916613838e+02, 4.259167223e+01, -4.119713271e+00, 1.474792530e-01, -7.642731867e+01, 2.462410146e+01, -2.566977318e+00, 8.741068396e-02, 1.388590928e-04}, - {82, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.314266674e+01, 1.999999876e+00, 3.509258060e+02, -2.125470710e+02, 4.702461797e+01, -4.535380912e+00, 1.620138781e-01, -5.173355302e+01, 1.362015056e+01, -7.321282362e-01, -4.826261322e-02, 3.892879264e-03}, - {83, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.315490164e+01, 1.999999944e+00, 3.399729483e+02, -2.056319770e+02, 4.539614689e+01, -4.366195994e+00, 1.554792165e-01, -4.131443229e+01, 8.986236911e+00, 3.924628986e-02, -1.052060828e-01, 5.466043586e-03}, - {84, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.316749062e+01, 1.999999920e+00, 3.640602841e+02, -2.190164327e+02, 4.815603439e+01, -4.616573783e+00, 1.639147626e-01, -3.256862965e+01, 5.115606198e+00, 6.800853161e-01, -1.522315744e-01, 6.756786448e-03}, - {85, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.318045630e+01, 2.000000044e+00, 3.766488275e+02, -2.257321142e+02, 4.947300991e+01, -4.728919006e+00, 1.674240471e-01, -2.300947210e+01, 8.615223509e-01, 1.388425307e+00, -2.045157608e-01, 8.200511055e-03}, - {86, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.319382005e+01, 2.000000006e+00, 3.443622947e+02, -2.064342780e+02, 4.516044966e+01, -4.302253084e+00, 1.516667044e-01, -5.399039282e+00, -7.002814559e+00, 2.702516748e+00, -3.018766003e-01, 1.089953798e-02}, - {87, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.291364147e+01, 2.000000217e+00, -3.706791591e+01, 1.118013187e+01, -1.057728859e+00, 3.312859839e-02, -3.138341244e-06, -3.451314336e+00, -7.779254134e+00, 2.816269849e+00, -3.090776388e-01, 1.106424389e-02}, - {88, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.284163724e+01, 1.999999954e+00, 6.125934670e+01, -4.855548659e+01, 1.248551381e+01, -1.323304763e+00, 5.060744172e-02, -6.021643455e+00, -6.580234329e+00, 2.607440108e+00, -2.929625239e-01, 1.059951856e-02}, - {89, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.285387248e+01, 2.000000090e+00, 1.350863292e+02, -9.126618691e+01, 2.169932948e+01, -2.201947573e+00, 8.186860720e-02, 1.937135880e+01, -1.787129621e+01, 4.485878662e+00, -4.315325969e-01, 1.442445798e-02}, - {90, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.286966604e+01, 1.999999970e+00, 1.784388998e+02, -1.161623817e+02, 2.702376618e+01, -2.704797298e+00, 9.957279361e-02, 2.216057166e+01, -1.904990091e+01, 4.671627339e+00, -4.444534802e-01, 1.475921763e-02}, - {91, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.287289489e+01, 1.999999951e+00, 1.368355213e+02, -9.179790820e+01, 2.169910915e+01, -2.190249857e+00, 8.102241740e-02, 4.516580666e+00, -1.118102949e+01, 3.357662550e+00, -3.470694353e-01, 1.205639951e-02}, - {92, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.287942629e+01, 2.000000032e+00, 1.427130850e+02, -9.499714618e+01, 2.234475916e+01, -2.247599931e+00, 8.291713193e-02, 1.341991149e+01, -1.518503354e+01, 4.030838171e+00, -3.972060658e-01, 1.345248084e-02}, - {93, 6.000000000e+00, 8.000000000e+00, 1.000000000e+10, -1.288605524e+01, 1.999999761e+00, 2.341801100e+01, -2.506119713e+01, 7.023029272e+00, -7.610742531e-01, 2.903245750e-02, -3.575331738e+01, 7.276302226e+00, 1.906771859e-01, -1.059475755e-01, 5.184029625e-03}, - {94, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.288272835e+01, 1.999999941e+00, 1.287618322e+02, -8.721780968e+01, 2.073255323e+01, -2.100572716e+00, 7.794295578e-02, -2.307262580e+01, 1.113132278e+00, 1.305250601e+00, -1.948949139e-01, 7.829116438e-03}, - {95, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.288940956e+01, 1.999999880e+00, 1.334821220e+02, -8.985337775e+01, 2.127928526e+01, -2.150628571e+00, 7.965294640e-02, -3.518662723e+01, 6.514543434e+00, 4.030862442e-01, -1.279850170e-01, 5.970168353e-03}, - {96, 6.000000000e+00, 8.000000000e+00, 1.000000000e+10, -1.290553004e+01, 2.000000198e+00, 4.545581472e+01, -3.771304300e+01, 9.729129321e+00, -1.017037014e+00, 3.807733199e-02, -4.973805034e+01, 1.342335334e+01, -8.221139917e-01, -3.176841835e-02, 3.146810827e-03}, - {97, 6.000000000e+00, 8.000000000e+00, 1.000000000e+10, -1.291150963e+01, 2.000000019e+00, 4.689042092e+01, -3.843347264e+01, 9.859294531e+00, -1.027014690e+00, 3.834833665e-02, -4.657434145e+01, 1.204637835e+01, -5.982449163e-01, -4.786919243e-02, 3.579251285e-03}, - {98, 6.000000000e+00, 8.000000000e+00, 1.000000000e+10, -1.290833198e+01, 1.999999824e+00, 1.337584189e+01, -1.907284620e+01, 5.691614909e+00, -6.307838734e-01, 2.430868142e-02, -5.573362773e+01, 1.615667599e+01, -1.288960621e+00, 3.655033732e-03, 2.140047522e-03}, - {99, 6.000000000e+00, 8.000000000e+00, 1.000000000e+10, -1.291435263e+01, 1.999999988e+00, 1.376201293e+01, -1.919251815e+01, 5.693799461e+00, -6.287500644e-01, 2.416045199e-02, -4.914211254e+01, 1.314247998e+01, -7.739336035e-01, -3.530513333e-02, 3.241293077e-03}, - {100, 6.000000000e+00, 8.000000000e+00, 1.000000000e+10, -1.292045700e+01, 2.000000004e+00, 1.277081775e+01, -1.854047224e+01, 5.534680382e+00, -6.118054153e-01, 2.349768815e-02, -5.074293980e+01, 1.383260974e+01, -8.858904786e-01, -2.718885953e-02, 3.019620454e-03} -}; + {0, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.}, + {1, 6.000000000e+00, 7.087999300e+00, 1.499680000e+08, -1.435559123e+01, 2.000000043e+00, + -3.925518125e+02, 2.434944521e+02, -5.784393623e+01, 6.160181204e+00, -2.461326602e-01, + -1.649463594e+03, 8.121933215e+02, -1.498313316e+02, 1.227279742e+01, -3.765996345e-01}, + {2, 6.000000000e+00, 7.199000403e+00, 2.500350000e+08, -1.430103027e+01, 2.000000041e+00, + 3.574019365e+02, -1.978574937e+02, 3.971327838e+01, -3.443224867e+00, 1.091825227e-01, + -4.009960832e+02, 1.575831469e+02, -2.174763446e+01, 1.185163045e+00, -1.814503741e-02}, + {3, 6.000000000e+00, 7.301000136e+00, 3.999450000e+08, -1.357675458e+01, 2.000000074e+00, + 7.051635443e+02, -4.223841786e+02, 9.318729225e+01, -9.002642767e+00, 3.220625771e-01, + 1.524679907e+03, -7.851479582e+02, 1.509941052e+02, -1.285477984e+01, 4.089348830e-01}, + {4, 6.000000000e+00, 7.349500202e+00, 5.000350000e+08, -1.375202671e+01, 1.999999994e+00, + -1.832909604e+02, 1.193997722e+02, -3.034328318e+01, 3.471545044e+00, -1.484222463e-01, + 1.397476657e+03, -7.026416933e+02, 1.320720559e+02, -1.099824430e+01, 3.424610532e-01}, + {5, 6.000000000e+00, 7.388999972e+00, 5.997910000e+08, -1.380548571e+01, 2.000000004e+00, + -2.334197545e+02, 1.467013466e+02, -3.574851109e+01, 3.925047955e+00, -1.616186492e-01, + 6.784713308e+02, -3.419562074e+02, 6.433945831e+01, -5.354244209e+00, 1.663784966e-01}, + {6, 6.000000000e+00, 7.422500001e+00, 6.998420000e+08, -1.388639003e+01, 1.999999863e+00, + -2.460254935e+02, 1.516613633e+02, -3.622024219e+01, 3.900099543e+00, -1.576557530e-01, + -1.610185428e+02, 7.010907070e+01, -1.142375397e+01, 8.303365180e-01, -2.273786010e-02}, + {7, 6.000000000e+00, 7.451499931e+00, 7.998340000e+08, -1.388605429e+01, 1.999999612e+00, + -3.054540719e+02, 1.877740247e+02, -4.440273010e+01, 4.718886370e+00, -1.881615004e-01, + -2.263864349e+02, 1.017885461e+02, -1.716982752e+01, 1.292954622e+00, -3.668301946e-02}, + {8, 6.000000000e+00, 7.451499931e+00, 7.998340000e+08, -1.395860675e+01, 1.999999906e+00, + -3.877174895e+02, 2.345831969e+02, -5.431822300e+01, 5.643262324e+00, -2.200840540e-01, + -7.949384302e+02, 3.757293602e+02, -6.661741851e+01, 5.256265086e+00, -1.556986777e-01}, + {9, 6.000000000e+00, 7.451499931e+00, 7.998340000e+08, -1.400000063e+01, 2.000000106e+00, + -2.939854827e+02, 1.784214589e+02, -4.168473845e+01, 4.377669850e+00, -1.724300716e-01, + -1.169326170e+03, 5.545642014e+02, -9.863024948e+01, 7.801721240e+00, -2.315522357e-01}, + {10, 6.000000000e+00, 7.451499931e+00, 7.998340000e+08, -1.404575854e+01, 2.000000178e+00, + -2.615701853e+02, 1.582596311e+02, -3.698114811e+01, 3.889093901e+00, -1.533613504e-01, + -1.275287356e+03, 6.022076554e+02, -1.066410301e+02, 8.398773148e+00, -2.481899800e-01}, + {11, 6.000000000e+00, 7.500000000e+00, 1.000000000e+09, -1.344369665e+01, 1.999999860e+00, + 1.112662501e+03, -6.807056448e+02, 1.545837472e+02, -1.548462180e+01, 5.785425068e-01, + -1.007702307e+03, 4.699937040e+02, -8.220352105e+01, 6.396099420e+00, -1.867816054e-01}, + {12, 6.000000000e+00, 7.500000000e+00, 1.000000000e+09, -1.339794047e+01, 2.000000080e+00, + 9.895649717e+02, -5.983228286e+02, 1.340681576e+02, -1.323046651e+01, 4.863434994e-01, + -5.790532602e+02, 2.626052403e+02, -4.463548055e+01, 3.376239891e+00, -9.588786915e-02}, + {13, 6.000000000e+00, 7.587999300e+00, 1.499680000e+09, -1.340893585e+01, 2.000000078e+00, + 7.335256091e+02, -4.405291562e+02, 9.770954287e+01, -9.519317788e+00, 3.448067237e-01, + -5.328832253e+02, 2.398514938e+02, -4.044557740e+01, 3.034597500e+00, -8.547410419e-02}, + {14, 6.000000000e+00, 7.587999300e+00, 1.499680000e+09, -1.345593195e+01, 2.000000000e+00, + 3.978691889e+02, -2.370975001e+02, 5.158692183e+01, -4.884868277e+00, 1.707270518e-01, + -2.340256277e+02, 9.813362251e+01, -1.527892110e+01, 1.051070768e+00, -2.692716945e-02}, + {15, 6.000000000e+00, 7.587999300e+00, 1.499680000e+09, -1.349485049e+01, 2.000000083e+00, + 2.569833671e+02, -1.513623448e+02, 3.210087153e+01, -2.925756803e+00, 9.724379436e-02, + -1.345727293e+01, -6.291081167e+00, 3.235960888e+00, -4.059236666e-01, 1.601245178e-02}, + {16, 6.000000000e+00, 7.587999300e+00, 1.499680000e+09, -1.353760159e+01, 1.999999937e+00, + 1.015293074e+02, -5.721639224e+01, 1.078607152e+01, -7.890593144e-01, 1.726056327e-02, + 1.854818165e+02, -1.000803879e+02, 1.979815884e+01, -1.704221744e+00, 5.413372375e-02}, + {17, 6.000000000e+00, 7.587999300e+00, 1.499680000e+09, -1.358502705e+01, 2.000000066e+00, + -4.294163461e+01, 2.862162412e+01, -8.285972104e+00, 1.087745268e+00, -5.172153610e-02, + 1.676674074e+02, -8.976414784e+01, 1.763329621e+01, -1.507161653e+00, 4.753277254e-02}, + {18, 6.000000000e+00, 7.587999300e+00, 1.499680000e+09, -1.361978902e+01, 2.000000042e+00, + -3.573422746e+01, 2.403066369e+01, -7.173617800e+00, 9.657608431e-01, -4.662317662e-02, + 1.811925229e+02, -9.574636323e+01, 1.861940167e+01, -1.578810247e+00, 4.946799877e-02}, + {19, 6.000000000e+00, 7.650499797e+00, 1.999860000e+09, -1.320760816e+01, 1.999999979e+00, + 1.263152069e+02, -8.738932892e+01, 2.109042182e+01, -2.166733566e+00, 8.146018979e-02, + 9.183312428e+01, -5.232836676e+01, 1.072450810e+01, -9.419512971e-01, 3.023884410e-02}, + {20, 6.000000000e+00, 7.650499797e+00, 1.999860000e+09, -1.314266674e+01, 1.999999876e+00, + 6.620218058e+02, -4.057504297e+02, 9.180787767e+01, -9.124184449e+00, 3.372518137e-01, + 7.034138711e+01, -4.198325416e+01, 8.861351614e+00, -7.930506530e-01, 2.578454342e-02}, + {21, 6.000000000e+00, 7.650499797e+00, 1.999860000e+09, -1.317392498e+01, 1.999999966e+00, + 6.766093786e+02, -4.129087029e+02, 9.305090790e+01, -9.212128925e+00, 3.392408033e-01, + 1.916559096e+01, -1.807294109e+01, 4.677205921e+00, -4.679350245e-01, 1.632115420e-02}, + {22, 6.000000000e+00, 7.650499797e+00, 1.999860000e+09, -1.320065945e+01, 1.999999999e+00, + 6.969823082e+02, -4.236620289e+02, 9.513714106e+01, -9.388294642e+00, 3.446942719e-01, + -6.501317146e+01, 2.138553133e+01, -2.250998891e+00, 7.219326079e-02, 5.467529893e-04}, + {23, 6.000000000e+00, 7.650499797e+00, 1.999860000e+09, -1.322914744e+01, 1.999999909e+00, + 6.889749928e+02, -4.181421624e+02, 9.373529727e+01, -9.233142268e+00, 3.383772151e-01, + -1.382770534e+02, 5.540647456e+01, -8.170017489e+00, 5.295569200e-01, -1.269556386e-02}, + {24, 6.000000000e+00, 7.650499797e+00, 1.999860000e+09, -1.333724128e+01, 1.999999854e+00, + 4.365566411e+02, -2.672774427e+02, 6.001631369e+01, -5.895458454e+00, 2.149710735e-01, + -2.393534124e+02, 1.020845165e+02, -1.624744211e+01, 1.150387566e+00, -3.057723021e-02}, + {25, 6.000000000e+00, 7.650499797e+00, 1.999860000e+09, -1.328399669e+01, 2.000000008e+00, + 6.461381990e+02, -3.918546518e+02, 8.769548644e+01, -8.618784385e+00, 3.150660827e-01, + -2.597409979e+02, 1.113332866e+02, -1.782124571e+01, 1.269519197e+00, -3.396126698e-02}, + {26, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.330103000e+01, 1.999999998e+00, + 4.261007401e+02, -2.588846763e+02, 5.764613910e+01, -5.609660122e+00, 2.024165636e-01, + -1.982896712e+02, 8.274273985e+01, -1.284074215e+01, 8.845687432e-01, -2.282143299e-02}, + {27, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.332790165e+01, 1.999999922e+00, + 4.006816638e+02, -2.439311564e+02, 5.435031497e+01, -5.287693457e+00, 1.906696163e-01, + -2.205075564e+02, 9.262919772e+01, -1.448909443e+01, 1.006686819e+00, -2.621294059e-02}, + {28, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.334678710e+01, 1.999999939e+00, + 3.967750019e+02, -2.411866801e+02, 5.364872608e+01, -5.210295834e+00, 1.875525119e-01, + -2.516823030e+02, 1.065117131e+02, -1.680533335e+01, 1.178363534e+00, -3.098194406e-02}, + {29, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.344369664e+01, 1.999999853e+00, + 2.437671888e+02, -1.499592208e+02, 3.332221026e+01, -3.206587185e+00, 1.138639692e-01, + -2.874130637e+02, 1.223381969e+02, -1.943178054e+01, 1.371979484e+00, -3.633119448e-02}, + {30, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.338721562e+01, 1.999999911e+00, + 3.914867984e+02, -2.378147085e+02, 5.284517777e+01, -5.126420186e+00, 1.843322562e-01, + -3.235063319e+02, 1.384252948e+02, -2.211844479e+01, 1.571300198e+00, -4.187323186e-02}, + {31, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.335654643e+01, 1.999999847e+00, + 4.325820127e+02, -2.614587597e+02, 5.793273998e+01, -5.611190206e+00, 2.015836827e-01, + -3.359152840e+02, 1.437507638e+02, -2.297457475e+01, 1.632470701e+00, -4.351215346e-02}, + {32, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.337675047e+01, 1.999999960e+00, + 4.388195965e+02, -2.642662297e+02, 5.834159168e+01, -5.629419790e+00, 2.014339673e-01, + -3.430730654e+02, 1.467102631e+02, -2.343160019e+01, 1.663765504e+00, -4.431369286e-02}, + {33, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.339794046e+01, 2.000000074e+00, + 3.931399547e+02, -2.363700718e+02, 5.197696913e+01, -4.987097655e+00, 1.772567576e-01, + -3.501570134e+02, 1.497141578e+02, -2.390888062e+01, 1.697503580e+00, -4.520887478e-02}, + {34, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.342021680e+01, 2.000000064e+00, + 3.772588127e+02, -2.256347960e+02, 4.929790851e+01, -4.694628847e+00, 1.654667382e-01, + -3.481053019e+02, 1.486490112e+02, -2.370745096e+01, 1.680991482e+00, -4.471064364e-02}, + {35, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.344369666e+01, 1.999999864e+00, + 3.344685842e+02, -1.994816236e+02, 4.332267376e+01, -4.090542180e+00, 1.426839031e-01, + -3.227660675e+02, 1.370301996e+02, -2.171543883e+01, 1.529681552e+00, -4.041331983e-02}, + {36, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.345593194e+01, 1.999999999e+00, + 3.004054446e+02, -1.781334135e+02, 3.834850324e+01, -3.580074471e+00, 1.232168921e-01, + -2.980827664e+02, 1.257508661e+02, -1.978792154e+01, 1.383723149e+00, -3.628014907e-02}, + {37, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.310790583e+01, 2.000000075e+00, + -3.687188343e+01, 1.054409719e+01, -8.516586814e-01, 9.339751003e-03, 8.809383936e-04, + -2.699384784e+02, 1.129635316e+02, -1.761447452e+01, 1.219971043e+00, -3.166503704e-02}, + {38, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.304095795e+01, 1.999999892e+00, + 1.969969064e+02, -1.286503864e+02, 3.008431767e+01, -3.031946980e+00, 1.124456346e-01, + -2.331258613e+02, 9.627987243e+01, -1.478515961e+01, 1.007215642e+00, -2.567873120e-02}, + {39, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.306048023e+01, 1.999999916e+00, + 2.891710763e+02, -1.819536752e+02, 4.158265841e+01, -4.128940218e+00, 1.515168697e-01, + -1.997404800e+02, 8.119476676e+01, -1.223426670e+01, 8.159269666e-01, -2.031079820e-02}, + {40, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.308092198e+01, 2.000000013e+00, + 3.393782172e+02, -2.103908454e+02, 4.758278737e+01, -4.688308235e+00, 1.709723418e-01, + -1.549247582e+02, 6.091403935e+01, -8.799307373e+00, 5.578963961e-01, -1.305663921e-02}, + {41, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.316749062e+01, 1.999999920e+00, + 2.748604341e+02, -1.706429616e+02, 3.843757441e+01, -3.759045290e+00, 1.358263430e-01, + -1.163607425e+02, 4.350905533e+01, -5.859305970e+00, 3.376426246e-01, -6.881281652e-03}, + {42, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.318708720e+01, 2.000000093e+00, + 3.203285955e+02, -1.966282865e+02, 4.398204769e+01, -4.283031482e+00, 1.543480828e-01, + -9.364181222e+01, 3.329814493e+01, -4.141689265e+00, 2.095170962e-01, -3.304665813e-03}, + {43, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.314266674e+01, 1.999999876e+00, + 4.184977165e+02, -2.552902161e+02, 5.707764818e+01, -5.576436872e+00, 2.020184726e-01, + -8.395646154e+01, 2.898228589e+01, -3.422356654e+00, 1.564059753e-01, -1.838508896e-03}, + {44, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.322914744e+01, 1.999999909e+00, + 3.243555305e+02, -1.978255470e+02, 4.397580841e+01, -4.256142657e+00, 1.524431452e-01, + -5.506292375e+01, 1.599310639e+01, -1.237152904e+00, -6.611574411e-03, 2.712232383e-03}, + {45, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.325181249e+01, 2.000000089e+00, + 3.037823599e+02, -1.856628295e+02, 4.128167884e+01, -3.991656133e+00, 1.427469878e-01, + -5.014186072e+01, 1.386962969e+01, -8.950806420e-01, -3.095321225e-02, 3.357984426e-03}, + {46, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.340893584e+01, 2.000000073e+00, + 3.529797051e+02, -2.101512262e+02, 4.563946029e+01, -4.315279704e+00, 1.509248358e-01, + -4.815922691e+01, 1.301508788e+01, -7.580854951e-01, -4.059091985e-02, 3.608993811e-03}, + {47, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.328399669e+01, 2.000000008e+00, + 3.074953924e+02, -1.872462583e+02, 4.149827252e+01, -4.000811852e+00, 1.426973118e-01, + -4.897188379e+01, 1.335300002e+01, -8.110051997e-01, -3.684788190e-02, 3.508156457e-03}, + {48, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.322914743e+01, 1.999999904e+00, + 4.059717166e+02, -2.462737702e+02, 5.472040126e+01, -5.311320062e+00, 1.911670149e-01, + -5.901534554e+01, 1.791385249e+01, -1.587065943e+00, 2.182673278e-02, 1.845559896e-03}, + {49, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.320760815e+01, 1.999999973e+00, + 4.369774251e+02, -2.639721687e+02, 5.849617557e+01, -5.667842049e+00, 2.037342202e-01, + -7.399698219e+01, 2.469785523e+01, -2.737881327e+00, 1.085351830e-01, -6.022720695e-04}, + {50, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.322184869e+01, 1.999999993e+00, + 4.289361021e+02, -2.585593024e+02, 5.714058683e+01, -5.518600115e+00, 1.976499817e-01, + -9.269047286e+01, 3.314422349e+01, -4.167341855e+00, 2.159629039e-01, -3.626802503e-03}, + {51, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.323657166e+01, 1.999999946e+00, + 3.866985836e+02, -2.328379698e+02, 5.128884878e+01, -4.929614910e+00, 1.755331333e-01, + -1.067869310e+02, 3.950715983e+01, -5.243321447e+00, 2.967791238e-01, -5.901223876e-03}, + {52, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.325181248e+01, 2.000000083e+00, + 3.947511198e+02, -2.363799049e+02, 5.179393756e+01, -4.951603918e+00, 1.753404387e-01, + -1.069681982e+02, 3.995521754e+01, -5.382071424e+00, 3.120248901e-01, -6.467957474e-03}, + {53, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.326760745e+01, 2.000000205e+00, + 3.694394448e+02, -2.204699428e+02, 4.806381052e+01, -4.565474883e+00, 1.604614344e-01, + -1.180749905e+02, 4.460080701e+01, -6.105217447e+00, 3.616537171e-01, -7.733059623e-03}, + {54, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.328399667e+01, 2.000000001e+00, + 3.423943987e+02, -2.041330669e+02, 4.437639784e+01, -4.197363553e+00, 1.467594367e-01, + -1.288973984e+02, 4.985324046e+01, -7.056041375e+00, 4.378018318e-01, -1.000965926e-02}, + {55, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.297881025e+01, 1.999999927e+00, + -7.663422017e+01, 3.462700567e+01, -6.273553579e+00, 5.487612834e-01, -1.912897528e-02, + -1.318428276e+02, 5.081036112e+01, -7.154907590e+00, 4.405355674e-01, -9.955685075e-03}, + {56, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.290657751e+01, 1.999999869e+00, + 1.084179205e+02, -7.602229206e+01, 1.843754298e+01, -1.892451591e+00, 7.085434176e-02, + -1.346311376e+02, 5.207427468e+01, -7.369834199e+00, 4.568138610e-01, -1.041859875e-02}, + {57, 6.000000000e+00, 7.725500002e+00, 2.824880000e+09, -1.292445241e+01, 1.999999898e+00, + 2.995898890e+02, -1.889477671e+02, 4.336642429e+01, -4.330424108e+00, 1.599942758e-01, + 5.503972208e+00, -1.227641064e+01, 3.699182312e+00, -3.884476060e-01, 1.375966896e-02}, + {58, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.293554133e+01, 1.999999890e+00, + 1.709135500e+02, -1.120124681e+02, 2.615893820e+01, -2.624416758e+00, 9.674223967e-02, + -1.375860132e+02, 5.337811974e+01, -7.586786386e+00, 4.730023198e-01, -1.087482303e-02}, + {59, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.293554133e+01, 1.999999890e+00, + 1.214691988e+02, -8.336119630e+01, 1.996468944e+01, -2.032283439e+00, 7.562254632e-02, + -1.631005912e+02, 6.472051894e+01, -9.476098737e+00, 6.127875286e-01, -1.475060958e-02}, + {60, 6.000000000e+00, 7.849500202e+00, 5.000350000e+09, -1.294309494e+01, 1.999999967e+00, + 1.302719596e+02, -8.835087414e+01, 2.101971144e+01, -2.131084478e+00, 7.908549730e-02, + -1.692901279e+02, 6.742727614e+01, -9.920661139e+00, 6.453186854e-01, -1.564524492e-02}, + {61, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.295078139e+01, 1.999999905e+00, + 1.127680235e+02, -7.782238836e+01, 1.865126163e+01, -1.895116816e+00, 7.030502833e-02, + -2.059821608e+02, 8.384774285e+01, -1.267344799e+01, 8.502354115e-01, -2.135994609e-02}, + {62, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.295860692e+01, 1.999999936e+00, + 1.203145109e+02, -8.212556537e+01, 1.956606386e+01, -1.981212240e+00, 7.333626288e-02, + -2.158058793e+02, 8.810144391e+01, -1.336380022e+01, 9.000362964e-01, -2.270715579e-02}, + {63, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.296657573e+01, 1.999999918e+00, + 1.212159597e+02, -8.256559477e+01, 1.964122173e+01, -1.986442056e+00, 7.345564343e-02, + -2.278531434e+02, 9.336519465e+01, -1.422588608e+01, 9.627883381e-01, -2.441986614e-02}, + {64, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.298296617e+01, 1.999999921e+00, + 1.689382403e+02, -1.099987696e+02, 2.551961464e+01, -2.543234152e+00, 9.313568005e-02, + -2.282716670e+02, 9.348611199e+01, -1.423588448e+01, 9.628551072e-01, -2.440492772e-02}, + {65, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.299139910e+01, 1.999999880e+00, + 1.724155378e+02, -1.120798437e+02, 2.598264738e+01, -2.588807295e+00, 9.481417896e-02, + -2.322687147e+02, 9.517466656e+01, -1.450332749e+01, 9.817069914e-01, -2.490386807e-02}, + {66, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.298716240e+01, 1.999999941e+00, + 1.286079419e+02, -8.646296410e+01, 2.039801258e+01, -2.050839207e+00, 7.549033493e-02, + -2.420048480e+02, 9.935663043e+01, -1.517653800e+01, 1.029875015e+00, -2.619626869e-02}, + {67, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.299567846e+01, 1.999999971e+00, + 1.182799697e+02, -8.043389241e+01, 1.908027783e+01, -1.923209794e+00, 7.087268462e-02, + -2.464462609e+02, 1.012059056e+02, -1.546468270e+01, 1.049814070e+00, -2.671320158e-02}, + {68, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.300436459e+01, 1.999999966e+00, + 1.150510247e+02, -7.859576077e+01, 1.868688175e+01, -1.885844183e+00, 6.954765052e-02, + -2.457555063e+02, 1.007538481e+02, -1.536692833e+01, 1.041070997e+00, -2.643279207e-02}, + {69, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.300877391e+01, 2.000000000e+00, + 1.266280406e+02, -8.514491730e+01, 2.007089332e+01, -2.015475088e+00, 7.409191965e-02, + -2.492442707e+02, 1.021615320e+02, -1.557878384e+01, 1.055183253e+00, -2.678362279e-02}, + {70, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.301772826e+01, 1.999999912e+00, + 1.224253568e+02, -8.281395858e+01, 1.958609738e+01, -1.970785167e+00, 7.255458061e-02, + -2.488808342e+02, 1.018569466e+02, -1.550601866e+01, 1.048325396e+00, -2.655661748e-02}, + {71, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.303151733e+01, 2.000000051e+00, + 1.862181262e+02, -1.199038630e+02, 2.763107534e+01, -2.742586837e+00, 1.001956495e-01, + -2.403102476e+02, 9.796272016e+01, -1.484525920e+01, 9.987147871e-01, -2.516533876e-02}, + {72, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.304575796e+01, 2.000000081e+00, + 2.297759959e+02, -1.448485621e+02, 3.295877082e+01, -3.245850428e+00, 1.179456377e-01, + -2.282155654e+02, 9.249921555e+01, -1.392266984e+01, 9.297052139e-01, -2.323558576e-02}, + {73, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.306048022e+01, 1.999999910e+00, + 2.646909006e+02, -1.647716545e+02, 3.719903613e+01, -3.645113853e+00, 1.319890617e-01, + -2.165150972e+02, 8.722660467e+01, -1.303415548e+01, 8.633600348e-01, -2.138300143e-02}, + {74, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.308092196e+01, 2.000000008e+00, + 2.251239174e+02, -1.414731209e+02, 3.206048507e+01, -3.142433101e+00, 1.135971917e-01, + -2.070173544e+02, 8.296725365e+01, -1.231986936e+01, 8.102887128e-01, -1.990853407e-02}, + {75, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.309151488e+01, 1.999999984e+00, + 2.627532736e+02, -1.629008146e+02, 3.661592385e+01, -3.571257833e+00, 1.286871297e-01, + -1.945762063e+02, 7.740995255e+01, -1.139129234e+01, 7.415172466e-01, -1.800335280e-02}, + {76, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.310790581e+01, 2.000000068e+00, + 2.644549626e+02, -1.637369900e+02, 3.675734857e+01, -3.580665992e+00, 1.288721975e-01, + -1.725967865e+02, 6.755389456e+01, -9.737633351e+00, 6.184954292e-01, -1.457897448e-02}, + {77, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.311918599e+01, 1.999999933e+00, + 2.677629012e+02, -1.650589135e+02, 3.690999414e+01, -3.582378706e+00, 1.284763849e-01, + -1.584140848e+02, 6.122430396e+01, -8.680876005e+00, 5.402879020e-01, -1.241386995e-02}, + {78, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.319382006e+01, 2.000000009e+00, + 2.420702029e+02, -1.484461630e+02, 3.292288306e+01, -3.162757529e+00, 1.121487556e-01, + -1.319886050e+02, 4.940494114e+01, -6.702740089e+00, 3.934770465e-01, -8.336673895e-03}, + {79, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.320760814e+01, 1.999999969e+00, + 2.346714957e+02, -1.439356552e+02, 3.189416251e+01, -3.059071523e+00, 1.082595858e-01, + -1.130109430e+02, 4.093029258e+01, -5.286747014e+00, 2.885753389e-01, -5.428939868e-03}, + {80, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.316115147e+01, 2.000000093e+00, + 2.747370538e+02, -1.689673404e+02, 3.771696324e+01, -3.655841153e+00, 1.309852214e-01, + -9.001823908e+01, 3.066094857e+01, -3.570459523e+00, 1.613797666e-01, -1.901561361e-03}, + {81, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.313667715e+01, 2.000000002e+00, + 3.142563781e+02, -1.916613838e+02, 4.259167223e+01, -4.119713271e+00, 1.474792530e-01, + -7.642731867e+01, 2.462410146e+01, -2.566977318e+00, 8.741068396e-02, 1.388590928e-04}, + {82, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.314266674e+01, 1.999999876e+00, + 3.509258060e+02, -2.125470710e+02, 4.702461797e+01, -4.535380912e+00, 1.620138781e-01, + -5.173355302e+01, 1.362015056e+01, -7.321282362e-01, -4.826261322e-02, 3.892879264e-03}, + {83, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.315490164e+01, 1.999999944e+00, + 3.399729483e+02, -2.056319770e+02, 4.539614689e+01, -4.366195994e+00, 1.554792165e-01, + -4.131443229e+01, 8.986236911e+00, 3.924628986e-02, -1.052060828e-01, 5.466043586e-03}, + {84, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.316749062e+01, 1.999999920e+00, + 3.640602841e+02, -2.190164327e+02, 4.815603439e+01, -4.616573783e+00, 1.639147626e-01, + -3.256862965e+01, 5.115606198e+00, 6.800853161e-01, -1.522315744e-01, 6.756786448e-03}, + {85, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.318045630e+01, 2.000000044e+00, + 3.766488275e+02, -2.257321142e+02, 4.947300991e+01, -4.728919006e+00, 1.674240471e-01, + -2.300947210e+01, 8.615223509e-01, 1.388425307e+00, -2.045157608e-01, 8.200511055e-03}, + {86, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.319382005e+01, 2.000000006e+00, + 3.443622947e+02, -2.064342780e+02, 4.516044966e+01, -4.302253084e+00, 1.516667044e-01, + -5.399039282e+00, -7.002814559e+00, 2.702516748e+00, -3.018766003e-01, 1.089953798e-02}, + {87, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.291364147e+01, 2.000000217e+00, + -3.706791591e+01, 1.118013187e+01, -1.057728859e+00, 3.312859839e-02, -3.138341244e-06, + -3.451314336e+00, -7.779254134e+00, 2.816269849e+00, -3.090776388e-01, 1.106424389e-02}, + {88, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.284163724e+01, 1.999999954e+00, + 6.125934670e+01, -4.855548659e+01, 1.248551381e+01, -1.323304763e+00, 5.060744172e-02, + -6.021643455e+00, -6.580234329e+00, 2.607440108e+00, -2.929625239e-01, 1.059951856e-02}, + {89, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.285387248e+01, 2.000000090e+00, + 1.350863292e+02, -9.126618691e+01, 2.169932948e+01, -2.201947573e+00, 8.186860720e-02, + 1.937135880e+01, -1.787129621e+01, 4.485878662e+00, -4.315325969e-01, 1.442445798e-02}, + {90, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.286966604e+01, 1.999999970e+00, + 1.784388998e+02, -1.161623817e+02, 2.702376618e+01, -2.704797298e+00, 9.957279361e-02, + 2.216057166e+01, -1.904990091e+01, 4.671627339e+00, -4.444534802e-01, 1.475921763e-02}, + {91, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.287289489e+01, 1.999999951e+00, + 1.368355213e+02, -9.179790820e+01, 2.169910915e+01, -2.190249857e+00, 8.102241740e-02, + 4.516580666e+00, -1.118102949e+01, 3.357662550e+00, -3.470694353e-01, 1.205639951e-02}, + {92, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.287942629e+01, 2.000000032e+00, + 1.427130850e+02, -9.499714618e+01, 2.234475916e+01, -2.247599931e+00, 8.291713193e-02, + 1.341991149e+01, -1.518503354e+01, 4.030838171e+00, -3.972060658e-01, 1.345248084e-02}, + {93, 6.000000000e+00, 8.000000000e+00, 1.000000000e+10, -1.288605524e+01, 1.999999761e+00, + 2.341801100e+01, -2.506119713e+01, 7.023029272e+00, -7.610742531e-01, 2.903245750e-02, + -3.575331738e+01, 7.276302226e+00, 1.906771859e-01, -1.059475755e-01, 5.184029625e-03}, + {94, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.288272835e+01, 1.999999941e+00, + 1.287618322e+02, -8.721780968e+01, 2.073255323e+01, -2.100572716e+00, 7.794295578e-02, + -2.307262580e+01, 1.113132278e+00, 1.305250601e+00, -1.948949139e-01, 7.829116438e-03}, + {95, 6.000000000e+00, 7.951499931e+00, 7.998340000e+09, -1.288940956e+01, 1.999999880e+00, + 1.334821220e+02, -8.985337775e+01, 2.127928526e+01, -2.150628571e+00, 7.965294640e-02, + -3.518662723e+01, 6.514543434e+00, 4.030862442e-01, -1.279850170e-01, 5.970168353e-03}, + {96, 6.000000000e+00, 8.000000000e+00, 1.000000000e+10, -1.290553004e+01, 2.000000198e+00, + 4.545581472e+01, -3.771304300e+01, 9.729129321e+00, -1.017037014e+00, 3.807733199e-02, + -4.973805034e+01, 1.342335334e+01, -8.221139917e-01, -3.176841835e-02, 3.146810827e-03}, + {97, 6.000000000e+00, 8.000000000e+00, 1.000000000e+10, -1.291150963e+01, 2.000000019e+00, + 4.689042092e+01, -3.843347264e+01, 9.859294531e+00, -1.027014690e+00, 3.834833665e-02, + -4.657434145e+01, 1.204637835e+01, -5.982449163e-01, -4.786919243e-02, 3.579251285e-03}, + {98, 6.000000000e+00, 8.000000000e+00, 1.000000000e+10, -1.290833198e+01, 1.999999824e+00, + 1.337584189e+01, -1.907284620e+01, 5.691614909e+00, -6.307838734e-01, 2.430868142e-02, + -5.573362773e+01, 1.615667599e+01, -1.288960621e+00, 3.655033732e-03, 2.140047522e-03}, + {99, 6.000000000e+00, 8.000000000e+00, 1.000000000e+10, -1.291435263e+01, 1.999999988e+00, + 1.376201293e+01, -1.919251815e+01, 5.693799461e+00, -6.287500644e-01, 2.416045199e-02, + -4.914211254e+01, 1.314247998e+01, -7.739336035e-01, -3.530513333e-02, 3.241293077e-03}, + {100, 6.000000000e+00, 8.000000000e+00, 1.000000000e+10, -1.292045700e+01, 2.000000004e+00, + 1.277081775e+01, -1.854047224e+01, 5.534680382e+00, -6.118054153e-01, 2.349768815e-02, + -5.074293980e+01, 1.383260974e+01, -8.858904786e-01, -2.718885953e-02, 3.019620454e-03}}; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/processes/electromagnetic/lowenergy/src/G4LivermoreGammaConversion5DModel.cc b/source/processes/electromagnetic/lowenergy/src/G4LivermoreGammaConversion5DModel.cc index 23a160b3121..42520578d3a 100644 --- a/source/processes/electromagnetic/lowenergy/src/G4LivermoreGammaConversion5DModel.cc +++ b/source/processes/electromagnetic/lowenergy/src/G4LivermoreGammaConversion5DModel.cc @@ -25,43 +25,44 @@ // // Author: Zhuxin Li@CENBG // 11 March 2020 -// on the base of G4LivermoreGammaConversionModel -// derives from G4BetheHeitler5DModel +// on the base of G4LivermoreGammaConversionModel +// derives from G4BetheHeitler5DModel // ------------------------------------------------------------------- #include "G4LivermoreGammaConversion5DModel.hh" + +#include "G4AutoLock.hh" #include "G4Electron.hh" -#include "G4Positron.hh" #include "G4EmParameters.hh" +#include "G4Exp.hh" #include "G4ParticleChangeForGamma.hh" -#include "G4PhysicsFreeVector.hh" -#include "G4PhysicsLogVector.hh" -#include "G4ProductionCutsTable.hh" #include "G4PhysicalConstants.hh" +#include "G4PhysicsFreeVector.hh" #include "G4SystemOfUnits.hh" -#include "G4Exp.hh" -#include "G4AutoLock.hh" -namespace { G4Mutex LivermoreGammaConversion5DModelMutex = G4MUTEX_INITIALIZER; } +namespace +{ +G4Mutex LivermoreGammaConversion5DModelMutex = G4MUTEX_INITIALIZER; +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -const G4int G4LivermoreGammaConversion5DModel::maxZ; -G4double G4LivermoreGammaConversion5DModel::lowEnergyLimit = 2.*CLHEP::electron_mass_c2; G4PhysicsFreeVector* G4LivermoreGammaConversion5DModel::data[] = {nullptr}; +G4String G4LivermoreGammaConversion5DModel::gDataDirectory = ""; -G4LivermoreGammaConversion5DModel::G4LivermoreGammaConversion5DModel(const G4ParticleDefinition* p, - const G4String& nam) - : G4BetheHeitler5DModel(p, nam), fParticleChange(nullptr) +G4LivermoreGammaConversion5DModel::G4LivermoreGammaConversion5DModel(const G4ParticleDefinition* p, + const G4String& nam) + : G4BetheHeitler5DModel(p, nam) { + fParticleChange = nullptr; + lowEnergyLimit = 2. * CLHEP::electron_mass_c2; verboseLevel = 0; // Verbosity scale for debugging purposes: - // 0 = nothing + // 0 = nothing // 1 = calculation of cross sections, file openings... // 2 = entering in methods - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4LivermoreGammaConversion5DModel is constructed " << G4endl; } } @@ -70,11 +71,11 @@ G4LivermoreGammaConversion5DModel::G4LivermoreGammaConversion5DModel(const G4Par G4LivermoreGammaConversion5DModel::~G4LivermoreGammaConversion5DModel() { - if(IsMaster()) { - for(G4int i=0; i 1) - { - G4cout << "Calling Initialise() of G4LivermoreGammaConversion5DModel." - << G4endl - << "Energy range: " - << LowEnergyLimit() / MeV << " MeV - " - << HighEnergyLimit() / GeV << " GeV isMater: " << IsMaster() - << G4endl; - } - - if(!fParticleChange) { - fParticleChange = GetParticleChangeForGamma(); + G4BetheHeitler5DModel::Initialise(particle, cuts); + + if (verboseLevel > 1) { + G4cout << "Calling Initialise() of G4LivermoreGammaConversion5DModel." << G4endl + << "Energy range: " << LowEnergyLimit() / MeV << " MeV - " << HighEnergyLimit() / GeV + << " GeV isMater: " << IsMaster() << G4endl; } - - if(IsMaster()) - { - // Initialise element selector - InitialiseElementSelectors(particle, cuts); - // Access to elements - const char* path = G4FindDataDir("G4LEDATA"); - G4ProductionCutsTable* theCoupleTable = - G4ProductionCutsTable::GetProductionCutsTable(); - G4int numOfCouples = G4int(theCoupleTable->GetTableSize()); - for(G4int i=0; iGetMaterialCutsCouple(i); - SetCurrentCouple(couple); - const G4Material* mat = couple->GetMaterial(); - const G4ElementVector* theElementVector = mat->GetElementVector(); - std::size_t nelm = mat->GetNumberOfElements(); - for (std::size_t j=0; jGetZasInt(), maxZ)); - if(!data[Z]) { ReadData(Z, path); } - } - } - } + + if (IsMaster()) { + // Initialise element selector + InitialiseElementSelectors(particle, cuts); + + // Access to elements + const G4ElementTable* elemTable = G4Element::GetElementTable(); + std::size_t numElems = (*elemTable).size(); + for (std::size_t ie = 0; ie < numElems; ++ie) { + const G4Element* elem = (*elemTable)[ie]; + const G4int Z = std::min(maxZ, elem->GetZasInt()); + if (data[Z] == nullptr) { + ReadData(Z); + } + } + } + + if (isInitialised) { + return; + } + fParticleChange = GetParticleChangeForGamma(); + isInitialised = true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4LivermoreGammaConversion5DModel::ReadData(size_t Z, const char* path) +const G4String& G4LivermoreGammaConversion5DModel::FindDirectoryPath() { - if (verboseLevel > 1) - { - G4cout << "Calling ReadData() of G4LivermoreGammaConversion5DModel" - << G4endl; + // no check in this method - environment variable is check by utility + if (gDataDirectory.empty()) { + auto param = G4EmParameters::Instance(); + std::ostringstream ost; + if (param->LivermoreDataDir() == "livermore") { + ost << param->GetDirLEDATA() << "/livermore/pair/"; + useSpline = true; } - - if(data[Z]) { return; } - const char* datadir = path; - if(!datadir) - { - datadir = G4FindDataDir("G4LEDATA"); - if(!datadir) - { - G4Exception("G4LivermoreGammaConversion5DModel::ReadData()", - "em0006",FatalException, - "Environment variable G4LEDATA not defined"); - return; + else { + ost << param->GetDirLEDATA() << "/epics2017/pair/"; } + gDataDirectory = ost.str(); } - std::ostringstream ost; - if(G4EmParameters::Instance()->LivermoreDataDir() == "livermore"){ - data[Z] = new G4PhysicsFreeVector(true); - ost << datadir << "/livermore/pair/pp-cs-" << Z <<".dat"; - }else{ - data[Z] = new G4PhysicsFreeVector(); - ost << datadir << "/epics2017/pair/pp-cs-" << Z <<".dat"; + return gDataDirectory; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4LivermoreGammaConversion5DModel::ReadData(const G4int Z) +{ + if (verboseLevel > 1) { + G4cout << "Calling ReadData() of G4LivermoreGammaConversion5DModel" << G4endl; } + if (data[Z]) { + return; + } + + std::ostringstream ost; + ost << FindDirectoryPath() << "pp-cs-" << Z << ".dat"; + + data[Z] = new G4PhysicsFreeVector(useSpline); + std::ifstream fin(ost.str().c_str()); - - if( !fin.is_open()) - { + + if (!fin.is_open()) { G4ExceptionDescription ed; - ed << "G4LivermoreGammaConversion5DModel data file <" << ost.str().c_str() - << "> is not opened!" << G4endl; - G4Exception("G4LivermoreGammaConversion5DModel::ReadData()", - "em0003",FatalException, - ed,"G4LEDATA version should be G4EMLOW8.0 or later."); + ed << "G4LivermoreGammaConversion5DModel data file <" << ost.str().c_str() << "> is not opened!" + << G4endl; + G4Exception("G4LivermoreGammaConversion5DModel::ReadData()", "em0003", FatalException, ed, + "G4LEDATA version should be G4EMLOW8.0 or later."); return; - } - else - { - if(verboseLevel > 1) { G4cout << "File " << ost.str() - << " is opened by G4LivermoreGammaConversion5DModel" << G4endl;} - data[Z]->Retrieve(fin, true); - } + } + else { + if (verboseLevel > 1) { + G4cout << "File " << ost.str() << " is opened by G4LivermoreGammaConversion5DModel" << G4endl; + } + data[Z]->Retrieve(fin, true); + } + // Activation of spline interpolation + if (useSpline) data[Z]->FillSecondDerivatives(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double -G4LivermoreGammaConversion5DModel::ComputeCrossSectionPerAtom( - const G4ParticleDefinition* particle, G4double GammaEnergy, G4double Z, - G4double, G4double, G4double) +G4double +G4LivermoreGammaConversion5DModel::ComputeCrossSectionPerAtom(const G4ParticleDefinition* particle, + G4double GammaEnergy, G4double Z, + G4double, G4double, G4double) { - if (verboseLevel > 1) - { - G4cout << "G4LivermoreGammaConversion5DModel::ComputeCrossSectionPerAtom() Z= " - << Z << G4endl; + if (verboseLevel > 1) { + G4cout << "G4LivermoreGammaConversion5DModel::ComputeCrossSectionPerAtom() Z= " << Z << G4endl; } G4double xs = 0.0; - if (GammaEnergy < lowEnergyLimit) { return xs; } - + if (GammaEnergy < lowEnergyLimit) { + return xs; + } + G4int intZ = std::max(1, std::min(G4lrint(Z), maxZ)); G4PhysicsFreeVector* pv = data[intZ]; // if element was not initialised // do initialisation safely for MT mode - if(!pv) - { + if (!pv) { InitialiseForElement(particle, intZ); pv = data[intZ]; - if(!pv) { return xs; } + if (!pv) { + return xs; + } } // x-section is taken from the table - xs = pv->Value(GammaEnergy); - if(verboseLevel > 0) - { - G4cout << "*** Gamma conversion xs for Z=" << Z << " at energy E(MeV)=" - << GammaEnergy/MeV << " cs=" << xs/millibarn << " mb" << G4endl; + xs = pv->Value(GammaEnergy); + if (verboseLevel > 0) { + G4cout << "*** Gamma conversion xs for Z=" << Z << " at energy E(MeV)=" << GammaEnergy / MeV + << " cs=" << xs / millibarn << " mb" << G4endl; } return xs; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void G4LivermoreGammaConversion5DModel::InitialiseForElement( - const G4ParticleDefinition*, - G4int Z) +void G4LivermoreGammaConversion5DModel::InitialiseForElement(const G4ParticleDefinition*, G4int Z) { G4AutoLock l(&LivermoreGammaConversion5DModelMutex); - if(!data[Z]) { ReadData(Z); } + if (!data[Z]) { + ReadData(Z); + } l.unlock(); } diff --git a/source/processes/electromagnetic/lowenergy/src/G4LivermoreGammaConversionModel.cc b/source/processes/electromagnetic/lowenergy/src/G4LivermoreGammaConversionModel.cc index 7b37ec62b03..883821898d5 100644 --- a/source/processes/electromagnetic/lowenergy/src/G4LivermoreGammaConversionModel.cc +++ b/source/processes/electromagnetic/lowenergy/src/G4LivermoreGammaConversionModel.cc @@ -34,37 +34,39 @@ // ------------------------------------------------------------------- #include "G4LivermoreGammaConversionModel.hh" -#include "G4Electron.hh" -#include "G4Positron.hh" + #include "G4AutoLock.hh" +#include "G4Electron.hh" #include "G4EmParameters.hh" +#include "G4Exp.hh" #include "G4ParticleChangeForGamma.hh" -#include "G4PhysicsFreeVector.hh" -#include "G4PhysicsLogVector.hh" -#include "G4ProductionCutsTable.hh" #include "G4PhysicalConstants.hh" +#include "G4PhysicsFreeVector.hh" #include "G4SystemOfUnits.hh" -#include "G4Exp.hh" -namespace { G4Mutex LivermoreGammaConversionModelMutex = G4MUTEX_INITIALIZER; } +namespace +{ +G4Mutex LivermoreGammaConversionModelMutex = G4MUTEX_INITIALIZER; +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4LivermoreGammaConversionModel::lowEnergyLimit = 2.*CLHEP::electron_mass_c2; G4PhysicsFreeVector* G4LivermoreGammaConversionModel::data[] = {nullptr}; +G4String G4LivermoreGammaConversionModel::gDataDirectory = ""; -G4LivermoreGammaConversionModel::G4LivermoreGammaConversionModel -(const G4ParticleDefinition* p, const G4String& nam) -: G4PairProductionRelModel(p,nam),fParticleChange(nullptr),maxZ(100) +G4LivermoreGammaConversionModel::G4LivermoreGammaConversionModel(const G4ParticleDefinition* p, + const G4String& nam) + : G4PairProductionRelModel(p, nam) { + fParticleChange = nullptr; + lowEnergyLimit = 2. * CLHEP::electron_mass_c2; verboseLevel = 0; // Verbosity scale for debugging purposes: // 0 = nothing // 1 = calculation of cross sections, file openings... // 2 = entering in methods - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4LivermoreGammaConversionModel is constructed " << G4endl; } } @@ -73,11 +75,9 @@ G4LivermoreGammaConversionModel::G4LivermoreGammaConversionModel G4LivermoreGammaConversionModel::~G4LivermoreGammaConversionModel() { - if(IsMaster()) { - for(G4int i = 0; i <= maxZ; ++i) - { - if(data[i]) - { + if (IsMaster()) { + for (G4int i = 0; i <= maxZ; ++i) { + if (data[i]) { delete data[i]; data[i] = nullptr; } @@ -87,116 +87,110 @@ G4LivermoreGammaConversionModel::~G4LivermoreGammaConversionModel() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4LivermoreGammaConversionModel::Initialise( - const G4ParticleDefinition* particle, - const G4DataVector& cuts) -{ G4PairProductionRelModel::Initialise(particle, cuts); - if (verboseLevel > 1) - { - G4cout << "Calling Initialise() of G4LivermoreGammaConversionModel." - << G4endl - << "Energy range: " - << LowEnergyLimit() / MeV << " MeV - " - << HighEnergyLimit() / GeV << " GeV isMater: " << IsMaster() - << G4endl; - } - - if(fParticleChange == nullptr) { - fParticleChange = GetParticleChangeForGamma(); +void G4LivermoreGammaConversionModel::Initialise(const G4ParticleDefinition* particle, + const G4DataVector& cuts) +{ + G4PairProductionRelModel::Initialise(particle, cuts); + if (verboseLevel > 1) { + G4cout << "Calling Initialise() of G4LivermoreGammaConversionModel." << G4endl + << "Energy range: " << LowEnergyLimit() / MeV << " MeV - " << HighEnergyLimit() / GeV + << " GeV isMater: " << IsMaster() << G4endl; } - if(IsMaster()) - { + if (IsMaster()) { // Initialise element selector InitialiseElementSelectors(particle, cuts); // Access to elements - const char* path = G4FindDataDir("G4LEDATA"); const G4ElementTable* elemTable = G4Element::GetElementTable(); - size_t numElems = (*elemTable).size(); - for(size_t ie = 0; ie < numElems; ++ie) - { + std::size_t numElems = (*elemTable).size(); + for (std::size_t ie = 0; ie < numElems; ++ie) { const G4Element* elem = (*elemTable)[ie]; - const G4int Z = std::min(maxZ, elem->GetZasInt()); - if(data[Z] == nullptr) - { - ReadData(Z, path); + const G4int Z = std::min(maxZ, elem->GetZasInt()); + if (data[Z] == nullptr) { + ReadData(Z); } } } + if (isInitialised) { + return; + } + fParticleChange = GetParticleChangeForGamma(); + isInitialised = true; } - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4LivermoreGammaConversionModel::ReadData(size_t Z, const char* path) +const G4String& G4LivermoreGammaConversionModel::FindDirectoryPath() { - if (verboseLevel > 1) - { - G4cout << "Calling ReadData() of G4LivermoreGammaConversionModel" - << G4endl; + // no check in this method - environment variable is check by utility + if (gDataDirectory.empty()) { + auto param = G4EmParameters::Instance(); + std::ostringstream ost; + if (param->LivermoreDataDir() == "livermore") { + ost << param->GetDirLEDATA() << "/livermore/pair/"; + useSpline = true; + } + else { + ost << param->GetDirLEDATA() << "/epics2017/pair/"; + } + gDataDirectory = ost.str(); } + return gDataDirectory; +} - if(data[Z]!= nullptr) { return; } +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - const char* datadir = path; +void G4LivermoreGammaConversionModel::ReadData(const G4int Z) +{ + if (verboseLevel > 1) { + G4cout << "Calling ReadData() of G4LivermoreGammaConversionModel" << G4endl; + } - if(datadir == nullptr) - { - datadir = G4FindDataDir("G4LEDATA"); - if(datadir == nullptr) - { - G4Exception("G4LivermoreGammaConversionModel::ReadData()", - "em0006",FatalException, - "Environment variable G4LEDATA not defined"); - return; - } + if (data[Z] != nullptr) { + return; } std::ostringstream ost; - if(G4EmParameters::Instance()->LivermoreDataDir() == "livermore"){ - data[Z] = new G4PhysicsFreeVector(true); - ost << datadir << "/livermore/pair/pp-cs-" << Z <<".dat"; - }else{ - data[Z] = new G4PhysicsFreeVector(); - ost << datadir << "/epics2017/pair/pp-cs-" << Z <<".dat"; - } + ost << FindDirectoryPath() << "pp-cs-" << Z << ".dat"; + + data[Z] = new G4PhysicsFreeVector(useSpline); std::ifstream fin(ost.str().c_str()); - if( !fin.is_open()) - { + if (!fin.is_open()) { G4ExceptionDescription ed; - ed << "G4LivermoreGammaConversionModel data file <" << ost.str().c_str() - << "> is not opened!" << G4endl; - G4Exception("G4LivermoreGammaConversionModel::ReadData()", - "em0003",FatalException, - ed,"G4LEDATA version should be G4EMLOW8.0 or later."); + ed << "G4LivermoreGammaConversionModel data file <" << ost.str().c_str() << "> is not opened!" + << G4endl; + G4Exception("G4LivermoreGammaConversionModel::ReadData()", "em0003", FatalException, ed, + "G4LEDATA version should be G4EMLOW8.0 or later."); return; } - else - { - - if(verboseLevel > 1) { G4cout << "File " << ost.str() - << " is opened by G4LivermoreGammaConversionModel" << G4endl;} + else { + if (verboseLevel > 1) { + G4cout << "File " << ost.str() << " is opened by G4LivermoreGammaConversionModel" << G4endl; + } data[Z]->Retrieve(fin, true); } + // Activation of spline interpolation + if (useSpline) data[Z]->FillSecondDerivatives(); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4LivermoreGammaConversionModel::ComputeCrossSectionPerAtom( - const G4ParticleDefinition* particle, - G4double GammaEnergy, G4double Z, G4double, G4double, G4double) +G4double +G4LivermoreGammaConversionModel::ComputeCrossSectionPerAtom(const G4ParticleDefinition* particle, + G4double GammaEnergy, G4double Z, + G4double, G4double, G4double) { - if (verboseLevel > 1) - { - G4cout << "G4LivermoreGammaConversionModel::ComputeCrossSectionPerAtom() Z= " - << Z << G4endl; + if (verboseLevel > 1) { + G4cout << "G4LivermoreGammaConversionModel::ComputeCrossSectionPerAtom() Z= " << Z << G4endl; } - if (GammaEnergy < lowEnergyLimit) { return 0.0; } + if (GammaEnergy < lowEnergyLimit) { + return 0.0; + } G4double xs = 0.0; @@ -206,31 +200,31 @@ G4double G4LivermoreGammaConversionModel::ComputeCrossSectionPerAtom( // if element was not initialised // do initialisation safely for MT mode - if(pv == nullptr) - { + if (pv == nullptr) { InitialiseForElement(particle, intZ); pv = data[intZ]; - if(pv == nullptr) { return xs; } + if (pv == nullptr) { + return xs; + } } // x-section is taken from the table xs = pv->Value(GammaEnergy); - if(verboseLevel > 0) - { - G4cout << "*** Gamma conversion xs for Z=" << Z << " at energy E(MeV)=" - << GammaEnergy/MeV << " cs=" << xs/millibarn << " mb" << G4endl; - } + if (verboseLevel > 0) { + G4cout << "*** Gamma conversion xs for Z=" << Z << " at energy E(MeV)=" << GammaEnergy / MeV + << " cs=" << xs / millibarn << " mb" << G4endl; + } return xs; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void G4LivermoreGammaConversionModel::InitialiseForElement( - const G4ParticleDefinition*, - G4int Z) +void G4LivermoreGammaConversionModel::InitialiseForElement(const G4ParticleDefinition*, G4int Z) { G4AutoLock l(&LivermoreGammaConversionModelMutex); - if(data[Z] == nullptr) { ReadData(Z); } + if (data[Z] == nullptr) { + ReadData(Z); + } l.unlock(); } diff --git a/source/processes/electromagnetic/lowenergy/src/G4LivermorePhotoElectricModel.cc b/source/processes/electromagnetic/lowenergy/src/G4LivermorePhotoElectricModel.cc index 23c8a30d51e..8207d093409 100644 --- a/source/processes/electromagnetic/lowenergy/src/G4LivermorePhotoElectricModel.cc +++ b/source/processes/electromagnetic/lowenergy/src/G4LivermorePhotoElectricModel.cc @@ -29,181 +29,172 @@ // on base of G4LowEnergyPhotoElectric developed by A.Forti and M.G.Pia // // 22 Oct 2012 A & V Ivanchenko Migration data structure to G4PhysicsVector -// 1 June 2017 M Bandieramonte: New model based on livermore/epics2014 +// 1 June 2017 M Bandieramonte: New model based on livermore/epics2014 // evaluated data - parameterization fits in two ranges #include "G4LivermorePhotoElectricModel.hh" -#include "G4SystemOfUnits.hh" -#include "G4PhysicalConstants.hh" -#include "G4LossTableManager.hh" + +#include "G4AtomicShell.hh" +#include "G4AutoLock.hh" +#include "G4CrossSectionHandler.hh" #include "G4Electron.hh" #include "G4Gamma.hh" +#include "G4LossTableManager.hh" #include "G4ParticleChangeForGamma.hh" -#include "G4CrossSectionHandler.hh" #include "G4PhysicsFreeVector.hh" -#include "G4VAtomDeexcitation.hh" #include "G4SauterGavrilaAngularDistribution.hh" -#include "G4AtomicShell.hh" +#include "G4SystemOfUnits.hh" +#include "G4VAtomDeexcitation.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - -G4PhysicsFreeVector* G4LivermorePhotoElectricModel::fCrossSection[] = {nullptr}; -G4PhysicsFreeVector* G4LivermorePhotoElectricModel::fCrossSectionLE[] = {nullptr}; +G4PhysicsFreeVector* G4LivermorePhotoElectricModel::fCrossSection[] = {nullptr}; +G4PhysicsFreeVector* G4LivermorePhotoElectricModel::fCrossSectionLE[] = {nullptr}; std::vector* G4LivermorePhotoElectricModel::fParamHigh[] = {nullptr}; std::vector* G4LivermorePhotoElectricModel::fParamLow[] = {nullptr}; -G4int G4LivermorePhotoElectricModel::fNShells[] = {0}; -G4int G4LivermorePhotoElectricModel::fNShellsUsed[] = {0}; -G4ElementData* G4LivermorePhotoElectricModel::fShellCrossSection = nullptr; -G4Material* G4LivermorePhotoElectricModel::fWater = nullptr; -G4double G4LivermorePhotoElectricModel::fWaterEnergyLimit = 0.0; -G4String G4LivermorePhotoElectricModel::fDataDirectory = ""; - -#ifdef G4MULTITHREADED - G4Mutex G4LivermorePhotoElectricModel::livPhotoeffMutex = G4MUTEX_INITIALIZER; -#endif - -using namespace std; +G4int G4LivermorePhotoElectricModel::fNShells[] = {0}; +G4int G4LivermorePhotoElectricModel::fNShellsUsed[] = {0}; +G4ElementData* G4LivermorePhotoElectricModel::fShellCrossSection = nullptr; +G4Material* G4LivermorePhotoElectricModel::fWater = nullptr; +G4double G4LivermorePhotoElectricModel::fWaterEnergyLimit = 0.0; +G4String G4LivermorePhotoElectricModel::fDataDirectory = ""; + +namespace +{ +G4Mutex livPhotoeffMutex = G4MUTEX_INITIALIZER; +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4LivermorePhotoElectricModel::G4LivermorePhotoElectricModel(const G4String& nam) - : G4VEmModel(nam),fParticleChange(nullptr), fAtomDeexcitation(nullptr), - maxZ(100),nShellLimit(100),fDeexcitationActive(false),isInitialised(false) +G4LivermorePhotoElectricModel::G4LivermorePhotoElectricModel(const G4String& nam) : G4VEmModel(nam) { - verboseLevel= 0; - // Verbosity scale: - // 0 = nothing - // 1 = warning for energy non-conservation - // 2 = details of energy budget - // 3 = calculation of cross sections, file openings, sampling of atoms - // 4 = entering in methods - - theGamma = G4Gamma::Gamma(); - theElectron = G4Electron::Electron(); - - // default generator - SetAngularDistribution(new G4SauterGavrilaAngularDistribution()); - - if(verboseLevel>0) { - G4cout << "Livermore PhotoElectric is constructed " - << " nShellLimit= " << nShellLimit << G4endl; - } - - //Mark this model as "applicable" for atomic deexcitation - SetDeexcitationFlag(true); - fSandiaCof.resize(4,0.0); - fCurrSection = 0.0; + verboseLevel = 0; + // Verbosity scale: + // 0 = nothing + // 1 = warning for energy non-conservation + // 2 = details of energy budget + // 3 = calculation of cross sections, file openings, sampling of atoms + // 4 = entering in methods + + theGamma = G4Gamma::Gamma(); + theElectron = G4Electron::Electron(); + + // default generator + SetAngularDistribution(new G4SauterGavrilaAngularDistribution()); + + if (verboseLevel > 0) { + G4cout << "Livermore PhotoElectric is constructed " + << " nShellLimit= " << nShellLimit << G4endl; + } + + // Mark this model as "applicable" for atomic deexcitation + SetDeexcitationFlag(true); + + // For water + fSandiaCof.resize(4, 0.0); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4LivermorePhotoElectricModel::~G4LivermorePhotoElectricModel() { - if(IsMaster()) - { + if (IsMaster()) { delete fShellCrossSection; fShellCrossSection = nullptr; - for(G4int i = 0; i <= maxZ; ++i) - { - if(fParamHigh[i]){ + for (G4int i = 0; i <= maxZ; ++i) { + if (fParamHigh[i]) { delete fParamHigh[i]; fParamHigh[i] = nullptr; } - if(fParamLow[i]){ + if (fParamLow[i]) { delete fParamLow[i]; fParamLow[i] = nullptr; } - if(fCrossSection[i]){ + if (fCrossSection[i]) { delete fCrossSection[i]; fCrossSection[i] = nullptr; } - if(fCrossSectionLE[i]){ + if (fCrossSectionLE[i]) { delete fCrossSectionLE[i]; fCrossSectionLE[i] = nullptr; } - } } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void -G4LivermorePhotoElectricModel::Initialise(const G4ParticleDefinition*, - const G4DataVector&) +void G4LivermorePhotoElectricModel::Initialise(const G4ParticleDefinition*, const G4DataVector&) { if (verboseLevel > 2) { G4cout << "Calling G4LivermorePhotoElectricModel::Initialise() " << G4endl; } - - if(IsMaster()) { - - if(fWater == nullptr) { + + if (IsMaster()) { + if (fWater == nullptr) { fWater = G4Material::GetMaterial("G4_WATER", false); - if(fWater == nullptr) { fWater = G4Material::GetMaterial("Water", false); } - if(fWater) { fWaterEnergyLimit = 13.6*eV; } + if (fWater == nullptr) { + fWater = G4Material::GetMaterial("Water", false); + } + if (fWater != nullptr) { + fWaterEnergyLimit = 13.6 * eV; + } + } + + if (fShellCrossSection == nullptr) { + fShellCrossSection = new G4ElementData(); } - - if(fShellCrossSection == nullptr) { fShellCrossSection = new G4ElementData(); } const G4ElementTable* elemTable = G4Element::GetElementTable(); - std::size_t numElems = (*elemTable).size(); - for(std::size_t ie = 0; ie < numElems; ++ie) - { + std::size_t numElems = (*elemTable).size(); + for (std::size_t ie = 0; ie < numElems; ++ie) { const G4Element* elem = (*elemTable)[ie]; - const G4int Z = std::min(maxZ, elem->GetZasInt()); - if(fCrossSection[Z] == nullptr) - { + const G4int Z = std::min(maxZ, elem->GetZasInt()); + if (fCrossSection[Z] == nullptr) { ReadData(Z); } } } - + if (verboseLevel > 2) { - G4cout << "Loaded cross section files for new LivermorePhotoElectric model" - << G4endl; + G4cout << "Loaded cross section files for new LivermorePhotoElectric model" << G4endl; } - if(!isInitialised) { + if (!isInitialised) { isInitialised = true; - fParticleChange = GetParticleChangeForGamma(); + fParticleChange = GetParticleChangeForGamma(); fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation(); } fDeexcitationActive = false; - if(fAtomDeexcitation) { + if (nullptr != fAtomDeexcitation) { fDeexcitationActive = fAtomDeexcitation->IsFluoActive(); } - + if (verboseLevel > 0) { - G4cout << "LivermorePhotoElectric model is initialized " << G4endl - << G4endl; - } + G4cout << "LivermorePhotoElectric model is initialized " << G4endl << G4endl; + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4LivermorePhotoElectricModel::CrossSectionPerVolume( - const G4Material* material, - const G4ParticleDefinition* p, - G4double energy, - G4double, G4double) +G4double G4LivermorePhotoElectricModel::CrossSectionPerVolume(const G4Material* material, + const G4ParticleDefinition* p, + G4double energy, G4double, G4double) { fCurrSection = 0.0; - if(fWater && (material == fWater || - material->GetBaseMaterial() == fWater)) { - if(energy <= fWaterEnergyLimit) { + if (fWater && (material == fWater || material->GetBaseMaterial() == fWater)) { + if (energy <= fWaterEnergyLimit) { fWater->GetSandiaTable()->GetSandiaCofWater(energy, fSandiaCof); - - G4double energy2 = energy*energy; - G4double energy3 = energy*energy2; - G4double energy4 = energy2*energy2; - - fCurrSection = material->GetDensity()* - (fSandiaCof[0]/energy + fSandiaCof[1]/energy2 + - fSandiaCof[2]/energy3 + fSandiaCof[3]/energy4); + + G4double energy2 = energy * energy; + G4double energy3 = energy * energy2; + G4double energy4 = energy2 * energy2; + + fCurrSection = material->GetDensity() + * (fSandiaCof[0] / energy + fSandiaCof[1] / energy2 + fSandiaCof[2] / energy3 + + fSandiaCof[3] / energy4); } } - if(0.0 == fCurrSection) { + if (0.0 == fCurrSection) { fCurrSection = G4VEmModel::CrossSectionPerVolume(material, p, energy); } return fCurrSection; @@ -211,282 +202,262 @@ G4double G4LivermorePhotoElectricModel::CrossSectionPerVolume( //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4LivermorePhotoElectricModel::ComputeCrossSectionPerAtom( - const G4ParticleDefinition*, - G4double energy, - G4double ZZ, G4double, - G4double, G4double) +G4double G4LivermorePhotoElectricModel::ComputeCrossSectionPerAtom(const G4ParticleDefinition*, + G4double energy, G4double ZZ, + G4double, G4double, G4double) { if (verboseLevel > 3) { G4cout << "\n G4LivermorePhotoElectricModel::ComputeCrossSectionPerAtom():" - << " Z= " << ZZ << " R(keV)= " << energy/keV << G4endl; + << " Z= " << ZZ << " R(keV)= " << energy / keV << G4endl; } G4double cs = 0.0; G4int Z = G4lrint(ZZ); - if(Z > maxZ) { return cs; } + if (Z > maxZ) { + return cs; + } // if element was not initialised - + // do initialisation safely for MT mode - if(fCrossSection[Z] == nullptr) { InitialiseForElement(theGamma, Z); } - - //7: rows in the parameterization file; 5: number of parameters - G4int idx = fNShells[Z]*7 - 5; - - energy = std::max(energy, (*(fParamHigh[Z]))[idx-1]); - - G4double x1 = 1.0/energy; - G4double x2 = x1*x1; - G4double x3 = x2*x1; - + if (fCrossSection[Z] == nullptr) { + InitialiseForElement(theGamma, Z); + } + + // 7: rows in the parameterization file; 5: number of parameters + G4int idx = fNShells[Z] * 7 - 5; + + energy = std::max(energy, (*(fParamHigh[Z]))[idx - 1]); + + G4double x1 = 1.0 / energy; + G4double x2 = x1 * x1; + G4double x3 = x2 * x1; + // high energy parameterisation - if(energy >= (*(fParamHigh[Z]))[0]) { - - G4double x4 = x2*x2; - G4double x5 = x4*x1; - - cs = x1*((*(fParamHigh[Z]))[idx] + x1*(*(fParamHigh[Z]))[idx+1] - + x2*(*(fParamHigh[Z]))[idx+2] + x3*(*(fParamHigh[Z]))[idx+3] - + x4*(*(fParamHigh[Z]))[idx+4]+ x5*(*(fParamHigh[Z]))[idx+5]); - + if (energy >= (*(fParamHigh[Z]))[0]) { + G4double x4 = x2 * x2; + G4double x5 = x4 * x1; + + cs = x1 + * ((*(fParamHigh[Z]))[idx] + x1 * (*(fParamHigh[Z]))[idx + 1] + + x2 * (*(fParamHigh[Z]))[idx + 2] + x3 * (*(fParamHigh[Z]))[idx + 3] + + x4 * (*(fParamHigh[Z]))[idx + 4] + x5 * (*(fParamHigh[Z]))[idx + 5]); } // low energy parameterisation - else if(energy >= (*(fParamLow[Z]))[0]) { - - G4double x4 = x2*x2; - G4double x5 = x4*x1; //this variable usage can probably be optimized - cs = x1*((*(fParamLow[Z]))[idx] + x1*(*(fParamLow[Z]))[idx+1] - + x2*(*(fParamLow[Z]))[idx+2] + x3*(*(fParamLow[Z]))[idx+3] - + x4*(*(fParamLow[Z]))[idx+4]+ x5*(*(fParamLow[Z]))[idx+5]); - + else if (energy >= (*(fParamLow[Z]))[0]) { + G4double x4 = x2 * x2; + G4double x5 = x4 * x1; // this variable usage can probably be optimized + cs = x1 + * ((*(fParamLow[Z]))[idx] + x1 * (*(fParamLow[Z]))[idx + 1] + + x2 * (*(fParamLow[Z]))[idx + 2] + x3 * (*(fParamLow[Z]))[idx + 3] + + x4 * (*(fParamLow[Z]))[idx + 4] + x5 * (*(fParamLow[Z]))[idx + 5]); } // Tabulated values above k-shell ionization energy - else if(energy >= (*(fParamHigh[Z]))[1]) { - cs = x3*(fCrossSection[Z])->Value(energy); + else if (energy >= (*(fParamHigh[Z]))[1]) { + cs = x3 * (fCrossSection[Z])->Value(energy); } // Tabulated values below k-shell ionization energy - else - { - cs = x3*(fCrossSectionLE[Z])->Value(energy); - } + else { + cs = x3 * (fCrossSectionLE[Z])->Value(energy); + } if (verboseLevel > 1) { - G4cout << "G4LivermorePhotoElectricModel: E(keV)= " << energy/keV - << " Z= " << Z << " cross(barn)= " << cs/barn << G4endl; + G4cout << "G4LivermorePhotoElectricModel: E(keV)= " << energy / keV << " Z= " << Z + << " cross(barn)= " << cs / barn << G4endl; } return cs; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void -G4LivermorePhotoElectricModel::SampleSecondaries( - std::vector* fvect, - const G4MaterialCutsCouple* couple, - const G4DynamicParticle* aDynamicGamma, - G4double, G4double) +void G4LivermorePhotoElectricModel::SampleSecondaries(std::vector* fvect, + const G4MaterialCutsCouple* couple, + const G4DynamicParticle* aDynamicGamma, + G4double, G4double) { G4double gammaEnergy = aDynamicGamma->GetKineticEnergy(); if (verboseLevel > 3) { G4cout << "G4LivermorePhotoElectricModel::SampleSecondaries() Egamma(keV)= " - << gammaEnergy/keV << G4endl; + << gammaEnergy / keV << G4endl; } - + // kill incident photon fParticleChange->ProposeTrackStatus(fStopAndKill); fParticleChange->SetProposedKineticEnergy(0.); - + // low-energy photo-effect in water - full absorption const G4Material* material = couple->GetMaterial(); - if(fWater && (material == fWater || - material->GetBaseMaterial() == fWater)) { - if(gammaEnergy <= fWaterEnergyLimit) { + if (fWater && (material == fWater || material->GetBaseMaterial() == fWater)) { + if (gammaEnergy <= fWaterEnergyLimit) { fParticleChange->ProposeLocalEnergyDeposit(gammaEnergy); return; } } - + // Returns the normalized direction of the momentum G4ThreeVector photonDirection = aDynamicGamma->GetMomentumDirection(); - + // Select randomly one element in the current material const G4Element* elm = SelectRandomAtom(material, theGamma, gammaEnergy); - G4int Z = elm->GetZasInt(); - + G4int Z = std::min(elm->GetZasInt(), maxZ); + // Select the ionised shell in the current atom according to shell - // cross sections - // G4cout << "Select random shell Z= " << Z << G4endl; - if(Z > maxZ) { Z = maxZ; } - - // element was not initialised gamma should be absorbed - if(fCrossSection[Z] == nullptr) { + // cross sections + + // If element was not initialised gamma should be absorbed + if (fCrossSection[Z] == nullptr) { fParticleChange->ProposeLocalEnergyDeposit(gammaEnergy); return; } - + // SAMPLING OF THE SHELL INDEX std::size_t shellIdx = 0; std::size_t nn = fNShellsUsed[Z]; - if(nn > 1) - { - if(gammaEnergy >= (*(fParamHigh[Z]))[0]) - { - G4double x1 = 1.0/gammaEnergy; - G4double x2 = x1*x1; - G4double x3 = x2*x1; - G4double x4 = x3*x1; - G4double x5 = x4*x1; - std::size_t idx = nn*7 - 5; - // when do sampling common factors are not taken into account - // so cross section is not real - - G4double rand=G4UniformRand(); - G4double cs0 = rand*( (*(fParamHigh[Z]))[idx] - + x1*(*(fParamHigh[Z]))[idx+1] - + x2*(*(fParamHigh[Z]))[idx+2] - + x3*(*(fParamHigh[Z]))[idx+3] - + x4*(*(fParamHigh[Z]))[idx+4] - + x5*(*(fParamHigh[Z]))[idx+5]); - - for(shellIdx=0; shellIdx (*(fParamHigh[Z]))[idx-1]) - { - G4double cs = - (*(fParamHigh[Z]))[idx] - + x1*(*(fParamHigh[Z]))[idx+1] - + x2*(*(fParamHigh[Z]))[idx+2] - + x3*(*(fParamHigh[Z]))[idx+3] - + x4*(*(fParamHigh[Z]))[idx+4] - + x5*(*(fParamHigh[Z]))[idx+5]; - - if(cs >= cs0) { break; } - } - } - if(shellIdx >= nn) { shellIdx = nn-1; } + if (nn > 1) { + if (gammaEnergy >= (*(fParamHigh[Z]))[0]) { + G4double x1 = 1.0 / gammaEnergy; + G4double x2 = x1 * x1; + G4double x3 = x2 * x1; + G4double x4 = x3 * x1; + G4double x5 = x4 * x1; + std::size_t idx = nn * 7 - 5; + // when do sampling common factors are not taken into account + // so cross section is not real + + G4double rand = G4UniformRand(); + G4double cs0 = rand + * ((*(fParamHigh[Z]))[idx] + x1 * (*(fParamHigh[Z]))[idx + 1] + + x2 * (*(fParamHigh[Z]))[idx + 2] + x3 * (*(fParamHigh[Z]))[idx + 3] + + x4 * (*(fParamHigh[Z]))[idx + 4] + x5 * (*(fParamHigh[Z]))[idx + 5]); + + for (shellIdx = 0; shellIdx < nn; ++shellIdx) { + idx = shellIdx * 7 + 2; + if (gammaEnergy > (*(fParamHigh[Z]))[idx - 1]) { + G4double cs = (*(fParamHigh[Z]))[idx] + x1 * (*(fParamHigh[Z]))[idx + 1] + + x2 * (*(fParamHigh[Z]))[idx + 2] + x3 * (*(fParamHigh[Z]))[idx + 3] + + x4 * (*(fParamHigh[Z]))[idx + 4] + x5 * (*(fParamHigh[Z]))[idx + 5]; + + if (cs >= cs0) { + break; + } } - else if(gammaEnergy >= (*(fParamLow[Z]))[0]) - { - G4double x1 = 1.0/gammaEnergy; - G4double x2 = x1*x1; - G4double x3 = x2*x1; - G4double x4 = x3*x1; - G4double x5 = x4*x1; - std::size_t idx = nn*7 - 5; - // when do sampling common factors are not taken into account - // so cross section is not real - G4double cs0 = G4UniformRand()*((*(fParamLow[Z]))[idx] - + x1*(*(fParamLow[Z]))[idx+1] - + x2*(*(fParamLow[Z]))[idx+2] - + x3*(*(fParamLow[Z]))[idx+3] - + x4*(*(fParamLow[Z]))[idx+4] - + x5*(*(fParamLow[Z]))[idx+5]); - for(shellIdx=0; shellIdx (*(fParamLow[Z]))[idx-1]) - { - G4double cs = (*(fParamLow[Z]))[idx] + x1*(*(fParamLow[Z]))[idx+1] - + x2*(*(fParamLow[Z]))[idx+2] + x3*(*(fParamLow[Z]))[idx+3] - + x4*(*(fParamLow[Z]))[idx+4]+ x5*(*(fParamLow[Z]))[idx+5]; - if(cs >= cs0) { break; } - } - } - if(shellIdx >= nn) {shellIdx = nn-1;} + } + if (shellIdx >= nn) { + shellIdx = nn - 1; + } + } + else if (gammaEnergy >= (*(fParamLow[Z]))[0]) { + G4double x1 = 1.0 / gammaEnergy; + G4double x2 = x1 * x1; + G4double x3 = x2 * x1; + G4double x4 = x3 * x1; + G4double x5 = x4 * x1; + std::size_t idx = nn * 7 - 5; + // when do sampling common factors are not taken into account + // so cross section is not real + G4double cs0 = G4UniformRand() + * ((*(fParamLow[Z]))[idx] + x1 * (*(fParamLow[Z]))[idx + 1] + + x2 * (*(fParamLow[Z]))[idx + 2] + x3 * (*(fParamLow[Z]))[idx + 3] + + x4 * (*(fParamLow[Z]))[idx + 4] + x5 * (*(fParamLow[Z]))[idx + 5]); + for (shellIdx = 0; shellIdx < nn; ++shellIdx) { + idx = shellIdx * 7 + 2; + if (gammaEnergy > (*(fParamLow[Z]))[idx - 1]) { + G4double cs = (*(fParamLow[Z]))[idx] + x1 * (*(fParamLow[Z]))[idx + 1] + + x2 * (*(fParamLow[Z]))[idx + 2] + x3 * (*(fParamLow[Z]))[idx + 3] + + x4 * (*(fParamLow[Z]))[idx + 4] + x5 * (*(fParamLow[Z]))[idx + 5]; + if (cs >= cs0) { + break; + } } - else - { - // when do sampling common factors are not taken into account - // so cross section is not real - G4double cs = G4UniformRand(); - - if(gammaEnergy >= (*(fParamHigh[Z]))[1]) { - //above K-shell binding energy - cs*= (fCrossSection[Z])->Value(gammaEnergy); - } - else - { - //below K-shell binding energy - cs *= (fCrossSectionLE[Z])->Value(gammaEnergy); - } - - for(G4int j=0; j<(G4int)nn; ++j) { - - shellIdx = (std::size_t)fShellCrossSection->GetComponentID(Z, j); - if(gammaEnergy > (*(fParamLow[Z]))[7*shellIdx+1]) { - cs -= fShellCrossSection->GetValueForComponent(Z, j, gammaEnergy); - } - if(cs <= 0.0 || j+1 == (G4int)nn) {break;} - } + } + if (shellIdx >= nn) { + shellIdx = nn - 1; + } + } + else { + // when do sampling common factors are not taken into account + // so cross section is not real + G4double cs = G4UniformRand(); + + if (gammaEnergy >= (*(fParamHigh[Z]))[1]) { + // above K-shell binding energy + cs *= (fCrossSection[Z])->Value(gammaEnergy); + } + else { + // below K-shell binding energy + cs *= (fCrossSectionLE[Z])->Value(gammaEnergy); + } + + for (G4int j = 0; j < (G4int)nn; ++j) { + shellIdx = (std::size_t)fShellCrossSection->GetComponentID(Z, j); + if (gammaEnergy > (*(fParamLow[Z]))[7 * shellIdx + 1]) { + cs -= fShellCrossSection->GetValueForComponent(Z, j, gammaEnergy); } + if (cs <= 0.0 || j + 1 == (G4int)nn) { + break; + } + } } + } // END: SAMPLING OF THE SHELL - - G4double bindingEnergy = (*(fParamHigh[Z]))[shellIdx*7 + 1]; + + G4double bindingEnergy = (*(fParamHigh[Z]))[shellIdx * 7 + 1]; const G4AtomicShell* shell = nullptr; - + // no de-excitation from the last shell - if(fDeexcitationActive && shellIdx + 1 < nn) { - G4AtomicShellEnumerator as = G4AtomicShellEnumerator(shellIdx); + if (fDeexcitationActive && shellIdx + 1 < nn) { + auto as = G4AtomicShellEnumerator(shellIdx); shell = fAtomDeexcitation->GetAtomicShell(Z, as); } - + // If binding energy of the selected shell is larger than photon energy // do not generate secondaries - if(gammaEnergy < bindingEnergy) { - fParticleChange->ProposeLocalEnergyDeposit(gammaEnergy); + if (gammaEnergy < bindingEnergy) { + fParticleChange->ProposeLocalEnergyDeposit(gammaEnergy); return; } - + // Primary outcoming electron G4double eKineticEnergy = gammaEnergy - bindingEnergy; G4double edep = bindingEnergy; - + // Calculate direction of the photoelectron - G4ThreeVector electronDirection = - GetAngularDistribution()->SampleDirection(aDynamicGamma, - eKineticEnergy, - (G4int)shellIdx, - couple->GetMaterial()); - + G4ThreeVector electronDirection = GetAngularDistribution()->SampleDirection( + aDynamicGamma, eKineticEnergy, (G4int)shellIdx, couple->GetMaterial()); + // The electron is created - G4DynamicParticle* electron = new G4DynamicParticle (theElectron, - electronDirection, - eKineticEnergy); + auto electron = new G4DynamicParticle(theElectron, electronDirection, eKineticEnergy); fvect->push_back(electron); - + // Sample deexcitation - if(shell) { + if (shell) { G4int index = couple->GetIndex(); - if(fAtomDeexcitation->CheckDeexcitationActiveRegion(index)) { + if (fAtomDeexcitation->CheckDeexcitationActiveRegion(index)) { std::size_t nbefore = fvect->size(); - + fAtomDeexcitation->GenerateParticles(fvect, shell, Z, index); std::size_t nafter = fvect->size(); - if(nafter > nbefore) { - G4double esec = 0.0; - for (std::size_t j=nbefore; jGetKineticEnergy(); - if(esec + e > edep) { - // correct energy in order to have energy balance - e = edep - esec; - ((*fvect)[j])->SetKineticEnergy(e); - esec += e; - // delete the rest of secondaries (should not happens) - for (std::size_t jj=nafter-1; jj>j; --jj) { - delete (*fvect)[jj]; - fvect->pop_back(); - } - break; - } - esec += e; - } - edep -= esec; + if (nafter > nbefore) { + G4double esec = 0.0; + for (std::size_t j = nbefore; j < nafter; ++j) { + G4double e = ((*fvect)[j])->GetKineticEnergy(); + if (esec + e > edep) { + // correct energy in order to have energy balance + e = edep - esec; + ((*fvect)[j])->SetKineticEnergy(e); + esec += e; + // delete the rest of secondaries (should not happens) + for (std::size_t jj = nafter - 1; jj > j; --jj) { + delete (*fvect)[jj]; + fvect->pop_back(); + } + break; + } + esec += e; + } + edep -= esec; } } } // energy balance - excitation energy left - if(edep > 0.0) { + if (edep > 0.0) { fParticleChange->ProposeLocalEnergyDeposit(edep); } } @@ -495,214 +466,236 @@ G4LivermorePhotoElectricModel::SampleSecondaries( const G4String& G4LivermorePhotoElectricModel::FindDirectoryPath() { - // check environment variable - // build the complete string identifying the file with the data set - if(fDataDirectory.empty()) { - const char* path = G4FindDataDir("G4LEDATA"); - if (path) { - std::ostringstream ost; - if(G4EmParameters::Instance()->LivermoreDataDir() =="livermore"){ - ost << path << "/livermore/phot_epics2014/"; - }else{ - ost << path << "/epics2017/phot/"; - } - - fDataDirectory = ost.str(); - } else { - G4Exception("G4SeltzerBergerModel::FindDirectoryPath()","em0006", - FatalException, - "Environment variable G4LEDATA not defined"); + // no check in this method - environment variable is check by utility + if (fDataDirectory.empty()) { + auto param = G4EmParameters::Instance(); + std::ostringstream ost; + if (param->LivermoreDataDir() == "livermore") { + ost << param->GetDirLEDATA() << "/livermore/phot_epics2014/"; + } + else { + ost << param->GetDirLEDATA() << "/epics2017/phot/"; } + fDataDirectory = ost.str(); } return fDataDirectory; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4LivermorePhotoElectricModel::ReadData(G4int Z) +void G4LivermorePhotoElectricModel::ReadData(G4int ZZ) { - if (verboseLevel > 1) - { - G4cout << "Calling ReadData() of G4LivermorePhotoElectricModel" - << G4endl; - } - - if(fCrossSection[Z]!= nullptr) { return; } - + if (verboseLevel > 1) { + G4cout << "Calling ReadData() of G4LivermorePhotoElectricModel for Z=" << ZZ << G4endl; + } + G4int Z = std::min(ZZ, maxZ); + + if (fCrossSection[Z] != nullptr) { + return; + } + // spline for photoeffect total x-section above K-shell when using EPDL97 // but below the parameterized ones - if(G4EmParameters::Instance()->LivermoreDataDir() =="livermore"){ + if (G4EmParameters::Instance()->LivermoreDataDir() == "livermore") { fCrossSection[Z] = new G4PhysicsFreeVector(true); - }else{ + } + else { fCrossSection[Z] = new G4PhysicsFreeVector(); } + + // fDataDirectory will be defined after these lines std::ostringstream ost; - ost << FindDirectoryPath() << "pe-cs-" << Z <<".dat"; + ost << FindDirectoryPath() << "pe-cs-" << Z << ".dat"; std::ifstream fin(ost.str().c_str()); - if( !fin.is_open()) { + if (!fin.is_open()) { G4ExceptionDescription ed; - ed << "G4LivermorePhotoElectricModel data file <" << ost.str().c_str() - << "> is not opened!" << G4endl; - G4Exception("G4LivermorePhotoElectricModel::ReadData()", - "em0003",FatalException, - ed,"G4LEDATA version should be G4EMLOW8.0 or later."); + ed << "G4LivermorePhotoElectricModel data file <" << ost.str().c_str() << "> is not opened!" + << G4endl; + G4Exception("G4LivermorePhotoElectricModel::ReadData()", "em0003", FatalException, ed, + "G4LEDATA version should be G4EMLOW8.0 or later."); return; - } - if(verboseLevel > 3) { - G4cout << "File " << ost.str().c_str() - << " is opened by G4LivermorePhotoElectricModel" << G4endl; + } + if (verboseLevel > 3) { + G4cout << "File " << ost.str().c_str() << " is opened by G4LivermorePhotoElectricModel" + << G4endl; } fCrossSection[Z]->Retrieve(fin, true); fCrossSection[Z]->ScaleVector(MeV, barn); fCrossSection[Z]->FillSecondDerivatives(); fin.close(); - + // read high-energy fit parameters fParamHigh[Z] = new std::vector; G4int n1 = 0; G4int n2 = 0; G4double x; std::ostringstream ost1; - ost1 << fDataDirectory << "pe-high-" << Z <<".dat"; + ost1 << fDataDirectory << "pe-high-" << Z << ".dat"; std::ifstream fin1(ost1.str().c_str()); - if( !fin1.is_open()) { + if (!fin1.is_open()) { G4ExceptionDescription ed; - ed << "G4LivermorePhotoElectricModel data file <" << ost1.str().c_str() - << "> is not opened!" << G4endl; - G4Exception("G4LivermorePhotoElectricModel::ReadData()", - "em0003",FatalException, - ed,"G4LEDATA version should be G4EMLOW7.2 or later."); + ed << "G4LivermorePhotoElectricModel data file <" << ost1.str().c_str() << "> is not opened!" + << G4endl; + G4Exception("G4LivermorePhotoElectricModel::ReadData()", "em0003", FatalException, ed, + "G4LEDATA version should be G4EMLOW7.2 or later."); return; } - if(verboseLevel > 3) { - G4cout << "File " << ost1.str().c_str() - << " is opened by G4LivermorePhotoElectricModel" << G4endl; + if (verboseLevel > 3) { + G4cout << "File " << ost1.str().c_str() << " is opened by G4LivermorePhotoElectricModel" + << G4endl; } fin1 >> n1; - if(fin1.fail()) { return; } - if(0 > n1 || n1 >= INT_MAX) { n1 = 0; } - + if (fin1.fail()) { + return; + } + if (0 > n1 || n1 >= INT_MAX) { + n1 = 0; + } + fin1 >> n2; - if(fin1.fail()) { return; } - if(0 > n2 || n2 >= INT_MAX) { n2 = 0; } - + if (fin1.fail()) { + return; + } + if (0 > n2 || n2 >= INT_MAX) { + n2 = 0; + } + fin1 >> x; - if(fin1.fail()) { return; } - + if (fin1.fail()) { + return; + } + fNShells[Z] = n1; - fParamHigh[Z]->reserve(7*n1+1); - fParamHigh[Z]->push_back(x*MeV); - for(G4int i=0; ireserve(7 * n1 + 1); + fParamHigh[Z]->push_back(x * MeV); + for (G4int i = 0; i < n1; ++i) { + for (G4int j = 0; j < 7; ++j) { fin1 >> x; - if(0 == j) { x *= MeV; } - else { x *= barn; } + if (0 == j) { + x *= MeV; + } + else { + x *= barn; + } fParamHigh[Z]->push_back(x); } } fin1.close(); - + // read low-energy fit parameters fParamLow[Z] = new std::vector; G4int n1_low = 0; G4int n2_low = 0; G4double x_low; std::ostringstream ost1_low; - ost1_low << fDataDirectory << "pe-low-" << Z <<".dat"; + ost1_low << fDataDirectory << "pe-low-" << Z << ".dat"; std::ifstream fin1_low(ost1_low.str().c_str()); - if( !fin1_low.is_open()) { + if (!fin1_low.is_open()) { G4ExceptionDescription ed; ed << "G4LivermorePhotoElectricModel data file <" << ost1_low.str().c_str() << "> is not opened!" << G4endl; - G4Exception("G4LivermorePhotoElectricModel::ReadData()", - "em0003",FatalException, - ed,"G4LEDATA version should be G4EMLOW8.0 or later."); + G4Exception("G4LivermorePhotoElectricModel::ReadData()", "em0003", FatalException, ed, + "G4LEDATA version should be G4EMLOW8.0 or later."); return; - } - if(verboseLevel > 3) { - G4cout << "File " << ost1_low.str().c_str() - << " is opened by G4LivermorePhotoElectricModel" << G4endl; + } + if (verboseLevel > 3) { + G4cout << "File " << ost1_low.str().c_str() << " is opened by G4LivermorePhotoElectricModel" + << G4endl; } fin1_low >> n1_low; - if(fin1_low.fail()) { return; } - if(0 > n1_low || n1_low >= INT_MAX) { n1_low = 0; } - + if (fin1_low.fail()) { + return; + } + if (0 > n1_low || n1_low >= INT_MAX) { + n1_low = 0; + } + fin1_low >> n2_low; - if(fin1_low.fail()) { return; } - if(0 > n2_low || n2_low >= INT_MAX) { n2_low = 0; } - + if (fin1_low.fail()) { + return; + } + if (0 > n2_low || n2_low >= INT_MAX) { + n2_low = 0; + } + fin1_low >> x_low; - if(fin1_low.fail()) { return; } - + if (fin1_low.fail()) { + return; + } + fNShells[Z] = n1_low; - fParamLow[Z]->reserve(7*n1_low+1); - fParamLow[Z]->push_back(x_low*MeV); - for(G4int i=0; ireserve(7 * n1_low + 1); + fParamLow[Z]->push_back(x_low * MeV); + for (G4int i = 0; i < n1_low; ++i) { + for (G4int j = 0; j < 7; ++j) { fin1_low >> x_low; - if(0 == j) { x_low *= MeV; } - else { x_low *= barn; } + if (0 == j) { + x_low *= MeV; + } + else { + x_low *= barn; + } fParamLow[Z]->push_back(x_low); } } fin1_low.close(); - + // there is a possibility to use only main shells - if(nShellLimit < n2) { n2 = nShellLimit; } - fShellCrossSection->InitialiseForComponent(Z, n2);//number of shells + if (nShellLimit < n2) { + n2 = nShellLimit; + } + fShellCrossSection->InitialiseForComponent(Z, n2); // number of shells fNShellsUsed[Z] = n2; - - if(1 < n2) { + + if (1 < n2) { std::ostringstream ost2; - ost2 << fDataDirectory << "pe-ss-cs-" << Z <<".dat"; + ost2 << fDataDirectory << "pe-ss-cs-" << Z << ".dat"; std::ifstream fin2(ost2.str().c_str()); - if( !fin2.is_open()) { + if (!fin2.is_open()) { G4ExceptionDescription ed; - ed << "G4LivermorePhotoElectricModel data file <" << ost2.str().c_str() - << "> is not opened!" << G4endl; - G4Exception("G4LivermorePhotoElectricModel::ReadData()", - "em0003",FatalException, - ed,"G4LEDATA version should be G4EMLOW7.2 or later."); + ed << "G4LivermorePhotoElectricModel data file <" << ost2.str().c_str() << "> is not opened!" + << G4endl; + G4Exception("G4LivermorePhotoElectricModel::ReadData()", "em0003", FatalException, ed, + "G4LEDATA version should be G4EMLOW7.2 or later."); return; } - if(verboseLevel > 3) { - G4cout << "File " << ost2.str().c_str() - << " is opened by G4LivermorePhotoElectricModel" << G4endl; + if (verboseLevel > 3) { + G4cout << "File " << ost2.str().c_str() << " is opened by G4LivermorePhotoElectricModel" + << G4endl; } - + G4int n3, n4; G4double y; - for(G4int i=0; i> x >> y >> n3 >> n4; - G4PhysicsFreeVector* v = new G4PhysicsFreeVector(n3, x, y); - for(G4int j=0; j> x >> y; - v->PutValues(j, x*MeV, y*barn); + auto v = new G4PhysicsFreeVector(n3, x, y); + for (G4int j = 0; j < n3; ++j) { + fin2 >> x >> y; + v->PutValues(j, x * MeV, y * barn); } fShellCrossSection->AddComponent(Z, n4, v); } fin2.close(); } - + // no spline for photoeffect total x-section below K-shell - if(1 < fNShells[Z]) { + if (1 < fNShells[Z]) { fCrossSectionLE[Z] = new G4PhysicsFreeVector(); std::ostringstream ost3; - ost3 << fDataDirectory << "pe-le-cs-" << Z <<".dat"; + ost3 << fDataDirectory << "pe-le-cs-" << Z << ".dat"; std::ifstream fin3(ost3.str().c_str()); - if( !fin3.is_open()) { + if (!fin3.is_open()) { G4ExceptionDescription ed; - ed << "G4LivermorePhotoElectricModel data file <" << ost3.str().c_str() - << "> is not opened!" << G4endl; - G4Exception("G4LivermorePhotoElectricModel::ReadData()", - "em0003",FatalException, - ed,"G4LEDATA version should be G4EMLOW8.0 or later."); + ed << "G4LivermorePhotoElectricModel data file <" << ost3.str().c_str() << "> is not opened!" + << G4endl; + G4Exception("G4LivermorePhotoElectricModel::ReadData()", "em0003", FatalException, ed, + "G4LEDATA version should be G4EMLOW8.0 or later."); return; } - if(verboseLevel > 3) { - G4cout << "File " << ost3.str().c_str() - << " is opened by G4LivermorePhotoElectricModel" << G4endl; + if (verboseLevel > 3) { + G4cout << "File " << ost3.str().c_str() << " is opened by G4LivermorePhotoElectricModel" + << G4endl; } fCrossSectionLE[Z]->Retrieve(fin3, true); fCrossSectionLE[Z]->ScaleVector(MeV, barn); @@ -714,33 +707,34 @@ void G4LivermorePhotoElectricModel::ReadData(G4int Z) G4double G4LivermorePhotoElectricModel::GetBindingEnergy(G4int Z, G4int shell) { - if(Z < 1 || Z > maxZ) { return -1;} //If Z is out of the supported return 0 - //If necessary load data for Z + if (Z < 1 || Z > maxZ) { + return -1; + } // If Z is out of the supported return 0 + // If necessary load data for Z InitialiseForElement(theGamma, Z); - if(fCrossSection[Z] == nullptr || shell < 0 || shell >= fNShellsUsed[Z]) { return -1; } + if (fCrossSection[Z] == nullptr || shell < 0 || shell >= fNShellsUsed[Z]) { + return -1; + } - if(Z>2) + if (Z > 2) { return fShellCrossSection->GetComponentDataByIndex(Z, shell)->Energy(0); - else - return fCrossSection[Z]->Energy(0); + } + else { + return fCrossSection[Z]->Energy(0); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void G4LivermorePhotoElectricModel::InitialiseForElement( - const G4ParticleDefinition*, G4int Z) +void G4LivermorePhotoElectricModel::InitialiseForElement(const G4ParticleDefinition*, G4int Z) { if (fCrossSection[Z] == nullptr) { -#ifdef G4MULTITHREADED - G4MUTEXLOCK(&livPhotoeffMutex); + G4AutoLock l(&livPhotoeffMutex); if (fCrossSection[Z] == nullptr) { -#endif ReadData(Z); -#ifdef G4MULTITHREADED } - G4MUTEXUNLOCK(&livPhotoeffMutex); -#endif - } + l.unlock(); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/source/processes/electromagnetic/lowenergy/src/G4LivermoreRayleighModel.cc b/source/processes/electromagnetic/lowenergy/src/G4LivermoreRayleighModel.cc index ff74ca529af..e688dbead5a 100644 --- a/source/processes/electromagnetic/lowenergy/src/G4LivermoreRayleighModel.cc +++ b/source/processes/electromagnetic/lowenergy/src/G4LivermoreRayleighModel.cc @@ -29,51 +29,49 @@ // #include "G4LivermoreRayleighModel.hh" -#include "G4SystemOfUnits.hh" -#include "G4RayleighAngularGenerator.hh" -#include "G4EmParameters.hh" + #include "G4AutoLock.hh" +#include "G4EmParameters.hh" +#include "G4RayleighAngularGenerator.hh" +#include "G4SystemOfUnits.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -using namespace std; -namespace { G4Mutex LivermoreRayleighModelMutex = G4MUTEX_INITIALIZER; } - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... +namespace +{ +G4Mutex LivermoreRayleighModelMutex = G4MUTEX_INITIALIZER; +} G4PhysicsFreeVector* G4LivermoreRayleighModel::dataCS[] = {nullptr}; +G4String G4LivermoreRayleighModel::gDataDirectory = ""; + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4LivermoreRayleighModel::G4LivermoreRayleighModel() - :G4VEmModel("LivermoreRayleigh"),maxZ(100),isInitialised(false) +G4LivermoreRayleighModel::G4LivermoreRayleighModel() : G4VEmModel("LivermoreRayleigh") { fParticleChange = nullptr; - lowEnergyLimit = 10 * CLHEP::eV; - + lowEnergyLimit = 10 * CLHEP::eV; + SetAngularDistribution(new G4RayleighAngularGenerator()); - - verboseLevel= 0; + + verboseLevel = 0; // Verbosity scale for debugging purposes: - // 0 = nothing + // 0 = nothing // 1 = calculation of cross sections, file openings... // 2 = entering in methods - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4LivermoreRayleighModel is constructed " << G4endl; } - } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4LivermoreRayleighModel::~G4LivermoreRayleighModel() { - if(IsMaster()) - { - for(G4int i = 0; i <= maxZ; ++i) - { - if(dataCS[i]) - { + if (IsMaster()) { + for (G4int i = 0; i <= maxZ; ++i) { + if (nullptr != dataCS[i]) { delete dataCS[i]; dataCS[i] = nullptr; } @@ -84,191 +82,183 @@ G4LivermoreRayleighModel::~G4LivermoreRayleighModel() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... void G4LivermoreRayleighModel::Initialise(const G4ParticleDefinition* particle, - const G4DataVector& cuts) + const G4DataVector& cuts) { - if (verboseLevel > 1) - { + if (verboseLevel > 1) { G4cout << "Calling Initialise() of G4LivermoreRayleighModel." << G4endl - << "Energy range: " - << LowEnergyLimit() / eV << " eV - " - << HighEnergyLimit() / GeV << " GeV" - << G4endl; + << "Energy range: " << LowEnergyLimit() / eV << " eV - " << HighEnergyLimit() / GeV + << " GeV" << G4endl; } - if(IsMaster()) { + if (IsMaster()) { // Initialise element selector InitialiseElementSelectors(particle, cuts); // Access to elements - const char* path = G4FindDataDir("G4LEDATA"); const G4ElementTable* elemTable = G4Element::GetElementTable(); - std::size_t numElems = (*elemTable).size(); - for(std::size_t ie = 0; ie < numElems; ++ie) - { + std::size_t numElems = (*elemTable).size(); + for (std::size_t ie = 0; ie < numElems; ++ie) { const G4Element* elem = (*elemTable)[ie]; - const G4int Z = std::min(maxZ, elem->GetZasInt()); - if(dataCS[Z] == nullptr) - { - ReadData(Z, path); + const G4int Z = std::min(maxZ, elem->GetZasInt()); + if (dataCS[Z] == nullptr) { + ReadData(Z); } } } - if(isInitialised) { return; } + if (isInitialised) { + return; + } fParticleChange = GetParticleChangeForGamma(); isInitialised = true; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4LivermoreRayleighModel::InitialiseLocal(const G4ParticleDefinition*, - G4VEmModel* masterModel) +void G4LivermoreRayleighModel::InitialiseLocal(const G4ParticleDefinition*, G4VEmModel* masterModel) { SetElementSelectors(masterModel->GetElementSelectors()); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4LivermoreRayleighModel::ReadData(std::size_t Z, const char* path) +const G4String& G4LivermoreRayleighModel::FindDirectoryPath() { - if (verboseLevel > 1) - { - G4cout << "Calling ReadData() of G4LivermoreRayleighModel" - << G4endl; + // no check in this method - environment variable is check by utility + if (gDataDirectory.empty()) { + auto param = G4EmParameters::Instance(); + std::ostringstream ost; + if (param->LivermoreDataDir() == "livermore") { + ost << param->GetDirLEDATA() << "/livermore/rayl/"; + } + else { + ost << param->GetDirLEDATA() << "/epics2017/rayl/"; + } + gDataDirectory = ost.str(); } + return gDataDirectory; +} - if(nullptr != dataCS[Z]) { return; } - - const char* datadir = path; - - if(datadir == nullptr) - { - datadir = G4FindDataDir("G4LEDATA"); - if(datadir == nullptr) - { - G4Exception("G4LivermoreRayleighModelModel::ReadData()","em0006", - FatalException, - "Environment variable G4LEDATA not defined"); - return; - } +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +void G4LivermoreRayleighModel::ReadData(const G4int ZZ) +{ + if (verboseLevel > 1) { + G4cout << "Calling ReadData() of G4LivermoreRayleighModel for Z=" << ZZ << G4endl; + } + const G4int Z = std::min(ZZ, maxZ); + + if (nullptr != dataCS[Z]) { + return; } + dataCS[Z] = new G4PhysicsFreeVector(); - + std::ostringstream ostCS; - if(G4EmParameters::Instance()->LivermoreDataDir() == "livermore"){ - ostCS << datadir << "/livermore/rayl/re-cs-" << Z <<".dat"; - }else{ - ostCS << datadir << "/epics2017/rayl/re-cs-" << Z <<".dat"; - } + ostCS << FindDirectoryPath() << "re-cs-" << Z << ".dat"; std::ifstream finCS(ostCS.str().c_str()); - - if( !finCS .is_open() ) - { + + if (!finCS.is_open()) { G4ExceptionDescription ed; - ed << "G4LivermoreRayleighModel data file <" << ostCS.str().c_str() - << "> is not opened!" << G4endl; - G4Exception("G4LivermoreRayleighModel::ReadData()","em0003",FatalException, - ed,"G4LEDATA version should be G4EMLOW8.0 or later."); + ed << "G4LivermoreRayleighModel data file <" << ostCS.str().c_str() << "> is not opened!" + << G4endl; + G4Exception("G4LivermoreRayleighModel::ReadData()", "em0003", FatalException, ed, + "G4LEDATA version should be G4EMLOW8.0 or later."); return; - } - else - { - if(verboseLevel > 3) { - G4cout << "File " << ostCS.str() - << " is opened by G4LivermoreRayleighModel" << G4endl; + } + else { + if (verboseLevel > 3) { + G4cout << "File " << ostCS.str() << " is opened by G4LivermoreRayleighModel" << G4endl; } dataCS[Z]->Retrieve(finCS, true); - } + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4double G4LivermoreRayleighModel::ComputeCrossSectionPerAtom( - const G4ParticleDefinition*, - G4double GammaEnergy, - G4double Z, G4double, - G4double, G4double) +G4double G4LivermoreRayleighModel::ComputeCrossSectionPerAtom(const G4ParticleDefinition*, + G4double GammaEnergy, G4double Z, + G4double, G4double, G4double) { - if (verboseLevel > 1) - { - G4cout << "G4LivermoreRayleighModel::ComputeCrossSectionPerAtom()" - << G4endl; + if (verboseLevel > 1) { + G4cout << "G4LivermoreRayleighModel::ComputeCrossSectionPerAtom()" << G4endl; + } + + if (GammaEnergy < lowEnergyLimit) { + return 0.0; } - if(GammaEnergy < lowEnergyLimit) { return 0.0; } - G4double xs = 0.0; G4int intZ = G4lrint(Z); - if(intZ < 1 || intZ > maxZ) { return xs; } + if (intZ < 1 || intZ > maxZ) { + return xs; + } G4PhysicsFreeVector* pv = dataCS[intZ]; // if element was not initialised // do initialisation safely for MT mode - if(nullptr == pv) { - InitialiseForElement(0, intZ); + if (nullptr == pv) { + InitialiseForElement(nullptr, intZ); pv = dataCS[intZ]; - if(nullptr == pv) { return xs; } + if (nullptr == pv) { + return xs; + } } - G4int n = G4int(pv->GetVectorLength() - 1); - G4double e = GammaEnergy/MeV; - if(e >= pv->Energy(n)) { - xs = (*pv)[n]/(e*e); - } else if(e >= pv->Energy(0)) { - xs = pv->Value(e)/(e*e); + auto n = G4int(pv->GetVectorLength() - 1); + G4double e = GammaEnergy / MeV; + if (e >= pv->Energy(n)) { + xs = (*pv)[n] / (e * e); + } + else if (e >= pv->Energy(0)) { + xs = pv->Value(e) / (e * e); } - if(verboseLevel > 1) - { - G4cout << "****** DEBUG: tcs value for Z=" << Z << " at energy (MeV)=" - << e << G4endl; - G4cout << " cs (Geant4 internal unit)=" << xs << G4endl; - G4cout << " -> first E*E*cs value in CS data file (iu) =" << (*pv)[0] - << G4endl; - G4cout << " -> last E*E*cs value in CS data file (iu) =" << (*pv)[n] - << G4endl; - G4cout << "*********************************************************" - << G4endl; + if (verboseLevel > 1) { + G4cout << "****** DEBUG: tcs value for Z=" << Z << " at energy (MeV)=" << e << G4endl; + G4cout << " cs (Geant4 internal unit)=" << xs << G4endl; + G4cout << " -> first E*E*cs value in CS data file (iu) =" << (*pv)[0] << G4endl; + G4cout << " -> last E*E*cs value in CS data file (iu) =" << (*pv)[n] << G4endl; + G4cout << "*********************************************************" << G4endl; } return xs; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -void G4LivermoreRayleighModel::SampleSecondaries( - std::vector*, - const G4MaterialCutsCouple* couple, - const G4DynamicParticle* aDynamicGamma, - G4double, G4double) +void G4LivermoreRayleighModel::SampleSecondaries(std::vector*, + const G4MaterialCutsCouple* couple, + const G4DynamicParticle* aDynamicGamma, G4double, + G4double) { if (verboseLevel > 1) { - G4cout << "Calling SampleSecondaries() of G4LivermoreRayleighModel" - << G4endl; + G4cout << "Calling SampleSecondaries() of G4LivermoreRayleighModel" << G4endl; } G4double photonEnergy0 = aDynamicGamma->GetKineticEnergy(); - + // Select randomly one element in the current material - const G4ParticleDefinition* particle = aDynamicGamma->GetDefinition(); - const G4Element* elm = SelectRandomAtom(couple,particle,photonEnergy0); - G4int Z = G4lrint(elm->GetZ()); - - // Sample the angle of the scattered photon - G4ThreeVector photonDirection = - GetAngularDistribution()->SampleDirection(aDynamicGamma, - photonEnergy0, - Z, couple->GetMaterial()); + const G4ParticleDefinition* particle = aDynamicGamma->GetDefinition(); + const G4Element* elm = SelectRandomAtom(couple, particle, photonEnergy0); + G4int Z = elm->GetZasInt(); + + // Sample the angle of the scattered photon + G4ThreeVector photonDirection = GetAngularDistribution()->SampleDirection( + aDynamicGamma, photonEnergy0, Z, couple->GetMaterial()); fParticleChange->ProposeMomentumDirection(photonDirection); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void -G4LivermoreRayleighModel::InitialiseForElement(const G4ParticleDefinition*, - G4int Z) +void G4LivermoreRayleighModel::InitialiseForElement(const G4ParticleDefinition*, G4int Z) { + if (nullptr != dataCS[Z]) { + return; + } G4AutoLock l(&LivermoreRayleighModelMutex); - if(nullptr == dataCS[Z]) { ReadData(Z); } + if (nullptr == dataCS[Z]) { + ReadData(Z); + } l.unlock(); } diff --git a/source/processes/electromagnetic/lowenergy/src/G4LowEWentzelVIModel.cc b/source/processes/electromagnetic/lowenergy/src/G4LowEWentzelVIModel.cc index b6779343520..405a0b5304b 100644 --- a/source/processes/electromagnetic/lowenergy/src/G4LowEWentzelVIModel.cc +++ b/source/processes/electromagnetic/lowenergy/src/G4LowEWentzelVIModel.cc @@ -52,21 +52,14 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -using namespace std; - G4LowEWentzelVIModel::G4LowEWentzelVIModel() : - G4WentzelVIModel(false,"LowEnWentzelVI") + G4WentzelVIModel(true, "LowEnWentzelVI") { SetSingleScatteringFactor(0.5); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4LowEWentzelVIModel::~G4LowEWentzelVIModel() -{} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - G4double G4LowEWentzelVIModel::ComputeTruePathLengthLimit( const G4Track& track, G4double& currentMinimalStep) diff --git a/source/processes/electromagnetic/muons/GNUmakefile b/source/processes/electromagnetic/muons/GNUmakefile deleted file mode 100644 index 255034bc8a7..00000000000 --- a/source/processes/electromagnetic/muons/GNUmakefile +++ /dev/null @@ -1,31 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for electromagnetic sub-library. John Allison, 25/6/98. -# -------------------------------------------------------------------- - -name := G4muons - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/electromagnetic/standard/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/electromagnetic/muons/History b/source/processes/electromagnetic/muons/History index cdb88bfbd18..8e8fbedde31 100644 --- a/source/processes/electromagnetic/muons/History +++ b/source/processes/electromagnetic/muons/History @@ -6,7 +6,7 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-04-10 V.Ivanchenko (emmuons-V11-00-08) +## 2023-04-10 V.Ivanchenko (emmuons-V11-01-00) - G4MuBremsstrahlung, G4MuPairProduction - fix problem #2531, spline flag was lost for mu-, pi-, K-, and pbar dedx and range tables, the max observed problem was for mu- with momentum ~50 MeV/c, ~5 % biased range diff --git a/source/processes/electromagnetic/pii/GNUmakefile b/source/processes/electromagnetic/pii/GNUmakefile deleted file mode 100644 index 3b0d920ebdb..00000000000 --- a/source/processes/electromagnetic/pii/GNUmakefile +++ /dev/null @@ -1,31 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for processes/directory sub-library. John Allison, 25/6/98. -# -------------------------------------------------------------------- - -name := G4empii - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/electromagnetic/lowenergy/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/electromagnetic/polarisation/GNUmakefile b/source/processes/electromagnetic/polarisation/GNUmakefile deleted file mode 100644 index d8fb679b242..00000000000 --- a/source/processes/electromagnetic/polarisation/GNUmakefile +++ /dev/null @@ -1,36 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for electromagnetic sub-library. John Allison, 25/6/98. -# Modified: -# 19.11.2004 V.Ivanchenko remove obsolete parts -# -------------------------------------------------------------------- - -name := G4empolar - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/electromagnetic/standard/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/electromagnetic/standard/GNUmakefile b/source/processes/electromagnetic/standard/GNUmakefile deleted file mode 100644 index d3dc7ef744f..00000000000 --- a/source/processes/electromagnetic/standard/GNUmakefile +++ /dev/null @@ -1,38 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for electromagnetic sub-library. John Allison, 25/6/98. -# -------------------------------------------------------------------- - -name := G4emstandard - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/materials/include - -ifdef G4LIB_BUILD_ZLIB - CPPFLAGS += -I$(G4BASE)/externals/zlib/include -endif - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/electromagnetic/standard/History b/source/processes/electromagnetic/standard/History index c32e48d4781..010bf620bda 100644 --- a/source/processes/electromagnetic/standard/History +++ b/source/processes/electromagnetic/standard/History @@ -6,27 +6,96 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-06-13 V.Ivanchenko (emstand-V11-00-24) -- G4LindhardSorensenIonModel - do not try to use ICRU73 data for projectile Z>80 - -## 2023-04-20 V.Ivanchenko (emstand-V11-00-23) -- G4LindhardSorensenIonModel - updated effective charge of an ion at each +## 2023-06-13 V.Ivanchenko (emstand-V11-01-16) +- G4LindHardSorensenIonModel - do not try to use ICRU73 data for projectile Z>80 + +## 2023-06-05 V.Ivanchenko (emstand-V11-01-15) +- G4eBremsstrahlung, G4SeltzerBergerModel - do not change LPM flag at + initialisation, do not repeat base class initialisation, + improve code comments +- G4eBremsstrahlungRelModel - improved comments to the code + +## 2023-06-04 V.Ivanchenko (emstand-V11-01-14) +- G4eBremsstrahlungRelModel - use LPM flag from G4EmParameters + +## 2023-06-03 V.Ivanchenko (emstand-V11-01-13) +- G4BetheHeitlerModel, G4PairProductionRelModel, G4eBremsstrahlungRelModel, + G4SeltzerBergerModel - reorganized initialisation to address bug report #2543. + Initialisation of static element data is performamed only once for the first + object independently on how many objects of this kind is created in a thread. + Results of simulation are identical, only data race is excluded. + +## 2023-05-09 V.Ivanchenko (emstand-V11-01-12) +- updated hadron/ion ionisation models; initialise stopping power data + once: PSTAR and ICRU90 in G4BraggModel, ASTAR - in G4BraggIonModel, + ICRU73 and ICRU90 ion (Z>2) data in G4LindHardSorensenIonModel; + G4BraggIonModel inherit from G4Bragg model; fixed stopping power + of heavy ions at moderate energies + +## 2023-05-03 V.Ivanchenko (emstand-V11-01-11) +- G4LindhardSorensenIonModel - use G4BraggModel for preliminary computation + of DEDX at initialisation for G4GenericIon instead of G4BraggIonModel, + which fix problem of low-energy ion tracking in 11.1ref04 + +## 2023-04-20 V.Ivanchenko (emstand-V11-01-10) +- G4BetheBlochModel, G4BraggIonModel, G4BraggModel, + G4LindhardSorensenIonModel - updated effective charge of an ion at each step of simulation or at each call to G4EmCalculator + G4WaterStopping, G4hIonisation - clean-up the code + G4ionIonisation - do not use G4WaterStopping, code clean-up -## 2023-04-17 V.Ivanchenko +## 2023-04-17 V.Ivanchenko (emstand-V11-01-09) +- G4BraggModel, G4BraggIonModel - use proton stopping data for for all ions + except alpha, make datasets ponters static, address problem #2532 - G4LinhardSorensenModel - added extra protection and improved debug printout -## 2023-02-24 V.Ivanchenko +## 2023-03-11 V.Ivanchenko (emstand-V11-01-08) +- G4UrbanMscModel - optimisation of the code without any change of the + results (L. Urban) + +## 2023-03-05 V.Ivanchenko (emstand-V11-01-07) +- G4CoulombScattering - fixed typo +- G4PAIModel, G4PAIPhotModel, G4PAIModelData, G4PAIPhotData, G4PAIxSection, + G4PAIySection - fixed problem in tests and code clean-up + +## 2023-03-04 V.Ivanchenko (emstand-V11-01-06) +- G4CoulombScattering - added extra constructor to address all existing + cases, for pure single scattering integral method type is changed + from fOnePeak to fEmDecreasing and spline interpolation is used. + This is needed for the fix of #2530. + +## 2023-02-24 V.Ivanchenko (emstand-V11-01-05) - G4WentzelOKandVIxSection - fix numeric instability for the extreme case of very small kinetic energy (< 1 eV) -## 2023-02-21 V.Ivanchenko +## 2023-02-21 V.Ivanchenko (emstand-V11-01-04) - G4WentzelOKandVIxSection - fix #2530, improved comments - -## 2022-12-21 V.Ivanchenko (emstand-V11-00-22) +- G4CoulombScattering - added constructor with changed signature, which + used flag "isCombined" instead of process name, improved initialisation + and comments to the code +- G4eCoulombScatterinModel - improve initialisation and code comments + +## 2023-02-14 V.Ivanchenko (emstand-V11-01-03) +- Preparation for the fix of the problem #2530 - fix apply single + scattering per region +- G4UrbanMscModel - check IsLocked() method before definition of + lateral displacement algorithm and positron correction; + improve formatting +- G4CoulombScattering - added SetCombined(G4bool) method allowing + user to configuer the process; improve formatting and initialisation +- G4eCoulombScatterinModel - improve formatting + +## 2023-01-13 V.Ivanchenko (emstand-V11-01-02) +- G4ESTARStopping, G4GoudsmitSaundersonTable, G4GSPWACorrections, + G4GSMottCorrection, G4SeltzerBergerModel, G4SBBremTable, G4IonICRU73Data, + G4eDPWAElasticDCS - do not call std::getenv from model classes, instead + use G4EmParameters, do not check if G4LEDATA environment variable + defined correctly - this is responsibility of the global utility + +## 2022-12-21 V.Ivanchenko (emstand-V11-01-01) - G4GoudsmithSoundersonMscModel - fixed warning when build CMSSW -## 2022-12-11 V.Ivanchenko +## 2022-12-11 V.Ivanchenko (emstand-V11-01-00) - G4UrbanMscModel - added flag MscPositronCorrection ## 2022-11-23 Gabriele Cosmo (emstand-V11-00-21) diff --git a/source/processes/electromagnetic/standard/include/G4BetheHeitlerModel.hh b/source/processes/electromagnetic/standard/include/G4BetheHeitlerModel.hh index 2df03c0e041..f342a18a314 100644 --- a/source/processes/electromagnetic/standard/include/G4BetheHeitlerModel.hh +++ b/source/processes/electromagnetic/standard/include/G4BetheHeitlerModel.hh @@ -112,6 +112,8 @@ protected: const G4ParticleDefinition* fThePositron; G4ParticleChangeForGamma* fParticleChange; + G4bool isFirstInstance{false}; + static std::vector gElementData; }; diff --git a/source/processes/electromagnetic/standard/include/G4BraggIonModel.hh b/source/processes/electromagnetic/standard/include/G4BraggIonModel.hh index 04c9ac813bc..30566363b99 100644 --- a/source/processes/electromagnetic/standard/include/G4BraggIonModel.hh +++ b/source/processes/electromagnetic/standard/include/G4BraggIonModel.hh @@ -56,14 +56,11 @@ #ifndef G4BraggIonModel_h #define G4BraggIonModel_h 1 -#include "G4VEmModel.hh" -#include "G4ASTARStopping.hh" +#include "G4BraggModel.hh" -class G4ParticleChangeForLoss; -class G4EmCorrections; -class G4ICRU90StoppingData; +class G4ASTARStopping; -class G4BraggIonModel : public G4VEmModel +class G4BraggIonModel : public G4BraggModel { public: @@ -76,15 +73,6 @@ public: void Initialise(const G4ParticleDefinition*, const G4DataVector&) override; - G4double MinEnergyCut(const G4ParticleDefinition*, - const G4MaterialCutsCouple* couple) override; - - G4double ComputeCrossSectionPerElectron( - const G4ParticleDefinition*, - G4double kineticEnergy, - G4double cutEnergy, - G4double maxEnergy); - G4double ComputeCrossSectionPerAtom( const G4ParticleDefinition*, G4double kineticEnergy, @@ -103,21 +91,11 @@ public: G4double kineticEnergy, G4double cutEnergy) override; - void SampleSecondaries(std::vector*, - const G4MaterialCutsCouple*, - const G4DynamicParticle*, - G4double tmin, - G4double maxEnergy) override; - // Compute ion charge not applied to alpha G4double GetChargeSquareRatio(const G4ParticleDefinition*, const G4Material*, G4double kineticEnergy) override; - G4double GetParticleCharge(const G4ParticleDefinition* p, - const G4Material* mat, - G4double kineticEnergy) override; - // add correction to energy loss and ompute non-ionizing energy loss void CorrectionsAlongStep(const G4MaterialCutsCouple*, const G4DynamicParticle*, @@ -128,55 +106,28 @@ public: G4BraggIonModel & operator=(const G4BraggIonModel &right) = delete; G4BraggIonModel(const G4BraggIonModel&) = delete; -protected: - - G4double MaxSecondaryEnergy(const G4ParticleDefinition*, - G4double kinEnergy) final; - private: - void SetParticle(const G4ParticleDefinition* p); - G4double HeEffChargeSquare(const G4double z, const G4double kinEnergyInMeV) const; - G4int HasMaterial(const G4Material* material) const; + G4int HasMaterialForHe(const G4Material* material) const; - G4double StoppingPower(const G4Material* material, - const G4double kinEnergy) const; + G4double HeStoppingPower(const G4double kinEnergy) const; - G4double ElectronicStoppingPower(const G4double z, - const G4double kinEnergy) const; + G4double HeElectronicStoppingPower(const G4int z, const G4double kinEnergy) const; - G4double DEDX(const G4Material* material, const G4double kinEnergy); - - G4EmCorrections* corr = nullptr; - const G4ParticleDefinition* particle = nullptr; - const G4ParticleDefinition* theElectron; - G4ParticleChangeForLoss* fParticleChange = nullptr; - G4ICRU90StoppingData* fICRU90 = nullptr; - - const G4Material* currentMaterial = nullptr; - const G4Material* baseMaterial = nullptr; + G4double HeDEDX(const G4Material* material, const G4double kinEnergy); static G4ASTARStopping* fASTAR; - G4double mass = 0.0; - G4double spin = 0.0; - G4double chargeSquare = 1.0; G4double heChargeSquare = 4.0; - G4double massRate = 1.0; - G4double ratio = 1.0; G4double HeMass; G4double massFactor; - G4double rateMassHe2p; - G4double theZieglerFactor; - G4double lowestKinEnergy; - - G4int iMolecula = -1; // index in the molecula's table - G4int iASTAR = -1; // index in ASTAR - G4int iICRU90 = -1; - G4bool isAlpha = false; + + G4int iASTAR = -1; // index in ASTAR + G4bool isAlpha = false; + G4bool isFirstAlpha = false; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/processes/electromagnetic/standard/include/G4BraggModel.hh b/source/processes/electromagnetic/standard/include/G4BraggModel.hh index 3df16fbd774..248df0f0aa3 100644 --- a/source/processes/electromagnetic/standard/include/G4BraggModel.hh +++ b/source/processes/electromagnetic/standard/include/G4BraggModel.hh @@ -59,14 +59,13 @@ #ifndef G4BraggModel_h #define G4BraggModel_h 1 -#include - #include "G4VEmModel.hh" #include "G4PSTARStopping.hh" class G4ParticleChangeForLoss; class G4EmCorrections; class G4ICRU90StoppingData; +class G4PSTARStopping; class G4BraggModel : public G4VEmModel { @@ -128,17 +127,15 @@ public: protected: + void SetParticle(const G4ParticleDefinition* p); + G4double MaxSecondaryEnergy(const G4ParticleDefinition*, G4double kinEnergy) final; - inline G4double GetChargeSquareRatio() const; - inline void SetChargeSquareRatio(G4double val); private: - inline void SetParticle(const G4ParticleDefinition* p); - void HasMaterial(const G4Material* material); G4double StoppingPower(const G4Material* material, @@ -153,50 +150,39 @@ private: G4double ChemicalFactor(G4double kineticEnergy, G4double eloss125) const; - G4EmCorrections* corr = nullptr; - const G4ParticleDefinition* particle = nullptr; - G4ParticleDefinition* theElectron = nullptr; - G4ParticleChangeForLoss* fParticleChange = nullptr; - G4ICRU90StoppingData* fICRU90 = nullptr; +protected: + + const G4ParticleDefinition* particle = nullptr; + G4ParticleDefinition* theElectron = nullptr; + G4ParticleChangeForLoss* fParticleChange = nullptr; - const G4Material* currentMaterial = nullptr; - const G4Material* baseMaterial = nullptr; + const G4Material* currentMaterial = nullptr; + const G4Material* baseMaterial = nullptr; - static G4PSTARStopping* fPSTAR; + G4EmCorrections* corr = nullptr; - G4double mass; - G4double spin; - G4double chargeSquare; - G4double massRate; - G4double ratio; + static G4ICRU90StoppingData* fICRU90; + static G4PSTARStopping* fPSTAR; + + G4double mass = 0.0; + G4double spin = 0.0; + G4double chargeSquare = 1.0; + G4double massRate = 1.0; + G4double ratio = 1.0; + G4double protonMassAMU = 1.007276; G4double lowestKinEnergy; - G4double protonMassAMU; G4double theZieglerFactor; G4double expStopPower125; // Experimental Stopping power at 125keV - G4int iMolecula = -1; // index in the molecula's table - G4int iPSTAR = -1; // index in PSTAR - G4int iICRU90 = -1; - G4bool isIon = false; -}; - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + G4int iMolecula = -1; // index in the molecula's table + G4int iPSTAR = -1; // index in NIST PSTAR + G4int iICRU90 = -1; -inline void G4BraggModel::SetParticle(const G4ParticleDefinition* p) -{ - particle = p; - mass = particle->GetPDGMass(); - spin = particle->GetPDGSpin(); - G4double q = particle->GetPDGCharge()/CLHEP::eplus; - chargeSquare = q*q; - massRate = mass/CLHEP::proton_mass_c2; - ratio = CLHEP::electron_mass_c2/mass; -} +private: -inline G4double G4BraggModel::GetChargeSquareRatio() const -{ - return chargeSquare; -} + G4bool isIon = false; + G4bool isFirst = false; +}; inline void G4BraggModel::SetChargeSquareRatio(G4double val) { diff --git a/source/processes/electromagnetic/standard/include/G4CoulombScattering.hh b/source/processes/electromagnetic/standard/include/G4CoulombScattering.hh index 984abd9f4e3..abffb032fe3 100644 --- a/source/processes/electromagnetic/standard/include/G4CoulombScattering.hh +++ b/source/processes/electromagnetic/standard/include/G4CoulombScattering.hh @@ -56,7 +56,13 @@ class G4CoulombScattering : public G4VEmProcess public: - explicit G4CoulombScattering(const G4String& name = "CoulombScat"); + explicit G4CoulombScattering(const G4String& name, G4bool combined); + + // for pure single scattering use combined=false + G4CoulombScattering(G4bool combined = true); + + // for pure single scattering use SetIsCombined(false) method + G4CoulombScattering(const G4String& name); ~G4CoulombScattering() override; @@ -65,6 +71,8 @@ public: // print documentation in html format void ProcessDescription(std::ostream&) const override; + inline void SetIsCombined(G4bool val) { isCombined = val; } + G4CoulombScattering & operator=(const G4CoulombScattering &right) = delete; G4CoulombScattering(const G4CoulombScattering&) = delete; @@ -81,7 +89,8 @@ protected: private: G4double q2Max; - G4bool isInitialised; + G4bool isInitialised = false; + G4bool isCombined; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/processes/electromagnetic/standard/include/G4ESTARStopping.hh b/source/processes/electromagnetic/standard/include/G4ESTARStopping.hh index d6610ff760b..9eb8629278b 100644 --- a/source/processes/electromagnetic/standard/include/G4ESTARStopping.hh +++ b/source/processes/electromagnetic/standard/include/G4ESTARStopping.hh @@ -82,7 +82,6 @@ private: void AddData(const G4double* energy, const G4double* xs, G4int idx); - const char* dirPath = nullptr; const G4Material* currentMaterial = nullptr; G4int type = 0; diff --git a/source/processes/electromagnetic/standard/include/G4IonICRU73Data.hh b/source/processes/electromagnetic/standard/include/G4IonICRU73Data.hh index 05c8e1ff7ac..83aed015f5e 100644 --- a/source/processes/electromagnetic/standard/include/G4IonICRU73Data.hh +++ b/source/processes/electromagnetic/standard/include/G4IonICRU73Data.hh @@ -90,7 +90,9 @@ private: G4double fEmax; std::vector fMatIndex; - // projectile Z <= 80, target element Z <= 92 + // projectile (3<= Z <= 80), target element (1 <= Z <= 92) + const G4int ZPROJMAX = 80; + const G4int ZTARGMAX = 92; std::vector* fMatData[81] = {nullptr}; G4PhysicsLogVector* fElmData[81][93] = {{nullptr}}; G4PhysicsFreeVector* fVector = nullptr; diff --git a/source/processes/electromagnetic/standard/include/G4LindhardSorensenIonModel.hh b/source/processes/electromagnetic/standard/include/G4LindhardSorensenIonModel.hh index bbf40762049..ab3595900e9 100644 --- a/source/processes/electromagnetic/standard/include/G4LindhardSorensenIonModel.hh +++ b/source/processes/electromagnetic/standard/include/G4LindhardSorensenIonModel.hh @@ -55,7 +55,7 @@ class G4EmCorrections; class G4ParticleChangeForLoss; class G4LindhardSorensenData; -class G4BraggIonModel; +class G4BraggModel; class G4BetheBlochModel; class G4IonICRU73Data; @@ -126,8 +126,6 @@ protected: G4double MaxSecondaryEnergy(const G4ParticleDefinition*, G4double kinEnergy) override; - inline G4double GetChargeSquareRatio() const; - inline void SetChargeSquareRatio(G4double val); private: @@ -142,19 +140,18 @@ private: inline void SetParticle(const G4ParticleDefinition* p); - static const G4int MAXZION = 93; + // static const G4int MAXZION = 93; static G4IonICRU73Data* fIonData; static G4LindhardSorensenData* lsdata; - static std::vector* fact[MAXZION]; - const G4ParticleDefinition* particle; - G4ParticleDefinition* theElectron; - G4EmCorrections* corr; - G4ParticleChangeForLoss* fParticleChange; - G4NistManager* nist; - G4BraggIonModel* fBraggModel; - G4BetheBlochModel* fBBModel; + const G4ParticleDefinition* particle = nullptr; + G4ParticleDefinition* theElectron; + G4EmCorrections* corr; + G4ParticleChangeForLoss* fParticleChange = nullptr; + G4NistManager* nist; + G4BraggModel* fBraggModel; + G4BetheBlochModel* fBBModel; G4int Zin = 1; G4double mass = 0.0; @@ -168,6 +165,7 @@ private: G4double formfact = 0.0; G4double twoln10; G4double fElimit; + G4bool isFirst = false; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... @@ -183,13 +181,6 @@ G4LindhardSorensenIonModel::SetParticle(const G4ParticleDefinition* p) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -inline G4double G4LindhardSorensenIonModel::GetChargeSquareRatio() const -{ - return chargeSquare; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - inline void G4LindhardSorensenIonModel::SetChargeSquareRatio(G4double val) { chargeSquare = val; diff --git a/source/processes/electromagnetic/standard/include/G4PAIModel.hh b/source/processes/electromagnetic/standard/include/G4PAIModel.hh index 23868423ead..2100c3871d1 100644 --- a/source/processes/electromagnetic/standard/include/G4PAIModel.hh +++ b/source/processes/electromagnetic/standard/include/G4PAIModel.hh @@ -119,15 +119,15 @@ public: inline void SetVerboseLevel(G4int verbose); + // hide assignment operator + G4PAIModel & operator=(const G4PAIModel &right) = delete; + G4PAIModel(const G4PAIModel&) = delete; + protected: G4double MaxSecondaryEnergy(const G4ParticleDefinition*, G4double kinEnergy) final; - // hide assignment operator - G4PAIModel & operator=(const G4PAIModel &right) = delete; - G4PAIModel(const G4PAIModel&) = delete; - private: inline G4int FindCoupleIndex(const G4MaterialCutsCouple*); diff --git a/source/processes/electromagnetic/standard/include/G4PAIxSection.hh b/source/processes/electromagnetic/standard/include/G4PAIxSection.hh index f09fb288e87..6ff1fa72d93 100644 --- a/source/processes/electromagnetic/standard/include/G4PAIxSection.hh +++ b/source/processes/electromagnetic/standard/include/G4PAIxSection.hh @@ -55,7 +55,7 @@ #include "globals.hh" #include "Randomize.hh" -#include"G4SandiaTable.hh" +#include "G4SandiaTable.hh" class G4MaterialCutsCouple; class G4Sandiatable; @@ -68,8 +68,7 @@ public: G4PAIxSection(); G4PAIxSection( G4MaterialCutsCouple* matCC); - G4PAIxSection( G4int materialIndex, - G4double maxEnergyTransfer ); + G4PAIxSection( G4int materialIndex, G4double maxEnergyTransfer ); G4PAIxSection( G4int materialIndex, // for proton loss table G4double maxEnergyTransfer, @@ -100,10 +99,10 @@ public: G4double RutherfordIntegral( G4int intervalNumber, G4double limitLow, - G4double limitHigh ); + G4double limitHigh ); G4double ImPartDielectricConst( G4int intervalNumber, - G4double energy ); + G4double energy ); G4double GetPhotonRange( G4double energy ); G4double GetElectronRange( G4double energy ); @@ -111,18 +110,18 @@ public: G4double RePartDielectricConst(G4double energy); G4double DifPAIxSection( G4int intervalNumber, - G4double betaGammaSq ); + G4double betaGammaSq ); G4double PAIdNdxCerenkov( G4int intervalNumber, - G4double betaGammaSq ); + G4double betaGammaSq ); G4double PAIdNdxMM( G4int intervalNumber, - G4double betaGammaSq ); + G4double betaGammaSq ); G4double PAIdNdxPlasmon( G4int intervalNumber, - G4double betaGammaSq ); + G4double betaGammaSq ); G4double PAIdNdxResonance( G4int intervalNumber, - G4double betaGammaSq ); + G4double betaGammaSq ); void IntegralPAIxSection(); @@ -218,23 +217,21 @@ private : static const G4double fDelta; // energy shift from interval border = 0.001 static const G4double fError; // error in lin-log approximation = 0.005 - static G4int fNumberOfGammas; // = 111; - static const G4double fLorentzFactor[112]; // static gamma array + static G4int fNumberOfGammas; // = 111; + static const G4double fLorentzFactor[112]; // static gamma array static - const G4int fRefGammaNumber; //The number of gamma for creation of spline (15) + const G4int fRefGammaNumber; // The number of gamma for creation of spline (15) - G4int fIntervalNumber ; // The number of energy intervals - G4double fNormalizationCof; // Normalization cof for PhotoAbsorptionXsection + G4int fIntervalNumber ; // The number of energy intervals + G4double fNormalizationCof; // Normalization cof for PhotoAbsorptionXsection - // G4double fBetaGammaSq; // (beta*gamma)^2 - - G4int fMaterialIndex; // current material index - G4double fDensity; // Current density - G4double fElectronDensity; // Current electron (number) density + G4int fMaterialIndex; // current material index + G4double fDensity; // Current density + G4double fElectronDensity; // Current electron (number) density G4double fLowEnergyCof; // Correction cof for low energy region - G4int fSplineNumber; // Current size of spline - G4int fVerbose; // verbose flag + G4int fSplineNumber; // Current size of spline + G4int fVerbose; // verbose flag // Arrays of Sandia coefficients @@ -251,22 +248,22 @@ private : static const G4int fMaxSplineSize ; // Max size of output splain arrays = 500 - G4DataVector fSplineEnergy; // energy points of splain + G4DataVector fSplineEnergy; // energy points of splain G4DataVector fRePartDielectricConst; // Real part of dielectric const G4DataVector fImPartDielectricConst; // Imaginary part of dielectric const G4DataVector fIntegralTerm; // Integral term in PAI cross section G4DataVector fDifPAIxSection; // Differential PAI cross section G4DataVector fdNdxCerenkov; // dNdx of Cerenkov collisions G4DataVector fdNdxPlasmon; // dNdx of Plasmon collisions - G4DataVector fdNdxMM; // dNdx of MM-Cerenkov collisions - G4DataVector fdNdxResonance; // dNdx of Resonance collisions + G4DataVector fdNdxMM; // dNdx of MM-Cerenkov collisions + G4DataVector fdNdxResonance; // dNdx of Resonance collisions G4DataVector fIntegralPAIxSection; // Integral PAI cross section ? G4DataVector fIntegralPAIdEdx; // Integral PAI dEdx ? G4DataVector fIntegralCerenkov; // Integral Cerenkov N>omega ? G4DataVector fIntegralPlasmon; // Integral Plasmon N>omega ? - G4DataVector fIntegralMM; // Integral MM N>omega ? - G4DataVector fIntegralResonance; // Integral resonance N>omega ? + G4DataVector fIntegralMM; // Integral MM N>omega ? + G4DataVector fIntegralResonance; // Integral resonance N>omega ? G4double fPAItable[500][112]; // Output array diff --git a/source/processes/electromagnetic/standard/include/G4PairProductionRelModel.hh b/source/processes/electromagnetic/standard/include/G4PairProductionRelModel.hh index 21128b200b9..8ccac734c9c 100644 --- a/source/processes/electromagnetic/standard/include/G4PairProductionRelModel.hh +++ b/source/processes/electromagnetic/standard/include/G4PairProductionRelModel.hh @@ -166,6 +166,7 @@ protected: static std::vector gElementData; static LPMFuncs gLPMFuncs; // + G4bool isFirstInstance{false}; G4bool fIsUseLPMCorrection; G4bool fIsUseCompleteScreening; // diff --git a/source/processes/electromagnetic/standard/include/G4SeltzerBergerModel.hh b/source/processes/electromagnetic/standard/include/G4SeltzerBergerModel.hh index 3b01411f765..deb5b08531d 100644 --- a/source/processes/electromagnetic/standard/include/G4SeltzerBergerModel.hh +++ b/source/processes/electromagnetic/standard/include/G4SeltzerBergerModel.hh @@ -101,8 +101,6 @@ private: void ReadData(G4int Z); - const G4String& FindDirectoryPath(); - G4double SampleEnergyTransfer(const G4double kineticEnergy, const G4double logKineticEnergy, const G4double cut, @@ -113,7 +111,6 @@ private: static G4double gYLimitData[gMaxZet]; static G4Physics2DVector* gSBDCSData[gMaxZet]; static G4SBBremTable* gSBSamplingTable; - static G4String gDataDirectory; G4bool fIsUseBicubicInterpolation; G4bool fIsUseSamplingTables; @@ -122,6 +119,7 @@ private: size_t fIndx; size_t fIndy; + G4bool isFirstInstance{false}; }; #endif diff --git a/source/processes/electromagnetic/standard/include/G4UrbanMscModel.hh b/source/processes/electromagnetic/standard/include/G4UrbanMscModel.hh index d12e91f5711..cc027cad25e 100644 --- a/source/processes/electromagnetic/standard/include/G4UrbanMscModel.hh +++ b/source/processes/electromagnetic/standard/include/G4UrbanMscModel.hh @@ -100,6 +100,10 @@ public: G4double ComputeTheta0(G4double truePathLength, G4double KineticEnergy); + inline void SetDisplacementAlgorithm96(const G4bool val); + + inline void SetPositronCorrection(const G4bool val); + // hide assignment operator G4UrbanMscModel & operator=(const G4UrbanMscModel &right) = delete; G4UrbanMscModel(const G4UrbanMscModel&) = delete; @@ -124,12 +128,12 @@ private: inline G4double ComputeTlimitmin(); - CLHEP::HepRandomEngine* rndmEngineMod; + CLHEP::HepRandomEngine* rndmEngineMod; - const G4ParticleDefinition* particle; + const G4ParticleDefinition* particle = nullptr; const G4ParticleDefinition* positron; - G4ParticleChangeForMSC* fParticleChange; - const G4MaterialCutsCouple* couple; + G4ParticleChangeForMSC* fParticleChange = nullptr; + const G4MaterialCutsCouple* couple = nullptr; G4double mass; G4double charge,chargeSquare; @@ -185,13 +189,13 @@ private: static std::vector msc; // index of G4MaterialCutsCouple - G4int idx; + G4int idx = 0; - G4bool firstStep; - G4bool insideskin; + G4bool firstStep = true; + G4bool insideskin = false; - G4bool latDisplasmentbackup; - G4bool dispAlg96; + G4bool latDisplasmentbackup = false; + G4bool dispAlg96 = true; G4bool fPosiCorrection = true; G4bool isFirstInstance = false; }; @@ -238,6 +242,8 @@ inline G4double G4UrbanMscModel::SimpleScattering() -1.+2.*G4Exp(G4Log(rndmarray[0])/(a+1.)) : -1.+2.*rndmarray[0]; } +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + inline G4double G4UrbanMscModel::ComputeStepmin() { // define stepmin using estimation of the ratio @@ -246,6 +252,8 @@ inline G4double G4UrbanMscModel::ComputeStepmin() return lambda0*1.e-3/(2.e-3+rat*(msc[idx]->stepmina+msc[idx]->stepminb*rat)); } +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + inline G4double G4UrbanMscModel::ComputeTlimitmin() { G4double x = (particle == positron) ? @@ -256,5 +264,19 @@ inline G4double G4UrbanMscModel::ComputeTlimitmin() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +inline void G4UrbanMscModel::SetDisplacementAlgorithm96(const G4bool val) +{ + dispAlg96 = val; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + +inline void G4UrbanMscModel::SetPositronCorrection(const G4bool val) +{ + fPosiCorrection = val; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + #endif diff --git a/source/processes/electromagnetic/standard/include/G4WaterStopping.hh b/source/processes/electromagnetic/standard/include/G4WaterStopping.hh index 19149ccac19..e60508c6ee3 100644 --- a/source/processes/electromagnetic/standard/include/G4WaterStopping.hh +++ b/source/processes/electromagnetic/standard/include/G4WaterStopping.hh @@ -57,26 +57,26 @@ class G4WaterStopping { public: - explicit G4WaterStopping(G4EmCorrections* corr = nullptr, G4bool splineFlag = true); + explicit G4WaterStopping(); - ~G4WaterStopping(); + ~G4WaterStopping() = default; G4double GetElectronicDEDX(G4int Z, G4double energy); + // hide assignment operator + G4WaterStopping & operator=(const G4WaterStopping &right) = delete; + G4WaterStopping(const G4WaterStopping&) = delete; + private: - void Initialise(G4EmCorrections*); + void Initialise(); void AddData(const G4double* energy, const G4double* stoppower, G4double factor); - // hide assignment operator - G4WaterStopping & operator=(const G4WaterStopping &right) = delete; - G4WaterStopping(const G4WaterStopping&) = delete; - - G4bool spline; + G4bool spline = true; G4double emin; - std::vector dedx; + std::vector dedx; }; #endif diff --git a/source/processes/electromagnetic/standard/include/G4eBremsstrahlungRelModel.hh b/source/processes/electromagnetic/standard/include/G4eBremsstrahlungRelModel.hh index b38ee5833fc..35b56652298 100644 --- a/source/processes/electromagnetic/standard/include/G4eBremsstrahlungRelModel.hh +++ b/source/processes/electromagnetic/standard/include/G4eBremsstrahlungRelModel.hh @@ -143,6 +143,8 @@ private: private: G4bool fIsUseCompleteScreening = false; + G4bool fIsFirstInstance = false; + G4bool fUseLPM = true; protected: diff --git a/source/processes/electromagnetic/standard/include/G4eCoulombScatteringModel.hh b/source/processes/electromagnetic/standard/include/G4eCoulombScatteringModel.hh index 1ac7242bd57..cf5dac58a45 100644 --- a/source/processes/electromagnetic/standard/include/G4eCoulombScatteringModel.hh +++ b/source/processes/electromagnetic/standard/include/G4eCoulombScatteringModel.hh @@ -130,28 +130,28 @@ protected: private: - G4IonTable* theIonTable; - G4ParticleChangeForGamma* fParticleChange; + G4IonTable* theIonTable; + G4ParticleChangeForGamma* fParticleChange = nullptr; G4WentzelOKandVIxSection* wokvi; - G4NistManager* fNistManager; + G4NistManager* fNistManager; - const std::vector* pCuts; + const std::vector* pCuts = nullptr; - const G4ParticleDefinition* particle; + const G4ParticleDefinition* particle = nullptr; const G4ParticleDefinition* theProton; - const G4MaterialCutsCouple* currentCouple; - const G4Material* currentMaterial; - G4int currentMaterialIndex; + const G4MaterialCutsCouple* currentCouple = nullptr; + const G4Material* currentMaterial = nullptr; + G4int currentMaterialIndex = 0; - G4double cosThetaMin; - G4double cosThetaMax; - G4double recoilThreshold; - G4double elecRatio; - G4double mass; - G4double fixedCut; + G4double cosThetaMin = 1.0; + G4double cosThetaMax = -1.0; + G4double recoilThreshold = 0.0; + G4double elecRatio = 0.0; + G4double fixedCut = -1.0; + G4double mass; - G4bool isCombined; + G4bool isCombined; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/source/processes/electromagnetic/standard/include/G4hIonisation.hh b/source/processes/electromagnetic/standard/include/G4hIonisation.hh index 5ddf3d789d5..2217abf6eb5 100644 --- a/source/processes/electromagnetic/standard/include/G4hIonisation.hh +++ b/source/processes/electromagnetic/standard/include/G4hIonisation.hh @@ -88,7 +88,7 @@ public: explicit G4hIonisation(const G4String& name = "hIoni"); - ~G4hIonisation() override; + ~G4hIonisation() override = default; G4bool IsApplicable(const G4ParticleDefinition& p) override; @@ -96,7 +96,7 @@ public: const G4Material*, G4double cut) final; // print documentation in html format - virtual void ProcessDescription(std::ostream&) const override; + void ProcessDescription(std::ostream&) const override; // hide assignment operator G4hIonisation & operator=(const G4hIonisation &right) = delete; @@ -109,11 +109,10 @@ protected: private: - G4bool isInitialised; - - G4double mass; - G4double ratio; - G4double eth; + G4bool isInitialised = false; + G4double mass = 0.0; + G4double ratio = 0.0; + G4double eth; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/source/processes/electromagnetic/standard/include/G4ionIonisation.hh b/source/processes/electromagnetic/standard/include/G4ionIonisation.hh index c5f101474ae..6b3f6087ebb 100644 --- a/source/processes/electromagnetic/standard/include/G4ionIonisation.hh +++ b/source/processes/electromagnetic/standard/include/G4ionIonisation.hh @@ -72,7 +72,6 @@ #include "G4VEnergyLossProcess.hh" class G4Material; -class G4EmCorrections; class G4ionIonisation : public G4VEnergyLossProcess { @@ -80,7 +79,7 @@ public: explicit G4ionIonisation(const G4String& name = "ionIoni"); - ~G4ionIonisation() override; + ~G4ionIonisation() override = default; G4bool IsApplicable(const G4ParticleDefinition& p) final; @@ -98,9 +97,6 @@ public: protected: - // Print out of the class parameters - void StreamProcessInfo(std::ostream& outFile) const override; - void InitialiseEnergyLossProcess(const G4ParticleDefinition*, const G4ParticleDefinition*) override; @@ -111,24 +107,13 @@ protected: private: - G4EmCorrections* corr; - - const G4ParticleDefinition* theParticle; - G4double eth; + const G4ParticleDefinition* theParticle = nullptr; + G4double eth; - G4bool isInitialised; - G4bool stopDataActive; + G4bool isInitialised = false; }; -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - -inline void G4ionIonisation::ActivateStoppingData(G4bool val) -{ - stopDataActive = val; -} - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... inline G4double G4ionIonisation::BetheBlochEnergyThreshold() diff --git a/source/processes/electromagnetic/standard/src/G4BetheBlochModel.cc b/source/processes/electromagnetic/standard/src/G4BetheBlochModel.cc index 70b239410e9..0af5e45a798 100644 --- a/source/processes/electromagnetic/standard/src/G4BetheBlochModel.cc +++ b/source/processes/electromagnetic/standard/src/G4BetheBlochModel.cc @@ -51,7 +51,6 @@ // ------------------------------------------------------------------- // - //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -68,11 +67,10 @@ #include "G4ICRU90StoppingData.hh" #include "G4Log.hh" #include "G4DeltaAngle.hh" +#include //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -using namespace std; - G4BetheBlochModel::G4BetheBlochModel(const G4ParticleDefinition*, const G4String& nam) : G4VEmModel(nam), @@ -97,20 +95,15 @@ void G4BetheBlochModel::Initialise(const G4ParticleDefinition* p, { if(p != particle) { SetupParameters(p); } - //G4cout << "G4BetheBlochModel::Initialise for " << p->GetParticleName() - // << " isIon= " << isIon - // << G4endl; - // always false before the run SetDeexcitationFlag(false); // initialisation once if(nullptr == fParticleChange) { const G4String& pname = particle->GetParticleName(); - if(IsMaster() && G4EmParameters::Instance()->UseICRU90Data() && + if(G4EmParameters::Instance()->UseICRU90Data() && (pname == "proton" || pname == "GenericIon" || pname == "alpha")) { fICRU90 = nist->GetICRU90StoppingData(); - fICRU90->Initialise(); } if(particle->GetPDGCharge() > CLHEP::eplus || pname == "GenericIon") { isIon = true; } @@ -121,17 +114,22 @@ void G4BetheBlochModel::Initialise(const G4ParticleDefinition* p, SetAngularDistribution(new G4DeltaAngle()); } } + // initialisation for each new run + if(IsMaster() && nullptr != fICRU90) { + fICRU90->Initialise(); + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4double G4BetheBlochModel::GetChargeSquareRatio(const G4ParticleDefinition* p, const G4Material* mat, - G4double kineticEnergy) + G4double kinEnergy) { // this method is called only for ions, so no check if it is an ion - return - (!isAlpha) ? corr->EffectiveChargeSquareRatio(p,mat,kineticEnergy) : 1.0; + if(isAlpha) { return 1.0; } + chargeSquare = corr->EffectiveChargeSquareRatio(p, mat, kinEnergy); + return chargeSquare; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -141,7 +139,7 @@ G4double G4BetheBlochModel::GetParticleCharge(const G4ParticleDefinition* p, G4double kineticEnergy) { // this method is called only for ions, so no check if it is an ion - return corr->GetParticleCharge(p,mat,kineticEnergy); + return corr->GetParticleCharge(p, mat, kineticEnergy); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... @@ -155,7 +153,7 @@ void G4BetheBlochModel::SetupParameters(const G4ParticleDefinition* p) isIon = (!isAlpha && q > 1.1); chargeSquare = q*q; ratio = electron_mass_c2/mass; - static const G4double aMag = 1./(0.5*eplus*CLHEP::hbar_Planck*CLHEP::c_squared); + constexpr G4double aMag = 1./(0.5*eplus*CLHEP::hbar_Planck*CLHEP::c_squared); G4double magmom = particle->GetPDGMagneticMoment()*mass*aMag; magMoment2 = magmom*magmom - 1.0; formfact = 0.0; @@ -185,12 +183,13 @@ G4double G4BetheBlochModel::MinEnergyCut(const G4ParticleDefinition*, G4double G4BetheBlochModel::ComputeCrossSectionPerElectron(const G4ParticleDefinition* p, G4double kineticEnergy, - G4double cutEnergy, + G4double cut, G4double maxKinEnergy) { G4double cross = 0.0; - G4double tmax = MaxSecondaryEnergy(p, kineticEnergy); - G4double maxEnergy = std::min(tmax, maxKinEnergy); + const G4double tmax = MaxSecondaryEnergy(p, kineticEnergy); + const G4double cutEnergy = std::min(std::min(cut,tmax), tlimit); + const G4double maxEnergy = std::min(tmax, maxKinEnergy); if(cutEnergy < maxEnergy) { G4double totEnergy = kineticEnergy + mass; @@ -373,23 +372,24 @@ void G4BetheBlochModel::CorrectionsAlongStep(const G4MaterialCutsCouple* couple, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void G4BetheBlochModel::SampleSecondaries(vector* vdp, +void G4BetheBlochModel::SampleSecondaries(std::vector* vdp, const G4MaterialCutsCouple* couple, const G4DynamicParticle* dp, - G4double minKinEnergy, + G4double cut, G4double maxEnergy) { - G4double kineticEnergy = dp->GetKineticEnergy(); - const G4double tmax = MaxSecondaryEnergy(dp->GetDefinition(),kineticEnergy); - const G4double maxKinEnergy = std::min(maxEnergy,tmax); + G4double kinEnergy = dp->GetKineticEnergy(); + const G4double tmax = MaxSecondaryEnergy(dp->GetDefinition(), kinEnergy); + const G4double minKinEnergy = std::min(cut, tmax); + const G4double maxKinEnergy = std::min(maxEnergy, tmax); if(minKinEnergy >= maxKinEnergy) { return; } //G4cout << "G4BetheBlochModel::SampleSecondaries Emin= " << minKinEnergy // << " Emax= " << maxKinEnergy << G4endl; - const G4double totEnergy = kineticEnergy + mass; - const G4double etot2 = totEnergy*totEnergy; - const G4double beta2 = kineticEnergy*(kineticEnergy + 2.0*mass)/etot2; + const G4double totEnergy = kinEnergy + mass; + const G4double etot2 = totEnergy*totEnergy; + const G4double beta2 = kinEnergy*(kinEnergy + 2.0*mass)/etot2; G4double deltaKinEnergy, f; G4double f1 = 0.0; @@ -429,7 +429,7 @@ void G4BetheBlochModel::SampleSecondaries(vector* vdp, if(grej > 1.1) { G4cout << "### G4BetheBlochModel WARNING: grej= " << grej << " " << dp->GetDefinition()->GetParticleName() - << " Ekin(MeV)= " << kineticEnergy + << " Ekin(MeV)= " << kinEnergy << " delEkin(MeV)= " << deltaKinEnergy << G4endl; } @@ -447,7 +447,7 @@ void G4BetheBlochModel::SampleSecondaries(vector* vdp, } else { G4double deltaMomentum = - sqrt(deltaKinEnergy * (deltaKinEnergy + 2.0*electron_mass_c2)); + std::sqrt(deltaKinEnergy * (deltaKinEnergy + 2.0*electron_mass_c2)); G4double cost = deltaKinEnergy * (totEnergy + electron_mass_c2) / (deltaMomentum * dp->GetTotalMomentum()); cost = std::min(cost, 1.0); @@ -460,7 +460,7 @@ void G4BetheBlochModel::SampleSecondaries(vector* vdp, /* G4cout << "### G4BetheBlochModel " << dp->GetDefinition()->GetParticleName() - << " Ekin(MeV)= " << kineticEnergy + << " Ekin(MeV)= " << kinEnergy << " delEkin(MeV)= " << deltaKinEnergy << " tmin(MeV)= " << minKinEnergy << " tmax(MeV)= " << maxKinEnergy @@ -474,11 +474,11 @@ void G4BetheBlochModel::SampleSecondaries(vector* vdp, vdp->push_back(delta); // Change kinematics of primary particle - kineticEnergy -= deltaKinEnergy; + kinEnergy -= deltaKinEnergy; G4ThreeVector finalP = dp->GetMomentum() - delta->GetMomentum(); - finalP = finalP.unit(); + finalP = finalP.unit(); - fParticleChange->SetProposedKineticEnergy(kineticEnergy); + fParticleChange->SetProposedKineticEnergy(kinEnergy); fParticleChange->SetProposedMomentumDirection(finalP); } diff --git a/source/processes/electromagnetic/standard/src/G4BetheHeitlerModel.cc b/source/processes/electromagnetic/standard/src/G4BetheHeitlerModel.cc index 2bfe737d9c8..b197b5aec77 100644 --- a/source/processes/electromagnetic/standard/src/G4BetheHeitlerModel.cc +++ b/source/processes/electromagnetic/standard/src/G4BetheHeitlerModel.cc @@ -53,10 +53,16 @@ #include "G4Pow.hh" #include "G4Exp.hh" #include "G4ModifiedTsai.hh" +#include "G4AutoLock.hh" const G4int G4BetheHeitlerModel::gMaxZet = 120; std::vector G4BetheHeitlerModel::gElementData; +namespace +{ + G4Mutex theBetheHMutex = G4MUTEX_INITIALIZER; +} + G4BetheHeitlerModel::G4BetheHeitlerModel(const G4ParticleDefinition*, const G4String& nam) : G4VEmModel(nam), @@ -69,11 +75,8 @@ G4BetheHeitlerModel::G4BetheHeitlerModel(const G4ParticleDefinition*, G4BetheHeitlerModel::~G4BetheHeitlerModel() { - if (IsMaster()) { - // clear ElementData container - for (std::size_t iz = 0; iz < gElementData.size(); ++iz) { - if (gElementData[iz]) delete gElementData[iz]; - } + if (isFirstInstance) { + for (auto const & ptr : gElementData) { delete ptr; } gElementData.clear(); } } @@ -81,11 +84,23 @@ G4BetheHeitlerModel::~G4BetheHeitlerModel() void G4BetheHeitlerModel::Initialise(const G4ParticleDefinition* p, const G4DataVector& cuts) { - if (IsMaster()) { + if (!fParticleChange) { fParticleChange = GetParticleChangeForGamma(); } + + if (gElementData.empty()) { + G4AutoLock l(&theBetheHMutex); + if (gElementData.empty()) { + isFirstInstance = true; + gElementData.resize(gMaxZet+1, nullptr); + } + l.unlock(); + } + + // static data should be initialised only in the one instance + if(isFirstInstance) { InitialiseElementData(); } - if (!fParticleChange) { fParticleChange = GetParticleChangeForGamma(); } - if (IsMaster()) { + // element selectors should be initialised in the master thread + if(IsMaster()) { InitialiseElementSelectors(p, cuts); } } @@ -295,17 +310,11 @@ void G4BetheHeitlerModel::SampleSecondaries(std::vector* fve // should be called only by the master and at initialisation void G4BetheHeitlerModel::InitialiseElementData() { - G4int size = (G4int)gElementData.size(); - if (size < gMaxZet+1) { - gElementData.resize(gMaxZet+1, nullptr); - } // create for all elements that are in the detector - const G4ElementTable* elemTable = G4Element::GetElementTable(); - std::size_t numElems = (*elemTable).size(); - for (std::size_t ie = 0; ie < numElems; ++ie) { - const G4Element* elem = (*elemTable)[ie]; - const G4int iz = std::min(gMaxZet, elem->GetZasInt()); - if (!gElementData[iz]) { // create it if doesn't exist yet + auto elemTable = G4Element::GetElementTable(); + for (auto const & elem : *elemTable) { + const G4int iz = std::min(gMaxZet, elem->GetZasInt()); + if (nullptr == gElementData[iz]) { // create it if doesn't exist yet G4double FZLow = 8.*elem->GetIonisation()->GetlogZ3(); G4double FZHigh = FZLow + 8.*elem->GetfCoulomb(); auto elD = new ElementData(); diff --git a/source/processes/electromagnetic/standard/src/G4BraggIonModel.cc b/source/processes/electromagnetic/standard/src/G4BraggIonModel.cc index ebff47bb387..7215565278e 100644 --- a/source/processes/electromagnetic/standard/src/G4BraggIonModel.cc +++ b/source/processes/electromagnetic/standard/src/G4BraggIonModel.cc @@ -61,135 +61,74 @@ #include "Randomize.hh" #include "G4Electron.hh" #include "G4ParticleChangeForLoss.hh" -#include "G4LossTableManager.hh" #include "G4EmCorrections.hh" -#include "G4EmParameters.hh" #include "G4DeltaAngle.hh" #include "G4ICRU90StoppingData.hh" +#include "G4ASTARStopping.hh" +#include "G4PSTARStopping.hh" #include "G4NistManager.hh" #include "G4Log.hh" #include "G4Exp.hh" +#include "G4AutoLock.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -using namespace std; - G4ASTARStopping* G4BraggIonModel::fASTAR = nullptr; +namespace +{ + G4Mutex alphaMutex = G4MUTEX_INITIALIZER; +} + G4BraggIonModel::G4BraggIonModel(const G4ParticleDefinition* p, const G4String& nam) - : G4VEmModel(nam), - theElectron(G4Electron::Electron()), - HeMass(3.727417*CLHEP::GeV), - theZieglerFactor(CLHEP::eV*CLHEP::cm2*1.0e-15), - lowestKinEnergy(0.25*CLHEP::keV) + : G4BraggModel(p, nam) { - SetHighEnergyLimit(2.0*CLHEP::MeV); - - rateMassHe2p = HeMass/CLHEP::proton_mass_c2; + HeMass = 3.727417*CLHEP::GeV; massFactor = 1000.*CLHEP::amu_c2/HeMass; - - if(nullptr != p) { SetParticle(p); } - else { SetParticle(theElectron); } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4BraggIonModel::~G4BraggIonModel() { - if(IsMaster()) { delete fASTAR; fASTAR = nullptr; } + if(isFirstAlpha) { + delete fASTAR; + fASTAR = nullptr; + } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4BraggIonModel::Initialise(const G4ParticleDefinition* p, - const G4DataVector&) + const G4DataVector& ref) { - if(p != particle) { SetParticle(p); } - - // always false before the run - SetDeexcitationFlag(false); - - // initialise once - if(nullptr == fParticleChange) { - const G4String& pname = particle->GetParticleName(); - if(IsMaster()) { - if(pname == "proton" || pname == "GenericIon" || pname == "alpha") { - if(nullptr == fASTAR) { fASTAR = new G4ASTARStopping(); } - fASTAR->Initialise(); - - if(G4EmParameters::Instance()->UseICRU90Data()) { - fICRU90 = G4NistManager::Instance()->GetICRU90StoppingData(); - fICRU90->Initialise(); - } - } + G4BraggModel::Initialise(p, ref); + const G4String& pname = particle->GetParticleName(); + if(pname == "alpha") { isAlpha = true; } + if(isAlpha && fASTAR == nullptr) { + G4AutoLock l(&alphaMutex); + if(fASTAR == nullptr) { + isFirstAlpha = true; + fASTAR = new G4ASTARStopping(); } - if(pname == "alpha") { isAlpha = true; } - - if(UseAngularGeneratorFlag() && nullptr == GetAngularDistribution()) { - SetAngularDistribution(new G4DeltaAngle()); - } - corr = G4LossTableManager::Instance()->EmCorrections(); - - fParticleChange = GetParticleChangeForLoss(); + l.unlock(); + } + if(isFirstAlpha) { + fASTAR->Initialise(); } } -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4double G4BraggIonModel::MinEnergyCut(const G4ParticleDefinition*, - const G4MaterialCutsCouple* couple) -{ - return couple->GetMaterial()->GetIonisation()->GetMeanExcitationEnergy(); -} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4double G4BraggIonModel::GetChargeSquareRatio(const G4ParticleDefinition* p, const G4Material* mat, - G4double kineticEnergy) + G4double kinEnergy) { - return corr->EffectiveChargeSquareRatio(p,mat,kineticEnergy); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4double G4BraggIonModel::GetParticleCharge(const G4ParticleDefinition* p, - const G4Material* mat, - G4double kineticEnergy) -{ - return corr->GetParticleCharge(p,mat,kineticEnergy); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4double G4BraggIonModel::ComputeCrossSectionPerElectron( - const G4ParticleDefinition* p, - G4double kineticEnergy, - G4double minKinEnergy, - G4double maxKinEnergy) -{ - G4double cross = 0.0; - const G4double tmax = MaxSecondaryEnergy(p, kineticEnergy); - const G4double maxEnergy = std::min(tmax, maxKinEnergy); - const G4double cutEnergy = std::max(lowestKinEnergy*massRate, minKinEnergy); - - if(cutEnergy < tmax) { - - const G4double energy = kineticEnergy + mass; - const G4double energy2 = energy*energy; - const G4double beta2 = kineticEnergy*(kineticEnergy + 2.0*mass)/energy2; - - cross = (maxEnergy - cutEnergy)/(cutEnergy*maxEnergy) - - beta2*G4Log(maxEnergy/cutEnergy)/tmax; - if( 0.0 < spin ) { cross += 0.5*(maxEnergy - cutEnergy)/energy2; } - - cross *= CLHEP::twopi_mc2_rcl2*chargeSquare/beta2; - cross = std::max(cross, 0.0); - } - // G4cout << "BR: e= " << kineticEnergy << " tmin= " << cutEnergy - // << " tmax= " << tmax << " cross= " << cross << G4endl; - return cross; + // this method is called only for ions, so no check if it is an ion + if(isAlpha) { return 1.0; } + return G4BraggModel::GetChargeSquareRatio(p, mat, kinEnergy); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -233,40 +172,41 @@ G4double G4BraggIonModel::CrossSectionPerVolume( G4double G4BraggIonModel::ComputeDEDXPerVolume(const G4Material* material, const G4ParticleDefinition* p, G4double kineticEnergy, - G4double minKinEnergy) + G4double cut) { const G4double tmax = MaxSecondaryEnergy(p, kineticEnergy); - const G4double tmin = std::max(lowestKinEnergy*massRate, minKinEnergy); + const G4double tlim = lowestKinEnergy*massRate; + const G4double tmin = std::max(std::min(cut, tmax), tlim); G4double dedx = 0.0; - // T is alpha energy - G4double T = kineticEnergy; - const G4double zeff = material->GetTotNbOfElectPerVolume()/ - material->GetTotNbOfAtomsPerVolume(); - heChargeSquare = HeEffChargeSquare(zeff, T/CLHEP::MeV); - if(!isAlpha) { T *= rateMassHe2p; } - - if(T < lowestKinEnergy) { - dedx = DEDX(material, lowestKinEnergy)*std::sqrt(T/lowestKinEnergy); + if(kineticEnergy < tlim) { + dedx = HeDEDX(material, tlim)*std::sqrt(kineticEnergy/tlim); } else { - dedx = DEDX(material, T); - } - if(!isAlpha) { dedx /= heChargeSquare; } - if (tmin < tmax) { - const G4double tau = kineticEnergy/mass; - const G4double x = tmin/tmax; - - G4double del = - (G4Log(x)*(tau + 1.)*(tau + 1.)/(tau * (tau + 2.0)) + 1.0 - x) * - CLHEP::twopi_mc2_rcl2*material->GetElectronDensity(); - if(isAlpha) { del *= heChargeSquare; } - dedx += del; + dedx = HeDEDX(material, kineticEnergy); + + if (tmin < tmax) { + const G4double tau = kineticEnergy/mass; + const G4double x = tmin/tmax; + + G4double del = + (G4Log(x)*(tau + 1.)*(tau + 1.)/(tau * (tau + 2.0)) + 1.0 - x) * + CLHEP::twopi_mc2_rcl2*material->GetElectronDensity(); + if(isAlpha) { + const G4double zeff = material->GetTotNbOfElectPerVolume()/ + material->GetTotNbOfAtomsPerVolume(); + heChargeSquare = HeEffChargeSquare(zeff, kineticEnergy/CLHEP::MeV); + del *= heChargeSquare; + } + dedx += del; + } } dedx = std::max(dedx, 0.0); - /* - G4cout << "BraggIon: tkin(MeV) = " << tkin/MeV << " dedx(MeV*cm^2/g) = " - << dedx*gram/(MeV*cm2*material->GetDensity()) - << " q2 = " << chargeSquare << G4endl; + /* + G4cout << "BraggIon: " << material->GetName() + << " E(MeV)=" << kineticEnergy/MeV + << " Tmin(MeV)=" << tmin << " dedx(MeV*cm^2/g)=" + << dedx*gram/(MeV*cm2*material->GetDensity()) + << " q2=" << chargeSquare << G4endl; */ return dedx; } @@ -295,122 +235,19 @@ void G4BraggIonModel::CorrectionsAlongStep(const G4MaterialCutsCouple* couple, const G4double q20 = corr->EffectiveChargeSquareRatio(p, mat, preKinEnergy); const G4double q2 = corr->EffectiveChargeSquareRatio(p, mat, e); const G4double qfactor = q2/q20; - /* + /* G4cout << "G4BraggIonModel::CorrectionsAlongStep: Epre(MeV)=" << preKinEnergy << " Eeff(MeV)=" << e << " eloss=" << eloss << " elossnew=" << eloss*qfactor << " qfactor=" << qfactor << " Qpre=" << q20 << p->GetParticleName() <* vdp, - const G4MaterialCutsCouple* couple, - const G4DynamicParticle* dp, - G4double minEnergy, - G4double maxEnergy) -{ - const G4double tmax = MaxSecondaryKinEnergy(dp); - const G4double xmax = std::min(tmax, maxEnergy); - const G4double xmin = std::max(lowestKinEnergy*massRate, minEnergy); - if(xmin >= xmax) { return; } - - G4double kineticEnergy = dp->GetKineticEnergy(); - const G4double energy = kineticEnergy + mass; - const G4double energy2 = energy*energy; - const G4double beta2 = kineticEnergy*(kineticEnergy + 2.0*mass)/energy2; - const G4double grej = 1.0; - G4double deltaKinEnergy, f; - - CLHEP::HepRandomEngine* rndmEngineMod = G4Random::getTheEngine(); - G4double rndm[2]; - - // sampling follows ... - do { - rndmEngineMod->flatArray(2, rndm); - deltaKinEnergy = xmin*xmax/(xmin*(1.0 - rndm[0]) + xmax*rndm[0]); - - f = 1.0 - beta2*deltaKinEnergy/tmax; - - if(f > grej) { - G4cout << "G4BraggIonModel::SampleSecondary Warning! " - << "Majorant " << grej << " < " - << f << " for e= " << deltaKinEnergy - << G4endl; - } - - // Loop checking, 03-Aug-2015, Vladimir Ivanchenko - } while( grej*rndm[1] >= f ); - - G4ThreeVector deltaDirection; - - if(UseAngularGeneratorFlag()) { - const G4Material* mat = couple->GetMaterial(); - G4int Z = SelectRandomAtomNumber(mat); - - deltaDirection = - GetAngularDistribution()->SampleDirection(dp, deltaKinEnergy, Z, mat); - - } else { - - G4double deltaMomentum = - sqrt(deltaKinEnergy * (deltaKinEnergy + 2.0*electron_mass_c2)); - G4double cost = deltaKinEnergy * (energy + electron_mass_c2) / - (deltaMomentum * dp->GetTotalMomentum()); - if(cost > 1.0) { cost = 1.0; } - G4double sint = sqrt((1.0 - cost)*(1.0 + cost)); - - G4double phi = twopi*rndmEngineMod->flat(); - - deltaDirection.set(sint*cos(phi),sint*sin(phi), cost) ; - deltaDirection.rotateUz(dp->GetMomentumDirection()); - } - - // create G4DynamicParticle object for delta ray - auto delta = new G4DynamicParticle(theElectron,deltaDirection,deltaKinEnergy); - - vdp->push_back(delta); - - // Change kinematics of primary particle - kineticEnergy -= deltaKinEnergy; - G4ThreeVector finalP = dp->GetMomentum() - delta->GetMomentum(); - finalP = finalP.unit(); - - fParticleChange->SetProposedKineticEnergy(kineticEnergy); - fParticleChange->SetProposedMomentumDirection(finalP); -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4double G4BraggIonModel::MaxSecondaryEnergy(const G4ParticleDefinition* pd, - G4double kinEnergy) -{ - if(pd != particle) { SetParticle(pd); } - G4double tau = kinEnergy/mass; - G4double tmax = 2.0*electron_mass_c2*tau*(tau + 2.) / - (1. + 2.0*(tau + 1.)*ratio + ratio*ratio); - return tmax; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -void G4BraggIonModel::SetParticle(const G4ParticleDefinition* p) -{ - particle = p; - mass = particle->GetPDGMass(); - spin = particle->GetPDGSpin(); - G4double q = particle->GetPDGCharge()/CLHEP::eplus; - chargeSquare = q*q; - massRate = mass/CLHEP::proton_mass_c2; - ratio = CLHEP::electron_mass_c2/mass; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... - -G4int G4BraggIonModel::HasMaterial(const G4Material* mat) const +G4int G4BraggIonModel::HasMaterialForHe(const G4Material* mat) const { const G4String& chFormula = mat->GetChemicalFormula(); if(chFormula.empty()) { return -1; } @@ -435,20 +272,16 @@ G4int G4BraggIonModel::HasMaterial(const G4Material* mat) const //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4BraggIonModel::StoppingPower(const G4Material* material, - const G4double kineticEnergy) const +G4double G4BraggIonModel::HeStoppingPower(const G4double kineticEnergy) const { - G4double ionloss = 0.0 ; - + G4double ionloss = 0.0; if (iMolecula >= 0) { // The data and the fit from: // ICRU Report N49, 1993. Ziegler's model for alpha // He energy in internal units of parametrisation formula (MeV) // Input scaled energy of a proton or GenericIon - - // G4double T = kineticEnergy*rateMassHe2p/CLHEP::MeV; - G4double T = kineticEnergy/CLHEP::MeV; + G4double T = kineticEnergy/(massRate*CLHEP::MeV); static const G4float a[11][5] = { {9.43672f, 0.54398f, 84.341f, 1.3705f, 57.422f}, @@ -467,7 +300,7 @@ G4double G4BraggIonModel::StoppingPower(const G4Material* material, 101.96128f, 44.0098f, 16.0426f, 28.0536f, 42.0804f, 104.1512f, 44.665f, 60.0843f, 18.0152f, 18.0152f, 12.0f}; - G4int i = iMolecula; + const G4int i = iMolecula; G4double slow = (G4double)(a[i][0]); @@ -480,7 +313,7 @@ G4double G4BraggIonModel::StoppingPower(const G4Material* material, if ( T < 0.001 ) { G4double shigh = G4Log( 1.0 + x3*1000.0 + x4*0.001 ) *x2*1000.0; ionloss = slow*shigh / (slow + shigh) ; - ionloss *= sqrt(T*1000.0) ; + ionloss *= std::sqrt(T*1000.0) ; // Main parametrisation } else { @@ -495,28 +328,18 @@ G4double G4BraggIonModel::StoppingPower(const G4Material* material, << G4endl; */ } - ionloss = std::max(ionloss, 0.0); - - // He effective charge - ionloss /= (heChargeSquare*atomicWeight[iMolecula]); - - // pure material (normally not the case for this function) - } else if(1 == (material->GetNumberOfElements())) { - const G4double z = material->GetZ() ; - ionloss = ElectronicStoppingPower( z, kineticEnergy ) ; + ionloss = std::max(ionloss, 0.0) * atomicWeight[iMolecula]; } - return ionloss; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double -G4BraggIonModel::ElectronicStoppingPower(const G4double z, - const G4double kineticEnergy) const +G4double G4BraggIonModel::HeElectronicStoppingPower(const G4int z, + const G4double kineticEnergy) const { G4double ionloss ; - G4int i = std::min(std::max(G4lrint(z)-1,0),91); // index of atom + G4int i = std::min(z-1, 91); // index of atom //G4cout << "ElectronicStoppingPower z=" << z << " i=" << i // << " E=" << kineticEnergy << G4endl; // The data and the fit from: @@ -659,16 +482,12 @@ G4BraggIonModel::ElectronicStoppingPower(const G4double z, */ } ionloss = std::max(ionloss, 0.0); - - // He effective charge - // ionloss /= heChargeSquare; - // G4cout << ionloss << G4endl; return ionloss; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4double G4BraggIonModel::DEDX(const G4Material* material, +G4double G4BraggIonModel::HeDEDX(const G4Material* material, const G4double aEnergy) { // aEnergy is energy of alpha @@ -678,13 +497,18 @@ G4double G4BraggIonModel::DEDX(const G4Material* material, currentMaterial = material; baseMaterial = material->GetBaseMaterial() ? material->GetBaseMaterial() : material; + iPSTAR = -1; iASTAR = -1; iMolecula = -1; iICRU90 = (nullptr != fICRU90) ? fICRU90->GetIndex(baseMaterial) : -1; - if(iICRU90 < 0) { - iASTAR = fASTAR->GetIndex(baseMaterial); - if(iASTAR < 0) { iMolecula = HasMaterial(baseMaterial); } + if(iICRU90 < 0) { + if(isAlpha) { + iASTAR = fASTAR->GetIndex(baseMaterial); + if(iASTAR < 0) { iMolecula = HasMaterialForHe(baseMaterial); } + } else { + iPSTAR = fPSTAR->GetIndex(baseMaterial); + } } /* G4cout << "%%% " <GetName() << " iMolecula= " @@ -694,9 +518,16 @@ G4double G4BraggIonModel::DEDX(const G4Material* material, } // ICRU90 if(iICRU90 >= 0) { - eloss = fICRU90->GetElectronicDEDXforAlpha(iICRU90, aEnergy); + eloss = (isAlpha) + ? fICRU90->GetElectronicDEDXforAlpha(iICRU90, aEnergy) + : fICRU90->GetElectronicDEDXforProton(iICRU90, aEnergy); if(eloss > 0.0) { return eloss*material->GetDensity(); } } + // PSTAR parameterisation + if( iPSTAR >= 0 ) { + return fPSTAR->GetElectronicDEDX(iPSTAR, aEnergy) + *material->GetDensity(); + } // ASTAR if( iASTAR >= 0 ) { eloss = fASTAR->GetElectronicDEDX(iASTAR, aEnergy); @@ -709,28 +540,31 @@ G4double G4BraggIonModel::DEDX(const G4Material* material, } const std::size_t numberOfElements = material->GetNumberOfElements(); + const G4ElementVector* theElmVector = material->GetElementVector(); const G4double* theAtomicNumDensityVector = material->GetAtomicNumDensityVector(); + // molecular data use proton stopping power table + // element data from ICRU49 include data for alpha if(iMolecula >= 0) { - - eloss = StoppingPower(baseMaterial, aEnergy)*material->GetDensity()/amu; + const G4double zeff = material->GetTotNbOfElectPerVolume()/ + material->GetTotNbOfAtomsPerVolume(); + heChargeSquare = HeEffChargeSquare(zeff, aEnergy/CLHEP::MeV); + eloss = HeStoppingPower(aEnergy)*heChargeSquare*material->GetDensity()/amu; // pure material } else if(1 == numberOfElements) { - const G4double z = material->GetZ(); - eloss = ElectronicStoppingPower(z, aEnergy) - * (material->GetTotNbOfAtomsPerVolume()); + const G4Element* element = (*theElmVector)[0]; + eloss = HeElectronicStoppingPower(element->GetZasInt(), aEnergy) + * (material->GetTotNbOfAtomsPerVolume()); // Brugg's rule calculation } else { - const G4ElementVector* theElmVector = material->GetElementVector(); - // loop for the elements in the material for (std::size_t i=0; iGetZ(), aEnergy) + eloss += HeElectronicStoppingPower(element->GetZasInt(), aEnergy) * theAtomicNumDensityVector[i]; } } diff --git a/source/processes/electromagnetic/standard/src/G4BraggModel.cc b/source/processes/electromagnetic/standard/src/G4BraggModel.cc index 9720d46e13d..330b0f45209 100644 --- a/source/processes/electromagnetic/standard/src/G4BraggModel.cc +++ b/source/processes/electromagnetic/standard/src/G4BraggModel.cc @@ -76,14 +76,20 @@ #include "G4NistManager.hh" #include "G4Log.hh" #include "G4Exp.hh" +#include "G4AutoLock.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +G4ICRU90StoppingData* G4BraggModel::fICRU90 = nullptr; G4PSTARStopping* G4BraggModel::fPSTAR = nullptr; +namespace +{ + G4Mutex ionMutex = G4MUTEX_INITIALIZER; +} + G4BraggModel::G4BraggModel(const G4ParticleDefinition* p, const G4String& nam) - : G4VEmModel(nam), - protonMassAMU(1.007276) + : G4VEmModel(nam) { SetHighEnergyLimit(2.0*CLHEP::MeV); @@ -94,14 +100,14 @@ G4BraggModel::G4BraggModel(const G4ParticleDefinition* p, const G4String& nam) corr = G4LossTableManager::Instance()->EmCorrections(); if(nullptr != p) { SetParticle(p); } - else { SetParticle(theElectron); } + else { SetParticle(theElectron); } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4BraggModel::~G4BraggModel() { - if(IsMaster()) { + if(isFirst) { delete fPSTAR; fPSTAR = nullptr; } @@ -117,14 +123,21 @@ void G4BraggModel::Initialise(const G4ParticleDefinition* p, // always false before the run SetDeexcitationFlag(false); - if(IsMaster()) { - if(nullptr == fPSTAR) { fPSTAR = new G4PSTARStopping(); } - if(particle->GetPDGMass() < CLHEP::GeV) { fPSTAR->Initialise(); } - if(G4EmParameters::Instance()->UseICRU90Data()) { - if(!fICRU90) { + // initialise data only once + if(nullptr == fPSTAR) { + G4AutoLock l(&ionMutex); + if(nullptr == fPSTAR) { + isFirst = true; + fPSTAR = new G4PSTARStopping(); + if(G4EmParameters::Instance()->UseICRU90Data()) { fICRU90 = G4NistManager::Instance()->GetICRU90StoppingData(); - } else if(particle->GetPDGMass() < CLHEP::GeV) { fICRU90->Initialise(); } - } + } + } + l.unlock(); + } + if(isFirst) { + if(nullptr != fICRU90) { fICRU90->Initialise(); } + fPSTAR->Initialise(); } if(nullptr == fParticleChange) { @@ -144,14 +157,26 @@ void G4BraggModel::Initialise(const G4ParticleDefinition* p, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +void G4BraggModel::SetParticle(const G4ParticleDefinition* p) +{ + particle = p; + mass = particle->GetPDGMass(); + spin = particle->GetPDGSpin(); + G4double q = particle->GetPDGCharge()/CLHEP::eplus; + chargeSquare = q*q; + massRate = mass/CLHEP::proton_mass_c2; + ratio = CLHEP::electron_mass_c2/mass; +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... + G4double G4BraggModel::GetChargeSquareRatio(const G4ParticleDefinition* p, const G4Material* mat, - G4double kineticEnergy) + G4double kinEnergy) { // this method is called only for ions - G4double q2 = corr->EffectiveChargeSquareRatio(p,mat,kineticEnergy); - GetModelOfFluctuations()->SetParticleAndCharge(p, q2); - return q2*corr->EffectiveChargeCorrection(p,mat,kineticEnergy); + chargeSquare = corr->EffectiveChargeSquareRatio(p, mat, kinEnergy); + return chargeSquare; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -230,22 +255,22 @@ G4double G4BraggModel::CrossSectionPerVolume(const G4Material* material, G4double G4BraggModel::ComputeDEDXPerVolume(const G4Material* material, const G4ParticleDefinition* p, - G4double kineticEnergy, + G4double kinEnergy, G4double cut) { - const G4double tmax = MaxSecondaryEnergy(p, kineticEnergy); - const G4double tkin = kineticEnergy/massRate; - const G4double cutEnergy = std::max(cut, lowestKinEnergy*massRate); + const G4double tmax = MaxSecondaryEnergy(p, kinEnergy); + const G4double tlim = lowestKinEnergy*massRate; + const G4double tmin = std::max(std::min(cut, tmax), tlim); G4double dedx = 0.0; - if(tkin < lowestKinEnergy) { - dedx = DEDX(material, lowestKinEnergy)*std::sqrt(tkin/lowestKinEnergy); + if(kinEnergy < tlim) { + dedx = DEDX(material, lowestKinEnergy)*std::sqrt(kinEnergy/tlim); } else { - dedx = DEDX(material, tkin); + dedx = DEDX(material, kinEnergy); - if (cutEnergy < tmax) { - const G4double tau = kineticEnergy/mass; - const G4double x = cutEnergy/tmax; + if (tmin < tmax) { + const G4double tau = kinEnergy/mass; + const G4double x = tmin/tmax; dedx += (G4Log(x)*(tau + 1.)*(tau + 1.)/(tau * (tau + 2.0)) + 1.0 - x) * CLHEP::twopi_mc2_rcl2 * material->GetElectronDensity(); @@ -268,7 +293,7 @@ void G4BraggModel::SampleSecondaries(std::vector* vdp, { const G4double tmax = MaxSecondaryKinEnergy(dp); const G4double xmax = std::min(tmax, maxEnergy); - const G4double xmin = std::max(lowestKinEnergy*massRate, minEnergy); + const G4double xmin = std::max(lowestKinEnergy*massRate, std::min(minEnergy, xmax)); if(xmin >= xmax) { return; } G4double kineticEnergy = dp->GetKineticEnergy(); @@ -328,7 +353,7 @@ void G4BraggModel::SampleSecondaries(std::vector* vdp, // Change kinematics of primary particle kineticEnergy -= deltaKinEnergy; G4ThreeVector finalP = dp->GetMomentum() - delta->GetMomentum(); - finalP = finalP.unit(); + finalP = finalP.unit(); fParticleChange->SetProposedKineticEnergy(kineticEnergy); fParticleChange->SetProposedMomentumDirection(finalP); diff --git a/source/processes/electromagnetic/standard/src/G4CoulombScattering.cc b/source/processes/electromagnetic/standard/src/G4CoulombScattering.cc index ce52ed72fed..08ea139b9f7 100644 --- a/source/processes/electromagnetic/standard/src/G4CoulombScattering.cc +++ b/source/processes/electromagnetic/standard/src/G4CoulombScattering.cc @@ -55,12 +55,11 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -using namespace std; - -G4CoulombScattering::G4CoulombScattering(const G4String& name) - : G4VEmProcess(name),q2Max(CLHEP::TeV*CLHEP::TeV),isInitialised(false) +G4CoulombScattering::G4CoulombScattering(const G4String& nam, G4bool comb) + : G4VEmProcess(nam), + q2Max(CLHEP::TeV*CLHEP::TeV), + isCombined(comb) { - // G4cout << "G4CoulombScattering constructor "<< G4endl; SetBuildTableFlag(true); SetStartFromNullFlag(false); SetSplineFlag(false); @@ -71,6 +70,18 @@ G4CoulombScattering::G4CoulombScattering(const G4String& name) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... +G4CoulombScattering::G4CoulombScattering(const G4String& nam) + : G4CoulombScattering(nam, true) +{} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4CoulombScattering::G4CoulombScattering(G4bool comb) + : G4CoulombScattering("CoulombScat", comb) +{} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + G4CoulombScattering::~G4CoulombScattering() = default; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... @@ -95,42 +106,45 @@ void G4CoulombScattering::InitialiseProcess(const G4ParticleDefinition* p) G4double theta = param->MscThetaLimit(); // restricted or non-restricted cross section table - G4bool yes = false; - if(theta == CLHEP::pi) { - yes = true; - // for restriced single scattering change cross section shape - SetCrossSectionType(fEmIncreasing); + if(isCombined) { + if(theta == CLHEP::pi) { + // for restriced single scattering change cross section shape + SetCrossSectionType(fEmIncreasing); + SetStartFromNullFlag(true); + } + } else { + SetSplineFlag(true); + SetCrossSectionType(fEmDecreasing); } - SetStartFromNullFlag(yes); - /* - G4cout << "### G4CoulombScattering::InitialiseProcess: " - << p->GetParticleName() - << " Emin(MeV)= " << MinKinEnergy()/MeV - << " Emax(TeV)= " << MaxKinEnergy()/TeV - << " nbins= " << LambdaBinning() - << " theta= " << theta - << G4endl; - */ - isInitialised = true; G4double mass = p->GetPDGMass(); G4String name = p->GetParticleName(); - //G4cout << name << " type: " << p->GetParticleType() - //<< " mass= " << mass << G4endl; - yes = true; + + G4bool ion = false; if (mass > CLHEP::GeV || p->GetParticleType() == "nucleus") { SetBuildTableFlag(false); - yes = false; + ion = true; if(name != "GenericIon") { SetVerboseLevel(0); } } else { if(name != "e-" && name != "e+" && name != "mu+" && name != "mu-" && name != "pi+" && name != "kaon+" && name != "proton" ) { SetVerboseLevel(0); } } - + /* + G4cout << "### G4CoulombScattering::InitialiseProcess: " + << p->GetParticleName() + << " Emin(MeV)= " << MinKinEnergy()/MeV + << " Emax(TeV)= " << MaxKinEnergy()/TeV + << " nbins= " << LambdaBinning() + << " theta= " << theta + << " mass(MeV)= " << mass + << " isCombined=" << isCombined + << " ion=" << ion + << G4endl; + */ if(nullptr == EmModel(0)) { - if(yes) { SetEmModel(new G4eCoulombScatteringModel()); } - else { SetEmModel(new G4IonCoulombScatteringModel()); } + if(ion) { SetEmModel(new G4IonCoulombScatteringModel()); } + else { SetEmModel(new G4eCoulombScatteringModel(isCombined)); } } G4VEmModel* model = EmModel(0); G4double emin = std::max(param->MinKinEnergy(),model->LowEnergyLimit()); @@ -153,9 +167,9 @@ G4double G4CoulombScattering::MinPrimaryEnergy(const G4ParticleDefinition* part, G4double theta = G4EmParameters::Instance()->MscThetaLimit(); if(0.0 < theta) { - G4double p2 = q2Max*mat->GetIonisation()->GetInvA23()/(1.0 - cos(theta)); + G4double p2 = q2Max*mat->GetIonisation()->GetInvA23()/(1.0 - std::cos(theta)); G4double mass = part->GetPDGMass(); - emin = sqrt(p2 + mass*mass) - mass; + emin = p2/(std::sqrt(p2 + mass*mass) + mass); } return emin; @@ -171,7 +185,9 @@ void G4CoulombScattering::StreamProcessInfo(std::ostream& outFile) const else { outFile << tetmin; } outFile << " < Theta(degree) < 180"; - if(q2Max < DBL_MAX) { outFile << "; pLimit(GeV^1)= " << sqrt(q2Max)/GeV; } + if(q2Max < DBL_MAX) { + outFile << ", pLimit(GeV^1)= " << std::sqrt(q2Max)/GeV; + } outFile << G4endl; } diff --git a/source/processes/electromagnetic/standard/src/G4ESTARStopping.cc b/source/processes/electromagnetic/standard/src/G4ESTARStopping.cc index 2545a655a70..e9152413343 100644 --- a/source/processes/electromagnetic/standard/src/G4ESTARStopping.cc +++ b/source/processes/electromagnetic/standard/src/G4ESTARStopping.cc @@ -46,6 +46,7 @@ #include "G4ESTARStopping.hh" #include "G4SystemOfUnits.hh" #include "G4Material.hh" +#include "G4EmParameters.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -101,14 +102,7 @@ G4double G4ESTARStopping::GetElectronicDEDX(G4int i, G4double energy) } void G4ESTARStopping::Initialise() -{ - dirPath = G4FindDataDir("G4LEDATA"); - if(!dirPath) { - G4Exception("G4ESTARStopping()","em0006",FatalException, - "Environment variable G4LEDATA not defined"); - return; - } - +{ static const G4double T0[25]={1.0E-03,3.0E-03,5.0E-03,9.0E-03,2.5E-02,4.5E-02,8.0E-02,.2,.4,.7,1.5,3.5,6.0,10.,30.,50.,90.,250.,450.,800.,2000.,4.0E+03,6.0E+03,8.0E+03,1.0E+04}; name[1]="G4_1,2-DICHLOROBENZENE"; @@ -960,6 +954,8 @@ void G4ESTARStopping::AddData(const G4double* ekin, const G4double* stop, static const G4double fac = MeV*cm2/g; if(nullptr != sdata[idx]) { delete sdata[idx]; } + const G4String& dirPath = G4EmParameters::Instance()->GetDirLEDATA(); + // hardtyped data if(0 == type) { sdata[idx] = new G4PhysicsFreeVector(25, ekin[0]*MeV, ekin[24]*MeV, true); diff --git a/source/processes/electromagnetic/standard/src/G4GSMottCorrection.cc b/source/processes/electromagnetic/standard/src/G4GSMottCorrection.cc index 51528e58c26..34f4ff0d59d 100644 --- a/source/processes/electromagnetic/standard/src/G4GSMottCorrection.cc +++ b/source/processes/electromagnetic/standard/src/G4GSMottCorrection.cc @@ -53,6 +53,7 @@ #include "G4Material.hh" #include "G4ElementVector.hh" #include "G4Element.hh" +#include "G4EmParameters.hh" #include #include @@ -262,14 +263,7 @@ void G4GSMottCorrection::LoadMCDataElement(const G4Element *elem) { fMCDataPerElement[izet] = perElem; // // load data from file - const char* tmppath = G4FindDataDir("G4LEDATA"); - if (!tmppath) { - G4Exception("G4GSMottCorrection::LoadMCDataElement()","em0006", - FatalException, - "Environment variable G4LEDATA not defined"); - return; - } - std::string path(tmppath); + std::string path = G4EmParameters::Instance()->GetDirLEDATA(); if (fIsElectron) { path += "/msc_GS/MottCor/el/"; } else { diff --git a/source/processes/electromagnetic/standard/src/G4GSPWACorrections.cc b/source/processes/electromagnetic/standard/src/G4GSPWACorrections.cc index b91821149dc..9c18768cdc8 100644 --- a/source/processes/electromagnetic/standard/src/G4GSPWACorrections.cc +++ b/source/processes/electromagnetic/standard/src/G4GSPWACorrections.cc @@ -51,6 +51,7 @@ #include "G4Material.hh" #include "G4ElementVector.hh" #include "G4Element.hh" +#include "G4EmParameters.hh" const std::string G4GSPWACorrections::gElemSymbols[] = {"H","He","Li","Be","B" , @@ -180,14 +181,7 @@ void G4GSPWACorrections::LoadDataElement(const G4Element *elem) { izet = gMaxZet; } // load data from file - const char* tmppath = G4FindDataDir("G4LEDATA"); - if (!tmppath) { - G4Exception("G4GSPWACorrection::LoadDataElement()","em0006", - FatalException, - "Environment variable G4LEDATA not defined"); - return; - } - std::string path(tmppath); + std::string path = G4EmParameters::Instance()->GetDirLEDATA(); if (fIsElectron) { path += "/msc_GS/PWACor/el/"; } else { diff --git a/source/processes/electromagnetic/standard/src/G4GoudsmitSaundersonTable.cc b/source/processes/electromagnetic/standard/src/G4GoudsmitSaundersonTable.cc index cd8b8943699..ed05558f6cb 100644 --- a/source/processes/electromagnetic/standard/src/G4GoudsmitSaundersonTable.cc +++ b/source/processes/electromagnetic/standard/src/G4GoudsmitSaundersonTable.cc @@ -87,6 +87,7 @@ #include "G4Material.hh" #include "G4MaterialCutsCouple.hh" #include "G4ProductionCutsTable.hh" +#include "G4EmParameters.hh" #include "G4String.hh" @@ -435,16 +436,8 @@ G4GoudsmitSaundersonTable::GSMSCAngularDtr* G4GoudsmitSaundersonTable::GetGSAngu void G4GoudsmitSaundersonTable::LoadMSCData() { - const char* path = G4FindDataDir("G4LEDATA"); - if (!path) { - G4Exception("G4GoudsmitSaundersonTable::LoadMSCData()","em0006", - FatalException, - "Environment variable G4LEDATA not defined"); - return; - } - // gGSMSCAngularDistributions1.resize(gLAMBNUM*gQNUM1,nullptr); - const G4String str1 = G4String(path) + "/msc_GS/GSGrid_1/gsDistr_"; + const G4String str1 = G4EmParameters::Instance()->GetDirLEDATA() + "/msc_GS/GSGrid_1/gsDistr_"; for (G4int il=0; ilGetDirLEDATA() + "/msc_GS/GSGrid_2/gsDistr_"; for (G4int il=0; il; } } @@ -111,13 +111,17 @@ G4IonICRU73Data::G4IonICRU73Data() G4IonICRU73Data::~G4IonICRU73Data() { delete fVector; - for(G4int i=0; i<81; ++i) { + for(G4int i=3; i<=ZPROJMAX; ++i) { auto v = fMatData[i]; - for(G4int j=0; jGetNumberOfElements()) { - G4int Z1 = std::min((*(mat->GetElementVector()))[0]->GetZasInt(), 80); + G4int Z1 = std::min((*(mat->GetElementVector()))[0]->GetZasInt(), ZTARGMAX); v = fElmData[Z2][Z1]; } else { G4int idx = fMatIndex[mat->GetIndex()]; @@ -149,27 +153,20 @@ void G4IonICRU73Data::Initialise() { // fill directory path if(fDataDirectory.empty()) { - const char* path = G4FindDataDir("G4LEDATA"); - if (nullptr != path) { - std::ostringstream ost; - ost << path << "/ion_stopping_data/"; - fDataDirectory = ost.str(); - } else { - G4Exception("G4IonICRU73Data::Initialise(..)","em013", - FatalException, - "Environment variable G4LEDATA is not defined"); - } + std::ostringstream ost; + ost << G4EmParameters::Instance()->GetDirLEDATA() << "/ion_stopping_data/"; + fDataDirectory = ost.str(); } std::size_t nmat = G4Material::GetNumberOfMaterials(); if(nmat == fMatIndex.size()) { return; } - if(0 < fVerbose) { + if(1 < fVerbose) { G4cout << "### G4IonICRU73Data::Initialise() for " << nmat << " materials" << G4endl; } fMatIndex.resize(nmat, -1); - for(G4int j=0; j<81; ++j) { + for(G4int j=3; j<=ZPROJMAX; ++j) { fMatData[j]->resize(nmat, nullptr); } G4bool useICRU90 = G4EmParameters::Instance()->UseICRU90Data(); @@ -181,7 +178,8 @@ void G4IonICRU73Data::Initialise() G4int idx = (G4int)mat->GetIndex(); if(1 < fVerbose) { G4cout << i << ". material:" << mat->GetName() - << " idx=" << idx << G4endl; + << " idx=" << idx << " matIdx=" << fMatIndex[idx] + << " fNmat=" << fNmat << G4endl; } if(fMatIndex[idx] == -1) { fMatIndex[idx] = i; @@ -191,7 +189,7 @@ void G4IonICRU73Data::Initialise() ReadElementData(mat, useICRU90); isOK = true; if(1 < fVerbose) { - G4cout << "Material from single element" << G4endl; + G4cout << "Material from single element fNmat=" << fNmat << G4endl; } } if(!isOK && useICRU90) { @@ -225,6 +223,9 @@ void G4IonICRU73Data::Initialise() } } } + if(1 < fVerbose) { + G4cout << " matData: " << fMatData[i] << G4endl; + } } } @@ -235,7 +236,7 @@ void G4IonICRU73Data::ReadMaterialData(const G4Material* mat, const G4bool useICRU90) { G4String name = mat->GetName(); - for(G4int Z=3; Z<81; ++Z) { + for(G4int Z=3; Z<=ZPROJMAX; ++Z) { std::ostringstream ost; ost << fDataDirectory << "icru"; G4int Z1 = Z; @@ -294,7 +295,7 @@ void G4IonICRU73Data::ReadElementData(const G4Material* mat, G4bool useICRU90) const G4ElementVector* elmv = mat->GetElementVector(); const G4double* dens = mat->GetFractionVector(); const G4int nelm = (G4int)mat->GetNumberOfElements(); - for(G4int Z=3; Z<81; ++Z) { + for(G4int Z=3; ZGetZasInt(), useICRU90); @@ -310,8 +311,8 @@ void G4IonICRU73Data::ReadElementData(const G4Material* mat, G4bool useICRU90) v->PutValue(i, dedx); } if(fSpline) { v->FillSecondDerivatives(); } + (*(fMatData[Z]))[fNmat] = v; } - (*(fMatData[Z]))[fNmat] = v; // scale data for correct units if(nullptr != v) { const G4double fact = @@ -333,7 +334,7 @@ G4IonICRU73Data::FindOrBuildElementData(const G4int Z, const G4int Z1, G4bool useICRU90) { G4PhysicsLogVector* v = nullptr; - if(Z <= 80 && Z1 <= 92) { + if(Z <= ZPROJMAX && Z1 <= ZTARGMAX) { v = fElmData[Z][Z1]; if(nullptr == v) { G4int Z2 = Z1; @@ -413,7 +414,7 @@ G4IonICRU73Data::RetrieveVector(std::ostringstream& ost, G4bool warn) v->PutValue(i, dedx); } if(fSpline) { v->FillSecondDerivatives(); } - if(fVerbose > 1) { G4cout << *v << G4endl; } + if(fVerbose > 2) { G4cout << *v << G4endl; } } } return v; diff --git a/source/processes/electromagnetic/standard/src/G4LindhardSorensenIonModel.cc b/source/processes/electromagnetic/standard/src/G4LindhardSorensenIonModel.cc index 76b81901dd4..79e196f6499 100644 --- a/source/processes/electromagnetic/standard/src/G4LindhardSorensenIonModel.cc +++ b/source/processes/electromagnetic/standard/src/G4LindhardSorensenIonModel.cc @@ -52,9 +52,10 @@ #include "G4Log.hh" #include "G4DeltaAngle.hh" #include "G4LindhardSorensenData.hh" -#include "G4BraggIonModel.hh" +#include "G4BraggModel.hh" #include "G4BetheBlochModel.hh" #include "G4IonICRU73Data.hh" +#include "G4AutoLock.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -62,26 +63,35 @@ using namespace std; G4LindhardSorensenData* G4LindhardSorensenIonModel::lsdata = nullptr; G4IonICRU73Data* G4LindhardSorensenIonModel::fIonData = nullptr; -std::vector* G4LindhardSorensenIonModel::fact[] = {nullptr}; + +namespace +{ + G4Mutex ionXSMutex = G4MUTEX_INITIALIZER; +} G4LindhardSorensenIonModel::G4LindhardSorensenIonModel(const G4ParticleDefinition*, const G4String& nam) : G4VEmModel(nam), - particle(nullptr), twoln10(2.0*G4Log(10.0)) { - fParticleChange = nullptr; theElectron = G4Electron::Electron(); corr = G4LossTableManager::Instance()->EmCorrections(); nist = G4NistManager::Instance(); - fBraggModel = new G4BraggIonModel(); + fBraggModel = new G4BraggModel(); fBBModel = new G4BetheBlochModel(); fElimit = 2.0*CLHEP::MeV; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4LindhardSorensenIonModel::~G4LindhardSorensenIonModel() = default; +G4LindhardSorensenIonModel::~G4LindhardSorensenIonModel() { + if(isFirst) { + delete lsdata; + delete fIonData; + lsdata = nullptr; + fIonData = nullptr; + } +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -91,8 +101,6 @@ void G4LindhardSorensenIonModel::Initialise(const G4ParticleDefinition* p, fBraggModel->Initialise(p, ptr); fBBModel->Initialise(p, ptr); SetParticle(p); - //G4cout << "G4LindhardSorensenIonModel::Initialise for " - // << p->GetParticleName() << G4endl; // always false before the run SetDeexcitationFlag(false); @@ -103,13 +111,16 @@ void G4LindhardSorensenIonModel::Initialise(const G4ParticleDefinition* p, SetAngularDistribution(new G4DeltaAngle()); } } - if(IsMaster()) { + if(nullptr == lsdata) { + G4AutoLock l(&ionXSMutex); if(nullptr == lsdata) { + isFirst = true; lsdata = new G4LindhardSorensenData(); - } - if(nullptr == fIonData) { fIonData = new G4IonICRU73Data(); } + l.unlock(); + } + if(isFirst) { fIonData->Initialise(); } } @@ -121,7 +132,7 @@ G4LindhardSorensenIonModel::GetChargeSquareRatio(const G4ParticleDefinition* p, const G4Material* mat, G4double kinEnergy) { - chargeSquare = corr->EffectiveChargeSquareRatio(p,mat,kinEnergy); + chargeSquare = corr->EffectiveChargeSquareRatio(p, mat, kinEnergy); return chargeSquare; } @@ -230,7 +241,7 @@ G4LindhardSorensenIonModel::ComputeDEDXPerVolume(const G4Material* mat, : fBBModel->ComputeDEDXPerVolume(mat, p, kinEnergy, cutEnergy); //G4cout << "E(MeV)=" << kinEnergy/MeV << " dedx=" << dedx - // << " " << material->GetName() << " Ecut(MeV)=" << cutEnergy << G4endl; + // << " " << mat->GetName() << " Ecut(MeV)=" << cutEnergy << G4endl; return dedx; } @@ -254,8 +265,6 @@ void G4LindhardSorensenIonModel::CorrectionsAlongStep( const G4double tmax = MaxSecondaryEnergy(p, e); const G4double escaled = e*pRatio; const G4double tau = e/mass; - - const G4double q20 = corr->EffectiveChargeSquareRatio(p, mat, preKinEnergy); const G4double q2 = corr->EffectiveChargeSquareRatio(p, mat, e); const G4int Z = p->GetAtomicNumber(); @@ -265,7 +274,7 @@ void G4LindhardSorensenIonModel::CorrectionsAlongStep( if(Z > 2 && Z <= 80) { res = fIonData->GetDEDX(mat, Z, escaled, G4Log(escaled)); /* - G4cout << "GetDEDX for Z=" << Z << " in " << mat->GetName() + G4cout << " GetDEDX for Z=" << Z << " in " << mat->GetName() << " Escaled=" << escaled << " E=" << e << " dEdx=" << res << G4endl; */ @@ -281,7 +290,7 @@ void G4LindhardSorensenIonModel::CorrectionsAlongStep( res *= length; } else { // simplified correction - res = eloss*q2/q20; + res = eloss*q2/chargeSquare; } } else { // Lindhard-Sorensen model @@ -292,18 +301,16 @@ void G4LindhardSorensenIonModel::CorrectionsAlongStep( res = eloss + CLHEP::twopi_mc2_rcl2*q2*eDensity*(deltaL+deltaL0)*length/beta2; - /* - G4cout << "G4LindhardSorensenIonModel::CorrectionsAlongStep: E(GeV)= " - << preKinEnergy/GeV << " eloss(MeV)= " << eloss - << " L= " << eloss*beta2/(twopi_mc2_rcl2*chargeSquare*eDensity*length) - << " dL0= " << deltaL0 - << " dL= " << deltaL << G4endl; - */ + /* + G4cout << " E(GeV)=" << preKinEnergy/GeV << " eloss(MeV)=" << eloss + << " L= " << eloss*beta2/(twopi_mc2_rcl2*q2*eDensity*length) + << " dL0= " << deltaL0 + << " dL= " << deltaL << " dE(MeV)=" << res - eloss << G4endl; + */ } - if(res > preKinEnergy) { res = preKinEnergy; } - else if(res < 0.0) { res = eloss; } + if(res > preKinEnergy || 2*res < eloss) { res = eloss; } /* - G4cout << "G4LindhardSorensenIonModel::CorrectionsAlongStep: E(GeV)=" + G4cout << " G4LindhardSorensenIonModel::CorrectionsAlongStep: E(GeV)=" << preKinEnergy/GeV << " eloss(MeV)=" << eloss << " res(MeV)=" << res << G4endl; */ @@ -321,17 +328,17 @@ void G4LindhardSorensenIonModel::SampleSecondaries( { G4double kineticEnergy = dp->GetKineticEnergy(); // take into account formfactor - G4double tmax = MaxSecondaryEnergy(dp->GetDefinition(),kineticEnergy); - G4double minKinEnergy = std::min(cut, tmax); - G4double maxKinEnergy = std::min(maxEnergy,tmax); + const G4double tmax = MaxSecondaryEnergy(dp->GetDefinition(), kineticEnergy); + const G4double minKinEnergy = std::min(cut, tmax); + const G4double maxKinEnergy = std::min(maxEnergy, tmax); if(minKinEnergy >= maxKinEnergy) { return; } //G4cout << "G4LindhardSorensenIonModel::SampleSecondaries Emin= " // << minKinEnergy << " Emax= " << maxKinEnergy << G4endl; - G4double totEnergy = kineticEnergy + mass; - G4double etot2 = totEnergy*totEnergy; - G4double beta2 = kineticEnergy*(kineticEnergy + 2.0*mass)/etot2; + G4double totEnergy = kineticEnergy + mass; + G4double etot2 = totEnergy*totEnergy; + G4double beta2 = kineticEnergy*(kineticEnergy + 2.0*mass)/etot2; G4double deltaKinEnergy, f; G4double f1 = 0.0; @@ -421,7 +428,7 @@ void G4LindhardSorensenIonModel::SampleSecondaries( // Change kinematics of primary particle kineticEnergy -= deltaKinEnergy; G4ThreeVector finalP = dp->GetMomentum() - delta->GetMomentum(); - finalP = finalP.unit(); + finalP = finalP.unit(); fParticleChange->SetProposedKineticEnergy(kineticEnergy); fParticleChange->SetProposedMomentumDirection(finalP); diff --git a/source/processes/electromagnetic/standard/src/G4PAIModel.cc b/source/processes/electromagnetic/standard/src/G4PAIModel.cc index 492d46bbecd..d0033dd7ab4 100644 --- a/source/processes/electromagnetic/standard/src/G4PAIModel.cc +++ b/source/processes/electromagnetic/standard/src/G4PAIModel.cc @@ -148,13 +148,6 @@ void G4PAIModel::Initialise(const G4ParticleDefinition* p, G4Material* mat = (*theMaterialTable)[jMat]; const G4MaterialCutsCouple* cutCouple = reg->FindCouple(mat); std::size_t n = fMaterialCutsCoupleVector.size(); - /* - G4cout << "Region: " << reg->GetName() << " " << reg - << " Couple " << cutCouple - << " PAI defined for " << n << " couples" - << " jMat= " << jMat << " " << mat->GetName() - << G4endl; - */ if(nullptr != cutCouple) { if(fVerbose > 1) { G4cout << "Region <" << curReg->GetName() << "> mat <" @@ -189,10 +182,9 @@ void G4PAIModel::Initialise(const G4ParticleDefinition* p, ///////////////////////////////////////////////////////////////////////// -void G4PAIModel::InitialiseLocal(const G4ParticleDefinition* p, +void G4PAIModel::InitialiseLocal(const G4ParticleDefinition*, G4VEmModel* masterModel) { - SetParticle(p); fModelData = static_cast(masterModel)->GetPAIModelData(); fMaterialCutsCoupleVector = static_cast(masterModel)->GetVectorOfCouples(); @@ -214,20 +206,13 @@ G4double G4PAIModel::ComputeDEDXPerVolume(const G4Material*, G4double kineticEnergy, G4double cutEnergy) { - //G4cout << "===1=== " << CurrentCouple() - // << " idx= " << CurrentCouple()->GetIndex() - // << " " << fMaterialCutsCoupleVector[0] - // << G4endl; G4int coupleIndex = FindCoupleIndex(CurrentCouple()); - //G4cout << "===2=== " << coupleIndex << G4endl; if(0 > coupleIndex) { return 0.0; } G4double cut = std::min(MaxSecondaryEnergy(p, kineticEnergy), cutEnergy); - G4double scaledTkin = kineticEnergy*fRatio; - - return fChargeSquare*fModelData->DEDXPerVolume(coupleIndex, scaledTkin, - cut); + G4double dedx = fChargeSquare*fModelData->DEDXPerVolume(coupleIndex, scaledTkin, cut); + return dedx; } ///////////////////////////////////////////////////////////////////////// @@ -238,23 +223,16 @@ G4double G4PAIModel::CrossSectionPerVolume( const G4Material*, G4double cutEnergy, G4double maxEnergy ) { - //G4cout << "===3=== " << CurrentCouple() - // << " idx= " << CurrentCouple()->GetIndex() - // << " " << fMaterialCutsCoupleVector[0] - // << G4endl; G4int coupleIndex = FindCoupleIndex(CurrentCouple()); - //G4cout << "===4=== " << coupleIndex << G4endl; if(0 > coupleIndex) { return 0.0; } G4double tmax = std::min(MaxSecondaryEnergy(p, kineticEnergy), maxEnergy); if(tmax <= cutEnergy) { return 0.0; } G4double scaledTkin = kineticEnergy*fRatio; - - return fChargeSquare*fModelData->CrossSectionPerVolume(coupleIndex, - scaledTkin, - cutEnergy, - tmax); + G4double xs = fChargeSquare*fModelData->CrossSectionPerVolume(coupleIndex, + scaledTkin, cutEnergy, tmax); + return xs; } /////////////////////////////////////////////////////////////////////////// @@ -303,7 +281,7 @@ void G4PAIModel::SampleSecondaries(std::vector* vdp, const G4Element* anElement = SelectTargetAtom(matCC, fParticle, kineticEnergy, dp->GetLogKineticEnergy()); - G4int Z = G4lrint(anElement->GetZ()); + G4int Z = anElement->GetZasInt(); auto deltaRay = new G4DynamicParticle(fElectron, GetAngularDistribution()->SampleDirection(dp, deltaTkin, diff --git a/source/processes/electromagnetic/standard/src/G4PAIModelData.cc b/source/processes/electromagnetic/standard/src/G4PAIModelData.cc index f7b81cca775..7e11197c939 100644 --- a/source/processes/electromagnetic/standard/src/G4PAIModelData.cc +++ b/source/processes/electromagnetic/standard/src/G4PAIModelData.cc @@ -171,10 +171,7 @@ void G4PAIModelData::Initialise(const G4MaterialCutsCouple* couple, //G4cout << "DEDXVector:" << G4endl; //G4cout << *dEdxVector << G4endl; - G4double ionloss = fPAIySection.GetMeanEnergyLoss();// total - - if(ionloss < 0.0) ionloss = 0.0; - + G4double ionloss = std::max(fPAIySection.GetMeanEnergyLoss(), 0.0);// total dEdxMeanVector->PutValue(i,ionloss); PAItransferTable->insertAt(i,transferVector); diff --git a/source/processes/electromagnetic/standard/src/G4PAIPhotData.cc b/source/processes/electromagnetic/standard/src/G4PAIPhotData.cc index 52ca807cf88..7335e487c65 100644 --- a/source/processes/electromagnetic/standard/src/G4PAIPhotData.cc +++ b/source/processes/electromagnetic/standard/src/G4PAIPhotData.cc @@ -141,11 +141,11 @@ void G4PAIPhotData::Initialise(const G4MaterialCutsCouple* couple, const vector* photonCutInKineticEnergy = theCoupleTable->GetEnergyCutsVector(idxG4GammaCut); G4double deltaCutInKineticEnergyNow = (*deltaCutInKineticEnergy)[jMatCC]; G4double photonCutInKineticEnergyNow = (*photonCutInKineticEnergy)[jMatCC]; - + /* G4cout<<"G4PAIPhotData::Initialise: "<<"cut = "< - - if(ionloss < 0.0) ionloss = 0.0; - + G4double ionloss = std::max(fPAIxSection.GetMeanEnergyLoss(), 0.0);// total dEdxMeanVector->PutValue(i,ionloss); G4double dNdxCut = transferVector->Value(deltaCutInKineticEnergyNow)/deltaCutInKineticEnergyNow; diff --git a/source/processes/electromagnetic/standard/src/G4PAIPhotModel.cc b/source/processes/electromagnetic/standard/src/G4PAIPhotModel.cc index f5632227226..ca3341f77a8 100644 --- a/source/processes/electromagnetic/standard/src/G4PAIPhotModel.cc +++ b/source/processes/electromagnetic/standard/src/G4PAIPhotModel.cc @@ -42,14 +42,9 @@ #include "G4SystemOfUnits.hh" #include "G4PhysicalConstants.hh" #include "G4Region.hh" -#include "G4PhysicsLogVector.hh" -#include "G4PhysicsFreeVector.hh" -#include "G4PhysicsTable.hh" #include "G4ProductionCutsTable.hh" #include "G4MaterialCutsCouple.hh" #include "G4MaterialTable.hh" -#include "G4SandiaTable.hh" -#include "G4OrderedTable.hh" #include "G4RegionStore.hh" #include "Randomize.hh" @@ -92,7 +87,6 @@ G4PAIPhotModel::G4PAIPhotModel(const G4ParticleDefinition* p, const G4String& na G4PAIPhotModel::~G4PAIPhotModel() { - //G4cout << "G4PAIPhotModel::~G4PAIPhotModel() " << this << G4endl; if(IsMaster()) { delete fModelData; fModelData = nullptr; } } @@ -101,7 +95,7 @@ G4PAIPhotModel::~G4PAIPhotModel() void G4PAIPhotModel::Initialise(const G4ParticleDefinition* p, const G4DataVector& cuts) { - if(fVerbose > 0) + if(fVerbose > 1) { G4cout<<"G4PAIPhotModel::Initialise for "<GetParticleName()<FindCouple(mat); - //G4cout << "Couple <" << fCutCouple << G4endl; - if(cutCouple) + if(nullptr != cutCouple) { - if(fVerbose>0) + if(fVerbose > 1) { G4cout << "Reg <" <GetName() << "> mat <" << mat->GetName() << "> fCouple= " @@ -178,6 +168,7 @@ void G4PAIPhotModel::Initialise(const G4ParticleDefinition* p, } } } + InitialiseElementSelectors(p, cuts); } } @@ -210,10 +201,9 @@ G4double G4PAIPhotModel::ComputeDEDXPerVolume(const G4Material*, if(0 > coupleIndex) { return 0.0; } G4double cut = std::min(MaxSecondaryEnergy(p, kineticEnergy), cutEnergy); - G4double scaledTkin = kineticEnergy*fRatio; - - return fChargeSquare*fModelData->DEDXPerVolume(coupleIndex, scaledTkin, cut); + G4double dedx = fChargeSquare*fModelData->DEDXPerVolume(coupleIndex, scaledTkin, cut); + return dedx; } ///////////////////////////////////////////////////////////////////////// @@ -225,18 +215,15 @@ G4double G4PAIPhotModel::CrossSectionPerVolume( const G4Material*, G4double maxEnergy ) { G4int coupleIndex = FindCoupleIndex(CurrentCouple()); - - if(0 > coupleIndex) return 0.0; + if(0 > coupleIndex) { return 0.0; } G4double tmax = std::min(MaxSecondaryEnergy(p, kineticEnergy), maxEnergy); - - if(tmax <= cutEnergy) return 0.0; + if(tmax <= cutEnergy) { return 0.0; } G4double scaledTkin = kineticEnergy*fRatio; - G4double xsc = fChargeSquare*fModelData->CrossSectionPerVolume(coupleIndex, - scaledTkin, - cutEnergy, tmax); - return xsc; + G4double xs = fChargeSquare*fModelData->CrossSectionPerVolume(coupleIndex, + scaledTkin, cutEnergy, tmax); + return xs; } /////////////////////////////////////////////////////////////////////////// @@ -277,15 +264,15 @@ void G4PAIPhotModel::SampleSecondaries(std::vector* vdp, if( deltaTkin <= 0. && fVerbose > 0) { - G4cout<<"G4PAIPhotModel::SampleSecondary e- deltaTkin = "<GetMaterial()->GetName() << G4endl; - G4double Tkin = aParticle->GetKineticEnergy(); G4double scaledTkin = Tkin*fRatio; G4double loss = fModelData->SampleAlongStepPhotonTransfer(coupleIndex, Tkin, - scaledTkin, - step*fChargeSquare); - loss += fModelData->SampleAlongStepPlasmonTransfer(coupleIndex, Tkin, - scaledTkin, - step*fChargeSquare); - + scaledTkin, + step*fChargeSquare); + loss += fModelData->SampleAlongStepPlasmonTransfer(coupleIndex, Tkin, + scaledTkin, step*fChargeSquare); // G4cout<<" PAIPhotModel::SampleFluctuations loss = "<GetSandiaCofForMaterialPAI(energy1); - // result = SandiaCof[0]/energy1+SandiaCof[1]/energy2+SandiaCof[2]/energy3+SandiaCof[3]/energy4; - // result *= fDensity; - for( i = 1; i <= fIntervalNumber; i++ ) { if( energy1 < fEnergyInterval[i]) break; @@ -1222,23 +1218,18 @@ G4double G4PAIxSection::RePartDielectricConst(G4double enb) // simplified Allison's equation // -G4double G4PAIxSection::DifPAIxSection( G4int i , - G4double betaGammaSq ) +G4double G4PAIxSection::DifPAIxSection( G4int i , G4double betaGammaSq ) { G4double cof,x1,x2,x3,x4,x5,x6,x7,x8,result; G4double betaBohr = fine_structure_const; - // G4double betaBohr2 = fine_structure_const*fine_structure_const; - // G4double betaBohr3 = betaBohr*betaBohr2; // *4.0; - G4double be2 = betaGammaSq/(1 + betaGammaSq); - G4double beta = sqrt(be2); - // G4double be3 = beta*be2; + G4double beta = std::sqrt(be2); cof = 1.; - x1 = log(2*electron_mass_c2/fSplineEnergy[i]); + x1 = std::log(2*electron_mass_c2/fSplineEnergy[i]); - if( betaGammaSq < 0.01 ) x2 = log(be2); + if( betaGammaSq < 0.01 ) x2 = std::log(be2); else { x2 = -log( (1/betaGammaSq - fRePartDielectricConst[i])* @@ -1259,12 +1250,9 @@ G4double G4PAIxSection::DifPAIxSection( G4int i , x7 = atan2(fImPartDielectricConst[i],x3); x6 = x5 * x7; } - // if(fImPartDielectricConst[i] == 0) x6 = 0.; x4 = ((x1 + x2)*fImPartDielectricConst[i] + x6)/hbarc; - // if( x4 < 0.0 ) x4 = 0.0; - x8 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) + fImPartDielectricConst[i]*fImPartDielectricConst[i]; @@ -1278,18 +1266,10 @@ G4double G4PAIxSection::DifPAIxSection( G4int i , G4double lowCof = fLowEnergyCof; // 6.0 ; // Ar ~ 4.; -> fLowCof as f(Z1,Z2)? - result *= (1 - exp(-beta/betaBohr/lowCof)); - - - // result *= (1 - exp(-be2/betaBohr2/lowCof)); - - // result *= (1 - exp(-be3/betaBohr3/lowCof)); // ~ be for be<= 0.1) + result *= (1 - std::exp(-beta/betaBohr/lowCof)); + if(x8 >= 0.0) { - result /= x8; + result /= x8; } return result; @@ -1306,13 +1286,13 @@ G4double G4PAIxSection::PAIdNdxCerenkov( G4int i , G4double be2, betaBohr2, cofBetaBohr; cofBetaBohr = 4.0; - betaBohr2 = fine_structure_const*fine_structure_const; - G4double betaBohr4 = betaBohr2*betaBohr2*cofBetaBohr; + betaBohr2 = fine_structure_const*fine_structure_const; + G4double betaBohr4 = betaBohr2*betaBohr2*cofBetaBohr; be2 = betaGammaSq/(1 + betaGammaSq); G4double be4 = be2*be2; - if( betaGammaSq < 0.01 ) logarithm = log(1.0+betaGammaSq); // 0.0; + if( betaGammaSq < 0.01 ) logarithm = std::log(1.0+betaGammaSq); // 0.0; else { logarithm = -log( (1/betaGammaSq - fRePartDielectricConst[i])* @@ -1332,7 +1312,7 @@ G4double G4PAIxSection::PAIdNdxCerenkov( G4int i , be2*((1.0 +fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) + fImPartDielectricConst[i]*fImPartDielectricConst[i]); if( x3 == 0.0 ) argument = 0.5*pi; - else argument = atan2(fImPartDielectricConst[i],x3); + else argument = std::atan2(fImPartDielectricConst[i],x3); argument *= x5 ; } dNdxC = ( logarithm*fImPartDielectricConst[i] + argument )/hbarc; @@ -1341,13 +1321,13 @@ G4double G4PAIxSection::PAIdNdxCerenkov( G4int i , dNdxC *= fine_structure_const/be2/pi; - dNdxC *= (1-exp(-be4/betaBohr4)); + dNdxC *= (1-std::exp(-be4/betaBohr4)); - if(fDensity >= 0.1) + modul2 = (1.0 + fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) + + fImPartDielectricConst[i]*fImPartDielectricConst[i]; + if(modul2 >= 0.0) { - modul2 = (1.0 + fRePartDielectricConst[i])*(1.0 + fRePartDielectricConst[i]) + - fImPartDielectricConst[i]*fImPartDielectricConst[i]; - dNdxC /= modul2; + dNdxC /= modul2; } return dNdxC; @@ -1397,7 +1377,7 @@ G4double G4PAIxSection::PAIdNdxMM( G4int i , dNdxC *= fine_structure_const/be2/pi; - dNdxC *= (1-exp(-be4/betaBohr4)); + dNdxC *= (1-std::exp(-be4/betaBohr4)); return dNdxC; } // end of PAIdNdxMM @@ -1416,26 +1396,23 @@ G4double G4PAIxSection::PAIdNdxPlasmon( G4int i , betaBohr = fine_structure_const; be2 = betaGammaSq/(1 + betaGammaSq); - G4double beta = sqrt(be2); + G4double beta = std::sqrt(be2); - resonance = log(2*electron_mass_c2*be2/fSplineEnergy[i]); + resonance = std::log(2*electron_mass_c2*be2/fSplineEnergy[i]); resonance *= fImPartDielectricConst[i]/hbarc; - dNdxP = ( resonance + cof*fIntegralTerm[i]/fSplineEnergy[i]/fSplineEnergy[i] ); if( dNdxP < 1.0e-8 ) dNdxP = 1.0e-8; dNdxP *= fine_structure_const/be2/pi; - dNdxP *= (1 - exp(-beta/betaBohr/fLowEnergyCof)); + dNdxP *= (1 - std::exp(-beta/betaBohr/fLowEnergyCof)); - // dNdxP *= (1-exp(-be4/betaBohr4)); - - if( fDensity >= 0.1 ) + modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) + + fImPartDielectricConst[i]*fImPartDielectricConst[i]; + if( modul2 >= 0.0 ) { - modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) + - fImPartDielectricConst[i]*fImPartDielectricConst[i]; dNdxP /= modul2; } return dNdxP; @@ -1463,18 +1440,17 @@ G4double G4PAIxSection::PAIdNdxResonance( G4int i , resonance = log(2*electron_mass_c2*be2/fSplineEnergy[i]); resonance *= fImPartDielectricConst[i]/hbarc; - dNdxP = resonance; if( dNdxP < 1.0e-8 ) dNdxP = 1.0e-8; dNdxP *= fine_structure_const/be2/pi; - dNdxP *= (1-exp(-be4/betaBohr4)); + dNdxP *= (1 - std::exp(-be4/betaBohr4)); - if( fDensity >= 0.1 ) + modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) + + fImPartDielectricConst[i]*fImPartDielectricConst[i]; + if( modul2 >= 0.0 ) { - modul2 = (1 + fRePartDielectricConst[i])*(1 + fRePartDielectricConst[i]) + - fImPartDielectricConst[i]*fImPartDielectricConst[i]; dNdxP /= modul2; } return dNdxP; @@ -1655,8 +1631,9 @@ G4double G4PAIxSection::SumOverInterval( G4int i ) if(fVerbose>0) G4cout<<"SumOverInterval, a = "< G4PairProductionRelModel::gE // LPM supression functions evaluated at initialisation time G4PairProductionRelModel::LPMFuncs G4PairProductionRelModel::gLPMFuncs; +namespace +{ + G4Mutex thePairProdRelMutex = G4MUTEX_INITIALIZER; +} + // CTR G4PairProductionRelModel::G4PairProductionRelModel(const G4ParticleDefinition*, const G4String& nam) @@ -129,12 +135,10 @@ G4PairProductionRelModel::G4PairProductionRelModel(const G4ParticleDefinition*, // DTR G4PairProductionRelModel::~G4PairProductionRelModel() { - if (IsMaster()) { + if (isFirstInstance) { // clear ElementData container - for (std::size_t iz = 0; iz < gElementData.size(); ++iz) { - if (gElementData[iz]) delete gElementData[iz]; - } - gElementData.clear(); + for (auto const & ptr : gElementData) { delete ptr; } + gElementData.clear(); // clear LPMFunctions (if any) if (fIsUseLPMCorrection) { gLPMFuncs.fLPMFuncG.clear(); @@ -147,17 +151,26 @@ G4PairProductionRelModel::~G4PairProductionRelModel() void G4PairProductionRelModel::Initialise(const G4ParticleDefinition* p, const G4DataVector& cuts) { - if (IsMaster()) { + if(nullptr == fParticleChange) { fParticleChange = GetParticleChangeForGamma(); } + + if (gElementData.empty()) { // init element data and LPM funcs - if (IsMaster()) { - InitialiseElementData(); - if (fIsUseLPMCorrection) { - InitLPMFunctions(); - } + G4AutoLock l(&thePairProdRelMutex); + if (gElementData.empty()) { + isFirstInstance = true; + gElementData.resize(gMaxZet+1, nullptr); + } + l.unlock(); + } + // static data should be initialised only in the one instance + if(isFirstInstance) { + InitialiseElementData(); + if (fIsUseLPMCorrection) { + InitLPMFunctions(); } } - if(!fParticleChange) { fParticleChange = GetParticleChangeForGamma(); } - if(IsMaster() && LowEnergyLimit() < HighEnergyLimit()) { + // element selectors should be initialised in the master thread + if (IsMaster()) { InitialiseElementSelectors(p, cuts); } } @@ -165,9 +178,7 @@ void G4PairProductionRelModel::Initialise(const G4ParticleDefinition* p, void G4PairProductionRelModel::InitialiseLocal(const G4ParticleDefinition*, G4VEmModel* masterModel) { - if(LowEnergyLimit() < HighEnergyLimit()) { - SetElementSelectors(masterModel->GetElementSelectors()); - } + SetElementSelectors(masterModel->GetElementSelectors()); } G4double G4PairProductionRelModel::ComputeXSectionPerAtom(G4double gammaEnergy, @@ -497,17 +508,11 @@ G4PairProductionRelModel::SampleSecondaries(std::vector* fve // should be called only by the master and at initialisation void G4PairProductionRelModel::InitialiseElementData() { - G4int size = (G4int)gElementData.size(); - if (size < gMaxZet+1) { - gElementData.resize(gMaxZet+1, nullptr); - } // create for all elements that are in the detector - const G4ElementTable* elemTable = G4Element::GetElementTable(); - std::size_t numElems = (*elemTable).size(); - for (std::size_t ie = 0; ie < numElems; ++ie) { - const G4Element* elem = (*elemTable)[ie]; - const G4int iz = std::min(gMaxZet, elem->GetZasInt()); - if (!gElementData[iz]) { // create it if doesn't exist yet + auto elemTable = G4Element::GetElementTable(); + for (auto const & elem : *elemTable) { + const G4int iz = std::min(gMaxZet, elem->GetZasInt()); + if (nullptr == gElementData[iz]) { // create it if doesn't exist yet const G4double logZ13 = elem->GetIonisation()->GetlogZ3(); const G4double Z13 = elem->GetIonisation()->GetZ3(); const G4double fc = elem->GetfCoulomb(); diff --git a/source/processes/electromagnetic/standard/src/G4SBBremTable.cc b/source/processes/electromagnetic/standard/src/G4SBBremTable.cc index 6c098393139..4d01d9ca574 100644 --- a/source/processes/electromagnetic/standard/src/G4SBBremTable.cc +++ b/source/processes/electromagnetic/standard/src/G4SBBremTable.cc @@ -47,6 +47,7 @@ #include "G4ProductionCutsTable.hh" #include "G4MaterialCutsCouple.hh" #include "Randomize.hh" +#include "G4EmParameters.hh" #include "G4String.hh" @@ -333,13 +334,7 @@ void G4SBBremTable::InitSamplingTables() { // should be called only from LoadSamplingTables(G4int) and once void G4SBBremTable::LoadSTGrid() { - const char* path = G4FindDataDir("G4LEDATA"); - if (!path) { - G4Exception("G4SBBremTable::LoadSTGrid()","em0006", - FatalException, "Environment variable G4LEDATA not defined"); - return; - } - const G4String fname = G4String(path) + "/brem_SB/SBTables/grid"; + const G4String fname = G4EmParameters::Instance()->GetDirLEDATA() + "/brem_SB/SBTables/grid"; std::ifstream infile(fname,std::ios::in); if (!infile.is_open()) { G4String msgc = "Cannot open file: " + fname; @@ -391,13 +386,8 @@ void G4SBBremTable::LoadSamplingTables(G4int iz) { } // load data for a given Z only once iz = std::max(std::min(fMaxZet, iz),1); - const char* path = G4FindDataDir("G4LEDATA"); - if (!path) { - G4Exception("G4SBBremTable::LoadSamplingTables()","em0006", - FatalException, "Environment variable G4LEDATA not defined"); - return; - } - const G4String fname = G4String(path) + "/brem_SB/SBTables/sTableSB_" + + const G4String fname = G4EmParameters::Instance()->GetDirLEDATA() + "/brem_SB/SBTables/sTableSB_" + std::to_string(iz); std::istringstream infile(std::ios::in); // read the compressed data file into the stream diff --git a/source/processes/electromagnetic/standard/src/G4SeltzerBergerModel.cc b/source/processes/electromagnetic/standard/src/G4SeltzerBergerModel.cc index 8cb78233cee..335f1112fb2 100644 --- a/source/processes/electromagnetic/standard/src/G4SeltzerBergerModel.cc +++ b/source/processes/electromagnetic/standard/src/G4SeltzerBergerModel.cc @@ -77,7 +77,6 @@ G4Physics2DVector* G4SeltzerBergerModel::gSBDCSData[] = { nullptr }; G4SBBremTable* G4SeltzerBergerModel::gSBSamplingTable = nullptr; G4double G4SeltzerBergerModel::gYLimitData[] = { 0.0 }; -G4String G4SeltzerBergerModel::gDataDirectory = ""; namespace { @@ -94,14 +93,13 @@ G4SeltzerBergerModel::G4SeltzerBergerModel(const G4ParticleDefinition* p, { fLowestKinEnergy = 1.0*keV; SetLowEnergyLimit(fLowestKinEnergy); - SetLPMFlag(false); SetAngularDistribution(new G4ModifiedTsai()); } G4SeltzerBergerModel::~G4SeltzerBergerModel() { // delete SB-DCS data per Z - if (IsMaster()) { + if (isFirstInstance) { for (std::size_t iz = 0; iz < gMaxZet; ++iz) { if (gSBDCSData[iz]) { delete gSBDCSData[iz]; @@ -118,72 +116,48 @@ G4SeltzerBergerModel::~G4SeltzerBergerModel() void G4SeltzerBergerModel::Initialise(const G4ParticleDefinition* p, const G4DataVector& cuts) { - if (p) { - SetParticle(p); - } fIsUseSamplingTables = G4EmParameters::Instance()->EnableSamplingTable(); - // Access to elements - if (IsMaster()) { - auto theCoupleTable = G4ProductionCutsTable::GetProductionCutsTable(); - G4int numOfCouples = (G4int)theCoupleTable->GetTableSize(); - for(G4int j=0; jGetMaterialCutsCouple(j)->GetMaterial(); - auto elmVec = mat->GetElementVector(); - for (auto & elm : *elmVec) { - G4int Z = std::max(1,std::min(elm->GetZasInt(), gMaxZet-1)); - // load SB-DCS data for this atomic number if it has not been loaded yet - if (gSBDCSData[Z] == nullptr) ReadData(Z); - } + // initialise static tables for the Seltzer-Berger model + if (0.0 == gYLimitData[0]) { + G4AutoLock l(&theSBMutex); + if (0.0 == gYLimitData[0]) { + isFirstInstance = true; + gYLimitData[0] = 1.0; } - // elem.selectr. only for master: base class init-local will set for workers - if (LowEnergyLimit() < HighEnergyLimit()) { - InitialiseElementSelectors(p,cuts); + l.unlock(); + } + + // initialise base class + G4eBremsstrahlungRelModel::Initialise(p, cuts); + + // initialisation per element is done only once + if (isFirstInstance) { + auto elemTable = G4Element::GetElementTable(); + for (auto const & elm : *elemTable) { + G4int Z = std::max(1,std::min(elm->GetZasInt(), gMaxZet-1)); + // load SB-DCS data for this atomic number if it has not been loaded yet + if (gSBDCSData[Z] == nullptr) ReadData(Z); } + // init sampling tables if it was requested if (fIsUseSamplingTables) { - if (!gSBSamplingTable) { + if (nullptr == gSBSamplingTable) { gSBSamplingTable = new G4SBBremTable(); } - gSBSamplingTable->Initialize(std::max(fLowestKinEnergy,LowEnergyLimit()), + gSBSamplingTable->Initialize(std::max(fLowestKinEnergy, LowEnergyLimit()), HighEnergyLimit()); } } - // - if (!fParticleChange) { fParticleChange = GetParticleChangeForLoss(); } - if (GetTripletModel()) { - GetTripletModel()->Initialise(p, cuts); - fIsScatOffElectron = true; - } -} - -const G4String& G4SeltzerBergerModel::FindDirectoryPath() -{ - // check environment variable - // build the complete string identifying the file with the data set - if(gDataDirectory.empty()) { - const char* path = G4FindDataDir("G4LEDATA"); - if (path) { - std::ostringstream ost; - ost << path << "/brem_SB/br"; - gDataDirectory = ost.str(); - } else { - G4Exception("G4SeltzerBergerModel::FindDirectoryPath()","em0006", - FatalException, - "Environment variable G4LEDATA not defined"); - } - } - return gDataDirectory; } void G4SeltzerBergerModel::ReadData(G4int Z) { // return if it has been already loaded if (gSBDCSData[Z] != nullptr) return; - G4AutoLock l(&theSBMutex); if (gSBDCSData[Z] == nullptr) { std::ostringstream ost; - ost << FindDirectoryPath() << Z; + ost << G4EmParameters::Instance()->GetDirLEDATA() << "/brem_SB/br" << Z; std::ifstream fin(ost.str().c_str()); if (!fin.is_open()) { G4ExceptionDescription ed; @@ -210,7 +184,6 @@ void G4SeltzerBergerModel::ReadData(G4int Z) { delete v; } } - l.unlock(); } G4double G4SeltzerBergerModel::ComputeDXSectionPerAtom(G4double gammaEnergy) @@ -227,7 +200,9 @@ G4double G4SeltzerBergerModel::ComputeDXSectionPerAtom(G4double gammaEnergy) // NOTE: fCurrentIZ should have been set before. fCurrentIZ = std::max(std::min(fCurrentIZ, gMaxZet-1), 1); if (nullptr == gSBDCSData[fCurrentIZ]) { + G4AutoLock l(&theSBMutex); ReadData(fCurrentIZ); + l.unlock(); } // NOTE: SetupForMaterial should have been called before! const G4double pt2 = fPrimaryKinEnergy*(fPrimaryKinEnergy+2.*kMC2); @@ -412,6 +387,7 @@ void G4SeltzerBergerModel::SetupForMaterial(const G4ParticleDefinition*, fPrimaryKinEnergy = kineticEnergy; fPrimaryTotalEnergy = kineticEnergy+CLHEP::electron_mass_c2; fDensityCorr = fDensityFactor*fPrimaryTotalEnergy*fPrimaryTotalEnergy; - fIsLPMActive = LPMFlag(); + // flag for the base class + fIsLPMActive = false; } diff --git a/source/processes/electromagnetic/standard/src/G4UrbanMscModel.cc b/source/processes/electromagnetic/standard/src/G4UrbanMscModel.cc index 3deb5c4d522..1a34441553d 100644 --- a/source/processes/electromagnetic/standard/src/G4UrbanMscModel.cc +++ b/source/processes/electromagnetic/standard/src/G4UrbanMscModel.cc @@ -91,7 +91,7 @@ G4UrbanMscModel::G4UrbanMscModel(const G4String& nam) tlimitminfix2 = 1.*CLHEP::nm; stepmin = tlimitminfix; smallstep = 1.e10; - currentRange = 0. ; + currentRange = 0.; rangeinit = 0.; tlimit = 1.e10*CLHEP::mm; tlimitmin = 10.*tlimitminfix; @@ -99,20 +99,13 @@ G4UrbanMscModel::G4UrbanMscModel(const G4String& nam) geombig = tgeom; geommin = 1.e-3*CLHEP::mm; geomlimit = geombig; - presafety = 0.*CLHEP::mm; - - particle = nullptr; + presafety = 0.; positron = G4Positron::Positron(); rndmEngineMod = G4Random::getTheEngine(); - firstStep = true; - insideskin = false; - latDisplasmentbackup = false; - dispAlg96 = true; - - drr = 0.35; - finalr = 10.*CLHEP::um; + drr = 0.35; + finalr = 10.*CLHEP::um; tlow = 5.*CLHEP::keV; invmev = 1.0/CLHEP::MeV; @@ -124,10 +117,6 @@ G4UrbanMscModel::G4UrbanMscModel(const G4String& nam) currentKinEnergy = currentRadLength = lambda0 = lambdaeff = tPathLength = zPathLength = par1 = par2 = par3 = rndmarray[0] = rndmarray[1] = 0; currentLogKinEnergy = LOG_EKIN_MIN; - - idx = 0; - fParticleChange = nullptr; - couple = nullptr; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -151,8 +140,12 @@ void G4UrbanMscModel::Initialise(const G4ParticleDefinition* p, InitialiseParameters(p); latDisplasmentbackup = latDisplasment; - dispAlg96 = G4EmParameters::Instance()->LateralDisplacementAlg96(); - fPosiCorrection = G4EmParameters::Instance()->MscPositronCorrection(); + + // if model is locked parameters should be defined via Set methods + if(!IsLocked()) { + dispAlg96 = G4EmParameters::Instance()->LateralDisplacementAlg96(); + fPosiCorrection = G4EmParameters::Instance()->MscPositronCorrection(); + } // initialise cache only once if(0 == msc.size()) { @@ -461,9 +454,12 @@ G4double G4UrbanMscModel::ComputeTruePathLengthLimit( << " range= " <HighEnergyLimit(), CLHEP::GeV); EmModel(0)->SetHighEnergyLimit(energyLimit); EmModel(0)->SetSecondaryThreshold(param->BremsstrahlungTh()); - EmModel(0)->SetLPMFlag(false); AddEmModel(1, EmModel(0), fm); if(emax > energyLimit) { @@ -104,7 +103,6 @@ G4eBremsstrahlung::InitialiseEnergyLossProcess(const G4ParticleDefinition*, EmModel(1)->SetLowEnergyLimit(energyLimit); EmModel(1)->SetHighEnergyLimit(emax); EmModel(1)->SetSecondaryThreshold(param->BremsstrahlungTh()); - EmModel(1)->SetLPMFlag(param->LPM()); AddEmModel(1, EmModel(1), fm); } isInitialised = true; diff --git a/source/processes/electromagnetic/standard/src/G4eBremsstrahlungRelModel.cc b/source/processes/electromagnetic/standard/src/G4eBremsstrahlungRelModel.cc index afa1079c50e..7804564c713 100644 --- a/source/processes/electromagnetic/standard/src/G4eBremsstrahlungRelModel.cc +++ b/source/processes/electromagnetic/standard/src/G4eBremsstrahlungRelModel.cc @@ -70,6 +70,8 @@ #include "G4ModifiedTsai.hh" #include "G4Exp.hh" #include "G4Log.hh" +#include "G4EmParameters.hh" +#include "G4AutoLock.hh" const G4int G4eBremsstrahlungRelModel::gMaxZet = 120; @@ -114,6 +116,11 @@ G4eBremsstrahlungRelModel::LPMFuncs G4eBremsstrahlungRelModel::gLPMFuncs; // special data structure per element i.e. per Z std::vector G4eBremsstrahlungRelModel::gElementData; +namespace +{ + G4Mutex theBremRelMutex = G4MUTEX_INITIALIZER; +} + G4eBremsstrahlungRelModel::G4eBremsstrahlungRelModel(const G4ParticleDefinition* p, const G4String& nam) : G4VEmModel(nam) @@ -125,9 +132,6 @@ G4eBremsstrahlungRelModel::G4eBremsstrahlungRelModel(const G4ParticleDefinition* // fLPMEnergyThreshold = 1.e+39; fLPMEnergy = 0.; - - SetLPMFlag(true); - // SetAngularDistribution(new G4ModifiedTsai()); // if (nullptr != p) { @@ -137,16 +141,12 @@ G4eBremsstrahlungRelModel::G4eBremsstrahlungRelModel(const G4ParticleDefinition* G4eBremsstrahlungRelModel::~G4eBremsstrahlungRelModel() { - if (IsMaster()) { + if (fIsFirstInstance) { // clear ElementData container - for (std::size_t iz = 0; iz < gElementData.size(); ++iz) { - if (nullptr != gElementData[iz]) { - delete gElementData[iz]; - } - } + for (auto const & ptr : gElementData) { delete ptr; } gElementData.clear(); // clear LPMFunctions (if any) - if (LPMFlag()) { + if (fUseLPM) { gLPMFuncs.fLPMFuncG.clear(); gLPMFuncs.fLPMFuncPhi.clear(); gLPMFuncs.fIsInitialized = false; @@ -157,18 +157,33 @@ G4eBremsstrahlungRelModel::~G4eBremsstrahlungRelModel() void G4eBremsstrahlungRelModel::Initialise(const G4ParticleDefinition* p, const G4DataVector& cuts) { - if (nullptr != p) { + // parameters in each thread + if (fPrimaryParticle != p) { SetParticle(p); } + fUseLPM = G4EmParameters::Instance()->LPM(); fCurrentIZ = 0; - // init element data and precompute LPM functions (only if lpmflag is true) - if (IsMaster()) { - InitialiseElementData(); - if (LPMFlag()) { InitLPMFunctions(); } - if (LowEnergyLimit() < HighEnergyLimit()) { - InitialiseElementSelectors(p, cuts); + + // init static element data and precompute LPM functions only once + // for all treads and derived classes + if (gElementData.empty()) { + G4AutoLock l(&theBremRelMutex); + if (gElementData.empty()) { + fIsFirstInstance = true; + gElementData.resize(gMaxZet+1, nullptr); } + l.unlock(); } + if (fIsFirstInstance) { + InitialiseElementData(); + if (fUseLPM) { InitLPMFunctions(); } + } + + // element selectors are initialized in the master thread + if (IsMaster()) { + InitialiseElementSelectors(p, cuts); + } + // initialisation in all threads if (nullptr == fParticleChange) { fParticleChange = GetParticleChangeForLoss(); } @@ -181,9 +196,7 @@ void G4eBremsstrahlungRelModel::Initialise(const G4ParticleDefinition* p, void G4eBremsstrahlungRelModel::InitialiseLocal(const G4ParticleDefinition*, G4VEmModel* masterModel) { - if (LowEnergyLimit() < HighEnergyLimit()) { - SetElementSelectors(masterModel->GetElementSelectors()); - } + SetElementSelectors(masterModel->GetElementSelectors()); } void G4eBremsstrahlungRelModel::SetParticle(const G4ParticleDefinition* p) @@ -203,7 +216,7 @@ void G4eBremsstrahlungRelModel::SetupForMaterial(const G4ParticleDefinition*, fDensityFactor = gMigdalConstant*mat->GetElectronDensity(); fLPMEnergy = gLPMconstant*mat->GetRadlen(); // threshold for LPM effect (i.e. below which LPM hidden by density effect) - if (LPMFlag()) { + if (fUseLPM) { fLPMEnergyThreshold = std::sqrt(fDensityFactor)*fLPMEnergy; } else { fLPMEnergyThreshold = 1.e+39; // i.e. do not use LPM effect @@ -213,7 +226,7 @@ void G4eBremsstrahlungRelModel::SetupForMaterial(const G4ParticleDefinition*, fPrimaryTotalEnergy = kineticEnergy+fPrimaryParticleMass; fDensityCorr = fDensityFactor*fPrimaryTotalEnergy*fPrimaryTotalEnergy; // set activation flag for LPM effects in the DCS - fIsLPMActive = (fPrimaryTotalEnergy>fLPMEnergyThreshold); + fIsLPMActive = (fPrimaryTotalEnergy>fLPMEnergyThreshold); } // minimum primary (e-/e+) energy at which discrete interaction is possible @@ -618,18 +631,12 @@ G4eBremsstrahlungRelModel::SampleSecondaries(std::vector* vd void G4eBremsstrahlungRelModel::InitialiseElementData() { - const G4int size = (G4int)gElementData.size(); - if (size < gMaxZet+1) { - gElementData.resize(gMaxZet+1, nullptr); - } // create for all elements that are in the detector - const G4ElementTable* elemTable = G4Element::GetElementTable(); - std::size_t numElems = (*elemTable).size(); - for (std::size_t ielem=0; ielemGetZ(); - const G4int izet = std::min(G4lrint(zet),gMaxZet); - if (!gElementData[izet]) { + auto elemTable = G4Element::GetElementTable(); + for (auto const & elem : *elemTable) { + const G4double zet = elem->GetZ(); + const G4int izet = std::min(elem->GetZasInt(), gMaxZet); + if (nullptr == gElementData[izet]) { auto elemData = new ElementData(); const G4double fc = elem->GetfCoulomb(); G4double Fel = 1.; diff --git a/source/processes/electromagnetic/standard/src/G4eCoulombScatteringModel.cc b/source/processes/electromagnetic/standard/src/G4eCoulombScatteringModel.cc index 9546a7d7f80..41effce222e 100644 --- a/source/processes/electromagnetic/standard/src/G4eCoulombScatteringModel.cc +++ b/source/processes/electromagnetic/standard/src/G4eCoulombScatteringModel.cc @@ -66,30 +66,15 @@ using namespace std; G4eCoulombScatteringModel::G4eCoulombScatteringModel(G4bool combined) - : G4VEmModel("eCoulombScattering"), - cosThetaMin(1.0), - cosThetaMax(-1.0), - isCombined(combined) + : G4VEmModel("eCoulombScattering"), isCombined(combined) { - fParticleChange = nullptr; fNistManager = G4NistManager::Instance(); theIonTable = G4ParticleTable::GetParticleTable()->GetIonTable(); theProton = G4Proton::Proton(); - currentMaterial = nullptr; - fixedCut = -1.0; - - pCuts = nullptr; - - recoilThreshold = 0.0; // by default does not work - - particle = nullptr; - currentCouple = nullptr; wokvi = new G4WentzelOKandVIxSection(isCombined); - currentMaterialIndex = 0; mass = CLHEP::proton_mass_c2; - elecRatio = 0.0; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... @@ -107,12 +92,16 @@ void G4eCoulombScatteringModel::Initialise(const G4ParticleDefinition* part, SetupParticle(part); currentCouple = nullptr; + G4double tet = PolarAngleLimit(); + // defined theta limit between single and multiple scattering if(isCombined) { - cosThetaMin = 1.0; - G4double tet = PolarAngleLimit(); - if(tet >= pi) { cosThetaMin = -1.0; } - else if(tet > 0.0) { cosThetaMin = cos(tet); } + if(tet >= CLHEP::pi) { cosThetaMin = -1.0; } + else if(tet > 0.0) { cosThetaMin = std::cos(tet); } + + // single scattering without multiple + } else if(tet > 0.0) { + cosThetaMin = std::cos(std::min(tet, CLHEP::pi)); } wokvi->Initialise(part, cosThetaMin); @@ -176,7 +165,7 @@ G4double G4eCoulombScatteringModel::ComputeCrossSectionPerAtom( G4double Z, G4double, G4double cutEnergy, G4double) { - /* + /* G4cout << "### G4eCoulombScatteringModel::ComputeCrossSectionPerAtom for " << p->GetParticleName()<<" Z= "<GetDirLEDATA() << "/dpwa/"; + gDataDirectory = ost.str(); } return gDataDirectory; } diff --git a/source/processes/electromagnetic/standard/src/G4hIonisation.cc b/source/processes/electromagnetic/standard/src/G4hIonisation.cc index a7089fed81d..0a0b8e61e94 100644 --- a/source/processes/electromagnetic/standard/src/G4hIonisation.cc +++ b/source/processes/electromagnetic/standard/src/G4hIonisation.cc @@ -60,22 +60,15 @@ //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4hIonisation::G4hIonisation(const G4String& name) - : G4VEnergyLossProcess(name), - isInitialised(false) + : G4VEnergyLossProcess(name) { SetProcessSubType(fIonisation); SetSecondaryParticle(G4Electron::Electron()); - mass = 0.0; - ratio = 0.0; eth = 2*CLHEP::MeV; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4hIonisation::~G4hIonisation() = default; - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - G4bool G4hIonisation::IsApplicable(const G4ParticleDefinition&) { return true; @@ -179,7 +172,7 @@ void G4hIonisation::InitialiseEnergyLossProcess( void G4hIonisation::ProcessDescription(std::ostream& out) const { - out << " Ionisation"; + out << " Hadron ionisation"; G4VEnergyLossProcess::ProcessDescription(out); } diff --git a/source/processes/electromagnetic/standard/src/G4ionIonisation.cc b/source/processes/electromagnetic/standard/src/G4ionIonisation.cc index a183653cc68..cd908fcd546 100644 --- a/source/processes/electromagnetic/standard/src/G4ionIonisation.cc +++ b/source/processes/electromagnetic/standard/src/G4ionIonisation.cc @@ -69,32 +69,22 @@ #include "G4BraggIonModel.hh" #include "G4BetheBlochModel.hh" #include "G4LossTableManager.hh" -#include "G4WaterStopping.hh" -#include "G4EmCorrections.hh" #include "G4EmParameters.hh" #include "G4EmStandUtil.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4ionIonisation::G4ionIonisation(const G4String& name) - : G4VEnergyLossProcess(name), - theParticle(nullptr), - isInitialised(false), - stopDataActive(false) + : G4VEnergyLossProcess(name) { SetLinearLossLimit(0.02); SetProcessSubType(fIonisation); SetSecondaryParticle(G4Electron::Electron()); - corr = G4LossTableManager::Instance()->EmCorrections(); eth = 2*CLHEP::MeV; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -G4ionIonisation::~G4ionIonisation() = default; - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - G4bool G4ionIonisation::IsApplicable(const G4ParticleDefinition&) { return true; @@ -167,40 +157,9 @@ void G4ionIonisation::InitialiseEnergyLossProcess( emax = std::max(emax, eth*10); EmModel(1)->SetHighEnergyLimit(emax); AddEmModel(2, EmModel(1), FluctModel()); - - // Add ion stoping tables for Generic Ion if the default - // model is used (with eth ~= 2 MeV) - if(part == ion && (EmModel(1)->GetName() == "BetheBloch" || - EmModel(1)->GetName() == "BetheBlochGasIon")) { - stopDataActive = true; - G4WaterStopping ws(corr, true); - corr->SetIonisationModels(EmModel(0), EmModel(1)); - } } isInitialised = true; } - // reinitialisation of corrections for the new run - if(part == ion) { corr->InitialiseForNewRun(); } -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - -void G4ionIonisation::StreamProcessInfo(std::ostream& out) const -{ - if (stopDataActive && G4GenericIon::GenericIon() == theParticle) { - out << " Stopping Power data for " - << corr->GetNumberOfStoppingVectors() - << " ion/material pairs" << G4endl; - } -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - -void G4ionIonisation::AddStoppingData(G4int Z, G4int A, - const G4String& mname, - G4PhysicsVector* dVector) -{ - corr->AddStoppingData(Z, A, mname, dVector); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/source/processes/electromagnetic/utils/GNUmakefile b/source/processes/electromagnetic/utils/GNUmakefile deleted file mode 100644 index e7520d69502..00000000000 --- a/source/processes/electromagnetic/utils/GNUmakefile +++ /dev/null @@ -1,32 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for electromagnetic sub-library. John Allison, 25/6/98. -# -------------------------------------------------------------------- - -name := G4emutils - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/transportation/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/electromagnetic/utils/History b/source/processes/electromagnetic/utils/History index e59f13f7f64..21ed5539231 100644 --- a/source/processes/electromagnetic/utils/History +++ b/source/processes/electromagnetic/utils/History @@ -6,26 +6,64 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-06-02 J.Hahnfeld (emutils-V11-00-40) +## 2023-06-16 V.Ivanchenko (emutils-V11-01-13) +- G4LossTableManager - fixed trivial Coverity report + +## 2023-06-04 V.Ivanchenko (emutils-V11-01-12) +- G4VEmModel - use LPM flag from G4EmParameters + +## 2023-06-02 J.Hahnfeld (emutils-V11-01-11) - Fixes to `G4TransportationWithMsc`: * Protect code for MultipleScattering * Fix type of particle change -## 2023-04-08 V.Ivanchenko +## 2023-06-01 V.Ivanchenko (emutils-V11-01-10) +- G4LossTableManager - reserve memory for internal vectors; simplified + destructor; move a part of initialisation of class members to header +- G4ionEffectiveCharge - minor optimisation + +## 2023-05-23 V.Ivanchenko (emutils-V11-01-09) +- G4VEnergyLossProcess - added extra protection excluding negative range; + rename class member; change condition to stop low-energy ion - use kinetic + energy and not scaled energy; is proposed to address git issue #168 +- G4VMscModel - removed empty lines + +## 2023-05-04 V.Ivanchenko (emutils-V11-01-08) +- G4VEnergyLossProcess - added extra protection for the case of negative + range of low-energy particle (problem #2542) + +## 2023-04-20 V.Ivanchenko (emutils-V11-01-07) +- G4VEnergyLossProcess - make more straightforward computation of ion + effective charge +- G4VEmModel - trigger computation of ion effective charge for G4EmCalculator +- G4EmCalculator - improved printout + +## 2023-04-08 V.Ivanchenko (emutils-V11-01-06) - G4LossTableManager - improved debug printout and removed unused lines of code +- G4LossTableBuilder, G4VEnergyLossProcess - improved debug printout -## 2023-03-20 V.Ivanchenko +## 2023-04-03 V.Ivanchenko (emutils-V11-01-05) +- G4VEnergyLossProcess, G4VEmProcess, G4VMultipleScattering - use flag of + master thread from G4LossTableManager +- G4EmCorrections - class format, removed lock of threads instead use + flag from G4LossTableManager + +## 2023-03-20 V.Ivanchenko (emutils-V11-01-04) - G4VEnergyLossProcess - fixed static analyzer warning - G4EmTableUtil - fixed verbose output and class comments -## 2023-03-06 J.Allison +## 2023-03-06 J.Allison (emutils-V11-01-03) - Allow /process/em/QuantumEntanglement in G4State_Idle. -## 2023-02-21 V.Ivanchenko +## 2023-02-21 V.Ivanchenko (emutils-V11-01-02) - G4EmExtraParameters - fixed AddPAIModel(...) method and improved comments -- G4EmExtraParametersMessenger - fixed broadcasting +- G4EmExtraParametersMessenger - fixed broadcasting + +## 2023-01-10 V.Ivanchenko (emutils-V11-01-01) +- G4EmParameters - added extra member and access method to G4LEDATA path + allowing check environment variable for the EM data only once -## 2022-12-11 V.Ivanchenko (emutils-V11-00-39) +## 2022-12-11 V.Ivanchenko (emutils-V11-01-00) - G4EmParameters, G4EmParametersMessenger, added parameter, UI command, GetSet methods - MscPositronCorrection diff --git a/source/processes/electromagnetic/utils/include/G4EmCorrections.hh b/source/processes/electromagnetic/utils/include/G4EmCorrections.hh index 500409ed973..0486a5b5f21 100644 --- a/source/processes/electromagnetic/utils/include/G4EmCorrections.hh +++ b/source/processes/electromagnetic/utils/include/G4EmCorrections.hh @@ -59,7 +59,6 @@ #include "G4ionEffectiveCharge.hh" #include "G4Material.hh" #include "G4ParticleDefinition.hh" -#include "G4Threading.hh" class G4VEmModel; class G4PhysicsVector; @@ -73,7 +72,7 @@ class G4EmCorrections public: - explicit G4EmCorrections(G4int verb); + explicit G4EmCorrections(G4int verb, G4bool master); ~G4EmCorrections(); @@ -194,63 +193,60 @@ private: const G4ParticleDefinition* particle = nullptr; const G4ParticleDefinition* curParticle = nullptr; - const G4Material* material = nullptr; - const G4Material* curMaterial = nullptr; - const G4ElementVector* theElementVector = nullptr; - const G4double* atomDensity = nullptr; - - G4PhysicsVector* curVector = nullptr; - - G4VEmModel* ionLEModel = nullptr; - G4VEmModel* ionHEModel = nullptr; - - G4double kinEnergy = 0.0; - G4double mass = 0.0; - G4double massFactor = 1.0; - G4double eth; - G4double tau = 0.0; - G4double gamma = 1.0; - G4double bg2 = 0.0; - G4double beta2 = 0.0; - G4double beta = 0.0; - G4double ba2 = 0.0; - G4double tmax = 0.0; - G4double charge = 0.0; - G4double q2 = 0.0; - G4double eCorrMin; - G4double eCorrMax; - - G4bool isMaster = false; - - size_t ncouples = 0; - G4int verbose; - - G4int nK; - G4int nL; - G4int nEtaK; - G4int nEtaL; - - G4int nbinCorr = 52; - G4int numberOfElements = 0; + const G4Material* material = nullptr; + const G4Material* curMaterial = nullptr; + const G4ElementVector* theElementVector = nullptr; + const G4double* atomDensity = nullptr; + + G4PhysicsVector* curVector = nullptr; + + G4VEmModel* ionLEModel = nullptr; + G4VEmModel* ionHEModel = nullptr; + + G4double kinEnergy = 0.0; + G4double mass = 0.0; + G4double massFactor = 1.0; + G4double tau = 0.0; + G4double gamma = 1.0; + G4double bg2 = 0.0; + G4double beta2 = 0.0; + G4double beta = 0.0; + G4double ba2 = 0.0; + G4double tmax = 0.0; + G4double charge = 0.0; + G4double q2 = 0.0; + G4double eth; + G4double eCorrMin; + G4double eCorrMax; + + std::size_t ncouples = 0; + G4int nK = 20; + G4int nL = 26; + G4int nEtaK = 29; + G4int nEtaL = 28; + G4int nbinCorr = 52; + G4int numberOfElements = 0; // Ion stopping data - G4int nIons = 0; - G4int idx = 0; - G4int currentZ = 0; + G4int nIons = 0; + G4int idx = 0; + G4int currentZ = 0; - std::vector Zion; - std::vector Aion; - std::vector materialName; + G4int verbose; + G4bool isMaster; + std::vector Zion; + std::vector Aion; + std::vector materialName; std::vector ionList; std::map< G4int, std::vector > thcorr; std::vector currmat; std::vector materialList; - std::vector stopData; + std::vector stopData; - G4ionEffectiveCharge effCharge; + G4ionEffectiveCharge effCharge; static const G4double ZD[11]; static const G4double UK[20]; @@ -265,10 +261,6 @@ private: static G4PhysicsFreeVector* sBarkasCorr; static G4PhysicsFreeVector* sThetaK; static G4PhysicsFreeVector* sThetaL; - -#ifdef G4MULTITHREADED - static G4Mutex theCorrMutex; -#endif }; inline G4int diff --git a/source/processes/electromagnetic/utils/include/G4EmParameters.hh b/source/processes/electromagnetic/utils/include/G4EmParameters.hh index bff9f8960be..994297cdb3e 100644 --- a/source/processes/electromagnetic/utils/include/G4EmParameters.hh +++ b/source/processes/electromagnetic/utils/include/G4EmParameters.hh @@ -385,6 +385,8 @@ public: void DefineRegParamForEM(G4VEmProcess*) const; void DefineRegParamForDeex(G4VAtomDeexcitation*) const; + const G4String& GetDirLEDATA() const; + G4EmParameters(G4EmParameters &) = delete; G4EmParameters & operator=(const G4EmParameters &right) = delete; @@ -463,6 +465,8 @@ private: G4NuclearFormfactorType nucFormfactor; G4eSingleScatteringType fSStype; G4EmFluctuationType fFluct; + + G4String fDirLEDATA; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/processes/electromagnetic/utils/include/G4LossTableManager.hh b/source/processes/electromagnetic/utils/include/G4LossTableManager.hh index 3d25f3e4154..0cea55b75e8 100644 --- a/source/processes/electromagnetic/utils/include/G4LossTableManager.hh +++ b/source/processes/electromagnetic/utils/include/G4LossTableManager.hh @@ -90,13 +90,13 @@ public: //------------------------------------------------- void PreparePhysicsTable(const G4ParticleDefinition* aParticle, - G4VEnergyLossProcess* p, G4bool theMaster); + G4VEnergyLossProcess* p); void PreparePhysicsTable(const G4ParticleDefinition* aParticle, - G4VEmProcess* p, G4bool theMaster); + G4VEmProcess* p); void PreparePhysicsTable(const G4ParticleDefinition* aParticle, - G4VMultipleScattering* p, G4bool theMaster); + G4VMultipleScattering* p); void BuildPhysicsTable(const G4ParticleDefinition* aParticle); @@ -255,49 +255,49 @@ private: typedef const G4ParticleDefinition* PD; - std::map > loss_map; + // cache + G4VEnergyLossProcess* currentLoss{nullptr}; + PD currentParticle{nullptr}; + PD theElectron; + PD theGenericIon{nullptr}; + PD firstParticle{nullptr}; + + G4LossTableBuilder* tableBuilder; + G4EmCorrections* emCorrections; + G4EmConfigurator* emConfigurator{nullptr}; + G4ElectronIonPair* emElectronIonPair{nullptr}; + G4NIELCalculator* nielCalculator{nullptr}; + G4VAtomDeexcitation* atomDeexcitation{nullptr}; + G4VSubCutProducer* subcutProducer{nullptr}; + + G4EmParameters* theParameters; + G4VEmProcess* gGeneral{nullptr}; + G4VEmProcess* eGeneral{nullptr}; + G4VEmProcess* pGeneral{nullptr}; + + G4int verbose; + G4int n_loss{0}; + G4int run{-1}; + + G4bool all_tables_are_built{false}; + G4bool startInitialisation{false}; + G4bool isMaster{true}; std::vector loss_vector; std::vector part_vector; std::vector base_part_vector; - std::vector tables_are_built; - std::vector isActive; std::vector dedx_vector; std::vector range_vector; std::vector inv_range_vector; + std::vector tables_are_built; + std::vector isActive; std::vector msc_vector; std::vector emp_vector; std::vector mod_vector; std::vector fmod_vector; std::vector p_vector; - // cache - G4VEnergyLossProcess* currentLoss; - PD currentParticle; - PD theElectron; - PD theGenericIon; - PD firstParticle; - - G4LossTableBuilder* tableBuilder; - G4EmCorrections* emCorrections; - G4EmConfigurator* emConfigurator; - G4ElectronIonPair* emElectronIonPair; - G4NIELCalculator* nielCalculator; - G4VAtomDeexcitation* atomDeexcitation; - G4VSubCutProducer* subcutProducer; - - G4EmParameters* theParameters; - G4VEmProcess* gGeneral; - G4VEmProcess* eGeneral; - G4VEmProcess* pGeneral; - - G4int verbose; - G4int n_loss; - G4int run; - - G4bool all_tables_are_built; - G4bool startInitialisation; - G4bool isMaster; + std::map > loss_map; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/processes/electromagnetic/utils/include/G4VEmModel.hh b/source/processes/electromagnetic/utils/include/G4VEmModel.hh index 5cdbca0ae49..266bc1544fb 100644 --- a/source/processes/electromagnetic/utils/include/G4VEmModel.hh +++ b/source/processes/electromagnetic/utils/include/G4VEmModel.hh @@ -317,6 +317,10 @@ public: void SetCrossSectionTable(G4PhysicsTable*, G4bool isLocal); + G4bool LPMFlag() const; + + void SetLPMFlag(G4bool val); + inline G4ElementData* GetElementData(); inline G4PhysicsTable* GetCrossSectionTable(); @@ -343,8 +347,6 @@ public: inline G4double SecondaryThreshold() const; - inline G4bool LPMFlag() const; - inline G4bool DeexcitationFlag() const; inline G4bool ForceBuildTableFlag() const; @@ -367,8 +369,6 @@ public: inline void SetSecondaryThreshold(G4double); - inline void SetLPMFlag(G4bool val); - inline void SetDeexcitationFlag(G4bool val); inline void SetForceBuildTable(G4bool val); @@ -447,7 +447,6 @@ protected: private: - G4bool theLPMflag = false; G4bool flagDeexcitation = false; G4bool flagForceBuildTable = false; G4bool isMaster = true; @@ -673,13 +672,6 @@ inline G4double G4VEmModel::SecondaryThreshold() const //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -inline G4bool G4VEmModel::LPMFlag() const -{ - return theLPMflag; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - inline G4bool G4VEmModel::DeexcitationFlag() const { return flagDeexcitation; @@ -792,13 +784,6 @@ inline void G4VEmModel::SetSecondaryThreshold(G4double val) //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -inline void G4VEmModel::SetLPMFlag(G4bool val) -{ - theLPMflag = val; -} - -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... - inline void G4VEmModel::SetDeexcitationFlag(G4bool val) { flagDeexcitation = val; diff --git a/source/processes/electromagnetic/utils/include/G4VEnergyLossProcess.hh b/source/processes/electromagnetic/utils/include/G4VEnergyLossProcess.hh index 4a9a38e7c5d..0222ed61fef 100644 --- a/source/processes/electromagnetic/utils/include/G4VEnergyLossProcess.hh +++ b/source/processes/electromagnetic/utils/include/G4VEnergyLossProcess.hh @@ -505,7 +505,7 @@ private: G4CrossSectionType fXSType = fEmOnePeak; G4bool lossFluctuationFlag = true; - G4bool rndmStepFlag = false; + G4bool useCutAsFinalRange = false; G4bool tablesAreBuilt = false; G4bool spline = true; G4bool isIon = false; @@ -616,7 +616,8 @@ inline G4double G4VEnergyLossProcess::GetScaledRangeForScaledEnergy(G4double e) coupleIdxRange = currentCoupleIndex; fRangeEnergy = e; fRange = reduceFactor*((*theRangeTableForLoss)[basedCoupleIndex])->Value(e, idxRange); - if(e < minKinEnergy) { fRange *= std::sqrt(e/minKinEnergy); } + if (fRange < 0.0) { fRange = 0.0; } + else if (e < minKinEnergy) { fRange *= std::sqrt(e/minKinEnergy); } } //G4cout << "G4VEnergyLossProcess::GetScaledRange: Idx= " // << basedCoupleIndex << " E(MeV)= " << e @@ -634,7 +635,8 @@ G4VEnergyLossProcess::GetScaledRangeForScaledEnergy(G4double e, G4double loge) coupleIdxRange = currentCoupleIndex; fRangeEnergy = e; fRange = reduceFactor*((*theRangeTableForLoss)[basedCoupleIndex])->LogVectorValue(e, loge); - if(e < minKinEnergy) { fRange *= std::sqrt(e/minKinEnergy); } + if (fRange < 0.0) { fRange = 0.0; } + else if (e < minKinEnergy) { fRange *= std::sqrt(e/minKinEnergy); } } //G4cout << "G4VEnergyLossProcess::GetScaledRange: Idx= " // << basedCoupleIndex << " E(MeV)= " << e @@ -648,7 +650,8 @@ inline G4double G4VEnergyLossProcess::GetLimitScaledRangeForScaledEnergy(G4double e) { G4double x = ((*theCSDARangeTable)[basedCoupleIndex])->Value(e, idxCSDA); - if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); } + if (x < 0.0) { x = 0.0; } + else if (e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); } return x; } @@ -659,7 +662,8 @@ G4VEnergyLossProcess::GetLimitScaledRangeForScaledEnergy(G4double e, G4double loge) { G4double x = ((*theCSDARangeTable)[basedCoupleIndex])->LogVectorValue(e, loge); - if(e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); } + if (x < 0.0) { x = 0.0; } + else if (e < minKinEnergy) { x *= std::sqrt(e/minKinEnergy); } return x; } diff --git a/source/processes/electromagnetic/utils/src/G4EmCalculator.cc b/source/processes/electromagnetic/utils/src/G4EmCalculator.cc index 8cd3d812fdc..69d2a58d88f 100644 --- a/source/processes/electromagnetic/utils/src/G4EmCalculator.cc +++ b/source/processes/electromagnetic/utils/src/G4EmCalculator.cc @@ -1011,7 +1011,7 @@ G4bool G4EmCalculator::FindEmModel(const G4ParticleDefinition* p, if(nullptr != elproc) { currentModel = elproc->SelectModelForMaterial(scaledEnergy, idx); currentModel->InitialiseForMaterial(part, currentMaterial); - currentModel->SetupForMaterial(part, currentMaterial, scaledEnergy); + currentModel->SetupForMaterial(part, currentMaterial, kinEnergy); G4double eth = currentModel->LowEnergyLimit(); if(eth > 0.0) { loweModel = elproc->SelectModelForMaterial(eth - CLHEP::eV, idx); diff --git a/source/processes/electromagnetic/utils/src/G4EmCorrections.cc b/source/processes/electromagnetic/utils/src/G4EmCorrections.cc index 3e16af5746c..1694fb25d73 100644 --- a/source/processes/electromagnetic/utils/src/G4EmCorrections.cc +++ b/source/processes/electromagnetic/utils/src/G4EmCorrections.cc @@ -71,13 +71,14 @@ #include "G4Log.hh" #include "G4Exp.hh" #include "G4Pow.hh" -#include "G4Threading.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... -const G4double inveplus = 1.0/CLHEP::eplus; -const G4double alpha2 = CLHEP::fine_structure_const*CLHEP::fine_structure_const; - +namespace +{ + constexpr G4double inveplus = 1.0/CLHEP::eplus; + constexpr G4double alpha2 = CLHEP::fine_structure_const*CLHEP::fine_structure_const; +} const G4double G4EmCorrections::ZD[11] = {0., 0., 0., 1.72, 2.09, 2.48, 2.82, 3.16, 3.53, 3.84, 4.15}; const G4double G4EmCorrections::UK[20] = {1.9999, 2.0134, 2.0258, 2.0478, 2.0662, @@ -107,47 +108,25 @@ G4PhysicsFreeVector* G4EmCorrections::sBarkasCorr = nullptr; G4PhysicsFreeVector* G4EmCorrections::sThetaK = nullptr; G4PhysicsFreeVector* G4EmCorrections::sThetaL = nullptr; -#ifdef G4MULTITHREADED -G4Mutex G4EmCorrections::theCorrMutex = G4MUTEX_INITIALIZER; -#endif - -G4EmCorrections::G4EmCorrections(G4int verb) +G4EmCorrections::G4EmCorrections(G4int verb, G4bool master) + : verbose(verb), isMaster(master) { - verbose = verb; - eth = 2.0*CLHEP::MeV; + eth = 2.0*CLHEP::MeV; eCorrMin = 25.*CLHEP::keV; eCorrMax = 1.*CLHEP::GeV; ionTable = G4ParticleTable::GetParticleTable()->GetIonTable(); g4calc = G4Pow::GetInstance(); - // G.S. Khandelwal Nucl. Phys. A116(1968)97 - 111. - // "Shell corrections for K- and L- electrons - nK = 20; - nL = 26; - nEtaK = 29; - nEtaL = 28; - // fill vectors - if(sBarkasCorr == nullptr) { -#ifdef G4MULTITHREADED - G4MUTEXLOCK(&theCorrMutex); - if (sBarkasCorr == nullptr) { -#endif - Initialise(); - isMaster = true; -#ifdef G4MULTITHREADED - } - G4MUTEXUNLOCK(&theCorrMutex); -#endif - } + if(isMaster) { Initialise(); } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... G4EmCorrections::~G4EmCorrections() { - for(G4int i=0; iDefineRegParamForDeex(ptr); } +const G4String& G4EmParameters::GetDirLEDATA() const +{ + return fDirLEDATA; +} + void G4EmParameters::StreamInfo(std::ostream& os) const { G4long prec = os.precision(5); diff --git a/source/processes/electromagnetic/utils/src/G4LossTableBuilder.cc b/source/processes/electromagnetic/utils/src/G4LossTableBuilder.cc index 6c83d0f4467..fb061ad48c5 100644 --- a/source/processes/electromagnetic/utils/src/G4LossTableBuilder.cc +++ b/source/processes/electromagnetic/utils/src/G4LossTableBuilder.cc @@ -201,9 +201,6 @@ void G4LossTableBuilder::BuildRangeTable(const G4PhysicsTable* dedxTable, G4double ehigh = pv->Energy(npoints-1); G4double dedx1 = (*pv)[0]; - //G4cout << "i= " << i << "npoints= " << npoints << " dedx1= " - //<< dedx1 << G4endl; - // protection for specific cases dedx=0 if(dedx1 == 0.0) { for (std::size_t k=1; kVerbose(); - theElectron = G4Electron::Electron(); + theElectron = G4Electron::Electron(); theGenericIon= nullptr; if(G4Threading::IsWorkerThread()) { verbose = theParameters->WorkerVerbose(); isMaster = false; - } + } tableBuilder = new G4LossTableBuilder(isMaster); - emCorrections= new G4EmCorrections(verbose); - emConfigurator = nullptr; - emElectronIonPair = nullptr; - atomDeexcitation = nullptr; - subcutProducer = nullptr; - nielCalculator = nullptr; - gGeneral = nullptr; - eGeneral = pGeneral = nullptr; + emCorrections = new G4EmCorrections(verbose, isMaster); + + std::size_t n = 70; + loss_vector.reserve(n); + part_vector.reserve(n); + base_part_vector.reserve(n); + dedx_vector.reserve(n); + range_vector.reserve(n); + inv_range_vector.reserve(n); + tables_are_built.reserve(n); + isActive.reserve(n); + msc_vector.reserve(10); + emp_vector.reserve(16); + mod_vector.reserve(150); + fmod_vector.reserve(60); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... @@ -436,8 +422,7 @@ G4LossTableManager::GetEnergyLossProcess(const G4ParticleDefinition *aParticle) void G4LossTableManager::PreparePhysicsTable(const G4ParticleDefinition* particle, - G4VEnergyLossProcess* p, - G4bool theMaster) + G4VEnergyLossProcess* p) { if (1 < verbose) { G4cout << "G4LossTableManager::PreparePhysicsTable for " @@ -446,8 +431,6 @@ G4LossTableManager::PreparePhysicsTable(const G4ParticleDefinition* particle, << " loss_vector " << loss_vector.size() << G4endl; } - isMaster = theMaster; - if(!startInitialisation) { ResetParameters(); if (1 < verbose) { @@ -477,14 +460,13 @@ G4LossTableManager::PreparePhysicsTable(const G4ParticleDefinition* particle, void G4LossTableManager::PreparePhysicsTable(const G4ParticleDefinition* particle, - G4VEmProcess* p, G4bool theMaster) + G4VEmProcess* p) { if (1 < verbose) { G4cout << "G4LossTableManager::PreparePhysicsTable for " << particle->GetParticleName() << " and " << p->GetProcessName() << G4endl; } - isMaster = theMaster; if(!startInitialisation) { ResetParameters(); @@ -505,8 +487,7 @@ G4LossTableManager::PreparePhysicsTable(const G4ParticleDefinition* particle, void G4LossTableManager::PreparePhysicsTable(const G4ParticleDefinition* particle, - G4VMultipleScattering* p, - G4bool theMaster) + G4VMultipleScattering* p) { if (1 < verbose) { G4cout << "G4LossTableManager::PreparePhysicsTable for " @@ -514,8 +495,6 @@ G4LossTableManager::PreparePhysicsTable(const G4ParticleDefinition* particle, << " and " << p->GetProcessName() << G4endl; } - isMaster = theMaster; - if(!startInitialisation) { ResetParameters(); if (1 < verbose) { @@ -589,8 +568,6 @@ void G4LossTableManager::LocalPhysicsTables( inv_range_vector[i] = p->InverseRangeTable(); if(0 == run && p->IsIonisationProcess()) { loss_map[part_vector[i]] = p; - //G4cout << "G4LossTableManager::LocalPhysicsTable " << part_vector[i]->GetParticleName() - // << " added to map " << p << G4endl; } if(1 < verbose) { @@ -666,7 +643,7 @@ void G4LossTableManager::BuildPhysicsTable( isActive[i] = true; base_part_vector[i] = el->BaseParticle(); tables_are_built[i] = false; - all_tables_are_built= false; + all_tables_are_built= false; if(1 < verbose) { G4cout << i <<". "<< el->GetProcessName(); if(el->Particle()) { @@ -819,8 +796,8 @@ G4VEnergyLossProcess* G4LossTableManager::BuildTables( if (!tables_are_built[i]) { val = true; dedx = p->BuildDEDXTable(fRestricted); - //G4cout << "Build DEDX table for " << p->GetProcessName() - // << " idx= " << i << dedx << " " << dedx->length() << G4endl; + //G4cout << "===Build DEDX table for " << p->GetProcessName() + // << " idx= " << i << " dedx:" << dedx << " " << dedx->length() << G4endl; p->SetDEDXTable(dedx,fRestricted); tables_are_built[i] = true; } else { @@ -913,7 +890,6 @@ G4VEnergyLossProcess* G4LossTableManager::BuildTables( if(theParameters->BuildCSDARange()) { G4PhysicsTable* dedxCSDA = em->DEDXunRestrictedTable(); if (1 < n_dedx) { - dedxCSDA = nullptr; dedxCSDA = G4PhysicsTableHelper::PreparePhysicsTable(dedxCSDA); tableBuilder->BuildDEDXTable(dedxCSDA, listCSDA); em->SetDEDXTable(dedxCSDA,fTotal); diff --git a/source/processes/electromagnetic/utils/src/G4VEmModel.cc b/source/processes/electromagnetic/utils/src/G4VEmModel.cc index 13ac6f92520..08feadc7ce7 100644 --- a/source/processes/electromagnetic/utils/src/G4VEmModel.cc +++ b/source/processes/electromagnetic/utils/src/G4VEmModel.cc @@ -380,9 +380,11 @@ G4double G4VEmModel::MaxSecondaryEnergy(const G4ParticleDefinition*, //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -void G4VEmModel::SetupForMaterial(const G4ParticleDefinition*, - const G4Material*, G4double) -{} +void G4VEmModel::SetupForMaterial(const G4ParticleDefinition* p, + const G4Material* mat, G4double ekin) +{ + GetChargeSquareRatio(p, mat, ekin); +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -407,6 +409,18 @@ void G4VEmModel::SetCrossSectionTable(G4PhysicsTable* p, G4bool isLocal) localTable = isLocal; } +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... +G4bool G4VEmModel::LPMFlag() const +{ + return G4EmParameters::Instance()->LPM(); +} + +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... +void G4VEmModel::SetLPMFlag(G4bool val) +{ + G4EmParameters::Instance()->SetLPM(val); +} + //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4VEmModel::ModelDescription(std::ostream& outFile) const diff --git a/source/processes/electromagnetic/utils/src/G4VEmProcess.cc b/source/processes/electromagnetic/utils/src/G4VEmProcess.cc index 864231f62db..bcec8015231 100644 --- a/source/processes/electromagnetic/utils/src/G4VEmProcess.cc +++ b/source/processes/electromagnetic/utils/src/G4VEmProcess.cc @@ -162,7 +162,7 @@ void G4VEmProcess::PreparePhysicsTable(const G4ParticleDefinition& part) } if(particle != &part) { return; } - lManager->PreparePhysicsTable(&part, this, isTheMaster); + lManager->PreparePhysicsTable(&part, this); // for new run currentCouple = nullptr; diff --git a/source/processes/electromagnetic/utils/src/G4VEnergyLossProcess.cc b/source/processes/electromagnetic/utils/src/G4VEnergyLossProcess.cc index 6613f50032f..985089bd792 100644 --- a/source/processes/electromagnetic/utils/src/G4VEnergyLossProcess.cc +++ b/source/processes/electromagnetic/utils/src/G4VEnergyLossProcess.cc @@ -210,8 +210,9 @@ G4VEnergyLossProcess::PreparePhysicsTable(const G4ParticleDefinition& part) if(!isIon) { lManager->RegisterExtraParticle(&part, this); } if(1 < verboseLevel) { G4cout << "### G4VEnergyLossProcess::PreparePhysicsTable()" - << " interrupted for " - << part.GetParticleName() << " isIon=" << isIon << G4endl; + << " interrupted for " << GetProcessName() << " and " + << part.GetParticleName() << " isIon=" << isIon + << " spline=" << spline << G4endl; } return; } @@ -219,14 +220,14 @@ G4VEnergyLossProcess::PreparePhysicsTable(const G4ParticleDefinition& part) tablesAreBuilt = false; G4LossTableBuilder* bld = lManager->GetTableBuilder(); - lManager->PreparePhysicsTable(&part, this, isMaster); + lManager->PreparePhysicsTable(&part, this); // Base particle and set of models can be defined here InitialiseEnergyLossProcess(particle, baseParticle); // parameters of the process if(!actLossFluc) { lossFluctuationFlag = theParameters->LossFluctuation(); } - rndmStepFlag = theParameters->UseCutAsFinalRange(); + useCutAsFinalRange = theParameters->UseCutAsFinalRange(); if(!actMinKinEnergy) { minKinEnergy = theParameters->MinKinEnergy(); } if(!actMaxKinEnergy) { maxKinEnergy = theParameters->MaxKinEnergy(); } if(!actBinning) { nBins = theParameters->NumberOfBins(); } @@ -318,11 +319,12 @@ G4VEnergyLossProcess::PreparePhysicsTable(const G4ParticleDefinition& part) if(1 < verboseLevel) { G4cout << "G4VEnergyLossProcess::PrepearPhysicsTable() is done " - << " for local " << particle->GetParticleName() - << " isIon= " << isIon; + << " for " << GetProcessName() << " and " << particle->GetParticleName() + << " isIon= " << isIon << " spline=" << spline; if(baseParticle) { G4cout << "; base: " << baseParticle->GetParticleName(); } + G4cout << G4endl; G4cout << " chargeSqRatio= " << chargeSqRatio << " massRatio= " << massRatio << " reduceFactor= " << reduceFactor << G4endl; @@ -346,16 +348,16 @@ void G4VEnergyLossProcess::BuildPhysicsTable(const G4ParticleDefinition& part) G4cout << "### G4VEnergyLossProcess::BuildPhysicsTable() for " << GetProcessName() << " and particle " << part.GetParticleName() - << "; local: " << particle->GetParticleName(); + << "; the first particle " << particle->GetParticleName(); if(baseParticle) { G4cout << "; base: " << baseParticle->GetParticleName(); } - G4cout << " TablesAreBuilt= " << tablesAreBuilt - << " isIon= " << isIon << " " << this << G4endl; + G4cout << G4endl; + G4cout << " TablesAreBuilt= " << tablesAreBuilt << " isIon= " << isIon + << " spline=" << spline << " ptr: " << this << G4endl; } if(&part == particle) { - if(isMaster) { lManager->BuildPhysicsTable(particle, this); @@ -428,7 +430,8 @@ G4PhysicsTable* G4VEnergyLossProcess::BuildDEDXTable(G4EmTableType tType) if(1 < verboseLevel) { G4cout << "G4VEnergyLossProcess::BuildDEDXTable() of type " << tType << " for " << GetProcessName() - << " and " << particle->GetParticleName() << G4endl; + << " and " << particle->GetParticleName() + << "spline=" << spline << G4endl; } if(nullptr == table) { return table; } @@ -548,13 +551,9 @@ void G4VEnergyLossProcess::StartTracking(G4Track* track) // reset ion if(isIon) { const G4double newmass = track->GetDefinition()->GetPDGMass(); - if(nullptr != baseParticle) { - massRatio = baseParticle->GetPDGMass()/newmass; - logMassRatio = G4Log(massRatio); - } else { - massRatio = CLHEP::proton_mass_c2/newmass; - logMassRatio = G4Log(massRatio); - } + massRatio = (nullptr == baseParticle) ? CLHEP::proton_mass_c2/newmass + : baseParticle->GetPDGMass()/newmass; + logMassRatio = G4Log(massRatio); } // forced biasing only for primary particles if(nullptr != biasManager) { @@ -575,13 +574,15 @@ G4double G4VEnergyLossProcess::AlongStepGetPhysicalInteractionLength( *selection = aGPILSelection; if(isIonisation && currentModel->IsActive(preStepScaledEnergy)) { GetScaledRangeForScaledEnergy(preStepScaledEnergy, preStepLogScaledEnergy); - const G4double finR = (rndmStepFlag) ? std::min(finalRange, + x = (useCutAsFinalRange) ? std::min(finalRange, currentCouple->GetProductionCuts()->GetProductionCut(1)) : finalRange; - x = (fRange > finR) ? - fRange*dRoverRange + finR*(1.0-dRoverRange)*(2.0-finR/fRange) : fRange; + x = (fRange > x) ? fRange*dRoverRange + x*(1.0 - dRoverRange)*(2.0 - x/fRange) + : fRange; + /* + G4cout<<"AlongStepGPIL: " << GetProcessName()<<": e="<= fRange || preStepKinEnergy <= lowestKinEnergy) { eloss = preStepKinEnergy; if (useDeexcitation) { @@ -818,27 +815,34 @@ G4VParticleChange* G4VEnergyLossProcess::AlongStepDoIt(const G4Track& track, fParticleChange.ProposeLocalEnergyDeposit(eloss); return &fParticleChange; } + // zero step length with non-zero range + if(length <= 0.0) { return &fParticleChange; } + // Short step eloss = length*GetDEDXForScaledEnergy(preStepScaledEnergy, preStepLogScaledEnergy); - //G4cout << "Short STEP: eloss= " << eloss << G4endl; - + /* + G4cout << "##### Short STEP: eloss= " << eloss + << " Escaled=" << preStepScaledEnergy + << " R=" << fRange + << " L=" << length + << " fFactor=" << fFactor << " minE=" << minKinEnergy + << " idxBase=" << basedCoupleIndex << G4endl; + */ // Long step if(eloss > preStepKinEnergy*linLossLimit) { - G4double x = (fRange - length)/reduceFactor; - //G4cout << "x= " << x << " " << theInverseRangeTable << G4endl; - eloss = preStepKinEnergy - ScaledKinEnergyForLoss(x)/massRatio; - + const G4double x = (fRange - length)/reduceFactor; + const G4double de = preStepKinEnergy - ScaledKinEnergyForLoss(x)/massRatio; + if(de > 0.0) { eloss = de; } /* if(-1 < verboseLevel) - G4cout << "Long STEP: rPre(mm)= " + G4cout << " Long STEP: rPre(mm)=" << GetScaledRangeForScaledEnergy(preStepScaledEnergy)/mm - << " rPost(mm)= " << x/mm - << " ePre(MeV)= " << preStepScaledEnergy/MeV - << " eloss(MeV)= " << eloss/MeV << " eloss0(MeV)= " - << GetDEDXForScaledEnergy(preStepScaledEnergy)*length/MeV - << " lim(MeV)= " << preStepKinEnergy*linLossLimit/MeV + << " x(mm)=" << x/mm + << " eloss(MeV)=" << eloss/MeV + << " rFactor=" << reduceFactor + << " massRatio=" << massRatio << G4endl; */ } diff --git a/source/processes/electromagnetic/utils/src/G4VMscModel.cc b/source/processes/electromagnetic/utils/src/G4VMscModel.cc index 38b9e014382..9bae169f402 100644 --- a/source/processes/electromagnetic/utils/src/G4VMscModel.cc +++ b/source/processes/electromagnetic/utils/src/G4VMscModel.cc @@ -153,7 +153,7 @@ void G4VMscModel::SampleSecondaries(std::vector*, G4double, G4double) {} -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4double G4VMscModel::GetDEDX(const G4ParticleDefinition* part, G4double kinEnergy, const G4MaterialCutsCouple* couple) @@ -166,9 +166,9 @@ G4double G4VMscModel::GetDEDX(const G4ParticleDefinition* part, G4double kinEner x = dedx*q*q; } return x; -} +} -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4double G4VMscModel::GetDEDX(const G4ParticleDefinition* part, G4double kinEnergy, const G4MaterialCutsCouple* couple, G4double logKinEnergy) @@ -198,9 +198,9 @@ G4double G4VMscModel::GetRange(const G4ParticleDefinition* part, G4double kinEne } //G4cout << "R(mm)= " << localrange << " " << ionisation << G4endl; return localrange; -} +} -//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... +//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... G4double G4VMscModel::GetRange(const G4ParticleDefinition* part,G4double kinEnergy, const G4MaterialCutsCouple* couple, G4double logKinEnergy) @@ -216,7 +216,7 @@ G4double G4VMscModel::GetRange(const G4ParticleDefinition* part,G4double kinEner } //G4cout << "R(mm)= " << localrange << " " << ionisation << G4endl; return localrange; -} +} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/processes/electromagnetic/utils/src/G4VMultipleScattering.cc b/source/processes/electromagnetic/utils/src/G4VMultipleScattering.cc index 4c801a5d3de..46c7b6eb2a2 100644 --- a/source/processes/electromagnetic/utils/src/G4VMultipleScattering.cc +++ b/source/processes/electromagnetic/utils/src/G4VMultipleScattering.cc @@ -143,7 +143,7 @@ G4VMultipleScattering::PreparePhysicsTable(const G4ParticleDefinition& part) G4bool master = emManager->IsMaster(); if(nullptr == firstParticle) { firstParticle = ∂ } - emManager->PreparePhysicsTable(&part, this, master); + emManager->PreparePhysicsTable(&part, this); currParticle = nullptr; if(firstParticle == &part) { diff --git a/source/processes/electromagnetic/utils/src/G4ionEffectiveCharge.cc b/source/processes/electromagnetic/utils/src/G4ionEffectiveCharge.cc index 8ae6ccfd13b..324f229276c 100644 --- a/source/processes/electromagnetic/utils/src/G4ionEffectiveCharge.cc +++ b/source/processes/electromagnetic/utils/src/G4ionEffectiveCharge.cc @@ -143,7 +143,7 @@ G4double G4ionEffectiveCharge::EffectiveCharge(const G4ParticleDefinition* p, G4double eF = material->GetIonisation()->GetFermiEnergy(); G4double v1sq = reducedEnergy/eF; G4double vFsq = eF/energyBohr; - G4double vF = std::sqrt(eF/energyBohr); + G4double vF = std::sqrt(vFsq); G4double y = ( v1sq > 1.0 ) // Faster than Fermi velocity diff --git a/source/processes/electromagnetic/xrays/GNUmakefile b/source/processes/electromagnetic/xrays/GNUmakefile deleted file mode 100644 index 30ec8dd6e66..00000000000 --- a/source/processes/electromagnetic/xrays/GNUmakefile +++ /dev/null @@ -1,35 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for electromagnetic sub-library. John Allison, 25/6/98. -# -------------------------------------------------------------------- - -name := G4xrays - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/electromagnetic/standard/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/hadronic/GNUmakefile b/source/processes/hadronic/GNUmakefile deleted file mode 100644 index 527a9b3f11f..00000000000 --- a/source/processes/hadronic/GNUmakefile +++ /dev/null @@ -1,91 +0,0 @@ -# ---------------------------------------------------------------- -# GNUmakefile for hadronic processes library. G.Folger 10-Dec-97. -# ---------------------------------------------------------------- - -name := G4hadronic - -SUBDIRS = management -SUBDIRS += util -SUBDIRS += processes -SUBDIRS += cross_sections -SUBDIRS += stopping -SUBDIRS += models/abla -SUBDIRS += models/abrasion -SUBDIRS += models/binary_cascade -SUBDIRS += models/cascade/cascade -SUBDIRS += models/coherent_elastic -SUBDIRS += models/de_excitation/evaporation -SUBDIRS += models/de_excitation/fermi_breakup -SUBDIRS += models/de_excitation/fission -SUBDIRS += models/de_excitation/gem_evaporation -SUBDIRS += models/de_excitation/handler -SUBDIRS += models/de_excitation/management -SUBDIRS += models/de_excitation/multifragmentation -SUBDIRS += models/de_excitation/photon_evaporation -SUBDIRS += models/de_excitation/util -SUBDIRS += models/de_excitation/ablation -SUBDIRS += models/em_dissociation -SUBDIRS += models/fission -SUBDIRS += models/gamma_nuclear -SUBDIRS += models/im_r_matrix -SUBDIRS += models/inclxx/utils -SUBDIRS += models/inclxx/incl_physics -SUBDIRS += models/inclxx/interface -SUBDIRS += models/lend -SUBDIRS += models/lepto_nuclear -SUBDIRS += models/particle_hp -SUBDIRS += models/parton_string/diffraction -SUBDIRS += models/parton_string/hadronization -SUBDIRS += models/parton_string/management -SUBDIRS += models/parton_string/qgsm -SUBDIRS += models/pre_equilibrium/exciton_model -SUBDIRS += models/radioactive_decay -SUBDIRS += models/qmd -SUBDIRS += models/quasi_elastic -SUBDIRS += models/theo_high_energy - -SUBLIBS = G4hadronic_abla_abla -SUBLIBS += G4hadronic_abrasion -SUBLIBS += G4hadronic_xsect -SUBLIBS += G4hadronic_mgt -SUBLIBS += G4hadronic_proc -SUBLIBS += G4hadronic_stop -SUBLIBS += G4hadronic_util -SUBLIBS += G4hadronic_binary -SUBLIBS += G4hadronic_coherent_elastic -SUBLIBS += G4had_im_r_matrix -SUBLIBS += G4hadronic_qmd -SUBLIBS += G4had_part_hp -SUBLIBS += G4had_lend -SUBLIBS += G4had_fission -SUBLIBS += G4had_gamm_nuclear -SUBLIBS += G4hadronic_radioactivedecay -SUBLIBS += G4had_theo_max -SUBLIBS += G4hadronic_bert_cascade -SUBLIBS += G4hadronic_inclxx_utils -SUBLIBS += G4hadronic_inclxx_physics -SUBLIBS += G4hadronic_inclxx_interface -SUBLIBS += G4hadronic_deex_evaporation -SUBLIBS += G4hadronic_deex_fermi_breakup -SUBLIBS += G4hadronic_deex_fission -SUBLIBS += G4hadronic_deex_gem_evaporation -SUBLIBS += G4hadronic_deex_handler -SUBLIBS += G4hadronic_deex_management -SUBLIBS += G4hadronic_deex_multifragmentation -SUBLIBS += G4hadronic_deex_photon_evaporation -SUBLIBS += G4hadronic_deex_util -SUBLIBS += G4hadronic_ablation -SUBLIBS += G4hadronic_em_dissociation -SUBLIBS += G4had_preequ_exciton -SUBLIBS += G4had_lept_nuclear -SUBLIBS += G4had_string_diff -SUBLIBS += G4had_string_frag -SUBLIBS += G4had_string_man -SUBLIBS += G4hadronic_quasi_elastic -SUBLIBS += G4hadronic_qgstring - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/globlib.gmk diff --git a/source/processes/hadronic/cross_sections/GNUmakefile b/source/processes/hadronic/cross_sections/GNUmakefile deleted file mode 100644 index ee667f74991..00000000000 --- a/source/processes/hadronic/cross_sections/GNUmakefile +++ /dev/null @@ -1,31 +0,0 @@ -# ---------------------------------------------------------------- -# GNUmakefile for hadronic management library. G.Folger 10-Dec-97 -# ---------------------------------------------------------------- - -name := G4hadronic_xsect - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/hadronic/cross_sections/History b/source/processes/hadronic/cross_sections/History index c91b32f6763..79cd9447d27 100644 --- a/source/processes/hadronic/cross_sections/History +++ b/source/processes/hadronic/cross_sections/History @@ -6,6 +6,33 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-05-24 Vladimir Ivanchenko (hadr-cross-V11-01-05) +- G4GammaNuclearXS - more accurate usage of cache to fix the nightly problems; + simplified GetIsoCrosssection(..) and SelectIsotope(..) methods + +## 2023-05-23 Gabriele Cosmo (hadr-cross-V11-01-04) +- Fixed compilation warnings for implicit type conversions on macOS/XCode>=14.1. + +## 2023-05-08 Vladimir Ivanchenko (hadr-cross-V11-01-03) +- G4GammaNuclearXS - general clean-up of the class: instantiate data only once + for all instances of this x-section class; upload data for all elements + before the first run; simplified computation of isotope x-section; added + extra public method LowEnergyCrossSection(..) + +## 2023-04-25 Vladimir Ivanchenko (hadr-cross-V11-01-02) +- G4CrossSectionDataStore - removed remaining call to getenv + +## 2023-02-17 Vladimir Grichine (hadr-cross-V11-01-01) +- G4ElNeutrinoNucleusTotXsc - uncommented methods for interface with G4ElNeutrinoNucleusProcess + +## 2023-01-14 Vladimir Ivanchenko (hadr-cross-V11-01-00) +- G4NeutronCaptureXS, G4NeutronElasticXS, G4NeutronInelasticXS, G4GammaNuclearXS, + G4ParticleInelasticXS - do not call to environment variable G4PARTICLEXSDATA, + instead use G4HadrpnicParameters access method. Address issue #139 for + hadronic cross sections + G4CrossSectionDataStore - reduced number of calls to environment variable, + which are done only to print html output for documentation + ## 2022-11-26 Gabriele Cosmo (hadr-cross-V11-00-15) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/processes/hadronic/cross_sections/include/G4CrossSectionDataStore.hh b/source/processes/hadronic/cross_sections/include/G4CrossSectionDataStore.hh index fa2457e399b..78bb8fa43ff 100644 --- a/source/processes/hadronic/cross_sections/include/G4CrossSectionDataStore.hh +++ b/source/processes/hadronic/cross_sections/include/G4CrossSectionDataStore.hh @@ -91,7 +91,8 @@ public: // Dump store as html void DumpHtml(const G4ParticleDefinition&, std::ofstream&) const; - void PrintCrossSectionHtml(const G4VCrossSectionDataSet *cs) const; + void PrintCrossSectionHtml(const G4VCrossSectionDataSet *cs, + const G4String&, const G4String&) const; void AddDataSet(G4VCrossSectionDataSet*); void AddDataSet(G4VCrossSectionDataSet*, std::size_t); diff --git a/source/processes/hadronic/cross_sections/include/G4ElNeutrinoNucleusTotXsc.hh b/source/processes/hadronic/cross_sections/include/G4ElNeutrinoNucleusTotXsc.hh index bdfd224c278..b5f5c904f11 100644 --- a/source/processes/hadronic/cross_sections/include/G4ElNeutrinoNucleusTotXsc.hh +++ b/source/processes/hadronic/cross_sections/include/G4ElNeutrinoNucleusTotXsc.hh @@ -46,13 +46,13 @@ public: G4ElNeutrinoNucleusTotXsc(); ~G4ElNeutrinoNucleusTotXsc(); - G4bool IsIsoApplicable(const G4DynamicParticle*, G4int , G4int , const G4Element*, const G4Material*) override { return true; }; + G4bool IsIsoApplicable(const G4DynamicParticle*, G4int , G4int , const G4Element*, const G4Material*) override; - G4bool IsElementApplicable(const G4DynamicParticle*, G4int , const G4Material*) override { return false; }; + G4bool IsElementApplicable(const G4DynamicParticle*, G4int , const G4Material*) override { return true; }; - // virtual G4double GetElementCrossSection(const G4DynamicParticle*, G4int Z, const G4Material*); - // G4double GetElementCrossSection(const G4DynamicParticle* dynPart, G4int Z, const G4Material* mat) override; + + G4double GetElementCrossSection(const G4DynamicParticle* dynPart, G4int Z, const G4Material* mat) override; G4double GetIsoCrossSection(const G4DynamicParticle* aPart, G4int Z, G4int A, const G4Isotope*, diff --git a/source/processes/hadronic/cross_sections/include/G4GammaNuclearXS.hh b/source/processes/hadronic/cross_sections/include/G4GammaNuclearXS.hh index cff192dadb3..53440589bd6 100644 --- a/source/processes/hadronic/cross_sections/include/G4GammaNuclearXS.hh +++ b/source/processes/hadronic/cross_sections/include/G4GammaNuclearXS.hh @@ -34,31 +34,27 @@ // Authors V.Ivantchenko, Geant4, 20 October 2020 // B.Kutsenko, BINP/NSU, 10 August 2021 // -// Modification - - +// // Class Description: // This is a base class for gamma-nuclear cross section based on // data files from IAEA Evaluated Photonuclear Data Library (IAEA/PD-2019) // https://www-nds.iaea.org/photonuclear/ -// Database review - https://www.sciencedirect.com/science/article/pii/S0090375219300699?via%3Dihub -// Class Description - End +// Database review: +// https://www.sciencedirect.com/science/article/pii/S0090375219300699?via%3Dihub +// #ifndef G4GammaNuclearXS_h #define G4GammaNuclearXS_h 1 #include "G4VCrossSectionDataSet.hh" #include "globals.hh" -#include "G4ElementData.hh" -#include "G4PhysicsVector.hh" -#include "G4Threading.hh" -#include "G4IsotopeList.hh" #include class G4DynamicParticle; class G4ParticleDefinition; class G4Element; -class G4VComponentCrossSection; +class G4ElementData; +class G4PhysicsVector; class G4GammaNuclearXS final : public G4VCrossSectionDataSet { @@ -94,6 +90,8 @@ public: G4double ElementCrossSection(G4double ekin, G4int Z); + G4double LowEnergyCrossSection(G4double ekin, G4int Z); + void CrossSectionDescription(std::ostream&) const final; G4GammaNuclearXS & operator=(const G4GammaNuclearXS &right) = delete; @@ -107,44 +105,32 @@ private: const G4String& FindDirectoryPath(); - inline G4PhysicsVector* GetPhysicsVector(G4int Z); - - G4PhysicsVector* RetrieveVector(std::ostringstream& in, G4bool isElement, G4int Z); + G4PhysicsVector* RetrieveVector(std::ostringstream& in, G4bool warn, G4int Z); G4VCrossSectionDataSet* ggXsection = nullptr; - - std::vector temp; const G4ParticleDefinition* gamma; - - G4bool isMaster = false; + + // Cache + G4double fXS = 0.0; + G4double fEkin = 0.0; + G4int fZ = 0; + G4bool isFirst = false; static const G4int MAXZGAMMAXS = 95; + static const G4int MAXNFREE = 11; static G4ElementData* data; // Upper limit of the linear transition between IAEA database and CHIPS model - static const G4int rTransitionBound = 150.*CLHEP::MeV; + static const G4double eTransitionBound; // The list of elements with non-linear parametrisation for better precision - const G4int freeVectorException[11] = {4, 6, 7, 8, 27, 39, 45, 65, 67, 69, 73}; + static const G4int freeVectorException[MAXNFREE]; // CHIPS photonuclear model had a problem with high energy parametrisation // for isotopes of H and He, coefficient is needed to connect isotope cross // section with element cross-section on high energies. static G4double coeff[3][3]; static G4double xs150[MAXZGAMMAXS]; static G4String gDataDirectory; - -#ifdef G4MULTITHREADED - static G4Mutex gNuclearXSMutex; -#endif -}; -inline -G4PhysicsVector* G4GammaNuclearXS::GetPhysicsVector(G4int Z) -{ - G4PhysicsVector* pv = data->GetElementData(Z); - if(pv == nullptr) { - InitialiseOnFly(Z); - pv = data->GetElementData(Z); - } - return pv; -} + std::vector temp; +}; #endif diff --git a/source/processes/hadronic/cross_sections/src/G4CrossSectionDataStore.cc b/source/processes/hadronic/cross_sections/src/G4CrossSectionDataStore.cc index 28bb6676476..598deaec835 100644 --- a/source/processes/hadronic/cross_sections/src/G4CrossSectionDataStore.cc +++ b/source/processes/hadronic/cross_sections/src/G4CrossSectionDataStore.cc @@ -53,6 +53,7 @@ #include "G4Material.hh" #include "G4MaterialTable.hh" #include "G4NistManager.hh" +#include "G4HadronicParameters.hh" #include #include @@ -336,7 +337,10 @@ void G4CrossSectionDataStore::DumpHtml(const G4ParticleDefinition& /* pD */, G4double ehi = 0; G4double elo = 0; - G4String physListName(std::getenv("G4PhysListName")); + auto param = G4HadronicParameters::Instance(); + G4String physListName = param->GetPhysListName(); + G4String dirName = param->GetPhysListDocDir(); + for (G4int i = nDataSetList-1; i > 0; i--) { elo = dataSetList[i]->GetMinKinEnergy()/GeV; ehi = dataSetList[i]->GetMaxKinEnergy()/GeV; @@ -344,7 +348,7 @@ void G4CrossSectionDataStore::DumpHtml(const G4ParticleDefinition& /* pD */, << dataSetList[i]->GetName() << ".html\"> " << dataSetList[i]->GetName() << " from " << elo << " GeV to " << ehi << " GeV \n"; - PrintCrossSectionHtml(dataSetList[i]); + PrintCrossSectionHtml(dataSetList[i], physListName, dirName); } G4double defaultHi = dataSetList[0]->GetMaxKinEnergy()/GeV; @@ -353,16 +357,16 @@ void G4CrossSectionDataStore::DumpHtml(const G4ParticleDefinition& /* pD */, << ".html\"> " << dataSetList[0]->GetName() << " from " << ehi << " GeV to " << defaultHi << " GeV \n"; - PrintCrossSectionHtml(dataSetList[0]); + PrintCrossSectionHtml(dataSetList[0], physListName, dirName); } } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... -void G4CrossSectionDataStore::PrintCrossSectionHtml(const G4VCrossSectionDataSet *cs) const +void G4CrossSectionDataStore::PrintCrossSectionHtml(const G4VCrossSectionDataSet *cs, + const G4String& physListName, + const G4String& dirName) const { - G4String dirName(std::getenv("G4PhysListDocDir")); - G4String physListName(std::getenv("G4PhysListName")); G4String pathName = dirName + "/" + physListName + "_" + HtmlFileName(cs->GetName()); std::ofstream outCS; diff --git a/source/processes/hadronic/cross_sections/src/G4ElNeutrinoNucleusTotXsc.cc b/source/processes/hadronic/cross_sections/src/G4ElNeutrinoNucleusTotXsc.cc index 0be96bf359c..2a2dba2929a 100644 --- a/source/processes/hadronic/cross_sections/src/G4ElNeutrinoNucleusTotXsc.cc +++ b/source/processes/hadronic/cross_sections/src/G4ElNeutrinoNucleusTotXsc.cc @@ -85,7 +85,7 @@ G4ElNeutrinoNucleusTotXsc::~G4ElNeutrinoNucleusTotXsc() ////////////////////////////////////////////////////// -/* + G4bool G4ElNeutrinoNucleusTotXsc::IsIsoApplicable( const G4DynamicParticle* aPart, G4int, G4int, const G4Element*, const G4Material*) { @@ -135,7 +135,7 @@ G4double G4ElNeutrinoNucleusTotXsc::GetElementCrossSection(const G4DynamicPartic if( fact > 0.0) { xsec /= fact; } return xsec; } -*/ + //////////////////////////////////////////////////// // diff --git a/source/processes/hadronic/cross_sections/src/G4GammaNuclearXS.cc b/source/processes/hadronic/cross_sections/src/G4GammaNuclearXS.cc index 3f1aa754ab6..8f38feab893 100644 --- a/source/processes/hadronic/cross_sections/src/G4GammaNuclearXS.cc +++ b/source/processes/hadronic/cross_sections/src/G4GammaNuclearXS.cc @@ -42,13 +42,18 @@ #include "G4ElementTable.hh" #include "G4Material.hh" #include "G4Element.hh" +#include "G4ElementData.hh" +#include "G4PhysicsVector.hh" #include "G4PhysicsLinearVector.hh" +#include "G4PhysicsFreeVector.hh" #include "G4CrossSectionDataSetRegistry.hh" #include "G4PhotoNuclearCrossSection.hh" +#include "G4HadronicParameters.hh" #include "Randomize.hh" #include "G4SystemOfUnits.hh" #include "G4Gamma.hh" #include "G4IsotopeList.hh" +#include "G4AutoLock.hh" #include #include @@ -57,19 +62,22 @@ G4ElementData* G4GammaNuclearXS::data = nullptr; G4double G4GammaNuclearXS::coeff[3][3]; -G4double G4GammaNuclearXS::xs150[MAXZGAMMAXS] = {0.0}; +G4double G4GammaNuclearXS::xs150[] = {0.0}; +const G4double G4GammaNuclearXS::eTransitionBound = 150.*CLHEP::MeV; +const G4int G4GammaNuclearXS::freeVectorException[] = { +4, 6, 7, 8, 27, 39, 45, 65, 67, 69, 73}; G4String G4GammaNuclearXS::gDataDirectory = ""; -#ifdef G4MULTITHREADED - G4Mutex G4GammaNuclearXS::gNuclearXSMutex = G4MUTEX_INITIALIZER; -#endif +namespace +{ + G4Mutex gNuclearXSMutex = G4MUTEX_INITIALIZER; +} G4GammaNuclearXS::G4GammaNuclearXS() - : G4VCrossSectionDataSet(Default_Name()), - gamma(G4Gamma::Gamma()) + : G4VCrossSectionDataSet(Default_Name()), gamma(G4Gamma::Gamma()) { // verboseLevel = 0; - if(verboseLevel > 0){ + if(verboseLevel > 0) { G4cout << "G4GammaNuclearXS::G4GammaNuclearXS Initialise for Z < " << MAXZGAMMAXS << G4endl; } @@ -80,7 +88,7 @@ G4GammaNuclearXS::G4GammaNuclearXS() G4GammaNuclearXS::~G4GammaNuclearXS() { - if(isMaster) { + if(isFirst) { delete data; data = nullptr; } @@ -89,9 +97,10 @@ G4GammaNuclearXS::~G4GammaNuclearXS() void G4GammaNuclearXS::CrossSectionDescription(std::ostream& outFile) const { outFile << "G4GammaNuclearXS calculates the gamma nuclear\n" - << "cross-section for GDR energy region on nuclei using data from the high precision\n" + << "cross-section for GDR energy region on nuclei using " + << "data from the high precision\n" << "IAEA photonuclear database (2019). Then liniear connection\n" - <<"implemented with previous CHIPS photonuclear model\n"; + << "implemented with previous CHIPS photonuclear model" << G4endl; } G4bool @@ -112,116 +121,84 @@ G4double G4GammaNuclearXS::GetElementCrossSection(const G4DynamicParticle* aParticle, G4int ZZ, const G4Material* mat) { - const G4int Z = (ZZ >= MAXZGAMMAXS) ? MAXZGAMMAXS - 1 : ZZ; - auto pv = GetPhysicsVector(Z); - - if(pv == nullptr) { - return ggXsection->GetElementCrossSection(aParticle, Z, mat); + // check cache + const G4int Z = (ZZ < MAXZGAMMAXS) ? ZZ : MAXZGAMMAXS - 1; + const G4double ekin = aParticle->GetKineticEnergy(); + if(Z == fZ && ekin == fEkin) { return fXS; } + fZ = Z; + fEkin = ekin; + + auto pv = data->GetElementData(Z); + if(pv == nullptr || 1 == Z) { + fXS = ggXsection->GetElementCrossSection(aParticle, Z, mat); + return fXS; } const G4double emax = pv->GetMaxEnergy(); - const G4double ekin = aParticle->GetKineticEnergy(); - G4double xs = 0.0; + + // low energy based on data if(ekin <= emax) { - xs = pv->Value(ekin); - } else if(ekin >= rTransitionBound){ - xs = ggXsection->GetElementCrossSection(aParticle, Z, mat); + fXS = pv->Value(ekin); + // high energy CHIPS parameterisation + } else if(ekin >= eTransitionBound) { + fXS = ggXsection->GetElementCrossSection(aParticle, Z, mat); + // linear interpolation } else { const G4double rxs = xs150[Z]; const G4double lxs = pv->Value(emax); - xs = lxs + (ekin - emax)*(rxs - lxs)/(rTransitionBound-emax); + fXS = lxs + (ekin - emax)*(rxs - lxs)/(eTransitionBound - emax); } #ifdef G4VERBOSE if(verboseLevel > 1) { G4cout << "Z= " << Z << " Ekin(MeV)= " << ekin/CLHEP::MeV - << ", nElmXS(b)= " << xs/CLHEP::barn + << ", nElmXS(b)= " << fXS/CLHEP::barn << G4endl; } #endif - return xs; + return fXS; } -G4double -G4GammaNuclearXS::ElementCrossSection(G4double ekin, G4int ZZ) +G4double G4GammaNuclearXS::ElementCrossSection(G4double ekin, G4int ZZ) { G4DynamicParticle theGamma(gamma, G4ThreeVector(1,0,0), ekin); return GetElementCrossSection(&theGamma, ZZ); } +G4double G4GammaNuclearXS::LowEnergyCrossSection(G4double ekin, G4int ZZ) +{ + const G4int Z = (ZZ < MAXZGAMMAXS) ? ZZ : MAXZGAMMAXS - 1; + auto pv = data->GetElementData(Z); + return pv->Value(ekin); +} + G4double -G4GammaNuclearXS::IsoCrossSection(G4double ekin, G4int ZZ, G4int A) +G4GammaNuclearXS::IsoCrossSection(G4double ekin, G4int Z, G4int A) { G4DynamicParticle theGamma(gamma, G4ThreeVector(1,0,0), ekin); - return GetIsoCrossSection(&theGamma, ZZ, A); + return GetIsoCrossSection(&theGamma, Z, A); } G4double G4GammaNuclearXS::GetIsoCrossSection( const G4DynamicParticle* aParticle, G4int ZZ, G4int A, - const G4Isotope*, const G4Element*, - const G4Material*) + const G4Isotope*, const G4Element*, const G4Material* mat) { - const G4int Z = (ZZ >= MAXZGAMMAXS) ? MAXZGAMMAXS - 1 : ZZ; - /* - G4cout << "IsoCrossSection Z= " << Z << " A= " << A - << " Amin= " << amin[Z] << " Amax= " << amax[Z] - << " E(MeV)= " << ekin << G4endl; - */ - auto pv = GetPhysicsVector(Z); - if(pv == nullptr) { - return ggXsection->GetIsoCrossSection(aParticle, Z, A); - } + const G4int Z = (ZZ < MAXZGAMMAXS) ? ZZ : MAXZGAMMAXS - 1; + // cross section per element + G4double xs = GetElementCrossSection(aParticle, Z, mat); const G4double ekin = aParticle->GetKineticEnergy(); - const G4double emax = pv->GetMaxEnergy(); - G4double xs = 0.0; - - // compute isotope cross section if applicable - if(amin[Z] < amax[Z] && A >= amin[Z] && A <= amax[Z] && - ekin < rTransitionBound) { - auto pviso = data->GetComponentDataByIndex(Z, A - amin[Z]); - // isotope file exists - if(nullptr != pviso) { - const G4double emaxiso = pviso->GetMaxEnergy(); - if(ekin <= emaxiso) { - xs = pviso->Value(ekin); - } else { - G4DynamicParticle - theGamma(gamma, G4ThreeVector(0,0,1.), rTransitionBound); - const G4double rxs = ggXsection->GetIsoCrossSection(&theGamma, Z, A); - const G4double lxs = pviso->Value(emaxiso); - xs = lxs + (ekin - emaxiso)*(rxs - lxs)/(rTransitionBound-emaxiso); - } -#ifdef G4VERBOSE - if(verboseLevel > 1) { - G4cout << "G4GammaNuclearXS::IsoXS: Z= " << Z << " A= " << A - << " Ekin(MeV)= " << ekin/CLHEP::MeV - << ", ElmXS(b)= " << xs/CLHEP::barn << G4endl; - } -#endif - return xs; - } - } - // use element x-section - // for the hydrogen target there is no element data - if(ekin <= emax && Z != 1) { - xs = pv->Value(ekin)*A/aeff[Z]; - - // CHIPS for high energy and for the hydrogen target - } else if(ekin >= rTransitionBound || Z == 1) { - if(Z <= 2 && ekin > 10.*GeV) { - xs = coeff[Z][A - amin[Z]]* - ggXsection->GetElementCrossSection(aParticle, Z, 0); + if (Z > 2) { + xs *= A/aeff[Z]; + } else { + G4int AA = A - amin[Z]; + if(ekin >= 10.*CLHEP::GeV && AA >=0 && AA <=2) { + xs *= coeff[Z][AA]; } else { xs = ggXsection->GetIsoCrossSection(aParticle, Z, A); } - - // transition GDR to CHIPS - } else { - const G4double rxs = xs150[Z]; - const G4double lxs = pv->Value(emax)*A/aeff[Z]; - xs = lxs + (ekin - emax)*(rxs - lxs)/(rTransitionBound-emax); } + #ifdef G4VERBOSE if(verboseLevel > 1) { G4cout << "G4GammaNuclearXS::IsoXS: Z= " << Z << " A= " << A @@ -241,47 +218,33 @@ const G4Isotope* G4GammaNuclearXS::SelectIsotope( if(1 == nIso) { return iso; } const G4double* abundVector = anElement->GetRelativeAbundanceVector(); - G4double q = G4UniformRand(); G4double sum = 0.0; - G4int j; G4int Z = anElement->GetZasInt(); - // condition to use only isotope abundance - if(amax[Z] == amin[Z] || kinEnergy > rTransitionBound || Z >= MAXZGAMMAXS ) { - for (j=0; j<(G4int)nIso; ++j) { - sum += abundVector[j]; - if(q <= sum) { - iso = anElement->GetIsotope(j); - break; - } - } - return iso; - } // use isotope cross sections std::size_t nn = temp.size(); if(nn < nIso) { temp.resize(nIso, 0.); } - for (j=0; j<(G4int)nIso; ++j) { + for (std::size_t j=0; jGetN() // << " abund= " << abundVector[j] << G4endl; sum += abundVector[j]* - IsoCrossSection(kinEnergy, Z, anElement->GetIsotope(j)->GetN()); + IsoCrossSection(kinEnergy, Z, anElement->GetIsotope((G4int)j)->GetN()); temp[j] = sum; } - sum *= q; - for (j = 0; j<(G4int)nIso; ++j) { + sum *= G4UniformRand(); + for (std::size_t j = 0; j= sum) { - iso = anElement->GetIsotope(j); + iso = anElement->GetIsotope((G4int)j); break; } } return iso; } -void -G4GammaNuclearXS::BuildPhysicsTable(const G4ParticleDefinition& p) +void G4GammaNuclearXS::BuildPhysicsTable(const G4ParticleDefinition& p) { - if(verboseLevel > 0){ + if(verboseLevel > 0) { G4cout << "G4GammaNuclearXS::BuildPhysicsTable for " << p.GetParticleName() << G4endl; } @@ -294,33 +257,21 @@ G4GammaNuclearXS::BuildPhysicsTable(const G4ParticleDefinition& p) return; } - if(nullptr == data) { -#ifdef G4MULTITHREADED - G4MUTEXLOCK(&gNuclearXSMutex); - if(nullptr == data) { -#endif - isMaster = true; + if(nullptr == data) { + G4AutoLock l(&gNuclearXSMutex); + if(nullptr == data) { + isFirst = true; data = new G4ElementData(); data->SetName("PhotoNuclear"); - FindDirectoryPath(); -#ifdef G4MULTITHREADED + for (G4int Z=1; ZGetZasInt(), MAXZGAMMAXS-1) ); - if ( nullptr == data->GetElementData(Z) ) { Initialise(Z); } - } - } - - // prepare isotope selection std::size_t nIso = temp.size(); for ( auto & elm : *table ) { std::size_t n = elm->GetNumberOfIsotopes(); @@ -331,34 +282,22 @@ G4GammaNuclearXS::BuildPhysicsTable(const G4ParticleDefinition& p) const G4String& G4GammaNuclearXS::FindDirectoryPath() { - // check environment variable // build the complete string identifying the file with the data set if(gDataDirectory.empty()) { - const char* path = G4FindDataDir("G4PARTICLEXSDATA"); - if (nullptr != path) { - std::ostringstream ost; - ost << path << "/gamma/inel"; - gDataDirectory = ost.str(); - } else { - G4Exception("G4GammaNuclearXS::Initialise(..)","had013", - FatalException, - "Environment variable G4PARTICLEXSDATA is not defined"); - } + std::ostringstream ost; + ost << G4HadronicParameters::Instance()->GetDirPARTICLEXS() << "/gamma/inel"; + gDataDirectory = ost.str(); } return gDataDirectory; } void G4GammaNuclearXS::InitialiseOnFly(G4int Z) { -#ifdef G4MULTITHREADED - G4MUTEXLOCK(&gNuclearXSMutex); - if(nullptr == data->GetElementData(Z)) { -#endif - Initialise(Z); -#ifdef G4MULTITHREADED - } - G4MUTEXUNLOCK(&gNuclearXSMutex); -#endif + if(nullptr == data->GetElementData(Z)) { + G4AutoLock l(&gNuclearXSMutex); + Initialise(Z); + l.unlock(); + } } void G4GammaNuclearXS::Initialise(G4int Z) @@ -376,36 +315,34 @@ void G4GammaNuclearXS::Initialise(G4int Z) << " A= " << Amean << " Amin= " << amin[Z] << " Amax= " << amax[Z] << G4endl; */ - // upload isotope data - G4DynamicParticle theGamma(gamma, G4ThreeVector(1,0,0), rTransitionBound); + G4DynamicParticle theGamma(gamma, G4ThreeVector(1,0,0), eTransitionBound); xs150[Z] = ggXsection->GetElementCrossSection(&theGamma, Z, 0); - if(amax[Z] > amin[Z]) { - G4int nmax = amax[Z]-amin[Z]+1; - data->InitialiseForComponent(Z, nmax); - for(G4int A=amin[Z]; A<=amax[Z]; ++A) { - std::ostringstream ost1; - ost1 << gDataDirectory << Z << "_" << A; - G4PhysicsVector* v1 = RetrieveVector(ost1, false, Z); - data->AddComponent(Z, A, v1); - if(Z<=2){ - theGamma.SetKineticEnergy(10.*GeV); - G4double sig1 = ggXsection->GetIsoCrossSection(&theGamma, Z, A); - G4double sig2 = ggXsection->GetElementCrossSection(&theGamma, Z, 0); - if(sig2 > 0.) coeff[Z][A-amin[Z]]=(sig1/sig2); - else coeff[Z][A-amin[Z]]=1.; + + // compute corrections for low Z data + if(Z <= 2){ + theGamma.SetKineticEnergy(10*CLHEP::GeV); + if(amax[Z] > amin[Z]) { + for(G4int A=amin[Z]; A<=amax[Z]; ++A) { + G4int AA = A - amin[Z]; + if(AA >= 0 && AA <= 2) { + G4double sig1 = ggXsection->GetIsoCrossSection(&theGamma, Z, A); + G4double sig2 = ggXsection->GetElementCrossSection(&theGamma, Z, 0); + if(sig2 > 0.) { coeff[Z][AA] = (sig1/sig2); } + else { coeff[Z][AA] = 1.; } + } } } } } G4PhysicsVector* -G4GammaNuclearXS::RetrieveVector(std::ostringstream& ost, G4bool isElement, G4int Z) +G4GammaNuclearXS::RetrieveVector(std::ostringstream& ost, G4bool warn, G4int Z) { G4PhysicsVector* v = nullptr; std::ifstream filein(ost.str().c_str()); if (!filein.is_open()) { - if(isElement) { + if(warn) { G4ExceptionDescription ed; ed << "Data file <" << ost.str().c_str() << "> is not opened!"; @@ -418,10 +355,10 @@ G4GammaNuclearXS::RetrieveVector(std::ostringstream& ost, G4bool isElement, G4in << " is opened by G4GammaNuclearXS" << G4endl; } // retrieve data from DB - if(std::find(std::begin(freeVectorException), std::end(freeVectorException), Z ) == std::end(freeVectorException) && isElement) { - v = new G4PhysicsLinearVector(); + if(std::find(std::begin(freeVectorException), std::end(freeVectorException), Z) == std::end(freeVectorException)) { + v = new G4PhysicsLinearVector(false); } else { - v = new G4PhysicsVector(); + v = new G4PhysicsFreeVector(false); } if(!v->Retrieve(filein, true)) { G4ExceptionDescription ed; @@ -431,6 +368,6 @@ G4GammaNuclearXS::RetrieveVector(std::ostringstream& ost, G4bool isElement, G4in FatalException, ed, "Check G4PARTICLEXSDATA"); } } - return v; + return v; } diff --git a/source/processes/hadronic/cross_sections/src/G4NeutronCaptureXS.cc b/source/processes/hadronic/cross_sections/src/G4NeutronCaptureXS.cc index 5a14292eb87..beeff2afe39 100644 --- a/source/processes/hadronic/cross_sections/src/G4NeutronCaptureXS.cc +++ b/source/processes/hadronic/cross_sections/src/G4NeutronCaptureXS.cc @@ -46,6 +46,7 @@ #include "G4DynamicParticle.hh" #include "G4ElementTable.hh" #include "G4IsotopeList.hh" +#include "G4HadronicParameters.hh" #include "Randomize.hh" #include "G4Log.hh" #include "G4AutoLock.hh" @@ -304,19 +305,11 @@ G4NeutronCaptureXS::BuildPhysicsTable(const G4ParticleDefinition& p) const G4String& G4NeutronCaptureXS::FindDirectoryPath() { - // check environment variable // build the complete string identifying the file with the data set if(gDataDirectory.empty()) { - const char* path = G4FindDataDir("G4PARTICLEXSDATA"); - if (nullptr != path) { - std::ostringstream ost; - ost << path << "/neutron/cap"; - gDataDirectory = ost.str(); - } else { - G4Exception("G4NeutronCaptureXS::Initialise(..)","had013", - FatalException, - "Environment variable G4PARTICLEXSDATA is not defined"); - } + std::ostringstream ost; + ost << G4HadronicParameters::Instance()->GetDirPARTICLEXS() << "/neutron/cap"; + gDataDirectory = ost.str(); } return gDataDirectory; } diff --git a/source/processes/hadronic/cross_sections/src/G4NeutronElasticXS.cc b/source/processes/hadronic/cross_sections/src/G4NeutronElasticXS.cc index 10b98d54632..57d82c8a646 100644 --- a/source/processes/hadronic/cross_sections/src/G4NeutronElasticXS.cc +++ b/source/processes/hadronic/cross_sections/src/G4NeutronElasticXS.cc @@ -44,6 +44,7 @@ #include "G4PhysicsLogVector.hh" #include "G4CrossSectionDataSetRegistry.hh" #include "G4ComponentGGHadronNucleusXsc.hh" +#include "G4HadronicParameters.hh" #include "Randomize.hh" #include "G4SystemOfUnits.hh" #include "G4IsotopeList.hh" @@ -227,19 +228,11 @@ G4NeutronElasticXS::BuildPhysicsTable(const G4ParticleDefinition& p) const G4String& G4NeutronElasticXS::FindDirectoryPath() { - // check environment variable // build the complete string identifying the file with the data set if(gDataDirectory.empty()) { - const char* path = G4FindDataDir("G4PARTICLEXSDATA"); - if (nullptr != path) { - std::ostringstream ost; - ost << path << "/neutron/el"; - gDataDirectory = ost.str(); - } else { - G4Exception("G4NeutronElasticXS::Initialise(..)","had013", - FatalException, - "Environment variable G4PARTICLEXSDATA is not defined"); - } + std::ostringstream ost; + ost << G4HadronicParameters::Instance()->GetDirPARTICLEXS() << "/neutron/el"; + gDataDirectory = ost.str(); } return gDataDirectory; } diff --git a/source/processes/hadronic/cross_sections/src/G4NeutronInelasticXS.cc b/source/processes/hadronic/cross_sections/src/G4NeutronInelasticXS.cc index a4c1f77948f..dd9cf860085 100644 --- a/source/processes/hadronic/cross_sections/src/G4NeutronInelasticXS.cc +++ b/source/processes/hadronic/cross_sections/src/G4NeutronInelasticXS.cc @@ -42,6 +42,7 @@ #include "G4PhysicsLogVector.hh" #include "G4CrossSectionDataSetRegistry.hh" #include "G4ComponentGGHadronNucleusXsc.hh" +#include "G4HadronicParameters.hh" #include "Randomize.hh" #include "G4SystemOfUnits.hh" #include "G4IsotopeList.hh" @@ -302,19 +303,11 @@ G4NeutronInelasticXS::BuildPhysicsTable(const G4ParticleDefinition& p) const G4String& G4NeutronInelasticXS::FindDirectoryPath() { - // check environment variable // build the complete string identifying the file with the data set if(gDataDirectory.empty()) { - const char* path = G4FindDataDir("G4PARTICLEXSDATA"); - if (nullptr != path) { - std::ostringstream ost; - ost << path << "/neutron/inel"; - gDataDirectory = ost.str(); - } else { - G4Exception("G4NeutronInelasticXS::Initialise(..)","had013", - FatalException, - "Environment variable G4PARTICLEXSDATA is not defined"); - } + std::ostringstream ost; + ost << G4HadronicParameters::Instance()->GetDirPARTICLEXS() << "/neutron/inel"; + gDataDirectory = ost.str(); } return gDataDirectory; } diff --git a/source/processes/hadronic/cross_sections/src/G4ParticleInelasticXS.cc b/source/processes/hadronic/cross_sections/src/G4ParticleInelasticXS.cc index 966908fff3b..48e372d0a4e 100644 --- a/source/processes/hadronic/cross_sections/src/G4ParticleInelasticXS.cc +++ b/source/processes/hadronic/cross_sections/src/G4ParticleInelasticXS.cc @@ -45,6 +45,7 @@ #include "G4CrossSectionDataSetRegistry.hh" #include "G4ComponentGGHadronNucleusXsc.hh" #include "G4ComponentGGNuclNuclXsc.hh" +#include "G4HadronicParameters.hh" #include "G4Proton.hh" #include "Randomize.hh" #include "G4SystemOfUnits.hh" @@ -330,19 +331,11 @@ G4ParticleInelasticXS::BuildPhysicsTable(const G4ParticleDefinition& p) const G4String& G4ParticleInelasticXS::FindDirectoryPath() { - // check environment variable // build the complete string identifying the file with the data set if(gDataDirectory[index].empty()) { - const char* path = G4FindDataDir("G4PARTICLEXSDATA"); - if (nullptr != path) { - std::ostringstream ost; - ost << path << "/" << particle->GetParticleName() << "/inel"; - gDataDirectory[index] = ost.str(); - } else { - G4Exception("G4NeutronInelasticXS::Initialise(..)","had013", - FatalException, - "Environment variable G4PARTICLEXSDATA is not defined"); - } + std::ostringstream ost; + ost << G4HadronicParameters::Instance()->GetDirPARTICLEXS() << "/" << particle->GetParticleName() << "/inel"; + gDataDirectory[index] = ost.str(); } return gDataDirectory[index]; } diff --git a/source/processes/hadronic/management/GNUmakefile b/source/processes/hadronic/management/GNUmakefile deleted file mode 100644 index 2f8d98e41b3..00000000000 --- a/source/processes/hadronic/management/GNUmakefile +++ /dev/null @@ -1,33 +0,0 @@ -# ---------------------------------------------------------------- -# GNUmakefile for hadronic management library. G.Folger 10-Dec-97 -# ---------------------------------------------------------------- - -name := G4hadronic_mgt - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/hadronic/management/History b/source/processes/hadronic/management/History index 0c675c06140..2f204e064b9 100644 --- a/source/processes/hadronic/management/History +++ b/source/processes/hadronic/management/History @@ -6,10 +6,25 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-01-17 Vladimir Ivanchenko (hadr-man-V11-00-09) + +## 2023-03-29 Vladimir Ivanchenko (hadr-man-V11-01-03) +- G4HadronicProcess - added extra G4Exception for the case if worker cannot + share initialisation with master thread (problem #2528), diagnostic is + improved +- G4HadronicProcessStore - avoid checks of environment variables, instead call + to G4HadronicParameters + +## 2023-01-21 Vladimir Ivanchenko (hadr-man-V11-01-02) +- G4HadronicProcess - removed usage of DebugFlag and RandomFile + +## 2023-01-17 Vladimir Ivanchenko (hadr-man-V11-01-01) - G4HadronicProcess - moved several class members to be protected, which is needed for hadron elastic process (and may be other processes) +## 2023-01-09 Vladimir Ivanchenko (hadr-man-V11-01-00) +- G4HadronicProcess - substitute access to environment variables by call to + G4HadronicParameters + ## 2022-11-26 Gabriele Cosmo (hadr-man-V11-00-08) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/processes/hadronic/management/include/G4HadronicProcess.hh b/source/processes/hadronic/management/include/G4HadronicProcess.hh index 482000524f4..4c838bc95ad 100644 --- a/source/processes/hadronic/management/include/G4HadronicProcess.hh +++ b/source/processes/hadronic/management/include/G4HadronicProcess.hh @@ -210,9 +210,6 @@ private: G4double XBiasSurvivalProbability(); G4double XBiasSecondaryWeight(); - // Set E/p conservation check levels from environment variables - void GetEnergyMomentumCheckEnvvars(); - protected: G4HadProjectile thePro; @@ -224,7 +221,7 @@ protected: G4double aScaleFactor = 1.0; G4double theLastCrossSection = 0.0; G4double mfpKinEnergy = DBL_MAX; - G4long epReportLevel = 0; + G4int epReportLevel = 0; G4HadXSType fXSType = fHadNoIntegral; @@ -243,7 +240,7 @@ private: std::vector* theEnergyOfCrossSectionMax = nullptr; std::vector* fXSpeaks = nullptr; - + G4double theMFP = DBL_MAX; G4double minKinEnergy; @@ -255,7 +252,6 @@ private: // flags G4bool levelsSetByProcess = false; - G4bool G4HadronicProcess_debug_flag = false; G4bool useIntegralXS = true; G4bool isMaster = true; @@ -348,7 +344,7 @@ G4HadronicProcess::TwoPeaksXS() const inline std::vector* G4HadronicProcess::EnergyOfCrossSectionMax() const { - return theEnergyOfCrossSectionMax; + return theEnergyOfCrossSectionMax; } inline G4HadronicInteraction* G4HadronicProcess:: diff --git a/source/processes/hadronic/management/include/G4HadronicProcessStore.hh b/source/processes/hadronic/management/include/G4HadronicProcessStore.hh index 41b1de27744..64afb95832c 100644 --- a/source/processes/hadronic/management/include/G4HadronicProcessStore.hh +++ b/source/processes/hadronic/management/include/G4HadronicProcessStore.hh @@ -24,7 +24,6 @@ // ******************************************************************** // // -// // ------------------------------------------------------------------- // // GEANT4 Class header file @@ -192,7 +191,7 @@ public: G4bool GetBuildXSTable() const; - void PrintInfo(const G4ParticleDefinition*); + void PrintInfo(const G4ParticleDefinition*); void Dump(G4int level); void DumpHtml(); @@ -246,18 +245,18 @@ private: G4HadronicParameters* param; // counters and options - G4int n_proc; - G4int n_model; - G4int n_part; - G4int n_extra; + G4int n_proc = 0; + G4int n_model = 0; + G4int n_part = 0; + G4int n_extra = 0; - G4bool buildTableStart; - G4bool buildXSTable; + G4bool buildTableStart = true; + G4bool buildXSTable = false; // cache - HP currentProcess; - PD currentParticle; - PD theGenericIon; + HP currentProcess = nullptr; + PD currentParticle = nullptr; + PD theGenericIon; G4DynamicParticle localDP; @@ -265,4 +264,3 @@ private: }; #endif - diff --git a/source/processes/hadronic/management/src/G4HadronicProcess.cc b/source/processes/hadronic/management/src/G4HadronicProcess.cc index d52a388862f..bc583b7cba6 100644 --- a/source/processes/hadronic/management/src/G4HadronicProcess.cc +++ b/source/processes/hadronic/management/src/G4HadronicProcess.cc @@ -76,11 +76,11 @@ #include #include -constexpr G4double lambdaFactor = 0.8; -constexpr G4double invLambdaFactor = 1.0/lambdaFactor; - -// File-scope variable to capture environment variable at startup -static const char* G4Hadronic_Random_File = std::getenv("G4HADRONIC_RANDOM_FILE"); +namespace +{ + constexpr G4double lambdaFactor = 0.8; + constexpr G4double invLambdaFactor = 1.0/lambdaFactor; +} ////////////////////////////////////////////////////////////////// @@ -118,25 +118,16 @@ void G4HadronicProcess::InitialiseLocal() { theProcessStore = G4HadronicProcessStore::Instance(); theProcessStore->Register(this); minKinEnergy = 1*CLHEP::MeV; - epCheckLevels.first = DBL_MAX; - epCheckLevels.second = DBL_MAX; - GetEnergyMomentumCheckEnvvars(); + + G4HadronicParameters* param = G4HadronicParameters::Instance(); + epReportLevel = param->GetEPReportLevel(); + epCheckLevels.first = param->GetEPRelativeLevel(); + epCheckLevels.second = param->GetEPAbsoluteLevel(); + unitVector.set(0.0, 0.0, 0.1); if(G4Threading::IsWorkerThread()) { isMaster = false; } } -void G4HadronicProcess::GetEnergyMomentumCheckEnvvars() { - if ( std::getenv("G4Hadronic_epReportLevel") ) { - epReportLevel = std::strtol(std::getenv("G4Hadronic_epReportLevel"),0,10); - } - if ( std::getenv("G4Hadronic_epCheckRelativeLevel") ) { - epCheckLevels.first = std::strtod(std::getenv("G4Hadronic_epCheckRelativeLevel"),0); - } - if ( std::getenv("G4Hadronic_epCheckAbsoluteLevel") ) { - epCheckLevels.second = std::strtod(std::getenv("G4Hadronic_epCheckAbsoluteLevel"),0); - } -} - void G4HadronicProcess::RegisterMe( G4HadronicInteraction *a ) { if(nullptr == a) { return; } @@ -168,9 +159,6 @@ G4HadronicProcess::GetElementCrossSection(const G4DynamicParticle * dp, void G4HadronicProcess::PreparePhysicsTable(const G4ParticleDefinition& p) { - if(std::getenv("G4HadronicProcess_debug")) { - G4HadronicProcess_debug_flag = true; - } if(nullptr == firstParticle) { firstParticle = &p; } theProcessStore->RegisterParticle(this, &p); } @@ -193,8 +181,24 @@ void G4HadronicProcess::BuildPhysicsTable(const G4ParticleDefinition& p) } fXSType = fHadNoIntegral; + if(nullptr == masterProcess) { + masterProcess = dynamic_cast(GetMasterProcess()); + } + if(nullptr == masterProcess) { + if(1 < param->GetVerboseLevel()) { + G4ExceptionDescription ed; + ed << "G4HadronicProcess::BuildPhysicsTable: for " + << GetProcessName() << " for " << p.GetParticleName() + << " fail due to undefined pointer to the master process \n" + << " ThreadID= " << G4Threading::G4GetThreadId() + << " initialisation of worker started before master initialisation"; + G4Exception("G4HadronicProcess::BuildPhysicsTable", "had066", + JustWarning, ed); + } + } + // check particle for integral method - if(isMaster) { + if(isMaster || nullptr == masterProcess) { G4double charge = p.GetPDGCharge()/eplus; G4bool isLepton = (p.GetLeptonNumber() != 0); G4bool ok = (p.GetAtomicNumber() != 0 || p.GetPDGMass() < GeV); @@ -232,22 +236,10 @@ void G4HadronicProcess::BuildPhysicsTable(const G4ParticleDefinition& p) } } } else { - if(nullptr == masterProcess) { - masterProcess = - dynamic_cast(GetMasterProcess()); - } - if(nullptr == masterProcess) { - G4cout << "G4HadronicProcess::BuildPhysicsTable: for " - << GetProcessName() << " and " << p.GetParticleName() - << " fail due to undefined pointer to the master process" - << G4endl; - } else { - // initialisation in worker threads - fXSType = masterProcess->CrossSectionType(); - fXSpeaks = masterProcess->TwoPeaksXS(); - theEnergyOfCrossSectionMax = - masterProcess->EnergyOfCrossSectionMax(); - } + // initialisation in worker threads + fXSType = masterProcess->CrossSectionType(); + fXSpeaks = masterProcess->TwoPeaksXS(); + theEnergyOfCrossSectionMax = masterProcess->EnergyOfCrossSectionMax(); } if(isMaster && 1 < param->GetVerboseLevel()) { G4cout << "G4HadronicProcess::BuildPhysicsTable: for " @@ -404,10 +396,6 @@ G4HadronicProcess::PostStepDoIt(const G4Track& aTrack, const G4Step&) { try { - // Save random engine if requested for debugging - if (G4Hadronic_Random_File) { - CLHEP::HepRandom::saveEngineStatus(G4Hadronic_Random_File); - } // Call the interaction result = theInteraction->ApplyYourself( thePro, targetNucleus); ++reentryCount; @@ -559,7 +547,7 @@ G4HadronicProcess::FillResult(G4HadFinalState * aR, const G4Track & aT) if(std::abs(dmass - mass) > delta_mass_lim) { G4double e = std::max(dynParticle->GetKineticEnergy() + dmass - mass, delta_ekin); - if(G4HadronicProcess_debug_flag) { + if(verboseLevel > 1) { G4ExceptionDescription ed; ed << "TrackID= "<< aT.GetTrackID() << " " << aT.GetParticleDefinition()->GetParticleName() @@ -588,17 +576,6 @@ G4HadronicProcess::FillResult(G4HadFinalState * aR, const G4Track & aT) track->SetWeight(newWeight); track->SetTouchableHandle(aT.GetTouchableHandle()); theTotalResult->AddSecondary(track); - if (G4HadronicProcess_debug_flag) { - G4double e = dynParticle->GetKineticEnergy(); - if (e == 0.0) { - G4ExceptionDescription ed; - DumpState(aT,"Secondary has zero energy",ed); - ed << "Secondary " << part->GetParticleName() - << G4endl; - G4Exception("G4HadronicProcess::FillResults", "had011", - JustWarning,ed); - } - } } aR->Clear(); // G4cout << "FillResults done nICe= " << nICelectrons << G4endl; diff --git a/source/processes/hadronic/management/src/G4HadronicProcessStore.cc b/source/processes/hadronic/management/src/G4HadronicProcessStore.cc index ea0aea862ea..2cb2f54f2f8 100644 --- a/source/processes/hadronic/management/src/G4HadronicProcessStore.cc +++ b/source/processes/hadronic/management/src/G4HadronicProcessStore.cc @@ -102,17 +102,9 @@ void G4HadronicProcessStore::Clean() G4HadronicProcessStore::G4HadronicProcessStore() { - n_proc = 0; - n_part = 0; - n_model= 0; - n_extra= 0; - currentProcess = nullptr; - currentParticle = nullptr; theGenericIon = G4ParticleTable::GetParticleTable()->FindParticle("GenericIon"); param = G4HadronicParameters::Instance(); - buildTableStart = true; - buildXSTable = false; theEPTestMessenger = new G4HadronicEPTestMessenger(this); } @@ -566,7 +558,7 @@ void G4HadronicProcessStore::PrintInfo(const G4ParticleDefinition* part) if(buildTableStart && part == particle[n_part - 1]) { buildTableStart = false; Dump(param->GetVerboseLevel()); - if (std::getenv("G4PhysListDocDir") ) DumpHtml(); + if (!(param->GetPhysListDocDir()).empty()) DumpHtml(); G4HadronicInteractionRegistry::Instance()->InitialiseModels(); } } @@ -579,12 +571,12 @@ void G4HadronicProcessStore::DumpHtml() // List processes, models and cross sections for the most important // particles in descending order of importance - char* dirName = std::getenv("G4PhysListDocDir"); - char* physListName = std::getenv("G4PhysListName"); - if (dirName && physListName) { + const G4String& dir = param->GetPhysListDocDir(); + const G4String& pl = param->GetPhysListName(); + if (!dir.empty() && !pl.empty()) { // Open output file with path name - G4String pathName = G4String(dirName) + "/" + G4String(physListName) + ".html"; + G4String pathName = dir + "/" + pl + ".html"; std::ofstream outFile; outFile.open(pathName); @@ -594,8 +586,8 @@ void G4HadronicProcessStore::DumpHtml() outFile << "Physics List Summary\n"; outFile << "\n"; outFile << "\n"; - outFile << "

    Summary of Hadronic Processes, Models and Cross Sections for Physics List " - << G4String(physListName) << "

    \n"; + outFile << "

    Summary of Hadronic Processes, Models and Cross Sections" + << " for Physics List " << pl << "

    \n"; outFile << "
      \n"; PrintHtml(G4Proton::Proton(), outFile); @@ -604,7 +596,7 @@ void G4HadronicProcessStore::DumpHtml() PrintHtml(G4PionMinus::PionMinus(), outFile); PrintHtml(G4Gamma::Gamma(), outFile); PrintHtml(G4Electron::Electron(), outFile); -// PrintHtml(G4MuonMinus::MuonMinus(), outFile); + // PrintHtml(G4MuonMinus::MuonMinus(), outFile); PrintHtml(G4Positron::Positron(), outFile); PrintHtml(G4KaonPlus::KaonPlus(), outFile); PrintHtml(G4KaonMinus::KaonMinus(), outFile); @@ -637,30 +629,26 @@ void G4HadronicProcessStore::PrintHtml(const G4ParticleDefinition* theParticle, std::pair itpart = p_map.equal_range(theParticle); - // Loop over processes assigned to particle + const G4String& pl = param->GetPhysListName(); + // Loop over processes assigned to particle G4HadronicProcess* theProcess; for (PDHPmap::iterator it = itpart.first; it != itpart.second; ++it) { theProcess = (*it).second; - // description is inline - //outFile << "
         process : GetProcessName() << ".html\"> " - // << theProcess->GetProcessName() << "\n"; outFile << "
         process : " << theProcess->GetProcessName() << "\n"; outFile << "
        \n"; outFile << "
      • "; - theProcess->ProcessDescription(outFile); - outFile << "
      • models : \n"; + theProcess->ProcessDescription(outFile); + outFile << "
      • models : \n"; // Loop over models assigned to process std::pair itmod = m_map.equal_range(theProcess); outFile << "
          \n"; - G4String physListName(std::getenv("G4PhysListName")); for (HPHImap::iterator jt = itmod.first; jt != itmod.second; ++jt) { - outFile << "
        • GetModelName()) << "\"> " << (*jt).second->GetModelName() << "" << " from " << (*jt).second->GetMinEnergy()/GeV @@ -687,7 +675,6 @@ void G4HadronicProcessStore::PrintHtml(const G4ParticleDefinition* theParticle, } // Loop over extra (G4VProcess) processes - std::multimap >::iterator itp; for (itp=ep_map.lower_bound(theParticle); itp!=ep_map.upper_bound(theParticle); ++itp) { if (itp->first == theParticle) { @@ -709,38 +696,36 @@ void G4HadronicProcessStore::PrintHtml(const G4ParticleDefinition* theParticle, void G4HadronicProcessStore::PrintModelHtml(const G4HadronicInteraction * mod) const { - G4String dirName(std::getenv("G4PhysListDocDir")); - G4String physListName(std::getenv("G4PhysListName")); - G4String pathName = dirName + "/" + physListName + "_" + HtmlFileName(mod->GetModelName()); - std::ofstream outModel; - outModel.open(pathName); - outModel << "\n"; - outModel << "\n"; - outModel << "Description of " << mod->GetModelName() - << "\n"; - outModel << "\n"; - outModel << "\n"; - - mod->ModelDescription(outModel); + const G4String& dir = param->GetPhysListDocDir(); + const G4String& pl = param->GetPhysListName(); + G4String pathName = dir + "/" + pl + "_" + HtmlFileName(mod->GetModelName()); + std::ofstream outModel; + outModel.open(pathName); + outModel << "\n"; + outModel << "\n"; + outModel << "Description of " << mod->GetModelName() + << "\n"; + outModel << "\n"; + outModel << "\n"; - outModel << "\n"; - outModel << "\n"; + mod->ModelDescription(outModel); + outModel << "\n"; + outModel << "\n"; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... -//private + G4String G4HadronicProcessStore::HtmlFileName(const G4String & in) const { - G4String str(in); + G4String str(in); - // replace blanks: - std::transform(str.begin(), str.end(), str.begin(), [](char ch) - { - return ch == ' ' ? '_' : ch; - }); - str=str + ".html"; - return str; + // replace blanks: + std::transform(str.begin(), str.end(), str.begin(), [](char ch) { + return ch == ' ' ? '_' : ch; + }); + str=str + ".html"; + return str; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo..... @@ -965,8 +950,8 @@ void G4HadronicProcessStore::SetEpReportLevel(G4int level) { G4cout << " Setting energy/momentum report level to " << level << " for " << process.size() << " hadronic processes " << G4endl; - for (G4int i = 0; i < G4int(process.size()); ++i) { - process[i]->SetEpReportLevel(level); + for (auto& theProcess : process) { + theProcess->SetEpReportLevel(level); } } @@ -976,11 +961,8 @@ void G4HadronicProcessStore::SetProcessAbsLevel(G4double abslevel) { G4cout << " Setting absolute energy/momentum test level to " << abslevel << G4endl; - G4double rellevel = 0.0; - G4HadronicProcess* theProcess = 0; - for (G4int i = 0; i < G4int(process.size()); ++i) { - theProcess = process[i]; - rellevel = theProcess->GetEnergyMomentumCheckLevels().first; + for (auto& theProcess : process) { + G4double rellevel = theProcess->GetEnergyMomentumCheckLevels().first; theProcess->SetEnergyMomentumCheckLevels(rellevel, abslevel); } } @@ -991,11 +973,8 @@ void G4HadronicProcessStore::SetProcessRelLevel(G4double rellevel) { G4cout << " Setting relative energy/momentum test level to " << rellevel << G4endl; - G4double abslevel = 0.0; - G4HadronicProcess* theProcess = 0; - for (G4int i = 0; i < G4int(process.size()); ++i) { - theProcess = process[i]; - abslevel = theProcess->GetEnergyMomentumCheckLevels().second; + for (auto& theProcess : process) { + G4double abslevel = theProcess->GetEnergyMomentumCheckLevels().second; theProcess->SetEnergyMomentumCheckLevels(rellevel, abslevel); } } diff --git a/source/processes/hadronic/models/GNUmakefile b/source/processes/hadronic/models/GNUmakefile deleted file mode 100644 index fbcd2b107c4..00000000000 --- a/source/processes/hadronic/models/GNUmakefile +++ /dev/null @@ -1,81 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for hadronic models library. G.Folger 10-Dec-97 -# -------------------------------------------------------------- - -name := G4hadronic_models - -SUBDIRS = abla -SUBDIRS += abrasion -SUBDIRS += binary_cascade -SUBDIRS += cascade/cascade -SUBDIRS += coherent_elastic -SUBDIRS += de_excitation/evaporation -SUBDIRS += de_excitation/fermi_breakup -SUBDIRS += de_excitation/fission -SUBDIRS += de_excitation/gem_evaporation -SUBDIRS += de_excitation/handler -SUBDIRS += de_excitation/management -SUBDIRS += de_excitation/multifragmentation -SUBDIRS += de_excitation/photon_evaporation -SUBDIRS += de_excitation/util -SUBDIRS += de_excitation/ablation -SUBDIRS += em_dissociation -SUBDIRS += fission -SUBDIRS += gamma_nuclear -SUBDIRS += im_r_matrix -SUBDIRS += inclxx/utils -SUBDIRS += inclxx/incl_physics -SUBDIRS += inclxx/interface -SUBDIRS += lend -SUBDIRS += lepto_nuclear -SUBDIRS += particle_hp -SUBDIRS += parton_string/diffraction -SUBDIRS += parton_string/hadronization -SUBDIRS += parton_string/management -SUBDIRS += parton_string/qgsm -SUBDIRS += pre_equilibrium/exciton_model -SUBDIRS += qmd -SUBDIRS += quasi_elastic -SUBDIRS += radioactive_decay -SUBDIRS += theo_high_energy - -SUBLIBS = G4hadronic_abla_abla -SUBLIBS += G4hadronic_abrasion -SUBLIBS += G4hadronic_binary -SUBLIBS += G4hadronic_coherent_elastic -SUBLIBS += G4had_fission -SUBLIBS += G4had_gamm_nuclear -SUBLIBS += G4had_im_r_matrix -SUBLIBS += G4hadronic_qmd -SUBLIBS += G4had_part_hp -SUBLIBS += G4had_lend -SUBLIBS += G4hadronic_radioactivedecay -SUBLIBS += G4had_theo_max -SUBLIBS += G4hadronic_bert_cascade -SUBLIBS += G4hadronic_inclxx_utils -SUBLIBS += G4hadronic_inclxx_physics -SUBLIBS += G4hadronic_inclxx_interface -SUBLIBS += G4hadronic_deex_evaporation -SUBLIBS += G4hadronic_deex_fermi_breakup -SUBLIBS += G4hadronic_deex_fission -SUBLIBS += G4hadronic_deex_gem_evaporation -SUBLIBS += G4hadronic_deex_handler -SUBLIBS += G4hadronic_deex_management -SUBLIBS += G4hadronic_deex_multifragmentation -SUBLIBS += G4hadronic_deex_photon_evaporation -SUBLIBS += G4hadronic_deex_util -SUBLIBS += G4hadronic_ablation -SUBLIBS += G4hadronic_em_dissociation -SUBLIBS += G4had_preequ_exciton -SUBLIBS += G4had_lept_nuclear -SUBLIBS += G4had_string_diff -SUBLIBS += G4had_string_frag -SUBLIBS += G4had_string_man -SUBLIBS += G4hadronic_qgstring -SUBLIBS += G4hadronic_quasi_elastic - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/globlib.gmk diff --git a/source/processes/hadronic/models/abla/GNUmakefile b/source/processes/hadronic/models/abla/GNUmakefile deleted file mode 100644 index 23f26f86551..00000000000 --- a/source/processes/hadronic/models/abla/GNUmakefile +++ /dev/null @@ -1,35 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4hadronic_abla_abla - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/intercoms/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/hadronic/models/abla/History b/source/processes/hadronic/models/abla/History index 2af744156fe..a3b70cd996b 100644 --- a/source/processes/hadronic/models/abla/History +++ b/source/processes/hadronic/models/abla/History @@ -6,6 +6,11 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-03-24 Alberto Ribon (hadr-abla-V11-01-00) +- G4AblaInterface : implemented method ApplyYourself to allow the coupling + between Binary Cascade (BIC) and Abla, i.e. using BIC for the cascade and + then Abla for the nuclear de-excitation. + ## 2022-11-26 Gabriele Cosmo (hadr-abla-V11-00-05) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/processes/hadronic/models/abla/include/G4AblaInterface.hh b/source/processes/hadronic/models/abla/include/G4AblaInterface.hh index 42958ed61d6..4a845ef6604 100644 --- a/source/processes/hadronic/models/abla/include/G4AblaInterface.hh +++ b/source/processes/hadronic/models/abla/include/G4AblaInterface.hh @@ -45,6 +45,7 @@ #include "G4Abla.hh" class G4ExcitationHandler; +class G4HadFinalState; class G4AblaInterface : public G4VPreCompoundModel { @@ -54,10 +55,7 @@ class G4AblaInterface : public G4VPreCompoundModel virtual G4ReactionProductVector* DeExcite(G4Fragment& aFragment); - virtual G4HadFinalState* ApplyYourself(G4HadProjectile const&, G4Nucleus&) - { -return nullptr; - } + virtual G4HadFinalState* ApplyYourself(G4HadProjectile const&, G4Nucleus&) final; virtual void BuildPhysicsTable(const G4ParticleDefinition&) final; @@ -68,6 +66,7 @@ return nullptr; virtual void DeExciteModelDescription(std::ostream& outFile) const; private: + G4HadFinalState applyYourselfResult; G4VarNtp* ablaResult; G4Volant* volant; G4Abla* theABLAModel; diff --git a/source/processes/hadronic/models/abla/src/G4AblaInterface.cc b/source/processes/hadronic/models/abla/src/G4AblaInterface.cc index c4fdc8f7fe3..9f70eb60660 100644 --- a/source/processes/hadronic/models/abla/src/G4AblaInterface.cc +++ b/source/processes/hadronic/models/abla/src/G4AblaInterface.cc @@ -70,6 +70,7 @@ G4AblaInterface::G4AblaInterface(G4ExcitationHandler* ptr) : G4AblaInterface::~G4AblaInterface() { + applyYourselfResult.Clear(); delete volant; delete ablaResult; delete theABLAModel; @@ -90,6 +91,61 @@ void G4AblaInterface::InitialiseModel() GetExcitationHandler()->Initialise(); } + +G4HadFinalState* G4AblaInterface::ApplyYourself(const G4HadProjectile & thePrimary, + G4Nucleus & theNucleus) +{ + // This method is adapted from G4PreCompoundModel::ApplyYourself, + // and it is used only by Binary Cascade (BIC) when the latter is coupled with Abla + // for nuclear de-excitation. + // This method allows BIC+ABLA to be used also for proton and neutron projectile + // with kinetic energies below 45 MeV, by creating a "compound" nucleus made + // by the system "target nucleus + projectile", before calling the DeExcite + // method. + const G4ParticleDefinition* primary = thePrimary.GetDefinition(); + if ( primary != G4Neutron::Definition() && primary != G4Proton::Definition() ) { + G4ExceptionDescription ed; + ed << "G4AblaModel is used for "; + if ( primary ) ed << primary->GetParticleName(); + G4Exception( "G4AblaInterface::ApplyYourself()", "had040", FatalException, ed, "" ); + return nullptr; + } + + G4int Zp = 0; + G4int Ap = 1; + if ( primary == G4Proton::Definition() ) Zp = 1; + G4double timePrimary = thePrimary.GetGlobalTime(); + G4int A = theNucleus.GetA_asInt(); + G4int Z = theNucleus.GetZ_asInt(); + G4LorentzVector p = thePrimary.Get4Momentum(); + G4double mass = G4NucleiProperties::GetNuclearMass(A, Z); + p += G4LorentzVector( 0.0, 0.0, 0.0, mass ); + + G4Fragment anInitialState(A + Ap, Z + Zp, p); + anInitialState.SetNumberOfExcitedParticle(1, Zp); + anInitialState.SetNumberOfHoles(1, Zp); + anInitialState.SetCreationTime( thePrimary.GetGlobalTime() ); + anInitialState.SetCreatorModelID( secID ); + + G4ReactionProductVector* deExciteResult = DeExcite( anInitialState ); + + applyYourselfResult.Clear(); + applyYourselfResult.SetStatusChange( stopAndKill ); + for ( auto const & prod : *deExciteResult ) { + G4DynamicParticle * aNewDP = + new G4DynamicParticle( prod->GetDefinition(), prod->GetTotalEnergy(), prod->GetMomentum() ); + G4HadSecondary aNew = G4HadSecondary( aNewDP ); + G4double time = std::max( prod->GetFormationTime(), 0.0 ); + aNew.SetTime( timePrimary + time ); + aNew.SetCreatorModelID( prod->GetCreatorModelID() ); + delete prod; + applyYourselfResult.AddSecondary( aNew ); + } + delete deExciteResult; + return &applyYourselfResult; +} + + G4ReactionProductVector *G4AblaInterface::DeExcite(G4Fragment& aFragment) { if (!isInitialised) InitialiseModel(); diff --git a/source/processes/hadronic/models/abrasion/GNUmakefile b/source/processes/hadronic/models/abrasion/GNUmakefile deleted file mode 100644 index b691af58df3..00000000000 --- a/source/processes/hadronic/models/abrasion/GNUmakefile +++ /dev/null @@ -1,47 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4hadronic_abrasion - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \ - -I$(G4BASE)/processes/hadronic/models/ablation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/ablation/include \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/models/binary_cascade/GNUmakefile b/source/processes/hadronic/models/binary_cascade/GNUmakefile deleted file mode 100644 index 69454d22972..00000000000 --- a/source/processes/hadronic/models/binary_cascade/GNUmakefile +++ /dev/null @@ -1,45 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4hadronic_binary - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/models/binary_cascade/History b/source/processes/hadronic/models/binary_cascade/History index c163ae27ad0..aa8d8104fbd 100644 --- a/source/processes/hadronic/models/binary_cascade/History +++ b/source/processes/hadronic/models/binary_cascade/History @@ -6,6 +6,11 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- + +## 2023-04-28 Vladimir Ivantchenko (had-binary-V11-01-00) +- G4BinaryCascade, G4BinaryLightIonReaction - do not call getenv, use + G4HadronicParameters + ## 2022-11-26 Gabriele Cosmo (had-binary-V11-00-04) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/processes/hadronic/models/binary_cascade/include/G4BinaryCascade.hh b/source/processes/hadronic/models/binary_cascade/include/G4BinaryCascade.hh index 865ffd39c85..93a5139a2db 100644 --- a/source/processes/hadronic/models/binary_cascade/include/G4BinaryCascade.hh +++ b/source/processes/hadronic/models/binary_cascade/include/G4BinaryCascade.hh @@ -217,6 +217,7 @@ private: const G4ParticleDefinition * thePrimaryType; G4ThreeVector theMomentumTransfer; static G4int theBIC_ID; + G4bool fBCDEBUG; }; #endif diff --git a/source/processes/hadronic/models/binary_cascade/src/G4BinaryCascade.cc b/source/processes/hadronic/models/binary_cascade/src/G4BinaryCascade.cc index b2769105b12..346574b6d10 100644 --- a/source/processes/hadronic/models/binary_cascade/src/G4BinaryCascade.cc +++ b/source/processes/hadronic/models/binary_cascade/src/G4BinaryCascade.cc @@ -61,6 +61,7 @@ #include "G4FermiPhaseSpaceDecay.hh" #include "G4PreCompoundModel.hh" +#include "G4HadronicParameters.hh" #include #include "G4ShortLivedConstructor.hh" @@ -165,6 +166,7 @@ G4VIntraNuclearTransportModel("Binary Cascade", ptr) massInNucleus=0.; theOuterRadius=0.; theBIC_ID = G4PhysicsModelCatalog::GetModelID("model_G4BinaryCascade"); + fBCDEBUG = G4HadronicParameters::Instance()->GetBinaryDebug(); } G4BinaryCascade::~G4BinaryCascade() @@ -252,7 +254,7 @@ G4HadFinalState * G4BinaryCascade::ApplyYourself(const G4HadProjectile & aTrack, G4Nucleus & aNucleus) //---------------------------------------------------------------------------- { - if(std::getenv("BCDEBUG") ) G4cerr << " ######### Binary Cascade Reaction starts ######### "<< G4endl; + if(fBCDEBUG) G4cerr << " ######### Binary Cascade Reaction starts ######### "<< G4endl; G4LorentzVector initial4Momentum = aTrack.Get4Momentum(); const G4ParticleDefinition * definition = aTrack.GetDefinition(); @@ -271,7 +273,7 @@ G4HadFinalState * G4BinaryCascade::ApplyYourself(const G4HadProjectile & aTrack, G4KineticTrackVector * secondaries;// = new G4KineticTrackVector; G4ThreeVector initialPosition(0., 0., 0.); // will be set later - if(!std::getenv("I_Am_G4BinaryCascade_Developer") ) + if(!fBCDEBUG) { if(definition!=G4Neutron::NeutronDefinition() && definition!=G4Proton::ProtonDefinition() && @@ -363,7 +365,7 @@ G4HadFinalState * G4BinaryCascade::ApplyYourself(const G4HadProjectile & aTrack, } else { // no interaction, return primary - if(std::getenv("BCDEBUG") ) G4cerr << " ######### Binary Cascade Reaction void, return initial state ######### "<< G4endl; + if(fBCDEBUG) G4cerr << " ######### Binary Cascade Reaction void, return initial state ######### "<< G4endl; theParticleChange.SetStatusChange(isAlive); theParticleChange.SetEnergyChange(aTrack.GetKineticEnergy()); theParticleChange.SetMomentumChange(aTrack.Get4Momentum().vect().unit()); @@ -376,9 +378,9 @@ G4HadFinalState * G4BinaryCascade::ApplyYourself(const G4HadProjectile & aTrack, } delete the3DNucleus; - the3DNucleus = NULL; + the3DNucleus = nullptr; - if(std::getenv("BCDEBUG") ) G4cerr << " ######### Binary Cascade Reaction ends ######### "<< G4endl; + if(fBCDEBUG) G4cerr << " ######### Binary Cascade Reaction ends ######### "<< G4endl; return &theParticleChange; } @@ -795,7 +797,7 @@ void G4BinaryCascade::BuildTargetList() theInitial4Mom = G4LorentzVector(0,0,0,initial_nuclear_mass); currentA=0; currentZ=0; - while((nucleon = the3DNucleus->GetNextNucleon()) != NULL) /* Loop checking, 31.08.2015, G.Folger */ + while((nucleon = the3DNucleus->GetNextNucleon()) != nullptr) /* Loop checking, 31.08.2015, G.Folger */ { // check if nucleon is hit by higher energy model. if ( ! nucleon->AreYouHit() ) @@ -1591,7 +1593,7 @@ G4bool G4BinaryCascade::Capture(G4bool verbose) } } } - UpdateTracksAndCollisions(&captured, NULL, NULL); + UpdateTracksAndCollisions(&captured, nullptr, nullptr); } return capture; @@ -2238,7 +2240,7 @@ G4bool G4BinaryCascade::DoTimeStep(G4double theTimeStep) (*i_captured)->Hit(); } // PrintKTVector(kt_captured," kt_captured be4 updatetrack..."); - UpdateTracksAndCollisions(kt_captured, NULL, NULL); + UpdateTracksAndCollisions(kt_captured, nullptr, nullptr); } #ifdef debug_G4BinaryCascade @@ -2536,7 +2538,7 @@ G4Fragment * G4BinaryCascade::FindFragments() * << G4endl; */ // - // if(getenv("BCDEBUG") ) G4cerr << "Fragment A, Z "<< a <<" "<< z<GetMassNumber() - theTargetList.size()); diff --git a/source/processes/hadronic/models/binary_cascade/src/G4BinaryLightIonReaction.cc b/source/processes/hadronic/models/binary_cascade/src/G4BinaryLightIonReaction.cc index 893994554b0..0695f5f8924 100644 --- a/source/processes/hadronic/models/binary_cascade/src/G4BinaryLightIonReaction.cc +++ b/source/processes/hadronic/models/binary_cascade/src/G4BinaryLightIonReaction.cc @@ -44,6 +44,7 @@ #include "G4HadronicInteractionRegistry.hh" #include "G4Log.hh" #include "G4PhysicsModelCatalog.hh" +#include "G4HadronicParameters.hh" G4int G4BinaryLightIonReaction::theBLIR_ID = -1; @@ -67,7 +68,7 @@ G4BinaryLightIonReaction::G4BinaryLightIonReaction(G4VPreCompoundModel* ptr) theModel = new G4BinaryCascade(theProjectileFragmentation); theHandler = theProjectileFragmentation->GetExcitationHandler(); theBLIR_ID = G4PhysicsModelCatalog::GetModelID("model_G4BinaryLightIonReaction"); - debug_G4BinaryLightIonReactionResults=std::getenv("debug_G4BinaryLightIonReactionResults")!=0; + debug_G4BinaryLightIonReactionResults = G4HadronicParameters::Instance()->GetBinaryDebug(); } G4BinaryLightIonReaction::~G4BinaryLightIonReaction() @@ -91,7 +92,7 @@ struct ReactionProduct4Mom G4HadFinalState *G4BinaryLightIonReaction:: ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus & targetNucleus ) { - if(std::getenv("BLICDEBUG") ) G4cerr << " ######### Binary Light Ion Reaction starts ######### " << G4endl; + if(debug_G4BinaryLightIonReactionResults) G4cerr << " ######### Binary Light Ion Reaction starts ######### " << G4endl; G4ping debug("debug_G4BinaryLightIonReaction"); pA=aTrack.GetDefinition()->GetBaryonNumber(); pZ=G4lrint(aTrack.GetDefinition()->GetPDGCharge()/eplus); @@ -344,7 +345,7 @@ ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus & targetNucleus ) << " 3mom.mag() " << (aTrack.Get4Momentum()+ G4LorentzVector(m_nucl) - ptot).vect().mag() << G4endl; #endif - if(std::getenv("BLICDEBUG") ) G4cerr << " ######### Binary Light Ion Reaction number ends ######### " << G4endl; + if(debug_G4BinaryLightIonReactionResults) G4cerr << " ######### Binary Light Ion Reaction number ends ######### " << G4endl; return &theResult; } diff --git a/source/processes/hadronic/models/cascade/GNUmakefile b/source/processes/hadronic/models/cascade/GNUmakefile deleted file mode 100644 index 2dadf20459c..00000000000 --- a/source/processes/hadronic/models/cascade/GNUmakefile +++ /dev/null @@ -1,17 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for Bertini cascade library. -# -# 20130225 Remove evaporation and utils subdirectories -# -------------------------------------------------------------- - -name := G4had_hetcpp - -SUBDIRS = cascade - -SUBLIBS = G4hadronic_bert_cascade - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - -include $(G4INSTALL)/config/globlib.gmk diff --git a/source/processes/hadronic/models/cascade/History b/source/processes/hadronic/models/cascade/History index 2d35d0d75a0..399e048c5b3 100644 --- a/source/processes/hadronic/models/cascade/History +++ b/source/processes/hadronic/models/cascade/History @@ -6,16 +6,39 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-04-17 Alberto Ribon (hadr-casc-V11-00-06) +## 2023-04-17 Alberto Ribon (hadr-casc-V11-01-02) - G4BigBanger : added protection in the method G4BigBanger::generateBangInSCM to avoid very rare cases of unphysical negative energy of one of the secondaries produced by the Bertini model. (Note: this problem was never reproduced in our tests, but was reported by ATLAS with Geant4 10.6; the secondaries with negative - both total - and kinetic - energy were always neutrons, produced by the internal - Bertini nuclear de-excitation, after the intra-nuclear cascade. - Many thanks to Mihaly Novak for providing detailed debugging - information!) + and kinetic - energy were always neutrons, produced by the internal + Bertini nuclear de-excitation, after the intra-nuclear cascade. + Many thanks to Mihaly Novak for providing detailed debugging + information!) + +## 2023-04-05 Dennis Wright (hadr-casc-V11-01-01) +- Fix coverity bug 60840: incorrect integer divide in fission part of + G4EquilibriumEvaporator::deExcite. Changed RHS to G4double. + +## 2023-03-14 Alberto Ribon (hadr-casc-V11-01-00) +Extended Bertini model to allow the use of Abla as alternative post-cascade +nuclear de-excitation (the default de-excitation remains unchanged). +There are two ways to set Abla as de-excitation for Bertini: +via C++ interface, by calling G4CascadeInterface::useAblaDeexcitation(); +via environmental variable, by setting G4CASCADE_USE_ABLA=1. +- G4AblaDeexcitation : new class that does the nuclear de-excitation, + after the Bertini cascade, by using the Abla model, and then tranform + the secondaries in Bertini objects. +- G4CascadeInterface : added the new method useAblaDeexcitation() which sets + Abla as nuclear de-excitation; this method can be called directly by the + user, or automatically in the constructor of the class when the flag + G4CascadeParameters::useAbla() is enabled. +- G4InuclCollider : added new method useAblaDeexcitation() which creates + an instance of the new class G4AblaDeexcitation. +- G4CascadeParameters : added a boolean flag that enables the Abla + de-dexcitation model in the case that the new environmental variable + G4CASCADE_USE_ABLA is set. ## 2022-11-26 Gabriele Cosmo (hadr-casc-V11-00-05) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/processes/hadronic/models/cascade/cascade/GNUmakefile b/source/processes/hadronic/models/cascade/cascade/GNUmakefile deleted file mode 100644 index 9a6db64c057..00000000000 --- a/source/processes/hadronic/models/cascade/cascade/GNUmakefile +++ /dev/null @@ -1,82 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# -# Map user environment/GMake variables onto preprocessor debugging flags -# -# 20100922 J. Yarba -- Add include directories for pre-compound model -# 20110919 M. Kelsey -- Add flag for final-state clustering -# 20130621 M. Kelsey -- Move CHECK_ECONS flag to runtime parameters -# ----------------------------------------------------------- - -name := G4hadronic_bert_cascade - -ifdef G4CASCADE_COULOMB_DEV - CPPFLAGS += -DG4CASCADE_COULOMB_DEV=1 -endif - -ifdef G4CASCADE_DEBUG_CHARGE - CPPFLAGS += -DG4CASCADE_DEBUG_CHARGE=1 -endif - -ifdef G4CASCADE_DEBUG_INTERFACE - CPPFLAGS += -DG4CASCADE_DEBUG_INTERFACE=1 -endif - -ifdef G4CASCADE_DEBUG_SAMPLER - CPPFLAGS += -DG4CASCADE_DEBUG_SAMPLER=1 -endif - -ifdef G4CASCADE_DEBUG_SORT - CPPFLAGS += -DG4CASCADE_DEBUG_SORT=1 -endif - -ifdef G4CASCADE_WATCHER_HIGHZ - CPPFLAGS += -DG4CASCADE_WATCHER_HIGHZ=1 -endif - -ifdef G4CASCADE_SKIP_ECONS - CPPFLAGS += -DG4CASCADE_SKIP_ECONS=1 -endif - -ifdef G4CASCADE_DO_COALESCENCE - CPPFLAGS += -DG4CASCADE_DO_COALESCENCE=1 -endif - -ifndef G4INSTALL - G4INSTALL = ../../../../../.. -endif -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include/ \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include/ \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include/ \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include/ \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include/ \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include/ \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include/ \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include/ \ - -I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/digits_hits/detector/include/G4SensitiveVolumeList.icc b/source/processes/hadronic/models/cascade/cascade/include/G4AblaDeexcitation.hh similarity index 62% rename from source/digits_hits/detector/include/G4SensitiveVolumeList.icc rename to source/processes/hadronic/models/cascade/cascade/include/G4AblaDeexcitation.hh index 3bfd7c51e53..441a01bc86a 100644 --- a/source/digits_hits/detector/include/G4SensitiveVolumeList.icc +++ b/source/processes/hadronic/models/cascade/cascade/include/G4AblaDeexcitation.hh @@ -23,39 +23,35 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +//--------------------------------------------------------------------------- +// Author: Alberto Ribon +// Date: March 2023 // +// Class that does the nuclear de-excitation, after the Bertini cascade, +// by using the Abla model, and then transform the secondaries in Bertini +// objects. +//---------------------------------------------------------------------------- // -// ----------------------------------------------------------- -// Inline functions of GEANT 4 class header file. -// --- Copyright CERN 1996, CERN Geneva Switzerland --- -// -// History: first implementation, based on Hits+Digi domain -// object model of April 1996, S.Piperov -// -// ---------------- G4SensitiveVolumeList ----------------- +#ifndef G4ABLA_DEEXCITATION_HH +#define G4ABLA_DEEXCITATION_HH + -// Get and Set Operations for Has Relationships +#include "G4CascadeDeexciteBase.hh" +#include "globals.hh" -inline const std::vector& -G4SensitiveVolumeList::get_the_G4VPhysicalVolume_list() const -{ - return the_G4VPhysicalVolume_list; -} +class G4VPreCompoundModel; -inline void G4SensitiveVolumeList::set_the_G4VPhysicalVolume_list( - const std::vector value) -{ - the_G4VPhysicalVolume_list = value; -} -inline const std::vector& -G4SensitiveVolumeList::get_the_G4LogicalVolume() const -{ - return the_G4LogicalVolume_list; -} +class G4AblaDeexcitation : public G4CascadeDeexciteBase { + public: + G4AblaDeexcitation(); + ~G4AblaDeexcitation() override; + void setVerboseLevel( G4int verbose ) override; + void deExcite( const G4Fragment& fragment, G4CollisionOutput& globalOutput ) override; + G4AblaDeexcitation( const G4AblaDeexcitation& ) = delete; + G4AblaDeexcitation& operator=( const G4AblaDeexcitation& ) = delete; + private: + G4VPreCompoundModel* theDeExcitation; +}; -inline void G4SensitiveVolumeList::set_the_G4LogicalVolume( - const std::vector value) -{ - the_G4LogicalVolume_list = value; -} +#endif /* G4ABLA_DEEXCITATION_HH */ diff --git a/source/processes/hadronic/models/cascade/cascade/include/G4CascadeInterface.hh b/source/processes/hadronic/models/cascade/cascade/include/G4CascadeInterface.hh index ae3cb618332..c493ddf0538 100644 --- a/source/processes/hadronic/models/cascade/cascade/include/G4CascadeInterface.hh +++ b/source/processes/hadronic/models/cascade/cascade/include/G4CascadeInterface.hh @@ -111,6 +111,7 @@ public: // Select betweeen different post-cascade de-excitation models void useCascadeDeexcitation(); void usePreCompoundDeexcitation(); + void useAblaDeexcitation(); virtual void ModelDescription(std::ostream& outFile) const; virtual void DumpConfiguration(std::ostream& outFile) const; diff --git a/source/processes/hadronic/models/cascade/cascade/include/G4CascadeParameters.hh b/source/processes/hadronic/models/cascade/cascade/include/G4CascadeParameters.hh index 19c9e899bdf..6d077b68161 100644 --- a/source/processes/hadronic/models/cascade/cascade/include/G4CascadeParameters.hh +++ b/source/processes/hadronic/models/cascade/cascade/include/G4CascadeParameters.hh @@ -52,6 +52,7 @@ public: static G4int verbose() { return Instance()->VERBOSE_LEVEL; } static G4bool checkConservation() { return Instance()->CHECK_ECONS; } static G4bool usePreCompound() { return Instance()->USE_PRECOMPOUND; } + static G4bool useAbla() { return Instance()->USE_ABLA; } static G4bool doCoalescence() { return Instance()->DO_COALESCENCE; } static G4bool showHistory() { return Instance()->SHOW_HISTORY; } static G4bool use3BodyMom() { return Instance()->USE_3BODYMOM; } @@ -80,6 +81,7 @@ private: // Environment variable values, null pointers mean not set const char* G4CASCADE_VERBOSE; const char* G4CASCADE_CHECK_ECONS; const char* G4CASCADE_USE_PRECOMPOUND; + const char* G4CASCADE_USE_ABLA; const char* G4CASCADE_DO_COALESCENCE; const char* G4CASCADE_SHOW_HISTORY; const char* G4CASCADE_USE_3BODYMOM; @@ -104,6 +106,7 @@ private: // Environment variable values, null pointers mean not set G4int VERBOSE_LEVEL; // Top-level configuration flags G4bool CHECK_ECONS; G4bool USE_PRECOMPOUND; + G4bool USE_ABLA; G4bool DO_COALESCENCE; G4bool SHOW_HISTORY; G4bool USE_3BODYMOM; diff --git a/source/processes/hadronic/models/cascade/cascade/include/G4InuclCollider.hh b/source/processes/hadronic/models/cascade/cascade/include/G4InuclCollider.hh index 8e48ba42782..1c617e01a46 100644 --- a/source/processes/hadronic/models/cascade/cascade/include/G4InuclCollider.hh +++ b/source/processes/hadronic/models/cascade/cascade/include/G4InuclCollider.hh @@ -74,6 +74,7 @@ public: // Select betweeen different post-cascade de-excitation models void useCascadeDeexcitation(); void usePreCompoundDeexcitation(); + void useAblaDeexcitation(); protected: void deexcite(const G4Fragment& fragment, G4CollisionOutput& globalOutput); diff --git a/source/processes/hadronic/models/cascade/cascade/sources.cmake b/source/processes/hadronic/models/cascade/cascade/sources.cmake index bcfb6572cae..a16af74b837 100644 --- a/source/processes/hadronic/models/cascade/cascade/sources.cmake +++ b/source/processes/hadronic/models/cascade/cascade/sources.cmake @@ -26,6 +26,7 @@ # Define the Geant4 Module. geant4_add_module(G4hadronic_bert_cascade PUBLIC_HEADERS + G4AblaDeexcitation.hh G4Analyser.hh G4BigBanger.hh G4CascadParticle.hh @@ -153,6 +154,7 @@ geant4_add_module(G4hadronic_bert_cascade G4VTwoBodyAngDst.hh G4WatcherGun.hh SOURCES + G4AblaDeexcitation.cc G4Analyser.cc G4BigBanger.cc G4CascadParticle.cc @@ -280,6 +282,7 @@ geant4_module_link_libraries(G4hadronic_bert_cascade G4baryons G4bosons G4had_preequ_exciton + G4hadronic_abla G4ions G4leptons G4mesons diff --git a/source/processes/hadronic/models/cascade/cascade/src/G4AblaDeexcitation.cc b/source/processes/hadronic/models/cascade/cascade/src/G4AblaDeexcitation.cc new file mode 100644 index 00000000000..181ea2ec792 --- /dev/null +++ b/source/processes/hadronic/models/cascade/cascade/src/G4AblaDeexcitation.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. * +// ******************************************************************** +// + +#include "G4AblaDeexcitation.hh" +#include "G4VPreCompoundModel.hh" +#include "G4HadronicInteraction.hh" +#include "G4HadronicInteractionRegistry.hh" +#include "G4AblaInterface.hh" +#include "G4ReactionProductVector.hh" + + +G4AblaDeexcitation::G4AblaDeexcitation() + : G4CascadeDeexciteBase( "G4AblaDeexcitation" ), theDeExcitation( nullptr ) { + // Access common instance of Abla instead of creating new one + G4HadronicInteraction* p = G4HadronicInteractionRegistry::Instance()->FindModel( "ABLAXX" ); + // If not found, or cast fails, create a local instance + theDeExcitation = static_cast< G4AblaInterface* >( p ); + if ( theDeExcitation == nullptr ) theDeExcitation = new G4AblaInterface; +} + + +G4AblaDeexcitation::~G4AblaDeexcitation() = default; + + +void G4AblaDeexcitation::setVerboseLevel( G4int verbose ) { + G4CascadeDeexciteBase::setVerboseLevel( verbose ); + theDeExcitation->SetVerboseLevel( verbose ); +} + + +void G4AblaDeexcitation::deExcite( const G4Fragment& fragment, G4CollisionOutput& globalOutput ) { + if ( verboseLevel ) G4cout << " >>> G4AblaDeexcitation::deExcite" << G4endl; + if ( verboseLevel > 1 ) G4cout << fragment << G4endl; + G4Fragment originalFragment( fragment ); + G4ReactionProductVector* ablaProducts = theDeExcitation->DeExcite( originalFragment ); + // Transfer output of de-excitation back into Bertini objects + if ( ablaProducts ) { + if ( verboseLevel > 1 ) { + G4cout << " Got " << ablaProducts->size() << " secondaries back from Abla:" << G4endl; + } + globalOutput.setVerboseLevel( verboseLevel ); + globalOutput.addOutgoingParticles( ablaProducts ); + globalOutput.setVerboseLevel( 0 ); + for ( size_t i = 0; i < ablaProducts->size(); ++i ) { + delete (*ablaProducts)[ i ]; + } + ablaProducts->clear(); + delete ablaProducts; + } +} diff --git a/source/processes/hadronic/models/cascade/cascade/src/G4CascadeInterface.cc b/source/processes/hadronic/models/cascade/cascade/src/G4CascadeInterface.cc index bb4d788b1ff..2f76437e832 100644 --- a/source/processes/hadronic/models/cascade/cascade/src/G4CascadeInterface.cc +++ b/source/processes/hadronic/models/cascade/cascade/src/G4CascadeInterface.cc @@ -159,10 +159,13 @@ G4CascadeInterface::G4CascadeInterface(const G4String& name) balance->setLimits(5*perCent, 10*MeV/GeV); // Bertini internal units this->SetVerboseLevel(G4CascadeParameters::verbose()); - if (G4CascadeParameters::usePreCompound()) + if ( G4CascadeParameters::usePreCompound() ) { usePreCompoundDeexcitation(); - else + } else if ( G4CascadeParameters::useAbla() ) { + useAblaDeexcitation(); + } else { useCascadeDeexcitation(); + } secID = G4PhysicsModelCatalog::GetModelID( "model_BertiniCascade" ); } @@ -221,6 +224,10 @@ void G4CascadeInterface::usePreCompoundDeexcitation() { collider->usePreCompoundDeexcitation(); } +void G4CascadeInterface::useAblaDeexcitation() { + collider->useAblaDeexcitation(); +} + // Apply verbosity to all member objects (overrides base class version) diff --git a/source/processes/hadronic/models/cascade/cascade/src/G4CascadeParameters.cc b/source/processes/hadronic/models/cascade/cascade/src/G4CascadeParameters.cc index 492e8bbe634..53a3619fb3f 100644 --- a/source/processes/hadronic/models/cascade/cascade/src/G4CascadeParameters.cc +++ b/source/processes/hadronic/models/cascade/cascade/src/G4CascadeParameters.cc @@ -85,6 +85,7 @@ G4CascadeParameters::G4CascadeParameters() : G4CASCADE_VERBOSE(std::getenv("G4CASCADE_VERBOSE")), G4CASCADE_CHECK_ECONS(std::getenv("G4CASCADE_CHECK_ECONS")), G4CASCADE_USE_PRECOMPOUND(std::getenv("G4CASCADE_USE_PRECOMPOUND")), + G4CASCADE_USE_ABLA(std::getenv("G4CASCADE_USE_ABLA")), G4CASCADE_DO_COALESCENCE(std::getenv("G4CASCADE_DO_COALESCENCE")), G4CASCADE_SHOW_HISTORY(std::getenv("G4CASCADE_SHOW_HISTORY")), G4CASCADE_USE_3BODYMOM(std::getenv("G4CASCADE_USE_3BODYMOM")), @@ -113,6 +114,7 @@ void G4CascadeParameters::Initialize() { CHECK_ECONS = (0!=G4CASCADE_CHECK_ECONS); USE_PRECOMPOUND = (0!=G4CASCADE_USE_PRECOMPOUND && G4CASCADE_USE_PRECOMPOUND[0]!='0'); + USE_ABLA = (0!=G4CASCADE_USE_ABLA && G4CASCADE_USE_ABLA[0]!='0'); DO_COALESCENCE = (0==G4CASCADE_DO_COALESCENCE || G4CASCADE_DO_COALESCENCE[0]!='0'); SHOW_HISTORY = (0!=G4CASCADE_SHOW_HISTORY); @@ -160,6 +162,8 @@ void G4CascadeParameters::DumpConfig(std::ostream& os) const { os << "G4CASCADE_CHECK_ECONS = " << G4CASCADE_CHECK_ECONS << endl; if (G4CASCADE_USE_PRECOMPOUND) os << "G4CASCADE_USE_PRECOMPOUND = " << G4CASCADE_USE_PRECOMPOUND << endl; + if (G4CASCADE_USE_ABLA) + os << "G4CASCADE_USE_ABLA = " << G4CASCADE_USE_ABLA << endl; if (G4CASCADE_DO_COALESCENCE) os << "G4CASCADE_DO_COALESCENCE = " << G4CASCADE_DO_COALESCENCE << endl; if (G4CASCADE_PIN_ABSORPTION) diff --git a/source/processes/hadronic/models/cascade/cascade/src/G4EquilibriumEvaporator.cc b/source/processes/hadronic/models/cascade/cascade/src/G4EquilibriumEvaporator.cc index 2813288e3eb..f9aac1a149c 100644 --- a/source/processes/hadronic/models/cascade/cascade/src/G4EquilibriumEvaporator.cc +++ b/source/processes/hadronic/models/cascade/cascade/src/G4EquilibriumEvaporator.cc @@ -347,8 +347,8 @@ void G4EquilibriumEvaporator::deExcite(const G4Fragment& target, // fisson part W[6] = 0.0; if (A >= 100.0 && fission_open) { - G4double X2 = Z * Z / A; - G4double X1 = 1.0 - 2.0 * Z / A; + G4double X2 = G4double(Z*Z)/G4double(A); + G4double X1 = 1.0 - 2.0*G4double(Z)/G4double(A); G4double X = 0.019316 * X2 / (1.0 - 1.79 * X1 * X1); G4double EF = EEXS - getQF(X, X2, A, Z, EEXS); diff --git a/source/processes/hadronic/models/cascade/cascade/src/G4InuclCollider.cc b/source/processes/hadronic/models/cascade/cascade/src/G4InuclCollider.cc index f337c58310d..a76ba68f58c 100644 --- a/source/processes/hadronic/models/cascade/cascade/src/G4InuclCollider.cc +++ b/source/processes/hadronic/models/cascade/cascade/src/G4InuclCollider.cc @@ -82,6 +82,7 @@ #include "G4InuclNuclei.hh" #include "G4LorentzConvertor.hh" #include "G4PreCompoundDeexcitation.hh" +#include "G4AblaDeexcitation.hh" G4InuclCollider::G4InuclCollider() @@ -124,6 +125,12 @@ void G4InuclCollider::usePreCompoundDeexcitation() { theDeexcitation->setVerboseLevel(verboseLevel); } +void G4InuclCollider::useAblaDeexcitation() { + delete theDeexcitation; + theDeexcitation = new G4AblaDeexcitation; + theDeexcitation->setVerboseLevel(verboseLevel); +} + // Main action diff --git a/source/processes/hadronic/models/coherent_elastic/GNUmakefile b/source/processes/hadronic/models/coherent_elastic/GNUmakefile deleted file mode 100644 index 0f573212f74..00000000000 --- a/source/processes/hadronic/models/coherent_elastic/GNUmakefile +++ /dev/null @@ -1,34 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4hadronic_coherent_elastic - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include/ \ - -I$(G4BASE)/processes/hadronic/cross_sections/include/ \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/materials/include \ - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/hadronic/models/de_excitation/GNUmakefile b/source/processes/hadronic/models/de_excitation/GNUmakefile deleted file mode 100644 index 2b8cda99153..00000000000 --- a/source/processes/hadronic/models/de_excitation/GNUmakefile +++ /dev/null @@ -1,35 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for chips library. HPW 20-Nov-99 -# -------------------------------------------------------------- - -name := G4hadronic_deex - - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - -SUBDIRS = handler -SUBDIRS += management -SUBDIRS += evaporation -SUBDIRS += gem_evaporation -SUBDIRS += photon_evaporation -SUBDIRS += fission -SUBDIRS += fermi_breakup -SUBDIRS += multifragmentation -SUBDIRS += util -SUBDIRS += ablation - - -SUBLIBS = G4hadronic_deex_handler -SUBLIBS += G4hadronic_deex_management -SUBLIBS += G4hadronic_deex_evaporation -SUBLIBS += G4hadronic_deex_gem_evaporation -SUBLIBS += G4hadronic_deex_photon_evaporation -SUBLIBS += G4hadronic_deex_fission -SUBLIBS += G4hadronic_deex_fermi_breakup -SUBLIBS += G4hadronic_deex_multifagmentation -SUBLIBS += G4hadronic_deex_util -SUBLIBS += G4hadronic_ablation - -include $(G4INSTALL)/config/globlib.gmk diff --git a/source/processes/hadronic/models/de_excitation/History b/source/processes/hadronic/models/de_excitation/History index 759212c02cf..7d66c342cb5 100644 --- a/source/processes/hadronic/models/de_excitation/History +++ b/source/processes/hadronic/models/de_excitation/History @@ -6,6 +6,26 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-04-21 Vladimir Ivanchenko (hadr-deex-V11-01-03) +- G4LevelManager - added extra public access method allowing users to check + level energies and other parameters +- G4DeexPrecoParameters - moved part of initialisation to header; do not use + autolock, instead use internal flag allowing only one dump of paramenters; + print all pre-compound parameters, separate pre-compound and de-excitation + printouts + +## 2023-03-29 Vladimir Ivanchenko (hadr-deex-V11-01-02) +- G4NuclearLevelData - fixed uploading of data before the run + +## 2023-03-27 Vladimir Ivanchenko (hadr-deex-V11-01-01) +- class clean-up in management and handler sub-directories: improved debug + and exceptions printouts, improve comments; removed unused methods + and class members + +## 2023-03-25 Vladimir Ivanchenko (hadr-deex-V11-01-00) +- G4LevelReader - allow to add more levels of a given isotope than hardcoded + limit=635 (max number of levels in G4LEVELGAMMADATA) - fix problem #2534 + ## 2022-11-26 Gabriele Cosmo (hadr-deex-V11-00-21) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/processes/hadronic/models/de_excitation/ablation/GNUmakefile b/source/processes/hadronic/models/de_excitation/ablation/GNUmakefile deleted file mode 100644 index 4692990acdb..00000000000 --- a/source/processes/hadronic/models/de_excitation/ablation/GNUmakefile +++ /dev/null @@ -1,43 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4hadronic_ablation - -ifndef G4INSTALL - G4INSTALL = ../../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fission/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/models/de_excitation/evaporation/GNUmakefile b/source/processes/hadronic/models/de_excitation/evaporation/GNUmakefile deleted file mode 100644 index f6bc281496c..00000000000 --- a/source/processes/hadronic/models/de_excitation/evaporation/GNUmakefile +++ /dev/null @@ -1,37 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4hadronic_deex_evaporation - -ifndef G4INSTALL - G4INSTALL = ../../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/gem_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fission/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/materials/include - - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/models/de_excitation/fermi_breakup/GNUmakefile b/source/processes/hadronic/models/de_excitation/fermi_breakup/GNUmakefile deleted file mode 100644 index a637cfdb72c..00000000000 --- a/source/processes/hadronic/models/de_excitation/fermi_breakup/GNUmakefile +++ /dev/null @@ -1,27 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4hadronic_deex_fermi_breakup - -ifndef G4INSTALL - G4INSTALL = ../../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/barions/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/models/de_excitation/fission/GNUmakefile b/source/processes/hadronic/models/de_excitation/fission/GNUmakefile deleted file mode 100644 index 248a41427ed..00000000000 --- a/source/processes/hadronic/models/de_excitation/fission/GNUmakefile +++ /dev/null @@ -1,33 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4hadronic_deex_fission - -ifndef G4INSTALL - G4INSTALL = ../../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/materials/include - - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/models/de_excitation/gem_evaporation/GNUmakefile b/source/processes/hadronic/models/de_excitation/gem_evaporation/GNUmakefile deleted file mode 100644 index 5d43b22fe64..00000000000 --- a/source/processes/hadronic/models/de_excitation/gem_evaporation/GNUmakefile +++ /dev/null @@ -1,35 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4hadronic_deex_gem_evaporation - -ifndef G4INSTALL - G4INSTALL = ../../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fission/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/materials/include - - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/models/de_excitation/handler/GNUmakefile b/source/processes/hadronic/models/de_excitation/handler/GNUmakefile deleted file mode 100644 index 43b814d0791..00000000000 --- a/source/processes/hadronic/models/de_excitation/handler/GNUmakefile +++ /dev/null @@ -1,39 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4hadronic_deex_handler - -ifndef G4INSTALL - G4INSTALL = ../../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/materials/include - - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/models/de_excitation/handler/include/G4ExcitationHandler.hh b/source/processes/hadronic/models/de_excitation/handler/include/G4ExcitationHandler.hh index 2de71baee31..91e766c8c7b 100644 --- a/source/processes/hadronic/models/de_excitation/handler/include/G4ExcitationHandler.hh +++ b/source/processes/hadronic/models/de_excitation/handler/include/G4ExcitationHandler.hh @@ -98,22 +98,22 @@ public: // for inverse cross section choice inline void SetOPTxs(G4int opt); - // for superimposed Coulomb Barrir for inverse cross sections + // for superimposed Coulomb Barrier for inverse cross sections inline void UseSICB(); //============================================== + G4ExcitationHandler(const G4ExcitationHandler &right) = delete; + const G4ExcitationHandler & operator + =(const G4ExcitationHandler &right) = delete; + G4bool operator==(const G4ExcitationHandler &right) const = delete; + G4bool operator!=(const G4ExcitationHandler &right) const = delete; + private: void SetParameters(); inline void SortSecondaryFragment(G4Fragment*); - - G4ExcitationHandler(const G4ExcitationHandler &right); - const G4ExcitationHandler & operator - =(const G4ExcitationHandler &right); - G4bool operator==(const G4ExcitationHandler &right) const; - G4bool operator!=(const G4ExcitationHandler &right) const; G4VEvaporation* theEvaporation; G4VMultiFragmentation* theMultiFragmentation; @@ -180,12 +180,6 @@ inline void G4ExcitationHandler::SetMinEForMultiFrag(G4double anE) minEForMultiFrag = anE; } -inline void G4ExcitationHandler::SetOPTxs(G4int) -{} - -inline void G4ExcitationHandler::UseSICB() -{} - inline void G4ExcitationHandler::SortSecondaryFragment(G4Fragment* frag) { G4int A = frag->GetA_asInt(); diff --git a/source/processes/hadronic/models/de_excitation/management/GNUmakefile b/source/processes/hadronic/models/de_excitation/management/GNUmakefile deleted file mode 100644 index 859ef1b910f..00000000000 --- a/source/processes/hadronic/models/de_excitation/management/GNUmakefile +++ /dev/null @@ -1,33 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4hadronic_deex_management - -ifndef G4INSTALL - G4INSTALL = ../../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/materials/include - - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/models/de_excitation/management/include/G4DeexPrecoParameters.hh b/source/processes/hadronic/models/de_excitation/management/include/G4DeexPrecoParameters.hh index 5b81db592f9..7bf65335406 100644 --- a/source/processes/hadronic/models/de_excitation/management/include/G4DeexPrecoParameters.hh +++ b/source/processes/hadronic/models/de_excitation/management/include/G4DeexPrecoParameters.hh @@ -36,7 +36,6 @@ #define G4DeexPrecoParameters_h 1 #include "globals.hh" -#include "G4Threading.hh" enum G4DeexChannelType { @@ -62,7 +61,7 @@ public: // printing std::ostream& StreamInfo(std::ostream& os) const; - void Dump() const; + void Dump(); friend std::ostream& operator<< (std::ostream& os, const G4DeexPrecoParameters&); @@ -208,6 +207,8 @@ public: private: + void Initialise(); + G4bool IsLocked() const; G4DeexParametersMessenger* theMessenger; @@ -233,7 +234,7 @@ private: G4double fPrecoHighEnergy; // Preco phenomenological factor - G4double fPhenoFactor; + G4double fPhenoFactor = 1.0; // Excitation handler G4double fMinExcitation; @@ -243,40 +244,37 @@ private: G4double fMinExPerNucleounForMF; // Cross section type - G4int fPrecoType; - G4int fDeexType; + G4int fPrecoType = 3; + G4int fDeexType = 3; - G4int fTwoJMAX; + G4int fTwoJMAX = 10; // Preco model - G4int fMinZForPreco; - G4int fMinAForPreco; + G4int fMinZForPreco = 3; + G4int fMinAForPreco = 5; - G4int fVerbose; + G4int fVerbose = 1; // Preco flags - G4bool fNeverGoBack; - G4bool fUseSoftCutoff; - G4bool fUseCEM; - G4bool fUseGNASH; - G4bool fUseHETC; - G4bool fUseAngularGen; - G4bool fPrecoDummy; + G4bool fNeverGoBack = false; + G4bool fUseSoftCutoff = false; + G4bool fUseCEM = true; + G4bool fUseGNASH = false; + G4bool fUseHETC = false; + G4bool fUseAngularGen = true; + G4bool fPrecoDummy = false; // Deex flags - G4bool fCorrelatedGamma; - G4bool fStoreAllLevels; - G4bool fInternalConversion; - G4bool fLD; // use simple level density model - G4bool fFD; // use transition to discrete level - G4bool fIsomerFlag; // enable isomere production + G4bool fCorrelatedGamma = false; + G4bool fStoreAllLevels = false; + G4bool fInternalConversion = true; + G4bool fLD = true; // use simple level density model + G4bool fFD = true; // use transition to discrete level + G4bool fIsomerFlag = true; // enable isomere production + G4bool fIsPrinted = false; // type of a set of e-exitation channels - G4DeexChannelType fDeexChannelType; - -#ifdef G4MULTITHREADED - static G4Mutex deexPrecoMutex; -#endif + G4DeexChannelType fDeexChannelType = fCombined; }; inline G4double G4DeexPrecoParameters::GetLevelDensity() const diff --git a/source/processes/hadronic/models/de_excitation/management/include/G4LevelManager.hh b/source/processes/hadronic/models/de_excitation/management/include/G4LevelManager.hh index a3e0ff57c66..68a900f8e9c 100644 --- a/source/processes/hadronic/models/de_excitation/management/include/G4LevelManager.hh +++ b/source/processes/hadronic/models/de_excitation/management/include/G4LevelManager.hh @@ -104,6 +104,10 @@ public: inline G4double LevelDensity(const G4double U) const; + inline const std::vector& GetLevelEnergies() const; + + inline const std::vector& GetLevels() const; + const G4String& FloatingType(const std::size_t i) const; void StreamInfo(std::ostream& os) const; @@ -209,4 +213,14 @@ inline G4double G4LevelManager::LevelDensity(const G4double) const return fLevelDensity; } +inline const std::vector& G4LevelManager::GetLevelEnergies() const +{ + return fLevelEnergy; +} + +inline const std::vector& G4LevelManager::GetLevels() const +{ + return fLevels; +} + #endif diff --git a/source/processes/hadronic/models/de_excitation/management/include/G4LevelReader.hh b/source/processes/hadronic/models/de_excitation/management/include/G4LevelReader.hh index 83dcec5f132..2da6e8a420c 100644 --- a/source/processes/hadronic/models/de_excitation/management/include/G4LevelReader.hh +++ b/source/processes/hadronic/models/de_excitation/management/include/G4LevelReader.hh @@ -47,9 +47,9 @@ #include "globals.hh" #include "G4LevelManager.hh" #include +#include class G4NuclearLevelData; -class G4DeexPrecoParameters; class G4LevelReader { @@ -66,6 +66,11 @@ public: const G4String& filename); inline void SetVerbose(G4int val); + + G4LevelReader(const G4LevelReader & right) = delete; + const G4LevelReader& operator=(const G4LevelReader &right) = delete; + G4bool operator==(const G4LevelReader &right) const = delete; + G4bool operator!=(const G4LevelReader &right) const = delete; private: @@ -81,63 +86,55 @@ private: const std::vector* NormalizedICCProbability(G4int Z); - const G4LevelManager* LevelManager(G4int Z, G4int A, G4int nlev, - std::ifstream& infile); - - G4LevelReader(const G4LevelReader & right) = delete; - const G4LevelReader& operator=(const G4LevelReader &right) = delete; - G4bool operator==(const G4LevelReader &right) const = delete; - G4bool operator!=(const G4LevelReader &right) const = delete; + const G4LevelManager* LevelManager(G4int Z, G4int A, + std::ifstream& infile); G4NuclearLevelData* fData; - G4DeexPrecoParameters* fParam; - - G4double fEnergy; - G4double fCurrEnergy; - G4double fTrEnergy; - G4double ener, tener; + G4double fEnergy = 0.; + G4double fTransEnergy = 0.; + G4double fTime = 0.; G4double fTimeFactor; - G4double fTime; - - G4float fProb; - G4float fSpin; - G4float fAlpha; - G4float fAlphaMax; - G4float fRatio; - G4float fICC[10]; - - static const G4int nfloting = 13; - static G4String fFloatingLevels[nfloting]; - - G4String fDirectory; - G4String fPol; - static const G4int nbufmax = 20; - static const G4int nbuf1 = 14; - static const G4int nbuf2 = 8; - - char buffer[nbufmax]; - char buff1[nbuf1]; - char buff2[nbuf2]; - char bufp[3]; - - G4int fVerbose; - G4int fLevelMax; - G4int fTransMax; - G4int ntrans, i1, i2, k, kk, tnum; - - G4float fNorm1; + G4float fProb = 0.f; + G4float fSpin = 0.f; + G4float fAlpha = 0.f; + G4float fAlphaMax; + G4float fRatio = 0.f; + G4float fNorm1 = 0.f; + G4float fICC[10] = {0.f}; + + G4int nbufmax = 20; + G4int nbuf1 = 14; + G4int nbuf2 = 8; + + G4int fVerbose = 1; + G4int fLevelMax = 632; + G4int fTransMax = 145; + G4int ntrans = 0; + G4int i1 = 0; + G4int i2 = 0; + G4int k = 0; + G4int kk = 0; + G4int tnum = 0; + + char buffer[20] = {' '}; + char buff1[14] = {' '}; + char buff2[8] = {' '}; + char bufp[3] = {' '}; std::vector vEnergy; - std::vector vSpin; + std::vector vSpin; std::vector vLevel; - std::vector vTrans; - std::vector vRatio; - std::vector vGammaCumProbability; - std::vector vGammaProbability; + std::vector vTrans; + std::vector vRatio; + std::vector vGammaCumProbability; + std::vector vGammaProbability; std::vector*> vShellProbability; + + G4String fPol = " "; + G4String fDirectory; }; inline void G4LevelReader::SetVerbose(G4int val) diff --git a/source/processes/hadronic/models/de_excitation/management/include/G4NuclearLevelData.hh b/source/processes/hadronic/models/de_excitation/management/include/G4NuclearLevelData.hh index 3aafc1206b2..e5c503700ac 100644 --- a/source/processes/hadronic/models/de_excitation/management/include/G4NuclearLevelData.hh +++ b/source/processes/hadronic/models/de_excitation/management/include/G4NuclearLevelData.hh @@ -105,8 +105,8 @@ public: G4double GetLevelDensity(G4int Z, G4int A, G4double U); G4double GetPairingCorrection(G4int Z, G4int A); - // enable uploading of data for all Z < maxZ - void UploadNuclearLevelData(G4int Z); + // enable uploading of data for all Z <= Zlim + void UploadNuclearLevelData(G4int Zlim); // stream only existing levels void StreamLevels(std::ostream& os, G4int Z, G4int A); @@ -117,11 +117,11 @@ public: private: G4DeexPrecoParameters* fDeexPrecoParameters; - G4LevelReader* fLevelReader; - G4PairingCorrection* fPairingCorrection; - G4ShellCorrection* fShellCorrection; - G4Pow* fG4calc; - G4bool fInitialized; + G4LevelReader* fLevelReader; + G4PairingCorrection* fPairingCorrection; + G4ShellCorrection* fShellCorrection; + G4Pow* fG4calc; + G4bool fInitialized = false; static const G4int ZMAX = 118; static const G4int AMIN[ZMAX]; diff --git a/source/processes/hadronic/models/de_excitation/management/include/G4VEvaporationChannel.hh b/source/processes/hadronic/models/de_excitation/management/include/G4VEvaporationChannel.hh index 02d771b84d0..985d1e52761 100644 --- a/source/processes/hadronic/models/de_excitation/management/include/G4VEvaporationChannel.hh +++ b/source/processes/hadronic/models/de_excitation/management/include/G4VEvaporationChannel.hh @@ -114,10 +114,15 @@ G4VEvaporationChannel::BreakUpFragment(G4Fragment* theNucleus) return results; } -inline void G4VEvaporationChannel::SetOPTxs(G4int) -{} -inline void G4VEvaporationChannel::UseSICB(G4bool) -{} +inline void G4VEvaporationChannel::SetOPTxs(G4int val) +{ + if(val >= 0) { OPTxs = val; } +} + +inline void G4VEvaporationChannel::UseSICB(G4bool val) +{ + useSICB = val; +} #endif diff --git a/source/processes/hadronic/models/de_excitation/management/include/G4VEvaporationFactory.hh b/source/processes/hadronic/models/de_excitation/management/include/G4VEvaporationFactory.hh index 123a95a9b9e..3c59f7777e5 100644 --- a/source/processes/hadronic/models/de_excitation/management/include/G4VEvaporationFactory.hh +++ b/source/processes/hadronic/models/de_excitation/management/include/G4VEvaporationFactory.hh @@ -42,16 +42,14 @@ public: explicit G4VEvaporationFactory(G4VEvaporationChannel* ptr); - virtual ~G4VEvaporationFactory(); + virtual ~G4VEvaporationFactory() = default; - virtual std::vector * GetChannel() = 0; + virtual std::vector* GetChannel() = 0; -private: - - G4VEvaporationFactory(const G4VEvaporationFactory & ); - const G4VEvaporationFactory & operator=(const G4VEvaporationFactory & val); - G4bool operator==(const G4VEvaporationFactory & val) const; - G4bool operator!=(const G4VEvaporationFactory & val) const; + G4VEvaporationFactory(const G4VEvaporationFactory &) = delete; + const G4VEvaporationFactory & operator=(const G4VEvaporationFactory&) = delete; + G4bool operator==(const G4VEvaporationFactory&) const = delete; + G4bool operator!=(const G4VEvaporationFactory&) const = delete; protected: diff --git a/source/processes/hadronic/models/de_excitation/management/src/G4DeexPrecoParameters.cc b/source/processes/hadronic/models/de_excitation/management/src/G4DeexPrecoParameters.cc index 6e4c8d05b0c..4384babf3d1 100644 --- a/source/processes/hadronic/models/de_excitation/management/src/G4DeexPrecoParameters.cc +++ b/source/processes/hadronic/models/de_excitation/management/src/G4DeexPrecoParameters.cc @@ -37,14 +37,13 @@ #include "G4PhysicsModelCatalog.hh" #include "G4DeexParametersMessenger.hh" #include "G4HadronicParameters.hh" - -#ifdef G4MULTITHREADED -G4Mutex G4DeexPrecoParameters::deexPrecoMutex = G4MUTEX_INITIALIZER; -#endif +#include "G4Threading.hh" G4DeexPrecoParameters::G4DeexPrecoParameters() { - SetDefaults(); + fStateManager = G4StateManager::GetStateManager(); + theMessenger = new G4DeexParametersMessenger(this); + Initialise(); } G4DeexPrecoParameters::~G4DeexPrecoParameters() @@ -54,12 +53,11 @@ G4DeexPrecoParameters::~G4DeexPrecoParameters() void G4DeexPrecoParameters::SetDefaults() { -#ifdef G4MULTITHREADED - G4MUTEXLOCK(&G4DeexPrecoParameters::deexPrecoMutex); -#endif - fStateManager = G4StateManager::GetStateManager(); - theMessenger = new G4DeexParametersMessenger(this); + if(!IsLocked()) { Initialise(); } +} +void G4DeexPrecoParameters::Initialise() +{ fLevelDensity = 0.075/CLHEP::MeV; fR0 = 1.5*CLHEP::fermi; fTransitionsR0 = 0.6*CLHEP::fermi; @@ -67,33 +65,9 @@ void G4DeexPrecoParameters::SetDefaults() fFermiEnergy = 35.0*CLHEP::MeV; fPrecoLowEnergy = 0.1*CLHEP::MeV; fPrecoHighEnergy = 30*CLHEP::MeV; - fPhenoFactor = 1.0; fMinExcitation = 10*CLHEP::eV; fMaxLifeTime = 1*CLHEP::nanosecond; fMinExPerNucleounForMF = 200*CLHEP::GeV; - fMinZForPreco = 3; - fMinAForPreco = 5; - fPrecoType = 3; - fDeexType = 3; - fTwoJMAX = 10; - fVerbose = 1; - fNeverGoBack = false; - fUseSoftCutoff = false; - fUseCEM = true; - fUseGNASH = false; - fUseHETC = false; - fUseAngularGen = false; - fPrecoDummy = false; - fCorrelatedGamma = false; - fStoreAllLevels = false; - fInternalConversion = true; - fLD = true; - fFD = true; - fIsomerFlag = true; - fDeexChannelType = fCombined; -#ifdef G4MULTITHREADED - G4MUTEXUNLOCK(&G4DeexPrecoParameters::deexPrecoMutex); -#endif } void G4DeexPrecoParameters::SetLevelDensity(G4double val) @@ -296,7 +270,7 @@ std::ostream& G4DeexPrecoParameters::StreamInfo(std::ostream& os) const G4long prec = os.precision(5); os << "=======================================================================" << "\n"; - os << "====== Pre-compound/De-excitation Physics Parameters ========" << "\n"; + os << "====== Geant4 Native Pre-compound Model Parameters ========" << "\n"; os << "=======================================================================" << "\n"; os << "Type of pre-compound inverse x-section " << fPrecoType << "\n"; os << "Pre-compound model active " << (!fPrecoDummy) << "\n"; @@ -304,6 +278,15 @@ std::ostream& G4DeexPrecoParameters::StreamInfo(std::ostream& os) const << G4BestUnit(fPrecoLowEnergy, "Energy") << "\n"; os << "Pre-compound excitation high energy " << G4BestUnit(fPrecoHighEnergy, "Energy") << "\n"; + os << "Angular generator for pre-compound model " << fUseAngularGen << "\n"; + os << "Use NeverGoBack option for pre-compound model " << fNeverGoBack << "\n"; + os << "Use SoftCutOff option for pre-compound model " << fUseSoftCutoff << "\n"; + os << "Use CEM transitions for pre-compound model " << fUseCEM << "\n"; + os << "Use GNASH transitions for pre-compound model " << fUseGNASH << "\n"; + os << "Use HETC submodel for pre-compound model " << fUseHETC << "\n"; + os << "=======================================================================" << "\n"; + os << "====== Nuclear De-excitation Module Parameters ========" << "\n"; + os << "=======================================================================" << "\n"; os << "Type of de-excitation inverse x-section " << fDeexType << "\n"; os << "Type of de-excitation factory " << namm[idx] << "\n"; os << "Number of de-excitation channels " << nmm[idx] << "\n"; @@ -336,9 +319,12 @@ G4int G4DeexPrecoParameters::GetVerbose() const return (verb > 0) ? std::max(fVerbose, verb) : verb; } -void G4DeexPrecoParameters::Dump() const +void G4DeexPrecoParameters::Dump() { - if ( G4Threading::IsMasterThread() && GetVerbose() > 0 ) { StreamInfo(G4cout); } + if(!fIsPrinted && GetVerbose() > 0 && G4Threading::IsMasterThread()) { + StreamInfo(G4cout); + fIsPrinted = true; + } } std::ostream& operator<< (std::ostream& os, const G4DeexPrecoParameters& par) diff --git a/source/processes/hadronic/models/de_excitation/management/src/G4LevelReader.cc b/source/processes/hadronic/models/de_excitation/management/src/G4LevelReader.cc index ffa9da7f201..4136aea3df3 100644 --- a/source/processes/hadronic/models/de_excitation/management/src/G4LevelReader.cc +++ b/source/processes/hadronic/models/de_excitation/management/src/G4LevelReader.cc @@ -45,39 +45,22 @@ #include "G4DeexPrecoParameters.hh" #include "G4SystemOfUnits.hh" #include "G4Pow.hh" -#include #include #include -G4String G4LevelReader::fFloatingLevels[] = { +namespace +{ + G4int nfloting = 13; + G4String fFloatingLevels[13] = { "-", "+X", "+Y", "+Z", "+U", "+V", "+W", "+R", "+S", "+T", "+A", "+B", "+C"}; +} G4LevelReader::G4LevelReader(G4NuclearLevelData* ptr) - : fData(ptr),fVerbose(1),fLevelMax(632),fTransMax(145) + : fData(ptr) { fAlphaMax = (G4float)1.e15; - fParam = fData->GetParameters(); fTimeFactor = CLHEP::second/G4Pow::GetInstance()->logZ(2); - const char* directory = G4FindDataDir("G4LEVELGAMMADATA"); - if(directory) { - fDirectory = directory; - } else { - G4Exception("G4LevelReader()","had0707",FatalException, - "Environment variable G4LEVELGAMMADATA is not defined"); - fDirectory = ""; - } - fPol = " "; - for(G4int i=0; i<10; ++i) { fICC[i] = 0.0f; } - for(G4int i=0; i> x; - return stream.fail() ? false : true; + return !stream.fail(); } G4bool G4LevelReader::ReadDataItem(std::istream& dataFile, G4double& x) @@ -103,7 +86,7 @@ G4bool G4LevelReader::ReadDataItem(std::istream& dataFile, G4double& x) G4bool okay = true; dataFile >> buffer; if(dataFile.fail()) { okay = false; } - else { x = strtod(buffer, 0); } + else { x = std::strtod(buffer, 0); } return okay; } @@ -115,7 +98,7 @@ G4bool G4LevelReader::ReadDataItem(std::istream& dataFile, G4float& x) G4bool okay = true; dataFile >> buff1; if(dataFile.fail()) { okay = false; } - else { x = atof(buff1); } + else { x = std::atof(buff1); } return okay; } @@ -127,7 +110,7 @@ G4bool G4LevelReader::ReadDataItem(std::istream& dataFile, G4int& ix) G4bool okay = true; dataFile >> buff2; if(dataFile.fail()) { okay = false; } - else { ix = atoi(buff2); } + else { ix = std::atoi(buff2); } return okay; } @@ -212,94 +195,90 @@ G4LevelReader::CreateLevelManager(G4int Z, G4int A) ss << fDirectory << "/z" << Z << ".a" << A; std::ifstream infile(ss.str(), std::ios::in); - return LevelManager(Z, A, 0, infile); -} - -const G4LevelManager* -G4LevelReader::MakeLevelManager(G4int Z, G4int A, const G4String& filename) -{ - std::ifstream infile(filename, std::ios::in); + // file is not opened if (!infile.is_open()) { - G4ExceptionDescription ed; - ed << "User file for Z= " << Z << " A= " << A - << " is not opened!"; - G4Exception("G4LevelReader::MakeLevelManager(..)","had014", - FatalException, ed, ""); + if(fVerbose > 1) { + G4ExceptionDescription ed; + ed << "Regular file " << ss.str() << " is not opened! Z=" + << Z << " A=" << A; + G4Exception("G4LevelReader::LevelManager(..)","had014", + JustWarning, ed, "Check file path"); + } return nullptr; } - return LevelManager(Z, A, 0, infile); + // file is opened + if (fVerbose > 1) { + G4cout << "G4LevelReader: open file " << ss.str() << " for Z= " + << Z << " A= " << A << G4endl; + } + return LevelManager(Z, A, infile); } const G4LevelManager* -G4LevelReader::LevelManager(G4int Z, G4int A, G4int nlev, - std::ifstream& infile) +G4LevelReader::MakeLevelManager(G4int Z, G4int A, const G4String& filename) { + std::ifstream infile(filename, std::ios::in); + // file is not opened if (!infile.is_open()) { - if(Z < 6) { + if(fVerbose > 1) { G4ExceptionDescription ed; - ed << " for Z= " << Z << " A= " << A - << " is not opened!"; + ed << "External file " << filename << " is not opened! Z=" + << Z << " A=" << A; G4Exception("G4LevelReader::LevelManager(..)","had014", - FatalException, ed, ""); + FatalException, ed, "Check file path"); } return nullptr; } + // file is opened if (fVerbose > 1) { - G4cout << "G4LevelReader: open file for Z= " - << Z << " A= " << A << G4endl; + G4cout << "G4LevelReader: open external file " << filename + << " for Z= " << Z << " A= " << A << G4endl; } + return LevelManager(Z, A, infile); +} - G4bool allLevels = fParam->StoreICLevelData(); - - G4int nlevels = (0 == nlev) ? fLevelMax : nlev; - if(fVerbose > 1) { - G4cout << "## New isotope Z= " << Z << " A= " << A; - if(nlevels < fLevelMax) { G4cout << " Nlevels= " << nlevels; } - G4cout << G4endl; - } - if(nlevels > fLevelMax) { - fLevelMax = nlevels; - vEnergy.resize(fLevelMax,0.0); - vSpin.resize(fLevelMax,0); - vLevel.resize(fLevelMax,nullptr); - } - ntrans = 0; - // i2 - Level number at which transition ends - // tnum - Multipolarity index +const G4LevelManager* +G4LevelReader::LevelManager(G4int Z, G4int A, std::ifstream& infile) +{ + G4bool allLevels = fData->GetParameters()->StoreICLevelData(); fPol = " "; - - G4int i; - for(i=0; i> i1 >> fPol; // Level number and floating level - //G4cout << "New line: i1= " << i1 << " fPol= <" << fPol << "> " << G4endl; + // normal end of file if(infile.eof()) { - if(fVerbose > 2) { + if(fVerbose > 1) { G4cout << "### End of file Z= " << Z << " A= " << A << " Nlevels= " << i << G4endl; } break; } + // problematic end of file if(i1 != i) { G4ExceptionDescription ed; ed << " G4LevelReader: wrong data file for Z= " << Z << " A= " << A - << " level #" << i << " has index " << i1 << G4endl; + << " level #" << i << " has index " << i1; G4Exception("G4LevelReader::LevelManager(..)","had014", JustWarning, ed, "Check G4LEVELGAMMADATA"); break; } - - if(!(ReadDataItem(infile,ener) && - ReadDataItem(infile,fTime) && - ReadDataItem(infile,fSpin) && - ReadDataItem(infile,ntrans))) { - if(fVerbose > 2) { - G4cout << "### End of file Z= " << Z << " A= " << A + // start reading new level data + if(fVerbose > 2) { + G4cout << "New line: i1= " << i1 << " fPol= <" << fPol << "> " << G4endl; + } + // read new level data + if(!(ReadDataItem(infile, fEnergy) && + ReadDataItem(infile, fTime) && + ReadDataItem(infile, fSpin) && + ReadDataItem(infile, ntrans))) { + if(fVerbose > 1) { + G4cout << "### Incomplete end of file Z= " << Z << " A= " << A << " Nlevels= " << i << G4endl; } break; } - ener *= CLHEP::keV; + fEnergy *= CLHEP::keV; for(k=0; k 0.0f) { fTime *= fTimeFactor; } + + // data incomplete if(fSpin > 48.0f) { fSpin = 0.0f; } + G4int twos = G4lrint(2*fSpin); vSpin[i] = 100 + twos + k*100000; if(fVerbose > 2) { - G4cout << " Level #" << i1 << " E(MeV)= " << ener/CLHEP::MeV + G4cout << " Level #" << i1 << " E(MeV)= " << fEnergy/CLHEP::MeV << " LTime(s)= " << fTime << " 2S= " << vSpin[i] << " meta= " << vSpin[i]/100000 << " idx= " << i << " ntr= " << ntrans << G4endl; @@ -349,14 +331,12 @@ G4LevelReader::LevelManager(G4int Z, G4int A, G4int nlev, fNorm1 = 0.0f; for(G4int j=0; j>i2 >> tener >> fProb >> vTrans[j] >> fRatio >> fAlpha; - //if(infile.fail()) { + if(!(ReadDataItem(infile, i2) && + ReadDataItem(infile, fTransEnergy) && + ReadDataItem(infile, fProb) && + ReadDataItem(infile, tnum) && + ReadDataItem(infile, vRatio[j]) && + ReadDataItem(infile, fAlpha))) { if(fVerbose > 1) { G4cout << "### Fail to read transition j= " << j << " Z= " << Z << " A= " << A << G4endl; @@ -380,7 +360,7 @@ G4LevelReader::LevelManager(G4int Z, G4int A, G4int nlev, if(fVerbose > 2) { G4long prec = G4cout.precision(4); G4cout << "### Transition #" << j << " to level " << i2 - << " i2= " << i2 << " Etrans(MeV)= " << tener*CLHEP::keV + << " i2= " << i2 << " Etrans(MeV)= " << fTransEnergy*CLHEP::keV << " fProb= " << fProb << " MultiP= " << tnum << " fMpRatio= " << fRatio << " fAlpha= " << fAlpha << G4endl; @@ -437,10 +417,17 @@ G4LevelReader::LevelManager(G4int Z, G4int A, G4int nlev, vRatio, vShellProbability); } + ++i; + if(i == fLevelMax) { + fLevelMax += 10; + vEnergy.resize(fLevelMax, 0.0); + vSpin.resize(fLevelMax, 0); + vLevel.resize(fLevelMax, nullptr); + } } G4LevelManager* lman = nullptr; if(1 <= i) { - lman = new G4LevelManager(Z, A, (std::size_t)i,vEnergy,vSpin,vLevel); + lman = new G4LevelManager(Z, A, (std::size_t)i, vEnergy, vSpin, vLevel); if(fVerbose > 1) { G4cout << "=== Reader: new manager for Z= " << Z << " A= " << A << " Nlevels= " << i << " E[0]= " @@ -449,6 +436,5 @@ G4LevelReader::LevelManager(G4int Z, G4int A, G4int nlev, << G4endl; } } - return lman; } diff --git a/source/processes/hadronic/models/de_excitation/management/src/G4NuclearLevelData.cc b/source/processes/hadronic/models/de_excitation/management/src/G4NuclearLevelData.cc index 32a796242e5..046a4fbe122 100644 --- a/source/processes/hadronic/models/de_excitation/management/src/G4NuclearLevelData.cc +++ b/source/processes/hadronic/models/de_excitation/management/src/G4NuclearLevelData.cc @@ -444,7 +444,6 @@ G4NuclearLevelData::G4NuclearLevelData() fShellCorrection = new G4ShellCorrection(); fPairingCorrection = new G4PairingCorrection(); fG4calc = G4Pow::GetInstance(); - fInitialized = false; } G4NuclearLevelData::~G4NuclearLevelData() @@ -477,19 +476,21 @@ G4NuclearLevelData::GetLevelManager(G4int Z, G4int A) return (fLevelManagers[Z])[idx]; } -G4bool -G4NuclearLevelData::AddPrivateData(G4int Z, G4int A, const G4String& filename) +G4bool +G4NuclearLevelData::AddPrivateData(G4int Z, G4int A, const G4String& fname) { G4bool res = false; if(Z > 0 && Z < ZMAX && A >= AMIN[Z] && A <= AMAX[Z]) { G4AutoLock l(&nuclearLevelDataMutex); - const G4LevelManager* newman = - fLevelReader->MakeLevelManager(Z, A, filename); - if(newman) { + const G4LevelManager* newman = fLevelReader->MakeLevelManager(Z, A, fname); + // if file is corrupted G4LevelReader should make the exception + if(newman != nullptr) { res = true; - G4cout << "G4NuclearLevelData::AddPrivateData for Z= " << Z - << " A= " << A << " from <" << filename - << "> is done" << G4endl; + if(0 < fDeexPrecoParameters->GetVerbose()) { + G4cout << "G4NuclearLevelData::AddPrivateData for Z= " << Z + << " A= " << A << " from <" << fname + << "> is done" << G4endl; + } const G4int idx = A - AMIN[Z]; delete (fLevelManagers[Z])[idx]; (fLevelManagers[Z])[idx] = newman; @@ -516,13 +517,13 @@ G4int G4NuclearLevelData::GetMaxA(G4int Z) const return (Z >= 0 && Z < ZMAX) ? AMAX[Z] : 0; } -void G4NuclearLevelData::UploadNuclearLevelData(G4int ZZ) +void G4NuclearLevelData::UploadNuclearLevelData(G4int Zlim) { if(fInitialized) return; G4AutoLock l(&nuclearLevelDataMutex); if(!fInitialized) { fInitialized = true; - G4int mZ = ZZ; + G4int mZ = Zlim + 1; if(mZ > ZMAX) { mZ = ZMAX; } for(G4int Z=1; ZgetProjectileSpecies(), @@ -199,7 +202,14 @@ namespace G4INCL { theIncomingMomentum(nucleus->getIncomingMomentum()), outgoingParticles(n->getStore()->getOutgoingParticles()), theEventInfo(ei) { - thePTBoostVector = nucleus->getIncomingMomentum()/nucleus->getInitialEnergy(); + if(theIncomingMomentum.mag() == 0.){ //change the condition + thePTBoostVector = {0., 0., 0.}; + //INCL_WARN("PTBoostVector at rest is zero" << '\n'); + } + else{ + thePTBoostVector = nucleus->getIncomingMomentum()/(nucleus->getInitialEnergy()); //D + //INCL_WARN("PTBoostVector" << '\n'); + } for(ParticleIter p=outgoingParticles.begin(), e=outgoingParticles.end(); p!=e; ++p) { (*p)->boost(thePTBoostVector); particleCMMomenta.push_back((*p)->getMomentum()); @@ -331,7 +341,7 @@ namespace G4INCL { void cascade(); /// \brief Finalise the cascade and clean up - void postCascade(); + void postCascade(const ParticleSpecies &projectileSpecies, const G4double kineticEnergy); /** \brief Initialise the maximum interaction distance. * @@ -348,6 +358,25 @@ namespace G4INCL { /// \brief Update global counters and other members of theGlobalInfo object void updateGlobalInfo(); + + /// \brief Fill probabilities and particle types from datafile and return probability sum for normalization + G4double read_file(std::string filename, std::vector& probabilities, + std::vector>& particle_types); + + /// \brief This function will tell you the FS line number from the datafile based on your random value + G4int findStringNumber(G4double rdm, std::vector yields); + + /// \brief Initialise the "cascade" for pbar on H1 + void preCascade_pbarH1(ParticleSpecies const &projectileSpecies, const G4double kineticEnergy); + + /// \brief Initialise the "cascade" for pbar on H2 + void preCascade_pbarH2(ParticleSpecies const &projectileSpecies, const G4double kineticEnergy); + + /// \brief Finalise the "cascade" and clean up for pbar on H1 + void postCascade_pbarH1(ParticleList const &outgoingParticles); + + /// \brief Finalise the "cascade" and clean up for pbar on H2 + void postCascade_pbarH2(ParticleList const &outgoingParticles, ParticleList const &H2Particles); }; } diff --git a/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLCoulombNonRelativistic.hh b/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLCoulombNonRelativistic.hh index 4cd70f92812..add1a3ec8ab 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLCoulombNonRelativistic.hh +++ b/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLCoulombNonRelativistic.hh @@ -100,8 +100,9 @@ namespace G4INCL { const G4double nucleusMass = n->getTableMass(); const G4double reducedMass = particleMass*nucleusMass/(particleMass+nucleusMass); const G4double kineticEnergyInCM = kineticEnergy * reducedMass / particleMass; - const G4double theMinimumDistance = PhysicalConstants::eSquared * p.theZ * n->getZ() * particleMass - / (kineticEnergyInCM * reducedMass); + const G4double theMinimumDistance = ( kineticEnergyInCM <= 0.0 ? 0.0 : + PhysicalConstants::eSquared * p.theZ * n->getZ() * particleMass + / (kineticEnergyInCM * reducedMass) ); INCL_DEBUG("Minimum distance of approach due to Coulomb = " << theMinimumDistance << '\n'); return theMinimumDistance; } diff --git a/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLIPropagationModel.hh b/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLIPropagationModel.hh index 5a226bb4957..259316fcada 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLIPropagationModel.hh +++ b/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLIPropagationModel.hh @@ -82,6 +82,7 @@ namespace G4INCL { virtual G4double shoot(ParticleSpecies const &projectileSpecies, const G4double kineticEnergy, const G4double impactParameter, const G4double phi) = 0; protected: + virtual G4double shootAtrest(ParticleType const t, const G4double kineticEnergy) = 0; virtual G4double shootParticle(ParticleType const t, const G4double kineticEnergy, const G4double impactParameter, const G4double phi) = 0; virtual G4double shootComposite(ParticleSpecies const &s, const G4double kineticEnergy, const G4double impactParameter, const G4double phi) = 0; diff --git a/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLNucleus.hh b/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLNucleus.hh index 70d05e6e82d..fc54bea5cf4 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLNucleus.hh +++ b/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLNucleus.hh @@ -62,9 +62,11 @@ namespace G4INCL { + enum AnnihilationType {Def=0, PType, NType}; //D + class Nucleus : public Cluster { public: - Nucleus(G4int mass, G4int charge, G4int strangess, Config const * const conf, const G4double universeRadius=-1.); + Nucleus(G4int mass, G4int charge, G4int strangess, Config const * const conf, const G4double universeRadius=-1., AnnihilationType AType=Def); virtual ~Nucleus(); /// \brief Dummy copy constructor to silence Coverity warning @@ -149,6 +151,7 @@ namespace G4INCL { case SigmaPlus: case SigmaZero: case SigmaMinus: + case antiProton: S += thePotential->getSeparationEnergy(*i); break; case Composite: @@ -338,6 +341,7 @@ namespace G4INCL { if((*i)->isOmega()) return true; return false; } + /** * Print the nucleus info @@ -472,6 +476,14 @@ namespace G4INCL { /// \brief Getter for thePotential NuclearPotential::INuclearPotential const *getPotential() const { return thePotential; }; + /// \brief Getter for theAnnihilationType + AnnihilationType getAnnihilationType() const { return theAType; }; //D + + /// \brief Setter for theAnnihilationType + void setAnnihilationType(const AnnihilationType at){ + theAType = at; + }; //D + private: /** \brief Compute the recoil kinematics for a 1-nucleon remnant. * @@ -481,6 +493,7 @@ namespace G4INCL { void computeOneNucleonRecoilKinematics(); private: + G4int theInitialZ, theInitialA, theInitialS; /// \brief The number of entering protons G4int theNpInitial; @@ -530,6 +543,8 @@ namespace G4INCL { /// \brief Pointer to the NuclearPotential object NuclearPotential::INuclearPotential const *thePotential; + AnnihilationType theAType; //D same order as in the cc + INCL_DECLARE_ALLOCATION_POOL(Nucleus) }; diff --git a/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLParticleEntryAvatar.hh b/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLParticleEntryAvatar.hh index 2d1fddadda8..9efcb805350 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLParticleEntryAvatar.hh +++ b/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLParticleEntryAvatar.hh @@ -44,9 +44,12 @@ #include "G4INCLAllocationPool.hh" namespace G4INCL { + + enum EntryType{Default, APAR}; //D + class ParticleEntryAvatar: public G4INCL::IAvatar { public: - ParticleEntryAvatar(G4double, G4INCL::Nucleus*, G4INCL::Particle*); + ParticleEntryAvatar(G4double, G4INCL::Nucleus*, G4INCL::Particle*, EntryType = Default); //D virtual ~ParticleEntryAvatar(); virtual G4INCL::IChannel* getChannel(); ParticleList getParticles() const { @@ -59,9 +62,13 @@ namespace G4INCL { virtual void postInteraction(FinalState *); std::string dump() const; + + EntryType getEntryType() const { return theEType; }; //D + private: Nucleus *theNucleus; Particle *theParticle; + EntryType theEType; //D INCL_DECLARE_ALLOCATION_POOL(ParticleEntryAvatar) }; diff --git a/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLPbarAtrestEntryChannel.hh b/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLPbarAtrestEntryChannel.hh new file mode 100644 index 00000000000..c0bd93fc5d5 --- /dev/null +++ b/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLPbarAtrestEntryChannel.hh @@ -0,0 +1,95 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// INCL++ intra-nuclear cascade model +// Alain Boudard, CEA-Saclay, France +// Joseph Cugnon, University of Liege, Belgium +// Jean-Christophe David, CEA-Saclay, France +// Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland +// Sylvie Leray, CEA-Saclay, France +// Davide Mancusi, CEA-Saclay, France +// +#define INCLXX_IN_GEANT4_MODE 1 + +#include "globals.hh" + +#include "G4INCLParticle.hh" +#include "G4INCLIChannel.hh" +#include "G4INCLNucleus.hh" +#include "G4INCLAllocationPool.hh" +#include "G4INCLFinalState.hh" +#include "G4INCLICoulomb.hh" +#include +#include +#include +#include +#include +#include + + +#ifndef G4INCLPbarAtrestEntry_hh +#define G4INCLPbarAtrestEntry_hh 1 + +namespace G4INCL { + + class FinalState; + + class PbarAtrestEntryChannel : public IChannel { + public: + PbarAtrestEntryChannel(Nucleus *n, Particle *p); + virtual ~PbarAtrestEntryChannel(); + + void fillFinalState(FinalState *fs); + + ParticleList makeMesonStar(); + G4double PbarCoulombicCascadeEnergy(G4int A, G4int Z); + G4double n_annihilation(G4int A, G4int Z); + IAvatarList bringMesonStar(ParticleList const &pL, Nucleus * const n); + G4bool ProtonIsTheVictim(); + ThreeVector getAnnihilationPosition(); + + G4double fctrl(const G4double arg1); + G4double r1(const G4int n); + G4double r2(const G4int n); + G4double r3(G4double x, const G4int n); + G4double r4(G4double x, const G4int n); + G4double radial_wavefunction(G4double x, const G4int n); + G4double densityP(G4double x); + G4double densityN(G4double x); + G4double overlapP(G4double &x, const G4int n); + G4double overlapN(G4double &x, const G4int n); + G4double read_file(std::string filename, std::vector& probabilities, std::vector>& particle_types); + G4int findStringNumber(G4double rdm, std::vector yields); + + private: + Nucleus *theNucleus; + Particle *theParticle; + + + INCL_DECLARE_ALLOCATION_POOL(PbarAtrestEntryChannel) + }; +} + +#endif diff --git a/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLStandardPropagationModel.hh b/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLStandardPropagationModel.hh index 554bae6f4a6..b6ef5eed1b3 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLStandardPropagationModel.hh +++ b/source/processes/hadronic/models/inclxx/incl_physics/include/G4INCLStandardPropagationModel.hh @@ -85,7 +85,8 @@ namespace G4INCL { G4double shoot(ParticleSpecies const &projectileSpecies, const G4double kineticEnergy, const G4double impactParameter, const G4double phi); G4double shootParticle(ParticleType const t, const G4double kineticEnergy, const G4double impactParameter, const G4double phi); G4double shootComposite(ParticleSpecies const &s, const G4double kineticEnergy, const G4double impactParameter, const G4double phi); - + G4double shootAtrest(ParticleType const t, const G4double kineticEnergy); + /** * Set the stopping time of the simulation. */ diff --git a/source/processes/hadronic/models/inclxx/incl_physics/sources.cmake b/source/processes/hadronic/models/inclxx/incl_physics/sources.cmake index b3131ce6f64..34659d976ad 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/sources.cmake +++ b/source/processes/hadronic/models/inclxx/incl_physics/sources.cmake @@ -109,6 +109,7 @@ geant4_add_module(G4hadronic_inclxx_physics G4INCLPauliStandard.hh G4INCLPauliStrict.hh G4INCLPauliStrictStandard.hh + G4INCLPbarAtrestEntryChannel.hh G4INCLPhaseSpaceGenerator.hh G4INCLPhaseSpaceKopylov.hh G4INCLPhaseSpaceRauboldLynch.hh @@ -221,6 +222,7 @@ geant4_add_module(G4hadronic_inclxx_physics G4INCLPauliStandard.cc G4INCLPauliStrict.cc G4INCLPauliStrictStandard.cc + G4INCLPbarAtrestEntryChannel.cc G4INCLPhaseSpaceGenerator.cc G4INCLPhaseSpaceKopylov.cc G4INCLPhaseSpaceRauboldLynch.cc diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLCascade.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLCascade.cc index 4dc48fcc56d..4c68e58a166 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLCascade.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLCascade.cc @@ -46,6 +46,7 @@ #include "G4INCLParticle.hh" #include "G4INCLNuclearMassTable.hh" #include "G4INCLGlobalInfo.hh" +#include "G4INCLNucleus.hh" #include "G4INCLPauliBlocking.hh" @@ -74,6 +75,8 @@ #include #include +#include "G4INCLPbarAtrestEntryChannel.hh" + namespace G4INCL { INCL::INCL(Config const * const config) @@ -200,43 +203,110 @@ namespace G4INCL { // Initialise the maximum universe radius initUniverseRadius(projectileSpecies, kineticEnergy, A, Z); - // Initialise the nucleus - theZ = Z; - theS = S; - if(theConfig->isNaturalTarget()) - theA = ParticleTable::drawRandomNaturalIsotope(Z); - else - theA = A; - initializeTarget(theA, theZ, theS); +//D + //reset + G4bool ProtonIsTheVictim = false; + G4bool NeutronIsTheVictim = false; + theEventInfo.annihilationP = false; + theEventInfo.annihilationN = false; + + //G4double AnnihilationBarrier = kineticEnergy; + if(projectileSpecies.theType == antiProton && kineticEnergy <= theConfig->getAtrestThreshold()){ + G4double SpOverSn = 1.331;//from experiments with deuteron (E.Klempt) + //INCL_WARN("theA number set to A-1 from " << A <<'\n'); + + G4double neutronprob; + if(theConfig->isNaturalTarget()){ // A = 0 in this case + theA = ParticleTable::drawRandomNaturalIsotope(Z) - 1; //43 and 61 are ok (Technetium and Promethium) + neutronprob = (theA + 1 - Z)/(theA + 1 - Z + SpOverSn*Z); + } + else{ + theA = A - 1; + neutronprob = (A - Z)/(A - Z + SpOverSn*Z); //from experiments with deuteron (E.Klempt) + } + + theS = S; + + G4double rndm = Random::shoot(); + if(rndm >= neutronprob){ //proton is annihilated + theEventInfo.annihilationP = true; + theZ = Z - 1; + ProtonIsTheVictim = true; + //INCL_WARN("theZ number set to Z-1 from " << Z << '\n'); + } + else{ //neutron is annihilated + theEventInfo.annihilationN = true; + theZ = Z; + NeutronIsTheVictim = true; + } + } + else{ // not annihilation of pbar + theZ = Z; + theS = S; + if(theConfig->isNaturalTarget()) + theA = ParticleTable::drawRandomNaturalIsotope(Z); //change order + else + theA = A; + } + + AnnihilationType theAType = Def; + if(ProtonIsTheVictim == true && NeutronIsTheVictim == false) + theAType = PType; + if(NeutronIsTheVictim == true && ProtonIsTheVictim == false) + theAType = NType; + +//D + + initializeTarget(theA, theZ, theS, theAType); + // Set the maximum impact parameter maxImpactParameter = CoulombDistortion::maxImpactParameter(projectileSpecies, kineticEnergy, nucleus); INCL_DEBUG("Maximum impact parameter initialised: " << maxImpactParameter << '\n'); // For forced CN events initMaxInteractionDistance(projectileSpecies, kineticEnergy); - - // Set the geometric cross section - theGlobalInfo.geometricCrossSection = - Math::tenPi*std::pow(maxImpactParameter,2); +// Set the geometric cross sectiony section + if(projectileSpecies.theType == antiProton && kineticEnergy <= theConfig->getAtrestThreshold()){ + G4int currentA = A; + if(theConfig->isNaturalTarget()){ + currentA = ParticleTable::drawRandomNaturalIsotope(Z); + } + G4double kineticEnergy2=kineticEnergy; + if (kineticEnergy2 <= 0.) kineticEnergy2=0.001; + theGlobalInfo.geometricCrossSection = 9.7* //normalization factor from Corradini + Math::pi*std::pow((1.840 + 1.120*std::pow(currentA,(1./3.))),2)* + (1. + (Z*G4INCL::PhysicalConstants::eSquared*(currentA+1))/(currentA*kineticEnergy2*(1.840 + 1.120*std::pow(currentA,(1./3.))))); + //xsection formula was borrowed from Corradini et al. https://doi.org/10.1016/j.physletb.2011.09.069 + } + else{ + theGlobalInfo.geometricCrossSection = + Math::tenPi*std::pow(maxImpactParameter,2); + } // Set the minimum remnant size if(projectileSpecies.theA > 0) minRemnantSize = std::min(theA, 4); else minRemnantSize = std::min(theA-1, 4); - return true; } - G4bool INCL::initializeTarget(const G4int A, const G4int Z, const G4int S) { + G4bool INCL::initializeTarget(const G4int A, const G4int Z, const G4int S, AnnihilationType theAType) { delete nucleus; - nucleus = new Nucleus(A, Z, S, theConfig, maxUniverseRadius); + if (theAType==PType || theAType==NType) { + G4double newmaxUniverseRadius=0.; + if (theAType==PType) newmaxUniverseRadius=initUniverseRadiusForAntiprotonAtRest(A+1, Z+1); + else newmaxUniverseRadius=initUniverseRadiusForAntiprotonAtRest(A+1, Z); + nucleus = new Nucleus(A, Z, S, theConfig, newmaxUniverseRadius, theAType); + } + else{ + nucleus = new Nucleus(A, Z, S, theConfig, maxUniverseRadius, theAType); + } nucleus->getStore()->getBook().reset(); - nucleus->initializeParticles(); - + nucleus->initializeParticles(); propagationModel->setNucleus(nucleus); return true; } @@ -248,11 +318,194 @@ namespace G4INCL { const G4int targetZ, const G4int targetS ) { + + ParticleList starlistH2; + + if (projectileSpecies.theType==antiProton && (targetA==1 || targetA==2) && targetZ==1 && targetS==0) { + + if (targetA==1) { + preCascade_pbarH1(projectileSpecies, kineticEnergy); + } else { + preCascade_pbarH2(projectileSpecies, kineticEnergy); + theEventInfo.annihilationP = false; + theEventInfo.annihilationN = false; + + G4double SpOverSn = 1.331; //from experiments with deuteron (E.Klempt) + + ThreeVector dummy(0.,0.,0.); + G4double rndm = Random::shoot()*(SpOverSn+1); + if (rndm <= SpOverSn) { //proton is annihilated + theEventInfo.annihilationP = true; + Particle *p2 = new Particle(Neutron, dummy, dummy); + starlistH2.push_back(p2); + //delete p2; + } else { //neutron is annihilated + theEventInfo.annihilationN = true; + Particle *p2 = new Particle(Proton, dummy, dummy); + starlistH2.push_back(p2); + //delete p2; + } + } + + // File names +#ifdef INCLXX_IN_GEANT4_MODE + if (!G4FindDataDir("G4INCLDATA") ) { + G4ExceptionDescription ed; + ed << " Data missing: set environment variable G4INCLDATA\n" + << " to point to the directory containing data files needed\n" + << " by the INCL++ model" << G4endl; + G4Exception("G4INCLDataFile::readData()","rawppbarFS.dat, ...", FatalException, ed); + } + G4String dataPath0(std::getenv("G4INCLDATA")); + G4String dataPathppbar(dataPath0 + "/rawppbarFS.dat"); + G4String dataPathnpbar(dataPath0 + "/rawnpbarFS.dat"); + G4String dataPathppbark(dataPath0 + "/rawppbarFSkaonic.dat"); + G4String dataPathnpbark(dataPath0 + "/rawnpbarFSkaonic.dat"); +#else + G4string path; + if (theConfig) path = theConfig->getINCLXXDataFilePath(); + G4String dataPathppbar(path + "/rawppbarFS.dat"); + INCL_DEBUG("Reading https://doi.org/10.1016/0375-9474(92)90362-N ppbar final states" << dataPathppbar << '\n'); + G4String dataPathnpbar(path + "/rawnpbarFS.dat"); + INCL_DEBUG("Reading https://doi.org/10.1016/0375-9474(92)90362-N npbar final states" << dataPathnpbar << '\n'); + G4String dataPathppbark(path + "/rawppbarFSkaonic.dat"); + INCL_DEBUG("Reading https://doi.org/10.1016/j.physrep.2005.03.002 ppbar kaonic final states" << dataPathppbark << '\n'); + G4String dataPathnpbark(path + "/rawnpbarFSkaonic.dat"); + INCL_DEBUG("Reading https://doi.org/10.1007/BF02818764 and https://link.springer.com/article/10.1007/BF02754930 npbar kaonic final states" << dataPathnpbark << '\n'); + #endif + + //read probabilities and particle types from file + std::vector probabilities; //will store each FS yield + std::vector> particle_types; //will store particle names + G4double sum = 0.0; //will contain a sum of probabilities of all FS in the file + G4double kaonicFSprob=0.05; //probability to kave kaonic FS + + ParticleList starlist; + ThreeVector mommy; //momentum to be assigned later + + G4double rdm = Random::shoot(); + ThreeVector annihilationPosition(0.,0.,0.); + if (rdm < (1.-kaonicFSprob)) { // pionic FS was chosen + INCL_DEBUG("pionic pp final state chosen" << '\n'); + sum = read_file(dataPathppbar, probabilities, particle_types); + rdm = (rdm/(1.-kaonicFSprob))*sum; //99.88 normalize by the sum of probabilities in the file + //now get the line number in the file where the FS particles are stored: + G4int n = findStringNumber(rdm, probabilities); + for (G4int j = 0; j < static_cast(particle_types[n].size()); j++) { + if (particle_types[n][j] == "pi0") { + Particle *p = new Particle(PiZero, mommy, annihilationPosition); + starlist.push_back(p); + } else if (particle_types[n][j] == "pi-") { + Particle *p = new Particle(PiMinus, mommy, annihilationPosition); + starlist.push_back(p); + } else if (particle_types[n][j] == "pi+") { + Particle *p = new Particle(PiPlus, mommy, annihilationPosition); + starlist.push_back(p); + } else if (particle_types[n][j] == "omega") { + Particle *p = new Particle(Omega, mommy, annihilationPosition); + starlist.push_back(p); + } else if (particle_types[n][j] == "eta") { + Particle *p = new Particle(Eta, mommy, annihilationPosition); + starlist.push_back(p); + } else if (particle_types[n][j] == "rho-") { + Particle *p = new Particle(PiMinus, mommy, annihilationPosition); + starlist.push_back(p); + Particle *pp = new Particle(PiZero, mommy, annihilationPosition); + starlist.push_back(pp); + } else if (particle_types[n][j] == "rho+") { + Particle *p = new Particle(PiPlus, mommy, annihilationPosition); + starlist.push_back(p); + Particle *pp = new Particle(PiZero, mommy, annihilationPosition); + starlist.push_back(pp); + } else if (particle_types[n][j] == "rho0") { + Particle *p = new Particle(PiMinus, mommy, annihilationPosition); + starlist.push_back(p); + Particle *pp = new Particle(PiPlus, mommy, annihilationPosition); + starlist.push_back(pp); + } else { + INCL_ERROR("Some non-existing FS particle detected when reading pbar FS files"); + for (int jj = 0; jj < static_cast(particle_types[n].size()); jj++) { + G4cout << "gotcha! " << particle_types[n][jj] << G4endl; + } + G4cout << "Some non-existing FS particle detected when reading pbar FS files" << G4endl; + } + } + } else { + INCL_DEBUG("kaonic pp final state chosen" << '\n'); + sum = read_file(dataPathppbark, probabilities, particle_types); + rdm = ((1.-rdm)/kaonicFSprob)*sum; //2670 normalize by the sum of probabilities in the file + //now get the line number in the file where the FS particles are stored: + G4int n = findStringNumber(rdm, probabilities); + for (G4int j = 0; j < static_cast(particle_types[n].size()); j++) { + if (particle_types[n][j] == "pi0") { + Particle *p = new Particle(PiZero, mommy, annihilationPosition); + starlist.push_back(p); + } else if (particle_types[n][j] == "pi-") { + Particle *p = new Particle(PiMinus, mommy, annihilationPosition); + starlist.push_back(p); + } else if (particle_types[n][j] == "pi+") { + Particle *p = new Particle(PiPlus, mommy, annihilationPosition); + starlist.push_back(p); + } else if (particle_types[n][j] == "omega") { + Particle *p = new Particle(Omega, mommy, annihilationPosition); + starlist.push_back(p); + } else if (particle_types[n][j] == "eta") { + Particle *p = new Particle(Eta, mommy, annihilationPosition); + starlist.push_back(p); + } else if (particle_types[n][j] == "K-") { + Particle *p = new Particle(KMinus, mommy, annihilationPosition); + starlist.push_back(p); + } else if (particle_types[n][j] == "K+") { + Particle *p = new Particle(KPlus, mommy, annihilationPosition); + starlist.push_back(p); + } else if (particle_types[n][j] == "K0") { + Particle *p = new Particle(KZero, mommy, annihilationPosition); + starlist.push_back(p); + } else if (particle_types[n][j] == "K0b") { + Particle *p = new Particle(KZeroBar, mommy, annihilationPosition); + starlist.push_back(p); + } else { + INCL_ERROR("Some non-existing FS particle detected when reading pbar FS files"); + for (int jj = 0; jj < static_cast(particle_types[n].size()); jj++) { + G4cout << "gotcha! " << particle_types[n][jj] << G4endl; + } + G4cout << "Some non-existing FS particle detected when reading pbar FS files" << G4endl; + } + } + } + + //compute energies of mesons with a phase-space model + G4double energyOfMesonStar=ParticleTable::getRealMass(Proton)+ParticleTable::getRealMass(antiProton); + if (starlist.size() < 2) { + INCL_ERROR("should never happen, at least 2 final state particles!" << '\n'); + } else if (starlist.size() == 2) { + ParticleIter first = starlist.begin(); + ParticleIter last = std::next(first, 1); + G4double m1 = (*first)->getMass(); + G4double m2 = (*last)->getMass(); + G4double s = energyOfMesonStar*energyOfMesonStar; + G4double mom1 = std::sqrt(s/4. - (std::pow(m1,2) + std::pow(m2,2))/2. - std::pow(m1,2)*std::pow(m2,2)/s + (std::pow(m1,4) + 2.*std::pow(m1*m2,2) + std::pow(m2,4))/(4.*s)); + ThreeVector momentello = Random::normVector(mom1); + (*first)->setMomentum(momentello); + (*first)->adjustEnergyFromMomentum(); + (*last)->setMomentum(-momentello); + (*last)->adjustEnergyFromMomentum(); + } else { + PhaseSpaceGenerator::generate(energyOfMesonStar, starlist); + } + + if (targetA==1) postCascade_pbarH1(starlist); + else postCascade_pbarH2(starlist,starlistH2); + + theGlobalInfo.nShots++; + return theEventInfo; + } // pbar on H1 + // ReInitialize the bias vector Particle::INCLBiasVector.clear(); //Particle::INCLBiasVector.Clear(); Particle::nextBiasedCollisionID = 0; - + // Set the target and the projectile targetInitSuccess = prepareReaction(projectileSpecies, kineticEnergy, targetA, targetZ, targetS); @@ -267,7 +520,7 @@ namespace G4INCL { const G4bool canRunCascade = preCascade(projectileSpecies, kineticEnergy); if(canRunCascade) { cascade(); - postCascade(); + postCascade(projectileSpecies, kineticEnergy); cascadeAction->afterCascadeAction(nucleus); } updateGlobalInfo(); @@ -277,26 +530,45 @@ namespace G4INCL { G4bool INCL::preCascade(ParticleSpecies const &projectileSpecies, const G4double kineticEnergy) { // Reset theEventInfo theEventInfo.reset(); - + EventInfo::eventNumber++; // Fill in the event information theEventInfo.projectileType = projectileSpecies.theType; - theEventInfo.Ap = (G4INCL::Short_t)projectileSpecies.theA; - theEventInfo.Zp = (G4INCL::Short_t)projectileSpecies.theZ; - theEventInfo.Sp = (G4INCL::Short_t)projectileSpecies.theS; + theEventInfo.Ap = (Short_t)projectileSpecies.theA; + theEventInfo.Zp = (Short_t)projectileSpecies.theZ; + theEventInfo.Sp = (Short_t)projectileSpecies.theS; theEventInfo.Ep = kineticEnergy; - theEventInfo.At = (G4INCL::Short_t)nucleus->getA(); - theEventInfo.Zt = (G4INCL::Short_t)nucleus->getZ(); - theEventInfo.St = (G4INCL::Short_t)nucleus->getS(); + theEventInfo.St = (Short_t)nucleus->getS(); + if(nucleus->getAnnihilationType()==PType){ + theEventInfo.annihilationP = true; + theEventInfo.At = (Short_t)nucleus->getA()+1; + theEventInfo.Zt = (Short_t)nucleus->getZ()+1; + } + else if(nucleus->getAnnihilationType()==NType){ + theEventInfo.annihilationN = true; + theEventInfo.At = (Short_t)nucleus->getA()+1; + theEventInfo.Zt = (Short_t)nucleus->getZ(); + } + else { + theEventInfo.At = (Short_t)nucleus->getA(); + theEventInfo.Zt = (Short_t)nucleus->getZ(); + } // Do nothing below the Coulomb barrier if(maxImpactParameter<=0.) { // Fill in the event information - theEventInfo.transparent = true; - - return false; + //Particle *pbar = new Particle; + //PbarAtrestEntryChannel *obj = new PbarAtrestEntryChannel(nucleus, pbar); + if(projectileSpecies.theType == antiProton && kineticEnergy <= theConfig->getAtrestThreshold()){ //D + INCL_DEBUG("at rest annihilation" << '\n'); + //theEventInfo.transparent = false; + } else { + theEventInfo.transparent = true; + return false; + } } + // Randomly draw an impact parameter or use a fixed value, depending on the // Config option @@ -317,7 +589,6 @@ namespace G4INCL { if(effectiveImpactParameter < 0.) { // Fill in the event information theEventInfo.transparent = true; - return false; } @@ -374,7 +645,7 @@ namespace G4INCL { delete finalState; } - void INCL::postCascade() { + void INCL::postCascade(const ParticleSpecies &projectileSpecies, const G4double kineticEnergy) { // Fill in the event information theEventInfo.stoppingTime = propagationModel->getCurrentTime(); @@ -382,18 +653,22 @@ namespace G4INCL { theEventInfo.eventBias = (Double_t) Particle::getTotalBias(); // Forced CN? - if(nucleus->getTryCompoundNucleus()) { - INCL_DEBUG("Trying compound nucleus" << '\n'); - makeCompoundNucleus(); - theEventInfo.transparent = forceTransparent; + if(!(projectileSpecies.theType==antiProton && kineticEnergy<=theConfig->getAtrestThreshold())){ + if(nucleus->getTryCompoundNucleus()) { + INCL_DEBUG("Trying compound nucleus" << '\n'); + makeCompoundNucleus(); + theEventInfo.transparent = forceTransparent; // Global checks of conservation laws #ifndef INCLXX_IN_GEANT4_MODE if(!theEventInfo.transparent) globalConservationChecks(true); #endif return; + } } - theEventInfo.transparent = forceTransparent || nucleus->isEventTransparent(); + if(!(projectileSpecies.theType==antiProton && kineticEnergy<=theConfig->getAtrestThreshold())){ + theEventInfo.transparent = forceTransparent || nucleus->isEventTransparent(); + } if(theEventInfo.transparent) { ProjectileRemnant * const projectileRemnant = nucleus->getProjectileRemnant(); @@ -487,7 +762,7 @@ namespace G4INCL { } // Cluster decay - theEventInfo.clusterDecay = nucleus->decayOutgoingClusters() || nucleus->decayMe(); + theEventInfo.clusterDecay = nucleus->decayOutgoingClusters() || nucleus->decayMe(); //D #ifndef INCLXX_IN_GEANT4_MODE // Global checks of conservation laws @@ -645,7 +920,7 @@ namespace G4INCL { theEventInfo.emitKaon = nucleus->emitInsideKaon(); // Cluster decay - theEventInfo.clusterDecay = nucleus->decayOutgoingClusters() || nucleus->decayMe(); + theEventInfo.clusterDecay = nucleus->decayOutgoingClusters() || nucleus->decayMe(); //D // Fill the EventInfo structure nucleus->fillEventInfo(&theEventInfo); @@ -662,7 +937,6 @@ namespace G4INCL { } else { INCL_WARN("Couldn't accommodate remnant recoil while satisfying energy conservation, root-finding algorithm failed." << '\n'); } - } #ifndef INCLXX_IN_GEANT4_MODE @@ -861,10 +1135,36 @@ namespace G4INCL { || p.theType==SigmaMinus) { const G4double interactionDistanceYN = CrossSections::interactionDistanceYN(kineticEnergy); maxUniverseRadius = rMax + interactionDistanceYN; + } + else if(p.theType==antiProton) { + maxUniverseRadius = rMax; //check interaction distance!!! } INCL_DEBUG("Initialised universe radius: " << maxUniverseRadius << '\n'); } + + G4double INCL::initUniverseRadiusForAntiprotonAtRest(const G4int A, const G4int Z) { + G4double rMax = 0.0; + if(A==0) { + IsotopicDistribution const &anIsotopicDistribution = + ParticleTable::getNaturalIsotopicDistribution(Z); + IsotopeVector theIsotopes = anIsotopicDistribution.getIsotopes(); + for(IsotopeIter i=theIsotopes.begin(), e=theIsotopes.end(); i!=e; ++i) { + const G4double pMaximumRadius = ParticleTable::getMaximumNuclearRadius(Proton, i->theA, Z); + const G4double nMaximumRadius = ParticleTable::getMaximumNuclearRadius(Neutron, i->theA, Z); + const G4double maximumRadius = std::max(pMaximumRadius, nMaximumRadius); + rMax = std::max(maximumRadius, rMax); + } + } else { + const G4double pMaximumRadius = ParticleTable::getMaximumNuclearRadius(Proton, A, Z); + const G4double nMaximumRadius = ParticleTable::getMaximumNuclearRadius(Neutron, A, Z); + const G4double maximumRadius = std::max(pMaximumRadius, nMaximumRadius); + rMax = std::max(maximumRadius, rMax); + } + return rMax; + } + + void INCL::updateGlobalInfo() { // Increment the global counter for the number of shots theGlobalInfo.nShots++; @@ -893,4 +1193,173 @@ namespace G4INCL { theGlobalInfo.nEnergyViolationInteraction += theEventInfo.nEnergyViolationInteraction; } + + G4double INCL::read_file(std::string filename, std::vector& probabilities, + std::vector>& particle_types) { + std::ifstream file(filename); + G4double sum_probs = 0.0; + if (file.is_open()) { + G4String line; + while (getline(file, line)) { + std::istringstream iss(line); + G4double prob; + iss >> prob; + sum_probs += prob; + probabilities.push_back(prob); + std::vector types; + G4String type; + while (iss >> type) { + types.push_back(type); + } + particle_types.push_back(types); + } + } else { + G4cout << "ERROR no fread_file " << filename << G4endl; + } + return sum_probs; + } + + + G4int INCL::findStringNumber(G4double rdm, std::vector yields) { + G4int stringNumber = -1; + G4double smallestsum = 0.0; + G4double biggestsum = yields[0]; + //G4cout << "initial input " << rdm << G4endl; + for (G4int i = 0; i < static_cast(yields.size()); i++) { + if (rdm >= smallestsum && rdm <= biggestsum) { + //G4cout << smallestsum << " and " << biggestsum << G4endl; + stringNumber = i; + } + smallestsum += yields[i]; + biggestsum += yields[i+1]; + } + if(stringNumber==-1){ + INCL_ERROR("ERROR in findStringNumber (stringNumber=-1)"); + G4cout << "ERROR in findStringNumber" << G4endl; + } + return stringNumber; + } + + + void INCL::preCascade_pbarH1(ParticleSpecies const &projectileSpecies, const G4double kineticEnergy) { + // Reset theEventInfo + theEventInfo.reset(); + + EventInfo::eventNumber++; + + // Fill in the event information + theEventInfo.projectileType = projectileSpecies.theType; + theEventInfo.Ap = -1; + theEventInfo.Zp = -1; + theEventInfo.Sp = 0; + theEventInfo.Ep = kineticEnergy; + theEventInfo.St = 0; + theEventInfo.At = 1; + theEventInfo.Zt = 1; + } + + + void INCL::postCascade_pbarH1(ParticleList const &outgoingParticles) { + theEventInfo.nParticles = 0; + + // Reset the remnant counter + theEventInfo.nRemnants = 0; + theEventInfo.history.clear(); + + for(ParticleIter i=outgoingParticles.begin(), e=outgoingParticles.end(); i!=e; ++i ) { + theEventInfo.A[theEventInfo.nParticles] = (Short_t)(*i)->getA(); + theEventInfo.Z[theEventInfo.nParticles] = (Short_t)(*i)->getZ(); + theEventInfo.S[theEventInfo.nParticles] = (Short_t)(*i)->getS(); + theEventInfo.EKin[theEventInfo.nParticles] = (*i)->getKineticEnergy(); + ThreeVector mom = (*i)->getMomentum(); + theEventInfo.px[theEventInfo.nParticles] = mom.getX(); + theEventInfo.py[theEventInfo.nParticles] = mom.getY(); + theEventInfo.pz[theEventInfo.nParticles] = mom.getZ(); + theEventInfo.theta[theEventInfo.nParticles] = Math::toDegrees(mom.theta()); + theEventInfo.phi[theEventInfo.nParticles] = Math::toDegrees(mom.phi()); + theEventInfo.origin[theEventInfo.nParticles] = -1; +#ifdef INCLXX_IN_GEANT4_MODE + theEventInfo.parentResonancePDGCode[theEventInfo.nParticles] = (*i)->getParentResonancePDGCode(); + theEventInfo.parentResonanceID[theEventInfo.nParticles] = (*i)->getParentResonanceID(); +#endif + theEventInfo.history.push_back(""); + ParticleSpecies pt((*i)->getType()); + theEventInfo.PDGCode[theEventInfo.nParticles] = pt.getPDGCode(); + theEventInfo.nParticles++; + } + theEventInfo.nCascadeParticles = theEventInfo.nParticles; + } + + + void INCL::preCascade_pbarH2(ParticleSpecies const &projectileSpecies, const G4double kineticEnergy) { + // Reset theEventInfo + theEventInfo.reset(); + + EventInfo::eventNumber++; + + // Fill in the event information + theEventInfo.projectileType = projectileSpecies.theType; + theEventInfo.Ap = -1; + theEventInfo.Zp = -1; + theEventInfo.Sp = 0; + theEventInfo.Ep = kineticEnergy; + theEventInfo.St = 0; + theEventInfo.At = 2; + theEventInfo.Zt = 1; + } + + + void INCL::postCascade_pbarH2(ParticleList const &outgoingParticles, ParticleList const &H2Particles) { + theEventInfo.nParticles = 0; + + // Reset the remnant counter + theEventInfo.nRemnants = 0; + theEventInfo.history.clear(); + + for(ParticleIter i=outgoingParticles.begin(), e=outgoingParticles.end(); i!=e; ++i ) { + theEventInfo.A[theEventInfo.nParticles] = (Short_t)(*i)->getA(); + theEventInfo.Z[theEventInfo.nParticles] = (Short_t)(*i)->getZ(); + theEventInfo.S[theEventInfo.nParticles] = (Short_t)(*i)->getS(); + theEventInfo.EKin[theEventInfo.nParticles] = (*i)->getKineticEnergy(); + ThreeVector mom = (*i)->getMomentum(); + theEventInfo.px[theEventInfo.nParticles] = mom.getX(); + theEventInfo.py[theEventInfo.nParticles] = mom.getY(); + theEventInfo.pz[theEventInfo.nParticles] = mom.getZ(); + theEventInfo.theta[theEventInfo.nParticles] = Math::toDegrees(mom.theta()); + theEventInfo.phi[theEventInfo.nParticles] = Math::toDegrees(mom.phi()); + theEventInfo.origin[theEventInfo.nParticles] = -1; +#ifdef INCLXX_IN_GEANT4_MODE + theEventInfo.parentResonancePDGCode[theEventInfo.nParticles] = (*i)->getParentResonancePDGCode(); + theEventInfo.parentResonanceID[theEventInfo.nParticles] = (*i)->getParentResonanceID(); +#endif + theEventInfo.history.push_back(""); + ParticleSpecies pt((*i)->getType()); + theEventInfo.PDGCode[theEventInfo.nParticles] = pt.getPDGCode(); + theEventInfo.nParticles++; + } + + for(ParticleIter i=H2Particles.begin(), e=H2Particles.end(); i!=e; ++i ) { + theEventInfo.A[theEventInfo.nParticles] = (Short_t)(*i)->getA(); + theEventInfo.Z[theEventInfo.nParticles] = (Short_t)(*i)->getZ(); + theEventInfo.S[theEventInfo.nParticles] = (Short_t)(*i)->getS(); + theEventInfo.EKin[theEventInfo.nParticles] = (*i)->getKineticEnergy(); + ThreeVector mom = (*i)->getMomentum(); + theEventInfo.px[theEventInfo.nParticles] = mom.getX(); + theEventInfo.py[theEventInfo.nParticles] = mom.getY(); + theEventInfo.pz[theEventInfo.nParticles] = mom.getZ(); + theEventInfo.theta[theEventInfo.nParticles] = Math::toDegrees(mom.theta()); + theEventInfo.phi[theEventInfo.nParticles] = Math::toDegrees(mom.phi()); + theEventInfo.origin[theEventInfo.nParticles] = -1; +#ifdef INCLXX_IN_GEANT4_MODE + theEventInfo.parentResonancePDGCode[theEventInfo.nParticles] = (*i)->getParentResonancePDGCode(); + theEventInfo.parentResonanceID[theEventInfo.nParticles] = (*i)->getParentResonanceID(); +#endif + theEventInfo.history.push_back(""); + ParticleSpecies pt((*i)->getType()); + theEventInfo.PDGCode[theEventInfo.nParticles] = pt.getPDGCode(); + theEventInfo.nParticles++; + } + theEventInfo.nCascadeParticles = theEventInfo.nParticles; + } + } diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLDeltaDecayChannel.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLDeltaDecayChannel.cc index 386267f6d0b..5f51d80d9b3 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLDeltaDecayChannel.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLDeltaDecayChannel.cc @@ -133,12 +133,16 @@ namespace G4INCL { theParticle->setHelicity(0.0); ParticleType pionType; +#ifdef INCLXX_IN_GEANT4_MODE G4int deltaPDGCode = 0; +#endif switch(theParticle->getType()) { case DeltaPlusPlus: theParticle->setType(Proton); pionType = PiPlus; - deltaPDGCode = 2224; +#ifdef INCLXX_IN_GEANT4_MODE + deltaPDGCode = 2224; +#endif break; case DeltaPlus: if(Random::shoot() < 1.0/3.0) { @@ -148,7 +152,9 @@ namespace G4INCL { theParticle->setType(Proton); pionType = PiZero; } - deltaPDGCode = 2214; +#ifdef INCLXX_IN_GEANT4_MODE + deltaPDGCode = 2214; +#endif break; case DeltaZero: if(Random::shoot() < 1.0/3.0) { @@ -158,12 +164,16 @@ namespace G4INCL { theParticle->setType(Neutron); pionType = PiZero; } - deltaPDGCode = 2114; +#ifdef INCLXX_IN_GEANT4_MODE + deltaPDGCode = 2114; +#endif break; case DeltaMinus: theParticle->setType(Neutron); pionType = PiMinus; - deltaPDGCode = 1114; +#ifdef INCLXX_IN_GEANT4_MODE + deltaPDGCode = 1114; +#endif break; default: INCL_FATAL("Unrecognized delta type; type=" << theParticle->getType() << '\n'); @@ -185,6 +195,7 @@ namespace G4INCL { theParticle->setMomentum(-pionMomentum); theParticle->adjustEnergyFromMomentum(); +#ifdef INCLXX_IN_GEANT4_MODE // Set the information about the parent resonance for the two daughters // (as unique, integer ID, we take the rounded integer of the resonance mass in keV) G4int parentResonanceID = static_cast(round(deltaMass/CLHEP::keV)); @@ -192,6 +203,7 @@ namespace G4INCL { pion->setParentResonanceID(parentResonanceID); theParticle->setParentResonancePDGCode(deltaPDGCode); theParticle->setParentResonanceID(parentResonanceID); +#endif fs->addModifiedParticle(theParticle); fs->addCreatedParticle(pion); diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLInteractionAvatar.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLInteractionAvatar.cc index 14fa5ec394c..5b2e38de5a8 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLInteractionAvatar.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLInteractionAvatar.cc @@ -431,15 +431,16 @@ namespace G4INCL { } else { (*i)->setPotentialEnergy(0.); } + //jcd if(shouldUseLocalEnergy && !(*i)->isPion()) { // This translates AECSVT's loops 1, 3 and 4 - if(shouldUseLocalEnergy && !(*i)->isPion() && !(*i)->isEta() && !(*i)->isOmega() && - !(*i)->isKaon() && !(*i)->isAntiKaon() && !(*i)->isSigma() && !(*i)->isLambda()) { // This translates AECSVT's loops 1, 3 and 4 + if(shouldUseLocalEnergy && !(*i)->isPion() && !(*i)->isEta() && !(*i)->isOmega() && + !(*i)->isKaon() && !(*i)->isAntiKaon() && !(*i)->isSigma() && !(*i)->isPhoton() && !(*i)->isLambda()) { // This translates AECSVT's loops 1, 3 and 4 // assert(theNucleus); // Local energy without a nucleus doesn't make sense - const G4double energy = (*i)->getEnergy(); // Store the energy of the particle - G4double locE = KinematicsUtils::getLocalEnergy(theNucleus, *i); // Initial value of local energy - G4double locEOld; - G4double deltaLocE = InteractionAvatar::locEAccuracy + 1E3; - for(G4int iterLocE=0; + const G4double energy = (*i)->getEnergy(); // Store the energy of the particle + G4double locE = KinematicsUtils::getLocalEnergy(theNucleus, *i); // Initial value of local energy + G4double locEOld; + G4double deltaLocE = InteractionAvatar::locEAccuracy + 1E3; + for(G4int iterLocE=0; deltaLocE>InteractionAvatar::locEAccuracy && iterLocEupdatePotentialEnergy(*i); // ...update its potential energy... locE = KinematicsUtils::getLocalEnergy(theNucleus, *i); // ...and recompute locE. deltaLocE = std::abs(locE-locEOld); - } } + } //jlrs For lambdas and nuclei with masses higher than 19 also local energy - if(shouldUseLocalEnergy && (*i)->isLambda() && theNucleus->getA()>19) { + if(shouldUseLocalEnergy && (*i)->isLambda() && theNucleus->getA()>19) { // assert(theNucleus); // Local energy without a nucleus doesn't make sense - const G4double energy = (*i)->getEnergy(); // Store the energy of the particle - G4double locE = KinematicsUtils::getLocalEnergy(theNucleus, *i); // Initial value of local energy - G4double locEOld; - G4double deltaLocE = InteractionAvatar::locEAccuracy + 1E3; - for(G4int iterLocE=0; + const G4double energy = (*i)->getEnergy(); // Store the energy of the particle + G4double locE = KinematicsUtils::getLocalEnergy(theNucleus, *i); // Initial value of local energy + G4double locEOld; + G4double deltaLocE = InteractionAvatar::locEAccuracy + 1E3; + for(G4int iterLocE=0; deltaLocE>InteractionAvatar::locEAccuracy && iterLocEupdatePotentialEnergy(*i); // ...update its potential energy... locE = KinematicsUtils::getLocalEnergy(theNucleus, *i); // ...and recompute locE. deltaLocE = std::abs(locE-locEOld); - } } + } } } diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLKinematicsUtils.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLKinematicsUtils.cc index 3689c0c34c0..136a2d93a11 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLKinematicsUtils.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLKinematicsUtils.cc @@ -43,7 +43,7 @@ namespace G4INCL { namespace KinematicsUtils { void transformToLocalEnergyFrame(Nucleus const * const n, Particle * const p) { -// assert(!p->isMeson()); // No local energy for mesons +// assert(!p->isMeson() && !p->isPhoton()); // No local energy for mesons //D nor for photons! const G4double localEnergy = getLocalEnergy(n, p); const G4double localTotalEnergy = p->getEnergy() - localEnergy; p->setEnergy(localTotalEnergy); @@ -51,7 +51,7 @@ namespace G4INCL { } G4double getLocalEnergy(Nucleus const * const n, Particle * const p) { -// assert(!p->isMeson()); // No local energy for mesons +// assert(!p->isMeson() && !p->isPhoton()); // No local energy for mesons //D photons are bad too! G4double vloc = 0.0; const G4double r = p->getPosition().mag(); diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNNToMissingStrangenessChannel.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNNToMissingStrangenessChannel.cc index edd8e9e2507..056565790a6 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNNToMissingStrangenessChannel.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNNToMissingStrangenessChannel.cc @@ -70,6 +70,8 @@ namespace G4INCL { G4double rdm = Random::shoot(); + //G4int nbr_particle = 3; + if(rdm < 0.35){ // N-K-Lambda chosen particle2->setType(Lambda); @@ -79,6 +81,7 @@ namespace G4INCL { } else if((iso == 0 && rdm < 0.55) || rdm < 0.5){ // N-N-K-Kb chosen + //nbr_particle++; available_iso = 4; min_pions = 1; max_pions = G4int((sqrtS-2.*ParticleTable::getINCLMass(Proton)-2.*ParticleTable::getINCLMass(KZero))/ParticleTable::getINCLMass(PiPlus)); @@ -94,6 +97,7 @@ namespace G4INCL { nbr_pions = std::min(max_pions,std::max(min_pions,G4int(intermediaire ))); available_iso += nbr_pions*2; + //nbr_particle += nbr_pions; ParticleList list; ParticleType PionType = PiZero; diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToLK2piChannel.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToLK2piChannel.cc index b581cbfc5c3..69ebfe27886 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToLK2piChannel.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToLK2piChannel.cc @@ -130,11 +130,13 @@ namespace G4INCL { nucleon->setType(Lambda); +#ifdef INCLXX_IN_GEANT4_MODE // Erase the parent resonance information of the nucleon and pion nucleon->setParentResonancePDGCode(0); nucleon->setParentResonanceID(0); pion->setParentResonancePDGCode(0); pion->setParentResonanceID(0); +#endif ParticleList list; list.push_back(nucleon); diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToLKChannel.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToLKChannel.cc index e15d27a7fbb..399ffc150e0 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToLKChannel.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToLKChannel.cc @@ -92,12 +92,14 @@ namespace G4INCL { //INCL_DEBUG("NpiToLK " << (pion->getMomentum().theta()) * 180. / G4INCL::Math::pi << '\n'); +#ifdef INCLXX_IN_GEANT4_MODE // Erase the parent resonance information of the nucleon and pion nucleon->setParentResonancePDGCode(0); nucleon->setParentResonanceID(0); pion->setParentResonancePDGCode(0); pion->setParentResonanceID(0); - +#endif + fs->addModifiedParticle(nucleon); fs->addModifiedParticle(pion); diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToLKpiChannel.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToLKpiChannel.cc index 1cf5f24f425..8f53c678297 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToLKpiChannel.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToLKpiChannel.cc @@ -105,12 +105,14 @@ namespace G4INCL { nucleon->setType(Lambda); +#ifdef INCLXX_IN_GEANT4_MODE // Erase the parent resonance information of the nucleon and pion nucleon->setParentResonancePDGCode(0); nucleon->setParentResonanceID(0); pion->setParentResonancePDGCode(0); pion->setParentResonanceID(0); - +#endif + ParticleList list; list.push_back(nucleon); list.push_back(pion); diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToMissingStrangenessChannel.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToMissingStrangenessChannel.cc index e05b77bffa6..b1410d0b8fe 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToMissingStrangenessChannel.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToMissingStrangenessChannel.cc @@ -82,6 +82,8 @@ namespace G4INCL { G4double rdm = Random::shoot(); + //G4int nbr_particle = 2; + if(rdm < 0.35){ // Lambda-K chosen nucleon_initial->setType(Lambda); @@ -91,6 +93,7 @@ namespace G4INCL { } else if((iso == 0 && rdm < 0.55) || rdm < 0.5){ // N-K-Kb chosen + //nbr_particle++; available_iso = 3; min_pions = 1; max_pions = G4int((sqrtS-ParticleTable::getINCLMass(Proton)-2.*ParticleTable::getINCLMass(KZero)-10.)/ParticleTable::getINCLMass(PiPlus)); @@ -106,12 +109,14 @@ namespace G4INCL { nbr_pions = std::min(max_pions,std::max(min_pions,G4int(intermediaire ))); available_iso += nbr_pions*2; - +#ifdef INCLXX_IN_GEANT4_MODE // Erase the parent resonance information of the initial particles particle1->setParentResonancePDGCode(0); particle1->setParentResonanceID(0); particle2->setParentResonancePDGCode(0); particle2->setParentResonanceID(0); +#endif + //nbr_particle += nbr_pions; ParticleList list; ParticleType PionType = PiZero; diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToNKKbChannel.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToNKKbChannel.cc index 03e1b9fd99f..f82671778c1 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToNKKbChannel.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToNKKbChannel.cc @@ -121,12 +121,14 @@ namespace G4INCL { nucleon->setType(ParticleTable::getNucleonType(iso)); } } - + +#ifdef INCLXX_IN_GEANT4_MODE // Erase the parent resonance information of the nucleon and pion nucleon->setParentResonancePDGCode(0); nucleon->setParentResonanceID(0); pion->setParentResonancePDGCode(0); pion->setParentResonanceID(0); +#endif ParticleList list; list.push_back(nucleon); diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToSK2piChannel.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToSK2piChannel.cc index b360ea0a950..6d9d7b7f9c5 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToSK2piChannel.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToSK2piChannel.cc @@ -226,12 +226,14 @@ namespace G4INCL { pion->setType(PiZero); } } - + +#ifdef INCLXX_IN_GEANT4_MODE // Erase the parent resonance information of the nucleon and pion nucleon->setParentResonancePDGCode(0); nucleon->setParentResonanceID(0); pion->setParentResonancePDGCode(0); pion->setParentResonanceID(0); +#endif ParticleList list; list.push_back(nucleon); diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToSKChannel.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToSKChannel.cc index d7dfb4cc41e..d690fb59c1f 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToSKChannel.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToSKChannel.cc @@ -122,12 +122,14 @@ namespace G4INCL { nucleon->adjustEnergyFromMomentum(); pion->adjustEnergyFromMomentum(); +#ifdef INCLXX_IN_GEANT4_MODE // Erase the parent resonance information of the nucleon and pion nucleon->setParentResonancePDGCode(0); nucleon->setParentResonanceID(0); pion->setParentResonancePDGCode(0); pion->setParentResonanceID(0); - +#endif + fs->addModifiedParticle(nucleon); fs->addModifiedParticle(pion); diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToSKpiChannel.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToSKpiChannel.cc index 5563e68ad9c..6c724cdc5b3 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToSKpiChannel.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNpiToSKpiChannel.cc @@ -157,12 +157,14 @@ namespace G4INCL { nucleon->setType(ParticleTable::getSigmaType(iso*2)); } } - + +#ifdef INCLXX_IN_GEANT4_MODE // Erase the parent resonance information of the nucleon and pion nucleon->setParentResonancePDGCode(0); nucleon->setParentResonanceID(0); pion->setParentResonancePDGCode(0); pion->setParentResonanceID(0); +#endif ParticleList list; list.push_back(nucleon); diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNuclearPotentialIsospin.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNuclearPotentialIsospin.cc index 54985b669ea..f3cabd53b85 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNuclearPotentialIsospin.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNuclearPotentialIsospin.cc @@ -106,11 +106,16 @@ namespace G4INCL { vSigmaPlus = -16.; vLambda = 30.; + +//D + //insert new particles here +//D + const G4double asy = (theA - 2.*theZ)/theA; // Jose Luis Rodriguez-Sanchez et al., Rapid Communication PRC 98, 021602 (2018) if (asy > 0.236) vLambda = 40.91; else if (asy > 0.133) vLambda = 56.549 - 678.73*asy + 4905.35*asy*asy - 9789.1*asy*asy*asy; - + const G4double theLambdaSeparationEnergy = ParticleTable::getSeparationEnergy(Lambda,theA,theZ); separationEnergy[PiPlus] = theProtonSeparationEnergy - theNeutronSeparationEnergy; @@ -243,7 +248,11 @@ namespace G4INCL { case Photon: return 0.0; break; - +//D + case antiProton: + return 0.0; + break; +//D case DeltaPlusPlus: return vDeltaPlusPlus; break; diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNucleus.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNucleus.cc index abd1bbede54..b6fecf2ed36 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNucleus.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNucleus.cc @@ -62,10 +62,12 @@ #include #include // #include +#include "G4INCLPbarAtrestEntryChannel.hh" namespace G4INCL { - Nucleus::Nucleus(G4int mass, G4int charge, G4int strangess, Config const * const conf, const G4double universeRadius) + Nucleus::Nucleus(G4int mass, G4int charge, G4int strangess, Config const * const conf, const G4double universeRadius, + AnnihilationType AType) //D : Cluster(charge,mass,strangess,true), theInitialZ(charge), theInitialA(mass), theInitialS(strangess), theNpInitial(0), theNnInitial(0), @@ -81,7 +83,8 @@ namespace G4INCL { isNucleusNucleus(false), theProjectileRemnant(NULL), theDensity(NULL), - thePotential(NULL) + thePotential(NULL), + theAType(AType) { PotentialType potentialType; G4bool pionPotential; @@ -99,6 +102,9 @@ namespace G4INCL { ParticleTable::setProtonSeparationEnergy(thePotential->getSeparationEnergy(Proton)); ParticleTable::setNeutronSeparationEnergy(thePotential->getSeparationEnergy(Neutron)); + if (theAType==PType) theDensity = NuclearDensityFactory::createDensity(theA+1, theZ+1, theS); + else if (theAType==NType) theDensity = NuclearDensityFactory::createDensity(theA+1, theZ, theS); + else theDensity = NuclearDensityFactory::createDensity(theA, theZ, theS); theParticleSampler->setPotential(thePotential); @@ -122,8 +128,8 @@ namespace G4INCL { // Reset the variables connected with the projectile remnant delete theProjectileRemnant; theProjectileRemnant = NULL; - Cluster::initializeParticles(); + for(ParticleIter i=particles.begin(), e=particles.end(); i!=e; ++i) { updatePotentialEnergy(*i); } @@ -223,7 +229,7 @@ namespace G4INCL { totalEnergy += (*p)->getKineticEnergy() - (*p)->getPotentialEnergy(); else if((*p)->isResonance()) totalEnergy += (*p)->getEnergy() - (*p)->getPotentialEnergy() - ParticleTable::effectiveNucleonMass; - else if((*p)->isHyperon()) + else if((*p)->isHyperon() || (*p)->isAntiNucleon()) totalEnergy += (*p)->getEnergy() - (*p)->getPotentialEnergy() - ParticleTable::getRealMass((*p)->getType()); else totalEnergy += (*p)->getEnergy() - (*p)->getPotentialEnergy(); @@ -1010,7 +1016,6 @@ namespace G4INCL { void Nucleus::fillEventInfo(EventInfo *eventInfo) { eventInfo->nParticles = 0; G4bool isNucleonAbsorption = false; - G4bool isPionAbsorption = false; // It is possible to have pion absorption event only if the // projectile is pion. @@ -1061,8 +1066,10 @@ namespace G4INCL { eventInfo->theta[eventInfo->nParticles] = Math::toDegrees(mom.theta()); eventInfo->phi[eventInfo->nParticles] = Math::toDegrees(mom.phi()); eventInfo->origin[eventInfo->nParticles] = -1; +#ifdef INCLXX_IN_GEANT4_MODE eventInfo->parentResonancePDGCode[eventInfo->nParticles] = (*i)->getParentResonancePDGCode(); eventInfo->parentResonanceID[eventInfo->nParticles] = (*i)->getParentResonanceID(); +#endif eventInfo->history.push_back(""); if ((*i)->getType() != Composite) { ParticleSpecies pt((*i)->getType()); @@ -1154,13 +1161,16 @@ namespace G4INCL { eventInfo->nEnergyViolationInteraction = theBook.getEnergyViolationInteraction(); } + + Nucleus::ConservationBalance Nucleus::getConservationBalance(const EventInfo &theEventInfo, const G4bool afterRecoil) const { ConservationBalance theBalance; // Initialise balance variables with the incoming values + INCL_DEBUG("theEventInfo " << theEventInfo.Zt << " " << theEventInfo.At << '\n'); theBalance.Z = theEventInfo.Zp + theEventInfo.Zt; theBalance.A = theEventInfo.Ap + theEventInfo.At; theBalance.S = theEventInfo.Sp + theEventInfo.St; - + INCL_DEBUG("theBalance Z and A " << theBalance.Z << " " << theBalance.A << '\n'); theBalance.energy = getInitialEnergy(); theBalance.momentum = getIncomingMomentum(); @@ -1175,7 +1185,6 @@ namespace G4INCL { theBalance.energy -= (*i)->getEnergy(); // Note that outgoing particles should have the real mass theBalance.momentum -= (*i)->getMomentum(); } - // Projectile-like remnant contribution, if present if(theProjectileRemnant && theProjectileRemnant->getA()>0) { theBalance.Z -= theProjectileRemnant->getZ(); diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLParticleEntryAvatar.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLParticleEntryAvatar.cc index 2f4a2323f1a..90f347e943a 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLParticleEntryAvatar.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLParticleEntryAvatar.cc @@ -38,16 +38,20 @@ #include "G4INCLParticleEntryAvatar.hh" #include "G4INCLIChannel.hh" #include "G4INCLParticleEntryChannel.hh" +#include "G4INCLPbarAtrestEntryChannel.hh" + namespace G4INCL { // ParticleEntryAvatar::ParticleEntryAvatar() // { // } + ParticleEntryAvatar::ParticleEntryAvatar(G4double time, G4INCL::Nucleus *nucleus, - G4INCL::Particle *particle) - :IAvatar(time), theNucleus(nucleus), theParticle(particle) + G4INCL::Particle *particle, + EntryType EType) + :IAvatar(time), theNucleus(nucleus), theParticle(particle), theEType(EType) { setType(ParticleEntryAvatarType); } @@ -69,6 +73,12 @@ namespace G4INCL { } IChannel* ParticleEntryAvatar::getChannel() { - return new ParticleEntryChannel(theNucleus, theParticle); + if(theEType == APAR){ + return new PbarAtrestEntryChannel(theNucleus, theParticle); + INCL_DEBUG("Particle " << theParticle->getID() << " is trying to enter at rest" << '\n'); + } + else { + return new ParticleEntryChannel(theNucleus, theParticle); + } } } diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPbarAtrestEntryChannel.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPbarAtrestEntryChannel.cc new file mode 100644 index 00000000000..68be989b2c2 --- /dev/null +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPbarAtrestEntryChannel.cc @@ -0,0 +1,730 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// INCL++ intra-nuclear cascade model +// Alain Boudard, CEA-Saclay, France +// Joseph Cugnon, University of Liege, Belgium +// Jean-Christophe David, CEA-Saclay, France +// Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland +// Sylvie Leray, CEA-Saclay, France +// Davide Mancusi, CEA-Saclay, France +// +#define INCLXX_IN_GEANT4_MODE 1 + +#include "globals.hh" + +#include "G4INCLPbarAtrestEntryChannel.hh" +#include "G4INCLRootFinder.hh" +#include "G4INCLIntersection.hh" +#include "G4INCLCascade.hh" +#include +#include "G4INCLParticle.hh" +#include "G4INCLKinematicsUtils.hh" +#include "G4INCLBinaryCollisionAvatar.hh" +#include "G4INCLRandom.hh" +#include "G4INCLGlobals.hh" +#include "G4INCLLogger.hh" +#include +#include "G4INCLPhaseSpaceGenerator.hh" +#include +#include +#include +#include +#include "G4INCLHFB.hh" +#include "G4INCLParticleEntryAvatar.hh" +#include "G4INCLNuclearDensityFactory.hh" +#include "G4INCLNDFWoodsSaxon.hh" +#include "G4INCLNDFModifiedHarmonicOscillator.hh" +#include "G4INCLNDFGaussian.hh" +#include "G4INCLNDFParis.hh" +#include +#include +#include +#include +#include + +namespace G4INCL { + + PbarAtrestEntryChannel::PbarAtrestEntryChannel(Nucleus *n, Particle *p) + :theNucleus(n), theParticle(p) + {} + + PbarAtrestEntryChannel::~PbarAtrestEntryChannel() + {} + + //fill probabilities and particle types from datafile and return probability sum for normalization + G4double PbarAtrestEntryChannel::read_file(std::string filename, std::vector& probabilities, std::vector>& particle_types) { + std::ifstream file(filename); + G4double sum_probs = 0.0; + if (file.is_open()) { + std::string line; + while (getline(file, line)) { + std::istringstream iss(line); + G4double prob; + iss >> prob; + sum_probs += prob; + probabilities.push_back(prob); + std::vector types; + std::string type; + while (iss >> type) { + types.push_back(type); + } + particle_types.push_back(types); + } + } + else std::cout << "ERROR no fread_file " << filename << std::endl; + + return sum_probs; + } + + //this function will tell you the FS line number from the datafile based on your random value + G4int PbarAtrestEntryChannel::findStringNumber(G4double rdm, std::vector yields) { + G4int stringNumber = -1; + G4double smallestsum = 0.0; + G4double biggestsum = yields[0]; + //std::cout << "initial input " << rdm << std::endl; + for (G4int i = 0; i < static_cast(yields.size()); i++) { + if (rdm >= smallestsum && rdm <= biggestsum) { + //std::cout << smallestsum << " and " << biggestsum << std::endl; + stringNumber = i; + } + smallestsum += yields[i]; + biggestsum += yields[i+1]; + } + if(stringNumber==-1){ + INCL_ERROR("ERROR in findStringNumber (stringNumber=-1)"); + std::cout << "ERROR in findStringNumber" << std::endl; + } + return stringNumber; + } + + G4double PbarAtrestEntryChannel::fctrl(const G4double arg1){ + G4double factorial=1.0; + for(G4int k=1; k<=arg1; k++){ + factorial *= k; + } + return factorial; + } + G4double PbarAtrestEntryChannel::r1(const G4int n) { + return std::pow(fctrl(2.0*n),-0.5); + } + G4double PbarAtrestEntryChannel::r2(const G4int n) { + G4int Z = theNucleus->getZ(); + return std::pow((Z/(14.4*n)), 1.5); + } + G4double PbarAtrestEntryChannel::r3(G4double x, const G4int n) { + G4int Z = theNucleus->getZ(); + return std::pow((x)*Z/(n*14.4),(n-1)); //why x is vector here? + } + G4double PbarAtrestEntryChannel::r4(G4double x, const G4int n) { + G4int Z = theNucleus->getZ(); + return std::exp((-x*Z)/(n*28.8)); + } + + + G4double PbarAtrestEntryChannel::radial_wavefunction(G4double x, const G4int n){ + return r1(n)*r2(n)*r3(x,n)*r4(x,n); //Radial wave function par=(n, Z) + } + +/* + G4double PbarAtrestEntryChannel::densityP(G4double *x, G4double *par){ + return 0.16800136/(1.0+std::exp((x[0]-par[2])/par[3])); //P nuclear density +*/ + G4double PbarAtrestEntryChannel::densityP(G4double x) { + + const G4bool isProton = ProtonIsTheVictim(); + G4int Z = theNucleus->getZ(); //was modified in Cascade.cc + G4int A = theNucleus->getA(); //was modified in Cascade.cc + A++; //restoration of original A value before annihilation + if(isProton == true){Z++;} //restoration of original Z value before annihilation + + if(A > 19) { + G4double radius = ParticleTable::getRadiusParameter(Proton, A, Z); + G4double diffuseness = ParticleTable::getSurfaceDiffuseness(Proton, A, Z); + G4double maximumRadius = ParticleTable::getMaximumNuclearRadius(Proton, A, Z); + NuclearDensityFunctions::WoodsSaxon rDensityFunction(radius, maximumRadius, diffuseness); + return ((x!=0.) ? rDensityFunction(x)/(x*x) : 1.); + } else if(A <= 19 && A > 6) { + G4double radius = ParticleTable::getRadiusParameter(Proton, A, Z); + G4double diffuseness = ParticleTable::getSurfaceDiffuseness(Proton, A, Z); + G4double maximumRadius = ParticleTable::getMaximumNuclearRadius(Proton, A, Z); + NuclearDensityFunctions::ModifiedHarmonicOscillator rDensityFunction(radius, maximumRadius, diffuseness); + return ((x!=0.) ? rDensityFunction(x)/(x*x) : 1.); + } else if(A <= 6 && A > 2) { // Gaussian distribution for light nuclei + G4double radius = ParticleTable::getRadiusParameter(Proton, A, Z); + G4double maximumRadius = ParticleTable::getMaximumNuclearRadius(Proton, A, Z); + NuclearDensityFunctions::Gaussian rDensityFunction(maximumRadius, Math::oneOverSqrtThree * radius); + return ((x!=0.) ? rDensityFunction(x)/(x*x) : 1.); + } else if(A == 2 && Z == 1) { // density from the Paris potential for deuterons + NuclearDensityFunctions::ParisR rDensityFunction; + return ((x!=0.) ? rDensityFunction(x)/(x*x) : 1.); + } else { + INCL_ERROR("No nuclear density function for target A = " + << A << " Z = " << Z << '\n'); + return 0.0; + } + +} +/* + } + G4double PbarAtrestEntryChannel::densityN(G4double *x, G4double *par){ + return 0.16800136/(1.0+std::exp((x[0]-par[2])/par[3])); //N nuclear density + } +*/ + G4double PbarAtrestEntryChannel::densityN(G4double x) { + + const G4bool isProton = ProtonIsTheVictim(); + G4int Z = theNucleus->getZ(); //was modified in Cascade.cc + G4int A = theNucleus->getA(); //was modified in Cascade.cc + A++; //restoration of original A value before annihilation + if(isProton == true){Z++;} //restoration of original Z value before annihilation + + if(A > 19) { + G4double radius = ParticleTable::getRadiusParameter(Neutron, A, Z); + G4double diffuseness = ParticleTable::getSurfaceDiffuseness(Neutron, A, Z); + G4double maximumRadius = ParticleTable::getMaximumNuclearRadius(Neutron, A, Z); + NuclearDensityFunctions::WoodsSaxon rDensityFunction(radius, maximumRadius, diffuseness); + return ((x!=0.) ? rDensityFunction(x)/(x*x) : 1.); + } else if(A <= 19 && A > 6) { + G4double radius = ParticleTable::getRadiusParameter(Neutron, A, Z); + G4double diffuseness = ParticleTable::getSurfaceDiffuseness(Neutron, A, Z); + G4double maximumRadius = ParticleTable::getMaximumNuclearRadius(Neutron, A, Z); + NuclearDensityFunctions::ModifiedHarmonicOscillator rDensityFunction(radius, maximumRadius, diffuseness); + return ((x!=0.) ? rDensityFunction(x)/(x*x) : 1.); + } else if(A <= 6 && A > 2) { // Gaussian distribution for light nuclei + G4double radius = ParticleTable::getRadiusParameter(Neutron, A, Z); + G4double maximumRadius = ParticleTable::getMaximumNuclearRadius(Neutron, A, Z); + NuclearDensityFunctions::Gaussian rDensityFunction(maximumRadius, Math::oneOverSqrtThree * radius); + return ((x!=0.) ? rDensityFunction(x)/(x*x) : 1.); + } else if(A == 2 && Z == 1) { // density from the Paris potential for deuterons + NuclearDensityFunctions::ParisR rDensityFunction; + return ((x!=0.) ? rDensityFunction(x)/(x*x) : 1.); + } else { + INCL_ERROR("No nuclear density function for target A = " + << A << " Z = " << Z << '\n'); + return 0.0; + } + +} + + + G4double PbarAtrestEntryChannel::overlapP(G4double &x, const G4int n){ + return x*x*r1(n)*r2(n)*r3(x,n)*r4(x,n)*r1(n)*r2(n)*r3(x,n)*r4(x,n)*densityP(x); + } + G4double PbarAtrestEntryChannel::overlapN(G4double &x, const G4int n){ + return x*x*r1(n)*r2(n)*r3(x,n)*r4(x,n)*r1(n)*r2(n)*r3(x,n)*r4(x,n)*densityN(x); + } + + + ParticleList PbarAtrestEntryChannel::makeMesonStar() {//This function creates a set of mesons with momenta + + // File names + #ifdef INCLXX_IN_GEANT4_MODE + if(!G4FindDataDir("G4INCLDATA")) { + G4ExceptionDescription ed; + ed << " Data missing: set environment variable G4INCLDATA\n" + << " to point to the directory containing data files needed\n" + << " by the INCL++ model" << G4endl; + G4Exception("G4INCLDataFile::readData()","rawppbarFS.dat, ...", + FatalException, ed); + } + G4String dataPath0(std::getenv("G4INCLDATA")); + G4String dataPathppbar(dataPath0 + "/rawppbarFS.dat"); + G4String dataPathnpbar(dataPath0 + "/rawnpbarFS.dat"); + G4String dataPathppbark(dataPath0 + "/rawppbarFSkaonic.dat"); + G4String dataPathnpbark(dataPath0 + "/rawnpbarFSkaonic.dat"); + #else + Config const *theConfig=theNucleus->getStore()->getConfig(); + std::string path; + if(theConfig) + path = theConfig->getINCLXXDataFilePath(); + std::string dataPathppbar(path + "/rawppbarFS.dat"); + INCL_DEBUG("Reading https://doi.org/10.1016/0375-9474(92)90362-N ppbar final states" << dataPathppbar << '\n'); + std::string dataPathnpbar(path + "/rawnpbarFS.dat"); + INCL_DEBUG("Reading https://doi.org/10.1016/0375-9474(92)90362-N npbar final states" << dataPathnpbar << '\n'); + std::string dataPathppbark(path + "/rawppbarFSkaonic.dat"); + INCL_DEBUG("Reading https://doi.org/10.1016/j.physrep.2005.03.002 ppbar kaonic final states" << dataPathppbark << '\n'); + std::string dataPathnpbark(path + "/rawnpbarFSkaonic.dat"); + INCL_DEBUG("Reading https://doi.org/10.1007/BF02818764 and https://link.springer.com/article/10.1007/BF02754930 npbar kaonic final states" << dataPathnpbark << '\n'); + #endif + /*std::string path = {"/home/zdemid/INCL/inclcode/data"}; + std::string dataPathppbar(path + "/rawppbarFS.dat"); + INCL_DEBUG("Reading https://doi.org/10.1016/0375-9474(92)90362-N ppbar final states" << dataPathppbar << '\n'); + std::string dataPathnpbar(path + "/rawnpbarFS.dat"); + INCL_DEBUG("Reading https://doi.org/10.1016/0375-9474(92)90362-N npbar final states" << dataPathnpbar << '\n'); + std::string dataPathppbark(path + "/rawppbarFSkaonic.dat"); + INCL_DEBUG("Reading https://doi.org/10.1016/0375-9474(92)90362-N ppbar kaonic final states" << dataPathppbark << '\n'); + std::string dataPathnpbark(path + "/rawnpbarFSkaonic.dat"); + INCL_DEBUG("Reading https://doi.org/10.1016/0375-9474(92)90362-N npbar kaonic final states" << dataPathnpbark << '\n'); + */ + //read probabilities and particle types from file + std::vector probabilities; //will store each FS yield + std::vector> particle_types; //will store particle names + G4double sum; //will contain a sum of probabilities of all FS in the file + G4double kaonicFSprob=0.05; //probability to kave kaonic FS + + const G4bool isProton = ProtonIsTheVictim(); + G4int z = theNucleus->getZ(); //was modified in Cascade.cc + G4int a = theNucleus->getA(); //was modified in Cascade.cc + a++; //restoration of original A value before annihilation + if(isProton == true){z++;} //restoration of original Z value before annihilation + ThreeVector annihilationPosition; + ParticleList starlist; + ThreeVector mommy; //momentum to be assigned later + + //LETS GOOOOOOO!!! + G4double rdm = Random::shoot(); + if(isProton == true){ //protonic annihilation + INCL_DEBUG("Proton is the victim" << '\n'); + if(rdm < (1.-kaonicFSprob)){ // pionic FS was chosen + INCL_DEBUG("pionic pp final state chosen" << '\n'); + sum = read_file(dataPathppbar, probabilities, particle_types); + rdm = (rdm/(1.-kaonicFSprob))*sum; //99.88 normalize by the sum of probabilities in the file + //now get the line number in the file where the FS particles are stored: + G4int n = findStringNumber(rdm, probabilities); + for(G4int j = 0; j < static_cast(particle_types[n].size()); j++){ + if(particle_types[n][j] == "pi0"){ + Particle *p = new Particle(PiZero, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "pi-"){ + Particle *p = new Particle(PiMinus, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "pi+"){ + Particle *p = new Particle(PiPlus, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "omega"){ + Particle *p = new Particle(Omega, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "eta"){ + Particle *p = new Particle(Eta, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "rho-"){ + Particle *p = new Particle(PiMinus, mommy, annihilationPosition); + starlist.push_back(p); + Particle *pp = new Particle(PiZero, mommy, annihilationPosition); + starlist.push_back(pp); + } + else if(particle_types[n][j] == "rho+"){ + Particle *p = new Particle(PiPlus, mommy, annihilationPosition); + starlist.push_back(p); + Particle *pp = new Particle(PiZero, mommy, annihilationPosition); + starlist.push_back(pp); + } + else if(particle_types[n][j] == "rho0"){ + Particle *p = new Particle(PiMinus, mommy, annihilationPosition); + starlist.push_back(p); + Particle *pp = new Particle(PiPlus, mommy, annihilationPosition); + starlist.push_back(pp); + } + else{ + INCL_ERROR("Some non-existing FS particle detected when reading pbar FS files"); + for(G4int jj = 0; jj < static_cast(particle_types[n].size()); jj++){ + std::cout << "gotcha! " << particle_types[n][jj] << std::endl; + } + std::cout << "Some non-existing FS particle detected when reading pbar FS files" << std::endl; + } + } + } + else{ + INCL_DEBUG("kaonic pp final state chosen" << '\n'); + sum = read_file(dataPathppbark, probabilities, particle_types); + rdm = ((1-rdm)/kaonicFSprob)*sum;//2670 normalize by the sum of probabilities in the file + //now get the line number in the file where the FS particles are stored: + G4int n = findStringNumber(rdm, probabilities); + for(G4int j = 0; j < static_cast(particle_types[n].size()); j++){ + if(particle_types[n][j] == "pi0"){ + Particle *p = new Particle(PiZero, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "pi-"){ + Particle *p = new Particle(PiMinus, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "pi+"){ + Particle *p = new Particle(PiPlus, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "omega"){ + Particle *p = new Particle(Omega, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "eta"){ + Particle *p = new Particle(Eta, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "K-"){ + Particle *p = new Particle(KMinus, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "K+"){ + Particle *p = new Particle(KPlus, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "K0"){ + Particle *p = new Particle(KZero, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "K0b"){ + Particle *p = new Particle(KZeroBar, mommy, annihilationPosition); + starlist.push_back(p); + } + else{ + INCL_ERROR("Some non-existing FS particle detected when reading pbar FS files"); + for(G4int jj = 0; jj < static_cast(particle_types[n].size()); jj++){ + std::cout << "gotcha! " << particle_types[n][jj] << std::endl; + } + std::cout << "Some non-existing FS particle detected when reading pbar FS files" << std::endl; + } + } + } + } + else{ //neutronic annihilation + INCL_DEBUG("Neutron is the victim" << '\n'); + if(rdm < (1.-kaonicFSprob)){ // pionic/kaonic choice + INCL_DEBUG("pionic np final state chosen" << '\n'); + sum = read_file(dataPathnpbar, probabilities, particle_types); + rdm = (rdm/(1.-kaonicFSprob))*sum; //99.95 normalize by the sum of probabilities in the file + //now get the line number in the file where the FS particles are stored: + G4int n = findStringNumber(rdm, probabilities); + for(G4int j = 0; j < static_cast(particle_types[n].size()); j++){ + if(particle_types[n][j] == "pi0"){ + Particle *p = new Particle(PiZero, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "pi-"){ + Particle *p = new Particle(PiMinus, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "pi+"){ + Particle *p = new Particle(PiPlus, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "omega"){ + Particle *p = new Particle(Omega, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "eta"){ + Particle *p = new Particle(Eta, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "rho-"){ + Particle *p = new Particle(PiMinus, mommy, annihilationPosition); + starlist.push_back(p); + Particle *pp = new Particle(PiZero, mommy, annihilationPosition); + starlist.push_back(pp); + } + else if(particle_types[n][j] == "rho+"){ + Particle *p = new Particle(PiPlus, mommy, annihilationPosition); + starlist.push_back(p); + Particle *pp = new Particle(PiZero, mommy, annihilationPosition); + starlist.push_back(pp); + } + else if(particle_types[n][j] == "rho0"){ + Particle *p = new Particle(PiMinus, mommy, annihilationPosition); + starlist.push_back(p); + Particle *pp = new Particle(PiPlus, mommy, annihilationPosition); + starlist.push_back(pp); + } + else{ + INCL_ERROR("Some non-existing FS particle detected when reading pbar FS files"); + for(G4int jj = 0; jj < static_cast(particle_types[n].size()); jj++){ + std::cout << "gotcha! " << particle_types[n][jj] << std::endl; + } + std::cout << "Some non-existing FS particle detected when reading pbar FS files" << std::endl; + } + } + } + else{ + INCL_DEBUG("kaonic np final state chosen" << '\n'); + sum = read_file(dataPathnpbark, probabilities, particle_types); + rdm = ((1-rdm)/kaonicFSprob)*sum;//3837 normalize by the sum of probabilities in the file + //now get the line number in the file where the FS particles are stored: + G4int n = findStringNumber(rdm, probabilities); + for(G4int j = 0; j < static_cast(particle_types[n].size()); j++){ + if(particle_types[n][j] == "pi0"){ + Particle *p = new Particle(PiZero, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "pi-"){ + Particle *p = new Particle(PiMinus, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "pi+"){ + Particle *p = new Particle(PiPlus, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "omega"){ + Particle *p = new Particle(Omega, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "eta"){ + Particle *p = new Particle(Eta, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "K-"){ + Particle *p = new Particle(KMinus, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "K+"){ + Particle *p = new Particle(KPlus, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "K0"){ + Particle *p = new Particle(KZero, mommy, annihilationPosition); + starlist.push_back(p); + } + else if(particle_types[n][j] == "K0b"){ + Particle *p = new Particle(KZeroBar, mommy, annihilationPosition); + starlist.push_back(p); + } + else{ + INCL_ERROR("Some non-existing FS particle detected when reading pbar FS files"); + for(G4int jj = 0; jj < static_cast(particle_types[n].size()); jj++){ + std::cout << "gotcha! " << particle_types[n][jj] << std::endl; + } + std::cout << "Some non-existing FS particle detected when reading pbar FS files" << std::endl; + } + } + } + } + + // Correction to the Q-value of the entering particle + G4double theCorrection1 = theParticle->getEmissionPbarQvalueCorrection(a, z, isProton); + G4double theCorrection2 = theParticle->getEmissionPbarQvalueCorrection(a, z, !isProton); + G4double energyOfMesonStar; + if(isProton == true){ + energyOfMesonStar = theParticle->getTableMass() + ParticleTable::getTableMass(a,z,0) + -ParticleTable::getTableMass(a-1,z-1,0); + } + else{ + energyOfMesonStar = theParticle->getTableMass() + ParticleTable::getTableMass(a,z,0) + -ParticleTable::getTableMass(a-1,z,0) + theCorrection2 - theCorrection1; + } + + //compute energies of mesons with a phase-space model + if(starlist.size() < 2){ + INCL_ERROR("should never happen, at least 2 final state particles!" << '\n'); + } + else if(starlist.size() == 2){ + ParticleIter first = starlist.begin(); + ParticleIter last = std::next(first, 1); //starlist.end() gives an error of segfault, idk why + G4double m1 = (*first)->getMass(); + G4double m2 = (*last)->getMass(); + G4double s = energyOfMesonStar*energyOfMesonStar; + G4double mom1 = std::sqrt(s/4 - (std::pow(m1,2) + std::pow(m2,2))/2 - std::pow(m1,2)*std::pow(m2,2)/s + (std::pow(m1,4) + 2*std::pow(m1*m2,2) + std::pow(m2,4))/(4*s)); + ThreeVector momentello = Random::normVector(mom1); //like raffaello :) + (*first)->setMomentum(momentello); + (*first)->adjustEnergyFromMomentum(); + (*last)->setMomentum(-momentello); + (*last)->adjustEnergyFromMomentum(); + //std::cout << (*first)->getEnergy() << std::endl; + } + else{ + PhaseSpaceGenerator::generate(energyOfMesonStar, starlist); + //ParticleIter first = starlist.begin(); + //std::cout << (*first)->getEnergy() << std::endl; + //ParticleIter last = std::next(first, 1); + //std::cout << (*last)->getEnergy() << std::endl; + } + + return starlist; + } + + G4bool PbarAtrestEntryChannel::ProtonIsTheVictim(){ + if(theNucleus->getAnnihilationType() == PType){ + INCL_DEBUG("isProton" << '\n'); + return true; //proton is annihilated + } + else if(theNucleus->getAnnihilationType() == NType){ + INCL_DEBUG("isNeutron" << '\n'); + return false; //neutron is annihilated + } + else{ + INCL_ERROR("should never happen, n or p is your only choice!" << '\n'); + G4double rdm3 = Random::shoot(); + if(rdm3 >= 0.){ + // it is set here for test + return false; + } + else{ + return true; + } + } + } + + //compute energy lost due to binding with electron shell + G4double PbarAtrestEntryChannel::PbarCoulombicCascadeEnergy(G4int A, G4int Z){ + G4double N_ann = n_annihilation(A, Z); + return ParticleTable::getINCLMass(antiProton)*(A/(A+1.))*(Z*Z/(N_ann*N_ann*2.*137.*137.)); + + } + /* Coulombic Cascade Energy formula in Bohr approximation taken from: + Precision spectroscopy of light exotic atoms D. Gotta + Progress in Particle and Nuclear Physics 52 (2004) 133–195 + This is a crude approximation*/ + + ThreeVector PbarAtrestEntryChannel::getAnnihilationPosition(){ + const G4bool isProton = ProtonIsTheVictim(); + G4int z = theNucleus->getZ(); //was modified in Cascade.cc + G4int a = theNucleus->getA(); //was modified in Cascade.cc + G4double n_ann = n_annihilation(a, z); + a++; //not before the n_ann! + + if(isProton == true){z++;} + G4double Rpmax = ParticleTable::getMaximumNuclearRadius(Proton, a, z); + G4double Rnmax = ParticleTable::getMaximumNuclearRadius(Neutron, a, z); + G4double probabilitymax = 0.; //the max value of the probability distribution + G4double probability = 0.0; + G4double radius; + + //now we compute the max value of the probability distribution... + if(isProton == true){ + + for(radius = 0.0; radius < Rpmax; radius = radius + 0.001){ + probability = overlapP(radius, n_ann); + //INCL_WARN("radius, densityP, overlapP: " << radius << " " << densityP(radius) << " " << probability << '\n'); + if(probability > probabilitymax) + probabilitymax = probability; //now it should be the max value of overlapP function + } + } + else{ //neutron + + for(radius = 0.0; radius < Rnmax; radius = radius + 0.001){ + probability = overlapN(radius, n_ann); + //INCL_WARN("radius, densityN, overlapN: " << radius << " " << densityN(radius) << " " << probability << '\n'); + if(probability > probabilitymax) + probabilitymax = probability; //now it should be the max value of overlapP function + } + } + + //we know the limits! start rejection algorithm! + G4double x = 0., y = 0.0001, p_for_x = 0.; + G4double distance = 0.; + if(isProton == true){ + while(y >= p_for_x){ + x = Random::shoot() * Rpmax; // create uniformly random r + y = Random::shoot() * probabilitymax; // create uniformly random prob + p_for_x = overlapP(x, n_ann); //probability call for comparison + if(y <= p_for_x){ //first cut-off is introduced for computational volume reduction + distance = x; + } + } + } + else{ + while(y >= p_for_x){ + x = Random::shoot() * Rnmax; // create uniformly random r + y = Random::shoot() * probabilitymax; // create uniformly random prob + p_for_x = overlapN(x, n_ann); //probability call for comparison + if(y <= p_for_x){ //first cut-off is introduced for computational volume reduction + distance = x; + } + } + } + + //FINAL POSITION VECTOR + ThreeVector annihilationPosition(0., 0., -distance); //3D sphere of distance radius + + + return annihilationPosition; + } + + + G4double PbarAtrestEntryChannel::n_annihilation(G4int A, G4int Z){ + const G4bool isProton = ProtonIsTheVictim(); + G4int z = Z; + G4int a = A; + a++; + if(isProton == true){ + z++; + } + INCL_DEBUG("the original Z value is " << z << '\n'); + INCL_DEBUG("the original A value is " << a << '\n'); + G4double n_ann; //annihilation principal quantum number(interpolation from data H.Poth) + if(z <= 1.){ + n_ann = 1.; + } + else if(z <= 4.){ + n_ann = 2.; + } + else if(z <= 11.){ + n_ann = 3.; + } + else if(z <= 20.){ + n_ann = 4.; + } + else if(z <= 32.){ + n_ann = 5.; + } + else if(z <= 46.){ + n_ann = 6.; + } + else if(z <= 61.){ + n_ann = 7.; + } + else if(z <= 74.){ + n_ann = 8.; + } + else if(z <= 84.){ + n_ann = 9.; + } + else{ + n_ann = 10.; + } + INCL_DEBUG("The following Pbar will annihilate with n = " << n_ann << '\n'); + + return n_ann; + } + + IAvatarList PbarAtrestEntryChannel::bringMesonStar(ParticleList const &pL, Nucleus * const n) { + ThreeVector ann_position = getAnnihilationPosition(); + IAvatarList theAvatarList; + for(ParticleIter p = pL.begin(), e = pL.end(); p!=e; ++p){ + (*p)->setPosition(ann_position); + theAvatarList.push_back(new ParticleEntryAvatar(0.0, n, *p, APAR)); + } + return theAvatarList; + } + + void PbarAtrestEntryChannel::fillFinalState(FinalState *fs) { + //const G4bool isProton = ProtonIsTheVictim(); + //G4int z = theNucleus->getZ(); //was modified in Cascade.cc + //G4int a = theNucleus->getA(); //was modified in Cascade.cc + //a++; //restoration of original A value before annihilation + //if(isProton == true){z++;} //restoration of original Z value before annihilation + const G4double energyBefore = theParticle->getEnergy(); + fs->addEnteringParticle(theParticle); + INCL_DEBUG("Entering particle added " << '\n'); + fs->setTotalEnergyBeforeInteraction(energyBefore); + } + +} + + + diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNElasticChannel.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNElasticChannel.cc index 88499bd2a17..5224ffeb4a9 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNElasticChannel.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNElasticChannel.cc @@ -94,9 +94,11 @@ namespace G4INCL { nucleon->setMomentum(mom_nucleon); pion->setMomentum(-mom_nucleon); - ParticleType startingNucleonType = nucleon->getType(); - ParticleType startingPionType = pion->getType(); - +#ifdef INCLXX_IN_GEANT4_MODE + ParticleType startingNucleonType = nucleon->getType(); + ParticleType startingPionType = pion->getType(); +#endif + G4int iso=ParticleTable::getIsospin(nucleon->getType())+ParticleTable::getIsospin(pion->getType()); if (iso == 1 || iso == -1) { rndm=3*Random::shoot(); @@ -119,14 +121,16 @@ namespace G4INCL { pion->setType(pionType); } - // Erase the parent resonance information if the nucleon or pion changes type - if ( startingNucleonType != nucleon->getType() || startingPionType != pion->getType() ) { - nucleon->setParentResonancePDGCode(0); - nucleon->setParentResonanceID(0); - pion->setParentResonancePDGCode(0); - pion->setParentResonanceID(0); - } - +#ifdef INCLXX_IN_GEANT4_MODE + // Erase the parent resonance information if the nucleon or pion changes type + if ( startingNucleonType != nucleon->getType() || startingPionType != pion->getType() ) { + nucleon->setParentResonancePDGCode(0); + nucleon->setParentResonanceID(0); + pion->setParentResonancePDGCode(0); + pion->setParentResonanceID(0); + } +#endif + fs->addModifiedParticle(nucleon); fs->addModifiedParticle(pion); } diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNToDeltaChannel.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNToDeltaChannel.cc index 1055f20d804..c14c389945c 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNToDeltaChannel.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNToDeltaChannel.cc @@ -87,12 +87,14 @@ namespace G4INCL { nucleon->setType(deltaType); // nucleon becomes the delta nucleon->setEnergy(deltaEnergy); // set the energy of the delta +#ifdef INCLXX_IN_GEANT4_MODE // Erase the parent resonance information of the nucleon and pion nucleon->setParentResonancePDGCode(0); nucleon->setParentResonanceID(0); pion->setParentResonancePDGCode(0); pion->setParentResonanceID(0); - +#endif + ThreeVector deltaMomentum = nucleon->getMomentum() + pion->getMomentum(); nucleon->setMomentum(deltaMomentum); diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNToEtaChannel.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNToEtaChannel.cc index 0cbe73491e0..78738c1b763 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNToEtaChannel.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNToEtaChannel.cc @@ -65,44 +65,43 @@ namespace G4INCL { pion = particle1; } - G4int iso=ParticleTable::getIsospin(nucleon->getType())+ParticleTable::getIsospin(pion->getType()); + G4int iso=ParticleTable::getIsospin(nucleon->getType())+ParticleTable::getIsospin(pion->getType()); // assert(iso == 1 || iso == -1); - if (iso == 1) { + if (iso == 1) { nucleon->setType(Proton); - } - else if (iso == -1) { + } + else if (iso == -1) { nucleon->setType(Neutron); } - pion->setType(Eta); - - // Erase the parent resonance information of the nucleon and pion - nucleon->setParentResonancePDGCode(0); - nucleon->setParentResonanceID(0); - pion->setParentResonancePDGCode(0); - pion->setParentResonanceID(0); - - G4double sh=nucleon->getEnergy()+pion->getEnergy(); - G4double mn=nucleon->getMass(); - G4double me=pion->getMass(); - G4double en=(sh*sh+mn*mn-me*me)/(2*sh); - nucleon->setEnergy(en); - G4double ee=std::sqrt(en*en-mn*mn+me*me); - pion->setEnergy(ee); - G4double pn=std::sqrt(en*en-mn*mn); + pion->setType(Eta); +#ifdef INCLXX_IN_GEANT4_MODE + // Erase the parent resonance information of the nucleon and pion + nucleon->setParentResonancePDGCode(0); + nucleon->setParentResonanceID(0); + pion->setParentResonancePDGCode(0); + pion->setParentResonanceID(0); +#endif + G4double sh=nucleon->getEnergy()+pion->getEnergy(); + G4double mn=nucleon->getMass(); + G4double me=pion->getMass(); + G4double en=(sh*sh+mn*mn-me*me)/(2*sh); + nucleon->setEnergy(en); + G4double ee=std::sqrt(en*en-mn*mn+me*me); + pion->setEnergy(ee); + G4double pn=std::sqrt(en*en-mn*mn); // real distribution (from PRC 78, 025204 (2008)) + G4double ECM=G4INCL::KinematicsUtils::totalEnergyInCM(particle1,particle2); - G4double ECM=G4INCL::KinematicsUtils::totalEnergyInCM(particle1,particle2); + const G4double pi=std::acos(-1.0); + G4double x1; + G4double u1; + G4double fteta; + G4double teta; + G4double fi; - const G4double pi=std::acos(-1.0); - G4double x1; - G4double u1; - G4double fteta; - G4double teta; - G4double fi; - - if (ECM < 1650.) { + if (ECM < 1650.) { // below 1650 MeV - angular distribution (x=cos(theta): ax^2+bx+c G4double f1= -0.0000288627*ECM*ECM+0.09155289*ECM-72.25436; // f(1) that is the maximum (fit on experimental data) @@ -155,22 +154,22 @@ namespace G4INCL { passe2=1; } } - } + } - fi=(2.0*pi)*Random::shoot(); + fi=(2.0*pi)*Random::shoot(); - ThreeVector mom_nucleon( + ThreeVector mom_nucleon( pn*std::sin(teta)*std::cos(fi), pn*std::sin(teta)*std::sin(fi), pn*std::cos(teta) - ); + ); // end real distribution - nucleon->setMomentum(-mom_nucleon); - pion->setMomentum(mom_nucleon); + nucleon->setMomentum(-mom_nucleon); + pion->setMomentum(mom_nucleon); - fs->addModifiedParticle(nucleon); - fs->addModifiedParticle(pion); - } + fs->addModifiedParticle(nucleon); + fs->addModifiedParticle(pion); + } } diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNToMultiPionsChannel.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNToMultiPionsChannel.cc index 0c35649203d..334407dbaed 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNToMultiPionsChannel.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNToMultiPionsChannel.cc @@ -74,40 +74,40 @@ namespace G4INCL { nucleon = particle2; pion = particle1; } +#ifdef INCLXX_IN_GEANT4_MODE + // Erase the parent resonance information of the nucleon and pion + nucleon->setParentResonancePDGCode(0); + nucleon->setParentResonanceID(0); + pion->setParentResonancePDGCode(0); + pion->setParentResonanceID(0); +#endif + G4int ipi=ParticleTable::getIsospin(pion->getType()); + ind2=ParticleTable::getIsospin(nucleon->getType()); - // Erase the parent resonance information of the nucleon and pion - nucleon->setParentResonancePDGCode(0); - nucleon->setParentResonanceID(0); - pion->setParentResonancePDGCode(0); - pion->setParentResonanceID(0); - - G4int ipi=ParticleTable::getIsospin(pion->getType()); - ind2=ParticleTable::getIsospin(nucleon->getType()); + ParticleList list; + list.push_back(nucleon); + list.push_back(pion); + fs->addModifiedParticle(nucleon); + fs->addModifiedParticle(pion); - ParticleList list; - list.push_back(nucleon); - list.push_back(pion); - fs->addModifiedParticle(nucleon); - fs->addModifiedParticle(pion); + isospinRepartition(ipi); - isospinRepartition(ipi); - - const ParticleType tn=ParticleTable::getNucleonType(ind2); - nucleon->setType(tn); - ParticleType pionType=ParticleTable::getPionType(isosp[0]); - pion->setType(pionType); - const ThreeVector &rcolpion = pion->getPosition(); - const ThreeVector zero; - for(G4int i=1; isetType(pionType); - list.push_back(newPion); - fs->addCreatedParticle(newPion); - } + const ParticleType tn=ParticleTable::getNucleonType(ind2); + nucleon->setType(tn); + ParticleType pionType=ParticleTable::getPionType(isosp[0]); + pion->setType(pionType); + const ThreeVector &rcolpion = pion->getPosition(); + const ThreeVector zero; + for(G4int i=1; isetType(pionType); + list.push_back(newPion); + fs->addCreatedParticle(newPion); + } - const G4double sqrtS = KinematicsUtils::totalEnergyInCM(nucleon, pion); - PhaseSpaceGenerator::generateBiased(sqrtS, list, 0, angularSlope); + const G4double sqrtS = KinematicsUtils::totalEnergyInCM(nucleon, pion); + PhaseSpaceGenerator::generateBiased(sqrtS, list, 0, angularSlope); } diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNToOmegaChannel.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNToOmegaChannel.cc index dfd430a8fc2..66470857faa 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNToOmegaChannel.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLPiNToOmegaChannel.cc @@ -64,41 +64,41 @@ namespace G4INCL { nucleon = particle2; pion = particle1; } - + G4int iso=ParticleTable::getIsospin(nucleon->getType())+ParticleTable::getIsospin(pion->getType()); // assert(iso == 1 || iso == -1); if (iso == 1) { nucleon->setType(Proton); - } - else if (iso == -1) { + } + else if (iso == -1) { nucleon->setType(Neutron); } - pion->setType(Omega); - - // Erase the parent resonance information of the nucleon and pion - nucleon->setParentResonancePDGCode(0); - nucleon->setParentResonanceID(0); - pion->setParentResonancePDGCode(0); - pion->setParentResonanceID(0); - -// nucleon->setEnergy(std::sqrt((nucleon->getMass())*(nucleon->getMass())+(mom_nucleon.mag()*mom_nucleon.mag()))); -// pion->setEnergy(std::sqrt((pion->getMass())*(pion->getMass())+(mom_nucleon.mag()*mom_nucleon.mag()))); - G4double sh=nucleon->getEnergy()+pion->getEnergy(); - G4double mn=nucleon->getMass(); - G4double me=pion->getMass(); - G4double en=(sh*sh+mn*mn-me*me)/(2*sh); - nucleon->setEnergy(en); - G4double ee=std::sqrt(en*en-mn*mn+me*me); - pion->setEnergy(ee); - G4double pn=std::sqrt(en*en-mn*mn); + pion->setType(Omega); +#ifdef INCLXX_IN_GEANT4_MODE + // Erase the parent resonance information of the nucleon and pion + nucleon->setParentResonancePDGCode(0); + nucleon->setParentResonanceID(0); + pion->setParentResonancePDGCode(0); + pion->setParentResonanceID(0); +#endif +// nucleon->setEnergy(std::sqrt((nucleon->getMass())*(nucleon->getMass())+(mom_nucleon.mag()*mom_nucleon.mag()))); +// pion->setEnergy(std::sqrt((pion->getMass())*(pion->getMass())+(mom_nucleon.mag()*mom_nucleon.mag()))); + G4double sh=nucleon->getEnergy()+pion->getEnergy(); + G4double mn=nucleon->getMass(); + G4double me=pion->getMass(); + G4double en=(sh*sh+mn*mn-me*me)/(2*sh); + nucleon->setEnergy(en); + G4double ee=std::sqrt(en*en-mn*mn+me*me); + pion->setEnergy(ee); + G4double pn=std::sqrt(en*en-mn*mn); - ThreeVector mom_nucleon = Random::normVector(pn); + ThreeVector mom_nucleon = Random::normVector(pn); - nucleon->setMomentum(mom_nucleon); - pion->setMomentum(-mom_nucleon); + nucleon->setMomentum(mom_nucleon); + pion->setMomentum(-mom_nucleon); - fs->addModifiedParticle(nucleon); - fs->addModifiedParticle(pion); - } + fs->addModifiedParticle(nucleon); + fs->addModifiedParticle(pion); + } } diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLReflectionChannel.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLReflectionChannel.cc index 7917c428654..740330f3a8c 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLReflectionChannel.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLReflectionChannel.cc @@ -56,8 +56,11 @@ namespace G4INCL { } void ReflectionChannel::fillFinalState(FinalState *fs) { + if(theParticle->getPotentialEnergy() != 0.){ + theNucleus->updatePotentialEnergy(theParticle); //D + } fs->setTotalEnergyBeforeInteraction(theParticle->getEnergy() - theParticle->getPotentialEnergy()); - + const ThreeVector &oldMomentum = theParticle->getMomentum(); const ThreeVector thePosition = theParticle->getPosition(); G4double pspr = thePosition.dot(oldMomentum); @@ -76,7 +79,9 @@ namespace G4INCL { << thePosition.getY() << ", " << thePosition.getZ() << ")" << '\n'); } - theNucleus->updatePotentialEnergy(theParticle); + if(theParticle->getPotentialEnergy() != 0.){ + theNucleus->updatePotentialEnergy(theParticle); + } } else { // The particle momentum is already directed towards the inside of the nucleus; do nothing // ...but make sure this only happened because of the frozen propagation // assert(theParticle->getPosition().dot(theParticle->getPropagationVelocity())>0.); diff --git a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLStandardPropagationModel.cc b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLStandardPropagationModel.cc index 03c528ae592..bf970141c06 100644 --- a/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLStandardPropagationModel.cc +++ b/source/processes/hadronic/models/inclxx/incl_physics/src/G4INCLStandardPropagationModel.cc @@ -43,6 +43,7 @@ */ #include "G4INCLStandardPropagationModel.hh" +#include "G4INCLPbarAtrestEntryChannel.hh" #include "G4INCLSurfaceAvatar.hh" #include "G4INCLBinaryCollisionAvatar.hh" #include "G4INCLDecayAvatar.hh" @@ -59,6 +60,7 @@ #include "G4INCLPionResonanceDecayChannel.hh" #include "G4INCLParticleEntryAvatar.hh" #include "G4INCLIntersection.hh" +#include namespace G4INCL { @@ -81,13 +83,101 @@ namespace G4INCL { return theNucleus; } +//D + G4double StandardPropagationModel::shoot(ParticleSpecies const &projectileSpecies, const G4double kineticEnergy, const G4double impactParameter, const G4double phi) { - if(projectileSpecies.theType==Composite) + if(projectileSpecies.theType==Composite){ return shootComposite(projectileSpecies, kineticEnergy, impactParameter, phi); - else + } + else if(projectileSpecies.theType==antiProton && theNucleus->getAnnihilationType()!=Def){ + return shootAtrest(projectileSpecies.theType, kineticEnergy); + } + else{ return shootParticle(projectileSpecies.theType, kineticEnergy, impactParameter, phi); + } } +//D + + G4double StandardPropagationModel::shootAtrest(ParticleType const t, const G4double kineticEnergy) { + theNucleus->setParticleNucleusCollision(); + currentTime = 0.0; + + // Create final state particles + const G4double projectileMass = ParticleTable::getTableParticleMass(t); + G4double energy = kineticEnergy + projectileMass; + G4double momentumZ = std::sqrt(energy*energy - projectileMass*projectileMass); + ThreeVector momentum(0.0, 0.0, momentumZ); + Particle *pb = new G4INCL::Particle(t, energy, momentum, ThreeVector()); + PbarAtrestEntryChannel *obj = new PbarAtrestEntryChannel(theNucleus, pb); + ParticleList fslist = obj->makeMesonStar(); + const G4bool isProton = obj->ProtonIsTheVictim(); + delete pb; + + //set Stopping time according to highest meson energy of the star + G4double temfin; + G4double TLab; + std::vector energies; + std::vector projections; + ThreeVector ab, cd; + + for(ParticleIter pit = fslist.begin(), e = fslist.end(); pit!=e; ++pit){ + energies.push_back((*pit)->getKineticEnergy()); + ab = (*pit)->boostVector(); + cd = (*pit)->getPosition(); + projections.push_back(ab.dot(cd)); //projection length + }// make vector of energies + + temfin = 30.18 * std::pow(theNucleus->getA(), 0.17); + TLab = *max_element(energies.begin(), energies.end()); //choose max energy + + // energy-dependent stopping time above 2 AGeV + if(TLab>2000.) + temfin *= (5.8E4-TLab)/5.6E4; + + maximumTime = temfin; + + // If the incoming particle is slow, use a larger stopping time + const G4double rMax = theNucleus->getUniverseRadius(); + const G4double distance = 2.*rMax; + const G4double maxMesonVelocityProjection = *max_element(energies.begin(), energies.end()); + const G4double traversalTime = distance / maxMesonVelocityProjection; + if(maximumTime < traversalTime) + maximumTime = traversalTime; + INCL_DEBUG("Cascade stopping time is " << maximumTime << '\n'); + + + // Fill in the relevant kinematic variables + theNucleus->setIncomingAngularMomentum(G4INCL::ThreeVector(0., 0., 0.)); + theNucleus->setIncomingMomentum(G4INCL::ThreeVector(0., 0., 0.)); + if(isProton){ + theNucleus->setInitialEnergy(pb->getMass() + + ParticleTable::getTableMass(theNucleus->getA() + 1,theNucleus->getZ() + 1,theNucleus->getS())); + } + else{ + theNucleus->setInitialEnergy(pb->getMass() + + ParticleTable::getTableMass(theNucleus->getA() + 1,theNucleus->getZ(),theNucleus->getS())); + } + //kinetic energy excluded from the balance + + for(ParticleIter p = fslist.begin(), e = fslist.end(); p!=e; ++p){ + (*p)->makeProjectileSpectator(); + } + + generateAllAvatars(); + firstAvatar = false; + + // Get the entry avatars for mesons + IAvatarList theAvatarList = obj->bringMesonStar(fslist, theNucleus); + delete obj; + theNucleus->getStore()->addParticleEntryAvatars(theAvatarList); + INCL_DEBUG("Avatars added" << '\n'); + + return 99.; + } + +//D + G4double StandardPropagationModel::shootParticle(ParticleType const type, const G4double kineticEnergy, const G4double impactParameter, const G4double phi) { theNucleus->setParticleNucleusCollision(); currentTime = 0.0; @@ -270,6 +360,10 @@ namespace G4INCL { if((p1->isResonance() && p2->isPion()) || (p1->isPion() && p2->isResonance())) return NULL; + // Is it a photon collision (we don't treat them)? + if(p1->isPhoton() || p2->isPhoton()) + return NULL; + // Will the avatar take place between now and the end of the cascade? G4double minDistOfApproachSquared = 0.0; G4double t = getTime(p1, p2, &minDistOfApproachSquared); diff --git a/source/processes/hadronic/models/inclxx/interface/GNUmakefile b/source/processes/hadronic/models/inclxx/interface/GNUmakefile deleted file mode 100644 index b23a8178c45..00000000000 --- a/source/processes/hadronic/models/inclxx/interface/GNUmakefile +++ /dev/null @@ -1,50 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# -# Map user environment/GMake variables onto preprocessor debugging flags -# -# 20100922 J. Yarba -- Add include directories for pre-compound model -# ----------------------------------------------------------- - -name := G4hadronic_inclxx_interface - -ifndef G4INSTALL - G4INSTALL = ../../../../../.. -endif -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include/ \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include/ \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fission/include/ \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include/ \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include/ \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include/ \ - -I$(G4BASE)/processes/hadronic/models/abla/include/ \ - -I$(G4BASE)/processes/hadronic/models/inclxx/incl_physics/include \ - -I$(G4BASE)/processes/hadronic/models/inclxx/utils/include \ - -I$(G4BASE)/processes/hadronic/models/binary_cascade/include/ \ - -I$(G4BASE)/processes/hadronic/models/im_r_matrix/include/ \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/intercoms/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/models/inclxx/interface/src/G4INCLXXInterface.cc b/source/processes/hadronic/models/inclxx/interface/src/G4INCLXXInterface.cc index c7c2bb6df9e..cd726bd3b31 100644 --- a/source/processes/hadronic/models/inclxx/interface/src/G4INCLXXInterface.cc +++ b/source/processes/hadronic/models/inclxx/interface/src/G4INCLXXInterface.cc @@ -193,8 +193,9 @@ G4HadFinalState* G4INCLXXInterface::ApplyYourself(const G4HadProjectile& aTrack, return &theResult; } - // For reactions on nucleons, use the backup model (without complaining) - if(trackA<=1 && nucleusA<=1) { + // For reactions on nucleons, use the backup model (without complaining), + // except for anti_proton projectile (in this case, INCLXX is used). + if(trackA<=1 && nucleusA<=1 && (trackZ>=0 || trackA==0)) { return theBackupModelNucleon->ApplyYourself(aTrack, theNucleus); } @@ -573,6 +574,7 @@ G4INCL::ParticleType G4INCLXXInterface::toINCLParticleType(G4ParticleDefinition else if(pdef == G4Triton::Triton()) return G4INCL::Composite; else if(pdef == G4He3::He3()) return G4INCL::Composite; else if(pdef == G4Alpha::Alpha()) return G4INCL::Composite; + else if(pdef == G4AntiProton::AntiProton()) return G4INCL::antiProton; else if(pdef->GetParticleType() == G4GenericIon::GenericIon()->GetParticleType()) return G4INCL::Composite; else return G4INCL::UnknownParticle; } @@ -618,6 +620,8 @@ G4ParticleDefinition *G4INCLXXInterface::toG4ParticleDefinition(G4int A, G4int Z } else if(PDGCode == 1003) { return G4Triton::Triton(); } else if(PDGCode == 2003) { return G4He3::He3(); } else if(PDGCode == 2004) { return G4Alpha::Alpha(); + + } else if(PDGCode == -2212) { return G4AntiProton::AntiProton(); } else if(S != 0) { // Assumed that -S gives the number of Lambdas if (A == 3 && Z == 1 && S == -1 ) return G4HyperTriton::Definition(); if (A == 4 && Z == 1 && S == -1 ) return G4HyperH4::Definition(); diff --git a/source/processes/hadronic/models/inclxx/utils/GNUmakefile b/source/processes/hadronic/models/inclxx/utils/GNUmakefile deleted file mode 100644 index ea97c25979b..00000000000 --- a/source/processes/hadronic/models/inclxx/utils/GNUmakefile +++ /dev/null @@ -1,32 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4hadronic_inclxx_utils - -ifndef G4INSTALL - G4INSTALL = ../../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include/ \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/hadronic/models/inclxx/utils/include/G4INCLConfig.hh b/source/processes/hadronic/models/inclxx/utils/include/G4INCLConfig.hh index 25782cfa78a..23430eb0bcb 100644 --- a/source/processes/hadronic/models/inclxx/utils/include/G4INCLConfig.hh +++ b/source/processes/hadronic/models/inclxx/utils/include/G4INCLConfig.hh @@ -374,6 +374,12 @@ namespace G4INCL { /// \brief Get the bias G4double getBias() const { return bias; } + /// \brief Get the pbar at rest annihilation threshold + G4double getAtrestThreshold() const { return atrestThreshold; } + + /// \brief Set the pbar at rest annihilation threshold + void setAtrestThreshold(const G4double t) { atrestThreshold=t; } + private: G4int verbosity; @@ -456,6 +462,8 @@ namespace G4INCL { G4double bias; + G4double atrestThreshold; + #ifdef INCL_ROOT_USE std::string rootSelectionString; #endif diff --git a/source/processes/hadronic/models/inclxx/utils/include/G4INCLEventInfo.hh b/source/processes/hadronic/models/inclxx/utils/include/G4INCLEventInfo.hh index acf3ac2f864..269d1969a90 100644 --- a/source/processes/hadronic/models/inclxx/utils/include/G4INCLEventInfo.hh +++ b/source/processes/hadronic/models/inclxx/utils/include/G4INCLEventInfo.hh @@ -85,6 +85,8 @@ namespace G4INCL { pTransBalance((Float_t)0.0), nCascadeParticles(0), transparent(false), + annihilationP(false), + annihilationN(false), forcedCompoundNucleus(false), nucleonAbsorption(false), pionAbsorption(false), @@ -280,6 +282,10 @@ namespace G4INCL { Short_t nCascadeParticles; /** \brief True if the event is transparent */ Bool_t transparent; + /** \brief True if annihilation at rest on a proton */ + Bool_t annihilationP; + /** \brief True if annihilation at rest on a neutron */ + Bool_t annihilationN; /** \brief True if the event is a forced CN */ Bool_t forcedCompoundNucleus; /** \brief True if the event is a nucleon absorption */ @@ -373,6 +379,8 @@ namespace G4INCL { pTransBalance = (Float_t)0.0; nCascadeParticles = 0; transparent = false; + annihilationP = false; + annihilationN = false; forcedCompoundNucleus = false; nucleonAbsorption = false; pionAbsorption = false; diff --git a/source/processes/hadronic/models/inclxx/utils/include/G4INCLParticle.hh b/source/processes/hadronic/models/inclxx/utils/include/G4INCLParticle.hh index c7279d14e47..9ecce1fb0ff 100644 --- a/source/processes/hadronic/models/inclxx/utils/include/G4INCLParticle.hh +++ b/source/processes/hadronic/models/inclxx/utils/include/G4INCLParticle.hh @@ -101,8 +101,10 @@ namespace G4INCL { uncorrelatedMomentum(rhs.uncorrelatedMomentum), theParticleBias(rhs.theParticleBias), theNKaon(rhs.theNKaon), +#ifdef INCLXX_IN_GEANT4_MODE theParentResonancePDGCode(rhs.theParentResonancePDGCode), theParentResonanceID(rhs.theParentResonanceID), +#endif theHelicity(rhs.theHelicity), emissionTime(rhs.emissionTime), outOfWell(rhs.outOfWell), @@ -148,8 +150,10 @@ namespace G4INCL { std::swap(thePotentialEnergy, rhs.thePotentialEnergy); // ID intentionally not swapped +#ifdef INCLXX_IN_GEANT4_MODE std::swap(theParentResonancePDGCode, rhs.theParentResonancePDGCode); std::swap(theParentResonanceID, rhs.theParentResonanceID); +#endif std::swap(theHelicity, rhs.theHelicity); std::swap(emissionTime, rhs.emissionTime); @@ -161,6 +165,7 @@ namespace G4INCL { std::swap(theParticleBias, rhs.theParticleBias); std::swap(theBiasCollisionVector, rhs.theBiasCollisionVector); + } public: @@ -253,6 +258,11 @@ namespace G4INCL { theZ = -1; theS = -1; break; + case antiProton: + theA = -1; + theZ = -1; + theS = 0; + break; case KPlus: theA = 0; theZ = 1; @@ -390,8 +400,11 @@ namespace G4INCL { /** \brief Is this a Baryon? */ G4bool isBaryon() const { return (isNucleon() || isResonance() || isHyperon()); } - /** \brief Is this an Strange? */ + /** \brief Is this a Strange? */ G4bool isStrange() const { return (isKaon() || isAntiKaon() || isHyperon()); } + + /** \brief Is this an antinucleon? */ + G4bool isAntiNucleon() const { return (theType == G4INCL::antiProton ); } //|| theType == G4INCL::antiNeutron /** \brief Returns the baryon number. */ G4int getA() const { return theA; } @@ -466,6 +479,7 @@ namespace G4INCL { case SigmaPlus: case SigmaZero: case SigmaMinus: + case antiProton: case KPlus: case KZero: case KZeroBar: @@ -509,6 +523,7 @@ namespace G4INCL { case SigmaPlus: case SigmaZero: case SigmaMinus: + case antiProton: case KPlus: case KZero: case KZeroBar: @@ -552,6 +567,7 @@ namespace G4INCL { case SigmaPlus: case SigmaZero: case SigmaMinus: + case antiProton: case KPlus: case KZero: case KZeroBar: @@ -628,6 +644,36 @@ namespace G4INCL { return theQValue - (massINCLParent-massINCLDaughter-massINCLParticle); } +//D + G4double getEmissionPbarQvalueCorrection(const G4int AParent, const G4int ZParent, const G4bool Victim) const { + G4int SParent = 0; + G4int SDaughter = 0; + G4int ADaughter = AParent - 1; + G4int ZDaughter; + G4bool isProton = Victim; + if(isProton){ //proton is annihilated + ZDaughter = ZParent - 1; + } + else { //neutron is annihilated + ZDaughter = ZParent; + } + + + G4double theQValue; //same procedure as for normal case + + const G4double massTableParent = ParticleTable::getTableMass(AParent,ZParent,SParent); + const G4double massTableDaughter = ParticleTable::getTableMass(ADaughter,ZDaughter,SDaughter); + const G4double massTableParticle = getTableMass(); + theQValue = massTableParent - massTableDaughter - massTableParticle; + + const G4double massINCLParent = ParticleTable::getINCLMass(AParent,ZParent,SParent); + const G4double massINCLDaughter = ParticleTable::getINCLMass(ADaughter,ZDaughter,SDaughter); + const G4double massINCLParticle = getINCLMass(); + + return theQValue - (massINCLParent-massINCLDaughter-massINCLParticle); + } +//D + /**\brief Computes correction on the transfer Q-value * * Computes the correction that must be applied to INCL particles in @@ -1057,11 +1103,13 @@ namespace G4INCL { G4int getNumberOfKaon() const { return theNKaon; }; void setNumberOfKaon(const G4int NK) { theNKaon = NK; } +#ifdef INCLXX_IN_GEANT4_MODE G4int getParentResonancePDGCode() const { return theParentResonancePDGCode; }; void setParentResonancePDGCode(const G4int parentPDGCode) { theParentResonancePDGCode = parentPDGCode; }; G4int getParentResonanceID() const { return theParentResonanceID; }; void setParentResonanceID(const G4int parentID) { theParentResonanceID = parentID; }; - +#endif + public: /** \brief Time ordered vector of all bias applied * @@ -1108,9 +1156,11 @@ namespace G4INCL { /// \brief The number of Kaons inside the nucleus (update during the cascade) G4int theNKaon; +#ifdef INCLXX_IN_GEANT4_MODE G4int theParentResonancePDGCode; G4int theParentResonanceID; - +#endif + private: G4double theHelicity; G4double emissionTime; diff --git a/source/processes/hadronic/models/inclxx/utils/include/G4INCLParticleTable.hh b/source/processes/hadronic/models/inclxx/utils/include/G4INCLParticleTable.hh index 64bd8ef5bea..5d619a72604 100644 --- a/source/processes/hadronic/models/inclxx/utils/include/G4INCLParticleTable.hh +++ b/source/processes/hadronic/models/inclxx/utils/include/G4INCLParticleTable.hh @@ -73,6 +73,7 @@ namespace G4INCL { const G4double effectivePionMass = 138.0; const G4double effectiveLambdaMass = 1115.683; const G4double effectiveSigmaMass = 1197.45; // max value + const G4double effectiveXiMass = 1321.71; // max value const G4double effectiveKaonMass = 497.614; // max value const G4double effectiveAntiKaonMass = 497.614; // max value const G4double effectiveEtaMass = 547.862; @@ -103,6 +104,8 @@ namespace G4INCL { /// \brief Get the native INCL name of the ion std::string getName(const G4int A, const G4int Z); + + /// \brief Get the native INCL name of the ion std::string getName(const G4int A, const G4int Z, const G4int S); /// \brief Get the short INCL name of the ion @@ -283,7 +286,7 @@ namespace G4INCL { /// \brief Get the type of sigma ParticleType getSigmaType(const G4int isosp); - + /// \brief Get the type of kaon ParticleType getKaonType(const G4int isosp); diff --git a/source/processes/hadronic/models/inclxx/utils/include/G4INCLParticleType.hh b/source/processes/hadronic/models/inclxx/utils/include/G4INCLParticleType.hh index a8c5d77799a..73909bde63a 100644 --- a/source/processes/hadronic/models/inclxx/utils/include/G4INCLParticleType.hh +++ b/source/processes/hadronic/models/inclxx/utils/include/G4INCLParticleType.hh @@ -66,6 +66,7 @@ namespace G4INCL { SigmaPlus, SigmaZero, SigmaMinus, + antiProton, KPlus, KZero, KZeroBar, diff --git a/source/processes/hadronic/models/inclxx/utils/include/G4INCLRandom.hh b/source/processes/hadronic/models/inclxx/utils/include/G4INCLRandom.hh index 59902677bd6..9ebd072ee37 100644 --- a/source/processes/hadronic/models/inclxx/utils/include/G4INCLRandom.hh +++ b/source/processes/hadronic/models/inclxx/utils/include/G4INCLRandom.hh @@ -53,7 +53,9 @@ #include "G4INCLThreeVector.hh" #include "G4INCLGlobals.hh" #include "G4INCLConfig.hh" -#include "Randomize.hh" +#ifdef INCLXX_IN_GEANT4_MODE + #include "Randomize.hh" +#endif namespace G4INCL { @@ -166,7 +168,7 @@ namespace G4INCL { class Adapter { public: - using result_type = unsigned long; + using result_type = unsigned long long; static constexpr result_type min() { return std::numeric_limits::min(); @@ -177,11 +179,13 @@ namespace G4INCL { } result_type operator()() const { + #ifdef INCLXX_IN_GEANT4_MODE return G4RandFlat::shootInt(INT_MAX); #else return shootInteger(max()); #endif + } }; diff --git a/source/processes/hadronic/models/inclxx/utils/include/G4INCLVersion.hh b/source/processes/hadronic/models/inclxx/utils/include/G4INCLVersion.hh index 1fe8f8f1cfa..456b4b1e2a2 100644 --- a/source/processes/hadronic/models/inclxx/utils/include/G4INCLVersion.hh +++ b/source/processes/hadronic/models/inclxx/utils/include/G4INCLVersion.hh @@ -35,5 +35,5 @@ #include "globals.hh" -#define G4INCL_VERSION_ID "v6.0-clean" -#define G4INCL_GIT_HASH "fdc91a728961c4e15af786d9bda9a02d12d5f472" +#define G4INCL_VERSION_ID "undefined-clean" +#define G4INCL_GIT_HASH "684862e7a01d6f73f08906453ced4d8e3a97eeee" diff --git a/source/processes/hadronic/models/inclxx/utils/src/G4INCLConfig.cc b/source/processes/hadronic/models/inclxx/utils/src/G4INCLConfig.cc index 0599833cd74..d5b472683ab 100644 --- a/source/processes/hadronic/models/inclxx/utils/src/G4INCLConfig.cc +++ b/source/processes/hadronic/models/inclxx/utils/src/G4INCLConfig.cc @@ -116,6 +116,7 @@ namespace G4INCL { inverseKinematics = false; decayTimeThreshold = 1.e-20; bias = 1.; + atrestThreshold = 200.; //D } std::string Config::summary() { diff --git a/source/processes/hadronic/models/inclxx/utils/src/G4INCLEventInfo.cc b/source/processes/hadronic/models/inclxx/utils/src/G4INCLEventInfo.cc index aa917631965..7c6fb54f038 100644 --- a/source/processes/hadronic/models/inclxx/utils/src/G4INCLEventInfo.cc +++ b/source/processes/hadronic/models/inclxx/utils/src/G4INCLEventInfo.cc @@ -94,9 +94,9 @@ namespace G4INCL { A[nParticles] = ARem[remnantIndex]; Z[nParticles] = ZRem[remnantIndex]; S[nParticles] = SRem[remnantIndex]; - - ParticleSpecies pt(A[nParticles],Z[nParticles],S[nParticles]); - PDGCode[nParticles] = pt.getPDGCode(); + + ParticleSpecies pt(A[nParticles],Z[nParticles],S[nParticles]); + PDGCode[nParticles] = pt.getPDGCode(); ParticleBias[nParticles] = Particle::getTotalBias(); emissionTime[nParticles] = stoppingTime; @@ -105,24 +105,30 @@ namespace G4INCL { py[nParticles] = pyRem[remnantIndex]; pz[nParticles] = pzRem[remnantIndex]; - const G4double plab = std::sqrt(pxRem[remnantIndex]*pxRem[remnantIndex] - +pyRem[remnantIndex]*pyRem[remnantIndex] - +pzRem[remnantIndex]*pzRem[remnantIndex]); - G4double pznorm = pzRem[remnantIndex]/plab; - if(pznorm>1.) - pznorm = 1.; - else if(pznorm<-1.) - pznorm = -1.; - theta[nParticles] = Math::toDegrees(Math::arcCos(pznorm)); - phi[nParticles] = Math::toDegrees(std::atan2(pyRem[remnantIndex],pxRem[remnantIndex])); - - EKin[nParticles] = EKinRem[remnantIndex]; + const G4double plab = std::sqrt( pxRem[remnantIndex]*pxRem[remnantIndex] + +pyRem[remnantIndex]*pyRem[remnantIndex] + +pzRem[remnantIndex]*pzRem[remnantIndex]); + if(plab != 0.0){ + G4double pznorm = pzRem[remnantIndex]/plab; + if(pznorm>1.) pznorm = 1.; + else if(pznorm<-1.) pznorm = -1.; + theta[nParticles] = Math::toDegrees(Math::arcCos(pznorm)); + phi[nParticles] = Math::toDegrees(std::atan2(pyRem[remnantIndex],pxRem[remnantIndex])); + EKin[nParticles] = EKinRem[remnantIndex]; + } + else{ + theta[nParticles] = 0.0; + phi[nParticles] = 0.0; + EKin[nParticles] = 0.0; + } origin[nParticles] = -1; // Origin: cascade +#ifdef INCLXX_IN_GEANT4_MODE parentResonancePDGCode[nParticles] = 0; // No parent resonance parentResonanceID[nParticles] = 0; // No parent resonance +#endif history.push_back(""); // history nParticles++; -// assert(history.size()==(unsigned int)nParticles); + // assert(history.size()==(unsigned int)nParticles); } } diff --git a/source/processes/hadronic/models/inclxx/utils/src/G4INCLHFB.cc b/source/processes/hadronic/models/inclxx/utils/src/G4INCLHFB.cc index ad1045660ca..841360422e8 100644 --- a/source/processes/hadronic/models/inclxx/utils/src/G4INCLHFB.cc +++ b/source/processes/hadronic/models/inclxx/utils/src/G4INCLHFB.cc @@ -45,9 +45,11 @@ #include "G4INCLHFB.hh" #include "G4INCLParticleTable.hh" #include "G4INCLGlobals.hh" -#include "G4Threading.hh" #include #include +#ifdef INCLXX_IN_GEANT4_MODE + #include "G4Threading.hh" +#endif namespace G4INCL { diff --git a/source/processes/hadronic/models/inclxx/utils/src/G4INCLParticle.cc b/source/processes/hadronic/models/inclxx/utils/src/G4INCLParticle.cc index cc9915cdbee..f7777148bf9 100644 --- a/source/processes/hadronic/models/inclxx/utils/src/G4INCLParticle.cc +++ b/source/processes/hadronic/models/inclxx/utils/src/G4INCLParticle.cc @@ -74,8 +74,10 @@ namespace G4INCL { uncorrelatedMomentum(0.), theParticleBias(1.), theNKaon(0), +#ifdef INCLXX_IN_GEANT4_MODE theParentResonancePDGCode(0), theParentResonanceID(0), +#endif theHelicity(0.0), emissionTime(0.0), outOfWell(false), @@ -100,8 +102,10 @@ namespace G4INCL { uncorrelatedMomentum(theMomentum.mag()), theParticleBias(1.), theNKaon(0), +#ifdef INCLXX_IN_GEANT4_MODE theParentResonancePDGCode(0), theParentResonanceID(0), +#endif theHelicity(0.0), emissionTime(0.0), outOfWell(false) { @@ -128,8 +132,10 @@ namespace G4INCL { uncorrelatedMomentum(theMomentum.mag()), theParticleBias(1.), theNKaon(0), +#ifdef INCLXX_IN_GEANT4_MODE theParentResonancePDGCode(0), theParentResonanceID(0), +#endif theHelicity(0.0), emissionTime(0.0), outOfWell(false) { diff --git a/source/processes/hadronic/models/inclxx/utils/src/G4INCLParticleSpecies.cc b/source/processes/hadronic/models/inclxx/utils/src/G4INCLParticleSpecies.cc index ee9dc304454..a7fc79464e9 100644 --- a/source/processes/hadronic/models/inclxx/utils/src/G4INCLParticleSpecies.cc +++ b/source/processes/hadronic/models/inclxx/utils/src/G4INCLParticleSpecies.cc @@ -118,6 +118,11 @@ namespace G4INCL { theZ = -1; theS = -1; theType = G4INCL::SigmaMinus; + } else if(pS=="pb" || pS=="antiproton") { + theA = -1; + theZ = -1; + theS = 0; + theType = G4INCL::antiProton; } else if(pS=="k+" || pS=="kaon+" || pS=="kplus" || pS=="kaonplus") { theA = 0; theZ = 1; @@ -282,7 +287,7 @@ namespace G4INCL { endFirstSection = firstSeparator; beginSecondSection = firstSeparator+1; } - + std::string firstSection(pS.substr(0,endFirstSection)); std::string secondSection(pS.substr(beginSecondSection,std::string::npos)); std::stringstream parsingStream; @@ -365,74 +370,77 @@ namespace G4INCL { G4int ParticleSpecies::getPDGCode() const { switch (theType) { case Proton: - return 2212; + return 2212; break; case Neutron: - return 2112; - break; + return 2112; + break; case DeltaPlusPlus: - return 2224; - break; + return 2224; + break; case DeltaPlus: - return 2214; - break; + return 2214; + break; case DeltaZero: - return 2114; - break; + return 2114; + break; case DeltaMinus: - return 1114; - break; + return 1114; + break; case PiPlus: - return 211; - break; + return 211; + break; case PiZero: - return 111; - break; + return 111; + break; case PiMinus: - return -211; - break; + return -211; + break; case Eta: - return 221; - break; + return 221; + break; case Omega: - return 223; - break; + return 223; + break; case EtaPrime: - return 331; - break; + return 331; + break; case Photon: - return 22; - break; + return 22; + break; case Lambda: - return 3122; - break; + return 3122; + break; case SigmaPlus: - return 3222; - break; + return 3222; + break; case SigmaZero: - return 3212; - break; + return 3212; + break; case SigmaMinus: - return 3112; - break; + return 3112; + break; + case antiProton: + return -2212; + break; case KPlus: - return 321; - break; + return 321; + break; case KZero: - return 311; - break; + return 311; + break; case KZeroBar: - return -311; - break; + return -311; + break; case KShort: - return 310; - break; + return 310; + break; case KLong: - return 130; - break; + return 130; + break; case KMinus: - return -321; - break; + return -321; + break; case Composite: if(theA == 1 && theZ == 1 && theS == 0) return 2212; else if(theA == 1 && theZ == 0 && theS == 0) return 2112; @@ -443,7 +451,7 @@ namespace G4INCL { INCL_ERROR("ParticleSpecies::getPDGCode: Unknown particle type." << '\n'); return 0; break; - } + } } } diff --git a/source/processes/hadronic/models/inclxx/utils/src/G4INCLParticleTable.cc b/source/processes/hadronic/models/inclxx/utils/src/G4INCLParticleTable.cc index 3417fa4cc0b..27fbe4bf062 100644 --- a/source/processes/hadronic/models/inclxx/utils/src/G4INCLParticleTable.cc +++ b/source/processes/hadronic/models/inclxx/utils/src/G4INCLParticleTable.cc @@ -78,6 +78,7 @@ namespace G4INCL { G4ThreadLocal G4double SigmaZeroMass = 0.0; G4ThreadLocal G4double SigmaMinusMass = 0.0; G4ThreadLocal G4double LambdaMass = 0.0; + G4ThreadLocal G4double antiProtonMass = 0.0; G4ThreadLocal G4double KPlusMass = 0.0; G4ThreadLocal G4double KZeroMass = 0.0; G4ThreadLocal G4double KZeroBarMass = 0.0; @@ -88,7 +89,7 @@ namespace G4INCL { G4ThreadLocal G4double omegaMass = 0.0; G4ThreadLocal G4double etaPrimeMass = 0.0; G4ThreadLocal G4double photonMass = 0.0; - + // Hard-coded values of the real particle masses (MeV/c^2) G4ThreadLocal G4double theRealProtonMass = 938.27203; G4ThreadLocal G4double theRealNeutronMass = 939.56536; @@ -98,13 +99,14 @@ namespace G4INCL { G4ThreadLocal G4double theRealSigmaPlusMass = 1189.37; G4ThreadLocal G4double theRealSigmaZeroMass = 1192.64; G4ThreadLocal G4double theRealSigmaMinusMass = 1197.45; + G4ThreadLocal G4double theRealAntiProtonMass = 938.27203; G4ThreadLocal G4double theRealChargedKaonMass = 493.677; G4ThreadLocal G4double theRealNeutralKaonMass = 497.614; G4ThreadLocal G4double theRealEtaMass = 547.862; G4ThreadLocal G4double theRealOmegaMass = 782.65; G4ThreadLocal G4double theRealEtaPrimeMass = 957.78; G4ThreadLocal G4double theRealPhotonMass = 0.0; - + // Width (second) const G4double theChargedPiWidth = 2.6033e-08; const G4double thePiZeroWidth = 8.52e-17; @@ -132,7 +134,7 @@ namespace G4INCL { G4ThreadLocal G4double KMinusWidth = 0.0; G4ThreadLocal G4double KShortWidth = 0.0; G4ThreadLocal G4double KLongWidth = 0.0; - + const G4int mediumNucleiTableSize = 30; @@ -339,29 +341,17 @@ namespace G4INCL { piPlusMass = theINCLPionMass; piMinusMass = theINCLPionMass; piZeroMass = theINCLPionMass; - /* - SigmaPlusMass = theINCLSigmaMass; - SigmaMinusMass = theINCLSigmaMass; - SigmaZeroMass = theINCLSigmaMass; - LambdaMass = theINCLLambdaMass; - KPlusMass = theINCLKaonMass; - KZeroMass = theINCLKaonMass; - KZeroBarMass = theINCLKaonMass; - KShortMass = theINCLKaonMass; - KLongMass = theINCLKaonMass; - KMinusMass = theINCLKaonMass; - */ SigmaPlusMass = theRealSigmaPlusMass; SigmaMinusMass = theRealSigmaMinusMass; SigmaZeroMass = theRealSigmaZeroMass; LambdaMass = theINCLLambdaMass; + antiProtonMass = theRealAntiProtonMass; KPlusMass = theRealChargedKaonMass; KZeroMass = theRealNeutralKaonMass; KZeroBarMass = theRealNeutralKaonMass; KShortMass = theRealNeutralKaonMass; KLongMass = theRealNeutralKaonMass; KMinusMass = theRealChargedKaonMass; - etaMass = theINCLEtaMass; omegaMass = theINCLOmegaMass; etaPrimeMass = theINCLEtaPrimeMass; @@ -398,6 +388,7 @@ namespace G4INCL { theRealLambdaMass = theG4ParticleTable->FindParticle("lambda")->GetPDGMass() / MeV; theRealChargedKaonMass = theG4ParticleTable->FindParticle("kaon+")->GetPDGMass() / MeV; theRealNeutralKaonMass = theG4ParticleTable->FindParticle("kaon0")->GetPDGMass() / MeV; + theRealAntiProtonMass = theG4ParticleTable->FindParticle("anti_proton")->GetPDGMass() / MeV; #endif minDeltaMass = theRealNeutronMass + theRealChargedPiMass + 0.5; @@ -523,6 +514,8 @@ namespace G4INCL { return 0; } else if(t == Photon) { return 0; + } else if(t == antiProton) { + return -1; } INCL_ERROR("Requested isospin of an unknown particle!"); return -10; // Unknown @@ -598,6 +591,8 @@ namespace G4INCL { return std::string("sigma0"); } else if(p == G4INCL::SigmaMinus) { return std::string("sigma-"); + } else if(p == G4INCL::antiProton) { + return std::string("antiproton"); } else if(p == G4INCL::KPlus) { return std::string("kaon+"); } else if(p == G4INCL::KZero) { @@ -651,6 +646,8 @@ namespace G4INCL { return std::string("s0"); } else if(p == G4INCL::SigmaMinus) { return std::string("s-"); + } else if(p == G4INCL::antiProton) { + return std::string("pb"); } else if(p == G4INCL::KPlus) { return std::string("k+"); } else if(p == G4INCL::KZero) { @@ -696,6 +693,8 @@ namespace G4INCL { return SigmaZeroMass; } else if(pt == Lambda) { return LambdaMass; + } else if(pt == antiProton) { + return antiProtonMass; } else if(pt == KPlus) { return KPlusMass; } else if(pt == KZero) { @@ -716,6 +715,8 @@ namespace G4INCL { return etaPrimeMass; } else if(pt == Photon) { return photonMass; + + } else { INCL_ERROR("getMass : Unknown particle type." << '\n'); return 0.0; @@ -749,6 +750,9 @@ namespace G4INCL { case Lambda: return theRealLambdaMass; break; + case antiProton: + return theRealAntiProtonMass; + break; case KPlus: case KMinus: return theRealChargedKaonMass; @@ -861,6 +865,9 @@ namespace G4INCL { case Lambda: return 1; break; + case antiProton: + return -1; + break; case PiPlus: case PiMinus: case PiZero: @@ -913,6 +920,7 @@ namespace G4INCL { case PiMinus: case SigmaMinus: case KMinus: + case antiProton: return -1; break; default: @@ -936,6 +944,7 @@ namespace G4INCL { case Omega: case EtaPrime: case Photon: + case antiProton: return 0; break; case Lambda: @@ -1290,6 +1299,7 @@ namespace G4INCL { } } + ParticleType getKaonType(const G4int isosp) { // assert(isosp == -1 || isosp == 1); if (isosp == -1) { @@ -1310,8 +1320,14 @@ namespace G4INCL { } } + + G4double getWidth(const ParticleType pt) { -// assert(pt == PiPlus || pt == PiMinus || pt == PiZero || pt == Eta || pt == Omega || pt == EtaPrime || pt == KShort || pt == KLong || pt== KPlus || pt == KMinus || pt == Lambda || pt == SigmaPlus || pt == SigmaZero || pt == SigmaMinus); +// assert(pt == PiPlus || pt == PiMinus || pt == PiZero || pt == Eta || pt == Omega || +// pt == EtaPrime || pt == KShort || pt == KLong || pt== KPlus || pt == KMinus || pt == Lambda || +// pt == SigmaPlus || pt == SigmaZero || pt == SigmaMinus +// /* || pt == antiLambda || pt == antiSigmaPlus || pt == antiSigmaZero || pt == antiSigmaMinus || +// pt == XiMinus || pt == XiZero || pt == antiXiZero || pt == antiXiMinus || */); if(pt == PiPlus) { return piPlusWidth; } else if(pt == PiMinus) { @@ -1338,6 +1354,8 @@ namespace G4INCL { return KShortWidth; } else if(pt == KLong) { return KLongWidth; + } else if(pt == Lambda) { + return LambdaWidth; } else { INCL_ERROR("getWidth : Unknown particle type." << '\n'); return 0.0; diff --git a/source/processes/hadronic/models/lend/GNUmakefile b/source/processes/hadronic/models/lend/GNUmakefile deleted file mode 100644 index 1d825852c34..00000000000 --- a/source/processes/hadronic/models/lend/GNUmakefile +++ /dev/null @@ -1,43 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic lend library. -# ----------------------------------------------------------- - -name := G4had_lend - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4PROCESSES_EXPORT -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT - -ifdef G4LIB_BUILD_EXPAT -CPPFLAGS += -I$(G4BASE)/externals/expat/include -endif - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/hadronic/models/lend/History b/source/processes/hadronic/models/lend/History index 59b8973ddd0..1a5f6f2b47b 100644 --- a/source/processes/hadronic/models/lend/History +++ b/source/processes/hadronic/models/lend/History @@ -5,8 +5,12 @@ which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- - -## 2023-02-06 Gabriele Cosmo (hadr-lend-V11-00-08) +## 2023-04-06 Dennis Wright (hadr-lend-V11-01-01) +- Fix coverity bug 104071: G4LENDGammaCrossSection::SelectChannel may return + negative atrray index. Same for G4LENDGammaCombinedCrossSection::SelectChannel. + Initialize iChannel to positive number. + +## 2023-02-06 Gabriele Cosmo (hadr-lend-V11-01-00) - Fixed potential uninitialised variables in MCGIDI_energy_parseMadlandNixFromTOM(). ## 2022-11-26 Gabriele Cosmo (hadr-lend-V11-00-07) diff --git a/source/processes/hadronic/models/lend/src/G4LENDCombinedCrossSection.cc b/source/processes/hadronic/models/lend/src/G4LENDCombinedCrossSection.cc index 9f0bbe4619e..0ac12fa2cac 100644 --- a/source/processes/hadronic/models/lend/src/G4LENDCombinedCrossSection.cc +++ b/source/processes/hadronic/models/lend/src/G4LENDCombinedCrossSection.cc @@ -65,7 +65,7 @@ G4double G4LENDCombinedCrossSection::GetIsoCrossSection( const G4DynamicParticle G4int G4LENDCombinedCrossSection::SelectChannel( const G4DynamicParticle* dp , G4int iZ , G4int iA , const G4Isotope* isotope , const G4Element* /*elment*/ , const G4Material* material ) { - G4int ichannel=-1; + G4int ichannel = 3; G4double XSs[4]; XSs[0] = elasticXS->GetIsoCrossSection( dp, iZ, iA, isotope, NULL , material ); XSs[1] = XSs[0] + inelasticXS->GetIsoCrossSection( dp, iZ, iA, isotope, NULL , material ); @@ -75,11 +75,11 @@ G4int G4LENDCombinedCrossSection::SelectChannel( const G4DynamicParticle* dp , G G4double total = XSs[3]; G4double random = G4UniformRand(); - for ( G4int i = 0 ; i != 4 ; i++ ) { - if ( random*total <= XSs[i] ) { - ichannel = i; - break; - } + for (G4int i = 0 ; i < 4 ; i++) { + if (random*total < XSs[i]) { + ichannel = i; + break; + } } return ichannel; diff --git a/source/processes/hadronic/models/lend/src/G4LENDGammaCrossSection.cc b/source/processes/hadronic/models/lend/src/G4LENDGammaCrossSection.cc index 13673c07707..206a13e653d 100644 --- a/source/processes/hadronic/models/lend/src/G4LENDGammaCrossSection.cc +++ b/source/processes/hadronic/models/lend/src/G4LENDGammaCrossSection.cc @@ -79,7 +79,7 @@ G4int G4LENDGammaCrossSection::SelectChannel(const G4DynamicParticle* dp, const G4Element*, const G4Material* material) { - G4int ichannel = -1; + G4int ichannel = 1; G4double XSs[2]; XSs[0] = inelasticXS->GetIsoCrossSection(dp, iZ, iA, isotope, nullptr, material); XSs[1] = XSs[0] + fissionXS->GetIsoCrossSection(dp, iZ, iA, isotope, nullptr, material); @@ -88,7 +88,7 @@ G4int G4LENDGammaCrossSection::SelectChannel(const G4DynamicParticle* dp, G4double random = G4UniformRand(); for (G4int i = 0; i < 2; i++) { - if (random*total <= XSs[i]) { + if (random*total < XSs[i]) { ichannel = i; break; } diff --git a/source/processes/hadronic/models/lepto_nuclear/GNUmakefile b/source/processes/hadronic/models/lepto_nuclear/GNUmakefile deleted file mode 100644 index c97d43bd01f..00000000000 --- a/source/processes/hadronic/models/lepto_nuclear/GNUmakefile +++ /dev/null @@ -1,41 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4had_lept_nuclear - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/management/include \ - -I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \ - -I$(G4BASE)/processes/hadronic/models/binary_cascade/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/models/particle_hp/GNUmakefile b/source/processes/hadronic/models/particle_hp/GNUmakefile deleted file mode 100644 index 1a93653d788..00000000000 --- a/source/processes/hadronic/models/particle_hp/GNUmakefile +++ /dev/null @@ -1,44 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4had_part_hp - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/intercoms/include - -ifdef G4LIB_BUILD_ZLIB - CPPFLAGS += -I$(G4BASE)/externals/zlib/include -endif - -include $(G4INSTALL)/config/common.gmk - -ifdef PHP_AS_HP - CPPFLAGS += -DPHP_AS_HP -endif diff --git a/source/processes/hadronic/models/particle_hp/History b/source/processes/hadronic/models/particle_hp/History index 78117f09b96..119bba5eff6 100644 --- a/source/processes/hadronic/models/particle_hp/History +++ b/source/processes/hadronic/models/particle_hp/History @@ -6,23 +6,75 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-06-16 Vladimir Ivanchenko (hadr-hpp-V11-00-22) +## 2023-06-17 Vladimir Ivanchenko (hadr-hpp-V11-01-09) +- G4ParticleHPEnergyDistribution, G4ParticleHPContAngularPar, + G4ParticleHPEnAngCorrelation - fixed old Coverity reports + +## 2023-06-16 Vladimir Ivanchenko (hadr-hpp-V11-01-08) - G4ParticleHPInelasticBaseFS - real fix of memory leak reported by Coverity -## 2023-06-07 Vladimir Ivanchenko +## 2023-06-07 Vladimir Ivanchenko (hadr-hpp-V11-01-07) - G4ParticleHPInelasticBaseFS - fix potential memory leak reported by Coverity -## 2023-03-13 Vladimir Ivanchenko (hadr-hpp-V11-00-21) +## 2023-05-04 Ben Morgan (hadr-hpp-V11-01-06) +- Apply clang-tidy fixes + +## 2023-05-02 Ben Morgan (hadr-hpp-V11-01-05) +- Apply clang-format to headers/sources + - FastLegendre source files are marked to be ignored due to complexity/size + +## 2023-03-13 Vladimir Ivanchenko (hadr-hpp-V11-01-04) +- G4ParticleHPGamma, G4ParticleHPLevel : are removed - G4ParticleHPNucLevel : added new data structure for nuclear levels - G4ParticleHPDeExGammas : rewitten in order to avoid usage of C-arrays, - which provoked a problem for CMS static build; code now fully based on + which provokes a problem for CMS static build; code now fully based on std::vector of G4ParticleHPNucLevel; public interfaces are not changed; - if in DB probability of decay for a given level is zero, it is - substituted by 1.e-6 + if in DB probability of decay for a give level is zero; it is substituted + to 1.e-6 - G4ParticleHPInelasticBaseFS, G4ParticleHPInelasticCompFS - gamma cascade sampling is checked and simplified (removed unnecessary computations) -## 2023-02-06 Gabriele Cosmo (hadr-hpp-V11-00-20) +## 2023-03-27 Alberto Ribon (hadr-hpp-V11-01-03) +- G4ParticleHPManager : removed the neutron kinetic energy threshold for applying + the SVT (Sampling of the Velocity of the Target) algorithm, because this + parameter is in G4HadronicParameters. +- G4ParticleHPMessenger : when changing the neutron kinetic energy threshold + for applying the SVT algorithm - as part of the setting of the DBRC + (Double Broadening Rejection Correction) algorithm - update the corresponding + value in G4HadronicParameters. +- G4ParticleHPElasticFS : get the neutron kinetic energy threshold for applying + the SVT algorithm from G4HadronicParameters; + in the method GetBiasedThermalNucleus, corrected mistake in the interval + where the max neutron cross section is considered for rejection. + +## 2023-03-13 Vladimir Ivanchenko (hadr-hpp-V11-01-02) +- G4ParticleHPGamma, G4ParticleHPLevel, G4ParticleHPDeExGammas - attempt to + fix compilation warning in CMSSW, reported in Geant4 issue #158; + removed internal counter; delete only objects, which are created + +## 2023-03-04 Alberto Ribon (hadr-hpp-V11-01-01) +Accurate modelling of elastic resonant scattering in heavy nuclei by +Marek Zmeskal and Loic Thulliez by the use of DBRC (Doppler Broadening +Rejection Correction) algorithm: +- G4ParticleHPManager : added new member variables, and corresponding + Get and Set methods, related to the DBRC algorithm. +- G4ParticleHPMessenger : added new UI commands to enable DBRC (which is off + by default) and to specify its parameters. +- G4ParticleHPVector : added new method GetMaxY to provide the maximum + cross section in the interval between two kinetic energy values. +- G4ParticleHPChannel : modified method ApplyYourself, with an extra argument, + for a special treatment of the elastic channel. +- G4ParticleHPElastic : modified call to G4ParticleHPChannel::ApplyYourself, + with an extra parameter. +- G4ParticleHPElasticFS : implemented the DBRC algorithm in the new method + GetBiasedThermalNucleus (in the case that DBRC algorithm should not be + applied, then this method calls G4Nucleus::GetBiasedThermalNucleus); + modified the method ApplyYourself to call the new method + GetBiasedThermalNucleus; + introduced two more new methods, InitializeScatterKernelParameters and + RegisterCrossSection, and corresponding new member variables. + +## 2023-02-06 Gabriele Cosmo (hadr-hpp-V11-01-00) - Minor cleanup in G4ParticleHPDeExGammas header for data initialisation. ## 2022-11-26 Gabriele Cosmo (hadr-hpp-V11-00-19) diff --git a/source/processes/hadronic/models/particle_hp/include/G4ArrayOps.hh b/source/processes/hadronic/models/particle_hp/include/G4ArrayOps.hh index ec6f74a1aeb..696e2a3e032 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ArrayOps.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ArrayOps.hh @@ -34,195 +34,152 @@ // [] (bracket) operator for element-wise access #ifndef G4ARRAYOPS_HH -#define G4ARRAYOPS_HH - -#include +#define G4ARRAYOPS_HH #include "globals.hh" +#include + /** G4ArrayOps is a namespace that provides template functions for * performing basic arithmatic operations on any data type that * is accessed with the [] operator. */ namespace G4ArrayOps { - /** Set's all the values in an array to a constant */ - template< class T > - void Set( G4int Elements, - T* To, - T Value ) - { - for(G4int position = 0; position < Elements; position++) - { - To[position] = Value; - } - } - - /** Copy values from one array to another */ - template< class T > - void Copy( G4int Elements, - T* To, - T* From ) - { - for(G4int position = 0; position < Elements; position++) - { - To[position] = From[position]; - } - } - - /** Add two arrays together. If the second array is NULL then the - * 'To' array is used as if the function were the += operator. - */ - template< class T > - void Add( G4int Elements, - T* To, - T* A1, - T* A2 = NULL ) - { - if(A2 == NULL) - { - A2 = To; - } - - for(G4int position = 0; position < Elements; position++) - { - To[position] = A2[position] + A1[position]; - } - } - - /** Add a constant to an array. If the second array is NULL then the - * 'To' array is used as if the function were the += operator. - */ - template< class T > - void Add( G4int Elements, - T* To, - T A1, - T* A2 = NULL ) - { - if(A2 == NULL) - { - A2 = To; - } - - for(G4int position = 0; position < Elements; position++) - { - To[position] = A1 + A2[position]; - } - } - - /** Subtract an array from another. If the second array is NULL then the - * 'To' array is used as if the function were the -= operator. - */ - template< class T > - void Subtract( G4int Elements, - T* To, - T* Minuend, - T* Subtrahend = NULL ) - { - if(Subtrahend == NULL) - { - Subtrahend = Minuend; - Minuend = To; - } - - for(G4int position = 0; position < Elements; position++) - { - To[position] = Minuend[position] - Subtrahend[position]; - } - } - - /** Multiply two arrays together. If the second array is NULL then the - * 'To' array is used as if the function were the *= operator. - */ - template< class T > - void Multiply( G4int Elements, - T* To, - T* M1, - T* M2 = NULL ) - { - if(M2 == NULL) - { - M2 = To; - } - - for(G4int position = 0; position < Elements; position++) - { - To[position] = M2[position] * M1[position]; - } - } - - /** Multiply an array by a constant. If the second array is NULL then the - * 'To' array is used as if the function were the *= operator. - */ - template< class T > - void Multiply( G4int Elements, - T* To, - T M1, - T* M2 = NULL ) - { - if(M2 == NULL) - { - M2 = To; - } - - for(G4int position = 0; position < Elements; position++) - { - To[position] = M2[position] * M1; - } - } - - /** Divide an array by another. If the second array is NULL then the - * 'To' array is used as if the function were the /= operator. - */ - template< class T > - void Divide( G4int Elements, - T* To, - T* Numerator, - T* Denominator = NULL ) - { - if(Denominator == NULL) - { - Denominator = Numerator; - Numerator = To; - } - - for(G4int position = 0; position < Elements; position++) - { - To[position] = Numerator[position] / Denominator[position]; - } - } - - /** Divide a constant by an array. If the second array is NULL then the - * 'To' array is used as if the function were the /= operator. - */ - template< class T > - void Divide( G4int Elements, - T* To, - T Numerator, - T* Denominator = NULL ) - { - if(Denominator == NULL) - { - Denominator = To; - } - - for(G4int position = 0; position < Elements; position++) - { - To[position] = Numerator / Denominator[position]; - } - } - - template< class T > - void DeleteVectorOfPointers( std::vector< T >& Vector ) - { - for(unsigned int i = 0; i < Vector.size(); i++) - { - delete Vector[i]; - } - - delete &Vector; - } +/** Set's all the values in an array to a constant */ +template +void Set(G4int Elements, T* To, T Value) +{ + for (G4int position = 0; position < Elements; position++) { + To[position] = Value; + } +} + +/** Copy values from one array to another */ +template +void Copy(G4int Elements, T* To, T* From) +{ + for (G4int position = 0; position < Elements; position++) { + To[position] = From[position]; + } +} + +/** Add two arrays together. If the second array is NULL then the + * 'To' array is used as if the function were the += operator. + */ +template +void Add(G4int Elements, T* To, T* A1, T* A2 = nullptr) +{ + if (A2 == nullptr) { + A2 = To; + } + + for (G4int position = 0; position < Elements; position++) { + To[position] = A2[position] + A1[position]; + } +} + +/** Add a constant to an array. If the second array is NULL then the + * 'To' array is used as if the function were the += operator. + */ +template +void Add(G4int Elements, T* To, T A1, T* A2 = NULL) +{ + if (A2 == NULL) { + A2 = To; + } + + for (G4int position = 0; position < Elements; position++) { + To[position] = A1 + A2[position]; + } +} + +/** Subtract an array from another. If the second array is NULL then the + * 'To' array is used as if the function were the -= operator. + */ +template +void Subtract(G4int Elements, T* To, T* Minuend, T* Subtrahend = NULL) +{ + if (Subtrahend == NULL) { + Subtrahend = Minuend; + Minuend = To; + } + + for (G4int position = 0; position < Elements; position++) { + To[position] = Minuend[position] - Subtrahend[position]; + } } -#endif /** G4ARRAYOPS_HH */ +/** Multiply two arrays together. If the second array is NULL then the + * 'To' array is used as if the function were the *= operator. + */ +template +void Multiply(G4int Elements, T* To, T* M1, T* M2 = nullptr) +{ + if (M2 == nullptr) { + M2 = To; + } + + for (G4int position = 0; position < Elements; position++) { + To[position] = M2[position] * M1[position]; + } +} + +/** Multiply an array by a constant. If the second array is NULL then the + * 'To' array is used as if the function were the *= operator. + */ +template +void Multiply(G4int Elements, T* To, T M1, T* M2 = NULL) +{ + if (M2 == NULL) { + M2 = To; + } + + for (G4int position = 0; position < Elements; position++) { + To[position] = M2[position] * M1; + } +} + +/** Divide an array by another. If the second array is NULL then the + * 'To' array is used as if the function were the /= operator. + */ +template +void Divide(G4int Elements, T* To, T* Numerator, T* Denominator = NULL) +{ + if (Denominator == NULL) { + Denominator = Numerator; + Numerator = To; + } + + for (G4int position = 0; position < Elements; position++) { + To[position] = Numerator[position] / Denominator[position]; + } +} + +/** Divide a constant by an array. If the second array is NULL then the + * 'To' array is used as if the function were the /= operator. + */ +template +void Divide(G4int Elements, T* To, T Numerator, T* Denominator = NULL) +{ + if (Denominator == nullptr) { + Denominator = To; + } + + for (G4int position = 0; position < Elements; position++) { + To[position] = Numerator / Denominator[position]; + } +} + +template +void DeleteVectorOfPointers(std::vector& Vector) +{ + for (unsigned int i = 0; i < Vector.size(); i++) { + delete Vector[i]; + } + + delete &Vector; +} +} // namespace G4ArrayOps +#endif /** G4ARRAYOPS_HH */ diff --git a/source/processes/hadronic/models/particle_hp/include/G4ENDFTapeRead.hh b/source/processes/hadronic/models/particle_hp/include/G4ENDFTapeRead.hh index 87d4414bb1e..102f78aee0f 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ENDFTapeRead.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ENDFTapeRead.hh @@ -31,13 +31,12 @@ */ #ifndef G4ENDFTAPEREAD_HH -#define G4ENDFTAPEREAD_HH - -#include "globals.hh" +#define G4ENDFTAPEREAD_HH #include "G4ENDFYieldDataContainer.hh" #include "G4FFGEnumerations.hh" #include "G4TableTemplate.hh" +#include "globals.hh" /** G4ENDFTapeRead is a class designed to read in data from unformatted ENDF data * tapes for MT = 454 or MT = 459, which correspond to independent fission @@ -47,8 +46,8 @@ */ class G4ENDFTapeRead { -public: -// Constructor definition + public: + // Constructor definition /** Default constructor * - Usage: * - \p FileLocation: the absolute path to the file @@ -58,10 +57,9 @@ public: * * - Notes: The data will be read in immediately upon construction. */ - G4ENDFTapeRead( G4String FileLocation, - G4String FileName, - G4FFGEnumerations::YieldType WhichYield, - G4FFGEnumerations::FissionCause WhichCause ); + G4ENDFTapeRead(G4String FileLocation, G4String FileName, + G4FFGEnumerations::YieldType WhichYield, + G4FFGEnumerations::FissionCause WhichCause); /** Overloaded constructor * - Usage: * - \p FileLocation: the absolute path to the file @@ -72,11 +70,9 @@ public: * * - Notes: The data will be read in immediately upon construction. */ - G4ENDFTapeRead( G4String FileLocation, - G4String FileName, - G4FFGEnumerations::YieldType WhichYield, - G4FFGEnumerations::FissionCause WhichCause, - G4int Verbosity ); + G4ENDFTapeRead(G4String FileLocation, G4String FileName, + G4FFGEnumerations::YieldType WhichYield, + G4FFGEnumerations::FissionCause WhichCause, G4int Verbosity); /** Overloaded constructor * - Usage: * - \p DataFile: The absolute path to the data file @@ -86,38 +82,37 @@ public: * * - Notes: The data will be read in immediately upon construction. */ - G4ENDFTapeRead( std::istringstream& dataStream, - G4FFGEnumerations::YieldType WhichYield, - G4FFGEnumerations::FissionCause WhichCause, - G4int Verbosity ); -protected: + G4ENDFTapeRead(std::istringstream& dataStream, G4FFGEnumerations::YieldType WhichYield, + G4FFGEnumerations::FissionCause WhichCause, G4int Verbosity); + + protected: /** Initialize is a common function called by all constructors. */ - void Initialize( G4String dataFile ); + void Initialize(G4String dataFile); /** Initialize is a common function calles by all constructors */ - void Initialize( std::istringstream& dataStream ); + void Initialize(std::istringstream& dataStream); -public: -// Functions + public: + // Functions /** Returns and array containing the values of each of the energy groups * - Usage: No arguments required * * - Notes: */ - G4double* G4GetEnergyGroupValues( void ); + G4double* G4GetEnergyGroupValues(); /** Returns the number of energy yield groups that were extracted from the * ENDF tape file * - Usage: No arguments required * * - Notes: */ - G4int G4GetNumberOfEnergyGroups( void ); + G4int G4GetNumberOfEnergyGroups(); /** Returns the number of fission products that were extracted from the * ENDF tape file * - Usage: No arguments required * * - Notes: */ - G4int G4GetNumberOfFissionProducts( void ); + G4int G4GetNumberOfFissionProducts(); /** Returns the data for the requested fission product * - Usage: * - \p WhichYield: 0-based index of the fission product for which to @@ -127,7 +122,7 @@ public: * - This will return a pointer to the next G4FissionYieldContainer. * NULL will be returned if no more fission containers exist. */ - G4ENDFYieldDataContainer* G4GetYield( G4int WhichYield ); + G4ENDFYieldDataContainer* G4GetYield(G4int WhichYield); /** Sets the verbosity levels * - Usage: * - \p WhichVerbosity: Combination of levels @@ -140,20 +135,21 @@ public: * - \p GAMMA_INFO: Displays information about gamma sampling * - \p ALPHA_INFO: Displays information about alpha sampling * - \p MOMENTUM_INFO: Displays information about momentum balancing - * - \p EXTRAPOLATION_INTERPOLATION_INFO: Displays information about any data extrapolation or interpolation that occurs + * - \p EXTRAPOLATION_INTERPOLATION_INFO: Displays information about any data extrapolation + * or interpolation that occurs * - \p DEBUG: Reports program flow as it steps through functions * - \p PRINT_ALL: Displays any and all output */ - void G4SetVerbosity( G4int WhatVerbosity ); - -private: -// Functions + void G4SetVerbosity(G4int WhatVerbosity); + + private: + // Functions /** Read in the data from an ENDF data tape. */ - void ReadInData( std::istringstream& dataStream ); + void ReadInData(std::istringstream& dataStream); -// Data members + // Data members /** Stores the number corresponding to the fission cause that will be extracted */ - //const G4FFGEnumerations::FissionCause Cause_; + // const G4FFGEnumerations::FissionCause Cause_; /** Counter for the number of energy groups that were extracted */ G4int EnergyGroups_; /** Array containing the values of the extracted energy groups */ @@ -161,15 +157,14 @@ private: /** Verbosity level */ G4int Verbosity_; /** Storage for the extracted data */ - G4TableTemplate< G4ENDFYieldDataContainer >* YieldContainerTable_; + G4TableTemplate* YieldContainerTable_; /** Stores the number corresponding to the yield type that will be extracted */ const G4FFGEnumerations::YieldType YieldType_; -// Destructor function(s) -public: + // Destructor function(s) + public: /** Default Deconstructor */ - ~G4ENDFTapeRead( void ); + ~G4ENDFTapeRead(); }; -#endif /* G4ENDFTAPEREAD_HH */ - +#endif /* G4ENDFTAPEREAD_HH */ diff --git a/source/processes/hadronic/models/particle_hp/include/G4ENDFYieldDataContainer.hh b/source/processes/hadronic/models/particle_hp/include/G4ENDFYieldDataContainer.hh index 80041283d61..66b963ae02a 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ENDFYieldDataContainer.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ENDFYieldDataContainer.hh @@ -31,13 +31,12 @@ */ #ifndef G4ENDFYIELDDATACONTAINER_HH -#define G4ENDFYIELDDATACONTAINER_HH - -#include "globals.hh" +#define G4ENDFYIELDDATACONTAINER_HH #include "G4FFGEnumerations.hh" +#include "globals.hh" -/** G4ENDFYieldDataContainer is a simple data storage class that handles +/** G4ENDFYieldDataContainer is a simple data storage class that handles * the memory management internally. One instance stores the information * for one fission product. In the event of a non-spontaneous fission, it * can store the yield probabilities and errors at each of the fission- @@ -46,35 +45,35 @@ */ class G4ENDFYieldDataContainer { -public: -// Constructor + public: + // Constructor /** Default constructor */ - G4ENDFYieldDataContainer ( G4int YieldSlots ); + G4ENDFYieldDataContainer(G4int YieldSlots); -// Functions + // Functions /** Get the meta state */ - G4FFGEnumerations::MetaState GetMetaState( void ); + G4FFGEnumerations::MetaState GetMetaState(); /** Get the product */ - G4int GetProduct( void ); + G4int GetProduct(); /** Get the yield error */ - G4double* GetYieldError( void ); + G4double* GetYieldError(); /** Get the yield probability */ - G4double* GetYieldProbability( void ); + G4double* GetYieldProbability(); /** Get the number of yield slots */ - G4int GetYieldSlots( void ); + G4int GetYieldSlots(); /** Set the meta state */ - void SetMetaState( G4FFGEnumerations::MetaState MetaState ); + void SetMetaState(G4FFGEnumerations::MetaState MetaState); /** Set the product */ - void SetProduct( G4int Product ); + void SetProduct(G4int Product); /** Set the yield error */ - void SetYieldError( G4double* YieldError ); + void SetYieldError(G4double* YieldError); /** Set the yield probability */ - void SetYieldProbability( G4double* YieldProbability ); + void SetYieldProbability(G4double* YieldProbability); /** Set the number of yield slots */ - void SetYieldSlots( G4int NumberOfSlots ); + void SetYieldSlots(G4int NumberOfSlots); -protected: -// Data members + protected: + // Data members /** The number of energy groups, or yield slots, that are stored */ G4int YieldSlots_; /** ZZZAAA identifier of the stored isotope */ @@ -86,11 +85,10 @@ protected: /** Array of the yield probability errors, one per yield slot */ G4double* YieldError_; -// Destructor function(s) -public: + // Destructor function(s) + public: /** Default deconstructor */ - ~G4ENDFYieldDataContainer( void ); + ~G4ENDFYieldDataContainer(); }; -#endif /* G4ENDFYIELDDATACONTAINER_HH */ - +#endif /* G4ENDFYIELDDATACONTAINER_HH */ diff --git a/source/processes/hadronic/models/particle_hp/include/G4FFGDebuggingMacros.hh b/source/processes/hadronic/models/particle_hp/include/G4FFGDebuggingMacros.hh index 4a3206889a1..58b1570abcf 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4FFGDebuggingMacros.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4FFGDebuggingMacros.hh @@ -33,194 +33,185 @@ #ifndef G4FFGDEBUGGINGMACROS_HH #define G4FFGDEBUGGINGMACROS_HH -#include "globals.hh" - #include "G4FFGEnumerations.hh" #include "G4FFGVerboseMacros.hh" +#include "globals.hh" // Define the function as available by the compiler #if defined(__GNUC__) - #define G4FFG_FUNCTION_SIGNATURE__ G4String(__func__) + "()" +# define G4FFG_FUNCTION_SIGNATURE__ G4String(__func__) + "()" #elif defined(_MSC_VER) - // I'm not sure if this is the correct syntax for MS VC - #define G4FFG_FUNCTION_SIGNATURE__ G4String(__FUNCTION__) + "()" +// I'm not sure if this is the correct syntax for MS VC +# define G4FFG_FUNCTION_SIGNATURE__ G4String(__FUNCTION__) + "()" #else - #define G4FFG_FUNCTION_SIGNATURE__ "a function" +# define G4FFG_FUNCTION_SIGNATURE__ "a function" #endif // Only define the variables and macros if G4DEBUG_VERBOSE is set #if defined(G4DEBUG_VERBOSE) - /** G4FFGDEBUG_RECURSIVE_REPRESSION is used to aid in the repression of - * debugging messages from recursive function calls. - */ - extern G4long G4FFGDEBUG_RECURSIVE_REPRESSION; - /** G4FFGDEBUG_RECURSIVE_REPRESSION_COUNTER tracks the number of recursive - * function debugging messages were repressed. - */ - extern G4long G4FFGDEBUG_RECURSIVE_REPRESSION_COUNTER; - /** G4FFGDEBUG_DATA_STRUCTURE_REPRESSION is used to aid in the repression of - * debugging messages from functions that sort/access data elements. - */ - extern G4long G4FFGDEBUG_DATA_STRUCTURE_REPRESSION; - /** G4FFGDEBUG_DATA_STRUCTURE_REPRESSION_COUNTER tracks the number of recursive - * function debugging messages were repressed. - */ - extern G4long G4FFGDEBUG_DATA_STRUCTURE_REPRESSION_COUNTER; +/** G4FFGDEBUG_RECURSIVE_REPRESSION is used to aid in the repression of + * debugging messages from recursive function calls. + */ +extern G4long G4FFGDEBUG_RECURSIVE_REPRESSION; +/** G4FFGDEBUG_RECURSIVE_REPRESSION_COUNTER tracks the number of recursive + * function debugging messages were repressed. + */ +extern G4long G4FFGDEBUG_RECURSIVE_REPRESSION_COUNTER; +/** G4FFGDEBUG_DATA_STRUCTURE_REPRESSION is used to aid in the repression of + * debugging messages from functions that sort/access data elements. + */ +extern G4long G4FFGDEBUG_DATA_STRUCTURE_REPRESSION; +/** G4FFGDEBUG_DATA_STRUCTURE_REPRESSION_COUNTER tracks the number of recursive + * function debugging messages were repressed. + */ +extern G4long G4FFGDEBUG_DATA_STRUCTURE_REPRESSION_COUNTER; // Entering functions - /** G4FFG_FUNCTIONENTER__ is blank if G4DEBUG_VERBOSE is not defined at compile time. - * Otherwise, it is used by the fission fragment code to notify when a function is - * first entered. - */ - #define G4FFG_FUNCTIONENTER__ \ - if((Verbosity_ & G4FFGEnumerations::DEBUG) && !(Verbosity_ & G4FFGEnumerations::REPRESS_FUNCTION_ENTER_LEAVE_MESSAGES)) \ - { \ - G4FFG_SPACING__ \ - G4cout << "Entering ";\ - G4FFG_LOCATION__ \ - G4cout << G4endl; \ - } \ +/** G4FFG_FUNCTIONENTER__ is blank if G4DEBUG_VERBOSE is not defined at compile time. + * Otherwise, it is used by the fission fragment code to notify when a function is + * first entered. + */ +# define G4FFG_FUNCTIONENTER__ \ + if ((Verbosity_ & G4FFGEnumerations::DEBUG) \ + && !(Verbosity_ & G4FFGEnumerations::REPRESS_FUNCTION_ENTER_LEAVE_MESSAGES)) \ + { \ + G4FFG_SPACING__ \ + G4cout << "Entering "; \ + G4FFG_LOCATION__ \ + G4cout << G4endl; \ + } \ G4FFG_DEPTH++; - - /** G4FFG_SAMPLING_FUNCTIONENTER__ wraps around G4FFG_FUNCTIONENTER__ and - * can be used in conjunctions with - * G4FFGEnumeration::REPRESS_RANDOM_SAMPLING_MESSAGES to repress debugging output - * for psuedorandom number generation functions - */ - #define G4FFG_SAMPLING_FUNCTIONENTER__ \ - if(!(Verbosity_ & G4FFGEnumerations::REPRESS_RANDOM_SAMPLING_MESSAGES)) \ - { \ - G4FFG_FUNCTIONENTER__ \ + +/** G4FFG_SAMPLING_FUNCTIONENTER__ wraps around G4FFG_FUNCTIONENTER__ and + * can be used in conjunctions with + * G4FFGEnumeration::REPRESS_RANDOM_SAMPLING_MESSAGES to repress debugging output + * for psuedorandom number generation functions + */ +# define G4FFG_SAMPLING_FUNCTIONENTER__ \ + if (!(Verbosity_ & G4FFGEnumerations::REPRESS_RANDOM_SAMPLING_MESSAGES)) { \ + G4FFG_FUNCTIONENTER__ \ } - - /** G4FFG_RECURSIVE_FUNCTIONENTER__ wraps around G4FFG_FUNCTIONENTER__ and - * can be used in conjunctions with - * G4FFGEnumeration::REPRESS_RECURSIVE_DEBUG_MESSAGES to repress debugging output - * recursive function calls. - */ - #define G4FFG_RECURSIVE_FUNCTIONENTER__ \ - if(Verbosity_ & G4FFGEnumerations::REPRESS_RECURSIVE_DEBUG_MESSAGES)\ - { \ - if(G4FFGDEBUG_RECURSIVE_REPRESSION == 0) \ - { \ - G4FFG_FUNCTIONENTER__ \ - } else \ - { \ - G4FFGDEBUG_RECURSIVE_REPRESSION_COUNTER++; \ - } \ - G4FFGDEBUG_RECURSIVE_REPRESSION++; \ - } else \ - { \ - G4FFG_FUNCTIONENTER__ \ + +/** G4FFG_RECURSIVE_FUNCTIONENTER__ wraps around G4FFG_FUNCTIONENTER__ and + * can be used in conjunctions with + * G4FFGEnumeration::REPRESS_RECURSIVE_DEBUG_MESSAGES to repress debugging output + * recursive function calls. + */ +# define G4FFG_RECURSIVE_FUNCTIONENTER__ \ + if (Verbosity_ & G4FFGEnumerations::REPRESS_RECURSIVE_DEBUG_MESSAGES) { \ + if (G4FFGDEBUG_RECURSIVE_REPRESSION == 0) { \ + G4FFG_FUNCTIONENTER__ \ + } \ + else { \ + G4FFGDEBUG_RECURSIVE_REPRESSION_COUNTER++; \ + } \ + G4FFGDEBUG_RECURSIVE_REPRESSION++; \ + } \ + else { \ + G4FFG_FUNCTIONENTER__ \ } - - /** G4FFG_DATA_FUNCTIONENTER__ wraps around G4FFG_FUNCTIONENTER__ and - * can be used in conjunctions with - * G4FFGEnumeration::REPRESS_DATA_STRUCTURE_DEBUG_MESSAGES to repress debugging output - * recursive function calls. - */ - #define G4FFG_DATA_FUNCTIONENTER__ \ - if(Verbosity_ & G4FFGEnumerations::REPRESS_DATA_STRUCTURE_DEBUG_MESSAGES)\ - { \ - if(G4FFGDEBUG_RECURSIVE_REPRESSION == 0) \ - { \ - G4FFG_FUNCTIONENTER__ \ - } else \ - { \ - G4FFGDEBUG_DATA_STRUCTURE_REPRESSION_COUNTER++; \ - } \ - G4FFGDEBUG_RECURSIVE_REPRESSION++; \ - } else \ - { \ - G4FFG_FUNCTIONENTER__ \ + +/** G4FFG_DATA_FUNCTIONENTER__ wraps around G4FFG_FUNCTIONENTER__ and + * can be used in conjunctions with + * G4FFGEnumeration::REPRESS_DATA_STRUCTURE_DEBUG_MESSAGES to repress debugging output + * recursive function calls. + */ +# define G4FFG_DATA_FUNCTIONENTER__ \ + if (Verbosity_ & G4FFGEnumerations::REPRESS_DATA_STRUCTURE_DEBUG_MESSAGES) { \ + if (G4FFGDEBUG_RECURSIVE_REPRESSION == 0) { \ + G4FFG_FUNCTIONENTER__ \ + } \ + else { \ + G4FFGDEBUG_DATA_STRUCTURE_REPRESSION_COUNTER++; \ + } \ + G4FFGDEBUG_RECURSIVE_REPRESSION++; \ + } \ + else { \ + G4FFG_FUNCTIONENTER__ \ } // Leaving functions - /** G4FFG_FUNCTIONLEAVE__ is blank if G4DEBUG_VERBOSE is not defined at compile time. - * Otherwise, it is used by the fission fragment code to notify when a function is - * exited. It will also be found before \p return statements, since those exit a - * funtion as well. - */ - #define G4FFG_FUNCTIONLEAVE__ \ - G4FFG_DEPTH--; \ - if((Verbosity_ & G4FFGEnumerations::DEBUG) && !(Verbosity_ & G4FFGEnumerations::REPRESS_FUNCTION_ENTER_LEAVE_MESSAGES)) \ - { \ - G4FFG_SPACING__ \ - G4cout << "Leaving ";\ - G4FFG_LOCATION__ \ - G4cout << G4endl; \ +/** G4FFG_FUNCTIONLEAVE__ is blank if G4DEBUG_VERBOSE is not defined at compile time. + * Otherwise, it is used by the fission fragment code to notify when a function is + * exited. It will also be found before \p return statements, since those exit a + * funtion as well. + */ +# define G4FFG_FUNCTIONLEAVE__ \ + G4FFG_DEPTH--; \ + if ((Verbosity_ & G4FFGEnumerations::DEBUG) \ + && !(Verbosity_ & G4FFGEnumerations::REPRESS_FUNCTION_ENTER_LEAVE_MESSAGES)) \ + { \ + G4FFG_SPACING__ \ + G4cout << "Leaving "; \ + G4FFG_LOCATION__ \ + G4cout << G4endl; \ } - - /** G4FFG_SAMPLING_FUNCTIONLEAVE__ wraps around G4FFG_FUNCTIONLEAVE__ and - * can be used in conjunctions with - * G4FFGEnumeration::REPRESS_RANDOM_SAMPLING_MESSAGES to repress debugging output - * for psuedorandom number generation functions - */ - #define G4FFG_SAMPLING_FUNCTIONLEAVE__ \ - if(!(Verbosity_ & G4FFGEnumerations::REPRESS_RANDOM_SAMPLING_MESSAGES)) \ - { \ - G4FFG_FUNCTIONLEAVE__ \ + +/** G4FFG_SAMPLING_FUNCTIONLEAVE__ wraps around G4FFG_FUNCTIONLEAVE__ and + * can be used in conjunctions with + * G4FFGEnumeration::REPRESS_RANDOM_SAMPLING_MESSAGES to repress debugging output + * for psuedorandom number generation functions + */ +# define G4FFG_SAMPLING_FUNCTIONLEAVE__ \ + if (!(Verbosity_ & G4FFGEnumerations::REPRESS_RANDOM_SAMPLING_MESSAGES)) { \ + G4FFG_FUNCTIONLEAVE__ \ } - - /** G4FFG_RECURSIVE_FUNCTIONLEAVE__ wraps around G4FFG_FUNCTIONLEAVE__ and - * can be used in conjunctions with - * G4FFGEnumeration::REPRESS_RECURSIVE_DEBUG_MESSAGES to repress debugging output - * recursive function calls. - */ - #define G4FFG_RECURSIVE_FUNCTIONLEAVE__ \ - if(Verbosity_ & G4FFGEnumerations::REPRESS_RECURSIVE_DEBUG_MESSAGES)\ - { \ - G4FFGDEBUG_RECURSIVE_REPRESSION--; \ - if(G4FFGDEBUG_RECURSIVE_REPRESSION == 0) \ - { \ - if(G4FFGDEBUG_RECURSIVE_REPRESSION_COUNTER > 0) \ - { \ - G4FFG_SPACING__ \ - G4cout << "==== " << G4FFGDEBUG_RECURSIVE_REPRESSION_COUNTER * 2 << " recursive function messages suppressed ====" << G4endl; \ - G4FFGDEBUG_RECURSIVE_REPRESSION_COUNTER = 0; \ - } \ - G4FFG_FUNCTIONLEAVE__ \ - } \ - } else \ - { \ - G4FFG_FUNCTIONLEAVE__ \ + +/** G4FFG_RECURSIVE_FUNCTIONLEAVE__ wraps around G4FFG_FUNCTIONLEAVE__ and + * can be used in conjunctions with + * G4FFGEnumeration::REPRESS_RECURSIVE_DEBUG_MESSAGES to repress debugging output + * recursive function calls. + */ +# define G4FFG_RECURSIVE_FUNCTIONLEAVE__ \ + if (Verbosity_ & G4FFGEnumerations::REPRESS_RECURSIVE_DEBUG_MESSAGES) { \ + G4FFGDEBUG_RECURSIVE_REPRESSION--; \ + if (G4FFGDEBUG_RECURSIVE_REPRESSION == 0) { \ + if (G4FFGDEBUG_RECURSIVE_REPRESSION_COUNTER > 0) { \ + G4FFG_SPACING__ \ + G4cout << "==== " << G4FFGDEBUG_RECURSIVE_REPRESSION_COUNTER * 2 \ + << " recursive function messages suppressed ====" << G4endl; \ + G4FFGDEBUG_RECURSIVE_REPRESSION_COUNTER = 0; \ + } \ + G4FFG_FUNCTIONLEAVE__ \ + } \ + } \ + else { \ + G4FFG_FUNCTIONLEAVE__ \ } - - /** G4FFG_DATA_FUNCTIONLEAVE__ wraps around G4FFG_FUNCTIONLEAVE__ and - * can be used in conjunctions with - * G4FFGEnumeration::REPRESS_DATA_STRUCTURE_DEBUG_MESSAGES to repress debugging output - * recursive function calls. - */ - #define G4FFG_DATA_FUNCTIONLEAVE__ \ - if(Verbosity_ & G4FFGEnumerations::REPRESS_DATA_STRUCTURE_DEBUG_MESSAGES)\ - { \ - G4FFGDEBUG_RECURSIVE_REPRESSION--; \ - if(G4FFGDEBUG_RECURSIVE_REPRESSION == 0) \ - { \ - if(G4FFGDEBUG_DATA_STRUCTURE_REPRESSION_COUNTER > 0) \ - { \ - G4FFG_SPACING__ \ - G4cout << "==== " << G4FFGDEBUG_DATA_STRUCTURE_REPRESSION_COUNTER * 2 << " data structure function messages suppressed ====" << G4endl; \ - G4FFGDEBUG_DATA_STRUCTURE_REPRESSION_COUNTER = 0; \ - } \ - G4FFG_FUNCTIONLEAVE__ \ - } \ - } else \ - { \ - G4FFG_FUNCTIONLEAVE__ \ + +/** G4FFG_DATA_FUNCTIONLEAVE__ wraps around G4FFG_FUNCTIONLEAVE__ and + * can be used in conjunctions with + * G4FFGEnumeration::REPRESS_DATA_STRUCTURE_DEBUG_MESSAGES to repress debugging output + * recursive function calls. + */ +# define G4FFG_DATA_FUNCTIONLEAVE__ \ + if (Verbosity_ & G4FFGEnumerations::REPRESS_DATA_STRUCTURE_DEBUG_MESSAGES) { \ + G4FFGDEBUG_RECURSIVE_REPRESSION--; \ + if (G4FFGDEBUG_RECURSIVE_REPRESSION == 0) { \ + if (G4FFGDEBUG_DATA_STRUCTURE_REPRESSION_COUNTER > 0) { \ + G4FFG_SPACING__ \ + G4cout << "==== " << G4FFGDEBUG_DATA_STRUCTURE_REPRESSION_COUNTER * 2 \ + << " data structure function messages suppressed ====" << G4endl; \ + G4FFGDEBUG_DATA_STRUCTURE_REPRESSION_COUNTER = 0; \ + } \ + G4FFG_FUNCTIONLEAVE__ \ + } \ + } \ + else { \ + G4FFG_FUNCTIONLEAVE__ \ } #else /* G4DEBUG_VERBOSE */ // If G4DEBUG_VERBOSE is not defined then we will need to define these macros but leave them empty -// Except for G4FFG_FUNCTIONENTER__ and G4FFG_FUNCTIONLEAVE__, which will be used to track G4FFG_DEPTH - #define G4FFG_FUNCTIONENTER__ G4FFG_DEPTH++; - #define G4FFG_SAMPLING_FUNCTIONENTER__ - #define G4FFG_RECURSIVE_FUNCTIONENTER__ - #define G4FFG_DATA_FUNCTIONENTER__ - #define G4FFG_FUNCTIONLEAVE__ G4FFG_DEPTH--; - #define G4FFG_SAMPLING_FUNCTIONLEAVE__ - #define G4FFG_RECURSIVE_FUNCTIONLEAVE__ - #define G4FFG_DATA_FUNCTIONLEAVE__ +// Except for G4FFG_FUNCTIONENTER__ and G4FFG_FUNCTIONLEAVE__, which will be used to track +// G4FFG_DEPTH +# define G4FFG_FUNCTIONENTER__ G4FFG_DEPTH++; +# define G4FFG_SAMPLING_FUNCTIONENTER__ +# define G4FFG_RECURSIVE_FUNCTIONENTER__ +# define G4FFG_DATA_FUNCTIONENTER__ +# define G4FFG_FUNCTIONLEAVE__ G4FFG_DEPTH--; +# define G4FFG_SAMPLING_FUNCTIONLEAVE__ +# define G4FFG_RECURSIVE_FUNCTIONLEAVE__ +# define G4FFG_DATA_FUNCTIONLEAVE__ #endif /* G4DEBUG_VERBOSE */ #endif /* G4FFGDEBUGGINGMACROS_HH */ - diff --git a/source/processes/hadronic/models/particle_hp/include/G4FFGDefaultValues.hh b/source/processes/hadronic/models/particle_hp/include/G4FFGDefaultValues.hh index 40de598f58a..c965fde271c 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4FFGDefaultValues.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4FFGDefaultValues.hh @@ -33,12 +33,11 @@ #ifndef G4FFGDEFAULTVALUES_HH #define G4FFGDEFAULTVALUES_HH -//#include "G4SystemOfUnits.hh" bad, use instead: +// #include "G4SystemOfUnits.hh" bad, use instead: #include // and use constants with namespace, see below e.g. eV becomes CLHEP::eV -#include "G4ThreeVector.hh" - #include "G4FFGEnumerations.hh" +#include "G4ThreeVector.hh" /** G4FFGDefaultValues is a one-stop shop for storing the default values to * variables that configure how the fission fragment generator code is @@ -47,71 +46,70 @@ namespace G4FFGDefaultValues { // Global - /** The energy of thermal neutrons */ - static const G4double ThermalNeutronEnergy = 0.0253 * CLHEP::eV; +/** The energy of thermal neutrons */ +static const G4double ThermalNeutronEnergy = 0.0253 * CLHEP::eV; // Verbosity #ifdef G4DEBUG_VERBOSE - /** Verbosity for the entire package */ - static const G4int Verbosity = G4FFGEnumerations::PRINT_ALL;// | G4FFGEnumerations::REPRESS_FUNCTION_ENTER_LEAVE_MESSAGES; +/** Verbosity for the entire package */ +static const G4int Verbosity = + G4FFGEnumerations::PRINT_ALL; // | G4FFGEnumerations::REPRESS_FUNCTION_ENTER_LEAVE_MESSAGES; #else /* G4DEBUG_VERBOSE */ - /** Verbosity for the entire package */ - static const G4FFGEnumerations::Verbosity Verbosity = G4FFGEnumerations::SILENT; +/** Verbosity for the entire package */ +static const G4FFGEnumerations::Verbosity Verbosity = G4FFGEnumerations::SILENT; #endif /* G4DEBUG_VERBOSE */ // Fission Parameters - /** Default Isotope */ - static const G4int Isotope = 92238; - /** Default meta state */ - static const G4FFGEnumerations::MetaState MetaState = G4FFGEnumerations::GROUND_STATE; - /** Default fission cause */ - static const G4FFGEnumerations::FissionCause FissionCause = G4FFGEnumerations::SPONTANEOUS; - /** Default incident energy */ - static const G4double IncidentEnergy = ThermalNeutronEnergy / CLHEP::eV; - /** Default incident energy unit */ - static const char IncidentEnergyUnit[] = "eV"; - /** Default yield type */ - static const G4FFGEnumerations::YieldType YieldType = G4FFGEnumerations::INDEPENDENT; - /** Default sampling scheme */ - static const G4FFGEnumerations::FissionSamplingScheme SamplingScheme = G4FFGEnumerations::NORMAL; - /** Default probabilility of a ternary fission */ - static const G4double TernaryProbability = 0; - /** Default alpha production in a ternary fission */ - static const G4double AlphaProduction = 0; - /** Default mean gamma energy for gamma sampling */ - static const G4double MeanGammaEnergy = 800 * CLHEP::keV; +/** Default Isotope */ +static const G4int Isotope = 92238; +/** Default meta state */ +static const G4FFGEnumerations::MetaState MetaState = G4FFGEnumerations::GROUND_STATE; +/** Default fission cause */ +static const G4FFGEnumerations::FissionCause FissionCause = G4FFGEnumerations::SPONTANEOUS; +/** Default incident energy */ +static const G4double IncidentEnergy = ThermalNeutronEnergy / CLHEP::eV; +/** Default incident energy unit */ +static const char IncidentEnergyUnit[] = "eV"; +/** Default yield type */ +static const G4FFGEnumerations::YieldType YieldType = G4FFGEnumerations::INDEPENDENT; +/** Default sampling scheme */ +static const G4FFGEnumerations::FissionSamplingScheme SamplingScheme = G4FFGEnumerations::NORMAL; +/** Default probabilility of a ternary fission */ +static const G4double TernaryProbability = 0; +/** Default alpha production in a ternary fission */ +static const G4double AlphaProduction = 0; +/** Default mean gamma energy for gamma sampling */ +static const G4double MeanGammaEnergy = 800 * CLHEP::keV; // Event Parameters - /** Default event time */ - static const G4double EventTime = 0; - /** Default event time units */ - static const char EventTimeUnit[] = "ns"; +/** Default event time */ +static const G4double EventTime = 0; +/** Default event time units */ +static const char EventTimeUnit[] = "ns"; // Source Description - /** Default source center */ - static const G4ThreeVector SourceCenter(0, 0, 0); - /** Default source depth */ - static const G4double SourceDepth = 1; - /** Default source rectangle Height */ - static const G4double SourceHeight = 1; - /** Default source radius */ - static const G4double SourceRadius = 1; - /** Default source rectangle Width */ - static const G4double SourceWidth = 1; - /** Default event time units */ - static const char SourceDimensionUnit[] = "cm"; - /** Default source type */ - static const G4FFGEnumerations::SourceType SourceType = G4FFGEnumerations::SPHERE; +/** Default source center */ +static const G4ThreeVector SourceCenter(0, 0, 0); +/** Default source depth */ +static const G4double SourceDepth = 1; +/** Default source rectangle Height */ +static const G4double SourceHeight = 1; +/** Default source radius */ +static const G4double SourceRadius = 1; +/** Default source rectangle Width */ +static const G4double SourceWidth = 1; +/** Default event time units */ +static const char SourceDimensionUnit[] = "cm"; +/** Default source type */ +static const G4FFGEnumerations::SourceType SourceType = G4FFGEnumerations::SPHERE; // Messenger - /** Default command directory */ - static const char UICommandDirectory[] = "/process/hadronic/ffgupga"; +/** Default command directory */ +static const char UICommandDirectory[] = "/process/hadronic/ffgupga"; // Data - /** ENDF data tape location, reference against \p G4HPNEUTRONDATA */ - static const char ENDFFissionDataLocation[] = "/Fission/FF/"; -} +/** ENDF data tape location, reference against \p G4HPNEUTRONDATA */ +static const char ENDFFissionDataLocation[] = "/Fission/FF/"; +} // namespace G4FFGDefaultValues #endif /** G4FFGDEFAULTVALUES_HH */ - - diff --git a/source/processes/hadronic/models/particle_hp/include/G4FFGEnumerations.hh b/source/processes/hadronic/models/particle_hp/include/G4FFGEnumerations.hh index c25c43dfc89..afd8c68bb1d 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4FFGEnumerations.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4FFGEnumerations.hh @@ -31,7 +31,7 @@ */ #ifndef G4FFGENUMAERATIONS_HH -#define G4FFGENUMAERATIONS_HH +#define G4FFGENUMAERATIONS_HH #include "G4Types.hh" @@ -40,93 +40,116 @@ */ namespace G4FFGEnumerations { - /** The two types of fission data available. Independent yields are taken - * directly from prompt fission products, while cumulative fission yields are - * taken some time after the fission event so that the products have had a - * moment to stabilize. - */ - enum YieldType { INDEPENDENT = 454, - CUMULATIVE = 459 }; - /** The first value of YieldType */ - static const G4int YieldTypeFirst = INDEPENDENT; - /** The last value of YieldType */ - static const G4int YieldTypeLast = CUMULATIVE; - - /** Causes of fission. - * Currently only yields for spontaneous and neutron induced fission are - * included in the data libraries. Photon and gamma induced fission are - * included here only to provide potential forward compatibility. - * G4FissionFragmentGenerator::G4SetCause() must be modified if the data - * sets are expanded to include photon and gamma induced fission. - */ - enum FissionCause { SPONTANEOUS, - NEUTRON_INDUCED, - PROTON_INDUCED, - GAMMA_INDUCED }; - /** The first value of FissionCause */ - static const G4int FissionCauseFirst = SPONTANEOUS; - /** The last value of FissionCause. - * This is set to NEUTRON_INDUCED becuase neither PROTON_INDUCED - * nor GAMMA_INDUCED are currently supporded. - */ - static const G4int FissionCauseLast = NEUTRON_INDUCED; +/** The two types of fission data available. Independent yields are taken + * directly from prompt fission products, while cumulative fission yields are + * taken some time after the fission event so that the products have had a + * moment to stabilize. + */ +enum YieldType +{ + INDEPENDENT = 454, + CUMULATIVE = 459 +}; +/** The first value of YieldType */ +static const G4int YieldTypeFirst = INDEPENDENT; +/** The last value of YieldType */ +static const G4int YieldTypeLast = CUMULATIVE; - /** The possible fission sampling methods */ - enum FissionSamplingScheme{ NORMAL, - LIGHT_FRAGMENT }; - /** The first value of FissionSamplingScheme */ - static const G4int FissionSamplingSchemeFirst = NORMAL; - /** The last value of FissionSamplingScheme */ - static const G4int FissionSamplingSchemeLast = LIGHT_FRAGMENT; +/** Causes of fission. + * Currently only yields for spontaneous and neutron induced fission are + * included in the data libraries. Photon and gamma induced fission are + * included here only to provide potential forward compatibility. + * G4FissionFragmentGenerator::G4SetCause() must be modified if the data + * sets are expanded to include photon and gamma induced fission. + */ +enum FissionCause +{ + SPONTANEOUS, + NEUTRON_INDUCED, + PROTON_INDUCED, + GAMMA_INDUCED +}; +/** The first value of FissionCause */ +static const G4int FissionCauseFirst = SPONTANEOUS; +/** The last value of FissionCause. + * This is set to NEUTRON_INDUCED becuase neither PROTON_INDUCED + * nor GAMMA_INDUCED are currently supporded. + */ +static const G4int FissionCauseLast = NEUTRON_INDUCED; - /** Truncate the Gaussian distribution at 0 (\p POSITIVE) or sample all values - * (\p ALL) - */ - enum GaussianRange { POSITIVE, - ALL }; +/** The possible fission sampling methods */ +enum FissionSamplingScheme +{ + NORMAL, + LIGHT_FRAGMENT +}; +/** The first value of FissionSamplingScheme */ +static const G4int FissionSamplingSchemeFirst = NORMAL; +/** The last value of FissionSamplingScheme */ +static const G4int FissionSamplingSchemeLast = LIGHT_FRAGMENT; - /** Sample a discretized Gaussian distribution (\p INT) or continuous (\p DOUBLE) */ - enum GaussianReturnType { INT, - DOUBLE }; +/** Truncate the Gaussian distribution at 0 (\p POSITIVE) or sample all values + * (\p ALL) + */ +enum GaussianRange +{ + POSITIVE, + ALL +}; - /** ENDF format provides for 3 isomers - 1 ground state and 2 meta states */ - enum MetaState { GROUND_STATE, - META_1, - META_2 }; - /** The first value of MetaState */ - static const G4int MetaStateFirst = GROUND_STATE; - /** The last value of MetaState */ - static const G4int MetaStateLast = META_2; +/** Sample a discretized Gaussian distribution (\p INT) or continuous (\p DOUBLE) */ +enum GaussianReturnType +{ + INT, + DOUBLE +}; - /** These are the source shapes available */ - enum SourceType { RECTANGLE, - CYLINDER, - SPHERE }; - /** The first value of SourceType */ - static const G4int SourceTypeFirst = RECTANGLE; - /** The last value of SourceType */ - static const G4int SourceTypeLast = SPHERE; +/** ENDF format provides for 3 isomers - 1 ground state and 2 meta states */ +enum MetaState +{ + GROUND_STATE, + META_1, + META_2 +}; +/** The first value of MetaState */ +static const G4int MetaStateFirst = GROUND_STATE; +/** The last value of MetaState */ +static const G4int MetaStateLast = META_2; - /** These are the verbosity levels */ - enum Verbosity { SILENT = 0x0, - UPDATES = 0x1, - DAUGHTER_INFO = 0x2, - NEUTRON_INFO = 0x4, - GAMMA_INFO = 0x8, - ALPHA_INFO = 0x10, - MOMENTUM_INFO = 0x20, - ENERGY_INFO = 0x40, - EXTRAPOLATION_INTERPOLATION_INFO = 0x80, - WARNING = 0x100, - DEBUG = 0x200, - PRINT_ALL = 0x3FF, - REPRESS_FUNCTION_ENTER_LEAVE_MESSAGES = 0x1000, - REPRESS_RANDOM_SAMPLING_MESSAGES = 0x2000, - REPRESS_RECURSIVE_DEBUG_MESSAGES = 0x4000, - REPRESS_DATA_STRUCTURE_DEBUG_MESSAGES = 0x8000 }; - /** This is the maximum value of Verbosity */ - static const G4int VerbosityLast = (REPRESS_DATA_STRUCTURE_DEBUG_MESSAGES << 1) - 1; -} +/** These are the source shapes available */ +enum SourceType +{ + RECTANGLE, + CYLINDER, + SPHERE +}; +/** The first value of SourceType */ +static const G4int SourceTypeFirst = RECTANGLE; +/** The last value of SourceType */ +static const G4int SourceTypeLast = SPHERE; -#endif /* G4FFGENUMAERATIONS_HH */ +/** These are the verbosity levels */ +enum Verbosity +{ + SILENT = 0x0, + UPDATES = 0x1, + DAUGHTER_INFO = 0x2, + NEUTRON_INFO = 0x4, + GAMMA_INFO = 0x8, + ALPHA_INFO = 0x10, + MOMENTUM_INFO = 0x20, + ENERGY_INFO = 0x40, + EXTRAPOLATION_INTERPOLATION_INFO = 0x80, + WARNING = 0x100, + DEBUG = 0x200, + PRINT_ALL = 0x3FF, + REPRESS_FUNCTION_ENTER_LEAVE_MESSAGES = 0x1000, + REPRESS_RANDOM_SAMPLING_MESSAGES = 0x2000, + REPRESS_RECURSIVE_DEBUG_MESSAGES = 0x4000, + REPRESS_DATA_STRUCTURE_DEBUG_MESSAGES = 0x8000 +}; +/** This is the maximum value of Verbosity */ +static const G4int VerbosityLast = (REPRESS_DATA_STRUCTURE_DEBUG_MESSAGES << 1) - 1; +} // namespace G4FFGEnumerations +#endif /* G4FFGENUMAERATIONS_HH */ diff --git a/source/processes/hadronic/models/particle_hp/include/G4FFGVerboseMacros.hh b/source/processes/hadronic/models/particle_hp/include/G4FFGVerboseMacros.hh index b9f13b9ec34..fef03eea2e4 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4FFGVerboseMacros.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4FFGVerboseMacros.hh @@ -41,17 +41,15 @@ extern G4long G4FFG_DEPTH; /** G4FFG_LOCATION__ outputs the current location in the code */ -#define G4FFG_LOCATION__ \ -G4String debugOutput(__FILE__); \ -debugOutput = debugOutput.substr(debugOutput.find_last_of('/') + 1); \ -G4cout << G4FFG_FUNCTION_SIGNATURE__ << " at " << debugOutput << ":" << __LINE__; +#define G4FFG_LOCATION__ \ + G4String debugOutput(__FILE__); \ + debugOutput = debugOutput.substr(debugOutput.find_last_of('/') + 1); \ + G4cout << G4FFG_FUNCTION_SIGNATURE__ << " at " << debugOutput << ":" << __LINE__; /** G4FFG_SPACING__ indents the debug messages according to the debugging depth */ -#define G4FFG_SPACING__ \ -for(G4int depth = 0; depth < G4FFG_DEPTH; depth++) \ -{ \ - G4cout << " "; \ -} +#define G4FFG_SPACING__ \ + for (G4int depth = 0; depth < G4FFG_DEPTH; depth++) { \ + G4cout << " "; \ + } #endif /* G4FFGVERBOSEMACROS_HH */ - diff --git a/source/processes/hadronic/models/particle_hp/include/G4FPYBiasedLightFragmentDist.hh b/source/processes/hadronic/models/particle_hp/include/G4FPYBiasedLightFragmentDist.hh index 36633be2380..407980d4f00 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4FPYBiasedLightFragmentDist.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4FPYBiasedLightFragmentDist.hh @@ -31,13 +31,12 @@ */ #ifndef G4FPYBIASEDLIGHTFRAGMENTDIST_HH -#define G4FPYBIASEDLIGHTFRAGMENTDIST_HH - -#include "G4Ions.hh" -#include "globals.hh" +#define G4FPYBIASEDLIGHTFRAGMENTDIST_HH #include "G4FFGEnumerations.hh" #include "G4FissionProductYieldDist.hh" +#include "G4Ions.hh" +#include "globals.hh" /** G4FPYBiasedLightFragmentDist is an inherited class of G4FissionProductYield * that only samples the 'light' fission fragments, defined by A \< 115 @@ -55,11 +54,10 @@ * and allowing the heavy fission fragment, which has a lot more * flexibility for varying neutron populations, to make up the slack. */ -class G4FPYBiasedLightFragmentDist - : public G4FissionProductYieldDist +class G4FPYBiasedLightFragmentDist : public G4FissionProductYieldDist { -public: -// Constructor definition + public: + // Constructor definition /** Default constructor * - Usage: * - \p WhichIsotope: Isotope number of the element in ZZZAAA form @@ -69,11 +67,10 @@ public: * * - Notes: */ - G4FPYBiasedLightFragmentDist( G4int WhichIsotope, - G4FFGEnumerations::MetaState WhichMetaState, - G4FFGEnumerations::FissionCause WhichCause, - G4FFGEnumerations::YieldType WhichYieldType, - std::istringstream& dataStream); + G4FPYBiasedLightFragmentDist(G4int WhichIsotope, G4FFGEnumerations::MetaState WhichMetaState, + G4FFGEnumerations::FissionCause WhichCause, + G4FFGEnumerations::YieldType WhichYieldType, + std::istringstream& dataStream); /** Overloaded constructor * - Usage: * - \p WhichIsotope: Isotope number of the element in ZZZAAA form @@ -84,33 +81,31 @@ public: * * - Notes: */ - G4FPYBiasedLightFragmentDist( G4int WhichIsotope, - G4FFGEnumerations::MetaState WhichMetaState, - G4FFGEnumerations::FissionCause WhichCause, - G4FFGEnumerations::YieldType WhichYieldType, - G4int Verbosity, - std::istringstream& dataStream); -protected: + G4FPYBiasedLightFragmentDist(G4int WhichIsotope, G4FFGEnumerations::MetaState WhichMetaState, + G4FFGEnumerations::FissionCause WhichCause, + G4FFGEnumerations::YieldType WhichYieldType, G4int Verbosity, + std::istringstream& dataStream); + + protected: /** Initialize is a common function called by all constructors. */ - void Initialize( void ); + void Initialize(); -protected: -// Variables + protected: + // Variables /** Defines the half-weight of the fission isotope */ G4int HalfWeight_; -// Functions + // Functions /** Selects a fission product from the probability tree, limited by the * number of nucleons available to the system */ - virtual G4Ions* GetFissionProduct( void ); + G4Ions* GetFissionProduct() override; -// Destructor function(s) -public: + // Destructor function(s) + public: /** Default deconstructor. It is a virtual function since * G4FPYBiasedLightFragmentDist inherits from G4FissionProductYieldDist */ - virtual ~G4FPYBiasedLightFragmentDist( void ); + ~G4FPYBiasedLightFragmentDist() override; }; -#endif /* G4FPYBIASEDLIGHTFRAGMENTDIST_HH */ - +#endif /* G4FPYBIASEDLIGHTFRAGMENTDIST_HH */ diff --git a/source/processes/hadronic/models/particle_hp/include/G4FPYNormalFragmentDist.hh b/source/processes/hadronic/models/particle_hp/include/G4FPYNormalFragmentDist.hh index 91c3ead2053..f232f8ed37d 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4FPYNormalFragmentDist.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4FPYNormalFragmentDist.hh @@ -31,22 +31,20 @@ */ #ifndef G4FPYNORMALFRAGMENTDIST_HH -#define G4FPYNORMALFRAGMENTDIST_HH - -#include "G4Ions.hh" -#include "globals.hh" +#define G4FPYNORMALFRAGMENTDIST_HH #include "G4FFGEnumerations.hh" #include "G4FissionProductYieldDist.hh" +#include "G4Ions.hh" +#include "globals.hh" /** G4FPYNormalFragmentDist is an inherited class of G4FissionProductYield * that samples fission fragments from the entire data set. */ -class G4FPYNormalFragmentDist - : public G4FissionProductYieldDist +class G4FPYNormalFragmentDist : public G4FissionProductYieldDist { -public: -// Constructor definition + public: + // Constructor definition /** Default constructor * - Usage: * - \p WhichIsotope: Isotope number of the element in ZZZAAA form @@ -56,11 +54,10 @@ public: * * - Notes: */ - G4FPYNormalFragmentDist( G4int WhichIsotope, - G4FFGEnumerations::MetaState WhichMetaState, - G4FFGEnumerations::FissionCause WhichCause, - G4FFGEnumerations::YieldType WhichYieldType, - std::istringstream& dataFile); + G4FPYNormalFragmentDist(G4int WhichIsotope, G4FFGEnumerations::MetaState WhichMetaState, + G4FFGEnumerations::FissionCause WhichCause, + G4FFGEnumerations::YieldType WhichYieldType, + std::istringstream& dataFile); /** Overloaded constructor * - Usage: @@ -72,30 +69,28 @@ public: * * - Notes: */ - G4FPYNormalFragmentDist( G4int WhichIsotope, - G4FFGEnumerations::MetaState WhichMetaState, - G4FFGEnumerations::FissionCause WhichCause, - G4FFGEnumerations::YieldType WhichYieldType, - G4int Verbosity, - std::istringstream& dataFile); -protected: + G4FPYNormalFragmentDist(G4int WhichIsotope, G4FFGEnumerations::MetaState WhichMetaState, + G4FFGEnumerations::FissionCause WhichCause, + G4FFGEnumerations::YieldType WhichYieldType, G4int Verbosity, + std::istringstream& dataFile); + + protected: /** Initialize is a common function called by all constructors. */ - void Initialize( void ); + void Initialize(); -protected: -// Functions + protected: + // Functions /** Selects a fission product from the probability tree, limited by the * number of nucleons available to the system. */ - virtual G4Ions* GetFissionProduct( void ); + G4Ions* GetFissionProduct() override; -// Destructor function(s) -public: + // Destructor function(s) + public: /** Default deconstructor. It is a virtual function since * G4FPYNormalFragmentDist inherits from G4FissionProductYieldDist */ - virtual ~G4FPYNormalFragmentDist( void ); + ~G4FPYNormalFragmentDist() override; }; -#endif /* G4FPYNORMALFRAGMENTDIST_HH */ - +#endif /* G4FPYNORMALFRAGMENTDIST_HH */ diff --git a/source/processes/hadronic/models/particle_hp/include/G4FPYNubarValues.hh b/source/processes/hadronic/models/particle_hp/include/G4FPYNubarValues.hh index 87c201a82ef..193c619bfc3 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4FPYNubarValues.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4FPYNubarValues.hh @@ -47,7 +47,7 @@ * * * * * * * * * * * * * * * * References * * * * * * * * * * * * * * * */ #ifndef G4FPYNUBARVALUES_HH -#define G4FPYNUBARVALUES_HH +#define G4FPYNUBARVALUES_HH #include "G4Types.hh" @@ -60,38 +60,51 @@ * \n \n See Reference 4 for further information */ static const G4int NeutronInducedNubar_[][3] = { - // Default - {0, 1476773, 29881}, - // Thorium - {90227, 818327, 20647}, {90229, 936480, 20872}, {90232, 1252285, 21061}, - // Proactinum - {91231, 1030251, 22480}, - // Uranium - {92232, 1070000, 31300}, {92233, 1218868, 25043}, - {92234, 1230006, 23673}, {92235, 1392331, 24336}, - {92236, 1353849, 23717}, {92237, 1502160, 24911}, - {92238, 1343405, 24911}, - // Neptunium - {93237, 1485790, 26362}, {93238, 1476892, 25150}, - // Plutonium - {94238, 1479368, 28950}, {94239, 1477500, 28505}, - {94240, 1518313, 28030}, {94241, 1496809, 29443}, - {94242, 1575406, 28100}, - // Americium - {95241, 1425195, 30827}, {95242, 1337871, 32717}, - {95243, 1305739, 32737}, - // Curium - {96242, 1720000, 34400}, {96243, 1220064, 34329}, - {96244, 1839123, 32444}, {96245, 1166218, 35968}, - {96246, 1223446, 36153}, {96248, 2080000, 34900}, - // Californium - {98249, 1796326, 38876}, {98251, 2416144, 41400}, - // Einsteinium - {99254, 2438676, 40832}, - // Fermium - {100255, 2499442, 43924}, - // End of array - {-1, -1, -1} }; + // Default + {0, 1476773, 29881}, + // Thorium + {90227, 818327, 20647}, + {90229, 936480, 20872}, + {90232, 1252285, 21061}, + // Proactinum + {91231, 1030251, 22480}, + // Uranium + {92232, 1070000, 31300}, + {92233, 1218868, 25043}, + {92234, 1230006, 23673}, + {92235, 1392331, 24336}, + {92236, 1353849, 23717}, + {92237, 1502160, 24911}, + {92238, 1343405, 24911}, + // Neptunium + {93237, 1485790, 26362}, + {93238, 1476892, 25150}, + // Plutonium + {94238, 1479368, 28950}, + {94239, 1477500, 28505}, + {94240, 1518313, 28030}, + {94241, 1496809, 29443}, + {94242, 1575406, 28100}, + // Americium + {95241, 1425195, 30827}, + {95242, 1337871, 32717}, + {95243, 1305739, 32737}, + // Curium + {96242, 1720000, 34400}, + {96243, 1220064, 34329}, + {96244, 1839123, 32444}, + {96245, 1166218, 35968}, + {96246, 1223446, 36153}, + {96248, 2080000, 34900}, + // Californium + {98249, 1796326, 38876}, + {98251, 2416144, 41400}, + // Einsteinium + {99254, 2438676, 40832}, + // Fermium + {100255, 2499442, 43924}, + // End of array + {-1, -1, -1}}; /** Recommended Gaussian widths for neutron induced fission. * \n Column 1: The isotope in ZZZAAA format @@ -100,14 +113,17 @@ static const G4int NeutronInducedNubar_[][3] = { */ // Still need: a lot static const G4int NeutronInducedNubarWidth_[][2] = { - // Default - {0, 1210000}, - // Uranium - {92233, 1144900}, {92235, 1183744}, {92238, 1245456}, - // Plutonium - {94239, 1299600}, {94241, 1322500}, - // End of array - {-1, -1} }; + // Default + {0, 1210000}, + // Uranium + {92233, 1144900}, + {92235, 1183744}, + {92238, 1245456}, + // Plutonium + {94239, 1299600}, + {94241, 1322500}, + // End of array + {-1, -1}}; /** Evaluated nubar values for neutron induced fission. The data are represented * as linear regression fits from experimental data in the form: v = mx + b, @@ -118,20 +134,24 @@ static const G4int NeutronInducedNubarWidth_[][2] = { * \n \n See References 1, 2, 4, & 5 for further information */ static const G4int SpontaneousNubar_[][3] = { - // Default - {0, 25000}, - // Uranium - {92238, 0, 20000}, - // Curium - {96244, 0, 26875}, {96246, 0, 29480}, {96248, 0, 31500}, - // Californium - {98250, 0, 25200}, {98252, 0, 37676}, - // Einsteinium - {99253, 0, 47000}, - // Fermium - {100254, 0, 39800}, {100256, 0, 37300}, - // End of array - {-1, -1, -1} }; + // Default + {0, 25000}, + // Uranium + {92238, 0, 20000}, + // Curium + {96244, 0, 26875}, + {96246, 0, 29480}, + {96248, 0, 31500}, + // Californium + {98250, 0, 25200}, + {98252, 0, 37676}, + // Einsteinium + {99253, 0, 47000}, + // Fermium + {100254, 0, 39800}, + {100256, 0, 37300}, + // End of array + {-1, -1, -1}}; /** Recommended Gaussian widths for neutron induced fission. * See Reference 3 for further information. @@ -140,18 +160,26 @@ static const G4int SpontaneousNubar_[][3] = { */ // Still need: 92238, 99253 static const G4int SpontaneousNubarWidth_[][2] = { - // Default - {0, 1210000}, - // Plutonium - {94238, 1288225}, {94240, 1324801}, {94242, 1347921}, - // Curium - {96242, 1190281}, {96244, 1216609}, {96246, 1205604}, {96248, 1227664}, - // Californium - {98250, 1488400}, {98252, 1550025}, {98254, 1476225}, - // Fermium - {100254, 1552516}, {100256, 1349007}, {100257, 1178983}, - // End of array - {-1, -1} }; - -#endif /* G4FPYNUBARVALUES_HH */ + // Default + {0, 1210000}, + // Plutonium + {94238, 1288225}, + {94240, 1324801}, + {94242, 1347921}, + // Curium + {96242, 1190281}, + {96244, 1216609}, + {96246, 1205604}, + {96248, 1227664}, + // Californium + {98250, 1488400}, + {98252, 1550025}, + {98254, 1476225}, + // Fermium + {100254, 1552516}, + {100256, 1349007}, + {100257, 1178983}, + // End of array + {-1, -1}}; +#endif /* G4FPYNUBARVALUES_HH */ diff --git a/source/processes/hadronic/models/particle_hp/include/G4FPYSamplingOps.hh b/source/processes/hadronic/models/particle_hp/include/G4FPYSamplingOps.hh index 679c7d8d0fd..d79af9196cb 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4FPYSamplingOps.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4FPYSamplingOps.hh @@ -37,39 +37,39 @@ * * * * * * * * * * * * * * * * References * * * * * * * * * * * * * * * */ #ifndef G4FPYSAMPLINGOPS_HH -#define G4FPYSAMPLINGOPS_HH - -#include "Randomize.hh" -#include "globals.hh" +#define G4FPYSAMPLINGOPS_HH #include "G4FFGEnumerations.hh" #include "G4ShiftedGaussian.hh" #include "G4WattFissionSpectrumValues.hh" +#include "Randomize.hh" +#include "globals.hh" /** G4FPYSamplingOps performs all the uniform and Gaussian distribution sampling * operations */ class G4FPYSamplingOps { -public: -// Constructor definition + public: + // Constructor definition /** Default constructor * - Usage: No arguments required * - Notes: */ - G4FPYSamplingOps( void ); + G4FPYSamplingOps(); /** Overloaded constructor * - Usage: * - \p Verbosity: Verbosity level * - Notes: */ - G4FPYSamplingOps( G4int Verbosity ); -protected: + G4FPYSamplingOps(G4int Verbosity); + + protected: /** Initialize is a common function called by all constructors. */ - void Initialize( void ); + void Initialize(); -public: -// Functions + public: + // Functions /** Returns an integer value taken from a Gaussian distribution. * This overloaded version assumes that the range is not restricted to * positive values only. @@ -81,8 +81,7 @@ public: * within the second standard deviation, etc... * - Notes: */ - G4int G4SampleIntegerGaussian( G4double Mean, - G4double StdDev ); + G4int G4SampleIntegerGaussian(G4double Mean, G4double StdDev); /** Returns an integer value taken from a Gaussian distribution about * \p Mean and with a standard deviation of \p StdDev. * - Usage: @@ -94,9 +93,8 @@ public: * - \p Range: \p POSITIVE or \p ALL * - Notes: */ - G4int G4SampleIntegerGaussian( G4double Mean, - G4double StdDev, - G4FFGEnumerations::GaussianRange Range ); + G4int G4SampleIntegerGaussian(G4double Mean, G4double StdDev, + G4FFGEnumerations::GaussianRange Range); /** Returns a double value taken from a Gaussian distribution about \p Mean * and with a standard deviation of \p StdDev. * - Usage: @@ -107,8 +105,7 @@ public: * within the second standard deviation, etc... * - Notes: */ - G4double G4SampleGaussian( G4double Mean, - G4double StdDev ); + G4double G4SampleGaussian(G4double Mean, G4double StdDev); /** Returns a double value taken from a Gaussian distribution about \p Mean * and with a standard deviation of \p StdDev. * - Usage: @@ -120,14 +117,13 @@ public: * - \p Range: \p POSITIVE or \p ALL * - Notes: */ - G4double G4SampleGaussian( G4double Mean, - G4double StdDev, - G4FFGEnumerations::GaussianRange Range ); + G4double G4SampleGaussian(G4double Mean, G4double StdDev, + G4FFGEnumerations::GaussianRange Range); /** Returns a double value evenly distributed in the range (0, 1]. * - Usage: No arguments required * - Notes: */ - G4double G4SampleUniform( void ); + G4double G4SampleUniform(); /** Returns a double value evenly distributed in the range * (\p Lower, \p Upper]. * - Usage: @@ -136,8 +132,7 @@ public: * * - Notes: */ - G4double G4SampleUniform( G4double Lower, - G4double Upper ); + G4double G4SampleUniform(G4double Lower, G4double Upper); /** Samples the Watt fission spectrum for the selected isotope, using an * algorithm adopted from Ref. 1 * - Usage: @@ -149,9 +144,8 @@ public: * WattConstants_. * - */ - G4double G4SampleWatt( G4int WhatIsotope, - G4FFGEnumerations::FissionCause WhatCause, - G4double WhatEnergy ); + G4double G4SampleWatt(G4int WhatIsotope, G4FFGEnumerations::FissionCause WhatCause, + G4double WhatEnergy); /** Sets the verbosity levels * - Usage: * - \p WhichVerbosity: Combination of levels @@ -164,63 +158,64 @@ public: * - \p GAMMA_INFO: Displays information about gamma sampling * - \p ALPHA_INFO: Displays information about alpha sampling * - \p MOMENTUM_INFO: Displays information about momentum balancing - * - \p EXTRAPOLATION_INTERPOLATION_INFO: Displays information about any data extrapolation or interpolation that occurs + * - \p EXTRAPOLATION_INTERPOLATION_INFO: Displays information about any data extrapolation + * or interpolation that occurs * - \p DEBUG: Reports program flow as it steps through functions * - \p PRINT_ALL: Displays any and all output */ - void G4SetVerbosity( G4int WhatVerbosity ); + void G4SetVerbosity(G4int WhatVerbosity); -protected: -// Variables + protected: + // Variables // Class descriptor variables - /** Mean for sampling a Gaussian distribution */ - G4double Mean_; - /** Standard deviation for sampling a GaussianDistribution */ - G4double StdDev_; - /** Structure chain that contains the all the previous values used - * for sampling a Gaussian distribution - */ - G4ShiftedGaussian* ShiftedGaussianValues_; - /** Verbosity level */ - G4int Verbosity_; - /** Structure that contains the values for sampling the Watt fission - * spectrum - */ - WattSpectrumConstants* WattConstants_; + /** Mean for sampling a Gaussian distribution */ + G4double Mean_; + /** Standard deviation for sampling a GaussianDistribution */ + G4double StdDev_; + /** Structure chain that contains the all the previous values used + * for sampling a Gaussian distribution + */ + G4ShiftedGaussian* ShiftedGaussianValues_; + /** Verbosity level */ + G4int Verbosity_; + /** Structure that contains the values for sampling the Watt fission + * spectrum + */ + WattSpectrumConstants* WattConstants_; // Pointers to external classes - /** Pointer to the CLHEP random number generator. */ - CLHEP::HepRandomEngine* RandomEngine_; + /** Pointer to the CLHEP random number generator. */ + CLHEP::HepRandomEngine* RandomEngine_; // Internal variables for use with sampling a Gaussian distribution. - /** Declares whether the second paired random number has been already - * returned. - */ - G4bool NextGaussianIsStoredInMemory_; - /** Contains the first of the two paired random numbers from the - * Gaussian distribution sampling. - */ - G4double GaussianOne_; - /** Contains the second of the two paired random numbers from the - * Gaussian distribution sampling. - */ - G4double GaussianTwo_; - /** Defines the tolerance that ShiftParameters() must match. */ - G4double Tolerance_; -// Functions + /** Declares whether the second paired random number has been already + * returned. + */ + G4bool NextGaussianIsStoredInMemory_; + /** Contains the first of the two paired random numbers from the + * Gaussian distribution sampling. + */ + G4double GaussianOne_; + /** Contains the second of the two paired random numbers from the + * Gaussian distribution sampling. + */ + G4double GaussianTwo_; + /** Defines the tolerance that ShiftParameters() must match. */ + G4double Tolerance_; + // Functions /** Check to see if the user requested parameters have already been * calculated. If they have, it recalls the stored parameters and sets * them as the current values. */ - G4bool CheckAndSetParameters( void ); + G4bool CheckAndSetParameters(); /** Evaluates the constants that are required for the Watt fission spectrum * sampling. */ - void EvaluateWattConstants( void ); + void EvaluateWattConstants(); /** Samples a Gaussian distribution defined by the internal class variables * NewMean_ and NewStdDev_. */ - G4double SampleGaussian( void ); + G4double SampleGaussian(); /** Sets the mean and standard deviation of the Gaussian distribution * sampled by this class when \p POSITIVE values are requested. * ShiftMean() performs two different operations based on the requested @@ -233,13 +228,12 @@ protected: * The chance that a negative value will result using this method is * 2.56E-12 */ - void ShiftParameters( G4FFGEnumerations::GaussianReturnType Type ); + void ShiftParameters(G4FFGEnumerations::GaussianReturnType Type); -// Destructor function(s) -public: + // Destructor function(s) + public: /** Default deconstructor. */ - ~G4FPYSamplingOps( void ); + ~G4FPYSamplingOps(); }; -#endif /* G4FPYSAMPLINGOPS_HH */ - +#endif /* G4FPYSAMPLINGOPS_HH */ diff --git a/source/processes/hadronic/models/particle_hp/include/G4FPYTreeStructures.hh b/source/processes/hadronic/models/particle_hp/include/G4FPYTreeStructures.hh index 916d137d80b..2458381093a 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4FPYTreeStructures.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4FPYTreeStructures.hh @@ -31,7 +31,7 @@ */ #ifndef G4FPYTREESTRUCTURES_HH -#define G4FPYTREESTRUCTURES_HH +#define G4FPYTREESTRUCTURES_HH #include "G4Ions.hh" #include "globals.hh" @@ -88,5 +88,4 @@ struct ProbabilityTree G4bool IsEnd; }; -#endif /* G4FPYTREESTRUCTURES_HH */ - +#endif /* G4FPYTREESTRUCTURES_HH */ diff --git a/source/processes/hadronic/models/particle_hp/include/G4FissionFragmentGenerator.hh b/source/processes/hadronic/models/particle_hp/include/G4FissionFragmentGenerator.hh index a1dff23c33c..502c83e0c32 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4FissionFragmentGenerator.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4FissionFragmentGenerator.hh @@ -31,16 +31,15 @@ */ #ifndef G4FISSIONFRAGMENTGENERATOR_HH -#define G4FISSIONFRAGMENTGENERATOR_HH - -#include "G4Ions.hh" -#include "globals.hh" -#include "G4HadFinalState.hh" -#include "G4HadProjectile.hh" +#define G4FISSIONFRAGMENTGENERATOR_HH #include "G4FFGEnumerations.hh" #include "G4FissionProductYieldDist.hh" +#include "G4HadFinalState.hh" +#include "G4HadProjectile.hh" +#include "G4Ions.hh" #include "G4TableTemplate.hh" +#include "globals.hh" /** G4FissionFragmentGenerator is the front end class to be used by the user for * handling all fission event generation. @@ -51,9 +50,10 @@ * class in constructed. A new class must be created by the user for each type * of fission event, if such functionality is desired. */ -class G4FissionFragmentGenerator{ -public: -// Constructor definition +class G4FissionFragmentGenerator +{ + public: + // Constructor definition /** Default constructor * - Usage: No arguments required * @@ -80,7 +80,7 @@ public: * - Alpha production probability: \p 0 * - Sampling scheme: \p NORMAL */ - G4FissionFragmentGenerator( void ); + G4FissionFragmentGenerator(); /** Overloaded constructor * - Usage: * - \p Verbosity: Verbosity level @@ -89,13 +89,14 @@ public: - Refer to the documentation for the default constructor for * setting up the operating parameters. */ - G4FissionFragmentGenerator( G4int Verbosity ); -protected: + G4FissionFragmentGenerator(G4int Verbosity); + + protected: /** Initialize is a common function called by all constructors. */ - void Initialize( void ); + void Initialize(); -public: -// Functions + public: + // Functions /** Generates a single fission event * - Usage: No arguments required * @@ -103,16 +104,16 @@ public: * - Generates a single fission event by calling the overloaded function * and passing an argument of '1' */ - G4DynamicParticleVector* G4GenerateFission( void ); + G4DynamicParticleVector* G4GenerateFission(); /** Generates a single fission event * - Usage: - * -\p Projectile: G4HadProjectile of the fission-inducing particle + * -\p Projectile: G4HadProjectile of the fission-inducing particle * * - Notes: * - Generates a single fission event by calling the overloaded function * and passing an argument of '1' */ - G4DynamicParticleVector* G4GenerateFission( const G4HadProjectile& Projectile ); + G4DynamicParticleVector* G4GenerateFission(const G4HadProjectile& Projectile); /** Generates NumberOfFissions fission events * - Usage: * -\p NumberOfFissions: The number of fission events to generate @@ -120,30 +121,30 @@ public: * - Notes: * - Generates \p NumberOfFissions fission events */ - const std::vector< G4DynamicParticleVector* > G4GenerateFission( G4long NumberOfFissions, - const G4HadProjectile& Projectile ); + const std::vector + G4GenerateFission(G4long NumberOfFissions, const G4HadProjectile& Projectile); /** Returns a randomly sampled fission product */ - G4Ions* G4GenerateFissionProduct( void ); + G4Ions* G4GenerateFissionProduct(); /** Returns the production rate of alpha particles for fission events */ - G4double G4GetAlphaProduction( void ); + G4double G4GetAlphaProduction(); /** Returns the probability of ternary fission */ - G4double G4GetTernaryProbability( void ); + G4double G4GetTernaryProbability(); /** Returns the FissionCause of the fission event. */ - G4FFGEnumerations::FissionCause G4GetCause( void ); + G4FFGEnumerations::FissionCause G4GetCause(); /** Returns the energy of the fission inducing particle. */ - G4double G4GetIncidentEnergy( void ); + G4double G4GetIncidentEnergy(); /** Returns the code of the fission isotope in ZZZAAA format. */ - G4int G4GetIsotope( void ); + G4int G4GetIsotope(); /** Returns the MetaState of the fission isotope. */ - G4FFGEnumerations::MetaState G4GetMetaState( void ); + G4FFGEnumerations::MetaState G4GetMetaState(); /** Returns the FissionSamplingScheme that is currently in use. */ - G4FFGEnumerations::FissionSamplingScheme G4GetSamplingScheme( void ); + G4FFGEnumerations::FissionSamplingScheme G4GetSamplingScheme(); /** Returns the yield type that is currently in use */ - G4FFGEnumerations::YieldType G4GetYieldType( void ); + G4FFGEnumerations::YieldType G4GetYieldType(); /** Initializes a new \p G4FPY...Dist class based on the class descriptor * variables of G4FissionFragmentGenerator. */ - bool InitializeFissionProductYieldClass( std::istringstream& dataFile ); + bool InitializeFissionProductYieldClass(std::istringstream& dataFile); /** Converts the Z, A and M of an isotope into an integer representation **/ static G4int G4MakeIsotopeCode(G4int Z, G4int A, G4int M); /** Sets the number of alpha particles produced in fission. @@ -157,7 +158,7 @@ public: * Setting the AlphaProduction too high will have unpredictable * results on the sampling of the fission products. */ - void G4SetAlphaProduction( G4double WhatAlphaProduction ); + void G4SetAlphaProduction(G4double WhatAlphaProduction); /** Sets the probability of ternary fission * - Usage: * - \p WhatAlphaProductionProbability: Probability of generating alpha @@ -165,7 +166,7 @@ public: * * - Notes: */ - void G4SetTernaryProbability( G4double WhatTernaryProbability ); + void G4SetTernaryProbability(G4double WhatTernaryProbability); /** Sets the cause of fission event. * - Usage: * - \p WhichCause: \p SPONTANEOUS, \p N_INDUCED, \p P_INDUCED, or @@ -173,28 +174,28 @@ public: * * - Notes: */ - void G4SetCause( G4FFGEnumerations::FissionCause WhichCause ); + void G4SetCause(G4FFGEnumerations::FissionCause WhichCause); /** Sets the incident energy, if any, of the particle that cause fission. * - Usage: * - \p WhatIncidentEnergy: Kinetic energy of the particle with units applied; * * - Notes: */ - void G4SetIncidentEnergy( G4double WhatIncidentEnergy ); + void G4SetIncidentEnergy(G4double WhatIncidentEnergy); /** Sets the fission isotope * - Usage: * - \p WhichIsotope: Code of the isotope in ZZZAAA format * * - Notes: */ - void G4SetIsotope( G4int WhichIsotope ); + void G4SetIsotope(G4int WhichIsotope); /** Sets the metastable state of the fission isotope. * - Usage: * - \p WhichMetaState: \p GROUND_STATE, \p META_1, or \p META_2 * * - Notes: */ - void G4SetMetaState( G4FFGEnumerations::MetaState WhichMetaState ); + void G4SetMetaState(G4FFGEnumerations::MetaState WhichMetaState); /** Set the sampling scheme. * - Usage: * - NewScheme: The G4FissionSamplingScheme value for the sampling @@ -211,14 +212,14 @@ public: * the code documentation for G4FPYWendtSamplingDist for a more * detailed explanation. */ - void G4SetSamplingScheme( G4FFGEnumerations::FissionSamplingScheme NewScheme ); + void G4SetSamplingScheme(G4FFGEnumerations::FissionSamplingScheme NewScheme); /** Sets the ENDF yield type to be used for the data * - Usage: * - \p WhichYieldType: \p INDEPENDENT or \p COMULATIVE * * - Notes: */ - void G4SetYieldType( G4FFGEnumerations::YieldType WhichYieldType ); + void G4SetYieldType(G4FFGEnumerations::YieldType WhichYieldType); /** Sets the verbosity levels * - Usage: * - \p WhichVerbosity: Combination of levels @@ -231,57 +232,57 @@ public: * - \p GAMMA_INFO: Displays information about gamma sampling * - \p ALPHA_INFO: Displays information about alpha sampling * - \p MOMENTUM_INFO: Displays information about momentum balancing - * - \p EXTRAPOLATION_INTERPOLATION_INFO: Displays information about any data extrapolation or interpolation that occurs + * - \p EXTRAPOLATION_INTERPOLATION_INFO: Displays information about any data extrapolation + * or interpolation that occurs * - \p DEBUG: Reports program flow as it steps through functions * - \p PRINT_ALL: Displays any and all output */ - void G4SetVerbosity( G4int WhatVerbosity ); + void G4SetVerbosity(G4int WhatVerbosity); -protected: -// Variables + protected: + // Variables // Class descriptor variables - /** Number in ZZZAAA format of the isotope that - * G4FissionFragmentGenerator references - */ - G4int Isotope_; - /** MetaState information of the isotope that G4FissionFragmentGenerator - * references - * \n A value of 0 refers to the ground state - */ - G4FFGEnumerations::MetaState MetaState_; - /** The cause of fission: \p SPONTANEOUS or \p N_INDUCED. */ - G4FFGEnumerations::FissionCause Cause_; - /** Kinetic energy, if any, of the incident particle in GeV. */ - G4double IncidentEnergy_; - /** The type of yield to be used: \p INDEPENDET or \p CUMULATIVE */ - G4FFGEnumerations::YieldType YieldType_; - /** Sets the ternary fission probability. Valid ranges are [0, 1] */ - G4double TernaryProbability_; - /** Controls whether alpha particles are emitted, and how many */ - G4double AlphaProduction_; - /** If Isotope_, MetaState_, Cause_, or IncidentEnergy_ are changed in - * the middle of a run then the class pointed at by YieldData_ will - * need to be reconstructed - */ - G4bool IsReconstructionNeeded_; - /** Verbosity level */ - G4int Verbosity_; + /** Number in ZZZAAA format of the isotope that + * G4FissionFragmentGenerator references + */ + G4int Isotope_; + /** MetaState information of the isotope that G4FissionFragmentGenerator + * references + * \n A value of 0 refers to the ground state + */ + G4FFGEnumerations::MetaState MetaState_; + /** The cause of fission: \p SPONTANEOUS or \p N_INDUCED. */ + G4FFGEnumerations::FissionCause Cause_; + /** Kinetic energy, if any, of the incident particle in GeV. */ + G4double IncidentEnergy_; + /** The type of yield to be used: \p INDEPENDET or \p CUMULATIVE */ + G4FFGEnumerations::YieldType YieldType_; + /** Sets the ternary fission probability. Valid ranges are [0, 1] */ + G4double TernaryProbability_; + /** Controls whether alpha particles are emitted, and how many */ + G4double AlphaProduction_; + /** If Isotope_, MetaState_, Cause_, or IncidentEnergy_ are changed in + * the middle of a run then the class pointed at by YieldData_ will + * need to be reconstructed + */ + G4bool IsReconstructionNeeded_; + /** Verbosity level */ + G4int Verbosity_; // Defines the current sampling scheme and the respective class - /** The sampling scheme that is used: \p NORMAL, \p LIGHT_FRAGMENT, or - * \p WENDT. - */ - G4FFGEnumerations::FissionSamplingScheme SamplingScheme_; - /** Pointer to G4FissionProductYieldDist class that holds all the - * probabilistic yield data - */ - G4FissionProductYieldDist* YieldData_; + /** The sampling scheme that is used: \p NORMAL, \p LIGHT_FRAGMENT, or + * \p WENDT. + */ + G4FFGEnumerations::FissionSamplingScheme SamplingScheme_; + /** Pointer to G4FissionProductYieldDist class that holds all the + * probabilistic yield data + */ + G4FissionProductYieldDist* YieldData_; -// Destructor function(s) -public: + // Destructor function(s) + public: /** Default deconstructor */ ~G4FissionFragmentGenerator(); }; -#endif /* G4FISSIONFRAGMENTGENERATOR_HH */ - +#endif /* G4FISSIONFRAGMENTGENERATOR_HH */ diff --git a/source/processes/hadronic/models/particle_hp/include/G4FissionProductYieldDist.hh b/source/processes/hadronic/models/particle_hp/include/G4FissionProductYieldDist.hh index e6698f62d32..583ddd50cc6 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4FissionProductYieldDist.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4FissionProductYieldDist.hh @@ -31,30 +31,29 @@ */ #ifndef G4FISSIONPRODUCTYIELDDIST_HH -#define G4FISSIONPRODUCTYIELDDIST_HH +#define G4FISSIONPRODUCTYIELDDIST_HH -#include "G4Ions.hh" -#include "G4Gamma.hh" -#include "G4IonTable.hh" -#include "G4ParticleHPNames.hh" -#include "globals.hh" #include "G4DynamicParticle.hh" #include "G4DynamicParticleVector.hh" -#include "G4ReactionProduct.hh" - #include "G4ENDFTapeRead.hh" #include "G4ENDFYieldDataContainer.hh" #include "G4FFGEnumerations.hh" #include "G4FPYNubarValues.hh" #include "G4FPYSamplingOps.hh" #include "G4FPYTreeStructures.hh" +#include "G4Gamma.hh" +#include "G4IonTable.hh" +#include "G4Ions.hh" +#include "G4ParticleHPNames.hh" +#include "G4ReactionProduct.hh" +#include "globals.hh" /** G4FissionProductYieldDist is the base class for storing all the fission * data and generating fission events. */ class G4FissionProductYieldDist { -public: -// Constructor definition + public: + // Constructor definition /** Default constructor * - Usage: * - \p WhichIsotope: Isotope number of the element in ZZZAAA form @@ -64,11 +63,10 @@ public: * * - Notes: */ - G4FissionProductYieldDist( G4int WhichIsotope, - G4FFGEnumerations::MetaState WhichMetaState, - G4FFGEnumerations::FissionCause WhichCause, - G4FFGEnumerations::YieldType WhichYieldType, - std::istringstream& dataStream); + G4FissionProductYieldDist(G4int WhichIsotope, G4FFGEnumerations::MetaState WhichMetaState, + G4FFGEnumerations::FissionCause WhichCause, + G4FFGEnumerations::YieldType WhichYieldType, + std::istringstream& dataStream); /** Overloaded constructor * - Usage: * - \p WhichIsotope: Isotope number of the element in ZZZAAA form @@ -79,22 +77,21 @@ public: * * - Notes: */ - G4FissionProductYieldDist( G4int WhichIsotope, - G4FFGEnumerations::MetaState WhichMetaState, - G4FFGEnumerations::FissionCause WhichCause, - G4FFGEnumerations::YieldType WhichYieldType, - G4int Verbosity, - std::istringstream& dataStream); -private: + G4FissionProductYieldDist(G4int WhichIsotope, G4FFGEnumerations::MetaState WhichMetaState, + G4FFGEnumerations::FissionCause WhichCause, + G4FFGEnumerations::YieldType WhichYieldType, G4int Verbosity, + std::istringstream& dataStream); + + private: /** Initialize is a common function called by all constructors. */ - void Initialize( std::istringstream& dataStream ); + void Initialize(std::istringstream& dataStream); #ifdef G4MULTITHREADED static G4Mutex fissprodMutex; #endif -public: -// Functions + public: + // Functions /** Generates a fission event using default sampling and returns the pointer * to that fission event. * - Usage: No arguments required @@ -109,14 +106,14 @@ public: * - Gamma rays * - The last particle will have a NULL NextFragment pointer */ - G4DynamicParticleVector* G4GetFission( void ); + G4DynamicParticleVector* G4GetFission(); /** Selects a fission fragment at random from the probability tree and * returns the \p G4Ions pointer. * - Usage: No arguments required * * - Notes: */ - G4Ions* G4GetFissionProduct( void ); + G4Ions* G4GetFissionProduct(); /** Set the alpha production behavior for fission event generation. * - Usage: * - if \p AlphaProduction is negative then alpha particles are sampled @@ -128,7 +125,7 @@ public: * Setting the AlphaProduction too high will have unpredictable * results on the sampling of the fission products. */ - void G4SetAlphaProduction( G4double WhatAlphaProduction ); + void G4SetAlphaProduction(G4double WhatAlphaProduction); /** Sets the energy of the incident particle * - Usage: * - \p WhatIncidentEnergy: Kinetic energy, if any, of the incident @@ -136,7 +133,7 @@ public: * * - Notes: */ - void G4SetEnergy( G4double WhatIncidentEnergy ); + void G4SetEnergy(G4double WhatIncidentEnergy); /** Sets the probability of ternary fission * - Usage: * - \p WhatTernaryProbability: Probability of generating a ternary @@ -144,7 +141,7 @@ public: * * - Notes: */ - void G4SetTernaryProbability( G4double TernaryProbability ); + void G4SetTernaryProbability(G4double TernaryProbability); /** Sets the verbosity levels * - Usage: * - \p WhichVerbosity: Combination of levels @@ -157,154 +154,151 @@ public: * - \p GAMMA_INFO: Displays information about gamma sampling * - \p ALPHA_INFO: Displays information about alpha sampling * - \p MOMENTUM_INFO: Displays information about momentum balancing - * - \p EXTRAPOLATION_INTERPOLATION_INFO: Displays information about any data extrapolation or interpolation that occurs + * - \p EXTRAPOLATION_INTERPOLATION_INFO: Displays information about any data extrapolation + * or interpolation that occurs * - \p DEBUG: Reports program flow as it steps through functions * - \p PRINT_ALL: Displays any and all output */ - void G4SetVerbosity( G4int WhatVerbosity ); + void G4SetVerbosity(G4int WhatVerbosity); -protected: -// Variables + protected: + // Variables // Class descriptor variables - /** Number in ZZZAAA format of the isotope that - * G4FissionProductYieldDist references - */ - const G4int Isotope_; - /** MetaState information of the isotope that G4FissionProductYieldDist - * references - * \n Possible values are \p GROUND_STATE, \p META_1, or \p META_2 - */ - const G4FFGEnumerations::MetaState MetaState_; - /** The cause of fission: \p SPONTANEOUS or \p N_INDUCED. */ - const G4FFGEnumerations::FissionCause Cause_; - /** The type of yield to be used: \p INDEPENDET or \p CUMULATIVE */ - const G4FFGEnumerations::YieldType YieldType_; + /** Number in ZZZAAA format of the isotope that + * G4FissionProductYieldDist references + */ + const G4int Isotope_; + /** MetaState information of the isotope that G4FissionProductYieldDist + * references + * \n Possible values are \p GROUND_STATE, \p META_1, or \p META_2 + */ + const G4FFGEnumerations::MetaState MetaState_; + /** The cause of fission: \p SPONTANEOUS or \p N_INDUCED. */ + const G4FFGEnumerations::FissionCause Cause_; + /** The type of yield to be used: \p INDEPENDET or \p CUMULATIVE */ + const G4FFGEnumerations::YieldType YieldType_; // Datafile variables - /** Name of the fission yield product data file that - * G4FissionProductYieldDist references - */ - G4ENDFTapeRead* ENDFData_; + /** Name of the fission yield product data file that + * G4FissionProductYieldDist references + */ + G4ENDFTapeRead* ENDFData_; // Fission generation variables - /** Contains the \p G4Ions pointer to an alpha particle */ - G4Ions* AlphaDefinition_; - /** Controls whether alpha particles are emitted, and how many */ - G4double AlphaProduction_; - /** Sets the ternary fission probability. Valid ranges are [0, 1] */ - G4double TernaryProbability_; - /** Contains the \p g4ParticleDefinition pointer to a gamma particle */ - G4Gamma* GammaDefinition_; - /** Kinetic energy, if any, of the incident particle in GeV. */ - G4double IncidentEnergy_; - /** Sets the mean gamma energy, in MeV, produced by the fission of the - * isotope described by Isotope_ - */ - G4double MeanGammaEnergy_; - /** Contains the G4ParticleDefinition pointer to a neutron, cast as a - * G4Ion for compatibility*/ - G4Ions* NeutronDefinition_; - /** Nubar for the isotope and incident neutron energy that - * G4FissionProductYieldDist references. - */ - G4double Nubar_; - /** Width of the gaussian distribution that samples nubar for the - * isotope and incident neutron energy that G4FissionProductYieldDist - * references. - */ - G4double NubarWidth_; - /** Counter for the number of protons available to the fission event */ - G4int RemainingZ_; - /** Counter for the number of nucleons available to the fission event */ - G4int RemainingA_; - /** Container for the energy remaining to be assigned in the fission generation */ - G4double RemainingEnergy_; - /** Verbosity level */ - G4int Verbosity_; + /** Contains the \p G4Ions pointer to an alpha particle */ + G4Ions* AlphaDefinition_; + /** Controls whether alpha particles are emitted, and how many */ + G4double AlphaProduction_; + /** Sets the ternary fission probability. Valid ranges are [0, 1] */ + G4double TernaryProbability_; + /** Contains the \p g4ParticleDefinition pointer to a gamma particle */ + G4Gamma* GammaDefinition_; + /** Kinetic energy, if any, of the incident particle in GeV. */ + G4double IncidentEnergy_; + /** Sets the mean gamma energy, in MeV, produced by the fission of the + * isotope described by Isotope_ + */ + G4double MeanGammaEnergy_; + /** Contains the G4ParticleDefinition pointer to a neutron, cast as a + * G4Ion for compatibility*/ + G4Ions* NeutronDefinition_; + /** Nubar for the isotope and incident neutron energy that + * G4FissionProductYieldDist references. + */ + G4double Nubar_; + /** Width of the gaussian distribution that samples nubar for the + * isotope and incident neutron energy that G4FissionProductYieldDist + * references. + */ + G4double NubarWidth_; + /** Counter for the number of protons available to the fission event */ + G4int RemainingZ_; + /** Counter for the number of nucleons available to the fission event */ + G4int RemainingA_; + /** Container for the energy remaining to be assigned in the fission generation */ + G4double RemainingEnergy_; + /** Verbosity level */ + G4int Verbosity_; // Pointers to the field of trees and relevant normalization data - /** An array, or 'field', of the probability trees */ - ProbabilityTree* Trees_; - /** Defines the smallest Z particle in the field of trees */ - G4Ions* SmallestZ_; - /** Defines the smallest A particle in the field of trees */ - G4Ions* SmallestA_; - /** Defines the largest Z particle in the field of trees. */ - G4Ions* LargestZ_; - /** Defines the largest Z particle in the field of trees */ - G4Ions* LargestA_; - /** Number of specific energy groups */ - G4int YieldEnergyGroups_; - /** Energy values of each energy */ - G4double* YieldEnergies_; - /** Variable for ensuring that the input data is normalized */ - G4double* MaintainNormalizedData_; - /** A running total of all the probabilities */ - G4double* DataTotal_; - /** The number of trees in the field */ - G4int TreeCount_; - /** A run-time counter for the total number of branches stored */ - G4int BranchCount_; + /** An array, or 'field', of the probability trees */ + ProbabilityTree* Trees_; + /** Defines the smallest Z particle in the field of trees */ + G4Ions* SmallestZ_; + /** Defines the smallest A particle in the field of trees */ + G4Ions* SmallestA_; + /** Defines the largest Z particle in the field of trees. */ + G4Ions* LargestZ_; + /** Defines the largest Z particle in the field of trees */ + G4Ions* LargestA_; + /** Number of specific energy groups */ + G4int YieldEnergyGroups_; + /** Energy values of each energy */ + G4double* YieldEnergies_; + /** Variable for ensuring that the input data is normalized */ + G4double* MaintainNormalizedData_; + /** A running total of all the probabilities */ + G4double* DataTotal_; + /** The number of trees in the field */ + G4int TreeCount_; + /** A run-time counter for the total number of branches stored */ + G4int BranchCount_; // Pointers to runtime classes that G4FissionProductYieldDist needs to // function properly - /** Pointer to \p G4IonTable - * \n All \p G4Ions are created using - * \p G4IonTable - */ - G4IonTable* IonTable_; - /** Pointer to \p G4NeutronHPNames - * \n Provides access to the list of element names included in Geant4 - */ - G4ParticleHPNames* ElementNames_; - /** Pointer to the \p CLHEP library random engine */ - G4FPYSamplingOps* RandomEngine_; + /** Pointer to \p G4IonTable + * \n All \p G4Ions are created using + * \p G4IonTable + */ + G4IonTable* IonTable_; + /** Pointer to \p G4NeutronHPNames + * \n Provides access to the list of element names included in Geant4 + */ + G4ParticleHPNames* ElementNames_; + /** Pointer to the \p CLHEP library random engine */ + G4FPYSamplingOps* RandomEngine_; -//Functions + // Functions /** Checks to make sure that alpha overpopulation will not occur, which * could result in an unsolvable zero momentum in the LAB system. */ - void CheckAlphaSanity( void ); + void CheckAlphaSanity(); /** Returns the \p G4Ions definitions pointer for the particle whose * probability segment contains the (0, 1] random number \p RandomParticle */ - G4Ions* FindParticle( G4double RandomParticle ); + G4Ions* FindParticle(G4double RandomParticle); /** Returns the \p G4Ions definitions pointer for the particle whose * probability segment contains the (0, 1] random number \p RandomParticle * by extrapolating values using the current data set. * This function exists so that that different models of extrapolation * may be more easily implemented in the future. */ - G4Ions* FindParticleExtrapolation( G4double RandomParticle, - G4bool LowerEnergyGroupExists ); + G4Ions* FindParticleExtrapolation(G4double RandomParticle, G4bool LowerEnergyGroupExists); /** Returns the \p G4Ions definitions pointer for the particle whose * probability segment contains the (0, 1] random number \p RandomParticle * by interpolating values in the current data set. * This function exists so that that different models of interpolation * may be more easily implemented in the future. */ - G4Ions* FindParticleInterpolation( G4double RandomParticle, - G4int LowerEnergyGroup ); + G4Ions* FindParticleInterpolation(G4double RandomParticle, G4int LowerEnergyGroup); /** Returns the \p G4Ions definitions pointer for the particle whose * probability segment contains the (0, 1] random number \p RandomParticle * by searching through a branch. Both the extrapolation and interpolation * schemes currently use this function to identify the particle. */ - G4Ions* FindParticleBranchSearch( ProbabilityBranch* Branch, - G4double RandomParticle, - G4int EnergyGroup1, - G4int EnergyGroup2 ); + G4Ions* FindParticleBranchSearch(ProbabilityBranch* Branch, G4double RandomParticle, + G4int EnergyGroup1, G4int EnergyGroup2); /** Generates a \p G4DynamicParticleVector with the fission alphas */ - virtual void GenerateAlphas( std::vector< G4ReactionProduct* >* Alphas ); + virtual void GenerateAlphas(std::vector* Alphas); /** Generate a linked chain of neutrons and return the pointer to the last * neutron in the chain. */ - virtual void GenerateNeutrons( std::vector< G4ReactionProduct* >* Neutrons ); + virtual void GenerateNeutrons(std::vector* Neutrons); /** Selects a fission product from the probability tree, limited by the * number of nucleons available to the system */ - virtual G4Ions* GetFissionProduct( void ) = 0; + virtual G4Ions* GetFissionProduct() = 0; /** Returns the \p G4Ions definition pointer to the isotope defined by * \p Product and \p MetaState. * Searches the \p ParticleTable for the particle defined by \p Product @@ -313,62 +307,59 @@ protected: * created in \p G4ParticleTable and the pointer to the new particle is * returned. */ - G4Ions* GetParticleDefinition( G4int Product, - G4FFGEnumerations::MetaState MetaState ); + G4Ions* GetParticleDefinition(G4int Product, G4FFGEnumerations::MetaState MetaState); /** Generates the directory location for the data file referenced by * G4FissionProductYieldDist */ - G4String MakeDirectoryName( void ); + G4String MakeDirectoryName(); /** Generates the appropriate file name for the isotope requested */ - G4String MakeFileName( G4int Isotope, - G4FFGEnumerations::MetaState MetaState ); + G4String MakeFileName(G4int Isotope, G4FFGEnumerations::MetaState MetaState); /** Creates a \p G4DynamicParticle from an existing \p G4ReactionProduct */ - G4DynamicParticle* MakeG4DynamicParticle( G4ReactionProduct* ); + G4DynamicParticle* MakeG4DynamicParticle(G4ReactionProduct*); /** Generates the unique name for an isotope/isomer defined by \p Isotope\ * and \p MetaState in the following format: ZZZ_AAAmX_NAME */ - G4String MakeIsotopeName( G4int Isotope, - G4FFGEnumerations::MetaState MetaState ); + G4String MakeIsotopeName(G4int Isotope, G4FFGEnumerations::MetaState MetaState); /** Dynamically allocates and initializes the 'field' of 'trees' with the * 'trunks' */ - virtual void MakeTrees( void ); + virtual void MakeTrees(); /** Reads in the probability data from the data file */ - virtual void ReadProbabilities( void ); + virtual void ReadProbabilities(); /** Renormalizes the data in a ProbabilityTree. * Traverses the tree structure and renormalizes all the probability data * into probability segments, ensuring that no segment overlaps the * other. */ - void Renormalize( ProbabilityBranch* Branch ); + void Renormalize(ProbabilityBranch* Branch); /** Sample the energy of the alpha particles. The energy used by the alpha * particles is subtracted from the available energy */ - void SampleAlphaEnergies( std::vector< G4ReactionProduct* >* Alphas ); + void SampleAlphaEnergies(std::vector* Alphas); /** Samples the energy of the gamma rays */ - void SampleGammaEnergies( std::vector< G4ReactionProduct* >* Gammas ); + void SampleGammaEnergies(std::vector* Gammas); /** Sample the energy of the neutrons using the Watt fission spectrum. The * kinetic energy consumed is returned. */ - void SampleNeutronEnergies( std::vector< G4ReactionProduct* >* Neutrons ); + void SampleNeutronEnergies(std::vector* Neutrons); /** Sets the nubar values for the isotope referenced by * G4FissionProductYieldDistdefined from the data sets defined in * SpecialOps.hh */ - void SetNubar( void ); + void SetNubar(); /** Sorts information for a potential new particle into the correct tree */ - virtual void SortProbability( G4ENDFYieldDataContainer* YieldData ); + virtual void SortProbability(G4ENDFYieldDataContainer* YieldData); -// Destructor function(s) -public: + // Destructor function(s) + public: /** Default deconstructor. It is a virtual function since * G4FissionProductYieldDist is a parent class */ - virtual ~G4FissionProductYieldDist( void ); -protected: + virtual ~G4FissionProductYieldDist(); + + protected: /** Recursively burns each branch in a probability tree. */ - void BurnTree( ProbabilityBranch* Branch ); + void BurnTree(ProbabilityBranch* Branch); }; -#endif /* G4FISSIONPRODUCTYIELDDIST_HH */ - +#endif /* G4FISSIONPRODUCTYIELDDIST_HH */ diff --git a/source/processes/hadronic/models/particle_hp/include/G4InterpolationIterator.hh b/source/processes/hadronic/models/particle_hp/include/G4InterpolationIterator.hh index 4d677610a13..e9372aa5f1f 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4InterpolationIterator.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4InterpolationIterator.hh @@ -28,52 +28,49 @@ #ifndef G4InterpolationIterator_h #define G4InterpolationIterator_h 1 -#include "G4InterpolationManager.hh" #include "G4HadronicException.hh" - +#include "G4InterpolationManager.hh" class G4InterpolationIterator { - private: - G4InterpolationIterator() {} - - public: - G4InterpolationIterator(G4InterpolationManager * aManager) - { - started = false; - theManager = aManager; - } - - ~G4InterpolationIterator(){} - - inline G4bool Fetch() - { - if(!started) - { - started = true; - counter=-1; - current = 0; - } - G4bool result = true; - if(++counter==nEntries) - started = false; - result = false; - else if(current != nRanges-1&&counter==theManager->start[current+1]) - current++; - return result; - } - - inline G4InterpolationScheme Current() - { - if(!started) throw G4HadronicException(__FILE__, __LINE__, "G4InterpolationIterator not started yet"); - return aManager->scheme[current]; - } - - private: - G4InterpolationManager * theManager; - G4int current; - G4int counter; - G4bool started; + private: + G4InterpolationIterator() {} + + public: + G4InterpolationIterator(G4InterpolationManager* aManager) + { + started = false; + theManager = aManager; + } + + ~G4InterpolationIterator() {} + + inline G4bool Fetch() + { + if (!started) { + started = true; + counter = -1; + current = 0; + } + G4bool result = true; + if (++counter == nEntries) started = false; + result = false; + else if (current != nRanges - 1 && counter == theManager->start[current + 1]) current++; + return result; + } + + inline G4InterpolationScheme Current() + { + if (!started) + throw G4HadronicException(__FILE__, __LINE__, "G4InterpolationIterator not started yet"); + return aManager->scheme[current]; + } + + private: + G4InterpolationManager* theManager; + G4int current; + G4int counter; + G4bool started; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4InterpolationManager.hh b/source/processes/hadronic/models/particle_hp/include/G4InterpolationManager.hh index 2af90a18977..edfd6618978 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4InterpolationManager.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4InterpolationManager.hh @@ -28,174 +28,159 @@ #ifndef G4InterpolationManager_h #define G4InterpolationManager_h 1 -#include "globals.hh" +#include "G4HadronicException.hh" #include "G4InterpolationScheme.hh" #include "G4ios.hh" +#include "globals.hh" + #include -#include "G4HadronicException.hh" class G4InterpolationManager { - public: - - friend class G4InterpolationIterator; - - G4InterpolationManager() - { - nRanges = 1; - start = new G4int[1]; - start[0] = 0; - range = new G4int[1]; - range [0] = 100000; - scheme = new G4InterpolationScheme[1]; - scheme[0] = LINLIN; - nEntries = 0; - } - - ~G4InterpolationManager() - { - if(start!=0) delete [] start; - if(range!=0) delete [] range; - if(scheme!=0) delete [] scheme; - } - - G4InterpolationManager & operator= (const G4InterpolationManager & aManager) - { - if(this != &aManager) - { - nRanges = aManager.nRanges; - nEntries = aManager.nEntries; - if(scheme!=0) delete [] scheme; - if(start!=0) delete [] start; - if(range!=0) delete [] range; - scheme = new G4InterpolationScheme[nRanges]; - start = new G4int[nRanges]; - range = new G4int[nRanges]; - for(G4int i=0; i> nRanges; - start = new G4int[nRanges]; - range = new G4int[nRanges]; - scheme = new G4InterpolationScheme[nRanges]; - start[0] = 0; - G4int it; - for(G4int i=0; i>range[i]; - //*************************************************************** - //EMendoza -> there is a bug here. - /* - if(i!=0) start[i] = start[i-1]+range[i-1]; - */ - //*************************************************************** - if(i!=0) start[i] = range[i-1]; - //*************************************************************** - aDataFile>>it; - scheme[i] = MakeScheme(it); - } - nEntries = start[nRanges-1]+range[nRanges-1]; - } - - G4InterpolationScheme MakeScheme(G4int it); - - inline G4InterpolationScheme GetScheme(G4int index) const - { - G4int it = 0; - for(G4int i=1; i> nRanges; + start = new G4int[nRanges]; + range = new G4int[nRanges]; + scheme = new G4InterpolationScheme[nRanges]; + start[0] = 0; + G4int it; + for (G4int i = 0; i < nRanges; i++) { + aDataFile >> range[i]; + //*************************************************************** + // EMendoza -> there is a bug here. + /* + if(i!=0) start[i] = start[i-1]+range[i-1]; + */ + //*************************************************************** + if (i != 0) start[i] = range[i - 1]; + //*************************************************************** + aDataFile >> it; + scheme[i] = MakeScheme(it); + } + nEntries = start[nRanges - 1] + range[nRanges - 1]; + } + + G4InterpolationScheme MakeScheme(G4int it); + + inline G4InterpolationScheme GetScheme(G4int index) const + { + G4int it = 0; + for (G4int i = 1; i < nRanges; i++) { + if (index < start[i]) break; + it = i; + } + return scheme[it]; + } + + inline void CleanUp() + { + nRanges = 0; + nEntries = 0; + } + + inline G4InterpolationScheme GetInverseScheme(G4int index) + { + G4InterpolationScheme result = GetScheme(index); + if (result == HISTO) { + result = RANDOM; + } + else if (result == LINLOG) { + result = LOGLIN; + } + else if (result == LOGLIN) { + result = LINLOG; + } + else if (result == CHISTO) { + result = CRANDOM; + } + else if (result == CLINLOG) { + result = CLOGLIN; + } + else if (result == CLOGLIN) { + result = CLINLOG; + } + else if (result == UHISTO) { + result = URANDOM; + } + else if (result == ULINLOG) { + result = ULOGLIN; + } + else if (result == ULOGLIN) { + result = ULINLOG; + } + return result; + } + + void AppendScheme(G4int aPoint, const G4InterpolationScheme& aScheme); + + private: + G4int nRanges; + G4InterpolationScheme* scheme; + G4int* start; + G4int* range; + G4int nEntries; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4InterpolationScheme.hh b/source/processes/hadronic/models/particle_hp/include/G4InterpolationScheme.hh index 86f53d9ea3d..21e36105ae0 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4InterpolationScheme.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4InterpolationScheme.hh @@ -34,11 +34,13 @@ // unit base interpolation // corresponding point interpolation +// clang-format off enum G4InterpolationScheme { START, HISTO, LINLIN, LINLOG, LOGLIN, LOGLOG, RANDOM, CSTART_,CHISTO, CLINLIN, CLINLOG, CLOGLIN, CLOGLOG, CRANDOM, USTART, UHISTO, ULINLIN, ULINLOG, ULOGLIN, ULOGLOG, URANDOM }; +// clang-format on #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NRESP71M03.hh b/source/processes/hadronic/models/particle_hp/include/G4NRESP71M03.hh index 9aebf0ef79c..2f460f94d6d 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NRESP71M03.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NRESP71M03.hh @@ -26,36 +26,38 @@ #ifndef G4NRESP71M03_HH #define G4NRESP71M03_HH -//#include "G4PhysicalConstants.hh" -//#include "G4SystemOfUnits.hh" -//#include "Randomize.hh" +// #include "G4PhysicalConstants.hh" +// #include "G4SystemOfUnits.hh" +// #include "Randomize.hh" #include "G4ReactionProduct.hh" #include "globals.hh" -class G4NRESP71M03 +class G4NRESP71M03 { - public: - - G4NRESP71M03(){;}; - ~G4NRESP71M03(){;}; - - void DKINMA(G4ReactionProduct *p1, G4ReactionProduct *p2, G4ReactionProduct *p3, G4ReactionProduct *p4, const G4double Q, const G4double costhcm3); - - G4int ApplyMechanismI_NBeA2A(G4ReactionProduct &neut, G4ReactionProduct &carb, G4ReactionProduct *theProds, const G4double QI); - G4int ApplyMechanismII_ACN2A(G4ReactionProduct &neut, G4ReactionProduct &carb, G4ReactionProduct *theProds, const G4double QI); - - G4int ApplyMechanismABE(G4ReactionProduct &neut, G4ReactionProduct &carb, G4ReactionProduct *theProds); - - private: - // Defining the arrays with the angular distribution data - static const G4int ndist = 32; // Number of angular distributions. - static const G4int nrhos = 51; // Number of Rho values. - // Energies for which angular distributions are given. - static const G4double BEN2[ndist]; - // Angular distribution of alpha particles for each energy value in BEN2. - static const G4double B2[ndist][nrhos]; - + public: + G4NRESP71M03() { ; }; + ~G4NRESP71M03() { ; }; + + void DKINMA(G4ReactionProduct* p1, G4ReactionProduct* p2, G4ReactionProduct* p3, + G4ReactionProduct* p4, const G4double Q, const G4double costhcm3); + + G4int ApplyMechanismI_NBeA2A(G4ReactionProduct& neut, G4ReactionProduct& carb, + G4ReactionProduct* theProds, const G4double QI); + G4int ApplyMechanismII_ACN2A(G4ReactionProduct& neut, G4ReactionProduct& carb, + G4ReactionProduct* theProds, const G4double QI); + + G4int ApplyMechanismABE(G4ReactionProduct& neut, G4ReactionProduct& carb, + G4ReactionProduct* theProds); + + private: + // Defining the arrays with the angular distribution data + static const G4int ndist = 32; // Number of angular distributions. + static const G4int nrhos = 51; // Number of Rho values. + // Energies for which angular distributions are given. + static const G4double BEN2[ndist]; + // Angular distribution of alpha particles for each energy value in BEN2. + static const G4double B2[ndist][nrhos]; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2AInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2AInelasticFS.hh index 92efc35b4e3..38663be1bbe 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2AInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2AInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHP2AInelasticFS.hh" using G4NeutronHP2AInelasticFS = G4ParticleHP2AInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2N2AInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2N2AInelasticFS.hh index 7fb6288e6a2..dd54401fe3e 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2N2AInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2N2AInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHP2N2AInelasticFS.hh" using G4NeutronHP2N2AInelasticFS = G4ParticleHP2N2AInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2NAInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2NAInelasticFS.hh index abf407496bf..4cd9f0e009d 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2NAInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2NAInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHP2NAInelasticFS.hh" using G4NeutronHP2NAInelasticFS = G4ParticleHP2NAInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2NDInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2NDInelasticFS.hh index a7fc8d1dc6c..f73367ea6d4 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2NDInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2NDInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHP2NDInelasticFS.hh" using G4NeutronHP2NDInelasticFS = G4ParticleHP2NDInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2NInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2NInelasticFS.hh index fea3bb38854..ae74a9d931f 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2NInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2NInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHP2NInelasticFS.hh" using G4NeutronHP2NInelasticFS = G4ParticleHP2NInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2NPInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2NPInelasticFS.hh index 061358b0722..ea02a8703b5 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2NPInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2NPInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHP2NPInelasticFS.hh" using G4NeutronHP2NPInelasticFS = G4ParticleHP2NPInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2PInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2PInelasticFS.hh index 3c93e9c9056..6b3d77629f2 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2PInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP2PInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHP2PInelasticFS.hh" using G4NeutronHP2PInelasticFS = G4ParticleHP2PInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP3AInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP3AInelasticFS.hh index 70b19e4c029..06d6b529096 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP3AInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP3AInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHP3AInelasticFS.hh" using G4NeutronHP3AInelasticFS = G4ParticleHP3AInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP3NAInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP3NAInelasticFS.hh index a7d9fe8c337..5a7669d9ad1 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP3NAInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP3NAInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHP3NAInelasticFS.hh" using G4NeutronHP3NAInelasticFS = G4ParticleHP3NAInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP3NInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP3NInelasticFS.hh index 2a2db1ec9e3..025c8c9cbde 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP3NInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP3NInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHP3NInelasticFS.hh" using G4NeutronHP3NInelasticFS = G4ParticleHP3NInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP3NPInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP3NPInelasticFS.hh index 16a1b28817f..60a0b3fdce2 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP3NPInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP3NPInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHP3NPInelasticFS.hh" using G4NeutronHP3NPInelasticFS = G4ParticleHP3NPInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP4NInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP4NInelasticFS.hh index 357b3977c7b..bdca63ebded 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHP4NInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHP4NInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHP4NInelasticFS.hh" using G4NeutronHP4NInelasticFS = G4ParticleHP4NInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPAInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPAInelasticFS.hh index 81cbc9a80c4..7591249e572 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPAInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPAInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPAInelasticFS.hh" using G4NeutronHPAInelasticFS = G4ParticleHPAInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPAngular.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPAngular.hh index 2b5df7ccc2a..ab5ebb30250 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPAngular.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPAngular.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPAngular.hh" using G4NeutronHPAngular = G4ParticleHPAngular; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPAngularP.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPAngularP.hh index 528647e8122..cf94d1011b9 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPAngularP.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPAngularP.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPAngularP.hh" using G4NeutronHPAngularP = G4ParticleHPAngularP; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPArbitaryTab.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPArbitaryTab.hh index b7e7522ce13..a559ef122ea 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPArbitaryTab.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPArbitaryTab.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPArbitaryTab.hh" using G4NeutronHPArbitaryTab = G4ParticleHPArbitaryTab; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPBGGNucleonInelasticXS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPBGGNucleonInelasticXS.hh index e813c616daa..c6052ecf8f6 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPBGGNucleonInelasticXS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPBGGNucleonInelasticXS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPBGGNucleonInelasticXS.hh" using G4NeutronHPBGGNucleonInelasticXS = G4ParticleHPBGGNucleonInelasticXS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPCapture.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPCapture.hh index 5520a923fd5..1c842f642a1 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPCapture.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPCapture.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPCapture.hh" using G4NeutronHPCapture = G4ParticleHPCapture; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPCaptureData.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPCaptureData.hh index 71652d21014..94dbec9f505 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPCaptureData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPCaptureData.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPCaptureData.hh" using G4NeutronHPCaptureData = G4ParticleHPCaptureData; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPCaptureFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPCaptureFS.hh index 00fc35a0420..7aef623fba0 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPCaptureFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPCaptureFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPCaptureFS.hh" using G4NeutronHPCaptureFS = G4ParticleHPCaptureFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPChannel.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPChannel.hh index 90cb8e1670d..a7ac039ee04 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPChannel.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPChannel.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPChannel.hh" using G4NeutronHPChannel = G4ParticleHPChannel; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPChannelList.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPChannelList.hh index 385da3c15ee..a1712312bc7 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPChannelList.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPChannelList.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPChannelList.hh" using G4NeutronHPChannelList = G4ParticleHPChannelList; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPContAngularPar.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPContAngularPar.hh index 04be4ac1d9e..713e066d565 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPContAngularPar.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPContAngularPar.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPContAngularPar.hh" using G4NeutronHPContAngularPar = G4ParticleHPContAngularPar; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPContEnergyAngular.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPContEnergyAngular.hh index a4bfd473fd2..720953d15f0 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPContEnergyAngular.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPContEnergyAngular.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPContEnergyAngular.hh" using G4NeutronHPContEnergyAngular = G4ParticleHPContEnergyAngular; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPD2AInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPD2AInelasticFS.hh index 365ea7267fa..9329a7161cd 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPD2AInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPD2AInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPD2AInelasticFS.hh" using G4NeutronHPD2AInelasticFS = G4ParticleHPD2AInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDAInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDAInelasticFS.hh index 7a082d25df7..f5b0d503e36 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDAInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDAInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPDAInelasticFS.hh" using G4NeutronHPDAInelasticFS = G4ParticleHPDAInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDInelasticFS.hh index 25e349db967..ab2eabea7fb 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPDInelasticFS.hh" using G4NeutronHPDInelasticFS = G4ParticleHPDInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPData.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPData.hh index e0c508e3ac3..5ce330059a6 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPData.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPData.hh" using G4NeutronHPData = G4ParticleHPData; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDataPoint.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDataPoint.hh index e063686a588..3b19fb17601 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDataPoint.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDataPoint.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPDataPoint.hh" using G4NeutronHPDataPoint = G4ParticleHPDataPoint; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDataUsed.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDataUsed.hh index dd06ffe0fb7..6f5a04c72fd 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDataUsed.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDataUsed.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPDataUsed.hh" using G4NeutronHPDataUsed = G4ParticleHPDataUsed; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDeExGammas.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDeExGammas.hh index 7bf6d53d209..5ef5fde1ab4 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDeExGammas.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDeExGammas.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPDeExGammas.hh" using G4NeutronHPDeExGammas = G4ParticleHPDeExGammas; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDiscreteTwoBody.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDiscreteTwoBody.hh index 538d208c34e..11d927a528b 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDiscreteTwoBody.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPDiscreteTwoBody.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPDiscreteTwoBody.hh" using G4NeutronHPDiscreteTwoBody = G4ParticleHPDiscreteTwoBody; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPElastic.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPElastic.hh index 9bff96a2b03..c6d0928a526 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPElastic.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPElastic.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPElastic.hh" using G4NeutronHPElastic = G4ParticleHPElastic; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPElasticData.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPElasticData.hh index b96ac491df7..1c8e8b293e7 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPElasticData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPElasticData.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPElasticData.hh" using G4NeutronHPElasticData = G4ParticleHPElasticData; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPElasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPElasticFS.hh index 59fd0c066d6..6e0abc0cf50 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPElasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPElasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPElasticFS.hh" using G4NeutronHPElasticFS = G4ParticleHPElasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPElementData.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPElementData.hh index dc713216545..92ebc091b91 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPElementData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPElementData.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPElementData.hh" using G4NeutronHPElementData = G4ParticleHPElementData; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPEnAngCorrelation.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPEnAngCorrelation.hh index 8a1965d7e2e..6da15e263f3 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPEnAngCorrelation.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPEnAngCorrelation.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPEnAngCorrelation.hh" using G4NeutronHPEnAngCorrelation = G4ParticleHPEnAngCorrelation; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPEnergyDistribution.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPEnergyDistribution.hh index b4852801d74..43cd585134d 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPEnergyDistribution.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPEnergyDistribution.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPEnergyDistribution.hh" using G4NeutronHPEnergyDistribution = G4ParticleHPEnergyDistribution; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPEvapSpectrum.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPEvapSpectrum.hh index 4c3d1db01d6..69338265ec1 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPEvapSpectrum.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPEvapSpectrum.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPEvapSpectrum.hh" using G4NeutronHPEvapSpectrum = G4ParticleHPEvapSpectrum; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFCFissionFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFCFissionFS.hh index 63bbdbfeb7d..89b23025ad3 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFCFissionFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFCFissionFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPFCFissionFS.hh" using G4NeutronHPFCFissionFS = G4ParticleHPFCFissionFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFFFissionFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFFFissionFS.hh index 1a351a39826..e5c099af1be 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFFFissionFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFFFissionFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPFFFissionFS.hh" using G4NeutronHPFFFissionFS = G4ParticleHPFFFissionFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFSFissionFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFSFissionFS.hh index c21f9dd78ec..144eaac24a2 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFSFissionFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFSFissionFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPFSFissionFS.hh" using G4NeutronHPFSFissionFS = G4ParticleHPFSFissionFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFastLegendre.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFastLegendre.hh index 66eae32f1f7..8a0e34934dd 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFastLegendre.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFastLegendre.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPFastLegendre.hh" using G4NeutronHPFastLegendre = G4ParticleHPFastLegendre; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPField.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPField.hh index 9243a302202..fd91a48e879 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPField.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPField.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPField.hh" using G4NeutronHPField = G4ParticleHPField; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFieldPoint.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFieldPoint.hh index d46125d06d6..e4faf7c34c4 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFieldPoint.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFieldPoint.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPFieldPoint.hh" using G4NeutronHPFieldPoint = G4ParticleHPFieldPoint; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFinalState.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFinalState.hh index becd949b0d4..302a916e046 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFinalState.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFinalState.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPFinalState.hh" using G4NeutronHPFinalState = G4ParticleHPFinalState; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFission.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFission.hh index 3523ebf6017..46d75e8db15 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFission.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFission.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPFission.hh" using G4NeutronHPFission = G4ParticleHPFission; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionBaseFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionBaseFS.hh index 91214b6d52b..85649ead22c 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionBaseFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionBaseFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPFissionBaseFS.hh" using G4NeutronHPFissionBaseFS = G4ParticleHPFissionBaseFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionData.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionData.hh index bbb6949eb9b..c4f000f405c 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionData.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPFissionData.hh" using G4NeutronHPFissionData = G4ParticleHPFissionData; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionERelease.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionERelease.hh index a5db4d4a38b..eae4349397e 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionERelease.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionERelease.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPFissionERelease.hh" using G4NeutronHPFissionERelease = G4ParticleHPFissionERelease; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionFS.hh index 28ad6a10099..f802744853c 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPFissionFS.hh" using G4NeutronHPFissionFS = G4ParticleHPFissionFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionSpectrum.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionSpectrum.hh index c59ccec20af..b0decf785fb 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionSpectrum.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPFissionSpectrum.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPFissionSpectrum.hh" using G4NeutronHPFissionSpectrum = G4ParticleHPFissionSpectrum; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPHash.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPHash.hh index 49557cd286a..0da24a2ceb6 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPHash.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPHash.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPHash.hh" using G4NeutronHPHash = G4ParticleHPHash; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPHe3InelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPHe3InelasticFS.hh index 98df8f7587e..c233137f164 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPHe3InelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPHe3InelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPHe3InelasticFS.hh" using G4NeutronHPHe3InelasticFS = G4ParticleHPHe3InelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInelastic.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInelastic.hh index b533cb7e852..e3d3cdcc1d7 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInelastic.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInelastic.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPInelastic.hh" using G4NeutronHPInelastic = G4ParticleHPInelastic; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInelasticBaseFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInelasticBaseFS.hh index 387611abdd5..b70a3ed6b4b 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInelasticBaseFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInelasticBaseFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPInelasticBaseFS.hh" using G4NeutronHPInelasticBaseFS = G4ParticleHPInelasticBaseFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInelasticCompFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInelasticCompFS.hh index 595a45b5201..d60ea90a4d1 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInelasticCompFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInelasticCompFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPInelasticCompFS.hh" using G4NeutronHPInelasticCompFS = G4ParticleHPInelasticCompFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInelasticData.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInelasticData.hh index 0e874b5baaa..7fec6a36bde 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInelasticData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInelasticData.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPInelasticData.hh" using G4NeutronHPInelasticData = G4ParticleHPInelasticData; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInterpolator.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInterpolator.hh index e08a263f7a4..49e073b9790 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInterpolator.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPInterpolator.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPInterpolator.hh" using G4NeutronHPInterpolator = G4ParticleHPInterpolator; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPIsoData.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPIsoData.hh index 98d52ebdd63..a68f47a3f10 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPIsoData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPIsoData.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPIsoData.hh" using G4NeutronHPIsoData = G4ParticleHPIsoData; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPIsotropic.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPIsotropic.hh index 698cb60cb11..bdb25ec1370 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPIsotropic.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPIsotropic.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPIsotropic.hh" using G4NeutronHPIsotropic = G4ParticleHPIsotropic; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPJENDLHEData.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPJENDLHEData.hh index a6ff050204c..16fee1c53e0 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPJENDLHEData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPJENDLHEData.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPJENDLHEData.hh" using G4NeutronHPJENDLHEData = G4ParticleHPJENDLHEData; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPJENDLHEElasticData.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPJENDLHEElasticData.hh index 279074e3767..05f8367a46e 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPJENDLHEElasticData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPJENDLHEElasticData.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPJENDLHEElasticData.hh" using G4NeutronHPJENDLHEElasticData = G4ParticleHPJENDLHEElasticData; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPJENDLHEInelasticData.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPJENDLHEInelasticData.hh index 1448b12f45f..b500e76b04e 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPJENDLHEInelasticData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPJENDLHEInelasticData.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPJENDLHEInelasticData.hh" using G4NeutronHPJENDLHEInelasticData = G4ParticleHPJENDLHEInelasticData; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPKallbachMannSyst.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPKallbachMannSyst.hh index 5c3eecbdae7..dc17b1cce8e 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPKallbachMannSyst.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPKallbachMannSyst.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPKallbachMannSyst.hh" using G4NeutronHPKallbachMannSyst = G4ParticleHPKallbachMannSyst; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPLCFissionFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPLCFissionFS.hh index bff8f6b28fd..92630f672d2 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPLCFissionFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPLCFissionFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPLCFissionFS.hh" using G4NeutronHPLCFissionFS = G4ParticleHPLCFissionFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPLabAngularEnergy.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPLabAngularEnergy.hh index 39e52e4de44..dad226460ca 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPLabAngularEnergy.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPLabAngularEnergy.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPLabAngularEnergy.hh" using G4NeutronHPLabAngularEnergy = G4ParticleHPLabAngularEnergy; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPLegendreStore.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPLegendreStore.hh index 1096d9f0756..5b6fc19bc4d 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPLegendreStore.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPLegendreStore.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPLegendreStore.hh" using G4NeutronHPLegendreStore = G4ParticleHPLegendreStore; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPLegendreTable.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPLegendreTable.hh index 7762cecba49..fbb928b65bb 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPLegendreTable.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPLegendreTable.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPLegendreTable.hh" using G4NeutronHPLegendreTable = G4ParticleHPLegendreTable; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPList.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPList.hh index 7484f2644dd..8fa2fce209b 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPList.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPList.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPList.hh" using G4NeutronHPList = G4ParticleHPList; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPMadlandNixSpectrum.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPMadlandNixSpectrum.hh index 38c108a5163..edf114dd4a3 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPMadlandNixSpectrum.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPMadlandNixSpectrum.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPMadlandNixSpectrum.hh" using G4NeutronHPMadlandNixSpectrum = G4ParticleHPMadlandNixSpectrum; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPManager.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPManager.hh index ff1dd6c2063..ae4fd34d78f 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPManager.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPManager.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPManager.hh" using G4NeutronHPManager = G4ParticleHPManager; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPMessenger.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPMessenger.hh index 7a2f02125dc..33c7dee9fae 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPMessenger.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPMessenger.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPMessenger.hh" using G4NeutronHPMessenger = G4ParticleHPMessenger; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPN2AInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPN2AInelasticFS.hh index 5193e9050b7..4cba6d63828 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPN2AInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPN2AInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPN2AInelasticFS.hh" using G4NeutronHPN2AInelasticFS = G4ParticleHPN2AInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPN2PInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPN2PInelasticFS.hh index ec2ce0cc8d7..b43b4423506 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPN2PInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPN2PInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPN2PInelasticFS.hh" using G4NeutronHPN2PInelasticFS = G4ParticleHPN2PInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPN3AInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPN3AInelasticFS.hh index f58e6b94292..db04ccd3aba 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPN3AInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPN3AInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPN3AInelasticFS.hh" using G4NeutronHPN3AInelasticFS = G4ParticleHPN3AInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNAInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNAInelasticFS.hh index 31ce200fb25..a846aa60666 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNAInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNAInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPNAInelasticFS.hh" using G4NeutronHPNAInelasticFS = G4ParticleHPNAInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNBodyPhaseSpace.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNBodyPhaseSpace.hh index 3a23cb3ce57..45b55418322 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNBodyPhaseSpace.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNBodyPhaseSpace.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPNBodyPhaseSpace.hh" using G4NeutronHPNBodyPhaseSpace = G4ParticleHPNBodyPhaseSpace; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPND2AInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPND2AInelasticFS.hh index 49e8393ca38..f0c23e364e7 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPND2AInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPND2AInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPND2AInelasticFS.hh" using G4NeutronHPND2AInelasticFS = G4ParticleHPND2AInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNDInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNDInelasticFS.hh index 913218a3a40..86e6e227c53 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNDInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNDInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPNDInelasticFS.hh" using G4NeutronHPNDInelasticFS = G4ParticleHPNDInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNHe3InelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNHe3InelasticFS.hh index dcc89a11e5b..ebe79fc9916 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNHe3InelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNHe3InelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPNHe3InelasticFS.hh" using G4NeutronHPNHe3InelasticFS = G4ParticleHPNHe3InelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNInelasticFS.hh index 936a57b6ccc..38d6333d419 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPNInelasticFS.hh" using G4NeutronHPNInelasticFS = G4ParticleHPNInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNPAInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNPAInelasticFS.hh index 7282cfe73d7..72b2d1b278b 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNPAInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNPAInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPNPAInelasticFS.hh" using G4NeutronHPNPAInelasticFS = G4ParticleHPNPAInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNPInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNPInelasticFS.hh index 2489bac7c43..2de0056cdbb 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNPInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNPInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPNPInelasticFS.hh" using G4NeutronHPNPInelasticFS = G4ParticleHPNPInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNT2AInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNT2AInelasticFS.hh index 91bfbb4922b..095c69ac489 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNT2AInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNT2AInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPNT2AInelasticFS.hh" using G4NeutronHPNT2AInelasticFS = G4ParticleHPNT2AInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNTInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNTInelasticFS.hh index b4f7c552487..51ef711a36c 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNTInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNTInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPNTInelasticFS.hh" using G4NeutronHPNTInelasticFS = G4ParticleHPNTInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNXInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNXInelasticFS.hh index 4929669d5a7..fac17d3008c 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNXInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNXInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPNXInelasticFS.hh" using G4NeutronHPNXInelasticFS = G4ParticleHPNXInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNames.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNames.hh index 68ae0a144b0..2e0d1b6a7a5 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNames.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNames.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPNames.hh" using G4NeutronHPNames = G4ParticleHPNames; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNeutronYield.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNeutronYield.hh index 37fe224dc3c..c71afbdbd28 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNeutronYield.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPNeutronYield.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPNeutronYield.hh" using G4NeutronHPNeutronYield = G4ParticleHPNeutronYield; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPAInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPAInelasticFS.hh index f81bcd8a360..89587825d28 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPAInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPAInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPPAInelasticFS.hh" using G4NeutronHPPAInelasticFS = G4ParticleHPPAInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPDInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPDInelasticFS.hh index 54348a562bf..83ccec92a4d 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPDInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPDInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPPDInelasticFS.hh" using G4NeutronHPPDInelasticFS = G4ParticleHPPDInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPInelasticFS.hh index e48ae4f70a3..852387425a3 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPPInelasticFS.hh" using G4NeutronHPPInelasticFS = G4ParticleHPPInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPTInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPTInelasticFS.hh index 6e9fba1c672..0367d19912f 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPTInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPTInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPPTInelasticFS.hh" using G4NeutronHPPTInelasticFS = G4ParticleHPPTInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPartial.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPartial.hh index 97ab2cb9ba8..27faeae63f0 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPartial.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPartial.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPPartial.hh" using G4NeutronHPPartial = G4ParticleHPPartial; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPhotonDist.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPhotonDist.hh index ed747510b2b..3e92df884dc 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPhotonDist.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPhotonDist.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPPhotonDist.hh" using G4NeutronHPPhotonDist = G4ParticleHPPhotonDist; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPolynomExpansion.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPolynomExpansion.hh index add842fc309..a97816899fc 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPolynomExpansion.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPPolynomExpansion.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPPolynomExpansion.hh" using G4NeutronHPPolynomExpansion = G4ParticleHPPolynomExpansion; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPProduct.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPProduct.hh index 8d8f4ec552d..2726aafaa60 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPProduct.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPProduct.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPProduct.hh" using G4NeutronHPProduct = G4ParticleHPProduct; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPReactionWhiteBoard.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPReactionWhiteBoard.hh index a9232a4c2e3..d178bc67028 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPReactionWhiteBoard.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPReactionWhiteBoard.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPReactionWhiteBoard.hh" using G4NeutronHPReactionWhiteBoard = G4ParticleHPReactionWhiteBoard; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPSCFissionFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPSCFissionFS.hh index 2d22efeef99..673867b7df8 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPSCFissionFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPSCFissionFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPSCFissionFS.hh" using G4NeutronHPSCFissionFS = G4ParticleHPSCFissionFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPSimpleEvapSpectrum.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPSimpleEvapSpectrum.hh index e4cf287263f..ce93aa3ef88 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPSimpleEvapSpectrum.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPSimpleEvapSpectrum.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPSimpleEvapSpectrum.hh" using G4NeutronHPSimpleEvapSpectrum = G4ParticleHPSimpleEvapSpectrum; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPT2AInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPT2AInelasticFS.hh index 11ab40bdb7f..51c756cb39e 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPT2AInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPT2AInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPT2AInelasticFS.hh" using G4NeutronHPT2AInelasticFS = G4ParticleHPT2AInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPTCFissionFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPTCFissionFS.hh index c7299a06e66..177a845a840 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPTCFissionFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPTCFissionFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPTCFissionFS.hh" using G4NeutronHPTCFissionFS = G4ParticleHPTCFissionFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPTInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPTInelasticFS.hh index daf5327b34b..cbe35d01a2f 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPTInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPTInelasticFS.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPTInelasticFS.hh" using G4NeutronHPTInelasticFS = G4ParticleHPTInelasticFS; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThermalBoost.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThermalBoost.hh index 48c79a97b89..7ac6f5e3e4d 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThermalBoost.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThermalBoost.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPThermalBoost.hh" using G4NeutronHPThermalBoost = G4ParticleHPThermalBoost; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThermalScattering.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThermalScattering.hh index 885859ba54c..5cfa1ff6224 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThermalScattering.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThermalScattering.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPThermalScattering.hh" using G4NeutronHPThermalScattering = G4ParticleHPThermalScattering; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThermalScatteringData.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThermalScatteringData.hh index c3131cd4e54..83a81a93bc4 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThermalScatteringData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThermalScatteringData.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPThermalScatteringData.hh" using G4NeutronHPThermalScatteringData = G4ParticleHPThermalScatteringData; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThermalScatteringNames.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThermalScatteringNames.hh index d856eee6800..7ab1328971c 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThermalScatteringNames.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThermalScatteringNames.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPThermalScatteringNames.hh" using G4NeutronHPThermalScatteringNames = G4ParticleHPThermalScatteringNames; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThreadLocalManager.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThreadLocalManager.hh index 8508b8c4127..cbb459038be 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThreadLocalManager.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPThreadLocalManager.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPThreadLocalManager.hh" using G4NeutronHPThreadLocalManager = G4ParticleHPThreadLocalManager; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPVector.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPVector.hh index 774e8782217..5c3eda6ef3c 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPVector.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPVector.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPVector.hh" using G4NeutronHPVector = G4ParticleHPVector; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPWattSpectrum.hh b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPWattSpectrum.hh index 7bd8b5fea0c..8e4acdbc35b 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPWattSpectrum.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4NeutronHPWattSpectrum.hh @@ -29,4 +29,4 @@ #include "G4ParticleHPWattSpectrum.hh" using G4NeutronHPWattSpectrum = G4ParticleHPWattSpectrum; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2AInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2AInelasticFS.hh index aeee1760c74..65d0dd374cf 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2AInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2AInelasticFS.hh @@ -30,30 +30,29 @@ #ifndef G4ParticleHP2AInelasticFS_h #define G4ParticleHP2AInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHP2AInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHP2AInelasticFS(); - ~G4ParticleHP2AInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHP2AInelasticFS * theNew = new G4ParticleHP2AInelasticFS; - return theNew; - } - + G4ParticleHP2AInelasticFS(); + ~G4ParticleHP2AInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHP2AInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2N2AInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2N2AInelasticFS.hh index c3435d444b0..10562ff8b8e 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2N2AInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2N2AInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHP2N2AInelasticFS_h #define G4ParticleHP2N2AInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHP2N2AInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHP2N2AInelasticFS(); - ~G4ParticleHP2N2AInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHP2N2AInelasticFS * theNew = new G4ParticleHP2N2AInelasticFS; - return theNew; - } - + G4ParticleHP2N2AInelasticFS(); + ~G4ParticleHP2N2AInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHP2N2AInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2NAInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2NAInelasticFS.hh index 3a1f3c27224..b543141df29 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2NAInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2NAInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHP2NAInelasticFS_h #define G4ParticleHP2NAInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHP2NAInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHP2NAInelasticFS(); - ~G4ParticleHP2NAInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHP2NAInelasticFS * theNew = new G4ParticleHP2NAInelasticFS; - return theNew; - } - + G4ParticleHP2NAInelasticFS(); + ~G4ParticleHP2NAInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHP2NAInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2NDInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2NDInelasticFS.hh index 94ea8e90125..5425194a050 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2NDInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2NDInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHP2NDInelasticFS_h #define G4ParticleHP2NDInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHP2NDInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHP2NDInelasticFS(); - ~G4ParticleHP2NDInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHP2NDInelasticFS * theNew = new G4ParticleHP2NDInelasticFS; - return theNew; - } - + G4ParticleHP2NDInelasticFS(); + ~G4ParticleHP2NDInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHP2NDInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2NInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2NInelasticFS.hh index f1ac4aee325..378dc9b257c 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2NInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2NInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHP2NInelasticFS_h #define G4ParticleHP2NInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHP2NInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHP2NInelasticFS(); - ~G4ParticleHP2NInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHP2NInelasticFS * theNew = new G4ParticleHP2NInelasticFS; - return theNew; - } - + G4ParticleHP2NInelasticFS(); + ~G4ParticleHP2NInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHP2NInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2NPInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2NPInelasticFS.hh index 41102de2cc4..31e80759bd8 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2NPInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2NPInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHP2NPInelasticFS_h #define G4ParticleHP2NPInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHP2NPInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHP2NPInelasticFS(); - ~G4ParticleHP2NPInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHP2NPInelasticFS * theNew = new G4ParticleHP2NPInelasticFS; - return theNew; - } - + G4ParticleHP2NPInelasticFS(); + ~G4ParticleHP2NPInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHP2NPInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2PInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2PInelasticFS.hh index ba622655780..ecc3376073e 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2PInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP2PInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHP2PInelasticFS_h #define G4ParticleHP2PInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHP2PInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHP2PInelasticFS(); - ~G4ParticleHP2PInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHP2PInelasticFS * theNew = new G4ParticleHP2PInelasticFS; - return theNew; - } - + G4ParticleHP2PInelasticFS(); + ~G4ParticleHP2PInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHP2PInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP3AInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP3AInelasticFS.hh index 1088b08c2e5..83a20a66213 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP3AInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP3AInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHP3AInelasticFS_h #define G4ParticleHP3AInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHP3AInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHP3AInelasticFS(); - ~G4ParticleHP3AInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHP3AInelasticFS * theNew = new G4ParticleHP3AInelasticFS; - return theNew; - } - + G4ParticleHP3AInelasticFS(); + ~G4ParticleHP3AInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHP3AInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP3NAInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP3NAInelasticFS.hh index 8e151a0a79b..3dafe38b9f7 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP3NAInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP3NAInelasticFS.hh @@ -30,30 +30,29 @@ #ifndef G4ParticleHP3NAInelasticFS_h #define G4ParticleHP3NAInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHP3NAInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHP3NAInelasticFS(); - ~G4ParticleHP3NAInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHP3NAInelasticFS * theNew = new G4ParticleHP3NAInelasticFS; - return theNew; - } - + G4ParticleHP3NAInelasticFS(); + ~G4ParticleHP3NAInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHP3NAInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP3NInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP3NInelasticFS.hh index dc3aa78a94b..5d58e87d2f7 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP3NInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP3NInelasticFS.hh @@ -30,30 +30,29 @@ #ifndef G4ParticleHP3NInelasticFS_h #define G4ParticleHP3NInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHP3NInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHP3NInelasticFS(); - ~G4ParticleHP3NInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHP3NInelasticFS * theNew = new G4ParticleHP3NInelasticFS; - return theNew; - } - + G4ParticleHP3NInelasticFS(); + ~G4ParticleHP3NInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHP3NInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP3NPInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP3NPInelasticFS.hh index 8ca81a0537d..ccf74c25c72 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP3NPInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP3NPInelasticFS.hh @@ -30,30 +30,29 @@ #ifndef G4ParticleHP3NPInelasticFS_h #define G4ParticleHP3NPInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHP3NPInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHP3NPInelasticFS(); - ~G4ParticleHP3NPInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHP3NPInelasticFS * theNew = new G4ParticleHP3NPInelasticFS; - return theNew; - } - + G4ParticleHP3NPInelasticFS(); + ~G4ParticleHP3NPInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHP3NPInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP4NInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP4NInelasticFS.hh index fc66f273fb0..5ad880016b9 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHP4NInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHP4NInelasticFS.hh @@ -30,30 +30,29 @@ #ifndef G4ParticleHP4NInelasticFS_h #define G4ParticleHP4NInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHP4NInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHP4NInelasticFS(); - ~G4ParticleHP4NInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHP4NInelasticFS * theNew = new G4ParticleHP4NInelasticFS; - return theNew; - } - + G4ParticleHP4NInelasticFS(); + ~G4ParticleHP4NInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHP4NInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPAInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPAInelasticFS.hh index e0ca0a7d558..e30b95db284 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPAInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPAInelasticFS.hh @@ -30,30 +30,29 @@ #ifndef G4ParticleHPAInelasticFS_h #define G4ParticleHPAInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticCompFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticCompFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPAInelasticFS : public G4ParticleHPInelasticCompFS { public: - - G4ParticleHPAInelasticFS(); - ~G4ParticleHPAInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPAInelasticFS * theNew = new G4ParticleHPAInelasticFS; - return theNew; - } - + G4ParticleHPAInelasticFS(); + ~G4ParticleHPAInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPAInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPAngular.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPAngular.hh index eb58d807873..41c14c713b2 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPAngular.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPAngular.hh @@ -32,86 +32,78 @@ #ifndef G4ParticleHPAngular_h #define G4ParticleHPAngular_h 1 -#include - -#include "globals.hh" -#include "G4ios.hh" -#include "G4ReactionProduct.hh" -#include "Randomize.hh" +#include "G4Cache.hh" #include "G4ParticleHPLegendreStore.hh" #include "G4ParticleHPPartial.hh" -#include "G4Cache.hh" +#include "G4ReactionProduct.hh" +#include "G4ios.hh" +#include "Randomize.hh" +#include "globals.hh" + +#include class G4ParticleHPAngular { - struct toBeCached - { - const G4ReactionProduct* theProjectileRP; - const G4ReactionProduct* theTarget; - toBeCached() : theProjectileRP(0),theTarget(0) {} - }; - -public: - - G4ParticleHPAngular() - { - theIsoFlag = true; - theCoefficients = 0; - theProbArray = 0; - toBeCached val; - fCache.Put( val ); - - theAngularDistributionType = 0; - frameFlag = 0; - targetMass = 0.0; - } - - ~G4ParticleHPAngular() - { - delete theCoefficients; - delete theProbArray; - } - - void Init(std::istream & aDataFile); - - void SampleAndUpdate(G4ReactionProduct & anIncidentParticle); - - void SetTarget(const G4ReactionProduct & aTarget) - { - fCache.Get().theTarget = &aTarget; - } - - void SetProjectileRP(const G4ReactionProduct & anIncidentParticleRP) - { - fCache.Get().theProjectileRP = &anIncidentParticleRP; - } - - inline G4double GetTargetMass() - { - return targetMass; - } - -private: - - // the type of distribution; currently - // isotropic (0), - // and legendre representation (1) - // probability distribution (2) - // are supported - - G4int theAngularDistributionType; - G4int frameFlag; // 1=Lab, 2=CMS - - G4bool theIsoFlag; // isotropic or not? - - G4ParticleHPLegendreStore * theCoefficients; // the legendre coefficients - - G4ParticleHPPartial * theProbArray; + struct toBeCached + { + const G4ReactionProduct* theProjectileRP{nullptr}; + const G4ReactionProduct* theTarget{nullptr}; + toBeCached() = default; + }; + + public: + G4ParticleHPAngular() + { + theIsoFlag = true; + theCoefficients = nullptr; + theProbArray = nullptr; + toBeCached val; + fCache.Put(val); + + theAngularDistributionType = 0; + frameFlag = 0; + targetMass = 0.0; + } + + ~G4ParticleHPAngular() + { + delete theCoefficients; + delete theProbArray; + } + + void Init(std::istream& aDataFile); + + void SampleAndUpdate(G4ReactionProduct& anIncidentParticle); + + void SetTarget(const G4ReactionProduct& aTarget) { fCache.Get().theTarget = &aTarget; } + + void SetProjectileRP(const G4ReactionProduct& anIncidentParticleRP) + { + fCache.Get().theProjectileRP = &anIncidentParticleRP; + } + + inline G4double GetTargetMass() { return targetMass; } + + private: + // the type of distribution; currently + // isotropic (0), + // and legendre representation (1) + // probability distribution (2) + // are supported + + G4int theAngularDistributionType; + G4int frameFlag; // 1=Lab, 2=CMS + + G4bool theIsoFlag; // isotropic or not? + + G4ParticleHPLegendreStore* theCoefficients; // the legendre coefficients + + G4ParticleHPPartial* theProbArray; // the probability array p,costh for energy - G4double targetMass; + G4double targetMass; - G4Cache fCache; + G4Cache fCache; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPAngularP.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPAngularP.hh index 4033db9a1d8..8ddfd65f3b6 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPAngularP.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPAngularP.hh @@ -30,86 +30,82 @@ #ifndef G4ParticleHPAngularP_h #define G4ParticleHPAngularP_h 1 -#include - -#include "globals.hh" #include "G4InterpolationManager.hh" #include "G4ParticleHPInterpolator.hh" +#include "globals.hh" + +#include class G4ParticleHPAngularP { public: - - G4ParticleHPAngularP() - { - theCosTh = NULL; - theProb = NULL; - theEnergy = 0.; - nCoeff = 0; - } - ~G4ParticleHPAngularP() - { - if(theCosTh!=0) delete [] theCosTh; - if(theProb!=0) delete [] theProb; - } - - inline void Init(std::istream & aDataFile) - { - G4double eNeu, cosTheta, probDist; - G4int nProb; - aDataFile >> eNeu >> nProb; - theManager.Init(aDataFile); - eNeu *= CLHEP::eV; - Init(eNeu, nProb); - for (G4int iii=0; iii> cosTheta >> probDist; - SetCosTh(iii, cosTheta); - SetProb(iii,probDist); - } - } - - inline void Init(G4double e, G4int n) - { - theCosTh = new G4double[n]; - theProb = new G4double[n]; - theEnergy = e; - nCoeff = n; - } - - inline void SetEnergy(G4double energy){ theEnergy = energy; } - inline void SetCosTh(G4int l, G4double coeff) {theCosTh[l]=coeff;} - inline void SetProb(G4int l, G4double coeff) {theProb[l]=coeff;} - - inline G4double GetCosTh(G4int l) {return theCosTh[l];} - inline G4double GetProb(G4int l) {return theProb[l];} - inline G4double GetEnergy(){return theEnergy;} - inline G4int GetNumberOfPoints(){ return nCoeff; } - inline G4double GetCosTh() - { - G4int i; - G4double rand = G4UniformRand(); - G4double run=0, runo=0; - for (i=0; i> eNeu >> nProb; + theManager.Init(aDataFile); + eNeu *= CLHEP::eV; + Init(eNeu, nProb); + for (G4int iii = 0; iii < nProb; iii++) { + aDataFile >> cosTheta >> probDist; + SetCosTh(iii, cosTheta); + SetProb(iii, probDist); + } + } + + inline void Init(G4double e, G4int n) { - runo=run; - run += GetProb(i); - if(run>rand) break; + theCosTh = new G4double[n]; + theProb = new G4double[n]; + theEnergy = e; + nCoeff = n; } - if(i == GetNumberOfPoints()) i--; - G4double costh = theInt.Interpolate(theManager.GetScheme(i), rand, - runo, run, GetCosTh(i-1), GetCosTh(i)); - return costh; - } - + + inline void SetEnergy(G4double energy) { theEnergy = energy; } + inline void SetCosTh(G4int l, G4double coeff) { theCosTh[l] = coeff; } + inline void SetProb(G4int l, G4double coeff) { theProb[l] = coeff; } + + inline G4double GetCosTh(G4int l) { return theCosTh[l]; } + inline G4double GetProb(G4int l) { return theProb[l]; } + inline G4double GetEnergy() { return theEnergy; } + inline G4int GetNumberOfPoints() { return nCoeff; } + inline G4double GetCosTh() + { + G4int i; + G4double rand = G4UniformRand(); + G4double run = 0, runo = 0; + for (i = 0; i < GetNumberOfPoints(); i++) { + runo = run; + run += GetProb(i); + if (run > rand) break; + } + if (i == GetNumberOfPoints()) i--; + G4double costh = + theInt.Interpolate(theManager.GetScheme(i), rand, runo, run, GetCosTh(i - 1), GetCosTh(i)); + return costh; + } + private: - - G4double theEnergy; // neutron energy - G4ParticleHPInterpolator theInt; // knows tointerpolate - G4int nCoeff; - G4InterpolationManager theManager; // knows the interpolation between stores - G4double * theCosTh; - G4double * theProb; // probability distribution as fcn of theta - // integral normalised to 1. + G4double theEnergy; // neutron energy + G4ParticleHPInterpolator theInt; // knows tointerpolate + G4int nCoeff; + G4InterpolationManager theManager; // knows the interpolation between stores + G4double* theCosTh; + G4double* theProb; // probability distribution as fcn of theta + // integral normalised to 1. }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPArbitaryTab.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPArbitaryTab.hh index 5a4175d7d0b..e2bbe1e08e9 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPArbitaryTab.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPArbitaryTab.hh @@ -30,94 +30,89 @@ #ifndef G4ParticleHPArbitaryTab_h #define G4ParticleHPArbitaryTab_h 1 -#include -#include - -#include "globals.hh" -#include "G4ios.hh" -#include "Randomize.hh" +#include "G4InterpolationManager.hh" #include "G4ParticleHPVector.hh" #include "G4VParticleHPEDis.hh" -#include "G4InterpolationManager.hh" +#include "G4ios.hh" +#include "Randomize.hh" +#include "globals.hh" + +#include + +#include // we will need a List of these .... one per term. class G4ParticleHPArbitaryTab : public G4VParticleHPEDis { public: - G4ParticleHPArbitaryTab() - { - theDistFunc = 0; - nDistFunc = 0; - } - ~G4ParticleHPArbitaryTab() - { - if(theDistFunc!=0) delete [] theDistFunc; - } - - inline void Init(std::istream & theData) - { - G4int i; - theFractionalProb.Init(theData, CLHEP::eV); - theData >> nDistFunc; // = number of incoming n energy points - theDistFunc = new G4ParticleHPVector [nDistFunc]; - theManager.Init(theData); - G4double currentEnergy; - for(i=0; i> currentEnergy; - theDistFunc[i].SetLabel(currentEnergy*CLHEP::eV); - theDistFunc[i].Init(theData, CLHEP::eV); - theDistFunc[i].IntegrateAndNormalise(); - //************************************************************************ - //EMendoza: - //ThinOut() assumes that the data is linear-linear, what is false: - //theDistFunc[i].ThinOut(0.02); // @@@ optimization to be finished. - //************************************************************************ + theDistFunc = nullptr; + nDistFunc = 0; } + ~G4ParticleHPArbitaryTab() override { delete[] theDistFunc; } - //************************************************************************ - //EMendoza: - //Here we calculate the thresholds for the 2D sampling: - for(i=0; i1.e-20){ - theLowThreshold[i]=theDistFunc[i].GetEnergy(j); - break; - } + inline void Init(std::istream& theData) override + { + G4int i; + theFractionalProb.Init(theData, CLHEP::eV); + theData >> nDistFunc; // = number of incoming n energy points + theDistFunc = new G4ParticleHPVector[nDistFunc]; + theManager.Init(theData); + G4double currentEnergy; + for (i = 0; i < nDistFunc; i++) { + theData >> currentEnergy; + theDistFunc[i].SetLabel(currentEnergy * CLHEP::eV); + theDistFunc[i].Init(theData, CLHEP::eV); + theDistFunc[i].IntegrateAndNormalise(); + //************************************************************************ + // EMendoza: + // ThinOut() assumes that the data is linear-linear, what is false: + // theDistFunc[i].ThinOut(0.02); // @@@ optimization to be finished. + //************************************************************************ } - for(G4int j=1;j1.e-20){ - theHighThreshold[i]=theDistFunc[i].GetEnergy(j); - } + + //************************************************************************ + // EMendoza: + // Here we calculate the thresholds for the 2D sampling: + for (i = 0; i < nDistFunc; i++) { + G4int np = theDistFunc[i].GetVectorLength(); + theLowThreshold[i] = theDistFunc[i].GetEnergy(0); + theHighThreshold[i] = theDistFunc[i].GetEnergy(np - 1); + for (G4int j = 0; j < np - 1; j++) { + if (theDistFunc[i].GetXsec(j + 1) > 1.e-20) { + theLowThreshold[i] = theDistFunc[i].GetEnergy(j); + break; + } + } + for (G4int j = 1; j < np; j++) { + if (theDistFunc[i].GetXsec(j - 1) > 1.e-20) { + theHighThreshold[i] = theDistFunc[i].GetEnergy(j); + } + } } + //************************************************************************ } - //************************************************************************ - } - - inline G4double GetFractionalProbability(G4double anEnergy) - { - return theFractionalProb.GetY(anEnergy); - } - - G4double Sample(G4double anEnergy) ; - - private: - - G4ParticleHPVector theFractionalProb; - G4int nDistFunc; - G4InterpolationManager theManager; // knows the interpolation between stores - G4ParticleHPVector * theDistFunc; // one per incoming energy - G4ParticleHPVector theBuffer; - //************************************************************************ - //EMendoza: - G4double theLowThreshold[1000]; - G4double theHighThreshold[1000]; - //************************************************************************ + inline G4double GetFractionalProbability(G4double anEnergy) override + { + return theFractionalProb.GetY(anEnergy); + } + + G4double Sample(G4double anEnergy) override; + + private: + G4ParticleHPVector theFractionalProb; + G4int nDistFunc; + G4InterpolationManager theManager; // knows the interpolation between stores + G4ParticleHPVector* theDistFunc; // one per incoming energy + G4ParticleHPVector theBuffer; + //************************************************************************ + // EMendoza: + G4double theLowThreshold[1000]; + G4double theHighThreshold[1000]; + //************************************************************************ }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPBGGNucleonInelasticXS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPBGGNucleonInelasticXS.hh index 2460b568e56..6ef2e9009d5 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPBGGNucleonInelasticXS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPBGGNucleonInelasticXS.hh @@ -37,7 +37,7 @@ // // Class Description: // -// Wrapper of proton and neutron inelastic cross-sections using Barashenkov +// Wrapper of proton and neutron inelastic cross-sections using Barashenkov // parametersation below 100 GeV and Glauber-Gribov model above // // ------------------------------------------------------------------- @@ -48,10 +48,10 @@ #ifndef G4ParticleHPBGGNucleonInelasticXS_h #define G4ParticleHPBGGNucleonInelasticXS_h -#include "globals.hh" -#include "G4VCrossSectionDataSet.hh" -#include "G4ParticleDefinition.hh" #include "G4BGGNucleonInelasticXS.hh" +#include "G4ParticleDefinition.hh" +#include "G4VCrossSectionDataSet.hh" +#include "globals.hh" /* class G4GlauberGribovCrossSection; class G4NucleonNuclearCrossSection; @@ -62,25 +62,22 @@ class G4Material; class G4Element; class G4Isotope; -class G4ParticleHPBGGNucleonInelasticXS : public G4BGGNucleonInelasticXS +class G4ParticleHPBGGNucleonInelasticXS : public G4BGGNucleonInelasticXS { -public: + public: + G4ParticleHPBGGNucleonInelasticXS(const G4ParticleDefinition*); - G4ParticleHPBGGNucleonInelasticXS (const G4ParticleDefinition*); + ~G4ParticleHPBGGNucleonInelasticXS() override; - virtual ~G4ParticleHPBGGNucleonInelasticXS(); - - virtual - G4bool IsElementApplicable(const G4DynamicParticle*, G4int Z, - const G4Material* mat = 0); + G4bool IsElementApplicable(const G4DynamicParticle*, G4int Z, + const G4Material* mat = nullptr) override; - virtual - G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A, - const G4Element* elm = 0, - const G4Material* mat = 0); + G4bool IsIsoApplicable(const G4DynamicParticle*, G4int Z, G4int A, + const G4Element* elm = nullptr, + const G4Material* mat = nullptr) override; -private: - G4double fLowEnergyLimitForHPN; + private: + G4double fLowEnergyLimitForHPN; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPCapture.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPCapture.hh index 38ce901f655..a7f4368b1bf 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPCapture.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPCapture.hh @@ -25,15 +25,15 @@ // // // - // Hadronic Process: Very Low Energy Neutron X-Sections - // original by H.P. Wellisch, TRIUMF, 14-Feb-97 - // Builds and has the Cross-section data for one material. - +// Hadronic Process: Very Low Energy Neutron X-Sections +// original by H.P. Wellisch, TRIUMF, 14-Feb-97 +// Builds and has the Cross-section data for one material. + // Class Description // Final state production model for a high precision (based on evaluated data -// libraries) description of neutron capture below 20 MeV; +// libraries) description of neutron capture below 20 MeV; // To be used in your physics list in case you need this physics. -// In this case you want to register an object of this class with +// In this case you want to register an object of this class with // the corresponding process. // Class Description - End @@ -42,35 +42,34 @@ #ifndef G4ParticleHPCapture_h #define G4ParticleHPCapture_h 1 -#include "globals.hh" -#include "G4ParticleHPChannel.hh" #include "G4HadronicInteraction.hh" +#include "G4ParticleHPChannel.hh" +#include "globals.hh" class G4ParticleHPCapture : public G4HadronicInteraction { - public: - - G4ParticleHPCapture(); + public: + G4ParticleHPCapture(); + + ~G4ParticleHPCapture() override; - ~G4ParticleHPCapture(); + G4HadFinalState* ApplyYourself(const G4HadProjectile& aTrack, + G4Nucleus& aTargetNucleus) override; - G4HadFinalState * ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& aTargetNucleus); + const std::pair GetFatalEnergyCheckLevels() const override; - virtual const std::pair GetFatalEnergyCheckLevels() const; + public: + G4int GetVerboseLevel() const; + void SetVerboseLevel(G4int); + void BuildPhysicsTable(const G4ParticleDefinition&) override; + void ModelDescription(std::ostream& outFile) const override; - public: - G4int GetVerboseLevel() const; - void SetVerboseLevel( G4int ); - void BuildPhysicsTable(const G4ParticleDefinition&); - virtual void ModelDescription(std::ostream& outFile) const; - private: - - std::vector* theCapture; - G4String dirName; - G4int numEle; - - G4HadFinalState theResult; + std::vector* theCapture{nullptr}; + G4String dirName; + G4int numEle{0}; + + G4HadFinalState theResult; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPCaptureData.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPCaptureData.hh index e397d2440db..9b6dcc1464b 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPCaptureData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPCaptureData.hh @@ -36,64 +36,58 @@ // Class Description // Cross-section data set for a high precision (based on evaluated data -// libraries) description of neutron capture below 20 MeV; +// libraries) description of neutron capture below 20 MeV; // To be used in your physics list in case you need this physics. -// In this case you want to register an object of this class with +// In this case you want to register an object of this class with // the corresponding process. // Class Description - End -#include "G4VCrossSectionDataSet.hh" #include "G4DynamicParticle.hh" #include "G4Element.hh" #include "G4ParticleDefinition.hh" #include "G4PhysicsTable.hh" +#include "G4VCrossSectionDataSet.hh" class G4ParticleHPCaptureData : public G4VCrossSectionDataSet { - public: - - G4ParticleHPCaptureData(); - - ~G4ParticleHPCaptureData(); - - G4bool IsIsoApplicable( const G4DynamicParticle* , - G4int /*Z*/ , G4int /*A*/ , - const G4Element* /*elm*/ , - const G4Material* /*mat*/ ); - - G4double GetIsoCrossSection( const G4DynamicParticle* , - G4int /*Z*/ , G4int /*A*/ , - const G4Isotope* /*iso*/ , - const G4Element* /*elm*/ , - const G4Material* /*mat*/ ); - - //G4bool IsApplicable(const G4DynamicParticle*, const G4Element*); - - public: - //G4bool IsZAApplicable( const G4DynamicParticle* , G4double /*ZZ*/, G4double /*AA*/) - //{ return false;} - - G4double GetCrossSection(const G4DynamicParticle*, const G4Element*, G4double aT); - - void BuildPhysicsTable(const G4ParticleDefinition&); - - void DumpPhysicsTable(const G4ParticleDefinition&); - - public: - G4int GetVerboseLevel() const; - void SetVerboseLevel( G4int ); - virtual void CrossSectionDescription(std::ostream&) const; - - private: - - G4PhysicsTable * theCrossSections; - - G4bool instanceOfWorker; - - G4double ke_cache; - G4double xs_cache; - const G4Element* element_cache; - const G4Material* material_cache; + public: + G4ParticleHPCaptureData(); + + ~G4ParticleHPCaptureData() override; + + G4bool IsIsoApplicable(const G4DynamicParticle*, G4int /*Z*/, G4int /*A*/, + const G4Element* /*elm*/, const G4Material* /*mat*/) override; + + G4double GetIsoCrossSection(const G4DynamicParticle*, G4int /*Z*/, G4int /*A*/, + const G4Isotope* /*iso*/, const G4Element* /*elm*/, + const G4Material* /*mat*/) override; + + // G4bool IsApplicable(const G4DynamicParticle*, const G4Element*); + + public: + // G4bool IsZAApplicable( const G4DynamicParticle* , G4double /*ZZ*/, G4double /*AA*/) + //{ return false;} + + G4double GetCrossSection(const G4DynamicParticle*, const G4Element*, G4double aT); + + void BuildPhysicsTable(const G4ParticleDefinition&) override; + + void DumpPhysicsTable(const G4ParticleDefinition&) override; + + public: + G4int GetVerboseLevel() const; + void SetVerboseLevel(G4int) override; + void CrossSectionDescription(std::ostream&) const override; + + private: + G4PhysicsTable* theCrossSections; + + G4bool instanceOfWorker; + + G4double ke_cache; + G4double xs_cache; + const G4Element* element_cache; + const G4Material* material_cache; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPCaptureFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPCaptureFS.hh index be15d8e255b..5eaa0e5e085 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPCaptureFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPCaptureFS.hh @@ -30,45 +30,42 @@ #ifndef G4ParticleHPCaptureFS_h #define G4ParticleHPCaptureFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" +#include "G4HadProjectile.hh" +#include "G4ParticleHPEnAngCorrelation.hh" #include "G4ParticleHPFinalState.hh" -#include "G4ReactionProductVector.hh" #include "G4ParticleHPNames.hh" #include "G4ParticleHPPhotonDist.hh" -#include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ReactionProductVector.hh" +#include "globals.hh" class G4ParticleHPCaptureFS : public G4ParticleHPFinalState { public: - - G4ParticleHPCaptureFS(); - - ~G4ParticleHPCaptureFS() - { - } - - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* ); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPCaptureFS * theNew = new G4ParticleHPCaptureFS; - return theNew; - } - + G4ParticleHPCaptureFS(); + + ~G4ParticleHPCaptureFS() override = default; + + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPCaptureFS; + return theNew; + } + private: - - G4double targetMass; - - G4ParticleHPPhotonDist theFinalStatePhotons; + G4double targetMass; + + G4ParticleHPPhotonDist theFinalStatePhotons; + + G4ParticleHPEnAngCorrelation theMF6FinalState; + G4bool hasExactMF6; + + G4ParticleHPNames theNames; - G4ParticleHPEnAngCorrelation theMF6FinalState; - G4bool hasExactMF6; - - G4ParticleHPNames theNames; - -// G4double theCurrentA; -// G4double theCurrentZ; + // G4double theCurrentA; + // G4double theCurrentZ; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPChannel.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPChannel.hh index 9ca59422d0c..f8249147957 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPChannel.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPChannel.hh @@ -31,174 +31,176 @@ // 070612 Fix memory leaking by T. Koi // // 080520 Delete unnecessary dependencies by T. Koi - + // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #ifndef G4ParticleHPChannel_h #define G4ParticleHPChannel_h 1 -#include "globals.hh" -#include "G4ParticleHPIsoData.hh" -#include "G4ParticleHPVector.hh" -#include "G4Material.hh" +#include "G4Element.hh" #include "G4HadProjectile.hh" -#include "G4StableIsotopes.hh" +#include "G4Material.hh" #include "G4ParticleHPCaptureFS.hh" #include "G4ParticleHPFinalState.hh" -#include "G4Element.hh" -#include "G4WendtFissionFragmentGenerator.hh" +#include "G4ParticleHPIsoData.hh" #include "G4ParticleHPManager.hh" +#include "G4ParticleHPVector.hh" +#include "G4StableIsotopes.hh" +#include "G4WendtFissionFragmentGenerator.hh" +#include "globals.hh" class G4ParticleDefinition; - class G4ParticleHPChannel { -public: - - G4ParticleHPChannel(G4ParticleDefinition* projectile) : - wendtFissionGenerator( G4ParticleHPManager::GetInstance()->GetUseWendtFissionModel() ? - G4WendtFissionFragmentGenerator::GetInstance() : nullptr ) - { - if ( G4ParticleHPManager::GetInstance()->GetUseWendtFissionModel() ) { - // Make sure both fission fragment models are not active at same time - G4ParticleHPManager::GetInstance()->SetProduceFissionFragments( false ); + public: + G4ParticleHPChannel(G4ParticleDefinition* projectile) + : wendtFissionGenerator(G4ParticleHPManager::GetInstance()->GetUseWendtFissionModel() + ? G4WendtFissionFragmentGenerator::GetInstance() + : nullptr) + { + if (G4ParticleHPManager::GetInstance()->GetUseWendtFissionModel()) { + // Make sure both fission fragment models are not active at same time + G4ParticleHPManager::GetInstance()->SetProduceFissionFragments(false); + } + theProjectile = const_cast(projectile); + theChannelData = new G4ParticleHPVector; + theBuffer = nullptr; + theIsotopeWiseData = nullptr; + theFinalStates = nullptr; + active = nullptr; + registerCount = -1; + niso = -1; + theElement = nullptr; } - theProjectile = const_cast(projectile); - theChannelData = new G4ParticleHPVector; - theBuffer = 0; - theIsotopeWiseData = 0; - theFinalStates = 0; - active = 0; - registerCount = -1; - niso = -1; - theElement = NULL; - } - - G4ParticleHPChannel() : wendtFissionGenerator( G4ParticleHPManager::GetInstance()->GetUseWendtFissionModel() ? - G4WendtFissionFragmentGenerator::GetInstance() : nullptr ) - { - if ( G4ParticleHPManager::GetInstance()->GetUseWendtFissionModel() ) { - // Make sure both fission fragment models are not active at same time - G4ParticleHPManager::GetInstance()->SetProduceFissionFragments( false ); + + G4ParticleHPChannel() + : wendtFissionGenerator(G4ParticleHPManager::GetInstance()->GetUseWendtFissionModel() + ? G4WendtFissionFragmentGenerator::GetInstance() + : nullptr) + { + if (G4ParticleHPManager::GetInstance()->GetUseWendtFissionModel()) { + // Make sure both fission fragment models are not active at same time + G4ParticleHPManager::GetInstance()->SetProduceFissionFragments(false); + } + theProjectile = G4Neutron::Neutron(); + theChannelData = new G4ParticleHPVector; + theBuffer = nullptr; + theIsotopeWiseData = nullptr; + theFinalStates = nullptr; + active = nullptr; + registerCount = -1; + niso = -1; + theElement = nullptr; } - theProjectile = G4Neutron::Neutron(); - theChannelData = new G4ParticleHPVector; - theBuffer = 0; - theIsotopeWiseData = 0; - theFinalStates = 0; - active = 0; - registerCount = -1; - niso = -1; - theElement = NULL; - } - - ~G4ParticleHPChannel() - { - delete theChannelData; - // Following statement disabled to avoid SEGV - // theBuffer is also deleted as "theChannelData" in - // ~G4ParticleHPIsoData. FWJ 06-Jul-1999 - //if(theBuffer != 0) delete theBuffer; - if(theIsotopeWiseData != 0) delete [] theIsotopeWiseData; - // Deletion of FinalStates disabled to avoid endless looping - // in the destructor heirarchy. FWJ 06-Jul-1999 - //if(theFinalStates != 0) - //{ - // for(i=0; iHasFSData(); } - - inline G4bool HasAnyData(G4int isoNumber) { return theFinalStates[isoNumber]->HasAnyData(); } - - G4bool Register(G4ParticleHPFinalState *theFS); - - void Init(G4Element * theElement, const G4String dirName); - - void Init(G4Element * theElement, const G4String dirName, const G4String fsType); - - //void UpdateData(G4int A, G4int Z, G4int index, G4double abundance); - void UpdateData(G4int A, G4int Z, G4int index, G4double abundance, G4ParticleDefinition* projectile) { G4int M = 0; UpdateData( A, Z, M, index, abundance, projectile); }; - void UpdateData(G4int A, G4int Z, G4int M, G4int index, G4double abundance, G4ParticleDefinition* projectile); - - void Harmonise(G4ParticleHPVector *& theStore, G4ParticleHPVector * theNew); - - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack, G4int isoNumber=-1); - - inline G4int GetNiso() {return niso;} - - inline G4double GetN(G4int i) {return theFinalStates[i]->GetN();} - inline G4double GetZ(G4int i) {return theFinalStates[i]->GetZ();} - inline G4double GetM(G4int i) {return theFinalStates[i]->GetM();} - - inline G4bool HasDataInAnyFinalState() - { - G4bool result = false; - G4int i; - for(i=0; iHasFSData(); } + + inline G4bool HasAnyData(G4int isoNumber) { return theFinalStates[isoNumber]->HasAnyData(); } + + G4bool Register(G4ParticleHPFinalState* theFS); + + void Init(G4Element* theElement, const G4String dirName); + + void Init(G4Element* theElement, const G4String dirName, const G4String fsType); + + // void UpdateData(G4int A, G4int Z, G4int index, G4double abundance); + void UpdateData(G4int A, G4int Z, G4int index, G4double abundance, + G4ParticleDefinition* projectile) + { + G4int M = 0; + UpdateData(A, Z, M, index, abundance, projectile); + }; + void UpdateData(G4int A, G4int Z, G4int M, G4int index, G4double abundance, + G4ParticleDefinition* projectile); + + void Harmonise(G4ParticleHPVector*& theStore, G4ParticleHPVector* theNew); + + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack, G4int isoNumber = -1, + G4bool isElastic = false); + + inline G4int GetNiso() { return niso; } + + inline G4double GetN(G4int i) { return theFinalStates[i]->GetN(); } + inline G4double GetZ(G4int i) { return theFinalStates[i]->GetZ(); } + inline G4double GetM(G4int i) { return theFinalStates[i]->GetM(); } + + inline G4bool HasDataInAnyFinalState() { - if(theFinalStates[i]->HasAnyData()) result = true; + G4bool result = false; + G4int i; + for (i = 0; i < niso; i++) { + if (theFinalStates[i]->HasAnyData()) result = true; + } + return result; } - return result; - } - - void DumpInfo(); - - G4String GetFSType() const { - return theFSType; - } - - G4ParticleHPFinalState ** GetFinalStates() const { - return theFinalStates; - } - -private: - G4ParticleDefinition* theProjectile; - - G4ParticleHPVector * theChannelData; // total (element) cross-section for this channel - G4ParticleHPVector * theBuffer; - - G4ParticleHPIsoData * theIsotopeWiseData; // these are the isotope-wise cross-sections for each final state. - G4ParticleHPFinalState ** theFinalStates; // also these are isotope-wise pionters, parallel to the above. - G4bool * active; - G4int niso; - - G4StableIsotopes theStableOnes; - - G4String theDir; - G4String theFSType; - G4Element * theElement; - - G4int registerCount; - - G4WendtFissionFragmentGenerator* const wendtFissionGenerator; - + + void DumpInfo(); + + G4String GetFSType() const { return theFSType; } + + G4ParticleHPFinalState** GetFinalStates() const { return theFinalStates; } + + private: + G4ParticleDefinition* theProjectile; + + G4ParticleHPVector* theChannelData; // total (element) cross-section for this channel + G4ParticleHPVector* theBuffer; + + G4ParticleHPIsoData* + theIsotopeWiseData; // these are the isotope-wise cross-sections for each final state. + G4ParticleHPFinalState** + theFinalStates; // also these are isotope-wise pionters, parallel to the above. + G4bool* active; + G4int niso; + + G4StableIsotopes theStableOnes; + + G4String theDir; + G4String theFSType; + G4Element* theElement; + + G4int registerCount; + + G4WendtFissionFragmentGenerator* const wendtFissionGenerator; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPChannelList.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPChannelList.hh index 5a817985007..ad9eb727b81 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPChannelList.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPChannelList.hh @@ -25,18 +25,18 @@ // // // - // Hadronic Process: Very Low Energy Neutron X-Sections - // original by H.P. Wellisch, TRIUMF, 14-Feb-97 - // Builds and has the Cross-section data for one material. - +// Hadronic Process: Very Low Energy Neutron X-Sections +// original by H.P. Wellisch, TRIUMF, 14-Feb-97 +// Builds and has the Cross-section data for one material. + // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #ifndef G4ParticleHPChannelList_h #define G4ParticleHPChannelList_h 1 -#include "globals.hh" #include "G4ParticleHPChannel.hh" #include "G4StableIsotopes.hh" +#include "globals.hh" class G4Element; class G4HadFinalState; @@ -45,73 +45,66 @@ class G4ParticleHPFinalState; class G4ParticleDefinition; class G4ParticleHPChannelList -{ - +{ public: - - G4ParticleHPChannelList(G4int n, G4ParticleDefinition* projectile); - - G4ParticleHPChannelList(); - - void Init(G4int n); - - ~G4ParticleHPChannelList(); - - G4HadFinalState * ApplyYourself(const G4Element * theElement, const G4HadProjectile & aTrack); - - void Init(G4Element * anElement, const G4String & dirName, G4ParticleDefinition* projectile); - - void Register(G4ParticleHPFinalState *theFS, const G4String &aName); - - inline G4double GetXsec(G4double anEnergy) - { - G4double result=0; - G4int i; - for(i=0; iGetXsec(anEnergy)); - } - return result; - } - - inline G4int GetNumberOfChannels() { return nChannels; } - - inline G4bool HasDataInAnyFinalState() - { - G4bool result = false; - G4int i; - for(i=0; iHasDataInAnyFinalState()) result = true; + G4double result = 0; + G4int i; + for (i = 0; i < nChannels; i++) { + result += std::max(0., theChannels[i]->GetXsec(anEnergy)); + } + return result; } - return result; - } - inline void RestartRegistration() - { - allChannelsCreated = true; - theInitCount = 0; - } - void DumpInfo(); + inline G4int GetNumberOfChannels() { return nChannels; } + inline G4bool HasDataInAnyFinalState() + { + G4bool result = false; + G4int i; + for (i = 0; i < nChannels; i++) { + if (theChannels[i]->HasDataInAnyFinalState()) result = true; + } + return result; + } + inline void RestartRegistration() + { + allChannelsCreated = true; + theInitCount = 0; + } -private: + void DumpInfo(); - static G4ThreadLocal G4int trycounter; - G4ParticleHPChannel ** theChannels; - G4int nChannels; - G4String theDir; - G4Element * theElement; - - G4bool allChannelsCreated; - G4int theInitCount; + private: + static G4ThreadLocal G4int trycounter; + G4ParticleHPChannel** theChannels; + G4int nChannels; + G4String theDir; + G4Element* theElement; - G4StableIsotopes theStableOnes; + G4bool allChannelsCreated; + G4int theInitCount; - G4ParticleDefinition* theProjectile; + G4StableIsotopes theStableOnes; - G4HadFinalState unChanged; + G4ParticleDefinition* theProjectile; + G4HadFinalState unChanged; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPContAngularPar.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPContAngularPar.hh index 50da1fb3fcf..e545a1016a2 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPContAngularPar.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPContAngularPar.hh @@ -32,220 +32,176 @@ #ifndef G4ParticleHPContAngularPar_h #define G4ParticleHPContAngularPar_h 1 -#include -#include - -#include "G4ios.hh" -#include "globals.hh" +#include "G4Cache.hh" +#include "G4InterpolationManager.hh" +#include "G4ParticleHPInterpolator.hh" #include "G4ParticleHPList.hh" #include "G4ReactionProduct.hh" -#include "G4ParticleHPInterpolator.hh" -#include "G4InterpolationManager.hh" -#include "G4Cache.hh" +#include "G4ios.hh" +#include "globals.hh" + +#include +#include class G4ParticleDefinition; class G4ParticleHPContAngularPar { - - struct toBeCached - { - G4bool fresh; - G4double currentMeanEnergy; - G4double remaining_energy; - G4double theTargetCode; - G4ReactionProduct* theTarget; - G4ReactionProduct* thePrimary; - toBeCached() - : fresh(true),currentMeanEnergy(-2.0),remaining_energy(0.0), - theTargetCode(-1.0),theTarget(0),thePrimary(0) {} - }; + struct toBeCached + { + G4bool fresh{true}; + G4double currentMeanEnergy{-2.0}; + G4double remaining_energy{0.0}; + G4double theTargetCode{-1.0}; + G4ReactionProduct* theTarget{nullptr}; + G4ReactionProduct* thePrimary{nullptr}; + toBeCached() = default; + }; public: - - G4ParticleHPContAngularPar() - { - theAngular = 0; - //currentMeanEnergy = -2; - //fresh = true; - fCache.Put(0); - theMinEner = DBL_MAX; - theMaxEner = -DBL_MAX; - theEnergy = -1; - nEnergies = -1; - nDiscreteEnergies = -1; - nAngularParameters = -1; - theProjectile = 0; - adjustResult = true; - } - - G4ParticleHPContAngularPar(G4ParticleHPContAngularPar & val) - { - theEnergy = val.theEnergy; - nEnergies = val.nEnergies; - nDiscreteEnergies = val.nDiscreteEnergies; - nAngularParameters= val.nAngularParameters; - theProjectile = val.theProjectile; - theManager = val.theManager; - theInt = val.theInt; - adjustResult = val.adjustResult; - theMinEner = val.theMinEner; - theMaxEner = val.theMaxEner; - theEnergiesTransformed = val.theEnergiesTransformed; - theDiscreteEnergies = val.theDiscreteEnergies; - theDiscreteEnergiesOwn = val.theDiscreteEnergiesOwn; - fCache.Put(0); - theAngular = new G4ParticleHPList[nEnergies]; - for(G4int ie=0;iethePrimary = aPrimary; - } - - void SetTarget(G4ReactionProduct * aTarget) - { - fCache.Get()->theTarget = aTarget; - } - - void SetTargetCode(G4double aTargetCode) - { - fCache.Get()->theTargetCode = aTargetCode; - } - - void SetInterpolation(G4int theInterpolation) - { - theManager.Init(theInterpolation, nEnergies); // one range only - } - - void BuildByInterpolation(G4double anEnergy, G4InterpolationScheme aScheme, - G4ParticleHPContAngularPar & store1, - G4ParticleHPContAngularPar & store2); - // NOTE: this interpolates legendre coefficients - void PrepareTableInterpolation(); - - G4double MeanEnergyOfThisInteraction() - { - G4double result; - if(fCache.Get()->currentMeanEnergy<-1) + G4ParticleHPContAngularPar(G4ParticleDefinition* projectile); + + ~G4ParticleHPContAngularPar() { - return 0; - // throw G4HadronicException(__FILE__, __LINE__, "G4ParticleHPContAngularPar: Logical error in Product class"); + delete[] theAngular; + if (fCache.Get() != nullptr) delete fCache.Get(); } - else + + void Init(std::istream& aDataFile, G4ParticleDefinition* projectile); + + G4ReactionProduct* Sample(G4double anEnergy, G4double massCode, G4double mass, G4int angularRep, + G4int interpol); + + G4double GetEnergy() const { return theEnergy; } + + void SetPrimary(G4ReactionProduct* aPrimary) { fCache.Get()->thePrimary = aPrimary; } + + void SetTarget(G4ReactionProduct* aTarget) { fCache.Get()->theTarget = aTarget; } + + void SetTargetCode(G4double aTargetCode) { fCache.Get()->theTargetCode = aTargetCode; } + + void SetInterpolation(G4int theInterpolation) { + theManager.Init(theInterpolation, nEnergies); // one range only + } + + void BuildByInterpolation(G4double anEnergy, G4InterpolationScheme aScheme, + G4ParticleHPContAngularPar& store1, + G4ParticleHPContAngularPar& store2); + // NOTE: this interpolates legendre coefficients + + void PrepareTableInterpolation(); + + G4double MeanEnergyOfThisInteraction() + { + G4double result; + if (fCache.Get()->currentMeanEnergy < -1) { + return 0; + // throw G4HadronicException(__FILE__, __LINE__, "G4ParticleHPContAngularPar: Logical error + // in Product class"); + } result = fCache.Get()->currentMeanEnergy; + + fCache.Get()->currentMeanEnergy = -2; + return result; } - fCache.Get()->currentMeanEnergy = -2; - return result; - } - - G4int GetNEnergies() const - { - return nEnergies; - } - G4int GetNDiscreteEnergies() const - { - return nDiscreteEnergies; - } - std::set GetEnergiesTransformed() const - { - return theEnergiesTransformed; - } - G4int GetNEnergiesTransformed() const - { - return (G4int)theEnergiesTransformed.size(); - } - G4double GetMinEner() const - { - return theMinEner; - } - G4double GetMaxEner() const - { - return theMaxEner; - } - std::map GetDiscreteEnergiesOwn() const - { - return theDiscreteEnergiesOwn; - } - G4ParticleHPList* GetAngDataList() const - { - return theAngular; - } - - void ClearHistories() - { - if ( fCache.Get() == 0 ) cacheInit(); - fCache.Get()->fresh = true; - } - - void Dump() const; - -private: - - // incoming particle - G4double theEnergy; - // number of exit channel energies - G4int nEnergies; - // number of discrete exit channels - G4int nDiscreteEnergies; - // number of angular paramerers per channel - G4int nAngularParameters; - // knows the interpolation between List labels - G4InterpolationManager theManager; - // on per exit-channel energy - G4ParticleHPList * theAngular; - - G4ParticleHPInterpolator theInt; - -private: - - G4Cache< toBeCached* > fCache; - void cacheInit() - { - toBeCached* val = new toBeCached; - val->currentMeanEnergy = -2; - val->remaining_energy = 0; - val->fresh=true; - fCache.Put( val ); - }; - - G4ParticleDefinition* theProjectile; - - G4bool adjustResult; + + G4int GetNEnergies() const { return nEnergies; } + G4int GetNDiscreteEnergies() const { return nDiscreteEnergies; } + std::set GetEnergiesTransformed() const { return theEnergiesTransformed; } + G4int GetNEnergiesTransformed() const { return (G4int)theEnergiesTransformed.size(); } + G4double GetMinEner() const { return theMinEner; } + G4double GetMaxEner() const { return theMaxEner; } + std::map GetDiscreteEnergiesOwn() const { return theDiscreteEnergiesOwn; } + G4ParticleHPList* GetAngDataList() const { return theAngular; } + + void ClearHistories() + { + if (fCache.Get() == nullptr) cacheInit(); + fCache.Get()->fresh = true; + } + + void Dump() const; + + private: + // incoming particle + G4double theEnergy; + // number of exit channel energies + G4int nEnergies; + // number of discrete exit channels + G4int nDiscreteEnergies; + // number of angular paramerers per channel + G4int nAngularParameters; + // knows the interpolation between List labels + G4InterpolationManager theManager; + // on per exit-channel energy + G4ParticleHPList* theAngular; + + G4ParticleHPInterpolator theInt; + + private: + G4Cache fCache; + void cacheInit() + { + auto val = new toBeCached; + val->currentMeanEnergy = -2; + val->remaining_energy = 0; + val->fresh = true; + fCache.Put(val); + }; + + G4ParticleDefinition* theProjectile; + + G4bool adjustResult; // if not set it will not force the conservation of energy in angularRep==1, // but will sample the particle energy according to the database - G4double theMinEner; - G4double theMaxEner; - std::set theEnergiesTransformed; - std::set theDiscreteEnergies; - std::map theDiscreteEnergiesOwn; + G4double theMinEner; + G4double theMaxEner; + std::set theEnergiesTransformed; + std::set theDiscreteEnergies; + std::map theDiscreteEnergiesOwn; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPContEnergyAngular.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPContEnergyAngular.hh index f9367d6c91a..5b72ab612bf 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPContEnergyAngular.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPContEnergyAngular.hh @@ -32,14 +32,14 @@ #ifndef G4ParticleHPContEnergyAngular_h #define G4ParticleHPContEnergyAngular_h 1 -#include - +#include "G4Cache.hh" +#include "G4InterpolationManager.hh" +#include "G4ParticleHPContAngularPar.hh" +#include "G4VParticleHPEnergyAngular.hh" #include "G4ios.hh" #include "globals.hh" -#include "G4VParticleHPEnergyAngular.hh" -#include "G4ParticleHPContAngularPar.hh" -#include "G4InterpolationManager.hh" -#include "G4Cache.hh" + +#include class G4ParticleDefinition; @@ -47,58 +47,54 @@ class G4ParticleDefinition; class G4ParticleHPContEnergyAngular : public G4VParticleHPEnergyAngular { -public: - - G4ParticleHPContEnergyAngular(G4ParticleDefinition* proj) - : theProjectile(proj) - { - theAngular = 0; - currentMeanEnergy.Put( -2 ); - theTargetCode = -1.0; - theAngularRep = -1; - nEnergy = -1; - theInterpolation = -1; - fCacheAngular.Put(0); //fix - } - - ~G4ParticleHPContEnergyAngular() - { - if(theAngular!=0) delete [] theAngular; - if (fCacheAngular.Get() != 0) delete fCacheAngular.Get(); //fix - } - - void Init(std::istream & aDataFile) - { - aDataFile >> theTargetCode >> theAngularRep >> theInterpolation >> nEnergy; - theAngular = new G4ParticleHPContAngularPar[nEnergy]; - theManager.Init(aDataFile); - for(G4int i=0; i> theTargetCode >> theAngularRep >> theInterpolation >> nEnergy; + theAngular = new G4ParticleHPContAngularPar[nEnergy]; + theManager.Init(aDataFile); + for (G4int i = 0; i < nEnergy; i++) { + theAngular[i].Init(aDataFile, theProjectile); + theAngular[i].SetInterpolation(theInterpolation); #ifndef PHP_AS_HP - theAngular[i].PrepareTableInterpolation(); + theAngular[i].PrepareTableInterpolation(); #endif + } } - } - G4double MeanEnergyOfThisInteraction(); - G4ReactionProduct* Sample(G4double anEnergy, G4double massCode, G4double mass); - void ClearHistories(); - -private: - - G4double theTargetCode; - G4int theAngularRep; - G4int nEnergy; - - G4int theInterpolation; + G4double MeanEnergyOfThisInteraction() override; + G4ReactionProduct* Sample(G4double anEnergy, G4double massCode, G4double mass) override; + void ClearHistories() override; + + private: + G4double theTargetCode; + G4int theAngularRep; + G4int nEnergy; + + G4int theInterpolation; + + G4InterpolationManager theManager; // knows the interpolation between stores + G4ParticleHPContAngularPar* theAngular; - G4InterpolationManager theManager; // knows the interpolation between stores - G4ParticleHPContAngularPar * theAngular; - - G4Cache currentMeanEnergy; - G4Cache fCacheAngular; //fix - G4ParticleDefinition* theProjectile; + G4Cache currentMeanEnergy; + G4Cache fCacheAngular; // fix + G4ParticleDefinition* theProjectile; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPD2AInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPD2AInelasticFS.hh index c5d2ab8fa9a..2dba4c3eaa1 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPD2AInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPD2AInelasticFS.hh @@ -29,25 +29,25 @@ #ifndef G4ParticleHPD2AInelasticFS_h #define G4ParticleHPD2AInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPInelasticBaseFS.hh" +#include "globals.hh" class G4ParticleHPD2AInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHPD2AInelasticFS(); - ~G4ParticleHPD2AInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPD2AInelasticFS * theNew = new G4ParticleHPD2AInelasticFS; - return theNew; - } - + G4ParticleHPD2AInelasticFS(); + ~G4ParticleHPD2AInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPD2AInelasticFS; + return theNew; + } + private: }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDAInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDAInelasticFS.hh index cd6b37848e7..b74e293a321 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDAInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDAInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPDAInelasticFS_h #define G4ParticleHPDAInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPDAInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHPDAInelasticFS(); - ~G4ParticleHPDAInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPDAInelasticFS * theNew = new G4ParticleHPDAInelasticFS; - return theNew; - } - + G4ParticleHPDAInelasticFS(); + ~G4ParticleHPDAInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPDAInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDInelasticFS.hh index 514c9901bfc..0b00f3f9ebd 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPDInelasticFS_h #define G4ParticleHPDInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticCompFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticCompFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPDInelasticFS : public G4ParticleHPInelasticCompFS { public: - - G4ParticleHPDInelasticFS(); - ~G4ParticleHPDInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPDInelasticFS * theNew = new G4ParticleHPDInelasticFS; - return theNew; - } - + G4ParticleHPDInelasticFS(); + ~G4ParticleHPDInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPDInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPData.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPData.hh index be4fc849e12..9c0c6fcb60b 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPData.hh @@ -25,66 +25,64 @@ // // // - // Hadronic Process: Very Low Energy Neutron X-Sections - // original by H.P. Wellisch, TRIUMF, 14-Feb-97 - // Has the Cross-section data for all materials. +// Hadronic Process: Very Low Energy Neutron X-Sections +// original by H.P. Wellisch, TRIUMF, 14-Feb-97 +// Has the Cross-section data for all materials. // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #ifndef G4ParticleHPData_h #define G4ParticleHPData_h 1 -#include "globals.hh" #include "G4Element.hh" -#include "G4ParticleHPElasticData.hh" -#include "G4ParticleHPInelasticData.hh" -#include "G4ParticleHPFissionData.hh" #include "G4ParticleHPCaptureData.hh" +#include "G4ParticleHPElasticData.hh" #include "G4ParticleHPElementData.hh" +#include "G4ParticleHPFissionData.hh" +#include "G4ParticleHPInelasticData.hh" +#include "globals.hh" #include class G4ParticleHPData { -public: + public: + G4ParticleHPData(G4ParticleDefinition* projectile); - G4ParticleHPData(G4ParticleDefinition* projectile); + ~G4ParticleHPData(); - ~G4ParticleHPData(); + inline G4PhysicsVector* MakePhysicsVector(G4Element* thE, G4ParticleHPFissionData* theP) + { + if (numEle <= (G4int)thE->GetIndex()) addPhysicsVector(); + return DoPhysicsVector((*theData[thE->GetIndex()]).GetData(theP)); + } + inline G4PhysicsVector* MakePhysicsVector(G4Element* thE, G4ParticleHPCaptureData* theP) + { + if (numEle <= (G4int)thE->GetIndex()) addPhysicsVector(); + return DoPhysicsVector((*theData[thE->GetIndex()]).GetData(theP)); + } + inline G4PhysicsVector* MakePhysicsVector(G4Element* thE, G4ParticleHPElasticData* theP) + { + if (numEle <= (G4int)thE->GetIndex()) addPhysicsVector(); + return DoPhysicsVector((*theData[thE->GetIndex()]).GetData(theP)); + } + inline G4PhysicsVector* MakePhysicsVector(G4Element* thE, G4ParticleHPInelasticData* theP) + { + // G4cout << "entered G4ParticleHPData::MakePhysicsVector!!!"<GetIndex()="<GetIndex()<GetIndex()) addPhysicsVector(); + return DoPhysicsVector((*theData[thE->GetIndex()]).GetData(theP)); + } - inline G4PhysicsVector * MakePhysicsVector(G4Element * thE, G4ParticleHPFissionData * theP) - { - if ( numEle <= (G4int)thE->GetIndex() ) addPhysicsVector(); - return DoPhysicsVector((*theData[thE->GetIndex()]).GetData(theP)); - } - inline G4PhysicsVector * MakePhysicsVector(G4Element * thE, G4ParticleHPCaptureData * theP) - { - if ( numEle <= (G4int)thE->GetIndex() ) addPhysicsVector(); - return DoPhysicsVector((*theData[thE->GetIndex()]).GetData(theP)); - } - inline G4PhysicsVector * MakePhysicsVector(G4Element * thE, G4ParticleHPElasticData * theP) - { - if ( numEle <= (G4int)thE->GetIndex() ) addPhysicsVector(); - return DoPhysicsVector((*theData[thE->GetIndex()]).GetData(theP)); - } - inline G4PhysicsVector * MakePhysicsVector(G4Element * thE, G4ParticleHPInelasticData * theP) - { -// G4cout << "entered G4ParticleHPData::MakePhysicsVector!!!"<GetIndex()="<GetIndex()<GetIndex() ) addPhysicsVector(); - return DoPhysicsVector((*theData[thE->GetIndex()]).GetData(theP)); - } + G4PhysicsVector* DoPhysicsVector(G4ParticleHPVector* theVector); - G4PhysicsVector * DoPhysicsVector(G4ParticleHPVector * theVector); - - static G4ParticleHPData * Instance(G4ParticleDefinition* projectile); - -private: + static G4ParticleHPData* Instance(G4ParticleDefinition* projectile); - std::vector< G4ParticleHPElementData* > theData; - G4int numEle; - void addPhysicsVector(); + private: + std::vector theData; + G4int numEle; + void addPhysicsVector(); - G4ParticleDefinition* theProjectile; - G4String theDataDirVariable; + G4ParticleDefinition* theProjectile; + G4String theDataDirVariable; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDataPoint.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDataPoint.hh index 53a57f28fff..796fd7b1f90 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDataPoint.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDataPoint.hh @@ -35,28 +35,38 @@ class G4ParticleHPDataPoint { public: - - G4ParticleHPDataPoint(){energy = 0; xSec = 0;} - G4ParticleHPDataPoint(G4double e, G4double x){ energy = e; xSec = x;} - - inline G4double GetEnergy() const {return energy;} - inline G4double GetXsection() const {return xSec;} - - inline void SetEnergy(G4double e) {energy = e;} - inline void SetXsection(G4double x){xSec = x;} - - inline G4double GetX() const {return energy;} - inline G4double GetY() const {return xSec;} - - inline void SetX(G4double e) {energy = e;} - inline void SetY(G4double x) {xSec = x;} - - inline void SetData(G4double e, G4double x) {energy = e; xSec = x;} - + G4ParticleHPDataPoint() + { + energy = 0; + xSec = 0; + } + G4ParticleHPDataPoint(G4double e, G4double x) + { + energy = e; + xSec = x; + } + + inline G4double GetEnergy() const { return energy; } + inline G4double GetXsection() const { return xSec; } + + inline void SetEnergy(G4double e) { energy = e; } + inline void SetXsection(G4double x) { xSec = x; } + + inline G4double GetX() const { return energy; } + inline G4double GetY() const { return xSec; } + + inline void SetX(G4double e) { energy = e; } + inline void SetY(G4double x) { xSec = x; } + + inline void SetData(G4double e, G4double x) + { + energy = e; + xSec = x; + } + private: - - G4double energy; - G4double xSec; + G4double energy; + G4double xSec; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDataUsed.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDataUsed.hh index b0d4c06c3f6..6e8b72f8e46 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDataUsed.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDataUsed.hh @@ -23,7 +23,7 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// 070625 add natural abundance (nat) flag by T. Koi +// 070625 add natural abundance (nat) flag by T. Koi // // P. Arce, June-2014 Conversion neutron_hp to particle_hp // @@ -35,38 +35,37 @@ class G4ParticleHPDataUsed { public: - - G4ParticleHPDataUsed() - { - theName = ""; - theA = 0; - theZ = 0; - theM = 0; - nat = false; - } - - void SetA(G4double anA){theA = anA;} - void SetZ(G4int aZ){theZ = aZ;} - void SetM(G4int aM){theM = aM;} - void SetName(G4String aName){theName = aName;} + G4ParticleHPDataUsed() + { + theName = ""; + theA = 0; + theZ = 0; + theM = 0; + nat = false; + } + + void SetA(G4double anA) { theA = anA; } + void SetZ(G4int aZ) { theZ = aZ; } + void SetM(G4int aM) { theM = aM; } + void SetName(G4String aName) { theName = aName; } + + G4int GetZ() { return theZ; } + G4double GetA() { return theA; } + G4int GetM() { return theM; } + G4String GetName() { return theName; } - G4int GetZ() {return theZ;} - G4double GetA() {return theA;} - G4int GetM() {return theM;} - G4String GetName() {return theName;} - private: - - G4String theName; - G4double theA; - G4int theZ; - G4int theM; - public: - G4bool IsThisNaturalAbundance() { return nat; }; - void SetNaturalAbundanceFlag() { nat = TRUE; }; + G4String theName; + G4double theA; + G4int theZ; + G4int theM; - private: - G4bool nat; + public: + G4bool IsThisNaturalAbundance() { return nat; }; + void SetNaturalAbundanceFlag() { nat = TRUE; }; + + private: + G4bool nat; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDiscreteTwoBody.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDiscreteTwoBody.hh index d7944fadd90..ae395ff3cb9 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDiscreteTwoBody.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPDiscreteTwoBody.hh @@ -29,72 +29,67 @@ #ifndef G4ParticleHPDiscreteTwoBody_h #define G4ParticleHPDiscreteTwoBody_h 1 -//101110 Bug fix in MF=6, LAW=2 case; contribution from E. Mendoza, D. Cano-Ott (CIEMAT) +// 101110 Bug fix in MF=6, LAW=2 case; contribution from E. Mendoza, D. Cano-Ott (CIEMAT) +#include "G4InterpolationManager.hh" +#include "G4ParticleHPInterpolator.hh" +#include "G4ParticleHPLegendreTable.hh" +#include "G4VParticleHPEnergyAngular.hh" #include "G4ios.hh" -#include #include "globals.hh" -#include "G4VParticleHPEnergyAngular.hh" -#include "G4ParticleHPLegendreTable.hh" -#include "G4ParticleHPInterpolator.hh" -#include "G4InterpolationManager.hh" + +#include class G4ParticleHPDiscreteTwoBody : public G4VParticleHPEnergyAngular { public: - - G4ParticleHPDiscreteTwoBody() - { - theCoeff = 0; - bCheckDiffCoeffRepr = true; - if ( std::getenv( "G4PHP_DO_NOT_CHECK_DIFF_COEFF_REPR" ) ) bCheckDiffCoeffRepr = false; - nEnergy = 0; - } - ~G4ParticleHPDiscreteTwoBody() - { - if(theCoeff!=0) delete [] theCoeff; - } - - void Init(std::istream & aDataFile) - { - aDataFile >> nEnergy; - theManager.Init(aDataFile); - theCoeff = new G4ParticleHPLegendreTable[nEnergy]; - for(G4int i=0; i> energy >> aRep >> nCoeff; - //- G4cout << this << " " << i << " G4ParticleHPDiscreteTwoBody READ DATA " << energy << " " << aRep << " " << nCoeff << G4endl; - energy*=CLHEP::eV; - G4int nPoints=nCoeff; - if(aRep>0) nPoints*=2; - //theCoeff[i].Init(energy, nPoints); + aDataFile >> nEnergy; + theManager.Init(aDataFile); + theCoeff = new G4ParticleHPLegendreTable[nEnergy]; + for (G4int i = 0; i < nEnergy; i++) { + G4double energy; + G4int aRep, nCoeff; + aDataFile >> energy >> aRep >> nCoeff; + //- G4cout << this << " " << i << " G4ParticleHPDiscreteTwoBody READ DATA " << energy + //<< " " << aRep << " " << nCoeff << G4endl; + energy *= CLHEP::eV; + G4int nPoints = nCoeff; + if (aRep > 0) nPoints *= 2; + // theCoeff[i].Init(energy, nPoints); - theCoeff[i].Init(energy, nPoints-1); - theCoeff[i].SetRepresentation(aRep); - for(G4int ii=0; ii> y; - theCoeff[i].SetCoeff(ii, y); - } + theCoeff[i].Init(energy, nPoints - 1); + theCoeff[i].SetRepresentation(aRep); + for (G4int ii = 0; ii < nPoints; ii++) { + G4double y; + aDataFile >> y; + theCoeff[i].SetCoeff(ii, y); + } + } } - } - - G4ReactionProduct * Sample(G4double anEnergy, G4double massCode, G4double mass); - G4double MeanEnergyOfThisInteraction() { return -1; } - + + G4ReactionProduct* Sample(G4double anEnergy, G4double massCode, G4double mass) override; + G4double MeanEnergyOfThisInteraction() override { return -1; } + private: - - G4int nEnergy; - G4InterpolationManager theManager; // knows the interpolation between stores - G4ParticleHPLegendreTable * theCoeff; - + G4int nEnergy; + G4InterpolationManager theManager; // knows the interpolation between stores + G4ParticleHPLegendreTable* theCoeff; + private: - - G4ParticleHPInterpolator theInt; + G4ParticleHPInterpolator theInt; - G4bool bCheckDiffCoeffRepr; // for example ENDF-VII0_proton/Inelastic/F01/4_9_Beryllium has 0 for energy 7.5E+07 and 12 for energy 1.e+08 + G4bool bCheckDiffCoeffRepr; // for example ENDF-VII0_proton/Inelastic/F01/4_9_Beryllium has 0 + // for energy 7.5E+07 and 12 for energy 1.e+08 }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPElastic.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPElastic.hh index c69a3283c1d..ffbfdda76e7 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPElastic.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPElastic.hh @@ -25,57 +25,57 @@ // // // - // Hadronic Process: High Precision low E neutron tracking - // original by H.P. Wellisch, TRIUMF, 14-Feb-97 - // Builds and has the Cross-section data for one material. - // P. Arce, June-2014 Conversion neutron_hp to particle_hp +// Hadronic Process: High Precision low E neutron tracking +// original by H.P. Wellisch, TRIUMF, 14-Feb-97 +// Builds and has the Cross-section data for one material. +// P. Arce, June-2014 Conversion neutron_hp to particle_hp // #ifndef G4ParticleHPElastic_h #define G4ParticleHPElastic_h 1 // Class Description // Final state production model for a high precision (based on evaluated data -// libraries) description of neutron elastic scattering below 20 MeV; +// libraries) description of neutron elastic scattering below 20 MeV; // To be used in your physics list in case you need this physics. -// In this case you want to register an object of this class with +// In this case you want to register an object of this class with // the corresponding process. // Class Description - End -#include "globals.hh" -#include "G4ParticleHPChannel.hh" #include "G4HadronicInteraction.hh" +#include "G4ParticleHPChannel.hh" +#include "globals.hh" class G4ParticleHPElastic : public G4HadronicInteraction { - public: - - G4ParticleHPElastic(); - - ~G4ParticleHPElastic(); + public: + G4ParticleHPElastic(); + + ~G4ParticleHPElastic() override; - G4HadFinalState * ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& aTargetNucleus); - G4HadFinalState * ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& aTargetNucleus, G4bool isFromTSL); + G4HadFinalState* ApplyYourself(const G4HadProjectile& aTrack, + G4Nucleus& aTargetNucleus) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& aTargetNucleus, + G4bool isFromTSL); - virtual const std::pair GetFatalEnergyCheckLevels() const; + const std::pair GetFatalEnergyCheckLevels() const override; - //G4int GetNiso() {return theElastic[0].GetNiso();} - G4int GetNiso() {return ((*theElastic)[0])->GetNiso();}; + // G4int GetNiso() {return theElastic[0].GetNiso();} + G4int GetNiso() { return ((*theElastic)[0])->GetNiso(); }; - void DoNotSuspend() {overrideSuspension = true;} + void DoNotSuspend() { overrideSuspension = true; } - public: - G4int GetVerboseLevel() const; - void SetVerboseLevel( G4int ); - void BuildPhysicsTable(const G4ParticleDefinition&); - virtual void ModelDescription(std::ostream& outFile) const; + public: + G4int GetVerboseLevel() const; + void SetVerboseLevel(G4int); + void BuildPhysicsTable(const G4ParticleDefinition&) override; + void ModelDescription(std::ostream& outFile) const override; private: - std::vector* theElastic; - - G4String dirName; - G4int numEle; - G4bool overrideSuspension; + std::vector* theElastic{nullptr}; + G4String dirName; + G4int numEle{0}; + G4bool overrideSuspension; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPElasticData.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPElasticData.hh index 2a68e295cb4..95ac05b3bc2 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPElasticData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPElasticData.hh @@ -36,63 +36,55 @@ // Class Description // Cross-section data set for a high precision (based on evaluated data -// libraries) description of neutron elastic scattering below 20 MeV; +// libraries) description of neutron elastic scattering below 20 MeV; // To be used in your physics list in case you need this physics. -// In this case you want to register an object of this class with +// In this case you want to register an object of this class with // the corresponding process. // Class Description - End -#include "G4VCrossSectionDataSet.hh" #include "G4DynamicParticle.hh" #include "G4Element.hh" #include "G4ParticleDefinition.hh" #include "G4PhysicsTable.hh" +#include "G4VCrossSectionDataSet.hh" class G4ParticleHPElasticData : public G4VCrossSectionDataSet { - public: - - G4ParticleHPElasticData(); - - ~G4ParticleHPElasticData(); - + public: + G4ParticleHPElasticData(); + + ~G4ParticleHPElasticData() override; - G4bool IsIsoApplicable( const G4DynamicParticle* , - G4int /*Z*/ , G4int /*A*/ , - const G4Element* /*elm*/ , - const G4Material* /*mat*/ ); + G4bool IsIsoApplicable(const G4DynamicParticle*, G4int /*Z*/, G4int /*A*/, + const G4Element* /*elm*/, const G4Material* /*mat*/) override; - G4double GetIsoCrossSection( const G4DynamicParticle* , - G4int /*Z*/ , G4int /*A*/ , - const G4Isotope* /*iso*/ , - const G4Element* /*elm*/ , - const G4Material* /*mat*/ ); + G4double GetIsoCrossSection(const G4DynamicParticle*, G4int /*Z*/, G4int /*A*/, + const G4Isotope* /*iso*/, const G4Element* /*elm*/, + const G4Material* /*mat*/) override; + // G4bool IsApplicable(const G4DynamicParticle*, const G4Element*); - //G4bool IsApplicable(const G4DynamicParticle*, const G4Element*); + public: + // G4bool IsZAApplicable( const G4DynamicParticle* , G4double /*ZZ*/, G4double /*AA*/) + //{ return false;} - public: - //G4bool IsZAApplicable( const G4DynamicParticle* , G4double /*ZZ*/, G4double /*AA*/) - //{ return false;} + G4double GetCrossSection(const G4DynamicParticle*, const G4Element*, G4double aT); - G4double GetCrossSection(const G4DynamicParticle*, const G4Element*, G4double aT); + void BuildPhysicsTable(const G4ParticleDefinition&) override; + void DumpPhysicsTable(const G4ParticleDefinition&) override; - void BuildPhysicsTable(const G4ParticleDefinition&); - void DumpPhysicsTable(const G4ParticleDefinition&); + void SetVerboseLevel(G4int) override; + G4int GetVerboseLevel() const; + void CrossSectionDescription(std::ostream&) const override; - void SetVerboseLevel( G4int ); - G4int GetVerboseLevel() const; - virtual void CrossSectionDescription(std::ostream&) const; - - private: - - G4PhysicsTable * theCrossSections; - G4bool instanceOfWorker; + private: + G4PhysicsTable* theCrossSections; + G4bool instanceOfWorker; - G4double ke_cache; - G4double xs_cache; - const G4Element* element_cache; - const G4Material* material_cache; + G4double ke_cache; + G4double xs_cache; + const G4Element* element_cache; + const G4Material* material_cache; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPElasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPElasticFS.hh index c0b40322f5c..719644275c4 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPElasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPElasticFS.hh @@ -33,45 +33,60 @@ #ifndef G4ParticleHPElasticFS_h #define G4ParticleHPElasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPFinalState.hh" -#include "G4ParticleHPLegendreStore.hh" -#include "G4ParticleHPPartial.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPFastLegendre.hh" +#include "G4ParticleHPFinalState.hh" #include "G4ParticleHPInterpolator.hh" +#include "G4ParticleHPLegendreStore.hh" #include "G4ParticleHPNames.hh" +#include "G4ParticleHPPartial.hh" +#include "G4ParticleHPVector.hh" +#include "G4ReactionProduct.hh" +#include "globals.hh" class G4ParticleHPElasticFS : public G4ParticleHPFinalState { public: - - G4ParticleHPElasticFS(); - ~G4ParticleHPElasticFS() - { - if(theCoefficients!=0) delete theCoefficients; - if(theProbArray!=0) delete theProbArray; - } - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPElasticFS * theNew = new G4ParticleHPElasticFS; - return theNew; - } - + G4ParticleHPElasticFS(); + ~G4ParticleHPElasticFS() override + { + delete theCoefficients; + delete theProbArray; + } + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPElasticFS; + return theNew; + } + + // New method useful for the DBRC algorithm + void RegisterCrossSection(G4ParticleHPVector* vec) { xsForDBRC = vec; } + private: - G4int repFlag; // Legendre coeff(1), or probability array(2), or isotropic(0). + // The following two methods and six data members are needed for the DBRC algorithm + void InitializeScatteringKernelParameters(); + G4ReactionProduct GetBiasedThermalNucleus(const G4double aMass, G4ThreeVector aVelocity, + const G4double temp = -1.); + G4double svtEmax; + G4double dbrcEmax; + G4double dbrcEmin; + G4double dbrcAmin; + G4bool dbrcUse; + G4ParticleHPVector* xsForDBRC; + + G4int repFlag; // Legendre coeff(1), or probability array(2), or isotropic(0). // add 3: for Legendre (Low Energy) + Probability (High Energy) - G4double tE_of_repFlag3; // transition energy in case of repFlag 3: - G4double targetMass; // in neutronmass units. - G4int frameFlag; // CMS or Lab system. - - G4ParticleHPLegendreStore * theCoefficients; // the legendre coefficients - G4ParticleHPPartial * theProbArray; // the probability array p,costh for energy - G4ParticleHPInterpolator theInt; // interpolation - - G4ParticleHPFastLegendre theLegend; // fast look-up for leg-integrals + G4double tE_of_repFlag3; // transition energy in case of repFlag 3: + G4double targetMass; // in neutronmass units. + G4int frameFlag; // CMS or Lab system. + + G4ParticleHPLegendreStore* theCoefficients; // the legendre coefficients + G4ParticleHPPartial* theProbArray; // the probability array p,costh for energy + + G4ParticleHPFastLegendre theLegend; // fast look-up for leg-integrals }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPElementData.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPElementData.hh index 28a2c7942ad..94b1bc7a962 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPElementData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPElementData.hh @@ -24,92 +24,86 @@ // ******************************************************************** // // - // Hadronic Process: Very Low Energy Neutron X-Sections - // original by H.P. Wellisch, TRIUMF, 14-Feb-97 - // Builds and has the Cross-section data for one material. +// Hadronic Process: Very Low Energy Neutron X-Sections +// original by H.P. Wellisch, TRIUMF, 14-Feb-97 +// Builds and has the Cross-section data for one material. // // 080520 Delete unnecessary dependencies by T. Koi - + // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #ifndef G4ParticleHPElementData_h #define G4ParticleHPElementData_h 1 -#include "globals.hh" -#include "G4ParticleHPIsoData.hh" -#include "G4ParticleHPVector.hh" #include "G4Material.hh" -#include "G4ReactionProduct.hh" +#include "G4Neutron.hh" #include "G4Nucleus.hh" +#include "G4ParticleHPCaptureData.hh" #include "G4ParticleHPElasticData.hh" #include "G4ParticleHPFissionData.hh" -#include "G4ParticleHPCaptureData.hh" #include "G4ParticleHPInelasticData.hh" +#include "G4ParticleHPIsoData.hh" +#include "G4ParticleHPVector.hh" +#include "G4ReactionProduct.hh" #include "G4StableIsotopes.hh" -#include "G4Neutron.hh" +#include "globals.hh" class G4ParticleHPElementData { -public: - - G4ParticleHPElementData(); - - ~G4ParticleHPElementData(); - - // void Init(G4Element * theElement,char* dataDirVariable = "G4NEUTRONHPDATA", G4ParticleDefinition* projectile = G4Neutron::Neutron() ); - void Init(G4Element * theElement, G4ParticleDefinition* projectile, const char* dataDirVariable); - - //void UpdateData(G4int A, G4int Z, G4int index, G4double abundance); - // void UpdateData(G4int A, G4int Z, G4int index, G4double abundance,char* dataDirVariable, G4ParticleDefinition* projectile = G4Neutron::Neutron() ) { G4int M=0; UpdateData( A, Z, M, index, abundance, projectile, dataDirVariable); }; - void UpdateData(G4int A, G4int Z, G4int index, G4double abundance,G4ParticleDefinition* projectile, const char* dataDirVariable ) { G4int M=0; UpdateData( A, Z, M, index, abundance, projectile, dataDirVariable); }; - void UpdateData(G4int A, G4int Z, G4int M, G4int index, G4double abundance, G4ParticleDefinition* projectile, const char* dataDirVariable ); - - void Harmonise(G4ParticleHPVector *& theStore, G4ParticleHPVector * theNew); - - inline G4ParticleHPVector * GetData(G4ParticleHPFissionData * ) - {return theFissionData;} - inline G4ParticleHPVector * GetData(G4ParticleHPCaptureData * ) - {return theCaptureData;} - inline G4ParticleHPVector * GetData(G4ParticleHPElasticData * ) - {return theElasticData;} - inline G4ParticleHPVector * GetData(G4ParticleHPInelasticData * ) - {return theInelasticData;} - - G4ParticleHPVector * MakePhysicsVector(G4Element * theElement, - G4ParticleDefinition * projectile, - G4ParticleHPFissionData* theSet, - char* dataDirVariable); - - G4ParticleHPVector * MakePhysicsVector(G4Element * theElement, - G4ParticleDefinition * projectile, - G4ParticleHPCaptureData * theSet, - char* dataDirVariable); - - G4ParticleHPVector * MakePhysicsVector(G4Element * theElement, - G4ParticleDefinition * projectile, - G4ParticleHPElasticData * theSet, - char* dataDirVariable); - - G4ParticleHPVector * MakePhysicsVector(G4Element * theElement, - G4ParticleDefinition * projectile, - G4ParticleHPInelasticData * theSet, - char* dataDirVariable ); - -private: - - G4ParticleHPVector * theFissionData; - G4ParticleHPVector * theCaptureData; - G4ParticleHPVector * theElasticData; - G4ParticleHPVector * theInelasticData; - G4double precision; - - G4ParticleHPVector * theBuffer; - - G4ParticleHPIsoData * theIsotopeWiseData; - - G4StableIsotopes theStableOnes; - - G4String filename; - + public: + G4ParticleHPElementData(); + + ~G4ParticleHPElementData(); + + // void Init(G4Element * theElement,char* dataDirVariable = "G4NEUTRONHPDATA", + // G4ParticleDefinition* projectile = G4Neutron::Neutron() ); + void Init(G4Element* theElement, G4ParticleDefinition* projectile, const char* dataDirVariable); + + // void UpdateData(G4int A, G4int Z, G4int index, G4double abundance); + // void UpdateData(G4int A, G4int Z, G4int index, G4double abundance,char* dataDirVariable, + // G4ParticleDefinition* projectile = G4Neutron::Neutron() ) { G4int M=0; UpdateData( A, Z, M, + // index, abundance, projectile, dataDirVariable); }; + void UpdateData(G4int A, G4int Z, G4int index, G4double abundance, + G4ParticleDefinition* projectile, const char* dataDirVariable) + { + G4int M = 0; + UpdateData(A, Z, M, index, abundance, projectile, dataDirVariable); + }; + void UpdateData(G4int A, G4int Z, G4int M, G4int index, G4double abundance, + G4ParticleDefinition* projectile, const char* dataDirVariable); + + void Harmonise(G4ParticleHPVector*& theStore, G4ParticleHPVector* theNew); + + inline G4ParticleHPVector* GetData(G4ParticleHPFissionData*) { return theFissionData; } + inline G4ParticleHPVector* GetData(G4ParticleHPCaptureData*) { return theCaptureData; } + inline G4ParticleHPVector* GetData(G4ParticleHPElasticData*) { return theElasticData; } + inline G4ParticleHPVector* GetData(G4ParticleHPInelasticData*) { return theInelasticData; } + + G4ParticleHPVector* MakePhysicsVector(G4Element* theElement, G4ParticleDefinition* projectile, + G4ParticleHPFissionData* theSet, char* dataDirVariable); + + G4ParticleHPVector* MakePhysicsVector(G4Element* theElement, G4ParticleDefinition* projectile, + G4ParticleHPCaptureData* theSet, char* dataDirVariable); + + G4ParticleHPVector* MakePhysicsVector(G4Element* theElement, G4ParticleDefinition* projectile, + G4ParticleHPElasticData* theSet, char* dataDirVariable); + + G4ParticleHPVector* MakePhysicsVector(G4Element* theElement, G4ParticleDefinition* projectile, + G4ParticleHPInelasticData* theSet, char* dataDirVariable); + + private: + G4ParticleHPVector* theFissionData; + G4ParticleHPVector* theCaptureData; + G4ParticleHPVector* theElasticData; + G4ParticleHPVector* theInelasticData; + G4double precision; + + G4ParticleHPVector* theBuffer; + + G4ParticleHPIsoData* theIsotopeWiseData; + + G4StableIsotopes theStableOnes; + + G4String filename; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPEnAngCorrelation.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPEnAngCorrelation.hh index a3e6627257c..05ea5e7592e 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPEnAngCorrelation.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPEnAngCorrelation.hh @@ -29,126 +29,110 @@ #ifndef G4ParticleHPEnAngCorrelation_h #define G4ParticleHPEnAngCorrelation_h 1 -#include - -#include "globals.hh" +#include "G4Cache.hh" +#include "G4ParticleHPManager.hh" +#include "G4ParticleHPProduct.hh" #include "G4ParticleHPVector.hh" -#include "Randomize.hh" +#include "G4ReactionProduct.hh" #include "G4ios.hh" +#include "Randomize.hh" #include "globals.hh" -#include "G4ParticleHPProduct.hh" -#include "G4ReactionProduct.hh" -#include "G4Cache.hh" -#include "G4ParticleHPManager.hh" + +#include class G4ParticleDefinition; class G4ParticleHPEnAngCorrelation { - struct toBeCached - { - G4ReactionProduct* theProjectileRP; - G4ReactionProduct* theTarget; - G4double theTotalMeanEnergy; - toBeCached() - : theProjectileRP(0), theTarget(0), theTotalMeanEnergy(-1.0) {} - }; - -public: - - G4ParticleHPEnAngCorrelation() // for G4ParticleHPCaptureFS::theMF6FinalState - { - theProjectile = G4Neutron::Neutron(); - theProducts = 0; - inCharge = false; - toBeCached val; - fCache.Put( val ); - //theTotalMeanEnergy = -1.; - fCache.Get().theTotalMeanEnergy = -1.; - targetMass = 0.0; - frameFlag = 0; - nProducts = 0; - } - - G4ParticleHPEnAngCorrelation(G4ParticleDefinition* proj) - : theProjectile(proj) - { - theProducts = 0; - inCharge = false; - toBeCached val; - fCache.Put( val ); - //theTotalMeanEnergy = -1.; - fCache.Get().theTotalMeanEnergy = -1.; - targetMass = 0.0; - frameFlag = 0; - nProducts = 0; - } - - ~G4ParticleHPEnAngCorrelation() - { - if(theProducts!=0) delete [] theProducts; - } - - inline void Init(std::istream & aDataFile) - { - inCharge = true; - aDataFile>>targetMass>>frameFlag>>nProducts; - theProducts = new G4ParticleHPProduct[nProducts]; - for(G4int i=0; i fCache; - - G4ParticleDefinition* theProjectile; + ~G4ParticleHPEnAngCorrelation() { delete[] theProducts; } + + inline void Init(std::istream& aDataFile) + { + inCharge = true; + aDataFile >> targetMass >> frameFlag >> nProducts; + theProducts = new G4ParticleHPProduct[nProducts]; + for (G4int i = 0; i < nProducts; i++) { + theProducts[i].Init(aDataFile, theProjectile); + } + } + + G4ReactionProduct* SampleOne(G4double anEnergy); + + G4ReactionProductVector* Sample(G4double anEnergy); + + inline void SetTarget(G4ReactionProduct& aTarget) + { + fCache.Get().theTarget = &aTarget; + for (G4int i = 0; i < nProducts; i++) + theProducts[i].SetTarget(fCache.Get().theTarget); + } + + inline void SetProjectileRP(G4ReactionProduct& aIncidentPart) + { + fCache.Get().theProjectileRP = &aIncidentPart; + for (G4int i = 0; i < nProducts; i++) + theProducts[i].SetProjectileRP(fCache.Get().theProjectileRP); + } + + inline G4bool InCharge() { return inCharge; } + + inline G4double GetTargetMass() { return targetMass; } + + G4double GetTotalMeanEnergy() + { + return fCache.Get().theTotalMeanEnergy; // cached in 'sample' call + } + + private: + // data members + + G4double targetMass; + G4int frameFlag; // =1: Target rest frame; =2: CMS system; incident in lab + G4int nProducts; + G4ParticleHPProduct* theProducts; + G4bool inCharge; + + // cached values + // + G4Cache fCache; + + G4ParticleDefinition* theProjectile; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPEnergyDistribution.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPEnergyDistribution.hh index eb6c64e568a..a42fb6dac14 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPEnergyDistribution.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPEnergyDistribution.hh @@ -29,109 +29,103 @@ #ifndef G4ParticleHPEnergyDistribution_h #define G4ParticleHPEnergyDistribution_h 1 -#include - -#include "globals.hh" -#include "G4ios.hh" -#include "Randomize.hh" #include "G4ParticleHPArbitaryTab.hh" #include "G4ParticleHPEvapSpectrum.hh" -#include "G4ParticleHPSimpleEvapSpectrum.hh" #include "G4ParticleHPFissionSpectrum.hh" -#include "G4ParticleHPWattSpectrum.hh" #include "G4ParticleHPMadlandNixSpectrum.hh" +#include "G4ParticleHPSimpleEvapSpectrum.hh" +#include "G4ParticleHPWattSpectrum.hh" #include "G4VParticleHPEDis.hh" +#include "G4ios.hh" +#include "Randomize.hh" +#include "globals.hh" + +#include // we will need a List of these .... one per term. class G4ParticleHPEnergyDistribution { public: - G4ParticleHPEnergyDistribution() - { - theEnergyDistribution = 0; - theNumberOfPartials = 0; - theRepresentationType = 0; - } - ~G4ParticleHPEnergyDistribution() - { - if(theEnergyDistribution != 0) + G4ParticleHPEnergyDistribution() { - for(G4int i=0; i> dummy >> theNumberOfPartials; - theEnergyDistribution = new G4VParticleHPEDis * [theNumberOfPartials]; - for(G4int i=0; i> theRepresentationType; - switch(theRepresentationType) - { - case 1: - theEnergyDistribution[i] = new G4ParticleHPArbitaryTab; - break; - case 5: - theEnergyDistribution[i] = new G4ParticleHPEvapSpectrum; - break; - case 7: - theEnergyDistribution[i] = new G4ParticleHPFissionSpectrum; - break; - case 9: - theEnergyDistribution[i] = new G4ParticleHPSimpleEvapSpectrum; - break; - case 11: - theEnergyDistribution[i] = new G4ParticleHPWattSpectrum; - break; - case 12: - theEnergyDistribution[i] = new G4ParticleHPMadlandNixSpectrum; - break; + if (theEnergyDistribution != nullptr) { + for (G4int i = 0; i < theNumberOfPartials; i++) { + delete theEnergyDistribution[i]; + } + delete[] theEnergyDistribution; } - theEnergyDistribution[i]->Init(theData); } - } - - inline G4double Sample(G4double anEnergy, G4int & it) - { - G4double result = 0; - it = 0; - if (theNumberOfPartials != 0) + + inline void Init(std::istream& theData) { - G4double sum=0; - G4double * running = new G4double[theNumberOfPartials]; - running[0] = 0; - G4int i; - for (i=0; iGetFractionalProbability(anEnergy); + G4double dummy; + theData >> dummy >> theNumberOfPartials; + theEnergyDistribution = new G4VParticleHPEDis*[theNumberOfPartials]; + for (G4int i = 0; i < theNumberOfPartials; i++) { + theData >> theRepresentationType; + switch (theRepresentationType) { + case 1: + theEnergyDistribution[i] = new G4ParticleHPArbitaryTab; + break; + case 5: + theEnergyDistribution[i] = new G4ParticleHPEvapSpectrum; + break; + case 7: + theEnergyDistribution[i] = new G4ParticleHPFissionSpectrum; + break; + case 9: + theEnergyDistribution[i] = new G4ParticleHPSimpleEvapSpectrum; + break; + case 11: + theEnergyDistribution[i] = new G4ParticleHPWattSpectrum; + break; + case 12: + theEnergyDistribution[i] = new G4ParticleHPMadlandNixSpectrum; + break; + default: + theEnergyDistribution[i] = new G4ParticleHPArbitaryTab; + } + theEnergyDistribution[i]->Init(theData); } - sum = running[theNumberOfPartials-1]; - G4double random = G4UniformRand(); - for(i=0; irandom) break; + } + + inline G4double Sample(G4double anEnergy, G4int& it) + { + G4double result = 0; + it = 0; + if (theNumberOfPartials != 0) { + G4double sum = 0; + auto running = new G4double[theNumberOfPartials]; + running[0] = 0; + G4int i; + for (i = 0; i < theNumberOfPartials; i++) { + if (i != 0) running[i] = running[i - 1]; + running[i] += theEnergyDistribution[i]->GetFractionalProbability(anEnergy); + } + sum = running[theNumberOfPartials - 1]; + G4double random = G4UniformRand(); + for (i = 0; i < theNumberOfPartials; i++) { + it = i; + if (running[i] / sum > random) break; + } + delete[] running; + if (it == theNumberOfPartials) it--; + result = theEnergyDistribution[it]->Sample(anEnergy); } - delete [] running; - if(it==theNumberOfPartials) it--; - result = theEnergyDistribution[it]->Sample(anEnergy); + return result; } - return result; - } - + private: - - G4int theNumberOfPartials; - G4int theRepresentationType; - G4VParticleHPEDis ** theEnergyDistribution; + G4int theNumberOfPartials; + G4int theRepresentationType; + G4VParticleHPEDis** theEnergyDistribution; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPEvapSpectrum.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPEvapSpectrum.hh index e3473f6b7af..263f5c6633f 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPEvapSpectrum.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPEvapSpectrum.hh @@ -29,55 +29,50 @@ #ifndef G4ParticleHPEvapSpectrum_h #define G4ParticleHPEvapSpectrum_h 1 -#include -#include - -#include "globals.hh" -#include "G4ios.hh" -#include "Randomize.hh" #include "G4ParticleHPVector.hh" #include "G4VParticleHPEDis.hh" +#include "G4ios.hh" +#include "Randomize.hh" +#include "globals.hh" + +#include + +#include // we will need a List of these .... one per term. class G4ParticleHPEvapSpectrum : public G4VParticleHPEDis { public: - G4ParticleHPEvapSpectrum() - { - } - ~G4ParticleHPEvapSpectrum() - { - } - - inline void Init(std::istream & aDataFile) - { - theFractionalProb.Init(aDataFile); - theThetaDist.Init(aDataFile); - theXDist.Init(aDataFile); - } - - inline G4double GetFractionalProbability(G4double anEnergy) - { - return theFractionalProb.GetY(anEnergy); - } - - inline G4double Sample(G4double anEnergy) - { - // when this is called, theFractionalProb was used, and 'k' is sorted out already. - G4double x = theXDist.Sample(); - G4double theta = theThetaDist.GetY(anEnergy); - G4double result = x*theta; - return result*CLHEP::eV; - } - + G4ParticleHPEvapSpectrum() = default; + ~G4ParticleHPEvapSpectrum() override = default; + + inline void Init(std::istream& aDataFile) override + { + theFractionalProb.Init(aDataFile); + theThetaDist.Init(aDataFile); + theXDist.Init(aDataFile); + } + + inline G4double GetFractionalProbability(G4double anEnergy) override + { + return theFractionalProb.GetY(anEnergy); + } + + inline G4double Sample(G4double anEnergy) override + { + // when this is called, theFractionalProb was used, and 'k' is sorted out already. + G4double x = theXDist.Sample(); + G4double theta = theThetaDist.GetY(anEnergy); + G4double result = x * theta; + return result * CLHEP::eV; + } + private: - - G4ParticleHPVector theFractionalProb; - - G4ParticleHPVector theThetaDist; - G4ParticleHPVector theXDist; - + G4ParticleHPVector theFractionalProb; + + G4ParticleHPVector theThetaDist; + G4ParticleHPVector theXDist; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFCFissionFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFCFissionFS.hh index fec41909858..c1c88952d8a 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFCFissionFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFCFissionFS.hh @@ -29,27 +29,26 @@ #ifndef G4ParticleHPFCFissionFS_h #define G4ParticleHPFCFissionFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4DynamicParticleVector.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPFissionBaseFS.hh" +#include "globals.hh" class G4ParticleHPFCFissionFS : public G4ParticleHPFissionBaseFS { public: - - G4ParticleHPFCFissionFS(){ hasXsec = false; } - ~G4ParticleHPFCFissionFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile); - G4DynamicParticleVector * ApplyYourself(G4int nNeutrons); - G4ParticleHPFinalState * New() - { - G4ParticleHPFCFissionFS * theNew = new G4ParticleHPFCFissionFS; - return theNew; - } - + G4ParticleHPFCFissionFS() { hasXsec = false; } + ~G4ParticleHPFCFissionFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition* projectile) override; + G4DynamicParticleVector* ApplyYourself(G4int nNeutrons); + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPFCFissionFS; + return theNew; + } + private: - G4HadFinalState * ApplyYourself(const G4HadProjectile & ) { return 0; } - + G4HadFinalState* ApplyYourself(const G4HadProjectile&) override { return nullptr; } }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFFFissionFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFFFissionFS.hh index 4e6ce596942..342d6371200 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFFFissionFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFFFissionFS.hh @@ -29,37 +29,36 @@ #ifndef G4ParticleHPFFFissionFS_h #define G4ParticleHPFFFissionFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4DynamicParticleVector.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPFissionBaseFS.hh" +#include "globals.hh" class G4ParticleHPFFFissionFS : public G4ParticleHPFissionBaseFS { - - public: - G4ParticleHPFFFissionFS(){ hasXsec = false; } - ~G4ParticleHPFFFissionFS(); + public: + G4ParticleHPFFFissionFS() { hasXsec = false; } + ~G4ParticleHPFFFissionFS() override; - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; - G4DynamicParticleVector * ApplyYourself( G4int nNeutrons ); + G4DynamicParticleVector* ApplyYourself(G4int nNeutrons); - G4ParticleHPFinalState * New() - { - G4ParticleHPFFFissionFS * theNew = new G4ParticleHPFFFissionFS; - return theNew; - } + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPFFFissionFS; + return theNew; + } - //energy fragZ fragA fragM - void GetAFissionFragment( G4double , G4int& , G4int& , G4int& ); - - private: - G4HadFinalState * ApplyYourself( const G4HadProjectile & ) { return NULL; } + // energy fragZ fragA fragM + void GetAFissionFragment(G4double, G4int&, G4int&, G4int&); - // MT Energy FPS Yield - std::map< G4int , std::map< G4double , std::map< G4int , G4double >* >* > FissionProductYieldData; - std::map< G4int , std::map< G4double , G4int >* > mMTInterpolation; + private: + G4HadFinalState* ApplyYourself(const G4HadProjectile&) override { return nullptr; } + // MT Energy FPS Yield + std::map*>*> FissionProductYieldData; + std::map*> mMTInterpolation; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFSFissionFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFSFissionFS.hh index 7c110efbb05..a4463eca0a4 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFSFissionFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFSFissionFS.hh @@ -29,89 +29,76 @@ #ifndef G4ParticleHPFSFissionFS_h #define G4ParticleHPFSFissionFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" +#include "G4Cache.hh" #include "G4DynamicParticleVector.hh" +#include "G4HadProjectile.hh" +#include "G4ParticleHPAngular.hh" +#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPFinalState.hh" +#include "G4ParticleHPFissionERelease.hh" #include "G4ParticleHPNames.hh" #include "G4ParticleHPParticleYield.hh" -#include "G4ParticleHPVector.hh" -#include "G4ParticleHPFissionERelease.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPPhotonDist.hh" -#include "G4ParticleHPAngular.hh" -#include "G4Cache.hh" +#include "G4ParticleHPVector.hh" +#include "globals.hh" class G4ParticleHPFSFissionFS : public G4ParticleHPFinalState { - struct toBeCached - { - const G4ReactionProduct* theNeutronRP; - const G4ReactionProduct* theTarget; - toBeCached() : theNeutronRP(0),theTarget(0) {} - }; - -public: - - G4ParticleHPFSFissionFS() { hasXsec = true; } - ~G4ParticleHPFSFissionFS() {} - - void Init (G4double A, G4double Z, G4int M, - G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - - G4DynamicParticleVector * ApplyYourself(G4int Prompt, G4int delayed, - G4double *decayconst); - - G4ParticleHPFinalState* New() - { - G4ParticleHPFSFissionFS * theNew = new G4ParticleHPFSFissionFS; - return theNew; - } - - inline G4double GetMass() - { - return theFinalStateNeutrons.GetTargetMass(); - } - - void SampleNeutronMult(G4int&all, - G4int&Prompt, - G4int&delayed, - G4double energy, - G4int off); - - inline void SetNeutronRP(const G4ReactionProduct & aNeutron) - { - fCache.Get().theNeutronRP = &aNeutron; - theNeutronAngularDis.SetProjectileRP(aNeutron); - } - - inline void SetTarget(const G4ReactionProduct & aTarget) - { - fCache.Get().theTarget = &aTarget; - theNeutronAngularDis.SetTarget(aTarget); - } - - G4DynamicParticleVector * GetPhotons(); - - inline G4ParticleHPFissionERelease * GetEnergyRelease() - { - return &theEnergyRelease; - } - -private: - - G4HadFinalState * ApplyYourself(const G4HadProjectile & ) { return 0; } - - G4ParticleHPParticleYield theFinalStateNeutrons; - G4ParticleHPEnergyDistribution thePromptNeutronEnDis; - G4ParticleHPEnergyDistribution theDelayedNeutronEnDis; - G4ParticleHPAngular theNeutronAngularDis; - - G4ParticleHPPhotonDist theFinalStatePhotons; - G4ParticleHPFissionERelease theEnergyRelease; - - G4Cache fCache; - G4ParticleHPNames theNames; + struct toBeCached + { + const G4ReactionProduct* theNeutronRP{nullptr}; + const G4ReactionProduct* theTarget{nullptr}; + toBeCached() = default; + }; + + public: + G4ParticleHPFSFissionFS() { hasXsec = true; } + ~G4ParticleHPFSFissionFS() override = default; + + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + + G4DynamicParticleVector* ApplyYourself(G4int Prompt, G4int delayed, G4double* decayconst); + + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPFSFissionFS; + return theNew; + } + + inline G4double GetMass() { return theFinalStateNeutrons.GetTargetMass(); } + + void SampleNeutronMult(G4int& all, G4int& Prompt, G4int& delayed, G4double energy, G4int off); + + inline void SetNeutronRP(const G4ReactionProduct& aNeutron) + { + fCache.Get().theNeutronRP = &aNeutron; + theNeutronAngularDis.SetProjectileRP(aNeutron); + } + + inline void SetTarget(const G4ReactionProduct& aTarget) + { + fCache.Get().theTarget = &aTarget; + theNeutronAngularDis.SetTarget(aTarget); + } + + G4DynamicParticleVector* GetPhotons(); + + inline G4ParticleHPFissionERelease* GetEnergyRelease() { return &theEnergyRelease; } + + private: + G4HadFinalState* ApplyYourself(const G4HadProjectile&) override { return nullptr; } + + G4ParticleHPParticleYield theFinalStateNeutrons; + G4ParticleHPEnergyDistribution thePromptNeutronEnDis; + G4ParticleHPEnergyDistribution theDelayedNeutronEnDis; + G4ParticleHPAngular theNeutronAngularDis; + + G4ParticleHPPhotonDist theFinalStatePhotons; + G4ParticleHPFissionERelease theEnergyRelease; + + G4Cache fCache; + G4ParticleHPNames theNames; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFastLegendre.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFastLegendre.hh index fcbe651bd39..419fcab6f73 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFastLegendre.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFastLegendre.hh @@ -34,206 +34,202 @@ class G4ParticleHPFastLegendre { public: - - G4ParticleHPFastLegendre() - { - value = new const G4double * [31]; - value[0] = l0; - value[1] = l1; - value[2] = l2; - value[3] = l3; - value[4] = l4; - value[5] = l5; - value[6] = l6; - value[7] = l7; - value[8] = l8; - value[9] = l9; - value[10] = l10; - value[11] = l11; - value[12] = l12; - value[13] = l13; - value[14] = l14; - value[15] = l15; - value[16] = l16; - value[17] = l17; - value[18] = l18; - value[19] = l19; - value[20] = l20; - value[21] = l21; - value[22] = l22; - value[23] = l23; - value[24] = l24; - value[25] = l25; - value[26] = l26; - value[27] = l27; - value[28] = l28; - value[29] = l29; - value[30] = l30; - integral = new const G4double * [31]; - integral[0] = i0; - integral[1] = i1; - integral[2] = i2; - integral[3] = i3; - integral[4] = i4; - integral[5] = i5; - integral[6] = i6; - integral[7] = i7; - integral[8] = i8; - integral[9] = i9; - integral[10] = i10; - integral[11] = i11; - integral[12] = i12; - integral[13] = i13; - integral[14] = i14; - integral[15] = i15; - integral[16] = i16; - integral[17] = i17; - integral[18] = i18; - integral[19] = i19; - integral[20] = i20; - integral[21] = i21; - integral[22] = i22; - integral[23] = i23; - integral[24] = i24; - integral[25] = i25; - integral[26] = i26; - integral[27] = i27; - integral[28] = i28; - integral[29] = i29; - integral[30] = i30; - - G4int i; - for(i=0;i<31;i++) theNbin[i]=1+200*(i+1); - } - - ~G4ParticleHPFastLegendre() - { - delete [] value; - delete [] integral; - } - - G4double Integrate(G4int l, G4double costh) - { - if(l>30) return regularIntegrate(l,costh); - G4int bin = GetBin(l, costh); - G4double y1, y2; -// G4cout <<"Testhpw G4ParticleHPFastLegendre::Integrate "<30) return regularEvaluate(l,costh); - G4double result; - G4int bin = GetBin(l, costh); - if(bin != theNbin[l]-1) + G4ParticleHPFastLegendre() { + value = new const G4double*[31]; + value[0] = l0; + value[1] = l1; + value[2] = l2; + value[3] = l3; + value[4] = l4; + value[5] = l5; + value[6] = l6; + value[7] = l7; + value[8] = l8; + value[9] = l9; + value[10] = l10; + value[11] = l11; + value[12] = l12; + value[13] = l13; + value[14] = l14; + value[15] = l15; + value[16] = l16; + value[17] = l17; + value[18] = l18; + value[19] = l19; + value[20] = l20; + value[21] = l21; + value[22] = l22; + value[23] = l23; + value[24] = l24; + value[25] = l25; + value[26] = l26; + value[27] = l27; + value[28] = l28; + value[29] = l29; + value[30] = l30; + integral = new const G4double*[31]; + integral[0] = i0; + integral[1] = i1; + integral[2] = i2; + integral[3] = i3; + integral[4] = i4; + integral[5] = i5; + integral[6] = i6; + integral[7] = i7; + integral[8] = i8; + integral[9] = i9; + integral[10] = i10; + integral[11] = i11; + integral[12] = i12; + integral[13] = i13; + integral[14] = i14; + integral[15] = i15; + integral[16] = i16; + integral[17] = i17; + integral[18] = i18; + integral[19] = i19; + integral[20] = i20; + integral[21] = i21; + integral[22] = i22; + integral[23] = i23; + integral[24] = i24; + integral[25] = i25; + integral[26] = i26; + integral[27] = i27; + integral[28] = i28; + integral[29] = i29; + integral[30] = i30; + + G4int i; + for (i = 0; i < 31; i++) + theNbin[i] = 1 + 200 * (i + 1); + } + + ~G4ParticleHPFastLegendre() + { + delete[] value; + delete[] integral; + } + + G4double Integrate(G4int l, G4double costh) + { + if (l > 30) return regularIntegrate(l, costh); + G4int bin = GetBin(l, costh); G4double y1, y2; - y1 = value[l][bin]; - y2 = value[l][bin+1]; - result = Interpolate(bin, l, y1, y2, costh); + // G4cout <<"Testhpw G4ParticleHPFastLegendre::Integrate "< 30) return regularEvaluate(l, costh); + G4double result; + G4int bin = GetBin(l, costh); + if (bin != theNbin[l] - 1) { + G4double y1, y2; + y1 = value[l][bin]; + y2 = value[l][bin + 1]; + result = Interpolate(bin, l, y1, y2, costh); + } + else { + result = value[l][bin]; + } + return result; } - return result; - } private: + G4double regularEvaluate(int l, double x); + G4double regularIntegrate(int l, double x); + + inline G4int GetBin(G4int l, G4double costh) + { + G4int bin = 0; + bin = G4int((theNbin[l] - 1) * (costh + 1) / 2.); + if (bin == theNbin[l] - 1) bin--; + return bin; + } - G4double regularEvaluate( int l , double x ); - G4double regularIntegrate( int l , double x ); + inline G4double Interpolate(G4int bin, G4int l, G4double y1, G4double y2, G4double x) + { + G4double slope = 0, off = 0, x2 = 0, x1mx2; + G4int half = (theNbin[l] - 1) / 2; + // x1 = (bin-half)/G4double(half); + x2 = (bin + 1 - half) / G4double(half); + x1mx2 = 1. / G4double((theNbin[l] - 1) / 2); + // slope = (y2-y1)/(x2-x1); + slope = (y2 - y1) / x1mx2; + off = y2 - x2 * slope; + return x * slope + off; + } - - inline G4int GetBin(G4int l, G4double costh) - { - G4int bin=0; - bin = G4int( (theNbin[l]-1)*(costh+1)/2. ); - if(bin == theNbin[l]-1) bin--; - return bin; - } - - inline G4double Interpolate(G4int bin, G4int l, G4double y1, G4double y2, G4double x) - { - G4double slope = 0, off = 0, x2=0, x1mx2; - G4int half = (theNbin[l]-1)/2; -// x1 = (bin-half)/G4double(half); - x2 = (bin+1-half)/G4double(half); - x1mx2 = 1./G4double( (theNbin[l]-1)/2 ); -// slope = (y2-y1)/(x2-x1); - slope = (y2-y1)/x1mx2; - off = y2-x2*slope; - return x*slope+off; - } - - const G4double ** value; - const G4double ** integral; - G4int theNbin[31]; - static const G4double l0[201]; - static const G4double i0[201]; - static const G4double l1[401]; - static const G4double i1[401]; - static const G4double l2[601]; - static const G4double i2[601]; - static const G4double l3[801]; - static const G4double i3[801]; - static const G4double l4[1001]; - static const G4double i4[1001]; - static const G4double l5[1201]; - static const G4double i5[1201]; - static const G4double l6[1401]; - static const G4double i6[1401]; - static const G4double l7[1601]; - static const G4double i7[1601]; - static const G4double l8[1801]; - static const G4double i8[1801]; - static const G4double l9[2001]; - static const G4double i9[2001]; - static const G4double l10[2201]; - static const G4double i10[2201]; - static const G4double l11[2401]; - static const G4double i11[2401]; - static const G4double l12[2601]; - static const G4double i12[2601]; - static const G4double l13[2801]; - static const G4double i13[2801]; - static const G4double l14[3001]; - static const G4double i14[3001]; - static const G4double l15[3201]; - static const G4double i15[3201]; - static const G4double l16[3401]; - static const G4double i16[3401]; - static const G4double l17[3601]; - static const G4double i17[3601]; - static const G4double l18[3801]; - static const G4double i18[3801]; - static const G4double l19[4001]; - static const G4double i19[4001]; - static const G4double l20[4201]; - static const G4double i20[4201]; - static const G4double l21[4401]; - static const G4double i21[4401]; - static const G4double l22[4601]; - static const G4double i22[4601]; - static const G4double l23[4801]; - static const G4double i23[4801]; - static const G4double l24[5001]; - static const G4double i24[5001]; - static const G4double l25[5201]; - static const G4double i25[5201]; - static const G4double l26[5401]; - static const G4double i26[5401]; - static const G4double l27[5601]; - static const G4double i27[5601]; - static const G4double l28[5801]; - static const G4double i28[5801]; - static const G4double l29[6001]; - static const G4double i29[6001]; - static const G4double l30[6201]; - static const G4double i30[6201]; + const G4double** value; + const G4double** integral; + G4int theNbin[31]; + static const G4double l0[201]; + static const G4double i0[201]; + static const G4double l1[401]; + static const G4double i1[401]; + static const G4double l2[601]; + static const G4double i2[601]; + static const G4double l3[801]; + static const G4double i3[801]; + static const G4double l4[1001]; + static const G4double i4[1001]; + static const G4double l5[1201]; + static const G4double i5[1201]; + static const G4double l6[1401]; + static const G4double i6[1401]; + static const G4double l7[1601]; + static const G4double i7[1601]; + static const G4double l8[1801]; + static const G4double i8[1801]; + static const G4double l9[2001]; + static const G4double i9[2001]; + static const G4double l10[2201]; + static const G4double i10[2201]; + static const G4double l11[2401]; + static const G4double i11[2401]; + static const G4double l12[2601]; + static const G4double i12[2601]; + static const G4double l13[2801]; + static const G4double i13[2801]; + static const G4double l14[3001]; + static const G4double i14[3001]; + static const G4double l15[3201]; + static const G4double i15[3201]; + static const G4double l16[3401]; + static const G4double i16[3401]; + static const G4double l17[3601]; + static const G4double i17[3601]; + static const G4double l18[3801]; + static const G4double i18[3801]; + static const G4double l19[4001]; + static const G4double i19[4001]; + static const G4double l20[4201]; + static const G4double i20[4201]; + static const G4double l21[4401]; + static const G4double i21[4401]; + static const G4double l22[4601]; + static const G4double i22[4601]; + static const G4double l23[4801]; + static const G4double i23[4801]; + static const G4double l24[5001]; + static const G4double i24[5001]; + static const G4double l25[5201]; + static const G4double i25[5201]; + static const G4double l26[5401]; + static const G4double i26[5401]; + static const G4double l27[5601]; + static const G4double i27[5601]; + static const G4double l28[5801]; + static const G4double i28[5801]; + static const G4double l29[6001]; + static const G4double i29[6001]; + static const G4double l30[6201]; + static const G4double i30[6201]; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPField.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPField.hh index 1cfb0c07c2f..13934c99bb4 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPField.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPField.hh @@ -35,54 +35,52 @@ class G4ParticleHPField { public: - - G4ParticleHPField(); - - ~G4ParticleHPField(); - - inline void InitY(G4int i, G4int n) - { - Check(i); - theData[i].InitY(n); - } - inline void SetData(G4int i, G4double x, G4int j, G4double y) - { - Check(i); - theData[i].SetData(x, j, y); - } - inline void SetEnergy(G4int i, G4double e) - { - Check(i); - theData[i].SetX(e); - } - inline void SetX(G4int i, G4double e) - { - Check(i); - theData[i].SetX(e); - } - inline void SetY(G4int i, G4int j, G4double x) - { - Check(i); - theData[i].SetY(j, x); - } - inline G4double GetEnergy(G4int i) { return theData[i].GetX(); } - inline G4double GetX(G4int i) { return theData[i].GetX(); } - inline G4double GetY(G4int i, G4int j) { return theData[i].GetY(j); } - inline G4ParticleHPFieldPoint & GetPoint(G4int i) { return theData[i]; } - - G4double GetY(G4double e, G4int j); + G4ParticleHPField(); - inline G4int GetFieldLength() {return nEntries;} + ~G4ParticleHPField(); - void Dump(); + inline void InitY(G4int i, G4int n) + { + Check(i); + theData[i].InitY(n); + } + inline void SetData(G4int i, G4double x, G4int j, G4double y) + { + Check(i); + theData[i].SetData(x, j, y); + } + inline void SetEnergy(G4int i, G4double e) + { + Check(i); + theData[i].SetX(e); + } + inline void SetX(G4int i, G4double e) + { + Check(i); + theData[i].SetX(e); + } + inline void SetY(G4int i, G4int j, G4double x) + { + Check(i); + theData[i].SetY(j, x); + } + inline G4double GetEnergy(G4int i) { return theData[i].GetX(); } + inline G4double GetX(G4int i) { return theData[i].GetX(); } + inline G4double GetY(G4int i, G4int j) { return theData[i].GetY(j); } + inline G4ParticleHPFieldPoint& GetPoint(G4int i) { return theData[i]; } + + G4double GetY(G4double e, G4int j); + + inline G4int GetFieldLength() { return nEntries; } + + void Dump(); private: - - void Check(G4int i); - - G4ParticleHPFieldPoint * theData; - G4int nEntries; - G4int nPoints; + void Check(G4int i); + + G4ParticleHPFieldPoint* theData; + G4int nEntries; + G4int nPoints; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFieldPoint.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFieldPoint.hh index 50f129f3d6a..66f0f419cc4 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFieldPoint.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFieldPoint.hh @@ -34,36 +34,38 @@ class G4ParticleHPFieldPoint { public: - - G4ParticleHPFieldPoint() - { - X = 0; - nP = 0; - Y = 0; - } - - G4ParticleHPFieldPoint(G4int n); - - void operator= (const G4ParticleHPFieldPoint & aSet); + G4ParticleHPFieldPoint() + { + X = 0; + nP = 0; + Y = nullptr; + } - ~G4ParticleHPFieldPoint(); - - void InitY(G4int n); + G4ParticleHPFieldPoint(G4int n); + + void operator=(const G4ParticleHPFieldPoint& aSet); + + ~G4ParticleHPFieldPoint(); + + void InitY(G4int n); + + inline G4int GetDepth() const { return nP; } + inline G4double GetX() const { return X; } + inline G4double GetY(G4int i) const { return Y[i]; } + + inline void SetX(G4double e) { X = e; } + inline void SetY(G4int i, G4double x) { Y[i] = x; } + + inline void SetData(G4double e, G4int i, G4double x) + { + X = e; + Y[i] = x; + } - inline G4int GetDepth() const {return nP;} - inline G4double GetX() const {return X;} - inline G4double GetY(G4int i) const {return Y[i];} - - inline void SetX(G4double e) {X = e;} - inline void SetY(G4int i, G4double x) {Y[i] = x;} - - inline void SetData(G4double e, G4int i, G4double x) {X = e; Y[i] = x;} - private: - - G4double X; - G4double * Y; - G4int nP; + G4double X; + G4double* Y; + G4int nP; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFinalState.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFinalState.hh index c6be85bfd78..8a258f65457 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFinalState.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFinalState.hh @@ -24,7 +24,7 @@ // ******************************************************************** // // -// 080721 Create adjust_final_state method by T. Koi +// 080721 Create adjust_final_state method by T. Koi // 080801 Introduce theNDLDataA,Z which has A and Z of NDL data by T. Koi // // P. Arce, June-2014 Conversion neutron_hp to particle_hp @@ -32,102 +32,106 @@ #ifndef G4ParticleHPFinalState_h #define G4ParticleHPFinalState_h -#include "G4ParticleHPManager.hh" -#include "G4Material.hh" +#include "G4Cache.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPNames.hh" -#include "G4ParticleHPVector.hh" #include "G4HadProjectile.hh" +#include "G4Material.hh" #include "G4Neutron.hh" -#include "G4Cache.hh" +#include "G4ParticleHPManager.hh" +#include "G4ParticleHPNames.hh" +#include "G4ParticleHPVector.hh" class G4ParticleDefinition; class G4ParticleHPFinalState { -public: - - G4ParticleHPFinalState() - { - hasFSData = true; - hasXsec = true; - hasAnyData = true; - theBaseZ = 0; - theBaseA = 0; - theBaseM = 0; - - theNDLDataZ = 0; - theNDLDataA = 0; - theNDLDataM = 0; - - theProjectile = G4Neutron::Neutron(); - - theResult.Put( 0 ); - - secID = -1; - } - - virtual ~G4ParticleHPFinalState() - { - if (theResult.Get() != 0) delete theResult.Get(); - } - - void Init (G4double A, G4double Z, G4String & dirName, G4String & aFSType, - G4ParticleDefinition* projectile) - { - G4int M = 0; - Init ( A, Z, M, dirName, aFSType,const_cast(projectile)); - } - virtual void Init (G4double A, G4double Z, G4int M, G4String & dirName, - G4String & aFSType, G4ParticleDefinition* ) = 0; - virtual G4HadFinalState * ApplyYourself(const G4HadProjectile & ) - { - throw G4HadronicException(__FILE__, __LINE__, "G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack) needs implementation"); - return 0; - } - - // this would better be done templating G4ParticleHPChannel..., - // - virtual G4ParticleHPFinalState * New() = 0; - - G4bool HasXsec() { return hasXsec; } - G4bool HasFSData() { return hasFSData; } - G4bool HasAnyData() { return hasAnyData; } - - virtual G4double GetXsec(G4double ) { return 0; } - virtual G4ParticleHPVector * GetXsec() { return 0; } - - void SetA_Z(G4double anA, G4double aZ, G4int aM=0) {theBaseA = anA; theBaseZ = aZ; theBaseM=aM; } - G4double GetZ() { return theBaseZ; } - G4double GetN() { return theBaseA; } - G4double GetA() { return theBaseA; } - G4int GetM() { return theBaseM; } - - void SetAZMs(G4double anA, G4double aZ, G4int aM, G4ParticleHPDataUsed used) - { - theBaseA = anA; theBaseZ = aZ; theBaseM=aM; - theNDLDataA=(G4int)used.GetA(); - theNDLDataZ=(G4int)used.GetZ(); - theNDLDataM=used.GetM(); - } - - void SetProjectile( G4ParticleDefinition* projectile ) - { - theProjectile = projectile; - } - -protected: - - void adjust_final_state ( G4LorentzVector ); - + public: + G4ParticleHPFinalState() + { + hasFSData = true; + hasXsec = true; + hasAnyData = true; + theBaseZ = 0; + theBaseA = 0; + theBaseM = 0; + + theNDLDataZ = 0; + theNDLDataA = 0; + theNDLDataM = 0; + + theProjectile = G4Neutron::Neutron(); + + theResult.Put(nullptr); + + secID = -1; + } + + virtual ~G4ParticleHPFinalState() + { + if (theResult.Get() != nullptr) delete theResult.Get(); + } + + void Init(G4double A, G4double Z, G4String& dirName, G4String& aFSType, + G4ParticleDefinition* projectile) + { + G4int M = 0; + Init(A, Z, M, dirName, aFSType, const_cast(projectile)); + } + virtual void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) = 0; + virtual G4HadFinalState* ApplyYourself(const G4HadProjectile&) + { + throw G4HadronicException( + __FILE__, __LINE__, + "G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack) needs implementation"); + return nullptr; + } + + // this would better be done templating G4ParticleHPChannel..., + // + virtual G4ParticleHPFinalState* New() = 0; + + G4bool HasXsec() { return hasXsec; } + G4bool HasFSData() { return hasFSData; } + G4bool HasAnyData() { return hasAnyData; } + + virtual G4double GetXsec(G4double) { return 0; } + virtual G4ParticleHPVector* GetXsec() { return nullptr; } + + void SetA_Z(G4double anA, G4double aZ, G4int aM = 0) + { + theBaseA = anA; + theBaseZ = aZ; + theBaseM = aM; + } + G4double GetZ() { return theBaseZ; } + G4double GetN() { return theBaseA; } + G4double GetA() { return theBaseA; } + G4int GetM() { return theBaseM; } + + void SetAZMs(G4double anA, G4double aZ, G4int aM, G4ParticleHPDataUsed used) + { + theBaseA = anA; + theBaseZ = aZ; + theBaseM = aM; + theNDLDataA = (G4int)used.GetA(); + theNDLDataZ = (G4int)used.GetZ(); + theNDLDataM = used.GetM(); + } + + void SetProjectile(G4ParticleDefinition* projectile) { theProjectile = projectile; } + + protected: + void adjust_final_state(G4LorentzVector); + G4bool hasXsec; G4bool hasFSData; G4bool hasAnyData; G4ParticleHPNames theNames; - - G4Cache< G4HadFinalState* > theResult; + + G4Cache theResult; G4ParticleDefinition* theProjectile; - + G4double theBaseA; G4double theBaseZ; G4int theBaseM; diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFission.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFission.hh index aa7113ac2de..13325eb7ef9 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFission.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFission.hh @@ -25,55 +25,53 @@ // // // - // Hadronic Process: High Precision low E neutron tracking - // original by H.P. Wellisch, TRIUMF, 14-Feb-97 - // Builds and has the Cross-section data for one material. +// Hadronic Process: High Precision low E neutron tracking +// original by H.P. Wellisch, TRIUMF, 14-Feb-97 +// Builds and has the Cross-section data for one material. // P. Arce, June-2014 Conversion neutron_hp to particle_hp // - + #ifndef G4ParticleHPFission_h #define G4ParticleHPFission_h 1 // Class Description // Final state production model for a high precision (based on evaluated data -// libraries) description of neutron induced fission below 20 MeV; +// libraries) description of neutron induced fission below 20 MeV; // Note that this model (by intent of avoiding the possibility of heating studies) does // not provide the nuclear fragments. // // To be used in your physics list in case you need this physics. -// In this case you want to register an object of this class with +// In this case you want to register an object of this class with // the corresponding process. // Class Description - End -#include "globals.hh" -#include "G4ParticleHPChannel.hh" #include "G4HadronicInteraction.hh" +#include "G4ParticleHPChannel.hh" +#include "globals.hh" class G4ParticleHPFission : public G4HadronicInteraction { - public: - - G4ParticleHPFission(); + public: + G4ParticleHPFission(); - ~G4ParticleHPFission(); - - G4HadFinalState * ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& aTargetNucleus); + ~G4ParticleHPFission() override; - virtual const std::pair GetFatalEnergyCheckLevels() const; + G4HadFinalState* ApplyYourself(const G4HadProjectile& aTrack, + G4Nucleus& aTargetNucleus) override; - public: - G4int GetVerboseLevel() const; - void SetVerboseLevel( G4int ); - void BuildPhysicsTable(const G4ParticleDefinition&); - virtual void ModelDescription(std::ostream& outFile) const; + const std::pair GetFatalEnergyCheckLevels() const override; - private: - - //G4ParticleHPChannel * theFission; - std::vector* theFission; - G4String dirName; - G4int numEle; + public: + G4int GetVerboseLevel() const; + void SetVerboseLevel(G4int); + void BuildPhysicsTable(const G4ParticleDefinition&) override; + void ModelDescription(std::ostream& outFile) const override; + private: + // G4ParticleHPChannel * theFission; + std::vector* theFission{nullptr}; + G4String dirName; + G4int numEle{0}; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionBaseFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionBaseFS.hh index 8f5a144efbd..0389429ac0b 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionBaseFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionBaseFS.hh @@ -29,74 +29,66 @@ #ifndef G4ParticleHPFissionBaseFS_h #define G4ParticleHPFissionBaseFS_h 1 -#include "globals.hh" -#include "G4ReactionProduct.hh" +#include "G4Cache.hh" #include "G4DynamicParticleVector.hh" +#include "G4ParticleHPAngular.hh" +#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPFinalState.hh" #include "G4ParticleHPNames.hh" #include "G4ParticleHPVector.hh" -#include "G4ParticleHPEnergyDistribution.hh" -#include "G4ParticleHPAngular.hh" -#include "G4Cache.hh" +#include "G4ReactionProduct.hh" +#include "globals.hh" class G4ParticleHPFissionBaseFS : public G4ParticleHPFinalState { - struct toBeCached - { - const G4ReactionProduct* theNeutronRP; - const G4ReactionProduct* theTarget; - toBeCached() : theNeutronRP(0),theTarget(0) {} - }; + struct toBeCached + { + const G4ReactionProduct* theNeutronRP{nullptr}; + const G4ReactionProduct* theTarget{nullptr}; + toBeCached() = default; + }; + + public: + G4ParticleHPFissionBaseFS() + { + hasXsec = true; + theXsection = new G4ParticleHPVector; + } + + ~G4ParticleHPFissionBaseFS() override { delete theXsection; } + + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& bit, + G4ParticleDefinition*) override; + + G4DynamicParticleVector* ApplyYourself(G4int Prompt); -public: - - G4ParticleHPFissionBaseFS() - { - hasXsec = true; - theXsection = new G4ParticleHPVector; - } + G4double GetXsec(G4double anEnergy) override + { + return std::max(0., theXsection->GetY(anEnergy)); + } - virtual ~G4ParticleHPFissionBaseFS() - { - delete theXsection; - } + G4ParticleHPVector* GetXsec() override { return theXsection; } - void Init (G4double A, G4double Z, G4int M, - G4String & dirName, G4String & bit, G4ParticleDefinition*); + inline void SetNeutronRP(const G4ReactionProduct& aNeutron) + { + fCache.Get().theNeutronRP = &aNeutron; + theAngularDistribution.SetProjectileRP(aNeutron); + } - G4DynamicParticleVector * ApplyYourself(G4int Prompt); + inline void SetTarget(const G4ReactionProduct& aTarget) + { + fCache.Get().theTarget = &aTarget; + theAngularDistribution.SetTarget(aTarget); + } - virtual G4double GetXsec(G4double anEnergy) - { - return std::max(0., theXsection->GetY(anEnergy)); - } + private: + G4HadFinalState* ApplyYourself(const G4HadProjectile&) override { return nullptr; } - virtual G4ParticleHPVector * GetXsec() - { - return theXsection; - } + G4ParticleHPVector* theXsection; + G4ParticleHPEnergyDistribution theEnergyDistribution; + G4ParticleHPAngular theAngularDistribution; - inline void SetNeutronRP(const G4ReactionProduct & aNeutron) - { - fCache.Get().theNeutronRP = &aNeutron; - theAngularDistribution.SetProjectileRP(aNeutron); - } - - inline void SetTarget(const G4ReactionProduct & aTarget) - { - fCache.Get().theTarget = &aTarget; - theAngularDistribution.SetTarget(aTarget); - } - -private: - - G4HadFinalState * ApplyYourself(const G4HadProjectile & ) {return 0;} - - G4ParticleHPVector * theXsection; - G4ParticleHPEnergyDistribution theEnergyDistribution; - G4ParticleHPAngular theAngularDistribution; - - G4Cache fCache; + G4Cache fCache; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionData.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionData.hh index fe8ad3688e6..337ca95a952 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionData.hh @@ -33,64 +33,58 @@ // Class Description // Cross-section data set for a high precision (based on evaluated data -// libraries) description of neutron induced fission below 20 MeV; +// libraries) description of neutron induced fission below 20 MeV; // To be used in your physics list in case you need this physics. -// In this case you want to register an object of this class with +// In this case you want to register an object of this class with // the corresponding process. // Class Description - End -#include "G4VCrossSectionDataSet.hh" #include "G4DynamicParticle.hh" #include "G4Element.hh" #include "G4ParticleDefinition.hh" #include "G4PhysicsTable.hh" +#include "G4VCrossSectionDataSet.hh" class G4ParticleHPFissionData : public G4VCrossSectionDataSet { - public: - - G4ParticleHPFissionData(); - - ~G4ParticleHPFissionData(); - - G4bool IsIsoApplicable( const G4DynamicParticle* , - G4int /*Z*/ , G4int /*A*/ , - const G4Element* /*elm*/ , - const G4Material* /*mat*/ ); - - G4double GetIsoCrossSection( const G4DynamicParticle* , - G4int /*Z*/ , G4int /*A*/ , - const G4Isotope* /*iso*/ , - const G4Element* /*elm*/ , - const G4Material* /*mat*/ ); - - //G4bool IsApplicable(const G4DynamicParticle*, const G4Element*); - - public: - //G4bool IsZAApplicable( const G4DynamicParticle* , G4double /*ZZ*/, G4double /*AA*/) - //{ return false;} - - G4double GetCrossSection(const G4DynamicParticle*, const G4Element*, G4double aT); - - void BuildPhysicsTable(const G4ParticleDefinition&); - - void DumpPhysicsTable(const G4ParticleDefinition&); - - public: - G4int GetVerboseLevel() const; - void SetVerboseLevel( G4int ); - virtual void CrossSectionDescription(std::ostream&) const; - - private: - - G4PhysicsTable * theCrossSections; - - G4bool instanceOfWorker; - - G4double ke_cache; - G4double xs_cache; - const G4Element* element_cache; - const G4Material* material_cache; + public: + G4ParticleHPFissionData(); + + ~G4ParticleHPFissionData() override; + + G4bool IsIsoApplicable(const G4DynamicParticle*, G4int /*Z*/, G4int /*A*/, + const G4Element* /*elm*/, const G4Material* /*mat*/) override; + + G4double GetIsoCrossSection(const G4DynamicParticle*, G4int /*Z*/, G4int /*A*/, + const G4Isotope* /*iso*/, const G4Element* /*elm*/, + const G4Material* /*mat*/) override; + + // G4bool IsApplicable(const G4DynamicParticle*, const G4Element*); + + public: + // G4bool IsZAApplicable( const G4DynamicParticle* , G4double /*ZZ*/, G4double /*AA*/) + //{ return false;} + + G4double GetCrossSection(const G4DynamicParticle*, const G4Element*, G4double aT); + + void BuildPhysicsTable(const G4ParticleDefinition&) override; + + void DumpPhysicsTable(const G4ParticleDefinition&) override; + + public: + G4int GetVerboseLevel() const; + void SetVerboseLevel(G4int) override; + void CrossSectionDescription(std::ostream&) const override; + + private: + G4PhysicsTable* theCrossSections; + + G4bool instanceOfWorker; + + G4double ke_cache; + G4double xs_cache; + const G4Element* element_cache; + const G4Material* material_cache; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionERelease.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionERelease.hh index c0bbb3be3ed..617115159b5 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionERelease.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionERelease.hh @@ -31,116 +31,92 @@ #ifndef G4ParticleHPFissionERelease_h #define G4ParticleHPFissionERelease_h 1 -#include +#include "G4ios.hh" +#include "globals.hh" + #include -#include "globals.hh" -#include "G4ios.hh" +#include class G4ParticleHPFissionERelease { public: - G4ParticleHPFissionERelease() - : totalEnergy( 0.0 ) - , fragmentKinetic( 0.0 ) - , promptNeutronKinetic( 0.0 ) - , delayedNeutronKinetic( 0.0 ) - , promptGammaEnergy( 0.0 ) - , delayedGammaEnergy( 0.0 ) - , delayedBetaEnergy( 0.0 ) - , neutrinoEnergy( 0.0 ) - , reducedTotalEnergy( 0.0 ) - { - } - ~G4ParticleHPFissionERelease(){} - - inline void Init(std::istream & aDataFile) - { - G4double dummy; - - aDataFile >>dummy - >>fragmentKinetic - >>promptNeutronKinetic - >>delayedNeutronKinetic - >>promptGammaEnergy - >>delayedGammaEnergy - >>delayedBetaEnergy - >>neutrinoEnergy - >>reducedTotalEnergy - >>totalEnergy; - - fragmentKinetic*=CLHEP::eV; - promptNeutronKinetic*=CLHEP::eV; - delayedNeutronKinetic*=CLHEP::eV; - promptGammaEnergy*=CLHEP::eV; - delayedGammaEnergy*=CLHEP::eV; - delayedBetaEnergy*=CLHEP::eV; - neutrinoEnergy*=CLHEP::eV; - reducedTotalEnergy*=CLHEP::eV; - totalEnergy*=CLHEP::eV; - } - - inline G4double GetTotalEnergy(G4double deltaNNeu, G4double anEnergy) - { - G4double result, delta, energy; - energy = anEnergy/CLHEP::eV; - delta = -(1.057*energy - 8.07*deltaNNeu); - result = totalEnergy - delta*CLHEP::eV; - return result; - } - inline G4double GetFragmentKinetic() - { - return fragmentKinetic; - } - inline G4double GetPromptNeutronKinetic(G4double deltaNNeu, G4double anEnergy) - { - G4double result, delta, energy; - energy = anEnergy/CLHEP::eV; - delta = -(1.307*energy - 8.07*deltaNNeu); - result = totalEnergy - delta*CLHEP::eV; - return result; - } - inline G4double GetDelayedNeutronKinetic() - { - return delayedNeutronKinetic; - } - inline G4double GetPromptGammaEnergy() - { - return promptGammaEnergy; - } - inline G4double GetDelayedGammaEnergy(G4double anEnergy) - { - G4double delta = 0.075*anEnergy; - G4double result = delayedGammaEnergy-delta; - return result; - } - inline G4double GetDelayedBetaEnergy(G4double anEnergy) - { - G4double delta = 0.075*anEnergy; - G4double result = delayedBetaEnergy-delta; - return result; - } - inline G4double GetNeutrinoEnergy(G4double anEnergy) - { - G4double delta = 0.1*anEnergy; - G4double result = neutrinoEnergy-delta; - return result; - } - inline G4double GetReducedTotal(G4double deltaNNeu, G4double anEnergy) - { - return GetTotalEnergy(deltaNNeu, anEnergy) - GetNeutrinoEnergy(anEnergy); - } + G4ParticleHPFissionERelease() + + = default; + ~G4ParticleHPFissionERelease() = default; + + inline void Init(std::istream& aDataFile) + { + G4double dummy; + + aDataFile >> dummy >> fragmentKinetic >> promptNeutronKinetic >> delayedNeutronKinetic + >> promptGammaEnergy >> delayedGammaEnergy >> delayedBetaEnergy >> neutrinoEnergy + >> reducedTotalEnergy >> totalEnergy; + + fragmentKinetic *= CLHEP::eV; + promptNeutronKinetic *= CLHEP::eV; + delayedNeutronKinetic *= CLHEP::eV; + promptGammaEnergy *= CLHEP::eV; + delayedGammaEnergy *= CLHEP::eV; + delayedBetaEnergy *= CLHEP::eV; + neutrinoEnergy *= CLHEP::eV; + reducedTotalEnergy *= CLHEP::eV; + totalEnergy *= CLHEP::eV; + } + + inline G4double GetTotalEnergy(G4double deltaNNeu, G4double anEnergy) + { + G4double result, delta, energy; + energy = anEnergy / CLHEP::eV; + delta = -(1.057 * energy - 8.07 * deltaNNeu); + result = totalEnergy - delta * CLHEP::eV; + return result; + } + inline G4double GetFragmentKinetic() { return fragmentKinetic; } + inline G4double GetPromptNeutronKinetic(G4double deltaNNeu, G4double anEnergy) + { + G4double result, delta, energy; + energy = anEnergy / CLHEP::eV; + delta = -(1.307 * energy - 8.07 * deltaNNeu); + result = totalEnergy - delta * CLHEP::eV; + return result; + } + inline G4double GetDelayedNeutronKinetic() { return delayedNeutronKinetic; } + inline G4double GetPromptGammaEnergy() { return promptGammaEnergy; } + inline G4double GetDelayedGammaEnergy(G4double anEnergy) + { + G4double delta = 0.075 * anEnergy; + G4double result = delayedGammaEnergy - delta; + return result; + } + inline G4double GetDelayedBetaEnergy(G4double anEnergy) + { + G4double delta = 0.075 * anEnergy; + G4double result = delayedBetaEnergy - delta; + return result; + } + inline G4double GetNeutrinoEnergy(G4double anEnergy) + { + G4double delta = 0.1 * anEnergy; + G4double result = neutrinoEnergy - delta; + return result; + } + inline G4double GetReducedTotal(G4double deltaNNeu, G4double anEnergy) + { + return GetTotalEnergy(deltaNNeu, anEnergy) - GetNeutrinoEnergy(anEnergy); + } + private: - - G4double totalEnergy; - G4double fragmentKinetic; - G4double promptNeutronKinetic; - G4double delayedNeutronKinetic; - G4double promptGammaEnergy; - G4double delayedGammaEnergy; - G4double delayedBetaEnergy; - G4double neutrinoEnergy; - G4double reducedTotalEnergy; // total - neutrino + G4double totalEnergy{0.0}; + G4double fragmentKinetic{0.0}; + G4double promptNeutronKinetic{0.0}; + G4double delayedNeutronKinetic{0.0}; + G4double promptGammaEnergy{0.0}; + G4double delayedGammaEnergy{0.0}; + G4double delayedBetaEnergy{0.0}; + G4double neutrinoEnergy{0.0}; + G4double reducedTotalEnergy{0.0}; // total - neutrino }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionFS.hh index 82fc0337d62..28f75cb35e9 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionFS.hh @@ -29,43 +29,40 @@ #ifndef G4ParticleHPFissionFS_h #define G4ParticleHPFissionFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" +#include "G4HadProjectile.hh" +#include "G4ParticleHPFCFissionFS.hh" +#include "G4ParticleHPFFFissionFS.hh" +#include "G4ParticleHPFSFissionFS.hh" #include "G4ParticleHPFinalState.hh" +#include "G4ParticleHPLCFissionFS.hh" #include "G4ParticleHPNames.hh" - -#include "G4ParticleHPFCFissionFS.hh" #include "G4ParticleHPSCFissionFS.hh" #include "G4ParticleHPTCFissionFS.hh" -#include "G4ParticleHPLCFissionFS.hh" -#include "G4ParticleHPFSFissionFS.hh" - -#include "G4ParticleHPFFFissionFS.hh" +#include "globals.hh" class G4ParticleHPFissionFS : public G4ParticleHPFinalState { public: - - G4ParticleHPFissionFS(); - ~G4ParticleHPFissionFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* ); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPFissionFS * theNew = new G4ParticleHPFissionFS; - return theNew; - } - + G4ParticleHPFissionFS(); + ~G4ParticleHPFissionFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPFissionFS; + return theNew; + } + private: - - G4ParticleHPFSFissionFS theFS; - G4ParticleHPFCFissionFS theFC; - G4ParticleHPSCFissionFS theSC; - G4ParticleHPTCFissionFS theTC; - G4ParticleHPLCFissionFS theLC; - - G4ParticleHPFFFissionFS theFF; - G4bool produceFissionFragments; + G4ParticleHPFSFissionFS theFS; + G4ParticleHPFCFissionFS theFC; + G4ParticleHPSCFissionFS theSC; + G4ParticleHPTCFissionFS theTC; + G4ParticleHPLCFissionFS theLC; + + G4ParticleHPFFFissionFS theFF; + G4bool produceFissionFragments; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionSpectrum.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionSpectrum.hh index 9bd3f90be7c..172fd76d850 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionSpectrum.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPFissionSpectrum.hh @@ -29,83 +29,75 @@ #ifndef G4ParticleHPFissionSpectrum_h #define G4ParticleHPFissionSpectrum_h 1 -#include -#include - -#include "globals.hh" -#include "G4ios.hh" -#include "Randomize.hh" #include "G4Exp.hh" #include "G4ParticleHPVector.hh" #include "G4VParticleHPEDis.hh" +#include "G4ios.hh" +#include "Randomize.hh" +#include "globals.hh" + +#include + +#include // we will need a List of these .... one per term. class G4ParticleHPFissionSpectrum : public G4VParticleHPEDis { public: - G4ParticleHPFissionSpectrum() - { - expm1 = G4Exp(-1.); - } - ~G4ParticleHPFissionSpectrum() - { - } - - inline void Init(std::istream & aDataFile) - { - theFractionalProb.Init(aDataFile, CLHEP::eV); - theThetaDist.Init(aDataFile, CLHEP::eV); - } - - inline G4double GetFractionalProbability(G4double anEnergy) - { - return theFractionalProb.GetY(anEnergy); - } - - inline G4double Sample(G4double anEnergy) - { - G4double theta = theThetaDist.GetY(anEnergy); - // here we need to sample Maxwells distribution, if - // need be. - G4double result=0., cut; - G4double range =50*CLHEP::MeV; - G4double max = Maxwell((theta*CLHEP::eV)/2., theta); - G4double value; - G4int icounter=0; - G4int icounter_max=1024; - do + G4ParticleHPFissionSpectrum() { expm1 = G4Exp(-1.); } + ~G4ParticleHPFissionSpectrum() override = default; + + inline void Init(std::istream& aDataFile) override + { + theFractionalProb.Init(aDataFile, CLHEP::eV); + theThetaDist.Init(aDataFile, CLHEP::eV); + } + + inline G4double GetFractionalProbability(G4double anEnergy) override + { + return theFractionalProb.GetY(anEnergy); + } + + inline G4double Sample(G4double anEnergy) override { - icounter++; - if ( icounter > icounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; - } - result = range*G4UniformRand(); - value = Maxwell(result, theta); - cut = G4UniformRand(); + G4double theta = theThetaDist.GetY(anEnergy); + // here we need to sample Maxwells distribution, if + // need be. + G4double result = 0., cut; + G4double range = 50 * CLHEP::MeV; + G4double max = Maxwell((theta * CLHEP::eV) / 2., theta); + G4double value; + G4int icounter = 0; + G4int icounter_max = 1024; + do { + icounter++; + if (icounter > icounter_max) { + G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " + << __FILE__ << "." << G4endl; + break; + } + result = range * G4UniformRand(); + value = Maxwell(result, theta); + cut = G4UniformRand(); + } while (cut > value / max); // Loop checking, 11.05.2015, T. Koi + return result; } - while(cut > value/max); // Loop checking, 11.05.2015, T. Koi - return result; - } - + private: - - // this is the function to sample from. - inline G4double Maxwell(G4double anEnergy, G4double theta) - { - G4double result = std::sqrt(anEnergy/CLHEP::eV)*G4Exp(-anEnergy/CLHEP::eV/theta); - return result; - } - + // this is the function to sample from. + inline G4double Maxwell(G4double anEnergy, G4double theta) + { + G4double result = std::sqrt(anEnergy / CLHEP::eV) * G4Exp(-anEnergy / CLHEP::eV / theta); + return result; + } + private: - - G4double expm1; - - G4ParticleHPVector theFractionalProb; - - G4ParticleHPVector theThetaDist; - + G4double expm1; + + G4ParticleHPVector theFractionalProb; + + G4ParticleHPVector theThetaDist; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPHash.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPHash.hh index 5c3d3b1208d..6ef92897a07 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPHash.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPHash.hh @@ -29,114 +29,101 @@ #ifndef G4ParticleHPHash_h #define G4ParticleHPHash_h -#include -#include "globals.hh" #include "G4ParticleHPDataPoint.hh" +#include "globals.hh" + +#include class G4ParticleHPHash { -public: - G4ParticleHPHash() - { - theUpper = 0; - prepared = false; - } - - ~G4ParticleHPHash() - { - if(theUpper) delete theUpper; - } - - G4ParticleHPHash(const G4ParticleHPHash & aHash) - { - theIndex = aHash.theIndex; - theData = aHash.theData; - prepared = aHash.prepared; - if(aHash.theUpper != 0) + public: + G4ParticleHPHash() { - theUpper = new G4ParticleHPHash(*(aHash.theUpper)); + theUpper = nullptr; + prepared = false; } - else - { - theUpper = 0; - } - } - - G4ParticleHPHash & operator = (const G4ParticleHPHash & aHash) - { - if(&aHash != this) + + ~G4ParticleHPHash() { delete theUpper; } + + G4ParticleHPHash(const G4ParticleHPHash& aHash) { theIndex = aHash.theIndex; theData = aHash.theData; - if(aHash.theUpper != 0) - { + prepared = aHash.prepared; + if (aHash.theUpper != nullptr) { theUpper = new G4ParticleHPHash(*(aHash.theUpper)); } - else - { - theUpper = 0; + else { + theUpper = nullptr; } } - return *this; - } - - void Clear() - { - if(theUpper) + + G4ParticleHPHash& operator=(const G4ParticleHPHash& aHash) { - theUpper->Clear(); - delete theUpper; - theUpper = 0; + if (&aHash != this) { + theIndex = aHash.theIndex; + theData = aHash.theData; + if (aHash.theUpper != nullptr) { + theUpper = new G4ParticleHPHash(*(aHash.theUpper)); + } + else { + theUpper = nullptr; + } + } + return *this; } - theIndex.clear(); - theData.clear(); - prepared = false; - } - - G4bool Prepared() const {return prepared;} - inline void SetData(G4int index, G4double x, G4double y) - { - prepared = true; - G4ParticleHPDataPoint aPoint; - aPoint.SetData(x, y); - theData.push_back(aPoint); - theIndex.push_back(index); - if(0 == theData.size()%10 && 0!=theData.size()) + + void Clear() { - if(0 == theUpper) theUpper = new G4ParticleHPHash(); - theUpper->SetData( static_cast(theData.size())-1, x, y); + if (theUpper != nullptr) { + theUpper->Clear(); + delete theUpper; + theUpper = nullptr; + } + theIndex.clear(); + theData.clear(); + prepared = false; } - } - - G4int GetMinIndex(G4double e) const - { - G4int result=-1; - if(theData.size() == 0) return 0; - if(theData[0].GetX()>e) return 0; - - G4int lower=0; - if(theUpper != 0) + + G4bool Prepared() const { return prepared; } + inline void SetData(G4int index, G4double x, G4double y) { - lower = theUpper->GetMinIndex(e); + prepared = true; + G4ParticleHPDataPoint aPoint; + aPoint.SetData(x, y); + theData.push_back(aPoint); + theIndex.push_back(index); + if (0 == theData.size() % 10 && !theData.empty()) { + if (nullptr == theUpper) theUpper = new G4ParticleHPHash(); + theUpper->SetData(static_cast(theData.size()) - 1, x, y); + } } - unsigned int i; - for(i=lower; ie) - { - result = theIndex[i-1]; - break; + G4int result = -1; + if (theData.empty()) return 0; + if (theData[0].GetX() > e) return 0; + + G4int lower = 0; + if (theUpper != nullptr) { + lower = theUpper->GetMinIndex(e); + } + unsigned int i; + for (i = lower; i < theData.size(); i++) { + if (theData[i].GetX() > e) { + result = theIndex[i - 1]; + break; + } } + if (result == -1) result = theIndex[theIndex.size() - 1]; + return result; } - if(result == -1) result = theIndex[theIndex.size()-1]; - return result; - } - -private: - G4bool prepared; - G4ParticleHPHash * theUpper; - std::vector theIndex; - std::vector theData; // the data + private: + G4bool prepared; + G4ParticleHPHash* theUpper; + std::vector theIndex; + std::vector theData; // the data }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPHe3InelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPHe3InelasticFS.hh index 702cc0f138c..a0db83f7bc6 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPHe3InelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPHe3InelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPHe3InelasticFS_h #define G4ParticleHPHe3InelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticCompFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticCompFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPHe3InelasticFS : public G4ParticleHPInelasticCompFS { public: - - G4ParticleHPHe3InelasticFS(); - ~G4ParticleHPHe3InelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPHe3InelasticFS * theNew = new G4ParticleHPHe3InelasticFS; - return theNew; - } - + G4ParticleHPHe3InelasticFS(); + ~G4ParticleHPHe3InelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPHe3InelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInelastic.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInelastic.hh index 4a6d970e789..e3787576e5c 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInelastic.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInelastic.hh @@ -24,9 +24,9 @@ // ******************************************************************** // // - // Hadronic Process: High Precision low E neutron tracking - // original by H.P. Wellisch, TRIUMF, 14-Feb-97 - // Builds and has the Cross-section data for one material. +// Hadronic Process: High Precision low E neutron tracking +// original by H.P. Wellisch, TRIUMF, 14-Feb-97 +// Builds and has the Cross-section data for one material. // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #ifndef G4ParticleHPInelastic_h @@ -34,17 +34,17 @@ // Class Description // Final state production model for a high precision (based on evaluated data -// libraries) description of neutron inelastic scattering below 20 MeV; +// libraries) description of neutron inelastic scattering below 20 MeV; // 36 exclusive final states are consideded. // To be used in your physics list in case you need this physics. -// In this case you want to register an object of this class with +// In this case you want to register an object of this class with // the corresponding process. // Class Description - End -#include "globals.hh" -#include "G4ParticleHPChannel.hh" #include "G4HadronicInteraction.hh" +#include "G4ParticleHPChannel.hh" #include "G4ParticleHPChannelList.hh" +#include "globals.hh" /* #include "G4ParticleHP2AInelasticFS.hh" @@ -88,71 +88,70 @@ class G4ParticleHPInelastic : public G4HadronicInteraction { - public: + public: + G4ParticleHPInelastic(G4ParticleDefinition* projectile = G4Neutron::Neutron(), + const char* name = "NeutronHPInelastic"); - G4ParticleHPInelastic(G4ParticleDefinition* projectile = G4Neutron::Neutron(), const char* name = "NeutronHPInelastic" ); + ~G4ParticleHPInelastic() override; - ~G4ParticleHPInelastic(); - - G4HadFinalState * ApplyYourself(const G4HadProjectile & aTrack, G4Nucleus & aTargetNucleus); - virtual const std::pair GetFatalEnergyCheckLevels() const; + G4HadFinalState* ApplyYourself(const G4HadProjectile& aTrack, + G4Nucleus& aTargetNucleus) override; + const std::pair GetFatalEnergyCheckLevels() const override; public: - G4int GetVerboseLevel() const; - void SetVerboseLevel( G4int ); - void BuildPhysicsTable(const G4ParticleDefinition&); - virtual void ModelDescription(std::ostream& outFile) const; + G4int GetVerboseLevel() const; + void SetVerboseLevel(G4int); + void BuildPhysicsTable(const G4ParticleDefinition&) override; + void ModelDescription(std::ostream& outFile) const override; -protected: - - //G4ParticleHPChannelList * theInelastic; // one List per element - std::vector* theInelastic; // one List per element - G4String dataDirVariable; - G4String dirName; - G4int numEle; + protected: + // G4ParticleHPChannelList * theInelastic; // one List per element + std::vector* theInelastic{nullptr}; // one List per element + G4String dataDirVariable; + G4String dirName; + G4int numEle{0}; private: - /* - G4ParticleHP2AInelasticFS the2AFS; - G4ParticleHP2N2AInelasticFS the2N2AFS; - G4ParticleHP2NAInelasticFS the2NAFS; - G4ParticleHP2NDInelasticFS the2NDFS; - G4ParticleHP2NInelasticFS the2NFS; - G4ParticleHP2NPInelasticFS the2NPFS; - G4ParticleHP2PInelasticFS the2PFS; - G4ParticleHP3AInelasticFS the3AFS; - G4ParticleHP3NAInelasticFS the3NAFS; - G4ParticleHP3NInelasticFS the3NFS; - G4ParticleHP3NPInelasticFS the3NPFS; - G4ParticleHP4NInelasticFS the4NFS; - G4ParticleHPAInelasticFS theAFS; - G4ParticleHPD2AInelasticFS theD2AFS; - G4ParticleHPDAInelasticFS theDAFS; - G4ParticleHPDInelasticFS theDFS; - G4ParticleHPHe3InelasticFS theHe3FS; - G4ParticleHPN2AInelasticFS theN2AFS; - G4ParticleHPN2PInelasticFS theN2PFS; - G4ParticleHPN3AInelasticFS theN3AFS; - G4ParticleHPNAInelasticFS theNAFS; - G4ParticleHPND2AInelasticFS theND2AFS; - G4ParticleHPNDInelasticFS theNDFS; - G4ParticleHPNHe3InelasticFS theNHe3FS; - G4ParticleHPNInelasticFS theNFS; - G4ParticleHPNPAInelasticFS theNPAFS; - G4ParticleHPNPInelasticFS theNPFS; - G4ParticleHPNT2AInelasticFS theNT2AFS; - G4ParticleHPNTInelasticFS theNTFS; - G4ParticleHPNXInelasticFS theNXFS; - G4ParticleHPPAInelasticFS thePAFS; - G4ParticleHPPDInelasticFS thePDFS; - G4ParticleHPPInelasticFS thePFS; - G4ParticleHPPTInelasticFS thePTFS; - G4ParticleHPT2AInelasticFS theT2AFS; - G4ParticleHPTInelasticFS theTFS; -*/ - - G4ParticleDefinition* theProjectile; + /* + G4ParticleHP2AInelasticFS the2AFS; + G4ParticleHP2N2AInelasticFS the2N2AFS; + G4ParticleHP2NAInelasticFS the2NAFS; + G4ParticleHP2NDInelasticFS the2NDFS; + G4ParticleHP2NInelasticFS the2NFS; + G4ParticleHP2NPInelasticFS the2NPFS; + G4ParticleHP2PInelasticFS the2PFS; + G4ParticleHP3AInelasticFS the3AFS; + G4ParticleHP3NAInelasticFS the3NAFS; + G4ParticleHP3NInelasticFS the3NFS; + G4ParticleHP3NPInelasticFS the3NPFS; + G4ParticleHP4NInelasticFS the4NFS; + G4ParticleHPAInelasticFS theAFS; + G4ParticleHPD2AInelasticFS theD2AFS; + G4ParticleHPDAInelasticFS theDAFS; + G4ParticleHPDInelasticFS theDFS; + G4ParticleHPHe3InelasticFS theHe3FS; + G4ParticleHPN2AInelasticFS theN2AFS; + G4ParticleHPN2PInelasticFS theN2PFS; + G4ParticleHPN3AInelasticFS theN3AFS; + G4ParticleHPNAInelasticFS theNAFS; + G4ParticleHPND2AInelasticFS theND2AFS; + G4ParticleHPNDInelasticFS theNDFS; + G4ParticleHPNHe3InelasticFS theNHe3FS; + G4ParticleHPNInelasticFS theNFS; + G4ParticleHPNPAInelasticFS theNPAFS; + G4ParticleHPNPInelasticFS theNPFS; + G4ParticleHPNT2AInelasticFS theNT2AFS; + G4ParticleHPNTInelasticFS theNTFS; + G4ParticleHPNXInelasticFS theNXFS; + G4ParticleHPPAInelasticFS thePAFS; + G4ParticleHPPDInelasticFS thePDFS; + G4ParticleHPPInelasticFS thePFS; + G4ParticleHPPTInelasticFS thePTFS; + G4ParticleHPT2AInelasticFS theT2AFS; + G4ParticleHPTInelasticFS theTFS; + */ + G4ParticleDefinition* theProjectile; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInelasticBaseFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInelasticBaseFS.hh index 6f38bd72599..65a199194a2 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInelasticBaseFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInelasticBaseFS.hh @@ -48,41 +48,41 @@ class G4ParticleHPInelasticBaseFS : public G4ParticleHPFinalState hasXsec = true; theXsection = new G4ParticleHPVector; - theEnergyDistribution = 0; - theFinalStatePhotons = 0; - theEnergyAngData = 0; - theAngularDistribution = 0; + theEnergyDistribution = nullptr; + theFinalStatePhotons = nullptr; + theEnergyAngData = nullptr; + theAngularDistribution = nullptr; theNuclearMassDifference = 0.0; Qvalue = 0.0; } - virtual ~G4ParticleHPInelasticBaseFS() + ~G4ParticleHPInelasticBaseFS() override { delete theXsection; - if (theEnergyDistribution != 0) delete theEnergyDistribution; - if (theFinalStatePhotons != 0) delete theFinalStatePhotons; - if (theEnergyAngData != 0) delete theEnergyAngData; - if (theAngularDistribution != 0) delete theAngularDistribution; + delete theEnergyDistribution; + delete theFinalStatePhotons; + delete theEnergyAngData; + delete theAngularDistribution; } void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& bit, - G4ParticleDefinition*); + G4ParticleDefinition*) override; void BaseApply(const G4HadProjectile& theTrack, G4ParticleDefinition** theDefs, G4int nDef); void InitGammas(G4double AR, G4double ZR); - virtual G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) = 0; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override = 0; - virtual G4ParticleHPFinalState* New() = 0; + G4ParticleHPFinalState* New() override = 0; - virtual G4double GetXsec(G4double anEnergy) + G4double GetXsec(G4double anEnergy) override { return std::max(0., theXsection->GetY(anEnergy)); } - virtual G4ParticleHPVector* GetXsec() { return theXsection; } + G4ParticleHPVector* GetXsec() override { return theXsection; } protected: G4ParticleHPVector* theXsection; diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInelasticCompFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInelasticCompFS.hh index a48cc485e77..aee7139b42c 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInelasticCompFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInelasticCompFS.hh @@ -55,42 +55,42 @@ class G4ParticleHPInelasticCompFS : public G4ParticleHPFinalState LR.resize(51); for (G4int i = 0; i < 51; i++) { hasXsec = true; - theXsection[i] = 0; - theEnergyDistribution[i] = 0; - theAngularDistribution[i] = 0; - theEnergyAngData[i] = 0; - theFinalStatePhotons[i] = 0; + theXsection[i] = nullptr; + theEnergyDistribution[i] = nullptr; + theAngularDistribution[i] = nullptr; + theEnergyAngData[i] = nullptr; + theFinalStatePhotons[i] = nullptr; QI[i] = 0.0; LR[i] = 0; } } - virtual ~G4ParticleHPInelasticCompFS() + ~G4ParticleHPInelasticCompFS() override { for (G4int i = 0; i < 51; i++) { - if (theXsection[i] != 0) delete theXsection[i]; - if (theEnergyDistribution[i] != 0) delete theEnergyDistribution[i]; - if (theAngularDistribution[i] != 0) delete theAngularDistribution[i]; - if (theEnergyAngData[i] != 0) delete theEnergyAngData[i]; - if (theFinalStatePhotons[i] != 0) delete theFinalStatePhotons[i]; + if (theXsection[i] != nullptr) delete theXsection[i]; + if (theEnergyDistribution[i] != nullptr) delete theEnergyDistribution[i]; + if (theAngularDistribution[i] != nullptr) delete theAngularDistribution[i]; + if (theEnergyAngData[i] != nullptr) delete theEnergyAngData[i]; + if (theFinalStatePhotons[i] != nullptr) delete theFinalStatePhotons[i]; } } void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aSFType, - G4ParticleDefinition*); + G4ParticleDefinition*) override; void InitGammas(G4double AR, G4double ZR); - virtual G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) = 0; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override = 0; - virtual G4ParticleHPFinalState* New() = 0; + G4ParticleHPFinalState* New() override = 0; - virtual G4double GetXsec(G4double anEnergy) + G4double GetXsec(G4double anEnergy) override { return std::max(0., theXsection[50]->GetY(anEnergy)); } - virtual G4ParticleHPVector* GetXsec() { return theXsection[50]; } + G4ParticleHPVector* GetXsec() override { return theXsection[50]; } G4int SelectExitChannel(G4double eKinetic); @@ -99,12 +99,12 @@ class G4ParticleHPInelasticCompFS : public G4ParticleHPFinalState inline void InitDistributionInitialState(G4ReactionProduct& anIncidentPart, G4ReactionProduct& aTarget, G4int it) { - if (theAngularDistribution[it] != 0) { + if (theAngularDistribution[it] != nullptr) { theAngularDistribution[it]->SetTarget(aTarget); theAngularDistribution[it]->SetProjectileRP(anIncidentPart); } - if (theEnergyAngData[it] != 0) { + if (theEnergyAngData[it] != nullptr) { theEnergyAngData[it]->SetTarget(aTarget); theEnergyAngData[it]->SetProjectileRP(anIncidentPart); } diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInelasticData.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInelasticData.hh index bacbff8aaa0..cd9eae81b69 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInelasticData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInelasticData.hh @@ -35,76 +35,71 @@ // Class Description // Cross-section data set for a high precision (based on evaluated data -// libraries) description of neutron inelastic scattering below 20 MeV; +// libraries) description of neutron inelastic scattering below 20 MeV; // To be used in your physics list in case you need this physics. -// In this case you want to register an object of this class with +// In this case you want to register an object of this class with // the corresponding process. // Class Description - End -#include "G4VCrossSectionDataSet.hh" #include "G4DynamicParticle.hh" #include "G4Element.hh" +#include "G4Neutron.hh" #include "G4ParticleDefinition.hh" #include "G4PhysicsTable.hh" -#include "G4Neutron.hh" +#include "G4VCrossSectionDataSet.hh" class G4ParticleHPData; class G4ParticleHPInelasticData : public G4VCrossSectionDataSet { - public: - - G4ParticleHPInelasticData(G4ParticleDefinition* projectile = G4Neutron::Neutron()); - - ~G4ParticleHPInelasticData(); - - G4bool IsIsoApplicable( const G4DynamicParticle* , - G4int /*Z*/ , G4int /*A*/ , - const G4Element* /*elm*/ , - const G4Material* /*mat*/ ); - - G4double GetIsoCrossSection( const G4DynamicParticle* , - G4int /*Z*/ , G4int /*A*/ , - const G4Isotope* /*iso*/ , - const G4Element* /*elm*/ , - const G4Material* /*mat*/ ); - - //G4bool IsApplicable(const G4DynamicParticle*, const G4Element*); ?? - - public: - //G4bool IsZAApplicable( const G4DynamicParticle* , G4double /*ZZ*/, G4double /*AA*/) - //{ return false;} - - G4double GetCrossSection(const G4DynamicParticle*, const G4Element*, G4double aT); - - //void BuildPhysicsTableHP(G4ParticleDefinition* projectile, const char* dataDirVariable); // name it 'HP' to avoid compilation warning because of G4VCrossSectionDataSet's method - void BuildPhysicsTable( const G4ParticleDefinition& ); - - void DumpPhysicsTable(const G4ParticleDefinition&); - - G4ParticleDefinition* GetProjectile(){return theProjectile;} - - public: - G4int GetVerboseLevel() const; - void SetVerboseLevel( G4int ); - virtual void CrossSectionDescription(std::ostream&) const; - - private: - - G4PhysicsTable * theCrossSections; - - G4ParticleDefinition* theProjectile; - - G4ParticleHPData* theHPData; - - G4bool instanceOfWorker; - - G4double ke_cache; - G4double xs_cache; - const G4Element* element_cache; - const G4Material* material_cache; - - //char envVariable[500]; + public: + G4ParticleHPInelasticData(G4ParticleDefinition* projectile = G4Neutron::Neutron()); + + ~G4ParticleHPInelasticData() override; + + G4bool IsIsoApplicable(const G4DynamicParticle*, G4int /*Z*/, G4int /*A*/, + const G4Element* /*elm*/, const G4Material* /*mat*/) override; + + G4double GetIsoCrossSection(const G4DynamicParticle*, G4int /*Z*/, G4int /*A*/, + const G4Isotope* /*iso*/, const G4Element* /*elm*/, + const G4Material* /*mat*/) override; + + // G4bool IsApplicable(const G4DynamicParticle*, const G4Element*); ?? + + public: + // G4bool IsZAApplicable( const G4DynamicParticle* , G4double /*ZZ*/, G4double /*AA*/) + //{ return false;} + + G4double GetCrossSection(const G4DynamicParticle*, const G4Element*, G4double aT); + + // void BuildPhysicsTableHP(G4ParticleDefinition* projectile, const char* dataDirVariable); // + // name it 'HP' to avoid compilation warning because of G4VCrossSectionDataSet's method + void BuildPhysicsTable(const G4ParticleDefinition&) override; + + void DumpPhysicsTable(const G4ParticleDefinition&) override; + + G4ParticleDefinition* GetProjectile() { return theProjectile; } + + public: + G4int GetVerboseLevel() const; + void SetVerboseLevel(G4int) override; + void CrossSectionDescription(std::ostream&) const override; + + private: + G4PhysicsTable* theCrossSections; + + G4ParticleDefinition* theProjectile; + + G4ParticleHPData* theHPData; + + G4bool instanceOfWorker; + + G4double ke_cache; + G4double xs_cache; + const G4Element* element_cache; + const G4Material* material_cache; + + // char envVariable[500]; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInterpolator.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInterpolator.hh index 7852d2f7d90..8ada56bf311 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInterpolator.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPInterpolator.hh @@ -32,73 +32,65 @@ #ifndef G4ParticleHPInterpolator_h #define G4ParticleHPInterpolator_h 1 -#include "globals.hh" -#include "G4InterpolationScheme.hh" -#include "Randomize.hh" -#include "G4ios.hh" #include "G4Exp.hh" -#include "G4Log.hh" #include "G4HadronicException.hh" - +#include "G4InterpolationScheme.hh" +#include "G4Log.hh" +#include "G4ios.hh" +#include "Randomize.hh" +#include "globals.hh" class G4ParticleHPInterpolator { public: - - G4ParticleHPInterpolator(){} - ~G4ParticleHPInterpolator() - { - // G4cout <<"deleted the interpolator"< // #include -#include -#include "G4ParticleHPVector.hh" #include "G4ParticleHPNames.hh" +#include "G4ParticleHPVector.hh" + +#include class G4ParticleDefinition; class G4ParticleHPIsoData { -public: - - G4ParticleHPIsoData() - { - theChannelData = 0; - theFissionData = 0; - theCaptureData = 0; - theElasticData = 0; - theInelasticData = 0; - } - - ~G4ParticleHPIsoData(){if(theChannelData!=0) delete theChannelData;} - - inline G4double GetXsec(G4double energy) - { - return std::max(0., theChannelData->GetXsec(energy)); - } - - //G4bool Init(G4int A, G4int Z, G4double abun, G4String dirName, G4String aFSType); - G4bool Init(G4int A, G4int Z, G4double abun, G4String dirName, G4String aFSType){ G4int M = 0 ; return Init( A, Z, M, abun, dirName, aFSType); }; - G4bool Init(G4int A, G4int Z, G4int M, G4double abun, G4String dirName, G4String aFSType); - - //void Init(G4int A, G4int Z, G4double abun); //fill PhysicsVector for this Isotope - void Init(G4int A, G4int Z, G4double abun, G4ParticleDefinition* projectile, const char* dataDirVariable) { G4int M =0; - Init( A, Z, M, abun, projectile, dataDirVariable ); }; - void Init(G4int A, G4int Z, G4int M, G4double abun, G4ParticleDefinition* projectile, const char* dataDirVariable); //fill PhysicsVector for this Isotope - - inline G4ParticleHPVector * MakeElasticData() - {return theElasticData;} - inline G4ParticleHPVector * MakeFissionData() - {return theFissionData;} - inline G4ParticleHPVector * MakeCaptureData() - {return theCaptureData;} - inline G4ParticleHPVector * MakeInelasticData() - {return theInelasticData;} - inline G4ParticleHPVector * MakeChannelData() - {return theChannelData;} - - G4String GetName(G4int A, G4int Z, G4String base, G4String rest); - - inline void FillChannelData(G4ParticleHPVector * aBuffer) - { - if(theChannelData!=0) throw G4HadronicException(__FILE__, __LINE__, "IsoData has channel full already!!!"); - theChannelData = new G4ParticleHPVector; - for(G4int i=0; iGetVectorLength(); i++) + public: + G4ParticleHPIsoData() { - theChannelData->SetPoint(i, aBuffer->GetPoint(i)); + theChannelData = nullptr; + theFissionData = nullptr; + theCaptureData = nullptr; + theElasticData = nullptr; + theInelasticData = nullptr; } - theChannelData->Hash(); - } - - inline void ThinOut(G4double precision) - { - if(theFissionData) theFissionData->ThinOut(precision); - if(theCaptureData) theCaptureData->ThinOut(precision); - if(theElasticData) theElasticData->ThinOut(precision); - if(theInelasticData) theInelasticData->ThinOut(precision); - } - -private: - - G4ParticleHPVector * theFissionData; - G4ParticleHPVector * theCaptureData; - G4ParticleHPVector * theElasticData; - G4ParticleHPVector * theInelasticData; - G4ParticleHPVector * theChannelData; - - G4String theFileName; - G4ParticleHPNames theNames; + + ~G4ParticleHPIsoData() { delete theChannelData; } + + inline G4double GetXsec(G4double energy) + { + return std::max(0., theChannelData->GetXsec(energy)); + } + + // G4bool Init(G4int A, G4int Z, G4double abun, G4String dirName, G4String aFSType); + G4bool Init(G4int A, G4int Z, G4double abun, G4String dirName, G4String aFSType) + { + G4int M = 0; + return Init(A, Z, M, abun, dirName, aFSType); + }; + G4bool Init(G4int A, G4int Z, G4int M, G4double abun, G4String dirName, G4String aFSType); + + // void Init(G4int A, G4int Z, G4double abun); //fill PhysicsVector for this Isotope + void Init(G4int A, G4int Z, G4double abun, G4ParticleDefinition* projectile, + const char* dataDirVariable) + { + G4int M = 0; + Init(A, Z, M, abun, projectile, dataDirVariable); + }; + void Init(G4int A, G4int Z, G4int M, G4double abun, G4ParticleDefinition* projectile, + const char* dataDirVariable); // fill PhysicsVector for this Isotope + + inline G4ParticleHPVector* MakeElasticData() { return theElasticData; } + inline G4ParticleHPVector* MakeFissionData() { return theFissionData; } + inline G4ParticleHPVector* MakeCaptureData() { return theCaptureData; } + inline G4ParticleHPVector* MakeInelasticData() { return theInelasticData; } + inline G4ParticleHPVector* MakeChannelData() { return theChannelData; } + + G4String GetName(G4int A, G4int Z, G4String base, G4String rest); + + inline void FillChannelData(G4ParticleHPVector* aBuffer) + { + if (theChannelData != nullptr) + throw G4HadronicException(__FILE__, __LINE__, "IsoData has channel full already!!!"); + theChannelData = new G4ParticleHPVector; + for (G4int i = 0; i < aBuffer->GetVectorLength(); i++) { + theChannelData->SetPoint(i, aBuffer->GetPoint(i)); + } + theChannelData->Hash(); + } + + inline void ThinOut(G4double precision) + { + if (theFissionData != nullptr) theFissionData->ThinOut(precision); + if (theCaptureData != nullptr) theCaptureData->ThinOut(precision); + if (theElasticData != nullptr) theElasticData->ThinOut(precision); + if (theInelasticData != nullptr) theInelasticData->ThinOut(precision); + } + + private: + G4ParticleHPVector* theFissionData; + G4ParticleHPVector* theCaptureData; + G4ParticleHPVector* theElasticData; + G4ParticleHPVector* theInelasticData; + G4ParticleHPVector* theChannelData; + + G4String theFileName; + G4ParticleHPNames theNames; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPIsotropic.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPIsotropic.hh index d466ba19050..a4a0db98223 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPIsotropic.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPIsotropic.hh @@ -29,29 +29,25 @@ #ifndef G4ParticleHPIsotropic_h #define G4ParticleHPIsotropic_h 1 -#include "G4ios.hh" -#include -#include "globals.hh" #include "G4ReactionProduct.hh" #include "G4VParticleHPEnergyAngular.hh" +#include "G4ios.hh" +#include "globals.hh" + +#include class G4ParticleHPIsotropic : public G4VParticleHPEnergyAngular { public: - - G4ParticleHPIsotropic(){} - - ~G4ParticleHPIsotropic(){} - + G4ParticleHPIsotropic() = default; + + ~G4ParticleHPIsotropic() override = default; + public: - - void Init(std::istream & aDataFile); - G4ReactionProduct * Sample(G4double anEnergy, G4double massCode, G4double mass); - G4double MeanEnergyOfThisInteraction() - { - return -1.; - } - private: + void Init(std::istream& aDataFile) override; + G4ReactionProduct* Sample(G4double anEnergy, G4double massCode, G4double mass) override; + G4double MeanEnergyOfThisInteraction() override { return -1.; } + private: }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPJENDLHEData.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPJENDLHEData.hh index e1c391786d7..d757e97a23c 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPJENDLHEData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPJENDLHEData.hh @@ -30,57 +30,57 @@ // Class Description // Cross-section data set for a high precision (based on JENDL_HE evaluated data -// libraries) description of elastic scattering 20 MeV ~ 3 GeV; +// libraries) description of elastic scattering 20 MeV ~ 3 GeV; // Class Description - End // 15-Nov-06 First Implementation is done by T. Koi (SLAC/SCCS) // 080422 Add IsZAApplicable method (return false) by T. Koi // -#include "G4VCrossSectionDataSet.hh" #include "G4DynamicParticle.hh" -#include "G4Neutron.hh" #include "G4Element.hh" +#include "G4Neutron.hh" #include "G4ParticleDefinition.hh" #include "G4PhysicsVector.hh" -#include +#include "G4VCrossSectionDataSet.hh" + +#include class G4ParticleHPJENDLHEData : public G4VCrossSectionDataSet { - public: - - G4ParticleHPJENDLHEData(); - G4ParticleHPJENDLHEData( G4String , G4ParticleDefinition* ); + public: + G4ParticleHPJENDLHEData(); + G4ParticleHPJENDLHEData(G4String, G4ParticleDefinition*); + + ~G4ParticleHPJENDLHEData() override; + + G4bool IsApplicable(const G4DynamicParticle*, const G4Element*); - - ~G4ParticleHPJENDLHEData(); - - G4bool IsApplicable(const G4DynamicParticle*, const G4Element*); + G4bool IsZAApplicable(const G4DynamicParticle*, G4double /*ZZ*/, G4double /*AA*/) + { + return false; + } - G4bool IsZAApplicable( const G4DynamicParticle* , G4double /*ZZ*/, G4double /*AA*/) - { return false; } + G4double GetCrossSection(const G4DynamicParticle*, const G4Element*, G4double aT); - G4double GetCrossSection(const G4DynamicParticle*, const G4Element*, G4double aT); + void BuildPhysicsTable(const G4ParticleDefinition&) override; - void BuildPhysicsTable(const G4ParticleDefinition&); + void DumpPhysicsTable(const G4ParticleDefinition&) override; - void DumpPhysicsTable(const G4ParticleDefinition&); - - private: - - std::vector< G4bool > vElement; + private: + std::vector vElement; - std::map< G4int , std::map< G4int , G4PhysicsVector* >* > mIsotope; + std::map*> mIsotope; - G4bool isThisInMap ( G4int , G4int ); - G4bool isThisNewIsotope ( G4int z , G4int a ) { return !( isThisInMap( z , a ) ); }; - G4PhysicsVector* readAFile ( std::fstream* ); - void registAPhysicsVector ( G4int , G4int , G4PhysicsVector* ); + G4bool isThisInMap(G4int, G4int); + G4bool isThisNewIsotope(G4int z, G4int a) { return !(isThisInMap(z, a)); }; + G4PhysicsVector* readAFile(std::fstream*); + void registAPhysicsVector(G4int, G4int, G4PhysicsVector*); - G4double getXSfromThisIsotope ( G4int , G4int , G4double ); + G4double getXSfromThisIsotope(G4int, G4int, G4double); - G4String reactionName; - G4String particleName; + G4String reactionName; + G4String particleName; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPJENDLHEElasticData.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPJENDLHEElasticData.hh index c180418cba6..8f520b7714a 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPJENDLHEElasticData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPJENDLHEElasticData.hh @@ -40,8 +40,8 @@ class G4ParticleHPJENDLHEElasticData : public G4ParticleHPJENDLHEData { - public: - G4ParticleHPJENDLHEElasticData(); + public: + G4ParticleHPJENDLHEElasticData(); }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPJENDLHEInelasticData.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPJENDLHEInelasticData.hh index 8849f3d07e0..f0eb4410715 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPJENDLHEInelasticData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPJENDLHEInelasticData.hh @@ -39,8 +39,8 @@ class G4ParticleHPJENDLHEInelasticData : public G4ParticleHPJENDLHEData { - public: - G4ParticleHPJENDLHEInelasticData(); + public: + G4ParticleHPJENDLHEInelasticData(); }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPKallbachMannSyst.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPKallbachMannSyst.hh index f7973f61c76..27c9317a8b1 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPKallbachMannSyst.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPKallbachMannSyst.hh @@ -36,60 +36,59 @@ class G4ParticleHPKallbachMannSyst { public: - - G4ParticleHPKallbachMannSyst(G4double aCompoundFraction, - G4double anIncidentEnergy, G4double anIncidentMass, - G4double aProductEnergy, G4double aProductMass, - G4double aResidualMass, G4int aResidualA, G4int aResidualZ, - G4double aTargetMass, G4int aTargetA, G4int aTargetZ, - G4int aProjectileA,G4int aProjectileZ,G4int aProductA,G4int aProductZ) - { - theCompoundFraction = aCompoundFraction; - theIncidentEnergy = anIncidentEnergy; - theIncidentMass = anIncidentMass; - theProductEnergy = aProductEnergy; - theProductMass = aProductMass; - theResidualMass = aResidualMass; - theResidualA = aResidualA; - theResidualZ = aResidualZ; - theTargetMass = aTargetMass; - theTargetA = aTargetA; - theTargetZ = aTargetZ; - theProjectileA=aProjectileA; - theProjectileZ=aProjectileZ; - theProductA=aProductA; - theProductZ=aProductZ; - } - - ~G4ParticleHPKallbachMannSyst() {}; - - G4double Sample(G4double anEnergy); - - G4double Kallbach(G4double cosTh, G4double anEnergy); - - G4double GetKallbachZero(G4double anEnergy); - - G4double A(G4double anEnergy); - - G4double SeparationEnergy(G4int Ac, G4int Nc, G4int AA, G4int ZA,G4int Abinding,G4int Zbinding); - + G4ParticleHPKallbachMannSyst(G4double aCompoundFraction, G4double anIncidentEnergy, + G4double anIncidentMass, G4double aProductEnergy, + G4double aProductMass, G4double aResidualMass, G4int aResidualA, + G4int aResidualZ, G4double aTargetMass, G4int aTargetA, + G4int aTargetZ, G4int aProjectileA, G4int aProjectileZ, + G4int aProductA, G4int aProductZ) + { + theCompoundFraction = aCompoundFraction; + theIncidentEnergy = anIncidentEnergy; + theIncidentMass = anIncidentMass; + theProductEnergy = aProductEnergy; + theProductMass = aProductMass; + theResidualMass = aResidualMass; + theResidualA = aResidualA; + theResidualZ = aResidualZ; + theTargetMass = aTargetMass; + theTargetA = aTargetA; + theTargetZ = aTargetZ; + theProjectileA = aProjectileA; + theProjectileZ = aProjectileZ; + theProductA = aProductA; + theProductZ = aProductZ; + } + + ~G4ParticleHPKallbachMannSyst() = default; + + G4double Sample(G4double anEnergy); + + G4double Kallbach(G4double cosTh, G4double anEnergy); + + G4double GetKallbachZero(G4double anEnergy); + + G4double A(G4double anEnergy); + + G4double SeparationEnergy(G4int Ac, G4int Nc, G4int AA, G4int ZA, G4int Abinding, + G4int Zbinding); + private: - - G4double theCompoundFraction; - G4double theIncidentEnergy; - G4double theIncidentMass; - G4double theProductEnergy; - G4double theProductMass; - G4double theResidualMass; - G4double theTargetMass; - G4int theResidualA; - G4int theResidualZ; - G4int theTargetA; - G4int theTargetZ; - G4int theProjectileA; - G4int theProjectileZ; - G4int theProductA; - G4int theProductZ; + G4double theCompoundFraction; + G4double theIncidentEnergy; + G4double theIncidentMass; + G4double theProductEnergy; + G4double theProductMass; + G4double theResidualMass; + G4double theTargetMass; + G4int theResidualA; + G4int theResidualZ; + G4int theTargetA; + G4int theTargetZ; + G4int theProjectileA; + G4int theProjectileZ; + G4int theProductA; + G4int theProductZ; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPLCFissionFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPLCFissionFS.hh index 2ee71510040..42ff1593d93 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPLCFissionFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPLCFissionFS.hh @@ -29,27 +29,26 @@ #ifndef G4ParticleHPLCFissionFS_h #define G4ParticleHPLCFissionFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4DynamicParticleVector.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPFissionBaseFS.hh" +#include "globals.hh" class G4ParticleHPLCFissionFS : public G4ParticleHPFissionBaseFS { public: - - G4ParticleHPLCFissionFS(){ hasXsec = false; } - ~G4ParticleHPLCFissionFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile ); - G4DynamicParticleVector * ApplyYourself(G4int NNeutrons); - G4ParticleHPFinalState * New() - { - G4ParticleHPLCFissionFS * theNew = new G4ParticleHPLCFissionFS; - return theNew; - } - + G4ParticleHPLCFissionFS() { hasXsec = false; } + ~G4ParticleHPLCFissionFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition* projectile) override; + G4DynamicParticleVector* ApplyYourself(G4int NNeutrons); + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPLCFissionFS; + return theNew; + } + private: - G4HadFinalState * ApplyYourself(const G4HadProjectile & ) { return 0; } - + G4HadFinalState* ApplyYourself(const G4HadProjectile&) override { return nullptr; } }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPLabAngularEnergy.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPLabAngularEnergy.hh index 2c4190ece14..a3e0bc6b16f 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPLabAngularEnergy.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPLabAngularEnergy.hh @@ -29,71 +29,64 @@ #ifndef G4ParticleHPLabAngularEnergy_h #define G4ParticleHPLabAngularEnergy_h 1 -#include "G4ios.hh" -#include -#include "globals.hh" +#include "G4InterpolationManager.hh" #include "G4Neutron.hh" #include "G4ParticleHPInterpolator.hh" #include "G4ParticleHPVector.hh" -#include "G4VParticleHPEnergyAngular.hh" #include "G4ReactionProduct.hh" -#include "G4InterpolationManager.hh" +#include "G4VParticleHPEnergyAngular.hh" +#include "G4ios.hh" +#include "globals.hh" + +#include class G4ParticleHPLabAngularEnergy : public G4VParticleHPEnergyAngular { public: - - G4ParticleHPLabAngularEnergy() - { - theEnergies = 0; - theData = 0; - nCosTh = 0; - theSecondManager = 0; - nEnergies = -1; - currentMeanEnergy = -1.0; - } - ~G4ParticleHPLabAngularEnergy() - { - if(theEnergies != 0) delete [] theEnergies; - if(nCosTh != 0) delete [] nCosTh; - if(theData != 0) + G4ParticleHPLabAngularEnergy() + { + theEnergies = nullptr; + theData = nullptr; + nCosTh = nullptr; + theSecondManager = nullptr; + nEnergies = -1; + currentMeanEnergy = -1.0; + } + ~G4ParticleHPLabAngularEnergy() override { - for(G4int i=0; i class G4ParticleHPLegendreStore { public: - - G4ParticleHPLegendreStore(G4int n) - { - theCoeff = new G4ParticleHPLegendreTable[n]; - nEnergy = n; - } - - ~G4ParticleHPLegendreStore() - { - delete [] theCoeff; - } - - inline void Init(G4int i, G4double e, G4int n) - { - theCoeff[i].Init(e, n); - } - inline void SetNPoints(G4int n) { nEnergy = n; } - inline void SetEnergy(G4int i, G4double energy) { theCoeff[i].SetEnergy(energy); } - inline void SetTemperature(G4int i, G4double temp) { theCoeff[i].SetTemperature(temp); } - inline void SetCoeff(G4int i, G4int l, G4double coeff) {theCoeff[i].SetCoeff(l, coeff); } - inline void SetCoeff(G4int i, G4ParticleHPLegendreTable * theTable) - { - if(i>nEnergy) throw G4HadronicException(__FILE__, __LINE__, "LegendreTableIndex out of range"); - theCoeff[i] = *theTable; -// not here -- see G4ParticleHPPhotonDist.cc line 275 -// delete theTable; - } - - inline G4double GetCoeff(G4int i, G4int l) {return theCoeff[i].GetCoeff(l);} - inline G4double GetEnergy(G4int i){return theCoeff[i].GetEnergy();} - inline G4double GetTemperature(G4int i){return theCoeff[i].GetTemperature();} - inline G4int GetNumberOfPoly(G4int i) {return theCoeff[i].GetNumberOfPoly();} - - G4double SampleDiscreteTwoBody (G4double anEnergy); - G4double SampleElastic (G4double anEnergy); - G4double Sample (G4double energy); - G4double SampleMax (G4double energy); - G4double Integrate(G4int k, G4double costh); - - void InitInterpolation(std::istream & aDataFile) - { - theManager.Init(aDataFile); - } - - void SetManager(G4InterpolationManager & aManager) - { - theManager = aManager; - } + G4ParticleHPLegendreStore(G4int n) + { + theCoeff = new G4ParticleHPLegendreTable[n]; + nEnergy = n; + } + + ~G4ParticleHPLegendreStore() { delete[] theCoeff; } + + inline void Init(G4int i, G4double e, G4int n) { theCoeff[i].Init(e, n); } + inline void SetNPoints(G4int n) { nEnergy = n; } + inline void SetEnergy(G4int i, G4double energy) { theCoeff[i].SetEnergy(energy); } + inline void SetTemperature(G4int i, G4double temp) { theCoeff[i].SetTemperature(temp); } + inline void SetCoeff(G4int i, G4int l, G4double coeff) { theCoeff[i].SetCoeff(l, coeff); } + inline void SetCoeff(G4int i, G4ParticleHPLegendreTable* theTable) + { + if (i > nEnergy) + throw G4HadronicException(__FILE__, __LINE__, "LegendreTableIndex out of range"); + theCoeff[i] = *theTable; + // not here -- see G4ParticleHPPhotonDist.cc line 275 + // delete theTable; + } + + inline G4double GetCoeff(G4int i, G4int l) { return theCoeff[i].GetCoeff(l); } + inline G4double GetEnergy(G4int i) { return theCoeff[i].GetEnergy(); } + inline G4double GetTemperature(G4int i) { return theCoeff[i].GetTemperature(); } + inline G4int GetNumberOfPoly(G4int i) { return theCoeff[i].GetNumberOfPoly(); } + + G4double SampleDiscreteTwoBody(G4double anEnergy); + G4double SampleElastic(G4double anEnergy); + G4double Sample(G4double energy); + G4double SampleMax(G4double energy); + G4double Integrate(G4int k, G4double costh); + + void InitInterpolation(std::istream& aDataFile) { theManager.Init(aDataFile); } + + void SetManager(G4InterpolationManager& aManager) { theManager = aManager; } private: - - G4int nEnergy; - G4ParticleHPLegendreTable * theCoeff; - G4InterpolationManager theManager; // interpolate between different Tables + G4int nEnergy; + G4ParticleHPLegendreTable* theCoeff; + G4InterpolationManager theManager; // interpolate between different Tables }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPLegendreTable.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPLegendreTable.hh index bb4cd9ea2c5..aeec0f59d2b 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPLegendreTable.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPLegendreTable.hh @@ -29,86 +29,85 @@ #ifndef G4ParticleHPLegendreTable_h #define G4ParticleHPLegendreTable_h 1 -#include +#include "G4InterpolationManager.hh" +#include "G4ios.hh" +#include "globals.hh" + #include -#include "globals.hh" -#include "G4ios.hh" -#include "G4InterpolationManager.hh" +#include class G4ParticleHPLegendreTable { public: - G4ParticleHPLegendreTable() - { - nCoeff=0; - theCoeff = 0; - theRep = 0; - theEnergy = 0.0; - theTemp = 0.0; - } - ~G4ParticleHPLegendreTable(){if(theCoeff!=0) delete [] theCoeff;} - - void operator= (const G4ParticleHPLegendreTable & aSet) - { - if(&aSet!=this) + G4ParticleHPLegendreTable() { - theRep = aSet.theRep; - theEnergy = aSet.theEnergy; - theTemp = aSet.theTemp; - theManager = aSet.theManager; - nCoeff = aSet.nCoeff; - if(theCoeff!=0) delete [] theCoeff; - theCoeff = new G4double[nCoeff]; - for(G4int i=0; i> eNeu >> nPoly; + eNeu *= CLHEP::eV; + Init(eNeu, nPoly); + for (G4int l = 0; l < nPoly; l++) { + aDataFile >> coeff; + SetCoeff(l + 1, coeff); } } - } - - inline void Init(std::istream & aDataFile) - { - G4double eNeu, coeff; - G4int nPoly; - aDataFile >> eNeu >> nPoly; - eNeu *= CLHEP::eV; - Init(eNeu, nPoly); - for(G4int l=0; l> coeff; - SetCoeff(l+1, coeff); + nCoeff = n + 1; + theCoeff = new G4double[nCoeff]; + for (G4int i = 0; i < nCoeff; i++) + theCoeff[i] = 0; + theCoeff[0] = 1.; + theEnergy = e; + // G4cout << "G4ParticleHPLegendreTable::Init called "< class G4ParticleHPList { public: - - G4ParticleHPList() - { - theData = new G4double[2]; - nPoints=2; - nEntries=0; - theLabel=0.0; - } - - ~G4ParticleHPList() - { - delete [] theData; - } - - inline void SetValue(G4int i, G4double y) - { - Check(i); - theData[i]=y; - } - G4double GetValue(G4int i); - - inline G4int GetListLength() {return nEntries;} + G4ParticleHPList() + { + theData = new G4double[2]; + nPoints = 2; + nEntries = 0; + theLabel = 0.0; + } + + ~G4ParticleHPList() { delete[] theData; } + + inline void SetValue(G4int i, G4double y) + { + Check(i); + theData[i] = y; + } + G4double GetValue(G4int i); - void Dump(); - - void Init(std::istream & aDataFile, G4int nPar, G4double unit=1.); - - void Init(std::istream & aDataFile, G4double unit=1.); + inline G4int GetListLength() { return nEntries; } - inline void SetLabel(G4double aLabel) { theLabel = aLabel; } - - inline G4double GetLabel() { return theLabel; } + void Dump(); + + void Init(std::istream& aDataFile, G4int nPar, G4double unit = 1.); + + void Init(std::istream& aDataFile, G4double unit = 1.); + + inline void SetLabel(G4double aLabel) { theLabel = aLabel; } + + inline G4double GetLabel() { return theLabel; } private: - - void Check(G4int i); - - G4double theLabel; + void Check(G4int i); + + G4double theLabel; - G4double * theData; - G4int nEntries; - G4int nPoints; + G4double* theData; + G4int nEntries; + G4int nPoints; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPMadlandNixSpectrum.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPMadlandNixSpectrum.hh index 8047753cd97..d0c7184a414 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPMadlandNixSpectrum.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPMadlandNixSpectrum.hh @@ -29,132 +29,129 @@ #ifndef G4ParticleHPMadlandNixSpectrum_h #define G4ParticleHPMadlandNixSpectrum_h 1 -#include -#include -#include - -#include "globals.hh" -#include "G4ios.hh" -#include "Randomize.hh" #include "G4Exp.hh" #include "G4Log.hh" -#include "G4Pow.hh" #include "G4ParticleHPVector.hh" +#include "G4Pow.hh" #include "G4VParticleHPEDis.hh" +#include "G4ios.hh" +#include "Randomize.hh" +#include "globals.hh" + +#include + +#include +#include // #include @ // #include @ - // we will need a List of these .... one per term. class G4ParticleHPMadlandNixSpectrum : public G4VParticleHPEDis { public: - G4ParticleHPMadlandNixSpectrum() - { - expm1 = G4Exp(-1.); - theAvarageKineticPerNucleonForLightFragments = 0.0; - theAvarageKineticPerNucleonForHeavyFragments = 0.0; - } - ~G4ParticleHPMadlandNixSpectrum() - { - } - - inline void Init(std::istream & aDataFile) - { - theFractionalProb.Init(aDataFile); - aDataFile>> theAvarageKineticPerNucleonForLightFragments; - theAvarageKineticPerNucleonForLightFragments*=CLHEP::eV; - aDataFile>> theAvarageKineticPerNucleonForHeavyFragments; - theAvarageKineticPerNucleonForHeavyFragments*=CLHEP::eV; - theMaxTemp.Init(aDataFile); - } - - inline G4double GetFractionalProbability(G4double anEnergy) - { - return theFractionalProb.GetY(anEnergy); - } - - G4double Sample(G4double anEnergy); - + G4ParticleHPMadlandNixSpectrum() + { + expm1 = G4Exp(-1.); + theAvarageKineticPerNucleonForLightFragments = 0.0; + theAvarageKineticPerNucleonForHeavyFragments = 0.0; + } + ~G4ParticleHPMadlandNixSpectrum() override = default; + + inline void Init(std::istream& aDataFile) override + { + theFractionalProb.Init(aDataFile); + aDataFile >> theAvarageKineticPerNucleonForLightFragments; + theAvarageKineticPerNucleonForLightFragments *= CLHEP::eV; + aDataFile >> theAvarageKineticPerNucleonForHeavyFragments; + theAvarageKineticPerNucleonForHeavyFragments *= CLHEP::eV; + theMaxTemp.Init(aDataFile); + } + + inline G4double GetFractionalProbability(G4double anEnergy) override + { + return theFractionalProb.GetY(anEnergy); + } + + G4double Sample(G4double anEnergy) override; + private: - - G4double Madland(G4double aSecEnergy, G4double tm); - - inline G4double FissionIntegral(G4double tm, G4double anEnergy) - { - return 0.5*( GIntegral(tm, anEnergy, theAvarageKineticPerNucleonForLightFragments) - +GIntegral(tm, anEnergy, theAvarageKineticPerNucleonForHeavyFragments) ); - } - - G4double GIntegral(G4double tm, G4double anEnergy, G4double aMean); - - inline G4double Gamma05(G4double aValue) - { - G4double result; - // gamma(1.2,x*X) = std::sqrt(CLHEP::pi)*Erf(x) - G4double x = std::sqrt(aValue); - G4double t = 1./(1+0.47047*x); - result = 1- (0.3480242*t - 0.0958798*t*t + 0.7478556*t*t*t)*G4Exp(-aValue); // @ check - result *= std::sqrt(CLHEP::pi); - return result; - } - - inline G4double Gamma15(G4double aValue) - { - G4double result; - // gamma(a+1, x) = a*gamma(a,x)-x**a*std::exp(-x) - result = 0.5*Gamma05(aValue) - std::sqrt(aValue)*G4Exp(-aValue); // @ check - return result; - } - - inline G4double Gamma25(G4double aValue) - { - G4double result; - result = 1.5*Gamma15(aValue) - G4Pow::GetInstance()->powA(aValue,1.5)*G4Exp(aValue); // @ check - return result; - } - - inline G4double E1(G4double aValue) - { - // good only for rather low aValue @@@ replace by the corresponding NAG function for the - // exponential integral. (<5 seems ok. - G4double gamma = 0.577216; - G4double precision = 0.000001; - G4double result =-gamma - G4Log(aValue); - G4double term = -aValue; - //110527TKDB Unnessary codes, Detected by gcc4.6 compiler - //G4double last; - G4int count = 1; - result -= term; - for(;;) + G4double Madland(G4double aSecEnergy, G4double tm); + + inline G4double FissionIntegral(G4double tm, G4double anEnergy) + { + return 0.5 + * (GIntegral(tm, anEnergy, theAvarageKineticPerNucleonForLightFragments) + + GIntegral(tm, anEnergy, theAvarageKineticPerNucleonForHeavyFragments)); + } + + G4double GIntegral(G4double tm, G4double anEnergy, G4double aMean); + + inline G4double Gamma05(G4double aValue) + { + G4double result; + // gamma(1.2,x*X) = std::sqrt(CLHEP::pi)*Erf(x) + G4double x = std::sqrt(aValue); + G4double t = 1. / (1 + 0.47047 * x); + result = + 1 + - (0.3480242 * t - 0.0958798 * t * t + 0.7478556 * t * t * t) * G4Exp(-aValue); // @ check + result *= std::sqrt(CLHEP::pi); + return result; + } + + inline G4double Gamma15(G4double aValue) { - count++; - //110527TKDB Unnessary codes, Detected by gcc4.6 compiler - //last = result; - term = -term*aValue*(count-1)/(count*count); - result -=term; - if(std::fabs(term)/std::fabs(result)powA(aValue, 1.5) * G4Exp(aValue); // @ check + return result; + } + + inline G4double E1(G4double aValue) + { + // good only for rather low aValue @@@ replace by the corresponding NAG function for the + // exponential integral. (<5 seems ok. + G4double gamma = 0.577216; + G4double precision = 0.000001; + G4double result = -gamma - G4Log(aValue); + G4double term = -aValue; + // 110527TKDB Unnessary codes, Detected by gcc4.6 compiler + // G4double last; + G4int count = 1; + result -= term; + for (;;) { + count++; + // 110527TKDB Unnessary codes, Detected by gcc4.6 compiler + // last = result; + term = -term * aValue * (count - 1) / (count * count); + result -= term; + if (std::fabs(term) / std::fabs(result) < precision) break; + } + // NagError *fail; @ + // result = nag_exp_integral(aValue, fail); @ + return result; + } + + private: + G4double expm1; + private: - - G4double expm1; - - private: - - G4ParticleHPVector theFractionalProb; - - G4double theAvarageKineticPerNucleonForLightFragments; - G4double theAvarageKineticPerNucleonForHeavyFragments; - - G4ParticleHPVector theMaxTemp; - + G4ParticleHPVector theFractionalProb; + + G4double theAvarageKineticPerNucleonForLightFragments; + G4double theAvarageKineticPerNucleonForHeavyFragments; + + G4ParticleHPVector theMaxTemp; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPManager.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPManager.hh index c30cff175f7..1b7cc68583d 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPManager.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPManager.hh @@ -30,16 +30,16 @@ #define G4ParticleHPManager_h 1 // Class Description -// Manager of NeutronHP +// Manager of NeutronHP // Class Description - End // 121031 First implementation done by T. Koi (SLAC/PPA) // -#include -#include +#include "G4ParticleHPReactionWhiteBoard.hh" #include "globals.hh" -#include "G4ParticleHPReactionWhiteBoard.hh" +#include +#include class G4ParticleDefinition; class G4ParticleHPChannel; @@ -50,118 +50,198 @@ class G4PhysicsTable; struct E_isoAng; struct E_P_E_isoAng; -class G4ParticleHPManager +class G4ParticleHPManager { - public: - static G4ParticleHPManager* GetInstance(); - - private: - G4ParticleHPManager(); - G4ParticleHPManager( const G4ParticleHPManager& ){}; - ~G4ParticleHPManager(); - static G4ParticleHPManager* instance; - - public: - G4ParticleHPReactionWhiteBoard* GetReactionWhiteBoard(); - void OpenReactionWhiteBoard(); - //void CloseReactionWhiteBoard(){delete RWB; RWB=NULL;}; - void CloseReactionWhiteBoard(); - - void GetDataStream( G4String , std::istringstream& iss ); - void GetDataStream2( G4String , std::istringstream& iss ); - void SetVerboseLevel( G4int i ); - G4int GetVerboseLevel() {return verboseLevel; }; - - void DumpDataSource(); - - G4bool GetUseOnlyPhotoEvaporation() { return USE_ONLY_PHOTONEVAPORATION; }; - G4bool GetSkipMissingIsotopes() { return SKIP_MISSING_ISOTOPES; }; - G4bool GetNeglectDoppler() { return NEGLECT_DOPPLER; }; - G4bool GetDoNotAdjustFinalState() { return DO_NOT_ADJUST_FINAL_STATE; }; - G4bool GetProduceFissionFragments() { return PRODUCE_FISSION_FRAGMENTS; }; - G4bool GetUseWendtFissionModel() { return USE_WENDT_FISSION_MODEL; }; - G4bool GetUseNRESP71Model() { return USE_NRESP71_MODEL; }; - - void SetUseOnlyPhotoEvaporation( G4bool val ) { USE_ONLY_PHOTONEVAPORATION = val; }; - void SetSkipMissingIsotopes( G4bool val ) { SKIP_MISSING_ISOTOPES = val; }; - void SetNeglectDoppler( G4bool val ) { NEGLECT_DOPPLER = val; }; - void SetDoNotAdjustFinalState( G4bool val ) { DO_NOT_ADJUST_FINAL_STATE = val; }; - void SetProduceFissionFragments( G4bool val ) { - // Make sure both fission fragment models are not active at same time - USE_WENDT_FISSION_MODEL ? PRODUCE_FISSION_FRAGMENTS = false : PRODUCE_FISSION_FRAGMENTS = val ; }; - void SetUseWendtFissionModel( G4bool val ) { USE_WENDT_FISSION_MODEL = val; - // Make sure both fission fragment models are not active at same time - if ( USE_WENDT_FISSION_MODEL ) PRODUCE_FISSION_FRAGMENTS = false; }; - void SetUseNRESP71Model( G4bool val ) { USE_NRESP71_MODEL = val; }; - - void DumpSetting(); // Needs to be called somewhere to print out information once per run. - - void RegisterElasticCrossSections( G4PhysicsTable* val ){ theElasticCrossSections = val; }; - G4PhysicsTable* GetElasticCrossSections(){ return theElasticCrossSections; }; - void RegisterCaptureCrossSections( G4PhysicsTable* val ){ theCaptureCrossSections = val; }; - G4PhysicsTable* GetCaptureCrossSections(){ return theCaptureCrossSections; }; - void RegisterInelasticCrossSections( const G4ParticleDefinition* , G4PhysicsTable* ); - G4PhysicsTable* GetInelasticCrossSections(const G4ParticleDefinition* ); - void RegisterFissionCrossSections( G4PhysicsTable* val ){ theFissionCrossSections = val; }; - G4PhysicsTable* GetFissionCrossSections(){ return theFissionCrossSections; }; - - std::vector* GetElasticFinalStates() { return theElasticFSs; }; - void RegisterElasticFinalStates( std::vector* val ) { theElasticFSs = val; }; - std::vector* GetInelasticFinalStates( const G4ParticleDefinition* ); - void RegisterInelasticFinalStates( const G4ParticleDefinition* , std::vector* ); - std::vector* GetCaptureFinalStates() { return theCaptureFSs; }; - void RegisterCaptureFinalStates( std::vector* val ) { theCaptureFSs = val; }; - std::vector* GetFissionFinalStates() { return theFissionFSs; }; - void RegisterFissionFinalStates( std::vector* val ) { theFissionFSs = val; }; - - std::map*>* GetThermalScatteringCoherentCrossSections() { return theTSCoherentCrossSections; }; - void RegisterThermalScatteringCoherentCrossSections( std::map*>* val ) { theTSCoherentCrossSections = val; }; - std::map*>* GetThermalScatteringIncoherentCrossSections() { return theTSIncoherentCrossSections; }; - void RegisterThermalScatteringIncoherentCrossSections( std::map*>* val ) { theTSIncoherentCrossSections = val; }; - std::map*>* GetThermalScatteringInelasticCrossSections() { return theTSInelasticCrossSections; }; - void RegisterThermalScatteringInelasticCrossSections( std::map*>* val ) { theTSInelasticCrossSections = val; }; - - std::map < G4int , std::map < G4double , std::vector < std::pair< G4double , G4double >* >* >* >* GetThermalScatteringCoherentFinalStates(){ return theTSCoherentFinalStates; }; - void RegisterThermalScatteringCoherentFinalStates( std::map < G4int , std::map < G4double , std::vector < std::pair< G4double , G4double >* >* >* >* val ) { theTSCoherentFinalStates = val; }; - std::map < G4int , std::map < G4double , std::vector < E_isoAng* >* >* >* GetThermalScatteringIncoherentFinalStates(){ return theTSIncoherentFinalStates; }; - void RegisterThermalScatteringIncoherentFinalStates( std::map < G4int , std::map < G4double , std::vector < E_isoAng* >* >* >* val ) { theTSIncoherentFinalStates = val; }; - std::map < G4int , std::map < G4double , std::vector < E_P_E_isoAng* >* >* >* GetThermalScatteringInelasticFinalStates(){ return theTSInelasticFinalStates; }; - void RegisterThermalScatteringInelasticFinalStates( std::map < G4int , std::map < G4double , std::vector < E_P_E_isoAng* >* >* >* val ) { theTSInelasticFinalStates = val; }; - - - private: - void register_data_file( G4String , G4String ); - std::map mDataEvaluation; - /*G4ParticleHPReactionWhiteBoard* RWB;*/ - - G4int verboseLevel; - - G4ParticleHPMessenger* messenger; - G4bool USE_ONLY_PHOTONEVAPORATION; - G4bool SKIP_MISSING_ISOTOPES; - G4bool NEGLECT_DOPPLER; - G4bool DO_NOT_ADJUST_FINAL_STATE; - G4bool PRODUCE_FISSION_FRAGMENTS; - G4bool USE_WENDT_FISSION_MODEL; - G4bool USE_NRESP71_MODEL; - - G4PhysicsTable* theElasticCrossSections; - G4PhysicsTable* theCaptureCrossSections; - std::map< const G4ParticleDefinition* , G4PhysicsTable* > theInelasticCrossSections; - G4PhysicsTable* theFissionCrossSections; - - std::vector* theElasticFSs; - std::map< const G4ParticleDefinition* , std::vector* > theInelasticFSs; - std::vector* theCaptureFSs; - std::vector* theFissionFSs; - - std::map< G4int , std::map< G4double , G4ParticleHPVector* >* >* theTSCoherentCrossSections; - std::map< G4int , std::map< G4double , G4ParticleHPVector* >* >* theTSIncoherentCrossSections; - std::map< G4int , std::map< G4double , G4ParticleHPVector* >* >* theTSInelasticCrossSections; - - std::map< G4int , std::map< G4double , std::vector< std::pair< G4double , G4double >* >* >* >* theTSCoherentFinalStates; - std::map< G4int , std::map< G4double , std::vector< E_isoAng* >* >* >* theTSIncoherentFinalStates; - std::map< G4int , std::map< G4double , std::vector< E_P_E_isoAng* >* >* >* theTSInelasticFinalStates; - + public: + static G4ParticleHPManager* GetInstance(); + + private: + G4ParticleHPManager(); + G4ParticleHPManager(const G4ParticleHPManager&){}; + ~G4ParticleHPManager(); + static G4ParticleHPManager* instance; + + public: + G4ParticleHPReactionWhiteBoard* GetReactionWhiteBoard(); + void OpenReactionWhiteBoard(); + // void CloseReactionWhiteBoard(){delete RWB; RWB=NULL;}; + void CloseReactionWhiteBoard(); + + void GetDataStream(G4String, std::istringstream& iss); + void GetDataStream2(G4String, std::istringstream& iss); + void SetVerboseLevel(G4int i); + G4int GetVerboseLevel() { return verboseLevel; }; + + void DumpDataSource(); + + G4bool GetUseOnlyPhotoEvaporation() { return USE_ONLY_PHOTONEVAPORATION; }; + G4bool GetSkipMissingIsotopes() { return SKIP_MISSING_ISOTOPES; }; + G4bool GetNeglectDoppler() { return NEGLECT_DOPPLER; }; + G4bool GetDoNotAdjustFinalState() { return DO_NOT_ADJUST_FINAL_STATE; }; + G4bool GetProduceFissionFragments() { return PRODUCE_FISSION_FRAGMENTS; }; + G4bool GetUseWendtFissionModel() { return USE_WENDT_FISSION_MODEL; }; + G4bool GetUseNRESP71Model() { return USE_NRESP71_MODEL; }; + G4bool GetUseDBRC() { return USE_DBRC; }; + + void SetUseOnlyPhotoEvaporation(G4bool val) { USE_ONLY_PHOTONEVAPORATION = val; }; + void SetSkipMissingIsotopes(G4bool val) { SKIP_MISSING_ISOTOPES = val; }; + void SetNeglectDoppler(G4bool val) { NEGLECT_DOPPLER = val; }; + void SetDoNotAdjustFinalState(G4bool val) { DO_NOT_ADJUST_FINAL_STATE = val; }; + void SetProduceFissionFragments(G4bool val) + { + // Make sure both fission fragment models are not active at same time + USE_WENDT_FISSION_MODEL ? PRODUCE_FISSION_FRAGMENTS = false : PRODUCE_FISSION_FRAGMENTS = val; + }; + void SetUseWendtFissionModel(G4bool val) + { + USE_WENDT_FISSION_MODEL = val; + // Make sure both fission fragment models are not active at same time + if (USE_WENDT_FISSION_MODEL) PRODUCE_FISSION_FRAGMENTS = false; + }; + void SetUseNRESP71Model(G4bool val) { USE_NRESP71_MODEL = val; }; + void SetUseDBRC(G4bool val) { USE_DBRC = val; }; + + void DumpSetting(); // Needs to be called somewhere to print out information once per run. + + void RegisterElasticCrossSections(G4PhysicsTable* val) { theElasticCrossSections = val; }; + G4PhysicsTable* GetElasticCrossSections() { return theElasticCrossSections; }; + void RegisterCaptureCrossSections(G4PhysicsTable* val) { theCaptureCrossSections = val; }; + G4PhysicsTable* GetCaptureCrossSections() { return theCaptureCrossSections; }; + void RegisterInelasticCrossSections(const G4ParticleDefinition*, G4PhysicsTable*); + G4PhysicsTable* GetInelasticCrossSections(const G4ParticleDefinition*); + void RegisterFissionCrossSections(G4PhysicsTable* val) { theFissionCrossSections = val; }; + G4PhysicsTable* GetFissionCrossSections() { return theFissionCrossSections; }; + + std::vector* GetElasticFinalStates() { return theElasticFSs; }; + void RegisterElasticFinalStates(std::vector* val) + { + theElasticFSs = val; + }; + std::vector* GetInelasticFinalStates(const G4ParticleDefinition*); + void RegisterInelasticFinalStates(const G4ParticleDefinition*, + std::vector*); + std::vector* GetCaptureFinalStates() { return theCaptureFSs; }; + void RegisterCaptureFinalStates(std::vector* val) + { + theCaptureFSs = val; + }; + std::vector* GetFissionFinalStates() { return theFissionFSs; }; + void RegisterFissionFinalStates(std::vector* val) + { + theFissionFSs = val; + }; + + std::map*>* + GetThermalScatteringCoherentCrossSections() + { + return theTSCoherentCrossSections; + }; + void RegisterThermalScatteringCoherentCrossSections( + std::map*>* val) + { + theTSCoherentCrossSections = val; + }; + std::map*>* + GetThermalScatteringIncoherentCrossSections() + { + return theTSIncoherentCrossSections; + }; + void RegisterThermalScatteringIncoherentCrossSections( + std::map*>* val) + { + theTSIncoherentCrossSections = val; + }; + std::map*>* + GetThermalScatteringInelasticCrossSections() + { + return theTSInelasticCrossSections; + }; + void RegisterThermalScatteringInelasticCrossSections( + std::map*>* val) + { + theTSInelasticCrossSections = val; + }; + + std::map*>*>*>* + GetThermalScatteringCoherentFinalStates() + { + return theTSCoherentFinalStates; + }; + void RegisterThermalScatteringCoherentFinalStates( + std::map*>*>*>* val) + { + theTSCoherentFinalStates = val; + }; + std::map*>*>* + GetThermalScatteringIncoherentFinalStates() + { + return theTSIncoherentFinalStates; + }; + void RegisterThermalScatteringIncoherentFinalStates( + std::map*>*>* val) + { + theTSIncoherentFinalStates = val; + }; + std::map*>*>* + GetThermalScatteringInelasticFinalStates() + { + return theTSInelasticFinalStates; + }; + void RegisterThermalScatteringInelasticFinalStates( + std::map*>*>* val) + { + theTSInelasticFinalStates = val; + }; + + G4double GetMinADBRC() { return theMinADBRC; }; + G4double GetMinEnergyDBRC() { return theMinEnergyDBRC; }; + G4double GetMaxEnergyDBRC() { return theMaxEnergyDBRC; }; + + void SetMinADBRC(G4double val) { theMinADBRC = val; }; + void SetMinEnergyDBRC(G4double val) { theMinEnergyDBRC = val; }; + void SetMaxEnergyDBRC(G4double val) { theMaxEnergyDBRC = val; }; + + private: + void register_data_file(G4String, G4String); + std::map mDataEvaluation; + /*G4ParticleHPReactionWhiteBoard* RWB;*/ + + G4int verboseLevel{1}; + + G4ParticleHPMessenger* messenger; + G4bool USE_ONLY_PHOTONEVAPORATION{false}; + G4bool SKIP_MISSING_ISOTOPES{false}; + G4bool NEGLECT_DOPPLER{false}; + G4bool DO_NOT_ADJUST_FINAL_STATE{false}; + G4bool PRODUCE_FISSION_FRAGMENTS{false}; + G4bool USE_WENDT_FISSION_MODEL{false}; + G4bool USE_NRESP71_MODEL{false}; + G4bool USE_DBRC{false}; + + G4PhysicsTable* theElasticCrossSections{nullptr}; + G4PhysicsTable* theCaptureCrossSections{nullptr}; + std::map theInelasticCrossSections; + G4PhysicsTable* theFissionCrossSections{nullptr}; + + std::vector* theElasticFSs{nullptr}; + std::map*> theInelasticFSs; + std::vector* theCaptureFSs{nullptr}; + std::vector* theFissionFSs{nullptr}; + + std::map*>* theTSCoherentCrossSections{nullptr}; + std::map*>* theTSIncoherentCrossSections{ + nullptr}; + std::map*>* theTSInelasticCrossSections{nullptr}; + + std::map*>*>*>* + theTSCoherentFinalStates{nullptr}; + std::map*>*>* theTSIncoherentFinalStates{ + nullptr}; + std::map*>*>* theTSInelasticFinalStates{ + nullptr}; + + G4double theMinADBRC{200.}; + G4double theMinEnergyDBRC; + G4double theMaxEnergyDBRC; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPMessenger.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPMessenger.hh index 69d24daf691..5e855f380e1 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPMessenger.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPMessenger.hh @@ -26,34 +26,42 @@ #ifndef G4ParticleHPMessenger_h #define G4ParticleHPMessenger_h -#include "globals.hh" #include "G4UImessenger.hh" +#include "globals.hh" class G4ParticleHPManager; class G4UIdirectory; class G4UIcmdWithAString; +class G4UIcmdWithABool; class G4UIcmdWithAnInteger; +class G4UIcmdWithADouble; +class G4UIcmdWithADoubleAndUnit; -class G4ParticleHPMessenger: public G4UImessenger +class G4ParticleHPMessenger : public G4UImessenger { - public: - G4ParticleHPMessenger( G4ParticleHPManager* ); - ~G4ParticleHPMessenger(); + public: + G4ParticleHPMessenger(G4ParticleHPManager*); + ~G4ParticleHPMessenger() override; - void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; - private: - G4ParticleHPManager* manager; + private: + G4ParticleHPManager* manager; - G4UIdirectory* ParticleHPDir; - G4UIcmdWithAString* PhotoEvaCmd; - G4UIcmdWithAString* SkipMissingCmd; - G4UIcmdWithAString* NeglectDopplerCmd; - G4UIcmdWithAString* DoNotAdjustFSCmd; - G4UIcmdWithAString* ProduceFissionFragementCmd; - G4UIcmdWithAString* WendtFissionModelCmd; - G4UIcmdWithAString* NRESP71Cmd; - G4UIcmdWithAnInteger* VerboseCmd; + G4UIdirectory* ParticleHPDir; + G4UIcmdWithAString* PhotoEvaCmd; + G4UIcmdWithAString* SkipMissingCmd; + G4UIcmdWithAString* NeglectDopplerCmd; + G4UIcmdWithAString* DoNotAdjustFSCmd; + G4UIcmdWithAString* ProduceFissionFragementCmd; + G4UIcmdWithAString* WendtFissionModelCmd; + G4UIcmdWithAString* NRESP71Cmd; + G4UIcmdWithAnInteger* VerboseCmd; + G4UIcmdWithABool* UseDBRCCmd; + G4UIcmdWithADoubleAndUnit* MaxEnergySVTCmd; + G4UIcmdWithADouble* MinADBRCCmd; + G4UIcmdWithADoubleAndUnit* MinEnergyDBRCCmd; + G4UIcmdWithADoubleAndUnit* MaxEnergyDBRCCmd; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPN2AInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPN2AInelasticFS.hh index 1810d4e4815..2a996052622 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPN2AInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPN2AInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPN2AInelasticFS_h #define G4ParticleHPN2AInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPN2AInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHPN2AInelasticFS(); - ~G4ParticleHPN2AInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPN2AInelasticFS * theNew = new G4ParticleHPN2AInelasticFS; - return theNew; - } - + G4ParticleHPN2AInelasticFS(); + ~G4ParticleHPN2AInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPN2AInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPN2PInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPN2PInelasticFS.hh index d56c2c0f18b..e12aa77a128 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPN2PInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPN2PInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPN2PInelasticFS_h #define G4ParticleHPN2PInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPN2PInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHPN2PInelasticFS(); - ~G4ParticleHPN2PInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPN2PInelasticFS * theNew = new G4ParticleHPN2PInelasticFS; - return theNew; - } - + G4ParticleHPN2PInelasticFS(); + ~G4ParticleHPN2PInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPN2PInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPN3AInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPN3AInelasticFS.hh index bc4e0be2cb2..7dd36ad03be 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPN3AInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPN3AInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPN3AInelasticFS_h #define G4ParticleHPN3AInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPN3AInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHPN3AInelasticFS(); - ~G4ParticleHPN3AInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPN3AInelasticFS * theNew = new G4ParticleHPN3AInelasticFS; - return theNew; - } - + G4ParticleHPN3AInelasticFS(); + ~G4ParticleHPN3AInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPN3AInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNAInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNAInelasticFS.hh index d5f92348b12..5e0fd3e3f2f 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNAInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNAInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPNAInelasticFS_h #define G4ParticleHPNAInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPNAInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHPNAInelasticFS(); - ~G4ParticleHPNAInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPNAInelasticFS * theNew = new G4ParticleHPNAInelasticFS; - return theNew; - } - + G4ParticleHPNAInelasticFS(); + ~G4ParticleHPNAInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPNAInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNBodyPhaseSpace.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNBodyPhaseSpace.hh index f3d70496b92..85d06186d23 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNBodyPhaseSpace.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNBodyPhaseSpace.hh @@ -29,77 +29,78 @@ #ifndef G4ParticleHPNBodyPhaseSpace_h #define G4ParticleHPNBodyPhaseSpace_h 1 -#include -#include - -#include "globals.hh" -#include "G4Pow.hh" -#include "G4ios.hh" #include "G4Neutron.hh" -#include "G4VParticleHPEnergyAngular.hh" +#include "G4Pow.hh" #include "G4ReactionProduct.hh" +#include "G4VParticleHPEnergyAngular.hh" +#include "G4ios.hh" +#include "globals.hh" + +#include + +#include class G4ParticleHPNBodyPhaseSpace : public G4VParticleHPEnergyAngular { public: - - G4ParticleHPNBodyPhaseSpace(){ - theTotalMass = 0.0; - theTotalCount = 0; - } - ~G4ParticleHPNBodyPhaseSpace(){} - + G4ParticleHPNBodyPhaseSpace() + { + theTotalMass = 0.0; + theTotalCount = 0; + } + ~G4ParticleHPNBodyPhaseSpace() override = default; + public: - - void Init(G4double aMass, G4int aCount) - { - theTotalMass=aMass; - theTotalCount=aCount; - } + void Init(G4double aMass, G4int aCount) + { + theTotalMass = aMass; + theTotalCount = aCount; + } + + void Init(std::istream& aDataFile) override + { + aDataFile >> theTotalMass >> theTotalCount; + theTotalMass *= G4Neutron::Neutron()->GetPDGMass(); + } + + G4ReactionProduct* Sample(G4double anEnergy, G4double massCode, G4double mass) override; - void Init(std::istream & aDataFile) - { - aDataFile >> theTotalMass >> theTotalCount; - theTotalMass *= G4Neutron::Neutron()->GetPDGMass(); - } - - G4ReactionProduct * Sample(G4double anEnergy, G4double massCode, G4double mass); - private: - - inline G4double Prob(G4double anEnergy, G4double eMax, G4int n) - { - G4double result; - result = std::sqrt(anEnergy)*G4Pow::GetInstance()->powA(eMax-anEnergy, 3.*n/2.-4.); - return result; - } - - inline G4double C(G4double anEnergy, G4double mass) - { - G4double result(0); - if(theTotalCount==3) result = 4./CLHEP::pi/G4Pow::GetInstance()->powN(GetEmax(anEnergy, mass),2); - if(theTotalCount==4) result = 105./32./G4Pow::GetInstance()->powA(GetEmax(anEnergy, mass), 3.5); - //if(theTotalCount==5) result = 256./14./CLHEP::pi/G4Pow::GetInstance()->powA(GetEmax(anEnergy, mass), 5.); - if(theTotalCount==5) result = 256./14./CLHEP::pi/G4Pow::GetInstance()->powN(GetEmax(anEnergy, mass), 5); - return result; - } - - inline G4double GetEmax(G4double anEnergy, G4double mass) - { - G4double result; - G4double tMass = GetTarget()->GetMass(); - G4double pMass = GetProjectileRP()->GetMass(); - G4double availableEnergy = GetQValue() + anEnergy*tMass/(pMass+tMass); - result = availableEnergy*(theTotalMass-mass)/theTotalMass; - return result; - } - - G4double MeanEnergyOfThisInteraction() {return -1; } - + inline G4double Prob(G4double anEnergy, G4double eMax, G4int n) + { + G4double result; + result = std::sqrt(anEnergy) * G4Pow::GetInstance()->powA(eMax - anEnergy, 3. * n / 2. - 4.); + return result; + } + + inline G4double C(G4double anEnergy, G4double mass) + { + G4double result(0); + if (theTotalCount == 3) + result = 4. / CLHEP::pi / G4Pow::GetInstance()->powN(GetEmax(anEnergy, mass), 2); + if (theTotalCount == 4) + result = 105. / 32. / G4Pow::GetInstance()->powA(GetEmax(anEnergy, mass), 3.5); + // if(theTotalCount==5) result = + // 256./14./CLHEP::pi/G4Pow::GetInstance()->powA(GetEmax(anEnergy, mass), 5.); + if (theTotalCount == 5) + result = 256. / 14. / CLHEP::pi / G4Pow::GetInstance()->powN(GetEmax(anEnergy, mass), 5); + return result; + } + + inline G4double GetEmax(G4double anEnergy, G4double mass) + { + G4double result; + G4double tMass = GetTarget()->GetMass(); + G4double pMass = GetProjectileRP()->GetMass(); + G4double availableEnergy = GetQValue() + anEnergy * tMass / (pMass + tMass); + result = availableEnergy * (theTotalMass - mass) / theTotalMass; + return result; + } + + G4double MeanEnergyOfThisInteraction() override { return -1; } + private: - - G4double theTotalMass; - G4int theTotalCount; - + G4double theTotalMass; + G4int theTotalCount; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPND2AInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPND2AInelasticFS.hh index b23cfa6c78d..0e472e3ddbd 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPND2AInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPND2AInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPND2AInelasticFS_h #define G4ParticleHPND2AInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPND2AInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHPND2AInelasticFS(); - ~G4ParticleHPND2AInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPND2AInelasticFS * theNew = new G4ParticleHPND2AInelasticFS; - return theNew; - } - + G4ParticleHPND2AInelasticFS(); + ~G4ParticleHPND2AInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPND2AInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNDInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNDInelasticFS.hh index 5871b650104..89f0f51ec6e 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNDInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNDInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPNDInelasticFS_h #define G4ParticleHPNDInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPNDInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHPNDInelasticFS(); - ~G4ParticleHPNDInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPNDInelasticFS * theNew = new G4ParticleHPNDInelasticFS; - return theNew; - } - + G4ParticleHPNDInelasticFS(); + ~G4ParticleHPNDInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPNDInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNHe3InelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNHe3InelasticFS.hh index 84bda822ffd..1aa25c3cae3 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNHe3InelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNHe3InelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPNHe3InelasticFS_h #define G4ParticleHPNHe3InelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPNHe3InelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHPNHe3InelasticFS(); - ~G4ParticleHPNHe3InelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPNHe3InelasticFS * theNew = new G4ParticleHPNHe3InelasticFS; - return theNew; - } - + G4ParticleHPNHe3InelasticFS(); + ~G4ParticleHPNHe3InelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPNHe3InelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNInelasticFS.hh index d3c0ec81f44..0a41e47cded 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPNInelasticFS_h #define G4ParticleHPNInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticCompFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticCompFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPNInelasticFS : public G4ParticleHPInelasticCompFS { public: - - G4ParticleHPNInelasticFS(); - ~G4ParticleHPNInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPNInelasticFS * theNew = new G4ParticleHPNInelasticFS; - return theNew; - } - + G4ParticleHPNInelasticFS(); + ~G4ParticleHPNInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPNInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNPAInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNPAInelasticFS.hh index af04e525ed8..49b9a5f71eb 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNPAInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNPAInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPNPAInelasticFS_h #define G4ParticleHPNPAInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPNPAInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHPNPAInelasticFS(); - ~G4ParticleHPNPAInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPNPAInelasticFS * theNew = new G4ParticleHPNPAInelasticFS; - return theNew; - } - + G4ParticleHPNPAInelasticFS(); + ~G4ParticleHPNPAInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPNPAInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNPInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNPInelasticFS.hh index ab5b05c41ee..9a2ba8c6c0f 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNPInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNPInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPNPInelasticFS_h #define G4ParticleHPNPInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPNPInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHPNPInelasticFS(); - ~G4ParticleHPNPInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPNPInelasticFS * theNew = new G4ParticleHPNPInelasticFS; - return theNew; - } - + G4ParticleHPNPInelasticFS(); + ~G4ParticleHPNPInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPNPInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNT2AInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNT2AInelasticFS.hh index 9ae5c409d18..0d03e01b871 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNT2AInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNT2AInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPNT2AInelasticFS_h #define G4ParticleHPNT2AInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPNT2AInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHPNT2AInelasticFS(); - ~G4ParticleHPNT2AInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPNT2AInelasticFS * theNew = new G4ParticleHPNT2AInelasticFS; - return theNew; - } - + G4ParticleHPNT2AInelasticFS(); + ~G4ParticleHPNT2AInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPNT2AInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNTInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNTInelasticFS.hh index 77fe9ba6ec5..64acb3a011a 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNTInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNTInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPNTInelasticFS_h #define G4ParticleHPNTInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPNTInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHPNTInelasticFS(); - ~G4ParticleHPNTInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPNTInelasticFS * theNew = new G4ParticleHPNTInelasticFS; - return theNew; - } - + G4ParticleHPNTInelasticFS(); + ~G4ParticleHPNTInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPNTInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNXInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNXInelasticFS.hh index bb454ceaeb3..6775c4152c6 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNXInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNXInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPNXInelasticFS_h #define G4ParticleHPNXInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPNXInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHPNXInelasticFS(); - ~G4ParticleHPNXInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPNXInelasticFS * theNew = new G4ParticleHPNXInelasticFS; - return theNew; - } - + G4ParticleHPNXInelasticFS(); + ~G4ParticleHPNXInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPNXInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNames.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNames.hh index d04d14c5d1f..8c224ca7ee7 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNames.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPNames.hh @@ -30,44 +30,48 @@ #define G4ParticleHPNames_h 1 #include "G4ios.hh" + #include // #include -#include -#include "globals.hh" #include "G4ParticleHPDataUsed.hh" +#include "globals.hh" + +#include class G4ParticleHPNames { public: - - G4ParticleHPNames(){theMaxOffSet = 5;} - G4ParticleHPNames(G4int maxOffSet){theMaxOffSet = maxOffSet;} - ~G4ParticleHPNames(){} - - //G4ParticleHPDataUsed GetName(G4int A, G4int Z, G4String base, G4String rest, G4bool & active); - G4ParticleHPDataUsed GetName(G4int A, G4int Z, G4String base, G4String rest, G4bool & active) { G4int M = 0; return GetName( A, Z, M, base, rest, active); }; - G4ParticleHPDataUsed GetName(G4int A, G4int Z, G4int M, G4String base, G4String rest, G4bool & active); - G4String GetName(G4int i); - void SetMaxOffSet(G4int anOffset) { theMaxOffSet = anOffset; } - + G4ParticleHPNames() { theMaxOffSet = 5; } + G4ParticleHPNames(G4int maxOffSet) { theMaxOffSet = maxOffSet; } + ~G4ParticleHPNames() = default; + + // G4ParticleHPDataUsed GetName(G4int A, G4int Z, G4String base, G4String rest, G4bool & + // active); + G4ParticleHPDataUsed GetName(G4int A, G4int Z, G4String base, G4String rest, G4bool& active) + { + G4int M = 0; + return GetName(A, Z, M, base, rest, active); + }; + G4ParticleHPDataUsed GetName(G4int A, G4int Z, G4int M, G4String base, G4String rest, + G4bool& active); + G4String GetName(G4int i); + void SetMaxOffSet(G4int anOffset) { theMaxOffSet = anOffset; } + public: - - static const G4String theString[100]; - G4int theMaxOffSet; - G4String itoa(int current) - { - const char theDigits[11] = "0123456789"; - G4String result; - int digit; - do + static const G4String theString[100]; + G4int theMaxOffSet; + G4String itoa(int current) { - digit = current-10*(current/10); - result=theDigits[digit]+result; - current/=10; + const char theDigits[11] = "0123456789"; + G4String result; + int digit; + do { + digit = current - 10 * (current / 10); + result = theDigits[digit] + result; + current /= 10; + } while (current != 0); // Loop checking, 11.05.2015, T. Koi + return result; } - while(current!=0); // Loop checking, 11.05.2015, T. Koi - return result; - } }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPAInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPAInelasticFS.hh index b39a007160b..998d9dc8baf 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPAInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPAInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPPAInelasticFS_h #define G4ParticleHPPAInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPPAInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHPPAInelasticFS(); - ~G4ParticleHPPAInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPPAInelasticFS * theNew = new G4ParticleHPPAInelasticFS; - return theNew; - } - + G4ParticleHPPAInelasticFS(); + ~G4ParticleHPPAInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPPAInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPDInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPDInelasticFS.hh index 48ca68ab200..4560ccd80f6 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPDInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPDInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPPDInelasticFS_h #define G4ParticleHPPDInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPPDInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHPPDInelasticFS(); - ~G4ParticleHPPDInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPPDInelasticFS * theNew = new G4ParticleHPPDInelasticFS; - return theNew; - } - + G4ParticleHPPDInelasticFS(); + ~G4ParticleHPPDInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPPDInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPInelasticFS.hh index ec3968458ec..518e1cc7cb7 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPPInelasticFS_h #define G4ParticleHPPInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticCompFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticCompFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPPInelasticFS : public G4ParticleHPInelasticCompFS { public: - - G4ParticleHPPInelasticFS(); - ~G4ParticleHPPInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPPInelasticFS * theNew = new G4ParticleHPPInelasticFS; - return theNew; - } - + G4ParticleHPPInelasticFS(); + ~G4ParticleHPPInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPPInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPTInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPTInelasticFS.hh index 429cdeed8d0..22e58ce6abe 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPTInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPTInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPPTInelasticFS_h #define G4ParticleHPPTInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticBaseFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticBaseFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPPTInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHPPTInelasticFS(); - ~G4ParticleHPPTInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPPTInelasticFS * theNew = new G4ParticleHPPTInelasticFS; - return theNew; - } - + G4ParticleHPPTInelasticFS(); + ~G4ParticleHPPTInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPPTInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPartial.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPartial.hh index c81258a0c29..4fdbe0e5308 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPartial.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPartial.hh @@ -31,106 +31,99 @@ #ifndef G4ParticleHPPartial_h #define G4ParticleHPPartial_h 1 -#include - -#include "globals.hh" -#include "G4ParticleHPVector.hh" #include "G4InterpolationManager.hh" #include "G4ParticleHPInterpolator.hh" +#include "G4ParticleHPVector.hh" +#include "globals.hh" + +#include class G4ParticleHPPartial { public: - - G4ParticleHPPartial(G4int n) - { - X = new G4double[n]; - data = new G4ParticleHPVector[n]; - nData = n; - T=0; - } - - G4ParticleHPPartial(G4int n1, G4int n2) - { - T = new G4double[n2]; - X = new G4double[n1]; - data = new G4ParticleHPVector[n1]; - nData = std::max(n1,n2); - } - - void InitInterpolation(G4int i, std::istream & aDataFile) - { - data[i].InitInterpolation(aDataFile); - } - - void InitInterpolation(std::istream & aDataFile) - { - theManager.Init(aDataFile); - } - - void Init(std::istream & aDataFile) - { - G4int i; - G4double e; - for( i=0; i> e; + e *= CLHEP::eV; + SetX(i, e); + InitData(i, aDataFile, CLHEP::eV); // energy and probability for gammas + } + } + + void InitData(G4int i, std::istream& aDataFile, G4double unit = 1.) { - aDataFile >> e; - e *= CLHEP::eV; - SetX(i,e); - InitData(i, aDataFile, CLHEP::eV); // energy and probability for gammas - } - } - - void InitData(G4int i, std::istream & aDataFile, G4double unit=1.) - { - G4int ii; - G4double eg, pg; - G4int neg; - aDataFile >> neg; - data[i].InitInterpolation(aDataFile); - for (ii=0; ii> eg >> pg; - eg *= unit; - SetX(i,ii,eg); - SetY(i,ii,pg); - } - data[i].Hash(); - } - - ~G4ParticleHPPartial() - { - delete [] X; - if(T!=0) delete [] T; - delete [] data; - } - inline G4int GetNumberOfEnergies() {return nData;} - - inline void SetX(G4int i, G4double x) {X[i]=x;} - inline void SetT(G4int i, G4double x) {T[i]=x;} - inline void SetX(G4int i, G4int j, G4double x) {data[i].SetX(j,x);} - inline void SetY(G4int i, G4int j, G4double y) {data[i].SetY(j,y);} - void DoneSetXY( G4int i ) { data[i].Hash(); } - - inline G4double GetX(G4int i) {return X[i];} - inline G4double GetT(G4int i) {return T[i];} - inline G4double GetX(G4int i, G4int j) {return data[i].GetX(j);} - inline G4double GetY(G4int i, G4int j) {return data[i].GetY(j);} - inline G4double GetY(G4int i, G4double e) {return data[i].GetY(e);} - inline G4int GetNEntries(G4int i) {return data[i].GetVectorLength();} - G4ParticleHPVector * GetY(G4double e1); - G4double Sample(G4double x); - + G4int ii; + G4double eg, pg; + G4int neg; + aDataFile >> neg; + data[i].InitInterpolation(aDataFile); + for (ii = 0; ii < neg; ii++) { + aDataFile >> eg >> pg; + eg *= unit; + SetX(i, ii, eg); + SetY(i, ii, pg); + } + data[i].Hash(); + } + + ~G4ParticleHPPartial() + { + delete[] X; + delete[] T; + delete[] data; + } + inline G4int GetNumberOfEnergies() { return nData; } + + inline void SetX(G4int i, G4double x) { X[i] = x; } + inline void SetT(G4int i, G4double x) { T[i] = x; } + inline void SetX(G4int i, G4int j, G4double x) { data[i].SetX(j, x); } + inline void SetY(G4int i, G4int j, G4double y) { data[i].SetY(j, y); } + void DoneSetXY(G4int i) { data[i].Hash(); } + + inline G4double GetX(G4int i) { return X[i]; } + inline G4double GetT(G4int i) { return T[i]; } + inline G4double GetX(G4int i, G4int j) { return data[i].GetX(j); } + inline G4double GetY(G4int i, G4int j) { return data[i].GetY(j); } + inline G4double GetY(G4int i, G4double e) { return data[i].GetY(e); } + inline G4int GetNEntries(G4int i) { return data[i].GetVectorLength(); } + G4ParticleHPVector* GetY(G4double e1); + G4double Sample(G4double x); + private: - - G4double * X; - G4double * T; - G4ParticleHPVector * data; - // TKDB - //G4ParticleHPVector * theBuffer; - G4int nData; - G4InterpolationManager theManager; // interpolate between different data[i] - G4ParticleHPInterpolator theInt; + G4double* X; + G4double* T; + G4ParticleHPVector* data; + // TKDB + // G4ParticleHPVector * theBuffer; + G4int nData; + G4InterpolationManager theManager; // interpolate between different data[i] + G4ParticleHPInterpolator theInt; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPParticleYield.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPParticleYield.hh index 22b5fc58592..de9c49d8d6c 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPParticleYield.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPParticleYield.hh @@ -29,134 +29,120 @@ #ifndef G4ParticleHPParticleYield_h #define G4ParticleHPParticleYield_h 1 -#include - -#include "globals.hh" -#include "G4ParticleHPVector.hh" -#include "G4ParticleHPPolynomExpansion.hh" #include "G4ParticleHPList.hh" +#include "G4ParticleHPPolynomExpansion.hh" +#include "G4ParticleHPVector.hh" +#include "globals.hh" + +#include class G4ParticleHPParticleYield { public: - G4ParticleHPParticleYield() - { - simpleMean = true; - spontPrompt = true; - hasPromptData = false; - hasDelayedData = false; - - targetMass = 0.0; - theSpontPrompt = 0.0; - spontDelayed = true; - theSpontDelayed = 0.0; - } - ~G4ParticleHPParticleYield(){} - - G4double GetTargetMass() { return targetMass; } - - void InitMean(std::istream & aDataFile) - { - G4int iflag; - aDataFile >> targetMass >>iflag; - if(iflag == 1) simpleMean=false; - if(simpleMean) - { - theSimpleMean.Init(aDataFile, CLHEP::eV); - } - else + G4ParticleHPParticleYield() { - theMean.Init(aDataFile); - } - } + simpleMean = true; + spontPrompt = true; + hasPromptData = false; + hasDelayedData = false; - void InitPrompt(std::istream & aDataFile) - { - hasPromptData = true; - G4int iflag; - aDataFile >> targetMass >>iflag; - if(iflag == 2) spontPrompt = false; - if(spontPrompt) - { - aDataFile >> theSpontPrompt; + targetMass = 0.0; + theSpontPrompt = 0.0; + spontDelayed = true; + theSpontDelayed = 0.0; } - else + ~G4ParticleHPParticleYield() = default; + + G4double GetTargetMass() { return targetMass; } + + void InitMean(std::istream& aDataFile) { - thePrompt.Init(aDataFile, CLHEP::eV); + G4int iflag; + aDataFile >> targetMass >> iflag; + if (iflag == 1) simpleMean = false; + if (simpleMean) { + theSimpleMean.Init(aDataFile, CLHEP::eV); + } + else { + theMean.Init(aDataFile); + } } - } - - void InitDelayed(std::istream & aDataFile) - { - hasDelayedData = true; - G4int iflag; - aDataFile >> targetMass >>iflag; - thePrecursorDecayConstants.Init(aDataFile, 1./CLHEP::s); // s is the CLHEP unit second - if(iflag == 2) spontDelayed = false; - if(spontDelayed) + + void InitPrompt(std::istream& aDataFile) { - aDataFile >> theSpontDelayed; + hasPromptData = true; + G4int iflag; + aDataFile >> targetMass >> iflag; + if (iflag == 2) spontPrompt = false; + if (spontPrompt) { + aDataFile >> theSpontPrompt; + } + else { + thePrompt.Init(aDataFile, CLHEP::eV); + } } - else + + void InitDelayed(std::istream& aDataFile) { - theDelayed.Init(aDataFile, CLHEP::eV); + hasDelayedData = true; + G4int iflag; + aDataFile >> targetMass >> iflag; + thePrecursorDecayConstants.Init(aDataFile, 1. / CLHEP::s); // s is the CLHEP unit second + if (iflag == 2) spontDelayed = false; + if (spontDelayed) { + aDataFile >> theSpontDelayed; + } + else { + theDelayed.Init(aDataFile, CLHEP::eV); + } } - } - - G4double GetMean(G4double anEnergy) - { - if(simpleMean) + + G4double GetMean(G4double anEnergy) { - return theSimpleMean.GetY(anEnergy); + if (simpleMean) { + return theSimpleMean.GetY(anEnergy); + } + return theMean.GetValue(anEnergy); } - return theMean.GetValue(anEnergy); - } - - G4double GetPrompt(G4double anEnergy) - { - if(!hasPromptData) return 0; - if(spontPrompt) + + G4double GetPrompt(G4double anEnergy) { - return theSpontPrompt; + if (!hasPromptData) return 0; + if (spontPrompt) { + return theSpontPrompt; + } + return thePrompt.GetY(anEnergy); } - return thePrompt.GetY(anEnergy); - } - - G4double GetDelayed(G4double anEnergy) - { - if(!hasDelayedData) return 0; - if(spontDelayed) + + G4double GetDelayed(G4double anEnergy) { - return theSpontDelayed; + if (!hasDelayedData) return 0; + if (spontDelayed) { + return theSpontDelayed; + } + return theDelayed.GetY(anEnergy); } - return theDelayed.GetY(anEnergy); - } - - inline G4double GetDecayConstant(G4int i) - { - return thePrecursorDecayConstants.GetValue(i); - } - + + inline G4double GetDecayConstant(G4int i) { return thePrecursorDecayConstants.GetValue(i); } + private: - - G4double targetMass; - // total mean - G4bool simpleMean; - G4ParticleHPPolynomExpansion theMean; - G4ParticleHPVector theSimpleMean; - - // Prompt neutrons - G4bool hasPromptData; - G4bool spontPrompt; - G4ParticleHPVector thePrompt; - G4double theSpontPrompt; - - // delayed neutrons - G4bool hasDelayedData; - G4bool spontDelayed; - G4ParticleHPList thePrecursorDecayConstants; - G4ParticleHPVector theDelayed; - G4double theSpontDelayed; + G4double targetMass; + // total mean + G4bool simpleMean; + G4ParticleHPPolynomExpansion theMean; + G4ParticleHPVector theSimpleMean; + + // Prompt neutrons + G4bool hasPromptData; + G4bool spontPrompt; + G4ParticleHPVector thePrompt; + G4double theSpontPrompt; + // delayed neutrons + G4bool hasDelayedData; + G4bool spontDelayed; + G4ParticleHPList thePrecursorDecayConstants; + G4ParticleHPVector theDelayed; + G4double theSpontDelayed; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPhotonDist.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPhotonDist.hh index c0b5ee9131c..52c9be18396 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPhotonDist.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPhotonDist.hh @@ -24,8 +24,8 @@ // ******************************************************************** // // - // Hadronic Process: Very Low Energy Neutron X-Sections - // original by H.P. Wellisch, TRIUMF, 14-Feb-97 +// Hadronic Process: Very Low Energy Neutron X-Sections +// original by H.P. Wellisch, TRIUMF, 14-Feb-97 // // 070606 fix for Valgrind error by T. Koi // 070612 fix memory leaking by T. Koi @@ -37,160 +37,142 @@ #ifndef G4ParticleHPPhotonDist_h #define G4ParticleHPPhotonDist_h 1 -#include - -#include "globals.hh" -#include "G4ios.hh" -#include "globals.hh" -#include "G4ParticleHPVector.hh" -#include "G4ParticleHPLegendreTable.hh" +#include "G4Cache.hh" +#include "G4Gamma.hh" +#include "G4InterpolationManager.hh" #include "G4ParticleHPAngularP.hh" -#include "G4ParticleHPPartial.hh" #include "G4ParticleHPFastLegendre.hh" #include "G4ParticleHPInterpolator.hh" -#include "G4ReactionProductVector.hh" +#include "G4ParticleHPLegendreTable.hh" +#include "G4ParticleHPPartial.hh" +#include "G4ParticleHPVector.hh" #include "G4ReactionProduct.hh" -#include "G4Gamma.hh" -#include "G4InterpolationManager.hh" -#include "G4Cache.hh" +#include "G4ReactionProductVector.hh" +#include "G4ios.hh" +#include "globals.hh" + +#include class G4ParticleHPPhotonDist { -public: - - G4ParticleHPPhotonDist() - : repFlag( 0 ) - , targetMass( 0.0 ) - , nDiscrete( 0 ) - , isoFlag( 0 ) - , tabulationType( 0 ) - , nDiscrete2( 0 ) - , nIso( 0 ) - , nPartials( 0 ) - , theInternalConversionFlag( 0 ) - , nGammaEnergies( 0 ) - , theBaseEnergy( 0.0 ) - { - - disType = 0; - energy = 0; - theYield = 0; - thePartialXsec = 0; - theReactionXsec = 0; - isPrimary = 0; - theShells = 0; - theGammas = 0; - nNeu = 0; - theLegendre = 0; - theAngular = 0; - distribution = 0; - probs = 0; - partials = 0; - actualMult.Put( 0 ); - - theLevelEnergies = 0; - theTransitionProbabilities = 0; - thePhotonTransitionFraction = 0; - - } - - ~G4ParticleHPPhotonDist() - { - delete [] disType; - delete [] energy; - delete [] theYield; - delete [] thePartialXsec; -// delete [] theReactionXsec; -// DHW: not created in this class - delete [] isPrimary; - delete [] theShells; - delete [] theGammas; - delete [] nNeu; - delete [] theAngular; - delete [] distribution; - delete [] probs; - - if ( theLegendre != 0 ) - { - for ( G4int i = 0 ; i < (nDiscrete2-nIso) ; i++ ) - if ( theLegendre[i] != 0 ) delete[] theLegendre[i]; - - delete [] theLegendre; - } - - if ( partials != 0 ) - { - for ( G4int i = 0 ; i < nPartials ; i++ ) - { delete partials[i]; } - - delete [] partials; - } - - delete [] theLevelEnergies; - delete [] theTransitionProbabilities; - delete [] thePhotonTransitionFraction; - if (actualMult.Get() != 0) delete actualMult.Get(); - } - - G4bool InitMean(std::istream & aDataFile); - - void InitAngular(std::istream & aDataFile); - - void InitEnergies(std::istream & aDataFile); - - void InitPartials(std::istream& aDataFile, G4ParticleHPVector* theXsec = 0); - - G4ReactionProductVector * GetPhotons(G4double anEnergy); - - inline G4double GetTargetMass() {return targetMass;} - - inline G4bool NeedsCascade() {return repFlag==2;} - - inline G4double GetLevelEnergy() {return theBaseEnergy;} - -private: - - G4int repFlag; //representation as multiplicities or transition probability arrays. - G4double targetMass; - - G4int nDiscrete; //number of discrete photons - G4int* disType; // discrete, or continuum photons - G4double* energy; // photon energies - G4ParticleHPVector* theYield; // multiplicity as a function of neutron energy. - G4ParticleHPVector theTotalXsec; - G4ParticleHPVector* thePartialXsec; - G4ParticleHPVector* theReactionXsec; - G4int* isPrimary; - - G4int isoFlag; // isotropic or not? - G4int tabulationType; - G4int nDiscrete2; - G4int nIso; - G4double * theShells; - G4double * theGammas; - G4int * nNeu; - G4InterpolationManager theLegendreManager; - G4ParticleHPLegendreTable ** theLegendre; - G4ParticleHPAngularP ** theAngular; - - G4int * distribution; // not used for the moment. - G4int nPartials; - G4ParticleHPVector * probs; // probabilities for the partial distributions. - G4ParticleHPPartial ** partials; // the partials, parallel to the above - - G4Cache< std::vector* > actualMult; - + public: + G4ParticleHPPhotonDist() + { + disType = nullptr; + energy = nullptr; + theYield = nullptr; + thePartialXsec = nullptr; + theReactionXsec = nullptr; + isPrimary = nullptr; + theShells = nullptr; + theGammas = nullptr; + nNeu = nullptr; + theLegendre = nullptr; + theAngular = nullptr; + distribution = nullptr; + probs = nullptr; + partials = nullptr; + actualMult.Put(nullptr); + + theLevelEnergies = nullptr; + theTransitionProbabilities = nullptr; + thePhotonTransitionFraction = nullptr; + } + + ~G4ParticleHPPhotonDist() + { + delete[] disType; + delete[] energy; + delete[] theYield; + delete[] thePartialXsec; + // delete [] theReactionXsec; + // DHW: not created in this class + delete[] isPrimary; + delete[] theShells; + delete[] theGammas; + delete[] nNeu; + delete[] theAngular; + delete[] distribution; + delete[] probs; + + if (theLegendre != nullptr) { + for (G4int i = 0; i < (nDiscrete2 - nIso); i++) + if (theLegendre[i] != nullptr) delete[] theLegendre[i]; + + delete[] theLegendre; + } + + if (partials != nullptr) { + for (G4int i = 0; i < nPartials; i++) { + delete partials[i]; + } + + delete[] partials; + } + + delete[] theLevelEnergies; + delete[] theTransitionProbabilities; + delete[] thePhotonTransitionFraction; + if (actualMult.Get() != nullptr) delete actualMult.Get(); + } + + G4bool InitMean(std::istream& aDataFile); + + void InitAngular(std::istream& aDataFile); + + void InitEnergies(std::istream& aDataFile); + + void InitPartials(std::istream& aDataFile, G4ParticleHPVector* theXsec = nullptr); + + G4ReactionProductVector* GetPhotons(G4double anEnergy); + + inline G4double GetTargetMass() { return targetMass; } + + inline G4bool NeedsCascade() { return repFlag == 2; } + + inline G4double GetLevelEnergy() { return theBaseEnergy; } + + private: + G4int repFlag{0}; // representation as multiplicities or transition probability arrays. + G4double targetMass{0.0}; + + G4int nDiscrete{0}; // number of discrete photons + G4int* disType; // discrete, or continuum photons + G4double* energy; // photon energies + G4ParticleHPVector* theYield; // multiplicity as a function of neutron energy. + G4ParticleHPVector theTotalXsec; + G4ParticleHPVector* thePartialXsec; + G4ParticleHPVector* theReactionXsec; + G4int* isPrimary; + + G4int isoFlag{0}; // isotropic or not? + G4int tabulationType{0}; + G4int nDiscrete2{0}; + G4int nIso{0}; + G4double* theShells; + G4double* theGammas; + G4int* nNeu; + G4InterpolationManager theLegendreManager; + G4ParticleHPLegendreTable** theLegendre; + G4ParticleHPAngularP** theAngular; + + G4int* distribution; // not used for the moment. + G4int nPartials{0}; + G4ParticleHPVector* probs; // probabilities for the partial distributions. + G4ParticleHPPartial** partials; // the partials, parallel to the above + + G4Cache*> actualMult; + // for transition prob arrays start - G4int theInternalConversionFlag; - G4int nGammaEnergies; - G4double theBaseEnergy; - G4double * theLevelEnergies; - G4double * theTransitionProbabilities; - G4double * thePhotonTransitionFraction; + G4int theInternalConversionFlag{0}; + G4int nGammaEnergies{0}; + G4double theBaseEnergy{0.0}; + G4double* theLevelEnergies; + G4double* theTransitionProbabilities; + G4double* thePhotonTransitionFraction; // for transition prob arrays end - G4ParticleHPFastLegendre theLegend; // fast look-up for leg-integrals - G4ParticleHPInterpolator theInt; // interpolation + G4ParticleHPFastLegendre theLegend; // fast look-up for leg-integrals }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPolynomExpansion.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPolynomExpansion.hh index efdc0f5fcee..f23dfe8d236 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPolynomExpansion.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPPolynomExpansion.hh @@ -29,53 +29,49 @@ #ifndef G4ParticleHPPolynomExpansion_h #define G4ParticleHPPolynomExpansion_h 1 -#include +#include "G4ios.hh" +#include "globals.hh" + #include -#include "globals.hh" -#include "G4ios.hh" +#include class G4ParticleHPPolynomExpansion { public: - G4ParticleHPPolynomExpansion() - { - theCoeff = 0; - nPoly=0; - } - ~G4ParticleHPPolynomExpansion() - { - if(theCoeff!=0) delete [] theCoeff; - } - - inline void Init(std::istream & theData) - { - theData >> nPoly; - theCoeff = new G4double[nPoly]; - G4int i; - for(i=0;i> theCoeff[i]; + theData >> nPoly; + theCoeff = new G4double[nPoly]; + G4int i; + for (i = 0; i < nPoly; i++) { + theData >> theCoeff[i]; + } } - } - - inline G4double GetValue(G4double anEnergy) - { - G4int i; - G4double result=0; - G4double base = anEnergy/CLHEP::eV; - G4double running = 1; - for(i=0; i -#include "globals.hh" -#include "G4VParticleHPEnergyAngular.hh" -#include "G4ReactionProductVector.hh" - #include "G4ParticleHPContEnergyAngular.hh" #include "G4ParticleHPDiscreteTwoBody.hh" #include "G4ParticleHPIsotropic.hh" -#include "G4ParticleHPNBodyPhaseSpace.hh" #include "G4ParticleHPLabAngularEnergy.hh" -#include "G4Cache.hh" +#include "G4ParticleHPNBodyPhaseSpace.hh" +#include "G4ParticleHPVector.hh" +#include "G4ReactionProductVector.hh" +#include "G4VParticleHPEnergyAngular.hh" +#include "G4ios.hh" +#include "Randomize.hh" +#include "globals.hh" + +#include class G4ParticleDefinition; -enum G4HPMultiMethod { G4HPMultiPoisson, G4HPMultiBetweenInts }; +enum G4HPMultiMethod +{ + G4HPMultiPoisson, + G4HPMultiBetweenInts +}; class G4ParticleHPProduct { - struct toBeCached - { - G4ReactionProduct* theProjectileRP; - G4ReactionProduct* theTarget; - G4int theCurrentMultiplicity; - toBeCached() - : theProjectileRP(0), theTarget(0), theCurrentMultiplicity(-1) {} - }; - -public: - - G4ParticleHPProduct() - { - theDist = 0; - toBeCached val; - fCache.Put( val ); - - char * method = std::getenv( "G4PHP_MULTIPLICITY_METHOD" ); - if( method ) - { - if( G4String(method) == "Poisson" ) { - theMultiplicityMethod = G4HPMultiPoisson; - } else if( G4String(method) == "BetweenInts" ) { - theMultiplicityMethod = G4HPMultiBetweenInts; - } else { - throw G4HadronicException(__FILE__, __LINE__, ("multiplicity method unknown to G4ParticleHPProduct" + G4String(method)).c_str()); - } - } - else - { - theMultiplicityMethod = G4HPMultiPoisson; - } - theMassCode = 0.0; - theMass = 0.0; - theIsomerFlag = 0; - theGroundStateQValue = 0.0; - theActualStateQValue = 0.0; - theDistLaw = -1; - } - - ~G4ParticleHPProduct() - { - if(theDist != 0) delete theDist; - } - - inline void Init(std::istream & aDataFile, G4ParticleDefinition* projectile) - { - aDataFile >> theMassCode>>theMass>>theIsomerFlag>>theDistLaw - >> theGroundStateQValue>>theActualStateQValue; - theGroundStateQValue*= CLHEP::eV; - theActualStateQValue*= CLHEP::eV; - theYield.Init(aDataFile, CLHEP::eV); - theYield.Hash(); - if(theDistLaw==0) - { - // distribution not known, use E-independent, isotropic - // angular distribution - theDist = new G4ParticleHPIsotropic; - } - else if(theDistLaw == 1) - { - // Continuum energy-angular distribution - theDist = new G4ParticleHPContEnergyAngular(projectile); - } - else if(theDistLaw == 2) + struct toBeCached { - // Discrete 2-body scattering - theDist = new G4ParticleHPDiscreteTwoBody; - } - else if(theDistLaw == 3) + G4ReactionProduct* theProjectileRP{nullptr}; + G4ReactionProduct* theTarget{nullptr}; + G4int theCurrentMultiplicity{-1}; + toBeCached() = default; + }; + + public: + G4ParticleHPProduct() { - // Isotropic emission - theDist = new G4ParticleHPIsotropic; + theDist = nullptr; + toBeCached val; + fCache.Put(val); + + char* method = std::getenv("G4PHP_MULTIPLICITY_METHOD"); + if (method != nullptr) { + if (G4String(method) == "Poisson") { + theMultiplicityMethod = G4HPMultiPoisson; + } + else if (G4String(method) == "BetweenInts") { + theMultiplicityMethod = G4HPMultiBetweenInts; + } + else { + throw G4HadronicException( + __FILE__, __LINE__, + ("multiplicity method unknown to G4ParticleHPProduct" + G4String(method)).c_str()); + } + } + else { + theMultiplicityMethod = G4HPMultiPoisson; + } + theMassCode = 0.0; + theMass = 0.0; + theIsomerFlag = 0; + theGroundStateQValue = 0.0; + theActualStateQValue = 0.0; + theDistLaw = -1; } - else if(theDistLaw == 4) + + ~G4ParticleHPProduct() { delete theDist; } + + inline void Init(std::istream& aDataFile, G4ParticleDefinition* projectile) { - // Discrete 2-body recoil modification - // not used for now. @@@@ - theDist = new G4ParticleHPDiscreteTwoBody; - // the above is only temporary; - // recoils need to be addressed - // properly - delete theDist; - theDist = 0; - } - // else if(theDistLaw == 5) - // { + aDataFile >> theMassCode >> theMass >> theIsomerFlag >> theDistLaw >> theGroundStateQValue + >> theActualStateQValue; + theGroundStateQValue *= CLHEP::eV; + theActualStateQValue *= CLHEP::eV; + theYield.Init(aDataFile, CLHEP::eV); + theYield.Hash(); + if (theDistLaw == 0) { + // distribution not known, use E-independent, isotropic + // angular distribution + theDist = new G4ParticleHPIsotropic; + } + else if (theDistLaw == 1) { + // Continuum energy-angular distribution + theDist = new G4ParticleHPContEnergyAngular(projectile); + } + else if (theDistLaw == 2) { + // Discrete 2-body scattering + theDist = new G4ParticleHPDiscreteTwoBody; + } + else if (theDistLaw == 3) { + // Isotropic emission + theDist = new G4ParticleHPIsotropic; + } + else if (theDistLaw == 4) { + // Discrete 2-body recoil modification + // not used for now. @@@@ + theDist = new G4ParticleHPDiscreteTwoBody; + // the above is only temporary; + // recoils need to be addressed + // properly + delete theDist; + theDist = nullptr; + } + // else if(theDistLaw == 5) + // { // charged particles only, to be used in a later stage. @@@@ - // } - else if(theDistLaw == 6) - { - // N-Body phase space - theDist = new G4ParticleHPNBodyPhaseSpace; - } - else if(theDistLaw == 7) - { - // Laboratory angular energy paraetrisation - theDist = new G4ParticleHPLabAngularEnergy; - } - else - { - throw G4HadronicException(__FILE__, __LINE__, "distribution law unknown to G4ParticleHPProduct"); - } - if(theDist!=0) - { - theDist->SetQValue(theActualStateQValue); - theDist->Init(aDataFile); + // } + else if (theDistLaw == 6) { + // N-Body phase space + theDist = new G4ParticleHPNBodyPhaseSpace; + } + else if (theDistLaw == 7) { + // Laboratory angular energy paraetrisation + theDist = new G4ParticleHPLabAngularEnergy; + } + else { + throw G4HadronicException(__FILE__, __LINE__, + "distribution law unknown to G4ParticleHPProduct"); + } + if (theDist != nullptr) { + theDist->SetQValue(theActualStateQValue); + theDist->Init(aDataFile); + } } - } - - G4int GetMultiplicity(G4double anEnergy); - G4ReactionProductVector * Sample(G4double anEnergy, G4int nParticles); - - G4double GetMeanYield(G4double anEnergy) - { - return theYield.GetY(anEnergy); - } - - void SetProjectileRP(G4ReactionProduct * aIncidentPart) - { - fCache.Get().theProjectileRP = aIncidentPart; - } - - void SetTarget(G4ReactionProduct * aTarget) - { - fCache.Get().theTarget = aTarget; - } - - inline G4ReactionProduct * GetTarget() - { - return fCache.Get().theTarget; - } - - inline G4ReactionProduct * GetProjectileRP() - { - return fCache.Get().theProjectileRP; - } - - inline G4double MeanEnergyOfThisInteraction() - { - G4double result; - if(theDist == 0) + + G4int GetMultiplicity(G4double anEnergy); + G4ReactionProductVector* Sample(G4double anEnergy, G4int nParticles); + + G4double GetMeanYield(G4double anEnergy) { return theYield.GetY(anEnergy); } + + void SetProjectileRP(G4ReactionProduct* aIncidentPart) { - result = 0; + fCache.Get().theProjectileRP = aIncidentPart; } - else + + void SetTarget(G4ReactionProduct* aTarget) { fCache.Get().theTarget = aTarget; } + + inline G4ReactionProduct* GetTarget() { return fCache.Get().theTarget; } + + inline G4ReactionProduct* GetProjectileRP() { return fCache.Get().theProjectileRP; } + + inline G4double MeanEnergyOfThisInteraction() { - result=theDist->MeanEnergyOfThisInteraction(); - result *= fCache.Get().theCurrentMultiplicity; + G4double result; + if (theDist == nullptr) { + result = 0; + } + else { + result = theDist->MeanEnergyOfThisInteraction(); + result *= fCache.Get().theCurrentMultiplicity; + } + return result; } - return result; - } - - inline G4double GetQValue() - { - return theActualStateQValue; - } - - //TK120515 For migration of frameFlag (MF6 LCT) = 3 in - //G4ParticleHPEnAngCorrelation - G4double GetMassCode() {return theMassCode;} - G4double GetMass() {return theMass;} - -private: - - // data members - - G4double theMassCode; - G4double theMass; - G4int theIsomerFlag; - G4double theGroundStateQValue; - G4double theActualStateQValue; - G4int theDistLaw; // redundant - G4ParticleHPVector theYield; - G4VParticleHPEnergyAngular * theDist; - - // cashed values - // - G4Cache fCache; - - G4HPMultiMethod theMultiplicityMethod; + + inline G4double GetQValue() { return theActualStateQValue; } + + // TK120515 For migration of frameFlag (MF6 LCT) = 3 in + // G4ParticleHPEnAngCorrelation + G4double GetMassCode() { return theMassCode; } + G4double GetMass() { return theMass; } + + private: + // data members + + G4double theMassCode; + G4double theMass; + G4int theIsomerFlag; + G4double theGroundStateQValue; + G4double theActualStateQValue; + G4int theDistLaw; // redundant + G4ParticleHPVector theYield; + G4VParticleHPEnergyAngular* theDist; + + // cashed values + // + G4Cache fCache; + + G4HPMultiMethod theMultiplicityMethod; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPReactionWhiteBoard.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPReactionWhiteBoard.hh index 7bd1e591d40..3e038183f12 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPReactionWhiteBoard.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPReactionWhiteBoard.hh @@ -36,36 +36,37 @@ // 121031 First implementation done by T. Koi (SLAC/PPA) // #include "globals.hh" + #include -class G4ParticleHPReactionWhiteBoard +class G4ParticleHPReactionWhiteBoard { - public: - G4ParticleHPReactionWhiteBoard(); - ~G4ParticleHPReactionWhiteBoard(); + public: + G4ParticleHPReactionWhiteBoard(); + ~G4ParticleHPReactionWhiteBoard(); + + public: + void Dump(); - public: - void Dump(); + void SetTargZ(G4int Z) { targZ = Z; }; + void SetTargA(G4int A) { targA = A; }; + void SetTargM(G4int M) { targM = M; }; + G4int GetTargZ() { return targZ; }; + G4int GetTargA() { return targA; }; + G4int GetTargM() { return targM; }; - void SetTargZ( G4int Z ){ targZ=Z; }; - void SetTargA( G4int A ){ targA=A; }; - void SetTargM( G4int M ){ targM=M; }; - G4int GetTargZ(){ return targZ; }; - G4int GetTargA(){ return targA; }; - G4int GetTargM(){ return targM; }; - - bool AddRecord( std::pair ); - G4String GetValue( G4String ); - // "0" or "0.0" will retrun for invalid key by following two methods - G4int GetValueInInt( G4String ); - G4double GetValueInDouble( G4String ); + bool AddRecord(std::pair); + G4String GetValue(G4String); + // "0" or "0.0" will retrun for invalid key by following two methods + G4int GetValueInInt(G4String); + G4double GetValueInDouble(G4String); - private: - G4int targZ; - G4int targA; - G4int targM; - std::map< G4String,G4String > mapStringPair; - //,,, + private: + G4int targZ{0}; + G4int targA{0}; + G4int targM{0}; + std::map mapStringPair; + //,,, }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPSCFissionFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPSCFissionFS.hh index 3fb40eded7d..c79a0ee5219 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPSCFissionFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPSCFissionFS.hh @@ -29,27 +29,26 @@ #ifndef G4ParticleHPSCFissionFS_h #define G4ParticleHPSCFissionFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4DynamicParticleVector.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPFissionBaseFS.hh" +#include "globals.hh" class G4ParticleHPSCFissionFS : public G4ParticleHPFissionBaseFS { public: - - G4ParticleHPSCFissionFS(){ hasXsec = false; } - ~G4ParticleHPSCFissionFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile ); - G4DynamicParticleVector * ApplyYourself(G4int NNeutrons); - G4ParticleHPFinalState * New() - { - G4ParticleHPSCFissionFS * theNew = new G4ParticleHPSCFissionFS; - return theNew; - } - + G4ParticleHPSCFissionFS() { hasXsec = false; } + ~G4ParticleHPSCFissionFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition* projectile) override; + G4DynamicParticleVector* ApplyYourself(G4int NNeutrons); + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPSCFissionFS; + return theNew; + } + private: - G4HadFinalState * ApplyYourself(const G4HadProjectile &) { return 0; } - + G4HadFinalState* ApplyYourself(const G4HadProjectile&) override { return nullptr; } }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPSimpleEvapSpectrum.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPSimpleEvapSpectrum.hh index 67f1e7d93f2..eac43e433a8 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPSimpleEvapSpectrum.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPSimpleEvapSpectrum.hh @@ -29,79 +29,71 @@ #ifndef G4ParticleHPSimpleEvapSpectrum_h #define G4ParticleHPSimpleEvapSpectrum_h 1 -#include -#include - -#include "globals.hh" -#include "G4ios.hh" -#include "Randomize.hh" #include "G4Exp.hh" #include "G4Log.hh" #include "G4ParticleHPVector.hh" #include "G4VParticleHPEDis.hh" +#include "G4ios.hh" +#include "Randomize.hh" +#include "globals.hh" + +#include + +#include // we will need a List of these .... one per term. class G4ParticleHPSimpleEvapSpectrum : public G4VParticleHPEDis { public: - G4ParticleHPSimpleEvapSpectrum() - { - expm1 = G4Exp(-1.); - } - ~G4ParticleHPSimpleEvapSpectrum() - { - } - - inline void Init(std::istream & aDataFile) - { - theFractionalProb.Init(aDataFile, CLHEP::eV); - theThetaDist.Init(aDataFile, CLHEP::eV); - } - - inline G4double GetFractionalProbability(G4double anEnergy) - { - return theFractionalProb.GetY(anEnergy); - } - - inline G4double Sample(G4double anEnergy) - { - G4double theta = theThetaDist.GetY(anEnergy)*CLHEP::eV; - G4double random, cut, max, result=0.; - max = 10.*theta; - G4int icounter=0; - G4int icounter_max=1024; - do + G4ParticleHPSimpleEvapSpectrum() { expm1 = G4Exp(-1.); } + ~G4ParticleHPSimpleEvapSpectrum() override = default; + + inline void Init(std::istream& aDataFile) override + { + theFractionalProb.Init(aDataFile, CLHEP::eV); + theThetaDist.Init(aDataFile, CLHEP::eV); + } + + inline G4double GetFractionalProbability(G4double anEnergy) override + { + return theFractionalProb.GetY(anEnergy); + } + + inline G4double Sample(G4double anEnergy) override { - icounter++; - if ( icounter > icounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; - } - random = G4UniformRand(); - result = -theta*G4Log(random); - cut = G4UniformRand(); + G4double theta = theThetaDist.GetY(anEnergy) * CLHEP::eV; + G4double random, cut, max, result = 0.; + max = 10. * theta; + G4int icounter = 0; + G4int icounter_max = 1024; + do { + icounter++; + if (icounter > icounter_max) { + G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " + << __FILE__ << "." << G4endl; + break; + } + random = G4UniformRand(); + result = -theta * G4Log(random); + cut = G4UniformRand(); + } while (cut > result / max); // Loop checking, 11.05.2015, T. Koi + return result; } - while(cut>result/max); // Loop checking, 11.05.2015, T. Koi - return result; - } - + private: - - inline G4double Evapo(G4double anEnergy, G4double theta) - { - G4double result = (anEnergy*CLHEP::eV)*G4Exp(-anEnergy*CLHEP::eV/theta); - return result; - } - + inline G4double Evapo(G4double anEnergy, G4double theta) + { + G4double result = (anEnergy * CLHEP::eV) * G4Exp(-anEnergy * CLHEP::eV / theta); + return result; + } + private: - - G4double expm1; - - G4ParticleHPVector theFractionalProb; - - G4ParticleHPVector theThetaDist; - + G4double expm1; + + G4ParticleHPVector theFractionalProb; + + G4ParticleHPVector theThetaDist; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPT2AInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPT2AInelasticFS.hh index b2210e0c2a5..1bacd7fb66a 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPT2AInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPT2AInelasticFS.hh @@ -29,25 +29,25 @@ #ifndef G4ParticleHPT2AInelasticFS_h #define G4ParticleHPT2AInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPInelasticBaseFS.hh" +#include "globals.hh" class G4ParticleHPT2AInelasticFS : public G4ParticleHPInelasticBaseFS { public: - - G4ParticleHPT2AInelasticFS(); - ~G4ParticleHPT2AInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPT2AInelasticFS * theNew = new G4ParticleHPT2AInelasticFS; - return theNew; - } - + G4ParticleHPT2AInelasticFS(); + ~G4ParticleHPT2AInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPT2AInelasticFS; + return theNew; + } + private: }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPTCFissionFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPTCFissionFS.hh index d95ee78958b..c2fc99b2735 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPTCFissionFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPTCFissionFS.hh @@ -29,27 +29,26 @@ #ifndef G4ParticleHPTCFissionFS_h #define G4ParticleHPTCFissionFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4DynamicParticleVector.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPFissionBaseFS.hh" +#include "globals.hh" class G4ParticleHPTCFissionFS : public G4ParticleHPFissionBaseFS { public: - - G4ParticleHPTCFissionFS(){ hasXsec = false; } - ~G4ParticleHPTCFissionFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile ); - G4DynamicParticleVector * ApplyYourself(G4int NNeutrons); - G4ParticleHPFinalState * New() - { - G4ParticleHPTCFissionFS * theNew = new G4ParticleHPTCFissionFS; - return theNew; - } - + G4ParticleHPTCFissionFS() { hasXsec = false; } + ~G4ParticleHPTCFissionFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition* projectile) override; + G4DynamicParticleVector* ApplyYourself(G4int NNeutrons); + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPTCFissionFS; + return theNew; + } + private: - G4HadFinalState * ApplyYourself(const G4HadProjectile & ) { return 0; } - + G4HadFinalState* ApplyYourself(const G4HadProjectile&) override { return nullptr; } }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPTInelasticFS.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPTInelasticFS.hh index cdca0c1c52a..cb3bddc748f 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPTInelasticFS.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPTInelasticFS.hh @@ -29,30 +29,29 @@ #ifndef G4ParticleHPTInelasticFS_h #define G4ParticleHPTInelasticFS_h 1 -#include "globals.hh" -#include "G4HadProjectile.hh" #include "G4HadFinalState.hh" -#include "G4ParticleHPInelasticCompFS.hh" +#include "G4HadProjectile.hh" #include "G4ParticleHPAngular.hh" -#include "G4ParticleHPEnergyDistribution.hh" #include "G4ParticleHPEnAngCorrelation.hh" +#include "G4ParticleHPEnergyDistribution.hh" +#include "G4ParticleHPInelasticCompFS.hh" #include "G4ParticleHPPhotonDist.hh" +#include "globals.hh" class G4ParticleHPTInelasticFS : public G4ParticleHPInelasticCompFS { public: - - G4ParticleHPTInelasticFS(); - ~G4ParticleHPTInelasticFS(){} - void Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition*); - G4HadFinalState * ApplyYourself(const G4HadProjectile & theTrack); - G4ParticleHPFinalState * New() - { - G4ParticleHPTInelasticFS * theNew = new G4ParticleHPTInelasticFS; - return theNew; - } - + G4ParticleHPTInelasticFS(); + ~G4ParticleHPTInelasticFS() override = default; + void Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String& aFSType, + G4ParticleDefinition*) override; + G4HadFinalState* ApplyYourself(const G4HadProjectile& theTrack) override; + G4ParticleHPFinalState* New() override + { + auto theNew = new G4ParticleHPTInelasticFS; + return theNew; + } + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalBoost.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalBoost.hh index 6b97018f592..00a7e3830cf 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalBoost.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalBoost.hh @@ -31,49 +31,47 @@ #ifndef G4ParticleHPThermalBoost_h #define G4ParticleHPThermalBoost_h -#include "G4HadProjectile.hh" -#include "G4Element.hh" -#include "G4ReactionProduct.hh" -#include "G4Nucleus.hh" -#include "G4NucleiProperties.hh" #include "G4Electron.hh" +#include "G4Element.hh" +#include "G4HadProjectile.hh" #include "G4Neutron.hh" +#include "G4NucleiProperties.hh" +#include "G4Nucleus.hh" +#include "G4ReactionProduct.hh" class G4ParticleHPThermalBoost { -public: - G4double GetThermalEnergy(const G4HadProjectile & aP, - const G4Element * anE, - G4double aT) - { - G4double theA = anE->GetN(); - G4double theZ = anE->GetZ(); - return GetThermalEnergy(aP, theA ,theZ, aT); - } - - G4double GetThermalEnergy(const G4HadProjectile & aP, - G4double theA, G4double theZ, - G4double aT) - { - // prepare neutron - G4double eKinetic = aP.GetKineticEnergy(); - G4ReactionProduct theNeutronRP( const_cast(aP.GetDefinition()) ); - theNeutronRP.SetMomentum( aP.Get4Momentum().vect() ); - theNeutronRP.SetKineticEnergy( eKinetic ); - G4ThreeVector neuVelo = (1./aP.GetDefinition()->GetPDGMass())*theNeutronRP.GetMomentum(); + public: + G4double GetThermalEnergy(const G4HadProjectile& aP, const G4Element* anE, G4double aT) + { + G4double theA = anE->GetN(); + G4double theZ = anE->GetZ(); + return GetThermalEnergy(aP, theA, theZ, aT); + } + + G4double GetThermalEnergy(const G4HadProjectile& aP, G4double theA, G4double theZ, G4double aT) + { + // prepare neutron + G4double eKinetic = aP.GetKineticEnergy(); + G4ReactionProduct theNeutronRP(const_cast(aP.GetDefinition())); + theNeutronRP.SetMomentum(aP.Get4Momentum().vect()); + theNeutronRP.SetKineticEnergy(eKinetic); + G4ThreeVector neuVelo = (1. / aP.GetDefinition()->GetPDGMass()) * theNeutronRP.GetMomentum(); + + // prepare properly biased thermal nucleus + G4Nucleus aNuc; + G4double eps = 0.0001; + G4double eleMass; + eleMass = (G4NucleiProperties::GetNuclearMass(static_cast(theA + eps), + static_cast(theZ + eps))) + / G4Neutron::Neutron()->GetPDGMass(); + + G4ReactionProduct aThermalNuc = aNuc.GetBiasedThermalNucleus(eleMass, neuVelo, aT); - // prepare properly biased thermal nucleus - G4Nucleus aNuc; - G4double eps = 0.0001; - G4double eleMass; - eleMass = ( G4NucleiProperties::GetNuclearMass( static_cast(theA+eps) , static_cast(theZ+eps) ) ) / G4Neutron::Neutron()->GetPDGMass(); - - G4ReactionProduct aThermalNuc = aNuc.GetBiasedThermalNucleus(eleMass, neuVelo, aT); - - // boost to rest system and return - G4ReactionProduct boosted; - boosted.Lorentz(theNeutronRP, aThermalNuc); - return boosted.GetKineticEnergy(); - } + // boost to rest system and return + G4ReactionProduct boosted; + boosted.Lorentz(theNeutronRP, aThermalNuc); + return boosted.GetKineticEnergy(); + } }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScattering.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScattering.hh index 21dc5749587..e52555034a6 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScattering.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScattering.hh @@ -42,117 +42,122 @@ // the corresponding process. // Class Description - End -#include "globals.hh" -#include "G4ParticleHPThermalScatteringNames.hh" #include "G4HadronicInteraction.hh" +#include "G4ParticleHPThermalScatteringNames.hh" +#include "globals.hh" class G4ParticleHPThermalScatteringData; class G4ParticleHPElastic; -struct E_isoAng +struct E_isoAng { - G4double energy; - G4int n; - std::vector < G4double > isoAngle; - E_isoAng() { - energy=0.0; - n=0; - }; + G4double energy; + G4int n; + std::vector isoAngle; + E_isoAng() + { + energy = 0.0; + n = 0; + }; }; -struct E_P_E_isoAng +struct E_P_E_isoAng { - G4double energy; - G4int n; - std::vector < G4double > prob; - std::vector < E_isoAng* > vE_isoAngle; - G4double sum_of_probXdEs; // should be close to 1 - std::vector< G4double > secondary_energy_cdf; - std::vector< G4double > secondary_energy_pdf; - std::vector< G4double > secondary_energy_value; - G4int secondary_energy_cdf_size; - E_P_E_isoAng() { - energy=0.0; - n=0; - sum_of_probXdEs=0.0; - secondary_energy_cdf_size=0; - }; + G4double energy; + G4int n; + std::vector prob; + std::vector vE_isoAngle; + G4double sum_of_probXdEs; // should be close to 1 + std::vector secondary_energy_cdf; + std::vector secondary_energy_pdf; + std::vector secondary_energy_value; + G4int secondary_energy_cdf_size; + E_P_E_isoAng() + { + energy = 0.0; + n = 0; + sum_of_probXdEs = 0.0; + secondary_energy_cdf_size = 0; + }; }; class G4ParticleHPThermalScattering : public G4HadronicInteraction { - public: - - G4ParticleHPThermalScattering(); - - ~G4ParticleHPThermalScattering(); - - G4HadFinalState * ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& aTargetNucleus); + public: + G4ParticleHPThermalScattering(); + + ~G4ParticleHPThermalScattering() override; + + G4HadFinalState* ApplyYourself(const G4HadProjectile& aTrack, + G4Nucleus& aTargetNucleus) override; - virtual const std::pair GetFatalEnergyCheckLevels() const; + const std::pair GetFatalEnergyCheckLevels() const override; - //For user prepared thermal files - //Name of G4Element , Name of NDL file - void AddUserThermalScatteringFile( G4String , G4String ); + // For user prepared thermal files + // Name of G4Element , Name of NDL file + void AddUserThermalScatteringFile(G4String, G4String); - void BuildPhysicsTable(const G4ParticleDefinition&); + void BuildPhysicsTable(const G4ParticleDefinition&) override; - virtual void ModelDescription(std::ostream& outFile) const; + void ModelDescription(std::ostream& outFile) const override; - private: + private: + void clearCurrentFSData(); - void clearCurrentFSData(); + G4ParticleHPThermalScatteringNames names; - G4ParticleHPThermalScatteringNames names; + // Coherent Elastic + // ElementID temp BraggE cumulativeP + std::map*>*>*>* coherentFSs{ + nullptr}; + std::map*>*>* readACoherentFSDATA(G4String); - // Coherent Elastic - // ElementID temp BraggE cumulativeP - std::map < G4int , std::map < G4double , std::vector < std::pair< G4double , G4double >* >* >* >* coherentFSs; - std::map < G4double , std::vector < std::pair< G4double , G4double >* >* >* readACoherentFSDATA( G4String ); + // Incoherent Elastic + // ElementID temp aFS for this temp (and this element) + std::map*>*>* incoherentFSs{nullptr}; + std::map*>* readAnIncoherentFSDATA(G4String); + E_isoAng* readAnE_isoAng(std::istream*); - // Incoherent Elastic - // ElementID temp aFS for this temp (and this element) - std::map < G4int , std::map < G4double , std::vector < E_isoAng* >* >* >* incoherentFSs; - std::map < G4double , std::vector < E_isoAng* >* >* readAnIncoherentFSDATA( G4String ); - E_isoAng* readAnE_isoAng ( std::istream* ); + // Inelastic + // ElementID temp aFS for this temp (and this element) + std::map*>*>* inelasticFSs{nullptr}; + std::map*>* readAnInelasticFSDATA(G4String); + E_P_E_isoAng* readAnE_P_E_isoAng(std::istream*); - // Inelastic - // ElementID temp aFS for this temp (and this element) - std::map < G4int , std::map < G4double , std::vector < E_P_E_isoAng* >* >* >* inelasticFSs; - std::map < G4double , std::vector < E_P_E_isoAng* >* >* readAnInelasticFSDATA( G4String ); - E_P_E_isoAng* readAnE_P_E_isoAng ( std::istream* ); - - G4ParticleHPThermalScatteringData* theXSection; + G4ParticleHPThermalScatteringData* theXSection; - G4ParticleHPElastic* theHPElastic; - - G4double getMu ( E_isoAng* ); - G4double getMu ( G4double rndm1 , G4double rndm2 , E_isoAng* anEPM ); + G4ParticleHPElastic* theHPElastic; - std::pair< G4double , G4double > find_LH ( G4double , std::vector* ); - G4double get_linear_interpolated ( G4double , std::pair < G4double , G4double > , std::pair < G4double , G4double > ); + G4double getMu(E_isoAng*); + G4double getMu(G4double rndm1, G4double rndm2, E_isoAng* anEPM); - E_isoAng create_E_isoAng_from_energy( G4double , std::vector< E_isoAng* >* ); + std::pair find_LH(G4double, std::vector*); + G4double get_linear_interpolated(G4double, std::pair, + std::pair); - G4double get_secondary_energy_from_E_P_E_isoAng ( G4double random , E_P_E_isoAng* anE_P_E_isoAng ); + E_isoAng create_E_isoAng_from_energy(G4double, std::vector*); - std::pair< G4double, G4double > sample_inelastic_E_mu( G4double pE , std::vector< E_P_E_isoAng* >* vNEP_EPM ); - std::pair< G4double, G4int > sample_inelastic_E( G4double rndm1 , G4double rndm2 , E_P_E_isoAng* anE_P_E_isoAng ); + G4double get_secondary_energy_from_E_P_E_isoAng(G4double random, E_P_E_isoAng* anE_P_E_isoAng); - std::pair< G4double , E_isoAng > create_sE_and_EPM_from_pE_and_vE_P_E_isoAng ( G4double , G4double , std::vector < E_P_E_isoAng* >* ); + std::pair sample_inelastic_E_mu(G4double pE, + std::vector* vNEP_EPM); + std::pair sample_inelastic_E(G4double rndm1, G4double rndm2, + E_P_E_isoAng* anE_P_E_isoAng); - std::map < std::pair < const G4Material* , const G4Element* > , G4int > dic; - void buildPhysicsTable(); - G4int getTS_ID( const G4Material* , const G4Element* ); + std::pair + create_sE_and_EPM_from_pE_and_vE_P_E_isoAng(G4double, G4double, std::vector*); - //size_t sizeOfMaterialTable; + std::map, G4int> dic; + void buildPhysicsTable(); + G4int getTS_ID(const G4Material*, const G4Element*); - G4bool check_E_isoAng( E_isoAng* ); + // size_t sizeOfMaterialTable; - //In order to judge whether the rebuilding of physics table is a necessity or not - size_t nMaterial; - size_t nElement; + G4bool check_E_isoAng(E_isoAng*); + // In order to judge whether the rebuilding of physics table is a necessity or not + size_t nMaterial; + size_t nElement; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScatteringData.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScatteringData.hh index b61a156d251..99d4ba6c239 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScatteringData.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScatteringData.hh @@ -46,86 +46,80 @@ // 070625 create clearCurrentXSData to fix memory leaking by T. Koi // 080417 Add IsZAApplicable method (return false) by T. Koi -#include "G4ParticleHPThermalScatteringNames.hh" -#include "G4ParticleHPVector.hh" -#include "G4VCrossSectionDataSet.hh" #include "G4DynamicParticle.hh" #include "G4Element.hh" #include "G4Material.hh" #include "G4ParticleDefinition.hh" -//#include "G4PhysicsTable.hh" +#include "G4ParticleHPThermalScatteringNames.hh" +#include "G4ParticleHPVector.hh" +#include "G4VCrossSectionDataSet.hh" +// #include "G4PhysicsTable.hh" -#include -#include +#include +#include class G4ParticleHPThermalScatteringData : public G4VCrossSectionDataSet { + public: + G4ParticleHPThermalScatteringData(); - public: + ~G4ParticleHPThermalScatteringData() override; - G4ParticleHPThermalScatteringData(); - - ~G4ParticleHPThermalScatteringData(); + G4bool IsIsoApplicable(const G4DynamicParticle*, G4int /*Z*/, G4int /*A*/, + const G4Element* /*elm*/, const G4Material* /*mat*/) override; - G4bool IsIsoApplicable( const G4DynamicParticle* , - G4int /*Z*/ , G4int /*A*/ , - const G4Element* /*elm*/ , - const G4Material* /*mat*/ ); + G4double GetIsoCrossSection(const G4DynamicParticle*, G4int /*Z*/, G4int /*A*/, + const G4Isotope* /*iso*/, const G4Element* /*elm*/, + const G4Material* /*mat*/) override; - G4double GetIsoCrossSection( const G4DynamicParticle* , - G4int /*Z*/ , G4int /*A*/ , - const G4Isotope* /*iso*/ , - const G4Element* /*elm*/ , - const G4Material* /*mat*/ ); - - G4bool IsApplicable(const G4DynamicParticle*, const G4Element*); + G4bool IsApplicable(const G4DynamicParticle*, const G4Element*); - //G4bool IsZAApplicable( const G4DynamicParticle* , G4double /*ZZ*/, G4double /*AA*/) - //{ return false;} + // G4bool IsZAApplicable( const G4DynamicParticle* , G4double /*ZZ*/, G4double /*AA*/) + //{ return false;} - G4double GetCrossSection(const G4DynamicParticle*, const G4Element*, const G4Material* ); - G4double GetInelasticCrossSection(const G4DynamicParticle*, const G4Element*, const G4Material*); - G4double GetCoherentCrossSection(const G4DynamicParticle*, const G4Element*, const G4Material*); - G4double GetIncoherentCrossSection(const G4DynamicParticle*, const G4Element*, const G4Material*); + G4double GetCrossSection(const G4DynamicParticle*, const G4Element*, const G4Material*); + G4double GetInelasticCrossSection(const G4DynamicParticle*, const G4Element*, + const G4Material*); + G4double GetCoherentCrossSection(const G4DynamicParticle*, const G4Element*, const G4Material*); + G4double GetIncoherentCrossSection(const G4DynamicParticle*, const G4Element*, + const G4Material*); - void BuildPhysicsTable(const G4ParticleDefinition&); + void BuildPhysicsTable(const G4ParticleDefinition&) override; - void DumpPhysicsTable(const G4ParticleDefinition&); + void DumpPhysicsTable(const G4ParticleDefinition&) override; - //For user prepared thermal files - //Name of G4Element , Name of NDL file - void AddUserThermalScatteringFile( G4String , G4String ); - - virtual void CrossSectionDescription(std::ostream&) const; + // For user prepared thermal files + // Name of G4Element , Name of NDL file + void AddUserThermalScatteringFile(G4String, G4String); - private: + void CrossSectionDescription(std::ostream&) const override; - G4double GetX ( const G4DynamicParticle* , G4double aT , std::map< G4double , G4ParticleHPVector* >* ); + private: + G4double GetX(const G4DynamicParticle*, G4double aT, std::map*); - G4double emax; - - void clearCurrentXSData(); + G4double emax; -// element temp x section from E - std::map< G4int , std::map< G4double , G4ParticleHPVector* >* >* coherent; - std::map< G4int , std::map< G4double , G4ParticleHPVector* >* >* incoherent; - std::map< G4int , std::map< G4double , G4ParticleHPVector* >* >* inelastic; + void clearCurrentXSData(); - std::map< G4double , G4ParticleHPVector* >* readData ( G4String ); + // element temp x section from E + std::map*>* coherent{nullptr}; + std::map*>* incoherent{nullptr}; + std::map*>* inelastic{nullptr}; - std::vector < G4int > indexOfThermalElement; - G4ParticleHPThermalScatteringNames* names; -// G4Element NDL name -// std::map< G4String , G4String > names; + std::map* readData(G4String); - G4double ke_cache; - G4double xs_cache; - const G4Element* element_cache; - const G4Material* material_cache; + std::vector indexOfThermalElement; + G4ParticleHPThermalScatteringNames* names; + // G4Element NDL name + // std::map< G4String , G4String > names; - std::map < std::pair < const G4Material* , const G4Element* > , G4int > dic; - G4int getTS_ID( const G4Material* , const G4Element* ); + G4double ke_cache; + G4double xs_cache; + const G4Element* element_cache; + const G4Material* material_cache; + std::map, G4int> dic; + G4int getTS_ID(const G4Material*, const G4Element*); }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScatteringNames.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScatteringNames.hh index 6a7b58f9fdc..113a4dbbe36 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScatteringNames.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThermalScatteringNames.hh @@ -31,46 +31,47 @@ // Class Description // Name list of Elements for a high precision (based on evaluated data -// libraries) description of themal neutron scattering below 4 eV; -// Based on Thermal neutron scattering files +// libraries) description of themal neutron scattering below 4 eV; +// Based on Thermal neutron scattering files // from the evaluated nuclear data files ENDF/B-VI, Release2 // To be used in your physics list in case you need this physics. -// In this case you want to register an object of this class with +// In this case you want to register an object of this class with // the corresponding process. // Class Description - End // 15-Nov-06 First implementation is done by T. Koi (SLAC/SCCS) #include "globals.hh" -#include -class G4ParticleHPThermalScatteringNames +#include + +class G4ParticleHPThermalScatteringNames { - public: - - G4ParticleHPThermalScatteringNames(); - - ~G4ParticleHPThermalScatteringNames(); + public: + G4ParticleHPThermalScatteringNames(); - G4bool IsThisThermalElement ( G4String ); - G4bool IsThisThermalElement ( G4String , G4String ); - size_t GetSize() { return names.size(); }; - G4String GetTS_NDL_Name( G4String nameG4Element ) { return names.find ( nameG4Element )->second; }; - G4String GetTS_NDL_Name( G4String material , G4String element ) { return nist_names.find ( std::pair< G4String , G4String > ( material , element ) )->second; }; - //G4String GetTS_G4E_Name( G4int i ) { return names[i]->first; }; + ~G4ParticleHPThermalScatteringNames(); - //For user prepared thermal files - //Name of G4Element , Name of NDL file - void AddThermalElement ( G4String , G4String ); - - private: + G4bool IsThisThermalElement(G4String); + G4bool IsThisThermalElement(G4String, G4String); + size_t GetSize() { return names.size(); }; + G4String GetTS_NDL_Name(G4String nameG4Element) { return names.find(nameG4Element)->second; }; + G4String GetTS_NDL_Name(G4String material, G4String element) + { + return nist_names.find(std::pair(material, element))->second; + }; + // G4String GetTS_G4E_Name( G4int i ) { return names[i]->first; }; -// G4Element NDL name - std::map< G4String , G4String > names; + // For user prepared thermal files + // Name of G4Element , Name of NDL file + void AddThermalElement(G4String, G4String); -// G4Material G4Element NDL name - std::map< std::pair < G4String , G4String > , G4String > nist_names; + private: + // G4Element NDL name + std::map names; + // G4Material G4Element NDL name + std::map, G4String> nist_names; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThreadLocalManager.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThreadLocalManager.hh index 94783f6333e..67803fccfe2 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThreadLocalManager.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPThreadLocalManager.hh @@ -27,33 +27,32 @@ #define G4ParticleHPThreadLocalManager_h 1 // Class Description -// ThreadLocalManager of NeutronHP +// ThreadLocalManager of NeutronHP // Class Description - End // 140825 First implementation done by T. Koi (SLAC/PPA) // -#include "globals.hh" #include "G4ThreadLocalSingleton.hh" +#include "globals.hh" class G4ParticleHPReactionWhiteBoard; -class G4ParticleHPThreadLocalManager +class G4ParticleHPThreadLocalManager { - friend class G4ThreadLocalSingleton; + friend class G4ThreadLocalSingleton; - public: - static G4ParticleHPThreadLocalManager* GetInstance(); - G4ParticleHPReactionWhiteBoard* GetReactionWhiteBoard(); - void OpenReactionWhiteBoard(); - void CloseReactionWhiteBoard(); + public: + static G4ParticleHPThreadLocalManager* GetInstance(); + G4ParticleHPReactionWhiteBoard* GetReactionWhiteBoard(); + void OpenReactionWhiteBoard(); + void CloseReactionWhiteBoard(); - private: - G4ParticleHPThreadLocalManager(); - G4ParticleHPThreadLocalManager( const G4ParticleHPThreadLocalManager& ); - ~G4ParticleHPThreadLocalManager(); + private: + G4ParticleHPThreadLocalManager(); + G4ParticleHPThreadLocalManager(const G4ParticleHPThreadLocalManager&); + ~G4ParticleHPThreadLocalManager() = default; - private: - G4ParticleHPReactionWhiteBoard* RWB; - + private: + G4ParticleHPReactionWhiteBoard* RWB{nullptr}; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPVector.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPVector.hh index c42d69855fa..a84e68f5dda 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPVector.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPVector.hh @@ -34,550 +34,502 @@ #ifndef G4ParticleHPVector_h #define G4ParticleHPVector_h 1 -#include "G4ParticleHPDataPoint.hh" -#include "G4PhysicsVector.hh" -#include "G4ParticleHPInterpolator.hh" -#include "Randomize.hh" -#include "G4ios.hh" -#include -#include "G4InterpolationManager.hh" #include "G4Exp.hh" +#include "G4InterpolationManager.hh" #include "G4Log.hh" -#include "G4Pow.hh" -#include "G4ParticleHPInterpolator.hh" +#include "G4ParticleHPDataPoint.hh" #include "G4ParticleHPHash.hh" +#include "G4ParticleHPInterpolator.hh" +#include "G4PhysicsVector.hh" +#include "G4Pow.hh" +#include "G4ios.hh" +#include "Randomize.hh" + #include +#include #include -#if defined WIN32-VC - #include +#if defined WIN32 - VC +# include #endif class G4ParticleHPVector { - friend G4ParticleHPVector & operator + (G4ParticleHPVector & left, - G4ParticleHPVector & right); - + friend G4ParticleHPVector& operator+(G4ParticleHPVector& left, G4ParticleHPVector& right); + public: - - G4ParticleHPVector(); - - G4ParticleHPVector(G4int n); - - ~G4ParticleHPVector(); - - G4ParticleHPVector & operator = (const G4ParticleHPVector & right); - - inline void SetVerbose(G4int ff) - { - Verbose = ff; - } - - inline void Times(G4double factor) - { - G4int i; - for(i=0; imaxValue) maxValue=y; - theData[i].SetData(x, y); - } - inline void SetX(G4int i, G4double e) - { - Check(i); - theData[i].SetX(e); - } - inline void SetEnergy(G4int i, G4double e) - { - Check(i); - theData[i].SetX(e); - } - inline void SetY(G4int i, G4double x) - { - Check(i); - if(x>maxValue) maxValue=x; - theData[i].SetY(x); - } - inline void SetXsec(G4int i, G4double x) - { - Check(i); - if(x>maxValue) maxValue=x; - theData[i].SetY(x); - } - inline G4double GetEnergy(G4int i) const { return theData[i].GetX(); } - inline G4double GetXsec(G4int i) { return theData[i].GetY(); } - inline G4double GetX(G4int i) const - { - if (i<0) i=0; - if(i>=GetVectorLength()) i=GetVectorLength()-1; - return theData[i].GetX(); - } - inline const G4ParticleHPDataPoint & GetPoint(G4int i) const { return theData[i]; } - - void Hash() - { - G4int i; - G4double x, y; - for(i=0 ; i maxValue) maxValue = y; + theData[i].SetData(x, y); } - } - - void ReHash() - { - theHash.Clear(); - Hash(); - } - - G4double GetXsec(G4double e); - G4double GetXsec(G4double e, G4int min) - { - G4int i; - for(i=min ; ie) break; + Check(i); + theData[i].SetX(e); } - G4int low = i-1; - G4int high = i; - if(i==0) + inline void SetEnergy(G4int i, G4double e) { - low = 0; - high = 1; + Check(i); + theData[i].SetX(e); } - else if(i==nEntries) + inline void SetY(G4int i, G4double x) { - low = nEntries-2; - high = nEntries-1; + Check(i); + if (x > maxValue) maxValue = x; + theData[i].SetY(x); } - G4double y; - if(e maxValue) maxValue = x; + theData[i].SetY(x); } - else + inline G4double GetEnergy(G4int i) const { return theData[i].GetX(); } + inline G4double GetXsec(G4int i) { return theData[i].GetY(); } + inline G4double GetX(G4int i) const { - y=theData[nEntries-1].GetY(); + if (i < 0) i = 0; + if (i >= GetVectorLength()) i = GetVectorLength() - 1; + return theData[i].GetX(); } - return y; - } - - inline G4double GetY(G4double x) {return GetXsec(x);} - inline G4int GetVectorLength() const {return nEntries;} - - inline G4double GetY(G4int i) - { - if (i<0) i=0; - if(i>=GetVectorLength()) i=GetVectorLength()-1; - return theData[i].GetY(); - } - - inline G4double GetY(G4int i) const - { - if (i<0) i=0; - if(i>=GetVectorLength()) i=GetVectorLength()-1; - return theData[i].GetY(); - } - void Dump(); - - inline void InitInterpolation(std::istream & aDataFile) - { - theManager.Init(aDataFile); - } - - void Init(std::istream & aDataFile, G4int total, G4double ux=1., G4double uy=1.) - { - G4double x,y; - for (G4int i=0;i> x >> y; - x*=ux; - y*=uy; - SetData(i,x,y); - if(0 == nEntries%10) - { - theHash.SetData(nEntries-1, x, y); + G4int i; + G4double x, y; + for (i = 0; i < nEntries; i++) { + if (0 == (i + 1) % 10) { + x = GetX(i); + y = GetY(i); + theHash.SetData(i, x, y); + } } } - } - - void Init(std::istream & aDataFile,G4double ux=1., G4double uy=1.) - { - G4int total; - aDataFile >> total; - if(theData!=0) delete [] theData; - theData = new G4ParticleHPDataPoint[total]; - nPoints=total; - nEntries=0; - theManager.Init(aDataFile); - Init(aDataFile, total, ux, uy); - } - - void ThinOut(G4double precision); - - inline void SetLabel(G4double aLabel) - { - label = aLabel; - } - - inline G4double GetLabel() - { - return label; - } - - inline void CleanUp() - { - nEntries=0; - theManager.CleanUp(); - maxValue = -DBL_MAX; - theHash.Clear(); -//080811 TK DB - delete[] theIntegral; - theIntegral = NULL; - } - - // merges the vectors active and passive into *this - inline void Merge(G4ParticleHPVector * active, G4ParticleHPVector * passive) - { - CleanUp(); - G4int s_tmp = 0, n=0, m_tmp=0; - G4ParticleHPVector * tmp; - G4int a = s_tmp, p = n, t; - while (aGetVectorLength()&&pGetVectorLength()) // Loop checking, 11.05.2015, T. Koi + + void ReHash() { - if(active->GetEnergy(a) <= passive->GetEnergy(p)) - { - G4double xa = active->GetEnergy(a); - G4double yy = active->GetXsec(a); - SetData(m_tmp, xa, yy); - theManager.AppendScheme(m_tmp, active->GetScheme(a)); - m_tmp++; - a++; - G4double xp = passive->GetEnergy(p); - -//080409 TKDB - //if( std::abs(std::abs(xp-xa)/xa)<0.001 ) p++; - if ( !( xa == 0 ) && std::abs(std::abs(xp-xa)/xa)<0.001 ) p++; - } else { - tmp = active; - t=a; - active = passive; - a=p; - passive = tmp; - p=t; + theHash.Clear(); + Hash(); + } + + G4double GetXsec(G4double e); + G4double GetXsec(G4double e, G4int min) + { + G4int i; + for (i = min; i < nEntries; i++) { + if (theData[i].GetX() > e) break; + } + G4int low = i - 1; + G4int high = i; + if (i == 0) { + low = 0; + high = 1; + } + else if (i == nEntries) { + low = nEntries - 2; + high = nEntries - 1; } + G4double y; + if (e < theData[nEntries - 1].GetX()) { + // Protect against doubled-up x values + if ((theData[high].GetX() - theData[low].GetX()) / theData[high].GetX() < 0.000001) { + y = theData[low].GetY(); + } + else { + y = theInt.Interpolate(theManager.GetScheme(high), e, theData[low].GetX(), + theData[high].GetX(), theData[low].GetY(), theData[high].GetY()); + } + } + else { + y = theData[nEntries - 1].GetY(); + } + return y; } - while (a!=active->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi + + inline G4double GetY(G4double x) { return GetXsec(x); } + inline G4int GetVectorLength() const { return nEntries; } + + inline G4double GetY(G4int i) { - SetData(m_tmp, active->GetEnergy(a), active->GetXsec(a)); - theManager.AppendScheme(m_tmp++, active->GetScheme(a)); - a++; + if (i < 0) i = 0; + if (i >= GetVectorLength()) i = GetVectorLength() - 1; + return theData[i].GetY(); } - while (p!=passive->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi + + inline G4double GetY(G4int i) const { - if(std::abs(GetEnergy(m_tmp-1)-passive->GetEnergy(p))/passive->GetEnergy(p)>0.001) - //if(std::abs(GetEnergy(m)-passive->GetEnergy(p))/passive->GetEnergy(p)>0.001) - { - SetData(m_tmp, passive->GetEnergy(p), passive->GetXsec(p)); - theManager.AppendScheme(m_tmp++, active->GetScheme(p)); + if (i < 0) i = 0; + if (i >= GetVectorLength()) i = GetVectorLength() - 1; + return theData[i].GetY(); + } + void Dump(); + + inline void InitInterpolation(std::istream& aDataFile) { theManager.Init(aDataFile); } + + void Init(std::istream& aDataFile, G4int total, G4double ux = 1., G4double uy = 1.) + { + G4double x, y; + for (G4int i = 0; i < total; i++) { + aDataFile >> x >> y; + x *= ux; + y *= uy; + SetData(i, x, y); + if (0 == nEntries % 10) { + theHash.SetData(nEntries - 1, x, y); + } } - p++; } - } - - void Merge(G4InterpolationScheme aScheme, G4double aValue, - G4ParticleHPVector * active, G4ParticleHPVector * passive); - - G4double SampleLin() // Samples X according to distribution Y, linear int - { - G4double result; - if(theIntegral==0) IntegrateAndNormalise(); - if(GetVectorLength()==1) + + void Init(std::istream& aDataFile, G4double ux = 1., G4double uy = 1.) { - result = theData[0].GetX(); + G4int total; + aDataFile >> total; + delete[] theData; + theData = new G4ParticleHPDataPoint[total]; + nPoints = total; + nEntries = 0; + theManager.Init(aDataFile); + Init(aDataFile, total, ux, uy); } - else + + void ThinOut(G4double precision); + + inline void SetLabel(G4double aLabel) { label = aLabel; } + + inline G4double GetLabel() { return label; } + + inline void CleanUp() { - G4int i; - G4double rand = G4UniformRand(); - - // this was replaced -// for(i=1;i=0 ;i--) + nEntries = 0; + theManager.CleanUp(); + maxValue = -DBL_MAX; + theHash.Clear(); + // 080811 TK DB + delete[] theIntegral; + theIntegral = nullptr; + } + + // merges the vectors active and passive into *this + inline void Merge(G4ParticleHPVector* active, G4ParticleHPVector* passive) + { + CleanUp(); + G4int s_tmp = 0, n = 0, m_tmp = 0; + G4ParticleHPVector* tmp; + G4int a = s_tmp, p = n, t; + while (a < active->GetVectorLength() + && p < passive->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi + { + if (active->GetEnergy(a) <= passive->GetEnergy(p)) { + G4double xa = active->GetEnergy(a); + G4double yy = active->GetXsec(a); + SetData(m_tmp, xa, yy); + theManager.AppendScheme(m_tmp, active->GetScheme(a)); + m_tmp++; + a++; + G4double xp = passive->GetEnergy(p); + + // 080409 TKDB + // if( std::abs(std::abs(xp-xa)/xa)<0.001 ) p++; + if (!(xa == 0) && std::abs(std::abs(xp - xa) / xa) < 0.001) p++; + } + else { + tmp = active; + t = a; + active = passive; + a = p; + passive = tmp; + p = t; + } + } + while (a != active->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi { - if(rand>theIntegral[i]/theIntegral[GetVectorLength()-1]) break; + SetData(m_tmp, active->GetEnergy(a), active->GetXsec(a)); + theManager.AppendScheme(m_tmp++, active->GetScheme(a)); + a++; } - if(i!=GetVectorLength()-1) i++; -// until this (end) - - G4double x1, x2, y1, y2; - y1 = theData[i-1].GetX(); - x1 = theIntegral[i-1]; - y2 = theData[i].GetX(); - x2 = theIntegral[i]; - if(std::abs((y2-y1)/y2)<0.0000001) // not really necessary, since the case is excluded by construction + while (p != passive->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi { - y1 = theData[i-2].GetX(); - x1 = theIntegral[i-2]; + if (std::abs(GetEnergy(m_tmp - 1) - passive->GetEnergy(p)) / passive->GetEnergy(p) > 0.001) + // if(std::abs(GetEnergy(m)-passive->GetEnergy(p))/passive->GetEnergy(p)>0.001) + { + SetData(m_tmp, passive->GetEnergy(p), passive->GetXsec(p)); + theManager.AppendScheme(m_tmp++, active->GetScheme(p)); + } + p++; } - result = theLin.Lin(rand, x1, x2, y1, y2); } - return result; - } - - G4double Sample(); // Samples X according to distribution Y - - G4double * Debug() - { - return theIntegral; - } - - inline void IntegrateAndNormalise() - { - G4int i; - if(theIntegral!=0) return; - theIntegral = new G4double[nEntries]; - if(nEntries == 1) + + void Merge(G4InterpolationScheme aScheme, G4double aValue, G4ParticleHPVector* active, + G4ParticleHPVector* passive); + + G4double SampleLin() // Samples X according to distribution Y, linear int { - theIntegral[0] = 1; - return; + G4double result; + if (theIntegral == nullptr) IntegrateAndNormalise(); + if (GetVectorLength() == 1) { + result = theData[0].GetX(); + } + else { + G4int i; + G4double rand = G4UniformRand(); + + // this was replaced + // for(i=1;i= 0; i--) { + if (rand > theIntegral[i] / theIntegral[GetVectorLength() - 1]) break; + } + if (i != GetVectorLength() - 1) i++; + // until this (end) + + G4double x1, x2, y1, y2; + y1 = theData[i - 1].GetX(); + x1 = theIntegral[i - 1]; + y2 = theData[i].GetX(); + x2 = theIntegral[i]; + if (std::abs((y2 - y1) / y2) + < 0.0000001) // not really necessary, since the case is excluded by construction + { + y1 = theData[i - 2].GetX(); + x1 = theIntegral[i - 2]; + } + result = theLin.Lin(rand, x1, x2, y1, y2); + } + return result; } - theIntegral[0] = 0; - G4double sum = 0; - G4double x1 = 0; - G4double x0 = 0; - for(i=1;i std::abs(x1*0.0000001) ) - { - //******************************************************************** - //EMendoza -> the interpolation scheme is not always lin-lin - /* - sum+= 0.5*(theData[i].GetY()+theData[i-1].GetY())* - (x1-x0); - */ - //******************************************************************** - G4InterpolationScheme aScheme = theManager.GetScheme(i); - G4double y0 = theData[i-1].GetY(); - G4double y1 = theData[i].GetY(); - G4double integ=theInt.GetBinIntegral(aScheme,x0,x1,y0,y1); -#if defined WIN32-VC - if(!_finite(integ)){integ=0;} + G4int i; + if (theIntegral != nullptr) return; + theIntegral = new G4double[nEntries]; + if (nEntries == 1) { + theIntegral[0] = 1; + return; + } + theIntegral[0] = 0; + G4double sum = 0; + G4double x1 = 0; + G4double x0 = 0; + for (i = 1; i < GetVectorLength(); i++) { + x1 = theData[i].GetX(); + x0 = theData[i - 1].GetX(); + if (std::abs(x1 - x0) > std::abs(x1 * 0.0000001)) { + //******************************************************************** + // EMendoza -> the interpolation scheme is not always lin-lin + /* + sum+= 0.5*(theData[i].GetY()+theData[i-1].GetY())* + (x1-x0); + */ + //******************************************************************** + G4InterpolationScheme aScheme = theManager.GetScheme(i); + G4double y0 = theData[i - 1].GetY(); + G4double y1 = theData[i].GetY(); + G4double integ = theInt.GetBinIntegral(aScheme, x0, x1, y0, y1); +#if defined WIN32 - VC + if (!_finite(integ)) { + integ = 0; + } #elif defined __IBMCPP__ - if(isinf(integ)||isnan(integ)){integ=0;} + if (isinf(integ) || isnan(integ)) { + integ = 0; + } #else - if(std::isinf(integ)||std::isnan(integ)){integ=0;} + if (std::isinf(integ) || std::isnan(integ)) { + integ = 0; + } #endif - sum+=integ; - //******************************************************************** + sum += integ; + //******************************************************************** + } + theIntegral[i] = sum; + } + G4double total = theIntegral[GetVectorLength() - 1]; + for (i = 1; i < GetVectorLength(); i++) { + theIntegral[i] /= total; } - theIntegral[i] = sum; } - G4double total = theIntegral[GetVectorLength()-1]; - for(i=1;i 0.0000001) { + G4double x1 = theData[i - 1].GetX(); + G4double x2 = theData[i].GetX(); + G4double y1 = theData[i - 1].GetY(); + G4double y2 = theData[i].GetY(); + G4InterpolationScheme aScheme = theManager.GetScheme(i); + if (aScheme == LINLIN || aScheme == CLINLIN || aScheme == ULINLIN) { + sum += 0.5 * (y2 + y1) * (x2 - x1); + } + else if (aScheme == LINLOG || aScheme == CLINLOG || aScheme == ULINLOG) { + G4double a = y1; + G4double b = (y2 - y1) / (G4Log(x2) - G4Log(x1)); + sum += (a - b) * (x2 - x1) + b * (x2 * G4Log(x2) - x1 * G4Log(x1)); + } + else if (aScheme == LOGLIN || aScheme == CLOGLIN || aScheme == ULOGLIN) { + G4double a = G4Log(y1); + G4double b = (G4Log(y2) - G4Log(y1)) / (x2 - x1); + sum += (G4Exp(a) / b) * (G4Exp(b * x2) - G4Exp(b * x1)); + } + else if (aScheme == HISTO || aScheme == CHISTO || aScheme == UHISTO) { + sum += y1 * (x2 - x1); + } + else if (aScheme == LOGLOG || aScheme == CLOGLOG || aScheme == ULOGLOG) { + G4double a = G4Log(y1); + G4double b = (G4Log(y2) - G4Log(y1)) / (G4Log(x2) - G4Log(x1)); + sum += + (G4Exp(a) / (b + 1)) + * (G4Pow::GetInstance()->powA(x2, b + 1) - G4Pow::GetInstance()->powA(x1, b + 1)); + } + else { + throw G4HadronicException( + __FILE__, __LINE__, "Unknown interpolation scheme in G4ParticleHPVector::Integrate"); + } + } + } + totalIntegral = sum; } - } - inline void Integrate() - { - G4int i; - if(nEntries == 1) + inline G4double GetIntegral() // linear interpolation; use with care { - totalIntegral = 0; - return; + if (totalIntegral < -0.5) Integrate(); + return totalIntegral; } - G4double sum = 0; - for(i=1;i0.0000001) - { - G4double x1 = theData[i-1].GetX(); - G4double x2 = theData[i].GetX(); - G4double y1 = theData[i-1].GetY(); - G4double y2 = theData[i].GetY(); - G4InterpolationScheme aScheme = theManager.GetScheme(i); - if(aScheme==LINLIN||aScheme==CLINLIN||aScheme==ULINLIN) - { - sum+= 0.5*(y2+y1)*(x2-x1); - } - else if(aScheme==LINLOG||aScheme==CLINLOG||aScheme==ULINLOG) - { - G4double a = y1; - G4double b = (y2-y1)/(G4Log(x2)-G4Log(x1)); - sum+= (a-b)*(x2-x1) + b*(x2*G4Log(x2)-x1*G4Log(x1)); - } - else if(aScheme==LOGLIN||aScheme==CLOGLIN||aScheme==ULOGLIN) - { - G4double a = G4Log(y1); - G4double b = (G4Log(y2)-G4Log(y1))/(x2-x1); - sum += (G4Exp(a)/b)*(G4Exp(b*x2)-G4Exp(b*x1)); - } - else if(aScheme==HISTO||aScheme==CHISTO||aScheme==UHISTO) - { - sum+= y1*(x2-x1); - } - else if(aScheme==LOGLOG||aScheme==CLOGLOG||aScheme==ULOGLOG) - { - G4double a = G4Log(y1); - G4double b = (G4Log(y2)-G4Log(y1))/(G4Log(x2)-G4Log(x1)); - sum += (G4Exp(a)/(b+1))*(G4Pow::GetInstance()->powA(x2,b+1)-G4Pow::GetInstance()->powA(x1,b+1)); - } - else - { - throw G4HadronicException(__FILE__, __LINE__, "Unknown interpolation scheme in G4ParticleHPVector::Integrate"); - } - - } + theManager = aManager; } - totalIntegral = sum; - } - - inline G4double GetIntegral() // linear interpolation; use with care - { - if(totalIntegral<-0.5) Integrate(); - return totalIntegral; - } - - inline void SetInterpolationManager(const G4InterpolationManager & aManager) - { - theManager = aManager; - } - - inline const G4InterpolationManager & GetInterpolationManager() const - { - return theManager; - } - - inline void SetInterpolationManager(G4InterpolationManager & aMan) - { - theManager = aMan; - } - - inline void SetScheme(G4int aPoint, const G4InterpolationScheme & aScheme) - { - theManager.AppendScheme(aPoint, aScheme); - } - - inline G4InterpolationScheme GetScheme(G4int anIndex) - { - return theManager.GetScheme(anIndex); - } - - G4double GetMeanX() - { - G4double result; - G4double running = 0; - G4double weighted = 0; - for(G4int i=1; i GetBlocked() {return theBlocked;} - std::vector GetBuffered() {return theBuffered;} - -// void SetBlocked(const std::vector &aBlocked) {theBlocked = aBlocked;} -// void SetBuffered(const std::vector &aBuffer) {theBuffered = aBuffer;} - - G4double Get15percentBorder(); - G4double Get50percentBorder(); - + theManager.AppendScheme(aPoint, aScheme); + } + + inline G4InterpolationScheme GetScheme(G4int anIndex) { return theManager.GetScheme(anIndex); } + + G4double GetMeanX() + { + G4double result; + G4double running = 0; + G4double weighted = 0; + for (G4int i = 1; i < nEntries; i++) { + running += + theInt.GetBinIntegral(theManager.GetScheme(i - 1), theData[i - 1].GetX(), + theData[i].GetX(), theData[i - 1].GetY(), theData[i].GetY()); + weighted += theInt.GetWeightedBinIntegral(theManager.GetScheme(i - 1), + theData[i - 1].GetX(), theData[i].GetX(), + theData[i - 1].GetY(), theData[i].GetY()); + } + result = weighted / running; + return result; + } + + // Finds maximum cross section between two values of kinetic energy + G4double GetMaxY(G4double emin, G4double emax); + + /* + void Block(G4double aX) + { + theBlocked.push_back(aX); + } + + void Buffer(G4double aX) + { + theBuffered.push_back(aX); + } + */ + + std::vector GetBlocked() { return theBlocked; } + std::vector GetBuffered() { return theBuffered; } + + // void SetBlocked(const std::vector &aBlocked) {theBlocked = aBlocked;} + // void SetBuffered(const std::vector &aBuffer) {theBuffered = aBuffer;} + + G4double Get15percentBorder(); + G4double Get50percentBorder(); + private: - - void Check(G4int i); - - G4bool IsBlocked(G4double aX); - + void Check(G4int i); + + G4bool IsBlocked(G4double aX); + private: - - G4ParticleHPInterpolator theLin; - + G4ParticleHPInterpolator theLin; + private: - - G4double totalIntegral; - - G4ParticleHPDataPoint * theData; // the data - G4InterpolationManager theManager; // knows how to interpolate the data. - G4double * theIntegral; - G4int nEntries; - G4int nPoints; - G4double label; - - G4ParticleHPInterpolator theInt; - G4int Verbose; - // debug only - G4int isFreed; - - G4ParticleHPHash theHash; - G4double maxValue; - - std::vector theBlocked; - std::vector theBuffered; - G4double the15percentBorderCash; - G4double the50percentBorderCash; + G4double totalIntegral; + + G4ParticleHPDataPoint* theData; // the data + G4InterpolationManager theManager; // knows how to interpolate the data. + G4double* theIntegral; + G4int nEntries; + G4int nPoints; + G4double label; + + G4ParticleHPInterpolator theInt; + G4int Verbose; + // debug only + G4int isFreed; + + G4ParticleHPHash theHash; + G4double maxValue; + std::vector theBlocked; + std::vector theBuffered; + G4double the15percentBorderCash; + G4double the50percentBorderCash; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPWattSpectrum.hh b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPWattSpectrum.hh index 5cdf4b0afcc..876576296ab 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ParticleHPWattSpectrum.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ParticleHPWattSpectrum.hh @@ -29,61 +29,54 @@ #ifndef G4ParticleHPWattSpectrum_h #define G4ParticleHPWattSpectrum_h 1 -#include -#include - -#include "globals.hh" -#include "G4ios.hh" -#include "Randomize.hh" #include "G4Exp.hh" #include "G4ParticleHPVector.hh" #include "G4VParticleHPEDis.hh" +#include "G4ios.hh" +#include "Randomize.hh" +#include "globals.hh" + +#include + +#include // we will need a List of these .... one per term. class G4ParticleHPWattSpectrum : public G4VParticleHPEDis { public: - G4ParticleHPWattSpectrum() - { - expm1 = G4Exp(-1.); - } - ~G4ParticleHPWattSpectrum() - { - } - - inline void Init(std::istream & aDataFile) - { - theFractionalProb.Init(aDataFile, CLHEP::eV); - theApar.Init(aDataFile, CLHEP::eV); - theBpar.Init(aDataFile, CLHEP::eV); - } - - inline G4double GetFractionalProbability(G4double anEnergy) - { - return theFractionalProb.GetY(anEnergy); - } - - G4double Sample(G4double anEnergy); - + G4ParticleHPWattSpectrum() { expm1 = G4Exp(-1.); } + ~G4ParticleHPWattSpectrum() override = default; + + inline void Init(std::istream& aDataFile) override + { + theFractionalProb.Init(aDataFile, CLHEP::eV); + theApar.Init(aDataFile, CLHEP::eV); + theBpar.Init(aDataFile, CLHEP::eV); + } + + inline G4double GetFractionalProbability(G4double anEnergy) override + { + return theFractionalProb.GetY(anEnergy); + } + + G4double Sample(G4double anEnergy) override; + private: - - inline G4double Watt(G4double anEnergy, G4double a, G4double b) - { - G4double energy = anEnergy/CLHEP::eV; - G4double result = G4Exp(-energy/a)*std::sinh(std::sqrt(b*energy)); - return result; - } - + inline G4double Watt(G4double anEnergy, G4double a, G4double b) + { + G4double energy = anEnergy / CLHEP::eV; + G4double result = G4Exp(-energy / a) * std::sinh(std::sqrt(b * energy)); + return result; + } + private: - - G4double expm1; - - G4ParticleHPVector theFractionalProb; - - G4ParticleHPVector theApar; - G4ParticleHPVector theBpar; - + G4double expm1; + + G4ParticleHPVector theFractionalProb; + + G4ParticleHPVector theApar; + G4ParticleHPVector theBpar; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4ShiftedGaussian.hh b/source/processes/hadronic/models/particle_hp/include/G4ShiftedGaussian.hh index 0ba42f48851..1b811171a09 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4ShiftedGaussian.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4ShiftedGaussian.hh @@ -31,49 +31,48 @@ */ #ifndef G4SHIFTEDGAUSSIAN_HH -#define G4SHIFTEDGAUSSIAN_HH +#define G4SHIFTEDGAUSSIAN_HH + +#include "globals.hh" #include #include -#include "globals.hh" - /** G4ShiftedGaussian is a class for storing the shifted values used for * sampling a Gaussian distribution and returning only positive values; it is * integrated into G4FPYSamplingOps */ class G4ShiftedGaussian { -public: -// Constructor definition + public: + // Constructor definition /** Default constructor * - Usage: No arguments required * - Notes: */ - G4ShiftedGaussian( void ); + G4ShiftedGaussian(); /** Overloaded constructor * - Usage: * - \p Verbosity: Verbosity level * - Notes: */ - G4ShiftedGaussian( G4int Verbosity ); -protected: + G4ShiftedGaussian(G4int Verbosity); + + protected: /** Initialize is a common function called by all constructors. */ - void Initialize( void ); + void Initialize(); -public: -// Functions + public: + // Functions /** Returns the shifted mean that correlates to a \p RequestedMean and * \p RequestedStdDev pair. 0 is returned if there is no associated value. */ - G4double G4FindShiftedMean( G4double RequestedMean, - G4double RequestedStdDev ); + G4double G4FindShiftedMean(G4double RequestedMean, G4double RequestedStdDev); /** Inserts a \p ShiftedMean indexed by the \p RequestedMean and * \p RequestedStdDev */ - void G4InsertShiftedMean( G4double ShiftedMean, - G4double RequestedMean, - G4double RequestedStdDev ); + void G4InsertShiftedMean(G4double ShiftedMean, G4double RequestedMean, + G4double RequestedStdDev); /** Sets the verbosity levels * - Usage: * - \p WhichVerbosity: Combination of levels @@ -86,33 +85,25 @@ public: * - \p GAMMA_INFO: Displays information about gamma sampling * - \p ALPHA_INFO: Displays information about alpha sampling * - \p MOMENTUM_INFO: Displays information about momentum balancing - * - \p EXTRAPOLATION_INTERPOLATION_INFO: Displays information about any data extrapolation or interpolation that occurs + * - \p EXTRAPOLATION_INTERPOLATION_INFO: Displays information about any data extrapolation + * or interpolation that occurs * - \p DEBUG: Reports program flow as it steps through functions * - \p PRINT_ALL: Displays any and all output */ - void G4SetVerbosity( G4int WhatVerbosity ); + void G4SetVerbosity(G4int WhatVerbosity); -protected: + protected: /** Contains the adjusted mean of the POSITIVE only Gaussian distribution * associated with a \p RequestedMean and \p RequestedStdDev pair. */ - std::vector< - std::pair< - std::pair< - G4double, - G4double - >, - G4double - > - > ShiftedMean_; + std::vector, G4double>> ShiftedMean_; /** Verbosity level */ G4int Verbosity_; -// Destructor function(s) -public: + // Destructor function(s) + public: /** Default deconstructor. */ - ~G4ShiftedGaussian( void ); + ~G4ShiftedGaussian(); }; -#endif /* G4SHIFTEDGAUSSIAN_HH */ - +#endif /* G4SHIFTEDGAUSSIAN_HH */ diff --git a/source/processes/hadronic/models/particle_hp/include/G4TableTemplate.hh b/source/processes/hadronic/models/particle_hp/include/G4TableTemplate.hh index 1f145377b8d..cb79b0c56db 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4TableTemplate.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4TableTemplate.hh @@ -31,110 +31,92 @@ */ #ifndef G4TABLETEMPLATE_HH -#define G4TABLETEMPLATE_HH - -#include +#define G4TABLETEMPLATE_HH +#include "G4FFGDefaultValues.hh" #include "globals.hh" -#include "G4FFGDefaultValues.hh" +#include /** G4TableTemplate is essentially a wrapper around a std::vector designed * to work specifically with pointers. */ -template +template class G4TableTemplate { -public: + public: /** Default constructor */ - G4TableTemplate( void ); + G4TableTemplate() = default; /** Adds a container to the table */ - void G4AddContainer( T* NewContainer ); + void G4AddContainer(T* NewContainer); /** Gets a pointer to the table */ - G4TableTemplate* G4GetTable( void ); + G4TableTemplate* G4GetTable(); /** Retrieve a container from the table */ - T* G4GetContainer( unsigned int WhichContainer ); + T* G4GetContainer(unsigned int WhichContainer); /** Create a new blank container */ - T* G4GetNewContainer( void ); + T* G4GetNewContainer(); /** Create a new container that is constructed with a G4int */ - T* G4GetNewContainer( G4int DefaultValue ); + T* G4GetNewContainer(G4int DefaultValue); /** Get the number of elements in the table */ - G4long G4GetNumberOfElements( void ); + G4long G4GetNumberOfElements(); -private: + private: std::vector ContainerTable_; -public: - ~G4TableTemplate( void ); + public: + ~G4TableTemplate(); }; -template -G4TableTemplate:: -G4TableTemplate( void ) +template +void G4TableTemplate::G4AddContainer(T* NewContainer) { - // Nothing to be initialized + ContainerTable_.push_back(NewContainer); } -template -void G4TableTemplate:: -G4AddContainer( T* NewContainer ) +template +G4TableTemplate* G4TableTemplate::G4GetTable() { - ContainerTable_.push_back(NewContainer); + return this; } -template -G4TableTemplate* G4TableTemplate:: -G4GetTable( void ) +template +T* G4TableTemplate::G4GetContainer(unsigned int WhichContainer) { - return this; -} - -template -T* G4TableTemplate:: -G4GetContainer( unsigned int WhichContainer ) -{ - if(WhichContainer < ContainerTable_.size()) - { - return ContainerTable_[WhichContainer]; - } + if (WhichContainer < ContainerTable_.size()) { + return ContainerTable_[WhichContainer]; + } - return NULL; + return nullptr; } -template -T* G4TableTemplate:: -G4GetNewContainer( void ) +template +T* G4TableTemplate::G4GetNewContainer() { - ContainerTable_.push_back(new T); + ContainerTable_.push_back(new T); - return ContainerTable_.back(); + return ContainerTable_.back(); } -template -T* G4TableTemplate:: -G4GetNewContainer( G4int DefaultValue ) +template +T* G4TableTemplate::G4GetNewContainer(G4int DefaultValue) { - ContainerTable_.push_back(new T(DefaultValue)); + ContainerTable_.push_back(new T(DefaultValue)); - return ContainerTable_.back(); + return ContainerTable_.back(); } -template -G4long G4TableTemplate:: -G4GetNumberOfElements( void ) +template +G4long G4TableTemplate::G4GetNumberOfElements() { - return ContainerTable_.size(); + return ContainerTable_.size(); } -template -G4TableTemplate:: -~G4TableTemplate() +template +G4TableTemplate::~G4TableTemplate() { - for(unsigned int i = 0; i < ContainerTable_.size(); i++) - { - delete ContainerTable_[i]; - } + for (unsigned int i = 0; i < ContainerTable_.size(); i++) { + delete ContainerTable_[i]; + } } -#endif /* G4TABLETEMPLATE_HH */ - +#endif /* G4TABLETEMPLATE_HH */ diff --git a/source/processes/hadronic/models/particle_hp/include/G4VNeutronHPEDis.hh b/source/processes/hadronic/models/particle_hp/include/G4VNeutronHPEDis.hh index 2eccea1dffc..b518daeb2ac 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4VNeutronHPEDis.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4VNeutronHPEDis.hh @@ -29,4 +29,4 @@ #include "G4VParticleHPEDis.hh" using G4VNeutronHPEDis = G4VParticleHPEDis; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4VNeutronHPEnergyAngular.hh b/source/processes/hadronic/models/particle_hp/include/G4VNeutronHPEnergyAngular.hh index 6dcfa27093f..e6e29292e5f 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4VNeutronHPEnergyAngular.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4VNeutronHPEnergyAngular.hh @@ -29,4 +29,4 @@ #include "G4VParticleHPEnergyAngular.hh" using G4VNeutronHPEnergyAngular = G4VParticleHPEnergyAngular; -#endif +#endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4VParticleHPEDis.hh b/source/processes/hadronic/models/particle_hp/include/G4VParticleHPEDis.hh index 4cb48d87af7..8df5e575e26 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4VParticleHPEDis.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4VParticleHPEDis.hh @@ -29,31 +29,26 @@ #ifndef G4VParticleHPEDis_h #define G4VParticleHPEDis_h 1 -#include - -#include "globals.hh" +#include "G4ParticleHPVector.hh" #include "G4ios.hh" #include "Randomize.hh" -#include "G4ParticleHPVector.hh" +#include "globals.hh" + +#include class G4VParticleHPEDis { public: - G4VParticleHPEDis() - { - } - virtual ~G4VParticleHPEDis() - { - } - - virtual void Init(std::istream & theData) = 0; - - virtual G4double GetFractionalProbability(G4double anEnergy) = 0; - - virtual G4double Sample(G4double anEnergy) = 0; - + G4VParticleHPEDis() = default; + virtual ~G4VParticleHPEDis() = default; + + virtual void Init(std::istream& theData) = 0; + + virtual G4double GetFractionalProbability(G4double anEnergy) = 0; + + virtual G4double Sample(G4double anEnergy) = 0; + private: - }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4VParticleHPEnergyAngular.hh b/source/processes/hadronic/models/particle_hp/include/G4VParticleHPEnergyAngular.hh index c920401a6d5..fa2242c707a 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4VParticleHPEnergyAngular.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4VParticleHPEnergyAngular.hh @@ -31,90 +31,66 @@ #ifndef G4VParticleHPEnergyAngular_h #define G4VParticleHPEnergyAngular_h 1 -#include - +#include "G4Cache.hh" +#include "G4ReactionProduct.hh" #include "G4ios.hh" #include "globals.hh" -#include "G4ReactionProduct.hh" -#include "G4Cache.hh" + +#include class G4VParticleHPEnergyAngular { + struct toBeCached + { + G4ReactionProduct* theProjectileRP{nullptr}; + G4ReactionProduct* theTarget{nullptr}; + G4ReactionProduct* theCMS{nullptr}; + toBeCached() = default; + }; + + public: + G4VParticleHPEnergyAngular() + { + theQValue = 0; + toBeCached val; + fCache.Put(val); + } + + virtual ~G4VParticleHPEnergyAngular() = default; - struct toBeCached - { - G4ReactionProduct* theProjectileRP; - G4ReactionProduct* theTarget; - G4ReactionProduct* theCMS; - toBeCached() : theProjectileRP(0),theTarget(0),theCMS(0) {}; - }; - -public: - - G4VParticleHPEnergyAngular() - { - theQValue=0; - toBeCached val; - fCache.Put( val ); - } - - virtual ~G4VParticleHPEnergyAngular() - { - } - -public: - - virtual void Init(std::istream & aDataFile) = 0; - virtual G4ReactionProduct * Sample(G4double anEnergy, - G4double massCode, - G4double mass) = 0; - virtual G4double MeanEnergyOfThisInteraction() = 0; + public: + virtual void Init(std::istream& aDataFile) = 0; + virtual G4ReactionProduct* Sample(G4double anEnergy, G4double massCode, G4double mass) = 0; + virtual G4double MeanEnergyOfThisInteraction() = 0; // returns value cashed in sample - - void SetProjectileRP(G4ReactionProduct * aIncidentParticleRP) - { - fCache.Get().theProjectileRP = aIncidentParticleRP; - } - - void SetTarget(G4ReactionProduct * aTarget) - { - fCache.Get().theTarget = aTarget; - } - - G4ReactionProduct * GetTarget() - { - return fCache.Get().theTarget; - } - - G4ReactionProduct * GetProjectileRP() - { - return fCache.Get().theProjectileRP; - } - - G4ReactionProduct * GetCMS() - { - *fCache.Get().theCMS = *fCache.Get().theProjectileRP - + *fCache.Get().theTarget; - return fCache.Get().theCMS; - } - - inline void SetQValue(G4double aValue) - { - theQValue = aValue; - } - - virtual void ClearHistories() - { - } - -protected: - - inline G4double GetQValue() { return theQValue; } - -private: - - G4double theQValue; - - G4Cache fCache; + + void SetProjectileRP(G4ReactionProduct* aIncidentParticleRP) + { + fCache.Get().theProjectileRP = aIncidentParticleRP; + } + + void SetTarget(G4ReactionProduct* aTarget) { fCache.Get().theTarget = aTarget; } + + G4ReactionProduct* GetTarget() { return fCache.Get().theTarget; } + + G4ReactionProduct* GetProjectileRP() { return fCache.Get().theProjectileRP; } + + G4ReactionProduct* GetCMS() + { + *fCache.Get().theCMS = *fCache.Get().theProjectileRP + *fCache.Get().theTarget; + return fCache.Get().theCMS; + } + + inline void SetQValue(G4double aValue) { theQValue = aValue; } + + virtual void ClearHistories() {} + + protected: + inline G4double GetQValue() { return theQValue; } + + private: + G4double theQValue; + + G4Cache fCache; }; #endif diff --git a/source/processes/hadronic/models/particle_hp/include/G4WattFissionSpectrumValues.hh b/source/processes/hadronic/models/particle_hp/include/G4WattFissionSpectrumValues.hh index ee9c37a7554..9c796bea410 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4WattFissionSpectrumValues.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4WattFissionSpectrumValues.hh @@ -38,12 +38,11 @@ * * * * * * * * * * * * * * * * References * * * * * * * * * * * * * * * */ #ifndef G4WATTFISSIONSPECTRUMVALUES_HH -#define G4WATTFISSIONSPECTRUMVALUES_HH - -#include "globals.hh" +#define G4WATTFISSIONSPECTRUMVALUES_HH #include "G4FFGDefaultValues.hh" #include "G4FFGEnumerations.hh" +#include "globals.hh" // TODO Migrate to existing neutron_hp watt constants in G4NeutronHPWattSpectrum.hh // and then remove this file from the repo and sources.cmake @@ -86,12 +85,9 @@ struct WattSpectrumConstants /** These are the energy values in MeV for the neutron induced Watt fission * spectrum constants. */ -static const G4double IncidentEnergyBins[] = -{ - G4FFGDefaultValues::ThermalNeutronEnergy, - 1.0 * CLHEP::MeV, - 14.0 * CLHEP::MeV, - -1 // End of array +static const G4double IncidentEnergyBins[] = { + G4FFGDefaultValues::ThermalNeutronEnergy, 1.0 * CLHEP::MeV, 14.0 * CLHEP::MeV, + -1 // End of array }; /** Watt fission spectrum constants for neutron induced fission. @@ -104,100 +100,99 @@ static const G4double IncidentEnergyBins[] = * \n Row 2: 1 MeV * \n Row 3: 14 MeV */ -static const G4double NeutronInducedWattConstants[][3][2] = -{ -// Default - { {0.95, 2.7}, - {1.0, 2.5}, - {1.05, 2.4}, }, -// Thorium - // 90232 - { {1.0888, 1.6871}, - {1.1096, 1.6316}, - {1.1700, 1.4610}, }, -// Uranium - // 92233 - { {0.977, 2.546}, - {0.977, 2.249}, - {1.0036, 2.6377}, }, - // 92235 - { {0.988, 2.249}, - {0.988, 2.249}, - {1.028, 2.084}, }, - // 92238 - { {0.88111, 3.4005}, - {0.89506, 3.2953}, - {0.96534, 2.8330}, }, -// Plutonium - // 94239 - { {0.966, 2.842}, - {0.966, 2.842}, - {1.055, 2.383}, } -}; +static const G4double NeutronInducedWattConstants[][3][2] = { + // Default + { + {0.95, 2.7}, + {1.0, 2.5}, + {1.05, 2.4}, + }, + // Thorium + // 90232 + { + {1.0888, 1.6871}, + {1.1096, 1.6316}, + {1.1700, 1.4610}, + }, + // Uranium + // 92233 + { + {0.977, 2.546}, + {0.977, 2.249}, + {1.0036, 2.6377}, + }, + // 92235 + { + {0.988, 2.249}, + {0.988, 2.249}, + {1.028, 2.084}, + }, + // 92238 + { + {0.88111, 3.4005}, + {0.89506, 3.2953}, + {0.96534, 2.8330}, + }, + // Plutonium + // 94239 + { + {0.966, 2.842}, + {0.966, 2.842}, + {1.055, 2.383}, + }}; /** This table provides the indexing for NeutronInducedWattConstants_. The * index of an isotope in this table is the index for the Watt fission spectrum * constants in NeutronInducedWattConstants_. The isotopes are listed in ZZZAAA * format. */ -static const G4int NeutronInducedWattIsotopesIndex[] = -{ -// Default - 0, -// Thorium - 90232, -// Uranium - 92233, - 92235, - 92238, -// Plutonium - 94239, -// End of array - -1 -}; +static const G4int NeutronInducedWattIsotopesIndex[] = { + // Default + 0, + // Thorium + 90232, + // Uranium + 92233, 92235, 92238, + // Plutonium + 94239, + // End of array + -1}; /** Watt fission spectrum constants for spontaneous fission. * \n Column 1: 'a' value * \n Column 2: 'b' value */ -static const G4double SpontaneousWattConstants[][2] = -{ -// Default - {0.8, 4.0}, -// Plutonium - // 94240 - {0.799, 4.903}, - // 94242 - {0.833668, 4.431658}, -// Curium - // 96242 - {0.891, 4.046}, - // 96244 - {0.906, 3.848}, -// Californium - // 98252 - {1.025, 2.926} -}; +static const G4double SpontaneousWattConstants[][2] = { + // Default + {0.8, 4.0}, + // Plutonium + // 94240 + {0.799, 4.903}, + // 94242 + {0.833668, 4.431658}, + // Curium + // 96242 + {0.891, 4.046}, + // 96244 + {0.906, 3.848}, + // Californium + // 98252 + {1.025, 2.926}}; /** This table provides the indexing for SpontaneousWattConstants_. The index of * an isotope in this table is the index for the Watt fission spectrum constants * in SpontaneousWattConstants_. The isotopes are listed in ZZZAAA format. */ -static const G4int SpontaneousWattIsotopesIndex[] = -{ -// Default - 0, -// Plutonium - 94240, - 94242, -// Curium - 96242, - 96244, -// Californium - 98252, -// End of array - -1 -}; - -#endif /* G4WATTFISSIONSPECTRUMVALUES_HH */ +static const G4int SpontaneousWattIsotopesIndex[] = { + // Default + 0, + // Plutonium + 94240, 94242, + // Curium + 96242, 96244, + // Californium + 98252, + // End of array + -1}; +#endif /* G4WATTFISSIONSPECTRUMVALUES_HH */ diff --git a/source/processes/hadronic/models/particle_hp/include/G4WendtFissionFragmentGenerator.hh b/source/processes/hadronic/models/particle_hp/include/G4WendtFissionFragmentGenerator.hh index fd0f0f8db39..f34cf0867df 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4WendtFissionFragmentGenerator.hh +++ b/source/processes/hadronic/models/particle_hp/include/G4WendtFissionFragmentGenerator.hh @@ -33,39 +33,40 @@ #ifndef G4WendtFissionFragmentGenerator_h #define G4WendtFissionFragmentGenerator_h 1 -#include - +#include "G4FissionFragmentGenerator.hh" #include "G4HadFinalState.hh" -#include "G4FissionFragmentGenerator.hh" +#include class G4WendtFissionFragmentGenerator { -public: - G4HadFinalState* ApplyYourself(const G4HadProjectile& projectile, G4int Z, G4int A); - static G4WendtFissionFragmentGenerator* GetInstance() { - if ( instance == NULL) instance = new G4WendtFissionFragmentGenerator(); - return instance; - } + public: + G4HadFinalState* ApplyYourself(const G4HadProjectile& projectile, G4int Z, G4int A); + static G4WendtFissionFragmentGenerator* GetInstance() + { + if (instance == nullptr) instance = new G4WendtFissionFragmentGenerator(); + return instance; + } - void InitializeANucleus(const G4int A, const G4int Z, const G4int M, const G4String& dataDirectory); - ~G4WendtFissionFragmentGenerator(); + void InitializeANucleus(const G4int A, const G4int Z, const G4int M, + const G4String& dataDirectory); + ~G4WendtFissionFragmentGenerator(); -private: - // SINGLETON!!! - G4WendtFissionFragmentGenerator(); - G4WendtFissionFragmentGenerator(G4WendtFissionFragmentGenerator const&); - void operator=(G4WendtFissionFragmentGenerator const&); + private: + // SINGLETON!!! + G4WendtFissionFragmentGenerator(); + G4WendtFissionFragmentGenerator(G4WendtFissionFragmentGenerator const&) = delete; + void operator=(G4WendtFissionFragmentGenerator const&) = delete; - static G4ThreadLocal G4WendtFissionFragmentGenerator* instance; - // SINGLETON!!! + static G4ThreadLocal G4WendtFissionFragmentGenerator* instance; + // SINGLETON!!! - /** A map of all the fission isotopes loaded at initialization */ - std::map< const G4int, G4FissionFragmentGenerator* > fissionIsotopes; + /** A map of all the fission isotopes loaded at initialization */ + std::map fissionIsotopes; G4ParticleHPNames fileNames; G4int Verbosity_; - + G4int secID; // Creator model ID for the fission fragments }; #endif diff --git a/source/processes/hadronic/models/particle_hp/sources.cmake b/source/processes/hadronic/models/particle_hp/sources.cmake index 2efbf393603..0ed4b831982 100644 --- a/source/processes/hadronic/models/particle_hp/sources.cmake +++ b/source/processes/hadronic/models/particle_hp/sources.cmake @@ -141,8 +141,6 @@ geant4_add_module(G4had_par_hp G4WattFissionSpectrumValues.hh ### FissionFragment Generator - end ### Headers of NeutronHP for backward compatibility - start - G4NeutronHPGamma.hh - G4NeutronHPLevel.hh G4NeutronHPList.hh G4NeutronHPIsoData.hh G4NeutronHP2AInelasticFS.hh diff --git a/source/processes/hadronic/models/particle_hp/src/G4ENDFTapeRead.cc b/source/processes/hadronic/models/particle_hp/src/G4ENDFTapeRead.cc index 52a557cc3cf..183c9fbdca9 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ENDFTapeRead.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ENDFTapeRead.cc @@ -30,531 +30,503 @@ * Created on September 6, 2011, 10:01 AM */ -#include -#include -#include - -#include "globals.hh" -#include "G4ParticleHPManager.hh" - #include "G4ENDFTapeRead.hh" + #include "G4ENDFYieldDataContainer.hh" #include "G4FFGDebuggingMacros.hh" #include "G4FFGDefaultValues.hh" #include "G4FFGEnumerations.hh" +#include "G4ParticleHPManager.hh" #include "G4TableTemplate.hh" +#include "globals.hh" + +#include +#include +#include -G4ENDFTapeRead:: -G4ENDFTapeRead( G4String FileLocation, - G4String FileName, - G4FFGEnumerations::YieldType WhichYield, - G4FFGEnumerations::FissionCause /*WhichCause*/ ) -: /* Cause_(WhichCause),*/ +G4ENDFTapeRead::G4ENDFTapeRead(G4String FileLocation, G4String FileName, + G4FFGEnumerations::YieldType WhichYield, + G4FFGEnumerations::FissionCause /*WhichCause*/) + : /* Cause_(WhichCause),*/ Verbosity_(G4FFGDefaultValues::Verbosity), YieldType_(WhichYield) { - // Initialize the class - Initialize(FileLocation + FileName); + // Initialize the class + Initialize(FileLocation + FileName); } -G4ENDFTapeRead:: -G4ENDFTapeRead( G4String FileLocation, - G4String FileName, - G4FFGEnumerations::YieldType WhichYield, - G4FFGEnumerations::FissionCause /*WhichCause*/, - G4int Verbosity ) -: /*Cause_(WhichCause),*/ +G4ENDFTapeRead::G4ENDFTapeRead(G4String FileLocation, G4String FileName, + G4FFGEnumerations::YieldType WhichYield, + G4FFGEnumerations::FissionCause /*WhichCause*/, G4int Verbosity) + : /*Cause_(WhichCause),*/ Verbosity_(Verbosity), YieldType_(WhichYield) { - // Initialize the class - Initialize(FileLocation + FileName); + // Initialize the class + Initialize(FileLocation + FileName); } -G4ENDFTapeRead:: -G4ENDFTapeRead( std::istringstream& dataStream, - G4FFGEnumerations::YieldType WhichYield, - G4FFGEnumerations::FissionCause /*WhichCause*/, - G4int Verbosity ) -: /*Cause_(WhichCause),*/ +G4ENDFTapeRead::G4ENDFTapeRead(std::istringstream& dataStream, + G4FFGEnumerations::YieldType WhichYield, + G4FFGEnumerations::FissionCause /*WhichCause*/, G4int Verbosity) + : /*Cause_(WhichCause),*/ Verbosity_(Verbosity), YieldType_(WhichYield) { - // Initialize the class - Initialize(dataStream); + // Initialize the class + Initialize(dataStream); } -void G4ENDFTapeRead:: -Initialize( G4String dataFile ) +void G4ENDFTapeRead::Initialize(G4String dataFile) { - std::istringstream dataStream(std::ios::in); - G4ParticleHPManager::GetInstance()->GetDataStream(dataFile, dataStream); + std::istringstream dataStream(std::ios::in); + G4ParticleHPManager::GetInstance()->GetDataStream(dataFile, dataStream); - Initialize(dataStream); + Initialize(dataStream); } -void G4ENDFTapeRead:: -Initialize( std::istringstream& dataStream ) -{ -G4FFG_FUNCTIONENTER__ +void G4ENDFTapeRead::Initialize(std::istringstream& dataStream) +{ + G4FFG_FUNCTIONENTER__ - EnergyGroups_ = 0; - EnergyGroupValues_ = NULL; + EnergyGroups_ = 0; + EnergyGroupValues_ = nullptr; - YieldContainerTable_ = new G4TableTemplate< G4ENDFYieldDataContainer >; + YieldContainerTable_ = new G4TableTemplate; - try - { - ReadInData(dataStream); - } catch (std::exception & e) - { - delete YieldContainerTable_; + try { + ReadInData(dataStream); + } + catch (std::exception& e) { + delete YieldContainerTable_; - G4FFG_FUNCTIONLEAVE__ - throw e; - } + G4FFG_FUNCTIONLEAVE__ + throw e; + } -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -G4double* G4ENDFTapeRead:: -G4GetEnergyGroupValues( void ) +G4double* G4ENDFTapeRead::G4GetEnergyGroupValues() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ -G4FFG_FUNCTIONLEAVE__ - return EnergyGroupValues_; + G4FFG_FUNCTIONLEAVE__ + return EnergyGroupValues_; } -G4int G4ENDFTapeRead:: -G4GetNumberOfEnergyGroups( void ) +G4int G4ENDFTapeRead::G4GetNumberOfEnergyGroups() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ -G4FFG_FUNCTIONLEAVE__ - return EnergyGroups_; + G4FFG_FUNCTIONLEAVE__ + return EnergyGroups_; } -G4int G4ENDFTapeRead:: -G4GetNumberOfFissionProducts( void ) +G4int G4ENDFTapeRead::G4GetNumberOfFissionProducts() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - G4int NumberOfElements = (G4int)YieldContainerTable_->G4GetNumberOfElements(); + auto NumberOfElements = (G4int)YieldContainerTable_->G4GetNumberOfElements(); -G4FFG_FUNCTIONLEAVE__ - return NumberOfElements; + G4FFG_FUNCTIONLEAVE__ + return NumberOfElements; } -G4ENDFYieldDataContainer* G4ENDFTapeRead:: -G4GetYield( G4int WhichYield ) +G4ENDFYieldDataContainer* G4ENDFTapeRead::G4GetYield(G4int WhichYield) { -G4FFG_DATA_FUNCTIONENTER__ + G4FFG_DATA_FUNCTIONENTER__ - G4ENDFYieldDataContainer* Container = NULL; - if(WhichYield >= 0 && WhichYield < YieldContainerTable_->G4GetNumberOfElements()) - { - Container = YieldContainerTable_->G4GetContainer(WhichYield); - } + G4ENDFYieldDataContainer* Container = nullptr; + if (WhichYield >= 0 && WhichYield < YieldContainerTable_->G4GetNumberOfElements()) { + Container = YieldContainerTable_->G4GetContainer(WhichYield); + } -G4FFG_DATA_FUNCTIONLEAVE__ - return Container; + G4FFG_DATA_FUNCTIONLEAVE__ + return Container; } -void G4ENDFTapeRead:: -G4SetVerbosity(G4int WhatVerbosity) +void G4ENDFTapeRead::G4SetVerbosity(G4int WhatVerbosity) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - this->Verbosity_ = WhatVerbosity; + this->Verbosity_ = WhatVerbosity; -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -void G4ENDFTapeRead:: -ReadInData( std::istringstream& dataStream ) +void G4ENDFTapeRead::ReadInData(std::istringstream& dataStream) { -G4FFG_FUNCTIONENTER__ - - // Check if the file exists - if(!dataStream.good()) - { - G4Exception("G4ENDFTapeRead::ReadInData()", - "Illegal file name", - JustWarning, - "Fission product data not available"); - - // TODO create/use a specialized exception - G4FFG_FUNCTIONLEAVE__ - throw std::exception(); - } - - // Code to read in from a pure ENDF data tape. - // Commented out while pre-formatted Geant4 ENDF data is being used -// G4int CurrentEnergyGroup = -1; -// std::vector< G4double > NewDoubleVector; -// std::vector< G4double > EnergyPoints; -// std::vector< G4int > Product; -// std::vector< G4FFGEnumerations::MetaState > MetaState; -// std::vector< std::vector< G4double > > Yield; -// std::vector< std::vector< G4double > > Error; -// G4String DataBlock; -// std::size_t InsertExponent; -// G4double Parts[6]; -// G4double dummy; -// G4int MAT; -// G4int MF; -// G4int MT; -// G4int LN; -// G4int Block; -// G4int EmptyProduct; -// G4int Location; -// G4int ItemCounter = 0; -// G4int FirstLineInEnergyGroup = 0; -// G4int LastLineInEnergyGroup = 0; -// G4bool FoundEnergyGroup = false; -// G4bool FoundPID = false; -// -// while(getline(DataFile, Temp)) -// { -// // Format the string so that it can be interpreted correctly -// DataBlock = Temp.substr(0, 66); -// Temp = Temp.substr(66); -// InsertExponent = 0; -// while((InsertExponent = DataBlock.find_first_of("-+", InsertExponent)) != G4String::npos) -// { -// DataBlock.insert(InsertExponent, 1, 'e'); -// InsertExponent += 2; -// } -// sscanf(DataBlock.c_str(), "%11le %11le %11le %11le %11le %11le", -// &Parts[0], &Parts[1], &Parts[2], &Parts[3], &Parts[4], &Parts[5]); -// sscanf(Temp.substr(0, 4).c_str(), "%i", &MAT); -// sscanf(Temp.substr(4, 2).c_str(), "%i", &MF); -// sscanf(Temp.substr(6, 3).c_str(), "%i", &MT); -// sscanf(Temp.substr(9).c_str(), "%i", &LN); -// -// if(MT == YieldType_) -// { -// if(LN == 1) -// { -// if(FoundPID != true) -// { -// // The first line of an ENDF section for MT = 454 or 459 -// // always contains the parent PID -// // This section can potentially be expanded to check and -// // verify that it is the correct nucleus -// FoundPID = true; -// -// continue; -// } -// } else if(FoundPID == true && FoundEnergyGroup == false) -// { -// // Skip this line if it is not the energy definition line -// if(Parts[1] != 0 || Parts[3] != 0) -// { -// continue; -// } -// -// // The first block is the incident neutron energy -// // information. -// // Check to make sure that it is spontaneous or neutron -// // induced. -// if(Cause_ == G4FFGEnumerations::NEUTRON_INDUCED) -// { -// if(Parts[0] != 0) -// { -// FoundEnergyGroup = true; -// } -// } else if(Cause_ == G4FFGEnumerations::SPONTANEOUS) -// { -// if(Parts[0] == 0) -// { -// FoundEnergyGroup = true; -// } -// } else -// { // Maybe more fission causes here if added later -// FoundEnergyGroup = false; -// } -// -// if(FoundEnergyGroup == true) -// { -// // Convert to eV -// Parts[0] *= eV; -// -// // Calculate the parameters -// FirstLineInEnergyGroup = LN; -// LastLineInEnergyGroup = FirstLineInEnergyGroup + -// ceil(Parts[4] / 6.0); -// ItemCounter = 0; -// EmptyProduct = 0; -// -// // Initialize the data storage -// CurrentEnergyGroup++; -// EnergyPoints.push_back(Parts[0]); -// Yield.push_back(NewDoubleVector); -// Yield.back().resize(Product.size(), 0); -// Error.push_back(NewDoubleVector); -// Error.back().resize(Product.size(), 0); -// -// continue; -// } -// } -// -// if(LN > FirstLineInEnergyGroup && LN <= LastLineInEnergyGroup) -// { -// for(Block = 0; Block < 6; Block++) -// { -// if(EmptyProduct > 0) -// { -// EmptyProduct--; -// -// continue; -// } -// switch(ItemCounter % 4) -// { -// case 0: -// // Determine if the block is empty -// if(Parts[Block] == 0) -// { -// EmptyProduct = 3; -// -// continue; -// } -// -// // Determine if this product is already loaded -// for(Location = 0; Location < (signed)Product.size(); Location++) -// { -// if(Parts[Block] == Product.at(Location) && -// Parts[Block + 1] == MetaState.at(Location)) -// { -// break; -// } -// } -// -// // The product hasn't been created yet -// // Add it and initialize the other vectors -// if(Location == (signed)Product.size()) -// { -// Product.push_back(Parts[Block]); -// MetaState.push_back((G4FFGEnumerations::MetaState)Parts[Block + 1]); -// Yield.at(CurrentEnergyGroup).push_back(0.0); -// Error.at(CurrentEnergyGroup).push_back(0.0); -// } -// break; -// -// case 2: -// Yield.at(CurrentEnergyGroup).at(Location) = Parts[Block]; -// break; -// -// case 3: -// Error.at(CurrentEnergyGroup).at(Location) = Parts[Block]; -// break; -// } -// -// ItemCounter++; -// } -// } -// -// if (LN == LastLineInEnergyGroup) -// { -// FoundEnergyGroup = false; -// } -// } -// } -// -// G4ENDFYieldDataContainer* NewDataContainer; -// EnergyGroups_ = EnergyPoints.size(); -// EnergyGroupValues_ = new G4double[EnergyGroups_]; -// G4int NewProduct; -// G4FFGEnumerations::MetaState NewMetaState; -// G4double* NewYield = new G4double[EnergyGroups_]; -// G4double* NewError = new G4double[EnergyGroups_]; -// -// for(G4int i = 0; i < EnergyGroups_; i++) -// { -// // Load the energy values -// EnergyGroupValues_[i] = EnergyPoints.at(i); -// -// // Make all the vectors the same size -// Yield[i].resize(maxSize, 0.0); -// Error[i].resize(maxSize, 0.0); -// } -// -// // Load the data into the yield table -// for(ItemCounter = 0; ItemCounter < (signed)Product.size(); ItemCounter++) -// { -// NewProduct = Product.at(ItemCounter); -// NewMetaState = MetaState.at(ItemCounter); -// -// for(CurrentEnergyGroup = 0; CurrentEnergyGroup < EnergyGroups_; CurrentEnergyGroup++) -// { -// NewYield[CurrentEnergyGroup] = Yield.at(CurrentEnergyGroup).at(ItemCounter); -// NewYield[CurrentEnergyGroup] = Error.at(CurrentEnergyGroup).at(ItemCounter); -// } -// -// NewDataContainer = YieldContainerTable_->G4GetNewContainer(EnergyGroups_ + 1); -// NewDataContainer->SetProduct(NewProduct); -// NewDataContainer->SetMetaState(NewMetaState); -// NewDataContainer->SetYieldProbability(NewYield); -// NewDataContainer->SetYieldError(NewError); -// } -// -// delete[] NewYield; -// delete[] NewError; - - G4int MT; - G4bool correctMT; - G4int MF; - G4double dummy; - G4int blockCount; - G4int currentEnergy = 0; - G4double incidentEnergy; - G4int itemCount; - // TODO correctly implement the interpolation in the fission product yield - G4int interpolation; - G4int isotope; - G4int metastate; - G4int identifier; - G4double yield; - // "error" is included here in the event that errors are included in the future - G4double error = 0.0; - G4int maxSize = 0; - - std::vector< G4double > projectileEnergies; - std::map< const G4int, std::pair< std::vector< G4double >, std::vector< G4double > > > intermediateData; - std::map< const G4int, std::pair< std::vector< G4double >, std::vector< G4double > > >::iterator dataIterator; - - while(dataStream.good()) // Loop checking, 11.05.2015, T. Koi - { - dataStream >> MT >> MF >> dummy >> blockCount; - - correctMT = MT == YieldType_; - - for(G4int b = 0; b < blockCount; ++b) - { - dataStream >> incidentEnergy >> itemCount >> interpolation; - maxSize = maxSize >= itemCount ? maxSize : itemCount; - - if(correctMT) - { - // Load in the energy of the projectile - projectileEnergies.push_back(incidentEnergy); - currentEnergy = G4int(projectileEnergies.size() - 1); - } else - { - // !!! Do not break since we need to parse through the !!! - // !!! entire data file for all possible energies !!! - } - - for(G4int i = 0; i < itemCount; ++i) - { - dataStream >> isotope >> metastate >> yield; - - if(correctMT) - { - identifier = isotope * 10 + metastate; - - dataIterator = intermediateData.insert(std::make_pair( - identifier, - std::make_pair( - std::vector< G4double >(projectileEnergies.size(), 0.0), - std::vector< G4double >(projectileEnergies.size(), 0.0)))).first; - - if(dataIterator->second.first.size() < projectileEnergies.size()) - { - dataIterator->second.first.resize(projectileEnergies.size()); - dataIterator->second.second.resize(projectileEnergies.size()); - } - - dataIterator->second.first[currentEnergy] = yield; - dataIterator->second.second[currentEnergy] = error; - } else - { - // !!! Do not break since we need to parse through the !!! - // !!! entire data file for all possible energies !!! - } - } + G4FFG_FUNCTIONENTER__ + + // Check if the file exists + if (!dataStream.good()) { + G4Exception("G4ENDFTapeRead::ReadInData()", "Illegal file name", JustWarning, + "Fission product data not available"); + + // TODO create/use a specialized exception + G4FFG_FUNCTIONLEAVE__ + throw std::exception(); + } + + // Code to read in from a pure ENDF data tape. + // Commented out while pre-formatted Geant4 ENDF data is being used + // G4int CurrentEnergyGroup = -1; + // std::vector< G4double > NewDoubleVector; + // std::vector< G4double > EnergyPoints; + // std::vector< G4int > Product; + // std::vector< G4FFGEnumerations::MetaState > MetaState; + // std::vector< std::vector< G4double > > Yield; + // std::vector< std::vector< G4double > > Error; + // G4String DataBlock; + // std::size_t InsertExponent; + // G4double Parts[6]; + // G4double dummy; + // G4int MAT; + // G4int MF; + // G4int MT; + // G4int LN; + // G4int Block; + // G4int EmptyProduct; + // G4int Location; + // G4int ItemCounter = 0; + // G4int FirstLineInEnergyGroup = 0; + // G4int LastLineInEnergyGroup = 0; + // G4bool FoundEnergyGroup = false; + // G4bool FoundPID = false; + // + // while(getline(DataFile, Temp)) + // { + // // Format the string so that it can be interpreted correctly + // DataBlock = Temp.substr(0, 66); + // Temp = Temp.substr(66); + // InsertExponent = 0; + // while((InsertExponent = DataBlock.find_first_of("-+", InsertExponent)) != + // G4String::npos) + // { + // DataBlock.insert(InsertExponent, 1, 'e'); + // InsertExponent += 2; + // } + // sscanf(DataBlock.c_str(), "%11le %11le %11le %11le %11le %11le", + // &Parts[0], &Parts[1], &Parts[2], &Parts[3], &Parts[4], &Parts[5]); + // sscanf(Temp.substr(0, 4).c_str(), "%i", &MAT); + // sscanf(Temp.substr(4, 2).c_str(), "%i", &MF); + // sscanf(Temp.substr(6, 3).c_str(), "%i", &MT); + // sscanf(Temp.substr(9).c_str(), "%i", &LN); + // + // if(MT == YieldType_) + // { + // if(LN == 1) + // { + // if(FoundPID != true) + // { + // // The first line of an ENDF section for MT = 454 or 459 + // // always contains the parent PID + // // This section can potentially be expanded to check and + // // verify that it is the correct nucleus + // FoundPID = true; + // + // continue; + // } + // } else if(FoundPID == true && FoundEnergyGroup == false) + // { + // // Skip this line if it is not the energy definition line + // if(Parts[1] != 0 || Parts[3] != 0) + // { + // continue; + // } + // + // // The first block is the incident neutron energy + // // information. + // // Check to make sure that it is spontaneous or neutron + // // induced. + // if(Cause_ == G4FFGEnumerations::NEUTRON_INDUCED) + // { + // if(Parts[0] != 0) + // { + // FoundEnergyGroup = true; + // } + // } else if(Cause_ == G4FFGEnumerations::SPONTANEOUS) + // { + // if(Parts[0] == 0) + // { + // FoundEnergyGroup = true; + // } + // } else + // { // Maybe more fission causes here if added later + // FoundEnergyGroup = false; + // } + // + // if(FoundEnergyGroup == true) + // { + // // Convert to eV + // Parts[0] *= eV; + // + // // Calculate the parameters + // FirstLineInEnergyGroup = LN; + // LastLineInEnergyGroup = FirstLineInEnergyGroup + + // ceil(Parts[4] / 6.0); + // ItemCounter = 0; + // EmptyProduct = 0; + // + // // Initialize the data storage + // CurrentEnergyGroup++; + // EnergyPoints.push_back(Parts[0]); + // Yield.push_back(NewDoubleVector); + // Yield.back().resize(Product.size(), 0); + // Error.push_back(NewDoubleVector); + // Error.back().resize(Product.size(), 0); + // + // continue; + // } + // } + // + // if(LN > FirstLineInEnergyGroup && LN <= LastLineInEnergyGroup) + // { + // for(Block = 0; Block < 6; Block++) + // { + // if(EmptyProduct > 0) + // { + // EmptyProduct--; + // + // continue; + // } + // switch(ItemCounter % 4) + // { + // case 0: + // // Determine if the block is empty + // if(Parts[Block] == 0) + // { + // EmptyProduct = 3; + // + // continue; + // } + // + // // Determine if this product is already loaded + // for(Location = 0; Location < (signed)Product.size(); Location++) + // { + // if(Parts[Block] == Product.at(Location) && + // Parts[Block + 1] == MetaState.at(Location)) + // { + // break; + // } + // } + // + // // The product hasn't been created yet + // // Add it and initialize the other vectors + // if(Location == (signed)Product.size()) + // { + // Product.push_back(Parts[Block]); + // MetaState.push_back((G4FFGEnumerations::MetaState)Parts[Block + + // 1]); Yield.at(CurrentEnergyGroup).push_back(0.0); + // Error.at(CurrentEnergyGroup).push_back(0.0); + // } + // break; + // + // case 2: + // Yield.at(CurrentEnergyGroup).at(Location) = Parts[Block]; + // break; + // + // case 3: + // Error.at(CurrentEnergyGroup).at(Location) = Parts[Block]; + // break; + // } + // + // ItemCounter++; + // } + // } + // + // if (LN == LastLineInEnergyGroup) + // { + // FoundEnergyGroup = false; + // } + // } + // } + // + // G4ENDFYieldDataContainer* NewDataContainer; + // EnergyGroups_ = EnergyPoints.size(); + // EnergyGroupValues_ = new G4double[EnergyGroups_]; + // G4int NewProduct; + // G4FFGEnumerations::MetaState NewMetaState; + // G4double* NewYield = new G4double[EnergyGroups_]; + // G4double* NewError = new G4double[EnergyGroups_]; + // + // for(G4int i = 0; i < EnergyGroups_; i++) + // { + // // Load the energy values + // EnergyGroupValues_[i] = EnergyPoints.at(i); + // + // // Make all the vectors the same size + // Yield[i].resize(maxSize, 0.0); + // Error[i].resize(maxSize, 0.0); + // } + // + // // Load the data into the yield table + // for(ItemCounter = 0; ItemCounter < (signed)Product.size(); ItemCounter++) + // { + // NewProduct = Product.at(ItemCounter); + // NewMetaState = MetaState.at(ItemCounter); + // + // for(CurrentEnergyGroup = 0; CurrentEnergyGroup < EnergyGroups_; CurrentEnergyGroup++) + // { + // NewYield[CurrentEnergyGroup] = Yield.at(CurrentEnergyGroup).at(ItemCounter); + // NewYield[CurrentEnergyGroup] = Error.at(CurrentEnergyGroup).at(ItemCounter); + // } + // + // NewDataContainer = YieldContainerTable_->G4GetNewContainer(EnergyGroups_ + 1); + // NewDataContainer->SetProduct(NewProduct); + // NewDataContainer->SetMetaState(NewMetaState); + // NewDataContainer->SetYieldProbability(NewYield); + // NewDataContainer->SetYieldError(NewError); + // } + // + // delete[] NewYield; + // delete[] NewError; + + G4int MT; + G4bool correctMT; + G4int MF; + G4double dummy; + G4int blockCount; + G4int currentEnergy = 0; + G4double incidentEnergy; + G4int itemCount; + // TODO correctly implement the interpolation in the fission product yield + G4int interpolation; + G4int isotope; + G4int metastate; + G4int identifier; + G4double yield; + // "error" is included here in the event that errors are included in the future + G4double error = 0.0; + G4int maxSize = 0; + + std::vector projectileEnergies; + std::map, std::vector>> intermediateData; + std::map, std::vector>>::iterator + dataIterator; + + while (dataStream.good()) // Loop checking, 11.05.2015, T. Koi + { + dataStream >> MT >> MF >> dummy >> blockCount; + + correctMT = MT == YieldType_; + + for (G4int b = 0; b < blockCount; ++b) { + dataStream >> incidentEnergy >> itemCount >> interpolation; + maxSize = maxSize >= itemCount ? maxSize : itemCount; + + if (correctMT) { + // Load in the energy of the projectile + projectileEnergies.push_back(incidentEnergy); + currentEnergy = G4int(projectileEnergies.size() - 1); + } + else { + // !!! Do not break since we need to parse through the !!! + // !!! entire data file for all possible energies !!! + } + + for (G4int i = 0; i < itemCount; ++i) { + dataStream >> isotope >> metastate >> yield; + + if (correctMT) { + identifier = isotope * 10 + metastate; + + dataIterator = + intermediateData + .insert(std::make_pair( + identifier, std::make_pair(std::vector(projectileEnergies.size(), 0.0), + std::vector(projectileEnergies.size(), 0.0)))) + .first; + + if (dataIterator->second.first.size() < projectileEnergies.size()) { + dataIterator->second.first.resize(projectileEnergies.size()); + dataIterator->second.second.resize(projectileEnergies.size()); + } + + dataIterator->second.first[currentEnergy] = yield; + dataIterator->second.second[currentEnergy] = error; } + else { + // !!! Do not break since we need to parse through the !!! + // !!! entire data file for all possible energies !!! + } + } } - - G4ENDFYieldDataContainer* NewDataContainer; - EnergyGroups_ = (G4int)projectileEnergies.size(); - EnergyGroupValues_ = new G4double[EnergyGroups_]; - G4int NewProduct; - G4FFGEnumerations::MetaState NewMetaState; - G4double* NewYield = new G4double[EnergyGroups_]; - G4double* NewError = new G4double[EnergyGroups_]; - - for(G4int energyGroup = 0; energyGroup < EnergyGroups_; energyGroup++) - { - // Load the energy values - EnergyGroupValues_[energyGroup] = projectileEnergies[energyGroup]; + } + + G4ENDFYieldDataContainer* NewDataContainer; + EnergyGroups_ = (G4int)projectileEnergies.size(); + EnergyGroupValues_ = new G4double[EnergyGroups_]; + G4int NewProduct; + G4FFGEnumerations::MetaState NewMetaState; + auto NewYield = new G4double[EnergyGroups_]; + auto NewError = new G4double[EnergyGroups_]; + + for (G4int energyGroup = 0; energyGroup < EnergyGroups_; energyGroup++) { + // Load the energy values + EnergyGroupValues_[energyGroup] = projectileEnergies[energyGroup]; + } + + // Load the data into the yield table + for (dataIterator = intermediateData.begin(); dataIterator != intermediateData.end(); + ++dataIterator) + { + identifier = dataIterator->first; + metastate = identifier % 10; + switch (metastate) { + case 1: + NewMetaState = G4FFGEnumerations::META_1; + break; + + case 2: + NewMetaState = G4FFGEnumerations::META_2; + break; + + default: + G4Exception("G4ENDFTapeRead::ReadInData()", "Unsupported state", JustWarning, + "Unsupported metastable state supplied in fission yield data. Defaulting to " + "the ground state"); + // Fall through + case 0: + NewMetaState = G4FFGEnumerations::GROUND_STATE; + break; } - - // Load the data into the yield table - for(dataIterator = intermediateData.begin(); dataIterator != intermediateData.end(); ++dataIterator) - { - identifier = dataIterator->first; - metastate = identifier % 10; - switch(metastate) - { - case 1: - NewMetaState = G4FFGEnumerations::META_1; - break; - - case 2: - NewMetaState = G4FFGEnumerations::META_2; - break; - - default: - G4Exception("G4ENDFTapeRead::ReadInData()", - "Unsupported state", - JustWarning, - "Unsupported metastable state supplied in fission yield data. Defaulting to the ground state"); - // Fall through - case 0: - NewMetaState = G4FFGEnumerations::GROUND_STATE; - break; - } - NewProduct = (identifier - metastate) / 10; - - for(G4int energyGroup = 0; energyGroup < EnergyGroups_; energyGroup++) - { - if(energyGroup < (signed)dataIterator->second.first.size()) - { - yield = dataIterator->second.first[energyGroup]; - error = dataIterator->second.second[energyGroup]; - } else - { - yield = 0.0; - error = 0.0; - } - - NewYield[energyGroup] = yield; - NewError[energyGroup] = error; - } - - NewDataContainer = YieldContainerTable_->G4GetNewContainer(EnergyGroups_); - NewDataContainer->SetProduct(NewProduct); - NewDataContainer->SetMetaState(NewMetaState); - NewDataContainer->SetYieldProbability(NewYield); - NewDataContainer->SetYieldError(NewError); + NewProduct = (identifier - metastate) / 10; + + for (G4int energyGroup = 0; energyGroup < EnergyGroups_; energyGroup++) { + if (energyGroup < (signed)dataIterator->second.first.size()) { + yield = dataIterator->second.first[energyGroup]; + error = dataIterator->second.second[energyGroup]; + } + else { + yield = 0.0; + error = 0.0; + } + + NewYield[energyGroup] = yield; + NewError[energyGroup] = error; } - delete[] NewYield; - delete[] NewError; + NewDataContainer = YieldContainerTable_->G4GetNewContainer(EnergyGroups_); + NewDataContainer->SetProduct(NewProduct); + NewDataContainer->SetMetaState(NewMetaState); + NewDataContainer->SetYieldProbability(NewYield); + NewDataContainer->SetYieldError(NewError); + } -G4FFG_FUNCTIONLEAVE__ + delete[] NewYield; + delete[] NewError; + + G4FFG_FUNCTIONLEAVE__ } -G4ENDFTapeRead:: -~G4ENDFTapeRead( void ) +G4ENDFTapeRead::~G4ENDFTapeRead() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - delete[] EnergyGroupValues_; - delete YieldContainerTable_; + delete[] EnergyGroupValues_; + delete YieldContainerTable_; -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } - diff --git a/source/processes/hadronic/models/particle_hp/src/G4ENDFYieldDataContainer.cc b/source/processes/hadronic/models/particle_hp/src/G4ENDFYieldDataContainer.cc index 3c95f6a8b5f..00fa4e38126 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ENDFYieldDataContainer.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ENDFYieldDataContainer.cc @@ -29,89 +29,77 @@ * * Created on September 6, 2011, 10:19 AM */ - -#include "globals.hh" -#include "G4ArrayOps.hh" #include "G4ENDFYieldDataContainer.hh" + +#include "G4ArrayOps.hh" #include "G4FFGEnumerations.hh" +#include "globals.hh" -G4ENDFYieldDataContainer:: -G4ENDFYieldDataContainer( G4int YieldSlots ) +G4ENDFYieldDataContainer::G4ENDFYieldDataContainer(G4int YieldSlots) { - YieldSlots_ = YieldSlots; + YieldSlots_ = YieldSlots; - Product_ = 0; - MetaState_ = G4FFGEnumerations::GROUND_STATE; - YieldProbability_ = new G4double[YieldSlots_]; - YieldError_ = new G4double[YieldSlots_]; + Product_ = 0; + MetaState_ = G4FFGEnumerations::GROUND_STATE; + YieldProbability_ = new G4double[YieldSlots_]; + YieldError_ = new G4double[YieldSlots_]; } -G4FFGEnumerations::MetaState G4ENDFYieldDataContainer:: -GetMetaState( void ) +G4FFGEnumerations::MetaState G4ENDFYieldDataContainer::GetMetaState() { - return MetaState_; + return MetaState_; } -G4int G4ENDFYieldDataContainer:: -GetProduct( void ) +G4int G4ENDFYieldDataContainer::GetProduct() { - return Product_; + return Product_; } -G4double* G4ENDFYieldDataContainer:: -GetYieldError( void ) +G4double* G4ENDFYieldDataContainer::GetYieldError() { - return YieldError_; + return YieldError_; } -G4double* G4ENDFYieldDataContainer:: -GetYieldProbability( void ) +G4double* G4ENDFYieldDataContainer::GetYieldProbability() { - return YieldProbability_; + return YieldProbability_; } -G4int G4ENDFYieldDataContainer:: -GetYieldSlots( void ) +G4int G4ENDFYieldDataContainer::GetYieldSlots() { - return YieldSlots_; + return YieldSlots_; } -void G4ENDFYieldDataContainer:: -SetMetaState( G4FFGEnumerations::MetaState MetaState ) +void G4ENDFYieldDataContainer::SetMetaState(G4FFGEnumerations::MetaState MetaState) { - MetaState_ = MetaState; + MetaState_ = MetaState; } -void G4ENDFYieldDataContainer:: -SetProduct( G4int Product ) +void G4ENDFYieldDataContainer::SetProduct(G4int Product) { - Product_ = Product; + Product_ = Product; } -void G4ENDFYieldDataContainer:: -SetYieldError( G4double* YieldError ) +void G4ENDFYieldDataContainer::SetYieldError(G4double* YieldError) { - G4ArrayOps::Copy(YieldSlots_, YieldError_, YieldError); + G4ArrayOps::Copy(YieldSlots_, YieldError_, YieldError); } -void G4ENDFYieldDataContainer:: -SetYieldProbability( G4double* YieldProbability ) +void G4ENDFYieldDataContainer::SetYieldProbability(G4double* YieldProbability) { - G4ArrayOps::Copy(YieldSlots_, YieldProbability_, YieldProbability); + G4ArrayOps::Copy(YieldSlots_, YieldProbability_, YieldProbability); } void G4ENDFYieldDataContainer:: -//G4ENDFYieldDataContainer::SetYieldSlots(G4int NumberOfSlots) -SetYieldSlots(G4int NumberOfSlots) + // G4ENDFYieldDataContainer::SetYieldSlots(G4int NumberOfSlots) + SetYieldSlots(G4int NumberOfSlots) { - YieldSlots_ = NumberOfSlots; + YieldSlots_ = NumberOfSlots; } -G4ENDFYieldDataContainer:: -~G4ENDFYieldDataContainer( void ) +G4ENDFYieldDataContainer::~G4ENDFYieldDataContainer() { - delete[] YieldProbability_; - delete[] YieldError_; + delete[] YieldProbability_; + delete[] YieldError_; } - diff --git a/source/processes/hadronic/models/particle_hp/src/G4FFGDebuggingMacros.cc b/source/processes/hadronic/models/particle_hp/src/G4FFGDebuggingMacros.cc index 7bdbe17d845..e390ca4681d 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4FFGDebuggingMacros.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4FFGDebuggingMacros.cc @@ -29,14 +29,13 @@ * * Created on August 17, 2012, 17:46 */ - + #include "G4FFGDebuggingMacros.hh" // Only set the values if G4DEBUG_VERBOSE is defined. #ifdef G4DEBUG_VERBOSE - G4long G4FFGDEBUG_RECURSIVE_REPRESSION = 0; - G4long G4FFGDEBUG_DATA_STRUCTURE_REPRESSION = 0; - G4long G4FFGDEBUG_RECURSIVE_REPRESSION_COUNTER = 0; - G4long G4FFGDEBUG_DATA_STRUCTURE_REPRESSION_COUNTER = 0; +G4long G4FFGDEBUG_RECURSIVE_REPRESSION = 0; +G4long G4FFGDEBUG_DATA_STRUCTURE_REPRESSION = 0; +G4long G4FFGDEBUG_RECURSIVE_REPRESSION_COUNTER = 0; +G4long G4FFGDEBUG_DATA_STRUCTURE_REPRESSION_COUNTER = 0; #endif /* G4DEBUG_VERBOSE */ - diff --git a/source/processes/hadronic/models/particle_hp/src/G4FPYBiasedLightFragmentDist.cc b/source/processes/hadronic/models/particle_hp/src/G4FPYBiasedLightFragmentDist.cc index c6240d674aa..95600e15e28 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4FPYBiasedLightFragmentDist.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4FPYBiasedLightFragmentDist.cc @@ -29,109 +29,91 @@ * * Created on June 2, 2011, 11:02 AM */ - -#include "G4Ions.hh" -#include "Randomize.hh" -#include "globals.hh" + +#include "G4FPYBiasedLightFragmentDist.hh" #include "G4FFGDebuggingMacros.hh" #include "G4FFGEnumerations.hh" -#include "G4FPYBiasedLightFragmentDist.hh" #include "G4FissionProductYieldDist.hh" +#include "G4Ions.hh" +#include "Randomize.hh" +#include "globals.hh" -G4FPYBiasedLightFragmentDist:: -G4FPYBiasedLightFragmentDist( G4int WhichIsotope, - G4FFGEnumerations::MetaState WhichMetaState, - G4FFGEnumerations::FissionCause WhichCause, - G4FFGEnumerations::YieldType WhichYieldType, - std::istringstream& dataStream ) -: G4FissionProductYieldDist( WhichIsotope, - WhichMetaState, - WhichCause, - WhichYieldType, - dataStream) +G4FPYBiasedLightFragmentDist::G4FPYBiasedLightFragmentDist( + G4int WhichIsotope, G4FFGEnumerations::MetaState WhichMetaState, + G4FFGEnumerations::FissionCause WhichCause, G4FFGEnumerations::YieldType WhichYieldType, + std::istringstream& dataStream) + : G4FissionProductYieldDist(WhichIsotope, WhichMetaState, WhichCause, WhichYieldType, dataStream) { - // Initialize the class - Initialize(); + // Initialize the class + Initialize(); } -G4FPYBiasedLightFragmentDist:: -G4FPYBiasedLightFragmentDist( G4int WhichIsotope, - G4FFGEnumerations::MetaState WhichMetaState, - G4FFGEnumerations::FissionCause WhichCause, - G4FFGEnumerations::YieldType WhichYieldType, - G4int Verbosity, - std::istringstream& dataStream) -: G4FissionProductYieldDist( WhichIsotope, - WhichMetaState, - WhichCause, - WhichYieldType, - Verbosity, - dataStream ) +G4FPYBiasedLightFragmentDist::G4FPYBiasedLightFragmentDist( + G4int WhichIsotope, G4FFGEnumerations::MetaState WhichMetaState, + G4FFGEnumerations::FissionCause WhichCause, G4FFGEnumerations::YieldType WhichYieldType, + G4int Verbosity, std::istringstream& dataStream) + : G4FissionProductYieldDist(WhichIsotope, WhichMetaState, WhichCause, WhichYieldType, Verbosity, + dataStream) { - // Initialize the class - Initialize(); + // Initialize the class + Initialize(); } -void G4FPYBiasedLightFragmentDist:: -Initialize( void ) +void G4FPYBiasedLightFragmentDist::Initialize() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - // Initialize the half-weight for fission product sampling - HalfWeight_ = (G4int)floor((Isotope_ % 1000) / 2.0); + // Initialize the half-weight for fission product sampling + HalfWeight_ = (G4int)floor((Isotope_ % 1000) / 2.0); -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -G4Ions* G4FPYBiasedLightFragmentDist:: -GetFissionProduct( void ) +G4Ions* G4FPYBiasedLightFragmentDist::GetFissionProduct() { -G4FFG_FUNCTIONENTER__ - - G4Ions* Particle; - G4bool IsHeavy; - G4bool IsNotFeasable; - G4int Counter; - - Counter = 0; - do - { - // If we have sampled too many times then we may need to do something else - if(Counter == 1000) - { - Particle = NULL; - break; - } - - // Generate a (0, 1] random number, then find the corresponding particle - Particle = FindParticle(RandomEngine_->G4SampleUniform()); - - // If the daughter is heavier than half of the original nucleus weight - // or not physically feasable then set the flags to sample again - IsHeavy = (Particle->GetAtomicMass() > HalfWeight_); - IsNotFeasable = (Particle->GetAtomicMass() > RemainingA_ + 1 - || Particle->GetAtomicNumber() > RemainingZ_ + 1); - - Counter++; - } while (IsHeavy || IsNotFeasable); // Loop checking, 11.05.2015, T. Koi - - // Something went wrong, so figure out how to fix it - if(Particle == NULL) - { - /// \todo Figure out what to do if a suitable particle is not found in 1000 iterations + G4FFG_FUNCTIONENTER__ + + G4Ions* Particle; + G4bool IsHeavy; + G4bool IsNotFeasable; + G4int Counter; + + Counter = 0; + do { + // If we have sampled too many times then we may need to do something else + if (Counter == 1000) { + Particle = nullptr; + break; } - // Return the G4ParticleDefintion pointer to the random light fragment -G4FFG_FUNCTIONLEAVE__ - return Particle; + // Generate a (0, 1] random number, then find the corresponding particle + Particle = FindParticle(RandomEngine_->G4SampleUniform()); + + // If the daughter is heavier than half of the original nucleus weight + // or not physically feasable then set the flags to sample again + IsHeavy = (Particle->GetAtomicMass() > HalfWeight_); + IsNotFeasable = (Particle->GetAtomicMass() > RemainingA_ + 1 + || Particle->GetAtomicNumber() > RemainingZ_ + 1); + + Counter++; + } while (IsHeavy || IsNotFeasable); // Loop checking, 11.05.2015, T. Koi + + // Something went wrong, so figure out how to fix it + if (Particle == nullptr) { + /// \todo Figure out what to do if a suitable particle is not found in 1000 iterations + } + + // Return the G4ParticleDefintion pointer to the random light fragment + G4FFG_FUNCTIONLEAVE__ + return Particle; } -G4FPYBiasedLightFragmentDist::~G4FPYBiasedLightFragmentDist( void ) +G4FPYBiasedLightFragmentDist::~G4FPYBiasedLightFragmentDist() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - // Empty - all the data elements to be deconstructed are removed by - // ~G4FissionProductYieldDist() -G4FFG_FUNCTIONLEAVE__ + // Empty - all the data elements to be deconstructed are removed by + // ~G4FissionProductYieldDist() + G4FFG_FUNCTIONLEAVE__ } diff --git a/source/processes/hadronic/models/particle_hp/src/G4FPYNormalFragmentDist.cc b/source/processes/hadronic/models/particle_hp/src/G4FPYNormalFragmentDist.cc index 4b1004162a1..8861b468f33 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4FPYNormalFragmentDist.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4FPYNormalFragmentDist.cc @@ -29,105 +29,89 @@ * * Created on July 26, 2011, 12:26 PM */ - -#include "G4Ions.hh" -#include "Randomize.hh" -#include "globals.hh" + +#include "G4FPYNormalFragmentDist.hh" #include "G4FFGDebuggingMacros.hh" #include "G4FFGEnumerations.hh" -#include "G4FPYNormalFragmentDist.hh" #include "G4FissionProductYieldDist.hh" +#include "G4Ions.hh" +#include "Randomize.hh" +#include "globals.hh" -G4FPYNormalFragmentDist:: -G4FPYNormalFragmentDist( G4int WhichIsotope, - G4FFGEnumerations::MetaState WhichMetaState, - G4FFGEnumerations::FissionCause WhichCause, - G4FFGEnumerations::YieldType WhichYieldType, - std::istringstream& dataFile) -: G4FissionProductYieldDist( WhichIsotope, - WhichMetaState, - WhichCause, - WhichYieldType, - dataFile) +G4FPYNormalFragmentDist::G4FPYNormalFragmentDist(G4int WhichIsotope, + G4FFGEnumerations::MetaState WhichMetaState, + G4FFGEnumerations::FissionCause WhichCause, + G4FFGEnumerations::YieldType WhichYieldType, + std::istringstream& dataFile) + : G4FissionProductYieldDist(WhichIsotope, WhichMetaState, WhichCause, WhichYieldType, dataFile) { - // Initialize the class - Initialize(); + // Initialize the class + Initialize(); } -G4FPYNormalFragmentDist:: -G4FPYNormalFragmentDist( G4int WhichIsotope, - G4FFGEnumerations::MetaState WhichMetaState, - G4FFGEnumerations::FissionCause WhichCause, - G4FFGEnumerations::YieldType WhichYieldType, - G4int Verbosity, - std::istringstream& dataFile) -: G4FissionProductYieldDist( WhichIsotope, - WhichMetaState, - WhichCause, - WhichYieldType, - Verbosity, - dataFile) +G4FPYNormalFragmentDist::G4FPYNormalFragmentDist(G4int WhichIsotope, + G4FFGEnumerations::MetaState WhichMetaState, + G4FFGEnumerations::FissionCause WhichCause, + G4FFGEnumerations::YieldType WhichYieldType, + G4int Verbosity, std::istringstream& dataFile) + : G4FissionProductYieldDist(WhichIsotope, WhichMetaState, WhichCause, WhichYieldType, Verbosity, + dataFile) { - // Initialize the class - Initialize(); + // Initialize the class + Initialize(); } -void G4FPYNormalFragmentDist:: -Initialize( void ) -{ -G4FFG_FUNCTIONENTER__ +void G4FPYNormalFragmentDist::Initialize(){G4FFG_FUNCTIONENTER__ - // Nothing here yet + // Nothing here yet -G4FFG_FUNCTIONLEAVE__ -} + G4FFG_FUNCTIONLEAVE__} -G4Ions* G4FPYNormalFragmentDist:: -GetFissionProduct( void ) +G4Ions* G4FPYNormalFragmentDist::GetFissionProduct() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - G4Ions* Particle=nullptr; + G4Ions* Particle = nullptr; - // Generate a (0, 1] random number and return the respective particle. - // The ENDF data tables lists 72172 as the largest fission fragment produced - // for any fission event. The maximum alpha production is 10 and the - // smallest fissile isotope is 90227. This means that if isotope 72172 were - // selected as the first daughter product, then at 10 alpha particles only - // 15 nucleons and -2 protons would remain for the second daughter product. - // Although the actual probability of this occurring is very small, or 0 in - // this case, a check should still be made to ensure that the second - // daughter product can be physically realized. This would prevent a - // situation such as this extreme example which results in a nucleus of 13 - // neutrons and 2 anti-protons. - // This quick sanity check may become even more valid if the ENDF data - // tables are expanded in the future and include larger fission products. + // Generate a (0, 1] random number and return the respective particle. + // The ENDF data tables lists 72172 as the largest fission fragment produced + // for any fission event. The maximum alpha production is 10 and the + // smallest fissile isotope is 90227. This means that if isotope 72172 were + // selected as the first daughter product, then at 10 alpha particles only + // 15 nucleons and -2 protons would remain for the second daughter product. + // Although the actual probability of this occurring is very small, or 0 in + // this case, a check should still be made to ensure that the second + // daughter product can be physically realized. This would prevent a + // situation such as this extreme example which results in a nucleus of 13 + // neutrons and 2 anti-protons. + // This quick sanity check may become even more valid if the ENDF data + // tables are expanded in the future and include larger fission products. - G4int icounter=0; - G4int icounter_max=1024; - do - { - icounter++; - if ( icounter > icounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; - } - Particle = FindParticle(RandomEngine_->G4SampleUniform()); - } while(Particle->GetAtomicMass() > RemainingA_ + 1 - || Particle->GetAtomicNumber() > RemainingZ_ + 1); - // Loop checking, 11.05.2015, T. Koi + G4int icounter = 0; + G4int icounter_max = 1024; + do { + icounter++; + if (icounter > icounter_max) { + G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " + << __FILE__ << "." << G4endl; + break; + } + Particle = FindParticle(RandomEngine_->G4SampleUniform()); + } while (Particle->GetAtomicMass() > RemainingA_ + 1 + || Particle->GetAtomicNumber() > RemainingZ_ + 1); + // Loop checking, 11.05.2015, T. Koi -G4FFG_FUNCTIONLEAVE__ - return Particle; + G4FFG_FUNCTIONLEAVE__ + return Particle; } -G4FPYNormalFragmentDist::~G4FPYNormalFragmentDist( void ) +G4FPYNormalFragmentDist::~G4FPYNormalFragmentDist() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ + + // Empty - all the data elements to be deconstructed are removed by + // ~G4FissionProductYieldDist() - // Empty - all the data elements to be deconstructed are removed by - // ~G4FissionProductYieldDist() - -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } diff --git a/source/processes/hadronic/models/particle_hp/src/G4FPYSamplingOps.cc b/source/processes/hadronic/models/particle_hp/src/G4FPYSamplingOps.cc index b2c678a7321..c63f40b82c5 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4FPYSamplingOps.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4FPYSamplingOps.cc @@ -30,657 +30,588 @@ * Created on June 30, 2011, 11:10 AM */ -#include - -#include -#include "Randomize.hh" -#include "globals.hh" -#include "G4Log.hh" -#include "G4Pow.hh" +#include "G4FPYSamplingOps.hh" #include "G4FFGDebuggingMacros.hh" #include "G4FFGDefaultValues.hh" #include "G4FFGEnumerations.hh" -#include "G4FPYSamplingOps.hh" +#include "G4Log.hh" +#include "G4Pow.hh" #include "G4ShiftedGaussian.hh" #include "G4WattFissionSpectrumValues.hh" +#include "Randomize.hh" +#include "globals.hh" + +#include -G4FPYSamplingOps:: -G4FPYSamplingOps( void ) +#include + +G4FPYSamplingOps::G4FPYSamplingOps() { - // Set the default verbosity - Verbosity_ = G4FFGDefaultValues::Verbosity; - - // Initialize the class - Initialize(); + // Set the default verbosity + Verbosity_ = G4FFGDefaultValues::Verbosity; + + // Initialize the class + Initialize(); } -G4FPYSamplingOps:: -G4FPYSamplingOps( G4int Verbosity ) +G4FPYSamplingOps::G4FPYSamplingOps(G4int Verbosity) { - // Set the default verbosity - Verbosity_ = Verbosity; - - // Initialize the class - Initialize(); + // Set the default verbosity + Verbosity_ = Verbosity; + + // Initialize the class + Initialize(); } -void G4FPYSamplingOps:: -Initialize( void ) +void G4FPYSamplingOps::Initialize() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ + + // Get the pointer to the random number generator + // RandomEngine_ = CLHEP::HepRandom::getTheEngine(); + RandomEngine_ = G4Random::getTheEngine(); + + // Initialize the data members + ShiftedGaussianValues_ = new G4ShiftedGaussian; + Mean_ = 0; + StdDev_ = 0; + NextGaussianIsStoredInMemory_ = FALSE; + GaussianOne_ = 0; + GaussianTwo_ = 0; + Tolerance_ = 0.000001; + WattConstants_ = new WattSpectrumConstants; + WattConstants_->Product = 0; + + G4FFG_FUNCTIONLEAVE__ +} - // Get the pointer to the random number generator - //RandomEngine_ = CLHEP::HepRandom::getTheEngine(); - RandomEngine_ = G4Random::getTheEngine(); +G4double G4FPYSamplingOps::G4SampleGaussian(G4double Mean, G4double StdDev) +{ + G4FFG_SAMPLING_FUNCTIONENTER__ - // Initialize the data members - ShiftedGaussianValues_ = new G4ShiftedGaussian; - Mean_ = 0; - StdDev_ = 0; + // Determine if the parameters have changed + G4bool ParametersChanged = (Mean_ != Mean || StdDev_ != StdDev); + if (static_cast(ParametersChanged) == TRUE) { + // Set the new values if the parameters have changed NextGaussianIsStoredInMemory_ = FALSE; - GaussianOne_ = 0; - GaussianTwo_ = 0; - Tolerance_ = 0.000001; - WattConstants_ = new WattSpectrumConstants; - WattConstants_->Product = 0; -G4FFG_FUNCTIONLEAVE__ + Mean_ = Mean; + StdDev_ = StdDev; + } + + G4double Sample = SampleGaussian(); + + G4FFG_SAMPLING_FUNCTIONLEAVE__ + return Sample; } -G4double G4FPYSamplingOps:: -G4SampleGaussian( G4double Mean, - G4double StdDev ) +G4double G4FPYSamplingOps::G4SampleGaussian(G4double Mean, G4double StdDev, + G4FFGEnumerations::GaussianRange Range) { -G4FFG_SAMPLING_FUNCTIONENTER__ + G4FFG_SAMPLING_FUNCTIONENTER__ - // Determine if the parameters have changed - G4bool ParametersChanged = (Mean_ != Mean || StdDev_ != StdDev); - if(ParametersChanged == TRUE) - { - // Set the new values if the parameters have changed - NextGaussianIsStoredInMemory_ = FALSE; + if (Range == G4FFGEnumerations::ALL) { + // Call the overloaded function + G4double Sample = G4SampleGaussian(Mean, StdDev); - Mean_ = Mean; - StdDev_ = StdDev; - } - - G4double Sample = SampleGaussian(); - -G4FFG_SAMPLING_FUNCTIONLEAVE__ + G4FFG_SAMPLING_FUNCTIONLEAVE__ return Sample; -} - -G4double G4FPYSamplingOps:: -G4SampleGaussian( G4double Mean, - G4double StdDev, - G4FFGEnumerations::GaussianRange Range ) -{ -G4FFG_SAMPLING_FUNCTIONENTER__ - - if(Range == G4FFGEnumerations::ALL) - { - // Call the overloaded function - G4double Sample = G4SampleGaussian(Mean, StdDev); - -G4FFG_SAMPLING_FUNCTIONLEAVE__ - return Sample; + } + + // Determine if the parameters have changed + G4bool ParametersChanged = (Mean_ != Mean || StdDev_ != StdDev); + if (static_cast(ParametersChanged) == TRUE) { + if (Mean <= 0) { + std::ostringstream Temp; + Temp << "Mean value of " << Mean << " out of range"; + G4Exception("G4FPYGaussianOps::G4SampleIntegerGaussian()", Temp.str().c_str(), JustWarning, + "A value of '0' will be used instead."); + + G4FFG_SAMPLING_FUNCTIONLEAVE__ + return 0; } - // Determine if the parameters have changed - G4bool ParametersChanged = (Mean_ != Mean || - StdDev_ != StdDev); - if(ParametersChanged == TRUE) - { - if(Mean <= 0) - { - std::ostringstream Temp; - Temp << "Mean value of " << Mean << " out of range"; - G4Exception("G4FPYGaussianOps::G4SampleIntegerGaussian()", - Temp.str().c_str(), - JustWarning, - "A value of '0' will be used instead."); - -G4FFG_SAMPLING_FUNCTIONLEAVE__ - return 0; - } + // Set the new values if the parameters have changed and then perform + // the shift + Mean_ = Mean; + StdDev_ = StdDev; - // Set the new values if the parameters have changed and then perform - // the shift - Mean_ = Mean; - StdDev_ = StdDev; + ShiftParameters(G4FFGEnumerations::DOUBLE); + } - ShiftParameters(G4FFGEnumerations::DOUBLE); - } + // Sample the Gaussian distribution + G4double Rand; + do { + Rand = SampleGaussian(); + } while (Rand < 0); // Loop checking, 11.05.2015, T. Koi - // Sample the Gaussian distribution - G4double Rand; - do - { - Rand = SampleGaussian(); - } while(Rand < 0); // Loop checking, 11.05.2015, T. Koi - -G4FFG_SAMPLING_FUNCTIONLEAVE__ - return Rand; + G4FFG_SAMPLING_FUNCTIONLEAVE__ + return Rand; } -G4int G4FPYSamplingOps:: -G4SampleIntegerGaussian( G4double Mean, - G4double StdDev ) +G4int G4FPYSamplingOps::G4SampleIntegerGaussian(G4double Mean, G4double StdDev) { -G4FFG_SAMPLING_FUNCTIONENTER__ + G4FFG_SAMPLING_FUNCTIONENTER__ - // Determine if the parameters have changed - G4bool ParametersChanged = (Mean_ != Mean || StdDev_ != StdDev); - if(ParametersChanged == TRUE) - { - // Set the new values if the parameters have changed - NextGaussianIsStoredInMemory_ = FALSE; + // Determine if the parameters have changed + G4bool ParametersChanged = (Mean_ != Mean || StdDev_ != StdDev); + if (static_cast(ParametersChanged) == TRUE) { + // Set the new values if the parameters have changed + NextGaussianIsStoredInMemory_ = FALSE; - Mean_ = Mean; - StdDev_ = StdDev; - } + Mean_ = Mean; + StdDev_ = StdDev; + } - // Return the sample integer value - G4int Sample = (G4int)(std::floor(SampleGaussian())); + // Return the sample integer value + auto Sample = (G4int)(std::floor(SampleGaussian())); -G4FFG_SAMPLING_FUNCTIONLEAVE__ - return Sample; + G4FFG_SAMPLING_FUNCTIONLEAVE__ + return Sample; } -G4int G4FPYSamplingOps:: -G4SampleIntegerGaussian( G4double Mean, - G4double StdDev, - G4FFGEnumerations::GaussianRange Range ) +G4int G4FPYSamplingOps::G4SampleIntegerGaussian(G4double Mean, G4double StdDev, + G4FFGEnumerations::GaussianRange Range) { -G4FFG_SAMPLING_FUNCTIONENTER__ - - if(Range == G4FFGEnumerations::ALL) - { - // Call the overloaded function - G4int Sample = G4SampleIntegerGaussian(Mean, StdDev); - -G4FFG_SAMPLING_FUNCTIONLEAVE__ - return Sample; - } else - { - // ParameterShift() locks up if the mean is less than 1. - std::ostringstream Temp; - if(Mean < 1) - { - // Temp << "Mean value of " << Mean << " out of range"; - // G4Exception("G4FPYGaussianOps::G4SampleIntegerGaussian()", - // Temp.str().c_str(), - // JustWarning, - // "A value of '0' will be used instead."); - - // return 0; - } - - if(Mean / StdDev < 2) - { - //Temp << "Non-ideal conditions:\tMean:" << Mean << "\tStdDev: " - // << StdDev; - //G4Exception("G4FPYGaussianOps::G4SampleIntegerGaussian()", - // Temp.str().c_str(), - // JustWarning, - // "Results not guaranteed: Consider tightening the standard deviation"); - } - - // Determine if the parameters have changed - G4bool ParametersChanged = (Mean_ != Mean || - StdDev_ != StdDev); - if(ParametersChanged == TRUE) - { - // Set the new values if the parameters have changed and then perform - // the shift - Mean_ = Mean; - StdDev_ = StdDev; - - ShiftParameters(G4FFGEnumerations::INT); - } + G4FFG_SAMPLING_FUNCTIONENTER__ - G4int RandInt; - // Sample the Gaussian distribution - only non-negative values are - // accepted - do - { - RandInt = (G4int)floor(SampleGaussian()); - } while (RandInt < 0); // Loop checking, 11.05.2015, T. Koi + if (Range == G4FFGEnumerations::ALL) { + // Call the overloaded function + G4int Sample = G4SampleIntegerGaussian(Mean, StdDev); -G4FFG_SAMPLING_FUNCTIONLEAVE__ - return RandInt; - } + G4FFG_SAMPLING_FUNCTIONLEAVE__ + return Sample; + } + // ParameterShift() locks up if the mean is less than 1. + std::ostringstream Temp; + if (Mean < 1) { + // Temp << "Mean value of " << Mean << " out of range"; + // G4Exception("G4FPYGaussianOps::G4SampleIntegerGaussian()", + // Temp.str().c_str(), + // JustWarning, + // "A value of '0' will be used instead."); + + // return 0; + } + + if (Mean / StdDev < 2) { + // Temp << "Non-ideal conditions:\tMean:" << Mean << "\tStdDev: " + // << StdDev; + // G4Exception("G4FPYGaussianOps::G4SampleIntegerGaussian()", + // Temp.str().c_str(), + // JustWarning, + // "Results not guaranteed: Consider tightening the standard deviation"); + } + + // Determine if the parameters have changed + G4bool ParametersChanged = (Mean_ != Mean || StdDev_ != StdDev); + if (static_cast(ParametersChanged) == TRUE) { + // Set the new values if the parameters have changed and then perform + // the shift + Mean_ = Mean; + StdDev_ = StdDev; + + ShiftParameters(G4FFGEnumerations::INT); + } + + G4int RandInt; + // Sample the Gaussian distribution - only non-negative values are + // accepted + do { + RandInt = (G4int)floor(SampleGaussian()); + } while (RandInt < 0); // Loop checking, 11.05.2015, T. Koi + + G4FFG_SAMPLING_FUNCTIONLEAVE__ + return RandInt; } -G4double G4FPYSamplingOps:: -G4SampleUniform( void ) +G4double G4FPYSamplingOps::G4SampleUniform() { -G4FFG_SAMPLING_FUNCTIONENTER__ + G4FFG_SAMPLING_FUNCTIONENTER__ - G4double Sample = RandomEngine_->flat(); - -G4FFG_SAMPLING_FUNCTIONLEAVE__ - return Sample; + G4double Sample = RandomEngine_->flat(); + + G4FFG_SAMPLING_FUNCTIONLEAVE__ + return Sample; } -G4double G4FPYSamplingOps:: -G4SampleUniform( G4double Lower, - G4double Upper ) +G4double G4FPYSamplingOps::G4SampleUniform(G4double Lower, G4double Upper) { -G4FFG_SAMPLING_FUNCTIONENTER__ + G4FFG_SAMPLING_FUNCTIONENTER__ - // Calculate the difference - G4double Difference = Upper - Lower; + // Calculate the difference + G4double Difference = Upper - Lower; - // Scale appropriately and return the value - G4double Sample = G4SampleUniform() * Difference + Lower; + // Scale appropriately and return the value + G4double Sample = G4SampleUniform() * Difference + Lower; -G4FFG_SAMPLING_FUNCTIONLEAVE__ - return Sample; + G4FFG_SAMPLING_FUNCTIONLEAVE__ + return Sample; } -G4double G4FPYSamplingOps:: -G4SampleWatt( G4int WhatIsotope, - G4FFGEnumerations::FissionCause WhatCause, - G4double WhatEnergy ) +G4double G4FPYSamplingOps::G4SampleWatt(G4int WhatIsotope, + G4FFGEnumerations::FissionCause WhatCause, + G4double WhatEnergy) { -G4FFG_SAMPLING_FUNCTIONENTER__ - - // Determine if the parameters are different - //TK modified 131108 - //if(WattConstants_->Product != WhatIsotope - if(WattConstants_->Product != WhatIsotope/10 - || WattConstants_->Cause != WhatCause - || WattConstants_->Energy!= WhatEnergy ) - { - // If the parameters are different or have not yet been defined then we - // need to re-evaluate the constants - //TK modified 131108 - //WattConstants_->Product = WhatIsotope; - WattConstants_->Product = WhatIsotope/10; - WattConstants_->Cause = WhatCause; - WattConstants_->Energy = WhatEnergy; - - EvaluateWattConstants(); - } - - G4double X = -G4Log(G4SampleUniform()); - G4double Y = -G4Log(G4SampleUniform()); - G4int icounter=0; - G4int icounter_max=1024; - while(G4Pow::GetInstance()->powN(Y - WattConstants_->M*(X + 1), 2) - > WattConstants_->B * WattConstants_->L * X) // Loop checking, 11.05.2015, T. Koi - { - icounter++; - if ( icounter > icounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; - } - X = -G4Log(G4SampleUniform()); - Y = -G4Log(G4SampleUniform()); + G4FFG_SAMPLING_FUNCTIONENTER__ + + // Determine if the parameters are different + // TK modified 131108 + // if(WattConstants_->Product != WhatIsotope + if (WattConstants_->Product != WhatIsotope / 10 || WattConstants_->Cause != WhatCause + || WattConstants_->Energy != WhatEnergy) + { + // If the parameters are different or have not yet been defined then we + // need to re-evaluate the constants + // TK modified 131108 + // WattConstants_->Product = WhatIsotope; + WattConstants_->Product = WhatIsotope / 10; + WattConstants_->Cause = WhatCause; + WattConstants_->Energy = WhatEnergy; + + EvaluateWattConstants(); + } + + G4double X = -G4Log(G4SampleUniform()); + G4double Y = -G4Log(G4SampleUniform()); + G4int icounter = 0; + G4int icounter_max = 1024; + while (G4Pow::GetInstance()->powN(Y - WattConstants_->M * (X + 1), 2) + > WattConstants_->B * WattConstants_->L * X) // Loop checking, 11.05.2015, T. Koi + { + icounter++; + if (icounter > icounter_max) { + G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " + << __FILE__ << "." << G4endl; + break; } + X = -G4Log(G4SampleUniform()); + Y = -G4Log(G4SampleUniform()); + } -G4FFG_SAMPLING_FUNCTIONLEAVE__ - return WattConstants_->L * X; + G4FFG_SAMPLING_FUNCTIONLEAVE__ + return WattConstants_->L * X; } -void G4FPYSamplingOps:: -G4SetVerbosity(G4int Verbosity) +void G4FPYSamplingOps::G4SetVerbosity(G4int Verbosity) { -G4FFG_SAMPLING_FUNCTIONENTER__ + G4FFG_SAMPLING_FUNCTIONENTER__ + + Verbosity_ = Verbosity; - Verbosity_ = Verbosity; - - ShiftedGaussianValues_->G4SetVerbosity(Verbosity_); + ShiftedGaussianValues_->G4SetVerbosity(Verbosity_); -G4FFG_SAMPLING_FUNCTIONLEAVE__ + G4FFG_SAMPLING_FUNCTIONLEAVE__ } -G4bool G4FPYSamplingOps:: -CheckAndSetParameters( void ) +G4bool G4FPYSamplingOps::CheckAndSetParameters() { -G4FFG_SAMPLING_FUNCTIONENTER__ + G4FFG_SAMPLING_FUNCTIONENTER__ - G4double ShiftedMean = ShiftedGaussianValues_->G4FindShiftedMean(Mean_, StdDev_); - if(ShiftedMean == 0) - { -G4FFG_SAMPLING_FUNCTIONLEAVE__ - return FALSE; - } + G4double ShiftedMean = ShiftedGaussianValues_->G4FindShiftedMean(Mean_, StdDev_); + if (ShiftedMean == 0) { + G4FFG_SAMPLING_FUNCTIONLEAVE__ + return FALSE; + } - Mean_ = ShiftedMean; + Mean_ = ShiftedMean; -G4FFG_SAMPLING_FUNCTIONLEAVE__ - return TRUE; + G4FFG_SAMPLING_FUNCTIONLEAVE__ + return TRUE; } -void G4FPYSamplingOps:: -EvaluateWattConstants( void ) +void G4FPYSamplingOps::EvaluateWattConstants() { -G4FFG_SAMPLING_FUNCTIONENTER__ - - G4double A, K; - A = K = 0; - // Use the default values if IsotopeIndex is not reset - G4int IsotopeIndex = 0; - - if(WattConstants_->Cause == G4FFGEnumerations::SPONTANEOUS) - { - // Determine if the isotope requested exists in the lookup tables - for(G4int i = 0; SpontaneousWattIsotopesIndex[i] != -1; i++) - { - if(SpontaneousWattIsotopesIndex[i] == - WattConstants_->Product) - { - IsotopeIndex = i; - - break; - } - } + G4FFG_SAMPLING_FUNCTIONENTER__ - // Get A and B - A = SpontaneousWattConstants[IsotopeIndex][0]; - WattConstants_->B = SpontaneousWattConstants[IsotopeIndex][1]; - } else if (WattConstants_->Cause == G4FFGEnumerations::NEUTRON_INDUCED) - { - // Determine if the isotope requested exists in the lookup tables - for(G4int i = 0; NeutronInducedWattIsotopesIndex[i] != -1; i++) - { - if(NeutronInducedWattIsotopesIndex[i] == WattConstants_->Product) - { - IsotopeIndex = i; - break; - } - } + G4double A, K; + A = K = 0; + // Use the default values if IsotopeIndex is not reset + G4int IsotopeIndex = 0; - // Determine the Watt fission spectrum constants based on the energy of - // the incident neutron - if(WattConstants_->Energy == G4FFGDefaultValues::ThermalNeutronEnergy) - { - A = NeutronInducedWattConstants[IsotopeIndex][0][0]; - WattConstants_->B = NeutronInducedWattConstants[IsotopeIndex][0][1]; - } else if (WattConstants_->Energy > 14.0 * CLHEP::MeV) - { - G4Exception("G4FPYSamplingOps::G4SampleWatt()", - "Incident neutron energy above 14 MeV requested.", - JustWarning, - "Using Watt fission constants for 14 Mev."); - - A = NeutronInducedWattConstants[IsotopeIndex][2][0]; - WattConstants_->B = NeutronInducedWattConstants[IsotopeIndex][2][1]; - } else - { - G4int EnergyIndex = 0; - G4double EnergyDifference = 0; - G4double RangeDifference, ConstantDifference; - - for(G4int i = 1; IncidentEnergyBins[i] != -1; i++) - { - if(WattConstants_->Energy <= IncidentEnergyBins[i]) - { - EnergyIndex = i; - EnergyDifference = IncidentEnergyBins[EnergyIndex] - WattConstants_->Energy; - if(EnergyDifference != 0) - { - std::ostringstream Temp; - Temp << "Incident neutron energy of "; - Temp << WattConstants_->Energy << " MeV is not "; - Temp << "explicitly listed in the data tables"; -// G4Exception("G4FPYSamplingOps::G4SampleWatt()", -// Temp.str().c_str(), -// JustWarning, -// "Using linear interpolation."); - } - break; - } - } - - RangeDifference = IncidentEnergyBins[EnergyIndex] - IncidentEnergyBins[EnergyIndex - 1]; - - // Interpolate the value for 'a' - ConstantDifference = - NeutronInducedWattConstants[IsotopeIndex][EnergyIndex][0] - - NeutronInducedWattConstants[IsotopeIndex] - [EnergyIndex - 1][0]; - A = (EnergyDifference / RangeDifference) * ConstantDifference + - NeutronInducedWattConstants[IsotopeIndex] - [EnergyIndex - 1][0]; - - // Interpolate the value for 'b' - ConstantDifference = - NeutronInducedWattConstants[IsotopeIndex][EnergyIndex][1] - - NeutronInducedWattConstants[IsotopeIndex] - [EnergyIndex - 1][1]; - WattConstants_->B = - (EnergyDifference / RangeDifference) * ConstantDifference + - NeutronInducedWattConstants[IsotopeIndex] - [EnergyIndex - 1][1]; - } - } else - { - // Produce an error since an unsupported fission type was requested and - // abort the current run - G4String Temp = "Watt fission spectra data not available for "; - if(WattConstants_->Cause == G4FFGEnumerations::PROTON_INDUCED) - { - Temp += "proton induced fission."; - } else if(WattConstants_->Cause == G4FFGEnumerations::GAMMA_INDUCED) - { - Temp += "gamma induced fission."; - } else - { - Temp += "!Warning! unknown cause."; + if (WattConstants_->Cause == G4FFGEnumerations::SPONTANEOUS) { + // Determine if the isotope requested exists in the lookup tables + for (G4int i = 0; SpontaneousWattIsotopesIndex[i] != -1; i++) { + if (SpontaneousWattIsotopesIndex[i] == WattConstants_->Product) { + IsotopeIndex = i; + + break; + } + } + + // Get A and B + A = SpontaneousWattConstants[IsotopeIndex][0]; + WattConstants_->B = SpontaneousWattConstants[IsotopeIndex][1]; + } + else if (WattConstants_->Cause == G4FFGEnumerations::NEUTRON_INDUCED) { + // Determine if the isotope requested exists in the lookup tables + for (G4int i = 0; NeutronInducedWattIsotopesIndex[i] != -1; i++) { + if (NeutronInducedWattIsotopesIndex[i] == WattConstants_->Product) { + IsotopeIndex = i; + break; + } + } + + // Determine the Watt fission spectrum constants based on the energy of + // the incident neutron + if (WattConstants_->Energy == G4FFGDefaultValues::ThermalNeutronEnergy) { + A = NeutronInducedWattConstants[IsotopeIndex][0][0]; + WattConstants_->B = NeutronInducedWattConstants[IsotopeIndex][0][1]; + } + else if (WattConstants_->Energy > 14.0 * CLHEP::MeV) { + G4Exception("G4FPYSamplingOps::G4SampleWatt()", + "Incident neutron energy above 14 MeV requested.", JustWarning, + "Using Watt fission constants for 14 Mev."); + + A = NeutronInducedWattConstants[IsotopeIndex][2][0]; + WattConstants_->B = NeutronInducedWattConstants[IsotopeIndex][2][1]; + } + else { + G4int EnergyIndex = 0; + G4double EnergyDifference = 0; + G4double RangeDifference, ConstantDifference; + + for (G4int i = 1; IncidentEnergyBins[i] != -1; i++) { + if (WattConstants_->Energy <= IncidentEnergyBins[i]) { + EnergyIndex = i; + EnergyDifference = IncidentEnergyBins[EnergyIndex] - WattConstants_->Energy; + if (EnergyDifference != 0) { + std::ostringstream Temp; + Temp << "Incident neutron energy of "; + Temp << WattConstants_->Energy << " MeV is not "; + Temp << "explicitly listed in the data tables"; + // G4Exception("G4FPYSamplingOps::G4SampleWatt()", + // Temp.str().c_str(), + // JustWarning, + // "Using linear interpolation."); + } + break; } - G4Exception("G4FPYSamplingOps::G4SampleWatt()", - Temp, - RunMustBeAborted, - "Fission events will not be sampled in this run."); + } + + RangeDifference = IncidentEnergyBins[EnergyIndex] - IncidentEnergyBins[EnergyIndex - 1]; + + // Interpolate the value for 'a' + ConstantDifference = NeutronInducedWattConstants[IsotopeIndex][EnergyIndex][0] + - NeutronInducedWattConstants[IsotopeIndex][EnergyIndex - 1][0]; + A = (EnergyDifference / RangeDifference) * ConstantDifference + + NeutronInducedWattConstants[IsotopeIndex][EnergyIndex - 1][0]; + + // Interpolate the value for 'b' + ConstantDifference = NeutronInducedWattConstants[IsotopeIndex][EnergyIndex][1] + - NeutronInducedWattConstants[IsotopeIndex][EnergyIndex - 1][1]; + WattConstants_->B = (EnergyDifference / RangeDifference) * ConstantDifference + + NeutronInducedWattConstants[IsotopeIndex][EnergyIndex - 1][1]; } + } + else { + // Produce an error since an unsupported fission type was requested and + // abort the current run + G4String Temp = "Watt fission spectra data not available for "; + if (WattConstants_->Cause == G4FFGEnumerations::PROTON_INDUCED) { + Temp += "proton induced fission."; + } + else if (WattConstants_->Cause == G4FFGEnumerations::GAMMA_INDUCED) { + Temp += "gamma induced fission."; + } + else { + Temp += "!Warning! unknown cause."; + } + G4Exception("G4FPYSamplingOps::G4SampleWatt()", Temp, RunMustBeAborted, + "Fission events will not be sampled in this run."); + } - // Calculate the constants - K = 1 + (WattConstants_->B / (8.0 * A)); - WattConstants_->L = (K + G4Pow::GetInstance()->powA((K * K - 1), 0.5)) / A; - WattConstants_->M = A * WattConstants_->L - 1; + // Calculate the constants + K = 1 + (WattConstants_->B / (8.0 * A)); + WattConstants_->L = (K + G4Pow::GetInstance()->powA((K * K - 1), 0.5)) / A; + WattConstants_->M = A * WattConstants_->L - 1; -G4FFG_SAMPLING_FUNCTIONLEAVE__ + G4FFG_SAMPLING_FUNCTIONLEAVE__ } -G4double G4FPYSamplingOps:: -SampleGaussian( void ) +G4double G4FPYSamplingOps::SampleGaussian() { -G4FFG_SAMPLING_FUNCTIONENTER__ + G4FFG_SAMPLING_FUNCTIONENTER__ - if(NextGaussianIsStoredInMemory_ == TRUE) - { - NextGaussianIsStoredInMemory_ = FALSE; + if (static_cast(NextGaussianIsStoredInMemory_) == TRUE) { + NextGaussianIsStoredInMemory_ = FALSE; -G4FFG_SAMPLING_FUNCTIONLEAVE__ - return GaussianTwo_; - } + G4FFG_SAMPLING_FUNCTIONLEAVE__ + return GaussianTwo_; + } - // Define the variables to be used - G4double Radius; - G4double MappingFactor; + // Define the variables to be used + G4double Radius; + G4double MappingFactor; - // Sample from the unit circle (21.4% rejection probability) - do - { - GaussianOne_ = 2.0 * G4SampleUniform() - 1.0; - GaussianTwo_ = 2.0 * G4SampleUniform() - 1.0; - Radius = GaussianOne_*GaussianOne_ + GaussianTwo_*GaussianTwo_; - } while (Radius > 1.0); // Loop checking, 11.05.2015, T. Koi + // Sample from the unit circle (21.4% rejection probability) + do { + GaussianOne_ = 2.0 * G4SampleUniform() - 1.0; + GaussianTwo_ = 2.0 * G4SampleUniform() - 1.0; + Radius = GaussianOne_ * GaussianOne_ + GaussianTwo_ * GaussianTwo_; + } while (Radius > 1.0); // Loop checking, 11.05.2015, T. Koi - // Translate the values to Gaussian space - MappingFactor = std::sqrt(-2.0*G4Log(Radius)/Radius) * StdDev_; - GaussianOne_ = Mean_ + GaussianOne_*MappingFactor; - GaussianTwo_ = Mean_ + GaussianTwo_*MappingFactor; + // Translate the values to Gaussian space + MappingFactor = std::sqrt(-2.0 * G4Log(Radius) / Radius) * StdDev_; + GaussianOne_ = Mean_ + GaussianOne_ * MappingFactor; + GaussianTwo_ = Mean_ + GaussianTwo_ * MappingFactor; - // Set the flag that a value is now stored in memory - NextGaussianIsStoredInMemory_ = TRUE; + // Set the flag that a value is now stored in memory + NextGaussianIsStoredInMemory_ = TRUE; -G4FFG_SAMPLING_FUNCTIONLEAVE__ - return GaussianOne_; + G4FFG_SAMPLING_FUNCTIONLEAVE__ + return GaussianOne_; } -void G4FPYSamplingOps:: -ShiftParameters( G4FFGEnumerations::GaussianReturnType Type ) +void G4FPYSamplingOps::ShiftParameters(G4FFGEnumerations::GaussianReturnType Type) { -G4FFG_SAMPLING_FUNCTIONENTER__ - - // Set the flag that any second value stored is no longer valid - NextGaussianIsStoredInMemory_ = FALSE; - - // Check if the requested parameters have already been calculated - if(CheckAndSetParameters() == TRUE) - { -G4FFG_SAMPLING_FUNCTIONLEAVE__ - return; + G4FFG_SAMPLING_FUNCTIONENTER__ + + // Set the flag that any second value stored is no longer valid + NextGaussianIsStoredInMemory_ = FALSE; + + // Check if the requested parameters have already been calculated + if (static_cast(CheckAndSetParameters()) == TRUE) { + G4FFG_SAMPLING_FUNCTIONLEAVE__ + return; + } + + // If the requested type is INT, then perform an iterative refinement of the + // mean that is going to be sampled + if (Type == G4FFGEnumerations::INT) { + // Return if the mean is greater than 7 standard deviations away from 0 + // since there is essentially 0 probability that a sampled number will + // be less than 0 + if (Mean_ > 7 * StdDev_) { + G4FFG_SAMPLING_FUNCTIONLEAVE__ + return; } - - // If the requested type is INT, then perform an iterative refinement of the - // mean that is going to be sampled - if(Type == G4FFGEnumerations::INT) - { - // Return if the mean is greater than 7 standard deviations away from 0 - // since there is essentially 0 probability that a sampled number will - // be less than 0 - if(Mean_ > 7 * StdDev_) - { -G4FFG_SAMPLING_FUNCTIONLEAVE__ - return; + // Variables that contain the area and weighted area information for + // calculating the statistical mean of the Gaussian distribution when + // converted to a step function + G4double ErfContainer, AdjustedErfContainer, Container; + + // Variables that store lower and upper bounds information + G4double LowErf, HighErf; + + // Values for determining the convergence of the solution + G4double AdjMean = Mean_; + G4double Delta = 1.0; + G4bool HalfDelta = false; + G4bool ToleranceCheck = false; + + // Normalization constant for use with erf() + const G4double Normalization = StdDev_ * std::sqrt(2.0); + + // Determine the upper limit of the estimates + const auto UpperLimit = (G4int)std::ceil(Mean_ + 9 * StdDev_); + + // Calculate the integral of the Gaussian distribution + + G4int icounter = 0; + G4int icounter_max = 1024; + do { + icounter++; + if (icounter > icounter_max) { + G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " + << __FILE__ << "." << G4endl; + break; + } + // Set the variables + ErfContainer = 0; + AdjustedErfContainer = 0; + + // Calculate the area and weighted area + for (G4int i = 0; i <= UpperLimit; i++) { + // Determine the lower and upper bounds + LowErf = ((AdjMean - i) / Normalization); + HighErf = ((AdjMean - (i + 1.0)) / Normalization); + + // Correct the bounds for how they lie on the x-axis with + // respect to the mean + if (LowErf <= 0) { + LowErf *= -1; + HighErf *= -1; +// Container = (erf(HighErf) - erf(LowErf))/2.0; +#if defined WIN32 - VC + Container = (CLHEP::HepStat::erf(HighErf) - CLHEP::HepStat::erf(LowErf)) / 2.0; +#else + Container = (erf(HighErf) - erf(LowErf)) / 2.0; +#endif } - // Variables that contain the area and weighted area information for - // calculating the statistical mean of the Gaussian distribution when - // converted to a step function - G4double ErfContainer, AdjustedErfContainer, Container; - - // Variables that store lower and upper bounds information - G4double LowErf, HighErf; - - // Values for determining the convergence of the solution - G4double AdjMean = Mean_; - G4double Delta = 1.0; - G4bool HalfDelta = false; - G4bool ToleranceCheck = false; - - - // Normalization constant for use with erf() - const G4double Normalization = StdDev_ * std::sqrt(2.0); - - // Determine the upper limit of the estimates - const G4int UpperLimit = (G4int) std::ceil(Mean_ + 9 * StdDev_); - - // Calculate the integral of the Gaussian distribution - - G4int icounter=0; - G4int icounter_max=1024; - do - { - icounter++; - if ( icounter > icounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; - } - // Set the variables - ErfContainer = 0; - AdjustedErfContainer = 0; - - // Calculate the area and weighted area - for(G4int i = 0; i <= UpperLimit; i++) - { - // Determine the lower and upper bounds - LowErf = ((AdjMean - i) / Normalization); - HighErf = ((AdjMean - (i + 1.0)) / Normalization); - - // Correct the bounds for how they lie on the x-axis with - // respect to the mean - if(LowErf <= 0) - { - LowErf *= -1; - HighErf *= -1; - //Container = (erf(HighErf) - erf(LowErf))/2.0; - #if defined WIN32-VC - Container = (CLHEP::HepStat::erf(HighErf) - CLHEP::HepStat::erf(LowErf))/2.0; - #else - Container = (erf(HighErf) - erf(LowErf))/2.0; - #endif - } else if (HighErf < 0) - { - HighErf *= -1; - - //Container = (erf(HighErf) + erf(LowErf))/2.0; - #if defined WIN32-VC - Container = (CLHEP::HepStat::erf(HighErf) + CLHEP::HepStat::erf(LowErf))/2.0; - #else - Container = (erf(HighErf) + erf(LowErf))/2.0; - #endif - } else - { - //Container = (erf(LowErf) - erf(HighErf))/2.0; - #if defined WIN32-VC - Container = (CLHEP::HepStat::erf(LowErf) - CLHEP::HepStat::erf(HighErf))/2.0; - #else - Container = (erf(LowErf) - erf(HighErf))/2.0; - #endif - } - - #if defined WIN32-VC - //TK modified to avoid problem caused by QNAN - if ( Container != Container) Container = 0; - #endif - - // Add up the weighted area - ErfContainer += Container; - AdjustedErfContainer += Container * i; - } - - // Calculate the statistical mean - Container = AdjustedErfContainer / ErfContainer; - - // Is it close enough to what we want? - ToleranceCheck = (std::fabs(Mean_ - Container) < Tolerance_); - if(ToleranceCheck == TRUE) - { - break; - } - - // Determine the step size - if(HalfDelta == TRUE) - { - Delta /= 2; - } - - // Step in the appropriate direction - if(Container > Mean_) - { - AdjMean -= Delta; - } else - { - HalfDelta = TRUE; - AdjMean += Delta; - } - } while(TRUE); // Loop checking, 11.05.2015, T. Koi - - ShiftedGaussianValues_->G4InsertShiftedMean(AdjMean, Mean_, StdDev_); - Mean_ = AdjMean; - } else if(Mean_ / 7 < StdDev_) - { - // If the requested type is double, then just re-define the standard - // deviation appropriately - chances are approximately 2.56E-12 that - // the value will be negative using this sampling scheme - StdDev_ = Mean_ / 7; - } - -G4FFG_SAMPLING_FUNCTIONLEAVE__ + else if (HighErf < 0) { + HighErf *= -1; + +// Container = (erf(HighErf) + erf(LowErf))/2.0; +#if defined WIN32 - VC + Container = (CLHEP::HepStat::erf(HighErf) + CLHEP::HepStat::erf(LowErf)) / 2.0; +#else + Container = (erf(HighErf) + erf(LowErf)) / 2.0; +#endif + } + else { +// Container = (erf(LowErf) - erf(HighErf))/2.0; +#if defined WIN32 - VC + Container = (CLHEP::HepStat::erf(LowErf) - CLHEP::HepStat::erf(HighErf)) / 2.0; +#else + Container = (erf(LowErf) - erf(HighErf)) / 2.0; +#endif + } + +#if defined WIN32 - VC + // TK modified to avoid problem caused by QNAN + if (Container != Container) Container = 0; +#endif + + // Add up the weighted area + ErfContainer += Container; + AdjustedErfContainer += Container * i; + } + + // Calculate the statistical mean + Container = AdjustedErfContainer / ErfContainer; + + // Is it close enough to what we want? + ToleranceCheck = (std::fabs(Mean_ - Container) < Tolerance_); + if (static_cast(ToleranceCheck) == TRUE) { + break; + } + + // Determine the step size + if (static_cast(HalfDelta) == TRUE) { + Delta /= 2; + } + + // Step in the appropriate direction + if (Container > Mean_) { + AdjMean -= Delta; + } + else { + HalfDelta = TRUE; + AdjMean += Delta; + } + } while (TRUE); // Loop checking, 11.05.2015, T. Koi + + ShiftedGaussianValues_->G4InsertShiftedMean(AdjMean, Mean_, StdDev_); + Mean_ = AdjMean; + } + else if (Mean_ / 7 < StdDev_) { + // If the requested type is double, then just re-define the standard + // deviation appropriately - chances are approximately 2.56E-12 that + // the value will be negative using this sampling scheme + StdDev_ = Mean_ / 7; + } + + G4FFG_SAMPLING_FUNCTIONLEAVE__ } -G4FPYSamplingOps::~G4FPYSamplingOps( void ) +G4FPYSamplingOps::~G4FPYSamplingOps() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ + + delete ShiftedGaussianValues_; + delete WattConstants_; - delete ShiftedGaussianValues_; - delete WattConstants_; - -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } diff --git a/source/processes/hadronic/models/particle_hp/src/G4FissionFragmentGenerator.cc b/source/processes/hadronic/models/particle_hp/src/G4FissionFragmentGenerator.cc index 6530ce665ed..fff996a5728 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4FissionFragmentGenerator.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4FissionFragmentGenerator.cc @@ -29,739 +29,656 @@ * * Created on May 11, 2011, 12:04 PM */ - -#include -#include -#include "G4Ions.hh" -#include "globals.hh" +#include "G4FFGDebuggingMacros.hh" +#include "G4FFGDefaultValues.hh" #include "G4HadFinalState.hh" +#include "G4Ions.hh" #include "G4Neutron.hh" +#include "globals.hh" -#include "G4FFGDebuggingMacros.hh" -#include "G4FFGDefaultValues.hh" -// Use a few select constant of CLHEP namespace +#include +#include +// Use a few select constant of CLHEP namespace using CLHEP::eV; +using CLHEP::GeV; using CLHEP::keV; using CLHEP::MeV; -using CLHEP::GeV; #include "G4FFGEnumerations.hh" -#include "G4FPYNormalFragmentDist.hh" #include "G4FPYBiasedLightFragmentDist.hh" +#include "G4FPYNormalFragmentDist.hh" #include "G4FissionFragmentGenerator.hh" #include "G4TableTemplate.hh" -G4FissionFragmentGenerator:: -G4FissionFragmentGenerator( void ) +G4FissionFragmentGenerator::G4FissionFragmentGenerator() { - // Set the default verbosity - Verbosity_ = G4FFGDefaultValues::Verbosity; - - // Initialize the class - Initialize(); + // Set the default verbosity + Verbosity_ = G4FFGDefaultValues::Verbosity; + + // Initialize the class + Initialize(); } -G4FissionFragmentGenerator:: -G4FissionFragmentGenerator( G4int Verbosity ) +G4FissionFragmentGenerator::G4FissionFragmentGenerator(G4int Verbosity) { - // Set the verbosity - Verbosity_ = Verbosity; - - // Initialize the class - Initialize(); + // Set the verbosity + Verbosity_ = Verbosity; + + // Initialize the class + Initialize(); } -void G4FissionFragmentGenerator:: -Initialize( void ) +void G4FissionFragmentGenerator::Initialize() { -G4FFG_FUNCTIONENTER__ - - // Initialize the class descriptor variables to the default values. These - // will be used unless the user redefines them. - Isotope_ = G4FFGDefaultValues::Isotope; - MetaState_ = G4FFGDefaultValues::MetaState; - Cause_ = G4FFGDefaultValues::FissionCause; - IncidentEnergy_ = G4FFGDefaultValues::ThermalNeutronEnergy; - YieldType_ = G4FFGDefaultValues::YieldType; - TernaryProbability_ = G4FFGDefaultValues::TernaryProbability; - AlphaProduction_ = G4FFGDefaultValues::AlphaProduction; - SamplingScheme_ = G4FFGDefaultValues::SamplingScheme; - - // No data class has been created yet - YieldData_ = NULL; - IsReconstructionNeeded_ = TRUE; - -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONENTER__ + + // Initialize the class descriptor variables to the default values. These + // will be used unless the user redefines them. + Isotope_ = G4FFGDefaultValues::Isotope; + MetaState_ = G4FFGDefaultValues::MetaState; + Cause_ = G4FFGDefaultValues::FissionCause; + IncidentEnergy_ = G4FFGDefaultValues::ThermalNeutronEnergy; + YieldType_ = G4FFGDefaultValues::YieldType; + TernaryProbability_ = G4FFGDefaultValues::TernaryProbability; + AlphaProduction_ = G4FFGDefaultValues::AlphaProduction; + SamplingScheme_ = G4FFGDefaultValues::SamplingScheme; + + // No data class has been created yet + YieldData_ = nullptr; + IsReconstructionNeeded_ = TRUE; + + G4FFG_FUNCTIONLEAVE__ } -G4DynamicParticleVector* G4FissionFragmentGenerator:: -G4GenerateFission( void ) +G4DynamicParticleVector* G4FissionFragmentGenerator::G4GenerateFission() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - const G4HadProjectile Projectile(G4DynamicParticle(G4Neutron::Neutron(), - G4ThreeVector(0, 0, 0), - G4FFGDefaultValues::ThermalNeutronEnergy)); + const G4HadProjectile Projectile(G4DynamicParticle(G4Neutron::Neutron(), G4ThreeVector(0, 0, 0), + G4FFGDefaultValues::ThermalNeutronEnergy)); - // Call the overloaded function and generate 1 fission - std::vector< G4DynamicParticleVector* > FissionEvent = G4GenerateFission(1, Projectile); - G4DynamicParticleVector* Container = FissionEvent[0]; + // Call the overloaded function and generate 1 fission + std::vector FissionEvent = G4GenerateFission(1, Projectile); + G4DynamicParticleVector* Container = FissionEvent[0]; -G4FFG_FUNCTIONLEAVE__ - return Container; + G4FFG_FUNCTIONLEAVE__ + return Container; } -G4DynamicParticleVector* G4FissionFragmentGenerator:: -G4GenerateFission( const G4HadProjectile& Projectile ) +G4DynamicParticleVector* +G4FissionFragmentGenerator::G4GenerateFission(const G4HadProjectile& Projectile) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - // Call the overloaded function and generate 1 fission - std::vector< G4DynamicParticleVector* > FissionEvent = G4GenerateFission(1, Projectile); - G4DynamicParticleVector* const Container = FissionEvent[0]; + // Call the overloaded function and generate 1 fission + std::vector FissionEvent = G4GenerateFission(1, Projectile); + G4DynamicParticleVector* const Container = FissionEvent[0]; -G4FFG_FUNCTIONLEAVE__ - return Container; + G4FFG_FUNCTIONLEAVE__ + return Container; } -const std::vector< G4DynamicParticleVector* > G4FissionFragmentGenerator:: -G4GenerateFission( G4long NumberOfFissions, - const G4HadProjectile& Projectile ) +const std::vector +G4FissionFragmentGenerator::G4GenerateFission(G4long NumberOfFissions, + const G4HadProjectile& Projectile) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ + // TK Modified 131107 + // std::vector< G4DynamicParticleVector* > FissionEvents(NumberOfFissions); + std::vector FissionEvents(0); - //TK Modified 131107 - //std::vector< G4DynamicParticleVector* > FissionEvents(NumberOfFissions); - std::vector< G4DynamicParticleVector* > FissionEvents(0); - - if(Projectile.GetDefinition() == G4Neutron::Neutron()) - { - if(IsReconstructionNeeded_ == TRUE) - { - // TODO Eliminate potential need for restructuring during run phase - //InitializeFissionProductYieldClass(); - } + if (Projectile.GetDefinition() == G4Neutron::Neutron()) { + if (static_cast(IsReconstructionNeeded_) == TRUE) { + // TODO Eliminate potential need for restructuring during run phase + // InitializeFissionProductYieldClass(); + } - for(G4long i = 0; i < NumberOfFissions; i++) - { - FissionEvents.push_back(YieldData_->G4GetFission()); - // FIXME Use particle momentum in balance equation - // FissionEvents.push_back(YieldData_->G4GetFission(Projectile.Get4Momentum())); - } - } else - { - FissionEvents.push_back(NULL); + for (G4long i = 0; i < NumberOfFissions; i++) { + FissionEvents.push_back(YieldData_->G4GetFission()); + // FIXME Use particle momentum in balance equation + // FissionEvents.push_back(YieldData_->G4GetFission(Projectile.Get4Momentum())); } + } + else { + FissionEvents.push_back(nullptr); + } -G4FFG_FUNCTIONLEAVE__ - return FissionEvents; + G4FFG_FUNCTIONLEAVE__ + return FissionEvents; } -G4Ions* G4FissionFragmentGenerator:: -G4GenerateFissionProduct( void ) +G4Ions* G4FissionFragmentGenerator::G4GenerateFissionProduct() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - if(IsReconstructionNeeded_ == TRUE) - { - // TODO Eliminate potential need for restructuring during run phase - //InitializeFissionProductYieldClass(); - } - - G4Ions* Product = YieldData_->G4GetFissionProduct(); + if (static_cast(IsReconstructionNeeded_) == TRUE) { + // TODO Eliminate potential need for restructuring during run phase + // InitializeFissionProductYieldClass(); + } -G4FFG_FUNCTIONLEAVE__ - return Product; + G4Ions* Product = YieldData_->G4GetFissionProduct(); + + G4FFG_FUNCTIONLEAVE__ + return Product; } -G4double G4FissionFragmentGenerator:: -G4GetAlphaProduction( void ) +G4double G4FissionFragmentGenerator::G4GetAlphaProduction() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ -G4FFG_FUNCTIONLEAVE__ - return AlphaProduction_; + G4FFG_FUNCTIONLEAVE__ + return AlphaProduction_; } -G4double G4FissionFragmentGenerator:: -G4GetTernaryProbability( void ) +G4double G4FissionFragmentGenerator::G4GetTernaryProbability() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ -G4FFG_FUNCTIONLEAVE__ - return TernaryProbability_; + G4FFG_FUNCTIONLEAVE__ + return TernaryProbability_; } -G4FFGEnumerations::FissionCause G4FissionFragmentGenerator:: -G4GetCause( void ) +G4FFGEnumerations::FissionCause G4FissionFragmentGenerator::G4GetCause() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ -G4FFG_FUNCTIONLEAVE__ - return Cause_; + G4FFG_FUNCTIONLEAVE__ + return Cause_; } -G4double G4FissionFragmentGenerator:: -G4GetIncidentEnergy( void ) +G4double G4FissionFragmentGenerator::G4GetIncidentEnergy() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ -G4FFG_FUNCTIONLEAVE__ - return IncidentEnergy_; + G4FFG_FUNCTIONLEAVE__ + return IncidentEnergy_; } -G4int G4FissionFragmentGenerator:: -G4GetIsotope( void ) +G4int G4FissionFragmentGenerator::G4GetIsotope() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ -G4FFG_FUNCTIONLEAVE__ - return Isotope_; + G4FFG_FUNCTIONLEAVE__ + return Isotope_; } -G4FFGEnumerations::MetaState G4FissionFragmentGenerator:: -G4GetMetaState( void ) +G4FFGEnumerations::MetaState G4FissionFragmentGenerator::G4GetMetaState() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ -G4FFG_FUNCTIONLEAVE__ - return MetaState_; + G4FFG_FUNCTIONLEAVE__ + return MetaState_; } -G4FFGEnumerations::FissionSamplingScheme G4FissionFragmentGenerator:: -G4GetSamplingScheme( void ) +G4FFGEnumerations::FissionSamplingScheme G4FissionFragmentGenerator::G4GetSamplingScheme() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ -G4FFG_FUNCTIONLEAVE__ - return SamplingScheme_; + G4FFG_FUNCTIONLEAVE__ + return SamplingScheme_; } -G4FFGEnumerations::YieldType G4FissionFragmentGenerator:: -G4GetYieldType() +G4FFGEnumerations::YieldType G4FissionFragmentGenerator::G4GetYieldType() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ -G4FFG_FUNCTIONLEAVE__ - return YieldType_; + G4FFG_FUNCTIONLEAVE__ + return YieldType_; } -G4int G4FissionFragmentGenerator:: -G4MakeIsotopeCode(G4int Z, G4int A, G4int M) +G4int G4FissionFragmentGenerator::G4MakeIsotopeCode(G4int Z, G4int A, G4int M) { - // Sanity check; - A %= 1000; - Z %= 1000; - M %= 10; + // Sanity check; + A %= 1000; + Z %= 1000; + M %= 10; - return (A + Z * 1000) * 10 + M; + return (A + Z * 1000) * 10 + M; } -void G4FissionFragmentGenerator:: -G4SetAlphaProduction( G4double WhatAlphaProduction ) +void G4FissionFragmentGenerator::G4SetAlphaProduction(G4double WhatAlphaProduction) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - AlphaProduction_ = WhatAlphaProduction; - if(YieldData_ != NULL) - { - YieldData_->G4SetAlphaProduction(AlphaProduction_); - } + AlphaProduction_ = WhatAlphaProduction; + if (YieldData_ != nullptr) { + YieldData_->G4SetAlphaProduction(AlphaProduction_); + } - if(Verbosity_ & G4FFGEnumerations::UPDATES) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ - - G4cout << " -- Alpha production set to " << AlphaProduction_ << G4endl; - } + if ((Verbosity_ & G4FFGEnumerations::UPDATES) != 0) { + G4FFG_SPACING__ + G4FFG_LOCATION__ + + G4cout << " -- Alpha production set to " << AlphaProduction_ << G4endl; + } -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -void G4FissionFragmentGenerator:: -G4SetTernaryProbability( G4double WhatTernaryProbability ) +void G4FissionFragmentGenerator::G4SetTernaryProbability(G4double WhatTernaryProbability) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - TernaryProbability_ = WhatTernaryProbability; - if(YieldData_ != NULL) - { - YieldData_->G4SetTernaryProbability(TernaryProbability_); - } + TernaryProbability_ = WhatTernaryProbability; + if (YieldData_ != nullptr) { + YieldData_->G4SetTernaryProbability(TernaryProbability_); + } - if(Verbosity_ & G4FFGEnumerations::UPDATES) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ - - G4cout << " -- Ternary fission probability set to " << TernaryProbability_ << G4endl; - } + if ((Verbosity_ & G4FFGEnumerations::UPDATES) != 0) { + G4FFG_SPACING__ + G4FFG_LOCATION__ + + G4cout << " -- Ternary fission probability set to " << TernaryProbability_ << G4endl; + } -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -void G4FissionFragmentGenerator:: -G4SetCause( G4FFGEnumerations::FissionCause WhichCause ) +void G4FissionFragmentGenerator::G4SetCause(G4FFGEnumerations::FissionCause WhichCause) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - G4bool IsValidCause = (WhichCause == G4FFGEnumerations::SPONTANEOUS - || WhichCause == G4FFGEnumerations::NEUTRON_INDUCED ); - G4bool IsSameCause = (Cause_ == WhichCause); - - if(!IsSameCause && IsValidCause) - { - Cause_ = WhichCause; - if(Cause_ == G4FFGEnumerations::SPONTANEOUS) - { - IncidentEnergy_ = 0; - } - IsReconstructionNeeded_ = TRUE; + G4bool IsValidCause = (WhichCause == G4FFGEnumerations::SPONTANEOUS + || WhichCause == G4FFGEnumerations::NEUTRON_INDUCED); + G4bool IsSameCause = (Cause_ == WhichCause); + + if (!IsSameCause && IsValidCause) { + Cause_ = WhichCause; + if (Cause_ == G4FFGEnumerations::SPONTANEOUS) { + IncidentEnergy_ = 0; } - - if(Verbosity_ != G4FFGEnumerations::SILENT) - { - G4String CauseString; - switch(WhichCause) - { - case G4FFGEnumerations::SPONTANEOUS: - CauseString = "SPONTANEOUS"; - break; - case G4FFGEnumerations::NEUTRON_INDUCED: - CauseString = "NEUTRON_INDUCED"; - break; - case G4FFGEnumerations::PROTON_INDUCED: - CauseString = "PROTON_INDUCED"; - break; - case G4FFGEnumerations::GAMMA_INDUCED: - CauseString = "GAMMA_INDUCED"; - break; - } - - if(Verbosity_ & G4FFGEnumerations::WARNING) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ - - if(IsValidCause) - { - if(IsSameCause && YieldData_ != NULL) - { - G4cout << " -- Already set to use " << CauseString << " as the fission cause. Yield data class will not be reconstructed." << G4endl; - } else if(YieldData_ == NULL) - { - G4cout << " -- Yield data class not yet constructed. " << CauseString << " will be applied when it is constructed." << G4endl; - } - } else - { - G4cout << " -- Invalid cause of fission" << G4endl; - } + IsReconstructionNeeded_ = TRUE; + } + + if (Verbosity_ != G4FFGEnumerations::SILENT) { + G4String CauseString; + switch (WhichCause) { + case G4FFGEnumerations::SPONTANEOUS: + CauseString = "SPONTANEOUS"; + break; + case G4FFGEnumerations::NEUTRON_INDUCED: + CauseString = "NEUTRON_INDUCED"; + break; + case G4FFGEnumerations::PROTON_INDUCED: + CauseString = "PROTON_INDUCED"; + break; + case G4FFGEnumerations::GAMMA_INDUCED: + CauseString = "GAMMA_INDUCED"; + break; + } + + if ((Verbosity_ & G4FFGEnumerations::WARNING) != 0) { + G4FFG_SPACING__ + G4FFG_LOCATION__ + + if (IsValidCause) { + if (IsSameCause && YieldData_ != nullptr) { + G4cout << " -- Already set to use " << CauseString + << " as the fission cause. Yield data class will not be reconstructed." << G4endl; } - - if((Verbosity_ & G4FFGEnumerations::UPDATES) - && IsValidCause) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ - - G4cout << " -- Fission cause set to " << CauseString << "." << G4endl; + else if (YieldData_ == nullptr) { + G4cout << " -- Yield data class not yet constructed. " << CauseString + << " will be applied when it is constructed." << G4endl; } + } + else { + G4cout << " -- Invalid cause of fission" << G4endl; + } + } + + if (((Verbosity_ & G4FFGEnumerations::UPDATES) != 0) && IsValidCause) { + G4FFG_SPACING__ + G4FFG_LOCATION__ + + G4cout << " -- Fission cause set to " << CauseString << "." << G4endl; } + } -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -void G4FissionFragmentGenerator:: -G4SetIncidentEnergy( G4double WhatIncidentEnergy ) +void G4FissionFragmentGenerator::G4SetIncidentEnergy(G4double WhatIncidentEnergy) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ + + if (Cause_ != G4FFGEnumerations::SPONTANEOUS) { + IncidentEnergy_ = WhatIncidentEnergy; + if (YieldData_ != nullptr) { + YieldData_->G4SetEnergy(IncidentEnergy_); + } + } + + if (Verbosity_ != G4FFGEnumerations::SILENT) { + std::ostringstream EnergyString; + if (IncidentEnergy_ / GeV > 1) { + EnergyString << IncidentEnergy_ / GeV << " GeV"; + } + else if (IncidentEnergy_ / MeV > 1) { + EnergyString << IncidentEnergy_ / MeV << " MeV"; + } + else if (IncidentEnergy_ / keV > 1) { + EnergyString << IncidentEnergy_ / keV << " keV"; + } + else { + EnergyString << IncidentEnergy_ / eV << " eV"; + } - if(Cause_ != G4FFGEnumerations::SPONTANEOUS) + if (((Verbosity_ & G4FFGEnumerations::ENERGY_INFO) != 0) + || ((Verbosity_ & G4FFGEnumerations::WARNING) != 0)) { - IncidentEnergy_ = WhatIncidentEnergy; - if(YieldData_ != NULL) - { - YieldData_->G4SetEnergy(IncidentEnergy_); - } + if (Cause_ == G4FFGEnumerations::SPONTANEOUS && IncidentEnergy_ != 0) { + G4FFG_SPACING__ + G4FFG_LOCATION__ + + G4cout << " -- Cannot set a non-zero energy for spontaneous fission" << G4endl; + } + else if (YieldData_ == nullptr) { + G4FFG_SPACING__ + G4FFG_LOCATION__ + + G4cout << " -- Yield data class not yet constructed. " << EnergyString.str() + << " will be applied when it is constructed." << G4endl; + } } - - if(Verbosity_ != G4FFGEnumerations::SILENT) + + if (((Verbosity_ & G4FFGEnumerations::ENERGY_INFO) != 0) + || ((Verbosity_ & G4FFGEnumerations::UPDATES) != 0)) { - std::ostringstream EnergyString; - if(IncidentEnergy_ / GeV > 1) - { - EnergyString << IncidentEnergy_ / GeV << " GeV"; - } else if(IncidentEnergy_ / MeV > 1) - { - EnergyString << IncidentEnergy_ / MeV << " MeV"; - } else if(IncidentEnergy_ / keV > 1) - { - EnergyString << IncidentEnergy_ / keV << " keV"; - } else - { - EnergyString << IncidentEnergy_ / eV << " eV"; - } - - if(Verbosity_ & G4FFGEnumerations::ENERGY_INFO - || Verbosity_ & G4FFGEnumerations::WARNING) - { - if(Cause_ == G4FFGEnumerations::SPONTANEOUS && IncidentEnergy_ != 0) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ - - G4cout << " -- Cannot set a non-zero energy for spontaneous fission" << G4endl; - } else if(YieldData_ == NULL) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ - - G4cout << " -- Yield data class not yet constructed. " << EnergyString.str() << " will be applied when it is constructed." << G4endl; - - } - } - - if(Verbosity_ & G4FFGEnumerations::ENERGY_INFO - || Verbosity_ & G4FFGEnumerations::UPDATES) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ - - G4cout << " -- Incident neutron energy set to " << EnergyString.str() << "." << G4endl; - } + G4FFG_SPACING__ + G4FFG_LOCATION__ + + G4cout << " -- Incident neutron energy set to " << EnergyString.str() << "." << G4endl; } + } -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -void G4FissionFragmentGenerator:: -G4SetIsotope( G4int WhichIsotope ) +void G4FissionFragmentGenerator::G4SetIsotope(G4int WhichIsotope) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - G4bool IsSameIsotope = (Isotope_ == WhichIsotope); + G4bool IsSameIsotope = (Isotope_ == WhichIsotope); - if(!IsSameIsotope) - { - Isotope_ = WhichIsotope; - IsReconstructionNeeded_ = TRUE; + if (!IsSameIsotope) { + Isotope_ = WhichIsotope; + IsReconstructionNeeded_ = TRUE; + } + + if (Verbosity_ != G4FFGEnumerations::SILENT) { + if ((Verbosity_ & G4FFGEnumerations::WARNING) != 0) { + if (IsSameIsotope && YieldData_ != nullptr) { + G4FFG_SPACING__ + G4FFG_LOCATION__ + + G4cout << " -- Isotope " << Isotope_ + << " already in use. Yield data class will not be reconstructed." << G4endl; + } + else if (YieldData_ == nullptr) { + G4FFG_SPACING__ + G4FFG_LOCATION__ + + G4cout << " -- Yield data class not yet constructed. The isotope will be set to " + << Isotope_ << " when it is constructed." << G4endl; + } } - - if(Verbosity_ != G4FFGEnumerations::SILENT) - { - if(Verbosity_ & G4FFGEnumerations::WARNING) - { - if(IsSameIsotope && YieldData_ != NULL) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ - - G4cout << " -- Isotope " << Isotope_ << " already in use. Yield data class will not be reconstructed." << G4endl; - } else if(YieldData_ == NULL) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ - - G4cout << " -- Yield data class not yet constructed. The isotope will be set to " << Isotope_ << " when it is constructed." << G4endl; - } - } - - if(Verbosity_ & G4FFGEnumerations::UPDATES) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ - - G4cout << " -- Isotope set to " << Isotope_ << "." << G4endl; - } + + if ((Verbosity_ & G4FFGEnumerations::UPDATES) != 0) { + G4FFG_SPACING__ + G4FFG_LOCATION__ + + G4cout << " -- Isotope set to " << Isotope_ << "." << G4endl; } + } -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -void G4FissionFragmentGenerator:: -G4SetMetaState( G4FFGEnumerations::MetaState WhichMetaState ) +void G4FissionFragmentGenerator::G4SetMetaState(G4FFGEnumerations::MetaState WhichMetaState) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - G4bool IsValidMetaState = (WhichMetaState >= G4FFGEnumerations::MetaStateFirst - && WhichMetaState <= G4FFGEnumerations::MetaStateLast); - G4bool IsSameMetaState = (MetaState_ == WhichMetaState); - - if(!IsSameMetaState && IsValidMetaState) - { - MetaState_ = WhichMetaState; - IsReconstructionNeeded_ = TRUE; + G4bool IsValidMetaState = (WhichMetaState >= G4FFGEnumerations::MetaStateFirst + && WhichMetaState <= G4FFGEnumerations::MetaStateLast); + G4bool IsSameMetaState = (MetaState_ == WhichMetaState); + + if (!IsSameMetaState && IsValidMetaState) { + MetaState_ = WhichMetaState; + IsReconstructionNeeded_ = TRUE; + } + + if (Verbosity_ != G4FFGEnumerations::SILENT) { + G4String MetaName; + switch (MetaState_) { + case G4FFGEnumerations::GROUND_STATE: + MetaName = "GROUND_STATE"; + break; + + case G4FFGEnumerations::META_1: + MetaName = "META_1"; + break; + + case G4FFGEnumerations::META_2: + MetaName = "META_2"; + break; } - - if(Verbosity_ != G4FFGEnumerations::SILENT) - { - G4String MetaName; - switch(MetaState_) - { - case G4FFGEnumerations::GROUND_STATE: - MetaName = "GROUND_STATE"; - break; - - case G4FFGEnumerations::META_1: - MetaName = "META_1"; - break; - - case G4FFGEnumerations::META_2: - MetaName = "META_2"; - break; - } - - if(Verbosity_ & G4FFGEnumerations::WARNING) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ - - std::ostringstream Temp; - if(IsValidMetaState) - { - if(IsSameMetaState && YieldData_ != NULL) - { - G4cout << " -- Already set to use " << MetaName << " as the metastable state. Yield data class will not be reconstructed" << G4endl; - } else if(YieldData_ == NULL) - { - G4cout << " -- Yield data class not yet constructed. " << MetaName << " will be applied when it is constructed." << G4endl; - } - } else - { - G4cout << " -- Invalid metastable state." << G4endl; - } + + if ((Verbosity_ & G4FFGEnumerations::WARNING) != 0) { + G4FFG_SPACING__ + G4FFG_LOCATION__ + + std::ostringstream Temp; + if (IsValidMetaState) { + if (IsSameMetaState && YieldData_ != nullptr) { + G4cout << " -- Already set to use " << MetaName + << " as the metastable state. Yield data class will not be reconstructed" + << G4endl; } - - if(Verbosity_ & G4FFGEnumerations::UPDATES - && IsValidMetaState) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ - - G4cout << " -- Metastable state set to " << MetaName << "." << G4endl; + else if (YieldData_ == nullptr) { + G4cout << " -- Yield data class not yet constructed. " << MetaName + << " will be applied when it is constructed." << G4endl; } + } + else { + G4cout << " -- Invalid metastable state." << G4endl; + } + } + + if (((Verbosity_ & G4FFGEnumerations::UPDATES) != 0) && IsValidMetaState) { + G4FFG_SPACING__ + G4FFG_LOCATION__ + + G4cout << " -- Metastable state set to " << MetaName << "." << G4endl; } + } -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -void G4FissionFragmentGenerator -::G4SetSamplingScheme(G4FFGEnumerations::FissionSamplingScheme NewScheme) +void G4FissionFragmentGenerator ::G4SetSamplingScheme( + G4FFGEnumerations::FissionSamplingScheme NewScheme) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - G4bool IsValidScheme = (NewScheme >= G4FFGEnumerations::FissionSamplingSchemeFirst - && NewScheme <= G4FFGEnumerations::FissionSamplingSchemeLast); - G4bool IsSameScheme = (NewScheme == SamplingScheme_); + G4bool IsValidScheme = (NewScheme >= G4FFGEnumerations::FissionSamplingSchemeFirst + && NewScheme <= G4FFGEnumerations::FissionSamplingSchemeLast); + G4bool IsSameScheme = (NewScheme == SamplingScheme_); - if(!IsSameScheme && IsValidScheme) - { - SamplingScheme_ = NewScheme; - IsReconstructionNeeded_ = TRUE; + if (!IsSameScheme && IsValidScheme) { + SamplingScheme_ = NewScheme; + IsReconstructionNeeded_ = TRUE; + } + + if (Verbosity_ != G4FFGEnumerations::SILENT) { + G4String SchemeString; + switch (SamplingScheme_) { + case G4FFGEnumerations::NORMAL: + SchemeString = "NORMAL"; + break; + + case G4FFGEnumerations::LIGHT_FRAGMENT: + SchemeString = "LIGHT_FRAGMENT"; + break; + + default: + SchemeString = "UNSUPPORTED"; + break; } - - if(Verbosity_ != G4FFGEnumerations::SILENT) - { - G4String SchemeString; - switch(SamplingScheme_) - { - case G4FFGEnumerations::NORMAL: - SchemeString = "NORMAL"; - break; - - case G4FFGEnumerations::LIGHT_FRAGMENT: - SchemeString = "LIGHT_FRAGMENT"; - break; - - default: - SchemeString = "UNSUPPORTED"; - break; - } - - if(Verbosity_ & G4FFGEnumerations::WARNING) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ - - if(IsValidScheme) - { - if(IsSameScheme && YieldData_ != NULL) - { - G4cout << " -- Already set to use " << SchemeString << " as the sampling scheme. Yield data class will not be reconstructed." << G4endl; - } else if(YieldData_ == NULL) - { - G4cout << " -- Yield data class not yet constructed. " << SchemeString << " will be applied when it is constructed." << G4endl; - } - } else - { - G4cout << " -- Invalid sampling scheme." << G4endl; - } + + if ((Verbosity_ & G4FFGEnumerations::WARNING) != 0) { + G4FFG_SPACING__ + G4FFG_LOCATION__ + + if (IsValidScheme) { + if (IsSameScheme && YieldData_ != nullptr) { + G4cout << " -- Already set to use " << SchemeString + << " as the sampling scheme. Yield data class will not be reconstructed." + << G4endl; } - - if((Verbosity_ & G4FFGEnumerations::UPDATES) - && IsValidScheme) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ - - G4cout << " -- Sampling scheme set to " << SchemeString << "." << G4endl; + else if (YieldData_ == nullptr) { + G4cout << " -- Yield data class not yet constructed. " << SchemeString + << " will be applied when it is constructed." << G4endl; } + } + else { + G4cout << " -- Invalid sampling scheme." << G4endl; + } } -G4FFG_FUNCTIONLEAVE__ + if (((Verbosity_ & G4FFGEnumerations::UPDATES) != 0) && IsValidScheme) { + G4FFG_SPACING__ + G4FFG_LOCATION__ + + G4cout << " -- Sampling scheme set to " << SchemeString << "." << G4endl; + } + } + + G4FFG_FUNCTIONLEAVE__ } -void G4FissionFragmentGenerator:: -G4SetYieldType(G4FFGEnumerations::YieldType WhichYieldType) +void G4FissionFragmentGenerator::G4SetYieldType(G4FFGEnumerations::YieldType WhichYieldType) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - G4bool IsValidYieldType = (WhichYieldType == G4FFGEnumerations::INDEPENDENT - ||WhichYieldType == G4FFGEnumerations::CUMULATIVE); - G4bool IsSameYieldType = (YieldType_ == WhichYieldType); + G4bool IsValidYieldType = (WhichYieldType == G4FFGEnumerations::INDEPENDENT + || WhichYieldType == G4FFGEnumerations::CUMULATIVE); + G4bool IsSameYieldType = (YieldType_ == WhichYieldType); - if(!IsSameYieldType && IsValidYieldType) - { - YieldType_ = WhichYieldType; - IsReconstructionNeeded_ = TRUE; + if (!IsSameYieldType && IsValidYieldType) { + YieldType_ = WhichYieldType; + IsReconstructionNeeded_ = TRUE; + } + + if (Verbosity_ != G4FFGEnumerations::SILENT) { + G4String YieldString; + switch ((int)YieldType_) { + case G4FFGEnumerations::INDEPENDENT: + YieldString = "INDEPENDENT"; + break; + + case G4FFGEnumerations::SPONTANEOUS: + YieldString = "SPONTANEOUS"; + break; + + default: + YieldString = "UNSUPPORTED"; + break; } - - if(Verbosity_ != G4FFGEnumerations::SILENT) - { - G4String YieldString; - switch((int)YieldType_) - { - case G4FFGEnumerations::INDEPENDENT: - YieldString = "INDEPENDENT"; - break; - - case G4FFGEnumerations::SPONTANEOUS: - YieldString = "SPONTANEOUS"; - break; - - default: - YieldString = "UNSUPPORTED"; - break; - } - - if(Verbosity_ & G4FFGEnumerations::WARNING) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ - - if(IsValidYieldType) - { - - if(IsSameYieldType && YieldData_ != NULL) - { - } else if(YieldData_ == NULL) - { - G4cout << " -- Yield data class not yet constructed. Yield type " << YieldString << " will be applied when it is constructed." << G4endl; - } - } else - { - G4cout << " -- Invalid yield type." << G4endl; - } + + if ((Verbosity_ & G4FFGEnumerations::WARNING) != 0) { + G4FFG_SPACING__ + G4FFG_LOCATION__ + + if (IsValidYieldType) { + if (IsSameYieldType && YieldData_ != nullptr) { } - - if((Verbosity_ & G4FFGEnumerations::UPDATES) - && IsValidYieldType) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ - - G4cout << " -- Yield type set to " << YieldString << G4endl; + else if (YieldData_ == nullptr) { + G4cout << " -- Yield data class not yet constructed. Yield type " << YieldString + << " will be applied when it is constructed." << G4endl; } + } + else { + G4cout << " -- Invalid yield type." << G4endl; + } } -G4FFG_FUNCTIONLEAVE__ + if (((Verbosity_ & G4FFGEnumerations::UPDATES) != 0) && IsValidYieldType) { + G4FFG_SPACING__ + G4FFG_LOCATION__ + + G4cout << " -- Yield type set to " << YieldString << G4endl; + } + } + + G4FFG_FUNCTIONLEAVE__ } -void G4FissionFragmentGenerator:: -G4SetVerbosity(G4int Verbosity) +void G4FissionFragmentGenerator::G4SetVerbosity(G4int Verbosity) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - Verbosity_ = Verbosity; - - if(YieldData_ != NULL) - { - YieldData_->G4SetVerbosity(Verbosity_); - } + Verbosity_ = Verbosity; + + if (YieldData_ != nullptr) { + YieldData_->G4SetVerbosity(Verbosity_); + } -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -bool G4FissionFragmentGenerator:: -InitializeFissionProductYieldClass( std::istringstream& dataStream ) +bool G4FissionFragmentGenerator::InitializeFissionProductYieldClass(std::istringstream& dataStream) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - if(YieldData_ != NULL) - { - delete YieldData_; - - if(Verbosity_ & G4FFGEnumerations::UPDATES) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ - - G4cout << " -- Old yield data class deleted." << G4endl; - } + if (YieldData_ != nullptr) { + delete YieldData_; + + if ((Verbosity_ & G4FFGEnumerations::UPDATES) != 0) { + G4FFG_SPACING__ + G4FFG_LOCATION__ + + G4cout << " -- Old yield data class deleted." << G4endl; } + } - try - { - if(SamplingScheme_ == G4FFGEnumerations::NORMAL) - { - YieldData_ = new G4FPYNormalFragmentDist(Isotope_, - MetaState_, - Cause_, - YieldType_, - Verbosity_, - dataStream); - } else - { - YieldData_ = new G4FPYBiasedLightFragmentDist(Isotope_, - MetaState_, - Cause_, - YieldType_, - Verbosity_, - dataStream); - } + try { + if (SamplingScheme_ == G4FFGEnumerations::NORMAL) { + YieldData_ = new G4FPYNormalFragmentDist(Isotope_, MetaState_, Cause_, YieldType_, Verbosity_, + dataStream); + } + else { + YieldData_ = new G4FPYBiasedLightFragmentDist(Isotope_, MetaState_, Cause_, YieldType_, + Verbosity_, dataStream); + } - if(AlphaProduction_ != 0 && TernaryProbability_ != 0) - { - YieldData_->G4SetTernaryProbability(TernaryProbability_); - YieldData_->G4SetAlphaProduction(AlphaProduction_); - } + if (AlphaProduction_ != 0 && TernaryProbability_ != 0) { + YieldData_->G4SetTernaryProbability(TernaryProbability_); + YieldData_->G4SetAlphaProduction(AlphaProduction_); + } - if(Verbosity_ & G4FFGEnumerations::UPDATES) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ + if ((Verbosity_ & G4FFGEnumerations::UPDATES) != 0) { + G4FFG_SPACING__ + G4FFG_LOCATION__ - G4cout << " -- Yield data class constructed with defined values." << G4endl; - } - } catch (std::exception& e) - { - YieldData_ = NULL; + G4cout << " -- Yield data class constructed with defined values." << G4endl; } + } + catch (std::exception& e) { + YieldData_ = nullptr; + } - IsReconstructionNeeded_ = FALSE; + IsReconstructionNeeded_ = FALSE; -G4FFG_FUNCTIONLEAVE__ - return YieldData_; + G4FFG_FUNCTIONLEAVE__ + return YieldData_ != nullptr; } -G4FissionFragmentGenerator:: -~G4FissionFragmentGenerator() +G4FissionFragmentGenerator::~G4FissionFragmentGenerator() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - delete YieldData_; + delete YieldData_; -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } diff --git a/source/processes/hadronic/models/particle_hp/src/G4FissionProductYieldDist.cc b/source/processes/hadronic/models/particle_hp/src/G4FissionProductYieldDist.cc index 9acb22c7530..24adbe2b2e9 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4FissionProductYieldDist.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4FissionProductYieldDist.cc @@ -43,31 +43,20 @@ * * * * * * * * * * * * * * * * * * References * * * * * * * * * * * * * * * */ - -//#include -//#include +// #include +// #include #include "G4Alpha.hh" #include "G4Gamma.hh" #include "G4Ions.hh" #include "G4Neutron.hh" -//#include "G4NeutronHPNames.hh" -#include "G4NucleiProperties.hh" -#include "G4ParticleTable.hh" -#include "G4ThreeVector.hh" -#include "Randomize.hh" -#include "G4UImanager.hh" -#include "globals.hh" -#include "G4Exp.hh" -#include "G4SystemOfUnits.hh" -#include "G4HadFinalState.hh" +// #include "G4NeutronHPNames.hh" +#include "G4ArrayOps.hh" #include "G4DynamicParticle.hh" #include "G4DynamicParticleVector.hh" -#include "G4ReactionProduct.hh" - -#include "G4ArrayOps.hh" #include "G4ENDFTapeRead.hh" #include "G4ENDFYieldDataContainer.hh" +#include "G4Exp.hh" #include "G4FFGDebuggingMacros.hh" #include "G4FFGDefaultValues.hh" #include "G4FFGEnumerations.hh" @@ -75,60 +64,68 @@ #include "G4FPYSamplingOps.hh" #include "G4FPYTreeStructures.hh" #include "G4FissionProductYieldDist.hh" +#include "G4HadFinalState.hh" +#include "G4NucleiProperties.hh" +#include "G4ParticleTable.hh" #include "G4Pow.hh" +#include "G4ReactionProduct.hh" +#include "G4SystemOfUnits.hh" +#include "G4ThreeVector.hh" +#include "G4UImanager.hh" +#include "Randomize.hh" +#include "globals.hh" using CLHEP::pi; #ifdef G4MULTITHREADED -#include "G4AutoLock.hh" +# include "G4AutoLock.hh" G4Mutex G4FissionProductYieldDist::fissprodMutex = G4MUTEX_INITIALIZER; #endif -G4FissionProductYieldDist:: -G4FissionProductYieldDist( G4int WhichIsotope, - G4FFGEnumerations::MetaState WhichMetaState, - G4FFGEnumerations::FissionCause WhichCause, - G4FFGEnumerations::YieldType WhichYieldType, - std::istringstream& dataStream ) -: Isotope_(WhichIsotope), +G4FissionProductYieldDist::G4FissionProductYieldDist(G4int WhichIsotope, + G4FFGEnumerations::MetaState WhichMetaState, + G4FFGEnumerations::FissionCause WhichCause, + G4FFGEnumerations::YieldType WhichYieldType, + std::istringstream& dataStream) + : Isotope_(WhichIsotope), MetaState_(WhichMetaState), Cause_(WhichCause), YieldType_(WhichYieldType), Verbosity_(G4FFGDefaultValues::Verbosity) { - G4FFG_FUNCTIONENTER__ - - try - { - // Initialize the class - Initialize(dataStream); - } catch (std::exception& e) - { - G4FFG_FUNCTIONLEAVE__ - throw e; - } + G4FFG_FUNCTIONENTER__ + try { + // Initialize the class + Initialize(dataStream); + } + catch (std::exception& e) { G4FFG_FUNCTIONLEAVE__ + throw e; + } + + G4FFG_FUNCTIONLEAVE__ } -G4FissionProductYieldDist:: -G4FissionProductYieldDist(G4int WhichIsotope, - G4FFGEnumerations::MetaState WhichMetaState, - G4FFGEnumerations::FissionCause WhichCause, - G4FFGEnumerations::YieldType WhichYieldType, - G4int Verbosity, - std::istringstream& dataStream) - : Isotope_(WhichIsotope), MetaState_(WhichMetaState), Cause_(WhichCause), - YieldType_(WhichYieldType), Verbosity_(Verbosity) +G4FissionProductYieldDist::G4FissionProductYieldDist(G4int WhichIsotope, + G4FFGEnumerations::MetaState WhichMetaState, + G4FFGEnumerations::FissionCause WhichCause, + G4FFGEnumerations::YieldType WhichYieldType, + G4int Verbosity, + std::istringstream& dataStream) + : Isotope_(WhichIsotope), + MetaState_(WhichMetaState), + Cause_(WhichCause), + YieldType_(WhichYieldType), + Verbosity_(Verbosity) { G4FFG_FUNCTIONENTER__ - try - { + try { // Initialize the class Initialize(dataStream); - } catch (std::exception& e) - { + } + catch (std::exception& e) { G4FFG_FUNCTIONLEAVE__ throw e; } @@ -136,63 +133,58 @@ G4FissionProductYieldDist(G4int WhichIsotope, G4FFG_FUNCTIONLEAVE__ } - void G4FissionProductYieldDist::Initialize(std::istringstream& dataStream) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ IncidentEnergy_ = 0.0; TernaryProbability_ = 0; AlphaProduction_ = 0; SetNubar(); - // Set miscellaneous variables - AlphaDefinition_ = static_cast(G4Alpha::Definition()); - NeutronDefinition_ = static_cast(G4Neutron::Definition()); - GammaDefinition_ = G4Gamma::Definition(); - SmallestZ_ = SmallestA_ = LargestZ_ = LargestA_ = NULL; - - // Construct G4NeutronHPNames: provides access to the element names - ElementNames_ = new G4ParticleHPNames; - // Get the pointer to G4ParticleTable: stores all G4Ions - IonTable_ = G4IonTable::GetIonTable(); - // Construct the pointer to the random engine - // TODO Make G4FPSamplingOps a singleton so that only one instance is used across all classes - RandomEngine_ = new G4FPYSamplingOps; - - try - { - // Read in and sort the probability data - ENDFData_ = new G4ENDFTapeRead(dataStream, - YieldType_, - Cause_, - Verbosity_); -// ENDFData_ = new G4ENDFTapeRead(MakeDirectoryName(), -// MakeFileName(Isotope_, MetaState_), -// YieldType_, -// Cause_); - YieldEnergyGroups_ = ENDFData_->G4GetNumberOfEnergyGroups(); - DataTotal_ = new G4double[YieldEnergyGroups_]; - MaintainNormalizedData_ = new G4double[YieldEnergyGroups_]; - YieldEnergies_ = new G4double[YieldEnergyGroups_]; - G4ArrayOps::Copy(YieldEnergyGroups_, YieldEnergies_, ENDFData_->G4GetEnergyGroupValues()); - MakeTrees(); - ReadProbabilities(); - } catch (std::exception& e) - { - delete ElementNames_; - delete RandomEngine_; + // Set miscellaneous variables + AlphaDefinition_ = static_cast(G4Alpha::Definition()); + NeutronDefinition_ = static_cast(G4Neutron::Definition()); + GammaDefinition_ = G4Gamma::Definition(); + SmallestZ_ = SmallestA_ = LargestZ_ = LargestA_ = nullptr; + + // Construct G4NeutronHPNames: provides access to the element names + ElementNames_ = new G4ParticleHPNames; + // Get the pointer to G4ParticleTable: stores all G4Ions + IonTable_ = G4IonTable::GetIonTable(); + // Construct the pointer to the random engine + // TODO Make G4FPSamplingOps a singleton so that only one instance is used across all classes + RandomEngine_ = new G4FPYSamplingOps; + + try { + // Read in and sort the probability data + ENDFData_ = new G4ENDFTapeRead(dataStream, YieldType_, Cause_, Verbosity_); + // ENDFData_ = new G4ENDFTapeRead(MakeDirectoryName(), + // MakeFileName(Isotope_, MetaState_), + // YieldType_, + // Cause_); + YieldEnergyGroups_ = ENDFData_->G4GetNumberOfEnergyGroups(); + DataTotal_ = new G4double[YieldEnergyGroups_]; + MaintainNormalizedData_ = new G4double[YieldEnergyGroups_]; + YieldEnergies_ = new G4double[YieldEnergyGroups_]; + G4ArrayOps::Copy(YieldEnergyGroups_, YieldEnergies_, ENDFData_->G4GetEnergyGroupValues()); + MakeTrees(); + ReadProbabilities(); + } + catch (std::exception& e) { + delete ElementNames_; + delete RandomEngine_; - G4FFG_FUNCTIONLEAVE__ - throw e; - } + G4FFG_FUNCTIONLEAVE__ + throw e; + } -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -G4DynamicParticleVector* G4FissionProductYieldDist::G4GetFission(void) +G4DynamicParticleVector* G4FissionProductYieldDist::G4GetFission() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ #ifdef G4MULTITHREADED G4AutoLock lk(&G4FissionProductYieldDist::fissprodMutex); @@ -204,36 +196,35 @@ G4FFG_FUNCTIONENTER__ // Generate the new G4DynamicParticle pointers to identify key locations in // the G4DynamicParticle chain that will be passed to the G4FissionEvent - G4ReactionProduct* FirstDaughter = NULL; - G4ReactionProduct* SecondDaughter = NULL; - std::vector< G4ReactionProduct* >* Alphas = new std::vector< G4ReactionProduct* >; - std::vector< G4ReactionProduct* >* Neutrons = new std::vector< G4ReactionProduct* >; - std::vector< G4ReactionProduct* >* Gammas = new std::vector< G4ReactionProduct* >; + G4ReactionProduct* FirstDaughter = nullptr; + G4ReactionProduct* SecondDaughter = nullptr; + auto Alphas = new std::vector; + auto Neutrons = new std::vector; + auto Gammas = new std::vector; // Generate all the nucleonic fission products // How many nucleons do we have to work with? - //TK modified 131108 - const G4int ParentA = (Isotope_/10) % 1000; - const G4int ParentZ = ((Isotope_/10) - ParentA) / 1000; + // TK modified 131108 + const G4int ParentA = (Isotope_ / 10) % 1000; + const G4int ParentZ = ((Isotope_ / 10) - ParentA) / 1000; RemainingA_ = ParentA; RemainingZ_ = ParentZ; // Don't forget the extra nucleons depending on the fission cause - switch(Cause_) - { + switch (Cause_) { case G4FFGEnumerations::NEUTRON_INDUCED: - ++RemainingA_; - break; + ++RemainingA_; + break; case G4FFGEnumerations::PROTON_INDUCED: - ++RemainingZ_; - break; + ++RemainingZ_; + break; case G4FFGEnumerations::GAMMA_INDUCED: case G4FFGEnumerations::SPONTANEOUS: default: - // Nothing to do here - break; + // Nothing to do here + break; } // Ternary fission can be set by the user. Thus, it is necessary to @@ -247,10 +238,10 @@ G4FFG_FUNCTIONENTER__ FirstDaughter = new G4ReactionProduct(GetFissionProduct()); RemainingA_ -= FirstDaughter->GetDefinition()->GetAtomicMass(); RemainingZ_ -= FirstDaughter->GetDefinition()->GetAtomicNumber(); - if (Verbosity_ & G4FFGEnumerations::DAUGHTER_INFO) { + if ((Verbosity_ & G4FFGEnumerations::DAUGHTER_INFO) != 0) { G4FFG_SPACING__ G4FFG_LOCATION__ - + G4cout << " -- First daughter product sampled" << G4endl; G4FFG_SPACING__ G4cout << " Name: " << FirstDaughter->GetDefinition()->GetParticleName() << G4endl; @@ -267,11 +258,12 @@ G4FFG_FUNCTIONENTER__ // Now that all the nucleonic particles have been generated, we can // calculate the composition of the second daughter product. G4int NewIsotope = RemainingZ_ * 1000 + RemainingA_; - SecondDaughter = new G4ReactionProduct(GetParticleDefinition(NewIsotope, G4FFGEnumerations::GROUND_STATE)); - if (Verbosity_ & G4FFGEnumerations::DAUGHTER_INFO) { + SecondDaughter = + new G4ReactionProduct(GetParticleDefinition(NewIsotope, G4FFGEnumerations::GROUND_STATE)); + if ((Verbosity_ & G4FFGEnumerations::DAUGHTER_INFO) != 0) { G4FFG_SPACING__ G4FFG_LOCATION__ - + G4cout << " -- Second daughter product sampled" << G4endl; G4FFG_SPACING__ G4cout << " Name: " << SecondDaughter->GetDefinition()->GetParticleName() << G4endl; @@ -280,1268 +272,1176 @@ G4FFG_FUNCTIONENTER__ G4FFG_SPACING__ G4cout << " A: " << SecondDaughter->GetDefinition()->GetAtomicMass() << G4endl; G4FFG_SPACING__ - G4cout << " Meta State: " << (SecondDaughter->GetDefinition()->GetPDGEncoding() % 10) << G4endl; + G4cout << " Meta State: " << (SecondDaughter->GetDefinition()->GetPDGEncoding() % 10) + << G4endl; } - // Calculate how much kinetic energy will be available - // 195 to 205 MeV are available in a fission reaction, but about 20 MeV - // are from delayed sources. We are concerned only with prompt sources, - // so sample a Gaussian distribution about 20 MeV and subtract the - // result from the total available energy. Also, the energy of fission - // neutrinos is neglected. Fission neutrinos would add ~11 MeV - // additional energy to the fission. (Ref 2) - // Finally, add in the kinetic energy contribution of the fission - // inducing particle, if any. - const G4double TotalKE = RandomEngine_->G4SampleUniform(195.0, 205.0) * MeV - - RandomEngine_->G4SampleGaussian(20.0, 3.0) * MeV - + IncidentEnergy_; - RemainingEnergy_ = TotalKE; - - // Calculate the energies of the alpha particles and neutrons - // Once again, since the alpha particles are user defined, we must - // sample their kinetic energy first. SampleAlphaEnergies() returns the - // amount of energy consumed by the alpha particles, so remove the total - // energy alloted to the alpha particles from the available energy - SampleAlphaEnergies(Alphas); - - // Second, the neutrons are sampled from the Watt fission spectrum. - SampleNeutronEnergies(Neutrons); - - // Calculate the total energy available to the daughter products - // A Gaussian distribution about the average calculated energy with - // a standard deviation of 1.5 MeV (Ref. 2) is used. Since the energy - // distribution is dependant on the alpha particle generation and the - // Watt fission sampling for neutrons, we only have the left-over energy - // to work with for the fission daughter products. - G4double FragmentsKE=0.; - G4int icounter=0; - G4int icounter_max=1024; - do - { - icounter++; - if ( icounter > icounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; - } - FragmentsKE = RandomEngine_->G4SampleGaussian(RemainingEnergy_, 1.5 *MeV); - } while(FragmentsKE > RemainingEnergy_); // Loop checking, 11.05.2015, T. Koi - - // Make sure that we don't produce any sub-gamma photons - if((RemainingEnergy_ - FragmentsKE) / (100 * keV) < 1.0) - { - FragmentsKE = RemainingEnergy_; - } + // Calculate how much kinetic energy will be available + // 195 to 205 MeV are available in a fission reaction, but about 20 MeV + // are from delayed sources. We are concerned only with prompt sources, + // so sample a Gaussian distribution about 20 MeV and subtract the + // result from the total available energy. Also, the energy of fission + // neutrinos is neglected. Fission neutrinos would add ~11 MeV + // additional energy to the fission. (Ref 2) + // Finally, add in the kinetic energy contribution of the fission + // inducing particle, if any. + const G4double TotalKE = RandomEngine_->G4SampleUniform(195.0, 205.0) * MeV + - RandomEngine_->G4SampleGaussian(20.0, 3.0) * MeV + IncidentEnergy_; + RemainingEnergy_ = TotalKE; + + // Calculate the energies of the alpha particles and neutrons + // Once again, since the alpha particles are user defined, we must + // sample their kinetic energy first. SampleAlphaEnergies() returns the + // amount of energy consumed by the alpha particles, so remove the total + // energy alloted to the alpha particles from the available energy + SampleAlphaEnergies(Alphas); + + // Second, the neutrons are sampled from the Watt fission spectrum. + SampleNeutronEnergies(Neutrons); + + // Calculate the total energy available to the daughter products + // A Gaussian distribution about the average calculated energy with + // a standard deviation of 1.5 MeV (Ref. 2) is used. Since the energy + // distribution is dependant on the alpha particle generation and the + // Watt fission sampling for neutrons, we only have the left-over energy + // to work with for the fission daughter products. + G4double FragmentsKE = 0.; + G4int icounter = 0; + G4int icounter_max = 1024; + do { + icounter++; + if (icounter > icounter_max) { + G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " + << __FILE__ << "." << G4endl; + break; + } + FragmentsKE = RandomEngine_->G4SampleGaussian(RemainingEnergy_, 1.5 * MeV); + } while (FragmentsKE > RemainingEnergy_); // Loop checking, 11.05.2015, T. Koi - // This energy has now been allotted to the fission fragments. - // Subtract FragmentsKE from the total available fission energy. - RemainingEnergy_ -= FragmentsKE; - - // Sample the energies of the gamma rays - // Assign the remainder, if any, of the energy to the gamma rays - SampleGammaEnergies(Gammas); - - // Prepare to balance the momenta of the system - // We will need these for sampling the angles and balancing the momenta - // of all the fission products - G4double NumeratorSqrt, NumeratorOther, Denominator; - G4double Theta, Phi, Magnitude; - G4ThreeVector Direction; - G4ParticleMomentum ResultantVector(0, 0, 0); - - if(Alphas->size() > 0) - { - // Sample the angles of the alpha particles and neutrons, then calculate - // the total moment contribution to the system - // The average angle of the alpha particles with respect to the - // light fragment is dependent on the ratio of the kinetic energies. - // This equation was determined by performing a fit on data from - // Ref. 3 using the website: - // http://soft.arquimedex.com/linear_regression.php - // - // RatioOfKE Angle (rad) Angle (degrees) - // 1.05 1.257 72 - // 1.155 1.361 78 - // 1.28 1.414 81 - // 1.5 1.518 87 - // 1.75 1.606 92 - // 1.9 1.623 93 - // 2.2 1.728 99 - // This equation generates the angle in radians. If the RatioOfKE is - // greater than 2.25 the angle defaults to 1.3963 rad (100 degrees) - G4double MassRatio = FirstDaughter->GetDefinition()->GetPDGMass() / SecondDaughter->GetDefinition()->GetPDGMass(); - - // Invert the mass ratio if the first daughter product is the lighter fragment - if(MassRatio < 1) - { - MassRatio = 1 / MassRatio; - } - - // The empirical equation is valid for mass ratios up to 2.75 - if(MassRatio > 2.75) - { - MassRatio = 2.75; - } - const G4double MeanAlphaAngle = 0.3644 * MassRatio * MassRatio * MassRatio - - 1.9766 * MassRatio * MassRatio - + 3.8207 * MassRatio - - 0.9917; - - // Sample the directions of the alpha particles with respect to the - // light fragment. For the moment we will assume that the light - // fragment is traveling along the z-axis in the positive direction. - const G4double MeanAlphaAngleStdDev = 0.0523598776; - G4double PlusMinus; - - for(unsigned int i = 0; i < Alphas->size(); ++i) - { - PlusMinus = std::acos(RandomEngine_->G4SampleGaussian(0, MeanAlphaAngleStdDev)) - (pi / 2); - Theta = MeanAlphaAngle + PlusMinus; - if(Theta < 0) - { - Theta = 0.0 - Theta; - } else if(Theta > pi) - { - Theta = (2 * pi - Theta); - } - Phi = RandomEngine_->G4SampleUniform(-pi, pi); - - Direction.setRThetaPhi(1.0, Theta, Phi); - Magnitude = std::sqrt(2 * Alphas->at(i)->GetKineticEnergy() * Alphas->at(i)->GetDefinition()->GetPDGMass()); - Alphas->at(i)->SetMomentum(Direction * Magnitude); - ResultantVector += Alphas->at(i)->GetMomentum(); - } - } + // Make sure that we don't produce any sub-gamma photons + if ((RemainingEnergy_ - FragmentsKE) / (100 * keV) < 1.0) { + FragmentsKE = RemainingEnergy_; + } - // Sample the directions of the neutrons. - if(Neutrons->size() != 0) - { - for(unsigned int i = 0; i < Neutrons->size(); ++i) - { - Theta = std::acos(RandomEngine_->G4SampleUniform(-1, 1)); - Phi = RandomEngine_->G4SampleUniform(-pi, pi); - - Direction.setRThetaPhi(1.0, Theta, Phi); - Magnitude = std::sqrt(2 * Neutrons->at(i)->GetKineticEnergy() * Neutrons->at(i)->GetDefinition()->GetPDGMass()); - Neutrons->at(i)->SetMomentum(Direction * Magnitude); - ResultantVector += Neutrons->at(i)->GetMomentum(); - } - } + // This energy has now been allotted to the fission fragments. + // Subtract FragmentsKE from the total available fission energy. + RemainingEnergy_ -= FragmentsKE; + + // Sample the energies of the gamma rays + // Assign the remainder, if any, of the energy to the gamma rays + SampleGammaEnergies(Gammas); + + // Prepare to balance the momenta of the system + // We will need these for sampling the angles and balancing the momenta + // of all the fission products + G4double NumeratorSqrt, NumeratorOther, Denominator; + G4double Theta, Phi, Magnitude; + G4ThreeVector Direction; + G4ParticleMomentum ResultantVector(0, 0, 0); + + if (!Alphas->empty()) { + // Sample the angles of the alpha particles and neutrons, then calculate + // the total moment contribution to the system + // The average angle of the alpha particles with respect to the + // light fragment is dependent on the ratio of the kinetic energies. + // This equation was determined by performing a fit on data from + // Ref. 3 using the website: + // http://soft.arquimedex.com/linear_regression.php + // + // RatioOfKE Angle (rad) Angle (degrees) + // 1.05 1.257 72 + // 1.155 1.361 78 + // 1.28 1.414 81 + // 1.5 1.518 87 + // 1.75 1.606 92 + // 1.9 1.623 93 + // 2.2 1.728 99 + // This equation generates the angle in radians. If the RatioOfKE is + // greater than 2.25 the angle defaults to 1.3963 rad (100 degrees) + G4double MassRatio = + FirstDaughter->GetDefinition()->GetPDGMass() / SecondDaughter->GetDefinition()->GetPDGMass(); + + // Invert the mass ratio if the first daughter product is the lighter fragment + if (MassRatio < 1) { + MassRatio = 1 / MassRatio; + } - // Sample the directions of the gamma rays - if(Gammas->size() != 0) - { - for(unsigned int i = 0; i < Gammas->size(); ++i) - { - Theta = std::acos(RandomEngine_->G4SampleUniform(-1, 1)); - Phi = RandomEngine_->G4SampleUniform(-pi, pi); - - Direction.setRThetaPhi(1.0, Theta, Phi); - Magnitude = Gammas->at(i)->GetKineticEnergy() / CLHEP::c_light; - Gammas->at(i)->SetMomentum(Direction * Magnitude); - ResultantVector += Gammas->at(i)->GetMomentum(); - } - } + // The empirical equation is valid for mass ratios up to 2.75 + if (MassRatio > 2.75) { + MassRatio = 2.75; + } + const G4double MeanAlphaAngle = 0.3644 * MassRatio * MassRatio * MassRatio + - 1.9766 * MassRatio * MassRatio + 3.8207 * MassRatio - 0.9917; + + // Sample the directions of the alpha particles with respect to the + // light fragment. For the moment we will assume that the light + // fragment is traveling along the z-axis in the positive direction. + const G4double MeanAlphaAngleStdDev = 0.0523598776; + G4double PlusMinus; + + for (auto& Alpha : *Alphas) { + PlusMinus = std::acos(RandomEngine_->G4SampleGaussian(0, MeanAlphaAngleStdDev)) - (pi / 2); + Theta = MeanAlphaAngle + PlusMinus; + if (Theta < 0) { + Theta = 0.0 - Theta; + } + else if (Theta > pi) { + Theta = (2 * pi - Theta); + } + Phi = RandomEngine_->G4SampleUniform(-pi, pi); + + Direction.setRThetaPhi(1.0, Theta, Phi); + Magnitude = std::sqrt(2 * Alpha->GetKineticEnergy() * Alpha->GetDefinition()->GetPDGMass()); + Alpha->SetMomentum(Direction * Magnitude); + ResultantVector += Alpha->GetMomentum(); + } + } - // Calculate the momenta of the two daughter products - G4ReactionProduct* LightFragment; - G4ReactionProduct* HeavyFragment; - G4ThreeVector LightFragmentDirection; - G4ThreeVector HeavyFragmentDirection; - G4double ResultantX, ResultantY, ResultantZ; - ResultantX = ResultantVector.getX(); - ResultantY = ResultantVector.getY(); - ResultantZ = ResultantVector.getZ(); - - if(FirstDaughter->GetDefinition()->GetPDGMass() < SecondDaughter->GetDefinition()->GetPDGMass()) - { - LightFragment = FirstDaughter; - HeavyFragment = SecondDaughter; - } else - { - LightFragment = SecondDaughter; - HeavyFragment = FirstDaughter; - } - const G4double LightFragmentMass = LightFragment->GetDefinition()->GetPDGMass(); - const G4double HeavyFragmentMass = HeavyFragment->GetDefinition()->GetPDGMass(); - - LightFragmentDirection.setRThetaPhi(1.0, 0, 0); - - // Fit the momenta of the daughter products to the resultant vector of - // the remaining fission products. This will be done in the Cartesian - // coordinate system, not spherical. This is done using the following - // table listing the system momenta and the corresponding equations: - // X Y Z - // - // A 0 0 P - // - // B -R_x -R_y -P - R_z - // - // R R_x R_y R_z - // - // v = sqrt(2*m*k) -> k = v^2/(2*m) - // tk = k_A + k_B - // k_L = P^2/(2*m_L) - // k_H = ((-R_x)^2 + (-R_y)^2 + (-P - R_z)^2)/(2*m_H) - // where: - // P: momentum of the light daughter product - // R: the remaining fission products' resultant vector - // v: momentum - // m: mass - // k: kinetic energy - // tk: total kinetic energy available to the daughter products - // - // Below is the solved form for P, with the solution generated using - // the WolframAlpha website: - // http://www.wolframalpha.com/input/?i= - // solve+((-x)^2+%2B+(-y)^2+%2B+(-P-z)^2)%2F(2*B)+%2B+L^2%2F(2*A)+%3D+k+ - // for+P - // - // - // nsqrt = sqrt(m_L*(m_L*(2*m_H*tk - R_x^2 - R_y^2) + - // m_H*(2*m_H*tk - R_x^2 - R_y^2 - R_z^2)) - NumeratorSqrt = std::sqrt(LightFragmentMass * - (LightFragmentMass * (2 * HeavyFragmentMass * FragmentsKE - - ResultantX * ResultantX - - ResultantY * ResultantY) - + HeavyFragmentMass * (2 * HeavyFragmentMass * FragmentsKE - - ResultantX * ResultantX - - ResultantY * ResultantY - - ResultantZ - ResultantZ))); - - // nother = m_L*R_z - NumeratorOther = LightFragmentMass * ResultantZ; - - // denom = m_L + m_H - Denominator = LightFragmentMass + HeavyFragmentMass; - - // P = (nsqrt + nother) / denom - const G4double LightFragmentMomentum = (NumeratorSqrt + NumeratorOther) / Denominator; - const G4double HeavyFragmentMomentum = std::sqrt(ResultantX * ResultantX - + ResultantY * ResultantY - + G4Pow::GetInstance()->powN(LightFragmentMomentum + ResultantZ, 2)); - - // Finally! We now have everything we need for the daughter products - LightFragment->SetMomentum(LightFragmentDirection * LightFragmentMomentum); - HeavyFragmentDirection.setX(-ResultantX); - HeavyFragmentDirection.setY(-ResultantY); - HeavyFragmentDirection.setZ((-LightFragmentMomentum - ResultantZ)); - // Don't forget to normalize the vector to the unit sphere - HeavyFragmentDirection.setR(1.0); - HeavyFragment->SetMomentum(HeavyFragmentDirection * HeavyFragmentMomentum); - - if(Verbosity_ & (G4FFGEnumerations::DAUGHTER_INFO | G4FFGEnumerations::MOMENTUM_INFO)) - { - G4FFG_SPACING__ - G4FFG_LOCATION__ - - G4cout << " -- Daugher product momenta finalized" << G4endl; - G4FFG_SPACING__ - } + // Sample the directions of the neutrons. + if (!Neutrons->empty()) { + for (auto& Neutron : *Neutrons) { + Theta = std::acos(RandomEngine_->G4SampleUniform(-1, 1)); + Phi = RandomEngine_->G4SampleUniform(-pi, pi); + + Direction.setRThetaPhi(1.0, Theta, Phi); + Magnitude = + std::sqrt(2 * Neutron->GetKineticEnergy() * Neutron->GetDefinition()->GetPDGMass()); + Neutron->SetMomentum(Direction * Magnitude); + ResultantVector += Neutron->GetMomentum(); + } + } - // Load all the particles into a contiguous set - //TK modifed 131108 - //G4DynamicParticleVector* FissionProducts = new G4DynamicParticleVector(2 + Alphas->size() + Neutrons->size() + Gammas->size()); - G4DynamicParticleVector* FissionProducts = new G4DynamicParticleVector(); - // Load the fission fragments - FissionProducts->push_back(MakeG4DynamicParticle(LightFragment)); - FissionProducts->push_back(MakeG4DynamicParticle(HeavyFragment)); - // Load the neutrons - for(unsigned int i = 0; i < Neutrons->size(); i++) - { - FissionProducts->push_back(MakeG4DynamicParticle(Neutrons->at(i))); - } - // Load the gammas - for(unsigned int i = 0; i < Gammas->size(); i++) - { - FissionProducts->push_back(MakeG4DynamicParticle(Gammas->at(i))); - } - // Load the alphas - for(unsigned int i = 0; i < Alphas->size(); i++) - { - FissionProducts->push_back(MakeG4DynamicParticle(Alphas->at(i))); - } + // Sample the directions of the gamma rays + if (!Gammas->empty()) { + for (auto& Gamma : *Gammas) { + Theta = std::acos(RandomEngine_->G4SampleUniform(-1, 1)); + Phi = RandomEngine_->G4SampleUniform(-pi, pi); - // Rotate the system to a random location so that the light fission fragment - // is not always traveling along the positive z-axis - // Sample Theta and Phi. - G4ThreeVector RotationAxis; - - Theta = std::acos(RandomEngine_->G4SampleUniform(-1, 1)); - Phi = RandomEngine_->G4SampleUniform(-pi, pi); - RotationAxis.setRThetaPhi(1.0, Theta, Phi); - - // We will also check the net momenta - ResultantVector.set(0.0, 0.0, 0.0); - for(unsigned int i = 0; i < FissionProducts->size(); i++) - { - Direction = FissionProducts->at(i)->GetMomentumDirection(); - Direction.rotateUz(RotationAxis); - FissionProducts->at(i)->SetMomentumDirection(Direction); - ResultantVector += FissionProducts->at(i)->GetMomentum(); - } + Direction.setRThetaPhi(1.0, Theta, Phi); + Magnitude = Gamma->GetKineticEnergy() / CLHEP::c_light; + Gamma->SetMomentum(Direction * Magnitude); + ResultantVector += Gamma->GetMomentum(); + } + } - // Warn if the sum momenta of the system is not within a reasonable - // tolerance - G4double PossibleImbalance = ResultantVector.mag(); - if(PossibleImbalance > 0.01) - { - std::ostringstream Temp; - Temp << "Momenta imbalance of "; - Temp << PossibleImbalance / (MeV / CLHEP::c_light); - Temp << " MeV/c in the system"; - G4Exception("G4FissionProductYieldDist::G4GetFission()", - Temp.str().c_str(), - JustWarning, - "Results may not be valid"); - } + // Calculate the momenta of the two daughter products + G4ReactionProduct* LightFragment; + G4ReactionProduct* HeavyFragment; + G4ThreeVector LightFragmentDirection; + G4ThreeVector HeavyFragmentDirection; + G4double ResultantX, ResultantY, ResultantZ; + ResultantX = ResultantVector.getX(); + ResultantY = ResultantVector.getY(); + ResultantZ = ResultantVector.getZ(); + + if (FirstDaughter->GetDefinition()->GetPDGMass() < SecondDaughter->GetDefinition()->GetPDGMass()) + { + LightFragment = FirstDaughter; + HeavyFragment = SecondDaughter; + } + else { + LightFragment = SecondDaughter; + HeavyFragment = FirstDaughter; + } + const G4double LightFragmentMass = LightFragment->GetDefinition()->GetPDGMass(); + const G4double HeavyFragmentMass = HeavyFragment->GetDefinition()->GetPDGMass(); + + LightFragmentDirection.setRThetaPhi(1.0, 0, 0); + + // Fit the momenta of the daughter products to the resultant vector of + // the remaining fission products. This will be done in the Cartesian + // coordinate system, not spherical. This is done using the following + // table listing the system momenta and the corresponding equations: + // X Y Z + // + // A 0 0 P + // + // B -R_x -R_y -P - R_z + // + // R R_x R_y R_z + // + // v = sqrt(2*m*k) -> k = v^2/(2*m) + // tk = k_A + k_B + // k_L = P^2/(2*m_L) + // k_H = ((-R_x)^2 + (-R_y)^2 + (-P - R_z)^2)/(2*m_H) + // where: + // P: momentum of the light daughter product + // R: the remaining fission products' resultant vector + // v: momentum + // m: mass + // k: kinetic energy + // tk: total kinetic energy available to the daughter products + // + // Below is the solved form for P, with the solution generated using + // the WolframAlpha website: + // http://www.wolframalpha.com/input/?i= + // solve+((-x)^2+%2B+(-y)^2+%2B+(-P-z)^2)%2F(2*B)+%2B+L^2%2F(2*A)+%3D+k+ + // for+P + // + // + // nsqrt = sqrt(m_L*(m_L*(2*m_H*tk - R_x^2 - R_y^2) + + // m_H*(2*m_H*tk - R_x^2 - R_y^2 - R_z^2)) + NumeratorSqrt = std::sqrt( + LightFragmentMass + * (LightFragmentMass + * (2 * HeavyFragmentMass * FragmentsKE - ResultantX * ResultantX - ResultantY * ResultantY) + + HeavyFragmentMass + * (2 * HeavyFragmentMass * FragmentsKE - ResultantX * ResultantX + - ResultantY * ResultantY - ResultantZ - ResultantZ))); + + // nother = m_L*R_z + NumeratorOther = LightFragmentMass * ResultantZ; + + // denom = m_L + m_H + Denominator = LightFragmentMass + HeavyFragmentMass; + + // P = (nsqrt + nother) / denom + const G4double LightFragmentMomentum = (NumeratorSqrt + NumeratorOther) / Denominator; + const G4double HeavyFragmentMomentum = + std::sqrt(ResultantX * ResultantX + ResultantY * ResultantY + + G4Pow::GetInstance()->powN(LightFragmentMomentum + ResultantZ, 2)); + + // Finally! We now have everything we need for the daughter products + LightFragment->SetMomentum(LightFragmentDirection * LightFragmentMomentum); + HeavyFragmentDirection.setX(-ResultantX); + HeavyFragmentDirection.setY(-ResultantY); + HeavyFragmentDirection.setZ((-LightFragmentMomentum - ResultantZ)); + // Don't forget to normalize the vector to the unit sphere + HeavyFragmentDirection.setR(1.0); + HeavyFragment->SetMomentum(HeavyFragmentDirection * HeavyFragmentMomentum); + + if ((Verbosity_ & (G4FFGEnumerations::DAUGHTER_INFO | G4FFGEnumerations::MOMENTUM_INFO)) != 0) { + G4FFG_SPACING__ + G4FFG_LOCATION__ + + G4cout << " -- Daugher product momenta finalized" << G4endl; + G4FFG_SPACING__ + } + + // Load all the particles into a contiguous set + // TK modifed 131108 + // G4DynamicParticleVector* FissionProducts = new G4DynamicParticleVector(2 + Alphas->size() + + // Neutrons->size() + Gammas->size()); + auto FissionProducts = new G4DynamicParticleVector(); + // Load the fission fragments + FissionProducts->push_back(MakeG4DynamicParticle(LightFragment)); + FissionProducts->push_back(MakeG4DynamicParticle(HeavyFragment)); + // Load the neutrons + for (auto& Neutron : *Neutrons) { + FissionProducts->push_back(MakeG4DynamicParticle(Neutron)); + } + // Load the gammas + for (auto& Gamma : *Gammas) { + FissionProducts->push_back(MakeG4DynamicParticle(Gamma)); + } + // Load the alphas + for (auto& Alpha : *Alphas) { + FissionProducts->push_back(MakeG4DynamicParticle(Alpha)); + } - // Clean up - delete FirstDaughter; - delete SecondDaughter; - G4ArrayOps::DeleteVectorOfPointers(*Neutrons); - G4ArrayOps::DeleteVectorOfPointers(*Gammas); - G4ArrayOps::DeleteVectorOfPointers(*Alphas); + // Rotate the system to a random location so that the light fission fragment + // is not always traveling along the positive z-axis + // Sample Theta and Phi. + G4ThreeVector RotationAxis; + + Theta = std::acos(RandomEngine_->G4SampleUniform(-1, 1)); + Phi = RandomEngine_->G4SampleUniform(-pi, pi); + RotationAxis.setRThetaPhi(1.0, Theta, Phi); + + // We will also check the net momenta + ResultantVector.set(0.0, 0.0, 0.0); + for (auto& FissionProduct : *FissionProducts) { + Direction = FissionProduct->GetMomentumDirection(); + Direction.rotateUz(RotationAxis); + FissionProduct->SetMomentumDirection(Direction); + ResultantVector += FissionProduct->GetMomentum(); + } + + // Warn if the sum momenta of the system is not within a reasonable + // tolerance + G4double PossibleImbalance = ResultantVector.mag(); + if (PossibleImbalance > 0.01) { + std::ostringstream Temp; + Temp << "Momenta imbalance of "; + Temp << PossibleImbalance / (MeV / CLHEP::c_light); + Temp << " MeV/c in the system"; + G4Exception("G4FissionProductYieldDist::G4GetFission()", Temp.str().c_str(), JustWarning, + "Results may not be valid"); + } -G4FFG_FUNCTIONLEAVE__ - return FissionProducts; + // Clean up + delete FirstDaughter; + delete SecondDaughter; + G4ArrayOps::DeleteVectorOfPointers(*Neutrons); + G4ArrayOps::DeleteVectorOfPointers(*Gammas); + G4ArrayOps::DeleteVectorOfPointers(*Alphas); + + G4FFG_FUNCTIONLEAVE__ + return FissionProducts; } -G4Ions* G4FissionProductYieldDist:: -G4GetFissionProduct( void ) +G4Ions* G4FissionProductYieldDist::G4GetFissionProduct() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - G4Ions* Product = FindParticle(RandomEngine_->G4SampleUniform()); + G4Ions* Product = FindParticle(RandomEngine_->G4SampleUniform()); -G4FFG_FUNCTIONLEAVE__ - return Product; + G4FFG_FUNCTIONLEAVE__ + return Product; } -void G4FissionProductYieldDist:: -G4SetAlphaProduction(G4double WhatAlphaProduction) +void G4FissionProductYieldDist::G4SetAlphaProduction(G4double WhatAlphaProduction) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - AlphaProduction_ = WhatAlphaProduction; + AlphaProduction_ = WhatAlphaProduction; -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -void G4FissionProductYieldDist:: -G4SetEnergy( G4double WhatIncidentEnergy ) +void G4FissionProductYieldDist::G4SetEnergy(G4double WhatIncidentEnergy) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - if(Cause_ != G4FFGEnumerations::SPONTANEOUS) - { - IncidentEnergy_ = WhatIncidentEnergy; - } else - { - IncidentEnergy_ = 0 * GeV; - } + if (Cause_ != G4FFGEnumerations::SPONTANEOUS) { + IncidentEnergy_ = WhatIncidentEnergy; + } + else { + IncidentEnergy_ = 0 * GeV; + } -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -void G4FissionProductYieldDist:: -G4SetTernaryProbability( G4double WhatTernaryProbability ) +void G4FissionProductYieldDist::G4SetTernaryProbability(G4double WhatTernaryProbability) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - TernaryProbability_ = WhatTernaryProbability; + TernaryProbability_ = WhatTernaryProbability; -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -void G4FissionProductYieldDist:: -G4SetVerbosity(G4int Verbosity) +void G4FissionProductYieldDist::G4SetVerbosity(G4int Verbosity) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ + + Verbosity_ = Verbosity; - Verbosity_ = Verbosity; - - ENDFData_->G4SetVerbosity(Verbosity_); - RandomEngine_->G4SetVerbosity(Verbosity_); + ENDFData_->G4SetVerbosity(Verbosity_); + RandomEngine_->G4SetVerbosity(Verbosity_); -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -void G4FissionProductYieldDist:: -CheckAlphaSanity( void ) +void G4FissionProductYieldDist::CheckAlphaSanity() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - // This provides comfortable breathing room at 16 MeV per alpha - if(AlphaProduction_ > 10) - { - AlphaProduction_ = 10; - } else if(AlphaProduction_ < -7) - { - AlphaProduction_ = -7; - } + // This provides comfortable breathing room at 16 MeV per alpha + if (AlphaProduction_ > 10) { + AlphaProduction_ = 10; + } + else if (AlphaProduction_ < -7) { + AlphaProduction_ = -7; + } -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -G4Ions* G4FissionProductYieldDist:: -FindParticle( G4double RandomParticle ) +G4Ions* G4FissionProductYieldDist::FindParticle(G4double RandomParticle) { -G4FFG_FUNCTIONENTER__ - - // Determine which energy group is currently in use - G4bool isExact = false; - G4bool lowerExists = false; - G4bool higherExists = false; - G4int energyGroup; - for(energyGroup = 0; energyGroup < YieldEnergyGroups_; energyGroup++) - { - if(IncidentEnergy_ == YieldEnergies_[energyGroup]) - { - isExact = true; - break; - } + G4FFG_FUNCTIONENTER__ - if(energyGroup == 0 && IncidentEnergy_ < YieldEnergies_[energyGroup]) - { - // Break if the energy is less than the lowest energy - higherExists = true; - break; - } else if(energyGroup == YieldEnergyGroups_ - 1) - { - // The energy is greater than any values in the yield data. - lowerExists = true; - break; - } else - { - // Break if the energy is less than the lowest energy - if(IncidentEnergy_ > YieldEnergies_[energyGroup]) - { - energyGroup--; - lowerExists = true; - higherExists = true; - break; - } - } + // Determine which energy group is currently in use + G4bool isExact = false; + G4bool lowerExists = false; + G4bool higherExists = false; + G4int energyGroup; + for (energyGroup = 0; energyGroup < YieldEnergyGroups_; energyGroup++) { + if (IncidentEnergy_ == YieldEnergies_[energyGroup]) { + isExact = true; + break; } - // Determine which particle it is - G4Ions* FoundParticle = NULL; - if(isExact || YieldEnergyGroups_ == 1) - { - // Determine which tree contains the random value - G4int tree; - for(tree = 0; tree < TreeCount_; tree++) - { - // Break if a tree is identified as containing the random particle - if(RandomParticle <= Trees_[tree].ProbabilityRangeEnd[energyGroup]) - { - break; - } - } - ProbabilityBranch* Branch = Trees_[tree].Trunk; - - // Iteratively traverse the tree until the particle addressed by the random - // variable is found - G4bool RangeIsSmaller; - G4bool RangeIsGreater; - while((RangeIsSmaller = (RandomParticle < Branch->ProbabilityRangeBottom[energyGroup])) - || (RangeIsGreater = (RandomParticle > Branch->ProbabilityRangeTop[energyGroup]))) - // Loop checking, 11.05.2015, T. Koi - { - if(RangeIsSmaller) - { - Branch = Branch->Left; - } else { - Branch = Branch->Right; - } - } + if (energyGroup == 0 && IncidentEnergy_ < YieldEnergies_[energyGroup]) { + // Break if the energy is less than the lowest energy + higherExists = true; + break; + } + if (energyGroup == YieldEnergyGroups_ - 1) { + // The energy is greater than any values in the yield data. + lowerExists = true; + break; + } + // Break if the energy is less than the lowest energy + if (IncidentEnergy_ > YieldEnergies_[energyGroup]) { + energyGroup--; + lowerExists = true; + higherExists = true; + break; + } + } - FoundParticle = Branch->Particle; - } else if(lowerExists && higherExists) - { - // We need to do some interpolation - FoundParticle = FindParticleInterpolation(RandomParticle, energyGroup); - } else + // Determine which particle it is + G4Ions* FoundParticle = nullptr; + if (isExact || YieldEnergyGroups_ == 1) { + // Determine which tree contains the random value + G4int tree; + for (tree = 0; tree < TreeCount_; tree++) { + // Break if a tree is identified as containing the random particle + if (RandomParticle <= Trees_[tree].ProbabilityRangeEnd[energyGroup]) { + break; + } + } + ProbabilityBranch* Branch = Trees_[tree].Trunk; + + // Iteratively traverse the tree until the particle addressed by the random + // variable is found + G4bool RangeIsSmaller; + G4bool RangeIsGreater; + while ((RangeIsSmaller = (RandomParticle < Branch->ProbabilityRangeBottom[energyGroup])) + || (RangeIsGreater = (RandomParticle > Branch->ProbabilityRangeTop[energyGroup]))) + // Loop checking, 11.05.2015, T. Koi { - // We need to do some extrapolation - FoundParticle = FindParticleExtrapolation(RandomParticle, lowerExists); + if (RangeIsSmaller) { + Branch = Branch->Left; + } + else { + Branch = Branch->Right; + } } - // Return the particle -G4FFG_FUNCTIONLEAVE__ - return FoundParticle; + FoundParticle = Branch->Particle; + } + else if (lowerExists && higherExists) { + // We need to do some interpolation + FoundParticle = FindParticleInterpolation(RandomParticle, energyGroup); + } + else { + // We need to do some extrapolation + FoundParticle = FindParticleExtrapolation(RandomParticle, lowerExists); + } + + // Return the particle + G4FFG_FUNCTIONLEAVE__ + return FoundParticle; } -G4Ions* G4FissionProductYieldDist:: -FindParticleExtrapolation( G4double RandomParticle, - G4bool LowerEnergyGroupExists ) +G4Ions* G4FissionProductYieldDist::FindParticleExtrapolation(G4double RandomParticle, + G4bool LowerEnergyGroupExists) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - G4Ions* FoundParticle = NULL; - G4int NearestEnergy; - G4int NextNearestEnergy; + G4Ions* FoundParticle = nullptr; + G4int NearestEnergy; + G4int NextNearestEnergy; - // Check to see if we are extrapolating above or below the data set - if(LowerEnergyGroupExists == true) - { - NearestEnergy = YieldEnergyGroups_ - 1; - NextNearestEnergy = NearestEnergy - 1; - } else - { - NearestEnergy = 0; - NextNearestEnergy = 1; - } + // Check to see if we are extrapolating above or below the data set + if (LowerEnergyGroupExists) { + NearestEnergy = YieldEnergyGroups_ - 1; + NextNearestEnergy = NearestEnergy - 1; + } + else { + NearestEnergy = 0; + NextNearestEnergy = 1; + } - for(G4int Tree = 0; Tree < TreeCount_ && FoundParticle == NULL; Tree++) - { - FoundParticle = FindParticleBranchSearch(Trees_[Tree].Trunk, - RandomParticle, - NearestEnergy, - NextNearestEnergy); - } + for (G4int Tree = 0; Tree < TreeCount_ && FoundParticle == nullptr; Tree++) { + FoundParticle = FindParticleBranchSearch(Trees_[Tree].Trunk, RandomParticle, NearestEnergy, + NextNearestEnergy); + } -G4FFG_FUNCTIONLEAVE__ - return FoundParticle; + G4FFG_FUNCTIONLEAVE__ + return FoundParticle; } -G4Ions* G4FissionProductYieldDist:: -FindParticleInterpolation( G4double RandomParticle, - G4int LowerEnergyGroup ) +G4Ions* G4FissionProductYieldDist::FindParticleInterpolation(G4double RandomParticle, + G4int LowerEnergyGroup) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - G4Ions* FoundParticle = NULL; - G4int HigherEnergyGroup = LowerEnergyGroup + 1; + G4Ions* FoundParticle = nullptr; + G4int HigherEnergyGroup = LowerEnergyGroup + 1; - for(G4int Tree = 0; Tree < TreeCount_ && FoundParticle == NULL; Tree++) - { - FoundParticle = FindParticleBranchSearch(Trees_[Tree].Trunk, - RandomParticle, - LowerEnergyGroup, - HigherEnergyGroup); - } + for (G4int Tree = 0; Tree < TreeCount_ && FoundParticle == nullptr; Tree++) { + FoundParticle = FindParticleBranchSearch(Trees_[Tree].Trunk, RandomParticle, LowerEnergyGroup, + HigherEnergyGroup); + } -G4FFG_FUNCTIONLEAVE__ - return FoundParticle; + G4FFG_FUNCTIONLEAVE__ + return FoundParticle; } -G4Ions* G4FissionProductYieldDist:: -FindParticleBranchSearch( ProbabilityBranch* Branch, - G4double RandomParticle, - G4int EnergyGroup1, - G4int EnergyGroup2 ) +G4Ions* G4FissionProductYieldDist::FindParticleBranchSearch(ProbabilityBranch* Branch, + G4double RandomParticle, + G4int EnergyGroup1, G4int EnergyGroup2) { -G4FFG_RECURSIVE_FUNCTIONENTER__ + G4FFG_RECURSIVE_FUNCTIONENTER__ - G4Ions* Particle; + G4Ions* Particle; - // Verify that the branch exists - if(Branch == NULL) - { - Particle = NULL; - } else if(EnergyGroup1 >= Branch->IncidentEnergiesCount - || EnergyGroup2 >= Branch->IncidentEnergiesCount - || EnergyGroup1 == EnergyGroup2 - || Branch->IncidentEnergies[EnergyGroup1] == Branch->IncidentEnergies[EnergyGroup2]) - { - // Set NULL if any invalid conditions exist - Particle = NULL; - } else - { - // Everything check out - proceed - G4Ions* FoundParticle = NULL; - G4double Intercept; - G4double Slope; - G4double RangeAtIncidentEnergy; - G4double Denominator = Branch->IncidentEnergies[EnergyGroup1] - Branch->IncidentEnergies[EnergyGroup2]; - - // Calculate the lower probability bounds - Slope = (Branch->ProbabilityRangeBottom[EnergyGroup1] - Branch->ProbabilityRangeBottom[EnergyGroup2]) / Denominator; - Intercept = Branch->ProbabilityRangeBottom[EnergyGroup1] - Slope * Branch->IncidentEnergies[EnergyGroup1]; - RangeAtIncidentEnergy = Slope * IncidentEnergy_ + Intercept; - - // Go right if the particle is below the probability bounds - if(RandomParticle < RangeAtIncidentEnergy) - { - FoundParticle = FindParticleBranchSearch(Branch->Left, - RandomParticle, - EnergyGroup1, - EnergyGroup2); - } else - { - // Calculate the upper probability bounds - Slope = (Branch->ProbabilityRangeTop[EnergyGroup1] - Branch->ProbabilityRangeTop[EnergyGroup2]) / Denominator; - Intercept = Branch->ProbabilityRangeTop[EnergyGroup1] - Slope * Branch->IncidentEnergies[EnergyGroup1]; - RangeAtIncidentEnergy = Slope * IncidentEnergy_ + Intercept; - - // Go left if the particle is above the probability bounds - if(RandomParticle > RangeAtIncidentEnergy) - { - FoundParticle = FindParticleBranchSearch(Branch->Right, - RandomParticle, - EnergyGroup1, - EnergyGroup2); - } else - { - // If the particle is bounded then we found it! - FoundParticle = Branch->Particle; - } - } - - Particle = FoundParticle; + // Verify that the branch exists + if (Branch == nullptr) { + Particle = nullptr; + } + else if (EnergyGroup1 >= Branch->IncidentEnergiesCount + || EnergyGroup2 >= Branch->IncidentEnergiesCount || EnergyGroup1 == EnergyGroup2 + || Branch->IncidentEnergies[EnergyGroup1] == Branch->IncidentEnergies[EnergyGroup2]) + { + // Set NULL if any invalid conditions exist + Particle = nullptr; + } + else { + // Everything check out - proceed + G4Ions* FoundParticle = nullptr; + G4double Intercept; + G4double Slope; + G4double RangeAtIncidentEnergy; + G4double Denominator = + Branch->IncidentEnergies[EnergyGroup1] - Branch->IncidentEnergies[EnergyGroup2]; + + // Calculate the lower probability bounds + Slope = + (Branch->ProbabilityRangeBottom[EnergyGroup1] - Branch->ProbabilityRangeBottom[EnergyGroup2]) + / Denominator; + Intercept = + Branch->ProbabilityRangeBottom[EnergyGroup1] - Slope * Branch->IncidentEnergies[EnergyGroup1]; + RangeAtIncidentEnergy = Slope * IncidentEnergy_ + Intercept; + + // Go right if the particle is below the probability bounds + if (RandomParticle < RangeAtIncidentEnergy) { + FoundParticle = + FindParticleBranchSearch(Branch->Left, RandomParticle, EnergyGroup1, EnergyGroup2); + } + else { + // Calculate the upper probability bounds + Slope = + (Branch->ProbabilityRangeTop[EnergyGroup1] - Branch->ProbabilityRangeTop[EnergyGroup2]) + / Denominator; + Intercept = + Branch->ProbabilityRangeTop[EnergyGroup1] - Slope * Branch->IncidentEnergies[EnergyGroup1]; + RangeAtIncidentEnergy = Slope * IncidentEnergy_ + Intercept; + + // Go left if the particle is above the probability bounds + if (RandomParticle > RangeAtIncidentEnergy) { + FoundParticle = + FindParticleBranchSearch(Branch->Right, RandomParticle, EnergyGroup1, EnergyGroup2); + } + else { + // If the particle is bounded then we found it! + FoundParticle = Branch->Particle; + } } -G4FFG_RECURSIVE_FUNCTIONLEAVE__ - return Particle; + Particle = FoundParticle; + } + + G4FFG_RECURSIVE_FUNCTIONLEAVE__ + return Particle; } -void G4FissionProductYieldDist:: -GenerateAlphas( std::vector< G4ReactionProduct* >* Alphas ) +void G4FissionProductYieldDist::GenerateAlphas(std::vector* Alphas) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - // Throw the dice to determine if ternary fission occurs - G4bool MakeAlphas = RandomEngine_->G4SampleUniform() <= TernaryProbability_; - if(MakeAlphas) - { - G4int NumberOfAlphasToProduce; - - // Determine how many alpha particles to produce for the ternary fission - if(AlphaProduction_ < 0) - { - NumberOfAlphasToProduce = RandomEngine_->G4SampleIntegerGaussian(AlphaProduction_ * -1, - 1, - G4FFGEnumerations::POSITIVE); - } else - { - NumberOfAlphasToProduce = (G4int)AlphaProduction_; - } + // Throw the dice to determine if ternary fission occurs + G4bool MakeAlphas = RandomEngine_->G4SampleUniform() <= TernaryProbability_; + if (MakeAlphas) { + G4int NumberOfAlphasToProduce; - //TK modifed 131108 - //Alphas->resize(NumberOfAlphasToProduce); - for(int i = 0; i < NumberOfAlphasToProduce; i++) - { - // Set the G4Ions as an alpha particle - Alphas->push_back(new G4ReactionProduct(AlphaDefinition_)); + // Determine how many alpha particles to produce for the ternary fission + if (AlphaProduction_ < 0) { + NumberOfAlphasToProduce = RandomEngine_->G4SampleIntegerGaussian(AlphaProduction_ * -1, 1, + G4FFGEnumerations::POSITIVE); + } + else { + NumberOfAlphasToProduce = (G4int)AlphaProduction_; + } - // Remove 4 nucleons (2 protons and 2 neutrons) for each alpha added - RemainingZ_ -= 2; - RemainingA_ -= 4; - } + // TK modifed 131108 + // Alphas->resize(NumberOfAlphasToProduce); + for (int i = 0; i < NumberOfAlphasToProduce; i++) { + // Set the G4Ions as an alpha particle + Alphas->push_back(new G4ReactionProduct(AlphaDefinition_)); + + // Remove 4 nucleons (2 protons and 2 neutrons) for each alpha added + RemainingZ_ -= 2; + RemainingA_ -= 4; } + } -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -void G4FissionProductYieldDist:: -GenerateNeutrons( std::vector< G4ReactionProduct* >* Neutrons ) +void G4FissionProductYieldDist::GenerateNeutrons(std::vector* Neutrons) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - G4int NeutronProduction; - NeutronProduction = RandomEngine_->G4SampleIntegerGaussian(Nubar_, NubarWidth_, G4FFGEnumerations::POSITIVE); + G4int NeutronProduction; + NeutronProduction = + RandomEngine_->G4SampleIntegerGaussian(Nubar_, NubarWidth_, G4FFGEnumerations::POSITIVE); - //TK modifed 131108 - //Neutrons->resize(NeutronProduction); - for(int i = 0; i < NeutronProduction; i++) - { - // Define the fragment as a neutron - Neutrons->push_back(new G4ReactionProduct(NeutronDefinition_)); + // TK modifed 131108 + // Neutrons->resize(NeutronProduction); + for (int i = 0; i < NeutronProduction; i++) { + // Define the fragment as a neutron + Neutrons->push_back(new G4ReactionProduct(NeutronDefinition_)); - // Remove 1 nucleon for each neutron added - RemainingA_--; - } + // Remove 1 nucleon for each neutron added + RemainingA_--; + } -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -G4Ions* G4FissionProductYieldDist:: -GetParticleDefinition( G4int Product, - //TK modified 131108 - //G4FFGEnumerations::MetaState MetaState ) - G4FFGEnumerations::MetaState /*MetaState*/ ) +G4Ions* G4FissionProductYieldDist::GetParticleDefinition(G4int Product, + // TK modified 131108 + // G4FFGEnumerations::MetaState MetaState ) + G4FFGEnumerations::MetaState /*MetaState*/) { -G4FFG_DATA_FUNCTIONENTER__ - - G4Ions* Temp; - - // Break Product down into its A and Z components - G4int A = Product % 1000; // Extract A - G4int Z = (Product - A) / 1000; // Extract Z - - // Check to see if the particle is registered using the PDG code - // TODO Add metastable state when supported by G4IonTable::GetIon() - Temp = static_cast(IonTable_->GetIon(Z, A)); - - // Removed in favor of the G4IonTable::GetIon() method -// // Register the particle if it does not exist -// if(Temp == NULL) -// { -// // Define the particle properties -// G4String Name = MakeIsotopeName(Product, MetaState); -// // Calculate the rest mass using a function already in Geant4 -// G4double Mass = G4NucleiProperties:: -// GetNuclearMass((double)A, (double)Z ); -// G4double Charge = Z*eplus; -// G4int BaryonNum = A; -// G4bool Stable = TRUE; -// -// // I am unsure about the following properties: -// // 2*Spin, Parity, C-conjugation, 2*Isospin, 2*Isospin3, G-parity. -// // Perhaps is would be a good idea to have a physicist familiar with -// // Geant4 nomenclature to review and correct these properties. -// Temp = new G4Ions ( -// // Name Mass Width Charge -// Name, Mass, 0.0, Charge, -// -// // 2*Spin Parity C-conjugation 2*Isospin -// 0, 1, 0, 0, -// -// // 2*Isospin3 G-parity Type Lepton number -// 0, 0, "nucleus", 0, -// -// // Baryon number PDG encoding Stable Lifetime -// BaryonNum, PDGCode, Stable, -1, -// -// // Decay table Shortlived SubType Anti_encoding -// NULL, FALSE, "generic", 0, -// -// // Excitation -// 0.0); -// Temp->SetPDGMagneticMoment(0.0); -// -// // Declare that there is no anti-particle -// Temp->SetAntiPDGEncoding(0); -// -// // Define the processes to use in transporting the particles -// std::ostringstream osAdd; -// osAdd << "/run/particle/addProcManager " << Name; -// G4String cmdAdd = osAdd.str(); -// -// // set /control/verbose 0 -// G4int tempVerboseLevel = G4UImanager::GetUIpointer()->GetVerboseLevel(); -// G4UImanager::GetUIpointer()->SetVerboseLevel(0); -// -// // issue /run/particle/addProcManage -// G4UImanager::GetUIpointer()->ApplyCommand(cmdAdd); -// -// // retrieve /control/verbose -// G4UImanager::GetUIpointer()->SetVerboseLevel(tempVerboseLevel); -// } - -G4FFG_DATA_FUNCTIONLEAVE__ - return Temp; + G4FFG_DATA_FUNCTIONENTER__ + + G4Ions* Temp; + + // Break Product down into its A and Z components + G4int A = Product % 1000; // Extract A + G4int Z = (Product - A) / 1000; // Extract Z + + // Check to see if the particle is registered using the PDG code + // TODO Add metastable state when supported by G4IonTable::GetIon() + Temp = static_cast(IonTable_->GetIon(Z, A)); + + // Removed in favor of the G4IonTable::GetIon() method + // // Register the particle if it does not exist + // if(Temp == NULL) + // { + // // Define the particle properties + // G4String Name = MakeIsotopeName(Product, MetaState); + // // Calculate the rest mass using a function already in Geant4 + // G4double Mass = G4NucleiProperties:: + // GetNuclearMass((double)A, (double)Z ); + // G4double Charge = Z*eplus; + // G4int BaryonNum = A; + // G4bool Stable = TRUE; + // + // // I am unsure about the following properties: + // // 2*Spin, Parity, C-conjugation, 2*Isospin, 2*Isospin3, G-parity. + // // Perhaps is would be a good idea to have a physicist familiar with + // // Geant4 nomenclature to review and correct these properties. + // Temp = new G4Ions ( + // // Name Mass Width Charge + // Name, Mass, 0.0, Charge, + // + // // 2*Spin Parity C-conjugation 2*Isospin + // 0, 1, 0, 0, + // + // // 2*Isospin3 G-parity Type Lepton number + // 0, 0, "nucleus", 0, + // + // // Baryon number PDG encoding Stable Lifetime + // BaryonNum, PDGCode, Stable, -1, + // + // // Decay table Shortlived SubType Anti_encoding + // NULL, FALSE, "generic", 0, + // + // // Excitation + // 0.0); + // Temp->SetPDGMagneticMoment(0.0); + // + // // Declare that there is no anti-particle + // Temp->SetAntiPDGEncoding(0); + // + // // Define the processes to use in transporting the particles + // std::ostringstream osAdd; + // osAdd << "/run/particle/addProcManager " << Name; + // G4String cmdAdd = osAdd.str(); + // + // // set /control/verbose 0 + // G4int tempVerboseLevel = G4UImanager::GetUIpointer()->GetVerboseLevel(); + // G4UImanager::GetUIpointer()->SetVerboseLevel(0); + // + // // issue /run/particle/addProcManage + // G4UImanager::GetUIpointer()->ApplyCommand(cmdAdd); + // + // // retrieve /control/verbose + // G4UImanager::GetUIpointer()->SetVerboseLevel(tempVerboseLevel); + // } + + G4FFG_DATA_FUNCTIONLEAVE__ + return Temp; } -G4String G4FissionProductYieldDist:: -MakeDirectoryName( void ) +G4String G4FissionProductYieldDist::MakeDirectoryName() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - // Generate the file location starting in the Geant4 data directory - std::ostringstream DirectoryName; - DirectoryName << G4FindDataDir("G4NEUTRONHPDATA") << G4FFGDefaultValues::ENDFFissionDataLocation; + // Generate the file location starting in the Geant4 data directory + std::ostringstream DirectoryName; + DirectoryName << G4FindDataDir("G4NEUTRONHPDATA") << G4FFGDefaultValues::ENDFFissionDataLocation; - // Return the directory structure -G4FFG_FUNCTIONLEAVE__ - return DirectoryName.str(); + // Return the directory structure + G4FFG_FUNCTIONLEAVE__ + return DirectoryName.str(); } -G4String G4FissionProductYieldDist:: -MakeFileName( G4int Isotope, - G4FFGEnumerations::MetaState MetaState ) +G4String G4FissionProductYieldDist::MakeFileName(G4int Isotope, + G4FFGEnumerations::MetaState MetaState) { -G4FFG_FUNCTIONENTER__ - + G4FFG_FUNCTIONENTER__ - // Create the unique identifying name for the particle - std::ostringstream FileName; + // Create the unique identifying name for the particle + std::ostringstream FileName; - // Determine if a leading 0 is needed (ZZZAAA or 0ZZAAA) - if(Isotope < 100000) - { - FileName << "0"; - } + // Determine if a leading 0 is needed (ZZZAAA or 0ZZAAA) + if (Isotope < 100000) { + FileName << "0"; + } - // Add the name of the element and the extension - FileName << MakeIsotopeName(Isotope, MetaState) << ".fpy"; + // Add the name of the element and the extension + FileName << MakeIsotopeName(Isotope, MetaState) << ".fpy"; -G4FFG_FUNCTIONLEAVE__ - return FileName.str(); + G4FFG_FUNCTIONLEAVE__ + return FileName.str(); } -G4DynamicParticle* G4FissionProductYieldDist:: -MakeG4DynamicParticle( G4ReactionProduct* ReactionProduct ) +G4DynamicParticle* +G4FissionProductYieldDist::MakeG4DynamicParticle(G4ReactionProduct* ReactionProduct) { -G4FFG_DATA_FUNCTIONENTER__ + G4FFG_DATA_FUNCTIONENTER__ - G4DynamicParticle* DynamicParticle = new G4DynamicParticle(ReactionProduct->GetDefinition(), ReactionProduct->GetMomentum()); + auto DynamicParticle = + new G4DynamicParticle(ReactionProduct->GetDefinition(), ReactionProduct->GetMomentum()); -G4FFG_DATA_FUNCTIONLEAVE__ - return DynamicParticle; + G4FFG_DATA_FUNCTIONLEAVE__ + return DynamicParticle; } -G4String G4FissionProductYieldDist:: -MakeIsotopeName( G4int Isotope, - G4FFGEnumerations::MetaState MetaState ) +G4String G4FissionProductYieldDist::MakeIsotopeName(G4int Isotope, + G4FFGEnumerations::MetaState MetaState) { -G4FFG_DATA_FUNCTIONENTER__ + G4FFG_DATA_FUNCTIONENTER__ - // Break Product down into its A and Z components - G4int A = Isotope % 1000; - G4int Z = (Isotope - A) / 1000; + // Break Product down into its A and Z components + G4int A = Isotope % 1000; + G4int Z = (Isotope - A) / 1000; - // Create the unique identifying name for the particle - std::ostringstream IsotopeName; + // Create the unique identifying name for the particle + std::ostringstream IsotopeName; - IsotopeName << Z << "_" << A; - - // If it is metastable then append "m" to the name - if(MetaState != G4FFGEnumerations::GROUND_STATE) - { - IsotopeName << "m"; - - // If it is a second isomeric state then append "2" to the name - if(MetaState == G4FFGEnumerations::META_2) - { - IsotopeName << "2"; - } + IsotopeName << Z << "_" << A; + + // If it is metastable then append "m" to the name + if (MetaState != G4FFGEnumerations::GROUND_STATE) { + IsotopeName << "m"; + + // If it is a second isomeric state then append "2" to the name + if (MetaState == G4FFGEnumerations::META_2) { + IsotopeName << "2"; } - // Add the name of the element and the extension - IsotopeName << "_" << ElementNames_->theString[Z - 1]; + } + // Add the name of the element and the extension + IsotopeName << "_" << ElementNames_->theString[Z - 1]; -G4FFG_DATA_FUNCTIONLEAVE__ - return IsotopeName.str(); + G4FFG_DATA_FUNCTIONLEAVE__ + return IsotopeName.str(); } -void G4FissionProductYieldDist:: -MakeTrees( void ) +void G4FissionProductYieldDist::MakeTrees() { -G4FFG_FUNCTIONENTER__ - - // Allocate the space - // We will make each tree a binary search - // The maximum number of iterations required to find a single fission product - // based on it's probability is defined by the following: - // x = number of fission products - // Trees = T(x) = ceil( ln(x) ) - // Rows/Tree = R(x) = ceil(( sqrt( (8 * x / T(x)) + 1) - 1) / 2) - // Maximum = M(x) = T(x) + R(x) - // Results: x => M(x) - // 10 5 - // 100 10 - // 1000 25 - // 10000 54 - // 100000 140 - TreeCount_ = (G4int)ceil((G4double)log((G4double)ENDFData_->G4GetNumberOfFissionProducts())); - Trees_ = new ProbabilityTree[TreeCount_]; - - // Initialize the range of each node - for(G4int i = 0; i < TreeCount_; i++) - { - Trees_[i].ProbabilityRangeEnd = new G4double[YieldEnergyGroups_]; - Trees_[i].Trunk = NULL; - Trees_[i].BranchCount = 0; - Trees_[i].IsEnd = FALSE; - } - // Mark the last tree as the ending tree - Trees_[TreeCount_ - 1].IsEnd = TRUE; + G4FFG_FUNCTIONENTER__ + + // Allocate the space + // We will make each tree a binary search + // The maximum number of iterations required to find a single fission product + // based on it's probability is defined by the following: + // x = number of fission products + // Trees = T(x) = ceil( ln(x) ) + // Rows/Tree = R(x) = ceil(( sqrt( (8 * x / T(x)) + 1) - 1) / 2) + // Maximum = M(x) = T(x) + R(x) + // Results: x => M(x) + // 10 5 + // 100 10 + // 1000 25 + // 10000 54 + // 100000 140 + TreeCount_ = (G4int)ceil((G4double)log((G4double)ENDFData_->G4GetNumberOfFissionProducts())); + Trees_ = new ProbabilityTree[TreeCount_]; + + // Initialize the range of each node + for (G4int i = 0; i < TreeCount_; i++) { + Trees_[i].ProbabilityRangeEnd = new G4double[YieldEnergyGroups_]; + Trees_[i].Trunk = nullptr; + Trees_[i].BranchCount = 0; + Trees_[i].IsEnd = FALSE; + } + // Mark the last tree as the ending tree + Trees_[TreeCount_ - 1].IsEnd = TRUE; -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -void G4FissionProductYieldDist:: -ReadProbabilities( void ) +void G4FissionProductYieldDist::ReadProbabilities() { -G4FFG_DATA_FUNCTIONENTER__ + G4FFG_DATA_FUNCTIONENTER__ - G4int ProductCount = ENDFData_->G4GetNumberOfFissionProducts(); - BranchCount_ = 0; - G4ArrayOps::Set(YieldEnergyGroups_, DataTotal_, 0.0); + G4int ProductCount = ENDFData_->G4GetNumberOfFissionProducts(); + BranchCount_ = 0; + G4ArrayOps::Set(YieldEnergyGroups_, DataTotal_, 0.0); - // Loop through all the products - for(G4int i = 0; i < ProductCount; i++) - { - // Acquire the data and sort it - SortProbability(ENDFData_->G4GetYield(i)); - } - - // Generate the true normalization factor, since round-off errors may result - // in non-singular normalization of the data files. Also, reset DataTotal_ - // since it is used by Renormalize() to set the probability segments. - G4ArrayOps::Divide(YieldEnergyGroups_, MaintainNormalizedData_, 1.0, DataTotal_); - G4ArrayOps::Set(YieldEnergyGroups_, DataTotal_, 0.0); + // Loop through all the products + for (G4int i = 0; i < ProductCount; i++) { + // Acquire the data and sort it + SortProbability(ENDFData_->G4GetYield(i)); + } - // Go through all the trees one at a time - for(G4int i = 0; i < TreeCount_; i++) - { - Renormalize(Trees_[i].Trunk); - // Set the max range of the tree to DataTotal - G4ArrayOps::Copy(YieldEnergyGroups_, Trees_[i].ProbabilityRangeEnd, DataTotal_); - } + // Generate the true normalization factor, since round-off errors may result + // in non-singular normalization of the data files. Also, reset DataTotal_ + // since it is used by Renormalize() to set the probability segments. + G4ArrayOps::Divide(YieldEnergyGroups_, MaintainNormalizedData_, 1.0, DataTotal_); + G4ArrayOps::Set(YieldEnergyGroups_, DataTotal_, 0.0); + + // Go through all the trees one at a time + for (G4int i = 0; i < TreeCount_; i++) { + Renormalize(Trees_[i].Trunk); + // Set the max range of the tree to DataTotal + G4ArrayOps::Copy(YieldEnergyGroups_, Trees_[i].ProbabilityRangeEnd, DataTotal_); + } -G4FFG_DATA_FUNCTIONLEAVE__ + G4FFG_DATA_FUNCTIONLEAVE__ } -void G4FissionProductYieldDist:: -Renormalize( ProbabilityBranch* Branch) +void G4FissionProductYieldDist::Renormalize(ProbabilityBranch* Branch) { -G4FFG_RECURSIVE_FUNCTIONENTER__ - - // Check to see if Branch exists. Branch will be a null pointer if it - // doesn't exist - if(Branch != NULL) - { - // Call the lower branch to set the probability segment first, since it - // supposed to have a lower probability segment that this node - Renormalize(Branch->Left); - - // Set this node as the next sequential probability segment - G4ArrayOps::Copy(YieldEnergyGroups_, Branch->ProbabilityRangeBottom, DataTotal_); - G4ArrayOps::Multiply(YieldEnergyGroups_, Branch->ProbabilityRangeTop, MaintainNormalizedData_); - G4ArrayOps::Add(YieldEnergyGroups_, Branch->ProbabilityRangeTop, DataTotal_); - G4ArrayOps::Copy(YieldEnergyGroups_, DataTotal_, Branch->ProbabilityRangeTop); - - // Now call the upper branch to set those probability segments - Renormalize(Branch->Right); - } + G4FFG_RECURSIVE_FUNCTIONENTER__ + + // Check to see if Branch exists. Branch will be a null pointer if it + // doesn't exist + if (Branch != nullptr) { + // Call the lower branch to set the probability segment first, since it + // supposed to have a lower probability segment that this node + Renormalize(Branch->Left); + + // Set this node as the next sequential probability segment + G4ArrayOps::Copy(YieldEnergyGroups_, Branch->ProbabilityRangeBottom, DataTotal_); + G4ArrayOps::Multiply(YieldEnergyGroups_, Branch->ProbabilityRangeTop, MaintainNormalizedData_); + G4ArrayOps::Add(YieldEnergyGroups_, Branch->ProbabilityRangeTop, DataTotal_); + G4ArrayOps::Copy(YieldEnergyGroups_, DataTotal_, Branch->ProbabilityRangeTop); + + // Now call the upper branch to set those probability segments + Renormalize(Branch->Right); + } -G4FFG_RECURSIVE_FUNCTIONLEAVE__ + G4FFG_RECURSIVE_FUNCTIONLEAVE__ } -void G4FissionProductYieldDist:: -SampleAlphaEnergies( std::vector< G4ReactionProduct* >* Alphas ) +void G4FissionProductYieldDist::SampleAlphaEnergies(std::vector* Alphas) { -G4FFG_FUNCTIONENTER__ - - // The condition of sampling more energy from the fission products than is - // alloted is statistically unfavorable, but it could still happen. The - // do-while loop prevents such an occurrence from happening - G4double MeanAlphaEnergy = 16.0; - G4double TotalAlphaEnergy; + G4FFG_FUNCTIONENTER__ - do - { - G4double AlphaEnergy; - TotalAlphaEnergy = 0; - - // Walk through the alpha particles one at a time and sample each's - // energy - for(unsigned int i = 0; i < Alphas->size(); i++) - { - AlphaEnergy = RandomEngine_->G4SampleGaussian(MeanAlphaEnergy, - 2.35, - G4FFGEnumerations::POSITIVE) * MeV; - // Assign the energy to the alpha particle - Alphas->at(i)->SetKineticEnergy(AlphaEnergy); - - // Add up the total amount of kinetic energy consumed. - TotalAlphaEnergy += AlphaEnergy; - } + // The condition of sampling more energy from the fission products than is + // alloted is statistically unfavorable, but it could still happen. The + // do-while loop prevents such an occurrence from happening + G4double MeanAlphaEnergy = 16.0; + G4double TotalAlphaEnergy; + + do { + G4double AlphaEnergy; + TotalAlphaEnergy = 0; + + // Walk through the alpha particles one at a time and sample each's + // energy + for (auto& Alpha : *Alphas) { + AlphaEnergy = + RandomEngine_->G4SampleGaussian(MeanAlphaEnergy, 2.35, G4FFGEnumerations::POSITIVE) * MeV; + // Assign the energy to the alpha particle + Alpha->SetKineticEnergy(AlphaEnergy); + + // Add up the total amount of kinetic energy consumed. + TotalAlphaEnergy += AlphaEnergy; + } - // If true, decrement the mean alpha energy by 0.1 and try again. - MeanAlphaEnergy -= 0.1; - } while(TotalAlphaEnergy >= RemainingEnergy_); // Loop checking, 11.05.2015, T. Koi + // If true, decrement the mean alpha energy by 0.1 and try again. + MeanAlphaEnergy -= 0.1; + } while (TotalAlphaEnergy >= RemainingEnergy_); // Loop checking, 11.05.2015, T. Koi - // Subtract the total amount of energy that was assigned. - RemainingEnergy_ -= TotalAlphaEnergy; + // Subtract the total amount of energy that was assigned. + RemainingEnergy_ -= TotalAlphaEnergy; -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -void G4FissionProductYieldDist:: -SampleGammaEnergies( std::vector< G4ReactionProduct* >* Gammas ) +void G4FissionProductYieldDist::SampleGammaEnergies(std::vector* Gammas) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - // Make sure that there is energy to assign to the gamma rays - if(RemainingEnergy_ != 0) + // Make sure that there is energy to assign to the gamma rays + if (RemainingEnergy_ != 0) { + G4double SampleEnergy; + + // Sample from RemainingEnergy until it is all gone. Also, + // RemainingEnergy should not be smaller than + // G4FFGDefaultValues::MeanGammaEnergy. This will prevent the + // sampling of a fractional portion of the Gaussian distribution + // in an attempt to find a new gamma ray energy. + G4int icounter = 0; + G4int icounter_max = 1024; + while (RemainingEnergy_ + >= G4FFGDefaultValues::MeanGammaEnergy) // Loop checking, 11.05.2015, T. Koi { - G4double SampleEnergy; - - // Sample from RemainingEnergy until it is all gone. Also, - // RemainingEnergy should not be smaller than - // G4FFGDefaultValues::MeanGammaEnergy. This will prevent the - // sampling of a fractional portion of the Gaussian distribution - // in an attempt to find a new gamma ray energy. - G4int icounter=0; - G4int icounter_max=1024; - while(RemainingEnergy_ >= G4FFGDefaultValues::MeanGammaEnergy ) // Loop checking, 11.05.2015, T. Koi - { - icounter++; - if ( icounter > icounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; - } - SampleEnergy = RandomEngine_-> - G4SampleGaussian(G4FFGDefaultValues::MeanGammaEnergy, 1.0 * MeV, G4FFGEnumerations::POSITIVE); - // Make sure that we didn't sample more energy than was available - if(SampleEnergy <= RemainingEnergy_) - { - // If this energy assignment would leave less energy than the - // 'intrinsic' minimal energy of a gamma ray then just assign - // all of the remaining energy - if(RemainingEnergy_ - SampleEnergy < 100 * keV) - { - SampleEnergy = RemainingEnergy_; - } - - // Create the new particle - Gammas->push_back(new G4ReactionProduct()); - - // Set the properties - Gammas->back()->SetDefinition(GammaDefinition_); - Gammas->back()->SetTotalEnergy(SampleEnergy); - - // Calculate how much is left - RemainingEnergy_ -= SampleEnergy; - } + icounter++; + if (icounter > icounter_max) { + G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " + << __FILE__ << "." << G4endl; + break; + } + SampleEnergy = RandomEngine_->G4SampleGaussian(G4FFGDefaultValues::MeanGammaEnergy, 1.0 * MeV, + G4FFGEnumerations::POSITIVE); + // Make sure that we didn't sample more energy than was available + if (SampleEnergy <= RemainingEnergy_) { + // If this energy assignment would leave less energy than the + // 'intrinsic' minimal energy of a gamma ray then just assign + // all of the remaining energy + if (RemainingEnergy_ - SampleEnergy < 100 * keV) { + SampleEnergy = RemainingEnergy_; } - // If there is anything left over, the energy must be above 100 keV but - // less than G4FFGDefaultValues::MeanGammaEnergy. Arbitrarily assign - // RemainingEnergy to a new particle - if(RemainingEnergy_ > 0) - { - SampleEnergy = RemainingEnergy_; - Gammas->push_back(new G4ReactionProduct()); + // Create the new particle + Gammas->push_back(new G4ReactionProduct()); - // Set the properties - Gammas->back()->SetDefinition(GammaDefinition_); - Gammas->back()->SetTotalEnergy(SampleEnergy); + // Set the properties + Gammas->back()->SetDefinition(GammaDefinition_); + Gammas->back()->SetTotalEnergy(SampleEnergy); - // Calculate how much is left - RemainingEnergy_ -= SampleEnergy; - } + // Calculate how much is left + RemainingEnergy_ -= SampleEnergy; + } } -G4FFG_FUNCTIONLEAVE__ + // If there is anything left over, the energy must be above 100 keV but + // less than G4FFGDefaultValues::MeanGammaEnergy. Arbitrarily assign + // RemainingEnergy to a new particle + if (RemainingEnergy_ > 0) { + SampleEnergy = RemainingEnergy_; + Gammas->push_back(new G4ReactionProduct()); + + // Set the properties + Gammas->back()->SetDefinition(GammaDefinition_); + Gammas->back()->SetTotalEnergy(SampleEnergy); + + // Calculate how much is left + RemainingEnergy_ -= SampleEnergy; + } + } + + G4FFG_FUNCTIONLEAVE__ } -void G4FissionProductYieldDist:: -SampleNeutronEnergies( std::vector< G4ReactionProduct* >* Neutrons ) +void G4FissionProductYieldDist::SampleNeutronEnergies(std::vector* Neutrons) { -G4FFG_FUNCTIONENTER__ - - // The condition of sampling more energy from the fission products than is - // alloted is statistically unfavorable, but it could still happen. The - // do-while loop prevents such an occurrence from happening - G4double TotalNeutronEnergy=0.; - G4double NeutronEnergy=0.; - - // Make sure that we don't sample more energy than is available - G4int icounter=0; - G4int icounter_max=1024; - do - { - icounter++; - if ( icounter > icounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; - } - TotalNeutronEnergy = 0; - - // Walk through the neutrons one at a time and sample the energies. - // The gamma rays have not yet been sampled, so the last neutron will - // have a NULL value for NextFragment - for(unsigned int i = 0; i < Neutrons->size(); i++) - { - // Assign the energy to the neutron - NeutronEnergy = RandomEngine_->G4SampleWatt(Isotope_, Cause_, IncidentEnergy_); - Neutrons->at(i)->SetKineticEnergy(NeutronEnergy); - - // Add up the total amount of kinetic energy consumed. - TotalNeutronEnergy +=NeutronEnergy; - } - } while (TotalNeutronEnergy > RemainingEnergy_); // Loop checking, 11.05.2015, T. Koi + G4FFG_FUNCTIONENTER__ + + // The condition of sampling more energy from the fission products than is + // alloted is statistically unfavorable, but it could still happen. The + // do-while loop prevents such an occurrence from happening + G4double TotalNeutronEnergy = 0.; + G4double NeutronEnergy = 0.; + + // Make sure that we don't sample more energy than is available + G4int icounter = 0; + G4int icounter_max = 1024; + do { + icounter++; + if (icounter > icounter_max) { + G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " + << __FILE__ << "." << G4endl; + break; + } + TotalNeutronEnergy = 0; + + // Walk through the neutrons one at a time and sample the energies. + // The gamma rays have not yet been sampled, so the last neutron will + // have a NULL value for NextFragment + for (auto& Neutron : *Neutrons) { + // Assign the energy to the neutron + NeutronEnergy = RandomEngine_->G4SampleWatt(Isotope_, Cause_, IncidentEnergy_); + Neutron->SetKineticEnergy(NeutronEnergy); + + // Add up the total amount of kinetic energy consumed. + TotalNeutronEnergy += NeutronEnergy; + } + } while (TotalNeutronEnergy > RemainingEnergy_); // Loop checking, 11.05.2015, T. Koi - // Subtract the total amount of energy that was assigned. - RemainingEnergy_ -= TotalNeutronEnergy; + // Subtract the total amount of energy that was assigned. + RemainingEnergy_ -= TotalNeutronEnergy; -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -void G4FissionProductYieldDist:: -SetNubar( void ) +void G4FissionProductYieldDist::SetNubar() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - G4int* WhichNubar; - G4int* NubarWidth; - G4double XFactor, BFactor; + G4int* WhichNubar; + G4int* NubarWidth; + G4double XFactor, BFactor; - if(Cause_ == G4FFGEnumerations::SPONTANEOUS) - { - WhichNubar = const_cast(&SpontaneousNubar_[0][0]); - NubarWidth = const_cast(&SpontaneousNubarWidth_[0][0]); - } else - { - WhichNubar = const_cast(&NeutronInducedNubar_[0][0]); - NubarWidth = const_cast(&NeutronInducedNubarWidth_[0][0]); - } + if (Cause_ == G4FFGEnumerations::SPONTANEOUS) { + WhichNubar = const_cast(&SpontaneousNubar_[0][0]); + NubarWidth = const_cast(&SpontaneousNubarWidth_[0][0]); + } + else { + WhichNubar = const_cast(&NeutronInducedNubar_[0][0]); + NubarWidth = const_cast(&NeutronInducedNubarWidth_[0][0]); + } - XFactor = G4Pow::GetInstance()->powA(10.0, -13.0); - BFactor = G4Pow::GetInstance()->powA(10.0, -4.0); - Nubar_ = *(WhichNubar + 1) * IncidentEnergy_ * XFactor - + *(WhichNubar + 2) * BFactor; - while(*WhichNubar != -1) // Loop checking, 11.05.2015, T. Koi - { - if(*WhichNubar == Isotope_) - { - Nubar_ = *(WhichNubar + 1) * IncidentEnergy_ * XFactor - + *(WhichNubar + 2) * BFactor; + XFactor = G4Pow::GetInstance()->powA(10.0, -13.0); + BFactor = G4Pow::GetInstance()->powA(10.0, -4.0); + Nubar_ = *(WhichNubar + 1) * IncidentEnergy_ * XFactor + *(WhichNubar + 2) * BFactor; + while (*WhichNubar != -1) // Loop checking, 11.05.2015, T. Koi + { + if (*WhichNubar == Isotope_) { + Nubar_ = *(WhichNubar + 1) * IncidentEnergy_ * XFactor + *(WhichNubar + 2) * BFactor; - break; - } - WhichNubar += 3; + break; } + WhichNubar += 3; + } - XFactor = G4Pow::GetInstance()->powN((G4double)10, -6); - NubarWidth_ = *(NubarWidth + 1) * XFactor; - while(*WhichNubar != -1) // Loop checking, 11.05.2015, T. Koi - { - if(*WhichNubar == Isotope_) - { - NubarWidth_ = *(NubarWidth + 1) * XFactor; + XFactor = G4Pow::GetInstance()->powN((G4double)10, -6); + NubarWidth_ = *(NubarWidth + 1) * XFactor; + while (*WhichNubar != -1) // Loop checking, 11.05.2015, T. Koi + { + if (*WhichNubar == Isotope_) { + NubarWidth_ = *(NubarWidth + 1) * XFactor; - break; - } - WhichNubar += 2; + break; } + WhichNubar += 2; + } -G4FFG_FUNCTIONLEAVE__ + G4FFG_FUNCTIONLEAVE__ } -void G4FissionProductYieldDist:: -SortProbability( G4ENDFYieldDataContainer* YieldData ) +void G4FissionProductYieldDist::SortProbability(G4ENDFYieldDataContainer* YieldData) { -G4FFG_DATA_FUNCTIONENTER__ - - // Initialize the new branch - ProbabilityBranch* NewBranch = new ProbabilityBranch; - NewBranch->IncidentEnergiesCount = YieldEnergyGroups_; - NewBranch->Left = NULL; - NewBranch->Right = NULL; - NewBranch->Particle = GetParticleDefinition(YieldData->GetProduct(), YieldData->GetMetaState()); - NewBranch->IncidentEnergies = new G4double[YieldEnergyGroups_]; - NewBranch->ProbabilityRangeTop = new G4double[YieldEnergyGroups_]; - NewBranch->ProbabilityRangeBottom = new G4double[YieldEnergyGroups_]; - G4ArrayOps::Copy(YieldEnergyGroups_, NewBranch->ProbabilityRangeTop, YieldData->GetYieldProbability()); - G4ArrayOps::Copy(YieldEnergyGroups_, NewBranch->IncidentEnergies, YieldEnergies_); - G4ArrayOps::Add(YieldEnergyGroups_, DataTotal_, YieldData->GetYieldProbability()); - - // Check to see if the this is the smallest/largest particle. First, check - // to see if this is the first particle in the system - if(SmallestZ_ == NULL) - { - SmallestZ_ = SmallestA_ = LargestZ_ = LargestA_ = NewBranch->Particle; - } else - { - G4bool IsSmallerZ = NewBranch->Particle->GetAtomicNumber() < SmallestZ_->GetAtomicNumber(); - G4bool IsSmallerA = NewBranch->Particle->GetAtomicMass() < SmallestA_->GetAtomicMass(); - G4bool IsLargerZ = NewBranch->Particle->GetAtomicNumber() > LargestZ_->GetAtomicNumber(); - G4bool IsLargerA = NewBranch->Particle->GetAtomicMass() > LargestA_->GetAtomicMass(); - - if(IsSmallerZ) - { - SmallestZ_ = NewBranch->Particle; - } - - if(IsLargerZ) - { - LargestA_ = NewBranch->Particle; - } - - if(IsSmallerA) - { - SmallestA_ = NewBranch->Particle; - } - - if(IsLargerA) - { - LargestA_ = NewBranch->Particle; - } + G4FFG_DATA_FUNCTIONENTER__ + + // Initialize the new branch + auto NewBranch = new ProbabilityBranch; + NewBranch->IncidentEnergiesCount = YieldEnergyGroups_; + NewBranch->Left = nullptr; + NewBranch->Right = nullptr; + NewBranch->Particle = GetParticleDefinition(YieldData->GetProduct(), YieldData->GetMetaState()); + NewBranch->IncidentEnergies = new G4double[YieldEnergyGroups_]; + NewBranch->ProbabilityRangeTop = new G4double[YieldEnergyGroups_]; + NewBranch->ProbabilityRangeBottom = new G4double[YieldEnergyGroups_]; + G4ArrayOps::Copy(YieldEnergyGroups_, NewBranch->ProbabilityRangeTop, + YieldData->GetYieldProbability()); + G4ArrayOps::Copy(YieldEnergyGroups_, NewBranch->IncidentEnergies, YieldEnergies_); + G4ArrayOps::Add(YieldEnergyGroups_, DataTotal_, YieldData->GetYieldProbability()); + + // Check to see if the this is the smallest/largest particle. First, check + // to see if this is the first particle in the system + if (SmallestZ_ == nullptr) { + SmallestZ_ = SmallestA_ = LargestZ_ = LargestA_ = NewBranch->Particle; + } + else { + G4bool IsSmallerZ = NewBranch->Particle->GetAtomicNumber() < SmallestZ_->GetAtomicNumber(); + G4bool IsSmallerA = NewBranch->Particle->GetAtomicMass() < SmallestA_->GetAtomicMass(); + G4bool IsLargerZ = NewBranch->Particle->GetAtomicNumber() > LargestZ_->GetAtomicNumber(); + G4bool IsLargerA = NewBranch->Particle->GetAtomicMass() > LargestA_->GetAtomicMass(); + + if (IsSmallerZ) { + SmallestZ_ = NewBranch->Particle; } - // Place the new branch - // Determine which tree the new branch goes into - G4int WhichTree = (G4int)floor((G4double)(BranchCount_ % TreeCount_)); - ProbabilityBranch** WhichBranch = &(Trees_[WhichTree].Trunk); - Trees_[WhichTree].BranchCount++; - - // Search for the position - // Determine where the branch goes - G4int BranchPosition = (G4int)floor((G4double)(BranchCount_ / TreeCount_)) + 1; + if (IsLargerZ) { + LargestA_ = NewBranch->Particle; + } - // Run through the tree until the end branch is reached - while(BranchPosition > 1) // Loop checking, 11.05.2015, T. Koi - { - if(BranchPosition & 1) - { - // If the 1's bit is on then move to the next 'right' branch - WhichBranch = &((*WhichBranch)->Right); - } else - { - // If the 1's bit is off then move to the next 'down' branch - WhichBranch = &((*WhichBranch)->Left); - } - - BranchPosition >>= 1; + if (IsSmallerA) { + SmallestA_ = NewBranch->Particle; } - *WhichBranch = NewBranch; - BranchCount_++; + if (IsLargerA) { + LargestA_ = NewBranch->Particle; + } + } -G4FFG_DATA_FUNCTIONLEAVE__ -} + // Place the new branch + // Determine which tree the new branch goes into + auto WhichTree = (G4int)floor((G4double)(BranchCount_ % TreeCount_)); + ProbabilityBranch** WhichBranch = &(Trees_[WhichTree].Trunk); + Trees_[WhichTree].BranchCount++; -G4FissionProductYieldDist:: -~G4FissionProductYieldDist( void ) -{ -G4FFG_FUNCTIONENTER__ + // Search for the position + // Determine where the branch goes + G4int BranchPosition = (G4int)floor((G4double)(BranchCount_ / TreeCount_)) + 1; - // Burn each tree, one by one - G4int WhichTree = 0; - while(Trees_[WhichTree].IsEnd != TRUE) // Loop checking, 11.05.2015, T. Koi - { - BurnTree(Trees_[WhichTree].Trunk); - delete Trees_[WhichTree].Trunk; - delete[] Trees_[WhichTree].ProbabilityRangeEnd; - WhichTree++; + // Run through the tree until the end branch is reached + while (BranchPosition > 1) // Loop checking, 11.05.2015, T. Koi + { + if ((BranchPosition & 1) != 0) { + // If the 1's bit is on then move to the next 'right' branch + WhichBranch = &((*WhichBranch)->Right); + } + else { + // If the 1's bit is off then move to the next 'down' branch + WhichBranch = &((*WhichBranch)->Left); } - // Delete each dynamically allocated variable - delete ENDFData_; - delete[] Trees_; - delete[] DataTotal_; - delete[] MaintainNormalizedData_; - delete ElementNames_; - delete RandomEngine_; + BranchPosition >>= 1; + } + + *WhichBranch = NewBranch; + BranchCount_++; -G4FFG_FUNCTIONLEAVE__ + G4FFG_DATA_FUNCTIONLEAVE__ } -void G4FissionProductYieldDist:: -BurnTree( ProbabilityBranch* Branch ) +G4FissionProductYieldDist::~G4FissionProductYieldDist() { -G4FFG_RECURSIVE_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - // Check to see it Branch exists. Branch will be a null pointer if it - // doesn't exist - if(Branch) - { - // Burn down before you burn up - BurnTree(Branch->Left); - delete Branch->Left; - BurnTree(Branch->Right); - delete Branch->Right; - - delete[] Branch->IncidentEnergies; - delete[] Branch->ProbabilityRangeTop; - delete[] Branch->ProbabilityRangeBottom; - } + // Burn each tree, one by one + G4int WhichTree = 0; + while (static_cast(Trees_[WhichTree].IsEnd) != TRUE) // Loop checking, 11.05.2015, T. Koi + { + BurnTree(Trees_[WhichTree].Trunk); + delete Trees_[WhichTree].Trunk; + delete[] Trees_[WhichTree].ProbabilityRangeEnd; + WhichTree++; + } -G4FFG_RECURSIVE_FUNCTIONLEAVE__ + // Delete each dynamically allocated variable + delete ENDFData_; + delete[] Trees_; + delete[] DataTotal_; + delete[] MaintainNormalizedData_; + delete ElementNames_; + delete RandomEngine_; + + G4FFG_FUNCTIONLEAVE__ } +void G4FissionProductYieldDist::BurnTree(ProbabilityBranch* Branch) +{ + G4FFG_RECURSIVE_FUNCTIONENTER__ + + // Check to see it Branch exists. Branch will be a null pointer if it + // doesn't exist + if (Branch != nullptr) { + // Burn down before you burn up + BurnTree(Branch->Left); + delete Branch->Left; + BurnTree(Branch->Right); + delete Branch->Right; + + delete[] Branch->IncidentEnergies; + delete[] Branch->ProbabilityRangeTop; + delete[] Branch->ProbabilityRangeBottom; + } + + G4FFG_RECURSIVE_FUNCTIONLEAVE__ +} diff --git a/source/processes/hadronic/models/particle_hp/src/G4InterpolationManager.cc b/source/processes/hadronic/models/particle_hp/src/G4InterpolationManager.cc index 8c95559adfa..38cf472ce30 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4InterpolationManager.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4InterpolationManager.cc @@ -28,107 +28,104 @@ // A prototype of the low energy neutron transport model. // #include "G4InterpolationManager.hh" + #include "G4HadronicException.hh" - G4InterpolationScheme G4InterpolationManager::MakeScheme(G4int it) - { - G4InterpolationScheme result(LINLIN); - switch(it) - { - case 1: - result = HISTO; - break; - case 2: - result = LINLIN; - break; - case 3: - result = LINLOG; - break; - case 4: - result = LOGLIN; - break; - case 5: - result = LOGLOG; - break; - case 11: - result = CHISTO; - break; - case 12: - result = CLINLIN; - break; - case 13: - result = CLINLOG; - break; - case 14: - result = CLOGLIN; - break; - case 15: - result = CLOGLOG; - break; - case 21: - result = UHISTO; - break; - case 22: - result = ULINLIN; - break; - case 23: - result = ULINLOG; - break; - case 24: - result = ULOGLIN; - break; - case 25: - result = ULOGLOG; - break; - default: - throw G4HadronicException(__FILE__, __LINE__, "G4InterpolationManager: unknown interpolation scheme"); - break; - } - return result; - } +G4InterpolationScheme G4InterpolationManager::MakeScheme(G4int it) +{ + G4InterpolationScheme result(LINLIN); + switch (it) { + case 1: + result = HISTO; + break; + case 2: + result = LINLIN; + break; + case 3: + result = LINLOG; + break; + case 4: + result = LOGLIN; + break; + case 5: + result = LOGLOG; + break; + case 11: + result = CHISTO; + break; + case 12: + result = CLINLIN; + break; + case 13: + result = CLINLOG; + break; + case 14: + result = CLOGLIN; + break; + case 15: + result = CLOGLOG; + break; + case 21: + result = UHISTO; + break; + case 22: + result = ULINLIN; + break; + case 23: + result = ULINLOG; + break; + case 24: + result = ULOGLIN; + break; + case 25: + result = ULOGLOG; + break; + default: + throw G4HadronicException(__FILE__, __LINE__, + "G4InterpolationManager: unknown interpolation scheme"); + break; + } + return result; +} - void G4InterpolationManager::AppendScheme(G4int aPoint, const G4InterpolationScheme & aScheme) - { - if(aPoint!=nEntries) - { - G4cout <<"G4InterpolationManager::AppendScheme - "<GetMomentum()+p2->GetMomentum(); - CM.SetMomentum(TotalMomentumLAB); - - const G4double TotalEnergyLAB = p1->GetTotalEnergy()+p2->GetTotalEnergy(); - CM.SetTotalEnergy(TotalEnergyLAB); - - CM.SetMass(std::sqrt(TotalEnergyLAB*TotalEnergyLAB-TotalMomentumLAB*TotalMomentumLAB)); - - // Transforming primary particles from laboratory to center of mass system. - p1->Lorentz(*p1, CM); - p2->Lorentz(*p2, CM); - - TotalEnergyCM = p1->GetTotalEnergy()+p2->GetTotalEnergy(); - - const G4double m4 = (p1->GetMass()+p2->GetMass())-(p3->GetMass()+Q); // Mass of the residual nucleus in the excited state (not in the ground state). - p4->SetMass(m4); - } - else // If it is a decay reaction... - { - const G4ThreeVector TotalMomentumLAB = p1->GetMomentum(); - CM.SetMomentum(TotalMomentumLAB); - - const G4double TotalEnergyLAB = p1->GetTotalEnergy(); - CM.SetTotalEnergy(TotalEnergyLAB); - - CM.SetMass(std::sqrt(TotalEnergyLAB*TotalEnergyLAB-TotalMomentumLAB*TotalMomentumLAB)); - - // Transforming primary particles from laboratory to center of mass system (not really necessary in this case). - p1->Lorentz(*p1, CM); - - const G4double m4 = p1->GetMass()-(p3->GetMass()+Q); // Mass of the residual nucleus in the excited state (not in the ground state). - p4->SetMass(m4); - - TotalEnergyCM = p1->GetTotalEnergy(); - } - - // Calculating momentum and total energy of the reaction products. - - const G4ThreeVector p1unit = p1->GetMomentum().unit(); - - G4RotationMatrix rot(std::acos(p1unit*G4ThreeVector(0., 1., 0.)), std::acos(p1unit*G4ThreeVector(0., 0., 1.)), 0.); - rot.inverse(); - - const G4double theta = std::acos(costhcm3); - const G4double phi = twopi*G4UniformRand(); - - const G4double Energy3CM = (std::pow(TotalEnergyCM, 2.)+std::pow(p3->GetMass(), 2.)-std::pow(p4->GetMass(), 2.))/(2.*TotalEnergyCM); - p3->SetTotalEnergy(Energy3CM); - - const G4double Momentum3CM = std::sqrt(std::pow(Energy3CM, 2.)-std::pow(p3->GetMass(), 2.)); - p3->SetMomentum(rot*G4ThreeVector(Momentum3CM*std::sin(theta)*std::cos(phi), Momentum3CM*std::sin(theta)*std::sin(phi), Momentum3CM*costhcm3)); - - const G4double Energy4CM = TotalEnergyCM-Energy3CM; - p4->SetTotalEnergy(Energy4CM); - - const G4double Momentum4CM = std::sqrt(std::pow(Energy4CM, 2.)-std::pow(p4->GetMass(), 2.)); - p4->SetMomentum(-Momentum4CM*p3->GetMomentum().unit()); - - // Transforming reaction products from center of mass to laboratory system. - p3->Lorentz(*p3, -1.*CM); - p4->Lorentz(*p4, -1.*CM); - } + {0.000, 2839., 4027., 4951., 5736., 6437., 7074., 7671., 8230., 8765., 9273., + 9767., 10241., 10703., 11152., 11595., 12026., 12453., 12871., 13285., 13697., 14102., + 14507., 14909., 15308., 15711., 16110., 16509., 16911., 17316., 17721., 18133., 18547., + 18965., 19393., 19823., 20266., 20715., 21177., 21651., 22145., 22654., 23188., 23747., + 24344., 24981., 25682., 26467., 27391., 28579., 31416.}, /* En=5700 keV */ + {0.000, 1771., 2528., 3129., 3653., 4128., 4574., 4998., 5403., 5802., 6192., + 6578., 6961., 7345., 7725., 8108., 8494., 8887., 9280., 9676., 10078., 10483., + 10891., 11306., 11721., 12142., 12563., 12987., 13411., 13841., 14272., 14705., 15142., + 15585., 16034., 16490., 16958., 17438., 17935., 18453., 18994., 19572., 20187., 20857., + 21595., 22424., 23373., 24482., 25820., 27539., 31416.}, /* En=8000 keV */ + {0.000, 3518., 4863., 5805., 6540., 7143., 7665., 8121., 8535., 8912., 9261., + 9588., 9896., 10191., 10470., 10744., 11004., 11259., 11507., 11749., 11988., 12223., + 12456., 12685., 12915., 13144., 13373., 13603., 13832., 14064., 14300., 14539., 14784., + 15032., 15286., 15547., 15821., 16100., 16399., 16710., 17043., 17401., 17790., 18221., + 18711., 19283., 19980., 20897., 22251., 24554., 31416.}, /* En=8640 keV */ + {0.000, 2287., 3364., 4319., 5277., 6327., 7536., 8868., 10043., 10964., 11696., + 12305., 12839., 13317., 13757., 14168., 14558., 14931., 15293., 15645., 15993., 16339., + 16681., 17024., 17372., 17724., 18086., 18453., 18833., 19226., 19638., 20065., 20511., + 20976., 21463., 21965., 22481., 23005., 23527., 24048., 24560., 25069., 25569., 26068., + 26568., 27080., 27614., 28183., 28820., 29612., 31416.}, /* En=8990 keV */ + {0.000, 1690., 2456., 3097., 3697., 4294., 4919., 5614., 6433., 7517., 9076., + 10722., 11906., 12795., 13515., 14134., 14686., 15189., 15654., 16094., 16515., 16920., + 17313., 17699., 18082., 18463., 18849., 19239., 19638., 20049., 20480., 20932., 21406., + 21912., 22446., 23002., 23571., 24133., 24677., 25195., 25682., 26147., 26590., 27023., + 27451., 27878., 28321., 28789., 29314., 29955., 31416.}, /* En=9220 keV */ + {0.000, 1674., 2434., 3078., 3685., 4297., 4951., 5695., 6619., 7913., 9597., + 11014., 12069., 12918., 13640., 14278., 14853., 15378., 15865., 16323., 16757., 17171., + 17574., 17966., 18353., 18733., 19116., 19502., 19892., 20294., 20712., 21146., 21601., + 22085., 22591., 23122., 23665., 24212., 24743., 25248., 25735., 26194., 26637., 27067., + 27492., 27919., 28355., 28820., 29336., 29973., 31416.}, /* En=9410 keV */ + {0.000, 2302., 3245., 3967., 4577., 5117., 5617., 6085., 6534., 6971., 7401., + 7838., 8278., 8739., 9229., 9767., 10382., 11140., 12186., 13637., 14818., 15604., + 16198., 16688., 17121., 17514., 17881., 18230., 18569., 18902., 19232., 19568., 19911., + 20269., 20646., 21051., 21497., 22009., 22619., 23364., 24253., 25148., 25921., 26571., + 27146., 27677., 28189., 28710., 29267., 29936., 31416.}, /* En=9830 keV */ + {0.000, 2195., 2934., 3458., 3879., 4244., 4567., 4866., 5142., 5406., 5658., + 5899., 6138., 6371., 6600., 6832., 7062., 7291., 7527., 7766., 8011., 8265., + 8529., 8809., 9104., 9424., 9773., 10159., 10602., 11124., 11762., 12572., 13643., + 15060., 16801., 18312., 19352., 20140., 20794., 21378., 21925., 22449., 22971., 23505., + 24067., 24674., 25355., 26153., 27137., 28443., 31416.}, /* En=10400 keV */ + {0.000, 1712., 2406., 2937., 3380., 3773., 4134., 4470., 4787., 5095., 5394., + 5689., 5978., 6270., 6565., 6864., 7175., 7495., 7831., 8190., 8579., 9003., + 9484., 10034., 10675., 11422., 12258., 13147., 14055., 14994., 15996., 17077., 18164., + 19138., 19971., 20696., 21353., 21965., 22553., 23128., 23703., 24281., 24865., 25462., + 26068., 26684., 27316., 27972., 28689., 29543., 31416.}, /* En=10800 keV */ + {0.000, 1853., 2651., 3289., 3851., 4366., 4853., 5324., 5786., 6245., 6707., + 7172., 7646., 8139., 8645., 9179., 9735., 10326., 10945., 11592., 12261., 12943., + 13621., 14287., 14928., 15544., 16128., 16691., 17228., 17746., 18249., 18736., 19213., + 19682., 20143., 20602., 21061., 21523., 21984., 22452., 22933., 23423., 23929., 24457., + 25013., 25603., 26247., 26964., 27803., 28874., 31416.}, /* En=11250 keV */ + {0.000, 1959., 2770., 3397., 3934., 4417., 4866., 5294., 5709., 6118., 6529., + 6948., 7382., 7840., 8333., 8876., 9484., 10167., 10902., 11629., 12292., 12877., + 13398., 13871., 14309., 14725., 15125., 15517., 15906., 16298., 16697., 17109., 17540., + 17992., 18473., 18982., 19519., 20077., 20646., 21217., 21783., 22344., 22906., 23477., + 24069., 24699., 25391., 26185., 27146., 28422., 31416.}, /* En=11460 keV */ + {0.000, 2290., 3391., 4447., 5824., 8351., 9448., 10077., 10553., 10952., 11306., + 11630., 11935., 12227., 12510., 12789., 13066., 13344., 13628., 13918., 14220., 14538., + 14875., 15239., 15637., 16077., 16565., 17101., 17671., 18251., 18820., 19368., 19897., + 20413., 20927., 21449., 21989., 22558., 23162., 23802., 24459., 25110., 25731., 26317., + 26873., 27410., 27944., 28493., 29091., 29810., 31416.}, /* En=11870 keV */ + {0.000, 2119., 3072., 3874., 4627., 5378., 6155., 6966., 7786., 8568., 9281., + 9921., 10501., 11034., 11531., 12002., 12452., 12886., 13306., 13715., 14114., 14504., + 14888., 15266., 15641., 16013., 16386., 16761., 17142., 17534., 17940., 18367., 18821., + 19312., 19849., 20438., 21072., 21724., 22360., 22957., 23511., 24030., 24525., 25008., + 25491., 25987., 26514., 27098., 27791., 28730., 31416.}, /* En=12140 keV */ + {0.000, 2425., 3423., 4211., 4909., 5563., 6200., 6829., 7455., 8070., 8664., + 9226., 9751., 10239., 10694., 11120., 11522., 11904., 12271., 12625., 12969., 13305., + 13636., 13962., 14287., 14610., 14934., 15261., 15591., 15928., 16273., 16630., 17002., + 17393., 17810., 18263., 18764., 19330., 19985., 20742., 21575., 22399., 23153., 23836., + 24471., 25085., 25704., 26365., 27125., 28138., 31416.}, /* En=12320 keV */ + {0.000, 2661., 3692., 4487., 5182., 5829., 6457., 7081., 7706., 8329., 8933., + 9504., 10030., 10509., 10946., 11346., 11717., 12063., 12390., 12701., 13000., 13289., + 13570., 13846., 14118., 14388., 14658., 14929., 15203., 15482., 15767., 16062., 16370., + 16694., 17041., 17417., 17834., 18311., 18879., 19596., 20545., 21666., 22662., 23468., + 24158., 24791., 25408., 26049., 26769., 27705., 31416.}, /* En=12570 keV */ + {0.000, 1941., 2896., 3780., 4713., 5731., 6720., 7532., 8172., 8693., 9137., + 9528., 9880., 10204., 10506., 10792., 11064., 11325., 11578., 11824., 12064., 12301., + 12534., 12766., 12997., 13227., 13458., 13691., 13926., 14165., 14409., 14659., 14916., + 15182., 15461., 15753., 16064., 16399., 16765., 17175., 17647., 18217., 18962., 20057., + 21618., 23016., 24127., 25137., 26190., 27504., 31416.}, /* En=12940 keV */ + {0.000, 2028., 2996., 3875., 4801., 5899., 7158., 8182., 8905., 9458., 9914., + 10310., 10665., 10992., 11298., 11588., 11868., 12138., 12403., 12664., 12922., 13179., + 13436., 13695., 13957., 14223., 14494., 14772., 15057., 15352., 15658., 15977., 16310., + 16660., 17031., 17425., 17848., 18305., 18805., 19358., 19977., 20675., 21451., 22281., + 23121., 23943., 24754., 25586., 26507., 27691., 31416.}, /* En=13420 keV */ + {0.000, 2099., 3016., 3762., 4437., 5088., 5747., 6450., 7233., 8116., 9014., + 9779., 10388., 10886., 11312., 11690., 12034., 12354., 12657., 12948., 13231., 13509., + 13784., 14060., 14337., 14619., 14908., 15206., 15516., 15842., 16187., 16554., 16950., + 17378., 17846., 18361., 18932., 19572., 20296., 21115., 22008., 22896., 23707., 24434., + 25101., 25740., 26380., 27056., 27825., 28822., 31416.}, /* En=13760 keV */ + {0.000, 2216., 3042., 3663., 4192., 4675., 5137., 5595., 6065., 6565., 7121., + 7768., 8547., 9421., 10221., 10870., 11403., 11859., 12264., 12634., 12980., 13309., + 13626., 13935., 14240., 14543., 14846., 15152., 15463., 15783., 16113., 16456., 16817., + 17199., 17610., 18056., 18549., 19104., 19743., 20491., 21350., 22257., 23110., 23873., + 24563., 25214., 25858., 26532., 27296., 28301., 31416.}, /* En=14020 keV */ + {0.000, 2249., 3077., 3698., 4228., 4711., 5172., 5628., 6094., 6586., 7123., + 7731., 8436., 9232., 10033., 10745., 11353., 11879., 12348., 12776., 13175., 13553., + 13916., 14268., 14613., 14955., 15296., 15639., 15986., 16342., 16709., 17090., 17492., + 17919., 18379., 18881., 19436., 20053., 20732., 21456., 22190., 22904., 23585., 24235., + 24868., 25501., 26155., 26860., 27672., 28727., 31416.}, /* En=14200 keV */ + {0.000, 2206., 3020., 3628., 4143., 4607., 5043., 5466., 5884., 6307., 6745., + 7205., 7698., 8237., 8833., 9491., 10201., 10929., 11634., 12293., 12903., 13472., + 14009., 14525., 15026., 15519., 16009., 16500., 16995., 17496., 18005., 18524., 19053., + 19590., 20134., 20681., 21225., 21762., 22289., 22805., 23314., 23821., 24333., 24858., + 25408., 25997., 26643., 27368., 28202., 29223., 31416.}, /* En=14440 keV */ + {0.000, 2489., 3349., 3983., 4517., 4998., 5447., 5879., 6304., 6729., 7160., + 7600., 8054., 8523., 9008., 9508., 10019., 10539., 11065., 11593., 12124., 12657., + 13192., 13731., 14275., 14826., 15388., 15964., 16559., 17177., 17821., 18488., 19164., + 19832., 20472., 21076., 21644., 22180., 22692., 23187., 23673., 24156., 24643., 25141., + 25657., 26203., 26790., 27441., 28196., 29158., 31416.}, /* En=14620 keV */ + {0.000, 2945., 3913., 4642., 5270., 5848., 6400., 6937., 7468., 7992., 8510., + 9019., 9517., 10001., 10472., 10930., 11375., 11811., 12238., 12658., 13073., 13486., + 13898., 14312., 14731., 15159., 15600., 16059., 16544., 17063., 17627., 18245., 18921., + 19641., 20371., 21073., 21726., 22329., 22888., 23413., 23913., 24397., 24871., 25344., + 25825., 26323., 26854., 27442., 28132., 29045., 31416.}, /* En=14820 keV */ + {0.000, 3308., 4355., 5183., 5930., 6638., 7311., 7938., 8510., 9030., 9504., + 9941., 10350., 10738., 11111., 11474., 11831., 12184., 12538., 12894., 13255., 13622., + 13996., 14380., 14773., 15177., 15594., 16024., 16472., 16941., 17437., 17970., 18549., + 19186., 19878., 20604., 21317., 21982., 22593., 23158., 23691., 24203., 24706., 25211., + 25728., 26270., 26850., 27493., 28240., 29191., 31416.}, /* En=15050 keV */ + {0.000, 2774., 3718., 4452., 5121., 5796., 6548., 7503., 8803., 9927., 10670., + 11225., 11684., 12085., 12450., 12790., 13113., 13425., 13729., 14030., 14329., 14629., + 14933., 15242., 15558., 15885., 16223., 16575., 16943., 17330., 17738., 18170., 18628., + 19115., 19633., 20184., 20765., 21375., 22002., 22634., 23260., 23871., 24467., 25050., + 25629., 26216., 26825., 27482., 28229., 29174., 31416.}, /* En=15660 keV */ + {0.000, 2572., 3380., 3971., 4470., 4924., 5357., 5787., 6230., 6709., 7260., + 7971., 9158., 10803., 11664., 12234., 12684., 13071., 13419., 13742., 14048., 14344., + 14633., 14919., 15207., 15499., 15798., 16110., 16437., 16787., 17167., 17587., 18060., + 18603., 19225., 19919., 20643., 21351., 22020., 22648., 23246., 23823., 24387., 24948., + 25516., 26099., 26713., 27381., 28144., 29113., 31416.}, /* En=15980 keV */ + {0.000, 2876., 3700., 4293., 4786., 5221., 5622., 6001., 6366., 6726., 7086., + 7452., 7832., 8235., 8674., 9173., 9772., 10542., 11506., 12399., 13077., 13612., + 14066., 14471., 14845., 15199., 15542., 15880., 16219., 16564., 16919., 17292., 17689., + 18123., 18606., 19163., 19825., 20623., 21523., 22383., 23124., 23768., 24352., 24906., + 25454., 26017., 26620., 27294., 28088., 29106., 31416.}, /* En=16470 keV */ + {0.000, 3534., 4408., 5069., 5638., 6157., 6649., 7126., 7595., 8063., 8537., + 9020., 9518., 10033., 10565., 11110., 11658., 12195., 12707., 13189., 13639., 14059., + 14453., 14827., 15182., 15525., 15856., 16181., 16500., 16817., 17134., 17453., 17779., + 18115., 18465., 18836., 19237., 19682., 20194., 20809., 21581., 22515., 23441., 24240., + 24941., 25597., 26249., 26940., 27735., 28775., 31416.}, /* En=16940 keV */ + {0.000, 3063., 3895., 4531., 5092., 5621., 6144., 6674., 7219., 7776., 8334., + 8879., 9398., 9888., 10352., 10795., 11221., 11638., 12048., 12455., 12863., 13272., + 13685., 14100., 14517., 14935., 15353., 15768., 16181., 16590., 16995., 17397., 17797., + 18195., 18594., 18994., 19398., 19810., 20232., 20671., 21133., 21628., 22168., 22773., + 23466., 24265., 25162., 26124., 27154., 28382., 31416.}, /* En=17970 keV */ + {0.000, 2839., 4027., 4951., 5736., 6437., 7074., 7671., 8230., 8765., 9273., + 9767., 10241., 10703., 11152., 11595., 12026., 12453., 12871., 13285., 13697., 14102., + 14507., 14909., 15308., 15711., 16110., 16509., 16911., 17316., 17721., 18133., 18547., + 18965., 19393., 19823., 20266., 20715., 21177., 21651., 22145., 22654., 23188., 23747., + 24344., 24981., 25682., 26467., 27391., 28579., 31416.}, /* En=18000 keV */ + {0.000, 2839., 4027., 4951., 5736., 6437., 7074., 7671., 8230., 8765., 9273., + 9767., 10241., 10703., 11152., 11595., 12026., 12453., 12871., 13285., 13697., 14102., + 14507., 14909., 15308., 15711., 16110., 16509., 16911., 17316., 17721., 18133., 18547., + 18965., 19393., 19823., 20266., 20715., 21177., 21651., 22145., 22654., 23188., 23747., + 24344., 24981., 25682., 26467., 27391., 28579., 31416.}, /* En=19000 keV */ + {0.000, 2839., 4027., 4951., 5736., 6437., 7074., 7671., 8230., 8765., 9273., + 9767., 10241., 10703., 11152., 11595., 12026., 12453., 12871., 13285., 13697., 14102., + 14507., 14909., 15308., 15711., 16110., 16509., 16911., 17316., 17721., 18133., 18547., + 18965., 19393., 19823., 20266., 20715., 21177., 21651., 22145., 22654., 23188., 23747., + 24344., 24981., 25682., 26467., 27391., 28579., 31416.} /* En=20000 keV*/ +}; + +void G4NRESP71M03::DKINMA(G4ReactionProduct* p1, G4ReactionProduct* p2, G4ReactionProduct* p3, + G4ReactionProduct* p4, const G4double Q, const G4double costhcm3) +{ + G4ReactionProduct CM; + G4double TotalEnergyCM; + + if (p2 != nullptr) // If it is not a decay reaction... + { + // Calculating (total momentum, energy and mass) of the center of mass. + const G4ThreeVector TotalMomentumLAB = p1->GetMomentum() + p2->GetMomentum(); + CM.SetMomentum(TotalMomentumLAB); + + const G4double TotalEnergyLAB = p1->GetTotalEnergy() + p2->GetTotalEnergy(); + CM.SetTotalEnergy(TotalEnergyLAB); + + CM.SetMass(std::sqrt(TotalEnergyLAB * TotalEnergyLAB - TotalMomentumLAB * TotalMomentumLAB)); + + // Transforming primary particles from laboratory to center of mass system. + p1->Lorentz(*p1, CM); + p2->Lorentz(*p2, CM); + + TotalEnergyCM = p1->GetTotalEnergy() + p2->GetTotalEnergy(); + + const G4double m4 = + (p1->GetMass() + p2->GetMass()) + - (p3->GetMass() + + Q); // Mass of the residual nucleus in the excited state (not in the ground state). + p4->SetMass(m4); + } + else // If it is a decay reaction... + { + const G4ThreeVector TotalMomentumLAB = p1->GetMomentum(); + CM.SetMomentum(TotalMomentumLAB); + + const G4double TotalEnergyLAB = p1->GetTotalEnergy(); + CM.SetTotalEnergy(TotalEnergyLAB); + + CM.SetMass(std::sqrt(TotalEnergyLAB * TotalEnergyLAB - TotalMomentumLAB * TotalMomentumLAB)); + + // Transforming primary particles from laboratory to center of mass system (not really necessary + // in this case). + p1->Lorentz(*p1, CM); + + const G4double m4 = + p1->GetMass() + - (p3->GetMass() + + Q); // Mass of the residual nucleus in the excited state (not in the ground state). + p4->SetMass(m4); + + TotalEnergyCM = p1->GetTotalEnergy(); + } + + // Calculating momentum and total energy of the reaction products. + + const G4ThreeVector p1unit = p1->GetMomentum().unit(); + + G4RotationMatrix rot(std::acos(p1unit * G4ThreeVector(0., 1., 0.)), + std::acos(p1unit * G4ThreeVector(0., 0., 1.)), 0.); + rot.inverse(); + + const G4double theta = std::acos(costhcm3); + const G4double phi = twopi * G4UniformRand(); + + const G4double Energy3CM = + (std::pow(TotalEnergyCM, 2.) + std::pow(p3->GetMass(), 2.) - std::pow(p4->GetMass(), 2.)) + / (2. * TotalEnergyCM); + p3->SetTotalEnergy(Energy3CM); + + const G4double Momentum3CM = std::sqrt(std::pow(Energy3CM, 2.) - std::pow(p3->GetMass(), 2.)); + p3->SetMomentum(rot + * G4ThreeVector(Momentum3CM * std::sin(theta) * std::cos(phi), + Momentum3CM * std::sin(theta) * std::sin(phi), + Momentum3CM * costhcm3)); + + const G4double Energy4CM = TotalEnergyCM - Energy3CM; + p4->SetTotalEnergy(Energy4CM); + + const G4double Momentum4CM = std::sqrt(std::pow(Energy4CM, 2.) - std::pow(p4->GetMass(), 2.)); + p4->SetMomentum(-Momentum4CM * p3->GetMomentum().unit()); + + // Transforming reaction products from center of mass to laboratory system. + p3->Lorentz(*p3, -1. * CM); + p4->Lorentz(*p4, -1. * CM); +} -G4int G4NRESP71M03::ApplyMechanismI_NBeA2A(G4ReactionProduct &neut, G4ReactionProduct &carb, G4ReactionProduct *theProds, const G4double QI) - { - // N+12C --> A+9BE* - G4ReactionProduct p4; +G4int G4NRESP71M03::ApplyMechanismI_NBeA2A(G4ReactionProduct& neut, G4ReactionProduct& carb, + G4ReactionProduct* theProds, const G4double QI) +{ + // N+12C --> A+9BE* + G4ReactionProduct p4; - theProds[0].SetDefinition(G4Alpha::Alpha()); + theProds[0].SetDefinition(G4Alpha::Alpha()); - DKINMA(&neut, &carb, &(theProds[0]), &p4, QI, 2.*G4UniformRand()-1.); + DKINMA(&neut, &carb, &(theProds[0]), &p4, QI, 2. * G4UniformRand() - 1.); - // 9BE* --> N+8BE - G4ReactionProduct p1(p4); + // 9BE* --> N+8BE + G4ReactionProduct p1(p4); - theProds[1].SetDefinition(G4Neutron::Neutron()); + theProds[1].SetDefinition(G4Neutron::Neutron()); - DKINMA(&p1, NULL, &(theProds[1]), &p4, -QI-7.369, 2.*G4UniformRand()-1.); + DKINMA(&p1, nullptr, &(theProds[1]), &p4, -QI - 7.369, 2. * G4UniformRand() - 1.); - // 8BE --> 2*A - p1 = p4; + // 8BE --> 2*A + p1 = p4; - theProds[2].SetDefinition(G4Alpha::Alpha()); - theProds[3].SetDefinition(G4Alpha::Alpha()); + theProds[2].SetDefinition(G4Alpha::Alpha()); + theProds[3].SetDefinition(G4Alpha::Alpha()); - DKINMA(&p1, NULL, &(theProds[2]), &(theProds[3]), 0.09538798439007223351, 2.*G4UniformRand()-1.); + DKINMA(&p1, nullptr, &(theProds[2]), &(theProds[3]), 0.09538798439007223351, + 2. * G4UniformRand() - 1.); - return 0; - } + return 0; +} // Apply kinematics for excited level selected by GEANT4 (it). -G4int G4NRESP71M03::ApplyMechanismII_ACN2A(G4ReactionProduct &neut, G4ReactionProduct &carb, G4ReactionProduct *theProds, const G4double QI) - { - // 12C(N,N')12C' - G4ReactionProduct p4; +G4int G4NRESP71M03::ApplyMechanismII_ACN2A(G4ReactionProduct& neut, G4ReactionProduct& carb, + G4ReactionProduct* theProds, const G4double QI) +{ + // 12C(N,N')12C' + G4ReactionProduct p4; - theProds[0].SetDefinition(G4Neutron::Neutron()); + theProds[0].SetDefinition(G4Neutron::Neutron()); - DKINMA(&neut, &carb, &(theProds[0]), &p4, QI, 2.*G4UniformRand()-1.); + DKINMA(&neut, &carb, &(theProds[0]), &p4, QI, 2. * G4UniformRand() - 1.); - // 12C' --> ALPHA+8BE' - G4ReactionProduct p1(p4); + // 12C' --> ALPHA+8BE' + G4ReactionProduct p1(p4); - theProds[1].SetDefinition(G4Alpha::Alpha()); + theProds[1].SetDefinition(G4Alpha::Alpha()); - DKINMA(&p1, NULL, &(theProds[1]), &p4, -QI-7.369, 2.*G4UniformRand()-1.); + DKINMA(&p1, nullptr, &(theProds[1]), &p4, -QI - 7.369, 2. * G4UniformRand() - 1.); - // 8BE --> 2*ALPHA - p1 = p4; + // 8BE --> 2*ALPHA + p1 = p4; - theProds[2].SetDefinition(G4Alpha::Alpha()); - theProds[3].SetDefinition(G4Alpha::Alpha()); + theProds[2].SetDefinition(G4Alpha::Alpha()); + theProds[3].SetDefinition(G4Alpha::Alpha()); - DKINMA(&p1, NULL, &(theProds[2]), &(theProds[3]), 0.09538798439007223351, 2.*G4UniformRand()-1.); + DKINMA(&p1, nullptr, &(theProds[2]), &(theProds[3]), 0.09538798439007223351, + 2. * G4UniformRand() - 1.); - return 0; - } + return 0; +} -G4int G4NRESP71M03::ApplyMechanismABE(G4ReactionProduct &neut, G4ReactionProduct &carb, G4ReactionProduct *theProds) - { - G4double CosThetaCMAlpha = 0.; // Cosine of the angle of emission of the alpha particle (theta). +G4int G4NRESP71M03::ApplyMechanismABE(G4ReactionProduct& neut, G4ReactionProduct& carb, + G4ReactionProduct* theProds) +{ + G4double CosThetaCMAlpha = 0.; // Cosine of the angle of emission of the alpha particle (theta). - G4double Kn = neut.GetKineticEnergy(); // Neutron energy in the center of mass system. - if ( Kn > 5.7*MeV ) - { - // Sorting. - for ( G4int i=1; i= Kn/keV ) - { - // Ok. The neutron energy is between values i-1 and i of BEN2. Taking them. - G4double BE1 = BEN2[i-1]; - G4double BE2 = BEN2[i]; + G4double Kn = neut.GetKineticEnergy(); // Neutron energy in the center of mass system. + if (Kn > 5.7 * MeV) { + // Sorting. + for (G4int i = 1; i < ndist; i++) { + if (BEN2[i] >= Kn / keV) { + // Ok. The neutron energy is between values i-1 and i of BEN2. Taking them. + G4double BE1 = BEN2[i - 1]; + G4double BE2 = BEN2[i]; - // Performing energy and angle interpolation. + // Performing energy and angle interpolation. - G4double FRA = G4UniformRand()*49.99999999; // Sorting the bin of the cumulative probability FRA (Rho). There are 51 values of Rho from 0 to 1 (0; 0.02; 0.04 ... 1). - G4double DJTETA = FRA-G4int(FRA); // Distance in bin units (DJTETA) from the low edge of the bin with Rho. - G4int JTETA = G4int(FRA)+1; // Getting the bin (JTETA) next to the bin with the value of Rho. + G4double FRA = + G4UniformRand() + * 49.99999999; // Sorting the bin of the cumulative probability FRA (Rho). There are 51 + // values of Rho from 0 to 1 (0; 0.02; 0.04 ... 1). + G4double DJTETA = + FRA + - G4int(FRA); // Distance in bin units (DJTETA) from the low edge of the bin with Rho. + G4int JTETA = + G4int(FRA) + 1; // Getting the bin (JTETA) next to the bin with the value of Rho. - // Calculating the angle from the cumulative distribution at energy i. + // Calculating the angle from the cumulative distribution at energy i. - G4double B11 = B2[i-1][JTETA-1]; - G4double B12 = B2[i-1][JTETA]; + G4double B11 = B2[i - 1][JTETA - 1]; + G4double B12 = B2[i - 1][JTETA]; - G4double TCM1 = B11+(B12-B11)*DJTETA; // Angle at energy i. + G4double TCM1 = B11 + (B12 - B11) * DJTETA; // Angle at energy i. - // Calculating the angle from the cumulative distribution at energy i-1. + // Calculating the angle from the cumulative distribution at energy i-1. - G4double B21 = B2[i][JTETA-1]; - G4double B22 = B2[i][JTETA]; + G4double B21 = B2[i][JTETA - 1]; + G4double B22 = B2[i][JTETA]; - G4double TCM2 = B21+(B22-B21)*DJTETA; // Angle at energy i-1. + G4double TCM2 = B21 + (B22 - B21) * DJTETA; // Angle at energy i-1. - // Interpolating the angle between energy values i and i-1. - G4double TCM = (TCM1+(TCM2-TCM1)*(Kn/keV-BE1)/(BE2-BE1))*1.E-4; - CosThetaCMAlpha = std::cos(TCM); + // Interpolating the angle between energy values i and i-1. + G4double TCM = (TCM1 + (TCM2 - TCM1) * (Kn / keV - BE1) / (BE2 - BE1)) * 1.E-4; + CosThetaCMAlpha = std::cos(TCM); - break; - } - } - } - else - { - // Isotropic distribution in CM. - CosThetaCMAlpha = 1.-2.*G4UniformRand(); - } + break; + } + } + } + else { + // Isotropic distribution in CM. + CosThetaCMAlpha = 1. - 2. * G4UniformRand(); + } - //N+12C --> A+9BE - theProds[0].SetDefinition(G4Alpha::Alpha()); - theProds[1].SetDefinition(G4IonTable::GetIonTable()->GetIon(4, 9, 0. )); + // N+12C --> A+9BE + theProds[0].SetDefinition(G4Alpha::Alpha()); + theProds[1].SetDefinition(G4IonTable::GetIonTable()->GetIon(4, 9, 0.)); - DKINMA(&neut, &carb, &(theProds[0]), &(theProds[1]), -5.71*MeV, CosThetaCMAlpha); + DKINMA(&neut, &carb, &(theProds[0]), &(theProds[1]), -5.71 * MeV, CosThetaCMAlpha); - return 0; - } + return 0; +} diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2AInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2AInelasticFS.cc index 4e7954c7008..73ab24f6d55 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2AInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2AInelasticFS.cc @@ -30,58 +30,61 @@ // P. Arce, Dec-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHP2AInelasticFS.hh" -#include "G4Nucleus.hh" + #include "G4Alpha.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHP2AInelasticFS::G4ParticleHP2AInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHP2AInelasticFS_F28" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHP2AInelasticFS_F28"); } -G4HadFinalState * G4ParticleHP2AInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHP2AInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { + // these are the particle types in the final state -// these are the particle types in the final state - - G4ParticleDefinition * theDefs[2]; + G4ParticleDefinition* theDefs[2]; theDefs[0] = G4Alpha::Alpha(); theDefs[1] = G4Alpha::Alpha(); -// fill the final state + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 2); - -// return the result - return theResult.Get(); -} -void G4ParticleHP2AInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) -{ - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-7; - ResidualZ = Z-4; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-7; - ResidualZ = Z-3; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-6; - ResidualZ = Z-3; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A-5; - ResidualZ = Z-3; - } else if( projectile == G4He3::He3() ) { - ResidualA = A-5; - ResidualZ = Z-2; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A-4; - ResidualZ = Z-2; - } - - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + // return the result + return theResult.Get(); } +void G4ParticleHP2AInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) +{ + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 7; + ResidualZ = Z - 4; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 7; + ResidualZ = Z - 3; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 6; + ResidualZ = Z - 3; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A - 5; + ResidualZ = Z - 3; + } + else if (projectile == G4He3::He3()) { + ResidualA = A - 5; + ResidualZ = Z - 2; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A - 4; + ResidualZ = Z - 2; + } + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); +} diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2N2AInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2N2AInelasticFS.cc index 0e9cf9c7c12..6764fbe75fc 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2N2AInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2N2AInelasticFS.cc @@ -30,59 +30,64 @@ // P. Arce, Dec-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHP2N2AInelasticFS.hh" -#include "G4Nucleus.hh" -#include "G4Neutron.hh" + #include "G4Alpha.hh" +#include "G4Neutron.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHP2N2AInelasticFS::G4ParticleHP2N2AInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHP2N2AInelasticFS_F12" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHP2N2AInelasticFS_F12"); } -G4HadFinalState * G4ParticleHP2N2AInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHP2N2AInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[4]; + G4ParticleDefinition* theDefs[4]; theDefs[0] = G4Neutron::Neutron(); theDefs[1] = G4Neutron::Neutron(); theDefs[2] = G4Alpha::Alpha(); theDefs[3] = G4Alpha::Alpha(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 4); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHP2N2AInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHP2N2AInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-9; - ResidualZ = Z-4; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-9; - ResidualZ = Z-3; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-8; - ResidualZ = Z-3; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A-7; - ResidualZ = Z-3; - } else if( projectile == G4He3::He3() ) { - ResidualA = A-7; - ResidualZ = Z-2; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A-6; - ResidualZ = Z-2; - } + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 9; + ResidualZ = Z - 4; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 9; + ResidualZ = Z - 3; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 8; + ResidualZ = Z - 3; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A - 7; + ResidualZ = Z - 3; + } + else if (projectile == G4He3::He3()) { + ResidualA = A - 7; + ResidualZ = Z - 2; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A - 6; + ResidualZ = Z - 2; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } - diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2NAInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2NAInelasticFS.cc index 1268b5f50f6..bee753fedcf 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2NAInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2NAInelasticFS.cc @@ -30,56 +30,62 @@ // P. Arce, Dec-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHP2NAInelasticFS.hh" -#include "G4Nucleus.hh" + #include "G4Alpha.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHP2NAInelasticFS::G4ParticleHP2NAInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHP2NAInelasticFS_F08" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHP2NAInelasticFS_F08"); } -G4HadFinalState * G4ParticleHP2NAInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHP2NAInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[3]; + G4ParticleDefinition* theDefs[3]; theDefs[0] = G4Neutron::Neutron(); theDefs[1] = G4Neutron::Neutron(); theDefs[2] = G4Alpha::Alpha(); -// fill the final state + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 3); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHP2NAInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHP2NAInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-5; - ResidualZ = Z-2; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-5; - ResidualZ = Z-1; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-4; - ResidualZ = Z-1; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A-3; - ResidualZ = Z-1; - } else if( projectile == G4He3::He3() ) { - ResidualA = A-3; - ResidualZ = Z; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A-2; - ResidualZ = Z; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 5; + ResidualZ = Z - 2; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 5; + ResidualZ = Z - 1; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 4; + ResidualZ = Z - 1; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A - 3; + ResidualZ = Z - 1; + } + else if (projectile == G4He3::He3()) { + ResidualA = A - 3; + ResidualZ = Z; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A - 2; + ResidualZ = Z; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2NDInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2NDInelasticFS.cc index a060829e9a3..365380e4c97 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2NDInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2NDInelasticFS.cc @@ -30,56 +30,62 @@ // P. Arce, Dec-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHP2NDInelasticFS.hh" -#include "G4Nucleus.hh" + #include "G4Deuteron.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHP2NDInelasticFS::G4ParticleHP2NDInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHP2NDInelasticFS_F03" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHP2NDInelasticFS_F03"); } -G4HadFinalState * G4ParticleHP2NDInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHP2NDInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[3]; + G4ParticleDefinition* theDefs[3]; theDefs[0] = G4Neutron::Neutron(); theDefs[1] = G4Neutron::Neutron(); theDefs[2] = G4Deuteron::Deuteron(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 3); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHP2NDInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHP2NDInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-3; - ResidualZ = Z-1; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-3; - ResidualZ = Z; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-2; - ResidualZ = Z; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A-1; - ResidualZ = Z; - } else if( projectile == G4He3::He3() ) { - ResidualA = A-1; - ResidualZ = Z+1; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A; - ResidualZ = Z+1; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 3; + ResidualZ = Z - 1; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 3; + ResidualZ = Z; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 2; + ResidualZ = Z; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A - 1; + ResidualZ = Z; + } + else if (projectile == G4He3::He3()) { + ResidualA = A - 1; + ResidualZ = Z + 1; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A; + ResidualZ = Z + 1; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2NInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2NInelasticFS.cc index cdae7c2be98..43208570592 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2NInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2NInelasticFS.cc @@ -30,56 +30,61 @@ // P. Arce, Dec-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHP2NInelasticFS.hh" -#include "G4Nucleus.hh" + #include "G4Alpha.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHP2NInelasticFS::G4ParticleHP2NInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHP2NInelasticFS_F04" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHP2NInelasticFS_F04"); } -G4HadFinalState * G4ParticleHP2NInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHP2NInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { + // these are the particle types in the final state -// these are the particle types in the final state - - G4ParticleDefinition * theDefs[2]; + G4ParticleDefinition* theDefs[2]; theDefs[0] = G4Neutron::Neutron(); theDefs[1] = G4Neutron::Neutron(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 2); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHP2NInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHP2NInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-1; - ResidualZ = Z; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-1; - ResidualZ = Z+1; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A; - ResidualZ = Z+1; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A+1; - ResidualZ = Z+1; - } else if( projectile == G4He3::He3() ) { - ResidualA = A+1; - ResidualZ = Z+2; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A+2; - ResidualZ = Z+2; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 1; + ResidualZ = Z; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 1; + ResidualZ = Z + 1; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A; + ResidualZ = Z + 1; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A + 1; + ResidualZ = Z + 1; + } + else if (projectile == G4He3::He3()) { + ResidualA = A + 1; + ResidualZ = Z + 2; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A + 2; + ResidualZ = Z + 2; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2NPInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2NPInelasticFS.cc index 835c02b1a6a..1028d04ab9b 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2NPInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2NPInelasticFS.cc @@ -30,57 +30,62 @@ // P. Arce, Dec-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHP2NPInelasticFS.hh" + #include "G4Nucleus.hh" -#include "G4Proton.hh" #include "G4PhysicsModelCatalog.hh" +#include "G4Proton.hh" G4ParticleHP2NPInelasticFS::G4ParticleHP2NPInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHP2NPInelasticFS_F19" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHP2NPInelasticFS_F19"); } -G4HadFinalState * G4ParticleHP2NPInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHP2NPInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[3]; + G4ParticleDefinition* theDefs[3]; theDefs[0] = G4Neutron::Neutron(); theDefs[1] = G4Neutron::Neutron(); theDefs[2] = G4Proton::Proton(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 3); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHP2NPInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHP2NPInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-2; - ResidualZ = Z-1; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-2; - ResidualZ = Z; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-1; - ResidualZ = Z; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A; - ResidualZ = Z; - } else if( projectile == G4He3::He3() ) { - ResidualA = A; - ResidualZ = Z+1; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A+1; - ResidualZ = Z+1; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 2; + ResidualZ = Z - 1; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 2; + ResidualZ = Z; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 1; + ResidualZ = Z; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A; + ResidualZ = Z; + } + else if (projectile == G4He3::He3()) { + ResidualA = A; + ResidualZ = Z + 1; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A + 1; + ResidualZ = Z + 1; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } - diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2PInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2PInelasticFS.cc index 7e97eca3dca..f34f55268f2 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2PInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP2PInelasticFS.cc @@ -30,56 +30,61 @@ // P. Arce, Dec-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHP2PInelasticFS.hh" + #include "G4Nucleus.hh" -#include "G4Proton.hh" #include "G4PhysicsModelCatalog.hh" +#include "G4Proton.hh" G4ParticleHP2PInelasticFS::G4ParticleHP2PInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHP2PInelasticFS_F30" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHP2PInelasticFS_F30"); } -G4HadFinalState * G4ParticleHP2PInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHP2PInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[2]; + G4ParticleDefinition* theDefs[2]; theDefs[0] = G4Proton::Proton(); theDefs[1] = G4Proton::Proton(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 2); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHP2PInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHP2PInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-1; - ResidualZ = Z-2; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-1; - ResidualZ = Z-1; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A; - ResidualZ = Z-1; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A+1; - ResidualZ = Z-1; - } else if( projectile == G4He3::He3() ) { - ResidualA = A+1; - ResidualZ = Z; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A+2; - ResidualZ = Z; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 1; + ResidualZ = Z - 2; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 1; + ResidualZ = Z - 1; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A; + ResidualZ = Z - 1; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A + 1; + ResidualZ = Z - 1; + } + else if (projectile == G4He3::He3()) { + ResidualA = A + 1; + ResidualZ = Z; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A + 2; + ResidualZ = Z; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } - diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP3AInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP3AInelasticFS.cc index 41ca3e7cd36..03bf26d1be3 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP3AInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP3AInelasticFS.cc @@ -30,56 +30,62 @@ // P. Arce, Dec-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHP3AInelasticFS.hh" -#include "G4Nucleus.hh" + #include "G4Alpha.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHP3AInelasticFS::G4ParticleHP3AInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHP3AInelasticFS_F29" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHP3AInelasticFS_F29"); } -G4HadFinalState * G4ParticleHP3AInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHP3AInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[3]; + G4ParticleDefinition* theDefs[3]; theDefs[0] = G4Alpha::Alpha(); theDefs[1] = G4Alpha::Alpha(); theDefs[2] = G4Alpha::Alpha(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 3); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHP3AInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHP3AInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-11; - ResidualZ = Z-6; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-11; - ResidualZ = Z-5; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-10; - ResidualZ = Z-5; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A-9; - ResidualZ = Z-5; - } else if( projectile == G4He3::He3() ) { - ResidualA = A-9; - ResidualZ = Z-4; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A-8; - ResidualZ = Z-4; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 11; + ResidualZ = Z - 6; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 11; + ResidualZ = Z - 5; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 10; + ResidualZ = Z - 5; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A - 9; + ResidualZ = Z - 5; + } + else if (projectile == G4He3::He3()) { + ResidualA = A - 9; + ResidualZ = Z - 4; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A - 8; + ResidualZ = Z - 4; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP3NAInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP3NAInelasticFS.cc index 3be03b0ba8f..802a1cd8f97 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP3NAInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP3NAInelasticFS.cc @@ -30,57 +30,63 @@ // P. Arce, Dec-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHP3NAInelasticFS.hh" -#include "G4Nucleus.hh" + #include "G4Alpha.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHP3NAInelasticFS::G4ParticleHP3NAInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHP3NAInelasticFS_F09" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHP3NAInelasticFS_F09"); } -G4HadFinalState * G4ParticleHP3NAInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHP3NAInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[4]; + G4ParticleDefinition* theDefs[4]; theDefs[0] = G4Neutron::Neutron(); theDefs[1] = G4Neutron::Neutron(); theDefs[2] = G4Neutron::Neutron(); theDefs[3] = G4Alpha::Alpha(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 4); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHP3NAInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHP3NAInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-6; - ResidualZ = Z-2; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-6; - ResidualZ = Z-1; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-5; - ResidualZ = Z-1; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A-4; - ResidualZ = Z-1; - } else if( projectile == G4He3::He3() ) { - ResidualA = A-4; - ResidualZ = Z; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A-3; - ResidualZ = Z; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 6; + ResidualZ = Z - 2; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 6; + ResidualZ = Z - 1; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 5; + ResidualZ = Z - 1; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A - 4; + ResidualZ = Z - 1; + } + else if (projectile == G4He3::He3()) { + ResidualA = A - 4; + ResidualZ = Z; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A - 3; + ResidualZ = Z; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP3NInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP3NInelasticFS.cc index 0f82d31ab8d..3a91cdf07c7 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP3NInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP3NInelasticFS.cc @@ -30,56 +30,62 @@ // P. Arce, Dec-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHP3NInelasticFS.hh" -#include "G4Nucleus.hh" + #include "G4Alpha.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHP3NInelasticFS::G4ParticleHP3NInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHP3NInelasticFS_F05" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHP3NInelasticFS_F05"); } -G4HadFinalState * G4ParticleHP3NInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHP3NInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[3]; + G4ParticleDefinition* theDefs[3]; theDefs[0] = G4Neutron::Neutron(); theDefs[1] = G4Neutron::Neutron(); theDefs[2] = G4Neutron::Neutron(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 3); - -// return the result; - return theResult.Get(); + + // return the result; + return theResult.Get(); } -void G4ParticleHP3NInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHP3NInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-2; - ResidualZ = Z; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-2; - ResidualZ = Z+1; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-1; - ResidualZ = Z+1; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A; - ResidualZ = Z+1; - } else if( projectile == G4He3::He3() ) { - ResidualA = A; - ResidualZ = Z+2; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A+1; - ResidualZ = Z+2; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 2; + ResidualZ = Z; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 2; + ResidualZ = Z + 1; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 1; + ResidualZ = Z + 1; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A; + ResidualZ = Z + 1; + } + else if (projectile == G4He3::He3()) { + ResidualA = A; + ResidualZ = Z + 2; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A + 1; + ResidualZ = Z + 2; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP3NPInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP3NPInelasticFS.cc index 284d6bf5f0d..bece7649e87 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP3NPInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP3NPInelasticFS.cc @@ -30,58 +30,63 @@ // P. Arce, Dec-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHP3NPInelasticFS.hh" + #include "G4Nucleus.hh" -#include "G4Proton.hh" #include "G4PhysicsModelCatalog.hh" +#include "G4Proton.hh" G4ParticleHP3NPInelasticFS::G4ParticleHP3NPInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHP3NPInelasticFS_F20" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHP3NPInelasticFS_F20"); } -G4HadFinalState * G4ParticleHP3NPInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHP3NPInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[4]; + G4ParticleDefinition* theDefs[4]; theDefs[0] = G4Neutron::Neutron(); theDefs[1] = G4Neutron::Neutron(); theDefs[2] = G4Neutron::Neutron(); theDefs[3] = G4Proton::Proton(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 4); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHP3NPInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHP3NPInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-3; - ResidualZ = Z-1; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-3; - ResidualZ = Z; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-2; - ResidualZ = Z; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A-1; - ResidualZ = Z; - } else if( projectile == G4He3::He3() ) { - ResidualA = A-1; - ResidualZ = Z+1; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A; - ResidualZ = Z+1; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 3; + ResidualZ = Z - 1; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 3; + ResidualZ = Z; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 2; + ResidualZ = Z; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A - 1; + ResidualZ = Z; + } + else if (projectile == G4He3::He3()) { + ResidualA = A - 1; + ResidualZ = Z + 1; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A; + ResidualZ = Z + 1; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } - diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP4NInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP4NInelasticFS.cc index 4d50ab5aaa4..d586022d5bd 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHP4NInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHP4NInelasticFS.cc @@ -30,57 +30,63 @@ // P. Arce, Dec-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHP4NInelasticFS.hh" -#include "G4Nucleus.hh" + #include "G4Alpha.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHP4NInelasticFS::G4ParticleHP4NInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHP4NInelasticFS_F18" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHP4NInelasticFS_F18"); } -G4HadFinalState * G4ParticleHP4NInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHP4NInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[4]; + G4ParticleDefinition* theDefs[4]; theDefs[0] = G4Neutron::Neutron(); theDefs[1] = G4Neutron::Neutron(); theDefs[2] = G4Neutron::Neutron(); theDefs[3] = G4Neutron::Neutron(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 4); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHP4NInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHP4NInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-3; - ResidualZ = Z; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-3; - ResidualZ = Z+1; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-2; - ResidualZ = Z+1; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A-1; - ResidualZ = Z+1; - } else if( projectile == G4He3::He3() ) { - ResidualA = A-1; - ResidualZ = Z+2; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A; - ResidualZ = Z+2; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 3; + ResidualZ = Z; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 3; + ResidualZ = Z + 1; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 2; + ResidualZ = Z + 1; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A - 1; + ResidualZ = Z + 1; + } + else if (projectile == G4He3::He3()) { + ResidualA = A - 1; + ResidualZ = Z + 2; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A; + ResidualZ = Z + 2; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPAInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPAInelasticFS.cc index b225880053b..907ed1e862a 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPAInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPAInelasticFS.cc @@ -30,49 +30,55 @@ // P. Arce, Dec-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPAInelasticFS.hh" -#include "G4Nucleus.hh" + #include "G4Alpha.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHPAInelasticFS::G4ParticleHPAInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHPAInelasticFS_F27" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHPAInelasticFS_F27"); } -void G4ParticleHPAInelasticFS::Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHPAInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticCompFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-3; - ResidualZ = Z-2; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-3; - ResidualZ = Z-1; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-2; - ResidualZ = Z-1; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A-1; - ResidualZ = Z-1; - } else if( projectile == G4He3::He3() ) { - ResidualA = A-1; - ResidualZ = Z; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A; - ResidualZ = Z; - } + G4ParticleHPInelasticCompFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 3; + ResidualZ = Z - 2; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 3; + ResidualZ = Z - 1; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 2; + ResidualZ = Z - 1; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A - 1; + ResidualZ = Z - 1; + } + else if (projectile == G4He3::He3()) { + ResidualA = A - 1; + ResidualZ = Z; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A; + ResidualZ = Z; + } - G4ParticleHPInelasticCompFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticCompFS::InitGammas(ResidualA, ResidualZ); } -G4HadFinalState * G4ParticleHPAInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHPAInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { + // do the final state + G4ParticleHPInelasticCompFS::CompositeApply(theTrack, G4Alpha::Alpha()); -// do the final state - G4ParticleHPInelasticCompFS::CompositeApply(theTrack, G4Alpha::Alpha()); - -// return the result - return theResult.Get(); + // return the result + return theResult.Get(); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPAngular.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPAngular.cc index bcb58e438b1..1c59c840a38 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPAngular.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPAngular.cc @@ -30,49 +30,45 @@ // 070523 bug fix for G4FPE_DEBUG on by A. Howard ( and T. Koi) // 080612 bug fix contribution from Benoit Pirard and Laurent Desorgher (Univ. Bern) #5 // 110505 protection for object is created but not initialized -// 110510 delete above protection with more coordinated work to other classes +// 110510 delete above protection with more coordinated work to other classes // // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPAngular.hh" + #include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" -void G4ParticleHPAngular::Init(std::istream & aDataFile) +void G4ParticleHPAngular::Init(std::istream& aDataFile) { -// G4cout << "here we are entering the Angular Init"<> theAngularDistributionType >> targetMass; aDataFile >> frameFlag; - if(theAngularDistributionType == 0 ) - { - theIsoFlag = true; + if (theAngularDistributionType == 0) { + theIsoFlag = true; } - else if(theAngularDistributionType==1) - { + else if (theAngularDistributionType == 1) { theIsoFlag = false; G4int nEnergy; - aDataFile >> nEnergy; + aDataFile >> nEnergy; theCoefficients = new G4ParticleHPLegendreStore(nEnergy); theCoefficients->InitInterpolation(aDataFile); G4double temp, energy; G4int tempdep, nLegendre; G4int i, ii; - for (i=0; i> temp >> energy >> tempdep >> nLegendre; - energy *=eV; + energy *= eV; theCoefficients->Init(i, energy, nLegendre); theCoefficients->SetTemperature(i, temp); - G4double coeff=0; - for(ii=0; ii> coeff; - theCoefficients->SetCoeff(i, ii+1, coeff); + theCoefficients->SetCoeff(i, ii + 1, coeff); } } } - else if (theAngularDistributionType==2) - { + else if (theAngularDistributionType == 2) { theIsoFlag = false; G4int nEnergy; aDataFile >> nEnergy; @@ -80,8 +76,7 @@ void G4ParticleHPAngular::Init(std::istream & aDataFile) theProbArray->InitInterpolation(aDataFile); G4double temp, energy; G4int tempdep; - for(G4int i=0; i> temp >> energy >> tempdep; energy *= eV; theProbArray->SetT(i, temp); @@ -89,19 +84,17 @@ void G4ParticleHPAngular::Init(std::istream & aDataFile) theProbArray->InitData(i, aDataFile); } } - else - { + else { theIsoFlag = false; - G4cout << "unknown distribution found for Angular: "<< theAngularDistributionType << G4endl; + G4cout << "unknown distribution found for Angular: " << theAngularDistributionType << G4endl; throw G4HadronicException(__FILE__, __LINE__, "unknown distribution needs implementation!!!"); - } + } } -void G4ParticleHPAngular::SampleAndUpdate(G4ReactionProduct & aHadron) +void G4ParticleHPAngular::SampleAndUpdate(G4ReactionProduct& aHadron) { - //******************************************************************** - //EMendoza -> sampling can be isotropic in LAB or in CMS + // EMendoza -> sampling can be isotropic in LAB or in CMS /* if(theIsoFlag) { @@ -120,172 +113,186 @@ void G4ParticleHPAngular::SampleAndUpdate(G4ReactionProduct & aHadron) { */ //******************************************************************** - if(frameFlag == 1) // LAB - { - G4double en = aHadron.GetTotalMomentum(); - G4ReactionProduct boosted; - boosted.Lorentz(*fCache.Get().theProjectileRP, *fCache.Get().theTarget); - G4double kineticEnergy = boosted.GetKineticEnergy(); - G4double cosTh = 0.0; - //******************************************************************** - //EMendoza --> sampling can be also isotropic - /* - if(theAngularDistributionType == 1) cosTh = theCoefficients->SampleMax(kineticEnergy); - if(theAngularDistributionType == 2) cosTh = theProbArray->Sample(kineticEnergy); - */ - //******************************************************************** - if(theIsoFlag){cosTh =2.*G4UniformRand()-1;} - else if(theAngularDistributionType == 1) {cosTh = theCoefficients->SampleMax(kineticEnergy);} - else if(theAngularDistributionType == 2) {cosTh = theProbArray->Sample(kineticEnergy);} - else{ - G4cout << "unknown distribution found for Angular: "<< theAngularDistributionType << G4endl; - throw G4HadronicException(__FILE__, __LINE__, "unknown distribution needs implementation!!!"); - } - //******************************************************************** - G4double theta = std::acos(cosTh); - G4double phi = twopi*G4UniformRand(); - G4double sinth = std::sin(theta); - G4ThreeVector temp(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*std::cos(theta) ); - aHadron.SetMomentum( temp ); + if (frameFlag == 1) // LAB + { + G4double en = aHadron.GetTotalMomentum(); + G4ReactionProduct boosted; + boosted.Lorentz(*fCache.Get().theProjectileRP, *fCache.Get().theTarget); + G4double kineticEnergy = boosted.GetKineticEnergy(); + G4double cosTh = 0.0; + //******************************************************************** + // EMendoza --> sampling can be also isotropic + /* + if(theAngularDistributionType == 1) cosTh = theCoefficients->SampleMax(kineticEnergy); + if(theAngularDistributionType == 2) cosTh = theProbArray->Sample(kineticEnergy); + */ + //******************************************************************** + if (theIsoFlag) { + cosTh = 2. * G4UniformRand() - 1; + } + else if (theAngularDistributionType == 1) { + cosTh = theCoefficients->SampleMax(kineticEnergy); + } + else if (theAngularDistributionType == 2) { + cosTh = theProbArray->Sample(kineticEnergy); } - else if(frameFlag == 2) // costh in CMS - { - G4ReactionProduct boostedN; - boostedN.Lorentz(*fCache.Get().theProjectileRP, *fCache.Get().theTarget); - G4double kineticEnergy = boostedN.GetKineticEnergy(); + else { + G4cout << "unknown distribution found for Angular: " << theAngularDistributionType << G4endl; + throw G4HadronicException(__FILE__, __LINE__, "unknown distribution needs implementation!!!"); + } + //******************************************************************** + G4double theta = std::acos(cosTh); + G4double phi = twopi * G4UniformRand(); + G4double sinth = std::sin(theta); + G4ThreeVector temp(en * sinth * std::cos(phi), en * sinth * std::sin(phi), + en * std::cos(theta)); + aHadron.SetMomentum(temp); + } + else if (frameFlag == 2) // costh in CMS + { + G4ReactionProduct boostedN; + boostedN.Lorentz(*fCache.Get().theProjectileRP, *fCache.Get().theTarget); + G4double kineticEnergy = boostedN.GetKineticEnergy(); - G4double cosTh = 0.0; - //******************************************************************** - //EMendoza --> sampling can be also isotropic - /* - if(theAngularDistributionType == 1) cosTh = theCoefficients->SampleMax(kineticEnergy); - if(theAngularDistributionType == 2) cosTh = theProbArray->Sample(kineticEnergy); - */ - //******************************************************************** - if(theIsoFlag){cosTh =2.*G4UniformRand()-1;} - else if(theAngularDistributionType == 1) {cosTh = theCoefficients->SampleMax(kineticEnergy);} - else if(theAngularDistributionType == 2) {cosTh = theProbArray->Sample(kineticEnergy);} - else{ - G4cout << "unknown distribution found for Angular: "<< theAngularDistributionType << G4endl; - throw G4HadronicException(__FILE__, __LINE__, "unknown distribution needs implementation!!!"); - } - //******************************************************************** -//080612TK bug fix contribution from Benoit Pirard and Laurent Desorgher (Univ. Bern) -/* - if(theAngularDistributionType == 1) // LAB - { - G4double en = aHadron.GetTotalMomentum(); - G4ReactionProduct boosted; - boosted.Lorentz(theProjectile, theTarget); - G4double kineticEnergy = boosted.GetKineticEnergy(); - G4double cosTh = theCoefficients->SampleMax(kineticEnergy); - G4double theta = std::acos(cosTh); - G4double phi = twopi*G4UniformRand(); - G4double sinth = std::sin(theta); - G4ThreeVector temp(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*std::cos(theta) ); - aHadron.SetMomentum( temp ); + G4double cosTh = 0.0; + //******************************************************************** + // EMendoza --> sampling can be also isotropic + /* + if(theAngularDistributionType == 1) cosTh = theCoefficients->SampleMax(kineticEnergy); + if(theAngularDistributionType == 2) cosTh = theProbArray->Sample(kineticEnergy); + */ + //******************************************************************** + if (theIsoFlag) { + cosTh = 2. * G4UniformRand() - 1; + } + else if (theAngularDistributionType == 1) { + cosTh = theCoefficients->SampleMax(kineticEnergy); } - else if(theAngularDistributionType == 2) // costh in CMS { + else if (theAngularDistributionType == 2) { + cosTh = theProbArray->Sample(kineticEnergy); } -*/ + else { + G4cout << "unknown distribution found for Angular: " << theAngularDistributionType << G4endl; + throw G4HadronicException(__FILE__, __LINE__, "unknown distribution needs implementation!!!"); + } + //******************************************************************** + // 080612TK bug fix contribution from Benoit Pirard and Laurent Desorgher (Univ. Bern) + /* + if(theAngularDistributionType == 1) // LAB + { + G4double en = aHadron.GetTotalMomentum(); + G4ReactionProduct boosted; + boosted.Lorentz(theProjectile, theTarget); + G4double kineticEnergy = boosted.GetKineticEnergy(); + G4double cosTh = theCoefficients->SampleMax(kineticEnergy); + G4double theta = std::acos(cosTh); + G4double phi = twopi*G4UniformRand(); + G4double sinth = std::sin(theta); + G4ThreeVector temp(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*std::cos(theta) ); + aHadron.SetMomentum( temp ); + } + else if(theAngularDistributionType == 2) // costh in CMS { + } + */ -// G4ReactionProduct boostedN; -// boostedN.Lorentz(theProjectile, theTarget); -// G4double kineticEnergy = boostedN.GetKineticEnergy(); -// G4double cosTh = theProbArray->Sample(kineticEnergy); + // G4ReactionProduct boostedN; + // boostedN.Lorentz(theProjectile, theTarget); + // G4double kineticEnergy = boostedN.GetKineticEnergy(); + // G4double cosTh = theProbArray->Sample(kineticEnergy); - G4double theta = std::acos(cosTh); - G4double phi = twopi*G4UniformRand(); - G4double sinth = std::sin(theta); - - G4ThreeVector temp(sinth*std::cos(phi), sinth*std::sin(phi), std::cos(theta) ); //CMS + G4double theta = std::acos(cosTh); + G4double phi = twopi * G4UniformRand(); + G4double sinth = std::sin(theta); -//080612TK bug fix contribution from Benoit Pirard and Laurent Desorgher (Univ. Bern) #5 -/* - G4double en = aHadron.GetTotalEnergy(); // Target rest - - // get trafo from Target rest frame to CMS - G4ReactionProduct boostedT; - boostedT.Lorentz(theTarget, theTarget); - - G4ThreeVector the3IncidentParticle = boostedN.GetMomentum(); - G4double nEnergy = boostedN.GetTotalEnergy(); - G4ThreeVector the3Target = boostedT.GetMomentum(); - G4double tEnergy = boostedT.GetTotalEnergy(); - G4double totE = nEnergy+tEnergy; - G4ThreeVector the3trafo = -the3Target-the3IncidentParticle; - G4ReactionProduct trafo; // for transformation from CMS to target rest frame - trafo.SetMomentum(the3trafo); - G4double cmsMom = std::sqrt(the3trafo*the3trafo); - G4double sqrts = std::sqrt((totE-cmsMom)*(totE+cmsMom)); - trafo.SetMass(sqrts); - trafo.SetTotalEnergy(totE); - - G4double gamma = trafo.GetTotalEnergy()/trafo.GetMass(); - G4double cosalpha = temp*trafo.GetMomentum()/trafo.GetTotalMomentum()/temp.mag(); - G4double fac = cosalpha*trafo.GetTotalMomentum()/trafo.GetMass(); - fac*=gamma; - - G4double mom; -// For G4FPE_DEBUG ON - G4double mom2 = ( en*fac*en*fac - - (fac*fac - gamma*gamma)* - (en*en - gamma*gamma*aHadron.GetMass()*aHadron.GetMass()) - ); - if ( mom2 > 0.0 ) - mom = std::sqrt( mom2 ); - else - mom = 0.0; + G4ThreeVector temp(sinth * std::cos(phi), sinth * std::sin(phi), std::cos(theta)); // CMS - mom = -en*fac - mom; - mom /= (fac*fac-gamma*gamma); - temp = mom*temp; - - aHadron.SetMomentum( temp ); // now all in CMS - aHadron.SetTotalEnergy( std::sqrt( mom*mom + aHadron.GetMass()*aHadron.GetMass() ) ); - aHadron.Lorentz(aHadron, trafo); // now in target rest frame -*/ - // Determination of the hadron kinetic energy in CMS - // aHadron.GetKineticEnergy() is actually the residual kinetic energy in CMS (or target frame) - // kineticEnergy is incident neutron kinetic energy in CMS (or target frame) - G4double QValue = aHadron.GetKineticEnergy() - kineticEnergy; - G4double A1 = fCache.Get().theTarget->GetMass()/boostedN.GetMass(); - G4double A1prim = aHadron.GetMass()/ boostedN.GetMass(); - G4double kinE = (A1+1-A1prim)/(A1+1)/(A1+1)*(A1*kineticEnergy+(1+A1)*QValue); - G4double totalE = kinE + aHadron.GetMass(); - G4double mom2 = totalE*totalE - aHadron.GetMass()*aHadron.GetMass(); - G4double mom; - if ( mom2 > 0.0 ) mom = std::sqrt( mom2 ); - else mom = 0.0; + // 080612TK bug fix contribution from Benoit Pirard and Laurent Desorgher (Univ. Bern) #5 + /* + G4double en = aHadron.GetTotalEnergy(); // Target rest - aHadron.SetMomentum( mom*temp ); // Set momentum in CMS - aHadron.SetKineticEnergy(kinE); // Set kinetic energy in CMS + // get trafo from Target rest frame to CMS + G4ReactionProduct boostedT; + boostedT.Lorentz(theTarget, theTarget); - // get trafo from Target rest frame to CMS - G4ReactionProduct boostedT; - boostedT.Lorentz(*fCache.Get().theTarget, *fCache.Get().theTarget); - - G4ThreeVector the3IncidentParticle = boostedN.GetMomentum(); - G4double nEnergy = boostedN.GetTotalEnergy(); - G4ThreeVector the3Target = boostedT.GetMomentum(); - G4double tEnergy = boostedT.GetTotalEnergy(); - G4double totE = nEnergy+tEnergy; - G4ThreeVector the3trafo = -the3Target-the3IncidentParticle; - G4ReactionProduct trafo; // for transformation from CMS to target rest frame - trafo.SetMomentum(the3trafo); - G4double cmsMom = std::sqrt(the3trafo*the3trafo); - G4double sqrts = std::sqrt((totE-cmsMom)*(totE+cmsMom)); - trafo.SetMass(sqrts); - trafo.SetTotalEnergy(totE); + G4ThreeVector the3IncidentParticle = boostedN.GetMomentum(); + G4double nEnergy = boostedN.GetTotalEnergy(); + G4ThreeVector the3Target = boostedT.GetMomentum(); + G4double tEnergy = boostedT.GetTotalEnergy(); + G4double totE = nEnergy+tEnergy; + G4ThreeVector the3trafo = -the3Target-the3IncidentParticle; + G4ReactionProduct trafo; // for transformation from CMS to target rest frame + trafo.SetMomentum(the3trafo); + G4double cmsMom = std::sqrt(the3trafo*the3trafo); + G4double sqrts = std::sqrt((totE-cmsMom)*(totE+cmsMom)); + trafo.SetMass(sqrts); + trafo.SetTotalEnergy(totE); - aHadron.Lorentz(aHadron, trafo); + G4double gamma = trafo.GetTotalEnergy()/trafo.GetMass(); + G4double cosalpha = temp*trafo.GetMomentum()/trafo.GetTotalMomentum()/temp.mag(); + G4double fac = cosalpha*trafo.GetTotalMomentum()/trafo.GetMass(); + fac*=gamma; - } + G4double mom; + // For G4FPE_DEBUG ON + G4double mom2 = ( en*fac*en*fac - + (fac*fac - gamma*gamma)* + (en*en - gamma*gamma*aHadron.GetMass()*aHadron.GetMass()) + ); + if ( mom2 > 0.0 ) + mom = std::sqrt( mom2 ); + else + mom = 0.0; + + mom = -en*fac - mom; + mom /= (fac*fac-gamma*gamma); + temp = mom*temp; + + aHadron.SetMomentum( temp ); // now all in CMS + aHadron.SetTotalEnergy( std::sqrt( mom*mom + aHadron.GetMass()*aHadron.GetMass() ) ); + aHadron.Lorentz(aHadron, trafo); // now in target rest frame + */ + // Determination of the hadron kinetic energy in CMS + // aHadron.GetKineticEnergy() is actually the residual kinetic energy in CMS (or target frame) + // kineticEnergy is incident neutron kinetic energy in CMS (or target frame) + G4double QValue = aHadron.GetKineticEnergy() - kineticEnergy; + G4double A1 = fCache.Get().theTarget->GetMass() / boostedN.GetMass(); + G4double A1prim = aHadron.GetMass() / boostedN.GetMass(); + G4double kinE = + (A1 + 1 - A1prim) / (A1 + 1) / (A1 + 1) * (A1 * kineticEnergy + (1 + A1) * QValue); + G4double totalE = kinE + aHadron.GetMass(); + G4double mom2 = totalE * totalE - aHadron.GetMass() * aHadron.GetMass(); + G4double mom; + if (mom2 > 0.0) + mom = std::sqrt(mom2); else - { - throw G4HadronicException(__FILE__, __LINE__, "Tried to sample non isotropic neutron angular"); - } - aHadron.Lorentz(aHadron, -1.*(*fCache.Get().theTarget)); -// G4cout << aHadron.GetMomentum()<<" "; -// G4cout << aHadron.GetTotalMomentum()<GetKineticEnergy() < fLowEnergyLimitForHPN ) return false; - return (1 < Z); + if (dp->GetKineticEnergy() < fLowEnergyLimitForHPN) return false; + return (1 < Z); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4bool G4ParticleHPBGGNucleonInelasticXS::IsIsoApplicable(const G4DynamicParticle* dp, - G4int Z, G4int A, - const G4Element*, - const G4Material*) +G4bool G4ParticleHPBGGNucleonInelasticXS::IsIsoApplicable(const G4DynamicParticle* dp, G4int Z, + G4int A, const G4Element*, + const G4Material*) { - if ( dp->GetKineticEnergy() < fLowEnergyLimitForHPN ) return false; - return (1 == Z && 2 >= A); + if (dp->GetKineticEnergy() < fLowEnergyLimitForHPN) return false; + return (1 == Z && 2 >= A); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPCapture.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPCapture.cc index 90a9a1ed864..f1fdf14649f 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPCapture.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPCapture.cc @@ -32,145 +32,141 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPCapture.hh" -#include "G4ParticleHPManager.hh" -#include "G4SystemOfUnits.hh" + +#include "G4IonTable.hh" #include "G4ParticleHPCaptureFS.hh" #include "G4ParticleHPDeExGammas.hh" +#include "G4ParticleHPManager.hh" #include "G4ParticleTable.hh" -#include "G4IonTable.hh" +#include "G4SystemOfUnits.hh" #include "G4Threading.hh" - G4ParticleHPCapture::G4ParticleHPCapture() - :G4HadronicInteraction("NeutronHPCapture") - ,theCapture(NULL) - ,numEle(0) - { - SetMinEnergy( 0.0 ); - SetMaxEnergy( 20.*MeV ); -/* -// G4cout << "Capture : start of construction!!!!!!!!"<::iterator - ite = theCapture->begin() ; ite != theCapture->end() ; ite++ ) { - delete *ite; - } - theCapture->clear(); - } - } - } - - #include "G4ParticleHPThermalBoost.hh" - G4HadFinalState * G4ParticleHPCapture::ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& aNucleus ) - { - - //if ( numEle < (G4int)G4Element::GetNumberOfElements() ) addChannelForNewElement(); - - G4ParticleHPManager::GetInstance()->OpenReactionWhiteBoard(); - const G4Material* theMaterial = aTrack.GetMaterial(); - G4int n = (G4int)theMaterial->GetNumberOfElements(); - std::size_t index = theMaterial->GetElement(0)->GetIndex(); - if(n!=1) - { - G4double* xSec = new G4double[n]; - G4double sum=0; - G4int i; - const G4double * NumAtomsPerVolume = theMaterial->GetVecNbOfAtomsPerVolume(); - G4double rWeight; - G4ParticleHPThermalBoost aThermalE; - for (i=0; iGetElement(i)->GetIndex(); - rWeight = NumAtomsPerVolume[i]; - //xSec[i] = theCapture[index].GetXsec(aThermalE.GetThermalEnergy(aTrack, - xSec[i] = ((*theCapture)[index])->GetXsec(aThermalE.GetThermalEnergy(aTrack, - theMaterial->GetElement(i), - theMaterial->GetTemperature())); - xSec[i] *= rWeight; - sum+=xSec[i]; + theCapture.push_back( new G4ParticleHPChannel ); + (*theCapture[i]).Init((*(G4Element::GetElementTable()))[i], dirName); + (*theCapture[i]).Register(theFS); } - G4double random = G4UniformRand(); - G4double running = 0; - for (i=0; iGetElement(i)->GetIndex(); - //if(random<=running/sum) break; - if( sum == 0 || random <= running/sum ) break; + delete theFS; + // G4cout << "-------------------------------------------------"<clear(); } + } +} - //return theCapture[index].ApplyYourself(aTrack); - //G4HadFinalState* result = theCapture[index].ApplyYourself(aTrack); - G4HadFinalState* result = ((*theCapture)[index])->ApplyYourself(aTrack); - - //Overwrite target parameters - aNucleus.SetParameters(G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA(),G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargZ()); - const G4Element* target_element = (*G4Element::GetElementTable())[index]; - const G4Isotope* target_isotope=nullptr; - G4int iele = (G4int)target_element->GetNumberOfIsotopes(); - for ( G4int j = 0 ; j != iele ; ++j ) { - target_isotope=target_element->GetIsotope( j ); - if ( target_isotope->GetN() == G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA() ) break; +#include "G4ParticleHPThermalBoost.hh" +G4HadFinalState* G4ParticleHPCapture::ApplyYourself(const G4HadProjectile& aTrack, + G4Nucleus& aNucleus) +{ + // if ( numEle < (G4int)G4Element::GetNumberOfElements() ) addChannelForNewElement(); + + G4ParticleHPManager::GetInstance()->OpenReactionWhiteBoard(); + const G4Material* theMaterial = aTrack.GetMaterial(); + auto n = (G4int)theMaterial->GetNumberOfElements(); + std::size_t index = theMaterial->GetElement(0)->GetIndex(); + if (n != 1) { + auto xSec = new G4double[n]; + G4double sum = 0; + G4int i; + const G4double* NumAtomsPerVolume = theMaterial->GetVecNbOfAtomsPerVolume(); + G4double rWeight; + G4ParticleHPThermalBoost aThermalE; + for (i = 0; i < n; ++i) { + index = theMaterial->GetElement(i)->GetIndex(); + rWeight = NumAtomsPerVolume[i]; + // xSec[i] = theCapture[index].GetXsec(aThermalE.GetThermalEnergy(aTrack, + xSec[i] = ((*theCapture)[index]) + ->GetXsec(aThermalE.GetThermalEnergy(aTrack, theMaterial->GetElement(i), + theMaterial->GetTemperature())); + xSec[i] *= rWeight; + sum += xSec[i]; } - //G4cout << "Target Material of this reaction is " << theMaterial->GetName() << G4endl; - //G4cout << "Target Element of this reaction is " << target_element->GetName() << G4endl; - //G4cout << "Target Isotope of this reaction is " << target_isotope->GetName() << G4endl; - aNucleus.SetIsotope( target_isotope ); + G4double random = G4UniformRand(); + G4double running = 0; + for (i = 0; i < n; ++i) { + running += xSec[i]; + index = theMaterial->GetElement(i)->GetIndex(); + // if(random<=running/sum) break; + if (sum == 0 || random <= running / sum) break; + } + if (i == n) i = std::max(0, n - 1); + delete[] xSec; + } - G4ParticleHPManager::GetInstance()->CloseReactionWhiteBoard(); - return result; + // return theCapture[index].ApplyYourself(aTrack); + // G4HadFinalState* result = theCapture[index].ApplyYourself(aTrack); + G4HadFinalState* result = ((*theCapture)[index])->ApplyYourself(aTrack); + + // Overwrite target parameters + aNucleus.SetParameters(G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA(), + G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargZ()); + const G4Element* target_element = (*G4Element::GetElementTable())[index]; + const G4Isotope* target_isotope = nullptr; + auto iele = (G4int)target_element->GetNumberOfIsotopes(); + for (G4int j = 0; j != iele; ++j) { + target_isotope = target_element->GetIsotope(j); + if (target_isotope->GetN() + == G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA()) + break; } + // G4cout << "Target Material of this reaction is " << theMaterial->GetName() << G4endl; + // G4cout << "Target Element of this reaction is " << target_element->GetName() << G4endl; + // G4cout << "Target Isotope of this reaction is " << target_isotope->GetName() << G4endl; + aNucleus.SetIsotope(target_isotope); + + G4ParticleHPManager::GetInstance()->CloseReactionWhiteBoard(); + return result; +} const std::pair G4ParticleHPCapture::GetFatalEnergyCheckLevels() const { - // max energy non-conservation is mass of heavy nucleus - return std::pair(10.0*perCent, 350.0*CLHEP::GeV); + // max energy non-conservation is mass of heavy nucleus + return std::pair(10.0 * perCent, 350.0 * CLHEP::GeV); } /* void G4ParticleHPCapture::addChannelForNewElement() { G4ParticleHPCaptureFS* theFS = new G4ParticleHPCaptureFS; - for ( G4int i = numEle ; i < (G4int)G4Element::GetNumberOfElements() ; i++ ) + for ( G4int i = numEle ; i < (G4int)G4Element::GetNumberOfElements() ; i++ ) { - G4cout << "G4ParticleHPCapture Prepairing Data for the new element of " << (*(G4Element::GetElementTable()))[i]->GetName() << G4endl; - theCapture.push_back( new G4ParticleHPChannel ); + G4cout << "G4ParticleHPCapture Prepairing Data for the new element of " << +(*(G4Element::GetElementTable()))[i]->GetName() << G4endl; theCapture.push_back( new +G4ParticleHPChannel ); (*theCapture[i]).Init((*(G4Element::GetElementTable()))[i], dirName); (*theCapture[i]).Register(theFS); } @@ -181,51 +177,51 @@ void G4ParticleHPCapture::addChannelForNewElement() G4int G4ParticleHPCapture::GetVerboseLevel() const { - return G4ParticleHPManager::GetInstance()->GetVerboseLevel(); + return G4ParticleHPManager::GetInstance()->GetVerboseLevel(); } -void G4ParticleHPCapture::SetVerboseLevel( G4int newValue ) +void G4ParticleHPCapture::SetVerboseLevel(G4int newValue) { - G4ParticleHPManager::GetInstance()->SetVerboseLevel(newValue); + G4ParticleHPManager::GetInstance()->SetVerboseLevel(newValue); } void G4ParticleHPCapture::BuildPhysicsTable(const G4ParticleDefinition&) { + G4ParticleHPManager* hpmanager = G4ParticleHPManager::GetInstance(); - G4ParticleHPManager* hpmanager = G4ParticleHPManager::GetInstance(); - - theCapture = hpmanager->GetCaptureFinalStates(); - - if ( G4Threading::IsMasterThread() ) { + theCapture = hpmanager->GetCaptureFinalStates(); - if ( theCapture == nullptr ) theCapture = new std::vector; + if (G4Threading::IsMasterThread()) { + if (theCapture == nullptr) theCapture = new std::vector; - if ( numEle == (G4int)G4Element::GetNumberOfElements() ) return; + if (numEle == (G4int)G4Element::GetNumberOfElements()) return; - if ( theCapture->size() == G4Element::GetNumberOfElements() ) { - numEle = (G4int)G4Element::GetNumberOfElements(); - return; - } + if (theCapture->size() == G4Element::GetNumberOfElements()) { + numEle = (G4int)G4Element::GetNumberOfElements(); + return; + } - if ( !G4FindDataDir("G4NEUTRONHPDATA") ) - throw G4HadronicException(__FILE__, __LINE__, "Please setenv G4NEUTRONHPDATA to point to the neutron cross-section files."); - dirName = G4FindDataDir("G4NEUTRONHPDATA"); - G4String tString = "/Capture"; - dirName = dirName + tString; + if (G4FindDataDir("G4NEUTRONHPDATA") == nullptr) + throw G4HadronicException( + __FILE__, __LINE__, + "Please setenv G4NEUTRONHPDATA to point to the neutron cross-section files."); + dirName = G4FindDataDir("G4NEUTRONHPDATA"); + G4String tString = "/Capture"; + dirName = dirName + tString; - G4ParticleHPCaptureFS * theFS = new G4ParticleHPCaptureFS; - for ( G4int i = numEle ; i < (G4int)G4Element::GetNumberOfElements() ; ++i ) - { - theCapture->push_back( new G4ParticleHPChannel ); - ((*theCapture)[i])->Init((*(G4Element::GetElementTable()))[i], dirName); - ((*theCapture)[i])->Register(theFS); - } - delete theFS; - hpmanager->RegisterCaptureFinalStates( theCapture ); - } - numEle = (G4int)G4Element::GetNumberOfElements(); + auto theFS = new G4ParticleHPCaptureFS; + for (G4int i = numEle; i < (G4int)G4Element::GetNumberOfElements(); ++i) { + theCapture->push_back(new G4ParticleHPChannel); + ((*theCapture)[i])->Init((*(G4Element::GetElementTable()))[i], dirName); + ((*theCapture)[i])->Register(theFS); + } + delete theFS; + hpmanager->RegisterCaptureFinalStates(theCapture); + } + numEle = (G4int)G4Element::GetNumberOfElements(); } void G4ParticleHPCapture::ModelDescription(std::ostream& outFile) const { - outFile << "High Precision model based on Evaluated Nuclear Data Files (ENDF) for radiative capture reaction of neutrons below 20MeV\n"; + outFile << "High Precision model based on Evaluated Nuclear Data Files (ENDF) for radiative " + "capture reaction of neutrons below 20MeV\n"; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPCaptureData.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPCaptureData.cc index 11f3cdc1afe..d55fe22b694 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPCaptureData.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPCaptureData.cc @@ -30,82 +30,77 @@ // 070523 add neglecting doppler broadening on the fly. T. Koi // 070613 fix memory leaking by T. Koi // 071002 enable cross section dump by T. Koi -// 080428 change checking point of "neglecting doppler broadening" flag +// 080428 change checking point of "neglecting doppler broadening" flag // from GetCrossSection to BuildPhysicsTable by T. Koi // 081024 G4NucleiPropertiesTable:: to G4NucleiProperties:: // // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPCaptureData.hh" -#include "G4ParticleHPManager.hh" -#include "G4PhysicalConstants.hh" -#include "G4SystemOfUnits.hh" -#include "G4Neutron.hh" + #include "G4ElementTable.hh" -#include "G4ParticleHPData.hh" -#include "G4ParticleHPManager.hh" -#include "G4Threading.hh" #include "G4HadronicParameters.hh" +#include "G4Neutron.hh" #include "G4NucleiProperties.hh" +#include "G4ParticleHPData.hh" +#include "G4ParticleHPManager.hh" +#include "G4PhysicalConstants.hh" #include "G4Pow.hh" +#include "G4SystemOfUnits.hh" +#include "G4Threading.hh" -G4ParticleHPCaptureData::G4ParticleHPCaptureData() -:G4VCrossSectionDataSet("NeutronHPCaptureXS") +G4ParticleHPCaptureData::G4ParticleHPCaptureData() : G4VCrossSectionDataSet("NeutronHPCaptureXS") { - SetMinKinEnergy( 0*MeV ); - SetMaxKinEnergy( 20*MeV ); - - theCrossSections = 0; - - instanceOfWorker = false; - if ( G4Threading::IsWorkerThread() ) { - instanceOfWorker = true; - } - - element_cache = nullptr; - material_cache = nullptr; - ke_cache = 0.0; - xs_cache = 0.0; - - //BuildPhysicsTable(*G4Neutron::Neutron()); + SetMinKinEnergy(0 * MeV); + SetMaxKinEnergy(20 * MeV); + + theCrossSections = nullptr; + + instanceOfWorker = false; + if (G4Threading::IsWorkerThread()) { + instanceOfWorker = true; + } + + element_cache = nullptr; + material_cache = nullptr; + ke_cache = 0.0; + xs_cache = 0.0; + + // BuildPhysicsTable(*G4Neutron::Neutron()); } - + G4ParticleHPCaptureData::~G4ParticleHPCaptureData() { - if ( theCrossSections != nullptr && instanceOfWorker != true ) { - theCrossSections->clearAndDestroy(); - delete theCrossSections; - theCrossSections = nullptr; - } + if (theCrossSections != nullptr && !instanceOfWorker) { + theCrossSections->clearAndDestroy(); + delete theCrossSections; + theCrossSections = nullptr; + } } - -G4bool G4ParticleHPCaptureData::IsIsoApplicable( const G4DynamicParticle* dp , - G4int /*Z*/ , G4int /*A*/ , - const G4Element* /*elm*/ , - const G4Material* /*mat*/ ) -{ - G4double eKin = dp->GetKineticEnergy(); - if ( eKin > GetMaxKinEnergy() - || eKin < GetMinKinEnergy() - || dp->GetDefinition() != G4Neutron::Neutron() ) return false; - return true; +G4bool G4ParticleHPCaptureData::IsIsoApplicable(const G4DynamicParticle* dp, G4int /*Z*/, + G4int /*A*/, const G4Element* /*elm*/, + const G4Material* /*mat*/) +{ + G4double eKin = dp->GetKineticEnergy(); + return eKin <= GetMaxKinEnergy() && eKin >= GetMinKinEnergy() + && dp->GetDefinition() == G4Neutron::Neutron(); } -G4double G4ParticleHPCaptureData::GetIsoCrossSection( const G4DynamicParticle* dp , - G4int /*Z*/ , G4int /*A*/ , - const G4Isotope* /*iso*/ , - const G4Element* element , - const G4Material* material ) +G4double G4ParticleHPCaptureData::GetIsoCrossSection(const G4DynamicParticle* dp, G4int /*Z*/, + G4int /*A*/, const G4Isotope* /*iso*/, + const G4Element* element, + const G4Material* material) { - if ( dp->GetKineticEnergy() == ke_cache && element == element_cache && material == material_cache ) return xs_cache; - - ke_cache = dp->GetKineticEnergy(); - element_cache = element; - material_cache = material; - G4double xs = GetCrossSection( dp , element , material->GetTemperature() ); - xs_cache = xs; - return xs; + if (dp->GetKineticEnergy() == ke_cache && element == element_cache && material == material_cache) + return xs_cache; + + ke_cache = dp->GetKineticEnergy(); + element_cache = element; + material_cache = material; + G4double xs = GetCrossSection(dp, element, material->GetTemperature()); + xs_cache = xs; + return xs; } /* @@ -120,147 +115,148 @@ G4bool G4ParticleHPCaptureData::IsApplicable(const G4DynamicParticle*aP, const G void G4ParticleHPCaptureData::BuildPhysicsTable(const G4ParticleDefinition& aP) { - if(&aP!=G4Neutron::Neutron()) - throw G4HadronicException(__FILE__, __LINE__, "Attempt to use NeutronHP data for particles other than neutrons!!!"); - - if ( G4Threading::IsWorkerThread() ) { - theCrossSections = G4ParticleHPManager::GetInstance()->GetCaptureCrossSections(); - return; - } - + if (&aP != G4Neutron::Neutron()) + throw G4HadronicException(__FILE__, __LINE__, + "Attempt to use NeutronHP data for particles other than neutrons!!!"); + + if (G4Threading::IsWorkerThread()) { + theCrossSections = G4ParticleHPManager::GetInstance()->GetCaptureCrossSections(); + return; + } + std::size_t numberOfElements = G4Element::GetNumberOfElements(); // G4cout << "CALLED G4ParticleHPCaptureData::BuildPhysicsTable "<clearAndDestroy(); + // TKDB + // if ( theCrossSections == 0 ) theCrossSections = new G4PhysicsTable( numberOfElements ); + if (theCrossSections == nullptr) + theCrossSections = new G4PhysicsTable(numberOfElements); + else + theCrossSections->clearAndDestroy(); // make a PhysicsVector for each element - static G4ThreadLocal G4ElementTable *theElementTable = 0 ; if (!theElementTable) theElementTable= G4Element::GetElementTable(); - for( std::size_t i=0; iGetIndex(); - if ( G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) G4cout << "IndexDebug "<< i <<" "<MakePhysicsVector((*theElementTable)[i], this); - theCrossSections->push_back(physVec); + static G4ThreadLocal G4ElementTable* theElementTable = nullptr; + if (theElementTable == nullptr) theElementTable = G4Element::GetElementTable(); + for (std::size_t i = 0; i < numberOfElements; ++i) { +#ifdef G4VERBOSE + if (std::getenv("CaptureDataIndexDebug") != nullptr) { + std::size_t index_debug = ((*theElementTable)[i])->GetIndex(); + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) + G4cout << "IndexDebug " << i << " " << index_debug << G4endl; + } +#endif + G4PhysicsVector* physVec = G4ParticleHPData::Instance(G4Neutron::Neutron()) + ->MakePhysicsVector((*theElementTable)[i], this); + theCrossSections->push_back(physVec); } - G4ParticleHPManager::GetInstance()->RegisterCaptureCrossSections( theCrossSections ); + G4ParticleHPManager::GetInstance()->RegisterCaptureCrossSections(theCrossSections); } void G4ParticleHPCaptureData::DumpPhysicsTable(const G4ParticleDefinition& aP) { - if(&aP!=G4Neutron::Neutron()) - throw G4HadronicException(__FILE__, __LINE__, "Attempt to use NeutronHP data for particles other than neutrons!!!"); - - #ifdef G4VERBOSE - if ( G4HadronicParameters::Instance()->GetVerboseLevel() == 0 ) return; - -// -// Dump element based cross section -// range 10e-5 eV to 20 MeV -// 10 point per decade -// in barn -// - - G4cout << G4endl; - G4cout << G4endl; - G4cout << "Capture Cross Section of Neutron HP"<< G4endl; - G4cout << "(Pointwise cross-section at 0 Kelvin.)" << G4endl; - G4cout << G4endl; - G4cout << "Name of Element" << G4endl; - G4cout << "Energy[eV] XS[barn]" << G4endl; - G4cout << G4endl; - - std::size_t numberOfElements = G4Element::GetNumberOfElements(); - static G4ThreadLocal G4ElementTable *theElementTable = 0 ; - if (!theElementTable) theElementTable= G4Element::GetElementTable(); + if (&aP != G4Neutron::Neutron()) + throw G4HadronicException(__FILE__, __LINE__, + "Attempt to use NeutronHP data for particles other than neutrons!!!"); + +#ifdef G4VERBOSE + if (G4HadronicParameters::Instance()->GetVerboseLevel() == 0) return; + + // + // Dump element based cross section + // range 10e-5 eV to 20 MeV + // 10 point per decade + // in barn + // + + G4cout << G4endl; + G4cout << G4endl; + G4cout << "Capture Cross Section of Neutron HP" << G4endl; + G4cout << "(Pointwise cross-section at 0 Kelvin.)" << G4endl; + G4cout << G4endl; + G4cout << "Name of Element" << G4endl; + G4cout << "Energy[eV] XS[barn]" << G4endl; + G4cout << G4endl; - for ( std::size_t i = 0 ; i < numberOfElements ; ++i ) - { - - G4cout << (*theElementTable)[i]->GetName() << G4endl; + std::size_t numberOfElements = G4Element::GetNumberOfElements(); + static G4ThreadLocal G4ElementTable* theElementTable = nullptr; + if (theElementTable == nullptr) theElementTable = G4Element::GetElementTable(); - G4int ie = 0; + for (std::size_t i = 0; i < numberOfElements; ++i) { + G4cout << (*theElementTable)[i]->GetName() << G4endl; - for ( ie = 0 ; ie < 130 ; ++ie ) - { - G4double eKinetic = 1.0e-5 * G4Pow::GetInstance()->powA ( 10.0 , ie/10.0 ) *eV; - G4bool outOfRange = false; + G4int ie = 0; - if ( eKinetic < 20*MeV ) - { - G4cout << eKinetic/eV << " " << (*((*theCrossSections)(i))).GetValue(eKinetic, outOfRange)/barn << G4endl; - } + for (ie = 0; ie < 130; ++ie) { + G4double eKinetic = 1.0e-5 * G4Pow::GetInstance()->powA(10.0, ie / 10.0) * eV; + G4bool outOfRange = false; + if (eKinetic < 20 * MeV) { + G4cout << eKinetic / eV << " " + << (*((*theCrossSections)(i))).GetValue(eKinetic, outOfRange) / barn << G4endl; } + } - G4cout << G4endl; - } + G4cout << G4endl; + } - //G4cout << "G4ParticleHPCaptureData::DumpPhysicsTable still to be implemented"<GetIndex(); + auto index = (G4int)anE->GetIndex(); // prepare neutron G4double eKinetic = aP->GetKineticEnergy(); - if ( G4ParticleHPManager::GetInstance()->GetNeglectDoppler() ) - { - //NEGLECT_DOPPLER - G4double factor = 1.0; - if ( eKinetic < aT * k_Boltzmann ) - { - // below 0.1 eV neutrons - // Have to do some, but now just igonre. - // Will take care after performance check. - // factor = factor * targetV; - } - return ( (*((*theCrossSections)(index))).GetValue(eKinetic, outOfRange) )* factor; + if (G4ParticleHPManager::GetInstance()->GetNeglectDoppler()) { + // NEGLECT_DOPPLER + G4double factor = 1.0; + if (eKinetic < aT * k_Boltzmann) { + // below 0.1 eV neutrons + // Have to do some, but now just igonre. + // Will take care after performance check. + // factor = factor * targetV; + } + return ((*((*theCrossSections)(index))).GetValue(eKinetic, outOfRange)) * factor; } - G4ReactionProduct theNeutron( aP->GetDefinition() ); - theNeutron.SetMomentum( aP->GetMomentum() ); - theNeutron.SetKineticEnergy( eKinetic ); + G4ReactionProduct theNeutron(aP->GetDefinition()); + theNeutron.SetMomentum(aP->GetMomentum()); + theNeutron.SetKineticEnergy(eKinetic); // prepare thermal nucleus G4Nucleus aNuc; G4double eps = 0.0001; G4double theA = anE->GetN(); G4double theZ = anE->GetZ(); - G4double eleMass; - eleMass = G4NucleiProperties::GetNuclearMass( static_cast(theA+eps) , static_cast(theZ+eps) ) / G4Neutron::Neutron()->GetPDGMass(); - + G4double eleMass; + eleMass = G4NucleiProperties::GetNuclearMass(static_cast(theA + eps), + static_cast(theZ + eps)) + / G4Neutron::Neutron()->GetPDGMass(); + G4ReactionProduct boosted; G4double aXsection; - + // MC integration loop G4int counter = 0; G4double buffer = 0; - G4int size = G4int(std::max(10., aT/60*kelvin)); - G4ThreeVector neutronVelocity = 1./G4Neutron::Neutron()->GetPDGMass()*theNeutron.GetMomentum(); + G4int size = G4int(std::max(10., aT / 60 * kelvin)); + G4ThreeVector neutronVelocity = + 1. / G4Neutron::Neutron()->GetPDGMass() * theNeutron.GetMomentum(); G4double neutronVMag = neutronVelocity.mag(); - while(counter == 0 || std::abs(buffer-result/std::max(1,counter)) > 0.03*buffer) // Loop checking, 11.05.2015, T. Koi + while (counter == 0 + || std::abs(buffer - result / std::max(1, counter)) + > 0.03 * buffer) // Loop checking, 11.05.2015, T. Koi { - if(counter) buffer = result/counter; - while (counterGetVerboseLevel(); + return G4ParticleHPManager::GetInstance()->GetVerboseLevel(); } -void G4ParticleHPCaptureData::SetVerboseLevel( G4int newValue ) +void G4ParticleHPCaptureData::SetVerboseLevel(G4int newValue) { - G4ParticleHPManager::GetInstance()->SetVerboseLevel(newValue); + G4ParticleHPManager::GetInstance()->SetVerboseLevel(newValue); } void G4ParticleHPCaptureData::CrossSectionDescription(std::ostream& outFile) const { - outFile << "High Precision cross data based on Evaluated Nuclear Data Files (ENDF) for radiative capture reaction of neutrons below 20MeV\n" ; + outFile << "High Precision cross data based on Evaluated Nuclear Data Files (ENDF) for radiative " + "capture reaction of neutrons below 20MeV\n"; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPCaptureFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPCaptureFS.cc index 5f1b7ca059e..3ea318021b8 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPCaptureFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPCaptureFS.cc @@ -27,364 +27,357 @@ // J.P. Wellisch, Nov-1996 // A prototype of the low energy neutron transport model. // -// 12-April-06 Enable IC electron emissions T. Koi +// 12-April-06 Enable IC electron emissions T. Koi // 26-January-07 Add G4NEUTRONHP_USE_ONLY_PHOTONEVAPORATION flag // 081024 G4NucleiPropertiesTable:: to G4NucleiProperties:: -// 101203 Bugzilla/Geant4 Problem 1155 Lack of residual in some case +// 101203 Bugzilla/Geant4 Problem 1155 Lack of residual in some case // 110430 Temporary solution in the case of being MF6 final state in Capture reaction (MT102) // // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPCaptureFS.hh" -#include "G4ParticleHPManager.hh" -#include "G4PhysicalConstants.hh" -#include "G4SystemOfUnits.hh" + +#include "G4Fragment.hh" #include "G4Gamma.hh" -#include "G4ReactionProduct.hh" +#include "G4IonTable.hh" #include "G4Nucleus.hh" -#include "G4PhotonEvaporation.hh" -#include "G4Fragment.hh" -#include "G4IonTable.hh" #include "G4ParticleHPDataUsed.hh" +#include "G4ParticleHPManager.hh" +#include "G4PhotonEvaporation.hh" +#include "G4PhysicalConstants.hh" #include "G4PhysicsModelCatalog.hh" - +#include "G4ReactionProduct.hh" +#include "G4SystemOfUnits.hh" G4ParticleHPCaptureFS::G4ParticleHPCaptureFS() - { - secID = G4PhysicsModelCatalog::GetModelID( "model_NeutronHPCapture" ); - hasXsec = false; - hasExactMF6 = false; - targetMass = 0; - } - - - G4HadFinalState * G4ParticleHPCaptureFS::ApplyYourself(const G4HadProjectile & theTrack) - { - - if ( theResult.Get() == nullptr ) theResult.Put( new G4HadFinalState ); - theResult.Get()->Clear(); - - G4int i; - -// prepare neutron - G4double eKinetic = theTrack.GetKineticEnergy(); - const G4HadProjectile *incidentParticle = &theTrack; - G4ReactionProduct theNeutron( const_cast(incidentParticle->GetDefinition() ) ); - theNeutron.SetMomentum( incidentParticle->Get4Momentum().vect() ); - theNeutron.SetKineticEnergy( eKinetic ); - - // Prepare target - G4ReactionProduct theTarget; - G4Nucleus aNucleus; - G4double eps = 0.0001; - if (targetMass < 500*MeV) targetMass = - (G4NucleiProperties::GetNuclearMass(static_cast(theBaseA+eps), static_cast(theBaseZ+eps) )) / - G4Neutron::Neutron()->GetPDGMass(); - G4ThreeVector neutronVelocity = 1./G4Neutron::Neutron()->GetPDGMass()*theNeutron.GetMomentum(); - G4double temperature = theTrack.GetMaterial()->GetTemperature(); - theTarget = aNucleus.GetBiasedThermalNucleus(targetMass, neutronVelocity, temperature); - theTarget.SetDefinitionAndUpdateE( G4IonTable::GetIonTable()->GetIon(G4int(theBaseZ), G4int(theBaseA), 0.0) ); - - // Put neutron in nucleus rest system - theNeutron.Lorentz(theNeutron, theTarget); - eKinetic = theNeutron.GetKineticEnergy(); - - // Sample the photons - G4ReactionProductVector * thePhotons = 0; - if ( HasFSData() && !G4ParticleHPManager::GetInstance()->GetUseOnlyPhotoEvaporation() ) - { - //NDL has final state data - if ( hasExactMF6 ) { - theMF6FinalState.SetTarget(theTarget); - theMF6FinalState.SetProjectileRP(theNeutron); - thePhotons = theMF6FinalState.Sample( eKinetic ); - } else { - thePhotons = theFinalStatePhotons.GetPhotons(eKinetic); - } - if ( thePhotons == NULL ) { - throw G4HadronicException(__FILE__, __LINE__, "Final state data for photon is not properly allocated"); - } +{ + secID = G4PhysicsModelCatalog::GetModelID("model_NeutronHPCapture"); + hasXsec = false; + hasExactMF6 = false; + targetMass = 0; +} + +G4HadFinalState* G4ParticleHPCaptureFS::ApplyYourself(const G4HadProjectile& theTrack) +{ + if (theResult.Get() == nullptr) theResult.Put(new G4HadFinalState); + theResult.Get()->Clear(); + + G4int i; + + // prepare neutron + G4double eKinetic = theTrack.GetKineticEnergy(); + const G4HadProjectile* incidentParticle = &theTrack; + G4ReactionProduct theNeutron( + const_cast(incidentParticle->GetDefinition())); + theNeutron.SetMomentum(incidentParticle->Get4Momentum().vect()); + theNeutron.SetKineticEnergy(eKinetic); + + // Prepare target + G4ReactionProduct theTarget; + G4Nucleus aNucleus; + G4double eps = 0.0001; + if (targetMass < 500 * MeV) + targetMass = (G4NucleiProperties::GetNuclearMass(static_cast(theBaseA + eps), + static_cast(theBaseZ + eps))) + / G4Neutron::Neutron()->GetPDGMass(); + G4ThreeVector neutronVelocity = + 1. / G4Neutron::Neutron()->GetPDGMass() * theNeutron.GetMomentum(); + G4double temperature = theTrack.GetMaterial()->GetTemperature(); + theTarget = aNucleus.GetBiasedThermalNucleus(targetMass, neutronVelocity, temperature); + theTarget.SetDefinitionAndUpdateE( + G4IonTable::GetIonTable()->GetIon(G4int(theBaseZ), G4int(theBaseA), 0.0)); + + // Put neutron in nucleus rest system + theNeutron.Lorentz(theNeutron, theTarget); + eKinetic = theNeutron.GetKineticEnergy(); + + // Sample the photons + G4ReactionProductVector* thePhotons = nullptr; + if (HasFSData() && !G4ParticleHPManager::GetInstance()->GetUseOnlyPhotoEvaporation()) { + // NDL has final state data + if (hasExactMF6) { + theMF6FinalState.SetTarget(theTarget); + theMF6FinalState.SetProjectileRP(theNeutron); + thePhotons = theMF6FinalState.Sample(eKinetic); + } + else { + thePhotons = theFinalStatePhotons.GetPhotons(eKinetic); } - else - { - //NDL does not have final state data or forced to use PhotoEvaporation model - G4ThreeVector aCMSMomentum = theNeutron.GetMomentum()+theTarget.GetMomentum(); - G4LorentzVector p4(aCMSMomentum, theTarget.GetTotalEnergy() + theNeutron.GetTotalEnergy()); - G4Fragment nucleus(static_cast(theBaseA+1), static_cast(theBaseZ) ,p4); - G4PhotonEvaporation photonEvaporation; + if (thePhotons == nullptr) { + throw G4HadronicException(__FILE__, __LINE__, + "Final state data for photon is not properly allocated"); + } + } + else { + // NDL does not have final state data or forced to use PhotoEvaporation model + G4ThreeVector aCMSMomentum = theNeutron.GetMomentum() + theTarget.GetMomentum(); + G4LorentzVector p4(aCMSMomentum, theTarget.GetTotalEnergy() + theNeutron.GetTotalEnergy()); + G4Fragment nucleus(static_cast(theBaseA + 1), static_cast(theBaseZ), p4); + G4PhotonEvaporation photonEvaporation; + // T. K. add + photonEvaporation.SetICM(TRUE); + G4FragmentVector* products = photonEvaporation.BreakItUp(nucleus); + thePhotons = new G4ReactionProductVector; + for (auto it = products->cbegin(); it != products->cend(); ++it) { + auto theOne = new G4ReactionProduct; // T. K. add - photonEvaporation.SetICM( TRUE ); - G4FragmentVector* products = photonEvaporation.BreakItUp(nucleus); - thePhotons = new G4ReactionProductVector; - for(auto it=products->cbegin(); it!=products->cend(); ++it) - { - G4ReactionProduct * theOne = new G4ReactionProduct; - // T. K. add - if ( (*it)->GetParticleDefinition() != 0 ) - theOne->SetDefinition( (*it)->GetParticleDefinition() ); - else - theOne->SetDefinition( G4Gamma::Gamma() ); // this definiion will be over writen - - // T. K. comment out below line - //theOne->SetDefinition( G4Gamma::Gamma() ); - G4IonTable* theTable = G4IonTable::GetIonTable(); - if ( (*it)->GetMomentum().mag() > 10*MeV) - theOne->SetDefinition(theTable->GetIon(static_cast(theBaseZ), static_cast(theBaseA+1), 0) ); - - if ( (*it)->GetExcitationEnergy() > 1.0e-2*eV) { - G4double ex = (*it)->GetExcitationEnergy(); - G4ReactionProduct* aPhoton = new G4ReactionProduct; - aPhoton->SetDefinition( G4Gamma::Gamma() ); - aPhoton->SetMomentum( (*it)->GetMomentum().vect().unit() * ex ); - //aPhoton->SetTotalEnergy( ex ); //will be calculated from momentum - thePhotons->push_back(aPhoton); - } - - theOne->SetMomentum( (*it)->GetMomentum().vect() * ( (*it)->GetMomentum().t() - (*it)->GetExcitationEnergy() ) / (*it)->GetMomentum().t() ) ; - thePhotons->push_back(theOne); - delete *it; - } - delete products; + if ((*it)->GetParticleDefinition() != nullptr) + theOne->SetDefinition((*it)->GetParticleDefinition()); + else + theOne->SetDefinition(G4Gamma::Gamma()); // this definiion will be over writen + + // T. K. comment out below line + // theOne->SetDefinition( G4Gamma::Gamma() ); + G4IonTable* theTable = G4IonTable::GetIonTable(); + if ((*it)->GetMomentum().mag() > 10 * MeV) + theOne->SetDefinition( + theTable->GetIon(static_cast(theBaseZ), static_cast(theBaseA + 1), 0)); + + if ((*it)->GetExcitationEnergy() > 1.0e-2 * eV) { + G4double ex = (*it)->GetExcitationEnergy(); + auto aPhoton = new G4ReactionProduct; + aPhoton->SetDefinition(G4Gamma::Gamma()); + aPhoton->SetMomentum((*it)->GetMomentum().vect().unit() * ex); + // aPhoton->SetTotalEnergy( ex ); //will be calculated from momentum + thePhotons->push_back(aPhoton); + } + + theOne->SetMomentum((*it)->GetMomentum().vect() + * ((*it)->GetMomentum().t() - (*it)->GetExcitationEnergy()) + / (*it)->GetMomentum().t()); + thePhotons->push_back(theOne); + delete *it; } + delete products; + } - // Add them to the final state - G4int nPhotons = 0; - nPhotons=(G4int)thePhotons->size(); - -///* - if ( ! G4ParticleHPManager::GetInstance()->GetDoNotAdjustFinalState() ) { -//Make at least one photon -//101203 TK - if ( nPhotons == 0 ) - { - G4ReactionProduct* theOne = new G4ReactionProduct; - theOne->SetDefinition( G4Gamma::Gamma() ); - // Bug #1745 DHW G4double theta = pi*G4UniformRand(); - G4double costheta = 2.*G4UniformRand()-1.; - G4double theta = std::acos(costheta); - G4double phi = twopi*G4UniformRand(); - G4double sinth = std::sin(theta); - G4ThreeVector direction(sinth*std::cos(phi), sinth*std::sin(phi), costheta); - theOne->SetMomentum(direction); - thePhotons->push_back(theOne); - ++nPhotons; // 0 -> 1 + // Add them to the final state + G4int nPhotons = 0; + nPhotons = (G4int)thePhotons->size(); + + ///* + if (!G4ParticleHPManager::GetInstance()->GetDoNotAdjustFinalState()) { + // Make at least one photon + // 101203 TK + if (nPhotons == 0) { + auto theOne = new G4ReactionProduct; + theOne->SetDefinition(G4Gamma::Gamma()); + // Bug #1745 DHW G4double theta = pi*G4UniformRand(); + G4double costheta = 2. * G4UniformRand() - 1.; + G4double theta = std::acos(costheta); + G4double phi = twopi * G4UniformRand(); + G4double sinth = std::sin(theta); + G4ThreeVector direction(sinth * std::cos(phi), sinth * std::sin(phi), costheta); + theOne->SetMomentum(direction); + thePhotons->push_back(theOne); + ++nPhotons; // 0 -> 1 } -//One photon case: energy set to Q-value -//101203 TK - //if ( nPhotons == 1 ) - if ( nPhotons == 1 && thePhotons->operator[](0)->GetDefinition()->GetBaryonNumber() == 0 ) - { - G4ThreeVector direction = thePhotons->operator[](0)->GetMomentum().unit(); - - G4double Q = G4IonTable::GetIonTable()->GetIonMass(static_cast(theBaseZ), static_cast(theBaseA), 0) + G4Neutron::Neutron()->GetPDGMass() - - G4IonTable::GetIonTable()->GetIonMass(static_cast(theBaseZ), static_cast(theBaseA+1), 0); - - thePhotons->operator[](0)->SetMomentum( Q*direction ); - } -// + // One photon case: energy set to Q-value + // 101203 TK + // if ( nPhotons == 1 ) + if (nPhotons == 1 && thePhotons->operator[](0)->GetDefinition()->GetBaryonNumber() == 0) { + G4ThreeVector direction = thePhotons->operator[](0)->GetMomentum().unit(); + + G4double Q = G4IonTable::GetIonTable()->GetIonMass(static_cast(theBaseZ), + static_cast(theBaseA), 0) + + G4Neutron::Neutron()->GetPDGMass() + - G4IonTable::GetIonTable()->GetIonMass(static_cast(theBaseZ), + static_cast(theBaseA + 1), 0); + + thePhotons->operator[](0)->SetMomentum(Q * direction); } + // + } + + // back to lab system + for (i = 0; i < nPhotons; i++) { + thePhotons->operator[](i)->Lorentz(*(thePhotons->operator[](i)), -1 * theTarget); + } + // Recoil, if only one gamma + // if (1==nPhotons) + if (nPhotons == 1 && thePhotons->operator[](0)->GetDefinition()->GetBaryonNumber() == 0) { + auto theOne = new G4DynamicParticle; + G4ParticleDefinition* aRecoil = G4IonTable::GetIonTable()->GetIon( + static_cast(theBaseZ), static_cast(theBaseA + 1), 0); + theOne->SetDefinition(aRecoil); + // Now energy; + // Can be done slightly better @ + G4ThreeVector aMomentum = theTrack.Get4Momentum().vect() + theTarget.GetMomentum() + - thePhotons->operator[](0)->GetMomentum(); + + // TKDB 140520 + // G4ThreeVector theMomUnit = aMomentum.unit(); + // G4double aKinEnergy = theTrack.GetKineticEnergy() + // +theTarget.GetKineticEnergy(); // gammas come from Q-value + // G4double theResMass = aRecoil->GetPDGMass(); + // G4double theResE = aRecoil->GetPDGMass()+aKinEnergy; + // G4double theAbsMom = std::sqrt(theResE*theResE - theResMass*theResMass); + // G4ThreeVector theMomentum = theAbsMom*theMomUnit; + // theOne->SetMomentum(theMomentum); + + theOne->SetMomentum(aMomentum); + theResult.Get()->AddSecondary(theOne, secID); + } + + // Now fill in the gammas. + for (i = 0; i < nPhotons; i++) { // back to lab system - for(i=0; ioperator[](i)->Lorentz(*(thePhotons->operator[](i)), -1*theTarget); - } - - // Recoil, if only one gamma - //if (1==nPhotons) - if ( nPhotons == 1 && thePhotons->operator[](0)->GetDefinition()->GetBaryonNumber() == 0 ) - { - G4DynamicParticle * theOne = new G4DynamicParticle; - G4ParticleDefinition * aRecoil = G4IonTable::GetIonTable() - ->GetIon(static_cast(theBaseZ), static_cast(theBaseA+1), 0); - theOne->SetDefinition(aRecoil); - // Now energy; - // Can be done slightly better @ - G4ThreeVector aMomentum = theTrack.Get4Momentum().vect() - +theTarget.GetMomentum() - -thePhotons->operator[](0)->GetMomentum(); - - //TKDB 140520 - //G4ThreeVector theMomUnit = aMomentum.unit(); - //G4double aKinEnergy = theTrack.GetKineticEnergy() - // +theTarget.GetKineticEnergy(); // gammas come from Q-value - //G4double theResMass = aRecoil->GetPDGMass(); - //G4double theResE = aRecoil->GetPDGMass()+aKinEnergy; - //G4double theAbsMom = std::sqrt(theResE*theResE - theResMass*theResMass); - //G4ThreeVector theMomentum = theAbsMom*theMomUnit; - //theOne->SetMomentum(theMomentum); - - theOne->SetMomentum(aMomentum); - theResult.Get()->AddSecondary(theOne, secID); - } + auto theOne = new G4DynamicParticle; + theOne->SetDefinition(thePhotons->operator[](i)->GetDefinition()); + theOne->SetMomentum(thePhotons->operator[](i)->GetMomentum()); + theResult.Get()->AddSecondary(theOne, secID); + delete thePhotons->operator[](i); + } + delete thePhotons; + + // 101203TK + G4bool residual = false; + G4ParticleDefinition* aRecoil = G4IonTable::GetIonTable()->GetIon( + static_cast(theBaseZ), static_cast(theBaseA + 1), 0); + for (std::size_t j = 0; j != theResult.Get()->GetNumberOfSecondaries(); j++) { + if (theResult.Get()->GetSecondary(j)->GetParticle()->GetDefinition() == aRecoil) + residual = true; + } - // Now fill in the gammas. - for(i=0; iSetDefinition(thePhotons->operator[](i)->GetDefinition()); - theOne->SetMomentum(thePhotons->operator[](i)->GetMomentum()); - theResult.Get()->AddSecondary(theOne, secID); - delete thePhotons->operator[](i); - } - delete thePhotons; - -//101203TK - G4bool residual = false; - G4ParticleDefinition * aRecoil = G4IonTable::GetIonTable() - ->GetIon(static_cast(theBaseZ), static_cast(theBaseA+1), 0); - for ( std::size_t j = 0 ; j != theResult.Get()->GetNumberOfSecondaries() ; j++ ) - { - if ( theResult.Get()->GetSecondary(j)->GetParticle()->GetDefinition() == aRecoil ) residual = true; + if (!residual) { + G4int nNonZero = 0; + G4LorentzVector p_photons(0, 0, 0, 0); + for (std::size_t j = 0; j != theResult.Get()->GetNumberOfSecondaries(); j++) { + p_photons += theResult.Get()->GetSecondary(j)->GetParticle()->Get4Momentum(); + // To many 0 momentum photons -> Check PhotonDist + if (theResult.Get()->GetSecondary(j)->GetParticle()->Get4Momentum().e() > 0) nNonZero++; } - if ( residual == false ) - { - G4int nNonZero = 0; - G4LorentzVector p_photons(0,0,0,0); - for ( std::size_t j = 0 ; j != theResult.Get()->GetNumberOfSecondaries() ; j++ ) - { - p_photons += theResult.Get()->GetSecondary(j)->GetParticle()->Get4Momentum(); - // To many 0 momentum photons -> Check PhotonDist - if ( theResult.Get()->GetSecondary(j)->GetParticle()->Get4Momentum().e() > 0 ) nNonZero++; - } - - // Can we include kinetic energy here? - G4double deltaE = ( theTrack.Get4Momentum().e() + theTarget.GetTotalEnergy() ) - - ( p_photons.e() + aRecoil->GetPDGMass() ); - -//Add photons - if ( nPhotons - nNonZero > 0 ) - { - //G4cout << "TKDB G4ParticleHPCaptureFS::ApplyYourself we will create additional " << nPhotons - nNonZero << " photons" << G4endl; - std::vector vRand; - vRand.push_back( 0.0 ); - for ( G4int j = 0 ; j != nPhotons - nNonZero - 1 ; j++ ) - { - vRand.push_back( G4UniformRand() ); - } - vRand.push_back( 1.0 ); - std::sort( vRand.begin(), vRand.end() ); - - std::vector vEPhoton; - for ( G4int j = 0 ; j < (G4int)vRand.size() - 1 ; j++ ) - { - vEPhoton.push_back( deltaE * ( vRand[j+1] - vRand[j] ) ); - } - std::sort( vEPhoton.begin(), vEPhoton.end() ); - - for ( G4int j = 0 ; j < nPhotons - nNonZero - 1 ; j++ ) - { - //Isotopic in LAB OK? - // Bug # 1745 DHW G4double theta = pi*G4UniformRand(); - G4double costheta = 2.*G4UniformRand()-1.; - G4double theta = std::acos(costheta); - G4double phi = twopi*G4UniformRand(); - G4double sinth = std::sin(theta); - G4double en = vEPhoton[j]; - G4ThreeVector tempVector(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*costheta); - - p_photons += G4LorentzVector ( tempVector, tempVector.mag() ); - G4DynamicParticle * theOne = new G4DynamicParticle; - theOne->SetDefinition( G4Gamma::Gamma() ); - theOne->SetMomentum( tempVector ); - theResult.Get()->AddSecondary(theOne, secID); - } - -// Add last photon - G4DynamicParticle * theOne = new G4DynamicParticle; - theOne->SetDefinition( G4Gamma::Gamma() ); -// For better momentum conservation - G4ThreeVector lastPhoton = -p_photons.vect().unit()*vEPhoton.back(); - p_photons += G4LorentzVector( lastPhoton , lastPhoton.mag() ); - theOne->SetMomentum( lastPhoton ); - theResult.Get()->AddSecondary(theOne, secID); - } - -//Add residual - G4DynamicParticle * theOne = new G4DynamicParticle; - G4ThreeVector aMomentum = theTrack.Get4Momentum().vect() + theTarget.GetMomentum() - - p_photons.vect(); - theOne->SetDefinition(aRecoil); - theOne->SetMomentum( aMomentum ); - theResult.Get()->AddSecondary(theOne, secID); - + // Can we include kinetic energy here? + G4double deltaE = (theTrack.Get4Momentum().e() + theTarget.GetTotalEnergy()) + - (p_photons.e() + aRecoil->GetPDGMass()); + + // Add photons + if (nPhotons - nNonZero > 0) { + // G4cout << "TKDB G4ParticleHPCaptureFS::ApplyYourself we will create additional " << + // nPhotons - nNonZero << " photons" << G4endl; + std::vector vRand; + vRand.push_back(0.0); + for (G4int j = 0; j != nPhotons - nNonZero - 1; j++) { + vRand.push_back(G4UniformRand()); + } + vRand.push_back(1.0); + std::sort(vRand.begin(), vRand.end()); + + std::vector vEPhoton; + for (G4int j = 0; j < (G4int)vRand.size() - 1; j++) { + vEPhoton.push_back(deltaE * (vRand[j + 1] - vRand[j])); + } + std::sort(vEPhoton.begin(), vEPhoton.end()); + + for (G4int j = 0; j < nPhotons - nNonZero - 1; j++) { + // Isotopic in LAB OK? + // Bug # 1745 DHW G4double theta = pi*G4UniformRand(); + G4double costheta = 2. * G4UniformRand() - 1.; + G4double theta = std::acos(costheta); + G4double phi = twopi * G4UniformRand(); + G4double sinth = std::sin(theta); + G4double en = vEPhoton[j]; + G4ThreeVector tempVector(en * sinth * std::cos(phi), en * sinth * std::sin(phi), + en * costheta); + + p_photons += G4LorentzVector(tempVector, tempVector.mag()); + auto theOne = new G4DynamicParticle; + theOne->SetDefinition(G4Gamma::Gamma()); + theOne->SetMomentum(tempVector); + theResult.Get()->AddSecondary(theOne, secID); + } + + // Add last photon + auto theOne = new G4DynamicParticle; + theOne->SetDefinition(G4Gamma::Gamma()); + // For better momentum conservation + G4ThreeVector lastPhoton = -p_photons.vect().unit() * vEPhoton.back(); + p_photons += G4LorentzVector(lastPhoton, lastPhoton.mag()); + theOne->SetMomentum(lastPhoton); + theResult.Get()->AddSecondary(theOne, secID); } -//101203TK END -// clean up the primary neutron - theResult.Get()->SetStatusChange(stopAndKill); - return theResult.Get(); + // Add residual + auto theOne = new G4DynamicParticle; + G4ThreeVector aMomentum = + theTrack.Get4Momentum().vect() + theTarget.GetMomentum() - p_photons.vect(); + theOne->SetDefinition(aRecoil); + theOne->SetMomentum(aMomentum); + theResult.Get()->AddSecondary(theOne, secID); + } + // 101203TK END + + // clean up the primary neutron + theResult.Get()->SetStatusChange(stopAndKill); + return theResult.Get(); +} + +#include +void G4ParticleHPCaptureFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String&, + G4ParticleDefinition*) +{ + // TK110430 BEGIN + std::stringstream ss; + ss << static_cast(Z); + G4String sZ; + ss >> sZ; + ss.clear(); + ss << static_cast(A); + G4String sA; + ss >> sA; + + ss.clear(); + G4String sM; + if (M > 0) { + ss << "m"; + ss << M; + ss >> sM; + ss.clear(); } -#include - void G4ParticleHPCaptureFS::Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String &, G4ParticleDefinition* ) - { - - //TK110430 BEGIN - std::stringstream ss; - ss << static_cast(Z); - G4String sZ; - ss >> sZ; - ss.clear(); - ss << static_cast(A); - G4String sA; - ss >> sA; - - ss.clear(); - G4String sM; - if ( M > 0 ) - { - ss << "m"; - ss << M; - ss >> sM; - ss.clear(); - } - - G4String element_name = theNames.GetName( static_cast(Z)-1 ); - G4String filenameMF6 = dirName+"/FSMF6/"+sZ+"_"+sA+sM+"_"+element_name; - //std::ifstream dummyIFS(filenameMF6, std::ios::in); - //if ( dummyIFS.good() == true ) hasExactMF6=true; - std::istringstream theData(std::ios::in); - G4ParticleHPManager::GetInstance()->GetDataStream(filenameMF6,theData); - - //TK110430 Only use MF6MT102 which has exactly same A and Z - //Even _nat_ do not select and there is no _nat_ case in ENDF-VII.0 - if ( theData.good() == true ) { - hasExactMF6=true; - theMF6FinalState.Init(theData); - //theData.close(); - return; - } - //TK110430 END - - - G4String tString = "/FS"; - G4bool dbool; - G4ParticleHPDataUsed aFile = theNames.GetName(static_cast(A), static_cast(Z), M, dirName, tString, dbool); - - G4String filename = aFile.GetName(); - SetAZMs( A, Z, M, aFile ); - //theBaseA = A; - //theBaseZ = G4int(Z+.5); - if(!dbool || ( Z<2.5 && ( std::abs(theBaseZ - Z)>0.0001 || std::abs(theBaseA - A)>0.0001))) - { - hasAnyData = false; - hasFSData = false; - hasXsec = false; - return; - } - //std::ifstream theData(filename, std::ios::in); - //std::istringstream theData(std::ios::in); - theData.clear(); - G4ParticleHPManager::GetInstance()->GetDataStream(filename,theData); - hasFSData = theFinalStatePhotons.InitMean(theData); - if(hasFSData) - { - targetMass = theFinalStatePhotons.GetTargetMass(); - theFinalStatePhotons.InitAngular(theData); - theFinalStatePhotons.InitEnergies(theData); - } - //theData.close(); + G4String element_name = theNames.GetName(static_cast(Z) - 1); + G4String filenameMF6 = dirName + "/FSMF6/" + sZ + "_" + sA + sM + "_" + element_name; + // std::ifstream dummyIFS(filenameMF6, std::ios::in); + // if ( dummyIFS.good() == true ) hasExactMF6=true; + std::istringstream theData(std::ios::in); + G4ParticleHPManager::GetInstance()->GetDataStream(filenameMF6, theData); + + // TK110430 Only use MF6MT102 which has exactly same A and Z + // Even _nat_ do not select and there is no _nat_ case in ENDF-VII.0 + if (theData.good()) { + hasExactMF6 = true; + theMF6FinalState.Init(theData); + // theData.close(); + return; + } + // TK110430 END + + G4String tString = "/FS"; + G4bool dbool; + G4ParticleHPDataUsed aFile = + theNames.GetName(static_cast(A), static_cast(Z), M, dirName, tString, dbool); + + G4String filename = aFile.GetName(); + SetAZMs(A, Z, M, aFile); + // theBaseA = A; + // theBaseZ = G4int(Z+.5); + if (!dbool || (Z < 2.5 && (std::abs(theBaseZ - Z) > 0.0001 || std::abs(theBaseA - A) > 0.0001))) { + hasAnyData = false; + hasFSData = false; + hasXsec = false; + return; + } + // std::ifstream theData(filename, std::ios::in); + // std::istringstream theData(std::ios::in); + theData.clear(); + G4ParticleHPManager::GetInstance()->GetDataStream(filename, theData); + hasFSData = theFinalStatePhotons.InitMean(theData); + if (hasFSData) { + targetMass = theFinalStatePhotons.GetTargetMass(); + theFinalStatePhotons.InitAngular(theData); + theFinalStatePhotons.InitEnergies(theData); } + // theData.close(); +} diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPChannel.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPChannel.cc index 13e843fa8ce..a5dd7c0c028 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPChannel.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPChannel.cc @@ -28,7 +28,7 @@ // A prototype of the low energy neutron transport model. // // 070523 bug fix for G4FPE_DEBUG on by A. Howard ( and T. Koi) -// 071031 bug fix T. Koi on behalf of A. Howard +// 071031 bug fix T. Koi on behalf of A. Howard // 081203 bug fix in Register method by T. Koi // // P. Arce, June-2014 Conversion neutron_hp to particle_hp @@ -37,309 +37,305 @@ // data library if the G4NEUTRONHP_SKIP_MISSING_ISOTOPES environmental // flag is defined. The missing XS are set to 0. - -#include - #include "G4ParticleHPChannel.hh" -#include "globals.hh" -#include "G4SystemOfUnits.hh" -#include "G4ParticleHPFinalState.hh" + #include "G4HadTmpUtil.hh" -#include "G4ParticleHPThermalBoost.hh" +#include "G4ParticleHPElasticFS.hh" +#include "G4ParticleHPFinalState.hh" #include "G4ParticleHPReactionWhiteBoard.hh" +#include "G4ParticleHPThermalBoost.hh" +#include "G4SystemOfUnits.hh" +#include "globals.hh" + +#include G4double G4ParticleHPChannel::GetXsec(G4double energy) { return std::max(0., theChannelData->GetXsec(energy)); } - + G4double G4ParticleHPChannel::GetWeightedXsec(G4double energy, G4int isoNumber) { return theIsotopeWiseData[isoNumber].GetXsec(energy); } - + G4double G4ParticleHPChannel::GetFSCrossSection(G4double energy, G4int isoNumber) { return theFinalStates[isoNumber]->GetXsec(energy); } - - void G4ParticleHPChannel:: - Init(G4Element * anElement, const G4String dirName, const G4String aFSType) - { - theFSType = aFSType; - Init(anElement, dirName); - } - - void G4ParticleHPChannel::Init(G4Element * anElement, const G4String dirName) - { - theDir = dirName; - theElement = anElement; - } - - G4bool G4ParticleHPChannel::Register(G4ParticleHPFinalState *theFS) - { - registerCount++; - G4int Z = G4lrint(theElement->GetZ()); - Z = Z-registerCount; - if ( registerCount > 5 ) throw G4HadronicException(__FILE__, __LINE__, "Channel: Do not know what to do with this material"); // for Elastic, Capture, Fission case - if ( Z < 1 ) return false; -/* - if(registerCount<5) - { - Z = Z-registerCount; - } -*/ - //if(Z=theElement->GetZ()-5) throw G4HadronicException(__FILE__, __LINE__, "Channel: Do not know what to do with this material"); - // Bug fix by TK on behalf of AH - //if ( Z <=theElement->GetZ()-5 ) throw G4HadronicException(__FILE__, __LINE__, "Channel: Do not know what to do with this material"); - G4int count = 0; - if(registerCount==0) count = (G4int)theElement->GetNumberOfIsotopes(); - if(count == 0||registerCount!=0) count += - theStableOnes.GetNumberOfIsotopes(Z); - niso = count; - delete [] theIsotopeWiseData; - theIsotopeWiseData = new G4ParticleHPIsoData [niso]; - delete [] active; - active = new G4bool[niso]; +void G4ParticleHPChannel::Init(G4Element* anElement, const G4String dirName, const G4String aFSType) +{ + theFSType = aFSType; + Init(anElement, dirName); +} - delete [] theFinalStates; - theFinalStates = new G4ParticleHPFinalState * [niso]; - delete theChannelData; - theChannelData = new G4ParticleHPVector; - for(G4int i=0; iNew(); - theFinalStates[i]->SetProjectile(theProjectile); - } - count = 0; - G4int nIsos = niso; - if(theElement->GetNumberOfIsotopes()!=0&®isterCount==0) - { - for (G4int i1=0; i1GetIsotope(i1)->GetN(); - G4int M = theElement->GetIsotope(i1)->Getm(); - G4double frac = theElement->GetRelativeAbundanceVector()[i1]/perCent; - //theFinalStates[i1]->SetA_Z(A, Z); - //UpdateData(A, Z, count++, frac); - theFinalStates[i1]->SetA_Z(A, Z, M); - UpdateData(A, Z, M, count++, frac, theProjectile); - } - } else { - //G4cout <<" Init: mean case: " - // <GetZ()); + + Z = Z - registerCount; + if (registerCount > 5) + throw G4HadronicException( + __FILE__, __LINE__, + "Channel: Do not know what to do with this material"); // for Elastic, Capture, Fission case + if (Z < 1) return false; + /* + if(registerCount<5) { - G4int A = theStableOnes.GetIsotopeNucleonCount(first+i1); - G4double frac = theStableOnes.GetAbundance(first+i1); - theFinalStates[i1]->SetA_Z(A, Z); - UpdateData(A, Z, count++, frac, theProjectile); + Z = Z-registerCount; } + */ + // if(Z=theElement->GetZ()-5) throw G4HadronicException(__FILE__, __LINE__, "Channel: Do not know + // what to do with this material"); + // Bug fix by TK on behalf of AH + // if ( Z <=theElement->GetZ()-5 ) throw G4HadronicException(__FILE__, __LINE__, "Channel: Do not + // know what to do with this material"); + G4int count = 0; + if (registerCount == 0) count = (G4int)theElement->GetNumberOfIsotopes(); + if (count == 0 || registerCount != 0) count += theStableOnes.GetNumberOfIsotopes(Z); + niso = count; + delete[] theIsotopeWiseData; + theIsotopeWiseData = new G4ParticleHPIsoData[niso]; + delete[] active; + active = new G4bool[niso]; + + delete[] theFinalStates; + theFinalStates = new G4ParticleHPFinalState*[niso]; + delete theChannelData; + theChannelData = new G4ParticleHPVector; + for (G4int i = 0; i < niso; ++i) { + theFinalStates[i] = theFS->New(); + theFinalStates[i]->SetProjectile(theProjectile); + } + count = 0; + G4int nIsos = niso; + if (theElement->GetNumberOfIsotopes() != 0 && registerCount == 0) { + for (G4int i1 = 0; i1 < nIsos; ++i1) { + // G4cout <<" Init: normal case"<GetIsotope(i1)->GetN(); + G4int M = theElement->GetIsotope(i1)->Getm(); + G4double frac = theElement->GetRelativeAbundanceVector()[i1] / perCent; + // theFinalStates[i1]->SetA_Z(A, Z); + // UpdateData(A, Z, count++, frac); + theFinalStates[i1]->SetA_Z(A, Z, M); + UpdateData(A, Z, M, count++, frac, theProjectile); } - G4bool result = HasDataInAnyFinalState(); + } + else { + // G4cout <<" Init: mean case: " + // <SetA_Z(A, Z); + UpdateData(A, Z, count++, frac, theProjectile); + } + } + G4bool result = HasDataInAnyFinalState(); + + // To avoid issuing hash by worker threads + if (result) theChannelData->Hash(); - //To avoid issuing hash by worker threads - if ( result ) theChannelData->Hash(); + return result; +} - return result; +void G4ParticleHPChannel::UpdateData(G4int A, G4int Z, G4int M, G4int index, G4double abundance, + G4ParticleDefinition* projectile) +{ + // Initialze the G4FissionFragment generator for this isomer if needed + if (wendtFissionGenerator != nullptr) { + wendtFissionGenerator->InitializeANucleus(A, Z, M, theDir); } - - void G4ParticleHPChannel::UpdateData(G4int A, G4int Z, G4int M, G4int index, G4double abundance, G4ParticleDefinition* projectile) - { - // Initialze the G4FissionFragment generator for this isomer if needed - if(wendtFissionGenerator) - { - wendtFissionGenerator->InitializeANucleus(A, Z, M, theDir); - } - theFinalStates[index]->Init(A, Z, M, theDir, theFSType, projectile); - if(!theFinalStates[index]->HasAnyData()) return; // nothing there for exactly this isotope. + theFinalStates[index]->Init(A, Z, M, theDir, theFSType, projectile); + if (!theFinalStates[index]->HasAnyData()) return; // nothing there for exactly this isotope. - // the above has put the X-sec into the FS - theBuffer = 0; - if(theFinalStates[index]->HasXsec()) - { - theBuffer = theFinalStates[index]->GetXsec(); - theBuffer->Times(abundance/100.); - theIsotopeWiseData[index].FillChannelData(theBuffer); - } - else // get data from CrossSection directory - { - G4String tString = "/CrossSection"; - //active[index] = theIsotopeWiseData[index].Init(A, Z, abundance, theDir, tString); - active[index] = theIsotopeWiseData[index].Init(A, Z, M, abundance, theDir, tString); - if(active[index]) theBuffer = theIsotopeWiseData[index].MakeChannelData(); - } - if(theBuffer != 0) Harmonise(theChannelData, theBuffer); + // the above has put the X-sec into the FS + theBuffer = nullptr; + if (theFinalStates[index]->HasXsec()) { + theBuffer = theFinalStates[index]->GetXsec(); + theBuffer->Times(abundance / 100.); + theIsotopeWiseData[index].FillChannelData(theBuffer); } - - void G4ParticleHPChannel::Harmonise(G4ParticleHPVector *& theStore, G4ParticleHPVector * theNew) + else // get data from CrossSection directory { - G4int s_tmp = 0, n=0, m_tmp=0; - G4ParticleHPVector * theMerge = new G4ParticleHPVector; - G4ParticleHPVector * anActive = theStore; - G4ParticleHPVector * aPassive = theNew; - G4ParticleHPVector * tmp; - G4int a = s_tmp, p = n, t; - while (aGetVectorLength()&&pGetVectorLength()) // Loop checking, 11.05.2015, T. Koi - { - if(anActive->GetEnergy(a) <= aPassive->GetEnergy(p)) - { - G4double xa = anActive->GetEnergy(a); - theMerge->SetData(m_tmp, xa, anActive->GetXsec(a)+std::max(0., aPassive->GetXsec(xa)) ); - m_tmp++; - a++; - G4double xp = aPassive->GetEnergy(p); - if( std::abs(std::abs(xp-xa)/xa)<0.001 ) - { - ++p; - } - } else { - tmp = anActive; t=a; - anActive = aPassive; a=p; - aPassive = tmp; p=t; + G4String tString = "/CrossSection"; + // active[index] = theIsotopeWiseData[index].Init(A, Z, abundance, theDir, tString); + active[index] = theIsotopeWiseData[index].Init(A, Z, M, abundance, theDir, tString); + if (active[index]) theBuffer = theIsotopeWiseData[index].MakeChannelData(); + } + if (theBuffer != nullptr) Harmonise(theChannelData, theBuffer); +} + +void G4ParticleHPChannel::Harmonise(G4ParticleHPVector*& theStore, G4ParticleHPVector* theNew) +{ + G4int s_tmp = 0, n = 0, m_tmp = 0; + auto theMerge = new G4ParticleHPVector; + G4ParticleHPVector* anActive = theStore; + G4ParticleHPVector* aPassive = theNew; + G4ParticleHPVector* tmp; + G4int a = s_tmp, p = n, t; + while (a < anActive->GetVectorLength() + && p < aPassive->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi + { + if (anActive->GetEnergy(a) <= aPassive->GetEnergy(p)) { + G4double xa = anActive->GetEnergy(a); + theMerge->SetData(m_tmp, xa, anActive->GetXsec(a) + std::max(0., aPassive->GetXsec(xa))); + m_tmp++; + a++; + G4double xp = aPassive->GetEnergy(p); + if (std::abs(std::abs(xp - xa) / xa) < 0.001) { + ++p; } } - while (a!=anActive->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi - { - theMerge->SetData(m_tmp++, anActive->GetEnergy(a), anActive->GetXsec(a)); - ++a; - } - while (p!=aPassive->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi - { - if(std::abs(theMerge->GetEnergy(std::max(0,m_tmp-1))-aPassive->GetEnergy(p))/aPassive->GetEnergy(p)>0.001) - theMerge->SetData(m_tmp++, aPassive->GetEnergy(p), aPassive->GetXsec(p)); - ++p; + else { + tmp = anActive; + t = a; + anActive = aPassive; + a = p; + aPassive = tmp; + p = t; } - delete theStore; - theStore = theMerge; } - - G4HadFinalState * G4ParticleHPChannel:: - ApplyYourself(const G4HadProjectile & theTrack, G4int anIsotope) + while (a != anActive->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi { -// G4cout << "G4ParticleHPChannel::ApplyYourself+"<Initialize+"<Initialize-"<(niso*G4UniformRand()); + else { + xsec[i] = 0; } - else - { -// G4cout << "Are we still here? "<Initialize+"<Initialize-"<(niso * G4UniformRand()); + } + else { + // G4cout << "Are we still here? "<(theFinalStates[it])->RegisterCrossSection(xsforFS); + } + theFinalState = theFinalStates[it]->ApplyYourself(theTrack); } - - //G4cout <<"THE IMPORTANT RETURN"<GetName()<HasXsec()<<" "; +void G4ParticleHPChannel::DumpInfo() +{ + G4cout << " Element: " << theElement->GetName() << G4endl; + G4cout << " Directory name: " << theDir << G4endl; + G4cout << " FS name: " << theFSType << G4endl; + G4cout << " Number of Isotopes: " << niso << G4endl; + G4cout << " Have cross sections: " << G4endl; + for (int i = 0; i < niso; i++) { + G4cout << theFinalStates[i]->HasXsec() << " "; } - G4cout<GetVectorLength(); - G4cout<GetEnergy(i)/eV<<" "<GetXsec(i)<GetVectorLength(); + G4cout << np << G4endl; + for (int i = 0; i < np; i++) { + G4cout << theChannelData->GetEnergy(i) / eV << " " << theChannelData->GetXsec(i) << G4endl; } } - } - - - diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPChannelList.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPChannelList.cc index 3d103301e19..fa0eeb2a027 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPChannelList.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPChannelList.cc @@ -32,6 +32,7 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPChannelList.hh" + #include "G4Element.hh" #include "G4HadFinalState.hh" #include "G4HadProjectile.hh" @@ -39,201 +40,191 @@ G4ThreadLocal G4int G4ParticleHPChannelList::trycounter = 0; - G4ParticleHPChannelList::G4ParticleHPChannelList(G4int n, G4ParticleDefinition* projectile) - :theProjectile(projectile) - { - nChannels = n; - theChannels = new G4ParticleHPChannel * [n]; - allChannelsCreated = false; - theInitCount = 0; - theElement = NULL; - } - +G4ParticleHPChannelList::G4ParticleHPChannelList(G4int n, G4ParticleDefinition* projectile) + : theProjectile(projectile) +{ + nChannels = n; + theChannels = new G4ParticleHPChannel*[n]; + allChannelsCreated = false; + theInitCount = 0; + theElement = nullptr; +} + #include "G4Neutron.hh" - G4ParticleHPChannelList::G4ParticleHPChannelList() - { - nChannels = 0; - theChannels = 0; - allChannelsCreated = false; - theInitCount = 0; - theElement = NULL; - theProjectile = G4Neutron::Neutron(); - } - - G4ParticleHPChannelList::~G4ParticleHPChannelList() - { - if(theChannels!=0) - { - for(G4int i=0;iGetNiso(); - if(numberOfIsos!=0) break; - } - G4double * running= new G4double [numberOfIsos]; - running[0] = 0; - for(i=0;iHasAnyData(i)) - { - running[i] +=theChannels[ii]->GetWeightedXsec(aThermalE.GetThermalEnergy(aTrack, - theChannels[ii]->GetN(i), - theChannels[ii]->GetZ(i), - aTrack.GetMaterial()->GetTemperature()), - i); - } - } - } - G4int isotope=nChannels-1; - G4double random=G4UniformRand(); - for(i=0;iHasAnyData(isotope)) - { - targA=(G4int)theChannels[i]->GetN(isotope); //Will be simply used the last valid value - targZ=(G4int)theChannels[i]->GetZ(isotope); - running[i] += theChannels[i]->GetFSCrossSection(aThermalE.GetThermalEnergy(aTrack, - targA, - targZ, - aTrack.GetMaterial()->GetTemperature()), - isotope); - targA=(G4int)theChannels[i]->GetN(isotope); //Will be simply used the last valid value - targZ=(G4int)theChannels[i]->GetZ(isotope); - // G4cout << " G4ParticleHPChannelList " << i << " targA " << targA << " targZ " << targZ << " running " << running[i] << G4endl; +} + +#include "G4ParticleHPManager.hh" +#include "G4ParticleHPThermalBoost.hh" +G4HadFinalState* G4ParticleHPChannelList::ApplyYourself(const G4Element*, + const G4HadProjectile& aTrack) +{ + G4ParticleHPThermalBoost aThermalE; + G4int i, ii; + // decide on the isotope + G4int numberOfIsos(0); + for (ii = 0; ii < nChannels; ii++) { + numberOfIsos = theChannels[ii]->GetNiso(); + if (numberOfIsos != 0) break; + } + auto running = new G4double[numberOfIsos]; + running[0] = 0; + for (i = 0; i < numberOfIsos; i++) { + if (i != 0) running[i] = running[i - 1]; + for (ii = 0; ii < nChannels; ii++) { + if (theChannels[ii]->HasAnyData(i)) { + running[i] += theChannels[ii]->GetWeightedXsec( + aThermalE.GetThermalEnergy(aTrack, theChannels[ii]->GetN(i), theChannels[ii]->GetZ(i), + aTrack.GetMaterial()->GetTemperature()), + i); } } + } + G4int isotope = nChannels - 1; + G4double random = G4UniformRand(); + for (i = 0; i < numberOfIsos; i++) { + isotope = i; + // if(randomHasAnyData(isotope)) { + targA = (G4int)theChannels[i]->GetN(isotope); // Will be simply used the last valid value + targZ = (G4int)theChannels[i]->GetZ(isotope); + running[i] += theChannels[i]->GetFSCrossSection( + aThermalE.GetThermalEnergy(aTrack, targA, targZ, aTrack.GetMaterial()->GetTemperature()), + isotope); + targA = (G4int)theChannels[i]->GetN(isotope); // Will be simply used the last valid value + targZ = (G4int)theChannels[i]->GetZ(isotope); + // G4cout << " G4ParticleHPChannelList " << i << " targA " << targA << " targZ " << targZ << + //" running " << running[i] << G4endl; + } + } - //For Ep Check create unchanged final state including rest target - G4ParticleDefinition* targ_pd = G4IonTable::GetIonTable()->GetIon ( targZ , targA , 0.0 ); - G4DynamicParticle* targ_dp = new G4DynamicParticle( targ_pd , G4ThreeVector(1,0,0), 0.0 ); - unChanged.SetEnergyChange(aTrack.GetKineticEnergy()); - unChanged.SetMomentumChange(aTrack.Get4Momentum().vect().unit() ); - unChanged.AddSecondary(targ_dp); - //TK121106 - G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->SetTargA( targA ); - G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->SetTargZ( targZ ); - delete [] running; - return &unChanged; + // TK120607 + if (running[nChannels - 1] == 0) { + // This happened usually by the miss match between the cross section data and model + if (targA == -1 && targZ == -1) { + throw G4HadronicException( + __FILE__, __LINE__, + "ParticleHP model encounter lethal discrepancy with cross section data"); } - //TK120607 + // TK121106 + G4cout << "Warning from NeutronHP: could not find proper reaction channel. This may cause by " + "inconsistency between cross section and model. Unchanged final states are returned." + << G4endl; + unChanged.Clear(); - G4int lChan=0; - random=G4UniformRand(); - for(i=0; iApplyYourself(aTrack, isotope); + // For Ep Check create unchanged final state including rest target + G4ParticleDefinition* targ_pd = G4IonTable::GetIonTable()->GetIon(targZ, targA, 0.0); + auto targ_dp = new G4DynamicParticle(targ_pd, G4ThreeVector(1, 0, 0), 0.0); + unChanged.SetEnergyChange(aTrack.GetKineticEnergy()); + unChanged.SetMomentumChange(aTrack.Get4Momentum().vect().unit()); + unChanged.AddSecondary(targ_dp); + // TK121106 + G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->SetTargA(targA); + G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->SetTargZ(targZ); + delete[] running; + return &unChanged; } - -void G4ParticleHPChannelList::Init(G4Element * anElement, const G4String & dirName, G4ParticleDefinition* projectile ) - { - theDir = dirName; -// G4cout << theDir << G4endl; - theElement = anElement; -// G4cout << theElement << G4endl; - theProjectile = projectile; + // TK120607 + + G4int lChan = 0; + random = G4UniformRand(); + for (i = 0; i < nChannels; i++) { + lChan = i; + if (running[nChannels - 1] != 0) + if (random < running[i] / running[nChannels - 1]) break; } - - void G4ParticleHPChannelList::Register(G4ParticleHPFinalState * theFS, - const G4String & aName ) - { - if(!allChannelsCreated) - { - if(nChannels!=0) - { - G4ParticleHPChannel ** theBuffer = new G4ParticleHPChannel * [nChannels+1]; - G4int i; - for(i=0; iApplyYourself(aTrack, isotope); +} + +void G4ParticleHPChannelList::Init(G4Element* anElement, const G4String& dirName, + G4ParticleDefinition* projectile) +{ + theDir = dirName; + // G4cout << theDir << G4endl; + theElement = anElement; + // G4cout << theElement << G4endl; + theProjectile = projectile; +} + +void G4ParticleHPChannelList::Register(G4ParticleHPFinalState* theFS, const G4String& aName) +{ + if (!allChannelsCreated) { + if (nChannels != 0) { + auto theBuffer = new G4ParticleHPChannel*[nChannels + 1]; + G4int i; + for (i = 0; i < nChannels; i++) { + theBuffer[i] = theChannels[i]; } - G4String name; - name = aName+"/"; - theChannels[nChannels] = new G4ParticleHPChannel(theProjectile); - theChannels[nChannels]->Init(theElement, theDir, name); - // theChannels[nChannels]->SetProjectile( theProjectile ); - nChannels++; + delete[] theChannels; + theChannels = theBuffer; + } + else { + theChannels = new G4ParticleHPChannel*[nChannels + 1]; } - - //110527TKDB Unnessary codes, Detected by gcc4.6 compiler - //G4bool result; - //result = theChannels[theInitCount]->Register(theFS); - theChannels[theInitCount]->Register(theFS); - theInitCount++; + G4String name; + name = aName + "/"; + theChannels[nChannels] = new G4ParticleHPChannel(theProjectile); + theChannels[nChannels]->Init(theElement, theDir, name); + // theChannels[nChannels]->SetProjectile( theProjectile ); + nChannels++; } -void G4ParticleHPChannelList::DumpInfo(){ + // 110527TKDB Unnessary codes, Detected by gcc4.6 compiler + // G4bool result; + // result = theChannels[theInitCount]->Register(theFS); + theChannels[theInitCount]->Register(theFS); + theInitCount++; +} - G4cout<<"================================================================"<GetName()<GetParticleName()<HasDataInAnyFinalState()){ - G4cout<<"----------------------------------------------------------------"<GetName() << G4endl; + G4cout << " Number of channels: " << nChannels << G4endl; + G4cout << " Projectile: " << theProjectile->GetParticleName() << G4endl; + G4cout << " Directory name: " << theDir << G4endl; + for (int i = 0; i < nChannels; i++) { + if (theChannels[i]->HasDataInAnyFinalState()) { + G4cout << "----------------------------------------------------------------" << G4endl; theChannels[i]->DumpInfo(); - G4cout<<"----------------------------------------------------------------"< redefinition of the residual mass to consider incident particles different than neutrons. +// June-2019 - E. Mendoza --> redefinition of the residual mass to consider incident particles +// different than neutrons. #include "G4ParticleHPContAngularPar.hh" -#include "G4PhysicalConstants.hh" -#include "G4SystemOfUnits.hh" -#include "G4ParticleHPLegendreStore.hh" -#include "G4Gamma.hh" -#include "G4Electron.hh" -#include "G4Positron.hh" -#include "G4Neutron.hh" -#include "G4Proton.hh" + +#include "G4Alpha.hh" #include "G4Deuteron.hh" -#include "G4Triton.hh" +#include "G4Electron.hh" +#include "G4Gamma.hh" #include "G4He3.hh" -#include "G4Alpha.hh" -#include "G4ParticleHPVector.hh" +#include "G4IonTable.hh" +#include "G4Neutron.hh" #include "G4NucleiProperties.hh" #include "G4ParticleHPKallbachMannSyst.hh" -#include "G4IonTable.hh" +#include "G4ParticleHPLegendreStore.hh" #include "G4ParticleHPManager.hh" +#include "G4ParticleHPVector.hh" +#include "G4PhysicalConstants.hh" +#include "G4Positron.hh" +#include "G4Proton.hh" +#include "G4SystemOfUnits.hh" +#include "G4Triton.hh" + #include #include - + G4ParticleHPContAngularPar::G4ParticleHPContAngularPar(G4ParticleDefinition* projectile) -{ - theAngular = 0; - if (fCache.Get() == 0) cacheInit(); +{ + theAngular = nullptr; + if (fCache.Get() == nullptr) cacheInit(); fCache.Get()->currentMeanEnergy = -2; fCache.Get()->fresh = true; adjustResult = true; - if (G4ParticleHPManager::GetInstance()->GetDoNotAdjustFinalState() ) - adjustResult = false; - + if (G4ParticleHPManager::GetInstance()->GetDoNotAdjustFinalState()) adjustResult = false; + theMinEner = DBL_MAX; theMaxEner = -DBL_MAX; - theProjectile = projectile; + theProjectile = projectile; theEnergy = 0.0; nEnergies = 0; @@ -81,63 +83,64 @@ G4ParticleHPContAngularPar::G4ParticleHPContAngularPar(G4ParticleDefinition* pro nAngularParameters = 0; } - -void -G4ParticleHPContAngularPar::Init(std::istream& aDataFile, G4ParticleDefinition* projectile) -{ +void G4ParticleHPContAngularPar::Init(std::istream& aDataFile, G4ParticleDefinition* projectile) +{ adjustResult = true; - if (G4ParticleHPManager::GetInstance()->GetDoNotAdjustFinalState() ) - adjustResult = false; + if (G4ParticleHPManager::GetInstance()->GetDoNotAdjustFinalState()) adjustResult = false; theProjectile = projectile; aDataFile >> theEnergy >> nEnergies >> nDiscreteEnergies >> nAngularParameters; theEnergy *= eV; - theAngular = new G4ParticleHPList [nEnergies]; + theAngular = new G4ParticleHPList[nEnergies]; G4double sEnergy; for (G4int i = 0; i < nEnergies; i++) { aDataFile >> sEnergy; sEnergy *= eV; theAngular[i].SetLabel(sEnergy); theAngular[i].Init(aDataFile, nAngularParameters, 1.); - theMinEner = std::min(theMinEner,sEnergy); - theMaxEner = std::max(theMaxEner,sEnergy); + theMinEner = std::min(theMinEner, sEnergy); + theMaxEner = std::max(theMaxEner, sEnergy); } } - -G4ReactionProduct* -G4ParticleHPContAngularPar::Sample(G4double anEnergy, G4double massCode, - G4double /*targetMass*/, - G4int angularRep, G4int /*interpolE*/ ) +G4ReactionProduct* G4ParticleHPContAngularPar::Sample(G4double anEnergy, G4double massCode, + G4double /*targetMass*/, G4int angularRep, + G4int /*interpolE*/) { // The following line is needed because it may change between runs by UI command - if (G4ParticleHPManager::GetInstance()->GetDoNotAdjustFinalState() ) - adjustResult = false; - - if (fCache.Get() == 0 ) cacheInit(); - G4ReactionProduct * result = new G4ReactionProduct; - G4int Z = static_cast(massCode/1000); - G4int A = static_cast(massCode-1000*Z); + if (G4ParticleHPManager::GetInstance()->GetDoNotAdjustFinalState()) adjustResult = false; + + if (fCache.Get() == nullptr) cacheInit(); + auto result = new G4ReactionProduct; + auto Z = static_cast(massCode / 1000); + auto A = static_cast(massCode - 1000 * Z); if (massCode == 0) { result->SetDefinition(G4Gamma::Gamma()); - } else if (A == 0) { - result->SetDefinition(G4Electron::Electron()); + } + else if (A == 0) { + result->SetDefinition(G4Electron::Electron()); if (Z == 1) result->SetDefinition(G4Positron::Positron()); - } else if (A == 1) { + } + else if (A == 1) { result->SetDefinition(G4Neutron::Neutron()); if (Z == 1) result->SetDefinition(G4Proton::Proton()); - } else if (A == 2) { - result->SetDefinition(G4Deuteron::Deuteron()); - } else if (A == 3) { - result->SetDefinition(G4Triton::Triton()); - if(Z == 2) result->SetDefinition(G4He3::He3()); - } else if (A == 4) { + } + else if (A == 2) { + result->SetDefinition(G4Deuteron::Deuteron()); + } + else if (A == 3) { + result->SetDefinition(G4Triton::Triton()); + if (Z == 2) result->SetDefinition(G4He3::He3()); + } + else if (A == 4) { result->SetDefinition(G4Alpha::Alpha()); - if (Z != 2) throw G4HadronicException(__FILE__, __LINE__, - "G4ParticleHPContAngularPar: Unknown ion case 1"); - } else { - result->SetDefinition(G4IonTable::GetIonTable()->GetIon(Z,A,0) ); + if (Z != 2) + throw G4HadronicException(__FILE__, __LINE__, + "G4ParticleHPContAngularPar: Unknown ion case 1"); + } + else { + result->SetDefinition(G4IonTable::GetIonTable()->GetIon(Z, A, 0)); } G4int i(0); @@ -147,34 +150,36 @@ G4ParticleHPContAngularPar::Sample(G4double anEnergy, G4double massCode, if (angularRep == 1) { if (nDiscreteEnergies != 0) { - // 1st check remaining_energy + // 1st check remaining_energy // if this is the first set it. (How?) - if (fCache.Get()->fresh == true) { - // Discrete Lines, larger energies come first - // Continues Emssions, low to high LAST - fCache.Get()->remaining_energy = std::max (theAngular[0].GetLabel(), - theAngular[nEnergies-1].GetLabel() ); - fCache.Get()->fresh = false; + if (fCache.Get()->fresh) { + // Discrete Lines, larger energies come first + // Continues Emssions, low to high LAST + fCache.Get()->remaining_energy = + std::max(theAngular[0].GetLabel(), theAngular[nEnergies - 1].GetLabel()); + fCache.Get()->fresh = false; } - // Cheating for small remaining_energy + // Cheating for small remaining_energy // Temporary solution if (nDiscreteEnergies == nEnergies) { - fCache.Get()->remaining_energy = std::max(fCache.Get()->remaining_energy, - theAngular[nDiscreteEnergies-1].GetLabel() ); //Minimum Line - } else { - G4double cont_min = 0.0; + fCache.Get()->remaining_energy = + std::max(fCache.Get()->remaining_energy, + theAngular[nDiscreteEnergies - 1].GetLabel()); // Minimum Line + } + else { + G4double cont_min = 0.0; for (G4int j = nDiscreteEnergies; j < nEnergies; j++) { - cont_min = theAngular[j].GetLabel(); - if (theAngular[j].GetValue(0) != 0.0 ) break; + cont_min = theAngular[j].GetLabel(); + if (theAngular[j].GetValue(0) != 0.0) break; } - fCache.Get()->remaining_energy = - std::max (fCache.Get()->remaining_energy, - std::min(theAngular[nDiscreteEnergies-1].GetLabel(), cont_min) ); //Minimum Line or grid + fCache.Get()->remaining_energy = std::max( + fCache.Get()->remaining_energy, std::min(theAngular[nDiscreteEnergies - 1].GetLabel(), + cont_min)); // Minimum Line or grid } G4double random = G4UniformRand(); - G4double* running = new G4double[nEnergies+1]; + auto running = new G4double[nEnergies + 1]; running[0] = 0.0; G4double delta; @@ -182,10 +187,10 @@ G4ParticleHPContAngularPar::Sample(G4double anEnergy, G4double massCode, delta = 0.0; if (theAngular[j].GetLabel() <= fCache.Get()->remaining_energy) delta = theAngular[j].GetValue(0); - running[j+1] = running[j] + delta; + running[j + 1] = running[j] + delta; } - G4double tot_prob_DIS = std::max( running[nDiscreteEnergies], 0.0 ); + G4double tot_prob_DIS = std::max(running[nDiscreteEnergies], 0.0); G4double delta1; for (G4int j = nDiscreteEnergies; j < nEnergies; j++) { @@ -195,89 +200,90 @@ G4ParticleHPContAngularPar::Sample(G4double anEnergy, G4double massCode, if (theAngular[j].GetLabel() <= fCache.Get()->remaining_energy) delta1 = theAngular[j].GetValue(0); - // To calculate Prob. e_low and e_high should be in eV + // To calculate Prob. e_low and e_high should be in eV // There are two cases: // 1: theAngular[nDiscreteEnergies].GetLabel() != 0.0 - // delta1 should be used between j-1 and j - // At j = nDiscreteEnergies (the first) e_low should be set explicitly + // delta1 should be used between j-1 and j + // At j = nDiscreteEnergies (the first) e_low should be set explicitly if (theAngular[j].GetLabel() != 0) { if (j == nDiscreteEnergies) { - e_low = 0.0/eV; - } else { - if ( j < 1 ) j = 1; // Protection against evaluation of arrays at index j-1 - e_low = theAngular[j-1].GetLabel()/eV; + e_low = 0.0 / eV; } - e_high = theAngular[j].GetLabel()/eV; + else { + if (j < 1) j = 1; // Protection against evaluation of arrays at index j-1 + e_low = theAngular[j - 1].GetLabel() / eV; + } + e_high = theAngular[j].GetLabel() / eV; } // 2: theAngular[nDiscreteEnergies].GetLabel() == 0.0 - // delta1 should be used between j and j+1 + // delta1 should be used between j and j+1 if (theAngular[j].GetLabel() == 0.0) { - e_low = theAngular[j].GetLabel()/eV; - if (j != nEnergies-1) { - e_high = theAngular[j+1].GetLabel()/eV; - } else { - e_high = theAngular[j].GetLabel()/eV; - if (theAngular[j].GetValue(0) != 0.0) { - throw G4HadronicException(__FILE__, __LINE__, - "G4ParticleHPContAngularPar: Unexpected non zero value of theAngular[nEnergies-1].GetValue(0)"); - } + e_low = theAngular[j].GetLabel() / eV; + if (j != nEnergies - 1) { + e_high = theAngular[j + 1].GetLabel() / eV; + } + else { + e_high = theAngular[j].GetLabel() / eV; } } - running[j+1] = running[j] + ( ( e_high - e_low ) * delta1); + running[j + 1] = running[j] + ((e_high - e_low) * delta1); } - G4double tot_prob_CON = std::max( running[ nEnergies ] - running[ nDiscreteEnergies ], 0.0 ); - - // Give up in the pathological case of null probabilities - if ( tot_prob_DIS == 0.0 && tot_prob_CON == 0.0 ) return result; + G4double tot_prob_CON = std::max(running[nEnergies] - running[nDiscreteEnergies], 0.0); - // Normalize random + // Give up in the pathological case of null probabilities + if (tot_prob_DIS == 0.0 && tot_prob_CON == 0.0) { + delete[] running; + return result; + } + // Normalize random random *= (tot_prob_DIS + tot_prob_CON); // 2nd Judge Discrete or not - // This should be relatively close to 1 For safty - if (random <= (tot_prob_DIS/(tot_prob_DIS + tot_prob_CON) ) || nDiscreteEnergies == nEnergies) { - // Discrete Emission + // This should be relatively close to 1 For safty + if (random <= (tot_prob_DIS / (tot_prob_DIS + tot_prob_CON)) + || nDiscreteEnergies == nEnergies) + { + // Discrete Emission for (G4int j = 0; j < nDiscreteEnergies; j++) { // Here we should use i+1 - if (random < running[ j+1 ] ) { - it = j; + if (random < running[j + 1]) { + it = j; break; } } - fsEnergy = theAngular[ it ].GetLabel(); + fsEnergy = theAngular[it].GetLabel(); G4ParticleHPLegendreStore theStore(1); - theStore.Init(0,fsEnergy,nAngularParameters); + theStore.Init(0, fsEnergy, nAngularParameters); for (G4int j = 0; j < nAngularParameters; j++) { - theStore.SetCoeff(0,j,theAngular[it].GetValue(j)); + theStore.SetCoeff(0, j, theAngular[it].GetValue(j)); } // use it to sample. cosTh = theStore.SampleMax(fsEnergy); // Done - - } else { + } + else { // Continuous emission for (G4int j = nDiscreteEnergies; j < nEnergies; j++) { // Here we should use i - if (random < running[ j ] ) { - it = j; + if (random < running[j]) { + it = j; break; } } - if ( it < 1 ) it = 1; // Protection against evaluation of arrays at index it-1 + if (it < 1) it = 1; // Protection against evaluation of arrays at index it-1 - G4double x1 = running[it-1]; + G4double x1 = running[it - 1]; G4double x2 = running[it]; G4double y1 = 0.0; - if (it != nDiscreteEnergies) y1 = theAngular[it-1].GetLabel(); + if (it != nDiscreteEnergies) y1 = theAngular[it - 1].GetLabel(); G4double y2 = theAngular[it].GetLabel(); - fsEnergy = theInt.Interpolate(theManager.GetInverseScheme(it), - random,x1,x2,y1,y2); + fsEnergy = theInt.Interpolate(theManager.GetInverseScheme(it), random, x1, x2, y1, y2); G4ParticleHPLegendreStore theStore(2); theStore.Init(0, y1, nAngularParameters); @@ -286,120 +292,115 @@ G4ParticleHPContAngularPar::Sample(G4double anEnergy, G4double massCode, G4int itt; for (G4int j = 0; j < nAngularParameters; j++) { itt = it; - if (it == nDiscreteEnergies) itt = it+1; - // "This case "it-1" has data for Discrete, so we will use an extrpolated values it and it+1 - theStore.SetCoeff(0, j, theAngular[itt-1].GetValue(j) ); - theStore.SetCoeff(1, j, theAngular[itt].GetValue(j) ); + if (it == nDiscreteEnergies) itt = it + 1; + // "This case "it-1" has data for Discrete, so we will use an extrpolated values it and + // it+1 + theStore.SetCoeff(0, j, theAngular[itt - 1].GetValue(j)); + theStore.SetCoeff(1, j, theAngular[itt].GetValue(j)); } // use it to sample. cosTh = theStore.SampleMax(fsEnergy); - //Done + // Done } // The remaining energy needs to be lowered by the photon energy in *any* case. // Otherwise additional photons with too high energy will be produced - therefore the - // adjustResult condition has been removed + // adjustResult condition has been removed fCache.Get()->remaining_energy -= fsEnergy; delete[] running; - // end (nDiscreteEnergies != 0) branch - - } else { - // Only continue, TK will clean up - if (fCache.Get()->fresh == true) { - fCache.Get()->remaining_energy = theAngular[ nEnergies-1 ].GetLabel(); + // end (nDiscreteEnergies != 0) branch + } + else { + // Only continue, TK will clean up + if (fCache.Get()->fresh) { + fCache.Get()->remaining_energy = theAngular[nEnergies - 1].GetLabel(); fCache.Get()->fresh = false; } G4double random = G4UniformRand(); - G4double* running = new G4double[nEnergies]; + auto running = new G4double[nEnergies]; running[0] = 0; G4double weighted = 0; for (i = 1; i < nEnergies; i++) { - running[i]=running[i-1]; - if (fCache.Get()->remaining_energy >= theAngular[i].GetLabel() ) { - running[i] += theInt.GetBinIntegral(theManager.GetScheme(i-1), - theAngular[i-1].GetLabel(), - theAngular[i].GetLabel(), - theAngular[i-1].GetValue(0), - theAngular[i].GetValue(0) ); - weighted += theInt.GetWeightedBinIntegral(theManager.GetScheme(i-1), - theAngular[i-1].GetLabel(), - theAngular[i].GetLabel(), - theAngular[i-1].GetValue(0), - theAngular[i].GetValue(0)); + running[i] = running[i - 1]; + if (fCache.Get()->remaining_energy >= theAngular[i].GetLabel()) { + running[i] += theInt.GetBinIntegral( + theManager.GetScheme(i - 1), theAngular[i - 1].GetLabel(), theAngular[i].GetLabel(), + theAngular[i - 1].GetValue(0), theAngular[i].GetValue(0)); + weighted += theInt.GetWeightedBinIntegral( + theManager.GetScheme(i - 1), theAngular[i - 1].GetLabel(), theAngular[i].GetLabel(), + theAngular[i - 1].GetValue(0), theAngular[i].GetValue(0)); } } // Cache the mean energy in this distribution - if (nEnergies == 1 || running[nEnergies-1] == 0) { + if (nEnergies == 1 || running[nEnergies - 1] == 0) { fCache.Get()->currentMeanEnergy = 0.0; - } else { - fCache.Get()->currentMeanEnergy = weighted/running[nEnergies-1]; } - - if (nEnergies == 1) it = 0; - if (running[nEnergies-1] != 0) { + else { + fCache.Get()->currentMeanEnergy = weighted / running[nEnergies - 1]; + } + + if (nEnergies == 1) it = 0; + if (running[nEnergies - 1] != 0) { for (i = 1; i < nEnergies; i++) { it = i; - if (random < running [i]/running[nEnergies-1] ) break; + if (random < running[i] / running[nEnergies - 1]) break; } } - if (running[nEnergies-1] == 0) it = 0; + if (running[nEnergies - 1] == 0) it = 0; if (it < nDiscreteEnergies || it == 0) { if (it == 0) { fsEnergy = theAngular[it].GetLabel(); G4ParticleHPLegendreStore theStore(1); - theStore.Init(0,fsEnergy,nAngularParameters); + theStore.Init(0, fsEnergy, nAngularParameters); for (i = 0; i < nAngularParameters; i++) { - theStore.SetCoeff(0, i, theAngular[it].GetValue(i) ); + theStore.SetCoeff(0, i, theAngular[it].GetValue(i)); } // use it to sample. cosTh = theStore.SampleMax(fsEnergy); - - } else { + } + else { G4double e1, e2; - e1 = theAngular[it-1].GetLabel(); + e1 = theAngular[it - 1].GetLabel(); e2 = theAngular[it].GetLabel(); - fsEnergy = theInt.Interpolate(theManager.GetInverseScheme(it), - random, - running[it-1]/running[nEnergies-1], - running[it]/running[nEnergies-1], - e1, e2); + fsEnergy = theInt.Interpolate(theManager.GetInverseScheme(it), random, + running[it - 1] / running[nEnergies - 1], + running[it] / running[nEnergies - 1], e1, e2); // fill a Legendrestore G4ParticleHPLegendreStore theStore(2); - theStore.Init(0,e1,nAngularParameters); - theStore.Init(1,e2,nAngularParameters); + theStore.Init(0, e1, nAngularParameters); + theStore.Init(1, e2, nAngularParameters); for (i = 0; i < nAngularParameters; i++) { - theStore.SetCoeff(0, i, theAngular[it-1].GetValue(i) ); - theStore.SetCoeff(1, i, theAngular[it].GetValue(i) ); + theStore.SetCoeff(0, i, theAngular[it - 1].GetValue(i)); + theStore.SetCoeff(1, i, theAngular[it].GetValue(i)); } // use it to sample. theStore.SetManager(theManager); cosTh = theStore.SampleMax(fsEnergy); } - - } else { // continuum contribution - G4double x1 = running[it-1]/running[nEnergies-1]; - G4double x2 = running[it]/running[nEnergies-1]; - G4double y1 = theAngular[it-1].GetLabel(); + } + else { // continuum contribution + G4double x1 = running[it - 1] / running[nEnergies - 1]; + G4double x2 = running[it] / running[nEnergies - 1]; + G4double y1 = theAngular[it - 1].GetLabel(); G4double y2 = theAngular[it].GetLabel(); - fsEnergy = theInt.Interpolate(theManager.GetInverseScheme(it), - random,x1,x2,y1,y2); + fsEnergy = theInt.Interpolate(theManager.GetInverseScheme(it), random, x1, x2, y1, y2); G4ParticleHPLegendreStore theStore(2); - theStore.Init(0,y1,nAngularParameters); - theStore.Init(1,y2,nAngularParameters); + theStore.Init(0, y1, nAngularParameters); + theStore.Init(1, y2, nAngularParameters); theStore.SetManager(theManager); for (i = 0; i < nAngularParameters; i++) { - theStore.SetCoeff(0, i, theAngular[it-1].GetValue(i)); + theStore.SetCoeff(0, i, theAngular[it - 1].GetValue(i)); theStore.SetCoeff(1, i, theAngular[it].GetValue(i)); } // use it to sample. cosTh = theStore.SampleMax(fsEnergy); } - delete [] running; + delete[] running; // The remaining energy needs to be lowered by the photon energy in // *any* case. Otherwise additional photons with too much energy will be @@ -409,202 +410,195 @@ G4ParticleHPContAngularPar::Sample(G4double anEnergy, G4double massCode, // end if (nDiscreteEnergies != 0) } // end of (angularRep == 1) branch - - } else if (angularRep == 2) { + } + else if (angularRep == 2) { // first get the energy (already the right for this incoming energy) G4int j; - G4double* running = new G4double[nEnergies]; + auto running = new G4double[nEnergies]; running[0] = 0; G4double weighted = 0; for (j = 1; j < nEnergies; j++) { - if (j != 0) running[j] = running[j-1]; - running[j] += theInt.GetBinIntegral(theManager.GetScheme(j-1), - theAngular[j-1].GetLabel(), theAngular[j].GetLabel(), - theAngular[j-1].GetValue(0), theAngular[j].GetValue(0)); - weighted += theInt.GetWeightedBinIntegral(theManager.GetScheme(j-1), - theAngular[j-1].GetLabel(), theAngular[j].GetLabel(), - theAngular[j-1].GetValue(0), theAngular[j].GetValue(0)); + if (j != 0) running[j] = running[j - 1]; + running[j] += theInt.GetBinIntegral(theManager.GetScheme(j - 1), theAngular[j - 1].GetLabel(), + theAngular[j].GetLabel(), theAngular[j - 1].GetValue(0), + theAngular[j].GetValue(0)); + weighted += theInt.GetWeightedBinIntegral( + theManager.GetScheme(j - 1), theAngular[j - 1].GetLabel(), theAngular[j].GetLabel(), + theAngular[j - 1].GetValue(0), theAngular[j].GetValue(0)); } // Cache the mean energy in this distribution if (nEnergies == 1) fCache.Get()->currentMeanEnergy = 0.0; else - fCache.Get()->currentMeanEnergy = weighted/running[nEnergies-1]; - + fCache.Get()->currentMeanEnergy = weighted / running[nEnergies - 1]; + G4int itt(0); G4double randkal = G4UniformRand(); for (j = 1; j < nEnergies; j++) { itt = j; - if (randkal < running[j]/running[nEnergies-1] ) break; + if (randkal < running[j] / running[nEnergies - 1]) break; } - + // Interpolate the secondary energy G4double x, x1, x2, y1, y2; if (itt == 0) itt = 1; - x = randkal*running[nEnergies-1]; - x1 = running[itt-1]; + x = randkal * running[nEnergies - 1]; + x1 = running[itt - 1]; x2 = running[itt]; G4double compoundFraction; // interpolate energy - y1 = theAngular[itt-1].GetLabel(); + y1 = theAngular[itt - 1].GetLabel(); y2 = theAngular[itt].GetLabel(); - fsEnergy = theInt.Interpolate(theManager.GetInverseScheme(itt-1), - x, x1, x2, y1, y2); + fsEnergy = theInt.Interpolate(theManager.GetInverseScheme(itt - 1), x, x1, x2, y1, y2); // For theta, interpolate the compoundFractions - G4double cLow = theAngular[itt-1].GetValue(1); + G4double cLow = theAngular[itt - 1].GetValue(1); G4double cHigh = theAngular[itt].GetValue(1); - compoundFraction = theInt.Interpolate(theManager.GetScheme(itt), - fsEnergy, y1, y2, cLow, cHigh); + compoundFraction = theInt.Interpolate(theManager.GetScheme(itt), fsEnergy, y1, y2, cLow, cHigh); + + if (compoundFraction > 1.0) + compoundFraction = 1.0; // Protection against unphysical interpolation - if (compoundFraction > 1.0) compoundFraction = 1.0; // Protection against unphysical interpolation + delete[] running; - delete [] running; - // get cosTh G4double incidentEnergy = anEnergy; G4double incidentMass = theProjectile->GetPDGMass(); G4double productEnergy = fsEnergy; G4double productMass = result->GetMass(); - G4int targetZ = G4int(fCache.Get()->theTargetCode/1000); - G4int targetA = G4int(fCache.Get()->theTargetCode-1000*targetZ); + auto targetZ = G4int(fCache.Get()->theTargetCode / 1000); + auto targetA = G4int(fCache.Get()->theTargetCode - 1000 * targetZ); - // To correspond to natural composition (-nat-) data files. - if (targetA == 0) - targetA = G4int ( fCache.Get()->theTarget->GetMass()/amu_c2 + 0.5 ); + // To correspond to natural composition (-nat-) data files. + if (targetA == 0) targetA = G4int(fCache.Get()->theTarget->GetMass() / amu_c2 + 0.5); G4double targetMass = fCache.Get()->theTarget->GetMass(); - G4int incidentA=G4int(incidentMass/amu_c2 + 0.5 ); - G4int incidentZ=G4int(theProjectile->GetPDGCharge()+ 0.5 ); - G4int residualA = targetA+incidentA-A; - G4int residualZ = targetZ+incidentZ-Z; - G4double residualMass =G4NucleiProperties::GetNuclearMass( residualA , residualZ ); - G4ParticleHPKallbachMannSyst theKallbach(compoundFraction, - incidentEnergy, incidentMass, - productEnergy, productMass, - residualMass, residualA, residualZ, - targetMass, targetA, targetZ, - incidentA,incidentZ,A,Z); + auto incidentA = G4int(incidentMass / amu_c2 + 0.5); + auto incidentZ = G4int(theProjectile->GetPDGCharge() + 0.5); + G4int residualA = targetA + incidentA - A; + G4int residualZ = targetZ + incidentZ - Z; + G4double residualMass = G4NucleiProperties::GetNuclearMass(residualA, residualZ); + G4ParticleHPKallbachMannSyst theKallbach( + compoundFraction, incidentEnergy, incidentMass, productEnergy, productMass, residualMass, + residualA, residualZ, targetMass, targetA, targetZ, incidentA, incidentZ, A, Z); cosTh = theKallbach.Sample(anEnergy); // end (angularRep == 2) branch - - } else if (angularRep > 10 && angularRep < 16) { + } + else if (angularRep > 10 && angularRep < 16) { G4double random = G4UniformRand(); - G4double* running = new G4double[nEnergies]; - running[0]=0; + auto running = new G4double[nEnergies]; + running[0] = 0; G4double weighted = 0; for (i = 1; i < nEnergies; i++) { - if (i != 0) running[i] = running[i-1]; - running[i] += theInt.GetBinIntegral(theManager.GetScheme(i-1), - theAngular[i-1].GetLabel(), theAngular[i].GetLabel(), - theAngular[i-1].GetValue(0), theAngular[i].GetValue(0)); - weighted += theInt.GetWeightedBinIntegral(theManager.GetScheme(i-1), - theAngular[i-1].GetLabel(), theAngular[i].GetLabel(), - theAngular[i-1].GetValue(0), theAngular[i].GetValue(0)); + if (i != 0) running[i] = running[i - 1]; + running[i] += theInt.GetBinIntegral(theManager.GetScheme(i - 1), theAngular[i - 1].GetLabel(), + theAngular[i].GetLabel(), theAngular[i - 1].GetValue(0), + theAngular[i].GetValue(0)); + weighted += theInt.GetWeightedBinIntegral( + theManager.GetScheme(i - 1), theAngular[i - 1].GetLabel(), theAngular[i].GetLabel(), + theAngular[i - 1].GetValue(0), theAngular[i].GetValue(0)); } // Cache the mean energy in this distribution - if (nEnergies == 1) + if (nEnergies == 1) fCache.Get()->currentMeanEnergy = 0.0; else - fCache.Get()->currentMeanEnergy = weighted/running[nEnergies-1]; - - if (nEnergies == 1) it = 0; + fCache.Get()->currentMeanEnergy = weighted / running[nEnergies - 1]; + + if (nEnergies == 1) it = 0; for (i = 1; i < nEnergies; i++) { it = i; - if(randomSetKineticEnergy(fsEnergy); - G4double phi = twopi*G4UniformRand(); + G4double phi = twopi * G4UniformRand(); G4double theta = std::acos(cosTh); G4double sinth = std::sin(theta); G4double mtot = result->GetTotalMomentum(); - G4ThreeVector tempVector(mtot*sinth*std::cos(phi), mtot*sinth*std::sin(phi), mtot*std::cos(theta) ); + G4ThreeVector tempVector(mtot * sinth * std::cos(phi), mtot * sinth * std::sin(phi), + mtot * std::cos(theta)); result->SetMomentum(tempVector); return result; } - #define MERGE_NEW void G4ParticleHPContAngularPar::PrepareTableInterpolation() @@ -620,7 +614,7 @@ void G4ParticleHPContAngularPar::PrepareTableInterpolation() for (G4int ie = 0; ie < nDiscreteEnergies; ie++) { // check if energy is already present and subtract epsilon if that's the case G4double myE = theAngular[ie].GetLabel(); - while (theDiscreteEnergiesOwn.find(myE) != theDiscreteEnergiesOwn.end() ) { + while (theDiscreteEnergiesOwn.find(myE) != theDiscreteEnergiesOwn.end()) { myE -= 1e-6; } theDiscreteEnergiesOwn[myE] = ie; @@ -639,7 +633,7 @@ void G4ParticleHPContAngularPar::PrepareTableInterpolation() /* * - + if( !angParPrev ) return; //----- Discrete energies: use energies that appear in one or another @@ -650,14 +644,13 @@ void G4ParticleHPContAngularPar::PrepareTableInterpolation() for(ie=0; ietheAngular[ie].GetLabel()); } - - //--- Get the values for which interpolation will be done : all energies of this and previous ContAngularPar - for(ie=nDiscreteEnergies; ieGetNEnergies(); G4double minEnerPrev = angParPrev->GetMinEner(); G4double maxEnerPrev = angParPrev->GetMaxEner(); @@ -673,29 +666,27 @@ void G4ParticleHPContAngularPar::PrepareTableInterpolation() */ } - -void -G4ParticleHPContAngularPar::BuildByInterpolation(G4double anEnergy, - G4InterpolationScheme aScheme, - G4ParticleHPContAngularPar& angpar1, - G4ParticleHPContAngularPar& angpar2) +void G4ParticleHPContAngularPar::BuildByInterpolation(G4double anEnergy, + G4InterpolationScheme aScheme, + G4ParticleHPContAngularPar& angpar1, + G4ParticleHPContAngularPar& angpar2) { G4int ie, ie1, ie2, ie1Prev, ie2Prev; // Only rebuild the interpolation table if there is a new interaction. // For several subsequent samplings of final state particles in the same // interaction the existing table should be used - if (fCache.Get()->fresh != true) return; + if (!fCache.Get()->fresh) return; // Make copies of angpar1 and angpar2. Since these are given by reference // it can not be excluded that one of them is "this". Hence this code uses // potentially the old "this" for creating the new this - which leads to // memory corruption if the old is not stored as separarte object for lookup - const G4ParticleHPContAngularPar copyAngpar1(angpar1),copyAngpar2(angpar2); - + const G4ParticleHPContAngularPar copyAngpar1(angpar1), copyAngpar2(angpar2); + nAngularParameters = copyAngpar1.nAngularParameters; theManager = copyAngpar1.theManager; theEnergy = anEnergy; - theMinEner = DBL_MAX; // min and max will be re-calculated after interpolation + theMinEner = DBL_MAX; // min and max will be re-calculated after interpolation theMaxEner = -DBL_MAX; // The two discrete sets must be merged. A vector holds the temporary data to @@ -704,11 +695,11 @@ G4ParticleHPContAngularPar::BuildByInterpolation(G4double anEnergy, // needs to call the explicit Set() method instead. // First, average probabilities for those lines that are in both sets - const std::map discEnerOwn1 = copyAngpar1.GetDiscreteEnergiesOwn(); - const std::map discEnerOwn2 = copyAngpar2.GetDiscreteEnergiesOwn(); - std::map::const_iterator itedeo1; - std::map::const_iterator itedeo2; - std::vector vAngular(discEnerOwn1.size() ); + const std::map discEnerOwn1 = copyAngpar1.GetDiscreteEnergiesOwn(); + const std::map discEnerOwn2 = copyAngpar2.GetDiscreteEnergiesOwn(); + std::map::const_iterator itedeo1; + std::map::const_iterator itedeo2; + std::vector vAngular(discEnerOwn1.size()); G4double discEner1; for (itedeo1 = discEnerOwn1.cbegin(); itedeo1 != discEnerOwn1.cend(); ++itedeo1) { discEner1 = itedeo1->first; @@ -720,9 +711,10 @@ G4ParticleHPContAngularPar::BuildByInterpolation(G4double anEnergy, } ie1 = itedeo1->second; itedeo2 = discEnerOwn2.find(discEner1); - if( itedeo2 == discEnerOwn2.cend() ) { + if (itedeo2 == discEnerOwn2.cend()) { ie2 = -1; - } else { + } + else { ie2 = itedeo2->second; } vAngular[ie1] = new G4ParticleHPList(); @@ -732,15 +724,15 @@ G4ParticleHPContAngularPar::BuildByInterpolation(G4double anEnergy, val1 = copyAngpar1.theAngular[ie1].GetValue(ip); if (ie2 != -1) { val2 = copyAngpar2.theAngular[ie2].GetValue(ip); - } else { + } + else { val2 = 0.; } - G4double value = theInt.Interpolate(aScheme, anEnergy, - copyAngpar1.theEnergy, copyAngpar2.theEnergy, - val1, val2); + G4double value = theInt.Interpolate(aScheme, anEnergy, copyAngpar1.theEnergy, + copyAngpar2.theEnergy, val1, val2); vAngular[ie1]->SetValue(ip, value); } - } // itedeo1 loop + } // itedeo1 loop // Add the ones in set2 but not in set1 std::vector::const_iterator itv; @@ -750,7 +742,7 @@ G4ParticleHPContAngularPar::BuildByInterpolation(G4double anEnergy, ie2 = itedeo2->second; G4bool notFound = true; itedeo1 = discEnerOwn1.find(discEner2); - if (itedeo1 != discEnerOwn1.cend() ) { + if (itedeo1 != discEnerOwn1.cend()) { notFound = false; } if (notFound) { @@ -764,8 +756,8 @@ G4ParticleHPContAngularPar::BuildByInterpolation(G4double anEnergy, // find position to insert G4bool isInserted = false; ie = 0; - for (itv = vAngular.cbegin(); itv != vAngular.cend(); ++itv,++ie) { - if (discEner2 > (*itv)->GetLabel() ) { + for (itv = vAngular.cbegin(); itv != vAngular.cend(); ++itv, ++ie) { + if (discEner2 > (*itv)->GetLabel()) { itv = vAngular.insert(itv, new G4ParticleHPList); (*itv)->SetLabel(copyAngpar2.theAngular[ie2].GetLabel()); isInserted = true; @@ -773,7 +765,7 @@ G4ParticleHPContAngularPar::BuildByInterpolation(G4double anEnergy, } } if (!isInserted) { - ie=(G4int)vAngular.size(); + ie = (G4int)vAngular.size(); vAngular.push_back(new G4ParticleHPList); vAngular[ie]->SetLabel(copyAngpar2.theAngular[ie2].GetLabel()); isInserted = true; @@ -783,26 +775,24 @@ G4ParticleHPContAngularPar::BuildByInterpolation(G4double anEnergy, for (G4int ip = 0; ip < nAngularParameters; ++ip) { val1 = 0; val2 = copyAngpar2.theAngular[ie2].GetValue(ip); - G4double value = theInt.Interpolate(aScheme, anEnergy, - copyAngpar1.theEnergy, - copyAngpar2.theEnergy, - val1, val2); + G4double value = theInt.Interpolate(aScheme, anEnergy, copyAngpar1.theEnergy, + copyAngpar2.theEnergy, val1, val2); vAngular[ie]->SetValue(ip, value); } - } // end if(notFound) - } // end loop on itedeo2 - - // Store new discrete list + } // end if(notFound) + } // end loop on itedeo2 + + // Store new discrete list nDiscreteEnergies = (G4int)vAngular.size(); - if (theAngular != 0) delete [] theAngular; - theAngular = 0; + delete[] theAngular; + theAngular = nullptr; if (nDiscreteEnergies > 0) { - theAngular = new G4ParticleHPList [nDiscreteEnergies]; + theAngular = new G4ParticleHPList[nDiscreteEnergies]; } theDiscreteEnergiesOwn.clear(); theDiscreteEnergies.clear(); for (ie = 0; ie < nDiscreteEnergies; ++ie) { - theAngular[ie].SetLabel(vAngular[ie]->GetLabel() ); + theAngular[ie].SetLabel(vAngular[ie]->GetLabel()); for (G4int ip = 0; ip < nAngularParameters; ++ip) { theAngular[ie].SetValue(ip, vAngular[ie]->GetValue(ip)); } @@ -817,13 +807,15 @@ G4ParticleHPContAngularPar::BuildByInterpolation(G4double anEnergy, // Get minimum and maximum energy interpolating // Don't use theMinEner or theMaxEner here, since the transformed energies - // need the interpolated range from the original Angpar - G4double interMinEner = copyAngpar1.GetMinEner() + (theEnergy-copyAngpar1.GetEnergy() ) - * (copyAngpar2.GetMinEner() - copyAngpar1.GetMinEner() ) - / (copyAngpar2.GetEnergy()-copyAngpar1.GetEnergy() ); - G4double interMaxEner = copyAngpar1.GetMaxEner() + (theEnergy-copyAngpar1.GetEnergy() ) - * (copyAngpar2.GetMaxEner()-copyAngpar1.GetMaxEner() ) - / (copyAngpar2.GetEnergy()-copyAngpar1.GetEnergy() ); + // need the interpolated range from the original Angpar + G4double interMinEner = copyAngpar1.GetMinEner() + + (theEnergy - copyAngpar1.GetEnergy()) + * (copyAngpar2.GetMinEner() - copyAngpar1.GetMinEner()) + / (copyAngpar2.GetEnergy() - copyAngpar1.GetEnergy()); + G4double interMaxEner = copyAngpar1.GetMaxEner() + + (theEnergy - copyAngpar1.GetEnergy()) + * (copyAngpar2.GetMaxEner() - copyAngpar1.GetMaxEner()) + / (copyAngpar2.GetEnergy() - copyAngpar1.GetEnergy()); // Loop to energies of new set theEnergiesTransformed.clear(); @@ -847,7 +839,7 @@ G4ParticleHPContAngularPar::BuildByInterpolation(G4double anEnergy, for (ie1 = nDiscreteEnergies1; ie1 < nEnergies1; ++ie1) { e1 = copyAngpar1.theAngular[ie1].GetLabel(); eTNorm1 = (e1 - minEner1); - if (maxEner1 != minEner1) eTNorm1 /= (maxEner1-minEner1); + if (maxEner1 != minEner1) eTNorm1 /= (maxEner1 - minEner1); if (eTNorm1 >= 0 && eTNorm1 <= 1) theEnergiesTransformed.insert(eTNorm1); } @@ -856,66 +848,66 @@ G4ParticleHPContAngularPar::BuildByInterpolation(G4double anEnergy, for (ie2 = nDiscreteEnergies2; ie2 < nEnergies2; ++ie2) { e2 = copyAngpar2.theAngular[ie2].GetLabel(); eTNorm2 = (e2 - minEner2); - if (maxEner2 != minEner2) eTNorm2 /= (maxEner2-minEner2); + if (maxEner2 != minEner2) eTNorm2 /= (maxEner2 - minEner2); if (eTNorm2 >= 0 && eTNorm2 <= 1) theEnergiesTransformed.insert(eTNorm2); } // Now the list of energies is complete - nEnergies = nDiscreteEnergies+(G4int)theEnergiesTransformed.size(); - + nEnergies = nDiscreteEnergies + (G4int)theEnergiesTransformed.size(); + // Create final array of angular parameters - G4ParticleHPList* theNewAngular = new G4ParticleHPList [nEnergies]; + auto theNewAngular = new G4ParticleHPList[nEnergies]; // Copy discrete energies and interpolated parameters to new array - - if (theAngular != 0) { - for (ie = 0; ie < nDiscreteEnergies; ++ie) { + + if (theAngular != nullptr) { + for (ie = 0; ie < nDiscreteEnergies; ++ie) { theNewAngular[ie].SetLabel(theAngular[ie].GetLabel()); for (G4int ip = 0; ip < nAngularParameters; ++ip) { - theNewAngular[ie].SetValue(ip,theAngular[ie].GetValue(ip)); + theNewAngular[ie].SetValue(ip, theAngular[ie].GetValue(ip)); } } - delete [] theAngular; + delete[] theAngular; } theAngular = theNewAngular; - + // Interpolate the continuous energies for new array - std::set::const_iterator iteet = theEnergiesTransformed.begin(); + auto iteet = theEnergiesTransformed.begin(); G4double e1Interp(0.); G4double e2Interp(0.); - for (ie = nDiscreteEnergies; ie < nEnergies; ++ie, ++iteet) { + for (ie = nDiscreteEnergies; ie < nEnergies; ++ie, ++iteet) { G4double eT = (*iteet); //--- Use eT1 = eT: Get energy and parameters of copyAngpar1 for this eT e1Interp = (maxEner1 - minEner1) * eT + minEner1; //----- Get parameter value corresponding to this e1Interp for (ie1 = nDiscreteEnergies1; ie1 < nEnergies1; ++ie1) { - if ((copyAngpar1.theAngular[ie1].GetLabel() - e1Interp) > 1.E-10*e1Interp) break; + if ((copyAngpar1.theAngular[ie1].GetLabel() - e1Interp) > 1.E-10 * e1Interp) break; } ie1Prev = ie1 - 1; - if (ie1 == 0) ++ie1Prev; + if (ie1 == 0) ++ie1Prev; if (ie1 == nEnergies1) { ie1--; ie1Prev = ie1; } //--- Use eT2 = eT: Get energy and parameters of copyAngpar2 for this eT - e2Interp = (maxEner2-minEner2) * eT + minEner2; + e2Interp = (maxEner2 - minEner2) * eT + minEner2; //----- Get parameter value corresponding to this e2Interp for (ie2 = nDiscreteEnergies2; ie2 < nEnergies2; ++ie2) { - if ((copyAngpar2.theAngular[ie2].GetLabel() - e2Interp) > 1.E-10*e2Interp) break; + if ((copyAngpar2.theAngular[ie2].GetLabel() - e2Interp) > 1.E-10 * e2Interp) break; } ie2Prev = ie2 - 1; - if (ie2 == 0) ++ie2Prev; + if (ie2 == 0) ++ie2Prev; if (ie2 == nEnergies2) { ie2--; ie2Prev = ie2; } - //---- Energy corresponding to energy transformed - G4double eN = (interMaxEner-interMinEner) * eT + interMinEner; - + //---- Energy corresponding to energy transformed + G4double eN = (interMaxEner - interMinEner) * eT + interMinEner; + theAngular[ie].SetLabel(eN); if (eN < theMinEner) { theMinEner = eN; @@ -923,47 +915,45 @@ G4ParticleHPContAngularPar::BuildByInterpolation(G4double anEnergy, if (eN > theMaxEner) { theMaxEner = eN; } - + G4double val1(0.); G4double val2(0.); G4double value(0.); for (G4int ip = 0; ip < nAngularParameters; ++ip) { - val1 = theInt.Interpolate2(theManager.GetScheme(ie), - e1Interp, - copyAngpar1.theAngular[ie1Prev].GetLabel(), - copyAngpar1.theAngular[ie1].GetLabel(), - copyAngpar1.theAngular[ie1Prev].GetValue(ip), - copyAngpar1.theAngular[ie1].GetValue(ip)) * (maxEner1-minEner1); - val2 = theInt.Interpolate2(theManager.GetScheme(ie), - e2Interp, - copyAngpar2.theAngular[ie2Prev].GetLabel(), - copyAngpar2.theAngular[ie2].GetLabel(), - copyAngpar2.theAngular[ie2Prev].GetValue(ip), - copyAngpar2.theAngular[ie2].GetValue(ip)) * (maxEner2-minEner2); - - value = theInt.Interpolate(aScheme, anEnergy, - copyAngpar1.theEnergy, copyAngpar2.theEnergy, + val1 = theInt.Interpolate2( + theManager.GetScheme(ie), e1Interp, copyAngpar1.theAngular[ie1Prev].GetLabel(), + copyAngpar1.theAngular[ie1].GetLabel(), copyAngpar1.theAngular[ie1Prev].GetValue(ip), + copyAngpar1.theAngular[ie1].GetValue(ip)) + * (maxEner1 - minEner1); + val2 = theInt.Interpolate2( + theManager.GetScheme(ie), e2Interp, copyAngpar2.theAngular[ie2Prev].GetLabel(), + copyAngpar2.theAngular[ie2].GetLabel(), copyAngpar2.theAngular[ie2Prev].GetValue(ip), + copyAngpar2.theAngular[ie2].GetValue(ip)) + * (maxEner2 - minEner2); + + value = theInt.Interpolate(aScheme, anEnergy, copyAngpar1.theEnergy, copyAngpar2.theEnergy, val1, val2); if (interMaxEner != interMinEner) { - value /= (interMaxEner-interMinEner); - } else if (value != 0) { - throw G4HadronicException(__FILE__, __LINE__, - "G4ParticleHPContAngularPar::PrepareTableInterpolation interMaxEner == interMinEner and value != 0."); + value /= (interMaxEner - interMinEner); + } + else if (value != 0) { + throw G4HadronicException(__FILE__, __LINE__, + "G4ParticleHPContAngularPar::PrepareTableInterpolation " + "interMaxEner == interMinEner and value != 0."); } theAngular[ie].SetValue(ip, value); } } // end loop on nDiscreteEnergies - for (itv = vAngular.cbegin(); itv != vAngular.cend(); ++itv) delete (*itv); - + for (itv = vAngular.cbegin(); itv != vAngular.cend(); ++itv) + delete (*itv); } - void G4ParticleHPContAngularPar::Dump() const { - G4cout << theEnergy << " " << nEnergies << " " << nDiscreteEnergies - << " " << nAngularParameters << G4endl; + G4cout << theEnergy << " " << nEnergies << " " << nDiscreteEnergies << " " << nAngularParameters + << G4endl; - for (G4int ii = 0; ii < nEnergies; ii++) theAngular[ii].Dump(); + for (G4int ii = 0; ii < nEnergies; ii++) + theAngular[ii].Dump(); } - diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPContEnergyAngular.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPContEnergyAngular.cc index fd8acd4a6fd..acf8a0ee220 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPContEnergyAngular.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPContEnergyAngular.cc @@ -27,25 +27,25 @@ // J.P. Wellisch, Nov-1996 // A prototype of the low energy neutron transport model. // -// 080721 To be "ClearHistories" effective, the selection scheme of angular distribution is modified by T. Koi +// 080721 To be "ClearHistories" effective, the selection scheme of angular distribution is modified +// by T. Koi // // P. Arce, Dec-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPContEnergyAngular.hh" -G4ReactionProduct* -G4ParticleHPContEnergyAngular::Sample(G4double anEnergy, G4double massCode, - G4double /*mass*/) +G4ReactionProduct* G4ParticleHPContEnergyAngular::Sample(G4double anEnergy, G4double massCode, + G4double /*mass*/) { G4ReactionProduct* result; G4int i(0); G4int it(0); for (i = 0; i < nEnergy; i++) { it = i; -#ifdef PHP_AS_HP - if(theAngular[i].GetEnergy() > anEnergy) break; +#ifdef PHP_AS_HP + if (theAngular[i].GetEnergy() > anEnergy) break; #else - if(theAngular[i].GetEnergy() >= anEnergy) break; + if (theAngular[i].GetEnergy() >= anEnergy) break; #endif } @@ -54,72 +54,68 @@ G4ParticleHPContEnergyAngular::Sample(G4double anEnergy, G4double massCode, theAngular[0].SetTarget(GetTarget()); theAngular[0].SetTargetCode(theTargetCode); theAngular[0].SetPrimary(GetProjectileRP()); - result = theAngular[0].Sample(anEnergy, massCode, targetMass, - theAngularRep, theInterpolation); - currentMeanEnergy.Put(theAngular[0].MeanEnergyOfThisInteraction() ); - - } else { - // interpolation through alternating sampling. This needs improvement @@@ - // This is the cause of the He3 problem !!!!!!!! - // See to it, if you can improve this. - //G4double random = G4UniformRand(); - //G4double deltaE = theAngular[it].GetEnergy()-theAngular[it-1].GetEnergy(); - //G4double offset = theAngular[it].GetEnergy()-anEnergy; - //if(randomSetInterpolation(theInterpolation); fCacheAngular.Get()->BuildByInterpolation(anEnergy, theManager.GetScheme(0), - (theAngular[it-1]), (theAngular[it]) ); + (theAngular[it - 1]), (theAngular[it])); fCacheAngular.Get()->SetTarget(GetTarget()); fCacheAngular.Get()->SetTargetCode(theTargetCode); fCacheAngular.Get()->SetPrimary(GetProjectileRP()); - result = fCacheAngular.Get()->Sample(anEnergy, massCode, targetMass, - theAngularRep, theInterpolation); - currentMeanEnergy.Put(fCacheAngular.Get()->MeanEnergyOfThisInteraction() ); + result = + fCacheAngular.Get()->Sample(anEnergy, massCode, targetMass, theAngularRep, theInterpolation); + currentMeanEnergy.Put(fCacheAngular.Get()->MeanEnergyOfThisInteraction()); #endif - } // end (it != 0) branch + } // end (it != 0) branch return result; } - G4double G4ParticleHPContEnergyAngular::MeanEnergyOfThisInteraction() { G4double result(0); if (currentMeanEnergy.Get() < -1) { - throw G4HadronicException(__FILE__, __LINE__, - "G4ParticleHPContEnergyAngular: Logical error in Product class"); - } else { - result = currentMeanEnergy.Get(); + throw G4HadronicException(__FILE__, __LINE__, + "G4ParticleHPContEnergyAngular: Logical error in Product class"); } + result = currentMeanEnergy.Get(); + currentMeanEnergy.Put(-2); return result; } - void G4ParticleHPContEnergyAngular::ClearHistories() -{ - if (theAngular!= NULL) { - for (G4int i = 0; i < nEnergy; i++) theAngular[i].ClearHistories(); +{ + if (theAngular != nullptr) { + for (G4int i = 0; i < nEnergy; i++) + theAngular[i].ClearHistories(); } // Added fCacheAngular ClearHistories() - this is the one actually used! // Maybe theAngular does not even need ClearHistories()? - if (fCacheAngular.Get() != 0) fCacheAngular.Get()->ClearHistories(); + if (fCacheAngular.Get() != nullptr) fCacheAngular.Get()->ClearHistories(); } - diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPD2AInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPD2AInelasticFS.cc index 380a16bac4c..04c60a52973 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPD2AInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPD2AInelasticFS.cc @@ -30,57 +30,63 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPD2AInelasticFS.hh" -#include "G4Nucleus.hh" + #include "G4Alpha.hh" #include "G4Deuteron.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHPD2AInelasticFS::G4ParticleHPD2AInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHPD2AInelasticFS_F32" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHPD2AInelasticFS_F32"); } -G4HadFinalState * G4ParticleHPD2AInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHPD2AInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[3]; + G4ParticleDefinition* theDefs[3]; theDefs[0] = G4Deuteron::Deuteron(); theDefs[1] = G4Alpha::Alpha(); theDefs[2] = G4Alpha::Alpha(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 3); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHPD2AInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHPD2AInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-9; - ResidualZ = Z-5; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-9; - ResidualZ = Z-4; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-8; - ResidualZ = Z-4; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A-7; - ResidualZ = Z-4; - } else if( projectile == G4He3::He3() ) { - ResidualA = A-7; - ResidualZ = Z-3; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A-6; - ResidualZ = Z-3; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 9; + ResidualZ = Z - 5; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 9; + ResidualZ = Z - 4; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 8; + ResidualZ = Z - 4; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A - 7; + ResidualZ = Z - 4; + } + else if (projectile == G4He3::He3()) { + ResidualA = A - 7; + ResidualZ = Z - 3; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A - 6; + ResidualZ = Z - 3; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPDAInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPDAInelasticFS.cc index b6d201501a5..c14c8bc3ea6 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPDAInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPDAInelasticFS.cc @@ -30,56 +30,62 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPDAInelasticFS.hh" -#include "G4Nucleus.hh" -#include "G4Deuteron.hh" + #include "G4Alpha.hh" +#include "G4Deuteron.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHPDAInelasticFS::G4ParticleHPDAInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHPDAInelasticFS_F36" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHPDAInelasticFS_F36"); } -G4HadFinalState * G4ParticleHPDAInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHPDAInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[2]; + G4ParticleDefinition* theDefs[2]; theDefs[0] = G4Deuteron::Deuteron(); theDefs[1] = G4Alpha::Alpha(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 2); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHPDAInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHPDAInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-5; - ResidualZ = Z-3; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-5; - ResidualZ = Z-2; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-4; - ResidualZ = Z-2; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A-3; - ResidualZ = Z-2; - } else if( projectile == G4He3::He3() ) { - ResidualA = A-3; - ResidualZ = Z-1; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A-2; - ResidualZ = Z-1; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 5; + ResidualZ = Z - 3; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 5; + ResidualZ = Z - 2; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 4; + ResidualZ = Z - 2; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A - 3; + ResidualZ = Z - 2; + } + else if (projectile == G4He3::He3()) { + ResidualA = A - 3; + ResidualZ = Z - 1; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A - 2; + ResidualZ = Z - 1; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPDInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPDInelasticFS.cc index 2d568b7a456..c3c649ffc09 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPDInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPDInelasticFS.cc @@ -30,49 +30,55 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPDInelasticFS.hh" -#include "G4Nucleus.hh" + #include "G4Deuteron.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHPDInelasticFS::G4ParticleHPDInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHPDInelasticFS_F24" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHPDInelasticFS_F24"); } -void G4ParticleHPDInelasticFS::Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHPDInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticCompFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-1; - ResidualZ = Z-1; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-1; - ResidualZ = Z; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A; - ResidualZ = Z; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A+1; - ResidualZ = Z; - } else if( projectile == G4He3::He3() ) { - ResidualA = A+1; - ResidualZ = Z+1; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A+2; - ResidualZ = Z+1; - } + G4ParticleHPInelasticCompFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 1; + ResidualZ = Z - 1; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 1; + ResidualZ = Z; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A; + ResidualZ = Z; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A + 1; + ResidualZ = Z; + } + else if (projectile == G4He3::He3()) { + ResidualA = A + 1; + ResidualZ = Z + 1; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A + 2; + ResidualZ = Z + 1; + } - G4ParticleHPInelasticCompFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticCompFS::InitGammas(ResidualA, ResidualZ); } -G4HadFinalState * G4ParticleHPDInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHPDInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { + // do the final state + G4ParticleHPInelasticCompFS::CompositeApply(theTrack, G4Deuteron::Deuteron()); -// do the final state - G4ParticleHPInelasticCompFS::CompositeApply(theTrack, G4Deuteron::Deuteron()); - -// return the result - return theResult.Get(); + // return the result + return theResult.Get(); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPData.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPData.cc index fe9b23d8f04..5384ba3c9e4 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPData.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPData.cc @@ -30,72 +30,75 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPData.hh" + #include "G4PhysicsFreeVector.hh" - G4ParticleHPData::G4ParticleHPData(G4ParticleDefinition* projectile ) - : theProjectile(projectile) - { - //const char* theDataDirVariable; - if( projectile == G4Neutron::Neutron() ) { - theDataDirVariable = "G4NEUTRONHPDATA"; - }else if( projectile == G4Proton::Proton() ) { - theDataDirVariable = "G4PROTONHPDATA"; - }else if( projectile == G4Deuteron::Deuteron() ) { - theDataDirVariable = "G4DEUTERONHPDATA"; - }else if( projectile == G4Triton::Triton() ) { - theDataDirVariable = "G4TRITONHPDATA"; - }else if( projectile == G4He3::He3() ) { - theDataDirVariable = "G4HE3HPDATA"; - }else if( projectile == G4Alpha::Alpha() ) { - theDataDirVariable = "G4ALPHAHPDATA"; - } +G4ParticleHPData::G4ParticleHPData(G4ParticleDefinition* projectile) : theProjectile(projectile) +{ + // const char* theDataDirVariable; + if (projectile == G4Neutron::Neutron()) { + theDataDirVariable = "G4NEUTRONHPDATA"; + } + else if (projectile == G4Proton::Proton()) { + theDataDirVariable = "G4PROTONHPDATA"; + } + else if (projectile == G4Deuteron::Deuteron()) { + theDataDirVariable = "G4DEUTERONHPDATA"; + } + else if (projectile == G4Triton::Triton()) { + theDataDirVariable = "G4TRITONHPDATA"; + } + else if (projectile == G4He3::He3()) { + theDataDirVariable = "G4HE3HPDATA"; + } + else if (projectile == G4Alpha::Alpha()) { + theDataDirVariable = "G4ALPHAHPDATA"; + } - numEle = (G4int)G4Element::GetNumberOfElements(); - for ( G4int i=0 ; iGetVectorLength(); - if(len==0) return new G4PhysicsFreeVector(0, 0., 0.); - G4double emin = theVector->GetX(0); - G4double emax = theVector->GetX(len-1); +G4ParticleHPData::~G4ParticleHPData() +{ + for (auto it = theData.cbegin(); it != theData.cend(); ++it) + delete *it; + theData.clear(); +} + +G4ParticleHPData* G4ParticleHPData::Instance(G4ParticleDefinition* projectile) +{ + static G4ThreadLocal G4ParticleHPData* theCrossSectionData_G4MT_TLS_ = nullptr; + if (theCrossSectionData_G4MT_TLS_ == nullptr) + theCrossSectionData_G4MT_TLS_ = new G4ParticleHPData(projectile); + G4ParticleHPData& theCrossSectionData = *theCrossSectionData_G4MT_TLS_; + return &theCrossSectionData; +} - G4PhysicsFreeVector * theResult = new G4PhysicsFreeVector(len, emin, emax); - for (G4int i=0; iPutValues(i, theVector->GetX(i), theVector->GetY(i)); - } - return theResult; +G4PhysicsVector* G4ParticleHPData::DoPhysicsVector(G4ParticleHPVector* theVector) +{ + G4int len = theVector->GetVectorLength(); + if (len == 0) return new G4PhysicsFreeVector(0, 0., 0.); + G4double emin = theVector->GetX(0); + G4double emax = theVector->GetX(len - 1); + + auto theResult = new G4PhysicsFreeVector(len, emin, emax); + for (G4int i = 0; i < len; ++i) { + theResult->PutValues(i, theVector->GetX(i), theVector->GetY(i)); } + return theResult; +} void G4ParticleHPData::addPhysicsVector() { - for ( G4int i = numEle; i < (G4int)G4Element::GetNumberOfElements() ; ++i ) - { - theData.push_back ( new G4ParticleHPElementData ); - (*theData[i]).Init((*(G4Element::GetElementTable()))[i], theProjectile, theDataDirVariable); - } - numEle = (G4int)G4Element::GetNumberOfElements(); + for (G4int i = numEle; i < (G4int)G4Element::GetNumberOfElements(); ++i) { + theData.push_back(new G4ParticleHPElementData); + (*theData[i]).Init((*(G4Element::GetElementTable()))[i], theProjectile, theDataDirVariable); + } + numEle = (G4int)G4Element::GetNumberOfElements(); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPDeExGammas.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPDeExGammas.cc index 0a6f844c59c..e7ef4f51163 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPDeExGammas.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPDeExGammas.cc @@ -37,7 +37,7 @@ #include "G4ReactionProduct.hh" #include "G4SystemOfUnits.hh" -G4ParticleHPDeExGammas::G4ParticleHPDeExGammas() {} +G4ParticleHPDeExGammas::G4ParticleHPDeExGammas() = default; G4ParticleHPDeExGammas::~G4ParticleHPDeExGammas() { @@ -110,7 +110,7 @@ G4ReactionProductVector* G4ParticleHPDeExGammas::GetDecayGammas(G4int i) const { G4int idx = i; if (idx >= nLevels || idx <= 0) return nullptr; - G4ReactionProductVector* result = new G4ReactionProductVector(); + auto result = new G4ReactionProductVector(); for (;;) { if (idx <= 0) { diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPDiscreteTwoBody.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPDiscreteTwoBody.cc index f5e97c300d3..1a40c5b49b3 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPDiscreteTwoBody.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPDiscreteTwoBody.cc @@ -27,295 +27,280 @@ // J.P. Wellisch, Nov-1996 // A prototype of the low energy neutron transport model. // -//080612 Bug fix contribution from Benoit Pirard and Laurent Desorgher (Univ. Bern) #2,3 -//080709 Bug fix Sampling Legendre expansion by T. Koi -//101110 Bug fix in MF=6, LAW=2 case; contribution from E. Mendoza, D. Cano-Ott (CIEMAT) +// 080612 Bug fix contribution from Benoit Pirard and Laurent Desorgher (Univ. Bern) #2,3 +// 080709 Bug fix Sampling Legendre expansion by T. Koi +// 101110 Bug fix in MF=6, LAW=2 case; contribution from E. Mendoza, D. Cano-Ott (CIEMAT) // // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPDiscreteTwoBody.hh" -#include "G4Gamma.hh" + +#include "G4Alpha.hh" +#include "G4Deuteron.hh" #include "G4Electron.hh" -#include "G4Positron.hh" +#include "G4Gamma.hh" +#include "G4He3.hh" #include "G4Neutron.hh" +#include "G4ParticleHPLegendreStore.hh" +#include "G4ParticleHPVector.hh" +#include "G4Positron.hh" #include "G4Proton.hh" -#include "G4Deuteron.hh" #include "G4Triton.hh" -#include "G4He3.hh" -#include "G4Alpha.hh" -#include "G4ParticleHPVector.hh" -#include "G4ParticleHPLegendreStore.hh" -G4ReactionProduct * G4ParticleHPDiscreteTwoBody::Sample(G4double anEnergy, G4double massCode, G4double ) -{ // Interpolation still only for the most used parts; rest to be Done @@@@@ - G4ReactionProduct * result = new G4ReactionProduct; - G4int Z = static_cast(massCode/1000); - G4int A = static_cast(massCode-1000*Z); +G4ReactionProduct* G4ParticleHPDiscreteTwoBody::Sample(G4double anEnergy, G4double massCode, + G4double) +{ // Interpolation still only for the most used parts; rest to be Done @@@@@ + auto result = new G4ReactionProduct; + auto Z = static_cast(massCode / 1000); + auto A = static_cast(massCode - 1000 * Z); + + if (massCode == 0) { + result->SetDefinition(G4Gamma::Gamma()); + } + else if (A == 0) { + result->SetDefinition(G4Electron::Electron()); + if (Z == 1) result->SetDefinition(G4Positron::Positron()); + } + else if (A == 1) { + result->SetDefinition(G4Neutron::Neutron()); + if (Z == 1) result->SetDefinition(G4Proton::Proton()); + } + else if (A == 2) { + result->SetDefinition(G4Deuteron::Deuteron()); + } + else if (A == 3) { + result->SetDefinition(G4Triton::Triton()); + if (Z == 2) result->SetDefinition(G4He3::He3()); + } + else if (A == 4) { + result->SetDefinition(G4Alpha::Alpha()); + if (Z != 2) throw G4HadronicException(__FILE__, __LINE__, "Unknown ion case 1"); + } + else { + throw G4HadronicException(__FILE__, __LINE__, + "G4ParticleHPDiscreteTwoBody: Unknown ion case 2"); + } + + // get cosine(theta) + G4int i(0), it(0); + G4double cosTh(0); + for (i = 0; i < nEnergy; i++) { + it = i; + if (theCoeff[i].GetEnergy() > anEnergy) break; + } + if (it == 0 || it == nEnergy - 1) { + if (theCoeff[it].GetRepresentation() == 0) { + // TK Legendre expansion + G4ParticleHPLegendreStore theStore(1); + theStore.SetCoeff(0, theCoeff); + theStore.SetManager(theManager); + // cosTh = theStore.SampleMax(anEnergy); + // 080612TK contribution from Benoit Pirard and Laurent Desorgher (Univ. Bern) #3 + cosTh = theStore.SampleDiscreteTwoBody(anEnergy); + } + else if (theCoeff[it].GetRepresentation() == 12) // means LINLIN + { + G4ParticleHPVector theStore; + G4InterpolationManager aManager; + aManager.Init(LINLIN, theCoeff[it].GetNumberOfPoly() / 2); + theStore.SetInterpolationManager(aManager); + for (i = 0; i < theCoeff[it].GetNumberOfPoly(); i += 2) { + // 101110 + // theStore.SetX(i, theCoeff[it].GetCoeff(i)); + // theStore.SetY(i, theCoeff[it].GetCoeff(i)); + theStore.SetX(i / 2, theCoeff[it].GetCoeff(i)); + theStore.SetY(i / 2, theCoeff[it].GetCoeff(i + 1)); + } + cosTh = theStore.Sample(); + } + else if (theCoeff[it].GetRepresentation() == 14) // this is LOGLIN + { + G4ParticleHPVector theStore; + G4InterpolationManager aManager; + aManager.Init(LOGLIN, theCoeff[it].GetNumberOfPoly() / 2); + theStore.SetInterpolationManager(aManager); + for (i = 0; i < theCoeff[it].GetNumberOfPoly(); i += 2) { + // 101110 + // theStore.SetX(i, theCoeff[it].GetCoeff(i)); + // theStore.SetY(i, theCoeff[it].GetCoeff(i)); + theStore.SetX(i / 2, theCoeff[it].GetCoeff(i)); + theStore.SetY(i / 2, theCoeff[it].GetCoeff(i + 1)); + } + cosTh = theStore.Sample(); + } + else { + throw G4HadronicException(__FILE__, __LINE__, + "unknown representation type in Two-body scattering"); + } + } + else { + if (!bCheckDiffCoeffRepr + || theCoeff[it].GetRepresentation() == theCoeff[it - 1].GetRepresentation()) + { + if (theCoeff[it].GetRepresentation() == 0) { + // TK Legendre expansion + G4ParticleHPLegendreStore theStore(2); + theStore.SetCoeff(0, &(theCoeff[it - 1])); + theStore.SetCoeff(1, &(theCoeff[it])); + G4InterpolationManager aManager; + aManager.Init(theManager.GetScheme(it), 2); + theStore.SetManager(aManager); + // cosTh = theStore.SampleMax(anEnergy); + // 080709 TKDB + cosTh = theStore.SampleDiscreteTwoBody(anEnergy); + } + else if (theCoeff[it].GetRepresentation() == 12) // LINLIN + { + G4ParticleHPVector theBuff1; + G4InterpolationManager aManager1; + aManager1.Init(LINLIN, theCoeff[it - 1].GetNumberOfPoly() / 2); + theBuff1.SetInterpolationManager(aManager1); + for (i = 0; i < theCoeff[it - 1].GetNumberOfPoly(); i += 2) { + // 101110 + // theBuff1.SetX(i, theCoeff[it-1].GetCoeff(i)); + // theBuff1.SetY(i, theCoeff[it-1].GetCoeff(i)); + theBuff1.SetX(i / 2, theCoeff[it - 1].GetCoeff(i)); + theBuff1.SetY(i / 2, theCoeff[it - 1].GetCoeff(i + 1)); + } + G4ParticleHPVector theBuff2; + G4InterpolationManager aManager2; + aManager2.Init(LINLIN, theCoeff[it].GetNumberOfPoly() / 2); + theBuff2.SetInterpolationManager(aManager2); + for (i = 0; i < theCoeff[it].GetNumberOfPoly(); i += 2) { + // theBuff2.SetX(i, theCoeff[it].GetCoeff(i)); + // theBuff2.SetY(i, theCoeff[it].GetCoeff(i)); + theBuff2.SetX(i / 2, theCoeff[it].GetCoeff(i)); + theBuff2.SetY(i / 2, theCoeff[it].GetCoeff(i + 1)); + } + + G4double x1 = theCoeff[it - 1].GetEnergy(); + G4double x2 = theCoeff[it].GetEnergy(); + G4double x = anEnergy; + G4double y1, y2, y, mu; + + G4ParticleHPVector theStore1; + theStore1.SetInterpolationManager(aManager1); + G4ParticleHPVector theStore2; + theStore2.SetInterpolationManager(aManager2); + G4ParticleHPVector theStore; + + // for fixed mu get p1, p2 and interpolate according to x + for (i = 0; i < theBuff1.GetVectorLength(); i++) { + mu = theBuff1.GetX(i); + y1 = theBuff1.GetY(i); + y2 = theBuff2.GetY(mu); + y = theInt.Interpolate(theManager.GetScheme(it), x, x1, x2, y1, y2); + theStore1.SetData(i, mu, y); + } + for (i = 0; i < theBuff2.GetVectorLength(); i++) { + mu = theBuff2.GetX(i); + y1 = theBuff2.GetY(i); + y2 = theBuff1.GetY(mu); + y = theInt.Interpolate(theManager.GetScheme(it), x, x1, x2, y1, y2); + theStore2.SetData(i, mu, y); + } + theStore.Merge(&theStore1, &theStore2); // merge takes care of interpolationschemes + cosTh = theStore.Sample(); + } + else if (theCoeff[it].GetRepresentation() == 14) // TK LOG_LIN + { + G4ParticleHPVector theBuff1; + G4InterpolationManager aManager1; + aManager1.Init(LOGLIN, theCoeff[it - 1].GetNumberOfPoly() / 2); + theBuff1.SetInterpolationManager(aManager1); + for (i = 0; i < theCoeff[it - 1].GetNumberOfPoly(); i += 2) { + // 101110 + // theBuff1.SetX(i, theCoeff[it-1].GetCoeff(i)); + // theBuff1.SetY(i, theCoeff[it-1].GetCoeff(i)); + theBuff1.SetX(i / 2, theCoeff[it - 1].GetCoeff(i)); + theBuff1.SetY(i / 2, theCoeff[it - 1].GetCoeff(i + 1)); + } + + G4ParticleHPVector theBuff2; + G4InterpolationManager aManager2; + aManager2.Init(LOGLIN, theCoeff[it].GetNumberOfPoly() / 2); + theBuff2.SetInterpolationManager(aManager2); + for (i = 0; i < theCoeff[it].GetNumberOfPoly(); i += 2) { + // 101110 + // theBuff2.SetX(i, theCoeff[it].GetCoeff(i)); + // theBuff2.SetY(i, theCoeff[it].GetCoeff(i)); + theBuff2.SetX(i / 2, theCoeff[it].GetCoeff(i)); + theBuff2.SetY(i / 2, theCoeff[it].GetCoeff(i + 1)); + } + + G4double x1 = theCoeff[it - 1].GetEnergy(); + G4double x2 = theCoeff[it].GetEnergy(); + G4double x = anEnergy; + G4double y1, y2, y, mu; + + G4ParticleHPVector theStore1; + theStore1.SetInterpolationManager(aManager1); + G4ParticleHPVector theStore2; + theStore2.SetInterpolationManager(aManager2); + G4ParticleHPVector theStore; - if(massCode==0) - { - result->SetDefinition(G4Gamma::Gamma()); - } - else if(A==0) - { - result->SetDefinition(G4Electron::Electron()); - if(Z==1) result->SetDefinition(G4Positron::Positron()); - } - else if(A==1) - { - result->SetDefinition(G4Neutron::Neutron()); - if(Z==1) result->SetDefinition(G4Proton::Proton()); - } - else if(A==2) - { - result->SetDefinition(G4Deuteron::Deuteron()); - } - else if(A==3) - { - result->SetDefinition(G4Triton::Triton()); - if(Z==2) result->SetDefinition(G4He3::He3()); - } - else if(A==4) - { - result->SetDefinition(G4Alpha::Alpha()); - if(Z!=2) throw G4HadronicException(__FILE__, __LINE__, "Unknown ion case 1"); - } - else - { - throw G4HadronicException(__FILE__, __LINE__, "G4ParticleHPDiscreteTwoBody: Unknown ion case 2"); - } - -// get cosine(theta) - G4int i(0), it(0); - G4double cosTh(0); - for(i=0; ianEnergy) break; - } - if(it==0||it==nEnergy-1) - { - if(theCoeff[it].GetRepresentation()==0) - { -//TK Legendre expansion - G4ParticleHPLegendreStore theStore(1); - theStore.SetCoeff(0, theCoeff); - theStore.SetManager(theManager); - //cosTh = theStore.SampleMax(anEnergy); - //080612TK contribution from Benoit Pirard and Laurent Desorgher (Univ. Bern) #3 - cosTh = theStore.SampleDiscreteTwoBody(anEnergy); - } - else if(theCoeff[it].GetRepresentation()==12) // means LINLIN - { - G4ParticleHPVector theStore; - G4InterpolationManager aManager; - aManager.Init(LINLIN, theCoeff[it].GetNumberOfPoly()/2); - theStore.SetInterpolationManager(aManager); - for(i=0;iGetMass() + GetNeutron()->GetMass() + // - result->GetMass() - GetQValue(); + // G4double kinE = restEnergy/(1+result->GetMass()/residualMass); // non relativistic @@ + G4double A1 = GetTarget()->GetMass() / GetProjectileRP()->GetMass(); + G4double A1prim = result->GetMass() / GetProjectileRP()->GetMass(); + // G4double E1 = (A1+1)*(A1+1)/A1/A1*anEnergy; + // Bug fix Bugzilla #1815 + G4double E1 = anEnergy; + G4double kinE = (A1 + 1 - A1prim) / (A1 + 1) / (A1 + 1) * (A1 * E1 + (1 + A1) * GetQValue()); - //G4double restEnergy = anEnergy+GetQValue(); - -// assumed to be in CMS @@@@@@@@@@@@@@@@@ + result->SetKineticEnergy(kinE); // non relativistic @@ + G4double phi = CLHEP::twopi * G4UniformRand(); + G4double theta = std::acos(cosTh); + G4double sinth = std::sin(theta); + G4double mtot = result->GetTotalMomentum(); + G4ThreeVector tempVector(mtot * sinth * std::cos(phi), mtot * sinth * std::sin(phi), + mtot * std::cos(theta)); + result->SetMomentum(tempVector); - //080612TK contribution from Benoit Pirard and Laurent Desorgher (Univ. Bern) #2 - //G4double residualMass = GetTarget()->GetMass() + GetNeutron()->GetMass() - // - result->GetMass() - GetQValue(); - //G4double kinE = restEnergy/(1+result->GetMass()/residualMass); // non relativistic @@ - G4double A1 = GetTarget()->GetMass()/GetProjectileRP()->GetMass(); - G4double A1prim = result->GetMass()/GetProjectileRP()->GetMass(); - //G4double E1 = (A1+1)*(A1+1)/A1/A1*anEnergy; - //Bug fix Bugzilla #1815 - G4double E1 = anEnergy; - G4double kinE = (A1+1-A1prim)/(A1+1)/(A1+1)*(A1*E1+(1+A1)*GetQValue()); + // some garbage collection - result->SetKineticEnergy(kinE); // non relativistic @@ - G4double phi = CLHEP::twopi*G4UniformRand(); - G4double theta = std::acos(cosTh); - G4double sinth = std::sin(theta); - G4double mtot = result->GetTotalMomentum(); - G4ThreeVector tempVector(mtot*sinth*std::cos(phi), mtot*sinth*std::sin(phi), mtot*std::cos(theta) ); - result->SetMomentum(tempVector); - -// some garbage collection - -// return the result - return result; + // return the result + return result; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElastic.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElastic.cc index 05d65d43939..f9c4c5ab058 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElastic.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElastic.cc @@ -33,166 +33,166 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPElastic.hh" -#include "G4SystemOfUnits.hh" + #include "G4ParticleHPElasticFS.hh" #include "G4ParticleHPManager.hh" -#include "G4Threading.hh" #include "G4ParticleHPThermalBoost.hh" +#include "G4SystemOfUnits.hh" +#include "G4Threading.hh" - -G4ParticleHPElastic::G4ParticleHPElastic() - : G4HadronicInteraction("NeutronHPElastic"), theElastic(nullptr), numEle(0) +G4ParticleHPElastic::G4ParticleHPElastic() : G4HadronicInteraction("NeutronHPElastic") { - overrideSuspension = false; - SetMinEnergy(0.*eV); - SetMaxEnergy(20.*MeV); + overrideSuspension = false; + SetMinEnergy(0. * eV); + SetMaxEnergy(20. * MeV); } - G4ParticleHPElastic::~G4ParticleHPElastic() { - //the vectror is shared among threads, only master deletes - if ( ! G4Threading::IsWorkerThread() ) { - if ( theElastic != nullptr ) { - for ( auto it=theElastic->cbegin(); it!=theElastic->cend(); ++it ) { - delete *it; - } - theElastic->clear(); + // the vectror is shared among threads, only master deletes + if (!G4Threading::IsWorkerThread()) { + if (theElastic != nullptr) { + for (auto it = theElastic->cbegin(); it != theElastic->cend(); ++it) { + delete *it; } - } + theElastic->clear(); + } + } } - -G4HadFinalState * G4ParticleHPElastic::ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& aNucleus) +G4HadFinalState* G4ParticleHPElastic::ApplyYourself(const G4HadProjectile& aTrack, + G4Nucleus& aNucleus) { - return this->ApplyYourself(aTrack, aNucleus, 0); + return this->ApplyYourself(aTrack, aNucleus, false); } - //-------------------------------------------------------- // New method added by L. Thulliez (CEA-Saclay) 2021/05/04 //-------------------------------------------------------- -G4HadFinalState * G4ParticleHPElastic::ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& aNucleus, G4bool isFromTSL) +G4HadFinalState* G4ParticleHPElastic::ApplyYourself(const G4HadProjectile& aTrack, + G4Nucleus& aNucleus, G4bool isFromTSL) { - G4ParticleHPManager::GetInstance()->OpenReactionWhiteBoard(); - const G4Material * theMaterial = aTrack.GetMaterial(); - G4int n = (G4int)theMaterial->GetNumberOfElements(); - std::size_t index = theMaterial->GetElement(0)->GetIndex(); - - if ( ! isFromTSL ) { - if ( n != 1 ) { - G4int i; - G4double* xSec = new G4double[n]; - G4double sum=0; - const G4double * NumAtomsPerVolume = theMaterial->GetVecNbOfAtomsPerVolume(); - G4double rWeight; - G4ParticleHPThermalBoost aThermalE; - for ( i = 0; i < n; ++i ) { - index = theMaterial->GetElement(i)->GetIndex(); - rWeight = NumAtomsPerVolume[i]; - xSec[i] = ((*theElastic)[index])->GetXsec(aThermalE.GetThermalEnergy(aTrack, - theMaterial->GetElement(i), - theMaterial->GetTemperature())); - xSec[i] *= rWeight; - sum+=xSec[i]; - } - G4double random = G4UniformRand(); - G4double running = 0; - for ( i = 0; i < n; ++i ) { - running += xSec[i]; - index = theMaterial->GetElement(i)->GetIndex(); - if ( sum == 0 || random <= running/sum ) break; - } - delete [] xSec; - } - } else { + G4ParticleHPManager::GetInstance()->OpenReactionWhiteBoard(); + const G4Material* theMaterial = aTrack.GetMaterial(); + auto n = (G4int)theMaterial->GetNumberOfElements(); + std::size_t index = theMaterial->GetElement(0)->GetIndex(); + + if (!isFromTSL) { + if (n != 1) { G4int i; - if ( n != 1 ) { - for ( i = 0; i < n; ++i ) { - if ( aNucleus.GetZ_asInt() == (G4int)(theMaterial->GetElement(i)->GetZ()) ) { - index = theMaterial->GetElement(i)->GetIndex(); - } - } + auto xSec = new G4double[n]; + G4double sum = 0; + const G4double* NumAtomsPerVolume = theMaterial->GetVecNbOfAtomsPerVolume(); + G4double rWeight; + G4ParticleHPThermalBoost aThermalE; + for (i = 0; i < n; ++i) { + index = theMaterial->GetElement(i)->GetIndex(); + rWeight = NumAtomsPerVolume[i]; + xSec[i] = ((*theElastic)[index]) + ->GetXsec(aThermalE.GetThermalEnergy(aTrack, theMaterial->GetElement(i), + theMaterial->GetTemperature())); + xSec[i] *= rWeight; + sum += xSec[i]; + } + G4double random = G4UniformRand(); + G4double running = 0; + for (i = 0; i < n; ++i) { + running += xSec[i]; + index = theMaterial->GetElement(i)->GetIndex(); + if (sum == 0 || random <= running / sum) break; } - } - - G4HadFinalState* finalState = ((*theElastic)[index])->ApplyYourself(aTrack); - if (overrideSuspension) finalState->SetStatusChange(isAlive); - - // Overwrite target parameters - aNucleus.SetParameters(G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA(),G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargZ()); - const G4Element* target_element = (*G4Element::GetElementTable())[index]; - const G4Isotope* target_isotope=nullptr; - G4int iele = (G4int)target_element->GetNumberOfIsotopes(); - for ( G4int j = 0 ; j != iele ; ++j ) { - target_isotope=target_element->GetIsotope( j ); - if ( target_isotope->GetN() == G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA() ) break; - } - aNucleus.SetIsotope( target_isotope ); - - G4ParticleHPManager::GetInstance()->CloseReactionWhiteBoard(); - return finalState; + delete[] xSec; + } + } + else { + G4int i; + if (n != 1) { + for (i = 0; i < n; ++i) { + if (aNucleus.GetZ_asInt() == (G4int)(theMaterial->GetElement(i)->GetZ())) { + index = theMaterial->GetElement(i)->GetIndex(); + } + } + } + } + + // The boolean "true", as last argument, specifies to G4ParticleHPChannel::ApplyYourself + // that it is an elastic channel: this is needed for the special DBRC treatment. + G4HadFinalState* finalState = ((*theElastic)[index])->ApplyYourself(aTrack, -1, true); + + if (overrideSuspension) finalState->SetStatusChange(isAlive); + + // Overwrite target parameters + aNucleus.SetParameters(G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA(), + G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargZ()); + const G4Element* target_element = (*G4Element::GetElementTable())[index]; + const G4Isotope* target_isotope = nullptr; + auto iele = (G4int)target_element->GetNumberOfIsotopes(); + for (G4int j = 0; j != iele; ++j) { + target_isotope = target_element->GetIsotope(j); + if (target_isotope->GetN() + == G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA()) + break; + } + aNucleus.SetIsotope(target_isotope); + + G4ParticleHPManager::GetInstance()->CloseReactionWhiteBoard(); + return finalState; } - const std::pair G4ParticleHPElastic::GetFatalEnergyCheckLevels() const { - // max energy non-conservation is mass of heavy nucleus - return std::pair(10.0*perCent, 350.0*CLHEP::GeV); + // max energy non-conservation is mass of heavy nucleus + return std::pair(10.0 * perCent, 350.0 * CLHEP::GeV); } - -G4int G4ParticleHPElastic::GetVerboseLevel() const +G4int G4ParticleHPElastic::GetVerboseLevel() const { - return G4ParticleHPManager::GetInstance()->GetVerboseLevel(); + return G4ParticleHPManager::GetInstance()->GetVerboseLevel(); } - -void G4ParticleHPElastic::SetVerboseLevel( G4int newValue ) +void G4ParticleHPElastic::SetVerboseLevel(G4int newValue) { - G4ParticleHPManager::GetInstance()->SetVerboseLevel(newValue); + G4ParticleHPManager::GetInstance()->SetVerboseLevel(newValue); } - void G4ParticleHPElastic::BuildPhysicsTable(const G4ParticleDefinition&) { - - G4ParticleHPManager* hpmanager = G4ParticleHPManager::GetInstance(); - - theElastic = hpmanager->GetElasticFinalStates(); - - if ( G4Threading::IsMasterThread() ) { - - if ( theElastic == nullptr ) theElastic = new std::vector; - - if ( numEle == (G4int)G4Element::GetNumberOfElements() ) return; - - if ( theElastic->size() == G4Element::GetNumberOfElements() ) { - numEle = (G4int)G4Element::GetNumberOfElements(); - return; - } - - G4ParticleHPElasticFS * theFS = new G4ParticleHPElasticFS; - if(!G4FindDataDir("G4NEUTRONHPDATA")) - throw G4HadronicException(__FILE__, __LINE__, "Please setenv G4NEUTRONHPDATA to point to the neutron cross-section files."); - dirName = G4FindDataDir("G4NEUTRONHPDATA"); - G4String tString = "/Elastic"; - dirName = dirName + tString; - for ( G4int i = numEle; i < (G4int)G4Element::GetNumberOfElements(); ++i ) { - theElastic->push_back( new G4ParticleHPChannel ); - ((*theElastic)[i])->Init((*(G4Element::GetElementTable()))[i], dirName); - //while(!((*theElastic)[i])->Register(theFS)) ; - ((*theElastic)[i])->Register(theFS) ; - } - delete theFS; - hpmanager->RegisterElasticFinalStates( theElastic ); - - } - numEle = (G4int)G4Element::GetNumberOfElements(); + G4ParticleHPManager* hpmanager = G4ParticleHPManager::GetInstance(); + + theElastic = hpmanager->GetElasticFinalStates(); + + if (G4Threading::IsMasterThread()) { + if (theElastic == nullptr) theElastic = new std::vector; + + if (numEle == (G4int)G4Element::GetNumberOfElements()) return; + + if (theElastic->size() == G4Element::GetNumberOfElements()) { + numEle = (G4int)G4Element::GetNumberOfElements(); + return; + } + + auto theFS = new G4ParticleHPElasticFS; + if (G4FindDataDir("G4NEUTRONHPDATA") == nullptr) + throw G4HadronicException( + __FILE__, __LINE__, + "Please setenv G4NEUTRONHPDATA to point to the neutron cross-section files."); + dirName = G4FindDataDir("G4NEUTRONHPDATA"); + G4String tString = "/Elastic"; + dirName = dirName + tString; + for (G4int i = numEle; i < (G4int)G4Element::GetNumberOfElements(); ++i) { + theElastic->push_back(new G4ParticleHPChannel); + ((*theElastic)[i])->Init((*(G4Element::GetElementTable()))[i], dirName); + // while(!((*theElastic)[i])->Register(theFS)) ; + ((*theElastic)[i])->Register(theFS); + } + delete theFS; + hpmanager->RegisterElasticFinalStates(theElastic); + } + numEle = (G4int)G4Element::GetNumberOfElements(); } - void G4ParticleHPElastic::ModelDescription(std::ostream& outFile) const { - outFile << "High Precision model based on Evaluated Nuclear Data Files (ENDF) for inelastic reaction of neutrons below 20MeV\n"; + outFile << "High Precision model based on Evaluated Nuclear Data Files (ENDF) for inelastic " + "reaction of neutrons below 20MeV\n"; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElasticData.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElasticData.cc index 60705246c3d..6b1be5735dd 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElasticData.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElasticData.cc @@ -30,83 +30,75 @@ // 070523 add neglecting doppler broadening on the fly. T. Koi // 070613 fix memory leaking by T. Koi // 071002 enable cross section dump by T. Koi -// 080428 change checking point of "neglecting doppler broadening" flag +// 080428 change checking point of "neglecting doppler broadening" flag // from GetCrossSection to BuildPhysicsTable by T. Koi // 081024 G4NucleiPropertiesTable:: to G4NucleiProperties:: // // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPElasticData.hh" -#include "G4ParticleHPManager.hh" -#include "G4PhysicalConstants.hh" -#include "G4SystemOfUnits.hh" -#include "G4Neutron.hh" + +#include "G4Electron.hh" #include "G4ElementTable.hh" -#include "G4ParticleHPData.hh" -#include "G4ParticleHPManager.hh" #include "G4HadronicParameters.hh" -#include "G4Nucleus.hh" -#include "G4NucleiProperties.hh" #include "G4Neutron.hh" -#include "G4Electron.hh" - +#include "G4NucleiProperties.hh" +#include "G4Nucleus.hh" +#include "G4ParticleHPData.hh" +#include "G4ParticleHPManager.hh" +#include "G4PhysicalConstants.hh" #include "G4Pow.hh" +#include "G4SystemOfUnits.hh" -G4ParticleHPElasticData::G4ParticleHPElasticData() -:G4VCrossSectionDataSet("NeutronHPElasticXS") +G4ParticleHPElasticData::G4ParticleHPElasticData() : G4VCrossSectionDataSet("NeutronHPElasticXS") { - SetMinKinEnergy( 0*MeV ); - SetMaxKinEnergy( 20*MeV ); - - theCrossSections = 0; - instanceOfWorker = false; - if ( G4Threading::IsWorkerThread() ) { - instanceOfWorker = true; - } - element_cache = nullptr; - material_cache = nullptr; - ke_cache = 0.0; - xs_cache = 0.0; -// BuildPhysicsTable( *G4Neutron::Neutron() ); + SetMinKinEnergy(0 * MeV); + SetMaxKinEnergy(20 * MeV); + + theCrossSections = nullptr; + instanceOfWorker = false; + if (G4Threading::IsWorkerThread()) { + instanceOfWorker = true; + } + element_cache = nullptr; + material_cache = nullptr; + ke_cache = 0.0; + xs_cache = 0.0; + // BuildPhysicsTable( *G4Neutron::Neutron() ); } - + G4ParticleHPElasticData::~G4ParticleHPElasticData() { - if ( theCrossSections != nullptr && instanceOfWorker != true ) { - theCrossSections->clearAndDestroy(); - delete theCrossSections; - theCrossSections = nullptr; - } + if (theCrossSections != nullptr && !instanceOfWorker) { + theCrossSections->clearAndDestroy(); + delete theCrossSections; + theCrossSections = nullptr; + } } - -G4bool G4ParticleHPElasticData::IsIsoApplicable( const G4DynamicParticle* dp , - G4int /*Z*/ , G4int /*A*/ , - const G4Element* /*elm*/ , - const G4Material* /*mat*/ ) -{ - G4double eKin = dp->GetKineticEnergy(); - if ( eKin > GetMaxKinEnergy() - || eKin < GetMinKinEnergy() - || dp->GetDefinition() != G4Neutron::Neutron() ) return false; - - return true; +G4bool G4ParticleHPElasticData::IsIsoApplicable(const G4DynamicParticle* dp, G4int /*Z*/, + G4int /*A*/, const G4Element* /*elm*/, + const G4Material* /*mat*/) +{ + G4double eKin = dp->GetKineticEnergy(); + return eKin <= GetMaxKinEnergy() && eKin >= GetMinKinEnergy() + && dp->GetDefinition() == G4Neutron::Neutron(); } -G4double G4ParticleHPElasticData::GetIsoCrossSection( const G4DynamicParticle* dp , - G4int /*Z*/ , G4int /*A*/ , - const G4Isotope* /*iso*/ , - const G4Element* element , - const G4Material* material ) +G4double G4ParticleHPElasticData::GetIsoCrossSection(const G4DynamicParticle* dp, G4int /*Z*/, + G4int /*A*/, const G4Isotope* /*iso*/, + const G4Element* element, + const G4Material* material) { - if ( dp->GetKineticEnergy() == ke_cache && element == element_cache && material == material_cache ) return xs_cache; - - ke_cache = dp->GetKineticEnergy(); - element_cache = element; - material_cache = material; - G4double xs = GetCrossSection( dp , element , material->GetTemperature() ); - xs_cache = xs; - return xs; + if (dp->GetKineticEnergy() == ke_cache && element == element_cache && material == material_cache) + return xs_cache; + + ke_cache = dp->GetKineticEnergy(); + element_cache = element; + material_cache = material; + G4double xs = GetCrossSection(dp, element, material->GetTemperature()); + xs_cache = xs; + return xs; } /* @@ -121,173 +113,171 @@ G4bool G4ParticleHPElasticData::IsApplicable(const G4DynamicParticle*aP, const G void G4ParticleHPElasticData::BuildPhysicsTable(const G4ParticleDefinition& aP) { + if (&aP != G4Neutron::Neutron()) + throw G4HadronicException(__FILE__, __LINE__, + "Attempt to use NeutronHP data for particles other than neutrons!!!"); - if(&aP!=G4Neutron::Neutron()) - throw G4HadronicException(__FILE__, __LINE__, "Attempt to use NeutronHP data for particles other than neutrons!!!"); - - if ( G4Threading::IsWorkerThread() ) { - theCrossSections = G4ParticleHPManager::GetInstance()->GetElasticCrossSections(); - return; - } + if (G4Threading::IsWorkerThread()) { + theCrossSections = G4ParticleHPManager::GetInstance()->GetElasticCrossSections(); + return; + } std::size_t numberOfElements = G4Element::GetNumberOfElements(); -// TKDB - //if ( theCrossSections == 0 ) theCrossSections = new G4PhysicsTable( numberOfElements ); - if ( theCrossSections == nullptr ) - theCrossSections = new G4PhysicsTable( numberOfElements ); - else - theCrossSections->clearAndDestroy(); + // TKDB + // if ( theCrossSections == 0 ) theCrossSections = new G4PhysicsTable( numberOfElements ); + if (theCrossSections == nullptr) + theCrossSections = new G4PhysicsTable(numberOfElements); + else + theCrossSections->clearAndDestroy(); // make a PhysicsVector for each element - static G4ThreadLocal G4ElementTable *theElementTable = 0 ; if (!theElementTable) theElementTable= G4Element::GetElementTable(); - for( std::size_t i=0; iMakePhysicsVector((*theElementTable)[i], this); + static G4ThreadLocal G4ElementTable* theElementTable = nullptr; + if (theElementTable == nullptr) theElementTable = G4Element::GetElementTable(); + for (std::size_t i = 0; i < numberOfElements; ++i) { + G4PhysicsVector* physVec = G4ParticleHPData::Instance(G4Neutron::Neutron()) + ->MakePhysicsVector((*theElementTable)[i], this); theCrossSections->push_back(physVec); } - G4ParticleHPManager::GetInstance()->RegisterElasticCrossSections(theCrossSections); + G4ParticleHPManager::GetInstance()->RegisterElasticCrossSections(theCrossSections); } void G4ParticleHPElasticData::DumpPhysicsTable(const G4ParticleDefinition& aP) { - if(&aP!=G4Neutron::Neutron()) - throw G4HadronicException(__FILE__, __LINE__, "Attempt to use NeutronHP data for particles other than neutrons!!!"); + if (&aP != G4Neutron::Neutron()) + throw G4HadronicException(__FILE__, __LINE__, + "Attempt to use NeutronHP data for particles other than neutrons!!!"); + +#ifdef G4VERBOSE + if (G4HadronicParameters::Instance()->GetVerboseLevel() == 0) return; + + // + // Dump element based cross section + // range 10e-5 eV to 20 MeV + // 10 point per decade + // in barn + // + + G4cout << G4endl; + G4cout << G4endl; + G4cout << "Elastic Cross Section of Neutron HP" << G4endl; + G4cout << "(Pointwise cross-section at 0 Kelvin.)" << G4endl; + G4cout << G4endl; + G4cout << "Name of Element" << G4endl; + G4cout << "Energy[eV] XS[barn]" << G4endl; + G4cout << G4endl; -#ifdef G4VERBOSE - if ( G4HadronicParameters::Instance()->GetVerboseLevel() == 0 ) return; - -// -// Dump element based cross section -// range 10e-5 eV to 20 MeV -// 10 point per decade -// in barn -// + std::size_t numberOfElements = G4Element::GetNumberOfElements(); + static G4ThreadLocal G4ElementTable* theElementTable = nullptr; + if (theElementTable == nullptr) theElementTable = G4Element::GetElementTable(); + + for (std::size_t i = 0; i < numberOfElements; ++i) { + G4cout << (*theElementTable)[i]->GetName() << G4endl; + G4int ie = 0; + + for (ie = 0; ie < 130; ++ie) { + G4double eKinetic = 1.0e-5 * G4Pow::GetInstance()->powA(10.0, ie / 10.0) * eV; + G4bool outOfRange = false; - G4cout << G4endl; - G4cout << G4endl; - G4cout << "Elastic Cross Section of Neutron HP"<< G4endl; - G4cout << "(Pointwise cross-section at 0 Kelvin.)" << G4endl; - G4cout << G4endl; - G4cout << "Name of Element" << G4endl; - G4cout << "Energy[eV] XS[barn]" << G4endl; - G4cout << G4endl; - - std::size_t numberOfElements = G4Element::GetNumberOfElements(); - static G4ThreadLocal G4ElementTable *theElementTable = 0 ; - if (!theElementTable) theElementTable= G4Element::GetElementTable(); - - for ( std::size_t i = 0 ; i < numberOfElements ; ++i ) - { - G4cout << (*theElementTable)[i]->GetName() << G4endl; - G4int ie = 0; - - for ( ie = 0 ; ie < 130 ; ++ie ) - { - G4double eKinetic = 1.0e-5 * G4Pow::GetInstance()->powA ( 10.0 , ie/10.0 ) *eV; - G4bool outOfRange = false; - - if ( eKinetic < 20*MeV ) - { - G4cout << eKinetic/eV << " " << (*((*theCrossSections)(i))).GetValue(eKinetic, outOfRange)/barn << G4endl; - } + if (eKinetic < 20 * MeV) { + G4cout << eKinetic / eV << " " + << (*((*theCrossSections)(i))).GetValue(eKinetic, outOfRange) / barn << G4endl; } - G4cout << G4endl; - } + } + G4cout << G4endl; + } #endif } -G4double G4ParticleHPElasticData:: -GetCrossSection(const G4DynamicParticle* aP, const G4Element*anE, G4double aT) +G4double G4ParticleHPElasticData::GetCrossSection(const G4DynamicParticle* aP, const G4Element* anE, + G4double aT) { G4double result = 0; G4bool outOfRange; - G4int index = (G4int)anE->GetIndex(); + auto index = (G4int)anE->GetIndex(); // prepare neutron G4double eKinetic = aP->GetKineticEnergy(); - if ( G4ParticleHPManager::GetInstance()->GetNeglectDoppler() ) - { - //NEGLECT_DOPPLER_B. - G4double factor = 1.0; - if ( eKinetic < aT * k_Boltzmann ) - { - // below 0.1 eV neutrons - // Have to do some, but now just igonre. - // Will take care after performance check. - // factor = factor * targetV; - } - return ( (*((*theCrossSections)(index))).GetValue(eKinetic, outOfRange) )* factor; + if (G4ParticleHPManager::GetInstance()->GetNeglectDoppler()) { + // NEGLECT_DOPPLER_B. + G4double factor = 1.0; + if (eKinetic < aT * k_Boltzmann) { + // below 0.1 eV neutrons + // Have to do some, but now just igonre. + // Will take care after performance check. + // factor = factor * targetV; + } + return ((*((*theCrossSections)(index))).GetValue(eKinetic, outOfRange)) * factor; } - G4ReactionProduct theNeutron( aP->GetDefinition() ); - theNeutron.SetMomentum( aP->GetMomentum() ); - theNeutron.SetKineticEnergy( eKinetic ); + G4ReactionProduct theNeutron(aP->GetDefinition()); + theNeutron.SetMomentum(aP->GetMomentum()); + theNeutron.SetKineticEnergy(eKinetic); // prepare thermal nucleus G4Nucleus aNuc; G4double eps = 0.0001; G4double theA = anE->GetN(); G4double theZ = anE->GetZ(); - G4double eleMass; + G4double eleMass; + eleMass = (G4NucleiProperties::GetNuclearMass(G4int(theA + eps), G4int(theZ + eps))) + / G4Neutron::Neutron()->GetPDGMass(); - eleMass = ( G4NucleiProperties::GetNuclearMass( G4int(theA+eps) , G4int(theZ+eps) ) - ) / G4Neutron::Neutron()->GetPDGMass(); - G4ReactionProduct boosted; G4double aXsection; - + // MC integration loop G4int counter = 0; G4double buffer = 0; - G4int size = G4int(std::max(10., aT/60*kelvin)); - G4ThreeVector neutronVelocity = 1./G4Neutron::Neutron()->GetPDGMass()*theNeutron.GetMomentum(); + G4int size = G4int(std::max(10., aT / 60 * kelvin)); + G4ThreeVector neutronVelocity = + 1. / G4Neutron::Neutron()->GetPDGMass() * theNeutron.GetMomentum(); G4double neutronVMag = neutronVelocity.mag(); - while(counter == 0 || std::abs(buffer-result/std::max(1,counter)) > 0.03*buffer) // Loop checking, 11.05.2015, T. Koi + while (counter == 0 + || std::abs(buffer - result / std::max(1, counter)) + > 0.03 * buffer) // Loop checking, 11.05.2015, T. Koi { - if(counter) buffer = result/counter; - while (counterGetVerboseLevel(); + return G4ParticleHPManager::GetInstance()->GetVerboseLevel(); } -void G4ParticleHPElasticData:: -SetVerboseLevel( G4int newValue ) +void G4ParticleHPElasticData::SetVerboseLevel(G4int newValue) { - G4ParticleHPManager::GetInstance()->SetVerboseLevel(newValue); + G4ParticleHPManager::GetInstance()->SetVerboseLevel(newValue); } void G4ParticleHPElasticData::CrossSectionDescription(std::ostream& outFile) const { - outFile << "High Precision cross data based on Evaluated Nuclear Data Files (ENDF) for elastic reaction of neutrons below 20MeV\n" ; + outFile << "High Precision cross data based on Evaluated Nuclear Data Files (ENDF) for elastic " + "reaction of neutrons below 20MeV\n"; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElasticFS.cc index 6d7128e52b0..22b6116af93 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElasticFS.cc @@ -27,93 +27,101 @@ // J.P. Wellisch, Nov-1996 // A prototype of the low energy neutron transport model. // -// 25-08-06 New Final State type (refFlag==3 , Legendre (Low Energy) + Probability (High Energy) ) +// 25-08-06 New Final State type (refFlag==3 , Legendre (Low Energy) + Probability (High Energy) ) // is added by T. KOI -// 080904 Add Protection for negative energy results in very low energy ( 1E-6 eV ) scattering by T. Koi +// 080904 Add Protection for negative energy results in very low energy ( 1E-6 eV ) scattering by T. +// Koi // // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPElasticFS.hh" -#include "G4ParticleHPManager.hh" -#include "G4PhysicalConstants.hh" -#include "G4SystemOfUnits.hh" -#include "G4ReactionProduct.hh" -#include "G4Nucleus.hh" -#include "G4Proton.hh" -#include "G4Deuteron.hh" -#include "G4Triton.hh" #include "G4Alpha.hh" -#include "G4ThreeVector.hh" -#include "G4LorentzVector.hh" +#include "G4Deuteron.hh" +#include "G4HadronicParameters.hh" #include "G4IonTable.hh" +#include "G4LorentzVector.hh" +#include "G4Nucleus.hh" #include "G4ParticleHPDataUsed.hh" -#include "G4Pow.hh" -#include "zlib.h" +#include "G4ParticleHPManager.hh" +#include "G4PhysicalConstants.hh" #include "G4PhysicsModelCatalog.hh" +#include "G4Pow.hh" +#include "G4Proton.hh" +#include "G4ReactionProduct.hh" +#include "G4SystemOfUnits.hh" +#include "G4ThreeVector.hh" +#include "G4Triton.hh" +#include "zlib.h" G4ParticleHPElasticFS::G4ParticleHPElasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_NeutronHPElastic" ); - - hasXsec = false; - theCoefficients = 0; - theProbArray = 0; - + svtEmax = 0.0; + dbrcEmax = 0.0; + dbrcEmin = 0.0; + dbrcAmin = 0.0; + dbrcUse = false; + xsForDBRC = nullptr; + + secID = G4PhysicsModelCatalog::GetModelID("model_NeutronHPElastic"); + + hasXsec = false; + theCoefficients = nullptr; + theProbArray = nullptr; + repFlag = 0; tE_of_repFlag3 = 0.0; targetMass = 0.0; frameFlag = 0; } -void G4ParticleHPElasticFS::Init(G4double A, G4double Z, G4int M, - G4String& dirName, G4String&, - G4ParticleDefinition* ) +void G4ParticleHPElasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String&, + G4ParticleDefinition*) { G4String tString = "/FS"; G4bool dbool; G4ParticleHPDataUsed aFile = theNames.GetName(static_cast(A), static_cast(Z), M, dirName, tString, dbool); G4String filename = aFile.GetName(); - SetAZMs( A, Z, M, aFile ); - //theBaseA = aFile.GetA(); - //theBaseZ = aFile.GetZ(); + SetAZMs(A, Z, M, aFile); + // theBaseA = aFile.GetA(); + // theBaseZ = aFile.GetZ(); if (!dbool) { hasAnyData = false; - hasFSData = false; + hasFSData = false; hasXsec = false; return; } - //130205 For compressed data files + // 130205 For compressed data files std::istringstream theData(std::ios::in); - G4ParticleHPManager::GetInstance()->GetDataStream(filename,theData); - //130205 END + G4ParticleHPManager::GetInstance()->GetDataStream(filename, theData); + // 130205 END theData >> repFlag >> targetMass >> frameFlag; if (repFlag == 1) { G4int nEnergy; - theData >> nEnergy; + theData >> nEnergy; theCoefficients = new G4ParticleHPLegendreStore(nEnergy); theCoefficients->InitInterpolation(theData); G4double temp, energy; G4int tempdep, nLegendre; G4int i, ii; - for (i=0; i < nEnergy; i++) { + for (i = 0; i < nEnergy; i++) { theData >> temp >> energy >> tempdep >> nLegendre; - energy *=eV; + energy *= eV; theCoefficients->Init(i, energy, nLegendre); theCoefficients->SetTemperature(i, temp); G4double coeff = 0; for (ii = 0; ii < nLegendre; ii++) { // load legendre coefficients. theData >> coeff; - theCoefficients->SetCoeff(i, ii+1, coeff); // @@@HPW@@@ + theCoefficients->SetCoeff(i, ii + 1, coeff); // @@@HPW@@@ } } - - } else if (repFlag == 2) { + } + else if (repFlag == 2) { G4int nEnergy; theData >> nEnergy; theProbArray = new G4ParticleHPPartial(nEnergy, nEnergy); @@ -133,43 +141,43 @@ void G4ParticleHPElasticFS::Init(G4double A, G4double Z, G4int M, theProbArray->SetX(i, ii, costh); theProbArray->SetY(i, ii, prob); } - theProbArray->DoneSetXY( i ); + theProbArray->DoneSetXY(i); } - - } else if (repFlag == 3) { + } + else if (repFlag == 3) { G4int nEnergy_Legendre; - theData >> nEnergy_Legendre; - if (nEnergy_Legendre <= 0 ) { + theData >> nEnergy_Legendre; + if (nEnergy_Legendre <= 0) { std::stringstream iss; iss << "G4ParticleHPElasticFS::Init Data Error repFlag is 3 but nEnergy_Legendre <= 0"; - iss << "Z, A and M of problematic file is " << theNDLDataZ << ", " - << theNDLDataA << " and " << theNDLDataM << " respectively."; - throw G4HadronicException(__FILE__, __LINE__, iss.str() ); + iss << "Z, A and M of problematic file is " << theNDLDataZ << ", " << theNDLDataA << " and " + << theNDLDataM << " respectively."; + throw G4HadronicException(__FILE__, __LINE__, iss.str()); } - theCoefficients = new G4ParticleHPLegendreStore( nEnergy_Legendre ); - theCoefficients->InitInterpolation( theData ); + theCoefficients = new G4ParticleHPLegendreStore(nEnergy_Legendre); + theCoefficients->InitInterpolation(theData); G4double temp, energy; G4int tempdep, nLegendre; for (G4int i = 0; i < nEnergy_Legendre; i++) { theData >> temp >> energy >> tempdep >> nLegendre; - energy *=eV; - theCoefficients->Init( i , energy , nLegendre ); - theCoefficients->SetTemperature( i , temp ); + energy *= eV; + theCoefficients->Init(i, energy, nLegendre); + theCoefficients->SetTemperature(i, temp); G4double coeff = 0; for (G4int ii = 0; ii < nLegendre; ii++) { // load legendre coefficients. theData >> coeff; - theCoefficients->SetCoeff(i, ii+1, coeff); // @@@HPW@@@ + theCoefficients->SetCoeff(i, ii + 1, coeff); // @@@HPW@@@ } - } + } - tE_of_repFlag3 = energy; + tE_of_repFlag3 = energy; G4int nEnergy_Prob; theData >> nEnergy_Prob; - theProbArray = new G4ParticleHPPartial( nEnergy_Prob , nEnergy_Prob ); - theProbArray->InitInterpolation( theData ); + theProbArray = new G4ParticleHPPartial(nEnergy_Prob, nEnergy_Prob); + theProbArray->InitInterpolation(theData); G4int nPoints; for (G4int i = 0; i < nEnergy_Prob; i++) { theData >> temp >> energy >> tempdep >> nPoints; @@ -177,52 +185,50 @@ void G4ParticleHPElasticFS::Init(G4double A, G4double Z, G4int M, // consistency check if (i == 0) - //if ( energy != tE_of_repFlag3 ) //110620TK This is too tight for 32bit machines + // if ( energy != tE_of_repFlag3 ) //110620TK This is too tight for 32bit machines if (std::abs(energy - tE_of_repFlag3) / tE_of_repFlag3 > 1.0e-15) - G4cout << "Warning Transition Energy of repFlag3 is not consistent." << G4endl; + G4cout << "Warning Transition Energy of repFlag3 is not consistent." << G4endl; - theProbArray->InitInterpolation( i , theData ); - theProbArray->SetT( i , temp ); - theProbArray->SetX( i , energy ); + theProbArray->InitInterpolation(i, theData); + theProbArray->SetT(i, temp); + theProbArray->SetX(i, energy); G4double prob, costh; for (G4int ii = 0; ii < nPoints; ii++) { // fill probability arrays. theData >> costh >> prob; - theProbArray->SetX( i , ii , costh ); - theProbArray->SetY( i , ii , prob ); + theProbArray->SetX(i, ii, costh); + theProbArray->SetY(i, ii, prob); } - theProbArray->DoneSetXY( i ); + theProbArray->DoneSetXY(i); } - - } else if (repFlag==0) { - theData >> frameFlag; - - } else { - G4cout << "unusable number for repFlag: repFlag="<> frameFlag; + } + else { + G4cout << "unusable number for repFlag: repFlag=" << repFlag << G4endl; + throw G4HadronicException(__FILE__, __LINE__, + "G4ParticleHPElasticFS::Init -- unusable number for repFlag"); + } + // 130205 For compressed data files(theData changed from ifstream to istringstream) + // theData.close(); } - -G4HadFinalState* -G4ParticleHPElasticFS::ApplyYourself(const G4HadProjectile& theTrack) -{ - if (theResult.Get() == NULL) theResult.Put(new G4HadFinalState); +G4HadFinalState* G4ParticleHPElasticFS::ApplyYourself(const G4HadProjectile& theTrack) +{ + if (theResult.Get() == nullptr) theResult.Put(new G4HadFinalState); theResult.Get()->Clear(); G4double eKinetic = theTrack.GetKineticEnergy(); - const G4HadProjectile *incidentParticle = &theTrack; - G4ReactionProduct theNeutron(const_cast(incidentParticle->GetDefinition() )); - theNeutron.SetMomentum(incidentParticle->Get4Momentum().vect() ); + const G4HadProjectile* incidentParticle = &theTrack; + G4ReactionProduct theNeutron( + const_cast(incidentParticle->GetDefinition())); + theNeutron.SetMomentum(incidentParticle->Get4Momentum().vect()); theNeutron.SetKineticEnergy(eKinetic); - G4ReactionProduct theTarget; - G4Nucleus aNucleus; G4ThreeVector neuVelo = - (1./incidentParticle->GetDefinition()->GetPDGMass())*theNeutron.GetMomentum(); - theTarget = - aNucleus.GetBiasedThermalNucleus(targetMass, neuVelo, theTrack.GetMaterial()->GetTemperature()); + (1. / incidentParticle->GetDefinition()->GetPDGMass()) * theNeutron.GetMomentum(); + G4ReactionProduct theTarget = + GetBiasedThermalNucleus(targetMass, neuVelo, theTrack.GetMaterial()->GetTemperature()); // Neutron and target defined as G4ReactionProducts // Prepare Lorentz transformation to lab @@ -232,99 +238,103 @@ G4ParticleHPElasticFS::ApplyYourself(const G4HadProjectile& theTrack) G4ThreeVector the3Target = theTarget.GetMomentum(); G4double tEnergy = theTarget.GetTotalEnergy(); G4ReactionProduct theCMS; - G4double totE = nEnergy+tEnergy; - G4ThreeVector the3CMS = the3Target+the3Neutron; + G4double totE = nEnergy + tEnergy; + G4ThreeVector the3CMS = the3Target + the3Neutron; theCMS.SetMomentum(the3CMS); - G4double cmsMom = std::sqrt(the3CMS*the3CMS); - G4double sqrts = std::sqrt((totE-cmsMom)*(totE+cmsMom)); + G4double cmsMom = std::sqrt(the3CMS * the3CMS); + G4double sqrts = std::sqrt((totE - cmsMom) * (totE + cmsMom)); theCMS.SetMass(sqrts); theCMS.SetTotalEnergy(totE); - + // Data come as function of n-energy in nuclear rest frame G4ReactionProduct boosted; boosted.Lorentz(theNeutron, theTarget); - eKinetic = boosted.GetKineticEnergy(); // get kinetic energy for scattering + eKinetic = boosted.GetKineticEnergy(); // get kinetic energy for scattering G4double cosTh = -2; if (repFlag == 1) { cosTh = theCoefficients->SampleElastic(eKinetic); - - } else if (repFlag == 2) { + } + else if (repFlag == 2) { cosTh = theProbArray->Sample(eKinetic); - - } else if (repFlag == 3) { + } + else if (repFlag == 3) { if (eKinetic <= tE_of_repFlag3) { cosTh = theCoefficients->SampleElastic(eKinetic); - } else { + } + else { cosTh = theProbArray->Sample(eKinetic); } - - } else if (repFlag == 0) { - cosTh = 2.*G4UniformRand() - 1.; - - } else { + } + else if (repFlag == 0) { + cosTh = 2. * G4UniformRand() - 1.; + } + else { G4cout << "Unusable number for repFlag: repFlag=" << repFlag << G4endl; throw G4HadronicException(__FILE__, __LINE__, "G4ParticleHPElasticFS::Init -- unusable number for repFlag"); } - if (cosTh < -1.1) { return 0; } + if (cosTh < -1.1) { + return nullptr; + } - G4double phi = twopi*G4UniformRand(); + G4double phi = twopi * G4UniformRand(); G4double cosPhi = std::cos(phi); G4double sinPhi = std::sin(phi); G4double theta = std::acos(cosTh); G4double sinth = std::sin(theta); if (frameFlag == 1) { - // Projectile scattering values cosTh are in target rest frame + // Projectile scattering values cosTh are in target rest frame // In this frame, do relativistic calculation of scattered projectile and // target 4-momenta theNeutron.Lorentz(theNeutron, theTarget); G4double mN = theNeutron.GetMass(); - G4double Pinit = theNeutron.GetTotalMomentum(); // Incident momentum - G4double Einit = theNeutron.GetTotalEnergy(); // Incident energy + G4double Pinit = theNeutron.GetTotalMomentum(); // Incident momentum + G4double Einit = theNeutron.GetTotalEnergy(); // Incident energy G4double mT = theTarget.GetMass(); - G4double ratio = mT/mN; - G4double sqt = std::sqrt(ratio*ratio - 1.0 + cosTh*cosTh); - G4double beta = Pinit/(mT + Einit); // CMS beta - G4double denom = 1. - beta*beta*cosTh*cosTh; - G4double term1 = cosTh*(Einit*ratio + mN)/(mN*ratio + Einit); - G4double pN = beta*mN*(term1 + sqt)/denom; + G4double ratio = mT / mN; + G4double sqt = std::sqrt(ratio * ratio - 1.0 + cosTh * cosTh); + G4double beta = Pinit / (mT + Einit); // CMS beta + G4double denom = 1. - beta * beta * cosTh * cosTh; + G4double term1 = cosTh * (Einit * ratio + mN) / (mN * ratio + Einit); + G4double pN = beta * mN * (term1 + sqt) / denom; // Get the scattered momentum and rotate it in theta and phi - G4ThreeVector pDir = theNeutron.GetMomentum()/Pinit; - G4double px = pN*pDir.x(); - G4double py = pN*pDir.y(); - G4double pz = pN*pDir.z(); + G4ThreeVector pDir = theNeutron.GetMomentum() / Pinit; + G4double px = pN * pDir.x(); + G4double py = pN * pDir.y(); + G4double pz = pN * pDir.z(); G4ThreeVector pcmRot; - pcmRot.setX(px*cosTh*cosPhi - py*sinPhi + pz*sinth*cosPhi); - pcmRot.setY(px*cosTh*sinPhi + py*cosPhi + pz*sinth*sinPhi); - pcmRot.setZ(-px*sinth + pz*cosTh); + pcmRot.setX(px * cosTh * cosPhi - py * sinPhi + pz * sinth * cosPhi); + pcmRot.setY(px * cosTh * sinPhi + py * cosPhi + pz * sinth * sinPhi); + pcmRot.setZ(-px * sinth + pz * cosTh); theNeutron.SetMomentum(pcmRot); - G4double eN = std::sqrt(pN*pN + mN*mN); // Scattered neutron energy + G4double eN = std::sqrt(pN * pN + mN * mN); // Scattered neutron energy theNeutron.SetTotalEnergy(eN); - // Get the scattered target momentum - G4ReactionProduct toLab(-1.*theTarget); - theTarget.SetMomentum(pDir*Pinit - pcmRot); + // Get the scattered target momentum + G4ReactionProduct toLab(-1. * theTarget); + theTarget.SetMomentum(pDir * Pinit - pcmRot); G4double eT = Einit - eN + mT; theTarget.SetTotalEnergy(eT); - // Now back to lab frame + // Now back to lab frame theNeutron.Lorentz(theNeutron, toLab); theTarget.Lorentz(theTarget, toLab); - //111005 Protection for not producing 0 kinetic energy target + // 111005 Protection for not producing 0 kinetic energy target if (theNeutron.GetKineticEnergy() <= 0) - theNeutron.SetTotalEnergy(theNeutron.GetMass()*(1. + G4Pow::GetInstance()->powA(10, -15.65) ) ); - if (theTarget.GetKineticEnergy() <= 0) - theTarget.SetTotalEnergy(theTarget.GetMass()*(1. + G4Pow::GetInstance()->powA(10, -15.65) ) ); - - } else if (frameFlag == 2) { + theNeutron.SetTotalEnergy(theNeutron.GetMass() + * (1. + G4Pow::GetInstance()->powA(10, -15.65))); + if (theTarget.GetKineticEnergy() <= 0) + theTarget.SetTotalEnergy(theTarget.GetMass() * (1. + G4Pow::GetInstance()->powA(10, -15.65))); + } + else if (frameFlag == 2) { // Projectile scattering values cosTh taken from center of mass tabulation G4LorentzVector proj(nEnergy, the3Neutron); @@ -334,16 +344,16 @@ G4ParticleHPElasticFS::ApplyYourself(const G4HadProjectile& theTrack) targ.boost(boostToCM); // Rotate projectile and target momenta by CM scattering angle - // Note: at this point collision axis is not along z axis, due to + // Note: at this point collision axis is not along z axis, due to // momentum given target nucleus by thermal process G4double px = proj.px(); G4double py = proj.py(); G4double pz = proj.pz(); G4ThreeVector pcmRot; - pcmRot.setX(px*cosTh*cosPhi - py*sinPhi + pz*sinth*cosPhi); - pcmRot.setY(px*cosTh*sinPhi + py*cosPhi + pz*sinth*sinPhi); - pcmRot.setZ(-px*sinth + pz*cosTh); + pcmRot.setX(px * cosTh * cosPhi - py * sinPhi + pz * sinth * cosPhi); + pcmRot.setY(px * cosTh * sinPhi + py * cosPhi + pz * sinth * sinPhi); + pcmRot.setZ(-px * sinth + pz * cosTh); proj.setVect(pcmRot); targ.setVect(-pcmRot); @@ -351,26 +361,27 @@ G4ParticleHPElasticFS::ApplyYourself(const G4HadProjectile& theTrack) proj.boost(-boostToCM); targ.boost(-boostToCM); - theNeutron.SetMomentum(proj.vect() ); - theNeutron.SetTotalEnergy(proj.e() ); + theNeutron.SetMomentum(proj.vect()); + theNeutron.SetTotalEnergy(proj.e()); - theTarget.SetMomentum(targ.vect() ); - theTarget.SetTotalEnergy(targ.e() ); + theTarget.SetMomentum(targ.vect()); + theTarget.SetTotalEnergy(targ.e()); - //080904 Add Protection for very low energy (1e-6eV) scattering + // 080904 Add Protection for very low energy (1e-6eV) scattering if (theNeutron.GetKineticEnergy() <= 0) { - theNeutron.SetTotalEnergy(theNeutron.GetMass()*(1. + G4Pow::GetInstance()->powA(10, -15.65) ) ); + theNeutron.SetTotalEnergy(theNeutron.GetMass() + * (1. + G4Pow::GetInstance()->powA(10, -15.65))); } - //080904 Add Protection for very low energy (1e-6eV) scattering + // 080904 Add Protection for very low energy (1e-6eV) scattering if (theTarget.GetKineticEnergy() <= 0) { - theTarget.SetTotalEnergy(theTarget.GetMass()*(1. + G4Pow::GetInstance()->powA(10, -15.65) ) ); + theTarget.SetTotalEnergy(theTarget.GetMass() * (1. + G4Pow::GetInstance()->powA(10, -15.65))); } - - } else { + } + else { G4cout << "Value of frameFlag (1=LAB, 2=CMS): " << frameFlag; throw G4HadronicException(__FILE__, __LINE__, - "G4ParticleHPElasticFS::ApplyYourSelf frameflag incorrect"); + "G4ParticleHPElasticFS::ApplyYourSelf frameflag incorrect"); } // Everything is now in the lab frame @@ -379,9 +390,9 @@ G4ParticleHPElasticFS::ApplyYourself(const G4HadProjectile& theTrack) theResult.Get()->SetMomentumChange(theNeutron.GetMomentum().unit()); // Make recoil a G4DynamicParticle - G4DynamicParticle* theRecoil = new G4DynamicParticle; + auto theRecoil = new G4DynamicParticle; theRecoil->SetDefinition(G4IonTable::GetIonTable()->GetIon(static_cast(theBaseZ), - static_cast(theBaseA), 0) ); + static_cast(theBaseA), 0)); theRecoil->SetMomentum(theTarget.GetMomentum()); theResult.Get()->AddSecondary(theRecoil, secID); @@ -390,3 +401,123 @@ G4ParticleHPElasticFS::ApplyYourself(const G4HadProjectile& theTrack) return theResult.Get(); } +void G4ParticleHPElasticFS::InitializeScatteringKernelParameters() +{ + // Initialize DBRC variables + svtEmax = G4HadronicParameters::Instance()->GetNeutronKineticEnergyThresholdForSVT(); + G4ParticleHPManager* manager = G4ParticleHPManager::GetInstance(); + dbrcUse = manager->GetUseDBRC(); + dbrcEmax = manager->GetMaxEnergyDBRC(); + dbrcEmin = manager->GetMinEnergyDBRC(); + dbrcAmin = manager->GetMinADBRC(); +} + +G4ReactionProduct G4ParticleHPElasticFS::GetBiasedThermalNucleus(const G4double aMass, + G4ThreeVector aVelocity, + const G4double temp) +{ + // This new method implements the DBRC (Doppler Broadening Rejection Correction) algorithm + // on top of the SVT (Sampling of the Velocity of the Target nucleus) algorithm. + // The SVT algorithm was written by Loic Thulliez (CEA-Saclay) on 2021/05/04 in + // the method G4Nucleus::GetBiasedThermalNucleus; Marek Zmeskal on 2022/11/30 + // implemented the DBRC algorithm on top of the SVT one. + // While the SVT algorithm is still present also in G4Nucleus::GetBiasedThermalNucleus, + // the DBRC algorithm on top of the SVT one has been moved in this new method, in + // order to avoid a cycle dependency between hadronic/util and hadronic/model/particle_hp. + + InitializeScatteringKernelParameters(); + + // Set threshold for SVT algorithm + G4double E_threshold = svtEmax; + if (svtEmax == -1.) { + // If E_neutron <= 400*kB*T (400 is a common value encounter in MC neutron transport code) + // then apply the Sampling ot the Velocity of the Target (SVT) method; + // else consider the target nucleus being without motion + E_threshold = 400.0 * 8.617333262E-11 * temp; + } + + // If DBRC is enabled and the nucleus is heavy enough, then update the energy threshold + if (dbrcUse && aMass >= dbrcAmin) { + E_threshold = std::max(svtEmax, dbrcEmax); + } + + G4double E_neutron = 0.5 * aVelocity.mag2() * G4Neutron::Neutron()->GetPDGMass(); // E=0.5*m*v2 + + G4bool dbrcIsOn = dbrcUse && E_neutron >= dbrcEmin && aMass >= dbrcAmin && E_neutron <= dbrcEmax; + + G4Nucleus aNucleus; + if (E_neutron > E_threshold || !dbrcIsOn) { + // Apply only the SVT algorithm, not the DBRC one + return aNucleus.GetBiasedThermalNucleus(targetMass, aVelocity, temp); + } + + G4ReactionProduct result; + result.SetMass(aMass * G4Neutron::Neutron()->GetPDGMass()); + + // Beta = sqrt(m/2kT) + G4double beta = + std::sqrt(result.GetMass() + / (2. * 8.617333262E-11 * temp)); // kT E-5[eV] mass E-11[MeV] => beta in [m/s]-1 + + // Neutron speed vn + G4double vN_norm = aVelocity.mag(); + G4double vN_norm2 = vN_norm * vN_norm; + G4double y = beta * vN_norm; + + // Normalize neutron velocity + aVelocity = (1. / vN_norm) * aVelocity; + + // Variables for sampling of target speed and SVT rejection + G4double x2; + G4double randThresholdSVT; + G4double vT_norm, vT_norm2, mu; + G4double acceptThresholdSVT; + G4double vRelativeSpeed; + G4double cdf0 = 2. / (2. + std::sqrt(CLHEP::pi) * y); + + // DBRC variables + G4double xsRelative = -99.; + G4double randThresholdDBRC = 0.; + // Calculate max cross-section in interval from v - 4/beta to v + 4/beta for rejection + G4double eMin = + 0.5 * G4Neutron::Neutron()->GetPDGMass() * (vN_norm - 4. / beta) * (vN_norm - 4. / beta); + G4double eMax = + 0.5 * G4Neutron::Neutron()->GetPDGMass() * (vN_norm + 4. / beta) * (vN_norm + 4. / beta); + G4double xsMax = xsForDBRC->GetMaxY(eMin, eMax); + + do { + do { + // Sample the target velocity vT in the laboratory frame + if (G4UniformRand() < cdf0) { + // Sample in C45 from https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/la-9721.pdf + x2 = -std::log(G4UniformRand() * G4UniformRand()); + } + else { + // Sample in C61 from https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/la-9721.pdf + G4double ampl = std::cos(CLHEP::pi / 2.0 * G4UniformRand()); + x2 = -std::log(G4UniformRand()) - std::log(G4UniformRand()) * ampl * ampl; + } + + vT_norm = std::sqrt(x2) / beta; + vT_norm2 = vT_norm * vT_norm; + + // Sample cosine between the incident neutron and the target in the laboratory frame + mu = 2. * G4UniformRand() - 1.; + + // Define acceptance threshold for SVT + vRelativeSpeed = std::sqrt(vN_norm2 + vT_norm2 - 2 * vN_norm * vT_norm * mu); + acceptThresholdSVT = vRelativeSpeed / (vN_norm + vT_norm); + randThresholdSVT = G4UniformRand(); + } while (randThresholdSVT >= acceptThresholdSVT); + + // Apply DBRC rejection + xsRelative = xsForDBRC->GetXsec(0.5 * G4Neutron::Neutron()->GetPDGMass() * vRelativeSpeed + * vRelativeSpeed); + randThresholdDBRC = G4UniformRand(); + + } while (randThresholdDBRC >= xsRelative / xsMax); + + aNucleus.DoKinematicsOfThermalNucleus(mu, vT_norm, aVelocity, result); + + return result; +} diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElementData.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElementData.cc index 75cfd70c63a..925713ab445 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElementData.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPElementData.cc @@ -33,170 +33,176 @@ // #include "G4ParticleHPElementData.hh" - G4ParticleHPElementData::G4ParticleHPElementData() - { - precision = 0.02; - theFissionData = new G4ParticleHPVector; - theCaptureData = new G4ParticleHPVector; - theElasticData = new G4ParticleHPVector; - theInelasticData = new G4ParticleHPVector; - theIsotopeWiseData = 0; - theBuffer = nullptr; - } - - G4ParticleHPElementData::~G4ParticleHPElementData() - { - delete theFissionData; - delete theCaptureData; - delete theElasticData; - delete theInelasticData; - delete [] theIsotopeWiseData; - } - - void G4ParticleHPElementData::Init(G4Element * theElement, G4ParticleDefinition* projectile, const char* dataDirVariable ) - { - G4int count = (G4int)theElement->GetNumberOfIsotopes(); - if(count == 0) - count += theStableOnes.GetNumberOfIsotopes((G4int)theElement->GetZ()); - theIsotopeWiseData = new G4ParticleHPIsoData[count]; - // filename = ein data-set je isotope. - count = 0; - G4int nIso = (G4int)theElement->GetNumberOfIsotopes(); - G4int Z = (G4int)theElement->GetZ(); +G4ParticleHPElementData::G4ParticleHPElementData() +{ + precision = 0.02; + theFissionData = new G4ParticleHPVector; + theCaptureData = new G4ParticleHPVector; + theElasticData = new G4ParticleHPVector; + theInelasticData = new G4ParticleHPVector; + theIsotopeWiseData = nullptr; + theBuffer = nullptr; +} + +G4ParticleHPElementData::~G4ParticleHPElementData() +{ + delete theFissionData; + delete theCaptureData; + delete theElasticData; + delete theInelasticData; + delete[] theIsotopeWiseData; +} + +void G4ParticleHPElementData::Init(G4Element* theElement, G4ParticleDefinition* projectile, + const char* dataDirVariable) +{ + auto count = (G4int)theElement->GetNumberOfIsotopes(); + if (count == 0) count += theStableOnes.GetNumberOfIsotopes((G4int)theElement->GetZ()); + theIsotopeWiseData = new G4ParticleHPIsoData[count]; + // filename = ein data-set je isotope. + count = 0; + auto nIso = (G4int)theElement->GetNumberOfIsotopes(); + auto Z = (G4int)theElement->GetZ(); - if(nIso!=0) - { - for (G4int i1=0; i1GetIsotope(i1)->GetN(); - G4int M = theElement->GetIsotope(i1)->Getm(); - G4double frac = theElement->GetRelativeAbundanceVector()[i1]/CLHEP::perCent; - //UpdateData(A, Z, count++, frac); - UpdateData(A, Z, M, count++, frac, projectile, dataDirVariable); - } + if (nIso != 0) { + for (G4int i1 = 0; i1 < nIso; ++i1) { + G4int A = theElement->GetIsotope(i1)->GetN(); + G4int M = theElement->GetIsotope(i1)->Getm(); + G4double frac = theElement->GetRelativeAbundanceVector()[i1] / CLHEP::perCent; + // UpdateData(A, Z, count++, frac); + UpdateData(A, Z, M, count++, frac, projectile, dataDirVariable); } - else - { - G4int first = theStableOnes.GetFirstIsotope(Z); - for(G4int i1=0; - i1GetZ()); ++i1) - { - G4int A = theStableOnes.GetIsotopeNucleonCount(first+i1); - G4double frac = theStableOnes.GetAbundance(first+i1); - UpdateData(A, Z, count++, frac, projectile, dataDirVariable); - } + } + else { + G4int first = theStableOnes.GetFirstIsotope(Z); + for (G4int i1 = 0; i1 < theStableOnes.GetNumberOfIsotopes((G4int)theElement->GetZ()); ++i1) { + G4int A = theStableOnes.GetIsotopeNucleonCount(first + i1); + G4double frac = theStableOnes.GetAbundance(first + i1); + UpdateData(A, Z, count++, frac, projectile, dataDirVariable); } - theElasticData->ThinOut(precision); - if( projectile == G4Neutron::Neutron() ) theInelasticData->ThinOut(precision); + } + theElasticData->ThinOut(precision); + if (projectile == G4Neutron::Neutron()) theInelasticData->ThinOut(precision); + + theCaptureData->ThinOut(precision); + theFissionData->ThinOut(precision); +} + +void G4ParticleHPElementData::UpdateData(G4int A, G4int Z, G4int M, G4int index, G4double abundance, + G4ParticleDefinition* projectile, + const char* dataDirVariable) +{ + // Reads in the Data, using G4ParticleHPIsoData[], and its Init + // theIsotopeWiseData[index].Init(A, Z, abundance); + theIsotopeWiseData[index].Init(A, Z, M, abundance, projectile, dataDirVariable); + + theBuffer = theIsotopeWiseData[index].MakeElasticData(); + Harmonise(theElasticData, theBuffer); + delete theBuffer; + + theBuffer = theIsotopeWiseData[index].MakeInelasticData(); + Harmonise(theInelasticData, theBuffer); + delete theBuffer; - theCaptureData->ThinOut(precision); - theFissionData->ThinOut(precision); + theBuffer = theIsotopeWiseData[index].MakeCaptureData(); + Harmonise(theCaptureData, theBuffer); + delete theBuffer; + + theBuffer = theIsotopeWiseData[index].MakeFissionData(); + Harmonise(theFissionData, theBuffer); + delete theBuffer; +} + +void G4ParticleHPElementData::Harmonise(G4ParticleHPVector*& theStore, G4ParticleHPVector* theNew) +{ + if (theNew == nullptr) { + return; } - - void G4ParticleHPElementData::UpdateData(G4int A, G4int Z, G4int M, G4int index, G4double abundance, G4ParticleDefinition* projectile, const char* dataDirVariable ) + G4int s_tmp = 0, n = 0, m_tmp = 0; + auto theMerge = new G4ParticleHPVector(theStore->GetVectorLength()); + while (theStore->GetEnergy(s_tmp) < theNew->GetEnergy(0) + && s_tmp < theStore->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi { - //Reads in the Data, using G4ParticleHPIsoData[], and its Init - //theIsotopeWiseData[index].Init(A, Z, abundance); - theIsotopeWiseData[index].Init(A, Z, M, abundance,projectile, dataDirVariable); - - theBuffer = theIsotopeWiseData[index].MakeElasticData(); - Harmonise(theElasticData, theBuffer); - delete theBuffer; - - theBuffer = theIsotopeWiseData[index].MakeInelasticData(); - Harmonise(theInelasticData, theBuffer); - delete theBuffer; - - theBuffer = theIsotopeWiseData[index].MakeCaptureData(); - Harmonise(theCaptureData, theBuffer); - delete theBuffer; - - theBuffer = theIsotopeWiseData[index].MakeFissionData(); - Harmonise(theFissionData, theBuffer); - delete theBuffer; + theMerge->SetData(m_tmp++, theStore->GetEnergy(s_tmp), theStore->GetXsec(s_tmp)); + ++s_tmp; } - - void G4ParticleHPElementData::Harmonise(G4ParticleHPVector *& theStore, G4ParticleHPVector * theNew) + G4ParticleHPVector* active = theStore; + G4ParticleHPVector* passive = theNew; + G4ParticleHPVector* tmp; + G4int a = s_tmp, p = n, t; + while (a < active->GetVectorLength() + && p < passive->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi { - if(theNew == 0) { return; } - G4int s_tmp = 0, n=0, m_tmp=0; - G4ParticleHPVector * theMerge = new G4ParticleHPVector(theStore->GetVectorLength()); - while ( theStore->GetEnergy(s_tmp)GetEnergy(0)&&s_tmpGetVectorLength() ) // Loop checking, 11.05.2015, T. Koi - { - theMerge->SetData(m_tmp++, theStore->GetEnergy(s_tmp), theStore->GetXsec(s_tmp)); - ++s_tmp; - } - G4ParticleHPVector *active = theStore; - G4ParticleHPVector * passive = theNew; - G4ParticleHPVector * tmp; - G4int a = s_tmp, p = n, t; - while (aGetVectorLength()&&pGetVectorLength()) // Loop checking, 11.05.2015, T. Koi - { - if(active->GetEnergy(a) <= passive->GetEnergy(p)) - { - theMerge->SetData(m_tmp, active->GetEnergy(a), active->GetXsec(a)); - G4double x = theMerge->GetEnergy(m_tmp); - G4double y = std::max(0., passive->GetXsec(x)); - theMerge->SetData(m_tmp, x, theMerge->GetXsec(m_tmp)+y); - ++m_tmp; - ++a; - } - else - { - tmp = active; t=a; - active = passive; a=p; - passive = tmp; p=t; - } - } - while (a!=active->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi - { - theMerge->SetData(m_tmp++, active->GetEnergy(a), active->GetXsec(a)); + if (active->GetEnergy(a) <= passive->GetEnergy(p)) { + theMerge->SetData(m_tmp, active->GetEnergy(a), active->GetXsec(a)); + G4double x = theMerge->GetEnergy(m_tmp); + G4double y = std::max(0., passive->GetXsec(x)); + theMerge->SetData(m_tmp, x, theMerge->GetXsec(m_tmp) + y); + ++m_tmp; ++a; } - while (p!=passive->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi - { - G4double x = passive->GetEnergy(p); - G4double y = std::max(0., active->GetXsec(x)); - theMerge->SetData(m_tmp++, x, passive->GetXsec(p)+y); - ++p; + else { + tmp = active; + t = a; + active = passive; + a = p; + passive = tmp; + p = t; } - delete theStore; - theStore = theMerge; } - - G4ParticleHPVector * G4ParticleHPElementData::MakePhysicsVector(G4Element * theElement, - G4ParticleDefinition * projectile, - G4ParticleHPFissionData* theSet, - char* dataDirVariable) + while (a != active->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi { - if(projectile != G4Neutron::Neutron()) throw G4HadronicException(__FILE__, __LINE__, "not a neutron"); - Init ( theElement, projectile, dataDirVariable ); - return GetData(theSet); + theMerge->SetData(m_tmp++, active->GetEnergy(a), active->GetXsec(a)); + ++a; } - G4ParticleHPVector * G4ParticleHPElementData::MakePhysicsVector(G4Element * theElement, - G4ParticleDefinition * projectile, - G4ParticleHPCaptureData * theSet, - char* dataDirVariable) + while (p != passive->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi { - if(projectile != G4Neutron::Neutron()) throw G4HadronicException(__FILE__, __LINE__, "not a neutron"); - Init ( theElement, projectile, dataDirVariable ); - return GetData(theSet); - } - G4ParticleHPVector * G4ParticleHPElementData::MakePhysicsVector(G4Element * theElement, - G4ParticleDefinition * projectile, - G4ParticleHPElasticData * theSet, - char* dataDirVariable) - { - if(projectile != G4Neutron::Neutron()) throw G4HadronicException(__FILE__, __LINE__, "not a neutron"); - Init ( theElement, projectile, dataDirVariable ); - return GetData(theSet); - } - G4ParticleHPVector * G4ParticleHPElementData::MakePhysicsVector(G4Element * theElement, - G4ParticleDefinition * projectile, - G4ParticleHPInelasticData * theSet, - char* dataDirVariable) - { - if(projectile != G4Neutron::Neutron()) throw G4HadronicException(__FILE__, __LINE__, "not a neutron"); - Init ( theElement, projectile, dataDirVariable ); - return GetData(theSet); + G4double x = passive->GetEnergy(p); + G4double y = std::max(0., active->GetXsec(x)); + theMerge->SetData(m_tmp++, x, passive->GetXsec(p) + y); + ++p; } + delete theStore; + theStore = theMerge; +} + +G4ParticleHPVector* G4ParticleHPElementData::MakePhysicsVector(G4Element* theElement, + G4ParticleDefinition* projectile, + G4ParticleHPFissionData* theSet, + char* dataDirVariable) +{ + if (projectile != G4Neutron::Neutron()) + throw G4HadronicException(__FILE__, __LINE__, "not a neutron"); + Init(theElement, projectile, dataDirVariable); + return GetData(theSet); +} +G4ParticleHPVector* G4ParticleHPElementData::MakePhysicsVector(G4Element* theElement, + G4ParticleDefinition* projectile, + G4ParticleHPCaptureData* theSet, + char* dataDirVariable) +{ + if (projectile != G4Neutron::Neutron()) + throw G4HadronicException(__FILE__, __LINE__, "not a neutron"); + Init(theElement, projectile, dataDirVariable); + return GetData(theSet); +} +G4ParticleHPVector* G4ParticleHPElementData::MakePhysicsVector(G4Element* theElement, + G4ParticleDefinition* projectile, + G4ParticleHPElasticData* theSet, + char* dataDirVariable) +{ + if (projectile != G4Neutron::Neutron()) + throw G4HadronicException(__FILE__, __LINE__, "not a neutron"); + Init(theElement, projectile, dataDirVariable); + return GetData(theSet); +} +G4ParticleHPVector* G4ParticleHPElementData::MakePhysicsVector(G4Element* theElement, + G4ParticleDefinition* projectile, + G4ParticleHPInelasticData* theSet, + char* dataDirVariable) +{ + if (projectile != G4Neutron::Neutron()) + throw G4HadronicException(__FILE__, __LINE__, "not a neutron"); + Init(theElement, projectile, dataDirVariable); + return GetData(theSet); +} diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPEnAngCorrelation.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPEnAngCorrelation.cc index a689edb6ba6..c006cbeeecf 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPEnAngCorrelation.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPEnAngCorrelation.cc @@ -27,180 +27,184 @@ // J.P. Wellisch, Nov-1996 // A prototype of the low energy neutron transport model. // -// 100413 Fix bug in incidence energy by T. Koi +// 100413 Fix bug in incidence energy by T. Koi // // P. Arce, June-2014 Conversion neutron_hp to particle_hp // -// June-2019 - E. Mendoza --> Part of the code trying to preserve the baryonic number has been deleted. One has to assume that it is not preserved when using ENDF-6 data and it caused problems. +// June-2019 - E. Mendoza --> Part of the code trying to preserve the baryonic number has been +// deleted. One has to assume that it is not preserved when using ENDF-6 data and it caused +// problems. #include "G4ParticleHPEnAngCorrelation.hh" + +#include "G4IonTable.hh" #include "G4LorentzRotation.hh" #include "G4LorentzVector.hh" #include "G4RotationMatrix.hh" -#include "G4IonTable.hh" -G4ReactionProduct * G4ParticleHPEnAngCorrelation::SampleOne(G4double anEnergy) -{ - G4ReactionProduct * result = new G4ReactionProduct; - +G4ReactionProduct* G4ParticleHPEnAngCorrelation::SampleOne(G4double anEnergy) +{ + G4ReactionProduct* result = nullptr; + // do we have an appropriate distribution - if(nProducts!=1) throw G4HadronicException(__FILE__, __LINE__, "More than one product in SampleOne"); - + if (nProducts != 1) + throw G4HadronicException(__FILE__, __LINE__, "More than one product in SampleOne"); + // get the result - G4ReactionProductVector * temp=0; - G4int i=0; - - G4int icounter=0; - G4int icounter_max=1024; - while(temp == 0) { - icounter++; - if ( icounter > icounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; - } - temp = theProducts[i++].Sample(anEnergy,1); + G4ReactionProductVector* temp = nullptr; + G4int i = 0; + + G4int icounter = 0; + G4int icounter_max = 1024; + while (temp == nullptr) { + icounter++; + if (icounter > icounter_max) { + G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " + << __FILE__ << "." << G4endl; + break; + } + temp = theProducts[i++].Sample(anEnergy, 1); + } + if (temp->size() == 1) { + result = (*temp)[0]; + + } else { + if (nullptr != temp) { + for (auto const& ptr : *temp) { delete ptr; } + } + throw G4HadronicException(__FILE__, __LINE__, "SampleOne: Yield not correct"); } - - // is the multiplicity correct - if(temp->size()!=1) throw G4HadronicException(__FILE__, __LINE__, "SampleOne: Yield not correct"); - - // fill result - result = temp->operator[](0); - - // some garbage collection delete temp; - + // return result return result; } -G4ReactionProductVector * G4ParticleHPEnAngCorrelation::Sample(G4double anEnergy) +G4ReactionProductVector* G4ParticleHPEnAngCorrelation::Sample(G4double anEnergy) { - G4ReactionProductVector * result = new G4ReactionProductVector; + auto result = new G4ReactionProductVector; G4int i; - G4ReactionProductVector * it; + G4ReactionProductVector* it; G4ReactionProduct theCMS; G4LorentzRotation toZ; - if(frameFlag==2 - || frameFlag==3) // Added for particle HP + if (frameFlag == 2 || frameFlag == 3) // Added for particle HP { // simplify and double check @ - G4ThreeVector the3IncidentPart = fCache.Get().theProjectileRP->GetMomentum(); //theProjectileRP has value in LAB + G4ThreeVector the3IncidentPart = + fCache.Get().theProjectileRP->GetMomentum(); // theProjectileRP has value in LAB G4double nEnergy = fCache.Get().theProjectileRP->GetTotalEnergy(); - G4ThreeVector the3Target = fCache.Get().theTarget->GetMomentum(); //theTarget has value in LAB + G4ThreeVector the3Target = fCache.Get().theTarget->GetMomentum(); // theTarget has value in LAB G4double tEnergy = fCache.Get().theTarget->GetTotalEnergy(); - G4double totE = nEnergy+tEnergy; - G4ThreeVector the3CMS = the3Target+the3IncidentPart; + G4double totE = nEnergy + tEnergy; + G4ThreeVector the3CMS = the3Target + the3IncidentPart; theCMS.SetMomentum(the3CMS); - G4double cmsMom = std::sqrt(the3CMS*the3CMS); - G4double sqrts = std::sqrt((totE-cmsMom)*(totE+cmsMom)); + G4double cmsMom = std::sqrt(the3CMS * the3CMS); + G4double sqrts = std::sqrt((totE - cmsMom) * (totE + cmsMom)); theCMS.SetMass(sqrts); theCMS.SetTotalEnergy(totE); G4ReactionProduct aIncidentPart; aIncidentPart.Lorentz(*fCache.Get().theProjectileRP, theCMS); - //TKDB 100413 - //ENDF-6 Formats Manual ENDF-102 - //CHAPTER 6. FILE 6: PRODUCT ENERGY-ANGLE DISTRIBUTIONS - //LCT Reference system for secondary energy and angle (incident energy is always given in the LAB system) - //anEnergy = aIncidentPart.GetKineticEnergy(); - anEnergy = fCache.Get().theProjectileRP->GetKineticEnergy(); //should be same argumment of "anEnergy" + // TKDB 100413 + // ENDF-6 Formats Manual ENDF-102 + // CHAPTER 6. FILE 6: PRODUCT ENERGY-ANGLE DISTRIBUTIONS + // LCT Reference system for secondary energy and angle (incident energy is always given in the + // LAB system) anEnergy = aIncidentPart.GetKineticEnergy(); + anEnergy = + fCache.Get().theProjectileRP->GetKineticEnergy(); // should be same argumment of "anEnergy" - G4LorentzVector Ptmp (aIncidentPart.GetMomentum(), aIncidentPart.GetTotalEnergy()); + G4LorentzVector Ptmp(aIncidentPart.GetMomentum(), aIncidentPart.GetTotalEnergy()); - toZ.rotateZ(-1*Ptmp.phi()); - toZ.rotateY(-1*Ptmp.theta()); + toZ.rotateZ(-1 * Ptmp.phi()); + toZ.rotateY(-1 * Ptmp.theta()); } - fCache.Get().theTotalMeanEnergy=0; - G4LorentzRotation toLab(toZ.inverse()); //toLab only change axis NOT to LAB system + fCache.Get().theTotalMeanEnergy = 0; + G4LorentzRotation toLab(toZ.inverse()); // toLab only change axis NOT to LAB system - for(i=0; i0) - //151120 TK Modified for solving reproducibility problem - //This change may have side effect. - if(aMeanEnergy>=0) - { + // if(aMeanEnergy>0) + // 151120 TK Modified for solving reproducibility problem + // This change may have side effect. + if (aMeanEnergy >= 0) { fCache.Get().theTotalMeanEnergy += aMeanEnergy; } - else - { - fCache.Get().theTotalMeanEnergy = anEnergy/nProducts+theProducts[i].GetQValue(); + else { + fCache.Get().theTotalMeanEnergy = anEnergy / nProducts + theProducts[i].GetQValue(); } - if(it!=0) - { - for(unsigned int ii=0; iisize(); ii++) - { - //if(!std::getenv("G4PHP_NO_LORENTZ_BOOST")) { - G4LorentzVector pTmp1 (it->operator[](ii)->GetMomentum(), - it->operator[](ii)->GetTotalEnergy()); - pTmp1 = toLab*pTmp1; - it->operator[](ii)->SetMomentum(pTmp1.vect()); - it->operator[](ii)->SetTotalEnergy(pTmp1.e()); - - if(frameFlag==1) // target rest //TK 100413 should be LAB? - { - it->operator[](ii)->Lorentz(*(it->operator[](ii)), -1.*(*fCache.Get().theTarget)); //TK 100413 Is this really need? - } - else if(frameFlag==2 ) // CMS + if (it != nullptr) { + for (unsigned int ii = 0; ii < it->size(); ii++) { + // if(!std::getenv("G4PHP_NO_LORENTZ_BOOST")) { + G4LorentzVector pTmp1(it->operator[](ii)->GetMomentum(), + it->operator[](ii)->GetTotalEnergy()); + pTmp1 = toLab * pTmp1; + it->operator[](ii)->SetMomentum(pTmp1.vect()); + it->operator[](ii)->SetTotalEnergy(pTmp1.e()); + + if (frameFlag == 1) // target rest //TK 100413 should be LAB? + { + it->operator[](ii)->Lorentz( + *(it->operator[](ii)), + -1. * (*fCache.Get().theTarget)); // TK 100413 Is this really need? + } + else if (frameFlag == 2) // CMS { #ifdef G4PHPDEBUG - if( std::getenv("G4ParticleHPDebug") ) - G4cout <<"G4ParticleHPEnAngCorrelation: before Lorentz boost "<< - it->at(ii)->GetKineticEnergy()<<" "<< - it->at(ii)->GetMomentum()<at(ii)->GetKineticEnergy() << " " << it->at(ii)->GetMomentum() << G4endl; #endif - it->operator[](ii)->Lorentz(*(it->operator[](ii)), -1.*theCMS); + it->operator[](ii)->Lorentz(*(it->operator[](ii)), -1. * theCMS); #ifdef G4PHPDEBUG - if( std::getenv("G4ParticleHPDebug") ) - G4cout <<"G4ParticleHPEnAngCorrelation: after Lorentz boost "<< - it->at(ii)->GetKineticEnergy()<<" "<< - it->at(ii)->GetMomentum()<at(ii)->GetKineticEnergy() << " " << it->at(ii)->GetMomentum() << G4endl; #endif - } - //TK120515 migrate frameFlag (MF6 LCT) = 3 - else if(frameFlag==3) // CMS A<=4 other LAB + } + // TK120515 migrate frameFlag (MF6 LCT) = 3 + else if (frameFlag == 3) // CMS A<=4 other LAB { - if ( theProducts[i].GetMassCode() > 2004.5 ) //Alpha AWP 3.96713 - { - //LAB - it->operator[](ii)->Lorentz(*(it->operator[](ii)), -1.*(*fCache.Get().theTarget)); //TK 100413 Is this really need? + if (theProducts[i].GetMassCode() > 2004.5) // Alpha AWP 3.96713 + { + // LAB + it->operator[](ii)->Lorentz( + *(it->operator[](ii)), + -1. * (*fCache.Get().theTarget)); // TK 100413 Is this really need? #ifdef G4PHPDEBUG - if( std::getenv("G4ParticleHPDebug") ) - G4cout <<"G4ParticleHPEnAngCorrelation: after Lorentz boost "<< - it->at(ii)->GetKineticEnergy()<<" "<< - it->at(ii)->GetMomentum()<at(ii)->GetKineticEnergy() << " " << it->at(ii)->GetMomentum() + << G4endl; #endif - } - else - { - //CMS - it->operator[](ii)->Lorentz(*(it->operator[](ii)), -1.*theCMS); + } + else { + // CMS + it->operator[](ii)->Lorentz(*(it->operator[](ii)), -1. * theCMS); #ifdef G4PHPDEBUG - if( std::getenv("G4ParticleHPDebug") ) - G4cout <<"G4ParticleHPEnAngCorrelation: after Lorentz boost "<< - it->at(ii)->GetKineticEnergy()<<" "<< - it->at(ii)->GetMomentum()<at(ii)->GetKineticEnergy() << " " << it->at(ii)->GetMomentum() + << G4endl; #endif - } + } + } + else { + throw G4HadronicException( + __FILE__, __LINE__, + "G4ParticleHPEnAngCorrelation::Sample: The frame of the finalstate is not specified"); } - else - { - throw G4HadronicException(__FILE__, __LINE__, "G4ParticleHPEnAngCorrelation::Sample: The frame of the finalstate is not specified"); - } - - // }//getenv("G4PHP_NO_LORENTZ_BOOST")) - // G4cout << ii << " EnAnG energy after boost " << it->operator[](ii)->GetKineticEnergy() << G4endl; //GDEB - result->push_back(it->operator[](ii)); + + // }//getenv("G4PHP_NO_LORENTZ_BOOST")) + // G4cout << ii << " EnAnG energy after boost " << it->operator[](ii)->GetKineticEnergy() + //<< G4endl; //GDEB + result->push_back(it->operator[](ii)); } delete it; } - } + } return result; } - diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFCFissionFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFCFissionFS.cc index ffe5c2d05df..eb6d3db8acf 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFCFissionFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFCFissionFS.cc @@ -31,16 +31,17 @@ // #include "G4ParticleHPFCFissionFS.hh" - void G4ParticleHPFCFissionFS::Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String &, G4ParticleDefinition* projectile) - { - G4String aString = "/FC/"; - G4ParticleHPFissionBaseFS::Init(A, Z, M, dirName, aString, projectile ); - } - - G4DynamicParticleVector * G4ParticleHPFCFissionFS::ApplyYourself(G4int nNeutrons) - { - G4DynamicParticleVector * aResult; -// G4cout <<"G4ParticleHPFCFissionFS::ApplyYourself +"<* >* >::iterator it = FissionProductYieldData.begin(); - while ( it != FissionProductYieldData.end() ) { // Loop checking, 11.05.2015, T. Koi - std::map* >* firstLevel = it->second; - if ( firstLevel ) { - std::map*>::iterator it2 = firstLevel->begin(); - while ( it2 != firstLevel->end() ) { // Loop checking, 11.05.2015, T. Koi - delete it2->second; - it2->second = 0; - firstLevel->erase(it2); - it2=firstLevel->begin(); - } - } - delete firstLevel; - it->second = 0; - FissionProductYieldData.erase(it); - it = FissionProductYieldData.begin(); - } - - std::map< G4int , std::map< G4double , G4int >* >::iterator ii = mMTInterpolation.begin(); - while ( ii != mMTInterpolation.end() ) { // Loop checking, 11.05.2015, T. Koi - delete ii->second; - mMTInterpolation.erase(ii); - ii = mMTInterpolation.begin(); + auto it = FissionProductYieldData.begin(); + while (it != FissionProductYieldData.end()) { // Loop checking, 11.05.2015, T. Koi + std::map*>* firstLevel = it->second; + if (firstLevel != nullptr) { + auto it2 = firstLevel->begin(); + while (it2 != firstLevel->end()) { // Loop checking, 11.05.2015, T. Koi + delete it2->second; + it2->second = 0; + firstLevel->erase(it2); + it2 = firstLevel->begin(); + } } + delete firstLevel; + it->second = 0; + FissionProductYieldData.erase(it); + it = FissionProductYieldData.begin(); + } + + auto ii = mMTInterpolation.begin(); + while (ii != mMTInterpolation.end()) { // Loop checking, 11.05.2015, T. Koi + delete ii->second; + mMTInterpolation.erase(ii); + ii = mMTInterpolation.begin(); + } } -void G4ParticleHPFFFissionFS::Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & , G4ParticleDefinition*) +void G4ParticleHPFFFissionFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String&, + G4ParticleDefinition*) { - //G4cout << "G4ParticleHPFFFissionFS::Init" << G4endl; - G4String aString = "FF"; - - G4String tString = dirName; - G4bool dbool; - G4ParticleHPDataUsed aFile = theNames.GetName(static_cast(A), static_cast(Z), M, tString, aString , dbool); - G4String filename = aFile.GetName(); - theBaseA = aFile.GetA(); - theBaseZ = aFile.GetZ(); - -//3456 - if ( !dbool || ( Z < 2.5 && ( std::abs(theBaseZ-Z)>0.0001 || std::abs(theBaseA-A)>0.0001) ) ) - { - hasAnyData = false; - hasFSData = false; - hasXsec = false; - return; // no data for exactly this isotope. - } - //std::ifstream theData(filename, std::ios::in); - std::istringstream theData(std::ios::in); - G4ParticleHPManager::GetInstance()->GetDataStream(filename,theData); - G4double dummy; - if ( !theData ) - { - //theData.close(); - hasFSData = false; - hasXsec = false; - hasAnyData = false; - return; // no data for this FS for this isotope - } - - - hasFSData = true; - // MT Energy FPS Yield - //std::map< int , std::map< double , std::map< int , double >* >* > FisionProductYieldData; - while ( theData.good() ) // Loop checking, 11.05.2015, T. Koi - { - G4int iMT, iMF; - G4int imax; - //Reading the data - // MT MF AWR - theData >> iMT >> iMF >> dummy; - // nBlock - theData >> imax; - //if ( !theData.good() ) continue; - // Ei FPS Yield - std::map< G4double , std::map< G4int , G4double >* >* mEnergyFSPData = new std::map< G4double , std::map< G4int , G4double >* >; - - std::map< G4double , G4int >* mInterporation = new std::map< G4double , G4int >; - for ( G4int i = 0 ; i <= imax ; i++ ) - { - - G4double YY=0.0; - G4double Ei; - G4int jmax; - G4int ip; - // energy of incidence neutron - theData >> Ei; - // Number of data set followings - theData >> jmax; - // interpolation scheme - theData >> ip; - mInterporation->insert( std::pair(Ei*eV,ip) ); - // nNumber nIP - std::map* mFSPYieldData = new std::map; - for ( G4int j = 0 ; j < jmax ; j++ ) - { - G4int FSP; - G4int mFSP; - G4double Y; - theData >> FSP >> mFSP >> Y; - G4int k = FSP*100+mFSP; - YY = YY + Y; - //if ( iMT == 454 )G4cout << iMT << " " << i << " " << j << " " << k << " " << Y << " " << YY << G4endl; - mFSPYieldData->insert( std::pair( k , YY ) ); - } - mEnergyFSPData->insert( std::pair*>(Ei*eV,mFSPYieldData) ); + // G4cout << "G4ParticleHPFFFissionFS::Init" << G4endl; + G4String aString = "FF"; + + G4String tString = dirName; + G4bool dbool; + G4ParticleHPDataUsed aFile = + theNames.GetName(static_cast(A), static_cast(Z), M, tString, aString, dbool); + G4String filename = aFile.GetName(); + theBaseA = aFile.GetA(); + theBaseZ = aFile.GetZ(); + + // 3456 + if (!dbool || (Z < 2.5 && (std::abs(theBaseZ - Z) > 0.0001 || std::abs(theBaseA - A) > 0.0001))) { + hasAnyData = false; + hasFSData = false; + hasXsec = false; + return; // no data for exactly this isotope. + } + // std::ifstream theData(filename, std::ios::in); + std::istringstream theData(std::ios::in); + G4ParticleHPManager::GetInstance()->GetDataStream(filename, theData); + G4double dummy; + if (!theData) { + // theData.close(); + hasFSData = false; + hasXsec = false; + hasAnyData = false; + return; // no data for this FS for this isotope + } + + hasFSData = true; + // MT Energy FPS Yield + // std::map< int , std::map< double , std::map< int , double >* >* > FisionProductYieldData; + while (theData.good()) // Loop checking, 11.05.2015, T. Koi + { + G4int iMT, iMF; + G4int imax; + // Reading the data + // MT MF AWR + theData >> iMT >> iMF >> dummy; + // nBlock + theData >> imax; + // if ( !theData.good() ) continue; + // Ei FPS Yield + auto mEnergyFSPData = new std::map*>; + + auto mInterporation = new std::map; + for (G4int i = 0; i <= imax; i++) { + G4double YY = 0.0; + G4double Ei; + G4int jmax; + G4int ip; + // energy of incidence neutron + theData >> Ei; + // Number of data set followings + theData >> jmax; + // interpolation scheme + theData >> ip; + mInterporation->insert(std::pair(Ei * eV, ip)); + // nNumber nIP + auto mFSPYieldData = new std::map; + for (G4int j = 0; j < jmax; j++) { + G4int FSP; + G4int mFSP; + G4double Y; + theData >> FSP >> mFSP >> Y; + G4int k = FSP * 100 + mFSP; + YY = YY + Y; + // if ( iMT == 454 )G4cout << iMT << " " << i << " " << j << " " << k << " " << Y << " " << + // YY << G4endl; + mFSPYieldData->insert(std::pair(k, YY)); } + mEnergyFSPData->insert( + std::pair*>(Ei * eV, mFSPYieldData)); + } - FissionProductYieldData.insert( std::pair< G4int , std::map< G4double , std::map< G4int , G4double >* >* > (iMT,mEnergyFSPData)); - mMTInterpolation.insert( std::pair*> (iMT,mInterporation) ); - } - //theData.close(); + FissionProductYieldData.insert( + std::pair*>*>(iMT, mEnergyFSPData)); + mMTInterpolation.insert(std::pair*>(iMT, mInterporation)); + } + // theData.close(); } - -G4DynamicParticleVector * G4ParticleHPFFFissionFS::ApplyYourself(G4int nNeutrons) -{ - G4DynamicParticleVector * aResult; -// G4cout <<"G4ParticleHPFFFissionFS::ApplyYourself +"<* >* mEnergyFSPData = FissionProductYieldData.find( 454 )->second; - - //It is not clear that the treatment of the scheme 2 on two-dimensional interpolation. - //So, here just use the closest energy point array of yield data. - //TK120531 - G4double key_energy = DBL_MAX; - if ( mEnergyFSPData->size() == 1 ) - { - key_energy = mEnergyFSPData->cbegin()->first; - } - else - { - //Find closest energy point - G4double Dmin=DBL_MAX; - for ( auto it = mEnergyFSPData->cbegin(); it != mEnergyFSPData->cend(); ++it ) - { - G4double e = (it->first); - G4double d = std::fabs ( energy - e ); - if ( d < Dmin ) - { - Dmin = d; - key_energy = e; - } - } - } - - std::map* mFSPYieldData = (*mEnergyFSPData)[key_energy]; - - G4int ifrag=0; - G4double ceilling = mFSPYieldData->rbegin()->second; // Because of numerical accuracy, this is not always 2 - for ( auto it = mFSPYieldData->cbegin(); it != mFSPYieldData->cend(); ++it ) - { - //if ( ( rand - it->second/ceilling ) < 1.0e-6 ) std::cout << rand - it->second/ceilling << std::endl; - if ( rand <= it->second/ceilling ) - { - //G4cout << it->first << " " << it->second/ceilling << G4endl; - ifrag = it->first; - break; + // G4cout << "G4ParticleHPFFFissionFS::GetAFissionFragment " << G4endl; + + G4double rand = G4UniformRand(); + // G4cout << rand << G4endl; + + std::map*>* mEnergyFSPData = + FissionProductYieldData.find(454)->second; + + // It is not clear that the treatment of the scheme 2 on two-dimensional interpolation. + // So, here just use the closest energy point array of yield data. + // TK120531 + G4double key_energy = DBL_MAX; + if (mEnergyFSPData->size() == 1) { + key_energy = mEnergyFSPData->cbegin()->first; + } + else { + // Find closest energy point + G4double Dmin = DBL_MAX; + for (auto it = mEnergyFSPData->cbegin(); it != mEnergyFSPData->cend(); ++it) { + G4double e = (it->first); + G4double d = std::fabs(energy - e); + if (d < Dmin) { + Dmin = d; + key_energy = e; } - } + } + } + + std::map* mFSPYieldData = (*mEnergyFSPData)[key_energy]; + + G4int ifrag = 0; + G4double ceilling = + mFSPYieldData->rbegin()->second; // Because of numerical accuracy, this is not always 2 + for (auto it = mFSPYieldData->cbegin(); it != mFSPYieldData->cend(); ++it) { + // if ( ( rand - it->second/ceilling ) < 1.0e-6 ) std::cout << rand - it->second/ceilling << + // std::endl; + if (rand <= it->second / ceilling) { + // G4cout << it->first << " " << it->second/ceilling << G4endl; + ifrag = it->first; + break; + } + } - fragZ = ifrag/100000; - fragA = (ifrag%100000)/100; - fragM = (ifrag%100); + fragZ = ifrag / 100000; + fragA = (ifrag % 100000) / 100; + fragM = (ifrag % 100); - //G4cout << fragZ << " " << fragA << " " << fragM << G4endl; + // G4cout << fragZ << " " << fragA << " " << fragM << G4endl; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFSFissionFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFSFissionFS.cc index dfaa54c813e..6d4a22212fa 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFSFissionFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFSFissionFS.cc @@ -30,172 +30,170 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPFSFissionFS.hh" -#include "G4ParticleHPManager.hh" -#include "G4ReactionProduct.hh" -#include "G4Nucleus.hh" -#include "G4Proton.hh" -#include "G4Deuteron.hh" -#include "G4Triton.hh" + #include "G4Alpha.hh" -#include "G4ThreeVector.hh" -#include "G4Poisson.hh" +#include "G4Deuteron.hh" #include "G4LorentzVector.hh" +#include "G4Nucleus.hh" #include "G4ParticleHPDataUsed.hh" +#include "G4ParticleHPManager.hh" +#include "G4Poisson.hh" +#include "G4Proton.hh" +#include "G4ReactionProduct.hh" +#include "G4ThreeVector.hh" +#include "G4Triton.hh" -void G4ParticleHPFSFissionFS::Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String &, G4ParticleDefinition* ) +void G4ParticleHPFSFissionFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, G4String&, + G4ParticleDefinition*) { G4String tString = "/FS/"; G4bool dbool; - G4ParticleHPDataUsed aFile = theNames.GetName(static_cast(A), static_cast(Z), M, dirName, tString, dbool); + G4ParticleHPDataUsed aFile = + theNames.GetName(static_cast(A), static_cast(Z), M, dirName, tString, dbool); G4String filename = aFile.GetName(); - SetAZMs( A, Z, M, aFile ); - if(!dbool) - { + SetAZMs(A, Z, M, aFile); + if (!dbool) { hasAnyData = false; - hasFSData = false; + hasFSData = false; hasXsec = false; return; } std::istringstream theData(std::ios::in); - G4ParticleHPManager::GetInstance()->GetDataStream(filename,theData); + G4ParticleHPManager::GetInstance()->GetDataStream(filename, theData); G4int infoType, dataType; - hasFSData = false; - while (theData >> infoType) // Loop checking, 11.05.2015, T. Koi + hasFSData = false; + while (theData >> infoType) // Loop checking, 11.05.2015, T. Koi { - hasFSData = true; + hasFSData = true; theData >> dataType; - switch(infoType) - { - case 1: - if(dataType==4) theNeutronAngularDis.Init(theData); - if(dataType==5) thePromptNeutronEnDis.Init(theData); - if(dataType==12) theFinalStatePhotons.InitMean(theData); - if(dataType==14) theFinalStatePhotons.InitAngular(theData); - if(dataType==15) theFinalStatePhotons.InitEnergies(theData); + switch (infoType) { + case 1: + if (dataType == 4) theNeutronAngularDis.Init(theData); + if (dataType == 5) thePromptNeutronEnDis.Init(theData); + if (dataType == 12) theFinalStatePhotons.InitMean(theData); + if (dataType == 14) theFinalStatePhotons.InitAngular(theData); + if (dataType == 15) theFinalStatePhotons.InitEnergies(theData); break; case 2: - if(dataType==1) theFinalStateNeutrons.InitMean(theData); + if (dataType == 1) theFinalStateNeutrons.InitMean(theData); break; case 3: - if(dataType==1) theFinalStateNeutrons.InitDelayed(theData); - if(dataType==5) theDelayedNeutronEnDis.Init(theData); + if (dataType == 1) theFinalStateNeutrons.InitDelayed(theData); + if (dataType == 5) theDelayedNeutronEnDis.Init(theData); break; case 4: - if(dataType==1) theFinalStateNeutrons.InitPrompt(theData); + if (dataType == 1) theFinalStateNeutrons.InitPrompt(theData); break; case 5: - if(dataType==1) theEnergyRelease.Init(theData); + if (dataType == 1) theEnergyRelease.Init(theData); break; default: - G4cout << "G4ParticleHPFSFissionFS::Init: unknown data type"<SetDefinition(theNeutrons[i].GetDefinition()); dp->SetMomentum(theNeutrons[i].GetMomentum()); aResult->push_back(dp); } - delete [] theNeutrons; + delete[] theNeutrons; return aResult; } -void G4ParticleHPFSFissionFS::SampleNeutronMult(G4int&all, G4int&Prompt, G4int&delayed, G4double eKinetic, G4int off) +void G4ParticleHPFSFissionFS::SampleNeutronMult(G4int& all, G4int& Prompt, G4int& delayed, + G4double eKinetic, G4int off) { - G4double promptNeutronMulti = 0; - promptNeutronMulti = theFinalStateNeutrons.GetPrompt(eKinetic); - G4double delayedNeutronMulti = 0; - delayedNeutronMulti = theFinalStateNeutrons.GetDelayed(eKinetic); - - if(delayedNeutronMulti==0&&promptNeutronMulti==0) - { - Prompt = 0; - delayed = 0; - G4double totalNeutronMulti = theFinalStateNeutrons.GetMean(eKinetic); - all = (G4int)G4Poisson(totalNeutronMulti-off); - all += off; - } - else - { - Prompt = (G4int)G4Poisson(promptNeutronMulti-off); - Prompt += off; - delayed = (G4int)G4Poisson(delayedNeutronMulti); - all = Prompt+delayed; - } + G4double promptNeutronMulti = 0; + promptNeutronMulti = theFinalStateNeutrons.GetPrompt(eKinetic); + G4double delayedNeutronMulti = 0; + delayedNeutronMulti = theFinalStateNeutrons.GetDelayed(eKinetic); + + if (delayedNeutronMulti == 0 && promptNeutronMulti == 0) { + Prompt = 0; + delayed = 0; + G4double totalNeutronMulti = theFinalStateNeutrons.GetMean(eKinetic); + all = (G4int)G4Poisson(totalNeutronMulti - off); + all += off; + } + else { + Prompt = (G4int)G4Poisson(promptNeutronMulti - off); + Prompt += off; + delayed = (G4int)G4Poisson(delayedNeutronMulti); + all = Prompt + delayed; + } } -G4DynamicParticleVector * G4ParticleHPFSFissionFS::GetPhotons() +G4DynamicParticleVector* G4ParticleHPFSFissionFS::GetPhotons() { - // sample photons - G4ReactionProductVector * temp; - G4ReactionProduct boosted; + // sample photons + G4ReactionProductVector* temp; + G4ReactionProduct boosted; - // the photon distributions are in the Nucleus rest frame. - boosted.Lorentz( *(fCache.Get().theNeutronRP) , *(fCache.Get().theTarget) ); - G4double anEnergy = boosted.GetKineticEnergy(); - temp = theFinalStatePhotons.GetPhotons(anEnergy); - if(temp == 0) { return 0; } + // the photon distributions are in the Nucleus rest frame. + boosted.Lorentz(*(fCache.Get().theNeutronRP), *(fCache.Get().theTarget)); + G4double anEnergy = boosted.GetKineticEnergy(); + temp = theFinalStatePhotons.GetPhotons(anEnergy); + if (temp == nullptr) { + return nullptr; + } - // lorentz transform, and add photons to final state - unsigned int i; - G4DynamicParticleVector * result = new G4DynamicParticleVector; - for(i=0; isize(); ++i) - { - // back to lab - temp->operator[](i)->Lorentz(*(temp->operator[](i)), -1.* (*(fCache.Get().theTarget)) ); - G4DynamicParticle * theOne = new G4DynamicParticle; - theOne->SetDefinition(temp->operator[](i)->GetDefinition()); - theOne->SetMomentum(temp->operator[](i)->GetMomentum()); - result->push_back(theOne); - delete temp->operator[](i); - } - delete temp; - return result; + // lorentz transform, and add photons to final state + unsigned int i; + auto result = new G4DynamicParticleVector; + for (i = 0; i < temp->size(); ++i) { + // back to lab + temp->operator[](i)->Lorentz(*(temp->operator[](i)), -1. * (*(fCache.Get().theTarget))); + auto theOne = new G4DynamicParticle; + theOne->SetDefinition(temp->operator[](i)->GetDefinition()); + theOne->SetMomentum(temp->operator[](i)->GetMomentum()); + result->push_back(theOne); + delete temp->operator[](i); + } + delete temp; + return result; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre.cc index 865fb633f89..96927d3c556 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre.cc @@ -28,6 +28,8 @@ // A prototype of the low energy neutron transport model. // P. Arce, June-2014 Conversion neutron_hp to particle_hp // +// Never format because of complexity and size +// clang-format off #include "G4ParticleHPFastLegendre.hh" const G4double G4ParticleHPFastLegendre::l0[201] = {1, 1, 1, 1, 1, 1, 1, 1, diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_14.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_14.cc index 83f00b66f48..004a55436e4 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_14.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_14.cc @@ -28,6 +28,8 @@ // A prototype of the low energy neutron transport model. // P. Arce, June-2014 Conversion neutron_hp to particle_hp // +// Never format because of complexity and size +// clang-format off #include "G4ParticleHPFastLegendre.hh" const G4double diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_18.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_18.cc index 2963f554345..65398314a9b 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_18.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_18.cc @@ -28,6 +28,8 @@ // A prototype of the low energy neutron transport model. // P. Arce, June-2014 Conversion neutron_hp to particle_hp // +// Never format because of complexity and size +// clang-format off #include "G4ParticleHPFastLegendre.hh" const G4double diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_21.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_21.cc index bda0ebe6792..fae1058dd88 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_21.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_21.cc @@ -28,6 +28,8 @@ // A prototype of the low energy neutron transport model. // P. Arce, June-2014 Conversion neutron_hp to particle_hp // +// Never format because of complexity and size +// clang-format off #include "G4ParticleHPFastLegendre.hh" const G4double G4ParticleHPFastLegendre::l21[4401] = {-1, -0.897713, diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_24.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_24.cc index efb59a3079f..dc5269300c2 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_24.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_24.cc @@ -28,6 +28,8 @@ // A prototype of the low energy neutron transport model. // P. Arce, June-2014 Conversion neutron_hp to particle_hp // +// Never format because of complexity and size +// clang-format off #include "G4ParticleHPFastLegendre.hh" const G4double G4ParticleHPFastLegendre::l24[5001] = {1, diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_26.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_26.cc index 0a02ea16bb2..6837992ee9b 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_26.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_26.cc @@ -28,6 +28,8 @@ // A prototype of the low energy neutron transport model. // P. Arce, June-2014 Conversion neutron_hp to particle_hp // +// Never format because of complexity and size +// clang-format off #include "G4ParticleHPFastLegendre.hh" const G4double diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_28.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_28.cc index 580b415ca32..ab2b64389ae 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_28.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_28.cc @@ -28,6 +28,8 @@ // A prototype of the low energy neutron transport model. // P. Arce, June-2014 Conversion neutron_hp to particle_hp // +// Never format because of complexity and size +// clang-format off #include "G4ParticleHPFastLegendre.hh" const G4double diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_30.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_30.cc index 66394be3744..3579e7a8fe8 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_30.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFastLegendre_30.cc @@ -28,6 +28,8 @@ // A prototype of the low energy neutron transport model. // P. Arce, June-2014 Conversion neutron_hp to particle_hp // +// Never format because of complexity and size +// clang-format off #include "G4ParticleHPFastLegendre.hh" const G4double G4ParticleHPFastLegendre::l30[6201] = {1, 0.855521, 0.721722, diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPField.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPField.cc index 1bdc74dff15..619c5b1840c 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPField.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPField.cc @@ -30,92 +30,91 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPField.hh" + #include "G4HadronicException.hh" #include "G4ios.hh" +G4ParticleHPField::G4ParticleHPField() +{ + theData = new G4ParticleHPFieldPoint[100]; + nPoints = 100; + nEntries = 0; + theData->SetData(0, 0, 0); +} + +G4ParticleHPField::~G4ParticleHPField() +{ + delete[] theData; +} - G4ParticleHPField::G4ParticleHPField() - { - theData = new G4ParticleHPFieldPoint[100]; - nPoints=100; - nEntries=0; - theData->SetData(0,0,0); +G4double G4ParticleHPField::GetY(G4double e, G4int j) +{ + G4int low = 0; + G4int high = 0; + G4int i; + for (i = 1; i < nEntries / 10; i++) { + if (theData[10 * i].GetX() > e) break; } - - G4ParticleHPField::~G4ParticleHPField(){ delete [] theData;} - - G4double G4ParticleHPField::GetY(G4double e, G4int j) - { - G4int low = 0; - G4int high = 0; - G4int i; - for (i=1; ie) break; + if (theData[i++].GetX() > e) break; } - if(i==(nEntries/10)) - { - i=10*i; - while (ie) break; - } - if (i==nEntries) - { - low = nEntries-1; - high = nEntries-2; - }else{ - low = i-1; - high = i; - } - }else{ - for (G4int jj=0; jj<10; jj++) - { - if(theData[i].GetX()nEntries) throw G4HadronicException(__FILE__, __LINE__, "Skipped some index numbers in G4ParticleHPField"); - if(i==nPoints) - { - nPoints += 50; - G4ParticleHPFieldPoint * buff = new G4ParticleHPFieldPoint[nPoints]; -// G4cout << "copying 1"< nEntries) + throw G4HadronicException(__FILE__, __LINE__, + "Skipped some index numbers in G4ParticleHPField"); + if (i == nPoints) { + nPoints += 50; + auto buff = new G4ParticleHPFieldPoint[nPoints]; + // G4cout << "copying 1"<GetDoNotAdjustFinalState() ) return; - - G4int nSecondaries = (G4int)theResult.Get()->GetNumberOfSecondaries(); - - G4int sum_Z = 0; - G4int sum_A = 0; - G4int max_SecZ = 0; - G4int max_SecA = 0; - G4int imaxA = -1; - for ( G4int i = 0 ; i < nSecondaries ; ++i ) - { - sum_Z += theResult.Get()->GetSecondary( i )->GetParticle()->GetDefinition()->GetAtomicNumber(); - max_SecZ = std::max ( max_SecZ , theResult.Get()->GetSecondary( i )->GetParticle()->GetDefinition()->GetAtomicNumber() ); - sum_A += theResult.Get()->GetSecondary( i )->GetParticle()->GetDefinition()->GetAtomicMass(); - max_SecA = std::max ( max_SecA , theResult.Get()->GetSecondary( i )->GetParticle()->GetDefinition()->GetAtomicMass() ); - if ( theResult.Get()->GetSecondary( i )->GetParticle()->GetDefinition()->GetAtomicMass() == max_SecA ) imaxA = i; + G4double minimum_energy = 1 * keV; + + if (G4ParticleHPManager::GetInstance()->GetDoNotAdjustFinalState()) return; + + auto nSecondaries = (G4int)theResult.Get()->GetNumberOfSecondaries(); + + G4int sum_Z = 0; + G4int sum_A = 0; + G4int max_SecZ = 0; + G4int max_SecA = 0; + G4int imaxA = -1; + for (G4int i = 0; i < nSecondaries; ++i) { + sum_Z += theResult.Get()->GetSecondary(i)->GetParticle()->GetDefinition()->GetAtomicNumber(); + max_SecZ = + std::max(max_SecZ, + theResult.Get()->GetSecondary(i)->GetParticle()->GetDefinition()->GetAtomicNumber()); + sum_A += theResult.Get()->GetSecondary(i)->GetParticle()->GetDefinition()->GetAtomicMass(); + max_SecA = std::max( + max_SecA, theResult.Get()->GetSecondary(i)->GetParticle()->GetDefinition()->GetAtomicMass()); + if (theResult.Get()->GetSecondary(i)->GetParticle()->GetDefinition()->GetAtomicMass() + == max_SecA) + imaxA = i; #ifdef G4PHPDEBUG - if( std::getenv("G4ParticleHPDebug")) G4cout << "G4ParticleHPFinalState::adjust_final_stat SECO " << i << " " <GetSecondary( i )->GetParticle()->GetDefinition()->GetParticleName() << G4endl; + if (std::getenv("G4ParticleHPDebug")) + G4cout << "G4ParticleHPFinalState::adjust_final_stat SECO " << i << " " + << theResult.Get()->GetSecondary(i)->GetParticle()->GetDefinition()->GetParticleName() + << G4endl; #endif - - } - - G4ParticleDefinition* resi_pd = 0; - - G4double baseZNew = theBaseZ; - G4double baseANew = theBaseA; - if( theProjectile == G4Neutron::Neutron() ) { - baseANew ++; - } else if( theProjectile == G4Proton::Proton() ) { - baseZNew ++; - baseANew ++; - } else if( theProjectile == G4Deuteron::Deuteron() ) { - baseZNew ++; - baseANew += 2; - } else if( theProjectile == G4Triton::Triton() ) { - baseZNew ++; - baseANew += 3; - } else if( theProjectile == G4He3::He3() ) { - baseZNew += 2; - baseANew += 3; - } else if( theProjectile == G4Alpha::Alpha() ) { - baseZNew += 2; - baseANew += 4; - } + } + + G4ParticleDefinition* resi_pd = nullptr; + + G4double baseZNew = theBaseZ; + G4double baseANew = theBaseA; + if (theProjectile == G4Neutron::Neutron()) { + baseANew++; + } + else if (theProjectile == G4Proton::Proton()) { + baseZNew++; + baseANew++; + } + else if (theProjectile == G4Deuteron::Deuteron()) { + baseZNew++; + baseANew += 2; + } + else if (theProjectile == G4Triton::Triton()) { + baseZNew++; + baseANew += 3; + } + else if (theProjectile == G4He3::He3()) { + baseZNew += 2; + baseANew += 3; + } + else if (theProjectile == G4Alpha::Alpha()) { + baseZNew += 2; + baseANew += 4; + } #ifdef G4PHPDEBUG - if( std::getenv("G4ParticleHPDebug")) G4cout << "G4ParticleHPFinalState::adjust_final_stat BaseZ " << baseZNew << " BaseA " << baseANew << " sum_Z " << sum_Z << " sum_A " << sum_A << G4endl; + if (std::getenv("G4ParticleHPDebug")) + G4cout << "G4ParticleHPFinalState::adjust_final_stat BaseZ " << baseZNew << " BaseA " + << baseANew << " sum_Z " << sum_Z << " sum_A " << sum_A << G4endl; #endif - G4bool needOneMoreSec = false; - G4ParticleDefinition* oneMoreSec_pd = 0; - if ( (G4int)(baseZNew - sum_Z) == 0 && (G4int)(baseANew - sum_A) == 0 ) - { - //All secondaries are already created; - resi_pd = theResult.Get()->GetSecondary( imaxA )->GetParticle()->GetDefinition(); - } - else - { - if ( max_SecA >= G4int(baseANew - sum_A) ) - { - //Most heavy secondary is interpreted as residual - resi_pd = theResult.Get()->GetSecondary( imaxA )->GetParticle()->GetDefinition(); - needOneMoreSec = true; + G4bool needOneMoreSec = false; + G4ParticleDefinition* oneMoreSec_pd = nullptr; + if ((G4int)(baseZNew - sum_Z) == 0 && (G4int)(baseANew - sum_A) == 0) { + // All secondaries are already created; + resi_pd = theResult.Get()->GetSecondary(imaxA)->GetParticle()->GetDefinition(); + } + else { + if (max_SecA >= G4int(baseANew - sum_A)) { + // Most heavy secondary is interpreted as residual + resi_pd = theResult.Get()->GetSecondary(imaxA)->GetParticle()->GetDefinition(); + needOneMoreSec = true; + } + else { + // creation of residual is required + resi_pd = + G4IonTable::GetIonTable()->GetIon(G4int(baseZNew - sum_Z), G4int(baseANew - sum_A), 0.0); + } + + if (needOneMoreSec) { + if (G4int(baseZNew - sum_Z) == 0 && G4int(baseANew - sum_A) > 0) { + // In this case, one neutron is added to secondaries + if (G4int(baseANew - sum_A) > 1) + G4cout << "More than one neutron is required for the balance of baryon number!" << G4endl; + oneMoreSec_pd = G4Neutron::Neutron(); } - else - { - //creation of residual is required - resi_pd = G4IonTable::GetIonTable()->GetIon ( G4int(baseZNew - sum_Z), - G4int(baseANew - sum_A) , 0.0 ); - } - - if ( needOneMoreSec ) - { - if ( G4int(baseZNew - sum_Z) == 0 && G4int(baseANew - sum_A) > 0 ) - { - //In this case, one neutron is added to secondaries - if ( G4int(baseANew - sum_A) > 1 ) - G4cout << "More than one neutron is required for the balance of baryon number!" - << G4endl; - oneMoreSec_pd = G4Neutron::Neutron(); - } - else - { + else { #ifdef G4PHPDEBUG - if( std::getenv("G4ParticleHPDebug")) G4cout << this << "G4ParticleHPFinalState oneMoreSec_pd Z " << baseZNew << " - " << sum_Z << " A " << baseANew << " - " << sum_A << " projectile " << theProjectile->GetParticleName() << G4endl; + if (std::getenv("G4ParticleHPDebug")) + G4cout << this << "G4ParticleHPFinalState oneMoreSec_pd Z " << baseZNew << " - " << sum_Z + << " A " << baseANew << " - " << sum_A << " projectile " + << theProjectile->GetParticleName() << G4endl; #endif - oneMoreSec_pd = G4IonTable::GetIonTable()->GetIon ( G4int(baseZNew - sum_Z), - G4int(baseANew - sum_A) , 0.0 ); - if( !oneMoreSec_pd ) { - G4cerr << this << "G4ParticleHPFinalState oneMoreSec_pd Z " << baseZNew << " - " << sum_Z << " A " << baseANew << " - " << sum_A << " projectile " << theProjectile->GetParticleName() << G4endl; - G4Exception("G4ParticleHPFinalState:adjust_final_state", - "Warning", - JustWarning, - "No adjustment will be done!"); - return; - } - } - } - - if ( resi_pd == 0 ) - { - // theNDLDataZ,A has the Z and A of used NDL file - G4double ndlZNew = theNDLDataZ; - G4double ndlANew = theNDLDataA; - if( theProjectile == G4Neutron::Neutron() ) { - ndlANew ++; - } else if( theProjectile == G4Proton::Proton() ) { - ndlZNew ++; - ndlANew ++; - } else if( theProjectile == G4Deuteron::Deuteron() ) { - ndlZNew ++; - ndlANew += 2; - } else if( theProjectile == G4Triton::Triton() ) { - ndlZNew ++; - ndlANew += 3; - } else if( theProjectile == G4He3::He3() ) { - ndlZNew += 2; - ndlANew += 3; - } else if( theProjectile == G4Alpha::Alpha() ) { - ndlZNew += 2; - ndlANew += 4; - } - // theNDLDataZ,A has the Z and A of used NDL file - if ( G4int(ndlZNew - sum_Z) == 0 && G4int(ndlANew - sum_A) == 0 ) - { - G4int dif_Z = G4int( theNDLDataZ - theBaseZ ); - G4int dif_A = G4int( theNDLDataA - theBaseA ); - resi_pd = G4IonTable::GetIonTable()->GetIon ( max_SecZ - dif_Z , max_SecA - dif_A , 0.0 ); - if( !resi_pd ) { - G4cerr << "G4ParticleHPFinalState resi_pd Z " << max_SecZ << " - " << dif_Z << " A " << max_SecA << " - " << dif_A << " projectile " << theProjectile->GetParticleName() << G4endl; - G4Exception("G4ParticleHPFinalState:adjust_final_state", - "Warning", - JustWarning, - "No adjustment will be done!"); - return; - } - - for ( G4int i = 0 ; i < nSecondaries ; ++i ) - { - if ( theResult.Get()->GetSecondary( i )->GetParticle()->GetDefinition()->GetAtomicNumber() == max_SecZ - && theResult.Get()->GetSecondary( i )->GetParticle()->GetDefinition()->GetAtomicMass() == max_SecA ) - { - G4ThreeVector p = theResult.Get()->GetSecondary( i )->GetParticle()->GetMomentum(); - p = p * resi_pd->GetPDGMass()/ G4IonTable::GetIonTable()->GetIon ( max_SecZ , max_SecA , 0.0 )->GetPDGMass(); - theResult.Get()->GetSecondary( i )->GetParticle()->SetDefinition( resi_pd ); - theResult.Get()->GetSecondary( i )->GetParticle()->SetMomentum( p ); - } - } + oneMoreSec_pd = + G4IonTable::GetIonTable()->GetIon(G4int(baseZNew - sum_Z), G4int(baseANew - sum_A), 0.0); + if (oneMoreSec_pd == nullptr) { + G4cerr << this << "G4ParticleHPFinalState oneMoreSec_pd Z " << baseZNew << " - " << sum_Z + << " A " << baseANew << " - " << sum_A << " projectile " + << theProjectile->GetParticleName() << G4endl; + G4Exception("G4ParticleHPFinalState:adjust_final_state", "Warning", JustWarning, + "No adjustment will be done!"); + return; } } - } - - G4LorentzVector secs_4p_lab( 0.0 ); - - G4int n_sec = (G4int)theResult.Get()->GetNumberOfSecondaries(); - G4double fast = 0; - G4double slow = 1; - G4int ifast = 0; - G4int islow = 0; - G4int ires = -1; - - for ( G4int i = 0 ; i < n_sec ; ++i ) - { - secs_4p_lab += theResult.Get()->GetSecondary( i )->GetParticle()->Get4Momentum(); - - G4double beta = 0; - if ( theResult.Get()->GetSecondary( i )->GetParticle()->GetDefinition() != G4Gamma::Gamma() ) - { - beta = theResult.Get()->GetSecondary( i )->GetParticle()->Get4Momentum().beta(); + } + + if (resi_pd == nullptr) { + // theNDLDataZ,A has the Z and A of used NDL file + G4double ndlZNew = theNDLDataZ; + G4double ndlANew = theNDLDataA; + if (theProjectile == G4Neutron::Neutron()) { + ndlANew++; } - else - { - beta = 1; + else if (theProjectile == G4Proton::Proton()) { + ndlZNew++; + ndlANew++; } - - if ( theResult.Get()->GetSecondary( i )->GetParticle()->GetDefinition() == resi_pd ) ires = i; - - if ( slow > beta && beta != 0 ) - { - slow = beta; - islow = i; + else if (theProjectile == G4Deuteron::Deuteron()) { + ndlZNew++; + ndlANew += 2; } - - if ( fast <= beta ) - { - if ( fast != 1 ) - { - fast = beta; - ifast = i; - } - else - { - // fast is already photon then check E - G4double e = theResult.Get()->GetSecondary( i )->GetParticle()->Get4Momentum().e(); - if ( e > theResult.Get()->GetSecondary( ifast )->GetParticle()->Get4Momentum().e() ) - { - // among photons, the highest E becomes the fastest - ifast = i; - } - } + else if (theProjectile == G4Triton::Triton()) { + ndlZNew++; + ndlANew += 3; } - } - - G4LorentzVector dif_4p = init_4p_lab - secs_4p_lab; - - G4LorentzVector p4(0); - if ( ires == -1 ) - { - // Create and Add Residual Nucleus - ires = nSecondaries; - nSecondaries += 1; - - G4DynamicParticle* res = new G4DynamicParticle ( resi_pd , dif_4p.v() ); - theResult.Get()->AddSecondary ( res, secID ); - - p4 = res->Get4Momentum(); - if ( slow > p4.beta() ) - { - slow = p4.beta(); - islow = ires; + else if (theProjectile == G4He3::He3()) { + ndlZNew += 2; + ndlANew += 3; } - dif_4p = init_4p_lab - ( secs_4p_lab + p4 ); - } - - if ( needOneMoreSec && oneMoreSec_pd) - // - // fca: this is not a fix, this is a crash avoidance... - // fca: the baryon number is still wrong, most probably because it - // fca: should have been decreased, but since we could not create a particle - // fca: we just do not add it - // - { - nSecondaries += 1; - G4DynamicParticle* one = new G4DynamicParticle ( oneMoreSec_pd , dif_4p.v() ); - theResult.Get()->AddSecondary ( one, secID ); - p4 = one->Get4Momentum(); - if ( slow > p4.beta() ) - { - slow = p4.beta(); - islow = nSecondaries-1; //Because the first is 0th, so the last becomes "nSecondaries-1" + else if (theProjectile == G4Alpha::Alpha()) { + ndlZNew += 2; + ndlANew += 4; } - dif_4p = init_4p_lab - ( secs_4p_lab + p4 ); - } - - // Which is bigger dif_p or dif_e - - if ( dif_4p.v().mag() < std::abs( dif_4p.e() ) ) - { - // Adjust p - if ( minimum_energy < dif_4p.v().mag() && dif_4p.v().mag() < 1*MeV ) - { + // theNDLDataZ,A has the Z and A of used NDL file + if (G4int(ndlZNew - sum_Z) == 0 && G4int(ndlANew - sum_A) == 0) { + auto dif_Z = G4int(theNDLDataZ - theBaseZ); + auto dif_A = G4int(theNDLDataA - theBaseA); + resi_pd = G4IonTable::GetIonTable()->GetIon(max_SecZ - dif_Z, max_SecA - dif_A, 0.0); + if (resi_pd == nullptr) { + G4cerr << "G4ParticleHPFinalState resi_pd Z " << max_SecZ << " - " << dif_Z << " A " + << max_SecA << " - " << dif_A << " projectile " << theProjectile->GetParticleName() + << G4endl; + G4Exception("G4ParticleHPFinalState:adjust_final_state", "Warning", JustWarning, + "No adjustment will be done!"); + return; + } - nSecondaries += 1; - theResult.Get()->AddSecondary ( new G4DynamicParticle ( G4Gamma::Gamma() , dif_4p.v() ), secID ); + for (G4int i = 0; i < nSecondaries; ++i) { + if (theResult.Get()->GetSecondary(i)->GetParticle()->GetDefinition()->GetAtomicNumber() + == max_SecZ + && theResult.Get()->GetSecondary(i)->GetParticle()->GetDefinition()->GetAtomicMass() + == max_SecA) + { + G4ThreeVector p = theResult.Get()->GetSecondary(i)->GetParticle()->GetMomentum(); + p = p * resi_pd->GetPDGMass() + / G4IonTable::GetIonTable()->GetIon(max_SecZ, max_SecA, 0.0)->GetPDGMass(); + theResult.Get()->GetSecondary(i)->GetParticle()->SetDefinition(resi_pd); + theResult.Get()->GetSecondary(i)->GetParticle()->SetMomentum(p); + } + } } - } - else - { - - // dif_p > dif_e - // at first momentum - // Move residual momentum - - p4 = theResult.Get()->GetSecondary( ires )->GetParticle()->Get4Momentum(); - theResult.Get()->GetSecondary( ires )->GetParticle()->SetMomentum( p4.v() + dif_4p.v() ); - dif_4p = init_4p_lab - ( secs_4p_lab - p4 + theResult.Get()->GetSecondary( ires )->GetParticle()->Get4Momentum() ); - } - - G4double dif_e = dif_4p.e() - ( dif_4p.v() ).mag(); - - if ( dif_e > 0 ) - { - - // create 2 gamma - - nSecondaries += 2; - G4double e1 = ( dif_4p.e() -dif_4p.v().mag() ) / 2; - - if ( minimum_energy < e1 ) - { - G4double costh = 2.*G4UniformRand()-1.; - G4double phi = twopi*G4UniformRand(); - G4ThreeVector dir( std::sin(std::acos(costh))*std::cos(phi), - std::sin(std::acos(costh))*std::sin(phi), - costh); - theResult.Get()->AddSecondary ( new G4DynamicParticle ( G4Gamma::Gamma() , e1*dir ), secID ); - theResult.Get()->AddSecondary ( new G4DynamicParticle ( G4Gamma::Gamma() , -e1*dir ), secID ); + } + } + + G4LorentzVector secs_4p_lab(0.0); + + auto n_sec = (G4int)theResult.Get()->GetNumberOfSecondaries(); + G4double fast = 0; + G4double slow = 1; + G4int ifast = 0; + G4int islow = 0; + G4int ires = -1; + + for (G4int i = 0; i < n_sec; ++i) { + secs_4p_lab += theResult.Get()->GetSecondary(i)->GetParticle()->Get4Momentum(); + + G4double beta = 0; + if (theResult.Get()->GetSecondary(i)->GetParticle()->GetDefinition() != G4Gamma::Gamma()) { + beta = theResult.Get()->GetSecondary(i)->GetParticle()->Get4Momentum().beta(); + } + else { + beta = 1; + } + + if (theResult.Get()->GetSecondary(i)->GetParticle()->GetDefinition() == resi_pd) ires = i; + + if (slow > beta && beta != 0) { + slow = beta; + islow = i; + } + + if (fast <= beta) { + if (fast != 1) { + fast = beta; + ifast = i; } - } - else // dif_e < 0 - { - // At first reduce KE of the fastest secondary; - G4double ke0 = theResult.Get()->GetSecondary( ifast )->GetParticle()->GetKineticEnergy(); - G4ThreeVector p0 = theResult.Get()->GetSecondary( ifast )->GetParticle()->GetMomentum(); - G4ThreeVector dir = ( theResult.Get()->GetSecondary( ifast )->GetParticle()->GetMomentum() ).unit(); - - if ( ke0 + dif_e > 0 ) - { - theResult.Get()->GetSecondary( ifast )->GetParticle()->SetKineticEnergy( ke0 + dif_e ); - G4ThreeVector dp = p0 - theResult.Get()->GetSecondary( ifast )->GetParticle()->GetMomentum(); - - G4ThreeVector p = theResult.Get()->GetSecondary( islow )->GetParticle()->GetMomentum(); - //theResult.GetSecondary( islow )->GetParticle()->SetMomentum( p - dif_e*dir ); - theResult.Get()->GetSecondary( islow )->GetParticle()->SetMomentum( p + dp ); + else { + // fast is already photon then check E + G4double e = theResult.Get()->GetSecondary(i)->GetParticle()->Get4Momentum().e(); + if (e > theResult.Get()->GetSecondary(ifast)->GetParticle()->Get4Momentum().e()) { + // among photons, the highest E becomes the fastest + ifast = i; + } } - } + } + } + + G4LorentzVector dif_4p = init_4p_lab - secs_4p_lab; + + G4LorentzVector p4(0); + if (ires == -1) { + // Create and Add Residual Nucleus + ires = nSecondaries; + nSecondaries += 1; + + auto res = new G4DynamicParticle(resi_pd, dif_4p.v()); + theResult.Get()->AddSecondary(res, secID); + + p4 = res->Get4Momentum(); + if (slow > p4.beta()) { + slow = p4.beta(); + islow = ires; + } + dif_4p = init_4p_lab - (secs_4p_lab + p4); + } + + if (needOneMoreSec && (oneMoreSec_pd != nullptr)) + // + // fca: this is not a fix, this is a crash avoidance... + // fca: the baryon number is still wrong, most probably because it + // fca: should have been decreased, but since we could not create a particle + // fca: we just do not add it + // + { + nSecondaries += 1; + auto one = new G4DynamicParticle(oneMoreSec_pd, dif_4p.v()); + theResult.Get()->AddSecondary(one, secID); + p4 = one->Get4Momentum(); + if (slow > p4.beta()) { + slow = p4.beta(); + islow = nSecondaries - 1; // Because the first is 0th, so the last becomes "nSecondaries-1" + } + dif_4p = init_4p_lab - (secs_4p_lab + p4); + } + + // Which is bigger dif_p or dif_e + + if (dif_4p.v().mag() < std::abs(dif_4p.e())) { + // Adjust p + if (minimum_energy < dif_4p.v().mag() && dif_4p.v().mag() < 1 * MeV) { + nSecondaries += 1; + theResult.Get()->AddSecondary(new G4DynamicParticle(G4Gamma::Gamma(), dif_4p.v()), secID); + } + } + else { + // dif_p > dif_e + // at first momentum + // Move residual momentum + + p4 = theResult.Get()->GetSecondary(ires)->GetParticle()->Get4Momentum(); + theResult.Get()->GetSecondary(ires)->GetParticle()->SetMomentum(p4.v() + dif_4p.v()); + dif_4p = + init_4p_lab + - (secs_4p_lab - p4 + theResult.Get()->GetSecondary(ires)->GetParticle()->Get4Momentum()); + } + + G4double dif_e = dif_4p.e() - (dif_4p.v()).mag(); + + if (dif_e > 0) { + // create 2 gamma + + nSecondaries += 2; + G4double e1 = (dif_4p.e() - dif_4p.v().mag()) / 2; + + if (minimum_energy < e1) { + G4double costh = 2. * G4UniformRand() - 1.; + G4double phi = twopi * G4UniformRand(); + G4ThreeVector dir(std::sin(std::acos(costh)) * std::cos(phi), + std::sin(std::acos(costh)) * std::sin(phi), costh); + theResult.Get()->AddSecondary(new G4DynamicParticle(G4Gamma::Gamma(), e1 * dir), secID); + theResult.Get()->AddSecondary(new G4DynamicParticle(G4Gamma::Gamma(), -e1 * dir), secID); + } + } + else // dif_e < 0 + { + // At first reduce KE of the fastest secondary; + G4double ke0 = theResult.Get()->GetSecondary(ifast)->GetParticle()->GetKineticEnergy(); + G4ThreeVector p0 = theResult.Get()->GetSecondary(ifast)->GetParticle()->GetMomentum(); + G4ThreeVector dir = (theResult.Get()->GetSecondary(ifast)->GetParticle()->GetMomentum()).unit(); + + if (ke0 + dif_e > 0) { + theResult.Get()->GetSecondary(ifast)->GetParticle()->SetKineticEnergy(ke0 + dif_e); + G4ThreeVector dp = p0 - theResult.Get()->GetSecondary(ifast)->GetParticle()->GetMomentum(); + + G4ThreeVector p = theResult.Get()->GetSecondary(islow)->GetParticle()->GetMomentum(); + // theResult.GetSecondary( islow )->GetParticle()->SetMomentum( p - dif_e*dir ); + theResult.Get()->GetSecondary(islow)->GetParticle()->SetMomentum(p + dp); + } + } } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFission.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFission.cc index 6c43b2730bd..81a02c7b599 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFission.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFission.cc @@ -33,142 +33,141 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPFission.hh" + #include "G4ParticleHPFissionFS.hh" -#include "G4SystemOfUnits.hh" #include "G4ParticleHPManager.hh" #include "G4ParticleHPThermalBoost.hh" +#include "G4SystemOfUnits.hh" #include "G4Threading.hh" - G4ParticleHPFission::G4ParticleHPFission() - : G4HadronicInteraction("NeutronHPFission"), theFission(nullptr), numEle(0) - { - SetMinEnergy( 0.0 ); - SetMaxEnergy( 20.*MeV ); - } - - G4ParticleHPFission::~G4ParticleHPFission() - { - // Vector is shared, only master deletes it - // delete [] theFission; - if ( ! G4Threading::IsMasterThread() ) { - if ( theFission != nullptr ) { - for ( auto it=theFission->cbegin(); it!=theFission->cend(); ++it ) { - delete *it; - } - theFission->clear(); - } +G4ParticleHPFission::G4ParticleHPFission() : G4HadronicInteraction("NeutronHPFission") +{ + SetMinEnergy(0.0); + SetMaxEnergy(20. * MeV); +} + +G4ParticleHPFission::~G4ParticleHPFission() +{ + // Vector is shared, only master deletes it + // delete [] theFission; + if (!G4Threading::IsMasterThread()) { + if (theFission != nullptr) { + for (auto it = theFission->cbegin(); it != theFission->cend(); ++it) { + delete *it; + } + theFission->clear(); } } - - G4HadFinalState * G4ParticleHPFission::ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& aNucleus ) - { - - G4ParticleHPManager::GetInstance()->OpenReactionWhiteBoard(); - const G4Material * theMaterial = aTrack.GetMaterial(); - G4int n = (G4int)theMaterial->GetNumberOfElements(); - std::size_t index = theMaterial->GetElement(0)->GetIndex(); - if(n!=1) - { - G4double* xSec = new G4double[n]; - G4double sum=0; - G4int i; - const G4double * NumAtomsPerVolume = theMaterial->GetVecNbOfAtomsPerVolume(); - G4double rWeight; - G4ParticleHPThermalBoost aThermalE; - for (i=0; iGetElement(i)->GetIndex(); - rWeight = NumAtomsPerVolume[i]; - xSec[i] = ((*theFission)[index]) - ->GetXsec(aThermalE.GetThermalEnergy(aTrack, - theMaterial->GetElement(i), - theMaterial->GetTemperature())); - xSec[i] *= rWeight; - sum+=xSec[i]; - } - G4double random = G4UniformRand(); - G4double running = 0; - for (i=0; iGetElement(i)->GetIndex(); - //if(random<=running/sum) break; - if( sum == 0 || random <= running/sum ) break; - } - delete [] xSec; +} + +G4HadFinalState* G4ParticleHPFission::ApplyYourself(const G4HadProjectile& aTrack, + G4Nucleus& aNucleus) +{ + G4ParticleHPManager::GetInstance()->OpenReactionWhiteBoard(); + const G4Material* theMaterial = aTrack.GetMaterial(); + auto n = (G4int)theMaterial->GetNumberOfElements(); + std::size_t index = theMaterial->GetElement(0)->GetIndex(); + if (n != 1) { + auto xSec = new G4double[n]; + G4double sum = 0; + G4int i; + const G4double* NumAtomsPerVolume = theMaterial->GetVecNbOfAtomsPerVolume(); + G4double rWeight; + G4ParticleHPThermalBoost aThermalE; + for (i = 0; i < n; ++i) { + index = theMaterial->GetElement(i)->GetIndex(); + rWeight = NumAtomsPerVolume[i]; + xSec[i] = ((*theFission)[index]) + ->GetXsec(aThermalE.GetThermalEnergy(aTrack, theMaterial->GetElement(i), + theMaterial->GetTemperature())); + xSec[i] *= rWeight; + sum += xSec[i]; } - //return theFission[index].ApplyYourself(aTrack); //-2:Marker for Fission - G4HadFinalState* result = ((*theFission)[index])->ApplyYourself(aTrack,-2); - - //Overwrite target parameters - aNucleus.SetParameters(G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA(),G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargZ()); - const G4Element* target_element = (*G4Element::GetElementTable())[index]; - const G4Isotope* target_isotope=NULL; - G4int iele = (G4int)target_element->GetNumberOfIsotopes(); - for ( G4int j = 0 ; j != iele ; ++j ) { - target_isotope=target_element->GetIsotope( j ); - if ( target_isotope->GetN() == G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA() ) break; + G4double random = G4UniformRand(); + G4double running = 0; + for (i = 0; i < n; ++i) { + running += xSec[i]; + index = theMaterial->GetElement(i)->GetIndex(); + // if(random<=running/sum) break; + if (sum == 0 || random <= running / sum) break; } - aNucleus.SetIsotope( target_isotope ); - - G4ParticleHPManager::GetInstance()->CloseReactionWhiteBoard(); - return result; + delete[] xSec; } + // return theFission[index].ApplyYourself(aTrack); //-2:Marker for Fission + G4HadFinalState* result = ((*theFission)[index])->ApplyYourself(aTrack, -2); + + // Overwrite target parameters + aNucleus.SetParameters(G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA(), + G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargZ()); + const G4Element* target_element = (*G4Element::GetElementTable())[index]; + const G4Isotope* target_isotope = nullptr; + auto iele = (G4int)target_element->GetNumberOfIsotopes(); + for (G4int j = 0; j != iele; ++j) { + target_isotope = target_element->GetIsotope(j); + if (target_isotope->GetN() + == G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA()) + break; + } + aNucleus.SetIsotope(target_isotope); + + G4ParticleHPManager::GetInstance()->CloseReactionWhiteBoard(); + return result; +} const std::pair G4ParticleHPFission::GetFatalEnergyCheckLevels() const { - // max energy non-conservation is mass of heavy nucleus - return std::pair(10.0*perCent, 350.0*CLHEP::GeV); + // max energy non-conservation is mass of heavy nucleus + return std::pair(10.0 * perCent, 350.0 * CLHEP::GeV); } G4int G4ParticleHPFission::GetVerboseLevel() const { - return G4ParticleHPManager::GetInstance()->GetVerboseLevel(); + return G4ParticleHPManager::GetInstance()->GetVerboseLevel(); } -void G4ParticleHPFission::SetVerboseLevel( G4int newValue ) +void G4ParticleHPFission::SetVerboseLevel(G4int newValue) { - G4ParticleHPManager::GetInstance()->SetVerboseLevel(newValue); + G4ParticleHPManager::GetInstance()->SetVerboseLevel(newValue); } void G4ParticleHPFission::BuildPhysicsTable(const G4ParticleDefinition&) { + G4ParticleHPManager* hpmanager = G4ParticleHPManager::GetInstance(); - G4ParticleHPManager* hpmanager = G4ParticleHPManager::GetInstance(); + theFission = hpmanager->GetFissionFinalStates(); - theFission = hpmanager->GetFissionFinalStates(); + if (G4Threading::IsMasterThread()) { + if (theFission == nullptr) theFission = new std::vector; - if ( G4Threading::IsMasterThread() ) { + if (numEle == (G4int)G4Element::GetNumberOfElements()) return; - if ( theFission == nullptr ) theFission = new std::vector; - - if ( numEle == (G4int)G4Element::GetNumberOfElements() ) return; - - if ( theFission->size() == G4Element::GetNumberOfElements() ) { - numEle = (G4int)G4Element::GetNumberOfElements(); - return; - } + if (theFission->size() == G4Element::GetNumberOfElements()) { + numEle = (G4int)G4Element::GetNumberOfElements(); + return; + } - if ( !G4FindDataDir("G4NEUTRONHPDATA") ) - throw G4HadronicException(__FILE__, __LINE__, "Please setenv G4NEUTRONHPDATA to point to the neutron cross-section files."); - dirName = G4FindDataDir("G4NEUTRONHPDATA"); - G4String tString = "/Fission"; - dirName = dirName + tString; - - for ( G4int i = numEle ; i < (G4int)G4Element::GetNumberOfElements() ; ++i ) { - theFission->push_back( new G4ParticleHPChannel ); - if ((*(G4Element::GetElementTable()))[i]->GetZ()>87) { //TK modified for ENDF-VII - ((*theFission)[i])->Init((*(G4Element::GetElementTable()))[i], dirName); - ((*theFission)[i])->Register( new G4ParticleHPFissionFS ); - } + if (G4FindDataDir("G4NEUTRONHPDATA") == nullptr) + throw G4HadronicException( + __FILE__, __LINE__, + "Please setenv G4NEUTRONHPDATA to point to the neutron cross-section files."); + dirName = G4FindDataDir("G4NEUTRONHPDATA"); + G4String tString = "/Fission"; + dirName = dirName + tString; + + for (G4int i = numEle; i < (G4int)G4Element::GetNumberOfElements(); ++i) { + theFission->push_back(new G4ParticleHPChannel); + if ((*(G4Element::GetElementTable()))[i]->GetZ() > 87) { // TK modified for ENDF-VII + ((*theFission)[i])->Init((*(G4Element::GetElementTable()))[i], dirName); + ((*theFission)[i])->Register(new G4ParticleHPFissionFS); } - hpmanager->RegisterFissionFinalStates( theFission ); - } - numEle = (G4int)G4Element::GetNumberOfElements(); + } + hpmanager->RegisterFissionFinalStates(theFission); + } + numEle = (G4int)G4Element::GetNumberOfElements(); } void G4ParticleHPFission::ModelDescription(std::ostream& outFile) const { - outFile << "High Precision model based on Evaluated Nuclear Data Files (ENDF)\n" - << "for induced fission reaction of neutrons below 20MeV\n"; + outFile << "High Precision model based on Evaluated Nuclear Data Files (ENDF)\n" + << "for induced fission reaction of neutrons below 20MeV\n"; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFissionBaseFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFissionBaseFS.cc index 726e60d832d..b3d46cd8d96 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFissionBaseFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFissionBaseFS.cc @@ -30,111 +30,110 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPFissionBaseFS.hh" -#include "G4ParticleHPManager.hh" -#include "G4SystemOfUnits.hh" -#include "G4ReactionProduct.hh" -#include "G4Nucleus.hh" -#include "G4Proton.hh" -#include "G4Deuteron.hh" -#include "G4Triton.hh" + #include "G4Alpha.hh" -#include "G4ThreeVector.hh" +#include "G4Deuteron.hh" #include "G4LorentzVector.hh" +#include "G4Nucleus.hh" #include "G4ParticleHPDataUsed.hh" +#include "G4ParticleHPManager.hh" +#include "G4Proton.hh" +#include "G4ReactionProduct.hh" +#include "G4SystemOfUnits.hh" +#include "G4ThreeVector.hh" +#include "G4Triton.hh" - void G4ParticleHPFissionBaseFS::Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & bit, G4ParticleDefinition*) +void G4ParticleHPFissionBaseFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& bit, G4ParticleDefinition*) +{ + G4String tString = dirName; + G4bool dbool; + G4ParticleHPDataUsed aFile = + theNames.GetName(static_cast(A), static_cast(Z), M, tString, bit, dbool); + G4String filename = aFile.GetName(); + SetAZMs(A, Z, M, aFile); + // theBaseA = aFile.GetA(); + // theBaseZ = aFile.GetZ(); + // if(!dbool || ( Z<2.5 && ( std::abs(theBaseZ - Z)>0.0001 || std::abs(theBaseA - A)>0.0001) ) ) + if (!dbool + || (Z < 2.5 && (std::abs(theNDLDataZ - Z) > 0.0001 || std::abs(theNDLDataA - A) > 0.0001))) { - G4String tString = dirName; - G4bool dbool; - G4ParticleHPDataUsed aFile = theNames.GetName(static_cast(A), static_cast(Z), M, tString, bit, dbool); - G4String filename = aFile.GetName(); - SetAZMs( A, Z, M, aFile ); - //theBaseA = aFile.GetA(); - //theBaseZ = aFile.GetZ(); - //if(!dbool || ( Z<2.5 && ( std::abs(theBaseZ - Z)>0.0001 || std::abs(theBaseA - A)>0.0001) ) ) - if ( !dbool || ( Z<2.5 && ( std::abs(theNDLDataZ - Z)>0.0001 || std::abs(theNDLDataA - A)>0.0001)) ) - { - hasAnyData = false; - hasFSData = false; - hasXsec = false; - return; // no data for exactly this isotope. - } + hasAnyData = false; + hasFSData = false; + hasXsec = false; + return; // no data for exactly this isotope. + } + + // std::ifstream theData(filename, std::ios::in); + std::istringstream theData(std::ios::in); + G4ParticleHPManager::GetInstance()->GetDataStream(filename, theData); + G4int dummy; + if (!(theData)) { + // theData.close(); + hasFSData = false; + hasXsec = false; + hasAnyData = false; + return; // no data for this FS for this isotope + } + theData >> dummy >> dummy; + G4int total; + theData >> total; + theXsection->Init(theData, total, eV); + if (!(theData >> dummy)) { + hasFSData = false; + // theData.close(); + return; + } + theData >> dummy; - //std::ifstream theData(filename, std::ios::in); - std::istringstream theData(std::ios::in); - G4ParticleHPManager::GetInstance()->GetDataStream(filename,theData); - G4int dummy; - if(!(theData)) - { - //theData.close(); - hasFSData = false; - hasXsec = false; - hasAnyData = false; - return; // no data for this FS for this isotope - } - theData >> dummy>>dummy; - G4int total; - theData >> total; - theXsection->Init(theData, total, eV); - if (!(theData >> dummy)) - { - hasFSData = false; - //theData.close(); - return; - } - theData >> dummy; + theAngularDistribution.Init(theData); - theAngularDistribution.Init(theData); + theData >> dummy >> dummy; - theData >> dummy >> dummy; + theEnergyDistribution.Init(theData); + // theData.close(); +} - theEnergyDistribution.Init(theData); - //theData.close(); - +G4DynamicParticleVector* G4ParticleHPFissionBaseFS::ApplyYourself(G4int nPrompt) +{ + // if therere were no data for this isotope, break out. + if (!HasFSData()) { + return nullptr; } - -G4DynamicParticleVector * G4ParticleHPFissionBaseFS::ApplyYourself(G4int nPrompt) - { -// if therere were no data for this isotope, break out. - if(!HasFSData()) { return 0; } - - G4int i; - G4DynamicParticleVector * aResult = new G4DynamicParticleVector; - G4ReactionProduct boosted; - boosted.Lorentz( *(fCache.Get().theNeutronRP) , *(fCache.Get().theTarget) ); - G4double eKinetic = boosted.GetKineticEnergy(); - -// Build neutrons - G4ReactionProduct * theNeutrons = new G4ReactionProduct[nPrompt]; - for(i=0; iSetDefinition(theNeutrons[i].GetDefinition()); - it->SetMomentum(theNeutrons[i].GetMomentum()); - aResult->push_back(it); - } - delete [] theNeutrons; + G4int i; + auto aResult = new G4DynamicParticleVector; + G4ReactionProduct boosted; + boosted.Lorentz(*(fCache.Get().theNeutronRP), *(fCache.Get().theTarget)); + G4double eKinetic = boosted.GetKineticEnergy(); -// return the result - return aResult; + // Build neutrons + auto theNeutrons = new G4ReactionProduct[nPrompt]; + for (i = 0; i < nPrompt; i++) { + theNeutrons[i].SetDefinition(G4Neutron::Neutron()); } + + // sample energies + G4int dummy; + for (i = 0; i < nPrompt; i++) { + // always in the lab system (if file-5) + theNeutrons[i].SetKineticEnergy(theEnergyDistribution.Sample(eKinetic, dummy)); + } + + // sample neutron angular distribution + for (i = 0; i < nPrompt; i++) { + theAngularDistribution.SampleAndUpdate(theNeutrons[i]); + } + + // already in lab. Add neutrons to dynamic particle vector + for (i = 0; i < nPrompt; i++) { + auto it = new G4DynamicParticle; + it->SetDefinition(theNeutrons[i].GetDefinition()); + it->SetMomentum(theNeutrons[i].GetMomentum()); + aResult->push_back(it); + } + delete[] theNeutrons; + + // return the result + return aResult; +} diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFissionData.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFissionData.cc index 5187341f03a..7ab15ef32da 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFissionData.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFissionData.cc @@ -35,185 +35,176 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPFissionData.hh" -#include "G4ParticleHPManager.hh" -#include "G4PhysicalConstants.hh" -#include "G4SystemOfUnits.hh" -#include "G4Neutron.hh" + #include "G4ElementTable.hh" -#include "G4ParticleHPData.hh" -#include "G4ParticleHPManager.hh" #include "G4HadronicParameters.hh" +#include "G4Neutron.hh" #include "G4NucleiProperties.hh" +#include "G4ParticleHPData.hh" +#include "G4ParticleHPManager.hh" +#include "G4PhysicalConstants.hh" #include "G4Pow.hh" +#include "G4SystemOfUnits.hh" -G4ParticleHPFissionData::G4ParticleHPFissionData() -:G4VCrossSectionDataSet("NeutronHPFissionXS") +G4ParticleHPFissionData::G4ParticleHPFissionData() : G4VCrossSectionDataSet("NeutronHPFissionXS") { - SetMinKinEnergy( 0*MeV ); - SetMaxKinEnergy( 20*MeV ); - - theCrossSections = 0; - instanceOfWorker = false; - if ( G4Threading::IsWorkerThread() ) { - instanceOfWorker = true; - } - element_cache = nullptr; - material_cache = nullptr; - ke_cache = 0.0; - xs_cache = 0.0; - //BuildPhysicsTable(*G4Neutron::Neutron()); + SetMinKinEnergy(0 * MeV); + SetMaxKinEnergy(20 * MeV); + + theCrossSections = nullptr; + instanceOfWorker = false; + if (G4Threading::IsWorkerThread()) { + instanceOfWorker = true; + } + element_cache = nullptr; + material_cache = nullptr; + ke_cache = 0.0; + xs_cache = 0.0; + // BuildPhysicsTable(*G4Neutron::Neutron()); } - + G4ParticleHPFissionData::~G4ParticleHPFissionData() { - if ( theCrossSections != nullptr && instanceOfWorker != true ) { - theCrossSections->clearAndDestroy(); - delete theCrossSections; - theCrossSections = nullptr; - } + if (theCrossSections != nullptr && !instanceOfWorker) { + theCrossSections->clearAndDestroy(); + delete theCrossSections; + theCrossSections = nullptr; + } } -G4bool G4ParticleHPFissionData::IsIsoApplicable( const G4DynamicParticle* dp , - G4int /*Z*/ , G4int /*A*/ , - const G4Element* /*elm*/ , - const G4Material* /*mat*/ ) +G4bool G4ParticleHPFissionData::IsIsoApplicable(const G4DynamicParticle* dp, G4int /*Z*/, + G4int /*A*/, const G4Element* /*elm*/, + const G4Material* /*mat*/) { - G4double eKin = dp->GetKineticEnergy(); - if ( eKin > GetMaxKinEnergy() - || eKin < GetMinKinEnergy() - || dp->GetDefinition() != G4Neutron::Neutron() ) return false; - - return true; + G4double eKin = dp->GetKineticEnergy(); + return eKin <= GetMaxKinEnergy() && eKin >= GetMinKinEnergy() + && dp->GetDefinition() == G4Neutron::Neutron(); } -G4double G4ParticleHPFissionData::GetIsoCrossSection( const G4DynamicParticle* dp , - G4int /*Z*/ , G4int /*A*/ , - const G4Isotope* /*iso*/ , - const G4Element* element , - const G4Material* material ) +G4double G4ParticleHPFissionData::GetIsoCrossSection(const G4DynamicParticle* dp, G4int /*Z*/, + G4int /*A*/, const G4Isotope* /*iso*/, + const G4Element* element, + const G4Material* material) { - if ( dp->GetKineticEnergy() == ke_cache && element == element_cache && material == material_cache ) return xs_cache; - - ke_cache = dp->GetKineticEnergy(); - element_cache = element; - material_cache = material; - G4double xs = GetCrossSection( dp , element , material->GetTemperature() ); - xs_cache = xs; - return xs; + if (dp->GetKineticEnergy() == ke_cache && element == element_cache && material == material_cache) + return xs_cache; + + ke_cache = dp->GetKineticEnergy(); + element_cache = element; + material_cache = material; + G4double xs = GetCrossSection(dp, element, material->GetTemperature()); + xs_cache = xs; + return xs; } void G4ParticleHPFissionData::BuildPhysicsTable(const G4ParticleDefinition& aP) { - if(&aP!=G4Neutron::Neutron()) - throw G4HadronicException(__FILE__, __LINE__, "Attempt to use NeutronHP data for particles other than neutrons!!!"); + if (&aP != G4Neutron::Neutron()) + throw G4HadronicException(__FILE__, __LINE__, + "Attempt to use NeutronHP data for particles other than neutrons!!!"); - if ( G4Threading::IsWorkerThread() ) { - theCrossSections = G4ParticleHPManager::GetInstance()->GetFissionCrossSections(); - return; - } + if (G4Threading::IsWorkerThread()) { + theCrossSections = G4ParticleHPManager::GetInstance()->GetFissionCrossSections(); + return; + } std::size_t numberOfElements = G4Element::GetNumberOfElements(); - if ( theCrossSections == nullptr ) - theCrossSections = new G4PhysicsTable( numberOfElements ); + if (theCrossSections == nullptr) + theCrossSections = new G4PhysicsTable(numberOfElements); else - theCrossSections->clearAndDestroy(); + theCrossSections->clearAndDestroy(); // make a PhysicsVector for each element - static G4ThreadLocal G4ElementTable *theElementTable = nullptr ; - if (!theElementTable) theElementTable= G4Element::GetElementTable(); - for( std::size_t i=0; iMakePhysicsVector((*theElementTable)[i], this); + static G4ThreadLocal G4ElementTable* theElementTable = nullptr; + if (theElementTable == nullptr) theElementTable = G4Element::GetElementTable(); + for (std::size_t i = 0; i < numberOfElements; ++i) { + G4PhysicsVector* physVec = G4ParticleHPData::Instance(G4Neutron::Neutron()) + ->MakePhysicsVector((*theElementTable)[i], this); theCrossSections->push_back(physVec); } - G4ParticleHPManager::GetInstance()->RegisterFissionCrossSections( theCrossSections ); + G4ParticleHPManager::GetInstance()->RegisterFissionCrossSections(theCrossSections); } void G4ParticleHPFissionData::DumpPhysicsTable(const G4ParticleDefinition& aP) { - if(&aP!=G4Neutron::Neutron()) - throw G4HadronicException(__FILE__, __LINE__, "Attempt to use NeutronHP data for particles other than neutrons!!!"); - + if (&aP != G4Neutron::Neutron()) + throw G4HadronicException(__FILE__, __LINE__, + "Attempt to use NeutronHP data for particles other than neutrons!!!"); + #ifdef G4VERBOSE - if ( G4HadronicParameters::Instance()->GetVerboseLevel() == 0 ) return; - + if (G4HadronicParameters::Instance()->GetVerboseLevel() == 0) return; + // // Dump element based cross section // range 10e-5 eV to 20 MeV // 10 point per decade // in barn // - G4cout << G4endl; - G4cout << G4endl; - G4cout << "Fission Cross Section of Neutron HP"<< G4endl; - G4cout << "(Pointwise cross-section at 0 Kelvin.)" << G4endl; - G4cout << G4endl; - G4cout << "Name of Element" << G4endl; - G4cout << "Energy[eV] XS[barn]" << G4endl; - G4cout << G4endl; - - std::size_t numberOfElements = G4Element::GetNumberOfElements(); - static G4ThreadLocal G4ElementTable *theElementTable = nullptr ; - if (!theElementTable) theElementTable= G4Element::GetElementTable(); - - for ( std::size_t i = 0 ; i < numberOfElements ; ++i ) - { - G4cout << (*theElementTable)[i]->GetName() << G4endl; - - if ( (*((*theCrossSections)(i))).GetVectorLength() == 0 ) - { - G4cout << "The cross-section data of the fission of this element is not available." << G4endl; - G4cout << G4endl; - continue; - } + G4cout << G4endl; + G4cout << G4endl; + G4cout << "Fission Cross Section of Neutron HP" << G4endl; + G4cout << "(Pointwise cross-section at 0 Kelvin.)" << G4endl; + G4cout << G4endl; + G4cout << "Name of Element" << G4endl; + G4cout << "Energy[eV] XS[barn]" << G4endl; + G4cout << G4endl; - for ( G4int ie = 0 ; ie < 130 ; ++ie ) - { - G4double eKinetic = 1.0e-5 * G4Pow::GetInstance()->powA ( 10.0 , ie/10.0 ) *eV; - G4bool outOfRange = false; + std::size_t numberOfElements = G4Element::GetNumberOfElements(); + static G4ThreadLocal G4ElementTable* theElementTable = nullptr; + if (theElementTable == nullptr) theElementTable = G4Element::GetElementTable(); - if ( eKinetic < 20*MeV ) - { - G4cout << eKinetic/eV << " " << (*((*theCrossSections)(i))).GetValue(eKinetic, outOfRange)/barn << G4endl; - } - } + for (std::size_t i = 0; i < numberOfElements; ++i) { + G4cout << (*theElementTable)[i]->GetName() << G4endl; + if ((*((*theCrossSections)(i))).GetVectorLength() == 0) { + G4cout << "The cross-section data of the fission of this element is not available." << G4endl; G4cout << G4endl; - } + continue; + } + + for (G4int ie = 0; ie < 130; ++ie) { + G4double eKinetic = 1.0e-5 * G4Pow::GetInstance()->powA(10.0, ie / 10.0) * eV; + G4bool outOfRange = false; + + if (eKinetic < 20 * MeV) { + G4cout << eKinetic / eV << " " + << (*((*theCrossSections)(i))).GetValue(eKinetic, outOfRange) / barn << G4endl; + } + } + + G4cout << G4endl; + } #endif } -G4double G4ParticleHPFissionData:: -GetCrossSection(const G4DynamicParticle* aP, const G4Element*anE, G4double aT) +G4double G4ParticleHPFissionData::GetCrossSection(const G4DynamicParticle* aP, const G4Element* anE, + G4double aT) { G4double result = 0; - if(anE->GetZ()<88) return result; + if (anE->GetZ() < 88) return result; G4bool outOfRange; - G4int index = (G4int)anE->GetIndex(); + auto index = (G4int)anE->GetIndex(); - if ( ( ( *theCrossSections )( index ) )->GetVectorLength() == 0 ) - return result; + if (((*theCrossSections)(index))->GetVectorLength() == 0) return result; // prepare neutron G4double eKinetic = aP->GetKineticEnergy(); - G4ReactionProduct theNeutronRP( aP->GetDefinition() ); - theNeutronRP.SetMomentum( aP->GetMomentum() ); - theNeutronRP.SetKineticEnergy( eKinetic ); + G4ReactionProduct theNeutronRP(aP->GetDefinition()); + theNeutronRP.SetMomentum(aP->GetMomentum()); + theNeutronRP.SetKineticEnergy(eKinetic); - if ( G4ParticleHPManager::GetInstance()->GetNeglectDoppler() ) - { - //NEGLECT_DOPPLER - G4double factor = 1.0; - if ( eKinetic < aT * k_Boltzmann ) { - // below 0.1 eV neutrons - // Have to do some, but now just igonre. - // Will take care after performance check. - // factor = factor * targetV; - } - return ( (*((*theCrossSections)(index))).GetValue(eKinetic, outOfRange) )* factor; + if (G4ParticleHPManager::GetInstance()->GetNeglectDoppler()) { + // NEGLECT_DOPPLER + G4double factor = 1.0; + if (eKinetic < aT * k_Boltzmann) { + // below 0.1 eV neutrons + // Have to do some, but now just igonre. + // Will take care after performance check. + // factor = factor * targetV; + } + return ((*((*theCrossSections)(index))).GetValue(eKinetic, outOfRange)) * factor; } // prepare thermal nucleus @@ -221,33 +212,37 @@ GetCrossSection(const G4DynamicParticle* aP, const G4Element*anE, G4double aT) G4double eps = 0.0001; G4double theA = anE->GetN(); G4double theZ = anE->GetZ(); - G4double eleMass; - eleMass = ( G4NucleiProperties::GetNuclearMass( static_cast(theA+eps) , static_cast(theZ+eps) ) - ) / G4Neutron::Neutron()->GetPDGMass(); - + G4double eleMass; + eleMass = (G4NucleiProperties::GetNuclearMass(static_cast(theA + eps), + static_cast(theZ + eps))) + / G4Neutron::Neutron()->GetPDGMass(); + G4ReactionProduct boosted; G4double aXsection; - + // MC integration loop G4int counter = 0; G4double buffer = 0; - G4int size = G4int(std::max(10., aT/60*kelvin)); - G4ThreeVector neutronVelocity = 1./G4Neutron::Neutron()->GetPDGMass()*theNeutronRP.GetMomentum(); + G4int size = G4int(std::max(10., aT / 60 * kelvin)); + G4ThreeVector neutronVelocity = + 1. / G4Neutron::Neutron()->GetPDGMass() * theNeutronRP.GetMomentum(); G4double neutronVMag = neutronVelocity.mag(); - while(counter == 0 || std::abs(buffer-result/std::max(1,counter)) > 0.01*buffer) // Loop checking, 11.05.2015, T. Koi + while (counter == 0 + || std::abs(buffer - result / std::max(1, counter)) + > 0.01 * buffer) // Loop checking, 11.05.2015, T. Koi { - if(counter) buffer = result/counter; - while (counterGetVerboseLevel(); + return G4ParticleHPManager::GetInstance()->GetVerboseLevel(); } -void G4ParticleHPFissionData::SetVerboseLevel( G4int newValue ) +void G4ParticleHPFissionData::SetVerboseLevel(G4int newValue) { - G4ParticleHPManager::GetInstance()->SetVerboseLevel(newValue); + G4ParticleHPManager::GetInstance()->SetVerboseLevel(newValue); } void G4ParticleHPFissionData::CrossSectionDescription(std::ostream& outFile) const { - outFile << "High Precision cross data based on Evaluated Nuclear Data Files (ENDF)\n" - << "for induced fission reaction of neutrons below 20MeV\n" ; + outFile << "High Precision cross data based on Evaluated Nuclear Data Files (ENDF)\n" + << "for induced fission reaction of neutrons below 20MeV\n"; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFissionFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFissionFS.cc index e7cdf50f196..d9cdef5a818 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFissionFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPFissionFS.cc @@ -32,261 +32,252 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // -#include "G4Exp.hh" #include "G4ParticleHPFissionFS.hh" -#include "G4PhysicalConstants.hh" -#include "G4Nucleus.hh" + #include "G4DynamicParticleVector.hh" -#include "G4ParticleHPFissionERelease.hh" +#include "G4Exp.hh" #include "G4IonTable.hh" +#include "G4Nucleus.hh" +#include "G4ParticleHPFissionERelease.hh" +#include "G4PhysicalConstants.hh" #include "G4PhysicsModelCatalog.hh" +G4ParticleHPFissionFS::G4ParticleHPFissionFS() +{ + secID = G4PhysicsModelCatalog::GetModelID("model_NeutronHPFission"); + hasXsec = false; + produceFissionFragments = false; +} - G4ParticleHPFissionFS::G4ParticleHPFissionFS() - { - secID = G4PhysicsModelCatalog::GetModelID( "model_NeutronHPFission" ); - hasXsec = false; - produceFissionFragments = false; - } +void G4ParticleHPFissionFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) +{ + theFS.Init(A, Z, M, dirName, aFSType, projectile); + theFC.Init(A, Z, M, dirName, aFSType, projectile); + theSC.Init(A, Z, M, dirName, aFSType, projectile); + theTC.Init(A, Z, M, dirName, aFSType, projectile); + theLC.Init(A, Z, M, dirName, aFSType, projectile); - void G4ParticleHPFissionFS::Init (G4double A, G4double Z, G4int M, - G4String& dirName, G4String& aFSType, - G4ParticleDefinition* projectile ) - { - theFS.Init(A, Z, M, dirName, aFSType, projectile); - theFC.Init(A, Z, M, dirName, aFSType, projectile); - theSC.Init(A, Z, M, dirName, aFSType, projectile); - theTC.Init(A, Z, M, dirName, aFSType, projectile); - theLC.Init(A, Z, M, dirName, aFSType, projectile); + theFF.Init(A, Z, M, dirName, aFSType, projectile); + if (G4ParticleHPManager::GetInstance()->GetProduceFissionFragments() && theFF.HasFSData()) { + G4cout << "Fission fragment production is now activated in HP package for " + << "Z = " << (G4int)Z << ", A = " << (G4int)A << G4endl; + G4cout << "As currently modeled this option precludes production of delayed neutrons from " + "fission fragments." + << G4endl; + produceFissionFragments = true; + } +} - theFF.Init(A, Z, M, dirName, aFSType, projectile); - if ( G4ParticleHPManager::GetInstance()->GetProduceFissionFragments() - && theFF.HasFSData() ) - { - G4cout << "Fission fragment production is now activated in HP package for " - << "Z = " << (G4int)Z - << ", A = " << (G4int)A - << G4endl; - G4cout << "As currently modeled this option precludes production of delayed neutrons from fission fragments." << G4endl; - produceFissionFragments = true; - } - } - - G4HadFinalState * G4ParticleHPFissionFS::ApplyYourself(const G4HadProjectile & theTrack) - { - // Because it may change by UI command - produceFissionFragments=G4ParticleHPManager::GetInstance()->GetProduceFissionFragments(); +G4HadFinalState* G4ParticleHPFissionFS::ApplyYourself(const G4HadProjectile& theTrack) +{ + // Because it may change by UI command + produceFissionFragments = G4ParticleHPManager::GetInstance()->GetProduceFissionFragments(); - // prepare neutron - if ( theResult.Get() == NULL ) theResult.Put( new G4HadFinalState ); - theResult.Get()->Clear(); - G4double eKinetic = theTrack.GetKineticEnergy(); - const G4HadProjectile *incidentParticle = &theTrack; - G4ReactionProduct theNeutron( const_cast(incidentParticle->GetDefinition()) ); - theNeutron.SetMomentum( incidentParticle->Get4Momentum().vect() ); - theNeutron.SetKineticEnergy( eKinetic ); + // prepare neutron + if (theResult.Get() == nullptr) theResult.Put(new G4HadFinalState); + theResult.Get()->Clear(); + G4double eKinetic = theTrack.GetKineticEnergy(); + const G4HadProjectile* incidentParticle = &theTrack; + G4ReactionProduct theNeutron( + const_cast(incidentParticle->GetDefinition())); + theNeutron.SetMomentum(incidentParticle->Get4Momentum().vect()); + theNeutron.SetKineticEnergy(eKinetic); - // prepare target - G4Nucleus aNucleus; - G4ReactionProduct theTarget; - G4double targetMass = theFS.GetMass(); - G4ThreeVector neuVelo = (1./incidentParticle->GetDefinition()->GetPDGMass())*theNeutron.GetMomentum(); - theTarget = aNucleus.GetBiasedThermalNucleus( targetMass, neuVelo, theTrack.GetMaterial()->GetTemperature()); - theTarget.SetDefinition( G4IonTable::GetIonTable()->GetIon( G4int(theBaseZ), G4int(theBaseA) , 0.0 ) ); //TESTPHP + // prepare target + G4Nucleus aNucleus; + G4ReactionProduct theTarget; + G4double targetMass = theFS.GetMass(); + G4ThreeVector neuVelo = + (1. / incidentParticle->GetDefinition()->GetPDGMass()) * theNeutron.GetMomentum(); + theTarget = + aNucleus.GetBiasedThermalNucleus(targetMass, neuVelo, theTrack.GetMaterial()->GetTemperature()); + theTarget.SetDefinition( + G4IonTable::GetIonTable()->GetIon(G4int(theBaseZ), G4int(theBaseA), 0.0)); // TESTPHP - // set neutron and target in the FS classes - theFS.SetNeutronRP(theNeutron); - theFS.SetTarget(theTarget); - theFC.SetNeutronRP(theNeutron); - theFC.SetTarget(theTarget); - theSC.SetNeutronRP(theNeutron); - theSC.SetTarget(theTarget); - theTC.SetNeutronRP(theNeutron); - theTC.SetTarget(theTarget); - theLC.SetNeutronRP(theNeutron); - theLC.SetTarget(theTarget); - theFF.SetNeutronRP(theNeutron); - theFF.SetTarget(theTarget); + // set neutron and target in the FS classes + theFS.SetNeutronRP(theNeutron); + theFS.SetTarget(theTarget); + theFC.SetNeutronRP(theNeutron); + theFC.SetTarget(theTarget); + theSC.SetNeutronRP(theNeutron); + theSC.SetTarget(theTarget); + theTC.SetNeutronRP(theNeutron); + theTC.SetTarget(theTarget); + theLC.SetNeutronRP(theNeutron); + theLC.SetTarget(theTarget); + theFF.SetNeutronRP(theNeutron); + theFF.SetTarget(theTarget); - // boost to target rest system and decide on channel. - theNeutron.Lorentz(theNeutron, -1*theTarget); + // boost to target rest system and decide on channel. + theNeutron.Lorentz(theNeutron, -1 * theTarget); - // dice the photons + // dice the photons - G4DynamicParticleVector * thePhotons; - thePhotons = theFS.GetPhotons(); + G4DynamicParticleVector* thePhotons; + thePhotons = theFS.GetPhotons(); - // select the FS in charge + // select the FS in charge - eKinetic = theNeutron.GetKineticEnergy(); - G4double xSec[4]; - xSec[0] = theFC.GetXsec(eKinetic); - xSec[1] = xSec[0]+theSC.GetXsec(eKinetic); - xSec[2] = xSec[1]+theTC.GetXsec(eKinetic); - xSec[3] = xSec[2]+theLC.GetXsec(eKinetic); - G4int it; - unsigned int i=0; - G4double random = G4UniformRand(); - if(xSec[3]==0) - { - it=-1; - } - else - { - for(i=0; i<4; i++) - { - it =i; - if(randomsize(); ++i) - { - theResult.Get()->AddSecondary(theNeutrons->operator[](i), secID); - } - delete theNeutrons; + if (theNeutrons != nullptr) { + theDecayConstants = new G4double[delayed]; + for (i = 0; i < theNeutrons->size(); ++i) { + theResult.Get()->AddSecondary(theNeutrons->operator[](i), secID); + } + delete theNeutrons; - G4DynamicParticleVector * theDelayed = 0; - theDelayed = theFS.ApplyYourself(0, delayed, theDecayConstants); - for(i=0; isize(); i++) - { - G4double time = -G4Log(G4UniformRand())/theDecayConstants[i]; - time += theTrack.GetGlobalTime(); - theResult.Get()->AddSecondary(theDelayed->operator[](i), secID); - theResult.Get()->GetSecondary(theResult.Get()->GetNumberOfSecondaries()-1)->SetTime(time); - } - delete theDelayed; - } - else - { - theFS.SampleNeutronMult(all, Prompt, delayed, eKinetic, 0); - theDecayConstants = new G4double[delayed]; - if(Prompt==0&&delayed==0) Prompt=all; - theNeutrons = theFS.ApplyYourself(Prompt, delayed, theDecayConstants); - G4int i0; - for(i0=0; i0AddSecondary(theNeutrons->operator[](i0), secID); - } + G4DynamicParticleVector* theDelayed = nullptr; + theDelayed = theFS.ApplyYourself(0, delayed, theDecayConstants); + for (i = 0; i < theDelayed->size(); i++) { + G4double time = -G4Log(G4UniformRand()) / theDecayConstants[i]; + time += theTrack.GetGlobalTime(); + theResult.Get()->AddSecondary(theDelayed->operator[](i), secID); + theResult.Get()->GetSecondary(theResult.Get()->GetNumberOfSecondaries() - 1)->SetTime(time); + } + delete theDelayed; + } + else { + theFS.SampleNeutronMult(all, Prompt, delayed, eKinetic, 0); + theDecayConstants = new G4double[delayed]; + if (Prompt == 0 && delayed == 0) Prompt = all; + theNeutrons = theFS.ApplyYourself(Prompt, delayed, theDecayConstants); + G4int i0; + for (i0 = 0; i0 < Prompt; ++i0) { + theResult.Get()->AddSecondary(theNeutrons->operator[](i0), secID); + } - for(i0=Prompt; i0 1.0e-30 ) { - time = -G4Log(G4UniformRand())/theDecayConstants[i0-Prompt]; - } else { - G4ExceptionDescription ed; - ed << " theDecayConstants[i0-Prompt]=" << theDecayConstants[i0-Prompt] - << " -> cannot sample the time : set it to 0.0 !" << G4endl; - G4Exception( "G4ParticleHPFissionFS::ApplyYourself ", "HAD_FISSIONHP_001", JustWarning, ed ); - } + for (i0 = Prompt; i0 < Prompt + delayed; ++i0) { + // Protect against the very rare case of division by zero + G4double time = 0.0; + if (theDecayConstants[i0 - Prompt] > 1.0e-30) { + time = -G4Log(G4UniformRand()) / theDecayConstants[i0 - Prompt]; + } + else { + G4ExceptionDescription ed; + ed << " theDecayConstants[i0-Prompt]=" << theDecayConstants[i0 - Prompt] + << " -> cannot sample the time : set it to 0.0 !" << G4endl; + G4Exception("G4ParticleHPFissionFS::ApplyYourself ", "HAD_FISSIONHP_001", JustWarning, ed); + } - time += theTrack.GetGlobalTime(); - theResult.Get()->AddSecondary(theNeutrons->operator[](i0), secID); - theResult.Get()->GetSecondary(theResult.Get()->GetNumberOfSecondaries()-1)->SetTime(time); - } - delete theNeutrons; - } - delete [] theDecayConstants; + time += theTrack.GetGlobalTime(); + theResult.Get()->AddSecondary(theNeutrons->operator[](i0), secID); + theResult.Get()->GetSecondary(theResult.Get()->GetNumberOfSecondaries() - 1)->SetTime(time); + } + delete theNeutrons; + } + delete[] theDecayConstants; - std::size_t nPhotons = 0; - if(thePhotons!=0) - { - nPhotons = thePhotons->size(); - for(i=0; iAddSecondary(thePhotons->operator[](i), secID); - } - delete thePhotons; - } + std::size_t nPhotons = 0; + if (thePhotons != nullptr) { + nPhotons = thePhotons->size(); + for (i = 0; i < nPhotons; ++i) { + theResult.Get()->AddSecondary(thePhotons->operator[](i), secID); + } + delete thePhotons; + } - // finally deal with local energy depositions. + // finally deal with local energy depositions. - G4ParticleHPFissionERelease * theERelease = theFS.GetEnergyRelease(); - G4double eDepByFragments = theERelease->GetFragmentKinetic(); - //theResult.SetLocalEnergyDeposit(eDepByFragments); - if ( !produceFissionFragments ) theResult.Get()->SetLocalEnergyDeposit(eDepByFragments); - // clean up the primary neutron - theResult.Get()->SetStatusChange(stopAndKill); + G4ParticleHPFissionERelease* theERelease = theFS.GetEnergyRelease(); + G4double eDepByFragments = theERelease->GetFragmentKinetic(); + // theResult.SetLocalEnergyDeposit(eDepByFragments); + if (!produceFissionFragments) theResult.Get()->SetLocalEnergyDeposit(eDepByFragments); + // clean up the primary neutron + theResult.Get()->SetStatusChange(stopAndKill); - if ( produceFissionFragments ) - { - G4int fragA_Z=0; - G4int fragA_A=0; - G4int fragA_M=0; - // System is traget rest! - theFF.GetAFissionFragment(eKinetic,fragA_Z,fragA_A,fragA_M); - G4int fragB_Z=(G4int)theBaseZ-fragA_Z; - G4int fragB_A=(G4int)theBaseA-fragA_A-Prompt; + if (produceFissionFragments) { + G4int fragA_Z = 0; + G4int fragA_A = 0; + G4int fragA_M = 0; + // System is traget rest! + theFF.GetAFissionFragment(eKinetic, fragA_Z, fragA_A, fragA_M); + G4int fragB_Z = (G4int)theBaseZ - fragA_Z; + G4int fragB_A = (G4int)theBaseA - fragA_A - Prompt; - G4IonTable* pt = G4IonTable::GetIonTable(); - //Excitation energy is not taken into account - G4ParticleDefinition* pdA = pt->GetIon( fragA_Z , fragA_A , 0.0 ); - G4ParticleDefinition* pdB = pt->GetIon( fragB_Z , fragB_A , 0.0 ); + G4IonTable* pt = G4IonTable::GetIonTable(); + // Excitation energy is not taken into account + G4ParticleDefinition* pdA = pt->GetIon(fragA_Z, fragA_A, 0.0); + G4ParticleDefinition* pdB = pt->GetIon(fragB_Z, fragB_A, 0.0); - //Isotropic Distribution - G4double phi = twopi*G4UniformRand(); - // Bug #1745 DHW G4double theta = pi*G4UniformRand(); - G4double costheta = 2.*G4UniformRand()-1.; - G4double theta = std::acos(costheta); - G4double sinth = std::sin(theta); - G4ThreeVector direction(sinth*std::cos(phi), sinth*std::sin(phi), costheta); + // Isotropic Distribution + G4double phi = twopi * G4UniformRand(); + // Bug #1745 DHW G4double theta = pi*G4UniformRand(); + G4double costheta = 2. * G4UniformRand() - 1.; + G4double theta = std::acos(costheta); + G4double sinth = std::sin(theta); + G4ThreeVector direction(sinth * std::cos(phi), sinth * std::sin(phi), costheta); - // Just use ENDF value for this - G4double ER = eDepByFragments; - G4double ma = pdA->GetPDGMass(); - G4double mb = pdB->GetPDGMass(); - G4double EA = ER / ( 1 + ma/mb); - G4double EB = ER - EA; - G4DynamicParticle* dpA = new G4DynamicParticle( pdA , direction , EA); - G4DynamicParticle* dpB = new G4DynamicParticle( pdB , -direction , EB); - theResult.Get()->AddSecondary(dpA, secID); - theResult.Get()->AddSecondary(dpB, secID); - } + // Just use ENDF value for this + G4double ER = eDepByFragments; + G4double ma = pdA->GetPDGMass(); + G4double mb = pdB->GetPDGMass(); + G4double EA = ER / (1 + ma / mb); + G4double EB = ER - EA; + auto dpA = new G4DynamicParticle(pdA, direction, EA); + auto dpB = new G4DynamicParticle(pdB, -direction, EB); + theResult.Get()->AddSecondary(dpA, secID); + theResult.Get()->AddSecondary(dpB, secID); + } - return theResult.Get(); - } + return theResult.Get(); +} diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPHe3InelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPHe3InelasticFS.cc index 2aa9514da4e..f2209be9e4d 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPHe3InelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPHe3InelasticFS.cc @@ -30,49 +30,55 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPHe3InelasticFS.hh" -#include "G4Nucleus.hh" + #include "G4He3.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHPHe3InelasticFS::G4ParticleHPHe3InelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHPHe3InelasticFS_F26" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHPHe3InelasticFS_F26"); } -void G4ParticleHPHe3InelasticFS::Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHPHe3InelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticCompFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-2; - ResidualZ = Z-2; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-2; - ResidualZ = Z-1; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-1; - ResidualZ = Z-1; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A; - ResidualZ = Z-1; - } else if( projectile == G4He3::He3() ) { - ResidualA = A; - ResidualZ = Z; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A+1; - ResidualZ = Z; - } + G4ParticleHPInelasticCompFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 2; + ResidualZ = Z - 2; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 2; + ResidualZ = Z - 1; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 1; + ResidualZ = Z - 1; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A; + ResidualZ = Z - 1; + } + else if (projectile == G4He3::He3()) { + ResidualA = A; + ResidualZ = Z; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A + 1; + ResidualZ = Z; + } - G4ParticleHPInelasticCompFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticCompFS::InitGammas(ResidualA, ResidualZ); } -G4HadFinalState * G4ParticleHPHe3InelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHPHe3InelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { + // do the final state + G4ParticleHPInelasticCompFS::CompositeApply(theTrack, G4He3::He3()); -// do the final state - G4ParticleHPInelasticCompFS::CompositeApply(theTrack, G4He3::He3()); - -// return the result - return theResult.Get(); + // return the result + return theResult.Get(); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelastic.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelastic.cc index 8f4a798ec1c..80432b26af6 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelastic.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelastic.cc @@ -39,12 +39,8 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPInelastic.hh" -#include "G4SystemOfUnits.hh" -#include "G4ParticleHPManager.hh" -#include "G4HadronicParameters.hh" -#include "G4ParticleHPThermalBoost.hh" -#include "G4Threading.hh" +#include "G4HadronicParameters.hh" #include "G4ParticleHP2AInelasticFS.hh" #include "G4ParticleHP2N2AInelasticFS.hh" #include "G4ParticleHP2NAInelasticFS.hh" @@ -62,6 +58,7 @@ #include "G4ParticleHPDAInelasticFS.hh" #include "G4ParticleHPDInelasticFS.hh" #include "G4ParticleHPHe3InelasticFS.hh" +#include "G4ParticleHPManager.hh" #include "G4ParticleHPN2AInelasticFS.hh" #include "G4ParticleHPN2PInelasticFS.hh" #include "G4ParticleHPN3AInelasticFS.hh" @@ -81,262 +78,291 @@ #include "G4ParticleHPPTInelasticFS.hh" #include "G4ParticleHPT2AInelasticFS.hh" #include "G4ParticleHPTInelasticFS.hh" +#include "G4ParticleHPThermalBoost.hh" +#include "G4SystemOfUnits.hh" +#include "G4Threading.hh" -G4ParticleHPInelastic::G4ParticleHPInelastic(G4ParticleDefinition* projectile, - const char* name ) - : G4HadronicInteraction(name), theInelastic(nullptr), numEle(0) - , theProjectile(projectile) +G4ParticleHPInelastic::G4ParticleHPInelastic(G4ParticleDefinition* projectile, const char* name) + : G4HadronicInteraction(name), theProjectile(projectile) { - G4String baseName; - if ( G4FindDataDir("G4PARTICLEHPDATA") ) { - baseName = G4FindDataDir( "G4PARTICLEHPDATA" ); - } - //const char* dataDirVariable; - G4String particleName; - if ( theProjectile == G4Neutron::Neutron() ) { - dataDirVariable = "G4NEUTRONHPDATA"; - } else if( theProjectile == G4Proton::Proton() ) { - dataDirVariable = "G4PROTONHPDATA"; - particleName = "Proton"; - } else if( theProjectile == G4Deuteron::Deuteron() ) { - dataDirVariable = "G4DEUTERONHPDATA"; - particleName = "Deuteron"; - } else if( theProjectile == G4Triton::Triton() ) { - dataDirVariable = "G4TRITONHPDATA"; - particleName = "Triton"; - } else if( theProjectile == G4He3::He3() ) { - dataDirVariable = "G4HE3HPDATA"; - particleName = "He3"; - } else if( theProjectile == G4Alpha::Alpha() ) { - dataDirVariable = "G4ALPHAHPDATA"; - particleName = "Alpha"; - } else { - G4String message("G4ParticleHPInelastic may only be called for neutron, proton, deuteron, triton, He3 or alpha, while it is called for " + theProjectile->GetParticleName()); - throw G4HadronicException(__FILE__, __LINE__,message.c_str()); - } + G4String baseName; + if (G4FindDataDir("G4PARTICLEHPDATA") != nullptr) { + baseName = G4FindDataDir("G4PARTICLEHPDATA"); + } + // const char* dataDirVariable; + G4String particleName; + if (theProjectile == G4Neutron::Neutron()) { + dataDirVariable = "G4NEUTRONHPDATA"; + } + else if (theProjectile == G4Proton::Proton()) { + dataDirVariable = "G4PROTONHPDATA"; + particleName = "Proton"; + } + else if (theProjectile == G4Deuteron::Deuteron()) { + dataDirVariable = "G4DEUTERONHPDATA"; + particleName = "Deuteron"; + } + else if (theProjectile == G4Triton::Triton()) { + dataDirVariable = "G4TRITONHPDATA"; + particleName = "Triton"; + } + else if (theProjectile == G4He3::He3()) { + dataDirVariable = "G4HE3HPDATA"; + particleName = "He3"; + } + else if (theProjectile == G4Alpha::Alpha()) { + dataDirVariable = "G4ALPHAHPDATA"; + particleName = "Alpha"; + } + else { + G4String message( + "G4ParticleHPInelastic may only be called for neutron, proton, deuteron, triton, He3 or " + "alpha, while it is called for " + + theProjectile->GetParticleName()); + throw G4HadronicException(__FILE__, __LINE__, message.c_str()); + } - SetMinEnergy( 0.0 ); - SetMaxEnergy( 20.*MeV ); + SetMinEnergy(0.0); + SetMaxEnergy(20. * MeV); + + // G4cout << " entering G4ParticleHPInelastic constructor"<GetParticleName() + " cross-section files."); + throw G4HadronicException(__FILE__, __LINE__, message.c_str()); + } + if (G4FindDataDir(dataDirVariable) != nullptr) { + dirName = G4FindDataDir(dataDirVariable); + } + else { + dirName = baseName + "/" + particleName; + } - //G4cout << " entering G4ParticleHPInelastic constructor"<GetParticleName() + " cross-section files." ); - throw G4HadronicException(__FILE__, __LINE__,message.c_str()); - } - if ( G4FindDataDir(dataDirVariable) ) { - dirName = G4FindDataDir(dataDirVariable); - } else { - dirName = baseName + "/" + particleName; - } - #ifdef G4VERBOSE - if ( G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) G4cout << dirName << G4endl; + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) G4cout << dirName << G4endl; #endif - - G4String tString = "/Inelastic"; - dirName = dirName + tString; + + G4String tString = "/Inelastic"; + dirName = dirName + tString; #ifdef G4VERBOSE - if ( G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) - G4cout << "@@@ G4ParticleHPInelastic instantiated for particle " << theProjectile->GetParticleName() << " data directory variable is " << dataDirVariable << " pointing to " << dirName << G4endl; + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) + G4cout << "@@@ G4ParticleHPInelastic instantiated for particle " + << theProjectile->GetParticleName() << " data directory variable is " << dataDirVariable + << " pointing to " << dirName << G4endl; #endif - } +} - G4ParticleHPInelastic::~G4ParticleHPInelastic() - { - //Vector is shared, only master deletes - if ( !G4Threading::IsWorkerThread() ) { - if ( theInelastic != nullptr ) { - for ( auto it=theInelastic->cbegin(); it!=theInelastic->cend(); ++it ) { - delete *it; - } - theInelastic->clear(); - } - } +G4ParticleHPInelastic::~G4ParticleHPInelastic() +{ + // Vector is shared, only master deletes + if (!G4Threading::IsWorkerThread()) { + if (theInelastic != nullptr) { + for (auto it = theInelastic->cbegin(); it != theInelastic->cend(); ++it) { + delete *it; + } + theInelastic->clear(); + } } - - G4HadFinalState * G4ParticleHPInelastic::ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& aNucleus ) - { - G4ParticleHPManager::GetInstance()->OpenReactionWhiteBoard(); - const G4Material * theMaterial = aTrack.GetMaterial(); - G4int n = (G4int)theMaterial->GetNumberOfElements(); - std::size_t index = theMaterial->GetElement(0)->GetIndex(); - G4int it=0; - if(n!=1) - { - G4double* xSec = new G4double[n]; - G4double sum=0; - G4int i; - const G4double * NumAtomsPerVolume = theMaterial->GetVecNbOfAtomsPerVolume(); - G4double rWeight; - G4ParticleHPThermalBoost aThermalE; - for (i=0; iGetElement(i)->GetIndex(); - rWeight = NumAtomsPerVolume[i]; - if ( aTrack.GetDefinition() == G4Neutron::Neutron() ) { - xSec[i] = ((*theInelastic)[index])->GetXsec(aThermalE.GetThermalEnergy(aTrack, - theMaterial->GetElement(i), - theMaterial->GetTemperature())); - } else { - xSec[i] = ((*theInelastic)[index])->GetXsec(aTrack.GetKineticEnergy()); - } - xSec[i] *= rWeight; - sum+=xSec[i]; -#ifdef G4PHPDEBUG - #ifdef G4VERBOSE - if( std::getenv("G4ParticleHPDebug") && G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) - G4cout << " G4ParticleHPInelastic XSEC ELEM " << i << " = " << xSec[i] << G4endl; - #endif -#endif +} +G4HadFinalState* G4ParticleHPInelastic::ApplyYourself(const G4HadProjectile& aTrack, + G4Nucleus& aNucleus) +{ + G4ParticleHPManager::GetInstance()->OpenReactionWhiteBoard(); + const G4Material* theMaterial = aTrack.GetMaterial(); + auto n = (G4int)theMaterial->GetNumberOfElements(); + std::size_t index = theMaterial->GetElement(0)->GetIndex(); + G4int it = 0; + if (n != 1) { + auto xSec = new G4double[n]; + G4double sum = 0; + G4int i; + const G4double* NumAtomsPerVolume = theMaterial->GetVecNbOfAtomsPerVolume(); + G4double rWeight; + G4ParticleHPThermalBoost aThermalE; + for (i = 0; i < n; ++i) { + index = theMaterial->GetElement(i)->GetIndex(); + rWeight = NumAtomsPerVolume[i]; + if (aTrack.GetDefinition() == G4Neutron::Neutron()) { + xSec[i] = ((*theInelastic)[index]) + ->GetXsec(aThermalE.GetThermalEnergy(aTrack, theMaterial->GetElement(i), + theMaterial->GetTemperature())); } - G4double random = G4UniformRand(); - G4double running = 0; - for (i=0; iGetElement(i)->GetIndex(); - it = i; - //if(random<=running/sum) break; - if( sum == 0 || random<=running/sum) break; + else { + xSec[i] = ((*theInelastic)[index])->GetXsec(aTrack.GetKineticEnergy()); } - delete [] xSec; + xSec[i] *= rWeight; + sum += xSec[i]; +#ifdef G4PHPDEBUG +# ifdef G4VERBOSE + if (std::getenv("G4ParticleHPDebug") + && G4HadronicParameters::Instance()->GetVerboseLevel() > 0) + G4cout << " G4ParticleHPInelastic XSEC ELEM " << i << " = " << xSec[i] << G4endl; +# endif +#endif + } + G4double random = G4UniformRand(); + G4double running = 0; + for (i = 0; i < n; ++i) { + running += xSec[i]; + index = theMaterial->GetElement(i)->GetIndex(); + it = i; + // if(random<=running/sum) break; + if (sum == 0 || random <= running / sum) break; } + delete[] xSec; + } #ifdef G4PHPDEBUG - #ifdef G4VERBOSE - if( std::getenv("G4ParticleHPDebug") && G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) - G4cout << " G4ParticleHPInelastic SELECTED ELEM " << it << " = " << theMaterial->GetElement(it)->GetName() << " FROM MATERIAL " << theMaterial->GetName() << G4endl; - #endif +# ifdef G4VERBOSE + if (std::getenv("G4ParticleHPDebug") && G4HadronicParameters::Instance()->GetVerboseLevel() > 0) + G4cout << " G4ParticleHPInelastic SELECTED ELEM " << it << " = " + << theMaterial->GetElement(it)->GetName() << " FROM MATERIAL " << theMaterial->GetName() + << G4endl; +# endif #endif - //return theInelastic[index].ApplyYourself(theMaterial->GetElement(it), aTrack); - G4HadFinalState* result = ((*theInelastic)[index])->ApplyYourself(theMaterial->GetElement(it), aTrack); - // - aNucleus.SetParameters(G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA(),G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargZ()); - const G4Element* target_element = (*G4Element::GetElementTable())[index]; - const G4Isotope* target_isotope = nullptr; - G4int iele = (G4int)target_element->GetNumberOfIsotopes(); - for ( G4int j = 0 ; j != iele ; ++j ) { - target_isotope=target_element->GetIsotope( j ); - if ( target_isotope->GetN() == G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA() ) break; - } - aNucleus.SetIsotope( target_isotope ); + // return theInelastic[index].ApplyYourself(theMaterial->GetElement(it), aTrack); + G4HadFinalState* result = + ((*theInelastic)[index])->ApplyYourself(theMaterial->GetElement(it), aTrack); + // + aNucleus.SetParameters(G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA(), + G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargZ()); + const G4Element* target_element = (*G4Element::GetElementTable())[index]; + const G4Isotope* target_isotope = nullptr; + auto iele = (G4int)target_element->GetNumberOfIsotopes(); + for (G4int j = 0; j != iele; ++j) { + target_isotope = target_element->GetIsotope(j); + if (target_isotope->GetN() + == G4ParticleHPManager::GetInstance()->GetReactionWhiteBoard()->GetTargA()) + break; + } + aNucleus.SetIsotope(target_isotope); - G4ParticleHPManager::GetInstance()->CloseReactionWhiteBoard(); + G4ParticleHPManager::GetInstance()->CloseReactionWhiteBoard(); - return result; - } + return result; +} const std::pair G4ParticleHPInelastic::GetFatalEnergyCheckLevels() const { // max energy non-conservation is mass of heavy nucleus - return std::pair(10.0*perCent, 350.0*CLHEP::GeV); + return std::pair(10.0 * perCent, 350.0 * CLHEP::GeV); } G4int G4ParticleHPInelastic::GetVerboseLevel() const { - return G4ParticleHPManager::GetInstance()->GetVerboseLevel(); + return G4ParticleHPManager::GetInstance()->GetVerboseLevel(); } -void G4ParticleHPInelastic::SetVerboseLevel( G4int newValue ) +void G4ParticleHPInelastic::SetVerboseLevel(G4int newValue) { - G4ParticleHPManager::GetInstance()->SetVerboseLevel(newValue); + G4ParticleHPManager::GetInstance()->SetVerboseLevel(newValue); } -void G4ParticleHPInelastic::BuildPhysicsTable(const G4ParticleDefinition& projectile) { - - G4ParticleHPManager* hpmanager = G4ParticleHPManager::GetInstance(); - - theInelastic = hpmanager->GetInelasticFinalStates( &projectile ); +void G4ParticleHPInelastic::BuildPhysicsTable(const G4ParticleDefinition& projectile) +{ + G4ParticleHPManager* hpmanager = G4ParticleHPManager::GetInstance(); - if ( G4Threading::IsMasterThread() ) { + theInelastic = hpmanager->GetInelasticFinalStates(&projectile); - if ( theInelastic == nullptr ) theInelastic = new std::vector; + if (G4Threading::IsMasterThread()) { + if (theInelastic == nullptr) theInelastic = new std::vector; - if ( numEle == (G4int)G4Element::GetNumberOfElements() ) return; + if (numEle == (G4int)G4Element::GetNumberOfElements()) return; - if ( theInelastic->size() == G4Element::GetNumberOfElements() ) { - numEle = (G4int)G4Element::GetNumberOfElements(); - return; - } + if (theInelastic->size() == G4Element::GetNumberOfElements()) { + numEle = (G4int)G4Element::GetNumberOfElements(); + return; + } #ifdef G4VERBOSE - if ( G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) { - hpmanager->DumpSetting(); - G4cout << "@@@ G4ParticleHPInelastic instantiated for particle " << projectile.GetParticleName() << " data directory variable is " << dataDirVariable << " pointing to " << dirName << G4endl; - } + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { + hpmanager->DumpSetting(); + G4cout << "@@@ G4ParticleHPInelastic instantiated for particle " + << projectile.GetParticleName() << " data directory variable is " << dataDirVariable + << " pointing to " << dirName << G4endl; + } #endif - for (G4int i = numEle ; i < (G4int)G4Element::GetNumberOfElements(); ++i) - { - theInelastic->push_back( new G4ParticleHPChannelList ); - ((*theInelastic)[i])->Init((*(G4Element::GetElementTable()))[i], dirName, const_cast(&projectile)); - G4int itry = 0; - do - { - ((*theInelastic)[i])->Register( new G4ParticleHPNInelasticFS , "F01"); // has - ((*theInelastic)[i])->Register( new G4ParticleHPNXInelasticFS , "F02"); - ((*theInelastic)[i])->Register( new G4ParticleHP2NDInelasticFS , "F03"); - ((*theInelastic)[i])->Register( new G4ParticleHP2NInelasticFS , "F04"); // has, E Done - ((*theInelastic)[i])->Register( new G4ParticleHP3NInelasticFS , "F05"); // has, E Done - ((*theInelastic)[i])->Register( new G4ParticleHPNAInelasticFS , "F06"); - ((*theInelastic)[i])->Register( new G4ParticleHPN3AInelasticFS , "F07"); - ((*theInelastic)[i])->Register( new G4ParticleHP2NAInelasticFS , "F08"); - ((*theInelastic)[i])->Register( new G4ParticleHP3NAInelasticFS , "F09"); - ((*theInelastic)[i])->Register( new G4ParticleHPNPInelasticFS , "F10"); - ((*theInelastic)[i])->Register( new G4ParticleHPN2AInelasticFS , "F11"); - ((*theInelastic)[i])->Register( new G4ParticleHP2N2AInelasticFS , "F12"); - ((*theInelastic)[i])->Register( new G4ParticleHPNDInelasticFS , "F13"); - ((*theInelastic)[i])->Register( new G4ParticleHPNTInelasticFS , "F14"); - ((*theInelastic)[i])->Register( new G4ParticleHPNHe3InelasticFS , "F15"); - ((*theInelastic)[i])->Register( new G4ParticleHPND2AInelasticFS , "F16"); - ((*theInelastic)[i])->Register( new G4ParticleHPNT2AInelasticFS , "F17"); - ((*theInelastic)[i])->Register( new G4ParticleHP4NInelasticFS , "F18"); // has, E Done - ((*theInelastic)[i])->Register( new G4ParticleHP2NPInelasticFS , "F19"); - ((*theInelastic)[i])->Register( new G4ParticleHP3NPInelasticFS , "F20"); - ((*theInelastic)[i])->Register( new G4ParticleHPN2PInelasticFS , "F21"); - ((*theInelastic)[i])->Register( new G4ParticleHPNPAInelasticFS , "F22"); - ((*theInelastic)[i])->Register( new G4ParticleHPPInelasticFS , "F23"); - ((*theInelastic)[i])->Register( new G4ParticleHPDInelasticFS , "F24"); - ((*theInelastic)[i])->Register( new G4ParticleHPTInelasticFS , "F25"); - ((*theInelastic)[i])->Register( new G4ParticleHPHe3InelasticFS , "F26"); - ((*theInelastic)[i])->Register( new G4ParticleHPAInelasticFS , "F27"); - ((*theInelastic)[i])->Register( new G4ParticleHP2AInelasticFS , "F28"); - ((*theInelastic)[i])->Register( new G4ParticleHP3AInelasticFS , "F29"); - ((*theInelastic)[i])->Register( new G4ParticleHP2PInelasticFS , "F30"); - ((*theInelastic)[i])->Register( new G4ParticleHPPAInelasticFS , "F31"); - ((*theInelastic)[i])->Register( new G4ParticleHPD2AInelasticFS , "F32"); - ((*theInelastic)[i])->Register( new G4ParticleHPT2AInelasticFS , "F33"); - ((*theInelastic)[i])->Register( new G4ParticleHPPDInelasticFS , "F34"); - ((*theInelastic)[i])->Register( new G4ParticleHPPTInelasticFS , "F35"); - ((*theInelastic)[i])->Register( new G4ParticleHPDAInelasticFS , "F36"); - ((*theInelastic)[i])->RestartRegistration(); - itry++; - } - while( !((*theInelastic)[i])->HasDataInAnyFinalState() && itry < 6 ); // Loop checking, 11.05.2015, T. Koi - // 6 is corresponding to the value(5) of G4ParticleHPChannel. TK + for (G4int i = numEle; i < (G4int)G4Element::GetNumberOfElements(); ++i) { + theInelastic->push_back(new G4ParticleHPChannelList); + ((*theInelastic)[i]) + ->Init((*(G4Element::GetElementTable()))[i], dirName, + const_cast(&projectile)); + G4int itry = 0; + do { + ((*theInelastic)[i])->Register(new G4ParticleHPNInelasticFS, "F01"); // has + ((*theInelastic)[i])->Register(new G4ParticleHPNXInelasticFS, "F02"); + ((*theInelastic)[i])->Register(new G4ParticleHP2NDInelasticFS, "F03"); + ((*theInelastic)[i])->Register(new G4ParticleHP2NInelasticFS, "F04"); // has, E Done + ((*theInelastic)[i])->Register(new G4ParticleHP3NInelasticFS, "F05"); // has, E Done + ((*theInelastic)[i])->Register(new G4ParticleHPNAInelasticFS, "F06"); + ((*theInelastic)[i])->Register(new G4ParticleHPN3AInelasticFS, "F07"); + ((*theInelastic)[i])->Register(new G4ParticleHP2NAInelasticFS, "F08"); + ((*theInelastic)[i])->Register(new G4ParticleHP3NAInelasticFS, "F09"); + ((*theInelastic)[i])->Register(new G4ParticleHPNPInelasticFS, "F10"); + ((*theInelastic)[i])->Register(new G4ParticleHPN2AInelasticFS, "F11"); + ((*theInelastic)[i])->Register(new G4ParticleHP2N2AInelasticFS, "F12"); + ((*theInelastic)[i])->Register(new G4ParticleHPNDInelasticFS, "F13"); + ((*theInelastic)[i])->Register(new G4ParticleHPNTInelasticFS, "F14"); + ((*theInelastic)[i])->Register(new G4ParticleHPNHe3InelasticFS, "F15"); + ((*theInelastic)[i])->Register(new G4ParticleHPND2AInelasticFS, "F16"); + ((*theInelastic)[i])->Register(new G4ParticleHPNT2AInelasticFS, "F17"); + ((*theInelastic)[i])->Register(new G4ParticleHP4NInelasticFS, "F18"); // has, E Done + ((*theInelastic)[i])->Register(new G4ParticleHP2NPInelasticFS, "F19"); + ((*theInelastic)[i])->Register(new G4ParticleHP3NPInelasticFS, "F20"); + ((*theInelastic)[i])->Register(new G4ParticleHPN2PInelasticFS, "F21"); + ((*theInelastic)[i])->Register(new G4ParticleHPNPAInelasticFS, "F22"); + ((*theInelastic)[i])->Register(new G4ParticleHPPInelasticFS, "F23"); + ((*theInelastic)[i])->Register(new G4ParticleHPDInelasticFS, "F24"); + ((*theInelastic)[i])->Register(new G4ParticleHPTInelasticFS, "F25"); + ((*theInelastic)[i])->Register(new G4ParticleHPHe3InelasticFS, "F26"); + ((*theInelastic)[i])->Register(new G4ParticleHPAInelasticFS, "F27"); + ((*theInelastic)[i])->Register(new G4ParticleHP2AInelasticFS, "F28"); + ((*theInelastic)[i])->Register(new G4ParticleHP3AInelasticFS, "F29"); + ((*theInelastic)[i])->Register(new G4ParticleHP2PInelasticFS, "F30"); + ((*theInelastic)[i])->Register(new G4ParticleHPPAInelasticFS, "F31"); + ((*theInelastic)[i])->Register(new G4ParticleHPD2AInelasticFS, "F32"); + ((*theInelastic)[i])->Register(new G4ParticleHPT2AInelasticFS, "F33"); + ((*theInelastic)[i])->Register(new G4ParticleHPPDInelasticFS, "F34"); + ((*theInelastic)[i])->Register(new G4ParticleHPPTInelasticFS, "F35"); + ((*theInelastic)[i])->Register(new G4ParticleHPDAInelasticFS, "F36"); + ((*theInelastic)[i])->RestartRegistration(); + itry++; + } while (!((*theInelastic)[i])->HasDataInAnyFinalState() + && itry < 6); // Loop checking, 11.05.2015, T. Koi + // 6 is corresponding to the value(5) of G4ParticleHPChannel. TK - if ( itry == 6 ) { - // No Final State at all. + if (itry == 6) { + // No Final State at all. #ifdef G4VERBOSE - if ( G4ParticleHPManager::GetInstance()->GetVerboseLevel() > 1 && - G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) { - G4cout << "ParticleHP::Inelastic for " << projectile.GetParticleName() << ". Do not know what to do with element of \"" << (*(G4Element::GetElementTable()))[i]->GetName() << "\"." << G4endl; - G4cout << "The components of the element are" << G4endl; - for ( G4int ii = 0 ; ii < (G4int)( (*(G4Element::GetElementTable()))[i]->GetNumberOfIsotopes() ) ; ++ii ) { - G4cout << " Z: " << (*(G4Element::GetElementTable()))[i]->GetIsotope( ii )->GetZ() << ", A: " << (*(G4Element::GetElementTable()))[i]->GetIsotope( ii )->GetN() << G4endl; - } - G4cout << "No possible final state data of the element is found in " << dataDirVariable << "." << G4endl; - } -#endif + if (G4ParticleHPManager::GetInstance()->GetVerboseLevel() > 1 + && G4HadronicParameters::Instance()->GetVerboseLevel() > 0) + { + G4cout << "ParticleHP::Inelastic for " << projectile.GetParticleName() + << ". Do not know what to do with element of \"" + << (*(G4Element::GetElementTable()))[i]->GetName() << "\"." << G4endl; + G4cout << "The components of the element are" << G4endl; + for (G4int ii = 0; + ii < (G4int)((*(G4Element::GetElementTable()))[i]->GetNumberOfIsotopes()); ++ii) + { + G4cout << " Z: " << (*(G4Element::GetElementTable()))[i]->GetIsotope(ii)->GetZ() + << ", A: " << (*(G4Element::GetElementTable()))[i]->GetIsotope(ii)->GetN() + << G4endl; + } + G4cout << "No possible final state data of the element is found in " << dataDirVariable + << "." << G4endl; } +#endif } - hpmanager->RegisterInelasticFinalStates( &projectile , theInelastic ); - } - numEle = (G4int)G4Element::GetNumberOfElements(); + } + hpmanager->RegisterInelasticFinalStates(&projectile, theInelastic); + } + numEle = (G4int)G4Element::GetNumberOfElements(); } void G4ParticleHPInelastic::ModelDescription(std::ostream& outFile) const { - outFile << "Extension of High Precision model for inelastic reaction of proton,\n" - << "deuteron, triton, He3 and alpha below 20MeV\n"; + outFile << "Extension of High Precision model for inelastic reaction of proton,\n" + << "deuteron, triton, He3 and alpha below 20MeV\n"; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelasticBaseFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelasticBaseFS.cc index 859ce5448ab..719f88f4226 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelasticBaseFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelasticBaseFS.cc @@ -71,7 +71,7 @@ void G4ParticleHPInelasticBaseFS::Init(G4double A, G4double Z, G4int M, G4String G4String& bit, G4ParticleDefinition*) { gammaPath = "/Inelastic/Gammas/"; - if (!G4FindDataDir("G4NEUTRONHPDATA")) + if (G4FindDataDir("G4NEUTRONHPDATA") == nullptr) throw G4HadronicException(__FILE__, __LINE__, "Please setenv G4NEUTRONHPDATA to point to the neutron cross-section " "files where Inelastic/Gammas data is found."); @@ -173,7 +173,7 @@ void G4ParticleHPInelasticBaseFS::BaseApply(const G4HadProjectile& theTrack, G4ParticleDefinition** theDefs, G4int nDef) { // prepare neutron - if (theResult.Get() == NULL) theResult.Put(new G4HadFinalState); + if (theResult.Get() == nullptr) theResult.Put(new G4HadFinalState); theResult.Get()->Clear(); G4double eKinetic = theTrack.GetKineticEnergy(); const G4HadProjectile* hadProjectile = &theTrack; @@ -192,10 +192,10 @@ void G4ParticleHPInelasticBaseFS::BaseApply(const G4HadProjectile& theTrack, G4Neutron::Neutron()->GetPDGMass(); // give priority to ENDF vales for target mass - if (theEnergyAngData != 0) { + if (theEnergyAngData != nullptr) { targetMass = theEnergyAngData->GetTargetMass(); } - if (theAngularDistribution != 0) { + if (theAngularDistribution != nullptr) { targetMass = theAngularDistribution->GetTargetMass(); } @@ -273,7 +273,7 @@ void G4ParticleHPInelasticBaseFS::BaseApply(const G4HadProjectile& theTrack, G4double dummy = 0; G4ReactionProduct* aSec = thePhaseSpaceDistribution.Sample(eKinetic, massCode, dummy); aSec->Lorentz(*aSec, -1. * theTarget); - G4DynamicParticle* aPart = new G4DynamicParticle(); + auto aPart = new G4DynamicParticle(); aPart->SetDefinition(aSec->GetDefinition()); aPart->SetMomentum(aSec->GetMomentum()); delete aSec; @@ -301,16 +301,16 @@ void G4ParticleHPInelasticBaseFS::BaseApply(const G4HadProjectile& theTrack, } // set target and neutron in the relevant exit channel - if (theAngularDistribution != 0) { + if (theAngularDistribution != nullptr) { theAngularDistribution->SetTarget(theTarget); theAngularDistribution->SetProjectileRP(incidReactionProduct); } - else if (theEnergyAngData != 0) { + else if (theEnergyAngData != nullptr) { theEnergyAngData->SetTarget(theTarget); theEnergyAngData->SetProjectileRP(incidReactionProduct); } - G4ReactionProductVector* tmpHadrons = 0; + G4ReactionProductVector* tmpHadrons = nullptr; #ifdef G4PHPDEBUG // To avoid compilation error around line 532. G4int ii(0); @@ -318,7 +318,7 @@ void G4ParticleHPInelasticBaseFS::BaseApply(const G4HadProjectile& theTrack, G4int dummy; std::size_t i; - if (theEnergyAngData != 0) { + if (theEnergyAngData != nullptr) { tmpHadrons = theEnergyAngData->Sample(eKinetic); if (!G4ParticleHPManager::GetInstance()->GetDoNotAdjustFinalState()) { @@ -353,8 +353,8 @@ void G4ParticleHPInelasticBaseFS::BaseApply(const G4HadProjectile& theTrack, } } } - else if (theAngularDistribution != 0) { - G4bool* Done = new G4bool[nDef]; + else if (theAngularDistribution != nullptr) { + auto Done = new G4bool[nDef]; G4int i0; for (i0 = 0; i0 < nDef; ++i0) Done[i0] = false; @@ -367,7 +367,7 @@ void G4ParticleHPInelasticBaseFS::BaseApply(const G4HadProjectile& theTrack, for (i0 = 0; i0 < nDef; ++i0) { if (!Done[i0]) { aHadron = new G4ReactionProduct; - if (theEnergyDistribution != 0) { + if (theEnergyDistribution != nullptr) { aHadron->SetDefinition(theDefs[i0]); aHadron->SetKineticEnergy(theEnergyDistribution->Sample(eKinetic, dummy)); } @@ -385,13 +385,13 @@ void G4ParticleHPInelasticBaseFS::BaseApply(const G4HadProjectile& theTrack, "No energy distribution to sample from in InelasticBaseFS::BaseApply"); } theAngularDistribution->SampleAndUpdate(*aHadron); - if (theEnergyDistribution == 0 && nDef == 2) { + if (theEnergyDistribution == nullptr && nDef == 2) { if (i0 == 0) { G4double mass1 = theDefs[0]->GetPDGMass(); G4double mass2 = theDefs[1]->GetPDGMass(); G4double massn = theProjectile->GetPDGMass(); - G4int z1 = static_cast(theBaseZ + eps - theDefs[0]->GetPDGCharge() - - theDefs[1]->GetPDGCharge()); + auto z1 = static_cast(theBaseZ + eps - theDefs[0]->GetPDGCharge() + - theDefs[1]->GetPDGCharge()); G4int a1 = static_cast(theBaseA + eps) - theDefs[0]->GetBaryonNumber() - theDefs[1]->GetBaryonNumber(); G4double concreteMass = G4NucleiProperties::GetNuclearMass(a1, z1); @@ -446,20 +446,20 @@ void G4ParticleHPInelasticBaseFS::BaseApply(const G4HadProjectile& theTrack, } G4ReactionProductVector* thePhotons = nullptr; - if (theFinalStatePhotons != 0) { + if (theFinalStatePhotons != nullptr) { // the photon distributions are in the Nucleus rest frame. G4ReactionProduct boosted_tmp; boosted_tmp.Lorentz(incidReactionProduct, theTarget); G4double anEnergy = boosted_tmp.GetKineticEnergy(); thePhotons = theFinalStatePhotons->GetPhotons(anEnergy); - if (thePhotons != 0) { + if (thePhotons != nullptr) { for (i = 0; i < thePhotons->size(); ++i) { // back to lab thePhotons->operator[](i)->Lorentz(*(thePhotons->operator[](i)), -1. * theTarget); } } } - else if (theEnergyAngData != 0) { + else if (theEnergyAngData != nullptr) { // PA130927: do not create photons to adjust binding energy G4bool bAdjustPhotons = true; #ifdef PHP_AS_HP @@ -539,7 +539,7 @@ void G4ParticleHPInelasticBaseFS::BaseApply(const G4HadProjectile& theTrack, // fill the result std::size_t nSecondaries = tmpHadrons->size(); std::size_t nPhotons = 0; - if (thePhotons != 0) { + if (thePhotons != nullptr) { nPhotons = thePhotons->size(); } nSecondaries += nPhotons; @@ -568,7 +568,7 @@ void G4ParticleHPInelasticBaseFS::BaseApply(const G4HadProjectile& theTrack, if (std::getenv("G4ParticleHPDebug")) G4cout << " G4ParticleHPInelasticBaseFS::BaseApply N photons " << nPhotons << G4endl; #endif - if (thePhotons != 0) { + if (thePhotons != nullptr) { for (i = 0; i < nPhotons; ++i) { theSec = new G4DynamicParticle; theSec->SetDefinition(thePhotons->operator[](i)->GetDefinition()); @@ -599,7 +599,7 @@ void G4ParticleHPInelasticBaseFS::BaseApply(const G4HadProjectile& theTrack, // if data in MF=6 format (no correlated particle emission), then adjust_final_state can give // severe errors: - if (theEnergyAngData == 0) { + if (theEnergyAngData == nullptr) { adjust_final_state(init_4p_lab); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelasticCompFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelasticCompFS.cc index 1a501b81a14..b6ed8b6a2b0 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelasticCompFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelasticCompFS.cc @@ -80,7 +80,7 @@ void G4ParticleHPInelasticCompFS::Init(G4double A, G4double Z, G4int M, G4String G4String& aFSType, G4ParticleDefinition*) { gammaPath = "/Inelastic/Gammas/"; // only in neutron data base - if (!G4FindDataDir("G4NEUTRONHPDATA")) + if (G4FindDataDir("G4NEUTRONHPDATA") == nullptr) throw G4HadronicException(__FILE__, __LINE__, "Please setenv G4NEUTRONHPDATA to point to the neutron cross-section " "files where Inelastic/Gammas data is found."); @@ -190,7 +190,7 @@ G4int G4ParticleHPInelasticCompFS::SelectExitChannel(G4double eKinetic) G4int i; for (i = 0; i < 50; ++i) { if (i != 0) running[i] = running[i - 1]; - if (theXsection[i] != 0) { + if (theXsection[i] != nullptr) { running[i] += std::max(0., theXsection[i]->GetXsec(eKinetic)); } } @@ -224,7 +224,7 @@ void G4ParticleHPInelasticCompFS::CompositeApply(const G4HadProjectile& theTrack // prepare target G4int i; for (i = 0; i < 50; ++i) { - if (theXsection[i] != 0) { + if (theXsection[i] != nullptr) { break; } } @@ -270,11 +270,11 @@ void G4ParticleHPInelasticCompFS::CompositeApply(const G4HadProjectile& theTrack G4int it = SelectExitChannel(eKinetic); // E. Mendoza (2018) -- to use JENDL/AN-2005 - if (theEnergyDistribution[it] == 0 && theAngularDistribution[it] == 0 - && theEnergyAngData[it] == 0) + if (theEnergyDistribution[it] == nullptr && theAngularDistribution[it] == nullptr + && theEnergyAngData[it] == nullptr) { - if (theEnergyDistribution[50] != 0 || theAngularDistribution[50] != 0 - || theEnergyAngData[50] != 0) + if (theEnergyDistribution[50] != nullptr || theAngularDistribution[50] != nullptr + || theEnergyAngData[50] != nullptr) { it = 50; } @@ -295,8 +295,8 @@ void G4ParticleHPInelasticCompFS::CompositeApply(const G4HadProjectile& theTrack } //---------------------------------------------------------------------// - G4ReactionProductVector* thePhotons = 0; - G4ReactionProductVector* theParticles = 0; + G4ReactionProductVector* thePhotons = nullptr; + G4ReactionProductVector* theParticles = nullptr; G4ReactionProduct aHadron; aHadron.SetDefinition(aDefinition); // what if only cross-sections exist ==> Na 23 11 @@@@ G4double availableEnergy = incidReactionProduct.GetKineticEnergy() @@ -330,9 +330,9 @@ void G4ParticleHPInelasticCompFS::CompositeApply(const G4HadProjectile& theTrack iLevel = imaxEx; } - if (theAngularDistribution[it] != 0) // MF4 + if (theAngularDistribution[it] != nullptr) // MF4 { - if (theEnergyDistribution[it] != 0) // MF5 + if (theEnergyDistribution[it] != nullptr) // MF5 { //************************************************************ /* @@ -397,7 +397,7 @@ void G4ParticleHPInelasticCompFS::CompositeApply(const G4HadProjectile& theTrack find = true; break; } - else if (eExcitation < elevel) { + if (eExcitation < elevel) { find = true; iLevel = std::max(iLevel - 1, 0); break; @@ -409,7 +409,7 @@ void G4ParticleHPInelasticCompFS::CompositeApply(const G4HadProjectile& theTrack } } - if (std::getenv("G4ParticleHPDebug") && eKinetic - eExcitation < 0) { + if ((std::getenv("G4ParticleHPDebug") != nullptr) && eKinetic - eExcitation < 0) { throw G4HadronicException( __FILE__, __LINE__, "SEVERE: InelasticCompFS: Consistency of data not good enough, please file report"); @@ -419,12 +419,12 @@ void G4ParticleHPInelasticCompFS::CompositeApply(const G4HadProjectile& theTrack } theAngularDistribution[it]->SampleAndUpdate(aHadron); - if (theFinalStatePhotons[it] == 0) { + if (theFinalStatePhotons[it] == nullptr) { thePhotons = theGammas.GetDecayGammas(iLevel); eGamm -= theGammas.GetLevelEnergy(iLevel); } } - else if (theEnergyAngData[it] != 0) // MF6 + else if (theEnergyAngData[it] != nullptr) // MF6 { theParticles = theEnergyAngData[it]->Sample(eKinetic); @@ -458,7 +458,7 @@ void G4ParticleHPInelasticCompFS::CompositeApply(const G4HadProjectile& theTrack nothingWasKnownOnHadron = 1; } - if (theFinalStatePhotons[it] != 0) { + if (theFinalStatePhotons[it] != nullptr) { // the photon distributions are in the Nucleus rest frame. // TK residual rest frame G4ReactionProduct boosted_tmp; @@ -467,7 +467,7 @@ void G4ParticleHPInelasticCompFS::CompositeApply(const G4HadProjectile& theTrack thePhotons = theFinalStatePhotons[it]->GetPhotons(anEnergy); G4double aBaseEnergy = theFinalStatePhotons[it]->GetLevelEnergy(); G4double testEnergy = 0; - if (thePhotons != 0 && thePhotons->size() != 0) { + if (thePhotons != nullptr && !thePhotons->empty()) { aBaseEnergy -= thePhotons->operator[](0)->GetTotalEnergy(); } if (theFinalStatePhotons[it]->NeedsCascade()) { @@ -478,7 +478,7 @@ void G4ParticleHPInelasticCompFS::CompositeApply(const G4HadProjectile& theTrack G4int closest = 2; G4double deltaEold = -1; for (G4int j = 1; j < it; ++j) { - if (theFinalStatePhotons[j] != 0) { + if (theFinalStatePhotons[j] != nullptr) { testEnergy = theFinalStatePhotons[j]->GetLevelEnergy(); } else { @@ -493,7 +493,7 @@ void G4ParticleHPInelasticCompFS::CompositeApply(const G4HadProjectile& theTrack foundMatchingLevel = true; break; // ===> } - if (theFinalStatePhotons[j] != 0 && (deltaE < deltaEold || deltaEold < 0.)) { + if (theFinalStatePhotons[j] != nullptr && (deltaE < deltaEold || deltaEold < 0.)) { closest = j; deltaEold = deltaE; } @@ -508,13 +508,13 @@ void G4ParticleHPInelasticCompFS::CompositeApply(const G4HadProjectile& theTrack } } unsigned int i0; - if (thePhotons != 0) { + if (thePhotons != nullptr) { for (i0 = 0; i0 < thePhotons->size(); ++i0) { // back to lab thePhotons->operator[](i0)->Lorentz(*(thePhotons->operator[](i0)), -1. * theTarget); } } - if (nothingWasKnownOnHadron) { + if (nothingWasKnownOnHadron != 0) { // In this case, hadron should be isotropic in CM // Next 12 lines are Emilio's replacement // G4double QM=(incidReactionProduct.GetMass()+targetMass)-(aHadron.GetMass()+residualMass); @@ -525,7 +525,7 @@ void G4ParticleHPInelasticCompFS::CompositeApply(const G4HadProjectile& theTrack G4double eExcitation = std::max(0., QI[0] - QI[it]); // Fix of bug #2333 two_body_reaction(&incidReactionProduct, &theTarget, &aHadron, eExcitation); - if (thePhotons == 0 && eExcitation > 0) { + if (thePhotons == nullptr && eExcitation > 0) { for (iLevel = imaxEx; iLevel >= 0; --iLevel) { if (theGammas.GetLevelEnergy(iLevel) < eExcitation + 5 * keV) break; // 5 keV tolerance } @@ -545,7 +545,7 @@ void G4ParticleHPInelasticCompFS::CompositeApply(const G4HadProjectile& theTrack G4int totalBaryonNumber = 0; G4int totalCharge = 0; G4ThreeVector totalMomentum(0); - if (theParticles != 0) { + if (theParticles != nullptr) { const G4ParticleDefinition* aDef; std::size_t ii0; for (ii0 = 0; ii0 < theParticles->size(); ++ii0) { @@ -566,13 +566,13 @@ void G4ParticleHPInelasticCompFS::CompositeApply(const G4HadProjectile& theTrack } std::size_t nPhotons = 0; - if (thePhotons != 0) { + if (thePhotons != nullptr) { nPhotons = thePhotons->size(); } G4DynamicParticle* theSec; - if (theParticles == 0) { + if (theParticles == nullptr) { theSec = new G4DynamicParticle; theSec->SetDefinition(aHadron.GetDefinition()); theSec->SetMomentum(aHadron.GetMomentum()); @@ -599,7 +599,7 @@ void G4ParticleHPInelasticCompFS::CompositeApply(const G4HadProjectile& theTrack theResidual.Lorentz(theResidual, -1. * theTarget); G4ThreeVector totalPhotonMomentum(0, 0, 0); - if (thePhotons != 0) { + if (thePhotons != nullptr) { for (i = 0; i < (G4int)nPhotons; ++i) { totalPhotonMomentum += thePhotons->operator[](i)->GetMomentum(); } @@ -662,7 +662,7 @@ void G4ParticleHPInelasticCompFS::CompositeApply(const G4HadProjectile& theTrack #endif } } - if (thePhotons != 0) { + if (thePhotons != nullptr) { for (i = 0; i < (G4int)nPhotons; ++i) { theSec = new G4DynamicParticle; // Bug reported Chao Zhang (Chao.Zhang@usd.edu), Dongming Mei(Dongming.Mei@usd.edu) Feb. 25, @@ -713,8 +713,8 @@ void G4ParticleHPInelasticCompFS::two_body_reaction(G4ReactionProduct* proj, G4ReactionProduct theCMS = *proj + *targ; // Residual definition: - G4int resZ = (G4int)(proj->GetDefinition()->GetPDGCharge() + targ->GetDefinition()->GetPDGCharge() - - product->GetDefinition()->GetPDGCharge() + 0.1); + auto resZ = (G4int)(proj->GetDefinition()->GetPDGCharge() + targ->GetDefinition()->GetPDGCharge() + - product->GetDefinition()->GetPDGCharge() + 0.1); G4int resA = proj->GetDefinition()->GetBaryonNumber() + targ->GetDefinition()->GetBaryonNumber() - product->GetDefinition()->GetBaryonNumber(); G4ReactionProduct theResidual; @@ -791,10 +791,10 @@ G4bool G4ParticleHPInelasticCompFS::use_nresp71_model(const G4ParticleDefinition } // Returning to the reference frame where the target was in motion. - for (G4int j = 0; j < 4; ++j) { - theProds[j].Lorentz(theProds[j], -1. * theTarget); + for (auto& theProd : theProds) { + theProd.Lorentz(theProd, -1. * theTarget); theResult.Get()->AddSecondary( - new G4DynamicParticle(theProds[j].GetDefinition(), theProds[j].GetMomentum()), secID); + new G4DynamicParticle(theProd.GetDefinition(), theProd.GetMomentum()), secID); } // Killing the primary neutron. @@ -822,11 +822,11 @@ G4bool G4ParticleHPInelasticCompFS::use_nresp71_model(const G4ParticleDefinition nresp71_model.ApplyMechanismABE(boosted, theCarbon, theProds); // N+C --> A[0]+9BE[1]. - for (G4int j = 0; j < 2; ++j) { + for (auto& theProd : theProds) { // Returning to the system of reference where the target was in motion. - theProds[j].Lorentz(theProds[j], -1. * theTarget); + theProd.Lorentz(theProd, -1. * theTarget); theResult.Get()->AddSecondary( - new G4DynamicParticle(theProds[j].GetDefinition(), theProds[j].GetMomentum()), secID); + new G4DynamicParticle(theProd.GetDefinition(), theProd.GetMomentum()), secID); } // Killing the primary neutron. @@ -835,10 +835,8 @@ G4bool G4ParticleHPInelasticCompFS::use_nresp71_model(const G4ParticleDefinition return true; } - else { - G4Exception("G4ParticleHPInelasticCompFS::CompositeApply()", "G4ParticleInelasticCompFS.cc", - FatalException, "Alpha production with LR!=0."); - } + G4Exception("G4ParticleHPInelasticCompFS::CompositeApply()", "G4ParticleInelasticCompFS.cc", + FatalException, "Alpha production with LR!=0."); } return false; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelasticData.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelasticData.cc index db051796f3c..dfd1b65d326 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelasticData.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInelasticData.cc @@ -30,19 +30,20 @@ // 070523 add neglecting doppler broadening on the fly. T. Koi // 070613 fix memory leaking by T. Koi // 071002 enable cross section dump by T. Koi -// 080428 change checking point of "neglecting doppler broadening" flag +// 080428 change checking point of "neglecting doppler broadening" flag // from GetCrossSection to BuildPhysicsTable by T. Koi // 081024 G4NucleiPropertiesTable:: to G4NucleiProperties:: // // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPInelasticData.hh" -#include "G4ParticleHPManager.hh" -#include "G4Neutron.hh" + #include "G4ElementTable.hh" -#include "G4ParticleHPData.hh" #include "G4HadronicParameters.hh" +#include "G4Neutron.hh" #include "G4NucleiProperties.hh" +#include "G4ParticleHPData.hh" +#include "G4ParticleHPManager.hh" #include "G4Pow.hh" G4ParticleHPInelasticData::G4ParticleHPInelasticData(G4ParticleDefinition* projectile) @@ -50,146 +51,156 @@ G4ParticleHPInelasticData::G4ParticleHPInelasticData(G4ParticleDefinition* proje { const char* dataDirVariable; G4String particleName; - if( projectile == G4Neutron::Neutron() ) { + if (projectile == G4Neutron::Neutron()) { dataDirVariable = "G4NEUTRONHPDATA"; - }else if( projectile == G4Proton::Proton() ) { + } + else if (projectile == G4Proton::Proton()) { dataDirVariable = "G4PROTONHPDATA"; particleName = "Proton"; - }else if( projectile == G4Deuteron::Deuteron() ) { + } + else if (projectile == G4Deuteron::Deuteron()) { dataDirVariable = "G4DEUTERONHPDATA"; particleName = "Deuteron"; - }else if( projectile == G4Triton::Triton() ) { + } + else if (projectile == G4Triton::Triton()) { dataDirVariable = "G4TRITONHPDATA"; particleName = "Triton"; - }else if( projectile == G4He3::He3() ) { + } + else if (projectile == G4He3::He3()) { dataDirVariable = "G4HE3HPDATA"; particleName = "He3"; - }else if( projectile == G4Alpha::Alpha() ) { + } + else if (projectile == G4Alpha::Alpha()) { dataDirVariable = "G4ALPHAHPDATA"; particleName = "Alpha"; - } else { - G4String message("G4ParticleHPInelasticData may only be called for neutron, proton, deuteron, triton, He3 or alpha, while it is called for " + projectile->GetParticleName()); - throw G4HadronicException(__FILE__, __LINE__,message.c_str()); } - G4String dataName = projectile->GetParticleName()+"HPInelasticXS"; - dataName.at(0) = (char)std::toupper(dataName.at(0)) ; - SetName( dataName ); - - if ( !G4FindDataDir(dataDirVariable) && !G4FindDataDir( "G4PARTICLEHPDATA" ) ){ - G4String message("Please setenv G4PARTICLEHPDATA (recommended) or, at least setenv " + - G4String(dataDirVariable) + " to point to the " + projectile->GetParticleName() + " cross-section files."); - throw G4HadronicException(__FILE__, __LINE__,message.c_str()); + else { + G4String message( + "G4ParticleHPInelasticData may only be called for neutron, proton, deuteron, triton, He3 or " + "alpha, while it is called for " + + projectile->GetParticleName()); + throw G4HadronicException(__FILE__, __LINE__, message.c_str()); + } + G4String dataName = projectile->GetParticleName() + "HPInelasticXS"; + dataName.at(0) = (char)std::toupper(dataName.at(0)); + SetName(dataName); + + if ((G4FindDataDir(dataDirVariable) == nullptr) && (G4FindDataDir("G4PARTICLEHPDATA") == nullptr)) + { + G4String message("Please setenv G4PARTICLEHPDATA (recommended) or, at least setenv " + + G4String(dataDirVariable) + " to point to the " + + projectile->GetParticleName() + " cross-section files."); + throw G4HadronicException(__FILE__, __LINE__, message.c_str()); } G4String dirName; - if ( G4FindDataDir(dataDirVariable) ) { + if (G4FindDataDir(dataDirVariable) != nullptr) { dirName = G4FindDataDir(dataDirVariable); - } else { - G4String baseName = G4FindDataDir( "G4PARTICLEHPDATA" ); + } + else { + G4String baseName = G4FindDataDir("G4PARTICLEHPDATA"); dirName = baseName + "/" + particleName; } - #ifdef G4VERBOSE - if ( G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) { - G4cout << "@@@ G4ParticleHPInelasticData instantiated for particle " << projectile->GetParticleName() << " data directory variable is " << dataDirVariable << " pointing to " << dirName << G4endl; +#ifdef G4VERBOSE + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { + G4cout << "@@@ G4ParticleHPInelasticData instantiated for particle " + << projectile->GetParticleName() << " data directory variable is " << dataDirVariable + << " pointing to " << dirName << G4endl; } - #endif +#endif - SetMinKinEnergy( 0*CLHEP::MeV ); - SetMaxKinEnergy( 20*CLHEP::MeV ); + SetMinKinEnergy(0 * CLHEP::MeV); + SetMaxKinEnergy(20 * CLHEP::MeV); - theCrossSections = 0; - theProjectile=projectile; + theCrossSections = nullptr; + theProjectile = projectile; theHPData = nullptr; instanceOfWorker = false; - if ( G4Threading::IsMasterThread() ) { - theHPData = new G4ParticleHPData( theProjectile ); - } else { + if (G4Threading::IsMasterThread()) { + theHPData = new G4ParticleHPData(theProjectile); + } + else { instanceOfWorker = true; } element_cache = nullptr; material_cache = nullptr; - ke_cache = 0.0; - xs_cache = 0.0; + ke_cache = 0.0; + xs_cache = 0.0; } - + G4ParticleHPInelasticData::~G4ParticleHPInelasticData() { - if ( theCrossSections != nullptr && instanceOfWorker != true ) { - theCrossSections->clearAndDestroy(); - delete theCrossSections; - theCrossSections = nullptr; - } - if ( theHPData != nullptr && instanceOfWorker != true ) { - delete theHPData; - theHPData = nullptr; - } + if (theCrossSections != nullptr && !instanceOfWorker) { + theCrossSections->clearAndDestroy(); + delete theCrossSections; + theCrossSections = nullptr; + } + if (theHPData != nullptr && !instanceOfWorker) { + delete theHPData; + theHPData = nullptr; + } } -G4bool G4ParticleHPInelasticData::IsIsoApplicable( const G4DynamicParticle* dp , - G4int /*Z*/ , G4int /*A*/ , - const G4Element* /*elm*/ , - const G4Material* /*mat*/ ) +G4bool G4ParticleHPInelasticData::IsIsoApplicable(const G4DynamicParticle* dp, G4int /*Z*/, + G4int /*A*/, const G4Element* /*elm*/, + const G4Material* /*mat*/) { - G4double eKin = dp->GetKineticEnergy(); - if ( eKin > GetMaxKinEnergy() - || eKin < GetMinKinEnergy() - || dp->GetDefinition() != theProjectile ) return false; - - return true; + G4double eKin = dp->GetKineticEnergy(); + return eKin <= GetMaxKinEnergy() && eKin >= GetMinKinEnergy() + && dp->GetDefinition() == theProjectile; } -G4double G4ParticleHPInelasticData::GetIsoCrossSection( const G4DynamicParticle* dp , - G4int /*Z*/ , G4int /*A*/ , - const G4Isotope* /*iso*/ , - const G4Element* element , - const G4Material* material ) +G4double G4ParticleHPInelasticData::GetIsoCrossSection(const G4DynamicParticle* dp, G4int /*Z*/, + G4int /*A*/, const G4Isotope* /*iso*/, + const G4Element* element, + const G4Material* material) { - if ( dp->GetKineticEnergy() == ke_cache && element == element_cache - && material == material_cache ) return xs_cache; - - ke_cache = dp->GetKineticEnergy(); - element_cache = element; - material_cache = material; - G4double xs = GetCrossSection( dp , element , material->GetTemperature() ); - xs_cache = xs; - return xs; + if (dp->GetKineticEnergy() == ke_cache && element == element_cache && material == material_cache) + return xs_cache; + + ke_cache = dp->GetKineticEnergy(); + element_cache = element; + material_cache = material; + G4double xs = GetCrossSection(dp, element, material->GetTemperature()); + xs_cache = xs; + return xs; } -void G4ParticleHPInelasticData::BuildPhysicsTable( const G4ParticleDefinition& projectile ) +void G4ParticleHPInelasticData::BuildPhysicsTable(const G4ParticleDefinition& projectile) { - if ( G4Threading::IsWorkerThread() ) { - theCrossSections = G4ParticleHPManager::GetInstance()->GetInelasticCrossSections( &projectile ); - return; - } else { - if ( theHPData == nullptr ) theHPData = G4ParticleHPData::Instance( const_cast ( &projectile ) ); - } + if (G4Threading::IsWorkerThread()) { + theCrossSections = G4ParticleHPManager::GetInstance()->GetInelasticCrossSections(&projectile); + return; + } + if (theHPData == nullptr) + theHPData = G4ParticleHPData::Instance(const_cast(&projectile)); std::size_t numberOfElements = G4Element::GetNumberOfElements(); - if ( theCrossSections == nullptr ) - theCrossSections = new G4PhysicsTable( numberOfElements ); + if (theCrossSections == nullptr) + theCrossSections = new G4PhysicsTable(numberOfElements); else theCrossSections->clearAndDestroy(); // make a PhysicsVector for each element - static G4ThreadLocal G4ElementTable *theElementTable = nullptr ; - if (!theElementTable) theElementTable= G4Element::GetElementTable(); - for( std::size_t i=0; iMakePhysicsVector((*theElementTable)[i], this); theCrossSections->push_back(physVec); } - G4ParticleHPManager::GetInstance()->RegisterInelasticCrossSections( &projectile , theCrossSections ); + G4ParticleHPManager::GetInstance()->RegisterInelasticCrossSections(&projectile, theCrossSections); } void G4ParticleHPInelasticData::DumpPhysicsTable(const G4ParticleDefinition& projectile) { - if(&projectile!=theProjectile) - throw G4HadronicException(__FILE__, __LINE__, "Attempt to use ParticleHP data for a wrong projectile!!!"); + if (&projectile != theProjectile) + throw G4HadronicException(__FILE__, __LINE__, + "Attempt to use ParticleHP data for a wrong projectile!!!"); #ifdef G4VERBOSE - if ( G4HadronicParameters::Instance()->GetVerboseLevel() == 0 ) return; + if (G4HadronicParameters::Instance()->GetVerboseLevel() == 0) return; // Dump element based cross section // range 10e-5 eV to 20 MeV @@ -198,7 +209,7 @@ void G4ParticleHPInelasticData::DumpPhysicsTable(const G4ParticleDefinition& pro G4cout << G4endl; G4cout << G4endl; - G4cout << "Inelastic Cross Section of Neutron HP"<< G4endl; + G4cout << "Inelastic Cross Section of Neutron HP" << G4endl; G4cout << "(Pointwise cross-section at 0 Kelvin.)" << G4endl; G4cout << G4endl; G4cout << "Name of Element" << G4endl; @@ -206,34 +217,31 @@ void G4ParticleHPInelasticData::DumpPhysicsTable(const G4ParticleDefinition& pro G4cout << G4endl; std::size_t numberOfElements = G4Element::GetNumberOfElements(); - static G4ThreadLocal G4ElementTable *theElementTable = nullptr ; - if (!theElementTable) theElementTable= G4Element::GetElementTable(); + static G4ThreadLocal G4ElementTable* theElementTable = nullptr; + if (theElementTable == nullptr) theElementTable = G4Element::GetElementTable(); - for ( std::size_t i = 0 ; i < numberOfElements ; ++i ) - { - G4cout << (*theElementTable)[i]->GetName() << G4endl; - - G4int ie = 0; - - for ( ie = 0 ; ie < 130 ; ie++ ) - { - G4double eKinetic = 1.0e-5 * G4Pow::GetInstance()->powA ( 10.0 , ie/10.0 ) *CLHEP::eV; - G4bool outOfRange = false; - - if ( eKinetic < 20*CLHEP::MeV ) - { - G4cout << eKinetic/CLHEP::eV << " " - << (*((*theCrossSections)(i))).GetValue(eKinetic, outOfRange)/CLHEP::barn - << G4endl; - } - } - G4cout << G4endl; + for (std::size_t i = 0; i < numberOfElements; ++i) { + G4cout << (*theElementTable)[i]->GetName() << G4endl; + + G4int ie = 0; + + for (ie = 0; ie < 130; ie++) { + G4double eKinetic = 1.0e-5 * G4Pow::GetInstance()->powA(10.0, ie / 10.0) * CLHEP::eV; + G4bool outOfRange = false; + + if (eKinetic < 20 * CLHEP::MeV) { + G4cout << eKinetic / CLHEP::eV << " " + << (*((*theCrossSections)(i))).GetValue(eKinetic, outOfRange) / CLHEP::barn + << G4endl; + } + } + G4cout << G4endl; } #endif } -G4double G4ParticleHPInelasticData:: -GetCrossSection(const G4DynamicParticle* projectile, const G4Element*anE, G4double aT) +G4double G4ParticleHPInelasticData::GetCrossSection(const G4DynamicParticle* projectile, + const G4Element* anE, G4double aT) { G4double result = 0; G4bool outOfRange; @@ -242,72 +250,72 @@ GetCrossSection(const G4DynamicParticle* projectile, const G4Element*anE, G4doub // prepare neutron G4double eKinetic = projectile->GetKineticEnergy(); - if ( G4ParticleHPManager::GetInstance()->GetNeglectDoppler() ) - { - //NEGLECT_DOPPLER - G4double factor = 1.0; - if ( eKinetic < aT * CLHEP::k_Boltzmann ) - { - // below 0.1 eV neutrons - // Have to do some, but now just igonre. - // Will take care after performance check. - // factor = factor * targetV; - } - return ( (*((*theCrossSections)(index))).GetValue(eKinetic, outOfRange) )* factor; - } - - G4ReactionProduct theNeutron( projectile->GetDefinition() ); - theNeutron.SetMomentum( projectile->GetMomentum() ); - theNeutron.SetKineticEnergy( eKinetic ); + if (G4ParticleHPManager::GetInstance()->GetNeglectDoppler()) { + // NEGLECT_DOPPLER + G4double factor = 1.0; + if (eKinetic < aT * CLHEP::k_Boltzmann) { + // below 0.1 eV neutrons + // Have to do some, but now just igonre. + // Will take care after performance check. + // factor = factor * targetV; + } + return ((*((*theCrossSections)(index))).GetValue(eKinetic, outOfRange)) * factor; + } + + G4ReactionProduct theNeutron(projectile->GetDefinition()); + theNeutron.SetMomentum(projectile->GetMomentum()); + theNeutron.SetKineticEnergy(eKinetic); // prepare thermal nucleus G4Nucleus aNuc; G4double eps = 0.0001; G4double theA = anE->GetN(); G4double theZ = anE->GetZ(); - G4double eleMass; - eleMass = G4NucleiProperties::GetNuclearMass(static_cast(theA+eps), static_cast(theZ+eps) ); - + G4double eleMass; + eleMass = G4NucleiProperties::GetNuclearMass(static_cast(theA + eps), + static_cast(theZ + eps)); + G4ReactionProduct boosted; G4double aXsection; - + // MC integration loop G4int counter = 0; G4int failCount = 0; - G4double buffer = 0; G4int size = G4int(std::max(10., aT/60*CLHEP::kelvin)); - G4ThreeVector neutronVelocity = 1./theProjectile->GetPDGMass()*theNeutron.GetMomentum(); + G4double buffer = 0; + G4int size = G4int(std::max(10., aT / 60 * CLHEP::kelvin)); + G4ThreeVector neutronVelocity = 1. / theProjectile->GetPDGMass() * theNeutron.GetMomentum(); G4double neutronVMag = neutronVelocity.mag(); #ifndef G4PHP_DOPPLER_LOOP_ONCE - while(counter == 0 || std::abs(buffer-result/std::max(1,counter)) > 0.01*buffer) // Loop checking, 11.05.2015, T. Koi + while (counter == 0 + || std::abs(buffer - result / std::max(1, counter)) + > 0.01 * buffer) // Loop checking, 11.05.2015, T. Koi { - if(counter) buffer = result/counter; - while (counterGetPDGMass(), aT ); + G4ReactionProduct aThermalNuc = + aNuc.GetThermalNucleus(eleMass / G4Neutron::Neutron()->GetPDGMass(), aT); boosted.Lorentz(theNeutron, aThermalNuc); G4double theEkin = boosted.GetKineticEnergy(); aXsection = (*((*theCrossSections)(index))).GetValue(theEkin, outOfRange); - if(aXsection <0) - { - if(failCount<1000) - { - ++failCount; + if (aXsection < 0) { + if (failCount < 1000) { + ++failCount; #ifndef G4PHP_DOPPLER_LOOP_ONCE - --counter; - continue; + --counter; + continue; #endif - } - else - { - aXsection = 0; - } + } + else { + aXsection = 0; + } } // velocity correction. - G4ThreeVector targetVelocity = 1./aThermalNuc.GetMass()*aThermalNuc.GetMomentum(); - aXsection *= (targetVelocity-neutronVelocity).mag()/neutronVMag; + G4ThreeVector targetVelocity = 1. / aThermalNuc.GetMass() * aThermalNuc.GetMomentum(); + aXsection *= (targetVelocity - neutronVelocity).mag() / neutronVMag; result += aXsection; } #ifndef G4PHP_DOPPLER_LOOP_ONCE @@ -319,17 +327,18 @@ GetCrossSection(const G4DynamicParticle* projectile, const G4Element*anE, G4doub return result; } -G4int G4ParticleHPInelasticData::GetVerboseLevel() const +G4int G4ParticleHPInelasticData::GetVerboseLevel() const { - return G4ParticleHPManager::GetInstance()->GetVerboseLevel(); + return G4ParticleHPManager::GetInstance()->GetVerboseLevel(); } -void G4ParticleHPInelasticData::SetVerboseLevel( G4int newValue ) +void G4ParticleHPInelasticData::SetVerboseLevel(G4int newValue) { - G4ParticleHPManager::GetInstance()->SetVerboseLevel(newValue); + G4ParticleHPManager::GetInstance()->SetVerboseLevel(newValue); } void G4ParticleHPInelasticData::CrossSectionDescription(std::ostream& outFile) const { - outFile << "Extension of High Precision cross section for inelastic reaction of proton, deuteron, triton, He3 and alpha below 20MeV\n"; + outFile << "Extension of High Precision cross section for inelastic reaction of proton, " + "deuteron, triton, He3 and alpha below 20MeV\n"; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInterpolator.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInterpolator.cc index db9cf0eb174..6dd75784c42 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInterpolator.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPInterpolator.cc @@ -30,124 +30,127 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPInterpolator.hh" + #include "G4Pow.hh" - G4double G4ParticleHPInterpolator:: - GetBinIntegral(const G4InterpolationScheme & aScheme, - const G4double x1,const G4double x2,const G4double y1,const G4double y2) - { // inline again later on @@@@ - G4double result = 0; - if(aScheme==HISTO||aScheme==CHISTO||aScheme==UHISTO) - { - result = y1*(x2-x1); +G4double G4ParticleHPInterpolator::GetBinIntegral(const G4InterpolationScheme& aScheme, + const G4double x1, const G4double x2, + const G4double y1, const G4double y2) +{ // inline again later on @@@@ + G4double result = 0; + if (aScheme == HISTO || aScheme == CHISTO || aScheme == UHISTO) { + result = y1 * (x2 - x1); + } + else if (aScheme == LINLIN || aScheme == CLINLIN || aScheme == ULINLIN) { + result = 0.5 * (y2 + y1) * (x2 - x1); + } + else if (aScheme == LINLOG || aScheme == CLINLOG || aScheme == ULINLOG) { + if (x1 == 0) + result = y1; + else if (x2 == 0) + result = y2; + else { + G4double b = (y2 - y1) / (G4Log(x2) - G4Log(x1)); + G4double a = y1 - b * G4Log(x1); + result = (a - b) * (x2 - x1) + b * (x2 * G4Log(x2) - x1 * G4Log(x1)); } - else if(aScheme==LINLIN||aScheme==CLINLIN||aScheme==ULINLIN) - { - result = 0.5*(y2+y1)*(x2-x1); + } + else if (aScheme == LOGLIN || aScheme == CLOGLIN || aScheme == ULOGLIN) { + if (y1 == 0 || y2 == 0) { + result = 0; } - else if(aScheme==LINLOG||aScheme==CLINLOG||aScheme==ULINLOG) - { - if(x1==0) result = y1; - else if(x2==0) result = y2; - else - { - G4double b = (y2-y1)/(G4Log(x2)-G4Log(x1)); - G4double a = y1 - b*G4Log(x1); - result = (a-b)*(x2-x1) + b*(x2*G4Log(x2)-x1*G4Log(x1)); + else { + // G4double b = (std::log(y2)-std::log(y1))/(x2-x1); + // G4double a = std::log(y1) - b*x1; + //*************************************************************** + // EMendoza: + // result = (std::exp(a)/b)*(std::exp(b*x2)-std::exp(b*x1)); + //*************************************************************** + if (y1 != y2) { + result = (x2 - x1) * (y2 - y1) / G4Log(y2 / y1); } - } - else if(aScheme==LOGLIN||aScheme==CLOGLIN||aScheme==ULOGLIN) - { - if ( y1==0||y2==0 ) { - result =0; - } else { - // G4double b = (std::log(y2)-std::log(y1))/(x2-x1); - // G4double a = std::log(y1) - b*x1; - //*************************************************************** - //EMendoza: - //result = (std::exp(a)/b)*(std::exp(b*x2)-std::exp(b*x1)); - //*************************************************************** - if ( y1!=y2 ) { - result = (x2-x1)*(y2-y1)/G4Log(y2/y1); - } else { - result = y2*(x2-x1); - } - //*************************************************************** + else { + result = y2 * (x2 - x1); } + //*************************************************************** } - else if(aScheme==LOGLOG||aScheme==CLOGLOG||aScheme==ULOGLOG) - { - if(x1==0) result = y1; - else if(x2==0) result = y2; - else if(y1==0||y2==0) result =0; - else - { - G4double b = (G4Log(y2)-G4Log(y1))/(G4Log(x2)-G4Log(x1)); - G4double a = G4Log(y1) - b*G4Log(x1);; - result = (G4Exp(a)/(b+1))*(G4Pow::GetInstance()->powA(x2,b+1)-G4Pow::GetInstance()->powA(x1,b+1)); - } - } - else - { - throw G4HadronicException(__FILE__, __LINE__, "Unknown interpolation scheme in G4ParticleHPVector::Integrate"); - } - return result; } - G4double G4ParticleHPInterpolator:: - GetWeightedBinIntegral(const G4InterpolationScheme & aScheme, - const G4double x1,const G4double x2,const G4double y1,const G4double y2) - { // inline again later on @@@@ - G4double result = 0; - if(aScheme==HISTO||aScheme==CHISTO||aScheme==UHISTO) - { - result = 0.5*y1*(x2*x2-x1*x1); - } - else if(aScheme==LINLIN||aScheme==CLINLIN||aScheme==ULINLIN) - { - // G4double b = (y2-y1)/(x2-x1); - // G4double a = y1 - b*x1; - // result = 0.5*a*(x2*x2-x1*x1) + (b/3.)*(x2*x2*x2-x1*x1*x1); - // Factor out x2-x1 to avoid divide by zero - - result = (y1*x2 - y2*x1)*(x2 + x1)/2. + (y2-y1)*(x2*x2 + x2*x1 + x1*x1)/3.; - } - else if(aScheme==LINLOG||aScheme==CLINLOG||aScheme==ULINLOG) - { - if(x1==0) result = y1; - else if(x2==0) result = y2; - else - { - G4double b = (y2-y1)/(G4Log(x2)-G4Log(x1)); - G4double a = y1 - b*G4Log(x1); - result = ( x2*x2/2. * (a-b/2.+b*G4Log(x2)) ) - -( x1*x1/2. * (a-b/2.+b*G4Log(x1)) ); - } + else if (aScheme == LOGLOG || aScheme == CLOGLOG || aScheme == ULOGLOG) { + if (x1 == 0) + result = y1; + else if (x2 == 0) + result = y2; + else if (y1 == 0 || y2 == 0) + result = 0; + else { + G4double b = (G4Log(y2) - G4Log(y1)) / (G4Log(x2) - G4Log(x1)); + G4double a = G4Log(y1) - b * G4Log(x1); + ; + result = (G4Exp(a) / (b + 1)) + * (G4Pow::GetInstance()->powA(x2, b + 1) - G4Pow::GetInstance()->powA(x1, b + 1)); } - else if(aScheme==LOGLIN||aScheme==CLOGLIN||aScheme==ULOGLIN) - { - if(y1==0||y2==0) result = 0; - else - { - G4double b = (G4Log(y2)-G4Log(y1))/(x2-x1); - G4double a = G4Log(y1) - b*x1; - result = G4Exp(a)/(b*b)*( G4Exp(b*x2)*(b*x2-1.) - G4Exp(b*x1)*(b*x1-1.) ); - } + } + else { + throw G4HadronicException(__FILE__, __LINE__, + "Unknown interpolation scheme in G4ParticleHPVector::Integrate"); + } + return result; +} +G4double G4ParticleHPInterpolator::GetWeightedBinIntegral(const G4InterpolationScheme& aScheme, + const G4double x1, const G4double x2, + const G4double y1, const G4double y2) +{ // inline again later on @@@@ + G4double result = 0; + if (aScheme == HISTO || aScheme == CHISTO || aScheme == UHISTO) { + result = 0.5 * y1 * (x2 * x2 - x1 * x1); + } + else if (aScheme == LINLIN || aScheme == CLINLIN || aScheme == ULINLIN) { + // G4double b = (y2-y1)/(x2-x1); + // G4double a = y1 - b*x1; + // result = 0.5*a*(x2*x2-x1*x1) + (b/3.)*(x2*x2*x2-x1*x1*x1); + // Factor out x2-x1 to avoid divide by zero + + result = (y1 * x2 - y2 * x1) * (x2 + x1) / 2. + (y2 - y1) * (x2 * x2 + x2 * x1 + x1 * x1) / 3.; + } + else if (aScheme == LINLOG || aScheme == CLINLOG || aScheme == ULINLOG) { + if (x1 == 0) + result = y1; + else if (x2 == 0) + result = y2; + else { + G4double b = (y2 - y1) / (G4Log(x2) - G4Log(x1)); + G4double a = y1 - b * G4Log(x1); + result = (x2 * x2 / 2. * (a - b / 2. + b * G4Log(x2))) + - (x1 * x1 / 2. * (a - b / 2. + b * G4Log(x1))); } - else if(aScheme==LOGLOG||aScheme==CLOGLOG||aScheme==ULOGLOG) - { - if(x1==0) result = y1; - else if(x2==0) result = y2; - else if(y1==0||y2==0) result = 0; - else - { - G4double b = (G4Log(y2)-G4Log(y1))/(G4Log(x2)-G4Log(x1)); - G4double a = G4Log(y1) - b*G4Log(x1);; - result = G4Exp(a)/(b+2.)*( G4Pow::GetInstance()->powA(x2, b+2.) - G4Pow::GetInstance()->powA(x1, b+2) ); - } + } + else if (aScheme == LOGLIN || aScheme == CLOGLIN || aScheme == ULOGLIN) { + if (y1 == 0 || y2 == 0) + result = 0; + else { + G4double b = (G4Log(y2) - G4Log(y1)) / (x2 - x1); + G4double a = G4Log(y1) - b * x1; + result = G4Exp(a) / (b * b) * (G4Exp(b * x2) * (b * x2 - 1.) - G4Exp(b * x1) * (b * x1 - 1.)); } - else - { - throw G4HadronicException(__FILE__, __LINE__, "Unknown interpolation scheme in G4ParticleHPVector::Integrate"); + } + else if (aScheme == LOGLOG || aScheme == CLOGLOG || aScheme == ULOGLOG) { + if (x1 == 0) + result = y1; + else if (x2 == 0) + result = y2; + else if (y1 == 0 || y2 == 0) + result = 0; + else { + G4double b = (G4Log(y2) - G4Log(y1)) / (G4Log(x2) - G4Log(x1)); + G4double a = G4Log(y1) - b * G4Log(x1); + ; + result = G4Exp(a) / (b + 2.) + * (G4Pow::GetInstance()->powA(x2, b + 2.) - G4Pow::GetInstance()->powA(x1, b + 2)); } - return result; } + else { + throw G4HadronicException(__FILE__, __LINE__, + "Unknown interpolation scheme in G4ParticleHPVector::Integrate"); + } + return result; +} diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPIsoData.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPIsoData.cc index de772ac9e20..56b395a2179 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPIsoData.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPIsoData.cc @@ -26,150 +26,174 @@ // J.P. Wellisch, Nov-1996 // A prototype of the low energy neutron transport model. // -//080901 Avoiding troubles which caused by G4PhysicsVecotor of length 0 by T. Koi +// 080901 Avoiding troubles which caused by G4PhysicsVecotor of length 0 by T. Koi // // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPIsoData.hh" -#include "G4ParticleHPManager.hh" -#include "G4ParticleHPDataUsed.hh" + #include "G4Neutron.hh" +#include "G4ParticleHPDataUsed.hh" +#include "G4ParticleHPManager.hh" - //G4bool G4ParticleHPIsoData::Init(G4int A, G4int Z, G4double abun, G4String dirName, G4String aFSType) -G4bool G4ParticleHPIsoData::Init(G4int A, G4int Z, G4int M, G4double abun, G4String dirName, G4String aFSType) - { - theChannelData = 0; - G4double abundance = abun/100.; - G4String filename; - G4bool result = true; - //G4ParticleHPDataUsed aFile = theNames.GetName(A, Z, dirName, aFSType, result); - G4ParticleHPDataUsed aFile = theNames.GetName(A, Z, M, dirName, aFSType, result); - filename = aFile.GetName(); -// if(filename=="") return false; - //std::ifstream theChannel(filename); - std::istringstream theChannel(filename,std::ios::in); - G4ParticleHPManager::GetInstance()->GetDataStream(filename,theChannel); +// G4bool G4ParticleHPIsoData::Init(G4int A, G4int Z, G4double abun, G4String dirName, G4String +// aFSType) +G4bool G4ParticleHPIsoData::Init(G4int A, G4int Z, G4int M, G4double abun, G4String dirName, + G4String aFSType) +{ + theChannelData = nullptr; + G4double abundance = abun / 100.; + G4String filename; + G4bool result = true; + // G4ParticleHPDataUsed aFile = theNames.GetName(A, Z, dirName, aFSType, result); + G4ParticleHPDataUsed aFile = theNames.GetName(A, Z, M, dirName, aFSType, result); + filename = aFile.GetName(); + // if(filename=="") return false; + // std::ifstream theChannel(filename); + std::istringstream theChannel(filename, std::ios::in); + G4ParticleHPManager::GetInstance()->GetDataStream(filename, theChannel); #ifdef G4PHPDEBUG - if(std::getenv("G4ParticleHPDebug")) G4cout << "G4ParticleHPIsoData::Init = "<< filename <<" "<< A << " " << Z <0.0001) ) - { - if(std::getenv("G4ParticleHPDebug")) G4cout << "Skipped = "<< filename <<" "<> dummy >> dummy; - theChannelData = new G4ParticleHPVector; - G4int nData; - theChannel >> nData; - theChannelData->Init(theChannel, nData, CLHEP::eV, abundance*CLHEP::barn); -// G4cout << "Channel Data Statistics: "<GetVectorLength()<> hpw; -// theChannelData->Dump(); -// theChannel.close(); - return result; + + if (Z == 1 && (aFile.GetZ() != Z || std::abs(aFile.GetA() - A) > 0.0001)) { + if (std::getenv("G4ParticleHPDebug") != nullptr) + G4cout << "Skipped = " << filename << " " << A << " " << Z << G4endl; + // 080901 TKDB No more necessary below protection, cross sections set to 0 in G4ParticleHPNames + // And below two lines causes trouble with G4PhysicsVector + // theChannel.close(); + // return false; } - - //void G4ParticleHPIsoData::Init(G4int A, G4int Z, G4double abun) //fill PhysicsVector for this Isotope -#include "G4Proton.hh" + if (!theChannel) { /*theChannel.close()*/ + ; + return false; + } + // accommodating deficiencie of some compilers + if (theChannel.eof()) { /*theChannel.close()*/ + ; + return false; + } + if (!theChannel) { /*theChannel.close()*/ + ; + return false; + } + G4int dummy; + theChannel >> dummy >> dummy; + theChannelData = new G4ParticleHPVector; + G4int nData; + theChannel >> nData; + theChannelData->Init(theChannel, nData, CLHEP::eV, abundance * CLHEP::barn); + // G4cout << "Channel Data Statistics: "<GetVectorLength()<> hpw; + // theChannelData->Dump(); + // theChannel.close(); + return result; +} + +// void G4ParticleHPIsoData::Init(G4int A, G4int Z, G4double abun) //fill PhysicsVector for this +// Isotope +#include "G4Alpha.hh" #include "G4Deuteron.hh" -#include "G4Triton.hh" #include "G4He3.hh" -#include "G4Alpha.hh" -void G4ParticleHPIsoData::Init(G4int A, G4int Z, G4int M,G4double abun, G4ParticleDefinition* projectile, const char* dataDirVariable ) //fill PhysicsVector for this Isotope - { - +#include "G4Proton.hh" +#include "G4Triton.hh" +void G4ParticleHPIsoData::Init(G4int A, G4int Z, G4int M, G4double abun, + G4ParticleDefinition* projectile, + const char* dataDirVariable) // fill PhysicsVector for this Isotope +{ G4String particleName; - if ( projectile == G4Neutron::Neutron() ) { - ; - } else if ( projectile == G4Proton::Proton() ) { - particleName = "Proton"; - } else if ( projectile == G4Deuteron::Deuteron() ) { - particleName = "Deuteron"; - } else if ( projectile == G4Triton::Triton() ) { - particleName = "Triton"; - } else if ( projectile == G4He3::He3() ) { - particleName = "He3"; - } else if ( projectile == G4Alpha::Alpha() ) { - particleName = "Alpha"; - } else { - G4String message("G4ParticleHPInelastic may only be called for neutron, proton, deuteron, triton, He3 or alpha, while it is called for " + projectile->GetParticleName()); - throw G4HadronicException(__FILE__, __LINE__,message.c_str()); + if (projectile == G4Neutron::Neutron()) { + ; + } + else if (projectile == G4Proton::Proton()) { + particleName = "Proton"; + } + else if (projectile == G4Deuteron::Deuteron()) { + particleName = "Deuteron"; + } + else if (projectile == G4Triton::Triton()) { + particleName = "Triton"; + } + else if (projectile == G4He3::He3()) { + particleName = "He3"; + } + else if (projectile == G4Alpha::Alpha()) { + particleName = "Alpha"; + } + else { + G4String message( + "G4ParticleHPInelastic may only be called for neutron, proton, deuteron, triton, He3 or " + "alpha, while it is called for " + + projectile->GetParticleName()); + throw G4HadronicException(__FILE__, __LINE__, message.c_str()); } G4String baseName; - if ( G4FindDataDir( dataDirVariable ) ) { - baseName = G4FindDataDir( dataDirVariable ); - } else { - baseName = G4FindDataDir( "G4PARTICLEHPDATA" ); - baseName += "/" + particleName; + if (G4FindDataDir(dataDirVariable) != nullptr) { + baseName = G4FindDataDir(dataDirVariable); + } + else { + baseName = G4FindDataDir("G4PARTICLEHPDATA"); + baseName += "/" + particleName; } - - // G4String baseName = getenv(dataDirVariable); - G4String dirName; - if( projectile == G4Neutron::Neutron() ){ - dirName = baseName+"/Fission"; - //if(Z>89) - if(Z>87) //TK Modifed for ENDF VII.0 - { - //Init(A, Z, abun, dirName, "/CrossSection/"); - Init(A, Z, M, abun, dirName, "/CrossSection"); - } - else - { - theChannelData = new G4ParticleHPVector; - } - theFissionData = theChannelData; - theChannelData = 0; // fast fix for double delete; revisit later. @@@@@@@ - - dirName = baseName+"/Capture"; - //Init(A, Z, abun, dirName, "/CrossSection/"); - Init(A, Z, M, abun, dirName, "/CrossSection"); - theCaptureData = theChannelData; - theChannelData = 0; - dirName = baseName+"/Elastic"; - //Init(A, Z, abun, dirName, "/CrossSection/"); + // G4String baseName = getenv(dataDirVariable); + G4String dirName; + if (projectile == G4Neutron::Neutron()) { + dirName = baseName + "/Fission"; + // if(Z>89) + if (Z > 87) // TK Modifed for ENDF VII.0 + { + // Init(A, Z, abun, dirName, "/CrossSection/"); Init(A, Z, M, abun, dirName, "/CrossSection"); - theElasticData = theChannelData; - theChannelData = 0; } + else { + theChannelData = new G4ParticleHPVector; + } + theFissionData = theChannelData; + theChannelData = nullptr; // fast fix for double delete; revisit later. @@@@@@@ - dirName = baseName+"/Inelastic"; - //Init(A, Z, abun, dirName, "/CrossSection/"); + dirName = baseName + "/Capture"; + // Init(A, Z, abun, dirName, "/CrossSection/"); Init(A, Z, M, abun, dirName, "/CrossSection"); - theInelasticData = theChannelData; - theChannelData = 0; - -// if(theInelasticData!=0) G4cout << "Inelastic Data Statistics: "<GetVectorLength()<GetVectorLength()<GetVectorLength()<GetVectorLength()<Dump(); -// G4cout << "Elastic data"<Dump(); -// G4cout << "Capture data"<Dump(); -// G4cout << "Fission data"<Dump(); + theCaptureData = theChannelData; + theChannelData = nullptr; + dirName = baseName + "/Elastic"; + // Init(A, Z, abun, dirName, "/CrossSection/"); + Init(A, Z, M, abun, dirName, "/CrossSection"); + theElasticData = theChannelData; + theChannelData = nullptr; } - - G4String G4ParticleHPIsoData::GetName(G4int A, G4int Z, G4String base, G4String rest) - { - G4bool dbool; - return (theNames.GetName(A, Z, base, rest, dbool)).GetName(); - } + dirName = baseName + "/Inelastic"; + // Init(A, Z, abun, dirName, "/CrossSection/"); + Init(A, Z, M, abun, dirName, "/CrossSection"); + theInelasticData = theChannelData; + theChannelData = nullptr; + + // if(theInelasticData!=0) G4cout << "Inelastic Data Statistics: + // "<GetVectorLength()<GetVectorLength()<GetVectorLength()<GetVectorLength()<Dump(); + // G4cout << "Elastic data"<Dump(); + // G4cout << "Capture data"<Dump(); + // G4cout << "Fission data"<Dump(); +} + +G4String G4ParticleHPIsoData::GetName(G4int A, G4int Z, G4String base, G4String rest) +{ + G4bool dbool; + return (theNames.GetName(A, Z, base, rest, dbool)).GetName(); +} diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPIsotropic.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPIsotropic.cc index aadadd3891d..2847750bef0 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPIsotropic.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPIsotropic.cc @@ -30,82 +30,73 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPIsotropic.hh" -#include "G4PhysicalConstants.hh" -#include "G4SystemOfUnits.hh" -#include "Randomize.hh" -#include "G4Gamma.hh" + +#include "G4Alpha.hh" +#include "G4Deuteron.hh" #include "G4Electron.hh" -#include "G4Positron.hh" +#include "G4Gamma.hh" +#include "G4He3.hh" +#include "G4IonTable.hh" #include "G4Neutron.hh" +#include "G4PhysicalConstants.hh" +#include "G4Positron.hh" #include "G4Proton.hh" -#include "G4Deuteron.hh" +#include "G4SystemOfUnits.hh" #include "G4Triton.hh" -#include "G4He3.hh" -#include "G4Alpha.hh" -#include "G4IonTable.hh" +#include "Randomize.hh" +void G4ParticleHPIsotropic::Init(std::istream&) {} -void G4ParticleHPIsotropic::Init(std::istream & ) +G4ReactionProduct* G4ParticleHPIsotropic::Sample(G4double anEnergy, G4double massCode, G4double) { -} + auto result = new G4ReactionProduct; + auto Z = static_cast(massCode / 1000); + auto A = static_cast(massCode - 1000 * Z); -G4ReactionProduct * G4ParticleHPIsotropic::Sample(G4double anEnergy, G4double massCode, G4double ) -{ - G4ReactionProduct * result = new G4ReactionProduct; - G4int Z = static_cast(massCode/1000); - G4int A = static_cast(massCode-1000*Z); + if (massCode == 0) { + result->SetDefinition(G4Gamma::Gamma()); + } + else if (A == 0) { + result->SetDefinition(G4Electron::Electron()); + if (Z == 1) result->SetDefinition(G4Positron::Positron()); + } + else if (A == 1) { + result->SetDefinition(G4Neutron::Neutron()); + if (Z == 1) result->SetDefinition(G4Proton::Proton()); + } + else if (A == 2) { + result->SetDefinition(G4Deuteron::Deuteron()); + } + else if (A == 3) { + result->SetDefinition(G4Triton::Triton()); + if (Z == 2) result->SetDefinition(G4He3::He3()); + } + else if (A == 4) { + result->SetDefinition(G4Alpha::Alpha()); + // 110607 TK modified following parts for migration to G4NDL3.15 (ENDF VII.r0) + // if(Z!=2) throw G4HadronicException(__FILE__, __LINE__, "Unknown ion case 1"); + if (Z != 2) { + result->SetDefinition(G4IonTable::GetIonTable()->GetIon(Z, A, 0.0)); + } + } + else { + // 110607 TK modified following parts for migration to G4NDL3.15 (ENDF VII.r0) + result->SetDefinition(G4IonTable::GetIonTable()->GetIon(Z, A, 0.0)); + // throw G4HadronicException(__FILE__, __LINE__, "G4ParticleHPIsotropic: Unknown ion case 2"); + } - if(massCode==0) - { - result->SetDefinition(G4Gamma::Gamma()); - } - else if(A==0) - { - result->SetDefinition(G4Electron::Electron()); - if(Z==1) result->SetDefinition(G4Positron::Positron()); - } - else if(A==1) - { - result->SetDefinition(G4Neutron::Neutron()); - if(Z==1) result->SetDefinition(G4Proton::Proton()); - } - else if(A==2) - { - result->SetDefinition(G4Deuteron::Deuteron()); - } - else if(A==3) - { - result->SetDefinition(G4Triton::Triton()); - if(Z==2) result->SetDefinition(G4He3::He3()); - } - else if(A==4) - { - result->SetDefinition(G4Alpha::Alpha()); - //110607 TK modified following parts for migration to G4NDL3.15 (ENDF VII.r0) - //if(Z!=2) throw G4HadronicException(__FILE__, __LINE__, "Unknown ion case 1"); - if(Z!=2) - { - result->SetDefinition( G4IonTable::GetIonTable()->GetIon ( Z , A , 0.0 ) ); - } - } - else - { - //110607 TK modified following parts for migration to G4NDL3.15 (ENDF VII.r0) - result->SetDefinition( G4IonTable::GetIonTable()->GetIon ( Z , A , 0.0 ) ); - //throw G4HadronicException(__FILE__, __LINE__, "G4ParticleHPIsotropic: Unknown ion case 2"); - } + // Bug #1745 DHW G4double cosTh = G4UniformRand(); + G4double cosTh = 2. * G4UniformRand() - 1.; + G4double phi = twopi * G4UniformRand(); + G4double theta = std::acos(cosTh); + G4double sinth = std::sin(theta); - // Bug #1745 DHW G4double cosTh = G4UniformRand(); - G4double cosTh = 2.*G4UniformRand()-1.; - G4double phi = twopi*G4UniformRand(); - G4double theta = std::acos(cosTh); - G4double sinth = std::sin(theta); - -// we need the the Q value of the reaction - result->SetKineticEnergy(std::max(0.001*MeV, anEnergy+GetQValue())); - G4double mtot = result->GetTotalMomentum(); - G4ThreeVector tempVector(mtot*sinth*std::cos(phi), mtot*sinth*std::sin(phi), mtot*cosTh); - result->SetMomentum(tempVector); + // we need the the Q value of the reaction + result->SetKineticEnergy(std::max(0.001 * MeV, anEnergy + GetQValue())); + G4double mtot = result->GetTotalMomentum(); + G4ThreeVector tempVector(mtot * sinth * std::cos(phi), mtot * sinth * std::sin(phi), + mtot * cosTh); + result->SetMomentum(tempVector); - return result; + return result; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPJENDLHEData.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPJENDLHEData.cc index 80682859cb3..cbeabe4dd84 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPJENDLHEData.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPJENDLHEData.cc @@ -32,318 +32,284 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPJENDLHEData.hh" -#include "G4SystemOfUnits.hh" -#include "G4PhysicsFreeVector.hh" + #include "G4ElementTable.hh" #include "G4ParticleHPData.hh" +#include "G4PhysicsFreeVector.hh" #include "G4Pow.hh" +#include "G4SystemOfUnits.hh" -G4bool G4ParticleHPJENDLHEData::IsApplicable(const G4DynamicParticle*aP, const G4Element* anE) +G4bool G4ParticleHPJENDLHEData::IsApplicable(const G4DynamicParticle* aP, const G4Element* anE) { - G4bool result = true; - G4double eKin = aP->GetKineticEnergy(); - //if(eKin>20*MeV||aP->GetDefinition()!=G4Neutron::Neutron()) result = false; - if ( eKin < 20*MeV || 3*GeV < eKin || aP->GetDefinition()!=G4Neutron::Neutron() ) - { - result = false; - } -// Element Check - else if ( !(vElement[ anE->GetIndex() ]) ) result = false; - - return result; -} + G4bool result = true; + G4double eKin = aP->GetKineticEnergy(); + // if(eKin>20*MeV||aP->GetDefinition()!=G4Neutron::Neutron()) result = false; + if (eKin < 20 * MeV || 3 * GeV < eKin || aP->GetDefinition() != G4Neutron::Neutron()) { + result = false; + } + // Element Check + else if (!(vElement[anE->GetIndex()])) + result = false; + return result; +} G4ParticleHPJENDLHEData::G4ParticleHPJENDLHEData() { - for ( std::map< G4int , std::map< G4int , G4PhysicsVector* >* >::iterator itZ = mIsotope.begin(); - itZ != mIsotope.end(); ++itZ ) { - std::map< G4int , G4PhysicsVector* >* pointer_map = itZ->second; - if ( pointer_map ) { - for ( std::map< G4int , G4PhysicsVector* >::iterator itA = pointer_map->begin(); - itA != pointer_map->end() ; ++itA ) { - G4PhysicsVector* pointerPhysicsVector = itA->second; - if ( pointerPhysicsVector ) { + for (auto& itZ : mIsotope) { + std::map* pointer_map = itZ.second; + if (pointer_map != nullptr) { + for (auto& itA : *pointer_map) { + G4PhysicsVector* pointerPhysicsVector = itA.second; + if (pointerPhysicsVector != nullptr) { delete pointerPhysicsVector; - itA->second = NULL; + itA.second = NULL; } } delete pointer_map; - itZ->second = NULL; + itZ.second = NULL; } } mIsotope.clear(); } - -G4ParticleHPJENDLHEData::G4ParticleHPJENDLHEData( G4String reaction , G4ParticleDefinition* pd ) - : G4VCrossSectionDataSet( "JENDLHE"+reaction+"CrossSection" ) +G4ParticleHPJENDLHEData::G4ParticleHPJENDLHEData(G4String reaction, G4ParticleDefinition* pd) + : G4VCrossSectionDataSet("JENDLHE" + reaction + "CrossSection") { - reactionName = reaction; - BuildPhysicsTable( *pd ); + reactionName = reaction; + BuildPhysicsTable(*pd); } +G4ParticleHPJENDLHEData::~G4ParticleHPJENDLHEData() = default; -G4ParticleHPJENDLHEData::~G4ParticleHPJENDLHEData() +void G4ParticleHPJENDLHEData::BuildPhysicsTable(const G4ParticleDefinition& aP) { -} - - -void G4ParticleHPJENDLHEData::BuildPhysicsTable( const G4ParticleDefinition& aP ) -{ - particleName = aP.GetParticleName(); - - G4String baseName = G4FindDataDir( "G4NEUTRONHPDATA" ); - G4String dirName = baseName+"/JENDL_HE/"+particleName+"/"+reactionName ; - G4String aFSType = "/CrossSection/"; - G4ParticleHPNames theNames; - - G4String filename; - - // Create JENDL_HE data - // Create map element or isotope - - std::size_t numberOfElements = G4Element::GetNumberOfElements(); - - // make a PhysicsVector for each element - - static G4ThreadLocal G4ElementTable *theElementTable = 0 ; if (!theElementTable) theElementTable= G4Element::GetElementTable(); - vElement.clear(); - vElement.resize( numberOfElements ); - for ( std::size_t i = 0; i < numberOfElements; ++i ) - { - G4Element* theElement = (*theElementTable)[i]; - vElement[i] = false; - - // isotope - G4int nIso = (G4int)(*theElementTable)[i]->GetNumberOfIsotopes(); - G4int Z = (G4int)(*theElementTable)[i]->GetZ(); - if ( nIso!=0 ) + particleName = aP.GetParticleName(); + + G4String baseName = G4FindDataDir("G4NEUTRONHPDATA"); + G4String dirName = baseName + "/JENDL_HE/" + particleName + "/" + reactionName; + G4String aFSType = "/CrossSection/"; + G4ParticleHPNames theNames; + + G4String filename; + + // Create JENDL_HE data + // Create map element or isotope + + std::size_t numberOfElements = G4Element::GetNumberOfElements(); + + // make a PhysicsVector for each element + + static G4ThreadLocal G4ElementTable* theElementTable = nullptr; + if (theElementTable == nullptr) theElementTable = G4Element::GetElementTable(); + vElement.clear(); + vElement.resize(numberOfElements); + for (std::size_t i = 0; i < numberOfElements; ++i) { + G4Element* theElement = (*theElementTable)[i]; + vElement[i] = false; + + // isotope + auto nIso = (G4int)(*theElementTable)[i]->GetNumberOfIsotopes(); + auto Z = (G4int)(*theElementTable)[i]->GetZ(); + if (nIso != 0) { + G4bool found_at_least_one = false; + for (G4int i1 = 0; i1 < nIso; ++i1) { + G4int A = theElement->GetIsotope(i1)->GetN(); + + if (isThisNewIsotope(Z, A)) { + std::stringstream ss; + ss << dirName << aFSType << Z << "_" << A << "_" << theNames.GetName(Z - 1); + filename = ss.str(); + std::fstream file; + file.open(filename, std::fstream::in); + G4int dummy; + file >> dummy; + if (file.good()) { + found_at_least_one = true; + + // read the file + G4PhysicsVector* aPhysVec = readAFile(&file); + registAPhysicsVector(Z, A, aPhysVec); + } + else { + // G4cout << "No file for "<< reactionType << " Z=" << Z << ", A=" << A << G4endl; + } + file.close(); + } + else { + found_at_least_one = TRUE; + } + } + if (found_at_least_one) vElement[i] = true; + } + else { + G4StableIsotopes theStableOnes; + G4int first = theStableOnes.GetFirstIsotope(Z); + G4bool found_at_least_one = FALSE; + for (G4int i1 = 0; + i1 < theStableOnes.GetNumberOfIsotopes(static_cast(theElement->GetZ())); i1++) { - G4bool found_at_least_one = false; - for ( G4int i1 = 0; i1 < nIso; ++i1 ) - { - G4int A = theElement->GetIsotope(i1)->GetN(); - - if ( isThisNewIsotope( Z , A ) ) - { - std::stringstream ss; - ss << dirName << aFSType << Z << "_" << A << "_" << theNames.GetName( Z-1 ); - filename = ss.str(); - std::fstream file; - file.open ( filename , std::fstream::in ); - G4int dummy; - file >> dummy; - if ( file.good() ) - { - found_at_least_one = true; - - // read the file - G4PhysicsVector* aPhysVec = readAFile ( &file ); - registAPhysicsVector( Z , A , aPhysVec ); - } - else - { - //G4cout << "No file for "<< reactionType << " Z=" << Z << ", A=" << A << G4endl; - } - file.close(); - } - else - { - found_at_least_one = TRUE; - } + G4int A = theStableOnes.GetIsotopeNucleonCount(first + i1); + if (isThisNewIsotope(Z, A)) { + std::stringstream ss; + ss << dirName << aFSType << Z << "_" << A << "_" << theNames.GetName(Z - 1); + filename = ss.str(); + + std::fstream file; + file.open(filename, std::fstream::in); + G4int dummy; + file >> dummy; + if (file.good()) { + // G4cout << "Found file for Z=" << Z << ", A=" << A << ", as " << filename << G4endl; + found_at_least_one = TRUE; + // Read the file + + G4PhysicsVector* aPhysVec = readAFile(&file); + + // Regist the PhysicsVector + registAPhysicsVector(Z, A, aPhysVec); } - if ( found_at_least_one ) vElement[i] = true; - } - else - { - G4StableIsotopes theStableOnes; - G4int first = theStableOnes.GetFirstIsotope( Z ); - G4bool found_at_least_one = FALSE; - for ( G4int i1 = 0; i1 < theStableOnes.GetNumberOfIsotopes( static_cast(theElement->GetZ() ) ); i1++) - { - G4int A = theStableOnes.GetIsotopeNucleonCount( first+i1 ); - if ( isThisNewIsotope( Z , A ) ) - { - - std::stringstream ss; - ss << dirName << aFSType << Z << "_" << A << "_" << theNames.GetName( Z-1 ); - filename = ss.str(); - - std::fstream file; - file.open ( filename , std::fstream::in ); - G4int dummy; - file >> dummy; - if ( file.good() ) - { - //G4cout << "Found file for Z=" << Z << ", A=" << A << ", as " << filename << G4endl; - found_at_least_one = TRUE; - //Read the file - - G4PhysicsVector* aPhysVec = readAFile ( &file ); - - //Regist the PhysicsVector - registAPhysicsVector( Z , A , aPhysVec ); - } - else - { - //G4cout << "No file for "<< reactionType << " Z=" << Z << ", A=" << A << G4endl; - } - file.close(); - } - else - { - found_at_least_one = TRUE; - } + else { + // G4cout << "No file for "<< reactionType << " Z=" << Z << ", A=" << A << G4endl; } + file.close(); + } + else { + found_at_least_one = TRUE; + } + } - if ( found_at_least_one ) vElement[i] = true; - } - } + if (found_at_least_one) vElement[i] = true; + } + } } - void G4ParticleHPJENDLHEData::DumpPhysicsTable(const G4ParticleDefinition& aP) { - if(&aP!=G4Neutron::Neutron()) - throw G4HadronicException(__FILE__, __LINE__, "Attempt to use NeutronHP data for particles other than neutrons!!!"); + if (&aP != G4Neutron::Neutron()) + throw G4HadronicException(__FILE__, __LINE__, + "Attempt to use NeutronHP data for particles other than neutrons!!!"); } +G4double G4ParticleHPJENDLHEData::GetCrossSection(const G4DynamicParticle* aP, const G4Element* anE, + G4double) +{ + // Primary energy >20MeV + // Thus not taking into account of Doppler broadening + // also not taking into account of Target thermal motions + + G4double result = 0; + + G4double ek = aP->GetKineticEnergy(); + + auto nIso = (G4int)anE->GetNumberOfIsotopes(); + auto Z = (G4int)anE->GetZ(); + if (nIso != 0) { + for (G4int i1 = 0; i1 < nIso; ++i1) { + G4int A = anE->GetIsotope(i1)->GetN(); + G4double frac = + anE->GetRelativeAbundanceVector()[i1]; // This case does NOT request "*perCent". + result += frac * getXSfromThisIsotope(Z, A, ek); + } + } + else { + G4StableIsotopes theStableOnes; + G4int first = theStableOnes.GetFirstIsotope(Z); + for (G4int i1 = 0; i1 < theStableOnes.GetNumberOfIsotopes((G4int)anE->GetZ()); ++i1) { + G4int A = theStableOnes.GetIsotopeNucleonCount(first + i1); + G4double frac = + theStableOnes.GetAbundance(first + i1) * perCent; // This case requests "*perCent". + result += frac * getXSfromThisIsotope(Z, A, ek); + } + } + return result; +} -G4double G4ParticleHPJENDLHEData:: -GetCrossSection(const G4DynamicParticle* aP, const G4Element*anE, G4double ) +G4PhysicsVector* G4ParticleHPJENDLHEData::readAFile(std::fstream* file) { - // Primary energy >20MeV - // Thus not taking into account of Doppler broadening - // also not taking into account of Target thermal motions + G4int dummy; + G4int len; + *file >> dummy; + *file >> len; + + std::vector v_e; + std::vector v_xs; + + for (G4int i = 0; i < len; ++i) { + G4double e; + G4double xs; + + *file >> e; + *file >> xs; + // data are written in eV and barn. + v_e.push_back(e * eV); + v_xs.push_back(xs * barn); + } - G4double result = 0; + auto aPhysVec = new G4PhysicsFreeVector(static_cast(len), v_e.front(), v_e.back()); - G4double ek = aP->GetKineticEnergy(); + for (G4int i = 0; i < len; ++i) { + aPhysVec->PutValues(static_cast(i), v_e[i], v_xs[i]); + } - G4int nIso = (G4int)anE->GetNumberOfIsotopes(); - G4int Z = (G4int)anE->GetZ(); - if ( nIso!=0 ) - { - for ( G4int i1 = 0; i1 < nIso; ++i1 ) - { - G4int A = anE->GetIsotope(i1)->GetN(); - G4double frac = anE->GetRelativeAbundanceVector()[ i1 ]; // This case does NOT request "*perCent". - result += frac * getXSfromThisIsotope( Z , A , ek ); - } - } - else - { - G4StableIsotopes theStableOnes; - G4int first = theStableOnes.GetFirstIsotope( Z ); - for ( G4int i1 = 0; i1 < theStableOnes.GetNumberOfIsotopes( (G4int)anE->GetZ() ); ++i1) - { - G4int A = theStableOnes.GetIsotopeNucleonCount( first+i1 ); - G4double frac = theStableOnes.GetAbundance( first+i1 )*perCent; // This case requests "*perCent". - result += frac * getXSfromThisIsotope( Z , A , ek ); - } - } - return result; + return aPhysVec; } - -G4PhysicsVector* G4ParticleHPJENDLHEData::readAFile ( std::fstream* file ) +G4bool G4ParticleHPJENDLHEData::isThisInMap(G4int z, G4int a) { - G4int dummy; - G4int len; - *file >> dummy; - *file >> len; - - std::vector< G4double > v_e; - std::vector< G4double > v_xs; - - for ( G4int i = 0 ; i < len ; ++i ) - { - G4double e; - G4double xs; - - *file >> e; - *file >> xs; - // data are written in eV and barn. - v_e.push_back( e*eV ); - v_xs.push_back( xs*barn ); - } - - G4PhysicsFreeVector* aPhysVec = new G4PhysicsFreeVector( static_cast< std::size_t >( len ) , v_e.front() , v_e.back() ); - - for ( G4int i = 0 ; i < len ; ++i ) - { - aPhysVec->PutValues( static_cast< std::size_t >( i ) , v_e[ i ] , v_xs[ i ] ); - } - - return aPhysVec; + if (mIsotope.find(z) == mIsotope.end()) return false; + if (mIsotope.find(z)->second->find(a) == mIsotope.find(z)->second->end()) return false; + return true; } - -G4bool G4ParticleHPJENDLHEData::isThisInMap( G4int z , G4int a ) +void G4ParticleHPJENDLHEData::registAPhysicsVector(G4int Z, G4int A, G4PhysicsVector* aPhysVec) { - if ( mIsotope.find ( z ) == mIsotope.end() ) return false; - if ( mIsotope.find ( z ) -> second->find ( a ) == mIsotope.find ( z ) -> second->end() ) return false; - return true; + std::pair aPair = std::pair(A, aPhysVec); + auto itm = mIsotope.find(Z); + if (itm != mIsotope.cend()) { + itm->second->insert(aPair); + } + else { + auto aMap = new std::map; + aMap->insert(aPair); + mIsotope.insert(std::pair*>(Z, aMap)); + } } - -void G4ParticleHPJENDLHEData::registAPhysicsVector( G4int Z , G4int A , G4PhysicsVector* aPhysVec ) +G4double G4ParticleHPJENDLHEData::getXSfromThisIsotope(G4int Z, G4int A, G4double ek) { - std::pair< G4int , G4PhysicsVector* > aPair = std::pair < G4int , G4PhysicsVector* > ( A , aPhysVec ); - auto itm = mIsotope.find ( Z ); - if ( itm != mIsotope.cend() ) - { - itm->second->insert ( aPair ); - } - else + G4double aXSection = 0.0; + G4bool outOfRange; + + G4PhysicsVector* aPhysVec; + if (mIsotope.find(Z)->second->find(A) != mIsotope.find(Z)->second->end()) { + aPhysVec = mIsotope.find(Z)->second->find(A)->second; + aXSection = aPhysVec->GetValue(ek, outOfRange); + } + else { + // Select closest one in the same Z + G4int delta0 = 99; // no mean for 99 + for (auto it = mIsotope.find(Z)->second->cbegin(); it != mIsotope.find(Z)->second->cend(); ++it) { - std::map< G4int , G4PhysicsVector* >* aMap = new std::map< G4int , G4PhysicsVector* >; - aMap->insert ( aPair ); - mIsotope.insert( std::pair< G4int , std::map< G4int , G4PhysicsVector* >* > ( Z , aMap ) ); + G4int delta = std::abs(A - it->first); + if (delta < delta0) delta0 = delta; } -} - - -G4double G4ParticleHPJENDLHEData::getXSfromThisIsotope( G4int Z , G4int A , G4double ek ) -{ - G4double aXSection = 0.0; - G4bool outOfRange; - - G4PhysicsVector* aPhysVec; - if ( mIsotope.find ( Z )->second->find ( A ) != mIsotope.find ( Z )->second->end() ) - { - aPhysVec = mIsotope.find ( Z )->second->find ( A )->second; - aXSection = aPhysVec->GetValue( ek , outOfRange ); - } - else - { - // Select closest one in the same Z - G4int delta0 = 99; // no mean for 99 - for ( auto it = mIsotope.find ( Z )->second->cbegin(); - it!= mIsotope.find ( Z )->second->cend(); ++it ) - { - G4int delta = std::abs( A - it->first ); - if ( delta < delta0 ) delta0 = delta; - } - // Randomize of selection larger or smaller than A - if ( G4UniformRand() < 0.5 ) delta0 *= -1; - G4int A1 = A + delta0; - if ( mIsotope.find ( Z )->second->find ( A1 ) != mIsotope.find ( Z )->second->cend() ) - { - aPhysVec = mIsotope.find ( Z )->second->find ( A1 )->second; - } - else - { - A1 = A - delta0; - aPhysVec = mIsotope.find ( Z )->second->find ( A1 )->second; - } + // Randomize of selection larger or smaller than A + if (G4UniformRand() < 0.5) delta0 *= -1; + G4int A1 = A + delta0; + if (mIsotope.find(Z)->second->find(A1) != mIsotope.find(Z)->second->cend()) { + aPhysVec = mIsotope.find(Z)->second->find(A1)->second; + } + else { + A1 = A - delta0; + aPhysVec = mIsotope.find(Z)->second->find(A1)->second; + } - aXSection = aPhysVec->GetValue( ek , outOfRange ); - // X^(2/3) factor - aXSection *= G4Pow::GetInstance()->A23( 1.0*A/ A1 ); - } + aXSection = aPhysVec->GetValue(ek, outOfRange); + // X^(2/3) factor + aXSection *= G4Pow::GetInstance()->A23(1.0 * A / A1); + } - return aXSection; + return aXSection; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPJENDLHEElasticData.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPJENDLHEElasticData.cc index 8d3d29e8b35..ca00f7462f1 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPJENDLHEElasticData.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPJENDLHEElasticData.cc @@ -33,10 +33,11 @@ // #include "G4ParticleHPJENDLHEElasticData.hh" + #include "G4Neutron.hh" G4ParticleHPJENDLHEElasticData::G4ParticleHPJENDLHEElasticData() -:G4ParticleHPJENDLHEData( "Elastic" , G4Neutron::Neutron() ) + : G4ParticleHPJENDLHEData("Elastic", G4Neutron::Neutron()) { - ; + ; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPJENDLHEInelasticData.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPJENDLHEInelasticData.cc index d3031e7f713..7092f2a0981 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPJENDLHEInelasticData.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPJENDLHEInelasticData.cc @@ -32,10 +32,11 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPJENDLHEInelasticData.hh" + #include "G4Neutron.hh" G4ParticleHPJENDLHEInelasticData::G4ParticleHPJENDLHEInelasticData() -:G4ParticleHPJENDLHEData( "Inelastic" , G4Neutron::Neutron() ) + : G4ParticleHPJENDLHEData("Inelastic", G4Neutron::Neutron()) { - ; + ; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPKallbachMannSyst.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPKallbachMannSyst.cc index 4110937102f..fae25d550e0 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPKallbachMannSyst.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPKallbachMannSyst.cc @@ -33,43 +33,43 @@ // // June-2019 - E. Mendoza --> perform some corrections -#include "G4ParticleHPKallbachMannSyst.hh" -#include "G4SystemOfUnits.hh" -#include "Randomize.hh" +#include "G4ParticleHPKallbachMannSyst.hh" + #include "G4Exp.hh" +#include "G4HadronicException.hh" #include "G4Log.hh" #include "G4Pow.hh" -#include "G4HadronicException.hh" +#include "G4SystemOfUnits.hh" +#include "Randomize.hh" G4double G4ParticleHPKallbachMannSyst::Sample(G4double anEnergy) { - G4double result=0.; - + G4double result = 0.; + G4double zero = GetKallbachZero(anEnergy); - if(zero>1) zero=1.; - if(zero<-1)zero=-1.; + if (zero > 1) zero = 1.; + if (zero < -1) zero = -1.; G4double max = Kallbach(zero, anEnergy); G4double upper = Kallbach(1., anEnergy); G4double lower = Kallbach(-1., anEnergy); - if(upper>max) max=upper; - if(lower>max) max=lower; + if (upper > max) max = upper; + if (lower > max) max = lower; G4double value, random; - G4int icounter=0; - G4int icounter_max=1024; - do - { + G4int icounter = 0; + G4int icounter_max = 1024; + do { icounter++; - if ( icounter > icounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; + if (icounter > icounter_max) { + G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " + << __FILE__ << "." << G4endl; + break; } - result = 2.*G4UniformRand()-1; - value = Kallbach(result, anEnergy)/max; + result = 2. * G4UniformRand() - 1; + value = Kallbach(result, anEnergy) / max; random = G4UniformRand(); - } - while(random>value); // Loop checking, 11.05.2015, T. Koi - + } while (random > value); // Loop checking, 11.05.2015, T. Koi + return result; } @@ -77,87 +77,105 @@ G4double G4ParticleHPKallbachMannSyst::Kallbach(G4double cosTh, G4double anEnerg { // Kallbach-Mann systematics without normalization. G4double result; - G4double theX = A(anEnergy)*cosTh; - result = 0.5*(G4Exp( theX)*(1+theCompoundFraction) - +G4Exp(-theX)*(1-theCompoundFraction)); + G4double theX = A(anEnergy) * cosTh; + result = + 0.5 * (G4Exp(theX) * (1 + theCompoundFraction) + G4Exp(-theX) * (1 - theCompoundFraction)); return result; } G4double G4ParticleHPKallbachMannSyst::GetKallbachZero(G4double anEnergy) { G4double result; - //delta 2.0e-16 in not good. - //delta 4.0e-16 is OK - //safety factor of 2 + // delta 2.0e-16 in not good. + // delta 4.0e-16 is OK + // safety factor of 2 G4double delta = 8.0e-16; - if ( std::abs (theCompoundFraction - 1 ) < delta ) { - theCompoundFraction = 1.0-delta; - } - result = 0.5 * (1./A(anEnergy)) * G4Log((1-theCompoundFraction)/(1+theCompoundFraction)); + if (std::abs(theCompoundFraction - 1) < delta) { + theCompoundFraction = 1.0 - delta; + } + result = 0.5 * (1. / A(anEnergy)) * G4Log((1 - theCompoundFraction) / (1 + theCompoundFraction)); return result; } G4double G4ParticleHPKallbachMannSyst::A(G4double anEnergy) -{ +{ G4double result; - G4double C1 = 0.04/MeV; - G4double C2 = 1.8E-6/(MeV*MeV*MeV); - G4double C3 = 6.7E-7/(MeV*MeV*MeV*MeV); - - G4double epsa = anEnergy*theTargetMass/(theTargetMass+theIncidentMass); - G4int Ac = theTargetA+theProjectileA; - G4int Nc = Ac - theTargetZ-theProjectileZ; + G4double C1 = 0.04 / MeV; + G4double C2 = 1.8E-6 / (MeV * MeV * MeV); + G4double C3 = 6.7E-7 / (MeV * MeV * MeV * MeV); + + G4double epsa = anEnergy * theTargetMass / (theTargetMass + theIncidentMass); + G4int Ac = theTargetA + theProjectileA; + G4int Nc = Ac - theTargetZ - theProjectileZ; G4int AA = theTargetA; G4int ZA = theTargetZ; - G4double ea = epsa+SeparationEnergy(Ac, Nc, AA, ZA,theProjectileA,theProjectileZ); - G4double Et1 = 130*MeV; + G4double ea = epsa + SeparationEnergy(Ac, Nc, AA, ZA, theProjectileA, theProjectileZ); + G4double Et1 = 130 * MeV; G4double R1 = std::min(ea, Et1); // theProductEnergy is still in CMS!!! - G4double epsb = theProductEnergy*(theProductMass+theResidualMass)/theResidualMass; + G4double epsb = theProductEnergy * (theProductMass + theResidualMass) / theResidualMass; G4int AB = theResidualA; G4int ZB = theResidualZ; - G4double eb = epsb+SeparationEnergy(Ac, Nc, AB, ZB,theProductA, theProductZ); - G4double X1 = R1*eb/ea; - G4double Et3 = 41*MeV; + G4double eb = epsb + SeparationEnergy(Ac, Nc, AB, ZB, theProductA, theProductZ); + G4double X1 = R1 * eb / ea; + G4double Et3 = 41 * MeV; G4double R3 = std::min(ea, Et3); - G4double X3 = R3*eb/ea; + G4double X3 = R3 * eb / ea; - G4double Ma=1; - G4double mb=1; - if(theProjectileA==1 || (theProjectileZ==1 && theProjectileA==2)){Ma=1;}//neutron,proton,deuteron - else if(theProjectileA==4 && theProjectileZ==2){Ma=0;}//alpha - else if(theProjectileA==3 && (theProjectileZ==1 || theProjectileZ==2)){Ma=0.5;}//tritum,He3 : set intermediate value - else - { - throw G4HadronicException(__FILE__, __LINE__, "Severe error in the sampling of Kallbach-Mann Systematics"); + G4double Ma = 1; + G4double mb = 1; + if (theProjectileA == 1 || (theProjectileZ == 1 && theProjectileA == 2)) { + Ma = 1; + } // neutron,proton,deuteron + else if (theProjectileA == 4 && theProjectileZ == 2) { + Ma = 0; + } // alpha + else if (theProjectileA == 3 && (theProjectileZ == 1 || theProjectileZ == 2)) { + Ma = 0.5; + } // tritum,He3 : set intermediate value + else { + throw G4HadronicException(__FILE__, __LINE__, + "Severe error in the sampling of Kallbach-Mann Systematics"); + } + if (theProductA == 1 && theProductZ == 0) { + mb = 1. / 2.; + } // neutron + else if (theProductA == 4 && theProductZ == 2) { + mb = 2; + } // alpha + else { + mb = 1; } - if(theProductA==1 && theProductZ==0){mb=1./2.;}//neutron - else if(theProductA==4 && theProductZ==2){mb=2;}//alpha - else{mb=1;} - result = C1*X1 + C2*G4Pow::GetInstance()->powN(X1, 3) + C3*Ma*mb*G4Pow::GetInstance()->powN(X3, 4); + result = C1 * X1 + C2 * G4Pow::GetInstance()->powN(X1, 3) + + C3 * Ma * mb * G4Pow::GetInstance()->powN(X3, 4); return result; - } -G4double G4ParticleHPKallbachMannSyst::SeparationEnergy(G4int Ac, G4int Nc, G4int AA, G4int ZA,G4int Abinding,G4int Zbinding) +G4double G4ParticleHPKallbachMannSyst::SeparationEnergy(G4int Ac, G4int Nc, G4int AA, G4int ZA, + G4int Abinding, G4int Zbinding) { G4double result; - G4int NA = AA-ZA; - G4int Zc = Ac-Nc; - result = 15.68*(Ac-AA); - result += -28.07*((Nc-Zc)*(Nc-Zc)/(G4double)Ac - (NA-ZA)*(NA-ZA)/(G4double)AA); - result += -18.56*(G4Pow::GetInstance()->A23(G4double(Ac)) - G4Pow::GetInstance()->A23(G4double(AA))); - result += 33.22*((Nc-Zc)*(Nc-Zc)/G4Pow::GetInstance()->powA(G4double(Ac), 4./3.) - (NA-ZA)*(NA-ZA)/G4Pow::GetInstance()->powA(G4double(AA), 4./3.)); - result += -0.717*(Zc*Zc/G4Pow::GetInstance()->A13(G4double(Ac))-ZA*ZA/G4Pow::GetInstance()->A13(G4double(AA))); - result += 1.211*(Zc*Zc/(G4double)Ac-ZA*ZA/(G4double)AA); + G4int NA = AA - ZA; + G4int Zc = Ac - Nc; + result = 15.68 * (Ac - AA); + result += -28.07 * ((Nc - Zc) * (Nc - Zc) / (G4double)Ac - (NA - ZA) * (NA - ZA) / (G4double)AA); + result += + -18.56 * (G4Pow::GetInstance()->A23(G4double(Ac)) - G4Pow::GetInstance()->A23(G4double(AA))); + result += 33.22 + * ((Nc - Zc) * (Nc - Zc) / G4Pow::GetInstance()->powA(G4double(Ac), 4. / 3.) + - (NA - ZA) * (NA - ZA) / G4Pow::GetInstance()->powA(G4double(AA), 4. / 3.)); + result += -0.717 + * (Zc * Zc / G4Pow::GetInstance()->A13(G4double(Ac)) + - ZA * ZA / G4Pow::GetInstance()->A13(G4double(AA))); + result += 1.211 * (Zc * Zc / (G4double)Ac - ZA * ZA / (G4double)AA); G4double totalBinding(0); - if(Zbinding==0&&Abinding==1) totalBinding=0; - if(Zbinding==1&&Abinding==1) totalBinding=0; - if(Zbinding==1&&Abinding==2) totalBinding=2.224596; - if(Zbinding==1&&Abinding==3) totalBinding=8.481798; - if(Zbinding==2&&Abinding==3) totalBinding=7.718043; - if(Zbinding==2&&Abinding==4) totalBinding=28.29566; + if (Zbinding == 0 && Abinding == 1) totalBinding = 0; + if (Zbinding == 1 && Abinding == 1) totalBinding = 0; + if (Zbinding == 1 && Abinding == 2) totalBinding = 2.224596; + if (Zbinding == 1 && Abinding == 3) totalBinding = 8.481798; + if (Zbinding == 2 && Abinding == 3) totalBinding = 7.718043; + if (Zbinding == 2 && Abinding == 4) totalBinding = 28.29566; result += -totalBinding; result *= MeV; return result; diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPLCFissionFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPLCFissionFS.cc index 9f3b6c0485c..3e21b79f181 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPLCFissionFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPLCFissionFS.cc @@ -31,16 +31,17 @@ // #include "G4ParticleHPLCFissionFS.hh" - void G4ParticleHPLCFissionFS::Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String &, G4ParticleDefinition* projectile ) - { - G4String aString = "/LC/"; - G4ParticleHPFissionBaseFS::Init(A, Z, M, dirName, aString, projectile); - } - - G4DynamicParticleVector * G4ParticleHPLCFissionFS::ApplyYourself(G4int NNeutrons) - { - G4DynamicParticleVector * aResult; -// G4cout <<"G4ParticleHPLCFissionFS::ApplyYourself +"<> nEnergies; theManager.Init(aDataFile); theEnergies = new G4double[nEnergies]; nCosTh = new G4int[nEnergies]; - theData = new G4ParticleHPVector * [nEnergies]; - theSecondManager = new G4InterpolationManager [nEnergies]; - for(G4int i=0; i> theEnergies[i]; - theEnergies[i]*=eV; + theEnergies[i] *= eV; aDataFile >> nCosTh[i]; - theSecondManager[i].Init(aDataFile); + theSecondManager[i].Init(aDataFile); theData[i] = new G4ParticleHPVector[nCosTh[i]]; G4double label; - for(G4int ii=0; ii> label; theData[i][ii].SetLabel(label); theData[i][ii].Init(aDataFile, eV); @@ -72,288 +71,267 @@ void G4ParticleHPLabAngularEnergy::Init(std::istream & aDataFile) } } -G4ReactionProduct * G4ParticleHPLabAngularEnergy::Sample(G4double anEnergy, G4double massCode, G4double ) +G4ReactionProduct* G4ParticleHPLabAngularEnergy::Sample(G4double anEnergy, G4double massCode, + G4double) { - G4ReactionProduct * result = new G4ReactionProduct; - G4int Z = static_cast(massCode/1000); - G4int A = static_cast(massCode-1000*Z); + auto result = new G4ReactionProduct; + auto Z = static_cast(massCode / 1000); + auto A = static_cast(massCode - 1000 * Z); + + if (massCode == 0) { + result->SetDefinition(G4Gamma::Gamma()); + } + else if (A == 0) { + result->SetDefinition(G4Electron::Electron()); + if (Z == 1) result->SetDefinition(G4Positron::Positron()); + } + else if (A == 1) { + result->SetDefinition(G4Neutron::Neutron()); + if (Z == 1) result->SetDefinition(G4Proton::Proton()); + } + else if (A == 2) { + result->SetDefinition(G4Deuteron::Deuteron()); + } + else if (A == 3) { + result->SetDefinition(G4Triton::Triton()); + if (Z == 2) result->SetDefinition(G4He3::He3()); + } + else if (A == 4) { + result->SetDefinition(G4Alpha::Alpha()); + if (Z != 2) throw G4HadronicException(__FILE__, __LINE__, "Unknown ion case 1"); + } + else { + throw G4HadronicException(__FILE__, __LINE__, + "G4ParticleHPLabAngularEnergy: Unknown ion case 2"); + } - if(massCode==0) - { - result->SetDefinition(G4Gamma::Gamma()); - } - else if(A==0) - { - result->SetDefinition(G4Electron::Electron()); - if(Z==1) result->SetDefinition(G4Positron::Positron()); - } - else if(A==1) - { - result->SetDefinition(G4Neutron::Neutron()); - if(Z==1) result->SetDefinition(G4Proton::Proton()); - } - else if(A==2) - { - result->SetDefinition(G4Deuteron::Deuteron()); - } - else if(A==3) - { - result->SetDefinition(G4Triton::Triton()); - if(Z==2) result->SetDefinition(G4He3::He3()); - } - else if(A==4) - { - result->SetDefinition(G4Alpha::Alpha()); - if(Z!=2) throw G4HadronicException(__FILE__, __LINE__, "Unknown ion case 1"); - } - else - { - throw G4HadronicException(__FILE__, __LINE__, "G4ParticleHPLabAngularEnergy: Unknown ion case 2"); - } - - // get theta, E - G4double cosTh, secEnergy; - G4int i, it(0); - // find the energy bin - for(i=0; i we do not extrapolate to low energies, we extrapolate to high energies (??) - { - //Do not sample between incident neutron energies: - //--------------------------------------------------------- - //CosTheta: - G4ParticleHPVector theThVec; - theThVec.SetInterpolationManager(theSecondManager[it]); - for(i=0; i we do not extrapolate to low energies, we extrapolate + // to high energies (??) + { + // Do not sample between incident neutron energies: + //--------------------------------------------------------- + // CosTheta: + G4ParticleHPVector theThVec; + theThVec.SetInterpolationManager(theSecondManager[it]); + for (i = 0; i < nCosTh[it]; i++) { + theThVec.SetX(i, theData[it][i].GetLabel()); + theThVec.SetY(i, theData[it][i].GetIntegral()); + } + cosTh = theThVec.Sample(); + //--------------------------------------------------------- - //--------------------------------------------------------- - //Now the secondary energy: - G4double x, x1, x2, y1, y2, y, E; - G4int i1(0); - for(i=1; i0.99 && massCode<1.01){theThVec.Dump();} - G4double random = (theThVec.GetY(theThVec.GetVectorLength()-1) - -theThVec.GetY(0)) *G4UniformRand(); - G4cout<<" -- "< "<0.99 && massCode<1.01){theThVec.Dump();} + G4double random = (theThVec.GetY(theThVec.GetVectorLength()-1) + -theThVec.GetY(0)) *G4UniformRand(); + G4cout<<" -- "< + "< i2 - //for(i=0;i i2 + // for(i=0;iSetKineticEnergy(secEnergy); -// now do random direction in phi, and fill the result. + G4double phi = twopi * G4UniformRand(); + G4double theta = std::acos(cosTh); + G4double sinth = std::sin(theta); + G4double mtot = result->GetTotalMomentum(); + G4ThreeVector tempVector(mtot * sinth * std::cos(phi), mtot * sinth * std::sin(phi), + mtot * std::cos(theta)); + result->SetMomentum(tempVector); - result->SetKineticEnergy(secEnergy); - - G4double phi = twopi*G4UniformRand(); - G4double theta = std::acos(cosTh); - G4double sinth = std::sin(theta); - G4double mtot = result->GetTotalMomentum(); - G4ThreeVector tempVector(mtot*sinth*std::cos(phi), mtot*sinth*std::sin(phi), mtot*std::cos(theta) ); - result->SetMomentum(tempVector); - - return result; + return result; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPLegendreStore.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPLegendreStore.cc index a0dbeb46e5e..93f4c173f1e 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPLegendreStore.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPLegendreStore.cc @@ -27,310 +27,288 @@ // J.P. Wellisch, Nov-1996 // A prototype of the low energy neutron transport model. // -// 080612 SampleDiscreteTwoBody contribution from Benoit Pirard and Laurent Desorgher (Univ. Bern) #3 +// 080612 SampleDiscreteTwoBody contribution from Benoit Pirard and Laurent Desorgher (Univ. Bern) +// #3 // // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPLegendreStore.hh" -#include "G4ParticleHPVector.hh" -#include "G4ParticleHPInterpolator.hh" + #include "G4ParticleHPFastLegendre.hh" +#include "G4ParticleHPInterpolator.hh" +#include "G4ParticleHPVector.hh" #include "Randomize.hh" -#include - +#include -//080612TK contribution from Benoit Pirard and Laurent Desorgher (Univ. Bern) #3 -G4double G4ParticleHPLegendreStore::SampleDiscreteTwoBody (G4double anEnergy) +// 080612TK contribution from Benoit Pirard and Laurent Desorgher (Univ. Bern) #3 +G4double G4ParticleHPLegendreStore::SampleDiscreteTwoBody(G4double anEnergy) { - G4double result=0.; - + G4double result = 0.; + G4int i0; G4int low(0), high(0); G4ParticleHPFastLegendre theLeg; - for (i0=0; i0anEnergy) break; + if (theCoeff[i0].GetEnergy() > anEnergy) break; } - low = std::max(0, high-1); + low = std::max(0, high - 1); G4ParticleHPInterpolator theInt; G4double x, x1, x2; x = anEnergy; x1 = theCoeff[low].GetEnergy(); x2 = theCoeff[high].GetEnergy(); G4double theNorm = 0; - G4double try01=0, try02=0; + G4double try01 = 0, try02 = 0; G4double max1, max2, costh; - max1 = 0; max2 = 0; - G4int l,m_tmp; - for(i0=0; i0<601; i0++) - { - costh = G4double(i0-300)/300.; - try01 = 0.5; - for(m_tmp=0; m_tmpmax1) max1=try01; - try02 = 0.5; - for(m_tmp=0; m_tmpmax2) max2=try02; - } + max1 = 0; + max2 = 0; + G4int l, m_tmp; + for (i0 = 0; i0 < 601; i0++) { + costh = G4double(i0 - 300) / 300.; + try01 = 0.5; + for (m_tmp = 0; m_tmp < theCoeff[low].GetNumberOfPoly(); m_tmp++) { + l = m_tmp + 1; + try01 += (2. * l + 1) / 2. * theCoeff[low].GetCoeff(m_tmp) * theLeg.Evaluate(l, costh); + } + if (try01 > max1) max1 = try01; + try02 = 0.5; + for (m_tmp = 0; m_tmp < theCoeff[high].GetNumberOfPoly(); m_tmp++) { + l = m_tmp + 1; + try02 += (2. * l + 1) / 2. * theCoeff[high].GetCoeff(m_tmp) * theLeg.Evaluate(l, costh); + } + if (try02 > max2) max2 = try02; + } theNorm = theInt.Interpolate(theManager.GetScheme(high), x, x1, x2, max1, max2); - + G4double value, random; G4double v1, v2; - G4int icounter=0; - G4int icounter_max=1024; - do - { + G4int icounter = 0; + G4int icounter_max = 1024; + do { icounter++; - if ( icounter > icounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; + if (icounter > icounter_max) { + G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " + << __FILE__ << "." << G4endl; + break; } v1 = 0.5; v2 = 0.5; - result = 2.*G4UniformRand()-1.; - for(m_tmp=0; m_tmp=theNorm) break; // Workaround for negative cross-section values. @@@@ 31 May 2000 - } - while(random>value/theNorm); // Loop checking, 11.05.2015, T. Koi + if (0 >= theNorm) break; // Workaround for negative cross-section values. @@@@ 31 May 2000 + } while (random > value / theNorm); // Loop checking, 11.05.2015, T. Koi return result; } - - -G4double G4ParticleHPLegendreStore::SampleMax (G4double anEnergy) +G4double G4ParticleHPLegendreStore::SampleMax(G4double anEnergy) { - G4double result=0.; - + G4double result = 0.; + G4int i0; G4int low(0), high(0); G4ParticleHPFastLegendre theLeg; - for (i0=0; i0anEnergy) break; + if (theCoeff[i0].GetEnergy() > anEnergy) break; } - low = std::max(0, high-1); + low = std::max(0, high - 1); G4ParticleHPInterpolator theInt; G4double x, x1, x2; x = anEnergy; x1 = theCoeff[low].GetEnergy(); x2 = theCoeff[high].GetEnergy(); G4double theNorm = 0; - G4double try01=0, try02=0; + G4double try01 = 0, try02 = 0; G4double max1, max2, costh; - max1 = 0; max2 = 0; + max1 = 0; + max2 = 0; G4int l; - for(i0=0; i0<601; i0++) - { - costh = G4double(i0-300)/300.; + for (i0 = 0; i0 < 601; i0++) { + costh = G4double(i0 - 300) / 300.; try01 = 0; - for(l=0; lmax1) max1=try01; + for (l = 0; l < theCoeff[low].GetNumberOfPoly(); l++) { + try01 += (2. * l + 1) / 2. * theCoeff[low].GetCoeff(l) * theLeg.Evaluate(l, costh); + } + if (try01 > max1) max1 = try01; try02 = 0; - for(l=0; lmax2) max2=try02; - } + if (try02 > max2) max2 = try02; + } theNorm = theInt.Interpolate(theManager.GetScheme(high), x, x1, x2, max1, max2); - + G4double value, random; G4double v1, v2; - G4int icounter=0; - G4int icounter_max=1024; - do - { + G4int icounter = 0; + G4int icounter_max = 1024; + do { icounter++; - if ( icounter > icounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; + if (icounter > icounter_max) { + G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " + << __FILE__ << "." << G4endl; + break; } v1 = 0; v2 = 0; - result = 2.*G4UniformRand()-1.; - for(l=0; l=theNorm) break; // Workaround for negative cross-section values. @@@@ 31 May 2000 - } - while(random>value/theNorm); // Loop checking, 11.05.2015, T. Koi + if (0 >= theNorm) break; // Workaround for negative cross-section values. @@@@ 31 May 2000 + } while (random > value / theNorm); // Loop checking, 11.05.2015, T. Koi return result; } - -G4double G4ParticleHPLegendreStore::SampleElastic (G4double anEnergy) +G4double G4ParticleHPLegendreStore::SampleElastic(G4double anEnergy) { - G4double result=0.; - + G4double result = 0.; + G4int i0; G4int low(0), high(0); G4ParticleHPFastLegendre theLeg; - for (i0=0; i0anEnergy) break; + if (theCoeff[i0].GetEnergy() > anEnergy) break; } - low = std::max(0, high-1); + low = std::max(0, high - 1); G4ParticleHPInterpolator theInt; G4double x, x1, x2; x = anEnergy; x1 = theCoeff[low].GetEnergy(); x2 = theCoeff[high].GetEnergy(); G4double theNorm = 0; - G4double try01=0, try02=0, try11=0, try12=0; + G4double try01 = 0, try02 = 0, try11 = 0, try12 = 0; G4double try1, try2; G4int l; - for(l=0; l icounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; + if (icounter > icounter_max) { + G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " + << __FILE__ << "." << G4endl; + break; } v1 = 0; v2 = 0; - result = 2.*G4UniformRand()-1.; - for(l=0; lvalue/theNorm); // Loop checking, 11.05.2015, T. Koi - + } while (random > value / theNorm); // Loop checking, 11.05.2015, T. Koi + return result; } -G4double G4ParticleHPLegendreStore::Sample (G4double energy) // still in interpolation; do not use +G4double G4ParticleHPLegendreStore::Sample(G4double energy) // still in interpolation; do not use { G4int i0; G4int low(0), high(0); -// G4cout << "G4ParticleHPLegendreStore::Sample "< - void G4ParticleHPList::Check(G4int i) - { - if(i<0) - { - throw G4HadronicException(__FILE__, __LINE__, "G4ParticleHPList::Check(G4int) called with negative index"); - } - if(i>nEntries) throw G4HadronicException(__FILE__, __LINE__, "Skipped some index numbers in G4ParticleHPList"); - if(i==nPoints) - { - nPoints = static_cast(1.5*nPoints); - G4double * buff = new G4double[nPoints]; - for (G4int j=0; j> y; - SetValue(i,y*unit); - } + if (i > nEntries) + throw G4HadronicException(__FILE__, __LINE__, "Skipped some index numbers in G4ParticleHPList"); + if (i == nPoints) { + nPoints = static_cast(1.5 * nPoints); + auto buff = new G4double[nPoints]; + for (G4int j = 0; j < nEntries; j++) + buff[j] = theData[j]; + delete[] theData; + theData = buff; } + if (i == nEntries) nEntries++; +} - void G4ParticleHPList::Init(std::istream & aDataFile, G4double unit) - { - G4int total, i; - aDataFile >> total; - G4double y; - for (i=0;i>y; - SetValue(i,y*unit); - } +void G4ParticleHPList::Init(std::istream& aDataFile, G4int nPar, G4double unit) +{ + G4int i; + G4double y; + for (i = 0; i < nPar; i++) { + aDataFile >> y; + SetValue(i, y * unit); } - - G4double G4ParticleHPList::GetValue(G4int i) - { -// G4cout << "TestList "<=GetListLength()) i=GetListLength()-1; - return theData[i]; +} + +void G4ParticleHPList::Init(std::istream& aDataFile, G4double unit) +{ + G4int total, i; + aDataFile >> total; + G4double y; + for (i = 0; i < total; i++) { + aDataFile >> y; + SetValue(i, y * unit); + } +} + +G4double G4ParticleHPList::GetValue(G4int i) +{ + // G4cout << "TestList "<= GetListLength()) i = GetListLength() - 1; + return theData[i]; +} void G4ParticleHPList::Dump() { - //store orginal precision - std::ios::fmtflags oldform = G4cout.flags(); - G4cout << std::setprecision(7) << std::setw(9) << theLabel << " " << theData[0] << " " << theData[1] << G4endl; - //restore orginal precision - G4cout.flags( oldform ); + // store orginal precision + std::ios::fmtflags oldform = G4cout.flags(); + G4cout << std::setprecision(7) << std::setw(9) << theLabel << " " << theData[0] << " " + << theData[1] << G4endl; + // restore orginal precision + G4cout.flags(oldform); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPMadlandNixSpectrum.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPMadlandNixSpectrum.cc index 35715d36a5b..32d2aeda6b7 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPMadlandNixSpectrum.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPMadlandNixSpectrum.cc @@ -29,154 +29,130 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPMadlandNixSpectrum.hh" + #include "G4SystemOfUnits.hh" - G4double G4ParticleHPMadlandNixSpectrum::Madland(G4double aSecEnergy, G4double tm) - { - G4Pow* Pow=G4Pow::GetInstance(); - G4double result; - G4double energy = aSecEnergy/eV; - G4double EF; - - EF = theAvarageKineticPerNucleonForLightFragments/eV; - G4double lightU1 = std::sqrt(energy)-std::sqrt(EF); - lightU1 *= lightU1/tm; - G4double lightU2 = std::sqrt(energy)+std::sqrt(EF); - lightU2 *= lightU2/tm; - G4double lightTerm=0; - if(theAvarageKineticPerNucleonForLightFragments>1*eV) - { - lightTerm = Pow->powA(lightU2, 1.5)*E1(lightU2); - lightTerm -= Pow->powA(lightU1, 1.5)*E1(lightU1); - lightTerm += Gamma15(lightU2)-Gamma15(lightU1); - lightTerm /= 3.*std::sqrt(tm*EF); - } - - EF = theAvarageKineticPerNucleonForHeavyFragments/eV; - G4double heavyU1 = std::sqrt(energy)-std::sqrt(EF); - heavyU1 *= heavyU1/tm; - G4double heavyU2 = std::sqrt(energy)+std::sqrt(EF); - heavyU2 *= heavyU2/tm; - G4double heavyTerm=0 ; - if(theAvarageKineticPerNucleonForHeavyFragments> 1*eV) - { - heavyTerm = Pow->powA(heavyU2, 1.5)*E1(heavyU2); - heavyTerm -= Pow->powA(heavyU1, 1.5)*E1(heavyU1); - heavyTerm += Gamma15(heavyU2)-Gamma15(heavyU1); - heavyTerm /= 3.*std::sqrt(tm*EF); - } - - result = 0.5*(lightTerm+heavyTerm); - - return result; +G4double G4ParticleHPMadlandNixSpectrum::Madland(G4double aSecEnergy, G4double tm) +{ + G4Pow* Pow = G4Pow::GetInstance(); + G4double result; + G4double energy = aSecEnergy / eV; + G4double EF; + + EF = theAvarageKineticPerNucleonForLightFragments / eV; + G4double lightU1 = std::sqrt(energy) - std::sqrt(EF); + lightU1 *= lightU1 / tm; + G4double lightU2 = std::sqrt(energy) + std::sqrt(EF); + lightU2 *= lightU2 / tm; + G4double lightTerm = 0; + if (theAvarageKineticPerNucleonForLightFragments > 1 * eV) { + lightTerm = Pow->powA(lightU2, 1.5) * E1(lightU2); + lightTerm -= Pow->powA(lightU1, 1.5) * E1(lightU1); + lightTerm += Gamma15(lightU2) - Gamma15(lightU1); + lightTerm /= 3. * std::sqrt(tm * EF); } - G4double G4ParticleHPMadlandNixSpectrum::Sample(G4double anEnergy) - { - G4double tm = theMaxTemp.GetY(anEnergy); - G4double last=0, buff, current = 100*MeV; - G4double precision = 0.001; - G4double newValue = 0., oldValue=0.; - G4double random = G4UniformRand(); - - G4int icounter=0; - G4int icounter_max=1024; - do - { - icounter++; - if ( icounter > icounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; - } - oldValue = newValue; - newValue = FissionIntegral(tm, current); - if(newValue < random) - { - buff = current; - current+=std::abs(current-last)/2.; - last = buff; - if(current>190*MeV) throw G4HadronicException(__FILE__, __LINE__, "Madland-Nix Spectrum has not converged in sampling"); - } - else - { - buff = current; - current-=std::abs(current-last)/2.; - last = buff; - } - } - while (std::abs(oldValue-newValue)>precision*newValue); // Loop checking, 11.05.2015, T. Koi - return current; + EF = theAvarageKineticPerNucleonForHeavyFragments / eV; + G4double heavyU1 = std::sqrt(energy) - std::sqrt(EF); + heavyU1 *= heavyU1 / tm; + G4double heavyU2 = std::sqrt(energy) + std::sqrt(EF); + heavyU2 *= heavyU2 / tm; + G4double heavyTerm = 0; + if (theAvarageKineticPerNucleonForHeavyFragments > 1 * eV) { + heavyTerm = Pow->powA(heavyU2, 1.5) * E1(heavyU2); + heavyTerm -= Pow->powA(heavyU1, 1.5) * E1(heavyU1); + heavyTerm += Gamma15(heavyU2) - Gamma15(heavyU1); + heavyTerm /= 3. * std::sqrt(tm * EF); } - G4double G4ParticleHPMadlandNixSpectrum:: - GIntegral(G4double tm, G4double anEnergy, G4double aMean) - { - G4Pow* Pow=G4Pow::GetInstance(); - if(aMean<1*eV) return 0; - G4double b = anEnergy/eV; - G4double sb = std::sqrt(b); - G4double EF = aMean/eV; - - G4double alpha = std::sqrt(tm); - G4double beta = std::sqrt(EF); - G4double A = EF/tm; - G4double B = (sb+beta)*(sb+beta)/tm; - G4double Ap = A; - G4double Bp = (sb-beta)*(sb-beta)/tm; - - G4double result; - G4double alpha2 = alpha*alpha; - G4double alphabeta = alpha*beta; - if(bpowA(B,2.5) - 0.5*alphabeta*B*B)*E1(B) - - (0.4*alpha2*Pow->powA(A,2.5) - 0.5*alphabeta*A*A)*E1(A) - ) - - - ( - (0.4*alpha2*Pow->powA(Bp,2.5) + 0.5*alphabeta*Bp*Bp)*E1(Bp) - - (0.4*alpha2*Pow->powA(Ap,2.5) + 0.5*alphabeta*Ap*Ap)*E1(Ap) - ) - + - ( - (alpha2*B-2*alphabeta*std::sqrt(B))*Gamma15(B) - - (alpha2*A-2*alphabeta*std::sqrt(A))*Gamma15(A) - ) - - - ( - (alpha2*Bp-2*alphabeta*std::sqrt(Bp))*Gamma15(Bp) - - (alpha2*Ap-2*alphabeta*std::sqrt(Ap))*Gamma15(Ap) - ) - - 0.6*alpha2*(Gamma25(B) - Gamma25(A) - Gamma25(Bp) + Gamma25(Ap)) - - 1.5*alphabeta*(G4Exp(-B)*(1+B) - G4Exp(-A)*(1+A) + G4Exp(-Bp)*(1+Bp) + G4Exp(-Ap)*(1+Ap)) ; + result = 0.5 * (lightTerm + heavyTerm); + + return result; +} + +G4double G4ParticleHPMadlandNixSpectrum::Sample(G4double anEnergy) +{ + G4double tm = theMaxTemp.GetY(anEnergy); + G4double last = 0, buff, current = 100 * MeV; + G4double precision = 0.001; + G4double newValue = 0., oldValue = 0.; + G4double random = G4UniformRand(); + + G4int icounter = 0; + G4int icounter_max = 1024; + do { + icounter++; + if (icounter > icounter_max) { + G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " + << __FILE__ << "." << G4endl; + break; + } + oldValue = newValue; + newValue = FissionIntegral(tm, current); + if (newValue < random) { + buff = current; + current += std::abs(current - last) / 2.; + last = buff; + if (current > 190 * MeV) + throw G4HadronicException(__FILE__, __LINE__, + "Madland-Nix Spectrum has not converged in sampling"); } - else - { - result = - ( - (0.4*alpha2*Pow->powA(B,2.5) - 0.5*alphabeta*B*B)*E1(B) - - (0.4*alpha2*Pow->powA(A,2.5) - 0.5*alphabeta*A*A)*E1(A) - ); - result -= - ( - (0.4*alpha2*Pow->powA(Bp,2.5) + 0.5*alphabeta*Bp*Bp)*E1(Bp) - - (0.4*alpha2*Pow->powA(Ap,2.5) + 0.5*alphabeta*Ap*Ap)*E1(Ap) - ); - result += - ( - (alpha2*B-2*alphabeta*std::sqrt(B))*Gamma15(B) - - (alpha2*A-2*alphabeta*std::sqrt(A))*Gamma15(A) - ); - result -= - ( - (alpha2*Bp+2*alphabeta*std::sqrt(Bp))*Gamma15(Bp) - - (alpha2*Ap+2*alphabeta*std::sqrt(Ap))*Gamma15(Ap) - ); - result -= 0.6*alpha2*(Gamma25(B) - Gamma25(A) - Gamma25(Bp) + Gamma25(Ap)); - result -= 1.5*alphabeta*(G4Exp(-B)*(1+B) - G4Exp(-A)*(1+A) + G4Exp(-Bp)*(1+Bp) + G4Exp(-Ap)*(1+Ap) - 2.) ; + else { + buff = current; + current -= std::abs(current - last) / 2.; + last = buff; } - result = result / (3.*std::sqrt(tm*EF)); - return result; + } while (std::abs(oldValue - newValue) + > precision * newValue); // Loop checking, 11.05.2015, T. Koi + return current; +} + +G4double G4ParticleHPMadlandNixSpectrum::GIntegral(G4double tm, G4double anEnergy, G4double aMean) +{ + G4Pow* Pow = G4Pow::GetInstance(); + if (aMean < 1 * eV) return 0; + G4double b = anEnergy / eV; + G4double sb = std::sqrt(b); + G4double EF = aMean / eV; + + G4double alpha = std::sqrt(tm); + G4double beta = std::sqrt(EF); + G4double A = EF / tm; + G4double B = (sb + beta) * (sb + beta) / tm; + G4double Ap = A; + G4double Bp = (sb - beta) * (sb - beta) / tm; + + G4double result; + G4double alpha2 = alpha * alpha; + G4double alphabeta = alpha * beta; + if (b < EF) { + result = ((0.4 * alpha2 * Pow->powA(B, 2.5) - 0.5 * alphabeta * B * B) * E1(B) + - (0.4 * alpha2 * Pow->powA(A, 2.5) - 0.5 * alphabeta * A * A) * E1(A)) + - ((0.4 * alpha2 * Pow->powA(Bp, 2.5) + 0.5 * alphabeta * Bp * Bp) * E1(Bp) + - (0.4 * alpha2 * Pow->powA(Ap, 2.5) + 0.5 * alphabeta * Ap * Ap) * E1(Ap)) + + ((alpha2 * B - 2 * alphabeta * std::sqrt(B)) * Gamma15(B) + - (alpha2 * A - 2 * alphabeta * std::sqrt(A)) * Gamma15(A)) + - ((alpha2 * Bp - 2 * alphabeta * std::sqrt(Bp)) * Gamma15(Bp) + - (alpha2 * Ap - 2 * alphabeta * std::sqrt(Ap)) * Gamma15(Ap)) + - 0.6 * alpha2 * (Gamma25(B) - Gamma25(A) - Gamma25(Bp) + Gamma25(Ap)) + - 1.5 * alphabeta + * (G4Exp(-B) * (1 + B) - G4Exp(-A) * (1 + A) + G4Exp(-Bp) * (1 + Bp) + + G4Exp(-Ap) * (1 + Ap)); + } + else { + result = ((0.4 * alpha2 * Pow->powA(B, 2.5) - 0.5 * alphabeta * B * B) * E1(B) + - (0.4 * alpha2 * Pow->powA(A, 2.5) - 0.5 * alphabeta * A * A) * E1(A)); + result -= ((0.4 * alpha2 * Pow->powA(Bp, 2.5) + 0.5 * alphabeta * Bp * Bp) * E1(Bp) + - (0.4 * alpha2 * Pow->powA(Ap, 2.5) + 0.5 * alphabeta * Ap * Ap) * E1(Ap)); + result += ((alpha2 * B - 2 * alphabeta * std::sqrt(B)) * Gamma15(B) + - (alpha2 * A - 2 * alphabeta * std::sqrt(A)) * Gamma15(A)); + result -= ((alpha2 * Bp + 2 * alphabeta * std::sqrt(Bp)) * Gamma15(Bp) + - (alpha2 * Ap + 2 * alphabeta * std::sqrt(Ap)) * Gamma15(Ap)); + result -= 0.6 * alpha2 * (Gamma25(B) - Gamma25(A) - Gamma25(Bp) + Gamma25(Ap)); + result -= 1.5 * alphabeta + * (G4Exp(-B) * (1 + B) - G4Exp(-A) * (1 + A) + G4Exp(-Bp) * (1 + Bp) + + G4Exp(-Ap) * (1 + Ap) - 2.); } + result = result / (3. * std::sqrt(tm * EF)); + return result; +} diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPManager.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPManager.cc index 5100b1174ba..772ae551b05 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPManager.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPManager.cc @@ -25,56 +25,39 @@ // // Class Description // Manager of NetronHP -// +// // 121031 First implementation done by T. Koi (SLAC/PPA) // P. Arce, June-2014 Conversion neutron_hp to particle_hp // -#include -#include - #include "G4ParticleHPManager.hh" -#include "G4ParticleHPThreadLocalManager.hh" -#include "G4ParticleHPMessenger.hh" -#include "G4HadronicException.hh" + #include "G4Exception.hh" +#include "G4HadronicException.hh" +#include "G4ParticleHPMessenger.hh" +#include "G4ParticleHPThreadLocalManager.hh" +#include "G4SystemOfUnits.hh" + +#include + +#include G4ParticleHPManager* G4ParticleHPManager::instance = nullptr; G4ParticleHPManager::G4ParticleHPManager() -: verboseLevel(1) -,USE_ONLY_PHOTONEVAPORATION(false) -,SKIP_MISSING_ISOTOPES(false) -,NEGLECT_DOPPLER(false) -,DO_NOT_ADJUST_FINAL_STATE(false) -,PRODUCE_FISSION_FRAGMENTS(false) -,USE_WENDT_FISSION_MODEL(false) -,USE_NRESP71_MODEL(false) -,theElasticCrossSections(nullptr) -,theCaptureCrossSections(nullptr) -,theFissionCrossSections(nullptr) -,theElasticFSs(nullptr) -,theCaptureFSs(nullptr) -,theFissionFSs(nullptr) -,theTSCoherentCrossSections(nullptr) -,theTSIncoherentCrossSections(nullptr) -,theTSInelasticCrossSections(nullptr) -,theTSCoherentFinalStates(nullptr) -,theTSIncoherentFinalStates(nullptr) -,theTSInelasticFinalStates(nullptr) + : theMinEnergyDBRC(0.1 * CLHEP::eV), theMaxEnergyDBRC(210. * CLHEP::eV) { - messenger = new G4ParticleHPMessenger( this ); + messenger = new G4ParticleHPMessenger(this); } G4ParticleHPManager::~G4ParticleHPManager() { - delete messenger; + delete messenger; } G4ParticleHPManager* G4ParticleHPManager::GetInstance() { static G4ParticleHPManager manager; - if (instance == nullptr) - { + if (instance == nullptr) { instance = &manager; } return instance; @@ -82,180 +65,169 @@ G4ParticleHPManager* G4ParticleHPManager::GetInstance() void G4ParticleHPManager::OpenReactionWhiteBoard() { - G4ParticleHPThreadLocalManager::GetInstance()->OpenReactionWhiteBoard(); + G4ParticleHPThreadLocalManager::GetInstance()->OpenReactionWhiteBoard(); } G4ParticleHPReactionWhiteBoard* G4ParticleHPManager::GetReactionWhiteBoard() { - return G4ParticleHPThreadLocalManager::GetInstance()->GetReactionWhiteBoard(); + return G4ParticleHPThreadLocalManager::GetInstance()->GetReactionWhiteBoard(); } void G4ParticleHPManager::CloseReactionWhiteBoard() { - G4ParticleHPThreadLocalManager::GetInstance()->CloseReactionWhiteBoard(); -} - -void G4ParticleHPManager::GetDataStream( G4String filename , std::istringstream& iss ) -{ - G4String* data=0; - G4String compfilename(filename); - compfilename += ".z"; - std::ifstream* in = new std::ifstream ( compfilename , std::ios::binary | std::ios::ate ); - if ( in->good() ) - { - // Use the compressed file - std::streamoff file_size = in->tellg(); - in->seekg( 0 , std::ios::beg ); - Bytef* compdata = new Bytef[ file_size ]; - - while ( *in ) - { // Loop checking, 11.05.2015, T. Koi - in->read( (char*)compdata , file_size ); - } - - uLongf complen = (uLongf) ( file_size*4 ); - Bytef* uncompdata = new Bytef[complen]; - - while ( Z_OK != uncompress ( uncompdata , &complen , compdata , file_size ) ) - { // Loop checking, 11.05.2015, T. Koi - delete[] uncompdata; - complen *= 2; - uncompdata = new Bytef[complen]; - } - delete [] compdata; - // Now "complen" has uncomplessed size - data = new G4String ( (char*)uncompdata , (G4long)complen ); - delete [] uncompdata; - } - else - { - // Use regular text file - std::ifstream thefData( filename , std::ios::in | std::ios::ate ); - if ( thefData.good() ) - { - std::streamoff file_size = thefData.tellg(); - thefData.seekg( 0 , std::ios::beg ); - char* filedata = new char[ file_size ]; - while ( thefData ) - { // Loop checking, 11.05.2015, T. Koi - thefData.read( filedata , file_size ); - } - thefData.close(); - data = new G4String ( filedata , file_size ); - delete [] filedata; - } - else - { - // found no data file - // set error bit to the stream - iss.setstate( std::ios::badbit ); - } - } - if ( data != 0 ) - { - iss.str(*data); - G4String id; - iss >> id; - if ( id == "G4NDL" ) - { - //Register information of file - G4String source; - iss >> source; - register_data_file(filename,source); - } - else - { - iss.seekg( 0 , std::ios::beg ); + G4ParticleHPThreadLocalManager::GetInstance()->CloseReactionWhiteBoard(); +} + +void G4ParticleHPManager::GetDataStream(G4String filename, std::istringstream& iss) +{ + G4String* data = nullptr; + G4String compfilename(filename); + compfilename += ".z"; + auto in = new std::ifstream(compfilename, std::ios::binary | std::ios::ate); + if (in->good()) { + // Use the compressed file + std::streamoff file_size = in->tellg(); + in->seekg(0, std::ios::beg); + auto compdata = new Bytef[file_size]; + + while (*in) { // Loop checking, 11.05.2015, T. Koi + in->read((char*)compdata, file_size); + } + + auto complen = (uLongf)(file_size * 4); + auto uncompdata = new Bytef[complen]; + + while (Z_OK != uncompress(uncompdata, &complen, compdata, file_size)) + { // Loop checking, 11.05.2015, T. Koi + delete[] uncompdata; + complen *= 2; + uncompdata = new Bytef[complen]; + } + delete[] compdata; + // Now "complen" has uncomplessed size + data = new G4String((char*)uncompdata, (G4long)complen); + delete[] uncompdata; + } + else { + // Use regular text file + std::ifstream thefData(filename, std::ios::in | std::ios::ate); + if (thefData.good()) { + std::streamoff file_size = thefData.tellg(); + thefData.seekg(0, std::ios::beg); + auto filedata = new char[file_size]; + while (thefData) { // Loop checking, 11.05.2015, T. Koi + thefData.read(filedata, file_size); } - } - in->close(); delete in; - delete data; + thefData.close(); + data = new G4String(filedata, file_size); + delete[] filedata; + } + else { + // found no data file + // set error bit to the stream + iss.setstate(std::ios::badbit); + } + } + if (data != nullptr) { + iss.str(*data); + G4String id; + iss >> id; + if (id == "G4NDL") { + // Register information of file + G4String source; + iss >> source; + register_data_file(filename, source); + } + else { + iss.seekg(0, std::ios::beg); + } + } + in->close(); + delete in; + delete data; } -void G4ParticleHPManager::GetDataStream2( G4String filename , std::istringstream& iss ) +void G4ParticleHPManager::GetDataStream2(G4String filename, std::istringstream& iss) { - // Checking existance of data file + // Checking existance of data file - G4String compfilename(filename); - compfilename += ".z"; - std::ifstream* in = new std::ifstream ( compfilename , std::ios::binary | std::ios::ate ); - if ( in->good() ) - { - // Compressed file is exist - in->close(); - } - else - { - std::ifstream thefData( filename , std::ios::in | std::ios::ate ); - if ( thefData.good() ) - { - // Regular text file is exist - thefData.close(); - } - else - { - // found no data file - // set error bit to the stream - iss.setstate( std::ios::badbit ); - } - } - delete in; + G4String compfilename(filename); + compfilename += ".z"; + auto in = new std::ifstream(compfilename, std::ios::binary | std::ios::ate); + if (in->good()) { + // Compressed file is exist + in->close(); + } + else { + std::ifstream thefData(filename, std::ios::in | std::ios::ate); + if (thefData.good()) { + // Regular text file is exist + thefData.close(); + } + else { + // found no data file + // set error bit to the stream + iss.setstate(std::ios::badbit); + } + } + delete in; } -void G4ParticleHPManager::SetVerboseLevel( G4int newValue ) +void G4ParticleHPManager::SetVerboseLevel(G4int newValue) { - G4cout << "You are setting a new verbose level for Particle HP package." << G4endl; - G4cout << "the new value will be used in whole of the Particle HP package, i.e., models and cross sections for Capture, Elastic, Fission and Inelastic interaction." << G4endl; - verboseLevel = newValue; + G4cout << "You are setting a new verbose level for Particle HP package." << G4endl; + G4cout << "the new value will be used in whole of the Particle HP package, i.e., models and " + "cross sections for Capture, Elastic, Fission and Inelastic interaction." + << G4endl; + verboseLevel = newValue; } void G4ParticleHPManager::register_data_file(G4String filename, G4String source) { - mDataEvaluation.insert( std::pair < G4String , G4String > ( filename , source ) ); + mDataEvaluation.insert(std::pair(filename, source)); } void G4ParticleHPManager::DumpDataSource() { - - G4cout << "Data source of this Partile HP calculation are " << G4endl; - for (auto it = mDataEvaluation.cbegin(); it != mDataEvaluation.cend(); ++it) - { - G4cout << it->first << " " << it->second << G4endl; - } - G4cout << G4endl; + G4cout << "Data source of this Partile HP calculation are " << G4endl; + for (const auto& it : mDataEvaluation) { + G4cout << it.first << " " << it.second << G4endl; + } + G4cout << G4endl; } -G4PhysicsTable* G4ParticleHPManager::GetInelasticCrossSections(const G4ParticleDefinition* particle ) +G4PhysicsTable* G4ParticleHPManager::GetInelasticCrossSections(const G4ParticleDefinition* particle) { - if ( theInelasticCrossSections.end() != theInelasticCrossSections.find( particle ) ) - return theInelasticCrossSections.find( particle )->second; - else - return nullptr; + if (theInelasticCrossSections.end() != theInelasticCrossSections.find(particle)) + return theInelasticCrossSections.find(particle)->second; + return nullptr; } -void G4ParticleHPManager::RegisterInelasticCrossSections( const G4ParticleDefinition* particle, G4PhysicsTable* val ) +void G4ParticleHPManager::RegisterInelasticCrossSections(const G4ParticleDefinition* particle, + G4PhysicsTable* val) { - theInelasticCrossSections.insert( std::pair( particle , val ) ); + theInelasticCrossSections.insert( + std::pair(particle, val)); } -std::vector* G4ParticleHPManager::GetInelasticFinalStates(const G4ParticleDefinition* particle) +std::vector* +G4ParticleHPManager::GetInelasticFinalStates(const G4ParticleDefinition* particle) { - if ( theInelasticFSs.end() != theInelasticFSs.find( particle ) ) - return theInelasticFSs.find( particle )->second; - else - return nullptr; + if (theInelasticFSs.end() != theInelasticFSs.find(particle)) + return theInelasticFSs.find(particle)->second; + return nullptr; } -void G4ParticleHPManager::RegisterInelasticFinalStates( const G4ParticleDefinition* particle , std::vector* val ) +void G4ParticleHPManager::RegisterInelasticFinalStates(const G4ParticleDefinition* particle, + std::vector* val) { - theInelasticFSs.insert ( std::pair*>( particle , val ) ); + theInelasticFSs.insert( + std::pair*>(particle, val)); } - void G4ParticleHPManager::DumpSetting() { - G4cout << G4endl - << "=======================================================" << G4endl + G4cout << G4endl << "=======================================================" << G4endl << "====== ParticleHP Physics Parameters ========" << G4endl << "=======================================================" << G4endl << " UseOnlyPhotoEvaporation ? " << USE_ONLY_PHOTONEVAPORATION << G4endl @@ -265,6 +237,6 @@ void G4ParticleHPManager::DumpSetting() << " ProduceFissionFragments ? " << PRODUCE_FISSION_FRAGMENTS << G4endl << " UseWendtFissionModel ? " << USE_WENDT_FISSION_MODEL << G4endl << " UseNRESP71Model ? " << USE_NRESP71_MODEL << G4endl - << "=======================================================" << G4endl - << G4endl; + << " UseDBRC ? " << USE_DBRC << G4endl + << "=======================================================" << G4endl << G4endl; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPMessenger.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPMessenger.cc index 67f27443979..5df27c7ec86 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPMessenger.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPMessenger.cc @@ -24,240 +24,386 @@ // ******************************************************************** // #include "G4ParticleHPMessenger.hh" + +#include "G4HadronicParameters.hh" #include "G4ParticleHPManager.hh" -#include "G4UIdirectory.hh" +#include "G4SystemOfUnits.hh" +#include "G4UIcmdWithABool.hh" +#include "G4UIcmdWithADouble.hh" +#include "G4UIcmdWithADoubleAndUnit.hh" #include "G4UIcmdWithAString.hh" #include "G4UIcmdWithAnInteger.hh" -#include "G4HadronicParameters.hh" - +#include "G4UIcommand.hh" +#include "G4UIdirectory.hh" +#include "G4UIparameter.hh" +#include "G4UnitsTable.hh" -G4ParticleHPMessenger::G4ParticleHPMessenger( G4ParticleHPManager* man ) -:manager(man) +G4ParticleHPMessenger::G4ParticleHPMessenger(G4ParticleHPManager* man) : manager(man) { - ParticleHPDir = new G4UIdirectory( "/process/had/particle_hp/" ); - ParticleHPDir->SetGuidance( "UI commands of ParticleHP" ); + ParticleHPDir = new G4UIdirectory("/process/had/particle_hp/"); + ParticleHPDir->SetGuidance("UI commands of ParticleHP"); + + PhotoEvaCmd = new G4UIcmdWithAString("/process/had/particle_hp/use_photo_evaporation", this); + PhotoEvaCmd->SetGuidance( + " Force the use of the Photon Evaporation model, instead of the neutron capture final state " + "data."); + PhotoEvaCmd->SetParameterName("choice", false); + PhotoEvaCmd->SetCandidates("true false"); + PhotoEvaCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - PhotoEvaCmd = new G4UIcmdWithAString("/process/had/particle_hp/use_photo_evaporation",this); - PhotoEvaCmd->SetGuidance(" Force the use of the Photon Evaporation model, instead of the neutron capture final state data."); - PhotoEvaCmd->SetParameterName("choice",false); - PhotoEvaCmd->SetCandidates("true false"); - PhotoEvaCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + SkipMissingCmd = new G4UIcmdWithAString("/process/had/particle_hp/skip_missing_isotopes", this); + SkipMissingCmd->SetGuidance( + "Use only exact isotope data files, instead of allowing nearby isotope files to be used."); + SkipMissingCmd->SetGuidance( + "In this case if the exact file is not available, the cross section will be set to zero."); + SkipMissingCmd->SetParameterName("choice", false); + SkipMissingCmd->SetCandidates("true false"); + SkipMissingCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - SkipMissingCmd = new G4UIcmdWithAString("/process/had/particle_hp/skip_missing_isotopes",this); - SkipMissingCmd->SetGuidance("Use only exact isotope data files, instead of allowing nearby isotope files to be used."); - SkipMissingCmd->SetGuidance("In this case if the exact file is not available, the cross section will be set to zero."); - SkipMissingCmd->SetParameterName("choice",false); - SkipMissingCmd->SetCandidates("true false"); - SkipMissingCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + NeglectDopplerCmd = + new G4UIcmdWithAString("/process/had/particle_hp/neglect_Doppler_broadening", this); + NeglectDopplerCmd->SetGuidance( + "Switch off the Doppler broadening due to the thermal motion of the target nucleus."); + NeglectDopplerCmd->SetGuidance("This option provides a significant CPU performance advantage."); + NeglectDopplerCmd->SetParameterName("choice", false); + NeglectDopplerCmd->SetCandidates("true false"); + NeglectDopplerCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - NeglectDopplerCmd = new G4UIcmdWithAString("/process/had/particle_hp/neglect_Doppler_broadening",this); - NeglectDopplerCmd->SetGuidance("Switch off the Doppler broadening due to the thermal motion of the target nucleus."); - NeglectDopplerCmd->SetGuidance("This option provides a significant CPU performance advantage."); - NeglectDopplerCmd->SetParameterName("choice",false); - NeglectDopplerCmd->SetCandidates("true false"); - NeglectDopplerCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + DoNotAdjustFSCmd = + new G4UIcmdWithAString("/process/had/particle_hp/do_not_adjust_final_state", this); + DoNotAdjustFSCmd->SetGuidance("Disable to adjust final state for getting better conservation."); + DoNotAdjustFSCmd->SetParameterName("choice", false); + DoNotAdjustFSCmd->SetCandidates("true false"); + DoNotAdjustFSCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - DoNotAdjustFSCmd = new G4UIcmdWithAString("/process/had/particle_hp/do_not_adjust_final_state",this); - DoNotAdjustFSCmd->SetGuidance("Disable to adjust final state for getting better conservation."); - DoNotAdjustFSCmd->SetParameterName("choice",false); - DoNotAdjustFSCmd->SetCandidates("true false"); - DoNotAdjustFSCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + ProduceFissionFragementCmd = + new G4UIcmdWithAString("/process/had/particle_hp/produce_fission_fragment", this); + ProduceFissionFragementCmd->SetGuidance("Enable to generate fission fragments."); + ProduceFissionFragementCmd->SetParameterName("choice", false); + ProduceFissionFragementCmd->SetCandidates("true false"); + ProduceFissionFragementCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - ProduceFissionFragementCmd = new G4UIcmdWithAString("/process/had/particle_hp/produce_fission_fragment",this); - ProduceFissionFragementCmd->SetGuidance("Enable to generate fission fragments."); - ProduceFissionFragementCmd->SetParameterName("choice",false); - ProduceFissionFragementCmd->SetCandidates("true false"); - ProduceFissionFragementCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + WendtFissionModelCmd = + new G4UIcmdWithAString("/process/had/particle_hp/use_Wendt_fission_model", this); + WendtFissionModelCmd->SetGuidance("Enable use of Wendt fission model."); + WendtFissionModelCmd->SetParameterName("choice", false); + WendtFissionModelCmd->SetCandidates("true false"); + WendtFissionModelCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - WendtFissionModelCmd = new G4UIcmdWithAString("/process/had/particle_hp/use_Wendt_fission_model",this); - WendtFissionModelCmd->SetGuidance("Enable use of Wendt fission model."); - WendtFissionModelCmd->SetParameterName("choice",false); - WendtFissionModelCmd->SetCandidates("true false"); - WendtFissionModelCmd->AvailableForStates(G4State_PreInit,G4State_Idle); - - NRESP71Cmd = new G4UIcmdWithAString("/process/had/particle_hp/use_NRESP71_model",this); - NRESP71Cmd->SetGuidance("Enable to use NRESP71 model for n on C reaction"); - NRESP71Cmd->SetParameterName("choice",false); - NRESP71Cmd->SetCandidates("true false"); - NRESP71Cmd->AvailableForStates(G4State_PreInit,G4State_Idle); + NRESP71Cmd = new G4UIcmdWithAString("/process/had/particle_hp/use_NRESP71_model", this); + NRESP71Cmd->SetGuidance("Enable to use NRESP71 model for n on C reaction"); + NRESP71Cmd->SetParameterName("choice", false); + NRESP71Cmd->SetCandidates("true false"); + NRESP71Cmd->AvailableForStates(G4State_PreInit, G4State_Idle); - VerboseCmd = new G4UIcmdWithAnInteger("/process/had/particle_hp/verbose",this); - VerboseCmd->SetGuidance("Set Verbose level of ParticleHP package"); - VerboseCmd->SetParameterName("verbose_level",true); - VerboseCmd->SetDefaultValue(1); - VerboseCmd->SetRange("verbose_level >=0"); - VerboseCmd->AvailableForStates(G4State_PreInit,G4State_Idle); + VerboseCmd = new G4UIcmdWithAnInteger("/process/had/particle_hp/verbose", this); + VerboseCmd->SetGuidance("Set Verbose level of ParticleHP package"); + VerboseCmd->SetParameterName("verbose_level", true); + VerboseCmd->SetDefaultValue(1); + VerboseCmd->SetRange("verbose_level >=0"); + VerboseCmd->AvailableForStates(G4State_PreInit, G4State_Idle); + + UseDBRCCmd = new G4UIcmdWithABool("/process/had/particle_hp/use_DBRC", this); + UseDBRCCmd->SetGuidance("Enable use of Doppler Broadening Rejection Correction algorithm."); + UseDBRCCmd->SetDefaultValue(false); + UseDBRCCmd->AvailableForStates(G4State_PreInit, G4State_Idle); + + MaxEnergySVTCmd = new G4UIcmdWithADoubleAndUnit("/process/had/particle_hp/SVT_E_max", this); + MaxEnergySVTCmd->SetGuidance("Energy threshold under which the SVT method is applied."); + MaxEnergySVTCmd->SetGuidance("The default is 400. kT."); + MaxEnergySVTCmd->SetParameterName("MaxEnergySVT", false); + MaxEnergySVTCmd->SetRange("MaxEnergySVT>=0."); + MaxEnergySVTCmd->SetUnitCategory("Energy"); + MaxEnergySVTCmd->AvailableForStates(G4State_PreInit, G4State_Idle); + + MinADBRCCmd = new G4UIcmdWithADouble("/process/had/particle_hp/DBRC_A_min", this); + MinADBRCCmd->SetGuidance("Atomic mass in neutron mass above which the DBRC is applied."); + MinADBRCCmd->SetGuidance("The default is A=200."); + MinADBRCCmd->SetParameterName("MinASVT", false); + MinADBRCCmd->SetRange("MinASVT>=0."); + MinADBRCCmd->SetDefaultValue(200); + MinADBRCCmd->AvailableForStates(G4State_PreInit, G4State_Idle); + + MinEnergyDBRCCmd = new G4UIcmdWithADoubleAndUnit("/process/had/particle_hp/DBRC_E_min", this); + MinEnergyDBRCCmd->SetGuidance( + "Energy threshold under which the DBRC method is not applied and only the SVT is used."); + MinEnergyDBRCCmd->SetGuidance("The default value is 0.1 eV."); + MinEnergyDBRCCmd->SetParameterName("MinEnergyDBRC", false); + MinEnergyDBRCCmd->SetRange("MinEnergyDBRC>0."); + MinEnergyDBRCCmd->SetUnitCategory("Energy"); + MinEnergyDBRCCmd->SetDefaultValue(0.1 * CLHEP::eV); + MinEnergyDBRCCmd->AvailableForStates(G4State_PreInit, G4State_Idle); + + MaxEnergyDBRCCmd = new G4UIcmdWithADoubleAndUnit("/process/had/particle_hp/DBRC_E_max", this); + MaxEnergyDBRCCmd->SetGuidance("Energy threshold under which the DBRC method is applied."); + MaxEnergyDBRCCmd->SetGuidance("The default value is 210. eV."); + MaxEnergyDBRCCmd->SetParameterName("MaxEnergyDBRC", false); + MaxEnergyDBRCCmd->SetRange("MaxEnergyDBRC>0."); + MaxEnergyDBRCCmd->SetUnitCategory("Energy"); + MaxEnergyDBRCCmd->SetDefaultValue(210. * CLHEP::eV); + MaxEnergyDBRCCmd->AvailableForStates(G4State_PreInit, G4State_Idle); } G4ParticleHPMessenger::~G4ParticleHPMessenger() { - delete ParticleHPDir; - delete PhotoEvaCmd; - delete SkipMissingCmd; - delete NeglectDopplerCmd; - delete DoNotAdjustFSCmd; - delete ProduceFissionFragementCmd; - delete WendtFissionModelCmd; - delete NRESP71Cmd; - delete VerboseCmd; + delete ParticleHPDir; + delete PhotoEvaCmd; + delete SkipMissingCmd; + delete NeglectDopplerCmd; + delete DoNotAdjustFSCmd; + delete ProduceFissionFragementCmd; + delete WendtFissionModelCmd; + delete NRESP71Cmd; + delete VerboseCmd; + delete UseDBRCCmd; + delete MaxEnergySVTCmd; + delete MinADBRCCmd; + delete MinEnergyDBRCCmd; + delete MaxEnergyDBRCCmd; } -void G4ParticleHPMessenger::SetNewValue(G4UIcommand* command,G4String newValue) +void G4ParticleHPMessenger::SetNewValue(G4UIcommand* command, G4String newValue) { - G4bool bValue = false; - if ( newValue == "true" ) bValue = true; + G4bool bValue = false; + if (newValue == "true") bValue = true; - if ( command == PhotoEvaCmd ) { - if ( manager->GetUseOnlyPhotoEvaporation() != bValue ) { - manager->SetUseOnlyPhotoEvaporation( bValue ); - #ifdef G4VERBOSE - if ( G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) { - G4cout << G4endl - << "=== G4ParticleHPMessenger CHANGED PARAMETER UseOnlyPhotoEvaporation TO " - << bValue << " ===" << G4endl; - } - if ( bValue ) { - G4cout << " -> Forced the use of the Photon Evaporation model (instead of the neutron capture final state data)" - << G4endl; - } else { - G4cout << " -> Go back to use the default neutron capture final state data !" << G4endl; - } - #endif - } - } - - if ( command == SkipMissingCmd) { - if ( manager->GetSkipMissingIsotopes() != bValue ) { - manager->SetSkipMissingIsotopes( bValue ); - #ifdef G4VERBOSE - if ( G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) { - G4cout << G4endl - << "=== G4ParticleHPMessenger CHANGED PARAMETER SkipMissingIsotopes TO " - << bValue << " ===" << G4endl; - } - if ( bValue ) { - G4cout << " -> Use only exact isotope data files, instead of allowing nearby isotope files to be used: \n" - << " if the exact file is not available, the cross section will be set to zero !" - << G4endl; - } else { - G4cout << " -> Go back to the default, i.e. use nearby isotope files when the exact isotope data files are not found !" - << G4endl; - } - #endif - } - } - - if ( command == NeglectDopplerCmd ) { - if ( manager->GetNeglectDoppler() != bValue ) { - manager->SetNeglectDoppler( bValue ); - #ifdef G4VERBOSE - if ( G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) { - G4cout << G4endl - << "=== G4ParticleHPMessenger CHANGED PARAMETER NeglectDoppler TO " - << bValue << " ===" << G4endl; - } - if ( bValue ) { - G4cout << " -> Switched off the Doppler broadening due to the thermal motion of the target nucleus: \n" - << " on-the-fly Doppler broadening will be neglected in the cross section calculations of \n" - << " capture, elastic, fission and inelastic reactions/scatterings of neutrons below 20 MeV.\n" - << " This option provides a significant CPU performance advantage !" - << G4endl; - } else { - G4cout << " -> Go back to the default, i.e. switch on the Doppler broadening on-the-fly !" << G4endl; - } - #endif - } - } - - if ( command == DoNotAdjustFSCmd ) { - if ( manager->GetDoNotAdjustFinalState() != bValue ) { - manager->SetDoNotAdjustFinalState( bValue ); - #ifdef G4VERBOSE - if ( G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) { - G4cout << G4endl - << "=== G4ParticleHPMessenger CHANGED PARAMETER DoNotAdjustFinalState TO " - << bValue << " ===" << G4endl; - } - if ( bValue ) { - G4cout << " -> Disabled the adjustment of the final state for getting better conservation !" - << G4endl; - } else { - G4cout << " -> Go back to the default, i.e. adjust the final state to get better conservation !" - << G4endl; - } - #endif - } - } - - if ( command == ProduceFissionFragementCmd ) { - if ( manager->GetProduceFissionFragments() != bValue ) { - manager->SetProduceFissionFragments( bValue ); - #ifdef G4VERBOSE - if ( G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) { - G4cout << G4endl - << "=== G4ParticleHPMessenger CHANGED PARAMETER ProduceFissionFragments TO " - << bValue << " ===" << G4endl; - } - if ( bValue ) { - G4cout << " -> Enabled the generation of fission fragments !" - << G4endl; - } else { - G4cout << " -> Go back to the default, i.e. do not generate fission fragments !" << G4endl; - } - #endif - } - } - - if ( command == WendtFissionModelCmd ) { - if ( manager->GetUseWendtFissionModel() != bValue ) { - manager->SetUseWendtFissionModel( bValue ); - // Make sure both fission fragment models are not active at same time - if ( bValue ) manager->SetProduceFissionFragments( false ); - #ifdef G4VERBOSE - if ( G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) { - G4cout << G4endl - << "=== G4ParticleHPMessenger CHANGED PARAMETER UseWendtFissionModel TO " - << bValue << " ===" << G4endl; - } - if ( bValue ) { - G4cout << " -> Enabled the use of Wendt fission model !" << G4endl; - } else { - G4cout << " -> Go back to the default, i.e. do not use the Wendt fission model !" << G4endl; - } - #endif - } - } - - if ( command == NRESP71Cmd ) { - if ( manager->GetUseNRESP71Model() != bValue ) { - manager->SetUseNRESP71Model( bValue ); - #ifdef G4VERBOSE - if ( G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) { - G4cout << G4endl - << "=== G4ParticleHPMessenger CHANGED PARAMETER UseNRESP71Model TO " - << bValue << " ===" << G4endl; - } - if ( bValue ) { - G4cout << " -> Enabled the use of NRESP71 model for n on C reaction !" << G4endl; - } else { - G4cout << " -> Go back to the default, i.e. do not use the NRESP71 model !" << G4endl; - } - #endif - } - } - - if ( command == VerboseCmd ) { - G4int verboseLevel = VerboseCmd->ConvertToInt( newValue ); - if ( manager->GetVerboseLevel() != verboseLevel ) { - manager->SetVerboseLevel( verboseLevel ); - #ifdef G4VERBOSE - if ( G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) { - G4cout << G4endl - << "=== G4ParticleHPMessenger CHANGED PARAMETER VerboseLevel TO " - << verboseLevel << " ===" << G4endl; - } - #endif - } - } -} + if (command == PhotoEvaCmd) { + if (manager->GetUseOnlyPhotoEvaporation() != bValue) { + manager->SetUseOnlyPhotoEvaporation(bValue); +#ifdef G4VERBOSE + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { + G4cout << G4endl + << "=== G4ParticleHPMessenger CHANGED PARAMETER UseOnlyPhotoEvaporation TO " + << bValue << " ===" << G4endl; + } + if (bValue) { + G4cout << " -> Forced the use of the Photon Evaporation model (instead of the neutron " + "capture final state data)" + << G4endl; + } + else { + G4cout << " -> Go back to use the default neutron capture final state data !" << G4endl; + } +#endif + } + } + if (command == SkipMissingCmd) { + if (manager->GetSkipMissingIsotopes() != bValue) { + manager->SetSkipMissingIsotopes(bValue); +#ifdef G4VERBOSE + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { + G4cout << G4endl << "=== G4ParticleHPMessenger CHANGED PARAMETER SkipMissingIsotopes TO " + << bValue << " ===" << G4endl; + } + if (bValue) { + G4cout + << " -> Use only exact isotope data files, instead of allowing nearby isotope files " + "to be used: \n" + << " if the exact file is not available, the cross section will be set to zero !" + << G4endl; + } + else { + G4cout << " -> Go back to the default, i.e. use nearby isotope files when the exact " + "isotope data files are not found !" + << G4endl; + } +#endif + } + } + + if (command == NeglectDopplerCmd) { + if (manager->GetNeglectDoppler() != bValue) { + manager->SetNeglectDoppler(bValue); +#ifdef G4VERBOSE + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { + G4cout << G4endl << "=== G4ParticleHPMessenger CHANGED PARAMETER NeglectDoppler TO " + << bValue << " ===" << G4endl; + } + if (bValue) { + G4cout << " -> Switched off the Doppler broadening due to the thermal motion of the " + "target nucleus: \n" + << " on-the-fly Doppler broadening will be neglected in the cross section " + "calculations of \n" + << " capture, elastic, fission and inelastic reactions/scatterings of " + "neutrons below 20 MeV.\n" + << " This option provides a significant CPU performance advantage !" << G4endl; + } + else { + G4cout + << " -> Go back to the default, i.e. switch on the Doppler broadening on-the-fly !" + << G4endl; + } +#endif + } + } + + if (command == DoNotAdjustFSCmd) { + if (manager->GetDoNotAdjustFinalState() != bValue) { + manager->SetDoNotAdjustFinalState(bValue); +#ifdef G4VERBOSE + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { + G4cout << G4endl << "=== G4ParticleHPMessenger CHANGED PARAMETER DoNotAdjustFinalState TO " + << bValue << " ===" << G4endl; + } + if (bValue) { + G4cout + << " -> Disabled the adjustment of the final state for getting better conservation !" + << G4endl; + } + else { + G4cout << " -> Go back to the default, i.e. adjust the final state to get better " + "conservation !" + << G4endl; + } +#endif + } + } + + if (command == ProduceFissionFragementCmd) { + if (manager->GetProduceFissionFragments() != bValue) { + manager->SetProduceFissionFragments(bValue); +#ifdef G4VERBOSE + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { + G4cout << G4endl + << "=== G4ParticleHPMessenger CHANGED PARAMETER ProduceFissionFragments TO " + << bValue << " ===" << G4endl; + } + if (bValue) { + G4cout << " -> Enabled the generation of fission fragments !" << G4endl; + } + else { + G4cout << " -> Go back to the default, i.e. do not generate fission fragments !" + << G4endl; + } +#endif + } + } + + if (command == WendtFissionModelCmd) { + if (manager->GetUseWendtFissionModel() != bValue) { + manager->SetUseWendtFissionModel(bValue); + // Make sure both fission fragment models are not active at same time + if (bValue) manager->SetProduceFissionFragments(false); +#ifdef G4VERBOSE + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { + G4cout << G4endl << "=== G4ParticleHPMessenger CHANGED PARAMETER UseWendtFissionModel TO " + << bValue << " ===" << G4endl; + } + if (bValue) { + G4cout << " -> Enabled the use of Wendt fission model !" << G4endl; + } + else { + G4cout << " -> Go back to the default, i.e. do not use the Wendt fission model !" + << G4endl; + } +#endif + } + } + + if (command == NRESP71Cmd) { + if (manager->GetUseNRESP71Model() != bValue) { + manager->SetUseNRESP71Model(bValue); +#ifdef G4VERBOSE + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { + G4cout << G4endl << "=== G4ParticleHPMessenger CHANGED PARAMETER UseNRESP71Model TO " + << bValue << " ===" << G4endl; + } + if (bValue) { + G4cout << " -> Enabled the use of NRESP71 model for n on C reaction !" << G4endl; + } + else { + G4cout << " -> Go back to the default, i.e. do not use the NRESP71 model !" << G4endl; + } +#endif + } + } + + if (command == VerboseCmd) { + G4int verboseLevel = VerboseCmd->ConvertToInt(newValue); + if (manager->GetVerboseLevel() != verboseLevel) { + manager->SetVerboseLevel(verboseLevel); +#ifdef G4VERBOSE + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { + G4cout << G4endl << "=== G4ParticleHPMessenger CHANGED PARAMETER VerboseLevel TO " + << verboseLevel << " ===" << G4endl; + } +#endif + } + } + + if (command == UseDBRCCmd) { + bValue = UseDBRCCmd->GetNewBoolValue(newValue); + if (manager->GetUseDBRC() != bValue) { + manager->SetUseDBRC(bValue); +#ifdef G4VERBOSE + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { + G4cout << G4endl << "=== G4ParticleHPMessenger CHANGED PARAMETER UseDBRC TO " << bValue + << " ===" << G4endl; + } + if (bValue) { + G4cout << " -> Using the DBRC algorithm!" << G4endl; + } + else { + G4cout << " -> Do not use the DBRC algorithm!" << G4endl; + } +#endif + } + } + + if (command == MaxEnergySVTCmd) { + G4double energymax = MaxEnergySVTCmd->GetNewDoubleValue(newValue); + if (G4HadronicParameters::Instance()->GetNeutronKineticEnergyThresholdForSVT() != energymax) { + G4HadronicParameters::Instance()->SetNeutronKineticEnergyThresholdForSVT(energymax); +#ifdef G4VERBOSE + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { + G4cout << G4endl + << "=== G4ParticleHPMessenger CHANGED PARAMETER for SVT algorithm ===" << G4endl; + G4cout << "max energy: " << G4BestUnit(energymax, "Energy") << G4endl; + } +#endif + } + } + + if (command == MinADBRCCmd) { + G4double Amin = MinADBRCCmd->GetNewDoubleValue(newValue); + if (manager->GetMinADBRC() != Amin) { + manager->SetMinADBRC(Amin); +#ifdef G4VERBOSE + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { + G4cout << G4endl + << "=== G4ParticleHPMessenger CHANGED PARAMETER for DBRC algorithm ===" << G4endl; + G4cout << "min A: " << Amin << G4endl; + } +#endif + } + } + + if (command == MinEnergyDBRCCmd) { + G4double energymin = MinEnergyDBRCCmd->GetNewDoubleValue(newValue); + if (manager->GetMinEnergyDBRC() != energymin) { + manager->SetMinEnergyDBRC(energymin); +#ifdef G4VERBOSE + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { + G4cout << G4endl + << "=== G4ParticleHPMessenger CHANGED PARAMETER for DBRC algorithm ===" << G4endl; + G4cout << "min energy: " << G4BestUnit(energymin, "Energy") << G4endl; + } +#endif + } + } + + if (command == MaxEnergyDBRCCmd) { + G4double energymax = MaxEnergyDBRCCmd->GetNewDoubleValue(newValue); + if (manager->GetMaxEnergyDBRC() != energymax) { + manager->SetMaxEnergyDBRC(energymax); +#ifdef G4VERBOSE + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { + G4cout << G4endl + << "=== G4ParticleHPMessenger CHANGED PARAMETER for SVT algorithm ===" << G4endl; + G4cout << "max energy: " << G4BestUnit(energymax, "Energy") << G4endl; + } +#endif + } + } +} diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPN2AInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPN2AInelasticFS.cc index 1492707e59b..790089e214a 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPN2AInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPN2AInelasticFS.cc @@ -30,57 +30,62 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPN2AInelasticFS.hh" -#include "G4Nucleus.hh" + #include "G4Alpha.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHPN2AInelasticFS::G4ParticleHPN2AInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHPN2AInelasticFS_F11" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHPN2AInelasticFS_F11"); } -G4HadFinalState * G4ParticleHPN2AInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHPN2AInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[3]; + G4ParticleDefinition* theDefs[3]; theDefs[0] = G4Neutron::Neutron(); theDefs[1] = G4Alpha::Alpha(); theDefs[2] = G4Alpha::Alpha(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 3); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHPN2AInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHPN2AInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-8; - ResidualZ = Z-4; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-8; - ResidualZ = Z-3; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-7; - ResidualZ = Z-3; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A-6; - ResidualZ = Z-3; - } else if( projectile == G4He3::He3() ) { - ResidualA = A-6; - ResidualZ = Z-2; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A-5; - ResidualZ = Z-2; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 8; + ResidualZ = Z - 4; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 8; + ResidualZ = Z - 3; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 7; + ResidualZ = Z - 3; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A - 6; + ResidualZ = Z - 3; + } + else if (projectile == G4He3::He3()) { + ResidualA = A - 6; + ResidualZ = Z - 2; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A - 5; + ResidualZ = Z - 2; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } - diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPN2PInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPN2PInelasticFS.cc index 5ddbda6dd7c..d0577d350a3 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPN2PInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPN2PInelasticFS.cc @@ -30,56 +30,62 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPN2PInelasticFS.hh" + #include "G4Nucleus.hh" -#include "G4Proton.hh" #include "G4PhysicsModelCatalog.hh" +#include "G4Proton.hh" G4ParticleHPN2PInelasticFS::G4ParticleHPN2PInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHPN2PInelasticFS_F21" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHPN2PInelasticFS_F21"); } -G4HadFinalState * G4ParticleHPN2PInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHPN2PInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[3]; + G4ParticleDefinition* theDefs[3]; theDefs[0] = G4Neutron::Neutron(); theDefs[1] = G4Proton::Proton(); theDefs[2] = G4Proton::Proton(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 3); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHPN2PInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHPN2PInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-2; - ResidualZ = Z-2; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-2; - ResidualZ = Z-1; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-1; - ResidualZ = Z-1; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A; - ResidualZ = Z-1; - } else if( projectile == G4He3::He3() ) { - ResidualA = A; - ResidualZ = Z; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A+1; - ResidualZ = Z; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 2; + ResidualZ = Z - 2; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 2; + ResidualZ = Z - 1; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 1; + ResidualZ = Z - 1; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A; + ResidualZ = Z - 1; + } + else if (projectile == G4He3::He3()) { + ResidualA = A; + ResidualZ = Z; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A + 1; + ResidualZ = Z; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPN3AInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPN3AInelasticFS.cc index 8a2d5f6ae63..fa40e90b1ca 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPN3AInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPN3AInelasticFS.cc @@ -30,57 +30,63 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPN3AInelasticFS.hh" -#include "G4Nucleus.hh" + #include "G4Alpha.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHPN3AInelasticFS::G4ParticleHPN3AInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHPN3AInelasticFS_F07" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHPN3AInelasticFS_F07"); } -G4HadFinalState * G4ParticleHPN3AInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHPN3AInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[4]; + G4ParticleDefinition* theDefs[4]; theDefs[0] = G4Neutron::Neutron(); theDefs[1] = G4Alpha::Alpha(); theDefs[2] = G4Alpha::Alpha(); theDefs[3] = G4Alpha::Alpha(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 4); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHPN3AInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHPN3AInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-12; - ResidualZ = Z-6; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-12; - ResidualZ = Z-5; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-11; - ResidualZ = Z-5; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A-10; - ResidualZ = Z-5; - } else if( projectile == G4He3::He3() ) { - ResidualA = A-10; - ResidualZ = Z-4; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A-9; - ResidualZ = Z-4; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 12; + ResidualZ = Z - 6; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 12; + ResidualZ = Z - 5; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 11; + ResidualZ = Z - 5; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A - 10; + ResidualZ = Z - 5; + } + else if (projectile == G4He3::He3()) { + ResidualA = A - 10; + ResidualZ = Z - 4; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A - 9; + ResidualZ = Z - 4; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNAInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNAInelasticFS.cc index 7d1b531637b..d086256f9cb 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNAInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNAInelasticFS.cc @@ -30,55 +30,61 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPNAInelasticFS.hh" -#include "G4Nucleus.hh" + #include "G4Alpha.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHPNAInelasticFS::G4ParticleHPNAInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHPNAInelasticFS_F06" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHPNAInelasticFS_F06"); } -G4HadFinalState * G4ParticleHPNAInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHPNAInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[2]; + G4ParticleDefinition* theDefs[2]; theDefs[0] = G4Neutron::Neutron(); theDefs[1] = G4Alpha::Alpha(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 2); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHPNAInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHPNAInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-4; - ResidualZ = Z-2; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-4; - ResidualZ = Z-1; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-3; - ResidualZ = Z-1; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A-2; - ResidualZ = Z-1; - } else if( projectile == G4He3::He3() ) { - ResidualA = A-2; - ResidualZ = Z; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A-1; - ResidualZ = Z; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 4; + ResidualZ = Z - 2; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 4; + ResidualZ = Z - 1; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 3; + ResidualZ = Z - 1; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A - 2; + ResidualZ = Z - 1; + } + else if (projectile == G4He3::He3()) { + ResidualA = A - 2; + ResidualZ = Z; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A - 1; + ResidualZ = Z; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNBodyPhaseSpace.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNBodyPhaseSpace.cc index a130a04bc61..c1ddd78766b 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNBodyPhaseSpace.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNBodyPhaseSpace.cc @@ -28,112 +28,106 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPNBodyPhaseSpace.hh" -#include "G4PhysicalConstants.hh" -#include "Randomize.hh" -#include "G4ThreeVector.hh" -#include "G4Gamma.hh" + +#include "G4Alpha.hh" +#include "G4Deuteron.hh" #include "G4Electron.hh" -#include "G4Positron.hh" +#include "G4Gamma.hh" +#include "G4He3.hh" #include "G4Neutron.hh" +#include "G4PhysicalConstants.hh" +#include "G4Positron.hh" #include "G4Proton.hh" -#include "G4Deuteron.hh" +#include "G4ThreeVector.hh" #include "G4Triton.hh" -#include "G4He3.hh" -#include "G4Alpha.hh" +#include "Randomize.hh" -G4ReactionProduct * G4ParticleHPNBodyPhaseSpace::Sample(G4double anEnergy, G4double massCode, G4double ) +G4ReactionProduct* G4ParticleHPNBodyPhaseSpace::Sample(G4double anEnergy, G4double massCode, + G4double) { - G4ReactionProduct * result = new G4ReactionProduct; - G4int Z = static_cast(massCode/1000); - G4int A = static_cast(massCode-1000*Z); + auto result = new G4ReactionProduct; + auto Z = static_cast(massCode / 1000); + auto A = static_cast(massCode - 1000 * Z); + + if (massCode == 0) { + result->SetDefinition(G4Gamma::Gamma()); + } + else if (A == 0) { + result->SetDefinition(G4Electron::Electron()); + if (Z == 1) result->SetDefinition(G4Positron::Positron()); + } + else if (A == 1) { + result->SetDefinition(G4Neutron::Neutron()); + if (Z == 1) result->SetDefinition(G4Proton::Proton()); + } + else if (A == 2) { + result->SetDefinition(G4Deuteron::Deuteron()); + } + else if (A == 3) { + result->SetDefinition(G4Triton::Triton()); + if (Z == 2) result->SetDefinition(G4He3::He3()); + } + else if (A == 4) { + result->SetDefinition(G4Alpha::Alpha()); + if (Z != 2) throw G4HadronicException(__FILE__, __LINE__, "Unknown ion case 1"); + } + else { + throw G4HadronicException(__FILE__, __LINE__, + "G4ParticleHPNBodyPhaseSpace: Unknown ion case 2"); + } + + // Get the energy from phase-space distribution + // in CMS + // P = Cn*std::sqrt(E')*(Emax-E')**(3*n/2-4) + G4double maxE = GetEmax(anEnergy, result->GetMass()); + if (maxE <= 0) { + maxE = 1. * CLHEP::eV; + } + G4double energy = 0.; + G4double max(0); + if (theTotalCount <= 3) { + max = maxE / 2.; + } + else if (theTotalCount == 4) { + max = maxE / 5.; + } + else if (theTotalCount == 5) { + max = maxE / 8.; + } + else { + throw G4HadronicException( + __FILE__, __LINE__, + "NeutronHP Phase-space distribution cannot cope with this number of particles"); + } + G4double testit; + G4double rand0 = Prob(max, maxE, theTotalCount); + G4double rand; - if(massCode==0) - { - result->SetDefinition(G4Gamma::Gamma()); - } - else if(A==0) - { - result->SetDefinition(G4Electron::Electron()); - if(Z==1) result->SetDefinition(G4Positron::Positron()); - } - else if(A==1) - { - result->SetDefinition(G4Neutron::Neutron()); - if(Z==1) result->SetDefinition(G4Proton::Proton()); - } - else if(A==2) - { - result->SetDefinition(G4Deuteron::Deuteron()); - } - else if(A==3) - { - result->SetDefinition(G4Triton::Triton()); - if(Z==2) result->SetDefinition(G4He3::He3()); - } - else if(A==4) - { - result->SetDefinition(G4Alpha::Alpha()); - if(Z!=2) throw G4HadronicException(__FILE__, __LINE__, "Unknown ion case 1"); - } - else - { - throw G4HadronicException(__FILE__, __LINE__, "G4ParticleHPNBodyPhaseSpace: Unknown ion case 2"); - } + G4int icounter = 0; + G4int icounter_max = 1024; + do { + icounter++; + if (icounter > icounter_max) { + G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " + << __FILE__ << "." << G4endl; + break; + } + rand = rand0 * G4UniformRand(); + energy = maxE * G4UniformRand(); + testit = Prob(energy, maxE, theTotalCount); + } while (rand > testit); // Loop checking, 11.05.2015, T. Koi + result->SetKineticEnergy(energy); -// Get the energy from phase-space distribution - // in CMS - // P = Cn*std::sqrt(E')*(Emax-E')**(3*n/2-4) - G4double maxE = GetEmax(anEnergy, result->GetMass()); - if(maxE<=0){ - maxE=1.*CLHEP::eV; - } - G4double energy=0.; - G4double max(0); - if(theTotalCount<=3) - { - max = maxE/2.; - } - else if(theTotalCount==4) - { - max = maxE/5.; - } - else if(theTotalCount==5) - { - max = maxE/8.; - } - else - { - throw G4HadronicException(__FILE__, __LINE__, "NeutronHP Phase-space distribution cannot cope with this number of particles"); - } - G4double testit; - G4double rand0 = Prob(max, maxE, theTotalCount); - G4double rand; - - G4int icounter=0; - G4int icounter_max=1024; - do - { - icounter++; - if ( icounter > icounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; - } - rand = rand0*G4UniformRand(); - energy = maxE*G4UniformRand(); - testit = Prob(energy, maxE, theTotalCount); - } - while(rand > testit); // Loop checking, 11.05.2015, T. Koi - result->SetKineticEnergy(energy); - -// now do random direction - G4double cosTh = 2.*G4UniformRand()-1.; - G4double phi = twopi*G4UniformRand(); - G4double theta = std::acos(cosTh); - G4double sinth = std::sin(theta); - G4double mtot = result->GetTotalMomentum(); - G4ThreeVector tempVector(mtot*sinth*std::cos(phi), mtot*sinth*std::sin(phi), mtot*std::cos(theta) ); - result->SetMomentum(tempVector); - G4ReactionProduct aCMS = *GetTarget()+*GetProjectileRP(); - result->Lorentz(*result, -1.*aCMS); - return result; + // now do random direction + G4double cosTh = 2. * G4UniformRand() - 1.; + G4double phi = twopi * G4UniformRand(); + G4double theta = std::acos(cosTh); + G4double sinth = std::sin(theta); + G4double mtot = result->GetTotalMomentum(); + G4ThreeVector tempVector(mtot * sinth * std::cos(phi), mtot * sinth * std::sin(phi), + mtot * std::cos(theta)); + result->SetMomentum(tempVector); + G4ReactionProduct aCMS = *GetTarget() + *GetProjectileRP(); + result->Lorentz(*result, -1. * aCMS); + return result; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPND2AInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPND2AInelasticFS.cc index 9c78f13fbf9..4fe526162a9 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPND2AInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPND2AInelasticFS.cc @@ -30,59 +30,64 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPND2AInelasticFS.hh" -#include "G4Nucleus.hh" -#include "G4Deuteron.hh" + #include "G4Alpha.hh" +#include "G4Deuteron.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHPND2AInelasticFS::G4ParticleHPND2AInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHPND2AInelasticFS_F16" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHPND2AInelasticFS_F16"); } -G4HadFinalState * G4ParticleHPND2AInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHPND2AInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[4]; + G4ParticleDefinition* theDefs[4]; theDefs[0] = G4Neutron::Neutron(); theDefs[1] = G4Deuteron::Deuteron(); theDefs[2] = G4Alpha::Alpha(); theDefs[3] = G4Alpha::Alpha(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 4); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHPND2AInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHPND2AInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-10; - ResidualZ = Z-5; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-10; - ResidualZ = Z-4; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-9; - ResidualZ = Z-4; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A-8; - ResidualZ = Z-4; - } else if( projectile == G4He3::He3() ) { - ResidualA = A-8; - ResidualZ = Z-3; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A-7; - ResidualZ = Z-3; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 10; + ResidualZ = Z - 5; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 10; + ResidualZ = Z - 4; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 9; + ResidualZ = Z - 4; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A - 8; + ResidualZ = Z - 4; + } + else if (projectile == G4He3::He3()) { + ResidualA = A - 8; + ResidualZ = Z - 3; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A - 7; + ResidualZ = Z - 3; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } - diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNDInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNDInelasticFS.cc index 26e619fe8ba..e8d315d504c 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNDInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNDInelasticFS.cc @@ -30,56 +30,61 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPNDInelasticFS.hh" -#include "G4Nucleus.hh" + #include "G4Deuteron.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHPNDInelasticFS::G4ParticleHPNDInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHPNDInelasticFS_F13" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHPNDInelasticFS_F13"); } -G4HadFinalState * G4ParticleHPNDInelasticFS::ApplyYourself(const G4HadProjectile & theTrack -) +G4HadFinalState* G4ParticleHPNDInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[2]; + G4ParticleDefinition* theDefs[2]; theDefs[0] = G4Neutron::Neutron(); theDefs[1] = G4Deuteron::Deuteron(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 2); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHPNDInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHPNDInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-2; - ResidualZ = Z-1; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-2; - ResidualZ = Z; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-1; - ResidualZ = Z; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A; - ResidualZ = Z; - } else if( projectile == G4He3::He3() ) { - ResidualA = A; - ResidualZ = Z+1; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A+1; - ResidualZ = Z+1; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 2; + ResidualZ = Z - 1; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 2; + ResidualZ = Z; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 1; + ResidualZ = Z; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A; + ResidualZ = Z; + } + else if (projectile == G4He3::He3()) { + ResidualA = A; + ResidualZ = Z + 1; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A + 1; + ResidualZ = Z + 1; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNHe3InelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNHe3InelasticFS.cc index 29667891d25..b4fef40fe18 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNHe3InelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNHe3InelasticFS.cc @@ -30,56 +30,61 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPNHe3InelasticFS.hh" -#include "G4Nucleus.hh" + #include "G4He3.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" G4ParticleHPNHe3InelasticFS::G4ParticleHPNHe3InelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHPNHe3InelasticFS_F15" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHPNHe3InelasticFS_F15"); } -G4HadFinalState * G4ParticleHPNHe3InelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHPNHe3InelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[2]; + G4ParticleDefinition* theDefs[2]; theDefs[0] = G4Neutron::Neutron(); theDefs[1] = G4He3::He3(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 2); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHPNHe3InelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHPNHe3InelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-3; - ResidualZ = Z-2; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-3; - ResidualZ = Z-1; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-2; - ResidualZ = Z-1; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A-1; - ResidualZ = Z-1; - } else if( projectile == G4He3::He3() ) { - ResidualA = A-1; - ResidualZ = Z; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A; - ResidualZ = Z; - } - + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 3; + ResidualZ = Z - 2; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 3; + ResidualZ = Z - 1; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 2; + ResidualZ = Z - 1; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A - 1; + ResidualZ = Z - 1; + } + else if (projectile == G4He3::He3()) { + ResidualA = A - 1; + ResidualZ = Z; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A; + ResidualZ = Z; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNInelasticFS.cc index 074b7f5a87d..aa0737a9d75 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPNInelasticFS.cc @@ -30,55 +30,62 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPNInelasticFS.hh" -#include "G4Nucleus.hh" + +#include "G4Gamma.hh" #include "G4Neutron.hh" +#include "G4Nucleus.hh" #include "G4Proton.hh" -#include "G4Gamma.hh" #include "G4ios.hh" + #include // #include #include "G4PhysicsModelCatalog.hh" G4ParticleHPNInelasticFS::G4ParticleHPNInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHPNInelasticFS_F01" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHPNInelasticFS_F01"); } -void G4ParticleHPNInelasticFS::Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHPNInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - // G4cout << "Getting initialized for: "< Modification to allow using an incomplete data library if the G4NEUTRONHP_SKIP_MISSING_ISOTOPES environmental flag is defined. The missing XS are set to 0. +// June-2019 - E. Mendoza --> Modification to allow using an incomplete data library if the +// G4NEUTRONHP_SKIP_MISSING_ISOTOPES environmental flag is defined. The missing XS are set to 0. // Oct-2019 - E. Mendoza --> remove restriction of using isotopes with Z>92 #include "G4ParticleHPNames.hh" -#include "G4ParticleHPManager.hh" -#include "G4SandiaTable.hh" + #include "G4HadronicException.hh" #include "G4HadronicParameters.hh" +#include "G4ParticleHPManager.hh" +#include "G4SandiaTable.hh" + #include - const G4String G4ParticleHPNames::theString[100] = {"Hydrogen", "Helium", - "Lithium", "Berylium", "Boron", "Carbon", "Nitrogen", "Oxygen", "Fluorine", - "Neon", "Sodium", "Magnesium", "Aluminum", "Silicon", "Phosphorous", - "Sulfur", "Chlorine", "Argon", "Potassium", "Calcium", "Scandium", - "Titanium", "Vanadium", "Chromium", "Manganese", "Iron", "Cobalt", "Nickel", - "Copper", "Zinc", "Gallium", "Germanium", "Arsenic", "Selenium", "Bromine", - "Krypton", "Rubidium", "Strontium", "Yttrium", "Zirconium", "Niobium", - "Molybdenum", "Technetium", "Ruthenium", "Rhodium", "Palladium", "Silver", - "Cadmium", "Indium", "Tin", "Antimony", "Tellurium", "Iodine", "Xenon", - "Cesium", "Barium", "Lanthanum", "Cerium", "Praseodymium", "Neodymium", - "Promethium", "Samarium", "Europium", "Gadolinium", "Terbium", "Dysprosium", - "Holmium", "Erbium", "Thulium", "Ytterbium", "Lutetium", "Hafnium", - "Tantalum", "Tungsten", "Rhenium", "Osmium", "Iridium", "Platinium", "Gold", - "Mercury", "Thallium", "Lead", "Bismuth", "Polonium", "Astatine", "Radon", - "Francium", "Radium", "Actinium", "Thorium", "Protactinium", "Uranium", - "Neptunium", "Plutonium", "Americium", "Curium", "Berkelium", "Californium", - "Einsteinium","Fermium"}; - - -G4String G4ParticleHPNames::GetName(G4int i) { return theString[i]; } - -G4ParticleHPDataUsed G4ParticleHPNames::GetName(G4int A, G4int Z, G4int M, G4String base, G4String rest, G4bool & aFlag) +const G4String G4ParticleHPNames::theString[100] = { + "Hydrogen", "Helium", "Lithium", "Berylium", "Boron", "Carbon", + "Nitrogen", "Oxygen", "Fluorine", "Neon", "Sodium", "Magnesium", + "Aluminum", "Silicon", "Phosphorous", "Sulfur", "Chlorine", "Argon", + "Potassium", "Calcium", "Scandium", "Titanium", "Vanadium", "Chromium", + "Manganese", "Iron", "Cobalt", "Nickel", "Copper", "Zinc", + "Gallium", "Germanium", "Arsenic", "Selenium", "Bromine", "Krypton", + "Rubidium", "Strontium", "Yttrium", "Zirconium", "Niobium", "Molybdenum", + "Technetium", "Ruthenium", "Rhodium", "Palladium", "Silver", "Cadmium", + "Indium", "Tin", "Antimony", "Tellurium", "Iodine", "Xenon", + "Cesium", "Barium", "Lanthanum", "Cerium", "Praseodymium", "Neodymium", + "Promethium", "Samarium", "Europium", "Gadolinium", "Terbium", "Dysprosium", + "Holmium", "Erbium", "Thulium", "Ytterbium", "Lutetium", "Hafnium", + "Tantalum", "Tungsten", "Rhenium", "Osmium", "Iridium", "Platinium", + "Gold", "Mercury", "Thallium", "Lead", "Bismuth", "Polonium", + "Astatine", "Radon", "Francium", "Radium", "Actinium", "Thorium", + "Protactinium", "Uranium", "Neptunium", "Plutonium", "Americium", "Curium", + "Berkelium", "Californium", "Einsteinium", "Fermium"}; + +G4String G4ParticleHPNames::GetName(G4int i) { - #ifdef G4VERBOSE + return theString[i]; +} + +G4ParticleHPDataUsed G4ParticleHPNames::GetName(G4int A, G4int Z, G4int M, G4String base, + G4String rest, G4bool& aFlag) +{ +#ifdef G4VERBOSE G4int verboseLevel = G4ParticleHPManager::GetInstance()->GetVerboseLevel(); - #endif +#endif - //G4cout << Z << " " << A << " " << M << " " << base << " " << rest << G4endl; + // G4cout << Z << " " << A << " " << M << " " << base << " " << rest << G4endl; - //Excited isomer indicator + // Excited isomer indicator std::stringstream ss; G4String sM; if (M > 0) { @@ -87,296 +94,291 @@ G4ParticleHPDataUsed G4ParticleHPNames::GetName(G4int A, G4int Z, G4int M, G4Str G4ParticleHPDataUsed result; aFlag = true; - - #ifdef G4VERBOSE - if (std::getenv("NeutronHPNames") && G4HadronicParameters::Instance()->GetVerboseLevel() > 0) - G4cout << "Names::GetName entered for Z = " << Z << ", A = " << A <GetVerboseLevel() > 0) + G4cout << "Names::GetName entered for Z = " << Z << ", A = " << A << G4endl; +#endif + G4int myA = A; G4int myZ = Z; - G4String * theName = 0; + G4String* theName = nullptr; G4String theFileName(""); - //G4int inc = 1; + // G4int inc = 1; G4int flip_Z = 1; G4int delta_Z = 0; G4int flip_A = 1; G4int delta_A = 0; - - //std::ifstream * check = new std::ifstream(".dummy"); - std::istringstream* check = NULL; + + // std::ifstream * check = new std::ifstream(".dummy"); + std::istringstream* check = nullptr; G4bool first = true; - #ifdef G4VERBOSE - if (std::getenv("NeutronHPNames") && G4HadronicParameters::Instance()->GetVerboseLevel() > 0) - G4cout << "entered GetName!!!"<close(); - delete check; - } - - //check = new std::ifstream(*theName); - check = new std::istringstream(std::ios::in); - G4ParticleHPManager::GetInstance()->GetDataStream2(*theName,*check); - if ( !(*check) ) - { - //check->close(); - delete check; - check = 0; +#ifdef G4VERBOSE + if ((std::getenv("NeutronHPNames") != nullptr) + && G4HadronicParameters::Instance()->GetVerboseLevel() > 0) + G4cout << "entered GetName!!!" << G4endl; +#endif + + do { + aFlag = true; + auto biff = new G4String(); // delete here as theName + *biff = base + "/CrossSection/" + itoa(myZ) + "_" + itoa(myA) + sM + "_" + theString[myZ - 1]; + + delete theName; + theName = biff; + result.SetName(*theName); + result.SetA(myA); + result.SetZ(myZ); + result.SetM(M); + // if(std::getenv("NeutronHPNames")) G4cout <<"HPWD 1 "<<*theName<close(); + delete check; + + // check = new std::ifstream(*theName); + check = new std::istringstream(std::ios::in); + G4ParticleHPManager::GetInstance()->GetDataStream2(*theName, *check); + if (!(*check)) { + // check->close(); + delete check; + check = nullptr; + aFlag = false; + if (first) { + aFlag = true; + first = false; + biff = new G4String(); // delete here as theName + *biff = base + "/CrossSection/" + itoa(myZ) + "_" + "nat" + "_" + theString[myZ - 1]; + delete theName; + theName = biff; + // if(std::getenv("NeutronHPNames")) G4cout <<"HPWD 2 "<<*theName<GetDataStream2(*theName, *check); + if (!(*check)) { + // check->close(); + delete check; + check = nullptr; aFlag = false; - if ( first ) - { - aFlag = true; - first = false; - biff = new G4String(); // delete here as theName - *biff = base+"/CrossSection/"+itoa(myZ)+"_"+"nat"+"_"+theString[myZ-1]; - delete theName; - theName = biff; - //if(std::getenv("NeutronHPNames")) G4cout <<"HPWD 2 "<<*theName<GetDataStream2(*theName,*check); - if ( !(*check) ) - { - //check->close(); - delete check; - check = 0; - aFlag = false; - } - else - { - biff = new G4String(); // delete here as theName - *biff = base+"/"+rest+"/"+itoa(myZ)+"_"+"nat"+"_"+theString[myZ-1]; - if ( rest=="/CrossSection" ) *biff = base+rest+"/"+itoa(myZ)+"_"+"nat"+"_"+theString[myZ-1]; - delete theName; - theName = biff; - //if(std::getenv("NeutronHPNames")) G4cout <<"HPWD 3 "<<*theName<GetDataStream2(fileName,*file); - - if (*file) { - - // isotope FS - //if(std::getenv("NeutronHPNames")) G4cout <<"HPWD 4b1 "<<*theName<GetDataStream2(fileName,*file); - if (*file) { - - // FS neither isotope nor _nat_ - //if(std::getenv("NeutronHPNames")) G4cout <<"HPWD 4b2a "<<*theName<GetDataStream2(fileName, *file); + + if (*file) { + // isotope FS + // if(std::getenv("NeutronHPNames")) G4cout <<"HPWD 4b1 "<<*theName<GetDataStream2(fileName, *file); + if (*file) { + // FS neither isotope nor _nat_ + // if(std::getenv("NeutronHPNames")) G4cout <<"HPWD 4b2a "<<*theName< theMaxOffSet) { - if (!G4ParticleHPManager::GetInstance()->GetSkipMissingIsotopes()) { - #ifdef G4VERBOSE - if ( G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) { - G4cout << "G4ParticleHPNames: There are no data available for some isotopes in this material " << G4endl; - G4cout << "G4ParticleHPNames: nor are there data for nearby isotopes." << G4endl; - G4cout << "G4ParticleHPNames: Please make sure G4NEUTRONHPDATA points to the directory " << G4endl; - G4cout << "G4ParticleHPNames: in which the neutron scattering data are located." << G4endl; - G4cout << "G4ParticleHPNames: The material was A = " << A << ", Z = " << Z << G4endl; - } - #endif - throw G4HadronicException(__FILE__, __LINE__, "In case the data sets are at present not available in the neutron data library, please contact Hadron Group Coordinator"); - } else { - check = new std::istringstream(std::ios::in); - break; - } - } - - //if ( std::abs( myA - A ) > theMaxOffSet ) - if (delta_A > 2*theMaxOffSet) { - delta_A = 0; - flip_A = 1; - - first = true; - - if ( flip_Z > 0 ) - { - delta_Z +=1; - } - myZ = Z + flip_Z * delta_Z; - flip_Z *= -1; - - myA = A; - if ( myZ > 100 ) - { - myZ = 100; - } - if ( myZ < 1 ) - { - myZ = 1; - } - - //myZ += inc; - } else { - if ( flip_A > 0 ) - { - delta_A += 1; - } - myA = A + flip_A * delta_A; - flip_A *= -1; - - if ( myA < 1 ) - { - myA = 1; - } - - //myA += inc; - } - - } - while( myZ == 0 || myA == 0 ); // No meaning // Loop checking, 11.05.2015, T. Koi + delete file; + } + result.SetName(fileName); + result.SetA(tmpA); + result.SetZ(myZ); + result.SetM(M); } - while((!check) || (!(*check))); // Loop checking, 11.05.2015, T. Koi - - #ifdef G4VERBOSE - if( (std::getenv("NeutronHPNamesLogging") || std::getenv("NeutronHPNames")) && - G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) - { - G4cout << "Names::GetName: last theName proposal = "<< G4endl; - G4cout << *theName <<" "<GetSkipMissingIsotopes() && !( Z == result.GetZ() && result.IsThisNaturalAbundance() ) ) - { - #ifdef G4VERBOSE - if ( verboseLevel > 0 && G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) { - G4cout << "NeutronHP: " << reac << " file for Z = " << Z << ", A = " << A << " is not found and CrossSection set to 0." << G4endl; - } - #endif - G4String new_name = base+"/"+rest+"/"+"0_0_Zero"; - result.SetName( new_name ); + + do { + if (delta_Z > theMaxOffSet) { + if (!G4ParticleHPManager::GetInstance()->GetSkipMissingIsotopes()) { +#ifdef G4VERBOSE + if (G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { + G4cout << "G4ParticleHPNames: There are no data available for some isotopes in this " + "material " + << G4endl; + G4cout << "G4ParticleHPNames: nor are there data for nearby isotopes." << G4endl; + G4cout << "G4ParticleHPNames: Please make sure G4NEUTRONHPDATA points to the directory " + << G4endl; + G4cout << "G4ParticleHPNames: in which the neutron scattering data are located." + << G4endl; + G4cout << "G4ParticleHPNames: The material was A = " << A << ", Z = " << Z << G4endl; } - else - { - //080901 Add protection that deuteron data do not selected for hydrogen and so on by T. Koi - //160216 Increase protencted isotopes for fixing problem on charged particle HP - if ( ( reac.find("Inelastic") != reac.size() && ( (Z == 1 && A == 1) || (Z == 1 && A == 2) || (Z == 1 && A == 3) || (Z == 2 && A == 3) || (Z == 2 && A == 4) ) ) - || ( reac.find("Capture") != reac.size() && ( (Z == 1 && A == 3) || (Z == 2 && A == 4) ) ) - || ( reac.find("Fission") != reac.size() && ( (Z == 88 && A == 224) || (Z == 88 && A == 225) || (Z == 89 && A == 225) || (Z == 88 && A == 226) ) ) ) - - { - G4String new_name = base+"/"+rest+"/"+"0_0_Zero"; - result.SetName( new_name ); - } - else - { - #ifdef G4VERBOSE - if ( verboseLevel > 0 && G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) { - G4cout << "NeutronHP: " << reac << " file for Z = " << Z << ", A = " << A << " is not found and NeutronHP will use " << result.GetName() << G4endl; - } - #endif - } +#endif + throw G4HadronicException( + __FILE__, __LINE__, + "In case the data sets are at present not available in the neutron data library, " + "please contact Hadron Group Coordinator"); + } + check = new std::istringstream(std::ios::in); + break; + } + + // if ( std::abs( myA - A ) > theMaxOffSet ) + if (delta_A > 2 * theMaxOffSet) { + delta_A = 0; + flip_A = 1; + + first = true; + + if (flip_Z > 0) { + delta_Z += 1; + } + myZ = Z + flip_Z * delta_Z; + flip_Z *= -1; + + myA = A; + if (myZ > 100) { + myZ = 100; + } + if (myZ < 1) { + myZ = 1; + } + + // myZ += inc; + } + else { + if (flip_A > 0) { + delta_A += 1; + } + myA = A + flip_A * delta_A; + flip_A *= -1; + + if (myA < 1) { + myA = 1; + } + + // myA += inc; + } + + } while (myZ == 0 || myA == 0); // No meaning // Loop checking, 11.05.2015, T. Koi + + } while ((check == nullptr) || (!(*check))); // Loop checking, 11.05.2015, T. Koi + +#ifdef G4VERBOSE + if (((std::getenv("NeutronHPNamesLogging") != nullptr) + || (std::getenv("NeutronHPNames") != nullptr)) + && G4HadronicParameters::Instance()->GetVerboseLevel() > 0) + { + G4cout << "Names::GetName: last theName proposal = " << G4endl; + G4cout << *theName << " " << A << " " << Z << " " << result.GetName() << G4endl; + } +#endif + + // administration and anouncement for lacking of exact data in NDL + if (Z != result.GetZ() || A != result.GetA()) { + if (rest == "/CrossSection") { + G4String reac = base; + G4String dir = G4FindDataDir("G4NEUTRONHPDATA"); + reac.erase(0, dir.length()); + if (G4ParticleHPManager::GetInstance()->GetSkipMissingIsotopes() + && (Z != result.GetZ() || !result.IsThisNaturalAbundance())) + { +#ifdef G4VERBOSE + if (verboseLevel > 0 && G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { + G4cout << "NeutronHP: " << reac << " file for Z = " << Z << ", A = " << A + << " is not found and CrossSection set to 0." << G4endl; + } +#endif + G4String new_name = base + "/" + rest + "/" + "0_0_Zero"; + result.SetName(new_name); + } + else { + // 080901 Add protection that deuteron data do not selected for hydrogen and so on by T. Koi + // 160216 Increase protencted isotopes for fixing problem on charged particle HP + if ((reac.find("Inelastic") != reac.size() + && ((Z == 1 && A == 1) || (Z == 1 && A == 2) || (Z == 1 && A == 3) + || (Z == 2 && A == 3) || (Z == 2 && A == 4))) + || (reac.find("Capture") != reac.size() && ((Z == 1 && A == 3) || (Z == 2 && A == 4))) + || (reac.find("Fission") != reac.size() + && ((Z == 88 && A == 224) || (Z == 88 && A == 225) || (Z == 89 && A == 225) + || (Z == 88 && A == 226)))) + + { + G4String new_name = base + "/" + rest + "/" + "0_0_Zero"; + result.SetName(new_name); + } + else { +#ifdef G4VERBOSE + if (verboseLevel > 0 && G4HadronicParameters::Instance()->GetVerboseLevel() > 0) { + G4cout << "NeutronHP: " << reac << " file for Z = " << Z << ", A = " << A + << " is not found and NeutronHP will use " << result.GetName() << G4endl; } - } +#endif + } + } } + } - delete theName; - if(aFlag) - { - //check->close(); - delete check; - check = NULL; - } - return result; + delete theName; + if (aFlag) { + // check->close(); + delete check; + check = nullptr; + } + return result; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPAInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPAInelasticFS.cc index c42852c4396..4d1ca32625f 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPAInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPAInelasticFS.cc @@ -30,56 +30,62 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPPAInelasticFS.hh" -#include "G4Nucleus.hh" + #include "G4Alpha.hh" -#include "G4Proton.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" +#include "G4Proton.hh" G4ParticleHPPAInelasticFS::G4ParticleHPPAInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHPPAInelasticFS_F31" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHPPAInelasticFS_F31"); } -G4HadFinalState * G4ParticleHPPAInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHPPAInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[2]; + G4ParticleDefinition* theDefs[2]; theDefs[0] = G4Proton::Proton(); theDefs[1] = G4Alpha::Alpha(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 2); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHPPAInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHPPAInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-4; - ResidualZ = Z-3; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-4; - ResidualZ = Z-2; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-3; - ResidualZ = Z-2; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A-2; - ResidualZ = Z-2; - } else if( projectile == G4He3::He3() ) { - ResidualA = A-2; - ResidualZ = Z-1; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A-1; - ResidualZ = Z-1; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 4; + ResidualZ = Z - 3; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 4; + ResidualZ = Z - 2; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 3; + ResidualZ = Z - 2; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A - 2; + ResidualZ = Z - 2; + } + else if (projectile == G4He3::He3()) { + ResidualA = A - 2; + ResidualZ = Z - 1; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A - 1; + ResidualZ = Z - 1; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPDInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPDInelasticFS.cc index b0b1ac1e7b1..b758142ef98 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPDInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPDInelasticFS.cc @@ -30,56 +30,62 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPPDInelasticFS.hh" -#include "G4Nucleus.hh" -#include "G4Proton.hh" + #include "G4Deuteron.hh" +#include "G4Nucleus.hh" #include "G4PhysicsModelCatalog.hh" +#include "G4Proton.hh" G4ParticleHPPDInelasticFS::G4ParticleHPPDInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHPPDInelasticFS_F34" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHPPDInelasticFS_F34"); } -G4HadFinalState * G4ParticleHPPDInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHPPDInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[2]; + G4ParticleDefinition* theDefs[2]; theDefs[0] = G4Proton::Proton(); theDefs[1] = G4Deuteron::Deuteron(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 2); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHPPDInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHPPDInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-2; - ResidualZ = Z-2; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-2; - ResidualZ = Z-1; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-1; - ResidualZ = Z-1; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A; - ResidualZ = Z-1; - } else if( projectile == G4He3::He3() ) { - ResidualA = A; - ResidualZ = Z; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A+1; - ResidualZ = Z; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 2; + ResidualZ = Z - 2; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 2; + ResidualZ = Z - 1; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 1; + ResidualZ = Z - 1; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A; + ResidualZ = Z - 1; + } + else if (projectile == G4He3::He3()) { + ResidualA = A; + ResidualZ = Z; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A + 1; + ResidualZ = Z; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPInelasticFS.cc index 8cbf0a09293..9b11371a11e 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPInelasticFS.cc @@ -30,50 +30,55 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPPInelasticFS.hh" + #include "G4Nucleus.hh" -#include "G4Proton.hh" #include "G4PhysicsModelCatalog.hh" +#include "G4Proton.hh" G4ParticleHPPInelasticFS::G4ParticleHPPInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHPPInelasticFS_F23" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHPPInelasticFS_F23"); } -void G4ParticleHPPInelasticFS::Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHPPInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticCompFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A; - ResidualZ = Z-1; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A; - ResidualZ = Z; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A+1; - ResidualZ = Z; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A+2; - ResidualZ = Z; - } else if( projectile == G4He3::He3() ) { - ResidualA = A+2; - ResidualZ = Z+1; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A+3; - ResidualZ = Z+1; - } + G4ParticleHPInelasticCompFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A; + ResidualZ = Z - 1; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A; + ResidualZ = Z; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A + 1; + ResidualZ = Z; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A + 2; + ResidualZ = Z; + } + else if (projectile == G4He3::He3()) { + ResidualA = A + 2; + ResidualZ = Z + 1; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A + 3; + ResidualZ = Z + 1; + } - G4ParticleHPInelasticCompFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticCompFS::InitGammas(ResidualA, ResidualZ); } -G4HadFinalState * G4ParticleHPPInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHPPInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { + // do the final state + G4ParticleHPInelasticCompFS::CompositeApply(theTrack, G4Proton::Proton()); -// do the final state - G4ParticleHPInelasticCompFS::CompositeApply(theTrack, G4Proton::Proton()); - -// return the result - return theResult.Get(); + // return the result + return theResult.Get(); } - diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPTInelasticFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPTInelasticFS.cc index b226c305036..fda06bcd129 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPTInelasticFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPTInelasticFS.cc @@ -30,55 +30,61 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPPTInelasticFS.hh" + #include "G4Nucleus.hh" -#include "G4Triton.hh" #include "G4PhysicsModelCatalog.hh" +#include "G4Triton.hh" G4ParticleHPPTInelasticFS::G4ParticleHPPTInelasticFS() { - secID = G4PhysicsModelCatalog::GetModelID( "model_G4ParticleHPPTInelasticFS_F35" ); + secID = G4PhysicsModelCatalog::GetModelID("model_G4ParticleHPPTInelasticFS_F35"); } -G4HadFinalState * G4ParticleHPPTInelasticFS::ApplyYourself(const G4HadProjectile & theTrack) +G4HadFinalState* G4ParticleHPPTInelasticFS::ApplyYourself(const G4HadProjectile& theTrack) { -// these are the particle types in the final state + // these are the particle types in the final state - G4ParticleDefinition * theDefs[2]; + G4ParticleDefinition* theDefs[2]; theDefs[0] = G4Proton::Proton(); theDefs[1] = G4Triton::Triton(); - -// fill the final state + + // fill the final state G4ParticleHPInelasticBaseFS::BaseApply(theTrack, theDefs, 2); - -// return the result - return theResult.Get(); + + // return the result + return theResult.Get(); } -void G4ParticleHPPTInelasticFS:: -Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String & aFSType, G4ParticleDefinition* projectile) +void G4ParticleHPPTInelasticFS::Init(G4double A, G4double Z, G4int M, G4String& dirName, + G4String& aFSType, G4ParticleDefinition* projectile) { - G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); - G4double ResidualA = 0; - G4double ResidualZ = 0; - if( projectile == G4Neutron::Neutron() ) { - ResidualA = A-3; - ResidualZ = Z-2; - } else if( projectile == G4Proton::Proton() ) { - ResidualA = A-3; - ResidualZ = Z-1; - } else if( projectile == G4Deuteron::Deuteron() ) { - ResidualA = A-2; - ResidualZ = Z-1; - } else if( projectile == G4Triton::Triton() ) { - ResidualA = A-1; - ResidualZ = Z-1; - } else if( projectile == G4He3::He3() ) { - ResidualA = A-1; - ResidualZ = Z; - } else if( projectile == G4Alpha::Alpha() ) { - ResidualA = A; - ResidualZ = Z; - } + G4ParticleHPInelasticBaseFS::Init(A, Z, M, dirName, aFSType, projectile); + G4double ResidualA = 0; + G4double ResidualZ = 0; + if (projectile == G4Neutron::Neutron()) { + ResidualA = A - 3; + ResidualZ = Z - 2; + } + else if (projectile == G4Proton::Proton()) { + ResidualA = A - 3; + ResidualZ = Z - 1; + } + else if (projectile == G4Deuteron::Deuteron()) { + ResidualA = A - 2; + ResidualZ = Z - 1; + } + else if (projectile == G4Triton::Triton()) { + ResidualA = A - 1; + ResidualZ = Z - 1; + } + else if (projectile == G4He3::He3()) { + ResidualA = A - 1; + ResidualZ = Z; + } + else if (projectile == G4Alpha::Alpha()) { + ResidualA = A; + ResidualZ = Z; + } - G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); + G4ParticleHPInelasticBaseFS::InitGammas(ResidualA, ResidualZ); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPartial.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPartial.cc index 79e2a9b6aa4..9b1318946ff 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPartial.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPPartial.cc @@ -31,146 +31,127 @@ // // P. Arce, June-2014 Conversion neutron_hp to particle_hp // -#include "G4ParticleHPPartial.hh" +#include "G4ParticleHPPartial.hh" + #include "G4ParticleHPInterpolator.hh" #include "Randomize.hh" -G4ParticleHPVector * G4ParticleHPPartial::GetY(G4double e1) - { - G4ParticleHPVector * aBuffer = new G4ParticleHPVector(); - G4int i; - if(nData==1) - { - for(i=0; iSetInterpolationManager(data[0].GetInterpolationManager()); - aBuffer->SetData(i , data[0].GetX(i), data[0].GetY(i)); - } - return aBuffer; +G4ParticleHPVector* G4ParticleHPPartial::GetY(G4double e1) +{ + auto aBuffer = new G4ParticleHPVector(); + G4int i; + if (nData == 1) { + for (i = 0; i < data[0].GetVectorLength(); i++) { + aBuffer->SetInterpolationManager(data[0].GetInterpolationManager()); + aBuffer->SetData(i, data[0].GetX(i), data[0].GetY(i)); } - for (i=0; ie1) break; + return aBuffer; + } + for (i = 0; i < nData; i++) { + if (X[i] > e1) break; + } + if (i == nData) i--; + if (0 == i) i = 1; + G4double x1, x2, y1, y2, y; + G4int i1 = 0, ib = 0; + G4double E1 = X[i - 1]; + G4double E2 = X[i]; + for (G4int ii = 0; ii < data[i].GetVectorLength(); ii++) { + x1 = data[i - 1].GetX(std::min(i1, data[i - 1].GetVectorLength() - 1)); + x2 = data[i].GetX(ii); + if (x1 < x2 && i1 < data[i - 1].GetVectorLength()) { + y1 = data[i - 1].GetY(i1); + y2 = data[i].GetY(x1); + if (E2 - E1 != 0) { + y = theInt.Interpolate(theManager.GetScheme(i), e1, E1, E2, y1, y2); + } + else { + y = 0.5 * (y1 + y2); + } + aBuffer->SetData(ib, x1, y); + aBuffer->SetScheme(ib++, data[i - 1].GetScheme(i1)); + i1++; + if (x2 - x1 > 0.001 * x1) { + ii--; + } } - if(i==nData) i--; - if(0==i) i=1; - G4double x1,x2,y1,y2,y; - G4int i1=0, ib=0; - G4double E1 = X[i-1]; - G4double E2 = X[i]; - for(G4int ii=0; iiSetData(ib, x1, y); - aBuffer->SetScheme(ib++, data[i-1].GetScheme(i1)); - i1++; - if(x2-x1>0.001*x1) - { - ii--; - } + else { + y1 = data[i - 1].GetY(x2); + y2 = data[i].GetY(ii); + if (E2 - E1 != 0) { + y = theInt.Interpolate(theManager.GetScheme(i), e1, E1, E2, y1, y2); } - else - { - y1 = data[i-1].GetY(x2); - y2 = data[i].GetY(ii); - if(E2-E1!=0) - { - y = theInt.Interpolate(theManager.GetScheme(i), e1, E1, E2, y1, y2); - } - else - { - y = 0.5*(y1+y2); - } - aBuffer->SetData(ib, x2, y); - aBuffer->SetScheme(ib++, data[i].GetScheme(ii)); - if(x1-x2<0.001*x2) i1++; + else { + y = 0.5 * (y1 + y2); } + aBuffer->SetData(ib, x2, y); + aBuffer->SetScheme(ib++, data[i].GetScheme(ii)); + if (x1 - x2 < 0.001 * x2) i1++; } - return aBuffer; } - - G4double G4ParticleHPPartial::Sample(G4double x) - { - G4int i; - for (i=0; i - #include "G4ParticleHPPhotonDist.hh" -#include "G4PhysicalConstants.hh" -#include "G4SystemOfUnits.hh" -#include "G4ParticleHPLegendreStore.hh" + #include "G4Electron.hh" +#include "G4ParticleHPLegendreStore.hh" +#include "G4PhysicalConstants.hh" #include "G4Poisson.hh" +#include "G4SystemOfUnits.hh" + +#include -G4bool G4ParticleHPPhotonDist::InitMean(std::istream & aDataFile) +G4bool G4ParticleHPPhotonDist::InitMean(std::istream& aDataFile) { G4bool result = true; - if(aDataFile >> repFlag) - { - + if (aDataFile >> repFlag) { aDataFile >> targetMass; - if(repFlag==1) - { + if (repFlag == 1) { // multiplicities aDataFile >> nDiscrete; disType = new G4int[nDiscrete]; energy = new G4double[nDiscrete]; - //actualMult = new G4int[nDiscrete]; + // actualMult = new G4int[nDiscrete]; theYield = new G4ParticleHPVector[nDiscrete]; - for (G4int i=0; i> disType[i]>>energy[i]; - energy[i]*=eV; - theYield[i].Init(aDataFile, eV); + for (G4int i = 0; i < nDiscrete; ++i) { + aDataFile >> disType[i] >> energy[i]; + energy[i] *= eV; + theYield[i].Init(aDataFile, eV); } } - else if(repFlag == 2) - { - aDataFile >> theInternalConversionFlag; - aDataFile >> theBaseEnergy; - theBaseEnergy*=eV; - aDataFile >> theInternalConversionFlag; - aDataFile >> nGammaEnergies; - theLevelEnergies = new G4double[nGammaEnergies]; - theTransitionProbabilities = new G4double[nGammaEnergies]; - if(theInternalConversionFlag == 2) thePhotonTransitionFraction = new G4double[nGammaEnergies]; - for(G4int ii=0; ii> theLevelEnergies[ii] >> theTransitionProbabilities[ii]; - theLevelEnergies[ii]*=eV; - } - else if(theInternalConversionFlag == 2) - { - aDataFile >> theLevelEnergies[ii] >> theTransitionProbabilities[ii] >> thePhotonTransitionFraction[ii]; - theLevelEnergies[ii]*=eV; - } - else - { - throw G4HadronicException(__FILE__, __LINE__, "G4ParticleHPPhotonDist: Unknown conversion flag"); - } + else if (repFlag == 2) { + aDataFile >> theInternalConversionFlag; + aDataFile >> theBaseEnergy; + theBaseEnergy *= eV; + aDataFile >> theInternalConversionFlag; + aDataFile >> nGammaEnergies; + theLevelEnergies = new G4double[nGammaEnergies]; + theTransitionProbabilities = new G4double[nGammaEnergies]; + if (theInternalConversionFlag == 2) + thePhotonTransitionFraction = new G4double[nGammaEnergies]; + for (G4int ii = 0; ii < nGammaEnergies; ++ii) { + if (theInternalConversionFlag == 1) { + aDataFile >> theLevelEnergies[ii] >> theTransitionProbabilities[ii]; + theLevelEnergies[ii] *= eV; + } + else if (theInternalConversionFlag == 2) { + aDataFile >> theLevelEnergies[ii] >> theTransitionProbabilities[ii] + >> thePhotonTransitionFraction[ii]; + theLevelEnergies[ii] *= eV; + } + else { + throw G4HadronicException(__FILE__, __LINE__, + "G4ParticleHPPhotonDist: Unknown conversion flag"); + } } } - else - { - G4cout << "Data representation in G4ParticleHPPhotonDist: "<> isoFlag; - if (isoFlag != 1) - { - if (repFlag == 2) G4cout << "G4ParticleHPPhotonDist: repFlag == 2 && isoFlag != 1 is unexpected! If you use G4ND3.x, then please report to Geant4 HyperNews. " << G4endl; + if (isoFlag != 1) { + if (repFlag == 2) + G4cout << "G4ParticleHPPhotonDist: repFlag == 2 && isoFlag != 1 is unexpected! If you use " + "G4ND3.x, then please report to Geant4 HyperNews. " + << G4endl; aDataFile >> tabulationType >> nDiscrete2 >> nIso; - if (theGammas != NULL && nDiscrete2 != nDiscrete) - G4cout << "080731c G4ParticleHPPhotonDist nDiscrete2 != nDiscrete, It looks like something wrong in your NDL files. Please update the latest. If you still have this messages after the update, then please report to Geant4 Hyper News." << G4endl; + if (theGammas != nullptr && nDiscrete2 != nDiscrete) + G4cout << "080731c G4ParticleHPPhotonDist nDiscrete2 != nDiscrete, It looks like something " + "wrong in your NDL files. Please update the latest. If you still have this " + "messages after the update, then please report to Geant4 Hyper News." + << G4endl; // The order of cross section (InitPartials) and distribution // (InitAngular here) data are different, we have to re-coordinate // consistent data order. - std::vector < G4double > vct_gammas_par; - std::vector < G4double > vct_shells_par; - std::vector < G4int > vct_primary_par; - std::vector < G4int > vct_distype_par; - std::vector < G4ParticleHPVector* > vct_pXS_par; - if ( theGammas != nullptr && theShells != nullptr ) - { - //copy the cross section data - for ( i = 0 ; i < nDiscrete ; ++i ) - { - vct_gammas_par.push_back( theGammas[ i ] ); - vct_shells_par.push_back( theShells[ i ] ); - vct_primary_par.push_back( isPrimary[ i ] ); - vct_distype_par.push_back( disType[ i ] ); - G4ParticleHPVector* hpv = new G4ParticleHPVector; - *hpv = thePartialXsec[ i ]; - vct_pXS_par.push_back( hpv ); + std::vector vct_gammas_par; + std::vector vct_shells_par; + std::vector vct_primary_par; + std::vector vct_distype_par; + std::vector vct_pXS_par; + if (theGammas != nullptr && theShells != nullptr) { + // copy the cross section data + for (i = 0; i < nDiscrete; ++i) { + vct_gammas_par.push_back(theGammas[i]); + vct_shells_par.push_back(theShells[i]); + vct_primary_par.push_back(isPrimary[i]); + vct_distype_par.push_back(disType[i]); + auto hpv = new G4ParticleHPVector; + *hpv = thePartialXsec[i]; + vct_pXS_par.push_back(hpv); } } - if ( theGammas == nullptr ) theGammas = new G4double[nDiscrete2]; - if ( theShells == nullptr ) theShells = new G4double[nDiscrete2]; + if (theGammas == nullptr) theGammas = new G4double[nDiscrete2]; + if (theShells == nullptr) theShells = new G4double[nDiscrete2]; - for (i=0; i< nIso; ++i) // isotropic photons + for (i = 0; i < nIso; ++i) // isotropic photons { aDataFile >> theGammas[i] >> theShells[i]; - theGammas[i]*=eV; - theShells[i]*=eV; + theGammas[i] *= eV; + theShells[i] *= eV; } - nNeu = new G4int [nDiscrete2-nIso]; - if(tabulationType==1)theLegendre=new G4ParticleHPLegendreTable *[nDiscrete2-nIso]; - if(tabulationType==2)theAngular =new G4ParticleHPAngularP *[nDiscrete2-nIso]; - for(i=nIso; i< nDiscrete2; ++i) - { - if(tabulationType==1) - { - aDataFile >> theGammas[i] >> theShells[i] >> nNeu[i-nIso]; - theGammas[i]*=eV; - theShells[i]*=eV; - theLegendre[i-nIso]=new G4ParticleHPLegendreTable[nNeu[i-nIso]]; - theLegendreManager.Init(aDataFile); - for (ii=0; ii> theGammas[i] >> theShells[i] >> nNeu[i - nIso]; + theGammas[i] *= eV; + theShells[i] *= eV; + theLegendre[i - nIso] = new G4ParticleHPLegendreTable[nNeu[i - nIso]]; + theLegendreManager.Init(aDataFile); + for (ii = 0; ii < nNeu[i - nIso]; ++ii) { + theLegendre[i - nIso][ii].Init(aDataFile); } } - else if(tabulationType==2) - { - aDataFile >> theGammas[i] >> theShells[i] >> nNeu[i-nIso]; - theGammas[i]*=eV; - theShells[i]*=eV; - theAngular[i-nIso]=new G4ParticleHPAngularP[nNeu[i-nIso]]; - for (ii=0; ii> theGammas[i] >> theShells[i] >> nNeu[i - nIso]; + theGammas[i] *= eV; + theShells[i] *= eV; + theAngular[i - nIso] = new G4ParticleHPAngularP[nNeu[i - nIso]]; + for (ii = 0; ii < nNeu[i - nIso]; ++ii) { + theAngular[i - nIso][ii].Init(aDataFile); } } - else - { - G4cout << "tabulation type: tabulationType"< 0 ) - { - // Reordering cross section data to corrsponding distribution data - for ( i = 0 ; i < nDiscrete ; ++i ) - { - for ( G4int j = 0 ; j < nDiscrete ; ++j ) - { - // Checking gamma and shell to identification - if ( theGammas[ i ] == vct_gammas_par [ j ] && theShells [ i ] == vct_shells_par[ j ] ) - { - isPrimary [ i ] = vct_primary_par [ j ]; - disType [ i ] = vct_distype_par [ j ]; - thePartialXsec[ i ] = ( *( vct_pXS_par[ j ] ) ); + if (!vct_gammas_par.empty()) { + // Reordering cross section data to corrsponding distribution data + for (i = 0; i < nDiscrete; ++i) { + for (G4int j = 0; j < nDiscrete; ++j) { + // Checking gamma and shell to identification + if (theGammas[i] == vct_gammas_par[j] && theShells[i] == vct_shells_par[j]) { + isPrimary[i] = vct_primary_par[j]; + disType[i] = vct_distype_par[j]; + thePartialXsec[i] = (*(vct_pXS_par[j])); } } } - // Garbage collection - for ( auto it = vct_pXS_par.cbegin() ; it != vct_pXS_par.cend() ; ++it ) - { + // Garbage collection + for (auto it = vct_pXS_par.cbegin(); it != vct_pXS_par.cend(); ++it) { delete *it; } } } } -void G4ParticleHPPhotonDist::InitEnergies(std::istream & aDataFile) +void G4ParticleHPPhotonDist::InitEnergies(std::istream& aDataFile) { G4int i, energyDistributionsNeeded = 0; - for (i=0; i> nPartials; + if (energyDistributionsNeeded == 0) return; + aDataFile >> nPartials; distribution = new G4int[nPartials]; probs = new G4ParticleHPVector[nPartials]; - partials = new G4ParticleHPPartial * [nPartials]; + partials = new G4ParticleHPPartial*[nPartials]; G4int nen; G4int dummy; - for (i=0; i> dummy; probs[i].Init(aDataFile, eV); aDataFile >> nen; @@ -243,14 +228,12 @@ void G4ParticleHPPhotonDist::InitEnergies(std::istream & aDataFile) } } -void G4ParticleHPPhotonDist::InitPartials(std::istream& aDataFile, - G4ParticleHPVector* theXsec) +void G4ParticleHPPhotonDist::InitPartials(std::istream& aDataFile, G4ParticleHPVector* theXsec) { - if (theXsec) theReactionXsec = theXsec; + if (theXsec != nullptr) theReactionXsec = theXsec; aDataFile >> nDiscrete >> targetMass; - if(nDiscrete != 1) - { + if (nDiscrete != 1) { theTotalXsec.Init(aDataFile, eV); } G4int i; @@ -259,42 +242,40 @@ void G4ParticleHPPhotonDist::InitPartials(std::istream& aDataFile, isPrimary = new G4int[nDiscrete]; disType = new G4int[nDiscrete]; thePartialXsec = new G4ParticleHPVector[nDiscrete]; - for(i=0; i>theGammas[i]>>theShells[i]>>isPrimary[i]>>disType[i]; - theGammas[i]*=eV; - theShells[i]*=eV; + for (i = 0; i < nDiscrete; ++i) { + aDataFile >> theGammas[i] >> theShells[i] >> isPrimary[i] >> disType[i]; + theGammas[i] *= eV; + theShells[i] *= eV; thePartialXsec[i].Init(aDataFile, eV); - } + } } -G4ReactionProductVector * G4ParticleHPPhotonDist::GetPhotons(G4double anEnergy) +G4ReactionProductVector* G4ParticleHPPhotonDist::GetPhotons(G4double anEnergy) { // the partial cross-section case is not all in this yet. - if ( actualMult.Get() == nullptr ) { - actualMult.Get() = new std::vector( nDiscrete ); + if (actualMult.Get() == nullptr) { + actualMult.Get() = new std::vector(nDiscrete); } G4int i, ii, iii; G4int nSecondaries = 0; - G4ReactionProductVector* thePhotons = new G4ReactionProductVector; + auto thePhotons = new G4ReactionProductVector; - if (repFlag==1) { - G4double current=0; + if (repFlag == 1) { + G4double current = 0; for (i = 0; i < nDiscrete; ++i) { current = theYield[i].GetY(anEnergy); - actualMult.Get()->at(i) = (G4int)G4Poisson(current); // max cut-off still missing @@@ + actualMult.Get()->at(i) = (G4int)G4Poisson(current); // max cut-off still missing @@@ if (nDiscrete == 1 && current < 1.0001) { actualMult.Get()->at(i) = static_cast(current); - if(current<1) - { + if (current < 1) { actualMult.Get()->at(i) = 0; - if(G4UniformRand()at(i) = 1; + if (G4UniformRand() < current) actualMult.Get()->at(i) = 1; } } nSecondaries += actualMult.Get()->at(i); } for (i = 0; i < nSecondaries; ++i) { - G4ReactionProduct * theOne = new G4ReactionProduct; + auto theOne = new G4ReactionProduct; theOne->SetDefinition(G4Gamma::Gamma()); thePhotons->push_back(theOne); } @@ -306,12 +287,12 @@ G4ReactionProductVector * G4ParticleHPPhotonDist::GetPhotons(G4double anEnergy) if (disType[0] == 1) { // continuum G4ParticleHPVector* temp; - temp = partials[ 0 ]->GetY(anEnergy); //@@@ look at, seems fishy - G4double maximumE = temp->GetX( temp->GetVectorLength()-1 ); // This is an assumption. + temp = partials[0]->GetY(anEnergy); //@@@ look at, seems fishy + G4double maximumE = temp->GetX(temp->GetVectorLength() - 1); // This is an assumption. - std::vector< G4double > photons_e_best( actualMult.Get()->at(0) , 0.0 ); + std::vector photons_e_best(actualMult.Get()->at(0), 0.0); G4double best = DBL_MAX; - G4int maxTry = 1000; + G4int maxTry = 1000; for (G4int j = 0; j < maxTry; ++j) { std::vector photons_e(actualMult.Get()->at(0), 0.0); for (auto it = photons_e.begin(); it < photons_e.end(); ++it) { @@ -322,389 +303,368 @@ G4ReactionProductVector * G4ParticleHPPhotonDist::GetPhotons(G4double anEnergy) if (std::accumulate(photons_e.cbegin(), photons_e.cend(), 0.0) < best) photons_e_best = photons_e; continue; - - } else { - G4int iphot = 0; - for (auto it = photons_e.cbegin(); it < photons_e.cend(); ++it) { - thePhotons->operator[](iphot)->SetKineticEnergy(*it); // Replace index count, which was not incremented, - // with iphot, which is, as per Artem Zontikov, - // bug report 2167 - ++iphot; - } - - break; } + G4int iphot = 0; + for (auto it = photons_e.cbegin(); it < photons_e.cend(); ++it) { + thePhotons->operator[](iphot)->SetKineticEnergy( + *it); // Replace index count, which was not incremented, + // with iphot, which is, as per Artem Zontikov, + // bug report 2167 + ++iphot; + } + + break; } delete temp; - - } else { + } + else { // discrete thePhotons->operator[](count)->SetKineticEnergy(energy[i]); } ++count; - if (count > nSecondaries) - throw G4HadronicException(__FILE__, __LINE__, "G4ParticleHPPhotonDist::GetPhotons inconsistency"); + if (count > nSecondaries) + throw G4HadronicException(__FILE__, __LINE__, + "G4ParticleHPPhotonDist::GetPhotons inconsistency"); } - - } else { // nDiscrete != 1 or nPartials != 1 - for (i=0; iat(i); ++ii) { + } + else { // nDiscrete != 1 or nPartials != 1 + for (i = 0; i < nDiscrete; ++i) { + for (ii = 0; ii < actualMult.Get()->at(i); ++ii) { if (disType[i] == 1) { // continuum - G4double sum=0, run=0; + G4double sum = 0, run = 0; for (iii = 0; iii < nPartials; ++iii) - sum+=probs[iii].GetY(anEnergy); + sum += probs[iii].GetY(anEnergy); G4double random = G4UniformRand(); G4int theP = 0; for (iii = 0; iii < nPartials; ++iii) { - run+=probs[iii].GetY(anEnergy); + run += probs[iii].GetY(anEnergy); theP = iii; - if(randomGetY(anEnergy); //@@@ look at, seems fishy + if (theP == nPartials) theP = nPartials - 1; // das sortiert J aus. + sum = 0; + G4ParticleHPVector* temp; + temp = partials[theP]->GetY(anEnergy); //@@@ look at, seems fishy G4double eGamm = temp->Sample(); thePhotons->operator[](count)->SetKineticEnergy(eGamm); delete temp; - - } else { + } + else { // discrete thePhotons->operator[](count)->SetKineticEnergy(energy[i]); - } + } ++count; if (count > nSecondaries) - throw G4HadronicException(__FILE__, __LINE__, "G4ParticleHPPhotonDist::GetPhotons inconsistency"); + throw G4HadronicException(__FILE__, __LINE__, + "G4ParticleHPPhotonDist::GetPhotons inconsistency"); } } } // now do the angular distributions... if (isoFlag == 1) { - for (i=0; i< nSecondaries; ++i) - { - G4double costheta = 2.*G4UniformRand()-1; - G4double theta = std::acos(costheta); - G4double phi = twopi*G4UniformRand(); - G4double sinth = std::sin(theta); - G4double en = thePhotons->operator[](i)->GetTotalEnergy(); - G4ThreeVector temp(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*std::cos(theta) ); - thePhotons->operator[](i)->SetMomentum( temp ) ; + for (i = 0; i < nSecondaries; ++i) { + G4double costheta = 2. * G4UniformRand() - 1; + G4double theta = std::acos(costheta); + G4double phi = twopi * G4UniformRand(); + G4double sinth = std::sin(theta); + G4double en = thePhotons->operator[](i)->GetTotalEnergy(); + G4ThreeVector temp(en * sinth * std::cos(phi), en * sinth * std::sin(phi), + en * std::cos(theta)); + thePhotons->operator[](i)->SetMomentum(temp); } } - else - { - for(i=0; ioperator[](i)->GetTotalEnergy(); - for(ii=0; iioperator[](i)->GetTotalEnergy(); + for (ii = 0; ii < nDiscrete2; ++ii) { + if (std::abs(currentEnergy - theGammas[ii]) < 0.1 * keV) break; + } + if (ii == nDiscrete2) + --ii; // fix for what seems an (file12 vs file 14) inconsistency found in the ENDF 7N14 + // data. @@ + if (ii < nIso) { // isotropic distribution // - //Fix Bugzilla report #1745 - //G4double theta = pi*G4UniformRand(); - G4double costheta = 2.*G4UniformRand()-1; - G4double theta = std::acos(costheta); - G4double phi = twopi*G4UniformRand(); + // Fix Bugzilla report #1745 + // G4double theta = pi*G4UniformRand(); + G4double costheta = 2. * G4UniformRand() - 1; + G4double theta = std::acos(costheta); + G4double phi = twopi * G4UniformRand(); G4double sinth = std::sin(theta); G4double en = thePhotons->operator[](i)->GetTotalEnergy(); - // DHW G4ThreeVector tempVector(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*std::cos(theta) ); - G4ThreeVector tempVector(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*costheta ); - thePhotons->operator[](i)->SetMomentum( tempVector ) ; - } - else if(tabulationType==1) - { + // DHW G4ThreeVector tempVector(en*sinth*std::cos(phi), en*sinth*std::sin(phi), + // en*std::cos(theta) ); + G4ThreeVector tempVector(en * sinth * std::cos(phi), en * sinth * std::sin(phi), + en * costheta); + thePhotons->operator[](i)->SetMomentum(tempVector); + } + else if (tabulationType == 1) { // legendre polynomials G4int it(0); - for (iii=0; iiianEnergy) - break; + if (theLegendre[ii - nIso][iii].GetEnergy() > anEnergy) break; } G4ParticleHPLegendreStore aStore(2); - aStore.SetCoeff(1, &(theLegendre[ii-nIso][it])); - if ( it > 0 ) - { - aStore.SetCoeff(0, &(theLegendre[ii-nIso][it-1])); + aStore.SetCoeff(1, &(theLegendre[ii - nIso][it])); + if (it > 0) { + aStore.SetCoeff(0, &(theLegendre[ii - nIso][it - 1])); } - else - { - aStore.SetCoeff(0, &(theLegendre[ii-nIso][it])); + else { + aStore.SetCoeff(0, &(theLegendre[ii - nIso][it])); } G4double cosTh = aStore.SampleMax(anEnergy); G4double theta = std::acos(cosTh); - G4double phi = twopi*G4UniformRand(); + G4double phi = twopi * G4UniformRand(); G4double sinth = std::sin(theta); G4double en = thePhotons->operator[](i)->GetTotalEnergy(); - G4ThreeVector tempVector(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*std::cos(theta) ); - thePhotons->operator[](i)->SetMomentum( tempVector ) ; - } - else - { + G4ThreeVector tempVector(en * sinth * std::cos(phi), en * sinth * std::sin(phi), + en * std::cos(theta)); + thePhotons->operator[](i)->SetMomentum(tempVector); + } + else { // tabulation of probabilities. G4int it(0); - for (iii=0; iiianEnergy) - break; + if (theAngular[ii - nIso][iii].GetEnergy() > anEnergy) break; } - G4double costh = theAngular[ii-nIso][it].GetCosTh(); // no interpolation yet @@ + G4double costh = theAngular[ii - nIso][it].GetCosTh(); // no interpolation yet @@ G4double theta = std::acos(costh); - G4double phi = twopi*G4UniformRand(); + G4double phi = twopi * G4UniformRand(); G4double sinth = std::sin(theta); G4double en = thePhotons->operator[](i)->GetTotalEnergy(); - G4ThreeVector tmpVector(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*costh ); - thePhotons->operator[](i)->SetMomentum( tmpVector ) ; - } - } + G4ThreeVector tmpVector(en * sinth * std::cos(phi), en * sinth * std::sin(phi), + en * costh); + thePhotons->operator[](i)->SetMomentum(tmpVector); + } + } } - - } else if (repFlag == 2) { - G4double * running = new G4double[nGammaEnergies]; - running[0]=theTransitionProbabilities[0]; - for(i=1; iSetDefinition(G4Gamma::Gamma()); random = G4UniformRand(); - if(theInternalConversionFlag==2 && random>thePhotonTransitionFraction[it]) - { + if (theInternalConversionFlag == 2 && random > thePhotonTransitionFraction[it]) { theOne->SetDefinition(G4Electron::Electron()); - //Bug reported Chao Zhang (Chao.Zhang@usd.edu), Dongming Mei(Dongming.Mei@usd.edu) Feb. 25, 2009 - //But never enter at least with G4NDL3.13 - totalEnergy += G4Electron::Electron()->GetPDGMass(); // proposed correction: add this line for electron + // Bug reported Chao Zhang (Chao.Zhang@usd.edu), Dongming Mei(Dongming.Mei@usd.edu) Feb. 25, + // 2009 But never enter at least with G4NDL3.13 + totalEnergy += + G4Electron::Electron()->GetPDGMass(); // proposed correction: add this line for electron } theOne->SetTotalEnergy(totalEnergy); - if( isoFlag == 1 ) - { - G4double costheta = 2.*G4UniformRand()-1; + if (isoFlag == 1) { + G4double costheta = 2. * G4UniformRand() - 1; G4double theta = std::acos(costheta); - G4double phi = twopi*G4UniformRand(); + G4double phi = twopi * G4UniformRand(); G4double sinth = std::sin(theta); - //Bug reported Chao Zhang (Chao.Zhang@usd.edu), Dongming Mei(Dongming.Mei@usd.edu) Feb. 25, 2009 - //G4double en = theOne->GetTotalEnergy(); + // Bug reported Chao Zhang (Chao.Zhang@usd.edu), Dongming Mei(Dongming.Mei@usd.edu) Feb. 25, + // 2009 G4double en = theOne->GetTotalEnergy(); G4double en = theOne->GetTotalMomentum(); - //But never cause real effect at least with G4NDL3.13 TK - G4ThreeVector temp(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*std::cos(theta) ); - theOne->SetMomentum( temp ) ; + // But never cause real effect at least with G4NDL3.13 TK + G4ThreeVector temp(en * sinth * std::cos(phi), en * sinth * std::sin(phi), + en * std::cos(theta)); + theOne->SetMomentum(temp); } - else - { + else { G4double currentEnergy = theOne->GetTotalEnergy(); - for(ii=0; iiGetTotalEnergy(); + // Bug reported Chao Zhang (Chao.Zhang@usd.edu), Dongming Mei(Dongming.Mei@usd.edu) Feb. 25, + // 2009 G4double en = theOne->GetTotalEnergy(); G4double en = theOne->GetTotalMomentum(); - //But never cause real effect at least with G4NDL3.13 TK - G4ThreeVector tempVector(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*std::cos(theta) ); - theOne->SetMomentum( tempVector ) ; + // But never cause real effect at least with G4NDL3.13 TK + G4ThreeVector tempVector(en * sinth * std::cos(phi), en * sinth * std::sin(phi), + en * std::cos(theta)); + theOne->SetMomentum(tempVector); } - else if(tabulationType==1) - { + else if (tabulationType == 1) { // legendre polynomials G4int itt(0); - for (iii=0; iiianEnergy) - break; + if (theLegendre[ii - nIso][iii].GetEnergy() > anEnergy) break; } G4ParticleHPLegendreStore aStore(2); - aStore.SetCoeff(1, &(theLegendre[ii-nIso][itt])); - //aStore.SetCoeff(0, &(theLegendre[ii-nIso][it-1])); - //TKDB 110512 - if ( itt > 0 ) - { - aStore.SetCoeff(0, &(theLegendre[ii-nIso][itt-1])); + aStore.SetCoeff(1, &(theLegendre[ii - nIso][itt])); + // aStore.SetCoeff(0, &(theLegendre[ii-nIso][it-1])); + // TKDB 110512 + if (itt > 0) { + aStore.SetCoeff(0, &(theLegendre[ii - nIso][itt - 1])); } - else - { - aStore.SetCoeff(0, &(theLegendre[ii-nIso][itt])); + else { + aStore.SetCoeff(0, &(theLegendre[ii - nIso][itt])); } G4double cosTh = aStore.SampleMax(anEnergy); G4double theta = std::acos(cosTh); - G4double phi = twopi*G4UniformRand(); + G4double phi = twopi * G4UniformRand(); G4double sinth = std::sin(theta); - //Bug reported Chao Zhang (Chao.Zhang@usd.edu), Dongming Mei(Dongming.Mei@usd.edu) Feb. 25, 2009 - //G4double en = theOne->GetTotalEnergy(); + // Bug reported Chao Zhang (Chao.Zhang@usd.edu), Dongming Mei(Dongming.Mei@usd.edu) Feb. 25, + // 2009 G4double en = theOne->GetTotalEnergy(); G4double en = theOne->GetTotalMomentum(); - //But never cause real effect at least with G4NDL3.13 TK - G4ThreeVector tempVector(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*std::cos(theta) ); - theOne->SetMomentum( tempVector ) ; + // But never cause real effect at least with G4NDL3.13 TK + G4ThreeVector tempVector(en * sinth * std::cos(phi), en * sinth * std::sin(phi), + en * std::cos(theta)); + theOne->SetMomentum(tempVector); } - else - { + else { // tabulation of probabilities. G4int itt(0); - for (iii=0; iiianEnergy) - break; + if (theAngular[ii - nIso][iii].GetEnergy() > anEnergy) break; } - G4double costh = theAngular[ii-nIso][itt].GetCosTh(); // no interpolation yet @@ + G4double costh = theAngular[ii - nIso][itt].GetCosTh(); // no interpolation yet @@ G4double theta = std::acos(costh); - G4double phi = twopi*G4UniformRand(); + G4double phi = twopi * G4UniformRand(); G4double sinth = std::sin(theta); - //Bug reported Chao Zhang (Chao.Zhang@usd.edu), Dongming Mei(Dongming.Mei@usd.edu) Feb. 25, 2009 - //G4double en = theOne->GetTotalEnergy(); + // Bug reported Chao Zhang (Chao.Zhang@usd.edu), Dongming Mei(Dongming.Mei@usd.edu) Feb. 25, + // 2009 G4double en = theOne->GetTotalEnergy(); G4double en = theOne->GetTotalMomentum(); - //But never cause real effect at least with G4NDL3.13 TK - G4ThreeVector tmpVector(en*sinth*std::cos(phi), en*sinth*std::sin(phi), en*costh ); - theOne->SetMomentum( tmpVector ) ; + // But never cause real effect at least with G4NDL3.13 TK + G4ThreeVector tmpVector(en * sinth * std::cos(phi), en * sinth * std::sin(phi), en * costh); + theOne->SetMomentum(tmpVector); } } thePhotons->push_back(theOne); } - else if( repFlag==0 ) - { - if ( thePartialXsec == 0 ) - { - return thePhotons; - } + else if (repFlag == 0) { + if (thePartialXsec == nullptr) { + return thePhotons; + } - // Partial Case + // Partial Case - G4ReactionProduct * theOne = new G4ReactionProduct; - theOne->SetDefinition( G4Gamma::Gamma() ); - thePhotons->push_back( theOne ); + auto theOne = new G4ReactionProduct; + theOne->SetDefinition(G4Gamma::Gamma()); + thePhotons->push_back(theOne); - // Energy + // Energy - G4double sum = 0.0; - std::vector < G4double > dif( nDiscrete , 0.0 ); - for ( G4int j = 0 ; j < nDiscrete ; ++j ) - { - G4double x = thePartialXsec[ j ].GetXsec( anEnergy ); // x in barn - if ( x > 0 ) - { - sum += x; - } - dif [ j ] = sum; + G4double sum = 0.0; + std::vector dif(nDiscrete, 0.0); + for (G4int j = 0; j < nDiscrete; ++j) { + G4double x = thePartialXsec[j].GetXsec(anEnergy); // x in barn + if (x > 0) { + sum += x; } - - G4double rand = G4UniformRand(); + dif[j] = sum; + } - G4int iphoton = 0; - for ( G4int j = 0 ; j < nDiscrete ; ++j ) - { - G4double y = rand*sum; - if ( dif [ j ] > y ) - { - iphoton = j; - break; - } + G4double rand = G4UniformRand(); + + G4int iphoton = 0; + for (G4int j = 0; j < nDiscrete; ++j) { + G4double y = rand * sum; + if (dif[j] > y) { + iphoton = j; + break; } + } - // Statistically suppress the photon according to reaction cross section - // Fix proposed by Artem Zontikov, Bug report #1824 - if (theReactionXsec) { - if (thePartialXsec[iphoton].GetXsec(anEnergy)/theReactionXsec->GetXsec(anEnergy) < G4UniformRand() ) { - delete thePhotons; - thePhotons = nullptr; - return thePhotons; - } + // Statistically suppress the photon according to reaction cross section + // Fix proposed by Artem Zontikov, Bug report #1824 + if (theReactionXsec != nullptr) { + if (thePartialXsec[iphoton].GetXsec(anEnergy) / theReactionXsec->GetXsec(anEnergy) + < G4UniformRand()) + { + delete thePhotons; + thePhotons = nullptr; + return thePhotons; } + } - // Angle - G4double cosTheta = 0.0; // mu + // Angle + G4double cosTheta = 0.0; // mu - if ( isoFlag == 1 ) - { - // Isotropic Case + if (isoFlag == 1) { + // Isotropic Case - cosTheta = 2.*G4UniformRand()-1; + cosTheta = 2. * G4UniformRand() - 1; + } + else { + if (iphoton < nIso) { + // still Isotropic + + cosTheta = 2. * G4UniformRand() - 1; } - else - { - if ( iphoton < nIso ) - { - // still Isotropic - - cosTheta = 2.*G4UniformRand()-1; - } - else - { - if ( tabulationType == 1 ) - { - // Legendre polynomials - - G4int iangle = 0; - for ( G4int j = 0 ; j < nNeu [ iphoton - nIso ] ; ++j ) - { - iangle = j; - if ( theLegendre[ iphoton - nIso ][ j ].GetEnergy() > anEnergy ) break; - } - - G4ParticleHPLegendreStore aStore( 2 ); - aStore.SetCoeff( 1 , &( theLegendre[ iphoton - nIso ][ iangle ] ) ); - aStore.SetCoeff( 0 , &( theLegendre[ iphoton - nIso ][ iangle - 1 ] ) ); - - cosTheta = aStore.SampleMax( anEnergy ); - } - else if ( tabulationType == 2 ) - { - // tabulation of probabilities. - - G4int iangle = 0; - for ( G4int j = 0 ; j < nNeu [ iphoton - nIso ] ; ++j ) - { - iangle = j; - if ( theAngular[ iphoton - nIso ][ j ].GetEnergy() > anEnergy ) break; - } - cosTheta = theAngular[iphoton-nIso][ iangle ].GetCosTh(); - // no interpolation yet @@ - } - } + else { + if (tabulationType == 1) { + // Legendre polynomials + + G4int iangle = 0; + for (G4int j = 0; j < nNeu[iphoton - nIso]; ++j) { + iangle = j; + if (theLegendre[iphoton - nIso][j].GetEnergy() > anEnergy) break; + } + + G4ParticleHPLegendreStore aStore(2); + aStore.SetCoeff(1, &(theLegendre[iphoton - nIso][iangle])); + aStore.SetCoeff(0, &(theLegendre[iphoton - nIso][iangle - 1])); + + cosTheta = aStore.SampleMax(anEnergy); + } + else if (tabulationType == 2) { + // tabulation of probabilities. + + G4int iangle = 0; + for (G4int j = 0; j < nNeu[iphoton - nIso]; ++j) { + iangle = j; + if (theAngular[iphoton - nIso][j].GetEnergy() > anEnergy) break; + } + cosTheta = theAngular[iphoton - nIso][iangle].GetCosTh(); + // no interpolation yet @@ + } } - - // Set - G4double phi = twopi*G4UniformRand(); - G4double theta = std::acos( cosTheta ); - G4double sinTheta = std::sin( theta ); - - G4double photonE = theGammas[ iphoton ]; - G4ThreeVector direction ( sinTheta*std::cos( phi ) , sinTheta * std::sin( phi ) , cosTheta ); - G4ThreeVector photonP = photonE * direction; - thePhotons->operator[]( 0 )->SetMomentum( photonP ) ; + } + + // Set + G4double phi = twopi * G4UniformRand(); + G4double theta = std::acos(cosTheta); + G4double sinTheta = std::sin(theta); + + G4double photonE = theGammas[iphoton]; + G4ThreeVector direction(sinTheta * std::cos(phi), sinTheta * std::sin(phi), cosTheta); + G4ThreeVector photonP = photonE * direction; + thePhotons->operator[](0)->SetMomentum(photonP); } - else - { + else { delete thePhotons; - thePhotons = nullptr; // no gamma data available; some work needed @@@@@@@ - } + thePhotons = nullptr; // no gamma data available; some work needed @@@@@@@ + } return thePhotons; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPProduct.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPProduct.cc index 67a38eb7a80..73610298ab4 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPProduct.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPProduct.cc @@ -27,8 +27,8 @@ // J.P. Wellisch, Nov-1996 // A prototype of the low energy neutron transport model. // -// 080718 As for secondary photons, if its mean value has a value of integer, -// then a sampling of multiplicity that based on Poisson Distribution +// 080718 As for secondary photons, if its mean value has a value of integer, +// then a sampling of multiplicity that based on Poisson Distribution // is not carried out and the mean is used as a multiplicity. // modified by T. Koi. // 080721 Using ClearHistories() methodl for limiting the sum of secondary energies @@ -37,58 +37,54 @@ // // P. Arce, June-2014 Conversion neutron_hp to particle_hp // -#include "G4ParticleHPProduct.hh" +#include "G4ParticleHPProduct.hh" + +#include "G4HadronicParameters.hh" #include "G4Poisson.hh" #include "G4Proton.hh" -#include "G4HadronicParameters.hh" -G4int G4ParticleHPProduct::GetMultiplicity(G4double anEnergy ) +G4int G4ParticleHPProduct::GetMultiplicity(G4double anEnergy) { - if ( theDist == 0 ) { - fCache.Get().theCurrentMultiplicity = 0; - return 0; + if (theDist == nullptr) { + fCache.Get().theCurrentMultiplicity = 0; + return 0; } G4double mean = theYield.GetY(anEnergy); - if ( mean <= 0. ) { - fCache.Get().theCurrentMultiplicity = 0; - return 0; + if (mean <= 0.) { + fCache.Get().theCurrentMultiplicity = 0; + return 0; } G4int multi; - multi = G4int(mean+0.0001); + multi = G4int(mean + 0.0001); #ifdef PHP_AS_HP - if ( theMassCode == 0 ) // DELETE THIS: IT MUST BE DONE FOR ALL PARTICLES + if (theMassCode == 0) // DELETE THIS: IT MUST BE DONE FOR ALL PARTICLES #endif - { - if ( G4int ( mean ) == mean ) - { - multi = (G4int) mean; - } - else - { + { + if (G4int(mean) == mean) { + multi = (G4int)mean; + } + else { #ifdef PHP_AS_HP - multi = G4Poisson ( mean ); -#else - if( theMultiplicityMethod == G4HPMultiPoisson ) - { - multi = (G4int)G4Poisson ( mean ); - } - else - { - G4double radnf = CLHEP::RandFlat::shoot(); - G4int imulti = G4int(mean); - multi = imulti + G4int(radnf < mean-imulti); - } + multi = G4Poisson(mean); +#else + if (theMultiplicityMethod == G4HPMultiPoisson) { + multi = (G4int)G4Poisson(mean); + } + else { + G4double radnf = CLHEP::RandFlat::shoot(); + auto imulti = G4int(mean); + multi = imulti + G4int(radnf < mean - imulti); + } #endif - } + } #ifdef G4PHPDEBUG - #ifdef G4VERBOSE - if( std::getenv("G4ParticleHPDebug") && G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) - G4cout << "G4ParticleHPProduct::GetMultiplicity " << theMassCode - << " " << theMass << " multi " << multi << " mean " << mean - << G4endl; - #endif +# ifdef G4VERBOSE + if (std::getenv("G4ParticleHPDebug") && G4HadronicParameters::Instance()->GetVerboseLevel() > 0) + G4cout << "G4ParticleHPProduct::GetMultiplicity " << theMassCode << " " << theMass + << " multi " << multi << " mean " << mean << G4endl; +# endif #endif } @@ -97,40 +93,41 @@ G4int G4ParticleHPProduct::GetMultiplicity(G4double anEnergy ) return multi; } - -G4ReactionProductVector * G4ParticleHPProduct::Sample(G4double anEnergy, G4int multi) +G4ReactionProductVector* G4ParticleHPProduct::Sample(G4double anEnergy, G4int multi) { - if(theDist == 0) { return nullptr; } - G4ReactionProductVector * result = new G4ReactionProductVector; + if (theDist == nullptr) { + return nullptr; + } + auto result = new G4ReactionProductVector; theDist->SetTarget(fCache.Get().theTarget); theDist->SetProjectileRP(fCache.Get().theProjectileRP); G4int i; - G4ReactionProduct * tmp; + G4ReactionProduct* tmp; theDist->ClearHistories(); - for(i=0; iSample(anEnergy, theMassCode, theMass); - if(tmp != 0) { result->push_back(tmp); } -#ifndef G4PHPDEBUG //GDEB - #ifdef G4VERBOSE - if( std::getenv("G4ParticleHPDebug") - && tmp != 0 && G4HadronicParameters::Instance()->GetVerboseLevel() > 0 ) + if (tmp != nullptr) { + result->push_back(tmp); + } +#ifndef G4PHPDEBUG // GDEB +# ifdef G4VERBOSE + if ((std::getenv("G4ParticleHPDebug") != nullptr) && tmp != nullptr + && G4HadronicParameters::Instance()->GetVerboseLevel() > 0) G4cout << multi << " " << i << " @@@ G4ParticleHPProduct::Sample " - << tmp->GetDefinition()->GetParticleName() << " E= " - << tmp->GetKineticEnergy() << G4endl; - #endif + << tmp->GetDefinition()->GetParticleName() << " E= " << tmp->GetKineticEnergy() + << G4endl; +# endif #endif } - if(multi == 0) - { - tmp = theDist->Sample(anEnergy, theMassCode, theMass); - delete tmp; - } + if (multi == 0) { + tmp = theDist->Sample(anEnergy, theMassCode, theMass); + delete tmp; + } return result; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPReactionWhiteBoard.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPReactionWhiteBoard.cc index 94e274ccf83..eda73e3c38e 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPReactionWhiteBoard.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPReactionWhiteBoard.cc @@ -30,72 +30,65 @@ // #include "G4ParticleHPReactionWhiteBoard.hh" -G4ParticleHPReactionWhiteBoard::G4ParticleHPReactionWhiteBoard() -:targZ(0) -,targA(0) -,targM(0) -{ -; -} +G4ParticleHPReactionWhiteBoard::G4ParticleHPReactionWhiteBoard() = default; + G4ParticleHPReactionWhiteBoard::~G4ParticleHPReactionWhiteBoard() { - mapStringPair.clear(); + mapStringPair.clear(); } void G4ParticleHPReactionWhiteBoard::Dump() { - G4cout << "G4ParticleHPReactionWhiteBoard::Dump" << G4endl; - G4cout << "Target Z = " << targZ << G4endl; - G4cout << "Target A = " << targA << G4endl; - G4cout << "Target M = " << targM << G4endl; + G4cout << "G4ParticleHPReactionWhiteBoard::Dump" << G4endl; + G4cout << "Target Z = " << targZ << G4endl; + G4cout << "Target A = " << targA << G4endl; + G4cout << "Target M = " << targM << G4endl; - for ( std::map< G4String,G4String >::iterator - it = mapStringPair.begin(); it != mapStringPair.end(); it++ ) - { - G4cout << it->first << " " << it->second << G4endl; - } - //,,, - G4cout << G4endl; + for (const auto& it : mapStringPair) { + G4cout << it.first << " " << it.second << G4endl; + } + //,,, + G4cout << G4endl; } -bool G4ParticleHPReactionWhiteBoard::AddRecord( std::pair new_record ) +bool G4ParticleHPReactionWhiteBoard::AddRecord(std::pair new_record) { - if ( mapStringPair.find( new_record.first ) != mapStringPair.end() ) { - G4cout << "This key is already used in the current reaction white board!" << G4endl; - return false; - } - mapStringPair.insert ( new_record ); - return true; + if (mapStringPair.find(new_record.first) != mapStringPair.end()) { + G4cout << "This key is already used in the current reaction white board!" << G4endl; + return false; + } + mapStringPair.insert(new_record); + return true; } -G4String G4ParticleHPReactionWhiteBoard::GetValue( G4String key ) +G4String G4ParticleHPReactionWhiteBoard::GetValue(G4String key) { - std::map< G4String,G4String >::iterator it = mapStringPair.find( key ); - if ( it == mapStringPair.end() ) { - G4cout << "No entry for this key " << key << " in the current reaction white board!" << G4endl; - return "NONE"; - } - return it->second; + auto it = mapStringPair.find(key); + if (it == mapStringPair.end()) { + G4cout << "No entry for this key " << key << " in the current reaction white board!" << G4endl; + return "NONE"; + } + return it->second; } -G4int G4ParticleHPReactionWhiteBoard::GetValueInInt( G4String key ) +G4int G4ParticleHPReactionWhiteBoard::GetValueInInt(G4String key) { - G4String result = GetValue( key ); - if ( result == "NONE" ) return 0; - std::stringstream ss; - ss << key; - G4int i; - ss >> i; - return i; + G4String result = GetValue(key); + if (result == "NONE") return 0; + std::stringstream ss; + ss << key; + G4int i; + ss >> i; + return i; } -G4double G4ParticleHPReactionWhiteBoard::GetValueInDouble( G4String key ) +G4double G4ParticleHPReactionWhiteBoard::GetValueInDouble(G4String key) { - G4String result = GetValue( key ); - if ( result == "NONE" ) return 0.0; - std::stringstream ss; - ss << key; - G4double x; - ss >> x; - return x; + G4String result = GetValue(key); + if (result == "NONE") return 0.0; + std::stringstream ss; + ss << key; + G4double x; + ss >> x; + return x; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPSCFissionFS.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPSCFissionFS.cc index fb276c68cf3..3f6323b37a1 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPSCFissionFS.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPSCFissionFS.cc @@ -30,16 +30,17 @@ // #include "G4ParticleHPSCFissionFS.hh" - void G4ParticleHPSCFissionFS::Init (G4double A, G4double Z, G4int M, G4String & dirName, G4String &, G4ParticleDefinition* projectile ) - { - G4String aString = "/SC/"; - G4ParticleHPFissionBaseFS::Init(A, Z, M, dirName, aString, projectile); - } - - G4DynamicParticleVector * G4ParticleHPSCFissionFS::ApplyYourself(G4int NNeutrons) - { - G4DynamicParticleVector * aResult; -// G4cout <<"G4ParticleHPSCFissionFS::ApplyYourself +"<cbegin(); it!=incoherentFSs->cend(); ++it) - { - for (auto itt=it->second->cbegin(); itt!= it->second->cend(); ++itt) - { - for (auto ittt=itt->second->cbegin(); ittt!=itt->second->cend(); ++ittt) - { - delete *ittt; - } - delete itt->second; - } - delete it->second; - } - } - - if ( coherentFSs != nullptr ) - { - for (auto it=coherentFSs->cbegin(); it!=coherentFSs->cend(); ++it) - { - for (auto itt=it->second->cbegin(); itt!=it->second->cend(); ++itt) - { - for (auto ittt=itt->second->cbegin(); ittt!=itt->second->cend(); ++ittt) - { - delete *ittt; - } - delete itt->second; - } - delete it->second; - } - } - - if ( inelasticFSs != nullptr ) - { - for (auto it=inelasticFSs->cbegin(); it!=inelasticFSs->cend(); ++it) - { - for (auto itt=it->second->cbegin(); itt!=it->second->cend(); ++itt) - { - for (auto ittt=itt->second->cbegin(); ittt!=itt->second->cend(); ++ittt) - { - for (auto it4=(*ittt)->vE_isoAngle.cbegin(); it4!=(*ittt)->vE_isoAngle.cend(); ++it4) - { - delete *it4; - } - delete *ittt; - } - delete itt->second; - } - delete it->second; - } - } - - incoherentFSs = nullptr; - coherentFSs = nullptr; - inelasticFSs = nullptr; -} + if (incoherentFSs != nullptr) { + for (auto it = incoherentFSs->cbegin(); it != incoherentFSs->cend(); ++it) { + for (auto itt = it->second->cbegin(); itt != it->second->cend(); ++itt) { + for (auto ittt = itt->second->cbegin(); ittt != itt->second->cend(); ++ittt) { + delete *ittt; + } + delete itt->second; + } + delete it->second; + } + } + + if (coherentFSs != nullptr) { + for (auto it = coherentFSs->cbegin(); it != coherentFSs->cend(); ++it) { + for (auto itt = it->second->cbegin(); itt != it->second->cend(); ++itt) { + for (auto ittt = itt->second->cbegin(); ittt != itt->second->cend(); ++ittt) { + delete *ittt; + } + delete itt->second; + } + delete it->second; + } + } + + if (inelasticFSs != nullptr) { + for (auto it = inelasticFSs->cbegin(); it != inelasticFSs->cend(); ++it) { + for (auto itt = it->second->cbegin(); itt != it->second->cend(); ++itt) { + for (auto ittt = itt->second->cbegin(); ittt != itt->second->cend(); ++ittt) { + for (auto it4 = (*ittt)->vE_isoAngle.cbegin(); it4 != (*ittt)->vE_isoAngle.cend(); ++it4) + { + delete *it4; + } + delete *ittt; + } + delete itt->second; + } + delete it->second; + } + } + incoherentFSs = nullptr; + coherentFSs = nullptr; + inelasticFSs = nullptr; +} void G4ParticleHPThermalScattering::BuildPhysicsTable(const G4ParticleDefinition& particle) { - buildPhysicsTable(); - theHPElastic->BuildPhysicsTable( particle ); + buildPhysicsTable(); + theHPElastic->BuildPhysicsTable(particle); } - -std::map < G4double , std::vector < std::pair< G4double , G4double >* >* >* -G4ParticleHPThermalScattering::readACoherentFSDATA( G4String name ) +std::map*>*>* +G4ParticleHPThermalScattering::readACoherentFSDATA(G4String name) { - auto aCoherentFSDATA = new std::map < G4double , std::vector < std::pair< G4double , G4double >* >* >; - - std::istringstream theChannel(std::ios::in); - G4ParticleHPManager::GetInstance()->GetDataStream(name,theChannel); - - std::vector< G4double > vBraggE; - - G4int dummy; - while ( theChannel >> dummy ) // MF // Loop checking, 11.05.2015, T. Koi - { - theChannel >> dummy; // MT - G4double temp; - theChannel >> temp; - std::vector < std::pair< G4double , G4double >* >* - anBragE_P = new std::vector < std::pair< G4double , G4double >* >; - - G4int n; - theChannel >> n; - for ( G4int i = 0 ; i < n ; ++i ) - { - G4double Ei; - G4double Pi; - if ( aCoherentFSDATA->size() == 0 ) - { - theChannel >> Ei; - vBraggE.push_back( Ei ); - } - else - { - Ei = vBraggE[ i ]; - } - theChannel >> Pi; - anBragE_P->push_back ( new std::pair < G4double , G4double > ( Ei , Pi ) ); + auto aCoherentFSDATA = new std::map*>*>; + + std::istringstream theChannel(std::ios::in); + G4ParticleHPManager::GetInstance()->GetDataStream(name, theChannel); + + std::vector vBraggE; + + G4int dummy; + while (theChannel >> dummy) // MF // Loop checking, 11.05.2015, T. Koi + { + theChannel >> dummy; // MT + G4double temp; + theChannel >> temp; + auto anBragE_P = new std::vector*>; + + G4int n; + theChannel >> n; + for (G4int i = 0; i < n; ++i) { + G4double Ei; + G4double Pi; + if (aCoherentFSDATA->empty()) { + theChannel >> Ei; + vBraggE.push_back(Ei); + } + else { + Ei = vBraggE[i]; } - aCoherentFSDATA->insert ( std::pair < G4double , std::vector < std::pair< G4double , G4double >* >* > ( temp , anBragE_P ) ); - } - return aCoherentFSDATA; + theChannel >> Pi; + anBragE_P->push_back(new std::pair(Ei, Pi)); + } + aCoherentFSDATA->insert( + std::pair*>*>(temp, anBragE_P)); + } + return aCoherentFSDATA; } - -std::map < G4double , std::vector < E_P_E_isoAng* >* >* -G4ParticleHPThermalScattering::readAnInelasticFSDATA ( G4String name ) +std::map*>* +G4ParticleHPThermalScattering::readAnInelasticFSDATA(G4String name) { - auto anT_E_P_E_isoAng = new std::map < G4double , std::vector < E_P_E_isoAng* >* >; - - std::istringstream theChannel(std::ios::in); - G4ParticleHPManager::GetInstance()->GetDataStream(name,theChannel); - - G4int dummy; - while ( theChannel >> dummy ) // MF // Loop checking, 11.05.2015, T. Koi - { - theChannel >> dummy; // MT - G4double temp; - theChannel >> temp; - std::vector < E_P_E_isoAng* >* vE_P_E_isoAng = new std::vector < E_P_E_isoAng* >; - G4int n; - theChannel >> n; - for ( G4int i = 0 ; i < n ; ++i ) - { - vE_P_E_isoAng->push_back ( readAnE_P_E_isoAng ( &theChannel ) ); - } - anT_E_P_E_isoAng->insert ( std::pair < G4double , std::vector < E_P_E_isoAng* >* > ( temp , vE_P_E_isoAng ) ); - } - - return anT_E_P_E_isoAng; + auto anT_E_P_E_isoAng = new std::map*>; + + std::istringstream theChannel(std::ios::in); + G4ParticleHPManager::GetInstance()->GetDataStream(name, theChannel); + + G4int dummy; + while (theChannel >> dummy) // MF // Loop checking, 11.05.2015, T. Koi + { + theChannel >> dummy; // MT + G4double temp; + theChannel >> temp; + auto vE_P_E_isoAng = new std::vector; + G4int n; + theChannel >> n; + for (G4int i = 0; i < n; ++i) { + vE_P_E_isoAng->push_back(readAnE_P_E_isoAng(&theChannel)); + } + anT_E_P_E_isoAng->insert(std::pair*>(temp, vE_P_E_isoAng)); + } + + return anT_E_P_E_isoAng; } - E_P_E_isoAng* -G4ParticleHPThermalScattering::readAnE_P_E_isoAng( std::istream* file ) // for inelastic +G4ParticleHPThermalScattering::readAnE_P_E_isoAng(std::istream* file) // for inelastic { - E_P_E_isoAng* aData = new E_P_E_isoAng; - - G4double dummy; - G4double energy; - G4int nep , nl; - *file >> dummy; - *file >> energy; - aData->energy = energy*eV; - *file >> dummy; - *file >> dummy; - *file >> nep; - *file >> nl; - aData->n = nep/nl; - for ( G4int i = 0 ; i < aData->n ; ++i ) - { - G4double prob; - E_isoAng* anE_isoAng = new E_isoAng; - aData->vE_isoAngle.push_back( anE_isoAng ); - *file >> energy; - anE_isoAng->energy = energy*eV; - anE_isoAng->n = nl - 2; - anE_isoAng->isoAngle.resize( anE_isoAng->n ); - *file >> prob; - aData->prob.push_back( prob ); - //G4cout << "G4ParticleHPThermalScattering inelastic " << energy/eV << " " << i << " " << prob << " " << aData->prob[ i ] << G4endl; - for ( G4int j = 0 ; j < anE_isoAng->n ; ++j ) - { - G4double x; - *file >> x; - anE_isoAng->isoAngle[j] = x ; - } - } - - // Calcuate sum_of_provXdEs - G4double total = 0; - aData->secondary_energy_cdf.push_back(0.); - for ( G4int i = 0 ; i < aData->n - 1 ; ++i ) - { - G4double E_L = aData->vE_isoAngle[i]->energy/eV; - G4double E_H = aData->vE_isoAngle[i+1]->energy/eV; - G4double dE = E_H - E_L; - G4double pdf = (aData->prob[i] + aData->prob[i+1] )/2. * dE; - total += ( pdf ); - aData->secondary_energy_cdf.push_back( total ); - aData->secondary_energy_pdf.push_back( pdf ); - aData->secondary_energy_value.push_back( E_L ); - } - - aData->sum_of_probXdEs = total; - - // Normalize CDF - aData->secondary_energy_cdf_size = (G4int)aData->secondary_energy_cdf.size(); - for ( G4int i = 0; i < aData->secondary_energy_cdf_size; ++i ) - { - aData->secondary_energy_cdf[i] /= total; - } - - return aData; + auto aData = new E_P_E_isoAng; + + G4double dummy; + G4double energy; + G4int nep, nl; + *file >> dummy; + *file >> energy; + aData->energy = energy * eV; + *file >> dummy; + *file >> dummy; + *file >> nep; + *file >> nl; + aData->n = nep / nl; + for (G4int i = 0; i < aData->n; ++i) { + G4double prob; + auto anE_isoAng = new E_isoAng; + aData->vE_isoAngle.push_back(anE_isoAng); + *file >> energy; + anE_isoAng->energy = energy * eV; + anE_isoAng->n = nl - 2; + anE_isoAng->isoAngle.resize(anE_isoAng->n); + *file >> prob; + aData->prob.push_back(prob); + // G4cout << "G4ParticleHPThermalScattering inelastic " << energy/eV << " " << i << " " << prob + // << " " << aData->prob[ i ] << G4endl; + for (G4int j = 0; j < anE_isoAng->n; ++j) { + G4double x; + *file >> x; + anE_isoAng->isoAngle[j] = x; + } + } + + // Calcuate sum_of_provXdEs + G4double total = 0; + aData->secondary_energy_cdf.push_back(0.); + for (G4int i = 0; i < aData->n - 1; ++i) { + G4double E_L = aData->vE_isoAngle[i]->energy / eV; + G4double E_H = aData->vE_isoAngle[i + 1]->energy / eV; + G4double dE = E_H - E_L; + G4double pdf = (aData->prob[i] + aData->prob[i + 1]) / 2. * dE; + total += (pdf); + aData->secondary_energy_cdf.push_back(total); + aData->secondary_energy_pdf.push_back(pdf); + aData->secondary_energy_value.push_back(E_L); + } + + aData->sum_of_probXdEs = total; + + // Normalize CDF + aData->secondary_energy_cdf_size = (G4int)aData->secondary_energy_cdf.size(); + for (G4int i = 0; i < aData->secondary_energy_cdf_size; ++i) { + aData->secondary_energy_cdf[i] /= total; + } + + return aData; } - -std::map < G4double , std::vector < E_isoAng* >* >* -G4ParticleHPThermalScattering::readAnIncoherentFSDATA ( G4String name ) +std::map*>* +G4ParticleHPThermalScattering::readAnIncoherentFSDATA(G4String name) { - auto T_E = new std::map < G4double , std::vector < E_isoAng* >* >; - - //std::ifstream theChannel( name.c_str() ); - std::istringstream theChannel(std::ios::in); - G4ParticleHPManager::GetInstance()->GetDataStream(name,theChannel); - - G4int dummy; - while ( theChannel >> dummy ) // MF // Loop checking, 11.05.2015, T. Koi - { - theChannel >> dummy; // MT - G4double temp; - theChannel >> temp; - std::vector < E_isoAng* >* vE_isoAng = new std::vector < E_isoAng* >; - G4int n; - theChannel >> n; - for ( G4int i = 0 ; i < n ; i++ ) - vE_isoAng->push_back ( readAnE_isoAng( &theChannel ) ); - T_E->insert ( std::pair < G4double , std::vector < E_isoAng* >* > ( temp , vE_isoAng ) ); - } - //theChannel.close(); - - return T_E; + auto T_E = new std::map*>; + + // std::ifstream theChannel( name.c_str() ); + std::istringstream theChannel(std::ios::in); + G4ParticleHPManager::GetInstance()->GetDataStream(name, theChannel); + + G4int dummy; + while (theChannel >> dummy) // MF // Loop checking, 11.05.2015, T. Koi + { + theChannel >> dummy; // MT + G4double temp; + theChannel >> temp; + auto vE_isoAng = new std::vector; + G4int n; + theChannel >> n; + for (G4int i = 0; i < n; i++) + vE_isoAng->push_back(readAnE_isoAng(&theChannel)); + T_E->insert(std::pair*>(temp, vE_isoAng)); + } + // theChannel.close(); + + return T_E; } - -E_isoAng* G4ParticleHPThermalScattering::readAnE_isoAng( std::istream* file ) +E_isoAng* G4ParticleHPThermalScattering::readAnE_isoAng(std::istream* file) { - E_isoAng* aData = new E_isoAng; - - G4double dummy; - G4double energy; - G4int n; - *file >> dummy; - *file >> energy; - *file >> dummy; - *file >> dummy; - *file >> n; - *file >> dummy; - aData->energy = energy*eV; - aData->n = n-2; - aData->isoAngle.resize( n ); - - *file >> dummy; - *file >> dummy; - for ( G4int i = 0 ; i < aData->n ; i++ ) - *file >> aData->isoAngle[i]; - - return aData; + auto aData = new E_isoAng; + + G4double dummy; + G4double energy; + G4int n; + *file >> dummy; + *file >> energy; + *file >> dummy; + *file >> dummy; + *file >> n; + *file >> dummy; + aData->energy = energy * eV; + aData->n = n - 2; + aData->isoAngle.resize(n); + + *file >> dummy; + *file >> dummy; + for (G4int i = 0; i < aData->n; i++) + *file >> aData->isoAngle[i]; + + return aData; } - -G4HadFinalState* G4ParticleHPThermalScattering::ApplyYourself(const G4HadProjectile& aTrack, G4Nucleus& aNucleus ) +G4HadFinalState* G4ParticleHPThermalScattering::ApplyYourself(const G4HadProjectile& aTrack, + G4Nucleus& aNucleus) { + // Select Element > Reaction > + + const G4Material* theMaterial = aTrack.GetMaterial(); + G4double aTemp = theMaterial->GetTemperature(); + auto n = (G4int)theMaterial->GetNumberOfElements(); + + G4bool findThermalElement = false; + G4int ielement; + const G4Element* theElement = nullptr; + for (G4int i = 0; i < n; ++i) { + theElement = theMaterial->GetElement(i); + // Select target element + if (aNucleus.GetZ_asInt() == (G4int)(theElement->GetZ() + 0.5)) { + // Check Applicability of Thermal Scattering + if (getTS_ID(nullptr, theElement) != -1) { + ielement = getTS_ID(nullptr, theElement); + findThermalElement = true; + break; + } + if (getTS_ID(theMaterial, theElement) != -1) { + ielement = getTS_ID(theMaterial, theElement); + findThermalElement = true; + break; + } + } + } + + if (findThermalElement) { + // Select Reaction (Inelastic, coherent, incoherent) + const G4ParticleDefinition* pd = aTrack.GetDefinition(); + auto dp = new G4DynamicParticle(pd, aTrack.Get4Momentum()); + G4double total = theXSection->GetCrossSection(dp, theElement, theMaterial); + G4double inelastic = theXSection->GetInelasticCrossSection(dp, theElement, theMaterial); + + G4double random = G4UniformRand(); + if (random <= inelastic / total) { + // Inelastic + + std::vector v_temp; + v_temp.clear(); + for (auto it = inelasticFSs->find(ielement)->second->cbegin(); + it != inelasticFSs->find(ielement)->second->cend(); ++it) + { + v_temp.push_back(it->first); + } + + std::pair tempLH = find_LH(aTemp, &v_temp); + // + // For T_L aNEP_EPM_TL and T_H aNEP_EPM_TH + // + std::vector* vNEP_EPM_TL = nullptr; + std::vector* vNEP_EPM_TH = nullptr; -// Select Element > Reaction > + if (tempLH.first != 0.0 && tempLH.second != 0.0) { + vNEP_EPM_TL = inelasticFSs->find(ielement)->second->find(tempLH.first / kelvin)->second; + vNEP_EPM_TH = inelasticFSs->find(ielement)->second->find(tempLH.second / kelvin)->second; + } + else if (tempLH.first == 0.0) { + auto itm = inelasticFSs->find(ielement)->second->cbegin(); + vNEP_EPM_TL = itm->second; + ++itm; + vNEP_EPM_TH = itm->second; + tempLH.first = tempLH.second; + tempLH.second = itm->first; + } + else if (tempLH.second == 0.0) { + auto itm = inelasticFSs->find(ielement)->second->cend(); + --itm; + vNEP_EPM_TH = itm->second; + --itm; + vNEP_EPM_TL = itm->second; + tempLH.second = tempLH.first; + tempLH.first = itm->first; + } - const G4Material * theMaterial = aTrack.GetMaterial(); - G4double aTemp = theMaterial->GetTemperature(); - G4int n = (G4int)theMaterial->GetNumberOfElements(); + G4double sE = 0., mu = 1.0; - G4bool findThermalElement = false; - G4int ielement; - const G4Element* theElement = nullptr; - for ( G4int i = 0; i < n ; ++i ) - { - theElement = theMaterial->GetElement(i); - // Select target element - if ( aNucleus.GetZ_asInt() == (G4int)(theElement->GetZ() + 0.5 ) ) - { - //Check Applicability of Thermal Scattering - if ( getTS_ID( nullptr , theElement ) != -1 ) - { - ielement = getTS_ID( nullptr , theElement ); - findThermalElement = true; - break; - } - else if ( getTS_ID( theMaterial , theElement ) != -1 ) - { - ielement = getTS_ID( theMaterial , theElement ); - findThermalElement = true; - break; - } - } - } - - if ( findThermalElement == true ) - { - - // Select Reaction (Inelastic, coherent, incoherent) - const G4ParticleDefinition* pd = aTrack.GetDefinition(); - G4DynamicParticle* dp = new G4DynamicParticle ( pd , aTrack.Get4Momentum() ); - G4double total = theXSection->GetCrossSection( dp , theElement , theMaterial ); - G4double inelastic = theXSection->GetInelasticCrossSection( dp , theElement , theMaterial ); - - G4double random = G4UniformRand(); - if ( random <= inelastic/total ) - { - // Inelastic - - std::vector v_temp; - v_temp.clear(); - for (auto it = inelasticFSs->find( ielement )->second->cbegin(); - it != inelasticFSs->find( ielement )->second->cend() ; ++it ) - { - v_temp.push_back( it->first ); - } - - std::pair < G4double , G4double > tempLH = find_LH ( aTemp , &v_temp ); - // - // For T_L aNEP_EPM_TL and T_H aNEP_EPM_TH - // - std::vector< E_P_E_isoAng* >* vNEP_EPM_TL = nullptr; - std::vector< E_P_E_isoAng* >* vNEP_EPM_TH = nullptr; - - if ( tempLH.first != 0.0 && tempLH.second != 0.0 ) - { - vNEP_EPM_TL = inelasticFSs->find( ielement )->second->find ( tempLH.first/kelvin )->second; - vNEP_EPM_TH = inelasticFSs->find( ielement )->second->find ( tempLH.second/kelvin )->second; - } - else if ( tempLH.first == 0.0 ) - { - auto itm = inelasticFSs->find( ielement )->second->cbegin(); - vNEP_EPM_TL = itm->second; - ++itm; - vNEP_EPM_TH = itm->second; - tempLH.first = tempLH.second; - tempLH.second = itm->first; - } - else if ( tempLH.second == 0.0 ) - { - auto itm = inelasticFSs->find( ielement )->second->cend(); - --itm; - vNEP_EPM_TH = itm->second; - --itm; - vNEP_EPM_TL = itm->second; - tempLH.second = tempLH.first; - tempLH.first = itm->first; - } - - G4double sE=0., mu=1.0; - - // New Geant4 method - Stochastic temperature interpolation of the final state - // (continuous temperature interpolation was used previously) - std::pair< G4double , G4double > secondaryParam; - G4double rand_temp = G4UniformRand(); - if ( rand_temp < (aTemp-tempLH.first)/(tempLH.second - tempLH.first) ) - secondaryParam = sample_inelastic_E_mu( aTrack.GetKineticEnergy() , vNEP_EPM_TH ); - else - secondaryParam = sample_inelastic_E_mu( aTrack.GetKineticEnergy() , vNEP_EPM_TL ); - - sE = secondaryParam.first; - mu = secondaryParam.second; - - //set - theParticleChange.SetEnergyChange( sE ); - G4double phi = CLHEP::twopi*G4UniformRand(); - G4double sint= std::sqrt ( 1 - mu*mu ); - theParticleChange.SetMomentumChange( sint*std::cos(phi), sint*std::sin(phi), mu ); - } - else if ( random <= ( inelastic + theXSection->GetCoherentCrossSection( dp , theElement , theMaterial ) ) / total ) + // New Geant4 method - Stochastic temperature interpolation of the final state + // (continuous temperature interpolation was used previously) + std::pair secondaryParam; + G4double rand_temp = G4UniformRand(); + if (rand_temp < (aTemp - tempLH.first) / (tempLH.second - tempLH.first)) + secondaryParam = sample_inelastic_E_mu(aTrack.GetKineticEnergy(), vNEP_EPM_TH); + else + secondaryParam = sample_inelastic_E_mu(aTrack.GetKineticEnergy(), vNEP_EPM_TL); + + sE = secondaryParam.first; + mu = secondaryParam.second; + + // set + theParticleChange.SetEnergyChange(sE); + G4double phi = CLHEP::twopi * G4UniformRand(); + G4double sint = std::sqrt(1 - mu * mu); + theParticleChange.SetMomentumChange(sint * std::cos(phi), sint * std::sin(phi), mu); + } + else if (random + <= (inelastic + theXSection->GetCoherentCrossSection(dp, theElement, theMaterial)) + / total) + { + // Coherent Elastic + + G4double E = aTrack.GetKineticEnergy(); + + // T_L and T_H + std::vector v_temp; + v_temp.clear(); + for (auto it = coherentFSs->find(ielement)->second->cbegin(); + it != coherentFSs->find(ielement)->second->cend(); ++it) { - // Coherent Elastic - - G4double E = aTrack.GetKineticEnergy(); - - // T_L and T_H - std::vector v_temp; - v_temp.clear(); - for (auto it = coherentFSs->find(ielement)->second->cbegin(); - it != coherentFSs->find(ielement)->second->cend(); ++it) - { - v_temp.push_back( it->first ); - } - - // T_L T_H - std::pair < G4double , G4double > tempLH = find_LH ( aTemp , &v_temp ); - // - // - // For T_L anEPM_TL and T_H anEPM_TH - // - std::vector< std::pair< G4double , G4double >* >* pvE_p_TL = nullptr; - std::vector< std::pair< G4double , G4double >* >* pvE_p_TH = nullptr; - - if ( tempLH.first != 0.0 && tempLH.second != 0.0 ) - { - pvE_p_TL = coherentFSs->find( ielement )->second->find ( tempLH.first/kelvin )->second; - pvE_p_TH = coherentFSs->find( ielement )->second->find ( tempLH.first/kelvin )->second; - } - else if ( tempLH.first == 0.0 ) - { - pvE_p_TL = coherentFSs->find( ielement )->second->find ( v_temp[ 0 ] )->second; - pvE_p_TH = coherentFSs->find( ielement )->second->find ( v_temp[ 1 ] )->second; - tempLH.first = tempLH.second; - tempLH.second = v_temp[ 1 ]; - } - else if ( tempLH.second == 0.0 ) - { - pvE_p_TH = coherentFSs->find( ielement )->second->find ( v_temp.back() )->second; - auto itv = v_temp.cend(); - --itv; - --itv; - pvE_p_TL = coherentFSs->find( ielement )->second->find ( *itv )->second; - tempLH.second = tempLH.first; - tempLH.first = *itv; - } - else - { - // tempLH.first == 0.0 && tempLH.second - throw G4HadronicException(__FILE__, __LINE__, "A problem is found in Thermal Scattering Data! Unexpected temperature values in data"); - } - - std::vector< G4double > vE_T; - std::vector< G4double > vp_T; - - G4int n1 = (G4int)pvE_p_TL->size(); - - // New Geant4 method - Stochastic interpolation of the final state - std::vector< std::pair< G4double , G4double >* >* pvE_p_T_sampled; - G4double rand_temp = G4UniformRand(); - if ( rand_temp < (aTemp-tempLH.first)/(tempLH.second - tempLH.first) ) - pvE_p_T_sampled = pvE_p_TH; - else - pvE_p_T_sampled = pvE_p_TL; - - //171005 fix bug, contribution from H.N. TRAN@CEA - for ( G4int i=0 ; i < n1 ; ++i ) - { - vE_T.push_back ( (*pvE_p_T_sampled)[i]->first ); - vp_T.push_back ( (*pvE_p_T_sampled)[i]->second ); - } - - G4int j = 0; - for ( G4int i = 1 ; i < n1 ; ++i ) - { - if ( E/eV < vE_T[ i ] ) - { - j = i-1; - break; - } - } - - G4double rand_for_mu = G4UniformRand(); - - G4int k = 0; - for ( G4int i = 0 ; i <= j ; ++i ) - { - G4double Pi = vp_T[ i ] / vp_T[ j ]; - if ( rand_for_mu < Pi ) - { - k = i; - break; - } - } - - G4double Ei = vE_T[ k ]; - - G4double mu = 1 - 2 * Ei / (E/eV) ; - - if ( mu < -1.0 ) mu = -1.0; - - theParticleChange.SetEnergyChange( E ); - G4double phi = CLHEP::twopi*G4UniformRand(); - G4double sint= std::sqrt ( 1 - mu*mu ); - theParticleChange.SetMomentumChange( sint*std::cos(phi), sint*std::sin(phi), mu ); + v_temp.push_back(it->first); } + + // T_L T_H + std::pair tempLH = find_LH(aTemp, &v_temp); + // + // + // For T_L anEPM_TL and T_H anEPM_TH + // + std::vector*>* pvE_p_TL = nullptr; + std::vector*>* pvE_p_TH = nullptr; + + if (tempLH.first != 0.0 && tempLH.second != 0.0) { + pvE_p_TL = coherentFSs->find(ielement)->second->find(tempLH.first / kelvin)->second; + pvE_p_TH = coherentFSs->find(ielement)->second->find(tempLH.first / kelvin)->second; + } + else if (tempLH.first == 0.0) { + pvE_p_TL = coherentFSs->find(ielement)->second->find(v_temp[0])->second; + pvE_p_TH = coherentFSs->find(ielement)->second->find(v_temp[1])->second; + tempLH.first = tempLH.second; + tempLH.second = v_temp[1]; + } + else if (tempLH.second == 0.0) { + pvE_p_TH = coherentFSs->find(ielement)->second->find(v_temp.back())->second; + auto itv = v_temp.cend(); + --itv; + --itv; + pvE_p_TL = coherentFSs->find(ielement)->second->find(*itv)->second; + tempLH.second = tempLH.first; + tempLH.first = *itv; + } + else { + // tempLH.first == 0.0 && tempLH.second + throw G4HadronicException( + __FILE__, __LINE__, + "A problem is found in Thermal Scattering Data! Unexpected temperature values in data"); + } + + std::vector vE_T; + std::vector vp_T; + + auto n1 = (G4int)pvE_p_TL->size(); + + // New Geant4 method - Stochastic interpolation of the final state + std::vector*>* pvE_p_T_sampled; + G4double rand_temp = G4UniformRand(); + if (rand_temp < (aTemp - tempLH.first) / (tempLH.second - tempLH.first)) + pvE_p_T_sampled = pvE_p_TH; else + pvE_p_T_sampled = pvE_p_TL; + + // 171005 fix bug, contribution from H.N. TRAN@CEA + for (G4int i = 0; i < n1; ++i) { + vE_T.push_back((*pvE_p_T_sampled)[i]->first); + vp_T.push_back((*pvE_p_T_sampled)[i]->second); + } + + G4int j = 0; + for (G4int i = 1; i < n1; ++i) { + if (E / eV < vE_T[i]) { + j = i - 1; + break; + } + } + + G4double rand_for_mu = G4UniformRand(); + + G4int k = 0; + for (G4int i = 0; i <= j; ++i) { + G4double Pi = vp_T[i] / vp_T[j]; + if (rand_for_mu < Pi) { + k = i; + break; + } + } + + G4double Ei = vE_T[k]; + + G4double mu = 1 - 2 * Ei / (E / eV); + + if (mu < -1.0) mu = -1.0; + + theParticleChange.SetEnergyChange(E); + G4double phi = CLHEP::twopi * G4UniformRand(); + G4double sint = std::sqrt(1 - mu * mu); + theParticleChange.SetMomentumChange(sint * std::cos(phi), sint * std::sin(phi), mu); + } + else { + // InCoherent Elastic + + // T_L and T_H + std::vector v_temp; + v_temp.clear(); + for (auto it = incoherentFSs->find(ielement)->second->cbegin(); + it != incoherentFSs->find(ielement)->second->cend(); ++it) { - // InCoherent Elastic - - // T_L and T_H - std::vector v_temp; - v_temp.clear(); - for (auto it = incoherentFSs->find(ielement)->second->cbegin(); - it != incoherentFSs->find(ielement)->second->cend(); ++it) - { - v_temp.push_back( it->first ); - } - - // T_L T_H - std::pair < G4double , G4double > tempLH = find_LH ( aTemp , &v_temp ); - - // - // For T_L anEPM_TL and T_H anEPM_TH - // - - E_isoAng anEPM_TL_E; - E_isoAng anEPM_TH_E; - - if ( tempLH.first != 0.0 && tempLH.second != 0.0 ) { - //Interpolate TL and TH - anEPM_TL_E = create_E_isoAng_from_energy ( aTrack.GetKineticEnergy() , incoherentFSs->find( ielement )->second->find ( tempLH.first/kelvin )->second ); - anEPM_TH_E = create_E_isoAng_from_energy ( aTrack.GetKineticEnergy() , incoherentFSs->find( ielement )->second->find ( tempLH.second/kelvin )->second ); - } else if ( tempLH.first == 0.0 ) { - //Extrapolate T0 and T1 - anEPM_TL_E = create_E_isoAng_from_energy ( aTrack.GetKineticEnergy() , incoherentFSs->find( ielement )->second->find ( v_temp[ 0 ] )->second ); - anEPM_TH_E = create_E_isoAng_from_energy ( aTrack.GetKineticEnergy() , incoherentFSs->find( ielement )->second->find ( v_temp[ 1 ] )->second ); - tempLH.first = tempLH.second; - tempLH.second = v_temp[ 1 ]; - } else if ( tempLH.second == 0.0 ) { - //Extrapolate Tmax-1 and Tmax - anEPM_TH_E = create_E_isoAng_from_energy ( aTrack.GetKineticEnergy() , incoherentFSs->find( ielement )->second->find ( v_temp.back() )->second ); - auto itv = v_temp.cend(); - --itv; - --itv; - anEPM_TL_E = create_E_isoAng_from_energy ( aTrack.GetKineticEnergy() , incoherentFSs->find( ielement )->second->find ( *itv )->second ); - tempLH.second = tempLH.first; - tempLH.first = *itv; - } - - // E_isoAng for aTemp and aTrack.GetKineticEnergy() - G4double mu=1.0; - - // New Geant4 method - Stochastic interpolation of the final state - E_isoAng anEPM_T_E_sampled; - G4double rand_temp = G4UniformRand(); - if ( rand_temp < (aTemp-tempLH.first)/(tempLH.second - tempLH.first) ) - anEPM_T_E_sampled = anEPM_TH_E; - else - anEPM_T_E_sampled = anEPM_TL_E; - - mu = getMu ( &anEPM_T_E_sampled ); - - // Set Final State - theParticleChange.SetEnergyChange( aTrack.GetKineticEnergy() ); // No energy change in Elastic - G4double phi = CLHEP::twopi*G4UniformRand(); - G4double sint= std::sqrt ( 1 - mu*mu ); - theParticleChange.SetMomentumChange( sint*std::cos(phi), sint*std::sin(phi), mu ); - } - delete dp; - - return &theParticleChange; - } - else - { - // Not thermal element - // Neutron HP will handle - return theHPElastic -> ApplyYourself( aTrack, aNucleus, 1); // L. Thulliez 2021/05/04 (CEA-Saclay) - } -} + v_temp.push_back(it->first); + } + // T_L T_H + std::pair tempLH = find_LH(aTemp, &v_temp); + + // + // For T_L anEPM_TL and T_H anEPM_TH + // + + E_isoAng anEPM_TL_E; + E_isoAng anEPM_TH_E; + + if (tempLH.first != 0.0 && tempLH.second != 0.0) { + // Interpolate TL and TH + anEPM_TL_E = create_E_isoAng_from_energy( + aTrack.GetKineticEnergy(), + incoherentFSs->find(ielement)->second->find(tempLH.first / kelvin)->second); + anEPM_TH_E = create_E_isoAng_from_energy( + aTrack.GetKineticEnergy(), + incoherentFSs->find(ielement)->second->find(tempLH.second / kelvin)->second); + } + else if (tempLH.first == 0.0) { + // Extrapolate T0 and T1 + anEPM_TL_E = create_E_isoAng_from_energy( + aTrack.GetKineticEnergy(), + incoherentFSs->find(ielement)->second->find(v_temp[0])->second); + anEPM_TH_E = create_E_isoAng_from_energy( + aTrack.GetKineticEnergy(), + incoherentFSs->find(ielement)->second->find(v_temp[1])->second); + tempLH.first = tempLH.second; + tempLH.second = v_temp[1]; + } + else if (tempLH.second == 0.0) { + // Extrapolate Tmax-1 and Tmax + anEPM_TH_E = create_E_isoAng_from_energy( + aTrack.GetKineticEnergy(), + incoherentFSs->find(ielement)->second->find(v_temp.back())->second); + auto itv = v_temp.cend(); + --itv; + --itv; + anEPM_TL_E = create_E_isoAng_from_energy( + aTrack.GetKineticEnergy(), incoherentFSs->find(ielement)->second->find(*itv)->second); + tempLH.second = tempLH.first; + tempLH.first = *itv; + } + + // E_isoAng for aTemp and aTrack.GetKineticEnergy() + G4double mu = 1.0; + + // New Geant4 method - Stochastic interpolation of the final state + E_isoAng anEPM_T_E_sampled; + G4double rand_temp = G4UniformRand(); + if (rand_temp < (aTemp - tempLH.first) / (tempLH.second - tempLH.first)) + anEPM_T_E_sampled = anEPM_TH_E; + else + anEPM_T_E_sampled = anEPM_TL_E; + + mu = getMu(&anEPM_T_E_sampled); + + // Set Final State + theParticleChange.SetEnergyChange(aTrack.GetKineticEnergy()); // No energy change in Elastic + G4double phi = CLHEP::twopi * G4UniformRand(); + G4double sint = std::sqrt(1 - mu * mu); + theParticleChange.SetMomentumChange(sint * std::cos(phi), sint * std::sin(phi), mu); + } + delete dp; + + return &theParticleChange; + } + // Not thermal element + // Neutron HP will handle + return theHPElastic->ApplyYourself(aTrack, aNucleus, + true); // L. Thulliez 2021/05/04 (CEA-Saclay) +} //********************************************************** // Geant4 new algorithm @@ -629,627 +592,611 @@ G4HadFinalState* G4ParticleHPThermalScattering::ApplyYourself(const G4HadProject //-------------------------------------------------- // New method added by L. Thulliez 2021 (CEA-Saclay) //-------------------------------------------------- -std::pair< G4double , G4int> G4ParticleHPThermalScattering:: -sample_inelastic_E( G4double rndm1, G4double rndm2, E_P_E_isoAng* anE_P_E_isoAng ) +std::pair +G4ParticleHPThermalScattering::sample_inelastic_E(G4double rndm1, G4double rndm2, + E_P_E_isoAng* anE_P_E_isoAng) { - G4int i=0; - G4double sE_value=0; + G4int i = 0; + G4double sE_value = 0; + + for (; i < anE_P_E_isoAng->secondary_energy_cdf_size - 1; ++i) { + if (rndm1 >= anE_P_E_isoAng->secondary_energy_cdf[i] + && rndm1 < anE_P_E_isoAng->secondary_energy_cdf[i + 1]) + { + G4double sE_value_i = anE_P_E_isoAng->secondary_energy_value[i]; + G4double sE_pdf_i = anE_P_E_isoAng->secondary_energy_pdf[i]; + G4double sE_value_i1 = anE_P_E_isoAng->secondary_energy_value[i + 1]; + G4double sE_pdf_i1 = anE_P_E_isoAng->secondary_energy_pdf[i + 1]; + + G4double lambda = 0; + G4double alpha = (sE_pdf_i1 - sE_pdf_i) / (sE_pdf_i1 + sE_pdf_i); + G4double rndm = rndm1; + + if (std::fabs(alpha) < 1E-8) { + lambda = rndm2; + } + else { + G4double beta = 2 * sE_pdf_i / (sE_pdf_i1 + sE_pdf_i); + rndm = rndm2; + G4double gamma = -rndm; + G4double delta = beta * beta - 4 * alpha * gamma; - for ( ; i < anE_P_E_isoAng->secondary_energy_cdf_size-1 ; ++i ) - { - if ( rndm1 >= anE_P_E_isoAng->secondary_energy_cdf[i] && - rndm1 < anE_P_E_isoAng->secondary_energy_cdf[i+1] ) - { - G4double sE_value_i = anE_P_E_isoAng->secondary_energy_value[i]; - G4double sE_pdf_i = anE_P_E_isoAng->secondary_energy_pdf[i]; - G4double sE_value_i1 = anE_P_E_isoAng->secondary_energy_value[i+1]; - G4double sE_pdf_i1 = anE_P_E_isoAng->secondary_energy_pdf[i+1]; - - G4double lambda = 0; - G4double alpha = (sE_pdf_i1 - sE_pdf_i) / (sE_pdf_i1 + sE_pdf_i); - G4double rndm = rndm1; - - if ( std::fabs(alpha) < 1E-8 ) - { - lambda = rndm2; - } - else - { - G4double beta = 2 * sE_pdf_i / (sE_pdf_i1 + sE_pdf_i); - rndm = rndm2; - G4double gamma = -rndm; - G4double delta = beta*beta - 4*alpha*gamma; - - if ( delta < 0 && std::fabs(delta) < 1.E-8 ) delta = 0; - - lambda = -beta + std::sqrt(delta); - lambda = lambda/(2 * alpha); - - if ( lambda > 1 ) lambda = 1; - else if ( lambda < 0 ) lambda = 0; - } - - sE_value = sE_value_i + lambda * (sE_value_i1 - sE_value_i); - - break; + if (delta < 0 && std::fabs(delta) < 1.E-8) delta = 0; + + lambda = -beta + std::sqrt(delta); + lambda = lambda / (2 * alpha); + + if (lambda > 1) + lambda = 1; + else if (lambda < 0) + lambda = 0; } - } - return std::pair< G4double , G4int >( sE_value , i ); -} + sE_value = sE_value_i + lambda * (sE_value_i1 - sE_value_i); + break; + } + } + + return std::pair(sE_value, i); +} //-------------------------------------------------- // New method added by L. Thulliez 2021 (CEA-Saclay) //-------------------------------------------------- -std::pair< G4double , G4double > G4ParticleHPThermalScattering:: -sample_inelastic_E_mu( G4double pE , std::vector< E_P_E_isoAng* >* vNEP_EPM ) +std::pair +G4ParticleHPThermalScattering::sample_inelastic_E_mu(G4double pE, + std::vector* vNEP_EPM) { - // Sample primary energy bin - std::map< G4double , G4int > map_energy; - map_energy.clear(); - std::vector< G4double > v_energy; - v_energy.clear(); - G4int i = 0; - for (auto itv = vNEP_EPM->cbegin(); itv != vNEP_EPM->cend(); ++itv) - { - v_energy.push_back( (*itv)->energy ); - map_energy.insert( std::pair< G4double , G4int >( (*itv)->energy , i ) ); - i++; - } - - std::pair< G4double , G4double > energyLH = find_LH( pE , &v_energy ); - - std::vector< E_P_E_isoAng* > pE_P_E_isoAng_limit(2, nullptr); - - if ( energyLH.first != 0.0 && energyLH.second != 0.0 ) - { - pE_P_E_isoAng_limit[0] = (*vNEP_EPM)[ map_energy.find ( energyLH.first )->second ]; - pE_P_E_isoAng_limit[1] = (*vNEP_EPM)[ map_energy.find ( energyLH.second )->second ]; - } - else if ( energyLH.first == 0.0 ) - { - pE_P_E_isoAng_limit[0] = (*vNEP_EPM)[ 0 ]; - pE_P_E_isoAng_limit[1] = (*vNEP_EPM)[ 1 ]; - } - if ( energyLH.second == 0.0 ) - { - pE_P_E_isoAng_limit[1] = (*vNEP_EPM).back(); - auto itv = vNEP_EPM->cend(); - --itv; - --itv; - pE_P_E_isoAng_limit[0] = *itv; - } - - // Compute interpolation factor of the incident neutron energy - G4double factor = (energyLH.second - pE) / (energyLH.second - energyLH.first); - - if ( (energyLH.second - pE) <= 0. && std::fabs(pE/energyLH.second - 1) < 1E-11 ) factor = 0.; - if ( (energyLH.first - pE) >= 0. && std::fabs(energyLH.first / pE - 1) < 1E-11 ) factor = 1.; - - G4double rndm1 = G4UniformRand(); - G4double rndm2 = G4UniformRand(); - - // Sample secondary neutron energy - std::pair< G4double , G4int > sE_lower = sample_inelastic_E( rndm1, rndm2, pE_P_E_isoAng_limit[0] ); - std::pair< G4double , G4int > sE_upper = sample_inelastic_E( rndm1, rndm2, pE_P_E_isoAng_limit[1] ); - G4double sE = factor * sE_lower.first + (1 - factor) * sE_upper.first; - sE = sE * eV; - - // Sample cosine knowing the secondary neutron energy - rndm1 = G4UniformRand(); - rndm2 = G4UniformRand(); - G4double mu_lower = getMu( rndm1, rndm2, pE_P_E_isoAng_limit[0]->vE_isoAngle[sE_lower.second] ); - G4double mu_upper = getMu( rndm1, rndm2, pE_P_E_isoAng_limit[1]->vE_isoAngle[sE_upper.second] ); - G4double mu = factor * mu_lower + (1 - factor) * mu_upper; - - return std::pair< G4double , G4double >( sE , mu ); + // Sample primary energy bin + std::map map_energy; + map_energy.clear(); + std::vector v_energy; + v_energy.clear(); + G4int i = 0; + for (auto itv = vNEP_EPM->cbegin(); itv != vNEP_EPM->cend(); ++itv) { + v_energy.push_back((*itv)->energy); + map_energy.insert(std::pair((*itv)->energy, i)); + i++; + } + + std::pair energyLH = find_LH(pE, &v_energy); + + std::vector pE_P_E_isoAng_limit(2, nullptr); + + if (energyLH.first != 0.0 && energyLH.second != 0.0) { + pE_P_E_isoAng_limit[0] = (*vNEP_EPM)[map_energy.find(energyLH.first)->second]; + pE_P_E_isoAng_limit[1] = (*vNEP_EPM)[map_energy.find(energyLH.second)->second]; + } + else if (energyLH.first == 0.0) { + pE_P_E_isoAng_limit[0] = (*vNEP_EPM)[0]; + pE_P_E_isoAng_limit[1] = (*vNEP_EPM)[1]; + } + if (energyLH.second == 0.0) { + pE_P_E_isoAng_limit[1] = (*vNEP_EPM).back(); + auto itv = vNEP_EPM->cend(); + --itv; + --itv; + pE_P_E_isoAng_limit[0] = *itv; + } + + // Compute interpolation factor of the incident neutron energy + G4double factor = (energyLH.second - pE) / (energyLH.second - energyLH.first); + + if ((energyLH.second - pE) <= 0. && std::fabs(pE / energyLH.second - 1) < 1E-11) factor = 0.; + if ((energyLH.first - pE) >= 0. && std::fabs(energyLH.first / pE - 1) < 1E-11) factor = 1.; + + G4double rndm1 = G4UniformRand(); + G4double rndm2 = G4UniformRand(); + + // Sample secondary neutron energy + std::pair sE_lower = sample_inelastic_E(rndm1, rndm2, pE_P_E_isoAng_limit[0]); + std::pair sE_upper = sample_inelastic_E(rndm1, rndm2, pE_P_E_isoAng_limit[1]); + G4double sE = factor * sE_lower.first + (1 - factor) * sE_upper.first; + sE = sE * eV; + + // Sample cosine knowing the secondary neutron energy + rndm1 = G4UniformRand(); + rndm2 = G4UniformRand(); + G4double mu_lower = getMu(rndm1, rndm2, pE_P_E_isoAng_limit[0]->vE_isoAngle[sE_lower.second]); + G4double mu_upper = getMu(rndm1, rndm2, pE_P_E_isoAng_limit[1]->vE_isoAngle[sE_upper.second]); + G4double mu = factor * mu_lower + (1 - factor) * mu_upper; + + return std::pair(sE, mu); } - //-------------------------------------------------- // New method added by L. Thulliez 2021 (CEA-Saclay) //-------------------------------------------------- -G4double G4ParticleHPThermalScattering::getMu( G4double rndm1, G4double rndm2, E_isoAng* anEPM ) +G4double G4ParticleHPThermalScattering::getMu(G4double rndm1, G4double rndm2, E_isoAng* anEPM) { - G4double result = 0.0; - - G4int in = G4int ( rndm1 * ( (*anEPM).n ) ); - - if ( in != 0 ) - { - G4double mu_l = (*anEPM).isoAngle[ in-1 ]; - G4double mu_h = (*anEPM).isoAngle[ in ]; - result = ( mu_h - mu_l ) * ( rndm1*((*anEPM).n) - in ) + mu_l; - } - else - { - G4double x = rndm1 * (*anEPM).n; - G4double ratio = 0.5; - if ( x <= ratio ) - { - G4double mu_l = -1; - G4double mu_h = (*anEPM).isoAngle[ 0 ]; - result = ( mu_h - mu_l ) * rndm2 + mu_l; - } - else - { - G4double mu_l = (*anEPM).isoAngle[ (*anEPM).n - 1 ]; - G4double mu_h = 1; - result = ( mu_h - mu_l ) * rndm2 + mu_l; - } - } - - return result; + G4double result = 0.0; + + auto in = G4int(rndm1 * ((*anEPM).n)); + + if (in != 0) { + G4double mu_l = (*anEPM).isoAngle[in - 1]; + G4double mu_h = (*anEPM).isoAngle[in]; + result = (mu_h - mu_l) * (rndm1 * ((*anEPM).n) - in) + mu_l; + } + else { + G4double x = rndm1 * (*anEPM).n; + G4double ratio = 0.5; + if (x <= ratio) { + G4double mu_l = -1; + G4double mu_h = (*anEPM).isoAngle[0]; + result = (mu_h - mu_l) * rndm2 + mu_l; + } + else { + G4double mu_l = (*anEPM).isoAngle[(*anEPM).n - 1]; + G4double mu_h = 1; + result = (mu_h - mu_l) * rndm2 + mu_l; + } + } + + return result; } - //********************************************************** // Geant4 previous algorithm //********************************************************** -G4double G4ParticleHPThermalScattering::getMu( E_isoAng* anEPM ) +G4double G4ParticleHPThermalScattering::getMu(E_isoAng* anEPM) { + G4double random = G4UniformRand(); + G4double result = 0.0; + + auto in = G4int(random * ((*anEPM).n)); + + if (in != 0) { + G4double mu_l = (*anEPM).isoAngle[in - 1]; + G4double mu_h = (*anEPM).isoAngle[in]; + result = (mu_h - mu_l) * (random * ((*anEPM).n) - in) + mu_l; + } + else { + G4double x = random * (*anEPM).n; + // Bugzilla 1971 + G4double ratio = 0.5; + G4double xx = G4UniformRand(); + if (x <= ratio) { + G4double mu_l = -1; + G4double mu_h = (*anEPM).isoAngle[0]; + result = (mu_h - mu_l) * xx + mu_l; + } + else { + G4double mu_l = (*anEPM).isoAngle[(*anEPM).n - 1]; + G4double mu_h = 1; + result = (mu_h - mu_l) * xx + mu_l; + } + } + return result; +} - G4double random = G4UniformRand(); - G4double result = 0.0; - - G4int in = G4int ( random * ( (*anEPM).n ) ); - - if ( in != 0 ) - { - G4double mu_l = (*anEPM).isoAngle[ in-1 ]; - G4double mu_h = (*anEPM).isoAngle[ in ]; - result = ( mu_h - mu_l ) * ( random * ( (*anEPM).n ) - in ) + mu_l; - } - else - { - G4double x = random * (*anEPM).n; - //Bugzilla 1971 - G4double ratio = 0.5; - G4double xx = G4UniformRand(); - if ( x <= ratio ) - { - G4double mu_l = -1; - G4double mu_h = (*anEPM).isoAngle[ 0 ]; - result = ( mu_h - mu_l ) * xx + mu_l; - } - else - { - G4double mu_l = (*anEPM).isoAngle[ (*anEPM).n - 1 ]; - G4double mu_h = 1; - result = ( mu_h - mu_l ) * xx + mu_l; - } - } - return result; -} - - -std::pair < G4double , G4double > G4ParticleHPThermalScattering::find_LH ( G4double x , std::vector< G4double >* aVector ) +std::pair G4ParticleHPThermalScattering::find_LH(G4double x, + std::vector* aVector) { - G4double LL = 0.0; - G4double H = 0.0; - - // v->size() == 1 --> LL=H=v(0) - if ( aVector->size() == 1 ) { - LL = aVector->front(); - H = aVector->front(); - } else { - // 1) temp < v(0) -> LL=0.0 H=v(0) - // 2) v(i-1) < temp <= v(i) -> LL=v(i-1) H=v(i) - // 3) v(imax) < temp -> LL=v(imax) H=0.0 - for ( auto it = aVector->cbegin() ; it != aVector->cend() ; ++it ) { - if ( x <= *it ) { - H = *it; - if ( it != aVector->cbegin() ) { - // 2) - it--; - LL = *it; - } else { - // 1) - LL = 0.0; - } - break; - } - } - // 3) - if ( H == 0.0 ) LL = aVector->back(); - } - - return std::pair < G4double , G4double > ( LL , H ); + G4double LL = 0.0; + G4double H = 0.0; + + // v->size() == 1 --> LL=H=v(0) + if (aVector->size() == 1) { + LL = aVector->front(); + H = aVector->front(); + } + else { + // 1) temp < v(0) -> LL=0.0 H=v(0) + // 2) v(i-1) < temp <= v(i) -> LL=v(i-1) H=v(i) + // 3) v(imax) < temp -> LL=v(imax) H=0.0 + for (auto it = aVector->cbegin(); it != aVector->cend(); ++it) { + if (x <= *it) { + H = *it; + if (it != aVector->cbegin()) { + // 2) + it--; + LL = *it; + } + else { + // 1) + LL = 0.0; + } + break; + } + } + // 3) + if (H == 0.0) LL = aVector->back(); + } + + return std::pair(LL, H); } +G4double G4ParticleHPThermalScattering::get_linear_interpolated(G4double x, + std::pair Low, + std::pair High) +{ + G4double y = 0.0; + if (High.first - Low.first != 0) { + y = (High.second - Low.second) / (High.first - Low.first) * (x - Low.first) + Low.second; + } + else { + if (High.second == Low.second) { + y = High.second; + } + else { + G4cout << "G4ParticleHPThermalScattering liner interpolation err!!" << G4endl; + } + } + + return y; +} -G4double G4ParticleHPThermalScattering::get_linear_interpolated ( G4double x , std::pair< G4double , G4double > Low , std::pair< G4double , G4double > High ) -{ - G4double y=0.0; - if ( High.first - Low.first != 0 ) { - y = ( High.second - Low.second ) / ( High.first - Low.first ) * ( x - Low.first ) + Low.second; - } else { - if ( High.second == Low.second ) { - y = High.second; - } else { - G4cout << "G4ParticleHPThermalScattering liner interpolation err!!" << G4endl; +E_isoAng G4ParticleHPThermalScattering::create_E_isoAng_from_energy(G4double energy, + std::vector* vEPM) +{ + E_isoAng anEPM_T_E; + + std::vector v_e; + v_e.clear(); + for (auto iv = vEPM->cbegin(); iv != vEPM->cend(); ++iv) + v_e.push_back((*iv)->energy); + + std::pair energyLH = find_LH(energy, &v_e); + // G4cout << " " << energy/eV << " " << energyLH.first/eV << " " << energyLH.second/eV << G4endl; + + E_isoAng* panEPM_T_EL = nullptr; + E_isoAng* panEPM_T_EH = nullptr; + + if (energyLH.first != 0.0 && energyLH.second != 0.0) { + for (auto iv = vEPM->cbegin(); iv != vEPM->cend(); ++iv) { + if (energyLH.first == (*iv)->energy) { + panEPM_T_EL = *iv; + ++iv; + panEPM_T_EH = *iv; + break; } - } - - return y; -} - + } + } + else if (energyLH.first == 0.0) { + panEPM_T_EL = (*vEPM)[0]; + panEPM_T_EH = (*vEPM)[1]; + } + else if (energyLH.second == 0.0) { + panEPM_T_EH = (*vEPM).back(); + auto iv = vEPM->cend(); + --iv; + --iv; + panEPM_T_EL = *iv; + } + + if (panEPM_T_EL != nullptr && panEPM_T_EH != nullptr) { + // checking isoAng has proper values or not + // Inelastic/FS, the first and last entries of *vEPM has all zero values. + if (!(check_E_isoAng(panEPM_T_EL))) panEPM_T_EL = panEPM_T_EH; + if (!(check_E_isoAng(panEPM_T_EH))) panEPM_T_EH = panEPM_T_EL; + + if (panEPM_T_EL->n == panEPM_T_EH->n) { + anEPM_T_E.energy = energy; + anEPM_T_E.n = panEPM_T_EL->n; + + for (G4int i = 0; i < panEPM_T_EL->n; ++i) { + G4double angle; + angle = get_linear_interpolated( + energy, std::pair(energyLH.first, panEPM_T_EL->isoAngle[i]), + std::pair(energyLH.second, panEPM_T_EH->isoAngle[i])); + anEPM_T_E.isoAngle.push_back(angle); + } + } + else { + G4Exception("G4ParticleHPThermalScattering::create_E_isoAng_from_energy", "NotSupported", + JustWarning, + "G4ParticleHPThermalScattering does not support yet EL->n != EH->n."); + } + } + else { + G4Exception("G4ParticleHPThermalScattering::create_E_isoAng_from_energy", "HAD_THERM_000", + FatalException, "Pointer panEPM_T_EL or panEPM_T_EH is zero"); + } + + return anEPM_T_E; +} -E_isoAng -G4ParticleHPThermalScattering::create_E_isoAng_from_energy(G4double energy, - std::vector* vEPM) +G4double +G4ParticleHPThermalScattering::get_secondary_energy_from_E_P_E_isoAng(G4double random, + E_P_E_isoAng* anE_P_E_isoAng) { - E_isoAng anEPM_T_E; - - std::vector v_e; - v_e.clear(); - for (auto iv = vEPM->cbegin(); iv != vEPM->cend(); ++iv) - v_e.push_back( (*iv)->energy ); - - std::pair energyLH = find_LH(energy, &v_e); - //G4cout << " " << energy/eV << " " << energyLH.first/eV << " " << energyLH.second/eV << G4endl; - - E_isoAng* panEPM_T_EL = 0; - E_isoAng* panEPM_T_EH = 0; - - if (energyLH.first != 0.0 && energyLH.second != 0.0) { - for (auto iv = vEPM->cbegin(); iv != vEPM->cend(); ++iv) { - if (energyLH.first == (*iv)->energy) { - panEPM_T_EL = *iv; - ++iv; - panEPM_T_EH = *iv; - break; - } - } - - } else if (energyLH.first == 0.0) { - panEPM_T_EL = (*vEPM)[0]; - panEPM_T_EH = (*vEPM)[1]; - - } else if (energyLH.second == 0.0) { - panEPM_T_EH = (*vEPM).back(); - auto iv = vEPM->cend(); - --iv; - --iv; - panEPM_T_EL = *iv; - } - - if (panEPM_T_EL != 0 && panEPM_T_EH != 0) { - //checking isoAng has proper values or not - // Inelastic/FS, the first and last entries of *vEPM has all zero values. - if ( !(check_E_isoAng(panEPM_T_EL) ) ) panEPM_T_EL = panEPM_T_EH; - if ( !(check_E_isoAng(panEPM_T_EH) ) ) panEPM_T_EH = panEPM_T_EL; - - if (panEPM_T_EL->n == panEPM_T_EH->n) { - anEPM_T_E.energy = energy; - anEPM_T_E.n = panEPM_T_EL->n; - - for (G4int i=0; i < panEPM_T_EL->n; ++i) { - G4double angle; - angle = get_linear_interpolated(energy, std::pair(energyLH.first, panEPM_T_EL->isoAngle[i] ), - std::pair(energyLH.second, panEPM_T_EH->isoAngle[i] ) ); - anEPM_T_E.isoAngle.push_back(angle); - } - - } else { - G4Exception("G4ParticleHPThermalScattering::create_E_isoAng_from_energy", - "NotSupported", JustWarning, - "G4ParticleHPThermalScattering does not support yet EL->n != EH->n."); - } - - } else { - G4Exception("G4ParticleHPThermalScattering::create_E_isoAng_from_energy", - "HAD_THERM_000", FatalException, - "Pointer panEPM_T_EL or panEPM_T_EH is zero"); - } + G4double secondary_energy = 0.0; - return anEPM_T_E; -} + G4int n = anE_P_E_isoAng->n; + G4double sum_p = 0.0; // sum_p_H + G4double sum_p_L = 0.0; + G4double total = 0.0; -G4double G4ParticleHPThermalScattering:: -get_secondary_energy_from_E_P_E_isoAng ( G4double random , E_P_E_isoAng* anE_P_E_isoAng ) -{ - G4double secondary_energy = 0.0; - - G4int n = anE_P_E_isoAng->n; - G4double sum_p = 0.0; // sum_p_H - G4double sum_p_L = 0.0; - - G4double total=0.0; - -/* - delete for speed up - for ( G4int i = 0 ; i < n-1 ; ++i ) - { - G4double E_L = anE_P_E_isoAng->vE_isoAngle[i]->energy/eV; - G4double E_H = anE_P_E_isoAng->vE_isoAngle[i+1]->energy/eV; - G4double dE = E_H - E_L; - total += ( ( anE_P_E_isoAng->prob[i] ) * dE ); - } - - if ( std::abs( total - anE_P_E_isoAng->sum_of_probXdEs ) > 1.0e-14 ) G4cout << total - anE_P_E_isoAng->sum_of_probXdEs << G4endl; -*/ - total = anE_P_E_isoAng->sum_of_probXdEs; - - for ( G4int i = 0 ; i < n-1 ; ++i ) - { - G4double E_L = anE_P_E_isoAng->vE_isoAngle[i]->energy/eV; - G4double E_H = anE_P_E_isoAng->vE_isoAngle[i+1]->energy/eV; - G4double dE = E_H - E_L; - sum_p += ( ( anE_P_E_isoAng->prob[i] ) * dE ); - - if ( random <= sum_p/total ) - { - secondary_energy = get_linear_interpolated ( random , std::pair < G4double , G4double > ( sum_p_L/total , E_L ) , std::pair < G4double , G4double > ( sum_p/total , E_H ) ); - secondary_energy = secondary_energy*eV; //need eV - break; - } - sum_p_L = sum_p; - } + /* + delete for speed up + for ( G4int i = 0 ; i < n-1 ; ++i ) + { + G4double E_L = anE_P_E_isoAng->vE_isoAngle[i]->energy/eV; + G4double E_H = anE_P_E_isoAng->vE_isoAngle[i+1]->energy/eV; + G4double dE = E_H - E_L; + total += ( ( anE_P_E_isoAng->prob[i] ) * dE ); + } - return secondary_energy; + if ( std::abs( total - anE_P_E_isoAng->sum_of_probXdEs ) > 1.0e-14 ) G4cout << total - + anE_P_E_isoAng->sum_of_probXdEs << G4endl; + */ + total = anE_P_E_isoAng->sum_of_probXdEs; + + for (G4int i = 0; i < n - 1; ++i) { + G4double E_L = anE_P_E_isoAng->vE_isoAngle[i]->energy / eV; + G4double E_H = anE_P_E_isoAng->vE_isoAngle[i + 1]->energy / eV; + G4double dE = E_H - E_L; + sum_p += ((anE_P_E_isoAng->prob[i]) * dE); + + if (random <= sum_p / total) { + secondary_energy = + get_linear_interpolated(random, std::pair(sum_p_L / total, E_L), + std::pair(sum_p / total, E_H)); + secondary_energy = secondary_energy * eV; // need eV + break; + } + sum_p_L = sum_p; + } + + return secondary_energy; } - -std::pair< G4double , E_isoAng > G4ParticleHPThermalScattering:: -create_sE_and_EPM_from_pE_and_vE_P_E_isoAng ( G4double rand_for_sE , G4double pE , std::vector < E_P_E_isoAng* >* vNEP_EPM ) +std::pair +G4ParticleHPThermalScattering::create_sE_and_EPM_from_pE_and_vE_P_E_isoAng( + G4double rand_for_sE, G4double pE, std::vector* vNEP_EPM) { - std::map< G4double , G4int > map_energy; - map_energy.clear(); - std::vector< G4double > v_energy; - v_energy.clear(); - G4int i = 0; - for (auto itv = vNEP_EPM->cbegin(); itv != vNEP_EPM->cend(); ++itv) - { - v_energy.push_back( (*itv)->energy ); - map_energy.insert( std::pair < G4double , G4int > ( (*itv)->energy , i ) ); - i++; - } - - std::pair < G4double , G4double > energyLH = find_LH ( pE , &v_energy ); - - E_P_E_isoAng* pE_P_E_isoAng_EL = 0; - E_P_E_isoAng* pE_P_E_isoAng_EH = 0; - - if ( energyLH.first != 0.0 && energyLH.second != 0.0 ) - { - pE_P_E_isoAng_EL = (*vNEP_EPM)[ map_energy.find ( energyLH.first )->second ]; - pE_P_E_isoAng_EH = (*vNEP_EPM)[ map_energy.find ( energyLH.second )->second ]; - } - else if ( energyLH.first == 0.0 ) - { - pE_P_E_isoAng_EL = (*vNEP_EPM)[ 0 ]; - pE_P_E_isoAng_EH = (*vNEP_EPM)[ 1 ]; - } - if ( energyLH.second == 0.0 ) - { - pE_P_E_isoAng_EH = (*vNEP_EPM).back(); - auto itv = vNEP_EPM->cend(); - --itv; - --itv; - pE_P_E_isoAng_EL = *itv; - } - - G4double sE; - G4double sE_L; - G4double sE_H; - - sE_L = get_secondary_energy_from_E_P_E_isoAng ( rand_for_sE , pE_P_E_isoAng_EL ); - sE_H = get_secondary_energy_from_E_P_E_isoAng ( rand_for_sE , pE_P_E_isoAng_EH ); - - sE = get_linear_interpolated ( pE , std::pair < G4double , G4double > ( energyLH.first , sE_L ) , std::pair < G4double , G4double > ( energyLH.second , sE_H ) ); - - - E_isoAng E_isoAng_L = create_E_isoAng_from_energy ( sE , &(pE_P_E_isoAng_EL->vE_isoAngle) ); - E_isoAng E_isoAng_H = create_E_isoAng_from_energy ( sE , &(pE_P_E_isoAng_EH->vE_isoAngle) ); - - E_isoAng anE_isoAng; - //For defeating warning message from compiler - anE_isoAng.n = 1; - anE_isoAng.energy = sE; //never used - if ( E_isoAng_L.n == E_isoAng_H.n ) - { - anE_isoAng.n = E_isoAng_L.n; - for ( G4int j=0 ; j < anE_isoAng.n ; ++j ) - { - G4double angle; - angle = get_linear_interpolated ( sE , std::pair< G4double , G4double > ( sE_L , E_isoAng_L.isoAngle[ j ] ) , std::pair< G4double , G4double > ( sE_H , E_isoAng_H.isoAngle[ j ] ) ); - anE_isoAng.isoAngle.push_back( angle ); - } - } - else - { - throw G4HadronicException(__FILE__, __LINE__, "Unexpected values!"); - } - - return std::pair< G4double , E_isoAng >( sE , anE_isoAng); + std::map map_energy; + map_energy.clear(); + std::vector v_energy; + v_energy.clear(); + G4int i = 0; + for (auto itv = vNEP_EPM->cbegin(); itv != vNEP_EPM->cend(); ++itv) { + v_energy.push_back((*itv)->energy); + map_energy.insert(std::pair((*itv)->energy, i)); + i++; + } + + std::pair energyLH = find_LH(pE, &v_energy); + + E_P_E_isoAng* pE_P_E_isoAng_EL = nullptr; + E_P_E_isoAng* pE_P_E_isoAng_EH = nullptr; + + if (energyLH.first != 0.0 && energyLH.second != 0.0) { + pE_P_E_isoAng_EL = (*vNEP_EPM)[map_energy.find(energyLH.first)->second]; + pE_P_E_isoAng_EH = (*vNEP_EPM)[map_energy.find(energyLH.second)->second]; + } + else if (energyLH.first == 0.0) { + pE_P_E_isoAng_EL = (*vNEP_EPM)[0]; + pE_P_E_isoAng_EH = (*vNEP_EPM)[1]; + } + if (energyLH.second == 0.0) { + pE_P_E_isoAng_EH = (*vNEP_EPM).back(); + auto itv = vNEP_EPM->cend(); + --itv; + --itv; + pE_P_E_isoAng_EL = *itv; + } + + G4double sE; + G4double sE_L; + G4double sE_H; + + sE_L = get_secondary_energy_from_E_P_E_isoAng(rand_for_sE, pE_P_E_isoAng_EL); + sE_H = get_secondary_energy_from_E_P_E_isoAng(rand_for_sE, pE_P_E_isoAng_EH); + + sE = get_linear_interpolated(pE, std::pair(energyLH.first, sE_L), + std::pair(energyLH.second, sE_H)); + + E_isoAng E_isoAng_L = create_E_isoAng_from_energy(sE, &(pE_P_E_isoAng_EL->vE_isoAngle)); + E_isoAng E_isoAng_H = create_E_isoAng_from_energy(sE, &(pE_P_E_isoAng_EH->vE_isoAngle)); + + E_isoAng anE_isoAng; + // For defeating warning message from compiler + anE_isoAng.n = 1; + anE_isoAng.energy = sE; // never used + if (E_isoAng_L.n == E_isoAng_H.n) { + anE_isoAng.n = E_isoAng_L.n; + for (G4int j = 0; j < anE_isoAng.n; ++j) { + G4double angle; + angle = + get_linear_interpolated(sE, std::pair(sE_L, E_isoAng_L.isoAngle[j]), + std::pair(sE_H, E_isoAng_H.isoAngle[j])); + anE_isoAng.isoAngle.push_back(angle); + } + } + else { + throw G4HadronicException(__FILE__, __LINE__, "Unexpected values!"); + } + + return std::pair(sE, anE_isoAng); } - void G4ParticleHPThermalScattering::buildPhysicsTable() { - //Is rebuild of physics table a necessity - if ( nMaterial == G4Material::GetMaterialTable()->size() && nElement == G4Element::GetElementTable()->size() ) { - return; - } else { - nMaterial = G4Material::GetMaterialTable()->size(); - nElement = G4Element::GetElementTable()->size(); - } - - dic.clear(); - std::map < G4String , G4int > co_dic; - - //Searching Nist Materials - static G4ThreadLocal G4MaterialTable* theMaterialTable = nullptr ; - if (!theMaterialTable) theMaterialTable= G4Material::GetMaterialTable(); - std::size_t numberOfMaterials = G4Material::GetNumberOfMaterials(); - for ( std::size_t i = 0 ; i < numberOfMaterials ; ++i ) - { - G4Material* material = (*theMaterialTable)[i]; - G4int numberOfElements = (G4int)material->GetNumberOfElements(); - for ( G4int j = 0 ; j < numberOfElements ; ++j ) - { - const G4Element* element = material->GetElement(j); - if ( names.IsThisThermalElement ( material->GetName() , element->GetName() ) ) - { - G4int ts_ID_of_this_geometry; - G4String ts_ndl_name = names.GetTS_NDL_Name( material->GetName() , element->GetName() ); - if ( co_dic.find ( ts_ndl_name ) != co_dic.cend() ) - { - ts_ID_of_this_geometry = co_dic.find ( ts_ndl_name ) -> second; - } - else - { - ts_ID_of_this_geometry = (G4int)co_dic.size(); - co_dic.insert ( std::pair< G4String , G4int >( ts_ndl_name , ts_ID_of_this_geometry ) ); - } - - //G4cout << "Neutron HP Thermal Scattering: Registering a material-element pair of " - // << material->GetName() << " " << element->GetName() - // << " as internal thermal scattering id of " << ts_ID_of_this_geometry << "." << G4endl; - - dic.insert( std::pair < std::pair < G4Material* , const G4Element* > , G4int > ( std::pair < G4Material* , const G4Element* > ( material , element ) , ts_ID_of_this_geometry ) ); - } + // Is rebuild of physics table a necessity + if (nMaterial == G4Material::GetMaterialTable()->size() + && nElement == G4Element::GetElementTable()->size()) + { + return; + } + nMaterial = G4Material::GetMaterialTable()->size(); + nElement = G4Element::GetElementTable()->size(); + + dic.clear(); + std::map co_dic; + + // Searching Nist Materials + static G4ThreadLocal G4MaterialTable* theMaterialTable = nullptr; + if (theMaterialTable == nullptr) theMaterialTable = G4Material::GetMaterialTable(); + std::size_t numberOfMaterials = G4Material::GetNumberOfMaterials(); + for (std::size_t i = 0; i < numberOfMaterials; ++i) { + G4Material* material = (*theMaterialTable)[i]; + auto numberOfElements = (G4int)material->GetNumberOfElements(); + for (G4int j = 0; j < numberOfElements; ++j) { + const G4Element* element = material->GetElement(j); + if (names.IsThisThermalElement(material->GetName(), element->GetName())) { + G4int ts_ID_of_this_geometry; + G4String ts_ndl_name = names.GetTS_NDL_Name(material->GetName(), element->GetName()); + if (co_dic.find(ts_ndl_name) != co_dic.cend()) { + ts_ID_of_this_geometry = co_dic.find(ts_ndl_name)->second; + } + else { + ts_ID_of_this_geometry = (G4int)co_dic.size(); + co_dic.insert(std::pair(ts_ndl_name, ts_ID_of_this_geometry)); + } + + // G4cout << "Neutron HP Thermal Scattering: Registering a material-element pair of " + // << material->GetName() << " " << element->GetName() + // << " as internal thermal scattering id of " << ts_ID_of_this_geometry << "." << + // G4endl; + + dic.insert(std::pair, G4int>( + std::pair(material, element), ts_ID_of_this_geometry)); } - } - - //Searching TS Elements - static G4ThreadLocal G4ElementTable* theElementTable = nullptr ; - if (!theElementTable) theElementTable= G4Element::GetElementTable(); - std::size_t numberOfElements = G4Element::GetNumberOfElements(); - for ( std::size_t i = 0 ; i < numberOfElements ; ++i ) - { - const G4Element* element = (*theElementTable)[i]; - if ( names.IsThisThermalElement ( element->GetName() ) ) - { - if ( names.IsThisThermalElement ( element->GetName() ) ) - { - G4int ts_ID_of_this_geometry; - G4String ts_ndl_name = names.GetTS_NDL_Name( element->GetName() ); - if ( co_dic.find ( ts_ndl_name ) != co_dic.cend() ) - { - ts_ID_of_this_geometry = co_dic.find ( ts_ndl_name ) -> second; - } - else - { - ts_ID_of_this_geometry = (G4int)co_dic.size(); - co_dic.insert ( std::pair< G4String , G4int >( ts_ndl_name , ts_ID_of_this_geometry ) ); - } - dic.insert( std::pair < std::pair < const G4Material* , const G4Element* > , G4int > ( std::pair < const G4Material* , const G4Element* > ( (G4Material*)nullptr , element ) , ts_ID_of_this_geometry ) ); - } + } + } + + // Searching TS Elements + static G4ThreadLocal G4ElementTable* theElementTable = nullptr; + if (theElementTable == nullptr) theElementTable = G4Element::GetElementTable(); + std::size_t numberOfElements = G4Element::GetNumberOfElements(); + for (std::size_t i = 0; i < numberOfElements; ++i) { + const G4Element* element = (*theElementTable)[i]; + if (names.IsThisThermalElement(element->GetName())) { + if (names.IsThisThermalElement(element->GetName())) { + G4int ts_ID_of_this_geometry; + G4String ts_ndl_name = names.GetTS_NDL_Name(element->GetName()); + if (co_dic.find(ts_ndl_name) != co_dic.cend()) { + ts_ID_of_this_geometry = co_dic.find(ts_ndl_name)->second; + } + else { + ts_ID_of_this_geometry = (G4int)co_dic.size(); + co_dic.insert(std::pair(ts_ndl_name, ts_ID_of_this_geometry)); + } + dic.insert(std::pair, G4int>( + std::pair((G4Material*)nullptr, element), + ts_ID_of_this_geometry)); } - } - - G4cout << G4endl; - G4cout << "Neutron HP Thermal Scattering: Following material-element pairs or elements are registered." << G4endl; - for ( std::map < std::pair < const G4Material* , const G4Element* > , G4int >::iterator it = dic.begin() ; it != dic.end() ; it++ ) - { - if ( it->first.first != nullptr ) - { - G4cout << "Material " << it->first.first->GetName() << " - Element " << it->first.second->GetName() << ", internal thermal scattering id " << it->second << G4endl; - } - else - { - G4cout << "Element " << it->first.second->GetName() << ", internal thermal scattering id " << it->second << G4endl; - } - } - G4cout << G4endl; - - // Read Cross Section Data files - - G4ParticleHPManager* hpmanager = G4ParticleHPManager::GetInstance(); - coherentFSs = hpmanager->GetThermalScatteringCoherentFinalStates(); - incoherentFSs = hpmanager->GetThermalScatteringIncoherentFinalStates(); - inelasticFSs = hpmanager->GetThermalScatteringInelasticFinalStates(); - - if ( G4Threading::IsMasterThread() ) { - - clearCurrentFSData(); - - if ( coherentFSs == nullptr ) coherentFSs = new std::map < G4int , std::map < G4double , std::vector < std::pair< G4double , G4double >* >* >* >; - if ( incoherentFSs == nullptr ) incoherentFSs = new std::map < G4int , std::map < G4double , std::vector < E_isoAng* >* >* >; - if ( inelasticFSs == nullptr ) inelasticFSs = new std::map < G4int , std::map < G4double , std::vector < E_P_E_isoAng* >* >* >; - - G4String dirName; - if ( !G4FindDataDir( "G4NEUTRONHPDATA" ) ) - throw G4HadronicException(__FILE__, __LINE__, "Please setenv G4NEUTRONHPDATA to point to the neutron cross-section files."); - dirName = G4FindDataDir( "G4NEUTRONHPDATA" ); - - for (auto it = co_dic.cbegin() ; it != co_dic.cend() ; ++it) - { - G4String tsndlName = it->first; - G4int ts_ID = it->second; + } + } + + G4cout << G4endl; + G4cout + << "Neutron HP Thermal Scattering: Following material-element pairs or elements are registered." + << G4endl; + for (const auto& it : dic) { + if (it.first.first != nullptr) { + G4cout << "Material " << it.first.first->GetName() << " - Element " + << it.first.second->GetName() << ", internal thermal scattering id " << it.second + << G4endl; + } + else { + G4cout << "Element " << it.first.second->GetName() << ", internal thermal scattering id " + << it.second << G4endl; + } + } + G4cout << G4endl; + + // Read Cross Section Data files + + G4ParticleHPManager* hpmanager = G4ParticleHPManager::GetInstance(); + coherentFSs = hpmanager->GetThermalScatteringCoherentFinalStates(); + incoherentFSs = hpmanager->GetThermalScatteringIncoherentFinalStates(); + inelasticFSs = hpmanager->GetThermalScatteringInelasticFinalStates(); + + if (G4Threading::IsMasterThread()) { + clearCurrentFSData(); + + if (coherentFSs == nullptr) + coherentFSs = + new std::map*>*>*>; + if (incoherentFSs == nullptr) + incoherentFSs = new std::map*>*>; + if (inelasticFSs == nullptr) + inelasticFSs = new std::map*>*>; + + G4String dirName; + if (G4FindDataDir("G4NEUTRONHPDATA") == nullptr) + throw G4HadronicException( + __FILE__, __LINE__, + "Please setenv G4NEUTRONHPDATA to point to the neutron cross-section files."); + dirName = G4FindDataDir("G4NEUTRONHPDATA"); + + for (const auto& it : co_dic) { + G4String tsndlName = it.first; + G4int ts_ID = it.second; // Coherent G4String fsName = "/ThermalScattering/Coherent/FS/"; G4String fileName = dirName + fsName + tsndlName; - coherentFSs->insert ( std::pair < G4int , std::map < G4double , std::vector < std::pair< G4double , G4double >* >* >* > ( ts_ID , readACoherentFSDATA( fileName ) ) ); + coherentFSs->insert( + std::pair*>*>*>( + ts_ID, readACoherentFSDATA(fileName))); - // incoherent elastic + // incoherent elastic fsName = "/ThermalScattering/Incoherent/FS/"; fileName = dirName + fsName + tsndlName; - incoherentFSs->insert ( std::pair < G4int , std::map < G4double , std::vector < E_isoAng* >* >* > ( ts_ID , readAnIncoherentFSDATA( fileName ) ) ); + incoherentFSs->insert(std::pair*>*>( + ts_ID, readAnIncoherentFSDATA(fileName))); - // inelastic + // inelastic fsName = "/ThermalScattering/Inelastic/FS/"; fileName = dirName + fsName + tsndlName; - inelasticFSs->insert ( std::pair < G4int , std::map < G4double , std::vector < E_P_E_isoAng* >* >* > ( ts_ID , readAnInelasticFSDATA( fileName ) ) ); - } + inelasticFSs->insert(std::pair*>*>( + ts_ID, readAnInelasticFSDATA(fileName))); + } - hpmanager->RegisterThermalScatteringCoherentFinalStates( coherentFSs ); - hpmanager->RegisterThermalScatteringIncoherentFinalStates( incoherentFSs ); - hpmanager->RegisterThermalScatteringInelasticFinalStates( inelasticFSs ); - } + hpmanager->RegisterThermalScatteringCoherentFinalStates(coherentFSs); + hpmanager->RegisterThermalScatteringIncoherentFinalStates(incoherentFSs); + hpmanager->RegisterThermalScatteringInelasticFinalStates(inelasticFSs); + } - theXSection->BuildPhysicsTable( *(G4Neutron::Neutron()) ); + theXSection->BuildPhysicsTable(*(G4Neutron::Neutron())); } - -G4int G4ParticleHPThermalScattering::getTS_ID ( const G4Material* material , const G4Element* element ) +G4int G4ParticleHPThermalScattering::getTS_ID(const G4Material* material, const G4Element* element) { - G4int result = -1; - if ( dic.find( std::pair < const G4Material* , const G4Element* > ( material , element ) ) != dic.end() ) - result = dic.find( std::pair < const G4Material* , const G4Element* > ( material , element ) )->second; - return result; + G4int result = -1; + if (dic.find(std::pair(material, element)) != dic.end()) + result = dic.find(std::pair(material, element))->second; + return result; } - const std::pair G4ParticleHPThermalScattering::GetFatalEnergyCheckLevels() const { - // max energy non-conservation is mass of heavy nucleus - return std::pair(10.0*perCent, 350.0*CLHEP::GeV); + // max energy non-conservation is mass of heavy nucleus + return std::pair(10.0 * perCent, 350.0 * CLHEP::GeV); } - -void G4ParticleHPThermalScattering::AddUserThermalScatteringFile( G4String nameG4Element , G4String filename) +void G4ParticleHPThermalScattering::AddUserThermalScatteringFile(G4String nameG4Element, + G4String filename) { - names.AddThermalElement( nameG4Element , filename ); - theXSection->AddUserThermalScatteringFile( nameG4Element , filename ); - buildPhysicsTable(); + names.AddThermalElement(nameG4Element, filename); + theXSection->AddUserThermalScatteringFile(nameG4Element, filename); + buildPhysicsTable(); } - -G4bool G4ParticleHPThermalScattering::check_E_isoAng( E_isoAng* anE_IsoAng ) +G4bool G4ParticleHPThermalScattering::check_E_isoAng(E_isoAng* anE_IsoAng) { - G4bool result=false; + G4bool result = false; - G4int n = anE_IsoAng->n; - G4double sum=0.0; - for ( G4int i = 0 ; i < n ; ++i ) { - sum += anE_IsoAng->isoAngle[ i ]; - } - if ( sum != 0.0 ) result = true; + G4int n = anE_IsoAng->n; + G4double sum = 0.0; + for (G4int i = 0; i < n; ++i) { + sum += anE_IsoAng->isoAngle[i]; + } + if (sum != 0.0) result = true; - return result; + return result; } - void G4ParticleHPThermalScattering::ModelDescription(std::ostream& outFile) const { - outFile << "High Precision model based on thermal scattering data in\n" - << "evaluated nuclear data libraries for neutrons below 5eV\n" - << "on specific materials\n"; + outFile << "High Precision model based on thermal scattering data in\n" + << "evaluated nuclear data libraries for neutrons below 5eV\n" + << "on specific materials\n"; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScatteringData.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScatteringData.cc index 9fbcab85716..002ad9695fb 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScatteringData.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScatteringData.cc @@ -41,440 +41,427 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // -#include -#include - #include "G4ParticleHPThermalScatteringData.hh" -#include "G4ParticleHPManager.hh" -#include "G4SystemOfUnits.hh" -#include "G4Neutron.hh" #include "G4ElementTable.hh" - +#include "G4Neutron.hh" +#include "G4ParticleHPManager.hh" +#include "G4SystemOfUnits.hh" #include "G4Threading.hh" +#include +#include + G4ParticleHPThermalScatteringData::G4ParticleHPThermalScatteringData() -:G4VCrossSectionDataSet("NeutronHPThermalScatteringData") -,coherent(nullptr) -,incoherent(nullptr) -,inelastic(nullptr) + : G4VCrossSectionDataSet("NeutronHPThermalScatteringData") { - // Upper limit of neutron energy - emax = 4*eV; - SetMinKinEnergy( 0*MeV ); - SetMaxKinEnergy( emax ); + // Upper limit of neutron energy + emax = 4 * eV; + SetMinKinEnergy(0 * MeV); + SetMaxKinEnergy(emax); - ke_cache = 0.0; - xs_cache = 0.0; - element_cache = nullptr; - material_cache = nullptr; + ke_cache = 0.0; + xs_cache = 0.0; + element_cache = nullptr; + material_cache = nullptr; - indexOfThermalElement.clear(); + indexOfThermalElement.clear(); - names = new G4ParticleHPThermalScatteringNames(); + names = new G4ParticleHPThermalScatteringNames(); } G4ParticleHPThermalScatteringData::~G4ParticleHPThermalScatteringData() { - clearCurrentXSData(); + clearCurrentXSData(); - delete names; + delete names; } -G4bool G4ParticleHPThermalScatteringData::IsIsoApplicable( const G4DynamicParticle* dp , - G4int /*Z*/ , G4int /*A*/ , - const G4Element* element , - const G4Material* material ) +G4bool G4ParticleHPThermalScatteringData::IsIsoApplicable(const G4DynamicParticle* dp, G4int /*Z*/, + G4int /*A*/, const G4Element* element, + const G4Material* material) { - G4double eKin = dp->GetKineticEnergy(); - if ( eKin > 4.0*eV //GetMaxKinEnergy() - || eKin < 0 //GetMinKinEnergy() - || dp->GetDefinition() != G4Neutron::Neutron() ) return false; - - if ( dic.find( std::pair < const G4Material* , const G4Element* > ( (G4Material*)NULL , element ) ) != dic.end() - || dic.find( std::pair < const G4Material* , const G4Element* > ( material , element ) ) != dic.end() ) return true; - - return false; + G4double eKin = dp->GetKineticEnergy(); + if (eKin > 4.0 * eV // GetMaxKinEnergy() + || eKin < 0 // GetMinKinEnergy() + || dp->GetDefinition() != G4Neutron::Neutron()) + return false; + + if (dic.find(std::pair((G4Material*)nullptr, element)) + != dic.end() + || dic.find(std::pair(material, element)) != dic.end()) + return true; + + return false; } -G4double G4ParticleHPThermalScatteringData::GetIsoCrossSection( const G4DynamicParticle* dp , - G4int /*Z*/ , G4int /*A*/ , - const G4Isotope* /*iso*/ , - const G4Element* element , - const G4Material* material ) +G4double G4ParticleHPThermalScatteringData::GetIsoCrossSection(const G4DynamicParticle* dp, + G4int /*Z*/, G4int /*A*/, + const G4Isotope* /*iso*/, + const G4Element* element, + const G4Material* material) { - ke_cache = dp->GetKineticEnergy(); - element_cache = element; - material_cache = material; - G4double xs = GetCrossSection( dp , element , material ); - xs_cache = xs; - return xs; + ke_cache = dp->GetKineticEnergy(); + element_cache = element; + material_cache = material; + G4double xs = GetCrossSection(dp, element, material); + xs_cache = xs; + return xs; } void G4ParticleHPThermalScatteringData::clearCurrentXSData() { - if ( coherent != nullptr ) - { - for (auto it=coherent->cbegin() ; it!=coherent->cend(); ++it) - { - if ( it->second != nullptr ) - { - for (auto itt=it->second->cbegin(); itt!=it->second->cend(); ++itt) - { - delete itt->second; - } - } - delete it->second; - } - coherent->clear(); - } - - if ( incoherent != nullptr ) - { - for (auto it=incoherent->cbegin(); it!=incoherent->cend() ; ++it) - { - if ( it->second != nullptr ) - { - for (auto itt=it->second->cbegin(); itt!=it->second->cend(); ++itt) - { - delete itt->second; - } - } - delete it->second; - } - incoherent->clear(); - } - - if ( inelastic != nullptr ) - { - for (auto it=inelastic->cbegin(); it!=inelastic->cend(); ++it) - { - if ( it->second != nullptr ) - { - for (auto itt=it->second->cbegin(); itt!=it->second->cend(); ++itt) - { - delete itt->second; - } - } - delete it->second; - } - inelastic->clear(); - } - + if (coherent != nullptr) { + for (auto it = coherent->cbegin(); it != coherent->cend(); ++it) { + if (it->second != nullptr) { + for (auto itt = it->second->cbegin(); itt != it->second->cend(); ++itt) { + delete itt->second; + } + } + delete it->second; + } + coherent->clear(); + } + + if (incoherent != nullptr) { + for (auto it = incoherent->cbegin(); it != incoherent->cend(); ++it) { + if (it->second != nullptr) { + for (auto itt = it->second->cbegin(); itt != it->second->cend(); ++itt) { + delete itt->second; + } + } + delete it->second; + } + incoherent->clear(); + } + + if (inelastic != nullptr) { + for (auto it = inelastic->cbegin(); it != inelastic->cend(); ++it) { + if (it->second != nullptr) { + for (auto itt = it->second->cbegin(); itt != it->second->cend(); ++itt) { + delete itt->second; + } + } + delete it->second; + } + inelastic->clear(); + } } - -G4bool G4ParticleHPThermalScatteringData::IsApplicable( const G4DynamicParticle* aP , const G4Element* anEle ) +G4bool G4ParticleHPThermalScatteringData::IsApplicable(const G4DynamicParticle* aP, + const G4Element* anEle) { - G4bool result = false; - - G4double eKin = aP->GetKineticEnergy(); - // Check energy - if ( eKin < emax ) - { - // Check Particle Species - if ( aP->GetDefinition() == G4Neutron::Neutron() ) - { - // anEle is one of Thermal elements - G4int ie = (G4int) anEle->GetIndex(); - for (auto it = indexOfThermalElement.cbegin(); - it != indexOfThermalElement.cend() ; ++it) - { - if ( ie == *it ) return true; - } + G4bool result = false; + + G4double eKin = aP->GetKineticEnergy(); + // Check energy + if (eKin < emax) { + // Check Particle Species + if (aP->GetDefinition() == G4Neutron::Neutron()) { + // anEle is one of Thermal elements + auto ie = (G4int)anEle->GetIndex(); + for (int it : indexOfThermalElement) { + if (ie == it) return true; } - } + } + } - return result; + return result; } - void G4ParticleHPThermalScatteringData::BuildPhysicsTable(const G4ParticleDefinition& aP) { - - if ( &aP != G4Neutron::Neutron() ) - throw G4HadronicException(__FILE__, __LINE__, "Attempt to use NeutronHP data for particles other than neutrons!!!"); - - //std::map < std::pair < G4Material* , const G4Element* > , G4int > dic; - // - dic.clear(); - if ( G4Threading::IsMasterThread() ) clearCurrentXSData(); - - std::map < G4String , G4int > co_dic; - - //Searching Nist Materials - static G4ThreadLocal G4MaterialTable* theMaterialTable = nullptr; - if (!theMaterialTable) theMaterialTable= G4Material::GetMaterialTable(); - std::size_t numberOfMaterials = G4Material::GetNumberOfMaterials(); - for ( std::size_t i = 0 ; i < numberOfMaterials ; ++i ) - { - G4Material* material = (*theMaterialTable)[i]; - G4int numberOfElements = (G4int)material->GetNumberOfElements(); - for ( G4int j = 0 ; j < numberOfElements ; ++j ) - { - const G4Element* element = material->GetElement(j); - if ( names->IsThisThermalElement ( material->GetName() , element->GetName() ) ) - { - G4int ts_ID_of_this_geometry; - G4String ts_ndl_name = names->GetTS_NDL_Name( material->GetName() , element->GetName() ); - if ( co_dic.find ( ts_ndl_name ) != co_dic.cend() ) - { - ts_ID_of_this_geometry = co_dic.find ( ts_ndl_name ) -> second; - } - else - { - ts_ID_of_this_geometry = (G4int)co_dic.size(); - co_dic.insert ( std::pair< G4String , G4int >( ts_ndl_name , ts_ID_of_this_geometry ) ); - } - - dic.insert( std::pair < std::pair < G4Material* , const G4Element* > , G4int > ( std::pair < G4Material* , const G4Element* > ( material , element ) , ts_ID_of_this_geometry ) ); - } - } - } - - //Searching TS Elements - static G4ThreadLocal G4ElementTable* theElementTable = nullptr; - if (!theElementTable) theElementTable= G4Element::GetElementTable(); - std::size_t numberOfElements = G4Element::GetNumberOfElements(); - - for ( std::size_t i = 0 ; i < numberOfElements ; ++i ) - { - const G4Element* element = (*theElementTable)[i]; - if ( names->IsThisThermalElement ( element->GetName() ) ) - { - if ( names->IsThisThermalElement ( element->GetName() ) ) - { - G4int ts_ID_of_this_geometry; - G4String ts_ndl_name = names->GetTS_NDL_Name( element->GetName() ); - if ( co_dic.find ( ts_ndl_name ) != co_dic.cend() ) - { - ts_ID_of_this_geometry = co_dic.find ( ts_ndl_name ) -> second; - } - else - { - ts_ID_of_this_geometry = (G4int)co_dic.size(); - co_dic.insert ( std::pair< G4String , G4int >( ts_ndl_name , ts_ID_of_this_geometry ) ); - } - - dic.insert( std::pair < std::pair < const G4Material* , const G4Element* > , G4int > ( std::pair < const G4Material* , const G4Element* > ( (G4Material*)NULL , element ) , ts_ID_of_this_geometry ) ); - } - } - } - - G4cout << G4endl; - G4cout << "Neutron HP Thermal Scattering Data: Following material-element pairs and/or elements are registered." << G4endl; - for ( auto it = dic.cbegin() ; it != dic.cend() ; ++it ) - { - if ( it->first.first != nullptr ) - { - G4cout << "Material " << it->first.first->GetName() << " - Element " - << it->first.second->GetName() - << ", internal thermal scattering id " << it->second << G4endl; + if (&aP != G4Neutron::Neutron()) + throw G4HadronicException(__FILE__, __LINE__, + "Attempt to use NeutronHP data for particles other than neutrons!!!"); + + // std::map < std::pair < G4Material* , const G4Element* > , G4int > dic; + // + dic.clear(); + if (G4Threading::IsMasterThread()) clearCurrentXSData(); + + std::map co_dic; + + // Searching Nist Materials + static G4ThreadLocal G4MaterialTable* theMaterialTable = nullptr; + if (theMaterialTable == nullptr) theMaterialTable = G4Material::GetMaterialTable(); + std::size_t numberOfMaterials = G4Material::GetNumberOfMaterials(); + for (std::size_t i = 0; i < numberOfMaterials; ++i) { + G4Material* material = (*theMaterialTable)[i]; + auto numberOfElements = (G4int)material->GetNumberOfElements(); + for (G4int j = 0; j < numberOfElements; ++j) { + const G4Element* element = material->GetElement(j); + if (names->IsThisThermalElement(material->GetName(), element->GetName())) { + G4int ts_ID_of_this_geometry; + G4String ts_ndl_name = names->GetTS_NDL_Name(material->GetName(), element->GetName()); + if (co_dic.find(ts_ndl_name) != co_dic.cend()) { + ts_ID_of_this_geometry = co_dic.find(ts_ndl_name)->second; + } + else { + ts_ID_of_this_geometry = (G4int)co_dic.size(); + co_dic.insert(std::pair(ts_ndl_name, ts_ID_of_this_geometry)); + } + + dic.insert(std::pair, G4int>( + std::pair(material, element), ts_ID_of_this_geometry)); } - else - { - G4cout << "Element " << it->first.second->GetName() - << ", internal thermal scattering id " << it->second << G4endl; + } + } + + // Searching TS Elements + static G4ThreadLocal G4ElementTable* theElementTable = nullptr; + if (theElementTable == nullptr) theElementTable = G4Element::GetElementTable(); + std::size_t numberOfElements = G4Element::GetNumberOfElements(); + + for (std::size_t i = 0; i < numberOfElements; ++i) { + const G4Element* element = (*theElementTable)[i]; + if (names->IsThisThermalElement(element->GetName())) { + if (names->IsThisThermalElement(element->GetName())) { + G4int ts_ID_of_this_geometry; + G4String ts_ndl_name = names->GetTS_NDL_Name(element->GetName()); + if (co_dic.find(ts_ndl_name) != co_dic.cend()) { + ts_ID_of_this_geometry = co_dic.find(ts_ndl_name)->second; + } + else { + ts_ID_of_this_geometry = (G4int)co_dic.size(); + co_dic.insert(std::pair(ts_ndl_name, ts_ID_of_this_geometry)); + } + + dic.insert(std::pair, G4int>( + std::pair((G4Material*)nullptr, element), + ts_ID_of_this_geometry)); } - } - G4cout << G4endl; - - G4ParticleHPManager* hpmanager = G4ParticleHPManager::GetInstance(); - - coherent = hpmanager->GetThermalScatteringCoherentCrossSections(); - incoherent = hpmanager->GetThermalScatteringIncoherentCrossSections(); - inelastic = hpmanager->GetThermalScatteringInelasticCrossSections(); - - if ( G4Threading::IsMasterThread() ) - { - if ( coherent == nullptr ) - coherent = new std::map< G4int , std::map< G4double , G4ParticleHPVector* >* >; - if ( incoherent == nullptr ) - incoherent = new std::map< G4int , std::map< G4double , G4ParticleHPVector* >* >; - if ( inelastic == nullptr ) - inelastic = new std::map< G4int , std::map< G4double , G4ParticleHPVector* >* >; - - // Read Cross Section Data files - - G4String dirName; - if ( !G4FindDataDir( "G4NEUTRONHPDATA" ) ) - throw G4HadronicException(__FILE__, __LINE__, "Please setenv G4NEUTRONHPDATA to point to the neutron cross-section files."); - G4String baseName = G4FindDataDir( "G4NEUTRONHPDATA" ); - - dirName = baseName + "/ThermalScattering"; - - G4String ndl_filename; - G4String full_name; - - for ( auto it = co_dic.cbegin() ; it != co_dic.cend() ; ++it ) - { - ndl_filename = it->first; - G4int ts_ID = it->second; - - // Coherent - full_name = dirName + "/Coherent/CrossSection/" + ndl_filename; - auto coh_amapTemp_EnergyCross = readData( full_name ); - coherent->insert ( std::pair < G4int , std::map< G4double , G4ParticleHPVector* >* > ( ts_ID , coh_amapTemp_EnergyCross ) ); - - // Incoherent - full_name = dirName + "/Incoherent/CrossSection/" + ndl_filename; - auto incoh_amapTemp_EnergyCross = readData( full_name ); - incoherent->insert ( std::pair < G4int , std::map< G4double , G4ParticleHPVector* >* > ( ts_ID , incoh_amapTemp_EnergyCross ) ); - - // Inelastic - full_name = dirName + "/Inelastic/CrossSection/" + ndl_filename; - auto inela_amapTemp_EnergyCross = readData( full_name ); - inelastic->insert ( std::pair < G4int , std::map< G4double , G4ParticleHPVector* >* > ( ts_ID , inela_amapTemp_EnergyCross ) ); - } - hpmanager->RegisterThermalScatteringCoherentCrossSections( coherent ); - hpmanager->RegisterThermalScatteringIncoherentCrossSections( incoherent ); - hpmanager->RegisterThermalScatteringInelasticCrossSections( inelastic ); - } -} + } + } + G4cout << G4endl; + G4cout << "Neutron HP Thermal Scattering Data: Following material-element pairs and/or elements " + "are registered." + << G4endl; + for (const auto& it : dic) { + if (it.first.first != nullptr) { + G4cout << "Material " << it.first.first->GetName() << " - Element " + << it.first.second->GetName() << ", internal thermal scattering id " << it.second + << G4endl; + } + else { + G4cout << "Element " << it.first.second->GetName() << ", internal thermal scattering id " + << it.second << G4endl; + } + } + G4cout << G4endl; + + G4ParticleHPManager* hpmanager = G4ParticleHPManager::GetInstance(); + + coherent = hpmanager->GetThermalScatteringCoherentCrossSections(); + incoherent = hpmanager->GetThermalScatteringIncoherentCrossSections(); + inelastic = hpmanager->GetThermalScatteringInelasticCrossSections(); + + if (G4Threading::IsMasterThread()) { + if (coherent == nullptr) + coherent = new std::map*>; + if (incoherent == nullptr) + incoherent = new std::map*>; + if (inelastic == nullptr) + inelastic = new std::map*>; + + // Read Cross Section Data files + + G4String dirName; + if (G4FindDataDir("G4NEUTRONHPDATA") == nullptr) + throw G4HadronicException( + __FILE__, __LINE__, + "Please setenv G4NEUTRONHPDATA to point to the neutron cross-section files."); + G4String baseName = G4FindDataDir("G4NEUTRONHPDATA"); + + dirName = baseName + "/ThermalScattering"; + + G4String ndl_filename; + G4String full_name; + + for (const auto& it : co_dic) { + ndl_filename = it.first; + G4int ts_ID = it.second; + + // Coherent + full_name = dirName + "/Coherent/CrossSection/" + ndl_filename; + auto coh_amapTemp_EnergyCross = readData(full_name); + coherent->insert(std::pair*>( + ts_ID, coh_amapTemp_EnergyCross)); + + // Incoherent + full_name = dirName + "/Incoherent/CrossSection/" + ndl_filename; + auto incoh_amapTemp_EnergyCross = readData(full_name); + incoherent->insert(std::pair*>( + ts_ID, incoh_amapTemp_EnergyCross)); + + // Inelastic + full_name = dirName + "/Inelastic/CrossSection/" + ndl_filename; + auto inela_amapTemp_EnergyCross = readData(full_name); + inelastic->insert(std::pair*>( + ts_ID, inela_amapTemp_EnergyCross)); + } + hpmanager->RegisterThermalScatteringCoherentCrossSections(coherent); + hpmanager->RegisterThermalScatteringIncoherentCrossSections(incoherent); + hpmanager->RegisterThermalScatteringInelasticCrossSections(inelastic); + } +} -std::map< G4double , G4ParticleHPVector* >* -G4ParticleHPThermalScatteringData::readData ( G4String full_name ) -{ - auto aData = new std::map< G4double , G4ParticleHPVector* >; - - std::istringstream theChannel; - G4ParticleHPManager::GetInstance()->GetDataStream(full_name,theChannel); - - G4int dummy; - while ( theChannel >> dummy ) // MF // Loop checking, 11.05.2015, T. Koi - { - theChannel >> dummy; // MT - G4double temp; - theChannel >> temp; - G4ParticleHPVector* anEnergyCross = new G4ParticleHPVector; - G4int nData; - theChannel >> nData; - anEnergyCross->Init ( theChannel , nData , eV , barn ); - aData->insert ( std::pair < G4double , G4ParticleHPVector* > ( temp , anEnergyCross ) ); - } - - return aData; -} - - -void G4ParticleHPThermalScatteringData::DumpPhysicsTable( const G4ParticleDefinition& aP ) +std::map* +G4ParticleHPThermalScatteringData::readData(G4String full_name) { - if( &aP != G4Neutron::Neutron() ) - throw G4HadronicException(__FILE__, __LINE__, "Attempt to use NeutronHP data for particles other than neutrons!!!"); + auto aData = new std::map; + + std::istringstream theChannel; + G4ParticleHPManager::GetInstance()->GetDataStream(full_name, theChannel); + + G4int dummy; + while (theChannel >> dummy) // MF // Loop checking, 11.05.2015, T. Koi + { + theChannel >> dummy; // MT + G4double temp; + theChannel >> temp; + auto anEnergyCross = new G4ParticleHPVector; + G4int nData; + theChannel >> nData; + anEnergyCross->Init(theChannel, nData, eV, barn); + aData->insert(std::pair(temp, anEnergyCross)); + } + + return aData; } +void G4ParticleHPThermalScatteringData::DumpPhysicsTable(const G4ParticleDefinition& aP) +{ + if (&aP != G4Neutron::Neutron()) + throw G4HadronicException(__FILE__, __LINE__, + "Attempt to use NeutronHP data for particles other than neutrons!!!"); +} -G4double G4ParticleHPThermalScatteringData::GetCrossSection( const G4DynamicParticle* aP , const G4Element*anE , const G4Material* aM ) +G4double G4ParticleHPThermalScatteringData::GetCrossSection(const G4DynamicParticle* aP, + const G4Element* anE, + const G4Material* aM) { - G4double result = 0; - - G4int ts_id =getTS_ID( aM , anE ); + G4double result = 0; - if ( ts_id == -1 ) return result; + G4int ts_id = getTS_ID(aM, anE); - G4double aT = aM->GetTemperature(); + if (ts_id == -1) return result; - G4double Xcoh = GetX ( aP , aT , coherent->find(ts_id)->second ); - G4double Xincoh = GetX ( aP , aT , incoherent->find(ts_id)->second ); - G4double Xinela = GetX ( aP , aT , inelastic->find(ts_id)->second ); + G4double aT = aM->GetTemperature(); - result = Xcoh + Xincoh + Xinela; + G4double Xcoh = GetX(aP, aT, coherent->find(ts_id)->second); + G4double Xincoh = GetX(aP, aT, incoherent->find(ts_id)->second); + G4double Xinela = GetX(aP, aT, inelastic->find(ts_id)->second); - return result; -} + result = Xcoh + Xincoh + Xinela; + return result; +} -G4double G4ParticleHPThermalScatteringData::GetInelasticCrossSection( const G4DynamicParticle* aP , const G4Element*anE , const G4Material* aM ) +G4double G4ParticleHPThermalScatteringData::GetInelasticCrossSection(const G4DynamicParticle* aP, + const G4Element* anE, + const G4Material* aM) { - G4double result = 0; - G4int ts_id = getTS_ID( aM , anE ); - G4double aT = aM->GetTemperature(); - result = GetX ( aP , aT , inelastic->find( ts_id )->second ); - return result; + G4double result = 0; + G4int ts_id = getTS_ID(aM, anE); + G4double aT = aM->GetTemperature(); + result = GetX(aP, aT, inelastic->find(ts_id)->second); + return result; } -G4double G4ParticleHPThermalScatteringData::GetCoherentCrossSection( const G4DynamicParticle* aP , const G4Element*anE , const G4Material* aM ) +G4double G4ParticleHPThermalScatteringData::GetCoherentCrossSection(const G4DynamicParticle* aP, + const G4Element* anE, + const G4Material* aM) { - G4double result = 0; - G4int ts_id = getTS_ID( aM , anE ); - G4double aT = aM->GetTemperature(); - result = GetX ( aP , aT , coherent->find( ts_id )->second ); - return result; + G4double result = 0; + G4int ts_id = getTS_ID(aM, anE); + G4double aT = aM->GetTemperature(); + result = GetX(aP, aT, coherent->find(ts_id)->second); + return result; } -G4double G4ParticleHPThermalScatteringData::GetIncoherentCrossSection( const G4DynamicParticle* aP , const G4Element*anE , const G4Material* aM ) +G4double G4ParticleHPThermalScatteringData::GetIncoherentCrossSection(const G4DynamicParticle* aP, + const G4Element* anE, + const G4Material* aM) { - G4double result = 0; - G4int ts_id = getTS_ID( aM , anE ); - G4double aT = aM->GetTemperature(); - result = GetX ( aP , aT , incoherent->find( ts_id )->second ); - return result; + G4double result = 0; + G4int ts_id = getTS_ID(aM, anE); + G4double aT = aM->GetTemperature(); + result = GetX(aP, aT, incoherent->find(ts_id)->second); + return result; } -G4int G4ParticleHPThermalScatteringData::getTS_ID ( const G4Material* material , const G4Element* element ) +G4int G4ParticleHPThermalScatteringData::getTS_ID(const G4Material* material, + const G4Element* element) { - G4int result = -1; - if ( dic.find( std::pair < const G4Material* , const G4Element* > ( (G4Material*)NULL , element ) ) != dic.end() ) - return dic.find( std::pair < const G4Material* , const G4Element* > ( (G4Material*)NULL , element ) )->second; - if ( dic.find( std::pair < const G4Material* , const G4Element* > ( material , element ) ) != dic.end() ) - return dic.find( std::pair < const G4Material* , const G4Element* > ( material , element ) )->second; - return result; + G4int result = -1; + if (dic.find(std::pair((G4Material*)nullptr, element)) + != dic.end()) + return dic.find(std::pair((G4Material*)nullptr, element)) + ->second; + if (dic.find(std::pair(material, element)) != dic.end()) + return dic.find(std::pair(material, element))->second; + return result; } -G4double G4ParticleHPThermalScatteringData::GetX ( const G4DynamicParticle* aP, G4double aT , std::map < G4double , G4ParticleHPVector* >* amapTemp_EnergyCross ) +G4double G4ParticleHPThermalScatteringData::GetX( + const G4DynamicParticle* aP, G4double aT, + std::map* amapTemp_EnergyCross) { - G4double result = 0; - if ( amapTemp_EnergyCross->size() == 0 ) return result; - - G4double eKinetic = aP->GetKineticEnergy(); - - if ( amapTemp_EnergyCross->size() == 1 ) { - if ( std::fabs ( aT - amapTemp_EnergyCross->cbegin()->first ) / amapTemp_EnergyCross->begin()->first > 0.1 ) { - G4cout << "G4ParticleHPThermalScatteringData:: The temperature of material (" - << aT/kelvin << "K) is different more than 10% from temperature of thermal scattering file expected (" - << amapTemp_EnergyCross->begin()->first << "K). Result may not be reliable." - << G4endl; - } - result = amapTemp_EnergyCross->begin()->second->GetXsec ( eKinetic ); - return result; - } - - auto it = amapTemp_EnergyCross->cbegin(); - for (it=amapTemp_EnergyCross->cbegin(); it!=amapTemp_EnergyCross->cend(); ++it) - { - if ( aT < it->first ) break; - } - if ( it == amapTemp_EnergyCross->cbegin() ) { - ++it; // lower than the first - } else if ( it == amapTemp_EnergyCross->cend() ) { - --it; // upper than the last - } - - G4double TH = it->first; - G4double XH = it->second->GetXsec ( eKinetic ); - - if ( it != amapTemp_EnergyCross->cbegin() ) --it; - G4double TL = it->first; - G4double XL = it->second->GetXsec ( eKinetic ); - - if ( TH == TL ) - throw G4HadronicException(__FILE__, __LINE__, "Thermal Scattering Data Error!"); - - G4double T = aT; - G4double X = ( XH - XL ) / ( TH - TL ) * ( T - TL ) + XL; - result = X; - - return result; + G4double result = 0; + if (amapTemp_EnergyCross->empty()) return result; + + G4double eKinetic = aP->GetKineticEnergy(); + + if (amapTemp_EnergyCross->size() == 1) { + if (std::fabs(aT - amapTemp_EnergyCross->cbegin()->first) / amapTemp_EnergyCross->begin()->first + > 0.1) + { + G4cout + << "G4ParticleHPThermalScatteringData:: The temperature of material (" << aT / kelvin + << "K) is different more than 10% from temperature of thermal scattering file expected (" + << amapTemp_EnergyCross->begin()->first << "K). Result may not be reliable." << G4endl; + } + result = amapTemp_EnergyCross->begin()->second->GetXsec(eKinetic); + return result; + } + + auto it = amapTemp_EnergyCross->cbegin(); + for (it = amapTemp_EnergyCross->cbegin(); it != amapTemp_EnergyCross->cend(); ++it) { + if (aT < it->first) break; + } + if (it == amapTemp_EnergyCross->cbegin()) { + ++it; // lower than the first + } + else if (it == amapTemp_EnergyCross->cend()) { + --it; // upper than the last + } + + G4double TH = it->first; + G4double XH = it->second->GetXsec(eKinetic); + + if (it != amapTemp_EnergyCross->cbegin()) --it; + G4double TL = it->first; + G4double XL = it->second->GetXsec(eKinetic); + + if (TH == TL) throw G4HadronicException(__FILE__, __LINE__, "Thermal Scattering Data Error!"); + + G4double T = aT; + G4double X = (XH - XL) / (TH - TL) * (T - TL) + XL; + result = X; + + return result; } - -void G4ParticleHPThermalScatteringData::AddUserThermalScatteringFile( G4String nameG4Element , G4String filename ) +void G4ParticleHPThermalScatteringData::AddUserThermalScatteringFile(G4String nameG4Element, + G4String filename) { - names->AddThermalElement( nameG4Element , filename ); + names->AddThermalElement(nameG4Element, filename); } void G4ParticleHPThermalScatteringData::CrossSectionDescription(std::ostream& outFile) const { - outFile << "High Precision cross data based on thermal scattering data in evaluated nuclear data libraries for neutrons below 5eV on specific materials\n" ; + outFile << "High Precision cross data based on thermal scattering data in evaluated nuclear data " + "libraries for neutrons below 5eV on specific materials\n"; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScatteringNames.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScatteringNames.cc index fdacacd50fe..55327d7e195 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScatteringNames.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThermalScatteringNames.cc @@ -38,142 +38,203 @@ // #include "G4ParticleHPThermalScatteringNames.hh" -#include "G4Neutron.hh" + #include "G4ElementTable.hh" -//#include "G4ParticleHPData.hh" +#include "G4Neutron.hh" +// #include "G4ParticleHPData.hh" G4ParticleHPThermalScatteringNames::G4ParticleHPThermalScatteringNames() { - // -------------------------------------------------------------------------------------------------------------------------- - // Old Geant4 naming - before 23/03/2022 - TSL linked to ENDF/BVII.1 nuclear cross-section G4NDL4.5 - // -------------------------------------------------------------------------------------------------------------------------- - /*names.insert ( std::pair < G4String , G4String > ( "TS_Aluminium_Metal" , "al_metal" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_Beryllium_Metal" , "be_metal" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_Be_of_Beryllium_Oxide" , "be_beo" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_C_of_Graphite" , "graphite" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_D_of_Heavy_Water" , "d_heavy_water" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Water" , "h_water" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Zirconium_Hydride" , "h_zrh" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Polyethylene" , "h_polyethylene" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_Iron_Metal" , "fe_metal" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_O_of_Uranium_Dioxide" , "o_uo2" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_O_of_Beryllium_Oxide" , "o_beo" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_U_of_Uranium_Dioxide" , "u_uo2" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_U235_of_Uranium_Dioxide" , "u235_uo2" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_U238_of_Uranium_Dioxide" , "u238_uo2" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_Zr_of_Zirconium_Hydride" , "zr_zrh" ) ); //// ENDF-B71 - + // -------------------------------------------------------------------------------------------------------------------------- + // Old Geant4 naming - before 23/03/2022 - TSL linked to ENDF/BVII.1 nuclear cross-section + // G4NDL4.5 + // -------------------------------------------------------------------------------------------------------------------------- + /*names.insert ( std::pair < G4String , G4String > ( "TS_Aluminium_Metal" , "al_metal" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_Beryllium_Metal" , "be_metal" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_Be_of_Beryllium_Oxide" , "be_beo" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_C_of_Graphite" , "graphite" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_D_of_Heavy_Water" , "d_heavy_water" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Water" , "h_water" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Zirconium_Hydride" , "h_zrh" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Polyethylene" , "h_polyethylene" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_Iron_Metal" , "fe_metal" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_O_of_Uranium_Dioxide" , "o_uo2" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_O_of_Beryllium_Oxide" , "o_beo" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_U_of_Uranium_Dioxide" , "u_uo2" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_U235_of_Uranium_Dioxide" , "u235_uo2" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_U238_of_Uranium_Dioxide" , "u238_uo2" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_Zr_of_Zirconium_Hydride" , "zr_zrh" ) ); + //// ENDF-B71 - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Para_Hydrogen" , "h_para_h2" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Ortho_Hydrogen" , "h_ortho_h2" ) ); - - names.insert ( std::pair < G4String , G4String > ( "TS_D_of_Para_Deuterium" , "d_para_d2" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_D_of_Ortho_Deuterium" , "d_ortho_d2" ) ); - - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Liquid_Methane", "h_l_ch4" ) ); - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Solid_Methane", "h_s_ch4" ) ); */ - - // -------------------------------------------------------------------------------------------------------------------------- - // New Geant4 naming - after 23/03/2022 - TSL linked to JEFF-3.3 nuclear cross-section G4NDL4.6 - // -------------------------------------------------------------------------------------------------------------------------- - ///23/03/2022 - Added by L. Thulliez (CEA-Saclay) - names.insert ( std::pair < G4String , G4String > ( "TS_Benzene", "h_benzen" ) ); ///ENDF/BVIII.0 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Para_Hydrogen", "h_para_h2" ) ); ///ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_D_of_Para_Deuterium", "d_para_d2" ) ); ///ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Ortho_Hydrogen", "h_ortho_h2" ) ); ///ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_D_of_Ortho_Deuterium", "d_ortho_d2" ) );///ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_O_of_Uranium_Dioxide", "o_uo2" ) ); ///ENDF/BVIII.0 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_O_of_Ice", "o_ice" ) ); ///ENDF/BVIII.0 - names.insert ( std::pair < G4String , G4String > ( "TS_O_of_Heavy_Water", "o_heavy_water" ) ); ///ENDF/BVIII.0 and JEFFF.3.3 - names.insert ( std::pair < G4String , G4String > ( "TS_O_of_Beryllium_Oxide", "o_beo" ) ); ///ENDF/BVIII.0 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_N_of_Uranium_Nitride", "n_un" ) ); ///ENDF/BVIII.0 - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Liquid_Methane", "h_l_ch4" ) ); ///ENDF/BVIII.0 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Zirconium_Hydride", "h_zrh" ) ); ///ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Yttrium_Hydride", "h_yh2" ) ); ///ENDF/BVIII.0 - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Ice", "h_ice" ) ); ///ENDF/BVIII.0 and JEFFF.3.3 - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Water", "h_water" ) ); ///ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Polyethylene", "h_polyethylene" ) ); ///ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_PolymethylMethacrylate", "h_c5o2h8" ) ); ///ENDF/BVIII.0 - names.insert ( std::pair < G4String , G4String > ( "TS_D_of_Heavy_Water", "d_heavy_water" ) ); ///ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_C_of_Graphite", "graphite" ) ); ///ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_C_of_Silicium_Carbide", "c_sic" ) ); ///ENDF/BVIII.0 - names.insert ( std::pair < G4String , G4String > ( "TS_C_of_Graphite_Porosity_30percent", "graphite_30p" ) ); ///ENDF/BVIII.0 - names.insert ( std::pair < G4String , G4String > ( "TS_C_of_Graphite_Porosity_10percent", "graphite_10p" ) ); ///ENDF/BVIII.0 - names.insert ( std::pair < G4String , G4String > ( "TS_Beryllium_Metal", "be_metal")); ///ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_Be_of_Beryllium_Oxide", "be_beo" ) ); ///ENDF/BVIII.0 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_Iron_Metal", "fe_metal" ) ); ///ENDF/BVIII.0 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_Zr90_of_Zirconium_Hydride", "zr90_zrh" ) ); ///ENDF/BVIII.0 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_Zr91_of_Zirconium_Hydride", "zr91_zrh" ) ); ///ENDF/BVIII.0 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_Zr92_of_Zirconium_Hydride", "zr92_zrh" ) ); ///ENDF/BVIII.0 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_Zr94_of_Zirconium_Hydride", "zr94_zrh" ) ); ///ENDF/BVIII.0 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_Zr96_of_Zirconium_Hydride", "zr96_zrh" ) ); ///ENDF/BVIII.0 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_Y_of_Yttrium_Hydride", "y_yh2" ) ); ///ENDF/BVIII.0 - names.insert ( std::pair < G4String , G4String > ( "TS_U235_of_Uranium_Dioxide", "u235_uo2" ) ); ///ENDF/BVIII.0 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_U238_of_Uranium_Dioxide", "u238_uo2" ) ); ///ENDF/BVIII.0 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_U235_of_Uranium_Nitride", "u235_un" ) ); ///ENDF/BVIII.0 - names.insert ( std::pair < G4String , G4String > ( "TS_U238_of_Uranium_Nitride", "u238_un" ) ); ///ENDF/BVIII.0 - names.insert ( std::pair < G4String , G4String > ( "TS_Si28_of_SiO2_beta", "si28_sio2_beta" ) ); ///ENDF/BVIII.0 - names.insert ( std::pair < G4String , G4String > ( "TS_Si29_of_SiO2_beta", "si29_sio2_beta" ) ); ///ENDF/BVIII.0 - names.insert ( std::pair < G4String , G4String > ( "TS_Si30_of_SiO2_beta", "si30_sio2_beta" ) ); ///ENDF/BVIII.0 - names.insert ( std::pair < G4String , G4String > ( "TS_Si28_of_SiO2_alpha", "si28_sio2_alpha" ) ); ///ENDF/BVIII.0 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_Si29_of_SiO2_alpha", "si29_sio2_alpha" ) ); ///ENDF/BVIII.0 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_Si30_of_SiO2_alpha", "si30_sio2_alpha" ) ); ///ENDF/BVIII.0 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_Si28_of_Silicium_Carbide", "si28_sic" ) ); ///ENDF/BVIII.0 - names.insert ( std::pair < G4String , G4String > ( "TS_Si29_of_Silicium_Carbide", "si29_sic" ) ); ///ENDF/BVIII.0 - names.insert ( std::pair < G4String , G4String > ( "TS_Si30_of_Silicium_Carbide", "si30_sic" ) ); ///ENDF/BVIII.0 - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Solid_Methane", "h_s_ch4" ) ); ///ENDF/BVIII.0 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_Aluminium_Metal", "al_metal" ) ); ///ENDF/BVIII.0 and ENDF/BVII.1 - names.insert ( std::pair < G4String , G4String > ( "TS_Al_of_Sapphir_SingleCrystal", "al_al2o3_singlecrystal" ) ); ///JEFFF.3.3 - names.insert ( std::pair < G4String , G4String > ( "TS_Ca_of_CaH2", "ca_cah2" ) ); ///JEFFF.3.3 - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_CaH2", "h_cah2" ) ); ///JEFFF.3.3 - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Mesitylene_phaseII", "h_mesitylene_phaseII" ) ); ///JEFFF.3.3 - names.insert ( std::pair < G4String , G4String > ( "TS_O_of_Sapphir_SingleCrystal", "o_al2o3_singlecrystal" ) ); ///JEFFF.3.3 - names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Toluene", "h_toluene" ) ); ///JEFFF.3.3 - names.insert ( std::pair < G4String , G4String > ( "TS_Si30_of_SiO2_SingleCrystal", "si30_sio2_singlecrystal" ) ); ///JEFFF.3.3 - names.insert ( std::pair < G4String , G4String > ( "TS_Si29_of_SiO2_SingleCrystal", "si29_sio2_singlecrystal" ) ); ///JEFFF.3.3 - names.insert ( std::pair < G4String , G4String > ( "TS_Si28_of_SiO2_SingleCrystal", "si28_sio2_singlecrystal" ) ); ///JEFFF.3.3 - names.insert ( std::pair < G4String , G4String > ( "TS_Mg26_of_Magnesium_Metal", "mg26_magnesium" ) ); ///JEFFF.3.3 - names.insert ( std::pair < G4String , G4String > ( "TS_Mg25_of_Magnesium_Metal", "mg25_magnesium" ) ); ///JEFFF.3.3 - names.insert ( std::pair < G4String , G4String > ( "TS_Mg24_of_Magnesium_Metal", "mg24_magnesium" ) ); ///JEFFF.3.3 + names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Para_Hydrogen" , "h_para_h2" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Ortho_Hydrogen" , "h_ortho_h2" ) ); - nist_names.insert ( std::pair < std::pair < G4String , G4String > , G4String > ( std::pair < G4String , G4String > ( "G4_BERYLLIUM_OXIDE" , "Be" ) , "be_beo" ) ); - nist_names.insert ( std::pair < std::pair < G4String , G4String > , G4String > ( std::pair < G4String , G4String > ( "G4_BERYLLIUM_OXIDE" , "O" ) , "o_beo" ) ); - nist_names.insert ( std::pair < std::pair < G4String , G4String > , G4String > ( std::pair < G4String , G4String > ( "G4_GRAPHITE" , "C" ) , "graphite" ) ); - nist_names.insert ( std::pair < std::pair < G4String , G4String > , G4String > ( std::pair < G4String , G4String > ( "G4_POLYETHYLENE" , "H" ) , "h_polyethylene" ) ); - nist_names.insert ( std::pair < std::pair < G4String , G4String > , G4String > ( std::pair < G4String , G4String > ( "G4_URANIUM_OXIDE" , "O" ) , "o_uo2" ) ); - nist_names.insert ( std::pair < std::pair < G4String , G4String > , G4String > ( std::pair < G4String , G4String > ( "G4_URANIUM_OXIDE" , "U" ) , "u_uo2" ) ); - nist_names.insert ( std::pair < std::pair < G4String , G4String > , G4String > ( std::pair < G4String , G4String > ( "G4_WATER" , "H" ) , "h_water" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_D_of_Para_Deuterium" , "d_para_d2" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_D_of_Ortho_Deuterium" , "d_ortho_d2" ) ); - //nist_names.insert ( std::pair < std::pair < G4String , G4String > , G4String > ( std::pair < G4String , G4String > ( "G4_BENZENE" , "H" ) , "benzen" ) ); - //nist_names.insert ( std::pair < std::pair < G4String , G4String > , G4String > ( std::pair < G4String , G4String > ( "G4_BENZENE" , "C" ) , "benzen" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Liquid_Methane", "h_l_ch4" ) ); + names.insert ( std::pair < G4String , G4String > ( "TS_H_of_Solid_Methane", "h_s_ch4" ) ); */ + // -------------------------------------------------------------------------------------------------------------------------- + // New Geant4 naming - after 23/03/2022 - TSL linked to JEFF-3.3 nuclear cross-section G4NDL4.6 + // -------------------------------------------------------------------------------------------------------------------------- + /// 23/03/2022 - Added by L. Thulliez (CEA-Saclay) + names.insert( + std::pair("TS_Benzene", "h_benzen")); /// ENDF/BVIII.0 and ENDF/BVII.1 + names.insert(std::pair( + "TS_H_of_Para_Hydrogen", "h_para_h2")); /// ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 + names.insert(std::pair( + "TS_D_of_Para_Deuterium", "d_para_d2")); /// ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 + names.insert(std::pair( + "TS_H_of_Ortho_Hydrogen", "h_ortho_h2")); /// ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 + names.insert(std::pair( + "TS_D_of_Ortho_Deuterium", "d_ortho_d2")); /// ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 + names.insert(std::pair("TS_O_of_Uranium_Dioxide", + "o_uo2")); /// ENDF/BVIII.0 and ENDF/BVII.1 + names.insert(std::pair("TS_O_of_Ice", "o_ice")); /// ENDF/BVIII.0 + names.insert(std::pair("TS_O_of_Heavy_Water", + "o_heavy_water")); /// ENDF/BVIII.0 and JEFFF.3.3 + names.insert(std::pair("TS_O_of_Beryllium_Oxide", + "o_beo")); /// ENDF/BVIII.0 and ENDF/BVII.1 + names.insert(std::pair("TS_N_of_Uranium_Nitride", "n_un")); /// ENDF/BVIII.0 + names.insert(std::pair("TS_H_of_Liquid_Methane", + "h_l_ch4")); /// ENDF/BVIII.0 and ENDF/BVII.1 + names.insert(std::pair( + "TS_H_of_Zirconium_Hydride", "h_zrh")); /// ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 + names.insert(std::pair("TS_H_of_Yttrium_Hydride", "h_yh2")); /// ENDF/BVIII.0 + names.insert( + std::pair("TS_H_of_Ice", "h_ice")); /// ENDF/BVIII.0 and JEFFF.3.3 + names.insert(std::pair( + "TS_H_of_Water", "h_water")); /// ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 + names.insert(std::pair( + "TS_H_of_Polyethylene", "h_polyethylene")); /// ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 + names.insert( + std::pair("TS_H_of_PolymethylMethacrylate", "h_c5o2h8")); /// ENDF/BVIII.0 + names.insert(std::pair( + "TS_D_of_Heavy_Water", "d_heavy_water")); /// ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 + names.insert(std::pair( + "TS_C_of_Graphite", "graphite")); /// ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 + names.insert( + std::pair("TS_C_of_Silicium_Carbide", "c_sic")); /// ENDF/BVIII.0 + names.insert(std::pair("TS_C_of_Graphite_Porosity_30percent", + "graphite_30p")); /// ENDF/BVIII.0 + names.insert(std::pair("TS_C_of_Graphite_Porosity_10percent", + "graphite_10p")); /// ENDF/BVIII.0 + names.insert(std::pair( + "TS_Beryllium_Metal", "be_metal")); /// ENDF/BVIII.0 and JEFFF.3.3 and ENDF/BVII.1 + names.insert(std::pair("TS_Be_of_Beryllium_Oxide", + "be_beo")); /// ENDF/BVIII.0 and ENDF/BVII.1 + names.insert( + std::pair("TS_Iron_Metal", "fe_metal")); /// ENDF/BVIII.0 and ENDF/BVII.1 + names.insert(std::pair("TS_Zr90_of_Zirconium_Hydride", + "zr90_zrh")); /// ENDF/BVIII.0 and ENDF/BVII.1 + names.insert(std::pair("TS_Zr91_of_Zirconium_Hydride", + "zr91_zrh")); /// ENDF/BVIII.0 and ENDF/BVII.1 + names.insert(std::pair("TS_Zr92_of_Zirconium_Hydride", + "zr92_zrh")); /// ENDF/BVIII.0 and ENDF/BVII.1 + names.insert(std::pair("TS_Zr94_of_Zirconium_Hydride", + "zr94_zrh")); /// ENDF/BVIII.0 and ENDF/BVII.1 + names.insert(std::pair("TS_Zr96_of_Zirconium_Hydride", + "zr96_zrh")); /// ENDF/BVIII.0 and ENDF/BVII.1 + names.insert(std::pair("TS_Y_of_Yttrium_Hydride", "y_yh2")); /// ENDF/BVIII.0 + names.insert(std::pair("TS_U235_of_Uranium_Dioxide", + "u235_uo2")); /// ENDF/BVIII.0 and ENDF/BVII.1 + names.insert(std::pair("TS_U238_of_Uranium_Dioxide", + "u238_uo2")); /// ENDF/BVIII.0 and ENDF/BVII.1 + names.insert( + std::pair("TS_U235_of_Uranium_Nitride", "u235_un")); /// ENDF/BVIII.0 + names.insert( + std::pair("TS_U238_of_Uranium_Nitride", "u238_un")); /// ENDF/BVIII.0 + names.insert( + std::pair("TS_Si28_of_SiO2_beta", "si28_sio2_beta")); /// ENDF/BVIII.0 + names.insert( + std::pair("TS_Si29_of_SiO2_beta", "si29_sio2_beta")); /// ENDF/BVIII.0 + names.insert( + std::pair("TS_Si30_of_SiO2_beta", "si30_sio2_beta")); /// ENDF/BVIII.0 + names.insert(std::pair("TS_Si28_of_SiO2_alpha", + "si28_sio2_alpha")); /// ENDF/BVIII.0 and ENDF/BVII.1 + names.insert(std::pair("TS_Si29_of_SiO2_alpha", + "si29_sio2_alpha")); /// ENDF/BVIII.0 and ENDF/BVII.1 + names.insert(std::pair("TS_Si30_of_SiO2_alpha", + "si30_sio2_alpha")); /// ENDF/BVIII.0 and ENDF/BVII.1 + names.insert( + std::pair("TS_Si28_of_Silicium_Carbide", "si28_sic")); /// ENDF/BVIII.0 + names.insert( + std::pair("TS_Si29_of_Silicium_Carbide", "si29_sic")); /// ENDF/BVIII.0 + names.insert( + std::pair("TS_Si30_of_Silicium_Carbide", "si30_sic")); /// ENDF/BVIII.0 + names.insert(std::pair("TS_H_of_Solid_Methane", + "h_s_ch4")); /// ENDF/BVIII.0 and ENDF/BVII.1 + names.insert(std::pair("TS_Aluminium_Metal", + "al_metal")); /// ENDF/BVIII.0 and ENDF/BVII.1 + names.insert(std::pair("TS_Al_of_Sapphir_SingleCrystal", + "al_al2o3_singlecrystal")); /// JEFFF.3.3 + names.insert(std::pair("TS_Ca_of_CaH2", "ca_cah2")); /// JEFFF.3.3 + names.insert(std::pair("TS_H_of_CaH2", "h_cah2")); /// JEFFF.3.3 + names.insert(std::pair("TS_H_of_Mesitylene_phaseII", + "h_mesitylene_phaseII")); /// JEFFF.3.3 + names.insert(std::pair("TS_O_of_Sapphir_SingleCrystal", + "o_al2o3_singlecrystal")); /// JEFFF.3.3 + names.insert(std::pair("TS_H_of_Toluene", "h_toluene")); /// JEFFF.3.3 + names.insert(std::pair("TS_Si30_of_SiO2_SingleCrystal", + "si30_sio2_singlecrystal")); /// JEFFF.3.3 + names.insert(std::pair("TS_Si29_of_SiO2_SingleCrystal", + "si29_sio2_singlecrystal")); /// JEFFF.3.3 + names.insert(std::pair("TS_Si28_of_SiO2_SingleCrystal", + "si28_sio2_singlecrystal")); /// JEFFF.3.3 + names.insert( + std::pair("TS_Mg26_of_Magnesium_Metal", "mg26_magnesium")); /// JEFFF.3.3 + names.insert( + std::pair("TS_Mg25_of_Magnesium_Metal", "mg25_magnesium")); /// JEFFF.3.3 + names.insert( + std::pair("TS_Mg24_of_Magnesium_Metal", "mg24_magnesium")); /// JEFFF.3.3 - + nist_names.insert(std::pair, G4String>( + std::pair("G4_BERYLLIUM_OXIDE", "Be"), "be_beo")); + nist_names.insert(std::pair, G4String>( + std::pair("G4_BERYLLIUM_OXIDE", "O"), "o_beo")); + nist_names.insert(std::pair, G4String>( + std::pair("G4_GRAPHITE", "C"), "graphite")); + nist_names.insert(std::pair, G4String>( + std::pair("G4_POLYETHYLENE", "H"), "h_polyethylene")); + nist_names.insert(std::pair, G4String>( + std::pair("G4_URANIUM_OXIDE", "O"), "o_uo2")); + nist_names.insert(std::pair, G4String>( + std::pair("G4_URANIUM_OXIDE", "U"), "u_uo2")); + nist_names.insert(std::pair, G4String>( + std::pair("G4_WATER", "H"), "h_water")); + // nist_names.insert ( std::pair < std::pair < G4String , G4String > , G4String > ( std::pair < + // G4String , G4String > ( "G4_BENZENE" , "H" ) , "benzen" ) ); nist_names.insert ( std::pair < + // std::pair < G4String , G4String > , G4String > ( std::pair < G4String , G4String > ( + // "G4_BENZENE" , "C" ) , "benzen" ) ); } G4ParticleHPThermalScatteringNames::~G4ParticleHPThermalScatteringNames() { -; + ; } -G4bool G4ParticleHPThermalScatteringNames::IsThisThermalElement( G4String aname) +G4bool G4ParticleHPThermalScatteringNames::IsThisThermalElement(G4String aname) { - G4bool result = false; - if ( names.find ( aname ) != names.end() ) result = true; - return result; + G4bool result = false; + if (names.find(aname) != names.end()) result = true; + return result; } -G4bool G4ParticleHPThermalScatteringNames::IsThisThermalElement( G4String material , G4String element ) +G4bool G4ParticleHPThermalScatteringNames::IsThisThermalElement(G4String material, G4String element) { - G4bool result = false; - if ( nist_names.find ( std::pair(material,element) ) != nist_names.end() ) result = true; - return result; + G4bool result = false; + if (nist_names.find(std::pair(material, element)) != nist_names.end()) + result = true; + return result; } - //Name of G4Element , Name of NDL file -void G4ParticleHPThermalScatteringNames::AddThermalElement ( G4String nameG4Element , G4String filename) -{ - if ( names.find ( nameG4Element ) == names.end() ) names.insert( std::pair( nameG4Element , filename ) ); +// Name of G4Element , Name of NDL file +void G4ParticleHPThermalScatteringNames::AddThermalElement(G4String nameG4Element, + G4String filename) +{ + if (names.find(nameG4Element) == names.end()) + names.insert(std::pair(nameG4Element, filename)); } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThreadLocalManager.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThreadLocalManager.cc index 487d44d4854..68090b226cc 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThreadLocalManager.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPThreadLocalManager.cc @@ -25,29 +25,19 @@ // // Class Description // Manager of NetronHP -// +// // 121031 First implementation done by T. Koi (SLAC/PPA) #include "G4ParticleHPThreadLocalManager.hh" -#include "G4ParticleHPReactionWhiteBoard.hh" + #include "G4HadronicException.hh" +#include "G4ParticleHPReactionWhiteBoard.hh" -G4ParticleHPThreadLocalManager::G4ParticleHPThreadLocalManager() -:RWB(0) -{ -; -} +G4ParticleHPThreadLocalManager::G4ParticleHPThreadLocalManager() = default; -G4ParticleHPThreadLocalManager::~G4ParticleHPThreadLocalManager() -{ -; -} - -G4ParticleHPThreadLocalManager:: -G4ParticleHPThreadLocalManager( const G4ParticleHPThreadLocalManager& ) -{ -; -} +G4ParticleHPThreadLocalManager::G4ParticleHPThreadLocalManager( + const G4ParticleHPThreadLocalManager&) +{} G4ParticleHPThreadLocalManager* G4ParticleHPThreadLocalManager::GetInstance() { @@ -57,28 +47,25 @@ G4ParticleHPThreadLocalManager* G4ParticleHPThreadLocalManager::GetInstance() void G4ParticleHPThreadLocalManager::OpenReactionWhiteBoard() { - if ( RWB ) - { - G4cout << "Warning: G4ParticleHPReactionWhiteBoard is tried doubly opening" << G4endl; - return; - } - - RWB = new G4ParticleHPReactionWhiteBoard(); + if (RWB != nullptr) { + G4cout << "Warning: G4ParticleHPReactionWhiteBoard is tried doubly opening" << G4endl; + return; + } + + RWB = new G4ParticleHPReactionWhiteBoard(); } -G4ParticleHPReactionWhiteBoard* -G4ParticleHPThreadLocalManager::GetReactionWhiteBoard() +G4ParticleHPReactionWhiteBoard* G4ParticleHPThreadLocalManager::GetReactionWhiteBoard() { - if ( !RWB ) - { - G4cout << "Warning: try to access G4ParticleHPReactionWhiteBoard before opening" << G4endl; - RWB = new G4ParticleHPReactionWhiteBoard(); - } - return RWB; + if (RWB == nullptr) { + G4cout << "Warning: try to access G4ParticleHPReactionWhiteBoard before opening" << G4endl; + RWB = new G4ParticleHPReactionWhiteBoard(); + } + return RWB; } void G4ParticleHPThreadLocalManager::CloseReactionWhiteBoard() -{ - delete RWB; - RWB=0; +{ + delete RWB; + RWB = nullptr; } diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPVector.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPVector.cc index 0c5c4d92fb2..24c69b8bf25 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPVector.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPVector.cc @@ -33,516 +33,534 @@ // P. Arce, June-2014 Conversion neutron_hp to particle_hp // #include "G4ParticleHPVector.hh" + #include "G4SystemOfUnits.hh" #include "G4Threading.hh" - // if the ranges do not match, constant extrapolation is used. - G4ParticleHPVector & operator + (G4ParticleHPVector & left, G4ParticleHPVector & right) - { - G4ParticleHPVector * result = new G4ParticleHPVector; - G4int j=0; - G4double x; - G4double y; - G4int running = 0; - for(G4int i=0; iSetData(running++, x, y); - j++; - } - //else if(std::abs((right.GetX(j)-left.GetX(i))/(left.GetX(i)+right.GetX(j)))>0.001) - else if( left.GetX(i)+right.GetX(j) == 0 - || std::abs((right.GetX(j)-left.GetX(i))/(left.GetX(i)+right.GetX(j))) > 0.001 ) - { - x = left.GetX(i); - y = left.GetY(i)+right.GetY(x); - result->SetData(running++, x, y); - break; - } - else - { - break; - } + if (right.GetX(j) < left.GetX(i) * 1.001) { + x = right.GetX(j); + y = right.GetY(j) + left.GetY(x); + result->SetData(running++, x, y); + j++; } - if(j==right.GetVectorLength()) + // else if(std::abs((right.GetX(j)-left.GetX(i))/(left.GetX(i)+right.GetX(j)))>0.001) + else if (left.GetX(i) + right.GetX(j) == 0 + || std::abs((right.GetX(j) - left.GetX(i)) / (left.GetX(i) + right.GetX(j))) > 0.001) { x = left.GetX(i); - y = left.GetY(i)+right.GetY(x); - result->SetData(running++, x, y); + y = left.GetY(i) + right.GetY(x); + result->SetData(running++, x, y); + break; + } + else { + break; } } - result->ThinOut(0.02); - return *result; + if (j == right.GetVectorLength()) { + x = left.GetX(i); + y = left.GetY(i) + right.GetY(x); + result->SetData(running++, x, y); + } } + result->ThinOut(0.02); + return *result; +} - G4ParticleHPVector::G4ParticleHPVector() - { - theData = new G4ParticleHPDataPoint[20]; - nPoints=20; - nEntries=0; - Verbose=0; - theIntegral=0; - totalIntegral=-1; - isFreed = 0; - maxValue = -DBL_MAX; - the15percentBorderCash = -DBL_MAX; - the50percentBorderCash = -DBL_MAX; - label = -DBL_MAX; - } - - G4ParticleHPVector::G4ParticleHPVector(G4int n) - { - nPoints=std::max(n, 20); - theData = new G4ParticleHPDataPoint[nPoints]; - nEntries=0; - Verbose=0; - theIntegral=0; - totalIntegral=-1; - isFreed = 0; - maxValue = -DBL_MAX; - the15percentBorderCash = -DBL_MAX; - the50percentBorderCash = -DBL_MAX; - label = -DBL_MAX; - } +G4ParticleHPVector::G4ParticleHPVector() +{ + theData = new G4ParticleHPDataPoint[20]; + nPoints = 20; + nEntries = 0; + Verbose = 0; + theIntegral = nullptr; + totalIntegral = -1; + isFreed = 0; + maxValue = -DBL_MAX; + the15percentBorderCash = -DBL_MAX; + the50percentBorderCash = -DBL_MAX; + label = -DBL_MAX; +} - G4ParticleHPVector::~G4ParticleHPVector() - { -// if(Verbose==1)G4cout <<"G4ParticleHPVector::~G4ParticleHPVector"<e) break; - if(theData[i].GetX() >= e) break; + else { + Hash(); } - G4int low = i-1; - G4int high = i; - if(i==0) + } + G4int min = theHash.GetMinIndex(e); + G4int i; + for (i = min; i < nEntries; i++) { + // if(theData[i].GetX()>e) break; + if (theData[i].GetX() >= e) break; + } + G4int low = i - 1; + G4int high = i; + if (i == 0) { + low = 0; + high = 1; + } + else if (i == nEntries) { + low = nEntries - 2; + high = nEntries - 1; + } + G4double y; + if (e < theData[nEntries - 1].GetX()) { + // Protect against doubled-up x values + // if( (theData[high].GetX()-theData[low].GetX())/theData[high].GetX() < 0.000001) + if (theData[high].GetX() != 0 + // 080808 TKDB + //&&( theData[high].GetX()-theData[low].GetX())/theData[high].GetX() < 0.000001) + && (std::abs((theData[high].GetX() - theData[low].GetX()) / theData[high].GetX()) + < 0.000001)) { - low = 0; - high = 1; + y = theData[low].GetY(); } - else if(i==nEntries) - { - low = nEntries-2; - high = nEntries-1; + else { + y = theInt.Interpolate(theManager.GetScheme(high), e, theData[low].GetX(), + theData[high].GetX(), theData[low].GetY(), theData[high].GetY()); } - G4double y; - if(e nEntries) + throw G4HadronicException(__FILE__, __LINE__, + "Skipped some index numbers in G4ParticleHPVector"); + if (i == nPoints) { + nPoints = static_cast(1.2 * nPoints); + auto buff = new G4ParticleHPDataPoint[nPoints]; + for (G4int j = 0; j < nEntries; j++) + buff[j] = theData[j]; + delete[] theData; + theData = buff; + } + if (i == nEntries) nEntries = i + 1; +} + +void G4ParticleHPVector::Merge(G4InterpolationScheme aScheme, G4double aValue, + G4ParticleHPVector* active, G4ParticleHPVector* passive) +{ + // interpolate between labels according to aScheme, cut at aValue, + // continue in unknown areas by substraction of the last difference. + + CleanUp(); + G4int s_tmp = 0, n = 0, m_tmp = 0; + G4ParticleHPVector* tmp; + G4int a = s_tmp, p = n, t; + while (a < active->GetVectorLength()) // Loop checking, 11.05.2015, T. Koi + { + if (active->GetEnergy(a) <= passive->GetEnergy(p)) { + G4double xa = active->GetEnergy(a); + G4double yy = theInt.Interpolate(aScheme, aValue, active->GetLabel(), passive->GetLabel(), + active->GetXsec(a), passive->GetXsec(xa)); + SetData(m_tmp, xa, yy); + theManager.AppendScheme(m_tmp, active->GetScheme(a)); + m_tmp++; + a++; + G4double xp = passive->GetEnergy(p); + // if( std::abs(std::abs(xp-xa)/xa)<0.0000001&&aGetVectorLength() ) + if (xa != 0 && std::abs(std::abs(xp - xa) / xa) < 0.0000001 && a < active->GetVectorLength()) { - y = theInt.Interpolate(theManager.GetScheme(high), e, - theData[low].GetX(), theData[high].GetX(), - theData[low].GetY(), theData[high].GetY()); + p++; + tmp = active; + t = a; + active = passive; + a = p; + passive = tmp; + p = t; } } - else - { - y=theData[nEntries-1].GetY(); + else { + tmp = active; + t = a; + active = passive; + a = p; + passive = tmp; + p = t; } - return y; } - void G4ParticleHPVector::Dump() + G4double deltaX = passive->GetXsec(GetEnergy(m_tmp - 1)) - GetXsec(m_tmp - 1); + while (p != passive->GetVectorLength() + && passive->GetEnergy(p) <= aValue) // Loop checking, 11.05.2015, T. Koi { - G4cout << nEntries<GetXsec(p) - deltaX; + if (anX > 0) { + // if(std::abs(GetEnergy(m-1)-passive->GetEnergy(p))/passive->GetEnergy(p)>0.0000001) + if (passive->GetEnergy(p) == 0 + || std::abs(GetEnergy(m_tmp - 1) - passive->GetEnergy(p)) / passive->GetEnergy(p) + > 0.0000001) + { + SetData(m_tmp, passive->GetEnergy(p), anX); + theManager.AppendScheme(m_tmp++, passive->GetScheme(p)); + } } - G4cout << G4endl; + p++; } - - void G4ParticleHPVector::Check(G4int i) - { - if(i>nEntries) throw G4HadronicException(__FILE__, __LINE__, "Skipped some index numbers in G4ParticleHPVector"); - if(i==nPoints) - { - nPoints = static_cast(1.2*nPoints); - G4ParticleHPDataPoint * buff = new G4ParticleHPDataPoint[nPoints]; - for (G4int j=0; jGetVectorLength() ) // Loop checking, 11.05.2015, T. Koi - { - if(active->GetEnergy(a) <= passive->GetEnergy(p)) - { - G4double xa = active->GetEnergy(a); - G4double yy = theInt.Interpolate(aScheme, aValue, active->GetLabel(), passive->GetLabel(), - active->GetXsec(a), passive->GetXsec(xa)); - SetData(m_tmp, xa, yy); - theManager.AppendScheme(m_tmp, active->GetScheme(a)); - m_tmp++; - a++; - G4double xp = passive->GetEnergy(p); - //if( std::abs(std::abs(xp-xa)/xa)<0.0000001&&aGetVectorLength() ) - if ( xa != 0 - && std::abs(std::abs(xp-xa)/xa) < 0.0000001 - && a < active->GetVectorLength() ) - { - p++; - tmp = active; t=a; - active = passive; a=p; - passive = tmp; p=t; +void G4ParticleHPVector::ThinOut(G4double precision) +{ + // anything in there? + if (GetVectorLength() == 0) return; + // make the new vector + auto aBuff = new G4ParticleHPDataPoint[nPoints]; + G4double x, x1, x2, y, y1, y2; + G4int count = 0, current = 2, start = 1; + + // First element always goes and is never tested. + aBuff[0] = theData[0]; + + // Find the rest + while (current < GetVectorLength()) // Loop checking, 11.05.2015, T. Koi + { + x1 = aBuff[count].GetX(); + y1 = aBuff[count].GetY(); + x2 = theData[current].GetX(); + y2 = theData[current].GetY(); + + if (x1 - x2 == 0) { + // Following block added for avoiding div 0 error on Release + G4FPE_DEBUG + for (G4int j = start; j < current; j++) { + y = (y2 + y1) / 2.; + if (std::abs(y - theData[j].GetY()) > precision * y) { + aBuff[++count] = theData[current - 1]; // for this one, everything was fine + start = current; // the next candidate + break; } - } else { - tmp = active; t=a; - active = passive; a=p; - passive = tmp; p=t; } } - - G4double deltaX = passive->GetXsec(GetEnergy(m_tmp-1)) - GetXsec(m_tmp-1); - while (p!=passive->GetVectorLength()&&passive->GetEnergy(p)<=aValue) // Loop checking, 11.05.2015, T. Koi - { - G4double anX; - anX = passive->GetXsec(p)-deltaX; - if(anX>0) - { - //if(std::abs(GetEnergy(m-1)-passive->GetEnergy(p))/passive->GetEnergy(p)>0.0000001) - if ( passive->GetEnergy(p) == 0 - || std::abs(GetEnergy(m_tmp-1)-passive->GetEnergy(p))/passive->GetEnergy(p) > 0.0000001 ) - { - SetData(m_tmp, passive->GetEnergy(p), anX); - theManager.AppendScheme(m_tmp++, passive->GetScheme(p)); + else { + for (G4int j = start; j < current; j++) { + x = theData[j].GetX(); + if (x1 - x2 == 0) + y = (y2 + y1) / 2.; + else + y = theInt.Lin(x, x1, x2, y1, y2); + if (std::abs(y - theData[j].GetY()) > precision * y) { + aBuff[++count] = theData[current - 1]; // for this one, everything was fine + start = current; // the next candidate + break; } } - p++; - } - // Rebuild the Hash; - if(theHash.Prepared()) - { - ReHash(); } + current++; } - - void G4ParticleHPVector::ThinOut(G4double precision) - { - // anything in there? - if(GetVectorLength()==0) return; - // make the new vector - G4ParticleHPDataPoint * aBuff = new G4ParticleHPDataPoint[nPoints]; - G4double x, x1, x2, y, y1, y2; - G4int count = 0, current = 2, start = 1; - - // First element always goes and is never tested. - aBuff[0] = theData[0]; - - // Find the rest - while(current < GetVectorLength()) // Loop checking, 11.05.2015, T. Koi - { - x1=aBuff[count].GetX(); - y1=aBuff[count].GetY(); - x2=theData[current].GetX(); - y2=theData[current].GetY(); + // The last one also always goes, and is never tested. + aBuff[++count] = theData[GetVectorLength() - 1]; + delete[] theData; + theData = aBuff; + nEntries = count + 1; - if ( x1-x2 == 0 ) { - //Following block added for avoiding div 0 error on Release + G4FPE_DEBUG - for ( G4int j=start; j precision*y ) { - aBuff[++count] = theData[current-1]; // for this one, everything was fine - start = current; // the next candidate - break; - } - } - } else { - for(G4int j=start; jprecision*y) - { - aBuff[++count] = theData[current-1]; // for this one, everything was fine - start = current; // the next candidate - break; - } - } - } - current++ ; - } - // The last one also always goes, and is never tested. - aBuff[++count] = theData[GetVectorLength()-1]; - delete [] theData; - theData = aBuff; - nEntries = count+1; - - // Rebuild the Hash; - if(theHash.Prepared()) - { - ReHash(); - } + // Rebuild the Hash; + if (theHash.Prepared()) { + ReHash(); } +} - G4bool G4ParticleHPVector::IsBlocked(G4double aX) - { - G4bool result = false; - std::vector::iterator i; - for(i=theBlocked.begin(); i!=theBlocked.end(); i++) - { - G4double aBlock = *i; - if(std::abs(aX-aBlock) < 0.1*MeV) - { - result = true; - theBlocked.erase(i); - break; - } +G4bool G4ParticleHPVector::IsBlocked(G4double aX) +{ + G4bool result = false; + std::vector::iterator i; + for (i = theBlocked.begin(); i != theBlocked.end(); i++) { + G4double aBlock = *i; + if (std::abs(aX - aBlock) < 0.1 * MeV) { + result = true; + theBlocked.erase(i); + break; } - return result; } + return result; +} - G4double G4ParticleHPVector::Sample() // Samples X according to distribution Y - { - G4double result=0.; - G4int j; - for(j=0; j icounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; - } -//080808 -/* - G4double rand; - G4double value, test, baseline; - baseline = theData[GetVectorLength()-1].GetX()-theData[0].GetX(); - do - { - value = baseline*G4UniformRand(); - value += theData[0].GetX(); - test = GetY(value)/maxValue; - rand = G4UniformRand(); - } - //while(test 0 ); - result = value; -*/ - G4double rand; - G4double value = 0., test; - G4int jcounter=0; - G4int jcounter_max=1024; - do - { - jcounter++; - if ( jcounter > jcounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; - } - rand = G4UniformRand(); - G4int ibin = -1; - for ( G4int i = 0 ; i < GetVectorLength() ; i++ ) - { - if ( rand < theIntegral[i] ) + G4int icounter = 0; + G4int icounter_max = 1024; + do { + icounter++; + if (icounter > icounter_max) { + G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " + << __FILE__ << "." << G4endl; + break; + } + // 080808 + /* + G4double rand; + G4double value, test, baseline; + baseline = theData[GetVectorLength()-1].GetX()-theData[0].GetX(); + do { - ibin = i; - break; + value = baseline*G4UniformRand(); + value += theData[0].GetX(); + test = GetY(value)/maxValue; + rand = G4UniformRand(); } - } - if ( ibin < 0 ) G4cout << "TKDB 080807 " << rand << G4endl; - // result - rand = G4UniformRand(); - G4double x1, x2; - if ( ibin == 0 ) - { - x1 = theData[ ibin ].GetX(); - value = x1; - break; - } - else - { - x1 = theData[ ibin-1 ].GetX(); - } - - x2 = theData[ ibin ].GetX(); - value = rand * ( x2 - x1 ) + x1; - //*********************************************************************** - /* - test = GetY ( value ) / std::max ( GetY( ibin-1 ) , GetY ( ibin ) ); - */ - //*********************************************************************** - //EMendoza - Always linear interpolation: - G4double y1=theData[ ibin-1 ].GetY(); - G4double y2=theData[ ibin ].GetY(); - G4double mval=(y2-y1)/(x2-x1); - G4double bval=y1-mval*x1; - test =(mval*value+bval)/std::max ( GetY( ibin-1 ) , GetY ( ibin ) ); - //*********************************************************************** + //while(test 0 ); + result = value; + */ + G4double rand; + G4double value = 0., test; + G4int jcounter = 0; + G4int jcounter_max = 1024; + do { + jcounter++; + if (jcounter > jcounter_max) { + G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " + << __FILE__ << "." << G4endl; + break; } - while ( G4UniformRand() > test ); // Loop checking, 11.05.2015, T. Koi - result = value; -//080807 - } - while(IsBlocked(result)); // Loop checking, 11.05.2015, T. Koi - } - return result; + rand = G4UniformRand(); + G4int ibin = -1; + for (G4int i = 0; i < GetVectorLength(); i++) { + if (rand < theIntegral[i]) { + ibin = i; + break; + } + } + if (ibin < 0) G4cout << "TKDB 080807 " << rand << G4endl; + // result + rand = G4UniformRand(); + G4double x1, x2; + if (ibin == 0) { + x1 = theData[ibin].GetX(); + value = x1; + break; + } + x1 = theData[ibin - 1].GetX(); + + x2 = theData[ibin].GetX(); + value = rand * (x2 - x1) + x1; + //*********************************************************************** + /* + test = GetY ( value ) / std::max ( GetY( ibin-1 ) , GetY ( ibin ) ); + */ + //*********************************************************************** + // EMendoza - Always linear interpolation: + G4double y1 = theData[ibin - 1].GetY(); + G4double y2 = theData[ibin].GetY(); + G4double mval = (y2 - y1) / (x2 - x1); + G4double bval = y1 - mval * x1; + test = (mval * value + bval) / std::max(GetY(ibin - 1), GetY(ibin)); + //*********************************************************************** + } while (G4UniformRand() > test); // Loop checking, 11.05.2015, T. Koi + result = value; + // 080807 + } while (IsBlocked(result)); // Loop checking, 11.05.2015, T. Koi } + return result; +} - G4double G4ParticleHPVector::Get15percentBorder() - { - if(the15percentBorderCash>-DBL_MAX/2.) return the15percentBorderCash; - G4double result; - if(GetVectorLength()==1) - { - result = theData[0].GetX(); - the15percentBorderCash = result; +G4double G4ParticleHPVector::Get15percentBorder() +{ + if (the15percentBorderCash > -DBL_MAX / 2.) return the15percentBorderCash; + G4double result; + if (GetVectorLength() == 1) { + result = theData[0].GetX(); + the15percentBorderCash = result; + } + else { + if (theIntegral == nullptr) { + IntegrateAndNormalise(); } - else - { - if(theIntegral==0) { IntegrateAndNormalise(); } - G4int i; - result = theData[GetVectorLength()-1].GetX(); - for(i=0;i0.15) - { - result = theData[std::min(i+1, GetVectorLength()-1)].GetX(); - the15percentBorderCash = result; - break; - } + G4int i; + result = theData[GetVectorLength() - 1].GetX(); + for (i = 0; i < GetVectorLength(); i++) { + if (theIntegral[i] / theIntegral[GetVectorLength() - 1] > 0.15) { + result = theData[std::min(i + 1, GetVectorLength() - 1)].GetX(); + the15percentBorderCash = result; + break; } - the15percentBorderCash = result; } - return result; + the15percentBorderCash = result; } + return result; +} - G4double G4ParticleHPVector::Get50percentBorder() - { - if(the50percentBorderCash>-DBL_MAX/2.) return the50percentBorderCash; - G4double result; - if(GetVectorLength()==1) - { - result = theData[0].GetX(); - the50percentBorderCash = result; +G4double G4ParticleHPVector::Get50percentBorder() +{ + if (the50percentBorderCash > -DBL_MAX / 2.) return the50percentBorderCash; + G4double result; + if (GetVectorLength() == 1) { + result = theData[0].GetX(); + the50percentBorderCash = result; + } + else { + if (theIntegral == nullptr) { + IntegrateAndNormalise(); } - else - { - if(theIntegral==0) { IntegrateAndNormalise(); } - G4int i; - G4double x = 0.5; - result = theData[GetVectorLength()-1].GetX(); - for(i=0;ix) - { - G4int it; - it = i; - if(it == GetVectorLength()-1) - { - result = theData[GetVectorLength()-1].GetX(); - } - else - { - G4double x1, x2, y1, y2; - x1 = theIntegral[i-1]/theIntegral[GetVectorLength()-1]; - x2 = theIntegral[i]/theIntegral[GetVectorLength()-1]; - y1 = theData[i-1].GetX(); - y2 = theData[i].GetX(); - result = theLin.Lin(x, x1, x2, y1, y2); - } - the50percentBorderCash = result; - break; - } + G4int i; + G4double x = 0.5; + result = theData[GetVectorLength() - 1].GetX(); + for (i = 0; i < GetVectorLength(); i++) { + if (theIntegral[i] / theIntegral[GetVectorLength() - 1] > x) { + G4int it; + it = i; + if (it == GetVectorLength() - 1) { + result = theData[GetVectorLength() - 1].GetX(); + } + else { + G4double x1, x2, y1, y2; + x1 = theIntegral[i - 1] / theIntegral[GetVectorLength() - 1]; + x2 = theIntegral[i] / theIntegral[GetVectorLength() - 1]; + y1 = theData[i - 1].GetX(); + y2 = theData[i].GetX(); + result = theLin.Lin(x, x1, x2, y1, y2); + } + the50percentBorderCash = result; + break; } - the50percentBorderCash = result; } - return result; + the50percentBorderCash = result; + } + return result; +} + +G4double G4ParticleHPVector::GetMaxY(G4double emin, G4double emax) +{ + G4double xsmax = 0.; + if (emin > emax || nEntries == 0) return xsmax; + if (emin >= theData[nEntries - 1].GetX()) { + xsmax = theData[nEntries - 1].GetY(); + return xsmax; } + if (emax <= theData[0].GetX()) { + xsmax = theData[0].GetY(); + return xsmax; + } + if (!theHash.Prepared() && !G4Threading::IsWorkerThread()) Hash(); + // Find the lowest index, low, where x(energy) is higher than emin + G4int i = theHash.GetMinIndex(emin); + for (; i < nEntries; ++i) { + if (theData[i].GetX() >= emin) break; + } + G4int low = i; + // Find the lowest index, high, where x(energy) is higher than emax + i = theHash.GetMinIndex(emax); + for (; i < nEntries; ++i) { + if (theData[i].GetX() >= emax) break; + } + G4int high = i; + xsmax = GetXsec(emin); // Set xsmax as low border + // Find the highest cross-section + for (i = low; i < high; ++i) { + if (xsmax < theData[i].GetY()) xsmax = theData[i].GetY(); + } + // Check if it is smaller than the high border (e.g. as for a monotonic increasing cross-section) + G4double highborder = GetXsec(emax); + if (xsmax < highborder) xsmax = highborder; + + if (xsmax == 0.) { + throw G4HadronicException(__FILE__, __LINE__, + "G4ParticleHPVector::GetMaxY : called " + "G4Nucleus::GetBiasedThermalNucleus for DBRC, xsmax==0."); + } + + return xsmax; +} diff --git a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPWattSpectrum.cc b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPWattSpectrum.cc index da0a8520e3b..7f438941148 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ParticleHPWattSpectrum.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ParticleHPWattSpectrum.cc @@ -30,29 +30,29 @@ // #include "G4ParticleHPWattSpectrum.hh" + #include "G4SystemOfUnits.hh" - G4double G4ParticleHPWattSpectrum::Sample(G4double anEnergy) - { - G4double a = theApar.GetY(anEnergy)*eV; - G4double b = theBpar.GetY(anEnergy)/eV; - G4double result=0.; - G4double random, cut, max; - max = std::sinh(std::sqrt(b*15.*a)); +G4double G4ParticleHPWattSpectrum::Sample(G4double anEnergy) +{ + G4double a = theApar.GetY(anEnergy) * eV; + G4double b = theBpar.GetY(anEnergy) / eV; + G4double result = 0.; + G4double random, cut, max; + max = std::sinh(std::sqrt(b * 15. * a)); - G4int icounter=0; - G4int icounter_max=1024; - do - { - icounter++; - if ( icounter > icounter_max ) { - G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " << __FILE__ << "." << G4endl; - break; - } - random = G4UniformRand(); - result = -a*G4Log(random); - cut = G4UniformRand(); + G4int icounter = 0; + G4int icounter_max = 1024; + do { + icounter++; + if (icounter > icounter_max) { + G4cout << "Loop-counter exceeded the threshold value at " << __LINE__ << "th line of " + << __FILE__ << "." << G4endl; + break; } - while(cut>std::sinh(std::sqrt(b*result))/max); // Loop checking, 11.05.2015, T. Koi - return result; - } + random = G4UniformRand(); + result = -a * G4Log(random); + cut = G4UniformRand(); + } while (cut > std::sinh(std::sqrt(b * result)) / max); // Loop checking, 11.05.2015, T. Koi + return result; +} diff --git a/source/processes/hadronic/models/particle_hp/src/G4ShiftedGaussian.cc b/source/processes/hadronic/models/particle_hp/src/G4ShiftedGaussian.cc index 2e1f180b102..f8541410951 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4ShiftedGaussian.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4ShiftedGaussian.cc @@ -29,105 +29,83 @@ * * Created on July 20, 2011, 11:55 AM */ - -#include - -#include "globals.hh" + +#include "G4ShiftedGaussian.hh" #include "G4FFGDebuggingMacros.hh" #include "G4FFGDefaultValues.hh" -#include "G4ShiftedGaussian.hh" +#include "globals.hh" + +#include -G4ShiftedGaussian:: -G4ShiftedGaussian( void ) +G4ShiftedGaussian::G4ShiftedGaussian() { - // Set the default verbosity - Verbosity_ = G4FFGDefaultValues::Verbosity; - - // Initialize the class - Initialize(); + // Set the default verbosity + Verbosity_ = G4FFGDefaultValues::Verbosity; + + // Initialize the class + Initialize(); } -G4ShiftedGaussian:: -G4ShiftedGaussian( G4int Verbosity ) +G4ShiftedGaussian::G4ShiftedGaussian(G4int Verbosity) { - // Set the default verbosity - Verbosity_ = Verbosity; - - // Initialize the class - Initialize(); + // Set the default verbosity + Verbosity_ = Verbosity; + + // Initialize the class + Initialize(); } -void G4ShiftedGaussian:: -Initialize( void ) -{ -G4FFG_FUNCTIONENTER__ +void G4ShiftedGaussian::Initialize(){G4FFG_FUNCTIONENTER__ - // Nothing here + // Nothing here -G4FFG_FUNCTIONLEAVE__ -} + G4FFG_FUNCTIONLEAVE__} -G4double G4ShiftedGaussian:: -G4FindShiftedMean( G4double RequestedMean, - G4double RequestedStdDev) +G4double G4ShiftedGaussian::G4FindShiftedMean(G4double RequestedMean, G4double RequestedStdDev) { -G4FFG_SAMPLING_FUNCTIONENTER__ - - std::size_t VectorSize = ShiftedMean_.size(); - - for(std::size_t i = 0; i < VectorSize; ++i) - { - if(ShiftedMean_[i].first.first == RequestedMean) - { - if(ShiftedMean_[i].first.second == RequestedStdDev) - { -G4FFG_SAMPLING_FUNCTIONLEAVE__ - return ShiftedMean_[i].second; - } - } + G4FFG_SAMPLING_FUNCTIONENTER__ + + std::size_t VectorSize = ShiftedMean_.size(); + + for (std::size_t i = 0; i < VectorSize; ++i) { + if (ShiftedMean_[i].first.first == RequestedMean) { + if (ShiftedMean_[i].first.second == RequestedStdDev) { + G4FFG_SAMPLING_FUNCTIONLEAVE__ + return ShiftedMean_[i].second; + } } + } -G4FFG_SAMPLING_FUNCTIONLEAVE__ - return 0.; + G4FFG_SAMPLING_FUNCTIONLEAVE__ + return 0.; } -void G4ShiftedGaussian:: -G4InsertShiftedMean( G4double ShiftedMean, - G4double RequestedMean, - G4double RequestedStdDev) +void G4ShiftedGaussian::G4InsertShiftedMean(G4double ShiftedMean, G4double RequestedMean, + G4double RequestedStdDev) { -G4FFG_SAMPLING_FUNCTIONENTER__ - - ShiftedMean_.push_back( - std::make_pair( - std::make_pair( - RequestedMean, - RequestedStdDev), - ShiftedMean - ) - ); - -G4FFG_SAMPLING_FUNCTIONLEAVE__ - return; + G4FFG_SAMPLING_FUNCTIONENTER__ + + ShiftedMean_.push_back( + std::make_pair(std::make_pair(RequestedMean, RequestedStdDev), ShiftedMean)); + + G4FFG_SAMPLING_FUNCTIONLEAVE__ + return; } -void G4ShiftedGaussian:: -G4SetVerbosity(G4int Verbosity) +void G4ShiftedGaussian::G4SetVerbosity(G4int Verbosity) { -G4FFG_SAMPLING_FUNCTIONENTER__ + G4FFG_SAMPLING_FUNCTIONENTER__ - Verbosity_ = Verbosity; + Verbosity_ = Verbosity; -G4FFG_SAMPLING_FUNCTIONLEAVE__ + G4FFG_SAMPLING_FUNCTIONLEAVE__ } -G4ShiftedGaussian:: -~G4ShiftedGaussian() +G4ShiftedGaussian::~G4ShiftedGaussian() { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - // Nothing here! -G4FFG_FUNCTIONLEAVE__ + // Nothing here! + G4FFG_FUNCTIONLEAVE__ } - diff --git a/source/processes/hadronic/models/particle_hp/src/G4WendtFissionFragmentGenerator.cc b/source/processes/hadronic/models/particle_hp/src/G4WendtFissionFragmentGenerator.cc index 3ed87a327d3..cbb48600ff3 100644 --- a/source/processes/hadronic/models/particle_hp/src/G4WendtFissionFragmentGenerator.cc +++ b/source/processes/hadronic/models/particle_hp/src/G4WendtFissionFragmentGenerator.cc @@ -30,23 +30,21 @@ * Created on June 21, 2013, 13:58 MST */ -#include "G4ParticleHPManager.hh" - -#include "G4FFGDebuggingMacros.hh" #include "G4WendtFissionFragmentGenerator.hh" +#include "G4FFGDebuggingMacros.hh" +#include "G4ParticleHPManager.hh" #include "G4PhysicsModelCatalog.hh" -G4ThreadLocal G4WendtFissionFragmentGenerator* G4WendtFissionFragmentGenerator::instance = NULL; +G4ThreadLocal G4WendtFissionFragmentGenerator* G4WendtFissionFragmentGenerator::instance = nullptr; -G4WendtFissionFragmentGenerator:: -G4WendtFissionFragmentGenerator() +G4WendtFissionFragmentGenerator::G4WendtFissionFragmentGenerator() { - // Set the default verbosity - Verbosity_ = G4FFGDefaultValues::Verbosity; + // Set the default verbosity + Verbosity_ = G4FFGDefaultValues::Verbosity; - // Set the creator model ID - secID = G4PhysicsModelCatalog::GetModelID( "model_NeutronHPFission" ); + // Set the creator model ID + secID = G4PhysicsModelCatalog::GetModelID("model_NeutronHPFission"); } /* G4WendtFissionFragmentGenerator* G4WendtFissionFragmentGenerator:: @@ -61,143 +59,138 @@ GetInstance() return instance; } */ -G4HadFinalState* G4WendtFissionFragmentGenerator:: -ApplyYourself(const G4HadProjectile& projectile, G4int Z, G4int A) +G4HadFinalState* G4WendtFissionFragmentGenerator::ApplyYourself(const G4HadProjectile& projectile, + G4int Z, G4int A) { -G4FFG_FUNCTIONENTER__ + G4FFG_FUNCTIONENTER__ - G4HadFinalState* finalState = NULL; - G4DynamicParticleVector* finalParticles = NULL; - G4int isotope; - std::map< const G4int, G4FissionFragmentGenerator* >::iterator fissionGenerator; + G4HadFinalState* finalState = nullptr; + G4DynamicParticleVector* finalParticles = nullptr; + G4int isotope; + std::map::iterator fissionGenerator; - // Look for the first available isomer since no M is provided for ApplyYourself() - for(unsigned int M = 0; M < 10; ++M) - { - isotope = G4FissionFragmentGenerator::G4MakeIsotopeCode(Z, A, M); - fissionGenerator = fissionIsotopes.find(isotope); - - if(fissionGenerator != fissionIsotopes.end()) - { - // Only generate particles if the generator was constructed - if(fissionGenerator->second) - { - finalParticles = fissionGenerator->second->G4GenerateFission(projectile); - } - - break; - } + // Look for the first available isomer since no M is provided for ApplyYourself() + for (unsigned int M = 0; M < 10; ++M) { + isotope = G4FissionFragmentGenerator::G4MakeIsotopeCode(Z, A, M); + fissionGenerator = fissionIsotopes.find(isotope); + + if (fissionGenerator != fissionIsotopes.end()) { + // Only generate particles if the generator was constructed + if (fissionGenerator->second != nullptr) { + finalParticles = fissionGenerator->second->G4GenerateFission(projectile); + } + + break; } + } - if(finalParticles) - { - finalState = new G4HadFinalState(); + if (finalParticles != nullptr) { + finalState = new G4HadFinalState(); - for(unsigned int i = 0; i < finalParticles->size(); ++i) - { - finalState->AddSecondary((*finalParticles)[i], secID); - } + for (auto& finalParticle : *finalParticles) { + finalState->AddSecondary(finalParticle, secID); } + } - //TK modified 131108 add next line - //TK 160112 fix for coverity #53481 - if ( finalState != NULL ) finalState->SetStatusChange(stopAndKill); -G4FFG_FUNCTIONLEAVE__ - return finalState; + // TK modified 131108 add next line + // TK 160112 fix for coverity #53481 + if (finalState != nullptr) finalState->SetStatusChange(stopAndKill); + G4FFG_FUNCTIONLEAVE__ + return finalState; } -void G4WendtFissionFragmentGenerator:: -InitializeANucleus(const G4int A, const G4int Z, const G4int M, const G4String& dataDirectory) +void G4WendtFissionFragmentGenerator::InitializeANucleus(const G4int A, const G4int Z, + const G4int M, + const G4String& dataDirectory) { -//G4FFG_FUNCTIONENTER__ + // G4FFG_FUNCTIONENTER__ + + const G4int isotope = G4FissionFragmentGenerator::G4MakeIsotopeCode(Z, A, M); + G4FFGEnumerations::MetaState metaState; + std::pair::iterator, bool> newIsotope; + + // Check to see if the isotope/isomer alread exists in the table + newIsotope = + fissionIsotopes.insert(std::make_pair(isotope, (G4FissionFragmentGenerator*)nullptr)); + + if (newIsotope.second || newIsotope.first->second == NULL) { + // Get the data file + G4bool flag; + G4ParticleHPDataUsed dataFile = fileNames.GetName(A, Z, M, dataDirectory, "FF", flag); + G4String dataFileName = dataFile.GetName(); + + // Check if the file exists, and do not create a fission object if it doesn't + // G4cout << "*** Z = " << Z << "\tA = " << A << "\t\t\t Directory: "<< dataDirectory << " DATA + // FILE: " << dataFileName << G4endl; + std::istringstream dataStream(std::ios::in); + G4ParticleHPManager::GetInstance()->GetDataStream(dataFileName, dataStream); + if (!dataStream) { + // G4FFG_FUNCTIONLEAVE__ + // G4cerr << "*** Stream error" << G4endl; + return; + } - const G4int isotope = G4FissionFragmentGenerator::G4MakeIsotopeCode(Z, A, M); - G4FFGEnumerations::MetaState metaState; - std::pair< std::map< const G4int, G4FissionFragmentGenerator* >::iterator, bool > newIsotope; + // Check the data file parameters + if (!flag + || (Z < 2.5 + && ((G4double)abs(dataFile.GetZ() - Z) > 0.001 + || (G4double)abs((G4int)dataFile.GetA() - A) > 0.0001))) + { + // G4cerr << "*** Something wrong with the data request.\tFlag :" << flag << G4endl; + // G4FFG_FUNCTIONLEAVE__ + return; + } - // Check to see if the isotope/isomer alread exists in the table - newIsotope = fissionIsotopes.insert(std::make_pair(isotope, (G4FissionFragmentGenerator*)NULL)); + auto const fissionGenerator = new G4FissionFragmentGenerator(); + newIsotope.first->second = fissionGenerator; - if(newIsotope.second || newIsotope.first->second == NULL) - { - // Get the data file - G4bool flag; - G4ParticleHPDataUsed dataFile = fileNames.GetName(A, Z, M, dataDirectory, "FF", flag); - G4String dataFileName = dataFile.GetName(); - - // Check if the file exists, and do not create a fission object if it doesn't - // G4cout << "*** Z = " << Z << "\tA = " << A << "\t\t\t Directory: "<< dataDirectory << " DATA FILE: " << dataFileName << G4endl; - std::istringstream dataStream(std::ios::in); - G4ParticleHPManager::GetInstance()->GetDataStream(dataFileName, dataStream); - if(!dataStream) - { - //G4FFG_FUNCTIONLEAVE__ - // G4cerr << "*** Stream error" << G4endl; - return; - } - - // Check the data file parameters - if(!flag - || ( Z < 2.5 && ( (G4double)abs( dataFile.GetZ() - Z ) > 0.001 || (G4double)abs( (G4int)dataFile.GetA() - A ) > 0.0001 ) ) ) - { - //G4cerr << "*** Something wrong with the data request.\tFlag :" << flag << G4endl; - //G4FFG_FUNCTIONLEAVE__ - return; - } - - G4FissionFragmentGenerator* const fissionGenerator = new G4FissionFragmentGenerator(); - newIsotope.first->second = fissionGenerator; - - switch(M) - { - case 1: - metaState = G4FFGEnumerations::META_1; - break; - - case 2: - metaState = G4FFGEnumerations::META_2; - break; - - default: - // TODO Display a warning message here indicating that an invalid metastate was passed in - // Fall through to the ground state by default - case 0: - metaState = G4FFGEnumerations::GROUND_STATE; - break; - } - - fissionGenerator->G4SetIsotope(isotope); - fissionGenerator->G4SetMetaState(metaState); - fissionGenerator->G4SetCause(G4FFGEnumerations::NEUTRON_INDUCED); - // TODO Load all the fission data and use the projectile energy instead - fissionGenerator->G4SetIncidentEnergy(G4FFGDefaultValues::ThermalNeutronEnergy); - fissionGenerator->G4SetYieldType(G4FFGEnumerations::INDEPENDENT); - fissionGenerator->G4SetSamplingScheme(G4FFGEnumerations::NORMAL); - - - // TODO Remove the need for forcing a load in the initialization phase, - // i.e. remove the ability to dynamically change the fission parameters - // that cause reload because a G4FissionFragmentGenerator class for - // each isotope should be loaded in the initialization phase - if(!fissionGenerator->InitializeFissionProductYieldClass(dataStream)) - { - // Delete if the initialization fails - delete fissionGenerator; - - fissionIsotopes.erase(newIsotope.first); - } + switch (M) { + case 1: + metaState = G4FFGEnumerations::META_1; + break; + + case 2: + metaState = G4FFGEnumerations::META_2; + break; + + default: + // TODO Display a warning message here indicating that an invalid metastate was passed in + // Fall through to the ground state by default + case 0: + metaState = G4FFGEnumerations::GROUND_STATE; + break; } -//G4FFG_FUNCTIONLEAVE__ + fissionGenerator->G4SetIsotope(isotope); + fissionGenerator->G4SetMetaState(metaState); + fissionGenerator->G4SetCause(G4FFGEnumerations::NEUTRON_INDUCED); + // TODO Load all the fission data and use the projectile energy instead + fissionGenerator->G4SetIncidentEnergy(G4FFGDefaultValues::ThermalNeutronEnergy); + fissionGenerator->G4SetYieldType(G4FFGEnumerations::INDEPENDENT); + fissionGenerator->G4SetSamplingScheme(G4FFGEnumerations::NORMAL); + + // TODO Remove the need for forcing a load in the initialization phase, + // i.e. remove the ability to dynamically change the fission parameters + // that cause reload because a G4FissionFragmentGenerator class for + // each isotope should be loaded in the initialization phase + if (!fissionGenerator->InitializeFissionProductYieldClass(dataStream)) { + // Delete if the initialization fails + delete fissionGenerator; + + fissionIsotopes.erase(newIsotope.first); + } + } + + // G4FFG_FUNCTIONLEAVE__ } -G4WendtFissionFragmentGenerator:: -~G4WendtFissionFragmentGenerator() +G4WendtFissionFragmentGenerator::~G4WendtFissionFragmentGenerator() { - std::map< const G4int, G4FissionFragmentGenerator* >::iterator fissionGenerator; + std::map::iterator fissionGenerator; - for(fissionGenerator = fissionIsotopes.begin(); fissionGenerator != fissionIsotopes.end(); ++fissionGenerator) - { - delete fissionGenerator->second; - } + for (fissionGenerator = fissionIsotopes.begin(); fissionGenerator != fissionIsotopes.end(); + ++fissionGenerator) + { + delete fissionGenerator->second; + } } diff --git a/source/processes/hadronic/models/parton_string/GNUmakefile b/source/processes/hadronic/models/parton_string/GNUmakefile deleted file mode 100644 index b62ba1ebea1..00000000000 --- a/source/processes/hadronic/models/parton_string/GNUmakefile +++ /dev/null @@ -1,23 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for chips library. HPW 20-Nov-99 -# -------------------------------------------------------------- - -name := G4had_string - - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - -SUBDIRS = diffraction -SUBDIRS += hadronization -SUBDIRS += management -SUBDIRS += qgsm - - -SUBLIBS = G4had_string_diff -SUBLIBS += G4had_string_frag -SUBLIBS += G4had_string_man -SUBLIBS += G4hadronic_qgstring - -include $(G4INSTALL)/config/globlib.gmk diff --git a/source/processes/hadronic/models/parton_string/diffraction/GNUmakefile b/source/processes/hadronic/models/parton_string/diffraction/GNUmakefile deleted file mode 100644 index ff1cfda60f6..00000000000 --- a/source/processes/hadronic/models/parton_string/diffraction/GNUmakefile +++ /dev/null @@ -1,39 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. JPW, 2003. -# ----------------------------------------------------------- - -name := G4had_string_diff - -ifndef G4INSTALL - G4INSTALL = ../../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/cross_sections/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/management/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/models/parton_string/hadronization/GNUmakefile b/source/processes/hadronic/models/parton_string/hadronization/GNUmakefile deleted file mode 100644 index 23957baee5b..00000000000 --- a/source/processes/hadronic/models/parton_string/hadronization/GNUmakefile +++ /dev/null @@ -1,36 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4had_string_frag - -ifndef G4INSTALL - G4INSTALL = ../../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/management/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/models/parton_string/management/GNUmakefile b/source/processes/hadronic/models/parton_string/management/GNUmakefile deleted file mode 100644 index ab92a9af6b6..00000000000 --- a/source/processes/hadronic/models/parton_string/management/GNUmakefile +++ /dev/null @@ -1,34 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. JPW 2003. -# ----------------------------------------------------------- - -name := G4had_string_man - -ifndef G4INSTALL - G4INSTALL = ../../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/models/parton_string/qgsm/GNUmakefile b/source/processes/hadronic/models/parton_string/qgsm/GNUmakefile deleted file mode 100644 index b274b4e59fa..00000000000 --- a/source/processes/hadronic/models/parton_string/qgsm/GNUmakefile +++ /dev/null @@ -1,36 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4hadronic_qgstring - -ifndef G4INSTALL - G4INSTALL = ../../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/management/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/models/parton_string/qgsm/History b/source/processes/hadronic/models/parton_string/qgsm/History index 52dc7898f86..de67015f0ce 100644 --- a/source/processes/hadronic/models/parton_string/qgsm/History +++ b/source/processes/hadronic/models/parton_string/qgsm/History @@ -6,7 +6,12 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-02-06 Gabriele Cosmo (hadr-qgsm-V11-00-04) +## 2023-03-09 Vladimir Ivanchenko (hadr-qgsm-V11-01-01) +- G4BaryonSplitter, G4MesonSplitter, G4QGSMSplittableHadron, G4SPBaryon - + attempt make code more uniform in order to reduce probability of warnings + observed in CMS, when LTO option is enabled + +## 2023-02-06 Gabriele Cosmo (hadr-qgsm-V11-01-00) - Fixed potential uninitialised variables in G4QGSMSplitableHadron::GetValenceQuarkFlavors(). ## 2022-10-07 Gabriele Cosmo (hadr-qgsm-V11-00-03) diff --git a/source/processes/hadronic/models/parton_string/qgsm/include/G4BaryonSplitter.hh b/source/processes/hadronic/models/parton_string/qgsm/include/G4BaryonSplitter.hh index b19006a8963..f26b7a18d50 100644 --- a/source/processes/hadronic/models/parton_string/qgsm/include/G4BaryonSplitter.hh +++ b/source/processes/hadronic/models/parton_string/qgsm/include/G4BaryonSplitter.hh @@ -37,8 +37,8 @@ class G4BaryonSplitter { public: G4BaryonSplitter(); - G4bool SplitBarion(G4int PDGCode, G4int* q_or_qqbar, G4int* qbar_or_qq); - G4bool FindDiquark(G4int PDGCode, G4int Quark, G4int* Diquark); + G4bool SplitBarion(G4int PDGCode, G4int & q_or_qqbar, G4int & qbar_or_qq); + G4bool FindDiquark(G4int PDGCode, G4int Quark, G4int & Diquark); const G4SPBaryon & GetSPBaryon(G4int PDGCode); private: diff --git a/source/processes/hadronic/models/parton_string/qgsm/include/G4MesonSplitter.hh b/source/processes/hadronic/models/parton_string/qgsm/include/G4MesonSplitter.hh index 15b2bb3db74..b56703333a4 100644 --- a/source/processes/hadronic/models/parton_string/qgsm/include/G4MesonSplitter.hh +++ b/source/processes/hadronic/models/parton_string/qgsm/include/G4MesonSplitter.hh @@ -36,9 +36,7 @@ class G4MesonSplitter { public: - G4bool SplitMeson(G4int PDGcode, G4int* aEnd, G4int* bEnd); - - private: + G4bool SplitMeson(G4int PDGcode, G4int & aEnd, G4int & bEnd); }; #endif diff --git a/source/processes/hadronic/models/parton_string/qgsm/src/G4BaryonSplitter.cc b/source/processes/hadronic/models/parton_string/qgsm/src/G4BaryonSplitter.cc index 64aa280d9f1..3e35310f1ec 100644 --- a/source/processes/hadronic/models/parton_string/qgsm/src/G4BaryonSplitter.cc +++ b/source/processes/hadronic/models/parton_string/qgsm/src/G4BaryonSplitter.cc @@ -23,7 +23,7 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// Split barion (antibarion) into quark and diquark (antidiquark and antiqaurk ) +// Split baryon (antibaryon) into quark and diquark (antidiquark and antiquark) // based on prototype, needs clean up of interfaces HPW Feb 1999 // Numbers verified and errors corrected, HPW Dec 1999 @@ -90,16 +90,16 @@ G4BaryonSplitter() } G4bool G4BaryonSplitter:: -SplitBarion(G4int PDGCode, G4int* q_or_qqbar, G4int* qbar_or_qq) +SplitBarion(G4int PDGCode, G4int& q_or_qqbar, G4int& qbar_or_qq) { const G4SPBaryon * aBaryon = theBaryons.GetBaryon(G4ParticleTable::GetParticleTable()->FindParticle(PDGCode)); - if(aBaryon==NULL) + if(aBaryon == nullptr) { - return FALSE; - } else { - aBaryon->SampleQuarkAndDiquark(*q_or_qqbar, *qbar_or_qq); - return TRUE; + return false; + } else { + aBaryon->SampleQuarkAndDiquark(q_or_qqbar, qbar_or_qq); + return true; } } @@ -113,13 +113,12 @@ GetSPBaryon(G4int PDGCode) // Find rest diquark in given barion after quark - antiquark annihilation -G4bool G4BaryonSplitter:: -FindDiquark(G4int PDGCode, G4int Quark, G4int* Diquark) +G4bool G4BaryonSplitter::FindDiquark(G4int PDGCode, G4int Quark, G4int& Diquark) { const G4SPBaryon * aBaryon = theBaryons.GetBaryon(G4ParticleTable::GetParticleTable()->FindParticle(PDGCode)); if(aBaryon) { - aBaryon->FindDiquark(Quark, *Diquark); + aBaryon->FindDiquark(Quark, Diquark); return true; } return false; diff --git a/source/processes/hadronic/models/parton_string/qgsm/src/G4MesonSplitter.cc b/source/processes/hadronic/models/parton_string/qgsm/src/G4MesonSplitter.cc index 5c0beb0422c..50d32483688 100644 --- a/source/processes/hadronic/models/parton_string/qgsm/src/G4MesonSplitter.cc +++ b/source/processes/hadronic/models/parton_string/qgsm/src/G4MesonSplitter.cc @@ -26,17 +26,16 @@ #include "G4MesonSplitter.hh" #include "Randomize.hh" -G4bool G4MesonSplitter::SplitMeson(G4int PDGcode, G4int* aEnd, G4int* bEnd) +G4bool G4MesonSplitter::SplitMeson(G4int PDGcode, G4int& aEnd, G4int& bEnd) { - G4bool result = true; G4int absPDGcode = std::abs(PDGcode); if (absPDGcode >= 1000) return false; - if(absPDGcode == 22) // For gamma -> 4 (u ubar) + 1 (d dbar) + if (absPDGcode == 22) // For gamma -> 4 (u ubar) + 1 (d dbar) { G4int it=1; if(G4UniformRand()<0.8) it++; - *aEnd = it; - *bEnd = -it; + aEnd = it; + bEnd = -it; } else { @@ -47,8 +46,8 @@ G4bool G4MesonSplitter::SplitMeson(G4int PDGcode, G4int* aEnd, G4int* bEnd) heavy *= anti; light *= -anti; if ( anti < 0) G4SwapObj(&heavy, &light); - *aEnd = heavy; - *bEnd = light; + aEnd = heavy; + bEnd = light; } - return result; + return true; } diff --git a/source/processes/hadronic/models/parton_string/qgsm/src/G4QGSMSplitableHadron.cc b/source/processes/hadronic/models/parton_string/qgsm/src/G4QGSMSplitableHadron.cc index 2e9b0ef6a12..2fe371e014b 100644 --- a/source/processes/hadronic/models/parton_string/qgsm/src/G4QGSMSplitableHadron.cc +++ b/source/processes/hadronic/models/parton_string/qgsm/src/G4QGSMSplitableHadron.cc @@ -230,11 +230,11 @@ void G4QGSMSplitableHadron::GetValenceQuarkFlavors(const G4ParticleDefinition * G4int HadronEncoding = aPart->GetPDGEncoding(); if (aPart->GetBaryonNumber() == 0) { - theMesonSplitter.SplitMeson(HadronEncoding, &aEnd, &bEnd); + theMesonSplitter.SplitMeson(HadronEncoding, aEnd, bEnd); } else { - theBaryonSplitter.SplitBarion(HadronEncoding, &aEnd, &bEnd); + theBaryonSplitter.SplitBarion(HadronEncoding, aEnd, bEnd); } Parton1 = new G4Parton(aEnd); diff --git a/source/processes/hadronic/models/pre_equilibrium/GNUmakefile b/source/processes/hadronic/models/pre_equilibrium/GNUmakefile deleted file mode 100644 index 3bf71e72e4d..00000000000 --- a/source/processes/hadronic/models/pre_equilibrium/GNUmakefile +++ /dev/null @@ -1,18 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for chips library. HPW 20-Nov-99 -# -------------------------------------------------------------- - -name := G4hadronic_preequ - - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - - -SUBDIRS = exciton_model - -SUBLIBS = G4had_preequ_exciton - - -include $(G4INSTALL)/config/globlib.gmk diff --git a/source/processes/hadronic/models/pre_equilibrium/exciton_model/GNUmakefile b/source/processes/hadronic/models/pre_equilibrium/exciton_model/GNUmakefile deleted file mode 100644 index fe98c4d033c..00000000000 --- a/source/processes/hadronic/models/pre_equilibrium/exciton_model/GNUmakefile +++ /dev/null @@ -1,46 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4had_preequ_exciton - -ifndef G4INSTALL - G4INSTALL = ../../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -ifdef PRECOMPOUND_TEST - CPPFLAGS += -DPRECOMPOUND_TEST -endif - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/models/qmd/GNUmakefile b/source/processes/hadronic/models/qmd/GNUmakefile deleted file mode 100644 index ef1cca06f15..00000000000 --- a/source/processes/hadronic/models/qmd/GNUmakefile +++ /dev/null @@ -1,50 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4hadronic_qmd - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \ - -I$(G4BASE)/processes/hadronic/models/binary_cascade/include \ - -I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/models/qmd/History b/source/processes/hadronic/models/qmd/History index d55159714e2..ede46deb3d1 100644 --- a/source/processes/hadronic/models/qmd/History +++ b/source/processes/hadronic/models/qmd/History @@ -6,6 +6,14 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-06-23 Gabriele Cosmo (hadr-qmd-V11-01-01) +- G4QMDMeanField: attempt to fix compilation warning on alma9/gcc-13.1 + and minor code cleanup. + +## 2023-04-04 Dennis Wright (hadr-qmd-V11-01-00) +- Fix coverity bug 20339: uninitialized variable ebini in + G4QMDGroundStateNucleus.cc + ## 2022-10-07 Gabriele Cosmo (hadr-qmd-V11-00-01) - Fixed compilation warning on Intel/icx compiler for variable set but not used in G4QMDMeanField. diff --git a/source/processes/hadronic/models/qmd/include/G4QMDMeanField.hh b/source/processes/hadronic/models/qmd/include/G4QMDMeanField.hh index 8d3725d365d..f158be603db 100644 --- a/source/processes/hadronic/models/qmd/include/G4QMDMeanField.hh +++ b/source/processes/hadronic/models/qmd/include/G4QMDMeanField.hh @@ -23,18 +23,10 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// ------------------------------------------------------------------- -// GEANT4 Class file +// G4QMDMeanField // -// -// File name: G4QMDMeanField.hh -// -// Author: Koi, Tatsumi (tkoi@slac.stanford.edu) -// -// Creation date: 29 March 2007 -// ----------------------------------------------------------------------------- -// 081120 Add Update - +// Author: Tatsumi Koi (SLAC), 29 March 2007 +// -------------------------------------------------------------------- #ifndef G4QMDMeanField_hh #define G4QMDMeanField_hh @@ -44,12 +36,13 @@ class G4QMDMeanField { public: + G4QMDMeanField(); - ~G4QMDMeanField(); + ~G4QMDMeanField() = default; void SetSystem ( G4QMDSystem* aSystem ); void SetNucleus ( G4QMDNucleus* aSystem ); - G4QMDSystem* GetSystem () {return system; }; + inline G4QMDSystem* GetSystem () { return system; } void Cal2BodyQuantities(); void Cal2BodyQuantities( G4int ); @@ -58,19 +51,19 @@ class G4QMDMeanField G4bool IsPauliBlocked( G4int ); - G4double GetTotalPotential(); + G4double GetTotalPotential(); G4double GetPotential( G4int ); void DoPropagation( G4double ); std::vector< G4QMDNucleus* > DoClusterJudgment(); - G4double GetRR2( G4int i , G4int j ) { return rr2[i][j]; }; + inline G4double GetRR2( G4int i , G4int j ) { return rr2[i][j]; } - G4double GetRHA( G4int i , G4int j ) { return rha[i][j]; }; - G4double GetRHE( G4int i , G4int j ) { return rhe[i][j]; }; - G4ThreeVector GetFFr( G4int i ) { return ffr[i]; }; - G4ThreeVector GetFFp( G4int i ) { return ffp[i]; }; + inline G4double GetRHA( G4int i , G4int j ) { return rha[i][j]; } + inline G4double GetRHE( G4int i , G4int j ) { return rhe[i][j]; } + inline G4ThreeVector GetFFr( G4int i ) { return ffr[i]; } + inline G4ThreeVector GetFFp( G4int i ) { return ffp[i]; } std::vector< G4double > GetLocalDensity(); std::vector< G4double > GetDepthOfPotential(); @@ -78,19 +71,23 @@ class G4QMDMeanField void Update(); private: + G4double calPauliBlockingFactor( G4int ); + private: + G4QMDSystem* system; - G4double rclds; + G4double rclds { 4.0 }; // distance for cluster judgement G4double hbc , rho0; - G4double epsx , epscl; + G4double epsx { -20.0 }; // gauss term + G4double epscl { 0.0001 }; // coulomb term G4double cpc; //G4int icoul, irelcr; - G4int irelcr; + G4int irelcr { 1 }; G4double gamm, c0, c3, cs, cl, wl; //G4double c0w, c3w, clw, c0sw; G4double c0w, clw, c0sw; @@ -113,8 +110,7 @@ class G4QMDMeanField std::vector < G4ThreeVector > ffr; std::vector < G4ThreeVector > ffp; - std::vector < G4double > rh3d; - + std::vector < G4double > rh3d; }; #endif diff --git a/source/processes/hadronic/models/qmd/src/G4QMDGroundStateNucleus.cc b/source/processes/hadronic/models/qmd/src/G4QMDGroundStateNucleus.cc index 56734b35b1d..ed0281c6011 100644 --- a/source/processes/hadronic/models/qmd/src/G4QMDGroundStateNucleus.cc +++ b/source/processes/hadronic/models/qmd/src/G4QMDGroundStateNucleus.cc @@ -69,18 +69,19 @@ G4QMDGroundStateNucleus::G4QMDGroundStateNucleus( G4int z , G4int a ) csp = parameters->Get_csp(); clp = parameters->Get_clp(); + ebini = 0.0; // Following 10 lines should be here, right before the line 90. // Otherwise, mass number cannot be conserved if the projectile or // the target are nucleons. //Nucleon primary or target case; if ( z == 1 && a == 1 ) { // Hydrogen Case or proton primary SetParticipant( new G4QMDParticipant( G4Proton::Proton() , G4ThreeVector( 0.0 ) , G4ThreeVector( 0.0 ) ) ); - ebini = 0.0; +// ebini = 0.0; return; } else if ( z == 0 && a == 1 ) { // Neutron primary SetParticipant( new G4QMDParticipant( G4Neutron::Neutron() , G4ThreeVector( 0.0 ) , G4ThreeVector( 0.0 ) ) ); - ebini = 0.0; +// ebini = 0.0; return; } diff --git a/source/processes/hadronic/models/qmd/src/G4QMDMeanField.cc b/source/processes/hadronic/models/qmd/src/G4QMDMeanField.cc index 0c8957895c4..2a3b82531cf 100644 --- a/source/processes/hadronic/models/qmd/src/G4QMDMeanField.cc +++ b/source/processes/hadronic/models/qmd/src/G4QMDMeanField.cc @@ -23,8 +23,10 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -// 081120 Add Update by T. Koi +// G4QMDMeanField implementation // +// Author: Tatsumi Koi (SLAC), 29 March 2007 +// -------------------------------------------------------------------- #include #include @@ -41,12 +43,7 @@ #include "Randomize.hh" G4QMDMeanField::G4QMDMeanField() -: rclds ( 4.0 ) // distance for cluster judgement -, epsx ( -20.0 ) // gauss term -, epscl ( 0.0001 ) // coulomb term -, irelcr ( 1 ) { - G4QMDParameters* parameters = G4QMDParameters::GetInstance(); wl = parameters->Get_wl(); cl = parameters->Get_cl(); @@ -62,35 +59,22 @@ G4QMDMeanField::G4QMDMeanField() c3 = parameters->Get_c3(); cs = parameters->Get_cs(); -// distance + // distance c0w = 1.0/4.0/wl; - //c3w = 1.0/4.0/wl; //no need c0sw = std::sqrt( c0w ); clw = 2.0 / std::sqrt ( 4.0 * pi * wl ); -// graduate + // graduate c0g = - c0 / ( 2.0 * wl ); c3g = - c3 / ( 4.0 * wl ) * gamm; csg = - cs / ( 2.0 * wl ); pag = gamm - 1; - system = NULL; // will be set through SetSystem method -} - - - -G4QMDMeanField::~G4QMDMeanField() -{ - ; + system = nullptr; // will be set through SetSystem() method } - - void G4QMDMeanField::SetSystem ( G4QMDSystem* aSystem ) { - - //std::cout << "QMDMeanField SetSystem" << std::endl; - system = aSystem; G4int n = system->GetTotalNumberOfParticipant(); @@ -109,7 +93,7 @@ void G4QMDMeanField::SetSystem ( G4QMDSystem* aSystem ) rhe.resize( n ); rhc.resize( n ); - for ( int i = 0 ; i < n ; i++ ) + for ( G4int i = 0 ; i < n ; ++i ) { rr2[i].resize( n ); pp2[i].resize( n ); @@ -119,7 +103,6 @@ void G4QMDMeanField::SetSystem ( G4QMDSystem* aSystem ) rhc[i].resize( n ); } - ffr.clear(); ffp.clear(); rh3d.clear(); @@ -129,39 +112,28 @@ void G4QMDMeanField::SetSystem ( G4QMDSystem* aSystem ) rh3d.resize( n ); Cal2BodyQuantities(); - } void G4QMDMeanField::SetNucleus ( G4QMDNucleus* aNucleus ) { - - //std::cout << "QMDMeanField SetNucleus" << std::endl; - SetSystem( aNucleus ); G4double totalPotential = GetTotalPotential(); aNucleus->SetTotalPotential( totalPotential ); - aNucleus->CalEnergyAndAngularMomentumInCM(); - } - - void G4QMDMeanField::Cal2BodyQuantities() { + if ( system->GetTotalNumberOfParticipant() < 2 ) { return; } - if ( system->GetTotalNumberOfParticipant() < 2 ) return; - - for ( G4int j = 1 ; j < system->GetTotalNumberOfParticipant() ; j++ ) + for ( G4int j = 1 ; j < system->GetTotalNumberOfParticipant() ; ++j ) { - G4ThreeVector rj = system->GetParticipant( j )->GetPosition(); G4LorentzVector p4j = system->GetParticipant( j )->Get4Momentum(); - for ( G4int i = 0 ; i < j ; i++ ) + for ( G4int i = 0 ; i < j ; ++i ) { - G4ThreeVector ri = system->GetParticipant( i )->GetPosition(); G4LorentzVector p4i = system->GetParticipant( i )->Get4Momentum(); @@ -174,14 +146,12 @@ void G4QMDMeanField::Cal2BodyQuantities() G4double eij = ( p4i + p4j ).e(); G4double rbrb = rij*bij; -// G4double bij2 = bij*bij; G4double rij2 = rij*rij; G4double pij2 = pij*pij; rbrb = irelcr * rbrb; G4double gamma2_ij = gammaij*gammaij; - rr2[i][j] = rij2 + gamma2_ij * rbrb*rbrb; rr2[j][i] = rr2[i][j]; @@ -190,12 +160,11 @@ void G4QMDMeanField::Cal2BodyQuantities() pp2[i][j] = pij2 + irelcr * ( - G4Pow::GetInstance()->powN ( p4i.e() - p4j.e() , 2 ) - + gamma2_ij * G4Pow::GetInstance()->powN ( ( ( p4i.m2() - p4j.m2() ) / eij ) , 2 ) ); - - + + gamma2_ij * G4Pow::GetInstance()->powN ( ( ( p4i.m2() - p4j.m2() ) + / eij ) , 2 ) ); pp2[j][i] = pp2[i][j]; -// Gauss term + // Gauss term G4double expa1 = - rr2[i][j] * c0w; @@ -212,11 +181,10 @@ void G4QMDMeanField::Cal2BodyQuantities() G4int ibry = system->GetParticipant(i)->GetBaryonNumber(); G4int jbry = system->GetParticipant(j)->GetBaryonNumber(); - rha[i][j] = ibry*jbry*rh1; rha[j][i] = rha[i][j]; -// Coulomb terms + // Coulomb terms G4double rrs2 = rr2[i][j] + epscl; G4double rrs = std::sqrt ( rrs2 ); @@ -226,94 +194,55 @@ void G4QMDMeanField::Cal2BodyQuantities() G4double xerf = 0.0; // T. K. add this protection. 5.8 is good enough for double - if ( rrs*c0sw < 5.8 ) { - //erf = G4RandStat::erf ( rrs*c0sw ); - //Restore to CLHEP for avoiding compilation error in MT - //erf = CLHEP::HepStat::erf ( rrs*c0sw ); - //Use cmath + if ( rrs*c0sw < 5.8 ) + { #if defined WIN32-VC xerf = CLHEP::HepStat::erf ( rrs*c0sw ); #else - xerf = erf ( rrs*c0sw ); + xerf = std::erf ( rrs*c0sw ); #endif - } else { + } + else + { xerf = 1.0; } G4double erfij = xerf/rrs; - rhe[i][j] = icharge*jcharge * erfij; - rhe[j][i] = rhe[i][j]; - rhc[i][j] = icharge*jcharge * ( - erfij + clw * rh1 ) / rrs2; - rhc[j][i] = rhc[i][j]; - } // i } // j } - - void G4QMDMeanField::Cal2BodyQuantities( G4int i ) { - - //std::cout << "Cal2BodyQuantities " << i << std::endl; - G4ThreeVector ri = system->GetParticipant( i )->GetPosition(); G4LorentzVector p4i = system->GetParticipant( i )->Get4Momentum(); - - for ( G4int j = 0 ; j < system->GetTotalNumberOfParticipant() ; j ++ ) + for ( G4int j = 0 ; j < system->GetTotalNumberOfParticipant() ; ++j ) { - if ( j == i ) continue; + if ( j == i ) { continue; } G4ThreeVector rj = system->GetParticipant( j )->GetPosition(); G4LorentzVector p4j = system->GetParticipant( j )->Get4Momentum(); - G4ThreeVector rij = ri - rj; - G4ThreeVector pij = (p4i - p4j).v(); - G4LorentzVector p4ij = p4i - p4j; - G4ThreeVector bij = ( p4i + p4j ).boostVector(); - G4double gammaij = ( p4i + p4j ).gamma(); - - G4double eij = ( p4i + p4j ).e(); - - G4double rbrb = rij*bij; -// G4double bij2 = bij*bij; - G4double rij2 = rij*rij; - G4double pij2 = pij*pij; - - rbrb = irelcr * rbrb; - G4double gamma2_ij = gammaij*gammaij; + G4ThreeVector rij = ri - rj; + G4ThreeVector pij = (p4i - p4j).v(); + G4LorentzVector p4ij = p4i - p4j; + G4ThreeVector bij = ( p4i + p4j ).boostVector(); + G4double gammaij = ( p4i + p4j ).gamma(); -/* - G4double rbrb = 0.0; - G4double beta2_ij = 0.0; - G4double rij2 = 0.0; - G4double pij2 = 0.0; + G4double eij = ( p4i + p4j ).e(); -// - G4LorentzVector p4ip4j = p4i + p4j; - G4double eij = p4ip4j.e(); - - G4ThreeVector r = ri - rj; - G4LorentzVector p4 = p4i - p4j; - - rbrb = r.x()*p4ip4j.x()/eij - + r.y()*p4ip4j.y()/eij - + r.z()*p4ip4j.z()/eij; - - beta2_ij = ( p4ip4j.x()*p4ip4j.x() + p4ip4j.y()*p4ip4j.y() + p4ip4j.z()*p4ip4j.z() ) / ( eij*eij ); - rij2 = r*r; - pij2 = p4.v()*p4.v(); + G4double rbrb = rij*bij; + G4double rij2 = rij*rij; + G4double pij2 = pij*pij; rbrb = irelcr * rbrb; - - G4double gamma2_ij = 1 / ( 1 - beta2_ij ); -*/ + G4double gamma2_ij = gammaij*gammaij; rr2[i][j] = rij2 + gamma2_ij * rbrb*rbrb; rr2[j][i] = rr2[i][j]; @@ -323,11 +252,11 @@ void G4QMDMeanField::Cal2BodyQuantities( G4int i ) pp2[i][j] = pij2 + irelcr * ( - G4Pow::GetInstance()->powN ( p4i.e() - p4j.e() , 2 ) - + gamma2_ij * G4Pow::GetInstance()->powN ( ( ( p4i.m2() - p4j.m2() ) / eij ) , 2 ) ); - + + gamma2_ij * G4Pow::GetInstance()->powN ( ( ( p4i.m2() - p4j.m2() ) + / eij ) , 2 ) ); pp2[j][i] = pp2[i][j]; -// Gauss term + // Gauss term G4double expa1 = - rr2[i][j] * c0w; @@ -344,11 +273,10 @@ void G4QMDMeanField::Cal2BodyQuantities( G4int i ) G4int ibry = system->GetParticipant(i)->GetBaryonNumber(); G4int jbry = system->GetParticipant(j)->GetBaryonNumber(); - rha[i][j] = ibry*jbry*rh1; rha[j][i] = rha[i][j]; -// Coulomb terms + // Coulomb terms G4double rrs2 = rr2[i][j] + epscl; G4double rrs = std::sqrt ( rrs2 ); @@ -358,81 +286,62 @@ void G4QMDMeanField::Cal2BodyQuantities( G4int i ) G4double xerf = 0.0; // T. K. add this protection. 5.8 is good enough for double - if ( rrs*c0sw < 5.8 ) { - //xerf = G4RandStat::erf ( rrs*c0sw ); - //Use cmath + if ( rrs*c0sw < 5.8 ) + { #if defined WIN32-VC xerf = CLHEP::HepStat::erf ( rrs*c0sw ); #else - xerf = erf ( rrs*c0sw ); + xerf = std::erf ( rrs*c0sw ); #endif - } else { + } + else + { xerf = 1.0; } G4double erfij = xerf/rrs; - rhe[i][j] = icharge*jcharge * erfij; - rhe[j][i] = rhe[i][j]; - -// G4double clw; - rhc[i][j] = icharge*jcharge * ( - erfij + clw * rh1 ) / rrs2; - - rhc[j][i] = rhc[i][j]; - + rhc[j][i] = rhc[i][j]; } - } - - void G4QMDMeanField::CalGraduate() { - ffr.resize( system->GetTotalNumberOfParticipant() ); ffp.resize( system->GetTotalNumberOfParticipant() ); rh3d.resize( system->GetTotalNumberOfParticipant() ); - for ( G4int i = 0 ; i < system->GetTotalNumberOfParticipant() ; i ++ ) + for ( G4int i = 0 ; i < system->GetTotalNumberOfParticipant() ; ++i ) { G4double rho3 = 0.0; - for ( G4int j = 0 ; j < system->GetTotalNumberOfParticipant() ; j ++ ) + for ( G4int j = 0 ; j < system->GetTotalNumberOfParticipant() ; ++j ) { rho3 += rha[j][i]; } rh3d[i] = G4Pow::GetInstance()->powA ( rho3 , pag ); } - - for ( G4int i = 0 ; i < system->GetTotalNumberOfParticipant() ; i ++ ) + for ( G4int i = 0 ; i < system->GetTotalNumberOfParticipant() ; ++i ) { - G4ThreeVector ri = system->GetParticipant( i )->GetPosition(); G4LorentzVector p4i = system->GetParticipant( i )->Get4Momentum(); G4ThreeVector betai = p4i.v()/p4i.e(); -// R-JQMD + // R-JQMD G4double Vi = GetPotential( i ); G4double p_zero = std::sqrt( p4i.e()*p4i.e() + 2*p4i.m()*Vi); G4ThreeVector betai_R = p4i.v()/p_zero; G4double mi_R = p4i.m()/p_zero; -// + ffr[i] = betai_R; ffp[i] = G4ThreeVector( 0.0 ); - if ( false ) - { - ffr[i] = betai; - mi_R = 1.0; - } - - for ( G4int j = 0 ; j < system->GetTotalNumberOfParticipant() ; j ++ ) + for ( G4int j = 0 ; j < system->GetTotalNumberOfParticipant() ; ++j ) { - G4ThreeVector rj = system->GetParticipant( j )->GetPosition(); G4LorentzVector p4j = system->GetParticipant( j )->Get4Momentum(); @@ -447,46 +356,23 @@ void G4QMDMeanField::CalGraduate() G4double ccpp = c0g * rha[j][i] + c3g * rha[j][i] * ( rh3d[j] + rh3d[i] ) + csg * rha[j][i] * jnuc * inuc - * ( 1. - 2. * std::abs( jcharge - icharge ) ) + * ( 1. - 2. * std::abs( jcharge - icharge ) ) + cl * rhc[j][i]; ccpp *= mi_R; -/* - G4cout << c0g << " " << c3g << " " << csg << " " << cl << G4endl; - G4cout << "ccpp " << i << " " << j << " " << ccpp << G4endl; - G4cout << "rha[j][i] " << rha[j][i] << G4endl; - G4cout << "rh3d " << rh3d[j] << " " << rh3d[i] << G4endl; - G4cout << "rhc[j][i] " << rhc[j][i] << G4endl; -*/ - G4double grbb = - rbij[j][i]; G4double ccrr = grbb * ccpp / eij; -/* - G4cout << "ccrr " << ccrr << G4endl; - G4cout << "grbb " << grbb << G4endl; -*/ - - G4ThreeVector rij = ri - rj; - G4ThreeVector betaij = ( p4i + p4j ).v()/eij; - + G4ThreeVector betaij = ( p4i + p4j ).v()/eij; G4ThreeVector cij = betaij - betai; ffr[i] = ffr[i] + 2*ccrr* ( rij + grbb*cij ); - ffp[i] = ffp[i] - 2*ccpp* ( rij + grbb*betaij ); - } } - - //std::cout << "gradu 0 " << ffr[0] << " " << ffp[0] << std::endl; - //std::cout << "gradu 1 " << ffr[1] << " " << ffp[1] << std::endl; - } - - G4double G4QMDMeanField::GetPotential( G4int i ) { G4int n = system->GetTotalNumberOfParticipant(); @@ -496,11 +382,10 @@ G4double G4QMDMeanField::GetPotential( G4int i ) G4double rhos = 0.0; G4double rhoc = 0.0; - G4int icharge = system->GetParticipant(i)->GetChargeInUnitOfEplus(); G4int inuc = system->GetParticipant(i)->GetNuc(); - for ( G4int j = 0 ; j < n ; j ++ ) + for ( G4int j = 0 ; j < n ; ++j ) { G4int jcharge = system->GetParticipant(j)->GetChargeInUnitOfEplus(); G4int jnuc = system->GetParticipant(j)->GetNuc(); @@ -508,38 +393,30 @@ G4double G4QMDMeanField::GetPotential( G4int i ) rhoa += rha[j][i]; rhoc += rhe[j][i]; rhos += rha[j][i] * jnuc * inuc - * ( 1 - 2 * std::abs ( jcharge - icharge ) ); + * ( 1 - 2 * std::abs ( jcharge - icharge ) ); } rho3 = G4Pow::GetInstance()->powA ( rhoa , gamm ); - G4double potential = c0 * rhoa - + c3 * rho3 - + cs * rhos - + cl * rhoc; - - return potential; + // return potential + return c0 * rhoa + c3 * rho3 + cs * rhos + cl * rhoc; } - - G4double G4QMDMeanField::GetTotalPotential() { - G4int n = system->GetTotalNumberOfParticipant(); std::vector < G4double > rhoa ( n , 0.0 ); std::vector < G4double > rho3 ( n , 0.0 ); std::vector < G4double > rhos ( n , 0.0 ); std::vector < G4double > rhoc ( n , 0.0 ); - - for ( G4int i = 0 ; i < n ; i ++ ) + for ( G4int i = 0 ; i < n ; ++i ) { G4int icharge = system->GetParticipant(i)->GetChargeInUnitOfEplus(); G4int inuc = system->GetParticipant(i)->GetNuc(); - for ( G4int j = 0 ; j < n ; j ++ ) + for ( G4int j = 0 ; j < n ; ++j ) { G4int jcharge = system->GetParticipant(j)->GetChargeInUnitOfEplus(); G4int jnuc = system->GetParticipant(j)->GetNuc(); @@ -547,77 +424,48 @@ G4double G4QMDMeanField::GetTotalPotential() rhoa[i] += rha[j][i]; rhoc[i] += rhe[j][i]; rhos[i] += rha[j][i] * jnuc * inuc - * ( 1 - 2 * std::abs ( jcharge - icharge ) ); + * ( 1 - 2 * std::abs ( jcharge - icharge ) ); } rho3[i] = G4Pow::GetInstance()->powA ( rhoa[i] , gamm ); } - G4double potential = c0 * std::accumulate( rhoa.begin() , rhoa.end() , 0.0 ) - + c3 * std::accumulate( rho3.begin() , rho3.end() , 0.0 ) - + cs * std::accumulate( rhos.begin() , rhos.end() , 0.0 ) - + cl * std::accumulate( rhoc.begin() , rhoc.end() , 0.0 ); - - return potential; - + // return potential + return c0 * std::accumulate( rhoa.cbegin() , rhoa.cend() , 0.0 ) + + c3 * std::accumulate( rho3.cbegin() , rho3.cend() , 0.0 ) + + cs * std::accumulate( rhos.cbegin() , rhos.cend() , 0.0 ) + + cl * std::accumulate( rhoc.cbegin() , rhoc.cend() , 0.0 ); } - - G4double G4QMDMeanField::calPauliBlockingFactor( G4int i ) { + // i is supposed beyond total number of Participant() G4double pf = 0.0; -// i is supposed beyond total number of Participant() G4int icharge = system->GetParticipant(i)->GetChargeInUnitOfEplus(); - for ( G4int j = 0 ; j < system->GetTotalNumberOfParticipant() ; j++ ) + for ( G4int j = 0 ; j < system->GetTotalNumberOfParticipant() ; ++j ) { - G4int jcharge = system->GetParticipant(j)->GetChargeInUnitOfEplus(); G4int jnuc = system->GetParticipant(j)->GetNuc(); if ( jcharge == icharge && jnuc == 1 ) { - -/* - G4cout << "Pauli i j " << i << " " << j << G4endl; - G4cout << "Pauli icharge " << icharge << G4endl; - G4cout << "Pauli jcharge " << jcharge << G4endl; -*/ - G4double expa = -rr2[i][j]*cpw; - - + G4double expa = -rr2[i][j]*cpw; if ( expa > epsx ) { expa = expa - pp2[i][j]*cph; -/* - G4cout << "Pauli cph " << cph << G4endl; - G4cout << "Pauli pp2 " << pp2[i][j] << G4endl; - G4cout << "Pauli expa " << expa << G4endl; - G4cout << "Pauli epsx " << epsx << G4endl; -*/ if ( expa > epsx ) { -// std::cout << "Pauli phase " << pf << std::endl; pf = pf + G4Exp ( expa ); } } } - } - - pf = ( pf - 1.0 ) * cpc; - - //std::cout << "Pauli pf " << pf << std::endl; - - return pf; - + return ( pf - 1.0 ) * cpc; } - - G4bool G4QMDMeanField::IsPauliBlocked( G4int i ) { G4bool result = false; @@ -626,17 +474,14 @@ G4bool G4QMDMeanField::IsPauliBlocked( G4int i ) { G4double pf = calPauliBlockingFactor( i ); G4double rand = G4UniformRand(); - if ( pf > rand ) result = true; + if ( pf > rand ) { result = true; } } return result; } - - void G4QMDMeanField::DoPropagation( G4double dt ) { - G4double cc2 = 1.0; G4double cc1 = 1.0 - cc2; G4double cc3 = 1.0 / 2.0 / cc2; @@ -649,13 +494,13 @@ void G4QMDMeanField::DoPropagation( G4double dt ) G4int n = system->GetTotalNumberOfParticipant(); -// 1st Step + // 1st Step std::vector< G4ThreeVector > f0r, f0p; f0r.resize( n ); f0p.resize( n ); - for ( G4int i = 0 ; i < n ; i++ ) + for ( G4int i = 0 ; i < n ; ++i ) { G4ThreeVector ri = system->GetParticipant( i )->GetPosition(); G4ThreeVector p3i = system->GetParticipant( i )->GetMomentum(); @@ -669,14 +514,15 @@ void G4QMDMeanField::DoPropagation( G4double dt ) system->GetParticipant( i )->SetPosition( ri ); system->GetParticipant( i )->SetMomentum( p3i ); -// we do not need set total momentum by ourselvs + // we do not need set total momentum by ourselves } -// 2nd Step + // 2nd Step + Cal2BodyQuantities(); CalGraduate(); - for ( G4int i = 0 ; i < n ; i++ ) + for ( G4int i = 0 ; i < n ; ++i ) { G4ThreeVector ri = system->GetParticipant( i )->GetPosition(); G4ThreeVector p3i = system->GetParticipant( i )->GetMomentum(); @@ -687,47 +533,41 @@ void G4QMDMeanField::DoPropagation( G4double dt ) system->GetParticipant( i )->SetPosition( ri ); system->GetParticipant( i )->SetMomentum( p3i ); -// we do not need set total momentum by ourselvs + // we do not need set total momentum by ourselves } - Cal2BodyQuantities(); - + Cal2BodyQuantities(); } - - std::vector< G4QMDNucleus* > G4QMDMeanField::DoClusterJudgment() { - - //std::cout << "MeanField DoClusterJudgemnt" << std::endl; - Cal2BodyQuantities(); - G4double cpf2 = G4Pow::GetInstance()->A23 ( 1.5 * pi*pi * G4Pow::GetInstance()->powA ( 4.0 * pi * wl , -1.5 ) ) * hbc * hbc; + G4double cpf2 = G4Pow::GetInstance()->A23 ( 1.5 * pi*pi * G4Pow::GetInstance()->powA ( 4.0 * pi * wl , -1.5 ) ) + * hbc * hbc; G4double rcc2 = rclds*rclds; G4int n = system->GetTotalNumberOfParticipant(); std::vector < G4double > rhoa; rhoa.resize ( n ); - for ( G4int i = 0 ; i < n ; i++ ) + for ( G4int i = 0 ; i < n ; ++i ) { - rhoa[i] = 0.0; + rhoa[i] = 0.0; - if ( system->GetParticipant( i )->GetBaryonNumber() == 1 ) - { - for ( G4int j = 0 ; j < n ; j++ ) - { + if ( system->GetParticipant( i )->GetBaryonNumber() == 1 ) + { + for ( G4int j = 0 ; j < n ; ++j ) + { if ( system->GetParticipant( j )->GetBaryonNumber() == 1 ) rhoa[i] += rha[i][j]; - } - } - - rhoa[i] = G4Pow::GetInstance()->A13 ( rhoa[i] + 1 ); + } + } + rhoa[i] = G4Pow::GetInstance()->A13 ( rhoa[i] + 1 ); } -// identification of the cluster + // identification of the cluster std::map < G4int , std::vector < G4int > > cluster_map; std::vector < G4bool > is_already_belong_some_cluster; @@ -746,221 +586,166 @@ std::vector< G4QMDNucleus* > G4QMDMeanField::DoClusterJudgment() std::vector < G4int > is_assigned_to ( n , -1 ); std::multimap < G4int , G4int > clusters; - for ( G4int i = 0 ; i < n ; i++ ) + for ( G4int i = 0 ; i < n ; ++i ) { - mascl[i] = 1; - num[i] = 1; - - is_already_belong_some_cluster[i] = false; + mascl[i] = 1; + num[i] = 1; + is_already_belong_some_cluster[i] = false; } - G4int ichek = 1; - - G4int id = 0; G4int cluster_id = -1; - for ( G4int i = 0 ; i < n-1 ; i++ ) + for ( G4int i = 0 ; i < n-1 ; ++i ) { + G4bool hasThisCompany = false; - G4bool hasThisCompany = false; -// Check only for bryons? -// std::cout << "Check Baryon " << i << std::endl; - - if ( system->GetParticipant( i )->GetBaryonNumber() == 1 ) - { - -// if ( is_already_belong_some_cluster[i] != true ) -// { - //G4int j1 = ichek + 1; - G4int j1 = i + 1; - for ( G4int j = j1 ; j < n ; j++ ) - { - + if ( system->GetParticipant( i )->GetBaryonNumber() == 1 ) + { + G4int j1 = i + 1; + for ( G4int j = j1 ; j < n ; ++j ) + { std::vector < G4int > cluster_participants; if ( system->GetParticipant( j )->GetBaryonNumber() == 1 ) { - G4double rdist2 = rr2[ i ][ j ]; - G4double pdist2 = pp2[ i ][ j ]; - //G4double rdist2 = rr2[ num[i] ][ num[j] ]; - //G4double pdist2 = pp2[ num[i] ][ num[j] ]; - G4double pcc2 = cpf2 - * ( rhoa[ i ] + rhoa[ j ] ) - * ( rhoa[ i ] + rhoa[ j ] ); - -// Check phase space: close enough? - if ( rdist2 < rcc2 && pdist2 < pcc2 ) - { - -/* - G4cout << "G4QMDRESULT " - << i << " " << j << " " << id << " " - << is_assigned_to [ i ] << " " << is_assigned_to [ j ] - << G4endl; -*/ - - if ( is_assigned_to [ j ] == -1 ) - { + G4double rdist2 = rr2[ i ][ j ]; + G4double pdist2 = pp2[ i ][ j ]; + G4double pcc2 = cpf2 + * ( rhoa[ i ] + rhoa[ j ] ) + * ( rhoa[ i ] + rhoa[ j ] ); + + // Check phase space: close enough? + if ( rdist2 < rcc2 && pdist2 < pcc2 ) + { + if ( is_assigned_to [ j ] == -1 ) + { if ( is_assigned_to [ i ] == -1 ) { - if ( clusters.size() != 0 ) - { - id = clusters.rbegin()->first + 1; - //std::cout << "id is increare " << id << std::endl; - } - else - { - id = 0; - } - clusters.insert ( std::multimap::value_type ( id , i ) ); - is_assigned_to [ i ] = id; - clusters.insert ( std::multimap::value_type ( id , j ) ); - is_assigned_to [ j ] = id; + if ( clusters.size() != 0 ) + { + id = clusters.rbegin()->first + 1; + } + else + { + id = 0; + } + clusters.insert ( std::multimap::value_type ( id , i ) ); + is_assigned_to [ i ] = id; + clusters.insert ( std::multimap::value_type ( id , j ) ); + is_assigned_to [ j ] = id; } else { - clusters.insert ( std::multimap::value_type ( is_assigned_to [ i ] , j ) ); - is_assigned_to [ j ] = is_assigned_to [ i ]; + clusters.insert ( std::multimap::value_type ( is_assigned_to [ i ] , j ) ); + is_assigned_to [ j ] = is_assigned_to [ i ]; } - } - else - { -// j is already belong to some cluester + } + else + { + // j is already belong to some cluster if ( is_assigned_to [ i ] == -1 ) { - clusters.insert ( std::multimap::value_type ( is_assigned_to [ j ] , i ) ); - is_assigned_to [ i ] = is_assigned_to [ j ]; + clusters.insert ( std::multimap::value_type ( is_assigned_to [ j ] , i ) ); + is_assigned_to [ i ] = is_assigned_to [ j ]; } else { -// i has companion - if ( is_assigned_to [ i ] != is_assigned_to [ j ] ) - { -// move companions to the cluster -// - //std::cout << "combine " << is_assigned_to [ i ] << " to " << is_assigned_to [ j ] << std::endl; - std::multimap< G4int , G4int > clusters_tmp; - G4int target_cluster_id; - if ( is_assigned_to [ i ] > is_assigned_to [ j ] ) - target_cluster_id = is_assigned_to [ i ]; + // i has companion + if ( is_assigned_to [ i ] != is_assigned_to [ j ] ) + { + // move companions to the cluster + std::multimap< G4int , G4int > clusters_tmp; + G4int target_cluster_id; + if ( is_assigned_to [ i ] > is_assigned_to [ j ] ) + { + target_cluster_id = is_assigned_to [ i ]; + } + else + { + target_cluster_id = is_assigned_to [ j ]; + } + for ( auto it = clusters.cbegin() ; it != clusters.cend() ; ++it ) + { + if ( it->first == target_cluster_id ) + { + is_assigned_to [ it->second ] = is_assigned_to [ j ]; + clusters_tmp.insert ( std::multimap::value_type ( is_assigned_to [ j ] , it->second ) ); + } else - target_cluster_id = is_assigned_to [ j ]; - - for ( std::multimap< G4int , G4int >::iterator it - = clusters.begin() ; it != clusters.end() ; it++ ) { - - //std::cout << it->first << " " << it->second << " " << target_cluster_id << std::endl; - if ( it->first == target_cluster_id ) - { - //std::cout << "move " << it->first << " " << it->second << std::endl; - is_assigned_to [ it->second ] = is_assigned_to [ j ]; - clusters_tmp.insert ( std::multimap::value_type ( is_assigned_to [ j ] , it->second ) ); - } - else - { - clusters_tmp.insert ( std::multimap::value_type ( it->first , it->second ) ); - } + clusters_tmp.insert ( std::multimap::value_type ( it->first , it->second ) ); } - - clusters = clusters_tmp; - //id = clusters.rbegin()->first; - //id = target_cluster_id; - //std::cout << "id " << id << std::endl; - } + } + clusters = clusters_tmp; + } } - } - - //std::cout << "combination " << i << " " << j << std::endl; - comb_map.insert( std::multimap::value_type ( i , j ) ); - cluster_participants.push_back ( j ); - + } + comb_map.insert( std::multimap::value_type ( i , j ) ); + cluster_participants.push_back ( j ); - if ( assign_map.find( cluster_id ) == assign_map.end() ) - { + if ( assign_map.find( cluster_id ) == assign_map.end() ) + { is_already_belong_some_cluster[i] = true; assign_map.insert ( std::multimap::value_type ( cluster_id , i ) ); hasThisCompany = true; - } - assign_map.insert ( std::multimap::value_type ( cluster_id , j ) ); - is_already_belong_some_cluster[j] = true; - - } - - if ( ichek == i ) - { - ichek++; - } + } + assign_map.insert ( std::multimap::value_type ( cluster_id , j ) ); + is_already_belong_some_cluster[j] = true; + } + + if ( ichek == i ) + { + ++ichek; + } } if ( cluster_participants.size() > 0 ) { -// cluster , participant - cluster_map.insert ( std::pair < G4int , std::vector < G4int > > ( i , cluster_participants ) ); + // cluster , participant + cluster_map.insert ( std::pair(i, cluster_participants) ); } - } -// } - } - if ( hasThisCompany == true ) cluster_id++; + } + } + if ( hasThisCompany == true ) { ++cluster_id; } } - //std::cout << " id " << id << std::endl; - -// sort -// Heavy cluster comes first -// size cluster_id + // sort + // Heavy cluster comes first + // size cluster_id std::multimap< G4int , G4int > sorted_cluster_map; - for ( G4int i = 0 ; i <= id ; i++ ) // << "<=" because id is highest cluster nubmer. + for ( G4int i = 0 ; i <= id ; ++i ) // << "<=" because id is highest cluster nubmer. { - - //std::cout << i << " cluster has " << clusters.count( i ) << " nucleons." << std::endl; - sorted_cluster_map.insert ( std::multimap::value_type ( (G4int) clusters.count( i ) , i ) ); - + sorted_cluster_map.insert ( std::multimap::value_type ( (G4int) clusters.count( i ) , i ) ); } - - -// create nucleus from devided clusters + + // create nucleus from divided clusters std::vector < G4QMDNucleus* > result; - for ( std::multimap < G4int , G4int >::reverse_iterator it - = sorted_cluster_map.rbegin() ; it != sorted_cluster_map.rend() ; it ++) + for ( auto it = sorted_cluster_map.crbegin(); it != sorted_cluster_map.crend(); ++it ) { - - //G4cout << "Add Participants to cluseter " << it->second << G4endl; - - if ( it->first != 0 ) - { - G4QMDNucleus* nucleus = new G4QMDNucleus(); - for ( std::multimap < G4int , G4int >::iterator itt - = clusters.begin() ; itt != clusters.end() ; itt ++) + if ( it->first != 0 ) + { + G4QMDNucleus* nucleus = new G4QMDNucleus(); + for ( auto itt = clusters.cbegin(); itt != clusters.cend(); ++itt ) + { + if ( it->second == itt->first ) { - - if ( it->second == itt->first ) - { - nucleus->SetParticipant( system->GetParticipant ( itt->second ) ); - //G4cout << "Add Participants " << itt->second << " " << system->GetParticipant ( itt->second )->GetPosition() << G4endl; - } - + nucleus->SetParticipant( system->GetParticipant ( itt->second ) ); } - result.push_back( nucleus ); - } - + } + result.push_back( nucleus ); + } } -// delete participants from current system - - for ( std::vector < G4QMDNucleus* > ::iterator it - = result.begin() ; it != result.end() ; it++ ) + // delete participants from current system + for ( auto it = result.cbegin(); it != result.cend(); ++it ) { - system->SubtractSystem ( *it ); + system->SubtractSystem ( *it ); } return result; - } - - void G4QMDMeanField::Update() { SetSystem( system ); diff --git a/source/processes/hadronic/models/quasi_elastic/GNUmakefile b/source/processes/hadronic/models/quasi_elastic/GNUmakefile deleted file mode 100644 index 4d43b7a5787..00000000000 --- a/source/processes/hadronic/models/quasi_elastic/GNUmakefile +++ /dev/null @@ -1,32 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4hadronic_quasi_elastic - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)//materials/include/ \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/models/radioactive_decay/GNUmakefile b/source/processes/hadronic/models/radioactive_decay/GNUmakefile deleted file mode 100644 index b21e038e938..00000000000 --- a/source/processes/hadronic/models/radioactive_decay/GNUmakefile +++ /dev/null @@ -1,40 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4hadronic_radioactivedecay - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/electromagnetic/lowenergy/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/hadronic/management/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/fission/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/hadronic/models/radioactive_decay/History b/source/processes/hadronic/models/radioactive_decay/History index 42bfea9b100..c905eb8576a 100644 --- a/source/processes/hadronic/models/radioactive_decay/History +++ b/source/processes/hadronic/models/radioactive_decay/History @@ -6,6 +6,22 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-06-17 Vladimir Ivantchenko (radioactive_decay-V11-01-02) +- G4RadioactiveDecay, G4BetaSpectrumSampler - fixed Coverity reports on + non-initialized class members + +## 2023-03-24 Dennis Wright (radioactive_decay-V11-01-01) +- Fix coverity bug 104867: uninitialized integers in G4BetaSpectrumSampler.cc + Do initialization in ctor. + +## 2023-03-24 Dennis Wright (radioactive_decay-V11-01-00) +- Fix of bug #2367: stairstep beta decay spectrum + Create new class G4BetaSpectrumSampler to sample a sloped distribution + instead of a flat one. Add this to sources.cmake. + Change G4BetaMinusDecay and G4BetaPlusDecay to use the above sampler. + Add protection against very large arguments in std::exp within + G4BetaDecayCorrections::ModSquared + ## 2022-11-26 Gabriele Cosmo (radioactive_decay-V11-00-10) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/processes/hadronic/models/radioactive_decay/include/G4BetaDecayCorrections.hh b/source/processes/hadronic/models/radioactive_decay/include/G4BetaDecayCorrections.hh index 6fd6371b4cb..5a0d4e983c6 100644 --- a/source/processes/hadronic/models/radioactive_decay/include/G4BetaDecayCorrections.hh +++ b/source/processes/hadronic/models/radioactive_decay/include/G4BetaDecayCorrections.hh @@ -46,7 +46,7 @@ class G4BetaDecayCorrections const G4double& p_e, const G4double& e_nu); private: - G4double ModSquared(const G4double& x, const G4double& y); + G4double ModSquared(const G4double& x, G4double y); G4double Gamma(const G4double& arg); const G4int Z; @@ -55,6 +55,7 @@ class G4BetaDecayCorrections G4double Rnuc; // Nuclear radius G4double V0; // Electron screening potential G4double gamma0; + G4double imMax; // largest allowed im argument of ModSquared G4double gc[6]; // Real gamma function polynomial coefficients }; diff --git a/source/processes/hadronic/models/radioactive_decay/include/G4BetaMinusDecay.hh b/source/processes/hadronic/models/radioactive_decay/include/G4BetaMinusDecay.hh index 785a4e70105..8adce6fbf86 100644 --- a/source/processes/hadronic/models/radioactive_decay/include/G4BetaMinusDecay.hh +++ b/source/processes/hadronic/models/radioactive_decay/include/G4BetaMinusDecay.hh @@ -38,7 +38,7 @@ #include "G4NuclearDecay.hh" #include "G4BetaDecayType.hh" -#include "Randomize.hh" +#include "G4BetaSpectrumSampler.hh" class G4BetaMinusDecay : public G4NuclearDecay @@ -60,7 +60,7 @@ class G4BetaMinusDecay : public G4NuclearDecay const G4BetaDecayType& type); const G4double endpointEnergy; - G4RandGeneral* spectrumSampler; + G4BetaSpectrumSampler* betaSampler; }; #endif diff --git a/source/processes/hadronic/models/radioactive_decay/include/G4BetaPlusDecay.hh b/source/processes/hadronic/models/radioactive_decay/include/G4BetaPlusDecay.hh index cab1737060d..f72e31d22a7 100644 --- a/source/processes/hadronic/models/radioactive_decay/include/G4BetaPlusDecay.hh +++ b/source/processes/hadronic/models/radioactive_decay/include/G4BetaPlusDecay.hh @@ -38,7 +38,7 @@ #include "G4NuclearDecay.hh" #include "G4BetaDecayType.hh" -#include "Randomize.hh" +#include "G4BetaSpectrumSampler.hh" class G4BetaPlusDecay : public G4NuclearDecay @@ -60,7 +60,7 @@ class G4BetaPlusDecay : public G4NuclearDecay const G4BetaDecayType& type); const G4double endpointEnergy; - G4RandGeneral* spectrumSampler; + G4BetaSpectrumSampler* betaSampler; }; #endif diff --git a/source/processes/hadronic/models/radioactive_decay/include/G4BetaSpectrumSampler.hh b/source/processes/hadronic/models/radioactive_decay/include/G4BetaSpectrumSampler.hh new file mode 100644 index 00000000000..4f94e74fd21 --- /dev/null +++ b/source/processes/hadronic/models/radioactive_decay/include/G4BetaSpectrumSampler.hh @@ -0,0 +1,67 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +//////////////////////////////////////////////////////////////////////////////// +// // +// File: G4BetaSpectrumSampler.hh // +// Author: D.H. Wright // +// Date: 21 November 2022 // +// Description: samples a spectrum which is a piece-wise linear function of // +// energy. The CDF is calculated by trapezoidal integration // +// and within bins the line y = mx + b is sampled. // +// // +//////////////////////////////////////////////////////////////////////////////// + +#ifndef G4BetaSpectrumSampler_h +#define G4BetaSpectrumSampler_h 1 + +#include "globals.hh" +#include "Randomize.hh" +#include + +class G4BetaSpectrumSampler +{ + public: + G4BetaSpectrumSampler(const G4double* aPDF, G4int pdfSize, G4double e); + + ~G4BetaSpectrumSampler() = default; + + G4double shoot(); + + private: + G4double sampleSlopedLine(); // Method to sample under sloped line + + std::vector pdf; // Spectrum shape + std::vector cdf; // Cumulative distribution function + + G4double eEnd; // Endpoint energy of spectrum + G4int nBins; // Number of lower bin edges in spectrum + G4int lowerBinEdge; // Index of lower bin edge + G4int upperBinEdge; // Index of upper bin edge + G4double ylower{0.0}; // Value at lower bin edge + G4double yupper{0.0}; // Value at upper bin edge +}; +#endif + diff --git a/source/processes/hadronic/models/radioactive_decay/include/G4RadioactiveDecay.hh b/source/processes/hadronic/models/radioactive_decay/include/G4RadioactiveDecay.hh index 58679921f4c..4b67c35d144 100644 --- a/source/processes/hadronic/models/radioactive_decay/include/G4RadioactiveDecay.hh +++ b/source/processes/hadronic/models/radioactive_decay/include/G4RadioactiveDecay.hh @@ -216,16 +216,10 @@ class G4RadioactiveDecay : public G4VRestDiscreteProcess std::map theUserRadioactiveDataFiles; //The last RadDecayMode - G4RadioactiveDecayMode theRadDecayMode; - -// // Library of decay tables -// DecayTableMap* dkmap; -// #ifdef G4MULTITHREADED -// static DecayTableMap* master_dkmap; -// #endif + G4RadioactiveDecayMode theRadDecayMode{G4RadioactiveDecayMode::IT}; // Remainder of life time at rest - G4double fRemainderLifeTime; + G4double fRemainderLifeTime{0.0}; G4int verboseLevel; // Ignore radioactive decays at rest of nuclides happening after this (very long) time threshold diff --git a/source/processes/hadronic/models/radioactive_decay/sources.cmake b/source/processes/hadronic/models/radioactive_decay/sources.cmake index aeacd5185fa..142e77d52f2 100644 --- a/source/processes/hadronic/models/radioactive_decay/sources.cmake +++ b/source/processes/hadronic/models/radioactive_decay/sources.cmake @@ -9,6 +9,7 @@ geant4_add_module(G4hadronic_radioactivedecay G4BetaDecayType.hh G4BetaMinusDecay.hh G4BetaPlusDecay.hh + G4BetaSpectrumSampler.hh G4ECDecay.hh G4ITDecay.hh G4SFDecay.hh @@ -34,6 +35,7 @@ geant4_add_module(G4hadronic_radioactivedecay G4BetaDecayType.cc G4BetaMinusDecay.cc G4BetaPlusDecay.cc + G4BetaSpectrumSampler.cc G4ECDecay.cc G4ITDecay.cc G4SFDecay.cc diff --git a/source/processes/hadronic/models/radioactive_decay/src/G4BetaDecayCorrections.cc b/source/processes/hadronic/models/radioactive_decay/src/G4BetaDecayCorrections.cc index ee7a37caf60..a88bcd388db 100644 --- a/source/processes/hadronic/models/radioactive_decay/src/G4BetaDecayCorrections.cc +++ b/source/processes/hadronic/models/radioactive_decay/src/G4BetaDecayCorrections.cc @@ -28,6 +28,7 @@ #include "G4PhysicalConstants.hh" #include "G4BetaDecayType.hh" #include "G4BetaDecayCorrections.hh" +#include "G4Pow.hh" G4BetaDecayCorrections::G4BetaDecayCorrections(const G4int theZ, const G4int theA) : Z(theZ), A(theA) @@ -36,14 +37,20 @@ G4BetaDecayCorrections::G4BetaDecayCorrections(const G4int theZ, const G4int the alphaZ = fine_structure_const*Z; // Nuclear radius in units of hbar/m_e/c - Rnuc = 0.5*fine_structure_const*std::pow(A, 0.33333); + G4double a13 = G4Pow::GetInstance()->Z13(A); + Rnuc = 0.5*fine_structure_const*a13; // Electron screening potential in units of electron mass V0 = 1.13*fine_structure_const*fine_structure_const - *std::pow(std::abs(Z), 1.33333); + *std::pow(std::abs(Z), 4./3.); gamma0 = std::sqrt(1. - alphaZ*alphaZ); + // Largest allowed value of im argument in ModSquared +// imMax = std::log(DBL_MAX)/pi; + imMax = 200.; // actual value = 225.931, but use 200 to be safe +// G4cout << " imMax = " << imMax << G4endl; + // Coefficients for gamma function with real argument gc[0] = -0.1010678; gc[1] = 0.4245549; @@ -86,13 +93,14 @@ G4double G4BetaDecayCorrections::FermiFunction(const G4double& W) G4double -G4BetaDecayCorrections::ModSquared(const G4double& re, const G4double& im) +G4BetaDecayCorrections::ModSquared(const G4double& re, G4double im) { // Calculate the squared modulus of the Gamma function // with complex argument (re, im) using approximation B // of Wilkinson, Nucl. Instr. & Meth. 82, 122 (1970). // Here, choose N = 1 in Wilkinson's notation for approximation B + im = std::max(std::min(im, imMax), -imMax); G4double factor1 = std::pow( (1+re)*(1+re) + im*im, re+0.5); G4double factor2 = std::exp(2*im * std::atan(im/(1+re))); G4double factor3 = std::exp(2*(1+re)); @@ -238,6 +246,7 @@ G4BetaDecayCorrections::ShapeFactor(const G4BetaDecayType& bdt, "Transition not yet implemented - using allowed shape"); break; } + return factor; } diff --git a/source/processes/hadronic/models/radioactive_decay/src/G4BetaMinusDecay.cc b/source/processes/hadronic/models/radioactive_decay/src/G4BetaMinusDecay.cc index 63cb2299ff2..4acf080e1a7 100644 --- a/source/processes/hadronic/models/radioactive_decay/src/G4BetaMinusDecay.cc +++ b/source/processes/hadronic/models/radioactive_decay/src/G4BetaMinusDecay.cc @@ -66,7 +66,7 @@ G4BetaMinusDecay::G4BetaMinusDecay(const G4ParticleDefinition* theParentNucleus, G4BetaMinusDecay::~G4BetaMinusDecay() { - delete spectrumSampler; + delete betaSampler; } @@ -87,9 +87,9 @@ G4DecayProducts* G4BetaMinusDecay::DecayIt(G4double) G4DynamicParticle parentParticle(G4MT_parent, G4ThreeVector(0,0,0), 0.0); G4DecayProducts* products = new G4DecayProducts(parentParticle); - if (spectrumSampler) { + if (betaSampler) { // Electron, neutrino and daughter nucleus energies - G4double eKE = endpointEnergy*spectrumSampler->shoot(G4Random::getTheEngine() ); + G4double eKE = endpointEnergy*betaSampler->shoot(); G4double eMomentum = std::sqrt(eKE*(eKE + 2.*eMass) ); G4double cosThetaENu = 2.*G4UniformRand() - 1.; @@ -166,30 +166,30 @@ G4BetaMinusDecay::SetUpBetaSpectrumSampler(const G4int& daughterZ, { G4double e0 = endpointEnergy/CLHEP::electron_mass_c2; G4BetaDecayCorrections corrections(daughterZ, daughterA); - spectrumSampler = 0; + betaSampler = 0; if (e0 > 0) { // Array to store spectrum pdf - G4int npti = 100; + G4int npti = 101; G4double* pdf = new G4double[npti]; - G4double e; // Total electron energy in units of electron mass + G4double ex; G4double p; // Electron momentum in units of electron mass G4double f; // Spectral shape function - for (G4int ptn = 0; ptn < npti; ptn++) { - // Calculate simple phase space - e = 1. + e0*(G4double(ptn) + 0.5)/G4double(npti); - p = std::sqrt(e*e - 1.); - f = p*e*(e0 - e + 1.)*(e0 - e + 1.); + for (G4int i = 0; i < npti; i++) { + ex = e0*std::max(1.e-6, G4double(i)/G4double(npti-1) ); + p = std::sqrt(ex*(ex+2.) ); + f = p*(1. + ex)*(e0 - ex)*(e0 - ex); // Apply Fermi factor to get allowed shape - f *= corrections.FermiFunction(e); + f *= corrections.FermiFunction(1. + ex); // Apply shape factor for forbidden transitions - f *= corrections.ShapeFactor(betaType, p, e0-e+1.); - pdf[ptn] = f; + f *= corrections.ShapeFactor(betaType, p, e0-ex); + pdf[i] = f; } - spectrumSampler = new G4RandGeneral(pdf, npti); + betaSampler = new G4BetaSpectrumSampler(pdf, npti, e0); + delete[] pdf; } } diff --git a/source/processes/hadronic/models/radioactive_decay/src/G4BetaPlusDecay.cc b/source/processes/hadronic/models/radioactive_decay/src/G4BetaPlusDecay.cc index 4c9601aa968..95347122390 100644 --- a/source/processes/hadronic/models/radioactive_decay/src/G4BetaPlusDecay.cc +++ b/source/processes/hadronic/models/radioactive_decay/src/G4BetaPlusDecay.cc @@ -57,7 +57,7 @@ G4BetaPlusDecay::G4BetaPlusDecay(const G4ParticleDefinition* theParentNucleus, G4IonTable* theIonTable = (G4IonTable*)(G4ParticleTable::GetParticleTable()->GetIonTable()); G4int daughterZ = theParentNucleus->GetAtomicNumber() - 1; - G4int daughterA = theParentNucleus->GetAtomicMass(); + G4int daughterA = theParentNucleus->GetAtomicMass(); SetDaughter(0, theIonTable->GetIon(daughterZ, daughterA, excitationE, flb) ); SetUpBetaSpectrumSampler(daughterZ, daughterA, betaType); SetDaughter(1, "e+"); @@ -67,7 +67,7 @@ G4BetaPlusDecay::G4BetaPlusDecay(const G4ParticleDefinition* theParentNucleus, G4BetaPlusDecay::~G4BetaPlusDecay() { - delete spectrumSampler; + delete betaSampler; } @@ -88,9 +88,9 @@ G4DecayProducts* G4BetaPlusDecay::DecayIt(G4double) G4DynamicParticle parentParticle(G4MT_parent, G4ThreeVector(0,0,0), 0.0); G4DecayProducts* products = new G4DecayProducts(parentParticle); - if (spectrumSampler) { + if (betaSampler) { // Generate positron isotropic in angle, with energy from stored spectrum - G4double eKE = endpointEnergy*spectrumSampler->shoot(G4Random::getTheEngine() ); + G4double eKE = endpointEnergy*betaSampler->shoot(); G4double eMomentum = std::sqrt(eKE*(eKE + 2.*eMass) ); G4double cosTheta = 2.*G4UniformRand() - 1.0; @@ -164,31 +164,32 @@ G4BetaPlusDecay::SetUpBetaSpectrumSampler(const G4int& daughterZ, { G4double e0 = endpointEnergy/CLHEP::electron_mass_c2; G4BetaDecayCorrections corrections(-daughterZ, daughterA); - spectrumSampler = 0; + betaSampler = 0; // Check for cases in which Q < 2Me (e.g. z67.a162) if (e0 > 0.) { // Array to store spectrum pdf - G4int npti = 100; + G4int npti = 101; G4double* pdf = new G4double[npti]; - G4double e; // Total positron energy in units of electron mass - G4double p; // Positron momentum in units of electron mass - G4double f; // Spectral shap function - for (G4int ptn = 0; ptn < npti; ptn++) { - // Calculate simple phase space - e = 1. + e0*(ptn + 0.5)/G4double(npti); - p = std::sqrt(e*e - 1.); - f = p*e*(e0 - e + 1.)*(e0 - e + 1.); + G4double ex; + G4double p; // Positron momentum in units of electron mass + G4double f; // Spectral shape function + + for (G4int i = 0; i < npti; i++) { + ex = e0*std::max(1.e-6, G4double(i)/G4double(npti-1) ); + p = std::sqrt(ex*(ex+2.) ); + f = p*(1. + ex)*(e0 - ex)*(e0 - ex); // Apply Fermi factor to get allowed shape - f *= corrections.FermiFunction(e); + f *= corrections.FermiFunction(1. + ex); // Apply shape factor for forbidden transitions - f *= corrections.ShapeFactor(betaType, p, e0-e+1.); - pdf[ptn] = f; + f *= corrections.ShapeFactor(betaType, p, e0-ex); + pdf[i] = f; } - spectrumSampler = new G4RandGeneral(pdf, npti); + betaSampler = new G4BetaSpectrumSampler(pdf, npti, e0); + delete[] pdf; } } diff --git a/source/processes/hadronic/models/radioactive_decay/src/G4BetaSpectrumSampler.cc b/source/processes/hadronic/models/radioactive_decay/src/G4BetaSpectrumSampler.cc new file mode 100644 index 00000000000..7b67146415f --- /dev/null +++ b/source/processes/hadronic/models/radioactive_decay/src/G4BetaSpectrumSampler.cc @@ -0,0 +1,98 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +//////////////////////////////////////////////////////////////////////////////// +// // +// File: G4BetaSpectrumSampler.cc // +// Author: D.H. Wright // +// Date: 21 November 2022 // +// Description: samples a spectrum which is a piece-wise linear function of // +// energy. The CDF is calculated by trapezoidal integration // +// and within bins the line y = mx + b is sampled. // +// // +//////////////////////////////////////////////////////////////////////////////// + +#include "G4BetaSpectrumSampler.hh" + +G4BetaSpectrumSampler:: +G4BetaSpectrumSampler(const G4double* aPDF, G4int pdfSize, G4double e) +{ + pdf.resize(pdfSize); + nBins = pdfSize-1; + cdf.resize(nBins); + eEnd = e; + + lowerBinEdge = 0; + upperBinEdge = 1; + + for (G4int i = 0; i < pdfSize; i++) pdf[i] = aPDF[i]; + + // Caclulate binwise CDF using trapezoidal integration + G4double sum = pdf[0]/2.; + for (G4int i = 1; i < pdfSize; i++) { + sum += pdf[i]; + cdf[i-1] = sum - pdf[i]/2.; + } +} + +G4double G4BetaSpectrumSampler::shoot() +{ + G4double rand = G4UniformRand()*cdf[nBins-1]; + G4int ibin = 0; + + while (rand > cdf[ibin]) ibin++; + + G4double x = nBins; + if (ibin < nBins) { + lowerBinEdge = ibin; + upperBinEdge = ibin+1; + x = sampleSlopedLine(); + } + + return x/nBins; +} + + +G4double G4BetaSpectrumSampler::sampleSlopedLine() +{ + G4double x; + G4double rand = G4UniformRand(); + ylower = pdf[lowerBinEdge]; + yupper = pdf[upperBinEdge]; + + if (std::abs(2.*(yupper - ylower)/(yupper + ylower) ) < 1.E-6) { + // Slope is near zero, sample flat + x = lowerBinEdge + rand*(upperBinEdge - lowerBinEdge); + + } else { + // Sample incline + x = (yupper*lowerBinEdge - ylower*upperBinEdge + + std::sqrt(ylower*ylower + rand*(yupper*yupper - ylower*ylower) ) ) + /(yupper - ylower); + } + + return x; +} + diff --git a/source/processes/hadronic/models/theo_high_energy/GNUmakefile b/source/processes/hadronic/models/theo_high_energy/GNUmakefile deleted file mode 100644 index 4222603b43f..00000000000 --- a/source/processes/hadronic/models/theo_high_energy/GNUmakefile +++ /dev/null @@ -1,40 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic library. Gabriele Cosmo, 18/9/96. -# ----------------------------------------------------------- - -name := G4had_theo_max - -ifndef G4INSTALL - G4INSTALL = ../../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include/ \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/include \ - -I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/include \ - -I$(G4BASE)/processes/hadronic/models/quasi_elastic/include \ - -I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/particles/shortlived/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/processes/GNUmakefile b/source/processes/hadronic/processes/GNUmakefile deleted file mode 100644 index 8e7e3b2b07e..00000000000 --- a/source/processes/hadronic/processes/GNUmakefile +++ /dev/null @@ -1,39 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic processes library. G.Folger 10-Dec-97 -# -------------------------------------------------------------- - -name := G4hadronic_proc - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/scoring/include \ - -I$(G4BASE)/processes/hadronic/management/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/digits_hits/detector/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/intercoms/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/hadronic/processes/History b/source/processes/hadronic/processes/History index 45155d28d40..313a9a43dd0 100644 --- a/source/processes/hadronic/processes/History +++ b/source/processes/hadronic/processes/History @@ -6,19 +6,49 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-02-10 Vladimir Ivanchenko (hadr-proc-V11-00-13) +## 2023-06-17 Vladimir Ivanchenko (hadr-proc-V11-01-11) +- G4NuVacOscProcess - clean-up to resolve Coverity report, removed unused class + memebrs + +## 2023-06-09 Vladimir Ivanchenko (hadr-proc-V11-01-10) +- G4TauNeutrinoNucleusProcess - clean-up constructor and destructor to resolve + Coverity warning + +## 2023-04-13 Vladimir Grichine (hadr-proc-V11-01-09) +- G4NuVacOscProcess - new process for vacuum 3- flavor neutrino oscillation + +## 2023-02-24 Vladimir Ivanchenko (hadr-proc-V11-01-08) +- G4NeutronGeneralProcess - added two access methods and removed possible + variable shadowing + +## 2023-02-18 Vladimir Grichine (hadr-proc-V11-01-07) +- G4ElNeutrinoNucleusProcess - update the process name to be el-neutrino-nucleus + + +## 2023-02-16 Vladimir Grichine (hadr-proc-V11-01-06) +- G4(El,Tau)NeutrinoNucleusProcess - neutrino XS biasing in selected detector-region update + + +## 2023-02-15 Vladimir Grichine (hadr-proc-V11-01-05) +- G4MuNeutrinoNucleusProcess - neutrino XS biasing in selected detector-region update + + +## 2023-02-13 Vladimir Grichine (hadr-proc-V11-01-04) +- G4NeutrinoElectronProcess - neutrino XS biasing in selected detector-region update + +## 2023-02-10 Vladimir Ivanchenko (hadr-proc-V11-01-03) - G4NeutronGeneralProcess - added extra Set method -## 2023-02-01 Vladimir Ivanchenko (hadr-proc-V11-00-12) +## 2023-02-01 Vladimir Ivanchenko (hadr-proc-V11-01-02) - G4HadronElasticProcess, G4NeutronGeneralProcess - fixed problems identified by Coverity -## 2023-01-17 Vladimir Ivanchenko +## 2023-01-17 Vladimir Ivanchenko (hadr-proc-V11-01-01) - G4HadronElasticProcess - removed obsolete (try/catch construction not applicable for hadron elastic models; added forgotten integral approach for charged particles -## 2022-12-30 Vladimir Ivanchenko +## 2022-12-30 Vladimir Ivanchenko (hadr-proc-V11-01-00) - G4NeutronGeneralProcess - optimized code: initialisation methods are moved to the source, avoid double instantiation of capture cross section; reduced number of calls to cross section, added cross section data store diff --git a/source/processes/hadronic/processes/include/G4ElNeutrinoNucleusProcess.hh b/source/processes/hadronic/processes/include/G4ElNeutrinoNucleusProcess.hh index f1c3cc950d6..7161a1d088d 100644 --- a/source/processes/hadronic/processes/include/G4ElNeutrinoNucleusProcess.hh +++ b/source/processes/hadronic/processes/include/G4ElNeutrinoNucleusProcess.hh @@ -53,10 +53,16 @@ class G4ElNeutrinoNucleusProcess : public G4HadronicProcess { public: - G4ElNeutrinoNucleusProcess(G4String anEnvelopeName , const G4String& procName = "mu-neutrino-nucleus"); + G4ElNeutrinoNucleusProcess(G4String anEnvelopeName , const G4String& procName = "el-neutrino-nucleus"); virtual ~G4ElNeutrinoNucleusProcess(); - + + G4double PostStepGetPhysicalInteractionLength( + const G4Track& track, + G4double previousStepSize, + G4ForceCondition* condition + ) override; + G4VParticleChange* PostStepDoIt(const G4Track& aTrack, const G4Step& aStep) override; @@ -84,6 +90,7 @@ private: G4String fEnvelopeName; G4ElNeutrinoNucleusTotXsc* fTotXsc; G4double fNuNuclCcBias, fNuNuclNcBias, fNuNuclTotXscBias; + G4double fXsc; G4SafetyHelper* safetyHelper; }; diff --git a/source/processes/hadronic/processes/include/G4MuNeutrinoNucleusProcess.hh b/source/processes/hadronic/processes/include/G4MuNeutrinoNucleusProcess.hh index cf720b98473..96de05fd36d 100644 --- a/source/processes/hadronic/processes/include/G4MuNeutrinoNucleusProcess.hh +++ b/source/processes/hadronic/processes/include/G4MuNeutrinoNucleusProcess.hh @@ -56,7 +56,13 @@ public: G4MuNeutrinoNucleusProcess(G4String anEnvelopeName , const G4String& procName = "mu-neutrino-nucleus"); virtual ~G4MuNeutrinoNucleusProcess(); - + + G4double PostStepGetPhysicalInteractionLength( + const G4Track& track, + G4double previousStepSize, + G4ForceCondition* condition + ) override; + G4VParticleChange* PostStepDoIt(const G4Track& aTrack, const G4Step& aStep) override; @@ -84,6 +90,7 @@ private: G4String fEnvelopeName; G4MuNeutrinoNucleusTotXsc* fTotXsc; G4double fNuNuclCcBias, fNuNuclNcBias, fNuNuclTotXscBias; + G4double fXsc; G4SafetyHelper* safetyHelper; }; diff --git a/source/processes/hadronic/processes/include/G4NeutrinoElectronProcess.hh b/source/processes/hadronic/processes/include/G4NeutrinoElectronProcess.hh index 9160aeb4f33..a4393c97b25 100644 --- a/source/processes/hadronic/processes/include/G4NeutrinoElectronProcess.hh +++ b/source/processes/hadronic/processes/include/G4NeutrinoElectronProcess.hh @@ -56,21 +56,28 @@ public: G4NeutrinoElectronProcess(G4String anEnvelopeName , const G4String& procName = "neutrino-electron"); virtual ~G4NeutrinoElectronProcess(); - + + virtual G4double PostStepGetPhysicalInteractionLength( + const G4Track& track, + G4double previousStepSize, + G4ForceCondition* condition + ) override; + virtual G4VParticleChange* PostStepDoIt(const G4Track& aTrack, - const G4Step& aStep); + const G4Step& aStep) override; // initialise thresholds - virtual void PreparePhysicsTable(const G4ParticleDefinition&); + virtual void PreparePhysicsTable(const G4ParticleDefinition&) override; // set internal limit virtual void SetLowestEnergy(G4double); - virtual void ProcessDescription(std::ostream& outFile) const; + virtual void ProcessDescription(std::ostream& outFile) const override; void SetBiasingFactors(G4double bfCc, G4double bfNc); void SetBiasingFactor(G4double bf); - G4double GetMeanFreePath(const G4Track &aTrack, G4double, G4ForceCondition *); + G4double GetMeanFreePath(const G4Track &aTrack, G4double, G4ForceCondition *) override; + private: // hide assignment operator as private diff --git a/source/processes/hadronic/processes/include/G4NeutronGeneralProcess.hh b/source/processes/hadronic/processes/include/G4NeutronGeneralProcess.hh index 753c8bb61df..1cd597b618f 100644 --- a/source/processes/hadronic/processes/include/G4NeutronGeneralProcess.hh +++ b/source/processes/hadronic/processes/include/G4NeutronGeneralProcess.hh @@ -107,6 +107,10 @@ public: void SetElasticProcess(G4HadronicProcess*); void SetCaptureProcess(G4HadronicProcess*); + // access methods to cross sections and processes + G4VCrossSectionDataSet* GetXSection(G4int type); + G4HadronicProcess* GetHadronicProcess(G4int type); + inline const G4VProcess* GetSelectedProcess() const; inline void SetTimeLimit(G4double val); @@ -145,9 +149,9 @@ private: static const size_t nTables = 5; static G4String nameT[nTables]; - G4HadronicProcess* fInelastic = nullptr; - G4HadronicProcess* fElastic = nullptr; - G4HadronicProcess* fCapture = nullptr; + G4HadronicProcess* fInelasticP = nullptr; + G4HadronicProcess* fElasticP = nullptr; + G4HadronicProcess* fCaptureP = nullptr; G4HadronicProcess* fSelectedProc = nullptr; G4VCrossSectionDataSet* fInelasticXS = nullptr; diff --git a/source/processes/hadronic/processes/include/G4NuVacOscProcess.hh b/source/processes/hadronic/processes/include/G4NuVacOscProcess.hh new file mode 100644 index 00000000000..fabcfb29d64 --- /dev/null +++ b/source/processes/hadronic/processes/include/G4NuVacOscProcess.hh @@ -0,0 +1,103 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// +// Geant4 muon neutrino nucleus scattering Process -- header file +// +// Created from G4HadronElasticProcess 1.3.19 V. Grichine +// +// Modified: +// +// 5.4.23 V.Grichine first implementation + +// Class Description +// General process for neutrino nucleus 2->X scattering +// Class Description - End + +#ifndef G4NuVacOscProcess_h +#define G4NuVacOscProcess_h 1 + +#include "globals.hh" +#include "G4HadronicProcess.hh" + +class G4ParticleDefinition; + +class G4NuVacOscProcess : public G4HadronicProcess +{ +public: + + G4NuVacOscProcess(const G4String& anEnvelopeName, + const G4String& procName = "nu-vacuum-oscillation"); + + ~G4NuVacOscProcess() override = default; + + void InitParameters(); + + G4double GetMeanFreePath(const G4Track &aTrack, G4double, G4ForceCondition *) override; + + G4VParticleChange* PostStepDoIt(const G4Track& aTrack, const G4Step& aStep) override; + + G4int NuVacProbability( G4int aa, G4double Enu, G4double Lnu ); + + void ProcessDescription(std::ostream& outFile) const override; + + // set internal limit + void SetLowestEnergy(G4double e) { fLowestEnergy = e; } + + void SetBiasingFactor(G4double bf) { + if(bf > 1.0) { fNuNuclTotXscBias = bf; fBiased = true; } + } + + // hide assignment operator as private + G4NuVacOscProcess& operator=(const G4NuVacOscProcess &right)=delete; + G4NuVacOscProcess(const G4NuVacOscProcess& )=delete; + +private: + + G4bool fBiased{false}; + G4bool fAnti{false}; + G4bool fNormOrd{true}; + + G4String fEnvelopeName; + + G4double fLowestEnergy; + G4double fNuNuclTotXscBias {1.0}; + + G4double fSin2t12, fSin2t23, fSin2t13; + G4double fDsm21, fDsm32, fdcp; + + G4complex fUdcp[3][3]; // vacuum PMNS matrix, Dirac nu, CP delta13 + G4double fDms[3][3]; // dm2 matrix, + // involved oscillationg paricles + G4ParticleDefinition* theNuE; + G4ParticleDefinition* theAntiNuE; + G4ParticleDefinition* theNuMu; + G4ParticleDefinition* theAntiNuMu; + G4ParticleDefinition* theNuTau; + G4ParticleDefinition* theAntiNuTau; +}; + +#endif diff --git a/source/processes/hadronic/processes/include/G4TauNeutrinoNucleusProcess.hh b/source/processes/hadronic/processes/include/G4TauNeutrinoNucleusProcess.hh index 6209fa44767..a59deaaa6fe 100644 --- a/source/processes/hadronic/processes/include/G4TauNeutrinoNucleusProcess.hh +++ b/source/processes/hadronic/processes/include/G4TauNeutrinoNucleusProcess.hh @@ -50,9 +50,15 @@ class G4TauNeutrinoNucleusProcess : public G4HadronicProcess { public: - G4TauNeutrinoNucleusProcess(G4String anEnvelopeName , const G4String& procName = "tau-neutrino-nucleus"); + G4TauNeutrinoNucleusProcess(const G4String& anEnvelopeName, const G4String& procName = "tau-neutrino-nucleus"); - virtual ~G4TauNeutrinoNucleusProcess(); + ~G4TauNeutrinoNucleusProcess() override = default; + + G4double PostStepGetPhysicalInteractionLength( + const G4Track& track, + G4double previousStepSize, + G4ForceCondition* condition + ) override; G4VParticleChange* PostStepDoIt(const G4Track& aTrack, const G4Step& aStep) override; @@ -68,19 +74,20 @@ public: void SetBiasingFactors(G4double bfCc, G4double bfNc); void SetBiasingFactor(G4double bf); G4double GetMeanFreePath(const G4Track &aTrack, G4double, G4ForceCondition *) override; - -private: // hide assignment operator as private - G4TauNeutrinoNucleusProcess& operator=(const G4TauNeutrinoNucleusProcess &right); - G4TauNeutrinoNucleusProcess(const G4TauNeutrinoNucleusProcess& ); + G4TauNeutrinoNucleusProcess& operator= + (const G4TauNeutrinoNucleusProcess &right) = delete; + G4TauNeutrinoNucleusProcess(const G4TauNeutrinoNucleusProcess&) = delete; + +private: G4double lowestEnergy; - G4bool isInitialised, fBiased; - G4LogicalVolume* fEnvelope; + G4bool isInitialised{false}; G4String fEnvelopeName; G4TauNeutrinoNucleusTotXsc* fTotXsc; - G4double fNuNuclCcBias, fNuNuclNcBias, fNuNuclTotXscBias; + G4double fNuNuclCcBias{1.0}, fNuNuclNcBias{1.0}, fNuNuclTotXscBias{1.0}; + G4double fXsc{0.0}; G4SafetyHelper* safetyHelper; }; diff --git a/source/processes/hadronic/processes/sources.cmake b/source/processes/hadronic/processes/sources.cmake index 165e7fd6cb3..02c91245d8b 100644 --- a/source/processes/hadronic/processes/sources.cmake +++ b/source/processes/hadronic/processes/sources.cmake @@ -13,6 +13,7 @@ geant4_add_module(G4hadronic_proc G4NeutronCaptureProcess.hh G4NeutronFissionProcess.hh G4NeutronGeneralProcess.hh + G4NuVacOscProcess.hh G4PositronNuclearProcess.hh G4TauNeutrinoNucleusProcess.hh G4UCNProcessSubType.hh @@ -32,6 +33,7 @@ geant4_add_module(G4hadronic_proc G4NeutronCaptureProcess.cc G4NeutronFissionProcess.cc G4NeutronGeneralProcess.cc + G4NuVacOscProcess.cc G4PositronNuclearProcess.cc G4TauNeutrinoNucleusProcess.cc G4UCNBoundaryProcess.cc diff --git a/source/processes/hadronic/processes/src/G4ElNeutrinoNucleusProcess.cc b/source/processes/hadronic/processes/src/G4ElNeutrinoNucleusProcess.cc index 6dfb1e10626..90c7ef75a6b 100644 --- a/source/processes/hadronic/processes/src/G4ElNeutrinoNucleusProcess.cc +++ b/source/processes/hadronic/processes/src/G4ElNeutrinoNucleusProcess.cc @@ -70,10 +70,11 @@ G4ElNeutrinoNucleusProcess::G4ElNeutrinoNucleusProcess( G4String anEnvelopeName, lowestEnergy = 1.*keV; fEnvelope = nullptr; fEnvelopeName = anEnvelopeName; - fTotXsc = nullptr; // new G4ElNeutrinoNucleusTotXsc(); - fNuNuclCcBias=1.; - fNuNuclNcBias=1.; - fNuNuclTotXscBias=1.; + fTotXsc = new G4ElNeutrinoNucleusTotXsc(); + fNuNuclCcBias = 1.; + fNuNuclNcBias = 1.; + fNuNuclTotXscBias = 1.; + fXsc = 0.; safetyHelper = G4TransportationManager::GetTransportationManager()->GetSafetyHelper(); safetyHelper->InitialiseHelper(); } @@ -88,20 +89,25 @@ G4ElNeutrinoNucleusProcess::~G4ElNeutrinoNucleusProcess() void G4ElNeutrinoNucleusProcess::SetBiasingFactor(G4double bf) { fNuNuclTotXscBias = bf; - - fTotXsc = new G4ElNeutrinoNucleusTotXsc(); - fTotXsc->SetBiasingFactor(bf); } /////////////////////////////////////////////////////// void G4ElNeutrinoNucleusProcess::SetBiasingFactors(G4double bfCc, G4double bfNc) { - fNuNuclCcBias=bfCc; - fNuNuclNcBias=bfNc; + fNuNuclCcBias = bfCc; + fNuNuclNcBias = bfNc; + fNuNuclTotXscBias = std::max(fNuNuclCcBias, fNuNuclNcBias); +} - fTotXsc = new G4ElNeutrinoNucleusTotXsc(); - // fTotXsc->SetBiasingFactors(bfCc, bfNc); +/////////////////////////////////////////////// + +G4double G4ElNeutrinoNucleusProcess::PostStepGetPhysicalInteractionLength( const G4Track& track, + G4double previousStepSize, + G4ForceCondition* condition ) +{ + return G4VDiscreteProcess::PostStepGetPhysicalInteractionLength( track, + previousStepSize, condition ); } ////////////////////////////////////////////////// @@ -242,7 +248,10 @@ G4ElNeutrinoNucleusProcess::PostStepDoIt(const G4Track& track, const G4Step& ste G4HadProjectile theProj( track ); G4HadronicInteraction* hadi = nullptr; G4HadFinalState* result = nullptr; - + const G4Element* elm = GetCrossSectionDataStore()->SampleZandA(dynParticle, material, + *targNucleus); + G4int ZZ = elm->GetZasInt(); + fXsc = fTotXsc->GetElementCrossSection(dynParticle, ZZ, material); G4double ccTotRatio = fTotXsc->GetCcTotRatio(); if( G4UniformRand() < ccTotRatio ) // Cc-model diff --git a/source/processes/hadronic/processes/src/G4HadronElasticProcess.cc b/source/processes/hadronic/processes/src/G4HadronElasticProcess.cc index ef697a78dbf..e659931fbad 100644 --- a/source/processes/hadronic/processes/src/G4HadronElasticProcess.cc +++ b/source/processes/hadronic/processes/src/G4HadronElasticProcess.cc @@ -69,6 +69,7 @@ G4HadronElasticProcess::PostStepDoIt(const G4Track& track, // For elastic scattering, _any_ result is considered an interaction theNumberOfInteractionLengthLeft = -1.0; + // ClearNumberOfInteractionLengthLeft(); const G4DynamicParticle* dynParticle = track.GetDynamicParticle(); G4double kineticEnergy = dynParticle->GetKineticEnergy(); diff --git a/source/processes/hadronic/processes/src/G4MuNeutrinoNucleusProcess.cc b/source/processes/hadronic/processes/src/G4MuNeutrinoNucleusProcess.cc index 2378a4130ae..cc07009321f 100644 --- a/source/processes/hadronic/processes/src/G4MuNeutrinoNucleusProcess.cc +++ b/source/processes/hadronic/processes/src/G4MuNeutrinoNucleusProcess.cc @@ -70,10 +70,11 @@ G4MuNeutrinoNucleusProcess::G4MuNeutrinoNucleusProcess( G4String anEnvelopeName, lowestEnergy = 1.*keV; fEnvelope = nullptr; fEnvelopeName = anEnvelopeName; - fTotXsc = nullptr; // new G4MuNeutrinoNucleusTotXsc(); + fTotXsc = new G4MuNeutrinoNucleusTotXsc(); fNuNuclCcBias=1.; fNuNuclNcBias=1.; fNuNuclTotXscBias=1.; + fXsc = 0.; safetyHelper = G4TransportationManager::GetTransportationManager()->GetSafetyHelper(); safetyHelper->InitialiseHelper(); } @@ -88,20 +89,25 @@ G4MuNeutrinoNucleusProcess::~G4MuNeutrinoNucleusProcess() void G4MuNeutrinoNucleusProcess::SetBiasingFactor(G4double bf) { fNuNuclTotXscBias = bf; - - fTotXsc = new G4MuNeutrinoNucleusTotXsc(); - fTotXsc->SetBiasingFactor(bf); } /////////////////////////////////////////////////////// void G4MuNeutrinoNucleusProcess::SetBiasingFactors(G4double bfCc, G4double bfNc) { - fNuNuclCcBias=bfCc; - fNuNuclNcBias=bfNc; + fNuNuclCcBias = bfCc; + fNuNuclNcBias = bfNc; + fNuNuclTotXscBias = std::max(fNuNuclCcBias, fNuNuclNcBias); +} - fTotXsc = new G4MuNeutrinoNucleusTotXsc(); - // fTotXsc->SetBiasingFactors(bfCc, bfNc); +/////////////////////////////////////////////// + +G4double G4MuNeutrinoNucleusProcess::PostStepGetPhysicalInteractionLength( const G4Track& track, + G4double previousStepSize, + G4ForceCondition* condition ) +{ + return G4VDiscreteProcess::PostStepGetPhysicalInteractionLength( track, + previousStepSize, condition ); } ////////////////////////////////////////////////// @@ -242,7 +248,10 @@ G4MuNeutrinoNucleusProcess::PostStepDoIt(const G4Track& track, const G4Step& ste G4HadProjectile theProj( track ); G4HadronicInteraction* hadi = nullptr; G4HadFinalState* result = nullptr; - + const G4Element* elm = GetCrossSectionDataStore()->SampleZandA(dynParticle, material, + *targNucleus); + G4int ZZ = elm->GetZasInt(); + fXsc = fTotXsc->GetElementCrossSection(dynParticle, ZZ, material); G4double ccTotRatio = fTotXsc->GetCcTotRatio(); if( G4UniformRand() < ccTotRatio ) // Cc-model diff --git a/source/processes/hadronic/processes/src/G4NeutrinoElectronProcess.cc b/source/processes/hadronic/processes/src/G4NeutrinoElectronProcess.cc index 00cd3aeddac..33e8233f932 100644 --- a/source/processes/hadronic/processes/src/G4NeutrinoElectronProcess.cc +++ b/source/processes/hadronic/processes/src/G4NeutrinoElectronProcess.cc @@ -69,17 +69,17 @@ G4NeutrinoElectronProcess::G4NeutrinoElectronProcess( G4String anEnvelopeName, c lowestEnergy = 1.*keV; fEnvelope = nullptr; fEnvelopeName = anEnvelopeName; - fTotXsc = nullptr; // new G4NeutrinoElectronTotXsc(); - fNuEleCcBias=1.; - fNuEleNcBias=1.; - fNuEleTotXscBias=1.; + fTotXsc = new G4NeutrinoElectronTotXsc(); + fNuEleCcBias = 1.; + fNuEleNcBias = 1.; + fNuEleTotXscBias = 1.; safetyHelper = G4TransportationManager::GetTransportationManager()->GetSafetyHelper(); safetyHelper->InitialiseHelper(); } G4NeutrinoElectronProcess::~G4NeutrinoElectronProcess() { - // if( fTotXsc ) delete fTotXsc; + if( fTotXsc ) delete fTotXsc; } /////////////////////////////////////////////////////// @@ -87,20 +87,25 @@ G4NeutrinoElectronProcess::~G4NeutrinoElectronProcess() void G4NeutrinoElectronProcess::SetBiasingFactor(G4double bf) { fNuEleTotXscBias = bf; - - fTotXsc = new G4NeutrinoElectronTotXsc(); - // fTotXsc->SetBiasingFactor(bf); } /////////////////////////////////////////////////////// void G4NeutrinoElectronProcess::SetBiasingFactors(G4double bfCc, G4double bfNc) { - fNuEleCcBias=bfCc; - fNuEleNcBias=bfNc; + fNuEleCcBias = bfCc; + fNuEleNcBias = bfNc; + fNuEleTotXscBias = std::max( fNuEleCcBias, fNuEleNcBias ); +} - fTotXsc = new G4NeutrinoElectronTotXsc(); - fTotXsc->SetBiasingFactors(bfCc, bfNc); +/////////////////////////////////////////////// + +G4double G4NeutrinoElectronProcess::PostStepGetPhysicalInteractionLength( const G4Track& track, + G4double previousStepSize, + G4ForceCondition* condition ) +{ + return G4VDiscreteProcess::PostStepGetPhysicalInteractionLength( track, + previousStepSize, condition ); } ////////////////////////////////////////////////// diff --git a/source/processes/hadronic/processes/src/G4NeutronGeneralProcess.cc b/source/processes/hadronic/processes/src/G4NeutronGeneralProcess.cc index 7e614c0d23d..df9f78426b5 100644 --- a/source/processes/hadronic/processes/src/G4NeutronGeneralProcess.cc +++ b/source/processes/hadronic/processes/src/G4NeutronGeneralProcess.cc @@ -49,6 +49,7 @@ #include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" #include "G4HadronicProcess.hh" +#include "G4HadronicProcessType.hh" #include "G4CrossSectionDataStore.hh" #include "G4Step.hh" #include "G4Track.hh" @@ -114,7 +115,7 @@ G4bool G4NeutronGeneralProcess::IsApplicable(const G4ParticleDefinition&) void G4NeutronGeneralProcess::SetInelasticProcess(G4HadronicProcess* ptr) { - fInelastic = ptr; + fInelasticP = ptr; fXSSInelastic = ptr->GetCrossSectionDataStore(); fInelasticXS = InitialisationXS(ptr); if(nullptr == fInelasticXS) { @@ -127,7 +128,7 @@ void G4NeutronGeneralProcess::SetInelasticProcess(G4HadronicProcess* ptr) void G4NeutronGeneralProcess::SetElasticProcess(G4HadronicProcess* ptr) { - fElastic = ptr; + fElasticP = ptr; fXSSElastic = ptr->GetCrossSectionDataStore(); fElasticXS = InitialisationXS(ptr); if(nullptr == fElasticXS) { @@ -140,7 +141,7 @@ void G4NeutronGeneralProcess::SetElasticProcess(G4HadronicProcess* ptr) void G4NeutronGeneralProcess::SetCaptureProcess(G4HadronicProcess* ptr) { - fCapture = ptr; + fCaptureP = ptr; fXSSCapture = ptr->GetCrossSectionDataStore(); fCaptureXS = InitialisationXS(ptr); if(nullptr == fCaptureXS) { @@ -164,6 +165,30 @@ G4NeutronGeneralProcess::InitialisationXS(G4HadronicProcess* proc) //....Ooooo0ooooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... +G4VCrossSectionDataSet* G4NeutronGeneralProcess::GetXSection(G4int subtype) +{ + G4VCrossSectionDataSet* xs = nullptr; + G4HadronicProcessType type = (G4HadronicProcessType)subtype; + if(type == fHadronElastic) { xs = fElasticXS; } + else if(type == fHadronInelastic) { xs = fInelasticXS; } + else if(type == fCapture) { xs = fCaptureXS; } + return xs; +} + +//....Ooooo0ooooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + +G4HadronicProcess* G4NeutronGeneralProcess::GetHadronicProcess(G4int subtype) +{ + G4HadronicProcess* ptr = nullptr; + G4HadronicProcessType type = (G4HadronicProcessType)subtype; + if(type == fHadronElastic) { ptr = fElasticP; } + else if(type == fHadronInelastic) { ptr = fInelasticP; } + else if(type == fCapture) { ptr = fCaptureP; } + return ptr; +} + +//....Ooooo0ooooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... + void G4NeutronGeneralProcess::PreparePhysicsTable(const G4ParticleDefinition& part) { if(1 < verboseLevel) { @@ -172,9 +197,9 @@ void G4NeutronGeneralProcess::PreparePhysicsTable(const G4ParticleDefinition& pa << " and particle " << part.GetParticleName() << " isMaster: " << isMaster << G4endl; } - G4bool noEl = (nullptr == fElastic); - G4bool noInel = (nullptr == fInelastic); - G4bool noCap = (nullptr == fCapture); + G4bool noEl = (nullptr == fElasticP); + G4bool noInel = (nullptr == fInelasticP); + G4bool noCap = (nullptr == fCaptureP); if(noEl || noInel || noCap) { G4ExceptionDescription ed; ed << "Incomplete configuration of the neutron general process." << G4endl; @@ -195,9 +220,9 @@ void G4NeutronGeneralProcess::PreparePhysicsTable(const G4ParticleDefinition& pa fXSFactorInel = param->XSFactorNucleonInelastic(); } - fElastic->PreparePhysicsTable(part); - fInelastic->PreparePhysicsTable(part); - fCapture->PreparePhysicsTable(part); + fElasticP->PreparePhysicsTable(part); + fInelasticP->PreparePhysicsTable(part); + fCaptureP->PreparePhysicsTable(part); std::size_t nmat = G4Material::GetNumberOfMaterials(); G4MaterialTable* matTable = G4Material::GetMaterialTable(); @@ -251,9 +276,9 @@ void G4NeutronGeneralProcess::BuildPhysicsTable(const G4ParticleDefinition& part << " and particle " << part.GetParticleName() << G4endl; } - fElastic->BuildPhysicsTable(part); - fInelastic->BuildPhysicsTable(part); - fCapture->BuildPhysicsTable(part); + fElasticP->BuildPhysicsTable(part); + fInelasticP->BuildPhysicsTable(part); + fCaptureP->BuildPhysicsTable(part); if(isMaster) { std::size_t nmat = G4Material::GetNumberOfMaterials(); @@ -407,17 +432,17 @@ G4VParticleChange* G4NeutronGeneralProcess::PostStepDoIt(const G4Track& track, */ if (0 == idxEnergy) { if(q <= GetProbability(1)) { - SelectedProcess(step, fElastic, fXSSElastic); + SelectedProcess(step, fElasticP, fXSSElastic); } else if(q <= GetProbability(2)) { - SelectedProcess(step, fInelastic, fXSSInelastic); + SelectedProcess(step, fInelasticP, fXSSInelastic); } else { - SelectedProcess(step, fCapture, fXSSCapture); + SelectedProcess(step, fCaptureP, fXSSCapture); } } else { if(q <= GetProbability(4)) { - SelectedProcess(step, fInelastic, fXSSInelastic); + SelectedProcess(step, fInelasticP, fXSSInelastic); } else { - SelectedProcess(step, fElastic, fXSSElastic); + SelectedProcess(step, fElasticP, fXSSElastic); } } // total cross section is needed for selection of an element @@ -470,9 +495,9 @@ G4double G4NeutronGeneralProcess::GetMeanFreePath(const G4Track& track, void G4NeutronGeneralProcess::ProcessDescription(std::ostream& out) const { - fElastic->ProcessDescription(out); - fInelastic->ProcessDescription(out); - fCapture->ProcessDescription(out); + fElasticP->ProcessDescription(out); + fInelasticP->ProcessDescription(out); + fCaptureP->ProcessDescription(out); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... diff --git a/source/processes/hadronic/processes/src/G4NuVacOscProcess.cc b/source/processes/hadronic/processes/src/G4NuVacOscProcess.cc new file mode 100644 index 00000000000..f8b54242da0 --- /dev/null +++ b/source/processes/hadronic/processes/src/G4NuVacOscProcess.cc @@ -0,0 +1,350 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// Geant4 Hadron Elastic Scattering Process +// +// Created from G4HadronElasticProcess +// +// Modified: +// +// 5.4.23 V.Grichine - first implementation +// + +#include +#include +#include "G4NuVacOscProcess.hh" +#include "G4SystemOfUnits.hh" +#include "G4Nucleus.hh" +#include "G4ProcessManager.hh" +#include "G4CrossSectionDataStore.hh" +#include "G4ProductionCutsTable.hh" +#include "G4HadronicException.hh" +#include "G4HadronicInteraction.hh" +#include "G4VCrossSectionRatio.hh" +#include "G4VDiscreteProcess.hh" +#include "G4MuNeutrinoNucleusTotXsc.hh" +#include "G4RotationMatrix.hh" +#include "G4ThreeVector.hh" +#include "G4AffineTransform.hh" +#include "G4DynamicParticle.hh" +#include "G4StepPoint.hh" +#include "G4VSolid.hh" +#include "G4LogicalVolume.hh" +#include "G4SafetyHelper.hh" +#include "G4TransportationManager.hh" +#include "G4AntiNeutrinoE.hh" +#include "G4NeutrinoE.hh" +#include "G4AntiNeutrinoMu.hh" +#include "G4NeutrinoMu.hh" +#include "G4AntiNeutrinoTau.hh" +#include "G4NeutrinoTau.hh" +#include "G4PhysicsModelCatalog.hh" + +/////////////////////////////////////////////////////////////////////////////// + + +G4NuVacOscProcess::G4NuVacOscProcess(const G4String& eName, const G4String& pName) + : G4HadronicProcess( pName, fHadronInelastic ) +{ + fLowestEnergy = 1.*eV; + fEnvelopeName = eName; + theNuE = G4NeutrinoE::NeutrinoE(); + theAntiNuE = G4AntiNeutrinoE::AntiNeutrinoE(); + theNuMu = G4NeutrinoMu::NeutrinoMu(); + theAntiNuMu = G4AntiNeutrinoMu::AntiNeutrinoMu(); + theNuTau = G4NeutrinoTau::NeutrinoTau(); + theAntiNuTau = G4AntiNeutrinoTau::AntiNeutrinoTau(); + + InitParameters(); +} + +///////////////////////////////////////////////////////// +// +// Init the neutrino oscillation parameters + +void G4NuVacOscProcess::InitParameters() +{ + if( fNormOrd ) // normal mass ordering + { + fSin2t12 = 0.31; + fSin2t23 = 0.558; + fSin2t13 = 0.02241; + fDsm21 = 7.390e-5*CLHEP::eV*CLHEP::eV; + fDsm32 = 2.449e-3*CLHEP::eV*CLHEP::eV; + fdcp = CLHEP::degree * 222.; // 270.; // 90.; // 120.; // + } + else + { + fSin2t12 = 0.31; + fSin2t23 = 0.563; + fSin2t13 = 0.02261; + fDsm21 = 7.3900e-5*CLHEP::eV*CLHEP::eV; + fDsm32 = -2.509e-3*CLHEP::eV*CLHEP::eV; + fdcp = CLHEP::degree * 285.; // 120. // + } + G4double c12(1.), s12(0.), c13(1.), s13(0.), c23(1.), s23(0.); + + s12 = std::sqrt( fSin2t12 ); + s23 = std::sqrt( fSin2t23 ); + s13 = std::sqrt( fSin2t13 ); + + c12 = std::sqrt( 1. - fSin2t12 ); + c23 = std::sqrt( 1. - fSin2t23 ); + c13 = std::sqrt( 1. - fSin2t13 ); + + G4complex expdcp = G4complex( std::cos(fdcp), std::sin(fdcp) ); // exp(i*deltaCP) + + G4complex u11, u12, u13, u21, u22, u23, u31, u32, u33; + + u11 = c12*c13; u12 = c13*s12; u13 = s13*conj(expdcp); + + u21 = -s12*c23 - s13*s23*c12*expdcp; u22 = c12*c23 - s12*s23*s13*expdcp; u23 = c13*s23; + + u31 = s12*s23 - s13*c12*c23*expdcp; u32 = -c12*s23 - s12*s13*c23*expdcp; u33 = c13*c23; + + // fUdcp[3][3] = { { u11, u12, u13 }, { u21, u22, u23 }, { u31, u32, u33 } }; + + // fUdcp[3][3] = { u11, u12, u13, u21, u22, u23, u31, u32, u33 }; + + fUdcp[0][0] = u11; fUdcp[0][1] = u12; fUdcp[0][2] = u13; + fUdcp[1][0] = u21; fUdcp[1][1] = u22; fUdcp[1][2] = u23; + fUdcp[2][0] = u31; fUdcp[2][1] = u32; fUdcp[2][2] = u33; + + G4double m12, m13, m21, m23, m31, m32; //m11(0.), m22(0.),, m33(0.) + + m12 = -fDsm21; m13 = -fDsm21-fDsm32; + m21 = -m12; m23 = -fDsm32; + m31 = -m13; m32 = -m23; + + fDms[0][0] = fDms[1][1] = fDms[2][2] = 0.; // asymmetric + fDms[0][1] = m12; fDms[0][2] = m13; + fDms[1][0] = m21; fDms[1][2] = m23; + fDms[2][0] = m31; fDms[2][1] = m32; +} + +//////////////////////////////////////////////////////////////////// +// +// In long volumes, the mean free path can be reduced together with +// the volume size along the neutrino trajectory + +G4double G4NuVacOscProcess:: +GetMeanFreePath(const G4Track &aTrack, G4double, G4ForceCondition *) +{ + const G4String rName = + aTrack.GetStep()->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetRegion()->GetName(); + G4double lambda(0.); + G4double energy = aTrack.GetKineticEnergy(); + + lambda = 0.4*CLHEP::hbarc*energy/( fDsm32 + fDsm21 ); + + if( rName == fEnvelopeName && fNuNuclTotXscBias > 1.) + { + lambda /= fNuNuclTotXscBias; + } + return lambda; +} + +/////////////////////////////////////////////////// + +void G4NuVacOscProcess::ProcessDescription(std::ostream& outFile) const +{ + outFile << "G4NuVacOscProcess handles the oscillation of \n" + << "three flavor neutrinos on electrons by invoking the following model(s) and \n" + << "mean pathe much smaller than the oscillation period.\n"; +} + +/////////////////////////////////////////////////////////////////////// + +G4VParticleChange* +G4NuVacOscProcess::PostStepDoIt(const G4Track& track, const G4Step& step) +{ + if( track.GetTrackStatus() != fAlive ) + { + return theTotalResult; + } + theTotalResult->Clear(); + theTotalResult->Initialize(track); + + G4double weight = track.GetWeight(); + theTotalResult->ProposeWeight(weight); + G4double kineticEnergy = track.GetKineticEnergy(); + + if ( kineticEnergy <= fLowestEnergy ) return theTotalResult; + + const G4DynamicParticle* dynParticle = track.GetDynamicParticle(); + const G4ParticleDefinition* part = dynParticle->GetDefinition(); + G4LorentzVector lv1 = dynParticle->Get4Momentum(); + + G4int aa(0), bb(0); // neutrino flavors + G4double ll = track.GetTrackLength(); // total track length + const G4String rName = + step.GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetRegion()->GetName(); + if(rName == fEnvelopeName && fNuNuclTotXscBias > 1.) ll *= fNuNuclTotXscBias; + G4DynamicParticle* aLept = nullptr; + + if( part == theAntiNuE || + part == theAntiNuMu || + part == theAntiNuTau ) fAnti = true; + else fAnti = false; + + if( part == theNuE || part == theAntiNuE ) aa = 0; + else if( part == theNuMu || part == theAntiNuMu ) aa = 1; + else aa = 2; + + bb = NuVacProbability( aa, kineticEnergy, ll); // oscillation engine + + if( bb == aa ) // no change + { + return theTotalResult; + } + else if( bb == 0 ) // new flavor (anti)neutrino - kill initial & add new + { + if( !fAnti ) aLept = new G4DynamicParticle( theNuE, lv1 ); + else aLept = new G4DynamicParticle( theAntiNuE, lv1 ); + } + else if( bb == 1 ) + { + if( !fAnti ) aLept = new G4DynamicParticle( theNuMu, lv1 ); + else aLept = new G4DynamicParticle( theAntiNuMu, lv1 ); + } + else if( bb == 2 ) + { + if( !fAnti ) aLept = new G4DynamicParticle( theNuTau, lv1 ); + else aLept = new G4DynamicParticle( theAntiNuTau, lv1 ); + } + theTotalResult->ProposeTrackStatus( fStopAndKill ); + theTotalResult->AddSecondary( aLept ); + + return theTotalResult; +} + +///////////////////////////////////////////////////// +// +// Oscillation probability aa->bb for neutrino energy Enu and its track distance Lnu + +G4int G4NuVacOscProcess::NuVacProbability( G4int aa, G4double Enu, G4double Lnu ) +{ + G4double probab(0.), probac(0.), probaa(0.), rr(0.), elCof(0.), delta[3][3]; + + G4int bb(0), cc(0); + + if ( aa == 0 ) { bb = 1; cc = 2; } + else if( aa == 1 ) { bb = 0; cc = 2; } + else if( aa == 2 ) { bb = 0; cc = 1; } + + elCof = 0.5*Lnu/Enu/CLHEP::hbarc; + + G4complex tmp(0.,0.), sum1(0.,0.), sum2(0.,0.), expdel; + + for( G4int i = 0; i < 3; ++i ) + { + for( G4int j = 0; j < 3; ++j ) delta[i][j] = fDms[i][j]*elCof; + } + if( !fAnti ) + { + for( G4int j = 0; j < 3; ++j ) + { + for( G4int k = j+1; k < 3; ++k ) + { + expdel = G4complex( std::cos( delta[k][j] ), -std::sin( delta[k][j] ) ); + + tmp = conj( fUdcp[bb][k] ) * fUdcp[aa][k] * fUdcp[bb][j] * conj( fUdcp[aa][j] ); + + sum1 += tmp * std::sin( delta[k][j]*0.5 ) * std::sin( delta[k][j]*0.5 ); + sum2 += tmp * std::sin( delta[k][j] ); + } + } + probab = 2.*imag(sum2) - 4.*real(sum1); + + sum1 = sum2 = G4complex( 0., 0. ); + + for( G4int j = 0; j < 3; ++j ) + { + for( G4int k = j+1; k < 3; ++k ) + { + expdel = G4complex( std::cos( delta[k][j] ), -std::sin( delta[k][j] ) ); + + tmp = conj( fUdcp[cc][k] ) * fUdcp[aa][k] * fUdcp[cc][j] * conj( fUdcp[aa][j] ); + + sum1 += tmp * std::sin( delta[k][j]*0.5 ) * std::sin( delta[k][j]*0.5 ); + sum2 += tmp * std::sin( delta[k][j] ); + } + } + probac = 2.*imag(sum2) - 4.*real(sum1); + } + else // anti CP: exp(-i*delta) + { + for( G4int j = 0; j < 3; ++j ) + { + for( G4int k = j+1; k < 3; ++k ) + { + expdel = G4complex( std::cos( delta[k][j] ), -std::sin( delta[k][j] ) ); + + tmp = fUdcp[bb][k] * conj( fUdcp[aa][k] ) *conj( fUdcp[bb][j] ) * fUdcp[aa][j]; + + sum1 += tmp * std::sin( delta[k][j]*0.5 ) * std::sin( delta[k][j]*0.5 ); + sum2 += tmp * std::sin( delta[k][j] ); + } + } + probab = 2.*imag(sum2) - 4.*real(sum1); + sum1 = sum2 = G4complex( 0., 0. ); + + for( G4int j = 0; j < 3; ++j ) + { + for( G4int k = j+1; k < 3; ++k ) + { + expdel = G4complex( std::cos( delta[k][j] ), -std::sin( delta[k][j] ) ); + + tmp = fUdcp[cc][k] * conj( fUdcp[aa][k] ) * conj( fUdcp[cc][j] ) * fUdcp[aa][j]; + + sum1 += tmp * std::sin( delta[k][j]*0.5 ) * std::sin( delta[k][j]*0.5 ); + sum2 += tmp * std::sin( delta[k][j] ); + } + } + probac = 2.*imag(sum2) - 4.*real(sum1); + } + probaa = 1. - probab - probac; + + if ( probaa < 0.) + { + G4cout<<" sum neutrino disappearance > 1. "< probab && rr <= probab + probac ) return cc; + else return aa; + } +} + +////////////////////////////////////////////////////////// diff --git a/source/processes/hadronic/processes/src/G4TauNeutrinoNucleusProcess.cc b/source/processes/hadronic/processes/src/G4TauNeutrinoNucleusProcess.cc index 9afe0612b06..3ff9b9610a8 100644 --- a/source/processes/hadronic/processes/src/G4TauNeutrinoNucleusProcess.cc +++ b/source/processes/hadronic/processes/src/G4TauNeutrinoNucleusProcess.cc @@ -45,8 +45,6 @@ #include "G4VDiscreteProcess.hh" #include "G4TauNeutrinoNucleusTotXsc.hh" -//#include "G4NuMuNucleusCcModel.hh" -//#include "G4NuMuNucleusNcModel.hh" #include "G4RotationMatrix.hh" #include "G4ThreeVector.hh" @@ -61,33 +59,21 @@ /////////////////////////////////////////////////////////////////////////////// -G4TauNeutrinoNucleusProcess::G4TauNeutrinoNucleusProcess( G4String anEnvelopeName, const G4String& pName) - : G4HadronicProcess( pName, fHadronInelastic ), isInitialised(false), fBiased(true) // fHadronElastic??? +G4TauNeutrinoNucleusProcess::G4TauNeutrinoNucleusProcess(const G4String& anEnvelopeName, const G4String& pName) + : G4HadronicProcess( pName, fHadronInelastic ) { lowestEnergy = 1.*keV; - fEnvelope = nullptr; fEnvelopeName = anEnvelopeName; - fTotXsc = nullptr; // new G4TauNeutrinoNucleusTotXsc(); - fNuNuclCcBias=1.; - fNuNuclNcBias=1.; - fNuNuclTotXscBias=1.; + fTotXsc = new G4TauNeutrinoNucleusTotXsc(); safetyHelper = G4TransportationManager::GetTransportationManager()->GetSafetyHelper(); safetyHelper->InitialiseHelper(); } -G4TauNeutrinoNucleusProcess::~G4TauNeutrinoNucleusProcess() -{ - if( fTotXsc ) delete fTotXsc; -} - /////////////////////////////////////////////////////// void G4TauNeutrinoNucleusProcess::SetBiasingFactor(G4double bf) { fNuNuclTotXscBias = bf; - - fTotXsc = new G4TauNeutrinoNucleusTotXsc(); - fTotXsc->SetBiasingFactor(bf); } /////////////////////////////////////////////////////// @@ -96,9 +82,17 @@ void G4TauNeutrinoNucleusProcess::SetBiasingFactors(G4double bfCc, G4double bfNc { fNuNuclCcBias = bfCc; fNuNuclNcBias = bfNc; + fNuNuclTotXscBias = std::max(fNuNuclCcBias, fNuNuclNcBias); +} - fTotXsc = new G4TauNeutrinoNucleusTotXsc(); - // fTotXsc->SetBiasingFactors(bfCc, bfNc); +/////////////////////////////////////////////// + +G4double G4TauNeutrinoNucleusProcess::PostStepGetPhysicalInteractionLength( const G4Track& track, + G4double previousStepSize, + G4ForceCondition* condition ) +{ + return G4VDiscreteProcess::PostStepGetPhysicalInteractionLength( track, + previousStepSize, condition ); } ////////////////////////////////////////////////// @@ -239,7 +233,10 @@ G4TauNeutrinoNucleusProcess::PostStepDoIt(const G4Track& track, const G4Step& st G4HadProjectile theProj( track ); G4HadronicInteraction* hadi = nullptr; G4HadFinalState* result = nullptr; - + const G4Element* elm = GetCrossSectionDataStore()->SampleZandA(dynParticle, material, + *targNucleus); + G4int ZZ = elm->GetZasInt(); + fXsc = fTotXsc->GetElementCrossSection(dynParticle, ZZ, material); G4double ccTotRatio = fTotXsc->GetCcTotRatio(); if( G4UniformRand() < ccTotRatio ) // Cc-model diff --git a/source/processes/hadronic/stopping/GNUmakefile b/source/processes/hadronic/stopping/GNUmakefile deleted file mode 100644 index 5ba9e1f26ec..00000000000 --- a/source/processes/hadronic/stopping/GNUmakefile +++ /dev/null @@ -1,49 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for hadronic stopping library. G.Folger 10-Dec-97 -# -------------------------------------------------------------- - -name := G4hadronic_stop - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/hadronic/management/include \ - -I$(G4BASE)/processes/hadronic/cross_sections/include \ - -I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/fission/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/gem_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \ - -I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \ - -I$(G4BASE)/processes/hadronic/models/binary_cascade/include \ - -I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \ - -I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \ - -I$(G4BASE)/processes/hadronic/models/parton_string/management/include \ - -I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/hadronic/stopping/History b/source/processes/hadronic/stopping/History index 036c0b12098..9c315595875 100644 --- a/source/processes/hadronic/stopping/History +++ b/source/processes/hadronic/stopping/History @@ -6,6 +6,10 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-05-15 Alberto Ribon (hadr-stopping-V11-01-00) +- G4HadronicAbsorptionINCLXX : new class to handle annihilation at rest by INCLXX; + for the time being, only antiproton. + ## 2022-11-26 Gabriele Cosmo (hadr-stopping-V11-00-02) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/processes/hadronic/stopping/include/G4HadronicAbsorptionINCLXX.hh b/source/processes/hadronic/stopping/include/G4HadronicAbsorptionINCLXX.hh new file mode 100644 index 00000000000..06b07c31c1f --- /dev/null +++ b/source/processes/hadronic/stopping/include/G4HadronicAbsorptionINCLXX.hh @@ -0,0 +1,67 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +//--------------------------------------------------------------------------- +// +// ClassName: G4HadronicAbsorptionINCLXX +// +// Author: Alberto Ribon +// +// Date: April 2023 +// +// Modified: +// +// Class Description: +// +// Intermediate base class for hadronic absorption at rest using +// INCLXX model, and Precompound for the nuclear de-excitation. +// +//--------------------------------------------------------------------------- + +#ifndef G4HadronicAbsorptionINCLXX_h +#define G4HadronicAbsorptionINCLXX_h 1 + +#include "globals.hh" +#include "G4HadronStoppingProcess.hh" + +class G4ParticleDefinition; + + +class G4HadronicAbsorptionINCLXX : public G4HadronStoppingProcess { + public: + G4HadronicAbsorptionINCLXX( G4ParticleDefinition* pdef = nullptr ); + virtual ~G4HadronicAbsorptionINCLXX(); + + G4bool IsApplicable( const G4ParticleDefinition& ); + void ProcessDescription( std::ostream& outFile ) const; + + G4HadronicAbsorptionINCLXX& operator=( const G4HadronicAbsorptionINCLXX& ) = delete; + G4HadronicAbsorptionINCLXX( const G4HadronicAbsorptionINCLXX& ) = delete; + + private: + G4ParticleDefinition* pdefApplicable; +}; + +#endif diff --git a/source/processes/hadronic/stopping/sources.cmake b/source/processes/hadronic/stopping/sources.cmake index 4646e65949a..d3ff997741d 100644 --- a/source/processes/hadronic/stopping/sources.cmake +++ b/source/processes/hadronic/stopping/sources.cmake @@ -7,6 +7,7 @@ geant4_add_module(G4hadronic_stop G4EmCaptureCascade.hh G4HadronicAbsorptionFritiof.hh G4HadronicAbsorptionFritiofWithBinaryCascade.hh + G4HadronicAbsorptionINCLXX.hh G4HadronStoppingProcess.hh G4MuMinusCapturePrecompound.hh G4MuonMinusBoundDecay.hh @@ -19,6 +20,7 @@ geant4_add_module(G4hadronic_stop G4EmCaptureCascade.cc G4HadronicAbsorptionFritiof.cc G4HadronicAbsorptionFritiofWithBinaryCascade.cc + G4HadronicAbsorptionINCLXX.cc G4HadronStoppingProcess.cc G4MuMinusCapturePrecompound.cc G4MuonMinusBoundDecay.cc @@ -46,6 +48,7 @@ geant4_module_link_libraries(G4hadronic_stop G4had_theo_max G4hadronic_bert_cascade G4hadronic_binary + G4hadronic_inclxx_interface G4hepgeometry G4ions G4leptons) diff --git a/source/processes/hadronic/stopping/src/G4HadronicAbsorptionINCLXX.cc b/source/processes/hadronic/stopping/src/G4HadronicAbsorptionINCLXX.cc new file mode 100644 index 00000000000..e2d9e268e20 --- /dev/null +++ b/source/processes/hadronic/stopping/src/G4HadronicAbsorptionINCLXX.cc @@ -0,0 +1,81 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +//--------------------------------------------------------------------------- +// +// ClassName: G4HadronicAbsorptionINCLXX +// +// Author: Alberto Ribon +// +// Date: April 2023 +// +// Modified: +// +// Class Description: +// +// Intermediate class for hadronic absorption at rest using INCLXX/Preco. +// +//--------------------------------------------------------------------------- + +#include + +#include "G4SystemOfUnits.hh" +#include "G4HadronicAbsorptionINCLXX.hh" +#include "G4PreCompoundModel.hh" +#include "G4ParticleDefinition.hh" +#include "G4ParticleTypes.hh" +#include "G4HadronicInteractionRegistry.hh" +#include "G4HadronicParameters.hh" +#include "G4INCLXXInterface.hh" + + +G4HadronicAbsorptionINCLXX::G4HadronicAbsorptionINCLXX( G4ParticleDefinition* pdef ) : + G4HadronStoppingProcess( "hINCLXXCaptureAtRest" ), pdefApplicable( pdef ) +{ + G4INCLXXInterface* theModel = new G4INCLXXInterface; + G4double theMin = 0.0*GeV; + G4double theMax = 10.0*GeV; + theModel->SetMinEnergy( theMin ); + theModel->SetMaxEnergy( theMax ); + RegisterMe( theModel ); +} + + +G4HadronicAbsorptionINCLXX::~G4HadronicAbsorptionINCLXX() {} + + +// Applies to constructor-specified particle, or to all known cases +G4bool G4HadronicAbsorptionINCLXX::IsApplicable( const G4ParticleDefinition& particle ) { + return ( ( pdefApplicable == nullptr && ( &particle == G4AntiProton::Definition() ) ) + || ( &particle == pdefApplicable ) ); +} + + +// Documentation of purpose +void G4HadronicAbsorptionINCLXX::ProcessDescription( std::ostream& os ) const { + os << "Stopping and absorption of anti_proton using INCLXX model.\n" + << "Geant4 PreCompound model is used for nuclear de-excitation." + << std::endl; +} diff --git a/source/processes/hadronic/util/GNUmakefile b/source/processes/hadronic/util/GNUmakefile deleted file mode 100644 index a5270d89950..00000000000 --- a/source/processes/hadronic/util/GNUmakefile +++ /dev/null @@ -1,33 +0,0 @@ -# ---------------------------------------------------------------- -# GNUmakefile for hadronic management library. G.Folger 10-Dec-97 -# ---------------------------------------------------------------- - - -name := G4hadronic_util - -ifndef G4INSTALL - G4INSTALL = ../../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4HADRONIC_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk - diff --git a/source/processes/hadronic/util/History b/source/processes/hadronic/util/History index b57e90b7d7f..53e96aeda08 100644 --- a/source/processes/hadronic/util/History +++ b/source/processes/hadronic/util/History @@ -7,11 +7,50 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-05-25 Alberto Ribon (hadr-util-V11-00-14) +## 2023-05-25 Alberto Ribon (hadr-util-V11-01-06) - G4Fragment : replaced (fatal) G4HadronicException with G4Exception. Note: in the method CalculateMassAndExcitationEnergy(), the exception type is "EventMustBeAborted" to avoid rare crashes seen in INCLXX, which - are difficult to reproduce and fix. + are difficult to reproduce and fix. + +## 2023-04-25 Vladimir Ivanchenko (hadr-util-V11-01-05) +- G4HadronicParameters - added extra Boolean method for access to debug + flag for the BinaryCascade, which may be defined via environment + variable BINARY_CASCADE_DEBUG + +## 2023-03-29 Vladimir Ivanchenko (hadr-util-V11-01-04) +- G4HadronicParameters - added two strings and extra methods to access + environment variables used in G4HadronicProcessStore. These variables + are not used in ordinary runs but are checked in each thread and for + each particle. With this update these variables will be checked only once. + Added G4Exception for the case, when environment variable G4PARTICLEXSDATA + is not defined (gitlab issue #160). + +## 2023-03-27 Alberto Ribon (hadr-util-V11-01-03) +- G4HadronicParameter : introduced the neutron kinetic energy threshold for + applying the SVT (Sampling of the Velocity of the Target) algorithm. + This is needed to have a consistent value in the two methods + G4Nucleus::GetBiasedThermalNucleus and + G4ParticleHPElasticFS::GetBiasedThermalNucleus + without cycling dependencies between util/ and models/particle_hp/ . +- G4Nucleus : in the method GetBiasedThermalNucleus, get the neutron kinetic + energy threshold for applying the SVT algorithm from G4HadronicParameter + in the method DoKinematicsOfThermalNucleus, and corrected the way to pass + the last parameter, by reference instead of by value. + +## 2023-03-04 Alberto Ribon (hadr-util-V11-01-02) +- G4Nucleus : split the method GetBiasedThermalNucleus into two parts, by + introducing a new public method, DoKinematicsOfThermalNucleus (which is + used also by G4ParticleHPElasticFS to implement the DBRC algorithm). + +## 2023-01-21 Vladimir Ivanchenko (hadr-util-V11-01-01) +- G4HadronicParameters - removed two obsolete environment variables and access + methods; add flag for charge exchange + +## 2023-01-09 Vladimir Ivanchenko (hadr-util-V11-01-00) +- G4HadronicParameters - added class members defined via environment variable + and access methods for these members, this allows exclude the major part + of calls to std::getenv in hadronics ## 2022-11-26 Gabriele Cosmo (hadr-util-V11-00-13) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/processes/hadronic/util/include/G4HadronicParameters.hh b/source/processes/hadronic/util/include/G4HadronicParameters.hh index e4d13ff118d..a5ea547fea1 100644 --- a/source/processes/hadronic/util/include/G4HadronicParameters.hh +++ b/source/processes/hadronic/util/include/G4HadronicParameters.hh @@ -50,7 +50,7 @@ class G4HadronicParameters { static G4HadronicParameters* Instance(); ~G4HadronicParameters(); - G4double GetMaxEnergy() const; + inline G4double GetMaxEnergy() const; void SetMaxEnergy( const G4double val ); // Getter/Setter for the upper limit for Geant4 hadronic physics, for any application. // Any hadronic model, physics list builder and constructor should use this method @@ -58,68 +58,68 @@ class G4HadronicParameters { // Any application which tries to use hadronic physics for an energy higher than this limit // will get a run-time crash, because no model is found. - G4double GetMinEnergyTransitionFTF_Cascade() const; - G4double GetMaxEnergyTransitionFTF_Cascade() const; + inline G4double GetMinEnergyTransitionFTF_Cascade() const; + inline G4double GetMaxEnergyTransitionFTF_Cascade() const; void SetMinEnergyTransitionFTF_Cascade( const G4double val ); void SetMaxEnergyTransitionFTF_Cascade( const G4double val ); // Getter/Setter of the recommended energy limits, for physics lists, of the // transition region between the Fritiof (FTF) string model and the // intranuclear cascade model, either Bertini (BERT) or Binary (BIC). - G4double GetMinEnergyTransitionQGS_FTF() const; - G4double GetMaxEnergyTransitionQGS_FTF() const; + inline G4double GetMinEnergyTransitionQGS_FTF() const; + inline G4double GetMaxEnergyTransitionQGS_FTF() const; void SetMinEnergyTransitionQGS_FTF( const G4double val ); void SetMaxEnergyTransitionQGS_FTF( const G4double val ); // Getter/Setter of the recommended energy limits, for physics lists, of the // transition region between the two strings models - the Quark Gluon String (QGS) // model and the Fritiof (FTF) model. - G4double EnergyThresholdForHeavyHadrons() const; + inline G4double EnergyThresholdForHeavyHadrons() const; void SetEnergyThresholdForHeavyHadrons( G4double val ); - // if max kinetic energy is below this limit EM and hadronic physics is not - // instantiated for hyperons, anti-hyperons, anti light ions, b-, c- particles + // If max kinetic energy is below this limit, then EM and hadronic physics are not + // instantiated for hyperons, anti-hyperons, anti light ions, b-, c- particles. - G4double XSFactorNucleonInelastic() const; + inline G4double XSFactorNucleonInelastic() const; void SetXSFactorNucleonInelastic( G4double val ); - G4double XSFactorNucleonElastic() const; + inline G4double XSFactorNucleonElastic() const; void SetXSFactorNucleonElastic( G4double val ); - // cross section factor for protons and neutrons + // Cross section factor for protons and neutrons. - G4double XSFactorPionInelastic() const; + inline G4double XSFactorPionInelastic() const; void SetXSFactorPionInelastic( G4double val ); - G4double XSFactorPionElastic() const; + inline G4double XSFactorPionElastic() const; void SetXSFactorPionElastic( G4double val ); - // cross section factor for pions + // Cross section factor for pions. - G4double XSFactorHadronInelastic() const; + inline G4double XSFactorHadronInelastic() const; void SetXSFactorHadronInelastic( G4double val ); - G4double XSFactorHadronElastic() const; + inline G4double XSFactorHadronElastic() const; void SetXSFactorHadronElastic( G4double val ); - // cross section factor for other hadrons and ions + // Cross section factor for other hadrons and ions. - G4double XSFactorEM() const; + inline G4double XSFactorEM() const; void SetXSFactorEM( G4double val ); - // cross section factor for gamma and leptons + // Cross section factor for gamma and leptons. - G4bool EnableBCParticles() const; + inline G4bool EnableBCParticles() const; void SetEnableBCParticles( G4bool val ); - // Baryons and mesons with c- and b- quarks may be enabled/disabled - // This flag is used both by EM and hadronic physics constructors + // Baryons and mesons with c- and b- quarks may be enabled/disabled. + // This flag is used both by EM and hadronic physics constructors. - G4bool EnableHyperNuclei() const; + inline G4bool EnableHyperNuclei() const; void SetEnableHyperNuclei( G4bool val ); - // Light hyper-nuclei may be enabled/disabled - // This flag is used both by EM and hadronic physics constructors + // Light hyper-nuclei may be enabled/disabled. + // This flag is used both by EM and hadronic physics constructors. - G4bool ApplyFactorXS() const; + inline G4bool ApplyFactorXS() const; void SetApplyFactorXS( G4bool val ); - // Flag enabling cross section factor definition + // Flag enabling cross section factor definition. - G4int GetVerboseLevel() const; + inline G4int GetVerboseLevel() const; void SetVerboseLevel( const G4int val ); // Getter/Setter of the general verbosity level for hadronics. - G4bool EnableCRCoalescence() const; + inline G4bool EnableCRCoalescence() const; void SetEnableCRCoalescence( G4bool val ); // Boolean switch that allows to apply the Cosmic Ray (CR) coalescence algorithm // to the secondaries produced by a string model. By default it is disabled. @@ -128,19 +128,38 @@ class G4HadronicParameters { inline G4bool EnableIntegralElasticXS() const; void SetEnableIntegralInelasticXS( G4bool val ); void SetEnableIntegralElasticXS( G4bool val ); - // Enable/disable integral method for main hadrons + // Enable/disable integral method for main types of hadrons. inline G4bool EnableDiffDissociationForBGreater10() const; - /// For nucleon-hadron interactions, it's not decided what to do with diffraction - /// dissociation. For the moment, they are turned off. This option allows it to - /// be turned back on. Applies to Baryon Number > 10 or # target nucleons > 10. + // For nucleon-hadron interactions, it's not decided what to do with diffraction + // dissociation. For the moment, they are turned off. This option allows it to + // be turned back on. Applies to Baryon Number > 10 or # target nucleons > 10. void SetEnableDiffDissociationForBGreater10(G4bool val); + inline G4bool EnableCoherentChargeExchange() const; + void SetEnableCoherentChargeExchange( G4bool val ); + // Coherent Charge exchange process may be enabled/disabled. + inline G4bool EnableNeutronGeneralProcess() const; void SetEnableNeutronGeneralProcess( G4bool val ); - // Neutron general process may be enabled/disabled + // Neutron general process may be enabled/disabled. + + inline G4double GetEPRelativeLevel() const; + inline G4double GetEPAbsoluteLevel() const; + inline G4int GetEPReportLevel() const; + inline G4bool GetBinaryDebug() const; + inline const G4String& GetDirPARTICLEXS() const; + inline const G4String& GetPhysListDocDir() const; + inline const G4String& GetPhysListName() const; + // Access to environment variables. + + inline G4double GetNeutronKineticEnergyThresholdForSVT() const; + void SetNeutronKineticEnergyThresholdForSVT( const G4double val ); + // Getter/Setter for the neutron kinetic energy threshold for + // applying the SVT (Sampling of the Velocity of the Target) algorithm. private: + G4HadronicParameters(); G4bool IsLocked() const; @@ -163,8 +182,13 @@ class G4HadronicParameters { G4double fXSFactorHadronElastic = 1.0; G4double fXSFactorEM = 1.0; G4double fXSFactorLimit = 0.2; + G4double fRelativeDiff = DBL_MAX; + G4double fAbsoluteDiff = DBL_MAX; + G4double fNeutronEkinThresholdForSVT = -1.0; G4int fVerboseLevel = 1; + G4int fReportLevel = 0; + G4bool fEnableBC = false; G4bool fEnableHyperNuclei = false; G4bool fApplyFactorXS = false; @@ -173,6 +197,12 @@ class G4HadronicParameters { G4bool fEnableIntegralElasticXS = true; G4bool fEnableDiffDissociationForBGreater10 = false; G4bool fNeutronGeneral = false; + G4bool fChargeExchange = false; + G4bool fBinaryDebug = false; + + G4String fDirPARTICLEXS = ""; + G4String fPhysListDocDir = ""; + G4String fPhysListName = ""; }; inline G4double G4HadronicParameters::GetMaxEnergy() const { @@ -262,4 +292,42 @@ inline G4bool G4HadronicParameters::EnableNeutronGeneralProcess() const { return fNeutronGeneral; } +inline G4bool G4HadronicParameters::EnableCoherentChargeExchange() const { + return fChargeExchange; +} + +inline G4bool G4HadronicParameters::GetBinaryDebug() const { + return fBinaryDebug; +} + +inline G4double G4HadronicParameters::GetEPRelativeLevel() const { + return fRelativeDiff; +} + +inline G4double G4HadronicParameters::GetEPAbsoluteLevel() const { + return fAbsoluteDiff; +} + +inline G4int G4HadronicParameters::GetEPReportLevel() const { + return fReportLevel; +} + +inline const G4String& G4HadronicParameters::GetDirPARTICLEXS() const { + return fDirPARTICLEXS; +} + +inline const G4String& G4HadronicParameters::GetPhysListDocDir() const +{ + return fPhysListDocDir; +} + +inline const G4String& G4HadronicParameters::GetPhysListName() const +{ + return fPhysListName; +} + +inline G4double G4HadronicParameters::GetNeutronKineticEnergyThresholdForSVT() const { + return fNeutronEkinThresholdForSVT; +} + #endif diff --git a/source/processes/hadronic/util/include/G4Nucleus.hh b/source/processes/hadronic/util/include/G4Nucleus.hh index 5c23485835a..4051785ace3 100644 --- a/source/processes/hadronic/util/include/G4Nucleus.hh +++ b/source/processes/hadronic/util/include/G4Nucleus.hh @@ -134,6 +134,9 @@ class G4Nucleus G4ReactionProduct GetBiasedThermalNucleus(G4double aMass, G4ThreeVector aVelocity, G4double temp=-1) const; + void DoKinematicsOfThermalNucleus(const G4double mu, const G4double vT_norm, const G4ThreeVector& aVelocity, + G4ReactionProduct& result) const; + G4double Cinema( G4double kineticEnergy ); G4double EvaporationEffects( G4double kineticEnergy ); diff --git a/source/processes/hadronic/util/src/G4HadronicParameters.cc b/source/processes/hadronic/util/src/G4HadronicParameters.cc index 1480d472d3b..2408fd1bfee 100644 --- a/source/processes/hadronic/util/src/G4HadronicParameters.cc +++ b/source/processes/hadronic/util/src/G4HadronicParameters.cc @@ -77,6 +77,31 @@ G4HadronicParameters::G4HadronicParameters() { fMaxEnergyTransitionQGS_FTF = 25.0*CLHEP::GeV; fEnergyThresholdForHeavyHadrons = 1.1*CLHEP::GeV; fMessenger = new G4HadronicParametersMessenger( this ); + + // read environment variables + fReportLevel = G4GetEnv("G4Hadronic_epReportLevel", 0); + const char* ep1 = std::getenv("G4Hadronic_epCheckRelativeLevel"); + if(nullptr != ep1) { fRelativeDiff = std::strtod(ep1, 0); } + const char* ep2 = std::getenv("G4Hadronic_epCheckAbsoluteLevel"); + if(nullptr != ep2) { fAbsoluteDiff = std::strtod(ep2, 0); } + const char* v = G4FindDataDir("G4PARTICLEXSDATA"); + if(nullptr != v) { + fDirPARTICLEXS = G4String(v); + } else { + if(1 < fVerboseLevel) { + G4ExceptionDescription ed; + ed << "Environment variable G4PARTICLEXSDATA is not defined or " + << " it is pointing out to not existing directory"; + G4Exception("G4LevelReader::LevelManager(..)","had014", + JustWarning, ed, "Check file path"); + } + } + const char* x = std::getenv("G4PhysListDocDir"); + if(nullptr != x) { fPhysListDocDir = G4String(x); } + const char* y = std::getenv("G4PhysListName"); + if(nullptr != y) { fPhysListName = G4String(y); } + const char* z = std::getenv("BINARY_CASCADE_DEBUG"); + if(nullptr != z) { fBinaryDebug = true; } } @@ -190,6 +215,15 @@ void G4HadronicParameters::SetXSFactorEM( G4double val ) { } +void G4HadronicParameters::SetNeutronKineticEnergyThresholdForSVT( const G4double val ) { + // This setting works only after initialization (i.e. for G4State_Idle, + // whereas it does not work for G4State_PreInit). + if ( G4Threading::IsMasterThread() && val > 0.0 ) { + fNeutronEkinThresholdForSVT = val; + } +} + + void G4HadronicParameters::SetApplyFactorXS( G4bool val ) { if ( ! IsLocked() ) fApplyFactorXS = val; } @@ -218,3 +252,8 @@ void G4HadronicParameters::SetEnableDiffDissociationForBGreater10( G4bool val ) void G4HadronicParameters::SetEnableNeutronGeneralProcess( G4bool val ) { if ( ! IsLocked() ) fNeutronGeneral = val; } + + +void G4HadronicParameters::SetEnableCoherentChargeExchange( G4bool val ) { + if ( ! IsLocked() ) fChargeExchange = val; +} diff --git a/source/processes/hadronic/util/src/G4Nucleus.cc b/source/processes/hadronic/util/src/G4Nucleus.cc index de560adfdf4..f222af17bde 100644 --- a/source/processes/hadronic/util/src/G4Nucleus.cc +++ b/source/processes/hadronic/util/src/G4Nucleus.cc @@ -50,6 +50,7 @@ #include "G4Exp.hh" #include "G4Log.hh" #include "G4HyperNucleiProperties.hh" +#include "G4HadronicParameters.hh" G4Nucleus::G4Nucleus() @@ -117,10 +118,12 @@ G4Nucleus::~G4Nucleus() {} G4ReactionProduct G4Nucleus::GetBiasedThermalNucleus(G4double aMass, G4ThreeVector aVelocity, G4double temp) const { - // If E_neutron <= 400*kB*T (400 is a common value encounter in MC neutron transport code) - // Then apply the Sampling ot the Velocity of the Target (SVT) method - // Else consider the target nucleus being without motion - G4double E_threshold = 400.0*8.617333262E-11*temp; // 400*kBoltzman*T + // If E_neutron <= E_threshold, Then apply the Sampling ot the Velocity of the Target (SVT) method; + // Else consider the target nucleus being without motion. + G4double E_threshold = G4HadronicParameters::Instance()->GetNeutronKineticEnergyThresholdForSVT(); + if ( E_threshold == -1. ) { + E_threshold = 400.0*8.617333262E-11*temp; + } G4double E_neutron = 0.5*aVelocity.mag2()*G4Neutron::Neutron()->GetPDGMass(); // E=0.5*m*v2 G4ReactionProduct result; @@ -170,57 +173,8 @@ G4Nucleus::GetBiasedThermalNucleus(G4double aMass, G4ThreeVector aVelocity, G4do randThreshold = G4UniformRand(); } while ( randThreshold >= acceptThreshold ); - // Get target nucleus direction from the neutron direction and the relative angle between target nucleus and neutron (mu) - G4double cosTh = mu; - G4ThreeVector uNorm = aVelocity; - - G4double sinTh = std::sqrt(1. - cosTh*cosTh); - - // Sample randomly the phi angle between the neutron veloicty and the target velocity - G4double phi = CLHEP::twopi*G4UniformRand(); - G4double sinPhi = std::sin(phi); - G4double cosPhi = std::cos(phi); - - // Find orthogonal vector to aVelocity - solve equation xx' + yy' + zz' = 0 - G4ThreeVector ortho(1,1,1); - if ( uNorm[0] ) ortho[0] = -(uNorm[1]+uNorm[2])/uNorm[0]; - else if ( uNorm[1] ) ortho[1] = -(uNorm[0]+uNorm[2])/uNorm[1]; - else if ( uNorm[2] ) ortho[2] = -(uNorm[0]+uNorm[1])/uNorm[2]; - - // Normalize the vector - ortho = (1/ortho.mag())*ortho; - - // Find vector to draw a plan perpendicular to uNorm (i.e neutron velocity) with vectors ortho & orthoComp - G4ThreeVector orthoComp( uNorm[1]*ortho[2] - ortho[1]*uNorm[2], - uNorm[2]*ortho[0] - ortho[2]*uNorm[0], - uNorm[0]*ortho[1] - ortho[0]*uNorm[1] ); - - // Find the direction of the target velocity in the laboratory frame - G4ThreeVector directionTarget( cosTh*uNorm[0] + sinTh*(cosPhi*orthoComp[0] + sinPhi*ortho[0]), - cosTh*uNorm[1] + sinTh*(cosPhi*orthoComp[1] + sinPhi*ortho[1]), - cosTh*uNorm[2] + sinTh*(cosPhi*orthoComp[2] + sinPhi*ortho[2]) ); - - // Normalize directionTarget - directionTarget = (1/directionTarget.mag())*directionTarget; - - // Set momentum - G4double px = result.GetMass()*vT_norm*directionTarget[0]; - G4double py = result.GetMass()*vT_norm*directionTarget[1]; - G4double pz = result.GetMass()*vT_norm*directionTarget[2]; - result.SetMomentum(px, py, pz); - - G4double tMom = std::sqrt(px*px+py*py+pz*pz); - G4double tEtot = std::sqrt((tMom+result.GetMass())*(tMom+result.GetMass()) - - 2.*tMom*result.GetMass()); - - if ( tEtot/result.GetMass() - 1. > 0.001 ) { - // use relativistic energy for higher energies - result.SetTotalEnergy(tEtot); - } else { - // use p**2/2M for lower energies (to preserve precision?) - result.SetKineticEnergy(tMom*tMom/(2.*result.GetMass())); - } - + DoKinematicsOfThermalNucleus(mu, vT_norm, aVelocity, result); + } else { // target nucleus considered as being without motion result.SetMomentum(0., 0., 0.); @@ -232,6 +186,64 @@ G4Nucleus::GetBiasedThermalNucleus(G4double aMass, G4ThreeVector aVelocity, G4do } +void +G4Nucleus::DoKinematicsOfThermalNucleus(const G4double mu, const G4double vT_norm, const G4ThreeVector& aVelocity, + G4ReactionProduct& result) const { + + // Get target nucleus direction from the neutron direction and the relative angle between target nucleus and neutron (mu) + G4double cosTh = mu; + G4ThreeVector uNorm = aVelocity; + + G4double sinTh = std::sqrt(1. - cosTh*cosTh); + + // Sample randomly the phi angle between the neutron veloicty and the target velocity + G4double phi = CLHEP::twopi*G4UniformRand(); + G4double sinPhi = std::sin(phi); + G4double cosPhi = std::cos(phi); + + // Find orthogonal vector to aVelocity - solve equation xx' + yy' + zz' = 0 + G4ThreeVector ortho(1., 1., 1.); + if ( uNorm[0] ) ortho[0] = -(uNorm[1]+uNorm[2])/uNorm[0]; + else if ( uNorm[1] ) ortho[1] = -(uNorm[0]+uNorm[2])/uNorm[1]; + else if ( uNorm[2] ) ortho[2] = -(uNorm[0]+uNorm[1])/uNorm[2]; + + // Normalize the vector + ortho = (1/ortho.mag())*ortho; + + // Find vector to draw a plan perpendicular to uNorm (i.e neutron velocity) with vectors ortho & orthoComp + G4ThreeVector orthoComp( uNorm[1]*ortho[2] - ortho[1]*uNorm[2], + uNorm[2]*ortho[0] - ortho[2]*uNorm[0], + uNorm[0]*ortho[1] - ortho[0]*uNorm[1] ); + + // Find the direction of the target velocity in the laboratory frame + G4ThreeVector directionTarget( cosTh*uNorm[0] + sinTh*(cosPhi*orthoComp[0] + sinPhi*ortho[0]), + cosTh*uNorm[1] + sinTh*(cosPhi*orthoComp[1] + sinPhi*ortho[1]), + cosTh*uNorm[2] + sinTh*(cosPhi*orthoComp[2] + sinPhi*ortho[2]) ); + + // Normalize directionTarget + directionTarget = ( 1./directionTarget.mag() )*directionTarget; + + // Set momentum + G4double px = result.GetMass()*vT_norm*directionTarget[0]; + G4double py = result.GetMass()*vT_norm*directionTarget[1]; + G4double pz = result.GetMass()*vT_norm*directionTarget[2]; + result.SetMomentum(px, py, pz); + + G4double tMom = std::sqrt(px*px+py*py+pz*pz); + G4double tEtot = std::sqrt( (tMom+result.GetMass())*(tMom+result.GetMass()) + - 2.*tMom*result.GetMass() ); + + if ( tEtot/result.GetMass() - 1. > 0.001 ) { + // use relativistic energy for higher energies + result.SetTotalEnergy(tEtot); + } else { + // use p**2/2M for lower energies (to preserve precision?) + result.SetKineticEnergy(tMom*tMom/(2.*result.GetMass())); + } + +} + + G4ReactionProduct G4Nucleus::GetThermalNucleus(G4double targetMass, G4double temp) const { diff --git a/source/processes/management/GNUmakefile b/source/processes/management/GNUmakefile deleted file mode 100644 index 1fa52448577..00000000000 --- a/source/processes/management/GNUmakefile +++ /dev/null @@ -1,23 +0,0 @@ -# -------------------------------------------------------------------- -# GNUmakefile for process management library. Gabriele Cosmo, 4/4/97. -# -------------------------------------------------------------------- - -name := G4procman - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/optical/GNUmakefile b/source/processes/optical/GNUmakefile deleted file mode 100644 index 8c78b15bf2c..00000000000 --- a/source/processes/optical/GNUmakefile +++ /dev/null @@ -1,34 +0,0 @@ -# ------------------------------------------------------------ -# GNUmakefile for optical photons library. G.Folger 10-Dec-97. -# ------------------------------------------------------------ - -name := G4optical - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/digits_hits/detector/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/scoring/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/materials/include - -ifdef G4OPTICAL_DEBUG - CPPFLAGS += -DG4OPTICAL_DEBUG -endif - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/parameterisation/GNUmakefile b/source/processes/parameterisation/GNUmakefile deleted file mode 100644 index 628d6eea9c7..00000000000 --- a/source/processes/parameterisation/GNUmakefile +++ /dev/null @@ -1,28 +0,0 @@ -# ------------------------------------------------------------ -# GNUmakefile for transportation library. G.Folger 10-Dec-97. -# ------------------------------------------------------------ - -name := G4parameterisation - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/digits_hits/detector/include \ - -I$(G4BASE)/digits_hits/hits/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/parameterisation/History b/source/processes/parameterisation/History index 21f3bf9c98b..9cf399e7dfc 100644 --- a/source/processes/parameterisation/History +++ b/source/processes/parameterisation/History @@ -6,7 +6,7 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-03-23 Anna Zaborowska (param-V11-00-05) +## 2023-03-23 Anna Zaborowska (param-V11-01-00) - Added missing virtual destructor to G4VFastSimSensitiveDetector ## 2022-11-23 Gabriele Cosmo (param-V11-00-04) diff --git a/source/processes/scoring/GNUmakefile b/source/processes/scoring/GNUmakefile deleted file mode 100644 index bdc25a0d184..00000000000 --- a/source/processes/scoring/GNUmakefile +++ /dev/null @@ -1,34 +0,0 @@ -# ------------------------------------------------------------ -# GNUmakefile for scoring process library. -# ------------------------------------------------------------ - -name := G4scoring - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/biasing/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/electromagnetic/muons/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/digits_hits/detector/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/processes/transportation/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/scoring/History b/source/processes/scoring/History index 83de865ecaf..3c546391c01 100644 --- a/source/processes/scoring/History +++ b/source/processes/scoring/History @@ -6,6 +6,13 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-06-01 Ben Morgan (procscore-V11-01-01) +- Make dependency on G4intercoms private, fixing issue introduced in previous tag + +## 2023-06-01 Ben Morgan (procscore-V11-01-00) +- Apply standard clang-tidy/format fixes +- Make G4EnergySplitter a private implementation detail of the module + ## 2022-11-23 Gabriele Cosmo (procscore-V11-00-02) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/processes/scoring/include/G4ParallelWorldProcess.hh b/source/processes/scoring/include/G4ParallelWorldProcess.hh index d28f3cce007..be63a9f3d20 100644 --- a/source/processes/scoring/include/G4ParallelWorldProcess.hh +++ b/source/processes/scoring/include/G4ParallelWorldProcess.hh @@ -25,7 +25,7 @@ // // // -// +// //--------------------------------------------------------------- // // G4ParallelWorldProcess.hh @@ -41,11 +41,15 @@ // //--------------------------------------------------------------- - #ifndef G4ParallelWorldProcess_h #define G4ParallelWorldProcess_h 1 +#include "G4FieldTrack.hh" +#include "G4MultiNavigator.hh" +#include "G4TouchableHandle.hh" +#include "G4VProcess.hh" #include "globals.hh" + class G4Step; class G4StepPoint; class G4Navigator; @@ -54,127 +58,117 @@ class G4PathFinder; class G4VTouchable; class G4VPhysicalVolume; class G4ParticleChange; -#include "G4VProcess.hh" -#include "G4FieldTrack.hh" -#include "G4TouchableHandle.hh" -#include "G4MultiNavigator.hh" - //------------------------------------------ // // G4ParallelWorldProcess class // //------------------------------------------ - // Class Description: class G4ParallelWorldProcess : public G4VProcess { -public: // with description - - //------------------------ - // Constructor/Destructor - //------------------------ - - G4ParallelWorldProcess(const G4String& processName = "ParaWorld", - G4ProcessType theType = fParallel); - virtual ~G4ParallelWorldProcess(); - - //-------------------------------------------------------------- - // Set Paralle World - //-------------------------------------------------------------- - - void SetParallelWorld(G4String parallelWorldName); - void SetParallelWorld(G4VPhysicalVolume* parallelWorld); - - //-------------------------------------------------------------- - // Process interface - //-------------------------------------------------------------- - - void StartTracking(G4Track*); - - //------------------------------------------------------------------------ - // GetPhysicalInteractionLength() and DoIt() methods for AtRest - //------------------------------------------------------------------------ - - G4double AtRestGetPhysicalInteractionLength(const G4Track&,G4ForceCondition*); - G4VParticleChange* AtRestDoIt(const G4Track&,const G4Step&); - - //------------------------------------------------------------------------ - // GetPhysicalInteractionLength() and DoIt() methods for AlongStep - //------------------------------------------------------------------------ - - G4double AlongStepGetPhysicalInteractionLength( - const G4Track&,G4double,G4double,G4double&,G4GPILSelection*); - G4VParticleChange* AlongStepDoIt(const G4Track&,const G4Step&); - - //----------------------------------------------------------------------- - // GetPhysicalInteractionLength() and DoIt() methods for PostStep - //----------------------------------------------------------------------- - - G4double PostStepGetPhysicalInteractionLength( - const G4Track&,G4double,G4ForceCondition*); - G4VParticleChange* PostStepDoIt(const G4Track&,const G4Step&); - - //----------------------------------------------------------------------- - // Flag for material switching - //----------------------------------------------------------------------- - - inline void SetLayeredMaterialFlag(G4bool flg=true) - { layeredMaterialFlag = flg; } - inline G4bool GetLayeredMaterialFlag() const - { return layeredMaterialFlag; } - -protected: - void CopyStep(const G4Step & step); - void SwitchMaterial(G4StepPoint*); - -public: // with description - //-------------------------------------------------------------------- - // Returns whether a particular particle type requires AtRest process - //-------------------------------------------------------------------- - G4bool IsAtRestRequired(G4ParticleDefinition*); - -protected: - G4Step * fGhostStep; - G4StepPoint * fGhostPreStepPoint; - G4StepPoint * fGhostPostStepPoint; - - G4VParticleChange aDummyParticleChange; - G4ParticleChange xParticleChange; - - G4TransportationManager* fTransportationManager; - G4PathFinder* fPathFinder; - - // ------------------------------- - // Navigation in the Ghost World: - // ------------------------------- - G4String fGhostWorldName; - G4VPhysicalVolume* fGhostWorld; - G4Navigator* fGhostNavigator; - G4int fNavigatorID; - G4TouchableHandle fOldGhostTouchable; - G4TouchableHandle fNewGhostTouchable; - G4FieldTrack fFieldTrack; - G4double fGhostSafety; - G4bool fOnBoundary; - - //----------------------------------------------------------------------- - // Flag for material switching - //----------------------------------------------------------------------- - G4bool layeredMaterialFlag; - - //----------------------------------------------------------------------- - // Static G4Step object for "Hyper-step" - //----------------------------------------------------------------------- -public: - static const G4Step* GetHyperStep(); - static G4int GetHypNavigatorID(); -private: - static G4ThreadLocal G4Step* fpHyperStep; - static G4ThreadLocal G4int nParallelWorlds; - static G4ThreadLocal G4int fNavIDHyp; - G4int iParallelWorld; + public: // with description + //------------------------ + // Constructor/Destructor + //------------------------ + + G4ParallelWorldProcess(const G4String& processName = "ParaWorld", + G4ProcessType theType = fParallel); + ~G4ParallelWorldProcess() override; + + //-------------------------------------------------------------- + // Set Paralle World + //-------------------------------------------------------------- + + void SetParallelWorld(G4String parallelWorldName); + void SetParallelWorld(G4VPhysicalVolume* parallelWorld); + + //-------------------------------------------------------------- + // Process interface + //-------------------------------------------------------------- + + void StartTracking(G4Track*) override; + + //------------------------------------------------------------------------ + // GetPhysicalInteractionLength() and DoIt() methods for AtRest + //------------------------------------------------------------------------ + + G4double AtRestGetPhysicalInteractionLength(const G4Track&, G4ForceCondition*) override; + G4VParticleChange* AtRestDoIt(const G4Track&, const G4Step&) override; + + //------------------------------------------------------------------------ + // GetPhysicalInteractionLength() and DoIt() methods for AlongStep + //------------------------------------------------------------------------ + + G4double AlongStepGetPhysicalInteractionLength(const G4Track&, G4double, G4double, G4double&, + G4GPILSelection*) override; + G4VParticleChange* AlongStepDoIt(const G4Track&, const G4Step&) override; + + //----------------------------------------------------------------------- + // GetPhysicalInteractionLength() and DoIt() methods for PostStep + //----------------------------------------------------------------------- + + G4double PostStepGetPhysicalInteractionLength(const G4Track&, G4double, + G4ForceCondition*) override; + G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&) override; + + //----------------------------------------------------------------------- + // Flag for material switching + //----------------------------------------------------------------------- + + inline void SetLayeredMaterialFlag(G4bool flg = true) { layeredMaterialFlag = flg; } + inline G4bool GetLayeredMaterialFlag() const { return layeredMaterialFlag; } + + //-------------------------------------------------------------------- + // Returns whether a particular particle type requires AtRest process + //-------------------------------------------------------------------- + G4bool IsAtRestRequired(G4ParticleDefinition*); + + //----------------------------------------------------------------------- + // Static G4Step object for "Hyper-step" + //----------------------------------------------------------------------- + static const G4Step* GetHyperStep(); + static G4int GetHypNavigatorID(); + + protected: + void CopyStep(const G4Step& step); + void SwitchMaterial(G4StepPoint*); + + protected: + G4Step* fGhostStep; + G4StepPoint* fGhostPreStepPoint; + G4StepPoint* fGhostPostStepPoint; + + G4VParticleChange aDummyParticleChange; + G4ParticleChange xParticleChange; + + G4TransportationManager* fTransportationManager; + G4PathFinder* fPathFinder; + + // ------------------------------- + // Navigation in the Ghost World: + // ------------------------------- + G4String fGhostWorldName; + G4VPhysicalVolume* fGhostWorld{nullptr}; + G4Navigator* fGhostNavigator{nullptr}; + G4int fNavigatorID{-1}; + G4TouchableHandle fOldGhostTouchable; + G4TouchableHandle fNewGhostTouchable; + G4FieldTrack fFieldTrack; + G4double fGhostSafety{0.}; + G4bool fOnBoundary{false}; + + //----------------------------------------------------------------------- + // Flag for material switching + //----------------------------------------------------------------------- + G4bool layeredMaterialFlag{false}; + + private: + static G4ThreadLocal G4Step* fpHyperStep; + static G4ThreadLocal G4int nParallelWorlds; + static G4ThreadLocal G4int fNavIDHyp; + G4int iParallelWorld; }; #endif diff --git a/source/processes/scoring/include/G4ParallelWorldProcessStore.hh b/source/processes/scoring/include/G4ParallelWorldProcessStore.hh index f95b7626aea..6c31b6dd741 100644 --- a/source/processes/scoring/include/G4ParallelWorldProcessStore.hh +++ b/source/processes/scoring/include/G4ParallelWorldProcessStore.hh @@ -25,7 +25,7 @@ // // // -// +// //--------------------------------------------------------------- // // G4ParallelWorldProcessStore.hh @@ -41,12 +41,13 @@ // //--------------------------------------------------------------- - #ifndef G4ParallelWorldProcessStore_h #define G4ParallelWorldProcessStore_h 1 #include "globals.hh" + #include + class G4ParallelWorldProcess; //------------------------------------------ @@ -55,38 +56,28 @@ class G4ParallelWorldProcess; // //------------------------------------------ - // Class Description: -class G4ParallelWorldProcessStore -: public std::map +class G4ParallelWorldProcessStore : public std::map { -public: // with description - static G4ParallelWorldProcessStore* GetInstance(); - static G4ParallelWorldProcessStore* GetInstanceIfExist(); + public: // with description + static G4ParallelWorldProcessStore* GetInstance(); + static G4ParallelWorldProcessStore* GetInstanceIfExist(); -private: - static G4ThreadLocal G4ParallelWorldProcessStore* fInstance; + // Set Paralle World + void SetParallelWorld(G4ParallelWorldProcess* proc, G4String parallelWorldName); + void UpdateWorlds(); + G4ParallelWorldProcess* GetProcess(G4String parallelWorldName); + void Clear(); - //------------------------ - // Constructor/Destructor - //------------------------ -private: - G4ParallelWorldProcessStore(); -public: - virtual ~G4ParallelWorldProcessStore(); - - //-------------------------------------------------------------- - // Set Paralle World - //-------------------------------------------------------------- + public: + virtual ~G4ParallelWorldProcessStore(); -public: - void SetParallelWorld(G4ParallelWorldProcess* proc, - G4String parallelWorldName); - void UpdateWorlds(); - G4ParallelWorldProcess* GetProcess(G4String parallelWorldName); - void Clear(); + private: + G4ParallelWorldProcessStore(); + private: + static G4ThreadLocal G4ParallelWorldProcessStore* fInstance; }; #endif diff --git a/source/processes/scoring/include/G4ParallelWorldScoringProcess.hh b/source/processes/scoring/include/G4ParallelWorldScoringProcess.hh index aa12e1e62ff..340508696f6 100644 --- a/source/processes/scoring/include/G4ParallelWorldScoringProcess.hh +++ b/source/processes/scoring/include/G4ParallelWorldScoringProcess.hh @@ -25,7 +25,7 @@ // // // -// +// //--------------------------------------------------------------- // // G4ParallelWorldScoringProcess.hh @@ -38,11 +38,14 @@ // //--------------------------------------------------------------- - #ifndef G4ParallelWorldScoringProcess_h #define G4ParallelWorldScoringProcess_h 1 +#include "G4FieldTrack.hh" +#include "G4TouchableHandle.hh" +#include "G4VProcess.hh" #include "globals.hh" + class G4Step; class G4Navigator; class G4TransportationManager; @@ -51,121 +54,100 @@ class G4VTouchable; class G4VPhysicalVolume; class G4ParticleChange; class G4ParticleDefinition; -#include "G4VProcess.hh" -#include "G4FieldTrack.hh" -#include "G4TouchableHandle.hh" - //------------------------------------------ // // G4ParallelWorldScoringProcess class // //------------------------------------------ - // Class Description: class G4ParallelWorldScoringProcess : public G4VProcess { -public: // with description - - //------------------------ - // Constructor/Destructor - //------------------------ - - G4ParallelWorldScoringProcess(const G4String& processName = "ParaWorldScore", - G4ProcessType theType = fParameterisation); - virtual ~G4ParallelWorldScoringProcess(); - - //-------------------------------------------------------------- - // Set Paralle World - //-------------------------------------------------------------- - - void SetParallelWorld(G4String parallelWorldName); - void SetParallelWorld(G4VPhysicalVolume* parallelWorld); - G4bool IsAtRestRequired(G4ParticleDefinition* partDef); - - //-------------------------------------------------------------- - // Process interface - //-------------------------------------------------------------- - - void StartTracking(G4Track*); - - //------------------------------------------------------------------------ - // GetPhysicalInteractionLength() and DoIt() methods for AtRest - //------------------------------------------------------------------------ - - G4double AtRestGetPhysicalInteractionLength( - const G4Track& , - G4ForceCondition* - ); - - G4VParticleChange* AtRestDoIt( - const G4Track& , - const G4Step& - ); - - //------------------------------------------------------------------------ - // GetPhysicalInteractionLength() and DoIt() methods for AlongStep - //------------------------------------------------------------------------ - - G4double AlongStepGetPhysicalInteractionLength( - const G4Track&, - G4double , - G4double , - G4double&, - G4GPILSelection* - ); - - G4VParticleChange* AlongStepDoIt( - const G4Track& , - const G4Step& - ); - - //----------------------------------------------------------------------- - // GetPhysicalInteractionLength() and DoIt() methods for PostStep - //----------------------------------------------------------------------- - - G4double PostStepGetPhysicalInteractionLength(const G4Track& track, - G4double previousStepSize, - G4ForceCondition* condition); - - G4VParticleChange* PostStepDoIt(const G4Track& ,const G4Step& ); - -private: - void CopyStep(const G4Step & step); - - G4Step * fGhostStep; - G4StepPoint * fGhostPreStepPoint; - G4StepPoint * fGhostPostStepPoint; - - G4VParticleChange aDummyParticleChange; - G4ParticleChange xParticleChange; - - G4TransportationManager* fTransportationManager; - G4PathFinder* fPathFinder; - - // ------------------------------- - // Navigation in the Ghost World: - // ------------------------------- - G4String fGhostWorldName; - G4VPhysicalVolume* fGhostWorld; - G4Navigator* fGhostNavigator; - G4int fNavigatorID; - G4TouchableHandle fOldGhostTouchable; - G4TouchableHandle fNewGhostTouchable; - G4FieldTrack fFieldTrack; - G4double fGhostSafety; - G4bool fOnBoundary; - - // ****************************************************** - // ****************************************************** - // - // For TESTS: - // - // ****************************************************** - // ****************************************************** -public: - void Verbose(const G4Step&) const; + public: // with description + //------------------------ + // Constructor/Destructor + //------------------------ + + G4ParallelWorldScoringProcess(const G4String& processName = "ParaWorldScore", + G4ProcessType theType = fParameterisation); + ~G4ParallelWorldScoringProcess() override; + + //-------------------------------------------------------------- + // Set Paralle World + //-------------------------------------------------------------- + + void SetParallelWorld(G4String parallelWorldName); + void SetParallelWorld(G4VPhysicalVolume* parallelWorld); + G4bool IsAtRestRequired(G4ParticleDefinition* partDef); + + //-------------------------------------------------------------- + // Process interface + //-------------------------------------------------------------- + + void StartTracking(G4Track*) override; + + //------------------------------------------------------------------------ + // GetPhysicalInteractionLength() and DoIt() methods for AtRest + //------------------------------------------------------------------------ + + G4double AtRestGetPhysicalInteractionLength(const G4Track&, G4ForceCondition*) override; + + G4VParticleChange* AtRestDoIt(const G4Track&, const G4Step&) override; + + //------------------------------------------------------------------------ + // GetPhysicalInteractionLength() and DoIt() methods for AlongStep + //------------------------------------------------------------------------ + + G4double AlongStepGetPhysicalInteractionLength(const G4Track&, G4double, G4double, G4double&, + G4GPILSelection*) override; + + G4VParticleChange* AlongStepDoIt(const G4Track&, const G4Step&) override; + + //----------------------------------------------------------------------- + // GetPhysicalInteractionLength() and DoIt() methods for PostStep + //----------------------------------------------------------------------- + + G4double PostStepGetPhysicalInteractionLength(const G4Track& track, G4double previousStepSize, + G4ForceCondition* condition) override; + + G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&) override; + + private: + void CopyStep(const G4Step& step); + + G4Step* fGhostStep; + G4StepPoint* fGhostPreStepPoint; + G4StepPoint* fGhostPostStepPoint; + + G4VParticleChange aDummyParticleChange; + G4ParticleChange xParticleChange; + + G4TransportationManager* fTransportationManager; + G4PathFinder* fPathFinder; + + // ------------------------------- + // Navigation in the Ghost World: + // ------------------------------- + G4String fGhostWorldName; + G4VPhysicalVolume* fGhostWorld; + G4Navigator* fGhostNavigator{nullptr}; + G4int fNavigatorID{-1}; + G4TouchableHandle fOldGhostTouchable; + G4TouchableHandle fNewGhostTouchable; + G4FieldTrack fFieldTrack; + G4double fGhostSafety; + G4bool fOnBoundary; + + // ****************************************************** + // ****************************************************** + // + // For TESTS: + // + // ****************************************************** + // ****************************************************** + public: + void Verbose(const G4Step&) const; }; #endif diff --git a/source/processes/scoring/include/G4ScoreSplittingProcess.hh b/source/processes/scoring/include/G4ScoreSplittingProcess.hh index 2856fb8f3c8..e803f66c096 100644 --- a/source/processes/scoring/include/G4ScoreSplittingProcess.hh +++ b/source/processes/scoring/include/G4ScoreSplittingProcess.hh @@ -25,14 +25,14 @@ // // // -// +// //--------------------------------------------------------------- // // G4ScoreSplittingProcess.hh // // Description: -// This process is used to split the length and energy -// of a step in a regular structure into sub-steps, and to +// This process is used to split the length and energy +// of a step in a regular structure into sub-steps, and to // call the scorers for each sub-volume. // It invokes sensitive detectors assigned in the *mass* // world. @@ -40,10 +40,12 @@ // Design and first implementation: J. Apostolakis / M.Asai 2010 //--------------------------------------------------------------- - #ifndef G4ScoreSplittingProcess_h #define G4ScoreSplittingProcess_h 1 +#include "G4FieldTrack.hh" +#include "G4TouchableHandle.hh" +#include "G4VProcess.hh" #include "globals.hh" class G4Step; class G4Navigator; @@ -52,13 +54,9 @@ class G4PathFinder; class G4VTouchable; class G4VPhysicalVolume; class G4ParticleChange; -class G4EnergySplitter; +class G4EnergySplitter; -#include "G4VProcess.hh" -#include "G4FieldTrack.hh" -#include "G4TouchableHandle.hh" class G4TouchableHistory; -// #include "G4TouchableHistory.hh" //------------------------------------------ // @@ -66,101 +64,84 @@ class G4TouchableHistory; // //------------------------------------------ - // Class Description: class G4ScoreSplittingProcess : public G4VProcess { -public: // with description - - //------------------------ - // Constructor/Destructor - //------------------------ - - G4ScoreSplittingProcess(const G4String& processName = "ScoreSplittingProc", - G4ProcessType theType = fParameterisation); - virtual ~G4ScoreSplittingProcess(); - - //-------------------------------------------------------------- - // Process interface - //-------------------------------------------------------------- - - void StartTracking(G4Track*); - - //------------------------------------------------------------------------ - // GetPhysicalInteractionLength() and DoIt() methods for AtRest - //------------------------------------------------------------------------ - - G4double AtRestGetPhysicalInteractionLength( - const G4Track& , - G4ForceCondition* - ); - - G4VParticleChange* AtRestDoIt( - const G4Track& , - const G4Step& - ); - - //------------------------------------------------------------------------ - // GetPhysicalInteractionLength() and DoIt() methods for AlongStep - //------------------------------------------------------------------------ - - G4double AlongStepGetPhysicalInteractionLength( - const G4Track&, - G4double , - G4double , - G4double&, - G4GPILSelection* - ); - - G4VParticleChange* AlongStepDoIt( - const G4Track& , - const G4Step& - ); - - //----------------------------------------------------------------------- - // GetPhysicalInteractionLength() and DoIt() methods for PostStep - //----------------------------------------------------------------------- - - G4double PostStepGetPhysicalInteractionLength(const G4Track& track, - G4double previousStepSize, - G4ForceCondition* condition); - - G4VParticleChange* PostStepDoIt(const G4Track& ,const G4Step& ); - -private: - G4TouchableHistory* CreateTouchableForSubStep( G4int newVoxelNum, G4ThreeVector newPosition ); - -private: - void CopyStepStart(const G4Step & step); - - G4Step * fSplitStep; - G4StepPoint *fSplitPreStepPoint; - G4StepPoint *fSplitPostStepPoint; - - G4VParticleChange dummyParticleChange; - G4ParticleChange xParticleChange; - - // G4TransportationManager* fTransportationManager; - // G4PathFinder* fPathFinder; - - // ------------------------------- - // Touchables for the Split Step - // ------------------------------- - G4TouchableHandle fOldTouchableH; - G4TouchableHandle fNewTouchableH; - - // Memory of Touchables of full step - G4TouchableHandle fInitialTouchableH; - G4TouchableHandle fFinalTouchableH; - - G4EnergySplitter *fpEnergySplitter; - - // ****************************************************** - // For TESTS: - // ****************************************************** -public: - void Verbose(const G4Step&) const; + public: // with description + //------------------------ + // Constructor/Destructor + //------------------------ + + G4ScoreSplittingProcess(const G4String& processName = "ScoreSplittingProc", + G4ProcessType theType = fParameterisation); + ~G4ScoreSplittingProcess() override; + + //-------------------------------------------------------------- + // Process interface + //-------------------------------------------------------------- + + void StartTracking(G4Track*) override; + + //------------------------------------------------------------------------ + // GetPhysicalInteractionLength() and DoIt() methods for AtRest + //------------------------------------------------------------------------ + + G4double AtRestGetPhysicalInteractionLength(const G4Track&, G4ForceCondition*) override; + + G4VParticleChange* AtRestDoIt(const G4Track&, const G4Step&) override; + + //------------------------------------------------------------------------ + // GetPhysicalInteractionLength() and DoIt() methods for AlongStep + //------------------------------------------------------------------------ + + G4double AlongStepGetPhysicalInteractionLength(const G4Track&, G4double, G4double, G4double&, + G4GPILSelection*) override; + + G4VParticleChange* AlongStepDoIt(const G4Track&, const G4Step&) override; + + //----------------------------------------------------------------------- + // GetPhysicalInteractionLength() and DoIt() methods for PostStep + //----------------------------------------------------------------------- + + G4double PostStepGetPhysicalInteractionLength(const G4Track& track, G4double previousStepSize, + G4ForceCondition* condition) override; + + G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&) override; + + private: + G4TouchableHistory* CreateTouchableForSubStep(G4int newVoxelNum, G4ThreeVector newPosition); + + private: + void CopyStepStart(const G4Step& step); + + G4Step* fSplitStep; + G4StepPoint* fSplitPreStepPoint; + G4StepPoint* fSplitPostStepPoint; + + G4VParticleChange dummyParticleChange; + G4ParticleChange xParticleChange; + + // G4TransportationManager* fTransportationManager; + // G4PathFinder* fPathFinder; + + // ------------------------------- + // Touchables for the Split Step + // ------------------------------- + G4TouchableHandle fOldTouchableH; + G4TouchableHandle fNewTouchableH; + + // Memory of Touchables of full step + G4TouchableHandle fInitialTouchableH; + G4TouchableHandle fFinalTouchableH; + + G4EnergySplitter* fpEnergySplitter; + + // ****************************************************** + // For TESTS: + // ****************************************************** + public: + void Verbose(const G4Step&) const; }; #endif diff --git a/source/processes/scoring/include/G4EnergySplitter.hh b/source/processes/scoring/include/private/G4EnergySplitter.hh similarity index 63% rename from source/processes/scoring/include/G4EnergySplitter.hh rename to source/processes/scoring/include/private/G4EnergySplitter.hh index 46eac5ef339..8770a638c17 100644 --- a/source/processes/scoring/include/G4EnergySplitter.hh +++ b/source/processes/scoring/include/private/G4EnergySplitter.hh @@ -28,54 +28,60 @@ //////////////////////////////////////////////////////////////////////////////// // (Description) -// +// // Class to calculate the split of energy in voxels when G4RegularNavigation is used -// It takes into account energy loss and multiple scattering corrections as the particles loses energies from voxel to voxel +// It takes into account energy loss and multiple scattering corrections as the particles loses +// energies from voxel to voxel // // Created: 2010-11-09 Pedro Arce -// +// /////////////////////////////////////////////////////////////////////////////// #include "globals.hh" + +#include + class G4PhantomParameterisation; class G4EnergyLossForExtrapolator; class G4VPhysicalVolume; class G4Material; class G4Step; -#include class G4EnergySplitter { -public: // with description - G4EnergySplitter(); - virtual ~G4EnergySplitter(); - - G4int SplitEnergyInVolumes(const G4Step* aStep ); // Calculates the energy splitting, and dumps it into theEnergies. Returns number of steps + public: // with description + G4EnergySplitter(); + virtual ~G4EnergySplitter(); + + // Calculates the energy splitting, and dumps it + // into theEnergies. Returns number of steps + G4int SplitEnergyInVolumes(const G4Step* aStep); - void GetLastVoxelID( G4int& voxelID); - void GetFirstVoxelID( G4int& voxelID); - void GetVoxelID( G4int stepNo, G4int& voxelID ); - inline void GetVoxelIDAndLength( G4int stepNo, G4int& voxelID, G4double& stepLength ); - inline void GetLengthAndEnergyDeposited( G4int stepNo, G4int& voxelID, G4double& stepLength, G4double &energyLoss); - inline void GetLengthAndInitialEnergy( G4double &preStepEnergy, G4int stepNo, G4int& voxelID, G4double& stepLength, G4double &initialEnergy); + void GetLastVoxelID(G4int& voxelID); + void GetFirstVoxelID(G4int& voxelID); + void GetVoxelID(G4int stepNo, G4int& voxelID); + inline void GetVoxelIDAndLength(G4int stepNo, G4int& voxelID, G4double& stepLength); + inline void GetLengthAndEnergyDeposited(G4int stepNo, G4int& voxelID, G4double& stepLength, + G4double& energyLoss); + inline void GetLengthAndInitialEnergy(G4double& preStepEnergy, G4int stepNo, G4int& voxelID, + G4double& stepLength, G4double& initialEnergy); - inline void SetNIterations( G4int niter ); + inline void SetNIterations(G4int niter); - inline G4Material* GetVoxelMaterial( G4int stepNo ); + inline G4Material* GetVoxelMaterial(G4int stepNo); -private: - void GetStepLength( G4int stepNo, G4double& stepLength ); + private: + void GetStepLength(G4int stepNo, G4double& stepLength); - void GetPhantomParam(G4bool mustExist); - G4bool IsPhantomVolume( G4VPhysicalVolume* pv ); + void GetPhantomParam(G4bool mustExist); + G4bool IsPhantomVolume(G4VPhysicalVolume* pv); - G4EnergyLossForExtrapolator* theElossExt; - - G4int theNIterations; + G4EnergyLossForExtrapolator* theElossExt; - std::vector theEnergies; + G4int theNIterations; - G4PhantomParameterisation* thePhantomParam; + std::vector theEnergies; + G4PhantomParameterisation* thePhantomParam; }; #include "G4EnergySplitter.icc" diff --git a/source/processes/scoring/include/G4EnergySplitter.icc b/source/processes/scoring/include/private/G4EnergySplitter.icc similarity index 66% rename from source/processes/scoring/include/G4EnergySplitter.icc rename to source/processes/scoring/include/private/G4EnergySplitter.icc index 59eca0bb75d..8395b463675 100644 --- a/source/processes/scoring/include/G4EnergySplitter.icc +++ b/source/processes/scoring/include/private/G4EnergySplitter.icc @@ -23,47 +23,51 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -#include "G4UIcommand.hh" #include "G4PhantomParameterisation.hh" +#include "G4UIcommand.hh" //----------------------------------------------------------------------- -inline void G4EnergySplitter::GetVoxelIDAndLength( G4int stepNo, G4int& voxelID, G4double& stepLength ) +inline void G4EnergySplitter::GetVoxelIDAndLength(G4int stepNo, G4int& voxelID, + G4double& stepLength) { - GetVoxelID( stepNo, voxelID ); - GetStepLength( stepNo, stepLength); + GetVoxelID(stepNo, voxelID); + GetStepLength(stepNo, stepLength); } //----------------------------------------------------------------------- -inline void G4EnergySplitter::GetLengthAndEnergyDeposited( G4int stepNo, G4int& voxelID, G4double& stepLength, G4double &energyLoss) +inline void G4EnergySplitter::GetLengthAndEnergyDeposited(G4int stepNo, G4int& voxelID, + G4double& stepLength, + G4double& energyLoss) { - GetVoxelIDAndLength( stepNo, voxelID, stepLength ); + GetVoxelIDAndLength(stepNo, voxelID, stepLength); energyLoss = theEnergies[stepNo]; } //----------------------------------------------------------------------- -inline void G4EnergySplitter::GetLengthAndInitialEnergy( G4double &preStepEnergy, G4int stepNo, G4int& voxelID, G4double& stepLength, G4double &initialEnergy) +inline void G4EnergySplitter::GetLengthAndInitialEnergy(G4double& preStepEnergy, G4int stepNo, + G4int& voxelID, G4double& stepLength, + G4double& initialEnergy) { - GetVoxelIDAndLength( stepNo, voxelID, stepLength ); + GetVoxelIDAndLength(stepNo, voxelID, stepLength); initialEnergy = preStepEnergy; - for( G4int ii = 0; ii < stepNo; ii++ ){ + for (G4int ii = 0; ii < stepNo; ii++) { initialEnergy -= theEnergies[stepNo]; } } //----------------------------------------------------------------------- -inline void G4EnergySplitter::SetNIterations( G4int niter ) +inline void G4EnergySplitter::SetNIterations(G4int niter) { theNIterations = niter; } //----------------------------------------------------------------------- -inline G4Material* G4EnergySplitter::GetVoxelMaterial( G4int stepNo ) +inline G4Material* G4EnergySplitter::GetVoxelMaterial(G4int stepNo) { - if( !thePhantomParam ) GetPhantomParam(TRUE); + if (thePhantomParam == nullptr) GetPhantomParam(true); G4int voxelID; - GetVoxelID( stepNo, voxelID ); - return thePhantomParam->GetMaterial( voxelID ); + GetVoxelID(stepNo, voxelID); + return thePhantomParam->GetMaterial(voxelID); } - diff --git a/source/processes/scoring/sources.cmake b/source/processes/scoring/sources.cmake index 63ef5264bc0..ebdddbcd11d 100644 --- a/source/processes/scoring/sources.cmake +++ b/source/processes/scoring/sources.cmake @@ -3,12 +3,13 @@ # Define the Geant4 Module. geant4_add_module(G4scoring PUBLIC_HEADERS - G4EnergySplitter.hh - G4EnergySplitter.icc G4ParallelWorldProcess.hh G4ParallelWorldProcessStore.hh G4ParallelWorldScoringProcess.hh G4ScoreSplittingProcess.hh + PRIVATE_HEADERS + G4EnergySplitter.hh + G4EnergySplitter.icc SOURCES G4EnergySplitter.cc G4ParallelWorldProcess.cc @@ -20,7 +21,6 @@ geant4_module_link_libraries(G4scoring PUBLIC G4geometrymng G4globman - G4intercoms G4magneticfield G4navigation G4procman @@ -28,6 +28,7 @@ geant4_module_link_libraries(G4scoring G4cuts G4detector G4emutils + G4intercoms G4materials G4muons G4partman diff --git a/source/processes/scoring/src/G4EnergySplitter.cc b/source/processes/scoring/src/G4EnergySplitter.cc index 5ec5098348c..7524bf6b013 100644 --- a/source/processes/scoring/src/G4EnergySplitter.cc +++ b/source/processes/scoring/src/G4EnergySplitter.cc @@ -24,311 +24,320 @@ // ******************************************************************** // #include "G4EnergySplitter.hh" -#include "G4VSolid.hh" -#include "G4UnitsTable.hh" -#include "G4RegularNavigationHelper.hh" -#include "G4EnergyLossForExtrapolator.hh" + #include "G4EmCalculator.hh" +#include "G4EnergyLossForExtrapolator.hh" +#include "G4PVParameterised.hh" #include "G4PhysicalVolumeStore.hh" +#include "G4RegularNavigationHelper.hh" #include "G4Step.hh" -#include "G4PVParameterised.hh" +#include "G4UnitsTable.hh" +#include "G4VSolid.hh" //////////////////////////////////////////////////////////////////////////////// // (Description) // -// Created: -// +// Created: +// /////////////////////////////////////////////////////////////////////////////// G4EnergySplitter::G4EnergySplitter() { - theElossExt = new G4EnergyLossForExtrapolator(0); - thePhantomParam = 0; - theNIterations = 2; + theElossExt = new G4EnergyLossForExtrapolator(0); + thePhantomParam = nullptr; + theNIterations = 2; } G4EnergySplitter::~G4EnergySplitter() { - delete theElossExt; + delete theElossExt; } -G4int G4EnergySplitter::SplitEnergyInVolumes(const G4Step* aStep ) +G4int G4EnergySplitter::SplitEnergyInVolumes(const G4Step* aStep) { theEnergies.clear(); G4double edep = aStep->GetTotalEnergyDeposit(); - + #ifdef VERBOSE_ENERSPLIT G4bool verbose = 1; - if( verbose ) G4cout << "G4EnergySplitter::SplitEnergyInVolumes totalEdepo " << aStep->GetTotalEnergyDeposit() - << " Nsteps " << G4RegularNavigationHelper::Instance()->GetStepLengths().size() << G4endl; -#endif - if( G4RegularNavigationHelper::Instance()->GetStepLengths().size() == 0 || - aStep->GetTrack()->GetDefinition()->GetPDGCharge() == 0) { // we are only counting dose deposit + if (verbose) + G4cout << "G4EnergySplitter::SplitEnergyInVolumes totalEdepo " << aStep->GetTotalEnergyDeposit() + << " Nsteps " << G4RegularNavigationHelper::Instance()->GetStepLengths().size() + << G4endl; +#endif + if (G4RegularNavigationHelper::Instance()->GetStepLengths().empty() + || aStep->GetTrack()->GetDefinition()->GetPDGCharge() == 0) + { // we are only counting dose deposit return (G4int)theEnergies.size(); } - if( G4RegularNavigationHelper::Instance()->GetStepLengths().size() == 1 ) { + if (G4RegularNavigationHelper::Instance()->GetStepLengths().size() == 1) { theEnergies.push_back(edep); return (G4int)theEnergies.size(); } - if( !thePhantomParam ) GetPhantomParam(TRUE); - - if( aStep == 0 ) return FALSE; // it is 0 when called by GmScoringMgr after last event - - //----- Distribute energy deposited in voxels - std::vector< std::pair > rnsl = G4RegularNavigationHelper::Instance()->GetStepLengths(); + if (thePhantomParam == nullptr) GetPhantomParam(true); + + if (aStep == nullptr) return false; // it is 0 when called by GmScoringMgr after last event + + //----- Distribute energy deposited in voxels + std::vector> rnsl = + G4RegularNavigationHelper::Instance()->GetStepLengths(); const G4ParticleDefinition* part = aStep->GetTrack()->GetDefinition(); G4double kinEnergyPreOrig = aStep->GetPreStepPoint()->GetKineticEnergy(); G4double kinEnergyPre = kinEnergyPreOrig; - + G4double stepLength = aStep->GetStepLength(); G4double slSum = 0.; unsigned int ii; - for( ii = 0; ii < rnsl.size(); ++ii ){ + for (ii = 0; ii < rnsl.size(); ++ii) { G4double sl = rnsl[ii].second; slSum += sl; #ifdef VERBOSE_ENERSPLIT - if(verbose) G4cout << "G4EnergySplitter::SplitEnergyInVolumes"<< ii << " RN: iter1 step length geom " << sl << G4endl; + if (verbose) + G4cout << "G4EnergySplitter::SplitEnergyInVolumes" << ii << " RN: iter1 step length geom " + << sl << G4endl; #endif } - + #ifdef VERBOSE_ENERSPLIT - if( verbose ) - G4cout << "G4EnergySplitter RN: step length geom TOTAL " << slSum - << " true TOTAL " << stepLength - << " ratio " << stepLength/slSum - << " Energy " << aStep->GetPreStepPoint()->GetKineticEnergy() - << " Material " << aStep->GetPreStepPoint()->GetMaterial()->GetName() - << " Number of geom steps " << rnsl.size() << G4endl; + if (verbose) + G4cout << "G4EnergySplitter RN: step length geom TOTAL " << slSum << " true TOTAL " + << stepLength << " ratio " << stepLength / slSum << " Energy " + << aStep->GetPreStepPoint()->GetKineticEnergy() << " Material " + << aStep->GetPreStepPoint()->GetMaterial()->GetName() << " Number of geom steps " + << rnsl.size() << G4endl; #endif - //----- No iterations to correct elost and msc => distribute energy deposited according to geometrical step length in each voxel - if( theNIterations == 0 ) { - for( ii = 0; ii < rnsl.size(); ++ii ){ + //----- No iterations to correct elost and msc => distribute energy deposited according to + // geometrical step length in each voxel + if (theNIterations == 0) { + for (ii = 0; ii < rnsl.size(); ++ii) { G4double sl = rnsl[ii].second; - G4double edepStep = edep * sl/slSum; //divide edep along steps, proportional to step length + G4double edepStep = edep * sl / slSum; // divide edep along steps, proportional to step + // length #ifdef VERBOSE_ENERSPLIT - if(verbose) G4cout << "G4EnergySplitter::SplitEnergyInVolumes"<< ii - << " edep " << edepStep << G4endl; + if (verbose) + G4cout << "G4EnergySplitter::SplitEnergyInVolumes" << ii << " edep " << edepStep << G4endl; #endif - + theEnergies.push_back(edepStep); - } - } else { // 1 or more iterations demanded - + } + else { // 1 or more iterations demanded + #ifdef VERBOSE_ENERSPLIT - // print corrected energy at iteration 0 - if(verbose) { + // print corrected energy at iteration 0 + if (verbose) { G4double slSum = 0.; - for( ii = 0; ii < rnsl.size(); ++ii ){ - G4double sl = rnsl[ii].second; - slSum += sl; + for (ii = 0; ii < rnsl.size(); ++ii) { + G4double sl = rnsl[ii].second; + slSum += sl; } - for( ii = 0; ii < rnsl.size(); ii++ ){ - G4cout << "G4EnergySplitter::SplitEnergyInVolumes "<< ii - << " RN: iter0 corrected energy lost " << edep*rnsl[ii].second/slSum - << G4endl; + for (ii = 0; ii < rnsl.size(); ii++) { + G4cout << "G4EnergySplitter::SplitEnergyInVolumes " << ii + << " RN: iter0 corrected energy lost " << edep * rnsl[ii].second / slSum << G4endl; } } #endif - G4double slRatio = stepLength/slSum; + G4double slRatio = stepLength / slSum; #ifdef VERBOSE_ENERSPLIT - if(verbose) G4cout << "G4EnergySplitter::SplitEnergyInVolumes RN: iter 0, step ratio " << slRatio << G4endl; + if (verbose) + G4cout << "G4EnergySplitter::SplitEnergyInVolumes RN: iter 0, step ratio " << slRatio + << G4endl; #endif - + //--- energy at each interaction G4EmCalculator emcalc; G4double totalELost = 0.; std::vector stepLengths; - for( G4int iiter = 1; iiter <= theNIterations; ++iiter ) { - //--- iter1: distribute true step length in each voxel: geom SL in each voxel is multiplied by a constant so that the sum gives the total true step length - if( iiter == 1 ) { - for( ii = 0; ii < rnsl.size(); ++ii ){ - G4double sl = rnsl[ii].second; - stepLengths.push_back( sl * slRatio ); + for (G4int iiter = 1; iiter <= theNIterations; ++iiter) { + //--- iter1: distribute true step length in each voxel: geom SL in each voxel is multiplied by + // a constant so that the sum gives the total true step length + if (iiter == 1) { + for (ii = 0; ii < rnsl.size(); ++ii) { + G4double sl = rnsl[ii].second; + stepLengths.push_back(sl * slRatio); #ifdef VERBOSE_ENERSPLIT - if(verbose) G4cout << "G4EnergySplitter::SplitEnergyInVolumes"<< ii << " RN: iter" << iiter << " corrected step length " << sl*slRatio << G4endl; + if (verbose) + G4cout << "G4EnergySplitter::SplitEnergyInVolumes" << ii << " RN: iter" << iiter + << " corrected step length " << sl * slRatio << G4endl; #endif - } - - for( ii = 0; ii < rnsl.size(); ++ii ){ - const G4Material* mate = thePhantomParam->GetMaterial( rnsl[ii].first ); - G4double dEdx = 0.; - if( kinEnergyPre > 0. ) { //t check this - dEdx = emcalc.GetDEDX(kinEnergyPre, part, mate); - } - G4double elost = stepLengths[ii] * dEdx; - + } + + for (ii = 0; ii < rnsl.size(); ++ii) { + const G4Material* mate = thePhantomParam->GetMaterial(rnsl[ii].first); + G4double dEdx = 0.; + if (kinEnergyPre > 0.) { // t check this + dEdx = emcalc.GetDEDX(kinEnergyPre, part, mate); + } + G4double elost = stepLengths[ii] * dEdx; + #ifdef VERBOSE_ENERSPLIT - if(verbose) G4cout << "G4EnergySplitter::SplitEnergyInVolumes"<< ii << " RN: iter1 energy lost " << elost - << " energy at interaction " << kinEnergyPre - << " = stepLength " << stepLengths[ii] - << " * dEdx " << dEdx << G4endl; + if (verbose) + G4cout << "G4EnergySplitter::SplitEnergyInVolumes" << ii << " RN: iter1 energy lost " + << elost << " energy at interaction " << kinEnergyPre << " = stepLength " + << stepLengths[ii] << " * dEdx " << dEdx << G4endl; #endif - kinEnergyPre -= elost; - theEnergies.push_back( elost ); - totalELost += elost; - } - - } else{ - //------ 2nd and other iterations - //----- Get step lengths corrected by changing geom2true correction - //-- Get ratios for each energy - slSum = 0.; - kinEnergyPre = kinEnergyPreOrig; - for( ii = 0; ii < rnsl.size(); ++ii ){ - const G4Material* mate = thePhantomParam->GetMaterial( rnsl[ii].first ); - stepLengths[ii] = theElossExt->TrueStepLength( kinEnergyPre, rnsl[ii].second , mate, part ); - kinEnergyPre -= theEnergies[ii]; - + kinEnergyPre -= elost; + theEnergies.push_back(elost); + totalELost += elost; + } + } + else { + //------ 2nd and other iterations + //----- Get step lengths corrected by changing geom2true correction + //-- Get ratios for each energy + slSum = 0.; + kinEnergyPre = kinEnergyPreOrig; + for (ii = 0; ii < rnsl.size(); ++ii) { + const G4Material* mate = thePhantomParam->GetMaterial(rnsl[ii].first); + stepLengths[ii] = theElossExt->TrueStepLength(kinEnergyPre, rnsl[ii].second, mate, part); + kinEnergyPre -= theEnergies[ii]; + #ifdef VERBOSE_ENERSPLIT - if(verbose) G4cout << "G4EnergySplitter::SplitEnergyInVolumes" << ii - << " RN: iter" << iiter << " step length geom " << stepLengths[ii] - << " geom2true " << rnsl[ii].second / stepLengths[ii] << G4endl; + if (verbose) + G4cout << "G4EnergySplitter::SplitEnergyInVolumes" << ii << " RN: iter" << iiter + << " step length geom " << stepLengths[ii] << " geom2true " + << rnsl[ii].second / stepLengths[ii] << G4endl; #endif - - slSum += stepLengths[ii]; - } - - //Correct step lengths so that they sum the total step length - G4double slratio = aStep->GetStepLength()/slSum; + + slSum += stepLengths[ii]; + } + + // Correct step lengths so that they sum the total step length + G4double slratio = aStep->GetStepLength() / slSum; #ifdef VERBOSE_ENERSPLIT - if(verbose) G4cout << "G4EnergySplitter::SplitEnergyInVolumes" << ii << " RN: iter" << iiter << " step ratio " << slRatio << G4endl; + if (verbose) + G4cout << "G4EnergySplitter::SplitEnergyInVolumes" << ii << " RN: iter" << iiter + << " step ratio " << slRatio << G4endl; #endif - for( ii = 0; ii < rnsl.size(); ++ii ){ - stepLengths[ii] *= slratio; + for (ii = 0; ii < rnsl.size(); ++ii) { + stepLengths[ii] *= slratio; #ifdef VERBOSE_ENERSPLIT - if(verbose) G4cout << "G4EnergySplitter::SplitEnergyInVolumes"<< ii << " RN: iter" << iiter << " corrected step length " << stepLengths[ii] << G4endl; + if (verbose) + G4cout << "G4EnergySplitter::SplitEnergyInVolumes" << ii << " RN: iter" << iiter + << " corrected step length " << stepLengths[ii] << G4endl; #endif - } - - //---- Recalculate energy lost with this new step lengths + } + + //---- Recalculate energy lost with this new step lengths kinEnergyPre = aStep->GetPreStepPoint()->GetKineticEnergy(); - totalELost = 0.; - for( ii = 0; ii < rnsl.size(); ++ii ){ - const G4Material* mate = thePhantomParam->GetMaterial( rnsl[ii].first ); - G4double dEdx = 0.; - if( kinEnergyPre > 0. ) { - dEdx = emcalc.GetDEDX(kinEnergyPre, part, mate); - } - G4double elost = stepLengths[ii] * dEdx; + totalELost = 0.; + for (ii = 0; ii < rnsl.size(); ++ii) { + const G4Material* mate = thePhantomParam->GetMaterial(rnsl[ii].first); + G4double dEdx = 0.; + if (kinEnergyPre > 0.) { + dEdx = emcalc.GetDEDX(kinEnergyPre, part, mate); + } + G4double elost = stepLengths[ii] * dEdx; #ifdef VERBOSE_ENERSPLIT - if(verbose) G4cout << "G4EnergySplitter::SplitEnergyInVolumes"<< ii << " RN: iter" << iiter << " energy lost " << elost - << " energy at interaction " << kinEnergyPre - << " = stepLength " << stepLengths[ii] - << " * dEdx " << dEdx << G4endl; + if (verbose) + G4cout << "G4EnergySplitter::SplitEnergyInVolumes" << ii << " RN: iter" << iiter + << " energy lost " << elost << " energy at interaction " << kinEnergyPre + << " = stepLength " << stepLengths[ii] << " * dEdx " << dEdx << G4endl; #endif - kinEnergyPre -= elost; - theEnergies[ii] = elost; - totalELost += elost; - } - + kinEnergyPre -= elost; + theEnergies[ii] = elost; + totalELost += elost; + } } - - //correct energies so that they reproduce the real step energy lost - G4double enerRatio = (edep/totalELost); - + + // correct energies so that they reproduce the real step energy lost + G4double enerRatio = (edep / totalELost); + #ifdef VERBOSE_ENERSPLIT - if(verbose) G4cout << "G4EnergySplitter::SplitEnergyInVolumes"<< ii << " RN: iter" << iiter << " energy ratio " << enerRatio << G4endl; + if (verbose) + G4cout << "G4EnergySplitter::SplitEnergyInVolumes" << ii << " RN: iter" << iiter + << " energy ratio " << enerRatio << G4endl; #endif - + #ifdef VERBOSE_ENERSPLIT - G4double elostTot = 0.; + G4double elostTot = 0.; #endif - for( ii = 0; ii < theEnergies.size(); ++ii ){ - theEnergies[ii] *= enerRatio; + for (ii = 0; ii < theEnergies.size(); ++ii) { + theEnergies[ii] *= enerRatio; #ifdef VERBOSE_ENERSPLIT - elostTot += theEnergies[ii]; - if(verbose) G4cout << "G4EnergySplitter::SplitEnergyInVolumes "<< ii << " RN: iter" << iiter << " corrected energy lost " << theEnergies[ii] - << " orig elost " << theEnergies[ii]/enerRatio - << " energy before interaction " << kinEnergyPreOrig-elostTot+theEnergies[ii] - << " energy after interaction " << kinEnergyPreOrig-elostTot - << G4endl; + elostTot += theEnergies[ii]; + if (verbose) + G4cout << "G4EnergySplitter::SplitEnergyInVolumes " << ii << " RN: iter" << iiter + << " corrected energy lost " << theEnergies[ii] << " orig elost " + << theEnergies[ii] / enerRatio << " energy before interaction " + << kinEnergyPreOrig - elostTot + theEnergies[ii] << " energy after interaction " + << kinEnergyPreOrig - elostTot << G4endl; #endif } } - } - + return (G4int)theEnergies.size(); } - //----------------------------------------------------------------------- void G4EnergySplitter::GetPhantomParam(G4bool mustExist) { G4PhysicalVolumeStore* pvs = G4PhysicalVolumeStore::GetInstance(); - for( auto cite = pvs->cbegin(); cite != pvs->cend(); ++cite ) { - // G4cout << " PV " << (*cite)->GetName() << " " << (*cite)->GetTranslation() << G4endl; - if( IsPhantomVolume( *cite ) ) { - const G4PVParameterised* pvparam = static_cast(*cite); + for (const auto pv : *pvs) { + if (IsPhantomVolume(pv)) { + const auto pvparam = static_cast(pv); G4VPVParameterisation* param = pvparam->GetParameterisation(); - // if( static_cast(param) ){ - // if( static_cast(param) ){ - // G4cout << "G4PhantomParameterisation volume found " << (*cite)->GetName() << G4endl; thePhantomParam = static_cast(param); } } - - if( !thePhantomParam && mustExist ) - G4Exception("G4EnergySplitter::GetPhantomParam", - "PhantomParamError", FatalException, + + if ((thePhantomParam == nullptr) && mustExist) + G4Exception("G4EnergySplitter::GetPhantomParam", "PhantomParamError", FatalException, "No G4PhantomParameterisation found !"); } - //----------------------------------------------------------------------- -G4bool G4EnergySplitter::IsPhantomVolume( G4VPhysicalVolume* pv ) +G4bool G4EnergySplitter::IsPhantomVolume(G4VPhysicalVolume* pv) { EAxis axis; G4int nReplicas; - G4double width,offset; + G4double width, offset; G4bool consuming; - pv->GetReplicationData(axis,nReplicas,width,offset,consuming); + pv->GetReplicationData(axis, nReplicas, width, offset, consuming); EVolume type = (consuming) ? kReplica : kParameterised; - if( type == kParameterised && pv->GetRegularStructureId() == 1 ) { - return TRUE; - } else { - return FALSE; - } - -} + return type == kParameterised && pv->GetRegularStructureId() == 1; +} //----------------------------------------------------------------------- -void G4EnergySplitter::GetLastVoxelID( G4int& voxelID) -{ +void G4EnergySplitter::GetLastVoxelID(G4int& voxelID) +{ voxelID = (*(G4RegularNavigationHelper::Instance()->GetStepLengths().cbegin())).first; } //----------------------------------------------------------------------- -void G4EnergySplitter::GetFirstVoxelID( G4int& voxelID) +void G4EnergySplitter::GetFirstVoxelID(G4int& voxelID) { - voxelID = (*(G4RegularNavigationHelper::Instance()->GetStepLengths().crbegin())).first; + voxelID = (*(G4RegularNavigationHelper::Instance()->GetStepLengths().crbegin())).first; } //----------------------------------------------------------------------- -void G4EnergySplitter::GetVoxelID( G4int stepNo, G4int& voxelID ) +void G4EnergySplitter::GetVoxelID(G4int stepNo, G4int& voxelID) { - if( stepNo < 0 || stepNo >= G4int(G4RegularNavigationHelper::Instance()->GetStepLengths().size()) ) { - G4Exception("G4EnergySplitter::GetVoxelID", - "Invalid stepNo, smaller than 0 or bigger or equal to number of voxels traversed", - FatalErrorInArgument, - G4String("stepNo = " + G4UIcommand::ConvertToString(stepNo) + ", number of voxels = " + G4UIcommand::ConvertToString(G4int(G4RegularNavigationHelper::Instance()->GetStepLengths().size())) ).c_str()); + if (stepNo < 0 || stepNo >= G4int(G4RegularNavigationHelper::Instance()->GetStepLengths().size())) + { + G4Exception("G4EnergySplitter::GetVoxelID", + "Invalid stepNo, smaller than 0 or bigger or equal to number of voxels traversed", + FatalErrorInArgument, + G4String("stepNo = " + G4UIcommand::ConvertToString(stepNo) + + ", number of voxels = " + + G4UIcommand::ConvertToString( + G4int(G4RegularNavigationHelper::Instance()->GetStepLengths().size()))) + .c_str()); } - std::vector< std::pair >::const_iterator ite = G4RegularNavigationHelper::Instance()->GetStepLengths().cbegin(); - advance( ite, stepNo ); + auto ite = G4RegularNavigationHelper::Instance()->GetStepLengths().cbegin(); + advance(ite, stepNo); voxelID = (*ite).first; - } - //----------------------------------------------------------------------- -void G4EnergySplitter::GetStepLength( G4int stepNo, G4double& stepLength ) +void G4EnergySplitter::GetStepLength(G4int stepNo, G4double& stepLength) { - std::vector< std::pair >::const_iterator ite = G4RegularNavigationHelper::Instance()->GetStepLengths().cbegin(); - advance( ite, stepNo ); + auto ite = G4RegularNavigationHelper::Instance()->GetStepLengths().cbegin(); + advance(ite, stepNo); stepLength = (*ite).second; } diff --git a/source/processes/scoring/src/G4ParallelWorldProcess.cc b/source/processes/scoring/src/G4ParallelWorldProcess.cc index 7a85b24b94b..626706de065 100644 --- a/source/processes/scoring/src/G4ParallelWorldProcess.cc +++ b/source/processes/scoring/src/G4ParallelWorldProcess.cc @@ -27,44 +27,45 @@ // // -#include "G4ios.hh" #include "G4ParallelWorldProcess.hh" -#include "G4ParallelWorldProcessStore.hh" -#include "G4Step.hh" -#include "G4StepPoint.hh" + +#include "G4FieldTrackUpdator.hh" +#include "G4Material.hh" #include "G4Navigator.hh" -#include "G4VTouchable.hh" -#include "G4VPhysicalVolume.hh" +#include "G4ParallelWorldProcessStore.hh" #include "G4ParticleChange.hh" #include "G4PathFinder.hh" -#include "G4TransportationManager.hh" -#include "G4ParticleChange.hh" -#include "G4StepPoint.hh" -#include "G4FieldTrackUpdator.hh" -#include "G4Material.hh" #include "G4ProductionCuts.hh" #include "G4ProductionCutsTable.hh" -#include "G4TransportationProcessType.hh" - #include "G4SDManager.hh" +#include "G4Step.hh" +#include "G4StepPoint.hh" +#include "G4TransportationManager.hh" +#include "G4TransportationProcessType.hh" +#include "G4VPhysicalVolume.hh" #include "G4VSensitiveDetector.hh" +#include "G4VTouchable.hh" +#include "G4ios.hh" + +G4ThreadLocal G4Step* G4ParallelWorldProcess::fpHyperStep = nullptr; +G4ThreadLocal G4int G4ParallelWorldProcess::nParallelWorlds = 0; +G4ThreadLocal G4int G4ParallelWorldProcess::fNavIDHyp = 0; -G4ThreadLocal G4Step* G4ParallelWorldProcess::fpHyperStep = 0; -G4ThreadLocal G4int G4ParallelWorldProcess::nParallelWorlds = 0; -G4ThreadLocal G4int G4ParallelWorldProcess::fNavIDHyp = 0; const G4Step* G4ParallelWorldProcess::GetHyperStep() -{ return fpHyperStep; } +{ + return fpHyperStep; +} + G4int G4ParallelWorldProcess::GetHypNavigatorID() -{ return fNavIDHyp; } +{ + return fNavIDHyp; +} -G4ParallelWorldProcess:: -G4ParallelWorldProcess(const G4String& processName,G4ProcessType theType) -:G4VProcess(processName,theType),fGhostWorld(nullptr),fGhostNavigator(nullptr), - fNavigatorID(-1),fFieldTrack('0'),fGhostSafety(0.),fOnBoundary(false), - layeredMaterialFlag(false) +G4ParallelWorldProcess::G4ParallelWorldProcess(const G4String& processName, G4ProcessType theType) + : G4VProcess(processName, theType), fFieldTrack('0') { SetProcessSubType(PARALLEL_WORLD_PROCESS); - if(!fpHyperStep) fpHyperStep = new G4Step(); + if (fpHyperStep == nullptr) fpHyperStep = new G4Step(); iParallelWorld = ++nParallelWorlds; pParticleChange = &aDummyParticleChange; @@ -78,10 +79,9 @@ G4ParallelWorldProcess(const G4String& processName,G4ProcessType theType) fPathFinder = G4PathFinder::GetInstance(); fGhostWorldName = "** NotDefined **"; - G4ParallelWorldProcessStore::GetInstance()->SetParallelWorld(this,processName); + G4ParallelWorldProcessStore::GetInstance()->SetParallelWorld(this, processName); - if (verboseLevel>0) - { + if (verboseLevel > 0) { G4cout << GetProcessName() << " is created " << G4endl; } } @@ -90,15 +90,13 @@ G4ParallelWorldProcess::~G4ParallelWorldProcess() { delete fGhostStep; nParallelWorlds--; - if(nParallelWorlds==0) - { + if (nParallelWorlds == 0) { delete fpHyperStep; - fpHyperStep = 0; + fpHyperStep = nullptr; } } -void G4ParallelWorldProcess:: -SetParallelWorld(G4String parallelWorldName) +void G4ParallelWorldProcess::SetParallelWorld(G4String parallelWorldName) { fGhostWorldName = parallelWorldName; fGhostWorld = fTransportationManager->GetParallelWorld(fGhostWorldName); @@ -106,8 +104,7 @@ SetParallelWorld(G4String parallelWorldName) fGhostNavigator->SetPushVerbosity(false); } -void G4ParallelWorldProcess:: -SetParallelWorld(G4VPhysicalVolume* parallelWorld) +void G4ParallelWorldProcess::SetParallelWorld(G4VPhysicalVolume* parallelWorld) { fGhostWorldName = parallelWorld->GetName(); fGhostWorld = parallelWorld; @@ -117,15 +114,15 @@ SetParallelWorld(G4VPhysicalVolume* parallelWorld) void G4ParallelWorldProcess::StartTracking(G4Track* trk) { - if(fGhostNavigator) - { fNavigatorID = fTransportationManager->ActivateNavigator(fGhostNavigator); } - else - { - G4Exception("G4ParallelWorldProcess::StartTracking", - "ProcParaWorld000",FatalException, - "G4ParallelWorldProcess is used for tracking without having a parallel world assigned"); + if (fGhostNavigator != nullptr) { + fNavigatorID = fTransportationManager->ActivateNavigator(fGhostNavigator); } - fPathFinder->PrepareNewTrack(trk->GetPosition(),trk->GetMomentumDirection()); + else { + G4Exception( + "G4ParallelWorldProcess::StartTracking", "ProcParaWorld000", FatalException, + "G4ParallelWorldProcess is used for tracking without having a parallel world assigned"); + } + fPathFinder->PrepareNewTrack(trk->GetPosition(), trk->GetMomentumDirection()); fOldGhostTouchable = fPathFinder->CreateTouchableHandle(fNavigatorID); fGhostPreStepPoint->SetTouchableHandle(fOldGhostTouchable); @@ -137,20 +134,11 @@ void G4ParallelWorldProcess::StartTracking(G4Track* trk) fGhostPreStepPoint->SetStepStatus(fUndefined); fGhostPostStepPoint->SetStepStatus(fUndefined); -// G4VPhysicalVolume* thePhys = fNewGhostTouchable->GetVolume(); -// if(thePhys) -// { -// G4Material* ghostMaterial = thePhys->GetLogicalVolume()->GetMaterial(); -// if(ghostMaterial) -// { G4cout << " --- Material : " << ghostMaterial->GetName() << G4endl; } -// } - *(fpHyperStep->GetPostStepPoint()) = *(trk->GetStep()->GetPostStepPoint()); - if(layeredMaterialFlag) - { + if (layeredMaterialFlag) { G4StepPoint* realWorldPostStepPoint = trk->GetStep()->GetPostStepPoint(); SwitchMaterial(realWorldPostStepPoint); - G4StepPoint *realWorldPreStepPoint = trk->GetStep()->GetPreStepPoint(); + G4StepPoint* realWorldPreStepPoint = trk->GetStep()->GetPreStepPoint(); SwitchMaterial(realWorldPreStepPoint); G4double velocity = trk->CalculateVelocity(); realWorldPostStepPoint->SetVelocity(velocity); @@ -160,48 +148,44 @@ void G4ParallelWorldProcess::StartTracking(G4Track* trk) *(fpHyperStep->GetPreStepPoint()) = *(fpHyperStep->GetPostStepPoint()); } -G4double -G4ParallelWorldProcess::AtRestGetPhysicalInteractionLength( - const G4Track& /*track*/, - G4ForceCondition* condition) +G4double G4ParallelWorldProcess::AtRestGetPhysicalInteractionLength(const G4Track& /*track*/, + G4ForceCondition* condition) { -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// At Rest must be registered ONLY for the particle which has other At Rest -// process(es). -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // At Rest must be registered ONLY for the particle which has other At Rest + // process(es). + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ *condition = Forced; return DBL_MAX; } -G4VParticleChange* G4ParallelWorldProcess::AtRestDoIt( - const G4Track& track, - const G4Step& step) -{ -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// At Rest must be registered ONLY for the particle which has other At Rest -// process(es). -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +G4VParticleChange* G4ParallelWorldProcess::AtRestDoIt(const G4Track& track, const G4Step& step) +{ + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // At Rest must be registered ONLY for the particle which has other At Rest + // process(es). + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ fOldGhostTouchable = fGhostPostStepPoint->GetTouchableHandle(); - G4VSensitiveDetector* aSD = 0; - if(fOldGhostTouchable->GetVolume()) - { aSD = fOldGhostTouchable->GetVolume()->GetLogicalVolume()->GetSensitiveDetector(); } + G4VSensitiveDetector* aSD = nullptr; + if (fOldGhostTouchable->GetVolume() != nullptr) { + aSD = fOldGhostTouchable->GetVolume()->GetLogicalVolume()->GetSensitiveDetector(); + } fOnBoundary = false; - if(aSD) - { + if (aSD != nullptr) { CopyStep(step); fGhostPreStepPoint->SetSensitiveDetector(aSD); fNewGhostTouchable = fOldGhostTouchable; - + fGhostPreStepPoint->SetTouchableHandle(fOldGhostTouchable); fGhostPostStepPoint->SetTouchableHandle(fNewGhostTouchable); - if(fNewGhostTouchable->GetVolume()) - { + if (fNewGhostTouchable->GetVolume() != nullptr) { fGhostPostStepPoint->SetSensitiveDetector( fNewGhostTouchable->GetVolume()->GetLogicalVolume()->GetSensitiveDetector()); } - else - { fGhostPostStepPoint->SetSensitiveDetector(0); } + else { + fGhostPostStepPoint->SetSensitiveDetector(nullptr); + } aSD->Hit(fGhostStep); } @@ -210,144 +194,136 @@ G4VParticleChange* G4ParallelWorldProcess::AtRestDoIt( return pParticleChange; } -G4double -G4ParallelWorldProcess::PostStepGetPhysicalInteractionLength( - const G4Track& /*track*/, - G4double /*previousStepSize*/, - G4ForceCondition* condition) +G4double G4ParallelWorldProcess::PostStepGetPhysicalInteractionLength(const G4Track& /*track*/, + G4double /*previousStepSize*/, + G4ForceCondition* condition) { *condition = StronglyForced; return DBL_MAX; } -G4VParticleChange* G4ParallelWorldProcess::PostStepDoIt( - const G4Track& track, - const G4Step& step) -{ +G4VParticleChange* G4ParallelWorldProcess::PostStepDoIt(const G4Track& track, const G4Step& step) +{ fOldGhostTouchable = fGhostPostStepPoint->GetTouchableHandle(); - G4VSensitiveDetector* aSD = 0; - if(fOldGhostTouchable->GetVolume()) - { aSD = fOldGhostTouchable->GetVolume()->GetLogicalVolume()->GetSensitiveDetector(); } + G4VSensitiveDetector* aSD = nullptr; + if (fOldGhostTouchable->GetVolume() != nullptr) { + aSD = fOldGhostTouchable->GetVolume()->GetLogicalVolume()->GetSensitiveDetector(); + } CopyStep(step); fGhostPreStepPoint->SetSensitiveDetector(aSD); - if(fOnBoundary) - { + if (fOnBoundary) { fNewGhostTouchable = fPathFinder->CreateTouchableHandle(fNavigatorID); } - else - { + else { fNewGhostTouchable = fOldGhostTouchable; } - + fGhostPreStepPoint->SetTouchableHandle(fOldGhostTouchable); fGhostPostStepPoint->SetTouchableHandle(fNewGhostTouchable); - if(fNewGhostTouchable->GetVolume()) - { + if (fNewGhostTouchable->GetVolume() != nullptr) { fGhostPostStepPoint->SetSensitiveDetector( fNewGhostTouchable->GetVolume()->GetLogicalVolume()->GetSensitiveDetector()); } - else - { fGhostPostStepPoint->SetSensitiveDetector(0); } + else { + fGhostPostStepPoint->SetSensitiveDetector(nullptr); + } G4VSensitiveDetector* sd = fGhostPreStepPoint->GetSensitiveDetector(); - if(sd) - { + if (sd != nullptr) { sd->Hit(fGhostStep); } - pParticleChange->Initialize(track); - if(layeredMaterialFlag) - { - G4StepPoint* realWorldPostStepPoint = - ((G4Step*)(track.GetStep()))->GetPostStepPoint(); + pParticleChange->Initialize(track); + if (layeredMaterialFlag) { + G4StepPoint* realWorldPostStepPoint = ((G4Step*)(track.GetStep()))->GetPostStepPoint(); SwitchMaterial(realWorldPostStepPoint); } return pParticleChange; } -G4double G4ParallelWorldProcess::AlongStepGetPhysicalInteractionLength( - const G4Track& track, G4double previousStepSize, G4double currentMinimumStep, - G4double& proposedSafety, G4GPILSelection* selection) +G4double G4ParallelWorldProcess::AlongStepGetPhysicalInteractionLength(const G4Track& track, + G4double previousStepSize, + G4double currentMinimumStep, + G4double& proposedSafety, + G4GPILSelection* selection) { - static G4ThreadLocal G4FieldTrack *endTrack_G4MT_TLS_ = 0 ; if (!endTrack_G4MT_TLS_) endTrack_G4MT_TLS_ = new G4FieldTrack ('0') ; G4FieldTrack &endTrack = *endTrack_G4MT_TLS_; - //static ELimited eLimited; + static G4ThreadLocal G4FieldTrack* endTrack_G4MT_TLS_ = nullptr; + if (endTrack_G4MT_TLS_ == nullptr) endTrack_G4MT_TLS_ = new G4FieldTrack('0'); + G4FieldTrack& endTrack = *endTrack_G4MT_TLS_; + // static ELimited eLimited; ELimited eLimited; ELimited eLim = kUndefLimited; - + *selection = NotCandidateForSelection; G4double returnedStep = DBL_MAX; - if (previousStepSize > 0.) - { fGhostSafety -= previousStepSize; } + if (previousStepSize > 0.) { + fGhostSafety -= previousStepSize; + } if (fGhostSafety < 0.) fGhostSafety = 0.0; - - if (currentMinimumStep <= fGhostSafety && currentMinimumStep > 0.) - { + + if (currentMinimumStep <= fGhostSafety && currentMinimumStep > 0.) { // I have no chance to limit returnedStep = currentMinimumStep; fOnBoundary = false; proposedSafety = fGhostSafety - currentMinimumStep; eLim = kDoNot; } - else - { - G4FieldTrackUpdator::Update(&fFieldTrack,&track); - -#ifdef G4DEBUG_PARALLEL_WORLD_PROCESS - if( verboseLevel > 0 ){ - int localVerb = verboseLevel-1; - - if( localVerb == 1 ) { - G4cout << " Pll Wrl proc::AlongStepGPIL " << this->GetProcessName() << G4endl; - }else if( localVerb > 1 ) { - G4cout << "----------------------------------------------" << G4endl; - G4cout << " ParallelWorldProcess: field Track set to : " << G4endl; - G4cout << "----------------------------------------------" << G4endl; - G4cout << fFieldTrack << G4endl; - G4cout << "----------------------------------------------" << G4endl; - } + else { + G4FieldTrackUpdator::Update(&fFieldTrack, &track); + +#ifdef G4DEBUG_PARALLEL_WORLD_PROCESS + if (verboseLevel > 0) { + int localVerb = verboseLevel - 1; + + if (localVerb == 1) { + G4cout << " Pll Wrl proc::AlongStepGPIL " << this->GetProcessName() << G4endl; + } + else if (localVerb > 1) { + G4cout << "----------------------------------------------" << G4endl; + G4cout << " ParallelWorldProcess: field Track set to : " << G4endl; + G4cout << "----------------------------------------------" << G4endl; + G4cout << fFieldTrack << G4endl; + G4cout << "----------------------------------------------" << G4endl; + } } #endif - - returnedStep - = fPathFinder->ComputeStep(fFieldTrack,currentMinimumStep,fNavigatorID, - track.GetCurrentStepNumber(),fGhostSafety,eLimited, - endTrack,track.GetVolume()); - if(eLimited == kDoNot) - { + + returnedStep = fPathFinder->ComputeStep(fFieldTrack, currentMinimumStep, fNavigatorID, + track.GetCurrentStepNumber(), fGhostSafety, eLimited, + endTrack, track.GetVolume()); + if (eLimited == kDoNot) { fOnBoundary = false; - fGhostSafety = fGhostNavigator->ComputeSafety(endTrack.GetPosition()); + fGhostSafety = fGhostNavigator->ComputeSafety(endTrack.GetPosition()); } - else - { + else { fOnBoundary = true; // fGhostSafetyEnd = 0.0; // At end-point of expected step only } proposedSafety = fGhostSafety; - if(eLimited == kUnique || eLimited == kSharedOther) { - *selection = CandidateForSelection; + if (eLimited == kUnique || eLimited == kSharedOther) { + *selection = CandidateForSelection; } - else if (eLimited == kSharedTransport) { - returnedStep *= (1.0 + 1.0e-9); + else if (eLimited == kSharedTransport) { + returnedStep *= (1.0 + 1.0e-9); } eLim = eLimited; } - if(iParallelWorld==nParallelWorlds) fNavIDHyp = 0; - if(eLim == kUnique || eLim == kSharedOther) fNavIDHyp = fNavigatorID; + if (iParallelWorld == nParallelWorlds) fNavIDHyp = 0; + if (eLim == kUnique || eLim == kSharedOther) fNavIDHyp = fNavigatorID; return returnedStep; } -G4VParticleChange* G4ParallelWorldProcess::AlongStepDoIt( - const G4Track& track, const G4Step& ) +G4VParticleChange* G4ParallelWorldProcess::AlongStepDoIt(const G4Track& track, const G4Step&) { pParticleChange->Initialize(track); - return pParticleChange; + return pParticleChange; } -void G4ParallelWorldProcess::CopyStep(const G4Step & step) +void G4ParallelWorldProcess::CopyStep(const G4Step& step) { G4StepStatus prevStat = fGhostPostStepPoint->GetStepStatus(); @@ -362,13 +338,14 @@ void G4ParallelWorldProcess::CopyStep(const G4Step & step) *fGhostPostStepPoint = *(step.GetPostStepPoint()); fGhostPreStepPoint->SetStepStatus(prevStat); - if(fOnBoundary) - { fGhostPostStepPoint->SetStepStatus(fGeomBoundary); } - else if(fGhostPostStepPoint->GetStepStatus()==fGeomBoundary) - { fGhostPostStepPoint->SetStepStatus(fPostStepDoItProc); } + if (fOnBoundary) { + fGhostPostStepPoint->SetStepStatus(fGeomBoundary); + } + else if (fGhostPostStepPoint->GetStepStatus() == fGeomBoundary) { + fGhostPostStepPoint->SetStepStatus(fPostStepDoItProc); + } - if(iParallelWorld==1) - { + if (iParallelWorld == 1) { G4StepStatus prevStatHyp = fpHyperStep->GetPostStepPoint()->GetStepStatus(); fpHyperStep->SetTrack(step.GetTrack()); @@ -379,49 +356,42 @@ void G4ParallelWorldProcess::CopyStep(const G4Step & step) *(fpHyperStep->GetPreStepPoint()) = *(fpHyperStep->GetPostStepPoint()); *(fpHyperStep->GetPostStepPoint()) = *(step.GetPostStepPoint()); - + fpHyperStep->GetPreStepPoint()->SetStepStatus(prevStatHyp); } - if(fOnBoundary) - { fpHyperStep->GetPostStepPoint()->SetStepStatus(fGeomBoundary); } + if (fOnBoundary) { + fpHyperStep->GetPostStepPoint()->SetStepStatus(fGeomBoundary); + } } void G4ParallelWorldProcess::SwitchMaterial(G4StepPoint* realWorldStepPoint) { - if(realWorldStepPoint->GetStepStatus()==fWorldBoundary) return; + if (realWorldStepPoint->GetStepStatus() == fWorldBoundary) return; G4VPhysicalVolume* thePhys = fNewGhostTouchable->GetVolume(); - if(thePhys) - { + if (thePhys != nullptr) { G4Material* ghostMaterial = thePhys->GetLogicalVolume()->GetMaterial(); - if(ghostMaterial) - { + if (ghostMaterial != nullptr) { G4Region* ghostRegion = thePhys->GetLogicalVolume()->GetRegion(); - G4ProductionCuts* prodCuts = - realWorldStepPoint->GetMaterialCutsCouple()->GetProductionCuts(); - if(ghostRegion) - { + G4ProductionCuts* prodCuts = realWorldStepPoint->GetMaterialCutsCouple()->GetProductionCuts(); + if (ghostRegion != nullptr) { G4ProductionCuts* ghostProdCuts = ghostRegion->GetProductionCuts(); - if(ghostProdCuts) prodCuts = ghostProdCuts; + if (ghostProdCuts != nullptr) prodCuts = ghostProdCuts; } const G4MaterialCutsCouple* ghostMCCouple = - G4ProductionCutsTable::GetProductionCutsTable() - ->GetMaterialCutsCouple(ghostMaterial,prodCuts); - if(ghostMCCouple) - { + G4ProductionCutsTable::GetProductionCutsTable()->GetMaterialCutsCouple(ghostMaterial, + prodCuts); + if (ghostMCCouple != nullptr) { realWorldStepPoint->SetMaterial(ghostMaterial); realWorldStepPoint->SetMaterialCutsCouple(ghostMCCouple); *(fpHyperStep->GetPostStepPoint()) = *(fGhostPostStepPoint); fpHyperStep->GetPostStepPoint()->SetMaterial(ghostMaterial); fpHyperStep->GetPostStepPoint()->SetMaterialCutsCouple(ghostMCCouple); } - else - { - G4cout << "!!! MaterialCutsCouple is not found for " - << ghostMaterial->GetName() << "." << G4endl - << " Material in real world (" - << realWorldStepPoint->GetMaterial()->GetName() - << ") is used." << G4endl; + else { + G4cout << "!!! MaterialCutsCouple is not found for " << ghostMaterial->GetName() << "." + << G4endl << " Material in real world (" + << realWorldStepPoint->GetMaterial()->GetName() << ") is used." << G4endl; } } } @@ -430,19 +400,16 @@ void G4ParallelWorldProcess::SwitchMaterial(G4StepPoint* realWorldStepPoint) G4bool G4ParallelWorldProcess::IsAtRestRequired(G4ParticleDefinition* partDef) { G4int pdgCode = partDef->GetPDGEncoding(); - if(pdgCode==0) - { + if (pdgCode == 0) { G4String partName = partDef->GetParticleName(); - if(partName=="geantino") return false; - if(partName=="chargedgeantino") return false; + if (partName == "geantino") return false; + if (partName == "chargedgeantino") return false; } - else - { - if(pdgCode==11 || pdgCode==2212) return false; // electrons and proton + else { + if (pdgCode == 11 || pdgCode == 2212) return false; // electrons and proton pdgCode = std::abs(pdgCode); - if(pdgCode==22) return false; // gamma and optical photons - if(pdgCode==12 || pdgCode==14 || pdgCode==16) return false; // all neutronos + if (pdgCode == 22) return false; // gamma and optical photons + if (pdgCode == 12 || pdgCode == 14 || pdgCode == 16) return false; // all neutronos } return true; } - diff --git a/source/processes/scoring/src/G4ParallelWorldProcessStore.cc b/source/processes/scoring/src/G4ParallelWorldProcessStore.cc index 12a446efe4b..86a3999db68 100644 --- a/source/processes/scoring/src/G4ParallelWorldProcessStore.cc +++ b/source/processes/scoring/src/G4ParallelWorldProcessStore.cc @@ -28,14 +28,16 @@ // #include "G4ParallelWorldProcessStore.hh" + #include "G4ParallelWorldProcess.hh" -G4ThreadLocal G4ParallelWorldProcessStore* G4ParallelWorldProcessStore::fInstance=0; +G4ThreadLocal G4ParallelWorldProcessStore* G4ParallelWorldProcessStore::fInstance = nullptr; G4ParallelWorldProcessStore* G4ParallelWorldProcessStore::GetInstance() { - if(!fInstance) - { fInstance = new G4ParallelWorldProcessStore(); } + if (fInstance == nullptr) { + fInstance = new G4ParallelWorldProcessStore(); + } return fInstance; } @@ -44,35 +46,30 @@ G4ParallelWorldProcessStore* G4ParallelWorldProcessStore::GetInstanceIfExist() return fInstance; } -G4ParallelWorldProcessStore::G4ParallelWorldProcessStore() -{;} +G4ParallelWorldProcessStore::G4ParallelWorldProcessStore() = default; G4ParallelWorldProcessStore::~G4ParallelWorldProcessStore() { - Clear(); - fInstance = 0; + Clear(); + fInstance = nullptr; } void G4ParallelWorldProcessStore::SetParallelWorld(G4ParallelWorldProcess* proc, - G4String parallelWorldName) + G4String parallelWorldName) { - std::map::iterator itr; - for(itr=fInstance->begin();itr!=fInstance->end();itr++) + for (const auto& [process, name] : *fInstance) { - if(itr->first==proc) - { - if(itr->second==parallelWorldName) - { // already registered - return; - } - else - { // insonsistent ! - G4ExceptionDescription ED; - ED << "G4ParallelWorldProcess (" << proc << ") has the world volume (" - << itr->second << "). It is inconsistent with (" << parallelWorldName << ")."; - G4Exception("G4ParallelWorldProcessStore::SetParallelWorld","ProcScore0101", - FatalException,ED); + if(process == proc) { + if(name == parallelWorldName) { + return; // already registered } + + // inconsistent ! + G4ExceptionDescription ED; + ED << "G4ParallelWorldProcess (" << proc << ") has the world volume (" << name + << "). It is inconsistent with (" << parallelWorldName << ")."; + G4Exception("G4ParallelWorldProcessStore::SetParallelWorld", "ProcScore0101", FatalException, + ED); } } (*fInstance)[proc] = parallelWorldName; @@ -80,19 +77,22 @@ void G4ParallelWorldProcessStore::SetParallelWorld(G4ParallelWorldProcess* proc, void G4ParallelWorldProcessStore::UpdateWorlds() { - std::map::iterator itr; - for(itr=fInstance->begin();itr!=fInstance->end();itr++) - { (itr->first)->SetParallelWorld(itr->second); } + for(auto& [process, name] : *fInstance) + { + process->SetParallelWorld(name); + } } G4ParallelWorldProcess* G4ParallelWorldProcessStore::GetProcess(G4String parallelWorldName) { - std::map::iterator itr; - for(itr=fInstance->begin();itr!=fInstance->end();itr++) - { if(itr->second==parallelWorldName) return itr->first; } - return 0; + for(const auto& [proc, name] : *fInstance) + { + if (name == parallelWorldName) return proc; + } + return nullptr; } void G4ParallelWorldProcessStore::Clear() -{ fInstance->clear(); } - +{ + fInstance->clear(); +} diff --git a/source/processes/scoring/src/G4ParallelWorldScoringProcess.cc b/source/processes/scoring/src/G4ParallelWorldScoringProcess.cc index 3caf3a8ee50..5c2716a1bc7 100644 --- a/source/processes/scoring/src/G4ParallelWorldScoringProcess.cc +++ b/source/processes/scoring/src/G4ParallelWorldScoringProcess.cc @@ -29,29 +29,27 @@ #include "G4ParallelWorldScoringProcess.hh" -#include "G4ios.hh" -#include "G4SystemOfUnits.hh" -#include "G4Step.hh" +#include "G4FieldTrackUpdator.hh" #include "G4Navigator.hh" -#include "G4VTouchable.hh" -#include "G4VPhysicalVolume.hh" -#include "G4ParticleChange.hh" -#include "G4PathFinder.hh" -#include "G4TransportationManager.hh" #include "G4ParticleChange.hh" -#include "G4StepPoint.hh" -#include "G4FieldTrackUpdator.hh" #include "G4ParticleDefinition.hh" - +#include "G4PathFinder.hh" #include "G4SDManager.hh" +#include "G4Step.hh" +#include "G4StepPoint.hh" +#include "G4SystemOfUnits.hh" +#include "G4TransportationManager.hh" +#include "G4VPhysicalVolume.hh" #include "G4VSensitiveDetector.hh" +#include "G4VTouchable.hh" +#include "G4ios.hh" //-------------------------------- // Constructor with name and type: //-------------------------------- -G4ParallelWorldScoringProcess:: -G4ParallelWorldScoringProcess(const G4String& processName,G4ProcessType theType) -:G4VProcess(processName,theType), fGhostNavigator(0), fNavigatorID(-1), fFieldTrack('0') +G4ParallelWorldScoringProcess::G4ParallelWorldScoringProcess(const G4String& processName, + G4ProcessType theType) + : G4VProcess(processName, theType), fFieldTrack('0') { pParticleChange = &aDummyParticleChange; @@ -62,12 +60,11 @@ G4ParallelWorldScoringProcess(const G4String& processName,G4ProcessType theType) fTransportationManager = G4TransportationManager::GetTransportationManager(); fPathFinder = G4PathFinder::GetInstance(); - fGhostWorld = 0; + fGhostWorld = nullptr; fGhostSafety = 0.; fOnBoundary = false; - if (verboseLevel>0) - { + if (verboseLevel > 0) { G4cout << GetProcessName() << " is created " << G4endl; } } @@ -82,54 +79,48 @@ G4ParallelWorldScoringProcess::~G4ParallelWorldScoringProcess() //------------------------------------------------------ // -// SetParallelWorld +// SetParallelWorld // //------------------------------------------------------ -void G4ParallelWorldScoringProcess:: -SetParallelWorld(G4String parallelWorldName) +void G4ParallelWorldScoringProcess::SetParallelWorld(G4String parallelWorldName) { -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// Get pointers of the parallel world and its navigator -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // Get pointers of the parallel world and its navigator + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ fGhostWorldName = parallelWorldName; fGhostWorld = fTransportationManager->GetParallelWorld(fGhostWorldName); fGhostNavigator = fTransportationManager->GetNavigator(fGhostWorld); -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ } -void G4ParallelWorldScoringProcess:: -SetParallelWorld(G4VPhysicalVolume* parallelWorld) +void G4ParallelWorldScoringProcess::SetParallelWorld(G4VPhysicalVolume* parallelWorld) { -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// Get pointer of navigator -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // Get pointer of navigator + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ fGhostWorldName = parallelWorld->GetName(); fGhostWorld = parallelWorld; fGhostNavigator = fTransportationManager->GetNavigator(fGhostWorld); -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ } -G4bool G4ParallelWorldScoringProcess:: -IsAtRestRequired(G4ParticleDefinition* partDef) +G4bool G4ParallelWorldScoringProcess::IsAtRestRequired(G4ParticleDefinition* partDef) { G4int pdgCode = partDef->GetPDGEncoding(); - if(pdgCode==0) - { + if (pdgCode == 0) { G4String partName = partDef->GetParticleName(); - if(partName=="geantino") return false; - if(partName=="chargedgeantino") return false; + if (partName == "geantino") return false; + if (partName == "chargedgeantino") return false; } - else - { - if(pdgCode==11 || pdgCode==2212) return false; // electrons and proton + else { + if (pdgCode == 11 || pdgCode == 2212) return false; // electrons and proton pdgCode = std::abs(pdgCode); - if(pdgCode==22) return false; // gamma and optical photons - if(pdgCode==12 || pdgCode==14 || pdgCode==16) return false; // all neutronos + if (pdgCode == 22) return false; // gamma and optical photons + if (pdgCode == 12 || pdgCode == 14 || pdgCode == 16) return false; // all neutronos } return true; } - //------------------------------------------------------ // // StartTracking @@ -137,36 +128,26 @@ IsAtRestRequired(G4ParticleDefinition* partDef) //------------------------------------------------------ void G4ParallelWorldScoringProcess::StartTracking(G4Track* trk) { -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// Activate navigator and get the navigator ID -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// G4cout << " G4ParallelWorldScoringProcess::StartTracking" << G4endl; - if(fGhostNavigator) - { fNavigatorID = fTransportationManager->ActivateNavigator(fGhostNavigator); } - else - { - G4Exception("G4ParallelWorldScoringProcess::StartTracking", - "ProcParaWorld000",FatalException, - "G4ParallelWorldScoringProcess is used for tracking without having a parallel world assigned"); - } -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -// G4cout << "G4ParallelWorldScoringProcess::StartTracking <<<<<<<<<<<<<<<<<< " << G4endl; -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// Let PathFinder initialize -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - fPathFinder->PrepareNewTrack(trk->GetPosition(),trk->GetMomentumDirection()); -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// Setup initial touchables for the first step -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // Activate navigator and get the navigator ID + if (fGhostNavigator != nullptr) { + fNavigatorID = fTransportationManager->ActivateNavigator(fGhostNavigator); + } + else { + G4Exception("G4ParallelWorldScoringProcess::StartTracking", "ProcParaWorld000", FatalException, + "G4ParallelWorldScoringProcess is used for tracking without having a parallel " + "world assigned"); + } + + // Let PathFinder initialize + fPathFinder->PrepareNewTrack(trk->GetPosition(), trk->GetMomentumDirection()); + + // Setup initial touchables for the first step fOldGhostTouchable = fPathFinder->CreateTouchableHandle(fNavigatorID); fGhostPreStepPoint->SetTouchableHandle(fOldGhostTouchable); fNewGhostTouchable = fOldGhostTouchable; fGhostPostStepPoint->SetTouchableHandle(fNewGhostTouchable); - // Initialize + // Initialize fGhostSafety = -1.; fOnBoundary = false; fGhostPreStepPoint->SetStepStatus(fUndefined); @@ -178,10 +159,9 @@ void G4ParallelWorldScoringProcess::StartTracking(G4Track* trk) // AtRestGetPhysicalInteractionLength() // //---------------------------------------------------------- -G4double -G4ParallelWorldScoringProcess::AtRestGetPhysicalInteractionLength( - const G4Track& /*track*/, - G4ForceCondition* condition) +G4double +G4ParallelWorldScoringProcess::AtRestGetPhysicalInteractionLength(const G4Track& /*track*/, + G4ForceCondition* condition) { *condition = Forced; return DBL_MAX; @@ -192,35 +172,34 @@ G4ParallelWorldScoringProcess::AtRestGetPhysicalInteractionLength( // AtRestDoIt() // //------------------------------------ -G4VParticleChange* G4ParallelWorldScoringProcess::AtRestDoIt( - const G4Track& track, - const G4Step& step) -{ +G4VParticleChange* G4ParallelWorldScoringProcess::AtRestDoIt(const G4Track& track, + const G4Step& step) +{ fOldGhostTouchable = fGhostPostStepPoint->GetTouchableHandle(); - G4VSensitiveDetector* aSD = 0; - if(fOldGhostTouchable->GetVolume()) - { aSD = fOldGhostTouchable->GetVolume()->GetLogicalVolume()->GetSensitiveDetector(); } + G4VSensitiveDetector* aSD = nullptr; + if (fOldGhostTouchable->GetVolume() != nullptr) { + aSD = fOldGhostTouchable->GetVolume()->GetLogicalVolume()->GetSensitiveDetector(); + } fOnBoundary = false; CopyStep(step); fGhostPreStepPoint->SetSensitiveDetector(aSD); fNewGhostTouchable = fOldGhostTouchable; - + fGhostPreStepPoint->SetTouchableHandle(fOldGhostTouchable); fGhostPostStepPoint->SetTouchableHandle(fNewGhostTouchable); - if(fNewGhostTouchable->GetVolume()) - { + if (fNewGhostTouchable->GetVolume() != nullptr) { fGhostPostStepPoint->SetSensitiveDetector( fNewGhostTouchable->GetVolume()->GetLogicalVolume()->GetSensitiveDetector()); } - else - { fGhostPostStepPoint->SetSensitiveDetector(0); } + else { + fGhostPostStepPoint->SetSensitiveDetector(nullptr); + } - if (verboseLevel>1) Verbose(step); + if (verboseLevel > 1) Verbose(step); G4VSensitiveDetector* sd = fGhostPreStepPoint->GetSensitiveDetector(); - if(sd) - { + if (sd != nullptr) { sd->Hit(fGhostStep); } @@ -233,11 +212,8 @@ G4VParticleChange* G4ParallelWorldScoringProcess::AtRestDoIt( // PostStepGetPhysicalInteractionLength() // //---------------------------------------------------------- -G4double -G4ParallelWorldScoringProcess::PostStepGetPhysicalInteractionLength( - const G4Track& /*track*/, - G4double /*previousStepSize*/, - G4ForceCondition* condition) +G4double G4ParallelWorldScoringProcess::PostStepGetPhysicalInteractionLength( + const G4Track& /*track*/, G4double /*previousStepSize*/, G4ForceCondition* condition) { // I must be invoked anyway to score the hit. *condition = StronglyForced; @@ -249,130 +225,102 @@ G4ParallelWorldScoringProcess::PostStepGetPhysicalInteractionLength( // PostStepDoIt() // //------------------------------------ -G4VParticleChange* G4ParallelWorldScoringProcess::PostStepDoIt( - const G4Track& track, - const G4Step& step) -{ +G4VParticleChange* G4ParallelWorldScoringProcess::PostStepDoIt(const G4Track& track, + const G4Step& step) +{ fOldGhostTouchable = fGhostPostStepPoint->GetTouchableHandle(); - G4VSensitiveDetector* aSD = 0; - if(fOldGhostTouchable->GetVolume()) - { aSD = fOldGhostTouchable->GetVolume()->GetLogicalVolume()->GetSensitiveDetector(); } + G4VSensitiveDetector* aSD = nullptr; + if (fOldGhostTouchable->GetVolume() != nullptr) { + aSD = fOldGhostTouchable->GetVolume()->GetLogicalVolume()->GetSensitiveDetector(); + } CopyStep(step); fGhostPreStepPoint->SetSensitiveDetector(aSD); - // fPathFinder->Locate( track.GetPosition(), - // track.GetMomentumDirection(), - // true); - - // fPathFinder->Locate(step.GetPostStepPoint()->GetPosition(), - // step.GetPostStepPoint()->GetMomentumDirection()); - - if(fOnBoundary) - { -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// Locate the point and get new touchable -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - //?? fPathFinder->Locate(step.GetPostStepPoint()->GetPosition(), - //?? step.GetPostStepPoint()->GetMomentumDirection()); + if (fOnBoundary) { + // Locate the point and get new touchable fNewGhostTouchable = fPathFinder->CreateTouchableHandle(fNavigatorID); -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ } - else - { -// Do I need this ?????????????????????????????????????????????????????????? -// fGhostNavigator->LocateGlobalPointWithinVolume(track.GetPosition()); -// ????????????????????????????????????????????????????????????????????????? - - // fPathFinder->ReLocate(track.GetPosition()); - + else { // reuse the touchable fNewGhostTouchable = fOldGhostTouchable; } - + fGhostPreStepPoint->SetTouchableHandle(fOldGhostTouchable); fGhostPostStepPoint->SetTouchableHandle(fNewGhostTouchable); - if(fNewGhostTouchable->GetVolume()) - { + if (fNewGhostTouchable->GetVolume() != nullptr) { fGhostPostStepPoint->SetSensitiveDetector( fNewGhostTouchable->GetVolume()->GetLogicalVolume()->GetSensitiveDetector()); } - else - { fGhostPostStepPoint->SetSensitiveDetector(0); } + else { + fGhostPostStepPoint->SetSensitiveDetector(nullptr); + } - if (verboseLevel>1) Verbose(step); + if (verboseLevel > 1) Verbose(step); G4VSensitiveDetector* sd = fGhostPreStepPoint->GetSensitiveDetector(); - if(sd) - { + if (sd != nullptr) { sd->Hit(fGhostStep); } - pParticleChange->Initialize(track); // Does not change the track properties + pParticleChange->Initialize(track); // Does not change the track properties return pParticleChange; } - //--------------------------------------- // // AlongStepGetPhysicalInteractionLength // //--------------------------------------- G4double G4ParallelWorldScoringProcess::AlongStepGetPhysicalInteractionLength( - const G4Track& track, G4double previousStepSize, G4double currentMinimumStep, - G4double& proposedSafety, G4GPILSelection* selection) + const G4Track& track, G4double previousStepSize, G4double currentMinimumStep, + G4double& proposedSafety, G4GPILSelection* selection) { - static G4ThreadLocal G4FieldTrack *endTrack_G4MT_TLS_ = 0 ; if (!endTrack_G4MT_TLS_) endTrack_G4MT_TLS_ = new G4FieldTrack ('0') ; G4FieldTrack &endTrack = *endTrack_G4MT_TLS_; - static G4ThreadLocal ELimited *eLimited_G4MT_TLS_ = 0 ; if (!eLimited_G4MT_TLS_) eLimited_G4MT_TLS_ = new ELimited ; ELimited &eLimited = *eLimited_G4MT_TLS_; - + static G4ThreadLocal G4FieldTrack* endTrack_G4MT_TLS_ = nullptr; + if (endTrack_G4MT_TLS_ == nullptr) endTrack_G4MT_TLS_ = new G4FieldTrack('0'); + G4FieldTrack& endTrack = *endTrack_G4MT_TLS_; + static G4ThreadLocal ELimited* eLimited_G4MT_TLS_ = nullptr; + if (eLimited_G4MT_TLS_ == nullptr) eLimited_G4MT_TLS_ = new ELimited; + ELimited& eLimited = *eLimited_G4MT_TLS_; + *selection = NotCandidateForSelection; G4double returnedStep = DBL_MAX; - if (previousStepSize > 0.) - { fGhostSafety -= previousStepSize; } -// else -// { fGhostSafety = -1.; } + if (previousStepSize > 0.) { + fGhostSafety -= previousStepSize; + } if (fGhostSafety < 0.) fGhostSafety = 0.0; - - // ------------------------------------------ + // Determination of the proposed STEP LENGTH: - // ------------------------------------------ - if (currentMinimumStep <= fGhostSafety && currentMinimumStep > 0.) - { + if (currentMinimumStep <= fGhostSafety && currentMinimumStep > 0.) { // I have no chance to limit returnedStep = currentMinimumStep; fOnBoundary = false; proposedSafety = fGhostSafety - currentMinimumStep; } - else // (currentMinimumStep > fGhostSafety: I may limit the Step) + else // (currentMinimumStep > fGhostSafety: I may limit the Step) { - G4FieldTrackUpdator::Update(&fFieldTrack,&track); -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// ComputeStep -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - returnedStep - = fPathFinder->ComputeStep(fFieldTrack,currentMinimumStep,fNavigatorID, - track.GetCurrentStepNumber(),fGhostSafety,eLimited, - endTrack,track.GetVolume()); -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - if(eLimited == kDoNot) - { + G4FieldTrackUpdator::Update(&fFieldTrack, &track); + // ComputeStep + returnedStep = fPathFinder->ComputeStep(fFieldTrack, currentMinimumStep, fNavigatorID, + track.GetCurrentStepNumber(), fGhostSafety, eLimited, + endTrack, track.GetVolume()); + if (eLimited == kDoNot) { // Track is not on the boundary fOnBoundary = false; fGhostSafety = fGhostNavigator->ComputeSafety(endTrack.GetPosition()); } - else - { + else { // Track is on the boundary fOnBoundary = true; - // fEndGhostSafety = 0.0; // Will apply at the end of the step ... } proposedSafety = fGhostSafety; - if(eLimited == kUnique || eLimited == kSharedOther) { - *selection = CandidateForSelection; - }else if (eLimited == kSharedTransport) { - returnedStep *= (1.0 + 1.0e-9); - // Expand to disable its selection in Step Manager comparison + if (eLimited == kUnique || eLimited == kSharedOther) { + *selection = CandidateForSelection; + } + else if (eLimited == kSharedTransport) { + returnedStep *= (1.0 + 1.0e-9); + // Expand to disable its selection in Step Manager comparison } } @@ -384,17 +332,15 @@ G4double G4ParallelWorldScoringProcess::AlongStepGetPhysicalInteractionLength( return returnedStep; } -G4VParticleChange* G4ParallelWorldScoringProcess::AlongStepDoIt( - const G4Track& track, const G4Step& ) +G4VParticleChange* G4ParallelWorldScoringProcess::AlongStepDoIt(const G4Track& track, const G4Step&) { // Dummy ParticleChange ie: does nothing // Expecting G4Transportation to move the track pParticleChange->Initialize(track); - return pParticleChange; + return pParticleChange; } - -void G4ParallelWorldScoringProcess::CopyStep(const G4Step & step) +void G4ParallelWorldScoringProcess::CopyStep(const G4Step& step) { G4StepStatus prevStat = fGhostPostStepPoint->GetStepStatus(); @@ -407,75 +353,77 @@ void G4ParallelWorldScoringProcess::CopyStep(const G4Step & step) *fGhostPreStepPoint = *(step.GetPreStepPoint()); *fGhostPostStepPoint = *(step.GetPostStepPoint()); -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// Set StepStatus for ghost world -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + // Set StepStatus for ghost world fGhostPreStepPoint->SetStepStatus(prevStat); - if(fOnBoundary) - { fGhostPostStepPoint->SetStepStatus(fGeomBoundary); } - else if(fGhostPostStepPoint->GetStepStatus()==fGeomBoundary) - { fGhostPostStepPoint->SetStepStatus(fPostStepDoItProc); } -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + if (fOnBoundary) { + fGhostPostStepPoint->SetStepStatus(fGeomBoundary); + } + else if (fGhostPostStepPoint->GetStepStatus() == fGeomBoundary) { + fGhostPostStepPoint->SetStepStatus(fPostStepDoItProc); + } } void G4ParallelWorldScoringProcess::Verbose(const G4Step& step) const { G4cout << "In mass geometry ------------------------------------------------" << G4endl; - G4cout << " StepLength : " << step.GetStepLength()/mm << " TotalEnergyDeposit : " - << step.GetTotalEnergyDeposit()/MeV << G4endl; - G4cout << " PreStepPoint : " - << step.GetPreStepPoint()->GetPhysicalVolume()->GetName() << " - "; - if(step.GetPreStepPoint()->GetProcessDefinedStep()) - { G4cout << step.GetPreStepPoint()->GetProcessDefinedStep()->GetProcessName(); } - else - { G4cout << "NoProcessAssigned"; } + G4cout << " StepLength : " << step.GetStepLength() / mm + << " TotalEnergyDeposit : " << step.GetTotalEnergyDeposit() / MeV << G4endl; + G4cout << " PreStepPoint : " << step.GetPreStepPoint()->GetPhysicalVolume()->GetName() << " - "; + if (step.GetPreStepPoint()->GetProcessDefinedStep() != nullptr) { + G4cout << step.GetPreStepPoint()->GetProcessDefinedStep()->GetProcessName(); + } + else { + G4cout << "NoProcessAssigned"; + } G4cout << G4endl; G4cout << " " << step.GetPreStepPoint()->GetPosition() << G4endl; G4cout << " PostStepPoint : "; - if(step.GetPostStepPoint()->GetPhysicalVolume()) - { G4cout << step.GetPostStepPoint()->GetPhysicalVolume()->GetName(); } - else - { G4cout << "OutOfWorld"; } + if (step.GetPostStepPoint()->GetPhysicalVolume() != nullptr) { + G4cout << step.GetPostStepPoint()->GetPhysicalVolume()->GetName(); + } + else { + G4cout << "OutOfWorld"; + } G4cout << " - "; - if(step.GetPostStepPoint()->GetProcessDefinedStep()) - { G4cout << step.GetPostStepPoint()->GetProcessDefinedStep()->GetProcessName(); } - else - { G4cout << "NoProcessAssigned"; } + if (step.GetPostStepPoint()->GetProcessDefinedStep() != nullptr) { + G4cout << step.GetPostStepPoint()->GetProcessDefinedStep()->GetProcessName(); + } + else { + G4cout << "NoProcessAssigned"; + } G4cout << G4endl; G4cout << " " << step.GetPostStepPoint()->GetPosition() << G4endl; G4cout << "In ghost geometry ------------------------------------------------" << G4endl; - G4cout << " StepLength : " << fGhostStep->GetStepLength()/mm - << " TotalEnergyDeposit : " - << fGhostStep->GetTotalEnergyDeposit()/MeV << G4endl; - G4cout << " PreStepPoint : " - << fGhostStep->GetPreStepPoint()->GetPhysicalVolume()->GetName() << " [" - << fGhostStep->GetPreStepPoint()->GetTouchable()->GetReplicaNumber() - << " ]" << " - "; - if(fGhostStep->GetPreStepPoint()->GetProcessDefinedStep()) - { G4cout << fGhostStep->GetPreStepPoint()->GetProcessDefinedStep()->GetProcessName(); } - else - { G4cout << "NoProcessAssigned"; } + G4cout << " StepLength : " << fGhostStep->GetStepLength() / mm + << " TotalEnergyDeposit : " << fGhostStep->GetTotalEnergyDeposit() / MeV << G4endl; + G4cout << " PreStepPoint : " << fGhostStep->GetPreStepPoint()->GetPhysicalVolume()->GetName() + << " [" << fGhostStep->GetPreStepPoint()->GetTouchable()->GetReplicaNumber() << " ]" + << " - "; + if (fGhostStep->GetPreStepPoint()->GetProcessDefinedStep() != nullptr) { + G4cout << fGhostStep->GetPreStepPoint()->GetProcessDefinedStep()->GetProcessName(); + } + else { + G4cout << "NoProcessAssigned"; + } G4cout << G4endl; G4cout << " " << fGhostStep->GetPreStepPoint()->GetPosition() << G4endl; G4cout << " PostStepPoint : "; - if(fGhostStep->GetPostStepPoint()->GetPhysicalVolume()) - { + if (fGhostStep->GetPostStepPoint()->GetPhysicalVolume() != nullptr) { G4cout << fGhostStep->GetPostStepPoint()->GetPhysicalVolume()->GetName() << " [" - << fGhostStep->GetPostStepPoint()->GetTouchable()->GetReplicaNumber() - << " ]"; + << fGhostStep->GetPostStepPoint()->GetTouchable()->GetReplicaNumber() << " ]"; + } + else { + G4cout << "OutOfWorld"; } - else - { G4cout << "OutOfWorld"; } G4cout << " - "; - if(fGhostStep->GetPostStepPoint()->GetProcessDefinedStep()) - { G4cout << fGhostStep->GetPostStepPoint()->GetProcessDefinedStep()->GetProcessName(); } - else - { G4cout << "NoProcessAssigned"; } + if (fGhostStep->GetPostStepPoint()->GetProcessDefinedStep() != nullptr) { + G4cout << fGhostStep->GetPostStepPoint()->GetProcessDefinedStep()->GetProcessName(); + } + else { + G4cout << "NoProcessAssigned"; + } G4cout << G4endl; - G4cout << " " << fGhostStep->GetPostStepPoint()->GetPosition() << " == " - << fGhostStep->GetTrack()->GetMomentumDirection() - << G4endl; - + G4cout << " " << fGhostStep->GetPostStepPoint()->GetPosition() + << " == " << fGhostStep->GetTrack()->GetMomentumDirection() << G4endl; } - diff --git a/source/processes/scoring/src/G4ScoreSplittingProcess.cc b/source/processes/scoring/src/G4ScoreSplittingProcess.cc index c5f083fabb2..3b6dbae0ecc 100644 --- a/source/processes/scoring/src/G4ScoreSplittingProcess.cc +++ b/source/processes/scoring/src/G4ScoreSplittingProcess.cc @@ -28,42 +28,36 @@ #include "G4ScoreSplittingProcess.hh" -#include "G4ios.hh" -#include "G4SystemOfUnits.hh" -#include "G4Step.hh" -#include "G4VTouchable.hh" -#include "G4VPhysicalVolume.hh" +#include "G4EnergySplitter.hh" #include "G4ParticleChange.hh" -#include "G4TransportationManager.hh" #include "G4RegularNavigationHelper.hh" -#include "G4ParticleChange.hh" -#include "G4StepPoint.hh" - #include "G4SDManager.hh" -#include "G4VSensitiveDetector.hh" - -#include "G4EnergySplitter.hh" +#include "G4Step.hh" +#include "G4StepPoint.hh" +#include "G4SystemOfUnits.hh" #include "G4TouchableHistory.hh" +#include "G4TransportationManager.hh" +#include "G4VPhysicalVolume.hh" +#include "G4VSensitiveDetector.hh" +#include "G4VTouchable.hh" +#include "G4ios.hh" //-------------------------------- // Constructor with name and type: //-------------------------------- -G4ScoreSplittingProcess:: -G4ScoreSplittingProcess(const G4String& processName,G4ProcessType theType) - :G4VProcess(processName,theType), - fOldTouchableH(), fNewTouchableH(), fInitialTouchableH(), fFinalTouchableH() +G4ScoreSplittingProcess::G4ScoreSplittingProcess(const G4String& processName, G4ProcessType theType) + : G4VProcess(processName, theType) { pParticleChange = &xParticleChange; fSplitStep = new G4Step(); - fSplitPreStepPoint = fSplitStep->GetPreStepPoint(); + fSplitPreStepPoint = fSplitStep->GetPreStepPoint(); fSplitPostStepPoint = fSplitStep->GetPostStepPoint(); - if (verboseLevel>0) - { + if (verboseLevel > 0) { G4cout << GetProcessName() << " is created " << G4endl; } - fpEnergySplitter = new G4EnergySplitter(); + fpEnergySplitter = new G4EnergySplitter(); } // ----------- @@ -72,7 +66,7 @@ G4ScoreSplittingProcess(const G4String& processName,G4ProcessType theType) G4ScoreSplittingProcess::~G4ScoreSplittingProcess() { delete fSplitStep; - delete fpEnergySplitter; + delete fpEnergySplitter; } //------------------------------------------------------ @@ -82,43 +76,37 @@ G4ScoreSplittingProcess::~G4ScoreSplittingProcess() //------------------------------------------------------ void G4ScoreSplittingProcess::StartTracking(G4Track* trk) { -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// Setup initial touchables for the first step -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - const G4Step* pStep= trk->GetStep(); + // Setup initial touchables for the first step + const G4Step* pStep = trk->GetStep(); fOldTouchableH = trk->GetTouchableHandle(); - *fSplitPreStepPoint = *(pStep->GetPreStepPoint()); // Best to copy, so as to initialise + *fSplitPreStepPoint = *(pStep->GetPreStepPoint()); // Best to copy, so as to initialise fSplitPreStepPoint->SetTouchableHandle(fOldTouchableH); fNewTouchableH = fOldTouchableH; - *fSplitPostStepPoint= *(pStep->GetPostStepPoint()); // Best to copy, so as to initialise + *fSplitPostStepPoint = *(pStep->GetPostStepPoint()); // Best to copy, so as to initialise fSplitPostStepPoint->SetTouchableHandle(fNewTouchableH); - /// Initialize - fSplitPreStepPoint ->SetStepStatus(fUndefined); + /// Initialize + fSplitPreStepPoint->SetStepStatus(fUndefined); fSplitPostStepPoint->SetStepStatus(fUndefined); } - //---------------------------------------------------------- // // PostStepGetPhysicalInteractionLength() // //---------------------------------------------------------- -G4double -G4ScoreSplittingProcess::PostStepGetPhysicalInteractionLength( - const G4Track& /*track*/, - G4double /*previousStepSize*/, - G4ForceCondition* condition) +G4double G4ScoreSplittingProcess::PostStepGetPhysicalInteractionLength( + const G4Track& /*track*/, G4double /*previousStepSize*/, G4ForceCondition* condition) { // This process must be invoked anyway to score the hit // - to do the scoring if the current volume is a regular structure, or // - else to toggle the flag so that the SteppingManager does the scoring. *condition = StronglyForced; - // Future optimisation: check whether in regular structure. + // Future optimisation: check whether in regular structure. // If it is in regular structure, be StronglyForced - // If not in regular structure, + // If not in regular structure, // ask to be called only if SteppingControl is AvoidHitInvocation // in order to reset it to NormalCondition @@ -130,139 +118,137 @@ G4ScoreSplittingProcess::PostStepGetPhysicalInteractionLength( // PostStepDoIt() // //------------------------------------ -G4VParticleChange* G4ScoreSplittingProcess::PostStepDoIt( - const G4Track& track, - const G4Step& step) -{ - G4VPhysicalVolume* pCurrentVolume= track.GetVolume(); - G4LogicalVolume* pLogicalVolume= pCurrentVolume->GetLogicalVolume(); +G4VParticleChange* G4ScoreSplittingProcess::PostStepDoIt(const G4Track& track, const G4Step& step) +{ + G4VPhysicalVolume* pCurrentVolume = track.GetVolume(); + G4LogicalVolume* pLogicalVolume = pCurrentVolume->GetLogicalVolume(); G4VSensitiveDetector* ptrSD = pLogicalVolume->GetSensitiveDetector(); - pParticleChange->Initialize(track); - if( ( ! pCurrentVolume->IsRegularStructure() ) || ( !ptrSD ) - || G4RegularNavigationHelper::Instance()->GetStepLengths().size() <= 1) { - // Set the flag to make sure that Stepping Manager does the scoring - pParticleChange->ProposeSteppingControl( NormalCondition ); - } else { - G4ThreeVector preStepPosition, postStepPosition, direction, finalPostStepPosition; - pParticleChange->ProposeSteppingControl( AvoidHitInvocation ); - - G4double totalEnergyDeposit= step.GetTotalEnergyDeposit(); - G4StepStatus fullStepStatus= step.GetPostStepPoint()->GetStepStatus(); - - CopyStepStart(step); - fSplitPreStepPoint->SetSensitiveDetector(ptrSD); - fOldTouchableH = fInitialTouchableH; - fNewTouchableH= fOldTouchableH; - *fSplitPostStepPoint= *(step.GetPreStepPoint()); - - // Split the energy - // ---------------- - G4int numberVoxelsInStep= fpEnergySplitter->SplitEnergyInVolumes( &step ); - - preStepPosition= step.GetPreStepPoint()->GetPosition(); - finalPostStepPosition= step.GetPostStepPoint()->GetPosition(); - direction= (finalPostStepPosition - preStepPosition).unit(); - - fFinalTouchableH= track.GetNextTouchableHandle(); - - postStepPosition= preStepPosition; - // Loop over the sub-parts of this step - G4int iStep; - for ( iStep=0; iStep < numberVoxelsInStep; iStep++ ){ - G4int idVoxel= -1; // Voxel ID - G4double stepLength=0.0, energyLoss= 0.0; - - *fSplitPreStepPoint = *fSplitPostStepPoint; - fOldTouchableH = fNewTouchableH; - - preStepPosition= postStepPosition; - fSplitPreStepPoint->SetPosition( preStepPosition ); - fSplitPreStepPoint->SetTouchableHandle(fOldTouchableH); - - fpEnergySplitter->GetLengthAndEnergyDeposited( iStep, idVoxel, stepLength, energyLoss); - - // Correct the material, so that the track->GetMaterial gives correct answer - pLogicalVolume->SetMaterial( fpEnergySplitter->GetVoxelMaterial( iStep) ); // idVoxel) ); - - postStepPosition= preStepPosition + stepLength * direction; - fSplitPostStepPoint->SetPosition(postStepPosition); - - // Load the Step with the new values - fSplitStep->SetStepLength(stepLength); - fSplitStep->SetTotalEnergyDeposit(energyLoss); - if( iStep < numberVoxelsInStep -1 ){ - fSplitStep->GetPostStepPoint()->SetStepStatus( fGeomBoundary ); - G4int nextVoxelId= -1; - fpEnergySplitter->GetVoxelID( iStep+1, nextVoxelId ); - - // Create new "next" touchable for each section ?? - G4VTouchable* fNewTouchablePtr= - CreateTouchableForSubStep( nextVoxelId, postStepPosition ); - fNewTouchableH= G4TouchableHandle(fNewTouchablePtr); - fSplitPostStepPoint->SetTouchableHandle( fNewTouchableH ); - } else { - fSplitStep->GetPostStepPoint()->SetStepStatus( fullStepStatus ); - fSplitPostStepPoint->SetTouchableHandle( fFinalTouchableH ); - } - - - // As first approximation, split the NIEL in the same fractions as the energy deposit - G4double eLossFraction; - eLossFraction= (totalEnergyDeposit>0.0) ? energyLoss / totalEnergyDeposit : 1.0 ; - fSplitStep->SetNonIonizingEnergyDeposit(step.GetNonIonizingEnergyDeposit()*eLossFraction); - - fSplitPostStepPoint->SetSensitiveDetector( ptrSD ); - - // Call the Sensitive Detector - ptrSD->Hit(fSplitStep); - - if (verboseLevel>1) Verbose(step); - } + pParticleChange->Initialize(track); + if ((!pCurrentVolume->IsRegularStructure()) || (ptrSD == nullptr) + || G4RegularNavigationHelper::Instance()->GetStepLengths().size() <= 1) + { + // Set the flag to make sure that Stepping Manager does the scoring + pParticleChange->ProposeSteppingControl(NormalCondition); + } + else { + G4ThreeVector preStepPosition, postStepPosition, direction, finalPostStepPosition; + pParticleChange->ProposeSteppingControl(AvoidHitInvocation); + + G4double totalEnergyDeposit = step.GetTotalEnergyDeposit(); + G4StepStatus fullStepStatus = step.GetPostStepPoint()->GetStepStatus(); + + CopyStepStart(step); + fSplitPreStepPoint->SetSensitiveDetector(ptrSD); + fOldTouchableH = fInitialTouchableH; + fNewTouchableH = fOldTouchableH; + *fSplitPostStepPoint = *(step.GetPreStepPoint()); + + // Split the energy + // ---------------- + G4int numberVoxelsInStep = fpEnergySplitter->SplitEnergyInVolumes(&step); + + preStepPosition = step.GetPreStepPoint()->GetPosition(); + finalPostStepPosition = step.GetPostStepPoint()->GetPosition(); + direction = (finalPostStepPosition - preStepPosition).unit(); + + fFinalTouchableH = track.GetNextTouchableHandle(); + + postStepPosition = preStepPosition; + // Loop over the sub-parts of this step + G4int iStep; + for (iStep = 0; iStep < numberVoxelsInStep; iStep++) { + G4int idVoxel = -1; // Voxel ID + G4double stepLength = 0.0, energyLoss = 0.0; + + *fSplitPreStepPoint = *fSplitPostStepPoint; + fOldTouchableH = fNewTouchableH; + + preStepPosition = postStepPosition; + fSplitPreStepPoint->SetPosition(preStepPosition); + fSplitPreStepPoint->SetTouchableHandle(fOldTouchableH); + + fpEnergySplitter->GetLengthAndEnergyDeposited(iStep, idVoxel, stepLength, energyLoss); + + // Correct the material, so that the track->GetMaterial gives correct answer + pLogicalVolume->SetMaterial(fpEnergySplitter->GetVoxelMaterial(iStep)); // idVoxel) ); + + postStepPosition = preStepPosition + stepLength * direction; + fSplitPostStepPoint->SetPosition(postStepPosition); + + // Load the Step with the new values + fSplitStep->SetStepLength(stepLength); + fSplitStep->SetTotalEnergyDeposit(energyLoss); + if (iStep < numberVoxelsInStep - 1) { + fSplitStep->GetPostStepPoint()->SetStepStatus(fGeomBoundary); + G4int nextVoxelId = -1; + fpEnergySplitter->GetVoxelID(iStep + 1, nextVoxelId); + + // Create new "next" touchable for each section ?? + G4VTouchable* fNewTouchablePtr = CreateTouchableForSubStep(nextVoxelId, postStepPosition); + fNewTouchableH = G4TouchableHandle(fNewTouchablePtr); + fSplitPostStepPoint->SetTouchableHandle(fNewTouchableH); + } + else { + fSplitStep->GetPostStepPoint()->SetStepStatus(fullStepStatus); + fSplitPostStepPoint->SetTouchableHandle(fFinalTouchableH); + } + + // As first approximation, split the NIEL in the same fractions as the energy deposit + G4double eLossFraction; + eLossFraction = (totalEnergyDeposit > 0.0) ? energyLoss / totalEnergyDeposit : 1.0; + fSplitStep->SetNonIonizingEnergyDeposit(step.GetNonIonizingEnergyDeposit() * eLossFraction); + + fSplitPostStepPoint->SetSensitiveDetector(ptrSD); + + // Call the Sensitive Detector + ptrSD->Hit(fSplitStep); + + if (verboseLevel > 1) Verbose(step); + } } // This must change the Stepping Control return pParticleChange; } -G4TouchableHistory* -G4ScoreSplittingProcess::CreateTouchableForSubStep( G4int newVoxelNum, G4ThreeVector ) +G4TouchableHistory* G4ScoreSplittingProcess::CreateTouchableForSubStep(G4int newVoxelNum, + G4ThreeVector) { - // G4cout << " Creating touchable handle for voxel-no " << newVoxelNum << G4endl; + auto oldTouchableHistory = dynamic_cast(fOldTouchableH()); + G4TouchableHistory* ptrTouchableHistory = + G4TransportationManager::GetTransportationManager() + ->GetNavigatorForTracking() + ->CreateTouchableHistory(oldTouchableHistory->GetHistory()); - G4TouchableHistory* oldTouchableHistory= dynamic_cast(fOldTouchableH()); - G4TouchableHistory* ptrTouchableHistory= G4TransportationManager::GetTransportationManager()-> - GetNavigatorForTracking()->CreateTouchableHistory(oldTouchableHistory->GetHistory()); - // Change the history - G4NavigationHistory* ptrNavHistory= const_cast(ptrTouchableHistory->GetHistory()); - G4VPhysicalVolume* curPhysicalVol= ptrNavHistory->GetTopVolume(); + auto ptrNavHistory = const_cast(ptrTouchableHistory->GetHistory()); + G4VPhysicalVolume* curPhysicalVol = ptrNavHistory->GetTopVolume(); - EVolume curVolumeType= ptrNavHistory->GetTopVolumeType(); - if( curVolumeType == kParameterised ) - { - ptrNavHistory->BackLevel(); + EVolume curVolumeType = ptrNavHistory->GetTopVolumeType(); + if (curVolumeType == kParameterised) { + ptrNavHistory->BackLevel(); // G4VPVParameterised parameterisedPV= pNewMother - G4VPVParameterisation* curParamstn= curPhysicalVol->GetParameterisation(); + G4VPVParameterisation* curParamstn = curPhysicalVol->GetParameterisation(); // From G4ParameterisedNavigation::IdentifyAndPlaceSolid() inline method G4VSolid* sampleSolid = curParamstn->ComputeSolid(newVoxelNum, curPhysicalVol); sampleSolid->ComputeDimensions(curParamstn, newVoxelNum, curPhysicalVol); curParamstn->ComputeTransformation(newVoxelNum, curPhysicalVol); - ptrNavHistory->NewLevel( curPhysicalVol, kParameterised, newVoxelNum ); + ptrNavHistory->NewLevel(curPhysicalVol, kParameterised, newVoxelNum); } - else - { - G4cout << " Current volume type is not Parameterised. " << G4endl; - G4Exception("G4ScoreSplittingProcess::CreateTouchableForSubStep", - "ErrorRegularParamaterisation", JustWarning, - "Score Splitting Process is used for Regular Structure - but did not find one here."); + else { + G4cout << " Current volume type is not Parameterised. " << G4endl; + G4Exception( + "G4ScoreSplittingProcess::CreateTouchableForSubStep", "ErrorRegularParamaterisation", + JustWarning, + "Score Splitting Process is used for Regular Structure - but did not find one here."); } - return ptrTouchableHistory; + return ptrTouchableHistory; } -void G4ScoreSplittingProcess::CopyStepStart(const G4Step & step) +void G4ScoreSplittingProcess::CopyStepStart(const G4Step& step) { fSplitStep->SetTrack(step.GetTrack()); fSplitStep->SetStepLength(step.GetStepLength()); @@ -270,98 +256,98 @@ void G4ScoreSplittingProcess::CopyStepStart(const G4Step & step) fSplitStep->SetNonIonizingEnergyDeposit(step.GetNonIonizingEnergyDeposit()); fSplitStep->SetControlFlag(step.GetControlFlag()); - *fSplitPreStepPoint = *(step.GetPreStepPoint()); + *fSplitPreStepPoint = *(step.GetPreStepPoint()); - fInitialTouchableH= (step.GetPreStepPoint()) ->GetTouchableHandle(); - fFinalTouchableH = (step.GetPostStepPoint())->GetTouchableHandle(); + fInitialTouchableH = (step.GetPreStepPoint())->GetTouchableHandle(); + fFinalTouchableH = (step.GetPostStepPoint())->GetTouchableHandle(); } void G4ScoreSplittingProcess::Verbose(const G4Step& step) const { G4cout << "In mass geometry ------------------------------------------------" << G4endl; - G4cout << " StepLength : " << step.GetStepLength()/mm << " TotalEnergyDeposit : " - << step.GetTotalEnergyDeposit()/MeV << G4endl; - G4cout << " PreStepPoint : " - << step.GetPreStepPoint()->GetPhysicalVolume()->GetName() << " - "; - if(step.GetPreStepPoint()->GetProcessDefinedStep()) - { G4cout << step.GetPreStepPoint()->GetProcessDefinedStep()->GetProcessName(); } - else - { G4cout << "NoProcessAssigned"; } + G4cout << " StepLength : " << step.GetStepLength() / mm + << " TotalEnergyDeposit : " << step.GetTotalEnergyDeposit() / MeV << G4endl; + G4cout << " PreStepPoint : " << step.GetPreStepPoint()->GetPhysicalVolume()->GetName() << " - "; + if (step.GetPreStepPoint()->GetProcessDefinedStep() != nullptr) { + G4cout << step.GetPreStepPoint()->GetProcessDefinedStep()->GetProcessName(); + } + else { + G4cout << "NoProcessAssigned"; + } G4cout << G4endl; G4cout << " " << step.GetPreStepPoint()->GetPosition() << G4endl; G4cout << " PostStepPoint : "; - if(step.GetPostStepPoint()->GetPhysicalVolume()) - { G4cout << step.GetPostStepPoint()->GetPhysicalVolume()->GetName(); } - else - { G4cout << "OutOfWorld"; } + if (step.GetPostStepPoint()->GetPhysicalVolume() != nullptr) { + G4cout << step.GetPostStepPoint()->GetPhysicalVolume()->GetName(); + } + else { + G4cout << "OutOfWorld"; + } G4cout << " - "; - if(step.GetPostStepPoint()->GetProcessDefinedStep()) - { G4cout << step.GetPostStepPoint()->GetProcessDefinedStep()->GetProcessName(); } - else - { G4cout << "NoProcessAssigned"; } + if (step.GetPostStepPoint()->GetProcessDefinedStep() != nullptr) { + G4cout << step.GetPostStepPoint()->GetProcessDefinedStep()->GetProcessName(); + } + else { + G4cout << "NoProcessAssigned"; + } G4cout << G4endl; G4cout << " " << step.GetPostStepPoint()->GetPosition() << G4endl; G4cout << "In ghost geometry ------------------------------------------------" << G4endl; - G4cout << " StepLength : " << fSplitStep->GetStepLength()/mm - << " TotalEnergyDeposit : " - << fSplitStep->GetTotalEnergyDeposit()/MeV << G4endl; - G4cout << " PreStepPoint : " - << fSplitStep->GetPreStepPoint()->GetPhysicalVolume()->GetName() << " [" - << fSplitStep->GetPreStepPoint()->GetTouchable()->GetReplicaNumber() - << " ]" << " - "; - if(fSplitStep->GetPreStepPoint()->GetProcessDefinedStep()) - { G4cout << fSplitStep->GetPreStepPoint()->GetProcessDefinedStep()->GetProcessName(); } - else - { G4cout << "NoProcessAssigned"; } + G4cout << " StepLength : " << fSplitStep->GetStepLength() / mm + << " TotalEnergyDeposit : " << fSplitStep->GetTotalEnergyDeposit() / MeV << G4endl; + G4cout << " PreStepPoint : " << fSplitStep->GetPreStepPoint()->GetPhysicalVolume()->GetName() + << " [" << fSplitStep->GetPreStepPoint()->GetTouchable()->GetReplicaNumber() << " ]" + << " - "; + if (fSplitStep->GetPreStepPoint()->GetProcessDefinedStep() != nullptr) { + G4cout << fSplitStep->GetPreStepPoint()->GetProcessDefinedStep()->GetProcessName(); + } + else { + G4cout << "NoProcessAssigned"; + } G4cout << G4endl; G4cout << " " << fSplitStep->GetPreStepPoint()->GetPosition() << G4endl; G4cout << " PostStepPoint : "; - if(fSplitStep->GetPostStepPoint()->GetPhysicalVolume()) - { + if (fSplitStep->GetPostStepPoint()->GetPhysicalVolume() != nullptr) { G4cout << fSplitStep->GetPostStepPoint()->GetPhysicalVolume()->GetName() << " [" - << fSplitStep->GetPostStepPoint()->GetTouchable()->GetReplicaNumber() - << " ]"; + << fSplitStep->GetPostStepPoint()->GetTouchable()->GetReplicaNumber() << " ]"; + } + else { + G4cout << "OutOfWorld"; } - else - { G4cout << "OutOfWorld"; } G4cout << " - "; - if(fSplitStep->GetPostStepPoint()->GetProcessDefinedStep()) - { G4cout << fSplitStep->GetPostStepPoint()->GetProcessDefinedStep()->GetProcessName(); } - else - { G4cout << "NoProcessAssigned"; } + if (fSplitStep->GetPostStepPoint()->GetProcessDefinedStep() != nullptr) { + G4cout << fSplitStep->GetPostStepPoint()->GetProcessDefinedStep()->GetProcessName(); + } + else { + G4cout << "NoProcessAssigned"; + } G4cout << G4endl; - G4cout << " " << fSplitStep->GetPostStepPoint()->GetPosition() << " == " - << fSplitStep->GetTrack()->GetMomentumDirection() - << G4endl; - + G4cout << " " << fSplitStep->GetPostStepPoint()->GetPosition() + << " == " << fSplitStep->GetTrack()->GetMomentumDirection() << G4endl; } - //---------------------------------------------------------- // // AtRestGetPhysicalInteractionLength() // //---------------------------------------------------------- -G4double -G4ScoreSplittingProcess::AtRestGetPhysicalInteractionLength( - const G4Track& /*track*/, - G4ForceCondition* condition) +G4double G4ScoreSplittingProcess::AtRestGetPhysicalInteractionLength(const G4Track& /*track*/, + G4ForceCondition* condition) { *condition = NotForced; // Was Forced return DBL_MAX; } - //--------------------------------------- // AlongStepGetPhysicalInteractionLength //--------------------------------------- -G4double G4ScoreSplittingProcess::AlongStepGetPhysicalInteractionLength( - const G4Track& , // track, - G4double , // previousStepSize, - G4double , // currentMinimumStep, - G4double& , // proposedSafety, - G4GPILSelection* selection) +G4double +G4ScoreSplittingProcess::AlongStepGetPhysicalInteractionLength(const G4Track&, // track, + G4double, // previousStepSize, + G4double, // currentMinimumStep, + G4double&, // proposedSafety, + G4GPILSelection* selection) { *selection = NotCandidateForSelection; return DBL_MAX; @@ -371,8 +357,7 @@ G4double G4ScoreSplittingProcess::AlongStepGetPhysicalInteractionLength( // AlongStepDoIt() //------------------------------------ -G4VParticleChange* G4ScoreSplittingProcess::AlongStepDoIt( - const G4Track& track, const G4Step& ) +G4VParticleChange* G4ScoreSplittingProcess::AlongStepDoIt(const G4Track& track, const G4Step&) { // Dummy ParticleChange ie: does nothing // Expecting G4Transportation to move the track @@ -383,10 +368,8 @@ G4VParticleChange* G4ScoreSplittingProcess::AlongStepDoIt( //------------------------------------ // AtRestDoIt() //------------------------------------ -G4VParticleChange* G4ScoreSplittingProcess::AtRestDoIt( - const G4Track& track, - const G4Step&) -{ +G4VParticleChange* G4ScoreSplittingProcess::AtRestDoIt(const G4Track& track, const G4Step&) +{ pParticleChange->Initialize(track); return pParticleChange; } diff --git a/source/processes/solidstate/GNUmakefile b/source/processes/solidstate/GNUmakefile deleted file mode 100644 index 67b586babb2..00000000000 --- a/source/processes/solidstate/GNUmakefile +++ /dev/null @@ -1,19 +0,0 @@ -# ------------------------------------------------------------------ -# GNUmakefile for solidstate library. Enrico Bagli, 6/4/2017. -# ------------------------------------------------------------------ - -MAKEFLAGS= --no-print-directory - -name := G4solidstate - -SUBDIRS = phonon -SUBDIRS += channeling - -SUBLIBS = G4phonon -SUBLIBS += G4channeling - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/globlib.gmk diff --git a/source/processes/solidstate/channeling/GNUmakefile b/source/processes/solidstate/channeling/GNUmakefile deleted file mode 100644 index 304fc51b3dc..00000000000 --- a/source/processes/solidstate/channeling/GNUmakefile +++ /dev/null @@ -1,28 +0,0 @@ -# ------------------------------------------------------------ -# GNUmakefile for channeling library. E.Bagli 06-Apr-2017 -# ------------------------------------------------------------ - -name := G4channeling - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/biasing/management/include \ - -I$(G4BASE)/processes/biasing/generic/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/solidstate/phonon/GNUmakefile b/source/processes/solidstate/phonon/GNUmakefile deleted file mode 100644 index 5f6b5410e36..00000000000 --- a/source/processes/solidstate/phonon/GNUmakefile +++ /dev/null @@ -1,24 +0,0 @@ -# ------------------------------------------------------------ -# GNUmakefile for phonons library. M.Kelsey 24-Oct-2013 -# ------------------------------------------------------------ - -name := G4phonon - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/transportation/GNUmakefile b/source/processes/transportation/GNUmakefile deleted file mode 100644 index 683cd22a1b2..00000000000 --- a/source/processes/transportation/GNUmakefile +++ /dev/null @@ -1,36 +0,0 @@ -# ------------------------------------------------------------ -# GNUmakefile for transportation library. G.Folger 10-Dec-97. -# ------------------------------------------------------------ - -name := G4transportation - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/biasing/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/intercoms/include - -ifdef G4DEBUG_TRANSPORT - CPPFLAGS += -DG4DEBUG_TRANSPORT -endif -ifdef G4DEBUG_POSTSTEP_TRANSPORT - CPPFLAGS += -DG4DEBUG_POSTSTEP_TRANSPORT -endif - -include $(G4INSTALL)/config/common.gmk diff --git a/source/processes/transportation/History b/source/processes/transportation/History index fae402b5377..89f4dbadd99 100644 --- a/source/processes/transportation/History +++ b/source/processes/transportation/History @@ -5,13 +5,18 @@ which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-01-26 John Apostolakis (transport-V11-01-02) +- Added a method to set both warning & important energies in G4TransporationParameters + Added method to report lock errors. + Improve reporting of inconsistent changes of 'warning' & 'important' energies + (not only enforce warning_E < important_E but also warn about violations.) -## 2023-01-25 John Apostolakis (transport-V11-00-11) +## 2023-01-25 John Apostolakis (transport-V11-01-01) - Fix unwanted change of default looper parameters. ( Reversed inadvertent creation of G4TransportationParameters in calls to G4Transportation constructor.) -## 2023-01-09 Jonas Hahnfeld +## 2023-01-09 Jonas Hahnfeld (transport-V11-01-00) - Fix compilation warning about unused variable without `G4VERBOSE`. ## 2022-11-25 Gabriele Cosmo (transport-V11-00-10) diff --git a/source/processes/transportation/include/G4TransportationParameters.hh b/source/processes/transportation/include/G4TransportationParameters.hh index 3269cd4151a..9dc1843b32d 100644 --- a/source/processes/transportation/include/G4TransportationParameters.hh +++ b/source/processes/transportation/include/G4TransportationParameters.hh @@ -22,21 +22,32 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** - // // Class Description: // // A utility static class, responsable for keeping common parameters // for all transportation processes. These parameters can be relevant only -// to some types of particles, e.g. only charged particles. +// to some types of particles, e.g. only stable charged particles. // -// It must initialized only by the master thread. -// It can be updated before the transportation processes have been instantiated or -// after their instantiation. +// Constraints (creation/update): +// - It must initialized only by the master thread. +// - It should be updated before the transportation processes have been instantiated. // Note: It can be updated only if the state of the simulation is PreInit, Init or Idle. -// Parameters may be used in run time or at initialisation -// -// Author: J. Apostolakis Nov 2022 +// +// Only those instances of G4Transportation (and derived classes) that are created +// *after* G4TransportationParameters will be aware of it and will copy +// the values of its parameters. +// (So in a multithreaded application, runs that start after this is created will obtain them.) +// +// Use: Parameters may be used in run time or at initialisation +// +// Meaning of parameters: +// - Warning energy: below this, looping tracks can be killed without any message +// - Important energy: between warning E and this, looping tracks will complain and die +// - Number of Trials: above 'important energy' looping tracks get this number of chances. + +// Author: J. Apostolakis Nov 2022 +// Inspired by G4EmParameters by V. Ivanchenko // ------------------------------------------------------------------- // @@ -53,8 +64,15 @@ public: ~G4TransportationParameters() = default; G4bool SetNumberOfTrials( G4int val ); + + // All three methods below enforce the relation WarningE <= ImportantE G4bool SetWarningEnergy( G4double val ); G4bool SetImportantEnergy( G4double val ); + // If the relation fails, the methods above warn and use the new value for both. + G4bool SetWarningAndImportantEnergies( G4double warnE, G4double imprtE ); + // If the relation does *not* hold, it warns and + // uses the smaller as the 'warning Energy' + // and the larger as the 'important energy' G4int GetNumberOfTrials() const { return fNumberOfTrials; } G4double GetWarningEnergy() const { return fWarningEnergy; } @@ -72,6 +90,9 @@ public: G4bool GetSilenceAllLooperWarnings(){ return fSilenceLooperWarnings; } + void ReportLockError(G4String methodName, G4bool verbose= false) const; + // Report error - in case the state of G4 is incorrect, and update methods fail + // Probe whether the 'default' instance exists, without creating it static G4bool Exists() { return theInstance != nullptr; } diff --git a/source/processes/transportation/src/G4TransportationParameters.cc b/source/processes/transportation/src/G4TransportationParameters.cc index 962925c8897..e1f33c61272 100644 --- a/source/processes/transportation/src/G4TransportationParameters.cc +++ b/source/processes/transportation/src/G4TransportationParameters.cc @@ -69,9 +69,9 @@ G4TransportationParameters* G4TransportationParameters::Instance() G4bool G4TransportationParameters::IsLocked() const { - auto fStateManager = G4StateManager::GetStateManager(); + auto stateManager = G4StateManager::GetStateManager(); - auto state = fStateManager->GetCurrentState(); + auto state = stateManager->GetCurrentState(); bool goodState = state == G4State_PreInit || state == G4State_Init || state == G4State_Idle ; @@ -82,7 +82,7 @@ G4bool G4TransportationParameters::IsLocked() const G4bool G4TransportationParameters::SetNumberOfTrials( G4int val ) { - if(IsLocked()) { return false; } + if(IsLocked()) { ReportLockError(__func__); return false; } fNumberOfTrials = val; return true; } @@ -91,13 +91,17 @@ G4bool G4TransportationParameters::SetNumberOfTrials( G4int val ) G4bool G4TransportationParameters::SetWarningEnergy( double val ) { - if(IsLocked()) { return false; } + if(IsLocked()) { ReportLockError(__func__); return false; } fWarningEnergy = val; // Consistency check -- and trial fix - if( fWarningEnergy > fImportantEnergy ) + if( fWarningEnergy > fImportantEnergy ) { + G4cerr << "G4TransportationParameters::GetWarningEnergy enforcing warning-E <= important-E " + << " resetting important energy from " << fImportantEnergy + << " to " << val << G4endl; + // "Enforcing Important Energy >= Warning Energy" fImportantEnergy = fWarningEnergy; - + } return true; } @@ -105,16 +109,77 @@ G4bool G4TransportationParameters::SetWarningEnergy( double val ) G4bool G4TransportationParameters::SetImportantEnergy( double val ) { - if(IsLocked()) { return false; } + if(IsLocked()) { ReportLockError(__func__); return false; } fImportantEnergy = val; // Consistency check -- and trial fix - if( fImportantEnergy < fWarningEnergy ) + if( fImportantEnergy < fWarningEnergy ) { + G4String mthd= G4String("G4TransportationParameters")+G4String(__func__); + G4ExceptionDescription ed; + ed<<"enforcing hierarchy (warning-E <= important-E): resetting important" + <<" energy from " << fImportantEnergy << " to " << val << G4endl; + G4Exception( mthd, "Enforcing Warning Energy <= Important Energy", + JustWarning, ed ); + fWarningEnergy = fImportantEnergy; - + } + return true; +} + +//------------------------------------------------------------------------------ + +G4bool G4TransportationParameters::SetWarningAndImportantEnergies( G4double warnE, + G4double importE ) +{ + if(IsLocked()) { + ReportLockError(__func__); + return false; + } + + if( warnE <= importE ) + { + fWarningEnergy = warnE; + fImportantEnergy = importE; + } + else + { + fWarningEnergy = importE; + fImportantEnergy = warnE; + + G4String mthd= G4String("G4TransportationParameters")+G4String(__func__); + G4ExceptionDescription ed; + ed << "To enforce hierarchy (warning-E <= important-E): " + << " using smaller value= " << importE << " as Warning Energy " + << " and larger value= " << warnE << " as Important Energy." << G4endl; + G4Exception( mthd, "Enforcing Warning Energy <= Important Energy", + JustWarning, ed ); + } return true; } - + +//------------------------------------------------------------------------------ + +void G4TransportationParameters::ReportLockError(G4String methodName, G4bool verbose) const +{ + // Report Incompatible States: GeomClosed , EventProc, (also Quit, Abort) + G4String namesMethodClass= G4String("G4TransportationParameters") + methodName; + + auto stateManager = G4StateManager::GetStateManager(); + auto state = stateManager->GetCurrentState(); + + G4ExceptionDescription ed; + ed << "Cannot change values of G4TransportationParameters when G4State is " + << stateManager->GetStateString(state) << G4endl; + ed << "Only the following Geant4 state are compatible: Pre_Init, Init and Idle." << G4endl; + if( verbose ) { + ed << G4endl << "Values remain as follows:" << G4endl; + StreamInfo( ed ); + } + G4Exception( namesMethodClass, + "Locked, due to incompatible G4state: it not possible to change its parameters.", + JustWarning, ed ); +} + //------------------------------------------------------------------------------ void G4TransportationParameters::StreamInfo(std::ostream& os) const @@ -188,7 +253,7 @@ G4bool G4TransportationParameters::SetLowLooperThresholds() // Values for low-E G4bool G4TransportationParameters::EnableUseOfMagneticMoment(G4bool useMoment) { - if(IsLocked()) { return false; } + if(IsLocked()) { return false; } fUseMagneticMoment= useMoment; return true; } diff --git a/source/readout/GNUmakefile b/source/readout/GNUmakefile deleted file mode 100644 index 854e9bbc50d..00000000000 --- a/source/readout/GNUmakefile +++ /dev/null @@ -1,44 +0,0 @@ -# ----------------------------------------------------------- -# GNUmakefile for digits+hits library. Makoto Asai, 1/11/96. -# ----------------------------------------------------------- - -name := G4readout - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -GLOBLIBS = libG4run.lib libG4event.lib -GLOBLIBS += libG4tracking.lib libG4processes.lib libG4digits_hits.lib -GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/tracking/include \ - -I$(G4BASE)/run/include \ - -I$(G4BASE)/digits_hits/detector/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/digits_hits/digits/include \ - -I$(G4BASE)/event/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/intercoms/include - -include $(G4INSTALL)/config/common.gmk - -.PHONY: global - -global: lib - diff --git a/source/readout/History b/source/readout/History index 444070c0d69..0ff4d88d877 100644 --- a/source/readout/History +++ b/source/readout/History @@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2022-12-12 Ben Morgan (readout-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-11-17 Gabriele Cosmo (readout-V11-00-02) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/run/GNUmakefile b/source/run/GNUmakefile deleted file mode 100644 index 1c953b35b08..00000000000 --- a/source/run/GNUmakefile +++ /dev/null @@ -1,71 +0,0 @@ -# ---------------------------------------------------------- -# GNUmakefile for run library. Gabriele Cosmo, 3/4/1997. -# ---------------------------------------------------------- - -name := G4run - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -GLOBLIBS = libG4event.lib -GLOBLIBS += libG4tracking.lib libG4processes.lib libG4digits_hits.lib -GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk - -ifdef G4FPE_DEBUG - CPPFLAGS += -DG4FPE_DEBUG -endif -ifdef G4BT_DEBUG - CPPFLAGS += -DG4BT_DEBUG -endif - -CPPFLAGS += -DG4RUN_ALLOC_EXPORT -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/global/HEPNumerics/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/processes/cuts/include \ - -I$(G4BASE)/processes/scoring/include \ - -I$(G4BASE)/processes/electromagnetic/utils/include \ - -I$(G4BASE)/processes/optical/include \ - -I$(G4BASE)/processes/transportation/include \ - -I$(G4BASE)/processes/decay/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/solids/specific/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/tracking/include \ - -I$(G4BASE)/digits_hits/detector/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/digits_hits/digits/include \ - -I$(G4BASE)/digits_hits/utils/include \ - -I$(G4BASE)/event/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/geometry/biasing/include \ - -I$(G4BASE)/graphics_reps/include \ - -I$(G4BASE)/processes/hadronic/management/include \ - -I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \ - -I$(G4BASE)/processes/hadronic/util/include \ - -I$(G4BASE)/particles/bosons/include \ - -I$(G4BASE)/particles/leptons/include \ - -I$(G4BASE)/particles/hadrons/mesons/include \ - -I$(G4BASE)/particles/hadrons/barions/include \ - -I$(G4BASE)/particles/hadrons/ions/include - -include $(G4INSTALL)/config/common.gmk - -.PHONY: global - -global: lib - diff --git a/source/run/History b/source/run/History index ed6d72676f7..a9423a95987 100644 --- a/source/run/History +++ b/source/run/History @@ -6,17 +6,26 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2023-05-04 Gabriele Cosmo (run-V11-00-13) +## 2023-06-02 Ben Morgan (run-V11-01-04) +- Apply core and optional clang-tidy fixes, plus clang-format and tidying: + - Removal of obsolete comments/dead blocks + - Normal order access specifiers and make docstrings Doxygen/IDE compatible +- Refactor random state file copying to use std::filesystem for portability + +## 2023-05-04 Gabriele Cosmo (run-V11-01-03) - Removed mistyped method declaration GetMasterTheadId() in G4MTRunManager. -## 2023-02-03 Gabriele Cosmo (run-V11-00-12) +## 2023-02-03 Gabriele Cosmo (run-V11-01-02) - Reduced printout in destruction of run-manager (master and workers), to be coherent with verbose level greater than 1. -## 2022-12-30 Vladimir Ivanchenko +## 2022-12-30 Vladimir Ivanchenko (run-V11-01-01) - G4PhysicsListHelper - added forgotten process of muon pair production by muons (problem #2523); added general processes +## 2022-12-12 Ben Morgan (run-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-11-18 Gabriele Cosmo (run-V11-00-11) - More compilation warnings fixes for implicit type conversions. diff --git a/source/run/include/G4AdjointPrimaryGeneratorAction.hh b/source/run/include/G4AdjointPrimaryGeneratorAction.hh index 66e08105480..cff80ba2070 100644 --- a/source/run/include/G4AdjointPrimaryGeneratorAction.hh +++ b/source/run/include/G4AdjointPrimaryGeneratorAction.hh @@ -61,14 +61,14 @@ #ifndef G4AdjointPrimaryGeneratorAction_hh #define G4AdjointPrimaryGeneratorAction_hh 1 +#include "G4ThreeVector.hh" +#include "G4VUserPrimaryGeneratorAction.hh" +#include "globals.hh" + #include #include #include -#include "globals.hh" -#include "G4ThreeVector.hh" -#include "G4VUserPrimaryGeneratorAction.hh" - class G4AdjointPosOnPhysVolGenerator; class G4ParticleGun; class G4Event; @@ -80,50 +80,32 @@ class G4ParticleDefinition; class G4AdjointPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: - G4AdjointPrimaryGeneratorAction(); - ~G4AdjointPrimaryGeneratorAction(); + ~G4AdjointPrimaryGeneratorAction() override; - G4AdjointPrimaryGeneratorAction( - const G4AdjointPrimaryGeneratorAction&) = delete; - G4AdjointPrimaryGeneratorAction& operator=( - const G4AdjointPrimaryGeneratorAction&) = delete; + G4AdjointPrimaryGeneratorAction(const G4AdjointPrimaryGeneratorAction&) = delete; + G4AdjointPrimaryGeneratorAction& operator=(const G4AdjointPrimaryGeneratorAction&) = delete; - void GeneratePrimaries(G4Event*); + void GeneratePrimaries(G4Event*) override; void SetEmin(G4double val); void SetEmax(G4double val); void SetEminIon(G4double val); void SetEmaxIon(G4double val); - void SetSphericalAdjointPrimarySource(G4double radius, - G4ThreeVector pos); - void SetAdjointPrimarySourceOnAnExtSurfaceOfAVolume( - const G4String& volume_name); + void SetSphericalAdjointPrimarySource(G4double radius, G4ThreeVector pos); + void SetAdjointPrimarySourceOnAnExtSurfaceOfAVolume(const G4String& volume_name); void ConsiderParticleAsPrimary(const G4String& particle_name); void NeglectParticleAsPrimary(const G4String& particle_name); - void SetPrimaryIon(G4ParticleDefinition* adjointIon, - G4ParticleDefinition* fwdIon); + void SetPrimaryIon(G4ParticleDefinition* adjointIon, G4ParticleDefinition* fwdIon); void UpdateListOfPrimaryParticles(); - inline void SetRndmFlag(const G4String& val) - { - rndmFlag = val; - } - inline size_t GetNbOfAdjointPrimaryTypes() - { - return ListOfPrimaryAdjParticles.size(); - } + inline void SetRndmFlag(const G4String& val) { rndmFlag = val; } + inline size_t GetNbOfAdjointPrimaryTypes() { return ListOfPrimaryAdjParticles.size(); } inline std::vector* GetListOfPrimaryFwdParticles() { return &ListOfPrimaryFwdParticles; } - inline const G4String& GetPrimaryIonName() - { - return ion_name; - } - inline void SetNbPrimaryFwdGammasPerEvent(G4int nb) - { - nb_fwd_gammas_per_event = nb; - } + inline const G4String& GetPrimaryIonName() { return ion_name; } + inline void SetNbPrimaryFwdGammasPerEvent(G4int nb) { nb_fwd_gammas_per_event = nb; } inline void SetNbAdjointPrimaryGammasPerEvent(G4int nb) { nb_adj_primary_gammas_per_event = nb; @@ -137,12 +119,10 @@ class G4AdjointPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction return ListOfPrimaryFwdParticles[index_particle]; } - private: // methods - + private: // methods G4double ComputeEnergyDistWeight(G4double energy, G4double E1, G4double E2); - private: // attributes - + private: // attributes G4String rndmFlag; // flag for a rndm impact point // The generator of primary vertex except for weight @@ -161,7 +141,7 @@ class G4AdjointPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction std::vector ListOfPrimaryFwdParticles; std::vector ListOfPrimaryAdjParticles; std::map PrimariesConsideredInAdjointSim; - // if true considered if false not considered + // if true considered if false not considered std::size_t index_particle = 100000; diff --git a/source/run/include/G4AdjointSimManager.hh b/source/run/include/G4AdjointSimManager.hh index 6b888207f24..c4da3067017 100644 --- a/source/run/include/G4AdjointSimManager.hh +++ b/source/run/include/G4AdjointSimManager.hh @@ -137,11 +137,11 @@ #ifndef G4AdjointSimManager_hh #define G4AdjointSimManager_hh 1 -#include - -#include "globals.hh" #include "G4ThreeVector.hh" #include "G4UserRunAction.hh" +#include "globals.hh" + +#include class G4UserEventAction; class G4VUserPrimaryGeneratorAction; @@ -162,23 +162,22 @@ class G4Run; class G4AdjointSimManager : public G4UserRunAction { public: - static G4AdjointSimManager* GetInstance(); - virtual void BeginOfRunAction(const G4Run* aRun); - virtual void EndOfRunAction(const G4Run* aRun); + void BeginOfRunAction(const G4Run* aRun) override; + void EndOfRunAction(const G4Run* aRun) override; void RunAdjointSimulation(G4int nb_evt); inline G4int GetNbEvtOfLastRun() { return nb_evt_of_last_run; } void SetAdjointTrackingMode(G4bool aBool); G4bool GetAdjointTrackingMode(); - // true if an adjoint track is being processed + // true if an adjoint track is being processed inline G4bool GetAdjointSimMode() { return adjoint_sim_mode; - } // true if an adjoint simulation is running + } // true if an adjoint simulation is running G4bool GetDidAdjParticleReachTheExtSource(); void RegisterAtEndOfAdjointTrack(); @@ -207,28 +206,23 @@ class G4AdjointSimManager : public G4UserRunAction std::size_t GetNbOfPrimaryFwdParticles(); G4bool DefineSphericalExtSource(G4double radius, G4ThreeVector pos); - G4bool DefineSphericalExtSourceWithCentreAtTheCentreOfAVolume( - G4double radius, const G4String& volume_name); + G4bool DefineSphericalExtSourceWithCentreAtTheCentreOfAVolume(G4double radius, + const G4String& volume_name); G4bool DefineExtSourceOnTheExtSurfaceOfAVolume(const G4String& volume_name); void SetExtSourceEmax(G4double Emax); // Definition of adjoint source //---------------------------- G4bool DefineSphericalAdjointSource(G4double radius, G4ThreeVector pos); - G4bool DefineSphericalAdjointSourceWithCentreAtTheCentreOfAVolume( - G4double radius, const G4String& volume_name); - G4bool DefineAdjointSourceOnTheExtSurfaceOfAVolume( - const G4String& volume_name); + G4bool DefineSphericalAdjointSourceWithCentreAtTheCentreOfAVolume(G4double radius, + const G4String& volume_name); + G4bool DefineAdjointSourceOnTheExtSurfaceOfAVolume(const G4String& volume_name); void SetAdjointSourceEmin(G4double Emin); void SetAdjointSourceEmax(G4double Emax); - inline G4double GetAdjointSourceArea() - { - return area_of_the_adjoint_source; - } + inline G4double GetAdjointSourceArea() { return area_of_the_adjoint_source; } void ConsiderParticleAsPrimary(const G4String& particle_name); void NeglectParticleAsPrimary(const G4String& particle_name); - void SetPrimaryIon(G4ParticleDefinition* adjointIon, - G4ParticleDefinition* fwdIon); + void SetPrimaryIon(G4ParticleDefinition* adjointIon, G4ParticleDefinition* fwdIon); const G4String& GetPrimaryIonName(); inline void SetNormalisationMode(G4int n) { normalisation_mode = n; } @@ -254,11 +248,9 @@ class G4AdjointSimManager : public G4UserRunAction } // Set nb of primary fwd gamma - //--------------------------- void SetNbOfPrimaryFwdGammasPerEvent(G4int); // Set nb of adjoint primaries for reverse splitting - //------------------------------------------------- void SetNbAdjointPrimaryGammasPerEvent(G4int); void SetNbAdjointPrimaryElectronsPerEvent(G4int); @@ -276,7 +268,6 @@ class G4AdjointSimManager : public G4UserRunAction void BackToFwdSimulationMode(); private: // methods - static G4ThreadLocal G4AdjointSimManager* instance; void SetRestOfAdjointActions(); @@ -287,12 +278,11 @@ class G4AdjointSimManager : public G4UserRunAction void ResetUserActions(); void DefineUserActions(); + // private constructor and destructor G4AdjointSimManager(); - ~G4AdjointSimManager(); - // private constructor and destructor + ~G4AdjointSimManager() override; private: // attributes - // Messenger //---------- G4AdjointSimMessenger* theMessenger = nullptr; @@ -307,7 +297,7 @@ class G4AdjointSimManager : public G4UserRunAction G4UserTrackingAction* fUserTrackingAction = nullptr; G4UserSteppingAction* fUserSteppingAction = nullptr; G4UserStackingAction* fUserStackingAction = nullptr; - G4bool use_user_StackingAction = false; // only for fwd part of adjoint sim + G4bool use_user_StackingAction = false; // only for fwd part of adjoint sim G4bool use_user_TrackingAction = false; // action for adjoint simulation @@ -339,7 +329,7 @@ class G4AdjointSimManager : public G4UserRunAction G4ThreeVector last_pos; G4ThreeVector last_direction; G4double last_ekin = 0.0, last_ekin_nuc = 0.0; - // last_ekin_nuc=last_ekin/nuc, nuc is 1 if not a nucleus + // last_ekin_nuc=last_ekin/nuc, nuc is 1 if not a nucleus G4double last_cos_th = 0.0; G4String last_fwd_part_name; G4int last_fwd_part_PDGEncoding = 0; @@ -356,24 +346,7 @@ class G4AdjointSimManager : public G4UserRunAction G4double nb_nuc = 1.0; G4double theAdjointPrimaryWeight = 0.0; - // Weight Analysis - //---------- - /*G4PhysicsLogVector* electron_last_weight_vector; - G4PhysicsLogVector* proton_last_weight_vector; - G4PhysicsLogVector* gamma_last_weight_vector;*/ - G4bool welcome_message = true; - - /* For the future - //Convergence test - //---------------- - - G4double normalised_signal; - G4double error_signal; - G4bool convergence_test_is_used; - G4bool power_law_spectrum_for_convergence_test; // true PowerLaw - G4ParticleDefinition* the_par_def_for_convergence_test; - */ }; #endif diff --git a/source/run/include/G4ExceptionHandler.hh b/source/run/include/G4ExceptionHandler.hh index f5a5b50365a..19193c47a8b 100644 --- a/source/run/include/G4ExceptionHandler.hh +++ b/source/run/include/G4ExceptionHandler.hh @@ -37,31 +37,28 @@ #ifndef G4ExceptionHandler_hh #define G4ExceptionHandler_hh 1 -#include "globals.hh" #include "G4ExceptionSeverity.hh" #include "G4VExceptionHandler.hh" +#include "globals.hh" class G4ExceptionHandler : public G4VExceptionHandler { public: - - G4ExceptionHandler(); - virtual ~G4ExceptionHandler(); + G4ExceptionHandler() = default; + ~G4ExceptionHandler() override = default; G4bool operator==(const G4ExceptionHandler& right) const; G4bool operator!=(const G4ExceptionHandler& right) const; G4ExceptionHandler(const G4ExceptionHandler&) = delete; G4ExceptionHandler& operator=(const G4ExceptionHandler&) = delete; - virtual G4bool Notify(const char* originOfException, - const char* exceptionCode, G4ExceptionSeverity severity, - const char* description); - // Will be invoked by G4StateManager when G4Exception occurs. - // If TRUE returned, core dump is generated, while if FALSE, - // the program execution continues. + // Will be invoked by G4StateManager when G4Exception occurs. + // If TRUE returned, core dump is generated, while if FALSE, + // the program execution continues. + G4bool Notify(const char* originOfException, const char* exceptionCode, + G4ExceptionSeverity severity, const char* description) override; private: - void DumpTrackInfo(); }; diff --git a/source/run/include/G4MSSteppingAction.hh b/source/run/include/G4MSSteppingAction.hh index 38ccb14c605..66f41d204cf 100644 --- a/source/run/include/G4MSSteppingAction.hh +++ b/source/run/include/G4MSSteppingAction.hh @@ -34,27 +34,25 @@ #ifndef G4MSSteppingAction_hh #define G4MSSteppingAction_hh 1 -#include "globals.hh" #include "G4UserSteppingAction.hh" +#include "globals.hh" class G4Region; class G4MSSteppingAction : public G4UserSteppingAction { public: - - G4MSSteppingAction(); - virtual ~G4MSSteppingAction(); + G4MSSteppingAction() = default; + ~G4MSSteppingAction() override = default; void Initialize(G4bool rSens, G4Region* reg); - virtual void UserSteppingAction(const G4Step*); + void UserSteppingAction(const G4Step*) override; inline G4double GetTotalStepLength() const { return length; } inline G4double GetX0() const { return x0; } inline G4double GetLambda0() const { return lambda; } private: - G4bool regionSensitive = false; G4Region* theRegion = nullptr; G4double length = 0.0; diff --git a/source/run/include/G4MTRunManager.hh b/source/run/include/G4MTRunManager.hh index 3caeefa0d0b..d4835fa8230 100644 --- a/source/run/include/G4MTRunManager.hh +++ b/source/run/include/G4MTRunManager.hh @@ -38,14 +38,14 @@ #ifndef G4MTRunManager_hh #define G4MTRunManager_hh 1 -#include -#include - #include "G4MTBarrier.hh" +#include "G4Profiler.hh" #include "G4RNGHelper.hh" #include "G4RunManager.hh" #include "G4Threading.hh" -#include "G4Profiler.hh" + +#include +#include class G4MTRunManagerKernel; class G4ScoringManager; @@ -57,107 +57,104 @@ class G4RunManagerFactory; class G4MTRunManager : public G4RunManager { - friend class G4RunManagerFactory; + friend class G4RunManagerFactory; public: - + // The profiler aliases are only used when compiled with + // GEANT4_USE_TIMEMORY. using ProfilerConfig = G4ProfilerConfig; - // The profiler aliases are only used when compiled with - // GEANT4_USE_TIMEMORY. + // Map of defined worlds. using masterWorlds_t = std::map; - // Map of defined worlds. + public: G4MTRunManager(); - virtual ~G4MTRunManager(); + ~G4MTRunManager() override; - virtual void SetNumberOfThreads(G4int n); - virtual G4int GetNumberOfThreads() const { return nworkers; } + void SetNumberOfThreads(G4int n) override; + G4int GetNumberOfThreads() const override { return nworkers; } void SetPinAffinity(G4int n = 1); inline G4int GetPinAffinity() const { return pinAffinity; } // Inherited methods to re-implement for MT case - virtual void Initialize(); - virtual void InitializeEventLoop(G4int n_event, const char* macroFile = 0, - G4int n_select = -1); + void Initialize() override; + void InitializeEventLoop(G4int n_event, const char* macroFile = nullptr, + G4int n_select = -1) override; virtual void InitializeThreadPool() {} // The following do not do anything for this runmanager - virtual void TerminateOneEvent(); - virtual void ProcessOneEvent(G4int i_event); - virtual void ConstructScoringWorlds(); - virtual void RunTermination(); - - virtual G4bool SetUpAnEvent(G4Event*, long& s1, long& s2, long& s3, + void TerminateOneEvent() override; + void ProcessOneEvent(G4int i_event) override; + void ConstructScoringWorlds() override; + void RunTermination() override; + + // The following method should be invoked by G4WorkerRunManager for each + // event. False is returned if no more event to be processed. + // Note: G4Event object must be instantiated by a worker thread. + // In case no more events remain to be processed, that worker thread must + // delete that G4Event object. If a worker runs with its own random number + // sequence, the Boolean flag 'reseedRequired' should be set to false. + // This is *NOT* allowed for the first event. + virtual G4bool SetUpAnEvent(G4Event*, G4long& s1, G4long& s2, G4long& s3, G4bool reseedRequired = true); - // The following method should be invoked by G4WorkerRunManager for each - // event. False is returned if no more event to be processed. - // Note: G4Event object must be instantiated by a worker thread. - // In case no more events remain to be processed, that worker thread must - // delete that G4Event object. If a worker runs with its own random number - // sequence, the Boolean flag 'reseedRequired' should be set to false. - // This is *NOT* allowed for the first event. - - virtual G4int SetUpNEvents(G4Event*, G4SeedsQueue* seedsQueue, - G4bool reseedRequired = true); - // Same as above method, but seeds are set only once over "eventModulo" - // events. The return value shows the number of events the caller Worker - // has to process (between 1 and eventModulo depending on number of events - // yet to be processed). G4Event object has the event ID of the first - // event of this bunch. If zero is returned no more events need to be - // processed, and worker thread must delete that G4Event. - // Called by Initialize() method. + // Same as above method, but seeds are set only once over "eventModulo" + // events. The return value shows the number of events the caller Worker + // has to process (between 1 and eventModulo depending on number of events + // yet to be processed). G4Event object has the event ID of the first + // event of this bunch. If zero is returned no more events need to be + // processed, and worker thread must delete that G4Event. + // Called by Initialize() method. + virtual G4int SetUpNEvents(G4Event*, G4SeedsQueue* seedsQueue, G4bool reseedRequired = true); + + // This method is invoked just before spawning the threads to + // collect from UI manager the list of commands that threads + // will execute. std::vector GetCommandStack(); - // This method is invoked just before spawning the threads to - // collect from UI manager the list of commands that threads - // will execute. + // Returns number of currently active threads. + // This number may be different from the number of threads currently + // in running state, e.g. the number returned by: + // G4Threading::GetNumberOfActiveWorkerThreads() method. virtual size_t GetNumberActiveThreads() const { return threads.size(); } - // Returns number of currently active threads. - // This number may be different from the number of threads currently - // in running state, e.g. the number returned by: - // G4Threading::GetNumberOfActiveWorkerThreads() method. static G4ThreadId GetMasterThreadId(); + // Worker threads barrier: this method should be called by each + // worker when ready to start thread event-loop. + // This method will return only when all workers are ready. virtual void ThisWorkerReady(); - // Worker threads barrier: this method should be called by each - // worker when ready to start thread event-loop. - // This method will return only when all workers are ready. + // Worker threads barrier: this method should be called by each + // worker when worker event loop is terminated. virtual void ThisWorkerEndEventLoop(); - // Worker threads barrier: this method should be called by each - // worker when worker event loop is terminated. static G4ScoringManager* GetMasterScoringManager(); static masterWorlds_t& GetMasterWorlds(); static void addWorld(G4int counter, G4VPhysicalVolume* w); - inline const CLHEP::HepRandomEngine* getMasterRandomEngine() const - { - return masterRNGEngine; - } + inline const CLHEP::HepRandomEngine* getMasterRandomEngine() const { return masterRNGEngine; } + // Returns the singleton instance of the run manager common to all + // threads implementing the master behavior static G4MTRunManager* GetMasterRunManager(); - // Returns the singleton instance of the run manager common to all - // threads implementing the master behavior + + // Returns the singleton instance of the run manager kernel common to all + // threads static G4RunManagerKernel* GetMasterRunManagerKernel(); static G4MTRunManagerKernel* GetMTMasterRunManagerKernel(); - // Returns the singleton instance of the run manager kernel common to all - //threads - - virtual void SetUserInitialization(G4VUserPhysicsList* userPL); - virtual void SetUserInitialization(G4VUserDetectorConstruction* userDC); - virtual void SetUserInitialization(G4UserWorkerInitialization* userInit); - virtual void SetUserInitialization(G4UserWorkerThreadInitialization* userInit); - virtual void SetUserInitialization(G4VUserActionInitialization* userInit); - virtual void SetUserAction(G4UserRunAction* userAction); - virtual void SetUserAction(G4VUserPrimaryGeneratorAction* userAction); - virtual void SetUserAction(G4UserEventAction* userAction); - virtual void SetUserAction(G4UserStackingAction* userAction); - virtual void SetUserAction(G4UserTrackingAction* userAction); - virtual void SetUserAction(G4UserSteppingAction* userAction); + + void SetUserInitialization(G4VUserPhysicsList* userPL) override; + void SetUserInitialization(G4VUserDetectorConstruction* userDC) override; + void SetUserInitialization(G4UserWorkerInitialization* userInit) override; + void SetUserInitialization(G4UserWorkerThreadInitialization* userInit) override; + void SetUserInitialization(G4VUserActionInitialization* userInit) override; + void SetUserAction(G4UserRunAction* userAction) override; + void SetUserAction(G4VUserPrimaryGeneratorAction* userAction) override; + void SetUserAction(G4UserEventAction* userAction) override; + void SetUserAction(G4UserStackingAction* userAction) override; + void SetUserAction(G4UserTrackingAction* userAction) override; + void SetUserAction(G4UserSteppingAction* userAction) override; // To be invoked solely from G4WorkerRunManager to merge the results void MergeScores(const G4ScoringManager* localScoringManager); @@ -168,79 +165,80 @@ class G4MTRunManager : public G4RunManager { UNDEFINED, NEXTITERATION, // There is another set of UI commands to be executed - PROCESSUI, // Process UI commands w/o a /run/beamOn - ENDWORKER // Terminate thread, work finished + PROCESSUI, // Process UI commands w/o a /run/beamOn + ENDWORKER // Terminate thread, work finished }; + // Called to force workers to request and process the UI commands stack + // This will block untill all workers have processed UI commands virtual void RequestWorkersProcessCommandsStack(); - // Called to force workers to request and process the UI commands stack - // This will block untill all workers have processed UI commands + + // Called by workers to signal to master it has completed processing of + // UI commands virtual void ThisWorkerProcessCommandsStackDone(); - // Called by workers to signal to master it has completed processing of - // UI commands + + // Worker thread barrier: this method should be used by workers' run + // manager to wait, after an event loop for the next action to be + // performed (for example execute a new run). + // This returns the action to be performed. virtual WorkerActionRequest ThisWorkerWaitForNextAction(); - // Worker thread barrier: this method should be used by workers' run - // manager to wait, after an event loop for the next action to be - // performed (for example execute a new run). - // This returns the action to be performed. inline void SetEventModulo(G4int i = 1) { eventModuloDef = i; } inline G4int GetEventModulo() const { return eventModuloDef; } - virtual void AbortRun(G4bool softAbort = false); - virtual void AbortEvent(); + void AbortRun(G4bool softAbort = false) override; + void AbortEvent() override; static G4int SeedOncePerCommunication(); static void SetSeedOncePerCommunication(G4int val); protected: - + // Initialize the seeds list, if derived class does not implement this + // method, a default generation will be used (nevents*2 random seeds). + // Return true if initialization is done. + // Adds one seed to the list of seeds. virtual G4bool InitializeSeeds(G4int /*nevts*/) { return false; }; - // Initialize the seeds list, if derived class does not implement this - // method, a default generation will be used (nevents*2 random seeds). - // Return true if initialization is done. - // Adds one seed to the list of seeds. virtual void PrepareCommandsStack(); - virtual void StoreRNGStatus(const G4String& filenamePrefix); - virtual void rndmSaveThisRun(); - virtual void rndmSaveThisEvent(); + void StoreRNGStatus(const G4String& filenamePrefix) override; + void rndmSaveThisRun() override; + void rndmSaveThisEvent() override; + + // Creates worker threads and signal to start virtual void CreateAndStartWorkers(); - // Creates worker threads and signal to start + // Master thread barrier: call this function to block master thread and + // wait workers to be ready to process work. This function will return + // only when all workers are ready to perform event loop. virtual void WaitForReadyWorkers(); - // Master thread barrier: call this function to block master thread and - // wait workers to be ready to process work. This function will return - // only when all workers are ready to perform event loop. + // Master thread barrier: call this function to block master thread and + // wait workers have finished current event loop. This function will + // return only when all workers have finished processing events for + // this run. virtual void WaitForEndEventLoopWorkers(); - // Master thread barrier: call this function to block master thread and - // wait workers have finished current event loop. This function will - // return only when all workers have finished processing events for - // this run. + // Empty the workersList. virtual void TerminateWorkers(); - // Empty the workersList. virtual void NewActionRequest(WorkerActionRequest newRequest); virtual void RefillSeeds(); protected: - + // Number of worker threads. To be set by SetNumberOfThreads() method. G4int nworkers = 2; - // Number of worker threads. To be set by SetNumberOfThreads() method. + // Force to use this number regardless of SetNumberOfThreads() method. G4int forcedNwokers = -1; - // Force to use this number regardless of SetNumberOfThreads() method. G4int numberOfEventToBeProcessed = 0; + // Handling of master thread scoring worlds, access is needed by workers G4MTRUN_DLL static G4ScoringManager* masterScM; - // Handling of master thread scoring worlds, access is needed by workers G4MTRUN_DLL static masterWorlds_t masterWorlds; + // Singleton implementing master thread behavior G4MTRUN_DLL static G4MTRunManager* fMasterRM; - // Singleton implementing master thread behavior WorkerActionRequest nextActionRequest = WorkerActionRequest::UNDEFINED; @@ -253,21 +251,22 @@ class G4MTRunManager : public G4RunManager G4double* randDbl = nullptr; static G4ThreadId masterThreadId; + + // - If it is set to 0 (default), seeds that are centrally managed + // by G4MTRunManager are set for every event of every worker thread. + // This option guarantees event reproducibility regardless of number + // of threads. + // - If it is set to 1, seeds are set only once for the first + // event of each run of each worker thread. Event reproducibility is + // guaranteed only if the same number of worker threads are used. + // On the other hand, this option offers better computing performance + // in particular for applications with relatively small primary + // particle energy and large number of events. + // - If it is set to 2, seeds are set only for the first event of + // group of N events. This option is reserved for the future use when + // Geant4 will allow number of threads to be dynamically changed during + // an event loop. static G4int seedOncePerCommunication; - // - If it is set to 0 (default), seeds that are centrally managed - // by G4MTRunManager are set for every event of every worker thread. - // This option guarantees event reproducibility regardless of number - // of threads. - // - If it is set to 1, seeds are set only once for the first - // event of each run of each worker thread. Event reproducibility is - // guaranteed only if the same number of worker threads are used. - // On the other hand, this option offers better computing performance - // in particular for applications with relatively small primary - // particle energy and large number of events. - // - If it is set to 2, seeds are set only for the first event of - // group of N events. This option is reserved for the future use when - // Geant4 will allow number of threads to be dynamically changed during - // an event loop. // Barriers: synch points between master and workers G4MTBarrier beginOfEventLoopBarrier; @@ -276,19 +275,21 @@ class G4MTRunManager : public G4RunManager G4MTBarrier processUIBarrier; private: - + // List of workers (i.e. thread) using G4ThreadsList = std::list; - // List of workers (i.e. thread) + // Pin Affinity parameter G4int pinAffinity = 0; - // Pin Affinity parameter + + // List of workers run managers + // List of all workers run managers G4ThreadsList threads; - // List of workers run managers - // List of all workers run managers + + // List of UI commands for workers. std::vector uiCmdsForWorkers; - // List of UI commands for workers. + + // Pointer to the master thread random engine CLHEP::HepRandomEngine* masterRNGEngine = nullptr; - // Pointer to the mastet thread random engine G4MTRunManagerKernel* MTkernel = nullptr; }; diff --git a/source/run/include/G4MTRunManagerKernel.hh b/source/run/include/G4MTRunManagerKernel.hh index a43e4f025e5..c0f7d8fcb28 100644 --- a/source/run/include/G4MTRunManagerKernel.hh +++ b/source/run/include/G4MTRunManagerKernel.hh @@ -54,42 +54,39 @@ #ifndef G4MTRunManagerKernel_hh #define G4MTRunManagerKernel_hh 1 -#include - #include "G4MTRunManager.hh" #include "G4RunManagerKernel.hh" #include "G4Threading.hh" +#include + class G4WorkerThread; class G4WorkerRunManager; class G4MTRunManagerKernel : public G4RunManagerKernel { public: - G4MTRunManagerKernel(); - virtual ~G4MTRunManagerKernel(); + ~G4MTRunManagerKernel() override; + // Used to start a worker thread. Virtual methods to be invoked + // from this method are defined in G4UserWorkerInitialization class. static void StartThread(G4WorkerThread* context); - // Used to start a worker thread. Virtual methods to be invoked - // from this method are defined in G4UserWorkerInitialization class. static G4WorkerThread* GetWorkerThread(); + // Fill decay tables with particle definition pointers of decay products. + // This method has to be invoked by G4MTRunManager before the event loop + // starts on workers. void SetUpDecayChannels(); - // Fill decay tables with particle definition pointers of decay products. - // This method has to be invoked by G4MTRunManager before the event loop - // starts on workers. + // This method should be invoked by G4MTRunManager. void BroadcastAbortRun(G4bool softAbort); - // This method should be invoked by G4MTRunManager. protected: - - void SetupShadowProcess() const; + void SetupShadowProcess() const override; private: - static G4ThreadLocal G4WorkerThread* wThreadContext; static std::vector* workerRMvector; diff --git a/source/run/include/G4MaterialScanner.hh b/source/run/include/G4MaterialScanner.hh index ead1463aa24..6d0e75fdcb8 100644 --- a/source/run/include/G4MaterialScanner.hh +++ b/source/run/include/G4MaterialScanner.hh @@ -52,13 +52,12 @@ class G4Region; class G4MaterialScanner { public: - G4MaterialScanner(); - ~G4MaterialScanner(); + ~G4MaterialScanner(); + // The main entry point which triggers ray tracing. + // This method is available only if Geant4 is in Idle state. void Scan(); - // The main entry point which triggers ray tracing. - // This method is available only if Geant4 is in Idle state. inline void SetEyePosition(const G4ThreeVector& val) { eyePosition = val; } inline G4ThreeVector GetEyePosition() const { return eyePosition; } @@ -80,19 +79,17 @@ class G4MaterialScanner inline const G4String& GetRegionName() const { return regionName; } private: - void DoScan(); - // Event loop + // Event loop void StoreUserActions(); void RestoreUserActions(); - // Store and restore user action classes if defined. + // Store and restore user action classes if defined. private: - G4RayShooter* theRayShooter = nullptr; G4MatScanMessenger* theMessenger = nullptr; - + G4EventManager* theEventManager = nullptr; G4UserEventAction* theUserEventAction = nullptr; diff --git a/source/run/include/G4MultiRunAction.hh b/source/run/include/G4MultiRunAction.hh index fb7a50f6ab9..77d17218496 100644 --- a/source/run/include/G4MultiRunAction.hh +++ b/source/run/include/G4MultiRunAction.hh @@ -45,24 +45,23 @@ #ifndef G4MultiRunAction_hh #define G4MultiRunAction_hh 1 +#include "G4UserRunAction.hh" + #include #include -#include "G4UserRunAction.hh" - -using G4UserRunActionUPtr = std::unique_ptr; +using G4UserRunActionUPtr = std::unique_ptr; using G4UserRunActionVector = std::vector; class G4MultiRunAction : public G4UserRunAction, public G4UserRunActionVector { public: - - G4MultiRunAction() = default; - virtual ~G4MultiRunAction() = default; - virtual G4Run* GenerateRun() override; - virtual void BeginOfRunAction(const G4Run* aRun) override; - virtual void EndOfRunAction(const G4Run* aRun) override; - virtual void SetMaster(G4bool val = true) override; + G4MultiRunAction() = default; + ~G4MultiRunAction() override = default; + G4Run* GenerateRun() override; + void BeginOfRunAction(const G4Run* aRun) override; + void EndOfRunAction(const G4Run* aRun) override; + void SetMaster(G4bool val = true) override; }; #endif diff --git a/source/run/include/G4PhysicsBuilderInterface.hh b/source/run/include/G4PhysicsBuilderInterface.hh index 236e0428a3f..d5315ac0d88 100644 --- a/source/run/include/G4PhysicsBuilderInterface.hh +++ b/source/run/include/G4PhysicsBuilderInterface.hh @@ -39,35 +39,30 @@ class G4PhysicsBuilderInterface { public: - G4PhysicsBuilderInterface() = default; - virtual ~G4PhysicsBuilderInterface() {} + virtual ~G4PhysicsBuilderInterface() = default; virtual void Build() { - G4Exception("G4PhysicsBuilderInterface::Build", "PHYSBLD001", - FatalException, + G4Exception("G4PhysicsBuilderInterface::Build", "PHYSBLD001", FatalException, "Called based class method. Should be implemented in" " inherited class"); } virtual void RegisterMe(G4PhysicsBuilderInterface*) { - G4Exception("G4PhysicsBuilderInterface::RegisterMe", "PHYSBLD001", - FatalException, + G4Exception("G4PhysicsBuilderInterface::RegisterMe", "PHYSBLD001", FatalException, "Called based class method. Should be implemented in" " inherited class, or wrong type of parameter passed."); } virtual void SetMinEnergy(G4double) { - G4Exception("G4PhysicsBuilderInterface::SetMinEnergy", "PHYSBLD001", - FatalException, + G4Exception("G4PhysicsBuilderInterface::SetMinEnergy", "PHYSBLD001", FatalException, "Called based class method. Should be implemented in" " inherited class"); } virtual void SetMaxEnergy(G4double) { - G4Exception("G4PhysicsBuilderInterface::SetMaxEnergy", "PHYSBLD001", - FatalException, + G4Exception("G4PhysicsBuilderInterface::SetMaxEnergy", "PHYSBLD001", FatalException, "Called based class method. Should be implemented in" " inherited class"); } diff --git a/source/run/include/G4PhysicsListHelper.hh b/source/run/include/G4PhysicsListHelper.hh index e921715b94d..f00f4a4476c 100644 --- a/source/run/include/G4PhysicsListHelper.hh +++ b/source/run/include/G4PhysicsListHelper.hh @@ -35,75 +35,71 @@ #ifndef G4PhysicsListHelper_hh #define G4PhysicsListHelper_hh 1 -#include - -#include "G4ios.hh" -#include "globals.hh" - #include "G4ParticleDefinition.hh" #include "G4ParticleTable.hh" #include "G4PhysicsListOrderingParameter.hh" #include "G4ThreadLocalSingleton.hh" +#include "G4ios.hh" +#include "globals.hh" + +#include class G4VProcess; class G4PhysicsListHelper { - friend class G4ThreadLocalSingleton; + friend class G4ThreadLocalSingleton; public: - + // Returns the pointer to the physics list helper static G4PhysicsListHelper* GetPhysicsListHelper(); - // Returns the pointer to the physics list helper + // Registers a process to the particle type according to the ordering + // parameter table. Returns 'true' if process is successfully registered. G4bool RegisterProcess(G4VProcess* process, G4ParticleDefinition* particle); - // Registers a process to the particle type according to the ordering - // parameter table. Returns 'true' if process is successfully registered. + // User must invoke this method in his ConstructProcess() implementation + // in order to enable particle transportation. void AddTransportation(); - // User must invoke this method in his ConstructProcess() implementation - // in order to enable particle transportation. + // Set flag for using G4CoupledTransportation. void UseCoupledTransportation(G4bool vl = true); - // Set flag for using G4CoupledTransportation. + // Change the thresholds for killing looping tracks in transportation. void UseHighLooperThresholds() { theLooperThresholds = 2; } void UseLowLooperThresholds() { theLooperThresholds = 0; } - // Change the thresholds for killing looping tracks in transportation. + // Check consistencies of list of particles. void CheckParticleList() const; - // Check consistencies of list of particles. + // Dump OrdingParameterTable. void DumpOrdingParameterTable(G4int subType = -1) const; - // Dump OrdingParameterTable. G4PhysicsListOrderingParameter GetOrdingParameter(G4int subType) const; + // set/get controle flag for output message + // 0: Silent + // 1: Warning message + // 2: More void SetVerboseLevel(G4int value); G4int GetVerboseLevel() const; - // set/get controle flag for output message - // 0: Silent - // 1: Warning message - // 2: More private: - + // Hidden constructor and destructor. G4PhysicsListHelper(); ~G4PhysicsListHelper(); - // Hidden constructor and destructor. void ReadOrdingParameterTable(); void ReadInDefaultOrderingParameter(); private: - using G4OrdParamTable = std::vector; static G4ThreadLocal G4PhysicsListHelper* pPLHelper; + // The particle table has the complete List of existing particle types. G4ParticleTable* theParticleTable = nullptr; G4ParticleTable::G4PTblDicIterator* aParticleIterator = nullptr; - // The particle table has the complete List of existing particle types. G4bool useCoupledTransportation = false; G4int theLooperThresholds = 1; // 0 = Low, 1 = default, 2 = high diff --git a/source/run/include/G4PhysicsListOrderingParameter.hh b/source/run/include/G4PhysicsListOrderingParameter.hh index c31dce61aed..63162fb3d8b 100644 --- a/source/run/include/G4PhysicsListOrderingParameter.hh +++ b/source/run/include/G4PhysicsListOrderingParameter.hh @@ -24,7 +24,7 @@ // ******************************************************************** // // G4PhysicsListOrderingParameter -// +// // Class description: // // This class defins a parameter ordering used by G4PhysicsListHelper. @@ -40,12 +40,11 @@ class G4PhysicsListHelper; class G4PhysicsListOrderingParameter { - friend class G4PhysicsListHelper; + friend class G4PhysicsListHelper; public: - - G4PhysicsListOrderingParameter(); - virtual ~G4PhysicsListOrderingParameter(); + G4PhysicsListOrderingParameter() = default; + virtual ~G4PhysicsListOrderingParameter() = default; inline const G4String& GetTypeName() const { return processTypeName; } inline G4int GetType() const { return processType; } @@ -57,11 +56,10 @@ class G4PhysicsListOrderingParameter inline G4bool GetDuplicable() const { return isDuplicable; } private: - G4String processTypeName = "NONE"; G4int processType = -1; G4int processSubType = -1; - G4int ordering[3]; + G4int ordering[3] = {-1, -1, -1}; G4bool isDuplicable = false; }; diff --git a/source/run/include/G4PhysicsListWorkspace.hh b/source/run/include/G4PhysicsListWorkspace.hh index 84132ee5106..8d18d9853ad 100644 --- a/source/run/include/G4PhysicsListWorkspace.hh +++ b/source/run/include/G4PhysicsListWorkspace.hh @@ -50,18 +50,23 @@ class G4PhysicsListWorkspace { public: - using pool_type = G4TWorkspacePool; + public: G4PhysicsListWorkspace(G4bool verbose = false); - ~G4PhysicsListWorkspace(); + ~G4PhysicsListWorkspace() = default; + + // Take ownership + void UseWorkspace(); - void UseWorkspace(); // Take ownership - void ReleaseWorkspace(); // Release ownership - void DestroyWorkspace(); // Release ownership and destroy + // Release ownership + void ReleaseWorkspace(); + // Release ownership and destroy + void DestroyWorkspace(); + + // To be called at start of each run (especially 2nd and further runs) void InitialiseWorkspace(); - // To be called at start of each run (especially 2nd and further runs) inline void SetVerbose(G4bool v) { fVerbose = v; } inline G4bool GetVerbose() { return fVerbose; } @@ -69,21 +74,19 @@ class G4PhysicsListWorkspace static pool_type* GetPool(); protected: // Implementation methods - void InitialisePhysicsList(); private: // Helper pointers - can be per instance or shared - + // Store SubInstanceManager object pointers (SIM pointers) G4VUPLManager* fpVUPLSIM = nullptr; G4VPCManager* fpVPCSIM = nullptr; G4VMPLManager* fpVMPLSIM = nullptr; - // Store SubInstanceManager object pointers (SIM pointers) + // Per Instance variables + // The ownership of the Data Arrays is IN this object G4VUPLData* fpVUPLOffset = nullptr; G4VPCData* fpVPCOffset = nullptr; G4VMPLData* fpVMPLOffset = nullptr; - // Per Instance variables - // The ownership of the Data Arrays is IN this object G4bool fVerbose = false; }; diff --git a/source/run/include/G4RNGHelper.hh b/source/run/include/G4RNGHelper.hh index 1ce72fb85c3..9d9b89e353d 100644 --- a/source/run/include/G4RNGHelper.hh +++ b/source/run/include/G4RNGHelper.hh @@ -42,30 +42,29 @@ #ifndef G4TemplateRNGHelper_hh #define G4TemplateRNGHelper_hh 1 +#include "globals.hh" + #include #include -#include "globals.hh" - -template +template class G4TemplateRNGHelper { public: + using SeedsQueue = std::vector; + using SeedsQueueSize_type = typename SeedsQueue::size_type; + public: // The container is modeled as a (shared) singleton static G4TemplateRNGHelper* GetInstance(); static G4TemplateRNGHelper* GetInstanceIfExist(); - using SeedsQueue = std::vector; - using SeedsQueueSize_type = typename SeedsQueue::size_type; - virtual ~G4TemplateRNGHelper(); // Returns seed given id virtual const T GetSeed(const G4int& sdId) { G4int seedId = sdId - 2 * offset; - if(seedId < static_cast(seeds.size())) - { + if (seedId < static_cast(seeds.size())) { T& seed = seeds[seedId]; return seed; } @@ -83,23 +82,20 @@ class G4TemplateRNGHelper void Fill(G4double* dbl, G4int nev, G4int nev_tot, G4int nrpe) { seeds.clear(); - for(G4int i = 0; i < nrpe * nev; ++i) - { + for (G4int i = 0; i < nrpe * nev; ++i) { seeds.push_back((G4long)(100000000L * dbl[i])); } - offset = 0; - nev_filled = nev; - nev_total = nev_tot; + offset = 0; + nev_filled = nev; + nev_total = nev_tot; nRandParEvent = nrpe; } void Refill(G4double* dbl, G4int nev) { - if(nev == 0) - return; + if (nev == 0) return; seeds.clear(); - for(G4int i = 0; i < nRandParEvent * nev; ++i) - { + for (G4int i = 0; i < nRandParEvent * nev; ++i) { seeds.push_back((G4long)(100000000L * dbl[i])); } offset += nev_filled; @@ -113,7 +109,6 @@ class G4TemplateRNGHelper virtual void Clear() { seeds.clear(); } protected: - SeedsQueue seeds; // Note: following numbers are number of events. // seeds are generated for nRandParEvent times n_event @@ -123,11 +118,9 @@ class G4TemplateRNGHelper G4int nRandParEvent = 0; private: - - G4TemplateRNGHelper() {} + G4TemplateRNGHelper() = default; private: - static G4TemplateRNGHelper* instance; }; diff --git a/source/run/include/G4Run.hh b/source/run/include/G4Run.hh index 53fc78c3ca7..afa3fa2b326 100644 --- a/source/run/include/G4Run.hh +++ b/source/run/include/G4Run.hh @@ -36,10 +36,10 @@ #ifndef G4Run_hh #define G4Run_hh 1 -#include - -#include "globals.hh" #include "G4Profiler.hh" +#include "globals.hh" + +#include class G4Event; class G4HCtable; @@ -48,68 +48,61 @@ class G4DCtable; class G4Run { public: - using ProfilerConfig = G4ProfilerConfig; + public: G4Run(); virtual ~G4Run(); - G4Run(const G4Run&) = delete; G4Run& operator=(const G4Run&) = delete; - // Forbidden copy constructor and assignment operator. + // Method to be overwritten by the user for recording events in this run. + // In such a case, it is the user's responsibility to increment + // numberOfEvent. Also, user's run class object must be instantiated in + // user's runAction. virtual void RecordEvent(const G4Event*); - // Method to be overwritten by the user for recording events in this run. - // In such a case, it is the user's responsibility to increment - // numberOfEvent. Also, user's run class object must be instantiated in - // user's runAction. + + // Method to be overwritten by the user for merging local G4Run object + // to the global G4Run object. virtual void Merge(const G4Run*); - // Method to be overwritten by the user for merging local G4Run object - // to the global G4Run object. + + // Store a G4Event object until this run object is deleted. + // Given the potential large memory size of G4Event and its data-member + // objects stored in G4Event, the user must be careful and responsible + // for not storing too many G4Event objects. This method is invoked by + // G4RunManager if the user invokes G4EventManager::KeepTheCurrentEvent() + // or "/event/keepCurrentEvent" UI command while the particular event is + // in being processed (typically in EndOfEventAction). void StoreEvent(G4Event* evt); - // Store a G4Event object until this run object is deleted. - // Given the potential large memory size of G4Event and its data-member - // objects stored in G4Event, the user must be careful and responsible - // for not storing too many G4Event objects. This method is invoked by - // G4RunManager if the user invokes G4EventManager::KeepTheCurrentEvent() - // or "/event/keepCurrentEvent" UI command while the particular event is - // in being processed (typically in EndOfEventAction). + // Returns the run ID. Run ID is set by G4RunManager. inline G4int GetRunID() const { return runID; } - // Returns the run ID. Run ID is set by G4RunManager. + + // Returns number of events processed in this run. The number is + // incremented at the end of each event processing. inline G4int GetNumberOfEvent() const { return numberOfEvent; } - // Returns number of events processed in this run. The number is - // incremented at the end of each event processing. - inline G4int GetNumberOfEventToBeProcessed() const - { - return numberOfEventToBeProcessed; - } + + inline G4int GetNumberOfEventToBeProcessed() const { return numberOfEventToBeProcessed; } + + // List of names of hits collection. inline const G4HCtable* GetHCtable() const { return HCtable; } - // List of names of hits collection. + + // List of names of digi collection. inline const G4DCtable* GetDCtable() const { return DCtable; } - // List of names of digi collection. - inline const G4String& GetRandomNumberStatus() const - { - return randomNumberStatus; - } - // Returns random number status at the beginning of this run. - inline const std::vector* GetEventVector() const - { - return eventVector; - } - // Returns the event vector. + + // Returns random number status at the beginning of this run. + inline const G4String& GetRandomNumberStatus() const { return randomNumberStatus; } + + // Returns the event vector. + inline const std::vector* GetEventVector() const { return eventVector; } inline void SetRunID(G4int id) { runID = id; } - inline void SetNumberOfEventToBeProcessed(G4int n_ev) - { - numberOfEventToBeProcessed = n_ev; - } + inline void SetNumberOfEventToBeProcessed(G4int n_ev) { numberOfEventToBeProcessed = n_ev; } inline void SetHCtable(G4HCtable* HCtbl) { HCtable = HCtbl; } inline void SetDCtable(G4DCtable* DCtbl) { DCtable = DCtbl; } inline void SetRandomNumberStatus(G4String& st) { randomNumberStatus = st; } protected: - G4int runID = 0; G4int numberOfEvent = 0; G4int numberOfEventToBeProcessed = 0; diff --git a/source/run/include/G4RunManager.hh b/source/run/include/G4RunManager.hh index f3d4e01fca6..4b75e307d48 100644 --- a/source/run/include/G4RunManager.hh +++ b/source/run/include/G4RunManager.hh @@ -101,15 +101,16 @@ #ifndef G4RunManager_hh #define G4RunManager_hh 1 -#include -#include - -#include "rundefs.hh" -#include "globals.hh" #include "G4Event.hh" #include "G4EventManager.hh" -#include "G4RunManagerKernel.hh" #include "G4Profiler.hh" +#include "G4RunManagerKernel.hh" +#include "globals.hh" + +#include "rundefs.hh" + +#include +#include // userAction classes class G4VUserDetectorConstruction; @@ -136,167 +137,165 @@ class G4RunManagerFactory; class G4RunManager { - friend class G4RunManagerFactory; + friend class G4RunManagerFactory; public: - + // the profiler aliases are only used when compiled with the + // GEANT4_USE_TIMEMORY flag enabled. using ProfilerConfig = G4ProfilerConfig; - // the profiler aliases are only used when compiled with the - // GEANT4_USE_TIMEMORY flag enabled. + public: + // Static method which returns the singleton pointer of G4RunManager + // or its derived class. + // Note this returns the per-thread singleton in case of a + // multi-threaded build. static G4RunManager* GetRunManager(); - // Static method which returns the singleton pointer of G4RunManager - // or its derived class. - // Note this returns the per-thread singleton in case of a - // multi-threaded build. + // The constructor and the destructor. The user must construct + // this class object at the beginning of his/her main() and must + // delete it at the bottom of the main(). G4RunManager(); virtual ~G4RunManager(); - // The constructor and the destructor. The user must construct - // this class object at the beginning of his/her main() and must - // delete it at the bottom of the main(). + // Forbidden copy constructor and assignment operator. G4RunManager(const G4RunManager&) = delete; G4RunManager& operator=(const G4RunManager&) = delete; - // Forbidden copy constructor and assignment operator. - - virtual void BeamOn(G4int n_event, const char* macroFile = nullptr, - G4int n_select = -1); - // This method starts an event loop of "n_event" events. The condition of - // Geant4 is examined before starting the event loop. This method must be - // invoked at 'Idle' state. The state will be changed to 'GeomClosed' - // during the event loop and will go back to 'Idle' when the loop is over - // or aborted. - // In case a string "macroFile" which represents the name of a macro file - // is provided, the macro file will be executed AT THE END of each event - // processing. In case "n_select" is greater than zero, at the end of the - // first "n_select" events, the macro file is executed. + // This method starts an event loop of "n_event" events. The condition of + // Geant4 is examined before starting the event loop. This method must be + // invoked at 'Idle' state. The state will be changed to 'GeomClosed' + // during the event loop and will go back to 'Idle' when the loop is over + // or aborted. + // In case a string "macroFile" which represents the name of a macro file + // is provided, the macro file will be executed AT THE END of each event + // processing. In case "n_select" is greater than zero, at the end of the + // first "n_select" events, the macro file is executed. + virtual void BeamOn(G4int n_event, const char* macroFile = nullptr, G4int n_select = -1); + + // This method invokes all the necessary initialisation procedures for an + // event loop. This method must be invoked at the Geant4 'PreInit' state + // or 'Idle'. The state will be changed to 'Init' during initialization + // procedures and then changed to 'Idle'. + // This method invokes two protected methods, InitializeGeometry() and + // InitializePhysics(). + // After some event loops, the user can invoke this method once again. + // It is required if the user changes geometry, physics process, and/or + // cut-off value. If the user forget the second invocation, the BeamOn() + // method will invoke this method (Note that this feature is not valid + // for the first initialization). virtual void Initialize(); - // This method invokes all the necessary initialisation procedures for an - // event loop. This method must be invoked at the Geant4 'PreInit' state - // or 'Idle'. The state will be changed to 'Init' during initialization - // procedures and then changed to 'Idle'. - // This method invokes two protected methods, InitializeGeometry() and - // InitializePhysics(). - // After some event loops, the user can invoke this method once again. - // It is required if the user changes geometry, physics process, and/or - // cut-off value. If the user forget the second invocation, the BeamOn() - // method will invoke this method (Note that this feature is not valid - // for the first initialization). - - virtual void DefineWorldVolume(G4VPhysicalVolume* worldVol, - G4bool topologyIsChanged = true); - // This method must be invoked if the geometry setup has been changed - // between runs. The flag "topologyIsChanged" will specify if the geometry - // topology is different from the original one used in the previous run; - // if not, it must be set to false, so that the original optimisation and - // navigation history are preserved. This method is invoked also at - // initialisation. + // This method must be invoked if the geometry setup has been changed + // between runs. The flag "topologyIsChanged" will specify if the geometry + // topology is different from the original one used in the previous run; + // if not, it must be set to false, so that the original optimisation and + // navigation history are preserved. This method is invoked also at + // initialisation. + virtual void DefineWorldVolume(G4VPhysicalVolume* worldVol, G4bool topologyIsChanged = true); + + // This method safely aborts the current event loop even if an event is + // in progress. This method is available for 'GeomClosed' and 'EventProc' + // Geant4 states. The application state will be changed to 'Idle', so that + // another event loop can be processed. + // If the "softAbort" flag is true, the event loop is aborted after + // processing the current event, while the current event is aborted if the + // flag is set to false. virtual void AbortRun(G4bool softAbort = false); - // This method safely aborts the current event loop even if an event is - // in progress. This method is available for 'GeomClosed' and 'EventProc' - // Geant4 states. The application state will be changed to 'Idle', so that - // another event loop can be processed. - // If the "softAbort" flag is true, the event loop is aborted after - // processing the current event, while the current event is aborted if the - // flag is set to false. + // This method aborts the currently processing event, remaining events + // in the current event loop will be processed. This method is available + // only for 'EventProc' application state. virtual void AbortEvent(); - // This method aborts the currently processing event, remaining events - // in the current event loop will be processed. This method is available - // only for 'EventProc' application state. + // These methods are invoked from the Initialize() method for the + // initializations of geometry and physics processes. The user's concrete + // G4VUserDetectorConstruction class will be accessed from the method + // InitializeGeometry() and the G4VUserPhysicsList class will be accessed + // from the method InitializePhysics(). virtual void InitializeGeometry(); virtual void InitializePhysics(); - // These methods are invoked from the Initialize() method for the - // initializations of geometry and physics processes. The user's concrete - // G4VUserDetectorConstruction class will be accessed from the method - // InitializeGeometry() and the G4VUserPhysicsList class will be accessed - // from the method InitializePhysics(). + // These four methods are invoked from the BeamOn() method and they're + // invoked in this order. + // ConfirmBeamOnCondition() method checks if all the necessary + // initialisations have been done already. If the condition is not + // satisfied, false is returned and the following three methods will be + // skipped. + // The RunInitialization() method initialises a run. e.g., a G4Run class + // object is constructed in this method. + // The DoEventLoop() method controls an event loop. Arguments are the same + // as for the BeamOn() method. + // Inside the event loop, the two following methods are invoked at the + // beginning and at the end of each event. + // The RunTermination() method terminates a run processing. e.g., a G4Run + // class object is deleted in this method. If the user adopts ODBMS and + // wants to store the G4Run object, he/she must override this method. virtual G4bool ConfirmBeamOnCondition(); virtual void RunInitialization(); - virtual void DoEventLoop(G4int n_event, const char* macroFile = nullptr, - G4int n_select = -1); + virtual void DoEventLoop(G4int n_event, const char* macroFile = nullptr, G4int n_select = -1); virtual void RunTermination(); - // These four methods are invoked from the BeamOn() method and they're - // invoked in this order. - // ConfirmBeamOnCondition() method checks if all the necessary - // initialisations have been done already. If the condition is not - // satisfied, false is returned and the following three methods will be - // skipped. - // The RunInitialization() method initialises a run. e.g., a G4Run class - // object is constructed in this method. - // The DoEventLoop() method controls an event loop. Arguments are the same - // as for the BeamOn() method. - // Inside the event loop, the two following methods are invoked at the - // beginning and at the end of each event. - // The RunTermination() method terminates a run processing. e.g., a G4Run - // class object is deleted in this method. If the user adopts ODBMS and - // wants to store the G4Run object, he/she must override this method. - - virtual void InitializeEventLoop(G4int n_event, - const char* macroFile = nullptr, + + // Granular virtual methods invoked from DoEventLoop(). + virtual void InitializeEventLoop(G4int n_event, const char* macroFile = nullptr, G4int n_select = -1); virtual void ProcessOneEvent(G4int i_event); virtual void TerminateOneEvent(); virtual void TerminateEventLoop(); - // Granular virtual methods invoked from DoEventLoop(). + // These two methods are invoked from DoEventLoop() at the beginning and + // at the end of each event processing. + // GenerateEvent() constructs a G4Event class object and invoke the user's + // G4VUserPrimaryGeneratorAction concrete class. If the user is adopting + // an ODBMS system and event objects have been created and stored in the + // data-base, he/she must override this method. + // AnalyzeEvent() stores an event to a data-base if a concrete + // G4VPersistentManager class is defined. virtual G4Event* GenerateEvent(G4int i_event); virtual void AnalyzeEvent(G4Event* anEvent); - // These two methods are invoked from DoEventLoop() at the beginning and - // at the end of each event processing. - // GenerateEvent() constructs a G4Event class object and invoke the user's - // G4VUserPrimaryGeneratorAction concrete class. If the user is adopting - // an ODBMS system and event objects have been created and stored in the - // data-base, he/she must override this method. - // AnalyzeEvent() stores an event to a data-base if a concrete - // G4VPersistentManager class is defined. + // This method configures the global fallback query and label generators. virtual void ConfigureProfilers(const std::vector& args = {}); - // This method configures the global fallback query and label generators. + + // Calls the above virtual method. void ConfigureProfilers(G4int argc, char** argv); - // Calls the above virtual method. + // Dummy methods to dispatch generic inheritance calls from G4RunManager + // base class. virtual void SetNumberOfThreads(G4int) {} virtual G4int GetNumberOfThreads() const { return 1; } - // Dummy methods to dispatch generic inheritance calls from G4RunManager - // base class. + // Dump information of a region. void DumpRegion(const G4String& rname) const; - // Dump information of a region. + + // Dump information of a region. + // If the pointer is NULL, all regions are shown. void DumpRegion(G4Region* region = nullptr) const; - // Dump information of a region. - // If the pointer is NULL, all regions are shown. + // This method must be invoked (or equivalent UI command can be used) + // in case the user changes his/her detector geometry after Initialize() + // method has been invoked. Then, at the beginning of the next BeamOn(), + // all necessary geometry optimisations will be made. + // The parameter "prop" has to be true if this C++ method is directly + // invoked. void GeometryHasBeenModified(G4bool prop = true); - // This method must be invoked (or equivalent UI command can be used) - // in case the user changes his/her detector geometry after Initialize() - // method has been invoked. Then, at the beginning of the next BeamOn(), - // all necessary geometry optimisations will be made. - // The parameter "prop" has to be true if this C++ method is directly - // invoked. + // This method must be invoked (or equivalent UI command can be used) + // in case the user needs his/her detector construction has to be + // re-invoked. Geometry optimisations will be also done. + // If the first parameter "destroyFirst" is true, G4SolidStore, + // G4LogicalVolumeStore and G4PhysicalVolumeStore are cleaned up, and + // thus all solids, logical volumes and physical volumes previously + // defined are deleted. + // The second parameter "prop" has to be true if this C++ method is + // directly invoked. void ReinitializeGeometry(G4bool destroyFirst = false, G4bool prop = true); - // This method must be invoked (or equivalent UI command can be used) - // in case the user needs his/her detector construction has to be - // re-invoked. Geometry optimisations will be also done. - // If the first parameter "destroyFirst" is true, G4SolidStore, - // G4LogicalVolumeStore and G4PhysicalVolumeStore are cleaned up, and - // thus all solids, logical volumes and physical volumes previously - // defined are deleted. - // The second parameter "prop" has to be true if this C++ method is - // directly invoked. + // This method must be invoked (or equivalent UI command can be used) + // in case the user changes his/her physics process(es), e.g. (in)activate + // some processes. Once this method is invoked, regardless of cuts are + // changed or not, BuildPhysicsTable() of a PhysicsList is invoked for + // refreshing all physics tables. inline void PhysicsHasBeenModified() { kernel->PhysicsHasBeenModified(); } - // This method must be invoked (or equivalent UI command can be used) - // in case the user changes his/her physics process(es), e.g. (in)activate - // some processes. Once this method is invoked, regardless of cuts are - // changed or not, BuildPhysicsTable() of a PhysicsList is invoked for - // refreshing all physics tables. inline void CutOffHasBeenModified() { @@ -304,47 +303,54 @@ class G4RunManager G4cerr << "It is safe to remove invoking this method." << G4endl; } + // This method may be used if the orientation and/or size of a + // particular physical volume has been modified while the rest of the + // geometries in the world has not been changed. This avoids the + // full re-optimisation of the entire geometry tree which is forced + // if GeometryHasBeenModified() method is invoked. void ReOptimizeMotherOf(G4VPhysicalVolume*); - // This method may be used if the orientation and/or size of a - // particular physical volume has been modified while the rest of the - // geometries in the world has not been changed. This avoids the - // full re-optimisation of the entire geometry tree which is forced - // if GeometryHasBeenModified() method is invoked. + // Same as above, but the mother logical volume is specified instead. void ReOptimize(G4LogicalVolume*); - // Same as above, but the mother logical volume is specified instead. inline void SetGeometryToBeOptimized(G4bool vl) { - if(geometryToBeOptimized != vl) - { + if (geometryToBeOptimized != vl) { geometryToBeOptimized = vl; kernel->GeometryHasBeenModified(); kernel->SetGeometryToBeOptimized(vl); } } - inline G4bool GetGeometryToBeOptimized() - { - return geometryToBeOptimized; - } + inline G4bool GetGeometryToBeOptimized() { return geometryToBeOptimized; } - void GeometryDirectlyUpdated(G4bool val = true) - { - geometryDirectlyUpdated = val; - } + void GeometryDirectlyUpdated(G4bool val = true) { geometryDirectlyUpdated = val; } + // This is used only by workers thread to reset RNG engines from files + // that are event specific. Not implemented for sequential since run seed + // defines event seeds. static G4bool IfGeometryHasBeenDestroyed(); - // This is used only by workers thread to reset RNG engines from files - // that are event specific. Not implemented for sequential since run seed - // defines event seeds. virtual void ConstructScoringWorlds(); virtual void rndmSaveThisRun(); virtual void rndmSaveThisEvent(); virtual void RestoreRandomNumberStatus(const G4String& fileN); - virtual void RestoreRndmEachEvent(G4bool) { /* No effect in SEQ */ } - + virtual void RestoreRndmEachEvent(G4bool) + { /* No effect in SEQ */ + } + + // Set user-actions and user-initialization to the kernel. + // Store respective user initialization and action classes. + // In MT mode, actions are shared among all threads, and should be set + // in the master thread, while user-actions are thread-private and each ` + // thread has private instances. Master thread does not have user-actions + // except for the (optional) run-action. + // User should instantiate the user-actions in the action-initialization + // and use that class' setters to set user-actions and *not* directly + // the methods provided here. + // Multiple Run, Event, Tracking and Stepping actions are allowed, the + // multiple instances will be appended to the current configuration. + // Multiple Stacking and PrimaryGeneration are not allowed. virtual void SetUserInitialization(G4VUserDetectorConstruction* userInit); virtual void SetUserInitialization(G4VUserPhysicsList* userInit); virtual void SetUserInitialization(G4VUserActionInitialization* userInit); @@ -356,27 +362,13 @@ class G4RunManager virtual void SetUserAction(G4UserStackingAction* userAction); virtual void SetUserAction(G4UserTrackingAction* userAction); virtual void SetUserAction(G4UserSteppingAction* userAction); - // Set user-actions and user-initialization to the kernel. - // Store respective user initialization and action classes. - // In MT mode, actions are shared among all threads, and should be set - // in the master thread, while user-actions are thread-private and each ` - // thread has private instances. Master thread does not have user-actions - // except for the (optional) run-action. - // User should instantiate the user-actions in the action-initialization - // and use that class' setters to set user-actions and *not* directly - // the methods provided here. - // Multiple Run, Event, Tracking and Stepping actions are allowed, the - // multiple instances will be appended to the current configuration. - // Multiple Stacking and PrimaryGeneration are not allowed. + // Methods returning respective user initialization and action classes. inline const G4VUserDetectorConstruction* GetUserDetectorConstruction() const { return userDetector; } - inline const G4VUserPhysicsList* GetUserPhysicsList() const - { - return physicsList; - } + inline const G4VUserPhysicsList* GetUserPhysicsList() const { return physicsList; } inline const G4VUserActionInitialization* GetUserActionInitialization() const { return userActionInitialization; @@ -393,56 +385,37 @@ class G4RunManager { return userWorkerThreadInitialization; } - inline const G4UserRunAction* GetUserRunAction() const - { - return userRunAction; - } + inline const G4UserRunAction* GetUserRunAction() const { return userRunAction; } inline const G4VUserPrimaryGeneratorAction* GetUserPrimaryGeneratorAction() const { return userPrimaryGeneratorAction; } - inline const G4UserEventAction* GetUserEventAction() const - { - return userEventAction; - } - inline const G4UserStackingAction* GetUserStackingAction() const - { - return userStackingAction; - } - inline const G4UserTrackingAction* GetUserTrackingAction() const - { - return userTrackingAction; - } - inline const G4UserSteppingAction* GetUserSteppingAction() const - { - return userSteppingAction; - } - // Methods returning respective user initialization and action classes. + inline const G4UserEventAction* GetUserEventAction() const { return userEventAction; } + inline const G4UserStackingAction* GetUserStackingAction() const { return userStackingAction; } + inline const G4UserTrackingAction* GetUserTrackingAction() const { return userTrackingAction; } + inline const G4UserSteppingAction* GetUserSteppingAction() const { return userSteppingAction; } + // Set the number of additional (optional) waiting stacks. + // This method must be invoked at 'PreInit', 'Init' or 'Idle' states. + // Once the user sets the number of additional waiting stacks, + // he/she can use the corresponding ENUM in G4ClassificationOfNewTrack. inline void SetNumberOfAdditionalWaitingStacks(G4int iAdd) - // Set the number of additional (optional) waiting stacks. - // This method must be invoked at 'PreInit', 'Init' or 'Idle' states. - // Once the user sets the number of additional waiting stacks, - // he/she can use the corresponding ENUM in G4ClassificationOfNewTrack. { eventManager->SetNumberOfAdditionalWaitingStacks(iAdd); } - inline const G4String& GetVersionString() const - { - return kernel->GetVersionString(); - } + inline const G4String& GetVersionString() const { return kernel->GetVersionString(); } inline void SetPrimaryTransformer(G4PrimaryTransformer* pt) { kernel->SetPrimaryTransformer(pt); } + // if vl = 1 : status before primary particle generation is stored + // if vl = 2 : status before event processing (after primary particle + // generation) is stored if vl = 3 : both are stored if vl = 0 : none is + // stored (default). inline void StoreRandomNumberStatusToG4Event(G4int vl) - // if vl = 1 : status before primary particle generation is stored - // if vl = 2 : status before event processing (after primary particle - // generation) is stored if vl = 3 : both are stored if vl = 0 : none is - // stored (default). { storeRandomNumberStatusToG4Event = vl; eventManager->StoreRandomNumberStatusToG4Event(vl); @@ -453,64 +426,42 @@ class G4RunManager return storeRandomNumberStatusToG4Event; } - inline void SetRandomNumberStore(G4bool flag) - { - storeRandomNumberStatus = flag; - } - inline G4bool GetRandomNumberStore() const - { - return storeRandomNumberStatus; - } + inline void SetRandomNumberStore(G4bool flag) { storeRandomNumberStatus = flag; } + inline G4bool GetRandomNumberStore() const { return storeRandomNumberStatus; } inline void SetRandomNumberStoreDir(const G4String& dir) { G4String dirStr = dir; - if(dirStr.back() != '/') - dirStr += "/"; - #ifndef WIN32 + if (dirStr.back() != '/') dirStr += "/"; +#ifndef WIN32 G4String shellCmd = "mkdir -p "; - #else +#else std::replace(dirStr.begin(), dirStr.end(), '/', '\\'); G4String shellCmd = "if not exist " + dirStr + " mkdir "; - #endif +#endif shellCmd += dirStr; randomNumberStatusDir = dirStr; - G4int sysret = system(shellCmd); - if(sysret != 0) - { - G4String errmsg = "\"" + shellCmd - + "\" returns non-zero value. Directory creation failed."; - G4Exception("GrRunManager::SetRandomNumberStoreDir", "Run0071", - JustWarning, errmsg); + G4int sysret = system(shellCmd); + if (sysret != 0) { + G4String errmsg = "\"" + shellCmd + "\" returns non-zero value. Directory creation failed."; + G4Exception("GrRunManager::SetRandomNumberStoreDir", "Run0071", JustWarning, errmsg); G4cerr << " return value = " << sysret << G4endl; } } - inline const G4String& GetRandomNumberStoreDir() const - { - return randomNumberStatusDir; - } + inline const G4String& GetRandomNumberStoreDir() const { return randomNumberStatusDir; } inline const G4String& GetRandomNumberStatusForThisRun() const { return randomNumberStatusForThisRun; } inline const G4String& GetRandomNumberStatusForThisEvent() const { - if(storeRandomNumberStatusToG4Event == 0 || - storeRandomNumberStatusToG4Event == 2) - { - G4Exception("GrRunManager::SetRandomNumberStoreDir", "Run0072", - JustWarning, + if (storeRandomNumberStatusToG4Event == 0 || storeRandomNumberStatusToG4Event == 2) { + G4Exception("GrRunManager::SetRandomNumberStoreDir", "Run0072", JustWarning, "Random number status is not available for this event."); } return randomNumberStatusForThisEvent; } - inline void SetRandomNumberStorePerEvent(G4bool flag) - { - rngStatusEventsFlag = flag; - } - inline G4bool GetRandomNumberStorePerEvent() const - { - return rngStatusEventsFlag; - } + inline void SetRandomNumberStorePerEvent(G4bool flag) { rngStatusEventsFlag = flag; } + inline G4bool GetRandomNumberStorePerEvent() const { return rngStatusEventsFlag; } inline void SetVerboseLevel(G4int vl) { @@ -521,53 +472,45 @@ class G4RunManager inline G4int GetPrintProgress() { return printModulo; } inline void SetPrintProgress(G4int i) { printModulo = i; } - inline void SetNumberOfEventsToBeStored(G4int val) - // Sets the number of events to be kept after processing. That is, - // "val" previous events can be used with the most recent event for - // digitizing pileup. "val"+1 previous event is deleted. - // This method must be invoked before starting the event loop. - { - n_perviousEventsToBeStored = val; - } + // Sets the number of events to be kept after processing. That is, + // "val" previous events can be used with the most recent event for + // digitizing pileup. "val"+1 previous event is deleted. + // This method must be invoked before starting the event loop. + inline void SetNumberOfEventsToBeStored(G4int val) { n_perviousEventsToBeStored = val; } + // Returns the pointer to the current run. This method is available for + // 'GeomClosed' and 'EventProc' application states. inline const G4Run* GetCurrentRun() const { return currentRun; } inline G4Run* GetNonConstCurrentRun() const { return currentRun; } - // Returns the pointer to the current run. This method is available for - // 'GeomClosed' and 'EventProc' application states. + + // Returns the pointer to the current event. This method is available for + // 'EventProc' application state. inline const G4Event* GetCurrentEvent() const { return currentEvent; } - // Returns the pointer to the current event. This method is available for - // 'EventProc' application state. + + // Returns the pointer to the "i" previous event. This method is available + // for 'EventProc' application state. In case the event loop has not yet + // reached the requested event, null will be returned. To use this method, + // SetNumberOfEventsToBeStored() method mentioned above must be invoked + // previously to the event loop. inline const G4Event* GetPreviousEvent(G4int i) const - // Returns the pointer to the "i" previous event. This method is available - // for 'EventProc' application state. In case the event loop has not yet - // reached the requested event, null will be returned. To use this method, - // SetNumberOfEventsToBeStored() method mentioned above must be invoked - // previously to the event loop. { - if(i >= 1 && i <= n_perviousEventsToBeStored) - { + if (i >= 1 && i <= n_perviousEventsToBeStored) { auto itr = previousEvents->cbegin(); - for(G4int j = 1; j < i; ++j) - { + for (G4int j = 1; j < i; ++j) { ++itr; } return *itr; } return nullptr; } + + // Set the run number counter. Initially, the counter is initialized + // to zero and incremented by one for every BeamOn(). inline void SetRunIDCounter(G4int i) { runIDCounter = i; } - // Set the run number counter. Initially, the counter is initialized - // to zero and incremented by one for every BeamOn(). inline G4int GetNumberOfParallelWorld() const { return nParallelWorlds; } - inline void SetNumberOfEventsToBeProcessed(G4int val) - { - numberOfEventToBeProcessed = val; - } - inline G4int GetNumberOfEventsToBeProcessed() const - { - return numberOfEventToBeProcessed; - } + inline void SetNumberOfEventsToBeProcessed(G4int val) { numberOfEventToBeProcessed = val; } + inline G4int GetNumberOfEventsToBeProcessed() const { return numberOfEventToBeProcessed; } inline G4int GetNumberOfSelectEvents() const { return n_select_msg; } inline const G4String& GetSelectMacro() const { return selectMacro; } inline void SetDCtable(G4DCtable* DCtbl) { DCtable = DCtbl; } @@ -582,9 +525,8 @@ class G4RunManager inline RMType GetRunManagerType() const { return runManagerType; } protected: - + // This constructor is called in case of multi-threaded build. G4RunManager(RMType rmType); - // This constructor is called in case of multi-threaded build. void CleanUpPreviousEvents(); void CleanUpUnnecessaryEvents(G4int keepNEvents); @@ -593,13 +535,13 @@ class G4RunManager virtual void StoreRNGStatus(const G4String& filenamePrefix); void UpdateScoring(); + + // Called by destructor to delete user detector. Note: the user detector + // is shared among threads, thus this should be re-implemented in derived + // classes that implement the worker model. virtual void DeleteUserInitializations(); - // Called by destructor to delete user detector. Note: the user detector - // is shared among threads, thus this should be re-implemented in derived - // classes that implement the worker model. protected: - G4RunManagerKernel* kernel = nullptr; G4EventManager* eventManager = nullptr; @@ -655,13 +597,12 @@ class G4RunManager RMType runManagerType; + // This Boolean flag has to be shared by all derived objects. G4RUN_DLL static G4bool fGeometryHasBeenDestroyed; - // This Boolean flag has to be shared by all derived objects. private: - + // Per-thread static instance of the run manager singleton. static G4ThreadLocal G4RunManager* fRunManager; - // Per-thread static instance of the run manager singleton. G4RunMessenger* runMessenger = nullptr; diff --git a/source/run/include/G4RunManagerFactory.hh b/source/run/include/G4RunManagerFactory.hh index 4ecf5e8db27..4df1ecd3e13 100644 --- a/source/run/include/G4RunManagerFactory.hh +++ b/source/run/include/G4RunManagerFactory.hh @@ -34,29 +34,29 @@ #ifndef G4RunManagerFactory_hh #define G4RunManagerFactory_hh 1 -#include "G4Types.hh" -#include "G4RunManager.hh" #include "G4MTRunManager.hh" +#include "G4RunManager.hh" #include "G4TaskRunManager.hh" +#include "G4Types.hh" #include "G4VUserTaskQueue.hh" -#include #include -#include #include +#include +#include //============================================================================// enum class G4RunManagerType : G4int { - Serial = 0, - SerialOnly = 1, - MT = 2, - MTOnly = 3, - Tasking = 4, + Serial = 0, + SerialOnly = 1, + MT = 2, + MTOnly = 3, + Tasking = 4, TaskingOnly = 5, - TBB = 6, - TBBOnly = 7, + TBB = 6, + TBBOnly = 7, Default }; @@ -64,42 +64,39 @@ enum class G4RunManagerType : G4int class G4RunManagerFactory { - public: - static G4RunManager* CreateRunManager( - G4RunManagerType _type = G4RunManagerType::Default, - G4VUserTaskQueue* _queue = nullptr, G4bool fail_if_unavail = true, - G4int nthreads = 0); + public: + static G4RunManager* CreateRunManager(G4RunManagerType _type = G4RunManagerType::Default, + G4VUserTaskQueue* _queue = nullptr, + G4bool fail_if_unavail = true, G4int nthreads = 0); - // provide a version which specifies to fail if unavailable - static G4RunManager* CreateRunManager(G4RunManagerType _type, - G4bool fail_if_unavail, - G4int nthreads = 0, - G4VUserTaskQueue* _queue = nullptr) - { - return CreateRunManager(_type, _queue, fail_if_unavail, nthreads); - } + // provide a version which specifies to fail if unavailable + static G4RunManager* CreateRunManager(G4RunManagerType _type, G4bool fail_if_unavail, + G4int nthreads = 0, G4VUserTaskQueue* _queue = nullptr) + { + return CreateRunManager(_type, _queue, fail_if_unavail, nthreads); + } - static G4RunManager* CreateRunManager(G4RunManagerType _type, G4int nthreads, - G4bool fail_if_unavail = true, - G4VUserTaskQueue* _queue = nullptr) - { - return CreateRunManager(_type, _queue, fail_if_unavail, nthreads); - } + static G4RunManager* CreateRunManager(G4RunManagerType _type, G4int nthreads, + G4bool fail_if_unavail = true, + G4VUserTaskQueue* _queue = nullptr) + { + return CreateRunManager(_type, _queue, fail_if_unavail, nthreads); + } - // provide string versions of above - template - static G4RunManager* CreateRunManager(std::string type, Args&&... args) - { - return CreateRunManager(GetType(type), std::forward(args)...); - } + // provide string versions of above + template + static G4RunManager* CreateRunManager(std::string type, Args&&... args) + { + return CreateRunManager(GetType(type), std::forward(args)...); + } - static std::string GetDefault(); - static std::string GetName(G4RunManagerType); - static G4RunManagerType GetType(const std::string&); - static std::set GetOptions(); - static G4RunManager* GetMasterRunManager(); - static G4MTRunManager* GetMTMasterRunManager(); - static G4RunManagerKernel* GetMasterRunManagerKernel(); + static std::string GetDefault(); + static std::string GetName(G4RunManagerType); + static G4RunManagerType GetType(const std::string&); + static std::set GetOptions(); + static G4RunManager* GetMasterRunManager(); + static G4MTRunManager* GetMTMasterRunManager(); + static G4RunManagerKernel* GetMasterRunManagerKernel(); }; #endif // G4TaskRunManagerCreator_h diff --git a/source/run/include/G4RunManagerKernel.hh b/source/run/include/G4RunManagerKernel.hh index 3c19ff00011..52adeb8b3ae 100644 --- a/source/run/include/G4RunManagerKernel.hh +++ b/source/run/include/G4RunManagerKernel.hh @@ -50,8 +50,8 @@ #ifndef G4RunManagerKernel_hh #define G4RunManagerKernel_hh 1 -#include "globals.hh" #include "G4EventManager.hh" +#include "globals.hh" class G4VUserPhysicsList; class G4VPhysicalVolume; @@ -64,74 +64,68 @@ class G4PrimaryTransformer; class G4RunManagerKernel { public: - + // Static method returning the singleton pointer of + // G4RunManagerKernel or its derived class. static G4RunManagerKernel* GetRunManagerKernel(); - // Static method returning the singleton pointer of - // G4RunManagerKernel or its derived class. + // The constructor and the destructor. The user must construct this class + // object at the beginning of his/her main() and must delete it at the + // bottom of the main(), unless he/she used G4RunManager. G4RunManagerKernel(); virtual ~G4RunManagerKernel(); - // The constructor and the destructor. The user must construct this class - // object at the beginning of his/her main() and must delete it at the - // bottom of the main(), unless he/she used G4RunManager. - - void DefineWorldVolume(G4VPhysicalVolume* worldVol, - G4bool topologyIsChanged = true); - - void WorkerDefineWorldVolume(G4VPhysicalVolume* worldVol, - G4bool topologyIsChanged = true); - // This method must be invoked if the geometry setup has been changed - // between runs. The flag "topologyIsChanged" will specify if the - // geometry topology is different from the original one used in the - // previous run; if not, it must be set to false, so that the original - // optimisation and navigation history is preserved. This method is - // invoked also at initialisation. + void DefineWorldVolume(G4VPhysicalVolume* worldVol, G4bool topologyIsChanged = true); + + // This method must be invoked if the geometry setup has been changed + // between runs. The flag "topologyIsChanged" will specify if the + // geometry topology is different from the original one used in the + // previous run; if not, it must be set to false, so that the original + // optimisation and navigation history is preserved. This method is + // invoked also at initialisation. + void WorkerDefineWorldVolume(G4VPhysicalVolume* worldVol, G4bool topologyIsChanged = true); + + // This method must be invoked at least once with a valid concrete + // implementation of user physics list. void SetPhysics(G4VUserPhysicsList* uPhys); - // This method must be invoked at least once with a valid concrete - // implementation of user physics list. + // This method must be invoked at least once to build physics processes. void InitializePhysics(); - // This method must be invoked at least once to build physics processes. + // Trigger geometry closing and physics table constructions. + // It returns TRUE if all procedures went well. G4bool RunInitialization(G4bool fakeRun = false); - // Trigger geometry closing and physics table constructions. - // It returns TRUE if all procedures went well. + // Set the application state to 'Idle' so that the user can modify + // physics/geometry. void RunTermination(); - // Set the application state to 'Idle' so that the user can modify - // physics/geometry. + // Update region list. This method is mandatory before invoking the + // following two dump methods. + // At RunInitialization(), this method is automatically invoked. void UpdateRegion(); - // Update region list. This method is mandatory before invoking the - // following two dump methods. - // At RunInitialization(), this method is automatically invoked. + // Dump information of a region. void DumpRegion(const G4String& rname) const; - // Dump information of a region. + // Dump information of a region. + // If the pointer is NULL, all regions are shown. void DumpRegion(G4Region* region = nullptr) const; - // Dump information of a region. - // If the pointer is NULL, all regions are shown. void WorkerUpdateWorldVolume(); + // This method must be invoked (or equivalent UI commands can be used) + // in case the user changes his/her detector geometry. + // This method is automatically invoked from DefineWorldVolume(). inline void GeometryHasBeenModified() { geometryNeedsToBeClosed = true; } - // This method must be invoked (or equivalent UI commands can be used) - // in case the user changes his/her detector geometry. - // This method is automatically invoked from DefineWorldVolume(). + // This method must be invoked in case the user changes his/her physics + // process(es), e.g. (in)activate some processes. Once this method is + // invoked, regardless of cuts changed or not, BuildPhysicsTable() of + // a PhysicsList is invoked for refreshing all physics tables. inline void PhysicsHasBeenModified() { physicsNeedsToBeReBuilt = true; } - // This method must be invoked in case the user changes his/her physics - // process(es), e.g. (in)activate some processes. Once this method is - // invoked, regardless of cuts changed or not, BuildPhysicsTable() of - // a PhysicsList is invoked for refreshing all physics tables. inline G4EventManager* GetEventManager() const { return eventManager; } - inline G4StackManager* GetStackManager() const - { - return eventManager->GetStackManager(); - } + inline G4StackManager* GetStackManager() const { return eventManager->GetStackManager(); } inline G4TrackingManager* GetTrackingManager() const { return eventManager->GetTrackingManager(); @@ -151,27 +145,20 @@ class G4RunManagerKernel inline void SetGeometryToBeOptimized(G4bool vl) { - if(geometryToBeOptimized != vl) - { - geometryToBeOptimized = vl; + if (geometryToBeOptimized != vl) { + geometryToBeOptimized = vl; geometryNeedsToBeClosed = true; } } - inline G4int GetNumberOfParallelWorld() const - { - return numberOfParallelWorld; - } + inline G4int GetNumberOfParallelWorld() const { return numberOfParallelWorld; } inline void SetNumberOfParallelWorld(G4int i) { numberOfParallelWorld = i; } inline G4VUserPhysicsList* GetPhysicsList() const { return physicsList; } inline G4VPhysicalVolume* GetCurrentWorld() const { return currentWorld; } - inline G4int GetNumberOfStaticAllocators() const - { - return numberOfStaticAllocators; - } + inline G4int GetNumberOfStaticAllocators() const { return numberOfStaticAllocators; } enum RMKType { @@ -181,39 +168,35 @@ class G4RunManagerKernel }; protected: - + // Constructor to be used by derived classes. G4RunManagerKernel(RMKType rmkType); - // Constructor to be used by derived classes. + // Called by DefineWorldVolume(). void SetupDefaultRegion(); - // Called by DefineWorldVolume(). void SetupPhysics(); void ResetNavigator(); void BuildPhysicsTables(G4bool fakeRun); void CheckRegions(); + // This method will setup the G4VProcesses instances to have a reference + // to the process instance created by the master thread. + // See G4VProcess::GetMasterProcess(). virtual void SetupShadowProcess() const; - // This method will setup the G4VProcesses instances to have a reference - // to the process instance created by the master thread. - // See G4VProcess::GetMasterProcess(). void PropagateGenericIonID(); private: - void CheckRegularGeometry(); G4bool ConfirmCoupledTransportation(); void SetScoreSplitter(); protected: - RMKType runManagerKernelType; G4Region* defaultRegion = nullptr; G4Region* defaultRegionForParallelWorld = nullptr; G4bool geometryNeedsToBeClosed = true; private: - G4VUserPhysicsList* physicsList = nullptr; G4VPhysicalVolume* currentWorld = nullptr; G4bool geometryInitialized = false; diff --git a/source/run/include/G4TaskRunManager.hh b/source/run/include/G4TaskRunManager.hh index 6aacd549f93..38649706619 100644 --- a/source/run/include/G4TaskRunManager.hh +++ b/source/run/include/G4TaskRunManager.hh @@ -35,9 +35,10 @@ #ifndef G4TaskRunManager_hh #define G4TaskRunManager_hh 1 -#include "rundefs.hh" +#include "G4EnvironmentUtils.hh" #include "G4MTBarrier.hh" #include "G4MTRunManager.hh" +#include "G4Profiler.hh" #include "G4RNGHelper.hh" #include "G4RunManager.hh" #include "G4TBBTaskGroup.hh" @@ -46,10 +47,9 @@ #include "G4ThreadPool.hh" #include "G4Threading.hh" #include "G4VUserTaskQueue.hh" -#include "G4EnvironmentUtils.hh" -#include "G4Profiler.hh" #include "PTL/TaskRunManager.hh" +#include "rundefs.hh" #include #include @@ -63,181 +63,158 @@ class G4RunManagerFactory; //============================================================================// -class G4TaskRunManager - : public G4MTRunManager - , public PTL::TaskRunManager +class G4TaskRunManager : public G4MTRunManager, public PTL::TaskRunManager { - friend class G4RunManagerFactory; - - public: - // the profiler aliases are only used when compiled with GEANT4_USE_TIMEMORY - using ProfilerConfig = G4ProfilerConfig; - - public: - using InitializeSeedsCallback = std::function; - using RunTaskGroup = G4TaskGroup; - - public: - // Parameters: - // taskQueue : provide a custom task queue - // useTBB : only relevant if GEANT4_USE_TBB defined - // evtGrainsize : the number of events per task - G4TaskRunManager(G4bool useTBB = G4GetEnv("G4USE_TBB", false)); - G4TaskRunManager(G4VUserTaskQueue* taskQueue, - G4bool useTBB = G4GetEnv("G4USE_TBB", false), - G4int evtGrainsize = 0); - virtual ~G4TaskRunManager(); - - public: - void SetGrainsize(G4int n) { eventGrainsize = n; } - G4int GetGrainsize() const { return eventGrainsize; } - inline G4int GetNumberOfTasks() const { return numberOfTasks; } - inline G4int GetNumberOfEventsPerTask() const - { - return numberOfEventsPerTask; - } - - virtual void SetNumberOfThreads(G4int n) override; - virtual G4int GetNumberOfThreads() const override - { - return PTL::TaskRunManager::GetNumberOfThreads(); - } - virtual size_t GetNumberActiveThreads() const override - { - return PTL::TaskRunManager::GetNumberActiveThreads(); - } - static G4ThreadId GetMasterThreadId(); - - public: - // Inherited methods to re-implement for MT case - virtual void Initialize() override; - virtual void InitializeEventLoop(G4int n_event, - const char* macroFile = nullptr, - G4int n_select = -1) override; - virtual void InitializeThreadPool() override; - G4bool ThreadPoolIsInitialized() const { return poolInitialized; } - - virtual void Initialize(uint64_t nthreads) override - { - PTL::TaskRunManager::Initialize(nthreads); - } - - virtual void TerminateOneEvent() override; - virtual void ProcessOneEvent(G4int i_event) override; - virtual void ConstructScoringWorlds() override; - virtual void RunTermination() override; - - // The following method should be invoked by G4WorkerTaskRunManager for each - // event. False is returned if no more event to be processed. Note: G4Event - // object must be instantiated by a worker thread. In case no more - // event remains to be processed, that worker thread must delete that G4Event - // object. If a worker runs with its own random number sequence, the Boolean - // flag reseedRequired should be set to false. This is *NOT* allowed for the - // first event. - virtual G4bool SetUpAnEvent(G4Event*, G4long& s1, G4long& s2, G4long& s3, - G4bool reseedRequired = true) override; - // Same as above method, but the seeds are set only once over "eventModulo" - // events. The return value shows the number of events the caller Worker has - // to process (between 1 and eventModulo depending on number of events yet to - // be processed). G4Event object has the event ID of the first event of this - // bunch. If zero is returned no more event needs to be processed, and worker - // thread must delete that G4Event. - virtual G4int SetUpNEvents(G4Event*, G4SeedsQueue* seedsQueue, - G4bool reseedRequired = true) override; - - // Method called by Initialize() method - - protected: - virtual void ComputeNumberOfTasks(); - // Initialize the seeds list, if derived class does not implement this method - // A default generation will be used (nevents*2 random seeds) - // Return true if initialization is done. - virtual G4bool InitializeSeeds(G4int /*nevts*/) override { return false; } - virtual void RefillSeeds() override; - // Adds one seed to the list of seeds - virtual void StoreRNGStatus(const G4String& filenamePrefix) override; - virtual void CreateAndStartWorkers() override; - // Creates worker threads and signal to start - - protected: - virtual void TerminateWorkers() override; - - public: // with description - static G4TaskRunManager* GetMasterRunManager() - { - auto* _rm = G4MTRunManager::GetMasterRunManager(); - return dynamic_cast(_rm); - } - // Returns the singleton instance of the run manager common to all threads - // implementing the master behavior - static G4TaskRunManagerKernel* GetMTMasterRunManagerKernel(); - // Returns the singleton instance of the run manager kernel common to all - // threads - - public: - // To be invoked solely from G4WorkerTaskRunManager to merge the results - void MergeScores(const G4ScoringManager* localScoringManager); - void MergeRun(const G4Run* localRun); - - public: - virtual void RequestWorkersProcessCommandsStack() override; - // Called to force workers to request and process the UI commands stack - // This will block untill all workers have processed UI commands - virtual void ThisWorkerProcessCommandsStackDone() override; - // Called by workers to signal to master it has completed processing of - // UI commands - // virtual WorkerActionRequest ThisWorkerWaitForNextAction(); - // Worker thread barrier - // This method should be used by workers' run manager to wait, - // after an event loop for the next action to be performed - // (for example execute a new run) - // This returns the action to be performed - virtual void WaitForReadyWorkers() override {} - virtual void WaitForEndEventLoopWorkers() override; - virtual void ThisWorkerReady() override {} - virtual void ThisWorkerEndEventLoop() override {} - virtual WorkerActionRequest ThisWorkerWaitForNextAction() override - { - return WorkerActionRequest::UNDEFINED; - } - - protected: - virtual void NewActionRequest(WorkerActionRequest) override {} - virtual void AddEventTask(G4int); - - public: - inline void SetInitializeSeedsCallback(InitializeSeedsCallback f) - { - initSeedsCallback = f; - } - - public: - virtual void AbortRun(G4bool softAbort = false) override; - virtual void AbortEvent() override; - - private: - // grainsize - bool workersStarted = false; - G4int eventGrainsize = 0; - G4int numberOfEventsPerTask = -1; - G4int numberOfTasks = -1; - CLHEP::HepRandomEngine* masterRNGEngine = nullptr; - // Pointer to the master thread random engine - G4TaskRunManagerKernel* MTkernel = nullptr; - - protected: - // Barriers: synch points between master and workers - RunTaskGroup* workTaskGroup = nullptr; - - // aliases to inherited member values - G4bool& poolInitialized = PTL::TaskRunManager::m_is_initialized; - G4ThreadPool*& threadPool = PTL::TaskRunManager::m_thread_pool; - G4VUserTaskQueue*& taskQueue = PTL::TaskRunManager::m_task_queue; - G4TaskManager*& taskManager = PTL::TaskRunManager::m_task_manager; - - InitializeSeedsCallback initSeedsCallback = [](G4int, G4int&, G4int&) { - return false; - }; + friend class G4RunManagerFactory; + + public: + // the profiler aliases are only used when compiled with GEANT4_USE_TIMEMORY + using ProfilerConfig = G4ProfilerConfig; + using InitializeSeedsCallback = std::function; + using RunTaskGroup = G4TaskGroup; + + public: + // Returns the singleton instance of the run manager common to all threads + // implementing the master behavior + static G4TaskRunManager* GetMasterRunManager() + { + auto* _rm = G4MTRunManager::GetMasterRunManager(); + return dynamic_cast(_rm); + } + + // Returns the singleton instance of the run manager kernel common to all + // threads + static G4TaskRunManagerKernel* GetMTMasterRunManagerKernel(); + + // Parameters: + // taskQueue : provide a custom task queue + // useTBB : only relevant if GEANT4_USE_TBB defined + // evtGrainsize : the number of events per task + G4TaskRunManager(G4bool useTBB = G4GetEnv("G4USE_TBB", false)); + G4TaskRunManager(G4VUserTaskQueue* taskQueue, + G4bool useTBB = G4GetEnv("G4USE_TBB", false), G4int evtGrainsize = 0); + ~G4TaskRunManager() override; + + void SetGrainsize(G4int n) { eventGrainsize = n; } + G4int GetGrainsize() const { return eventGrainsize; } + inline G4int GetNumberOfTasks() const { return numberOfTasks; } + inline G4int GetNumberOfEventsPerTask() const { return numberOfEventsPerTask; } + + void SetNumberOfThreads(G4int n) override; + G4int GetNumberOfThreads() const override { return PTL::TaskRunManager::GetNumberOfThreads(); } + size_t GetNumberActiveThreads() const override + { + return PTL::TaskRunManager::GetNumberActiveThreads(); + } + static G4ThreadId GetMasterThreadId(); + + // Inherited methods to re-implement for MT case + void Initialize() override; + void InitializeEventLoop(G4int n_event, const char* macroFile = nullptr, + G4int n_select = -1) override; + void InitializeThreadPool() override; + G4bool ThreadPoolIsInitialized() const { return poolInitialized; } + + void Initialize(uint64_t nthreads) override { PTL::TaskRunManager::Initialize(nthreads); } + + void TerminateOneEvent() override; + void ProcessOneEvent(G4int i_event) override; + void ConstructScoringWorlds() override; + void RunTermination() override; + + // The following method should be invoked by G4WorkerTaskRunManager for each + // event. False is returned if no more event to be processed. Note: G4Event + // object must be instantiated by a worker thread. In case no more + // event remains to be processed, that worker thread must delete that G4Event + // object. If a worker runs with its own random number sequence, the Boolean + // flag reseedRequired should be set to false. This is *NOT* allowed for the + // first event. + G4bool SetUpAnEvent(G4Event*, G4long& s1, G4long& s2, G4long& s3, + G4bool reseedRequired = true) override; + + // Same as above method, but the seeds are set only once over "eventModulo" + // events. The return value shows the number of events the caller Worker has + // to process (between 1 and eventModulo depending on number of events yet to + // be processed). G4Event object has the event ID of the first event of this + // bunch. If zero is returned no more event needs to be processed, and worker + // thread must delete that G4Event. + G4int SetUpNEvents(G4Event*, G4SeedsQueue* seedsQueue, G4bool reseedRequired = true) override; + + // To be invoked solely from G4WorkerTaskRunManager to merge the results + void MergeScores(const G4ScoringManager* localScoringManager); + void MergeRun(const G4Run* localRun); + + // Called to force workers to request and process the UI commands stack + // This will block untill all workers have processed UI commands + void RequestWorkersProcessCommandsStack() override; + + // Called by workers to signal to master it has completed processing of + // UI commands + // virtual WorkerActionRequest ThisWorkerWaitForNextAction(); + // Worker thread barrier + // This method should be used by workers' run manager to wait, + // after an event loop for the next action to be performed + // (for example execute a new run) + // This returns the action to be performed + void ThisWorkerProcessCommandsStackDone() override; + + void WaitForReadyWorkers() override {} + void WaitForEndEventLoopWorkers() override; + void ThisWorkerReady() override {} + void ThisWorkerEndEventLoop() override {} + + WorkerActionRequest ThisWorkerWaitForNextAction() override + { + return WorkerActionRequest::UNDEFINED; + } + + inline void SetInitializeSeedsCallback(InitializeSeedsCallback f) { initSeedsCallback = f; } + + void AbortRun(G4bool softAbort = false) override; + void AbortEvent() override; + + protected: + virtual void ComputeNumberOfTasks(); + + // Initialize the seeds list, if derived class does not implement this method + // A default generation will be used (nevents*2 random seeds) + // Return true if initialization is done. + G4bool InitializeSeeds(G4int /*nevts*/) override { return false; } + + // Adds one seed to the list of seeds + void RefillSeeds() override; + void StoreRNGStatus(const G4String& filenamePrefix) override; + + // Creates worker threads and signal to start + void CreateAndStartWorkers() override; + + void TerminateWorkers() override; + void NewActionRequest(WorkerActionRequest) override {} + virtual void AddEventTask(G4int); + + protected: + // Barriers: synch points between master and workers + RunTaskGroup* workTaskGroup = nullptr; + + // aliases to inherited member values + G4bool& poolInitialized = PTL::TaskRunManager::m_is_initialized; + G4ThreadPool*& threadPool = PTL::TaskRunManager::m_thread_pool; + G4VUserTaskQueue*& taskQueue = PTL::TaskRunManager::m_task_queue; + G4TaskManager*& taskManager = PTL::TaskRunManager::m_task_manager; + + InitializeSeedsCallback initSeedsCallback = [](G4int, G4int&, G4int&) { + return false; + }; + + private: + // grainsize + G4bool workersStarted = false; + G4int eventGrainsize = 0; + G4int numberOfEventsPerTask = -1; + G4int numberOfTasks = -1; + CLHEP::HepRandomEngine* masterRNGEngine = nullptr; + // Pointer to the master thread random engine + G4TaskRunManagerKernel* MTkernel = nullptr; }; #endif // G4TaskRunManager_hh diff --git a/source/run/include/G4TaskRunManagerKernel.hh b/source/run/include/G4TaskRunManagerKernel.hh index 371ac66b63f..0849cf90218 100644 --- a/source/run/include/G4TaskRunManagerKernel.hh +++ b/source/run/include/G4TaskRunManagerKernel.hh @@ -53,43 +53,47 @@ #ifndef G4TaskRunManagerKernel_hh #define G4TaskRunManagerKernel_hh 1 -#include "rundefs.hh" #include "G4RunManagerKernel.hh" #include "G4TaskRunManager.hh" #include "G4Threading.hh" +#include "rundefs.hh" + +#include + class G4WorkerThread; class G4WorkerTaskRunManager; -#include class G4TaskRunManagerKernel : public G4RunManagerKernel { - public: - G4TaskRunManagerKernel(); - virtual ~G4TaskRunManagerKernel(); + public: + G4TaskRunManagerKernel(); + ~G4TaskRunManagerKernel() override = default; + + public: // with descroption + static G4WorkerThread* GetWorkerThread(); + // G4ThreadPool tasks + static void InitializeWorker(); + static void ExecuteWorkerInit(); + static void ExecuteWorkerTask(); + static void TerminateWorkerRunEventLoop(); + static void TerminateWorker(); + static void TerminateWorkerRunEventLoop(G4WorkerTaskRunManager*); + static void TerminateWorker(G4WorkerTaskRunManager*); + + static std::vector& InitCommandStack(); - public: // with descroption - static G4WorkerThread* GetWorkerThread(); - // G4ThreadPool tasks - static void InitializeWorker(); - static void ExecuteWorkerInit(); - static void ExecuteWorkerTask(); - static void TerminateWorkerRunEventLoop(); - static void TerminateWorker(); - static void TerminateWorkerRunEventLoop(G4WorkerTaskRunManager*); - static void TerminateWorker(G4WorkerTaskRunManager*); + // Fill decay tables with particle definition pointers of + // decay products. This method has to be invoked by + // MTRunManager before event loop starts on workers. + void SetUpDecayChannels(); - static std::vector& InitCommandStack(); - // Fill decay tables with particle definition pointers of - // decay products. This method has to be invoked by - // MTRunManager before event loop starts on workers. - void SetUpDecayChannels(); - // This method should be invoked by G4TaskRunManager - void BroadcastAbortRun(G4bool softAbort); + // This method should be invoked by G4TaskRunManager + void BroadcastAbortRun(G4bool softAbort); - protected: - void SetupShadowProcess() const; - G4RUN_DLL static std::vector initCmdStack; + protected: + void SetupShadowProcess() const override; + G4RUN_DLL static std::vector initCmdStack; }; #endif // G4TaskRunManagerKernel_hh diff --git a/source/run/include/G4UserRunAction.hh b/source/run/include/G4UserRunAction.hh index 21706d91790..8de2af88694 100644 --- a/source/run/include/G4UserRunAction.hh +++ b/source/run/include/G4UserRunAction.hh @@ -52,19 +52,17 @@ class G4Run; class G4UserRunAction { public: - G4UserRunAction(); - virtual ~G4UserRunAction(); + virtual ~G4UserRunAction() = default; - virtual G4Run* GenerateRun(); - virtual void BeginOfRunAction(const G4Run* aRun); - virtual void EndOfRunAction(const G4Run* aRun); + virtual G4Run* GenerateRun() { return nullptr; } + virtual void BeginOfRunAction(const G4Run* /*aRun*/) {} + virtual void EndOfRunAction(const G4Run* /*aRun*/) {} inline virtual void SetMaster(G4bool val = true) { isMaster = val; } inline G4bool IsMaster() const { return isMaster; } protected: - G4bool isMaster = true; }; diff --git a/source/run/include/G4UserTaskInitialization.hh b/source/run/include/G4UserTaskInitialization.hh index 8a394fe803c..a561d65a119 100644 --- a/source/run/include/G4UserTaskInitialization.hh +++ b/source/run/include/G4UserTaskInitialization.hh @@ -66,33 +66,33 @@ class G4UserTaskInitialization : public G4UserWorkerInitialization { - public: // with description - G4UserTaskInitialization(); - virtual ~G4UserTaskInitialization(); + public: // with description + G4UserTaskInitialization() = default; + ~G4UserTaskInitialization() override = default; - virtual void WorkerInitialize() const; - // This method is called after the tread is created but before the - // G4WorkerTaskRunManager is instantiated. + // This method is called after the tread is created but before the + // G4WorkerTaskRunManager is instantiated. + void WorkerInitialize() const override {} - virtual void WorkerStart() const; - // This method is called once at the beginning of simulation job - // when kernel classes and user action classes have already instantiated - // but geometry and physics have not been yet initialized. This situation - // is identical to "PreInit" state in the sequential mode. + // This method is called once at the beginning of simulation job + // when kernel classes and user action classes have already instantiated + // but geometry and physics have not been yet initialized. This situation + // is identical to "PreInit" state in the sequential mode. + void WorkerStart() const override {} - virtual void WorkerRunStart() const; - // This method is called before an event loop. Geometry and physics have - // already been set up for the thread. All threads are synchronized and - // ready to start the local event loop. This situation is identical to - // "Idle" state in the sequential mode. + // This method is called before an event loop. Geometry and physics have + // already been set up for the thread. All threads are synchronized and + // ready to start the local event loop. This situation is identical to + // "Idle" state in the sequential mode. + void WorkerRunStart() const override {} - virtual void WorkerRunEnd() const; - // This method is called for each thread, when the local event loop has - // finished but before the synchronization over threads. + // This method is called for each thread, when the local event loop has + // finished but before the synchronization over threads. + void WorkerRunEnd() const override {} - virtual void WorkerStop() const; - // This method is called once at the end of simulation job. - // Implement here a clean up action. + // This method is called once at the end of simulation job. + // Implement here a clean up action. + void WorkerStop() const override {} }; #endif // G4UserTaskInitialization_hh diff --git a/source/run/include/G4UserTaskThreadInitialization.hh b/source/run/include/G4UserTaskThreadInitialization.hh index 151de8fb132..d6b859c7481 100644 --- a/source/run/include/G4UserTaskThreadInitialization.hh +++ b/source/run/include/G4UserTaskThreadInitialization.hh @@ -49,38 +49,38 @@ class G4WorkerTaskRunManager; class G4UserTaskThreadInitialization : public G4UserWorkerThreadInitialization { - public: // with description - G4UserTaskThreadInitialization(); - virtual ~G4UserTaskThreadInitialization(); + public: // with description + G4UserTaskThreadInitialization() = default; + ~G4UserTaskThreadInitialization() override = default; - virtual G4Thread* CreateAndStartWorker(G4WorkerThread* workerThreadContext); - // Called by the kernel to create a new thread/worker - // and start work. - // Usere should not re-implement this function (in derived class), except only - // if he/she wants to verwrite the default threading model (see StartThread - // function) + // Called by the kernel to create a new thread/worker + // and start work. + // Usere should not re-implement this function (in derived class), except only + // if he/she wants to verwrite the default threading model (see StartThread + // function) + G4Thread* CreateAndStartWorker(G4WorkerThread* workerThreadContext) override; - virtual void SetupRNGEngine(const CLHEP::HepRandomEngine* aRNGEngine) const; - // Called by worker threads to set the Random Number Generator Engine - // The default implementation "clones" the engine from the master thread - // User needs to re-implement this method if using a non-standard - // RNG Engine (i.e. a different one w.r.t. the one provided in the CLHEP - // version supported by G4. - // Important: this method is called by all threads at the same time - // if is user responsibilitiy to make it thread-safe + // Called by worker threads to set the Random Number Generator Engine + // The default implementation "clones" the engine from the master thread + // User needs to re-implement this method if using a non-standard + // RNG Engine (i.e. a different one w.r.t. the one provided in the CLHEP + // version supported by G4. + // Important: this method is called by all threads at the same time + // if is user responsibilitiy to make it thread-safe + void SetupRNGEngine(const CLHEP::HepRandomEngine* aRNGEngine) const override; - virtual void JoinWorker(G4Thread* aThread); - // Called by the kernel when threads need to be terminated. Implements logic - // of joining the aThread. Calling thread will wait for aThread to end. Usere - // should not re-implement this function (in derived class), except only if - // he/she wants to verwrite the default threading model (see StartThread - // function) + // Called by the kernel when threads need to be terminated. Implements logic + // of joining the aThread. Calling thread will wait for aThread to end. Usere + // should not re-implement this function (in derived class), except only if + // he/she wants to verwrite the default threading model (see StartThread + // function) + void JoinWorker(G4Thread* aThread) override; - virtual G4WorkerRunManager* CreateWorkerRunManager() const; - // Called by StartThread function to create a run-manager implementing worker - // behvior. User should re-implemtn this function in derived class to - // instantiate his/her user-defined WorkerRunManager. By default this method - // instantiates G4WorkerTaskRunManager object. + // Called by StartThread function to create a run-manager implementing worker + // behvior. User should re-implemtn this function in derived class to + // instantiate his/her user-defined WorkerRunManager. By default this method + // instantiates G4WorkerTaskRunManager object. + G4WorkerRunManager* CreateWorkerRunManager() const override; }; #endif // G4UserTaskThreadInitialization_hh diff --git a/source/run/include/G4UserWorkerInitialization.hh b/source/run/include/G4UserWorkerInitialization.hh index 05d14e3cc25..1d8fd21899e 100644 --- a/source/run/include/G4UserWorkerInitialization.hh +++ b/source/run/include/G4UserWorkerInitialization.hh @@ -65,33 +65,32 @@ class G4UserWorkerInitialization { public: + G4UserWorkerInitialization() = default; + virtual ~G4UserWorkerInitialization() = default; - G4UserWorkerInitialization(); - virtual ~G4UserWorkerInitialization(); + // This method is called after the tread is created but before the + // G4WorkerRunManager is instantiated. + virtual void WorkerInitialize() const {} - virtual void WorkerInitialize() const; - // This method is called after the tread is created but before the - // G4WorkerRunManager is instantiated. + // This method is called once at the beginning of simulation job + // when kernel classes and user action classes have already instantiated + // but geometry and physics have not been yet initialised. This situation + // is identical to 'PreInit' state in the sequential mode. + virtual void WorkerStart() const {} - virtual void WorkerStart() const; - // This method is called once at the beginning of simulation job - // when kernel classes and user action classes have already instantiated - // but geometry and physics have not been yet initialised. This situation - // is identical to 'PreInit' state in the sequential mode. + // This method is called before an event loop. Geometry and physics have + // already been set up for the thread. All threads are synchronised and + // ready to start the local event loop. This situation is identical to + // 'Idle' state in the sequential mode. + virtual void WorkerRunStart() const {} - virtual void WorkerRunStart() const; - // This method is called before an event loop. Geometry and physics have - // already been set up for the thread. All threads are synchronised and - // ready to start the local event loop. This situation is identical to - // 'Idle' state in the sequential mode. + // This method is called for each thread, when the local event loop has + // finished but before the synchronisation over threads. + virtual void WorkerRunEnd() const {} - virtual void WorkerRunEnd() const; - // This method is called for each thread, when the local event loop has - // finished but before the synchronisation over threads. - - virtual void WorkerStop() const; - // This method is called once at the end of simulation job. - // Implement here a clean up action. + // This method is called once at the end of simulation job. + // Implement here a clean up action. + virtual void WorkerStop() const {} }; #endif diff --git a/source/run/include/G4UserWorkerThreadInitialization.hh b/source/run/include/G4UserWorkerThreadInitialization.hh index 4d7b3c0fa26..ae76cdc2cb0 100644 --- a/source/run/include/G4UserWorkerThreadInitialization.hh +++ b/source/run/include/G4UserWorkerThreadInitialization.hh @@ -50,37 +50,36 @@ class G4WorkerRunManager; class G4UserWorkerThreadInitialization { public: + G4UserWorkerThreadInitialization() = default; + virtual ~G4UserWorkerThreadInitialization() = default; - G4UserWorkerThreadInitialization(); - virtual ~G4UserWorkerThreadInitialization(); - + // Called by the kernel to create a new thread/worker and start work. + // User should not re-implement this function (in derived class), except + // only if he/she wants to rewrite the default threading model (see + // StartThread() function). virtual G4Thread* CreateAndStartWorker(G4WorkerThread* workerThreadContext); - // Called by the kernel to create a new thread/worker and start work. - // User should not re-implement this function (in derived class), except - // only if he/she wants to rewrite the default threading model (see - // StartThread() function). + // Called by worker threads to set the Random Number Generator Engine. + // The default implementation "clones" the engine from the master thread + // User needs to re-implement this method if using a non-standard + // RNG Engine (i.e. a different one w.r.t. the one provided in the CLHEP + // version supported by Geant4). + // Important: this method is called by all threads at the same time; + // it is user responsibilitiy to make it thread-safe. virtual void SetupRNGEngine(const CLHEP::HepRandomEngine* aRNGEngine) const; - // Called by worker threads to set the Random Number Generator Engine. - // The default implementation "clones" the engine from the master thread - // User needs to re-implement this method if using a non-standard - // RNG Engine (i.e. a different one w.r.t. the one provided in the CLHEP - // version supported by Geant4). - // Important: this method is called by all threads at the same time; - // it is user responsibilitiy to make it thread-safe. + // Called by the kernel when threads need to be terminated. Implements + // logic of joining the "aThread". Calling thread will wait for "aThread" + // to end. Users should not re-implement this function (in derived class), + // except only if he/she wants to rewrite the default threading model (see + // StartThread() function). virtual void JoinWorker(G4Thread* aThread); - // Called by the kernel when threads need to be terminated. Implements - // logic of joining the "aThread". Calling thread will wait for "aThread" - // to end. Users should not re-implement this function (in derived class), - // except only if he/she wants to rewrite the default threading model (see - // StartThread() function). + // Called by StartThread() function to create a run-manager implementing + // worker behvior. User should re-implement this function in a derived + // class to instantiate his/her user-defined WorkerRunManager. + // By default this method instantiates a G4WorkerRunManager object. virtual G4WorkerRunManager* CreateWorkerRunManager() const; - // Called by StartThread() function to create a run-manager implementing - // worker behvior. User should re-implement this function in a derived - // class to instantiate his/her user-defined WorkerRunManager. - // By default this method instantiates a G4WorkerRunManager object. }; #endif diff --git a/source/run/include/G4VModularPhysicsList.hh b/source/run/include/G4VModularPhysicsList.hh index dd264aa8ffa..de071193803 100644 --- a/source/run/include/G4VModularPhysicsList.hh +++ b/source/run/include/G4VModularPhysicsList.hh @@ -41,23 +41,22 @@ #ifndef G4VModularPhysicsList_hh #define G4VModularPhysicsList_hh 1 -#include - +#include "G4VPhysicsConstructor.hh" +#include "G4VUPLSplitter.hh" +#include "G4VUserPhysicsList.hh" #include "G4ios.hh" #include "globals.hh" + #include "rundefs.hh" -#include "G4VPhysicsConstructor.hh" -#include "G4VUPLSplitter.hh" -#include "G4VUserPhysicsList.hh" +#include class G4VMPLData { - // Encapsulate the fields of class G4VModularPhysicsList - // that are per-thread. + // Encapsulate the fields of class G4VModularPhysicsList + // that are per-thread. public: - void initialize(); using G4PhysConstVectorData = std::vector; // See: https://jira-geant4.kek.jp/browse/DEV-284 @@ -86,55 +85,53 @@ using G4VModularPhysicsListSubInstanceManager = G4VMPLManager; class G4VModularPhysicsList : public virtual G4VUserPhysicsList { public: - G4VModularPhysicsList(); - virtual ~G4VModularPhysicsList(); + ~G4VModularPhysicsList() override; - virtual void ConstructParticle() override; - // This method will be invoked in the Construct() method. - // Each particle type will be instantiated. + // This method will be invoked in the Construct() method. + // Each particle type will be instantiated. + void ConstructParticle() override; - virtual void ConstructProcess() override; - // This method will be invoked in the Construct() method. - // Each physics process will be instantiated and - // registered to the process manager of each particle type. + // This method will be invoked in the Construct() method. + // Each physics process will be instantiated and + // registered to the process manager of each particle type. + void ConstructProcess() override; + // Register Physics Constructor. void RegisterPhysics(G4VPhysicsConstructor*); - // Register Physics Constructor. const G4VPhysicsConstructor* GetPhysics(G4int index) const; const G4VPhysicsConstructor* GetPhysics(const G4String& name) const; const G4VPhysicsConstructor* GetPhysicsWithType(G4int physics_type) const; + // Replace the Physics Constructor. + // The existing physics constructor with same physics_type as one of + // the given physics constructor is replaced (existing physics will be + // deleted). If a corresponding physics constructor is NOT found, + // the given physics constructor is just added. void ReplacePhysics(G4VPhysicsConstructor*); - // Replace the Physics Constructor. - // The existing physics constructor with same physics_type as one of - // the given physics constructor is replaced (existing physics will be - // deleted). If a corresponding physics constructor is NOT found, - // the given physics constructor is just added. + // Remove the Physics Constructor from the list. void RemovePhysics(G4VPhysicsConstructor*); void RemovePhysics(G4int type); void RemovePhysics(const G4String& name); - // Remove the Physics Constructor from the list. inline G4int GetInstanceID() const; static const G4VMPLManager& GetSubInstanceManager(); - virtual void TerminateWorker() override; + void TerminateWorker() override; + // Set/get control flag for output message + // 0: Silent + // 1: Warning message + // 2: More + // given verbose level is set to all physics constructors. void SetVerboseLevel(G4int value); G4int GetVerboseLevel() const; - // Set/get control flag for output message - // 0: Silent - // 1: Warning message - // 2: More - // given verbose level is set to all physics constructors. protected: - + // Protected copy constructor and assignment operator. G4VModularPhysicsList(const G4VModularPhysicsList&); G4VModularPhysicsList& operator=(const G4VModularPhysicsList&); - // Protected copy constructor and assignment operator. using G4PhysConstVector = G4VMPLData::G4PhysConstVectorData; diff --git a/source/run/include/G4VPersistencyManager.hh b/source/run/include/G4VPersistencyManager.hh index ec1f53717c9..7ccbf0e614e 100644 --- a/source/run/include/G4VPersistencyManager.hh +++ b/source/run/include/G4VPersistencyManager.hh @@ -51,31 +51,29 @@ class G4VPhysicalVolume; class G4VPersistencyManager { public: - + // Static method to return the pointer to the singleton object. + // Note that this method does NOT create the singleton itself. static G4VPersistencyManager* GetPersistencyManager(); - // Static method to return the pointer to the singleton object. - // Note that this method does NOT create the singleton itself. virtual ~G4VPersistencyManager(); - virtual G4bool Store(const G4Event* anEvent) = 0; - virtual G4bool Store(const G4Run* aRun) = 0; - virtual G4bool Store(const G4VPhysicalVolume* world) = 0; - // Stores G4Event, G4Run, and geometry tree characterised - // by the world volume. + // Stores G4Event, G4Run, and geometry tree characterised + // by the world volume. + + virtual G4bool Store(const G4Event* anEvent) = 0; + virtual G4bool Store(const G4Run* aRun) = 0; + virtual G4bool Store(const G4VPhysicalVolume* world) = 0; - virtual G4bool Retrieve(G4Event*& anEvent) = 0; - virtual G4bool Retrieve(G4Run*& aRun) = 0; + // Restores G4Event, G4Run, and geometry tree characterised + // by the world volume. + virtual G4bool Retrieve(G4Event*& anEvent) = 0; + virtual G4bool Retrieve(G4Run*& aRun) = 0; virtual G4bool Retrieve(G4VPhysicalVolume*& theWorld) = 0; - // Restores G4Event, G4Run, and geometry tree characterised - // by the world volume. protected: - G4VPersistencyManager(); private: - static G4ThreadLocal G4VPersistencyManager* fPersistencyManager; }; diff --git a/source/run/include/G4VPhysicsConstructor.hh b/source/run/include/G4VPhysicsConstructor.hh index 14c949471e7..e41ba651a41 100644 --- a/source/run/include/G4VPhysicsConstructor.hh +++ b/source/run/include/G4VPhysicsConstructor.hh @@ -49,24 +49,24 @@ #ifndef G4VPhysicsConstructor_hh #define G4VPhysicsConstructor_hh 1 -#include - #include "G4ParticleTable.hh" #include "G4PhysicsListHelper.hh" #include "G4VUPLSplitter.hh" #include "G4ios.hh" #include "globals.hh" + #include "rundefs.hh" +#include + class G4PhysicsBuilderInterface; class G4VPCData { - // Encapsulate the fields of class G4VPhysicsConstructor - // that are per-thread. + // Encapsulate the fields of class G4VPhysicsConstructor + // that are per-thread. public: - using PhysicsBuilders_V = std::vector; void initialize(); G4ParticleTable::G4PTblDicIterator* _aParticleIterator; @@ -108,19 +108,18 @@ using G4VPhyscicsConstructorManager = G4VPCManager; class G4VPhysicsConstructor { public: - G4VPhysicsConstructor(const G4String& = ""); G4VPhysicsConstructor(const G4String& name, G4int physics_type); virtual ~G4VPhysicsConstructor(); + // This method will be invoked in the Construct() method. + // Each particle type will be instantiated. virtual void ConstructParticle() = 0; - // This method will be invoked in the Construct() method. - // Each particle type will be instantiated. + // This method will be invoked in the Construct() method. + // Each physics process will be instantiated and + // registered to the process manager of each particle type. virtual void ConstructProcess() = 0; - // This method will be invoked in the Construct() method. - // Each physics process will be instantiated and - // registered to the process manager of each particle type. inline void SetPhysicsName(const G4String& = ""); inline const G4String& GetPhysicsName() const; @@ -131,37 +130,35 @@ class G4VPhysicsConstructor inline G4int GetInstanceID() const; static const G4VPCManager& GetSubInstanceManager(); + // Method called by kernel to destroy thread-local data, equivalent to + // destructor in sequential mode. Derived classes implementing this + // method, must also call this base class method. virtual void TerminateWorker(); - // Method called by kernel to destroy thread-local data, equivalent to - // destructor in sequential mode. Derived classes implementing this - // method, must also call this base class method. + // Set/get control flag for output message + // 0: Silent + // 1: Warning message + // 2: More + // verbose level is set equal to physics list when registered. inline void SetVerboseLevel(G4int value); inline G4int GetVerboseLevel() const; - // Set/get control flag for output message - // 0: Silent - // 1: Warning message - // 2: More - // verbose level is set equal to physics list when registered. protected: - using PhysicsBuilder_V = G4VPCData::PhysicsBuilders_V; - inline G4bool RegisterProcess(G4VProcess* process, - G4ParticleDefinition* particle); - // Register a process to the particle type according to the ordering - // parameter table. 'true' is returned if the process is registered - // successfully. + // Register a process to the particle type according to the ordering + // parameter table. 'true' is returned if the process is registered + // successfully. + inline G4bool RegisterProcess(G4VProcess* process, G4ParticleDefinition* particle); G4ParticleTable::G4PTblDicIterator* GetParticleIterator() const; + // This returns a copy of the vector of pointers. PhysicsBuilder_V GetBuilders() const; - // This returns a copy of the vector of pointers. + void AddBuilder(G4PhysicsBuilderInterface* bld); protected: - G4int verboseLevel = 0; G4String namePhysics = ""; G4int typePhysics = 0; @@ -195,7 +192,9 @@ inline const G4String& G4VPhysicsConstructor::GetPhysicsName() const inline void G4VPhysicsConstructor::SetPhysicsType(G4int val) { - if(val > 0) { typePhysics = val; } + if (val > 0) { + typePhysics = val; + } } inline G4int G4VPhysicsConstructor::GetPhysicsType() const @@ -203,11 +202,10 @@ inline G4int G4VPhysicsConstructor::GetPhysicsType() const return typePhysics; } -inline G4bool G4VPhysicsConstructor::RegisterProcess( - G4VProcess* process, G4ParticleDefinition* particle) +inline G4bool G4VPhysicsConstructor::RegisterProcess(G4VProcess* process, + G4ParticleDefinition* particle) { - return G4PhysicsListHelper::GetPhysicsListHelper() - ->RegisterProcess(process, particle); + return G4PhysicsListHelper::GetPhysicsListHelper()->RegisterProcess(process, particle); } inline const G4VPCManager& G4VPhysicsConstructor::GetSubInstanceManager() diff --git a/source/run/include/G4VUPLSplitter.hh b/source/run/include/G4VUPLSplitter.hh index ce9e236d59e..77a508b304a 100644 --- a/source/run/include/G4VUPLSplitter.hh +++ b/source/run/include/G4VUPLSplitter.hh @@ -52,53 +52,47 @@ #ifndef G4VUPLSplitter_hh #define G4VUPLSplitter_hh 1 -#include - #include "G4AutoLock.hh" #include "globals.hh" + #include "rundefs.hh" +#include -template // T is the private data from the object to be split +template // T is the private data from the object to be split class G4VUPLSplitter { public: + G4VUPLSplitter() { G4MUTEXINIT(mutex); } - G4VUPLSplitter() - { - G4MUTEXINIT(mutex); - } - + // Invoked by the master thread to create a new subinstance + // whenever a new split class instance is created. + // This is called by constructor of shared classes, + // thus only master thread calls this G4int CreateSubInstance() - // Invoked by the master thread to create a new subinstance - // whenever a new split class instance is created. - // This is called by constructor of shared classes, - // thus only master thread calls this { G4AutoLock l(&mutex); // One more instance ++totalobj; // If the number of objects is larger than the available spaces, // a re-allocation is needed - if(totalobj > workertotalspace) - { + if (totalobj > workertotalspace) { l.unlock(); NewSubInstances(); l.lock(); } // Since this is called by Master thread, we can remember this - totalspace = workertotalspace; + totalspace = workertotalspace; sharedOffset = offset; return (totalobj - 1); } + // Invoked by each worker thread to grow the subinstance array and + // initialize each new subinstance using a particular method defined + // by the subclass. void NewSubInstances() - // Invoked by each worker thread to grow the subinstance array and - // initialize each new subinstance using a particular method defined - // by the subclass. { G4AutoLock l(&mutex); - if(workertotalspace >= totalobj) - { + if (workertotalspace >= totalobj) { return; } // Remember current large size @@ -106,25 +100,22 @@ class G4VUPLSplitter // Increase its size by some value (purely arbitrary) workertotalspace = totalobj + 512; // Now re-allocate new space - offset = (T*) realloc(offset, workertotalspace * sizeof(T)); - if(offset == nullptr) - { - G4Exception("G4VUPLSplitter::NewSubInstances()", "OutOfMemory", - FatalException, "Cannot malloc space!"); + offset = (T*)realloc(offset, workertotalspace * sizeof(T)); + if (offset == nullptr) { + G4Exception("G4VUPLSplitter::NewSubInstances()", "OutOfMemory", FatalException, + "Cannot malloc space!"); return; } // The newly created objects need to be initialized - for(G4int i = originaltotalspace; i < workertotalspace; ++i) - { + for (G4int i = originaltotalspace; i < workertotalspace; ++i) { offset[i].initialize(); } } - void FreeWorker() // Invoked by all threads to free the subinstance array. + void FreeWorker() { - if(offset == nullptr) - { + if (offset == nullptr) { return; } free(offset); @@ -136,18 +127,14 @@ class G4VUPLSplitter void UseWorkArea(T* newOffset) { // Use recycled work area - which was created previously - if(offset != nullptr && offset != newOffset) - { - G4Exception("G4VUPLSplitter::UseWorkspace()", "TwoWorkspaces", - FatalException, + if (offset != nullptr && offset != newOffset) { + G4Exception("G4VUPLSplitter::UseWorkspace()", "TwoWorkspaces", FatalException, "Thread already has workspace - cannot use another."); } offset = newOffset; - // totalobj= numObjects; - // totalspace= numSpace; } - T* FreeWorkArea() // G4int* numObjects, G4int* numSpace) + T* FreeWorkArea() { // Detach this thread from this Location // The object which calls this method is responsible for it. @@ -158,22 +145,20 @@ class G4VUPLSplitter return offsetRet; } + // Invoked by each worker thread to copy all subinstances array from + // the master thread void WorkerCopySubInstanceArray() - // Invoked by each worker thread to copy all subinstances array from - // the master thread { - if(offset != nullptr) - return; + if (offset != nullptr) return; // Since this is called by worker threds, totalspace is some valid // number > 0. Remember totalspace is the number of available slots // from master. We are sure that it has valid data G4AutoLock l(&mutex); - offset = (T*) realloc(offset, totalspace * sizeof(T)); - if(offset == nullptr) - { - G4Exception("G4VUPLSplitter::WorkerCopySubInstanceArray()", - "OutOfMemory", FatalException, "Cannot malloc space!"); + offset = (T*)realloc(offset, totalspace * sizeof(T)); + if (offset == nullptr) { + G4Exception("G4VUPLSplitter::WorkerCopySubInstanceArray()", "OutOfMemory", FatalException, + "Cannot malloc space!"); return; } // Now just copy from master thread (sharedOffset) @@ -181,23 +166,21 @@ class G4VUPLSplitter } public: - + // Per-thread available number of slots G4RUN_DLL G4ThreadLocalStatic G4int workertotalspace; - // Per-thread available number of slots + // Pointer to first instance of an array G4RUN_DLL G4ThreadLocalStatic T* offset; - // Pointer to first instance of an array private: - - G4int totalobj = 0; // Total number of instances from master thread + G4int totalobj = 0; // Total number of instances from master thread G4int totalspace = 0; // Available number of "slots" T* sharedOffset = nullptr; G4Mutex mutex; }; -template +template G4ThreadLocal G4int G4VUPLSplitter::workertotalspace = 0; -template +template G4ThreadLocal T* G4VUPLSplitter::offset = nullptr; #endif diff --git a/source/run/include/G4VUserActionInitialization.hh b/source/run/include/G4VUserActionInitialization.hh index 15e51b1f975..f9d517fd366 100644 --- a/source/run/include/G4VUserActionInitialization.hh +++ b/source/run/include/G4VUserActionInitialization.hh @@ -58,38 +58,36 @@ class G4VSteppingVerbose; class G4VUserActionInitialization { public: + G4VUserActionInitialization() = default; + virtual ~G4VUserActionInitialization() = default; - G4VUserActionInitialization(); - virtual ~G4VUserActionInitialization(); - + // Virtual method to be implemented by the user to instantiate + // user action class objects. virtual void Build() const = 0; - // Virtual method to be implemented by the user to instantiate - // user action class objects. - virtual void BuildForMaster() const; - // Virtual method to be implemented by the user to instantiate user - // run action class object to be used by G4MTRunManager. This method - // is not invoked in the sequential mode. The user should not use - // this method to instantiate user action classes except for user - // run action. + // Virtual method to be implemented by the user to instantiate user + // run action class object to be used by G4MTRunManager. This method + // is not invoked in the sequential mode. The user should not use + // this method to instantiate user action classes except for user + // run action. + virtual void BuildForMaster() const {} - virtual G4VSteppingVerbose* InitializeSteppingVerbose() const; - // Virtual method to be implemented by the user if having a concrete - // SteppingVerbose class to be used by the worker thread. In this case - // one should instantiate a SteppingVerbose in the concrete - // implementation of this method and return its pointer. If this method - // is not implemented, the default G4SteppingVerbose will be used. - // Please note that this method affects only for the worker thread. + // Virtual method to be implemented by the user if having a concrete + // SteppingVerbose class to be used by the worker thread. In this case + // one should instantiate a SteppingVerbose in the concrete + // implementation of this method and return its pointer. If this method + // is not implemented, the default G4SteppingVerbose will be used. + // Please note that this method affects only for the worker thread. + virtual G4VSteppingVerbose* InitializeSteppingVerbose() const { return nullptr; } protected: - + // These methods should be used to define user's action classes. void SetUserAction(G4VUserPrimaryGeneratorAction*) const; void SetUserAction(G4UserRunAction*) const; void SetUserAction(G4UserEventAction*) const; void SetUserAction(G4UserStackingAction*) const; void SetUserAction(G4UserTrackingAction*) const; void SetUserAction(G4UserSteppingAction*) const; - // These methods should be used to define user's action classes. }; #endif diff --git a/source/run/include/G4VUserDetectorConstruction.hh b/source/run/include/G4VUserDetectorConstruction.hh index b9ef4685ba4..4cd8bd0d95d 100644 --- a/source/run/include/G4VUserDetectorConstruction.hh +++ b/source/run/include/G4VUserDetectorConstruction.hh @@ -38,10 +38,10 @@ #ifndef G4VUserDetectorConstruction_hh #define G4VUserDetectorConstruction_hh 1 -#include - #include "globals.hh" +#include + class G4VPhysicalVolume; class G4LogicalVolume; class G4VUserParallelWorld; @@ -50,15 +50,14 @@ class G4VSensitiveDetector; class G4VUserDetectorConstruction { public: - - G4VUserDetectorConstruction(); - virtual ~G4VUserDetectorConstruction(); + G4VUserDetectorConstruction() = default; + virtual ~G4VUserDetectorConstruction() = default; virtual G4VPhysicalVolume* Construct() = 0; + // This method is used in multi-threaded applications to build + // per-worker non-shared objects: SensitiveDetectors and Field managers. virtual void ConstructSDandField(); - // This method is used in multi-threaded applications to build - // per-worker non-shared objects: SensitiveDetectors and Field managers. virtual void CloneSD(); virtual void CloneF(); @@ -72,13 +71,11 @@ class G4VUserDetectorConstruction G4VUserParallelWorld* GetParallelWorld(G4int i) const; protected: + void SetSensitiveDetector(const G4String& logVolName, G4VSensitiveDetector* aSD, + G4bool multi = false); + void SetSensitiveDetector(G4LogicalVolume* logVol, G4VSensitiveDetector* aSD); - void SetSensitiveDetector(const G4String& logVolName, - G4VSensitiveDetector* aSD, G4bool multi = false); - void SetSensitiveDetector(G4LogicalVolume* logVol, - G4VSensitiveDetector* aSD); private: - std::vector parallelWorld; }; diff --git a/source/run/include/G4VUserParallelWorld.hh b/source/run/include/G4VUserParallelWorld.hh index ccfd8d10d6b..22b8ac71d6f 100644 --- a/source/run/include/G4VUserParallelWorld.hh +++ b/source/run/include/G4VUserParallelWorld.hh @@ -47,26 +47,22 @@ class G4VSensitiveDetector; class G4VUserParallelWorld { public: - G4VUserParallelWorld(const G4String& worldName); - virtual ~G4VUserParallelWorld(); + virtual ~G4VUserParallelWorld() = default; virtual void Construct() = 0; - virtual void ConstructSD(); + virtual void ConstructSD() {} inline const G4String& GetName() { return fWorldName; } protected: - G4VPhysicalVolume* GetWorld(); - void SetSensitiveDetector(const G4String& logVolName, - G4VSensitiveDetector* aSD, G4bool multi = false); - void SetSensitiveDetector(G4LogicalVolume* logVol, - G4VSensitiveDetector* aSD); + void SetSensitiveDetector(const G4String& logVolName, G4VSensitiveDetector* aSD, + G4bool multi = false); + void SetSensitiveDetector(G4LogicalVolume* logVol, G4VSensitiveDetector* aSD); protected: - G4String fWorldName = "ParallelWorld"; }; diff --git a/source/run/include/G4VUserPhysicsList.hh b/source/run/include/G4VUserPhysicsList.hh index 61b688e500e..03e4521ac5c 100644 --- a/source/run/include/G4VUserPhysicsList.hh +++ b/source/run/include/G4VUserPhysicsList.hh @@ -40,29 +40,26 @@ #ifndef G4VUserPhysicsList_hh #define G4VUserPhysicsList_hh 1 -#include "G4ios.hh" -#include "globals.hh" -#include "rundefs.hh" -#include "tls.hh" - #include "G4ParticleDefinition.hh" #include "G4ParticleTable.hh" +#include "G4PhysicsModelCatalog.hh" #include "G4ProductionCutsTable.hh" +#include "G4Threading.hh" #include "G4VUPLSplitter.hh" +#include "G4ios.hh" +#include "globals.hh" -#include "G4Threading.hh" -#include "G4PhysicsModelCatalog.hh" +#include "rundefs.hh" +#include "tls.hh" class G4UserPhysicsListMessenger; class G4PhysicsListHelper; class G4VProcess; +// Encapsulate the fields of class G4VUserPhysicsList that are per-thread. class G4VUPLData { - // Encapsulate the fields of class G4VUserPhysicsList that are per-thread. - public: - void initialize(); G4ParticleTable::G4PTblDicIterator* _theParticleIterator = nullptr; @@ -106,231 +103,215 @@ using G4VUserPhysicsListSubInstanceManager = G4VUPLManager; class G4VUserPhysicsList { public: - G4VUserPhysicsList(); virtual ~G4VUserPhysicsList(); - G4VUserPhysicsList(const G4VUserPhysicsList&); G4VUserPhysicsList& operator=(const G4VUserPhysicsList&); - // Copy constructor and assignment operator. + // Each particle type will be instantiated. + // This method is invoked by the RunManger. virtual void ConstructParticle() = 0; - // Each particle type will be instantiated. - // This method is invoked by the RunManger. + // By calling the "Construct" method, + // process manager and processes are created. void Construct(); - // By calling the "Construct" method, - // process manager and processes are created. + // Each physics process will be instantiated and + // registered to the process manager of each particle type. + // Invoked in the Construct() method. virtual void ConstructProcess() = 0; - // Each physics process will be instantiated and - // registered to the process manager of each particle type. - // Invoked in the Construct() method. + // Sets a cut value for all particle types in the particle table. virtual void SetCuts(); - // Sets a cut value for all particle types in the particle table. + // Set/get the default cut value. Calling SetDefaultCutValue() causes + // re-calcuration of cut values and physics tables just before the + // next event loop. void SetDefaultCutValue(G4double newCutValue); G4double GetDefaultCutValue() const; - // Set/get the default cut value. Calling SetDefaultCutValue() causes - // re-calcuration of cut values and physics tables just before the - // next event loop. + // Invoke BuildPhysicsTable for all processes for all particles. + // In case of "Retrieve" flag is ON, PhysicsTable will be + // retrieved from files. void BuildPhysicsTable(); - // Invoke BuildPhysicsTable for all processes for all particles. - // In case of "Retrieve" flag is ON, PhysicsTable will be - // retrieved from files. + // Prepare the PhysicsTable for specified particle type. void PreparePhysicsTable(G4ParticleDefinition*); - // Prepare the PhysicsTable for specified particle type. + // Build the PhysicsTable for specified particle type. void BuildPhysicsTable(G4ParticleDefinition*); - // Build the PhysicsTable for specified particle type. + // Store PhysicsTable together with both material and cut value + // information in files under the specified directory. + // Returns "true" if files are successfully created. G4bool StorePhysicsTable(const G4String& directory = "."); - // Store PhysicsTable together with both material and cut value - // information in files under the specified directory. - // Returns "true" if files are successfully created. + // Return true if "Retrieve" flag is ON. + // (i.e. PhysicsTable will be retrieved from files). G4bool IsPhysicsTableRetrieved() const; G4bool IsStoredInAscii() const; - // Return true if "Retrieve" flag is ON. - // (i.e. PhysicsTable will be retrieved from files). + // Get directory path for physics table files. const G4String& GetPhysicsTableDirectory() const; - // Get directory path for physics table files. + // Set "Retrieve" flag. Directory path can be set together. + // Null string (default) means directory is not changed + // from the current value. void SetPhysicsTableRetrieved(const G4String& directory = ""); void SetStoredInAscii(); - // Set "Retrieve" flag. Directory path can be set together. - // Null string (default) means directory is not changed - // from the current value. + // Reset "Retrieve" flag. void ResetPhysicsTableRetrieved(); void ResetStoredInAscii(); - // Reset "Retrieve" flag. + // Print out the List of registered particles types. void DumpList() const; - // Print out the List of registered particles types. + // Request to print out information of cut values. + // Printing will be performed when all tables are made. void DumpCutValuesTable(G4int flag = 1); - // Request to print out information of cut values. - // Printing will be performed when all tables are made. + // Triggers the print-out requested by the above method. + // This method must be invoked by RunManager at the proper moment. void DumpCutValuesTableIfRequested(); - // Triggers the print-out requested by the above method. - // This method must be invoked by RunManager at the proper moment. + // Set/get control flag for output message + // 0: Silent + // 1: Warning message + // 2: More void SetVerboseLevel(G4int value); G4int GetVerboseLevel() const; - // Set/get control flag for output message - // 0: Silent - // 1: Warning message - // 2: More void UseCoupledTransportation(G4bool vl = true); + // Invokes default SetCuts() method. + // Note: cut values will not be overwritten. + // Use of default SetCuts() method is recommended. void SetCutsWithDefault(); - // Invokes default SetCuts() method. - // Note: cut values will not be overwritten. - // Use of default SetCuts() method is recommended. + // Sets a cut value for a particle type for the default region. void SetCutValue(G4double aCut, const G4String& pname); - // Sets a cut value for a particle type for the default region. + // Gets a cut value for a particle type for the default region. G4double GetCutValue(const G4String& pname) const; - // Gets a cut value for a particle type for the default region. - void SetCutValue(G4double aCut, const G4String& pname, - const G4String& rname); - // Sets a cut value for a particle type for a region. + // Sets a cut value for a particle type for a region. + void SetCutValue(G4double aCut, const G4String& pname, const G4String& rname); - void SetParticleCuts(G4double cut, G4ParticleDefinition* particle, - G4Region* region = nullptr); - void SetParticleCuts(G4double cut, const G4String& particleName, - G4Region* region = nullptr); - // Invoke SetCuts for specified particle for a region. - // If the pointer to the region is NULL, the default region is used - // In case of "Retrieve" flag is ON, cut values will be retrieved - // from files. + // Invoke SetCuts for specified particle for a region. + // If the pointer to the region is NULL, the default region is used + // In case of "Retrieve" flag is ON, cut values will be retrieved + // from files. + void SetParticleCuts(G4double cut, G4ParticleDefinition* particle, G4Region* region = nullptr); + void SetParticleCuts(G4double cut, const G4String& particleName, G4Region* region = nullptr); + // Invoke SetCuts() for all particles in a region. void SetCutsForRegion(G4double aCut, const G4String& rname); - // Invoke SetCuts() for all particles in a region. + // Gets/sets the flag for ApplyCuts(). void SetApplyCuts(G4bool value, const G4String& name); G4bool GetApplyCuts(const G4String& name) const; - // Gets/sets the flag for ApplyCuts(). + // Remove and delete ProcessManagers for all particles in the + // Particle Table. void RemoveProcessManager(); - // Remove and delete ProcessManagers for all particles in the - // Particle Table. + // Remove and delete TrackingManagers for all particles in the + // Particle Table. void RemoveTrackingManager(); - // Remove and delete TrackingManagers for all particles in the - // Particle Table. + // Add process manager for particles created on-the-fly. void AddProcessManager(G4ParticleDefinition* newParticle, G4ProcessManager* newManager = nullptr); - // Add process manager for particles created on-the-fly. + // Check consistencies of list of particles. void CheckParticleList(); - // Check consistencies of list of particles. void DisableCheckParticleList(); inline G4int GetInstanceID() const; static const G4VUPLManager& GetSubInstanceManager(); - // Used by Worker threads on the shared instance of physics-list - // to initialise workers. Derived class re-implementing this method - // must also call this base class method. + + // Used by Worker threads on the shared instance of physics-list + // to initialise workers. Derived class re-implementing this method + // must also call this base class method. virtual void InitializeWorker(); - // Destroy thread-local data. Note that derived classes - // implementing this method should still call this base class one. + + // Destroy thread-local data. Note that derived classes + // implementing this method should still call this base class one. virtual void TerminateWorker(); protected: - + // User must invoke this method in his ConstructProcess() + // implementation in order to enable particle transportation. void AddTransportation(); - // User must invoke this method in his ConstructProcess() - // implementation in order to enable particle transportation. + // Register a process to the particle type + // according to the ordering parameter table. + // 'true' is returned if the process is registerd successfully. G4bool RegisterProcess(G4VProcess* process, G4ParticleDefinition* particle); - // Register a process to the particle type - // according to the ordering parameter table. - // 'true' is returned if the process is registerd successfully. + // Build PhysicsTable for making the integral schema. void BuildIntegralPhysicsTable(G4VProcess*, G4ParticleDefinition*); - // Build PhysicsTable for making the integral schema. - virtual void RetrievePhysicsTable(G4ParticleDefinition*, - const G4String& directory, + // Retrieve PhysicsTable from files for process belonging to the particle. + // Normal BuildPhysics procedure of processes will be invoked, if it + // fails (in case of process's RetrievePhysicsTable() returns false). + virtual void RetrievePhysicsTable(G4ParticleDefinition*, const G4String& directory, G4bool ascii = false); - // Retrieve PhysicsTable from files for process belonging to the particle. - // Normal BuildPhysics procedure of processes will be invoked, if it - // fails (in case of process's RetrievePhysicsTable() returns false). + // Adds new ProcessManager to all particles in the Particle Table. + // This function is used in Construct(). void InitializeProcessManager(); - // Adds new ProcessManager to all particles in the Particle Table. - // This function is used in Construct(). G4ParticleTable::G4PTblDicIterator* GetParticleIterator() const; protected: - + // The particle table has the complete List of existing particle types. G4ParticleTable* theParticleTable = nullptr; - // The particle table has the complete List of existing particle types. G4int verboseLevel = 1; + // Default cut value for all particles G4double defaultCutValue = 1.0; - // Default cut value for all particles G4bool isSetDefaultCutValue = false; + // Pointer to ProductionCutsTable. G4ProductionCutsTable* fCutsTable = nullptr; - // Pointer to ProductionCutsTable. + // Flag to determine if physics table will be build from file or not. G4bool fRetrievePhysicsTable = false; - // Flag to determine if physics table will be build from file or not. G4bool fStoredInAscii = true; G4bool fIsCheckedForRetrievePhysicsTable = false; G4bool fIsRestoredCutValues = false; + // Directory name for physics table files. G4String directoryPhysicsTable = "."; - // Directory name for physics table files. + // Flag for CheckParticleList(). G4bool fDisableCheckParticleList = false; - // Flag for CheckParticleList(). + // MT data G4int g4vuplInstanceID = 0; G4RUN_DLL static G4VUPLManager subInstanceManager; - // MT data - - private: - - enum - { - FixedStringLengthForStore = 32 - }; }; // Inline methods implementations inline void G4VUserPhysicsList::Construct() { - #ifdef G4VERBOSE - if(verboseLevel > 1) - G4cout << "G4VUserPhysicsList::Construct()" << G4endl; - #endif +#ifdef G4VERBOSE + if (verboseLevel > 1) G4cout << "G4VUserPhysicsList::Construct()" << G4endl; +#endif + + if (G4Threading::IsMasterThread()) G4PhysicsModelCatalog::Initialize(); - if ( G4Threading::IsMasterThread() ) G4PhysicsModelCatalog::Initialize(); - InitializeProcessManager(); - #ifdef G4VERBOSE - if(verboseLevel > 1) - G4cout << "Construct processes " << G4endl; - #endif +#ifdef G4VERBOSE + if (verboseLevel > 1) G4cout << "Construct processes " << G4endl; +#endif ConstructProcess(); } @@ -366,8 +347,8 @@ inline void G4VUserPhysicsList::SetStoredInAscii() inline void G4VUserPhysicsList::ResetPhysicsTableRetrieved() { - fRetrievePhysicsTable = false; - fIsRestoredCutValues = false; + fRetrievePhysicsTable = false; + fIsRestoredCutValues = false; fIsCheckedForRetrievePhysicsTable = false; } diff --git a/source/run/include/G4VUserPrimaryGeneratorAction.hh b/source/run/include/G4VUserPrimaryGeneratorAction.hh index 3695e6bfbf8..be9b6eea5e8 100644 --- a/source/run/include/G4VUserPrimaryGeneratorAction.hh +++ b/source/run/include/G4VUserPrimaryGeneratorAction.hh @@ -47,9 +47,8 @@ class G4Event; class G4VUserPrimaryGeneratorAction { public: - G4VUserPrimaryGeneratorAction(); - virtual ~G4VUserPrimaryGeneratorAction(); + virtual ~G4VUserPrimaryGeneratorAction() = default; virtual void GeneratePrimaries(G4Event* anEvent) = 0; }; diff --git a/source/run/include/G4WorkerRunManager.hh b/source/run/include/G4WorkerRunManager.hh index 19338740632..de11ab4bb2e 100644 --- a/source/run/include/G4WorkerRunManager.hh +++ b/source/run/include/G4WorkerRunManager.hh @@ -48,66 +48,60 @@ class G4WorkerRunManagerKernel; class G4WorkerRunManager : public G4RunManager { public: - using ProfilerConfig = G4ProfilerConfig; + public: static G4WorkerRunManager* GetWorkerRunManager(); static G4WorkerRunManagerKernel* GetWorkerRunManagerKernel(); G4WorkerRunManager(); - ~G4WorkerRunManager(); + ~G4WorkerRunManager() override; - virtual void InitializeGeometry(); - virtual void RunInitialization(); - virtual void DoEventLoop(G4int n_event, const char* macroFile = 0, - G4int n_select = -1); - virtual void ProcessOneEvent(G4int i_event); - virtual G4Event* GenerateEvent(G4int i_event); + void InitializeGeometry() override; + void RunInitialization() override; + void DoEventLoop(G4int n_event, const char* macroFile = nullptr, G4int n_select = -1) override; + void ProcessOneEvent(G4int i_event) override; + G4Event* GenerateEvent(G4int i_event) override; - virtual void RunTermination(); - virtual void TerminateEventLoop(); + void RunTermination() override; + void TerminateEventLoop() override; + // This function is called by the thread function: it should + // loop until some work is requested. virtual void DoWork(); - // This function is called by the thread function: it should - // loop until some work is requested. + // Sets the worker context. inline void SetWorkerThread(G4WorkerThread* wc) { workerContext = wc; } - // Sets the worker context. - - virtual void SetUserInitialization(G4VUserPhysicsList* userInit); - virtual void SetUserInitialization(G4VUserDetectorConstruction* userInit); - virtual void SetUserInitialization(G4VUserActionInitialization* userInit); - virtual void SetUserInitialization(G4UserWorkerInitialization* userInit); - virtual void SetUserInitialization(G4UserWorkerThreadInitialization* userInit); - virtual void SetUserAction(G4UserRunAction* userAction); - virtual void SetUserAction(G4VUserPrimaryGeneratorAction* userAction); - virtual void SetUserAction(G4UserEventAction* userAction); - virtual void SetUserAction(G4UserStackingAction* userAction); - virtual void SetUserAction(G4UserTrackingAction* userAction); - virtual void SetUserAction(G4UserSteppingAction* userAction); - - virtual void RestoreRndmEachEvent(G4bool flag) { readStatusFromFile=flag; } - protected: + void SetUserInitialization(G4VUserPhysicsList* userInit) override; + void SetUserInitialization(G4VUserDetectorConstruction* userInit) override; + void SetUserInitialization(G4VUserActionInitialization* userInit) override; + void SetUserInitialization(G4UserWorkerInitialization* userInit) override; + void SetUserInitialization(G4UserWorkerThreadInitialization* userInit) override; + void SetUserAction(G4UserRunAction* userAction) override; + void SetUserAction(G4VUserPrimaryGeneratorAction* userAction) override; + void SetUserAction(G4UserEventAction* userAction) override; + void SetUserAction(G4UserStackingAction* userAction) override; + void SetUserAction(G4UserTrackingAction* userAction) override; + void SetUserAction(G4UserSteppingAction* userAction) override; - virtual void ConstructScoringWorlds(); - virtual void StoreRNGStatus(const G4String& filenamePrefix); - virtual void rndmSaveThisRun(); - virtual void rndmSaveThisEvent(); - virtual void MergePartialResults(); - // This method will merge (reduce) the results - // of this run into the global run + void RestoreRndmEachEvent(G4bool flag) override { readStatusFromFile = flag; } - private: + protected: + void ConstructScoringWorlds() override; + void StoreRNGStatus(const G4String& filenamePrefix) override; + void rndmSaveThisRun() override; + void rndmSaveThisEvent() override; - void SetupDefaultRNGEngine(); + // This method will merge (reduce) the results + // of this run into the global run + virtual void MergePartialResults(); protected: - G4WorkerThread* workerContext = nullptr; - #ifdef G4MULTITHREADED +#ifdef G4MULTITHREADED G4bool visIsSetUp = false; - #endif +#endif G4bool eventLoopOnGoing = false; G4bool runIsSeeded = false; @@ -117,9 +111,11 @@ class G4WorkerRunManager : public G4RunManager G4SeedsQueue seedsQueue; G4bool readStatusFromFile = false; - private: + private: + void SetupDefaultRNGEngine(); - std::unique_ptr workerRunProfiler; + private: + std::unique_ptr workerRunProfiler; }; #endif // G4WorkerRunManager_hh diff --git a/source/run/include/G4WorkerRunManagerKernel.hh b/source/run/include/G4WorkerRunManagerKernel.hh index b625c203705..381d0efd60e 100644 --- a/source/run/include/G4WorkerRunManagerKernel.hh +++ b/source/run/include/G4WorkerRunManagerKernel.hh @@ -58,14 +58,12 @@ class G4WorkerRunManagerKernel : public G4RunManagerKernel { public: - G4WorkerRunManagerKernel(); - virtual ~G4WorkerRunManagerKernel(); + ~G4WorkerRunManagerKernel() override; protected: - - void SetupShadowProcess() const; - // Overwrite default behavior. + // Overwrite default behavior. + void SetupShadowProcess() const override; }; #endif diff --git a/source/run/include/G4WorkerTaskRunManager.hh b/source/run/include/G4WorkerTaskRunManager.hh index 8035353a592..7fa7b9af15f 100644 --- a/source/run/include/G4WorkerTaskRunManager.hh +++ b/source/run/include/G4WorkerTaskRunManager.hh @@ -47,47 +47,39 @@ class G4WorkerTaskRunManagerKernel; class G4WorkerTaskRunManager : public G4WorkerRunManager { - public: - using ProfilerConfig = G4ProfilerConfig; + public: + using ProfilerConfig = G4ProfilerConfig; + using G4StrVector = std::vector; - public: - typedef std::vector G4StrVector; + public: + static G4WorkerTaskRunManager* GetWorkerRunManager(); + static G4WorkerTaskRunManagerKernel* GetWorkerRunManagerKernel(); + G4WorkerTaskRunManager() = default; - public: - static G4WorkerTaskRunManager* GetWorkerRunManager(); - static G4WorkerTaskRunManagerKernel* GetWorkerRunManagerKernel(); - G4WorkerTaskRunManager(); + // Modified for worker behavior + void RunInitialization() override; + void DoEventLoop(G4int n_event, const char* macroFile = nullptr, G4int n_select = -1) override; + void ProcessOneEvent(G4int i_event) override; + G4Event* GenerateEvent(G4int i_event) override; + void RunTermination() override; + void TerminateEventLoop() override; + void DoWork() override; + void RestoreRndmEachEvent(G4bool flag) override { readStatusFromFile = flag; } - // Modified for worker behavior - virtual void RunInitialization() override; - virtual void DoEventLoop(G4int n_event, const char* macroFile = nullptr, - G4int n_select = -1) override; - virtual void ProcessOneEvent(G4int i_event) override; - virtual G4Event* GenerateEvent(G4int i_event) override; - virtual void RunTermination() override; - virtual void TerminateEventLoop() override; - virtual void DoWork() override; - virtual void RestoreRndmEachEvent(G4bool flag) override - { - readStatusFromFile = flag; - } + virtual void DoCleanup(); + virtual void ProcessUI(); + G4WorkerThread* GetWorkerThread() const { return workerContext; } + G4StrVector GetCommandStack() const { return processedCommandStack; } - virtual void DoCleanup(); - virtual void ProcessUI(); - G4WorkerThread* GetWorkerThread() const { return workerContext; } - G4StrVector GetCommandStack() const { return processedCommandStack; } + protected: + void StoreRNGStatus(const G4String& filenamePrefix) override; - protected: - virtual void StoreRNGStatus(const G4String& filenamePrefix) override; + private: + void SetupDefaultRNGEngine(); - private: - void SetupDefaultRNGEngine(); - - private: - G4StrVector processedCommandStack; - - private: - std::unique_ptr workerRunProfiler; + private: + G4StrVector processedCommandStack; + std::unique_ptr workerRunProfiler; }; #endif // G4WorkerTaskRunManager_h diff --git a/source/run/include/G4WorkerTaskRunManagerKernel.hh b/source/run/include/G4WorkerTaskRunManagerKernel.hh index 5f4adad2a55..d5b6a94fc19 100644 --- a/source/run/include/G4WorkerTaskRunManagerKernel.hh +++ b/source/run/include/G4WorkerTaskRunManagerKernel.hh @@ -58,13 +58,13 @@ class G4WorkerTaskRunManagerKernel : public G4RunManagerKernel { - public: - G4WorkerTaskRunManagerKernel(); - virtual ~G4WorkerTaskRunManagerKernel(); + public: + G4WorkerTaskRunManagerKernel(); + ~G4WorkerTaskRunManagerKernel() override; - protected: - // Overwrite default behavior - void SetupShadowProcess() const; + protected: + // Overwrite default behavior + void SetupShadowProcess() const override; }; #endif // G4WorkerTaskRunManagerKernel_h diff --git a/source/run/include/G4WorkerThread.hh b/source/run/include/G4WorkerThread.hh index 40a33b42af7..65f068dddd7 100644 --- a/source/run/include/G4WorkerThread.hh +++ b/source/run/include/G4WorkerThread.hh @@ -36,30 +36,28 @@ #define G4WorkerThread_hh 1 #include "G4String.hh" -#include "G4Types.hh" - #include "G4Threading.hh" +#include "G4Types.hh" class G4WorkerThread { public: - void SetThreadId(G4int threadId); G4int GetThreadId() const; void SetNumberThreads(G4int numnberThreads); G4int GetNumberThreads() const; + // Build geometry for workers static void BuildGeometryAndPhysicsVector(); - // Build geometry for workers + static void DestroyGeometryAndPhysicsVector(); static void UpdateGeometryAndPhysicsVectorFromMaster(); + // Setting Pin Affinity void SetPinAffinity(G4int aff) const; - // Setting Pin Affinity private: - G4int threadId = 0; G4int numThreads = 0; }; diff --git a/source/run/include/G4AdjointSimMessenger.hh b/source/run/include/private/G4AdjointSimMessenger.hh similarity index 98% rename from source/run/include/G4AdjointSimMessenger.hh rename to source/run/include/private/G4AdjointSimMessenger.hh index adfc136b90e..84194106c07 100644 --- a/source/run/include/G4AdjointSimMessenger.hh +++ b/source/run/include/private/G4AdjointSimMessenger.hh @@ -123,14 +123,12 @@ class G4UIcmdWithADouble; class G4AdjointSimMessenger : public G4UImessenger { public: - G4AdjointSimMessenger(G4AdjointSimManager*); - ~G4AdjointSimMessenger(); + ~G4AdjointSimMessenger() override; - void SetNewValue(G4UIcommand*, G4String); + void SetNewValue(G4UIcommand*, G4String) override; private: - G4AdjointSimManager* theAdjointRunManager; G4UIdirectory* AdjointSimDir = nullptr; diff --git a/source/run/include/private/G4CopyRandomState.hh b/source/run/include/private/G4CopyRandomState.hh new file mode 100644 index 00000000000..11d41392b7b --- /dev/null +++ b/source/run/include/private/G4CopyRandomState.hh @@ -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. * +// ******************************************************************** +// +/// @file G4CopyRandomState.hh +/// @brief Helper function for copying random state files in G4run +/// @author Ben Morgan +/// @date 2023-06-05 + +#ifndef G4CopyRandomState_hh +#define G4CopyRandomState_hh + +#include "G4Exception.hh" +#include "G4Filesystem.hh" +#include "G4String.hh" +#include "G4Types.hh" + +/// Return true if file `source` is successfully copied to `dest` +/// Convert any thrown exception to JustWarning G4Exception +inline G4bool G4CopyRandomState(const G4fs::path& source, const G4fs::path& dest, + const G4String& callsite) +{ + try { + G4fs::copy_file(source, dest); + } + catch (G4fs::filesystem_error const& ex) { + G4ExceptionDescription ed; + ed << "Failed to copy " << ex.path1() << " to " << ex.path2() << " , error:\n" + << " code : " << ex.code().value() << '\n' + << " message: " << ex.code().message() << '\n'; + G4Exception(callsite, "UnableToCopyRndmStateFile", JustWarning, ed); + return false; + } + return true; +} + +#endif // G4CopyRandomState_hh diff --git a/source/run/include/G4MatScanMessenger.hh b/source/run/include/private/G4MatScanMessenger.hh similarity index 94% rename from source/run/include/G4MatScanMessenger.hh rename to source/run/include/private/G4MatScanMessenger.hh index 23a3834aadf..c05f3098a17 100644 --- a/source/run/include/G4MatScanMessenger.hh +++ b/source/run/include/private/G4MatScanMessenger.hh @@ -48,15 +48,13 @@ class G4MaterialScanner; class G4MatScanMessenger : public G4UImessenger { public: - G4MatScanMessenger(G4MaterialScanner* p1); - virtual ~G4MatScanMessenger(); + ~G4MatScanMessenger() override; - virtual G4String GetCurrentValue(G4UIcommand* command); - virtual void SetNewValue(G4UIcommand* command, G4String newValue); + G4String GetCurrentValue(G4UIcommand* command) override; + void SetNewValue(G4UIcommand* command, G4String newValue) override; private: - G4MaterialScanner* theScanner = nullptr; G4UIdirectory* msDirectory = nullptr; diff --git a/source/run/include/G4RunMessenger.hh b/source/run/include/private/G4RunMessenger.hh similarity index 95% rename from source/run/include/G4RunMessenger.hh rename to source/run/include/private/G4RunMessenger.hh index 947603dd913..b54cd4959ae 100644 --- a/source/run/include/G4RunMessenger.hh +++ b/source/run/include/private/G4RunMessenger.hh @@ -50,8 +50,8 @@ #ifndef G4RunMessenger_hh #define G4RunMessenger_hh 1 -#include "globals.hh" #include "G4UImessenger.hh" +#include "globals.hh" class G4RunManager; class G4UIdirectory; @@ -60,20 +60,17 @@ class G4UIcmdWithAString; class G4UIcmdWithAnInteger; class G4UIcmdWithABool; class G4UIcommand; -class G4MaterialScanner; class G4RunMessenger : public G4UImessenger { public: - G4RunMessenger(G4RunManager* runMgr); - ~G4RunMessenger(); + ~G4RunMessenger() override; - void SetNewValue(G4UIcommand* command, G4String newValues); - G4String GetCurrentValue(G4UIcommand* command); + void SetNewValue(G4UIcommand* command, G4String newValues) override; + G4String GetCurrentValue(G4UIcommand* command) override; private: - G4RunManager* runManager = nullptr; G4String macroFileName = "***NULL***"; // internal use only!!! @@ -110,8 +107,6 @@ class G4RunMessenger : public G4UImessenger G4UIcmdWithABool* restoreRandCmdMT = nullptr; G4UIcmdWithoutParameter* constScoreCmd = nullptr; - - G4MaterialScanner* materialScanner = nullptr; }; #endif diff --git a/source/run/include/G4UserPhysicsListMessenger.hh b/source/run/include/private/G4UserPhysicsListMessenger.hh similarity index 93% rename from source/run/include/G4UserPhysicsListMessenger.hh rename to source/run/include/private/G4UserPhysicsListMessenger.hh index 93edc1db0ba..78703adff65 100644 --- a/source/run/include/G4UserPhysicsListMessenger.hh +++ b/source/run/include/private/G4UserPhysicsListMessenger.hh @@ -29,9 +29,9 @@ // // This is a messenger class to allow exchange of information // between ParticleUserList and UI. -// +// // Directory and list of commands: -// +// // /run/particle/ Particle control commands. // Commands : // SetCuts * Set default cut value @@ -48,8 +48,8 @@ #ifndef G4UserPhysicsListMessenger_hh #define G4UserPhysicsListMessenger_hh 1 -#include "globals.hh" #include "G4UImessenger.hh" +#include "globals.hh" class G4VUserPhysicsList; class G4VUserPhysicsList; @@ -63,21 +63,18 @@ class G4UIcommand; class G4UserPhysicsListMessenger : public G4UImessenger { public: - G4UserPhysicsListMessenger(G4VUserPhysicsList* pParticleList); - virtual ~G4UserPhysicsListMessenger(); + ~G4UserPhysicsListMessenger() override; - virtual void SetNewValue(G4UIcommand* command, G4String newValues); - virtual G4String GetCurrentValue(G4UIcommand* command); + void SetNewValue(G4UIcommand* command, G4String newValues) override; + G4String GetCurrentValue(G4UIcommand* command) override; protected: - G4VUserPhysicsList* thePhysicsList = nullptr; private: - - G4UserPhysicsListMessenger() {} - // Hidden default constructor. + // Hidden default constructor. + G4UserPhysicsListMessenger() = default; G4UIdirectory* theDirectory = nullptr; G4UIcmdWithADoubleAndUnit* setCutCmd = nullptr; diff --git a/source/run/sources.cmake b/source/run/sources.cmake index 9a6626c19eb..063815ec3bb 100644 --- a/source/run/sources.cmake +++ b/source/run/sources.cmake @@ -5,10 +5,8 @@ geant4_add_module(G4run PUBLIC_HEADERS G4AdjointPrimaryGeneratorAction.hh G4AdjointSimManager.hh - G4AdjointSimMessenger.hh G4ExceptionHandler.hh G4MaterialScanner.hh - G4MatScanMessenger.hh G4MSSteppingAction.hh G4MTRunManager.hh G4MTRunManagerKernel.hh @@ -22,10 +20,8 @@ geant4_add_module(G4run G4RunManagerFactory.hh G4RunManager.hh G4RunManagerKernel.hh - G4RunMessenger.hh G4TaskRunManager.hh G4TaskRunManagerKernel.hh - G4UserPhysicsListMessenger.hh G4UserRunAction.hh G4UserTaskInitialization.hh G4UserTaskThreadInitialization.hh @@ -46,6 +42,12 @@ geant4_add_module(G4run G4WorkerTaskRunManagerKernel.hh G4WorkerThread.hh rundefs.hh + PRIVATE_HEADERS + G4AdjointSimMessenger.hh + G4CopyRandomState.hh + G4MatScanMessenger.hh + G4RunMessenger.hh + G4UserPhysicsListMessenger.hh SOURCES G4AdjointPrimaryGeneratorAction.cc G4AdjointSimManager.cc @@ -58,7 +60,6 @@ geant4_add_module(G4run G4MTRunManagerKernel.cc G4MultiRunAction.cc G4PhysicsListHelper.cc - G4PhysicsListOrderingParamater.cc G4PhysicsListWorkspace.cc G4RNGHelper.cc G4Run.cc @@ -70,9 +71,7 @@ geant4_add_module(G4run G4TaskRunManagerKernel.cc G4UserPhysicsListMessenger.cc G4UserRunAction.cc - G4UserTaskInitialization.cc G4UserTaskThreadInitialization.cc - G4UserWorkerInitialization.cc G4UserWorkerThreadInitialization.cc G4VModularPhysicsList.cc G4VPersistencyManager.cc @@ -96,7 +95,6 @@ geant4_module_link_libraries(G4run G4event G4globman G4heprandom - G4intercoms G4partman G4tracking PRIVATE @@ -110,6 +108,7 @@ geant4_module_link_libraries(G4run G4hadronic_mgt G4hepnumerics G4hits + G4intercoms G4ions G4magneticfield G4materials diff --git a/source/run/src/G4AdjointPrimaryGeneratorAction.cc b/source/run/src/G4AdjointPrimaryGeneratorAction.cc index 34f3ce7a80a..e6659451477 100644 --- a/source/run/src/G4AdjointPrimaryGeneratorAction.cc +++ b/source/run/src/G4AdjointPrimaryGeneratorAction.cc @@ -22,7 +22,7 @@ // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -// +// // G4AdjointPrimaryGeneratorAction implementation // // -------------------------------------------------------------------- @@ -49,10 +49,10 @@ G4AdjointPrimaryGeneratorAction::G4AdjointPrimaryGeneratorAction() { theAdjointPrimaryGenerator = new G4AdjointPrimaryGenerator(); - PrimariesConsideredInAdjointSim[G4String("e-")] = false; - PrimariesConsideredInAdjointSim[G4String("gamma")] = false; + PrimariesConsideredInAdjointSim[G4String("e-")] = false; + PrimariesConsideredInAdjointSim[G4String("gamma")] = false; PrimariesConsideredInAdjointSim[G4String("proton")] = false; - PrimariesConsideredInAdjointSim[G4String("ion")] = false; + PrimariesConsideredInAdjointSim[G4String("ion")] = false; ListOfPrimaryFwdParticles.clear(); ListOfPrimaryAdjParticles.clear(); @@ -69,37 +69,33 @@ G4AdjointPrimaryGeneratorAction::~G4AdjointPrimaryGeneratorAction() // void G4AdjointPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) { - G4int evt_id = anEvent->GetEventID(); - std::size_t n = ListOfPrimaryAdjParticles.size(); + G4int evt_id = anEvent->GetEventID(); + std::size_t n = ListOfPrimaryAdjParticles.size(); index_particle = std::size_t(evt_id) - n * (std::size_t(evt_id) / n); G4double E1 = Emin; G4double E2 = Emax; - if(ListOfPrimaryAdjParticles[index_particle] == nullptr) + if (ListOfPrimaryAdjParticles[index_particle] == nullptr) UpdateListOfPrimaryParticles(); // ion has not been created yet - if(ListOfPrimaryAdjParticles[index_particle]->GetParticleName() == - "adj_proton") - { + if (ListOfPrimaryAdjParticles[index_particle]->GetParticleName() == "adj_proton") { E1 = EminIon; E2 = EmaxIon; } - if(ListOfPrimaryAdjParticles[index_particle]->GetParticleType() == - "adjoint_nucleus") - { + if (ListOfPrimaryAdjParticles[index_particle]->GetParticleType() == "adjoint_nucleus") { G4int A = ListOfPrimaryAdjParticles[index_particle]->GetAtomicMass(); - E1 = EminIon * A; - E2 = EmaxIon * A; + E1 = EminIon * A; + E2 = EmaxIon * A; } // Generate first the forwrad primaries theAdjointPrimaryGenerator->GenerateFwdPrimaryVertex( anEvent, ListOfPrimaryFwdParticles[index_particle], E1, E2); G4PrimaryVertex* fwdPrimVertex = anEvent->GetPrimaryVertex(); - p = fwdPrimVertex->GetPrimary()->GetMomentum(); - pos = fwdPrimVertex->GetPosition(); + p = fwdPrimVertex->GetPrimary()->GetMomentum(); + pos = fwdPrimVertex->GetPosition(); G4double pmag = p.mag(); - G4double m0 = ListOfPrimaryFwdParticles[index_particle]->GetPDGMass(); + G4double m0 = ListOfPrimaryFwdParticles[index_particle]->GetPDGMass(); G4double ekin = std::sqrt(m0 * m0 + pmag * pmag) - m0; G4double weight_correction = 1.; @@ -108,18 +104,16 @@ void G4AdjointPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) weight_correction = 1.; - if(ListOfPrimaryFwdParticles[index_particle] == G4Gamma::Gamma() && - nb_fwd_gammas_per_event > 1) + if (ListOfPrimaryFwdParticles[index_particle] == G4Gamma::Gamma() && nb_fwd_gammas_per_event > 1) { G4double weight = (1. / nb_fwd_gammas_per_event); fwdPrimVertex->SetWeight(weight); - for(G4int i = 0; i < nb_fwd_gammas_per_event - 1; ++i) - { - G4PrimaryVertex* newFwdPrimVertex = new G4PrimaryVertex(); + for (G4int i = 0; i < nb_fwd_gammas_per_event - 1; ++i) { + auto newFwdPrimVertex = new G4PrimaryVertex(); newFwdPrimVertex->SetPosition(pos.x(), pos.y(), pos.z()); newFwdPrimVertex->SetT0(0.); - G4PrimaryParticle* aPrimParticle = new G4PrimaryParticle( - ListOfPrimaryFwdParticles[index_particle], p.x(), p.y(), p.z()); + auto aPrimParticle = + new G4PrimaryParticle(ListOfPrimaryFwdParticles[index_particle], p.x(), p.y(), p.z()); newFwdPrimVertex->SetPrimary(aPrimParticle); newFwdPrimVertex->SetWeight(weight); anEvent->AddPrimaryVertex(newFwdPrimVertex); @@ -127,54 +121,44 @@ void G4AdjointPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) } // Now generate the adjoint primaries - G4PrimaryVertex* adjPrimVertex = new G4PrimaryVertex(); + auto adjPrimVertex = new G4PrimaryVertex(); adjPrimVertex->SetPosition(pos.x(), pos.y(), pos.z()); adjPrimVertex->SetT0(0.); - G4PrimaryParticle* aPrimParticle = new G4PrimaryParticle( - ListOfPrimaryAdjParticles[index_particle], -p.x(), -p.y(), -p.z()); + auto aPrimParticle = + new G4PrimaryParticle(ListOfPrimaryAdjParticles[index_particle], -p.x(), -p.y(), -p.z()); adjPrimVertex->SetPrimary(aPrimParticle); anEvent->AddPrimaryVertex(adjPrimVertex); // The factor pi is to normalise the weight to the directional flux - G4double adjoint_source_area = - G4AdjointSimManager::GetInstance()->GetAdjointSourceArea(); - G4double adjoint_weight = weight_correction * - ComputeEnergyDistWeight(ekin, E1, E2) * - adjoint_source_area * pi; - // if (ListOfPrimaryFwdParticles[index_particle] ==G4Gamma::Gamma()) - // adjoint_weight = adjoint_weight/3.; - if(ListOfPrimaryAdjParticles[index_particle]->GetParticleName() == - "adj_gamma") - { + G4double adjoint_source_area = G4AdjointSimManager::GetInstance()->GetAdjointSourceArea(); + G4double adjoint_weight = + weight_correction * ComputeEnergyDistWeight(ekin, E1, E2) * adjoint_source_area * pi; + if (ListOfPrimaryAdjParticles[index_particle]->GetParticleName() == "adj_gamma") { // The weight will be corrected at the end of the track if splitted tracks // are used adjoint_weight = adjoint_weight / nb_adj_primary_gammas_per_event; - for(G4int i = 0; i < nb_adj_primary_gammas_per_event - 1; ++i) - { - G4PrimaryVertex* newAdjPrimVertex = new G4PrimaryVertex(); + for (G4int i = 0; i < nb_adj_primary_gammas_per_event - 1; ++i) { + auto newAdjPrimVertex = new G4PrimaryVertex(); newAdjPrimVertex->SetPosition(pos.x(), pos.y(), pos.z()); newAdjPrimVertex->SetT0(0.); - aPrimParticle = new G4PrimaryParticle( - ListOfPrimaryAdjParticles[index_particle], -p.x(), -p.y(), -p.z()); + aPrimParticle = + new G4PrimaryParticle(ListOfPrimaryAdjParticles[index_particle], -p.x(), -p.y(), -p.z()); newAdjPrimVertex->SetPrimary(aPrimParticle); newAdjPrimVertex->SetWeight(adjoint_weight); anEvent->AddPrimaryVertex(newAdjPrimVertex); } } - else if(ListOfPrimaryAdjParticles[index_particle]->GetParticleName() == - "adj_electron") - { + else if (ListOfPrimaryAdjParticles[index_particle]->GetParticleName() == "adj_electron") { // The weight will be corrected at the end of the track if splitted tracks // are used adjoint_weight = adjoint_weight / nb_adj_primary_electrons_per_event; - for(G4int i = 0; i < nb_adj_primary_electrons_per_event - 1; ++i) - { - G4PrimaryVertex* newAdjPrimVertex = new G4PrimaryVertex(); + for (G4int i = 0; i < nb_adj_primary_electrons_per_event - 1; ++i) { + auto newAdjPrimVertex = new G4PrimaryVertex(); newAdjPrimVertex->SetPosition(pos.x(), pos.y(), pos.z()); newAdjPrimVertex->SetT0(0.); - aPrimParticle = new G4PrimaryParticle( - ListOfPrimaryAdjParticles[index_particle], -p.x(), -p.y(), -p.z()); + aPrimParticle = + new G4PrimaryParticle(ListOfPrimaryAdjParticles[index_particle], -p.x(), -p.y(), -p.z()); newAdjPrimVertex->SetPrimary(aPrimParticle); newAdjPrimVertex->SetWeight(adjoint_weight); anEvent->AddPrimaryVertex(newAdjPrimVertex); @@ -185,16 +169,14 @@ void G4AdjointPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) // Call some methods of G4AdjointSimManager G4AdjointSimManager::GetInstance()->SetAdjointTrackingMode(true); G4AdjointSimManager::GetInstance()->ClearEndOfAdjointTrackInfoVectors(); - G4AdjointSimManager::GetInstance() - ->ResetDidOneAdjPartReachExtSourceDuringEvent(); - + G4AdjointSimManager::GetInstance()->ResetDidOneAdjPartReachExtSourceDuringEvent(); } // -------------------------------------------------------------------- // void G4AdjointPrimaryGeneratorAction::SetEmin(G4double val) { - Emin = val; + Emin = val; EminIon = val; } @@ -202,7 +184,7 @@ void G4AdjointPrimaryGeneratorAction::SetEmin(G4double val) // void G4AdjointPrimaryGeneratorAction::SetEmax(G4double val) { - Emax = val; + Emax = val; EmaxIon = val; } @@ -222,8 +204,7 @@ void G4AdjointPrimaryGeneratorAction::SetEmaxIon(G4double val) // -------------------------------------------------------------------- // -G4double G4AdjointPrimaryGeneratorAction::ComputeEnergyDistWeight(G4double E, - G4double E1, +G4double G4AdjointPrimaryGeneratorAction::ComputeEnergyDistWeight(G4double E, G4double E1, G4double E2) { // We generate N numbers of primaries with a 1/E energy law distribution. @@ -239,39 +220,34 @@ G4double G4AdjointPrimaryGeneratorAction::ComputeEnergyDistWeight(G4double E, // To get that we need therefore to apply a weight to the primary // W=1/f(E)=E*std::log(E2/E1)/N // - return std::log(E2 / E1) * E / - G4AdjointSimManager::GetInstance()->GetNbEvtOfLastRun(); + return std::log(E2 / E1) * E / G4AdjointSimManager::GetInstance()->GetNbEvtOfLastRun(); } // -------------------------------------------------------------------- // -void G4AdjointPrimaryGeneratorAction::SetSphericalAdjointPrimarySource( - G4double radius, G4ThreeVector center_pos) +void G4AdjointPrimaryGeneratorAction::SetSphericalAdjointPrimarySource(G4double radius, + G4ThreeVector center_pos) { radius_spherical_source = radius; center_spherical_source = center_pos; - type_of_adjoint_source = "Spherical"; - theAdjointPrimaryGenerator->SetSphericalAdjointPrimarySource(radius, - center_pos); + type_of_adjoint_source = "Spherical"; + theAdjointPrimaryGenerator->SetSphericalAdjointPrimarySource(radius, center_pos); } // -------------------------------------------------------------------- // -void G4AdjointPrimaryGeneratorAction:: - SetAdjointPrimarySourceOnAnExtSurfaceOfAVolume(const G4String& volume_name) +void G4AdjointPrimaryGeneratorAction::SetAdjointPrimarySourceOnAnExtSurfaceOfAVolume( + const G4String& volume_name) { type_of_adjoint_source = "ExternalSurfaceOfAVolume"; - theAdjointPrimaryGenerator->SetAdjointPrimarySourceOnAnExtSurfaceOfAVolume( - volume_name); + theAdjointPrimaryGenerator->SetAdjointPrimarySourceOnAnExtSurfaceOfAVolume(volume_name); } // -------------------------------------------------------------------- // -void G4AdjointPrimaryGeneratorAction::ConsiderParticleAsPrimary( - const G4String& particle_name) +void G4AdjointPrimaryGeneratorAction::ConsiderParticleAsPrimary(const G4String& particle_name) { - if(PrimariesConsideredInAdjointSim.find(particle_name) != - PrimariesConsideredInAdjointSim.end()) + if (PrimariesConsideredInAdjointSim.find(particle_name) != PrimariesConsideredInAdjointSim.end()) { PrimariesConsideredInAdjointSim[particle_name] = true; } @@ -280,11 +256,9 @@ void G4AdjointPrimaryGeneratorAction::ConsiderParticleAsPrimary( // -------------------------------------------------------------------- // -void G4AdjointPrimaryGeneratorAction::NeglectParticleAsPrimary( - const G4String& particle_name) +void G4AdjointPrimaryGeneratorAction::NeglectParticleAsPrimary(const G4String& particle_name) { - if(PrimariesConsideredInAdjointSim.find(particle_name) != - PrimariesConsideredInAdjointSim.end()) + if (PrimariesConsideredInAdjointSim.find(particle_name) != PrimariesConsideredInAdjointSim.end()) { PrimariesConsideredInAdjointSim[particle_name] = false; } @@ -298,31 +272,22 @@ void G4AdjointPrimaryGeneratorAction::UpdateListOfPrimaryParticles() G4ParticleTable* theParticleTable = G4ParticleTable::GetParticleTable(); ListOfPrimaryFwdParticles.clear(); ListOfPrimaryAdjParticles.clear(); - for(auto iter = PrimariesConsideredInAdjointSim.cbegin(); - iter != PrimariesConsideredInAdjointSim.cend(); ++iter) - { - if(iter->second) - { - G4String fwd_particle_name = iter->first; - if(fwd_particle_name != "ion") - { + for (const auto& iter : PrimariesConsideredInAdjointSim) { + if (iter.second) { + G4String fwd_particle_name = iter.first; + if (fwd_particle_name != "ion") { G4String adj_particle_name = G4String("adj_") + fwd_particle_name; - ListOfPrimaryFwdParticles.push_back( - theParticleTable->FindParticle(fwd_particle_name)); - ListOfPrimaryAdjParticles.push_back( - theParticleTable->FindParticle(adj_particle_name)); + ListOfPrimaryFwdParticles.push_back(theParticleTable->FindParticle(fwd_particle_name)); + ListOfPrimaryAdjParticles.push_back(theParticleTable->FindParticle(adj_particle_name)); } - else - { - if(fwd_ion) - { - ion_name = fwd_ion->GetParticleName(); + else { + if (fwd_ion != nullptr) { + ion_name = fwd_ion->GetParticleName(); G4String adj_ion_name = G4String("adj_") + ion_name; ListOfPrimaryFwdParticles.push_back(fwd_ion); ListOfPrimaryAdjParticles.push_back(adj_ion); } - else - { + else { ListOfPrimaryFwdParticles.push_back(nullptr); ListOfPrimaryAdjParticles.push_back(nullptr); } @@ -333,8 +298,8 @@ void G4AdjointPrimaryGeneratorAction::UpdateListOfPrimaryParticles() // -------------------------------------------------------------------- // -void G4AdjointPrimaryGeneratorAction::SetPrimaryIon( - G4ParticleDefinition* adjointIon, G4ParticleDefinition* fwdIon) +void G4AdjointPrimaryGeneratorAction::SetPrimaryIon(G4ParticleDefinition* adjointIon, + G4ParticleDefinition* fwdIon) { fwd_ion = fwdIon; adj_ion = adjointIon; diff --git a/source/run/src/G4AdjointSimManager.cc b/source/run/src/G4AdjointSimManager.cc index d12d8b308bf..155ca84e18b 100644 --- a/source/run/src/G4AdjointSimManager.cc +++ b/source/run/src/G4AdjointSimManager.cc @@ -34,9 +34,17 @@ // -------------------------------------------------------------------- #include "G4AdjointSimManager.hh" + +#include "G4AdjointCrossSurfChecker.hh" +#include "G4AdjointPrimaryGeneratorAction.hh" +#include "G4AdjointSimMessenger.hh" +#include "G4AdjointStackingAction.hh" +#include "G4AdjointSteppingAction.hh" +#include "G4AdjointTrackingAction.hh" +#include "G4ParticleTable.hh" +#include "G4PhysicsLogVector.hh" #include "G4Run.hh" #include "G4RunManager.hh" - #include "G4UserEventAction.hh" #include "G4UserRunAction.hh" #include "G4UserStackingAction.hh" @@ -44,18 +52,6 @@ #include "G4UserTrackingAction.hh" #include "G4VUserPrimaryGeneratorAction.hh" -#include "G4AdjointPrimaryGeneratorAction.hh" -#include "G4AdjointStackingAction.hh" -#include "G4AdjointSteppingAction.hh" -#include "G4AdjointTrackingAction.hh" - -#include "G4AdjointSimMessenger.hh" - -#include "G4AdjointCrossSurfChecker.hh" - -#include "G4ParticleTable.hh" -#include "G4PhysicsLogVector.hh" - // -------------------------------------------------------------------- // G4ThreadLocal G4AdjointSimManager* G4AdjointSimManager::instance = nullptr; @@ -64,27 +60,14 @@ G4ThreadLocal G4AdjointSimManager* G4AdjointSimManager::instance = nullptr; // G4AdjointSimManager::G4AdjointSimManager() { - // Create adjoint actions; - //---------------------- theAdjointPrimaryGeneratorAction = new G4AdjointPrimaryGeneratorAction(); - theAdjointSteppingAction = new G4AdjointSteppingAction(); - theAdjointTrackingAction = - new G4AdjointTrackingAction(theAdjointSteppingAction); - theAdjointStackingAction = - new G4AdjointStackingAction(theAdjointTrackingAction); + theAdjointSteppingAction = new G4AdjointSteppingAction(); + theAdjointTrackingAction = new G4AdjointTrackingAction(theAdjointSteppingAction); + theAdjointStackingAction = new G4AdjointStackingAction(theAdjointTrackingAction); theAdjointTrackingAction->SetListOfPrimaryFwdParticles( theAdjointPrimaryGeneratorAction->GetListOfPrimaryFwdParticles()); - // Create messenger - //---------------- theMessenger = new G4AdjointSimMessenger(this); - - // Define user action and set this class instance as RunAction - //---------------- - // DefineUserActions(); - // G4RunManager* theRunManager = G4RunManager::GetRunManager(); - - // theRunManager->G4RunManager::SetUserAction(this); } // -------------------------------------------------------------------- @@ -104,8 +87,7 @@ G4AdjointSimManager::~G4AdjointSimManager() // G4AdjointSimManager* G4AdjointSimManager::GetInstance() { - if(instance == nullptr) - instance = new G4AdjointSimManager; + if (instance == nullptr) instance = new G4AdjointSimManager; return instance; } @@ -113,23 +95,15 @@ G4AdjointSimManager* G4AdjointSimManager::GetInstance() // void G4AdjointSimManager::RunAdjointSimulation(G4int nb_evt) { - if(G4RunManager::GetRunManager()->GetRunManagerType() != - G4RunManager::sequentialRM) + if (G4RunManager::GetRunManager()->GetRunManagerType() != G4RunManager::sequentialRM) return; // only for sequential mode - if(welcome_message) - { - G4cout << "****************************************************************" - << std::endl; - G4cout << "*** Geant4 Reverse/Adjoint Monte Carlo mode ***" - << std::endl; - G4cout << "*** Author: L.Desorgher ***" - << std::endl; - G4cout << "*** Company: SpaceIT GmbH, Bern, Switzerland ***" - << std::endl; - G4cout << "*** Sponsored by: ESA/ESTEC contract contract 21435/08/NL/AT ***" - << std::endl; - G4cout << "****************************************************************" - << std::endl; + if (welcome_message) { + G4cout << "****************************************************************" << std::endl; + G4cout << "*** Geant4 Reverse/Adjoint Monte Carlo mode ***" << std::endl; + G4cout << "*** Author: L.Desorgher ***" << std::endl; + G4cout << "*** Company: SpaceIT GmbH, Bern, Switzerland ***" << std::endl; + G4cout << "*** Sponsored by: ESA/ESTEC contract contract 21435/08/NL/AT ***" << std::endl; + G4cout << "****************************************************************" << std::endl; welcome_message = false; } @@ -140,35 +114,12 @@ void G4AdjointSimManager::RunAdjointSimulation(G4int nb_evt) // Make the run //------------ nb_evt_of_last_run = nb_evt; - G4RunManager::GetRunManager() - ->BeamOn( G4int(nb_evt*theAdjointPrimaryGeneratorAction - ->GetNbOfAdjointPrimaryTypes()) ); + G4RunManager::GetRunManager()->BeamOn( + G4int(nb_evt * theAdjointPrimaryGeneratorAction->GetNbOfAdjointPrimaryTypes())); // Back to Fwd Simulation Mode //-------------------------------- BackToFwdSimulationMode(); - - /* - //Register the weight vector - //-------------------------- - std::ofstream FileOutputElectronWeight("ElectronWeight.txt", std::ios::out); - FileOutputElectronWeight<Store(FileOutputElectronWeight, - true); FileOutputElectronWeight.close(); - - std::ofstream FileOutputProtonWeight("ProtonWeight.txt", std::ios::out); - FileOutputProtonWeight<Store(FileOutputProtonWeight, true); - FileOutputProtonWeight.close(); - - std::ofstream FileOutputGammaWeight("GammaWeight.txt", std::ios::out); - FileOutputGammaWeight<Store(FileOutputGammaWeight, true); - FileOutputGammaWeight.close(); - */ } // -------------------------------------------------------------------- @@ -177,8 +128,7 @@ void G4AdjointSimManager::SetRestOfAdjointActions() { G4RunManager* theRunManager = G4RunManager::GetRunManager(); - if(!user_action_already_defined) - DefineUserActions(); + if (!user_action_already_defined) DefineUserActions(); // Replace the user action by the adjoint actions //------------------------------------------------- @@ -199,7 +149,7 @@ void G4AdjointSimManager::SwitchToAdjointSimulationMode() // Update the list of primaries //----------------------------- theAdjointPrimaryGeneratorAction->UpdateListOfPrimaryParticles(); - adjoint_sim_mode = true; + adjoint_sim_mode = true; ID_of_last_particle_that_reach_the_ext_source = 0; } @@ -219,25 +169,24 @@ void G4AdjointSimManager::SetAdjointActions() { G4RunManager* theRunManager = G4RunManager::GetRunManager(); - if(!user_action_already_defined) - DefineUserActions(); + if (!user_action_already_defined) DefineUserActions(); // Replace the user action by the adjoint actions //------------------------------------------------- theRunManager->G4RunManager::SetUserAction(this); theRunManager->G4RunManager::SetUserAction(theAdjointPrimaryGeneratorAction); theRunManager->G4RunManager::SetUserAction(theAdjointStackingAction); - if(use_user_StackingAction) + if (use_user_StackingAction) theAdjointStackingAction->SetUserFwdStackingAction(fUserStackingAction); else - theAdjointStackingAction->SetUserFwdStackingAction(0); + theAdjointStackingAction->SetUserFwdStackingAction(nullptr); theRunManager->G4RunManager::SetUserAction(theAdjointEventAction); theRunManager->G4RunManager::SetUserAction(theAdjointSteppingAction); theRunManager->G4RunManager::SetUserAction(theAdjointTrackingAction); - if(use_user_TrackingAction) + if (use_user_TrackingAction) theAdjointTrackingAction->SetUserForwardTrackingAction(fUserTrackingAction); else - theAdjointTrackingAction->SetUserForwardTrackingAction(0); + theAdjointTrackingAction->SetUserForwardTrackingAction(nullptr); } // -------------------------------------------------------------------- @@ -246,8 +195,7 @@ void G4AdjointSimManager::SetAdjointPrimaryRunAndStackingActions() { G4RunManager* theRunManager = G4RunManager::GetRunManager(); - if(!user_action_already_defined) - DefineUserActions(); + if (!user_action_already_defined) DefineUserActions(); // Replace the user action by the adjoint actions //------------------------------------------------- @@ -255,7 +203,7 @@ void G4AdjointSimManager::SetAdjointPrimaryRunAndStackingActions() theRunManager->G4RunManager::SetUserAction(theAdjointRunAction); theRunManager->G4RunManager::SetUserAction(theAdjointPrimaryGeneratorAction); theRunManager->G4RunManager::SetUserAction(theAdjointStackingAction); - if(use_user_StackingAction) + if (use_user_StackingAction) theAdjointStackingAction->SetUserFwdStackingAction(fUserStackingAction); else theAdjointStackingAction->SetUserFwdStackingAction(nullptr); @@ -308,19 +256,14 @@ void G4AdjointSimManager::ResetUserPrimaryRunAndStackingActions() void G4AdjointSimManager::DefineUserActions() { G4RunManager* theRunManager = G4RunManager::GetRunManager(); - fUserTrackingAction = - const_cast(theRunManager->GetUserTrackingAction()); - fUserEventAction = - const_cast(theRunManager->GetUserEventAction()); - fUserSteppingAction = - const_cast(theRunManager->GetUserSteppingAction()); + fUserTrackingAction = const_cast(theRunManager->GetUserTrackingAction()); + fUserEventAction = const_cast(theRunManager->GetUserEventAction()); + fUserSteppingAction = const_cast(theRunManager->GetUserSteppingAction()); theAdjointSteppingAction->SetUserForwardSteppingAction(fUserSteppingAction); - fUserPrimaryGeneratorAction = const_cast( - theRunManager->GetUserPrimaryGeneratorAction()); - fUserRunAction = - const_cast(theRunManager->GetUserRunAction()); - fUserStackingAction = - const_cast(theRunManager->GetUserStackingAction()); + fUserPrimaryGeneratorAction = + const_cast(theRunManager->GetUserPrimaryGeneratorAction()); + fUserRunAction = const_cast(theRunManager->GetUserRunAction()); + fUserStackingAction = const_cast(theRunManager->GetUserStackingAction()); user_action_already_defined = true; } @@ -333,23 +276,19 @@ G4bool G4AdjointSimManager::GetAdjointTrackingMode() // -------------------------------------------------------------------- // -void G4AdjointSimManager::SetAdjointTrackingMode( - G4bool aBool) // could be removed +void G4AdjointSimManager::SetAdjointTrackingMode(G4bool aBool) // could be removed { adjoint_tracking_mode = aBool; - if(adjoint_tracking_mode) - { + if (adjoint_tracking_mode) { SetRestOfAdjointActions(); theAdjointStackingAction->SetAdjointMode(true); theAdjointStackingAction->SetKillTracks(false); } - else - { + else { ResetRestOfUserActions(); theAdjointStackingAction->SetAdjointMode(false); - if(GetDidAdjParticleReachTheExtSource()) - { + if (GetDidAdjParticleReachTheExtSource()) { theAdjointStackingAction->SetKillTracks(false); RegisterAtEndOfAdjointTrack(); } @@ -367,8 +306,7 @@ G4bool G4AdjointSimManager::GetDidAdjParticleReachTheExtSource() // -------------------------------------------------------------------- // -std::vector* -G4AdjointSimManager::GetListOfPrimaryFwdParticles() +std::vector* G4AdjointSimManager::GetListOfPrimaryFwdParticles() { return theAdjointPrimaryGeneratorAction->GetListOfPrimaryFwdParticles(); } @@ -377,54 +315,47 @@ G4AdjointSimManager::GetListOfPrimaryFwdParticles() // std::size_t G4AdjointSimManager::GetNbOfPrimaryFwdParticles() { - return theAdjointPrimaryGeneratorAction->GetListOfPrimaryFwdParticles() - ->size(); + return theAdjointPrimaryGeneratorAction->GetListOfPrimaryFwdParticles()->size(); } // -------------------------------------------------------------------- // -G4ThreeVector G4AdjointSimManager:: -GetPositionAtEndOfLastAdjointTrack(std::size_t i) +G4ThreeVector G4AdjointSimManager::GetPositionAtEndOfLastAdjointTrack(std::size_t i) { return theAdjointTrackingAction->GetPositionAtEndOfLastAdjointTrack(i); } // -------------------------------------------------------------------- // -G4ThreeVector G4AdjointSimManager:: -GetDirectionAtEndOfLastAdjointTrack(std::size_t i) +G4ThreeVector G4AdjointSimManager::GetDirectionAtEndOfLastAdjointTrack(std::size_t i) { return theAdjointTrackingAction->GetDirectionAtEndOfLastAdjointTrack(i); } // -------------------------------------------------------------------- // -G4double G4AdjointSimManager:: -GetEkinAtEndOfLastAdjointTrack(std::size_t i) +G4double G4AdjointSimManager::GetEkinAtEndOfLastAdjointTrack(std::size_t i) { return theAdjointTrackingAction->GetEkinAtEndOfLastAdjointTrack(i); } // -------------------------------------------------------------------- // -G4double G4AdjointSimManager:: -GetEkinNucAtEndOfLastAdjointTrack(std::size_t i) +G4double G4AdjointSimManager::GetEkinNucAtEndOfLastAdjointTrack(std::size_t i) { return theAdjointTrackingAction->GetEkinNucAtEndOfLastAdjointTrack(i); } // -------------------------------------------------------------------- // -G4double G4AdjointSimManager:: -GetWeightAtEndOfLastAdjointTrack(std::size_t i) +G4double G4AdjointSimManager::GetWeightAtEndOfLastAdjointTrack(std::size_t i) { return theAdjointTrackingAction->GetWeightAtEndOfLastAdjointTrack(i); } // -------------------------------------------------------------------- // -G4double G4AdjointSimManager:: -GetCosthAtEndOfLastAdjointTrack(std::size_t i) +G4double G4AdjointSimManager::GetCosthAtEndOfLastAdjointTrack(std::size_t i) { return theAdjointTrackingAction->GetCosthAtEndOfLastAdjointTrack(i); } @@ -438,28 +369,23 @@ const G4String& G4AdjointSimManager::GetFwdParticleNameAtEndOfLastAdjointTrack() // -------------------------------------------------------------------- // -G4int G4AdjointSimManager:: -GetFwdParticlePDGEncodingAtEndOfLastAdjointTrack(std::size_t i) +G4int G4AdjointSimManager::GetFwdParticlePDGEncodingAtEndOfLastAdjointTrack(std::size_t i) { - return theAdjointTrackingAction - ->GetFwdParticlePDGEncodingAtEndOfLastAdjointTrack(i); + return theAdjointTrackingAction->GetFwdParticlePDGEncodingAtEndOfLastAdjointTrack(i); } // -------------------------------------------------------------------- // -G4int G4AdjointSimManager:: -GetFwdParticleIndexAtEndOfLastAdjointTrack(std::size_t i) +G4int G4AdjointSimManager::GetFwdParticleIndexAtEndOfLastAdjointTrack(std::size_t i) { return theAdjointTrackingAction->GetLastFwdParticleIndex(i); } // -------------------------------------------------------------------- // -std::size_t G4AdjointSimManager:: -GetNbOfAdointTracksReachingTheExternalSurface() +std::size_t G4AdjointSimManager::GetNbOfAdointTracksReachingTheExternalSurface() { - return theAdjointTrackingAction - ->GetNbOfAdointTracksReachingTheExternalSurface(); + return theAdjointTrackingAction->GetNbOfAdointTracksReachingTheExternalSurface(); } // -------------------------------------------------------------------- @@ -473,36 +399,32 @@ void G4AdjointSimManager::ClearEndOfAdjointTrackInfoVectors() // void G4AdjointSimManager::RegisterAtEndOfAdjointTrack() { - last_pos = theAdjointSteppingAction->GetLastPosition(); + last_pos = theAdjointSteppingAction->GetLastPosition(); last_direction = theAdjointSteppingAction->GetLastMomentum(); last_direction /= last_direction.mag(); - last_cos_th = last_direction.z(); + last_cos_th = last_direction.z(); G4ParticleDefinition* aPartDef = theAdjointSteppingAction->GetLastPartDef(); last_fwd_part_name = aPartDef->GetParticleName(); last_fwd_part_name.erase(0, 4); - last_fwd_part_PDGEncoding = G4ParticleTable::GetParticleTable() - ->FindParticle(last_fwd_part_name) - ->GetPDGEncoding(); + last_fwd_part_PDGEncoding = + G4ParticleTable::GetParticleTable()->FindParticle(last_fwd_part_name)->GetPDGEncoding(); std::vector* aList = theAdjointPrimaryGeneratorAction->GetListOfPrimaryFwdParticles(); last_fwd_part_index = -1; G4int i = 0; - while(i < (G4int)aList->size() && last_fwd_part_index < 0) - { - if((*aList)[i]->GetParticleName() == last_fwd_part_name) - last_fwd_part_index = i; + while (i < (G4int)aList->size() && last_fwd_part_index < 0) { + if ((*aList)[i]->GetParticleName() == last_fwd_part_name) last_fwd_part_index = i; ++i; } - last_ekin = theAdjointSteppingAction->GetLastEkin(); + last_ekin = theAdjointSteppingAction->GetLastEkin(); last_ekin_nuc = last_ekin; - if(aPartDef->GetParticleType() == "adjoint_nucleus") - { - nb_nuc = double(aPartDef->GetBaryonNumber()); + if (aPartDef->GetParticleType() == "adjoint_nucleus") { + nb_nuc = static_cast(aPartDef->GetBaryonNumber()); last_ekin_nuc /= nb_nuc; } @@ -523,35 +445,32 @@ void G4AdjointSimManager::RegisterAtEndOfAdjointTrack() // -------------------------------------------------------------------- // -G4bool G4AdjointSimManager::DefineSphericalExtSource(G4double radius, - G4ThreeVector pos) +G4bool G4AdjointSimManager::DefineSphericalExtSource(G4double radius, G4ThreeVector pos) { G4double area; - return G4AdjointCrossSurfChecker::GetInstance()->AddaSphericalSurface( - "ExternalSource", radius, pos, area); + return G4AdjointCrossSurfChecker::GetInstance()->AddaSphericalSurface("ExternalSource", radius, + pos, area); } // -------------------------------------------------------------------- // -G4bool -G4AdjointSimManager::DefineSphericalExtSourceWithCentreAtTheCentreOfAVolume( +G4bool G4AdjointSimManager::DefineSphericalExtSourceWithCentreAtTheCentreOfAVolume( G4double radius, const G4String& volume_name) { G4double area; G4ThreeVector center; return G4AdjointCrossSurfChecker::GetInstance() - ->AddaSphericalSurfaceWithCenterAtTheCenterOfAVolume( - "ExternalSource", radius, volume_name, center, area); + ->AddaSphericalSurfaceWithCenterAtTheCenterOfAVolume("ExternalSource", radius, volume_name, + center, area); } // -------------------------------------------------------------------- // -G4bool G4AdjointSimManager::DefineExtSourceOnTheExtSurfaceOfAVolume( - const G4String& volume_name) +G4bool G4AdjointSimManager::DefineExtSourceOnTheExtSurfaceOfAVolume(const G4String& volume_name) { G4double area; - return G4AdjointCrossSurfChecker::GetInstance()->AddanExtSurfaceOfAvolume( - "ExternalSource", volume_name, area); + return G4AdjointCrossSurfChecker::GetInstance()->AddanExtSurfaceOfAvolume("ExternalSource", + volume_name, area); } // -------------------------------------------------------------------- @@ -563,49 +482,41 @@ void G4AdjointSimManager::SetExtSourceEmax(G4double Emax) // -------------------------------------------------------------------- // -G4bool G4AdjointSimManager::DefineSphericalAdjointSource(G4double radius, - G4ThreeVector pos) +G4bool G4AdjointSimManager::DefineSphericalAdjointSource(G4double radius, G4ThreeVector pos) { G4double area; - G4bool aBool = G4AdjointCrossSurfChecker::GetInstance()->AddaSphericalSurface( - "AdjointSource", radius, pos, area); - theAdjointPrimaryGeneratorAction->SetSphericalAdjointPrimarySource(radius, - pos); + G4bool aBool = G4AdjointCrossSurfChecker::GetInstance()->AddaSphericalSurface("AdjointSource", + radius, pos, area); + theAdjointPrimaryGeneratorAction->SetSphericalAdjointPrimarySource(radius, pos); area_of_the_adjoint_source = area; return aBool; } // -------------------------------------------------------------------- // -G4bool -G4AdjointSimManager::DefineSphericalAdjointSourceWithCentreAtTheCentreOfAVolume( +G4bool G4AdjointSimManager::DefineSphericalAdjointSourceWithCentreAtTheCentreOfAVolume( G4double radius, const G4String& volume_name) { G4double area; G4ThreeVector center; - G4bool aBool = G4AdjointCrossSurfChecker::GetInstance() - ->AddaSphericalSurfaceWithCenterAtTheCenterOfAVolume( - "AdjointSource", radius, volume_name, center, area); - theAdjointPrimaryGeneratorAction->SetSphericalAdjointPrimarySource(radius, - center); + G4bool aBool = + G4AdjointCrossSurfChecker::GetInstance()->AddaSphericalSurfaceWithCenterAtTheCenterOfAVolume( + "AdjointSource", radius, volume_name, center, area); + theAdjointPrimaryGeneratorAction->SetSphericalAdjointPrimarySource(radius, center); area_of_the_adjoint_source = area; return aBool; } // -------------------------------------------------------------------- // -G4bool G4AdjointSimManager::DefineAdjointSourceOnTheExtSurfaceOfAVolume( - const G4String& volume_name) +G4bool G4AdjointSimManager::DefineAdjointSourceOnTheExtSurfaceOfAVolume(const G4String& volume_name) { G4double area; - G4bool aBool = - G4AdjointCrossSurfChecker::GetInstance()->AddanExtSurfaceOfAvolume( - "AdjointSource", volume_name, area); + G4bool aBool = G4AdjointCrossSurfChecker::GetInstance()->AddanExtSurfaceOfAvolume( + "AdjointSource", volume_name, area); area_of_the_adjoint_source = area; - if(aBool) - { - theAdjointPrimaryGeneratorAction - ->SetAdjointPrimarySourceOnAnExtSurfaceOfAVolume(volume_name); + if (aBool) { + theAdjointPrimaryGeneratorAction->SetAdjointPrimarySourceOnAnExtSurfaceOfAVolume(volume_name); } return aBool; } @@ -626,16 +537,14 @@ void G4AdjointSimManager::SetAdjointSourceEmax(G4double Emax) // -------------------------------------------------------------------- // -void G4AdjointSimManager::ConsiderParticleAsPrimary( - const G4String& particle_name) +void G4AdjointSimManager::ConsiderParticleAsPrimary(const G4String& particle_name) { theAdjointPrimaryGeneratorAction->ConsiderParticleAsPrimary(particle_name); } // -------------------------------------------------------------------- // -void G4AdjointSimManager::NeglectParticleAsPrimary( - const G4String& particle_name) +void G4AdjointSimManager::NeglectParticleAsPrimary(const G4String& particle_name) { theAdjointPrimaryGeneratorAction->NeglectParticleAsPrimary(particle_name); } @@ -672,21 +581,18 @@ void G4AdjointSimManager::SetAdjointEventAction(G4UserEventAction* anAction) // -------------------------------------------------------------------- // -void G4AdjointSimManager::SetAdjointSteppingAction( - G4UserSteppingAction* anAction) +void G4AdjointSimManager::SetAdjointSteppingAction(G4UserSteppingAction* anAction) { theAdjointSteppingAction->SetUserAdjointSteppingAction(anAction); } // -------------------------------------------------------------------- // -void G4AdjointSimManager::SetAdjointStackingAction( - G4UserStackingAction* anAction) +void G4AdjointSimManager::SetAdjointStackingAction(G4UserStackingAction* anAction) { theAdjointStackingAction->SetUserAdjointStackingAction(anAction); } - // -------------------------------------------------------------------- // void G4AdjointSimManager::SetAdjointRunAction(G4UserRunAction* anAction) @@ -719,14 +625,6 @@ void G4AdjointSimManager::SetNbAdjointPrimaryElectronsPerEvent(G4int nb) // void G4AdjointSimManager::BeginOfRunAction(const G4Run* aRun) { - /* - if (!adjoint_sim_mode){ - if(fUserRunAction) fUserRunAction->BeginOfRunAction(aRun); - } - else { - if (theAdjointRunAction) theAdjointRunAction->BeginOfRunAction(aRun); - } - */ fUserRunAction->BeginOfRunAction(aRun); } @@ -734,22 +632,11 @@ void G4AdjointSimManager::BeginOfRunAction(const G4Run* aRun) // void G4AdjointSimManager::EndOfRunAction(const G4Run* aRun) { - if(!adjoint_sim_mode) - { - if(fUserRunAction) - fUserRunAction->EndOfRunAction(aRun); + if (!adjoint_sim_mode) { + if (fUserRunAction != nullptr) fUserRunAction->EndOfRunAction(aRun); } - else if(theAdjointRunAction) + else if (theAdjointRunAction != nullptr) theAdjointRunAction->EndOfRunAction(aRun); - /* - #ifdef G4MULTITHREADED - if (G4RunManager::GetRunManager()->GetRunManagerType() == - G4RunManager::workerRM) - { - if (adjoint_sim_mode) BackToFwdSimulationMode(); - } - #endif - */ } // -------------------------------------------------------------------- diff --git a/source/run/src/G4AdjointSimMessenger.cc b/source/run/src/G4AdjointSimMessenger.cc index 6f470813264..9b5688fac7b 100644 --- a/source/run/src/G4AdjointSimMessenger.cc +++ b/source/run/src/G4AdjointSimMessenger.cc @@ -33,10 +33,9 @@ // Customer: ESA/ESTEC // -------------------------------------------------------------------- -#include +#include "G4AdjointSimMessenger.hh" #include "G4AdjointSimManager.hh" -#include "G4AdjointSimMessenger.hh" #include "G4RunManager.hh" #include "G4UIcmdWith3VectorAndUnit.hh" #include "G4UIcmdWithABool.hh" @@ -48,15 +47,15 @@ #include "G4UIdirectory.hh" #include "G4UnitsTable.hh" +#include + // -------------------------------------------------------------------- // -G4AdjointSimMessenger:: -G4AdjointSimMessenger(G4AdjointSimManager* pAdjointRunManager) +G4AdjointSimMessenger::G4AdjointSimMessenger(G4AdjointSimManager* pAdjointRunManager) : theAdjointRunManager(pAdjointRunManager) { AdjointSimDir = new G4UIdirectory("/adjoint/"); - AdjointSimDir->SetGuidance( - "Control of the adjoint or reverse monte carlo simulation"); + AdjointSimDir->SetGuidance("Control of the adjoint or reverse monte carlo simulation"); // Start and adjoint Run //--------------------- @@ -65,7 +64,7 @@ G4AdjointSimMessenger(G4AdjointSimManager* pAdjointRunManager) beamOnCmd->SetGuidance("Start an adjoint Run."); beamOnCmd->SetGuidance("Default number of events to be processed is 1."); beamOnCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - G4UIparameter* p1 = new G4UIparameter("numberOfEvent", 'i', true); + auto p1 = new G4UIparameter("numberOfEvent", 'i', true); p1->SetDefaultValue(1); p1->SetParameterRange("numberOfEvent >= 0"); beamOnCmd->SetParameter(p1); @@ -73,20 +72,19 @@ G4AdjointSimMessenger(G4AdjointSimManager* pAdjointRunManager) // Commands to define parameters relative to the external source //------------------------------------------------------------ - G4UIparameter* pos_x_par = new G4UIparameter("X", 'd', true); + auto pos_x_par = new G4UIparameter("X", 'd', true); - G4UIparameter* pos_y_par = new G4UIparameter("Y", 'd', true); + auto pos_y_par = new G4UIparameter("Y", 'd', true); - G4UIparameter* pos_z_par = new G4UIparameter("Z", 'd', true); + auto pos_z_par = new G4UIparameter("Z", 'd', true); - G4UIparameter* radius_par = new G4UIparameter("R", 'd', true); + auto radius_par = new G4UIparameter("R", 'd', true); radius_par->SetParameterRange("R >= 0"); - G4UIparameter* unit_par = new G4UIparameter("unit", 's', true); + auto unit_par = new G4UIparameter("unit", 's', true); - DefineSpherExtSourceCmd = - new G4UIcommand("/adjoint/DefineSphericalExtSource", this); + DefineSpherExtSourceCmd = new G4UIcommand("/adjoint/DefineSphericalExtSource", this); DefineSpherExtSourceCmd->SetGuidance("Define a spherical external source."); DefineSpherExtSourceCmd->SetParameter(pos_x_par); DefineSpherExtSourceCmd->SetParameter(pos_y_par); @@ -94,8 +92,7 @@ G4AdjointSimMessenger(G4AdjointSimManager* pAdjointRunManager) DefineSpherExtSourceCmd->SetParameter(radius_par); DefineSpherExtSourceCmd->SetParameter(unit_par); - G4UIparameter* phys_vol_name_par = - new G4UIparameter("phys_vol_name", 's', true); + auto phys_vol_name_par = new G4UIparameter("phys_vol_name", 's', true); DefineSpherExtSourceCenteredOnAVolumeCmd = new G4UIcommand("/adjoint/DefineSphericalExtSourceCenteredOnAVolume", this); @@ -107,17 +104,14 @@ G4AdjointSimMessenger(G4AdjointSimManager* pAdjointRunManager) DefineSpherExtSourceCenteredOnAVolumeCmd->SetParameter(radius_par); DefineSpherExtSourceCenteredOnAVolumeCmd->SetParameter(unit_par); - DefineExtSourceOnAVolumeExtSurfaceCmd = new G4UIcmdWithAString( - "/adjoint/DefineExtSourceOnExtSurfaceOfAVolume", this); + DefineExtSourceOnAVolumeExtSurfaceCmd = + new G4UIcmdWithAString("/adjoint/DefineExtSourceOnExtSurfaceOfAVolume", this); DefineExtSourceOnAVolumeExtSurfaceCmd->SetGuidance( "Set the external source on the external surface of a physical volume"); - DefineExtSourceOnAVolumeExtSurfaceCmd->SetParameterName("phys_vol_name", - false); + DefineExtSourceOnAVolumeExtSurfaceCmd->SetParameterName("phys_vol_name", false); - setExtSourceEMaxCmd = - new G4UIcmdWithADoubleAndUnit("/adjoint/SetExtSourceEmax", this); - setExtSourceEMaxCmd->SetGuidance( - "Set the maximum energy of the external source"); + setExtSourceEMaxCmd = new G4UIcmdWithADoubleAndUnit("/adjoint/SetExtSourceEmax", this); + setExtSourceEMaxCmd->SetGuidance("Set the maximum energy of the external source"); setExtSourceEMaxCmd->SetParameterName("Emax", false); setExtSourceEMaxCmd->SetUnitCategory("Energy"); setExtSourceEMaxCmd->AvailableForStates(G4State_PreInit, G4State_Idle); @@ -125,8 +119,7 @@ G4AdjointSimMessenger(G4AdjointSimManager* pAdjointRunManager) // Commands to define the adjoint source //------------------------------------------------------------ - DefineSpherAdjSourceCmd = - new G4UIcommand("/adjoint/DefineSphericalAdjSource", this); + DefineSpherAdjSourceCmd = new G4UIcommand("/adjoint/DefineSphericalAdjSource", this); DefineSpherAdjSourceCmd->SetGuidance("Define a spherical adjoint source."); DefineSpherAdjSourceCmd->SetParameter(pos_x_par); DefineSpherAdjSourceCmd->SetParameter(pos_y_par); @@ -144,38 +137,30 @@ G4AdjointSimMessenger(G4AdjointSimManager* pAdjointRunManager) DefineSpherAdjSourceCenteredOnAVolumeCmd->SetParameter(radius_par); DefineSpherAdjSourceCenteredOnAVolumeCmd->SetParameter(unit_par); - DefineAdjSourceOnAVolumeExtSurfaceCmd = new G4UIcmdWithAString( - "/adjoint/DefineAdjSourceOnExtSurfaceOfAVolume", this); + DefineAdjSourceOnAVolumeExtSurfaceCmd = + new G4UIcmdWithAString("/adjoint/DefineAdjSourceOnExtSurfaceOfAVolume", this); DefineAdjSourceOnAVolumeExtSurfaceCmd->SetGuidance( "Set the adjoint source on the external surface of physical volume"); - DefineAdjSourceOnAVolumeExtSurfaceCmd->SetParameterName("phys_vol_name", - false); + DefineAdjSourceOnAVolumeExtSurfaceCmd->SetParameterName("phys_vol_name", false); - setAdjSourceEminCmd = - new G4UIcmdWithADoubleAndUnit("/adjoint/SetAdjSourceEmin", this); - setAdjSourceEminCmd->SetGuidance( - "Set the minimum energy of the adjoint source"); + setAdjSourceEminCmd = new G4UIcmdWithADoubleAndUnit("/adjoint/SetAdjSourceEmin", this); + setAdjSourceEminCmd->SetGuidance("Set the minimum energy of the adjoint source"); setAdjSourceEminCmd->SetParameterName("Emin", false); setAdjSourceEminCmd->SetUnitCategory("Energy"); setAdjSourceEminCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - setAdjSourceEmaxCmd = - new G4UIcmdWithADoubleAndUnit("/adjoint/SetAdjSourceEmax", this); - setAdjSourceEmaxCmd->SetGuidance( - "Set the maximum energy of the adjoint source"); + setAdjSourceEmaxCmd = new G4UIcmdWithADoubleAndUnit("/adjoint/SetAdjSourceEmax", this); + setAdjSourceEmaxCmd->SetGuidance("Set the maximum energy of the adjoint source"); setAdjSourceEmaxCmd->SetParameterName("Emax", false); setAdjSourceEmaxCmd->SetUnitCategory("Energy"); setAdjSourceEmaxCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - ConsiderParticleAsPrimaryCmd = - new G4UIcmdWithAString("/adjoint/ConsiderAsPrimary", this); - ConsiderParticleAsPrimaryCmd->SetGuidance( - "Set the selected particle as primary"); + ConsiderParticleAsPrimaryCmd = new G4UIcmdWithAString("/adjoint/ConsiderAsPrimary", this); + ConsiderParticleAsPrimaryCmd->SetGuidance("Set the selected particle as primary"); ConsiderParticleAsPrimaryCmd->SetParameterName("particle", false); ConsiderParticleAsPrimaryCmd->SetCandidates("e- gamma proton ion"); - NeglectParticleAsPrimaryCmd = - new G4UIcmdWithAString("/adjoint/NeglectAsPrimary", this); + NeglectParticleAsPrimaryCmd = new G4UIcmdWithAString("/adjoint/NeglectAsPrimary", this); NeglectParticleAsPrimaryCmd->SetGuidance( "Remove the selected particle from the list of primaries"); NeglectParticleAsPrimaryCmd->SetParameterName("particle", false); @@ -186,24 +171,21 @@ G4AdjointSimMessenger(G4AdjointSimManager* pAdjointRunManager) setNbOfPrimaryFwdGammasPerEventCmd->SetGuidance( "Set the nb of primary fwd gamm generated on the adjoint source"); setNbOfPrimaryFwdGammasPerEventCmd->SetParameterName("Nb_gammas", false); - setNbOfPrimaryFwdGammasPerEventCmd->AvailableForStates(G4State_PreInit, - G4State_Idle); + setNbOfPrimaryFwdGammasPerEventCmd->AvailableForStates(G4State_PreInit, G4State_Idle); setNbOfPrimaryAdjGammasPerEventCmd = new G4UIcmdWithAnInteger("/adjoint/SetNbOfPrimaryAdjGammasPerEvent", this); setNbOfPrimaryAdjGammasPerEventCmd->SetGuidance( "Set the nb of primary fwd gamm generated on the adjoint source"); setNbOfPrimaryAdjGammasPerEventCmd->SetParameterName("Nb_gammas", false); - setNbOfPrimaryAdjGammasPerEventCmd->AvailableForStates(G4State_PreInit, - G4State_Idle); + setNbOfPrimaryAdjGammasPerEventCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - setNbOfPrimaryAdjElectronsPerEventCmd = new G4UIcmdWithAnInteger( - "/adjoint/SetNbOfPrimaryAdjElectronsPerEvent", this); + setNbOfPrimaryAdjElectronsPerEventCmd = + new G4UIcmdWithAnInteger("/adjoint/SetNbOfPrimaryAdjElectronsPerEvent", this); setNbOfPrimaryAdjElectronsPerEventCmd->SetGuidance( "Set the nb of primary fwd gamm generated on the adjoint source"); setNbOfPrimaryAdjElectronsPerEventCmd->SetParameterName("Nb_gammas", false); - setNbOfPrimaryAdjElectronsPerEventCmd->AvailableForStates(G4State_PreInit, - G4State_Idle); + setNbOfPrimaryAdjElectronsPerEventCmd->AvailableForStates(G4State_PreInit, G4State_Idle); } // -------------------------------------------------------------------- @@ -232,31 +214,25 @@ G4AdjointSimMessenger::~G4AdjointSimMessenger() // void G4AdjointSimMessenger::SetNewValue(G4UIcommand* command, G4String newValue) { - if(command == nullptr) - return; - if(command == beamOnCmd) - { + if (command == nullptr) return; + if (command == beamOnCmd) { G4int nev; - const char* nv = (const char*) newValue; + const auto nv = (const char*)newValue; std::istringstream is(nv); is >> nev; - if(G4RunManager::GetRunManager()->GetRunManagerType() == - G4RunManager::sequentialRM) + if (G4RunManager::GetRunManager()->GetRunManagerType() == G4RunManager::sequentialRM) theAdjointRunManager->RunAdjointSimulation(nev); } - else if(command == ConsiderParticleAsPrimaryCmd) - { + else if (command == ConsiderParticleAsPrimaryCmd) { theAdjointRunManager->ConsiderParticleAsPrimary(newValue); } - else if(command == NeglectParticleAsPrimaryCmd) - { + else if (command == NeglectParticleAsPrimaryCmd) { theAdjointRunManager->NeglectParticleAsPrimary(newValue); } - if(command == DefineSpherExtSourceCmd) - { + if (command == DefineSpherExtSourceCmd) { G4double x, y, z, r; G4String unit; - const char* nv = (const char*) newValue; + const auto nv = (const char*)newValue; std::istringstream is(nv); is >> x >> y >> z >> r >> unit; @@ -266,31 +242,25 @@ void G4AdjointSimMessenger::SetNewValue(G4UIcommand* command, G4String newValue) r *= G4UnitDefinition::GetValueOf(unit); theAdjointRunManager->DefineSphericalExtSource(r, G4ThreeVector(x, y, z)); } - else if(command == DefineSpherExtSourceCenteredOnAVolumeCmd) - { + else if (command == DefineSpherExtSourceCenteredOnAVolumeCmd) { G4double r; G4String vol_name, unit; - const char* nv = (const char*) newValue; + const auto nv = (const char*)newValue; std::istringstream is(nv); is >> vol_name >> r >> unit; r *= G4UnitDefinition::GetValueOf(unit); - theAdjointRunManager - ->DefineSphericalExtSourceWithCentreAtTheCentreOfAVolume(r, vol_name); + theAdjointRunManager->DefineSphericalExtSourceWithCentreAtTheCentreOfAVolume(r, vol_name); } - else if(command == DefineExtSourceOnAVolumeExtSurfaceCmd) - { + else if (command == DefineExtSourceOnAVolumeExtSurfaceCmd) { theAdjointRunManager->DefineExtSourceOnTheExtSurfaceOfAVolume(newValue); } - else if(command == setExtSourceEMaxCmd) - { - theAdjointRunManager->SetExtSourceEmax( - setExtSourceEMaxCmd->GetNewDoubleValue(newValue)); + else if (command == setExtSourceEMaxCmd) { + theAdjointRunManager->SetExtSourceEmax(setExtSourceEMaxCmd->GetNewDoubleValue(newValue)); } - else if(command == DefineSpherAdjSourceCmd) - { + else if (command == DefineSpherAdjSourceCmd) { G4double x, y, z, r; G4String unit; - const char* nv = (const char*) newValue; + const auto nv = (const char*)newValue; std::istringstream is(nv); is >> x >> y >> z >> r >> unit; @@ -298,46 +268,35 @@ void G4AdjointSimMessenger::SetNewValue(G4UIcommand* command, G4String newValue) y *= G4UnitDefinition::GetValueOf(unit); z *= G4UnitDefinition::GetValueOf(unit); r *= G4UnitDefinition::GetValueOf(unit); - theAdjointRunManager->DefineSphericalAdjointSource(r, - G4ThreeVector(x, y, z)); + theAdjointRunManager->DefineSphericalAdjointSource(r, G4ThreeVector(x, y, z)); } - else if(command == DefineSpherAdjSourceCenteredOnAVolumeCmd) - { + else if (command == DefineSpherAdjSourceCenteredOnAVolumeCmd) { G4double r; G4String vol_name, unit; - const char* nv = (const char*) newValue; + const auto nv = (const char*)newValue; std::istringstream is(nv); is >> vol_name >> r >> unit; r *= G4UnitDefinition::GetValueOf(unit); - theAdjointRunManager - ->DefineSphericalAdjointSourceWithCentreAtTheCentreOfAVolume(r, vol_name); + theAdjointRunManager->DefineSphericalAdjointSourceWithCentreAtTheCentreOfAVolume(r, vol_name); } - else if(command == DefineAdjSourceOnAVolumeExtSurfaceCmd) - { + else if (command == DefineAdjSourceOnAVolumeExtSurfaceCmd) { theAdjointRunManager->DefineAdjointSourceOnTheExtSurfaceOfAVolume(newValue); } - else if(command == setAdjSourceEminCmd) - { - theAdjointRunManager->SetAdjointSourceEmin( - setAdjSourceEminCmd->GetNewDoubleValue(newValue)); + else if (command == setAdjSourceEminCmd) { + theAdjointRunManager->SetAdjointSourceEmin(setAdjSourceEminCmd->GetNewDoubleValue(newValue)); } - else if(command == setAdjSourceEmaxCmd) - { - theAdjointRunManager->SetAdjointSourceEmax( - setAdjSourceEmaxCmd->GetNewDoubleValue(newValue)); + else if (command == setAdjSourceEmaxCmd) { + theAdjointRunManager->SetAdjointSourceEmax(setAdjSourceEmaxCmd->GetNewDoubleValue(newValue)); } - else if(command == setNbOfPrimaryFwdGammasPerEventCmd) - { + else if (command == setNbOfPrimaryFwdGammasPerEventCmd) { theAdjointRunManager->SetNbOfPrimaryFwdGammasPerEvent( setNbOfPrimaryFwdGammasPerEventCmd->GetNewIntValue(newValue)); } - else if(command == setNbOfPrimaryAdjGammasPerEventCmd) - { + else if (command == setNbOfPrimaryAdjGammasPerEventCmd) { theAdjointRunManager->SetNbAdjointPrimaryGammasPerEvent( setNbOfPrimaryAdjGammasPerEventCmd->GetNewIntValue(newValue)); } - else if(command == setNbOfPrimaryAdjElectronsPerEventCmd) - { + else if (command == setNbOfPrimaryAdjElectronsPerEventCmd) { theAdjointRunManager->SetNbAdjointPrimaryElectronsPerEvent( setNbOfPrimaryAdjElectronsPerEventCmd->GetNewIntValue(newValue)); } diff --git a/source/run/src/G4ExceptionHandler.cc b/source/run/src/G4ExceptionHandler.cc index eb5c6a85df0..9e873887a0d 100644 --- a/source/run/src/G4ExceptionHandler.cc +++ b/source/run/src/G4ExceptionHandler.cc @@ -28,32 +28,26 @@ // Author: M.Asai - August 2002 // -------------------------------------------------------------------- -#include - #include "G4ExceptionHandler.hh" -#include "G4RunManager.hh" -#include "G4StateManager.hh" -#include "G4String.hh" -#include "G4ios.hh" #include "G4EventManager.hh" #include "G4Material.hh" #include "G4ParticleDefinition.hh" +#include "G4RunManager.hh" #include "G4RunManagerKernel.hh" +#include "G4StateManager.hh" #include "G4Step.hh" #include "G4StepPoint.hh" #include "G4SteppingManager.hh" +#include "G4String.hh" #include "G4Track.hh" #include "G4TrackingManager.hh" #include "G4UnitsTable.hh" #include "G4VPhysicalVolume.hh" #include "G4VProcess.hh" +#include "G4ios.hh" -// -------------------------------------------------------------------- -G4ExceptionHandler::G4ExceptionHandler() {} - -// -------------------------------------------------------------------- -G4ExceptionHandler::~G4ExceptionHandler() {} +#include // -------------------------------------------------------------------- G4bool G4ExceptionHandler::operator==(const G4ExceptionHandler& right) const @@ -68,10 +62,8 @@ G4bool G4ExceptionHandler::operator!=(const G4ExceptionHandler& right) const } // -------------------------------------------------------------------- -G4bool G4ExceptionHandler::Notify(const char* originOfException, - const char* exceptionCode, - G4ExceptionSeverity severity, - const char* description) +G4bool G4ExceptionHandler::Notify(const char* originOfException, const char* exceptionCode, + G4ExceptionSeverity severity, const char* description) { static const G4String es_banner = "\n-------- EEEE ------- G4Exception-START -------- EEEE -------\n"; @@ -83,31 +75,26 @@ G4bool G4ExceptionHandler::Notify(const char* originOfException, "\n-------- WWWW -------- G4Exception-END --------- WWWW -------\n"; std::ostringstream message; message << "*** G4Exception : " << exceptionCode << G4endl - << " issued by : " << originOfException << G4endl << description - << G4endl; + << " issued by : " << originOfException << G4endl << description << G4endl; G4bool abortionForCoreDump = false; G4ApplicationState aps = G4StateManager::GetStateManager()->GetCurrentState(); - switch(severity) - { + switch (severity) { case FatalException: - G4cerr << es_banner << message.str() - << "*** Fatal Exception *** core dump ***" << G4endl; + G4cerr << es_banner << message.str() << "*** Fatal Exception *** core dump ***" << G4endl; DumpTrackInfo(); G4cerr << ee_banner << G4endl; abortionForCoreDump = true; break; case FatalErrorInArgument: - G4cerr << es_banner << message.str() - << "*** Fatal Error In Argument *** core dump ***" << G4endl; + G4cerr << es_banner << message.str() << "*** Fatal Error In Argument *** core dump ***" + << G4endl; DumpTrackInfo(); G4cerr << ee_banner << G4endl; abortionForCoreDump = true; break; case RunMustBeAborted: - if(aps == G4State_GeomClosed || aps == G4State_EventProc) - { - G4cerr << es_banner << message.str() << "*** Run Must Be Aborted ***" - << G4endl; + if (aps == G4State_GeomClosed || aps == G4State_EventProc) { + G4cerr << es_banner << message.str() << "*** Run Must Be Aborted ***" << G4endl; DumpTrackInfo(); G4cerr << ee_banner << G4endl; G4RunManager::GetRunManager()->AbortRun(false); @@ -115,10 +102,8 @@ G4bool G4ExceptionHandler::Notify(const char* originOfException, abortionForCoreDump = false; break; case EventMustBeAborted: - if(aps == G4State_EventProc) - { - G4cerr << es_banner << message.str() << "*** Event Must Be Aborted ***" - << G4endl; + if (aps == G4State_EventProc) { + G4cerr << es_banner << message.str() << "*** Event Must Be Aborted ***" << G4endl; DumpTrackInfo(); G4cerr << ee_banner << G4endl; G4RunManager::GetRunManager()->AbortEvent(); @@ -126,8 +111,7 @@ G4bool G4ExceptionHandler::Notify(const char* originOfException, abortionForCoreDump = false; break; default: - G4cout << ws_banner << message.str() - << "*** This is just a warning message. ***" << we_banner + G4cout << ws_banner << message.str() << "*** This is just a warning message. ***" << we_banner << G4endl; abortionForCoreDump = false; break; @@ -138,124 +122,86 @@ G4bool G4ExceptionHandler::Notify(const char* originOfException, // -------------------------------------------------------------------- void G4ExceptionHandler::DumpTrackInfo() { - const G4Track *theTrack = nullptr; - const G4Step *theStep = nullptr; - if (G4StateManager::GetStateManager()->GetCurrentState() == G4State_EventProc) - { - G4SteppingManager *steppingMgr = G4RunManagerKernel::GetRunManagerKernel() - ->GetTrackingManager() - ->GetSteppingManager(); + const G4Track* theTrack = nullptr; + const G4Step* theStep = nullptr; + if (G4StateManager::GetStateManager()->GetCurrentState() == G4State_EventProc) { + G4SteppingManager* steppingMgr = + G4RunManagerKernel::GetRunManagerKernel()->GetTrackingManager()->GetSteppingManager(); theTrack = steppingMgr->GetfTrack(); theStep = steppingMgr->GetfStep(); } - if (theTrack == nullptr) - { - G4cerr << " **** Track information is not available at this moment" - << G4endl; + if (theTrack == nullptr) { + G4cerr << " **** Track information is not available at this moment" << G4endl; } - else - { - G4cerr << "G4Track (" << theTrack - << ") - track ID = " << theTrack->GetTrackID() + else { + G4cerr << "G4Track (" << theTrack << ") - track ID = " << theTrack->GetTrackID() << ", parent ID = " << theTrack->GetParentID() << G4endl; - G4cerr << " Particle type : " - << theTrack->GetParticleDefinition()->GetParticleName(); - if(theTrack->GetCreatorProcess()) - { - G4cerr << " - creator process : " - << theTrack->GetCreatorProcess()->GetProcessName() - << ", creator model : " << theTrack->GetCreatorModelName() - << G4endl; + G4cerr << " Particle type : " << theTrack->GetParticleDefinition()->GetParticleName(); + if (theTrack->GetCreatorProcess() != nullptr) { + G4cerr << " - creator process : " << theTrack->GetCreatorProcess()->GetProcessName() + << ", creator model : " << theTrack->GetCreatorModelName() << G4endl; } - else - { + else { G4cerr << " - creator process : not available" << G4endl; } - G4cerr << " Kinetic energy : " - << G4BestUnit(theTrack->GetKineticEnergy(), "Energy") - << " - Momentum direction : " << theTrack->GetMomentumDirection() - << G4endl; + G4cerr << " Kinetic energy : " << G4BestUnit(theTrack->GetKineticEnergy(), "Energy") + << " - Momentum direction : " << theTrack->GetMomentumDirection() << G4endl; } - if (theStep == nullptr) - { - G4cerr << " **** Step information is not available at this moment" - << G4endl; + if (theStep == nullptr) { + G4cerr << " **** Step information is not available at this moment" << G4endl; } - else - { - G4cerr << " Step length : " - << G4BestUnit(theStep->GetStepLength(), "Length") - << " - total energy deposit : " - << G4BestUnit(theStep->GetTotalEnergyDeposit(), "Energy") << G4endl; + else { + G4cerr << " Step length : " << G4BestUnit(theStep->GetStepLength(), "Length") + << " - total energy deposit : " << G4BestUnit(theStep->GetTotalEnergyDeposit(), "Energy") + << G4endl; G4cerr << " Pre-step point : " << theStep->GetPreStepPoint()->GetPosition(); G4cerr << " - Physical volume : "; - if(theStep->GetPreStepPoint()->GetPhysicalVolume()) - { + if (theStep->GetPreStepPoint()->GetPhysicalVolume() != nullptr) { G4cerr << theStep->GetPreStepPoint()->GetPhysicalVolume()->GetName(); - if(theStep->GetPreStepPoint()->GetMaterial()) - { - G4cerr << " (" << theStep->GetPreStepPoint()->GetMaterial()->GetName() - << ")"; + if (theStep->GetPreStepPoint()->GetMaterial() != nullptr) { + G4cerr << " (" << theStep->GetPreStepPoint()->GetMaterial()->GetName() << ")"; } - else - { + else { G4cerr << " (material not available)"; } } - else - { + else { G4cerr << "not available"; } G4cerr << G4endl; - if(theStep->GetPreStepPoint()->GetProcessDefinedStep()) - { - G4cerr - << " - defined by : " - << theStep->GetPreStepPoint()->GetProcessDefinedStep()->GetProcessName() - << " - step status : " << theStep->GetPreStepPoint()->GetStepStatus() - << G4endl; + if (theStep->GetPreStepPoint()->GetProcessDefinedStep() != nullptr) { + G4cerr << " - defined by : " + << theStep->GetPreStepPoint()->GetProcessDefinedStep()->GetProcessName() + << " - step status : " << theStep->GetPreStepPoint()->GetStepStatus() << G4endl; } - else - { + else { G4cerr << " - defined by : not available" << G4endl; } - G4cerr << " Post-step point : " - << theStep->GetPostStepPoint()->GetPosition(); + G4cerr << " Post-step point : " << theStep->GetPostStepPoint()->GetPosition(); G4cerr << " - Physical volume : "; - if(theStep->GetPostStepPoint()->GetPhysicalVolume()) - { + if (theStep->GetPostStepPoint()->GetPhysicalVolume() != nullptr) { G4cerr << theStep->GetPostStepPoint()->GetPhysicalVolume()->GetName(); - if(theStep->GetPostStepPoint()->GetMaterial()) - { - G4cerr << " (" << theStep->GetPostStepPoint()->GetMaterial()->GetName() - << ")"; + if (theStep->GetPostStepPoint()->GetMaterial() != nullptr) { + G4cerr << " (" << theStep->GetPostStepPoint()->GetMaterial()->GetName() << ")"; } - else - { + else { G4cerr << " (material not available)"; } } - else - { + else { G4cerr << "not available"; } G4cerr << G4endl; - if(theStep->GetPostStepPoint()->GetProcessDefinedStep()) - { + if (theStep->GetPostStepPoint()->GetProcessDefinedStep() != nullptr) { G4cerr << " - defined by : " - << theStep->GetPostStepPoint() - ->GetProcessDefinedStep() - ->GetProcessName() - << " - step status : " - << theStep->GetPostStepPoint()->GetStepStatus() << G4endl; + << theStep->GetPostStepPoint()->GetProcessDefinedStep()->GetProcessName() + << " - step status : " << theStep->GetPostStepPoint()->GetStepStatus() << G4endl; } - else - { + else { G4cerr << " - defined by : not available" << G4endl; } - G4cerr << " *** Note: Step information might not be properly updated." - << G4endl; + G4cerr << " *** Note: Step information might not be properly updated." << G4endl; } } diff --git a/source/run/src/G4MSSteppingAction.cc b/source/run/src/G4MSSteppingAction.cc index b176cc103cb..bdbb58fd6d0 100644 --- a/source/run/src/G4MSSteppingAction.cc +++ b/source/run/src/G4MSSteppingAction.cc @@ -29,39 +29,32 @@ // -------------------------------------------------------------------- #include "G4MSSteppingAction.hh" + #include "G4LogicalVolume.hh" #include "G4Material.hh" #include "G4Region.hh" #include "G4Step.hh" #include "G4VPhysicalVolume.hh" -// -------------------------------------------------------------------- -G4MSSteppingAction::G4MSSteppingAction() {} - -// -------------------------------------------------------------------- -G4MSSteppingAction::~G4MSSteppingAction() {} - // -------------------------------------------------------------------- void G4MSSteppingAction::Initialize(G4bool rSens, G4Region* reg) { regionSensitive = rSens; - theRegion = reg; - length = 0.; - x0 = 0.; - lambda = 0.; + theRegion = reg; + length = 0.; + x0 = 0.; + lambda = 0.; } // -------------------------------------------------------------------- void G4MSSteppingAction::UserSteppingAction(const G4Step* aStep) { G4StepPoint* preStepPoint = aStep->GetPreStepPoint(); - G4Region* region = - preStepPoint->GetPhysicalVolume()->GetLogicalVolume()->GetRegion(); + G4Region* region = preStepPoint->GetPhysicalVolume()->GetLogicalVolume()->GetRegion(); - if(regionSensitive && (region != theRegion)) - return; + if (regionSensitive && (region != theRegion)) return; - G4double stlen = aStep->GetStepLength(); + G4double stlen = aStep->GetStepLength(); const G4Material* material = preStepPoint->GetMaterial(); length += stlen; x0 += stlen / (material->GetRadlen()); diff --git a/source/run/src/G4MTRunManager.cc b/source/run/src/G4MTRunManager.cc index c9b5562ec5a..8768c806544 100644 --- a/source/run/src/G4MTRunManager.cc +++ b/source/run/src/G4MTRunManager.cc @@ -29,7 +29,9 @@ // -------------------------------------------------------------------- #include "G4MTRunManager.hh" + #include "G4AutoLock.hh" +#include "G4CopyRandomState.hh" #include "G4MTRunManagerKernel.hh" #include "G4ProductionCutsTable.hh" #include "G4Run.hh" @@ -47,19 +49,18 @@ #include "G4WorkerThread.hh" G4ScoringManager* G4MTRunManager::masterScM = nullptr; -G4MTRunManager::masterWorlds_t G4MTRunManager::masterWorlds - = G4MTRunManager::masterWorlds_t(); -G4MTRunManager* G4MTRunManager::fMasterRM = nullptr; +G4MTRunManager::masterWorlds_t G4MTRunManager::masterWorlds = G4MTRunManager::masterWorlds_t(); +G4MTRunManager* G4MTRunManager::fMasterRM = nullptr; G4int G4MTRunManager::seedOncePerCommunication = 0; -G4ThreadId G4MTRunManager::masterThreadId = G4ThisThread::get_id(); +G4ThreadId G4MTRunManager::masterThreadId = G4ThisThread::get_id(); // -------------------------------------------------------------------- namespace { - G4Mutex cmdHandlingMutex = G4MUTEX_INITIALIZER; - G4Mutex scorerMergerMutex = G4MUTEX_INITIALIZER; - G4Mutex runMergerMutex = G4MUTEX_INITIALIZER; - G4Mutex setUpEventMutex = G4MUTEX_INITIALIZER; +G4Mutex cmdHandlingMutex = G4MUTEX_INITIALIZER; +G4Mutex scorerMergerMutex = G4MUTEX_INITIALIZER; +G4Mutex runMergerMutex = G4MUTEX_INITIALIZER; +G4Mutex setUpEventMutex = G4MUTEX_INITIALIZER; } // namespace // -------------------------------------------------------------------- @@ -117,17 +118,15 @@ void G4MTRunManager::SetSeedOncePerCommunication(G4int val) } // -------------------------------------------------------------------- -G4MTRunManager::G4MTRunManager() - : G4RunManager(masterRM) +G4MTRunManager::G4MTRunManager() : G4RunManager(masterRM) { - if(fMasterRM) - { + if (fMasterRM != nullptr) { G4Exception("G4MTRunManager::G4MTRunManager", "Run0110", FatalException, "Another instance of a G4MTRunManager already exists."); } - fMasterRM = this; + fMasterRM = this; masterThreadId = G4ThisThread::get_id(); - MTkernel = static_cast(kernel); + MTkernel = static_cast(kernel); #ifndef G4MULTITHREADED G4ExceptionDescription msg; msg << "Geant4 code is compiled without multi-threading support" @@ -137,16 +136,12 @@ G4MTRunManager::G4MTRunManager() #endif G4int numberOfStaticAllocators = kernel->GetNumberOfStaticAllocators(); - if(numberOfStaticAllocators > 0) - { + if (numberOfStaticAllocators > 0) { G4ExceptionDescription msg1; - msg1 - << "There are " << numberOfStaticAllocators - << " static G4Allocator objects detected.\n" - << "In multi-threaded mode, all G4Allocator objects must be dynamically " - "instantiated."; - G4Exception("G4MTRunManager::G4MTRunManager", "Run1035", FatalException, - msg1); + msg1 << "There are " << numberOfStaticAllocators << " static G4Allocator objects detected.\n" + << "In multi-threaded mode, all G4Allocator objects must be dynamically " + "instantiated."; + G4Exception("G4MTRunManager::G4MTRunManager", "Run1035", FatalException, msg1); } G4UImanager::GetUIpointer()->SetMasterUIManager(true); masterScM = G4ScoringManager::GetScoringManagerIfExist(); @@ -161,39 +156,33 @@ G4MTRunManager::G4MTRunManager() randDbl = new G4double[nSeedsPerEvent * nSeedsMax]; char* env = std::getenv("G4FORCENUMBEROFTHREADS"); - if(env) - { + if (env != nullptr) { G4String envS = env; - if(envS == "MAX" || envS == "max") - { + if (envS == "MAX" || envS == "max") { forcedNwokers = G4Threading::G4GetNumberOfCores(); } - else - { + else { std::istringstream is(env); G4int val = -1; is >> val; - if(val > 0) - { + if (val > 0) { forcedNwokers = val; } - else - { + else { G4ExceptionDescription msg2; msg2 << "Environment variable G4FORCENUMBEROFTHREADS has an invalid " "value <" << envS << ">. It has to be an integer or a word \"max\".\n" << "G4FORCENUMBEROFTHREADS is ignored."; - G4Exception("G4MTRunManager::G4MTRunManager", "Run1039", JustWarning, - msg2); + G4Exception("G4MTRunManager::G4MTRunManager", "Run1039", JustWarning, msg2); } } - if(forcedNwokers > 0) - { + if (forcedNwokers > 0) { nworkers = forcedNwokers; - if(verboseLevel > 0) - { G4cout << "### Number of threads is forced to " << forcedNwokers - << " by Environment variable G4FORCENUMBEROFTHREADS." << G4endl; } + if (verboseLevel > 0) { + G4cout << "### Number of threads is forced to " << forcedNwokers + << " by Environment variable G4FORCENUMBEROFTHREADS." << G4endl; + } } } } @@ -221,64 +210,51 @@ void G4MTRunManager::StoreRNGStatus(const G4String& fn) void G4MTRunManager::rndmSaveThisRun() { G4int runNumber = 0; - if(currentRun != nullptr) - runNumber = currentRun->GetRunID(); - if(!storeRandomNumberStatus) - { + if (currentRun != nullptr) runNumber = currentRun->GetRunID(); + if (!storeRandomNumberStatus) { G4cerr << "Warning from G4RunManager::rndmSaveThisRun():" - << " Random number status was not stored prior to this run." - << G4endl << "/random/setSavingFlag command must be issued. " + << " Random number status was not stored prior to this run." << G4endl + << "/random/setSavingFlag command must be issued. " << "Command ignored." << G4endl; return; } - G4String fileIn = randomNumberStatusDir + "G4Worker_currentRun.rndm"; + G4fs::path fileIn = randomNumberStatusDir + "G4Worker_currentRun.rndm"; std::ostringstream os; os << "run" << runNumber << ".rndm" << '\0'; - G4String fileOut = randomNumberStatusDir + os.str(); + G4fs::path fileOut = randomNumberStatusDir + os.str(); -#ifdef WIN32 - G4String copCmd = "/control/shell copy " + fileIn + " " + fileOut; -#else - G4String copCmd = "/control/shell cp " + fileIn + " " + fileOut; -#endif - G4UImanager::GetUIpointer()->ApplyCommand(copCmd); - if(verboseLevel > 0) + if (G4CopyRandomState(fileIn, fileOut, "G4MTRunManager::rndmSaveThisRun()") && verboseLevel > 0) { G4cout << fileIn << " is copied to " << fileOut << G4endl; - } + } } // -------------------------------------------------------------------- void G4MTRunManager::rndmSaveThisEvent() { - G4Exception("G4MTRunManager::rndmSaveThisEvent", "RUN_RNDM001", - FatalException, "This method shall not be invoked !!"); + G4Exception("G4MTRunManager::rndmSaveThisEvent", "RUN_RNDM001", FatalException, + "This method shall not be invoked !!"); } // -------------------------------------------------------------------- void G4MTRunManager::SetNumberOfThreads(G4int n) { - if(threads.size() != 0) - { + if (!threads.empty()) { G4ExceptionDescription msg; msg << "Number of threads cannot be changed at this moment \n" << "(old threads are still alive). Method ignored."; - G4Exception("G4MTRunManager::SetNumberOfThreads(G4int)", "Run0112", - JustWarning, msg); + G4Exception("G4MTRunManager::SetNumberOfThreads(G4int)", "Run0112", JustWarning, msg); } - else if(forcedNwokers > 0) - { + else if (forcedNwokers > 0) { G4ExceptionDescription msg; msg << "Number of threads is forced to " << forcedNwokers << " by G4FORCENUMBEROFTHREADS shell variable.\n" << "Method ignored."; - G4Exception("G4MTRunManager::SetNumberOfThreads(G4int)", "Run0113", - JustWarning, msg); + G4Exception("G4MTRunManager::SetNumberOfThreads(G4int)", "Run0113", JustWarning, msg); } - else - { + else { nworkers = n; } } @@ -291,7 +267,6 @@ void G4MTRunManager::Initialize() // make sure all worker threads are set up. BeamOn(0); SetRunIDCounter(0); - /// G4UImanager::GetUIpointer()->SetIgnoreCmdNotFound(true); } // -------------------------------------------------------------------- @@ -311,10 +286,9 @@ void G4MTRunManager::PrepareCommandsStack() { G4AutoLock l(&cmdHandlingMutex); uiCmdsForWorkers.clear(); - std::vector* cmdCopy = - G4UImanager::GetUIpointer()->GetCommandStack(); - for(auto it = cmdCopy->cbegin(); it != cmdCopy->cend(); ++it) - uiCmdsForWorkers.push_back(*it); + std::vector* cmdCopy = G4UImanager::GetUIpointer()->GetCommandStack(); + for (const auto& it : *cmdCopy) + uiCmdsForWorkers.push_back(it); cmdCopy->clear(); delete cmdCopy; } @@ -333,10 +307,8 @@ void G4MTRunManager::CreateAndStartWorkers() // This will also start the workers // Currently we do not allow to change the // number of threads: threads area created once - if(threads.size() == 0) - { - if(verboseLevel > 0) - { + if (threads.empty()) { + if (verboseLevel > 0) { // for consistency with G4TaskRunManager std::stringstream msg; msg << "--> G4MTRunManager::CreateAndStartWorkers() --> " @@ -345,21 +317,15 @@ void G4MTRunManager::CreateAndStartWorkers() std::stringstream ss; ss.fill('='); ss << std::setw(G4int(msg.str().length())) << ""; - G4cout << "\n" - << ss.str() << "\n" - << msg.str() << "\n" - << ss.str() << "\n" - << G4endl; + G4cout << "\n" << ss.str() << "\n" << msg.str() << "\n" << ss.str() << "\n" << G4endl; } - for(G4int nw = 0; nw < nworkers; ++nw) - { + for (G4int nw = 0; nw < nworkers; ++nw) { // Create a new worker and remember it - G4WorkerThread* context = new G4WorkerThread; + auto context = new G4WorkerThread; context->SetNumberThreads(nworkers); context->SetThreadId(nw); - G4Thread* thread = - userWorkerThreadInitialization->CreateAndStartWorker(context); + G4Thread* thread = userWorkerThreadInitialization->CreateAndStartWorker(context); threads.push_back(thread); } } @@ -368,68 +334,53 @@ void G4MTRunManager::CreateAndStartWorkers() } // -------------------------------------------------------------------- -void G4MTRunManager::InitializeEventLoop(G4int n_event, const char* macroFile, - G4int n_select) +void G4MTRunManager::InitializeEventLoop(G4int n_event, const char* macroFile, G4int n_select) { MTkernel->SetUpDecayChannels(); numberOfEventToBeProcessed = n_event; - numberOfEventProcessed = 0; + numberOfEventProcessed = 0; - if(!fakeRun) - { - nSeedsUsed = 0; + if (!fakeRun) { + nSeedsUsed = 0; nSeedsFilled = 0; - if(verboseLevel > 0) - { + if (verboseLevel > 0) { timer->Start(); } n_select_msg = n_select; - if(macroFile != 0) - { - if(n_select_msg < 0) - n_select_msg = n_event; + if (macroFile != nullptr) { + if (n_select_msg < 0) n_select_msg = n_event; msgText = "/control/execute "; msgText += macroFile; selectMacro = macroFile; } - else - { + else { n_select_msg = -1; - selectMacro = ""; + selectMacro = ""; } // initialize seeds // If user did not implement InitializeSeeds, // use default: nSeedsPerEvent seeds per event - if(eventModuloDef > 0) - { + if (eventModuloDef > 0) { eventModulo = eventModuloDef; - if(eventModulo > numberOfEventToBeProcessed / nworkers) - { + if (eventModulo > numberOfEventToBeProcessed / nworkers) { eventModulo = numberOfEventToBeProcessed / nworkers; - if(eventModulo < 1) - eventModulo = 1; + if (eventModulo < 1) eventModulo = 1; G4ExceptionDescription msgd; msgd << "Event modulo is reduced to " << eventModulo << " to distribute events to all threads."; - G4Exception("G4MTRunManager::InitializeEventLoop()", "Run10035", - JustWarning, msgd); + G4Exception("G4MTRunManager::InitializeEventLoop()", "Run10035", JustWarning, msgd); } } - else - { - eventModulo = - G4int(std::sqrt(G4double(numberOfEventToBeProcessed / nworkers))); - if(eventModulo < 1) - eventModulo = 1; + else { + eventModulo = G4int(std::sqrt(G4double(numberOfEventToBeProcessed / nworkers))); + if (eventModulo < 1) eventModulo = 1; } - if(InitializeSeeds(n_event) == false && n_event > 0) - { + if (!InitializeSeeds(n_event) && n_event > 0) { G4RNGHelper* helper = G4RNGHelper::GetInstance(); - switch(seedOncePerCommunication) - { + switch (seedOncePerCommunication) { case 0: nSeedsFilled = n_event; break; @@ -443,23 +394,20 @@ void G4MTRunManager::InitializeEventLoop(G4int n_event, const char* macroFile, G4ExceptionDescription msgd; msgd << "Parameter value <" << seedOncePerCommunication << "> of seedOncePerCommunication is invalid. It is reset to 0."; - G4Exception("G4MTRunManager::InitializeEventLoop()", "Run10036", - JustWarning, msgd); + G4Exception("G4MTRunManager::InitializeEventLoop()", "Run10036", JustWarning, msgd); seedOncePerCommunication = 0; - nSeedsFilled = n_event; + nSeedsFilled = n_event; } // Generates up to nSeedsMax seed pairs only. - if(nSeedsFilled > nSeedsMax) - nSeedsFilled = nSeedsMax; + if (nSeedsFilled > nSeedsMax) nSeedsFilled = nSeedsMax; masterRNGEngine->flatArray(nSeedsPerEvent * nSeedsFilled, randDbl); helper->Fill(randDbl, nSeedsFilled, n_event, nSeedsPerEvent); } } // Now initialize workers. Check if user defined a WorkerThreadInitialization - if(userWorkerThreadInitialization == nullptr) - { + if (userWorkerThreadInitialization == nullptr) { userWorkerThreadInitialization = new G4UserWorkerThreadInitialization(); } @@ -478,9 +426,8 @@ void G4MTRunManager::InitializeEventLoop(G4int n_event, const char* macroFile, void G4MTRunManager::RefillSeeds() { G4RNGHelper* helper = G4RNGHelper::GetInstance(); - G4int nFill = 0; - switch(seedOncePerCommunication) - { + G4int nFill = 0; + switch (seedOncePerCommunication) { case 0: nFill = numberOfEventToBeProcessed - nSeedsFilled; break; @@ -489,12 +436,10 @@ void G4MTRunManager::RefillSeeds() break; case 2: default: - nFill = (numberOfEventToBeProcessed - nSeedsFilled * eventModulo) - / eventModulo + 1; + nFill = (numberOfEventToBeProcessed - nSeedsFilled * eventModulo) / eventModulo + 1; } // Generates up to nSeedsMax seed pairs only. - if(nFill > nSeedsMax) - nFill = nSeedsMax; + if (nFill > nSeedsMax) nFill = nSeedsMax; masterRNGEngine->flatArray(nSeedsPerEvent * nFill, randDbl); helper->Refill(randDbl, nFill); nSeedsFilled += nFill; @@ -522,12 +467,9 @@ void G4MTRunManager::ConstructScoringWorlds() G4RunManager::ConstructScoringWorlds(); masterWorlds.clear(); - G4int nWorlds = (G4int) - G4TransportationManager::GetTransportationManager()->GetNoWorlds(); - auto itrW = - G4TransportationManager::GetTransportationManager()->GetWorldsIterator(); - for(G4int iWorld = 0; iWorld < nWorlds; ++iWorld) - { + auto nWorlds = (G4int)G4TransportationManager::GetTransportationManager()->GetNoWorlds(); + auto itrW = G4TransportationManager::GetTransportationManager()->GetWorldsIterator(); + for (G4int iWorld = 0; iWorld < nWorlds; ++iWorld) { addWorld(iWorld, *itrW); ++itrW; } @@ -540,15 +482,13 @@ void G4MTRunManager::SetUserInitialization(G4UserWorkerInitialization* userInit) } // -------------------------------------------------------------------- -void G4MTRunManager::SetUserInitialization( - G4UserWorkerThreadInitialization* userInit) +void G4MTRunManager::SetUserInitialization(G4UserWorkerThreadInitialization* userInit) { userWorkerThreadInitialization = userInit; } // -------------------------------------------------------------------- -void G4MTRunManager::SetUserInitialization( - G4VUserActionInitialization* userInit) +void G4MTRunManager::SetUserInitialization(G4VUserActionInitialization* userInit) { userActionInitialization = userInit; userActionInitialization->BuildForMaster(); @@ -571,18 +511,15 @@ void G4MTRunManager::SetUserInitialization(G4VUserDetectorConstruction* userDC) void G4MTRunManager::SetUserAction(G4UserRunAction* userAction) { G4RunManager::SetUserAction(userAction); - if(userAction) - userAction->SetMaster(); + if (userAction != nullptr) userAction->SetMaster(); } // -------------------------------------------------------------------- -void G4MTRunManager::SetUserAction( - G4VUserPrimaryGeneratorAction* /*userAction*/) +void G4MTRunManager::SetUserAction(G4VUserPrimaryGeneratorAction* /*userAction*/) { - G4Exception( - "G4MTRunManager::SetUserAction()", "Run0123", FatalException, - "For multi-threaded version, define G4VUserPrimaryGeneratorAction in " - "G4VUserActionInitialization."); + G4Exception("G4MTRunManager::SetUserAction()", "Run0123", FatalException, + "For multi-threaded version, define G4VUserPrimaryGeneratorAction in " + "G4VUserActionInitialization."); } // -------------------------------------------------------------------- @@ -621,37 +558,31 @@ void G4MTRunManager::SetUserAction(G4UserSteppingAction* /*userAction*/) void G4MTRunManager::MergeScores(const G4ScoringManager* localScoringManager) { G4AutoLock l(&scorerMergerMutex); - if(masterScM != nullptr && localScoringManager != nullptr) - masterScM->Merge(localScoringManager); + if (masterScM != nullptr && localScoringManager != nullptr) masterScM->Merge(localScoringManager); } // -------------------------------------------------------------------- void G4MTRunManager::MergeRun(const G4Run* localRun) { G4AutoLock l(&runMergerMutex); - if(currentRun != nullptr && localRun != nullptr) - currentRun->Merge(localRun); + if (currentRun != nullptr && localRun != nullptr) currentRun->Merge(localRun); } // -------------------------------------------------------------------- -G4bool G4MTRunManager::SetUpAnEvent(G4Event* evt, long& s1, long& s2, long& s3, +G4bool G4MTRunManager::SetUpAnEvent(G4Event* evt, G4long& s1, G4long& s2, G4long& s3, G4bool reseedRequired) { G4AutoLock l(&setUpEventMutex); - if(numberOfEventProcessed < numberOfEventToBeProcessed) - { + if (numberOfEventProcessed < numberOfEventToBeProcessed) { evt->SetEventID(numberOfEventProcessed); - if(reseedRequired) - { + if (reseedRequired) { G4RNGHelper* helper = G4RNGHelper::GetInstance(); - G4int idx_rndm = nSeedsPerEvent * nSeedsUsed; - s1 = helper->GetSeed(idx_rndm); - s2 = helper->GetSeed(idx_rndm + 1); - if(nSeedsPerEvent == 3) - s3 = helper->GetSeed(idx_rndm + 2); + G4int idx_rndm = nSeedsPerEvent * nSeedsUsed; + s1 = helper->GetSeed(idx_rndm); + s2 = helper->GetSeed(idx_rndm + 1); + if (nSeedsPerEvent == 3) s3 = helper->GetSeed(idx_rndm + 2); ++nSeedsUsed; - if(nSeedsUsed == nSeedsFilled) - RefillSeeds(); + if (nSeedsUsed == nSeedsFilled) RefillSeeds(); } ++numberOfEventProcessed; return true; @@ -660,33 +591,25 @@ G4bool G4MTRunManager::SetUpAnEvent(G4Event* evt, long& s1, long& s2, long& s3, } // -------------------------------------------------------------------- -G4int G4MTRunManager::SetUpNEvents(G4Event* evt, G4SeedsQueue* seedsQueue, - G4bool reseedRequired) +G4int G4MTRunManager::SetUpNEvents(G4Event* evt, G4SeedsQueue* seedsQueue, G4bool reseedRequired) { G4AutoLock l(&setUpEventMutex); - if(numberOfEventProcessed < numberOfEventToBeProcessed && !runAborted) - { + if (numberOfEventProcessed < numberOfEventToBeProcessed && !runAborted) { G4int nev = eventModulo; - if(numberOfEventProcessed + nev > numberOfEventToBeProcessed) - { + if (numberOfEventProcessed + nev > numberOfEventToBeProcessed) { nev = numberOfEventToBeProcessed - numberOfEventProcessed; } evt->SetEventID(numberOfEventProcessed); - if(reseedRequired) - { + if (reseedRequired) { G4RNGHelper* helper = G4RNGHelper::GetInstance(); - G4int nevRnd = nev; - if(seedOncePerCommunication > 0) - nevRnd = 1; - for(G4int i = 0; i < nevRnd; ++i) - { + G4int nevRnd = nev; + if (seedOncePerCommunication > 0) nevRnd = 1; + for (G4int i = 0; i < nevRnd; ++i) { seedsQueue->push(helper->GetSeed(nSeedsPerEvent * nSeedsUsed)); seedsQueue->push(helper->GetSeed(nSeedsPerEvent * nSeedsUsed + 1)); - if(nSeedsPerEvent == 3) - seedsQueue->push(helper->GetSeed(nSeedsPerEvent * nSeedsUsed + 2)); + if (nSeedsPerEvent == 3) seedsQueue->push(helper->GetSeed(nSeedsPerEvent * nSeedsUsed + 2)); ++nSeedsUsed; - if(nSeedsUsed == nSeedsFilled) - RefillSeeds(); + if (nSeedsUsed == nSeedsFilled) RefillSeeds(); } } numberOfEventProcessed += nev; @@ -706,12 +629,10 @@ void G4MTRunManager::TerminateWorkers() G4Profiler::Finalize(); // Now join threads. #ifdef G4MULTITHREADED // protect here to prevent warning in compilation - while(!threads.empty()) - { + while (!threads.empty()) { G4Thread* t = *(threads.begin()); threads.pop_front(); userWorkerThreadInitialization->JoinWorker(t); - // G4THREADJOIN(*t); delete t; } #endif @@ -722,15 +643,12 @@ void G4MTRunManager::TerminateWorkers() void G4MTRunManager::AbortRun(G4bool softAbort) { // This method is valid only for GeomClosed or EventProc state - G4ApplicationState currentState = - G4StateManager::GetStateManager()->GetCurrentState(); - if(currentState == G4State_GeomClosed || currentState == G4State_EventProc) - { + G4ApplicationState currentState = G4StateManager::GetStateManager()->GetCurrentState(); + if (currentState == G4State_GeomClosed || currentState == G4State_EventProc) { runAborted = true; MTkernel->BroadcastAbortRun(softAbort); } - else - { + else { G4cerr << "Run is not in progress. AbortRun() ignored." << G4endl; } } @@ -770,8 +688,7 @@ void G4MTRunManager::ThisWorkerEndEventLoop() } // -------------------------------------------------------------------- -void G4MTRunManager::NewActionRequest( - G4MTRunManager::WorkerActionRequest newRequest) +void G4MTRunManager::NewActionRequest(G4MTRunManager::WorkerActionRequest newRequest) { nextActionRequestBarrier.Wait((G4int)GetNumberActiveThreads()); // nextActionRequest is a shared resource, but there is no @@ -781,8 +698,7 @@ void G4MTRunManager::NewActionRequest( } // -------------------------------------------------------------------- -G4MTRunManager::WorkerActionRequest -G4MTRunManager::ThisWorkerWaitForNextAction() +G4MTRunManager::WorkerActionRequest G4MTRunManager::ThisWorkerWaitForNextAction() { nextActionRequestBarrier.ThisWorkerReady(); return nextActionRequest; @@ -806,8 +722,7 @@ void G4MTRunManager::ThisWorkerProcessCommandsStackDone() // -------------------------------------------------------------------- void G4MTRunManager::SetPinAffinity(G4int n) { - if(n == 0) - { + if (n == 0) { G4Exception("G4MTRunManager::SetPinAffinity", "Run0114", FatalException, "Pin affinity must be >0 or <0."); } diff --git a/source/run/src/G4MTRunManagerKernel.cc b/source/run/src/G4MTRunManagerKernel.cc index 04b55d7a959..524a6da3608 100644 --- a/source/run/src/G4MTRunManagerKernel.cc +++ b/source/run/src/G4MTRunManagerKernel.cc @@ -28,20 +28,24 @@ // Author: M.Asai - July 2013 // -------------------------------------------------------------------- #include "G4MTRunManagerKernel.hh" -#include "G4AutoLock.hh" -#include "G4RegionStore.hh" -#include "G4StateManager.hh" +#include "G4AutoLock.hh" +#include "G4DecayTable.hh" #include "G4LogicalVolume.hh" #include "G4Material.hh" #include "G4MaterialTable.hh" #include "G4PVParameterised.hh" #include "G4PVReplica.hh" +#include "G4ParticleDefinition.hh" +#include "G4ParticleTable.hh" +#include "G4ParticleTableIterator.hh" #include "G4PhysicalVolumeStore.hh" #include "G4PhysicsVector.hh" #include "G4PolyconeSide.hh" #include "G4PolyhedraSide.hh" #include "G4Region.hh" +#include "G4RegionStore.hh" +#include "G4StateManager.hh" #include "G4UImanager.hh" #include "G4UserWorkerInitialization.hh" #include "G4UserWorkerThreadInitialization.hh" @@ -54,12 +58,6 @@ #include "G4WorkerRunManager.hh" #include "G4WorkerThread.hh" -#include "G4DecayTable.hh" -#include "G4ParticleDefinition.hh" -#include "G4ParticleTable.hh" -#include "G4ParticleTableIterator.hh" -#include "G4VDecayChannel.hh" - std::vector* G4MTRunManagerKernel::workerRMvector = nullptr; G4ThreadLocal G4WorkerThread* G4MTRunManagerKernel::wThreadContext = nullptr; @@ -67,12 +65,11 @@ G4ThreadLocal G4WorkerThread* G4MTRunManagerKernel::wThreadContext = nullptr; // -------------------------------------------------------------------- namespace { - G4Mutex workerRMMutex = G4MUTEX_INITIALIZER; +G4Mutex workerRMMutex = G4MUTEX_INITIALIZER; } // -------------------------------------------------------------------- -G4MTRunManagerKernel::G4MTRunManagerKernel() - : G4RunManagerKernel(masterRMK) +G4MTRunManagerKernel::G4MTRunManagerKernel() : G4RunManagerKernel(masterRMK) { // This version of the constructor should never be called in sequential mode! #ifndef G4MULTITHREADED @@ -82,12 +79,10 @@ G4MTRunManagerKernel::G4MTRunManagerKernel() "is set to off)."; msg << " This type of RunManager can only be used in mult-threaded " "applications."; - G4Exception("G4RunManagerKernel::G4RunManagerKernel()", "Run0109", - FatalException, msg); + G4Exception("G4RunManagerKernel::G4RunManagerKernel()", "Run0109", FatalException, msg); #endif G4AutoLock l(&workerRMMutex); - if(workerRMvector == nullptr) - workerRMvector = new std::vector; + if (workerRMvector == nullptr) workerRMvector = new std::vector; l.unlock(); // Set flag that a MT-type kernel has been instantiated G4Threading::SetMultithreadedApplication(true); @@ -97,15 +92,12 @@ G4MTRunManagerKernel::G4MTRunManagerKernel() G4MTRunManagerKernel::~G4MTRunManagerKernel() { G4AutoLock l(&workerRMMutex); - if(workerRMvector != nullptr) - { - if(workerRMvector->size() > 0) - { + if (workerRMvector != nullptr) { + if (!workerRMvector->empty()) { G4ExceptionDescription msg; - msg << "G4MTRunManagerKernel is to be deleted while " - << workerRMvector->size() << " G4WorkerRunManager are still alive."; - G4Exception("G4RunManagerKernel::~G4RunManagerKernel()", "Run10035", - FatalException, msg); + msg << "G4MTRunManagerKernel is to be deleted while " << workerRMvector->size() + << " G4WorkerRunManager are still alive."; + G4Exception("G4RunManagerKernel::~G4RunManagerKernel()", "Run10035", FatalException, msg); } delete workerRMvector; workerRMvector = nullptr; @@ -139,11 +131,11 @@ void G4MTRunManagerKernel::StartThread(G4WorkerThread* context) // All the rest that is not invariant should be incapsulated into // the context (or, as for wThreadContext be G4ThreadLocal) //!!!!!!!!!!!!!!!!!!!!!!!!!! - //#ifdef G4MULTITHREADED - // turnontpmalloc(); - //#endif + // #ifdef G4MULTITHREADED + // turnontpmalloc(); + // #endif G4Threading::WorkerThreadJoinsPool(); - wThreadContext = context; + wThreadContext = context; G4MTRunManager* masterRM = G4MTRunManager::GetMasterRunManager(); //============================ @@ -166,30 +158,24 @@ void G4MTRunManagerKernel::StartThread(G4WorkerThread* context) // Step-1: Random number engine //============================ // RNG Engine needs to be initialised by "cloning" the master one. - const CLHEP::HepRandomEngine* masterEngine = - masterRM->getMasterRandomEngine(); + const CLHEP::HepRandomEngine* masterEngine = masterRM->getMasterRandomEngine(); masterRM->GetUserWorkerThreadInitialization()->SetupRNGEngine(masterEngine); //============================ // Step-2: Initialise worker thread //============================ - if(masterRM->GetUserWorkerInitialization()) - { + if (masterRM->GetUserWorkerInitialization() != nullptr) { masterRM->GetUserWorkerInitialization()->WorkerInitialize(); } - if(masterRM->GetUserActionInitialization()) - { - G4VSteppingVerbose* sv = - masterRM->GetUserActionInitialization()->InitializeSteppingVerbose(); - if(sv != nullptr) - { + if (masterRM->GetUserActionInitialization() != nullptr) { + G4VSteppingVerbose* sv = masterRM->GetUserActionInitialization()->InitializeSteppingVerbose(); + if (sv != nullptr) { G4VSteppingVerbose::SetInstance(sv); } } // Now initialise worker part of shared objects (geometry/physics) wThreadContext->BuildGeometryAndPhysicsVector(); - G4WorkerRunManager* wrm = - masterRM->GetUserWorkerThreadInitialization()->CreateWorkerRunManager(); + G4WorkerRunManager* wrm = masterRM->GetUserWorkerThreadInitialization()->CreateWorkerRunManager(); wrm->SetWorkerThread(wThreadContext); G4AutoLock wrmm(&workerRMMutex); workerRMvector->push_back(wrm); @@ -199,22 +185,18 @@ void G4MTRunManagerKernel::StartThread(G4WorkerThread* context) // Step-3: Setup worker run manager //================================ // Set the detector and physics list to the worker thread. Share with master - const G4VUserDetectorConstruction* detector = - masterRM->GetUserDetectorConstruction(); - wrm->G4RunManager::SetUserInitialization( - const_cast(detector)); + const G4VUserDetectorConstruction* detector = masterRM->GetUserDetectorConstruction(); + wrm->G4RunManager::SetUserInitialization(const_cast(detector)); const G4VUserPhysicsList* physicslist = masterRM->GetUserPhysicsList(); wrm->SetUserInitialization(const_cast(physicslist)); //================================ // Step-4: Initialise worker run manager //================================ - if(masterRM->GetUserActionInitialization()) - { + if (masterRM->GetUserActionInitialization() != nullptr) { masterRM->GetNonConstUserActionInitialization()->Build(); } - if(masterRM->GetUserWorkerInitialization()) - { + if (masterRM->GetUserWorkerInitialization() != nullptr) { masterRM->GetUserWorkerInitialization()->WorkerStart(); } wrm->Initialize(); @@ -230,17 +212,13 @@ void G4MTRunManagerKernel::StartThread(G4WorkerThread* context) //=============================== // Step-6: Terminate worker thread //=============================== - if(masterRM->GetUserWorkerInitialization()) - { + if (masterRM->GetUserWorkerInitialization() != nullptr) { masterRM->GetUserWorkerInitialization()->WorkerStop(); } wrmm.lock(); - for(auto itrWrm = workerRMvector->cbegin(); - itrWrm != workerRMvector->cend(); ++itrWrm) - { - if((*itrWrm) == wrm) - { + for (auto itrWrm = workerRMvector->cbegin(); itrWrm != workerRMvector->cend(); ++itrWrm) { + if ((*itrWrm) == wrm) { workerRMvector->erase(itrWrm); break; } @@ -262,14 +240,11 @@ void G4MTRunManagerKernel::SetUpDecayChannels() { auto pItr = G4ParticleTable::GetParticleTable()->GetIterator(); pItr->reset(); - while((*pItr)()) - { + while ((*pItr)()) { G4DecayTable* dt = pItr->value()->GetDecayTable(); - if(dt != nullptr) - { + if (dt != nullptr) { G4int nCh = dt->entries(); - for(G4int i = 0; i < nCh; ++i) - { + for (G4int i = 0; i < nCh; ++i) { dt->GetDecayChannel(i)->GetDaughter(0); } } @@ -280,9 +255,8 @@ void G4MTRunManagerKernel::SetUpDecayChannels() void G4MTRunManagerKernel::BroadcastAbortRun(G4bool softAbort) { G4AutoLock wrmm(&workerRMMutex); - - for(auto itr = workerRMvector->cbegin(); itr != workerRMvector->cend(); ++itr) - { - (*itr)->AbortRun(softAbort); + + for (const auto& itr : *workerRMvector) { + itr->AbortRun(softAbort); } } diff --git a/source/run/src/G4MatScanMessenger.cc b/source/run/src/G4MatScanMessenger.cc index 48899994a21..d44cf0c45a1 100644 --- a/source/run/src/G4MatScanMessenger.cc +++ b/source/run/src/G4MatScanMessenger.cc @@ -54,17 +54,14 @@ G4MatScanMessenger::G4MatScanMessenger(G4MaterialScanner* p1) scanCmd = new G4UIcmdWithoutParameter("/control/matScan/scan", this); scanCmd->SetGuidance("Start material scanning."); scanCmd->SetGuidance("Scanning range should be defined with"); - scanCmd->SetGuidance( - "/control/matScan/theta and /control/matSca/phi commands."); + scanCmd->SetGuidance("/control/matScan/theta and /control/matSca/phi commands."); scanCmd->AvailableForStates(G4State_Idle); thetaCmd = new G4UIcommand("/control/matScan/theta", this); thetaCmd->SetGuidance("Define theta range."); - thetaCmd->SetGuidance( - "Usage : /control/matScan/theta [nbin] [thetaMin] [thetaSpan] [unit]"); + thetaCmd->SetGuidance("Usage : /control/matScan/theta [nbin] [thetaMin] [thetaSpan] [unit]"); thetaCmd->SetGuidance("Notation of angles :"); - thetaCmd->SetGuidance( - " theta --- +Z axis : +90 deg. / X-Y plane : 0 deg. / -Z axis : -90 deg."); + thetaCmd->SetGuidance(" theta --- +Z axis : +90 deg. / X-Y plane : 0 deg. / -Z axis : -90 deg."); par = new G4UIparameter("nbin", 'i', false); par->SetParameterRange("nbin>0"); thetaCmd->SetParameter(par); @@ -81,8 +78,7 @@ G4MatScanMessenger::G4MatScanMessenger(G4MaterialScanner* p1) phiCmd = new G4UIcommand("/control/matScan/phi", this); phiCmd->SetGuidance("Define phi range."); - phiCmd->SetGuidance( - "Usage : /control/matScan/phi [nbin] [phiMin] [phiSpan] [unit]"); + phiCmd->SetGuidance("Usage : /control/matScan/phi [nbin] [phiMin] [phiSpan] [unit]"); phiCmd->SetGuidance("Notation of angles :"); phiCmd->SetGuidance( " phi --- +X axis : 0 deg. / +Y axis : 90 deg. / -X axis : 180 " @@ -104,8 +100,7 @@ G4MatScanMessenger::G4MatScanMessenger(G4MaterialScanner* p1) singleCmd = new G4UIcommand("/control/matScan/singleMeasure", this); singleCmd->SetGuidance("Measure thickness for one particular direction."); singleCmd->SetGuidance("Notation of angles :"); - singleCmd->SetGuidance( - " theta --- +Z axis : +90 deg. / X-Y plane : 0 deg. / -Z axis : -90 deg."); + singleCmd->SetGuidance(" theta --- +Z axis : +90 deg. / X-Y plane : 0 deg. / -Z axis : -90 deg."); singleCmd->SetGuidance( " phi --- +X axis : 0 deg. / +Y axis : 90 deg. / -X axis : " "180 deg. / -Y axis : 270 deg."); @@ -116,17 +111,14 @@ G4MatScanMessenger::G4MatScanMessenger(G4MaterialScanner* p1) singleCmd->SetParameter(par); par = new G4UIparameter("unit", 'c', true); par->SetDefaultValue("deg"); - par->SetParameterCandidates( - singleCmd->UnitsList(singleCmd->CategoryOf("deg"))); + par->SetParameterCandidates(singleCmd->UnitsList(singleCmd->CategoryOf("deg"))); singleCmd->SetParameter(par); single2Cmd = new G4UIcmdWith3Vector("/control/matScan/singleTo", this); - single2Cmd->SetGuidance( - "Measure thickness for one direction defined by a unit vector."); + single2Cmd->SetGuidance("Measure thickness for one direction defined by a unit vector."); single2Cmd->SetParameterName("X", "Y", "Z", false); - eyePosCmd = - new G4UIcmdWith3VectorAndUnit("/control/matScan/eyePosition", this); + eyePosCmd = new G4UIcmdWith3VectorAndUnit("/control/matScan/eyePosition", this); eyePosCmd->SetGuidance("Define the eye position."); eyePosCmd->SetParameterName("X", "Y", "Z", true); eyePosCmd->SetDefaultValue(G4ThreeVector(0., 0., 0.)); @@ -141,8 +133,7 @@ G4MatScanMessenger::G4MatScanMessenger(G4MaterialScanner* p1) regionCmd = new G4UIcmdWithAString("/control/matScan/region", this); regionCmd->SetGuidance("Define region name to be scanned."); - regionCmd->SetGuidance( - "/control/matScan/regionSensitive command is automatically"); + regionCmd->SetGuidance("/control/matScan/regionSensitive command is automatically"); regionCmd->SetGuidance("set to TRUE with this command."); regionCmd->SetParameterName("region", true); regionCmd->SetDefaultValue("DefaultRegionForTheWorld"); @@ -166,36 +157,27 @@ G4MatScanMessenger::~G4MatScanMessenger() G4String G4MatScanMessenger::GetCurrentValue(G4UIcommand* command) { G4String currentValue; - if(command == thetaCmd) - { + if (command == thetaCmd) { currentValue = thetaCmd->ConvertToString(theScanner->GetNTheta()); currentValue += " "; - currentValue += - thetaCmd->ConvertToString((theScanner->GetThetaMin()) / deg); + currentValue += thetaCmd->ConvertToString((theScanner->GetThetaMin()) / deg); currentValue += " "; - currentValue += - thetaCmd->ConvertToString((theScanner->GetThetaSpan()) / deg); + currentValue += thetaCmd->ConvertToString((theScanner->GetThetaSpan()) / deg); } - else if(command == phiCmd) - { + else if (command == phiCmd) { currentValue = phiCmd->ConvertToString(theScanner->GetNPhi()); currentValue += " "; currentValue += phiCmd->ConvertToString((theScanner->GetPhiMin()) / deg); currentValue += " "; currentValue += phiCmd->ConvertToString((theScanner->GetPhiSpan()) / deg); } - else if(command == eyePosCmd) - { - currentValue = - eyePosCmd->ConvertToString(theScanner->GetEyePosition(), "m"); + else if (command == eyePosCmd) { + currentValue = eyePosCmd->ConvertToString(theScanner->GetEyePosition(), "m"); } - else if(command == regSenseCmd) - { - currentValue = - regSenseCmd->ConvertToString(theScanner->GetRegionSensitive()); + else if (command == regSenseCmd) { + currentValue = regSenseCmd->ConvertToString(theScanner->GetRegionSensitive()); } - else if(command == regionCmd) - { + else if (command == regionCmd) { currentValue = theScanner->GetRegionName(); } return currentValue; @@ -204,74 +186,64 @@ G4String G4MatScanMessenger::GetCurrentValue(G4UIcommand* command) // -------------------------------------------------------------------- void G4MatScanMessenger::SetNewValue(G4UIcommand* command, G4String newValue) { - if(command == scanCmd) - { + if (command == scanCmd) { theScanner->Scan(); } - else if(command == thetaCmd) - { + else if (command == thetaCmd) { G4Tokenizer next(newValue); - G4int nbin = StoI(next()); - G4double thetaMin = StoD(next()); + G4int nbin = StoI(next()); + G4double thetaMin = StoD(next()); G4double thetaSpan = StoD(next()); - G4String unit = next(); + G4String unit = next(); thetaMin *= thetaCmd->ValueOf(unit); thetaSpan *= thetaCmd->ValueOf(unit); theScanner->SetNTheta(nbin); theScanner->SetThetaMin(thetaMin); theScanner->SetThetaSpan(thetaSpan); } - else if(command == phiCmd) - { + else if (command == phiCmd) { G4Tokenizer next(newValue); - G4int nbin = StoI(next()); - G4double phiMin = StoD(next()); + G4int nbin = StoI(next()); + G4double phiMin = StoD(next()); G4double phiSpan = StoD(next()); - G4String unit = next(); + G4String unit = next(); phiMin *= phiCmd->ValueOf(unit); phiSpan *= phiCmd->ValueOf(unit); theScanner->SetNPhi(nbin); theScanner->SetPhiMin(phiMin); theScanner->SetPhiSpan(phiSpan); } - else if(command == eyePosCmd) - { + else if (command == eyePosCmd) { theScanner->SetEyePosition(eyePosCmd->GetNew3VectorValue(newValue)); } - else if(command == regSenseCmd) - { + else if (command == regSenseCmd) { theScanner->SetRegionSensitive(regSenseCmd->GetNewBoolValue(newValue)); } - else if(command == regionCmd) - { - if(theScanner->SetRegionName(newValue)) - theScanner->SetRegionSensitive(true); + else if (command == regionCmd) { + if (theScanner->SetRegionName(newValue)) theScanner->SetRegionSensitive(true); } - else if(command == singleCmd || command == single2Cmd) - { - G4int ntheta = theScanner->GetNTheta(); - G4double thetaMin = theScanner->GetThetaMin(); + else if (command == singleCmd || command == single2Cmd) { + G4int ntheta = theScanner->GetNTheta(); + G4double thetaMin = theScanner->GetThetaMin(); G4double thetaSpan = theScanner->GetThetaSpan(); - G4int nphi = theScanner->GetNPhi(); - G4double phiMin = theScanner->GetPhiMin(); - G4double phiSpan = theScanner->GetPhiSpan(); + G4int nphi = theScanner->GetNPhi(); + G4double phiMin = theScanner->GetPhiMin(); + G4double phiSpan = theScanner->GetPhiSpan(); G4double theta = 0.; - G4double phi = 0.; - if(command == singleCmd) - { + G4double phi = 0.; + if (command == singleCmd) { G4Tokenizer next(newValue); - theta = StoD(next()); - phi = StoD(next()); + theta = StoD(next()); + phi = StoD(next()); G4String unit = next(); theta *= singleCmd->ValueOf(unit); phi *= singleCmd->ValueOf(unit); } - else if(command == single2Cmd) - { + else if (command == single2Cmd) { G4ThreeVector v = single2Cmd->GetNew3VectorValue(newValue); - theta = 90. * deg - v.theta(); - phi = v.phi(); + theta = 90. * deg - v.theta(); + phi = v.phi(); } theScanner->SetNTheta(1); theScanner->SetThetaMin(theta); diff --git a/source/run/src/G4MaterialScanner.cc b/source/run/src/G4MaterialScanner.cc index 74dc850665d..a4951432023 100644 --- a/source/run/src/G4MaterialScanner.cc +++ b/source/run/src/G4MaterialScanner.cc @@ -49,13 +49,13 @@ // -------------------------------------------------------------------- G4MaterialScanner::G4MaterialScanner() { - theRayShooter = new G4RayShooter(); - theMessenger = new G4MatScanMessenger(this); + theRayShooter = new G4RayShooter(); + theMessenger = new G4MatScanMessenger(this); theEventManager = G4EventManager::GetEventManager(); eyePosition = G4ThreeVector(0., 0., 0.); - thetaSpan = 90. * deg; - phiSpan = 360. * deg; + thetaSpan = 90. * deg; + phiSpan = 360. * deg; } // -------------------------------------------------------------------- @@ -69,16 +69,14 @@ G4MaterialScanner::~G4MaterialScanner() // -------------------------------------------------------------------- void G4MaterialScanner::Scan() { - G4StateManager* theStateMan = G4StateManager::GetStateManager(); + G4StateManager* theStateMan = G4StateManager::GetStateManager(); G4ApplicationState currentState = theStateMan->GetCurrentState(); - if(currentState != G4State_Idle) - { + if (currentState != G4State_Idle) { G4cerr << "Illegal application state - Scan() ignored." << G4endl; return; } - if(theMatScannerSteppingAction == nullptr) - { + if (theMatScannerSteppingAction == nullptr) { theMatScannerSteppingAction = new G4MSSteppingAction(); } StoreUserActions(); @@ -89,7 +87,7 @@ void G4MaterialScanner::Scan() // -------------------------------------------------------------------- void G4MaterialScanner::StoreUserActions() { - theUserEventAction = theEventManager->GetUserEventAction(); + theUserEventAction = theEventManager->GetUserEventAction(); theUserStackingAction = theEventManager->GetUserStackingAction(); theUserTrackingAction = theEventManager->GetUserTrackingAction(); theUserSteppingAction = theEventManager->GetUserSteppingAction(); @@ -100,8 +98,7 @@ void G4MaterialScanner::StoreUserActions() theEventManager->SetUserAction(theMatScannerSteppingAction); G4SDManager* theSDMan = G4SDManager::GetSDMpointerIfExist(); - if(theSDMan != nullptr) - { + if (theSDMan != nullptr) { theSDMan->Activate("/", false); } @@ -119,8 +116,7 @@ void G4MaterialScanner::RestoreUserActions() theEventManager->SetUserAction(theUserSteppingAction); G4SDManager* theSDMan = G4SDManager::GetSDMpointerIfExist(); - if(theSDMan != nullptr) - { + if (theSDMan != nullptr) { theSDMan->Activate("/", true); } } @@ -131,73 +127,55 @@ void G4MaterialScanner::DoScan() // Confirm material table is updated G4RunManagerKernel::GetRunManagerKernel()->UpdateRegion(); - ///// // Make sure Geantino has been initialized - ///// G4ProcessVector* pVector - ///// = - /// G4Geantino::GeantinoDefinition()->GetProcessManager()->GetProcessList(); - ///// for (G4int j=0; j < pVector->size(); ++j) { - ///// (*pVector)[j]->BuildPhysicsTable(*(G4Geantino::GeantinoDefinition())); - ///// } - // Close geometry and set the application state G4GeometryManager* geomManager = G4GeometryManager::GetInstance(); geomManager->OpenGeometry(); - geomManager->CloseGeometry(1, 0); + geomManager->CloseGeometry(true, false); G4ThreeVector center(0, 0, 0); - G4Navigator* navigator = G4TransportationManager::GetTransportationManager() - ->GetNavigatorForTracking(); - navigator->LocateGlobalPointAndSetup(center, 0, false); + G4Navigator* navigator = + G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking(); + navigator->LocateGlobalPointAndSetup(center, nullptr, false); G4StateManager* theStateMan = G4StateManager::GetStateManager(); theStateMan->SetNewState(G4State_GeomClosed); // Event loop G4int iEvent = 0; - for(G4int iTheta = 0; iTheta < nTheta; ++iTheta) - { + for (G4int iTheta = 0; iTheta < nTheta; ++iTheta) { G4double theta = thetaMin; - if(iTheta > 0) - theta += G4double(iTheta) * thetaSpan / G4double(nTheta - 1); + if (iTheta > 0) theta += G4double(iTheta) * thetaSpan / G4double(nTheta - 1); G4double aveLength = 0.; - G4double aveX0 = 0.; + G4double aveX0 = 0.; G4double aveLambda = 0.; G4cout << G4endl; - G4cout - << " Theta(deg) Phi(deg) Length(mm) x0 lambda0" - << G4endl; + G4cout << " Theta(deg) Phi(deg) Length(mm) x0 lambda0" << G4endl; G4cout << G4endl; - for(G4int iPhi = 0; iPhi < nPhi; ++iPhi) - { - G4Event* anEvent = new G4Event(iEvent++); - G4double phi = phiMin; - if(iPhi > 0) - phi += G4double(iPhi) * phiSpan / G4double(nPhi - 1); - eyeDirection = - G4ThreeVector(std::cos(theta) * std::cos(phi), - std::cos(theta) * std::sin(phi), std::sin(theta)); + for (G4int iPhi = 0; iPhi < nPhi; ++iPhi) { + auto anEvent = new G4Event(iEvent++); + G4double phi = phiMin; + if (iPhi > 0) phi += G4double(iPhi) * phiSpan / G4double(nPhi - 1); + eyeDirection = G4ThreeVector(std::cos(theta) * std::cos(phi), std::cos(theta) * std::sin(phi), + std::sin(theta)); theRayShooter->Shoot(anEvent, eyePosition, eyeDirection); theMatScannerSteppingAction->Initialize(regionSensitive, theRegion); theEventManager->ProcessOneEvent(anEvent); G4double length = theMatScannerSteppingAction->GetTotalStepLength(); - G4double x0 = theMatScannerSteppingAction->GetX0(); + G4double x0 = theMatScannerSteppingAction->GetX0(); G4double lambda = theMatScannerSteppingAction->GetLambda0(); - G4cout << " " << std::setw(11) << theta / deg << " " - << std::setw(11) << phi / deg << " " << std::setw(11) - << length / mm << " " << std::setw(11) << x0 << " " + G4cout << " " << std::setw(11) << theta / deg << " " << std::setw(11) << phi / deg + << " " << std::setw(11) << length / mm << " " << std::setw(11) << x0 << " " << std::setw(11) << lambda << G4endl; aveLength += length / mm; aveX0 += x0; aveLambda += lambda; } - if(nPhi > 1) - { + if (nPhi > 1) { G4cout << G4endl; - G4cout << " ave. for theta = " << std::setw(11) << theta / deg << " : " - << std::setw(11) << aveLength / nPhi << " " << std::setw(11) - << aveX0 / nPhi << " " << std::setw(11) << aveLambda / nPhi - << G4endl; + G4cout << " ave. for theta = " << std::setw(11) << theta / deg << " : " << std::setw(11) + << aveLength / nPhi << " " << std::setw(11) << aveX0 / nPhi << " " << std::setw(11) + << aveLambda / nPhi << G4endl; } } @@ -209,21 +187,17 @@ void G4MaterialScanner::DoScan() G4bool G4MaterialScanner::SetRegionName(const G4String& val) { G4Region* aRegion = G4RegionStore::GetInstance()->GetRegion(val); - if(aRegion != nullptr) - { - theRegion = aRegion; + if (aRegion != nullptr) { + theRegion = aRegion; regionName = val; return true; } - else - { - G4cerr << "Region <" << val << "> not found. Command ignored." << G4endl; - G4cerr << "Defined regions are : " << G4endl; - for(std::size_t i = 0; i < G4RegionStore::GetInstance()->size(); ++i) - { - G4cerr << " " << (*(G4RegionStore::GetInstance()))[i]->GetName(); - } - G4cerr << G4endl; - return false; + + G4cerr << "Region <" << val << "> not found. Command ignored." << G4endl; + G4cerr << "Defined regions are : " << G4endl; + for (const auto& i : *G4RegionStore::GetInstance()) { + G4cerr << " " << i->GetName(); } + G4cerr << G4endl; + return false; } diff --git a/source/run/src/G4MultiRunAction.cc b/source/run/src/G4MultiRunAction.cc index 03e98b25da3..a8d8659288f 100644 --- a/source/run/src/G4MultiRunAction.cc +++ b/source/run/src/G4MultiRunAction.cc @@ -28,27 +28,25 @@ // Author: A.Dotti, 17 January 2016 // -------------------------------------------------------------------- -#include - #include "G4MultiRunAction.hh" + #include "G4Run.hh" +#include + // -------------------------------------------------------------------- G4Run* G4MultiRunAction::GenerateRun() { G4Run* aRun = nullptr; - for(auto& ru : *this) - { + for (auto& ru : *this) { auto anotherRun = ru->GenerateRun(); - if(aRun != nullptr && anotherRun != nullptr) - { + if (aRun != nullptr && anotherRun != nullptr) { G4Exception("G4MultiRunAction::GenerateRun()", "Run0036", FatalException, "More than one registered UserRunAction return an instance" " of G4Run, not allowed."); return nullptr; } - if(anotherRun != nullptr) - aRun = anotherRun; + if (anotherRun != nullptr) aRun = anotherRun; } return aRun; } @@ -56,21 +54,18 @@ G4Run* G4MultiRunAction::GenerateRun() // -------------------------------------------------------------------- void G4MultiRunAction::BeginOfRunAction(const G4Run* run) { - std::for_each(begin(), end(), - [run](G4UserRunActionUPtr& e) { e->BeginOfRunAction(run); }); + std::for_each(begin(), end(), [run](G4UserRunActionUPtr& e) { e->BeginOfRunAction(run); }); } // -------------------------------------------------------------------- void G4MultiRunAction::EndOfRunAction(const G4Run* run) { - std::for_each(begin(), end(), - [run](G4UserRunActionUPtr& e) { e->EndOfRunAction(run); }); + std::for_each(begin(), end(), [run](G4UserRunActionUPtr& e) { e->EndOfRunAction(run); }); } // -------------------------------------------------------------------- void G4MultiRunAction::SetMaster(G4bool val) { G4UserRunAction::SetMaster(val); - std::for_each(begin(), end(), - [val](G4UserRunActionUPtr& e) { e->SetMaster(val); }); + std::for_each(begin(), end(), [val](G4UserRunActionUPtr& e) { e->SetMaster(val); }); } diff --git a/source/run/src/G4PhysicsListHelper.cc b/source/run/src/G4PhysicsListHelper.cc index da71735a649..dda81baef09 100644 --- a/source/run/src/G4PhysicsListHelper.cc +++ b/source/run/src/G4PhysicsListHelper.cc @@ -28,31 +28,27 @@ // Author: H.Kurashige, 29 April 2011 // -------------------------------------------------------------------- -#include -#include - #include "G4PhysicsListHelper.hh" + +#include "G4CoupledTransportation.hh" +#include "G4DecayProcessType.hh" +#include "G4EmProcessSubType.hh" +#include "G4HadronicProcessType.hh" +#include "G4LowEnergyEmProcessSubType.hh" +#include "G4OpProcessSubType.hh" #include "G4ParticleDefinition.hh" #include "G4ParticleTable.hh" #include "G4ProcessManager.hh" -#include "globals.hh" -#include "G4ios.hh" - -#include "G4CoupledTransportation.hh" +#include "G4ProcessType.hh" #include "G4RunManagerKernel.hh" #include "G4ScoringManager.hh" #include "G4Transportation.hh" - -#include "G4ProcessManager.hh" - -#include "G4ProcessType.hh" #include "G4TransportationProcessType.hh" -#include "G4DecayProcessType.hh" -#include "G4EmProcessSubType.hh" -#include "G4LowEnergyEmProcessSubType.hh" -#include "G4OpProcessSubType.hh" -#include "G4HadronicProcessType.hh" +#include "G4ios.hh" +#include "globals.hh" +#include +#include G4ThreadLocal G4PhysicsListHelper* G4PhysicsListHelper::pPLHelper = nullptr; @@ -60,14 +56,13 @@ G4ThreadLocal G4PhysicsListHelper* G4PhysicsListHelper::pPLHelper = nullptr; G4PhysicsListHelper::G4PhysicsListHelper() { // pointer to the particle table - theParticleTable = G4ParticleTable::GetParticleTable(); + theParticleTable = G4ParticleTable::GetParticleTable(); aParticleIterator = theParticleTable->GetIterator(); ReadOrdingParameterTable(); #ifdef G4VERBOSE - if(verboseLevel > 1) - { + if (verboseLevel > 1) { DumpOrdingParameterTable(); } #endif @@ -76,11 +71,10 @@ G4PhysicsListHelper::G4PhysicsListHelper() // -------------------------------------------------------------------- G4PhysicsListHelper::~G4PhysicsListHelper() { - if(theTable != nullptr) - { + if (theTable != nullptr) { theTable->clear(); delete theTable; - theTable = nullptr; + theTable = nullptr; sizeOfTable = 0; } } @@ -88,8 +82,7 @@ G4PhysicsListHelper::~G4PhysicsListHelper() // -------------------------------------------------------------------- G4PhysicsListHelper* G4PhysicsListHelper::GetPhysicsListHelper() { - if(pPLHelper == nullptr) - { + if (pPLHelper == nullptr) { static G4ThreadLocalSingleton inst; pPLHelper = inst.Instance(); } @@ -99,121 +92,103 @@ G4PhysicsListHelper* G4PhysicsListHelper::GetPhysicsListHelper() // -------------------------------------------------------------------- void G4PhysicsListHelper::CheckParticleList() const { - G4bool isElectron = false; - G4bool isPositron = false; - G4bool isGamma = false; - G4bool isProton = false; - G4bool isGenericIon = false; - G4bool isAnyIon = false; + G4bool isElectron = false; + G4bool isPositron = false; + G4bool isGamma = false; + G4bool isProton = false; + G4bool isGenericIon = false; + G4bool isAnyIon = false; G4bool isAnyChargedBaryon = false; - G4bool isEmProc = false; + G4bool isEmProc = false; // loop over all particles in G4ParticleTable aParticleIterator->reset(); - while((*aParticleIterator)()) - { + while ((*aParticleIterator)()) { G4ParticleDefinition* particle = aParticleIterator->value(); - G4String name = particle->GetParticleName(); + G4String name = particle->GetParticleName(); // check if any EM process exists - if(!isEmProc) - { + if (!isEmProc) { G4ProcessVector* list = particle->GetProcessManager()->GetProcessList(); - for(G4int idx = 0; idx < (G4int)list->size(); ++idx) - { + for (G4int idx = 0; idx < (G4int)list->size(); ++idx) { isEmProc = ((*list)[idx])->GetProcessType() == fElectromagnetic; - if(isEmProc) - break; + if (isEmProc) break; } } - if(name == "e-") + if (name == "e-") isElectron = true; - else if(name == "e+") + else if (name == "e+") isPositron = true; - else if(name == "gamma") + else if (name == "gamma") isGamma = true; - else if(name == "GenericIon") + else if (name == "GenericIon") isGenericIon = true; - else if(name == "proton") + else if (name == "proton") isProton = true; - else if(particle->GetParticleType() == "nucleus") + else if (particle->GetParticleType() == "nucleus") isAnyIon = true; - else if(particle->GetParticleType() == "baryon") - { - if(particle->GetPDGCharge() != 0.0) - isAnyChargedBaryon = true; + else if (particle->GetParticleType() == "baryon") { + if (particle->GetPDGCharge() != 0.0) isAnyChargedBaryon = true; } } - if(!isEmProc) - return; + if (!isEmProc) return; // RULE 1 // e+, e- and gamma should exist // if one of them exist - G4bool isEmBasic = isElectron || isPositron || isGamma; + G4bool isEmBasic = isElectron || isPositron || isGamma; G4bool isMissingEmBasic = !isElectron || !isPositron || !isGamma; - if(isEmBasic && isMissingEmBasic) - { + if (isEmBasic && isMissingEmBasic) { G4String missingName = ""; - if(!isElectron) - missingName += "e- "; - if(!isPositron) - missingName += "e+ "; - if(!isGamma) - missingName += "gamma "; + if (!isElectron) missingName += "e- "; + if (!isPositron) missingName += "e+ "; + if (!isGamma) missingName += "gamma "; #ifdef G4VERBOSE - if(verboseLevel > 0) - { - G4cout << "G4PhysicsListHelper::CheckParticleList: " << missingName - << " do not exist " << G4endl; - G4cout << " These particle are necessary for basic EM processes" + if (verboseLevel > 0) { + G4cout << "G4PhysicsListHelper::CheckParticleList: " << missingName << " do not exist " << G4endl; + G4cout << " These particle are necessary for basic EM processes" << G4endl; } #endif - G4Exception("G4PhysicsListHelper::CheckParticleList", "Run0101", - FatalException, "Missing EM basic particle"); + G4Exception("G4PhysicsListHelper::CheckParticleList", "Run0101", FatalException, + "Missing EM basic particle"); } // RULE 2 // proton should exist // if any other charged baryon exist - if(!isProton && isAnyChargedBaryon) - { + if (!isProton && isAnyChargedBaryon) { G4String missingName = "proton "; #ifdef G4VERBOSE - if(verboseLevel > 0) - { - G4cout << "G4PhysicsListHelper::CheckParticleList: " << missingName - << " does not exist " << G4endl; + if (verboseLevel > 0) { + G4cout << "G4PhysicsListHelper::CheckParticleList: " << missingName << " does not exist " + << G4endl; G4cout << " Proton is necessary for EM baryon processes" << G4endl; } #endif missingName += " should be created "; - G4Exception("G4PhysicsListHelper::CheckParticleList", "Run0102", - FatalException, "Missing Proton"); + G4Exception("G4PhysicsListHelper::CheckParticleList", "Run0102", FatalException, + "Missing Proton"); } // RULE 3 // GenericIonn should exist // if any other ion exist - if(!isGenericIon && isAnyIon) - { + if (!isGenericIon && isAnyIon) { G4String missingName = "GenericIon "; #ifdef G4VERBOSE - if(verboseLevel > 0) - { - G4cout << "G4PhysicsListHelper::CheckParticleList: " << missingName - << " does not exist " << G4endl; - G4cout << " GenericIon should be created if any ion is necessary" + if (verboseLevel > 0) { + G4cout << "G4PhysicsListHelper::CheckParticleList: " << missingName << " does not exist " << G4endl; + G4cout << " GenericIon should be created if any ion is necessary" << G4endl; } #endif - G4Exception("G4PhysicsListHelper::CheckParticleList", "Run0103", - FatalException, "Missing GenericIon"); + G4Exception("G4PhysicsListHelper::CheckParticleList", "Run0103", FatalException, + "Missing GenericIon"); } } @@ -223,65 +198,52 @@ void G4PhysicsListHelper::AddTransportation() G4int verboseLevelTransport = 0; #ifdef G4VERBOSE - if(verboseLevel > 2) - { + if (verboseLevel > 2) { G4cout << "G4PhysicsListHelper::AddTransportation() " << G4endl; } #endif - G4int nParaWorld = - G4RunManagerKernel::GetRunManagerKernel()->GetNumberOfParallelWorld(); + G4int nParaWorld = G4RunManagerKernel::GetRunManagerKernel()->GetNumberOfParallelWorld(); - if(nParaWorld > 0 || useCoupledTransportation || - G4ScoringManager::GetScoringManagerIfExist()) + if (nParaWorld > 0 || useCoupledTransportation + || (G4ScoringManager::GetScoringManagerIfExist() != nullptr)) { auto coupledTransport = new G4CoupledTransportation(verboseLevelTransport); - if(theLooperThresholds == 0) - coupledTransport->SetLowLooperThresholds(); - if(theLooperThresholds == 2) - coupledTransport->SetHighLooperThresholds(); + if (theLooperThresholds == 0) coupledTransport->SetLowLooperThresholds(); + if (theLooperThresholds == 2) coupledTransport->SetHighLooperThresholds(); theTransportationProcess = coupledTransport; - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "--- G4CoupledTransportation is used " << G4endl; } } - else - { + else { auto simpleTransport = new G4Transportation(verboseLevelTransport); - if(theLooperThresholds == 0) - simpleTransport->SetLowLooperThresholds(); - if(theLooperThresholds == 2) - simpleTransport->SetHighLooperThresholds(); + if (theLooperThresholds == 0) simpleTransport->SetLowLooperThresholds(); + if (theLooperThresholds == 2) simpleTransport->SetHighLooperThresholds(); theTransportationProcess = simpleTransport; } // loop over all particles in G4ParticleTable aParticleIterator->reset(); - while((*aParticleIterator)()) - { + while ((*aParticleIterator)()) { G4ParticleDefinition* particle = aParticleIterator->value(); - G4ProcessManager* pmanager = particle->GetProcessManager(); + G4ProcessManager* pmanager = particle->GetProcessManager(); // Add transportation process for all particles - if(pmanager == 0) - { + if (pmanager == nullptr) { // Error !! no process manager #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4PhysicsListHelper::AddTransportation " - << " : No Process Manager for " << particle->GetParticleName() - << G4endl; + << " : No Process Manager for " << particle->GetParticleName() << G4endl; } #endif - G4Exception("G4PhysicsListHelper::AddTransportation", "Run0104", - FatalException, "No process manager"); + G4Exception("G4PhysicsListHelper::AddTransportation", "Run0104", FatalException, + "No process manager"); continue; } // Molecule use different type transportation - if(particle->GetParticleType() == "Molecule") - continue; + if (particle->GetParticleType() == "Molecule") continue; // add transportation with ordering = ( -1, "first", "first" ) pmanager->AddProcess(theTransportationProcess); @@ -296,80 +258,68 @@ void G4PhysicsListHelper::ReadOrdingParameterTable() G4bool readInFile = false; std::ifstream fIn; - if(std::getenv("G4ORDPARAMTABLE")) - { + if (std::getenv("G4ORDPARAMTABLE") != nullptr) { ordParamFileName = std::getenv("G4ORDPARAMTABLE"); #ifdef G4VERBOSE - if(verboseLevel > 1) - { - G4cout << "G4PhysicsListHelper::ReadOrdingParameterTable :" - << ordParamFileName << " is assigned to Ordering Parameter Table " - << G4endl; + if (verboseLevel > 1) { + G4cout << "G4PhysicsListHelper::ReadOrdingParameterTable :" << ordParamFileName + << " is assigned to Ordering Parameter Table " << G4endl; } #endif // open input file // fIn.open(ordParamFileName, std::ios::in); // check if the file has been opened successfully - if(!fIn) - { + if (!fIn) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4PhysicsListHelper::ReadOrdingParameterTable " << " Can not open file " << ordParamFileName << G4endl; } #endif - G4Exception("G4PhysicsListHelper::ReadOrdingParameterTable", "Run0105", - JustWarning, "Fail to open ordering parameter table "); + G4Exception("G4PhysicsListHelper::ReadOrdingParameterTable", "Run0105", JustWarning, + "Fail to open ordering parameter table "); } - else - { + else { readInFile = true; } } // create OrdParamTable - if(theTable != nullptr) - { + if (theTable != nullptr) { theTable->clear(); delete theTable; - theTable = nullptr; + theTable = nullptr; sizeOfTable = 0; } - theTable = new G4OrdParamTable(); + theTable = new G4OrdParamTable(); sizeOfTable = 0; - if(readInFile) - { + if (readInFile) { // read in the file and fill the table - while(!fIn.eof()) - { + while (!fIn.eof()) { G4PhysicsListOrderingParameter tmp; G4int flag; - fIn >> tmp.processTypeName >> tmp.processType >> tmp.processSubType >> - tmp.ordering[0] >> tmp.ordering[1] >> tmp.ordering[2] >> flag; + fIn >> tmp.processTypeName >> tmp.processType >> tmp.processSubType >> tmp.ordering[0] + >> tmp.ordering[1] >> tmp.ordering[2] >> flag; tmp.isDuplicable = (flag != 0); theTable->push_back(tmp); ++sizeOfTable; } fIn.close(); } - else - { + else { ReadInDefaultOrderingParameter(); } - if(sizeOfTable == 0) - { + if (sizeOfTable == 0) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4PhysicsListHelper::ReadOrdingParameterTable " << " Empty file " << ordParamFileName << G4endl; } #endif - G4Exception("G4PhysicsListHelper::ReadOrdingParameterTable", "Run0106", - JustWarning, "The ordering parameter table is empty "); + G4Exception("G4PhysicsListHelper::ReadOrdingParameterTable", "Run0106", JustWarning, + "The ordering parameter table is empty "); delete theTable; theTable = nullptr; } @@ -379,20 +329,16 @@ void G4PhysicsListHelper::ReadOrdingParameterTable() // -------------------------------------------------------------------- void G4PhysicsListHelper::DumpOrdingParameterTable(G4int subType) const { - if(theTable == nullptr) - { + if (theTable == nullptr) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4PhysicsListHelper::DumpOrdingParameterTable " - << " No ordering parameter table : " << ordParamFileName - << G4endl; + << " No ordering parameter table : " << ordParamFileName << G4endl; } #endif return; } - G4cout << "G4PhysicsListHelper::DumpOrdingParameterTable : " - << ordParamFileName << G4endl; + G4cout << "G4PhysicsListHelper::DumpOrdingParameterTable : " << ordParamFileName << G4endl; G4cout << " TypeName " << " ProcessType" << " SubType" @@ -400,21 +346,16 @@ void G4PhysicsListHelper::DumpOrdingParameterTable(G4int subType) const << " AlongStep" << " PostStep" << " Duplicable" << G4endl; - for(G4int i = 0; i < sizeOfTable; ++i) - { + for (G4int i = 0; i < sizeOfTable; ++i) { G4PhysicsListOrderingParameter* tmp = &(theTable->at(i)); - if((subType >= 0) && (subType != tmp->processSubType)) - continue; - G4cout << std::setw(18) << tmp->processTypeName << std::setw(15) - << tmp->processType << std::setw(15) << tmp->processSubType - << std::setw(15) << tmp->ordering[0] << std::setw(15) - << tmp->ordering[1] << std::setw(15) << tmp->ordering[2]; - if(tmp->isDuplicable) - { + if ((subType >= 0) && (subType != tmp->processSubType)) continue; + G4cout << std::setw(18) << tmp->processTypeName << std::setw(15) << tmp->processType + << std::setw(15) << tmp->processSubType << std::setw(15) << tmp->ordering[0] + << std::setw(15) << tmp->ordering[1] << std::setw(15) << tmp->ordering[2]; + if (tmp->isDuplicable) { G4cout << " true"; } - else - { + else { G4cout << " false"; } G4cout << G4endl; @@ -422,205 +363,167 @@ void G4PhysicsListHelper::DumpOrdingParameterTable(G4int subType) const } // -------------------------------------------------------------------- -G4PhysicsListOrderingParameter -G4PhysicsListHelper::GetOrdingParameter(G4int subType) const +G4PhysicsListOrderingParameter G4PhysicsListHelper::GetOrdingParameter(G4int subType) const { G4PhysicsListOrderingParameter value; - if(theTable == nullptr) - { + if (theTable == nullptr) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4PhysicsListHelper::GetOrderingParameter : " - << " No ordering parameter table : " << ordParamFileName - << G4endl; + << " No ordering parameter table : " << ordParamFileName << G4endl; } #endif return value; } - for(G4int i = 0; i < sizeOfTable; ++i) - { + for (G4int i = 0; i < sizeOfTable; ++i) { G4PhysicsListOrderingParameter* tmp = &(theTable->at(i)); - if(subType == tmp->processSubType) - { + if (subType == tmp->processSubType) { value.processTypeName = tmp->processTypeName; - value.processType = tmp->processType; - value.processSubType = tmp->processSubType; - value.ordering[0] = tmp->ordering[0]; - value.ordering[1] = tmp->ordering[1]; - value.ordering[2] = tmp->ordering[2]; - value.isDuplicable = tmp->isDuplicable; + value.processType = tmp->processType; + value.processSubType = tmp->processSubType; + value.ordering[0] = tmp->ordering[0]; + value.ordering[1] = tmp->ordering[1]; + value.ordering[2] = tmp->ordering[2]; + value.isDuplicable = tmp->isDuplicable; } } return value; } // -------------------------------------------------------------------- -G4bool G4PhysicsListHelper::RegisterProcess(G4VProcess* process, - G4ParticleDefinition* particle) +G4bool G4PhysicsListHelper::RegisterProcess(G4VProcess* process, G4ParticleDefinition* particle) { - if(theTable == nullptr) - { + if (theTable == nullptr) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4PhysicsListHelper::RegisterProcess :" - << " No ordering parameter table : " << ordParamFileName - << G4endl; + << " No ordering parameter table : " << ordParamFileName << G4endl; } #endif - G4Exception("G4PhysicsListHelper::RegisterProcess", "Run0107", - FatalException, "No Ordering Parameter Table"); + G4Exception("G4PhysicsListHelper::RegisterProcess", "Run0107", FatalException, + "No Ordering Parameter Table"); return false; } const G4String pName = process->GetProcessName(); - const G4int pType = process->GetProcessType(); + const G4int pType = process->GetProcessType(); const G4int pSubType = process->GetProcessSubType(); #ifdef G4VERBOSE - if(verboseLevel > 2) - { - G4cout << "G4PhysicsListHelper::RegisterProcess :" << pName - << " Process Type = " << pType << " SubType = " << pSubType << " to " - << particle->GetParticleName() << G4endl; + if (verboseLevel > 2) { + G4cout << "G4PhysicsListHelper::RegisterProcess :" << pName << " Process Type = " << pType + << " SubType = " << pSubType << " to " << particle->GetParticleName() << G4endl; } #endif // Check Process Type/SubType - if((pType < 1) || (pSubType < 1)) - { + if ((pType < 1) || (pSubType < 1)) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4PhysicsListHelper::RegisterProcess :" << pName << " for " - << particle->GetParticleName() - << " has illegal Process Type = " << pType + << particle->GetParticleName() << " has illegal Process Type = " << pType << " SubType = " << pSubType << G4endl; } #endif - G4Exception("G4PhysicsListHelper::RegisterProcess", "Run0108", - FatalException, "No Matching process Type/SubType"); + G4Exception("G4PhysicsListHelper::RegisterProcess", "Run0108", FatalException, + "No Matching process Type/SubType"); return false; } G4bool isFound = false; G4int ord[3]; G4bool duplicable = false; - for(G4int i = 0; i < sizeOfTable; ++i) - { + for (G4int i = 0; i < sizeOfTable; ++i) { G4PhysicsListOrderingParameter* tmp = &(theTable->at(i)); - if((tmp->processType == pType) && (tmp->processSubType == pSubType)) - { - ord[0] = tmp->ordering[0]; - ord[1] = tmp->ordering[1]; - ord[2] = tmp->ordering[2]; + if ((tmp->processType == pType) && (tmp->processSubType == pSubType)) { + ord[0] = tmp->ordering[0]; + ord[1] = tmp->ordering[1]; + ord[2] = tmp->ordering[2]; duplicable = tmp->isDuplicable; - isFound = true; + isFound = true; break; } } - if(!isFound) - { + if (!isFound) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4PhysicsListHelper::RegisterProcess :" << pName << " for " - << particle->GetParticleName() << " with type/subtype =" << pType - << "/" << pSubType + << particle->GetParticleName() << " with type/subtype =" << pType << "/" << pSubType << " is not registered in OrdingParameterTable " << G4endl; } #endif - G4Exception("G4PhysicsListHelper::RegisterProcess", "Run0109", - FatalException, "No Matching process Type/SubType"); + G4Exception("G4PhysicsListHelper::RegisterProcess", "Run0109", FatalException, + "No Matching process Type/SubType"); return false; } // Check Process Manager G4ProcessManager* pManager = particle->GetProcessManager(); - if(pManager == nullptr) - { + if (pManager == nullptr) { // Error !! no process manager #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4PhysicsListHelper::RegisterProcess " - << " : No Process Manager for " << particle->GetParticleName() - << G4endl; + << " : No Process Manager for " << particle->GetParticleName() << G4endl; } #endif - G4Exception("G4PhysicsListHelper::RegisterProcess ", "Riun0110", - FatalException, "No process manager"); + G4Exception("G4PhysicsListHelper::RegisterProcess ", "Riun0110", FatalException, + "No process manager"); return false; } // Check Duplication - if(!duplicable) - { - G4bool duplicated = false; + if (!duplicable) { + G4bool duplicated = false; G4ProcessVector* pList = pManager->GetProcessList(); - for(G4int idx = 0; idx < (G4int)pList->size(); ++idx) - { + for (G4int idx = 0; idx < (G4int)pList->size(); ++idx) { const G4VProcess* p = (*pList)[idx]; - if((p->GetProcessType() == pType) && (p->GetProcessSubType() == pSubType)) - { + if ((p->GetProcessType() == pType) && (p->GetProcessSubType() == pSubType)) { duplicated = true; #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4PhysicsListHelper::RegisterProcess :" << pName << " for " - << particle->GetParticleName() - << " with type/subtype =" << pType << "/" << pSubType - << " is has same subType as " << p->GetProcessName() - << " for " << particle->GetParticleName() << G4endl; + << particle->GetParticleName() << " with type/subtype =" << pType << "/" + << pSubType << " is has same subType as " << p->GetProcessName() << " for " + << particle->GetParticleName() << G4endl; G4cout << "It will not be added !!" << G4endl; } #endif - G4Exception("G4PhysicsListHelper::RegisterProcess", "Run0111", - JustWarning, "Duplication of processes"); + G4Exception("G4PhysicsListHelper::RegisterProcess", "Run0111", JustWarning, + "Duplication of processes"); } } - if(duplicated) - return false; + if (duplicated) return false; } // Add Process G4int code = pManager->AddProcess(process); - if(code < 0) - return false; + if (code < 0) return false; // Set Ordering Parameter - for(G4int idx = 0; idx < 3; ++idx) - { - G4ProcessVectorDoItIndex idxOrd = - static_cast(idx); - if(ord[idx] < 0) - { + for (G4int idx = 0; idx < 3; ++idx) { + auto idxOrd = static_cast(idx); + if (ord[idx] < 0) { // Do Nothing because NO DOIT } - else if(ord[idx] == 0) - { + else if (ord[idx] == 0) { pManager->SetProcessOrderingToFirst(process, idxOrd); } - else if(ord[idx] < 9999) - { + else if (ord[idx] < 9999) { pManager->SetProcessOrdering(process, idxOrd, ord[idx]); } - else - { + else { pManager->SetProcessOrderingToLast(process, idxOrd); } } #ifdef G4VERBOSE - if(verboseLevel > 1) - { + if (verboseLevel > 1) { G4cout << "G4PhysicsListHelper::RegisterProcess :" << pName << " for " - << particle->GetParticleName() << " with type/subtype =" << pType - << "/" << pSubType - << " is successfully registered with ordering parameters " << ord[0] - << ":" << ord[1] << ":" << ord[2] << G4endl; + << particle->GetParticleName() << " with type/subtype =" << pType << "/" << pSubType + << " is successfully registered with ordering parameters " << ord[0] << ":" << ord[1] + << ":" << ord[2] << G4endl; } #endif return true; @@ -631,676 +534,676 @@ void G4PhysicsListHelper::ReadInDefaultOrderingParameter() { G4PhysicsListOrderingParameter tmp; - // NOTE: please use enum values, rather than numerical values, + // NOTE: please use enum values, rather than numerical values, // for both the processType and processSubType below. tmp.processTypeName = "Transportation"; - tmp.processType = fTransportation; - tmp.processSubType = TRANSPORTATION; - tmp.ordering[0] = -1; - tmp.ordering[1] = 0; - tmp.ordering[2] = 0; - tmp.isDuplicable = false; + tmp.processType = fTransportation; + tmp.processSubType = TRANSPORTATION; + tmp.ordering[0] = -1; + tmp.ordering[1] = 0; + tmp.ordering[2] = 0; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "CoupleTrans"; - tmp.processType = fTransportation; - tmp.processSubType = COUPLED_TRANSPORTATION; - tmp.ordering[0] = -1; - tmp.ordering[1] = 0; - tmp.ordering[2] = 0; - tmp.isDuplicable = false; + tmp.processType = fTransportation; + tmp.processSubType = COUPLED_TRANSPORTATION; + tmp.ordering[0] = -1; + tmp.ordering[1] = 0; + tmp.ordering[2] = 0; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "CoulombScat"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fCoulombScattering; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fCoulombScattering; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "Ionisation"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fIonisation; - tmp.ordering[0] = -1; - tmp.ordering[1] = 2; - tmp.ordering[2] = 2; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fIonisation; + tmp.ordering[0] = -1; + tmp.ordering[1] = 2; + tmp.ordering[2] = 2; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "Brems"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fBremsstrahlung; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 3; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fBremsstrahlung; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 3; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "PairProdCharged"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fPairProdByCharged; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 4; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fPairProdByCharged; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 4; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "Annih"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fAnnihilation; - tmp.ordering[0] = 5; - tmp.ordering[1] = -1; - tmp.ordering[2] = 5; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fAnnihilation; + tmp.ordering[0] = 5; + tmp.ordering[1] = -1; + tmp.ordering[2] = 5; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "AnnihToMuMu"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fAnnihilationToMuMu; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 6; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fAnnihilationToMuMu; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 6; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "AnnihToTauTau"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fAnnihilationToTauTau; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 7; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fAnnihilationToTauTau; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 7; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "AnnihToHad"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fAnnihilationToHadrons; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 8; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fAnnihilationToHadrons; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 8; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "NuclearStopping"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fNuclearStopping; - tmp.ordering[0] = -1; - tmp.ordering[1] = 9; - tmp.ordering[2] = -1; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fNuclearStopping; + tmp.ordering[0] = -1; + tmp.ordering[1] = 9; + tmp.ordering[2] = -1; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "ElectronGeneral"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fElectronGeneralProcess; - tmp.ordering[0] = -1; - tmp.ordering[1] = 1; - tmp.ordering[2] = 1; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fElectronGeneralProcess; + tmp.ordering[0] = -1; + tmp.ordering[1] = 1; + tmp.ordering[2] = 1; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "Msc"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fMultipleScattering; - tmp.ordering[0] = -1; - tmp.ordering[1] = 1; - tmp.ordering[2] = -1; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fMultipleScattering; + tmp.ordering[0] = -1; + tmp.ordering[1] = 1; + tmp.ordering[2] = -1; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "Rayleigh"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fRayleigh; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fRayleigh; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "PhotoElectric"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fPhotoElectricEffect; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fPhotoElectricEffect; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "Compton"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fComptonScattering; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fComptonScattering; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "Conv"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fGammaConversion; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fGammaConversion; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "ConvToMuMu"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fGammaConversionToMuMu; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fGammaConversionToMuMu; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "GammaGeneral"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fGammaGeneralProcess; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fGammaGeneralProcess; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "PositronGeneral"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fPositronGeneralProcess; - tmp.ordering[0] = 1; - tmp.ordering[1] = 1; - tmp.ordering[2] = 1; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fPositronGeneralProcess; + tmp.ordering[0] = 1; + tmp.ordering[1] = 1; + tmp.ordering[2] = 1; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "MuPairByMuon"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fMuonPairProdByCharged; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 10; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fMuonPairProdByCharged; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 10; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "Cerenkov"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fCerenkov; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fCerenkov; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "Scintillation"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fScintillation; - tmp.ordering[0] = 9999; - tmp.ordering[1] = -1; - tmp.ordering[2] = 9999; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fScintillation; + tmp.ordering[0] = 9999; + tmp.ordering[1] = -1; + tmp.ordering[2] = 9999; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "SynchRad"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fSynchrotronRadiation; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fSynchrotronRadiation; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "TransRad"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fTransitionRadiation; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fTransitionRadiation; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "SurfaceRefl"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fSurfaceReflection; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fSurfaceReflection; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "OpAbsorb"; - tmp.processType = fOptical; - tmp.processSubType = fOpAbsorption; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fOptical; + tmp.processSubType = fOpAbsorption; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "OpBoundary"; - tmp.processType = fOptical; - tmp.processSubType = fOpBoundary; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fOptical; + tmp.processSubType = fOpBoundary; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "OpRayleigh"; - tmp.processType = fOptical; - tmp.processSubType = fOpRayleigh; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fOptical; + tmp.processSubType = fOpRayleigh; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "OpWLS"; - tmp.processType = fOptical; - tmp.processSubType = fOpWLS; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fOptical; + tmp.processSubType = fOpWLS; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "OpMieHG"; - tmp.processType = fOptical; - tmp.processSubType = fOpMieHG; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fOptical; + tmp.processSubType = fOpMieHG; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "OpWLS2"; - tmp.processType = fOptical; - tmp.processSubType = fOpWLS2; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fOptical; + tmp.processSubType = fOpWLS2; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DNAElastic"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fLowEnergyElastic; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fLowEnergyElastic; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DNAExcit"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fLowEnergyExcitation; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fLowEnergyExcitation; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DNAIonisation"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fLowEnergyIonisation; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fLowEnergyIonisation; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DNAVibExcit"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fLowEnergyVibrationalExcitation; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fLowEnergyVibrationalExcitation; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DNAAttachment"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fLowEnergyAttachment; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fLowEnergyAttachment; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DNAChargeDec"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fLowEnergyChargeDecrease; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fLowEnergyChargeDecrease; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DNAChargeInc"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fLowEnergyChargeIncrease; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fLowEnergyChargeIncrease; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DNAElecSolv"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fLowEnergyElectronSolvation; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fLowEnergyElectronSolvation; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DNAMolecDecay"; - tmp.processType = fDecay; - tmp.processSubType = fLowEnergyMolecularDecay; - tmp.ordering[0] = 1000; - tmp.ordering[1] = -1; - tmp.ordering[2] = -1; - tmp.isDuplicable = false; + tmp.processType = fDecay; + tmp.processSubType = fLowEnergyMolecularDecay; + tmp.ordering[0] = 1000; + tmp.ordering[1] = -1; + tmp.ordering[2] = -1; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "ITTransport"; - tmp.processType = fTransportation; - tmp.processSubType = fLowEnergyTransportation; - tmp.ordering[0] = -1; - tmp.ordering[1] = 0; - tmp.ordering[2] = 0; - tmp.isDuplicable = false; + tmp.processType = fTransportation; + tmp.processSubType = fLowEnergyTransportation; + tmp.ordering[0] = -1; + tmp.ordering[1] = 0; + tmp.ordering[2] = 0; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DNABrownTrans"; - tmp.processType = fTransportation; - tmp.processSubType = fLowEnergyBrownianTransportation; - tmp.ordering[0] = -1; - tmp.ordering[1] = 0; - tmp.ordering[2] = 0; - tmp.isDuplicable = false; + tmp.processType = fTransportation; + tmp.processSubType = fLowEnergyBrownianTransportation; + tmp.ordering[0] = -1; + tmp.ordering[1] = 0; + tmp.ordering[2] = 0; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DNADoubleIoni"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fLowEnergyDoubleIonisation; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fLowEnergyDoubleIonisation; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DNADoubleCap"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fLowEnergyDoubleCap; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fLowEnergyDoubleCap; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DNAIoniTransfer"; - tmp.processType = fElectromagnetic; - tmp.processSubType = fLowEnergyIoniTransfer; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fElectromagnetic; + tmp.processSubType = fLowEnergyIoniTransfer; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DNAStaticMol"; - tmp.processType = fUserDefined; - tmp.processSubType = fLowEnergyStaticMol; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fUserDefined; + tmp.processSubType = fLowEnergyStaticMol; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); - sizeOfTable +=1; + sizeOfTable += 1; tmp.processTypeName = "DNAScavenger"; - tmp.processType = fUserDefined; - tmp.processSubType = fLowEnergyScavenger; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fUserDefined; + tmp.processSubType = fLowEnergyScavenger; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "HadElastic"; - tmp.processType = fHadronic; - tmp.processSubType = fHadronElastic; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fHadronic; + tmp.processSubType = fHadronElastic; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "NeutronGeneral"; - tmp.processType = fHadronic; - tmp.processSubType = fNeutronGeneral; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fHadronic; + tmp.processSubType = fNeutronGeneral; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "HadInelastic"; - tmp.processType = fHadronic; - tmp.processSubType = fHadronInelastic; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fHadronic; + tmp.processSubType = fHadronInelastic; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "HadCapture"; - tmp.processType = fHadronic; - tmp.processSubType = fCapture; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fHadronic; + tmp.processSubType = fCapture; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "MuAtomCapture"; - tmp.processType = fHadronic; - tmp.processSubType = fMuAtomicCapture; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fHadronic; + tmp.processSubType = fMuAtomicCapture; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "HadFission"; - tmp.processType = fHadronic; - tmp.processSubType = fFission; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fHadronic; + tmp.processSubType = fFission; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "HadAtRest"; - tmp.processType = fHadronic; - tmp.processSubType = fHadronAtRest; - tmp.ordering[0] = 1000; - tmp.ordering[1] = -1; - tmp.ordering[2] = -1; - tmp.isDuplicable = false; + tmp.processType = fHadronic; + tmp.processSubType = fHadronAtRest; + tmp.ordering[0] = 1000; + tmp.ordering[1] = -1; + tmp.ordering[2] = -1; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "HadCEX"; - tmp.processType = fHadronic; - tmp.processSubType = fChargeExchange; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fHadronic; + tmp.processSubType = fChargeExchange; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "Decay"; - tmp.processType = fDecay; - tmp.processSubType = DECAY; - tmp.ordering[0] = 1000; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fDecay; + tmp.processSubType = DECAY; + tmp.ordering[0] = 1000; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DecayWSpin"; - tmp.processType = fDecay; - tmp.processSubType = DECAY_WithSpin; - tmp.ordering[0] = 1000; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fDecay; + tmp.processSubType = DECAY_WithSpin; + tmp.ordering[0] = 1000; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DecayPiSpin"; - tmp.processType = fDecay; - tmp.processSubType = DECAY_PionMakeSpin; - tmp.ordering[0] = 1000; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fDecay; + tmp.processSubType = DECAY_PionMakeSpin; + tmp.ordering[0] = 1000; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DecayRadio"; - tmp.processType = fDecay; - tmp.processSubType = DECAY_Radioactive; - tmp.ordering[0] = 1000; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fDecay; + tmp.processSubType = DECAY_Radioactive; + tmp.ordering[0] = 1000; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DecayUnKnown"; - tmp.processType = fDecay; - tmp.processSubType = DECAY_Unknown; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fDecay; + tmp.processSubType = DECAY_Unknown; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DecayMuAtom"; - tmp.processType = fDecay; - tmp.processSubType = DECAY_MuAtom; - tmp.ordering[0] = 1000; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fDecay; + tmp.processSubType = DECAY_MuAtom; + tmp.ordering[0] = 1000; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "DecayExt"; - tmp.processType = fDecay; - tmp.processSubType = DECAY_External; - tmp.ordering[0] = 1000; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fDecay; + tmp.processSubType = DECAY_External; + tmp.ordering[0] = 1000; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "StepLimiter"; - tmp.processType = fGeneral; - tmp.processSubType = STEP_LIMITER; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fGeneral; + tmp.processSubType = STEP_LIMITER; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "UsrSepcCuts"; - tmp.processType = fGeneral; - tmp.processSubType = USER_SPECIAL_CUTS; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fGeneral; + tmp.processSubType = USER_SPECIAL_CUTS; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "NeutronKiller"; - tmp.processType = fGeneral; - tmp.processSubType = NEUTRON_KILLER; - tmp.ordering[0] = -1; - tmp.ordering[1] = -1; - tmp.ordering[2] = 1000; - tmp.isDuplicable = false; + tmp.processType = fGeneral; + tmp.processSubType = NEUTRON_KILLER; + tmp.ordering[0] = -1; + tmp.ordering[1] = -1; + tmp.ordering[2] = 1000; + tmp.isDuplicable = false; theTable->push_back(tmp); sizeOfTable += 1; tmp.processTypeName = "ParallelWorld"; - tmp.processType = fParallel; - tmp.processSubType = PARALLEL_WORLD_PROCESS; - tmp.ordering[0] = 9900; - tmp.ordering[1] = 1; - tmp.ordering[2] = 9900; - tmp.isDuplicable = true; + tmp.processType = fParallel; + tmp.processSubType = PARALLEL_WORLD_PROCESS; + tmp.ordering[0] = 9900; + tmp.ordering[1] = 1; + tmp.ordering[2] = 9900; + tmp.isDuplicable = true; theTable->push_back(tmp); sizeOfTable += 1; } diff --git a/source/run/src/G4PhysicsListWorkspace.cc b/source/run/src/G4PhysicsListWorkspace.cc index 7847bd06971..53dd62dbc5b 100644 --- a/source/run/src/G4PhysicsListWorkspace.cc +++ b/source/run/src/G4PhysicsListWorkspace.cc @@ -32,7 +32,7 @@ namespace { - G4PhysicsListWorkspace::pool_type thePool; +G4PhysicsListWorkspace::pool_type thePool; } // -------------------------------------------------------------------- @@ -42,34 +42,27 @@ G4PhysicsListWorkspace::pool_type* G4PhysicsListWorkspace::GetPool() } // -------------------------------------------------------------------- -G4PhysicsListWorkspace::G4PhysicsListWorkspace(G4bool verbose) - : fVerbose(verbose) +G4PhysicsListWorkspace::G4PhysicsListWorkspace(G4bool verbose) : fVerbose(verbose) { - fpVUPLSIM = - &const_cast(G4VUserPhysicsList::GetSubInstanceManager()); - fpVPCSIM = - &const_cast(G4VPhysicsConstructor::GetSubInstanceManager()); - fpVMPLSIM = - &const_cast(G4VModularPhysicsList::GetSubInstanceManager()); + fpVUPLSIM = &const_cast(G4VUserPhysicsList::GetSubInstanceManager()); + fpVPCSIM = &const_cast(G4VPhysicsConstructor::GetSubInstanceManager()); + fpVMPLSIM = &const_cast(G4VModularPhysicsList::GetSubInstanceManager()); // Copy information from master into PolyCone/Gon Sides in this thread. InitialiseWorkspace(); // Capture its address of ParticleDefinition split-class in this thread fpVUPLOffset = fpVUPLSIM->GetOffset(); - fpVPCOffset = fpVPCSIM->GetOffset(); + fpVPCOffset = fpVPCSIM->GetOffset(); fpVMPLOffset = fpVMPLSIM->GetOffset(); } // -------------------------------------------------------------------- -G4PhysicsListWorkspace::~G4PhysicsListWorkspace() -{ -} // -------------------------------------------------------------------- void G4PhysicsListWorkspace::UseWorkspace() { - if(fVerbose) + if (fVerbose) G4cout << "G4PhysicsListWorkspace::UseWorkspace: " << "Copying particles-definition Split-Class - Start " << G4endl; @@ -89,14 +82,12 @@ void G4PhysicsListWorkspace::ReleaseWorkspace() } // -------------------------------------------------------------------- -void G4PhysicsListWorkspace::InitialisePhysicsList() -{ -} +void G4PhysicsListWorkspace::InitialisePhysicsList() {} // -------------------------------------------------------------------- void G4PhysicsListWorkspace::InitialiseWorkspace() { - if(fVerbose) + if (fVerbose) G4cout << "G4PhysicsListWorkspace::InitialiseWorkspace: " << "Copying particles-definition Split-Class - Start " << G4endl; @@ -111,7 +102,7 @@ void G4PhysicsListWorkspace::InitialiseWorkspace() // Additional initialisation if needed - beyond copying memory InitialisePhysicsList(); - if(fVerbose) + if (fVerbose) G4cout << "G4PhysicsListWorkspace::CreateAndUseWorkspace: " << "Copying particles-definition Split-Class - Done!" << G4endl; } diff --git a/source/run/src/G4RNGHelper.cc b/source/run/src/G4RNGHelper.cc index a60942fe41c..f78853535ec 100644 --- a/source/run/src/G4RNGHelper.cc +++ b/source/run/src/G4RNGHelper.cc @@ -29,71 +29,68 @@ // -------------------------------------------------------------------- #include "G4RNGHelper.hh" + #include "Randomize.hh" -template <> +template<> G4TemplateRNGHelper* G4TemplateRNGHelper::instance = nullptr; -template <> +template<> G4TemplateRNGHelper* G4TemplateRNGHelper::instance = nullptr; // -------------------------------------------------------------------- -template +template G4TemplateRNGHelper* G4TemplateRNGHelper::GetInstance() { - if(instance == nullptr) - { + if (instance == nullptr) { instance = new G4TemplateRNGHelper(); } return instance; } // -------------------------------------------------------------------- -template +template G4TemplateRNGHelper* G4TemplateRNGHelper::GetInstanceIfExist() { return instance; } // -------------------------------------------------------------------- -template <> +template<> G4TemplateRNGHelper* G4TemplateRNGHelper::GetInstance() { - if(instance == nullptr) - { + if (instance == nullptr) { instance = new G4TemplateRNGHelper(); } return instance; } // -------------------------------------------------------------------- -template <> +template<> G4TemplateRNGHelper* G4TemplateRNGHelper::GetInstanceIfExist() { return instance; } // -------------------------------------------------------------------- -template <> +template<> G4TemplateRNGHelper* G4TemplateRNGHelper::GetInstance() { - if(instance == nullptr) - { + if (instance == nullptr) { instance = new G4TemplateRNGHelper(); } return instance; } // -------------------------------------------------------------------- -template <> -G4TemplateRNGHelper* -G4TemplateRNGHelper::GetInstanceIfExist() +template<> +G4TemplateRNGHelper* G4TemplateRNGHelper::GetInstanceIfExist() { return instance; } // -------------------------------------------------------------------- -template +template G4TemplateRNGHelper::~G4TemplateRNGHelper() { Clear(); diff --git a/source/run/src/G4Run.cc b/source/run/src/G4Run.cc index 5e33a8b1485..6444fad8fcd 100644 --- a/source/run/src/G4Run.cc +++ b/source/run/src/G4Run.cc @@ -29,6 +29,7 @@ // -------------------------------------------------------------------- #include "G4Run.hh" + #include "G4Event.hh" #include "G4RunManager.hh" #include "G4StatAnalysis.hh" @@ -44,14 +45,10 @@ G4Run::G4Run() G4Run::~G4Run() { // Objects made by local thread should not be deleted by the master thread - G4RunManager::RMType rmType = - G4RunManager::GetRunManager()->GetRunManagerType(); - if(rmType != G4RunManager::masterRM) - { - for(auto itr = eventVector->cbegin(); - itr != eventVector->cend(); ++itr) - { - delete *itr; + G4RunManager::RMType rmType = G4RunManager::GetRunManager()->GetRunManagerType(); + if (rmType != G4RunManager::masterRM) { + for (const auto& itr : *eventVector) { + delete itr; } } delete eventVector; @@ -67,10 +64,8 @@ void G4Run::RecordEvent(const G4Event*) void G4Run::Merge(const G4Run* right) { numberOfEvent += right->numberOfEvent; - for(auto itr = right->eventVector->cbegin(); - itr != right->eventVector->cend(); ++itr) - { - eventVector->push_back(*itr); + for (const auto& itr : *right->eventVector) { + eventVector->push_back(itr); } } diff --git a/source/run/src/G4RunManager.cc b/source/run/src/G4RunManager.cc index 9d5e4ad97b1..5ee9db28e2c 100644 --- a/source/run/src/G4RunManager.cc +++ b/source/run/src/G4RunManager.cc @@ -28,66 +28,61 @@ // Original author: M.Asai, 1996 // -------------------------------------------------------------------- -#include - -#include "G4Timer.hh" - -#include "G4MTRunManagerKernel.hh" #include "G4RunManager.hh" -#include "G4RunManagerKernel.hh" -#include "G4WorkerRunManagerKernel.hh" #include "G4ApplicationState.hh" +#include "G4AssemblyStore.hh" +#include "G4CopyRandomState.hh" +#include "G4GeometryManager.hh" +#include "G4HCofThisEvent.hh" +#include "G4LogicalVolume.hh" +#include "G4LogicalVolumeStore.hh" +#include "G4MTRunManagerKernel.hh" #include "G4Material.hh" +#include "G4ParallelWorldProcess.hh" #include "G4ParallelWorldProcessStore.hh" +#include "G4ParticleDefinition.hh" #include "G4ParticleTable.hh" +#include "G4PhysicalVolumeStore.hh" +#include "G4ProcessManager.hh" #include "G4ProcessTable.hh" #include "G4ProductionCutsTable.hh" +#include "G4Profiler.hh" +#include "G4RegionStore.hh" #include "G4Run.hh" +#include "G4RunManagerKernel.hh" #include "G4RunMessenger.hh" #include "G4SDManager.hh" +#include "G4ScoringBox.hh" +#include "G4ScoringCylinder.hh" +#include "G4ScoringManager.hh" +#include "G4SmartVoxelHeader.hh" +#include "G4SmartVoxelStat.hh" +#include "G4SolidStore.hh" #include "G4StateManager.hh" #include "G4TiMemory.hh" +#include "G4Timer.hh" +#include "G4TransportationManager.hh" #include "G4UImanager.hh" #include "G4UnitsTable.hh" #include "G4UserRunAction.hh" #include "G4UserWorkerInitialization.hh" #include "G4UserWorkerThreadInitialization.hh" +#include "G4VHitsCollection.hh" #include "G4VPersistencyManager.hh" +#include "G4VPhysicalVolume.hh" #include "G4VScoreNtupleWriter.hh" +#include "G4VScoringMesh.hh" #include "G4VUserActionInitialization.hh" #include "G4VUserDetectorConstruction.hh" #include "G4VUserPhysicsList.hh" #include "G4VUserPrimaryGeneratorAction.hh" #include "G4VVisManager.hh" +#include "G4WorkerRunManagerKernel.hh" #include "G4ios.hh" #include "Randomize.hh" -#include "G4TiMemory.hh" -#include "G4Profiler.hh" -#include "G4HCofThisEvent.hh" -#include "G4ParallelWorldProcess.hh" -#include "G4ParticleDefinition.hh" -#include "G4ParticleTable.hh" -#include "G4ProcessManager.hh" -#include "G4ScoringManager.hh" -#include "G4TransportationManager.hh" -#include "G4VHitsCollection.hh" -#include "G4VScoringMesh.hh" - -#include "G4ScoringBox.hh" -#include "G4ScoringCylinder.hh" -#include "G4LogicalVolume.hh" -#include "G4SmartVoxelHeader.hh" -#include "G4SmartVoxelStat.hh" -#include "G4VPhysicalVolume.hh" - -#include "G4AssemblyStore.hh" -#include "G4GeometryManager.hh" -#include "G4LogicalVolumeStore.hh" -#include "G4PhysicalVolumeStore.hh" -#include "G4RegionStore.hh" -#include "G4SolidStore.hh" +#include using namespace CLHEP; @@ -116,26 +111,25 @@ G4RunManager* G4RunManager::GetRunManager() // -------------------------------------------------------------------- G4RunManager::G4RunManager() { - if(fRunManager) - { + if (fRunManager != nullptr) { G4Exception("G4RunManager::G4RunManager()", "Run0031", FatalException, "G4RunManager constructed twice."); } fRunManager = this; - kernel = new G4RunManagerKernel(); + kernel = new G4RunManagerKernel(); eventManager = kernel->GetEventManager(); - timer = new G4Timer(); - runMessenger = new G4RunMessenger(this); + timer = new G4Timer(); + runMessenger = new G4RunMessenger(this); previousEvents = new std::list; G4ParticleTable::GetParticleTable()->CreateMessenger(); G4ProcessTable::GetProcessTable(); std::ostringstream oss; G4Random::saveFullState(oss); - randomNumberStatusForThisRun = oss.str(); + randomNumberStatusForThisRun = oss.str(); randomNumberStatusForThisEvent = oss.str(); - runManagerType = sequentialRM; + runManagerType = sequentialRM; } // -------------------------------------------------------------------- @@ -148,20 +142,17 @@ G4RunManager::G4RunManager(RMType rmType) "(-DG4MULTITHREADED is set to off)."; msg << " This type of RunManager can only be used in mult-threaded " "applications."; - G4Exception("G4RunManager::G4RunManager(G4bool)", "Run0107", - FatalException, msg); + G4Exception("G4RunManager::G4RunManager(G4bool)", "Run0107", FatalException, msg); #endif - if(fRunManager != nullptr) - { + if (fRunManager != nullptr) { G4Exception("G4RunManager::G4RunManager()", "Run0031", FatalException, "G4RunManager constructed twice."); return; } fRunManager = this; - switch(rmType) - { + switch (rmType) { case masterRM: kernel = new G4MTRunManagerKernel(); break; @@ -172,23 +163,22 @@ G4RunManager::G4RunManager(RMType rmType) G4ExceptionDescription msgx; msgx << "This type of RunManager can only be used in multi-threaded " "applications."; - G4Exception("G4RunManager::G4RunManager(G4bool)", "Run0108", - FatalException, msgx); + G4Exception("G4RunManager::G4RunManager(G4bool)", "Run0108", FatalException, msgx); return; } runManagerType = rmType; eventManager = kernel->GetEventManager(); - timer = new G4Timer(); - runMessenger = new G4RunMessenger(this); + timer = new G4Timer(); + runMessenger = new G4RunMessenger(this); previousEvents = new std::list; G4ParticleTable::GetParticleTable()->CreateMessenger(); G4ProcessTable::GetProcessTable(); randomNumberStatusDir = "./"; std::ostringstream oss; G4Random::saveFullState(oss); - randomNumberStatusForThisRun = oss.str(); + randomNumberStatusForThisRun = oss.str(); randomNumberStatusForThisEvent = oss.str(); ConfigureProfilers(); } @@ -200,10 +190,8 @@ G4RunManager::~G4RunManager() G4Profiler::Finalize(); G4StateManager* pStateManager = G4StateManager::GetStateManager(); // set the application state to the quite state - if(pStateManager->GetCurrentState() != G4State_Quit) - { - if(verboseLevel > 1) - G4cout << "G4 kernel has come to Quit state." << G4endl; + if (pStateManager->GetCurrentState() != G4State_Quit) { + if (verboseLevel > 1) G4cout << "G4 kernel has come to Quit state." << G4endl; pStateManager->SetNewState(G4State_Quit); } @@ -221,23 +209,19 @@ G4RunManager::~G4RunManager() DeleteUserInitializations(); delete userRunAction; userRunAction = nullptr; - if(verboseLevel > 1) - G4cout << "UserRunAction deleted." << G4endl; + if (verboseLevel > 1) G4cout << "UserRunAction deleted." << G4endl; delete userPrimaryGeneratorAction; userPrimaryGeneratorAction = nullptr; - if(verboseLevel > 1) - G4cout << "UserPrimaryGenerator deleted." << G4endl; + if (verboseLevel > 1) G4cout << "UserPrimaryGenerator deleted." << G4endl; - if(verboseLevel > 1) - G4cout << "RunManager is deleting RunManagerKernel." << G4endl; + if (verboseLevel > 1) G4cout << "RunManager is deleting RunManagerKernel." << G4endl; delete kernel; fRunManager = nullptr; - if(verboseLevel > 1) - G4cout << "RunManager is deleted." << G4endl; + if (verboseLevel > 1) G4cout << "RunManager is deleted." << G4endl; } // -------------------------------------------------------------------- @@ -245,46 +229,33 @@ void G4RunManager::DeleteUserInitializations() { delete userDetector; userDetector = nullptr; - if(verboseLevel > 1) - G4cout << "UserDetectorConstruction deleted." << G4endl; + if (verboseLevel > 1) G4cout << "UserDetectorConstruction deleted." << G4endl; delete physicsList; physicsList = nullptr; - if(verboseLevel > 1) - G4cout << "UserPhysicsList deleted." << G4endl; + if (verboseLevel > 1) G4cout << "UserPhysicsList deleted." << G4endl; delete userActionInitialization; userActionInitialization = nullptr; - if(verboseLevel > 1) - G4cout << "UserActionInitialization deleted." << G4endl; + if (verboseLevel > 1) G4cout << "UserActionInitialization deleted." << G4endl; delete userWorkerInitialization; userWorkerInitialization = nullptr; - if(verboseLevel > 1) - G4cout << "UserWorkerInitialization deleted." << G4endl; + if (verboseLevel > 1) G4cout << "UserWorkerInitialization deleted." << G4endl; delete userWorkerThreadInitialization; userWorkerThreadInitialization = nullptr; - if(verboseLevel > 1) - G4cout << "UserWorkerThreadInitialization deleted." << G4endl; + if (verboseLevel > 1) G4cout << "UserWorkerThreadInitialization deleted." << G4endl; } // -------------------------------------------------------------------- void G4RunManager::BeamOn(G4int n_event, const char* macroFile, G4int n_select) { - if(n_event <= 0) - { - fakeRun = true; - } - else - { - fakeRun = false; - } + fakeRun = n_event <= 0; G4bool cond = ConfirmBeamOnCondition(); - if(cond) - { + if (cond) { numberOfEventToBeProcessed = n_event; - numberOfEventProcessed = 0; + numberOfEventProcessed = 0; ConstructScoringWorlds(); RunInitialization(); DoEventLoop(n_event, macroFile, n_select); @@ -299,28 +270,22 @@ G4bool G4RunManager::ConfirmBeamOnCondition() G4StateManager* stateManager = G4StateManager::GetStateManager(); G4ApplicationState currentState = stateManager->GetCurrentState(); - if(currentState != G4State_PreInit && currentState != G4State_Idle) - { + if (currentState != G4State_PreInit && currentState != G4State_Idle) { G4cerr << "Illegal application state - BeamOn() ignored." << G4endl; return false; } - if(!initializedAtLeastOnce) - { + if (!initializedAtLeastOnce) { G4cerr << " Geant4 kernel should be initialized" << G4endl; G4cerr << "before the first BeamOn(). - BeamOn ignored." << G4endl; return false; } - if(!geometryInitialized || !physicsInitialized) - { - if(verboseLevel > 0) - { + if (!geometryInitialized || !physicsInitialized) { + if (verboseLevel > 0) { G4cout << "Start re-initialization because " << G4endl; - if(!geometryInitialized) - G4cout << " Geometry" << G4endl; - if(!physicsInitialized) - G4cout << " Physics processes" << G4endl; + if (!geometryInitialized) G4cout << " Geometry" << G4endl; + if (!physicsInitialized) G4cout << " Physics processes" << G4endl; G4cout << "has been modified since last Run." << G4endl; } Initialize(); @@ -331,40 +296,33 @@ G4bool G4RunManager::ConfirmBeamOnCondition() // -------------------------------------------------------------------- void G4RunManager::RunInitialization() { - if(!(kernel->RunInitialization(fakeRun))) - return; + if (!(kernel->RunInitialization(fakeRun))) return; - runAborted = false; + runAborted = false; numberOfEventProcessed = 0; CleanUpPreviousEvents(); delete currentRun; currentRun = nullptr; - if(fakeRun) - return; + if (fakeRun) return; - if(fGeometryHasBeenDestroyed) - G4ParallelWorldProcessStore::GetInstance()->UpdateWorlds(); + if (fGeometryHasBeenDestroyed) G4ParallelWorldProcessStore::GetInstance()->UpdateWorlds(); - if(userRunAction != nullptr) - currentRun = userRunAction->GenerateRun(); - if(currentRun == nullptr) - currentRun = new G4Run(); + if (userRunAction != nullptr) currentRun = userRunAction->GenerateRun(); + if (currentRun == nullptr) currentRun = new G4Run(); currentRun->SetRunID(runIDCounter); currentRun->SetNumberOfEventToBeProcessed(numberOfEventToBeProcessed); currentRun->SetDCtable(DCtable); G4SDManager* fSDM = G4SDManager::GetSDMpointerIfExist(); - if(fSDM != nullptr) - { + if (fSDM != nullptr) { currentRun->SetHCtable(fSDM->GetHCtable()); } - if(G4VScoreNtupleWriter::Instance() != nullptr) - { - auto hce = (fSDM != nullptr) ? fSDM->PrepareNewEvent() : nullptr; + if (G4VScoreNtupleWriter::Instance() != nullptr) { + auto hce = (fSDM != nullptr) ? fSDM->PrepareNewEvent() : nullptr; isScoreNtupleWriter = G4VScoreNtupleWriter::Instance()->Book(hce); delete hce; } @@ -374,32 +332,26 @@ void G4RunManager::RunInitialization() randomNumberStatusForThisRun = oss.str(); currentRun->SetRandomNumberStatus(randomNumberStatusForThisRun); - for(G4int i_prev = 0; i_prev < n_perviousEventsToBeStored; ++i_prev) - { + for (G4int i_prev = 0; i_prev < n_perviousEventsToBeStored; ++i_prev) { previousEvents->push_back(nullptr); } - if(printModulo >= 0 || verboseLevel > 0) - { + if (printModulo >= 0 || verboseLevel > 0) { G4cout << "### Run " << currentRun->GetRunID() << " starts." << G4endl; } - if(userRunAction != nullptr) - userRunAction->BeginOfRunAction(currentRun); + if (userRunAction != nullptr) userRunAction->BeginOfRunAction(currentRun); #if defined(GEANT4_USE_TIMEMORY) masterRunProfiler.reset(new ProfilerConfig(currentRun)); #endif - if(isScoreNtupleWriter) - { + if (isScoreNtupleWriter) { G4VScoreNtupleWriter::Instance()->OpenFile(); } - if(storeRandomNumberStatus) - { + if (storeRandomNumberStatus) { G4String fileN = "currentRun"; - if(rngStatusEventsFlag) - { + if (rngStatusEventsFlag) { std::ostringstream os; os << "run" << currentRun->GetRunID(); fileN = os.str(); @@ -409,48 +361,39 @@ void G4RunManager::RunInitialization() } // -------------------------------------------------------------------- -void G4RunManager::DoEventLoop(G4int n_event, const char* macroFile, - G4int n_select) +void G4RunManager::DoEventLoop(G4int n_event, const char* macroFile, G4int n_select) { InitializeEventLoop(n_event, macroFile, n_select); // Event loop - for(G4int i_event = 0; i_event < n_event; ++i_event) - { + for (G4int i_event = 0; i_event < n_event; ++i_event) { ProcessOneEvent(i_event); TerminateOneEvent(); - if(runAborted) - break; + if (runAborted) break; } // For G4MTRunManager, TerminateEventLoop() is invoked after all threads are // finished. - if(runManagerType == sequentialRM) - TerminateEventLoop(); + if (runManagerType == sequentialRM) TerminateEventLoop(); } // -------------------------------------------------------------------- -void G4RunManager::InitializeEventLoop(G4int n_event, const char* macroFile, - G4int n_select) +void G4RunManager::InitializeEventLoop(G4int n_event, const char* macroFile, G4int n_select) { - if(verboseLevel > 0) - { + if (verboseLevel > 0) { timer->Start(); } n_select_msg = n_select; - if(macroFile != 0) - { - if(n_select_msg < 0) - n_select_msg = n_event; + if (macroFile != nullptr) { + if (n_select_msg < 0) n_select_msg = n_event; msgText = "/control/execute "; msgText += macroFile; selectMacro = macroFile; } - else - { + else { n_select_msg = -1; - selectMacro = ""; + selectMacro = ""; } } @@ -461,35 +404,29 @@ void G4RunManager::ProcessOneEvent(G4int i_event) eventManager->ProcessOneEvent(currentEvent); AnalyzeEvent(currentEvent); UpdateScoring(); - if(i_event < n_select_msg) - G4UImanager::GetUIpointer()->ApplyCommand(msgText); + if (i_event < n_select_msg) G4UImanager::GetUIpointer()->ApplyCommand(msgText); } // -------------------------------------------------------------------- void G4RunManager::TerminateOneEvent() { StackPreviousEvent(currentEvent); - currentEvent = 0; + currentEvent = nullptr; ++numberOfEventProcessed; } // -------------------------------------------------------------------- void G4RunManager::TerminateEventLoop() { - if(verboseLevel > 0 && !fakeRun) - { + if (verboseLevel > 0 && !fakeRun) { timer->Stop(); G4cout << " Run terminated." << G4endl; G4cout << "Run Summary" << G4endl; - if(runAborted) - { - G4cout << " Run Aborted after " << numberOfEventProcessed - << " events processed." << G4endl; + if (runAborted) { + G4cout << " Run Aborted after " << numberOfEventProcessed << " events processed." << G4endl; } - else - { - G4cout << " Number of events processed : " << numberOfEventProcessed - << G4endl; + else { + G4cout << " Number of events processed : " << numberOfEventProcessed << G4endl; } G4cout << " " << *timer << G4endl; } @@ -499,29 +436,24 @@ void G4RunManager::TerminateEventLoop() // -------------------------------------------------------------------- G4Event* G4RunManager::GenerateEvent(G4int i_event) { - if(userPrimaryGeneratorAction == nullptr) - { + if (userPrimaryGeneratorAction == nullptr) { G4Exception("G4RunManager::GenerateEvent()", "Run0032", FatalException, "G4VUserPrimaryGeneratorAction is not defined!"); return nullptr; } - G4Event* anEvent = new G4Event(i_event); + auto anEvent = new G4Event(i_event); - if(storeRandomNumberStatusToG4Event == 1 || - storeRandomNumberStatusToG4Event == 3) - { + if (storeRandomNumberStatusToG4Event == 1 || storeRandomNumberStatusToG4Event == 3) { std::ostringstream oss; G4Random::saveFullState(oss); randomNumberStatusForThisEvent = oss.str(); anEvent->SetRandomNumberStatus(randomNumberStatusForThisEvent); } - if(storeRandomNumberStatus) - { + if (storeRandomNumberStatus) { G4String fileN = "currentEvent"; - if(rngStatusEventsFlag) - { + if (rngStatusEventsFlag) { std::ostringstream os; os << "run" << currentRun->GetRunID() << "evt" << anEvent->GetEventID(); fileN = os.str(); @@ -529,8 +461,7 @@ G4Event* G4RunManager::GenerateEvent(G4int i_event) StoreRNGStatus(fileN); } - if(printModulo > 0 && anEvent->GetEventID() % printModulo == 0) - { + if (printModulo > 0 && anEvent->GetEventID() % printModulo == 0) { G4cout << "--> Event " << anEvent->GetEventID() << " starts." << G4endl; } userPrimaryGeneratorAction->GeneratePrimaries(anEvent); @@ -547,35 +478,27 @@ void G4RunManager::StoreRNGStatus(const G4String& fnpref) // -------------------------------------------------------------------- void G4RunManager::AnalyzeEvent(G4Event* anEvent) { - G4VPersistencyManager* fPersM = - G4VPersistencyManager::GetPersistencyManager(); - if(fPersM != nullptr) - fPersM->Store(anEvent); + G4VPersistencyManager* fPersM = G4VPersistencyManager::GetPersistencyManager(); + if (fPersM != nullptr) fPersM->Store(anEvent); currentRun->RecordEvent(anEvent); } // -------------------------------------------------------------------- void G4RunManager::RunTermination() { - if(!fakeRun) - { + if (!fakeRun) { #if defined(GEANT4_USE_TIMEMORY) masterRunProfiler.reset(); #endif CleanUpUnnecessaryEvents(0); // tasking occasionally will call this function even // if there was not a current run - if(currentRun != nullptr) - { - if(userRunAction != nullptr) - userRunAction->EndOfRunAction(currentRun); - G4VPersistencyManager* fPersM = - G4VPersistencyManager::GetPersistencyManager(); - if(fPersM != nullptr) - fPersM->Store(currentRun); + if (currentRun != nullptr) { + if (userRunAction != nullptr) userRunAction->EndOfRunAction(currentRun); + G4VPersistencyManager* fPersM = G4VPersistencyManager::GetPersistencyManager(); + if (fPersM != nullptr) fPersM->Store(currentRun); // write & close analysis output - if(isScoreNtupleWriter) - { + if (isScoreNtupleWriter) { G4VScoreNtupleWriter::Instance()->Write(); } } @@ -597,11 +520,9 @@ void G4RunManager::CleanUpPreviousEvents() // the deletion of G4Run. auto evItr = previousEvents->cbegin(); - while(evItr != previousEvents->cend()) - { + while (evItr != previousEvents->cend()) { G4Event* evt = *evItr; - if(evt != nullptr && !(evt->ToBeKept())) - delete evt; + if (evt != nullptr && !(evt->ToBeKept())) delete evt; evItr = previousEvents->erase(evItr); } } @@ -616,27 +537,20 @@ void G4RunManager::CleanUpUnnecessaryEvents(G4int keepNEvents) // the deletion of G4Run. auto evItr = previousEvents->cbegin(); - while(evItr != previousEvents->cend()) - { - if(G4int(previousEvents->size()) <= keepNEvents) - return; + while (evItr != previousEvents->cend()) { + if (G4int(previousEvents->size()) <= keepNEvents) return; G4Event* evt = *evItr; - if(evt != nullptr) - { - if(evt->GetNumberOfGrips() == 0) - { - if(!(evt->ToBeKept())) - delete evt; + if (evt != nullptr) { + if (evt->GetNumberOfGrips() == 0) { + if (!(evt->ToBeKept())) delete evt; evItr = previousEvents->erase(evItr); } - else - { + else { ++evItr; } } - else - { + else { evItr = previousEvents->erase(evItr); } } @@ -645,18 +559,13 @@ void G4RunManager::CleanUpUnnecessaryEvents(G4int keepNEvents) // -------------------------------------------------------------------- void G4RunManager::StackPreviousEvent(G4Event* anEvent) { - if(anEvent->ToBeKept()) - currentRun->StoreEvent(anEvent); + if (anEvent->ToBeKept()) currentRun->StoreEvent(anEvent); - if(n_perviousEventsToBeStored == 0) - { - if(anEvent->GetNumberOfGrips() == 0) - { - if(!(anEvent->ToBeKept())) - delete anEvent; + if (n_perviousEventsToBeStored == 0) { + if (anEvent->GetNumberOfGrips() == 0) { + if (!(anEvent->ToBeKept())) delete anEvent; } - else - { + else { previousEvents->push_back(anEvent); } } @@ -666,23 +575,19 @@ void G4RunManager::StackPreviousEvent(G4Event* anEvent) // -------------------------------------------------------------------- void G4RunManager::Initialize() { - G4StateManager* stateManager = G4StateManager::GetStateManager(); + G4StateManager* stateManager = G4StateManager::GetStateManager(); G4ApplicationState currentState = stateManager->GetCurrentState(); - if(currentState != G4State_PreInit && currentState != G4State_Idle) - { + if (currentState != G4State_PreInit && currentState != G4State_Idle) { G4cerr << "Illegal application state - " << "G4RunManager::Initialize() ignored." << G4endl; return; } stateManager->SetNewState(G4State_Init); - if(!geometryInitialized) - InitializeGeometry(); - if(!physicsInitialized) - InitializePhysics(); + if (!geometryInitialized) InitializeGeometry(); + if (!physicsInitialized) InitializePhysics(); initializedAtLeastOnce = true; - if(stateManager->GetCurrentState() != G4State_Idle) - { + if (stateManager->GetCurrentState() != G4State_Idle) { stateManager->SetNewState(G4State_Idle); } } @@ -690,24 +595,20 @@ void G4RunManager::Initialize() // -------------------------------------------------------------------- void G4RunManager::InitializeGeometry() { - if(userDetector == nullptr) - { + if (userDetector == nullptr) { G4Exception("G4RunManager::InitializeGeometry", "Run0033", FatalException, "G4VUserDetectorConstruction is not defined!"); return; } - if(verboseLevel > 1) - G4cout << "userDetector->Construct() start." << G4endl; + if (verboseLevel > 1) G4cout << "userDetector->Construct() start." << G4endl; - G4StateManager* stateManager = G4StateManager::GetStateManager(); + G4StateManager* stateManager = G4StateManager::GetStateManager(); G4ApplicationState currentState = stateManager->GetCurrentState(); - if(currentState == G4State_PreInit || currentState == G4State_Idle) - { + if (currentState == G4State_PreInit || currentState == G4State_Idle) { stateManager->SetNewState(G4State_Init); } - if(!geometryDirectlyUpdated) - { + if (!geometryDirectlyUpdated) { kernel->DefineWorldVolume(userDetector->Construct(), false); userDetector->ConstructSDandField(); nParallelWorlds = userDetector->ConstructParallelGeometries(); @@ -715,33 +616,28 @@ void G4RunManager::InitializeGeometry() kernel->SetNumberOfParallelWorld(nParallelWorlds); } // Notify the VisManager as well - if(G4Threading::IsMasterThread()) - { + if (G4Threading::IsMasterThread()) { G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); - if(pVVisManager != nullptr) - pVVisManager->GeometryHasChanged(); + if (pVVisManager != nullptr) pVVisManager->GeometryHasChanged(); } geometryDirectlyUpdated = false; - geometryInitialized = true; + geometryInitialized = true; stateManager->SetNewState(currentState); } // -------------------------------------------------------------------- void G4RunManager::InitializePhysics() { - G4StateManager* stateManager = G4StateManager::GetStateManager(); + G4StateManager* stateManager = G4StateManager::GetStateManager(); G4ApplicationState currentState = stateManager->GetCurrentState(); - if(currentState == G4State_PreInit || currentState == G4State_Idle) - { + if (currentState == G4State_PreInit || currentState == G4State_Idle) { stateManager->SetNewState(G4State_Init); } - if(physicsList != nullptr) - { + if (physicsList != nullptr) { kernel->InitializePhysics(); } - else - { + else { G4Exception("G4RunManager::InitializePhysics()", "Run0034", FatalException, "G4VUserPhysicsList is not defined!"); } @@ -753,19 +649,15 @@ void G4RunManager::InitializePhysics() void G4RunManager::AbortRun(G4bool softAbort) { // This method is valid only for GeomClosed or EventProc state - G4ApplicationState currentState = - G4StateManager::GetStateManager()->GetCurrentState(); - if(currentState == G4State_GeomClosed || currentState == G4State_EventProc) - { + G4ApplicationState currentState = G4StateManager::GetStateManager()->GetCurrentState(); + if (currentState == G4State_GeomClosed || currentState == G4State_EventProc) { runAborted = true; - if(currentState == G4State_EventProc && !softAbort) - { + if (currentState == G4State_EventProc && !softAbort) { currentEvent->SetEventAborted(); eventManager->AbortCurrentEvent(); } } - else - { + else { G4cerr << "Run is not in progress. AbortRun() ignored." << G4endl; } } @@ -774,22 +666,18 @@ void G4RunManager::AbortRun(G4bool softAbort) void G4RunManager::AbortEvent() { // This method is valid only for EventProc state - G4ApplicationState currentState = - G4StateManager::GetStateManager()->GetCurrentState(); - if(currentState == G4State_EventProc) - { + G4ApplicationState currentState = G4StateManager::GetStateManager()->GetCurrentState(); + if (currentState == G4State_EventProc) { currentEvent->SetEventAborted(); eventManager->AbortCurrentEvent(); } - else - { + else { G4cerr << "Event is not in progress. AbortEevnt() ignored." << G4endl; } } // -------------------------------------------------------------------- -void G4RunManager::DefineWorldVolume(G4VPhysicalVolume* worldVol, - G4bool topologyIsChanged) +void G4RunManager::DefineWorldVolume(G4VPhysicalVolume* worldVol, G4bool topologyIsChanged) { kernel->DefineWorldVolume(worldVol, topologyIsChanged); } @@ -798,30 +686,22 @@ void G4RunManager::DefineWorldVolume(G4VPhysicalVolume* worldVol, void G4RunManager::rndmSaveThisRun() { G4int runNumber = 0; - if(currentRun != nullptr) - runNumber = currentRun->GetRunID(); - if(!storeRandomNumberStatus) - { + if (currentRun != nullptr) runNumber = currentRun->GetRunID(); + if (!storeRandomNumberStatus) { G4cerr << "Warning from G4RunManager::rndmSaveThisRun():" - << " Random number status was not stored prior to this run." - << G4endl << "/random/setSavingFlag command must be issued. " + << " Random number status was not stored prior to this run." << G4endl + << "/random/setSavingFlag command must be issued. " << "Command ignored." << G4endl; return; } - G4String fileIn = randomNumberStatusDir + "currentRun.rndm"; + G4fs::path fileIn = randomNumberStatusDir + "currentRun.rndm"; std::ostringstream os; os << "run" << runNumber << ".rndm" << '\0'; - G4String fileOut = randomNumberStatusDir + os.str(); + G4fs::path fileOut = randomNumberStatusDir + os.str(); -#ifdef WIN32 - G4String copCmd = "/control/shell copy " + fileIn + " " + fileOut; -#else - G4String copCmd = "/control/shell cp " + fileIn + " " + fileOut; -#endif - G4UImanager::GetUIpointer()->ApplyCommand(copCmd); - if(verboseLevel > 0) + if (G4CopyRandomState(fileIn, fileOut, "G4RunManager::rndmSaveThisRun()") && verboseLevel > 0) { G4cout << fileIn << " is copied to " << fileOut << G4endl; } @@ -830,16 +710,13 @@ void G4RunManager::rndmSaveThisRun() // -------------------------------------------------------------------- void G4RunManager::rndmSaveThisEvent() { - if(currentEvent == 0) - { + if (currentEvent == nullptr) { G4cerr << "Warning from G4RunManager::rndmSaveThisEvent():" - << " there is no currentEvent available." << G4endl - << "Command ignored." << G4endl; + << " there is no currentEvent available." << G4endl << "Command ignored." << G4endl; return; } - if(!storeRandomNumberStatus) - { + if (!storeRandomNumberStatus) { G4cerr << "Warning from G4RunManager::rndmSaveThisEvent():" << " Random number engine status is not available." << G4endl << "/random/setSavingFlag command must be issued " @@ -847,42 +724,32 @@ void G4RunManager::rndmSaveThisEvent() return; } - G4String fileIn = randomNumberStatusDir + "currentEvent.rndm"; + G4fs::path fileIn = randomNumberStatusDir + "currentEvent.rndm"; std::ostringstream os; - os << "run" << currentRun->GetRunID() << "evt" << currentEvent->GetEventID() - << ".rndm" << '\0'; - G4String fileOut = randomNumberStatusDir + os.str(); + os << "run" << currentRun->GetRunID() << "evt" << currentEvent->GetEventID() << ".rndm" << '\0'; + G4fs::path fileOut = randomNumberStatusDir + os.str(); -#ifdef WIN32 - G4String copCmd = "/control/shell copy " + fileIn + " " + fileOut; -#else - G4String copCmd = "/control/shell cp " + fileIn + " " + fileOut; -#endif - G4UImanager::GetUIpointer()->ApplyCommand(copCmd); - if(verboseLevel > 0) + if (G4CopyRandomState(fileIn, fileOut, "G4RunManager::rndmSaveThisEvent()") && verboseLevel > 0) { G4cout << fileIn << " is copied to " << fileOut << G4endl; - } + } } // -------------------------------------------------------------------- void G4RunManager::RestoreRandomNumberStatus(const G4String& fileN) { G4String fileNameWithDirectory; - if(fileN.find("/") == std::string::npos) - { + if (fileN.find('/') == std::string::npos) { fileNameWithDirectory = randomNumberStatusDir + fileN; } - else - { + else { fileNameWithDirectory = fileN; } G4Random::restoreEngineStatus(fileNameWithDirectory); - if(verboseLevel > 0) - G4cout << "RandomNumberEngineStatus restored from file: " - << fileNameWithDirectory << G4endl; + if (verboseLevel > 0) + G4cout << "RandomNumberEngineStatus restored from file: " << fileNameWithDirectory << G4endl; G4Random::showEngineStatus(); } @@ -904,60 +771,44 @@ void G4RunManager::ConstructScoringWorlds() using MeshShape = G4VScoringMesh::MeshShape; G4ScoringManager* ScM = G4ScoringManager::GetScoringManagerIfExist(); - if(ScM == nullptr) - return; + if (ScM == nullptr) return; - G4int nPar = (G4int)ScM->GetNumberOfMesh(); - if(nPar < 1) - return; + auto nPar = (G4int)ScM->GetNumberOfMesh(); + if (nPar < 1) return; auto theParticleIterator = G4ParticleTable::GetParticleTable()->GetIterator(); - for(G4int iw = 0; iw < nPar; ++iw) - { + for (G4int iw = 0; iw < nPar; ++iw) { G4VScoringMesh* mesh = ScM->GetMesh(iw); - if(fGeometryHasBeenDestroyed) - mesh->GeometryHasBeenDestroyed(); + if (fGeometryHasBeenDestroyed) mesh->GeometryHasBeenDestroyed(); G4VPhysicalVolume* pWorld = nullptr; - if(mesh->GetShape() != MeshShape::realWorldLogVol) - { - pWorld = G4TransportationManager::GetTransportationManager() - ->IsWorldExisting(ScM->GetWorldName(iw)); - if(pWorld == nullptr) - { - pWorld = G4TransportationManager::GetTransportationManager() - ->GetParallelWorld(ScM->GetWorldName(iw)); + if (mesh->GetShape() != MeshShape::realWorldLogVol) { + pWorld = + G4TransportationManager::GetTransportationManager()->IsWorldExisting(ScM->GetWorldName(iw)); + if (pWorld == nullptr) { + pWorld = G4TransportationManager::GetTransportationManager()->GetParallelWorld( + ScM->GetWorldName(iw)); pWorld->SetName(ScM->GetWorldName(iw)); - G4ParallelWorldProcess* theParallelWorldProcess = - mesh->GetParallelWorldProcess(); - if(theParallelWorldProcess != nullptr) - { + G4ParallelWorldProcess* theParallelWorldProcess = mesh->GetParallelWorldProcess(); + if (theParallelWorldProcess != nullptr) { theParallelWorldProcess->SetParallelWorld(ScM->GetWorldName(iw)); } - else - { - theParallelWorldProcess = - new G4ParallelWorldProcess(ScM->GetWorldName(iw)); + else { + theParallelWorldProcess = new G4ParallelWorldProcess(ScM->GetWorldName(iw)); mesh->SetParallelWorldProcess(theParallelWorldProcess); theParallelWorldProcess->SetParallelWorld(ScM->GetWorldName(iw)); theParticleIterator->reset(); - while((*theParticleIterator)()) - { + while ((*theParticleIterator)()) { G4ParticleDefinition* particle = theParticleIterator->value(); - G4ProcessManager* pmanager = particle->GetProcessManager(); - if(pmanager != nullptr) - { + G4ProcessManager* pmanager = particle->GetProcessManager(); + if (pmanager != nullptr) { pmanager->AddProcess(theParallelWorldProcess); - if(theParallelWorldProcess->IsAtRestRequired(particle)) - { - pmanager->SetProcessOrdering(theParallelWorldProcess, idxAtRest, - 9900); + if (theParallelWorldProcess->IsAtRestRequired(particle)) { + pmanager->SetProcessOrdering(theParallelWorldProcess, idxAtRest, 9900); } - pmanager->SetProcessOrderingToSecond(theParallelWorldProcess, - idxAlongStep); - pmanager->SetProcessOrdering(theParallelWorldProcess, idxPostStep, - 9900); + pmanager->SetProcessOrderingToSecond(theParallelWorldProcess, idxAlongStep); + pmanager->SetProcessOrdering(theParallelWorldProcess, idxPostStep, 9900); } } } @@ -972,28 +823,22 @@ void G4RunManager::ConstructScoringWorlds() // -------------------------------------------------------------------- void G4RunManager::UpdateScoring() { - if(isScoreNtupleWriter) - { + if (isScoreNtupleWriter) { G4VScoreNtupleWriter::Instance()->Fill(currentEvent->GetHCofThisEvent(), currentEvent->GetEventID()); } G4ScoringManager* ScM = G4ScoringManager::GetScoringManagerIfExist(); - if(ScM == nullptr) - return; - G4int nPar = (G4int)ScM->GetNumberOfMesh(); - if(nPar < 1) - return; + if (ScM == nullptr) return; + auto nPar = (G4int)ScM->GetNumberOfMesh(); + if (nPar < 1) return; G4HCofThisEvent* HCE = currentEvent->GetHCofThisEvent(); - if(HCE == nullptr) - return; - G4int nColl = (G4int)HCE->GetCapacity(); - for(G4int i = 0; i < nColl; ++i) - { + if (HCE == nullptr) return; + auto nColl = (G4int)HCE->GetCapacity(); + for (G4int i = 0; i < nColl; ++i) { G4VHitsCollection* HC = HCE->GetHC(i); - if(HC != nullptr) - ScM->Accumulate(HC); + if (HC != nullptr) ScM->Accumulate(HC); } } @@ -1001,35 +846,29 @@ void G4RunManager::UpdateScoring() void G4RunManager::ReOptimizeMotherOf(G4VPhysicalVolume* pPhys) { G4LogicalVolume* pMotherL = pPhys->GetMotherLogical(); - if(pMotherL != nullptr) - ReOptimize(pMotherL); + if (pMotherL != nullptr) ReOptimize(pMotherL); } // -------------------------------------------------------------------- void G4RunManager::ReOptimize(G4LogicalVolume* pLog) { G4Timer localtimer; - if(verboseLevel > 1) - { + if (verboseLevel > 1) { localtimer.Start(); } G4SmartVoxelHeader* header = pLog->GetVoxelHeader(); delete header; header = new G4SmartVoxelHeader(pLog); pLog->SetVoxelHeader(header); - if(verboseLevel > 1) - { + if (verboseLevel > 1) { localtimer.Stop(); - G4SmartVoxelStat stat(pLog, header, localtimer.GetSystemElapsed(), - localtimer.GetUserElapsed()); - G4cout << G4endl << "Voxelisation of logical volume <" << pLog->GetName() - << ">" << G4endl; - G4cout << " heads : " << stat.GetNumberHeads() - << " - nodes : " << stat.GetNumberNodes() + G4SmartVoxelStat stat(pLog, header, localtimer.GetSystemElapsed(), localtimer.GetUserElapsed()); + G4cout << G4endl << "Voxelisation of logical volume <" << pLog->GetName() << ">" << G4endl; + G4cout << " heads : " << stat.GetNumberHeads() << " - nodes : " << stat.GetNumberNodes() << " - pointers : " << stat.GetNumberPointers() << G4endl; G4cout << " Memory used : " << (stat.GetMemoryUse() + 512) / 1024 - << "k - total time : " << stat.GetTotalTime() - << " - system time : " << stat.GetSysTime() << G4endl; + << "k - total time : " << stat.GetTotalTime() << " - system time : " << stat.GetSysTime() + << G4endl; } } @@ -1047,23 +886,19 @@ void G4RunManager::SetUserInitialization(G4VUserPhysicsList* userInit) } // -------------------------------------------------------------------- -void G4RunManager::SetUserInitialization( - G4UserWorkerInitialization* /*userInit*/) +void G4RunManager::SetUserInitialization(G4UserWorkerInitialization* /*userInit*/) { - G4Exception( - "G4RunManager::SetUserInitialization()", "Run3001", FatalException, - "Base-class G4RunManager cannot take G4UserWorkerInitialization. Use " - "G4MTRunManager."); + G4Exception("G4RunManager::SetUserInitialization()", "Run3001", FatalException, + "Base-class G4RunManager cannot take G4UserWorkerInitialization. Use " + "G4MTRunManager."); } // -------------------------------------------------------------------- -void G4RunManager::SetUserInitialization( - G4UserWorkerThreadInitialization* /*userInit*/) +void G4RunManager::SetUserInitialization(G4UserWorkerThreadInitialization* /*userInit*/) { - G4Exception( - "G4RunManager::SetUserThreadInitialization()", "Run3001", FatalException, - "Base-class G4RunManager cannot take G4UserWorkerThreadInitialization. " - "Use G4MTRunManager."); + G4Exception("G4RunManager::SetUserThreadInitialization()", "Run3001", FatalException, + "Base-class G4RunManager cannot take G4UserWorkerThreadInitialization. " + "Use G4MTRunManager."); } // -------------------------------------------------------------------- @@ -1116,12 +951,10 @@ void G4RunManager::SetUserAction(G4UserSteppingAction* userAction) // -------------------------------------------------------------------- void G4RunManager::GeometryHasBeenModified(G4bool prop) { - if(prop) - { + if (prop) { G4UImanager::GetUIpointer()->ApplyCommand("/run/geometryModified"); } - else - { + else { kernel->GeometryHasBeenModified(); } } @@ -1129,12 +962,9 @@ void G4RunManager::GeometryHasBeenModified(G4bool prop) // -------------------------------------------------------------------- void G4RunManager::ReinitializeGeometry(G4bool destroyFirst, G4bool prop) { - if(destroyFirst && G4Threading::IsMasterThread()) - { - if(verboseLevel > 0) - { - G4cout << "#### Assemblies, Volumes and Solids Stores are wiped out." - << G4endl; + if (destroyFirst && G4Threading::IsMasterThread()) { + if (verboseLevel > 0) { + G4cout << "#### Assemblies, Volumes and Solids Stores are wiped out." << G4endl; } G4GeometryManager::GetInstance()->OpenGeometry(); G4AssemblyStore::GetInstance()->Clean(); @@ -1145,21 +975,15 @@ void G4RunManager::ReinitializeGeometry(G4bool destroyFirst, G4bool prop) // remove all logical volume pointers from regions // exception: world logical volume pointer must be kept G4RegionStore* regionStore = G4RegionStore::GetInstance(); - for(auto rItr = regionStore->cbegin(); rItr != regionStore->cend(); ++rItr) - { - if((*rItr)->GetName() == "DefaultRegionForTheWorld") - continue; - // if((*rItr)->GetName()=="DefaultRegionForParallelWorld") continue; - auto lvItr = (*rItr)->GetRootLogicalVolumeIterator(); - for(std::size_t iRLV=0; iRLV<(*rItr)->GetNumberOfRootVolumes(); ++iRLV) - { - (*rItr)->RemoveRootLogicalVolume(*lvItr, false); + for (const auto& rItr : *regionStore) { + if (rItr->GetName() == "DefaultRegionForTheWorld") continue; + auto lvItr = rItr->GetRootLogicalVolumeIterator(); + for (std::size_t iRLV = 0; iRLV < rItr->GetNumberOfRootVolumes(); ++iRLV) { + rItr->RemoveRootLogicalVolume(*lvItr, false); ++lvItr; } - if(verboseLevel > 0) - { - G4cout << "#### Region <" << (*rItr)->GetName() << "> is cleared." - << G4endl; + if (verboseLevel > 0) { + G4cout << "#### Region <" << rItr->GetName() << "> is cleared." << G4endl; } } @@ -1167,20 +991,16 @@ void G4RunManager::ReinitializeGeometry(G4bool destroyFirst, G4bool prop) fGeometryHasBeenDestroyed = true; G4TransportationManager::GetTransportationManager()->ClearParallelWorlds(); } - if(prop) - { + if (prop) { G4UImanager::GetUIpointer()->ApplyCommand("/run/reinitializeGeometry"); } - else - { + else { kernel->GeometryHasBeenModified(); geometryInitialized = false; // Notify the VisManager as well - if(G4Threading::IsMasterThread()) - { + if (G4Threading::IsMasterThread()) { G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); - if(pVVisManager != nullptr) - pVVisManager->GeometryHasChanged(); + if (pVVisManager != nullptr) pVVisManager->GeometryHasChanged(); } } } @@ -1189,8 +1009,8 @@ void G4RunManager::ReinitializeGeometry(G4bool destroyFirst, G4bool prop) void G4RunManager::ConfigureProfilers(G4int argc, char** argv) { std::vector _args; - for(G4int i = 0; i < argc; ++i) - _args.push_back(argv[i]); + for (G4int i = 0; i < argc; ++i) + _args.emplace_back(argv[i]); ConfigureProfilers(_args); } @@ -1231,17 +1051,16 @@ extern "C" // guard against re-initialization static G4bool _once = false; - if(_once) - return; + if (_once) return; _once = true; puts(">>> G4RunProfilerInit <<<"); - using RunProfilerConfig = G4ProfilerConfig; + using RunProfilerConfig = G4ProfilerConfig; using EventProfilerConfig = G4ProfilerConfig; using TrackProfilerConfig = G4ProfilerConfig; - using StepProfilerConfig = G4ProfilerConfig; - using UserProfilerConfig = G4ProfilerConfig; + using StepProfilerConfig = G4ProfilerConfig; + using UserProfilerConfig = G4ProfilerConfig; // // these are the default functions for evaluating whether @@ -1256,19 +1075,16 @@ extern "C" }; TrackProfilerConfig::GetFallbackQueryFunctor() = [](const G4Track* _track) { - return G4Profiler::GetEnabled(G4ProfileType::Track) && _track && - _track->GetDynamicParticle(); + return G4Profiler::GetEnabled(G4ProfileType::Track) && _track && _track->GetDynamicParticle(); }; StepProfilerConfig::GetFallbackQueryFunctor() = [](const G4Step* _step) { - return G4Profiler::GetEnabled(G4ProfileType::Step) && _step && - _step->GetTrack(); + return G4Profiler::GetEnabled(G4ProfileType::Step) && _step && _step->GetTrack(); }; - UserProfilerConfig::GetFallbackQueryFunctor() = - [](const std::string& _user) { - return G4Profiler::GetEnabled(G4ProfileType::User) && !_user.empty(); - }; + UserProfilerConfig::GetFallbackQueryFunctor() = [](const std::string& _user) { + return G4Profiler::GetEnabled(G4ProfileType::User) && !_user.empty(); + }; // // these are the default functions which encode the profiling label. @@ -1278,9 +1094,8 @@ extern "C" return TIMEMORY_JOIN('/', "G4Run", _run->GetRunID()); }; - EventProfilerConfig::GetFallbackLabelFunctor() = - [](const G4Event* _event) -> std::string { - if(G4Profiler::GetPerEvent()) + EventProfilerConfig::GetFallbackLabelFunctor() = [](const G4Event* _event) -> std::string { + if (G4Profiler::GetPerEvent()) return TIMEMORY_JOIN('/', "G4Event", _event->GetEventID()); else return "G4Event"; @@ -1296,45 +1111,42 @@ extern "C" return TIMEMORY_JOIN('/', "G4Step", pdef->GetParticleName()); }; - UserProfilerConfig::GetFallbackLabelFunctor() = - [](const std::string& _user) { return _user; }; + UserProfilerConfig::GetFallbackLabelFunctor() = [](const std::string& _user) { + return _user; + }; - using RunTool = typename RunProfilerConfig::type; + using RunTool = typename RunProfilerConfig::type; using EventTool = typename EventProfilerConfig::type; using TrackTool = typename TrackProfilerConfig::type; - using StepTool = typename StepProfilerConfig::type; - using UserTool = typename UserProfilerConfig::type; + using StepTool = typename StepProfilerConfig::type; + using UserTool = typename UserProfilerConfig::type; - RunProfilerConfig::GetFallbackToolFunctor() = - [](const std::string& _label) { return new RunTool{ _label }; }; + RunProfilerConfig::GetFallbackToolFunctor() = [](const std::string& _label) { + return new RunTool{_label}; + }; - EventProfilerConfig::GetFallbackToolFunctor() = - [](const std::string& _label) { return new EventTool{ _label }; }; + EventProfilerConfig::GetFallbackToolFunctor() = [](const std::string& _label) { + return new EventTool{_label}; + }; - TrackProfilerConfig::GetFallbackToolFunctor() = - [](const std::string& _label) { - return new TrackTool(_label, tim::scope::config(tim::scope::flat{})); - }; + TrackProfilerConfig::GetFallbackToolFunctor() = [](const std::string& _label) { + return new TrackTool(_label, tim::scope::config(tim::scope::flat{})); + }; - StepProfilerConfig::GetFallbackToolFunctor() = - [](const std::string& _label) { - return new StepTool(_label, tim::scope::config(tim::scope::flat{})); - }; + StepProfilerConfig::GetFallbackToolFunctor() = [](const std::string& _label) { + return new StepTool(_label, tim::scope::config(tim::scope::flat{})); + }; - UserProfilerConfig::GetFallbackToolFunctor() = - [](const std::string& _label) { return new UserTool(_label); }; + UserProfilerConfig::GetFallbackToolFunctor() = [](const std::string& _label) { + return new UserTool(_label); + }; auto comps = "wall_clock, cpu_clock, cpu_util, peak_rss"; - auto run_env_comps = - tim::get_env("G4PROFILE_RUN_COMPONENTS", comps); - auto event_env_comps = - tim::get_env("G4PROFILE_EVENT_COMPONENTS", comps); - auto track_env_comps = - tim::get_env("G4PROFILE_TRACK_COMPONENTS", comps); - auto step_env_comps = - tim::get_env("G4PROFILE_STEP_COMPONENTS", comps); - auto user_env_comps = - tim::get_env("G4PROFILE_USER_COMPONENTS", comps); + auto run_env_comps = tim::get_env("G4PROFILE_RUN_COMPONENTS", comps); + auto event_env_comps = tim::get_env("G4PROFILE_EVENT_COMPONENTS", comps); + auto track_env_comps = tim::get_env("G4PROFILE_TRACK_COMPONENTS", comps); + auto step_env_comps = tim::get_env("G4PROFILE_STEP_COMPONENTS", comps); + auto user_env_comps = tim::get_env("G4PROFILE_USER_COMPONENTS", comps); tim::configure(run_env_comps); tim::configure(event_env_comps); @@ -1350,7 +1162,7 @@ extern "C" #ifdef GEANT4_USE_TIMEMORY namespace { - static G4bool profiler_is_initialized = (G4RunProfilerInit(), true); +static G4bool profiler_is_initialized = (G4RunProfilerInit(), true); } #endif diff --git a/source/run/src/G4RunManagerFactory.cc b/source/run/src/G4RunManagerFactory.cc index f0da3b5a867..eccee3668d6 100644 --- a/source/run/src/G4RunManagerFactory.cc +++ b/source/run/src/G4RunManagerFactory.cc @@ -26,74 +26,69 @@ // #include "G4RunManagerFactory.hh" + #include "G4EnvironmentUtils.hh" -#include "G4RunManager.hh" #include "G4MTRunManager.hh" +#include "G4RunManager.hh" #include "G4TaskRunManager.hh" #include "G4Threading.hh" + #include "templates.hh" //============================================================================// namespace { - // failure message - static void fail(const std::string& _prefix, const std::string& _name, - const std::set& _opts, G4int _num) - { - G4ExceptionDescription msg; - msg << _prefix << ": \"" << _name << "\". " - << "Must be one of: "; - std::stringstream ss; - for(const auto& itr : _opts) - ss << ", \"" << itr << "\""; - msg << ss.str().substr(2); - auto mnum = std::string("RunManagerFactory000") + std::to_string(_num); - G4Exception("G4RunManagerFactory::CreateRunManager", mnum.c_str(), - FatalException, msg); - } +// failure message +static void fail(const std::string& _prefix, const std::string& _name, + const std::set& _opts, G4int _num) +{ + G4ExceptionDescription msg; + msg << _prefix << ": \"" << _name << "\". " + << "Must be one of: "; + std::stringstream ss; + for (const auto& itr : _opts) + ss << ", \"" << itr << "\""; + msg << ss.str().substr(2); + auto mnum = std::string("RunManagerFactory000") + std::to_string(_num); + G4Exception("G4RunManagerFactory::CreateRunManager", mnum.c_str(), FatalException, msg); +} - static G4RunManager* master_run_manager = nullptr; - static G4MTRunManager* mt_master_run_manager = nullptr; - static G4RunManagerKernel* master_run_manager_kernel = nullptr; +static G4RunManager* master_run_manager = nullptr; +static G4MTRunManager* mt_master_run_manager = nullptr; +static G4RunManagerKernel* master_run_manager_kernel = nullptr; } // namespace //============================================================================// G4RunManager* G4RunManagerFactory::CreateRunManager(G4RunManagerType _type, G4VUserTaskQueue* _queue, - G4bool fail_if_unavail, - G4int nthreads) + G4bool fail_if_unavail, G4int nthreads) { // If the supplied type is not ...Only, then allow override from environment std::string rm_type = GetName(_type); - if(_type == G4RunManagerType::SerialOnly || - _type == G4RunManagerType::MTOnly || - _type == G4RunManagerType::TaskingOnly || - _type == G4RunManagerType::TBBOnly) + if (_type == G4RunManagerType::SerialOnly || _type == G4RunManagerType::MTOnly + || _type == G4RunManagerType::TaskingOnly || _type == G4RunManagerType::TBBOnly) { // MUST fail if unavail in this case fail_if_unavail = true; } - else - { + else { // - G4RUN_MANAGER_TYPE can be set to override the "default" // - If the requested type isn't available, then it will fall back to the // system default // - G4FORCE_RUN_MANAGER_TYPE can be set to force a specific type // - A G4Exception is raised if the requested type is not available - rm_type = G4GetEnv("G4RUN_MANAGER_TYPE", GetName(_type), + rm_type = G4GetEnv("G4RUN_MANAGER_TYPE", GetName(_type), "Overriding G4RunManager type..."); - auto force_rm = G4GetEnv("G4FORCE_RUN_MANAGER_TYPE", "", - "Forcing G4RunManager type..."); + auto force_rm = + G4GetEnv("G4FORCE_RUN_MANAGER_TYPE", "", "Forcing G4RunManager type..."); - if(force_rm.length() > 0) - { - rm_type = force_rm; + if (force_rm.length() > 0) { + rm_type = force_rm; fail_if_unavail = true; } - else if(rm_type.empty()) - { + else if (rm_type.empty()) { rm_type = GetDefault(); } } @@ -102,24 +97,20 @@ G4RunManager* G4RunManagerFactory::CreateRunManager(G4RunManagerType _type, // NB: Comparison at present is case sensitive (needs a comparator in // GetOptions) auto opts = GetOptions(); - if(opts.find(rm_type) == opts.end()) - { - if(fail_if_unavail) - { + if (opts.find(rm_type) == opts.end()) { + if (fail_if_unavail) { fail("Run manager type is not available", rm_type, opts, 1); } - else - { + else { rm_type = GetDefault(); } } // Construct requested RunManager given type - _type = GetType(rm_type); + _type = GetType(rm_type); G4RunManager* rm = nullptr; - switch(_type) - { + switch (_type) { case G4RunManagerType::Serial: rm = new G4RunManager(); break; @@ -151,15 +142,13 @@ G4RunManager* G4RunManagerFactory::CreateRunManager(G4RunManagerType _type, break; } - if(!rm) - fail("Failure creating run manager", GetName(_type), GetOptions(), 2); + if (rm == nullptr) fail("Failure creating run manager", GetName(_type), GetOptions(), 2); auto mtrm = dynamic_cast(rm); - if(nthreads > 0 && mtrm) - mtrm->SetNumberOfThreads(nthreads); + if (nthreads > 0 && (mtrm != nullptr)) mtrm->SetNumberOfThreads(nthreads); - master_run_manager = rm; - mt_master_run_manager = mtrm; + master_run_manager = rm; + mt_master_run_manager = mtrm; master_run_manager_kernel = rm->kernel; G4ConsumeParameters(_queue); @@ -171,8 +160,6 @@ G4RunManager* G4RunManagerFactory::CreateRunManager(G4RunManagerType _type, std::string G4RunManagerFactory::GetDefault() { #if defined(G4MULTITHREADED) - // For version 10.7, default is set to MT - // return "MT"; return "Tasking"; #else return "Serial"; @@ -184,9 +171,9 @@ std::string G4RunManagerFactory::GetDefault() std::set G4RunManagerFactory::GetOptions() { static auto _instance = []() { - std::set options = { "Serial" }; + std::set options = {"Serial"}; #if defined(G4MULTITHREADED) - options.insert({ "MT", "Tasking" }); + options.insert({"MT", "Tasking"}); # if defined(GEANT4_USE_TBB) options.insert("TBB"); # endif @@ -203,14 +190,10 @@ G4RunManagerType G4RunManagerFactory::GetType(const std::string& key) // IGNORES CASE! static const auto opts = std::regex::icase; - if(std::regex_match(key, std::regex("^(Serial).*", opts))) - return G4RunManagerType::Serial; - else if(std::regex_match(key, std::regex("^(MT).*", opts))) - return G4RunManagerType::MT; - else if(std::regex_match(key, std::regex("^(Task).*", opts))) - return G4RunManagerType::Tasking; - else if(std::regex_match(key, std::regex("^(TBB).*", opts))) - return G4RunManagerType::TBB; + if (std::regex_match(key, std::regex("^(Serial).*", opts))) return G4RunManagerType::Serial; + if (std::regex_match(key, std::regex("^(MT).*", opts))) return G4RunManagerType::MT; + if (std::regex_match(key, std::regex("^(Task).*", opts))) return G4RunManagerType::Tasking; + if (std::regex_match(key, std::regex("^(TBB).*", opts))) return G4RunManagerType::TBB; return G4RunManagerType::Default; } @@ -219,8 +202,7 @@ G4RunManagerType G4RunManagerFactory::GetType(const std::string& key) std::string G4RunManagerFactory::GetName(G4RunManagerType _type) { - switch(_type) - { + switch (_type) { case G4RunManagerType::Serial: return "Serial"; case G4RunManagerType::SerialOnly: @@ -252,15 +234,12 @@ G4RunManager* G4RunManagerFactory::GetMasterRunManager() return G4RunManager::GetRunManager(); #else // if the application used G4RunManagerFactory to create the run-manager - if(master_run_manager) - return master_run_manager; + if (master_run_manager != nullptr) return master_run_manager; // if the application did not use G4RunManagerFactory and is MT - if(G4Threading::IsMultithreadedApplication()) - { + if (G4Threading::IsMultithreadedApplication()) { auto mt_rm = GetMTMasterRunManager(); - if(mt_rm) - return mt_rm; + if (mt_rm != nullptr) return mt_rm; } // if the application did not use G4RunManagerFactory and is serial @@ -274,15 +253,12 @@ G4MTRunManager* G4RunManagerFactory::GetMTMasterRunManager() { #if defined(G4MULTITHREADED) // if the application used G4RunManagerFactory to create the run-manager - if(mt_master_run_manager) - return mt_master_run_manager; + if (mt_master_run_manager != nullptr) return mt_master_run_manager; // if the application did not use G4RunManagerFactory - if(G4Threading::IsMultithreadedApplication()) - { + if (G4Threading::IsMultithreadedApplication()) { auto task_rm = G4TaskRunManager::GetMasterRunManager(); - if(task_rm) - return task_rm; + if (task_rm != nullptr) return task_rm; return G4MTRunManager::GetMasterRunManager(); } #endif @@ -299,15 +275,12 @@ G4RunManagerKernel* G4RunManagerFactory::GetMasterRunManagerKernel() return G4RunManager::GetRunManager()->kernel; #else // if the application used G4RunManagerFactory to create the run-manager - if(master_run_manager_kernel) - return master_run_manager_kernel; + if (master_run_manager_kernel != nullptr) return master_run_manager_kernel; // if the application did not use G4RunManagerFactory and is MT - if(G4Threading::IsMultithreadedApplication()) - { + if (G4Threading::IsMultithreadedApplication()) { auto mt_rm = GetMTMasterRunManager(); - if(mt_rm) - return mt_rm->kernel; + if (mt_rm != nullptr) return mt_rm->kernel; } // if the application did not use G4RunManagerFactory and is serial diff --git a/source/run/src/G4RunManagerKernel.cc b/source/run/src/G4RunManagerKernel.cc index 8a675e6c8f4..1800c7dd0e3 100644 --- a/source/run/src/G4RunManagerKernel.cc +++ b/source/run/src/G4RunManagerKernel.cc @@ -28,54 +28,49 @@ // Author: M.Asai, 1 August 2003 // -------------------------------------------------------------------- -#include - #include "G4RunManagerKernel.hh" +#include "G4AllocatorList.hh" #include "G4ApplicationState.hh" +#include "G4AutoLock.hh" #include "G4ExceptionHandler.hh" #include "G4FieldManagerStore.hh" +#include "G4Geantino.hh" #include "G4GeometryManager.hh" +#include "G4IonConstructor.hh" +#include "G4IonTable.hh" #include "G4LogicalVolume.hh" -#include "G4NavigationHistoryPool.hh" -#include "G4PathFinder.hh" -#include "G4PrimaryTransformer.hh" -#include "G4StateManager.hh" -#include "G4TransportationManager.hh" -#include "G4VPhysicalVolume.hh" -#include "G4VUserPhysicsList.hh" #include "G4LogicalVolumeStore.hh" - +#include "G4MTRunManager.hh" +#include "G4NavigationHistoryPool.hh" #include "G4ParallelWorldProcessStore.hh" +#include "G4ParticleDefinition.hh" #include "G4ParticleTable.hh" +#include "G4ParticleTableIterator.hh" +#include "G4PathFinder.hh" +#include "G4PrimaryTransformer.hh" +#include "G4ProcessManager.hh" +#include "G4ProcessVector.hh" #include "G4ProductionCuts.hh" #include "G4ProductionCutsTable.hh" +#include "G4RNGHelper.hh" #include "G4Region.hh" #include "G4RegionStore.hh" #include "G4SDManager.hh" +#include "G4ScoreSplittingProcess.hh" +#include "G4StateManager.hh" #include "G4TiMemory.hh" +#include "G4TransportationManager.hh" #include "G4UImanager.hh" #include "G4UnitsTable.hh" +#include "G4VPhysicalVolume.hh" +#include "G4VProcess.hh" +#include "G4VUserPhysicsList.hh" #include "G4VVisManager.hh" #include "G4Version.hh" #include "G4ios.hh" -#include "G4Geantino.hh" -#include "G4IonConstructor.hh" -#include "G4IonTable.hh" -#include "G4ParticleTableIterator.hh" -#include "G4ParticleDefinition.hh" -#include "G4ParticleTable.hh" -#include "G4ProcessManager.hh" -#include "G4ProcessVector.hh" -#include "G4VProcess.hh" -#include "G4ScoreSplittingProcess.hh" - -#include "G4AllocatorList.hh" -#include "G4MTRunManager.hh" - -#include "G4AutoLock.hh" -#include "G4RNGHelper.hh" +#include #ifdef G4BT_DEBUG # include "G4Backtrace.hh" @@ -91,8 +86,7 @@ # undef theParticleIterator #endif -G4ThreadLocal G4RunManagerKernel* -G4RunManagerKernel::fRunManagerKernel = nullptr; +G4ThreadLocal G4RunManagerKernel* G4RunManagerKernel::fRunManagerKernel = nullptr; // -------------------------------------------------------------------- G4RunManagerKernel* G4RunManagerKernel::GetRunManagerKernel() @@ -103,55 +97,45 @@ G4RunManagerKernel* G4RunManagerKernel::GetRunManagerKernel() // -------------------------------------------------------------------- G4RunManagerKernel::G4RunManagerKernel() { - #ifdef G4FPE_DEBUG - InvalidOperationDetection(); - #endif +#ifdef G4FPE_DEBUG + InvalidOperationDetection(); +#endif - #ifdef G4BT_DEBUG - auto _signals = G4GetEnv("G4BACKTRACE", ""); - if(_signals.empty()) - { - G4Backtrace::Enable(); - } - else - { - G4Backtrace::Enable(_signals); - } - #endif +#ifdef G4BT_DEBUG + auto _signals = G4GetEnv("G4BACKTRACE", ""); + if (_signals.empty()) { + G4Backtrace::Enable(); + } + else { + G4Backtrace::Enable(_signals); + } +#endif G4AllocatorList* allocList = G4AllocatorList::GetAllocatorListIfExist(); - if(allocList != nullptr) - numberOfStaticAllocators = (G4int)allocList->Size(); + if (allocList != nullptr) numberOfStaticAllocators = (G4int)allocList->Size(); - if(G4StateManager::GetStateManager()->GetExceptionHandler() == nullptr) - { - defaultExceptionHandler = new G4ExceptionHandler(); + if (G4StateManager::GetStateManager()->GetExceptionHandler() == nullptr) { + defaultExceptionHandler = new G4ExceptionHandler(); } - if(fRunManagerKernel != nullptr) - { - G4Exception("G4RunManagerKernel::G4RunManagerKernel()", "Run0001", - FatalException, + if (fRunManagerKernel != nullptr) { + G4Exception("G4RunManagerKernel::G4RunManagerKernel()", "Run0001", FatalException, "More than one G4RunManagerKernel is constructed."); } fRunManagerKernel = this; G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable(); - if(particleTable->entries() > 0) - { + if (particleTable->entries() > 0) { // No particle should be registered beforehand G4ExceptionDescription ED; ED << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << G4endl; ED << " G4RunManagerKernel fatal exception" << G4endl; ED << " -- Following particles have already been registered" << G4endl; ED << " before G4RunManagerKernel is instantiated." << G4endl; - for(G4int i = 0; i < particleTable->entries(); ++i) - { - ED << " " << particleTable->GetParticle(i)->GetParticleName() - << G4endl; + for (G4int i = 0; i < particleTable->entries(); ++i) { + ED << " " << particleTable->GetParticle(i)->GetParticleName() << G4endl; } ED << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << G4endl; - G4Exception("G4RunManagerKernel::G4RunManagerKernel()", "Run0002", - FatalException, ED); + G4Exception("G4RunManagerKernel::G4RunManagerKernel()", "Run0002", FatalException, ED); } // construction of Geant4 kernel classes @@ -161,117 +145,96 @@ G4RunManagerKernel::G4RunManagerKernel() defaultRegionForParallelWorld = new G4Region("DefaultRegionForParallelWorld"); // deleted by store defaultRegion->SetProductionCuts( - G4ProductionCutsTable::GetProductionCutsTable() - ->GetDefaultProductionCuts()); + G4ProductionCutsTable::GetProductionCutsTable()->GetDefaultProductionCuts()); defaultRegionForParallelWorld->SetProductionCuts( - G4ProductionCutsTable::GetProductionCutsTable() - ->GetDefaultProductionCuts()); + G4ProductionCutsTable::GetProductionCutsTable()->GetDefaultProductionCuts()); runManagerKernelType = sequentialRMK; // set the initial application state G4StateManager::GetStateManager()->SetNewState(G4State_PreInit); // version banner - G4String vs = G4Version; - vs = vs.substr(1, vs.size() - 2); + G4String vs = G4Version; + vs = vs.substr(1, vs.size() - 2); versionString = " Geant4 version "; versionString += vs; versionString += " "; versionString += G4Date; - G4cout << G4endl - << "**************************************************************" - << G4endl << versionString << G4endl - << " Copyright : Geant4 Collaboration" << G4endl - << " References : NIM A 506 (2003), 250-303" - << G4endl - << " : IEEE-TNS 53 (2006), 270-278" - << G4endl - << " : NIM A 835 (2016), 186-225" - << G4endl << " WWW : http://geant4.org/" - << G4endl - << "**************************************************************" - << G4endl << G4endl; + G4cout << G4endl << "**************************************************************" << G4endl + << versionString << G4endl << " Copyright : Geant4 Collaboration" + << G4endl << " References : NIM A 506 (2003), 250-303" << G4endl + << " : IEEE-TNS 53 (2006), 270-278" << G4endl + << " : NIM A 835 (2016), 186-225" << G4endl + << " WWW : http://geant4.org/" << G4endl + << "**************************************************************" << G4endl << G4endl; } // -------------------------------------------------------------------- G4RunManagerKernel::G4RunManagerKernel(RMKType rmkType) { - // This version of the constructor should never be called in sequential mode! - #ifndef G4MULTITHREADED - G4ExceptionDescription msg; - msg << "Geant4 code is compiled without multi-threading support " - "(-DG4MULTITHREADED is set to off)."; - msg << " This type of RunManagerKernel can only be used in mult-threaded " - "applications."; - G4Exception("G4RunManagerKernel::G4RunManagerKernel(G4bool)", "Run0105", - FatalException, msg); - #endif - - #ifdef G4FPE_DEBUG - if(G4Threading::IsMasterThread()) - { - InvalidOperationDetection(); - } - #endif +// This version of the constructor should never be called in sequential mode! +#ifndef G4MULTITHREADED + G4ExceptionDescription msg; + msg << "Geant4 code is compiled without multi-threading support " + "(-DG4MULTITHREADED is set to off)."; + msg << " This type of RunManagerKernel can only be used in mult-threaded " + "applications."; + G4Exception("G4RunManagerKernel::G4RunManagerKernel(G4bool)", "Run0105", FatalException, msg); +#endif - #ifdef G4BT_DEBUG - auto _signals = G4GetEnv("G4BACKTRACE", ""); - if(_signals.empty()) - { - G4Backtrace::Enable(); - } - else - { - G4Backtrace::Enable(_signals); - } - #endif +#ifdef G4FPE_DEBUG + if (G4Threading::IsMasterThread()) { + InvalidOperationDetection(); + } +#endif - if(G4StateManager::GetStateManager()->GetExceptionHandler() == nullptr) - { - defaultExceptionHandler = new G4ExceptionHandler(); +#ifdef G4BT_DEBUG + auto _signals = G4GetEnv("G4BACKTRACE", ""); + if (_signals.empty()) { + G4Backtrace::Enable(); } + else { + G4Backtrace::Enable(_signals); + } +#endif - if(fRunManagerKernel != nullptr) - { - G4Exception("G4RunManagerKernel::G4RunManagerKernel()", "Run0001", - FatalException, + if (G4StateManager::GetStateManager()->GetExceptionHandler() == nullptr) { + defaultExceptionHandler = new G4ExceptionHandler(); + } + + if (fRunManagerKernel != nullptr) { + G4Exception("G4RunManagerKernel::G4RunManagerKernel()", "Run0001", FatalException, "More than one G4RunManagerKernel is constructed."); } fRunManagerKernel = this; // construction of Geant4 kernel classes eventManager = new G4EventManager(); - switch(rmkType) - { + switch (rmkType) { case masterRMK: // Master thread behvior - defaultRegion = - new G4Region("DefaultRegionForTheWorld"); // deleted by store + defaultRegion = new G4Region("DefaultRegionForTheWorld"); // deleted by store defaultRegionForParallelWorld = new G4Region("DefaultRegionForParallelWorld"); // deleted by store defaultRegion->SetProductionCuts( - G4ProductionCutsTable::GetProductionCutsTable() - ->GetDefaultProductionCuts()); + G4ProductionCutsTable::GetProductionCutsTable()->GetDefaultProductionCuts()); defaultRegionForParallelWorld->SetProductionCuts( - G4ProductionCutsTable::GetProductionCutsTable() - ->GetDefaultProductionCuts()); + G4ProductionCutsTable::GetProductionCutsTable()->GetDefaultProductionCuts()); break; case workerRMK: // Worker thread behavior - defaultRegion = G4RegionStore::GetInstance()->GetRegion( - "DefaultRegionForTheWorld", true); - defaultRegionForParallelWorld = G4RegionStore::GetInstance()->GetRegion( - "DefaultRegionForParallelWorld", true); + defaultRegion = G4RegionStore::GetInstance()->GetRegion("DefaultRegionForTheWorld", true); + defaultRegionForParallelWorld = + G4RegionStore::GetInstance()->GetRegion("DefaultRegionForParallelWorld", true); break; default: - defaultRegion = nullptr; + defaultRegion = nullptr; defaultRegionForParallelWorld = nullptr; G4ExceptionDescription msgx; - msgx - << " This type of RunManagerKernel can only be used in mult-threaded " - "applications."; - G4Exception("G4RunManagerKernel::G4RunManagerKernel(G4bool)", "Run0106", - FatalException, msgx); + msgx << " This type of RunManagerKernel can only be used in mult-threaded " + "applications."; + G4Exception("G4RunManagerKernel::G4RunManagerKernel(G4bool)", "Run0106", FatalException, + msgx); } runManagerKernelType = rmkType; @@ -280,72 +243,57 @@ G4RunManagerKernel::G4RunManagerKernel(RMKType rmkType) // version banner G4String vs = G4Version; - vs = vs.substr(1, vs.size() - 2); - switch(rmkType) - { + vs = vs.substr(1, vs.size() - 2); + switch (rmkType) { case masterRMK: versionString = " Geant4 version "; versionString += vs; versionString += " "; versionString += G4Date; - G4cout << G4endl - << "**************************************************************" - << G4endl << versionString << G4endl - << " << in Multi-threaded mode >> " << G4endl - << " Copyright : Geant4 Collaboration" - << G4endl - << " References : NIM A 506 (2003), 250-303" - << G4endl - << " : IEEE-TNS 53 (2006), 270-278" - << G4endl - << " : NIM A 835 (2016), 186-225" - << G4endl - << " WWW : http://geant4.org/" - << G4endl - << "**************************************************************" - << G4endl << G4endl; + G4cout << G4endl << "**************************************************************" << G4endl + << versionString << G4endl << " << in Multi-threaded mode >> " << G4endl + << " Copyright : Geant4 Collaboration" << G4endl + << " References : NIM A 506 (2003), 250-303" << G4endl + << " : IEEE-TNS 53 (2006), 270-278" << G4endl + << " : NIM A 835 (2016), 186-225" << G4endl + << " WWW : http://geant4.org/" << G4endl + << "**************************************************************" << G4endl + << G4endl; break; default: - if(verboseLevel) - { + if (verboseLevel != 0) { versionString = " Local thread RunManagerKernel version "; versionString += vs; - G4cout - << G4endl - << "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" - "^^^^^^^^^" - << G4endl << versionString << G4endl - << "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" - "^^^^^^^^^" - << G4endl << G4endl; + G4cout << G4endl + << "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" + "^^^^^^^^^" + << G4endl << versionString << G4endl + << "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" + "^^^^^^^^^" + << G4endl << G4endl; } } - #ifdef G4MULTITHREADED - G4UnitDefinition::GetUnitsTable().Synchronize(); - #endif +#ifdef G4MULTITHREADED + G4UnitDefinition::GetUnitsTable().Synchronize(); +#endif } // -------------------------------------------------------------------- void G4RunManagerKernel::SetupDefaultRegion() { - if(runManagerKernelType == workerRMK) - return; + if (runManagerKernelType == workerRMK) return; // Remove old world logical volume from the default region, if exist - if(defaultRegion->GetNumberOfRootVolumes()) - { - if(defaultRegion->GetNumberOfRootVolumes() > size_t(1)) - { + if (defaultRegion->GetNumberOfRootVolumes() != 0u) { + if (defaultRegion->GetNumberOfRootVolumes() > size_t(1)) { G4Exception("G4RunManager::SetupDefaultRegion", "Run0005", FatalException, "Default world region should have a unique logical volume."); } auto lvItr = defaultRegion->GetRootLogicalVolumeIterator(); defaultRegion->RemoveRootLogicalVolume(*lvItr, false); - if(verboseLevel > 1) - G4cout - << "Obsolete world logical volume is removed from the default region." - << G4endl; + if (verboseLevel > 1) + G4cout << "Obsolete world logical volume is removed from the default region." << G4endl; } } @@ -354,10 +302,8 @@ G4RunManagerKernel::~G4RunManagerKernel() { G4StateManager* pStateManager = G4StateManager::GetStateManager(); // set the application state to the quite state - if(pStateManager->GetCurrentState() != G4State_Quit) - { - if(verboseLevel > 1) - G4cout << "G4 kernel has come to Quit state." << G4endl; + if (pStateManager->GetCurrentState() != G4State_Quit) { + if (verboseLevel > 1) G4cout << "G4 kernel has come to Quit state." << G4endl; pStateManager->SetNewState(G4State_Quit); } @@ -367,15 +313,12 @@ G4RunManagerKernel::~G4RunManagerKernel() // deletion of Geant4 kernel classes delete G4ParallelWorldProcessStore::GetInstanceIfExist(); delete G4SDManager::GetSDMpointerIfExist(); - if(verboseLevel > 1) - G4cout << "G4SDManager deleted." << G4endl; + if (verboseLevel > 1) G4cout << "G4SDManager deleted." << G4endl; delete eventManager; - if(verboseLevel > 1) - G4cout << "EventManager deleted." << G4endl; + if (verboseLevel > 1) G4cout << "EventManager deleted." << G4endl; G4UnitDefinition::ClearUnitsTable(); - if(verboseLevel > 1) - G4cout << "Units table cleared." << G4endl; + if (verboseLevel > 1) G4cout << "Units table cleared." << G4endl; // deletion of path-finder field-manager store, geometry and transportation // manager @@ -383,49 +326,38 @@ G4RunManagerKernel::~G4RunManagerKernel() delete G4FieldManagerStore::GetInstanceIfExist(); delete G4GeometryManager::GetInstanceIfExist(); delete G4TransportationManager::GetInstanceIfExist(); - if(verboseLevel > 1) - G4cout << "TransportationManager deleted." << G4endl; + if (verboseLevel > 1) G4cout << "TransportationManager deleted." << G4endl; // deletion of navigation levels - if(verboseLevel > 1) - G4NavigationHistoryPool::GetInstance()->Print(); + if (verboseLevel > 1) G4NavigationHistoryPool::GetInstance()->Print(); delete G4NavigationHistoryPool::GetInstance(); // deletion of G4RNGHelper singleton - if(runManagerKernelType != workerRMK) - { + if (runManagerKernelType != workerRMK) { delete G4RNGHelper::GetInstanceIfExist(); - if(verboseLevel > 1) - G4cout << "G4RNGHelper object is deleted." << G4endl; + if (verboseLevel > 1) G4cout << "G4RNGHelper object is deleted." << G4endl; } // deletion of allocators G4AllocatorList* allocList = G4AllocatorList::GetAllocatorListIfExist(); - if(allocList) - { + if (allocList != nullptr) { allocList->Destroy(numberOfStaticAllocators, verboseLevel); delete allocList; - if(verboseLevel > 1) - G4cout << "G4Allocator objects are deleted." << G4endl; + if (verboseLevel > 1) G4cout << "G4Allocator objects are deleted." << G4endl; } G4UImanager* pUImanager = G4UImanager::GetUIpointer(); - if((runManagerKernelType == workerRMK) && (verboseLevel > 1)) - { + if ((runManagerKernelType == workerRMK) && (verboseLevel > 1)) { G4cout << "Thread-local UImanager is to be deleted." << G4endl - << "There should not be any thread-local G4cout/G4cerr hereafter." - << G4endl; + << "There should not be any thread-local G4cout/G4cerr hereafter." << G4endl; } delete pUImanager; - if(verboseLevel > 1) - G4cout << "UImanager deleted." << G4endl; + if (verboseLevel > 1) G4cout << "UImanager deleted." << G4endl; delete pStateManager; - if(verboseLevel > 1) - G4cout << "StateManager deleted." << G4endl; + if (verboseLevel > 1) G4cout << "StateManager deleted." << G4endl; delete defaultExceptionHandler; - if(verboseLevel > 1) - G4cout << "RunManagerKernel is deleted. Good bye :)" << G4endl; + if (verboseLevel > 1) G4cout << "RunManagerKernel is deleted. Good bye :)" << G4endl; fRunManagerKernel = nullptr; } @@ -433,18 +365,13 @@ G4RunManagerKernel::~G4RunManagerKernel() void G4RunManagerKernel::WorkerUpdateWorldVolume() { G4MTRunManager* masterRM = G4MTRunManager::GetMasterRunManager(); - G4TransportationManager* transM = - G4TransportationManager::GetTransportationManager(); - G4MTRunManager::masterWorlds_t masterWorlds = masterRM->GetMasterWorlds(); - for(auto itrMW = masterWorlds.cbegin(); - itrMW != masterWorlds.cend(); ++itrMW) - { - G4VPhysicalVolume* wv = (*itrMW).second; + G4TransportationManager* transM = G4TransportationManager::GetTransportationManager(); + G4MTRunManager::masterWorlds_t masterWorlds = masterRM->GetMasterWorlds(); + for (const auto& masterWorld : masterWorlds) { + G4VPhysicalVolume* wv = masterWorld.second; G4VPhysicalVolume* pWorld = - G4TransportationManager::GetTransportationManager() - ->IsWorldExisting(wv->GetName()); - if(pWorld == nullptr) - { + G4TransportationManager::GetTransportationManager()->IsWorldExisting(wv->GetName()); + if (pWorld == nullptr) { transM->RegisterWorld(wv); } } @@ -454,104 +381,78 @@ void G4RunManagerKernel::WorkerUpdateWorldVolume() void G4RunManagerKernel::WorkerDefineWorldVolume(G4VPhysicalVolume* worldVol, G4bool topologyIsChanged) { - G4StateManager* stateManager = G4StateManager::GetStateManager(); + G4StateManager* stateManager = G4StateManager::GetStateManager(); G4ApplicationState currentState = stateManager->GetCurrentState(); - if(currentState != G4State_Init) - { - if(!(currentState == G4State_Idle || currentState == G4State_PreInit)) - { - G4cout << "Current application state is " - << stateManager->GetStateString(currentState) << G4endl; - G4Exception("G4RunManagerKernel::DefineWorldVolume", - "DefineWorldVolumeAtIncorrectState", FatalException, - "Geant4 kernel is not Init state : Method ignored."); + if (currentState != G4State_Init) { + if (currentState != G4State_Idle && currentState != G4State_PreInit) { + G4cout << "Current application state is " << stateManager->GetStateString(currentState) + << G4endl; + G4Exception("G4RunManagerKernel::DefineWorldVolume", "DefineWorldVolumeAtIncorrectState", + FatalException, "Geant4 kernel is not Init state : Method ignored."); return; } - else - { - stateManager->SetNewState(G4State_Init); - } + + stateManager->SetNewState(G4State_Init); } - currentWorld = worldVol; + currentWorld = worldVol; G4MTRunManager* masterRM = G4MTRunManager::GetMasterRunManager(); - G4TransportationManager* transM = - G4TransportationManager::GetTransportationManager(); + G4TransportationManager* transM = G4TransportationManager::GetTransportationManager(); G4MTRunManager::masterWorlds_t masterWorlds = masterRM->GetMasterWorlds(); - for(auto itrMW = masterWorlds.cbegin(); - itrMW != masterWorlds.cend(); ++itrMW) - { - if((*itrMW).first == 0) - { - if((*itrMW).second != currentWorld) - { - G4Exception("G4RunManagerKernel::WorkerDefineWorldVolume", "RUN3091", - FatalException, "Mass world is inconsistent"); + for (const auto& masterWorld : masterWorlds) { + if (masterWorld.first == 0) { + if (masterWorld.second != currentWorld) { + G4Exception("G4RunManagerKernel::WorkerDefineWorldVolume", "RUN3091", FatalException, + "Mass world is inconsistent"); } - transM->SetWorldForTracking((*itrMW).second); + transM->SetWorldForTracking(masterWorld.second); } - else - { - transM->RegisterWorld((*itrMW).second); + else { + transM->RegisterWorld(masterWorld.second); } } - if(topologyIsChanged) - geometryNeedsToBeClosed = true; + if (topologyIsChanged) geometryNeedsToBeClosed = true; // Notify the VisManager as well - if(G4Threading::IsMasterThread()) - { + if (G4Threading::IsMasterThread()) { G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); - if(pVVisManager != nullptr) - pVVisManager->GeometryHasChanged(); + if (pVVisManager != nullptr) pVVisManager->GeometryHasChanged(); } geometryInitialized = true; stateManager->SetNewState(currentState); - if(physicsInitialized && currentState != G4State_Idle) - { + if (physicsInitialized && currentState != G4State_Idle) { stateManager->SetNewState(G4State_Idle); } } // -------------------------------------------------------------------- -void G4RunManagerKernel::DefineWorldVolume(G4VPhysicalVolume* worldVol, - G4bool topologyIsChanged) +void G4RunManagerKernel::DefineWorldVolume(G4VPhysicalVolume* worldVol, G4bool topologyIsChanged) { - G4StateManager* stateManager = G4StateManager::GetStateManager(); + G4StateManager* stateManager = G4StateManager::GetStateManager(); G4ApplicationState currentState = stateManager->GetCurrentState(); - if(currentState != G4State_Init) - { - if(!(currentState == G4State_Idle || currentState == G4State_PreInit)) - { - G4cout << "Current application state is " - << stateManager->GetStateString(currentState) << G4endl; - G4Exception("G4RunManagerKernel::DefineWorldVolume", - "DefineWorldVolumeAtIncorrectState", FatalException, - "Geant4 kernel is not Init state : Method ignored."); + if (currentState != G4State_Init) { + if (currentState != G4State_Idle && currentState != G4State_PreInit) { + G4cout << "Current application state is " << stateManager->GetStateString(currentState) + << G4endl; + G4Exception("G4RunManagerKernel::DefineWorldVolume", "DefineWorldVolumeAtIncorrectState", + FatalException, "Geant4 kernel is not Init state : Method ignored."); return; } - else - { - stateManager->SetNewState(G4State_Init); - } + + stateManager->SetNewState(G4State_Init); } // The world volume MUST NOT have a region defined by the user - if(worldVol->GetLogicalVolume()->GetRegion() != nullptr) - { - if(worldVol->GetLogicalVolume()->GetRegion() != defaultRegion) - { + if (worldVol->GetLogicalVolume()->GetRegion() != nullptr) { + if (worldVol->GetLogicalVolume()->GetRegion() != defaultRegion) { G4ExceptionDescription ED; ED << "The world volume has a user-defined region <" - << worldVol->GetLogicalVolume()->GetRegion()->GetName() << ">." - << G4endl; - ED << "World would have a default region assigned by RunManagerKernel." - << G4endl; - G4Exception("G4RunManager::DefineWorldVolume", "Run0004", FatalException, - ED); + << worldVol->GetLogicalVolume()->GetRegion()->GetName() << ">." << G4endl; + ED << "World would have a default region assigned by RunManagerKernel." << G4endl; + G4Exception("G4RunManager::DefineWorldVolume", "Run0004", FatalException, ED); } } @@ -565,28 +466,22 @@ void G4RunManagerKernel::DefineWorldVolume(G4VPhysicalVolume* worldVol, G4LogicalVolume* worldLog = currentWorld->GetLogicalVolume(); worldLog->SetRegion(defaultRegion); defaultRegion->AddRootLogicalVolume(worldLog); - if(verboseLevel > 1) - G4cout << worldLog->GetName() << " is registered to the default region." - << G4endl; + if (verboseLevel > 1) + G4cout << worldLog->GetName() << " is registered to the default region." << G4endl; // Set the world volume, notify the Navigator and reset its state - G4TransportationManager::GetTransportationManager() - ->SetWorldForTracking(currentWorld); - if(topologyIsChanged) - geometryNeedsToBeClosed = true; + G4TransportationManager::GetTransportationManager()->SetWorldForTracking(currentWorld); + if (topologyIsChanged) geometryNeedsToBeClosed = true; // Notify the VisManager as well - if(G4Threading::IsMasterThread()) - { + if (G4Threading::IsMasterThread()) { G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); - if(pVVisManager != nullptr) - pVVisManager->GeometryHasChanged(); + if (pVVisManager != nullptr) pVVisManager->GeometryHasChanged(); } geometryInitialized = true; stateManager->SetNewState(currentState); - if(physicsInitialized && currentState != G4State_Idle) - { + if (physicsInitialized && currentState != G4State_Idle) { stateManager->SetNewState(G4State_Idle); } } @@ -596,25 +491,19 @@ void G4RunManagerKernel::SetPhysics(G4VUserPhysicsList* uPhys) { physicsList = uPhys; - if(runManagerKernelType == workerRMK) - return; + if (runManagerKernelType == workerRMK) return; SetupPhysics(); - if(verboseLevel > 2) - G4ParticleTable::GetParticleTable()->DumpTable(); - if(verboseLevel > 1) - { + if (verboseLevel > 2) G4ParticleTable::GetParticleTable()->DumpTable(); + if (verboseLevel > 1) { G4cout << "List of instantiated particles " "============================================" << G4endl; G4int nPtcl = G4ParticleTable::GetParticleTable()->entries(); - for(G4int i = 0; i < nPtcl; ++i) - { - G4ParticleDefinition* pd = - G4ParticleTable::GetParticleTable()->GetParticle(i); + for (G4int i = 0; i < nPtcl; ++i) { + G4ParticleDefinition* pd = G4ParticleTable::GetParticleTable()->GetParticle(i); G4cout << pd->GetParticleName() << " "; - if(i % 10 == 9) - G4cout << G4endl; + if (i % 10 == 9) G4cout << G4endl; } G4cout << G4endl; } @@ -629,32 +518,25 @@ void G4RunManagerKernel::SetupPhysics() // For sanity reason G4Geantino::GeantinoDefinition(); - G4ParticleDefinition* gion = - G4ParticleTable::GetParticleTable()->GetGenericIon(); - if(gion != nullptr) - { + G4ParticleDefinition* gion = G4ParticleTable::GetParticleTable()->GetGenericIon(); + if (gion != nullptr) { G4IonConstructor::ConstructParticle(); } G4ParticleTable::GetParticleTable()->GetIonTable()->InitializeLightIons(); auto pItr = G4ParticleTable::GetParticleTable()->GetIterator(); pItr->reset(); - while((*pItr)()) - { + while ((*pItr)()) { G4ParticleDefinition* particle = pItr->value(); - if(!(particle->IsGeneralIon())) - particle->SetParticleDefinitionID(); + if (!(particle->IsGeneralIon())) particle->SetParticleDefinitionID(); } - if(gion != nullptr) - { + if (gion != nullptr) { G4int gionId = gion->GetParticleDefinitionID(); pItr->reset(false); - while((*pItr)()) - { + while ((*pItr)()) { G4ParticleDefinition* particle = pItr->value(); - if(particle->IsGeneralIon()) - particle->SetParticleDefinitionID(gionId); + if (particle->IsGeneralIon()) particle->SetParticleDefinitionID(gionId); } } #ifdef G4MULTITHREADED @@ -665,93 +547,58 @@ void G4RunManagerKernel::SetupPhysics() // -------------------------------------------------------------------- namespace { - G4Mutex initphysicsmutex = G4MUTEX_INITIALIZER; +G4Mutex initphysicsmutex = G4MUTEX_INITIALIZER; } // -------------------------------------------------------------------- void G4RunManagerKernel::InitializePhysics() { - G4StateManager* stateManager = G4StateManager::GetStateManager(); + G4StateManager* stateManager = G4StateManager::GetStateManager(); G4ApplicationState currentState = stateManager->GetCurrentState(); - if(currentState != G4State_Init) - { - G4cout << "Current application state is " - << stateManager->GetStateString(currentState) << G4endl; - if(!(currentState == G4State_Idle || currentState == G4State_PreInit)) - { - G4Exception("G4RunManagerKernel::InitializePhysics", - "InitializePhysicsIncorrectState", FatalException, - "Geant4 kernel is not Init state : Method ignored."); + if (currentState != G4State_Init) { + G4cout << "Current application state is " << stateManager->GetStateString(currentState) + << G4endl; + if (currentState != G4State_Idle && currentState != G4State_PreInit) { + G4Exception("G4RunManagerKernel::InitializePhysics", "InitializePhysicsIncorrectState", + FatalException, "Geant4 kernel is not Init state : Method ignored."); return; } - else - { - // G4Exception("G4RunManagerKernel::DefineWorldVolume", - // "DefineWorldVolumeAtIncorrectState", JustWarning, - // "Geant4 kernel is not Init state : Assuming Init state."); - G4cout - << "Warning : Geant4 kernel is not Init state : Assuming Init state." - << G4endl; - stateManager->SetNewState(G4State_Init); - } + + G4cout << "Warning : Geant4 kernel is not Init state : Assuming Init state." << G4endl; + stateManager->SetNewState(G4State_Init); } - if(physicsList == nullptr) - { - G4Exception("G4RunManagerKernel::InitializePhysics", "Run0012", - FatalException, "G4VUserPhysicsList is not defined"); + if (physicsList == nullptr) { + G4Exception("G4RunManagerKernel::InitializePhysics", "Run0012", FatalException, + "G4VUserPhysicsList is not defined"); return; } - if(verboseLevel > 1) - G4cout << "physicsList->Construct() start." << G4endl; - if(numberOfParallelWorld > 0) - physicsList->UseCoupledTransportation(); + if (verboseLevel > 1) G4cout << "physicsList->Construct() start." << G4endl; + if (numberOfParallelWorld > 0) physicsList->UseCoupledTransportation(); physicsList->Construct(); - if(verboseLevel > 1) - G4cout << "physicsList->CheckParticleList() start." << G4endl; + if (verboseLevel > 1) G4cout << "physicsList->CheckParticleList() start." << G4endl; physicsList->CheckParticleList(); // Cannot assume that SetCuts() and CheckRegions() are thread safe. // We need to mutex (report from valgrind --tool=drd) G4AutoLock l(&initphysicsmutex); - if(G4Threading::IsMasterThread()) - { - if(verboseLevel > 1) - G4cout << "physicsList->setCut() start." << G4endl; + if (G4Threading::IsMasterThread()) { + if (verboseLevel > 1) G4cout << "physicsList->setCut() start." << G4endl; physicsList->SetCuts(); } CheckRegions(); l.unlock(); - /******************* - // static G4bool createIsomerOnlyOnce = false; - // if(G4Threading::IsMultithreadedApplication() && - G4Threading::IsMasterThread()) - // { - // if(!createIsomerOnlyOnce) - // { - // createIsomerOnlyOnce = true; - // G4ParticleDefinition* gion = - G4ParticleTable::GetParticleTable()->GetGenericIon(); - // if(gion != nullptr) - // { - // G4ParticleTable::GetParticleTable() - ->GetIonTable()->CreateAllIsomer(); - // PropagateGenericIonID(); - // } - // } - // } - *********************/ - physicsInitialized = true; + #ifdef G4MULTITHREADED G4UnitDefinition::GetUnitsTable().Synchronize(); #endif + stateManager->SetNewState(currentState); - if(geometryInitialized && currentState != G4State_Idle) - { + if (geometryInitialized && currentState != G4State_Idle) { stateManager->SetNewState(G4State_Idle); } } @@ -759,32 +606,28 @@ void G4RunManagerKernel::InitializePhysics() // -------------------------------------------------------------------- G4bool G4RunManagerKernel::RunInitialization(G4bool fakeRun) { - G4StateManager* stateManager = G4StateManager::GetStateManager(); + G4StateManager* stateManager = G4StateManager::GetStateManager(); G4ApplicationState currentState = stateManager->GetCurrentState(); - if(!geometryInitialized) - { + if (!geometryInitialized) { G4Exception("G4RunManagerKernel::RunInitialization", "Run0021", JustWarning, "Geometry has not yet initialized : method ignored."); return false; } - if(!physicsInitialized) - { + if (!physicsInitialized) { G4Exception("G4RunManagerKernel::RunInitialization", "Run0022", JustWarning, "Physics has not yet initialized : method ignored."); return false; } - if(currentState != G4State_Idle) - { + if (currentState != G4State_Idle) { G4Exception("G4RunManagerKernel::RunInitialization", "Run0023", JustWarning, "Geant4 kernel not in Idle state : method ignored."); return false; } - if(geometryNeedsToBeClosed) - CheckRegularGeometry(); + if (geometryNeedsToBeClosed) CheckRegularGeometry(); stateManager->SetNewState(G4State_Init); PropagateGenericIonID(); @@ -792,16 +635,13 @@ G4bool G4RunManagerKernel::RunInitialization(G4bool fakeRun) UpdateRegion(); BuildPhysicsTables(fakeRun); - if(geometryNeedsToBeClosed) - { + if (geometryNeedsToBeClosed) { ResetNavigator(); // CheckRegularGeometry(); // Notify the VisManager as well - if(G4Threading::IsMasterThread()) - { + if (G4Threading::IsMasterThread()) { G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); - if(pVVisManager != nullptr) - pVVisManager->GeometryHasChanged(); + if (pVVisManager != nullptr) pVVisManager->GeometryHasChanged(); } } @@ -810,6 +650,7 @@ G4bool G4RunManagerKernel::RunInitialization(G4bool fakeRun) #ifdef G4MULTITHREADED G4UnitDefinition::GetUnitsTable().Synchronize(); #endif + stateManager->SetNewState(G4State_Idle); stateManager->SetNewState(G4State_GeomClosed); return true; @@ -818,19 +659,14 @@ G4bool G4RunManagerKernel::RunInitialization(G4bool fakeRun) // -------------------------------------------------------------------- void G4RunManagerKernel::PropagateGenericIonID() { - G4ParticleDefinition* gion = - G4ParticleTable::GetParticleTable()->GetGenericIon(); - if(gion != nullptr) - { - // G4ParticleTable::GetParticleTable()->GetIonTable()->CreateAllIsomer(); + G4ParticleDefinition* gion = G4ParticleTable::GetParticleTable()->GetGenericIon(); + if (gion != nullptr) { G4int gionId = gion->GetParticleDefinitionID(); auto pItr = G4ParticleTable::GetParticleTable()->GetIterator(); pItr->reset(false); - while((*pItr)()) - { + while ((*pItr)()) { G4ParticleDefinition* particle = pItr->value(); - if(particle->IsGeneralIon()) - particle->SetParticleDefinitionID(gionId); + if (particle->IsGeneralIon()) particle->SetParticleDefinitionID(gionId); } } } @@ -838,7 +674,7 @@ void G4RunManagerKernel::PropagateGenericIonID() // -------------------------------------------------------------------- void G4RunManagerKernel::RunTermination() { - if(runManagerKernelType != workerRMK) + if (runManagerKernelType != workerRMK) G4ProductionCutsTable::GetProductionCutsTable()->PhysicsTableUpdated(); G4StateManager::GetStateManager()->SetNewState(G4State_Idle); } @@ -846,8 +682,7 @@ void G4RunManagerKernel::RunTermination() // -------------------------------------------------------------------- void G4RunManagerKernel::ResetNavigator() { - if(runManagerKernelType == workerRMK) - { + if (runManagerKernelType == workerRMK) { geometryNeedsToBeClosed = false; return; } @@ -858,8 +693,7 @@ void G4RunManagerKernel::ResetNavigator() // and previous optimisations to be cleared. G4GeometryManager* geomManager = G4GeometryManager::GetInstance(); - if(verboseLevel > 1) - G4cout << "Start closing geometry." << G4endl; + if (verboseLevel > 1) G4cout << "Start closing geometry." << G4endl; geomManager->OpenGeometry(); geomManager->CloseGeometry(geometryToBeOptimized, verboseLevel > 1); @@ -870,64 +704,50 @@ void G4RunManagerKernel::ResetNavigator() // -------------------------------------------------------------------- void G4RunManagerKernel::UpdateRegion() { - G4StateManager* stateManager = G4StateManager::GetStateManager(); + G4StateManager* stateManager = G4StateManager::GetStateManager(); G4ApplicationState currentState = stateManager->GetCurrentState(); - if(currentState != G4State_Init) - { + if (currentState != G4State_Init) { G4Exception("G4RunManagerKernel::UpdateRegion", "Run0024", JustWarning, "Geant4 kernel not in Init state : method ignored."); return; } - if(runManagerKernelType == workerRMK) - return; + if (runManagerKernelType == workerRMK) return; CheckRegions(); G4RegionStore::GetInstance()->UpdateMaterialList(currentWorld); - G4ProductionCutsTable::GetProductionCutsTable()->UpdateCoupleTable( - currentWorld); + G4ProductionCutsTable::GetProductionCutsTable()->UpdateCoupleTable(currentWorld); } // -------------------------------------------------------------------- void G4RunManagerKernel::BuildPhysicsTables(G4bool fakeRun) { - if(G4ProductionCutsTable::GetProductionCutsTable()->IsModified() || - physicsNeedsToBeReBuilt) - { - #ifdef G4MULTITHREADED - if(runManagerKernelType == masterRMK) - { + if (G4ProductionCutsTable::GetProductionCutsTable()->IsModified() || physicsNeedsToBeReBuilt) { +#ifdef G4MULTITHREADED + if (runManagerKernelType == masterRMK) { // make sure workers also rebuild physics tables G4UImanager* pUImanager = G4UImanager::GetUIpointer(); pUImanager->ApplyCommand("/run/physicsModified"); } - #endif +#endif physicsList->BuildPhysicsTable(); - ////G4ProductionCutsTable::GetProductionCutsTable()->PhysicsTableUpdated(); physicsNeedsToBeReBuilt = false; } - if(!fakeRun && verboseLevel > 1) - DumpRegion(); - if(!fakeRun && verboseLevel > 0) - physicsList->DumpCutValuesTable(); - if(!fakeRun) - physicsList->DumpCutValuesTableIfRequested(); + if (!fakeRun && verboseLevel > 1) DumpRegion(); + if (!fakeRun && verboseLevel > 0) physicsList->DumpCutValuesTable(); + if (!fakeRun) physicsList->DumpCutValuesTableIfRequested(); } // -------------------------------------------------------------------- void G4RunManagerKernel::CheckRegions() { - G4TransportationManager* transM = - G4TransportationManager::GetTransportationManager(); + G4TransportationManager* transM = G4TransportationManager::GetTransportationManager(); std::size_t nWorlds = transM->GetNoWorlds(); std::vector::iterator wItr; - for(std::size_t i = 0; i < G4RegionStore::GetInstance()->size(); ++i) - { - G4Region* region = (*(G4RegionStore::GetInstance()))[i]; - + for (auto region : *G4RegionStore::GetInstance()) { // Let each region have a pointer to the world volume where it belongs to. // G4Region::SetWorld() checks if the region belongs to the given world and // set it only if it does. Thus, here we go through all the registered world @@ -936,16 +756,12 @@ void G4RunManagerKernel::CheckRegions() region->UsedInMassGeometry(false); region->UsedInParallelGeometry(false); wItr = transM->GetWorldsIterator(); - for(std::size_t iw = 0; iw < nWorlds; ++iw) - { - if(region->BelongsTo(*wItr)) - { - if(*wItr == currentWorld) - { + for (std::size_t iw = 0; iw < nWorlds; ++iw) { + if (region->BelongsTo(*wItr)) { + if (*wItr == currentWorld) { region->UsedInMassGeometry(true); } - else - { + else { region->UsedInParallelGeometry(true); } } @@ -954,22 +770,17 @@ void G4RunManagerKernel::CheckRegions() } G4ProductionCuts* cuts = region->GetProductionCuts(); - if(cuts == nullptr) - { - if(region->IsInMassGeometry() && verboseLevel > 0) - { + if (cuts == nullptr) { + if (region->IsInMassGeometry() && verboseLevel > 0) { G4cout << "Warning : Region <" << region->GetName() << "> does not have specific production cuts," << G4endl - << "even though it appears in the current tracking world." - << G4endl; + << "even though it appears in the current tracking world." << G4endl; G4cout << "Default cuts are used for this region." << G4endl; } - if(region->IsInMassGeometry() || region->IsInParallelGeometry()) - { + if (region->IsInMassGeometry() || region->IsInParallelGeometry()) { region->SetProductionCuts( - G4ProductionCutsTable::GetProductionCutsTable() - ->GetDefaultProductionCuts()); + G4ProductionCutsTable::GetProductionCutsTable()->GetDefaultProductionCuts()); } } } @@ -979,13 +790,10 @@ void G4RunManagerKernel::CheckRegions() // wItr = transM->GetWorldsIterator(); - for(std::size_t iw = 0; iw < nWorlds; ++iw) - { - if(*wItr != currentWorld) - { + for (std::size_t iw = 0; iw < nWorlds; ++iw) { + if (*wItr != currentWorld) { G4LogicalVolume* pwLogical = (*wItr)->GetLogicalVolume(); - if(pwLogical->GetRegion() == nullptr) - { + if (pwLogical->GetRegion() == nullptr) { pwLogical->SetRegion(defaultRegionForParallelWorld); defaultRegionForParallelWorld->AddRootLogicalVolume(pwLogical); } @@ -998,89 +806,71 @@ void G4RunManagerKernel::CheckRegions() void G4RunManagerKernel::DumpRegion(const G4String& rname) const { G4Region* region = G4RegionStore::GetInstance()->GetRegion(rname); - if(region != nullptr) - DumpRegion(region); + if (region != nullptr) DumpRegion(region); } // -------------------------------------------------------------------- void G4RunManagerKernel::DumpRegion(G4Region* region) const { - if(region == nullptr) - { - for(std::size_t i = 0; i < G4RegionStore::GetInstance()->size(); ++i) - { - DumpRegion((*(G4RegionStore::GetInstance()))[i]); + if (region == nullptr) { + for (const auto& i : *G4RegionStore::GetInstance()) { + DumpRegion(i); } } - else - { - if(G4Threading::IsWorkerThread()) - return; + else { + if (G4Threading::IsWorkerThread()) return; G4cout << G4endl; G4cout << "Region <" << region->GetName() << "> -- "; - if(region->GetWorldPhysical()) - { - G4cout << " -- appears in <" << region->GetWorldPhysical()->GetName() - << "> world volume"; + if (region->GetWorldPhysical() != nullptr) { + G4cout << " -- appears in <" << region->GetWorldPhysical()->GetName() << "> world volume"; } - else - { + else { G4cout << " -- is not associated to any world."; } G4cout << G4endl; - if(region->IsInMassGeometry()) - { + if (region->IsInMassGeometry()) { G4cout << " This region is in the mass world." << G4endl; } - if(region->IsInParallelGeometry()) - { + if (region->IsInParallelGeometry()) { G4cout << " This region is in the parallel world." << G4endl; } G4cout << " Root logical volume(s) : "; std::size_t nRootLV = region->GetNumberOfRootVolumes(); auto lvItr = region->GetRootLogicalVolumeIterator(); - for(std::size_t j = 0; j < nRootLV; ++j) - { + for (std::size_t j = 0; j < nRootLV; ++j) { G4cout << (*lvItr)->GetName() << " "; ++lvItr; } G4cout << G4endl; - G4cout << " Pointers : G4VUserRegionInformation[" - << region->GetUserInformation() << "], G4UserLimits[" - << region->GetUserLimits() << "], G4FastSimulationManager[" + G4cout << " Pointers : G4VUserRegionInformation[" << region->GetUserInformation() + << "], G4UserLimits[" << region->GetUserLimits() << "], G4FastSimulationManager[" << region->GetFastSimulationManager() << "], G4UserSteppingAction[" << region->GetRegionalSteppingAction() << "]" << G4endl; G4cout << " Materials : "; auto mItr = region->GetMaterialIterator(); std::size_t nMaterial = region->GetNumberOfMaterials(); - for(std::size_t iMate = 0; iMate < nMaterial; ++iMate) - { + for (std::size_t iMate = 0; iMate < nMaterial; ++iMate) { G4cout << (*mItr)->GetName() << " "; ++mItr; } G4cout << G4endl; G4ProductionCuts* cuts = region->GetProductionCuts(); - if(!cuts && region->IsInMassGeometry()) - { + if ((cuts == nullptr) && region->IsInMassGeometry()) { G4cerr << "Warning : Region <" << region->GetName() << "> does not have specific production cuts." << G4endl; G4cerr << "Default cuts are used for this region." << G4endl; - region->SetProductionCuts(G4ProductionCutsTable::GetProductionCutsTable() - ->GetDefaultProductionCuts()); + region->SetProductionCuts( + G4ProductionCutsTable::GetProductionCutsTable()->GetDefaultProductionCuts()); } - else if(cuts != nullptr) - { + else if (cuts != nullptr) { G4cout << " Production cuts : " - << " gamma " - << G4BestUnit(cuts->GetProductionCut("gamma"), "Length") - << " e- " << G4BestUnit(cuts->GetProductionCut("e-"), "Length") - << " e+ " << G4BestUnit(cuts->GetProductionCut("e+"), "Length") - << " proton " - << G4BestUnit(cuts->GetProductionCut("proton"), "Length") - << G4endl; + << " gamma " << G4BestUnit(cuts->GetProductionCut("gamma"), "Length") << " e- " + << G4BestUnit(cuts->GetProductionCut("e-"), "Length") << " e+ " + << G4BestUnit(cuts->GetProductionCut("e+"), "Length") << " proton " + << G4BestUnit(cuts->GetProductionCut("proton"), "Length") << G4endl; } } } @@ -1089,12 +879,9 @@ void G4RunManagerKernel::DumpRegion(G4Region* region) const void G4RunManagerKernel::CheckRegularGeometry() { G4LogicalVolumeStore* store = G4LogicalVolumeStore::GetInstance(); - for(auto pos = store->cbegin(); pos != store->cend(); ++pos) - { - if((*pos) && ((*pos)->GetNoDaughters() == 1)) - { - if((*pos)->GetDaughter(0)->IsRegularStructure()) - { + for (const auto& pos : *store) { + if ((pos != nullptr) && (pos->GetNoDaughters() == 1)) { + if (pos->GetDaughter(0)->IsRegularStructure()) { SetScoreSplitter(); return; } @@ -1108,14 +895,12 @@ G4bool G4RunManagerKernel::ConfirmCoupledTransportation() G4ParticleTable* theParticleTable = G4ParticleTable::GetParticleTable(); auto theParticleIterator = theParticleTable->GetIterator(); theParticleIterator->reset(); - while((*theParticleIterator)()) - { + while ((*theParticleIterator)()) { G4ParticleDefinition* pd = theParticleIterator->value(); - G4ProcessManager* pm = pd->GetProcessManager(); - if(pm) - { + G4ProcessManager* pm = pd->GetProcessManager(); + if (pm != nullptr) { G4ProcessVector* pv = pm->GetAlongStepProcessVector(typeDoIt); - G4VProcess* p = (*pv)[0]; + G4VProcess* p = (*pv)[0]; return ((p->GetProcessName()) == "CoupledTransportation"); } } @@ -1125,33 +910,28 @@ G4bool G4RunManagerKernel::ConfirmCoupledTransportation() // -------------------------------------------------------------------- void G4RunManagerKernel::SetScoreSplitter() { - G4ScoreSplittingProcess* pSplitter = new G4ScoreSplittingProcess(); - G4ParticleTable* theParticleTable = G4ParticleTable::GetParticleTable(); + auto pSplitter = new G4ScoreSplittingProcess(); + G4ParticleTable* theParticleTable = G4ParticleTable::GetParticleTable(); auto theParticleIterator = theParticleTable->GetIterator(); // Ensure that Process is added only once to the particles' process managers static G4ThreadLocal G4bool InitSplitter = false; - if(!InitSplitter) - { + if (!InitSplitter) { InitSplitter = true; theParticleIterator->reset(); - while((*theParticleIterator)()) - { + while ((*theParticleIterator)()) { G4ParticleDefinition* particle = theParticleIterator->value(); - G4ProcessManager* pmanager = particle->GetProcessManager(); - if(pmanager) - { + G4ProcessManager* pmanager = particle->GetProcessManager(); + if (pmanager != nullptr) { pmanager->AddDiscreteProcess(pSplitter); } } - if(verboseLevel > 0) - { - G4cout - << "G4RunManagerKernel -- G4ScoreSplittingProcess is appended to all " - "particles." - << G4endl; + if (verboseLevel > 0) { + G4cout << "G4RunManagerKernel -- G4ScoreSplittingProcess is appended to all " + "particles." + << G4endl; } } } @@ -1163,18 +943,14 @@ void G4RunManagerKernel::SetupShadowProcess() const auto theParticleIterator = theParticleTable->GetIterator(); theParticleIterator->reset(); // loop on particles and get process manager from there list of processes - while((*theParticleIterator)()) - { + while ((*theParticleIterator)()) { G4ParticleDefinition* pd = theParticleIterator->value(); - G4ProcessManager* pm = pd->GetProcessManager(); - if(pm != nullptr) - { + G4ProcessManager* pm = pd->GetProcessManager(); + if (pm != nullptr) { G4ProcessVector& procs = *(pm->GetProcessList()); - for(G4int idx = 0; idx < (G4int)procs.size(); ++idx) - { + for (G4int idx = 0; idx < (G4int)procs.size(); ++idx) { const G4VProcess* masterP = procs[idx]->GetMasterProcess(); - if(masterP == nullptr) - { + if (masterP == nullptr) { // Process does not have an associated shadow master process // We are in master mode or sequential procs[idx]->SetMasterProcess(const_cast(procs[idx])); diff --git a/source/run/src/G4RunMessenger.cc b/source/run/src/G4RunMessenger.cc index cdc6ddbc7ae..5fe2c3bc0f5 100644 --- a/source/run/src/G4RunMessenger.cc +++ b/source/run/src/G4RunMessenger.cc @@ -28,11 +28,9 @@ // Original author: M.Asai, 1997 // -------------------------------------------------------------------- -#include - #include "G4RunMessenger.hh" + #include "G4MTRunManager.hh" -#include "G4MaterialScanner.hh" #include "G4ProductionCutsTable.hh" #include "G4RunManager.hh" #include "G4Tokenizer.hh" @@ -47,8 +45,9 @@ #include "G4ios.hh" #include "Randomize.hh" -G4RunMessenger::G4RunMessenger(G4RunManager* runMgr) - : runManager(runMgr) +#include + +G4RunMessenger::G4RunMessenger(G4RunManager* runMgr) : runManager(runMgr) { runDirectory = new G4UIdirectory("/run/"); runDirectory->SetGuidance("Run control commands."); @@ -59,8 +58,7 @@ G4RunMessenger::G4RunMessenger(G4RunManager* runMgr) beamOnCmd = new G4UIcommand("/run/beamOn", this); beamOnCmd->SetGuidance("Start a Run."); - beamOnCmd->SetGuidance( - "If G4 kernel is not initialized, it will be initialized."); + beamOnCmd->SetGuidance("If G4 kernel is not initialized, it will be initialized."); beamOnCmd->SetGuidance("Default number of events to be processed is 1."); beamOnCmd->SetGuidance("The second and third arguments can be used for"); beamOnCmd->SetGuidance("executing a macro file at the end of each event."); @@ -73,14 +71,14 @@ G4RunMessenger::G4RunMessenger(G4RunManager* runMgr) beamOnCmd->SetGuidance("nSelect events."); beamOnCmd->AvailableForStates(G4State_PreInit, G4State_Idle); beamOnCmd->SetToBeBroadcasted(false); - G4UIparameter* p1 = new G4UIparameter("numberOfEvent", 'i', true); + auto p1 = new G4UIparameter("numberOfEvent", 'i', true); p1->SetDefaultValue(1); p1->SetParameterRange("numberOfEvent >= 0"); beamOnCmd->SetParameter(p1); - G4UIparameter* p2 = new G4UIparameter("macroFile", 's', true); + auto p2 = new G4UIparameter("macroFile", 's', true); p2->SetDefaultValue("***NULL***"); beamOnCmd->SetParameter(p2); - G4UIparameter* p3 = new G4UIparameter("nSelect", 'i', true); + auto p3 = new G4UIparameter("nSelect", 'i', true); p3->SetDefaultValue(-1); p3->SetParameterRange("nSelect>=-1"); beamOnCmd->SetParameter(p3); @@ -96,10 +94,8 @@ G4RunMessenger::G4RunMessenger(G4RunManager* runMgr) verboseCmd->SetRange("level >=0 && level <=2"); printProgCmd = new G4UIcmdWithAnInteger("/run/printProgress", this); - printProgCmd->SetGuidance( - "Display begin_of_event information at given frequency."); - printProgCmd->SetGuidance( - "If it is set to zero, only the begin_of_run is shown."); + printProgCmd->SetGuidance("Display begin_of_event information at given frequency."); + printProgCmd->SetGuidance("If it is set to zero, only the begin_of_run is shown."); printProgCmd->SetGuidance("If it is set to -1, no print-out is shown."); printProgCmd->SetParameterName("mod", true); printProgCmd->SetDefaultValue(-1); @@ -108,25 +104,20 @@ G4RunMessenger::G4RunMessenger(G4RunManager* runMgr) nThreadsCmd = new G4UIcmdWithAnInteger("/run/numberOfThreads", this); nThreadsCmd->SetGuidance("Set the number of threads to be used."); nThreadsCmd->SetGuidance("This command works only in PreInit state."); - nThreadsCmd->SetGuidance( - "This command is valid only for multi-threaded mode."); - nThreadsCmd->SetGuidance( - "The command is ignored if it is issued in sequential mode."); + nThreadsCmd->SetGuidance("This command is valid only for multi-threaded mode."); + nThreadsCmd->SetGuidance("The command is ignored if it is issued in sequential mode."); nThreadsCmd->SetParameterName("nThreads", true); nThreadsCmd->SetDefaultValue(2); nThreadsCmd->SetRange("nThreads >0"); nThreadsCmd->SetToBeBroadcasted(false); nThreadsCmd->AvailableForStates(G4State_PreInit); - maxThreadsCmd = - new G4UIcmdWithoutParameter("/run/useMaximumLogicalCores", this); + maxThreadsCmd = new G4UIcmdWithoutParameter("/run/useMaximumLogicalCores", this); maxThreadsCmd->SetGuidance( "Set the number of threads to be the number of available logical cores."); maxThreadsCmd->SetGuidance("This command works only in PreInit state."); - maxThreadsCmd->SetGuidance( - "This command is valid only for multi-threaded mode."); - maxThreadsCmd->SetGuidance( - "The command is ignored if it is issued in sequential mode."); + maxThreadsCmd->SetGuidance("This command is valid only for multi-threaded mode."); + maxThreadsCmd->SetGuidance("The command is ignored if it is issued in sequential mode."); maxThreadsCmd->SetToBeBroadcasted(false); maxThreadsCmd->AvailableForStates(G4State_PreInit); @@ -134,18 +125,16 @@ G4RunMessenger::G4RunMessenger(G4RunManager* runMgr) pinAffinityCmd->SetGuidance( "Locks each thread to a specific logical core. Workers " "are locked in round robin to logical cores."); - pinAffinityCmd->SetGuidance( - "This command is valid only for multi-threaded mode."); + pinAffinityCmd->SetGuidance("This command is valid only for multi-threaded mode."); pinAffinityCmd->SetGuidance("This command works only in PreInit state."); - pinAffinityCmd->SetGuidance( - "This command is ignored if it is issued in sequential mode."); + pinAffinityCmd->SetGuidance("This command is ignored if it is issued in sequential mode."); pinAffinityCmd->SetGuidance( "If a value n>0 is provided it starts setting affinity " "from the n-th CPU (note: counting from 1)."); - pinAffinityCmd->SetGuidance("E.g. /run/pinAffinity 3 locks first thread on " - "third logical CPU (number 2)."); pinAffinityCmd->SetGuidance( - "If a value n<0 is provided never locks on n-th CPU."); + "E.g. /run/pinAffinity 3 locks first thread on " + "third logical CPU (number 2)."); + pinAffinityCmd->SetGuidance("If a value n<0 is provided never locks on n-th CPU."); pinAffinityCmd->SetParameterName("pinAffinity", true); pinAffinityCmd->SetDefaultValue(1); pinAffinityCmd->SetToBeBroadcasted(false); @@ -153,57 +142,37 @@ G4RunMessenger::G4RunMessenger(G4RunManager* runMgr) pinAffinityCmd->AvailableForStates(G4State_PreInit); evModCmd = new G4UIcommand("/run/eventModulo", this); - evModCmd->SetGuidance( - "Set the event modulo for dispatching events to worker threads"); - evModCmd->SetGuidance( - "i.e. each worker thread is ordered to simulate N events and then"); + evModCmd->SetGuidance("Set the event modulo for dispatching events to worker threads"); + evModCmd->SetGuidance("i.e. each worker thread is ordered to simulate N events and then"); evModCmd->SetGuidance("comes back to G4MTRunManager for next set."); - evModCmd->SetGuidance( - "If it is set to zero (default value), N is roughly given by this."); - evModCmd->SetGuidance( - " N = int( sqrt( number_of_events / number_of_threads ) )"); - evModCmd->SetGuidance( - "The value N may affect on the computing performance in particular"); - evModCmd->SetGuidance( - "if N is too small compared to the total number of events."); - evModCmd->SetGuidance( - "The second parameter seedOnce specifies how frequently each worker"); - evModCmd->SetGuidance( - "thread is seeded by the random number sequence centrally managed"); + evModCmd->SetGuidance("If it is set to zero (default value), N is roughly given by this."); + evModCmd->SetGuidance(" N = int( sqrt( number_of_events / number_of_threads ) )"); + evModCmd->SetGuidance("The value N may affect on the computing performance in particular"); + evModCmd->SetGuidance("if N is too small compared to the total number of events."); + evModCmd->SetGuidance("The second parameter seedOnce specifies how frequently each worker"); + evModCmd->SetGuidance("thread is seeded by the random number sequence centrally managed"); evModCmd->SetGuidance("by the master G4MTRunManager."); - evModCmd->SetGuidance( - " - If seedOnce is set to 0 (default), seeds that are centrally managed"); - evModCmd->SetGuidance( - " by G4MTRunManager are set for every event of every worker thread."); - evModCmd->SetGuidance( - " This option guarantees event reproducibility regardless of number"); + evModCmd->SetGuidance(" - If seedOnce is set to 0 (default), seeds that are centrally managed"); + evModCmd->SetGuidance(" by G4MTRunManager are set for every event of every worker thread."); + evModCmd->SetGuidance(" This option guarantees event reproducibility regardless of number"); evModCmd->SetGuidance(" of threads."); - evModCmd->SetGuidance( - " - If seedOnce is set to 1, seeds are set only once for the first"); - evModCmd->SetGuidance( - " event of each run of each worker thread. Event reproducibility is"); - evModCmd->SetGuidance( - " guaranteed only if the same number of worker threads are used."); - evModCmd->SetGuidance( - " On the other hand, this option offers better computing performance"); - evModCmd->SetGuidance( - " in particular for applications with relatively small primary"); + evModCmd->SetGuidance(" - If seedOnce is set to 1, seeds are set only once for the first"); + evModCmd->SetGuidance(" event of each run of each worker thread. Event reproducibility is"); + evModCmd->SetGuidance(" guaranteed only if the same number of worker threads are used."); + evModCmd->SetGuidance(" On the other hand, this option offers better computing performance"); + evModCmd->SetGuidance(" in particular for applications with relatively small primary"); evModCmd->SetGuidance(" particle energy and large number of events."); - evModCmd->SetGuidance( - " - If seedOnce is set to 2, seeds are set only for the first event of"); - evModCmd->SetGuidance( - " group of N events. This option is reserved for the future use when"); - evModCmd->SetGuidance( - " Geant4 allows number of threads to be dynamically changed during an"); + evModCmd->SetGuidance(" - If seedOnce is set to 2, seeds are set only for the first event of"); + evModCmd->SetGuidance(" group of N events. This option is reserved for the future use when"); + evModCmd->SetGuidance(" Geant4 allows number of threads to be dynamically changed during an"); evModCmd->SetGuidance(" event loop."); evModCmd->SetGuidance("This command is valid only for multi-threaded mode."); - evModCmd->SetGuidance( - "This command is ignored if it is issued in sequential mode."); - G4UIparameter* emp1 = new G4UIparameter("N", 'i', true); + evModCmd->SetGuidance("This command is ignored if it is issued in sequential mode."); + auto emp1 = new G4UIparameter("N", 'i', true); emp1->SetDefaultValue(0); emp1->SetParameterRange("N >= 0"); evModCmd->SetParameter(emp1); - G4UIparameter* emp2 = new G4UIparameter("seedOnce", 'i', true); + auto emp2 = new G4UIparameter("seedOnce", 'i', true); emp2->SetDefaultValue(0); emp2->SetParameterRange("seedOnce >= 0 && seedOnce <=2"); evModCmd->SetParameter(emp2); @@ -212,16 +181,14 @@ G4RunMessenger::G4RunMessenger(G4RunManager* runMgr) dumpRegCmd = new G4UIcmdWithAString("/run/dumpRegion", this); dumpRegCmd->SetGuidance("Dump region information."); - dumpRegCmd->SetGuidance( - "In case name of a region is not given, all regions will be displayed."); + dumpRegCmd->SetGuidance("In case name of a region is not given, all regions will be displayed."); dumpRegCmd->SetParameterName("regionName", true); dumpRegCmd->SetDefaultValue("**ALL**"); dumpRegCmd->AvailableForStates(G4State_Idle); dumpCoupleCmd = new G4UIcmdWithoutParameter("/run/dumpCouples", this); dumpCoupleCmd->SetGuidance("Dump material-cuts-couple information."); - dumpCoupleCmd->SetGuidance( - "Note that material-cuts-couple information is updated"); + dumpCoupleCmd->SetGuidance("Note that material-cuts-couple information is updated"); dumpCoupleCmd->SetGuidance("after BeamOn has started."); dumpCoupleCmd->AvailableForStates(G4State_Idle); @@ -249,8 +216,9 @@ G4RunMessenger::G4RunMessenger(G4RunManager* runMgr) abortCmd->SetGuidance( "If softAbort is false (default), currently processing event " "will be immediately aborted,"); - abortCmd->SetGuidance("while softAbort is true, abortion occurs after " - "processing the current event."); + abortCmd->SetGuidance( + "while softAbort is true, abortion occurs after " + "processing the current event."); abortCmd->AvailableForStates(G4State_GeomClosed, G4State_EventProc); abortCmd->SetParameterName("softAbort", true); abortCmd->SetDefaultValue(false); @@ -261,18 +229,15 @@ G4RunMessenger::G4RunMessenger(G4RunManager* runMgr) geomCmd = new G4UIcmdWithoutParameter("/run/geometryModified", this); geomCmd->SetGuidance("Force geometry to be closed (re-voxellized) again."); - geomCmd->SetGuidance( - "This command must be applied if geometry has been modified"); + geomCmd->SetGuidance("This command must be applied if geometry has been modified"); geomCmd->SetGuidance(" after the first initialization (or BeamOn)."); geomCmd->AvailableForStates(G4State_PreInit, G4State_Idle); geomRebCmd = new G4UIcmdWithABool("/run/reinitializeGeometry", this); geomRebCmd->SetGuidance("Force geometry to be rebuilt once again."); - geomRebCmd->SetGuidance( - "This command must be applied if the user needs his/her"); + geomRebCmd->SetGuidance("This command must be applied if the user needs his/her"); geomRebCmd->SetGuidance(" detector construction to be reinvoked."); - geomRebCmd->SetGuidance( - "/run/geometryModified is automatically issued with this command."); + geomRebCmd->SetGuidance("/run/geometryModified is automatically issued with this command."); geomRebCmd->SetParameterName("destroyFirst", true); geomRebCmd->SetDefaultValue(false); geomRebCmd->AvailableForStates(G4State_PreInit, G4State_Idle); @@ -284,24 +249,21 @@ G4RunMessenger::G4RunMessenger(G4RunManager* runMgr) physCmd->SetGuidance(" first initialization (or BeamOn)."); physCmd->AvailableForStates(G4State_PreInit, G4State_Idle); - constScoreCmd = - new G4UIcmdWithoutParameter("/run/constructScoringWorlds", this); + constScoreCmd = new G4UIcmdWithoutParameter("/run/constructScoringWorlds", this); constScoreCmd->SetGuidance("Construct scoring parallel world(s) if defined."); - constScoreCmd->SetGuidance("This command is not mandatory, but automatically " - "called when a run starts."); + constScoreCmd->SetGuidance( + "This command is not mandatory, but automatically " + "called when a run starts."); constScoreCmd->SetGuidance( "But the user may use this to visualize the scoring " "world(s) before a run to start."); constScoreCmd->AvailableForStates(G4State_Idle); - materialScanner = new G4MaterialScanner(); - randomDirectory = new G4UIdirectory("/random/"); randomDirectory->SetGuidance("Random number status control commands."); seedCmd = new G4UIcmdWithAString("/random/setSeeds", this); - seedCmd->SetGuidance( - "Initialize the random number generator with integer seed stream."); + seedCmd->SetGuidance("Initialize the random number generator with integer seed stream."); seedCmd->SetGuidance("Number of integers should be more than 1."); seedCmd->SetGuidance( "Actual number of integers to be used depends on the individual " @@ -310,83 +272,75 @@ G4RunMessenger::G4RunMessenger(G4RunManager* runMgr) seedCmd->SetGuidance("This command sets the seeds for the master thread."); #endif seedCmd->SetParameterName("IntArray", false); - seedCmd->AvailableForStates(G4State_PreInit, G4State_Idle, - G4State_GeomClosed); + seedCmd->AvailableForStates(G4State_PreInit, G4State_Idle, G4State_GeomClosed); seedCmd->SetToBeBroadcasted(false); randDirCmd = new G4UIcmdWithAString("/random/setDirectoryName", this); - randDirCmd->SetGuidance( - "Define the directory name of the rndm status files."); + randDirCmd->SetGuidance("Define the directory name of the rndm status files."); randDirCmd->SetGuidance("Directory will be created if it does not exist."); randDirCmd->SetParameterName("fileName", true); randDirCmd->SetDefaultValue("./"); - randDirCmd->AvailableForStates(G4State_PreInit, G4State_Idle, - G4State_GeomClosed); + randDirCmd->AvailableForStates(G4State_PreInit, G4State_Idle, G4State_GeomClosed); savingFlagCmd = new G4UIcmdWithABool("/random/setSavingFlag", this); savingFlagCmd->SetGuidance("The randomNumberStatus will be saved at :"); - savingFlagCmd->SetGuidance("beginning of run (currentRun.rndm) and " - "beginning of event (currentEvent.rndm) "); + savingFlagCmd->SetGuidance( + "beginning of run (currentRun.rndm) and " + "beginning of event (currentEvent.rndm) "); savingFlagCmd->SetParameterName("flag", true); savingFlagCmd->SetDefaultValue(true); saveThisRunCmd = new G4UIcmdWithoutParameter("/random/saveThisRun", this); saveThisRunCmd->SetGuidance("copy currentRun.rndm to runXXX.rndm"); - saveThisRunCmd->AvailableForStates(G4State_Idle, G4State_GeomClosed, - G4State_EventProc); + saveThisRunCmd->AvailableForStates(G4State_Idle, G4State_GeomClosed, G4State_EventProc); saveThisEventCmd = new G4UIcmdWithoutParameter("/random/saveThisEvent", this); saveThisEventCmd->SetGuidance("copy currentEvent.rndm to runXXXevtYYY.rndm"); saveThisEventCmd->AvailableForStates(G4State_EventProc); restoreRandCmd = new G4UIcmdWithAString("/random/resetEngineFrom", this); - restoreRandCmd->SetGuidance( - "Reset the status of the rndm engine from a file."); + restoreRandCmd->SetGuidance("Reset the status of the rndm engine from a file."); restoreRandCmd->SetGuidance("See CLHEP manual for detail."); restoreRandCmd->SetGuidance("The engine status must be stored beforehand."); - restoreRandCmd->SetGuidance("Directory of the status file should be set by" - " /random/setDirectoryName."); + restoreRandCmd->SetGuidance( + "Directory of the status file should be set by" + " /random/setDirectoryName."); restoreRandCmd->SetParameterName("fileName", true); restoreRandCmd->SetDefaultValue("currentRun.rndm"); - restoreRandCmd->AvailableForStates(G4State_PreInit, G4State_Idle, - G4State_GeomClosed); + restoreRandCmd->AvailableForStates(G4State_PreInit, G4State_Idle, G4State_GeomClosed); restoreRandCmd->SetToBeBroadcasted(false); - restoreRandCmdMT = - new G4UIcmdWithABool("/random/resetEngineFromEachEvent", this); - restoreRandCmdMT->SetGuidance( - "Reset the status of the rndm engine from a file at each event."); + restoreRandCmdMT = new G4UIcmdWithABool("/random/resetEngineFromEachEvent", this); + restoreRandCmdMT->SetGuidance("Reset the status of the rndm engine from a file at each event."); + restoreRandCmdMT->SetGuidance("Note that the file must follow the following naming convention:"); restoreRandCmdMT->SetGuidance( - "Note that the file must follow the following naming convention:"); - restoreRandCmdMT->SetGuidance("run{#1}evt{#2}.rndm ; where #1 is the run " - "number and #2 is the event number."); + "run{#1}evt{#2}.rndm ; where #1 is the run " + "number and #2 is the event number."); restoreRandCmdMT->SetGuidance( "For example to re-seed the first event of the first " "run the file should be called run0evt0.rndm."); restoreRandCmdMT->SetGuidance( "If for a specific run/event the file is not found, " "the standard re-seeding strategy is used."); - restoreRandCmdMT->SetGuidance("This command has meaning only in MT mode for " - "strong reproducibility studies."); - restoreRandCmdMT->SetGuidance("Directory of the status file should be set by" - " /random/setDirectoryName."); + restoreRandCmdMT->SetGuidance( + "This command has meaning only in MT mode for " + "strong reproducibility studies."); + restoreRandCmdMT->SetGuidance( + "Directory of the status file should be set by" + " /random/setDirectoryName."); restoreRandCmdMT->SetDefaultValue(false); - restoreRandCmdMT->AvailableForStates(G4State_PreInit, G4State_Idle, - G4State_GeomClosed); + restoreRandCmdMT->AvailableForStates(G4State_PreInit, G4State_Idle, G4State_GeomClosed); saveEachEventCmd = new G4UIcmdWithABool("/random/saveEachEventFlag", this); - saveEachEventCmd->SetGuidance( - "Save random number status at beginning of each event."); - saveEachEventCmd->SetGuidance( - "File name contains run and event numbers: runXXXevtYYY.rndm"); + saveEachEventCmd->SetGuidance("Save random number status at beginning of each event."); + saveEachEventCmd->SetGuidance("File name contains run and event numbers: runXXXevtYYY.rndm"); saveEachEventCmd->SetParameterName("flag", true); saveEachEventCmd->SetDefaultValue(true); randEvtCmd = new G4UIcmdWithAnInteger("/run/storeRndmStatToEvent", this); randEvtCmd->SetGuidance("Flag to store rndm status to G4Event object."); randEvtCmd->SetGuidance(" flag = 0 : not store (default)"); - randEvtCmd->SetGuidance( - " flag = 1 : status before primary particle generation is stored"); + randEvtCmd->SetGuidance(" flag = 1 : status before primary particle generation is stored"); randEvtCmd->SetGuidance( " flag = 2 : status before event processing (after primary " "particle generation) is stored"); @@ -403,17 +357,14 @@ G4RunMessenger::G4RunMessenger(G4RunManager* runMgr) procUICmds = new G4UIcmdWithoutParameter("/run/workersProcessCmds", this); procUICmds->SetToBeBroadcasted(false); - procUICmds->SetGuidance( - "Force workers to process current stack of UI commands."); + procUICmds->SetGuidance("Force workers to process current stack of UI commands."); procUICmds->SetGuidance("This commands is meaningful only in MT mode."); - procUICmds->AvailableForStates(G4State_PreInit, G4State_Idle, - G4State_GeomClosed); + procUICmds->AvailableForStates(G4State_PreInit, G4State_Idle, G4State_GeomClosed); } // -------------------------------------------------------------------- G4RunMessenger::~G4RunMessenger() { - delete materialScanner; delete beamOnCmd; delete verboseCmd; delete printProgCmd; @@ -453,254 +404,193 @@ G4RunMessenger::~G4RunMessenger() // -------------------------------------------------------------------- void G4RunMessenger::SetNewValue(G4UIcommand* command, G4String newValue) { - if(command == beamOnCmd) - { + if (command == beamOnCmd) { G4int nev; G4int nst; - const char* nv = (const char*) newValue; + const auto nv = (const char*)newValue; std::istringstream is(nv); is >> nev >> macroFileName >> nst; - if(macroFileName == "***NULL***") - { + if (macroFileName == "***NULL***") { runManager->BeamOn(nev); } - else - { + else { runManager->BeamOn(nev, macroFileName, nst); } } - else if(command == verboseCmd) - { + else if (command == verboseCmd) { runManager->SetVerboseLevel(verboseCmd->GetNewIntValue(newValue)); } - else if(command == printProgCmd) - { + else if (command == printProgCmd) { runManager->SetPrintProgress(printProgCmd->GetNewIntValue(newValue)); } - else if(command == nThreadsCmd) - { + else if (command == nThreadsCmd) { G4RunManager::RMType rmType = runManager->GetRunManagerType(); - if(rmType == G4RunManager::masterRM) - { + if (rmType == G4RunManager::masterRM) { static_cast(runManager) ->SetNumberOfThreads(nThreadsCmd->GetNewIntValue(newValue)); } - else if(rmType == G4RunManager::sequentialRM) - { + else if (rmType == G4RunManager::sequentialRM) { G4cout << "*** /run/numberOfThreads command is issued in sequential mode." << "\nCommand is ignored." << G4endl; } - else - { + else { G4Exception("G4RunMessenger::ApplyNewCommand", "Run0901", FatalException, "/run/numberOfThreads command is issued to local thread."); } } - else if(command == maxThreadsCmd) - { + else if (command == maxThreadsCmd) { G4RunManager::RMType rmType = runManager->GetRunManagerType(); - if(rmType == G4RunManager::masterRM) - { + if (rmType == G4RunManager::masterRM) { static_cast(runManager) ->SetNumberOfThreads(G4Threading::G4GetNumberOfCores()); } - else if(rmType == G4RunManager::sequentialRM) - { + else if (rmType == G4RunManager::sequentialRM) { G4cout << "*** /run/useMaximumLogicalCores command is issued in " "sequential mode." << "\nCommand is ignored." << G4endl; } - else - { - G4Exception( - "G4RunMessenger::ApplyNewCommand", "Run0901", FatalException, - "/run/useMaximumLogicalCores command is issued to local thread."); + else { + G4Exception("G4RunMessenger::ApplyNewCommand", "Run0901", FatalException, + "/run/useMaximumLogicalCores command is issued to local thread."); } } - else if(command == pinAffinityCmd) - { + else if (command == pinAffinityCmd) { G4RunManager::RMType rmType = runManager->GetRunManagerType(); - if(rmType == G4RunManager::masterRM) - { + if (rmType == G4RunManager::masterRM) { static_cast(runManager) ->SetPinAffinity(pinAffinityCmd->GetNewIntValue(newValue)); } - else if(rmType == G4RunManager::sequentialRM) - { + else if (rmType == G4RunManager::sequentialRM) { G4cout << "*** /run/pinAffinity command is issued in sequential mode." << "\nCommand is ignored." << G4endl; } - else - { + else { G4Exception("G4RunMessenger::ApplyNewCommand", "Run0901", FatalException, "/run/pinAffinity command is issued to local thread."); } } - else if(command == evModCmd) - { + else if (command == evModCmd) { G4RunManager::RMType rmType = runManager->GetRunManagerType(); - if(rmType == G4RunManager::masterRM) - { - G4int nevMod = 0; - G4int sOnce = 0; - const char* nv = (const char*) newValue; + if (rmType == G4RunManager::masterRM) { + G4int nevMod = 0; + G4int sOnce = 0; + const auto nv = (const char*)newValue; std::istringstream is(nv); is >> nevMod >> sOnce; static_cast(runManager)->SetEventModulo(nevMod); G4MTRunManager::SetSeedOncePerCommunication(sOnce); } - else if(rmType == G4RunManager::sequentialRM) - { + else if (rmType == G4RunManager::sequentialRM) { G4cout << "*** /run/eventModulo command is issued in sequential mode." << "\nCommand is ignored." << G4endl; } - else - { + else { G4Exception("G4RunMessenger::ApplyNewCommand", "Run0902", FatalException, "/run/eventModulo command is issued to local thread."); } } - else if(command == dumpRegCmd) - { - if(newValue == "**ALL**") - { + else if (command == dumpRegCmd) { + if (newValue == "**ALL**") { runManager->DumpRegion(); } - else - { + else { runManager->DumpRegion(newValue); } } - else if(command == dumpCoupleCmd) - { + else if (command == dumpCoupleCmd) { G4ProductionCutsTable::GetProductionCutsTable()->DumpCouples(); } - else if(command == optCmd) - { + else if (command == optCmd) { runManager->SetGeometryToBeOptimized(optCmd->GetNewBoolValue(newValue)); } - else if(command == brkBoECmd) - { - G4UImanager::GetUIpointer()->SetPauseAtBeginOfEvent( - brkBoECmd->GetNewBoolValue(newValue)); + else if (command == brkBoECmd) { + G4UImanager::GetUIpointer()->SetPauseAtBeginOfEvent(brkBoECmd->GetNewBoolValue(newValue)); } - else if(command == brkEoECmd) - { - G4UImanager::GetUIpointer()->SetPauseAtEndOfEvent( - brkEoECmd->GetNewBoolValue(newValue)); + else if (command == brkEoECmd) { + G4UImanager::GetUIpointer()->SetPauseAtEndOfEvent(brkEoECmd->GetNewBoolValue(newValue)); } - else if(command == abortCmd) - { + else if (command == abortCmd) { runManager->AbortRun(abortCmd->GetNewBoolValue(newValue)); } - else if(command == abortEventCmd) - { + else if (command == abortEventCmd) { runManager->AbortEvent(); } - else if(command == initCmd) - { + else if (command == initCmd) { runManager->Initialize(); } - else if(command == geomCmd) - { + else if (command == geomCmd) { runManager->GeometryHasBeenModified(false); } - else if(command == geomRebCmd) - { - runManager->ReinitializeGeometry(geomRebCmd->GetNewBoolValue(newValue), - false); + else if (command == geomRebCmd) { + runManager->ReinitializeGeometry(geomRebCmd->GetNewBoolValue(newValue), false); } - else if(command == physCmd) - { + else if (command == physCmd) { runManager->PhysicsHasBeenModified(); } - else if(command == seedCmd) - { + else if (command == seedCmd) { G4Tokenizer next(newValue); G4int idx = 0; G4long seeds[100]; G4String vl; - while(!(vl = next()).empty()) - { + while (!(vl = next()).empty()) { seeds[idx] = StoL(vl); ++idx; } - if(idx < 2) - { + if (idx < 2) { G4cerr << "/random/setSeeds should have at least two values. " "Command ignored." << G4endl; } - else - { + else { seeds[idx] = 0; G4Random::setTheSeeds(seeds); } } - else if(command == randDirCmd) - { + else if (command == randDirCmd) { runManager->SetRandomNumberStoreDir(newValue); } - else if(command == savingFlagCmd) - { + else if (command == savingFlagCmd) { runManager->SetRandomNumberStore(savingFlagCmd->GetNewBoolValue(newValue)); } - else if(command == saveThisRunCmd) - { + else if (command == saveThisRunCmd) { runManager->rndmSaveThisRun(); } - else if(command == saveThisEventCmd) - { + else if (command == saveThisEventCmd) { runManager->rndmSaveThisEvent(); } - else if(command == restoreRandCmd) - { + else if (command == restoreRandCmd) { runManager->RestoreRandomNumberStatus(newValue); } - else if(command == randEvtCmd) - { - runManager->StoreRandomNumberStatusToG4Event( - randEvtCmd->GetNewIntValue(newValue)); + else if (command == randEvtCmd) { + runManager->StoreRandomNumberStatusToG4Event(randEvtCmd->GetNewIntValue(newValue)); } - else if(command == saveEachEventCmd) - { - runManager->SetRandomNumberStorePerEvent( - saveEachEventCmd->GetNewBoolValue(newValue)); + else if (command == saveEachEventCmd) { + runManager->SetRandomNumberStorePerEvent(saveEachEventCmd->GetNewBoolValue(newValue)); } - else if(command == constScoreCmd) - { + else if (command == constScoreCmd) { runManager->ConstructScoringWorlds(); } - else if(command == restoreRandCmdMT) - { - runManager->RestoreRndmEachEvent( - restoreRandCmdMT->GetNewBoolValue(newValue)); + else if (command == restoreRandCmdMT) { + runManager->RestoreRndmEachEvent(restoreRandCmdMT->GetNewBoolValue(newValue)); } - else if(command == procUICmds) - { + else if (command == procUICmds) { G4RunManager::RMType rmType = runManager->GetRunManagerType(); - if(rmType == G4RunManager::masterRM) - { + if (rmType == G4RunManager::masterRM) { auto rm = dynamic_cast(runManager); - if(rm != nullptr) - { + if (rm != nullptr) { rm->RequestWorkersProcessCommandsStack(); } - else - { + else { G4Exception("G4RunManager::ApplyNewCommand", "Run0128", FatalException, "/run/workersProcessCmds command issued on a " "non-G4MTRunManager class instance."); } } - else if(rmType == G4RunManager::sequentialRM) - { - G4cout - << "*** /run/workersProcessCmds command is issued in sequential mode." - << "\nCommand is ignored." << G4endl; + else if (rmType == G4RunManager::sequentialRM) { + G4cout << "*** /run/workersProcessCmds command is issued in sequential mode." + << "\nCommand is ignored." << G4endl; } - else - { + else { G4Exception("G4RunMessenger::ApplyNewCommand", "Run0129", FatalException, "/run/workersProcessCmds command is issued to local thread."); } @@ -712,51 +602,36 @@ G4String G4RunMessenger::GetCurrentValue(G4UIcommand* command) { G4String cv; - if(command == verboseCmd) - { + if (command == verboseCmd) { cv = verboseCmd->ConvertToString(runManager->GetVerboseLevel()); } - else if(command == printProgCmd) - { + else if (command == printProgCmd) { cv = printProgCmd->ConvertToString(runManager->GetPrintProgress()); } - else if(command == randDirCmd) - { + else if (command == randDirCmd) { cv = runManager->GetRandomNumberStoreDir(); } - else if(command == randEvtCmd) - { - cv = randEvtCmd->ConvertToString( - runManager->GetFlagRandomNumberStatusToG4Event()); + else if (command == randEvtCmd) { + cv = randEvtCmd->ConvertToString(runManager->GetFlagRandomNumberStatusToG4Event()); } - else if(command == nThreadsCmd) - { + else if (command == nThreadsCmd) { G4RunManager::RMType rmType = runManager->GetRunManagerType(); - if(rmType == G4RunManager::masterRM) - { + if (rmType == G4RunManager::masterRM) { cv = nThreadsCmd->ConvertToString( static_cast(runManager)->GetNumberOfThreads()); } - else if(rmType == G4RunManager::sequentialRM) - { + else if (rmType == G4RunManager::sequentialRM) { cv = "0"; } } - else if(command == evModCmd) - { + else if (command == evModCmd) { G4RunManager::RMType rmType = runManager->GetRunManagerType(); - if(rmType == G4RunManager::masterRM) - { - cv = - evModCmd->ConvertToString( - static_cast(runManager)->GetEventModulo()) + - " " + - evModCmd->ConvertToString(G4MTRunManager::SeedOncePerCommunication()); + if (rmType == G4RunManager::masterRM) { + cv = evModCmd->ConvertToString(static_cast(runManager)->GetEventModulo()) + + " " + evModCmd->ConvertToString(G4MTRunManager::SeedOncePerCommunication()); } - else if(rmType == G4RunManager::sequentialRM) - { - G4cout << "*** /run/eventModulo command is valid only in MT mode." - << G4endl; + else if (rmType == G4RunManager::sequentialRM) { + G4cout << "*** /run/eventModulo command is valid only in MT mode." << G4endl; } } diff --git a/source/run/src/G4TaskRunManager.cc b/source/run/src/G4TaskRunManager.cc index 49f54fdb006..5492654c0a0 100644 --- a/source/run/src/G4TaskRunManager.cc +++ b/source/run/src/G4TaskRunManager.cc @@ -26,6 +26,7 @@ // #include "G4TaskRunManager.hh" + #include "G4AutoLock.hh" #include "G4EnvironmentUtils.hh" #include "G4ProductionCutsTable.hh" @@ -36,6 +37,7 @@ #include "G4TaskGroup.hh" #include "G4TaskManager.hh" #include "G4TaskRunManagerKernel.hh" +#include "G4ThreadLocalSingleton.hh" #include "G4ThreadPool.hh" #include "G4Threading.hh" #include "G4TiMemory.hh" @@ -44,13 +46,11 @@ #include "G4UImanager.hh" #include "G4UserRunAction.hh" #include "G4UserTaskInitialization.hh" +#include "G4UserTaskQueue.hh" #include "G4UserTaskThreadInitialization.hh" #include "G4VUserActionInitialization.hh" #include "G4WorkerTaskRunManager.hh" #include "G4WorkerThread.hh" -#include "G4UserTaskQueue.hh" -#include "G4TiMemory.hh" -#include "G4ThreadLocalSingleton.hh" #include #include @@ -60,9 +60,9 @@ namespace { - G4Mutex scorerMergerMutex; - G4Mutex runMergerMutex; - G4Mutex setUpEventMutex; +G4Mutex scorerMergerMutex; +G4Mutex runMergerMutex; +G4Mutex setUpEventMutex; } // namespace //============================================================================// @@ -74,34 +74,23 @@ G4TaskRunManagerKernel* G4TaskRunManager::GetMTMasterRunManagerKernel() //============================================================================// -G4TaskRunManager::G4TaskRunManager(G4VUserTaskQueue* task_queue, G4bool useTBB, - G4int grainsize) - : G4MTRunManager() - , PTL::TaskRunManager(useTBB) - , eventGrainsize(grainsize) - , numberOfEventsPerTask(-1) - , numberOfTasks(-1) - , masterRNGEngine(nullptr) - , workTaskGroup(nullptr) +G4TaskRunManager::G4TaskRunManager(G4VUserTaskQueue* task_queue, G4bool useTBB, G4int grainsize) + : PTL::TaskRunManager(useTBB), eventGrainsize(grainsize) { - if(task_queue) - taskQueue = task_queue; + if (task_queue != nullptr) taskQueue = task_queue; // override default of 2 from G4MTRunManager - nworkers = G4Threading::G4GetNumberOfCores(); + nworkers = G4Threading::G4GetNumberOfCores(); fMasterRM = this; - MTkernel = static_cast(kernel); + MTkernel = static_cast(kernel); G4int numberOfStaticAllocators = kernel->GetNumberOfStaticAllocators(); - if(numberOfStaticAllocators > 0) - { + if (numberOfStaticAllocators > 0) { G4ExceptionDescription msg1; - msg1 << "There are " << numberOfStaticAllocators - << " static G4Allocator objects detected.\n" + msg1 << "There are " << numberOfStaticAllocators << " static G4Allocator objects detected.\n" << "In multi-threaded mode, all G4Allocator objects must " << "be dynamicly instantiated."; - G4Exception("G4TaskRunManager::G4TaskRunManager", "Run1035", FatalException, - msg1); + G4Exception("G4TaskRunManager::G4TaskRunManager", "Run1035", FatalException, msg1); } G4UImanager::GetUIpointer()->SetMasterUIManager(true); @@ -111,44 +100,38 @@ G4TaskRunManager::G4TaskRunManager(G4VUserTaskQueue* task_queue, G4bool useTBB, masterRNGEngine = G4Random::getTheEngine(); numberOfEventToBeProcessed = 0; - randDbl = new G4double[nSeedsPerEvent * nSeedsMax]; + randDbl = new G4double[nSeedsPerEvent * nSeedsMax]; //------------------------------------------------------------------------// // handle threading //------------------------------------------------------------------------// - G4String _nthread_env = G4GetEnv("G4FORCENUMBEROFTHREADS", ""); - for(auto& itr : _nthread_env) + auto _nthread_env = G4GetEnv("G4FORCENUMBEROFTHREADS", ""); + for (auto& itr : _nthread_env) itr = (char)std::tolower(itr); - if(_nthread_env == "max") + if (_nthread_env == "max") forcedNwokers = G4Threading::G4GetNumberOfCores(); - else if(!_nthread_env.empty()) - { + else if (!_nthread_env.empty()) { std::stringstream ss; G4int _nthread_val = -1; ss << _nthread_env; ss >> _nthread_val; - if(_nthread_val > 0) - forcedNwokers = _nthread_val; + if (_nthread_val > 0) forcedNwokers = _nthread_val; - if(forcedNwokers > 0) - nworkers = forcedNwokers; + if (forcedNwokers > 0) nworkers = forcedNwokers; } //------------------------------------------------------------------------// // option for forcing TBB //------------------------------------------------------------------------// #ifdef GEANT4_USE_TBB - G4int _useTBB = G4GetEnv("G4FORCE_TBB", (G4int) useTBB); - if(_useTBB > 0) - useTBB = true; + G4int _useTBB = G4GetEnv("G4FORCE_TBB", (G4int)useTBB); + if (_useTBB > 0) useTBB = true; #else - if(useTBB) - { + if (useTBB) { G4ExceptionDescription msg; msg << "TBB was requested but Geant4 was not built with TBB support"; - G4Exception("G4TaskRunManager::G4TaskRunManager(...)", "Run0131", - JustWarning, msg); + G4Exception("G4TaskRunManager::G4TaskRunManager(...)", "Run0131", JustWarning, msg); } useTBB = false; #endif @@ -159,9 +142,7 @@ G4TaskRunManager::G4TaskRunManager(G4VUserTaskQueue* task_queue, G4bool useTBB, //============================================================================// -G4TaskRunManager::G4TaskRunManager(G4bool useTBB) - : G4TaskRunManager(nullptr, useTBB, 0) -{} +G4TaskRunManager::G4TaskRunManager(G4bool useTBB) : G4TaskRunManager(nullptr, useTBB, 0) {} //============================================================================// @@ -181,8 +162,7 @@ G4TaskRunManager::~G4TaskRunManager() workTaskGroup = nullptr; // destroy the thread-pool - if(threadPool) - threadPool->destroy_threadpool(); + if (threadPool != nullptr) threadPool->destroy_threadpool(); PTL::TaskRunManager::Terminate(); } @@ -207,30 +187,23 @@ void G4TaskRunManager::StoreRNGStatus(const G4String& fn) void G4TaskRunManager::SetNumberOfThreads(G4int n) { - if(forcedNwokers > 0) - { - if(verboseLevel > 0) - { + if (forcedNwokers > 0) { + if (verboseLevel > 0) { G4ExceptionDescription msg; msg << "\n### Number of threads is forced to " << forcedNwokers - << " by G4FORCENUMBEROFTHREADS environment variable. G4TaskRunManager::" - << __FUNCTION__ << "(" << n << ") ignored ###"; - G4Exception("G4TaskRunManager::SetNumberOfThreads(G4int)", "Run0132", - JustWarning, msg); + << " by G4FORCENUMBEROFTHREADS environment variable. G4TaskRunManager::" << __FUNCTION__ + << "(" << n << ") ignored ###"; + G4Exception("G4TaskRunManager::SetNumberOfThreads(G4int)", "Run0132", JustWarning, msg); } nworkers = forcedNwokers; } - else - { + else { nworkers = n; - if(poolInitialized) - { - if(verboseLevel > 0) - { - std::stringstream ss; - ss << "\n### Thread-pool already initialized. Resizing to " << nworkers - << "threads ###"; - G4cout << ss.str() << "\n" << G4endl; + if (poolInitialized) { + if (verboseLevel > 0) { + std::stringstream ss; + ss << "\n### Thread-pool already initialized. Resizing to " << nworkers << "threads ###"; + G4cout << ss.str() << "\n" << G4endl; } GetThreadPool()->resize(n); } @@ -241,16 +214,14 @@ void G4TaskRunManager::SetNumberOfThreads(G4int n) void G4TaskRunManager::Initialize() { - G4bool firstTime = (!threadPool); - if(firstTime) - InitializeThreadPool(); + G4bool firstTime = (threadPool == nullptr); + if (firstTime) InitializeThreadPool(); G4RunManager::Initialize(); // make sure all worker threads are set up. G4RunManager::BeamOn(0); - if(firstTime) - G4RunManager::SetRunIDCounter(0); + if (firstTime) G4RunManager::SetRunIDCounter(0); // G4UImanager::GetUIpointer()->SetIgnoreCmdNotFound(true); } @@ -258,10 +229,9 @@ void G4TaskRunManager::Initialize() void G4TaskRunManager::InitializeThreadPool() { - if(poolInitialized && threadPool && workTaskGroup) - { - G4Exception("G4TaskRunManager::InitializeThreadPool", "Run1040", - JustWarning, "Threadpool already initialized. Ignoring..."); + if (poolInitialized && (threadPool != nullptr) && (workTaskGroup != nullptr)) { + G4Exception("G4TaskRunManager::InitializeThreadPool", "Run1040", JustWarning, + "Threadpool already initialized. Ignoring..."); return; } @@ -269,22 +239,20 @@ void G4TaskRunManager::InitializeThreadPool() PTL::TaskRunManager::Initialize(nworkers); // create the joiners - if(!workTaskGroup) - { workTaskGroup = new RunTaskGroup(threadPool); } + if (workTaskGroup == nullptr) { + workTaskGroup = new RunTaskGroup(threadPool); + } - if(verboseLevel > 0) - { + if (verboseLevel > 0) { std::stringstream ss; ss.fill('='); ss << std::setw(90) << ""; G4cout << "\n" << ss.str() << G4endl; - if(threadPool->is_tbb_threadpool()) - { + if (threadPool->is_tbb_threadpool()) { G4cout << "G4TaskRunManager :: Using TBB..." << G4endl; } - else - { + else { G4cout << "G4TaskRunManager :: Using G4ThreadPool..." << G4endl; } @@ -310,69 +278,52 @@ void G4TaskRunManager::TerminateOneEvent() void G4TaskRunManager::ComputeNumberOfTasks() { - G4int grainSize = (eventGrainsize == 0) - ? (G4int)threadPool->size() : eventGrainsize; - grainSize = - G4GetEnv("G4FORCE_GRAINSIZE", grainSize, "Forcing grainsize..."); - if(grainSize == 0) - grainSize = 1; - - G4int nEvtsPerTask = (numberOfEventToBeProcessed > grainSize) - ? (numberOfEventToBeProcessed / grainSize) - : 1; - - if(eventModuloDef > 0) - { + G4int grainSize = (eventGrainsize == 0) ? (G4int)threadPool->size() : eventGrainsize; + grainSize = G4GetEnv("G4FORCE_GRAINSIZE", grainSize, "Forcing grainsize..."); + if (grainSize == 0) grainSize = 1; + + G4int nEvtsPerTask = + (numberOfEventToBeProcessed > grainSize) ? (numberOfEventToBeProcessed / grainSize) : 1; + + if (eventModuloDef > 0) { eventModulo = eventModuloDef; } - else - { + else { eventModulo = G4int(std::sqrt(G4double(numberOfEventToBeProcessed))); - if(eventModulo < 1) - eventModulo = 1; + if (eventModulo < 1) eventModulo = 1; } - if(eventModulo > nEvtsPerTask) - { + if (eventModulo > nEvtsPerTask) { G4int oldMod = eventModulo; - eventModulo = nEvtsPerTask; + eventModulo = nEvtsPerTask; G4ExceptionDescription msgd; - msgd << "Event modulo is reduced to " << eventModulo << " (was " << oldMod - << ")" + msgd << "Event modulo is reduced to " << eventModulo << " (was " << oldMod << ")" << " to distribute events to all threads."; - G4Exception("G4TaskRunManager::InitializeEventLoop()", "Run10035", - JustWarning, msgd); + G4Exception("G4TaskRunManager::InitializeEventLoop()", "Run10035", JustWarning, msgd); } nEvtsPerTask = eventModulo; - if(fakeRun) - nEvtsPerTask = G4GetEnv( - "G4FORCE_EVENTS_PER_TASK", nEvtsPerTask, - "Forcing number of events per task (overrides grainsize)..."); + if (fakeRun) + nEvtsPerTask = G4GetEnv("G4FORCE_EVENTS_PER_TASK", nEvtsPerTask, + "Forcing number of events per task (overrides grainsize)..."); else nEvtsPerTask = G4GetEnv("G4FORCE_EVENTS_PER_TASK", nEvtsPerTask); - if(nEvtsPerTask < 1) - nEvtsPerTask = 1; + if (nEvtsPerTask < 1) nEvtsPerTask = 1; - numberOfTasks = numberOfEventToBeProcessed / nEvtsPerTask; + numberOfTasks = numberOfEventToBeProcessed / nEvtsPerTask; numberOfEventsPerTask = nEvtsPerTask; - eventModulo = numberOfEventsPerTask; + eventModulo = numberOfEventsPerTask; - if(fakeRun && verboseLevel > 1) - { + if (fakeRun && verboseLevel > 1) { std::stringstream msg; - msg << "--> G4TaskRunManager::ComputeNumberOfTasks() --> " << numberOfTasks - << " tasks with " << numberOfEventsPerTask << " events/task..."; + msg << "--> G4TaskRunManager::ComputeNumberOfTasks() --> " << numberOfTasks << " tasks with " + << numberOfEventsPerTask << " events/task..."; std::stringstream ss; ss.fill('='); ss << std::setw((G4int)msg.str().length()) << ""; - G4cout << "\n" - << ss.str() << "\n" - << msg.str() << "\n" - << ss.str() << "\n" - << G4endl; + G4cout << "\n" << ss.str() << "\n" << msg.str() << "\n" << ss.str() << "\n" << G4endl; } } @@ -389,22 +340,18 @@ void G4TaskRunManager::CreateAndStartWorkers() ComputeNumberOfTasks(); - if(fakeRun) - { - if(initializeStarted) - { + if (fakeRun) { + if (initializeStarted) { auto initCmdStack = GetCommandStack(); - if(!initCmdStack.empty()) - { + if (!initCmdStack.empty()) { threadPool->execute_on_all_threads([initCmdStack]() { - for(auto& itr : initCmdStack) + for (auto& itr : initCmdStack) G4UImanager::GetUIpointer()->ApplyCommand(itr); G4WorkerTaskRunManager::GetWorkerRunManager()->DoWork(); }); } } - else - { + else { std::stringstream msg; msg << "--> G4TaskRunManager::CreateAndStartWorkers() --> " << "Initializing workers..."; @@ -412,55 +359,41 @@ void G4TaskRunManager::CreateAndStartWorkers() std::stringstream ss; ss.fill('='); ss << std::setw((G4int)msg.str().length()) << ""; - G4cout << "\n" - << ss.str() << "\n" - << msg.str() << "\n" - << ss.str() << "\n" - << G4endl; + G4cout << "\n" << ss.str() << "\n" << msg.str() << "\n" << ss.str() << "\n" << G4endl; G4TaskRunManagerKernel::InitCommandStack() = GetCommandStack(); - threadPool->execute_on_all_threads( - []() { G4TaskRunManagerKernel::InitializeWorker(); }); + threadPool->execute_on_all_threads([]() { G4TaskRunManagerKernel::InitializeWorker(); }); } initializeStarted = true; } - else - { + else { auto initCmdStack = GetCommandStack(); - if(!initCmdStack.empty()) - { + if (!initCmdStack.empty()) { threadPool->execute_on_all_threads([initCmdStack]() { - for(auto& itr : initCmdStack) + for (auto& itr : initCmdStack) G4UImanager::GetUIpointer()->ApplyCommand(itr); }); } // cleans up a previous run and events in case a thread // does not execute any tasks - threadPool->execute_on_all_threads( - []() { G4TaskRunManagerKernel::ExecuteWorkerInit(); }); + threadPool->execute_on_all_threads([]() { G4TaskRunManagerKernel::ExecuteWorkerInit(); }); { std::stringstream msg; msg << "--> G4TaskRunManager::CreateAndStartWorkers() --> " - << "Creating " << numberOfTasks << " tasks with " - << numberOfEventsPerTask << " events/task..."; + << "Creating " << numberOfTasks << " tasks with " << numberOfEventsPerTask + << " events/task..."; std::stringstream ss; ss.fill('='); ss << std::setw((G4int)msg.str().length()) << ""; - G4cout << "\n" - << ss.str() << "\n" - << msg.str() << "\n" - << ss.str() << "\n" - << G4endl; + G4cout << "\n" << ss.str() << "\n" << msg.str() << "\n" << ss.str() << "\n" << G4endl; } G4int remaining = numberOfEventToBeProcessed; - for(G4int nt = 0; nt < numberOfTasks + 1; ++nt) - { - if(remaining > 0) - AddEventTask(nt); + for (G4int nt = 0; nt < numberOfTasks + 1; ++nt) { + if (remaining > 0) AddEventTask(nt); remaining -= numberOfEventsPerTask; } workTaskGroup->wait(); @@ -471,8 +404,7 @@ void G4TaskRunManager::CreateAndStartWorkers() void G4TaskRunManager::AddEventTask(G4int nt) { - if(verboseLevel > 1) - G4cout << "Adding task " << nt << " to task-group..." << G4endl; + if (verboseLevel > 1) G4cout << "Adding task " << nt << " to task-group..." << G4endl; workTaskGroup->exec([]() { G4TaskRunManagerKernel::ExecuteWorkerTask(); }); } @@ -481,9 +413,8 @@ void G4TaskRunManager::AddEventTask(G4int nt) void G4TaskRunManager::RefillSeeds() { G4RNGHelper* helper = G4RNGHelper::GetInstance(); - G4int nFill = 0; - switch(SeedOncePerCommunication()) - { + G4int nFill = 0; + switch (SeedOncePerCommunication()) { case 0: nFill = numberOfEventToBeProcessed - nSeedsFilled; break; @@ -492,13 +423,10 @@ void G4TaskRunManager::RefillSeeds() break; case 2: default: - nFill = (numberOfEventToBeProcessed - nSeedsFilled * eventModulo) / - eventModulo + - 1; + nFill = (numberOfEventToBeProcessed - nSeedsFilled * eventModulo) / eventModulo + 1; } // Generates up to nSeedsMax seed pairs only. - if(nFill > nSeedsMax) - nFill = nSeedsMax; + if (nFill > nSeedsMax) nFill = nSeedsMax; masterRNGEngine->flatArray(nSeedsPerEvent * nFill, randDbl); helper->Refill(randDbl, nFill); nSeedsFilled += nFill; @@ -506,35 +434,29 @@ void G4TaskRunManager::RefillSeeds() //============================================================================// -void G4TaskRunManager::InitializeEventLoop(G4int n_event, const char* macroFile, - G4int n_select) +void G4TaskRunManager::InitializeEventLoop(G4int n_event, const char* macroFile, G4int n_select) { MTkernel->SetUpDecayChannels(); numberOfEventToBeProcessed = n_event; - numberOfEventProcessed = 0; + numberOfEventProcessed = 0; - if(!fakeRun) - { - nSeedsUsed = 0; + if (!fakeRun) { + nSeedsUsed = 0; nSeedsFilled = 0; - if(verboseLevel > 0) - timer->Start(); + if (verboseLevel > 0) timer->Start(); n_select_msg = n_select; - if(macroFile != nullptr) - { - if(n_select_msg < 0) - n_select_msg = n_event; + if (macroFile != nullptr) { + if (n_select_msg < 0) n_select_msg = n_event; msgText = "/control/execute "; msgText += macroFile; selectMacro = macroFile; } - else - { + else { n_select_msg = -1; - selectMacro = ""; + selectMacro = ""; } ComputeNumberOfTasks(); @@ -543,17 +465,13 @@ void G4TaskRunManager::InitializeEventLoop(G4int n_event, const char* macroFile, // If user did not implement InitializeSeeds, // use default: nSeedsPerEvent seeds per event - if(n_event > 0) - { + if (n_event > 0) { G4bool _overload = InitializeSeeds(n_event); - G4bool _functor = false; - if(!_overload) - _functor = initSeedsCallback(n_event, nSeedsPerEvent, nSeedsFilled); - if(_overload == false && _functor == false) - { + G4bool _functor = false; + if (!_overload) _functor = initSeedsCallback(n_event, nSeedsPerEvent, nSeedsFilled); + if (!_overload && !_functor) { G4RNGHelper* helper = G4RNGHelper::GetInstance(); - switch(SeedOncePerCommunication()) - { + switch (SeedOncePerCommunication()) { case 0: nSeedsFilled = n_event; break; @@ -568,15 +486,13 @@ void G4TaskRunManager::InitializeEventLoop(G4int n_event, const char* macroFile, msgd << "Parameter value <" << SeedOncePerCommunication() << "> of seedOncePerCommunication is invalid. It is reset " "to 0."; - G4Exception("G4TaskRunManager::InitializeEventLoop()", "Run10036", - JustWarning, msgd); + G4Exception("G4TaskRunManager::InitializeEventLoop()", "Run10036", JustWarning, msgd); SetSeedOncePerCommunication(0); nSeedsFilled = n_event; } // Generates up to nSeedsMax seed pairs only. - if(nSeedsFilled > nSeedsMax) - nSeedsFilled = nSeedsMax; + if (nSeedsFilled > nSeedsMax) nSeedsFilled = nSeedsMax; masterRNGEngine->flatArray(nSeedsPerEvent * nSeedsFilled, randDbl); helper->Fill(randDbl, nSeedsFilled, n_event, nSeedsPerEvent); } @@ -584,7 +500,7 @@ void G4TaskRunManager::InitializeEventLoop(G4int n_event, const char* macroFile, } // Now initialize workers. Check if user defined a WorkerThreadInitialization - if(userWorkerThreadInitialization == nullptr) + if (userWorkerThreadInitialization == nullptr) userWorkerThreadInitialization = new G4UserTaskThreadInitialization(); // Prepare UI commands for threads @@ -618,12 +534,9 @@ void G4TaskRunManager::ConstructScoringWorlds() G4RunManager::ConstructScoringWorlds(); masterWorlds.clear(); - G4int nWorlds = (G4int) - G4TransportationManager::GetTransportationManager()->GetNoWorlds(); - std::vector::iterator itrW = - G4TransportationManager::GetTransportationManager()->GetWorldsIterator(); - for(G4int iWorld = 0; iWorld < nWorlds; ++iWorld) - { + auto nWorlds = (G4int)G4TransportationManager::GetTransportationManager()->GetNoWorlds(); + auto itrW = G4TransportationManager::GetTransportationManager()->GetWorldsIterator(); + for (G4int iWorld = 0; iWorld < nWorlds; ++iWorld) { addWorld(iWorld, *itrW); ++itrW; } @@ -634,8 +547,7 @@ void G4TaskRunManager::ConstructScoringWorlds() void G4TaskRunManager::MergeScores(const G4ScoringManager* localScoringManager) { G4AutoLock l(&scorerMergerMutex); - if(masterScM) - masterScM->Merge(localScoringManager); + if (masterScM != nullptr) masterScM->Merge(localScoringManager); } //============================================================================// @@ -643,30 +555,25 @@ void G4TaskRunManager::MergeScores(const G4ScoringManager* localScoringManager) void G4TaskRunManager::MergeRun(const G4Run* localRun) { G4AutoLock l(&runMergerMutex); - if(currentRun) - currentRun->Merge(localRun); + if (currentRun != nullptr) currentRun->Merge(localRun); } //============================================================================// -G4bool G4TaskRunManager::SetUpAnEvent(G4Event* evt, G4long& s1, G4long& s2, - G4long& s3, G4bool reseedRequired) +G4bool G4TaskRunManager::SetUpAnEvent(G4Event* evt, G4long& s1, G4long& s2, G4long& s3, + G4bool reseedRequired) { G4AutoLock l(&setUpEventMutex); - if(numberOfEventProcessed < numberOfEventToBeProcessed) - { + if (numberOfEventProcessed < numberOfEventToBeProcessed) { evt->SetEventID(numberOfEventProcessed); - if(reseedRequired) - { + if (reseedRequired) { G4RNGHelper* helper = G4RNGHelper::GetInstance(); - G4int idx_rndm = nSeedsPerEvent * nSeedsUsed; - s1 = helper->GetSeed(idx_rndm); - s2 = helper->GetSeed(idx_rndm + 1); - if(nSeedsPerEvent == 3) - s3 = helper->GetSeed(idx_rndm + 2); + G4int idx_rndm = nSeedsPerEvent * nSeedsUsed; + s1 = helper->GetSeed(idx_rndm); + s2 = helper->GetSeed(idx_rndm + 1); + if (nSeedsPerEvent == 3) s3 = helper->GetSeed(idx_rndm + 2); ++nSeedsUsed; - if(nSeedsUsed == nSeedsFilled) - RefillSeeds(); + if (nSeedsUsed == nSeedsFilled) RefillSeeds(); } numberOfEventProcessed++; return true; @@ -676,36 +583,28 @@ G4bool G4TaskRunManager::SetUpAnEvent(G4Event* evt, G4long& s1, G4long& s2, //============================================================================// -G4int G4TaskRunManager::SetUpNEvents(G4Event* evt, G4SeedsQueue* seedsQueue, - G4bool reseedRequired) +G4int G4TaskRunManager::SetUpNEvents(G4Event* evt, G4SeedsQueue* seedsQueue, G4bool reseedRequired) { G4AutoLock l(&setUpEventMutex); - if(numberOfEventProcessed < numberOfEventToBeProcessed && !runAborted) - { + if (numberOfEventProcessed < numberOfEventToBeProcessed && !runAborted) { G4int nevt = numberOfEventsPerTask; G4int nmod = eventModulo; - if(numberOfEventProcessed + nevt > numberOfEventToBeProcessed) - { + if (numberOfEventProcessed + nevt > numberOfEventToBeProcessed) { nevt = numberOfEventToBeProcessed - numberOfEventProcessed; nmod = numberOfEventToBeProcessed - numberOfEventProcessed; } evt->SetEventID(numberOfEventProcessed); - if(reseedRequired) - { + if (reseedRequired) { G4RNGHelper* helper = G4RNGHelper::GetInstance(); - G4int nevRnd = nmod; - if(SeedOncePerCommunication() > 0) - nevRnd = 1; - for(G4int i = 0; i < nevRnd; ++i) - { + G4int nevRnd = nmod; + if (SeedOncePerCommunication() > 0) nevRnd = 1; + for (G4int i = 0; i < nevRnd; ++i) { seedsQueue->push(helper->GetSeed(nSeedsPerEvent * nSeedsUsed)); seedsQueue->push(helper->GetSeed(nSeedsPerEvent * nSeedsUsed + 1)); - if(nSeedsPerEvent == 3) - seedsQueue->push(helper->GetSeed(nSeedsPerEvent * nSeedsUsed + 2)); + if (nSeedsPerEvent == 3) seedsQueue->push(helper->GetSeed(nSeedsPerEvent * nSeedsUsed + 2)); nSeedsUsed++; - if(nSeedsUsed == nSeedsFilled) - RefillSeeds(); + if (nSeedsUsed == nSeedsFilled) RefillSeeds(); } } numberOfEventProcessed += nevt; @@ -721,12 +620,10 @@ void G4TaskRunManager::TerminateWorkers() // Force workers to execute (if any) all UI commands left in the stack RequestWorkersProcessCommandsStack(); - if(workTaskGroup) - { + if (workTaskGroup != nullptr) { workTaskGroup->join(); - if(!fakeRun) - threadPool->execute_on_all_threads( - []() { G4TaskRunManagerKernel::TerminateWorker(); }); + if (!fakeRun) + threadPool->execute_on_all_threads([]() { G4TaskRunManagerKernel::TerminateWorker(); }); } } @@ -735,15 +632,12 @@ void G4TaskRunManager::TerminateWorkers() void G4TaskRunManager::AbortRun(G4bool softAbort) { // This method is valid only for GeomClosed or EventProc state - G4ApplicationState currentState = - G4StateManager::GetStateManager()->GetCurrentState(); - if(currentState == G4State_GeomClosed || currentState == G4State_EventProc) - { + G4ApplicationState currentState = G4StateManager::GetStateManager()->GetCurrentState(); + if (currentState == G4State_GeomClosed || currentState == G4State_EventProc) { runAborted = true; MTkernel->BroadcastAbortRun(softAbort); } - else - { + else { G4cerr << "Run is not in progress. AbortRun() ignored." << G4endl; } } @@ -759,10 +653,9 @@ void G4TaskRunManager::AbortEvent() void G4TaskRunManager::WaitForEndEventLoopWorkers() { - if(workTaskGroup) - { + if (workTaskGroup != nullptr) { workTaskGroup->join(); - if(!fakeRun) + if (!fakeRun) threadPool->execute_on_all_threads( []() { G4TaskRunManagerKernel::TerminateWorkerRunEventLoop(); }); } @@ -776,17 +669,15 @@ void G4TaskRunManager::RequestWorkersProcessCommandsStack() auto process_commands_stack = []() { G4MTRunManager* mrm = G4MTRunManager::GetMasterRunManager(); - if(mrm) - { + if (mrm != nullptr) { auto cmds = mrm->GetCommandStack(); - for(const auto& itr : cmds) + for (const auto& itr : cmds) G4UImanager::GetUIpointer()->ApplyCommand(itr); // TLS instance mrm->ThisWorkerProcessCommandsStackDone(); } }; - if(threadPool) - threadPool->execute_on_all_threads(process_commands_stack); + if (threadPool != nullptr) threadPool->execute_on_all_threads(process_commands_stack); } //============================================================================// diff --git a/source/run/src/G4TaskRunManagerKernel.cc b/source/run/src/G4TaskRunManagerKernel.cc index 38565937379..0548d08cbe0 100644 --- a/source/run/src/G4TaskRunManagerKernel.cc +++ b/source/run/src/G4TaskRunManagerKernel.cc @@ -25,10 +25,8 @@ // #include "G4TaskRunManagerKernel.hh" -#include "G4AutoLock.hh" -#include "G4RegionStore.hh" -#include "G4StateManager.hh" +#include "G4AutoLock.hh" #include "G4DecayTable.hh" #include "G4LogicalVolume.hh" #include "G4Material.hh" @@ -43,7 +41,9 @@ #include "G4PolyconeSide.hh" #include "G4PolyhedraSide.hh" #include "G4Region.hh" +#include "G4RegionStore.hh" #include "G4Run.hh" +#include "G4StateManager.hh" #include "G4TaskManager.hh" #include "G4TiMemory.hh" #include "G4UImanager.hh" @@ -67,8 +67,7 @@ std::vector G4TaskRunManagerKernel::initCmdStack = {}; //============================================================================// -G4TaskRunManagerKernel::G4TaskRunManagerKernel() - : G4RunManagerKernel(masterRMK) +G4TaskRunManagerKernel::G4TaskRunManagerKernel() : G4RunManagerKernel(masterRMK) { // This version of the constructor should never be called in sequential mode! #ifndef G4MULTITHREADED @@ -78,8 +77,7 @@ G4TaskRunManagerKernel::G4TaskRunManagerKernel() "is set to off)."; msg << " This type of RunManager can only be used in mult-threaded " "applications."; - G4Exception("G4RunManagerKernel::G4RunManagerKernel()", "Run0109", - FatalException, msg); + G4Exception("G4RunManagerKernel::G4RunManagerKernel()", "Run0109", FatalException, msg); #endif // Set flag that a MT-type kernel has been instantiated G4Threading::SetMultithreadedApplication(true); @@ -87,10 +85,6 @@ G4TaskRunManagerKernel::G4TaskRunManagerKernel() //============================================================================// -G4TaskRunManagerKernel::~G4TaskRunManagerKernel() {} - -//============================================================================// - void G4TaskRunManagerKernel::SetupShadowProcess() const { // Behavior is the same as base class (sequential mode) @@ -102,20 +96,20 @@ void G4TaskRunManagerKernel::SetupShadowProcess() const namespace { - using WorkerRunManPtr_t = std::unique_ptr; - using WorkerThreadPtr_t = std::unique_ptr; +using WorkerRunManPtr_t = std::unique_ptr; +using WorkerThreadPtr_t = std::unique_ptr; - WorkerRunManPtr_t& workerRM() - { - G4ThreadLocalStatic WorkerRunManPtr_t _instance{ nullptr }; - return _instance; - } +WorkerRunManPtr_t& workerRM() +{ + G4ThreadLocalStatic WorkerRunManPtr_t _instance{nullptr}; + return _instance; +} - WorkerThreadPtr_t& context() - { - G4ThreadLocalStatic WorkerThreadPtr_t _instance{ nullptr }; - return _instance; - } +WorkerThreadPtr_t& context() +{ + G4ThreadLocalStatic WorkerThreadPtr_t _instance{nullptr}; + return _instance; +} } // namespace @@ -130,14 +124,12 @@ G4WorkerThread* G4TaskRunManagerKernel::GetWorkerThread() void G4TaskRunManagerKernel::InitializeWorker() { - if(context() && workerRM()) - return; + if (context() && workerRM()) return; G4TaskRunManager* mrm = G4TaskRunManager::GetMasterRunManager(); - if(G4MTRunManager::GetMasterThreadId() == G4ThisThread::get_id()) - { + if (G4MTRunManager::GetMasterThreadId() == G4ThisThread::get_id()) { G4TaskManager* taskManager = mrm->GetTaskManager(); - auto _fut = taskManager->async(InitializeWorker); + auto _fut = taskManager->async(InitializeWorker); _fut->wait(); return; } @@ -154,7 +146,7 @@ void G4TaskRunManagerKernel::InitializeWorker() //!!!!!!!!!!!!!!!!!!!!!!!!!! G4Threading::WorkerThreadJoinsPool(); - context().reset(new G4WorkerThread); + context() = std::make_unique(); //============================ // Step-0: Thread ID @@ -184,15 +176,12 @@ void G4TaskRunManagerKernel::InitializeWorker() //============================ // Step-2: Initialize worker thread //============================ - if(mrm->GetUserWorkerInitialization()) + if (mrm->GetUserWorkerInitialization() != nullptr) mrm->GetUserWorkerInitialization()->WorkerInitialize(); - if(mrm->GetUserActionInitialization()) - { - G4VSteppingVerbose* sv = - mrm->GetUserActionInitialization()->InitializeSteppingVerbose(); - if(sv) - G4VSteppingVerbose::SetInstance(sv); + if (mrm->GetUserActionInitialization() != nullptr) { + G4VSteppingVerbose* sv = mrm->GetUserActionInitialization()->InitializeSteppingVerbose(); + if (sv != nullptr) G4VSteppingVerbose::SetInstance(sv); } // Now initialize worker part of shared objects (geometry/physics) context()->BuildGeometryAndPhysicsVector(); @@ -205,24 +194,22 @@ void G4TaskRunManagerKernel::InitializeWorker() // Step-3: Setup worker run manager //================================ // Set the detector and physics list to the worker thread. Share with master - const G4VUserDetectorConstruction* detector = - mrm->GetUserDetectorConstruction(); - wrm->G4RunManager::SetUserInitialization( - const_cast(detector)); + const G4VUserDetectorConstruction* detector = mrm->GetUserDetectorConstruction(); + wrm->G4RunManager::SetUserInitialization(const_cast(detector)); const G4VUserPhysicsList* physicslist = mrm->GetUserPhysicsList(); wrm->SetUserInitialization(const_cast(physicslist)); //================================ // Step-4: Initialize worker run manager //================================ - if(mrm->GetUserActionInitialization()) + if (mrm->GetUserActionInitialization() != nullptr) mrm->GetNonConstUserActionInitialization()->Build(); - if(mrm->GetUserWorkerInitialization()) + if (mrm->GetUserWorkerInitialization() != nullptr) mrm->GetUserWorkerInitialization()->WorkerStart(); workerRM()->Initialize(); - for(auto& itr : initCmdStack) + for (auto& itr : initCmdStack) G4UImanager::GetUIpointer()->ApplyCommand(itr); wrm->ProcessUI(); @@ -233,18 +220,15 @@ void G4TaskRunManagerKernel::InitializeWorker() void G4TaskRunManagerKernel::ExecuteWorkerInit() { // because of TBB - if(G4MTRunManager::GetMasterThreadId() == G4ThisThread::get_id()) - { - G4TaskManager* taskManager = - G4TaskRunManager::GetMasterRunManager()->GetTaskManager(); + if (G4MTRunManager::GetMasterThreadId() == G4ThisThread::get_id()) { + G4TaskManager* taskManager = G4TaskRunManager::GetMasterRunManager()->GetTaskManager(); auto _fut = taskManager->async(ExecuteWorkerInit); return _fut->get(); } // this check is for TBB as there is not a way to run an initialization // routine on each thread - if(!workerRM()) - InitializeWorker(); + if (!workerRM()) InitializeWorker(); auto& wrm = workerRM(); assert(wrm.get() != nullptr); @@ -256,18 +240,15 @@ void G4TaskRunManagerKernel::ExecuteWorkerInit() void G4TaskRunManagerKernel::ExecuteWorkerTask() { // because of TBB - if(G4MTRunManager::GetMasterThreadId() == G4ThisThread::get_id()) - { - G4TaskManager* taskManager = - G4TaskRunManager::GetMasterRunManager()->GetTaskManager(); + if (G4MTRunManager::GetMasterThreadId() == G4ThisThread::get_id()) { + G4TaskManager* taskManager = G4TaskRunManager::GetMasterRunManager()->GetTaskManager(); auto _fut = taskManager->async(ExecuteWorkerTask); return _fut->get(); } // this check is for TBB as there is not a way to run an initialization // routine on each thread - if(!workerRM()) - InitializeWorker(); + if (!workerRM()) InitializeWorker(); auto& wrm = workerRM(); assert(wrm.get() != nullptr); @@ -278,27 +259,23 @@ void G4TaskRunManagerKernel::ExecuteWorkerTask() void G4TaskRunManagerKernel::TerminateWorkerRunEventLoop() { - if(workerRM()) - TerminateWorkerRunEventLoop(workerRM().get()); + if (workerRM()) TerminateWorkerRunEventLoop(workerRM().get()); } //============================================================================// void G4TaskRunManagerKernel::TerminateWorker() { - if(workerRM()) - TerminateWorker(workerRM().get()); + if (workerRM()) TerminateWorker(workerRM().get()); workerRM().reset(); context().reset(); } //============================================================================// -void G4TaskRunManagerKernel::TerminateWorkerRunEventLoop( - G4WorkerTaskRunManager* wrm) +void G4TaskRunManagerKernel::TerminateWorkerRunEventLoop(G4WorkerTaskRunManager* wrm) { - if(!wrm) - return; + if (wrm == nullptr) return; wrm->TerminateEventLoop(); wrm->RunTermination(); @@ -308,14 +285,13 @@ void G4TaskRunManagerKernel::TerminateWorkerRunEventLoop( void G4TaskRunManagerKernel::TerminateWorker(G4WorkerTaskRunManager* wrm) { - if(!wrm) - return; + if (wrm == nullptr) return; //=============================== // Step-6: Terminate worker thread //=============================== G4TaskRunManager* mrm = G4TaskRunManager::GetMasterRunManager(); - if(mrm && mrm->GetUserWorkerInitialization()) + if ((mrm != nullptr) && (mrm->GetUserWorkerInitialization() != nullptr)) mrm->GetUserWorkerInitialization()->WorkerStop(); G4WorkerThread* _context = wrm->GetWorkerThread(); @@ -335,17 +311,13 @@ std::vector& G4TaskRunManagerKernel::InitCommandStack() void G4TaskRunManagerKernel::SetUpDecayChannels() { - G4ParticleTable::G4PTblDicIterator* pItr = - G4ParticleTable::GetParticleTable()->GetIterator(); + G4ParticleTable::G4PTblDicIterator* pItr = G4ParticleTable::GetParticleTable()->GetIterator(); pItr->reset(); - while((*pItr)()) - { + while ((*pItr)()) { G4DecayTable* dt = pItr->value()->GetDecayTable(); - if(dt) - { + if (dt != nullptr) { G4int nCh = dt->entries(); - for(G4int i = 0; i < nCh; i++) - { + for (G4int i = 0; i < nCh; i++) { dt->GetDecayChannel(i)->GetDaughter(0); } } diff --git a/source/run/src/G4UserPhysicsListMessenger.cc b/source/run/src/G4UserPhysicsListMessenger.cc index e4e3427a261..fa13281e6fc 100644 --- a/source/run/src/G4UserPhysicsListMessenger.cc +++ b/source/run/src/G4UserPhysicsListMessenger.cc @@ -24,12 +24,10 @@ // ******************************************************************** // // G4UserPhysicsListMessenger implementation -// +// // Original author: H.Kurashige, 9 January 1998 // -------------------------------------------------------------------- -#include - #include "G4UserPhysicsListMessenger.hh" #include "G4ParticleTable.hh" @@ -45,8 +43,9 @@ #include "G4VUserPhysicsList.hh" #include "G4ios.hh" -G4UserPhysicsListMessenger:: -G4UserPhysicsListMessenger(G4VUserPhysicsList* pParticleList) +#include + +G4UserPhysicsListMessenger::G4UserPhysicsListMessenger(G4VUserPhysicsList* pParticleList) : thePhysicsList(pParticleList) { G4UIparameter* param = nullptr; @@ -74,12 +73,9 @@ G4UserPhysicsListMessenger(G4VUserPhysicsList* pParticleList) setCutCmd->AvailableForStates(G4State_PreInit, G4State_Idle); // /run/setCutForAGivenParticle command - setCutForAGivenParticleCmd = - new G4UIcommand("/run/setCutForAGivenParticle", this); - setCutForAGivenParticleCmd->SetGuidance( - "Set a cut value to a specific particle "); - setCutForAGivenParticleCmd->SetGuidance( - "Usage: /run/setCutForAGivenParticle gamma 1. mm"); + setCutForAGivenParticleCmd = new G4UIcommand("/run/setCutForAGivenParticle", this); + setCutForAGivenParticleCmd->SetGuidance("Set a cut value to a specific particle "); + setCutForAGivenParticleCmd->SetGuidance("Usage: /run/setCutForAGivenParticle gamma 1. mm"); param = new G4UIparameter("particleName", 's', false); param->SetParameterCandidates("e- e+ gamma proton"); setCutForAGivenParticleCmd->SetParameter(param); @@ -93,16 +89,13 @@ G4UserPhysicsListMessenger(G4VUserPhysicsList* pParticleList) setCutForAGivenParticleCmd->AvailableForStates(G4State_PreInit, G4State_Idle); // /run/getCutForAGivenParticle command - getCutForAGivenParticleCmd = - new G4UIcmdWithAString("/run/getCutForAGivenParticle", this); - getCutForAGivenParticleCmd->SetGuidance( - "Get a cut value to a specific particle "); - getCutForAGivenParticleCmd->SetGuidance( - "Usage: /run/getCutForAGivenParticle gamma "); + getCutForAGivenParticleCmd = new G4UIcmdWithAString("/run/getCutForAGivenParticle", this); + getCutForAGivenParticleCmd->SetGuidance("Get a cut value to a specific particle "); + getCutForAGivenParticleCmd->SetGuidance("Usage: /run/getCutForAGivenParticle gamma "); getCutForAGivenParticleCmd->SetParameterName("particleName", false, false); getCutForAGivenParticleCmd->SetCandidates("e- e+ gamma proton"); - getCutForAGivenParticleCmd->AvailableForStates( - G4State_PreInit, G4State_Idle, G4State_GeomClosed, G4State_EventProc); + getCutForAGivenParticleCmd->AvailableForStates(G4State_PreInit, G4State_Idle, G4State_GeomClosed, + G4State_EventProc); // /run/setCutForRegion command setCutRCmd = new G4UIcommand("/run/setCutForRegion", this); @@ -114,8 +107,7 @@ G4UserPhysicsListMessenger(G4VUserPhysicsList* pParticleList) setCutRCmd->SetParameter(param); param = new G4UIparameter("Unit", 's', true); param->SetDefaultValue("mm"); - param->SetParameterCandidates( - setCutRCmd->UnitsList(setCutRCmd->CategoryOf("mm"))); + param->SetParameterCandidates(setCutRCmd->UnitsList(setCutRCmd->CategoryOf("mm"))); setCutRCmd->SetParameter(param); setCutRCmd->AvailableForStates(G4State_Idle); @@ -129,16 +121,15 @@ G4UserPhysicsListMessenger(G4VUserPhysicsList* pParticleList) addProcManCmd->SetGuidance("add process manager to specified particle type"); addProcManCmd->SetParameterName("particleType", true); addProcManCmd->SetDefaultValue(""); - addProcManCmd->AvailableForStates(G4State_PreInit, G4State_Init, G4State_Idle, - G4State_GeomClosed, G4State_EventProc); + addProcManCmd->AvailableForStates(G4State_PreInit, G4State_Init, G4State_Idle, G4State_GeomClosed, + G4State_EventProc); // /run/particle/buildPhysicsTable command buildPTCmd = new G4UIcmdWithAString("/run/particle/buildPhysicsTable", this); buildPTCmd->SetGuidance("build physics table of specified particle type"); buildPTCmd->SetParameterName("particleType", true); buildPTCmd->SetDefaultValue(""); - buildPTCmd->AvailableForStates(G4State_Init, G4State_Idle, G4State_GeomClosed, - G4State_EventProc); + buildPTCmd->AvailableForStates(G4State_Init, G4State_Idle, G4State_GeomClosed, G4State_EventProc); // /run/particle/storePhysicsTable command storeCmd = new G4UIcmdWithAString("/run/particle/storePhysicsTable", this); @@ -149,8 +140,7 @@ G4UserPhysicsListMessenger(G4VUserPhysicsList* pParticleList) storeCmd->AvailableForStates(G4State_Idle); // /run/particle/retrievePhysicsTable command - retrieveCmd = - new G4UIcmdWithAString("/run/particle/retrievePhysicsTable", this); + retrieveCmd = new G4UIcmdWithAString("/run/particle/retrievePhysicsTable", this); retrieveCmd->SetGuidance("Retrieve Physics Table"); retrieveCmd->SetGuidance(" Enter directory name or OFF to switch off"); retrieveCmd->SetParameterName("dirName", true); @@ -159,8 +149,7 @@ G4UserPhysicsListMessenger(G4VUserPhysicsList* pParticleList) // /run/particle/setStoredInAscii command asciiCmd = new G4UIcmdWithAnInteger("/run/particle/setStoredInAscii", this); - asciiCmd->SetGuidance( - "Switch on/off ascii mode in store/retrieve Physics Table"); + asciiCmd->SetGuidance("Switch on/off ascii mode in store/retrieve Physics Table"); asciiCmd->SetGuidance(" Enter 0(binary) or 1(ascii)"); asciiCmd->SetParameterName("ascii", true); asciiCmd->SetDefaultValue(0); @@ -170,26 +159,17 @@ G4UserPhysicsListMessenger(G4VUserPhysicsList* pParticleList) // Commnad /run/particle/applyCuts command applyCutsCmd = new G4UIcommand("/run/particle/applyCuts", this); applyCutsCmd->SetGuidance("Set applyCuts flag for a particle."); - applyCutsCmd->SetGuidance( - " Some EM processes which do not have infrared divergence"); - applyCutsCmd->SetGuidance( - "may generate gamma, e- and/or e+ with kinetic energies"); - applyCutsCmd->SetGuidance( - "below the production threshold. By setting this flag,"); - applyCutsCmd->SetGuidance( - "such secondaries below threshold are eliminated and"); - applyCutsCmd->SetGuidance( - "kinetic energies of such secondaries are accumulated"); + applyCutsCmd->SetGuidance(" Some EM processes which do not have infrared divergence"); + applyCutsCmd->SetGuidance("may generate gamma, e- and/or e+ with kinetic energies"); + applyCutsCmd->SetGuidance("below the production threshold. By setting this flag,"); + applyCutsCmd->SetGuidance("such secondaries below threshold are eliminated and"); + applyCutsCmd->SetGuidance("kinetic energies of such secondaries are accumulated"); applyCutsCmd->SetGuidance("to the energy deposition of their mother."); - applyCutsCmd->SetGuidance( - " Note that 'applyCuts' makes sense only for gamma,"); - applyCutsCmd->SetGuidance( - "e- and e+. If this command is issued for other particle,"); - applyCutsCmd->SetGuidance( - "a warning message is displayed and the command is"); + applyCutsCmd->SetGuidance(" Note that 'applyCuts' makes sense only for gamma,"); + applyCutsCmd->SetGuidance("e- and e+. If this command is issued for other particle,"); + applyCutsCmd->SetGuidance("a warning message is displayed and the command is"); applyCutsCmd->SetGuidance("ignored."); - applyCutsCmd->SetGuidance( - " If particle name is 'all', this command affects on"); + applyCutsCmd->SetGuidance(" If particle name is 'all', this command affects on"); applyCutsCmd->SetGuidance("gamma, e- and e+."); param = new G4UIparameter("Flag", 's', true); param->SetDefaultValue("true"); @@ -200,19 +180,14 @@ G4UserPhysicsListMessenger(G4VUserPhysicsList* pParticleList) applyCutsCmd->AvailableForStates(G4State_PreInit, G4State_Init, G4State_Idle); // /run/particle/dumpCutValues command - dumpCutValuesCmd = - new G4UIcmdWithAString("/run/particle/dumpCutValues", this); - dumpCutValuesCmd->SetGuidance( - "Dump a list of production threshold values in range and energy"); + dumpCutValuesCmd = new G4UIcmdWithAString("/run/particle/dumpCutValues", this); + dumpCutValuesCmd->SetGuidance("Dump a list of production threshold values in range and energy"); dumpCutValuesCmd->SetGuidance("for all registered material-cuts-couples."); - dumpCutValuesCmd->SetGuidance( - "Dumping a list takes place when you issue 'beamOn' and"); - dumpCutValuesCmd->SetGuidance( - "actual conversion tables from range to energy are available."); + dumpCutValuesCmd->SetGuidance("Dumping a list takes place when you issue 'beamOn' and"); + dumpCutValuesCmd->SetGuidance("actual conversion tables from range to energy are available."); dumpCutValuesCmd->SetGuidance( "If you want a list 'immediately', use '/run/dumpRegion' for threshold"); - dumpCutValuesCmd->SetGuidance( - "list given in range only. Also, '/run/dumpCouples' gives you the"); + dumpCutValuesCmd->SetGuidance("list given in range only. Also, '/run/dumpCouples' gives you the"); dumpCutValuesCmd->SetGuidance( "current list if you have already issued 'run/beamOn' at least once."); dumpCutValuesCmd->SetParameterName("particle", true); @@ -220,13 +195,11 @@ G4UserPhysicsListMessenger(G4VUserPhysicsList* pParticleList) dumpCutValuesCmd->AvailableForStates(G4State_Idle); // /run/particle/dumpCutValues command - dumpOrdParamCmd = - new G4UIcmdWithAnInteger("/run/particle/dumpOrderingParam", this); + dumpOrdParamCmd = new G4UIcmdWithAnInteger("/run/particle/dumpOrderingParam", this); dumpOrdParamCmd->SetGuidance("Dump a list of ordering parameter "); dumpOrdParamCmd->SetParameterName("subtype", true); dumpOrdParamCmd->SetDefaultValue(-1); - dumpOrdParamCmd->AvailableForStates(G4State_PreInit, G4State_Init, - G4State_Idle); + dumpOrdParamCmd->AvailableForStates(G4State_PreInit, G4State_Init, G4State_Idle); } // -------------------------------------------------------------------- @@ -250,82 +223,64 @@ G4UserPhysicsListMessenger::~G4UserPhysicsListMessenger() } // -------------------------------------------------------------------- -void G4UserPhysicsListMessenger::SetNewValue(G4UIcommand* command, - G4String newValue) +void G4UserPhysicsListMessenger::SetNewValue(G4UIcommand* command, G4String newValue) { G4ExceptionDescription ed; - if(command == setCutCmd) - { + if (command == setCutCmd) { G4double newCut = setCutCmd->GetNewDoubleValue(newValue); thePhysicsList->SetDefaultCutValue(newCut); thePhysicsList->SetCuts(); } - else if(command == setCutForAGivenParticleCmd) - { + else if (command == setCutForAGivenParticleCmd) { G4String particleName, unit; G4double cut; std::istringstream str(newValue); str >> particleName >> cut >> unit; thePhysicsList->SetCutValue(cut * G4UIcommand::ValueOf(unit), particleName); } - else if(command == getCutForAGivenParticleCmd) - { + else if (command == getCutForAGivenParticleCmd) { G4cout << thePhysicsList->GetCutValue(newValue) / mm << "[mm]" << G4endl; } - else if(command == setCutRCmd) - { + else if (command == setCutRCmd) { std::istringstream is(newValue); G4String regName; G4String uniName; G4double cVal = -1.0; is >> regName >> cVal >> uniName; - if(is.fail()) - { + if (is.fail()) { ed << "illegal arguments : " << newValue; command->CommandFailed(ed); return; } - thePhysicsList->SetCutsForRegion(cVal * (setCutRCmd->ValueOf(uniName)), - regName); + thePhysicsList->SetCutsForRegion(cVal * (setCutRCmd->ValueOf(uniName)), regName); } - else if(command == verboseCmd) - { + else if (command == verboseCmd) { thePhysicsList->SetVerboseLevel(verboseCmd->GetNewIntValue(newValue)); } - else if(command == dumpListCmd) - { + else if (command == dumpListCmd) { thePhysicsList->DumpList(); } - else if(command == dumpOrdParamCmd) - { + else if (command == dumpOrdParamCmd) { G4int stype = dumpOrdParamCmd->GetNewIntValue(newValue); - G4PhysicsListHelper::GetPhysicsListHelper()->DumpOrdingParameterTable( - stype); + G4PhysicsListHelper::GetPhysicsListHelper()->DumpOrdingParameterTable(stype); } - else if(command == addProcManCmd) - { - G4ParticleDefinition* particle = - (G4ParticleTable::GetParticleTable())->FindParticle(newValue); - if(particle == nullptr) - { + else if (command == addProcManCmd) { + G4ParticleDefinition* particle = (G4ParticleTable::GetParticleTable())->FindParticle(newValue); + if (particle == nullptr) { ed << " Particle is not found : " << newValue; command->CommandFailed(ed); return; } - else if(particle->GetProcessManager() != nullptr) - { + if (particle->GetProcessManager() != nullptr) { ed << " Particle is not initialized : " << newValue; command->CommandFailed(ed); return; } thePhysicsList->AddProcessManager(particle); } - else if(command == buildPTCmd) - { - G4ParticleDefinition* particle = - (G4ParticleTable::GetParticleTable())->FindParticle(newValue); - if(particle == nullptr) - { + else if (command == buildPTCmd) { + G4ParticleDefinition* particle = (G4ParticleTable::GetParticleTable())->FindParticle(newValue); + if (particle == nullptr) { ed << " Particle is not found : " << newValue; command->CommandFailed(ed); return; @@ -333,47 +288,38 @@ void G4UserPhysicsListMessenger::SetNewValue(G4UIcommand* command, thePhysicsList->PreparePhysicsTable(particle); thePhysicsList->BuildPhysicsTable(particle); } - else if(command == storeCmd) - { + else if (command == storeCmd) { thePhysicsList->StorePhysicsTable(newValue); } - else if(command == retrieveCmd) - { - if((newValue == "OFF") || (newValue == "off")) - { + else if (command == retrieveCmd) { + if ((newValue == "OFF") || (newValue == "off")) { thePhysicsList->ResetPhysicsTableRetrieved(); } - else - { + else { thePhysicsList->SetPhysicsTableRetrieved(newValue); } } - else if(command == asciiCmd) - { - if(asciiCmd->GetNewIntValue(newValue) == 0) - { + else if (command == asciiCmd) { + if (asciiCmd->GetNewIntValue(newValue) == 0) { thePhysicsList->ResetStoredInAscii(); } - else - { + else { thePhysicsList->SetStoredInAscii(); } } - else if(command == applyCutsCmd) - { + else if (command == applyCutsCmd) { G4Tokenizer next(newValue); // check 1st argument G4String temp = G4String(next()); - G4bool flag = (temp == "true" || temp == "TRUE"); + G4bool flag = (temp == "true" || temp == "TRUE"); // check 2nd argument G4String name = G4String(next()); thePhysicsList->SetApplyCuts(flag, name); } - else if(command == dumpCutValuesCmd) - { + else if (command == dumpCutValuesCmd) { thePhysicsList->DumpCutValuesTable(1); } } @@ -385,61 +331,48 @@ G4String G4UserPhysicsListMessenger::GetCurrentValue(G4UIcommand* command) G4String candidates("none"); auto piter = G4ParticleTable::GetParticleTable()->GetIterator(); - if(command == setCutCmd) - { + if (command == setCutCmd) { cv = setCutCmd->ConvertToString(thePhysicsList->GetDefaultCutValue(), "mm"); } - else if(command == verboseCmd) - { + else if (command == verboseCmd) { cv = verboseCmd->ConvertToString(thePhysicsList->GetVerboseLevel()); } - else if(command == addProcManCmd) - { + else if (command == addProcManCmd) { // set candidate list piter->reset(); - while((*piter)()) - { + while ((*piter)()) { G4ParticleDefinition* particle = piter->value(); candidates += " " + particle->GetParticleName(); } addProcManCmd->SetCandidates(candidates); cv = ""; } - else if(command == buildPTCmd) - { + else if (command == buildPTCmd) { // set candidate list piter->reset(); - while((*piter)()) - { + while ((*piter)()) { G4ParticleDefinition* particle = piter->value(); candidates += " " + particle->GetParticleName(); } addProcManCmd->SetCandidates(candidates); cv = ""; } - else if(command == storeCmd) - { + else if (command == storeCmd) { cv = thePhysicsList->GetPhysicsTableDirectory(); } - else if(command == retrieveCmd) - { - if(thePhysicsList->IsPhysicsTableRetrieved()) - { + else if (command == retrieveCmd) { + if (thePhysicsList->IsPhysicsTableRetrieved()) { cv = thePhysicsList->GetPhysicsTableDirectory(); } - else - { + else { cv = "OFF"; } } - else if(command == asciiCmd) - { - if(thePhysicsList->IsStoredInAscii()) - { + else if (command == asciiCmd) { + if (thePhysicsList->IsStoredInAscii()) { cv = "1"; } - else - { + else { cv = "0"; } } diff --git a/source/run/src/G4UserRunAction.cc b/source/run/src/G4UserRunAction.cc index 1c4a2d8e5bc..6f1e28503b0 100644 --- a/source/run/src/G4UserRunAction.cc +++ b/source/run/src/G4UserRunAction.cc @@ -28,48 +28,24 @@ // Original author: M.Asai, 1998 // -------------------------------------------------------------------- -#include "globals.hh" #include "G4UserRunAction.hh" + #include "G4ParticleTable.hh" +#include "globals.hh" // -------------------------------------------------------------------- G4UserRunAction::G4UserRunAction() { - if(!(G4ParticleTable::GetParticleTable()->GetReadiness())) - { + if (!(G4ParticleTable::GetParticleTable()->GetReadiness())) { G4String msg; - msg = " You are instantiating G4UserRunAction BEFORE your " - "G4VUserPhysicsList is\n"; + msg = + " You are instantiating G4UserRunAction BEFORE your " + "G4VUserPhysicsList is\n"; msg += "instantiated and assigned to G4RunManager.\n"; - msg += - " Such an instantiation is prohibited. To fix this problem,\n"; - msg += - "please make sure that your main() instantiates G4VUserPhysicsList AND\n"; - msg += - "set it to G4RunManager before instantiating other user action classes\n"; + msg += " Such an instantiation is prohibited. To fix this problem,\n"; + msg += "please make sure that your main() instantiates G4VUserPhysicsList AND\n"; + msg += "set it to G4RunManager before instantiating other user action classes\n"; msg += "such as G4UserRunAction."; - G4Exception("G4UserRunAction::G4UserRunAction()", "Run0041", - FatalException, msg); + G4Exception("G4UserRunAction::G4UserRunAction()", "Run0041", FatalException, msg); } } - -// -------------------------------------------------------------------- -G4UserRunAction::~G4UserRunAction() -{ -} - -// -------------------------------------------------------------------- -G4Run* G4UserRunAction::GenerateRun() -{ - return nullptr; -} - -// -------------------------------------------------------------------- -void G4UserRunAction::BeginOfRunAction(const G4Run*) -{ -} - -// -------------------------------------------------------------------- -void G4UserRunAction::EndOfRunAction(const G4Run*) -{ -} diff --git a/source/run/src/G4UserTaskInitialization.cc b/source/run/src/G4UserTaskInitialization.cc deleted file mode 100644 index db064b830f2..00000000000 --- a/source/run/src/G4UserTaskInitialization.cc +++ /dev/null @@ -1,36 +0,0 @@ -// -// ******************************************************************** -// * 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. * -// ******************************************************************** -// - -#include "G4UserTaskInitialization.hh" - -G4UserTaskInitialization::G4UserTaskInitialization() {} -G4UserTaskInitialization::~G4UserTaskInitialization() {} - -void G4UserTaskInitialization::WorkerInitialize() const {} -void G4UserTaskInitialization::WorkerStart() const {} -void G4UserTaskInitialization::WorkerRunStart() const {} -void G4UserTaskInitialization::WorkerRunEnd() const {} -void G4UserTaskInitialization::WorkerStop() const {} diff --git a/source/run/src/G4UserTaskThreadInitialization.cc b/source/run/src/G4UserTaskThreadInitialization.cc index 31ea1631119..589ed949117 100644 --- a/source/run/src/G4UserTaskThreadInitialization.cc +++ b/source/run/src/G4UserTaskThreadInitialization.cc @@ -25,6 +25,7 @@ // #include "G4UserTaskThreadInitialization.hh" + #include "G4AutoLock.hh" #include "G4TaskRunManagerKernel.hh" #include "G4UImanager.hh" @@ -34,13 +35,14 @@ #include "G4WorkerTaskRunManager.hh" #include "G4WorkerThread.hh" #include "globals.hh" + #include //============================================================================// namespace { - G4Mutex rngCreateMutex; +G4Mutex rngCreateMutex; } //============================================================================// @@ -57,24 +59,14 @@ G4Thread* G4UserTaskThreadInitialization::CreateAndStartWorker(G4WorkerThread*) // Avoid compilation warning in sequential void G4UserTaskThreadInitialization::JoinWorker(G4Thread* aThread) { - if(aThread) - { + if (aThread != nullptr) { G4THREADJOIN(*aThread); } } //============================================================================// -G4UserTaskThreadInitialization::G4UserTaskThreadInitialization() {} - -//============================================================================// - -G4UserTaskThreadInitialization::~G4UserTaskThreadInitialization() {} - -//============================================================================// - -void G4UserTaskThreadInitialization::SetupRNGEngine( - const CLHEP::HepRandomEngine* aNewRNG) const +void G4UserTaskThreadInitialization::SetupRNGEngine(const CLHEP::HepRandomEngine* aNewRNG) const { G4AutoLock l(&rngCreateMutex); // No default available, let's create the instance of random stuff @@ -84,45 +76,40 @@ void G4UserTaskThreadInitialization::SetupRNGEngine( CLHEP::HepRandomEngine* retRNG = nullptr; // Need to make these calls thread safe - if(dynamic_cast(aNewRNG)) + if (dynamic_cast(aNewRNG) != nullptr) retRNG = new CLHEP::HepJamesRandom; - if(dynamic_cast(aNewRNG)) - retRNG = new CLHEP::MixMaxRng; - if(dynamic_cast(aNewRNG)) + if (dynamic_cast(aNewRNG) != nullptr) retRNG = new CLHEP::MixMaxRng; + if (dynamic_cast(aNewRNG) != nullptr) retRNG = new CLHEP::RanecuEngine; - if(dynamic_cast(aNewRNG)) + if (dynamic_cast(aNewRNG) != nullptr) retRNG = new CLHEP::Ranlux64Engine; - if(dynamic_cast(aNewRNG)) + if (dynamic_cast(aNewRNG) != nullptr) retRNG = new CLHEP::RanluxppEngine; - if(dynamic_cast(aNewRNG)) + if (dynamic_cast(aNewRNG) != nullptr) retRNG = new CLHEP::MTwistEngine; - if(dynamic_cast(aNewRNG)) - retRNG = new CLHEP::DualRand; - if(dynamic_cast(aNewRNG)) + if (dynamic_cast(aNewRNG) != nullptr) retRNG = new CLHEP::DualRand; + if (dynamic_cast(aNewRNG) != nullptr) retRNG = new CLHEP::RanluxEngine; - if(dynamic_cast(aNewRNG)) + if (dynamic_cast(aNewRNG) != nullptr) retRNG = new CLHEP::RanshiEngine; - if(retRNG != nullptr) + if (retRNG != nullptr) G4Random::setTheEngine(retRNG); - else - { + else { // Does a new method, such as aNewRng->newEngine() exist to clone it ? G4ExceptionDescription msg; msg << " Unknown type of RNG Engine - " << G4endl << " Can cope only with HepJamesRandom, MixMaxRng, Ranecu, Ranlux64," << " Ranlux++, MTwistEngine, DualRand, Ranlux or Ranshi." << G4endl - << " Cannot clone this type of RNG engine, as required for this thread" - << G4endl << " Aborting... " << G4endl; - G4Exception("G4UserTaskInitializition::SetupRNGEngine()", "Run0122", - FatalException, msg); + << " Cannot clone this type of RNG engine, as required for this thread" << G4endl + << " Aborting... " << G4endl; + G4Exception("G4UserTaskInitializition::SetupRNGEngine()", "Run0122", FatalException, msg); } } //============================================================================// -G4WorkerRunManager* G4UserTaskThreadInitialization::CreateWorkerRunManager() - const +G4WorkerRunManager* G4UserTaskThreadInitialization::CreateWorkerRunManager() const { return new G4WorkerTaskRunManager(); } diff --git a/source/run/src/G4UserWorkerThreadInitialization.cc b/source/run/src/G4UserWorkerThreadInitialization.cc index f76c5a915a9..dff6227bb40 100644 --- a/source/run/src/G4UserWorkerThreadInitialization.cc +++ b/source/run/src/G4UserWorkerThreadInitialization.cc @@ -28,9 +28,8 @@ // Authors: M.Asai, A.Dotti (SLAC), 16 September 2013 // -------------------------------------------------------------------- -#include - #include "G4UserWorkerThreadInitialization.hh" + #include "G4AutoLock.hh" #include "G4MTRunManagerKernel.hh" #include "G4UImanager.hh" @@ -39,27 +38,21 @@ #include "G4WorkerRunManager.hh" #include "G4WorkerThread.hh" -// Will need this for TPMalloc -//#ifdef G4MULTITHREADED -//#define TPMALLOCDEFINESTUB -//#include "tpmalloc/tpmallocstub.h" -//#endif +#include // -------------------------------------------------------------------- #ifdef G4MULTITHREADED -G4Thread* G4UserWorkerThreadInitialization:: -CreateAndStartWorker(G4WorkerThread* wTC) +G4Thread* G4UserWorkerThreadInitialization::CreateAndStartWorker(G4WorkerThread* wTC) { // Note: this method is called by G4MTRunManager, // here we are still sequential. // Create a new thread/worker structure - G4Thread* worker = new G4Thread; + auto worker = new G4Thread; G4THREADCREATE(worker, &G4MTRunManagerKernel::StartThread, wTC); return worker; } #else -G4Thread* G4UserWorkerThreadInitialization:: -CreateAndStartWorker(G4WorkerThread*) +G4Thread* G4UserWorkerThreadInitialization::CreateAndStartWorker(G4WorkerThread*) { return new G4Thread; } @@ -72,30 +65,17 @@ void G4UserWorkerThreadInitialization::JoinWorker(G4Thread* aThread) G4THREADJOIN(*aThread); } #else // Avoid compilation warning in sequential -void G4UserWorkerThreadInitialization::JoinWorker(G4Thread*) -{ -} +void G4UserWorkerThreadInitialization::JoinWorker(G4Thread*) {} #endif -// -------------------------------------------------------------------- -G4UserWorkerThreadInitialization::G4UserWorkerThreadInitialization() -{ -} - -// -------------------------------------------------------------------- -G4UserWorkerThreadInitialization::~G4UserWorkerThreadInitialization() -{ -} - // -------------------------------------------------------------------- namespace { - G4Mutex rngCreateMutex = G4MUTEX_INITIALIZER; +G4Mutex rngCreateMutex = G4MUTEX_INITIALIZER; } // -------------------------------------------------------------------- -void G4UserWorkerThreadInitialization:: -SetupRNGEngine(const CLHEP::HepRandomEngine* aNewRNG) const +void G4UserWorkerThreadInitialization::SetupRNGEngine(const CLHEP::HepRandomEngine* aNewRNG) const { G4AutoLock l(&rngCreateMutex); // No default available, let's create the instance of random stuff @@ -105,68 +85,54 @@ SetupRNGEngine(const CLHEP::HepRandomEngine* aNewRNG) const CLHEP::HepRandomEngine* retRNG = nullptr; // Need to make these calls thread safe - if(dynamic_cast(aNewRNG)) - { + if (dynamic_cast(aNewRNG) != nullptr) { retRNG = new CLHEP::HepJamesRandom; } - if(dynamic_cast(aNewRNG)) - { + if (dynamic_cast(aNewRNG) != nullptr) { retRNG = new CLHEP::MixMaxRng; } - if(dynamic_cast(aNewRNG)) - { + if (dynamic_cast(aNewRNG) != nullptr) { retRNG = new CLHEP::RanecuEngine; } - if(dynamic_cast(aNewRNG)) - { + if (dynamic_cast(aNewRNG) != nullptr) { retRNG = new CLHEP::RanluxppEngine; } - if(dynamic_cast(aNewRNG)) - { - const CLHEP::Ranlux64Engine* theRNG = - dynamic_cast(aNewRNG); + if (dynamic_cast(aNewRNG) != nullptr) { + const auto theRNG = dynamic_cast(aNewRNG); retRNG = new CLHEP::Ranlux64Engine(123, theRNG->getLuxury()); } - if(dynamic_cast(aNewRNG)) - { + if (dynamic_cast(aNewRNG) != nullptr) { retRNG = new CLHEP::MTwistEngine; } - if(dynamic_cast(aNewRNG)) - { + if (dynamic_cast(aNewRNG) != nullptr) { retRNG = new CLHEP::DualRand; } - if(dynamic_cast(aNewRNG)) - { - const CLHEP::RanluxEngine* theRNG = - dynamic_cast(aNewRNG); + if (dynamic_cast(aNewRNG) != nullptr) { + const auto theRNG = dynamic_cast(aNewRNG); retRNG = new CLHEP::RanluxEngine(123, theRNG->getLuxury()); } - if(dynamic_cast(aNewRNG)) - { + if (dynamic_cast(aNewRNG) != nullptr) { retRNG = new CLHEP::RanshiEngine; } - if(retRNG != nullptr) - { + if (retRNG != nullptr) { G4Random::setTheEngine(retRNG); } - else - { + else { // Does a new method, such as aNewRng->newEngine() exist to clone it ? G4ExceptionDescription msg; msg << " Unknown type of RNG Engine - " << G4endl << " Can cope only with HepJamesRandom, MixMaxRng, Ranecu, Ranlux64," << " Ranlux++, MTwistEngine, DualRand, Ranlux or Ranshi." << G4endl - << " Cannot clone this type of RNG engine, as required for this thread" - << G4endl << " Aborting " << G4endl; - G4Exception("G4UserWorkerThreadInitialization::SetupRNGEngine()", - "Run0122", FatalException, msg); + << " Cannot clone this type of RNG engine, as required for this thread" << G4endl + << " Aborting " << G4endl; + G4Exception("G4UserWorkerThreadInitialization::SetupRNGEngine()", "Run0122", FatalException, + msg); } } // -------------------------------------------------------------------- -G4WorkerRunManager* -G4UserWorkerThreadInitialization::CreateWorkerRunManager() const +G4WorkerRunManager* G4UserWorkerThreadInitialization::CreateWorkerRunManager() const { return new G4WorkerRunManager(); } diff --git a/source/run/src/G4VModularPhysicsList.cc b/source/run/src/G4VModularPhysicsList.cc index bec4b16779b..3c08714aec8 100644 --- a/source/run/src/G4VModularPhysicsList.cc +++ b/source/run/src/G4VModularPhysicsList.cc @@ -28,15 +28,15 @@ // Original author: H.Kurashige (Kobe University), 12 November 2000 // -------------------------------------------------------------------- -#include - #include "G4VModularPhysicsList.hh" + #include "G4StateManager.hh" +#include + // This macros change the references to fields that are now encapsulated // in the class G4VMPLData. -#define G4MT_physicsVector \ - ((G4VMPLsubInstanceManager.offset[g4vmplInstanceID]).physicsVector) +#define G4MT_physicsVector ((G4VMPLsubInstanceManager.offset[g4vmplInstanceID]).physicsVector) G4VMPLManager G4VModularPhysicsList::G4VMPLsubInstanceManager; @@ -48,7 +48,6 @@ void G4VMPLData::initialize() // -------------------------------------------------------------------- G4VModularPhysicsList::G4VModularPhysicsList() - : G4VUserPhysicsList() { g4vmplInstanceID = G4VMPLsubInstanceManager.CreateSubInstance(); } @@ -56,9 +55,10 @@ G4VModularPhysicsList::G4VModularPhysicsList() // -------------------------------------------------------------------- G4VModularPhysicsList::~G4VModularPhysicsList() { - if(G4MT_physicsVector != nullptr) - { - for(auto & ptr : *G4MT_physicsVector) { delete ptr; } + if (G4MT_physicsVector != nullptr) { + for (auto& ptr : *G4MT_physicsVector) { + delete ptr; + } delete G4MT_physicsVector; G4MT_physicsVector = nullptr; } @@ -73,34 +73,33 @@ G4VModularPhysicsList::G4VModularPhysicsList(const G4VModularPhysicsList& right) } // -------------------------------------------------------------------- -G4VModularPhysicsList& G4VModularPhysicsList::operator=( - const G4VModularPhysicsList& right) +G4VModularPhysicsList& G4VModularPhysicsList::operator=(const G4VModularPhysicsList& right) { - if(this != &right) - { - defaultCutValue = right.defaultCutValue; - isSetDefaultCutValue = right.isSetDefaultCutValue; - fRetrievePhysicsTable = right.fRetrievePhysicsTable; - fStoredInAscii = right.fStoredInAscii; + if (this != &right) { + defaultCutValue = right.defaultCutValue; + isSetDefaultCutValue = right.isSetDefaultCutValue; + fRetrievePhysicsTable = right.fRetrievePhysicsTable; + fStoredInAscii = right.fStoredInAscii; fIsCheckedForRetrievePhysicsTable = right.fIsCheckedForRetrievePhysicsTable; - fIsRestoredCutValues = right.fIsRestoredCutValues; - directoryPhysicsTable = right.directoryPhysicsTable; - (this->subInstanceManager.offset[this->g4vuplInstanceID]) - ._fDisplayThreshold = static_cast(right) - .GetSubInstanceManager() - .offset[right.GetInstanceID()] - ._fDisplayThreshold; - (this->subInstanceManager.offset[this->g4vuplInstanceID]) - ._fDisplayThreshold = static_cast(right) - .GetSubInstanceManager() - .offset[right.GetInstanceID()] - ._fIsPhysicsTableBuilt; + fIsRestoredCutValues = right.fIsRestoredCutValues; + directoryPhysicsTable = right.directoryPhysicsTable; + (this->subInstanceManager.offset[this->g4vuplInstanceID])._fDisplayThreshold = + static_cast(right) + .GetSubInstanceManager() + .offset[right.GetInstanceID()] + ._fDisplayThreshold; + (this->subInstanceManager.offset[this->g4vuplInstanceID])._fDisplayThreshold = + static_cast(static_cast(right) + .GetSubInstanceManager() + .offset[right.GetInstanceID()] + ._fIsPhysicsTableBuilt); fDisableCheckParticleList = right.fDisableCheckParticleList; - verboseLevel = right.verboseLevel; + verboseLevel = right.verboseLevel; - if(G4MT_physicsVector != nullptr) - { - for(auto & ptr : *G4MT_physicsVector) { delete ptr; } + if (G4MT_physicsVector != nullptr) { + for (auto& ptr : *G4MT_physicsVector) { + delete ptr; + } delete G4MT_physicsVector; G4MT_physicsVector = nullptr; } @@ -113,9 +112,7 @@ G4VModularPhysicsList& G4VModularPhysicsList::operator=( void G4VModularPhysicsList::ConstructParticle() { // create particles - for(auto itr = G4MT_physicsVector->cbegin(); - itr != G4MT_physicsVector->cend(); ++itr) - { + for (auto itr = G4MT_physicsVector->cbegin(); itr != G4MT_physicsVector->cend(); ++itr) { (*itr)->ConstructParticle(); } } @@ -130,7 +127,7 @@ void G4VModularPhysicsList::ConstructParticle() #include "G4AutoLock.hh" namespace { - G4Mutex constructProcessMutex = G4MUTEX_INITIALIZER; +G4Mutex constructProcessMutex = G4MUTEX_INITIALIZER; } // -------------------------------------------------------------------- @@ -139,9 +136,7 @@ void G4VModularPhysicsList::ConstructProcess() G4AutoLock l(&constructProcessMutex); // Protection to be removed (A.Dotti) AddTransportation(); - for(auto itr = G4MT_physicsVector->cbegin(); - itr != G4MT_physicsVector->cend(); ++itr) - { + for (auto itr = G4MT_physicsVector->cbegin(); itr != G4MT_physicsVector->cend(); ++itr) { (*itr)->ConstructProcess(); } } @@ -149,29 +144,25 @@ void G4VModularPhysicsList::ConstructProcess() // -------------------------------------------------------------------- void G4VModularPhysicsList::RegisterPhysics(G4VPhysicsConstructor* fPhysics) { - G4StateManager* stateManager = G4StateManager::GetStateManager(); + G4StateManager* stateManager = G4StateManager::GetStateManager(); G4ApplicationState currentState = stateManager->GetCurrentState(); - if(!(currentState == G4State_PreInit)) - { - G4Exception("G4VModularPhysicsList::RegisterPhysics", "Run0201", - JustWarning, + if (!(currentState == G4State_PreInit)) { + G4Exception("G4VModularPhysicsList::RegisterPhysics", "Run0201", JustWarning, "Geant4 kernel is not PreInit state : Method ignored."); return; } G4String pName = fPhysics->GetPhysicsName(); - G4int pType = fPhysics->GetPhysicsType(); + G4int pType = fPhysics->GetPhysicsType(); // If physics_type is equal to 0, // following duplication check is omitted // This is TEMPORAL treatment. - if(pType == 0) - { + if (pType == 0) { G4MT_physicsVector->push_back(fPhysics); #ifdef G4VERBOSE - if(verboseLevel > 1) - { - G4cout << "G4VModularPhysicsList::RegisterPhysics: " << pName - << " with type : " << pType << " is added" << G4endl; + if (verboseLevel > 1) { + G4cout << "G4VModularPhysicsList::RegisterPhysics: " << pName << " with type : " << pType + << " is added" << G4endl; } #endif return; @@ -179,16 +170,12 @@ void G4VModularPhysicsList::RegisterPhysics(G4VPhysicsConstructor* fPhysics) // Check if physics with the physics_type same as one of given physics auto itr = G4MT_physicsVector->cbegin(); - for(; itr != G4MT_physicsVector->cend(); ++itr) - { - if(pType == (*itr)->GetPhysicsType()) - break; + for (; itr != G4MT_physicsVector->cend(); ++itr) { + if (pType == (*itr)->GetPhysicsType()) break; } - if(itr != G4MT_physicsVector->cend()) - { + if (itr != G4MT_physicsVector->cend()) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4VModularPhysicsList::RegisterPhysics: " << "a physics with given type already exists " << G4endl; G4cout << " Type = " << pType << " : " @@ -198,8 +185,7 @@ void G4VModularPhysicsList::RegisterPhysics(G4VPhysicsConstructor* fPhysics) #endif G4String comment = "Duplicate type for "; comment += pName; - G4Exception("G4VModularPhysicsList::RegisterPhysics", "Run0202", - JustWarning, comment); + G4Exception("G4VModularPhysicsList::RegisterPhysics", "Run0202", JustWarning, comment); return; } @@ -210,29 +196,26 @@ void G4VModularPhysicsList::RegisterPhysics(G4VPhysicsConstructor* fPhysics) // -------------------------------------------------------------------- void G4VModularPhysicsList::ReplacePhysics(G4VPhysicsConstructor* fPhysics) { - G4StateManager* stateManager = G4StateManager::GetStateManager(); + G4StateManager* stateManager = G4StateManager::GetStateManager(); G4ApplicationState currentState = stateManager->GetCurrentState(); - if(!(currentState == G4State_PreInit)) - { + if (!(currentState == G4State_PreInit)) { G4Exception("G4VModularPhysicsList::ReplacePhysics", "Run0203", JustWarning, "Geant4 kernel is not PreInit state : Method ignored."); return; } G4String pName = fPhysics->GetPhysicsName(); - G4int pType = fPhysics->GetPhysicsType(); + G4int pType = fPhysics->GetPhysicsType(); // If physics_type is equal to 0, // duplication check is omitted and just added. // This is TEMPORAL treatment. - if(pType == 0) - { + if (pType == 0) { // register G4MT_physicsVector->push_back(fPhysics); #ifdef G4VERBOSE - if(verboseLevel > 0) - { - G4cout << "G4VModularPhysicsList::ReplacePhysics: " << pName - << " with type : " << pType << " is added" << G4endl; + if (verboseLevel > 0) { + G4cout << "G4VModularPhysicsList::ReplacePhysics: " << pName << " with type : " << pType + << " is added" << G4endl; } #endif return; @@ -240,29 +223,23 @@ void G4VModularPhysicsList::ReplacePhysics(G4VPhysicsConstructor* fPhysics) // Check if physics with the physics_type same as one of given physics auto itr = G4MT_physicsVector->begin(); - for(; itr != G4MT_physicsVector->end(); ++itr) - { - if(pType == (*itr)->GetPhysicsType()) - break; + for (; itr != G4MT_physicsVector->end(); ++itr) { + if (pType == (*itr)->GetPhysicsType()) break; } - if(itr == G4MT_physicsVector->end()) - { + if (itr == G4MT_physicsVector->end()) { // register G4MT_physicsVector->push_back(fPhysics); } - else - { + else { #ifdef G4VERBOSE - if(verboseLevel > 0) - { - G4cout << "G4VModularPhysicsList::ReplacePhysics: " - << (*itr)->GetPhysicsName() << " with type : " << pType - << " is replaced with " << pName << G4endl; + if (verboseLevel > 0) { + G4cout << "G4VModularPhysicsList::ReplacePhysics: " << (*itr)->GetPhysicsName() + << " with type : " << pType << " is replaced with " << pName << G4endl; } #endif // delete exsiting one - delete(*itr); + delete (*itr); // replace with given one (*itr) = fPhysics; } @@ -272,105 +249,81 @@ void G4VModularPhysicsList::ReplacePhysics(G4VPhysicsConstructor* fPhysics) // -------------------------------------------------------------------- void G4VModularPhysicsList::RemovePhysics(G4int pType) { - G4StateManager* stateManager = G4StateManager::GetStateManager(); + G4StateManager* stateManager = G4StateManager::GetStateManager(); G4ApplicationState currentState = stateManager->GetCurrentState(); - if(!(currentState == G4State_PreInit)) - { + if (!(currentState == G4State_PreInit)) { G4Exception("G4VModularPhysicsList::RemovePhysics", "Run0204", JustWarning, "Geant4 kernel is not PreInit state : Method ignored."); return; } - for(auto itr = G4MT_physicsVector->cbegin(); - itr != G4MT_physicsVector->cend();) - { - if(pType == (*itr)->GetPhysicsType()) - { + for (auto itr = G4MT_physicsVector->cbegin(); itr != G4MT_physicsVector->cend();) { + if (pType == (*itr)->GetPhysicsType()) { G4String pName = (*itr)->GetPhysicsName(); #ifdef G4VERBOSE - if(verboseLevel > 0) - { - G4cout << "G4VModularPhysicsList::RemovePhysics: " << pName - << " is removed" << G4endl; + if (verboseLevel > 0) { + G4cout << "G4VModularPhysicsList::RemovePhysics: " << pName << " is removed" << G4endl; } #endif G4MT_physicsVector->erase(itr); break; } - else - { - ++itr; - } + + ++itr; } } // -------------------------------------------------------------------- void G4VModularPhysicsList::RemovePhysics(G4VPhysicsConstructor* fPhysics) { - G4StateManager* stateManager = G4StateManager::GetStateManager(); + G4StateManager* stateManager = G4StateManager::GetStateManager(); G4ApplicationState currentState = stateManager->GetCurrentState(); - if(!(currentState == G4State_PreInit)) - { + if (!(currentState == G4State_PreInit)) { G4Exception("G4VModularPhysicsList::RemovePhysics", "Run0205", JustWarning, "Geant4 kernel is not PreInit state : Method ignored."); return; } - for(auto itr = G4MT_physicsVector->cbegin(); - itr != G4MT_physicsVector->cend();) - { - if(fPhysics == (*itr)) - { + for (auto itr = G4MT_physicsVector->cbegin(); itr != G4MT_physicsVector->cend();) { + if (fPhysics == (*itr)) { G4String pName = (*itr)->GetPhysicsName(); #ifdef G4VERBOSE - if(verboseLevel > 0) - { - G4cout << "G4VModularPhysicsList::RemovePhysics: " << pName - << " is removed" << G4endl; + if (verboseLevel > 0) { + G4cout << "G4VModularPhysicsList::RemovePhysics: " << pName << " is removed" << G4endl; } #endif G4MT_physicsVector->erase(itr); break; } - else - { - ++itr; - } + + ++itr; } } // -------------------------------------------------------------------- void G4VModularPhysicsList::RemovePhysics(const G4String& name) { - G4StateManager* stateManager = G4StateManager::GetStateManager(); + G4StateManager* stateManager = G4StateManager::GetStateManager(); G4ApplicationState currentState = stateManager->GetCurrentState(); - if(!(currentState == G4State_PreInit)) - { + if (!(currentState == G4State_PreInit)) { G4Exception("G4VModularPhysicsList::RemovePhysics", "Run0206", JustWarning, "Geant4 kernel is not PreInit state : Method ignored."); return; } - for(auto itr = G4MT_physicsVector->cbegin(); - itr != G4MT_physicsVector->cend();) - { + for (auto itr = G4MT_physicsVector->cbegin(); itr != G4MT_physicsVector->cend();) { G4String pName = (*itr)->GetPhysicsName(); - if(name == pName) - { + if (name == pName) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { - G4cout << "G4VModularPhysicsList::RemovePhysics: " << pName - << " is removed" << G4endl; + if (verboseLevel > 0) { + G4cout << "G4VModularPhysicsList::RemovePhysics: " << pName << " is removed" << G4endl; } #endif G4MT_physicsVector->erase(itr); break; } - else - { - ++itr; - } + + ++itr; } } @@ -378,44 +331,32 @@ void G4VModularPhysicsList::RemovePhysics(const G4String& name) const G4VPhysicsConstructor* G4VModularPhysicsList::GetPhysics(G4int idx) const { auto itr = G4MT_physicsVector->cbegin(); - for(G4int i = 0; i < idx && itr != G4MT_physicsVector->cend(); ++i) + for (G4int i = 0; i < idx && itr != G4MT_physicsVector->cend(); ++i) ++itr; - if(itr != G4MT_physicsVector->cend()) - return (*itr); - else - return nullptr; + if (itr != G4MT_physicsVector->cend()) return (*itr); + return nullptr; } // -------------------------------------------------------------------- -const G4VPhysicsConstructor* G4VModularPhysicsList::GetPhysics( - const G4String& name) const +const G4VPhysicsConstructor* G4VModularPhysicsList::GetPhysics(const G4String& name) const { auto itr = G4MT_physicsVector->cbegin(); - for(; itr != G4MT_physicsVector->cend(); ++itr) - { - if(name == (*itr)->GetPhysicsName()) - break; + for (; itr != G4MT_physicsVector->cend(); ++itr) { + if (name == (*itr)->GetPhysicsName()) break; } - if(itr != G4MT_physicsVector->cend()) - return (*itr); - else - return nullptr; + if (itr != G4MT_physicsVector->cend()) return (*itr); + return nullptr; } // -------------------------------------------------------------------- -const G4VPhysicsConstructor* G4VModularPhysicsList::GetPhysicsWithType( - G4int pType) const +const G4VPhysicsConstructor* G4VModularPhysicsList::GetPhysicsWithType(G4int pType) const { auto itr = G4MT_physicsVector->cbegin(); - for(; itr != G4MT_physicsVector->cend(); ++itr) - { - if(pType == (*itr)->GetPhysicsType()) - break; + for (; itr != G4MT_physicsVector->cend(); ++itr) { + if (pType == (*itr)->GetPhysicsType()) break; } - if(itr != G4MT_physicsVector->cend()) - return (*itr); - else - return nullptr; + if (itr != G4MT_physicsVector->cend()) return (*itr); + return nullptr; } // -------------------------------------------------------------------- @@ -423,9 +364,7 @@ void G4VModularPhysicsList::SetVerboseLevel(G4int value) { verboseLevel = value; // Loop over constructors - for(auto itr = G4MT_physicsVector->cbegin(); - itr != G4MT_physicsVector->cend(); ++itr) - { + for (auto itr = G4MT_physicsVector->cbegin(); itr != G4MT_physicsVector->cend(); ++itr) { (*itr)->SetVerboseLevel(verboseLevel); } } @@ -434,8 +373,7 @@ void G4VModularPhysicsList::SetVerboseLevel(G4int value) void G4VModularPhysicsList::TerminateWorker() { // See https://jira-geant4.kek.jp/browse/DEV-284 - std::for_each( - G4MT_physicsVector->cbegin(), G4MT_physicsVector->cend(), - [](G4PhysConstVector::value_type el) { el->TerminateWorker(); }); + std::for_each(G4MT_physicsVector->cbegin(), G4MT_physicsVector->cend(), + [](G4PhysConstVector::value_type el) { el->TerminateWorker(); }); G4VUserPhysicsList::TerminateWorker(); } diff --git a/source/run/src/G4VPersistencyManager.cc b/source/run/src/G4VPersistencyManager.cc index ae71bbf87c9..5c03f7f13bc 100644 --- a/source/run/src/G4VPersistencyManager.cc +++ b/source/run/src/G4VPersistencyManager.cc @@ -30,8 +30,7 @@ #include "G4VPersistencyManager.hh" -G4ThreadLocal G4VPersistencyManager* - G4VPersistencyManager::fPersistencyManager = nullptr; +G4ThreadLocal G4VPersistencyManager* G4VPersistencyManager::fPersistencyManager = nullptr; // -------------------------------------------------------------------- G4VPersistencyManager* G4VPersistencyManager::GetPersistencyManager() diff --git a/source/run/src/G4VPhysicsConstructor.cc b/source/run/src/G4VPhysicsConstructor.cc index ee7a163a294..27007668bf6 100644 --- a/source/run/src/G4VPhysicsConstructor.cc +++ b/source/run/src/G4VPhysicsConstructor.cc @@ -28,11 +28,12 @@ // Original author: H.Kurashige (Kobe University), 12 November 2000 // -------------------------------------------------------------------- -#include - #include "G4VPhysicsConstructor.hh" + #include "G4PhysicsBuilderInterface.hh" +#include + // This field helps to use the class G4VPCManager // G4VPCManager G4VPhysicsConstructor::subInstanceManager; @@ -41,30 +42,23 @@ G4VPCManager G4VPhysicsConstructor::subInstanceManager; void G4VPCData::initialize() { _aParticleIterator = G4ParticleTable::GetParticleTable()->GetIterator(); - _builders = new PhysicsBuilders_V; + _builders = new PhysicsBuilders_V; } // -------------------------------------------------------------------- -G4VPhysicsConstructor::G4VPhysicsConstructor(const G4String& name) - : namePhysics(name) +G4VPhysicsConstructor::G4VPhysicsConstructor(const G4String& name) : namePhysics(name) { g4vpcInstanceID = subInstanceManager.CreateSubInstance(); - // pointer to the particle table theParticleTable = G4ParticleTable::GetParticleTable(); } // -------------------------------------------------------------------- G4VPhysicsConstructor::G4VPhysicsConstructor(const G4String& name, G4int type) - : namePhysics(name) - , typePhysics(type) + : namePhysics(name), typePhysics(type) { g4vpcInstanceID = subInstanceManager.CreateSubInstance(); - // pointer to the particle table theParticleTable = G4ParticleTable::GetParticleTable(); - // aParticleIterator = theParticleTable->GetIterator(); - - if(type < 0) - typePhysics = 0; + if (type < 0) typePhysics = 0; } // -------------------------------------------------------------------- @@ -75,21 +69,18 @@ G4VPhysicsConstructor::~G4VPhysicsConstructor() } // -------------------------------------------------------------------- -G4ParticleTable::G4PTblDicIterator* -G4VPhysicsConstructor::GetParticleIterator() const +G4ParticleTable::G4PTblDicIterator* G4VPhysicsConstructor::GetParticleIterator() const { return (subInstanceManager.offset[g4vpcInstanceID])._aParticleIterator; } // -------------------------------------------------------------------- -G4VPhysicsConstructor::PhysicsBuilder_V -G4VPhysicsConstructor::GetBuilders() const +G4VPhysicsConstructor::PhysicsBuilder_V G4VPhysicsConstructor::GetBuilders() const { const auto& tls = *((subInstanceManager.offset[g4vpcInstanceID])._builders); PhysicsBuilder_V copy(tls.size()); G4int i = 0; - for(const auto& el : tls) - { + for (const auto& el : tls) { copy[i++] = el; } return copy; @@ -104,8 +95,7 @@ void G4VPhysicsConstructor::AddBuilder(G4PhysicsBuilderInterface* bld) // -------------------------------------------------------------------- void G4VPhysicsConstructor::TerminateWorker() { - if(subInstanceManager.offset[g4vpcInstanceID]._builders != nullptr) - { + if (subInstanceManager.offset[g4vpcInstanceID]._builders != nullptr) { std::for_each(subInstanceManager.offset[g4vpcInstanceID]._builders->begin(), subInstanceManager.offset[g4vpcInstanceID]._builders->end(), [](PhysicsBuilder_V::value_type bld) { delete bld; }); diff --git a/source/run/src/G4VUserActionInitialization.cc b/source/run/src/G4VUserActionInitialization.cc index 653ef6e3be4..da522abd888 100644 --- a/source/run/src/G4VUserActionInitialization.cc +++ b/source/run/src/G4VUserActionInitialization.cc @@ -29,26 +29,11 @@ // -------------------------------------------------------------------- #include "G4VUserActionInitialization.hh" -#include "G4RunManager.hh" - -// -------------------------------------------------------------------- -G4VUserActionInitialization::G4VUserActionInitialization() -{ -} - -// -------------------------------------------------------------------- -G4VUserActionInitialization::~G4VUserActionInitialization() -{ -} -// -------------------------------------------------------------------- -void G4VUserActionInitialization::BuildForMaster() const -{ -} +#include "G4RunManager.hh" // -------------------------------------------------------------------- -void G4VUserActionInitialization:: -SetUserAction(G4VUserPrimaryGeneratorAction* action) const +void G4VUserActionInitialization::SetUserAction(G4VUserPrimaryGeneratorAction* action) const { G4RunManager::GetRunManager()->SetUserAction(action); } @@ -66,29 +51,19 @@ void G4VUserActionInitialization::SetUserAction(G4UserEventAction* action) const } // -------------------------------------------------------------------- -void G4VUserActionInitialization:: -SetUserAction(G4UserStackingAction* action) const +void G4VUserActionInitialization::SetUserAction(G4UserStackingAction* action) const { G4RunManager::GetRunManager()->SetUserAction(action); } // -------------------------------------------------------------------- -void G4VUserActionInitialization:: -SetUserAction(G4UserTrackingAction* action) const +void G4VUserActionInitialization::SetUserAction(G4UserTrackingAction* action) const { G4RunManager::GetRunManager()->SetUserAction(action); } // -------------------------------------------------------------------- -void G4VUserActionInitialization:: -SetUserAction(G4UserSteppingAction* action) const +void G4VUserActionInitialization::SetUserAction(G4UserSteppingAction* action) const { G4RunManager::GetRunManager()->SetUserAction(action); } - -// -------------------------------------------------------------------- -G4VSteppingVerbose* G4VUserActionInitialization:: -InitializeSteppingVerbose() const -{ - return nullptr; -} diff --git a/source/run/src/G4VUserDetectorConstruction.cc b/source/run/src/G4VUserDetectorConstruction.cc index 9c28aeeb8d3..78a45535a19 100644 --- a/source/run/src/G4VUserDetectorConstruction.cc +++ b/source/run/src/G4VUserDetectorConstruction.cc @@ -28,43 +28,32 @@ // Original author: M.Asai, 1999 // -------------------------------------------------------------------- -#include -#include -#include - #include "G4VUserDetectorConstruction.hh" + #include "G4FieldManager.hh" #include "G4LogicalVolume.hh" #include "G4LogicalVolumeStore.hh" #include "G4MultiSensitiveDetector.hh" +#include "G4RunManager.hh" #include "G4SDManager.hh" #include "G4VPhysicalVolume.hh" #include "G4VSensitiveDetector.hh" #include "G4VUserParallelWorld.hh" -#include "G4RunManager.hh" - -// -------------------------------------------------------------------- -G4VUserDetectorConstruction::G4VUserDetectorConstruction() -{ -} -// -------------------------------------------------------------------- -G4VUserDetectorConstruction::~G4VUserDetectorConstruction() -{ -} +#include +#include +#include // -------------------------------------------------------------------- -void G4VUserDetectorConstruction:: -RegisterParallelWorld(G4VUserParallelWorld* aPW) +void G4VUserDetectorConstruction::RegisterParallelWorld(G4VUserParallelWorld* aPW) { auto pwItr = std::find(parallelWorld.cbegin(), parallelWorld.cend(), aPW); - if (pwItr != parallelWorld.cend()) - { + if (pwItr != parallelWorld.cend()) { G4String eM = "A parallel world <"; eM += aPW->GetName(); eM += "> is already registered to the user detector construction."; - G4Exception("G4VUserDetectorConstruction::RegisterParallelWorld", - "Run0051", FatalErrorInArgument, eM); + G4Exception("G4VUserDetectorConstruction::RegisterParallelWorld", "Run0051", + FatalErrorInArgument, eM); } parallelWorld.push_back(aPW); } @@ -73,10 +62,8 @@ RegisterParallelWorld(G4VUserParallelWorld* aPW) G4int G4VUserDetectorConstruction::ConstructParallelGeometries() { G4int nP = 0; - for(auto pwItr = parallelWorld.cbegin(); - pwItr != parallelWorld.cend(); ++pwItr) - { - (*pwItr)->Construct(); + for (const auto& pwItr : parallelWorld) { + pwItr->Construct(); ++nP; } return nP; @@ -85,10 +72,8 @@ G4int G4VUserDetectorConstruction::ConstructParallelGeometries() // -------------------------------------------------------------------- void G4VUserDetectorConstruction::ConstructParallelSD() { - for(auto pwItr = parallelWorld.cbegin(); - pwItr != parallelWorld.cend(); ++pwItr) - { - (*pwItr)->ConstructSD(); + for (const auto& pwItr : parallelWorld) { + pwItr->ConstructSD(); } } @@ -99,28 +84,14 @@ G4int G4VUserDetectorConstruction::GetNumberOfParallelWorld() const } // -------------------------------------------------------------------- -G4VUserParallelWorld* -G4VUserDetectorConstruction::GetParallelWorld(G4int i) const +G4VUserParallelWorld* G4VUserDetectorConstruction::GetParallelWorld(G4int i) const { - if(i < 0 || i >= GetNumberOfParallelWorld()) - return nullptr; + if (i < 0 || i >= GetNumberOfParallelWorld()) return nullptr; return parallelWorld[i]; } // -------------------------------------------------------------------- -void G4VUserDetectorConstruction::ConstructSDandField() -{ - // G4RunManager::RMType rmtype = - // G4RunManager::GetRunManager()->GetRunManagerType(); if(rmtype != - // G4RunManager::sequentialRM) - // { - // G4cout - // << "User-derived detector construction class does not implement \n" - // << "ConstructSDandFiled method: workers will not have SD and fields!\n" - // << "The user can safely ignore this message if (s)he has no sensitive\n" - // << "detector or field in her/his application." << G4endl; - // } -} +void G4VUserDetectorConstruction::ConstructSDandField() {} // -------------------------------------------------------------------- void G4VUserDetectorConstruction::CloneF() @@ -130,35 +101,27 @@ void G4VUserDetectorConstruction::CloneF() FMtoFMmap masterToWorker; G4LogicalVolumeStore* const logVolStore = G4LogicalVolumeStore::GetInstance(); - for(auto it = logVolStore->cbegin(); it != logVolStore->cend(); ++it) - { - G4LogicalVolume* g4LogicalVolume = *it; + for (const auto& g4LogicalVolume : *logVolStore) { // Use shadow of master to get instance of FM G4FieldManager* masterFM = nullptr; // g4LogicalVolume->fFieldManager; G4FieldManager* clonedFM = nullptr; - if(masterFM != nullptr) - { + if (masterFM != nullptr) { auto fmFound = masterToWorker.find(masterFM); - if(fmFound == masterToWorker.cend()) - { + if (fmFound == masterToWorker.cend()) { // First time we see this SD, let's clone and remember... - try - { - auto insertedEl = - masterToWorker.insert(FMpair(masterFM, masterFM->Clone())); + try { + auto insertedEl = masterToWorker.insert(FMpair(masterFM, masterFM->Clone())); clonedFM = (insertedEl.first)->second; - } catch(...) - { + } + catch (...) { G4ExceptionDescription msg; msg << "Cloning of G4FieldManager failed." << " But derived class does not implement cloning. Cannot " "continue."; - G4Exception("G4VUserDetectorConstruction::CloneSD()", "Run0053", - FatalException, msg); + G4Exception("G4VUserDetectorConstruction::CloneSD()", "Run0053", FatalException, msg); } } - else - { + else { // We have already seen this SD attached to a different LogicalVolume, // let's re-use previous clone clonedFM = (*fmFound).second; @@ -183,39 +146,30 @@ void G4VUserDetectorConstruction::CloneSD() using SDpair = std::pair; SDtoSDmap masterToWorker; - for(auto it = logVolStore->cbegin(); it != logVolStore->cend(); ++it) - { - G4LogicalVolume* g4LogicalVolume = *it; + for (const auto& g4LogicalVolume : *logVolStore) { // Use shadow of master to get the instance of SD G4VSensitiveDetector* masterSD = nullptr; G4VSensitiveDetector* clonedSD = nullptr; - if(masterSD != nullptr) - { + if (masterSD != nullptr) { auto sdFound = masterToWorker.find(masterSD); - if(sdFound == masterToWorker.cend()) - { + if (sdFound == masterToWorker.cend()) { // First time we see this SD, let's clone and remember... - try - { - auto insertedEl = - masterToWorker.insert(SDpair(masterSD, masterSD->Clone())); + try { + auto insertedEl = masterToWorker.insert(SDpair(masterSD, masterSD->Clone())); clonedSD = (insertedEl.first)->second; - } catch(...) - { + } + catch (...) { G4ExceptionDescription msg; - msg << "Cloning of G4VSensitiveDetector requested for:" - << masterSD->GetName() << "\n" + msg << "Cloning of G4VSensitiveDetector requested for:" << masterSD->GetName() << "\n" #ifndef WIN32 << " (full path name: " << masterSD->GetFullPathName() << ").\n" #endif << " But derived class does not implement cloning. Cannot " "continue."; - G4Exception("G4VUserDetectorConstruction::CloneSD()", "Run0053", - FatalException, msg); + G4Exception("G4VUserDetectorConstruction::CloneSD()", "Run0053", FatalException, msg); } } - else - { + else { // We have already seen this SD attached to a different LogicalVolume, // let's re-use previous clone clonedSD = (*sdFound).second; @@ -226,47 +180,42 @@ void G4VUserDetectorConstruction::CloneSD() } // -------------------------------------------------------------------- -void G4VUserDetectorConstruction:: -SetSensitiveDetector(const G4String& logVolName, - G4VSensitiveDetector* aSD, G4bool multi) +void G4VUserDetectorConstruction::SetSensitiveDetector(const G4String& logVolName, + G4VSensitiveDetector* aSD, G4bool multi) { - G4bool found = false; + G4bool found = false; G4LogicalVolumeStore* store = G4LogicalVolumeStore::GetInstance(); auto volmap = store->GetMap(); auto pos = volmap.find(logVolName); - if(pos != volmap.cend()) - { - if ((pos->second.size()>1) && !multi) - { + if (pos != volmap.cend()) { + if ((pos->second.size() > 1) && !multi) { G4String eM = "More than one logical volumes of name <"; eM += pos->first; eM += "> are found and thus the sensitive detector <"; eM += aSD->GetName(); eM += "> cannot be uniquely assigned."; - G4Exception("G4VUserDetectorConstruction::SetSensitiveDetector()", - "Run0052", FatalErrorInArgument, eM); + G4Exception("G4VUserDetectorConstruction::SetSensitiveDetector()", "Run0052", + FatalErrorInArgument, eM); } found = true; - for (std::size_t i = 0; i < pos->second.size(); ++i) - { - SetSensitiveDetector(pos->second[i], aSD); + for (auto& i : pos->second) { + SetSensitiveDetector(i, aSD); } } - if(!found) - { + if (!found) { G4String eM2 = "No logical volume of name <"; eM2 += logVolName; eM2 += "> is found. The specified sensitive detector <"; eM2 += aSD->GetName(); eM2 += "> couldn't be assigned to any volume."; - G4Exception("G4VUserDetectorConstruction::SetSensitiveDetector()", - "Run0053", FatalErrorInArgument, eM2); + G4Exception("G4VUserDetectorConstruction::SetSensitiveDetector()", "Run0053", + FatalErrorInArgument, eM2); } } // -------------------------------------------------------------------- -void G4VUserDetectorConstruction:: -SetSensitiveDetector(G4LogicalVolume* logVol, G4VSensitiveDetector* aSD) +void G4VUserDetectorConstruction::SetSensitiveDetector(G4LogicalVolume* logVol, + G4VSensitiveDetector* aSD) { assert(logVol != nullptr && aSD != nullptr); @@ -278,33 +227,26 @@ SetSensitiveDetector(G4LogicalVolume* logVol, G4VSensitiveDetector* aSD) // Get existing SD if already set and check if it is of the special type G4VSensitiveDetector* originalSD = logVol->GetSensitiveDetector(); - if(originalSD == aSD) - { + if (originalSD == aSD) { G4ExceptionDescription msg; msg << "Attempting to add multiple times the same sensitive detector (\""; msg << originalSD->GetName() << "\") is not allowed, skipping."; - G4Exception("G4VUserDetectorConstruction::SetSensitiveDetector", "Run0054", - JustWarning, msg); + G4Exception("G4VUserDetectorConstruction::SetSensitiveDetector", "Run0054", JustWarning, msg); return; } - if(originalSD == nullptr) - { + if (originalSD == nullptr) { logVol->SetSensitiveDetector(aSD); } - else - { - G4MultiSensitiveDetector* msd = - dynamic_cast(originalSD); - if(msd != nullptr) - { + else { + auto msd = dynamic_cast(originalSD); + if (msd != nullptr) { msd->AddSD(aSD); } - else - { + else { std::ostringstream mn; mn << "/MultiSD_" << logVol->GetName() << "_" << logVol; const G4String msdname = mn.str(); - msd = new G4MultiSensitiveDetector(msdname); + msd = new G4MultiSensitiveDetector(msdname); // We need to register the proxy to have correct handling of IDs G4SDManager::GetSDMpointer()->AddNewDetector(msd); msd->AddSD(originalSD); diff --git a/source/run/src/G4VUserParallelWorld.cc b/source/run/src/G4VUserParallelWorld.cc index 5b0840f71e5..18c30f5f7da 100644 --- a/source/run/src/G4VUserParallelWorld.cc +++ b/source/run/src/G4VUserParallelWorld.cc @@ -43,68 +43,51 @@ G4VUserParallelWorld::G4VUserParallelWorld(const G4String& worldName) fWorldName = worldName; } -// -------------------------------------------------------------------- -G4VUserParallelWorld::~G4VUserParallelWorld() -{ -} - -// -------------------------------------------------------------------- -void G4VUserParallelWorld::ConstructSD() -{ -} - // -------------------------------------------------------------------- G4VPhysicalVolume* G4VUserParallelWorld::GetWorld() { G4VPhysicalVolume* pWorld = - G4TransportationManager::GetTransportationManager() - ->GetParallelWorld(fWorldName); + G4TransportationManager::GetTransportationManager()->GetParallelWorld(fWorldName); pWorld->SetName(fWorldName); return pWorld; } // -------------------------------------------------------------------- void G4VUserParallelWorld::SetSensitiveDetector(const G4String& logVolName, - G4VSensitiveDetector* aSD, - G4bool multi) + G4VSensitiveDetector* aSD, G4bool multi) { - G4bool found = false; + G4bool found = false; G4LogicalVolumeStore* store = G4LogicalVolumeStore::GetInstance(); auto volmap = store->GetMap(); auto pos = volmap.find(logVolName); - if(pos != volmap.cend()) - { - if ((pos->second.size()>1) && !multi) - { + if (pos != volmap.cend()) { + if ((pos->second.size() > 1) && !multi) { G4String eM = "More than one logical volumes of name <"; eM += pos->first; eM += "> are found and thus the sensitive detector <"; eM += aSD->GetName(); eM += "> cannot be uniquely assigned."; - G4Exception("G4VUserParallelWorld::SetSensitiveDetector()", - "Run0052", FatalErrorInArgument, eM); + G4Exception("G4VUserParallelWorld::SetSensitiveDetector()", "Run0052", FatalErrorInArgument, + eM); } found = true; - for (std::size_t i = 0; i < pos->second.size(); ++i) - { - SetSensitiveDetector(pos->second[i], aSD); + for (auto& i : pos->second) { + SetSensitiveDetector(i, aSD); } } - if(!found) - { + if (!found) { G4String eM2 = "No logical volume of name <"; eM2 += logVolName; eM2 += "> is found. The specified sensitive detector <"; eM2 += aSD->GetName(); eM2 += "> couldn't be assigned to any volume."; - G4Exception("G4VUserParallelWorld::SetSensitiveDetector()", - "Run0053", FatalErrorInArgument, eM2); + G4Exception("G4VUserParallelWorld::SetSensitiveDetector()", "Run0053", FatalErrorInArgument, + eM2); } } // -------------------------------------------------------------------- -void G4VUserParallelWorld::SetSensitiveDetector(G4LogicalVolume* logVol, - G4VSensitiveDetector* aSD) +void G4VUserParallelWorld::SetSensitiveDetector(G4LogicalVolume* logVol, G4VSensitiveDetector* aSD) { G4SDManager::GetSDMpointer()->AddNewDetector(aSD); logVol->SetSensitiveDetector(aSD); diff --git a/source/run/src/G4VUserPhysicsList.cc b/source/run/src/G4VUserPhysicsList.cc index cb5d46f9e4c..ade73b33bb2 100644 --- a/source/run/src/G4VUserPhysicsList.cc +++ b/source/run/src/G4VUserPhysicsList.cc @@ -28,13 +28,13 @@ // Original author: H.Kurashige (Kobe University), 9 January 1998 // -------------------------------------------------------------------- -#include "G4PhysicsListHelper.hh" #include "G4VUserPhysicsList.hh" #include "G4Material.hh" #include "G4MaterialCutsCouple.hh" #include "G4ParticleDefinition.hh" #include "G4ParticleTable.hh" +#include "G4PhysicsListHelper.hh" #include "G4ProcessManager.hh" #include "G4ProductionCuts.hh" #include "G4ProductionCutsTable.hh" @@ -55,18 +55,14 @@ // This static member is thread local. For each thread, it holds the array // size of G4VUPLData instances. // -#define G4MT_theMessenger \ - ((this->subInstanceManager.offset[this->g4vuplInstanceID])._theMessenger) -#define G4MT_thePLHelper \ - ((this->subInstanceManager.offset[this->g4vuplInstanceID])._thePLHelper) -#define fIsPhysicsTableBuilt \ - ((this->subInstanceManager.offset[this->g4vuplInstanceID]) \ - ._fIsPhysicsTableBuilt) -#define fDisplayThreshold \ +#define G4MT_theMessenger ((this->subInstanceManager.offset[this->g4vuplInstanceID])._theMessenger) +#define G4MT_thePLHelper ((this->subInstanceManager.offset[this->g4vuplInstanceID])._thePLHelper) +#define fIsPhysicsTableBuilt \ + ((this->subInstanceManager.offset[this->g4vuplInstanceID])._fIsPhysicsTableBuilt) +#define fDisplayThreshold \ ((this->subInstanceManager.offset[this->g4vuplInstanceID])._fDisplayThreshold) -#define theParticleIterator \ - ((this->subInstanceManager.offset[this->g4vuplInstanceID]) \ - ._theParticleIterator) +#define theParticleIterator \ + ((this->subInstanceManager.offset[this->g4vuplInstanceID])._theParticleIterator) // This field helps to use the class G4VUPLManager // @@ -75,11 +71,11 @@ G4VUPLManager G4VUserPhysicsList::subInstanceManager; // -------------------------------------------------------------------- void G4VUPLData::initialize() { - _theParticleIterator = G4ParticleTable::GetParticleTable()->GetIterator(); - _theMessenger = nullptr; - _thePLHelper = G4PhysicsListHelper::GetPhysicsListHelper(); + _theParticleIterator = G4ParticleTable::GetParticleTable()->GetIterator(); + _theMessenger = nullptr; + _thePLHelper = G4PhysicsListHelper::GetPhysicsListHelper(); _fIsPhysicsTableBuilt = false; - _fDisplayThreshold = 0; + _fDisplayThreshold = 0; } // -------------------------------------------------------------------- @@ -91,7 +87,6 @@ G4VUserPhysicsList::G4VUserPhysicsList() // pointer to the particle table theParticleTable = G4ParticleTable::GetParticleTable(); - // theParticleIterator = theParticleTable->GetIterator(); // pointer to the cuts table fCutsTable = G4ProductionCutsTable::GetProductionCutsTable(); @@ -100,17 +95,13 @@ G4VUserPhysicsList::G4VUserPhysicsList() fCutsTable->SetEnergyRange(0.99 * keV, 100 * TeV); // UI Messenger - // theMessenger = new G4UserPhysicsListMessenger(this); G4MT_theMessenger = new G4UserPhysicsListMessenger(this); // AND // PhysicsListHelper - // thePLHelper = G4PhysicsListHelper::GetPhysicsListHelper(); - // thePLHelper->SetVerboseLevel(verboseLevel); - // G4MT_thePLHelper = G4PhysicsListHelper::GetPhysicsListHelper(); //AND G4MT_thePLHelper->SetVerboseLevel(verboseLevel); // AND fIsPhysicsTableBuilt = false; - fDisplayThreshold = 0; + fDisplayThreshold = 0; } // -------------------------------------------------------------------- @@ -146,19 +137,19 @@ G4VUserPhysicsList::~G4VUserPhysicsList() // -------------------------------------------------------------------- G4VUserPhysicsList::G4VUserPhysicsList(const G4VUserPhysicsList& right) - : verboseLevel(right.verboseLevel) - , defaultCutValue(right.defaultCutValue) - , isSetDefaultCutValue(right.isSetDefaultCutValue) - , fRetrievePhysicsTable(right.fRetrievePhysicsTable) - , fStoredInAscii(right.fStoredInAscii) - , fIsCheckedForRetrievePhysicsTable(right.fIsCheckedForRetrievePhysicsTable) - , fIsRestoredCutValues(right.fIsRestoredCutValues) - , directoryPhysicsTable(right.directoryPhysicsTable) - , fDisableCheckParticleList(right.fDisableCheckParticleList) + : verboseLevel(right.verboseLevel), + defaultCutValue(right.defaultCutValue), + isSetDefaultCutValue(right.isSetDefaultCutValue), + fRetrievePhysicsTable(right.fRetrievePhysicsTable), + fStoredInAscii(right.fStoredInAscii), + fIsCheckedForRetrievePhysicsTable(right.fIsCheckedForRetrievePhysicsTable), + fIsRestoredCutValues(right.fIsRestoredCutValues), + directoryPhysicsTable(right.directoryPhysicsTable), + fDisableCheckParticleList(right.fDisableCheckParticleList) { g4vuplInstanceID = subInstanceManager.CreateSubInstance(); // pointer to the particle table - theParticleTable = G4ParticleTable::GetParticleTable(); + theParticleTable = G4ParticleTable::GetParticleTable(); theParticleIterator = theParticleTable->GetIterator(); // pointer to the cuts table fCutsTable = G4ProductionCutsTable::GetProductionCutsTable(); @@ -170,47 +161,39 @@ G4VUserPhysicsList::G4VUserPhysicsList(const G4VUserPhysicsList& right) G4MT_thePLHelper = G4PhysicsListHelper::GetPhysicsListHelper(); G4MT_thePLHelper->SetVerboseLevel(verboseLevel); - fIsPhysicsTableBuilt = right.GetSubInstanceManager() - .offset[right.GetInstanceID()] - ._fIsPhysicsTableBuilt; - fDisplayThreshold = right.GetSubInstanceManager() - .offset[right.GetInstanceID()] - ._fDisplayThreshold; + fIsPhysicsTableBuilt = + right.GetSubInstanceManager().offset[right.GetInstanceID()]._fIsPhysicsTableBuilt; + fDisplayThreshold = + right.GetSubInstanceManager().offset[right.GetInstanceID()]._fDisplayThreshold; } // -------------------------------------------------------------------- -G4VUserPhysicsList& -G4VUserPhysicsList::operator=(const G4VUserPhysicsList& right) +G4VUserPhysicsList& G4VUserPhysicsList::operator=(const G4VUserPhysicsList& right) { - if(this != &right) - { - verboseLevel = right.verboseLevel; - defaultCutValue = right.defaultCutValue; - isSetDefaultCutValue = right.isSetDefaultCutValue; - fRetrievePhysicsTable = right.fRetrievePhysicsTable; - fStoredInAscii = right.fStoredInAscii; + if (this != &right) { + verboseLevel = right.verboseLevel; + defaultCutValue = right.defaultCutValue; + isSetDefaultCutValue = right.isSetDefaultCutValue; + fRetrievePhysicsTable = right.fRetrievePhysicsTable; + fStoredInAscii = right.fStoredInAscii; fIsCheckedForRetrievePhysicsTable = right.fIsCheckedForRetrievePhysicsTable; - fIsRestoredCutValues = right.fIsRestoredCutValues; - directoryPhysicsTable = right.directoryPhysicsTable; - fIsPhysicsTableBuilt = right.GetSubInstanceManager() - .offset[right.GetInstanceID()] - ._fIsPhysicsTableBuilt; - fDisplayThreshold = right.GetSubInstanceManager() - .offset[right.GetInstanceID()] - ._fDisplayThreshold; + fIsRestoredCutValues = right.fIsRestoredCutValues; + directoryPhysicsTable = right.directoryPhysicsTable; + fIsPhysicsTableBuilt = + right.GetSubInstanceManager().offset[right.GetInstanceID()]._fIsPhysicsTableBuilt; + fDisplayThreshold = + right.GetSubInstanceManager().offset[right.GetInstanceID()]._fDisplayThreshold; fDisableCheckParticleList = right.fDisableCheckParticleList; } return *this; } // -------------------------------------------------------------------- -void G4VUserPhysicsList::AddProcessManager(G4ParticleDefinition* newParticle, - G4ProcessManager*) +void G4VUserPhysicsList::AddProcessManager(G4ParticleDefinition* newParticle, G4ProcessManager*) { - if(newParticle == nullptr) - return; - G4Exception("G4VUserPhysicsList::AddProcessManager", "Run0252", - JustWarning, "This method is obsolete"); + if (newParticle == nullptr) return; + G4Exception("G4VUserPhysicsList::AddProcessManager", "Run0252", JustWarning, + "This method is obsolete"); } // -------------------------------------------------------------------- @@ -222,26 +205,22 @@ void G4VUserPhysicsList::InitializeProcessManager() G4MUTEXLOCK(&G4ParticleTable::particleTableMutex()); G4ParticleTable::lockCount()++; #endif - G4ParticleDefinition* gion = - G4ParticleTable::GetParticleTable()->GetGenericIon(); + G4ParticleDefinition* gion = G4ParticleTable::GetParticleTable()->GetGenericIon(); // loop over all particles in G4ParticleTable theParticleIterator->reset(); - while((*theParticleIterator)()) - { + while ((*theParticleIterator)()) { G4ParticleDefinition* particle = theParticleIterator->value(); - G4ProcessManager* pmanager = particle->GetProcessManager(); + G4ProcessManager* pmanager = particle->GetProcessManager(); - if(pmanager == nullptr) - { + if (pmanager == nullptr) { // create process manager if the particle does not have its own. pmanager = new G4ProcessManager(particle); particle->SetProcessManager(pmanager); - if(particle->GetMasterProcessManager() == nullptr) + if (particle->GetMasterProcessManager() == nullptr) particle->SetMasterProcessManager(pmanager); #ifdef G4VERBOSE - if(verboseLevel > 2) - { + if (verboseLevel > 2) { G4cout << "G4VUserPhysicsList::InitializeProcessManager: creating " "ProcessManager to " << particle->GetParticleName() << G4endl; @@ -250,20 +229,16 @@ void G4VUserPhysicsList::InitializeProcessManager() } } - if(gion != nullptr) - { + if (gion != nullptr) { G4ProcessManager* gionPM = gion->GetProcessManager(); // loop over all particles once again (this time, with all general ions) theParticleIterator->reset(false); - while((*theParticleIterator)()) - { + while ((*theParticleIterator)()) { G4ParticleDefinition* particle = theParticleIterator->value(); - if(particle->IsGeneralIon()) - { + if (particle->IsGeneralIon()) { particle->SetProcessManager(gionPM); #ifdef G4VERBOSE - if(verboseLevel > 2) - { + if (verboseLevel > 2) { G4cout << "G4VUserPhysicsList::InitializeProcessManager: copying " "ProcessManager to " << particle->GetParticleName() << G4endl; @@ -291,21 +266,17 @@ void G4VUserPhysicsList::RemoveProcessManager() // loop over all particles in G4ParticleTable theParticleIterator->reset(); - while((*theParticleIterator)()) - { + while ((*theParticleIterator)()) { G4ParticleDefinition* particle = theParticleIterator->value(); - if(particle->GetInstanceID() < - G4ParticleDefinitionSubInstanceManager::slavetotalspace()) - { - if(particle->GetParticleSubType() != "generic" || - particle->GetParticleName() == "GenericIon") + if (particle->GetInstanceID() < G4ParticleDefinitionSubInstanceManager::slavetotalspace()) { + if (particle->GetParticleSubType() != "generic" + || particle->GetParticleName() == "GenericIon") { G4ProcessManager* pmanager = particle->GetProcessManager(); - if(pmanager != nullptr) - delete pmanager; + + delete pmanager; #ifdef G4VERBOSE - if(verboseLevel > 2) - { + if (verboseLevel > 2) { G4cout << "G4VUserPhysicsList::RemoveProcessManager: "; G4cout << "remove ProcessManager from "; G4cout << particle->GetParticleName() << G4endl; @@ -327,18 +298,15 @@ void G4VUserPhysicsList::RemoveTrackingManager() { // One tracking manager may be registered for multiple particles, make sure // to delete every object only once. - std::unordered_set trackingManagers; + std::unordered_set trackingManagers; // loop over all particles in G4ParticleTable theParticleIterator->reset(); - while((*theParticleIterator)()) - { + while ((*theParticleIterator)()) { G4ParticleDefinition* particle = theParticleIterator->value(); - if (auto *trackingManager = particle->GetTrackingManager()) - { + if (auto* trackingManager = particle->GetTrackingManager()) { #ifdef G4VERBOSE - if(verboseLevel > 2) - { + if (verboseLevel > 2) { G4cout << "G4VUserPhysicsList::RemoveTrackingManager: "; G4cout << "remove TrackingManager from "; G4cout << particle->GetParticleName() << G4endl; @@ -349,8 +317,7 @@ void G4VUserPhysicsList::RemoveTrackingManager() } } - for (G4VTrackingManager *tm : trackingManagers) - { + for (G4VTrackingManager* tm : trackingManagers) { delete tm; } } @@ -358,27 +325,22 @@ void G4VUserPhysicsList::RemoveTrackingManager() // -------------------------------------------------------------------- void G4VUserPhysicsList::SetCuts() { - if(!isSetDefaultCutValue) - { + if (!isSetDefaultCutValue) { SetDefaultCutValue(defaultCutValue); } #ifdef G4VERBOSE - if(verboseLevel > 1) - { + if (verboseLevel > 1) { G4cout << "G4VUserPhysicsList::SetCuts: " << G4endl; - G4cout << "Cut for gamma: " << GetCutValue("gamma") / mm << "[mm]" - << G4endl; + G4cout << "Cut for gamma: " << GetCutValue("gamma") / mm << "[mm]" << G4endl; G4cout << "Cut for e-: " << GetCutValue("e-") / mm << "[mm]" << G4endl; G4cout << "Cut for e+: " << GetCutValue("e+") / mm << "[mm]" << G4endl; - G4cout << "Cut for proton: " << GetCutValue("proton") / mm << "[mm]" - << G4endl; + G4cout << "Cut for proton: " << GetCutValue("proton") / mm << "[mm]" << G4endl; } #endif // dump Cut values if verboseLevel==3 - if(verboseLevel > 2) - { + if (verboseLevel > 2) { DumpCutValuesTable(); } } @@ -386,11 +348,9 @@ void G4VUserPhysicsList::SetCuts() // -------------------------------------------------------------------- void G4VUserPhysicsList::SetDefaultCutValue(G4double value) { - if(value < 0.0) - { + if (value < 0.0) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4VUserPhysicsList::SetDefaultCutValue: negative cut values" << " :" << value / mm << "[mm]" << G4endl; } @@ -398,7 +358,7 @@ void G4VUserPhysicsList::SetDefaultCutValue(G4double value) return; } - defaultCutValue = value; + defaultCutValue = value; isSetDefaultCutValue = true; // set cut values for gamma at first and for e- and e+ @@ -408,11 +368,9 @@ void G4VUserPhysicsList::SetDefaultCutValue(G4double value) SetCutValue(defaultCutValue, "proton"); #ifdef G4VERBOSE - if(verboseLevel > 1) - { + if (verboseLevel > 1) { G4cout << "G4VUserPhysicsList::SetDefaultCutValue:" - << "default cut value is changed to :" << defaultCutValue / mm - << "[mm]" << G4endl; + << "default cut value is changed to :" << defaultCutValue / mm << "[mm]" << G4endl; } #endif } @@ -421,21 +379,17 @@ void G4VUserPhysicsList::SetDefaultCutValue(G4double value) G4double G4VUserPhysicsList::GetCutValue(const G4String& name) const { std::size_t nReg = (G4RegionStore::GetInstance())->size(); - if(nReg == 0) - { + if (nReg == 0) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4VUserPhysicsList::GetCutValue " << " : No Default Region " << G4endl; } #endif - G4Exception("G4VUserPhysicsList::GetCutValue", "Run0253", FatalException, - "No Default Region"); + G4Exception("G4VUserPhysicsList::GetCutValue", "Run0253", FatalException, "No Default Region"); return -1. * mm; } - G4Region* region = - G4RegionStore::GetInstance()->GetRegion("DefaultRegionForTheWorld", false); + G4Region* region = G4RegionStore::GetInstance()->GetRegion("DefaultRegionForTheWorld", false); return region->GetProductionCuts()->GetProductionCut(name); } @@ -446,20 +400,16 @@ void G4VUserPhysicsList::SetCutValue(G4double aCut, const G4String& name) } // -------------------------------------------------------------------- -void G4VUserPhysicsList::SetCutValue(G4double aCut, const G4String& pname, - const G4String& rname) +void G4VUserPhysicsList::SetCutValue(G4double aCut, const G4String& pname, const G4String& rname) { G4Region* region = G4RegionStore::GetInstance()->GetRegion(rname); - if(region != nullptr) - { + if (region != nullptr) { // set cut value SetParticleCuts(aCut, pname, region); } - else - { + else { #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4VUserPhysicsList::SetCutValue " << " : No Region of " << rname << G4endl; } @@ -485,23 +435,19 @@ void G4VUserPhysicsList::SetCutsForRegion(G4double aCut, const G4String& rname) } // -------------------------------------------------------------------- -void G4VUserPhysicsList::SetParticleCuts(G4double cut, - G4ParticleDefinition* particle, +void G4VUserPhysicsList::SetParticleCuts(G4double cut, G4ParticleDefinition* particle, G4Region* region) { SetParticleCuts(cut, particle->GetParticleName(), region); } // -------------------------------------------------------------------- -void G4VUserPhysicsList::SetParticleCuts(G4double cut, - const G4String& particleName, +void G4VUserPhysicsList::SetParticleCuts(G4double cut, const G4String& particleName, G4Region* region) { - if(cut < 0.0) - { + if (cut < 0.0) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4VUserPhysicsList::SetParticleCuts: negative cut values" << " :" << cut / mm << "[mm]" << " for " << particleName << G4endl; @@ -512,45 +458,38 @@ void G4VUserPhysicsList::SetParticleCuts(G4double cut, G4Region* world_region = G4RegionStore::GetInstance()->GetRegion("DefaultRegionForTheWorld", false); - if(region == nullptr) - { + if (region == nullptr) { std::size_t nReg = G4RegionStore::GetInstance()->size(); - if(nReg == 0) - { + if (nReg == 0) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4VUserPhysicsList::SetParticleCuts " << " : No Default Region " << G4endl; } #endif - G4Exception("G4VUserPhysicsList::SetParticleCuts ", "Run0254", - FatalException, "No Default Region"); + G4Exception("G4VUserPhysicsList::SetParticleCuts ", "Run0254", FatalException, + "No Default Region"); return; } region = world_region; } - if(!isSetDefaultCutValue) - { + if (!isSetDefaultCutValue) { SetDefaultCutValue(defaultCutValue); } G4ProductionCuts* pcuts = region->GetProductionCuts(); - if(region != world_region && - pcuts == G4ProductionCutsTable::GetProductionCutsTable() - ->GetDefaultProductionCuts()) + if (region != world_region + && pcuts == G4ProductionCutsTable::GetProductionCutsTable()->GetDefaultProductionCuts()) { // This region had no unique cuts yet but shares the default cuts. // Need to create a new object before setting the value. - pcuts = - new G4ProductionCuts(*(G4ProductionCutsTable::GetProductionCutsTable() - ->GetDefaultProductionCuts())); + pcuts = new G4ProductionCuts( + *(G4ProductionCutsTable::GetProductionCutsTable()->GetDefaultProductionCuts())); region->SetProductionCuts(pcuts); } pcuts->SetProductionCut(cut, particleName); #ifdef G4VERBOSE - if(verboseLevel > 2) - { + if (verboseLevel > 2) { G4cout << "G4VUserPhysicsList::SetParticleCuts: " << " :" << cut / mm << "[mm]" << " for " << particleName << G4endl; @@ -563,46 +502,37 @@ void G4VUserPhysicsList::BuildPhysicsTable() { // Prepare Physics table for all particles theParticleIterator->reset(); - while((*theParticleIterator)()) - { + while ((*theParticleIterator)()) { G4ParticleDefinition* particle = theParticleIterator->value(); PreparePhysicsTable(particle); } // ask processes to prepare physics table - if(fRetrievePhysicsTable) - { - fIsRestoredCutValues = - fCutsTable->RetrieveCutsTable(directoryPhysicsTable, fStoredInAscii); + if (fRetrievePhysicsTable) { + fIsRestoredCutValues = fCutsTable->RetrieveCutsTable(directoryPhysicsTable, fStoredInAscii); // check if retrieve Cut Table successfully - if(!fIsRestoredCutValues) - { + if (!fIsRestoredCutValues) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4VUserPhysicsList::BuildPhysicsTable" << " Retrieve Cut Table failed !!" << G4endl; } #endif - G4Exception("G4VUserPhysicsList::BuildPhysicsTable", "Run0255", - RunMustBeAborted, "Fail to retrieve Production Cut Table"); + G4Exception("G4VUserPhysicsList::BuildPhysicsTable", "Run0255", RunMustBeAborted, + "Fail to retrieve Production Cut Table"); } - else - { + else { #ifdef G4VERBOSE - if(verboseLevel > 2) - { + if (verboseLevel > 2) { G4cout << "G4VUserPhysicsList::BuildPhysicsTable" << " Retrieve Cut Table successfully " << G4endl; } #endif } } - else - { + else { #ifdef G4VERBOSE - if(verboseLevel > 2) - { + if (verboseLevel > 2) { G4cout << "G4VUserPhysicsList::BuildPhysicsTable" << " does not retrieve Cut Table but calculate " << G4endl; } @@ -613,25 +543,18 @@ void G4VUserPhysicsList::BuildPhysicsTable() // set cut values for gamma at first and for e- and e+ G4String particleName; G4ParticleDefinition* GammaP = theParticleTable->FindParticle("gamma"); - if(GammaP) - BuildPhysicsTable(GammaP); + if (GammaP != nullptr) BuildPhysicsTable(GammaP); G4ParticleDefinition* EMinusP = theParticleTable->FindParticle("e-"); - if(EMinusP) - BuildPhysicsTable(EMinusP); + if (EMinusP != nullptr) BuildPhysicsTable(EMinusP); G4ParticleDefinition* EPlusP = theParticleTable->FindParticle("e+"); - if(EPlusP) - BuildPhysicsTable(EPlusP); + if (EPlusP != nullptr) BuildPhysicsTable(EPlusP); G4ParticleDefinition* ProtonP = theParticleTable->FindParticle("proton"); - if(ProtonP) - BuildPhysicsTable(ProtonP); + if (ProtonP != nullptr) BuildPhysicsTable(ProtonP); theParticleIterator->reset(); - while((*theParticleIterator)()) - { + while ((*theParticleIterator)()) { G4ParticleDefinition* particle = theParticleIterator->value(); - if(particle != GammaP && particle != EMinusP && particle != EPlusP && - particle != ProtonP) - { + if (particle != GammaP && particle != EMinusP && particle != EPlusP && particle != ProtonP) { BuildPhysicsTable(particle); } } @@ -643,11 +566,9 @@ void G4VUserPhysicsList::BuildPhysicsTable() // -------------------------------------------------------------------- void G4VUserPhysicsList::BuildPhysicsTable(G4ParticleDefinition* particle) { - if (auto *trackingManager = particle->GetTrackingManager()) - { + if (auto* trackingManager = particle->GetTrackingManager()) { #ifdef G4VERBOSE - if(verboseLevel > 2) - { + if (verboseLevel > 2) { G4cout << "G4VUserPhysicsList::BuildPhysicsTable " << "Calculate Physics Table for " << particle->GetParticleName() << " via custom TrackingManager" << G4endl; @@ -659,39 +580,31 @@ void G4VUserPhysicsList::BuildPhysicsTable(G4ParticleDefinition* particle) // Change in order to share physics tables for two kind of process. - if(particle->GetMasterProcessManager() == nullptr) - { + if (particle->GetMasterProcessManager() == nullptr) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { G4cout - << "#### G4VUserPhysicsList::BuildPhysicsTable() - BuildPhysicsTable(" - << particle->GetParticleName() << ") skipped..." << G4endl; } + if (verboseLevel > 0) { + G4cout << "#### G4VUserPhysicsList::BuildPhysicsTable() - BuildPhysicsTable(" + << particle->GetParticleName() << ") skipped..." << G4endl; + } #endif return; } - if(fRetrievePhysicsTable) - { - if(!fIsRestoredCutValues) - { + if (fRetrievePhysicsTable) { + if (!fIsRestoredCutValues) { // fail to retrieve cut tables #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4VUserPhysicsList::BuildPhysicsTable " - << "Physics table can not be retrieved and will be calculated " - << G4endl; + << "Physics table can not be retrieved and will be calculated " << G4endl; } #endif fRetrievePhysicsTable = false; } - else - { + else { #ifdef G4VERBOSE - if(verboseLevel > 2) - { + if (verboseLevel > 2) { G4cout << "G4VUserPhysicsList::BuildPhysicsTable " - << " Retrieve Physics Table for " << particle->GetParticleName() - << G4endl; + << " Retrieve Physics Table for " << particle->GetParticleName() << G4endl; } #endif // Retrieve PhysicsTable from files for proccesses @@ -700,32 +613,25 @@ void G4VUserPhysicsList::BuildPhysicsTable(G4ParticleDefinition* particle) } #ifdef G4VERBOSE - if(verboseLevel > 2) - { + if (verboseLevel > 2) { G4cout << "G4VUserPhysicsList::BuildPhysicsTable " - << "Calculate Physics Table for " << particle->GetParticleName() - << G4endl; + << "Calculate Physics Table for " << particle->GetParticleName() << G4endl; } #endif // Rebuild the physics tables for every process for this particle type // if particle is not ShortLived - if(!particle->IsShortLived()) - { + if (!particle->IsShortLived()) { G4ProcessManager* pManager = particle->GetProcessManager(); - if(pManager == nullptr) - { + if (pManager == nullptr) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4VUserPhysicsList::BuildPhysicsTable " - << " : No Process Manager for " << particle->GetParticleName() - << G4endl; - G4cout << particle->GetParticleName() - << " should be created in your PhysicsList" << G4endl; + << " : No Process Manager for " << particle->GetParticleName() << G4endl; + G4cout << particle->GetParticleName() << " should be created in your PhysicsList" << G4endl; } #endif - G4Exception("G4VUserPhysicsList::BuildPhysicsTable", "Run0271", - FatalException, "No process manager"); + G4Exception("G4VUserPhysicsList::BuildPhysicsTable", "Run0271", FatalException, + "No process manager"); return; } @@ -733,94 +639,75 @@ void G4VUserPhysicsList::BuildPhysicsTable(G4ParticleDefinition* particle) G4ProcessManager* pManagerShadow = particle->GetMasterProcessManager(); G4ProcessVector* pVector = pManager->GetProcessList(); - if(pVector == nullptr) - { + if (pVector == nullptr) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4VUserPhysicsList::BuildPhysicsTable " - << " : No Process Vector for " << particle->GetParticleName() - << G4endl; + << " : No Process Vector for " << particle->GetParticleName() << G4endl; } #endif - G4Exception("G4VUserPhysicsList::BuildPhysicsTable", "Run0272", - FatalException, "No process Vector"); + G4Exception("G4VUserPhysicsList::BuildPhysicsTable", "Run0272", FatalException, + "No process Vector"); return; } #ifdef G4VERBOSE - if(verboseLevel > 2) - { - G4cout << "G4VUserPhysicsList::BuildPhysicsTable %%%%%% " - << particle->GetParticleName() << G4endl; - G4cout << " ProcessManager : " << pManager - << " ProcessManagerShadow : " << pManagerShadow << G4endl; - for(G4int iv1 = 0; iv1 < (G4int)pVector->size(); ++iv1) - { - G4cout << " " << iv1 << " - " << (*pVector)[iv1]->GetProcessName() - << G4endl; - } - G4cout << "--------------------------------------------------------------" + if (verboseLevel > 2) { + G4cout << "G4VUserPhysicsList::BuildPhysicsTable %%%%%% " << particle->GetParticleName() + << G4endl; + G4cout << " ProcessManager : " << pManager << " ProcessManagerShadow : " << pManagerShadow << G4endl; + for (G4int iv1 = 0; iv1 < (G4int)pVector->size(); ++iv1) { + G4cout << " " << iv1 << " - " << (*pVector)[iv1]->GetProcessName() << G4endl; + } + G4cout << "--------------------------------------------------------------" << G4endl; G4ProcessVector* pVectorShadow = pManagerShadow->GetProcessList(); - for(G4int iv2 = 0; iv2 < (G4int)pVectorShadow->size(); ++iv2) - { - G4cout << " " << iv2 << " - " - << (*pVectorShadow)[iv2]->GetProcessName() << G4endl; + for (G4int iv2 = 0; iv2 < (G4int)pVectorShadow->size(); ++iv2) { + G4cout << " " << iv2 << " - " << (*pVectorShadow)[iv2]->GetProcessName() << G4endl; } } #endif - for(G4int j = 0; j < (G4int)pVector->size(); ++j) - { + for (G4int j = 0; j < (G4int)pVector->size(); ++j) { // Andrea July 16th 2013 : migration to new interface... // Infer if we are in a worker thread or master thread // Master thread is the one in which the process manager // and process manager shadow pointers are the same - if(pManagerShadow == pManager) - { + if (pManagerShadow == pManager) { (*pVector)[j]->BuildPhysicsTable(*particle); } - else - { + else { (*pVector)[j]->BuildWorkerPhysicsTable(*particle); } } // End loop on processes vector - } // End if short-lived + } // End if short-lived } // -------------------------------------------------------------------- void G4VUserPhysicsList::PreparePhysicsTable(G4ParticleDefinition* particle) { - if (auto *trackingManager = particle->GetTrackingManager()) - { + if (auto* trackingManager = particle->GetTrackingManager()) { trackingManager->PreparePhysicsTable(*particle); return; } - if(!(particle->GetMasterProcessManager())) - { + if ((particle->GetMasterProcessManager()) == nullptr) { return; } // Prepare the physics tables for every process for this particle type // if particle is not ShortLived - if(!particle->IsShortLived()) - { + if (!particle->IsShortLived()) { G4ProcessManager* pManager = particle->GetProcessManager(); - if(pManager == nullptr) - { + if (pManager == nullptr) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4VUserPhysicsList::PreparePhysicsTable " - << ": No Process Manager for " << particle->GetParticleName() - << G4endl; - G4cout << particle->GetParticleName() - << " should be created in your PhysicsList" << G4endl; + << ": No Process Manager for " << particle->GetParticleName() << G4endl; + G4cout << particle->GetParticleName() << " should be created in your PhysicsList" << G4endl; } #endif - G4Exception("G4VUserPhysicsList::PreparePhysicsTable", "Run0273", - FatalException, "No process manager"); + G4Exception("G4VUserPhysicsList::PreparePhysicsTable", "Run0273", FatalException, + "No process manager"); return; } @@ -828,63 +715,51 @@ void G4VUserPhysicsList::PreparePhysicsTable(G4ParticleDefinition* particle) G4ProcessManager* pManagerShadow = particle->GetMasterProcessManager(); G4ProcessVector* pVector = pManager->GetProcessList(); - if(pVector == nullptr) - { + if (pVector == nullptr) { #ifdef G4VERBOSE - if(verboseLevel > 0) - { + if (verboseLevel > 0) { G4cout << "G4VUserPhysicsList::PreparePhysicsTable " - << ": No Process Vector for " << particle->GetParticleName() - << G4endl; + << ": No Process Vector for " << particle->GetParticleName() << G4endl; } #endif - G4Exception("G4VUserPhysicsList::PreparePhysicsTable", "Run0274", - FatalException, "No process Vector"); + G4Exception("G4VUserPhysicsList::PreparePhysicsTable", "Run0274", FatalException, + "No process Vector"); return; } - for(G4int j = 0; j < (G4int)pVector->size(); ++j) - { + for (G4int j = 0; j < (G4int)pVector->size(); ++j) { // Andrea July 16th 2013 : migration to new interface... // Infer if we are in a worker thread or master thread // Master thread is the one in which the process manager // and process manager shadow pointers are the same - if(pManagerShadow == pManager) - { + if (pManagerShadow == pManager) { (*pVector)[j]->PreparePhysicsTable(*particle); } - else - { + else { (*pVector)[j]->PrepareWorkerPhysicsTable(*particle); } } // End loop on processes vector - } // End if pn ShortLived + } // End if pn ShortLived } // -------------------------------------------------------------------- -void G4VUserPhysicsList::BuildIntegralPhysicsTable( - G4VProcess* process, G4ParticleDefinition* particle) +void G4VUserPhysicsList::BuildIntegralPhysicsTable(G4VProcess* process, + G4ParticleDefinition* particle) { // TODO Should we change this function? //******************************************************************* // Temporary addition to make the integral schema of electromagnetic // processes work. - if((process->GetProcessName() == "Imsc") || - (process->GetProcessName() == "IeIoni") || - (process->GetProcessName() == "IeBrems") || - (process->GetProcessName() == "Iannihil") || - (process->GetProcessName() == "IhIoni") || - (process->GetProcessName() == "IMuIoni") || - (process->GetProcessName() == "IMuBrems") || - (process->GetProcessName() == "IMuPairProd")) + if ((process->GetProcessName() == "Imsc") || (process->GetProcessName() == "IeIoni") + || (process->GetProcessName() == "IeBrems") || (process->GetProcessName() == "Iannihil") + || (process->GetProcessName() == "IhIoni") || (process->GetProcessName() == "IMuIoni") + || (process->GetProcessName() == "IMuBrems") || (process->GetProcessName() == "IMuPairProd")) { #ifdef G4VERBOSE - if(verboseLevel > 2) - { + if (verboseLevel > 2) { G4cout << "G4VUserPhysicsList::BuildIntegralPhysicsTable " - << " BuildPhysicsTable is invoked for " - << process->GetProcessName() << "(" << particle->GetParticleName() - << ")" << G4endl; + << " BuildPhysicsTable is invoked for " << process->GetProcessName() << "(" + << particle->GetParticleName() << ")" << G4endl; } #endif process->BuildPhysicsTable(*particle); @@ -896,16 +771,13 @@ void G4VUserPhysicsList::DumpList() const { theParticleIterator->reset(); G4int idx = 0; - while((*theParticleIterator)()) - { + while ((*theParticleIterator)()) { G4ParticleDefinition* particle = theParticleIterator->value(); G4cout << particle->GetParticleName(); - if((idx++ % 4) == 3) - { + if ((idx++ % 4) == 3) { G4cout << G4endl; } - else - { + else { G4cout << ", "; } } @@ -921,8 +793,7 @@ void G4VUserPhysicsList::DumpCutValuesTable(G4int flag) // -------------------------------------------------------------------- void G4VUserPhysicsList::DumpCutValuesTableIfRequested() { - if(fDisplayThreshold == 0) - return; + if (fDisplayThreshold == 0) return; G4ProductionCutsTable::GetProductionCutsTable()->DumpCouples(); fDisplayThreshold = 0; } @@ -932,21 +803,19 @@ G4bool G4VUserPhysicsList::StorePhysicsTable(const G4String& directory) { G4bool ascii = fStoredInAscii; G4String dir = directory; - if(dir.empty()) + if (dir.empty()) dir = directoryPhysicsTable; else directoryPhysicsTable = dir; // store CutsTable info - if(!fCutsTable->StoreCutsTable(dir, ascii)) - { + if (!fCutsTable->StoreCutsTable(dir, ascii)) { G4Exception("G4VUserPhysicsList::StorePhysicsTable", "Run0281", JustWarning, "Fail to store Cut Table"); return false; } #ifdef G4VERBOSE - if(verboseLevel > 2) - { + if (verboseLevel > 2) { G4cout << "G4VUserPhysicsList::StorePhysicsTable " << " Store material and cut values successfully" << G4endl; } @@ -956,21 +825,16 @@ G4bool G4VUserPhysicsList::StorePhysicsTable(const G4String& directory) // loop over all particles in G4ParticleTable theParticleIterator->reset(); - while((*theParticleIterator)()) - { + while ((*theParticleIterator)()) { G4ParticleDefinition* particle = theParticleIterator->value(); // Store physics tables for every process for this particle type - G4ProcessVector* pVector = - (particle->GetProcessManager())->GetProcessList(); - for(G4int j = 0; j < (G4int)pVector->size(); ++j) - { - if(!(*pVector)[j]->StorePhysicsTable(particle, dir, ascii)) - { + G4ProcessVector* pVector = (particle->GetProcessManager())->GetProcessList(); + for (G4int j = 0; j < (G4int)pVector->size(); ++j) { + if (!(*pVector)[j]->StorePhysicsTable(particle, dir, ascii)) { G4String comment = "Fail to store physics table for "; comment += (*pVector)[j]->GetProcessName(); comment += "(" + particle->GetParticleName() + ")"; - G4Exception("G4VUserPhysicsList::StorePhysicsTable", "Run0282", - JustWarning, comment); + G4Exception("G4VUserPhysicsList::StorePhysicsTable", "Run0282", JustWarning, comment); success = false; } } @@ -984,47 +848,38 @@ G4bool G4VUserPhysicsList::StorePhysicsTable(const G4String& directory) void G4VUserPhysicsList::SetPhysicsTableRetrieved(const G4String& directory) { fRetrievePhysicsTable = true; - if(!directory.empty()) - { + if (!directory.empty()) { directoryPhysicsTable = directory; } fIsCheckedForRetrievePhysicsTable = false; - fIsRestoredCutValues = false; + fIsRestoredCutValues = false; } // -------------------------------------------------------------------- void G4VUserPhysicsList::RetrievePhysicsTable(G4ParticleDefinition* particle, - const G4String& directory, - G4bool ascii) + const G4String& directory, G4bool ascii) { G4bool success[100]; // Retrieve physics tables for every process for this particle type G4ProcessVector* pVector = (particle->GetProcessManager())->GetProcessList(); - for(G4int j = 0; j < (G4int)pVector->size(); ++j) - { - success[j] = - (*pVector)[j]->RetrievePhysicsTable(particle, directory, ascii); + for (G4int j = 0; j < (G4int)pVector->size(); ++j) { + success[j] = (*pVector)[j]->RetrievePhysicsTable(particle, directory, ascii); - if(!success[j]) - { + if (!success[j]) { #ifdef G4VERBOSE - if(verboseLevel > 2) - { + if (verboseLevel > 2) { G4cout << "G4VUserPhysicsList::RetrievePhysicsTable " - << " Fail to retrieve Physics Table for " - << (*pVector)[j]->GetProcessName() << G4endl; - G4cout << "Calculate Physics Table for " << particle->GetParticleName() + << " Fail to retrieve Physics Table for " << (*pVector)[j]->GetProcessName() << G4endl; + G4cout << "Calculate Physics Table for " << particle->GetParticleName() << G4endl; } #endif (*pVector)[j]->BuildPhysicsTable(*particle); } } - for(G4int j = 0; j < (G4int)pVector->size(); ++j) - { + for (G4int j = 0; j < (G4int)pVector->size(); ++j) { // temporary addition to make the integral schema - if(!success[j]) - BuildIntegralPhysicsTable((*pVector)[j], particle); + if (!success[j]) BuildIntegralPhysicsTable((*pVector)[j], particle); } } @@ -1032,20 +887,17 @@ void G4VUserPhysicsList::RetrievePhysicsTable(G4ParticleDefinition* particle, void G4VUserPhysicsList::SetApplyCuts(G4bool value, const G4String& name) { #ifdef G4VERBOSE - if(verboseLevel > 2) - { + if (verboseLevel > 2) { G4cout << "G4VUserPhysicsList::SetApplyCuts for " << name << G4endl; } #endif - if(name == "all") - { + if (name == "all") { theParticleTable->FindParticle("gamma")->SetApplyCutsFlag(value); theParticleTable->FindParticle("e-")->SetApplyCutsFlag(value); theParticleTable->FindParticle("e+")->SetApplyCutsFlag(value); theParticleTable->FindParticle("proton")->SetApplyCutsFlag(value); } - else - { + else { theParticleTable->FindParticle(name)->SetApplyCutsFlag(value); } } @@ -1059,8 +911,7 @@ G4bool G4VUserPhysicsList::GetApplyCuts(const G4String& name) const // -------------------------------------------------------------------- void G4VUserPhysicsList::CheckParticleList() { - if(!fDisableCheckParticleList) - { + if (!fDisableCheckParticleList) { G4MT_thePLHelper->CheckParticleList(); } } @@ -1078,15 +929,13 @@ void G4VUserPhysicsList::UseCoupledTransportation(G4bool vl) } // -------------------------------------------------------------------- -G4bool G4VUserPhysicsList::RegisterProcess(G4VProcess* process, - G4ParticleDefinition* particle) +G4bool G4VUserPhysicsList::RegisterProcess(G4VProcess* process, G4ParticleDefinition* particle) { return G4MT_thePLHelper->RegisterProcess(process, particle); } // -------------------------------------------------------------------- -G4ParticleTable::G4PTblDicIterator* -G4VUserPhysicsList::GetParticleIterator() const +G4ParticleTable::G4PTblDicIterator* G4VUserPhysicsList::GetParticleIterator() const { return (subInstanceManager.offset[g4vuplInstanceID])._theParticleIterator; } @@ -1102,8 +951,7 @@ void G4VUserPhysicsList::SetVerboseLevel(G4int value) G4MT_thePLHelper->SetVerboseLevel(verboseLevel); #ifdef G4VERBOSE - if(verboseLevel > 1) - { + if (verboseLevel > 1) { G4cout << "G4VUserPhysicsList::SetVerboseLevel :" << " Verbose level is set to " << verboseLevel << G4endl; } diff --git a/source/run/src/G4VUserPrimaryGeneratorAction.cc b/source/run/src/G4VUserPrimaryGeneratorAction.cc index 0b8707cbfaf..975b6bdc3ae 100644 --- a/source/run/src/G4VUserPrimaryGeneratorAction.cc +++ b/source/run/src/G4VUserPrimaryGeneratorAction.cc @@ -29,31 +29,22 @@ // -------------------------------------------------------------------- #include "G4VUserPrimaryGeneratorAction.hh" + #include "G4ParticleTable.hh" #include "globals.hh" // -------------------------------------------------------------------- G4VUserPrimaryGeneratorAction::G4VUserPrimaryGeneratorAction() { - if(!(G4ParticleTable::GetParticleTable()->GetReadiness())) - { + if (!(G4ParticleTable::GetParticleTable()->GetReadiness())) { G4String msg; msg = " You are instantiating G4VUserPrimaryGeneratorAction BEFORE your\n"; msg += "G4VUserPhysicsList is instantiated and assigned to G4RunManager.\n"; - msg += - " Such an instantiation is prohibited. To fix this problem,\n"; - msg += - "please make sure that your main() instantiates G4VUserPhysicsList AND\n"; - msg += - "set it to G4RunManager before instantiating other user action classes\n"; + msg += " Such an instantiation is prohibited. To fix this problem,\n"; + msg += "please make sure that your main() instantiates G4VUserPhysicsList AND\n"; + msg += "set it to G4RunManager before instantiating other user action classes\n"; msg += "such as G4VUserPrimaryParticleGeneratorAction."; - G4Exception( - "G4VUserPrimaryGeneratorAction::G4VUserPrimaryGeneratorAction()", - "Run0061", FatalException, msg); + G4Exception("G4VUserPrimaryGeneratorAction::G4VUserPrimaryGeneratorAction()", "Run0061", + FatalException, msg); } } - -// -------------------------------------------------------------------- -G4VUserPrimaryGeneratorAction::~G4VUserPrimaryGeneratorAction() -{ -} diff --git a/source/run/src/G4WorkerRunManager.cc b/source/run/src/G4WorkerRunManager.cc index c7f227f6179..e895c5679a2 100644 --- a/source/run/src/G4WorkerRunManager.cc +++ b/source/run/src/G4WorkerRunManager.cc @@ -28,12 +28,13 @@ // Original authors: X.Dong, A.Dotti - 2013 // -------------------------------------------------------------------- -#include -#include - #include "G4WorkerRunManager.hh" + +#include "G4AutoLock.hh" +#include "G4CopyRandomState.hh" #include "G4MTRunManager.hh" #include "G4ParallelWorldProcess.hh" +#include "G4ParallelWorldProcessStore.hh" #include "G4RNGHelper.hh" #include "G4Run.hh" #include "G4SDManager.hh" @@ -54,9 +55,9 @@ #include "G4VVisManager.hh" #include "G4WorkerRunManagerKernel.hh" #include "G4WorkerThread.hh" -#include "G4MTRunManager.hh" -#include "G4ParallelWorldProcessStore.hh" -#include "G4AutoLock.hh" + +#include +#include // -------------------------------------------------------------------- G4WorkerRunManager* G4WorkerRunManager::GetWorkerRunManager() @@ -71,8 +72,7 @@ G4WorkerRunManagerKernel* G4WorkerRunManager::GetWorkerRunManagerKernel() } // -------------------------------------------------------------------- -G4WorkerRunManager::G4WorkerRunManager() - : G4RunManager(workerRM) +G4WorkerRunManager::G4WorkerRunManager() : G4RunManager(workerRM) { // This constructor should never be called in non-multithreaded mode @@ -83,26 +83,20 @@ G4WorkerRunManager::G4WorkerRunManager() "is set to off)."; msg << " This type of RunManager can only be used in mult-threaded " "applications."; - G4Exception("G4WorkerRunManager::G4WorkerRunManager()", "Run0103", - FatalException, msg); + G4Exception("G4WorkerRunManager::G4WorkerRunManager()", "Run0103", FatalException, msg); #endif G4ParticleTable::GetParticleTable()->WorkerG4ParticleTable(); G4ScoringManager* masterScM = G4MTRunManager::GetMasterScoringManager(); - if(masterScM != nullptr) - G4ScoringManager::GetScoringManager(); // TLS instance for a worker + if (masterScM != nullptr) G4ScoringManager::GetScoringManager(); // TLS instance for a worker // Properly initialise luxury level for Ranlux* engines... // - if(dynamic_cast(G4Random::getTheEngine())) - { - const CLHEP::Ranlux64Engine* theEngine = - dynamic_cast(G4Random::getTheEngine()); + if (dynamic_cast(G4Random::getTheEngine()) != nullptr) { + const auto theEngine = dynamic_cast(G4Random::getTheEngine()); luxury = theEngine->getLuxury(); } - else if(dynamic_cast(G4Random::getTheEngine())) - { - const CLHEP::RanluxEngine* theEngine = - dynamic_cast(G4Random::getTheEngine()); + else if (dynamic_cast(G4Random::getTheEngine()) != nullptr) { + const auto theEngine = dynamic_cast(G4Random::getTheEngine()); luxury = theEngine->getLuxury(); } @@ -110,8 +104,7 @@ G4WorkerRunManager::G4WorkerRunManager() #ifdef G4MULTITHREADED G4VVisManager* pVVis = G4VVisManager::GetConcreteInstance(); - if(pVVis != nullptr) - { + if (pVVis != nullptr) { pVVis->SetUpForAThread(); visIsSetUp = true; } @@ -121,43 +114,32 @@ G4WorkerRunManager::G4WorkerRunManager() // -------------------------------------------------------------------- G4WorkerRunManager::~G4WorkerRunManager() { - // Delete thread-local data process manager objects - if(physicsList) - { - // physicsList->TerminateWorker(); - // physicsList->RemoveProcessManager(); - } - // Put these pointers to zero: owned by master thread // If not to zero, the base class destructor will attempt to // delete them - userDetector = nullptr; - userWorkerInitialization = nullptr; + userDetector = nullptr; + userWorkerInitialization = nullptr; userWorkerThreadInitialization = nullptr; - userActionInitialization = nullptr; - physicsList = nullptr; - if(verboseLevel > 1) - G4cout << "Destroying WorkerRunManager (" << this << ")" << G4endl; + userActionInitialization = nullptr; + physicsList = nullptr; + if (verboseLevel > 1) G4cout << "Destroying WorkerRunManager (" << this << ")" << G4endl; } // -------------------------------------------------------------------- void G4WorkerRunManager::InitializeGeometry() { - if(userDetector == nullptr) - { + if (userDetector == nullptr) { G4Exception("G4RunManager::InitializeGeometry", "Run0033", FatalException, "G4VUserDetectorConstruction is not defined!"); return; } - if(fGeometryHasBeenDestroyed) - { + if (fGeometryHasBeenDestroyed) { G4TransportationManager::GetTransportationManager()->ClearParallelWorlds(); } // Step1: Get pointer to the physiWorld (note: needs to get the "super // pointer, i.e. the one shared by all threads" - G4RunManagerKernel* masterKernel = - G4MTRunManager::GetMasterRunManagerKernel(); + G4RunManagerKernel* masterKernel = G4MTRunManager::GetMasterRunManagerKernel(); G4VPhysicalVolume* worldVol = masterKernel->GetCurrentWorld(); // Step2:, Call a new "WorkerDefineWorldVolume( pointer from 2-, false); kernel->WorkerDefineWorldVolume(worldVol, false); @@ -172,25 +154,21 @@ void G4WorkerRunManager::InitializeGeometry() void G4WorkerRunManager::RunInitialization() { #ifdef G4MULTITHREADED - if(!visIsSetUp) - { + if (!visIsSetUp) { G4VVisManager* pVVis = G4VVisManager::GetConcreteInstance(); - if(pVVis != nullptr) - { + if (pVVis != nullptr) { pVVis->SetUpForAThread(); visIsSetUp = true; } } #endif - if(!(kernel->RunInitialization(fakeRun))) - return; + if (!(kernel->RunInitialization(fakeRun))) return; // Signal this thread can start event loop. // Note this will return only when all threads reach this point G4MTRunManager::GetMasterRunManager()->ThisWorkerReady(); - if(fakeRun) - return; + if (fakeRun) return; const G4UserWorkerInitialization* uwi = G4MTRunManager::GetMasterRunManager()->GetUserWorkerInitialization(); @@ -198,30 +176,24 @@ void G4WorkerRunManager::RunInitialization() delete currentRun; currentRun = nullptr; - if(fGeometryHasBeenDestroyed) - G4ParallelWorldProcessStore::GetInstance()->UpdateWorlds(); + if (fGeometryHasBeenDestroyed) G4ParallelWorldProcessStore::GetInstance()->UpdateWorlds(); // Call a user hook: this is guaranteed all threads are "synchronized" - if(uwi) - uwi->WorkerRunStart(); + if (uwi != nullptr) uwi->WorkerRunStart(); - if(userRunAction) - currentRun = userRunAction->GenerateRun(); - if(currentRun == nullptr) - currentRun = new G4Run(); + if (userRunAction != nullptr) currentRun = userRunAction->GenerateRun(); + if (currentRun == nullptr) currentRun = new G4Run(); currentRun->SetRunID(runIDCounter); currentRun->SetNumberOfEventToBeProcessed(numberOfEventToBeProcessed); currentRun->SetDCtable(DCtable); G4SDManager* fSDM = G4SDManager::GetSDMpointerIfExist(); - if(fSDM != nullptr) - { + if (fSDM != nullptr) { currentRun->SetHCtable(fSDM->GetHCtable()); } - if(G4VScoreNtupleWriter::Instance()) - { - auto hce = (fSDM != nullptr) ? fSDM->PrepareNewEvent() : nullptr; + if (G4VScoreNtupleWriter::Instance() != nullptr) { + auto hce = (fSDM != nullptr) ? fSDM->PrepareNewEvent() : nullptr; isScoreNtupleWriter = G4VScoreNtupleWriter::Instance()->Book(hce); delete hce; } @@ -231,35 +203,27 @@ void G4WorkerRunManager::RunInitialization() randomNumberStatusForThisRun = oss.str(); currentRun->SetRandomNumberStatus(randomNumberStatusForThisRun); - for(G4int i_prev = 0; i_prev < n_perviousEventsToBeStored; ++i_prev) - { + for (G4int i_prev = 0; i_prev < n_perviousEventsToBeStored; ++i_prev) { previousEvents->push_back(nullptr); } - if(printModulo > 0 || verboseLevel > 0) - { - G4cout << "### Run " << currentRun->GetRunID() - << " starts on worker thread " - << G4Threading::G4GetThreadId() << "." - << G4endl; + if (printModulo > 0 || verboseLevel > 0) { + G4cout << "### Run " << currentRun->GetRunID() << " starts on worker thread " + << G4Threading::G4GetThreadId() << "." << G4endl; } - if(userRunAction != nullptr) - userRunAction->BeginOfRunAction(currentRun); + if (userRunAction != nullptr) userRunAction->BeginOfRunAction(currentRun); #if defined(GEANT4_USE_TIMEMORY) workerRunProfiler.reset(new ProfilerConfig(currentRun)); #endif - if(isScoreNtupleWriter) - { + if (isScoreNtupleWriter) { G4VScoreNtupleWriter::Instance()->OpenFile(); } - if(storeRandomNumberStatus) - { + if (storeRandomNumberStatus) { G4String fileN = "currentRun"; - if(rngStatusEventsFlag) - { + if (rngStatusEventsFlag) { std::ostringstream os; os << "run" << currentRun->GetRunID(); fileN = os.str(); @@ -267,16 +231,14 @@ void G4WorkerRunManager::RunInitialization() StoreRNGStatus(fileN); } - runAborted = false; + runAborted = false; numberOfEventProcessed = 0; } // -------------------------------------------------------------------- -void G4WorkerRunManager::DoEventLoop(G4int n_event, const char* macroFile, - G4int n_select) +void G4WorkerRunManager::DoEventLoop(G4int n_event, const char* macroFile, G4int n_select) { - if(userPrimaryGeneratorAction == nullptr) - { + if (userPrimaryGeneratorAction == nullptr) { G4Exception("G4RunManager::GenerateEvent()", "Run0032", FatalException, "G4VUserPrimaryGeneratorAction is not defined!"); } @@ -286,8 +248,7 @@ void G4WorkerRunManager::DoEventLoop(G4int n_event, const char* macroFile, InitializeEventLoop(n_event, macroFile, n_select); // Reset random number seeds queue - while(seedsQueue.size() > 0) - { + while (!seedsQueue.empty()) { seedsQueue.pop(); } // for each run, worker should receive at least one set of random number @@ -298,24 +259,16 @@ void G4WorkerRunManager::DoEventLoop(G4int n_event, const char* macroFile, eventLoopOnGoing = true; /////// G4int i_event = workerContext->GetThreadId(); G4int i_event = -1; - nevModulo = -1; - currEvID = -1; + nevModulo = -1; + currEvID = -1; - while(eventLoopOnGoing) - { + while (eventLoopOnGoing) { ProcessOneEvent(i_event); - if(eventLoopOnGoing) - { + if (eventLoopOnGoing) { TerminateOneEvent(); - if(runAborted) - { + if (runAborted) { eventLoopOnGoing = false; } - ////// else - ////// { - ////// i_event += workerContext->GetNumberThreads(); - ////// eventLoopOnGoing = i_eventProcessOneEvent(currentEvent); AnalyzeEvent(currentEvent); UpdateScoring(); - if(currentEvent->GetEventID() < n_select_msg) + if (currentEvent->GetEventID() < n_select_msg) G4UImanager::GetUIpointer()->ApplyCommand(msgText); } } @@ -339,50 +291,40 @@ void G4WorkerRunManager::ProcessOneEvent(G4int i_event) // -------------------------------------------------------------------- G4Event* G4WorkerRunManager::GenerateEvent(G4int i_event) { - G4Event* anEvent = new G4Event(i_event); - G4long s1 = 0; - G4long s2 = 0; - G4long s3 = 0; + auto anEvent = new G4Event(i_event); + G4long s1 = 0; + G4long s2 = 0; + G4long s3 = 0; G4bool eventHasToBeSeeded = true; - if(G4MTRunManager::SeedOncePerCommunication() == 1 && runIsSeeded) - { + if (G4MTRunManager::SeedOncePerCommunication() == 1 && runIsSeeded) { eventHasToBeSeeded = false; } - if(i_event < 0) - { + if (i_event < 0) { G4int nevM = G4MTRunManager::GetMasterRunManager()->GetEventModulo(); - if(nevM == 1) - { - eventLoopOnGoing = G4MTRunManager::GetMasterRunManager()->SetUpAnEvent( - anEvent, s1, s2, s3, eventHasToBeSeeded); + if (nevM == 1) { + eventLoopOnGoing = G4MTRunManager::GetMasterRunManager()->SetUpAnEvent(anEvent, s1, s2, s3, + eventHasToBeSeeded); runIsSeeded = true; } - else - { - if(nevModulo <= 0) - { - G4int nevToDo = G4MTRunManager::GetMasterRunManager()->SetUpNEvents( - anEvent, &seedsQueue, eventHasToBeSeeded); - if(nevToDo == 0) - { + else { + if (nevModulo <= 0) { + G4int nevToDo = G4MTRunManager::GetMasterRunManager()->SetUpNEvents(anEvent, &seedsQueue, + eventHasToBeSeeded); + if (nevToDo == 0) { eventLoopOnGoing = false; } - else - { - currEvID = anEvent->GetEventID(); + else { + currEvID = anEvent->GetEventID(); nevModulo = nevToDo - 1; } } - else - { - if(G4MTRunManager::SeedOncePerCommunication() > 0) - eventHasToBeSeeded = false; + else { + if (G4MTRunManager::SeedOncePerCommunication() > 0) eventHasToBeSeeded = false; anEvent->SetEventID(++currEvID); --nevModulo; } - if(eventLoopOnGoing && eventHasToBeSeeded) - { + if (eventLoopOnGoing && eventHasToBeSeeded) { s1 = seedsQueue.front(); seedsQueue.pop(); s2 = seedsQueue.front(); @@ -390,23 +332,20 @@ G4Event* G4WorkerRunManager::GenerateEvent(G4int i_event) } } - if(!eventLoopOnGoing) - { + if (!eventLoopOnGoing) { delete anEvent; return nullptr; } } - else if(eventHasToBeSeeded) - { + else if (eventHasToBeSeeded) { // Need to reseed random number generator G4RNGHelper* helper = G4RNGHelper::GetInstance(); - s1 = helper->GetSeed(i_event * 2); - s2 = helper->GetSeed(i_event * 2 + 1); + s1 = helper->GetSeed(i_event * 2); + s2 = helper->GetSeed(i_event * 2 + 1); } - if(eventHasToBeSeeded) - { - G4long seeds[3] = { s1, s2, 0 }; + if (eventHasToBeSeeded) { + G4long seeds[3] = {s1, s2, 0}; G4Random::setTheSeeds(seeds, luxury); runIsSeeded = true; } @@ -425,44 +364,37 @@ G4Event* G4WorkerRunManager::GenerateEvent(G4int i_event) }; G4bool RNGstatusReadFromFile = false; - if(readStatusFromFile) - { + if (readStatusFromFile) { // Build full path of RNG status file for this event std::ostringstream os; os << filename() << ".rndm"; const G4String& randomStatusFile = os.str(); std::ifstream ifile(randomStatusFile.c_str()); - if(ifile) - { // File valid and readable + if (ifile) { // File valid and readable RNGstatusReadFromFile = true; G4Random::restoreEngineStatus(randomStatusFile.c_str()); } } - if(storeRandomNumberStatusToG4Event == 1 || - storeRandomNumberStatusToG4Event == 3) - { + if (storeRandomNumberStatusToG4Event == 1 || storeRandomNumberStatusToG4Event == 3) { std::ostringstream oss; G4Random::saveFullState(oss); randomNumberStatusForThisEvent = oss.str(); anEvent->SetRandomNumberStatus(randomNumberStatusForThisEvent); } - if(storeRandomNumberStatus && !RNGstatusReadFromFile) + if (storeRandomNumberStatus && !RNGstatusReadFromFile) { // If reading from file, avoid to rewrite the same G4String fileN = "currentEvent"; - if(rngStatusEventsFlag) - { + if (rngStatusEventsFlag) { fileN = filename(); } StoreRNGStatus(fileN); } - if(printModulo > 0 && anEvent->GetEventID() % printModulo == 0) - { + if (printModulo > 0 && anEvent->GetEventID() % printModulo == 0) { G4cout << "--> Event " << anEvent->GetEventID() << " starts"; - if(eventHasToBeSeeded) - { + if (eventHasToBeSeeded) { G4cout << " with initial seeds (" << s1 << "," << s2 << ")"; } G4cout << "." << G4endl; @@ -475,18 +407,16 @@ G4Event* G4WorkerRunManager::GenerateEvent(G4int i_event) void G4WorkerRunManager::MergePartialResults() { // Merge partial results into global run - G4MTRunManager* mtRM = G4MTRunManager::GetMasterRunManager(); + G4MTRunManager* mtRM = G4MTRunManager::GetMasterRunManager(); G4ScoringManager* ScM = G4ScoringManager::GetScoringManagerIfExist(); - if(ScM != nullptr) - mtRM->MergeScores(ScM); + if (ScM != nullptr) mtRM->MergeScores(ScM); mtRM->MergeRun(currentRun); } // -------------------------------------------------------------------- void G4WorkerRunManager::RunTermination() { - if(!fakeRun) - { + if (!fakeRun) { #if defined(GEANT4_USE_TIMEMORY) workerRunProfiler.reset(); #endif @@ -497,8 +427,7 @@ void G4WorkerRunManager::RunTermination() //(TerminateRun allows for synch via G4RunAction::EndOfRun) const G4UserWorkerInitialization* uwi = G4MTRunManager::GetMasterRunManager()->GetUserWorkerInitialization(); - if(uwi != nullptr) - uwi->WorkerRunEnd(); + if (uwi != nullptr) uwi->WorkerRunEnd(); } G4RunManager::RunTermination(); @@ -510,20 +439,15 @@ void G4WorkerRunManager::RunTermination() // -------------------------------------------------------------------- void G4WorkerRunManager::TerminateEventLoop() { - if(verboseLevel > 0 && !fakeRun) - { + if (verboseLevel > 0 && !fakeRun) { timer->Stop(); G4cout << "Thread-local run terminated." << G4endl; G4cout << "Run Summary" << G4endl; - if(runAborted) - { - G4cout << " Run Aborted after " << numberOfEventProcessed - << " events processed." << G4endl; + if (runAborted) { + G4cout << " Run Aborted after " << numberOfEventProcessed << " events processed." << G4endl; } - else - { - G4cout << " Number of events processed : " << numberOfEventProcessed - << G4endl; + else { + G4cout << " Number of events processed : " << numberOfEventProcessed << G4endl; } G4cout << " " << *timer << G4endl; } @@ -532,7 +456,7 @@ void G4WorkerRunManager::TerminateEventLoop() // -------------------------------------------------------------------- namespace { - G4Mutex ConstructScoringWorldsMutex = G4MUTEX_INITIALIZER; +G4Mutex ConstructScoringWorldsMutex = G4MUTEX_INITIALIZER; } // -------------------------------------------------------------------- @@ -542,11 +466,9 @@ void G4WorkerRunManager::ConstructScoringWorlds() // Return if unnecessary G4ScoringManager* ScM = G4ScoringManager::GetScoringManagerIfExist(); - if(ScM == nullptr) - return; - G4int nPar = (G4int)ScM->GetNumberOfMesh(); - if(nPar < 1) - return; + if (ScM == nullptr) return; + auto nPar = (G4int)ScM->GetNumberOfMesh(); + if (nPar < 1) return; // Update thread-local G4TransportationManager of all the world volumes kernel->WorkerUpdateWorldVolume(); @@ -555,66 +477,48 @@ void G4WorkerRunManager::ConstructScoringWorlds() auto particleIterator = G4ParticleTable::GetParticleTable()->GetIterator(); - for(G4int iw = 0; iw < nPar; ++iw) - { + for (G4int iw = 0; iw < nPar; ++iw) { G4VScoringMesh* mesh = ScM->GetMesh(iw); - if(fGeometryHasBeenDestroyed) - mesh->GeometryHasBeenDestroyed(); + if (fGeometryHasBeenDestroyed) mesh->GeometryHasBeenDestroyed(); G4VPhysicalVolume* pWorld = nullptr; - if(mesh->GetShape() != MeshShape::realWorldLogVol) - { - pWorld = G4TransportationManager::GetTransportationManager() - ->IsWorldExisting(ScM->GetWorldName(iw)); - if(pWorld == nullptr) - { + if (mesh->GetShape() != MeshShape::realWorldLogVol) { + pWorld = + G4TransportationManager::GetTransportationManager()->IsWorldExisting(ScM->GetWorldName(iw)); + if (pWorld == nullptr) { G4ExceptionDescription ed; - ed << "Mesh name <" << ScM->GetWorldName(iw) - << "> is not found in the master thread."; - G4Exception("G4WorkerRunManager::ConstructScoringWorlds()", "RUN79001", - FatalException, ed); + ed << "Mesh name <" << ScM->GetWorldName(iw) << "> is not found in the master thread."; + G4Exception("G4WorkerRunManager::ConstructScoringWorlds()", "RUN79001", FatalException, ed); } } - if(!(mesh->GetMeshElementLogical())) - { + if ((mesh->GetMeshElementLogical()) == nullptr) { G4AutoLock l(&ConstructScoringWorldsMutex); G4VScoringMesh* masterMesh = masterScM->GetMesh(iw); mesh->SetMeshElementLogical(masterMesh->GetMeshElementLogical()); l.unlock(); - if(mesh->GetShape() != MeshShape::realWorldLogVol) - { - G4ParallelWorldProcess* theParallelWorldProcess = - mesh->GetParallelWorldProcess(); - if(theParallelWorldProcess != nullptr) - { + if (mesh->GetShape() != MeshShape::realWorldLogVol) { + G4ParallelWorldProcess* theParallelWorldProcess = mesh->GetParallelWorldProcess(); + if (theParallelWorldProcess != nullptr) { theParallelWorldProcess->SetParallelWorld(ScM->GetWorldName(iw)); } - else - { - theParallelWorldProcess = - new G4ParallelWorldProcess(ScM->GetWorldName(iw)); + else { + theParallelWorldProcess = new G4ParallelWorldProcess(ScM->GetWorldName(iw)); mesh->SetParallelWorldProcess(theParallelWorldProcess); theParallelWorldProcess->SetParallelWorld(ScM->GetWorldName(iw)); particleIterator->reset(); - while((*particleIterator)()) - { + while ((*particleIterator)()) { G4ParticleDefinition* particle = particleIterator->value(); - G4ProcessManager* pmanager = particle->GetProcessManager(); - if(pmanager != nullptr) - { + G4ProcessManager* pmanager = particle->GetProcessManager(); + if (pmanager != nullptr) { pmanager->AddProcess(theParallelWorldProcess); - if(theParallelWorldProcess->IsAtRestRequired(particle)) - { - pmanager->SetProcessOrdering(theParallelWorldProcess, idxAtRest, - 9900); + if (theParallelWorldProcess->IsAtRestRequired(particle)) { + pmanager->SetProcessOrdering(theParallelWorldProcess, idxAtRest, 9900); } - pmanager->SetProcessOrderingToSecond(theParallelWorldProcess, - idxAlongStep); - pmanager->SetProcessOrdering(theParallelWorldProcess, idxPostStep, - 9900); + pmanager->SetProcessOrderingToSecond(theParallelWorldProcess, idxAlongStep); + pmanager->SetProcessOrdering(theParallelWorldProcess, idxPostStep, 9900); } // if(pmanager) - } // while + } // while } theParallelWorldProcess->SetLayeredMaterialFlag(mesh->LayeredMassFlg()); } @@ -626,38 +530,29 @@ void G4WorkerRunManager::ConstructScoringWorlds() // -------------------------------------------------------------------- void G4WorkerRunManager::SetUserInitialization(G4UserWorkerInitialization*) { - G4Exception( - "G4RunManager::SetUserInitialization(G4UserWorkerInitialization*)", - "Run0118", FatalException, - "This method should be used only with an instance of G4MTRunManager"); + G4Exception("G4RunManager::SetUserInitialization(G4UserWorkerInitialization*)", "Run0118", + FatalException, "This method should be used only with an instance of G4MTRunManager"); } // -------------------------------------------------------------------- -void G4WorkerRunManager::SetUserInitialization( - G4UserWorkerThreadInitialization*) +void G4WorkerRunManager::SetUserInitialization(G4UserWorkerThreadInitialization*) { - G4Exception( - "G4RunManager::SetUserInitialization(G4UserWorkerThreadInitialization*)", - "Run0119", FatalException, - "This method should be used only with an instance of G4MTRunManager"); + G4Exception("G4RunManager::SetUserInitialization(G4UserWorkerThreadInitialization*)", "Run0119", + FatalException, "This method should be used only with an instance of G4MTRunManager"); } // -------------------------------------------------------------------- void G4WorkerRunManager::SetUserInitialization(G4VUserActionInitialization*) { - G4Exception( - "G4RunManager::SetUserInitialization(G4VUserActionInitialization*)", - "Run0120", FatalException, - "This method should be used only with an instance of G4MTRunManager"); + G4Exception("G4RunManager::SetUserInitialization(G4VUserActionInitialization*)", "Run0120", + FatalException, "This method should be used only with an instance of G4MTRunManager"); } // -------------------------------------------------------------------- void G4WorkerRunManager::SetUserInitialization(G4VUserDetectorConstruction*) { - G4Exception( - "G4RunManager::SetUserInitialization(G4VUserDetectorConstruction*)", - "Run0121", FatalException, - "This method should be used only with an instance of G4MTRunManager"); + G4Exception("G4RunManager::SetUserInitialization(G4VUserDetectorConstruction*)", "Run0121", + FatalException, "This method should be used only with an instance of G4MTRunManager"); } // -------------------------------------------------------------------- @@ -671,8 +566,7 @@ void G4WorkerRunManager::SetUserInitialization(G4VUserPhysicsList* pl) void G4WorkerRunManager::SetUserAction(G4UserRunAction* userAction) { G4RunManager::SetUserAction(userAction); - if(userAction != nullptr) - userAction->SetMaster(false); + if (userAction != nullptr) userAction->SetMaster(false); } // -------------------------------------------------------------------- @@ -721,8 +615,7 @@ void G4WorkerRunManager::SetUserAction(G4UserSteppingAction* ua) void G4WorkerRunManager::StoreRNGStatus(const G4String& fn) { std::ostringstream os; - os << randomNumberStatusDir << "G4Worker" << workerContext->GetThreadId() - << "_" << fn << ".rndm"; + os << randomNumberStatusDir << "G4Worker" << workerContext->GetThreadId() << "_" << fn << ".rndm"; G4Random::saveEngineStatus(os.str().c_str()); } @@ -730,13 +623,11 @@ void G4WorkerRunManager::StoreRNGStatus(const G4String& fn) void G4WorkerRunManager::rndmSaveThisRun() { G4int runNumber = 0; - if(currentRun != nullptr) - runNumber = currentRun->GetRunID(); - if(!storeRandomNumberStatus) - { + if (currentRun != nullptr) runNumber = currentRun->GetRunID(); + if (!storeRandomNumberStatus) { G4cerr << "Warning from G4RunManager::rndmSaveThisRun():" - << " Random number status was not stored prior to this run." - << G4endl << "/random/setSavingFlag command must be issued. " + << " Random number status was not stored prior to this run." << G4endl + << "/random/setSavingFlag command must be issued. " << "Command ignored." << G4endl; return; } @@ -745,19 +636,14 @@ void G4WorkerRunManager::rndmSaveThisRun() oos << "G4Worker" << workerContext->GetThreadId() << "_" << "currentRun.rndm" << "\0"; - G4String fileIn = randomNumberStatusDir + oos.str(); + G4fs::path fileIn = randomNumberStatusDir + oos.str(); std::ostringstream os; os << "run" << runNumber << ".rndm" << '\0'; - G4String fileOut = randomNumberStatusDir + os.str(); + G4fs::path fileOut = randomNumberStatusDir + os.str(); -#ifdef WIN32 - G4String copCmd = "/control/shell copy " + fileIn + " " + fileOut; -#else - G4String copCmd = "/control/shell cp " + fileIn + " " + fileOut; -#endif - G4UImanager::GetUIpointer()->ApplyCommand(copCmd); - if(verboseLevel > 0) + if (G4CopyRandomState(fileIn, fileOut, "G4WorkerRunManager::rndmSaveThisRun()") + && verboseLevel > 0) { G4cout << fileIn << " is copied to " << fileOut << G4endl; } @@ -766,16 +652,13 @@ void G4WorkerRunManager::rndmSaveThisRun() // -------------------------------------------------------------------- void G4WorkerRunManager::rndmSaveThisEvent() { - if(currentEvent == nullptr) - { + if (currentEvent == nullptr) { G4cerr << "Warning from G4RunManager::rndmSaveThisEvent():" - << " there is no currentEvent available." << G4endl - << "Command ignored." << G4endl; + << " there is no currentEvent available." << G4endl << "Command ignored." << G4endl; return; } - if(!storeRandomNumberStatus) - { + if (!storeRandomNumberStatus) { G4cerr << "Warning from G4RunManager::rndmSaveThisEvent():" << " Random number engine status is not available." << G4endl << "/random/setSavingFlag command must be issued " @@ -787,20 +670,14 @@ void G4WorkerRunManager::rndmSaveThisEvent() oos << "G4Worker" << workerContext->GetThreadId() << "_" << "currentEvent.rndm" << "\0"; - G4String fileIn = randomNumberStatusDir + oos.str(); + G4fs::path fileIn = randomNumberStatusDir + oos.str(); std::ostringstream os; - os << "run" << currentRun->GetRunID() << "evt" << currentEvent->GetEventID() - << ".rndm" << '\0'; - G4String fileOut = randomNumberStatusDir + os.str(); - -#ifdef WIN32 - G4String copCmd = "/control/shell copy " + fileIn + " " + fileOut; -#else - G4String copCmd = "/control/shell cp " + fileIn + " " + fileOut; -#endif - G4UImanager::GetUIpointer()->ApplyCommand(copCmd); - if(verboseLevel > 0) + os << "run" << currentRun->GetRunID() << "evt" << currentEvent->GetEventID() << ".rndm" << '\0'; + G4fs::path fileOut = randomNumberStatusDir + os.str(); + + if (G4CopyRandomState(fileIn, fileOut, "G4WorkerRunManager::rndmSaveThisEvent()") + && verboseLevel > 0) { G4cout << fileIn << " is copied to " << fileOut << G4endl; } @@ -810,64 +687,51 @@ void G4WorkerRunManager::rndmSaveThisEvent() void G4WorkerRunManager::DoWork() { G4MTRunManager* mrm = G4MTRunManager::GetMasterRunManager(); - G4MTRunManager::WorkerActionRequest nextAction = - mrm->ThisWorkerWaitForNextAction(); - while(nextAction != G4MTRunManager::WorkerActionRequest::ENDWORKER) - { - if(nextAction == - G4MTRunManager::WorkerActionRequest::NEXTITERATION) // start the next - // run + G4MTRunManager::WorkerActionRequest nextAction = mrm->ThisWorkerWaitForNextAction(); + while (nextAction != G4MTRunManager::WorkerActionRequest::ENDWORKER) { + if (nextAction == G4MTRunManager::WorkerActionRequest::NEXTITERATION) // start the next + // run { // The following code deals with changing materials between runs static G4ThreadLocal G4bool skipInitialization = true; - if(skipInitialization) - { + if (skipInitialization) { // re-initialization is not necessary for the first run skipInitialization = false; } - else - { + else { // ReinitializeGeometry(); workerContext->UpdateGeometryAndPhysicsVectorFromMaster(); } // Execute UI commands stored in the master UI manager std::vector cmds = mrm->GetCommandStack(); - G4UImanager* uimgr = G4UImanager::GetUIpointer(); // TLS instance - for(auto it = cmds.cbegin(); it != cmds.cend(); ++it) - { - uimgr->ApplyCommand(*it); + G4UImanager* uimgr = G4UImanager::GetUIpointer(); // TLS instance + for (const auto& cmd : cmds) { + uimgr->ApplyCommand(cmd); } // Start this run - G4int numevents = mrm->GetNumberOfEventsToBeProcessed(); + G4int numevents = mrm->GetNumberOfEventsToBeProcessed(); G4String macroFile = mrm->GetSelectMacro(); - G4int numSelect = mrm->GetNumberOfSelectEvents(); - if(macroFile == "" || macroFile == " ") - { + G4int numSelect = mrm->GetNumberOfSelectEvents(); + if (macroFile.empty() || macroFile == " ") { this->BeamOn(numevents); } - else - { + else { this->BeamOn(numevents, macroFile, numSelect); } } - else if(nextAction == G4MTRunManager::WorkerActionRequest::PROCESSUI) - { + else if (nextAction == G4MTRunManager::WorkerActionRequest::PROCESSUI) { std::vector cmds = mrm->GetCommandStack(); - G4UImanager* uimgr = G4UImanager::GetUIpointer(); // TLS instance - for(auto it = cmds.cbegin(); it != cmds.cend(); ++it) - { - uimgr->ApplyCommand(*it); + G4UImanager* uimgr = G4UImanager::GetUIpointer(); // TLS instance + for (const auto& cmd : cmds) { + uimgr->ApplyCommand(cmd); } mrm->ThisWorkerProcessCommandsStackDone(); } - else - { + else { G4ExceptionDescription d; d << "Cannot continue, this worker has been requested an unknown action: " - << static_cast< - std::underlying_type::type>( - nextAction); + << static_cast::type>(nextAction); G4Exception("G4WorkerRunManager::DoWork", "Run0104", FatalException, d); } diff --git a/source/run/src/G4WorkerRunManagerKernel.cc b/source/run/src/G4WorkerRunManagerKernel.cc index fa4a0cd9b74..09acb1e3af3 100644 --- a/source/run/src/G4WorkerRunManagerKernel.cc +++ b/source/run/src/G4WorkerRunManagerKernel.cc @@ -29,11 +29,11 @@ // -------------------------------------------------------------------- #include "G4WorkerRunManagerKernel.hh" + #include "G4ParticleTable.hh" // -------------------------------------------------------------------- -G4WorkerRunManagerKernel::G4WorkerRunManagerKernel() - : G4RunManagerKernel(workerRMK) +G4WorkerRunManagerKernel::G4WorkerRunManagerKernel() : G4RunManagerKernel(workerRMK) { // This version of the constructor should never be called in sequential mode! #ifndef G4MULTITHREADED @@ -43,8 +43,7 @@ G4WorkerRunManagerKernel::G4WorkerRunManagerKernel() "is set to off)."; msg << " This type of RunManager can only be used in mult-threaded " "applications."; - G4Exception("G4RunManagerKernel::G4RunManagerKernel()", "Run0102", - FatalException, msg); + G4Exception("G4RunManagerKernel::G4RunManagerKernel()", "Run0102", FatalException, msg); #endif } @@ -64,61 +63,45 @@ void G4WorkerRunManagerKernel::SetupShadowProcess() const auto theParticleIterator = theParticleTable->GetIterator(); theParticleIterator->reset(); // loop on particles and get process manager from there list of processes - while((*theParticleIterator)()) - { + while ((*theParticleIterator)()) { G4ParticleDefinition* pd = theParticleIterator->value(); - G4ProcessManager* pm = pd->GetProcessManager(); - G4ProcessManager* pmM = pd->GetMasterProcessManager(); - if(pm == nullptr || pmM == nullptr) - { + G4ProcessManager* pm = pd->GetProcessManager(); + G4ProcessManager* pmM = pd->GetMasterProcessManager(); + if (pm == nullptr || pmM == nullptr) { G4ExceptionDescription msg; - msg - << "Process manager or process manager shadow to master are not set.\n"; - msg << "Particle : " << pd->GetParticleName() << " (" << pd - << "), proc-manager: " << pm; + msg << "Process manager or process manager shadow to master are not set.\n"; + msg << "Particle : " << pd->GetParticleName() << " (" << pd << "), proc-manager: " << pm; msg << " proc-manager-shadow: " << pmM; - G4Exception("G4WorkerRunManagerKernel::SetupShadowProcess()", - "Run0116", FatalException, msg); + G4Exception("G4WorkerRunManagerKernel::SetupShadowProcess()", "Run0116", FatalException, msg); return; } - G4ProcessVector& procs = *(pm->GetProcessList()); + G4ProcessVector& procs = *(pm->GetProcessList()); G4ProcessVector& procsM = *(pmM->GetProcessList()); - if(procs.size() != procsM.size()) - { + if (procs.size() != procsM.size()) { G4cout << "G4WorkerRunManagerKernel::SetupShadowProcess() for particle <" << pd->GetParticleName() << ">" << G4endl; - G4cout << " ProcessManager : " << pm << " ProcessManagerShadow : " << pmM - << G4endl; - for(G4int iv1 = 0; iv1 < (G4int)procs.size(); ++iv1) - { - G4cout << " " << iv1 << " - " << procs[iv1]->GetProcessName() - << G4endl; + G4cout << " ProcessManager : " << pm << " ProcessManagerShadow : " << pmM << G4endl; + for (G4int iv1 = 0; iv1 < (G4int)procs.size(); ++iv1) { + G4cout << " " << iv1 << " - " << procs[iv1]->GetProcessName() << G4endl; } - G4cout << "--------------------------------------------------------------" - << G4endl; - for(G4int iv2 = 0; iv2 < (G4int)procsM.size(); ++iv2) - { - G4cout << " " << iv2 << " - " << procsM[iv2]->GetProcessName() - << G4endl; + G4cout << "--------------------------------------------------------------" << G4endl; + for (G4int iv2 = 0; iv2 < (G4int)procsM.size(); ++iv2) { + G4cout << " " << iv2 << " - " << procsM[iv2]->GetProcessName() << G4endl; } - G4cout << "--------------------------------------------------------------" - << G4endl; + G4cout << "--------------------------------------------------------------" << G4endl; G4ExceptionDescription msg; - msg - << " Size of G4ProcessVector is inconsistent between master and worker " - "threads "; + msg << " Size of G4ProcessVector is inconsistent between master and worker " + "threads "; msg << " for the particle <" << pd->GetParticleName() << ">. \n"; msg << " size of G4ProcessVector for worker thread is " << procs.size(); msg << " while master thread is " << procsM.size() << "."; - G4Exception("G4WorkerRunManagerKernel::SetupShadowProcess()", "Run0117", - FatalException, msg); + G4Exception("G4WorkerRunManagerKernel::SetupShadowProcess()", "Run0117", FatalException, msg); } // To each process add the reference to the same // process from master. Note that we rely on // processes being in the correct order! // We could use some checking using process name or type - for(G4int idx = 0; idx < (G4int)procs.size(); ++idx) - { + for (G4int idx = 0; idx < (G4int)procs.size(); ++idx) { procs[idx]->SetMasterProcess(procsM[idx]); } } diff --git a/source/run/src/G4WorkerTaskRunManager.cc b/source/run/src/G4WorkerTaskRunManager.cc index 51308e05765..5221bf6fe21 100644 --- a/source/run/src/G4WorkerTaskRunManager.cc +++ b/source/run/src/G4WorkerTaskRunManager.cc @@ -26,12 +26,16 @@ // #include "G4WorkerTaskRunManager.hh" + +#include "G4AutoLock.hh" #include "G4MTRunManager.hh" #include "G4ParallelWorldProcess.hh" +#include "G4ParallelWorldProcessStore.hh" #include "G4RNGHelper.hh" #include "G4Run.hh" #include "G4SDManager.hh" #include "G4ScoringManager.hh" +#include "G4TaskRunManager.hh" #include "G4TiMemory.hh" #include "G4Timer.hh" #include "G4TransportationManager.hh" @@ -48,18 +52,10 @@ #include "G4VVisManager.hh" #include "G4WorkerTaskRunManagerKernel.hh" #include "G4WorkerThread.hh" -#include "G4AutoLock.hh" -#include "G4ParallelWorldProcessStore.hh" -#include "G4TaskRunManager.hh" #include #include -// namespace -// { -// G4Mutex ConstructScoringWorldsMutex; -// } - //============================================================================// G4WorkerTaskRunManager* G4WorkerTaskRunManager::GetWorkerRunManager() @@ -69,29 +65,19 @@ G4WorkerTaskRunManager* G4WorkerTaskRunManager::GetWorkerRunManager() //============================================================================// -G4WorkerTaskRunManagerKernel* -G4WorkerTaskRunManager::GetWorkerRunManagerKernel() +G4WorkerTaskRunManagerKernel* G4WorkerTaskRunManager::GetWorkerRunManagerKernel() { - return static_cast( - GetWorkerRunManager()->kernel); + return static_cast(GetWorkerRunManager()->kernel); } //============================================================================// -G4WorkerTaskRunManager::G4WorkerTaskRunManager() - : G4WorkerRunManager() -{} - -//============================================================================// - void G4WorkerTaskRunManager::RunInitialization() { #ifdef G4MULTITHREADED - if(!visIsSetUp) - { + if (!visIsSetUp) { G4VVisManager* pVVis = G4VVisManager::GetConcreteInstance(); - if(pVVis) - { + if (pVVis != nullptr) { pVVis->SetUpForAThread(); visIsSetUp = true; } @@ -99,51 +85,43 @@ void G4WorkerTaskRunManager::RunInitialization() #endif runIsSeeded = false; - if(!(kernel->RunInitialization(fakeRun))) - return; + if (!(kernel->RunInitialization(fakeRun))) return; // Signal this thread can start event loop. // Note this will return only when all threads reach this point G4MTRunManager::GetMasterRunManager()->ThisWorkerReady(); - if(fakeRun) - return; + if (fakeRun) return; const G4UserWorkerInitialization* uwi = G4MTRunManager::GetMasterRunManager()->GetUserWorkerInitialization(); CleanUpPreviousEvents(); - if(currentRun) - delete currentRun; + + delete currentRun; currentRun = nullptr; - if(IfGeometryHasBeenDestroyed()) - G4ParallelWorldProcessStore::GetInstance()->UpdateWorlds(); + if (IfGeometryHasBeenDestroyed()) G4ParallelWorldProcessStore::GetInstance()->UpdateWorlds(); // Call a user hook: this is guaranteed all threads are "synchronized" - if(uwi) - uwi->WorkerRunStart(); + if (uwi != nullptr) uwi->WorkerRunStart(); - if(userRunAction) - currentRun = userRunAction->GenerateRun(); - if(!currentRun) - currentRun = new G4Run(); + if (userRunAction != nullptr) currentRun = userRunAction->GenerateRun(); + if (currentRun == nullptr) currentRun = new G4Run(); currentRun->SetRunID(runIDCounter); - G4TaskRunManager* mrm = G4TaskRunManager::GetMasterRunManager(); + G4TaskRunManager* mrm = G4TaskRunManager::GetMasterRunManager(); numberOfEventToBeProcessed = mrm->GetNumberOfEventsToBeProcessed(); currentRun->SetNumberOfEventToBeProcessed(numberOfEventToBeProcessed); currentRun->SetDCtable(DCtable); G4SDManager* fSDM = G4SDManager::GetSDMpointerIfExist(); - if(fSDM != nullptr) - { + if (fSDM != nullptr) { currentRun->SetHCtable(fSDM->GetHCtable()); } - if(G4VScoreNtupleWriter::Instance()) - { - auto hce = (fSDM != nullptr) ? fSDM->PrepareNewEvent() : nullptr; + if (G4VScoreNtupleWriter::Instance() != nullptr) { + auto hce = (fSDM != nullptr) ? fSDM->PrepareNewEvent() : nullptr; isScoreNtupleWriter = G4VScoreNtupleWriter::Instance()->Book(hce); delete hce; } @@ -153,33 +131,27 @@ void G4WorkerTaskRunManager::RunInitialization() randomNumberStatusForThisRun = oss.str(); currentRun->SetRandomNumberStatus(randomNumberStatusForThisRun); - for(G4int i_prev = 0; i_prev < n_perviousEventsToBeStored; ++i_prev) + for (G4int i_prev = 0; i_prev < n_perviousEventsToBeStored; ++i_prev) previousEvents->push_back(nullptr); - if(printModulo > 0 || verboseLevel > 0) - { - G4cout << "### Run " << currentRun->GetRunID() - << " starts on worker thread " << G4Threading::G4GetThreadId() << "." - << G4endl; + if (printModulo > 0 || verboseLevel > 0) { + G4cout << "### Run " << currentRun->GetRunID() << " starts on worker thread " + << G4Threading::G4GetThreadId() << "." << G4endl; } - if(userRunAction) - userRunAction->BeginOfRunAction(currentRun); + if (userRunAction != nullptr) userRunAction->BeginOfRunAction(currentRun); #if defined(GEANT4_USE_TIMEMORY) workerRunProfiler.reset(new ProfilerConfig(currentRun)); #endif - if(isScoreNtupleWriter) - { + if (isScoreNtupleWriter) { G4VScoreNtupleWriter::Instance()->OpenFile(); } - if(storeRandomNumberStatus) - { + if (storeRandomNumberStatus) { G4String fileN = "currentRun"; - if(rngStatusEventsFlag) - { + if (rngStatusEventsFlag) { std::ostringstream os; os << "run" << currentRun->GetRunID(); fileN = os.str(); @@ -187,17 +159,15 @@ void G4WorkerTaskRunManager::RunInitialization() StoreRNGStatus(fileN); } - runAborted = false; + runAborted = false; numberOfEventProcessed = 0; } //============================================================================// -void G4WorkerTaskRunManager::DoEventLoop(G4int n_event, const char* macroFile, - G4int n_select) +void G4WorkerTaskRunManager::DoEventLoop(G4int n_event, const char* macroFile, G4int n_select) { - if(!userPrimaryGeneratorAction) - { + if (userPrimaryGeneratorAction == nullptr) { G4Exception("G4RunManager::GenerateEvent()", "Run0032", FatalException, "G4VUserPrimaryGeneratorAction is not defined!"); } @@ -207,7 +177,7 @@ void G4WorkerTaskRunManager::DoEventLoop(G4int n_event, const char* macroFile, InitializeEventLoop(n_event, macroFile, n_select); // Reset random number seeds queue - while(seedsQueue.size() > 0) + while (!seedsQueue.empty()) seedsQueue.pop(); // for each run, worker should receive at least one set of random number // seeds. @@ -215,24 +185,18 @@ void G4WorkerTaskRunManager::DoEventLoop(G4int n_event, const char* macroFile, // Event loop eventLoopOnGoing = true; - G4int i_event = -1; - nevModulo = -1; - currEvID = -1; + G4int i_event = -1; + nevModulo = -1; + currEvID = -1; - for(G4int evt = 0; evt < n_event; ++evt) - { + for (G4int evt = 0; evt < n_event; ++evt) { ProcessOneEvent(i_event); - if(eventLoopOnGoing) - { + if (eventLoopOnGoing) { TerminateOneEvent(); - if(runAborted) - eventLoopOnGoing = false; + if (runAborted) eventLoopOnGoing = false; } - if(!eventLoopOnGoing) - break; + if (!eventLoopOnGoing) break; } - - // TerminateEventLoop(); } //============================================================================// @@ -240,15 +204,13 @@ void G4WorkerTaskRunManager::DoEventLoop(G4int n_event, const char* macroFile, void G4WorkerTaskRunManager::ProcessOneEvent(G4int i_event) { currentEvent = GenerateEvent(i_event); - if(eventLoopOnGoing) - { + if (eventLoopOnGoing) { eventManager->ProcessOneEvent(currentEvent); AnalyzeEvent(currentEvent); UpdateScoring(); - if(currentEvent->GetEventID() < n_select_msg) - { - G4cout << "Applying command \"" << msgText << "\" @ " << __FUNCTION__ - << ":" << __LINE__ << G4endl; + if (currentEvent->GetEventID() < n_select_msg) { + G4cout << "Applying command \"" << msgText << "\" @ " << __FUNCTION__ << ":" << __LINE__ + << G4endl; G4UImanager::GetUIpointer()->ApplyCommand(msgText); } } @@ -258,46 +220,37 @@ void G4WorkerTaskRunManager::ProcessOneEvent(G4int i_event) G4Event* G4WorkerTaskRunManager::GenerateEvent(G4int i_event) { - G4Event* anEvent = new G4Event(i_event); - long s1 = 0; - long s2 = 0; - long s3 = 0; + auto anEvent = new G4Event(i_event); + G4long s1 = 0; + G4long s2 = 0; + G4long s3 = 0; G4bool eventHasToBeSeeded = true; - if(G4MTRunManager::SeedOncePerCommunication() == 1 && runIsSeeded) - eventHasToBeSeeded = false; + if (G4MTRunManager::SeedOncePerCommunication() == 1 && runIsSeeded) eventHasToBeSeeded = false; - if(i_event < 0) - { + if (i_event < 0) { G4int nevM = G4MTRunManager::GetMasterRunManager()->GetEventModulo(); - if(nevM == 1) - { - eventLoopOnGoing = G4MTRunManager::GetMasterRunManager()->SetUpAnEvent( - anEvent, s1, s2, s3, eventHasToBeSeeded); + if (nevM == 1) { + eventLoopOnGoing = G4MTRunManager::GetMasterRunManager()->SetUpAnEvent(anEvent, s1, s2, s3, + eventHasToBeSeeded); runIsSeeded = true; } - else - { - if(nevModulo <= 0) - { - G4int nevToDo = G4MTRunManager::GetMasterRunManager()->SetUpNEvents( - anEvent, &seedsQueue, eventHasToBeSeeded); - if(nevToDo == 0) + else { + if (nevModulo <= 0) { + G4int nevToDo = G4MTRunManager::GetMasterRunManager()->SetUpNEvents(anEvent, &seedsQueue, + eventHasToBeSeeded); + if (nevToDo == 0) eventLoopOnGoing = false; - else - { - currEvID = anEvent->GetEventID(); + else { + currEvID = anEvent->GetEventID(); nevModulo = nevToDo - 1; } } - else - { - if(G4MTRunManager::SeedOncePerCommunication() > 0) - eventHasToBeSeeded = false; + else { + if (G4MTRunManager::SeedOncePerCommunication() > 0) eventHasToBeSeeded = false; anEvent->SetEventID(++currEvID); nevModulo--; } - if(eventLoopOnGoing && eventHasToBeSeeded) - { + if (eventLoopOnGoing && eventHasToBeSeeded) { s1 = seedsQueue.front(); seedsQueue.pop(); s2 = seedsQueue.front(); @@ -305,27 +258,22 @@ G4Event* G4WorkerTaskRunManager::GenerateEvent(G4int i_event) } } - if(!eventLoopOnGoing) - { + if (!eventLoopOnGoing) { delete anEvent; return nullptr; } } - else if(eventHasToBeSeeded) - { + else if (eventHasToBeSeeded) { // Need to reseed random number generator G4RNGHelper* helper = G4RNGHelper::GetInstance(); - s1 = helper->GetSeed(i_event * 2); - s2 = helper->GetSeed(i_event * 2 + 1); + s1 = helper->GetSeed(i_event * 2); + s2 = helper->GetSeed(i_event * 2 + 1); } - if(eventHasToBeSeeded) - { - long seeds[3] = { s1, s2, 0 }; + if (eventHasToBeSeeded) { + G4long seeds[3] = {s1, s2, 0}; G4Random::setTheSeeds(seeds, -1); runIsSeeded = true; - ////G4cout<<"Event "<SetRandomNumberStatus(randomNumberStatusForThisEvent); } - if(storeRandomNumberStatus && !RNGstatusReadFromFile) - { + if (storeRandomNumberStatus && !RNGstatusReadFromFile) { // If reading from file, avoid to rewrite the same G4String fileN = "currentEvent"; - if(rngStatusEventsFlag) - fileN = filename(); + if (rngStatusEventsFlag) fileN = filename(); StoreRNGStatus(fileN); } - if(printModulo > 0 && anEvent->GetEventID() % printModulo == 0) - { + if (printModulo > 0 && anEvent->GetEventID() % printModulo == 0) { G4cout << "--> Event " << anEvent->GetEventID() << " starts"; - if(eventHasToBeSeeded) - G4cout << " with initial seeds (" << s1 << "," << s2 << ")"; + if (eventHasToBeSeeded) G4cout << " with initial seeds (" << s1 << "," << s2 << ")"; G4cout << "." << G4endl; } userPrimaryGeneratorAction->GeneratePrimaries(anEvent); @@ -390,8 +330,7 @@ G4Event* G4WorkerTaskRunManager::GenerateEvent(G4int i_event) void G4WorkerTaskRunManager::RunTermination() { - if(!fakeRun && currentRun) - { + if (!fakeRun && (currentRun != nullptr)) { #if defined(GEANT4_USE_TIMEMORY) workerRunProfiler.reset(); #endif @@ -402,12 +341,10 @@ void G4WorkerTaskRunManager::RunTermination() //(TerminateRun allows for synch via G4RunAction::EndOfRun) const G4UserWorkerInitialization* uwi = G4MTRunManager::GetMasterRunManager()->GetUserWorkerInitialization(); - if(uwi) - uwi->WorkerRunEnd(); + if (uwi != nullptr) uwi->WorkerRunEnd(); } - if(currentRun) - { + if (currentRun != nullptr) { G4RunManager::RunTermination(); } // Signal this thread has finished envent-loop. @@ -419,21 +356,17 @@ void G4WorkerTaskRunManager::RunTermination() void G4WorkerTaskRunManager::TerminateEventLoop() { - if(verboseLevel > 0 && !fakeRun) - { + if (verboseLevel > 0 && !fakeRun) { timer->Stop(); // prefix with thread # info due to how TBB calls this function - G4String prefix = - "[thread " + std::to_string(workerContext->GetThreadId()) + "] "; + G4String prefix = "[thread " + std::to_string(workerContext->GetThreadId()) + "] "; G4cout << prefix << "Thread-local run terminated." << G4endl; G4cout << prefix << "Run Summary" << G4endl; - if(runAborted) - G4cout << prefix << " Run Aborted after " << numberOfEventProcessed - << " events processed." << G4endl; - else - G4cout << prefix - << " Number of events processed : " << numberOfEventProcessed + if (runAborted) + G4cout << prefix << " Run Aborted after " << numberOfEventProcessed << " events processed." << G4endl; + else + G4cout << prefix << " Number of events processed : " << numberOfEventProcessed << G4endl; G4cout << prefix << " " << *timer << G4endl; } } @@ -455,8 +388,7 @@ void G4WorkerTaskRunManager::SetupDefaultRNGEngine() void G4WorkerTaskRunManager::StoreRNGStatus(const G4String& fn) { std::ostringstream os; - os << randomNumberStatusDir << "G4Worker" << workerContext->GetThreadId() - << "_" << fn << ".rndm"; + os << randomNumberStatusDir << "G4Worker" << workerContext->GetThreadId() << "_" << fn << ".rndm"; G4Random::saveEngineStatus(os.str().c_str()); } @@ -465,18 +397,15 @@ void G4WorkerTaskRunManager::StoreRNGStatus(const G4String& fn) void G4WorkerTaskRunManager::ProcessUI() { G4TaskRunManager* mrm = G4TaskRunManager::GetMasterRunManager(); - if(!mrm) - return; + if (mrm == nullptr) return; //------------------------------------------------------------------------// // Check UI commands not already processed auto command_stack = mrm->GetCommandStack(); - bool matching = (command_stack.size() == processedCommandStack.size()); - if(matching) - { - for(uintmax_t i = 0; i < command_stack.size(); ++i) - if(processedCommandStack.at(i) != command_stack.at(i)) - { + bool matching = (command_stack.size() == processedCommandStack.size()); + if (matching) { + for (uintmax_t i = 0; i < command_stack.size(); ++i) + if (processedCommandStack.at(i) != command_stack.at(i)) { matching = false; break; } @@ -484,9 +413,8 @@ void G4WorkerTaskRunManager::ProcessUI() //------------------------------------------------------------------------// // Execute UI commands stored in the master UI manager - if(!matching) - { - for(const auto& itr : command_stack) + if (!matching) { + for (const auto& itr : command_stack) G4UImanager::GetUIpointer()->ApplyCommand(itr); processedCommandStack = command_stack; } @@ -497,8 +425,8 @@ void G4WorkerTaskRunManager::ProcessUI() void G4WorkerTaskRunManager::DoCleanup() { CleanUpPreviousEvents(); - if(currentRun) - delete currentRun; + + delete currentRun; currentRun = nullptr; } @@ -506,16 +434,14 @@ void G4WorkerTaskRunManager::DoCleanup() void G4WorkerTaskRunManager::DoWork() { - G4TaskRunManager* mrm = G4TaskRunManager::GetMasterRunManager(); - G4bool newRun = false; - const G4Run* run = mrm->GetCurrentRun(); + G4TaskRunManager* mrm = G4TaskRunManager::GetMasterRunManager(); + G4bool newRun = false; + const G4Run* run = mrm->GetCurrentRun(); G4ThreadLocalStatic G4int runId = -1; - if(run && run->GetRunID() != runId) - { - runId = run->GetRunID(); + if ((run != nullptr) && run->GetRunID() != runId) { + runId = run->GetRunID(); newRun = true; - if(runId > 0) - { + if (runId > 0) { ProcessUI(); assert(workerContext != nullptr); } @@ -523,19 +449,17 @@ void G4WorkerTaskRunManager::DoWork() } // Start this run - G4int nevts = mrm->GetNumberOfEventsToBeProcessed(); - G4int numSelect = mrm->GetNumberOfSelectEvents(); + G4int nevts = mrm->GetNumberOfEventsToBeProcessed(); + G4int numSelect = mrm->GetNumberOfSelectEvents(); G4String macroFile = mrm->GetSelectMacro(); - bool empty_macro = (macroFile == "" || macroFile == " "); + G4bool empty_macro = (macroFile.empty() || macroFile == " "); const char* macro = (empty_macro) ? nullptr : macroFile.c_str(); - numSelect = (empty_macro) ? -1 : numSelect; + numSelect = (empty_macro) ? -1 : numSelect; - if(newRun) - { + if (newRun) { G4bool cond = ConfirmBeamOnCondition(); - if(cond) - { + if (cond) { ConstructScoringWorlds(); RunInitialization(); } diff --git a/source/run/src/G4WorkerTaskRunManagerKernel.cc b/source/run/src/G4WorkerTaskRunManagerKernel.cc index 6e2b63f14fd..7b63f88aec2 100644 --- a/source/run/src/G4WorkerTaskRunManagerKernel.cc +++ b/source/run/src/G4WorkerTaskRunManagerKernel.cc @@ -25,12 +25,12 @@ // #include "G4WorkerTaskRunManagerKernel.hh" + #include "G4ParticleTable.hh" //============================================================================// -G4WorkerTaskRunManagerKernel::G4WorkerTaskRunManagerKernel() - : G4RunManagerKernel(workerRMK) +G4WorkerTaskRunManagerKernel::G4WorkerTaskRunManagerKernel() : G4RunManagerKernel(workerRMK) { // This version of the constructor should never be called in sequential mode! #ifndef G4MULTITHREADED @@ -39,8 +39,7 @@ G4WorkerTaskRunManagerKernel::G4WorkerTaskRunManagerKernel() "(-DG4MULTITHREADED is set to off)."; msg << " This type of RunManager can only be used in mult-threaded " "applications."; - G4Exception("G4RunManagerKernel::G4RunManagerKernel()", "Run0102", - FatalException, msg); + G4Exception("G4RunManagerKernel::G4RunManagerKernel()", "Run0102", FatalException, msg); #endif } @@ -58,70 +57,54 @@ void G4WorkerTaskRunManagerKernel::SetupShadowProcess() const // Master thread has created processes and setup a pointer // to the master process, get it and copy it in this instance G4ParticleTable* theParticleTable = G4ParticleTable::GetParticleTable(); - G4ParticleTable::G4PTblDicIterator* theParticleIterator = - theParticleTable->GetIterator(); + G4ParticleTable::G4PTblDicIterator* theParticleIterator = theParticleTable->GetIterator(); theParticleIterator->reset(); // loop on particles and get process manager from there list of processes - while((*theParticleIterator)()) - { + while ((*theParticleIterator)()) { G4ParticleDefinition* pd = theParticleIterator->value(); - G4ProcessManager* pm = pd->GetProcessManager(); - G4ProcessManager* pmM = pd->GetMasterProcessManager(); - if(!pm || !pmM) - { + G4ProcessManager* pm = pd->GetProcessManager(); + G4ProcessManager* pmM = pd->GetMasterProcessManager(); + if ((pm == nullptr) || (pmM == nullptr)) { G4ExceptionDescription msg; - msg - << "Process manager or process manager shadow to master are not set.\n"; - msg << "Particle : " << pd->GetParticleName() << " (" << pd - << "), proc-manager: " << pm; + msg << "Process manager or process manager shadow to master are not set.\n"; + msg << "Particle : " << pd->GetParticleName() << " (" << pd << "), proc-manager: " << pm; msg << " proc-manager-shadow: " << pmM; - G4Exception("G4WorkerTaskRunManagerKernel::SetupShadowProcess()", - "Run0116", FatalException, msg); + G4Exception("G4WorkerTaskRunManagerKernel::SetupShadowProcess()", "Run0116", FatalException, + msg); return; } - G4ProcessVector& procs = *(pm->GetProcessList()); + G4ProcessVector& procs = *(pm->GetProcessList()); G4ProcessVector& procsM = *(pmM->GetProcessList()); - if(procs.size() != procsM.size()) - { - G4cout - << "G4WorkerTaskRunManagerKernel::SetupShadowProcess() for particle <" - << pd->GetParticleName() << ">" << G4endl; - G4cout << " ProcessManager : " << pm << " ProcessManagerShadow : " << pmM - << G4endl; + if (procs.size() != procsM.size()) { + G4cout << "G4WorkerTaskRunManagerKernel::SetupShadowProcess() for particle <" + << pd->GetParticleName() << ">" << G4endl; + G4cout << " ProcessManager : " << pm << " ProcessManagerShadow : " << pmM << G4endl; - for(G4int iv1 = 0; iv1 < (G4int)procs.size(); ++iv1) - G4cout << " " << iv1 << " - " << procs[iv1]->GetProcessName() - << G4endl; + for (G4int iv1 = 0; iv1 < (G4int)procs.size(); ++iv1) + G4cout << " " << iv1 << " - " << procs[iv1]->GetProcessName() << G4endl; - G4cout << "--------------------------------------------------------------" - << G4endl; + G4cout << "--------------------------------------------------------------" << G4endl; - for(G4int iv2 = 0; iv2 < (G4int)procsM.size(); ++iv2) - G4cout << " " << iv2 << " - " << procsM[iv2]->GetProcessName() - << G4endl; + for (G4int iv2 = 0; iv2 < (G4int)procsM.size(); ++iv2) + G4cout << " " << iv2 << " - " << procsM[iv2]->GetProcessName() << G4endl; - G4cout << "--------------------------------------------------------------" - << G4endl; + G4cout << "--------------------------------------------------------------" << G4endl; G4ExceptionDescription msg; - msg - << " Size of G4ProcessVector is inconsistent between master and worker " - "threads "; + msg << " Size of G4ProcessVector is inconsistent between master and worker " + "threads "; msg << " for the particle <" << pd->GetParticleName() << ">. \n"; msg << " size of G4ProcessVector for worker thread is " << procs.size(); msg << " while master thread is " << procsM.size() << "."; - G4Exception("G4WorkerTaskRunManagerKernel::SetupShadowProcess()", - "Run0117", FatalException, msg); + G4Exception("G4WorkerTaskRunManagerKernel::SetupShadowProcess()", "Run0117", FatalException, + msg); } // To each process add the reference to the same // process from master. Note that we rely on // processes being in the correct order! // We could use some checking using process name or type - for(G4int idx = 0; idx < (G4int)procs.size(); ++idx) - { + for (G4int idx = 0; idx < (G4int)procs.size(); ++idx) { procs[idx]->SetMasterProcess(procsM[idx]); } } } - -//============================================================================// diff --git a/source/run/src/G4WorkerThread.cc b/source/run/src/G4WorkerThread.cc index b3367cf4a73..8c8ccdd5d67 100644 --- a/source/run/src/G4WorkerThread.cc +++ b/source/run/src/G4WorkerThread.cc @@ -29,19 +29,18 @@ // -------------------------------------------------------------------- #include "G4WorkerThread.hh" -#include "G4MTRunManager.hh" -#include "G4WorkerRunManager.hh" #include "G4GeometryWorkspace.hh" -#include "G4ParticlesWorkspace.hh" -#include "G4PhysicsListWorkspace.hh" -#include "G4SolidsWorkspace.hh" - #include "G4LogicalVolume.hh" #include "G4LogicalVolumeStore.hh" +#include "G4MTRunManager.hh" +#include "G4ParticlesWorkspace.hh" #include "G4PhysicalVolumeStore.hh" +#include "G4PhysicsListWorkspace.hh" #include "G4Region.hh" #include "G4RegionStore.hh" +#include "G4SolidsWorkspace.hh" +#include "G4WorkerRunManager.hh" // -------------------------------------------------------------------- void G4WorkerThread::SetThreadId(G4int tid) @@ -99,19 +98,14 @@ void G4WorkerThread::UpdateGeometryAndPhysicsVectorFromMaster() // First remember SD and Filed Associated with worker // in order to re-use it // (note that all the stuff after this will reset SD and Field) - using LV2SDFM = std::map>; + using LV2SDFM = std::map>; LV2SDFM lvmap; - using R2FSM = std::map>; + using R2FSM = std::map>; R2FSM rgnmap; G4LogicalVolumeStore* mLogVolStore = G4LogicalVolumeStore::GetInstance(); - for(std::size_t ip = 0; ip < mLogVolStore->size(); ++ip) - { - G4LogicalVolume* lv = (*mLogVolStore)[ip]; - + for (auto lv : *mLogVolStore) { // The following needs an explanation. // Consider the case in which the user adds one LogVolume between // the runs. The problem is that the thread-local part (split class) @@ -136,28 +130,22 @@ void G4WorkerThread::UpdateGeometryAndPhysicsVectorFromMaster() // associated with LV, we get the values and we remember them. // G4VSensitiveDetector* sd = nullptr; - G4FieldManager* fmgr = nullptr; - if(lv->GetMasterSensitiveDetector() != nullptr) - { + G4FieldManager* fmgr = nullptr; + if (lv->GetMasterSensitiveDetector() != nullptr) { sd = lv->GetSensitiveDetector(); } - if(lv->GetMasterFieldManager() != nullptr) - { + if (lv->GetMasterFieldManager() != nullptr) { fmgr = lv->GetFieldManager(); } - if(sd != nullptr || fmgr != nullptr) - { + if (sd != nullptr || fmgr != nullptr) { lvmap[lv] = std::make_pair(sd, fmgr); } } G4RegionStore* mRegStore = G4RegionStore::GetInstance(); - for(std::size_t ir = 0; ir < mRegStore->size(); ++ir) - { - G4Region* reg = (*mRegStore)[ir]; + for (auto reg : *mRegStore) { G4FastSimulationManager* fsm = reg->GetFastSimulationManager(); - G4UserSteppingAction* usa = reg->GetRegionalSteppingAction(); - if(reg != nullptr || usa != nullptr) - { + G4UserSteppingAction* usa = reg->GetRegionalSteppingAction(); + if (reg != nullptr || usa != nullptr) { rgnmap[reg] = std::make_pair(fsm, usa); } } @@ -165,11 +153,9 @@ void G4WorkerThread::UpdateGeometryAndPhysicsVectorFromMaster() //=========================== // Step-1: Clean the workspace //=========================== - G4GeometryWorkspace* geomWorkspace = - G4GeometryWorkspace::GetPool()->GetWorkspace(); + G4GeometryWorkspace* geomWorkspace = G4GeometryWorkspace::GetPool()->GetWorkspace(); geomWorkspace->DestroyWorkspace(); - G4SolidsWorkspace* solidWorkspace = - G4SolidsWorkspace::GetPool()->GetWorkspace(); + G4SolidsWorkspace* solidWorkspace = G4SolidsWorkspace::GetPool()->GetWorkspace(); solidWorkspace->DestroyWorkspace(); //=========================== @@ -181,51 +167,44 @@ void G4WorkerThread::UpdateGeometryAndPhysicsVectorFromMaster() //=================================================== // Step-4: Restore sensitive detector and field manaer //=================================================== - for(auto it = lvmap.cbegin(); it != lvmap.cend(); ++it) - { - G4LogicalVolume* lv = it->first; - G4VSensitiveDetector* sd = (it->second).first; - G4FieldManager* fmgr = (it->second).second; - if(fmgr != nullptr) // What should be the second parameter? - { // We use always false for MT mode + for (const auto& it : lvmap) { + G4LogicalVolume* lv = it.first; + G4VSensitiveDetector* sd = (it.second).first; + G4FieldManager* fmgr = (it.second).second; + if (fmgr != nullptr) // What should be the second parameter? + { // We use always false for MT mode lv->SetFieldManager(fmgr, false); } - if(sd) - { + if (sd != nullptr) { lv->SetSensitiveDetector(sd); } } - for(auto it3 = rgnmap.cbegin(); it3 != rgnmap.cend(); ++it3) - { - G4Region* reg = it3->first; - G4FastSimulationManager* fsm = (it3->second).first; - if(fsm != nullptr) - reg->SetFastSimulationManager(fsm); - G4UserSteppingAction* usa = (it3->second).second; - if(usa != nullptr) - reg->SetRegionalSteppingAction(usa); + for (const auto& it3 : rgnmap) { + G4Region* reg = it3.first; + G4FastSimulationManager* fsm = (it3.second).first; + if (fsm != nullptr) reg->SetFastSimulationManager(fsm); + G4UserSteppingAction* usa = (it3.second).second; + if (usa != nullptr) reg->SetRegionalSteppingAction(usa); } } // -------------------------------------------------------------------- void G4WorkerThread::SetPinAffinity(G4int affinity) const { - if(affinity == 0) - return; + if (affinity == 0) return; #if !defined(WIN32) G4cout << "AFFINITY SET" << G4endl; // Assign this thread to cpus in a round robin way - G4int offset = affinity; + G4int offset = affinity; G4int cpuindex = 0; - if(std::abs(offset) > G4Threading::G4GetNumberOfCores()) - { + if (std::abs(offset) > G4Threading::G4GetNumberOfCores()) { G4Exception("G4WorkerThread::SetPinAffinity()", "Run0100", JustWarning, "Cannot set thread affinity, affinity parameter larger than " "number of cores"); return; } - if(offset > 0) // Start assigning affinity to given CPU + if (offset > 0) // Start assigning affinity to given CPU { --offset; cpuindex = (GetThreadId() + offset) % G4Threading::G4GetNumberOfCores(); @@ -236,7 +215,7 @@ void G4WorkerThread::SetPinAffinity(G4int affinity) const offset *= -1; --offset; G4int myidx = GetThreadId() % (G4Threading::G4GetNumberOfCores() - 1); - cpuindex = myidx + (myidx >= offset); + cpuindex = myidx + static_cast(myidx >= offset); } G4cout << "Setting affinity to:" << cpuindex << G4endl; @@ -247,8 +226,7 @@ void G4WorkerThread::SetPinAffinity(G4int affinity) const G4NativeThread t; # endif G4bool success = G4Threading::G4SetPinAffinity(cpuindex, t); - if(!success) - { + if (!success) { G4Exception("G4MTRunManagerKernel::StarThread()", "Run0101", JustWarning, "Cannot set thread affinity."); } diff --git a/source/track/GNUmakefile b/source/track/GNUmakefile deleted file mode 100644 index f7400a6edd1..00000000000 --- a/source/track/GNUmakefile +++ /dev/null @@ -1,33 +0,0 @@ -# ---------------------------------------------------------- -# GNUmakefile for track library. Gabriele Cosmo, 3/4/1997. -# ---------------------------------------------------------- - -name := G4track - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -GLOBLIBS = libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4TRACK_ALLOC_EXPORT -CPPFLAGS += \ - -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/intercoms/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/management/include - -include $(G4INSTALL)/config/common.gmk - -.PHONY: global - -global: lib - diff --git a/source/track/History b/source/track/History index 78352c6a050..3599c256282 100644 --- a/source/track/History +++ b/source/track/History @@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2022-12-12 Ben Morgan (track-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-11-16 Gabriele Cosmo (track-V11-00-11) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/tracking/GNUmakefile b/source/tracking/GNUmakefile deleted file mode 100644 index fe3b848db56..00000000000 --- a/source/tracking/GNUmakefile +++ /dev/null @@ -1,40 +0,0 @@ -# ---------------------------------------------------------- -# GNUmakefile for tracking library. Katsuya Amako, 5/9/95. -# ---------------------------------------------------------- - -name := G4tracking - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -GLOBLIBS = libG4processes.lib libG4digits_hits.lib -GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -DG4TRACKING_ALLOC_EXPORT -CPPFLAGS += -I$(G4BASE)/global/management/include \ - -I$(G4BASE)/global/HEPRandom/include \ - -I$(G4BASE)/global/HEPGeometry/include \ - -I$(G4BASE)/geometry/management/include \ - -I$(G4BASE)/geometry/volumes/include \ - -I$(G4BASE)/geometry/navigation/include \ - -I$(G4BASE)/geometry/magneticfield/include \ - -I$(G4BASE)/geometry/solids/CSG/include \ - -I$(G4BASE)/track/include \ - -I$(G4BASE)/materials/include \ - -I$(G4BASE)/processes/management/include \ - -I$(G4BASE)/particles/management/include \ - -I$(G4BASE)/digits_hits/detector/include \ - -I$(G4BASE)/digits_hits/hits/include \ - -I$(G4BASE)/graphics_reps/include \ - -I$(G4BASE)/intercoms/include - -include $(G4INSTALL)/config/common.gmk - -.PHONY: global - -global: lib diff --git a/source/tracking/History b/source/tracking/History index f299982c0eb..dbff88050cb 100644 --- a/source/tracking/History +++ b/source/tracking/History @@ -6,6 +6,12 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-02-08 Ben Morgan (tracking V11-01-01) +- Apply standard and extended set of clang-tidy/format fixes + +## 2022-12-12 Ben Morgan (tracking-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-11-16 Gabriele Cosmo (tracking-V11-00-09) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/tracking/include/G4AdjointCrossSurfChecker.hh b/source/tracking/include/G4AdjointCrossSurfChecker.hh index ddd8b19c981..655712d04f1 100644 --- a/source/tracking/include/G4AdjointCrossSurfChecker.hh +++ b/source/tracking/include/G4AdjointCrossSurfChecker.hh @@ -32,7 +32,7 @@ // surface of a sphere. // It is used to check if an adjoint particle reaches the external // surface or reenter the sensitive region delimited by the adjoint -// source. +// source. // Author: L. Desorgher, SpaceIT GmbH - 15 January 2007 // Contract: ESA contract 21435/08/NL/AT @@ -41,98 +41,65 @@ #ifndef G4AdjointCrossSurfChecker_hh #define G4AdjointCrossSurfChecker_hh 1 -#include "globals.hh" #include "G4ThreeVector.hh" +#include "globals.hh" + #include class G4Step; -class G4AdjointCrossSurfChecker -{ - public: - - static G4AdjointCrossSurfChecker* GetInstance(); - - G4bool CrossingASphere(const G4Step* aStep, - G4double sphere_radius, - G4ThreeVector sphere_center, - G4ThreeVector& cross_pos, - G4double& cos_to_surface, - G4bool& GoingIn); - - G4bool GoingInOrOutOfaVolume(const G4Step* aStep, - const G4String& volume_name, - G4double& cos_to_surface, - G4bool& GoingIn); - - G4bool GoingInOrOutOfaVolumeByExtSurface(const G4Step* aStep, - const G4String& volume_name, - const G4String& mother_lvol_name, - G4double& cos_to_surface, - G4bool& GoingIn); - - G4bool CrossingAGivenRegisteredSurface(const G4Step* aStep, - const G4String& surface_name, - G4ThreeVector& cross_pos, - G4double& cos_to_surface, - G4bool& GoingIn); - - G4bool CrossingAGivenRegisteredSurface(const G4Step* aStep, - G4int ind, - G4ThreeVector& cross_pos, - G4double& cos_to_surface, - G4bool& GoingIn); - - G4bool CrossingOneOfTheRegisteredSurface(const G4Step* aStep, - G4String& surface_name, - G4ThreeVector& cross_pos, - G4double& cos_to_surface, - G4bool& GoingIn); - - G4bool CrossingAnInterfaceBetweenTwoVolumes(const G4Step* aStep, - const G4String& vol1_name, - const G4String& vol2_name, - G4ThreeVector& cross_pos, - G4double& cos_to_surface, - G4bool& GoingIn); - - G4bool AddaSphericalSurface(const G4String& SurfaceName, - G4double radius, - G4ThreeVector pos, - G4double& area); - G4bool AddaSphericalSurfaceWithCenterAtTheCenterOfAVolume( - const G4String& SurfaceName, - G4double radius, - const G4String& volume_name, - G4ThreeVector& center, - G4double& area); - G4bool AddanExtSurfaceOfAvolume(const G4String& SurfaceName, - const G4String& volume_name, - G4double& area); - G4bool AddanInterfaceBetweenTwoVolumes(const G4String& SurfaceName, - const G4String& volume_name1, - const G4String& volume_name2, - G4double& area); - void ClearListOfSelectedSurface(); - - private: - - G4AdjointCrossSurfChecker(); - ~G4AdjointCrossSurfChecker(); - - G4int FindRegisteredSurface(const G4String& name); - - private: - - static G4ThreadLocal G4AdjointCrossSurfChecker* instance; - - std::vector ListOfSurfaceName; - std::vector ListOfSurfaceType; - std::vector ListOfSphereRadius; - std::vector ListOfSphereCenter; - std::vector ListOfVol1Name; - std::vector ListOfVol2Name; - std::vector AreaOfSurface; +class G4AdjointCrossSurfChecker +{ + public: + static G4AdjointCrossSurfChecker* GetInstance(); + + G4bool CrossingASphere(const G4Step* aStep, G4double sphere_radius, G4ThreeVector sphere_center, + G4ThreeVector& cross_pos, G4double& cos_to_surface, G4bool& GoingIn); + + G4bool GoingInOrOutOfaVolume( + const G4Step* aStep, const G4String& volume_name, G4double& cos_to_surface, G4bool& GoingIn); + + G4bool GoingInOrOutOfaVolumeByExtSurface(const G4Step* aStep, const G4String& volume_name, + const G4String& mother_lvol_name, G4double& cos_to_surface, G4bool& GoingIn); + + G4bool CrossingAGivenRegisteredSurface(const G4Step* aStep, const G4String& surface_name, + G4ThreeVector& cross_pos, G4double& cos_to_surface, G4bool& GoingIn); + + G4bool CrossingAGivenRegisteredSurface(const G4Step* aStep, G4int ind, G4ThreeVector& cross_pos, + G4double& cos_to_surface, G4bool& GoingIn); + + G4bool CrossingOneOfTheRegisteredSurface(const G4Step* aStep, G4String& surface_name, + G4ThreeVector& cross_pos, G4double& cos_to_surface, G4bool& GoingIn); + + G4bool CrossingAnInterfaceBetweenTwoVolumes(const G4Step* aStep, const G4String& vol1_name, + const G4String& vol2_name, G4ThreeVector& cross_pos, G4double& cos_to_surface, G4bool& GoingIn); + + G4bool AddaSphericalSurface( + const G4String& SurfaceName, G4double radius, G4ThreeVector pos, G4double& area); + G4bool AddaSphericalSurfaceWithCenterAtTheCenterOfAVolume(const G4String& SurfaceName, + G4double radius, const G4String& volume_name, G4ThreeVector& center, G4double& area); + G4bool AddanExtSurfaceOfAvolume( + const G4String& SurfaceName, const G4String& volume_name, G4double& area); + G4bool AddanInterfaceBetweenTwoVolumes(const G4String& SurfaceName, const G4String& volume_name1, + const G4String& volume_name2, G4double& area); + void ClearListOfSelectedSurface(); + + private: + G4AdjointCrossSurfChecker() = default; + ~G4AdjointCrossSurfChecker(); + + G4int FindRegisteredSurface(const G4String& name); + + private: + static G4ThreadLocal G4AdjointCrossSurfChecker* instance; + + std::vector ListOfSurfaceName; + std::vector ListOfSurfaceType; + std::vector ListOfSphereRadius; + std::vector ListOfSphereCenter; + std::vector ListOfVol1Name; + std::vector ListOfVol2Name; + std::vector AreaOfSurface; }; #endif diff --git a/source/tracking/include/G4AdjointSteppingAction.hh b/source/tracking/include/G4AdjointSteppingAction.hh index 8bd87f8bb91..4b2c7813513 100644 --- a/source/tracking/include/G4AdjointSteppingAction.hh +++ b/source/tracking/include/G4AdjointSteppingAction.hh @@ -27,9 +27,9 @@ // // Class description: // -// Stepping action used in the adjoint simulation. +// Stepping action used in the adjoint simulation. // It is responsible to stop the adjoint tracking phase when: -// a) The adjoint track reaches the external surface. +// a) The adjoint track reaches the external surface. // b) The being tracked adjoint dynamic particle get an energy higher than // the maximum energy of the external source. // c) The adjoint track enters the volume delimited by the adjoint source. @@ -43,7 +43,7 @@ // Author: L. Desorgher, SpaceIT GmbH // Contract: ESA contract 21435/08/NL/AT // Customer: ESA/ESTEC -// History: +// History: // - 15/01/2007 L.Desorgher, created. // - 04/11/2009 L.Desorgher, added possibility to use user stepping action. // - 20/11/2009 L.Desorgher, corrected stop of adjoint particles tracking @@ -52,69 +52,65 @@ #ifndef G4AdjointSteppingAction_hh #define G4AdjointSteppingAction_hh 1 +#include "G4ThreeVector.hh" #include "G4UserSteppingAction.hh" #include "globals.hh" -#include "G4ThreeVector.hh" class G4AdjointCrossSurfChecker; class G4ParticleDefinition; class G4AdjointSteppingAction : public G4UserSteppingAction { - public: + public: + G4AdjointSteppingAction(); + ~G4AdjointSteppingAction() override = default; - G4AdjointSteppingAction(); - ~G4AdjointSteppingAction(); + void UserSteppingAction(const G4Step*) override; - void UserSteppingAction(const G4Step*); - - inline void SetExtSourceEMax(G4double Emax) - { ext_sourceEMax = Emax; } - inline void SetStartEvent(G4bool aBool) - { start_event = aBool; } - inline G4bool GetDidAdjParticleReachTheExtSource() - { return did_adj_part_reach_ext_source; } - inline G4ThreeVector GetLastMomentum() - { return last_momentum; } - inline G4ThreeVector GetLastPosition() - { return last_pos; } - inline G4double GetLastEkin() - { return last_ekin; } - inline G4double GetLastWeight() - { return last_weight; } - inline void SetPrimWeight(G4double weight) - { prim_weight = weight; } - inline G4ParticleDefinition* GetLastPartDef() - { return last_part_def; } - inline void SetUserAdjointSteppingAction(G4UserSteppingAction* anAction) - { theUserAdjointSteppingAction = anAction; } - inline void SetUserForwardSteppingAction(G4UserSteppingAction* anAction) - { theUserFwdSteppingAction = anAction; } - inline void SetAdjointTrackingMode(G4bool aBool) - { is_adjoint_tracking_mode = aBool; } - inline void ResetDidOneAdjPartReachExtSourceDuringEvent() - { did_one_adj_part_reach_ext_source_during_event = false; } - inline void SetAdjointGeantinoTrackingMode(G4bool aBool) - { is_adjoint_geantino_tracking_mode = aBool; } + inline void SetExtSourceEMax(G4double Emax) { ext_sourceEMax = Emax; } + inline void SetStartEvent(G4bool aBool) { start_event = aBool; } + inline G4bool GetDidAdjParticleReachTheExtSource() { return did_adj_part_reach_ext_source; } + inline G4ThreeVector GetLastMomentum() { return last_momentum; } + inline G4ThreeVector GetLastPosition() { return last_pos; } + inline G4double GetLastEkin() { return last_ekin; } + inline G4double GetLastWeight() { return last_weight; } + inline void SetPrimWeight(G4double weight) { prim_weight = weight; } + inline G4ParticleDefinition* GetLastPartDef() { return last_part_def; } + inline void SetUserAdjointSteppingAction(G4UserSteppingAction* anAction) + { + theUserAdjointSteppingAction = anAction; + } + inline void SetUserForwardSteppingAction(G4UserSteppingAction* anAction) + { + theUserFwdSteppingAction = anAction; + } + inline void SetAdjointTrackingMode(G4bool aBool) { is_adjoint_tracking_mode = aBool; } + inline void ResetDidOneAdjPartReachExtSourceDuringEvent() + { + did_one_adj_part_reach_ext_source_during_event = false; + } + inline void SetAdjointGeantinoTrackingMode(G4bool aBool) + { + is_adjoint_geantino_tracking_mode = aBool; + } - private: + private: + G4double ext_sourceEMax = 0.0; + G4AdjointCrossSurfChecker* theG4AdjointCrossSurfChecker = nullptr; - G4double ext_sourceEMax = 0.0; - G4AdjointCrossSurfChecker* theG4AdjointCrossSurfChecker = nullptr; - - G4ThreeVector last_momentum, last_pos; - G4double last_ekin = 0.0; - G4double last_weight = 0.0; - G4double prim_weight = 1.0; - G4ParticleDefinition* last_part_def = nullptr; - G4UserSteppingAction* theUserAdjointSteppingAction = nullptr; - G4UserSteppingAction* theUserFwdSteppingAction = nullptr; + G4ThreeVector last_momentum, last_pos; + G4double last_ekin = 0.0; + G4double last_weight = 0.0; + G4double prim_weight = 1.0; + G4ParticleDefinition* last_part_def = nullptr; + G4UserSteppingAction* theUserAdjointSteppingAction = nullptr; + G4UserSteppingAction* theUserFwdSteppingAction = nullptr; - G4bool start_event = false; - G4bool did_adj_part_reach_ext_source = false; - G4bool did_one_adj_part_reach_ext_source_during_event = false; - G4bool is_adjoint_tracking_mode = false; - G4bool is_adjoint_geantino_tracking_mode = false; + G4bool start_event = false; + G4bool did_adj_part_reach_ext_source = false; + G4bool did_one_adj_part_reach_ext_source_during_event = false; + G4bool is_adjoint_tracking_mode = false; + G4bool is_adjoint_geantino_tracking_mode = false; }; #endif diff --git a/source/tracking/include/G4AdjointTrackingAction.hh b/source/tracking/include/G4AdjointTrackingAction.hh index 8b2967ca458..828b8c1e83e 100644 --- a/source/tracking/include/G4AdjointTrackingAction.hh +++ b/source/tracking/include/G4AdjointTrackingAction.hh @@ -37,9 +37,10 @@ #ifndef G4AdjointTrackingAction_hh #define G4AdjointTrackingAction_hh 1 -#include "globals.hh" -#include "G4UserTrackingAction.hh" #include "G4ThreeVector.hh" +#include "G4UserTrackingAction.hh" +#include "globals.hh" + #include class G4AdjointSteppingAction; @@ -48,71 +49,73 @@ class G4ParticleDefinition; class G4AdjointTrackingAction : public G4UserTrackingAction { + public: + G4AdjointTrackingAction(G4AdjointSteppingAction* anAction); + ~G4AdjointTrackingAction() override = default; - public: - - G4AdjointTrackingAction(G4AdjointSteppingAction* anAction); - virtual ~G4AdjointTrackingAction(); - - virtual void PreUserTrackingAction(const G4Track*); - virtual void PostUserTrackingAction(const G4Track*); - void RegisterAtEndOfAdjointTrack(); - void ClearEndOfAdjointTrackInfoVectors(); - - inline void SetUserForwardTrackingAction(G4UserTrackingAction* anAction) - { theUserFwdTrackingAction = anAction; } - inline G4ThreeVector GetPositionAtEndOfLastAdjointTrack(std::size_t i=0) - { return last_pos_vec[i]; } - inline G4ThreeVector GetDirectionAtEndOfLastAdjointTrack(std::size_t i=0) - { return last_direction_vec[i]; } - inline G4double GetEkinAtEndOfLastAdjointTrack(std::size_t i=0) - { return last_ekin_vec[i]; } - inline G4double GetEkinNucAtEndOfLastAdjointTrack(std::size_t i=0) - { return last_ekin_nuc_vec[i]; } - inline G4double GetWeightAtEndOfLastAdjointTrack(std::size_t i=0) - { return last_weight_vec[i]; } - inline G4double GetCosthAtEndOfLastAdjointTrack(std::size_t i=0) - { return last_cos_th_vec[i]; } - inline const G4String& GetFwdParticleNameAtEndOfLastAdjointTrack() - { return last_fwd_part_name; } - inline G4int GetFwdParticlePDGEncodingAtEndOfLastAdjointTrack(std::size_t i=0) - { return last_fwd_part_PDGEncoding_vec[i]; } - inline G4bool GetIsAdjointTrackingMode() - { return is_adjoint_tracking_mode; } - inline G4int GetLastFwdParticleIndex(std::size_t i=0) - { return last_fwd_part_index_vec[i]; } - inline std::size_t GetNbOfAdointTracksReachingTheExternalSurface() - { return last_pos_vec.size(); } - inline void SetListOfPrimaryFwdParticles(std::vector* aListOfParticles) - { pListOfPrimaryFwdParticles = aListOfParticles; } + void PreUserTrackingAction(const G4Track*) override; + void PostUserTrackingAction(const G4Track*) override; + void RegisterAtEndOfAdjointTrack(); + void ClearEndOfAdjointTrackInfoVectors(); - private: + inline void SetUserForwardTrackingAction(G4UserTrackingAction* anAction) + { + theUserFwdTrackingAction = anAction; + } + inline G4ThreeVector GetPositionAtEndOfLastAdjointTrack(std::size_t i = 0) + { + return last_pos_vec[i]; + } + inline G4ThreeVector GetDirectionAtEndOfLastAdjointTrack(std::size_t i = 0) + { + return last_direction_vec[i]; + } + inline G4double GetEkinAtEndOfLastAdjointTrack(std::size_t i = 0) { return last_ekin_vec[i]; } + inline G4double GetEkinNucAtEndOfLastAdjointTrack(std::size_t i = 0) + { + return last_ekin_nuc_vec[i]; + } + inline G4double GetWeightAtEndOfLastAdjointTrack(std::size_t i = 0) { return last_weight_vec[i]; } + inline G4double GetCosthAtEndOfLastAdjointTrack(std::size_t i = 0) { return last_cos_th_vec[i]; } + inline const G4String& GetFwdParticleNameAtEndOfLastAdjointTrack() { return last_fwd_part_name; } + inline G4int GetFwdParticlePDGEncodingAtEndOfLastAdjointTrack(std::size_t i = 0) + { + return last_fwd_part_PDGEncoding_vec[i]; + } + inline G4bool GetIsAdjointTrackingMode() { return is_adjoint_tracking_mode; } + inline G4int GetLastFwdParticleIndex(std::size_t i = 0) { return last_fwd_part_index_vec[i]; } + inline std::size_t GetNbOfAdointTracksReachingTheExternalSurface() { return last_pos_vec.size(); } + inline void SetListOfPrimaryFwdParticles(std::vector* aListOfParticles) + { + pListOfPrimaryFwdParticles = aListOfParticles; + } - G4AdjointSteppingAction* theAdjointSteppingAction = nullptr; - G4UserTrackingAction* theUserFwdTrackingAction = nullptr; - G4bool is_adjoint_tracking_mode = false; + private: + G4AdjointSteppingAction* theAdjointSteppingAction = nullptr; + G4UserTrackingAction* theUserFwdTrackingAction = nullptr; + G4bool is_adjoint_tracking_mode = false; - // Adjoint particle information on the external surface - // ---------------------------------------------------- - G4ThreeVector last_pos; - G4ThreeVector last_direction; - G4double last_ekin = 0.0, last_ekin_nuc = 0.0; - // last_ekin_nuc=last_ekin/nuc, nuc is 1 if not a nucleus - G4double last_cos_th = 0.0; - G4String last_fwd_part_name; - G4int last_fwd_part_PDGEncoding = 0; - G4double last_weight = 0.0; - G4int last_fwd_part_index = 0; - std::vector* pListOfPrimaryFwdParticles = nullptr; + // Adjoint particle information on the external surface + // ---------------------------------------------------- + G4ThreeVector last_pos; + G4ThreeVector last_direction; + G4double last_ekin = 0.0, last_ekin_nuc = 0.0; + // last_ekin_nuc=last_ekin/nuc, nuc is 1 if not a nucleus + G4double last_cos_th = 0.0; + G4String last_fwd_part_name; + G4int last_fwd_part_PDGEncoding = 0; + G4double last_weight = 0.0; + G4int last_fwd_part_index = 0; + std::vector* pListOfPrimaryFwdParticles = nullptr; - std::vector last_pos_vec; - std::vector last_direction_vec; - std::vector last_ekin_vec; - std::vector last_ekin_nuc_vec; - std::vector last_cos_th_vec; - std::vector last_weight_vec; - std::vector last_fwd_part_PDGEncoding_vec; - std::vector last_fwd_part_index_vec; + std::vector last_pos_vec; + std::vector last_direction_vec; + std::vector last_ekin_vec; + std::vector last_ekin_nuc_vec; + std::vector last_cos_th_vec; + std::vector last_weight_vec; + std::vector last_fwd_part_PDGEncoding_vec; + std::vector last_fwd_part_index_vec; }; #endif diff --git a/source/tracking/include/G4MultiSteppingAction.hh b/source/tracking/include/G4MultiSteppingAction.hh index 86084ed60db..754270ef90a 100644 --- a/source/tracking/include/G4MultiSteppingAction.hh +++ b/source/tracking/include/G4MultiSteppingAction.hh @@ -48,21 +48,20 @@ #define G4MULTISTEPPINGACTION_HH #include "G4UserSteppingAction.hh" -#include + #include +#include using G4UserSteppingActionUPtr = std::unique_ptr; using G4UserSteppingActionVector = std::vector; -class G4MultiSteppingAction : public G4UserSteppingAction, - public G4UserSteppingActionVector +class G4MultiSteppingAction : public G4UserSteppingAction, public G4UserSteppingActionVector { - public: - - G4MultiSteppingAction() = default; - virtual ~G4MultiSteppingAction() override = default; - virtual void UserSteppingAction(const G4Step*) override; - virtual void SetSteppingManagerPointer(G4SteppingManager* pVal) override; + public: + G4MultiSteppingAction() = default; + ~G4MultiSteppingAction() override = default; + void UserSteppingAction(const G4Step*) override; + void SetSteppingManagerPointer(G4SteppingManager* pVal) override; }; #endif diff --git a/source/tracking/include/G4MultiTrackingAction.hh b/source/tracking/include/G4MultiTrackingAction.hh index 86e7361124b..3c6747c72bc 100644 --- a/source/tracking/include/G4MultiTrackingAction.hh +++ b/source/tracking/include/G4MultiTrackingAction.hh @@ -48,22 +48,21 @@ #define G4MULTITRACKINGACTION_HH #include "G4UserTrackingAction.hh" -#include + #include +#include -using G4UserTrackingActionUPtr=std::unique_ptr; -using G4UserTrackingActionVector=std::vector; +using G4UserTrackingActionUPtr = std::unique_ptr; +using G4UserTrackingActionVector = std::vector; -class G4MultiTrackingAction : public G4UserTrackingAction, - public G4UserTrackingActionVector +class G4MultiTrackingAction : public G4UserTrackingAction, public G4UserTrackingActionVector { - public: - - G4MultiTrackingAction() = default; - virtual ~G4MultiTrackingAction() override = default; - virtual void SetTrackingManagerPointer(G4TrackingManager* pVal) override; - virtual void PreUserTrackingAction(const G4Track*) override; - virtual void PostUserTrackingAction(const G4Track*) override; + public: + G4MultiTrackingAction() = default; + ~G4MultiTrackingAction() override = default; + void SetTrackingManagerPointer(G4TrackingManager* pVal) override; + void PreUserTrackingAction(const G4Track*) override; + void PostUserTrackingAction(const G4Track*) override; }; #endif diff --git a/source/tracking/include/G4RichTrajectory.hh b/source/tracking/include/G4RichTrajectory.hh index 991f18b4f1d..2ab28ec169b 100644 --- a/source/tracking/include/G4RichTrajectory.hh +++ b/source/tracking/include/G4RichTrajectory.hh @@ -29,8 +29,8 @@ // // This class extends G4Trajectory, which includes the following: // 1) List of trajectory points which compose the trajectory, -// 2) static information of particle which generated the -// trajectory, +// 2) static information of particle which generated the +// trajectory, // 3) trackID and parent particle ID of the trajectory. // The extended information, only publicly accessible through AttValues, // includes: @@ -50,66 +50,64 @@ #ifndef G4RICHTRAJECTORY_HH #define G4RICHTRAJECTORY_HH -#include "trkgdefs.hh" -#include "G4Trajectory.hh" #include "G4TouchableHandle.hh" +#include "G4Trajectory.hh" + +#include "trkgdefs.hh" class G4RichTrajectory : public G4Trajectory -{ +{ using RichTrajectoryPointsContainer = std::vector; - public: - - // Constructors/destructor - // - G4RichTrajectory(); - G4RichTrajectory(const G4Track* aTrack); - G4RichTrajectory(G4RichTrajectory &); - virtual ~G4RichTrajectory(); - - // Operators - // - G4RichTrajectory& operator= (const G4RichTrajectory &) = delete; - G4int operator == (const G4RichTrajectory& r) const { return (this==&r); } - - inline void* operator new(size_t); - inline void operator delete(void*); - - // Other (virtual) member functions - // - void ShowTrajectory(std::ostream& os=G4cout) const; - void DrawTrajectory() const; - void AppendStep(const G4Step* aStep); - void MergeTrajectory(G4VTrajectory* secondTrajectory); - inline G4int GetPointEntries() const; - inline G4VTrajectoryPoint* GetPoint(G4int i) const; - - // Get methods for HepRep style attributes - // - virtual const std::map* GetAttDefs() const; - virtual std::vector* CreateAttValues() const; - - private: - - // Extended information (only publicly accessible through AttValues)... - // - RichTrajectoryPointsContainer* fpRichPointsContainer = nullptr; - G4TouchableHandle fpInitialVolume; - G4TouchableHandle fpInitialNextVolume; - const G4VProcess* fpCreatorProcess = nullptr; - G4int fCreatorModelID = 0; - G4TouchableHandle fpFinalVolume; - G4TouchableHandle fpFinalNextVolume; - const G4VProcess* fpEndingProcess = nullptr; - G4double fFinalKineticEnergy = 0.0; + public: + // Constructors/destructor + // + G4RichTrajectory() = default; + G4RichTrajectory(const G4Track* aTrack); + ~G4RichTrajectory() override; + G4RichTrajectory(G4RichTrajectory&); + G4RichTrajectory& operator=(const G4RichTrajectory&) = delete; + + // Operators + // + G4bool operator==(const G4RichTrajectory& r) const { return (this == &r); } + + inline void* operator new(size_t); + inline void operator delete(void*); + + // Other (virtual) member functions + // + void ShowTrajectory(std::ostream& os = G4cout) const override; + void DrawTrajectory() const override; + void AppendStep(const G4Step* aStep) override; + void MergeTrajectory(G4VTrajectory* secondTrajectory) override; + inline G4int GetPointEntries() const override; + inline G4VTrajectoryPoint* GetPoint(G4int i) const override; + + // Get methods for HepRep style attributes + // + const std::map* GetAttDefs() const override; + std::vector* CreateAttValues() const override; + + private: + // Extended information (only publicly accessible through AttValues)... + // + RichTrajectoryPointsContainer* fpRichPointsContainer = nullptr; + G4TouchableHandle fpInitialVolume; + G4TouchableHandle fpInitialNextVolume; + const G4VProcess* fpCreatorProcess = nullptr; + G4int fCreatorModelID = 0; + G4TouchableHandle fpFinalVolume; + G4TouchableHandle fpFinalNextVolume; + const G4VProcess* fpEndingProcess = nullptr; + G4double fFinalKineticEnergy = 0.0; }; extern G4TRACKING_DLL G4Allocator*& aRichTrajectoryAllocator(); inline void* G4RichTrajectory::operator new(size_t) { - if (aRichTrajectoryAllocator() == nullptr) - { + if (aRichTrajectoryAllocator() == nullptr) { aRichTrajectoryAllocator() = new G4Allocator; } return (void*)aRichTrajectoryAllocator()->MallocSingle(); diff --git a/source/tracking/include/G4RichTrajectoryPoint.hh b/source/tracking/include/G4RichTrajectoryPoint.hh index 5335d7bced1..bdeda47247b 100644 --- a/source/tracking/include/G4RichTrajectoryPoint.hh +++ b/source/tracking/include/G4RichTrajectoryPoint.hh @@ -51,13 +51,14 @@ #ifndef G4RICHTRAJECTORYPOINT_HH #define G4RICHTRAJECTORYPOINT_HH -#include +#include "G4StepStatus.hh" +#include "G4ThreeVector.hh" +#include "G4TouchableHandle.hh" +#include "G4TrajectoryPoint.hh" #include "trkgdefs.hh" -#include "G4TrajectoryPoint.hh" -#include "G4TouchableHandle.hh" -#include "G4ThreeVector.hh" -#include "G4StepStatus.hh" + +#include class G4Track; class G4Step; @@ -65,76 +66,66 @@ class G4VProcess; class G4RichTrajectoryPoint : public G4TrajectoryPoint { - - public: // without description - - // Constructors/Destructor - // - G4RichTrajectoryPoint(); - G4RichTrajectoryPoint(const G4Track*); // For first point. - G4RichTrajectoryPoint(const G4Step*); // For subsequent points. - G4RichTrajectoryPoint(const G4RichTrajectoryPoint& right); - virtual ~G4RichTrajectoryPoint(); - - // Operators - // - G4RichTrajectoryPoint& operator= (const G4RichTrajectoryPoint&) = delete; - inline G4bool operator==(const G4RichTrajectoryPoint& right) const; - inline void *operator new(size_t); - inline void operator delete(void *aRichTrajectoryPoint); - - // Get/Set functions - // - inline const std::vector* GetAuxiliaryPoints() const; - virtual const std::map* GetAttDefs() const; - virtual std::vector* CreateAttValues() const; - - private: - - // Extended member data - // - std::vector* fpAuxiliaryPointVector = nullptr; - G4double fTotEDep = 0.0; - G4double fRemainingEnergy = 0.0; - const G4VProcess* fpProcess = nullptr; - G4StepStatus fPreStepPointStatus = fUndefined; - G4StepStatus fPostStepPointStatus = fUndefined; - G4double fPreStepPointGlobalTime = 0.0; - G4double fPostStepPointGlobalTime = 0.0; - G4TouchableHandle fpPreStepPointVolume; - G4TouchableHandle fpPostStepPointVolume; - G4double fPreStepPointWeight = 0.0; - G4double fPostStepPointWeight = 0.0; + public: // without description + // Constructors/Destructor + // + G4RichTrajectoryPoint(); + G4RichTrajectoryPoint(const G4Track*); // For first point. + G4RichTrajectoryPoint(const G4Step*); // For subsequent points. + G4RichTrajectoryPoint(const G4RichTrajectoryPoint& right); + ~G4RichTrajectoryPoint() override; + + // Operators + // + G4RichTrajectoryPoint& operator=(const G4RichTrajectoryPoint&) = delete; + inline G4bool operator==(const G4RichTrajectoryPoint& right) const; + inline void* operator new(size_t); + inline void operator delete(void* aRichTrajectoryPoint); + + // Get/Set functions + // + inline const std::vector* GetAuxiliaryPoints() const override; + const std::map* GetAttDefs() const override; + std::vector* CreateAttValues() const override; + + private: + // Extended member data + // + std::vector* fpAuxiliaryPointVector = nullptr; + G4double fTotEDep = 0.0; + G4double fRemainingEnergy = 0.0; + const G4VProcess* fpProcess = nullptr; + G4StepStatus fPreStepPointStatus = fUndefined; + G4StepStatus fPostStepPointStatus = fUndefined; + G4double fPreStepPointGlobalTime = 0.0; + G4double fPostStepPointGlobalTime = 0.0; + G4TouchableHandle fpPreStepPointVolume; + G4TouchableHandle fpPostStepPointVolume; + G4double fPreStepPointWeight = 0.0; + G4double fPostStepPointWeight = 0.0; }; -extern G4TRACKING_DLL -G4Allocator*& aRichTrajectoryPointAllocator(); +extern G4TRACKING_DLL G4Allocator*& aRichTrajectoryPointAllocator(); -inline void* -G4RichTrajectoryPoint::operator new(size_t) +inline void* G4RichTrajectoryPoint::operator new(size_t) { - if (aRichTrajectoryPointAllocator() == nullptr) - { + if (aRichTrajectoryPointAllocator() == nullptr) { aRichTrajectoryPointAllocator() = new G4Allocator; } - return (void *) aRichTrajectoryPointAllocator()->MallocSingle(); + return (void*)aRichTrajectoryPointAllocator()->MallocSingle(); } -inline void -G4RichTrajectoryPoint::operator delete(void *aRichTrajectoryPoint) +inline void G4RichTrajectoryPoint::operator delete(void* aRichTrajectoryPoint) { - aRichTrajectoryPointAllocator()->FreeSingle - ((G4RichTrajectoryPoint *) aRichTrajectoryPoint); + aRichTrajectoryPointAllocator()->FreeSingle((G4RichTrajectoryPoint*)aRichTrajectoryPoint); } -inline G4bool -G4RichTrajectoryPoint::operator==(const G4RichTrajectoryPoint& r) const +inline G4bool G4RichTrajectoryPoint::operator==(const G4RichTrajectoryPoint& r) const { - return (this==&r); + return (this == &r); } -inline const std::vector* -G4RichTrajectoryPoint::GetAuxiliaryPoints() const +inline const std::vector* G4RichTrajectoryPoint::GetAuxiliaryPoints() const { return fpAuxiliaryPointVector; } diff --git a/source/tracking/include/G4SmoothTrajectory.hh b/source/tracking/include/G4SmoothTrajectory.hh index c9f8595cc1f..cdb59fa6246 100644 --- a/source/tracking/include/G4SmoothTrajectory.hh +++ b/source/tracking/include/G4SmoothTrajectory.hh @@ -28,10 +28,10 @@ // Class description: // // This class represents the trajectory of a particle tracked. -// It includes information of +// It includes information of // 1) List of trajectory points which compose the trajectory, -// 2) static information of particle which generates the -// trajectory, +// 2) static information of particle which generates the +// trajectory, // 3) trackID and parent particle ID of the trajectory, // 4) Auxiliary points will be associated to G4SmoothTrajectoryPoint // to assist drawing smoothly curved trajectory. @@ -45,18 +45,19 @@ #ifndef G4SmoothTrajectory_hh #define G4SmoothTrajectory_hh 1 -#include // Include from 'system' -#include - -#include "trkgdefs.hh" -#include "G4VTrajectory.hh" #include "G4Allocator.hh" -#include "G4ios.hh" // Include from 'system' -#include "globals.hh" // Include from 'global' -#include "G4ParticleDefinition.hh" // Include from 'particle+matter' -#include "G4SmoothTrajectoryPoint.hh" // Include from 'tracking' -#include "G4Track.hh" +#include "G4ParticleDefinition.hh" // Include from 'particle+matter' +#include "G4SmoothTrajectoryPoint.hh" // Include from 'tracking' #include "G4Step.hh" +#include "G4Track.hh" +#include "G4VTrajectory.hh" +#include "G4ios.hh" // Include from 'system' +#include "globals.hh" // Include from 'global' + +#include "trkgdefs.hh" +#include // Include from 'system' + +#include class G4Polyline; @@ -64,76 +65,63 @@ class G4SmoothTrajectory : public G4VTrajectory { using G4TrajectoryPointContainer = std::vector; - public: - - // Constructors/Destructor - // - G4SmoothTrajectory(); - G4SmoothTrajectory(const G4Track* aTrack); - G4SmoothTrajectory(G4SmoothTrajectory &); - virtual ~G4SmoothTrajectory(); - - // Operators - // - G4SmoothTrajectory& operator= (const G4SmoothTrajectory&) = delete; - inline G4int operator == (const G4SmoothTrajectory& r) const; - inline void* operator new(size_t); - inline void operator delete(void*); - - // Get/Set functions - // - inline G4int GetTrackID() const - { return fTrackID; } - inline G4int GetParentID() const - { return fParentID; } - inline G4String GetParticleName() const - { return ParticleName; } - inline G4double GetCharge() const - { return PDGCharge; } - inline G4int GetPDGEncoding() const - { return PDGEncoding; } - inline G4double GetInitialKineticEnergy() const - { return initialKineticEnergy; } - inline G4ThreeVector GetInitialMomentum() const - { return initialMomentum; } - - // Other member functions - // - virtual void ShowTrajectory(std::ostream& os=G4cout) const; - virtual void DrawTrajectory() const; - virtual void AppendStep(const G4Step* aStep); - virtual G4int GetPointEntries() const - { return (G4int)positionRecord->size(); } - virtual G4VTrajectoryPoint* GetPoint(G4int i) const - { return (*positionRecord)[i]; } - virtual void MergeTrajectory(G4VTrajectory* secondTrajectory); - - G4ParticleDefinition* GetParticleDefinition(); - - // Get method for HEPRep style attributes - // - virtual const std::map* GetAttDefs() const; - virtual std::vector* CreateAttValues() const; - - private: - - G4TrajectoryPointContainer* positionRecord = nullptr; - G4int fTrackID = 0; - G4int fParentID = 0; - G4int PDGEncoding = 0; - G4double PDGCharge = 0.0; - G4String ParticleName = ""; - G4double initialKineticEnergy = 0.0; - G4ThreeVector initialMomentum; + public: + // Constructors/Destructor + // + G4SmoothTrajectory() = default; + G4SmoothTrajectory(const G4Track* aTrack); + ~G4SmoothTrajectory() override; + G4SmoothTrajectory(G4SmoothTrajectory&); + G4SmoothTrajectory& operator=(const G4SmoothTrajectory&) = delete; + + // Operators + // + inline G4bool operator==(const G4SmoothTrajectory& r) const; + inline void* operator new(size_t); + inline void operator delete(void*); + + // Get/Set functions + // + inline G4int GetTrackID() const override { return fTrackID; } + inline G4int GetParentID() const override { return fParentID; } + inline G4String GetParticleName() const override { return ParticleName; } + inline G4double GetCharge() const override { return PDGCharge; } + inline G4int GetPDGEncoding() const override { return PDGEncoding; } + inline G4double GetInitialKineticEnergy() const { return initialKineticEnergy; } + inline G4ThreeVector GetInitialMomentum() const override { return initialMomentum; } + + // Other member functions + // + void ShowTrajectory(std::ostream& os = G4cout) const override; + void DrawTrajectory() const override; + void AppendStep(const G4Step* aStep) override; + G4int GetPointEntries() const override { return (G4int)positionRecord->size(); } + G4VTrajectoryPoint* GetPoint(G4int i) const override { return (*positionRecord)[i]; } + void MergeTrajectory(G4VTrajectory* secondTrajectory) override; + + G4ParticleDefinition* GetParticleDefinition(); + + // Get method for HEPRep style attributes + // + const std::map* GetAttDefs() const override; + std::vector* CreateAttValues() const override; + + private: + G4TrajectoryPointContainer* positionRecord = nullptr; + G4int fTrackID = 0; + G4int fParentID = 0; + G4int PDGEncoding = 0; + G4double PDGCharge = 0.0; + G4String ParticleName = ""; + G4double initialKineticEnergy = 0.0; + G4ThreeVector initialMomentum; }; -extern G4TRACKING_DLL -G4Allocator*& aSmoothTrajectoryAllocator(); +extern G4TRACKING_DLL G4Allocator*& aSmoothTrajectoryAllocator(); inline void* G4SmoothTrajectory::operator new(size_t) { - if (aSmoothTrajectoryAllocator() == nullptr) - { + if (aSmoothTrajectoryAllocator() == nullptr) { aSmoothTrajectoryAllocator() = new G4Allocator; } return (void*)aSmoothTrajectoryAllocator()->MallocSingle(); @@ -144,9 +132,9 @@ inline void G4SmoothTrajectory::operator delete(void* aTrajectory) aSmoothTrajectoryAllocator()->FreeSingle((G4SmoothTrajectory*)aTrajectory); } -inline G4int G4SmoothTrajectory::operator== (const G4SmoothTrajectory& r) const +inline G4bool G4SmoothTrajectory::operator==(const G4SmoothTrajectory& r) const { - return (this==&r); + return (this == &r); } #endif diff --git a/source/tracking/include/G4SmoothTrajectoryPoint.hh b/source/tracking/include/G4SmoothTrajectoryPoint.hh index fc31dd16721..c7352441c98 100644 --- a/source/tracking/include/G4SmoothTrajectoryPoint.hh +++ b/source/tracking/include/G4SmoothTrajectoryPoint.hh @@ -38,77 +38,67 @@ #ifndef G4SmoothTrajectoryPoint_hh #define G4SmoothTrajectoryPoint_hh 1 -#include "trkgdefs.hh" +#include "G4Allocator.hh" // Include from 'particle+matter' +#include "G4ThreeVector.hh" // Include from 'geometry' #include "G4VTrajectoryPoint.hh" -#include "globals.hh" // Include from 'global' -#include "G4ThreeVector.hh" // Include from 'geometry' -#include "G4Allocator.hh" // Include from 'particle+matter' +#include "globals.hh" // Include from 'global' + +#include "trkgdefs.hh" class G4SmoothTrajectoryPoint : public G4VTrajectoryPoint { + public: + G4SmoothTrajectoryPoint() = default; + G4SmoothTrajectoryPoint(G4ThreeVector pos, std::vector* auxiliaryPoints); + // No auxiliary points setter, so must set the points in the + // constructor already + G4SmoothTrajectoryPoint(G4ThreeVector pos); + ~G4SmoothTrajectoryPoint() override; + G4SmoothTrajectoryPoint(const G4SmoothTrajectoryPoint& right); + G4SmoothTrajectoryPoint& operator=(const G4SmoothTrajectoryPoint&) = delete; + + // Operators + // + inline void* operator new(size_t); + inline void operator delete(void* aTrajectoryPoint); + inline G4bool operator==(const G4SmoothTrajectoryPoint& right) const; + + // Get/Set functions + // + inline const G4ThreeVector GetPosition() const override { return fPosition; } + inline const std::vector* GetAuxiliaryPoints() const override + { + return fAuxiliaryPointVector; + } - public: - - G4SmoothTrajectoryPoint(); - G4SmoothTrajectoryPoint(G4ThreeVector pos, - std::vector* auxiliaryPoints); - // No auxiliary points setter, so must set the points in the - // constructor already - - G4SmoothTrajectoryPoint(G4ThreeVector pos); - G4SmoothTrajectoryPoint(const G4SmoothTrajectoryPoint& right); - virtual ~G4SmoothTrajectoryPoint(); - - G4SmoothTrajectoryPoint& operator= (const G4SmoothTrajectoryPoint&)= delete; - - // Operators - // - inline void* operator new(size_t); - inline void operator delete(void* aTrajectoryPoint); - inline G4bool operator==(const G4SmoothTrajectoryPoint& right) const; - - // Get/Set functions - // - inline const G4ThreeVector GetPosition() const - { return fPosition; } - inline const std::vector* GetAuxiliaryPoints() const - { return fAuxiliaryPointVector; } - - // Get method for HEPRep style attributes - // - virtual const std::map* GetAttDefs() const; - virtual std::vector* CreateAttValues() const; - - private: + // Get method for HEPRep style attributes + // + const std::map* GetAttDefs() const override; + std::vector* CreateAttValues() const override; - G4ThreeVector fPosition; - std::vector* fAuxiliaryPointVector = nullptr; + private: + G4ThreeVector fPosition{0., 0., 0.}; + std::vector* fAuxiliaryPointVector = nullptr; }; -extern G4TRACKING_DLL -G4Allocator*& aSmoothTrajectoryPointAllocator(); +extern G4TRACKING_DLL G4Allocator*& aSmoothTrajectoryPointAllocator(); -inline void* -G4SmoothTrajectoryPoint::operator new(size_t) +inline void* G4SmoothTrajectoryPoint::operator new(size_t) { - if (aSmoothTrajectoryPointAllocator() == nullptr) - { - aSmoothTrajectoryPointAllocator()= new G4Allocator; + if (aSmoothTrajectoryPointAllocator() == nullptr) { + aSmoothTrajectoryPointAllocator() = new G4Allocator; } - return (void *) aSmoothTrajectoryPointAllocator()->MallocSingle(); + return (void*)aSmoothTrajectoryPointAllocator()->MallocSingle(); } -inline void -G4SmoothTrajectoryPoint::operator delete(void *aTrajectoryPoint) +inline void G4SmoothTrajectoryPoint::operator delete(void* aTrajectoryPoint) { - aSmoothTrajectoryPointAllocator() - ->FreeSingle((G4SmoothTrajectoryPoint*) aTrajectoryPoint); + aSmoothTrajectoryPointAllocator()->FreeSingle((G4SmoothTrajectoryPoint*)aTrajectoryPoint); } -inline G4bool -G4SmoothTrajectoryPoint::operator==(const G4SmoothTrajectoryPoint& r) const +inline G4bool G4SmoothTrajectoryPoint::operator==(const G4SmoothTrajectoryPoint& r) const { - return (this==&r); + return (this == &r); } #endif diff --git a/source/tracking/include/G4SteppingManager.hh b/source/tracking/include/G4SteppingManager.hh index 3710d7faa0a..b51fcf4cca6 100644 --- a/source/tracking/include/G4SteppingManager.hh +++ b/source/tracking/include/G4SteppingManager.hh @@ -44,27 +44,26 @@ #ifndef G4SteppingManager_hh #define G4SteppingManager_hh 1 -#include // Include from 'system' -#include // Include from 'system' -#include "globals.hh" // Include from 'global' -#include "Randomize.hh" // Include from 'global' - -#include "G4Navigator.hh" // Include from 'geometry' -#include "G4LogicalVolume.hh" // Include from 'geometry' -#include "G4VPhysicalVolume.hh" // Include from 'geometry' -#include "G4ProcessManager.hh" // Include from 'processes' -#include "G4NoProcess.hh" // Include from 'processes' - -#include "G4Track.hh" // Include from 'tracking' -#include "G4TrackVector.hh" // Include from 'tracking' -#include "G4TrackStatus.hh" // Include from 'tracking' -#include "G4StepStatus.hh" // Include from 'tracking' -#include "G4UserSteppingAction.hh" // Include from 'tracking' -#include "G4Step.hh" // Include from 'tracking' -#include "G4StepPoint.hh" // Include from 'tracking' -#include "G4VSteppingVerbose.hh" // Include from 'tracking' -#include "G4TouchableHandle.hh" // Include from 'geometry' -#include "G4TouchableHistoryHandle.hh" // Include from 'geometry' +#include "G4LogicalVolume.hh" // Include from 'geometry' +#include "G4Navigator.hh" // Include from 'geometry' +#include "G4NoProcess.hh" // Include from 'processes' +#include "G4ProcessManager.hh" // Include from 'processes' +#include "G4Step.hh" // Include from 'tracking' +#include "G4StepPoint.hh" // Include from 'tracking' +#include "G4StepStatus.hh" // Include from 'tracking' +#include "G4TouchableHandle.hh" // Include from 'geometry' +#include "G4TouchableHistoryHandle.hh" // Include from 'geometry' +#include "G4Track.hh" // Include from 'tracking' +#include "G4TrackStatus.hh" // Include from 'tracking' +#include "G4TrackVector.hh" // Include from 'tracking' +#include "G4UserSteppingAction.hh" // Include from 'tracking' +#include "G4VPhysicalVolume.hh" // Include from 'geometry' +#include "G4VSteppingVerbose.hh" // Include from 'tracking' +#include "Randomize.hh" // Include from 'global' +#include "globals.hh" // Include from 'global' + +#include // Include from 'system' +#include // Include from 'system' using G4SelectedAtRestDoItVector = std::vector; using G4SelectedAlongStepDoItVector = std::vector; @@ -72,205 +71,197 @@ using G4SelectedPostStepDoItVector = std::vector; class G4VSensitiveDetector; -class G4SteppingManager +class G4SteppingManager { public: using ProfilerConfig = G4Step::ProfilerConfig; public: - // Constructor/Destructor - - G4SteppingManager(); - // SteppingManger should be dynamically allocated, therefore - // you need to invoke new() when you call this constructor. - // "Secodary track vector" will be dynamically created by this - // constructor. G4UserSteppingAction will be also created - // in this constructor, and "this" pointer will be passed to - // G4UserSteppingAction. - - ~G4SteppingManager(); - - // Get/Set functions - - const G4TrackVector* GetSecondary() const; - void SetUserAction(G4UserSteppingAction* apAction); - G4Track* GetTrack() const; - void SetVerboseLevel(G4int vLevel); - void SetVerbose(G4VSteppingVerbose*); - G4Step* GetStep() const; - void SetNavigator(G4Navigator* value); - - // Other member functions - - G4StepStatus Stepping(); - // Steers to move the give particle from the TrackingManger by one Step. - - void SetInitialStep(G4Track* valueTrack); - // Sets up initial track information (enegry, position, etc) to - // the PreStepPoint of the G4Step. This funciton has to be called - // just once before the stepping loop in the "TrackingManager". - - void GetProcessNumber(); - - // Get methods - - G4double GetPhysicalStep(); - G4double GetGeometricalStep(); - G4double GetCorrectedStep(); - G4bool GetPreStepPointIsGeom(); - G4bool GetFirstStep(); - G4StepStatus GetfStepStatus(); - G4double GetTempInitVelocity(); - G4double GetTempVelocity(); - G4double GetMass(); - G4double GetsumEnergyChange(); - G4VParticleChange* GetfParticleChange(); - G4Track* GetfTrack(); - G4TrackVector* GetfSecondary(); - G4Step* GetfStep(); - G4StepPoint* GetfPreStepPoint(); - G4StepPoint* GetfPostStepPoint(); - G4VPhysicalVolume* GetfCurrentVolume(); - G4VSensitiveDetector* GetfSensitive(); - G4VProcess* GetfCurrentProcess(); - G4ProcessVector* GetfAtRestDoItVector(); - G4ProcessVector* GetfAlongStepDoItVector(); - G4ProcessVector* GetfPostStepDoItVector(); - G4ProcessVector* GetfAlongStepGetPhysIntVector(); - G4ProcessVector* GetfPostStepGetPhysIntVector(); - G4ProcessVector* GetfAtRestGetPhysIntVector(); - G4double GetcurrentMinimumStep(); - G4double GetnumberOfInteractionLengthLeft(); - std::size_t GetfAtRestDoItProcTriggered(); - std::size_t GetfAlongStepDoItProcTriggered(); - std::size_t GetfPostStepDoItProcTriggered(); - G4int GetfN2ndariesAtRestDoIt(); - G4int GetfN2ndariesAlongStepDoIt(); - G4int GetfN2ndariesPostStepDoIt(); - G4Navigator* GetfNavigator(); - G4int GetverboseLevel(); - std::size_t GetMAXofAtRestLoops(); - std::size_t GetMAXofAlongStepLoops(); - std::size_t GetMAXofPostStepLoops(); - G4SelectedAtRestDoItVector* GetfSelectedAtRestDoItVector(); - G4SelectedAlongStepDoItVector* GetfSelectedAlongStepDoItVector(); - G4SelectedPostStepDoItVector* GetfSelectedPostStepDoItVector(); - G4double GetfPreviousStepSize(); - const G4TouchableHandle& GetTouchableHandle(); - G4SteppingControl GetStepControlFlag(); - G4UserSteppingAction* GetUserAction(); - G4double GetphysIntLength(); - G4ForceCondition GetfCondition(); - G4GPILSelection GetfGPILSelection(); - - private: - - // Member functions - - void DefinePhysicalStepLength(); - // Calculate corresponding physical length from the mean free path - // left for each discrete physics process. The minimum allowable - // step for each continuous process will be also calculated. - void InvokeAtRestDoItProcs(); - void InvokeAlongStepDoItProcs(); - void InvokePostStepDoItProcs(); - void InvokePSDIP(size_t); // - G4int ProcessSecondariesFromParticleChange(); - G4double CalculateSafety(); - // Return the estimated safety value at the PostStepPoint - - // Member data - - static const size_t SizeOfSelectedDoItVector = 100; - - G4bool KillVerbose = false; - - G4UserSteppingAction* fUserSteppingAction = nullptr; - - G4VSteppingVerbose* fVerbose = nullptr; - - G4double PhysicalStep = 0.0; - G4double GeometricalStep = 0.0; - G4double CorrectedStep = 0.0; - G4bool PreStepPointIsGeom = false; - G4bool FirstStep = false; - G4StepStatus fStepStatus = fUndefined; - - G4double TempInitVelocity = 0.0; - G4double TempVelocity = 0.0; - G4double Mass = 0.0; - - G4double sumEnergyChange = 0.0; - - G4VParticleChange* fParticleChange = nullptr; - G4Track* fTrack = nullptr; - G4TrackVector* fSecondary = nullptr; - G4Step* fStep = nullptr; - G4StepPoint* fPreStepPoint = nullptr; - G4StepPoint* fPostStepPoint = nullptr; - - G4VPhysicalVolume* fCurrentVolume = nullptr; - G4VSensitiveDetector* fSensitive = nullptr; - G4VProcess* fCurrentProcess = nullptr; - // The pointer to the process of which DoIt() or - // GetPhysicalInteractionLength() has been just executed. - - - G4ProcessVector* fAtRestDoItVector = nullptr; - G4ProcessVector* fAlongStepDoItVector = nullptr; - G4ProcessVector* fPostStepDoItVector = nullptr; - - G4ProcessVector* fAtRestGetPhysIntVector = nullptr; - G4ProcessVector* fAlongStepGetPhysIntVector = nullptr; - G4ProcessVector* fPostStepGetPhysIntVector = nullptr; - - std::size_t MAXofAtRestLoops = 0; - std::size_t MAXofAlongStepLoops = 0; - std::size_t MAXofPostStepLoops = 0; - - std::size_t fAtRestDoItProcTriggered = 0; - std::size_t fAlongStepDoItProcTriggered = 0; - std::size_t fPostStepDoItProcTriggered = 0; - - G4int fN2ndariesAtRestDoIt = 0; - G4int fN2ndariesAlongStepDoIt = 0; - G4int fN2ndariesPostStepDoIt = 0; - // These are the numbers of secondaries generated by the process - // just executed. - - G4Navigator* fNavigator = nullptr; - - G4int verboseLevel = 0; - - G4SelectedAtRestDoItVector* fSelectedAtRestDoItVector = nullptr; - G4SelectedAlongStepDoItVector* fSelectedAlongStepDoItVector = nullptr; - G4SelectedPostStepDoItVector* fSelectedPostStepDoItVector = nullptr; - - G4double fPreviousStepSize = 0.0; - - G4TouchableHandle fTouchableHandle; - - G4SteppingControl StepControlFlag = NormalCondition; - - G4double kCarTolerance = 0.0; - // Cached geometrical tolerance on surface - G4double proposedSafety = 0.0; - // This keeps the minimum safety value proposed by AlongStepGPILs. - G4ThreeVector endpointSafOrigin; - G4double endpointSafety = 0.0; - // To get the true safety value at the PostStepPoint, you have - // to subtract the distance to 'endpointSafOrigin' from this value. - G4double physIntLength = 0.0; - G4ForceCondition fCondition = InActivated; - G4GPILSelection fGPILSelection = NotCandidateForSelection; - // Above three variables are for the method - // DefinePhysicalStepLength(). To pass these information to - // the method Verbose, they are kept at here. Need a more - // elegant mechanism. - - G4NoProcess const* fNoProcess = nullptr; - // Used in the InvokeAtRestDoItProcs() method to flag the process - // of any stable ion at rest. + // Constructor/Destructor + + // SteppingManger should be dynamically allocated, therefore + // you need to invoke new() when you call this constructor. + // "Secodary track vector" will be dynamically created by this + // constructor. G4UserSteppingAction will be also created + // in this constructor, and "this" pointer will be passed to + // G4UserSteppingAction. + G4SteppingManager(); + ~G4SteppingManager(); + + // Get/Set functions + + const G4TrackVector* GetSecondary() const; + void SetUserAction(G4UserSteppingAction* apAction); + G4Track* GetTrack() const; + void SetVerboseLevel(G4int vLevel); + void SetVerbose(G4VSteppingVerbose*); + G4Step* GetStep() const; + void SetNavigator(G4Navigator* value); + + // Other member functions + + // Steers to move the give particle from the TrackingManger by one Step. + G4StepStatus Stepping(); + + // Sets up initial track information (enegry, position, etc) to + // the PreStepPoint of the G4Step. This funciton has to be called + // just once before the stepping loop in the "TrackingManager". + void SetInitialStep(G4Track* valueTrack); + + // Get methods + void GetProcessNumber(); + G4double GetPhysicalStep(); + G4double GetGeometricalStep(); + G4double GetCorrectedStep(); + G4bool GetPreStepPointIsGeom(); + G4bool GetFirstStep(); + G4StepStatus GetfStepStatus(); + G4double GetTempInitVelocity(); + G4double GetTempVelocity(); + G4double GetMass(); + G4double GetsumEnergyChange(); + G4VParticleChange* GetfParticleChange(); + G4Track* GetfTrack(); + G4TrackVector* GetfSecondary(); + G4Step* GetfStep(); + G4StepPoint* GetfPreStepPoint(); + G4StepPoint* GetfPostStepPoint(); + G4VPhysicalVolume* GetfCurrentVolume(); + G4VSensitiveDetector* GetfSensitive(); + G4VProcess* GetfCurrentProcess(); + G4ProcessVector* GetfAtRestDoItVector(); + G4ProcessVector* GetfAlongStepDoItVector(); + G4ProcessVector* GetfPostStepDoItVector(); + G4ProcessVector* GetfAlongStepGetPhysIntVector(); + G4ProcessVector* GetfPostStepGetPhysIntVector(); + G4ProcessVector* GetfAtRestGetPhysIntVector(); + G4double GetcurrentMinimumStep(); + G4double GetnumberOfInteractionLengthLeft(); + std::size_t GetfAtRestDoItProcTriggered(); + std::size_t GetfAlongStepDoItProcTriggered(); + std::size_t GetfPostStepDoItProcTriggered(); + G4int GetfN2ndariesAtRestDoIt(); + G4int GetfN2ndariesAlongStepDoIt(); + G4int GetfN2ndariesPostStepDoIt(); + G4Navigator* GetfNavigator(); + G4int GetverboseLevel(); + std::size_t GetMAXofAtRestLoops(); + std::size_t GetMAXofAlongStepLoops(); + std::size_t GetMAXofPostStepLoops(); + G4SelectedAtRestDoItVector* GetfSelectedAtRestDoItVector(); + G4SelectedAlongStepDoItVector* GetfSelectedAlongStepDoItVector(); + G4SelectedPostStepDoItVector* GetfSelectedPostStepDoItVector(); + G4double GetfPreviousStepSize(); + const G4TouchableHandle& GetTouchableHandle(); + G4SteppingControl GetStepControlFlag(); + G4UserSteppingAction* GetUserAction(); + G4double GetphysIntLength(); + G4ForceCondition GetfCondition(); + G4GPILSelection GetfGPILSelection(); + + private: + // Member functions + + // Calculate corresponding physical length from the mean free path + // left for each discrete physics process. The minimum allowable + // step for each continuous process will be also calculated. + void DefinePhysicalStepLength(); + + void InvokeAtRestDoItProcs(); + void InvokeAlongStepDoItProcs(); + void InvokePostStepDoItProcs(); + void InvokePSDIP(size_t); // + G4int ProcessSecondariesFromParticleChange(); + + // Return the estimated safety value at the PostStepPoint + G4double CalculateSafety(); + + // Member data + + static const size_t SizeOfSelectedDoItVector = 100; + + G4bool KillVerbose = false; + + G4UserSteppingAction* fUserSteppingAction = nullptr; + + G4VSteppingVerbose* fVerbose = nullptr; + + G4double PhysicalStep = 0.0; + G4double GeometricalStep = 0.0; + G4double CorrectedStep = 0.0; + G4bool PreStepPointIsGeom = false; + G4bool FirstStep = false; + G4StepStatus fStepStatus = fUndefined; + + G4double TempInitVelocity = 0.0; + G4double TempVelocity = 0.0; + G4double Mass = 0.0; + + G4double sumEnergyChange = 0.0; + + G4VParticleChange* fParticleChange = nullptr; + G4Track* fTrack = nullptr; + G4TrackVector* fSecondary = nullptr; + G4Step* fStep = nullptr; + G4StepPoint* fPreStepPoint = nullptr; + G4StepPoint* fPostStepPoint = nullptr; + + G4VPhysicalVolume* fCurrentVolume = nullptr; + G4VSensitiveDetector* fSensitive = nullptr; + G4VProcess* fCurrentProcess = nullptr; // Pointer to process of which DoIt() or + // GetPhysicalInteractionLength() has been just executed. + + G4ProcessVector* fAtRestDoItVector = nullptr; + G4ProcessVector* fAlongStepDoItVector = nullptr; + G4ProcessVector* fPostStepDoItVector = nullptr; + + G4ProcessVector* fAtRestGetPhysIntVector = nullptr; + G4ProcessVector* fAlongStepGetPhysIntVector = nullptr; + G4ProcessVector* fPostStepGetPhysIntVector = nullptr; + + std::size_t MAXofAtRestLoops = 0; + std::size_t MAXofAlongStepLoops = 0; + std::size_t MAXofPostStepLoops = 0; + + std::size_t fAtRestDoItProcTriggered = 0; + std::size_t fAlongStepDoItProcTriggered = 0; + std::size_t fPostStepDoItProcTriggered = 0; + + G4int fN2ndariesAtRestDoIt = 0; + G4int fN2ndariesAlongStepDoIt = 0; + G4int fN2ndariesPostStepDoIt = 0; + // These are the numbers of secondaries generated by the process + // just executed. + + G4Navigator* fNavigator = nullptr; + + G4int verboseLevel = 0; + + G4SelectedAtRestDoItVector* fSelectedAtRestDoItVector = nullptr; + G4SelectedAlongStepDoItVector* fSelectedAlongStepDoItVector = nullptr; + G4SelectedPostStepDoItVector* fSelectedPostStepDoItVector = nullptr; + + G4double fPreviousStepSize = 0.0; + + G4TouchableHandle fTouchableHandle; + + G4SteppingControl StepControlFlag = NormalCondition; + + G4double kCarTolerance = 0.0; // Cached geometrical tolerance on surface + G4double proposedSafety = 0.0; // This keeps the minimum safety value proposed by AlongStepGPILs. + G4ThreeVector endpointSafOrigin; + G4double endpointSafety = 0.0; // To get the true safety value at the PostStepPoint, you have to + // subtract the distance to 'endpointSafOrigin' from this value. + G4double physIntLength = 0.0; + G4ForceCondition fCondition = InActivated; + G4GPILSelection fGPILSelection = NotCandidateForSelection; + // Above three variables are for the method + // DefinePhysicalStepLength(). To pass these information to + // the method Verbose, they are kept at here. Need a more + // elegant mechanism. + + G4NoProcess const* fNoProcess = nullptr; // Used in InvokeAtRestDoItProcs() method to flag the + // process of any stable ion at rest. }; //******************************************************************* @@ -279,279 +270,152 @@ class G4SteppingManager // //******************************************************************* - inline G4double G4SteppingManager::GetPhysicalStep() - { - return PhysicalStep; - } - - inline G4double G4SteppingManager::GetGeometricalStep() - { - return GeometricalStep; - } - - inline G4double G4SteppingManager::GetCorrectedStep() - { - return CorrectedStep; - } - - inline G4bool G4SteppingManager::GetPreStepPointIsGeom() - { - return PreStepPointIsGeom; - } - - inline G4bool G4SteppingManager::GetFirstStep() - { - return FirstStep; - } - - inline G4StepStatus G4SteppingManager::GetfStepStatus() - { - return fStepStatus; - } - - inline G4double G4SteppingManager::GetTempInitVelocity() - { - return TempInitVelocity; - } - - inline G4double G4SteppingManager::GetTempVelocity() - { - return TempVelocity; - } - - inline G4double G4SteppingManager::GetMass() - { - return Mass; - } - - inline G4double G4SteppingManager::GetsumEnergyChange() - { - return sumEnergyChange; - } - - inline G4VParticleChange* G4SteppingManager::GetfParticleChange() - { - return fParticleChange; - } - - inline G4Track* G4SteppingManager::GetfTrack() - { - return fTrack; - } - - inline G4TrackVector* G4SteppingManager::GetfSecondary() - { - return fStep->GetfSecondary(); - } - - inline G4Step* G4SteppingManager::GetfStep() - { - return fStep; - } - - inline G4StepPoint* G4SteppingManager::GetfPreStepPoint() - { - return fPreStepPoint; - } - - inline G4StepPoint* G4SteppingManager::GetfPostStepPoint() - { - return fPostStepPoint; - } - - inline G4VPhysicalVolume* G4SteppingManager::GetfCurrentVolume() - { - return fCurrentVolume; - } - - inline G4VSensitiveDetector* G4SteppingManager::GetfSensitive() - { - return fSensitive; - } - - inline G4VProcess* G4SteppingManager::GetfCurrentProcess() - { - return fCurrentProcess; - } - - inline G4ProcessVector* G4SteppingManager::GetfAtRestDoItVector() - { - return fAtRestDoItVector; - } - - inline G4ProcessVector* G4SteppingManager::GetfAlongStepDoItVector() - { - return fAlongStepDoItVector; - } - - inline G4ProcessVector* G4SteppingManager::GetfPostStepDoItVector() - { - return fPostStepDoItVector; - } - - inline G4ProcessVector* G4SteppingManager::GetfAtRestGetPhysIntVector() - { - return fAtRestGetPhysIntVector; - } - - inline G4ProcessVector* G4SteppingManager::GetfAlongStepGetPhysIntVector() - { - return fAlongStepGetPhysIntVector; - } - - inline G4ProcessVector* G4SteppingManager::GetfPostStepGetPhysIntVector() - { - return fPostStepGetPhysIntVector; - } - - inline size_t G4SteppingManager::GetMAXofAtRestLoops() - { - return MAXofAtRestLoops; - } - - inline size_t G4SteppingManager::GetMAXofAlongStepLoops() - { - return MAXofAlongStepLoops; - } - - inline size_t G4SteppingManager::GetMAXofPostStepLoops() - { - return MAXofPostStepLoops; - } - - inline size_t G4SteppingManager::GetfAtRestDoItProcTriggered() - { - return fAtRestDoItProcTriggered; - } - - inline size_t G4SteppingManager::GetfAlongStepDoItProcTriggered() - { - return fAtRestDoItProcTriggered; - } - - inline size_t G4SteppingManager::GetfPostStepDoItProcTriggered() - { - return fPostStepDoItProcTriggered; - } - - inline G4int G4SteppingManager::GetfN2ndariesAtRestDoIt() - { - return fN2ndariesAtRestDoIt; - } - - inline G4int G4SteppingManager::GetfN2ndariesAlongStepDoIt() - { - return fN2ndariesAlongStepDoIt; - } - - inline G4int G4SteppingManager::GetfN2ndariesPostStepDoIt() - { - return fN2ndariesPostStepDoIt; - } - - inline G4Navigator* G4SteppingManager::GetfNavigator() - { - return fNavigator; - } - - inline G4int G4SteppingManager::GetverboseLevel() - { - return verboseLevel; - } - - inline G4SelectedAtRestDoItVector* - G4SteppingManager::GetfSelectedAtRestDoItVector() - { - return fSelectedAtRestDoItVector; - } - - inline G4SelectedAlongStepDoItVector* - G4SteppingManager::GetfSelectedAlongStepDoItVector() - { - return fSelectedAlongStepDoItVector; - } - - inline G4SelectedPostStepDoItVector* - G4SteppingManager::GetfSelectedPostStepDoItVector() - { - return fSelectedPostStepDoItVector; - } - - inline G4double G4SteppingManager::GetfPreviousStepSize() - { - return fPreviousStepSize; - } - - inline const G4TouchableHandle& G4SteppingManager::GetTouchableHandle() - { - return fTouchableHandle; - } - - inline G4SteppingControl G4SteppingManager::GetStepControlFlag() - { - return StepControlFlag; - } - - inline G4double G4SteppingManager::GetphysIntLength() - { - return physIntLength; - } - - inline G4ForceCondition G4SteppingManager::GetfCondition() - { - return fCondition; - } - - inline G4GPILSelection G4SteppingManager::GetfGPILSelection() - { - return fGPILSelection; - } - - inline const G4TrackVector* G4SteppingManager::GetSecondary() const - { - return fStep->GetSecondary(); - } - - inline void G4SteppingManager::SetNavigator(G4Navigator* value) - { - fNavigator = value; - } - - inline void G4SteppingManager::SetUserAction(G4UserSteppingAction* apAction) - { - fUserSteppingAction = apAction; - } - - inline G4UserSteppingAction* G4SteppingManager::GetUserAction() - { - return fUserSteppingAction; - } - - inline G4Track* G4SteppingManager::GetTrack() const - { - return fTrack; - } - - inline void G4SteppingManager::SetVerboseLevel(G4int vLevel) - { - verboseLevel = vLevel; - } - - inline void G4SteppingManager::SetVerbose(G4VSteppingVerbose* yourVerbose) - { - fVerbose = yourVerbose; - } - - inline G4Step* G4SteppingManager::GetStep() const - { - return fStep; - } - - inline G4double G4SteppingManager::CalculateSafety() - { - return std::max( endpointSafety - - (endpointSafOrigin - fPostStepPoint->GetPosition()).mag(), - kCarTolerance ); - } +inline G4double G4SteppingManager::GetPhysicalStep() { return PhysicalStep; } + +inline G4double G4SteppingManager::GetGeometricalStep() { return GeometricalStep; } + +inline G4double G4SteppingManager::GetCorrectedStep() { return CorrectedStep; } + +inline G4bool G4SteppingManager::GetPreStepPointIsGeom() { return PreStepPointIsGeom; } + +inline G4bool G4SteppingManager::GetFirstStep() { return FirstStep; } + +inline G4StepStatus G4SteppingManager::GetfStepStatus() { return fStepStatus; } + +inline G4double G4SteppingManager::GetTempInitVelocity() { return TempInitVelocity; } + +inline G4double G4SteppingManager::GetTempVelocity() { return TempVelocity; } + +inline G4double G4SteppingManager::GetMass() { return Mass; } + +inline G4double G4SteppingManager::GetsumEnergyChange() { return sumEnergyChange; } + +inline G4VParticleChange* G4SteppingManager::GetfParticleChange() { return fParticleChange; } + +inline G4Track* G4SteppingManager::GetfTrack() { return fTrack; } + +inline G4TrackVector* G4SteppingManager::GetfSecondary() { return fStep->GetfSecondary(); } + +inline G4Step* G4SteppingManager::GetfStep() { return fStep; } + +inline G4StepPoint* G4SteppingManager::GetfPreStepPoint() { return fPreStepPoint; } + +inline G4StepPoint* G4SteppingManager::GetfPostStepPoint() { return fPostStepPoint; } + +inline G4VPhysicalVolume* G4SteppingManager::GetfCurrentVolume() { return fCurrentVolume; } + +inline G4VSensitiveDetector* G4SteppingManager::GetfSensitive() { return fSensitive; } + +inline G4VProcess* G4SteppingManager::GetfCurrentProcess() { return fCurrentProcess; } + +inline G4ProcessVector* G4SteppingManager::GetfAtRestDoItVector() { return fAtRestDoItVector; } + +inline G4ProcessVector* G4SteppingManager::GetfAlongStepDoItVector() +{ + return fAlongStepDoItVector; +} + +inline G4ProcessVector* G4SteppingManager::GetfPostStepDoItVector() { return fPostStepDoItVector; } + +inline G4ProcessVector* G4SteppingManager::GetfAtRestGetPhysIntVector() +{ + return fAtRestGetPhysIntVector; +} + +inline G4ProcessVector* G4SteppingManager::GetfAlongStepGetPhysIntVector() +{ + return fAlongStepGetPhysIntVector; +} + +inline G4ProcessVector* G4SteppingManager::GetfPostStepGetPhysIntVector() +{ + return fPostStepGetPhysIntVector; +} + +inline size_t G4SteppingManager::GetMAXofAtRestLoops() { return MAXofAtRestLoops; } + +inline size_t G4SteppingManager::GetMAXofAlongStepLoops() { return MAXofAlongStepLoops; } + +inline size_t G4SteppingManager::GetMAXofPostStepLoops() { return MAXofPostStepLoops; } + +inline size_t G4SteppingManager::GetfAtRestDoItProcTriggered() { return fAtRestDoItProcTriggered; } + +inline size_t G4SteppingManager::GetfAlongStepDoItProcTriggered() +{ + return fAtRestDoItProcTriggered; +} + +inline size_t G4SteppingManager::GetfPostStepDoItProcTriggered() +{ + return fPostStepDoItProcTriggered; +} + +inline G4int G4SteppingManager::GetfN2ndariesAtRestDoIt() { return fN2ndariesAtRestDoIt; } + +inline G4int G4SteppingManager::GetfN2ndariesAlongStepDoIt() { return fN2ndariesAlongStepDoIt; } + +inline G4int G4SteppingManager::GetfN2ndariesPostStepDoIt() { return fN2ndariesPostStepDoIt; } + +inline G4Navigator* G4SteppingManager::GetfNavigator() { return fNavigator; } + +inline G4int G4SteppingManager::GetverboseLevel() { return verboseLevel; } + +inline G4SelectedAtRestDoItVector* G4SteppingManager::GetfSelectedAtRestDoItVector() +{ + return fSelectedAtRestDoItVector; +} + +inline G4SelectedAlongStepDoItVector* G4SteppingManager::GetfSelectedAlongStepDoItVector() +{ + return fSelectedAlongStepDoItVector; +} + +inline G4SelectedPostStepDoItVector* G4SteppingManager::GetfSelectedPostStepDoItVector() +{ + return fSelectedPostStepDoItVector; +} + +inline G4double G4SteppingManager::GetfPreviousStepSize() { return fPreviousStepSize; } + +inline const G4TouchableHandle& G4SteppingManager::GetTouchableHandle() { return fTouchableHandle; } + +inline G4SteppingControl G4SteppingManager::GetStepControlFlag() { return StepControlFlag; } + +inline G4double G4SteppingManager::GetphysIntLength() { return physIntLength; } + +inline G4ForceCondition G4SteppingManager::GetfCondition() { return fCondition; } + +inline G4GPILSelection G4SteppingManager::GetfGPILSelection() { return fGPILSelection; } + +inline const G4TrackVector* G4SteppingManager::GetSecondary() const +{ + return fStep->GetSecondary(); +} + +inline void G4SteppingManager::SetNavigator(G4Navigator* value) { fNavigator = value; } + +inline void G4SteppingManager::SetUserAction(G4UserSteppingAction* apAction) +{ + fUserSteppingAction = apAction; +} + +inline G4UserSteppingAction* G4SteppingManager::GetUserAction() { return fUserSteppingAction; } + +inline G4Track* G4SteppingManager::GetTrack() const { return fTrack; } + +inline void G4SteppingManager::SetVerboseLevel(G4int vLevel) { verboseLevel = vLevel; } + +inline void G4SteppingManager::SetVerbose(G4VSteppingVerbose* yourVerbose) +{ + fVerbose = yourVerbose; +} + +inline G4Step* G4SteppingManager::GetStep() const { return fStep; } + +inline G4double G4SteppingManager::CalculateSafety() +{ + return std::max( + endpointSafety - (endpointSafOrigin - fPostStepPoint->GetPosition()).mag(), kCarTolerance); +} #endif diff --git a/source/tracking/include/G4SteppingVerbose.hh b/source/tracking/include/G4SteppingVerbose.hh index 8a8698ef132..4c5e6bbd737 100644 --- a/source/tracking/include/G4SteppingVerbose.hh +++ b/source/tracking/include/G4SteppingVerbose.hh @@ -27,7 +27,7 @@ // // Class description: // -// This class manages the verbose outputs in G4SteppingManager. +// This class manages the verbose outputs in G4SteppingManager. // Contact: // Questions and comments to this code should be sent to @@ -41,41 +41,38 @@ class G4SteppingVerbose : public G4VSteppingVerbose { - public: + public: + // Constructor/Destructor - // Constructor/Destructor + G4SteppingVerbose() = default; + ~G4SteppingVerbose() override = default; - G4SteppingVerbose(); - virtual ~G4SteppingVerbose(); + G4VSteppingVerbose* Clone() override { return new G4SteppingVerbose; } - virtual G4VSteppingVerbose* Clone() - { return new G4SteppingVerbose; } + // Methods to be invoked in the SteppingManager - // Methods to be invoked in the SteppingManager + void NewStep() override; + void AtRestDoItInvoked() override; + void AlongStepDoItAllDone() override; + void PostStepDoItAllDone() override; + void AlongStepDoItOneByOne() override; + void PostStepDoItOneByOne() override; + void StepInfo() override; + void TrackingStarted() override; + void DPSLStarted() override; + void DPSLUserLimit() override; + void DPSLPostStep() override; + void DPSLAlongStep() override; + void VerboseTrack() override; + void VerboseParticleChange() override; + virtual void ShowStep() const; - virtual void NewStep(); - virtual void AtRestDoItInvoked(); - virtual void AlongStepDoItAllDone(); - virtual void PostStepDoItAllDone(); - virtual void AlongStepDoItOneByOne(); - virtual void PostStepDoItOneByOne(); - virtual void StepInfo(); - virtual void TrackingStarted(); - virtual void DPSLStarted(); - virtual void DPSLUserLimit(); - virtual void DPSLPostStep(); - virtual void DPSLAlongStep(); - virtual void VerboseTrack(); - virtual void VerboseParticleChange(); - virtual void ShowStep() const; - - private: - static G4int useBestUnitPrecision; - - public: - static void UseBestUnit(G4int prec = 4); - static G4int BestUnitPrecision(); + public: + static void UseBestUnit(G4int prec = 4); + static G4int BestUnitPrecision(); + private: + static G4int useBestUnitPrecision; }; #endif diff --git a/source/tracking/include/G4SteppingVerboseWithUnits.hh b/source/tracking/include/G4SteppingVerboseWithUnits.hh index 9a813d90e41..0c6fddfe143 100644 --- a/source/tracking/include/G4SteppingVerboseWithUnits.hh +++ b/source/tracking/include/G4SteppingVerboseWithUnits.hh @@ -23,9 +23,9 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -/// \file +/// \file /// \brief Definition of the G4SteppingVerboseWithUnits class -// +// //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... // // Stepping Verbose with units for all the applicable double values @@ -47,36 +47,33 @@ class G4GenericMessenger; class G4SteppingVerboseWithUnits : public G4SteppingVerbose { - public: + public: + G4SteppingVerboseWithUnits(G4int precision = 4); + ~G4SteppingVerboseWithUnits() override; + + G4VSteppingVerbose* Clone() override { return new G4SteppingVerboseWithUnits; } - G4SteppingVerboseWithUnits(G4int precision = 4); - ~G4SteppingVerboseWithUnits() override; - - G4VSteppingVerbose* Clone() override - { return new G4SteppingVerboseWithUnits; } + void SetManager(G4SteppingManager* const) override; - void SetManager(G4SteppingManager* const) override; - - void TrackingStarted() override; - void StepInfo() override; + void TrackingStarted() override; + void StepInfo() override; - void AtRestDoItInvoked() override; - void AlongStepDoItAllDone()override; - void PostStepDoItAllDone()override; - void AlongStepDoItOneByOne()override; - void PostStepDoItOneByOne()override; - void DPSLStarted() override; - void DPSLUserLimit() override; - void DPSLPostStep() override; - void DPSLAlongStep() override; - void VerboseTrack() override; - void VerboseParticleChange() override; - void ShowStep() const override; - - private: + void AtRestDoItInvoked() override; + void AlongStepDoItAllDone() override; + void PostStepDoItAllDone() override; + void AlongStepDoItOneByOne() override; + void PostStepDoItOneByOne() override; + void DPSLStarted() override; + void DPSLUserLimit() override; + void DPSLPostStep() override; + void DPSLAlongStep() override; + void VerboseTrack() override; + void VerboseParticleChange() override; + void ShowStep() const override; - G4int fprec; - G4GenericMessenger* fmessenger = nullptr; + private: + G4int fprec; + G4GenericMessenger* fmessenger = nullptr; }; //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/tracking/include/G4TrackingManager.hh b/source/tracking/include/G4TrackingManager.hh index 7f415604333..3952fe90202 100644 --- a/source/tracking/include/G4TrackingManager.hh +++ b/source/tracking/include/G4TrackingManager.hh @@ -42,141 +42,125 @@ #ifndef G4TrackingManager_hh #define G4TrackingManager_hh 1 -#include "globals.hh" // Include from 'global' -#include "G4SteppingManager.hh" // Include from 'tracking' -#include "G4Track.hh" // Include from 'tracking' +#include "G4StepStatus.hh" // Include from 'tracking' +#include "G4SteppingManager.hh" // Include from 'tracking' +#include "G4Track.hh" // Include from 'tracking' +#include "G4TrackStatus.hh" // Include from 'tracking' +#include "G4TrackVector.hh" // Include from 'tracking' #include "G4TrackingMessenger.hh" -#include "G4TrackVector.hh" // Include from 'tracking' -#include "G4TrackStatus.hh" // Include from 'tracking' -#include "G4StepStatus.hh" // Include from 'tracking' -#include "G4UserTrackingAction.hh" // Include from 'tracking' -#include "G4UserSteppingAction.hh" // Include from 'tracking' -#include "G4VTrajectory.hh" // Include from 'tracking' +#include "G4UserSteppingAction.hh" // Include from 'tracking' +#include "G4UserTrackingAction.hh" // Include from 'tracking' +#include "G4VTrajectory.hh" // Include from 'tracking' +#include "globals.hh" // Include from 'global' class G4VUserTrackInformation; //////////////////////// -class G4TrackingManager +class G4TrackingManager //////////////////////// { public: using ProfilerConfig = G4Track::ProfilerConfig; - public: - - // Constructor/Destructor - - G4TrackingManager(); - // G4TrackingManger should be dynamically allocated, therefore you - // need to invoke new() when you call this constructor. - // G4SteppingManger and G4UserTrackingAction will be created - // in this constructor. "This" pointer will be passed to - // G4UserTrackingAction. + public: + // Constructor/Destructor - ~G4TrackingManager(); + // G4TrackingManger should be dynamically allocated, therefore you + // need to invoke new() when you call this constructor. + // G4SteppingManger and G4UserTrackingAction will be created + // in this constructor. "This" pointer will be passed to + // G4UserTrackingAction. + G4TrackingManager(); + ~G4TrackingManager(); - // Get/Set functions + // Get/Set functions - G4Track* GetTrack() const; + G4Track* GetTrack() const; - G4int GetStoreTrajectory() const; - void SetStoreTrajectory(G4int value); + G4int GetStoreTrajectory() const; + void SetStoreTrajectory(G4int value); - G4SteppingManager* GetSteppingManager() const; + G4SteppingManager* GetSteppingManager() const; - G4UserTrackingAction* GetUserTrackingAction() const; + G4UserTrackingAction* GetUserTrackingAction() const; - G4VTrajectory* GimmeTrajectory() const; - void SetTrajectory(G4VTrajectory* aTrajectory); - - G4TrackVector* GimmeSecondaries() const; + G4VTrajectory* GimmeTrajectory() const; + void SetTrajectory(G4VTrajectory* aTrajectory); - void SetUserAction(G4UserTrackingAction* apAction); - void SetUserAction(G4UserSteppingAction* apAction); + G4TrackVector* GimmeSecondaries() const; - void SetVerboseLevel(G4int vLevel); - G4int GetVerboseLevel() const; + void SetUserAction(G4UserTrackingAction* apAction); + void SetUserAction(G4UserSteppingAction* apAction); - // Other member functions + void SetVerboseLevel(G4int vLevel); + G4int GetVerboseLevel() const; - void ProcessOneTrack(G4Track* apValueG4Track); - // Invoking this function, a G4Track given by the argument - // will be tracked. + // Other member functions - void EventAborted(); - // Invoking this function, the current tracking will be - // aborted immediately. The tracking will return the - // G4TrackStatus in 'fUserKillTrackAndSecondaries'. - // By this the EventManager deletes the current track and all - // its associated secondaries. + void ProcessOneTrack(G4Track* apValueG4Track); + // Invoking this function, a G4Track given by the argument + // will be tracked. - void SetUserTrackInformation(G4VUserTrackInformation* aValue); - // This method can be invoked from the user's G4UserTrackingAction - // implementation to set his/her own G4VUserTrackInformation concrete - // class object to a G4Track object. + void EventAborted(); + // Invoking this function, the current tracking will be + // aborted immediately. The tracking will return the + // G4TrackStatus in 'fUserKillTrackAndSecondaries'. + // By this the EventManager deletes the current track and all + // its associated secondaries. - private: + void SetUserTrackInformation(G4VUserTrackInformation* aValue); + // This method can be invoked from the user's G4UserTrackingAction + // implementation to set his/her own G4VUserTrackInformation concrete + // class object to a G4Track object. - void TrackBanner(); // verbose + private: + void TrackBanner(); // verbose - // Member data + // Member data - G4Track* fpTrack = nullptr; - G4SteppingManager* fpSteppingManager = nullptr; - G4UserTrackingAction* fpUserTrackingAction = nullptr; - G4VTrajectory* fpTrajectory = nullptr; - G4int StoreTrajectory = 0; - G4int verboseLevel = 0; - G4TrackingMessenger* messenger = nullptr; - G4bool EventIsAborted = false; + G4Track* fpTrack = nullptr; + G4SteppingManager* fpSteppingManager = nullptr; + G4UserTrackingAction* fpUserTrackingAction = nullptr; + G4VTrajectory* fpTrajectory = nullptr; + G4int StoreTrajectory = 0; + G4int verboseLevel = 0; + G4TrackingMessenger* messenger = nullptr; + G4bool EventIsAborted = false; }; //******************************************************************* // -// Inline function +// Inline function // //******************************************************************* -inline G4Track* G4TrackingManager::GetTrack() const -{ - return fpTrack; -} +inline G4Track* G4TrackingManager::GetTrack() const { return fpTrack; } -inline G4int G4TrackingManager::GetStoreTrajectory() const -{ - return StoreTrajectory; -} +inline G4int G4TrackingManager::GetStoreTrajectory() const { return StoreTrajectory; } -inline void G4TrackingManager::SetStoreTrajectory(G4int value) -{ - StoreTrajectory = value; -} +inline void G4TrackingManager::SetStoreTrajectory(G4int value) { StoreTrajectory = value; } inline G4SteppingManager* G4TrackingManager::GetSteppingManager() const -{ - return fpSteppingManager; +{ + return fpSteppingManager; } inline G4UserTrackingAction* G4TrackingManager::GetUserTrackingAction() const -{ - return fpUserTrackingAction; +{ + return fpUserTrackingAction; } -inline G4VTrajectory* G4TrackingManager::GimmeTrajectory() const -{ - return fpTrajectory; -} - +inline G4VTrajectory* G4TrackingManager::GimmeTrajectory() const { return fpTrajectory; } + inline G4TrackVector* G4TrackingManager::GimmeSecondaries() const -{ - return fpSteppingManager->GetfSecondary(); +{ + return fpSteppingManager->GetfSecondary(); } inline void G4TrackingManager::SetUserAction(G4UserTrackingAction* apAction) { fpUserTrackingAction = apAction; - if(apAction != nullptr) - { + if (apAction != nullptr) { apAction->SetTrackingManagerPointer(this); } } @@ -184,27 +168,22 @@ inline void G4TrackingManager::SetUserAction(G4UserTrackingAction* apAction) inline void G4TrackingManager::SetUserAction(G4UserSteppingAction* apAction) { fpSteppingManager->SetUserAction(apAction); - if(apAction != nullptr) - { - apAction->SetSteppingManagerPointer(fpSteppingManager); + if (apAction != nullptr) { + apAction->SetSteppingManagerPointer(fpSteppingManager); } } inline void G4TrackingManager::SetVerboseLevel(G4int vLevel) -{ - verboseLevel = vLevel; - fpSteppingManager -> SetVerboseLevel( vLevel ); +{ + verboseLevel = vLevel; + fpSteppingManager->SetVerboseLevel(vLevel); } -inline G4int G4TrackingManager::GetVerboseLevel() const -{ - return verboseLevel; -} +inline G4int G4TrackingManager::GetVerboseLevel() const { return verboseLevel; } -inline void -G4TrackingManager::SetUserTrackInformation(G4VUserTrackInformation* aValue) +inline void G4TrackingManager::SetUserTrackInformation(G4VUserTrackInformation* aValue) { - if(fpTrack != nullptr) fpTrack->SetUserInformation(aValue); + if (fpTrack != nullptr) fpTrack->SetUserInformation(aValue); } #endif diff --git a/source/tracking/include/G4TrackingMessenger.hh b/source/tracking/include/G4TrackingMessenger.hh index fc3a384ab81..c042c72c739 100644 --- a/source/tracking/include/G4TrackingMessenger.hh +++ b/source/tracking/include/G4TrackingMessenger.hh @@ -50,26 +50,23 @@ class G4SteppingManager; class G4TrackingMessenger : public G4UImessenger { + public: + G4TrackingMessenger(G4TrackingManager* trMan); + ~G4TrackingMessenger() override; + void SetNewValue(G4UIcommand* command, G4String newValues) override; + G4String GetCurrentValue(G4UIcommand* command) override; - public: + private: + G4TrackingManager* trackingManager = nullptr; + G4SteppingManager* steppingManager = nullptr; - G4TrackingMessenger(G4TrackingManager* trMan); - ~G4TrackingMessenger(); - void SetNewValue(G4UIcommand* command, G4String newValues); - G4String GetCurrentValue(G4UIcommand* command); + // commands - private: - - G4TrackingManager* trackingManager = nullptr; - G4SteppingManager* steppingManager = nullptr; - - // commands - - G4UIdirectory* TrackingDirectory = nullptr; - G4UIcmdWithoutParameter* AbortCmd = nullptr; - G4UIcmdWithoutParameter* ResumeCmd = nullptr; - G4UIcmdWithAnInteger* StoreTrajectoryCmd = nullptr; - G4UIcmdWithAnInteger* VerboseCmd = nullptr; + G4UIdirectory* TrackingDirectory = nullptr; + G4UIcmdWithoutParameter* AbortCmd = nullptr; + G4UIcmdWithoutParameter* ResumeCmd = nullptr; + G4UIcmdWithAnInteger* StoreTrajectoryCmd = nullptr; + G4UIcmdWithAnInteger* VerboseCmd = nullptr; }; #endif diff --git a/source/tracking/include/G4Trajectory.hh b/source/tracking/include/G4Trajectory.hh index c70e48d22c8..3a8fd039acb 100644 --- a/source/tracking/include/G4Trajectory.hh +++ b/source/tracking/include/G4Trajectory.hh @@ -30,7 +30,7 @@ // This class represents the trajectory of a particle being tracked. // It includes information of: // 1) List of trajectory points which compose the trajectory; -// 2) Static information of the particle which generated the +// 2) Static information of the particle which generated the // trajectory; // 3) Track ID and parent particle ID of the trajectory. @@ -43,92 +43,80 @@ #ifndef G4Trajectory_hh #define G4Trajectory_hh 1 -#include // Include from 'system' -#include - -#include "trkgdefs.hh" -#include "G4VTrajectory.hh" #include "G4Allocator.hh" -#include "G4ios.hh" // Include from 'system' -#include "globals.hh" // Include from 'global' #include "G4ParticleDefinition.hh" // Include from 'particle+matter' -#include "G4TrajectoryPoint.hh" // Include from 'tracking' -#include "G4Track.hh" #include "G4Step.hh" +#include "G4Track.hh" +#include "G4TrajectoryPoint.hh" // Include from 'tracking' +#include "G4VTrajectory.hh" +#include "G4ios.hh" // Include from 'system' +#include "globals.hh" // Include from 'global' + +#include "trkgdefs.hh" +#include // Include from 'system' + +#include class G4Polyline; class G4Trajectory : public G4VTrajectory { - using G4TrajectoryPointContainer = std::vector; - public: - - // Constructors/Destructor - - G4Trajectory(); - G4Trajectory(const G4Track* aTrack); - G4Trajectory(G4Trajectory &); - virtual ~G4Trajectory(); - - // Operators - - inline void* operator new(size_t); - inline void operator delete(void*); - inline G4int operator == (const G4Trajectory& r) const; - - // Get/Set functions - - inline G4int GetTrackID() const - { return fTrackID; } - inline G4int GetParentID() const - { return fParentID; } - inline G4String GetParticleName() const - { return ParticleName; } - inline G4double GetCharge() const - { return PDGCharge; } - inline G4int GetPDGEncoding() const - { return PDGEncoding; } - inline G4double GetInitialKineticEnergy() const - { return initialKineticEnergy; } - inline G4ThreeVector GetInitialMomentum() const - { return initialMomentum; } - - // Other member functions - - virtual void ShowTrajectory(std::ostream& os=G4cout) const; - virtual void DrawTrajectory() const; - virtual void AppendStep(const G4Step* aStep); - virtual G4int GetPointEntries() const - { return G4int(positionRecord->size()); } - virtual G4VTrajectoryPoint* GetPoint(G4int i) const - { return (*positionRecord)[i]; } - virtual void MergeTrajectory(G4VTrajectory* secondTrajectory); - - G4ParticleDefinition* GetParticleDefinition(); - - virtual const std::map* GetAttDefs() const; - virtual std::vector* CreateAttValues() const; - - private: - - G4TrajectoryPointContainer* positionRecord = nullptr; - G4int fTrackID = 0; - G4int fParentID = 0; - G4int PDGEncoding = 0; - G4double PDGCharge = 0.0; - G4String ParticleName = ""; - G4double initialKineticEnergy = 0.0; - G4ThreeVector initialMomentum; + public: + // Constructors/Destructor + + G4Trajectory() = default; + G4Trajectory(const G4Track* aTrack); + G4Trajectory(G4Trajectory&); + ~G4Trajectory() override; + + // Operators + + inline void* operator new(size_t); + inline void operator delete(void*); + inline G4bool operator==(const G4Trajectory& r) const; + + // Get/Set functions + + inline G4int GetTrackID() const override { return fTrackID; } + inline G4int GetParentID() const override { return fParentID; } + inline G4String GetParticleName() const override { return ParticleName; } + inline G4double GetCharge() const override { return PDGCharge; } + inline G4int GetPDGEncoding() const override { return PDGEncoding; } + inline G4double GetInitialKineticEnergy() const { return initialKineticEnergy; } + inline G4ThreeVector GetInitialMomentum() const override { return initialMomentum; } + + // Other member functions + + void ShowTrajectory(std::ostream& os = G4cout) const override; + void DrawTrajectory() const override; + void AppendStep(const G4Step* aStep) override; + G4int GetPointEntries() const override { return G4int(positionRecord->size()); } + G4VTrajectoryPoint* GetPoint(G4int i) const override { return (*positionRecord)[i]; } + void MergeTrajectory(G4VTrajectory* secondTrajectory) override; + + G4ParticleDefinition* GetParticleDefinition(); + + const std::map* GetAttDefs() const override; + std::vector* CreateAttValues() const override; + + private: + G4TrajectoryPointContainer* positionRecord = nullptr; + G4int fTrackID = 0; + G4int fParentID = 0; + G4int PDGEncoding = 0; + G4double PDGCharge = 0.0; + G4String ParticleName = ""; + G4double initialKineticEnergy = 0.0; + G4ThreeVector initialMomentum; }; extern G4TRACKING_DLL G4Allocator*& aTrajectoryAllocator(); inline void* G4Trajectory::operator new(size_t) { - if (aTrajectoryAllocator() == nullptr) - { + if (aTrajectoryAllocator() == nullptr) { aTrajectoryAllocator() = new G4Allocator; } return (void*)aTrajectoryAllocator()->MallocSingle(); @@ -139,9 +127,6 @@ inline void G4Trajectory::operator delete(void* aTrajectory) aTrajectoryAllocator()->FreeSingle((G4Trajectory*)aTrajectory); } -inline G4int G4Trajectory::operator == (const G4Trajectory& r) const -{ - return (this==&r); -} +inline G4bool G4Trajectory::operator==(const G4Trajectory& r) const { return (this == &r); } #endif diff --git a/source/tracking/include/G4TrajectoryPoint.hh b/source/tracking/include/G4TrajectoryPoint.hh index 0aa5f37fcb9..78d9ca758e1 100644 --- a/source/tracking/include/G4TrajectoryPoint.hh +++ b/source/tracking/include/G4TrajectoryPoint.hh @@ -37,67 +37,59 @@ #ifndef G4TrajectoryPoint_hh #define G4TrajectoryPoint_hh 1 -#include "trkgdefs.hh" +#include "G4Allocator.hh" // Include from 'particle+matter' +#include "G4ThreeVector.hh" // Include from 'geometry' #include "G4VTrajectoryPoint.hh" -#include "globals.hh" // Include from 'global' -#include "G4ThreeVector.hh" // Include from 'geometry' -#include "G4Allocator.hh" // Include from 'particle+matter' +#include "globals.hh" // Include from 'global' + +#include "trkgdefs.hh" class G4TrajectoryPoint : public G4VTrajectoryPoint { - public: - - // Constructors/Destructor - - G4TrajectoryPoint(); - G4TrajectoryPoint(G4ThreeVector pos); - G4TrajectoryPoint(const G4TrajectoryPoint& right); - virtual ~G4TrajectoryPoint(); - - // Operators - - inline void *operator new(size_t); - inline void operator delete(void *aTrajectoryPoint); - inline G4bool operator==(const G4TrajectoryPoint& right) const; + public: + // Constructors/Destructor - // Get/Set functions + G4TrajectoryPoint() = default; + G4TrajectoryPoint(G4ThreeVector pos); + G4TrajectoryPoint(const G4TrajectoryPoint& right); + ~G4TrajectoryPoint() override; - inline const G4ThreeVector GetPosition() const - { return fPosition; } + // Operators - // Get method for HEPRep style attributes + inline void* operator new(size_t); + inline void operator delete(void* aTrajectoryPoint); + inline G4bool operator==(const G4TrajectoryPoint& right) const; - virtual const std::map* GetAttDefs() const; - virtual std::vector* CreateAttValues() const; + // Get/Set functions + inline const G4ThreeVector GetPosition() const override { return fPosition; } - private: + // Get method for HEPRep style attributes + const std::map* GetAttDefs() const override; + std::vector* CreateAttValues() const override; - G4ThreeVector fPosition; + private: + G4ThreeVector fPosition{0., 0., 0.}; }; -extern G4TRACKING_DLL -G4Allocator*& aTrajectoryPointAllocator(); +extern G4TRACKING_DLL G4Allocator*& aTrajectoryPointAllocator(); inline void* G4TrajectoryPoint::operator new(size_t) { - if (aTrajectoryPointAllocator() == nullptr) - { + if (aTrajectoryPointAllocator() == nullptr) { aTrajectoryPointAllocator() = new G4Allocator; } - return (void *) aTrajectoryPointAllocator()->MallocSingle(); + return (void*)aTrajectoryPointAllocator()->MallocSingle(); } -inline void G4TrajectoryPoint::operator delete(void *aTrajectoryPoint) +inline void G4TrajectoryPoint::operator delete(void* aTrajectoryPoint) { - aTrajectoryPointAllocator() - ->FreeSingle((G4TrajectoryPoint *) aTrajectoryPoint); + aTrajectoryPointAllocator()->FreeSingle((G4TrajectoryPoint*)aTrajectoryPoint); } -inline G4bool -G4TrajectoryPoint::operator==(const G4TrajectoryPoint& right) const +inline G4bool G4TrajectoryPoint::operator==(const G4TrajectoryPoint& right) const { - return (this==&right); + return (this == &right); } #endif diff --git a/source/tracking/include/G4UserSteppingAction.hh b/source/tracking/include/G4UserSteppingAction.hh index 0422aa350ac..6d9f6424093 100644 --- a/source/tracking/include/G4UserSteppingAction.hh +++ b/source/tracking/include/G4UserSteppingAction.hh @@ -41,23 +41,21 @@ class G4Step; class G4SteppingManager; -class G4UserSteppingAction +class G4UserSteppingAction { - public: + public: + // Constructor and destructor - // Constructor and destructor + G4UserSteppingAction(); + virtual ~G4UserSteppingAction() = default; - G4UserSteppingAction(); - virtual ~G4UserSteppingAction(); + // Member functions - // Member functions + virtual void SetSteppingManagerPointer(G4SteppingManager* pValue); + virtual void UserSteppingAction(const G4Step*) {} - virtual void SetSteppingManagerPointer(G4SteppingManager* pValue); - virtual void UserSteppingAction(const G4Step*){} - - protected: - - G4SteppingManager* fpSteppingManager = nullptr; + protected: + G4SteppingManager* fpSteppingManager = nullptr; }; #endif diff --git a/source/tracking/include/G4UserTrackingAction.hh b/source/tracking/include/G4UserTrackingAction.hh index 7cda722e1f7..38276a24ddf 100644 --- a/source/tracking/include/G4UserTrackingAction.hh +++ b/source/tracking/include/G4UserTrackingAction.hh @@ -28,7 +28,7 @@ // Class description: // // This class represents any action taking place by the user at the -// start/end point of processing one track. +// start/end point of processing one track. // Contact: // Questions and comments to this code should be sent to @@ -41,24 +41,22 @@ class G4TrackingManager; class G4Track; -class G4UserTrackingAction +class G4UserTrackingAction { - public: + public: + // Constructor & Destructor - // Constructor & Destructor + G4UserTrackingAction(); + virtual ~G4UserTrackingAction() = default; - G4UserTrackingAction(); - virtual ~G4UserTrackingAction(); + // Member functions - // Member functions + virtual void SetTrackingManagerPointer(G4TrackingManager* pValue); + virtual void PreUserTrackingAction(const G4Track*) {} + virtual void PostUserTrackingAction(const G4Track*) {} - virtual void SetTrackingManagerPointer(G4TrackingManager* pValue); - virtual void PreUserTrackingAction(const G4Track*){} - virtual void PostUserTrackingAction(const G4Track*){} - - protected: - - G4TrackingManager* fpTrackingManager = nullptr; + protected: + G4TrackingManager* fpTrackingManager = nullptr; }; #endif diff --git a/source/tracking/include/G4VSteppingVerbose.hh b/source/tracking/include/G4VSteppingVerbose.hh index 179b21adbd7..6b504232bce 100644 --- a/source/tracking/include/G4VSteppingVerbose.hh +++ b/source/tracking/include/G4VSteppingVerbose.hh @@ -27,8 +27,8 @@ // // Class description: // -// This class manages the verbose outputs in G4SteppingManager. -// The instance should be a singleton. Users can inherit this +// This class manages the verbose outputs in G4SteppingManager. +// The instance should be a singleton. Users can inherit this // class to make their own verbosity class. // Contact: @@ -39,17 +39,18 @@ #ifndef G4VSteppingVerbose_hh #define G4VSteppingVerbose_hh 1 -#include -#include "globals.hh" // Include from 'global' -#include "G4VProcess.hh" -#include "G4TrackVector.hh" // Include from 'tracking' -#include "G4StepStatus.hh" // Include from 'track' +#include "G4ForceCondition.hh" // enum 'track' +#include "G4GPILSelection.hh" // enum 'track' +#include "G4StepStatus.hh" // Include from 'track' #include "G4TouchableHandle.hh" -#include "G4ForceCondition.hh" // enum 'track' -#include "G4GPILSelection.hh" // enum 'track' +#include "G4TrackVector.hh" // Include from 'tracking' +#include "G4VProcess.hh" +#include "globals.hh" // Include from 'global' #include "trkgdefs.hh" +#include + class G4SteppingManager; class G4Navigator; class G4VPhysicalVolume; @@ -63,132 +64,125 @@ class G4VParticleChange; class G4VSteppingVerbose { - public: - - virtual ~G4VSteppingVerbose(); - - // static methods to set/get the object's pointer - - static void SetInstance(G4VSteppingVerbose* Instance); - static G4VSteppingVerbose* GetInstance(); - static G4VSteppingVerbose* GetMasterInstance(); - static G4int GetSilent(); - static void SetSilent(G4int fSilent); - static G4int GetSilentStepInfo(); - static void SetSilentStepInfo(G4int fSilent); - - virtual G4VSteppingVerbose* Clone(); - - // these method are invoked by G4SteppingManager - - virtual void NewStep() = 0; - void CopyState(); - virtual void SetManager(G4SteppingManager* const); - virtual void AtRestDoItInvoked() = 0; - virtual void AlongStepDoItAllDone() = 0; - virtual void PostStepDoItAllDone() = 0; - virtual void AlongStepDoItOneByOne() = 0; - virtual void PostStepDoItOneByOne() = 0; - virtual void StepInfo() = 0; - virtual void TrackingStarted() = 0; - virtual void DPSLStarted() = 0; - virtual void DPSLUserLimit() = 0; - virtual void DPSLPostStep() = 0; - virtual void DPSLAlongStep() = 0; - virtual void VerboseTrack() = 0; - virtual void VerboseParticleChange() = 0; - - protected: - - G4VSteppingVerbose(); // 'singleton' - - static G4ThreadLocal G4VSteppingVerbose* fInstance; - // pointer to the instance - static G4VSteppingVerbose* fMasterInstance; - // pointer to the instance in master thread - G4TRACKING_DLL static G4ThreadLocal G4int Silent; - //flag for verbosity - G4TRACKING_DLL static G4ThreadLocal G4int SilentStepInfo; - //another flag for verbosity - - G4SteppingManager* fManager = nullptr; - G4UserSteppingAction* fUserSteppingAction = nullptr; - - G4double PhysicalStep = 0.0; - G4double GeometricalStep = 0.0; - G4double CorrectedStep = 0.0; - G4bool PreStepPointIsGeom = false; - G4bool FirstStep = false; - G4StepStatus fStepStatus = fUndefined; - - G4double TempInitVelocity = 0.0; - G4double TempVelocity = 0.0; - G4double Mass = 0.0; - - G4double sumEnergyChange = 0.0; - - G4VParticleChange* fParticleChange = nullptr; - G4Track* fTrack = nullptr; - G4TrackVector* fSecondary = nullptr; - G4Step* fStep = nullptr; - G4StepPoint* fPreStepPoint = nullptr; - G4StepPoint* fPostStepPoint = nullptr; - - G4VPhysicalVolume* fCurrentVolume = nullptr; - G4VSensitiveDetector* fSensitive = nullptr; - G4VProcess* fCurrentProcess = nullptr; - // The pointer to the process whose DoIt() or - // GetPhysicalInteractionLength() has been just executed - - G4ProcessVector* fAtRestDoItVector = nullptr; - G4ProcessVector* fAlongStepDoItVector = nullptr; - G4ProcessVector* fPostStepDoItVector = nullptr; - - G4ProcessVector* fAtRestGetPhysIntVector = nullptr; - G4ProcessVector* fAlongStepGetPhysIntVector = nullptr; - G4ProcessVector* fPostStepGetPhysIntVector = nullptr; - - std::size_t MAXofAtRestLoops = 0; - std::size_t MAXofAlongStepLoops = 0; - std::size_t MAXofPostStepLoops = 0; - - G4double currentMinimumStep = 0.0; - G4double numberOfInteractionLengthLeft = 0.0; - - std::size_t fAtRestDoItProcTriggered = 0; - std::size_t fAlongStepDoItProcTriggered = 0; - std::size_t fPostStepDoItProcTriggered = 0; - - G4int fN2ndariesAtRestDoIt = 0; - G4int fN2ndariesAlongStepDoIt = 0; - G4int fN2ndariesPostStepDoIt = 0; - // These are the numbers of secondaries generated by the process - // just executed - - G4Navigator* fNavigator = nullptr; - - G4int verboseLevel = 0; - - using G4SelectedAtRestDoItVector = std::vector; - using G4SelectedAlongStepDoItVector = std::vector; - using G4SelectedPostStepDoItVector = std::vector; - - G4SelectedAtRestDoItVector* fSelectedAtRestDoItVector = nullptr; - G4SelectedAlongStepDoItVector* fSelectedAlongStepDoItVector = nullptr; - G4SelectedPostStepDoItVector* fSelectedPostStepDoItVector = nullptr; - - G4double fPreviousStepSize = 0.0; - - G4TouchableHandle fTouchableHandle; - - G4SteppingControl StepControlFlag = NormalCondition; - - G4double physIntLength = 0.0; - G4ForceCondition fCondition = InActivated; - G4GPILSelection fGPILSelection = NotCandidateForSelection; - // Above three variables are for the method DefinePhysicalStepLength(). - // To pass this information to the method Verbose(), they are kept at - // here. Need a more elegant mechanism + public: + virtual ~G4VSteppingVerbose(); + + // static methods to set/get the object's pointer + + static void SetInstance(G4VSteppingVerbose* Instance); + static G4VSteppingVerbose* GetInstance(); + static G4VSteppingVerbose* GetMasterInstance(); + static G4int GetSilent(); + static void SetSilent(G4int fSilent); + static G4int GetSilentStepInfo(); + static void SetSilentStepInfo(G4int fSilent); + + virtual G4VSteppingVerbose* Clone(); + + // these method are invoked by G4SteppingManager + + virtual void NewStep() = 0; + void CopyState(); + virtual void SetManager(G4SteppingManager* const); + virtual void AtRestDoItInvoked() = 0; + virtual void AlongStepDoItAllDone() = 0; + virtual void PostStepDoItAllDone() = 0; + virtual void AlongStepDoItOneByOne() = 0; + virtual void PostStepDoItOneByOne() = 0; + virtual void StepInfo() = 0; + virtual void TrackingStarted() = 0; + virtual void DPSLStarted() = 0; + virtual void DPSLUserLimit() = 0; + virtual void DPSLPostStep() = 0; + virtual void DPSLAlongStep() = 0; + virtual void VerboseTrack() = 0; + virtual void VerboseParticleChange() = 0; + + protected: + G4VSteppingVerbose(); // 'singleton' + + static G4ThreadLocal G4VSteppingVerbose* fInstance; // pointer to the instance + static G4VSteppingVerbose* fMasterInstance; // pointer to the instance in master thread + G4TRACKING_DLL static G4ThreadLocal G4int Silent; // flag for verbosity + G4TRACKING_DLL static G4ThreadLocal G4int SilentStepInfo; // another flag for verbosity + + G4SteppingManager* fManager = nullptr; + G4UserSteppingAction* fUserSteppingAction = nullptr; + + G4double PhysicalStep = 0.0; + G4double GeometricalStep = 0.0; + G4double CorrectedStep = 0.0; + G4bool PreStepPointIsGeom = false; + G4bool FirstStep = false; + G4StepStatus fStepStatus = fUndefined; + + G4double TempInitVelocity = 0.0; + G4double TempVelocity = 0.0; + G4double Mass = 0.0; + + G4double sumEnergyChange = 0.0; + + G4VParticleChange* fParticleChange = nullptr; + G4Track* fTrack = nullptr; + G4TrackVector* fSecondary = nullptr; + G4Step* fStep = nullptr; + G4StepPoint* fPreStepPoint = nullptr; + G4StepPoint* fPostStepPoint = nullptr; + + G4VPhysicalVolume* fCurrentVolume = nullptr; + G4VSensitiveDetector* fSensitive = nullptr; + G4VProcess* fCurrentProcess = nullptr; // The pointer to the process whose DoIt() or + // GetPhysicalInteractionLength() has been just executed + + G4ProcessVector* fAtRestDoItVector = nullptr; + G4ProcessVector* fAlongStepDoItVector = nullptr; + G4ProcessVector* fPostStepDoItVector = nullptr; + + G4ProcessVector* fAtRestGetPhysIntVector = nullptr; + G4ProcessVector* fAlongStepGetPhysIntVector = nullptr; + G4ProcessVector* fPostStepGetPhysIntVector = nullptr; + + std::size_t MAXofAtRestLoops = 0; + std::size_t MAXofAlongStepLoops = 0; + std::size_t MAXofPostStepLoops = 0; + + G4double currentMinimumStep = 0.0; + G4double numberOfInteractionLengthLeft = 0.0; + + std::size_t fAtRestDoItProcTriggered = 0; + std::size_t fAlongStepDoItProcTriggered = 0; + std::size_t fPostStepDoItProcTriggered = 0; + + G4int fN2ndariesAtRestDoIt = 0; + G4int fN2ndariesAlongStepDoIt = 0; + G4int fN2ndariesPostStepDoIt = 0; + // These are the numbers of secondaries generated by the process + // just executed + + G4Navigator* fNavigator = nullptr; + + G4int verboseLevel = 0; + + using G4SelectedAtRestDoItVector = std::vector; + using G4SelectedAlongStepDoItVector = std::vector; + using G4SelectedPostStepDoItVector = std::vector; + + G4SelectedAtRestDoItVector* fSelectedAtRestDoItVector = nullptr; + G4SelectedAlongStepDoItVector* fSelectedAlongStepDoItVector = nullptr; + G4SelectedPostStepDoItVector* fSelectedPostStepDoItVector = nullptr; + + G4double fPreviousStepSize = 0.0; + + G4TouchableHandle fTouchableHandle; + + G4SteppingControl StepControlFlag = NormalCondition; + + G4double physIntLength = 0.0; + G4ForceCondition fCondition = InActivated; + G4GPILSelection fGPILSelection = NotCandidateForSelection; + // Above three variables are for the method DefinePhysicalStepLength(). + // To pass this information to the method Verbose(), they are kept at + // here. Need a more elegant mechanism }; #endif diff --git a/source/tracking/include/G4VTrackingManager.hh b/source/tracking/include/G4VTrackingManager.hh index 823d01f03eb..00f4f4d673f 100644 --- a/source/tracking/include/G4VTrackingManager.hh +++ b/source/tracking/include/G4VTrackingManager.hh @@ -42,30 +42,28 @@ class G4Track; class G4VTrackingManager //////////////////////// { + public: + virtual ~G4VTrackingManager() = default; - public: - virtual ~G4VTrackingManager() {} + // Messaged by the Particle definition whenever cross-section tables have + // to be rebuilt (i.e. if new materials have been defined). + virtual void BuildPhysicsTable(const G4ParticleDefinition&) {} - virtual void BuildPhysicsTable(const G4ParticleDefinition&) {} - // Messaged by the Particle definition whenever cross-section tables have - // to be rebuilt (i.e. if new materials have been defined). + // Messaged by the Particle definition whenever cross-section tables have + // to be prepared for rebuild (i.e. if new materials have been defined). + virtual void PreparePhysicsTable(const G4ParticleDefinition&) {} - virtual void PreparePhysicsTable(const G4ParticleDefinition&) {} - // Messaged by the Particle definition whenever cross-section tables have - // to be prepared for rebuild (i.e. if new materials have been defined). - - virtual void HandOverOneTrack(G4Track* aTrack) = 0; - // Invoking this function, a G4Track given by the argument will be - // handed over to this tracking manager. It may be tracked immediately - // or processing may be deferred to a later time, at the latest when - // calling FlushEvent(). - - virtual void FlushEvent() {} - // Signal that all tracks in the current event have been finished and - // this manager should process all tracks that may have been deferred. - // When called via this method, the tracking manager may stack new - // secondaries which will be tracked afterwards. + // Invoking this function, a G4Track given by the argument will be + // handed over to this tracking manager. It may be tracked immediately + // or processing may be deferred to a later time, at the latest when + // calling FlushEvent(). + virtual void HandOverOneTrack(G4Track* aTrack) = 0; + // Signal that all tracks in the current event have been finished and + // this manager should process all tracks that may have been deferred. + // When called via this method, the tracking manager may stack new + // secondaries which will be tracked afterwards. + virtual void FlushEvent() {} }; #endif diff --git a/source/tracking/include/G4VTrajectory.hh b/source/tracking/include/G4VTrajectory.hh index 114e50f2465..1719510a389 100644 --- a/source/tracking/include/G4VTrajectory.hh +++ b/source/tracking/include/G4VTrajectory.hh @@ -27,7 +27,7 @@ // // Class description: // -// This class is the abstract base class representing a trajectory of +// This class is the abstract base class representing a trajectory of // a particle being tracked. // Its concrete class includes information of: // 1) List of trajectory points composing the trajectory; @@ -43,11 +43,11 @@ #ifndef G4VTrajectory_hh #define G4VTrajectory_hh 1 -#include -#include - -#include "globals.hh" #include "G4ThreeVector.hh" +#include "globals.hh" + +#include +#include class G4Step; class G4VTrajectoryPoint; @@ -56,60 +56,64 @@ class G4AttValue; class G4VTrajectory { - public: - - G4VTrajectory(); - virtual ~G4VTrajectory(); - // Constructor/Destrcutor - - G4bool operator == (const G4VTrajectory& right) const; - // Equality operator - - virtual G4int GetTrackID() const = 0; - virtual G4int GetParentID() const = 0; - virtual G4String GetParticleName() const = 0; - virtual G4double GetCharge() const = 0; - // Accessors - - virtual G4int GetPDGEncoding() const = 0; - // Charge is that of G4DynamicParticle - virtual G4ThreeVector GetInitialMomentum() const = 0; - // Zero will be returned if the particle does not have PDG code. - // Momentum at the origin of the track in global coordinate system - - virtual G4int GetPointEntries() const = 0; - // Returns the number of trajectory points - virtual G4VTrajectoryPoint* GetPoint(G4int i) const = 0; - // Returns i-th trajectory point - virtual void ShowTrajectory(std::ostream& os=G4cout) const; - // Converts attributes in trajectory (and trajectory point if - // needed) to ostream. A default implementation in this base class - // may be used or may be overridden in the concrete class. Note: - // the user needs to follow with new-line or end-of-string, - // depending on the nature of os - virtual void DrawTrajectory() const; - // Draw the trajectory. A default implementation in this base - // class may be used or may be overridden in the concrete class - virtual const std::map* GetAttDefs() const - { return nullptr; } - // If implemented by a derived class, returns a pointer to a map of - // attribute definitions for the attribute values below. The user - // must test the validity of this pointer. See G4Trajectory for an - // example of a concrete implementation of this method - virtual std::vector* CreateAttValues() const - { return nullptr; } - // If implemented by a derived class, returns a pointer to a list - // of attribute values suitable, e.g., for picking. Each must - // refer to an attribute definition in the above map; its name is - // the key. The user must test the validity of this pointer (it - // must be non-zero and conform to the G4AttDefs, which may be - // checked with G4AttCheck) and delete the list after use. See - // G4Trajectory for an example of a concrete implementation of this - // method and G4VTrajectory::ShowTrajectory for an example of its use. - - virtual void AppendStep(const G4Step* aStep) = 0; - virtual void MergeTrajectory(G4VTrajectory* secondTrajectory) = 0; - // Methods invoked exclusively by G4TrackingManager + public: + // Constructor/Destrcutor + G4VTrajectory() = default; + virtual ~G4VTrajectory() = default; + + // Equality operator + G4bool operator==(const G4VTrajectory& right) const; + + // Accessors + virtual G4int GetTrackID() const = 0; + virtual G4int GetParentID() const = 0; + virtual G4String GetParticleName() const = 0; + + // Charge is that of G4DynamicParticle + virtual G4double GetCharge() const = 0; + + // Zero will be returned if the particle does not have PDG code. + virtual G4int GetPDGEncoding() const = 0; + + // Momentum at the origin of the track in global coordinate system + virtual G4ThreeVector GetInitialMomentum() const = 0; + + // Returns the number of trajectory points + virtual G4int GetPointEntries() const = 0; + + // Returns i-th trajectory point + virtual G4VTrajectoryPoint* GetPoint(G4int i) const = 0; + + // Converts attributes in trajectory (and trajectory point if + // needed) to ostream. A default implementation in this base class + // may be used or may be overridden in the concrete class. Note: + // the user needs to follow with new-line or end-of-string, + // depending on the nature of os + virtual void ShowTrajectory(std::ostream& os = G4cout) const; + + // Draw the trajectory. A default implementation in this base + // class may be used or may be overridden in the concrete class + virtual void DrawTrajectory() const; + + // If implemented by a derived class, returns a pointer to a map of + // attribute definitions for the attribute values below. The user + // must test the validity of this pointer. See G4Trajectory for an + // example of a concrete implementation of this method + virtual const std::map* GetAttDefs() const { return nullptr; } + + // If implemented by a derived class, returns a pointer to a list + // of attribute values suitable, e.g., for picking. Each must + // refer to an attribute definition in the above map; its name is + // the key. The user must test the validity of this pointer (it + // must be non-zero and conform to the G4AttDefs, which may be + // checked with G4AttCheck) and delete the list after use. See + // G4Trajectory for an example of a concrete implementation of this + // method and G4VTrajectory::ShowTrajectory for an example of its use. + virtual std::vector* CreateAttValues() const { return nullptr; } + + // Methods invoked exclusively by G4TrackingManager + virtual void AppendStep(const G4Step* aStep) = 0; + virtual void MergeTrajectory(G4VTrajectory* secondTrajectory) = 0; }; #endif diff --git a/source/tracking/include/G4VTrajectoryPoint.hh b/source/tracking/include/G4VTrajectoryPoint.hh index ca838215bbf..b1b74cad06f 100644 --- a/source/tracking/include/G4VTrajectoryPoint.hh +++ b/source/tracking/include/G4VTrajectoryPoint.hh @@ -38,56 +38,52 @@ #ifndef G4VTrajectoryPoint_hh #define G4VTrajectoryPoint_hh 1 -#include -#include - -#include "globals.hh" #include "G4ThreeVector.hh" +#include "globals.hh" + +#include +#include class G4AttDef; class G4AttValue; class G4VTrajectoryPoint { - public: - - G4VTrajectoryPoint(); - virtual ~G4VTrajectoryPoint(); - // Constructor/Destructor + public: + // Constructor/Destructor + G4VTrajectoryPoint() = default; + virtual ~G4VTrajectoryPoint() = default; - G4bool operator==(const G4VTrajectoryPoint& right) const; - // Equality operator + // Equality operator + G4bool operator==(const G4VTrajectoryPoint& right) const { return (this == &right); } - virtual const G4ThreeVector GetPosition() const = 0; - // Return point position + // Return point position + virtual const G4ThreeVector GetPosition() const = 0; - virtual const std::vector* GetAuxiliaryPoints() const - { return nullptr; } - // Get method for a vector of auxiliary points. - // If implemented by a derived class, returns a pointer to a list - // of auxiliary points, e.g., intermediate points used during the - // calculation of the step that can be used for drawing a smoother - // trajectory. The user must test the validity of this pointer + // Get method for a vector of auxiliary points. + // If implemented by a derived class, returns a pointer to a list + // of auxiliary points, e.g., intermediate points used during the + // calculation of the step that can be used for drawing a smoother + // trajectory. The user must test the validity of this pointer + virtual const std::vector* GetAuxiliaryPoints() const { return nullptr; } - virtual const std::map* GetAttDefs() const - { return nullptr; } - // Get method for HEPRep style attribute definitions. - // If implemented by a derived class, returns a pointer to a map of - // attribute definitions for the attribute values below. The user - // must test the validity of this pointer. See G4Trajectory for an - // example of a concrete implementation of this method + // Get method for HEPRep style attribute definitions. + // If implemented by a derived class, returns a pointer to a map of + // attribute definitions for the attribute values below. The user + // must test the validity of this pointer. See G4Trajectory for an + // example of a concrete implementation of this method + virtual const std::map* GetAttDefs() const { return nullptr; } - virtual std::vector* CreateAttValues() const - { return nullptr; } - // Get method for HEPRep style attribute values. - // If implemented by a derived class, returns a pointer to a list - // of attribute values suitable, e.g., for picking. Each must - // refer to an attribute definition in the above map; its name is - // the key. The user must test the validity of this pointer (it - // must be non-zero and conform to the G4AttDefs, which may be - // checked with G4AttCheck) and delete the list after use. See - // G4Trajectory for an example of a concrete implementation of this - // method and G4VTrajectory::ShowTrajectory() for an example of its use. + // Get method for HEPRep style attribute values. + // If implemented by a derived class, returns a pointer to a list + // of attribute values suitable, e.g., for picking. Each must + // refer to an attribute definition in the above map; its name is + // the key. The user must test the validity of this pointer (it + // must be non-zero and conform to the G4AttDefs, which may be + // checked with G4AttCheck) and delete the list after use. See + // G4Trajectory for an example of a concrete implementation of this + // method and G4VTrajectory::ShowTrajectory() for an example of its use. + virtual std::vector* CreateAttValues() const { return nullptr; } }; #endif diff --git a/source/tracking/include/trkgdefs.hh b/source/tracking/include/trkgdefs.hh index 55a0a721284..a04e07752b4 100644 --- a/source/tracking/include/trkgdefs.hh +++ b/source/tracking/include/trkgdefs.hh @@ -33,16 +33,16 @@ #include "G4Types.hh" #ifdef WIN32 - // - // Unique identifier for global module - // - #if defined G4TRACKING_ALLOC_EXPORT - #define G4TRACKING_DLL G4DLLEXPORT - #else - #define G4TRACKING_DLL G4DLLIMPORT - #endif +// +// Unique identifier for global module +// +# if defined G4TRACKING_ALLOC_EXPORT +# define G4TRACKING_DLL G4DLLEXPORT +# else +# define G4TRACKING_DLL G4DLLIMPORT +# endif #else - #define G4TRACKING_DLL +# define G4TRACKING_DLL #endif #endif /* G4TRKGDEFS_HH */ diff --git a/source/tracking/sources.cmake b/source/tracking/sources.cmake index 011b1a10013..bf280401195 100644 --- a/source/tracking/sources.cmake +++ b/source/tracking/sources.cmake @@ -47,7 +47,6 @@ geant4_add_module(G4tracking G4MultiTrackingAction.cc G4VSteppingVerbose.cc G4VTrajectory.cc - G4VTrajectoryPoint.cc G4MultiSteppingAction.cc) geant4_module_compile_definitions(G4tracking PRIVATE G4TRACKING_ALLOC_EXPORT) diff --git a/source/tracking/src/G4AdjointCrossSurfChecker.cc b/source/tracking/src/G4AdjointCrossSurfChecker.cc index 218eba603d5..9403557fdff 100644 --- a/source/tracking/src/G4AdjointCrossSurfChecker.cc +++ b/source/tracking/src/G4AdjointCrossSurfChecker.cc @@ -31,31 +31,22 @@ // -------------------------------------------------------------------- #include "G4AdjointCrossSurfChecker.hh" + +#include "G4AffineTransform.hh" #include "G4PhysicalConstants.hh" -#include "G4SystemOfUnits.hh" +#include "G4PhysicalVolumeStore.hh" #include "G4Step.hh" #include "G4StepPoint.hh" -#include "G4PhysicalVolumeStore.hh" +#include "G4SystemOfUnits.hh" #include "G4VSolid.hh" -#include "G4AffineTransform.hh" - -////////////////////////////////////////////////////////////////////////////// -// -G4ThreadLocal G4AdjointCrossSurfChecker* - G4AdjointCrossSurfChecker::instance = nullptr; ////////////////////////////////////////////////////////////////////////////// // -G4AdjointCrossSurfChecker::G4AdjointCrossSurfChecker() -{ -} +G4ThreadLocal G4AdjointCrossSurfChecker* G4AdjointCrossSurfChecker::instance = nullptr; ////////////////////////////////////////////////////////////////////////////// // -G4AdjointCrossSurfChecker::~G4AdjointCrossSurfChecker() -{ - delete instance; -} +G4AdjointCrossSurfChecker::~G4AdjointCrossSurfChecker() { delete instance; } ////////////////////////////////////////////////////////////////////////////// // @@ -63,45 +54,40 @@ G4AdjointCrossSurfChecker* G4AdjointCrossSurfChecker::GetInstance() { if (instance == nullptr) instance = new G4AdjointCrossSurfChecker(); return instance; -} +} ////////////////////////////////////////////////////////////////////////////// // -G4bool G4AdjointCrossSurfChecker:: -CrossingASphere(const G4Step* aStep, G4double sphere_radius, - G4ThreeVector sphere_center, G4ThreeVector& crossing_pos, - G4double& cos_th , G4bool& GoingIn) +G4bool G4AdjointCrossSurfChecker::CrossingASphere(const G4Step* aStep, G4double sphere_radius, + G4ThreeVector sphere_center, G4ThreeVector& crossing_pos, G4double& cos_th, G4bool& GoingIn) { G4ThreeVector pos1 = aStep->GetPreStepPoint()->GetPosition() - sphere_center; G4ThreeVector pos2 = aStep->GetPostStepPoint()->GetPosition() - sphere_center; G4double r1 = pos1.mag(); G4double r2 = pos2.mag(); - G4bool did_cross = false; - - if (r1<=sphere_radius && r2>sphere_radius) - { + G4bool did_cross = false; + + if (r1 <= sphere_radius && r2 > sphere_radius) { did_cross = true; GoingIn = false; - } - else if (r2<=sphere_radius && r1>sphere_radius) - { + } + else if (r2 <= sphere_radius && r1 > sphere_radius) { did_cross = true; GoingIn = true; } - if (did_cross) - { - G4ThreeVector dr = pos2-pos1; - G4double r12 = r1*r1; + if (did_cross) { + G4ThreeVector dr = pos2 - pos1; + G4double r12 = r1 * r1; G4double rdr = dr.mag(); - G4double a,b,c,d; - a = rdr*rdr; - b = 2.*pos1.dot(dr); - c = r12-sphere_radius*sphere_radius; - d = std::sqrt(b*b-4.*a*c); - G4double l = (-b+d)/2./a; - if (l > 1.) l=(-b-d)/2./a; - crossing_pos = pos1+l*dr; + G4double a, b, c, d; + a = rdr * rdr; + b = 2. * pos1.dot(dr); + c = r12 - sphere_radius * sphere_radius; + d = std::sqrt(b * b - 4. * a * c); + G4double l = (-b + d) / 2. / a; + if (l > 1.) l = (-b - d) / 2. / a; + crossing_pos = pos1 + l * dr; cos_th = std::abs(dr.cosTheta(crossing_pos)); } return did_cross; @@ -109,110 +95,86 @@ CrossingASphere(const G4Step* aStep, G4double sphere_radius, ////////////////////////////////////////////////////////////////////////////// // -G4bool G4AdjointCrossSurfChecker:: -GoingInOrOutOfaVolume(const G4Step* aStep, const G4String& volume_name, - G4double&, G4bool& GoingIn) // from external surface +G4bool G4AdjointCrossSurfChecker::GoingInOrOutOfaVolume(const G4Step* aStep, + const G4String& volume_name, G4double&, G4bool& GoingIn) // from external surface { - G4bool step_at_boundary = - (aStep->GetPostStepPoint()->GetStepStatus() == fGeomBoundary); + G4bool step_at_boundary = (aStep->GetPostStepPoint()->GetStepStatus() == fGeomBoundary); G4bool did_cross = false; - if (step_at_boundary) - { - const G4VTouchable* postStepTouchable = - aStep->GetPostStepPoint()->GetTouchable(); - const G4VTouchable* preStepTouchable = - aStep->GetPreStepPoint()->GetTouchable(); - if (preStepTouchable && postStepTouchable - && postStepTouchable->GetVolume() && preStepTouchable->GetVolume()) + if (step_at_boundary) { + const G4VTouchable* postStepTouchable = aStep->GetPostStepPoint()->GetTouchable(); + const G4VTouchable* preStepTouchable = aStep->GetPreStepPoint()->GetTouchable(); + if ((preStepTouchable != nullptr) && (postStepTouchable != nullptr) && + (postStepTouchable->GetVolume() != nullptr) && (preStepTouchable->GetVolume() != nullptr)) { G4String post_vol_name = postStepTouchable->GetVolume()->GetName(); G4String pre_vol_name = preStepTouchable->GetVolume()->GetName(); - if (post_vol_name == volume_name ) - { + if (post_vol_name == volume_name) { GoingIn = true; did_cross = true; } - else if (pre_vol_name == volume_name) - { + else if (pre_vol_name == volume_name) { GoingIn = false; did_cross = true; } - } + } } return did_cross; // still need to compute the cosine of the direction } ///////////////////////////////////////////////////////////////////////////// // -G4bool G4AdjointCrossSurfChecker:: -GoingInOrOutOfaVolumeByExtSurface(const G4Step* aStep, - const G4String& volume_name, - const G4String& mother_logical_vol_name, - G4double&, - G4bool& GoingIn) // from external surf. +G4bool G4AdjointCrossSurfChecker::GoingInOrOutOfaVolumeByExtSurface(const G4Step* aStep, + const G4String& volume_name, const G4String& mother_logical_vol_name, G4double&, + G4bool& GoingIn) // from external surf. { - G4bool step_at_boundary = - (aStep->GetPostStepPoint()->GetStepStatus() == fGeomBoundary); + G4bool step_at_boundary = (aStep->GetPostStepPoint()->GetStepStatus() == fGeomBoundary); G4bool did_cross = false; - if (step_at_boundary) - { - const G4VTouchable* postStepTouchable = - aStep->GetPostStepPoint()->GetTouchable(); - const G4VTouchable* preStepTouchable = - aStep->GetPreStepPoint()->GetTouchable(); - const G4VPhysicalVolume* postVol = (postStepTouchable != nullptr) - ? postStepTouchable->GetVolume() : nullptr; - const G4VPhysicalVolume* preVol = (preStepTouchable != nullptr) - ? preStepTouchable->GetVolume() : nullptr; - if (preStepTouchable != nullptr && postStepTouchable != nullptr - && postVol != nullptr && preVol != nullptr) + if (step_at_boundary) { + const G4VTouchable* postStepTouchable = aStep->GetPostStepPoint()->GetTouchable(); + const G4VTouchable* preStepTouchable = aStep->GetPreStepPoint()->GetTouchable(); + const G4VPhysicalVolume* postVol = + (postStepTouchable != nullptr) ? postStepTouchable->GetVolume() : nullptr; + const G4VPhysicalVolume* preVol = + (preStepTouchable != nullptr) ? preStepTouchable->GetVolume() : nullptr; + if (preStepTouchable != nullptr && postStepTouchable != nullptr && postVol != nullptr && + preVol != nullptr) { G4String post_vol_name = postVol->GetName(); G4String post_log_vol_name = postVol->GetLogicalVolume()->GetName(); G4String pre_vol_name = preVol->GetName(); G4String pre_log_vol_name = preVol->GetLogicalVolume()->GetName(); - if (post_vol_name == volume_name - && pre_log_vol_name == mother_logical_vol_name) - { + if (post_vol_name == volume_name && pre_log_vol_name == mother_logical_vol_name) { GoingIn = true; did_cross = true; } - else if (pre_vol_name == volume_name - && post_log_vol_name == mother_logical_vol_name ) - { + else if (pre_vol_name == volume_name && post_log_vol_name == mother_logical_vol_name) { GoingIn = false; did_cross = true; } - } + } } - return did_cross; // still need to compute the cosine of the direction + return did_cross; // still need to compute the cosine of the direction } ////////////////////////////////////////////////////////////////////////////// // -G4bool G4AdjointCrossSurfChecker:: -CrossingAGivenRegisteredSurface(const G4Step* aStep, - const G4String& surface_name, - G4ThreeVector& crossing_pos, - G4double& cos_to_surface, G4bool& GoingIn) +G4bool G4AdjointCrossSurfChecker::CrossingAGivenRegisteredSurface(const G4Step* aStep, + const G4String& surface_name, G4ThreeVector& crossing_pos, G4double& cos_to_surface, + G4bool& GoingIn) { G4int ind = FindRegisteredSurface(surface_name); G4bool did_cross = false; - if (ind >=0) - { - did_cross = CrossingAGivenRegisteredSurface(aStep, ind, crossing_pos, - cos_to_surface, GoingIn); + if (ind >= 0) { + did_cross = CrossingAGivenRegisteredSurface(aStep, ind, crossing_pos, cos_to_surface, GoingIn); } return did_cross; } ////////////////////////////////////////////////////////////////////////////// // -G4bool G4AdjointCrossSurfChecker:: -CrossingAGivenRegisteredSurface(const G4Step* aStep, G4int ind, - G4ThreeVector& crossing_pos, - G4double& cos_to_surface, G4bool& GoingIn) +G4bool G4AdjointCrossSurfChecker::CrossingAGivenRegisteredSurface(const G4Step* aStep, G4int ind, + G4ThreeVector& crossing_pos, G4double& cos_to_surface, G4bool& GoingIn) { G4String surf_type = ListOfSurfaceType[ind]; G4double radius = ListOfSphereRadius[ind]; @@ -221,39 +183,27 @@ CrossingAGivenRegisteredSurface(const G4Step* aStep, G4int ind, G4String vol2 = ListOfVol2Name[ind]; G4bool did_cross = false; - if (surf_type == "Sphere") - { - did_cross = CrossingASphere(aStep, radius, center,crossing_pos, - cos_to_surface, GoingIn); + if (surf_type == "Sphere") { + did_cross = CrossingASphere(aStep, radius, center, crossing_pos, cos_to_surface, GoingIn); } - else if (surf_type == "ExternalSurfaceOfAVolume") - { - did_cross = GoingInOrOutOfaVolumeByExtSurface(aStep, vol1, vol2, - cos_to_surface, GoingIn); - crossing_pos= aStep->GetPostStepPoint()->GetPosition(); + else if (surf_type == "ExternalSurfaceOfAVolume") { + did_cross = GoingInOrOutOfaVolumeByExtSurface(aStep, vol1, vol2, cos_to_surface, GoingIn); + crossing_pos = aStep->GetPostStepPoint()->GetPosition(); } - else if (surf_type == "BoundaryBetweenTwoVolumes") - { - did_cross = CrossingAnInterfaceBetweenTwoVolumes(aStep, vol1, vol2, - crossing_pos, - cos_to_surface, GoingIn); + else if (surf_type == "BoundaryBetweenTwoVolumes") { + did_cross = CrossingAnInterfaceBetweenTwoVolumes( + aStep, vol1, vol2, crossing_pos, cos_to_surface, GoingIn); } return did_cross; } ////////////////////////////////////////////////////////////////////////////// // -G4bool G4AdjointCrossSurfChecker:: -CrossingOneOfTheRegisteredSurface(const G4Step* aStep, G4String& surface_name, - G4ThreeVector& crossing_pos, - G4double& cos_to_surface, - G4bool& GoingIn) +G4bool G4AdjointCrossSurfChecker::CrossingOneOfTheRegisteredSurface(const G4Step* aStep, + G4String& surface_name, G4ThreeVector& crossing_pos, G4double& cos_to_surface, G4bool& GoingIn) { - for (std::size_t i=0; iGetPostStepPoint()->GetStepStatus() == fGeomBoundary); + G4bool step_at_boundary = (aStep->GetPostStepPoint()->GetStepStatus() == fGeomBoundary); G4bool did_cross = false; - if (step_at_boundary) - { - const G4VTouchable* postStepTouchable = - aStep->GetPostStepPoint()->GetTouchable(); - const G4VTouchable* preStepTouchable = - aStep->GetPreStepPoint()->GetTouchable(); - if (preStepTouchable && postStepTouchable) - { + if (step_at_boundary) { + const G4VTouchable* postStepTouchable = aStep->GetPostStepPoint()->GetTouchable(); + const G4VTouchable* preStepTouchable = aStep->GetPreStepPoint()->GetTouchable(); + if ((preStepTouchable != nullptr) && (postStepTouchable != nullptr)) { G4String post_vol_name = postStepTouchable->GetVolume()->GetName(); - if (post_vol_name == "") - { - post_vol_name = postStepTouchable->GetVolume()->GetLogicalVolume() - ->GetName(); + if (post_vol_name.empty()) { + post_vol_name = postStepTouchable->GetVolume()->GetLogicalVolume()->GetName(); } G4String pre_vol_name = preStepTouchable->GetVolume()->GetName(); - if (pre_vol_name == "") - { - pre_vol_name = preStepTouchable->GetVolume()->GetLogicalVolume() - ->GetName(); + if (pre_vol_name.empty()) { + pre_vol_name = preStepTouchable->GetVolume()->GetLogicalVolume()->GetName(); } - if (pre_vol_name == vol1_name && post_vol_name == vol2_name) - { - GoingIn=true; - did_cross=true; + if (pre_vol_name == vol1_name && post_vol_name == vol2_name) { + GoingIn = true; + did_cross = true; } - else if (pre_vol_name == vol2_name && post_vol_name == vol1_name) - { - GoingIn=false; - did_cross=true; + else if (pre_vol_name == vol2_name && post_vol_name == vol1_name) { + GoingIn = false; + did_cross = true; } - } + } } - return did_cross; // still need to compute the cosine of the direction + return did_cross; // still need to compute the cosine of the direction } ////////////////////////////////////////////////////////////////////////////// -// -G4bool G4AdjointCrossSurfChecker:: -AddaSphericalSurface(const G4String& SurfaceName, G4double radius, - G4ThreeVector pos, G4double& Area) +// +G4bool G4AdjointCrossSurfChecker::AddaSphericalSurface( + const G4String& SurfaceName, G4double radius, G4ThreeVector pos, G4double& Area) { G4int ind = FindRegisteredSurface(SurfaceName); - Area = 4.*pi*radius*radius; - if (ind>=0) - { + Area = 4. * pi * radius * radius; + if (ind >= 0) { ListOfSurfaceType[ind] = "Sphere"; ListOfSphereRadius[ind] = radius; ListOfSphereCenter[ind] = pos; @@ -325,57 +258,47 @@ AddaSphericalSurface(const G4String& SurfaceName, G4double radius, ListOfVol2Name[ind] = ""; AreaOfSurface[ind] = Area; } - else - { + else { ListOfSurfaceName.push_back(SurfaceName); - ListOfSurfaceType.push_back("Sphere"); + ListOfSurfaceType.emplace_back("Sphere"); ListOfSphereRadius.push_back(radius); ListOfSphereCenter.push_back(pos); - ListOfVol1Name.push_back(""); - ListOfVol2Name.push_back(""); + ListOfVol1Name.emplace_back(""); + ListOfVol2Name.emplace_back(""); AreaOfSurface.push_back(Area); - } + } return true; } ////////////////////////////////////////////////////////////////////////////// -// -G4bool G4AdjointCrossSurfChecker:: -AddaSphericalSurfaceWithCenterAtTheCenterOfAVolume(const G4String& SurfaceName, - G4double radius, - const G4String& volume_name, - G4ThreeVector& center, - G4double& area) -{ +// +G4bool G4AdjointCrossSurfChecker::AddaSphericalSurfaceWithCenterAtTheCenterOfAVolume( + const G4String& SurfaceName, G4double radius, const G4String& volume_name, G4ThreeVector& center, + G4double& area) +{ G4VPhysicalVolume* thePhysicalVolume = nullptr; G4PhysicalVolumeStore* thePhysVolStore = G4PhysicalVolumeStore::GetInstance(); thePhysicalVolume = thePhysVolStore->GetVolume(volume_name); - if (thePhysicalVolume != nullptr) - { + if (thePhysicalVolume != nullptr) { G4VPhysicalVolume* daughter = thePhysicalVolume; G4LogicalVolume* mother = thePhysicalVolume->GetMotherLogical(); G4AffineTransform theTransformationFromPhysVolToWorld = G4AffineTransform(); - while (mother != nullptr) - { + while (mother != nullptr) { theTransformationFromPhysVolToWorld *= - G4AffineTransform(daughter->GetFrameRotation(), - daughter->GetObjectTranslation()); - for ( std::size_t i=0; isize(); ++i) - { - if ((*thePhysVolStore)[i]->GetLogicalVolume() == mother) - { + G4AffineTransform(daughter->GetFrameRotation(), daughter->GetObjectTranslation()); + for (std::size_t i = 0; i < thePhysVolStore->size(); ++i) { + if ((*thePhysVolStore)[i]->GetLogicalVolume() == mother) { daughter = (*thePhysVolStore)[i]; - mother =daughter->GetMotherLogical(); + mother = daughter->GetMotherLogical(); break; } } } center = theTransformationFromPhysVolToWorld.NetTranslation(); - G4cout << "Center of the spherical surface is at the position: " - << center/cm << " cm" << G4endl; + G4cout << "Center of the spherical surface is at the position: " << center / cm << " cm" + << G4endl; } - else - { + else { return false; } return AddaSphericalSurface(SurfaceName, radius, center, area); @@ -383,39 +306,35 @@ AddaSphericalSurfaceWithCenterAtTheCenterOfAVolume(const G4String& SurfaceName, ////////////////////////////////////////////////////////////////////////////// // -G4bool G4AdjointCrossSurfChecker:: -AddanExtSurfaceOfAvolume(const G4String& SurfaceName, - const G4String& volume_name, G4double& Area) +G4bool G4AdjointCrossSurfChecker::AddanExtSurfaceOfAvolume( + const G4String& SurfaceName, const G4String& volume_name, G4double& Area) { G4int ind = FindRegisteredSurface(SurfaceName); G4VPhysicalVolume* thePhysicalVolume = nullptr; G4PhysicalVolumeStore* thePhysVolStore = G4PhysicalVolumeStore::GetInstance(); thePhysicalVolume = thePhysVolStore->GetVolume(volume_name); - if (thePhysicalVolume == nullptr) - { + if (thePhysicalVolume == nullptr) { return false; } Area = thePhysicalVolume->GetLogicalVolume()->GetSolid()->GetSurfaceArea(); - G4String mother_vol_name = ""; + G4String mother_vol_name = ""; G4LogicalVolume* theMother = thePhysicalVolume->GetMotherLogical(); - - if (theMother != nullptr) mother_vol_name= theMother->GetName(); - if (ind>=0) - { + + if (theMother != nullptr) mother_vol_name = theMother->GetName(); + if (ind >= 0) { ListOfSurfaceType[ind] = "ExternalSurfaceOfAVolume"; ListOfSphereRadius[ind] = 0.; - ListOfSphereCenter[ind] = G4ThreeVector(0.,0.,0.); + ListOfSphereCenter[ind] = G4ThreeVector(0., 0., 0.); ListOfVol1Name[ind] = volume_name; ListOfVol2Name[ind] = mother_vol_name; AreaOfSurface[ind] = Area; } - else - { + else { ListOfSurfaceName.push_back(SurfaceName); - ListOfSurfaceType.push_back("ExternalSurfaceOfAVolume"); + ListOfSurfaceType.emplace_back("ExternalSurfaceOfAVolume"); ListOfSphereRadius.push_back(0.); - ListOfSphereCenter.push_back(G4ThreeVector(0.,0.,0.)); + ListOfSphereCenter.emplace_back(0., 0., 0.); ListOfVol1Name.push_back(volume_name); ListOfVol2Name.push_back(mother_vol_name); AreaOfSurface.push_back(Area); @@ -425,28 +344,24 @@ AddanExtSurfaceOfAvolume(const G4String& SurfaceName, ////////////////////////////////////////////////////////////////////////////// // -G4bool G4AdjointCrossSurfChecker:: -AddanInterfaceBetweenTwoVolumes(const G4String& SurfaceName, - const G4String& volume_name1, - const G4String& volume_name2, G4double& Area) +G4bool G4AdjointCrossSurfChecker::AddanInterfaceBetweenTwoVolumes(const G4String& SurfaceName, + const G4String& volume_name1, const G4String& volume_name2, G4double& Area) { G4int ind = FindRegisteredSurface(SurfaceName); - Area = -1.; // the way to compute the surface is not known yet - if (ind>=0) - { + Area = -1.; // the way to compute the surface is not known yet + if (ind >= 0) { ListOfSurfaceType[ind] = "BoundaryBetweenTwoVolumes"; ListOfSphereRadius[ind] = 0.; - ListOfSphereCenter[ind] = G4ThreeVector(0.,0.,0.); + ListOfSphereCenter[ind] = G4ThreeVector(0., 0., 0.); ListOfVol1Name[ind] = volume_name1; ListOfVol2Name[ind] = volume_name2; AreaOfSurface[ind] = Area; } - else - { + else { ListOfSurfaceName.push_back(SurfaceName); - ListOfSurfaceType.push_back("BoundaryBetweenTwoVolumes"); + ListOfSurfaceType.emplace_back("BoundaryBetweenTwoVolumes"); ListOfSphereRadius.push_back(0.); - ListOfSphereCenter.push_back(G4ThreeVector(0.,0.,0.)); + ListOfSphereCenter.emplace_back(0., 0., 0.); ListOfVol1Name.push_back(volume_name1); ListOfVol2Name.push_back(volume_name2); AreaOfSurface.push_back(Area); @@ -470,9 +385,8 @@ void G4AdjointCrossSurfChecker::ClearListOfSelectedSurface() // G4int G4AdjointCrossSurfChecker::FindRegisteredSurface(const G4String& name) { - for (std::size_t i=0; iGetTrack(); - if(!is_adjoint_tracking_mode) // forward tracking mode + if (! is_adjoint_tracking_mode) // forward tracking mode { - if (!did_one_adj_part_reach_ext_source_during_event) - { + if (! did_one_adj_part_reach_ext_source_during_event) { aTrack->SetTrackStatus(fStopAndKill); return; } - if(theUserFwdSteppingAction) - { + if (theUserFwdSteppingAction != nullptr) { theUserFwdSteppingAction->UserSteppingAction(aStep); } return; @@ -72,29 +65,26 @@ void G4AdjointSteppingAction::UserSteppingAction(const G4Step* aStep) // -------------------------------------------- did_adj_part_reach_ext_source = false; - if (theUserAdjointSteppingAction) - { + if (theUserAdjointSteppingAction != nullptr) { theUserAdjointSteppingAction->UserSteppingAction(aStep); } G4double nb_nuc = 1.; G4ParticleDefinition* thePartDef = aTrack->GetDefinition(); - - if (thePartDef->GetParticleType() == "adjoint_nucleus") - { + + if (thePartDef->GetParticleType() == "adjoint_nucleus") { nb_nuc = G4double(thePartDef->GetBaryonNumber()); } // Kill conditions for adjoint particles reaching the maximum energy // ----------------------------------------------------------------- - if(aTrack->GetKineticEnergy() >= ext_sourceEMax*nb_nuc) - { + if (aTrack->GetKineticEnergy() >= ext_sourceEMax * nb_nuc) { aTrack->SetTrackStatus(fStopAndKill); did_adj_part_reach_ext_source = false; return; } - + // Kill conditions for surface crossing // -------------------------------------- @@ -102,12 +92,10 @@ void G4AdjointSteppingAction::UserSteppingAction(const G4Step* aStep) G4double cos_to_surface; G4bool GoingIn; G4ThreeVector crossing_pos; - if (theG4AdjointCrossSurfChecker - ->CrossingOneOfTheRegisteredSurface(aStep, surface_name, - crossing_pos, cos_to_surface, GoingIn)) + if (theG4AdjointCrossSurfChecker->CrossingOneOfTheRegisteredSurface( + aStep, surface_name, crossing_pos, cos_to_surface, GoingIn)) { - if (surface_name == "ExternalSource") - { + if (surface_name == "ExternalSource") { // Registering still needed did_adj_part_reach_ext_source = true; did_one_adj_part_reach_ext_source_during_event = true; @@ -121,22 +109,20 @@ void G4AdjointSteppingAction::UserSteppingAction(const G4Step* aStep) last_pos = crossing_pos; return; } - else if (surface_name == "AdjointSource" && GoingIn) - { + if (surface_name == "AdjointSource" && GoingIn) { did_adj_part_reach_ext_source = false; aTrack->SetTrackStatus(fStopAndKill); return; - } + } } // Check for reaching out of world // - if (aStep->GetPostStepPoint()->GetStepStatus() == fWorldBoundary) - { + if (aStep->GetPostStepPoint()->GetStepStatus() == fWorldBoundary) { did_adj_part_reach_ext_source = true; did_one_adj_part_reach_ext_source_during_event = true; - last_momentum =aTrack->GetMomentum(); - last_ekin=aTrack->GetKineticEnergy(); + last_momentum = aTrack->GetMomentum(); + last_ekin = aTrack->GetKineticEnergy(); last_weight = aTrack->GetWeight(); last_part_def = aTrack->GetDefinition(); last_pos = crossing_pos; diff --git a/source/tracking/src/G4AdjointTrackingAction.cc b/source/tracking/src/G4AdjointTrackingAction.cc index 871fa671790..1474ff0d1ae 100644 --- a/source/tracking/src/G4AdjointTrackingAction.cc +++ b/source/tracking/src/G4AdjointTrackingAction.cc @@ -31,39 +31,29 @@ // -------------------------------------------------------------------- #include "G4AdjointTrackingAction.hh" + +#include "G4AdjointSteppingAction.hh" #include "G4ParticleTable.hh" #include "G4Track.hh" -#include "G4AdjointSteppingAction.hh" // -------------------------------------------------------------------- // -G4AdjointTrackingAction:: -G4AdjointTrackingAction(G4AdjointSteppingAction* anAction) +G4AdjointTrackingAction::G4AdjointTrackingAction(G4AdjointSteppingAction* anAction) : theAdjointSteppingAction(anAction) -{ -} - -// -------------------------------------------------------------------- -// -G4AdjointTrackingAction::~G4AdjointTrackingAction() -{ -} +{} // -------------------------------------------------------------------- // void G4AdjointTrackingAction::PreUserTrackingAction(const G4Track* aTrack) { G4String partType = aTrack->GetParticleDefinition()->GetParticleType(); - if (G4StrUtil::contains(partType, "adjoint")) - { + if (G4StrUtil::contains(partType, "adjoint")) { is_adjoint_tracking_mode = true; theAdjointSteppingAction->SetPrimWeight(aTrack->GetWeight()); } - else - { + else { is_adjoint_tracking_mode = false; - if (theUserFwdTrackingAction) - { + if (theUserFwdTrackingAction != nullptr) { theUserFwdTrackingAction->PreUserTrackingAction(aTrack); } } @@ -79,40 +69,33 @@ void G4AdjointTrackingAction::PostUserTrackingAction(const G4Track* aTrack) last_weight = theAdjointSteppingAction->GetLastWeight(); last_ekin = theAdjointSteppingAction->GetLastEkin(); - if(!is_adjoint_tracking_mode) - { - if (theUserFwdTrackingAction != nullptr) - { + if (! is_adjoint_tracking_mode) { + if (theUserFwdTrackingAction != nullptr) { theUserFwdTrackingAction->PostUserTrackingAction(aTrack); } } - else if (theAdjointSteppingAction->GetDidAdjParticleReachTheExtSource()) - { + else if (theAdjointSteppingAction->GetDidAdjParticleReachTheExtSource()) { last_pos = theAdjointSteppingAction->GetLastPosition(); last_direction = theAdjointSteppingAction->GetLastMomentum(); - last_direction /=last_direction.mag(); + last_direction /= last_direction.mag(); last_cos_th = last_direction.z(); - G4ParticleDefinition* aPartDef= theAdjointSteppingAction->GetLastPartDef(); - last_fwd_part_name= aPartDef->GetParticleName(); - last_fwd_part_name.erase(0,4); - last_fwd_part_PDGEncoding=G4ParticleTable::GetParticleTable() - ->FindParticle(last_fwd_part_name)->GetPDGEncoding(); + G4ParticleDefinition* aPartDef = theAdjointSteppingAction->GetLastPartDef(); + last_fwd_part_name = aPartDef->GetParticleName(); + last_fwd_part_name.erase(0, 4); + last_fwd_part_PDGEncoding = + G4ParticleTable::GetParticleTable()->FindParticle(last_fwd_part_name)->GetPDGEncoding(); last_ekin = theAdjointSteppingAction->GetLastEkin(); last_ekin_nuc = last_ekin; - if (aPartDef->GetParticleType() == "adjoint_nucleus") - { - G4double nb_nuc = G4double(aPartDef->GetBaryonNumber()); + if (aPartDef->GetParticleType() == "adjoint_nucleus") { + auto nb_nuc = G4double(aPartDef->GetBaryonNumber()); last_ekin_nuc /= nb_nuc; } last_fwd_part_index = -1; std::size_t i = 0; - while(i< pListOfPrimaryFwdParticles->size() && last_fwd_part_index<0) - { - if ((*pListOfPrimaryFwdParticles)[i]->GetParticleName() - == last_fwd_part_name) - { - last_fwd_part_index=(G4int)i; + while (i < pListOfPrimaryFwdParticles->size() && last_fwd_part_index < 0) { + if ((*pListOfPrimaryFwdParticles)[i]->GetParticleName() == last_fwd_part_name) { + last_fwd_part_index = (G4int)i; } ++i; } @@ -128,8 +111,7 @@ void G4AdjointTrackingAction::PostUserTrackingAction(const G4Track* aTrack) last_fwd_part_PDGEncoding_vec.push_back(last_fwd_part_PDGEncoding); last_fwd_part_index_vec.push_back(last_fwd_part_index); } - else - { + else { } } diff --git a/source/tracking/src/G4MultiSteppingAction.cc b/source/tracking/src/G4MultiSteppingAction.cc index 9cf28aeb60a..3f32386a74b 100644 --- a/source/tracking/src/G4MultiSteppingAction.cc +++ b/source/tracking/src/G4MultiSteppingAction.cc @@ -29,18 +29,17 @@ // -------------------------------------------------------------------- #include + #include void G4MultiSteppingAction::UserSteppingAction(const G4Step* step) { - std::for_each( begin(), end(), - [step](G4UserSteppingActionUPtr& e) { e->UserSteppingAction(step); } - ); + std::for_each( + begin(), end(), [step](G4UserSteppingActionUPtr& e) { e->UserSteppingAction(step); }); } void G4MultiSteppingAction::SetSteppingManagerPointer(G4SteppingManager* pVal) { - std::for_each( begin(), end(), - [pVal](G4UserSteppingActionUPtr& e) { e->SetSteppingManagerPointer(pVal); } - ); + std::for_each( + begin(), end(), [pVal](G4UserSteppingActionUPtr& e) { e->SetSteppingManagerPointer(pVal); }); } diff --git a/source/tracking/src/G4MultiTrackingAction.cc b/source/tracking/src/G4MultiTrackingAction.cc index 426487aaf59..8b2ecdcf5ac 100644 --- a/source/tracking/src/G4MultiTrackingAction.cc +++ b/source/tracking/src/G4MultiTrackingAction.cc @@ -29,25 +29,23 @@ // -------------------------------------------------------------------- #include "G4MultiTrackingAction.hh" + #include void G4MultiTrackingAction::SetTrackingManagerPointer(G4TrackingManager* pVal) { - std::for_each( begin(), end(), - [pVal](G4UserTrackingActionUPtr& e) { e->SetTrackingManagerPointer(pVal); } - ); + std::for_each( + begin(), end(), [pVal](G4UserTrackingActionUPtr& e) { e->SetTrackingManagerPointer(pVal); }); } void G4MultiTrackingAction::PreUserTrackingAction(const G4Track* trk) { - std::for_each( begin(), end(), - [trk](G4UserTrackingActionUPtr& e) { e->PreUserTrackingAction(trk); } - ); + std::for_each( + begin(), end(), [trk](G4UserTrackingActionUPtr& e) { e->PreUserTrackingAction(trk); }); } void G4MultiTrackingAction::PostUserTrackingAction(const G4Track* trk) { - std::for_each( begin(), end(), - [trk](G4UserTrackingActionUPtr& e) { e->PostUserTrackingAction(trk); } - ); + std::for_each( + begin(), end(), [trk](G4UserTrackingActionUPtr& e) { e->PostUserTrackingAction(trk); }); } diff --git a/source/tracking/src/G4RichTrajectory.cc b/source/tracking/src/G4RichTrajectory.cc index 25fbf8a0983..b17ab060984 100644 --- a/source/tracking/src/G4RichTrajectory.cc +++ b/source/tracking/src/G4RichTrajectory.cc @@ -37,18 +37,19 @@ // -------------------------------------------------------------------- #include "G4RichTrajectory.hh" -#include "G4RichTrajectoryPoint.hh" -#include "G4AttDefStore.hh" + #include "G4AttDef.hh" +#include "G4AttDefStore.hh" #include "G4AttValue.hh" +#include "G4PhysicsModelCatalog.hh" +#include "G4RichTrajectoryPoint.hh" #include "G4UIcommand.hh" #include "G4UnitsTable.hh" #include "G4VProcess.hh" -#include "G4PhysicsModelCatalog.hh" -//#define G4ATTDEBUG +// #define G4ATTDEBUG #ifdef G4ATTDEBUG -#include "G4AttCheck.hh" +# include "G4AttCheck.hh" #endif #include @@ -59,10 +60,6 @@ G4Allocator*& aRichTrajectoryAllocator() return _instance; } -G4RichTrajectory::G4RichTrajectory() -{ -} - G4RichTrajectory::G4RichTrajectory(const G4Track* aTrack) : G4Trajectory(aTrack) // Note: this initialises the base class data // members and, unfortunately but never mind, @@ -92,8 +89,7 @@ G4RichTrajectory::G4RichTrajectory(const G4Track* aTrack) fpRichPointsContainer->push_back(new G4RichTrajectoryPoint(aTrack)); } -G4RichTrajectory::G4RichTrajectory(G4RichTrajectory& right) - : G4Trajectory(right) +G4RichTrajectory::G4RichTrajectory(G4RichTrajectory& right) : G4Trajectory(right) { fpInitialVolume = right.fpInitialVolume; fpInitialNextVolume = right.fpInitialNextVolume; @@ -104,21 +100,17 @@ G4RichTrajectory::G4RichTrajectory(G4RichTrajectory& right) fpEndingProcess = right.fpEndingProcess; fFinalKineticEnergy = right.fFinalKineticEnergy; fpRichPointsContainer = new RichTrajectoryPointsContainer; - for(std::size_t i=0; isize(); ++i) - { - G4RichTrajectoryPoint* rightPoint = - (G4RichTrajectoryPoint*)((*(right.fpRichPointsContainer))[i]); + for (auto& i : *right.fpRichPointsContainer) { + auto rightPoint = (G4RichTrajectoryPoint*)i; fpRichPointsContainer->push_back(new G4RichTrajectoryPoint(*rightPoint)); } } G4RichTrajectory::~G4RichTrajectory() { - if (fpRichPointsContainer) - { - for(std::size_t i=0; isize(); ++i) - { - delete (*fpRichPointsContainer)[i]; + if (fpRichPointsContainer != nullptr) { + for (auto& i : *fpRichPointsContainer) { + delete i; } fpRichPointsContainer->clear(); delete fpRichPointsContainer; @@ -134,24 +126,22 @@ void G4RichTrajectory::AppendStep(const G4Step* aStep) // const G4Track* track = aStep->GetTrack(); const G4StepPoint* postStepPoint = aStep->GetPostStepPoint(); - if (track->GetCurrentStepNumber() > 0) - { + if (track->GetCurrentStepNumber() > 0) { fpFinalVolume = track->GetTouchableHandle(); fpFinalNextVolume = track->GetNextTouchableHandle(); fpEndingProcess = postStepPoint->GetProcessDefinedStep(); - fFinalKineticEnergy = aStep->GetPreStepPoint()->GetKineticEnergy() - - aStep->GetTotalEnergyDeposit(); + fFinalKineticEnergy = + aStep->GetPreStepPoint()->GetKineticEnergy() - aStep->GetTotalEnergyDeposit(); } } - + void G4RichTrajectory::MergeTrajectory(G4VTrajectory* secondTrajectory) { - if(secondTrajectory == nullptr) return; + if (secondTrajectory == nullptr) return; - G4RichTrajectory* seco = (G4RichTrajectory*)secondTrajectory; + auto seco = (G4RichTrajectory*)secondTrajectory; G4int ent = seco->GetPointEntries(); - for(G4int i=1; ipush_back((*(seco->fpRichPointsContainer))[i]); @@ -178,13 +168,11 @@ void G4RichTrajectory::DrawTrajectory() const // ... or override with your own code here. } -const std::map* G4RichTrajectory::GetAttDefs() const +const std::map* G4RichTrajectory::GetAttDefs() const { G4bool isNew; - std::map* store - = G4AttDefStore::GetInstance("G4RichTrajectory",isNew); - if (isNew) - { + std::map* store = G4AttDefStore::GetInstance("G4RichTrajectory", isNew); + if (isNew) { // Get att defs from base class... // *store = *(G4Trajectory::GetAttDefs()); @@ -192,48 +180,37 @@ const std::map* G4RichTrajectory::GetAttDefs() const G4String ID; ID = "IVPath"; - (*store)[ID] = G4AttDef(ID,"Initial Volume Path", - "Physics","","G4String"); + (*store)[ID] = G4AttDef(ID, "Initial Volume Path", "Physics", "", "G4String"); ID = "INVPath"; - (*store)[ID] = G4AttDef(ID,"Initial Next Volume Path", - "Physics","","G4String"); + (*store)[ID] = G4AttDef(ID, "Initial Next Volume Path", "Physics", "", "G4String"); ID = "CPN"; - (*store)[ID] = G4AttDef(ID,"Creator Process Name", - "Physics","","G4String"); + (*store)[ID] = G4AttDef(ID, "Creator Process Name", "Physics", "", "G4String"); ID = "CPTN"; - (*store)[ID] = G4AttDef(ID,"Creator Process Type Name", - "Physics","","G4String"); - + (*store)[ID] = G4AttDef(ID, "Creator Process Type Name", "Physics", "", "G4String"); + ID = "CMID"; - (*store)[ID] = G4AttDef(ID,"Creator Model ID", - "Physics","","G4int"); + (*store)[ID] = G4AttDef(ID, "Creator Model ID", "Physics", "", "G4int"); ID = "CMN"; - (*store)[ID] = G4AttDef(ID,"Creator Model Name", - "Physics","","G4String"); + (*store)[ID] = G4AttDef(ID, "Creator Model Name", "Physics", "", "G4String"); ID = "FVPath"; - (*store)[ID] = G4AttDef(ID,"Final Volume Path", - "Physics","","G4String"); + (*store)[ID] = G4AttDef(ID, "Final Volume Path", "Physics", "", "G4String"); ID = "FNVPath"; - (*store)[ID] = G4AttDef(ID,"Final Next Volume Path", - "Physics","","G4String"); + (*store)[ID] = G4AttDef(ID, "Final Next Volume Path", "Physics", "", "G4String"); ID = "EPN"; - (*store)[ID] = G4AttDef(ID,"Ending Process Name", - "Physics","","G4String"); + (*store)[ID] = G4AttDef(ID, "Ending Process Name", "Physics", "", "G4String"); ID = "EPTN"; - (*store)[ID] = G4AttDef(ID,"Ending Process Type Name", - "Physics","","G4String"); + (*store)[ID] = G4AttDef(ID, "Ending Process Type Name", "Physics", "", "G4String"); ID = "FKE"; - (*store)[ID] = G4AttDef(ID,"Final kinetic energy", - "Physics","G4BestUnit","G4double"); + (*store)[ID] = G4AttDef(ID, "Final kinetic energy", "Physics", "G4BestUnit", "G4double"); } return store; @@ -243,10 +220,8 @@ static G4String Path(const G4TouchableHandle& th) { std::ostringstream oss; G4int depth = th->GetHistoryDepth(); - for (G4int i = depth; i >= 0; --i) - { - oss << th->GetVolume(i)->GetName() - << ':' << th->GetCopyNumber(i); + for (G4int i = depth; i >= 0; --i) { + oss << th->GetVolume(i)->GetName() << ':' << th->GetCopyNumber(i); if (i != 0) oss << '/'; } return oss.str(); @@ -257,80 +232,63 @@ std::vector* G4RichTrajectory::CreateAttValues() const // Create base class att values... std::vector* values = G4Trajectory::CreateAttValues(); - if (fpInitialVolume && fpInitialVolume->GetVolume()) - { - values->push_back(G4AttValue("IVPath",Path(fpInitialVolume),"")); + if (fpInitialVolume && (fpInitialVolume->GetVolume() != nullptr)) { + values->push_back(G4AttValue("IVPath", Path(fpInitialVolume), "")); } - else - { - values->push_back(G4AttValue("IVPath","None","")); + else { + values->push_back(G4AttValue("IVPath", "None", "")); } - if (fpInitialNextVolume && fpInitialNextVolume->GetVolume()) - { - values->push_back(G4AttValue("INVPath",Path(fpInitialNextVolume),"")); + if (fpInitialNextVolume && (fpInitialNextVolume->GetVolume() != nullptr)) { + values->push_back(G4AttValue("INVPath", Path(fpInitialNextVolume), "")); } - else - { - values->push_back(G4AttValue("INVPath","None","")); + else { + values->push_back(G4AttValue("INVPath", "None", "")); } - if (fpCreatorProcess != nullptr) - { - values->push_back - (G4AttValue("CPN",fpCreatorProcess->GetProcessName(),"")); + if (fpCreatorProcess != nullptr) { + values->push_back(G4AttValue("CPN", fpCreatorProcess->GetProcessName(), "")); G4ProcessType type = fpCreatorProcess->GetProcessType(); - values->push_back - (G4AttValue("CPTN",G4VProcess::GetProcessTypeName(type),"")); - values->push_back - (G4AttValue("CMID",G4UIcommand::ConvertToString(fCreatorModelID),"")); - const G4String& creatorModelName = - G4PhysicsModelCatalog::GetModelNameFromID(fCreatorModelID); - values->push_back(G4AttValue("CMN",creatorModelName,"")); + values->push_back(G4AttValue("CPTN", G4VProcess::GetProcessTypeName(type), "")); + values->push_back(G4AttValue("CMID", G4UIcommand::ConvertToString(fCreatorModelID), "")); + const G4String& creatorModelName = G4PhysicsModelCatalog::GetModelNameFromID(fCreatorModelID); + values->push_back(G4AttValue("CMN", creatorModelName, "")); } - else - { - values->push_back(G4AttValue("CPN","None","")); - values->push_back(G4AttValue("CPTN","None","")); - values->push_back(G4AttValue("CMID","None","")); - values->push_back(G4AttValue("CMN","None","")); + else { + values->push_back(G4AttValue("CPN", "None", "")); + values->push_back(G4AttValue("CPTN", "None", "")); + values->push_back(G4AttValue("CMID", "None", "")); + values->push_back(G4AttValue("CMN", "None", "")); } - if (fpFinalVolume && fpFinalVolume->GetVolume()) - { - values->push_back(G4AttValue("FVPath",Path(fpFinalVolume),"")); + if (fpFinalVolume && (fpFinalVolume->GetVolume() != nullptr)) { + values->push_back(G4AttValue("FVPath", Path(fpFinalVolume), "")); } - else - { - values->push_back(G4AttValue("FVPath","None","")); + else { + values->push_back(G4AttValue("FVPath", "None", "")); } - if (fpFinalNextVolume && fpFinalNextVolume->GetVolume()) - { - values->push_back(G4AttValue("FNVPath",Path(fpFinalNextVolume),"")); + if (fpFinalNextVolume && (fpFinalNextVolume->GetVolume() != nullptr)) { + values->push_back(G4AttValue("FNVPath", Path(fpFinalNextVolume), "")); } - else - { - values->push_back(G4AttValue("FNVPath","None","")); + else { + values->push_back(G4AttValue("FNVPath", "None", "")); } - if (fpEndingProcess != nullptr) - { - values->push_back(G4AttValue("EPN",fpEndingProcess->GetProcessName(),"")); + if (fpEndingProcess != nullptr) { + values->push_back(G4AttValue("EPN", fpEndingProcess->GetProcessName(), "")); G4ProcessType type = fpEndingProcess->GetProcessType(); - values->push_back(G4AttValue("EPTN",G4VProcess::GetProcessTypeName(type),"")); + values->push_back(G4AttValue("EPTN", G4VProcess::GetProcessTypeName(type), "")); } - else - { - values->push_back(G4AttValue("EPN","None","")); - values->push_back(G4AttValue("EPTN","None","")); + else { + values->push_back(G4AttValue("EPN", "None", "")); + values->push_back(G4AttValue("EPTN", "None", "")); } - values->push_back - (G4AttValue("FKE",G4BestUnit(fFinalKineticEnergy,"Energy"),"")); + values->push_back(G4AttValue("FKE", G4BestUnit(fFinalKineticEnergy, "Energy"), "")); #ifdef G4ATTDEBUG - G4cout << G4AttCheck(values,GetAttDefs()); + G4cout << G4AttCheck(values, GetAttDefs()); #endif return values; diff --git a/source/tracking/src/G4RichTrajectoryPoint.cc b/source/tracking/src/G4RichTrajectoryPoint.cc index 627dddb97a6..7f29c4ef4f5 100644 --- a/source/tracking/src/G4RichTrajectoryPoint.cc +++ b/source/tracking/src/G4RichTrajectoryPoint.cc @@ -38,18 +38,17 @@ #include "G4RichTrajectoryPoint.hh" -#include "G4Track.hh" -#include "G4Step.hh" -#include "G4VProcess.hh" - -#include "G4AttDefStore.hh" #include "G4AttDef.hh" +#include "G4AttDefStore.hh" #include "G4AttValue.hh" +#include "G4Step.hh" +#include "G4Track.hh" #include "G4UnitsTable.hh" +#include "G4VProcess.hh" -//#define G4ATTDEBUG +// #define G4ATTDEBUG #ifdef G4ATTDEBUG -#include "G4AttCheck.hh" +# include "G4AttCheck.hh" #endif #include @@ -60,9 +59,7 @@ G4Allocator*& aRichTrajectoryPointAllocator() return _instance; } -G4RichTrajectoryPoint::G4RichTrajectoryPoint() -{ -} +G4RichTrajectoryPoint::G4RichTrajectoryPoint() = default; G4RichTrajectoryPoint::G4RichTrajectoryPoint(const G4Track* aTrack) : G4TrajectoryPoint(aTrack->GetPosition()), @@ -72,8 +69,7 @@ G4RichTrajectoryPoint::G4RichTrajectoryPoint(const G4Track* aTrack) fpPostStepPointVolume(aTrack->GetNextTouchableHandle()), fPreStepPointWeight(aTrack->GetWeight()), fPostStepPointWeight(aTrack->GetWeight()) -{ -} +{} G4RichTrajectoryPoint::G4RichTrajectoryPoint(const G4Step* aStep) : G4TrajectoryPoint(aStep->GetPostStepPoint()->GetPosition()), @@ -86,8 +82,7 @@ G4RichTrajectoryPoint::G4RichTrajectoryPoint(const G4Step* aStep) { fRemainingEnergy = aStep->GetTrack()->GetKineticEnergy(); } - else - { + else { fRemainingEnergy = preStepPoint->GetKineticEnergy() - fTotEDep; } fpProcess = postStepPoint->GetProcessDefinedStep(); @@ -101,79 +96,50 @@ G4RichTrajectoryPoint::G4RichTrajectoryPoint(const G4Step* aStep) fPostStepPointWeight = postStepPoint->GetWeight(); } -G4RichTrajectoryPoint::G4RichTrajectoryPoint( const G4RichTrajectoryPoint &r ) - : G4TrajectoryPoint(r), - fpAuxiliaryPointVector(r.fpAuxiliaryPointVector), - fTotEDep(r.fTotEDep), - fRemainingEnergy(r.fRemainingEnergy), - fpProcess(r.fpProcess), - fPreStepPointStatus(r.fPreStepPointStatus), - fPostStepPointStatus(r.fPostStepPointStatus), - fPreStepPointGlobalTime(r.fPreStepPointGlobalTime), - fPostStepPointGlobalTime(r.fPostStepPointGlobalTime), - fpPreStepPointVolume(r.fpPreStepPointVolume), - fpPostStepPointVolume(r.fpPostStepPointVolume), - fPreStepPointWeight(r.fPreStepPointWeight), - fPostStepPointWeight(r.fPostStepPointWeight) -{ -} +// This is certainly wrong. the fpAuxiliaryPointVector is owned by this class, +// and must be deep copied. Note also the copy-assignment operator is deleted. +// However, G4RichTrajectory requires a copy constructor.... +G4RichTrajectoryPoint::G4RichTrajectoryPoint(const G4RichTrajectoryPoint& r) = default; -G4RichTrajectoryPoint::~G4RichTrajectoryPoint() -{ - delete fpAuxiliaryPointVector; -} +G4RichTrajectoryPoint::~G4RichTrajectoryPoint() { delete fpAuxiliaryPointVector; } -const std::map* G4RichTrajectoryPoint::GetAttDefs() const +const std::map* G4RichTrajectoryPoint::GetAttDefs() const { G4bool isNew; - std::map* store - = G4AttDefStore::GetInstance("G4RichTrajectoryPoint",isNew); - if (isNew) - { + std::map* store = G4AttDefStore::GetInstance("G4RichTrajectoryPoint", isNew); + if (isNew) { // Copy base class att defs... *store = *(G4TrajectoryPoint::GetAttDefs()); G4String ID; ID = "Aux"; - (*store)[ID] = G4AttDef(ID, "Auxiliary Point Position", - "Physics","G4BestUnit","G4ThreeVector"); + (*store)[ID] = + G4AttDef(ID, "Auxiliary Point Position", "Physics", "G4BestUnit", "G4ThreeVector"); ID = "TED"; - (*store)[ID] = G4AttDef(ID,"Total Energy Deposit", - "Physics","G4BestUnit","G4double"); + (*store)[ID] = G4AttDef(ID, "Total Energy Deposit", "Physics", "G4BestUnit", "G4double"); ID = "RE"; - (*store)[ID] = G4AttDef(ID,"Remaining Energy", - "Physics","G4BestUnit","G4double"); + (*store)[ID] = G4AttDef(ID, "Remaining Energy", "Physics", "G4BestUnit", "G4double"); ID = "PDS"; - (*store)[ID] = G4AttDef(ID,"Process Defined Step", - "Physics","","G4String"); + (*store)[ID] = G4AttDef(ID, "Process Defined Step", "Physics", "", "G4String"); ID = "PTDS"; - (*store)[ID] = G4AttDef(ID,"Process Type Defined Step", - "Physics","","G4String"); + (*store)[ID] = G4AttDef(ID, "Process Type Defined Step", "Physics", "", "G4String"); ID = "PreStatus"; - (*store)[ID] = G4AttDef(ID,"Pre-step-point status", - "Physics","","G4String"); + (*store)[ID] = G4AttDef(ID, "Pre-step-point status", "Physics", "", "G4String"); ID = "PostStatus"; - (*store)[ID] = G4AttDef(ID,"Post-step-point status", - "Physics","","G4String"); + (*store)[ID] = G4AttDef(ID, "Post-step-point status", "Physics", "", "G4String"); ID = "PreT"; - (*store)[ID] = G4AttDef(ID,"Pre-step-point global time", - "Physics","G4BestUnit","G4double"); + (*store)[ID] = G4AttDef(ID, "Pre-step-point global time", "Physics", "G4BestUnit", "G4double"); ID = "PostT"; - (*store)[ID] = G4AttDef(ID,"Post-step-point global time", - "Physics","G4BestUnit","G4double"); + (*store)[ID] = G4AttDef(ID, "Post-step-point global time", "Physics", "G4BestUnit", "G4double"); ID = "PreVPath"; - (*store)[ID] = G4AttDef(ID,"Pre-step Volume Path", - "Physics","","G4String"); + (*store)[ID] = G4AttDef(ID, "Pre-step Volume Path", "Physics", "", "G4String"); ID = "PostVPath"; - (*store)[ID] = G4AttDef(ID,"Post-step Volume Path", - "Physics","","G4String"); + (*store)[ID] = G4AttDef(ID, "Post-step Volume Path", "Physics", "", "G4String"); ID = "PreW"; - (*store)[ID] = G4AttDef(ID,"Pre-step-point weight", - "Physics","","G4double"); + (*store)[ID] = G4AttDef(ID, "Pre-step-point weight", "Physics", "", "G4double"); ID = "PostW"; - (*store)[ID] = G4AttDef(ID,"Post-step-point weight", - "Physics","","G4double"); + (*store)[ID] = G4AttDef(ID, "Post-step-point weight", "Physics", "", "G4double"); } return store; } @@ -181,17 +147,34 @@ const std::map* G4RichTrajectoryPoint::GetAttDefs() const static G4String Status(G4StepStatus stps) { G4String status; - switch (stps) - { - case fWorldBoundary: status = "fWorldBoundary"; break; - case fGeomBoundary: status = "fGeomBoundary"; break; - case fAtRestDoItProc: status = "fAtRestDoItProc"; break; - case fAlongStepDoItProc: status = "fAlongStepDoItProc"; break; - case fPostStepDoItProc: status = "fPostStepDoItProc"; break; - case fUserDefinedLimit: status = "fUserDefinedLimit"; break; - case fExclusivelyForcedProc: status = "fExclusivelyForcedProc"; break; - case fUndefined: status = "fUndefined"; break; - default: status = "Not recognised"; break; + switch (stps) { + case fWorldBoundary: + status = "fWorldBoundary"; + break; + case fGeomBoundary: + status = "fGeomBoundary"; + break; + case fAtRestDoItProc: + status = "fAtRestDoItProc"; + break; + case fAlongStepDoItProc: + status = "fAlongStepDoItProc"; + break; + case fPostStepDoItProc: + status = "fPostStepDoItProc"; + break; + case fUserDefinedLimit: + status = "fUserDefinedLimit"; + break; + case fExclusivelyForcedProc: + status = "fExclusivelyForcedProc"; + break; + case fUndefined: + status = "fUndefined"; + break; + default: + status = "Not recognised"; + break; } return status; } @@ -200,10 +183,8 @@ static G4String Path(const G4TouchableHandle& th) { std::ostringstream oss; G4int depth = th->GetHistoryDepth(); - for (G4int i = depth; i >= 0; --i) - { - oss << th->GetVolume(i)->GetName() - << ':' << th->GetCopyNumber(i); + for (G4int i = depth; i >= 0; --i) { + oss << th->GetVolume(i)->GetName() << ':' << th->GetCopyNumber(i); if (i != 0) oss << '/'; } return oss.str(); @@ -215,72 +196,57 @@ std::vector* G4RichTrajectoryPoint::CreateAttValues() const std::vector* values = G4TrajectoryPoint::CreateAttValues(); - if (fpAuxiliaryPointVector != nullptr) - { - for (auto iAux = fpAuxiliaryPointVector->cbegin(); - iAux != fpAuxiliaryPointVector->cend(); ++iAux) - { - values->push_back(G4AttValue("Aux",G4BestUnit(*iAux,"Length"),"")); + if (fpAuxiliaryPointVector != nullptr) { + for (const auto& iAux : *fpAuxiliaryPointVector) { + values->push_back(G4AttValue("Aux", G4BestUnit(iAux, "Length"), "")); } } - values->push_back(G4AttValue("TED",G4BestUnit(fTotEDep,"Energy"),"")); - values->push_back(G4AttValue("RE",G4BestUnit(fRemainingEnergy,"Energy"),"")); + values->push_back(G4AttValue("TED", G4BestUnit(fTotEDep, "Energy"), "")); + values->push_back(G4AttValue("RE", G4BestUnit(fRemainingEnergy, "Energy"), "")); - if (fpProcess != nullptr) - { - values->push_back - (G4AttValue("PDS",fpProcess->GetProcessName(),"")); - values->push_back - (G4AttValue - ("PTDS",G4VProcess::GetProcessTypeName(fpProcess->GetProcessType()),"")); + if (fpProcess != nullptr) { + values->push_back(G4AttValue("PDS", fpProcess->GetProcessName(), "")); + values->push_back( + G4AttValue("PTDS", G4VProcess::GetProcessTypeName(fpProcess->GetProcessType()), "")); } - else - { - values->push_back(G4AttValue("PDS","None","")); - values->push_back(G4AttValue("PTDS","None","")); + else { + values->push_back(G4AttValue("PDS", "None", "")); + values->push_back(G4AttValue("PTDS", "None", "")); } - values->push_back - (G4AttValue("PreStatus",Status(fPreStepPointStatus),"")); + values->push_back(G4AttValue("PreStatus", Status(fPreStepPointStatus), "")); - values->push_back - (G4AttValue("PostStatus",Status(fPostStepPointStatus),"")); + values->push_back(G4AttValue("PostStatus", Status(fPostStepPointStatus), "")); - values->push_back - (G4AttValue("PreT",G4BestUnit(fPreStepPointGlobalTime,"Time"),"")); + values->push_back(G4AttValue("PreT", G4BestUnit(fPreStepPointGlobalTime, "Time"), "")); - values->push_back - (G4AttValue("PostT",G4BestUnit(fPostStepPointGlobalTime,"Time"),"")); + values->push_back(G4AttValue("PostT", G4BestUnit(fPostStepPointGlobalTime, "Time"), "")); - if (fpPreStepPointVolume && fpPreStepPointVolume->GetVolume()) - { - values->push_back(G4AttValue("PreVPath",Path(fpPreStepPointVolume),"")); + if (fpPreStepPointVolume && (fpPreStepPointVolume->GetVolume() != nullptr)) { + values->push_back(G4AttValue("PreVPath", Path(fpPreStepPointVolume), "")); } - else - { - values->push_back(G4AttValue("PreVPath","None","")); + else { + values->push_back(G4AttValue("PreVPath", "None", "")); } - if (fpPostStepPointVolume && fpPostStepPointVolume->GetVolume()) - { - values->push_back(G4AttValue("PostVPath",Path(fpPostStepPointVolume),"")); + if (fpPostStepPointVolume && (fpPostStepPointVolume->GetVolume() != nullptr)) { + values->push_back(G4AttValue("PostVPath", Path(fpPostStepPointVolume), "")); } - else - { - values->push_back(G4AttValue("PostVPath","None","")); + else { + values->push_back(G4AttValue("PostVPath", "None", "")); } std::ostringstream oss1; oss1 << fPreStepPointWeight; - values->push_back(G4AttValue("PreW",oss1.str(),"")); + values->push_back(G4AttValue("PreW", oss1.str(), "")); std::ostringstream oss2; oss2 << fPostStepPointWeight; - values->push_back(G4AttValue("PostW",oss2.str(),"")); + values->push_back(G4AttValue("PostW", oss2.str(), "")); #ifdef G4ATTDEBUG - G4cout << G4AttCheck(values,GetAttDefs()); + G4cout << G4AttCheck(values, GetAttDefs()); #endif return values; diff --git a/source/tracking/src/G4SmoothTrajectory.cc b/source/tracking/src/G4SmoothTrajectory.cc index bf307909f60..dfe18f67fc4 100644 --- a/source/tracking/src/G4SmoothTrajectory.cc +++ b/source/tracking/src/G4SmoothTrajectory.cc @@ -33,17 +33,18 @@ // -------------------------------------------------------------------- #include "G4SmoothTrajectory.hh" -#include "G4SmoothTrajectoryPoint.hh" -#include "G4ParticleTable.hh" -#include "G4AttDefStore.hh" + #include "G4AttDef.hh" +#include "G4AttDefStore.hh" #include "G4AttValue.hh" +#include "G4ParticleTable.hh" +#include "G4SmoothTrajectoryPoint.hh" #include "G4UIcommand.hh" #include "G4UnitsTable.hh" -//#define G4ATTDEBUG +// #define G4ATTDEBUG #ifdef G4ATTDEBUG -#include "G4AttCheck.hh" +# include "G4AttCheck.hh" #endif G4Allocator*& aSmoothTrajectoryAllocator() @@ -52,11 +53,6 @@ G4Allocator*& aSmoothTrajectoryAllocator() return _instance; } -G4SmoothTrajectory::G4SmoothTrajectory() - : initialMomentum( G4ThreeVector() ) -{ -} - G4SmoothTrajectory::G4SmoothTrajectory(const G4Track* aTrack) { G4ParticleDefinition* fpParticleDefinition = aTrack->GetDefinition(); @@ -71,18 +67,15 @@ G4SmoothTrajectory::G4SmoothTrajectory(const G4Track* aTrack) // Following is for the first trajectory point // - positionRecord - ->push_back(new G4SmoothTrajectoryPoint(aTrack->GetPosition())); + positionRecord->push_back(new G4SmoothTrajectoryPoint(aTrack->GetPosition())); // The first point has no auxiliary points, so set the auxiliary // points vector to NULL // - positionRecord - ->push_back(new G4SmoothTrajectoryPoint(aTrack->GetPosition(), nullptr)); + positionRecord->push_back(new G4SmoothTrajectoryPoint(aTrack->GetPosition(), nullptr)); } G4SmoothTrajectory::G4SmoothTrajectory(G4SmoothTrajectory& right) - : G4VTrajectory() { ParticleName = right.ParticleName; PDGCharge = right.PDGCharge; @@ -93,21 +86,17 @@ G4SmoothTrajectory::G4SmoothTrajectory(G4SmoothTrajectory& right) initialMomentum = right.initialMomentum; positionRecord = new G4TrajectoryPointContainer(); - for(std::size_t i=0; isize(); ++i) - { - G4SmoothTrajectoryPoint* rightPoint - = (G4SmoothTrajectoryPoint*)((*(right.positionRecord))[i]); + for (auto& i : *right.positionRecord) { + auto rightPoint = (G4SmoothTrajectoryPoint*)i; positionRecord->push_back(new G4SmoothTrajectoryPoint(*rightPoint)); } } G4SmoothTrajectory::~G4SmoothTrajectory() { - if (positionRecord) - { - for(std::size_t i=0; isize(); ++i) - { - delete (*positionRecord)[i]; + if (positionRecord != nullptr) { + for (auto& i : *positionRecord) { + delete i; } positionRecord->clear(); delete positionRecord; @@ -132,79 +121,66 @@ void G4SmoothTrajectory::DrawTrajectory() const // ... or override with your own code here. } -const std::map* G4SmoothTrajectory::GetAttDefs() const +const std::map* G4SmoothTrajectory::GetAttDefs() const { G4bool isNew; - std::map* store - = G4AttDefStore::GetInstance("G4SmoothTrajectory",isNew); - if (isNew) - { + std::map* store = G4AttDefStore::GetInstance("G4SmoothTrajectory", isNew); + if (isNew) { G4String ID("ID"); - (*store)[ID] = G4AttDef(ID,"Track ID","Physics","","G4int"); + (*store)[ID] = G4AttDef(ID, "Track ID", "Physics", "", "G4int"); G4String PID("PID"); - (*store)[PID] = G4AttDef(PID,"Parent ID","Physics","","G4int"); + (*store)[PID] = G4AttDef(PID, "Parent ID", "Physics", "", "G4int"); G4String PN("PN"); - (*store)[PN] = G4AttDef(PN,"Particle Name","Physics","","G4String"); + (*store)[PN] = G4AttDef(PN, "Particle Name", "Physics", "", "G4String"); G4String Ch("Ch"); - (*store)[Ch] = G4AttDef(Ch,"Charge","Physics","e+","G4double"); + (*store)[Ch] = G4AttDef(Ch, "Charge", "Physics", "e+", "G4double"); G4String PDG("PDG"); - (*store)[PDG] = G4AttDef(PDG,"PDG Encoding","Physics","","G4int"); + (*store)[PDG] = G4AttDef(PDG, "PDG Encoding", "Physics", "", "G4int"); G4String IKE("IKE"); - (*store)[IKE] = G4AttDef(IKE, "Initial kinetic energy", - "Physics","G4BestUnit","G4double"); + (*store)[IKE] = G4AttDef(IKE, "Initial kinetic energy", "Physics", "G4BestUnit", "G4double"); G4String IMom("IMom"); - (*store)[IMom] = G4AttDef(IMom, "Initial momentum", - "Physics","G4BestUnit","G4ThreeVector"); + (*store)[IMom] = G4AttDef(IMom, "Initial momentum", "Physics", "G4BestUnit", "G4ThreeVector"); G4String IMag("IMag"); - (*store)[IMag] = G4AttDef(IMag, "Initial momentum magnitude", - "Physics","G4BestUnit","G4double"); + (*store)[IMag] = + G4AttDef(IMag, "Initial momentum magnitude", "Physics", "G4BestUnit", "G4double"); G4String NTP("NTP"); - (*store)[NTP] = G4AttDef(NTP,"No. of points","Physics","","G4int"); + (*store)[NTP] = G4AttDef(NTP, "No. of points", "Physics", "", "G4int"); } return store; } - std::vector* G4SmoothTrajectory::CreateAttValues() const { - std::vector* values = new std::vector; + auto values = new std::vector; - values->push_back - (G4AttValue("ID",G4UIcommand::ConvertToString(fTrackID),"")); + values->push_back(G4AttValue("ID", G4UIcommand::ConvertToString(fTrackID), "")); - values->push_back - (G4AttValue("PID",G4UIcommand::ConvertToString(fParentID),"")); + values->push_back(G4AttValue("PID", G4UIcommand::ConvertToString(fParentID), "")); - values->push_back(G4AttValue("PN",ParticleName,"")); + values->push_back(G4AttValue("PN", ParticleName, "")); - values->push_back - (G4AttValue("Ch",G4UIcommand::ConvertToString(PDGCharge),"")); + values->push_back(G4AttValue("Ch", G4UIcommand::ConvertToString(PDGCharge), "")); - values->push_back - (G4AttValue("PDG",G4UIcommand::ConvertToString(PDGEncoding),"")); + values->push_back(G4AttValue("PDG", G4UIcommand::ConvertToString(PDGEncoding), "")); - values->push_back - (G4AttValue("IKE",G4BestUnit(initialKineticEnergy,"Energy"),"")); + values->push_back(G4AttValue("IKE", G4BestUnit(initialKineticEnergy, "Energy"), "")); - values->push_back - (G4AttValue("IMom",G4BestUnit(initialMomentum,"Energy"),"")); + values->push_back(G4AttValue("IMom", G4BestUnit(initialMomentum, "Energy"), "")); - values->push_back - (G4AttValue("IMag",G4BestUnit(initialMomentum.mag(),"Energy"),"")); + values->push_back(G4AttValue("IMag", G4BestUnit(initialMomentum.mag(), "Energy"), "")); - values->push_back - (G4AttValue("NTP",G4UIcommand::ConvertToString(GetPointEntries()),"")); + values->push_back(G4AttValue("NTP", G4UIcommand::ConvertToString(GetPointEntries()), "")); #ifdef G4ATTDEBUG - G4cout << G4AttCheck(values,GetAttDefs()); + G4cout << G4AttCheck(values, GetAttDefs()); #endif return values; @@ -212,27 +188,25 @@ std::vector* G4SmoothTrajectory::CreateAttValues() const void G4SmoothTrajectory::AppendStep(const G4Step* aStep) { - positionRecord->push_back( - new G4SmoothTrajectoryPoint(aStep->GetPostStepPoint()->GetPosition(), - aStep->GetPointerToVectorOfAuxiliaryPoints())); + positionRecord->push_back(new G4SmoothTrajectoryPoint( + aStep->GetPostStepPoint()->GetPosition(), aStep->GetPointerToVectorOfAuxiliaryPoints())); } - + G4ParticleDefinition* G4SmoothTrajectory::GetParticleDefinition() { - return (G4ParticleTable::GetParticleTable()->FindParticle(ParticleName)); + return (G4ParticleTable::GetParticleTable()->FindParticle(ParticleName)); } void G4SmoothTrajectory::MergeTrajectory(G4VTrajectory* secondTrajectory) { - if(secondTrajectory == nullptr) return; + if (secondTrajectory == nullptr) return; - G4SmoothTrajectory* seco = (G4SmoothTrajectory*)secondTrajectory; + auto seco = (G4SmoothTrajectory*)secondTrajectory; G4int ent = seco->GetPointEntries(); // initial point of the second trajectory should not be merged // - for(G4int i=1; ipush_back((*(seco->positionRecord))[i]); } delete (*seco->positionRecord)[0]; diff --git a/source/tracking/src/G4SmoothTrajectoryPoint.cc b/source/tracking/src/G4SmoothTrajectoryPoint.cc index e853035bdd1..e800ecc52f1 100644 --- a/source/tracking/src/G4SmoothTrajectoryPoint.cc +++ b/source/tracking/src/G4SmoothTrajectoryPoint.cc @@ -34,14 +34,14 @@ #include "G4SmoothTrajectoryPoint.hh" -#include "G4AttDefStore.hh" #include "G4AttDef.hh" +#include "G4AttDefStore.hh" #include "G4AttValue.hh" #include "G4UnitsTable.hh" -//#define G4ATTDEBUG +// #define G4ATTDEBUG #ifdef G4ATTDEBUG -#include "G4AttCheck.hh" +# include "G4AttCheck.hh" #endif G4Allocator*& aSmoothTrajectoryPointAllocator() @@ -50,72 +50,48 @@ G4Allocator*& aSmoothTrajectoryPointAllocator() return _instance; } -G4SmoothTrajectoryPoint::G4SmoothTrajectoryPoint() -{ - fPosition = G4ThreeVector(0.,0.,0.); -} - -G4SmoothTrajectoryPoint::G4SmoothTrajectoryPoint(G4ThreeVector pos) -{ - fPosition = pos; -} +G4SmoothTrajectoryPoint::G4SmoothTrajectoryPoint(G4ThreeVector pos) { fPosition = pos; } -G4SmoothTrajectoryPoint:: -G4SmoothTrajectoryPoint(G4ThreeVector pos, - std::vector* auxiliaryPoints) +G4SmoothTrajectoryPoint::G4SmoothTrajectoryPoint( + G4ThreeVector pos, std::vector* auxiliaryPoints) : fPosition(pos), fAuxiliaryPointVector(auxiliaryPoints) -{ -} +{} -G4SmoothTrajectoryPoint:: -G4SmoothTrajectoryPoint(const G4SmoothTrajectoryPoint& right) - : G4VTrajectoryPoint(), - fPosition(right.fPosition), - fAuxiliaryPointVector(right.fAuxiliaryPointVector) -{ -} - -G4SmoothTrajectoryPoint::~G4SmoothTrajectoryPoint() -{ - delete fAuxiliaryPointVector; -} +G4SmoothTrajectoryPoint::G4SmoothTrajectoryPoint(const G4SmoothTrajectoryPoint& right) + : fPosition(right.fPosition), fAuxiliaryPointVector(right.fAuxiliaryPointVector) +{} +G4SmoothTrajectoryPoint::~G4SmoothTrajectoryPoint() { delete fAuxiliaryPointVector; } -const std::map* -G4SmoothTrajectoryPoint::GetAttDefs() const +const std::map* G4SmoothTrajectoryPoint::GetAttDefs() const { G4bool isNew; - std::map* store - = G4AttDefStore::GetInstance("G4SmoothTrajectoryPoint",isNew); - if (isNew) - { + std::map* store = + G4AttDefStore::GetInstance("G4SmoothTrajectoryPoint", isNew); + if (isNew) { G4String Pos("Pos"); - (*store)[Pos] = G4AttDef(Pos, "Step Position", - "Physics","G4BestUnit","G4ThreeVector"); + (*store)[Pos] = G4AttDef(Pos, "Step Position", "Physics", "G4BestUnit", "G4ThreeVector"); G4String Aux("Aux"); - (*store)[Aux] = G4AttDef(Aux, "Auxiliary Point Position", - "Physics","G4BestUnit","G4ThreeVector"); + (*store)[Aux] = + G4AttDef(Aux, "Auxiliary Point Position", "Physics", "G4BestUnit", "G4ThreeVector"); } return store; } std::vector* G4SmoothTrajectoryPoint::CreateAttValues() const { - std::vector* values = new std::vector; + auto values = new std::vector; - if (fAuxiliaryPointVector != nullptr) - { - for (auto iAux = fAuxiliaryPointVector->cbegin(); - iAux != fAuxiliaryPointVector->cend(); ++iAux) - { - values->push_back(G4AttValue("Aux",G4BestUnit(*iAux,"Length"),"")); + if (fAuxiliaryPointVector != nullptr) { + for (const auto& iAux : *fAuxiliaryPointVector) { + values->push_back(G4AttValue("Aux", G4BestUnit(iAux, "Length"), "")); } } - values->push_back(G4AttValue("Pos", G4BestUnit(fPosition,"Length"),"")); + values->push_back(G4AttValue("Pos", G4BestUnit(fPosition, "Length"), "")); #ifdef G4ATTDEBUG - G4cout << G4AttCheck(values,GetAttDefs()); + G4cout << G4AttCheck(values, GetAttDefs()); #endif return values; diff --git a/source/tracking/src/G4SteppingManager.cc b/source/tracking/src/G4SteppingManager.cc index 848fda7b71a..da6c12247e3 100644 --- a/source/tracking/src/G4SteppingManager.cc +++ b/source/tracking/src/G4SteppingManager.cc @@ -32,19 +32,20 @@ // -------------------------------------------------------------------- #include "G4SteppingManager.hh" -#include "G4SteppingVerbose.hh" -#include "G4SteppingVerboseWithUnits.hh" -#include "G4UImanager.hh" + #include "G4ForceCondition.hh" #include "G4GPILSelection.hh" -#include "G4SteppingControl.hh" -#include "G4TransportationManager.hh" -#include "G4UserLimits.hh" -#include "G4VSensitiveDetector.hh" // Include from 'hits/digi' #include "G4GeometryTolerance.hh" #include "G4ParticleTable.hh" #include "G4Profiler.hh" +#include "G4SteppingControl.hh" +#include "G4SteppingVerbose.hh" +#include "G4SteppingVerboseWithUnits.hh" #include "G4TiMemory.hh" +#include "G4TransportationManager.hh" +#include "G4UImanager.hh" +#include "G4UserLimits.hh" +#include "G4VSensitiveDetector.hh" // Include from 'hits/digi' // #define debug @@ -56,55 +57,51 @@ G4SteppingManager::G4SteppingManager() fStep = new G4Step(); fSecondary = fStep->NewSecondaryVector(); - fPreStepPoint = fStep->GetPreStepPoint(); + fPreStepPoint = fStep->GetPreStepPoint(); fPostStepPoint = fStep->GetPostStepPoint(); #ifdef G4VERBOSE fVerbose = G4VSteppingVerbose::GetInstance(); - if(fVerbose==nullptr) - { - if(G4VSteppingVerbose::GetMasterInstance()==nullptr) - { + if (fVerbose == nullptr) { + if (G4VSteppingVerbose::GetMasterInstance() == nullptr) { G4int prec = G4SteppingVerbose::BestUnitPrecision(); - if(prec > 0) - { fVerbose = new G4SteppingVerboseWithUnits(prec); } - else - { fVerbose = new G4SteppingVerbose(); } + if (prec > 0) { + fVerbose = new G4SteppingVerboseWithUnits(prec); + } + else { + fVerbose = new G4SteppingVerbose(); + } + } + else { + fVerbose = G4VSteppingVerbose::GetMasterInstance()->Clone(); } - else - { fVerbose = G4VSteppingVerbose::GetMasterInstance()->Clone(); } KillVerbose = true; } - else - { KillVerbose = false; } - fVerbose -> SetManager(this); + else { + KillVerbose = false; + } + fVerbose->SetManager(this); #endif - SetNavigator(G4TransportationManager::GetTransportationManager() - ->GetNavigatorForTracking()); + SetNavigator(G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking()); - fSelectedAtRestDoItVector - = new G4SelectedAtRestDoItVector(SizeOfSelectedDoItVector,0); - fSelectedAlongStepDoItVector - = new G4SelectedAlongStepDoItVector(SizeOfSelectedDoItVector,0); - fSelectedPostStepDoItVector - = new G4SelectedPostStepDoItVector(SizeOfSelectedDoItVector,0); + fSelectedAtRestDoItVector = new G4SelectedAtRestDoItVector(SizeOfSelectedDoItVector, 0); + fSelectedAlongStepDoItVector = new G4SelectedAlongStepDoItVector(SizeOfSelectedDoItVector, 0); + fSelectedPostStepDoItVector = new G4SelectedPostStepDoItVector(SizeOfSelectedDoItVector, 0); - SetNavigator(G4TransportationManager::GetTransportationManager() - ->GetNavigatorForTracking()); + SetNavigator(G4TransportationManager::GetTransportationManager()->GetNavigatorForTracking()); - physIntLength = DBL_MAX; - kCarTolerance = 0.5*G4GeometryTolerance::GetInstance() - ->GetSurfaceTolerance(); + physIntLength = DBL_MAX; + kCarTolerance = 0.5 * G4GeometryTolerance::GetInstance()->GetSurfaceTolerance(); - fNoProcess = new G4NoProcess; + fNoProcess = new G4NoProcess; } /////////////////////////////////////// G4SteppingManager::~G4SteppingManager() /////////////////////////////////////// { - fTouchableHandle = 0; + fTouchableHandle = nullptr; // Destruct simple 'has-a' objects // @@ -116,9 +113,9 @@ G4SteppingManager::~G4SteppingManager() delete fSelectedAlongStepDoItVector; delete fSelectedPostStepDoItVector; delete fUserSteppingAction; - #ifdef G4VERBOSE - if(KillVerbose) delete fVerbose; - #endif +#ifdef G4VERBOSE + if (KillVerbose) delete fVerbose; +#endif } ////////////////////////////////////////// @@ -126,26 +123,23 @@ G4StepStatus G4SteppingManager::Stepping() ////////////////////////////////////////// { #ifdef GEANT4_USE_TIMEMORY - ProfilerConfig profiler{ fStep }; + ProfilerConfig profiler{fStep}; #endif - //-------- - // Prelude - //-------- - #ifdef G4VERBOSE - if(verboseLevel>0) - { - fVerbose->NewStep(); - } - else if (verboseLevel==-1) - { - G4VSteppingVerbose::SetSilent(1); - } - else - { - G4VSteppingVerbose::SetSilent(0); - } - #endif +//-------- +// Prelude +//-------- +#ifdef G4VERBOSE + if (verboseLevel > 0) { + fVerbose->NewStep(); + } + else if (verboseLevel == -1) { + G4VSteppingVerbose::SetSilent(1); + } + else { + G4VSteppingVerbose::SetSilent(0); + } +#endif // Store last PostStepPoint to PreStepPoint, and swap current and nex // volume information of G4Track. Reset total energy deposit in one Step. @@ -175,42 +169,38 @@ G4StepStatus G4SteppingManager::Stepping() // AtRest Processes //----------------- - if( fTrack->GetTrackStatus() == fStopButAlive ) - { - if( MAXofAtRestLoops>0 ) - { + if (fTrack->GetTrackStatus() == fStopButAlive) { + if (MAXofAtRestLoops > 0) { InvokeAtRestDoItProcs(); fStepStatus = fAtRestDoItProc; - fStep->GetPostStepPoint()->SetStepStatus( fStepStatus ); - - #ifdef G4VERBOSE - if(verboseLevel>0) fVerbose->AtRestDoItInvoked(); - #endif - - } - // Make sure the track is killed - // - fTrack->SetTrackStatus( fStopAndKill ); + fStep->GetPostStepPoint()->SetStepStatus(fStepStatus); + +#ifdef G4VERBOSE + if (verboseLevel > 0) fVerbose->AtRestDoItInvoked(); +#endif + } + // Make sure the track is killed + // + fTrack->SetTrackStatus(fStopAndKill); } //--------------------------------- // AlongStep and PostStep Processes //--------------------------------- - else - { + else { // Find minimum Step length demanded by active disc./cont. processes DefinePhysicalStepLength(); // Store the Step length (geometrical length) to G4Step and G4Track - fStep->SetStepLength( PhysicalStep ); - fTrack->SetStepLength( PhysicalStep ); + fStep->SetStepLength(PhysicalStep); + fTrack->SetStepLength(PhysicalStep); G4double GeomStepLength = PhysicalStep; // Store StepStatus to PostStepPoint - fStep->GetPostStepPoint()->SetStepStatus( fStepStatus ); + fStep->GetPostStepPoint()->SetStepStatus(fStepStatus); - // Invoke AlongStepDoIt + // Invoke AlongStepDoIt InvokeAlongStepDoItProcs(); // Get StepStatus from PostStepPoint - a process such as transportation @@ -221,22 +211,22 @@ G4StepStatus G4SteppingManager::Stepping() fStep->UpdateTrack(); // Update safety after invocation of all AlongStepDoIts - endpointSafOrigin= fPostStepPoint->GetPosition(); + endpointSafOrigin = fPostStepPoint->GetPosition(); // endpointSafety= std::max( proposedSafety - GeomStepLength, 0.); - endpointSafety= std::max( proposedSafety - GeomStepLength, kCarTolerance); + endpointSafety = std::max(proposedSafety - GeomStepLength, kCarTolerance); - fStep->GetPostStepPoint()->SetSafety( endpointSafety ); + fStep->GetPostStepPoint()->SetSafety(endpointSafety); - #ifdef G4VERBOSE - if(verboseLevel>0) fVerbose->AlongStepDoItAllDone(); - #endif +#ifdef G4VERBOSE + if (verboseLevel > 0) fVerbose->AlongStepDoItAllDone(); +#endif // Invoke PostStepDoIt InvokePostStepDoItProcs(); - #ifdef G4VERBOSE - if(verboseLevel>0) fVerbose->PostStepDoItAllDone(); - #endif +#ifdef G4VERBOSE + if (verboseLevel > 0) fVerbose->PostStepDoItAllDone(); +#endif } //------- @@ -249,35 +239,31 @@ G4StepStatus G4SteppingManager::Stepping() fPreviousStepSize = fStep->GetStepLength(); fStep->SetTrack(fTrack); - #ifdef G4VERBOSE - if(verboseLevel>0) fVerbose->StepInfo(); - #endif +#ifdef G4VERBOSE + if (verboseLevel > 0) fVerbose->StepInfo(); +#endif // Send G4Step information to Hit/Dig if the volume is sensitive // fCurrentVolume = fStep->GetPreStepPoint()->GetPhysicalVolume(); - StepControlFlag = fStep->GetControlFlag(); - if( fCurrentVolume != nullptr && StepControlFlag != AvoidHitInvocation ) - { + StepControlFlag = fStep->GetControlFlag(); + if (fCurrentVolume != nullptr && StepControlFlag != AvoidHitInvocation) { fSensitive = fStep->GetPreStepPoint()->GetSensitiveDetector(); - if( fSensitive != 0 ) - { + if (fSensitive != nullptr) { fSensitive->Hit(fStep); } } // User intervention process // - if( fUserSteppingAction != nullptr ) - { + if (fUserSteppingAction != nullptr) { fUserSteppingAction->UserSteppingAction(fStep); } G4UserSteppingAction* regionalAction = fCurrentVolume->GetLogicalVolume()->GetRegion()->GetRegionalSteppingAction(); - if(regionalAction) - regionalAction->UserSteppingAction(fStep); + if (regionalAction != nullptr) regionalAction->UserSteppingAction(fStep); // Stepping process finish. Return the value of the StepStatus // @@ -312,63 +298,52 @@ void G4SteppingManager::SetInitialStep(G4Track* valueTrack) // If the primary track has 'Suspend' or 'PostponeToNextEvent' state, // set the track state to 'Alive' // - if ( (fTrack->GetTrackStatus()==fSuspend) - || (fTrack->GetTrackStatus()==fPostponeToNextEvent) ) - { + if ((fTrack->GetTrackStatus() == fSuspend) || (fTrack->GetTrackStatus() == fPostponeToNextEvent)) + { fTrack->SetTrackStatus(fAlive); } // If the primary track has 'zero' kinetic energy, set the track // state to 'StopButAlive' // - if(fTrack->GetKineticEnergy() <= 0.0) - { - fTrack->SetTrackStatus( fStopButAlive ); + if (fTrack->GetKineticEnergy() <= 0.0) { + fTrack->SetTrackStatus(fStopButAlive); } // Set Touchable to track and a private attribute of G4SteppingManager - - if ( ! fTrack->GetTouchableHandle() ) - { - G4ThreeVector direction= fTrack->GetMomentumDirection(); - fNavigator->LocateGlobalPointAndSetup( fTrack->GetPosition(), - &direction, false, false ); + + if (! fTrack->GetTouchableHandle()) { + G4ThreeVector direction = fTrack->GetMomentumDirection(); + fNavigator->LocateGlobalPointAndSetup(fTrack->GetPosition(), &direction, false, false); fTouchableHandle = fNavigator->CreateTouchableHistory(); - fTrack->SetTouchableHandle( fTouchableHandle ); - fTrack->SetNextTouchableHandle( fTouchableHandle ); + fTrack->SetTouchableHandle(fTouchableHandle); + fTrack->SetNextTouchableHandle(fTouchableHandle); } - else - { - fTrack->SetNextTouchableHandle( fTouchableHandle = fTrack->GetTouchableHandle() ); + else { + fTrack->SetNextTouchableHandle(fTouchableHandle = fTrack->GetTouchableHandle()); G4VPhysicalVolume* oldTopVolume = fTrack->GetTouchableHandle()->GetVolume(); - G4VPhysicalVolume* newTopVolume = - fNavigator->ResetHierarchyAndLocate( fTrack->GetPosition(), - fTrack->GetMomentumDirection(), - *((G4TouchableHistory*)fTrack->GetTouchableHandle()()) ); - if ( newTopVolume != oldTopVolume - || oldTopVolume->GetRegularStructureId() == 1 ) - { + G4VPhysicalVolume* newTopVolume = fNavigator->ResetHierarchyAndLocate(fTrack->GetPosition(), + fTrack->GetMomentumDirection(), *((G4TouchableHistory*)fTrack->GetTouchableHandle()())); + if (newTopVolume != oldTopVolume || oldTopVolume->GetRegularStructureId() == 1) { fTouchableHandle = fNavigator->CreateTouchableHistory(); - fTrack->SetTouchableHandle( fTouchableHandle ); - fTrack->SetNextTouchableHandle( fTouchableHandle ); + fTrack->SetTouchableHandle(fTouchableHandle); + fTrack->SetNextTouchableHandle(fTouchableHandle); } } // Set OriginTouchableHandle for primary track // - if(fTrack->GetParentID()==0) - { + if (fTrack->GetParentID() == 0) { fTrack->SetOriginTouchableHandle(fTrack->GetTouchableHandle()); } // Set vertex information of G4Track at here // - if ( fTrack->GetCurrentStepNumber() == 0 ) - { - fTrack->SetVertexPosition( fTrack->GetPosition() ); - fTrack->SetVertexMomentumDirection( fTrack->GetMomentumDirection() ); - fTrack->SetVertexKineticEnergy( fTrack->GetKineticEnergy() ); - fTrack->SetLogicalVolumeAtVertex( fTrack->GetVolume()->GetLogicalVolume() ); + if (fTrack->GetCurrentStepNumber() == 0) { + fTrack->SetVertexPosition(fTrack->GetPosition()); + fTrack->SetVertexMomentumDirection(fTrack->GetMomentumDirection()); + fTrack->SetVertexKineticEnergy(fTrack->GetKineticEnergy()); + fTrack->SetLogicalVolumeAtVertex(fTrack->GetVolume()->GetLogicalVolume()); } // Initial set up for attributes of 'G4SteppingManager' @@ -376,66 +351,59 @@ void G4SteppingManager::SetInitialStep(G4Track* valueTrack) // If track is already outside the world boundary, kill it // - if( fCurrentVolume==nullptr ) - { + if (fCurrentVolume == nullptr) { // If the track is a primary, stop processing - if(fTrack->GetParentID()==0) - { + if (fTrack->GetParentID() == 0) { G4cerr << "ERROR - G4SteppingManager::SetInitialStep()" << G4endl - << " Primary particle starting at - " - << fTrack->GetPosition() + << " Primary particle starting at - " << fTrack->GetPosition() << " - is outside of the world volume." << G4endl; - G4Exception("G4SteppingManager::SetInitialStep()", "Tracking0010", - FatalException, "Primary vertex outside of the world!"); + G4Exception("G4SteppingManager::SetInitialStep()", "Tracking0010", FatalException, + "Primary vertex outside of the world!"); } - fTrack->SetTrackStatus( fStopAndKill ); + fTrack->SetTrackStatus(fStopAndKill); G4cout << "WARNING - G4SteppingManager::SetInitialStep()" << G4endl - << " Initial track position is outside world! - " - << fTrack->GetPosition() << G4endl; - } - else - { - // Initial set up for attributes of 'Step' - fStep->InitializeStep( fTrack ); - } - - #ifdef G4VERBOSE - if(verboseLevel>0) fVerbose->TrackingStarted(); - #endif + << " Initial track position is outside world! - " << fTrack->GetPosition() + << G4endl; + } + else { + // Initial set up for attributes of 'Step' + fStep->InitializeStep(fTrack); + } + +#ifdef G4VERBOSE + if (verboseLevel > 0) fVerbose->TrackingStarted(); +#endif } ///////////////////////////////////////////////// void G4SteppingManager::GetProcessNumber() ///////////////////////////////////////////////// { - #ifdef debug - G4cout << "G4SteppingManager::GetProcessNumber: is called track=" - << fTrack << G4endl; - #endif +#ifdef debug + G4cout << "G4SteppingManager::GetProcessNumber: is called track=" << fTrack << G4endl; +#endif - G4ProcessManager* pm= fTrack->GetDefinition()->GetProcessManager(); - if(pm == nullptr) - { + G4ProcessManager* pm = fTrack->GetDefinition()->GetProcessManager(); + if (pm == nullptr) { G4cerr << "ERROR - G4SteppingManager::GetProcessNumber()" << G4endl << " ProcessManager is NULL for particle = " - << fTrack->GetDefinition()->GetParticleName() << ", PDG_code = " - << fTrack->GetDefinition()->GetPDGEncoding() << G4endl; - G4Exception("G4SteppingManager::GetProcessNumber()", "Tracking0011", - FatalException, "Process Manager is not found."); + << fTrack->GetDefinition()->GetParticleName() + << ", PDG_code = " << fTrack->GetDefinition()->GetPDGEncoding() << G4endl; + G4Exception("G4SteppingManager::GetProcessNumber()", "Tracking0011", FatalException, + "Process Manager is not found."); return; } // AtRestDoits // - MAXofAtRestLoops = pm->GetAtRestProcessVector()->entries(); - fAtRestDoItVector = pm->GetAtRestProcessVector(typeDoIt); + MAXofAtRestLoops = pm->GetAtRestProcessVector()->entries(); + fAtRestDoItVector = pm->GetAtRestProcessVector(typeDoIt); fAtRestGetPhysIntVector = pm->GetAtRestProcessVector(typeGPIL); - #ifdef debug - G4cout << "G4SteppingManager::GetProcessNumber: #ofAtRest=" - << MAXofAtRestLoops << G4endl; - #endif +#ifdef debug + G4cout << "G4SteppingManager::GetProcessNumber: #ofAtRest=" << MAXofAtRestLoops << G4endl; +#endif // AlongStepDoits // @@ -443,10 +411,9 @@ void G4SteppingManager::GetProcessNumber() fAlongStepDoItVector = pm->GetAlongStepProcessVector(typeDoIt); fAlongStepGetPhysIntVector = pm->GetAlongStepProcessVector(typeGPIL); - #ifdef debug - G4cout << "G4SteppingManager::GetProcessNumber:#ofAlongStp=" - << MAXofAlongStepLoops << G4endl; - #endif +#ifdef debug + G4cout << "G4SteppingManager::GetProcessNumber:#ofAlongStp=" << MAXofAlongStepLoops << G4endl; +#endif // PostStepDoits // @@ -454,24 +421,21 @@ void G4SteppingManager::GetProcessNumber() fPostStepDoItVector = pm->GetPostStepProcessVector(typeDoIt); fPostStepGetPhysIntVector = pm->GetPostStepProcessVector(typeGPIL); - #ifdef debug - G4cout << "G4SteppingManager::GetProcessNumber: #ofPostStep=" - << MAXofPostStepLoops << G4endl; - #endif +#ifdef debug + G4cout << "G4SteppingManager::GetProcessNumber: #ofPostStep=" << MAXofPostStepLoops << G4endl; +#endif - if (SizeOfSelectedDoItVector0) fVerbose->DPSLStarted(); - #endif +#ifdef G4VERBOSE + if (verboseLevel > 0) fVerbose->DPSLStarted(); +#endif // GPIL for PostStep // fPostStepDoItProcTriggered = MAXofPostStepLoops; - for(std::size_t np=0; npPostStepGPIL( *fTrack, - fPreviousStepSize, &fCondition ); - #ifdef G4VERBOSE - if(verboseLevel>0) fVerbose->DPSLPostStep(); - #endif + physIntLength = fCurrentProcess->PostStepGPIL(*fTrack, fPreviousStepSize, &fCondition); +#ifdef G4VERBOSE + if (verboseLevel > 0) fVerbose->DPSLPostStep(); +#endif - switch (fCondition) - { + switch (fCondition) { case ExclusivelyForced: (*fSelectedPostStepDoItVector)[np] = ExclusivelyForced; fStepStatus = fExclusivelyForcedProc; @@ -522,9 +482,8 @@ void G4SteppingManager::DefinePhysicalStepLength() break; case Conditionally: // (*fSelectedPostStepDoItVector)[np] = Conditionally; - G4Exception("G4SteppingManager::DefinePhysicalStepLength()", - "Tracking1001", FatalException, - "This feature no more supported"); + G4Exception("G4SteppingManager::DefinePhysicalStepLength()", "Tracking1001", FatalException, + "This feature no more supported"); break; case Forced: (*fSelectedPostStepDoItVector)[np] = Forced; @@ -537,30 +496,23 @@ void G4SteppingManager::DefinePhysicalStepLength() break; } - if (fCondition==ExclusivelyForced) - { - for(std::size_t nrest=np+1; nrestGetPostStepPoint()->SetProcessDefinedStep(fCurrentProcess); + if (fCondition == ExclusivelyForced) { + for (std::size_t nrest = np + 1; nrest < MAXofPostStepLoops; ++nrest) { + (*fSelectedPostStepDoItVector)[nrest] = InActivated; } + return; // Take note the 'return' at here !!! + } + + if (physIntLength < PhysicalStep) { + PhysicalStep = physIntLength; + fStepStatus = fPostStepDoItProc; + fPostStepDoItProcTriggered = G4int(np); + fStep->GetPostStepPoint()->SetProcessDefinedStep(fCurrentProcess); } } - if (fPostStepDoItProcTriggeredAlongStepGPIL( *fTrack, - fPreviousStepSize, PhysicalStep, - safetyProposedToAndByProcess, - &fGPILSelection ); - #ifdef G4VERBOSE - if(verboseLevel>0) fVerbose->DPSLAlongStep(); - #endif - - if(physIntLength < PhysicalStep) - { + // NULL means the process is inactivated by a user on fly + + physIntLength = fCurrentProcess->AlongStepGPIL( + *fTrack, fPreviousStepSize, PhysicalStep, safetyProposedToAndByProcess, &fGPILSelection); +#ifdef G4VERBOSE + if (verboseLevel > 0) fVerbose->DPSLAlongStep(); +#endif + + if (physIntLength < PhysicalStep) { PhysicalStep = physIntLength; // Check if the process wants to be the GPIL winner. For example, // multi-scattering proposes Step limit, but won't be the winner // - if(fGPILSelection==CandidateForSelection) - { + if (fGPILSelection == CandidateForSelection) { fStepStatus = fAlongStepDoItProc; fStep->GetPostStepPoint()->SetProcessDefinedStep(fCurrentProcess); } - else if(fCurrentProcess->GetProcessType()==fParallel) - { // a parallel world is proposing the shortest but expecting Transportation + else if (fCurrentProcess->GetProcessType() == fParallel) + { // a parallel world is proposing the shortest but expecting Transportation // to win. delegateToTransportation = true; } // Transportation is assumed to be the last process in the vector // Transportation is winning - if(kp == MAXofAlongStepLoops-1) - { + if (kp == MAXofAlongStepLoops - 1) { // This used to set fStepStatus = fGeomBoundary, but it was moved to // G4Transportation::AlongStepDoIt where the process can actually // decide if there is a volume boundary. @@ -614,24 +560,21 @@ void G4SteppingManager::DefinePhysicalStepLength() } } - // Make sure to check the safety, even if Step is not limited + // Make sure to check the safety, even if Step is not limited // by this process - // - if (safetyProposedToAndByProcess < proposedSafety) - { + // + if (safetyProposedToAndByProcess < proposedSafety) { // proposedSafety keeps the smallest value // proposedSafety = safetyProposedToAndByProcess; } - else - { + else { // safetyProposedToAndByProcess always proposes a valid safety // safetyProposedToAndByProcess = proposedSafety; } - } - if(delegateToTransportation) - { + } + if (delegateToTransportation) { fStepStatus = fGeomBoundary; fStep->GetPostStepPoint()->SetProcessDefinedStep(fCurrentProcess); } @@ -642,12 +585,11 @@ G4int G4SteppingManager::ProcessSecondariesFromParticleChange() ////////////////////////////////////////////////////// { G4Track* tempSecondaryTrack; - G4int num2ndaries; - G4int pushedSecondaries = 0; + G4int num2ndaries; + G4int pushedSecondaries = 0; num2ndaries = fParticleChange->GetNumberOfSecondaries(); - if(num2ndaries == 0) - { + if (num2ndaries == 0) { return 0; } @@ -655,51 +597,43 @@ G4int G4SteppingManager::ProcessSecondariesFromParticleChange() // "combined" process such as G4GammaGeneralProcess. const G4VProcess* creatorProcess = fCurrentProcess->GetCreatorProcess(); - for(G4int DSecLoop=0; DSecLoop< num2ndaries; ++DSecLoop) - { + for (G4int DSecLoop = 0; DSecLoop < num2ndaries; ++DSecLoop) { tempSecondaryTrack = fParticleChange->GetSecondary(DSecLoop); // Set parentID - tempSecondaryTrack->SetParentID( fTrack->GetTrackID() ); + tempSecondaryTrack->SetParentID(fTrack->GetTrackID()); // Set the process pointer which created this track - tempSecondaryTrack->SetCreatorProcess( creatorProcess ); + tempSecondaryTrack->SetCreatorProcess(creatorProcess); // If this 2ndry particle has 'zero' kinetic energy, make sure // it invokes a rest process at the beginning of the tracking // - if(tempSecondaryTrack->GetKineticEnergy() <= DBL_MIN) - { - G4ProcessManager* pm = tempSecondaryTrack->GetDefinition() - ->GetProcessManager(); - if(pm == nullptr) - { + if (tempSecondaryTrack->GetKineticEnergy() <= DBL_MIN) { + G4ProcessManager* pm = tempSecondaryTrack->GetDefinition()->GetProcessManager(); + if (pm == nullptr) { G4ExceptionDescription ED; ED << "A track without proper process manager is pushed\n" << "into the track stack.\n" - << " Particle name : " - << tempSecondaryTrack->GetDefinition()->GetParticleName() + << " Particle name : " << tempSecondaryTrack->GetDefinition()->GetParticleName() << " -- created by " << creatorProcess->GetProcessName() << "."; - G4Exception("G4SteppingManager::ProcessSecondariesFromParticleChange()", - "Tracking10051", FatalException, ED); + G4Exception("G4SteppingManager::ProcessSecondariesFromParticleChange()", "Tracking10051", + FatalException, ED); } - if (pm->GetAtRestProcessVector()->entries()>0) - { - tempSecondaryTrack->SetTrackStatus( fStopButAlive ); - fSecondary->push_back( tempSecondaryTrack ); + if (pm->GetAtRestProcessVector()->entries() > 0) { + tempSecondaryTrack->SetTrackStatus(fStopButAlive); + fSecondary->push_back(tempSecondaryTrack); ++pushedSecondaries; } - else - { + else { delete tempSecondaryTrack; } } - else - { - fSecondary->push_back( tempSecondaryTrack ); + else { + fSecondary->push_back(tempSecondaryTrack); ++pushedSecondaries; } - } //end of loop on secondary + } // end of loop on secondary return pushedSecondaries; } @@ -717,26 +651,21 @@ void G4SteppingManager::InvokeAtRestDoItProcs() fAtRestDoItProcTriggered = 0; shortestLifeTime = DBL_MAX; - for( std::size_t ri=0 ; ri < MAXofAtRestLoops ; ++ri ) - { + for (std::size_t ri = 0; ri < MAXofAtRestLoops; ++ri) { fCurrentProcess = (*fAtRestGetPhysIntVector)[(G4int)ri]; - if (fCurrentProcess == nullptr) - { + if (fCurrentProcess == nullptr) { (*fSelectedAtRestDoItVector)[ri] = InActivated; continue; - } // nullptr means the process is inactivated by a user on fly + } // nullptr means the process is inactivated by a user on fly - lifeTime = fCurrentProcess->AtRestGPIL( *fTrack, &fCondition ); + lifeTime = fCurrentProcess->AtRestGPIL(*fTrack, &fCondition); - if(fCondition == Forced) - { + if (fCondition == Forced) { (*fSelectedAtRestDoItVector)[ri] = Forced; } - else - { + else { (*fSelectedAtRestDoItVector)[ri] = InActivated; - if(lifeTime < shortestLifeTime ) - { + if (lifeTime < shortestLifeTime) { shortestLifeTime = lifeTime; fAtRestDoItProcTriggered = G4int(ri); fStep->GetPostStepPoint()->SetProcessDefinedStep(fCurrentProcess); @@ -746,25 +675,23 @@ void G4SteppingManager::InvokeAtRestDoItProcs() (*fSelectedAtRestDoItVector)[fAtRestDoItProcTriggered] = NotForced; - fStep->SetStepLength( 0. ); // the particle has stopped - fTrack->SetStepLength( 0. ); + fStep->SetStepLength(0.); // the particle has stopped + fTrack->SetStepLength(0.); // Condition to avoid that stable ions are handled by Radioactive Decay. // We use a very large time threshold (many orders of magnitude bigger than // the universe's age) but not DBL_MAX because shortestLifeTime can be // sometimes slightly smaller for stable ions. - if(shortestLifeTime < 1.0e+100) // Unstable ion at rest: Radioactive Decay will decay it + if (shortestLifeTime < 1.0e+100) // Unstable ion at rest: Radioactive Decay will decay it { // invoke selected process // - for(std::size_t np=0; npAtRestDoIt(*fTrack, *fStep); @@ -783,51 +710,49 @@ void G4SteppingManager::InvokeAtRestDoItProcs() } else // Stable ion at rest { - fStep->GetPostStepPoint()->SetProcessDefinedStep( fNoProcess ); + fStep->GetPostStepPoint()->SetProcessDefinedStep(fNoProcess); } // if(shortestLifeTime < 1.0e+100) fStep->UpdateTrack(); - fTrack->SetTrackStatus( fStopAndKill ); + fTrack->SetTrackStatus(fStopAndKill); } ///////////////////////////////////////////////////////// void G4SteppingManager::InvokeAlongStepDoItProcs() ///////////////////////////////////////////////////////// { - // If the current Step is defined by a 'ExclusivelyForced' + // If the current Step is defined by a 'ExclusivelyForced' // PostStepDoIt, then don't invoke any AlongStepDoIt // - if(fStepStatus == fExclusivelyForcedProc) - { - return; // Take note 'return' is here !!! + if (fStepStatus == fExclusivelyForcedProc) { + return; // Take note 'return' is here !!! } // Invoke all active continuous processes // - for( std::size_t ci=0; ciAlongStepDoIt( *fTrack, *fStep ); + fParticleChange = fCurrentProcess->AlongStepDoIt(*fTrack, *fStep); // Update the PostStepPoint of Step according to ParticleChange fParticleChange->UpdateStepForAlongStep(fStep); - #ifdef G4VERBOSE - if(verboseLevel>0) fVerbose->AlongStepDoItOneByOne(); - #endif +#ifdef G4VERBOSE + if (verboseLevel > 0) fVerbose->AlongStepDoItOneByOne(); +#endif // Now Store the secondaries from ParticleChange to SecondaryList fN2ndariesAlongStepDoIt += ProcessSecondariesFromParticleChange(); - + // Set the track status according to what the process defined // if kinetic energy >0, otherwise set fStopButAlive // - fTrack->SetTrackStatus( fParticleChange->GetTrackStatus() ); - + fTrack->SetTrackStatus(fParticleChange->GetTrackStatus()); + // clear ParticleChange fParticleChange->Clear(); } @@ -835,11 +760,12 @@ void G4SteppingManager::InvokeAlongStepDoItProcs() fStep->UpdateTrack(); G4TrackStatus fNewStatus = fTrack->GetTrackStatus(); - if ( fNewStatus == fAlive && fTrack->GetKineticEnergy() <= DBL_MIN ) - { - if(MAXofAtRestLoops>0) fNewStatus = fStopButAlive; - else fNewStatus = fStopAndKill; - fTrack->SetTrackStatus( fNewStatus ); + if (fNewStatus == fAlive && fTrack->GetKineticEnergy() <= DBL_MIN) { + if (MAXofAtRestLoops > 0) + fNewStatus = fStopButAlive; + else + fNewStatus = fStopAndKill; + fTrack->SetTrackStatus(fNewStatus); } } @@ -849,25 +775,22 @@ void G4SteppingManager::InvokePostStepDoItProcs() { // Invoke the specified discrete processes // - for(std::size_t np=0; npGetNextVolume() == nullptr)) - { + if ((np == 0) && (fTrack->GetNextVolume() == nullptr)) { fStepStatus = fWorldBoundary; - fStep->GetPostStepPoint()->SetStepStatus( fStepStatus ); + fStep->GetPostStepPoint()->SetStepStatus(fStepStatus); } } } @@ -875,13 +798,10 @@ void G4SteppingManager::InvokePostStepDoItProcs() // Exit from PostStepLoop if the track has been killed, // but extra treatment for processes with Strongly Forced flag // - if(fTrack->GetTrackStatus() == fStopAndKill) - { - for(std::size_t np1=np+1; np1GetTrackStatus() == fStopAndKill) { + for (std::size_t np1 = np + 1; np1 < MAXofPostStepLoops; ++np1) { + G4int Cond2 = (*fSelectedPostStepDoItVector)[MAXofPostStepLoops - np1 - 1]; + if (Cond2 == StronglyForced) { InvokePSDIP(np1); } } @@ -895,26 +815,26 @@ void G4SteppingManager::InvokePSDIP(size_t np) //////////////////////////////////////////////////////// { fCurrentProcess = (*fPostStepDoItVector)[(G4int)np]; - fParticleChange = fCurrentProcess->PostStepDoIt( *fTrack, *fStep); + fParticleChange = fCurrentProcess->PostStepDoIt(*fTrack, *fStep); // Update PostStepPoint of Step according to ParticleChange fParticleChange->UpdateStepForPostStep(fStep); - #ifdef G4VERBOSE - if(verboseLevel>0) fVerbose->PostStepDoItOneByOne(); - #endif +#ifdef G4VERBOSE + if (verboseLevel > 0) fVerbose->PostStepDoItOneByOne(); +#endif // Update G4Track according to ParticleChange after each PostStepDoIt fStep->UpdateTrack(); // Update safety after each invocation of PostStepDoIts - fStep->GetPostStepPoint()->SetSafety( CalculateSafety() ); + fStep->GetPostStepPoint()->SetSafety(CalculateSafety()); // Now Store the secondaries from ParticleChange to SecondaryList fN2ndariesPostStepDoIt += ProcessSecondariesFromParticleChange(); // Set the track status according to what the process defined - fTrack->SetTrackStatus( fParticleChange->GetTrackStatus() ); + fTrack->SetTrackStatus(fParticleChange->GetTrackStatus()); // clear ParticleChange fParticleChange->Clear(); diff --git a/source/tracking/src/G4SteppingVerbose.cc b/source/tracking/src/G4SteppingVerbose.cc index 2fa16d4358e..aa4c2f4ac7b 100644 --- a/source/tracking/src/G4SteppingVerbose.cc +++ b/source/tracking/src/G4SteppingVerbose.cc @@ -32,104 +32,76 @@ // -------------------------------------------------------------------- #include "G4SteppingVerbose.hh" + +#include "G4StepStatus.hh" // Include from 'tracking' #include "G4SteppingManager.hh" #include "G4SystemOfUnits.hh" -#include "G4VSensitiveDetector.hh" // Include from 'hits/digi' -#include "G4StepStatus.hh" // Include from 'tracking' +#include "G4VSensitiveDetector.hh" // Include from 'hits/digi' // #define G4_USE_G4BESTUNIT_FOR_VERBOSE 1 #ifdef G4_USE_G4BESTUNIT_FOR_VERBOSE -#include "G4UnitsTable.hh" +# include "G4UnitsTable.hh" #else -#define G4BestUnit(a,b) a +# define G4BestUnit(a, b) a #endif G4int G4SteppingVerbose::useBestUnitPrecision = -1; -////////////////////////////////////////////////// -G4SteppingVerbose::G4SteppingVerbose() -////////////////////////////////////////////////// -{ -#ifdef G4_TRACKING_DEBUG - G4cout << "G4SteppingVerbose has instantiated" << G4endl; -#endif -} - -////////////////////////////////////////////////// -G4SteppingVerbose::~G4SteppingVerbose() -////////////////////////////////////////////////// -{ -} - ////////////////////////////////////////////////// void G4SteppingVerbose::NewStep() ////////////////////////////////////////////////// -{ -} +{} ////////////////////////////////////////////////// void G4SteppingVerbose::AtRestDoItInvoked() ////////////////////////////////////////////////// { - if(Silent==1) { return; } + if (Silent == 1) { + return; + } G4VProcess* ptProcManager; CopyState(); - if(verboseLevel >= 3) - { - G4int npt=0; + if (verboseLevel >= 3) { + G4int npt = 0; G4cout << " **List of AtRestDoIt invoked:" << G4endl; - for(std::size_t np=0; npGetProcessName() - << " (Forced)" << G4endl; + G4cout << " # " << npt << " : " << ptProcManager->GetProcessName() << " (Forced)" + << G4endl; } - else if ( (*fSelectedAtRestDoItVector)[npGPIL] == G4ForceCondition::NotForced ) - { - ++npt; + else if ((*fSelectedAtRestDoItVector)[npGPIL] == G4ForceCondition::NotForced) { + ++npt; ptProcManager = (*fAtRestDoItVector)[(G4int)np]; - G4cout << " # " << npt << " : " << ptProcManager->GetProcessName() - << G4endl; + G4cout << " # " << npt << " : " << ptProcManager->GetProcessName() << G4endl; } } - + G4cout << " Generated secondries # : " << fN2ndariesAtRestDoIt << G4endl; - - if( fN2ndariesAtRestDoIt > 0 ) - { + + if (fN2ndariesAtRestDoIt > 0) { G4cout << " -- List of secondaries generated : " - << "(x,y,z,kE,t,PID) --" << G4endl; - for( std::size_t lp1=(*fSecondary).size()-fN2ndariesAtRestDoIt; - lp1<(*fSecondary).size(); ++lp1) + << "(x,y,z,kE,t,PID) --" << G4endl; + for (std::size_t lp1 = (*fSecondary).size() - fN2ndariesAtRestDoIt; + lp1 < (*fSecondary).size(); ++lp1) { - G4cout << " " - << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(),"Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(),"Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(),"Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(),"Energy") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetGlobalTime(),"Time") - << " " << std::setw(18) - << (*fSecondary)[lp1]->GetDefinition()->GetParticleName() - << G4endl; + G4cout << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(), "Length") << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(), "Length") << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(), "Length") << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(), "Energy") << " " + << std::setw(9) << G4BestUnit((*fSecondary)[lp1]->GetGlobalTime(), "Time") << " " + << std::setw(18) << (*fSecondary)[lp1]->GetDefinition()->GetParticleName() << G4endl; } } } - - if( verboseLevel >= 4 ) - { + + if (verboseLevel >= 4) { ShowStep(); G4cout << G4endl; } @@ -139,53 +111,41 @@ void G4SteppingVerbose::AtRestDoItInvoked() void G4SteppingVerbose::AlongStepDoItAllDone() ///////////////////////////////////////////////////// { - if(Silent==1){ return; } + if (Silent == 1) { + return; + } G4VProcess* ptProcManager; CopyState(); - if(verboseLevel >= 3) - { + if (verboseLevel >= 3) { G4cout << G4endl; G4cout << " >>AlongStepDoIt (after all invocations):" << G4endl; G4cout << " ++List of invoked processes " << G4endl; - for(std::size_t ci=0; ciGetProcessName() << G4endl; } } ShowStep(); G4cout << G4endl; - G4cout << " ++List of secondaries generated " + G4cout << " ++List of secondaries generated " << "(x,y,z,kE,t,PID):" - << " No. of secondaries = " - << (*fSecondary).size() << G4endl; - - if((*fSecondary).size()>0) - { - for(std::size_t lp1=0; lp1<(*fSecondary).size(); ++lp1) - { - G4cout << " " - << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(),"Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(),"Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(),"Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(),"Energy") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetGlobalTime(),"Time") - << " " << std::setw(18) - << (*fSecondary)[lp1]->GetDefinition()->GetParticleName() - << G4endl; + << " No. of secondaries = " << (*fSecondary).size() << G4endl; + + if (! (*fSecondary).empty()) { + for (auto& lp1 : *fSecondary) { + G4cout << " " << std::setw(9) << G4BestUnit(lp1->GetPosition().x(), "Length") << " " + << std::setw(9) << G4BestUnit(lp1->GetPosition().y(), "Length") << " " + << std::setw(9) << G4BestUnit(lp1->GetPosition().z(), "Length") << " " + << std::setw(9) << G4BestUnit(lp1->GetKineticEnergy(), "Energy") << " " + << std::setw(9) << G4BestUnit(lp1->GetGlobalTime(), "Time") << " " << std::setw(18) + << lp1->GetDefinition()->GetParticleName() << G4endl; } } } @@ -195,42 +155,36 @@ void G4SteppingVerbose::AlongStepDoItAllDone() void G4SteppingVerbose::PostStepDoItAllDone() //////////////////////////////////////////////////// { - if(Silent==1) { return; } + if (Silent == 1) { + return; + } G4VProcess* ptProcManager; CopyState(); - if( (fStepStatus == fPostStepDoItProc) | - (fCondition == Forced) | - (fCondition == Conditionally) | - (fCondition == ExclusivelyForced) | - (fCondition == StronglyForced) ) + if ((fStepStatus == fPostStepDoItProc) || (fCondition == Forced) || + (fCondition == Conditionally) || (fCondition == ExclusivelyForced) || + (fCondition == StronglyForced)) { - if(verboseLevel >= 3) - { - G4int npt=0; + if (verboseLevel >= 3) { + G4int npt = 0; G4cout << G4endl; G4cout << " **PostStepDoIt (after all invocations):" << G4endl; G4cout << " ++List of invoked processes " << G4endl; - for(std::size_t np=0; npGetProcessName() - << " (Forced)" << G4endl; + G4cout << " " << npt << ") " << ptProcManager->GetProcessName() << " (Forced)" + << G4endl; } - else if ( (*fSelectedPostStepDoItVector)[npGPIL] == G4ForceCondition::NotForced ) - { + else if ((*fSelectedPostStepDoItVector)[npGPIL] == G4ForceCondition::NotForced) { ++npt; ptProcManager = (*fPostStepDoItVector)[(G4int)np]; - G4cout << " " << npt << ") " << ptProcManager->GetProcessName() - << G4endl; + G4cout << " " << npt << ") " << ptProcManager->GetProcessName() << G4endl; } } @@ -238,29 +192,17 @@ void G4SteppingVerbose::PostStepDoItAllDone() G4cout << G4endl; G4cout << " ++List of secondaries generated " << "(x,y,z,kE,t,PID):" - << " No. of secodaries = " - << (*fSecondary).size() << G4endl; - G4cout << " [Note]Secondaries from AlongStepDoIt included." - << G4endl; - - if((*fSecondary).size()>0) - { - for(std::size_t lp1=0; lp1<(*fSecondary).size(); ++lp1) - { - G4cout << " " - << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(), "Energy") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetGlobalTime(), "Time") - << " " << std::setw(18) - << (*fSecondary)[lp1]->GetDefinition()->GetParticleName() - << G4endl; + << " No. of secodaries = " << (*fSecondary).size() << G4endl; + G4cout << " [Note]Secondaries from AlongStepDoIt included." << G4endl; + + if (! (*fSecondary).empty()) { + for (auto& lp1 : *fSecondary) { + G4cout << " " << std::setw(9) << G4BestUnit(lp1->GetPosition().x(), "Length") << " " + << std::setw(9) << G4BestUnit(lp1->GetPosition().y(), "Length") << " " + << std::setw(9) << G4BestUnit(lp1->GetPosition().z(), "Length") << " " + << std::setw(9) << G4BestUnit(lp1->GetKineticEnergy(), "Energy") << " " + << std::setw(9) << G4BestUnit(lp1->GetGlobalTime(), "Time") << " " << std::setw(18) + << lp1->GetDefinition()->GetParticleName() << G4endl; } } } @@ -271,112 +213,93 @@ void G4SteppingVerbose::PostStepDoItAllDone() void G4SteppingVerbose::StepInfo() ///////////////////////////////////////// { - if(Silent==1) { return; } - if(SilentStepInfo==1) { return; } + if (Silent == 1) { + return; + } + if (SilentStepInfo == 1) { + return; + } CopyState(); - G4cout.precision(16); + G4cout.precision(16); G4long prec = G4cout.precision(3); - if( verboseLevel >= 1 ) - { - if( verboseLevel >= 4 ) VerboseTrack(); - if( verboseLevel >= 3 ) - { + if (verboseLevel >= 1) { + if (verboseLevel >= 4) VerboseTrack(); + if (verboseLevel >= 3) { G4cout << G4endl; -#ifdef G4_USE_G4BESTUNIT_FOR_VERBOSE - G4cout << std::setw( 5) << "#Step#" << " " - << std::setw( 8) << "X" << " " - << std::setw( 8) << "Y" << " " - << std::setw( 8) << "Z" << " " - << std::setw( 9) << "KineE" << " " - << std::setw( 8) << "dE" << " " - << std::setw(12) << "StepLeng" << " " - << std::setw(12) << "TrackLeng" << " " - << std::setw(12) << "NextVolume" << " " - << std::setw( 8) << "ProcName" << G4endl; +#ifdef G4_USE_G4BESTUNIT_FOR_VERBOSE + G4cout << std::setw(5) << "#Step#" + << " " << std::setw(8) << "X" + << " " << std::setw(8) << "Y" + << " " << std::setw(8) << "Z" + << " " << std::setw(9) << "KineE" + << " " << std::setw(8) << "dE" + << " " << std::setw(12) << "StepLeng" + << " " << std::setw(12) << "TrackLeng" + << " " << std::setw(12) << "NextVolume" + << " " << std::setw(8) << "ProcName" << G4endl; #else - G4cout << std::setw( 5) << "#Step#" << " " - << std::setw( 8) << "X(mm)" << " " - << std::setw( 8) << "Y(mm)" << " " - << std::setw( 8) << "Z(mm)" << " " - << std::setw( 9) << "KinE(MeV)" << " " - << std::setw( 8) << "dE(MeV)" << " " - << std::setw( 8) << "StepLeng" << " " - << std::setw( 9) << "TrackLeng" << " " - << std::setw(11) << "NextVolume" << " " - << std::setw( 8) << "ProcName" << G4endl; -#endif + G4cout << std::setw(5) << "#Step#" + << " " << std::setw(8) << "X(mm)" + << " " << std::setw(8) << "Y(mm)" + << " " << std::setw(8) << "Z(mm)" + << " " << std::setw(9) << "KinE(MeV)" + << " " << std::setw(8) << "dE(MeV)" + << " " << std::setw(8) << "StepLeng" + << " " << std::setw(9) << "TrackLeng" + << " " << std::setw(11) << "NextVolume" + << " " << std::setw(8) << "ProcName" << G4endl; +#endif } - G4cout << std::setw( 5) << fTrack->GetCurrentStepNumber() << " " - << std::setw( 8) - << G4BestUnit(fTrack->GetPosition().x(), "Length") << " " - << std::setw( 8) - << G4BestUnit(fTrack->GetPosition().y(), "Length") << " " - << std::setw( 8) - << G4BestUnit(fTrack->GetPosition().z(), "Length") << " " - << std::setw( 9) - << G4BestUnit(fTrack->GetKineticEnergy(), "Energy") << " " - << std::setw( 8) - << G4BestUnit(fStep->GetTotalEnergyDeposit(), "Energy") << " " - << std::setw( 8) - << G4BestUnit(fStep->GetStepLength(), "Length") << " " - << std::setw( 9) + G4cout << std::setw(5) << fTrack->GetCurrentStepNumber() << " " << std::setw(8) + << G4BestUnit(fTrack->GetPosition().x(), "Length") << " " << std::setw(8) + << G4BestUnit(fTrack->GetPosition().y(), "Length") << " " << std::setw(8) + << G4BestUnit(fTrack->GetPosition().z(), "Length") << " " << std::setw(9) + << G4BestUnit(fTrack->GetKineticEnergy(), "Energy") << " " << std::setw(8) + << G4BestUnit(fStep->GetTotalEnergyDeposit(), "Energy") << " " << std::setw(8) + << G4BestUnit(fStep->GetStepLength(), "Length") << " " << std::setw(9) << G4BestUnit(fTrack->GetTrackLength(), "Length") << " "; - if( fTrack->GetNextVolume() != 0 ) - { + if (fTrack->GetNextVolume() != nullptr) { G4cout << std::setw(11) << fTrack->GetNextVolume()->GetName() << " "; } - else - { - G4cout << std::setw(11) << "OutOfWorld" << " "; + else { + G4cout << std::setw(11) << "OutOfWorld" + << " "; } - if(fStep->GetPostStepPoint()->GetProcessDefinedStep() != 0) - { - G4cout << fStep->GetPostStepPoint() - ->GetProcessDefinedStep()->GetProcessName(); + if (fStep->GetPostStepPoint()->GetProcessDefinedStep() != nullptr) { + G4cout << fStep->GetPostStepPoint()->GetProcessDefinedStep()->GetProcessName(); } - else - { + else { G4cout << "User Limit"; } G4cout << G4endl; - if( verboseLevel == 2 ) - { - G4int tN2ndariesTot = fN2ndariesAtRestDoIt + fN2ndariesAlongStepDoIt - + fN2ndariesPostStepDoIt; - if(tN2ndariesTot>0) - { + if (verboseLevel == 2) { + G4int tN2ndariesTot = fN2ndariesAtRestDoIt + fN2ndariesAlongStepDoIt + fN2ndariesPostStepDoIt; + if (tN2ndariesTot > 0) { G4cout << " :----- List of 2ndaries - " - << "#SpawnInStep=" << std::setw(3) << tN2ndariesTot - << "(Rest=" << std::setw(2) << fN2ndariesAtRestDoIt - << ",Along=" << std::setw(2) << fN2ndariesAlongStepDoIt - << ",Post=" << std::setw(2) << fN2ndariesPostStepDoIt - << "), " - << "#SpawnTotal=" << std::setw(3) << (*fSecondary).size() - << " ---------------" + << "#SpawnInStep=" << std::setw(3) << tN2ndariesTot << "(Rest=" << std::setw(2) + << fN2ndariesAtRestDoIt << ",Along=" << std::setw(2) << fN2ndariesAlongStepDoIt + << ",Post=" << std::setw(2) << fN2ndariesPostStepDoIt << "), " + << "#SpawnTotal=" << std::setw(3) << (*fSecondary).size() << " ---------------" << G4endl; - for(std::size_t lp1=(*fSecondary).size()-tN2ndariesTot; - lp1<(*fSecondary).size(); ++lp1) + for (std::size_t lp1 = (*fSecondary).size() - tN2ndariesTot; lp1 < (*fSecondary).size(); + ++lp1) { - G4cout << " : " - << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(), "Energy") - << " " << std::setw(18) - << (*fSecondary)[lp1]->GetDefinition()->GetParticleName() + G4cout << " : " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(), "Length") << " " + << std::setw(9) << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(), "Length") + << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(), "Length") << " " + << std::setw(9) << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(), "Energy") + << " " << std::setw(18) << (*fSecondary)[lp1]->GetDefinition()->GetParticleName() << G4endl; } G4cout << " :-----------------------------" << "----------------------------------" - << "-- EndOf2ndaries Info ---------------" << G4endl; + << "-- EndOf2ndaries Info ---------------" << G4endl; } } } @@ -387,14 +310,13 @@ void G4SteppingVerbose::StepInfo() void G4SteppingVerbose::DPSLStarted() //////////////////////////////////////////// { - if(Silent==1){ return; } + if (Silent == 1) { + return; + } CopyState(); - if( verboseLevel > 5 ) - { - G4cout << G4endl - << " >>DefinePhysicalStepLength (List of proposed StepLengths): " - << G4endl; + if (verboseLevel > 5) { + G4cout << G4endl << " >>DefinePhysicalStepLength (List of proposed StepLengths): " << G4endl; } } @@ -402,15 +324,15 @@ void G4SteppingVerbose::DPSLStarted() void G4SteppingVerbose::DPSLUserLimit() ////////////////////////////////////////////// { - if(Silent==1){ return; } + if (Silent == 1) { + return; + } CopyState(); - if( verboseLevel > 5 ) - { + if (verboseLevel > 5) { G4cout << G4endl << G4endl; G4cout << "=== Defined Physical Step Length (DPSL)" << G4endl; - G4cout << " ++ProposedStep(UserLimit) = " - << std::setw( 9) << physIntLength + G4cout << " ++ProposedStep(UserLimit) = " << std::setw(9) << physIntLength << " : ProcName = User defined maximum allowed Step" << G4endl; } } @@ -419,32 +341,27 @@ void G4SteppingVerbose::DPSLUserLimit() void G4SteppingVerbose::DPSLPostStep() ///////////////////////////////////////////// { - if(Silent==1){ return; } + if (Silent == 1) { + return; + } CopyState(); - if( verboseLevel > 5 ) - { - G4cout << " ++ProposedStep(PostStep ) = " - << std::setw( 9) << physIntLength + if (verboseLevel > 5) { + G4cout << " ++ProposedStep(PostStep ) = " << std::setw(9) << physIntLength << " : ProcName = " << fCurrentProcess->GetProcessName() << " ("; - if(fCondition==ExclusivelyForced) - { + if (fCondition == ExclusivelyForced) { G4cout << "ExclusivelyForced)" << G4endl; } - else if(fCondition==StronglyForced) - { + else if (fCondition == StronglyForced) { G4cout << "StronglyForced)" << G4endl; } - else if(fCondition==Conditionally) - { + else if (fCondition == Conditionally) { G4cout << "Conditionally)" << G4endl; } - else if(fCondition==Forced) - { + else if (fCondition == Forced) { G4cout << "Forced)" << G4endl; } - else - { + else { G4cout << "No ForceCondition)" << G4endl; } } @@ -454,26 +371,22 @@ void G4SteppingVerbose::DPSLPostStep() void G4SteppingVerbose::DPSLAlongStep() ///////////////////////////////////////////// { - if(Silent==1){ return; } + if (Silent == 1) { + return; + } CopyState(); - if( verboseLevel > 5 ) - { - G4cout << " ++ProposedStep(AlongStep) = " - << std::setw( 9) << G4BestUnit(physIntLength , "Length") - << " : ProcName = " - << fCurrentProcess->GetProcessName() - << " ("; - if(fGPILSelection==CandidateForSelection) - { + if (verboseLevel > 5) { + G4cout << " ++ProposedStep(AlongStep) = " << std::setw(9) + << G4BestUnit(physIntLength, "Length") + << " : ProcName = " << fCurrentProcess->GetProcessName() << " ("; + if (fGPILSelection == CandidateForSelection) { G4cout << "CandidateForSelection)" << G4endl; } - else if(fGPILSelection==NotCandidateForSelection) - { + else if (fGPILSelection == NotCandidateForSelection) { G4cout << "NotCandidateForSelection)" << G4endl; } - else - { + else { G4cout << "?!?)" << G4endl; } } @@ -483,60 +396,53 @@ void G4SteppingVerbose::DPSLAlongStep() void G4SteppingVerbose::TrackingStarted() //////////////////////////////////////////////// { - if(Silent==1){ return; } + if (Silent == 1) { + return; + } CopyState(); G4long prec = G4cout.precision(3); - if( verboseLevel > 0 ) - { + if (verboseLevel > 0) { #ifdef G4_USE_G4BESTUNIT_FOR_VERBOSE - G4cout << std::setw( 5) << "Step#" << " " - << std::setw( 8) << "X" << " " - << std::setw( 8) << "Y" << " " - << std::setw( 8) << "Z" << " " - << std::setw( 9) << "KineE" << " " - << std::setw( 8) << "dE" << " " - << std::setw(12) << "StepLeng" << " " - << std::setw(12) << "TrackLeng" << " " - << std::setw(12) << "NextVolume" << " " - << std::setw( 8) << "ProcName" << G4endl; + G4cout << std::setw(5) << "Step#" + << " " << std::setw(8) << "X" + << " " << std::setw(8) << "Y" + << " " << std::setw(8) << "Z" + << " " << std::setw(9) << "KineE" + << " " << std::setw(8) << "dE" + << " " << std::setw(12) << "StepLeng" + << " " << std::setw(12) << "TrackLeng" + << " " << std::setw(12) << "NextVolume" + << " " << std::setw(8) << "ProcName" << G4endl; #else - G4cout << std::setw( 5) << "Step#" << " " - << std::setw( 8) << "X(mm)" << " " - << std::setw( 8) << "Y(mm)" << " " - << std::setw( 8) << "Z(mm)" << " " - << std::setw( 9) << "KinE(MeV)" << " " - << std::setw( 8) << "dE(MeV)" << " " - << std::setw( 8) << "StepLeng" << " " - << std::setw( 9) << "TrackLeng" << " " - << std::setw(11) << "NextVolume" << " " - << std::setw( 8) << "ProcName" << G4endl; + G4cout << std::setw(5) << "Step#" + << " " << std::setw(8) << "X(mm)" + << " " << std::setw(8) << "Y(mm)" + << " " << std::setw(8) << "Z(mm)" + << " " << std::setw(9) << "KinE(MeV)" + << " " << std::setw(8) << "dE(MeV)" + << " " << std::setw(8) << "StepLeng" + << " " << std::setw(9) << "TrackLeng" + << " " << std::setw(11) << "NextVolume" + << " " << std::setw(8) << "ProcName" << G4endl; #endif - G4cout << std::setw( 5) << fTrack->GetCurrentStepNumber() << " " - << std::setw( 8) - << G4BestUnit(fTrack->GetPosition().x(),"Length") << " " - << std::setw( 8) - << G4BestUnit(fTrack->GetPosition().y(),"Length") << " " - << std::setw( 8) - << G4BestUnit(fTrack->GetPosition().z(),"Length") << " " - << std::setw( 9) - << G4BestUnit(fTrack->GetKineticEnergy(),"Energy") << " " - << std::setw( 8) - << G4BestUnit(fStep->GetTotalEnergyDeposit(),"Energy") << " " - << std::setw( 8) - << G4BestUnit(fStep->GetStepLength(),"Length") << " " - << std::setw( 9) - << G4BestUnit(fTrack->GetTrackLength(),"Length") << " "; - - if(fTrack->GetNextVolume()) - { + G4cout << std::setw(5) << fTrack->GetCurrentStepNumber() << " " << std::setw(8) + << G4BestUnit(fTrack->GetPosition().x(), "Length") << " " << std::setw(8) + << G4BestUnit(fTrack->GetPosition().y(), "Length") << " " << std::setw(8) + << G4BestUnit(fTrack->GetPosition().z(), "Length") << " " << std::setw(9) + << G4BestUnit(fTrack->GetKineticEnergy(), "Energy") << " " << std::setw(8) + << G4BestUnit(fStep->GetTotalEnergyDeposit(), "Energy") << " " << std::setw(8) + << G4BestUnit(fStep->GetStepLength(), "Length") << " " << std::setw(9) + << G4BestUnit(fTrack->GetTrackLength(), "Length") << " "; + + if (fTrack->GetNextVolume() != nullptr) { G4cout << std::setw(11) << fTrack->GetNextVolume()->GetName() << " "; } - else - { - G4cout << std::setw(11) << "OutOfWorld" << " "; + else { + G4cout << std::setw(11) << "OutOfWorld" + << " "; } G4cout << "initStep" << G4endl; } @@ -546,51 +452,41 @@ void G4SteppingVerbose::TrackingStarted() ////////////////////////////////////////////////////// void G4SteppingVerbose::AlongStepDoItOneByOne() ////////////////////////////////////////////////////// -{ - if(Silent==1){ return; } +{ + if (Silent == 1) { + return; + } CopyState(); - if(verboseLevel >= 4) - { + if (verboseLevel >= 4) { G4cout << G4endl; G4cout << " >>AlongStepDoIt (process by process): " - << " Process Name = " - << fCurrentProcess->GetProcessName() << G4endl; + << " Process Name = " << fCurrentProcess->GetProcessName() << G4endl; ShowStep(); G4cout << " " << "!Note! Safety of PostStep is only valid " - << "after all DoIt invocations." - << G4endl; + << "after all DoIt invocations." << G4endl; - VerboseParticleChange(); + VerboseParticleChange(); G4cout << G4endl; - G4cout << " ++List of secondaries generated " + G4cout << " ++List of secondaries generated " << "(x,y,z,kE,t,PID):" - << " No. of secodaries = " - << fN2ndariesAlongStepDoIt << G4endl; + << " No. of secodaries = " << fN2ndariesAlongStepDoIt << G4endl; - if(fN2ndariesAlongStepDoIt>0) - { - for(std::size_t lp1=(*fSecondary).size()-fN2ndariesAlongStepDoIt; - lp1<(*fSecondary).size(); ++lp1) + if (fN2ndariesAlongStepDoIt > 0) { + for (std::size_t lp1 = (*fSecondary).size() - fN2ndariesAlongStepDoIt; + lp1 < (*fSecondary).size(); ++lp1) { - G4cout << " " - << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(), "Energy") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetGlobalTime(), "Time") - << " " << std::setw(18) - << (*fSecondary)[lp1]->GetDefinition()->GetParticleName() - << G4endl; + G4cout << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(), "Length") << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(), "Length") << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(), "Length") << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(), "Energy") << " " + << std::setw(9) << G4BestUnit((*fSecondary)[lp1]->GetGlobalTime(), "Time") << " " + << std::setw(18) << (*fSecondary)[lp1]->GetDefinition()->GetParticleName() << G4endl; } } } @@ -600,46 +496,37 @@ void G4SteppingVerbose::AlongStepDoItOneByOne() void G4SteppingVerbose::PostStepDoItOneByOne() ////////////////////////////////////////////////////// { - if(Silent==1) { return; } + if (Silent == 1) { + return; + } CopyState(); - if(verboseLevel >= 4) - { + if (verboseLevel >= 4) { G4cout << G4endl; G4cout << " >>PostStepDoIt (process by process): " - << " Process Name = " - << fCurrentProcess->GetProcessName() << G4endl; + << " Process Name = " << fCurrentProcess->GetProcessName() << G4endl; ShowStep(); G4cout << G4endl; - VerboseParticleChange(); + VerboseParticleChange(); G4cout << G4endl; - G4cout << " ++List of secondaries generated " + G4cout << " ++List of secondaries generated " << "(x,y,z,kE,t,PID):" - << " No. of secodaries = " - << fN2ndariesPostStepDoIt << G4endl; + << " No. of secodaries = " << fN2ndariesPostStepDoIt << G4endl; - if(fN2ndariesPostStepDoIt>0) - { - for(std::size_t lp1=(*fSecondary).size()-fN2ndariesPostStepDoIt; - lp1<(*fSecondary).size(); ++lp1) + if (fN2ndariesPostStepDoIt > 0) { + for (std::size_t lp1 = (*fSecondary).size() - fN2ndariesPostStepDoIt; + lp1 < (*fSecondary).size(); ++lp1) { - G4cout << " " - << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(), "Energy") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetGlobalTime(), "Time") - << " " << std::setw(18) - << (*fSecondary)[lp1]->GetDefinition()->GetParticleName() - << G4endl; + G4cout << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(), "Length") << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(), "Length") << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(), "Length") << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(), "Energy") << " " + << std::setw(9) << G4BestUnit((*fSecondary)[lp1]->GetGlobalTime(), "Time") << " " + << std::setw(18) << (*fSecondary)[lp1]->GetDefinition()->GetParticleName() << G4endl; } } } @@ -649,7 +536,9 @@ void G4SteppingVerbose::PostStepDoItOneByOne() void G4SteppingVerbose::VerboseTrack() ////////////////////////////////////// { - if(Silent==1){ return; } + if (Silent == 1) { + return; + } CopyState(); @@ -657,184 +546,133 @@ void G4SteppingVerbose::VerboseTrack() G4cout << " ++G4Track Information " << G4endl; G4long prec = G4cout.precision(3); - - G4cout << " -----------------------------------------------" - << G4endl; + G4cout << " -----------------------------------------------" << G4endl; G4cout << " G4Track Information " << std::setw(20) << G4endl; - G4cout << " -----------------------------------------------" - << G4endl; + G4cout << " -----------------------------------------------" << G4endl; - G4cout << " Step number : " - << std::setw(20) << fTrack->GetCurrentStepNumber() - << G4endl; -#ifdef G4_USE_G4BESTUNIT_FOR_VERBOSE - G4cout << " Position - x : " - << std::setw(20) << G4BestUnit(fTrack->GetPosition().x(), "Length") - << G4endl; - G4cout << " Position - y : " - << std::setw(20) << G4BestUnit(fTrack->GetPosition().y(), "Length") - << G4endl; - G4cout << " Position - z : " - << std::setw(20) << G4BestUnit(fTrack->GetPosition().z(), "Length") + G4cout << " Step number : " << std::setw(20) << fTrack->GetCurrentStepNumber() << G4endl; - G4cout << " Global Time : " - << std::setw(20) << G4BestUnit(fTrack->GetGlobalTime(), "Time") +#ifdef G4_USE_G4BESTUNIT_FOR_VERBOSE + G4cout << " Position - x : " << std::setw(20) + << G4BestUnit(fTrack->GetPosition().x(), "Length") << G4endl; + G4cout << " Position - y : " << std::setw(20) + << G4BestUnit(fTrack->GetPosition().y(), "Length") << G4endl; + G4cout << " Position - z : " << std::setw(20) + << G4BestUnit(fTrack->GetPosition().z(), "Length") << G4endl; + G4cout << " Global Time : " << std::setw(20) + << G4BestUnit(fTrack->GetGlobalTime(), "Time") << G4endl; + G4cout << " Local Time : " << std::setw(20) + << G4BestUnit(fTrack->GetLocalTime(), "Time") << G4endl; +#else + G4cout << " Position - x (mm) : " << std::setw(20) << fTrack->GetPosition().x() / mm << G4endl; - G4cout << " Local Time : " - << std::setw(20) << G4BestUnit(fTrack->GetLocalTime(), "Time") + G4cout << " Position - y (mm) : " << std::setw(20) << fTrack->GetPosition().y() / mm << G4endl; -#else - G4cout << " Position - x (mm) : " - << std::setw(20) << fTrack->GetPosition().x() /mm - << G4endl; - G4cout << " Position - y (mm) : " - << std::setw(20) << fTrack->GetPosition().y() /mm - << G4endl; - G4cout << " Position - z (mm) : " - << std::setw(20) << fTrack->GetPosition().z() /mm + G4cout << " Position - z (mm) : " << std::setw(20) << fTrack->GetPosition().z() / mm << G4endl; - G4cout << " Global Time (ns) : " - << std::setw(20) << fTrack->GetGlobalTime() /ns + G4cout << " Global Time (ns) : " << std::setw(20) << fTrack->GetGlobalTime() / ns << G4endl; - G4cout << " Local Time (ns) : " - << std::setw(20) << fTrack->GetLocalTime() /ns + G4cout << " Local Time (ns) : " << std::setw(20) << fTrack->GetLocalTime() / ns << G4endl; #endif - G4cout << " Momentum Direct - x : " - << std::setw(20) << fTrack->GetMomentumDirection().x() + G4cout << " Momentum Direct - x : " << std::setw(20) << fTrack->GetMomentumDirection().x() << G4endl; - G4cout << " Momentum Direct - y : " - << std::setw(20) << fTrack->GetMomentumDirection().y() + G4cout << " Momentum Direct - y : " << std::setw(20) << fTrack->GetMomentumDirection().y() << G4endl; - G4cout << " Momentum Direct - z : " - << std::setw(20) << fTrack->GetMomentumDirection().z() + G4cout << " Momentum Direct - z : " << std::setw(20) << fTrack->GetMomentumDirection().z() << G4endl; #ifdef G4_USE_G4BESTUNIT_FOR_VERBOSE - G4cout << " Kinetic Energy : " + G4cout << " Kinetic Energy : " #else - G4cout << " Kinetic Energy (MeV): " + G4cout << " Kinetic Energy (MeV): " #endif - << std::setw(20) << G4BestUnit(fTrack->GetKineticEnergy(), "Energy") - << G4endl; - G4cout << " Polarization - x : " - << std::setw(20) << fTrack->GetPolarization().x() - << G4endl; - G4cout << " Polarization - y : " - << std::setw(20) << fTrack->GetPolarization().y() + << std::setw(20) << G4BestUnit(fTrack->GetKineticEnergy(), "Energy") << G4endl; + G4cout << " Polarization - x : " << std::setw(20) << fTrack->GetPolarization().x() << G4endl; - G4cout << " Polarization - z : " - << std::setw(20) << fTrack->GetPolarization().z() + G4cout << " Polarization - y : " << std::setw(20) << fTrack->GetPolarization().y() << G4endl; - G4cout << " Track Length : " - << std::setw(20) << G4BestUnit(fTrack->GetTrackLength(), "Length") + G4cout << " Polarization - z : " << std::setw(20) << fTrack->GetPolarization().z() << G4endl; - G4cout << " Track ID # : " - << std::setw(20) << fTrack->GetTrackID() - << G4endl; - G4cout << " Parent Track ID # : " - << std::setw(20) << fTrack->GetParentID() - << G4endl; - G4cout << " Next Volume : " - << std::setw(20); - if( fTrack->GetNextVolume() != 0 ) - { + G4cout << " Track Length : " << std::setw(20) + << G4BestUnit(fTrack->GetTrackLength(), "Length") << G4endl; + G4cout << " Track ID # : " << std::setw(20) << fTrack->GetTrackID() << G4endl; + G4cout << " Parent Track ID # : " << std::setw(20) << fTrack->GetParentID() << G4endl; + G4cout << " Next Volume : " << std::setw(20); + if (fTrack->GetNextVolume() != nullptr) { G4cout << fTrack->GetNextVolume()->GetName() << " "; } - else - { - G4cout << "OutOfWorld" << " "; + else { + G4cout << "OutOfWorld" + << " "; } G4cout << G4endl; - G4cout << " Track Status : " - << std::setw(20); - if( fTrack->GetTrackStatus() == fAlive ) - { + G4cout << " Track Status : " << std::setw(20); + if (fTrack->GetTrackStatus() == fAlive) { G4cout << " Alive"; } - else if( fTrack->GetTrackStatus() == fStopButAlive ) - { + else if (fTrack->GetTrackStatus() == fStopButAlive) { G4cout << " StopButAlive"; } - else if( fTrack->GetTrackStatus() == fStopAndKill ) - { + else if (fTrack->GetTrackStatus() == fStopAndKill) { G4cout << " StopAndKill"; } - else if( fTrack->GetTrackStatus() == fKillTrackAndSecondaries ) - { + else if (fTrack->GetTrackStatus() == fKillTrackAndSecondaries) { G4cout << " KillTrackAndSecondaries"; } - else if( fTrack->GetTrackStatus() == fSuspend ) - { + else if (fTrack->GetTrackStatus() == fSuspend) { G4cout << " Suspend"; } - else if( fTrack->GetTrackStatus() == fPostponeToNextEvent ) - { + else if (fTrack->GetTrackStatus() == fPostponeToNextEvent) { G4cout << " PostponeToNextEvent"; } G4cout << G4endl; #ifdef G4_USE_G4BESTUNIT_FOR_VERBOSE - G4cout << " Vertex - x : " - << std::setw(20) - << G4BestUnit(fTrack->GetVertexPosition().x(),"Length") - << G4endl; - G4cout << " Vertex - y : " - << std::setw(20) - << G4BestUnit(fTrack->GetVertexPosition().y(),"Length") - << G4endl; - G4cout << " Vertex - z : " - << std::setw(20) - << G4BestUnit(fTrack->GetVertexPosition().z(),"Length") - << G4endl; + G4cout << " Vertex - x : " << std::setw(20) + << G4BestUnit(fTrack->GetVertexPosition().x(), "Length") << G4endl; + G4cout << " Vertex - y : " << std::setw(20) + << G4BestUnit(fTrack->GetVertexPosition().y(), "Length") << G4endl; + G4cout << " Vertex - z : " << std::setw(20) + << G4BestUnit(fTrack->GetVertexPosition().z(), "Length") << G4endl; #else - G4cout << " Vertex - x (mm) : " - << std::setw(20) << fTrack->GetVertexPosition().x()/mm - << G4endl; - G4cout << " Vertex - y (mm) : " - << std::setw(20) << fTrack->GetVertexPosition().y()/mm - << G4endl; - G4cout << " Vertex - z (mm) : " - << std::setw(20) << fTrack->GetVertexPosition().z()/mm - << G4endl; + G4cout << " Vertex - x (mm) : " << std::setw(20) + << fTrack->GetVertexPosition().x() / mm << G4endl; + G4cout << " Vertex - y (mm) : " << std::setw(20) + << fTrack->GetVertexPosition().y() / mm << G4endl; + G4cout << " Vertex - z (mm) : " << std::setw(20) + << fTrack->GetVertexPosition().z() / mm << G4endl; #endif - G4cout << " Vertex - Px (MomDir): " - << std::setw(20) << fTrack->GetVertexMomentumDirection().x() - << G4endl; - G4cout << " Vertex - Py (MomDir): " - << std::setw(20) << fTrack->GetVertexMomentumDirection().y() - << G4endl; - G4cout << " Vertex - Pz (MomDir): " - << std::setw(20) << fTrack->GetVertexMomentumDirection().z() - << G4endl; + G4cout << " Vertex - Px (MomDir): " << std::setw(20) + << fTrack->GetVertexMomentumDirection().x() << G4endl; + G4cout << " Vertex - Py (MomDir): " << std::setw(20) + << fTrack->GetVertexMomentumDirection().y() << G4endl; + G4cout << " Vertex - Pz (MomDir): " << std::setw(20) + << fTrack->GetVertexMomentumDirection().z() << G4endl; #ifdef G4_USE_G4BESTUNIT_FOR_VERBOSE - G4cout << " Vertex - KineE : " + G4cout << " Vertex - KineE : " #else - G4cout << " Vertex - KineE (MeV): " + G4cout << " Vertex - KineE (MeV): " #endif - << std::setw(20) - << G4BestUnit(fTrack->GetVertexKineticEnergy(),"Energy") - << G4endl; - - G4cout << " Creator Process : " - << std::setw(20); - if( fTrack->GetCreatorProcess() == 0) - { + << std::setw(20) << G4BestUnit(fTrack->GetVertexKineticEnergy(), "Energy") << G4endl; + + G4cout << " Creator Process : " << std::setw(20); + if (fTrack->GetCreatorProcess() == nullptr) { G4cout << " Event Generator" << G4endl; } - else - { + else { G4cout << fTrack->GetCreatorProcess()->GetProcessName() << G4endl; } - G4cout << " -----------------------------------------------" - << G4endl; - G4cout.precision(prec); + G4cout << " -----------------------------------------------" << G4endl; + G4cout.precision(prec); } /////////////////////////////////////////////// void G4SteppingVerbose::VerboseParticleChange() /////////////////////////////////////////////// { - if(Silent==1) { return; } + if (Silent == 1) { + return; + } G4cout << G4endl; G4cout << " ++G4ParticleChange Information " << G4endl; @@ -845,204 +683,164 @@ void G4SteppingVerbose::VerboseParticleChange() void G4SteppingVerbose::ShowStep() const //////////////////////////////////////// { - if(Silent==1){ return; } - G4String volName; - G4long oldprc; - - // Show header - G4cout << G4endl; - G4cout << " ++G4Step Information " << G4endl; - oldprc = G4cout.precision(16); - - // Show G4Step specific information - G4cout << " Address of G4Track : " - << fStep->GetTrack() << G4endl; - G4cout << " Step Length (mm) : " - << fStep->GetTrack()->GetStepLength() << G4endl; - G4cout << " Energy Deposit (MeV) : " - << fStep->GetTotalEnergyDeposit() << G4endl; - - // Show G4StepPoint specific information - G4cout << " -------------------------------------------------------" - << "----------------" << G4endl; - G4cout << " StepPoint Information " - << std::setw(20) << "PreStep" - << std::setw(20) << "PostStep" << G4endl; - G4cout << " -------------------------------------------------------" - << "----------------" << G4endl; - G4cout << " Position - x (mm) : " - << std::setw(20) << fStep->GetPreStepPoint()->GetPosition().x() - << std::setw(20) << fStep->GetPostStepPoint()->GetPosition().x() - << G4endl; - G4cout << " Position - y (mm) : " - << std::setw(20) << fStep->GetPreStepPoint()->GetPosition().y() - << std::setw(20) << fStep->GetPostStepPoint()->GetPosition().y() - << G4endl; - G4cout << " Position - z (mm) : " - << std::setw(20) << fStep->GetPreStepPoint()->GetPosition().z() - << std::setw(20) << fStep->GetPostStepPoint()->GetPosition().z() - << G4endl; - G4cout << " Global Time (ns) : " - << std::setw(20) << fStep->GetPreStepPoint()->GetGlobalTime() - << std::setw(20) << fStep->GetPostStepPoint()->GetGlobalTime() - << G4endl; - G4cout << " Local Time (ns) : " - << std::setw(20) << fStep->GetPreStepPoint()->GetLocalTime() - << std::setw(20) << fStep->GetPostStepPoint()->GetLocalTime() - << G4endl; - G4cout << " Proper Time (ns) : " - << std::setw(20) << fStep->GetPreStepPoint()->GetProperTime() - << std::setw(20) << fStep->GetPostStepPoint()->GetProperTime() - << G4endl; - G4cout << " Momentum Direct - x : " - << std::setw(20) << fStep->GetPreStepPoint()->GetMomentumDirection().x() - << std::setw(20) << fStep->GetPostStepPoint()->GetMomentumDirection().x() - << G4endl; - G4cout << " Momentum Direct - y : " - << std::setw(20) << fStep->GetPreStepPoint()->GetMomentumDirection().y() - << std::setw(20) << fStep->GetPostStepPoint()->GetMomentumDirection().y() - << G4endl; - G4cout << " Momentum Direct - z : " - << std::setw(20) << fStep->GetPreStepPoint()->GetMomentumDirection().z() - << std::setw(20) << fStep->GetPostStepPoint()->GetMomentumDirection().z() - << G4endl; - G4cout << " Momentum - x (MeV/c): " - << std::setw(20) << fStep->GetPreStepPoint()->GetMomentum().x() - << std::setw(20) << fStep->GetPostStepPoint()->GetMomentum().x() - << G4endl; - G4cout << " Momentum - y (MeV/c): " - << std::setw(20) << fStep->GetPreStepPoint()->GetMomentum().y() - << std::setw(20) << fStep->GetPostStepPoint()->GetMomentum().y() - << G4endl; - G4cout << " Momentum - z (MeV/c): " - << std::setw(20) << fStep->GetPreStepPoint()->GetMomentum().z() - << std::setw(20) << fStep->GetPostStepPoint()->GetMomentum().z() - << G4endl; - G4cout << " Total Energy (MeV) : " - << std::setw(20) << fStep->GetPreStepPoint()->GetTotalEnergy() - << std::setw(20) << fStep->GetPostStepPoint()->GetTotalEnergy() - << G4endl; - G4cout << " Kinetic Energy (MeV): " - << std::setw(20) << fStep->GetPreStepPoint()->GetKineticEnergy() - << std::setw(20) << fStep->GetPostStepPoint()->GetKineticEnergy() - << G4endl; - G4cout << " Velocity (mm/ns) : " - << std::setw(20) << fStep->GetPreStepPoint()->GetVelocity() - << std::setw(20) << fStep->GetPostStepPoint()->GetVelocity() - << G4endl; - G4cout << " Volume Name : " - << std::setw(20) - << fStep->GetPreStepPoint()->GetPhysicalVolume()->GetName(); - if (fStep->GetPostStepPoint()->GetPhysicalVolume()) - { - volName = fStep->GetPostStepPoint()->GetPhysicalVolume()->GetName(); - } - else - { - volName = "OutOfWorld"; - } - G4cout << std::setw(20) << volName << G4endl; - G4cout << " Safety (mm) : " - << std::setw(20) << fStep->GetPreStepPoint()->GetSafety() - << std::setw(20) << fStep->GetPostStepPoint()->GetSafety() - << G4endl; - G4cout << " Polarization - x : " - << std::setw(20) << fStep->GetPreStepPoint()->GetPolarization().x() - << std::setw(20) << fStep->GetPostStepPoint()->GetPolarization().x() - << G4endl; - G4cout << " Polarization - y : " - << std::setw(20) << fStep->GetPreStepPoint()->GetPolarization().y() - << std::setw(20) << fStep->GetPostStepPoint()->GetPolarization().y() - << G4endl; - G4cout << " Polarization - Z : " - << std::setw(20) << fStep->GetPreStepPoint()->GetPolarization().z() - << std::setw(20) << fStep->GetPostStepPoint()->GetPolarization().z() - << G4endl; - G4cout << " Weight : " - << std::setw(20) << fStep->GetPreStepPoint()->GetWeight() - << std::setw(20) << fStep->GetPostStepPoint()->GetWeight() - << G4endl; - G4cout << " Step Status : " ; - G4StepStatus tStepStatus = fStep->GetPreStepPoint()->GetStepStatus(); - if( tStepStatus == fGeomBoundary ) - { - G4cout << std::setw(20) << "Geom Limit"; - } - else if ( tStepStatus == fAlongStepDoItProc ) - { - G4cout << std::setw(20) << "AlongStep Proc."; - } - else if ( tStepStatus == fPostStepDoItProc ) - { - G4cout << std::setw(20) << "PostStep Proc"; - } - else if ( tStepStatus == fAtRestDoItProc ) - { - G4cout << std::setw(20) << "AtRest Proc"; - } - else if ( tStepStatus == fUndefined ) - { - G4cout << std::setw(20) << "Undefined"; - } - - tStepStatus = fStep->GetPostStepPoint()->GetStepStatus(); - if( tStepStatus == fGeomBoundary ) - { - G4cout << std::setw(20) << "Geom Limit"; - } - else if ( tStepStatus == fAlongStepDoItProc ) - { - G4cout << std::setw(20) << "AlongStep Proc."; - } - else if ( tStepStatus == fPostStepDoItProc ) - { - G4cout << std::setw(20) << "PostStep Proc"; - } - else if ( tStepStatus == fAtRestDoItProc ) - { - G4cout << std::setw(20) << "AtRest Proc"; - } - else if ( tStepStatus == fUndefined ) - { - G4cout << std::setw(20) << "Undefined"; - } - - G4cout << G4endl; - G4cout << " Process defined Step: " ; - if( fStep->GetPreStepPoint()->GetProcessDefinedStep() == 0 ) - { - G4cout << std::setw(20) << "Undefined"; - } - else - { - G4cout << std::setw(20) - << fStep->GetPreStepPoint() - ->GetProcessDefinedStep()->GetProcessName(); - } - if( fStep->GetPostStepPoint()->GetProcessDefinedStep() == 0) - { - G4cout << std::setw(20) << "Undefined"; - } - else - { - G4cout << std::setw(20) - << fStep->GetPostStepPoint() - ->GetProcessDefinedStep()->GetProcessName(); - } - G4cout.precision(oldprc); - - G4cout << G4endl; - G4cout << " -------------------------------------------------------" - << "----------------" << G4endl; + if (Silent == 1) { + return; + } + G4String volName; + G4long oldprc; + + // Show header + G4cout << G4endl; + G4cout << " ++G4Step Information " << G4endl; + oldprc = G4cout.precision(16); + + // Show G4Step specific information + G4cout << " Address of G4Track : " << fStep->GetTrack() << G4endl; + G4cout << " Step Length (mm) : " << fStep->GetTrack()->GetStepLength() << G4endl; + G4cout << " Energy Deposit (MeV) : " << fStep->GetTotalEnergyDeposit() << G4endl; + + // Show G4StepPoint specific information + G4cout << " -------------------------------------------------------" + << "----------------" << G4endl; + G4cout << " StepPoint Information " << std::setw(20) << "PreStep" << std::setw(20) + << "PostStep" << G4endl; + G4cout << " -------------------------------------------------------" + << "----------------" << G4endl; + G4cout << " Position - x (mm) : " << std::setw(20) + << fStep->GetPreStepPoint()->GetPosition().x() << std::setw(20) + << fStep->GetPostStepPoint()->GetPosition().x() << G4endl; + G4cout << " Position - y (mm) : " << std::setw(20) + << fStep->GetPreStepPoint()->GetPosition().y() << std::setw(20) + << fStep->GetPostStepPoint()->GetPosition().y() << G4endl; + G4cout << " Position - z (mm) : " << std::setw(20) + << fStep->GetPreStepPoint()->GetPosition().z() << std::setw(20) + << fStep->GetPostStepPoint()->GetPosition().z() << G4endl; + G4cout << " Global Time (ns) : " << std::setw(20) + << fStep->GetPreStepPoint()->GetGlobalTime() << std::setw(20) + << fStep->GetPostStepPoint()->GetGlobalTime() << G4endl; + G4cout << " Local Time (ns) : " << std::setw(20) + << fStep->GetPreStepPoint()->GetLocalTime() << std::setw(20) + << fStep->GetPostStepPoint()->GetLocalTime() << G4endl; + G4cout << " Proper Time (ns) : " << std::setw(20) + << fStep->GetPreStepPoint()->GetProperTime() << std::setw(20) + << fStep->GetPostStepPoint()->GetProperTime() << G4endl; + G4cout << " Momentum Direct - x : " << std::setw(20) + << fStep->GetPreStepPoint()->GetMomentumDirection().x() << std::setw(20) + << fStep->GetPostStepPoint()->GetMomentumDirection().x() << G4endl; + G4cout << " Momentum Direct - y : " << std::setw(20) + << fStep->GetPreStepPoint()->GetMomentumDirection().y() << std::setw(20) + << fStep->GetPostStepPoint()->GetMomentumDirection().y() << G4endl; + G4cout << " Momentum Direct - z : " << std::setw(20) + << fStep->GetPreStepPoint()->GetMomentumDirection().z() << std::setw(20) + << fStep->GetPostStepPoint()->GetMomentumDirection().z() << G4endl; + G4cout << " Momentum - x (MeV/c): " << std::setw(20) + << fStep->GetPreStepPoint()->GetMomentum().x() << std::setw(20) + << fStep->GetPostStepPoint()->GetMomentum().x() << G4endl; + G4cout << " Momentum - y (MeV/c): " << std::setw(20) + << fStep->GetPreStepPoint()->GetMomentum().y() << std::setw(20) + << fStep->GetPostStepPoint()->GetMomentum().y() << G4endl; + G4cout << " Momentum - z (MeV/c): " << std::setw(20) + << fStep->GetPreStepPoint()->GetMomentum().z() << std::setw(20) + << fStep->GetPostStepPoint()->GetMomentum().z() << G4endl; + G4cout << " Total Energy (MeV) : " << std::setw(20) + << fStep->GetPreStepPoint()->GetTotalEnergy() << std::setw(20) + << fStep->GetPostStepPoint()->GetTotalEnergy() << G4endl; + G4cout << " Kinetic Energy (MeV): " << std::setw(20) + << fStep->GetPreStepPoint()->GetKineticEnergy() << std::setw(20) + << fStep->GetPostStepPoint()->GetKineticEnergy() << G4endl; + G4cout << " Velocity (mm/ns) : " << std::setw(20) + << fStep->GetPreStepPoint()->GetVelocity() << std::setw(20) + << fStep->GetPostStepPoint()->GetVelocity() << G4endl; + G4cout << " Volume Name : " << std::setw(20) + << fStep->GetPreStepPoint()->GetPhysicalVolume()->GetName(); + if (fStep->GetPostStepPoint()->GetPhysicalVolume() != nullptr) { + volName = fStep->GetPostStepPoint()->GetPhysicalVolume()->GetName(); + } + else { + volName = "OutOfWorld"; + } + G4cout << std::setw(20) << volName << G4endl; + G4cout << " Safety (mm) : " << std::setw(20) + << fStep->GetPreStepPoint()->GetSafety() << std::setw(20) + << fStep->GetPostStepPoint()->GetSafety() << G4endl; + G4cout << " Polarization - x : " << std::setw(20) + << fStep->GetPreStepPoint()->GetPolarization().x() << std::setw(20) + << fStep->GetPostStepPoint()->GetPolarization().x() << G4endl; + G4cout << " Polarization - y : " << std::setw(20) + << fStep->GetPreStepPoint()->GetPolarization().y() << std::setw(20) + << fStep->GetPostStepPoint()->GetPolarization().y() << G4endl; + G4cout << " Polarization - Z : " << std::setw(20) + << fStep->GetPreStepPoint()->GetPolarization().z() << std::setw(20) + << fStep->GetPostStepPoint()->GetPolarization().z() << G4endl; + G4cout << " Weight : " << std::setw(20) + << fStep->GetPreStepPoint()->GetWeight() << std::setw(20) + << fStep->GetPostStepPoint()->GetWeight() << G4endl; + G4cout << " Step Status : "; + G4StepStatus tStepStatus = fStep->GetPreStepPoint()->GetStepStatus(); + if (tStepStatus == fGeomBoundary) { + G4cout << std::setw(20) << "Geom Limit"; + } + else if (tStepStatus == fAlongStepDoItProc) { + G4cout << std::setw(20) << "AlongStep Proc."; + } + else if (tStepStatus == fPostStepDoItProc) { + G4cout << std::setw(20) << "PostStep Proc"; + } + else if (tStepStatus == fAtRestDoItProc) { + G4cout << std::setw(20) << "AtRest Proc"; + } + else if (tStepStatus == fUndefined) { + G4cout << std::setw(20) << "Undefined"; + } + + tStepStatus = fStep->GetPostStepPoint()->GetStepStatus(); + if (tStepStatus == fGeomBoundary) { + G4cout << std::setw(20) << "Geom Limit"; + } + else if (tStepStatus == fAlongStepDoItProc) { + G4cout << std::setw(20) << "AlongStep Proc."; + } + else if (tStepStatus == fPostStepDoItProc) { + G4cout << std::setw(20) << "PostStep Proc"; + } + else if (tStepStatus == fAtRestDoItProc) { + G4cout << std::setw(20) << "AtRest Proc"; + } + else if (tStepStatus == fUndefined) { + G4cout << std::setw(20) << "Undefined"; + } + + G4cout << G4endl; + G4cout << " Process defined Step: "; + if (fStep->GetPreStepPoint()->GetProcessDefinedStep() == nullptr) { + G4cout << std::setw(20) << "Undefined"; + } + else { + G4cout << std::setw(20) << fStep->GetPreStepPoint()->GetProcessDefinedStep()->GetProcessName(); + } + if (fStep->GetPostStepPoint()->GetProcessDefinedStep() == nullptr) { + G4cout << std::setw(20) << "Undefined"; + } + else { + G4cout << std::setw(20) << fStep->GetPostStepPoint()->GetProcessDefinedStep()->GetProcessName(); + } + G4cout.precision(oldprc); + + G4cout << G4endl; + G4cout << " -------------------------------------------------------" + << "----------------" << G4endl; } ////////////////////////////////////////////////// void G4SteppingVerbose::UseBestUnit(G4int prec) ////////////////////////////////////////////////// -{ useBestUnitPrecision = prec; } +{ + useBestUnitPrecision = prec; +} ////////////////////////////////////////////////// G4int G4SteppingVerbose::BestUnitPrecision() ////////////////////////////////////////////////// -{ return useBestUnitPrecision; } - +{ + return useBestUnitPrecision; +} diff --git a/source/tracking/src/G4SteppingVerboseWithUnits.cc b/source/tracking/src/G4SteppingVerboseWithUnits.cc index c939247193d..e2d166c5e2c 100644 --- a/source/tracking/src/G4SteppingVerboseWithUnits.cc +++ b/source/tracking/src/G4SteppingVerboseWithUnits.cc @@ -23,7 +23,7 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -/// \file +/// \file /// \brief Implementation of the G4SteppingVerboseWithUnits class // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -37,68 +37,58 @@ #include "G4SteppingVerboseWithUnits.hh" +#include "G4GenericMessenger.hh" #include "G4SteppingManager.hh" #include "G4UnitsTable.hh" -#include "G4GenericMessenger.hh" //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4SteppingVerboseWithUnits::G4SteppingVerboseWithUnits(G4int prec) - : G4SteppingVerbose(), fprec(prec) -{ -} +G4SteppingVerboseWithUnits::G4SteppingVerboseWithUnits(G4int prec) : fprec(prec) {} //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... -G4SteppingVerboseWithUnits::~G4SteppingVerboseWithUnits() -{ - delete fmessenger; -} +G4SteppingVerboseWithUnits::~G4SteppingVerboseWithUnits() { delete fmessenger; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4SteppingVerboseWithUnits::SetManager(G4SteppingManager* const fMan) { fManager = fMan; - fmessenger = new G4GenericMessenger(this,"/tracking/", - "precision of verbose output"); - auto& cmd = fmessenger->DeclareProperty("setVerbosePrecision",fprec, - "set precision of verbose output"); - cmd.SetStates(G4State_PreInit,G4State_Idle); + fmessenger = new G4GenericMessenger(this, "/tracking/", "precision of verbose output"); + auto& cmd = + fmessenger->DeclareProperty("setVerbosePrecision", fprec, "set precision of verbose output"); + cmd.SetStates(G4State_PreInit, G4State_Idle); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4SteppingVerboseWithUnits::TrackingStarted() -{ - CopyState(); - G4long oldprec = G4cout.precision(fprec); - - // Step zero - // - if( verboseLevel > 0 ) - { - G4cout << std::setw( 5) << "Step#" << " " - << std::setw(fprec+3) << "X" << " " - << std::setw(fprec+3) << "Y" << " " - << std::setw(fprec+3) << "Z" << " " - << std::setw(fprec+6) << "KineE" << " " - << std::setw(fprec+10) << "dEStep" << " " - << std::setw(fprec+7) << "StepLeng" - << std::setw(fprec+7) << "TrakLeng" - << std::setw( 10) << "Volume" << " " - << std::setw( 10) << "Process" << G4endl; - - G4cout << std::setw(5) << fTrack->GetCurrentStepNumber() << " " - << std::setw(fprec+3) << G4BestUnit(fTrack->GetPosition().x(),"Length") - << std::setw(fprec+3) << G4BestUnit(fTrack->GetPosition().y(),"Length") - << std::setw(fprec+3) << G4BestUnit(fTrack->GetPosition().z(),"Length") - << std::setw(fprec+3) << G4BestUnit(fTrack->GetKineticEnergy(),"Energy") - << std::setw(fprec+7) << G4BestUnit(fStep->GetTotalEnergyDeposit(),"Energy") - << std::setw(fprec+3) << G4BestUnit(fStep->GetStepLength(),"Length") - << std::setw(fprec+3) << G4BestUnit(fTrack->GetTrackLength(),"Length") - << std::setw(10) << fTrack->GetVolume()->GetName() - << std::setw( 9) << " initStep" << G4endl; +{ + CopyState(); + G4long oldprec = G4cout.precision(fprec); + + // Step zero + // + if (verboseLevel > 0) { + G4cout << std::setw(5) << "Step#" + << " " << std::setw(fprec + 3) << "X" + << " " << std::setw(fprec + 3) << "Y" + << " " << std::setw(fprec + 3) << "Z" + << " " << std::setw(fprec + 6) << "KineE" + << " " << std::setw(fprec + 10) << "dEStep" + << " " << std::setw(fprec + 7) << "StepLeng" << std::setw(fprec + 7) << "TrakLeng" + << std::setw(10) << "Volume" + << " " << std::setw(10) << "Process" << G4endl; + + G4cout << std::setw(5) << fTrack->GetCurrentStepNumber() << " " << std::setw(fprec + 3) + << G4BestUnit(fTrack->GetPosition().x(), "Length") << std::setw(fprec + 3) + << G4BestUnit(fTrack->GetPosition().y(), "Length") << std::setw(fprec + 3) + << G4BestUnit(fTrack->GetPosition().z(), "Length") << std::setw(fprec + 3) + << G4BestUnit(fTrack->GetKineticEnergy(), "Energy") << std::setw(fprec + 7) + << G4BestUnit(fStep->GetTotalEnergyDeposit(), "Energy") << std::setw(fprec + 3) + << G4BestUnit(fStep->GetStepLength(), "Length") << std::setw(fprec + 3) + << G4BestUnit(fTrack->GetTrackLength(), "Length") << std::setw(10) + << fTrack->GetVolume()->GetName() << std::setw(9) << " initStep" << G4endl; } G4cout.precision(oldprec); } @@ -106,69 +96,54 @@ void G4SteppingVerboseWithUnits::TrackingStarted() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4SteppingVerboseWithUnits::StepInfo() -{ - CopyState(); - G4long oldprec = G4cout.precision(fprec); - - if( verboseLevel >= 1 ) - { - if( verboseLevel >= 4 ) VerboseTrack(); - if( verboseLevel >= 3 ) - { - G4cout << G4endl; - G4cout << std::setw(5) << "#Step#" << " " - << std::setw(fprec+3) << "X" << " " - << std::setw(fprec+3) << "Y" << " " - << std::setw(fprec+3) << "Z" << " " - << std::setw(fprec+6) << "KineE" << " " - << std::setw(fprec+10) << "dEStep" << " " - << std::setw(fprec+7) << "StepLeng" - << std::setw(fprec+7) << "TrakLeng" - << std::setw(10) << "Volume" << " " - << std::setw(10) << "Process" << G4endl; +{ + CopyState(); + G4long oldprec = G4cout.precision(fprec); + + if (verboseLevel >= 1) { + if (verboseLevel >= 4) VerboseTrack(); + if (verboseLevel >= 3) { + G4cout << G4endl; + G4cout << std::setw(5) << "#Step#" + << " " << std::setw(fprec + 3) << "X" + << " " << std::setw(fprec + 3) << "Y" + << " " << std::setw(fprec + 3) << "Z" + << " " << std::setw(fprec + 6) << "KineE" + << " " << std::setw(fprec + 10) << "dEStep" + << " " << std::setw(fprec + 7) << "StepLeng" << std::setw(fprec + 7) << "TrakLeng" + << std::setw(10) << "Volume" + << " " << std::setw(10) << "Process" << G4endl; } - G4cout << std::setw(5) << fTrack->GetCurrentStepNumber() << " " - << std::setw(fprec+3) << G4BestUnit(fTrack->GetPosition().x(),"Length") - << std::setw(fprec+3) << G4BestUnit(fTrack->GetPosition().y(),"Length") - << std::setw(fprec+3) << G4BestUnit(fTrack->GetPosition().z(),"Length") - << std::setw(fprec+3) << G4BestUnit(fTrack->GetKineticEnergy(),"Energy") - << std::setw(fprec+7) << G4BestUnit(fStep->GetTotalEnergyDeposit(),"Energy") - << std::setw(fprec+3) << G4BestUnit(fStep->GetStepLength(),"Length") - << std::setw(fprec+3) << G4BestUnit(fTrack->GetTrackLength(),"Length") - << std::setw(10) << fTrack->GetVolume()->GetName(); - - const G4VProcess* process - = fStep->GetPostStepPoint()->GetProcessDefinedStep(); + G4cout << std::setw(5) << fTrack->GetCurrentStepNumber() << " " << std::setw(fprec + 3) + << G4BestUnit(fTrack->GetPosition().x(), "Length") << std::setw(fprec + 3) + << G4BestUnit(fTrack->GetPosition().y(), "Length") << std::setw(fprec + 3) + << G4BestUnit(fTrack->GetPosition().z(), "Length") << std::setw(fprec + 3) + << G4BestUnit(fTrack->GetKineticEnergy(), "Energy") << std::setw(fprec + 7) + << G4BestUnit(fStep->GetTotalEnergyDeposit(), "Energy") << std::setw(fprec + 3) + << G4BestUnit(fStep->GetStepLength(), "Length") << std::setw(fprec + 3) + << G4BestUnit(fTrack->GetTrackLength(), "Length") << std::setw(10) + << fTrack->GetVolume()->GetName(); + + const G4VProcess* process = fStep->GetPostStepPoint()->GetProcessDefinedStep(); G4String procName = " UserLimit"; if (process != nullptr) procName = process->GetProcessName(); if (fStepStatus == fWorldBoundary) procName = "OutOfWorld"; - G4cout << " " << std::setw( 9) << procName; + G4cout << " " << std::setw(9) << procName; G4cout << G4endl; - if (verboseLevel == 2) - { - const std::vector* secondary - = fStep->GetSecondaryInCurrentStep(); - std::size_t nbtrk = (*secondary).size(); - if (nbtrk) - { + if (verboseLevel == 2) { + const std::vector* secondary = fStep->GetSecondaryInCurrentStep(); + if (! secondary->empty()) { G4cout << "\n :----- List of secondaries ----------------" << G4endl; G4cout.precision(4); - for (std::size_t lp=0; lp<(*secondary).size(); ++lp) - { - G4cout << " " - << std::setw(13) - << (*secondary)[lp]->GetDefinition()->GetParticleName() - << ": energy =" - << std::setw(6) - << G4BestUnit((*secondary)[lp]->GetKineticEnergy(),"Energy") - << " time =" - << std::setw(6) - << G4BestUnit((*secondary)[lp]->GetGlobalTime(),"Time"); + for (auto lp : *secondary) { + G4cout << " " << std::setw(13) << lp->GetDefinition()->GetParticleName() + << ": energy =" << std::setw(6) << G4BestUnit(lp->GetKineticEnergy(), "Energy") + << " time =" << std::setw(6) << G4BestUnit(lp->GetGlobalTime(), "Time"); G4cout << G4endl; } - + G4cout << " :------------------------------------------\n" << G4endl; } } @@ -183,59 +158,44 @@ void G4SteppingVerboseWithUnits::AtRestDoItInvoked() G4VProcess* ptProcManager; CopyState(); - if(verboseLevel >= 3) - { - G4int npt=0; + if (verboseLevel >= 3) { + G4int npt = 0; G4cout << " **List of AtRestDoIt invoked:" << G4endl; - for(std::size_t np=0; npGetProcessName() - << " (Forced)" << G4endl; + G4cout << " # " << npt << " : " << ptProcManager->GetProcessName() << " (Forced)" + << G4endl; } - else if ( (*fSelectedAtRestDoItVector)[npGPIL] == G4ForceCondition::NotForced ) - { - ++npt; + else if ((*fSelectedAtRestDoItVector)[npGPIL] == G4ForceCondition::NotForced) { + ++npt; ptProcManager = (*fAtRestDoItVector)[(G4int)np]; - G4cout << " # " << npt << " : " << ptProcManager->GetProcessName() - << G4endl; + G4cout << " # " << npt << " : " << ptProcManager->GetProcessName() << G4endl; } } - + G4cout << " Generated secondaries = " << fN2ndariesAtRestDoIt << G4endl; - - if( fN2ndariesAtRestDoIt > 0 ) - { + + if (fN2ndariesAtRestDoIt > 0) { G4cout << " -- List of secondaries generated : " - << "(x,y,z,kE,t,PID) --" << G4endl; - for( std::size_t lp1=(*fSecondary).size()-fN2ndariesAtRestDoIt; - lp1<(*fSecondary).size(); ++lp1) + << "(x,y,z,kE,t,PID) --" << G4endl; + for (std::size_t lp1 = (*fSecondary).size() - fN2ndariesAtRestDoIt; + lp1 < (*fSecondary).size(); ++lp1) { - G4cout << " " - << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(),"Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(),"Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(),"Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(),"Energy") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetGlobalTime(),"Time") - << " " << std::setw(18) - << (*fSecondary)[lp1]->GetDefinition()->GetParticleName() - << G4endl; + G4cout << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(), "Length") << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(), "Length") << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(), "Length") << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(), "Energy") << " " + << std::setw(9) << G4BestUnit((*fSecondary)[lp1]->GetGlobalTime(), "Time") << " " + << std::setw(18) << (*fSecondary)[lp1]->GetDefinition()->GetParticleName() << G4endl; } } } - - if( verboseLevel >= 4 ) - { + + if (verboseLevel >= 4) { ShowStep(); G4cout << G4endl; } @@ -249,47 +209,33 @@ void G4SteppingVerboseWithUnits::AlongStepDoItAllDone() CopyState(); - if(verboseLevel >= 3) - { + if (verboseLevel >= 3) { G4cout << G4endl; G4cout << " >>AlongStepDoIt (after all invocations):" << G4endl; G4cout << " ++List of invoked processes " << G4endl; - for(std::size_t ci=0; ciGetProcessName() << G4endl; } } ShowStep(); G4cout << G4endl; - G4cout << " ++List of secondaries generated " + G4cout << " ++List of secondaries generated " << "(x,y,z,kE,t,PID):" - << " No. of secondaries = " - << (*fSecondary).size() << G4endl; - - if((*fSecondary).size()>0) - { - for(std::size_t lp1=0; lp1<(*fSecondary).size(); ++lp1) - { - G4cout << " " - << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(),"Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(),"Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(),"Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(),"Energy") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetGlobalTime(),"Time") - << " " << std::setw(18) - << (*fSecondary)[lp1]->GetDefinition()->GetParticleName() - << G4endl; + << " No. of secondaries = " << (*fSecondary).size() << G4endl; + + if (! (*fSecondary).empty()) { + for (auto& lp1 : *fSecondary) { + G4cout << " " << std::setw(9) << G4BestUnit(lp1->GetPosition().x(), "Length") << " " + << std::setw(9) << G4BestUnit(lp1->GetPosition().y(), "Length") << " " + << std::setw(9) << G4BestUnit(lp1->GetPosition().z(), "Length") << " " + << std::setw(9) << G4BestUnit(lp1->GetKineticEnergy(), "Energy") << " " + << std::setw(9) << G4BestUnit(lp1->GetGlobalTime(), "Time") << " " << std::setw(18) + << lp1->GetDefinition()->GetParticleName() << G4endl; } } } @@ -303,36 +249,29 @@ void G4SteppingVerboseWithUnits::PostStepDoItAllDone() CopyState(); - if( (fStepStatus == fPostStepDoItProc) | - (fCondition == Forced) | - (fCondition == Conditionally) | - (fCondition == ExclusivelyForced) | - (fCondition == StronglyForced) ) + if ((static_cast(fStepStatus == fPostStepDoItProc) | static_cast(fCondition == Forced) | + static_cast(fCondition == Conditionally) | + static_cast(fCondition == ExclusivelyForced) | + static_cast(fCondition == StronglyForced)) != 0) { - if(verboseLevel >= 3) - { - G4int npt=0; + if (verboseLevel >= 3) { + G4int npt = 0; G4cout << G4endl; G4cout << " **PostStepDoIt (after all invocations):" << G4endl; G4cout << " ++List of invoked processes " << G4endl; - for(std::size_t np=0; npGetProcessName() - << " (Forced)" << G4endl; + G4cout << " " << npt << ") " << ptProcManager->GetProcessName() << " (Forced)" + << G4endl; } - else if ( (*fSelectedPostStepDoItVector)[npGPIL] == G4ForceCondition::NotForced ) - { + else if ((*fSelectedPostStepDoItVector)[npGPIL] == G4ForceCondition::NotForced) { ++npt; ptProcManager = (*fPostStepDoItVector)[(G4int)np]; - G4cout << " " << npt << ") " << ptProcManager->GetProcessName() - << G4endl; + G4cout << " " << npt << ") " << ptProcManager->GetProcessName() << G4endl; } } @@ -340,29 +279,17 @@ void G4SteppingVerboseWithUnits::PostStepDoItAllDone() G4cout << G4endl; G4cout << " ++List of secondaries generated " << "(x,y,z,kE,t,PID):" - << " No. of secondaries = " - << (*fSecondary).size() << G4endl; - G4cout << " [Note]Secondaries from AlongStepDoIt included." - << G4endl; - - if((*fSecondary).size()>0) - { - for(std::size_t lp1=0; lp1<(*fSecondary).size(); ++lp1) - { - G4cout << " " - << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(), "Energy") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetGlobalTime(), "Time") - << " " << std::setw(18) - << (*fSecondary)[lp1]->GetDefinition()->GetParticleName() - << G4endl; + << " No. of secondaries = " << (*fSecondary).size() << G4endl; + G4cout << " [Note]Secondaries from AlongStepDoIt included." << G4endl; + + if (! (*fSecondary).empty()) { + for (auto& lp1 : *fSecondary) { + G4cout << " " << std::setw(9) << G4BestUnit(lp1->GetPosition().x(), "Length") << " " + << std::setw(9) << G4BestUnit(lp1->GetPosition().y(), "Length") << " " + << std::setw(9) << G4BestUnit(lp1->GetPosition().z(), "Length") << " " + << std::setw(9) << G4BestUnit(lp1->GetKineticEnergy(), "Energy") << " " + << std::setw(9) << G4BestUnit(lp1->GetGlobalTime(), "Time") << " " << std::setw(18) + << lp1->GetDefinition()->GetParticleName() << G4endl; } } } @@ -375,11 +302,8 @@ void G4SteppingVerboseWithUnits::DPSLStarted() { CopyState(); - if( verboseLevel > 5 ) - { - G4cout << G4endl - << " >>DefinePhysicalStepLength (List of proposed StepLengths): " - << G4endl; + if (verboseLevel > 5) { + G4cout << G4endl << " >>DefinePhysicalStepLength (List of proposed StepLengths): " << G4endl; } } @@ -389,12 +313,11 @@ void G4SteppingVerboseWithUnits::DPSLUserLimit() { CopyState(); - if( verboseLevel > 5 ) - { + if (verboseLevel > 5) { G4cout << G4endl << G4endl; G4cout << "=== Defined Physical Step Length (DPSL)" << G4endl; - G4cout << " ++ProposedStep(UserLimit) = " - << std::setw( 9) << G4BestUnit(physIntLength , "Length") + G4cout << " ++ProposedStep(UserLimit) = " << std::setw(9) + << G4BestUnit(physIntLength, "Length") << " : ProcName = User defined maximum allowed Step" << G4endl; } } @@ -405,29 +328,23 @@ void G4SteppingVerboseWithUnits::DPSLPostStep() { CopyState(); - if( verboseLevel > 5 ) - { - G4cout << " ++ProposedStep(PostStep ) = " - << std::setw( 9) << G4BestUnit(physIntLength , "Length") + if (verboseLevel > 5) { + G4cout << " ++ProposedStep(PostStep ) = " << std::setw(9) + << G4BestUnit(physIntLength, "Length") << " : ProcName = " << fCurrentProcess->GetProcessName() << " ("; - if(fCondition==ExclusivelyForced) - { + if (fCondition == ExclusivelyForced) { G4cout << "ExclusivelyForced)" << G4endl; } - else if(fCondition==StronglyForced) - { + else if (fCondition == StronglyForced) { G4cout << "StronglyForced)" << G4endl; } - else if(fCondition==Conditionally) - { + else if (fCondition == Conditionally) { G4cout << "Conditionally)" << G4endl; } - else if(fCondition==Forced) - { + else if (fCondition == Forced) { G4cout << "Forced)" << G4endl; } - else - { + else { G4cout << "No ForceCondition)" << G4endl; } } @@ -439,23 +356,17 @@ void G4SteppingVerboseWithUnits::DPSLAlongStep() { CopyState(); - if( verboseLevel > 5 ) - { - G4cout << " ++ProposedStep(AlongStep) = " - << std::setw( 9) << G4BestUnit(physIntLength , "Length") - << " : ProcName = " - << fCurrentProcess->GetProcessName() - << " ("; - if(fGPILSelection==CandidateForSelection) - { + if (verboseLevel > 5) { + G4cout << " ++ProposedStep(AlongStep) = " << std::setw(9) + << G4BestUnit(physIntLength, "Length") + << " : ProcName = " << fCurrentProcess->GetProcessName() << " ("; + if (fGPILSelection == CandidateForSelection) { G4cout << "CandidateForSelection)" << G4endl; } - else if(fGPILSelection==NotCandidateForSelection) - { + else if (fGPILSelection == NotCandidateForSelection) { G4cout << "NotCandidateForSelection)" << G4endl; } - else - { + else { G4cout << "?!?)" << G4endl; } } @@ -464,49 +375,37 @@ void G4SteppingVerboseWithUnits::DPSLAlongStep() //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... void G4SteppingVerboseWithUnits::AlongStepDoItOneByOne() -{ +{ CopyState(); - if(verboseLevel >= 4) - { + if (verboseLevel >= 4) { G4cout << G4endl; G4cout << " >>AlongStepDoIt (process by process): " - << " Process Name = " - << fCurrentProcess->GetProcessName() << G4endl; + << " Process Name = " << fCurrentProcess->GetProcessName() << G4endl; ShowStep(); G4cout << " " << "!Note! Safety of PostStep is only valid " - << "after all DoIt invocations." - << G4endl; + << "after all DoIt invocations." << G4endl; - VerboseParticleChange(); + VerboseParticleChange(); G4cout << G4endl; - G4cout << " ++List of secondaries generated " + G4cout << " ++List of secondaries generated " << "(x,y,z,kE,t,PID):" - << " No. of secondaries = " - << fN2ndariesAlongStepDoIt << G4endl; + << " No. of secondaries = " << fN2ndariesAlongStepDoIt << G4endl; - if(fN2ndariesAlongStepDoIt>0) - { - for(std::size_t lp1=(*fSecondary).size()-fN2ndariesAlongStepDoIt; - lp1<(*fSecondary).size(); ++lp1) + if (fN2ndariesAlongStepDoIt > 0) { + for (std::size_t lp1 = (*fSecondary).size() - fN2ndariesAlongStepDoIt; + lp1 < (*fSecondary).size(); ++lp1) { - G4cout << " " - << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(), "Energy") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetGlobalTime(), "Time") - << " " << std::setw(18) - << (*fSecondary)[lp1]->GetDefinition()->GetParticleName() - << G4endl; + G4cout << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(), "Length") << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(), "Length") << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(), "Length") << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(), "Energy") << " " + << std::setw(9) << G4BestUnit((*fSecondary)[lp1]->GetGlobalTime(), "Time") << " " + << std::setw(18) << (*fSecondary)[lp1]->GetDefinition()->GetParticleName() << G4endl; } } } @@ -518,42 +417,31 @@ void G4SteppingVerboseWithUnits::PostStepDoItOneByOne() { CopyState(); - if(verboseLevel >= 4) - { + if (verboseLevel >= 4) { G4cout << G4endl; G4cout << " >>PostStepDoIt (process by process): " - << " Process Name = " - << fCurrentProcess->GetProcessName() << G4endl; + << " Process Name = " << fCurrentProcess->GetProcessName() << G4endl; ShowStep(); G4cout << G4endl; - VerboseParticleChange(); + VerboseParticleChange(); G4cout << G4endl; - G4cout << " ++List of secondaries generated " + G4cout << " ++List of secondaries generated " << "(x,y,z,kE,t,PID):" - << " No. of secondaries = " - << fN2ndariesPostStepDoIt << G4endl; + << " No. of secondaries = " << fN2ndariesPostStepDoIt << G4endl; - if(fN2ndariesPostStepDoIt>0) - { - for(std::size_t lp1=(*fSecondary).size()-fN2ndariesPostStepDoIt; - lp1<(*fSecondary).size(); ++lp1) + if (fN2ndariesPostStepDoIt > 0) { + for (std::size_t lp1 = (*fSecondary).size() - fN2ndariesPostStepDoIt; + lp1 < (*fSecondary).size(); ++lp1) { - G4cout << " " - << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(), "Length") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(), "Energy") - << " " << std::setw( 9) - << G4BestUnit((*fSecondary)[lp1]->GetGlobalTime(), "Time") - << " " << std::setw(18) - << (*fSecondary)[lp1]->GetDefinition()->GetParticleName() - << G4endl; + G4cout << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().x(), "Length") << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().y(), "Length") << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetPosition().z(), "Length") << " " << std::setw(9) + << G4BestUnit((*fSecondary)[lp1]->GetKineticEnergy(), "Energy") << " " + << std::setw(9) << G4BestUnit((*fSecondary)[lp1]->GetGlobalTime(), "Time") << " " + << std::setw(18) << (*fSecondary)[lp1]->GetDefinition()->GetParticleName() << G4endl; } } } @@ -569,114 +457,84 @@ void G4SteppingVerboseWithUnits::VerboseTrack() G4cout << " ++G4Track Information " << G4endl; G4long oldprec = G4cout.precision(fprec); - G4cout << " -----------------------------------------------" << G4endl; - G4cout << " G4Track Information " << std::setw(20) << G4endl; + G4cout << " G4Track Information " << std::setw(20) << G4endl; G4cout << " -----------------------------------------------" << G4endl; - G4cout << " Step number : " - << std::setw(20) << fTrack->GetCurrentStepNumber() << G4endl; - G4cout << " Position - x : " - << std::setw(20) << G4BestUnit(fTrack->GetPosition().x(), "Length") - << G4endl; - G4cout << " Position - y : " - << std::setw(20) << G4BestUnit(fTrack->GetPosition().y(), "Length") - << G4endl; - G4cout << " Position - z : " - << std::setw(20) << G4BestUnit(fTrack->GetPosition().z(), "Length") - << G4endl; - G4cout << " Global Time : " - << std::setw(20) << G4BestUnit(fTrack->GetGlobalTime(), "Time") - << G4endl; - G4cout << " Local Time : " - << std::setw(20) << G4BestUnit(fTrack->GetLocalTime(), "Time") - << G4endl; - G4cout << " Momentum Direct - x : " - << std::setw(20) << fTrack->GetMomentumDirection().x() - << G4endl; - G4cout << " Momentum Direct - y : " - << std::setw(20) << fTrack->GetMomentumDirection().y() - << G4endl; - G4cout << " Momentum Direct - z : " - << std::setw(20) << fTrack->GetMomentumDirection().z() - << G4endl; - G4cout << " Kinetic Energy : " - << std::setw(20) << G4BestUnit(fTrack->GetKineticEnergy(), "Energy") + G4cout << " Step number : " << std::setw(20) << fTrack->GetCurrentStepNumber() << G4endl; - G4cout << " Polarization - x : " - << std::setw(20) << fTrack->GetPolarization().x() + G4cout << " Position - x : " << std::setw(20) + << G4BestUnit(fTrack->GetPosition().x(), "Length") << G4endl; + G4cout << " Position - y : " << std::setw(20) + << G4BestUnit(fTrack->GetPosition().y(), "Length") << G4endl; + G4cout << " Position - z : " << std::setw(20) + << G4BestUnit(fTrack->GetPosition().z(), "Length") << G4endl; + G4cout << " Global Time : " << std::setw(20) + << G4BestUnit(fTrack->GetGlobalTime(), "Time") << G4endl; + G4cout << " Local Time : " << std::setw(20) + << G4BestUnit(fTrack->GetLocalTime(), "Time") << G4endl; + G4cout << " Momentum Direct - x : " << std::setw(20) << fTrack->GetMomentumDirection().x() << G4endl; - G4cout << " Polarization - y : " - << std::setw(20) << fTrack->GetPolarization().y() + G4cout << " Momentum Direct - y : " << std::setw(20) << fTrack->GetMomentumDirection().y() << G4endl; - G4cout << " Polarization - z : " - << std::setw(20) << fTrack->GetPolarization().z() + G4cout << " Momentum Direct - z : " << std::setw(20) << fTrack->GetMomentumDirection().z() << G4endl; - G4cout << " Track Length : " - << std::setw(20) << G4BestUnit(fTrack->GetTrackLength(), "Length") + G4cout << " Kinetic Energy : " << std::setw(20) + << G4BestUnit(fTrack->GetKineticEnergy(), "Energy") << G4endl; + G4cout << " Polarization - x : " << std::setw(20) << fTrack->GetPolarization().x() << G4endl; - G4cout << " Track ID # : " - << std::setw(20) << fTrack->GetTrackID() + G4cout << " Polarization - y : " << std::setw(20) << fTrack->GetPolarization().y() << G4endl; - G4cout << " Parent Track ID # : " - << std::setw(20) << fTrack->GetParentID() + G4cout << " Polarization - z : " << std::setw(20) << fTrack->GetPolarization().z() << G4endl; - G4cout << " Next Volume : " - << std::setw(20); - if (fTrack->GetNextVolume() != 0) - G4cout << fTrack->GetNextVolume()->GetName() << " "; - else G4cout << "OutOfWorld" << " "; + G4cout << " Track Length : " << std::setw(20) + << G4BestUnit(fTrack->GetTrackLength(), "Length") << G4endl; + G4cout << " Track ID # : " << std::setw(20) << fTrack->GetTrackID() << G4endl; + G4cout << " Parent Track ID # : " << std::setw(20) << fTrack->GetParentID() << G4endl; + G4cout << " Next Volume : " << std::setw(20); + if (fTrack->GetNextVolume() != nullptr) + G4cout << fTrack->GetNextVolume()->GetName() << " "; + else + G4cout << "OutOfWorld" + << " "; G4cout << G4endl; - G4cout << " Track Status : " - << std::setw(20); - if( fTrack->GetTrackStatus() == fAlive ) + G4cout << " Track Status : " << std::setw(20); + if (fTrack->GetTrackStatus() == fAlive) G4cout << " Alive"; - else if( fTrack->GetTrackStatus() == fStopButAlive ) + else if (fTrack->GetTrackStatus() == fStopButAlive) G4cout << " StopButAlive"; - else if( fTrack->GetTrackStatus() == fStopAndKill ) + else if (fTrack->GetTrackStatus() == fStopAndKill) G4cout << " StopAndKill"; - else if( fTrack->GetTrackStatus() == fKillTrackAndSecondaries ) + else if (fTrack->GetTrackStatus() == fKillTrackAndSecondaries) G4cout << " KillTrackAndSecondaries"; - else if( fTrack->GetTrackStatus() == fSuspend ) + else if (fTrack->GetTrackStatus() == fSuspend) G4cout << " Suspend"; - else if( fTrack->GetTrackStatus() == fPostponeToNextEvent ) + else if (fTrack->GetTrackStatus() == fPostponeToNextEvent) G4cout << " PostponeToNextEvent"; G4cout << G4endl; - G4cout << " Vertex - x : " - << std::setw(20) - << G4BestUnit(fTrack->GetVertexPosition().x(),"Length") - << G4endl; - G4cout << " Vertex - y : " - << std::setw(20) - << G4BestUnit(fTrack->GetVertexPosition().y(),"Length") - << G4endl; - G4cout << " Vertex - z : " - << std::setw(20) - << G4BestUnit(fTrack->GetVertexPosition().z(),"Length") - << G4endl; - G4cout << " Vertex - Px (MomDir): " - << std::setw(20) << fTrack->GetVertexMomentumDirection().x() - << G4endl; - G4cout << " Vertex - Py (MomDir): " - << std::setw(20) << fTrack->GetVertexMomentumDirection().y() - << G4endl; - G4cout << " Vertex - Pz (MomDir): " - << std::setw(20) << fTrack->GetVertexMomentumDirection().z() - << G4endl; - G4cout << " Vertex - KineE : " - << std::setw(20) - << G4BestUnit(fTrack->GetVertexKineticEnergy(),"Energy") - << G4endl; - - G4cout << " Creator Process : " - << std::setw(20); - if (fTrack->GetCreatorProcess() == 0) + G4cout << " Vertex - x : " << std::setw(20) + << G4BestUnit(fTrack->GetVertexPosition().x(), "Length") << G4endl; + G4cout << " Vertex - y : " << std::setw(20) + << G4BestUnit(fTrack->GetVertexPosition().y(), "Length") << G4endl; + G4cout << " Vertex - z : " << std::setw(20) + << G4BestUnit(fTrack->GetVertexPosition().z(), "Length") << G4endl; + G4cout << " Vertex - Px (MomDir): " << std::setw(20) + << fTrack->GetVertexMomentumDirection().x() << G4endl; + G4cout << " Vertex - Py (MomDir): " << std::setw(20) + << fTrack->GetVertexMomentumDirection().y() << G4endl; + G4cout << " Vertex - Pz (MomDir): " << std::setw(20) + << fTrack->GetVertexMomentumDirection().z() << G4endl; + G4cout << " Vertex - KineE : " << std::setw(20) + << G4BestUnit(fTrack->GetVertexKineticEnergy(), "Energy") << G4endl; + + G4cout << " Creator Process : " << std::setw(20); + if (fTrack->GetCreatorProcess() == nullptr) G4cout << " Event Generator" << G4endl; else G4cout << fTrack->GetCreatorProcess()->GetProcessName() << G4endl; - G4cout << " -----------------------------------------------" << G4endl; - G4cout.precision(oldprec); + G4cout << " -----------------------------------------------" << G4endl; + G4cout.precision(oldprec); } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... @@ -692,212 +550,145 @@ void G4SteppingVerboseWithUnits::VerboseParticleChange() void G4SteppingVerboseWithUnits::ShowStep() const { - // Show header - G4cout << G4endl; - G4cout << " ++G4Step Information " << G4endl; - G4long oldprc = G4cout.precision(fprec); - - // Show G4Step specific information - G4cout << " Address of G4Track : " - << fStep->GetTrack() << G4endl; - G4cout << " Step Length : " - << G4BestUnit(fStep->GetTrack()->GetStepLength(), "Length") << G4endl; - G4cout << " Energy Deposit : " - << G4BestUnit(fStep->GetTotalEnergyDeposit(), "Energy") << G4endl; - - // Show G4StepPoint specific information - G4cout << " -------------------------------------------------------" - << "----------------" << G4endl; - G4cout << " StepPoint Information " - << std::setw(20) << "PreStep" << std::setw(20) << "PostStep" << G4endl; - G4cout << " -------------------------------------------------------" - << "----------------" << G4endl; - G4cout << " Position - x : " - << std::setw(17) - << G4BestUnit(fStep->GetPreStepPoint()->GetPosition().x(), "Length") - << std::setw(17) - << G4BestUnit(fStep->GetPostStepPoint()->GetPosition().x(), "Length") - << G4endl; - G4cout << " Position - y : " - << std::setw(17) - << G4BestUnit(fStep->GetPreStepPoint()->GetPosition().y(), "Length") - << std::setw(17) - << G4BestUnit(fStep->GetPostStepPoint()->GetPosition().y(), "Length") - << G4endl; - G4cout << " Position - z : " - << std::setw(17) - << G4BestUnit(fStep->GetPreStepPoint()->GetPosition().z(), "Length") - << std::setw(17) - << G4BestUnit(fStep->GetPostStepPoint()->GetPosition().z(), "Length") - << G4endl; - G4cout << " Global Time : " - << std::setw(17) - << G4BestUnit(fStep->GetPreStepPoint()->GetGlobalTime(), "Time") - << std::setw(17) - << G4BestUnit(fStep->GetPostStepPoint()->GetGlobalTime(), "Time") - << G4endl; - G4cout << " Local Time : " - << std::setw(17) - << G4BestUnit(fStep->GetPreStepPoint()->GetLocalTime(), "Time") - << std::setw(17) - << G4BestUnit(fStep->GetPostStepPoint()->GetLocalTime(), "Time") - << G4endl; - G4cout << " Proper Time : " - << std::setw(17) - << G4BestUnit(fStep->GetPreStepPoint()->GetProperTime(), "Time") - << std::setw(17) - << G4BestUnit(fStep->GetPostStepPoint()->GetProperTime(), "Time") - << G4endl; - G4cout << " Momentum Direct - x : " - << std::setw(20) << fStep->GetPreStepPoint()->GetMomentumDirection().x() - << std::setw(20) << fStep->GetPostStepPoint()->GetMomentumDirection().x() - << G4endl; - G4cout << " Momentum Direct - y : " - << std::setw(20) << fStep->GetPreStepPoint()->GetMomentumDirection().y() - << std::setw(20) << fStep->GetPostStepPoint()->GetMomentumDirection().y() - << G4endl; - G4cout << " Momentum Direct - z : " - << std::setw(20) << fStep->GetPreStepPoint()->GetMomentumDirection().z() - << std::setw(20) << fStep->GetPostStepPoint()->GetMomentumDirection().z() - << G4endl; - G4cout << " Momentum - x : " - << std::setw(14) - << G4BestUnit(fStep->GetPreStepPoint()->GetMomentum().x(),"Momentum") - << std::setw(14) - << G4BestUnit(fStep->GetPostStepPoint()->GetMomentum().x(),"Momentum") - << G4endl; - G4cout << " Momentum - y : " - << std::setw(14) - << G4BestUnit(fStep->GetPreStepPoint()->GetMomentum().y(),"Momentum") - << std::setw(14) - << G4BestUnit(fStep->GetPostStepPoint()->GetMomentum().y(),"Momentum") - << G4endl; - G4cout << " Momentum - z : " - << std::setw(14) - << G4BestUnit(fStep->GetPreStepPoint()->GetMomentum().z(),"Momentum") - << std::setw(14) - << G4BestUnit(fStep->GetPostStepPoint()->GetMomentum().z(),"Momentum") - << G4endl; - G4cout << " Total Energy : " - << std::setw(16) - << G4BestUnit(fStep->GetPreStepPoint()->GetTotalEnergy(),"Energy") - << std::setw(16) - << G4BestUnit(fStep->GetPostStepPoint()->GetTotalEnergy(),"Energy") - << G4endl; - G4cout << " Kinetic Energy : " - << std::setw(16) - << G4BestUnit(fStep->GetPreStepPoint()->GetKineticEnergy(),"Energy") - << std::setw(16) - << G4BestUnit(fStep->GetPostStepPoint()->GetKineticEnergy(),"Energy") - << G4endl; - G4cout << " Velocity : " - << std::setw(14) - << G4BestUnit(fStep->GetPreStepPoint()->GetVelocity(),"Velocity") - << std::setw(14) - << G4BestUnit(fStep->GetPostStepPoint()->GetVelocity(),"Velocity") - << G4endl; - G4cout << " Volume Name : " - << std::setw(20) - << fStep->GetPreStepPoint()->GetPhysicalVolume()->GetName(); - G4String volName = "OutOfWorld"; - if (fStep->GetPostStepPoint()->GetPhysicalVolume()) - volName = fStep->GetPostStepPoint()->GetPhysicalVolume()->GetName(); - G4cout << std::setw(20) << volName - << G4endl; - G4cout << " Safety : " - << std::setw(17) - << G4BestUnit(fStep->GetPreStepPoint()->GetSafety(),"Length") - << std::setw(17) - << G4BestUnit(fStep->GetPostStepPoint()->GetSafety(),"Length") - << G4endl; - G4cout << " Polarization - x : " - << std::setw(20) << fStep->GetPreStepPoint()->GetPolarization().x() - << std::setw(20) << fStep->GetPostStepPoint()->GetPolarization().x() - << G4endl; - G4cout << " Polarization - y : " - << std::setw(20) << fStep->GetPreStepPoint()->GetPolarization().y() - << std::setw(20) << fStep->GetPostStepPoint()->GetPolarization().y() - << G4endl; - G4cout << " Polarization - Z : " - << std::setw(20) << fStep->GetPreStepPoint()->GetPolarization().z() - << std::setw(20) << fStep->GetPostStepPoint()->GetPolarization().z() - << G4endl; - G4cout << " Weight : " - << std::setw(20) << fStep->GetPreStepPoint()->GetWeight() - << std::setw(20) << fStep->GetPostStepPoint()->GetWeight() - << G4endl; - G4cout << " Step Status : " ; - G4StepStatus tStepStatus = fStep->GetPreStepPoint()->GetStepStatus(); - if( tStepStatus == fGeomBoundary ) - { - G4cout << std::setw(20) << "Geom Limit"; - } - else if ( tStepStatus == fAlongStepDoItProc ) - { - G4cout << std::setw(20) << "AlongStep Proc."; - } - else if ( tStepStatus == fPostStepDoItProc ) - { - G4cout << std::setw(20) << "PostStep Proc"; - } - else if ( tStepStatus == fAtRestDoItProc ) - { - G4cout << std::setw(20) << "AtRest Proc"; - } - else if ( tStepStatus == fUndefined ) - { - G4cout << std::setw(20) << "Undefined"; - } - - tStepStatus = fStep->GetPostStepPoint()->GetStepStatus(); - if( tStepStatus == fGeomBoundary ) - { - G4cout << std::setw(20) << "Geom Limit"; - } - else if ( tStepStatus == fAlongStepDoItProc ) - { - G4cout << std::setw(20) << "AlongStep Proc."; - } - else if ( tStepStatus == fPostStepDoItProc ) - { - G4cout << std::setw(20) << "PostStep Proc"; - } - else if ( tStepStatus == fAtRestDoItProc ) - { - G4cout << std::setw(20) << "AtRest Proc"; - } - else if ( tStepStatus == fUndefined ) - { - G4cout << std::setw(20) << "Undefined"; - } - - G4cout << G4endl; - G4cout << " Process defined Step: " ; - if( fStep->GetPreStepPoint()->GetProcessDefinedStep() == 0 ) - { - G4cout << std::setw(20) << "Undefined"; - } - else - { - G4cout << std::setw(20) - << fStep->GetPreStepPoint() - ->GetProcessDefinedStep()->GetProcessName(); - } - if( fStep->GetPostStepPoint()->GetProcessDefinedStep() == 0) - { - G4cout << std::setw(20) << "Undefined"; - } - else - { - G4cout << std::setw(20) - << fStep->GetPostStepPoint() - ->GetProcessDefinedStep()->GetProcessName(); - } - G4cout.precision(oldprc); - - G4cout << G4endl; - G4cout << " -------------------------------------------------------" - << "----------------" << G4endl; + // Show header + G4cout << G4endl; + G4cout << " ++G4Step Information " << G4endl; + G4long oldprc = G4cout.precision(fprec); + + // Show G4Step specific information + G4cout << " Address of G4Track : " << fStep->GetTrack() << G4endl; + G4cout << " Step Length : " + << G4BestUnit(fStep->GetTrack()->GetStepLength(), "Length") << G4endl; + G4cout << " Energy Deposit : " << G4BestUnit(fStep->GetTotalEnergyDeposit(), "Energy") + << G4endl; + + // Show G4StepPoint specific information + G4cout << " -------------------------------------------------------" + << "----------------" << G4endl; + G4cout << " StepPoint Information " << std::setw(20) << "PreStep" << std::setw(20) + << "PostStep" << G4endl; + G4cout << " -------------------------------------------------------" + << "----------------" << G4endl; + G4cout << " Position - x : " << std::setw(17) + << G4BestUnit(fStep->GetPreStepPoint()->GetPosition().x(), "Length") << std::setw(17) + << G4BestUnit(fStep->GetPostStepPoint()->GetPosition().x(), "Length") << G4endl; + G4cout << " Position - y : " << std::setw(17) + << G4BestUnit(fStep->GetPreStepPoint()->GetPosition().y(), "Length") << std::setw(17) + << G4BestUnit(fStep->GetPostStepPoint()->GetPosition().y(), "Length") << G4endl; + G4cout << " Position - z : " << std::setw(17) + << G4BestUnit(fStep->GetPreStepPoint()->GetPosition().z(), "Length") << std::setw(17) + << G4BestUnit(fStep->GetPostStepPoint()->GetPosition().z(), "Length") << G4endl; + G4cout << " Global Time : " << std::setw(17) + << G4BestUnit(fStep->GetPreStepPoint()->GetGlobalTime(), "Time") << std::setw(17) + << G4BestUnit(fStep->GetPostStepPoint()->GetGlobalTime(), "Time") << G4endl; + G4cout << " Local Time : " << std::setw(17) + << G4BestUnit(fStep->GetPreStepPoint()->GetLocalTime(), "Time") << std::setw(17) + << G4BestUnit(fStep->GetPostStepPoint()->GetLocalTime(), "Time") << G4endl; + G4cout << " Proper Time : " << std::setw(17) + << G4BestUnit(fStep->GetPreStepPoint()->GetProperTime(), "Time") << std::setw(17) + << G4BestUnit(fStep->GetPostStepPoint()->GetProperTime(), "Time") << G4endl; + G4cout << " Momentum Direct - x : " << std::setw(20) + << fStep->GetPreStepPoint()->GetMomentumDirection().x() << std::setw(20) + << fStep->GetPostStepPoint()->GetMomentumDirection().x() << G4endl; + G4cout << " Momentum Direct - y : " << std::setw(20) + << fStep->GetPreStepPoint()->GetMomentumDirection().y() << std::setw(20) + << fStep->GetPostStepPoint()->GetMomentumDirection().y() << G4endl; + G4cout << " Momentum Direct - z : " << std::setw(20) + << fStep->GetPreStepPoint()->GetMomentumDirection().z() << std::setw(20) + << fStep->GetPostStepPoint()->GetMomentumDirection().z() << G4endl; + G4cout << " Momentum - x : " << std::setw(14) + << G4BestUnit(fStep->GetPreStepPoint()->GetMomentum().x(), "Momentum") << std::setw(14) + << G4BestUnit(fStep->GetPostStepPoint()->GetMomentum().x(), "Momentum") << G4endl; + G4cout << " Momentum - y : " << std::setw(14) + << G4BestUnit(fStep->GetPreStepPoint()->GetMomentum().y(), "Momentum") << std::setw(14) + << G4BestUnit(fStep->GetPostStepPoint()->GetMomentum().y(), "Momentum") << G4endl; + G4cout << " Momentum - z : " << std::setw(14) + << G4BestUnit(fStep->GetPreStepPoint()->GetMomentum().z(), "Momentum") << std::setw(14) + << G4BestUnit(fStep->GetPostStepPoint()->GetMomentum().z(), "Momentum") << G4endl; + G4cout << " Total Energy : " << std::setw(16) + << G4BestUnit(fStep->GetPreStepPoint()->GetTotalEnergy(), "Energy") << std::setw(16) + << G4BestUnit(fStep->GetPostStepPoint()->GetTotalEnergy(), "Energy") << G4endl; + G4cout << " Kinetic Energy : " << std::setw(16) + << G4BestUnit(fStep->GetPreStepPoint()->GetKineticEnergy(), "Energy") << std::setw(16) + << G4BestUnit(fStep->GetPostStepPoint()->GetKineticEnergy(), "Energy") << G4endl; + G4cout << " Velocity : " << std::setw(14) + << G4BestUnit(fStep->GetPreStepPoint()->GetVelocity(), "Velocity") << std::setw(14) + << G4BestUnit(fStep->GetPostStepPoint()->GetVelocity(), "Velocity") << G4endl; + G4cout << " Volume Name : " << std::setw(20) + << fStep->GetPreStepPoint()->GetPhysicalVolume()->GetName(); + G4String volName = "OutOfWorld"; + if (fStep->GetPostStepPoint()->GetPhysicalVolume() != nullptr) + volName = fStep->GetPostStepPoint()->GetPhysicalVolume()->GetName(); + G4cout << std::setw(20) << volName << G4endl; + G4cout << " Safety : " << std::setw(17) + << G4BestUnit(fStep->GetPreStepPoint()->GetSafety(), "Length") << std::setw(17) + << G4BestUnit(fStep->GetPostStepPoint()->GetSafety(), "Length") << G4endl; + G4cout << " Polarization - x : " << std::setw(20) + << fStep->GetPreStepPoint()->GetPolarization().x() << std::setw(20) + << fStep->GetPostStepPoint()->GetPolarization().x() << G4endl; + G4cout << " Polarization - y : " << std::setw(20) + << fStep->GetPreStepPoint()->GetPolarization().y() << std::setw(20) + << fStep->GetPostStepPoint()->GetPolarization().y() << G4endl; + G4cout << " Polarization - Z : " << std::setw(20) + << fStep->GetPreStepPoint()->GetPolarization().z() << std::setw(20) + << fStep->GetPostStepPoint()->GetPolarization().z() << G4endl; + G4cout << " Weight : " << std::setw(20) + << fStep->GetPreStepPoint()->GetWeight() << std::setw(20) + << fStep->GetPostStepPoint()->GetWeight() << G4endl; + G4cout << " Step Status : "; + G4StepStatus tStepStatus = fStep->GetPreStepPoint()->GetStepStatus(); + if (tStepStatus == fGeomBoundary) { + G4cout << std::setw(20) << "Geom Limit"; + } + else if (tStepStatus == fAlongStepDoItProc) { + G4cout << std::setw(20) << "AlongStep Proc."; + } + else if (tStepStatus == fPostStepDoItProc) { + G4cout << std::setw(20) << "PostStep Proc"; + } + else if (tStepStatus == fAtRestDoItProc) { + G4cout << std::setw(20) << "AtRest Proc"; + } + else if (tStepStatus == fUndefined) { + G4cout << std::setw(20) << "Undefined"; + } + + tStepStatus = fStep->GetPostStepPoint()->GetStepStatus(); + if (tStepStatus == fGeomBoundary) { + G4cout << std::setw(20) << "Geom Limit"; + } + else if (tStepStatus == fAlongStepDoItProc) { + G4cout << std::setw(20) << "AlongStep Proc."; + } + else if (tStepStatus == fPostStepDoItProc) { + G4cout << std::setw(20) << "PostStep Proc"; + } + else if (tStepStatus == fAtRestDoItProc) { + G4cout << std::setw(20) << "AtRest Proc"; + } + else if (tStepStatus == fUndefined) { + G4cout << std::setw(20) << "Undefined"; + } + + G4cout << G4endl; + G4cout << " Process defined Step: "; + if (fStep->GetPreStepPoint()->GetProcessDefinedStep() == nullptr) { + G4cout << std::setw(20) << "Undefined"; + } + else { + G4cout << std::setw(20) << fStep->GetPreStepPoint()->GetProcessDefinedStep()->GetProcessName(); + } + if (fStep->GetPostStepPoint()->GetProcessDefinedStep() == nullptr) { + G4cout << std::setw(20) << "Undefined"; + } + else { + G4cout << std::setw(20) << fStep->GetPostStepPoint()->GetProcessDefinedStep()->GetProcessName(); + } + G4cout.precision(oldprc); + + G4cout << G4endl; + G4cout << " -------------------------------------------------------" + << "----------------" << G4endl; } //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... diff --git a/source/tracking/src/G4TrackingManager.cc b/source/tracking/src/G4TrackingManager.cc index 609304e21b3..8b7de72296c 100644 --- a/source/tracking/src/G4TrackingManager.cc +++ b/source/tracking/src/G4TrackingManager.cc @@ -32,12 +32,13 @@ // -------------------------------------------------------------------- #include "G4TrackingManager.hh" -#include "G4Trajectory.hh" -#include "G4SmoothTrajectory.hh" -#include "G4RichTrajectory.hh" -#include "G4ios.hh" + #include "G4Profiler.hh" +#include "G4RichTrajectory.hh" +#include "G4SmoothTrajectory.hh" #include "G4TiMemory.hh" +#include "G4Trajectory.hh" +#include "G4ios.hh" ////////////////////////////////////// G4TrackingManager::G4TrackingManager() @@ -68,14 +69,13 @@ void G4TrackingManager::ProcessOneTrack(G4Track* apValueG4Track) // Clear secondary particle vector // - for(std:: size_t itr=0; itrsize(); ++itr) - { - delete (*GimmeSecondaries())[itr]; + for (auto& itr : *GimmeSecondaries()) { + delete itr; } - GimmeSecondaries()->clear(); - - if(verboseLevel>0 && (G4VSteppingVerbose::GetSilent()!=1) ) TrackBanner(); - + GimmeSecondaries()->clear(); + + if (verboseLevel > 0 && (G4VSteppingVerbose::GetSilent() != 1)) TrackBanner(); + // Give SteppingManger the pointer to the track which will be tracked // fpSteppingManager->SetInitialStep(fpTrack); @@ -83,8 +83,7 @@ void G4TrackingManager::ProcessOneTrack(G4Track* apValueG4Track) // Pre tracking user intervention process fpTrajectory = nullptr; - if( fpUserTrackingAction != nullptr ) - { + if (fpUserTrackingAction != nullptr) { fpUserTrackingAction->PreUserTrackingAction(fpTrack); } @@ -92,17 +91,15 @@ void G4TrackingManager::ProcessOneTrack(G4Track* apValueG4Track) // the PreUserTrackingAction and PostUserTrackingAction { #if defined(GEANT4_USE_TIMEMORY) - ProfilerConfig profiler{ fpTrack }; + ProfilerConfig profiler{fpTrack}; #endif #ifdef G4_STORE_TRAJECTORY // Construct a trajectory if it is requested // - if(StoreTrajectory && (fpTrajectory == nullptr)) - { + if ((StoreTrajectory != 0) && (fpTrajectory == nullptr)) { // default trajectory concrete class object - switch(StoreTrajectory) - { + switch (StoreTrajectory) { default: case 1: fpTrajectory = new G4Trajectory(fpTrack); @@ -131,19 +128,15 @@ void G4TrackingManager::ProcessOneTrack(G4Track* apValueG4Track) // Track the particle Step-by-Step while it is alive // - while((fpTrack->GetTrackStatus() == fAlive) || - (fpTrack->GetTrackStatus() == fStopButAlive)) - { + while ((fpTrack->GetTrackStatus() == fAlive) || (fpTrack->GetTrackStatus() == fStopButAlive)) { fpTrack->IncrementCurrentStepNumber(); fpSteppingManager->Stepping(); #ifdef G4_STORE_TRAJECTORY - if(StoreTrajectory) - { + if (StoreTrajectory != 0) { fpTrajectory->AppendStep(fpSteppingManager->GetStep()); } #endif - if(EventIsAborted) - { + if (EventIsAborted) { fpTrack->SetTrackStatus(fKillTrackAndSecondaries); } } @@ -152,20 +145,17 @@ void G4TrackingManager::ProcessOneTrack(G4Track* apValueG4Track) } // Post tracking user intervention process. - if( fpUserTrackingAction != nullptr ) - { + if (fpUserTrackingAction != nullptr) { fpUserTrackingAction->PostUserTrackingAction(fpTrack); } // Destruct the trajectory if it was created #ifdef G4VERBOSE - if(StoreTrajectory&&verboseLevel>10) - { + if ((StoreTrajectory != 0) && verboseLevel > 10) { fpTrajectory->ShowTrajectory(); } #endif - if( (!StoreTrajectory) && (fpTrajectory != nullptr) ) - { + if ((StoreTrajectory == 0) && (fpTrajectory != nullptr)) { delete fpTrajectory; fpTrajectory = nullptr; } @@ -176,9 +166,8 @@ void G4TrackingManager::SetTrajectory(G4VTrajectory* aTrajectory) ////////////////////////////////////// { #ifndef G4_STORE_TRAJECTORY - G4Exception("G4TrackingManager::SetTrajectory()", - "Tracking0015", FatalException, - "Invoked without G4_STORE_TRAJECTORY option set!"); + G4Exception("G4TrackingManager::SetTrajectory()", "Tracking0015", FatalException, + "Invoked without G4_STORE_TRAJECTORY option set!"); #endif fpTrajectory = aTrajectory; } @@ -187,7 +176,7 @@ void G4TrackingManager::SetTrajectory(G4VTrajectory* aTrajectory) void G4TrackingManager::EventAborted() ////////////////////////////////////// { - fpTrack->SetTrackStatus( fKillTrackAndSecondaries ); + fpTrack->SetTrackStatus(fKillTrackAndSecondaries); EventIsAborted = true; } @@ -197,17 +186,12 @@ void G4TrackingManager::TrackBanner() { G4cout << G4endl; G4cout << "*******************************************************" - << "**************************************************" - << G4endl; + << "**************************************************" << G4endl; G4cout << "* G4Track Information: " - << " Particle = " << fpTrack->GetDefinition()->GetParticleName() - << "," - << " Track ID = " << fpTrack->GetTrackID() - << "," - << " Parent ID = " << fpTrack->GetParentID() - << G4endl; + << " Particle = " << fpTrack->GetDefinition()->GetParticleName() << "," + << " Track ID = " << fpTrack->GetTrackID() << "," + << " Parent ID = " << fpTrack->GetParentID() << G4endl; G4cout << "*******************************************************" - << "**************************************************" - << G4endl; + << "**************************************************" << G4endl; G4cout << G4endl; } diff --git a/source/tracking/src/G4TrackingMessenger.cc b/source/tracking/src/G4TrackingMessenger.cc index fde340b38a3..1f7ed2d992f 100644 --- a/source/tracking/src/G4TrackingMessenger.cc +++ b/source/tracking/src/G4TrackingMessenger.cc @@ -33,22 +33,23 @@ // -------------------------------------------------------------------- #include "G4TrackingMessenger.hh" -#include "G4UIdirectory.hh" -#include "G4UIcmdWithoutParameter.hh" -#include "G4UIcmdWithAnInteger.hh" -#include "G4UImanager.hh" -#include "globals.hh" -#include "G4TrackingManager.hh" + +#include "G4IdentityTrajectoryFilter.hh" +#include "G4PropagatorInField.hh" #include "G4SteppingManager.hh" #include "G4TrackStatus.hh" -#include "G4ios.hh" +#include "G4TrackingManager.hh" #include "G4TransportationManager.hh" -#include "G4PropagatorInField.hh" -#include "G4IdentityTrajectoryFilter.hh" +#include "G4UIcmdWithAnInteger.hh" +#include "G4UIcmdWithoutParameter.hh" +#include "G4UIdirectory.hh" +#include "G4UImanager.hh" +#include "G4ios.hh" +#include "globals.hh" /////////////////////////////////////////////////////////////////// G4TrackingMessenger::G4TrackingMessenger(G4TrackingManager* trMan) -/////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////// : trackingManager(trMan) { steppingManager = trackingManager->GetSteppingManager(); @@ -56,13 +57,13 @@ G4TrackingMessenger::G4TrackingMessenger(G4TrackingManager* trMan) TrackingDirectory = new G4UIdirectory("/tracking/"); TrackingDirectory->SetGuidance("TrackingManager and SteppingManager control commands."); - AbortCmd = new G4UIcmdWithoutParameter("/tracking/abort",this); + AbortCmd = new G4UIcmdWithoutParameter("/tracking/abort", this); AbortCmd->SetGuidance("Abort current G4Track processing."); - ResumeCmd = new G4UIcmdWithoutParameter("/tracking/resume",this); + ResumeCmd = new G4UIcmdWithoutParameter("/tracking/resume", this); ResumeCmd->SetGuidance("Resume current G4Track processing."); - StoreTrajectoryCmd = new G4UIcmdWithAnInteger("/tracking/storeTrajectory",this); + StoreTrajectoryCmd = new G4UIcmdWithAnInteger("/tracking/storeTrajectory", this); StoreTrajectoryCmd->SetGuidance("Store trajectories or not."); StoreTrajectoryCmd->SetGuidance(" 0 : Don't Store trajectories."); StoreTrajectoryCmd->SetGuidance(" !=0 : Store trajectories."); @@ -70,11 +71,11 @@ G4TrackingMessenger::G4TrackingMessenger(G4TrackingManager* trMan) StoreTrajectoryCmd->SetGuidance(" 2 : Choose G4SmoothTrajectory as default."); StoreTrajectoryCmd->SetGuidance(" 3 : Choose G4RichTrajectory as default."); StoreTrajectoryCmd->SetGuidance(" 4 : Choose G4RichTrajectory with auxiliary points as default."); - StoreTrajectoryCmd->SetParameterName("Store",true); + StoreTrajectoryCmd->SetParameterName("Store", true); StoreTrajectoryCmd->SetDefaultValue(0); - StoreTrajectoryCmd->SetRange("Store >=0 && Store <= 4"); + StoreTrajectoryCmd->SetRange("Store >=0 && Store <= 4"); - VerboseCmd = new G4UIcmdWithAnInteger("/tracking/verbose",this); + VerboseCmd = new G4UIcmdWithAnInteger("/tracking/verbose", this); #ifdef G4VERBOSE VerboseCmd->SetGuidance("Set Verbose level of tracking category."); VerboseCmd->SetGuidance(" -1 : Silent."); @@ -84,14 +85,14 @@ G4TrackingMessenger::G4TrackingMessenger(G4TrackingManager* trMan) VerboseCmd->SetGuidance(" 3 : Addition to Level=1, pre/postStepoint information"); VerboseCmd->SetGuidance(" after all AlongStep/PostStep process executions."); VerboseCmd->SetGuidance(" 4 : Addition to Level=3, pre/postStepoint information"); - VerboseCmd->SetGuidance(" at each AlongStepPostStep process execution."); + VerboseCmd->SetGuidance(" at each AlongStepPostStep process execution."); VerboseCmd->SetGuidance(" 5 : Addition to Level=4, proposed Step length information"); - VerboseCmd->SetGuidance(" from each AlongStepPostStep process."); - VerboseCmd->SetParameterName("verbose_level",true); + VerboseCmd->SetGuidance(" from each AlongStepPostStep process."); + VerboseCmd->SetParameterName("verbose_level", true); VerboseCmd->SetDefaultValue(0); VerboseCmd->SetRange("verbose_level >=-1 "); -#else - VerboseCmd->SetGuidance("You need to recompile the tracking category defining G4VERBOSE "); +#else + VerboseCmd->SetGuidance("You need to recompile the tracking category defining G4VERBOSE "); #endif } @@ -107,43 +108,37 @@ G4TrackingMessenger::~G4TrackingMessenger() } /////////////////////////////////////////////////////////////////////////////// -void G4TrackingMessenger::SetNewValue(G4UIcommand* command,G4String newValues) +void G4TrackingMessenger::SetNewValue(G4UIcommand* command, G4String newValues) /////////////////////////////////////////////////////////////////////////////// { - if( command == VerboseCmd ) - { + if (command == VerboseCmd) { trackingManager->SetVerboseLevel(VerboseCmd->ConvertToInt(newValues)); } - if( command == AbortCmd ) - { + if (command == AbortCmd) { steppingManager->GetTrack()->SetTrackStatus(fStopAndKill); G4UImanager::GetUIpointer()->ApplyCommand("/control/exit"); } - if( command == ResumeCmd ) - { + if (command == ResumeCmd) { G4UImanager::GetUIpointer()->ApplyCommand("/control/exit"); } - static G4ThreadLocal - G4IdentityTrajectoryFilter* auxiliaryPointsFilter = nullptr; - if(auxiliaryPointsFilter == nullptr) - { + static G4ThreadLocal G4IdentityTrajectoryFilter* auxiliaryPointsFilter = nullptr; + if (auxiliaryPointsFilter == nullptr) { auxiliaryPointsFilter = new G4IdentityTrajectoryFilter; } - if( command == StoreTrajectoryCmd ) - { + if (command == StoreTrajectoryCmd) { G4int trajType = StoreTrajectoryCmd->ConvertToInt(newValues); - if(trajType==2||trajType==4) - { + if (trajType == 2 || trajType == 4) { G4TransportationManager::GetTransportationManager() - ->GetPropagatorInField()->SetTrajectoryFilter(auxiliaryPointsFilter); + ->GetPropagatorInField() + ->SetTrajectoryFilter(auxiliaryPointsFilter); } - else - { + else { G4TransportationManager::GetTransportationManager() - ->GetPropagatorInField()->SetTrajectoryFilter(0); + ->GetPropagatorInField() + ->SetTrajectoryFilter(nullptr); } trackingManager->SetStoreTrajectory(trajType); } @@ -153,14 +148,11 @@ void G4TrackingMessenger::SetNewValue(G4UIcommand* command,G4String newValues) G4String G4TrackingMessenger::GetCurrentValue(G4UIcommand* command) //////////////////////////////////////////////////////////////////// { - if( command == VerboseCmd ) - { + if (command == VerboseCmd) { return VerboseCmd->ConvertToString(trackingManager->GetVerboseLevel()); } - else if( command == StoreTrajectoryCmd ) - { - return StoreTrajectoryCmd - ->ConvertToString(trackingManager->GetStoreTrajectory()); + if (command == StoreTrajectoryCmd) { + return StoreTrajectoryCmd->ConvertToString(trackingManager->GetStoreTrajectory()); } - return G4String(1,'\0'); + return G4String(1, '\0'); } diff --git a/source/tracking/src/G4Trajectory.cc b/source/tracking/src/G4Trajectory.cc index 70daaf13246..ac657062d53 100644 --- a/source/tracking/src/G4Trajectory.cc +++ b/source/tracking/src/G4Trajectory.cc @@ -33,17 +33,18 @@ // -------------------------------------------------------------------- #include "G4Trajectory.hh" -#include "G4TrajectoryPoint.hh" -#include "G4ParticleTable.hh" -#include "G4AttDefStore.hh" + #include "G4AttDef.hh" +#include "G4AttDefStore.hh" #include "G4AttValue.hh" +#include "G4ParticleTable.hh" +#include "G4TrajectoryPoint.hh" #include "G4UIcommand.hh" #include "G4UnitsTable.hh" // #define G4ATTDEBUG #ifdef G4ATTDEBUG -#include "G4AttCheck.hh" +# include "G4AttCheck.hh" #endif G4Allocator*& aTrajectoryAllocator() @@ -52,11 +53,6 @@ G4Allocator*& aTrajectoryAllocator() return _instance; } -G4Trajectory::G4Trajectory() - : initialMomentum( G4ThreeVector() ) -{ -} - G4Trajectory::G4Trajectory(const G4Track* aTrack) { G4ParticleDefinition* fpParticleDefinition = aTrack->GetDefinition(); @@ -74,7 +70,6 @@ G4Trajectory::G4Trajectory(const G4Track* aTrack) } G4Trajectory::G4Trajectory(G4Trajectory& right) - : G4VTrajectory() { ParticleName = right.ParticleName; PDGCharge = right.PDGCharge; @@ -85,21 +80,17 @@ G4Trajectory::G4Trajectory(G4Trajectory& right) initialMomentum = right.initialMomentum; positionRecord = new G4TrajectoryPointContainer(); - for(std::size_t i=0; isize(); ++i) - { - G4TrajectoryPoint* rightPoint - = (G4TrajectoryPoint*)((*(right.positionRecord))[i]); + for (auto& i : *right.positionRecord) { + auto rightPoint = (G4TrajectoryPoint*)i; positionRecord->push_back(new G4TrajectoryPoint(*rightPoint)); } } G4Trajectory::~G4Trajectory() { - if (positionRecord != nullptr) - { - for(std::size_t i=0; isize(); ++i) - { - delete (*positionRecord)[i]; + if (positionRecord != nullptr) { + for (auto& i : *positionRecord) { + delete i; } positionRecord->clear(); delete positionRecord; @@ -122,81 +113,66 @@ void G4Trajectory::DrawTrajectory() const // ... or override with your own code here. } -const std::map* G4Trajectory::GetAttDefs() const +const std::map* G4Trajectory::GetAttDefs() const { G4bool isNew; - std::map* store - = G4AttDefStore::GetInstance("G4Trajectory",isNew); - if (isNew) - { + std::map* store = G4AttDefStore::GetInstance("G4Trajectory", isNew); + if (isNew) { G4String ID("ID"); - (*store)[ID] = G4AttDef(ID,"Track ID","Physics","","G4int"); + (*store)[ID] = G4AttDef(ID, "Track ID", "Physics", "", "G4int"); G4String PID("PID"); - (*store)[PID] = G4AttDef(PID,"Parent ID","Physics","","G4int"); + (*store)[PID] = G4AttDef(PID, "Parent ID", "Physics", "", "G4int"); G4String PN("PN"); - (*store)[PN] = G4AttDef(PN,"Particle Name","Physics","","G4String"); + (*store)[PN] = G4AttDef(PN, "Particle Name", "Physics", "", "G4String"); G4String Ch("Ch"); - (*store)[Ch] = G4AttDef(Ch,"Charge","Physics","e+","G4double"); + (*store)[Ch] = G4AttDef(Ch, "Charge", "Physics", "e+", "G4double"); G4String PDG("PDG"); - (*store)[PDG] = G4AttDef(PDG,"PDG Encoding","Physics","","G4int"); + (*store)[PDG] = G4AttDef(PDG, "PDG Encoding", "Physics", "", "G4int"); G4String IKE("IKE"); - (*store)[IKE] = - G4AttDef(IKE, "Initial kinetic energy", - "Physics","G4BestUnit","G4double"); + (*store)[IKE] = G4AttDef(IKE, "Initial kinetic energy", "Physics", "G4BestUnit", "G4double"); G4String IMom("IMom"); - (*store)[IMom] = G4AttDef(IMom, "Initial momentum", - "Physics","G4BestUnit","G4ThreeVector"); + (*store)[IMom] = G4AttDef(IMom, "Initial momentum", "Physics", "G4BestUnit", "G4ThreeVector"); G4String IMag("IMag"); - (*store)[IMag] = - G4AttDef(IMag, "Initial momentum magnitude", - "Physics","G4BestUnit","G4double"); + (*store)[IMag] = + G4AttDef(IMag, "Initial momentum magnitude", "Physics", "G4BestUnit", "G4double"); G4String NTP("NTP"); - (*store)[NTP] = G4AttDef(NTP,"No. of points","Physics","","G4int"); - + (*store)[NTP] = G4AttDef(NTP, "No. of points", "Physics", "", "G4int"); } return store; } std::vector* G4Trajectory::CreateAttValues() const { - std::vector* values = new std::vector; + auto values = new std::vector; - values->push_back - (G4AttValue("ID",G4UIcommand::ConvertToString(fTrackID),"")); + values->push_back(G4AttValue("ID", G4UIcommand::ConvertToString(fTrackID), "")); - values->push_back - (G4AttValue("PID",G4UIcommand::ConvertToString(fParentID),"")); + values->push_back(G4AttValue("PID", G4UIcommand::ConvertToString(fParentID), "")); - values->push_back(G4AttValue("PN",ParticleName,"")); + values->push_back(G4AttValue("PN", ParticleName, "")); - values->push_back - (G4AttValue("Ch",G4UIcommand::ConvertToString(PDGCharge),"")); + values->push_back(G4AttValue("Ch", G4UIcommand::ConvertToString(PDGCharge), "")); - values->push_back - (G4AttValue("PDG",G4UIcommand::ConvertToString(PDGEncoding),"")); + values->push_back(G4AttValue("PDG", G4UIcommand::ConvertToString(PDGEncoding), "")); - values->push_back - (G4AttValue("IKE",G4BestUnit(initialKineticEnergy,"Energy"),"")); + values->push_back(G4AttValue("IKE", G4BestUnit(initialKineticEnergy, "Energy"), "")); - values->push_back - (G4AttValue("IMom",G4BestUnit(initialMomentum,"Energy"),"")); + values->push_back(G4AttValue("IMom", G4BestUnit(initialMomentum, "Energy"), "")); - values->push_back - (G4AttValue("IMag",G4BestUnit(initialMomentum.mag(),"Energy"),"")); + values->push_back(G4AttValue("IMag", G4BestUnit(initialMomentum.mag(), "Energy"), "")); - values->push_back - (G4AttValue("NTP",G4UIcommand::ConvertToString(GetPointEntries()),"")); + values->push_back(G4AttValue("NTP", G4UIcommand::ConvertToString(GetPointEntries()), "")); #ifdef G4ATTDEBUG - G4cout << G4AttCheck(values,GetAttDefs()); + G4cout << G4AttCheck(values, GetAttDefs()); #endif return values; @@ -204,10 +180,9 @@ std::vector* G4Trajectory::CreateAttValues() const void G4Trajectory::AppendStep(const G4Step* aStep) { - positionRecord->push_back( new G4TrajectoryPoint(aStep->GetPostStepPoint()-> - GetPosition()) ); + positionRecord->push_back(new G4TrajectoryPoint(aStep->GetPostStepPoint()->GetPosition())); } - + G4ParticleDefinition* G4Trajectory::GetParticleDefinition() { return (G4ParticleTable::GetParticleTable()->FindParticle(ParticleName)); @@ -215,11 +190,11 @@ G4ParticleDefinition* G4Trajectory::GetParticleDefinition() void G4Trajectory::MergeTrajectory(G4VTrajectory* secondTrajectory) { - if(secondTrajectory == nullptr) return; + if (secondTrajectory == nullptr) return; - G4Trajectory* seco = (G4Trajectory*)secondTrajectory; + auto seco = (G4Trajectory*)secondTrajectory; G4int ent = seco->GetPointEntries(); - for(G4int i=1; ipush_back((*(seco->positionRecord))[i]); } diff --git a/source/tracking/src/G4TrajectoryPoint.cc b/source/tracking/src/G4TrajectoryPoint.cc index 86e2d414b81..7c021bd6c20 100644 --- a/source/tracking/src/G4TrajectoryPoint.cc +++ b/source/tracking/src/G4TrajectoryPoint.cc @@ -33,14 +33,14 @@ #include "G4TrajectoryPoint.hh" -#include "G4AttDefStore.hh" #include "G4AttDef.hh" +#include "G4AttDefStore.hh" #include "G4AttValue.hh" #include "G4UnitsTable.hh" // #define G4ATTDEBUG #ifdef G4ATTDEBUG -#include "G4AttCheck.hh" +# include "G4AttCheck.hh" #endif G4Allocator*& aTrajectoryPointAllocator() @@ -49,47 +49,31 @@ G4Allocator*& aTrajectoryPointAllocator() return _instance; } -G4TrajectoryPoint::G4TrajectoryPoint() -{ - fPosition = G4ThreeVector(0.,0.,0.); -} +G4TrajectoryPoint::G4TrajectoryPoint(G4ThreeVector pos) { fPosition = pos; } -G4TrajectoryPoint::G4TrajectoryPoint(G4ThreeVector pos) -{ - fPosition = pos; -} +G4TrajectoryPoint::G4TrajectoryPoint(const G4TrajectoryPoint& right) : fPosition(right.fPosition) {} -G4TrajectoryPoint::G4TrajectoryPoint(const G4TrajectoryPoint& right) - : G4VTrajectoryPoint(),fPosition(right.fPosition) -{ -} - -G4TrajectoryPoint::~G4TrajectoryPoint() -{ -} +G4TrajectoryPoint::~G4TrajectoryPoint() = default; -const std::map* G4TrajectoryPoint::GetAttDefs() const +const std::map* G4TrajectoryPoint::GetAttDefs() const { G4bool isNew; - std::map* store - = G4AttDefStore::GetInstance("G4TrajectoryPoint",isNew); - if (isNew) - { + std::map* store = G4AttDefStore::GetInstance("G4TrajectoryPoint", isNew); + if (isNew) { G4String Pos("Pos"); - (*store)[Pos] = - G4AttDef(Pos, "Position", "Physics","G4BestUnit","G4ThreeVector"); + (*store)[Pos] = G4AttDef(Pos, "Position", "Physics", "G4BestUnit", "G4ThreeVector"); } return store; } std::vector* G4TrajectoryPoint::CreateAttValues() const { - std::vector* values = new std::vector; + auto values = new std::vector; - values->push_back(G4AttValue("Pos",G4BestUnit(fPosition,"Length"),"")); + values->push_back(G4AttValue("Pos", G4BestUnit(fPosition, "Length"), "")); #ifdef G4ATTDEBUG - G4cout << G4AttCheck(values,GetAttDefs()); + G4cout << G4AttCheck(values, GetAttDefs()); #endif return values; diff --git a/source/tracking/src/G4UserSteppingAction.cc b/source/tracking/src/G4UserSteppingAction.cc index 75d303d3018..81282374e37 100644 --- a/source/tracking/src/G4UserSteppingAction.cc +++ b/source/tracking/src/G4UserSteppingAction.cc @@ -32,6 +32,7 @@ // -------------------------------------------------------------------- #include "G4UserSteppingAction.hh" + #include "G4ParticleTable.hh" #include "globals.hh" @@ -39,29 +40,22 @@ G4UserSteppingAction::G4UserSteppingAction() ///////////////////////////////////////////////////////// { - if(!(G4ParticleTable::GetParticleTable()->GetReadiness())) - { + if (! (G4ParticleTable::GetParticleTable()->GetReadiness())) { G4String msg; - msg = " You are instantiating G4UserSteppingAction BEFORE your\n"; + msg = " You are instantiating G4UserSteppingAction BEFORE your\n"; msg += "G4VUserPhysicsList is instantiated and assigned to G4RunManager.\n"; msg += " Such an instantiation is prohibited. To fix this problem,\n"; msg += "please make sure that your main() instantiates G4VUserPhysicsList AND\n"; msg += "set it to G4RunManager before instantiating other user action classes\n"; msg += "such as G4UserSteppingAction."; - G4Exception("G4UserSteppingAction::G4UserSteppingAction()", - "Tracking0002", FatalException, msg); + G4Exception( + "G4UserSteppingAction::G4UserSteppingAction()", "Tracking0002", FatalException, msg); } } -///////////////////////////////////////////////////////// -G4UserSteppingAction::~G4UserSteppingAction() -///////////////////////////////////////////////////////// -{ -} - ///////////////////////////////////////////////////////// void G4UserSteppingAction::SetSteppingManagerPointer(G4SteppingManager* pValue) ///////////////////////////////////////////////////////// { fpSteppingManager = pValue; -} +} diff --git a/source/tracking/src/G4UserTrackingAction.cc b/source/tracking/src/G4UserTrackingAction.cc index 7eb2f779d60..e3ac3a004e0 100644 --- a/source/tracking/src/G4UserTrackingAction.cc +++ b/source/tracking/src/G4UserTrackingAction.cc @@ -32,6 +32,7 @@ // -------------------------------------------------------------------- #include "G4UserTrackingAction.hh" + #include "G4ParticleTable.hh" #include "globals.hh" @@ -39,26 +40,19 @@ G4UserTrackingAction::G4UserTrackingAction() ///////////////////////////////////////////////////////// { - if(!(G4ParticleTable::GetParticleTable()->GetReadiness())) - { + if (! (G4ParticleTable::GetParticleTable()->GetReadiness())) { G4String msg; - msg = " You are instantiating G4UserTrackingAction BEFORE your\n"; + msg = " You are instantiating G4UserTrackingAction BEFORE your\n"; msg += "G4VUserPhysicsList is instantiated and assigned to G4RunManager.\n"; msg += " Such an instantiation is prohibited. To fix this problem,\n"; msg += "please make sure that your main() instantiates G4VUserPhysicsList AND\n"; msg += "set it to G4RunManager before instantiating other user action classes\n"; msg += "such as G4UserTrackingAction."; - G4Exception("G4UserTrackingAction::G4UserTrackingAction()", - "Tracking0001", FatalException, msg); + G4Exception( + "G4UserTrackingAction::G4UserTrackingAction()", "Tracking0001", FatalException, msg); } } -///////////////////////////////////////////////////////// -G4UserTrackingAction::~G4UserTrackingAction() -///////////////////////////////////////////////////////// -{ -} - ///////////////////////////////////////////////////////// void G4UserTrackingAction::SetTrackingManagerPointer(G4TrackingManager* pValue) ///////////////////////////////////////////////////////// diff --git a/source/tracking/src/G4VSteppingVerbose.cc b/source/tracking/src/G4VSteppingVerbose.cc index ba0a757e23f..db6dfc5e819 100644 --- a/source/tracking/src/G4VSteppingVerbose.cc +++ b/source/tracking/src/G4VSteppingVerbose.cc @@ -32,9 +32,10 @@ // -------------------------------------------------------------------- #include "G4VSteppingVerbose.hh" + +#include "G4ParticleDefinition.hh" #include "G4SteppingManager.hh" #include "G4Track.hh" -#include "G4ParticleDefinition.hh" G4ThreadLocal G4VSteppingVerbose* G4VSteppingVerbose::fInstance = nullptr; G4VSteppingVerbose* G4VSteppingVerbose::fMasterInstance = nullptr; @@ -45,14 +46,12 @@ G4ThreadLocal G4int G4VSteppingVerbose::SilentStepInfo = 0; G4VSteppingVerbose::G4VSteppingVerbose() ////////////////////////////////////////////////// { - if(fInstance!= nullptr) - { - G4Exception("G4VSteppingVerbose::G4VSteppingVerbose()", - "Tracking0014", FatalException, - "Only one SteppingVerbose class can be instantiated."); + if (fInstance != nullptr) { + G4Exception("G4VSteppingVerbose::G4VSteppingVerbose()", "Tracking0014", FatalException, + "Only one SteppingVerbose class can be instantiated."); } fInstance = this; - if(!fMasterInstance) fMasterInstance = this; + if (fMasterInstance == nullptr) fMasterInstance = this; } ////////////////////////////////////////////////// @@ -66,7 +65,7 @@ G4VSteppingVerbose::~G4VSteppingVerbose() G4VSteppingVerbose* G4VSteppingVerbose::Clone() ////////////////////////////////////////////////////////////////// { - G4Exception("G4VSteppingVerbose::Clone","TRKING000",FatalException, + G4Exception("G4VSteppingVerbose::Clone", "TRKING000", FatalException, "Base class method must not be invoked."); return nullptr; } @@ -97,7 +96,7 @@ void G4VSteppingVerbose::CopyState() sumEnergyChange = fManager->GetsumEnergyChange(); fParticleChange = fManager->GetfParticleChange(); - fTrack = fManager->GetfTrack(); + fTrack = fManager->GetfTrack(); fSecondary = fManager->GetfSecondary(); fStep = fManager->GetfStep(); fPreStepPoint = fManager->GetfPreStepPoint(); @@ -107,7 +106,7 @@ void G4VSteppingVerbose::CopyState() fSensitive = fManager->GetfSensitive(); fCurrentProcess = fManager->GetfCurrentProcess(); - fAtRestDoItVector = fManager->GetfAtRestDoItVector(); + fAtRestDoItVector = fManager->GetfAtRestDoItVector(); fAlongStepDoItVector = fManager->GetfAlongStepDoItVector(); fPostStepDoItVector = fManager->GetfPostStepDoItVector(); @@ -146,35 +145,16 @@ void G4VSteppingVerbose::CopyState() fGPILSelection = fManager->GetfGPILSelection(); } -void G4VSteppingVerbose::SetInstance(G4VSteppingVerbose* /*Instance*/) -{;} +void G4VSteppingVerbose::SetInstance(G4VSteppingVerbose* /*Instance*/) {} -G4VSteppingVerbose* G4VSteppingVerbose::GetInstance() -{ - return fInstance; -} +G4VSteppingVerbose* G4VSteppingVerbose::GetInstance() { return fInstance; } -G4VSteppingVerbose* G4VSteppingVerbose::GetMasterInstance() -{ - return fMasterInstance; -} +G4VSteppingVerbose* G4VSteppingVerbose::GetMasterInstance() { return fMasterInstance; } -G4int G4VSteppingVerbose::GetSilent() -{ - return Silent; -} +G4int G4VSteppingVerbose::GetSilent() { return Silent; } -void G4VSteppingVerbose::SetSilent(G4int fSilent) -{ - Silent=fSilent; -} +void G4VSteppingVerbose::SetSilent(G4int fSilent) { Silent = fSilent; } -G4int G4VSteppingVerbose::GetSilentStepInfo() -{ - return SilentStepInfo; -} +G4int G4VSteppingVerbose::GetSilentStepInfo() { return SilentStepInfo; } -void G4VSteppingVerbose::SetSilentStepInfo(G4int fSilent) -{ - SilentStepInfo = fSilent; -} +void G4VSteppingVerbose::SetSilentStepInfo(G4int fSilent) { SilentStepInfo = fSilent; } diff --git a/source/tracking/src/G4VTrajectory.cc b/source/tracking/src/G4VTrajectory.cc index 86e21727ab5..9f06f0aa172 100644 --- a/source/tracking/src/G4VTrajectory.cc +++ b/source/tracking/src/G4VTrajectory.cc @@ -33,29 +33,19 @@ // -------------------------------------------------------------------- #include "G4VTrajectory.hh" -#include "G4VTrajectoryPoint.hh" -#include "G4AttDefStore.hh" + +#include "G4AttCheck.hh" #include "G4AttDef.hh" +#include "G4AttDefStore.hh" #include "G4AttValue.hh" -#include "G4AttCheck.hh" -#include "G4VVisManager.hh" -#include "G4VisAttributes.hh" +#include "G4Colour.hh" #include "G4Polyline.hh" #include "G4Polymarker.hh" -#include "G4Colour.hh" - -G4VTrajectory::G4VTrajectory() -{ -} - -G4VTrajectory::~G4VTrajectory() -{ -} +#include "G4VTrajectoryPoint.hh" +#include "G4VVisManager.hh" +#include "G4VisAttributes.hh" -G4bool G4VTrajectory::operator == (const G4VTrajectory& right) const -{ - return (this==&right); -} +G4bool G4VTrajectory::operator==(const G4VTrajectory& right) const { return (this == &right); } void G4VTrajectory::ShowTrajectory(std::ostream& os) const { @@ -64,52 +54,41 @@ void G4VTrajectory::ShowTrajectory(std::ostream& os) const // depending on the nature of os std::vector* attValues = CreateAttValues(); - const std::map* attDefs = GetAttDefs(); + const std::map* attDefs = GetAttDefs(); // Ensure validity... // - if (G4AttCheck(attValues,attDefs).Check("G4VTrajectory::ShowTrajectory")) - { + if (G4AttCheck(attValues, attDefs).Check("G4VTrajectory::ShowTrajectory")) { return; } os << "Trajectory:"; - for (auto iAttVal = attValues->cbegin(); - iAttVal != attValues->cend(); ++iAttVal) - { - std::map::const_iterator iAttDef = - attDefs->find(iAttVal->GetName()); - os << "\n " << iAttDef->second.GetDesc() - << " (" << iAttVal->GetName() - << "): " << iAttVal->GetValue(); + for (const auto& attValue : *attValues) { + auto iAttDef = attDefs->find(attValue.GetName()); + os << "\n " << iAttDef->second.GetDesc() << " (" << attValue.GetName() + << "): " << attValue.GetValue(); } delete attValues; // AttValues must be deleted after use. // Now do trajectory points... - for (G4int i=0; iCreateAttValues(); attDefs = aTrajectoryPoint->GetAttDefs(); // Ensure validity... // - if (G4AttCheck(attValues,attDefs).Check("G4VTrajectory::ShowTrajectory")) - { + if (G4AttCheck(attValues, attDefs).Check("G4VTrajectory::ShowTrajectory")) { return; } - for (auto iAttVal = attValues->cbegin(); - iAttVal != attValues->cend(); ++iAttVal) - { - std::map::const_iterator iAttDef = - attDefs->find(iAttVal->GetName()); - os << "\n " << iAttDef->second.GetDesc() - << " (" << iAttVal->GetName() - << "): " << iAttVal->GetValue(); + for (const auto& attValue : *attValues) { + const auto iAttDef = attDefs->find(attValue.GetName()); + os << "\n " << iAttDef->second.GetDesc() << " (" << attValue.GetName() + << "): " << attValue.GetValue(); } delete attValues; // AttValues must be deleted after use. @@ -121,8 +100,7 @@ void G4VTrajectory::DrawTrajectory() const { G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); - if (pVVisManager != nullptr) - { + if (pVVisManager != nullptr) { pVVisManager->DispatchToModel(*this); } } diff --git a/source/visualization/FukuiRenderer/GNUmakefile b/source/visualization/FukuiRenderer/GNUmakefile deleted file mode 100644 index 0a7b78cb14d..00000000000 --- a/source/visualization/FukuiRenderer/GNUmakefile +++ /dev/null @@ -1,38 +0,0 @@ - -name := G4FR - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -GLOBLIBS = libG4vis_management.lib libG4modeling.lib -GLOBLIBS += libG4run.lib libG4event.lib -GLOBLIBS += libG4tracking.lib libG4processes.lib libG4digits_hits.lib -GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk -include $(G4INSTALL)/config/G4VIS_BUILD.gmk -include $(G4INSTALL)/config/interactivity.gmk - -# NO need OGL, then reset OGLGLAGS -OGLFLAGS = -OGLLIBS = -# NO need QT, then reset QTGLAGS -QTFLAGS = -QTLIBS = -GLQTLIBS = - -CPPFLAGS += -I$(G4BASE)/visualization/management/include -CPPFLAGS += -I$(G4BASE)/visualization/modeling/include -CPPFLAGS += -I$(G4BASE)/global/management/include -CPPFLAGS += -I$(G4BASE)/graphics_reps/include -CPPFLAGS += -I$(G4BASE)/intercoms/include -CPPFLAGS += -I$(G4BASE)/global/HEPGeometry/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/CSG/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/specific/include -CPPFLAGS += -I$(G4BASE)/geometry/management/include -CPPFLAGS += -I$(G4BASE)/digits_hits/hits/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/visualization/FukuiRenderer/History b/source/visualization/FukuiRenderer/History index dc5fe670b3d..b6abbdf77ab 100644 --- a/source/visualization/FukuiRenderer/History +++ b/source/visualization/FukuiRenderer/History @@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-02-06 Ben Morgan (DAWN-V11-01-00) +- Isolate private headers and update dependencies + ## 2022-11-25 Gabriele Cosmo (DAWN-V11-00-03) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/visualization/FukuiRenderer/include/G4DAWNFILESceneHandler.hh b/source/visualization/FukuiRenderer/include/private/G4DAWNFILESceneHandler.hh similarity index 100% rename from source/visualization/FukuiRenderer/include/G4DAWNFILESceneHandler.hh rename to source/visualization/FukuiRenderer/include/private/G4DAWNFILESceneHandler.hh diff --git a/source/visualization/FukuiRenderer/include/G4DAWNFILEViewer.hh b/source/visualization/FukuiRenderer/include/private/G4DAWNFILEViewer.hh similarity index 100% rename from source/visualization/FukuiRenderer/include/G4DAWNFILEViewer.hh rename to source/visualization/FukuiRenderer/include/private/G4DAWNFILEViewer.hh diff --git a/source/visualization/FukuiRenderer/include/G4FRConst.hh b/source/visualization/FukuiRenderer/include/private/G4FRConst.hh similarity index 100% rename from source/visualization/FukuiRenderer/include/G4FRConst.hh rename to source/visualization/FukuiRenderer/include/private/G4FRConst.hh diff --git a/source/visualization/FukuiRenderer/include/G4FRSceneFunc.icc b/source/visualization/FukuiRenderer/include/private/G4FRSceneFunc.icc similarity index 100% rename from source/visualization/FukuiRenderer/include/G4FRSceneFunc.icc rename to source/visualization/FukuiRenderer/include/private/G4FRSceneFunc.icc diff --git a/source/visualization/FukuiRenderer/include/G4FRofstream.hh b/source/visualization/FukuiRenderer/include/private/G4FRofstream.hh similarity index 100% rename from source/visualization/FukuiRenderer/include/G4FRofstream.hh rename to source/visualization/FukuiRenderer/include/private/G4FRofstream.hh diff --git a/source/visualization/FukuiRenderer/include/G4VisFeaturesOfDAWNFILE.hh b/source/visualization/FukuiRenderer/include/private/G4VisFeaturesOfDAWNFILE.hh similarity index 100% rename from source/visualization/FukuiRenderer/include/G4VisFeaturesOfDAWNFILE.hh rename to source/visualization/FukuiRenderer/include/private/G4VisFeaturesOfDAWNFILE.hh diff --git a/source/visualization/FukuiRenderer/sources.cmake b/source/visualization/FukuiRenderer/sources.cmake index bbde505e760..d2b049c4b0c 100644 --- a/source/visualization/FukuiRenderer/sources.cmake +++ b/source/visualization/FukuiRenderer/sources.cmake @@ -4,6 +4,7 @@ geant4_add_module(G4FR PUBLIC_HEADERS G4DAWNFILE.hh + PRIVATE_HEADERS G4DAWNFILESceneHandler.hh G4DAWNFILEViewer.hh G4FRConst.hh @@ -18,12 +19,12 @@ geant4_add_module(G4FR geant4_module_link_libraries(G4FR PUBLIC - G4geometrymng - G4modeling G4vis_management - G4globman PRIVATE G4csg + G4geometrymng + G4globman G4graphics_reps - G4hepgeometry) + G4hepgeometry + G4modeling) diff --git a/source/visualization/GNUmakefile b/source/visualization/GNUmakefile deleted file mode 100644 index b7dd272b56f..00000000000 --- a/source/visualization/GNUmakefile +++ /dev/null @@ -1,73 +0,0 @@ -# ----------------------------------------------------------------------- -# GNUmakefile for visualization and modeling. John Allison, 5/7/95. -# Modeling is always made. Others by environment. John Allison 4/7/98. -# ----------------------------------------------------------------------- - -MAKEFLAGS= --no-print-directory - -name := G4visualization - -ifndef G4INSTALL - G4INSTALL = ../.. -endif - -include $(G4INSTALL)/config/architecture.gmk -include $(G4INSTALL)/config/G4VIS_BUILD.gmk -include $(G4INSTALL)/config/interactivity.gmk - -SUBDIRS := modeling -SUBLIBS := G4modeling - -# For Debug mode -# CPPFLAGS += -DG4DEBUG_VIS_OGL -# CPPFLAGS += -DG4DEBUG_VIS_OI -# CPPFLAGS += -DG4DEBUG_VIS_MANAGEMENT - -ifdef G4VIS_BUILD -# Drivers that can be used without external libraries... - SUBDIRS += management - SUBLIBS += G4vis_management - SUBDIRS += FukuiRenderer - SUBLIBS += G4FR - SUBDIRS += HepRep - SUBLIBS += G4visHepRep - SUBDIRS += RayTracer - SUBLIBS += G4RayTracer - SUBDIRS += VRML - SUBLIBS += G4VRML - SUBDIRS += Tree - SUBLIBS += G4Tree - SUBDIRS += gMocren - SUBLIBS += G4GMocren - SUBDIRS += ToolsSG - SUBLIBS += G4ToolsSG -# Drivers needing external libraries... -ifdef G4VIS_BUILD_OPENGL_DRIVER - SUBDIRS += OpenGL - SUBLIBS += G4OpenGL -endif -ifdef G4VIS_BUILD_OI_DRIVER - SUBDIRS += OpenInventor - SUBLIBS += G4OpenInventor -endif -ifdef G4VIS_BUILD_QT3D_DRIVER - SUBDIRS += Qt3D - SUBLIBS += G4visQt3D -endif -endif #G4VIS_BUILD - -.PHONY: granular obj glob global clean - -glob global: granular - -obj: - @for dir in $(SUBDIRS); do (cd $$dir; $(MAKE) obj); done - -granular: - @for dir in $(SUBDIRS); do (cd $$dir; $(MAKE)); done - -includes: - @for dir in $(SUBDIRS); do (cd $$dir && $(MAKE) $@ ); done - -clean clean_libs: - @for dir in $(SUBDIRS); do (cd $$dir; $(MAKE) $@); done diff --git a/source/visualization/HepRep/GNUmakefile b/source/visualization/HepRep/GNUmakefile deleted file mode 100644 index 2324aef1f9a..00000000000 --- a/source/visualization/HepRep/GNUmakefile +++ /dev/null @@ -1,43 +0,0 @@ - -name := G4visHepRep - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -GLOBLIBS = libG4vis_management.lib libG4modeling.lib -ifdef G4LIB_BUILD_ZLIB - GLOBLIBS += libG4zlib.lib -endif -GLOBLIBS += libG4tracking.lib libG4digits_hits.lib -GLOBLIBS += libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk -# include $(G4INSTALL)/config/G4VIS_BUILD.gmk -include $(G4INSTALL)/config/interactivity.gmk - -ifdef G4LIB_USE_ZLIB - CPPFLAGS += -DG4LIB_USE_ZLIB - ifdef G4LIB_BUILD_ZLIB - CPPFLAGS += -I$(G4BASE)/externals/zlib/include - endif -else - CPPFLAGS += -DCHEPREP_NO_ZLIB -endif - -CPPFLAGS += -I$(G4BASE)/digits_hits/hits/include -CPPFLAGS += -I$(G4BASE)/tracking/include -CPPFLAGS += -I$(G4BASE)/visualization/management/include -CPPFLAGS += -I$(G4BASE)/visualization/modeling/include -CPPFLAGS += -I$(G4BASE)/global/management/include -CPPFLAGS += -I$(G4BASE)/global/HEPGeometry/include -CPPFLAGS += -I$(G4BASE)/graphics_reps/include -CPPFLAGS += -I$(G4BASE)/intercoms/include -CPPFLAGS += -I$(G4BASE)/geometry/management/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/CSG/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/specific/include -CPPFLAGS += -I$(G4BASE)/materials/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/visualization/HepRep/History b/source/visualization/HepRep/History index 958c9e56f95..29c80c83d0f 100644 --- a/source/visualization/HepRep/History +++ b/source/visualization/HepRep/History @@ -4,6 +4,9 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry, which **must** added in reverse chronological order (newest at the top). It must **not** be used as a substitute for writing good git commit messages! +## 2023-02-06 Ben Morgan (vis-HepRep-V11-01-00) +- Isolate private headers and update dependencies + ## 2022-09-03 Ben Morgan (vis-HepRep-V11-00-02) - Make dependencies consistent. diff --git a/source/visualization/HepRep/include/G4HepRepFileSceneHandler.hh b/source/visualization/HepRep/include/private/G4HepRepFileSceneHandler.hh similarity index 100% rename from source/visualization/HepRep/include/G4HepRepFileSceneHandler.hh rename to source/visualization/HepRep/include/private/G4HepRepFileSceneHandler.hh diff --git a/source/visualization/HepRep/include/G4HepRepFileViewer.hh b/source/visualization/HepRep/include/private/G4HepRepFileViewer.hh similarity index 100% rename from source/visualization/HepRep/include/G4HepRepFileViewer.hh rename to source/visualization/HepRep/include/private/G4HepRepFileViewer.hh diff --git a/source/visualization/HepRep/include/G4HepRepMessenger.hh b/source/visualization/HepRep/include/private/G4HepRepMessenger.hh similarity index 100% rename from source/visualization/HepRep/include/G4HepRepMessenger.hh rename to source/visualization/HepRep/include/private/G4HepRepMessenger.hh diff --git a/source/visualization/HepRep/sources.cmake b/source/visualization/HepRep/sources.cmake index 9269ddf980a..6966b169076 100644 --- a/source/visualization/HepRep/sources.cmake +++ b/source/visualization/HepRep/sources.cmake @@ -4,9 +4,10 @@ geant4_add_module(G4visHepRep PUBLIC_HEADERS G4HepRepFile.hh + G4HepRepFileXMLWriter.hh + PRIVATE_HEADERS G4HepRepFileSceneHandler.hh G4HepRepFileViewer.hh - G4HepRepFileXMLWriter.hh G4HepRepMessenger.hh SOURCES G4HepRepFile.cc @@ -17,17 +18,17 @@ geant4_add_module(G4visHepRep geant4_module_link_libraries(G4visHepRep PUBLIC - G4csg - G4specsolids G4globman - G4intercoms G4vis_management PRIVATE + G4csg G4geometrymng G4graphics_reps G4hits + G4intercoms G4materials G4modeling + G4specsolids G4tracking) # List any source specific properties here diff --git a/source/visualization/History b/source/visualization/History index 6f3134aaddc..99677706eae 100644 --- a/source/visualization/History +++ b/source/visualization/History @@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2022-12-12 Ben Morgan (vis-V11-01-00) +- Remove obsolete GNUmakefile scripts + ## 2022-11-28 John Allison (vis-V11-00-04) - Numerous tags for 11.1 in vis sub-categories - see History files therein. diff --git a/source/visualization/OpenGL/GNUmakefile b/source/visualization/OpenGL/GNUmakefile deleted file mode 100644 index 005e27a85ff..00000000000 --- a/source/visualization/OpenGL/GNUmakefile +++ /dev/null @@ -1,134 +0,0 @@ - -name := G4OpenGL - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -# Definition of macro for moc files (for Qt use only) -ifdef G4VIS_BUILD_OPENGLQT_DRIVER -MOC_MACRO = -DG4VIS_BUILD_OPENGLQT_DRIVER -endif - -# For debug mode -# CPPFLAGS += -DG4DEBUG_VIS_OGL - -GLOBLIBS = libG4vis_management.lib libG4modeling.lib libG4tools.lib -ifdef G4LIB_BUILD_ZLIB - GLOBLIBS += libG4zlib.lib -endif -GLOBLIBS += libG4interfaces.lib libG4run.lib libG4event.lib -GLOBLIBS += libG4tracking.lib libG4processes.lib libG4digits_hits.lib -GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk -include $(G4INSTALL)/config/G4VIS_BUILD.gmk -include $(G4INSTALL)/config/G4UI_BUILD.gmk -include $(G4INSTALL)/config/interactivity.gmk - -CPPFLAGS += -I$(G4BASE)/visualization/externals/gl2ps/include -CPPFLAGS += -I$(G4BASE)/visualization/management/include -CPPFLAGS += -I$(G4BASE)/visualization/modeling/include -CPPFLAGS += -I$(G4BASE)/externals/g4tools/include -CPPFLAGS += -I$(G4BASE)/global/management/include -CPPFLAGS += -I$(G4BASE)/global/HEPGeometry/include -CPPFLAGS += -I$(G4BASE)/global/HEPRandom/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/CSG/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/specific/include -CPPFLAGS += -I$(G4BASE)/graphics_reps/include -CPPFLAGS += -I$(G4BASE)/geometry/management/include -CPPFLAGS += -I$(G4BASE)/geometry/navigation/include -CPPFLAGS += -I$(G4BASE)/geometry/volumes/include -CPPFLAGS += -I$(G4BASE)/processes/management/include -CPPFLAGS += -I$(G4BASE)/intercoms/include -CPPFLAGS += -I$(G4BASE)/interfaces/common/include -CPPFLAGS += -I$(G4BASE)/interfaces/basic/include -CPPFLAGS += -I$(G4BASE)/materials/include -CPPFLAGS += -I$(G4BASE)/track/include -CPPFLAGS += -I$(G4BASE)/tracking/include -CPPFLAGS += -I$(G4BASE)/digits_hits/digits/include -CPPFLAGS += -I$(G4BASE)/digits_hits/hits/include -CPPFLAGS += -I$(G4BASE)/particles/management/include -CPPFLAGS += -I$(G4BASE)/event/include -CPPFLAGS += -I$(G4BASE)/run/include -CPPFLAGS += -I$(G4BASE)/tasking/include - -# Locally adjust source list before including common.gmk -sources := $(addprefix src/,G4OpenGLImmediateViewer.cc \ - G4OpenGLImmediateSceneHandler.cc \ - G4OpenGLViewer.cc \ - G4OpenGLStoredViewer.cc \ - G4OpenGLStoredSceneHandler.cc \ - G4OpenGLFontBaseStore.cc \ - G4OpenGLSceneHandler.cc \ - G4OpenGLViewerMessenger.cc \ - G4OpenGLTransform3D.cc \ - G4VisFeaturesOfOpenGL.cc \ - G4gl2ps.cc) - -ifdef G4VIS_BUILD_OPENGLX_DRIVER - sources += $(addprefix src/,\ - G4OpenGLImmediateX.cc \ - G4OpenGLImmediateXViewer.cc \ - G4OpenGLStoredX.cc \ - G4OpenGLStoredXViewer.cc \ - G4OpenGLXViewer.cc) -endif - -ifdef G4VIS_BUILD_OPENGLXM_DRIVER - sources += $(addprefix src/,\ - G4OpenGLImmediateXm.cc \ - G4OpenGLImmediateXmViewer.cc \ - G4OpenGLStoredXm.cc \ - G4OpenGLStoredXmViewer.cc \ - G4OpenGLXm.cc \ - G4OpenGLXmBox.cc \ - G4OpenGLXmConvenienceRoutines.cc \ - G4OpenGLXmFourArrowButtons.cc \ - G4OpenGLXmFramedBox.cc \ - G4OpenGLXmMainMenubarCallbacks.cc \ - G4OpenGLXmPanningCallbacks.cc \ - G4OpenGLXmPushButton.cc \ - G4OpenGLXmRadioButton.cc \ - G4OpenGLXmRotationCallbacks.cc \ - G4OpenGLXmSeparator.cc \ - G4OpenGLXmSliderBar.cc \ - G4OpenGLXmStyleCallbacks.cc \ - G4OpenGLXmTextField.cc \ - G4OpenGLXmTopLevelShell.cc \ - G4OpenGLXmViewer.cc \ - G4OpenGLXmViewerMessenger.cc \ - G4OpenGLXmVWidgetComponent.cc \ - G4OpenGLXmVWidgetContainer.cc \ - G4OpenGLXmVWidgetObject.cc \ - G4OpenGLXmVWidgetShell.cc \ - G4OpenGLXmWindowHandlingCallbacks.cc) -endif - -ifdef G4VIS_BUILD_OPENGLQT_DRIVER - sources += $(addprefix src/, \ - G4OpenGLImmediateQt.cc \ - G4OpenGLImmediateQtViewer.cc \ - G4OpenGLQt.cc \ - G4OpenGLQtExportDialog.cc \ - G4OpenGLQtMovieDialog.cc \ - G4OpenGLVboDrawer.cc \ - G4OpenGLQtViewer.cc \ - G4OpenGLStoredQt.cc \ - G4OpenGLStoredQtSceneHandler.cc \ - G4OpenGLStoredQtViewer.cc) -endif - -ifdef G4VIS_BUILD_OPENGLWIN32_DRIVER - sources += $(addprefix src/, \ - G4OpenGLImmediateWin32.cc \ - G4OpenGLImmediateWin32Viewer.cc \ - G4OpenGLStoredWin32.cc \ - G4OpenGLStoredWin32Viewer.cc \ - G4OpenGLWin32Viewer.cc) -endif - -include $(G4INSTALL)/config/moc.gmk -include $(G4INSTALL)/config/common.gmk diff --git a/source/visualization/OpenGL/History b/source/visualization/OpenGL/History index 35d85cc591b..a7537e01a32 100644 --- a/source/visualization/OpenGL/History +++ b/source/visualization/OpenGL/History @@ -6,6 +6,70 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +# 2023-05-31 Ben Morgan (opengl-V11-01-09) +- Remove support for Qt < 5.9 + - Clarify remaining version checks using QT_VERSION_CHECK instead of raw hex +- Add inclusion of qdesktopwidget header required by Qt < 5.10 + +## 2023-05-16 John Allison (opengl-V11-01-08) +- G4OpenGLQtViewer: Disable the "old" scene tree. + - Comment out just two lines: + - Prevent G4OpenGLQtViewer overwriting the "new" scene tree. + - Prevent G4OpenGLQtViewer registering the "old" widget. + - The problem is G4OpenGLQtViewer removes the "new" scene tree and + registers the "old" one, not just for the OGLSQt viewer, + but for *all* subsequent viewers, so using OGLSQt completely prevents + use of the "new" scene tree. Geant4 examples execute + "/vis/open OGL" in the "vis.mac" macro, so the "new" scene tree is + never seen nor used. + - This is a "stop-gap" solution - we need to decide how to proceed. + - We could keep the "old" scene tree as an option. + - In favour of this: the "old" tree is more highly featured. + - We could remove the "old" scene tree completely. + - We should then transfer nice features of the "old" scene tree + to the "new" one. + - In any case, new features will be progressively added to the + "new" scene tree in future developments. + +## 2023-04-27 Ben Morgan (opengl-V11-01-07) +- Minimum build and code changes required to compile/link against both Qt5 and Qt6 + +## 2023-04-14 John Allison (opengl-V11-01-06) +- Co-working: visman-V11-01-04, greps-V11-01-03, interfaces-V11-01-11, + openinventor-V11-01-04, vis_toolssg-V11-01-05. +- New Scene Tree Phase 2 - first implementation of a no-frills GUI-side + - See visualization/management/History for full description. +- Revert earlier changes for the new scene tree. + - After the introduction of virtual G4VInteractiveSession::UpdateSceneTree + they are no loner necessary. + +## 2023-04-02 Ben Morgan (opengl-V11-01-05) +- No longer link to QtPrintSupport, which is not used in the toolkit. +- Remove inclusion of qprinter.h. + +## 2023-03-28 John Allison (opengl-V11-01-04) +- G4OpenGLQtViewer: + - Move G4UIQt* fUiQt from private to protected. + - Implement UpdateGUISceneTree. + - fUiQt->UpdateSceneTree(fSceneTree). +- G4OpenGLImmediateQtViewer.cc: + - Use UpdateGUISceneTree in DrawView. +- G4OpenGLStoredQtViewer.cc: + - Use UpdateGUISceneTree if (kernelVisitWasNeeded). + +## 2023-03-22 Ben Morgan (opengl-V11-01-03) +- Export public compile definitions to indicate availablity of specific drivers. Moves to + "use on link" model. + +## 2023-03-03 Ben Morgan (opengl-V11-01-02) +- Remove obsolete G4OPENGL_VERSION_2 symbol and G4OpenGLVboDrawer class. + +## 2023-01-30 Ben Morgan (opengl-V11-01-01) +- Link to new G4UIcore/UIimplementation modules in place of former G4UIbasic/UIcommon + +## 2023-01-28 Ben Morgan (opengl-V11-01-00) +- Make G4modeling a private dependency, unless Qt is active, when it must be public. + ## 2022-11-25 Gabriele Cosmo (opengl-V11-00-21) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/visualization/OpenGL/include/G4OpenGL.hh b/source/visualization/OpenGL/include/G4OpenGL.hh index c17b5eb2cd3..3d9a0b53ecd 100644 --- a/source/visualization/OpenGL/include/G4OpenGL.hh +++ b/source/visualization/OpenGL/include/G4OpenGL.hh @@ -71,21 +71,13 @@ #if defined (G4VIS_BUILD_OPENGLX_DRIVER) || defined (G4VIS_USE_OPENGLX) #else #ifdef __MACH__ -//# define G4OPENGL_VERSION_2 1 #include #else #include #endif - #include #endif #endif -#ifdef G4OPENGL_VERSION_2 -# undef G4VIS_BUILD_OPENGL_GL2PS -// include all redefinitions of openGl functions for Vertex Buffer Objects -# include "G4OpenGLVboDrawer.hh" -#endif - #define G4OPENGL_FLT_BIG 1.e20 #endif diff --git a/source/visualization/OpenGL/include/G4OpenGLImmediateQtViewer.hh b/source/visualization/OpenGL/include/G4OpenGLImmediateQtViewer.hh index 67cb748e286..ef335c90be1 100644 --- a/source/visualization/OpenGL/include/G4OpenGLImmediateQtViewer.hh +++ b/source/visualization/OpenGL/include/G4OpenGLImmediateQtViewer.hh @@ -35,14 +35,12 @@ #include "G4OpenGLImmediateViewer.hh" #include "G4OpenGLQtViewer.hh" -#include // include - #include "globals.hh" class G4OpenGLImmediateSceneHandler; class G4OpenGLImmediateQtViewer: - public G4OpenGLQtViewer, public G4OpenGLImmediateViewer, public QGLWidget { + public G4OpenGLQtViewer, public G4OpenGLImmediateViewer, public G4QGLWidgetType { public: G4OpenGLImmediateQtViewer (G4OpenGLImmediateSceneHandler& scene, diff --git a/source/visualization/OpenGL/include/G4OpenGLQtViewer.hh b/source/visualization/OpenGL/include/G4OpenGLQtViewer.hh index 87179ce1223..3b68def3a4f 100644 --- a/source/visualization/OpenGL/include/G4OpenGLQtViewer.hh +++ b/source/visualization/OpenGL/include/G4OpenGLQtViewer.hh @@ -49,7 +49,15 @@ class G4UImanager; class G4Text; class G4UIcommand; -class QGLWidget; +#include +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) +#include +using G4QGLWidgetType = QGLWidget; +#else +#include +using G4QGLWidgetType = QOpenGLWidget; +#endif + class QDialog; class QTextEdit; class QContextMenuEvent; @@ -72,9 +80,6 @@ class QColor; class G4OpenGLSceneHandler; class G4OpenGLQtMovieDialog; class QLineEdit; -#if QT_VERSION < 0x050600 -class QSignalMapper; -#endif class G4UIQt; class QTableWidget; class QTableWidgetItem; @@ -166,7 +171,7 @@ public: protected: void CreateGLQtContext (); - virtual void CreateMainWindow (QGLWidget*,const QString&); + virtual void CreateMainWindow (G4QGLWidgetType*,const QString&); void G4manageContextMenuEvent(QContextMenuEvent *e); void rotateQtScene(float, float); void rotateQtSceneToggle(float, float); @@ -184,6 +189,7 @@ protected: bool isCurrentWidget(); protected: + G4UIQt* fUiQt; QWidget* fGLWidget; void savePPMToTemp(); int fRecordFrameNumber; @@ -307,7 +313,7 @@ private: G4OpenGLQtMovieDialog* fMovieParametersDialog; RECORDING_STEP fRecordingStep; QProcess *fProcess; -#if QT_VERSION < 0x050e00 +#if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0)) QTime *fLastEventTime; #else QElapsedTimer *fLastEventTime; @@ -358,12 +364,7 @@ private: QTreeWidgetItem* fModelShortNameItem; int fNumber; int fMaxPOindexInserted; - G4UIQt* fUiQt; -#if QT_VERSION < 0x050600 - QSignalMapper *fSignalMapperMouse; - QSignalMapper *fSignalMapperSurface; - QSignalMapper *fSignalMapperPicking; -#endif + // quick map index to find next item std::map ::const_iterator fLastSceneTreeWidgetAskForIterator; std::map ::const_iterator fLastSceneTreeWidgetAskForIteratorEnd; diff --git a/source/visualization/OpenGL/include/G4OpenGLSceneHandler.hh b/source/visualization/OpenGL/include/G4OpenGLSceneHandler.hh index b3acfd17292..9c5092f7415 100644 --- a/source/visualization/OpenGL/include/G4OpenGLSceneHandler.hh +++ b/source/visualization/OpenGL/include/G4OpenGLSceneHandler.hh @@ -103,31 +103,6 @@ public: static void SetFlushAction(FlushAction action) {fFlushAction = action;} -#ifdef G4OPENGL_VERSION_2 - private : - // vertex vector to be given to the graphic card - std::vector fOglVertex; - // indices vector to be given to the graphic card - std::vector fOglIndices; - // before, drawyType (as GL_QUADS, GL_TRIANGLES...) was - // given in glBegin. Now it has to be given in glDrawArray (at the end) - GLenum fDrawArrayType; - // emulate GL_QUADS behaviour by inverting two last positions - bool fEmulate_GL_QUADS; - // Try to optimize a bit the pipeline - void OptimizeVBOForTrd(); - void OptimizeVBOForCons(G4int aNoFacet); - // emulating glEnd and glBegin - void glEndVBO(); - void glBeginVBO(GLenum type); - void drawVBOArray(std::vector vertices); - - // Buffers used to access vertex and indices elements - GLuint fVertexBufferObject; - GLuint fIndicesBufferObject; - -#endif //G4OPENGL_VERSION_2 - protected: G4OpenGLSceneHandler (G4VGraphicsSystem& system, @@ -141,19 +116,6 @@ protected: void ClearAndDestroyAtts(); // Destroys att holders and clears pick map. -#ifdef G4OPENGL_VERSION_2 - // Special case for VBO, we want to have acces to the VBO drawer everywhere - // because instead of OpenGL call which are static, VBO openGL functions : - // - Are functions of an WGLWidget object(G4OpenGLImmediateViewer in our case) - // - Needs an access to the QGLSHader - // - Have to be redefined in a VBO way - - inline void setVboDrawer(G4OpenGLVboDrawer* drawer) { - fVboDrawer = drawer; - } - G4OpenGLVboDrawer* fVboDrawer; -#endif // G4OPENGL_VERSION_2 - GLuint fPickName; std::map fPickMap; // For picking. diff --git a/source/visualization/OpenGL/include/G4OpenGLStoredQtViewer.hh b/source/visualization/OpenGL/include/G4OpenGLStoredQtViewer.hh index 18b3798a034..6b4054c9f1d 100644 --- a/source/visualization/OpenGL/include/G4OpenGLStoredQtViewer.hh +++ b/source/visualization/OpenGL/include/G4OpenGLStoredQtViewer.hh @@ -34,7 +34,6 @@ #include "G4OpenGLStoredViewer.hh" #include "G4OpenGLQtViewer.hh" -#include // include qglwidget class QMouseEvent; class QWheelEvent; @@ -43,7 +42,7 @@ class QContextMenuEvent; class G4OpenGLStoredSceneHandler; class G4OpenGLStoredQtViewer: - public G4OpenGLQtViewer, public G4OpenGLStoredViewer, public QGLWidget { + public G4OpenGLQtViewer, public G4OpenGLStoredViewer, public G4QGLWidgetType { public: G4OpenGLStoredQtViewer (G4OpenGLStoredSceneHandler& scene, diff --git a/source/visualization/OpenGL/include/G4OpenGLVboDrawer.hh b/source/visualization/OpenGL/include/G4OpenGLVboDrawer.hh deleted file mode 100644 index 7157684fd4d..00000000000 --- a/source/visualization/OpenGL/include/G4OpenGLVboDrawer.hh +++ /dev/null @@ -1,161 +0,0 @@ -// -// ******************************************************************** -// * 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. * -// ******************************************************************** -// -// -// -// -// G4OpenGLVboDrawer : Class to provide Wt and Qt specific -// functionality for OpenGL in GEANT4 -// All references to Wt removed - 1/3/21 JA - -#ifndef G4OpenGLVboDrawer_HH -#define G4OpenGLVboDrawer_HH - -#include "G4OpenGL.hh" - -#ifdef G4OPENGL_VERSION_2 - -// GL2PS -#define GL2PS_TEXT_B 4 -#define GL2PS_TEXT_BL 5 -#define GL2PS_TEXT_BR 6 -#define GL2PS_EPS 1 -#define GL2PS_PDF 2 -#define GL2PS_PS 3 -#define GL2PS_SVG 4 - - -#define glEdgeFlag(a) fVboDrawer->empty() -#define glRenderMode(a) fVboDrawer->returnNULL() -#define glClipPlane(a,b) fVboDrawer->empty() -#define glGetIntegerv(a,b) fVboDrawer->empty() -#define glGetFloatv(a,b) fVboDrawer->empty() -#define glGetDoublev(a,b) fVboDrawer->empty() -#define glPassThrough fVboDrawer->empty() -#define glGetBooleanv fVboDrawer->empty() -#define glLoadName(a) fVboDrawer->empty() -#define glPushMatrix() fVboDrawer->empty() -#define glLoadIdentity() fVboDrawer->empty() -#define glPopMatrix() fVboDrawer->empty() -#define glCallList(a) fVboDrawer->empty() -#define glGenLists(a) fVboDrawer->returnNULL() -#define glVertex3d fVboDrawer->empty() -#define glBegin fVboDrawer->empty() -#define glEnd fVboDrawer->empty() -#define glNewList(a,b) fVboDrawer->empty() -#define glEndList() fVboDrawer->empty() -#define glPolygonMode(a,b) fVboDrawer->empty() -#define glDrawBuffer(a) fVboDrawer->empty() -#define glDeleteLists(a,b) fVboDrawer->empty() -#define glStencilFunc(a,b,c) fVboDrawer->empty() -#define glStencilOp(a,b,c) fVboDrawer->empty() -#define glColorMaterial(a,b) fVboDrawer->empty() -#define glLightfv(a,b,c) fVboDrawer->empty() -#define glScaled(a,b,c) fVboDrawer->empty() -#define gluLookAt fVboDrawer->empty() -#define gluPickMatrix fVboDrawer->empty() -#define glSelectBuffer(a,b) fVboDrawer->empty() -#define glInitNames() fVboDrawer->empty() -#define glPushNames(a) fVboDrawer->empty() -#define glPushName(a) fVboDrawer->empty() -#define glPixelStorei(a,b) fVboDrawer->empty() -#define glRasterPos3d(a,b,c) fVboDrawer->empty() -#define Geant4_gl2psTextOpt(a,b,c,d,e) fVboDrawer->empty() -#define glMaterialfv(a,b,c) fVboDrawer->empty() -#define glCullFace(a) fVboDrawer->empty() -#define glReadBuffer(a) fVboDrawer->empty() -#define glReadPixels(a,b,c,d,e,f,g) fVboDrawer->empty() -#define glTranslatef(a,b,c) fVboDrawer->empty() // TO BE FIXED - -// +--------------------------------+ -// + QT (OpenGL ES) case + -// +--------------------------------+ - -class G4OpenGLImmediateQtViewer; - -#define glOrtho fVboDrawer->vboGlOrtho -#define glFrustum fVboDrawer->vboGlFrustum -#define glMultMatrixf fVboDrawer->vboGlMultMatrixf -#define glMultMatrixd fVboDrawer->vboGlMultMatrixd -#define glMatrixMode fVboDrawer->vboGlMatrixMode -#define glPointSize fVboDrawer->vboGlPointSize -#define glColor3d fVboDrawer->vboGlColor3d -#define glColor4d fVboDrawer->vboGlColor4d -#define glColor4fv fVboDrawer->vboGlColor4fv - - -class G4OpenGLViewer; - -class G4OpenGLVboDrawer { -public: - G4OpenGLVboDrawer (G4OpenGLViewer*, std::string type); - // Create a new OpenGL Drawer. Type could be one of the following : - // OGL-ES, OGL-Stored, OGL-Immediate, OGL-VBO - - virtual ~G4OpenGLVboDrawer (); - - void vboGlMultMatrixf( const GLfloat *m ); - void vboGlMultMatrixd( const GLdouble *m ); - - void vboGlFlush(); - void vboGlOrtho(GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble); - void vboGlFrustum(GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble); - void vboGlMatrixMode(GLenum); - void vboGlPointSize(float size); - inline void vboGlColor3d(int red,int green,int blue) { - vboGlColor4d(red,green, blue, 1.0); - } - void vboGlColor4d(int red,int green,int blue,int alpha); - void vboGlColor4fv(const GLfloat*); - inline const char * getFragmentShaderSrc() { - return fFragmentShaderSrc; - } - inline const char * getVertexShaderSrc() { - return fVertexShaderSrc; - } - inline bool isVBO() { - if ((fOGLType == "OGL-ES") || (fOGLType == "OGL-VBO")) { - return true; - } - return false; - } - inline void empty() {} - inline GLuint returnNULL() { - return 0; - } - -private: - const char *fFragmentShaderSrc; - const char *fVertexShaderSrc; - std::string fOGLType; - GLenum fMatrixMode; - - G4OpenGLImmediateQtViewer* fVboViewer; -}; - -#endif // G4OPENGL_VERSION_2 - -#endif // G4OpenGLVboDrawer_HH - diff --git a/source/visualization/OpenGL/include/G4OpenGLViewer.hh b/source/visualization/OpenGL/include/G4OpenGLViewer.hh index 752c881a9a1..8521e0dd645 100644 --- a/source/visualization/OpenGL/include/G4OpenGLViewer.hh +++ b/source/visualization/OpenGL/include/G4OpenGLViewer.hh @@ -34,9 +34,6 @@ #include "G4VViewer.hh" #include "G4OpenGL.hh" -#ifdef G4OPENGL_VERSION_2 -#include "G4OpenGLVboDrawer.hh" -#endif class G4OpenGLSceneHandler; class G4gl2ps; @@ -110,16 +107,6 @@ public: virtual bool exportImage(std::string name="", int width=-1, int height=-1); bool setExportImageFormat(std::string format,bool quiet = false); -#ifdef G4OPENGL_VERSION_2 - - void setVboDrawer(G4OpenGLVboDrawer* drawer); - G4OpenGLVboDrawer* fVboDrawer; - - inline bool isInitialized() { - return fGlViewInitialized; - } -#endif - protected: G4OpenGLViewer (G4OpenGLSceneHandler& scene); virtual ~G4OpenGLViewer (); @@ -241,39 +228,6 @@ private : bool fIsGettingPickInfos; // Block SetView() during picking -#ifdef G4OPENGL_VERSION_2 -public: - inline GLuint getShaderProgram() { - return fShaderProgram; - } - inline GLuint getShaderProjectionMatrix() { - return fpMatrixUniform; - } - inline GLuint getShaderTransformMatrix() { - return ftMatrixUniform; - } - inline GLuint getShaderViewModelMatrix() { - return fmvMatrixUniform; - } - -protected : - - // define the keyword shader to handle it in a better way for OpenGL and WebGL -#define Shader GLuint - - // define some attributes and variables for OpenGL and WebGL - GLuint fShaderProgram; - - // Program and related variables - GLuint fVertexPositionAttribute; - GLuint fVertexNormalAttribute; - GLuint fpMatrixUniform; - GLuint fcMatrixUniform; - GLuint fmvMatrixUniform; - GLuint fnMatrixUniform; - GLuint ftMatrixUniform; - -#endif }; #endif diff --git a/source/visualization/OpenGL/sources.cmake b/source/visualization/OpenGL/sources.cmake index 28779886db0..2ad9130593a 100644 --- a/source/visualization/OpenGL/sources.cmake +++ b/source/visualization/OpenGL/sources.cmake @@ -32,7 +32,6 @@ geant4_add_module(G4OpenGL geant4_module_link_libraries(G4OpenGL PUBLIC G4globman - G4modeling G4graphics_reps G4hepgeometry G4intercoms @@ -41,6 +40,17 @@ geant4_module_link_libraries(G4OpenGL G4geometrymng G4run) +# Minor hack: G4modeling is a private dependency, unless Qt is activated when it +# becomes a public dependency. CMake will deduplicate the link in favour of PUBLIC +# when appropriate, but we can't then check consistency reliably. So we have to +# make the link dependent on building for Qt... +# Another demonstratation of awkward vis system of more than one driver per library... +if(GEANT4_USE_QT) + geant4_module_link_libraries(G4OpenGL PUBLIC G4modeling) +else() + geant4_module_link_libraries(G4OpenGL PRIVATE G4modeling) +endif() + #---------------------------------------------------------------------------- # Add X11 OpenGL Support if requested if(GEANT4_USE_OPENGL_X11) @@ -59,7 +69,9 @@ if(GEANT4_USE_OPENGL_X11) G4OpenGLXViewer.cc) # Add the compile definitions needed for the X11 component (G4OpenGL.hh, G4OpenGLViewer.cc) - geant4_module_compile_definitions(G4OpenGL PRIVATE G4VIS_BUILD_OPENGLX_DRIVER) + geant4_module_compile_definitions(G4OpenGL + PUBLIC G4VIS_USE_OPENGLX + PRIVATE G4VIS_BUILD_OPENGLX_DRIVER) endif() #---------------------------------------------------------------------------- @@ -123,10 +135,12 @@ if(GEANT4_USE_XM) endif() # Add the compile definitions needed for the Xm component (G4OpenGL.hh, G4OpenGLViewer.cc) - geant4_module_compile_definitions(G4OpenGL PRIVATE G4VIS_BUILD_OPENGLXM_DRIVER) + geant4_module_compile_definitions(G4OpenGL + PUBLIC G4VIS_USE_OPENGLXM + PRIVATE G4VIS_BUILD_OPENGLXM_DRIVER) # Add in Xm and needed modules - geant4_module_link_libraries(G4OpenGL PUBLIC Motif::Xm PRIVATE G4UIcommon) + geant4_module_link_libraries(G4OpenGL PUBLIC Motif::Xm PRIVATE G4UIimplementation) endif() # Common X11/Xm link libraries @@ -149,7 +163,6 @@ if(GEANT4_USE_QT) G4OpenGLQt.hh G4OpenGLQtExportDialog.hh G4OpenGLQtMovieDialog.hh - G4OpenGLVboDrawer.hh G4OpenGLQtViewer.hh G4OpenGLStoredQt.hh G4OpenGLStoredQtSceneHandler.hh @@ -160,19 +173,24 @@ if(GEANT4_USE_QT) G4OpenGLQt.cc G4OpenGLQtExportDialog.cc G4OpenGLQtMovieDialog.cc - G4OpenGLVboDrawer.cc G4OpenGLQtViewer.cc G4OpenGLStoredQt.cc G4OpenGLStoredQtSceneHandler.cc G4OpenGLStoredQtViewer.cc) # Add the definitions (G4OpenGL.hh, G4OpenGLViewer.cc) - geant4_module_compile_definitions(G4OpenGL PRIVATE G4VIS_BUILD_OPENGLQT_DRIVER) + geant4_module_compile_definitions(G4OpenGL + PUBLIC G4VIS_USE_OPENGLQT + PRIVATE G4VIS_BUILD_OPENGLQT_DRIVER) # Add in Qt libraries and geant4 modules geant4_module_link_libraries(G4OpenGL - PUBLIC Qt${QT_VERSION_MAJOR}::OpenGL Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::PrintSupport Qt${QT_VERSION_MAJOR}::Widgets OpenGL::GL - PRIVATE G4UIbasic G4UIcommon) + PUBLIC Qt${QT_VERSION_MAJOR}::OpenGL Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::Widgets OpenGL::GL + PRIVATE G4UIimplementation) + + if(QT_VERSION_MAJOR GREATER 5) + geant4_module_link_libraries(G4OpenGL PRIVATE Qt${QT_VERSION_MAJOR}::OpenGLWidgets) + endif() endif() #---------------------------------------------------------------------------- @@ -194,7 +212,10 @@ if(GEANT4_USE_OPENGL_WIN32) G4OpenGLWin32Viewer.cc ) # Add the compile definitions (G4OpenGL.hh, G4OpenGLViewer.cc) - geant4_module_compile_definitions(G4OpenGL PRIVATE G4VIS_BUILD_OPENGLWIN32_DRIVER) + geant4_module_compile_definitions(G4OpenGL + PUBLIC G4VIS_USE_OPENGLWIN32 + PRIVATE G4VIS_BUILD_OPENGLWIN32_DRIVER) + geant4_module_link_libraries(G4OpenGL PUBLIC OpenGL::GL) endif() diff --git a/source/visualization/OpenGL/src/G4OpenGLImmediateQtViewer.cc b/source/visualization/OpenGL/src/G4OpenGLImmediateQtViewer.cc index 286637f81a8..5de9cd1cf04 100644 --- a/source/visualization/OpenGL/src/G4OpenGLImmediateQtViewer.cc +++ b/source/visualization/OpenGL/src/G4OpenGLImmediateQtViewer.cc @@ -39,10 +39,6 @@ #include #include -#ifdef G4OPENGL_VERSION_2 -#include -#endif - G4OpenGLImmediateQtViewer::G4OpenGLImmediateQtViewer (G4OpenGLImmediateSceneHandler& sceneHandler, @@ -57,13 +53,6 @@ G4OpenGLImmediateQtViewer::G4OpenGLImmediateQtViewer setFocusPolicy(Qt::StrongFocus); // enable keybord events fHasToRepaint = false; fPaintEventLock = false; - - // Create a new drawer - // register the QtDrawer to the OpenGLViewer -#ifdef G4OPENGL_VERSION_2 - setVboDrawer(new G4OpenGLVboDrawer(this,"OGL-VBO")); -#endif - fUpdateGLLock = false; if (fViewId < 0) return; // In case error in base class instantiation. @@ -82,8 +71,8 @@ void G4OpenGLImmediateQtViewer::Initialise() { glDrawBuffer (GL_BACK); // set the good tab active - if (QGLWidget::parentWidget()) { - QTabWidget *parentTab = dynamic_cast (QGLWidget::parentWidget()->parent()) ; + if (G4QGLWidgetType::parentWidget()) { + auto *parentTab = dynamic_cast (G4QGLWidgetType::parentWidget()->parent()) ; if (parentTab) { parentTab->setCurrentIndex(parentTab->count()-1); } @@ -94,42 +83,7 @@ void G4OpenGLImmediateQtViewer::Initialise() { void G4OpenGLImmediateQtViewer::initializeGL () { -#ifndef G4OPENGL_VERSION_2 InitializeGLView (); -#else - QGLShaderProgram *aQGLShaderProgram = new QGLShaderProgram (context()); - fShaderProgram = aQGLShaderProgram->programId (); - - aQGLShaderProgram->addShaderFromSourceCode(QGLShader::Vertex, - fVboDrawer->getVertexShaderSrc()); - - aQGLShaderProgram->addShaderFromSourceCode(QGLShader::Fragment, - fVboDrawer->getFragmentShaderSrc()); - - aQGLShaderProgram->link(); - aQGLShaderProgram->bind(); - - fVertexPositionAttribute = glGetAttribLocation(fShaderProgram, "aVertexPosition"); - fcMatrixUniform = glGetUniformLocation(fShaderProgram, "uCMatrix"); - fpMatrixUniform = glGetUniformLocation(fShaderProgram, "uPMatrix"); - ftMatrixUniform = glGetUniformLocation(fShaderProgram, "uTMatrix"); - fmvMatrixUniform = glGetUniformLocation(fShaderProgram, "uMVMatrix"); - - // Load identity at beginning - float identity[16] = { - 1.0f, 0, 0, 0, - 0, 1.0f, 0, 0, - 0, 0, 1.0f, 0, - 0, 0, 0, 1.0f - }; - glUniformMatrix4fv (fcMatrixUniform, 1, 0, identity); - glUniformMatrix4fv (fpMatrixUniform, 1, 0, identity); - glUniformMatrix4fv (ftMatrixUniform, 1, 0, identity); - glUniformMatrix4fv(fmvMatrixUniform, 1, 0, identity); - - glUseProgram(fShaderProgram); - -#endif // If a double buffer context has been forced upon us, ignore the // back buffer for this OpenGLImmediate view. @@ -314,7 +268,12 @@ void G4OpenGLImmediateQtViewer::paintEvent(QPaintEvent *) { // Force a repaint next time if the FRAMEBUFFER is not READY fHasToRepaint = isFramebufferReady(); if ( fHasToRepaint) { +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) updateGL(); +#else + // Not sure this is correct.... + paintGL(); +#endif } } diff --git a/source/visualization/OpenGL/src/G4OpenGLImmediateSceneHandler.cc b/source/visualization/OpenGL/src/G4OpenGLImmediateSceneHandler.cc index 88234453944..fb0af7aed8f 100644 --- a/source/visualization/OpenGL/src/G4OpenGLImmediateSceneHandler.cc +++ b/source/visualization/OpenGL/src/G4OpenGLImmediateSceneHandler.cc @@ -248,9 +248,7 @@ void G4OpenGLImmediateSceneHandler::BeginPrimitives2D G4OpenGLTransform3D oglt (objectTransformation); glMultMatrixd (oglt.GetGLMatrix ()); glDisable(GL_DEPTH_TEST); // But see parent scene handler!! In -#ifndef G4OPENGL_VERSION_2 glDisable (GL_LIGHTING); // some cases, we need to re-iterate this. -#endif } void G4OpenGLImmediateSceneHandler::EndPrimitives2D() diff --git a/source/visualization/OpenGL/src/G4OpenGLQtExportDialog.cc b/source/visualization/OpenGL/src/G4OpenGLQtExportDialog.cc index 5d9463bdc3d..6ca0cafa740 100644 --- a/source/visualization/OpenGL/src/G4OpenGLQtExportDialog.cc +++ b/source/visualization/OpenGL/src/G4OpenGLQtExportDialog.cc @@ -68,7 +68,7 @@ G4OpenGLQtExportDialog::G4OpenGLQtExportDialog( // global layout QVBoxLayout* globalVLayout = new QVBoxLayout(this); - globalVLayout->setMargin(10); + globalVLayout->setContentsMargins(10,10,10,10); globalVLayout->setSpacing(10); @@ -78,14 +78,14 @@ G4OpenGLQtExportDialog::G4OpenGLQtExportDialog( QWidget * sizeWidget = new QWidget(this); // widget containing group button QVBoxLayout * sizeWidgetLayout = new QVBoxLayout(sizeWidget); - sizeWidgetLayout->setMargin (10); + sizeWidgetLayout->setContentsMargins(10,10,10,10); // original and modify radiobuttons sizeGroupBox = new QGroupBox(tr("Size")); QVBoxLayout *sizeGroupBoxLayout = new QVBoxLayout(sizeGroupBox); QButtonGroup * sizeButtonGroupBox = new QButtonGroup(); - sizeGroupBoxLayout->setMargin (15); + sizeGroupBoxLayout->setContentsMargins(15,15,15,15); original = new QRadioButton("Original"); modify = new QRadioButton("Modify"); @@ -157,7 +157,7 @@ G4OpenGLQtExportDialog::G4OpenGLQtExportDialog( QVBoxLayout * EPSGroupBoxLayout = new QVBoxLayout(EPSWidgetGroupBox); - EPSGroupBoxLayout->setMargin (15); + EPSGroupBoxLayout->setContentsMargins(15,15,15,15); // colorButton = new QRadioButton("Color",EPSWidgetGroupBox); // BWButton = new QRadioButton("Grayscale",EPSWidgetGroupBox); @@ -187,7 +187,7 @@ G4OpenGLQtExportDialog::G4OpenGLQtExportDialog( QGroupBox *imageGroupBox = new QGroupBox(tr("Image quality"),this); QHBoxLayout *hSliderLayout = new QHBoxLayout(imageGroupBox); - hSliderLayout->setMargin (15); + hSliderLayout->setContentsMargins(15,15,15,15); qualitySlider= new QSlider(Qt::Horizontal,imageGroupBox); qualitySlider->setMinimum(0); diff --git a/source/visualization/OpenGL/src/G4OpenGLQtMovieDialog.cc b/source/visualization/OpenGL/src/G4OpenGLQtMovieDialog.cc index d1530b10141..d5b3d0d8359 100644 --- a/source/visualization/OpenGL/src/G4OpenGLQtMovieDialog.cc +++ b/source/visualization/OpenGL/src/G4OpenGLQtMovieDialog.cc @@ -74,7 +74,7 @@ G4OpenGLQtMovieDialog::G4OpenGLQtMovieDialog( // global layout QVBoxLayout* globalVLayout = new QVBoxLayout(this); - globalVLayout->setMargin(10); + globalVLayout->setContentsMargins(10,10,10,10); globalVLayout->setSpacing(10); // Encoder group box @@ -92,7 +92,7 @@ G4OpenGLQtMovieDialog::G4OpenGLQtMovieDialog( fEncoderStatus = new QLabel(encoderGroupBox); fEncoderStatus->setWordWrap(true); - encoderVGroupBoxLayout->setMargin(15); + encoderVGroupBoxLayout->setContentsMargins(15,15,15,15); fEncoderStatus->setText(""); @@ -122,7 +122,7 @@ G4OpenGLQtMovieDialog::G4OpenGLQtMovieDialog( fTempFolderStatus = new QLabel(tempFolderGroupBox); fTempFolderStatus->setWordWrap(true); - tempFolderVGroupBoxLayout->setMargin(15); + tempFolderVGroupBoxLayout->setContentsMargins(15,15,15,15); fTempFolderStatus->setText(""); tempFolderHBoxLayout->addWidget(fTempFolderPath); @@ -153,7 +153,7 @@ G4OpenGLQtMovieDialog::G4OpenGLQtMovieDialog( fSaveFileStatus = new QLabel(saveFileGroupBox); fSaveFileStatus->setWordWrap(true); - saveFileVGroupBoxLayout->setMargin(15); + saveFileVGroupBoxLayout->setContentsMargins(15,15,15,15); fSaveFileStatus->setText(""); saveFileHBoxLayout->addWidget(fSaveFileName); @@ -177,7 +177,7 @@ G4OpenGLQtMovieDialog::G4OpenGLQtMovieDialog( QVBoxLayout *statusVGroupBoxLayout = new QVBoxLayout(statusGroupBox); fRecordingStatus = new QLabel(statusGroupBox); - statusVGroupBoxLayout->setMargin(15); + statusVGroupBoxLayout->setContentsMargins(15,15,15,15); fRecordingStatus->setWordWrap(true); QPalette mypalette( fRecordingStatus->palette() ); mypalette.setColor( QPalette::Text, Qt::green); diff --git a/source/visualization/OpenGL/src/G4OpenGLQtViewer.cc b/source/visualization/OpenGL/src/G4OpenGLQtViewer.cc index 80ced82502a..53fddb00461 100644 --- a/source/visualization/OpenGL/src/G4OpenGLQtViewer.cc +++ b/source/visualization/OpenGL/src/G4OpenGLQtViewer.cc @@ -57,8 +57,6 @@ #include #include #include -#include - #include #include @@ -67,13 +65,14 @@ #include #include #include -#include #include -#if QT_VERSION >= 0x050e00 +#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) #include #endif +#if (QT_VERSION < QT_VERSION_CHECK(5, 10, 0)) + #include "qdesktopwidget.h" +#endif #include -#include // include #include #include #include //include @@ -81,11 +80,7 @@ #include #include #include -#if QT_VERSION < 0x050600 -#include -#else #include -#endif #include #include #include @@ -95,6 +90,12 @@ #include #include +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) +#include +#else +#include +#endif + #ifndef G4GMAKE #include "moc_G4OpenGLQtViewer.cpp" #endif @@ -112,7 +113,7 @@ namespace ////////////////////////////////////////////////////////////////////////////// void G4OpenGLQtViewer::CreateMainWindow ( - QGLWidget* glWidget + G4QGLWidgetType* glWidget ,const QString& name ) ////////////////////////////////////////////////////////////////////////////// @@ -177,7 +178,7 @@ void G4OpenGLQtViewer::CreateMainWindow ( glWidget->setParent(glDialogWidget); QHBoxLayout *mainLayout = new QHBoxLayout(); - mainLayout->setMargin(0); + mainLayout->setContentsMargins(0,0,0,0); mainLayout->setSpacing(0); mainLayout->addWidget(fGLWidget); if (fGLWidget->inherits("QMainWindow")) { @@ -187,20 +188,20 @@ void G4OpenGLQtViewer::CreateMainWindow ( //useful for MACOSX, we have to compt the menuBar height -#if QT_VERSION >= 0x050a00 - G4int offset = QApplication::desktop()->height() +#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)) + G4int offset = QGuiApplication::primaryScreen()->availableGeometry().height() - QGuiApplication::screenAt(QPoint(20,20))->availableGeometry().height(); #else G4int offset = QApplication::desktop()->height() - QApplication::desktop()->availableGeometry().height(); #endif - G4int YPos= fVP.GetWindowAbsoluteLocationHintY(QApplication::desktop()->height()); - if (fVP.GetWindowAbsoluteLocationHintY(QApplication::desktop()->height())< offset) { + G4int YPos= fVP.GetWindowAbsoluteLocationHintY(QGuiApplication::primaryScreen()->availableGeometry().height()); + if (fVP.GetWindowAbsoluteLocationHintY(QGuiApplication::primaryScreen()->availableGeometry().height())< offset) { YPos = offset; } glDialogWidget->resize(getWinWidth(), getWinHeight()); - glDialogWidget->move(fVP.GetWindowAbsoluteLocationHintX(QApplication::desktop()->width()),YPos); + glDialogWidget->move(fVP.GetWindowAbsoluteLocationHintX(QGuiApplication::primaryScreen()->availableGeometry().width()),YPos); glDialogWidget->show(); } @@ -218,6 +219,7 @@ G4OpenGLQtViewer::G4OpenGLQtViewer ( ) :G4VViewer (scene, -1) ,G4OpenGLViewer (scene) + ,fUiQt(NULL) ,fGLWidget(NULL) ,fRecordFrameNumber(0) ,fMouseOnSceneTree(false) @@ -266,12 +268,6 @@ G4OpenGLQtViewer::G4OpenGLQtViewer ( ,fSceneTreeDepth(1) ,fModelShortNameItem(NULL) ,fMaxPOindexInserted(-1) - ,fUiQt(NULL) -#if QT_VERSION < 0x050600 - ,fSignalMapperMouse(NULL) - ,fSignalMapperSurface(NULL) - ,fSignalMapperPicking(NULL) -#endif ,fTreeIconOpen(NULL) ,fTreeIconClosed(NULL) ,fLastExportSliderValue(80) @@ -298,14 +294,10 @@ G4OpenGLQtViewer::G4OpenGLQtViewer ( initMovieParameters(); -#if QT_VERSION < 0x050e00 +#if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0)) fLastEventTime = new QTime(); #else fLastEventTime = new QElapsedTimer(); -#endif -#if QT_VERSION < 0x050600 - fSignalMapperMouse = new QSignalMapper(this); - fSignalMapperSurface = new QSignalMapper(this); #endif // Set default path and format fFileSavePath = QDir::currentPath(); @@ -546,20 +538,11 @@ void G4OpenGLQtViewer::createPopupMenu() { fContextMenu = new QMenu("All"); QMenu *mMouseAction = fContextMenu->addMenu("&Mouse actions"); - -#if QT_VERSION < 0x050600 - fMouseRotateAction = mMouseAction->addAction("Rotate", fSignalMapperMouse, SLOT(map())); - fMouseMoveAction = mMouseAction->addAction("Move", fSignalMapperMouse, SLOT(map())); - fMousePickAction = mMouseAction->addAction("Pick", fSignalMapperMouse, SLOT(map())); - fMouseZoomOutAction = mMouseAction->addAction("Zoom out", fSignalMapperMouse, SLOT(map())); - fMouseZoomInAction = mMouseAction->addAction("Zoom in", fSignalMapperMouse, SLOT(map())); -#else fMouseRotateAction = mMouseAction->addAction("Rotate", this, [this](){ this->toggleMouseAction(1); }); fMouseMoveAction = mMouseAction->addAction("Move", this, [this](){ this->toggleMouseAction(2); }); fMousePickAction = mMouseAction->addAction("Pick", this, [this](){ this->toggleMouseAction(3); }); fMouseZoomOutAction = mMouseAction->addAction("Zoom out", this, [this](){ this->toggleMouseAction(4); }); fMouseZoomInAction = mMouseAction->addAction("Zoom in", this, [this](){ this->toggleMouseAction(5); }); -#endif QAction *shortcutsAction = mMouseAction->addAction("Show shortcuts"); fMouseRotateAction->setCheckable(true); @@ -569,15 +552,6 @@ void G4OpenGLQtViewer::createPopupMenu() { fMouseZoomInAction->setCheckable(true); shortcutsAction->setCheckable(false); -#if QT_VERSION < 0x050600 - connect(fSignalMapperMouse, SIGNAL(mapped(int)),this, SLOT(toggleMouseAction(int))); - fSignalMapperMouse->setMapping(fMouseRotateAction,1); - fSignalMapperMouse->setMapping(fMouseMoveAction,2); - fSignalMapperMouse->setMapping(fMousePickAction,3); - fSignalMapperMouse->setMapping(fMouseZoomOutAction,4); - fSignalMapperMouse->setMapping(fMouseZoomInAction,5); -#endif - QObject::connect(shortcutsAction, SIGNAL(triggered(bool)), this, @@ -588,46 +562,15 @@ void G4OpenGLQtViewer::createPopupMenu() { QMenu *mProjection = mStyle->addMenu("&Projection"); -#if QT_VERSION < 0x050600 - fProjectionOrtho = mProjection->addAction("Orthographic", fSignalMapperSurface, SLOT(map())); - fProjectionPerspective = mProjection->addAction("Perspective", fSignalMapperSurface, SLOT(map())); - - // INIT mProjection - if (fVP.GetFieldHalfAngle() == 0) { - createRadioAction(fProjectionOrtho, fProjectionPerspective,SLOT(toggleProjection(bool)),1); - } else { - createRadioAction(fProjectionOrtho, fProjectionPerspective,SLOT(toggleProjection(bool)),2); - } -#else // no more radioAction, not realy useful and could be confusing to use context menu and icon at the same time fProjectionOrtho = mProjection->addAction("Orthographic", this, [this](){ this->toggleProjection(true); }); fProjectionPerspective = mProjection->addAction("Perspective", this, [this](){ this->toggleProjection(false); }); -#endif // === Drawing Menu === QMenu *mDrawing = mStyle->addMenu("&Drawing"); - -#if QT_VERSION < 0x050600 - fDrawingWireframe = mDrawing->addAction("Wireframe", fSignalMapperSurface, SLOT(map())); - - fDrawingLineRemoval = mDrawing->addAction("Hidden line removal", fSignalMapperSurface, SLOT(map())); - - fDrawingSurfaceRemoval = mDrawing->addAction("Hidden Surface removal", fSignalMapperSurface, SLOT(map())); - - fDrawingLineSurfaceRemoval = mDrawing->addAction("Hidden line and surface removal", fSignalMapperSurface, SLOT(map())); -#endif - -#if QT_VERSION < 0x050600 - connect(fSignalMapperSurface, SIGNAL(mapped(int)),this, SLOT(toggleSurfaceAction(int))); - fSignalMapperSurface->setMapping(fDrawingWireframe,1); - fSignalMapperSurface->setMapping(fDrawingLineRemoval,2); - fSignalMapperSurface->setMapping(fDrawingSurfaceRemoval,3); - fSignalMapperSurface->setMapping(fDrawingLineSurfaceRemoval,4); -#else fDrawingWireframe = mDrawing->addAction("Wireframe", this, [this](){ this->toggleSurfaceAction(1); }); fDrawingLineRemoval = mDrawing->addAction("Hidden line removal", this, [this](){ this->toggleSurfaceAction(2); }); fDrawingSurfaceRemoval = mDrawing->addAction("Hidden Surface removal", this, [this](){ this->toggleSurfaceAction(3); }); fDrawingLineSurfaceRemoval = mDrawing->addAction("Hidden line and surface removal", this, [this](){ this->toggleSurfaceAction(4); }); -#endif fDrawingWireframe->setCheckable(true); fDrawingLineRemoval->setCheckable(true); @@ -1067,7 +1010,7 @@ void G4OpenGLQtViewer::savePPMToTemp() { if (fMovieTempFolderPath == "") { return; } - QGLWidget* qGLW = dynamic_cast (fGLWidget) ; + auto qGLW = dynamic_cast (fGLWidget) ; if (! qGLW) { return; } @@ -1075,7 +1018,11 @@ void G4OpenGLQtViewer::savePPMToTemp() { QString filePath =fMovieTempFolderPath+fileName; QImage image; +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) image = qGLW->grabFrameBuffer(); +#else + image = qGLW->grabFramebuffer(); +#endif bool res = false; res = image.save(filePath,0); @@ -1168,17 +1115,11 @@ void G4OpenGLQtViewer::actionChangeBackgroundColor() { // //background colour in its drawing... // // (Note added by JA 13/9/2005) Background now handled in view // // parameters. A kernel visit is triggered on change of background. - -#if QT_VERSION < 0x040500 - bool a; - const QColor color = QColor(QColorDialog::getRgba (QColor(Qt::black).rgba(),&a,fGLWidget)); -#else const QColor color = QColorDialog::getColor(Qt::black, fGLWidget, " Get background color and transparency", QColorDialog::ShowAlphaChannel); -#endif if (color.isValid()) { G4Colour colour(((G4double)color.red())/255, ((G4double)color.green())/255, @@ -1192,17 +1133,11 @@ void G4OpenGLQtViewer::actionChangeBackgroundColor() { } void G4OpenGLQtViewer::actionChangeTextColor() { - -#if QT_VERSION < 0x040500 - bool a; - const QColor color = QColor(QColorDialog::getRgba (QColor(Qt::yellow).rgba(),&a,fGLWidget)); -#else const QColor& color = QColorDialog::getColor(Qt::yellow, fGLWidget, " Get text color and transparency", QColorDialog::ShowAlphaChannel); -#endif if (color.isValid()) { G4Colour colour(((G4double)color.red())/255, ((G4double)color.green())/255, @@ -1217,17 +1152,11 @@ void G4OpenGLQtViewer::actionChangeTextColor() { } void G4OpenGLQtViewer::actionChangeDefaultColor() { - -#if QT_VERSION < 0x040500 - bool a; - const QColor color = QColor(QColorDialog::getRgba (QColor(Qt::white).rgba(),&a,fGLWidget)); -#else const QColor& color = QColorDialog::getColor(Qt::white, fGLWidget, " Get default color and transparency", QColorDialog::ShowAlphaChannel); -#endif if (color.isValid()) { G4Colour colour(((G4double)color.red())/255, ((G4double)color.green())/255, @@ -1361,7 +1290,7 @@ void G4OpenGLQtViewer::G4MouseReleaseEvent(QMouseEvent *evnt) } fAutoMove = true; -#if QT_VERSION < 0x050e00 +#if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0)) QTime lastMoveTime; #else QElapsedTimer lastMoveTime; @@ -1458,7 +1387,12 @@ void G4OpenGLQtViewer::G4MouseMoveEvent(QMouseEvent *evnt) fLastPos3 = fLastPos2; fLastPos2 = fLastPos1; + +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) fLastPos1 = QPoint(evnt->x(), evnt->y()); +#else + fLastPos1 = QPoint(evnt->position().x(), evnt->position().y()); +#endif int deltaX = fLastPos2.x()-fLastPos1.x(); int deltaY = fLastPos2.y()-fLastPos1.y(); @@ -1599,11 +1533,9 @@ void G4OpenGLQtViewer::rescaleImage( void G4OpenGLQtViewer::G4wheelEvent (QWheelEvent * evnt) { -#if QT_VERSION < 0x050F00 - // Before Qt5.15 +#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 0)) fVP.SetZoomFactor(fVP.GetZoomFactor()+(fVP.GetZoomFactor()*(evnt->delta())/1200)); #else - // Qt5.15 and beyond fVP.SetZoomFactor(fVP.GetZoomFactor()+(fVP.GetZoomFactor()*(evnt->angleDelta().y())/1200)); #endif updateQWidget(); @@ -1904,11 +1836,9 @@ void G4OpenGLQtViewer::initMovieParameters() { QObject ::connect(fProcess,SIGNAL(finished ( int)), this,SLOT(processLookForFinished())); fProcess->setProcessChannelMode(QProcess::MergedChannels); -#if QT_VERSION < 0x050F00 - // Before Qt5.15 +#if (QT_VERSION < QT_VERSION_CHECK(5, 15, 0)) fProcess->start ("which ppmtompeg"); #else - // Qt5.15 and beyond fProcess->start ("which ppmtompeg", QStringList()); #endif } @@ -2186,7 +2116,7 @@ QString G4OpenGLQtViewer::removeTempFolder() { */ bool G4OpenGLQtViewer::exportImage(std::string name, int width, int height) { - QGLWidget* qGLW = dynamic_cast (fGLWidget) ; + auto* qGLW = dynamic_cast (fGLWidget) ; if (! qGLW) { return false; } @@ -2209,7 +2139,11 @@ bool G4OpenGLQtViewer::exportImage(std::string name, int width, int height) { // Then try Qt saving functions } else { QImage image; +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) image = qGLW->grabFrameBuffer(); +#else + image = qGLW->grabFramebuffer(); +#endif bool res = image.save(QString(getRealPrintFilename().c_str()),0,fLastExportSliderValue); @@ -2380,18 +2314,11 @@ void G4OpenGLQtViewer::encodeVideo() setRecordingStatus(ENCODING); fProcess = new QProcess(); -#if QT_VERSION > 0x040100 QObject ::connect(fProcess,SIGNAL(finished ( int,QProcess::ExitStatus)), this,SLOT(processEncodeFinished())); QObject ::connect(fProcess,SIGNAL(readyReadStandardOutput ()), this,SLOT(processEncodeStdout())); -#else - QObject ::connect(fProcess,SIGNAL(finished ( int)), - this,SLOT(processEncodeFinished())); - QObject ::connect(fProcess,SIGNAL(readyReadStandardOutput ()), - this,SLOT(processEncodeStdout())); -#endif -#if QT_VERSION < 0x050a00 +#if (QT_VERSION < QT_VERSION_CHECK(5, 10, 0)) fProcess->setReadChannelMode(QProcess::MergedChannels); #else fProcess->setProcessChannelMode(QProcess::MergedChannels); @@ -2536,7 +2463,7 @@ void G4OpenGLQtViewer::createSceneTreeWidget() { } } } else { - wItem->widget()->hide(); +// wItem->widget()->hide(); } } } @@ -2552,7 +2479,7 @@ void G4OpenGLQtViewer::createSceneTreeWidget() { fSceneTreeWidget->setWindowTitle(QString(GetName().data())); if (fUISceneTreeWidget != NULL) { - fUISceneTreeWidget->layout()->addWidget(fSceneTreeWidget); +// fUISceneTreeWidget->layout()->addWidget(fSceneTreeWidget); } // not available for Immediate mode @@ -2576,21 +2503,10 @@ void G4OpenGLQtViewer::createSceneTreeComponent(){ fFilterOutput->setStyleSheet ("padding: 0px "); QPixmap* searchIcon = fUiQt->getSearchIcon(); -#if QT_VERSION > 0x050100 fFilterOutput->addAction(*searchIcon,QLineEdit::TrailingPosition); fFilterOutput->setStyleSheet ("border-radius:7px;"); -#else - QPushButton *coutTBFilterButton = new QPushButton(); - coutTBFilterButton->setIcon(*searchIcon); - coutTBFilterButton->setStyleSheet ("padding-left: 0px; border:0px;"); - fFilterOutput->setStyleSheet ("padding-right: 0px;"); -#endif layoutCoutTBButtons->addWidget(fFilterOutput); -#if QT_VERSION <= 0x050100 - layoutCoutTBButtons->addWidget(coutTBFilterButton); -#endif - coutButtonWidget->setLayout(layoutCoutTBButtons); vLayout->addWidget(coutButtonWidget); @@ -2794,7 +2710,7 @@ void G4OpenGLQtViewer::setCheckComponent(QTreeWidgetItem* item,bool check) void G4OpenGLQtViewer::DrawText(const G4Text& g4text) { - QGLWidget* qGLW = dynamic_cast (fGLWidget) ; + auto* qGLW = dynamic_cast (fGLWidget) ; if (! qGLW) { return; } @@ -2828,12 +2744,12 @@ void G4OpenGLQtViewer::DrawText(const G4Text& g4text) // Calculate move for centre and right adjustment QFontMetrics* f = new QFontMetrics (font); -#if QT_VERSION > 0x050110 G4double span = f->boundingRect(textCString).width(); -#else - G4double span = f->width(textCString); -#endif - G4double xmove = 0., ymove = 0.; + // Marked as such due to current un-use when building with Qt6 + // See use of renderText at end of function. + [[maybe_unused]] G4double xmove = 0.; + [[maybe_unused]] G4double ymove = 0.; + switch (g4text.GetLayout()) { case G4Text::left: break; case G4Text::centre: xmove -= span / 2.; break; @@ -2853,13 +2769,16 @@ void G4OpenGLQtViewer::DrawText(const G4Text& g4text) xmove *= fudgeFactor; ymove *= fudgeFactor; +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) qGLW->renderText ((position.x()+(2*xmove)/getWinWidth()), (position.y()+(2*ymove)/getWinHeight()), position.z(), textCString, font); - +#else + // Not yet obvious how to do this in Qt6.... +#endif } } @@ -3616,15 +3535,10 @@ void G4OpenGLQtViewer::changeColorAndTransparency(QTreeWidgetItem* item,int) { } const QColor& old = QColor(item->data(2,Qt::UserRole).value()); -#if QT_VERSION < 0x040500 - bool a; - const QColor& color = QColor(QColorDialog::getRgba (old.rgba(),&a,fSceneTreeComponentTreeWidget)); -#else const QColor& color = QColorDialog::getColor(old, fSceneTreeComponentTreeWidget, " Get color and transparency", QColorDialog::ShowAlphaChannel); -#endif if (color.isValid()) { @@ -4202,6 +4116,7 @@ void G4OpenGLQtViewer::updateToolbarAndMouseContextMenu(){ } } + /** Update the scene tree widget */ @@ -4553,12 +4468,6 @@ void G4OpenGLQtViewer::updatePickInfosWidget(int aX, int aY) { } } - // Create a new signalMapper -#if QT_VERSION < 0x050600 - delete fSignalMapperPicking; - fSignalMapperPicking = new QSignalMapper(this); -#endif - // parse all pick results G4int nPickedObjectsWithAttributes = 0; for (unsigned int a=0; a< pickMapVector.size(); a++) { @@ -4625,19 +4534,11 @@ void G4OpenGLQtViewer::updatePickInfosWidget(int aX, int aY) { ed->setVisible((false)); ed->append(newStr.join("")); -#if QT_VERSION < 0x050600 - connect(pickCoutButton, SIGNAL(clicked()), fSignalMapperPicking, SLOT(map())); - fSignalMapperPicking->setMapping(pickCoutButton,fPickInfosWidget->layout()->count()-1); -#else std::cout << pickCoutButton->text().toStdString() << " "<< fPickInfosWidget->layout()->count()-1<< std::endl; int tmp = fPickInfosWidget->layout()->count()-1; connect(pickCoutButton, &QPushButton::clicked , [this, tmp](){ this->toggleSceneTreeComponentPickingCout(tmp);}); -#endif } } -#if QT_VERSION < 0x050600 - connect(fSignalMapperPicking, SIGNAL(mapped(int)),this, SLOT(toggleSceneTreeComponentPickingCout(int))); -#endif // add a label to push everything up! QLabel * pushUp = new QLabel(""); @@ -4807,7 +4708,7 @@ void G4OpenGLQtViewer::SwitchToVisSubThread() { // Called by VisSub Thread ! - QGLWidget* qGLW = dynamic_cast (fGLWidget) ; + auto qGLW = dynamic_cast (fGLWidget) ; if (! qGLW) { return; } @@ -4833,7 +4734,7 @@ void G4OpenGLQtViewer::SwitchToVisSubThread() void G4OpenGLQtViewer::DoneWithVisSubThread() { // Called by vis sub thread - QGLWidget* qGLW = dynamic_cast (fGLWidget) ; + auto qGLW = dynamic_cast (fGLWidget) ; if (! qGLW) { return; } @@ -4841,17 +4742,15 @@ void G4OpenGLQtViewer::DoneWithVisSubThread() // finish with this vis sub thread context qGLW->doneCurrent(); -#if QT_VERSION > 0x050000 // and move it back to the main thread qGLW->context()->moveToThread(fQGLContextMainThread); -#endif } void G4OpenGLQtViewer::SwitchToMasterThread() { // Called by VisSub Thread ! - QGLWidget* qGLW = dynamic_cast (fGLWidget) ; + auto qGLW = dynamic_cast (fGLWidget) ; if (! qGLW) { return; } @@ -4868,7 +4767,7 @@ void G4OpenGLQtViewer::SwitchToMasterThread() void G4OpenGLQtViewer::MovingToVisSubThread(){ // Called by Main Thread ! - QGLWidget* qGLW = dynamic_cast (fGLWidget) ; + auto qGLW = dynamic_cast (fGLWidget) ; if (! qGLW) { return; } @@ -4887,9 +4786,7 @@ void G4OpenGLQtViewer::MovingToVisSubThread(){ // finish with this main thread context qGLW->doneCurrent(); -#if QT_VERSION > 0x050000 qGLW->context()->moveToThread(fQGLContextVisSubThread); -#endif G4CONDITIONBROADCAST(&c2_VisSubThreadQtOpenGLContextMoved); } diff --git a/source/visualization/OpenGL/src/G4OpenGLSceneHandler.cc b/source/visualization/OpenGL/src/G4OpenGLSceneHandler.cc index 567d4b8d4a5..c12df2b7273 100644 --- a/source/visualization/OpenGL/src/G4OpenGLSceneHandler.cc +++ b/source/visualization/OpenGL/src/G4OpenGLSceneHandler.cc @@ -84,9 +84,6 @@ G4OpenGLSceneHandler::G4OpenGLSceneHandler (G4VGraphicsSystem& system, G4int id, const G4String& name): G4VSceneHandler (system, id, name), -#ifdef G4OPENGL_VERSION_2 -fEmulate_GL_QUADS(false), -#endif fPickName(0), fThreePassCapable(false), fSecondPassForTransparencyRequested(false), @@ -349,9 +346,7 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyline& line) // Note: colour and depth test treated in sub-class. -#ifndef G4OPENGL_VERSION_2 glDisable (GL_LIGHTING); -#endif G4double lineWidth = GetLineWidth(fpVisAttribs); // Need access to method in G4OpenGLViewer. static_cast doesn't @@ -362,7 +357,6 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyline& line) if (pGLViewer) pGLViewer->ChangeLineWidth(lineWidth); fEdgeFlag = true; -#ifndef G4OPENGL_VERSION_2 glBegin (GL_LINE_STRIP); // No ned glEdgeFlag for lines : // Boundary and nonboundary edge flags on vertices are significant only if GL_POLYGON_MODE is set to GL_POINT or GL_LINE. See glPolygonMode. @@ -376,21 +370,6 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyline& line) glVertex3d (x, y, z); } glEnd (); -#else - glBeginVBO(GL_LINE_STRIP); - - for (std::size_t iPoint = 0; iPoint < nPoints; ++iPoint) { - fOglVertex.push_back(line[iPoint].x()); - fOglVertex.push_back(line[iPoint].y()); - fOglVertex.push_back(line[iPoint].z()); - // normal - fOglVertex.push_back(0); - fOglVertex.push_back(0); - fOglVertex.push_back(1); - } - - glEndVBO(); -#endif } void G4OpenGLSceneHandler::AddPrimitive (const G4Polymarker& polymarker) @@ -401,9 +380,7 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polymarker& polymarker) // Note: colour and depth test treated in sub-class. -#ifndef G4OPENGL_VERSION_2 glDisable (GL_LIGHTING); -#endif MarkerSizeType sizeType; G4double size = GetMarkerSize(polymarker, sizeType); @@ -477,7 +454,6 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polymarker& polymarker) G4int i; for (size_t iPoint = 0; iPoint < polymarker.size (); iPoint++) { fEdgeFlag = true; -#ifndef G4OPENGL_VERSION_2 glBegin (GL_POLYGON); for (i = 0, phi = startPhi; i < nSides; i++, phi += dPhi) { G4Vector3D r = start; r.rotate(phi, viewpointDirection); @@ -485,22 +461,6 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polymarker& polymarker) glVertex3d (p.x(), p.y(), p.z()); } glEnd (); -#else - glBeginVBO (GL_TRIANGLE_STRIP); - for (i = 0, phi = startPhi; i < nSides; i++, phi += dPhi) { - G4Vector3D r = start; r.rotate(phi, viewpointDirection); - G4Vector3D p = polymarker[iPoint] + r; - - fOglVertex.push_back(p.x()); - fOglVertex.push_back(p.y()); - fOglVertex.push_back(p.z()); - // normal - fOglVertex.push_back(0); - fOglVertex.push_back(0); - fOglVertex.push_back(1); - } - glEndVBO (); -#endif } } else { // Size specified in screen (window) coordinates. @@ -508,7 +468,6 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polymarker& polymarker) pGLViewer->ChangePointSize(size); //Antialiasing only for circles -#ifndef G4OPENGL_VERSION_2 switch (polymarker.GetMarkerType()) { default: case G4Polymarker::dots: @@ -517,36 +476,17 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polymarker& polymarker) case G4Polymarker::squares: glDisable (GL_POINT_SMOOTH); break; } -#endif -#ifndef G4OPENGL_VERSION_2 glBegin (GL_POINTS); for (size_t iPoint = 0; iPoint < polymarker.size (); iPoint++) { G4Point3D centre = polymarker[iPoint]; glVertex3d(centre.x(),centre.y(),centre.z()); } glEnd(); -#else - glBeginVBO(GL_POINTS); - - for (size_t iPoint = 0; iPoint < polymarker.size (); iPoint++) { - fOglVertex.push_back(polymarker[iPoint].x()); - fOglVertex.push_back(polymarker[iPoint].y()); - fOglVertex.push_back(polymarker[iPoint].z()); - fOglVertex.push_back(0); - fOglVertex.push_back(0); - fOglVertex.push_back(1); - } - glEndVBO(); -#endif } } void G4OpenGLSceneHandler::AddPrimitive (const G4Text& text) { // Pass to specific viewer via virtual function DrawText. - // FIXME : Not ready for OPENGL2 for the moment -#ifdef G4OPENGL_VERSION_2 - return; -#endif G4OpenGLViewer* pGLViewer = dynamic_cast(fpViewer); if (pGLViewer) pGLViewer->DrawText(text); } @@ -614,9 +554,7 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyhedron& polyhedron) { G4bool clipping = pGLViewer->fVP.IsSection() || pGLViewer->fVP.IsCutaway(); // Lighting disabled unless otherwise requested -#ifndef G4OPENGL_VERSION_2 glDisable (GL_LIGHTING); -#endif switch (drawing_style) { case (G4ViewParameters::hlhsr): @@ -658,9 +596,7 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyhedron& polyhedron) { // Transparent... glDepthMask (GL_FALSE); // Make depth buffer read-only. glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); -#ifndef G4OPENGL_VERSION_2 glEnable(GL_COLOR_MATERIAL); -#endif //glDisable (GL_CULL_FACE); glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); } else { @@ -673,17 +609,13 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyhedron& polyhedron) { glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); } else { glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); -#ifndef G4OPENGL_VERSION_2 glEnable(GL_COLOR_MATERIAL); -#endif //glEnable (GL_CULL_FACE); //glCullFace (GL_BACK); glPolygonMode (GL_FRONT, GL_FILL); } } -#ifndef G4OPENGL_VERSION_2 if (!fProcessing2D) glEnable (GL_LIGHTING); -#endif break; case (G4ViewParameters::wireframe): default: @@ -696,13 +628,8 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyhedron& polyhedron) { //Loop through all the facets... fEdgeFlag = true; -#ifndef G4OPENGL_VERSION_2 glBegin (GL_QUADS); glEdgeFlag (GL_TRUE); -#else - fEmulate_GL_QUADS = true; - glBeginVBO(GL_TRIANGLE_STRIP); -#endif G4bool notLastFace; do { @@ -719,7 +646,6 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyhedron& polyhedron) { if (isAuxEdgeVisible) { edgeFlag[edgeCount] = 1; } -#ifndef G4OPENGL_VERSION_2 if (edgeFlag[edgeCount] > 0) { if (fEdgeFlag != true) { glEdgeFlag (GL_TRUE); @@ -737,18 +663,6 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyhedron& polyhedron) { glVertex3d (vertex[edgeCount].x(), vertex[edgeCount].y(), vertex[edgeCount].z()); -#else - - fOglVertex.push_back(vertex[edgeCount].x()); - fOglVertex.push_back(vertex[edgeCount].y()); - fOglVertex.push_back(vertex[edgeCount].z()); - - fOglVertex.push_back(normals[edgeCount].x()); - fOglVertex.push_back(normals[edgeCount].y()); - fOglVertex.push_back(normals[edgeCount].z()); - -#endif - } // HepPolyhedron produces triangles too; in that case add an extra @@ -757,7 +671,6 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyhedron& polyhedron) { G4int edgeCount = 3; normals[edgeCount] = normals[0]; vertex[edgeCount] = vertex[0]; -#ifndef G4OPENGL_VERSION_2 edgeFlag[edgeCount] = -1; if (fEdgeFlag != false) { glEdgeFlag (GL_FALSE); @@ -770,16 +683,6 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyhedron& polyhedron) { glVertex3d (vertex[edgeCount].x(), vertex[edgeCount].y(), vertex[edgeCount].z()); -#else - fOglVertex.push_back(vertex[edgeCount].x()); - fOglVertex.push_back(vertex[edgeCount].y()); - fOglVertex.push_back(vertex[edgeCount].z()); - - fOglVertex.push_back(normals[edgeCount].x()); - fOglVertex.push_back(normals[edgeCount].y()); - fOglVertex.push_back(normals[edgeCount].z()); - -#endif } // Trap situation where number of edges is > 4... if (nEdges > 4) { @@ -793,15 +696,9 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyhedron& polyhedron) { if (drawing_style == G4ViewParameters::hlr || drawing_style == G4ViewParameters::hlhsr) { -#ifndef G4OPENGL_VERSION_2 glDisable(GL_COLOR_MATERIAL); // Revert to glMaterial for hlr/sr. -#endif - -#ifndef G4OPENGL_VERSION_2 glEnd (); // Placed here to balance glBegin above, allowing GL -#else - glEndVBO(); -#endif + // state changes below, then glBegin again. Avoids // having glBegin/End pairs *inside* loop in the more // usual case of no hidden line removal. @@ -848,17 +745,11 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyhedron& polyhedron) { glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, painting_colour); } glColor4fv (painting_colour); -#ifndef G4OPENGL_VERSION_2 glBegin (GL_QUADS); glEdgeFlag (GL_TRUE); fEdgeFlag = true; -#else - fEmulate_GL_QUADS = true; - glBeginVBO(GL_TRIANGLE_STRIP); -#endif for (int edgeCount = 0; edgeCount < 4; ++edgeCount) { -#ifndef G4OPENGL_VERSION_2 if (edgeFlag[edgeCount] > 0) { if (fEdgeFlag != true) { glEdgeFlag (GL_TRUE); @@ -876,22 +767,8 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyhedron& polyhedron) { glVertex3d (vertex[edgeCount].x(), vertex[edgeCount].y(), vertex[edgeCount].z()); -#else - fOglVertex.push_back(vertex[edgeCount].x()); - fOglVertex.push_back(vertex[edgeCount].y()); - fOglVertex.push_back(vertex[edgeCount].z()); - - fOglVertex.push_back(normals[edgeCount].x()); - fOglVertex.push_back(normals[edgeCount].y()); - fOglVertex.push_back(normals[edgeCount].z()); - -#endif } -#ifndef G4OPENGL_VERSION_2 glEnd (); -#else - glEndVBO(); -#endif end_of_drawing_through_stencil: // and once more to reset the stencil bits... @@ -916,16 +793,10 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyhedron& polyhedron) { glDisable (GL_LIGHTING); glColor4fv (current_colour); fEdgeFlag = true; -#ifndef G4OPENGL_VERSION_2 glBegin (GL_QUADS); glEdgeFlag (GL_TRUE); fEdgeFlag = true; -#else - fEmulate_GL_QUADS = true; - glBeginVBO(GL_TRIANGLE_STRIP); -#endif for (int edgeCount = 0; edgeCount < 4; ++edgeCount) { -#ifndef G4OPENGL_VERSION_2 if (edgeFlag[edgeCount] > 0) { if (fEdgeFlag != true) { glEdgeFlag (GL_TRUE); @@ -943,64 +814,24 @@ void G4OpenGLSceneHandler::AddPrimitive (const G4Polyhedron& polyhedron) { glVertex3d (vertex[edgeCount].x(), vertex[edgeCount].y(), vertex[edgeCount].z()); -#else - fOglVertex.push_back(vertex[edgeCount].x()); - fOglVertex.push_back(vertex[edgeCount].y()); - fOglVertex.push_back(vertex[edgeCount].z()); - - fOglVertex.push_back(normals[edgeCount].x()); - fOglVertex.push_back(normals[edgeCount].y()); - fOglVertex.push_back(normals[edgeCount].z()); - -#endif } -#ifndef G4OPENGL_VERSION_2 glEnd (); -#else - glEndVBO(); -#endif glDepthFunc (GL_LEQUAL); // Revert for next facet. fEdgeFlag = true; -#ifndef G4OPENGL_VERSION_2 glBegin (GL_QUADS); // Ready for next facet. GL glEdgeFlag (GL_TRUE); fEdgeFlag = true; // says it ignores incomplete // quadrilaterals, so final empty // glBegin/End sequence should be OK. -#else - fEmulate_GL_QUADS = true; - glBeginVBO(GL_TRIANGLE_STRIP); -#endif } } while (notLastFace); -#ifndef G4OPENGL_VERSION_2 glEnd (); -#else - -// FIXME: du grand n'importe quoi en test -// Cube optimization - - // store old DrawType because in case of optimization it could be changed - GLenum oldDrawArrayType = fDrawArrayType; - - if (dynamic_cast(&polyhedron)) { -// OptimizeVBOForTrd(); - } else if (dynamic_cast(&polyhedron)) { -// OptimizeVBOForCons((polyhedron.GetNoVertices()-2)/2 ); // top + bottom + all faces - } - - glEndVBO(); - fDrawArrayType = oldDrawArrayType; -#endif - glDisable (GL_STENCIL_TEST); // Revert to default for next primitive. glDepthMask (GL_TRUE); // Revert to default for next primitive. -#ifndef G4OPENGL_VERSION_2 glDisable (GL_LIGHTING); // Revert to default for next primitive. -#endif } void G4OpenGLSceneHandler::AddCompound(const G4VTrajectory& traj) { @@ -1026,278 +857,3 @@ void G4OpenGLSceneHandler::AddCompound(const G4THitsMap& hits) { void G4OpenGLSceneHandler::AddCompound(const G4Mesh& mesh) { StandardSpecialMeshRendering(mesh); } - -#ifdef G4OPENGL_VERSION_2 - -// Optimize vertex and indices in order to render less vertex in OpenGL VBO/IBO -void G4OpenGLSceneHandler::OptimizeVBOForTrd(){ - - /* HOW IT IS BUILD (as we receive it from fOglVertex : - */ - - std::vector vertices; - vertices.insert (vertices.end(),fOglVertex.begin(),fOglVertex.begin()+6*6); // ABCDEF - vertices.insert (vertices.end(),fOglVertex.begin()+9*6,fOglVertex.begin()+9*6+6); // G - vertices.insert (vertices.end(),fOglVertex.begin()+13*6,fOglVertex.begin()+13*6+6); // H - fOglVertex = vertices; - - int myarray [] = { - 3,2,0,1,4,5,7,6, 6,0,4,3,7,2,6,1,5 - }; - fOglIndices.insert(fOglIndices.begin(), myarray, myarray+17/*36*/); - - fDrawArrayType = GL_TRIANGLE_STRIP; -} - -// Optimize vertex and indices in order to render less vertex in OpenGL VBO/IBO -void G4OpenGLSceneHandler::OptimizeVBOForCons(G4int aNoFaces){ - // Optimized, 1st level : 10f/15sec with 1000 cones - // DrawElements:208 vertex and 605 (2*100+2*100+2*100+5) indices for a 100 face cone - - /* surface of polycone : could be optimized - for 100 faces : - - 100*4 = 400 points - - 100*2+2 = 202 points with TRIANGLE_STRIP - Total : - n*4+n*4+n*4 = n*12 - optimize : n*2+2+1+n+1 = n*3+3 (factor 4) - but could do better : n faces should give = n*2+2 - */ - - /* - 0 - / \ - 2---4 6 ....2 - | | - 3---5 7 ....3 - \ / - 1 - */ - // First, faces - std::vector vertices; - - // Add bottom and top vertex - // aNoFaces*4*6+6 : nb Faces * 4 points per face * 6 vertex by point + 1 point offset - vertices.insert (vertices.end(),fOglVertex.begin()+ (aNoFaces*4)*6,fOglVertex.begin()+(aNoFaces*4)*6+6); // 0 - vertices.insert (vertices.end(),fOglVertex.begin()+ (aNoFaces*8+1)*6,fOglVertex.begin()+(aNoFaces*8+1)*6+6); // 1 - - // Add facets points - G4int posInVertice; - for (G4int a = 0; a vertices; - // check if it is a GL_QUADS emulation - if (fEmulate_GL_QUADS == true) { - fEmulate_GL_QUADS = false; - // A point has 6 double : Vx Vy Vz Nx Ny Nz - // A QUAD should be like this - /* - 0 3/4 7/8 .. - - 1 2/5 6/9 .. - */ - // And if 3==4 and 2==5, we should do it like this for a TRIANGLES_STRIP - /* - 0 4 8 .. - | / | / | - 1 5 9 .. - // Optimized, 1st level : 24f/15sec with 10 cones - // non Optimized, 1st level : 12f/15sec with 10 cones - */ - // should be 4 points - for (unsigned int a=0; a(fpViewer); - if (pGLViewer) { - glEnableVertexAttribArray(pGLViewer->fVertexPositionAttribute); - - glVertexAttribPointer(pGLViewer->fVertexPositionAttribute, - 3, // size: Every vertex has an X, Y anc Z component - GL_FLOAT, // type: They are floats - GL_FALSE, // normalized: Please, do NOT normalize the vertices - 2*3*4, // stride: The first byte of the next vertex is located this - // amount of bytes further. The format of the VBO is - // vx, vy, vz, nx, ny, nz and every element is a - // Float32, hence 4 bytes large - 0); // offset: The byte position of the first vertex in the buffer - } - - - glBindBuffer(GL_ARRAY_BUFFER, fVertexBufferObject); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, fIndicesBufferObject); -// glDrawElements(fDrawArrayType, fOglIndices.size(), GL_UNSIGNED_SHORT, 0); - glDrawElements(fDrawArrayType, fOglIndices.size(), GL_UNSIGNED_SHORT, 0); - - if (pGLViewer) { - glDisableVertexAttribArray(pGLViewer->fVertexPositionAttribute); - } - - // delete the buffer - glDeleteBuffers(1,&fVertexBufferObject); - } -} - -void G4OpenGLSceneHandler::drawVBOArray(std::vector vertices) { - glGenBuffers(1,&fVertexBufferObject); - glGenBuffers(1,&fIndicesBufferObject); - - // Bind this buffer - glBindBuffer(GL_ARRAY_BUFFER, fVertexBufferObject); - // Load oglData into VBO - int s = vertices.size(); - glBufferData(GL_ARRAY_BUFFER, sizeof(double)*s, &vertices[0], GL_STATIC_DRAW); - - //---------------------------- - // Draw VBO - //---------------------------- - glBindBuffer(GL_ARRAY_BUFFER, fVertexBufferObject); - - // the fVertexPositionAttribute is inside the G4OpenGLViewer - G4OpenGLViewer* pGLViewer = dynamic_cast(fpViewer); - if (pGLViewer) { - glEnableVertexAttribArray(pGLViewer->fVertexPositionAttribute); - -// glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer) - -/* - GL_DOUBLE - Warning: This section describes legacy OpenGL APIs that have been removed from core OpenGL 3.1 and above (they are only deprecated in OpenGL 3.0). It is recommended that you not use this functionality in your programs. - - glLoadMatrixd, glRotated and any other function that have to do with the double type. Most GPUs don't support GL_DOUBLE (double) so the driver will convert the data to GL_FLOAT (float) and send to the GPU. If you put GL_DOUBLE data in a VBO, the performance might even be much worst than immediate mode (immediate mode means glBegin, glVertex, glEnd). GL doesn't offer any better way to know what the GPU prefers. - */ - glVertexAttribPointer(pGLViewer->fVertexPositionAttribute, - 3, // size: Every vertex has an X, Y anc Z component - GL_DOUBLE, // type: They are double - GL_FALSE, // normalized: Please, do NOT normalize the vertices - 6*sizeof(double), // stride: The first byte of the next vertex is located this - // amount of bytes further. The format of the VBO is - // vx, vy, vz, nx, ny, nz and every element is a - // Float32, hence 4 bytes large - 0); // offset: The byte position of the first vertex in the buffer - } - - glDrawArrays(fDrawArrayType, // GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP, and GL_TRIANGLES - 0, vertices.size()/6); - if (pGLViewer) { - glDisableClientState( GL_VERTEX_ARRAY ); - } - - // delete the buffer - glDeleteBuffers(1,&fVertexBufferObject); -} -#endif diff --git a/source/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc b/source/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc index 10a7e1da837..345da62cb50 100644 --- a/source/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc +++ b/source/visualization/OpenGL/src/G4OpenGLStoredQtViewer.cc @@ -36,6 +36,7 @@ #ifdef G4MULTITHREADED #include "G4Threading.hh" #endif +#include "G4UIQt.hh" #include #include @@ -47,14 +48,14 @@ G4OpenGLStoredQtViewer::G4OpenGLStoredQtViewer G4OpenGLViewer (sceneHandler), G4OpenGLQtViewer (sceneHandler), G4OpenGLStoredViewer (sceneHandler), // FIXME : gerer le pb du parent ! - QGLWidget() + G4QGLWidgetType() { if (fViewId < 0) return; // In case error in base class instantiation. fQGLWidgetInitialiseCompleted = false; // Indicates that the widget has no background, i.e. when the widget receives paint events, the background is not automatically repainted. Note: Unlike WA_OpaquePaintEvent, newly exposed areas are never filled with the background (e.g., after showing a window for the first time the user can see "through" it until the application processes the paint events). This flag is set or cleared by the widget's author. - QGLWidget::setAttribute (Qt::WA_NoSystemBackground); + G4QGLWidgetType::setAttribute (Qt::WA_NoSystemBackground); setFocusPolicy(Qt::StrongFocus); // enable keybord events fHasToRepaint = false; @@ -78,8 +79,8 @@ void G4OpenGLStoredQtViewer::Initialise() { glDrawBuffer (GL_BACK); // set the good tab active - if (QGLWidget::parentWidget()) { - QTabWidget *parentTab = dynamic_cast (QGLWidget::parentWidget()->parent()) ; + if (G4QGLWidgetType::parentWidget()) { + auto *parentTab = dynamic_cast (G4QGLWidgetType::parentWidget()->parent()) ; if (parentTab) { parentTab->setCurrentIndex(parentTab->count()-1); } @@ -353,7 +354,12 @@ void G4OpenGLStoredQtViewer::paintEvent(QPaintEvent *) { // The widget's rendering context will become the current context and initializeGL() // will be called if it hasn't already been called. // Copies the back buffer of a double-buffered context to the front buffer. +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) updateGL(); +#else + // Not sure this is correct.... + paintGL(); +#endif } } diff --git a/source/visualization/OpenGL/src/G4OpenGLVboDrawer.cc b/source/visualization/OpenGL/src/G4OpenGLVboDrawer.cc deleted file mode 100644 index 638fbbd3dba..00000000000 --- a/source/visualization/OpenGL/src/G4OpenGLVboDrawer.cc +++ /dev/null @@ -1,254 +0,0 @@ -// -// ******************************************************************** -// * 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. * -// ******************************************************************** -// -// -// -// -// Class to provide Vertex Buffer Object (VBO) specific -// functionality for OpenGL > 2.0 in GEANT4 - -#include "G4OpenGLViewer.hh" -#ifdef G4OPENGL_VERSION_2 - -#include "G4OpenGLVboDrawer.hh" - -#include "G4OpenGLImmediateQtViewer.hh" - - -////////////////////////////////////////////////////////////////////////////// -G4OpenGLVboDrawer::G4OpenGLVboDrawer (G4OpenGLViewer* viewer, - std::string type - ): -fVboViewer(NULL), -fOGLType(type) -////////////////////////////////////////////////////////////////////////////// -//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!// -{ - G4OpenGLImmediateQtViewer* v = dynamic_cast(viewer); - if (v) { - fVboViewer = v; - } - - fFragmentShaderSrc = - "#ifdef GL_ES\n" - "precision highp float;\n" - "#endif\n" - "\n" - "varying vec3 vLightWeighting;\n" - "uniform vec4 uPointColor; // Point Color\n" - "\n" - "void main(void) {\n" - " vec4 matColor = uPointColor;\n" - " gl_FragColor = vec4(matColor.rgb, matColor.a);\n" - "}\n"; - - - fVertexShaderSrc = - "attribute highp vec4 aVertexPosition;\n" - "attribute vec3 aVertexNormal;\n" - "uniform highp mat4 uCMatrix;\n" - "uniform highp mat4 uPMatrix; // Perspective [P]rojection matrix\n" - "uniform highp mat4 uMVMatrix; // [M]odel[V]iew matrix\n" - "uniform highp mat4 uTMatrix; // [T]ransformation matrix\n" - "uniform float uPointSize; // Point size\n" - "void main(void)\n" - "{\n" - " gl_Position = uPMatrix * uCMatrix * uMVMatrix * uTMatrix * aVertexPosition;\n" - " // Phong shading\n" - // " vec3 transformedNormal = normalize((uNMatrix * vec4(normalize(aVertexNormal), 0)).xyz);\n" - " vec3 lightingDirection = normalize(vec3(1, 1, 1));\n" - // " float directionalLightWeighting = max(dot(transformedNormal, lightingDirection), 0.0);\n" - // " vec3 uAmbientLightColor = vec3(0.2, 0.2, 0.2);\n" - // " vec3 uDirectionalColor = vec3(0.8, 0.8, 0.8);\n" - " gl_PointSize = uPointSize;\n" - // " vLightWeighting = uAmbientLightColor + uDirectionalColor * directionalLightWeighting;\n" - "}"; -} - -////////////////////////////////////////////////////////////////////////////// -G4OpenGLVboDrawer::~G4OpenGLVboDrawer ( -) -////////////////////////////////////////////////////////////////////////////// -//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!// -{ -} - -// +--------------------------------+ -// + QT (OpenGL ES) case + -// +--------------------------------+ - -void G4OpenGLVboDrawer:: vboGlMultMatrixf(const GLfloat *matrix){ - if (fVboViewer) { - if (fVboViewer->isInitialized()) { - // FIXME - // glUniformMatrix4fv(12, 1, 0, 0x7fff5fbf5d00) - // Error: GL_INVALID_OPERATION - - if (fMatrixMode == GL_MODELVIEW) { - glUniformMatrix4fv(fVboViewer->getShaderTransformMatrix(),1,0,matrix); - } else { - G4cerr << "glMultMatrixf could only be used in GL_MODELVIEW mode" << G4endl; - } - } - } -} - - -void G4OpenGLVboDrawer:: vboGlMultMatrixd(const GLdouble *matrix){ - if (fVboViewer) { - if (fVboViewer->isInitialized()) { - // FIXME ! - // if (fMatrixMode == GL_MODELVIEW) { - // printf("G4OpenGLVboDrawer:: vboGlMultMatrixd %d %d\n",fVboViewer->getShaderTransformMatrix(), matrix); - //!! TEST !! - float mat[16] = { - matrix[0],matrix[1],matrix[2],matrix[3], - matrix[4],matrix[5],matrix[6],matrix[7], - matrix[8],matrix[9],matrix[10],matrix[11], - matrix[12],matrix[13],matrix[14],matrix[15] - }; - - glUniformMatrix4fv(fVboViewer->getShaderTransformMatrix(),1,0,mat); - GLenum e = glGetError(); - printf("GL error : %d",e); - // } else { - // G4cerr << "glMultMatrixd could only be used in GL_MODELVIEW mode" << G4endl; - // } - } - } -} - - - -// +--------------------------------+ -// + All case + -// +--------------------------------+ - - - -void G4OpenGLVboDrawer::vboGlOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) { - if (fVboViewer) { - if (fVboViewer->isInitialized()) { - printf("glOrtho implemented --- %f %f %f %f %f %f \n",left, right, bottom, top, zNear, zFar); - float a = 2.0f / (right - left); - float b = 2.0f / (top - bottom); - float c = -2.0f / (zFar - zNear); - - float tx = - (right + left)/(right - left); - float ty = - (top + bottom)/(top - bottom); - float tz = - (zFar + zNear)/(zFar - zNear); - - float ortho[16] = { - a, 0, 0, 0, - 0, b, 0, 0, - 0, 0, c, 0, - tx, ty, tz, 1 - }; - // FIXME : - // glUniformMatrix4fv(0, 1, 0, 0x7fff5fbf5d00) - // Error: GL_INVALID_OPERATION - - if (fMatrixMode == GL_PROJECTION) { - glUniformMatrix4fv(fVboViewer->getShaderProjectionMatrix(), 1, 0, ortho); - } else { - G4cerr << "glFrustum could only be used in GL_PROJECTION mode" << G4endl; - } - } - } -} - - -void G4OpenGLVboDrawer::vboGlFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) { - if (fVboViewer) { - if (fVboViewer->isInitialized()) { - float deltaX = right - left; - float deltaY = top - bottom; - float deltaZ = zFar - zNear; - - float a = 2.0f * zNear / deltaX; - float b = 2.0f * zNear / deltaY; - float c = (right + left) / deltaX; - float d = (top + bottom) / deltaY; - float e = -(zFar + zNear) / (zFar - zNear); - float f = -2.0f * zFar * zNear / deltaZ; - - float proj[16] = { - a, 0, 0, 0, - 0, b, 0, 0, - c, d, e, -1.0f, - 0, 0, f, 0 - }; - - if (fMatrixMode == GL_PROJECTION) { - glUniformMatrix4fv(fVboViewer->getShaderProjectionMatrix(), 1, 0, proj); - } else { - G4cerr << "glFrustrum could only be used in GL_PROJECTION mode" << G4endl; - } - } - } -} - - -void G4OpenGLVboDrawer::vboGlMatrixMode(GLenum a) { - if (fVboViewer) { - if (fVboViewer->isInitialized()) { - printf("G4OpenGLVboDrawer::vboGlMatrixMode CHANGED :%d \n",a); - fMatrixMode = a; - } - } -} - - -void G4OpenGLVboDrawer::vboGlColor4d(int red,int green,int blue,int alpha) { - if (fVboViewer) { - if (fVboViewer->isInitialized()) { - // double color [] = { red, green, blue, alpha }; - // FIXME : REMOVE /2 , used to render transparents for testing purpose - alpha = 0.7; - glUniform4f (glGetUniformLocation(fVboViewer->getShaderProgram(), "uPointColor"),red, green, blue, alpha); - } - } -} - -void G4OpenGLVboDrawer:: vboGlColor4fv(const GLfloat* data) { - if (fVboViewer) { - if (fVboViewer->isInitialized()) { - double color [] = { (data[0]), (data[1]), (data[2]), 0.7}; - // FIXME : REMOVE /2 , used to render transparents for testing purpose - glUniform4f (glGetUniformLocation(fVboViewer->getShaderProgram(), "uPointColor"),color[0],color[1],color[2], color[3]); - } - } -} - -void G4OpenGLVboDrawer:: vboGlPointSize(float size) { - if (fVboViewer) { - if (fVboViewer->isInitialized()) { - glUniform1f (glGetUniformLocation(fVboViewer->getShaderProgram(), "uPointSize"),size); - } - } -} - -#endif - diff --git a/source/visualization/OpenGL/src/G4OpenGLViewer.cc b/source/visualization/OpenGL/src/G4OpenGLViewer.cc index eeedaf5d6a8..d245d8ed713 100644 --- a/source/visualization/OpenGL/src/G4OpenGLViewer.cc +++ b/source/visualization/OpenGL/src/G4OpenGLViewer.cc @@ -51,22 +51,12 @@ #include "G4AttCheck.hh" #include "G4Text.hh" -#ifdef G4OPENGL_VERSION_2 -#include "G4OpenGLVboDrawer.hh" -#endif - -// GL2PS -//#include "Geant4_gl2ps.h" - #include #include #include G4OpenGLViewer::G4OpenGLViewer (G4OpenGLSceneHandler& scene): G4VViewer (scene, -1), -#ifdef G4OPENGL_VERSION_2 -fVboDrawer(NULL), -#endif fPrintColour (true), fVectoredPs (true), fOpenGLSceneHandler(scene), @@ -90,15 +80,6 @@ fGl2psDefaultLineWith(1), fGl2psDefaultPointSize(2), fGlViewInitialized(false), fIsGettingPickInfos(false) -#ifdef G4OPENGL_VERSION_2 -,fShaderProgram(0) -,fVertexPositionAttribute(0) -,fVertexNormalAttribute(0) -,fpMatrixUniform(0) -,fcMatrixUniform(0) -,fmvMatrixUniform(0) -,fnMatrixUniform(0) -#endif { // Make changes to view parameters for OpenGL... fVP.SetAutoRefresh(true); @@ -142,54 +123,6 @@ G4OpenGLViewer::~G4OpenGLViewer () void G4OpenGLViewer::InitializeGLView () { -#ifdef G4OPENGL_VERSION_2 - if (fVboDrawer) { - - // First, load a simple shader - fShaderProgram = glCreateProgram(); - Shader vertexShader = glCreateShader(GL_VERTEX_SHADER); - const char * vSrc = fVboDrawer->getVertexShaderSrc(); - glShaderSource(vertexShader, 1, &vSrc, NULL); - glCompileShader(vertexShader); - glAttachShader(fShaderProgram, vertexShader); - - Shader fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); - const char * fSrc = fVboDrawer->getFragmentShaderSrc(); - glShaderSource(fragmentShader, 1, &fSrc, NULL); - glCompileShader(fragmentShader); - - glAttachShader(fShaderProgram, fragmentShader); - glLinkProgram(fShaderProgram); - glUseProgram(fShaderProgram); - - // UniformLocation uColor = getUniformLocation(fShaderProgram, "uColor"); - // uniform4fv(uColor, [0.0, 0.3, 0.0, 1.0]); - - // Extract the references to the attributes from the shader. - - fVertexPositionAttribute = - glGetAttribLocation(fShaderProgram, "aVertexPosition"); - - - glEnableVertexAttribArray(fVertexPositionAttribute); - - // Extract the references the uniforms from the shader - fpMatrixUniform = glGetUniformLocation(fShaderProgram, "uPMatrix"); - fcMatrixUniform = glGetUniformLocation(fShaderProgram, "uCMatrix"); - fmvMatrixUniform = glGetUniformLocation(fShaderProgram, "uMVMatrix"); - fnMatrixUniform = glGetUniformLocation(fShaderProgram, "uNMatrix"); - ftMatrixUniform = glGetUniformLocation(fShaderProgram, "uTMatrix"); - - /* glUniformMatrix4fv(fcMatrixUniform, 1, 0, identity); - glUniformMatrix4fv(fpMatrixUniform, 1, 0, identity); - glUniformMatrix4fv(ftMatrixUniform, 1, 0, identity); - glUniformMatrix4fv(fmvMatrixUniform, 1, 0, identity); - */ - // We have to set that in order to avoid calls on opengl commands before all is ready - fGlViewInitialized = true; - } -#endif - if (fWinSize_x == 0) { fWinSize_x = fVP.GetWindowSizeHintX(); } @@ -199,10 +132,8 @@ void G4OpenGLViewer::InitializeGLView () glClearColor (0.0, 0.0, 0.0, 0.0); glClearDepth (1.0); -#ifndef G4OPENGL_VERSION_2 glDisable (GL_LINE_SMOOTH); glDisable (GL_POLYGON_SMOOTH); -#endif // clear the buffers and window? ClearView (); @@ -1513,21 +1444,6 @@ void G4OpenGLViewer::g4GlFrustum (GLdouble left, GLdouble right, GLdouble bottom } - -#ifdef G4OPENGL_VERSION_2 - -// Associate the VBO drawer to the OpenGLViewer and the OpenGLSceneHandler -void G4OpenGLViewer::setVboDrawer(G4OpenGLVboDrawer* drawer) { - fVboDrawer = drawer; - try { - G4OpenGLSceneHandler& sh = dynamic_cast(fSceneHandler); - sh.setVboDrawer(fVboDrawer); - } catch(std::bad_cast exp) { } -} - -#endif - - G4String G4OpenGLViewerPickMap::print() { std::ostringstream txt; for (unsigned int a=0; aUpdateSceneTree(fSceneTree); + +## 2023-03-22 Ben Morgan (openinventor-V11-01-01) +- Export public compile definitions to indicate availablity of specific drivers. Moves to + "use on link" model. + +## 2023-01-30 Ben Morgan (openinventor-V11-01-00) +- Link to new G4UIcore/UIimplementation modules in place of former G4UIbasic/UIcommon + ## 2022-11-25 Gabriele Cosmo (openinventor-V11-00-18) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/visualization/OpenInventor/include/G4OpenInventorQtExaminerViewer.hh b/source/visualization/OpenInventor/include/G4OpenInventorQtExaminerViewer.hh index 423f3dc28c0..3dad0b97da9 100644 --- a/source/visualization/OpenInventor/include/G4OpenInventorQtExaminerViewer.hh +++ b/source/visualization/OpenInventor/include/G4OpenInventorQtExaminerViewer.hh @@ -194,6 +194,8 @@ public: ~G4OpenInventorQtExaminerViewer(); + G4UIQt* GetUIQt() {return uiQt;} + template void parseString(T &t, const std::string &s, bool &error); // In case the viewer is embedded and then detached: diff --git a/source/visualization/OpenInventor/include/ui_OIQtListsDialog.h b/source/visualization/OpenInventor/include/ui_OIQtListsDialog.h index 1799e15bb22..b30a25acdef 100644 --- a/source/visualization/OpenInventor/include/ui_OIQtListsDialog.h +++ b/source/visualization/OpenInventor/include/ui_OIQtListsDialog.h @@ -9,19 +9,19 @@ #ifndef OIQTLISTSDIALOGWS1786_H #define OIQTLISTSDIALOGWS1786_H -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include QT_BEGIN_NAMESPACE diff --git a/source/visualization/OpenInventor/sources.cmake b/source/visualization/OpenInventor/sources.cmake index aa28ca399b0..1ccc24f633e 100644 --- a/source/visualization/OpenInventor/sources.cmake +++ b/source/visualization/OpenInventor/sources.cmake @@ -33,9 +33,12 @@ geant4_add_module(G4OpenInventor SoTrd.cc SoTubs.cc ) +# Needed by G4VisExecutive... +geant4_module_compile_definitions(G4OpenInventor PUBLIC G4VIS_USE_OI) + geant4_module_link_libraries(G4OpenInventor PUBLIC - G4UIcommon + G4UIcore G4globman G4graphics_reps G4hepgeometry @@ -44,7 +47,7 @@ geant4_module_link_libraries(G4OpenInventor G4vis_management Coin::Coin PRIVATE - G4UIbasic + G4UIimplementation G4csg G4geometrymng G4tools @@ -79,7 +82,10 @@ if(GEANT4_USE_INVENTOR_XT) G4OpenInventorXtViewer.cc wheelmouse.cc ) - geant4_module_compile_definitions(G4OpenInventor PRIVATE G4VIS_BUILD_OIX_DRIVER) + geant4_module_compile_definitions(G4OpenInventor + PUBLIC G4VIS_USE_OIX + PRIVATE G4VIS_BUILD_OIX_DRIVER) + geant4_module_link_libraries(G4OpenInventor PUBLIC SoXt::SoXt Motif::Xm) if(APPLE) geant4_module_link_libraries(G4OpenInventor PUBLIC XQuartzGL::GL) @@ -103,7 +109,9 @@ if(GEANT4_USE_INVENTOR_QT) G4OpenInventorQtViewer.cc G4SoQt.cc ) - geant4_module_link_libraries(G4OpenInventor PUBLIC SoQt::SoQt OpenGL::GL Qt${QT_VERSION_MAJOR}::OpenGL Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::PrintSupport Qt${QT_VERSION_MAJOR}::Widgets) + geant4_module_compile_definitions(G4OpenInventor PUBLIC G4VIS_USE_OIQT) + + geant4_module_link_libraries(G4OpenInventor PUBLIC SoQt::SoQt OpenGL::GL Qt${QT_VERSION_MAJOR}::OpenGL Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::Widgets) endif() # - WIN32 Only (Win32) sources @@ -117,5 +125,7 @@ if(GEANT4_USE_INVENTOR_WIN) G4OpenInventorWin.cc G4OpenInventorWinViewer.cc) + geant4_module_compile_definitions(G4OpenInventor PUBLIC G4VIS_USE_OIWIN32) + geant4_module_link_libraries(G4OpenInventor PUBLIC SoWin::SoWin OpenGL::GL) endif() diff --git a/source/visualization/Qt3D/GNUmakefile b/source/visualization/Qt3D/GNUmakefile deleted file mode 100644 index 842b642bda5..00000000000 --- a/source/visualization/Qt3D/GNUmakefile +++ /dev/null @@ -1,37 +0,0 @@ - -name := G4visQt3D - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -GLOBLIBS = libG4vis_management.lib libG4modeling.lib -GLOBLIBS += libG4interfaces.lib libG4run.lib libG4event.lib -GLOBLIBS += libG4tracking.lib libG4processes.lib libG4digits_hits.lib -GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk -include $(G4INSTALL)/config/G4VIS_BUILD.gmk -include $(G4INSTALL)/config/G4UI_BUILD.gmk -include $(G4INSTALL)/config/interactivity.gmk - -CPPFLAGS += -I$(G4BASE)/visualization/management/include -CPPFLAGS += -I$(G4BASE)/visualization/modeling/include -CPPFLAGS += -I$(G4BASE)/global/management/include -CPPFLAGS += -I$(G4BASE)/global/HEPGeometry/include -CPPFLAGS += -I$(G4BASE)/global/HEPRandom/include -CPPFLAGS += -I$(G4BASE)/graphics_reps/include -CPPFLAGS += -I$(G4BASE)/intercoms/include -CPPFLAGS += -I$(G4BASE)/interfaces/common/include -CPPFLAGS += -I$(G4BASE)/interfaces/basic/include -CPPFLAGS += -I$(G4BASE)/geometry/management/include -CPPFLAGS += -I$(G4BASE)/geometry/navigation/include -CPPFLAGS += -I$(G4BASE)/geometry/volumes/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/CSG/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/specific/include -CPPFLAGS += -I$(G4BASE)/tracking/include -CPPFLAGS += -I$(G4BASE)/digits_hits/hits/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/visualization/Qt3D/History b/source/visualization/Qt3D/History index 52f9177709b..b20d4265cb9 100644 --- a/source/visualization/Qt3D/History +++ b/source/visualization/Qt3D/History @@ -6,6 +6,19 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-04-26 Ben Morgan (visQt3D-V11-01-03) +- Support compilation against Qt5 and Qt6. + +## 2023-03-22 Ben Morgan (visQt3D-V11-01-02) +- Export public compile definitions to indicate availablity of specific drivers. Moves to + "use on link" model. + +## 2023-02-06 Ben Morgan (visQt3D-V11-01-01) +- Isolate private headers and update dependencies + +## 2023-01-30 Ben Morgan (visQt3D-V11-01-00) +- Link to new G4UIcore/UIimplementation modules in place of former G4UIbasic/UIcommon + ## 2022-11-25 Gabriele Cosmo (visQt3D-V11-00-12) - Fixed compilation warning for implicit type conversions on macOS/XCode 14.1. diff --git a/source/visualization/Qt3D/include/G4Qt3DQEntity.hh b/source/visualization/Qt3D/include/private/G4Qt3DQEntity.hh similarity index 100% rename from source/visualization/Qt3D/include/G4Qt3DQEntity.hh rename to source/visualization/Qt3D/include/private/G4Qt3DQEntity.hh diff --git a/source/visualization/Qt3D/include/G4Qt3DSceneHandler.hh b/source/visualization/Qt3D/include/private/G4Qt3DSceneHandler.hh similarity index 100% rename from source/visualization/Qt3D/include/G4Qt3DSceneHandler.hh rename to source/visualization/Qt3D/include/private/G4Qt3DSceneHandler.hh diff --git a/source/visualization/Qt3D/include/G4Qt3DUtils.hh b/source/visualization/Qt3D/include/private/G4Qt3DUtils.hh similarity index 100% rename from source/visualization/Qt3D/include/G4Qt3DUtils.hh rename to source/visualization/Qt3D/include/private/G4Qt3DUtils.hh diff --git a/source/visualization/Qt3D/include/G4Qt3DViewer.hh b/source/visualization/Qt3D/include/private/G4Qt3DViewer.hh similarity index 100% rename from source/visualization/Qt3D/include/G4Qt3DViewer.hh rename to source/visualization/Qt3D/include/private/G4Qt3DViewer.hh diff --git a/source/visualization/Qt3D/sources.cmake b/source/visualization/Qt3D/sources.cmake index 635d251f463..a8ecfd136f1 100644 --- a/source/visualization/Qt3D/sources.cmake +++ b/source/visualization/Qt3D/sources.cmake @@ -4,6 +4,7 @@ geant4_add_module(G4visQt3D PUBLIC_HEADERS G4Qt3D.hh + PRIVATE_HEADERS G4Qt3DQEntity.hh G4Qt3DSceneHandler.hh G4Qt3DUtils.hh @@ -14,27 +15,23 @@ geant4_add_module(G4visQt3D G4Qt3DUtils.cc G4Qt3DViewer.cc) -geant4_module_compile_definitions(G4visQt3D PRIVATE G4VIS_BUILD_QT3D_DRIVER) +geant4_module_compile_definitions(G4visQt3D PUBLIC G4VIS_USE_QT3D) geant4_module_link_libraries(G4visQt3D PUBLIC - G4modeling - G4globman - G4hepgeometry G4vis_management - Qt${QT_VERSION_MAJOR}::Gui - Qt${QT_VERSION_MAJOR}::Widgets - Qt${QT_VERSION_MAJOR}::3DCore - Qt${QT_VERSION_MAJOR}::3DExtras - Qt${QT_VERSION_MAJOR}::3DRender PRIVATE G4csg G4graphics_reps + G4globman G4geometrymng + G4hepgeometry + G4modeling G4navigation - G4UIbasic - G4intercoms) - - - - + G4UIimplementation + G4intercoms + Qt${QT_VERSION_MAJOR}::Gui + Qt${QT_VERSION_MAJOR}::Widgets + Qt${QT_VERSION_MAJOR}::3DCore + Qt${QT_VERSION_MAJOR}::3DExtras + Qt${QT_VERSION_MAJOR}::3DRender) diff --git a/source/visualization/Qt3D/src/G4Qt3DSceneHandler.cc b/source/visualization/Qt3D/src/G4Qt3DSceneHandler.cc index 26cd25bcbc0..ac3b799c8dc 100644 --- a/source/visualization/Qt3D/src/G4Qt3DSceneHandler.cc +++ b/source/visualization/Qt3D/src/G4Qt3DSceneHandler.cc @@ -63,7 +63,25 @@ // following warning: "findBoundingVolumeComputeData: Position attribute not // suited for bounding volume computation", so for now we use float. #define PRECISION float +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) #define BASETYPE Qt3DRender::QAttribute::Float +#else +#define BASETYPE Qt3DCore::QAttribute::Float +#endif + +// Qt3D types move between namespaces between 5 and 6 +namespace G4Qt3DCompat +{ +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) + using Qt3DRender::QAttribute; + using Qt3DRender::QBuffer; + using Qt3DRender::QGeometry; +#else + using Qt3DCore::QAttribute; + using Qt3DCore::QBuffer; + using Qt3DCore::QGeometry; +#endif +} G4int G4Qt3DSceneHandler::fSceneIdCount = 0; @@ -302,17 +320,18 @@ void G4Qt3DSceneHandler::AddPrimitive(const G4Polyline& polyline) polylineBufferArray[iLine++] = polyline[i+1].y(); polylineBufferArray[iLine++] = polyline[i+1].z(); } - auto polylineGeometry = new Qt3DRender::QGeometry(); + auto polylineGeometry = new G4Qt3DCompat::QGeometry(); polylineGeometry->setObjectName("polylineGeometry"); - auto polylineBuffer = new Qt3DRender::QBuffer(polylineGeometry); + + auto polylineBuffer = new G4Qt3DCompat::QBuffer(polylineGeometry); polylineBuffer->setObjectName("Polyline buffer"); polylineBuffer->setData(polylineByteArray); - auto polylineAtt = new Qt3DRender::QAttribute; + auto polylineAtt = new G4Qt3DCompat::QAttribute; polylineAtt->setObjectName("Position attribute"); - polylineAtt->setName(Qt3DRender::QAttribute::defaultPositionAttributeName()); + polylineAtt->setName(G4Qt3DCompat::QAttribute::defaultPositionAttributeName()); polylineAtt->setBuffer(polylineBuffer); - polylineAtt->setAttributeType(Qt3DRender::QAttribute::VertexAttribute); + polylineAtt->setAttributeType(G4Qt3DCompat::QAttribute::VertexAttribute); polylineAtt->setVertexBaseType(BASETYPE); polylineAtt->setVertexSize(3); polylineAtt->setCount((G4int)nLines); @@ -331,10 +350,19 @@ void G4Qt3DSceneHandler::AddPrimitive(const G4Polyline& polyline) polylineEntity->addComponent(material); auto renderer = new Qt3DRender::QGeometryRenderer; - renderer->setObjectName("polylineWireframeRenderer"); +#if QT_VERSION >= QT_VERSION_CHECK(6,0,0) + auto geometryView = new Qt3DCore::QGeometryView(polylineGeometry); + geometryView->setObjectName("polylineGeometryView"); + geometryView->setGeometry(polylineGeometry); + geometryView->setVertexCount(2*nLines); + geometryView->setPrimitiveType(Qt3DCore::QGeometryView::Lines); + renderer->setView(geometryView); +#else + renderer->setObjectName("polylineRenderer"); renderer->setGeometry(polylineGeometry); renderer->setVertexCount(2*(G4int)nLines); renderer->setPrimitiveType(Qt3DRender::QGeometryRenderer::Lines); +#endif polylineEntity->addComponent(renderer); } @@ -383,17 +411,17 @@ void G4Qt3DSceneHandler::AddPrimitive (const G4Polymarker& polymarker) polymarkerBufferArray[iMarker++] = polymarker[i].y(); polymarkerBufferArray[iMarker++] = polymarker[i].z(); } - auto polymarkerGeometry = new Qt3DRender::QGeometry(); + auto polymarkerGeometry = new G4Qt3DCompat::QGeometry(); polymarkerGeometry->setObjectName("polymarkerGeometry"); - auto polymarkerBuffer = new Qt3DRender::QBuffer(polymarkerGeometry); + auto polymarkerBuffer = new G4Qt3DCompat::QBuffer(polymarkerGeometry); polymarkerBuffer->setObjectName("Polymarker buffer"); polymarkerBuffer->setData(polymarkerByteArray); - auto polymarkerAtt = new Qt3DRender::QAttribute; + auto polymarkerAtt = new G4Qt3DCompat::QAttribute; polymarkerAtt->setObjectName("Position attribute"); - polymarkerAtt->setName(Qt3DRender::QAttribute::defaultPositionAttributeName()); + polymarkerAtt->setName(G4Qt3DCompat::QAttribute::defaultPositionAttributeName()); polymarkerAtt->setBuffer(polymarkerBuffer); - polymarkerAtt->setAttributeType(Qt3DRender::QAttribute::VertexAttribute); + polymarkerAtt->setAttributeType(G4Qt3DCompat::QAttribute::VertexAttribute); polymarkerAtt->setVertexBaseType(BASETYPE); polymarkerAtt->setVertexSize(3); polymarkerAtt->setCount((G4int)nDots); @@ -821,14 +849,14 @@ void G4Qt3DSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron) const auto vertexByteSize = 3*sizeof(PRECISION); - Qt3DRender::QGeometry* vertexGeometry = nullptr; - Qt3DRender::QGeometry* lineGeometry = nullptr; + G4Qt3DCompat::QGeometry* vertexGeometry = nullptr; + G4Qt3DCompat::QGeometry* lineGeometry = nullptr; - Qt3DRender::QAttribute* positionAtt = nullptr; - Qt3DRender::QAttribute* normalAtt = nullptr; - Qt3DRender::QAttribute* lineAtt = nullptr; + G4Qt3DCompat::QAttribute* positionAtt = nullptr; + G4Qt3DCompat::QAttribute* normalAtt = nullptr; + G4Qt3DCompat::QAttribute* lineAtt = nullptr; - Qt3DRender::QBuffer* vertexBuffer = nullptr; + G4Qt3DCompat::QBuffer* vertexBuffer = nullptr; if (drawing_style == G4ViewParameters::hlr || drawing_style == G4ViewParameters::hsr || drawing_style == G4ViewParameters::hlhsr) { @@ -849,18 +877,18 @@ void G4Qt3DSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron) vertexBufferArray[i1++] = normals[i].z(); } // Vertex buffer (vertices and normals) - vertexGeometry = new Qt3DRender::QGeometry(); + vertexGeometry = new G4Qt3DCompat::QGeometry(); vertexGeometry->setObjectName("vertexGeometry"); - vertexBuffer = new Qt3DRender::QBuffer(vertexGeometry); + vertexBuffer = new G4Qt3DCompat::QBuffer(vertexGeometry); vertexBuffer->setObjectName("Vertex buffer"); vertexBuffer->setData(vertexByteArray); // Position attribute - positionAtt = new Qt3DRender::QAttribute; + positionAtt = new G4Qt3DCompat::QAttribute; positionAtt->setObjectName("Position attribute"); - positionAtt->setName(Qt3DRender::QAttribute::defaultPositionAttributeName()); + positionAtt->setName(G4Qt3DCompat::QAttribute::defaultPositionAttributeName()); positionAtt->setBuffer(vertexBuffer); - positionAtt->setAttributeType(Qt3DRender::QAttribute::VertexAttribute); + positionAtt->setAttributeType(G4Qt3DCompat::QAttribute::VertexAttribute); positionAtt->setVertexBaseType(BASETYPE); positionAtt->setVertexSize(3); positionAtt->setCount((G4int)nVerts); @@ -868,11 +896,11 @@ void G4Qt3DSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron) positionAtt->setByteStride(2*vertexByteSize); // Normal attribute - normalAtt = new Qt3DRender::QAttribute; + normalAtt = new G4Qt3DCompat::QAttribute; normalAtt->setObjectName("Normal attribute"); - normalAtt->setName(Qt3DRender::QAttribute::defaultNormalAttributeName()); + normalAtt->setName(G4Qt3DCompat::QAttribute::defaultNormalAttributeName()); normalAtt->setBuffer(vertexBuffer); - normalAtt->setAttributeType(Qt3DRender::QAttribute::VertexAttribute); + normalAtt->setAttributeType(G4Qt3DCompat::QAttribute::VertexAttribute); normalAtt->setVertexBaseType(BASETYPE); normalAtt->setVertexSize(3); normalAtt->setCount((G4int)nVerts); @@ -880,7 +908,7 @@ void G4Qt3DSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron) normalAtt->setByteStride(2*vertexByteSize); } - Qt3DRender::QBuffer* lineBuffer = nullptr; + G4Qt3DCompat::QBuffer* lineBuffer = nullptr; if (drawing_style == G4ViewParameters::wireframe || drawing_style == G4ViewParameters::hlr || drawing_style == G4ViewParameters::hlhsr) { @@ -900,18 +928,18 @@ void G4Qt3DSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron) lineBufferArray[i2++] = line.second.z(); } // Line loop buffer - lineGeometry = new Qt3DRender::QGeometry(); + lineGeometry = new G4Qt3DCompat::QGeometry(); lineGeometry->setObjectName("lineGeometry"); - lineBuffer = new Qt3DRender::QBuffer(lineGeometry); + lineBuffer = new G4Qt3DCompat::QBuffer(lineGeometry); lineBuffer->setObjectName("Line buffer"); lineBuffer->setData(lineByteArray); // Line attribute - lineAtt = new Qt3DRender::QAttribute; + lineAtt = new G4Qt3DCompat::QAttribute; lineAtt->setObjectName("Position attribute"); - lineAtt->setName(Qt3DRender::QAttribute::defaultPositionAttributeName()); + lineAtt->setName(G4Qt3DCompat::QAttribute::defaultPositionAttributeName()); lineAtt->setBuffer(lineBuffer); - lineAtt->setAttributeType(Qt3DRender::QAttribute::VertexAttribute); + lineAtt->setAttributeType(G4Qt3DCompat::QAttribute::VertexAttribute); lineAtt->setVertexBaseType(BASETYPE); lineAtt->setVertexSize(3); lineAtt->setCount((G4int)nLines); diff --git a/source/visualization/Qt3D/src/G4Qt3DViewer.cc b/source/visualization/Qt3D/src/G4Qt3DViewer.cc index e0c1d12049c..284e9743810 100644 --- a/source/visualization/Qt3D/src/G4Qt3DViewer.cc +++ b/source/visualization/Qt3D/src/G4Qt3DViewer.cc @@ -338,9 +338,13 @@ void G4Qt3DViewer::mouseMoveEvent(QMouseEvent* ev) unless mouse tracking has been enabled with QWidget::setMouseTracking().*/ // But this is a window not a widget. // As a workaround we maintain a flag changed by mousePress/ReleaseEvent. - +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) G4double x = ev->x(); G4double y = ev->y(); +#else + G4double x = ev->position().x(); + G4double y = ev->position().y(); +#endif G4double dx = x-fMousePressedX; G4double dy = y-fMousePressedY; fMousePressedX = x; @@ -383,8 +387,13 @@ void G4Qt3DViewer::mouseMoveEvent(QMouseEvent* ev) void G4Qt3DViewer::mousePressEvent(QMouseEvent* ev) { fMousePressed = true; +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) fMousePressedX = ev->x(); fMousePressedY = ev->y(); +#else + fMousePressedX = ev->position().x(); + fMousePressedY = ev->position().y(); +#endif } void G4Qt3DViewer::mouseReleaseEvent(QMouseEvent* /*ev*/) diff --git a/source/visualization/RayTracer/GNUmakefile b/source/visualization/RayTracer/GNUmakefile deleted file mode 100644 index 6a98c4d83fb..00000000000 --- a/source/visualization/RayTracer/GNUmakefile +++ /dev/null @@ -1,82 +0,0 @@ - -name := G4RayTracer - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -GLOBLIBS = libG4vis_management.lib libG4modeling.lib -GLOBLIBS += libG4run.lib libG4event.lib -GLOBLIBS += libG4tracking.lib libG4processes.lib libG4digits_hits.lib -GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk -include $(G4INSTALL)/config/G4VIS_BUILD.gmk -include $(G4INSTALL)/config/interactivity.gmk - -# NO need OGL, then reset OGLGLAGS -OGLFLAGS = -OGLLIBS = -# NO need QT, then reset QTGLAGS -QTFLAGS = -QTLIBS = -GLQTLIBS = - -CPPFLAGS += -DG4RAYTRACER_ALLOC_EXPORT - -CPPFLAGS += -I$(G4BASE)/visualization/modeling/include -CPPFLAGS += -I$(G4BASE)/visualization/management/include -CPPFLAGS += -I$(G4BASE)/graphics_reps/include -CPPFLAGS += -I$(G4BASE)/global/management/include -CPPFLAGS += -I$(G4BASE)/global/HEPGeometry/include -CPPFLAGS += -I$(G4BASE)/global/HEPRandom/include -CPPFLAGS += -I$(G4BASE)/geometry/management/include -CPPFLAGS += -I$(G4BASE)/geometry/navigation/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/CSG/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/specific/include -CPPFLAGS += -I$(G4BASE)/geometry/volumes/include -CPPFLAGS += -I$(G4BASE)/geometry/magneticfield/include -CPPFLAGS += -I$(G4BASE)/digits_hits/detector/include -CPPFLAGS += -I$(G4BASE)/digits_hits/digits/include -CPPFLAGS += -I$(G4BASE)/intercoms/include -CPPFLAGS += -I$(G4BASE)/event/include -CPPFLAGS += -I$(G4BASE)/run/include -CPPFLAGS += -I$(G4BASE)/tasking/include -CPPFLAGS += -I$(G4BASE)/track/include -CPPFLAGS += -I$(G4BASE)/tracking/include -CPPFLAGS += -I$(G4BASE)/digits_hits/hits/include -CPPFLAGS += -I$(G4BASE)/particles/bosons/include -CPPFLAGS += -I$(G4BASE)/particles/management/include -CPPFLAGS += -I$(G4BASE)/processes/management/include -CPPFLAGS += -I$(G4BASE)/processes/cuts/include -CPPFLAGS += -I$(G4BASE)/processes/scoring/include -CPPFLAGS += -I$(G4BASE)/materials/include - -# Locally adjust source list before including common.gmk -sources := $(addprefix src/,G4RTJpegCoder.cc \ - G4RTJpegMaker.cc \ - G4RTMessenger.cc \ - G4RTOutBitStream.cc \ - G4RTPrimaryGeneratorAction.cc \ - G4RTRun.cc \ - G4RTRunAction.cc \ - G4RTSimpleScanner.cc \ - G4RTSteppingAction.cc \ - G4RTTrackingAction.cc \ - G4RTWorkerInitialization.cc \ - G4RayTracer.cc \ - G4RayTracerSceneHandler.cc \ - G4RayTracerViewer.cc \ - G4RayTrajectory.cc \ - G4RayTrajectoryPoint.cc \ - G4TheMTRayTracer.cc \ - G4TheRayTracer.cc \ - G4VRTScanner.cc) - -ifdef G4VIS_BUILD_RAYTRACERX_DRIVER - sources += src/G4RayTracerX.cc src/G4RayTracerXViewer.cc src/G4RTXScanner.cc -endif - -include $(G4INSTALL)/config/common.gmk diff --git a/source/visualization/RayTracer/History b/source/visualization/RayTracer/History index bc3d4dce288..883bba73799 100644 --- a/source/visualization/RayTracer/History +++ b/source/visualization/RayTracer/History @@ -6,6 +6,13 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-03-22 Ben Morgan (raytracer-V11-01-01) +- Export public compile definitions to indicate availablity of specific drivers. Moves to + "use on link" model. + +## 2023-02-06 Ben Morgan (raytracer-V11-01-00) +- Isolate private headers and update dependencies + ## 2022-11-25 Gabriele Cosmo (raytracer-V11-00-06) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/visualization/RayTracer/include/G4RTJpeg.hh b/source/visualization/RayTracer/include/private/G4RTJpeg.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RTJpeg.hh rename to source/visualization/RayTracer/include/private/G4RTJpeg.hh diff --git a/source/visualization/RayTracer/include/G4RTJpegCoder.hh b/source/visualization/RayTracer/include/private/G4RTJpegCoder.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RTJpegCoder.hh rename to source/visualization/RayTracer/include/private/G4RTJpegCoder.hh diff --git a/source/visualization/RayTracer/include/G4RTJpegCoderTables.hh b/source/visualization/RayTracer/include/private/G4RTJpegCoderTables.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RTJpegCoderTables.hh rename to source/visualization/RayTracer/include/private/G4RTJpegCoderTables.hh diff --git a/source/visualization/RayTracer/include/G4RTJpegMaker.hh b/source/visualization/RayTracer/include/private/G4RTJpegMaker.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RTJpegMaker.hh rename to source/visualization/RayTracer/include/private/G4RTJpegMaker.hh diff --git a/source/visualization/RayTracer/include/G4RTMessenger.hh b/source/visualization/RayTracer/include/private/G4RTMessenger.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RTMessenger.hh rename to source/visualization/RayTracer/include/private/G4RTMessenger.hh diff --git a/source/visualization/RayTracer/include/G4RTOutBitStream.hh b/source/visualization/RayTracer/include/private/G4RTOutBitStream.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RTOutBitStream.hh rename to source/visualization/RayTracer/include/private/G4RTOutBitStream.hh diff --git a/source/visualization/RayTracer/include/G4RTPrimaryGeneratorAction.hh b/source/visualization/RayTracer/include/private/G4RTPrimaryGeneratorAction.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RTPrimaryGeneratorAction.hh rename to source/visualization/RayTracer/include/private/G4RTPrimaryGeneratorAction.hh diff --git a/source/visualization/RayTracer/include/G4RTRun.hh b/source/visualization/RayTracer/include/private/G4RTRun.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RTRun.hh rename to source/visualization/RayTracer/include/private/G4RTRun.hh diff --git a/source/visualization/RayTracer/include/G4RTRunAction.hh b/source/visualization/RayTracer/include/private/G4RTRunAction.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RTRunAction.hh rename to source/visualization/RayTracer/include/private/G4RTRunAction.hh diff --git a/source/visualization/RayTracer/include/G4RTSimpleScanner.hh b/source/visualization/RayTracer/include/private/G4RTSimpleScanner.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RTSimpleScanner.hh rename to source/visualization/RayTracer/include/private/G4RTSimpleScanner.hh diff --git a/source/visualization/RayTracer/include/G4RTSteppingAction.hh b/source/visualization/RayTracer/include/private/G4RTSteppingAction.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RTSteppingAction.hh rename to source/visualization/RayTracer/include/private/G4RTSteppingAction.hh diff --git a/source/visualization/RayTracer/include/G4RTTrackingAction.hh b/source/visualization/RayTracer/include/private/G4RTTrackingAction.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RTTrackingAction.hh rename to source/visualization/RayTracer/include/private/G4RTTrackingAction.hh diff --git a/source/visualization/RayTracer/include/G4RTWorkerInitialization.hh b/source/visualization/RayTracer/include/private/G4RTWorkerInitialization.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RTWorkerInitialization.hh rename to source/visualization/RayTracer/include/private/G4RTWorkerInitialization.hh diff --git a/source/visualization/RayTracer/include/G4RTXScanner.hh b/source/visualization/RayTracer/include/private/G4RTXScanner.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RTXScanner.hh rename to source/visualization/RayTracer/include/private/G4RTXScanner.hh diff --git a/source/visualization/RayTracer/include/G4RayTracerFeatures.hh b/source/visualization/RayTracer/include/private/G4RayTracerFeatures.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RayTracerFeatures.hh rename to source/visualization/RayTracer/include/private/G4RayTracerFeatures.hh diff --git a/source/visualization/RayTracer/include/G4RayTracerSceneHandler.hh b/source/visualization/RayTracer/include/private/G4RayTracerSceneHandler.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RayTracerSceneHandler.hh rename to source/visualization/RayTracer/include/private/G4RayTracerSceneHandler.hh diff --git a/source/visualization/RayTracer/include/G4RayTracerViewer.hh b/source/visualization/RayTracer/include/private/G4RayTracerViewer.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RayTracerViewer.hh rename to source/visualization/RayTracer/include/private/G4RayTracerViewer.hh diff --git a/source/visualization/RayTracer/include/G4RayTracerXViewer.hh b/source/visualization/RayTracer/include/private/G4RayTracerXViewer.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RayTracerXViewer.hh rename to source/visualization/RayTracer/include/private/G4RayTracerXViewer.hh diff --git a/source/visualization/RayTracer/include/G4RayTrajectory.hh b/source/visualization/RayTracer/include/private/G4RayTrajectory.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RayTrajectory.hh rename to source/visualization/RayTracer/include/private/G4RayTrajectory.hh diff --git a/source/visualization/RayTracer/include/G4RayTrajectoryPoint.hh b/source/visualization/RayTracer/include/private/G4RayTrajectoryPoint.hh similarity index 100% rename from source/visualization/RayTracer/include/G4RayTrajectoryPoint.hh rename to source/visualization/RayTracer/include/private/G4RayTrajectoryPoint.hh diff --git a/source/visualization/RayTracer/include/G4TheMTRayTracer.hh b/source/visualization/RayTracer/include/private/G4TheMTRayTracer.hh similarity index 100% rename from source/visualization/RayTracer/include/G4TheMTRayTracer.hh rename to source/visualization/RayTracer/include/private/G4TheMTRayTracer.hh diff --git a/source/visualization/RayTracer/include/G4TheRayTracer.hh b/source/visualization/RayTracer/include/private/G4TheRayTracer.hh similarity index 100% rename from source/visualization/RayTracer/include/G4TheRayTracer.hh rename to source/visualization/RayTracer/include/private/G4TheRayTracer.hh diff --git a/source/visualization/RayTracer/include/G4VFigureFileMaker.hh b/source/visualization/RayTracer/include/private/G4VFigureFileMaker.hh similarity index 100% rename from source/visualization/RayTracer/include/G4VFigureFileMaker.hh rename to source/visualization/RayTracer/include/private/G4VFigureFileMaker.hh diff --git a/source/visualization/RayTracer/include/G4VRTScanner.hh b/source/visualization/RayTracer/include/private/G4VRTScanner.hh similarity index 100% rename from source/visualization/RayTracer/include/G4VRTScanner.hh rename to source/visualization/RayTracer/include/private/G4VRTScanner.hh diff --git a/source/visualization/RayTracer/sources.cmake b/source/visualization/RayTracer/sources.cmake index def0a8dcb11..0c661dd37c6 100644 --- a/source/visualization/RayTracer/sources.cmake +++ b/source/visualization/RayTracer/sources.cmake @@ -3,6 +3,8 @@ # Define the Geant4 Module. geant4_add_module(G4RayTracer PUBLIC_HEADERS + G4RayTracer.hh + PRIVATE_HEADERS G4RTJpeg.hh G4RTJpegCoder.hh G4RTJpegCoderTables.hh @@ -16,7 +18,6 @@ geant4_add_module(G4RayTracer G4RTSteppingAction.hh G4RTTrackingAction.hh G4RTWorkerInitialization.hh - G4RayTracer.hh G4RayTracerFeatures.hh G4RayTracerSceneHandler.hh G4RayTracerViewer.hh @@ -51,25 +52,25 @@ geant4_module_compile_definitions(G4RayTracer PRIVATE G4RAYTRACER_ALLOC_EXPORT) geant4_module_link_libraries(G4RayTracer PUBLIC - G4globman - G4graphics_reps - G4modeling - G4run - G4hits - G4track - G4intercoms - G4tracking G4vis_management - G4hepgeometry PRIVATE - G4event G4bosons + G4cuts + G4detector + G4event + G4globman + G4graphics_reps G4geometrymng - G4scoring + G4hepgeometry + G4hits + G4intercoms + G4modeling G4partman G4procman - G4cuts - G4detector + G4run + G4scoring + G4track + G4tracking G4navigation) # X11 RayTracer only if selected @@ -77,6 +78,7 @@ if(GEANT4_USE_RAYTRACER_X11) geant4_module_sources(G4RayTracer PUBLIC_HEADERS G4RayTracerX.hh + PRIVATE_HEADERS G4RayTracerXViewer.hh G4RTXScanner.hh SOURCES @@ -84,5 +86,7 @@ if(GEANT4_USE_RAYTRACER_X11) G4RayTracerXViewer.cc G4RTXScanner.cc) - geant4_module_link_libraries(G4RayTracer PUBLIC X11::SM X11::ICE X11::X11 X11::Xext X11::Xmu) + geant4_module_compile_definitions(G4RayTracer PUBLIC G4VIS_USE_RAYTRACERX) + + geant4_module_link_libraries(G4RayTracer PRIVATE X11::SM X11::ICE X11::X11 X11::Xext X11::Xmu) endif() diff --git a/source/visualization/ToolsSG/GNUmakefile b/source/visualization/ToolsSG/GNUmakefile deleted file mode 100644 index 63b266d5325..00000000000 --- a/source/visualization/ToolsSG/GNUmakefile +++ /dev/null @@ -1,55 +0,0 @@ - -name := G4ToolsSG - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -GLOBLIBS = libG4vis_management.lib libG4modeling.lib -GLOBLIBS += libG4run.lib libG4event.lib -GLOBLIBS += libG4tracking.lib libG4processes.lib libG4digits_hits.lib -GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk -include $(G4INSTALL)/config/interactivity.gmk - -CPPFLAGS += -I$(G4BASE)/visualization/management/include -CPPFLAGS += -I$(G4BASE)/visualization/modeling/include -CPPFLAGS += -I$(G4BASE)/global/management/include -CPPFLAGS += -I$(G4BASE)/global/HEPGeometry/include -CPPFLAGS += -I$(G4BASE)/graphics_reps/include -CPPFLAGS += -I$(G4BASE)/intercoms/include -CPPFLAGS += -I$(G4BASE)/geometry/management/include -CPPFLAGS += -I$(G4BASE)/geometry/navigation/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/CSG/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/specific/include -CPPFLAGS += -I$(G4BASE)/geometry/volumes/include -CPPFLAGS += -I$(G4BASE)/tracking/include -CPPFLAGS += -I$(G4BASE)/digits_hits/hits/include - -# Locally adjust source list before including common.gmk -sources := src/G4ToolsSGSceneHandler.cc - -CPPFLAGS += -I$(G4BASE)/externals/g4tools/include -sources += src/G4ToolsSGOffscreen.cc - -ifdef G4VIS_BUILD_TOOLSSG_X11_GLES_DRIVER - sources += src/G4ToolsSGX11GLES.cc -endif - -ifdef G4VIS_BUILD_TOOLSSG_WINDOWS_GLES_DRIVER - sources += src/G4ToolsSGWindowsGLES.cc -endif - -ifdef G4VIS_BUILD_TOOLSSG_XT_GLES_DRIVER - sources += src/G4ToolsSGXtGLES.cc -endif - -ifdef G4VIS_BUILD_TOOLSSG_QT_GLES_DRIVER - sources += src/G4ToolsSGQtGLES.cc src/G4ToolsSGQtViewer.cc -endif - -include $(G4INSTALL)/config/moc.gmk -include $(G4INSTALL)/config/common.gmk diff --git a/source/visualization/ToolsSG/History b/source/visualization/ToolsSG/History index feb80e1e0d4..2d3382535b6 100644 --- a/source/visualization/ToolsSG/History +++ b/source/visualization/ToolsSG/History @@ -6,6 +6,51 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-06-04 John Allison (vis_toolssg-V11-01-08) +- IsUISessionCompatible: Remove the function where not necessary and tidy. + +## 2023-05-29 Guy Barrand (vis_toolssg-V11-01-07) +- sources.cmake: declare the G4*ZB.hh, G4*ZB.cc files. +- new ToolsSG Qt ZB sub-driver: new files: G4ToolsSGQtZB.hh, G4ToolsSGQtZB.cc, G4ToolsSGQtZBViewer.hh, G4ToolsSGQtZBViewer.cc. +- new ToolsSG X11 sub-driver. New files: G4ToolsSGX11ZB.hh, G4ToolsSGX11ZB.cc. +- new ToolsSG Xt sub-driver. New files: G4ToolsSGXtZB.hh, G4ToolsSGXtZB.cc. +- new ToolsSG Windows sub-driver. New files: G4ToolsSGWindowsZB.hh, G4ToolsSGWindowsZB.cc. +- sources.cmake: in if(GEANT4_USE_TOOLSSG_XT_GLES), PUBLIC G4VIS_USE_TOOLSSG_X11_GLES should be PUBLIC G4VIS_USE_TOOLSSG_XT_GLES. +- src/G4ToolsSGQtGLES.cc, G4ToolsSGXtGLES.cc: avoid the "tools::argcv" logic by using the "get argcv" from G4Qt, G4Xt. This should fix a Coverity issue. + +## 2023-04-27 Ben Morgan (vis_toolssg-V11-01-06) +- Link to Qt6OpenGLWidgets library when using Qt6 to access QOpenGLWidget. + +## 2023-04-14 John Allison (vis_toolssg-V11-01-05) +- Co-working: visman-V11-01-04, greps-V11-01-03, interfaces-V11-01-11, + opengl-V11-01-06, openinventor-V11-01-04. +- New Scene Tree Phase 2 - first implementation of a no-frills GUI-side + - See visualization/management/History for full description. +- Revert earlier changes for the new scene tree. + - After the introduction of virtual G4VInteractiveSession::UpdateSceneTree + they are no loner necessary. + +## 2023-04-02 Ben Morgan (vis_toolssg-V11-01-04) +- No longer link to QtPrintSupport, which is not used in the toolkit. + +## 2023-03-28 John Allison (vis_toolssg-V11-01-03) +- G4ToolsSGViewer.hh: + - Call UpdateGUISceneTree() if (kernelVisitWasNeeded). +- G4ToolsSGQtViewer.hh: + - uiQt becomes fUIQt, i.e., a data member. + - Implement virtual void UpdateGUISceneTree() { + - if (fUIQt) fUIQt->UpdateSceneTree(fSceneTree); + +## 2023-03-22 Ben Morgan (vis_toolssg-V11-01-02) +- Export public compile definitions to indicate availablity of specific drivers. Moves to + "use on link" model. + +## 2023-02-06 Ben Morgan (vis_toolssg-V11-01-01) +- Isolate private headers and update dependencies + +## 2023-01-30 Ben Morgan (vis_toolssg-V11-01-00) +- Link to new G4UIcore/UIimplementation modules in place of former G4UIbasic/UIcommon + ## 2022-11-25 Gabriele Cosmo (vis_toolssg-V11-00-15) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/visualization/ToolsSG/include/G4ToolsSGOffscreen.hh b/source/visualization/ToolsSG/include/G4ToolsSGOffscreen.hh index 9b22edb40cd..ae88b7f4541 100644 --- a/source/visualization/ToolsSG/include/G4ToolsSGOffscreen.hh +++ b/source/visualization/ToolsSG/include/G4ToolsSGOffscreen.hh @@ -43,7 +43,6 @@ protected: public: G4VSceneHandler* CreateSceneHandler(const G4String& name = ""); G4VViewer* CreateViewer (G4VSceneHandler&, const G4String& name = ""); - G4bool IsUISessionCompatible () const; protected: void Initialise(); protected: diff --git a/source/visualization/ToolsSG/include/G4ToolsSGQtZB.hh b/source/visualization/ToolsSG/include/G4ToolsSGQtZB.hh new file mode 100644 index 00000000000..852216d6ef8 --- /dev/null +++ b/source/visualization/ToolsSG/include/G4ToolsSGQtZB.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. * +// ******************************************************************** +// +// Guy Barrand 13th April 2023 + +#ifndef G4TOOLSSGQTZB_HH +#define G4TOOLSSGQTZB_HH + +#include "G4VGraphicsSystem.hh" + +namespace toolx {namespace Qt {class session;}} + +class G4ToolsSGQtZB: public G4VGraphicsSystem { + using parent = G4VGraphicsSystem; +public: + G4ToolsSGQtZB(); + virtual ~G4ToolsSGQtZB(); +protected: + G4ToolsSGQtZB(const G4ToolsSGQtZB& a_from):parent(a_from){} + G4ToolsSGQtZB& operator=(const G4ToolsSGQtZB&) {return *this;} +public: + G4VSceneHandler* CreateSceneHandler(const G4String& name = ""); + G4VViewer* CreateViewer (G4VSceneHandler&, const G4String& name = ""); + G4bool IsUISessionCompatible () const; +protected: + void Initialise(); +protected: + toolx::Qt::session* fSGSession; +}; + +#endif diff --git a/source/visualization/ToolsSG/include/G4ToolsSGWindowsGLES.hh b/source/visualization/ToolsSG/include/G4ToolsSGWindowsGLES.hh index 16b809af44a..8195c30b00e 100644 --- a/source/visualization/ToolsSG/include/G4ToolsSGWindowsGLES.hh +++ b/source/visualization/ToolsSG/include/G4ToolsSGWindowsGLES.hh @@ -43,7 +43,6 @@ protected: public: G4VSceneHandler* CreateSceneHandler(const G4String& name = ""); G4VViewer* CreateViewer (G4VSceneHandler&, const G4String& name = ""); - G4bool IsUISessionCompatible () const; protected: void Initialise(); protected: diff --git a/source/visualization/ToolsSG/include/G4ToolsSGWindowsZB.hh b/source/visualization/ToolsSG/include/G4ToolsSGWindowsZB.hh new file mode 100644 index 00000000000..6943c787f7c --- /dev/null +++ b/source/visualization/ToolsSG/include/G4ToolsSGWindowsZB.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. * +// ******************************************************************** +// +// Guy Barrand 17th April 2023 + +#ifndef G4TOOLSSGWINDOWSZB_HH +#define G4TOOLSSGWINDOWSZB_HH + +#include "G4VGraphicsSystem.hh" + +namespace toolx {namespace Windows {class session;}} + +class G4ToolsSGWindowsZB: public G4VGraphicsSystem { + using parent = G4VGraphicsSystem; +public: + G4ToolsSGWindowsZB(); + virtual ~G4ToolsSGWindowsZB(); +protected: + G4ToolsSGWindowsZB(const G4ToolsSGWindowsZB& a_from):parent(a_from){} + G4ToolsSGWindowsZB& operator=(const G4ToolsSGWindowsZB&) {return *this;} +public: + G4VSceneHandler* CreateSceneHandler(const G4String& name = ""); + G4VViewer* CreateViewer (G4VSceneHandler&, const G4String& name = ""); +protected: + void Initialise(); +protected: + toolx::Windows::session* fSGSession; +}; + +#endif diff --git a/source/visualization/ToolsSG/include/G4ToolsSGX11GLES.hh b/source/visualization/ToolsSG/include/G4ToolsSGX11GLES.hh index 3240c254d1b..2adfb7ece9c 100644 --- a/source/visualization/ToolsSG/include/G4ToolsSGX11GLES.hh +++ b/source/visualization/ToolsSG/include/G4ToolsSGX11GLES.hh @@ -43,7 +43,6 @@ protected: public: G4VSceneHandler* CreateSceneHandler(const G4String& name = ""); G4VViewer* CreateViewer (G4VSceneHandler&, const G4String& name = ""); - G4bool IsUISessionCompatible () const; protected: void Initialise(); protected: diff --git a/source/visualization/ToolsSG/include/G4ToolsSGX11ZB.hh b/source/visualization/ToolsSG/include/G4ToolsSGX11ZB.hh new file mode 100644 index 00000000000..c5875cae646 --- /dev/null +++ b/source/visualization/ToolsSG/include/G4ToolsSGX11ZB.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. * +// ******************************************************************** +// +// Guy Barrand 14th April 2023 + +#ifndef G4TOOLSSGX11ZB_HH +#define G4TOOLSSGX11ZB_HH + +#include "G4VGraphicsSystem.hh" + +namespace toolx {namespace X11 {class base_session;}} + +class G4ToolsSGX11ZB: public G4VGraphicsSystem { + using parent = G4VGraphicsSystem; +public: + G4ToolsSGX11ZB(); + virtual ~G4ToolsSGX11ZB(); +protected: + G4ToolsSGX11ZB(const G4ToolsSGX11ZB& a_from):parent(a_from){} + G4ToolsSGX11ZB& operator=(const G4ToolsSGX11ZB&) {return *this;} +public: + G4VSceneHandler* CreateSceneHandler(const G4String& name = ""); + G4VViewer* CreateViewer (G4VSceneHandler&, const G4String& name = ""); +protected: + void Initialise(); +protected: + toolx::X11::base_session* fSGSession; +}; + +#endif diff --git a/source/visualization/ToolsSG/include/G4ToolsSGXtGLES.hh b/source/visualization/ToolsSG/include/G4ToolsSGXtGLES.hh index 0d244fd3ac0..dfe88e1c825 100644 --- a/source/visualization/ToolsSG/include/G4ToolsSGXtGLES.hh +++ b/source/visualization/ToolsSG/include/G4ToolsSGXtGLES.hh @@ -43,7 +43,6 @@ protected: public: G4VSceneHandler* CreateSceneHandler(const G4String& name = ""); G4VViewer* CreateViewer (G4VSceneHandler&, const G4String& name = ""); - G4bool IsUISessionCompatible () const; protected: void Initialise(); protected: diff --git a/source/visualization/ToolsSG/include/G4ToolsSGXtZB.hh b/source/visualization/ToolsSG/include/G4ToolsSGXtZB.hh new file mode 100644 index 00000000000..ef6309db3ab --- /dev/null +++ b/source/visualization/ToolsSG/include/G4ToolsSGXtZB.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. * +// ******************************************************************** +// +// Guy Barrand 14th April 2023 + +#ifndef G4TOOLSSGXTZB_HH +#define G4TOOLSSGXTZB_HH + +#include "G4VGraphicsSystem.hh" + +namespace toolx {namespace Xt {class session;}} + +class G4ToolsSGXtZB: public G4VGraphicsSystem { + using parent = G4VGraphicsSystem; +public: + G4ToolsSGXtZB(); + virtual ~G4ToolsSGXtZB(); +protected: + G4ToolsSGXtZB(const G4ToolsSGXtZB& a_from):parent(a_from){} + G4ToolsSGXtZB& operator=(const G4ToolsSGXtZB&) {return *this;} +public: + G4VSceneHandler* CreateSceneHandler(const G4String& name = ""); + G4VViewer* CreateViewer (G4VSceneHandler&, const G4String& name = ""); +protected: + void Initialise(); +protected: + toolx::Xt::session* fSGSession; +}; + +#endif diff --git a/source/visualization/ToolsSG/include/G4ToolsSGNode.hh b/source/visualization/ToolsSG/include/private/G4ToolsSGNode.hh similarity index 100% rename from source/visualization/ToolsSG/include/G4ToolsSGNode.hh rename to source/visualization/ToolsSG/include/private/G4ToolsSGNode.hh diff --git a/source/visualization/ToolsSG/include/G4ToolsSGOffscreenViewer.hh b/source/visualization/ToolsSG/include/private/G4ToolsSGOffscreenViewer.hh similarity index 100% rename from source/visualization/ToolsSG/include/G4ToolsSGOffscreenViewer.hh rename to source/visualization/ToolsSG/include/private/G4ToolsSGOffscreenViewer.hh diff --git a/source/visualization/ToolsSG/include/G4ToolsSGQtViewer.hh b/source/visualization/ToolsSG/include/private/G4ToolsSGQtViewer.hh similarity index 93% rename from source/visualization/ToolsSG/include/G4ToolsSGQtViewer.hh rename to source/visualization/ToolsSG/include/private/G4ToolsSGQtViewer.hh index a3d656b40ca..7b4d0c23fa3 100644 --- a/source/visualization/ToolsSG/include/G4ToolsSGQtViewer.hh +++ b/source/visualization/ToolsSG/include/private/G4ToolsSGQtViewer.hh @@ -87,15 +87,15 @@ public: {G4UImanager* ui = G4UImanager::GetUIpointer(); G4UIsession* session = ui->GetG4UIWindow(); - G4UIQt* uiQt = session? dynamic_cast(session) :nullptr; - if(uiQt) { + fUIQt = session? dynamic_cast(session) :nullptr; + if(fUIQt) { G4Qt* interactorManager = G4Qt::getInstance (); if (!interactorManager->IsExternalApp()) { fSGViewer->set_own_shell(false); - uiQt->AddTabWidget(fSGQWidget,QString(GetName())); + fUIQt->AddTabWidget(fSGQWidget,QString(GetName())); QObject::connect(fSGQWidget,SIGNAL(destroyed()),fDestroyCallback,SLOT(execute())); - QMainWindow* main_window = uiQt->GetMainWindow(); + QMainWindow* main_window = fUIQt->GetMainWindow(); if(main_window) { main_window->show(); interactorManager->FlushAndWaitExecution(); @@ -122,8 +122,13 @@ public: #endif parent::SetView(); } - + + virtual void UpdateGUISceneTree() { + if (fUIQt) fUIQt->UpdateSceneTree(fSceneTree); + } + protected: + G4UIQt* fUIQt = nullptr; QWidget* fSGQWidget; G4ToolsSGQtDestroyCallback* fDestroyCallback; }; diff --git a/source/visualization/ToolsSG/include/private/G4ToolsSGQtZBViewer.hh b/source/visualization/ToolsSG/include/private/G4ToolsSGQtZBViewer.hh new file mode 100644 index 00000000000..da705e89853 --- /dev/null +++ b/source/visualization/ToolsSG/include/private/G4ToolsSGQtZBViewer.hh @@ -0,0 +1,135 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Guy Barrand 13th April 2023 + +#ifndef G4TOOLSSGQTZBVIEWER_HH +#define G4TOOLSSGQTZBVIEWER_HH + +#include "G4ToolsSGViewer.hh" + +#include "G4Qt.hh" +#include "G4UIQt.hh" +#include "G4UImanager.hh" + +#include + +#include + +class G4ToolsSGQtZBDestroyCallback : public QObject { + Q_OBJECT +public: + G4ToolsSGQtZBDestroyCallback(G4VViewer* a_viewer):fViewer(a_viewer) {} + virtual ~G4ToolsSGQtZBDestroyCallback() {} +private: + G4ToolsSGQtZBDestroyCallback(const G4ToolsSGQtZBDestroyCallback&); + G4ToolsSGQtZBDestroyCallback& operator=(const G4ToolsSGQtZBDestroyCallback&); +public slots: + void execute(){ + delete fViewer; + } +private: + G4VViewer* fViewer; +}; + +class G4ToolsSGQtZBViewer : public G4ToolsSGViewer { + using parent = G4ToolsSGViewer; +public: + G4ToolsSGQtZBViewer(toolx::Qt::session& a_session,G4ToolsSGSceneHandler& a_scene_handler, const G4String& a_name) + :parent(a_session,a_scene_handler,a_name) + ,fSGQWidget(nullptr) + ,fDestroyCallback(0) + { + fDestroyCallback = new G4ToolsSGQtZBDestroyCallback(this); + } + virtual ~G4ToolsSGQtZBViewer() { + delete fDestroyCallback; //it will remove the below signal/slot connection. + } +protected: + G4ToolsSGQtZBViewer(const G4ToolsSGQtZBViewer& a_from):parent(a_from){} + G4ToolsSGQtZBViewer& operator=(const G4ToolsSGQtZBViewer&) {return *this;} +public: + virtual void Initialise() { + if(fSGQWidget) return; //done. + parent::Initialise(); + if(!fSGViewer) { + G4cerr << "G4ToolsSGQtZBViewer::Initialise: ERROR: G4ToolsSGQtZBViewer has no toolx::Qt::zb_viewer." << G4endl; + return; + } + fSGQWidget = fSGViewer->shell(); + if (!fSGQWidget) { + G4cerr << "G4ToolsSGQtZBViewer::Initialise: ERROR: toolx::Qt::zb_viewer has no QWidget shell." << G4endl; + return; + } + + {G4UImanager* ui = G4UImanager::GetUIpointer(); + G4UIsession* session = ui->GetG4UIWindow(); + fUIQt = session? dynamic_cast(session) :nullptr; + if(fUIQt) { + G4Qt* interactorManager = G4Qt::getInstance (); + if (!interactorManager->IsExternalApp()) { + fSGViewer->set_own_shell(false); + fUIQt->AddTabWidget(fSGQWidget,QString(GetName())); + QObject::connect(fSGQWidget,SIGNAL(destroyed()),fDestroyCallback,SLOT(execute())); + + QMainWindow* main_window = fUIQt->GetMainWindow(); + if(main_window) { + main_window->show(); + interactorManager->FlushAndWaitExecution(); + } + } + }} + + fSGViewer->enable_keyboard_focus(); + } + + virtual void SetView() { +#ifdef __APPLE__ + if(fSGQWidget && fSGViewer) { + if( (2*fSGQWidget->width() == int(fSGViewer->width())) && + (2*fSGQWidget->height() == int(fSGViewer->height())) ){ + // With Qt/Cocoa, the received size in + // tools::sg::glarea::resizeGL is twice the QWidget::[width(),height()]! + // In general it does not pose problem, except when rendering 2D texts. + // In order to have similar sizes than other platforms, we have to double + // their pixel heights. + fVP.SetGlobalMarkerScale(2); + } + } +#endif + parent::SetView(); + } + + virtual void UpdateGUISceneTree() { + if (fUIQt) fUIQt->UpdateSceneTree(fSceneTree); + } + +protected: + G4UIQt* fUIQt = nullptr; + QWidget* fSGQWidget; + G4ToolsSGQtZBDestroyCallback* fDestroyCallback; +}; + +#endif diff --git a/source/visualization/ToolsSG/include/G4ToolsSGSceneHandler.hh b/source/visualization/ToolsSG/include/private/G4ToolsSGSceneHandler.hh similarity index 100% rename from source/visualization/ToolsSG/include/G4ToolsSGSceneHandler.hh rename to source/visualization/ToolsSG/include/private/G4ToolsSGSceneHandler.hh diff --git a/source/visualization/ToolsSG/include/G4ToolsSGViewer.hh b/source/visualization/ToolsSG/include/private/G4ToolsSGViewer.hh similarity index 100% rename from source/visualization/ToolsSG/include/G4ToolsSGViewer.hh rename to source/visualization/ToolsSG/include/private/G4ToolsSGViewer.hh diff --git a/source/visualization/ToolsSG/sources.cmake b/source/visualization/ToolsSG/sources.cmake index a7da05e0eb3..7bf385b4681 100644 --- a/source/visualization/ToolsSG/sources.cmake +++ b/source/visualization/ToolsSG/sources.cmake @@ -2,10 +2,11 @@ # Define the Geant4 Module. geant4_add_module(G4ToolsSG PUBLIC_HEADERS + G4ToolsSGOffscreen.hh + PRIVATE_HEADERS G4ToolsSGNode.hh G4ToolsSGSceneHandler.hh G4ToolsSGViewer.hh - G4ToolsSGOffscreen.hh G4ToolsSGOffscreenViewer.hh SOURCES G4ToolsSGSceneHandler.cc @@ -13,13 +14,13 @@ geant4_add_module(G4ToolsSG geant4_module_link_libraries(G4ToolsSG PUBLIC - G4intercoms - G4modeling G4vis_management - G4tools PRIVATE G4graphics_reps - G4navigation) + G4intercoms + G4modeling + G4navigation + G4tools) # Freetype support if selected if(GEANT4_USE_FREETYPE) @@ -30,63 +31,111 @@ endif() # X11 sources if selected if(GEANT4_USE_TOOLSSG_X11_GLES) geant4_module_sources(G4ToolsSG PUBLIC_HEADERS G4ToolsSGX11GLES.hh SOURCES G4ToolsSGX11GLES.cc) + geant4_module_compile_definitions(G4ToolsSG PUBLIC G4VIS_USE_TOOLSSG_X11_GLES) +endif() + +if(GEANT4_USE_TOOLSSG_X11_ZB) + geant4_module_sources(G4ToolsSG PUBLIC_HEADERS G4ToolsSGX11ZB.hh SOURCES G4ToolsSGX11ZB.cc) + geant4_module_compile_definitions(G4ToolsSG PUBLIC G4VIS_USE_TOOLSSG_X11_ZB) endif() # Xt sources if selected if(GEANT4_USE_TOOLSSG_XT_GLES) geant4_module_sources(G4ToolsSG PUBLIC_HEADERS G4ToolsSGXtGLES.hh SOURCES G4ToolsSGXtGLES.cc) - geant4_module_compile_definitions(G4ToolsSG PRIVATE TOOLS_USE_GL_GL_H) - - # A minor hack around a likely issue in geant4_module_link_libraries - # When Qt is activated, G4UIcommon is a public dependency. CMake will deduplicate - # this (in favour of PUBLIC at final library link time, but geant4_module_link_libraries - # does not do this internally yet (To be checked). We then get validation - # warnings on duplicated deps. NB: Also demonstrates awkward vis system of more than - # one driver per library... - if(GEANT4_USE_TOOLSSG_QT_GLES) - geant4_module_link_libraries(G4ToolsSG PUBLIC G4UIcommon) - else() - geant4_module_link_libraries(G4ToolsSG PRIVATE G4UIcommon) - endif() + geant4_module_compile_definitions(G4ToolsSG + PUBLIC G4VIS_USE_TOOLSSG_XT_GLES + PRIVATE TOOLS_USE_GL_GL_H) + geant4_module_link_libraries(G4ToolsSG PRIVATE G4UIimplementation) +endif() + +if(GEANT4_USE_TOOLSSG_XT_ZB) + geant4_module_sources(G4ToolsSG PUBLIC_HEADERS G4ToolsSGXtZB.hh SOURCES G4ToolsSGXtZB.cc) + geant4_module_compile_definitions(G4ToolsSG PUBLIC G4VIS_USE_TOOLSSG_XT_ZB) + geant4_module_link_libraries(G4ToolsSG PRIVATE G4UIimplementation) endif() # X11/Xt links if selected if(GEANT4_USE_TOOLSSG_X11_GLES OR GEANT4_USE_TOOLSSG_XT_GLES) - geant4_module_link_libraries(G4ToolsSG PUBLIC X11::SM X11::ICE X11::X11 X11::Xext X11::Xmu) + geant4_module_link_libraries(G4ToolsSG PRIVATE X11::SM X11::ICE X11::X11 X11::Xext X11::Xmu) if(APPLE) - geant4_module_link_libraries(G4ToolsSG PUBLIC XQuartzGL::GL) + geant4_module_link_libraries(G4ToolsSG PRIVATE XQuartzGL::GL) else() - geant4_module_link_libraries(G4ToolsSG PUBLIC OpenGL::GL) + geant4_module_link_libraries(G4ToolsSG PRIVATE OpenGL::GL) endif() endif() +if(GEANT4_USE_TOOLSSG_X11_ZB OR GEANT4_USE_TOOLSSG_XT_ZB) + geant4_module_link_libraries(G4ToolsSG PRIVATE X11::SM X11::ICE X11::X11 X11::Xext X11::Xmu) +endif() + # Qt sources/links if selected if(GEANT4_USE_TOOLSSG_QT_GLES) geant4_module_sources(G4ToolsSG PUBLIC_HEADERS - G4ToolsSGQtViewer.hh G4ToolsSGQtGLES.hh + PRIVATE_HEADERS + G4ToolsSGQtViewer.hh SOURCES G4ToolsSGQtGLES.cc G4ToolsSGQtViewer.cc) + geant4_module_compile_definitions(G4ToolsSG PUBLIC G4VIS_USE_TOOLSSG_QT_GLES) + geant4_module_link_libraries(G4ToolsSG - PUBLIC + PRIVATE Qt${QT_VERSION_MAJOR}::OpenGL Qt${QT_VERSION_MAJOR}::Gui - Qt${QT_VERSION_MAJOR}::PrintSupport Qt${QT_VERSION_MAJOR}::Widgets OpenGL::GL - G4UIbasic - G4UIcommon) + G4UIimplementation) + + if(QT_VERSION_MAJOR GREATER 5) + geant4_module_link_libraries(G4ToolsSG PRIVATE Qt${QT_VERSION_MAJOR}::OpenGLWidgets) + endif() + + # Minor hack for MOC-ing. Qt's moc requires visibility of the private headers + # - Will not affect external consumers and should be minimal impact interanally + # as this is a leaf category + geant4_module_include_directories(G4ToolsSG + PRIVATE + $) +endif() + +if(GEANT4_USE_TOOLSSG_QT_ZB) + geant4_module_sources(G4ToolsSG + PUBLIC_HEADERS + G4ToolsSGQtZB.hh + PRIVATE_HEADERS + G4ToolsSGQtZBViewer.hh + SOURCES + G4ToolsSGQtZB.cc + G4ToolsSGQtZBViewer.cc) + + geant4_module_compile_definitions(G4ToolsSG PUBLIC G4VIS_USE_TOOLSSG_QT_ZB) + + geant4_module_link_libraries(G4ToolsSG + PRIVATE + Qt${QT_VERSION_MAJOR}::Gui + Qt${QT_VERSION_MAJOR}::Widgets + G4UIimplementation) + + # Minor hack for MOC-ing. Qt's moc requires visibility of the private headers + # - Will not affect external consumers and should be minimal impact interanally + # as this is a leaf category + geant4_module_include_directories(G4ToolsSG + PRIVATE + $) endif() # Windows sources if selected if(GEANT4_USE_TOOLSSG_WINDOWS_GLES) geant4_module_sources(G4ToolsSG PUBLIC_HEADERS G4ToolsSGWindowsGLES.hh SOURCES G4ToolsSGWindowsGLES.cc) - geant4_module_link_libraries(G4ToolsSG PUBLIC OpenGL::GL) + geant4_module_compile_definitions(G4ToolsSG PUBLIC G4VIS_USE_TOOLSSG_WINDOWS_GLES) + geant4_module_link_libraries(G4ToolsSG PRIVATE OpenGL::GL) endif() - - +if(GEANT4_USE_TOOLSSG_WINDOWS_ZB) + geant4_module_sources(G4ToolsSG PUBLIC_HEADERS G4ToolsSGWindowsZB.hh SOURCES G4ToolsSGWindowsZB.cc) + geant4_module_compile_definitions(G4ToolsSG PUBLIC G4VIS_USE_TOOLSSG_WINDOWS_ZB) +endif() diff --git a/source/visualization/ToolsSG/src/G4ToolsSGOffscreen.cc b/source/visualization/ToolsSG/src/G4ToolsSGOffscreen.cc index fd6867d90f5..87fb2e4bd33 100644 --- a/source/visualization/ToolsSG/src/G4ToolsSGOffscreen.cc +++ b/source/visualization/ToolsSG/src/G4ToolsSGOffscreen.cc @@ -83,10 +83,3 @@ G4VViewer* G4ToolsSGOffscreen::CreateViewer(G4VSceneHandler& a_scene,const G4Str } return pView; } - -G4bool G4ToolsSGOffscreen::IsUISessionCompatible () const -{ - //G4bool isCompatible = true; - //return isCompatible; - return true; -} diff --git a/source/visualization/ToolsSG/src/G4ToolsSGQtGLES.cc b/source/visualization/ToolsSG/src/G4ToolsSGQtGLES.cc index ab134d62682..dd67db17700 100644 --- a/source/visualization/ToolsSG/src/G4ToolsSGQtGLES.cc +++ b/source/visualization/ToolsSG/src/G4ToolsSGQtGLES.cc @@ -27,18 +27,11 @@ #include "G4ToolsSGQtGLES.hh" -#define G4TOOLSSG_QT_VIEWER_IN_TAB - -#ifdef G4TOOLSSG_QT_VIEWER_IN_TAB #include "G4ToolsSGQtViewer.hh" -#else -#include "G4ToolsSGViewer.hh" -#include -#endif -#include "G4UIbatch.hh" +#include "G4Qt.hh" -#include +#include "G4UIbatch.hh" G4ToolsSGQtGLES::G4ToolsSGQtGLES(): parent @@ -56,11 +49,13 @@ G4ToolsSGQtGLES::~G4ToolsSGQtGLES() { void G4ToolsSGQtGLES::Initialise() { if(fSGSession) return; //done. - int* argc = new int; - char** argv = nullptr; - std::vector args;args.push_back(""); - tools::new_argcv(args,*argc,argv); - fSGSession = new toolx::Qt::session(G4cout,*argc,argv); + G4Qt* interactorManager = G4Qt::getInstance(); + auto* _qapp = (QApplication*)interactorManager->GetMainInteractor(); + if(!_qapp) { + G4cerr << "G4ToolsSGQtGLES::Initialise : G4Qt::GetMainInteractor() returns null." << G4endl; + return; + } + fSGSession = new toolx::Qt::session(G4cout,_qapp); if(!fSGSession->is_valid()) { G4cerr << "G4ToolsSGQtGLES::Initialise : session::is_valid() failed." << G4endl; delete fSGSession; @@ -77,12 +72,7 @@ G4VSceneHandler* G4ToolsSGQtGLES::CreateSceneHandler(const G4String& a_name) { G4VViewer* G4ToolsSGQtGLES::CreateViewer(G4VSceneHandler& a_scene,const G4String& a_name) { if(!fSGSession) Initialise(); if(!fSGSession) return nullptr; - G4VViewer* pView = -#ifdef G4TOOLSSG_QT_VIEWER_IN_TAB - new G4ToolsSGQtViewer(*fSGSession,(G4ToolsSGSceneHandler&)a_scene,a_name); -#else - new G4ToolsSGViewer(*fSGSession,(G4ToolsSGSceneHandler&)a_scene,a_name); -#endif + G4VViewer* pView = new G4ToolsSGQtViewer(*fSGSession,(G4ToolsSGSceneHandler&)a_scene,a_name); if (pView) { if (pView->GetViewId() < 0) { G4cerr << "G4ToolsSGQtGLES::CreateViewer:" @@ -116,13 +106,10 @@ G4bool G4ToolsSGQtGLES::IsUISessionCompatible () const } // Qt windows are only appropriate in a Qt session. - if (session) { - // If non-zero, this is the originating non-batch session - // The user has instantiated a UI session... - if (dynamic_cast(session)) { - // ...and it's a G4UIQt session, which is OK. - isCompatible = true; - } + // This is the originating non-batch session... + if (dynamic_cast(session)) { + // ...and it's a G4UIQt session, which is OK. + isCompatible = true; } return isCompatible; } diff --git a/source/visualization/ToolsSG/src/G4ToolsSGQtZB.cc b/source/visualization/ToolsSG/src/G4ToolsSGQtZB.cc new file mode 100644 index 00000000000..19fc2dfb8aa --- /dev/null +++ b/source/visualization/ToolsSG/src/G4ToolsSGQtZB.cc @@ -0,0 +1,115 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Guy Barrand 13th April 2023 + +#include "G4ToolsSGQtZB.hh" + +#include "G4ToolsSGQtZBViewer.hh" + +#include "G4Qt.hh" + +#include "G4UIbatch.hh" + +G4ToolsSGQtZB::G4ToolsSGQtZB(): +parent +("TOOLSSG_QT_ZB", + "TSG_QT_ZB", + "TOOLSSG_QT_ZB is a graphics driver based on the g4tools tools/sg scene graph logic where\n\ + the rendering is done with the g4tools zbuffer and the windowing is done with Qt.", + parent::threeDInteractive) +,fSGSession(nullptr) +{} + +G4ToolsSGQtZB::~G4ToolsSGQtZB() { + delete fSGSession; +} + +void G4ToolsSGQtZB::Initialise() { + if(fSGSession) return; //done. + G4Qt* interactorManager = G4Qt::getInstance(); + QApplication* _qapp = (QApplication*)interactorManager->GetMainInteractor(); + if(!_qapp) { + G4cerr << "G4ToolsSGQtZB::Initialise : G4Qt::GetMainInteractor() returns null." << G4endl; + return; + } + fSGSession = new toolx::Qt::session(G4cout,_qapp); + if(!fSGSession->is_valid()) { + G4cerr << "G4ToolsSGQtZB::Initialise : session::is_valid() failed." << G4endl; + delete fSGSession; + fSGSession = nullptr; + return; + } +} + +G4VSceneHandler* G4ToolsSGQtZB::CreateSceneHandler(const G4String& a_name) { + G4VSceneHandler* pScene = new G4ToolsSGSceneHandler(*this, a_name); + return pScene; +} + +G4VViewer* G4ToolsSGQtZB::CreateViewer(G4VSceneHandler& a_scene,const G4String& a_name) { + if(!fSGSession) Initialise(); + if(!fSGSession) return nullptr; + G4VViewer* pView = new G4ToolsSGQtZBViewer(*fSGSession,(G4ToolsSGSceneHandler&)a_scene,a_name); + if (pView) { + if (pView->GetViewId() < 0) { + G4cerr << "G4ToolsSGQtZB::CreateViewer:" + << " ERROR flagged by negative view id in G4ToolsSGViewer creation." + << "\n Destroying view and returning null pointer." << G4endl; + delete pView; + pView = nullptr; + } + } + if (!pView) { + G4cerr << "G4ToolsSGQtZB::CreateViewer: ERROR: null pointer on new G4ToolsSGViewer." << G4endl; + return nullptr; + } + return pView; +} + +G4bool G4ToolsSGQtZB::IsUISessionCompatible () const +{ + G4bool isCompatible = false; + G4UImanager* ui = G4UImanager::GetUIpointer(); + G4UIsession* session = ui->GetSession(); + + // If session is a batch session, it may be: + // a) this is a batch job (the user has not instantiated any UI session); + // b) we are currently processing a UI command, in which case the UI + // manager creates a temporary batch session and to find out if there is + // a genuine UI session that the user has instantiated we must drill + // down through previous sessions to a possible non-batch session. + while (G4UIbatch* batch = dynamic_cast(session)) { + session = batch->GetPreviousSession(); + } + + // Qt windows are only appropriate in a Qt session. + // This is the originating non-batch session... + if (dynamic_cast(session)) { + // ...and it's a G4UIQt session, which is OK. + isCompatible = true; + } + return isCompatible; +} diff --git a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPLevel.hh b/source/visualization/ToolsSG/src/G4ToolsSGQtZBViewer.cc similarity index 92% rename from source/processes/hadronic/models/particle_hp/include/G4NeutronHPLevel.hh rename to source/visualization/ToolsSG/src/G4ToolsSGQtZBViewer.cc index e1d8691fce8..4b9c72d28fd 100644 --- a/source/processes/hadronic/models/particle_hp/include/G4NeutronHPLevel.hh +++ b/source/visualization/ToolsSG/src/G4ToolsSGQtZBViewer.cc @@ -23,10 +23,7 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // -#ifndef G4NeutronHPLevel_h -#define G4NeutronHPLevel_h -#include "G4ParticleHPLevel.hh" -using G4NeutronHPLevel = G4ParticleHPLevel; +#include "G4ToolsSGQtZBViewer.hh" +#include "moc_G4ToolsSGQtZBViewer.cpp" -#endif diff --git a/source/visualization/ToolsSG/src/G4ToolsSGWindowsGLES.cc b/source/visualization/ToolsSG/src/G4ToolsSGWindowsGLES.cc index 2acc129d0d1..4ac4984d596 100644 --- a/source/visualization/ToolsSG/src/G4ToolsSGWindowsGLES.cc +++ b/source/visualization/ToolsSG/src/G4ToolsSGWindowsGLES.cc @@ -84,31 +84,3 @@ G4VViewer* G4ToolsSGWindowsGLES::CreateViewer(G4VSceneHandler& a_scene,const G4S } return pView; } - -G4bool G4ToolsSGWindowsGLES::IsUISessionCompatible () const -{ - G4bool isCompatible = false; -// G4UImanager* ui = G4UImanager::GetUIpointer(); -// G4UIsession* session = ui->GetSession(); -// -// // If session is a batch session, it may be: -// // a) this is a batch job (the user has not instantiated any UI session); -// // b) we are currently processing a UI command, in which case the UI -// // manager creates a temporary batch session and to find out if there is -// // a genuine UI session that the user has instantiated we must drill -// // down through previous sessions to a possible non-batch session. -// while (G4UIbatch* batch = dynamic_cast(session)) { -// session = batch->GetPreviousSession(); -// } -// -// // Qt windows are only appropriate in a Qt session. -// if (session) { -// // If non-zero, this is the originating non-batch session -// // The user has instantiated a UI session... -// if (dynamic_cast(session)) { -// // ...and it's a G4UIQt session, which is OK. - isCompatible = true; -// } -// } - return isCompatible; -} diff --git a/source/visualization/ToolsSG/src/G4ToolsSGWindowsZB.cc b/source/visualization/ToolsSG/src/G4ToolsSGWindowsZB.cc new file mode 100644 index 00000000000..2e423ef69a5 --- /dev/null +++ b/source/visualization/ToolsSG/src/G4ToolsSGWindowsZB.cc @@ -0,0 +1,87 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Guy Barrand 18th April 2023 + + +#include "G4ToolsSGWindowsZB.hh" + +#include "G4ToolsSGViewer.hh" + +#include + +G4ToolsSGWindowsZB::G4ToolsSGWindowsZB(): +parent +("TOOLSSG_WINDOWS_ZB", + "TSG_WINDOWS_ZB", + "TOOLSSG_WINDOWS_ZB is a graphics driver based on the g4tools tools/sg scene graph logic where\n\ + the rendering is done with the g4tools zbuffer and the windowing is done with Microsoft Windows.", + parent::threeDInteractive) +,fSGSession(nullptr) +{} + +G4ToolsSGWindowsZB::~G4ToolsSGWindowsZB() { + delete fSGSession; +} + +void G4ToolsSGWindowsZB::Initialise() { + if(fSGSession) return; //done. + fSGSession = new toolx::Windows::session(G4cout); + if(!fSGSession->is_valid()) { + G4cerr << "G4ToolsSGWindowsZB::Initialise : session::is_valid() failed." << G4endl; + delete fSGSession; + fSGSession = nullptr; + return; + } +} + +G4VSceneHandler* G4ToolsSGWindowsZB::CreateSceneHandler(const G4String& a_name) { + G4VSceneHandler* pScene = new G4ToolsSGSceneHandler(*this, a_name); + return pScene; +} + +G4VViewer* G4ToolsSGWindowsZB::CreateViewer(G4VSceneHandler& a_scene,const G4String& a_name) { + if(!fSGSession) Initialise(); + if(!fSGSession) return nullptr; + G4VViewer* pView = + new G4ToolsSGViewer(*fSGSession,(G4ToolsSGSceneHandler&)a_scene,a_name); + if (pView) { + if (pView->GetViewId() < 0) { + G4cerr << + "G4ToolsSGWindowsZB::CreateViewer: ERROR flagged by negative" + " view id in G4ToolsSGViewer creation." + "\n Destroying view and returning null pointer." + << G4endl; + delete pView; + pView = nullptr; + } + } + if (!pView) { + G4cerr << + "G4ToolsSGWindowsZB::CreateViewer: ERROR: null pointer on new G4ToolsSGViewer." + << G4endl; + } + return pView; +} diff --git a/source/visualization/ToolsSG/src/G4ToolsSGX11GLES.cc b/source/visualization/ToolsSG/src/G4ToolsSGX11GLES.cc index 5332fb5dcb3..de32f36c8b8 100644 --- a/source/visualization/ToolsSG/src/G4ToolsSGX11GLES.cc +++ b/source/visualization/ToolsSG/src/G4ToolsSGX11GLES.cc @@ -85,31 +85,3 @@ G4VViewer* G4ToolsSGX11GLES::CreateViewer(G4VSceneHandler& a_scene,const G4Strin } return pView; } - -G4bool G4ToolsSGX11GLES::IsUISessionCompatible () const -{ - G4bool isCompatible = false; -// G4UImanager* ui = G4UImanager::GetUIpointer(); -// G4UIsession* session = ui->GetSession(); -// -// // If session is a batch session, it may be: -// // a) this is a batch job (the user has not instantiated any UI session); -// // b) we are currently processing a UI command, in which case the UI -// // manager creates a temporary batch session and to find out if there is -// // a genuine UI session that the user has instantiated we must drill -// // down through previous sessions to a possible non-batch session. -// while (G4UIbatch* batch = dynamic_cast(session)) { -// session = batch->GetPreviousSession(); -// } -// -// // Qt windows are only appropriate in a Qt session. -// if (session) { -// // If non-zero, this is the originating non-batch session -// // The user has instantiated a UI session... -// if (dynamic_cast(session)) { -// // ...and it's a G4UIQt session, which is OK. - isCompatible = true; -// } -// } - return isCompatible; -} diff --git a/source/visualization/ToolsSG/src/G4ToolsSGX11ZB.cc b/source/visualization/ToolsSG/src/G4ToolsSGX11ZB.cc new file mode 100644 index 00000000000..8d0a307833a --- /dev/null +++ b/source/visualization/ToolsSG/src/G4ToolsSGX11ZB.cc @@ -0,0 +1,87 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Guy Barrand 14th April 2023 + +#include "G4ToolsSGX11ZB.hh" + +#include "G4ToolsSGViewer.hh" + +#include + +G4ToolsSGX11ZB::G4ToolsSGX11ZB(): +parent +("TOOLSSG_X11_ZB", + "TSG_X11_ZB", + "TOOLSSG_X11_ZB is a graphics driver based on the g4tools tools/sg scene graph logic where\n\ + the rendering is done with the g4tools zbuffer and the windowing is done with X11.", + parent::threeDInteractive) +,fSGSession(nullptr) +{} + +G4ToolsSGX11ZB::~G4ToolsSGX11ZB() { + delete fSGSession; +} + +void G4ToolsSGX11ZB::Initialise() { + if(fSGSession) return; //done. + fSGSession = new toolx::X11::base_session(G4cout); + if(!fSGSession->is_valid()) { + G4cerr << "G4ToolsSGX11ZB::Initialise : base_session::is_valid() failed." << G4endl; + delete fSGSession; + fSGSession = nullptr; + return; + } +} + +G4VSceneHandler* G4ToolsSGX11ZB::CreateSceneHandler(const G4String& a_name) { + G4VSceneHandler* pScene = new G4ToolsSGSceneHandler(*this,a_name); + return pScene; +} + +G4VViewer* G4ToolsSGX11ZB::CreateViewer(G4VSceneHandler& a_scene,const G4String& a_name) { + if(!fSGSession) Initialise(); + if(!fSGSession) return nullptr; + G4VViewer* pView = + new G4ToolsSGViewer + (*fSGSession,(G4ToolsSGSceneHandler&)a_scene,a_name); + if (pView) { + if (pView->GetViewId() < 0) { + G4cerr << + "G4ToolsSGX11ZB::CreateViewer: ERROR flagged by negative" + " view id in G4ToolsSGViewer creation." + "\n Destroying view and returning null pointer." + << G4endl; + delete pView; + pView = nullptr; + } + } + if (!pView) { + G4cerr << + "G4ToolsSGX11ZB::CreateViewer: ERROR: null pointer on new G4ToolsSGViewer." + << G4endl; + } + return pView; +} diff --git a/source/visualization/ToolsSG/src/G4ToolsSGXtGLES.cc b/source/visualization/ToolsSG/src/G4ToolsSGXtGLES.cc index d5d04273d25..6c326ca69a3 100644 --- a/source/visualization/ToolsSG/src/G4ToolsSGXtGLES.cc +++ b/source/visualization/ToolsSG/src/G4ToolsSGXtGLES.cc @@ -33,15 +33,14 @@ #include "G4Xt.hh" class session : public toolx::Xt::session { - typedef toolx::Xt::session parent; + using parent = toolx::Xt::session; public: - session(std::ostream& a_out,int a_argc,char** a_argv) - :parent(a_out,a_argc,a_argv) + session(std::ostream& a_out) + :parent(a_out) { - if(m_app_widget) {::XtDestroyWidget(m_app_widget);m_app_widget = nullptr;} - if(m_app_context) {::XtDestroyApplicationContext(m_app_context);m_app_context = nullptr;} m_app_widget = (Widget)G4Xt::getInstance()->GetMainInteractor(); m_app_context = ::XtWidgetToApplicationContext(m_app_widget); + m_app_owner = false; } virtual ~session() {} protected: @@ -49,8 +48,6 @@ class session : public toolx::Xt::session { session& operator=(const session& a_from){parent::operator=(a_from);return *this;} }; -#include - G4ToolsSGXtGLES::G4ToolsSGXtGLES(): parent ("TOOLSSG_XT_GLES", @@ -67,10 +64,7 @@ G4ToolsSGXtGLES::~G4ToolsSGXtGLES() { void G4ToolsSGXtGLES::Initialise() { if(fSGSession) return; //done. - int* argc = new int; - char** argv = nullptr; - tools::new_argcv(std::vector(),*argc,argv); - fSGSession = new session(G4cout,*argc,argv); + fSGSession = new session(G4cout); if(!fSGSession->is_valid()) { G4cerr << "G4ToolsSGXtGLES::Initialise : session::is_valid() failed." << G4endl; delete fSGSession; @@ -107,31 +101,3 @@ G4VViewer* G4ToolsSGXtGLES::CreateViewer(G4VSceneHandler& a_scene,const G4String } return pView; } - -G4bool G4ToolsSGXtGLES::IsUISessionCompatible () const -{ - G4bool isCompatible = false; -// G4UImanager* ui = G4UImanager::GetUIpointer(); -// G4UIsession* session = ui->GetSession(); -// -// // If session is a batch session, it may be: -// // a) this is a batch job (the user has not instantiated any UI session); -// // b) we are currently processing a UI command, in which case the UI -// // manager creates a temporary batch session and to find out if there is -// // a genuine UI session that the user has instantiated we must drill -// // down through previous sessions to a possible non-batch session. -// while (G4UIbatch* batch = dynamic_cast(session)) { -// session = batch->GetPreviousSession(); -// } -// -// // Qt windows are only appropriate in a Qt session. -// if (session) { -// // If non-zero, this is the originating non-batch session -// // The user has instantiated a UI session... -// if (dynamic_cast(session)) { -// // ...and it's a G4UIQt session, which is OK. - isCompatible = true; -// } -// } - return isCompatible; -} diff --git a/source/visualization/ToolsSG/src/G4ToolsSGXtZB.cc b/source/visualization/ToolsSG/src/G4ToolsSGXtZB.cc new file mode 100644 index 00000000000..d93dbd13aa6 --- /dev/null +++ b/source/visualization/ToolsSG/src/G4ToolsSGXtZB.cc @@ -0,0 +1,103 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Guy Barrand 14th April 2023 + +#include "G4ToolsSGXtZB.hh" + +#include "G4ToolsSGViewer.hh" +#include "G4Xt.hh" + +#include + +class session : public toolx::Xt::session { + using parent = toolx::Xt::session; +public: + session(std::ostream& a_out) + :parent(a_out) + { + m_app_widget = (Widget)G4Xt::getInstance()->GetMainInteractor(); + m_app_context = ::XtWidgetToApplicationContext(m_app_widget); + m_app_owner = false; + } + virtual ~session() {} +protected: + session(const session& a_from):parent(a_from){} + session& operator=(const session& a_from){parent::operator=(a_from);return *this;} +}; + +G4ToolsSGXtZB::G4ToolsSGXtZB(): +parent +("TOOLSSG_XT_ZB", + "TSG_XT_ZB", + "TOOLSSG_XT_ZB is a graphics driver based on the g4tools tools/sg scene graph logic where\n\ + the rendering is done with the g4tools zbuffer and the windowing is done with the Xt toolkit.", + parent::threeDInteractive) +,fSGSession(nullptr) +{} + +G4ToolsSGXtZB::~G4ToolsSGXtZB() { + delete fSGSession; +} + +void G4ToolsSGXtZB::Initialise() { + if(fSGSession) return; //done. + fSGSession = new session(G4cout); + if(!fSGSession->is_valid()) { + G4cerr << "G4ToolsSGXtZB::Initialise : session::is_valid() failed." << G4endl; + delete fSGSession; + fSGSession = nullptr; + return; + } +} + +G4VSceneHandler* G4ToolsSGXtZB::CreateSceneHandler(const G4String& a_name) { + G4VSceneHandler* pScene = new G4ToolsSGSceneHandler(*this, a_name); + return pScene; +} + +G4VViewer* G4ToolsSGXtZB::CreateViewer(G4VSceneHandler& a_scene,const G4String& a_name) { + if(!fSGSession) Initialise(); + if(!fSGSession) return nullptr; + G4VViewer* pView = + new G4ToolsSGViewer(*fSGSession,(G4ToolsSGSceneHandler&)a_scene,a_name); + if (pView) { + if (pView->GetViewId() < 0) { + G4cerr << + "G4ToolsSGXtZB::CreateViewer: ERROR flagged by negative" + " view id in G4ToolsSGViewer creation." + "\n Destroying view and returning null pointer." + << G4endl; + delete pView; + pView = nullptr; + } + } + if (!pView) { + G4cerr << + "G4ToolsSGXtZB::CreateViewer: ERROR: null pointer on new G4ToolsSGViewer." + << G4endl; + } + return pView; +} diff --git a/source/visualization/Tree/GNUmakefile b/source/visualization/Tree/GNUmakefile deleted file mode 100644 index 8b4cc9c6b22..00000000000 --- a/source/visualization/Tree/GNUmakefile +++ /dev/null @@ -1,44 +0,0 @@ - -name := G4Tree - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -GLOBLIBS = libG4vis_management.lib libG4modeling.lib -GLOBLIBS += libG4run.lib libG4event.lib -GLOBLIBS += libG4tracking.lib libG4processes.lib libG4digits_hits.lib -GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk -include $(G4INSTALL)/config/G4VIS_BUILD.gmk -include $(G4INSTALL)/config/interactivity.gmk - -# NO need OGL, then reset OGLGLAGS -OGLFLAGS = -OGLLIBS = -# NO need QT, then reset QTGLAGS -QTFLAGS = -QTLIBS = -GLQTLIBS = - -CPPFLAGS += -I$(G4BASE)/visualization/management/include -CPPFLAGS += -I$(G4BASE)/visualization/modeling/include -CPPFLAGS += -I$(G4BASE)/global/management/include -CPPFLAGS += -I$(G4BASE)/global/HEPGeometry/include -CPPFLAGS += -I$(G4BASE)/graphics_reps/include -CPPFLAGS += -I$(G4BASE)/intercoms/include -CPPFLAGS += -I$(G4BASE)/geometry/management/include -CPPFLAGS += -I$(G4BASE)/geometry/navigation/include -CPPFLAGS += -I$(G4BASE)/geometry/volumes/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/CSG/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/specific/include -CPPFLAGS += -I$(G4BASE)/materials/include -CPPFLAGS += -I$(G4BASE)/digits_hits/hits/include -CPPFLAGS += -I$(G4BASE)/digits_hits/detector/include -CPPFLAGS += -I$(G4BASE)/track/include -CPPFLAGS += -I$(G4BASE)/particles/management/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/visualization/Tree/History b/source/visualization/Tree/History index e9b8d819d6b..03245baebce 100644 --- a/source/visualization/Tree/History +++ b/source/visualization/Tree/History @@ -6,6 +6,9 @@ be used as a substitute for writing good git commit messages! -------------------------------------------------------------------- +## 2023-02-06 Ben Morgan (vistree-V11-01-00) +- Isolate private headers and update dependencies + ## 2022-11-06 John Allison (vistree-V11-00-02) - Eliminate G4cerr and introduce G4warn. - `#define G4warn G4cout` diff --git a/source/visualization/Tree/include/G4ASCIITreeMessenger.hh b/source/visualization/Tree/include/private/G4ASCIITreeMessenger.hh similarity index 100% rename from source/visualization/Tree/include/G4ASCIITreeMessenger.hh rename to source/visualization/Tree/include/private/G4ASCIITreeMessenger.hh diff --git a/source/visualization/Tree/include/G4ASCIITreeSceneHandler.hh b/source/visualization/Tree/include/private/G4ASCIITreeSceneHandler.hh similarity index 100% rename from source/visualization/Tree/include/G4ASCIITreeSceneHandler.hh rename to source/visualization/Tree/include/private/G4ASCIITreeSceneHandler.hh diff --git a/source/visualization/Tree/include/G4ASCIITreeViewer.hh b/source/visualization/Tree/include/private/G4ASCIITreeViewer.hh similarity index 100% rename from source/visualization/Tree/include/G4ASCIITreeViewer.hh rename to source/visualization/Tree/include/private/G4ASCIITreeViewer.hh diff --git a/source/visualization/Tree/include/G4VTreeSceneHandler.hh b/source/visualization/Tree/include/private/G4VTreeSceneHandler.hh similarity index 100% rename from source/visualization/Tree/include/G4VTreeSceneHandler.hh rename to source/visualization/Tree/include/private/G4VTreeSceneHandler.hh diff --git a/source/visualization/Tree/include/G4VTreeSceneHandler.icc b/source/visualization/Tree/include/private/G4VTreeSceneHandler.icc similarity index 100% rename from source/visualization/Tree/include/G4VTreeSceneHandler.icc rename to source/visualization/Tree/include/private/G4VTreeSceneHandler.icc diff --git a/source/visualization/Tree/include/G4VTreeViewer.hh b/source/visualization/Tree/include/private/G4VTreeViewer.hh similarity index 100% rename from source/visualization/Tree/include/G4VTreeViewer.hh rename to source/visualization/Tree/include/private/G4VTreeViewer.hh diff --git a/source/visualization/Tree/sources.cmake b/source/visualization/Tree/sources.cmake index 7d9cd8c48bf..937a251db36 100644 --- a/source/visualization/Tree/sources.cmake +++ b/source/visualization/Tree/sources.cmake @@ -4,10 +4,11 @@ geant4_add_module(G4Tree PUBLIC_HEADERS G4ASCIITree.hh + G4VTree.hh + PRIVATE_HEADERS G4ASCIITreeMessenger.hh G4ASCIITreeSceneHandler.hh G4ASCIITreeViewer.hh - G4VTree.hh G4VTreeSceneHandler.hh G4VTreeSceneHandler.icc G4VTreeViewer.hh @@ -22,13 +23,13 @@ geant4_add_module(G4Tree geant4_module_link_libraries(G4Tree PUBLIC - G4modeling - G4intercoms G4vis_management PRIVATE G4graphics_reps G4geometrymng + G4intercoms G4materials + G4modeling G4navigation G4globman G4detector) diff --git a/source/visualization/VRML/GNUmakefile b/source/visualization/VRML/GNUmakefile deleted file mode 100644 index 967504c7969..00000000000 --- a/source/visualization/VRML/GNUmakefile +++ /dev/null @@ -1,40 +0,0 @@ - -# lib name -name := G4VRML - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -GLOBLIBS = libG4vis_management.lib libG4modeling.lib -GLOBLIBS += libG4run.lib libG4event.lib -GLOBLIBS += libG4tracking.lib libG4processes.lib libG4digits_hits.lib -GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk -include $(G4INSTALL)/config/G4VIS_BUILD.gmk -include $(G4INSTALL)/config/interactivity.gmk - -# NO need OGL, then reset OGLGLAGS -OGLFLAGS = -OGLLIBS = -# NO need QT, then reset QTGLAGS -QTFLAGS = -QTLIBS = -GLQTLIBS = - -CPPFLAGS += -I$(G4BASE)/visualization/management/include -CPPFLAGS += -I$(G4BASE)/visualization/modeling/include -CPPFLAGS += -I$(G4BASE)/global/management/include -CPPFLAGS += -I$(G4BASE)/global/HEPGeometry/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/CSG/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/specific/include -CPPFLAGS += -I$(G4BASE)/graphics_reps/include -CPPFLAGS += -I$(G4BASE)/intercoms/include -CPPFLAGS += -I$(G4BASE)/geometry/management/include -CPPFLAGS += -I$(G4BASE)/visualization/VRML/include -CPPFLAGS += -I$(G4BASE)/digits_hits/hits/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/visualization/VRML/History b/source/visualization/VRML/History index 8f3f17e3628..5f39d265d91 100644 --- a/source/visualization/VRML/History +++ b/source/visualization/VRML/History @@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-02-06 Ben Morgan (VRML-V11-01-00) +- Isolate private headers and update dependencies + ## 2022-11-25 Gabriele Cosmo (VRML-V11-00-03) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/visualization/VRML/include/G4VRML2FileSceneHandler.hh b/source/visualization/VRML/include/private/G4VRML2FileSceneHandler.hh similarity index 100% rename from source/visualization/VRML/include/G4VRML2FileSceneHandler.hh rename to source/visualization/VRML/include/private/G4VRML2FileSceneHandler.hh diff --git a/source/visualization/VRML/include/G4VRML2FileViewer.hh b/source/visualization/VRML/include/private/G4VRML2FileViewer.hh similarity index 100% rename from source/visualization/VRML/include/G4VRML2FileViewer.hh rename to source/visualization/VRML/include/private/G4VRML2FileViewer.hh diff --git a/source/visualization/VRML/sources.cmake b/source/visualization/VRML/sources.cmake index 133b46534cc..08b0c4c8302 100644 --- a/source/visualization/VRML/sources.cmake +++ b/source/visualization/VRML/sources.cmake @@ -4,6 +4,7 @@ geant4_add_module(G4VRML PUBLIC_HEADERS G4VRML2File.hh + PRIVATE_HEADERS G4VRML2FileSceneHandler.hh G4VRML2FileViewer.hh SOURCES @@ -14,10 +15,10 @@ geant4_add_module(G4VRML geant4_module_link_libraries(G4VRML PUBLIC - G4geometrymng G4vis_management - G4globman PRIVATE G4csg + G4geometrymng + G4globman G4graphics_reps G4modeling) diff --git a/source/visualization/Vtk/History b/source/visualization/Vtk/History index 6c868ef2b5b..473d32dbb89 100644 --- a/source/visualization/Vtk/History +++ b/source/visualization/Vtk/History @@ -6,6 +6,43 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-05-23 Gabriele Cosmo (visVtk-V11-01-09) +- Fixed compilation warnings for implicit type conversions on macOS/XCode>=14.1. + +## 2023-04-07 Stewart Boogert (visVtk-v11-01-08) +- Add vtkUnstructuredGridPipeline for special mesh rendering + +## 2023-03-27 Ben Morgan (visVtk-V11-01-07) +- Apply clang-tidy and clang-format fixes. +- Remove dead code and no-ops. + +## 2023-03-23 Ben Morgan (visVtk-V11-01-06) +- Export public compile definitions to indicate availablity of specific drivers. Moves to + "use on link" model. + +## 2023-03-22 Stewart Boogert (visVtk-V11-01-05) +- Separate pipelines into source and include files +- Class inheritance for pipelines G4VVtkPipeline and ability to chain pipelines +- Separate interactive cutters, clippers. +- 2D transparent image overlay +- Improved geant4 commands (/vis/vtk/..) + +## 2023-02-14 Stewart Boogert (visVtk-V11-01-04) +- Removed unused variables in preparation for special rendering pipeline + +## 2023-02-13 Stewart Boogert (visVtk-V11-01-03) +- Refactor of VTK viewer with pipelines, geometry stores, improved 2D rendering, + streamlined VTK cmake components. + +## 2023-02-06 Ben Morgan (visVtk-V11-01-02) +- Isolate private headers and update dependencies + +## 2023-02-03 Igor Semeniouk (visVtk-V11-01-01) +- G4VtkSceneHandler.cc : text justification to given coordinate + +## 2023-01-30 Ben Morgan (visVtk-V11-01-00) +- Link to new G4UIcore/UIimplementation modules in place of former G4UIbasic/UIcommon + ## 2022-11-25 Gabriele Cosmo (visVtk-V11-00-07) - Fixed compilation warning for implicit type conversions on macOS/XCode 14.1. diff --git a/source/visualization/Vtk/include/G4Vtk.hh b/source/visualization/Vtk/include/G4Vtk.hh index 2d1a82168b2..66e9b99e1ee 100644 --- a/source/visualization/Vtk/include/G4Vtk.hh +++ b/source/visualization/Vtk/include/G4Vtk.hh @@ -25,7 +25,7 @@ // // // -// +// // John Allison 5th April 2001 // A template for a simplest possible graphics driver. //?? Lines beginning like this require specialisation for your driver. @@ -35,12 +35,13 @@ #include "G4VGraphicsSystem.hh" -class G4Vtk: public G4VGraphicsSystem { -public: - G4Vtk(); - virtual ~G4Vtk(); - G4VSceneHandler* CreateSceneHandler(const G4String& name = ""); - G4VViewer* CreateViewer (G4VSceneHandler&, const G4String& name = ""); +class G4Vtk : public G4VGraphicsSystem +{ + public: + G4Vtk(); + ~G4Vtk() override = default; + G4VSceneHandler* CreateSceneHandler(const G4String& name = "") override; + G4VViewer* CreateViewer(G4VSceneHandler&, const G4String& name = "") override; }; #endif diff --git a/source/visualization/Vtk/include/G4VtkQt.hh b/source/visualization/Vtk/include/G4VtkQt.hh index 8909054c6bf..fe16aaf84a6 100644 --- a/source/visualization/Vtk/include/G4VtkQt.hh +++ b/source/visualization/Vtk/include/G4VtkQt.hh @@ -23,19 +23,19 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** - #ifndef G4VTKQT_HH #define G4VTKQT_HH #include "G4VGraphicsSystem.hh" -class G4VtkQt: public G4VGraphicsSystem { -public: - G4VtkQt(); - virtual ~G4VtkQt(); - G4VSceneHandler* CreateSceneHandler(const G4String& name = ""); - G4VViewer* CreateViewer (G4VSceneHandler&, const G4String& name = ""); - G4bool IsUISessionCompatible () const; +class G4VtkQt : public G4VGraphicsSystem +{ + public: + G4VtkQt(); + ~G4VtkQt() override = default; + G4VSceneHandler* CreateSceneHandler(const G4String& name = "") override; + G4VViewer* CreateViewer(G4VSceneHandler&, const G4String& name = "") override; + G4bool IsUISessionCompatible() const override; }; #endif diff --git a/source/visualization/Vtk/include/G4VtkSceneHandler.hh b/source/visualization/Vtk/include/G4VtkSceneHandler.hh deleted file mode 100644 index 7cc9e84c47e..00000000000 --- a/source/visualization/Vtk/include/G4VtkSceneHandler.hh +++ /dev/null @@ -1,171 +0,0 @@ -// -// ******************************************************************** -// * 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. * -// ******************************************************************** -// -// -// -// -// John Allison 5th April 2001 -// A template for a simplest possible graphics driver. -//?? Lines or sections marked like this require specialisation for your driver. - -#ifndef G4VTKSCENEHANDLER_HH -#define G4VTKSCENEHANDLER_HH - - -#include "G4VSceneHandler.hh" - -#include -#include - -#include "G4VtkViewer.hh" -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wextra-semi" -#include "vtkSmartPointer.h" -#include "vtkPolyData.h" -#include "vtkLine.h" -#include "vtkNamedColors.h" -#include "vtkProperty.h" -#include "vtkTextProperty.h" -#include "vtkPolyDataMapper.h" -#include "vtkActor.h" -#include "vtkFollower.h" -#include "vtkTextActor.h" -#include "vtkBillboardTextActor3D.h" -#include "vtkRegularPolygonSource.h" -#include "vtkSphereSource.h" -#include "vtkFeatureEdges.h" -#include "vtkCleanPolyData.h" -#include "vtkPolyDataNormals.h" -#include "vtkGlyph2D.h" -#include "vtkGlyph3D.h" -#include "vtkVertexGlyphFilter.h" -#include "vtkMatrix4x4.h" -#include "vtkDoubleArray.h" -#include "vtkPointData.h" -#include "vtkTriangleFilter.h" -#include "vtkTensorGlyph.h" -#include "vtkTensorGlyphColor.h" -#include "vtkScalarsToColors.h" -#include "vtkImageData.h" -#include "vtkVolume.h" -#include "vtkOpenGLGPUVolumeRayCastMapper.h" -#pragma GCC diagnostic pop - -class G4VtkSceneHandler: public G4VSceneHandler { - friend class G4VtkViewer; - -public: - G4VtkSceneHandler(G4VGraphicsSystem& system, const G4String& name); - virtual ~G4VtkSceneHandler() = default; - - //////////////////////////////////////////////////////////////// - // Required implementation of pure virtual functions... - - void AddPrimitive(const G4Polyline&); - void AddPrimitive(const G4Text&); - void AddPrimitive(const G4Circle&); - void AddPrimitive(const G4Square&); - void AddPrimitive(const G4Polyhedron&); - void AddPrimitiveTensorGlyph(const G4Polyhedron&); - void AddPrimitiveBakedTransform(const G4Polyhedron&); - - // Further optional AddPrimitive methods. Explicitly invoke base - // class methods if not otherwise defined to avoid warnings about - // hiding of base class methods. - void AddPrimitive(const G4Polymarker& polymarker) - { -#ifdef G4VTKDEBUG - G4cout << "=================================" << G4endl; - G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Polymarker& polymarker) called." << G4endl; -#endif - G4VSceneHandler::AddPrimitive (polymarker); - } - /* - void AddPrimitive(const G4Scale& scale) - { -#ifdef G4VTKDEBUG - G4cout << "=================================" << G4endl; - G4cout << "G4VtkSceneHandler::AddScale(const G4Scale& scale) called." << -G4endl; #endif G4VSceneHandler::AddPrimitive(scale); - } - */ - - void AddSolid(const G4Box& box); - void AddCompound(const G4Mesh& mesh); - - void Modified(); - void Clear(); - - protected: - static G4int fSceneIdCount; // Counter for Vtk scene handlers. - - // maps for polylines - std::map polylineVisAttributesMap; - std::map> polylineDataMap; - std::map> polylineLineMap; - std::map> polylinePolyDataMap; - std::map> polylinePolyDataMapperMap; - std::map> polylinePolyDataActorMap; - - // maps for circles - std::map circleVisAttributesMap; - std::map> circleDataMap; - std::map> circlePolyDataMap; - std::map> circleFilterMap; - std::map> circlePolyDataMapperMap; - std::map> circlePolyDataActorMap; - - // maps for squares - std::map squareVisAttributesMap; - std::map> squareDataMap; - std::map> squarePolyDataMap; - std::map> squareFilterMap; - std::map> squarePolyDataMapperMap; - std::map> squarePolyDataActorMap; - - // map for polyhedra - std::map polyhedronVisAttributesMap; - std::map> polyhedronDataMap; - std::map> polyhedronPolyMap; - std::map> polyhedronPolyDataMap; - std::map polyhedronPolyDataCountMap; - - // map for polyhedra instances - std::map> instancePositionMap; - std::map> instanceRotationMap; - std::map> instanceColoursMap; - std::map> instancePolyDataMap; - std::map> instanceTensorGlyphMap; - std::map> instanceActorMap; - - -private: -#ifdef G4VTKDEBUG - void PrintThings(); -#endif - -}; - -#endif diff --git a/source/visualization/Vtk/include/G4VtkViewer.hh b/source/visualization/Vtk/include/G4VtkViewer.hh deleted file mode 100644 index b8290fa5322..00000000000 --- a/source/visualization/Vtk/include/G4VtkViewer.hh +++ /dev/null @@ -1,194 +0,0 @@ -// -// ******************************************************************** -// * 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. * -// ******************************************************************** -// -// -// -// -// John Allison 5th April 2001 -// A template for a simplest possible graphics driver. -//?? Lines or sections marked like this require specialisation for your driver. - -#ifndef G4VTKVIEWER_HH -#define G4VTKVIEWER_HH - -// #define G4VTKDEBUG // Comment this out to suppress debug code. - -#include "G4VViewer.hh" - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wextra-semi" -#include "vtkObject.h" -#include "vtkAutoInit.h" -#include "vtkCamera.h" -#include "vtkLight.h" -#include "vtkRenderer.h" -#include "vtkRenderWindow.h" -#include "vtkRenderWindowInteractor.h" -#include "vtkInteractorStyleTrackballCamera.h" -#include "vtkInteractorStyleTerrain.h" -#include "vtkTextActor.h" -#pragma GCC diagnostic pop - -VTK_MODULE_INIT(vtkRenderingOpenGL2) -VTK_MODULE_INIT(vtkInteractionStyle); -VTK_MODULE_INIT(vtkRenderingFreeType) - -class vtkGeant4Callback : public vtkCommand -{ -public: - static vtkGeant4Callback* New() {return new vtkGeant4Callback;} - - vtkGeant4Callback() { fVP = nullptr; } - void SetGeant4ViewParameters(G4ViewParameters *VP) { fVP = VP;} - void SetVtkInitialValues(G4double parallelScaleIn, G4double cameraDistanceIn) - { - parallelScale = parallelScaleIn; - cameraDistance = cameraDistanceIn; - } - virtual void Execute(vtkObject *caller, unsigned long, void*) - { - vtkRenderer *ren = static_cast(caller); - vtkCamera *cam = ren->GetActiveCamera(); - //G4cout << cam->GetFocalPoint()[0] << " " << cam->GetFocalPoint()[1] << " " << cam->GetFocalPoint()[2] << G4endl; - // - // G4cout << cam->GetPosition()[0] << " " << cam->GetPosition()[1] << " " << cam->GetPosition()[2] << G4endl; - - auto cp = cam->GetPosition(); - auto fp = cam->GetFocalPoint(); - auto ud = cam->GetViewUp(); - - fVP->SetCurrentTargetPoint(G4Point3D(fp[0],fp[1],fp[2])); - fVP->SetViewpointDirection((G4Point3D(cp[0],cp[1],cp[2]) - - G4Point3D(fp[0],fp[1],fp[2])).unit()); - fVP->SetUpVector(G4Vector3D(ud[0],ud[1], ud[2])); - - if(cam->GetParallelProjection()) { - fVP->SetZoomFactor(parallelScale/cam->GetParallelScale()); - } - else { - auto cd = std::sqrt(std::pow(cp[0]-fp[0],2) + - std::pow(cp[1]-cp[1],2) + - std::pow(cp[2]-cp[2],2)); - fVP->SetZoomFactor(cameraDistance/cd); - } - } - -protected: - G4ViewParameters *fVP; - G4double parallelScale; - G4double cameraDistance; -}; - -class vtkInfoCallback : public vtkCommand -{ -public: - static vtkInfoCallback *New() { return new vtkInfoCallback; } - - vtkInfoCallback() { - t1 = std::chrono::steady_clock::now(); - t2 = std::chrono::steady_clock::now(); - } - void SetTextActor(vtkTextActor *txt) { this->TextActor = txt; } - - virtual void Execute(vtkObject *caller, unsigned long, void*) - { - vtkRenderer *ren = static_cast(caller); - int nActors = ren->GetActors()->GetNumberOfItems(); - vtkCamera *cam = ren->GetActiveCamera(); - if(!cam) return; - - double *pos = cam->GetPosition(); - double *foc = cam->GetFocalPoint(); - double viewAngle = cam->GetViewAngle(); - double distance = cam->GetDistance(); - double parallelScale = cam->GetParallelScale(); - - if(!pos) return; - - // Get current time - t2 = std::chrono::steady_clock::now(); - - // Frame rate calculation - std::chrono::duration tdiff = t2-t1; - t1 = t2; - float fps = 1.0/tdiff.count(); - - // String for display - snprintf(this->TextBuff,sizeof this->TextBuff, - "camera position : %.1f %.1f %.1f \n" - "camera focal point : %.1f %.1f %.1f \n" - "view angle : %.1f\n" - "distance : %.1f\n" - "parallel scale : %.1f\n" - "number actors : %i\n" - "fps : %.1f",pos[0], pos[1], pos[2], foc[0], foc[1], foc[2], viewAngle, distance, parallelScale, nActors, fps); - if(this->TextActor) { - this->TextActor->SetInput(this->TextBuff); - } - } -protected: - vtkTextActor *TextActor; - char TextBuff[256]; - std::chrono::time_point t1; - std::chrono::time_point t2; -}; - -class G4VtkViewer: public G4VViewer { - public: - G4VtkViewer(G4VSceneHandler&, const G4String& name); - void Initialise(); - virtual ~G4VtkViewer(); - - void SetView(); - void ClearView(); - void DrawView(); - void ShowView(); - void FinishView(); - - void DrawViewHUD(); - void DrawShadows(); - - void ExportScreenShot(G4String, G4String); - void ExportOBJScene(G4String); - void ExportVRMLScene(G4String ); - void ExportVTPScene(G4String ); - - void ExportView(){}; - void SetGeant4View(){}; - - vtkNew infoTextActor; - vtkNew infoCallback; - vtkNew geant4Callback; - vtkSmartPointer light; - vtkNew camera; - vtkNew renderer; - vtkRenderWindow* _renderWindow; - vtkRenderWindowInteractor* renderWindowInteractor; - - private: - G4bool firstSetView = true; -}; - -#endif diff --git a/source/visualization/Vtk/include/private/G4VVtkPipeline.hh b/source/visualization/Vtk/include/private/G4VVtkPipeline.hh new file mode 100644 index 00000000000..d9f86f342e7 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VVtkPipeline.hh @@ -0,0 +1,192 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#ifndef G4VVTKPIPELINE_HH +#define G4VVTKPIPELINE_HH + +#include "G4Polyhedron.hh" +#include "G4String.hh" +#include "G4Types.hh" +#include "G4VisAttributes.hh" +#include "G4VtkVisContext.hh" + +#include "vtkRenderer.h" + +namespace std +{ +inline void hash_combine(std::size_t) {} + +template +inline void hash_combine(std::size_t& seed, const T& v, Rest... rest) +{ + std::hash hasher; + seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2); + std::hash_combine(seed, rest...); +} + +template<> +struct hash +{ + std::size_t operator()(const G4String& string) const + { + using std::hash; + using std::size_t; + + std::size_t h = 0; + + for (char const& c : string) { + std::hash_combine(h, c); + } + + return h; + } +}; + +template<> +struct hash +{ + std::size_t operator()(const G4VisAttributes& va) const + { + using std::hash; + using std::size_t; + + std::size_t h = 0; + + std::hash_combine(h, va.IsVisible()); + std::hash_combine(h, va.IsDaughtersInvisible()); + std::hash_combine(h, va.GetColour().GetRed()); + std::hash_combine(h, va.GetColour().GetGreen()); + std::hash_combine(h, va.GetColour().GetBlue()); + std::hash_combine(h, va.GetColour().GetAlpha()); + std::hash_combine(h, static_cast(va.GetLineStyle())); + + return h; + } +}; + +template<> +struct hash +{ + std::size_t operator()(const G4Polyhedron& ph) const + { + using std::hash; + using std::size_t; + + G4bool notLastFace; + G4Point3D vertex[4]; + G4int edgeFlag[4]; + G4Normal3D normals[4]; + G4int nEdges; + + std::size_t h = 0; + + do { + notLastFace = ph.GetNextFacet(nEdges, vertex, edgeFlag, normals); + + for (int i = 0; i < nEdges; i++) { + std::size_t hx = std::hash()(vertex[i].x()); + std::size_t hy = std::hash()(vertex[i].y()); + std::size_t hz = std::hash()(vertex[i].z()); + std::hash_combine(h, hx); + std::hash_combine(h, hy); + std::hash_combine(h, hz); + } + } while (notLastFace); + + return h; + } +}; +} // namespace std + +class G4VVtkPipeline +{ + public: + G4VVtkPipeline() : name("none"), type("G4VVtkPipeline"), disableParent(false), renderer(nullptr) + {} + G4VVtkPipeline(G4String nameIn, G4String typeIn, const G4VtkVisContext& vcIn, + G4bool disableParentIn = false, + vtkSmartPointer rendererIn = nullptr) + : name(nameIn), type(typeIn), disableParent(disableParentIn), renderer(rendererIn), vc(vcIn) + {} + virtual ~G4VVtkPipeline() + { + for (auto i : childPipelines) + delete i; + } + + virtual void Enable() = 0; + virtual void Disable() = 0; + + virtual void Print() + { + G4cout << "children ("; + for (auto i : childPipelines) + G4cout << i->GetName() << "-" << i->GetTypeName() << ","; + G4cout << ")" << G4endl; + }; + virtual void Modified() + { + for (auto i : childPipelines) + i->Modified(); + } + virtual void Clear() + { + for (auto i : childPipelines) + i->Clear(); + } + + void SetDisableParent(G4bool disableParentIn) { disableParent = disableParentIn; } + bool GetDisableParent() { return disableParent; } + + void SetName(G4String nameIn) { name = nameIn; } + const G4String GetName() { return name; } + + void SetTypeName(G4String typeNameIn) { type = typeNameIn; } + G4String GetTypeName() { return type; } + + G4VtkVisContext& GetVtkVisContext() { return vc; } + + void AddChildPipeline(G4VVtkPipeline* child) + { + childPipelines.push_back(child); + if (child->GetDisableParent()) { + Disable(); + } + } + G4VVtkPipeline* GetChildPipeline(G4int iPipeline) { return childPipelines[iPipeline]; } + G4int GetNumberOfChildPipelines() { return (G4int)childPipelines.size(); } + std::vector GetChildPipelines() { return childPipelines; } + void ClearChildPipeline() { childPipelines.clear(); } + + protected: + G4String name; + G4String type; + G4bool disableParent; + std::vector childPipelines; + vtkSmartPointer renderer; + G4VtkVisContext vc; +}; + +#endif // G4VVTKPIPELINE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkClipClosedSurfacePipeline.hh b/source/visualization/Vtk/include/private/G4VtkClipClosedSurfacePipeline.hh new file mode 100644 index 00000000000..14a4441f23e --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkClipClosedSurfacePipeline.hh @@ -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. * +// ******************************************************************** + +#ifndef G4VTKCLIPPERPIPELINE_HH +#define G4VTKCLIPPERPIPELINE_HH + +#include "G4VVtkPipeline.hh" + +#include "vtkSmartPointer.h" + +class G4VtkVisContext; + +class vtkPlane; +class vtkPolyDataMapper; +class vtkClipClosedSurface; +class vtkPolyDataAlgorithm; +class vtkActor; + +class G4VtkClipClosedSurfacePipeline : public G4VVtkPipeline +{ + public: + G4VtkClipClosedSurfacePipeline(G4String name, const G4VtkVisContext& vc, + vtkSmartPointer filter, + G4bool useVcColour = false); + ~G4VtkClipClosedSurfacePipeline() override = default; + + void SetPlane(const G4Plane3D& plane); + void SetPlane(G4double x, G4double y, G4double z, G4double nx, G4double ny, G4double nz); + void TransformPlane(G4double dx, G4double dy, G4double dz, G4double r00, G4double r01, + G4double r02, G4double r10, G4double r11, G4double r12, G4double r20, + G4double r21, G4double r22); + + void Enable() override; + void Disable() override; + + void Print() override { G4VVtkPipeline::Print(); }; + void Modified() override { G4VVtkPipeline::Modified(); }; + void Clear() override + { + if (renderer != nullptr) { + renderer->RemoveActor(actor); + } + G4VVtkPipeline::Clear(); + }; + + vtkSmartPointer GetActor() { return actor; } + + private: + vtkSmartPointer plane; + vtkSmartPointer clipper; + vtkSmartPointer mapper; + vtkSmartPointer actor; +}; + +#endif // G4VTKCLIPPERPIPELINE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkClipOpenPipeline.hh b/source/visualization/Vtk/include/private/G4VtkClipOpenPipeline.hh new file mode 100644 index 00000000000..bffc3f7f447 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkClipOpenPipeline.hh @@ -0,0 +1,76 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#ifndef G4VTKCLIPOPENPIPELINE_HH +#define G4VTKCLIPOPENPIPELINE_HH + +#include "G4VVtkPipeline.hh" + +#include "vtkSmartPointer.h" + +class G4VtkVisContext; + +class vtkPlane; +class vtkClipPolyData; +class vtkPolyDataMapper; +class vtkPolyDataAlgorithm; +class vtkActor; + +class G4VtkClipOpenPipeline : public G4VVtkPipeline +{ + public: + G4VtkClipOpenPipeline(G4String name, const G4VtkVisContext& vc, + vtkSmartPointer filter, G4bool useVcColour = false); + ~G4VtkClipOpenPipeline() override = default; + + void SetPlane(G4Plane3D& plane); + void SetPlane(G4double x, G4double y, G4double z, G4double nx, G4double ny, G4double nz); + void TransformPlane(G4double dx, G4double dy, G4double dz, G4double r00, G4double r01, + G4double r02, G4double r10, G4double r11, G4double r12, G4double r20, + G4double r21, G4double r22); + + void Enable() override; + void Disable() override; + + void Print() override { G4VVtkPipeline::Print(); } + void Modified() override { G4VVtkPipeline::Modified(); } + void Clear() override + { + if (renderer != nullptr) { + renderer->RemoveActor(actor); + } + G4VVtkPipeline::Clear(); + } + + vtkSmartPointer GetActor() { return actor; } + + private: + vtkSmartPointer plane; + vtkSmartPointer clipper; + vtkSmartPointer mapper; + vtkSmartPointer actor; +}; + +#endif // G4VTKCLIPOPENPIPELINE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkClipperClosedPipeline.hh b/source/visualization/Vtk/include/private/G4VtkClipperClosedPipeline.hh new file mode 100644 index 00000000000..8800445d179 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkClipperClosedPipeline.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. * +// ******************************************************************** + +#ifndef G4VTKCLIPPERCLOSEDPIPELINE_HH +#define G4VTKCLIPPERCLOSEDPIPELINE_HH + +#include "G4VtkClipClosedSurfacePipeline.hh" + +class vtkAppendPolyData; + +class G4VtkClipperClosedPipeline : public G4VtkPipeline +{ + public: + G4VtkClipperClosedPipeline(vtkSmartPointer filter); + ~G4VtkClipperClosedPipeline() override = default; + + void Print(){}; + void Modified(); + void Clear(){}; + + private: + vtkSmartPointer plane; + vtkSmartPointer clipper; + vtkSmartPointer appendFilter; + vtkSmartPointer mapper; +}; + +#endif // G4VTKCLIPPERCLOSEDPIPELINE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkCutterPipeline.hh b/source/visualization/Vtk/include/private/G4VtkCutterPipeline.hh new file mode 100644 index 00000000000..9ba7a4bc78d --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkCutterPipeline.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. * +// ******************************************************************** + +#ifndef G4VTKCUTTERPIPELINE_HH +#define G4VTKCUTTERPIPELINE_HH + +#include "G4VtkPolydataPipeline.hh" + +class G4String; +class G4VtkVisContext; + +class vtkPlane; +class vtkCutter; +class vtkPolyDataMapper; +class vtkActor; + +class G4VtkCutterPipeline : public G4VVtkPipeline +{ + public: + G4VtkCutterPipeline(G4String name, const G4VtkVisContext& vc, + vtkSmartPointer filter, G4bool useVcColour = false); + ~G4VtkCutterPipeline() override = default; + + void SetPlane(const G4Plane3D& plane); + void SetPlane(G4double x, G4double y, G4double z, G4double nx, G4double ny, G4double nz); + void TransformPlane(G4double dx, G4double dy, G4double dz, G4double r00, G4double r01, + G4double r02, G4double r10, G4double r11, G4double r12, G4double r20, + G4double r21, G4double r22); + + void Enable() override; + void Disable() override; + + void Print() override { G4VVtkPipeline::Print(); } + void Modified() override { G4VVtkPipeline::Modified(); } + void Clear() override + { + if (renderer != nullptr) { + renderer->RemoveActor(actor); + } + G4VVtkPipeline::Clear(); + } + + vtkSmartPointer GetActor() { return actor; } + + private: + vtkSmartPointer plane; + vtkSmartPointer cutter; + vtkSmartPointer mapper; + vtkSmartPointer actor; +}; + +#endif diff --git a/source/visualization/Vtk/include/private/G4VtkImagePipeline.hh b/source/visualization/Vtk/include/private/G4VtkImagePipeline.hh new file mode 100644 index 00000000000..a4c2ed3888d --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkImagePipeline.hh @@ -0,0 +1,83 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#ifndef G4VTKIMAGEPIPELINE_HH +#define G4VTKIMAGEPIPELINE_HH + +#include "G4Transform3D.hh" +#include "G4Types.hh" +#include "G4VVtkPipeline.hh" + +#include "vtkImageData.h" +#include "vtkImageReader2.h" +#include "vtkImageReader2Factory.h" +#include "vtkSmartPointer.h" + +#include + +class vtkImageAlgorithm; +class vtkImageActor; + +class G4String; +class G4VtkVisContext; + +class G4VtkImagePipeline : G4VVtkPipeline +{ + public: + G4VtkImagePipeline(const G4String& name, const G4VtkVisContext& vc); + ~G4VtkImagePipeline() override = default; + void AddFilter(vtkSmartPointer f) { filters.push_back(f); } + vtkSmartPointer GetFilter(G4int iFilter) { return filters[iFilter]; } + vtkSmartPointer GetFinalFilter() { return *filters.end(); } + + void AddChildPipeline(G4VtkImagePipeline* child) + { + childPipelines.push_back(child); + if (child->GetDisableParent()) { + Disable(); + } + } + G4VtkImagePipeline* GetChildPipeline(G4int iPipeline) { return childPipelines[iPipeline]; } + + virtual void SetImage(const G4String& fileName); + virtual void SetTransformation(const G4Transform3D& transformation); + + void Print() override; + void Modified() override; + void Clear() override; + + virtual vtkSmartPointer GetActor() { return actor; } + + void Disable() override; + void Enable() override; + + private: + std::vector> + filters; // derived types can store filters in this vector + std::vector childPipelines; + vtkSmartPointer actor; // all pipelines require an actor +}; + +#endif // G4VTKIMAGEPIPELINE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkInteractorStyle.hh b/source/visualization/Vtk/include/private/G4VtkInteractorStyle.hh new file mode 100644 index 00000000000..c9a89d263f7 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkInteractorStyle.hh @@ -0,0 +1,62 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Created by Stewart Boogert on 28/02/2023. +// + +#ifndef G4VTKINTERACTORSTYLE_HH +#define G4VTKINTERACTORSTYLE_HH + +#include "vtkInteractionStyleModule.h" // For export macro +#include "vtkInteractorStyleTrackballCamera.h" +#include + +// Define interaction style +class VTKINTERACTIONSTYLE_EXPORT G4VtkInteractorStyle : public vtkInteractorStyleTrackballCamera +{ + public: + static G4VtkInteractorStyle* New(); + vtkTypeMacro(G4VtkInteractorStyle, vtkInteractorStyleTrackballCamera) + + void OnLeftButtonDown() override + { + // Forward events + vtkInteractorStyleTrackballCamera::OnLeftButtonDown(); + } + + void OnMiddleButtonDown() override + { + // Forward events + vtkInteractorStyleTrackballCamera::OnMiddleButtonDown(); + } + + void OnRightButtonDown() override + { + // Forward events + vtkInteractorStyleTrackballCamera::OnRightButtonDown(); + } +}; + +#endif // G4VTKINTERACTORSTYLE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkMessenger.hh b/source/visualization/Vtk/include/private/G4VtkMessenger.hh new file mode 100644 index 00000000000..b4b9701fe39 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkMessenger.hh @@ -0,0 +1,70 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#ifndef G4GVTKMESSENGER_HH +#define G4GVTKMESSENGER_HH 1 + +#include "G4UImessenger.hh" + +#include + +class G4UIdirectory; +class G4UIcmdWithABool; +class G4UIcmdWithAString; +class G4UIcommand; +class G4UIcmdWithoutParameter; + +class G4VtkMessenger : public G4UImessenger +{ + public: + static G4VtkMessenger* GetInstance(); + ~G4VtkMessenger() override; + + G4String GetCurrentValue(G4UIcommand* command) override; + void SetNewValue(G4UIcommand* command, G4String newValue) override; + + private: + static G4VtkMessenger* fpInstance; + G4VtkMessenger(); + + G4UIdirectory* fpDirectory; + G4UIcommand* fpCommandClearNonG4; + G4UIcommand* fpCommandExport; + G4UIcommand* fpCommandExportCutter; + G4UIcommand* fpCommandDebugPrint; + + G4UIdirectory* fpDirectorySet; + G4UIcommand* fpCommandPolyhedronPipeline; + G4UIcmdWithABool* fpCommandWarnings; + G4UIcmdWithABool* fpCommandHUD; + G4UIcommand* fpCommandClipper; + G4UIcommand* fpCommandCutter; + G4UIcommand* fpCommandShadow; + + G4UIdirectory* fpDirectoryAdd; + G4UIcommand* fpCommandImageOverlay; +}; + +#endif \ No newline at end of file diff --git a/source/digits_hits/hits/src/G4VHit.cc b/source/visualization/Vtk/include/private/G4VtkPolydataCubePipeline.hh similarity index 88% rename from source/digits_hits/hits/src/G4VHit.cc rename to source/visualization/Vtk/include/private/G4VtkPolydataCubePipeline.hh index dd12f01fba5..1b0a76b170d 100644 --- a/source/digits_hits/hits/src/G4VHit.cc +++ b/source/visualization/Vtk/include/private/G4VtkPolydataCubePipeline.hh @@ -23,19 +23,10 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // +// Created by Stewart Boogert on 27/02/2023. // -// - -// G4VHit -#include "G4VHit.hh" -#include "globals.hh" - -G4VHit::G4VHit() { ; } - -G4VHit::~G4VHit() { ; } - -G4bool G4VHit::operator==(const G4VHit&) const { return false; } -void G4VHit::Draw() { ; } +#ifndef GEANT4_G4VTKPOLYDATACUBEPIPELINE_HH +#define GEANT4_G4VTKPOLYDATACUBEPIPELINE_HH -void G4VHit::Print() { ; } +#endif // GEANT4_G4VTKPOLYDATACUBEPIPELINE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkPolydataInstanceAppendPipeline.hh b/source/visualization/Vtk/include/private/G4VtkPolydataInstanceAppendPipeline.hh new file mode 100644 index 00000000000..18721784337 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkPolydataInstanceAppendPipeline.hh @@ -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. * +// ******************************************************************** + +#ifndef G4VTKPOLYDATAINSTANCEAPPENDPIPELINE_HH +#define G4VTKPOLYDATAINSTANCEAPPENDPIPELINE_HH + +#include "G4VtkPolydataInstancePipeline.hh" + +class G4String; +class G4VtkVisContext; + +class vtkTransformPolyDataFilter; +class vtkAppendPolyData; + +class G4VtkPolydataInstanceAppendPipeline : public G4VtkPolydataInstancePipeline +{ + public: + G4VtkPolydataInstanceAppendPipeline(G4String name, const G4VtkVisContext& vc); + ~G4VtkPolydataInstanceAppendPipeline() override = default; + + void Print() override; + + void addInstance(G4double dx, G4double dy, G4double dz, G4double r00, G4double r01, + G4double r02, G4double r10, G4double r11, G4double r12, G4double r20, + G4double r21, G4double r22, G4double r, G4double g, G4double b, G4double a, + const G4String& name) override; + void removeInstance(const G4String& name) override; + + static std::size_t MakeHash(const G4Polyhedron& p, const G4VtkVisContext& vc); + + protected: + std::map> transformFilterMap; + vtkSmartPointer appendFilter; +}; + +#endif // G4VTKPOLYDATAINSTANCEAPPENDPIPELINE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkPolydataInstanceBakePipeline.hh b/source/visualization/Vtk/include/private/G4VtkPolydataInstanceBakePipeline.hh new file mode 100644 index 00000000000..d4179f8e6c9 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkPolydataInstanceBakePipeline.hh @@ -0,0 +1,67 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#ifndef G4VTKPOLYDATAINSTANCEBAKEPIPELINE_HH +#define G4VTKPOLYDATAINSTANCEBAKEPIPELINE_HH + +#include "G4VtkPolydataInstancePipeline.hh" + +class G4String; +class G4VtkVisContext; + +class G4VtkPolydataInstanceBakePipeline : public G4VtkPolydataInstancePipeline +{ + public: + G4VtkPolydataInstanceBakePipeline(G4String name, const G4VtkVisContext& vc); + ~G4VtkPolydataInstanceBakePipeline() override = default; + + void Print() override; + + void SetPolydata(const G4Polyhedron& polyhedron) override; + void addInstance(G4double dx, G4double dy, G4double dz, G4double r00, G4double r01, + G4double r02, G4double r10, G4double r11, G4double r12, G4double r20, + G4double r21, G4double r22, G4double r, G4double g, G4double b, G4double a, + const G4String& name) override; + void removeInstance(const G4String& name) override; + + static std::size_t MakeHash(const G4Polyhedron& p, const G4VtkVisContext& vc); + + protected: + // point colour data + vtkSmartPointer polydataPointData; + + // prototype of single polyhedron + const G4Polyhedron* polyhedronPrototype; + + // counters as the final polydata is built + G4int iVert; + G4int iFace; + + // maps to keep indicies for rebuild + std::map> instanceVertexMap; + std::map> instanceFaceMap; +}; + +#endif // G4VTKPOLYDATAINSTANCEBAKEPIPELINE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkPolydataInstancePipeline.hh b/source/visualization/Vtk/include/private/G4VtkPolydataInstancePipeline.hh new file mode 100644 index 00000000000..74c36e3a43a --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkPolydataInstancePipeline.hh @@ -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. * +// ******************************************************************** + +#ifndef G4VTKPOLYDATAINSTANCEPIPELINE_HH +#define G4VTKPOLYDATAINSTANCEPIPELINE_HH + +#include "G4VtkPolydataPipeline.hh" + +#include + +class vtkPoints; +class vtkDoubleArray; + +class G4VtkPolydataInstancePipeline : public G4VtkPolydataPipeline +{ + public: + G4VtkPolydataInstancePipeline(G4String name, const G4VtkVisContext& vc); + ~G4VtkPolydataInstancePipeline() override = default; + + virtual void addInstance(G4double dx, G4double dy, G4double dz, G4double r00, G4double r01, + G4double r02, G4double r10, G4double r11, G4double r12, G4double r20, + G4double r21, G4double r22, const G4String& name); + virtual void addInstance(G4double dx, G4double dy, G4double dz, G4double r00, G4double r01, + G4double r02, G4double r10, G4double r11, G4double r12, G4double r20, + G4double r21, G4double r22, G4double r, G4double g, G4double b, + G4double a, const G4String& name); + virtual void removeInstance(const G4String& name); + + protected: + vtkSmartPointer instanceColour; + vtkSmartPointer instancePosition; + vtkSmartPointer instanceTransform; + std::map instanceMap; +}; + +#endif // G4VTKPOLYDATAINSTANCEPIPELINE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkPolydataInstanceTensorPipeline.hh b/source/visualization/Vtk/include/private/G4VtkPolydataInstanceTensorPipeline.hh new file mode 100644 index 00000000000..fa88594f267 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkPolydataInstanceTensorPipeline.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. * +// ******************************************************************** + +#ifndef G4VTKPOLYDATAINSTANCETENSORPIPELINE_HH +#define G4VTKPOLYDATAINSTANCETENSORPIPELINE_HH + +#include "G4VtkPolydataInstancePipeline.hh" + +class G4String; +class G4VtkVisContext; +class vtkTensorGlyphColor; + +class G4VtkPolydataInstanceTensorPipeline : public G4VtkPolydataInstancePipeline +{ + public: + G4VtkPolydataInstanceTensorPipeline(G4String name, const G4VtkVisContext& vc); + ~G4VtkPolydataInstanceTensorPipeline() override = default; + + void Print() override; + + static std::size_t MakeHash(const G4Polyhedron& p, const G4VtkVisContext& vc); + + protected: + vtkSmartPointer instancePolydata; + vtkSmartPointer instanceTensorGlyph; +}; + +#endif // G4VTKPOLYDATAINSTANCETENSORPIPELINE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkPolydataPipeline.hh b/source/visualization/Vtk/include/private/G4VtkPolydataPipeline.hh new file mode 100644 index 00000000000..885272539a9 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkPolydataPipeline.hh @@ -0,0 +1,95 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#ifndef G4VTKPOLYDATAPIPELINE_HH +#define G4VTKPOLYDATAPIPELINE_HH + +#include "G4Point3D.hh" +#include "G4VVtkPipeline.hh" + +#include "vtkSmartPointer.h" + +#include + +class G4String; +class G4VtkVisContext; +class G4Polyhedron; +class G4Polyline; + +class vtkPoints; +class vtkCellArray; +class vtkPolyData; +class vtkPolyDataAlgorithm; +class vtkPolyDataMapper; +class vtkActor; + +class G4VtkPolydataPipeline : public G4VVtkPipeline +{ + public: + G4VtkPolydataPipeline(G4String name, const G4VtkVisContext& vc); + ~G4VtkPolydataPipeline() override = default; + + void AddFilter(vtkSmartPointer f) { filters.push_back(f); } + vtkSmartPointer GetFilter(G4int iFilter) { return filters[iFilter]; } + G4int GetNumberOfFilters() { return (G4int)filters.size(); } + vtkSmartPointer GetFinalFilter() { return filters[filters.size() - 1]; } + + void Enable() override; + void Disable() override; + + void Print() override; + void Modified() override; + void Clear() override; + + virtual vtkSmartPointer GetActor() { return actor; } + + virtual void SetPolydata(const G4Polyhedron& polyhedron); + virtual void SetPolydata(const G4Polyline& polyline); + virtual void SetPolydataData(const G4Point3D& p); + virtual void SetPolydataData(double x, double y, double z); + + virtual void SetActorTransform(G4double dx, G4double dy, G4double dz, G4double r00, + G4double r01, G4double r02, G4double r10, G4double r11, + G4double r12, G4double r20, G4double r21, G4double r22); + virtual void SetActorColour(G4double r, G4double g, G4double b, G4double a); + + virtual vtkSmartPointer GetPolydata() { return polydata; } + + virtual G4double* GetBounds() { return actor->GetBounds(); } + + static std::size_t MakeHash(const G4Polyhedron& p, const G4VtkVisContext& vc); + + protected: + vtkSmartPointer polydataPoints; + vtkSmartPointer polydataCells; + vtkSmartPointer polydata; + + std::vector> + filters; // derived types can store filters in this vector + vtkSmartPointer mapper; // polydagta mapper + vtkSmartPointer actor; // all pipelines require an actor +}; + +#endif // G4VTKPOLYDATAPIPELINE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkPolydataPolygonPipeline.hh b/source/visualization/Vtk/include/private/G4VtkPolydataPolygonPipeline.hh new file mode 100644 index 00000000000..b12eec557ed --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkPolydataPolygonPipeline.hh @@ -0,0 +1,48 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#ifndef G4POLYDATAPOLYGONPIPELINE_HH +#define G4POLYDATAPOLYGONPIPELINE_HH + +#include "G4VtkPolydataPipeline.hh" + +class G4String; +class G4VtkVisContext; +class G4VisAttributes; + +class G4VtkPolydataPolygonPipeline : public G4VtkPolydataPipeline +{ + public: + G4VtkPolydataPolygonPipeline(G4String name, const G4VtkVisContext& vc, + const G4VisAttributes* pVA); + ~G4VtkPolydataPolygonPipeline() override = default; + + static std::size_t MakeHash(const G4VisAttributes* va); + + protected: + G4VisAttributes* pVisAttributes; +}; + +#endif // GEANT4_G4POLYDATAPOLYGONPIPELINE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkPolydataPolyline2DPipeline.hh b/source/visualization/Vtk/include/private/G4VtkPolydataPolyline2DPipeline.hh new file mode 100644 index 00000000000..ebd0ea2b198 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkPolydataPolyline2DPipeline.hh @@ -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. * +// ******************************************************************** + +#ifndef G4VTKPOLYDATAPOLYLINE2DPIPELINE_HH +#define G4VTKPOLYDATAPOLYLINE2DPIPELINE_HH + +#include "G4VtkPolydataPipeline.hh" + +class G4String; +class G4VtkVisContext; +class G4VisAttributes; +class G4Polyline; + +class vtkPolyDataMapper2D; +class vtkActor2D; + +class G4VtkPolydataPolyline2DPipeline : public G4VtkPolydataPipeline +{ + public: + G4VtkPolydataPolyline2DPipeline(G4String name, const G4VtkVisContext& vc, + const G4VisAttributes* pVA); + ~G4VtkPolydataPolyline2DPipeline() override = default; + + void Modified() override; + void SetPolydata(const G4Polyline& polyline) override; + + vtkSmartPointer GetActor2D() { return actor2D; } + + void Clear() override; + + static std::size_t MakeHash(const G4VisAttributes* va); + + protected: + G4VisAttributes* pVisAttributes; + vtkSmartPointer mapper2D; + vtkSmartPointer actor2D; +}; + +#endif diff --git a/source/visualization/Vtk/include/private/G4VtkPolydataPolylinePipeline.hh b/source/visualization/Vtk/include/private/G4VtkPolydataPolylinePipeline.hh new file mode 100644 index 00000000000..0ef3baabd91 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkPolydataPolylinePipeline.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. * +// ******************************************************************** + +#ifndef G4VTKPOLYDATAPOLYLINEPIPELINE_HH +#define G4VTKPOLYDATAPOLYLINEPIPELINE_HH + +#include "G4VtkPolydataPipeline.hh" + +class G4String; +class G4VtkVisContext; +class G4VisAttributes; + +class G4VtkPolydataPolylinePipeline : public G4VtkPolydataPipeline +{ + public: + G4VtkPolydataPolylinePipeline(G4String name, const G4VtkVisContext& vc, + const G4VisAttributes* pVA); + ~G4VtkPolydataPolylinePipeline() override = default; + + void Print() override; + + static std::size_t MakeHash(const G4VisAttributes* va); + + protected: + G4VisAttributes* pVisAttributes; +}; + +#endif // G4VTKPOLYDATAPOLYLINEPIPELINE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkPolydataSpherePipeline.hh b/source/visualization/Vtk/include/private/G4VtkPolydataSpherePipeline.hh new file mode 100644 index 00000000000..9b02d837192 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkPolydataSpherePipeline.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. * +// ******************************************************************** + +#ifndef G4VTKPOLYDATASPHEREPIPELINE_HH +#define G4VTKPOLYDATASPHEREPIPELINE_HH + +#include "G4VtkPolydataPipeline.hh" + +class G4String; +class G4VtkVisContext; +class G4VisAttributes; + +class G4VtkPolydataSpherePipeline : public G4VtkPolydataPipeline +{ + public: + G4VtkPolydataSpherePipeline(G4String name, const G4VtkVisContext& vc, + const G4VisAttributes* pVA); + ~G4VtkPolydataSpherePipeline() override = default; + + void Print() override; + + static std::size_t MakeHash(const G4VisAttributes* va); + + protected: + G4VisAttributes* pVisAttributes; +}; + +#endif // G4VTKPOLYDATASPHEREPIPELINE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkQtSceneHandler.hh b/source/visualization/Vtk/include/private/G4VtkQtSceneHandler.hh new file mode 100644 index 00000000000..c5404fe9000 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkQtSceneHandler.hh @@ -0,0 +1,57 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#ifndef G4VTKQTSCENEHANDLER_HH +#define G4VTKQTSCENEHANDLER_HH + +#include "G4VSceneHandler.hh" +#include "G4VtkQtViewer.hh" +#include "G4VtkSceneHandler.hh" + +#include +#include + +class G4VtkQtSceneHandler : public G4VtkSceneHandler +{ + public: + G4VtkQtSceneHandler(G4VGraphicsSystem& system, const G4String& name); + ~G4VtkQtSceneHandler() override = default; + + //////////////////////////////////////////////////////////////// + // Implementation of pure virtual functions... + void AddPrimitive(const G4Polyline&) override; + void AddPrimitive(const G4Text&) override; + void AddPrimitive(const G4Circle&) override; + void AddPrimitive(const G4Square&) override; + void AddPrimitive(const G4Polyhedron&) override; + + protected: + static G4int fSceneIdCount; // Counter for Vtk scene handlers. + + private: + friend class G4VtkQtViewer; +}; + +#endif diff --git a/source/visualization/Vtk/include/private/G4VtkQtViewer.hh b/source/visualization/Vtk/include/private/G4VtkQtViewer.hh new file mode 100644 index 00000000000..685b25b96f8 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkQtViewer.hh @@ -0,0 +1,115 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#ifndef G4VTKQTVIEWER_HH +#define G4VTKQTVIEWER_HH + +// #define G4VTKDEBUG // Comment this out to suppress debug code. + +#include "G4VViewer.hh" + +class G4UIManager; +class G4UIQt; + +class QString; +class QWidget; +class QLineEdit; +class QSlider; +class QTreeWidget; +class QTreeWidgetItem; + +#include "G4VtkViewer.hh" + +#include "QVTKOpenGLNativeWidget.h" + +#include +#include + +class G4VtkQtViewer : public QVTKOpenGLNativeWidget, public G4VtkViewer +{ + public: + using PVNodeID = G4PhysicalVolumeModel::G4PhysicalVolumeNodeID; + using PVPath = std::vector; + + public: + G4VtkQtViewer(G4VSceneHandler&, const G4String& name); + ~G4VtkQtViewer() override; + void Initialise() override; + virtual void CreateMainWindow(QVTKOpenGLNativeWidget*, const QString&); +#ifdef G4MULTITHREADED + // In MT mode these functions are called in the following order for each run: + // Called on the master thread before starting the vis sub-thread. + void DoneWithMasterThread() override; + // Called on the master thread after starting the vis sub-thread. + void MovingToVisSubThread() override; + // Called on the vis sub-thread when waiting for events. + void SwitchToVisSubThread() override; + // Called on the vis sub-thread when all events have been processed. + void DoneWithVisSubThread() override; + // Called on the vis sub-thread when all events have been processed. + // virtual void MovingToMasterThread (); Not used in G4OpenGLQtViewer. + // Called on the master thread after the vis sub-thread has terminated. + void SwitchToMasterThread() override; + + inline void SetQGLContextVisSubThread(QThread* th) { fQGLContextVisSubThread = th; } + inline void SetQGLContextMainThread(QThread* th) { fQGLContextMainThread = th; } +#endif + + void FinishView() override; + void createSceneTreeWidget(); + void createSceneTreeComponent(); + QTreeWidgetItem* createTreeWidgetItem(const PVPath& fullPath, const QString& name, int copyNb, + int POIndex, const QString& logicalName, + Qt::CheckState state, QTreeWidgetItem* parentTreeNode, + const G4Colour& color); + void addNonPVSceneTreeElement(const G4String& model, G4Visible& visible, int currentPOIndex); + void addPVSceneTreeElement(const G4String& model, G4PhysicalVolumeModel* pPVModel, + int currentPOIndex); + + QString getModelShortName(const G4String& model); + bool parseAndInsertInSceneTree(QTreeWidgetItem* parentItem, G4PhysicalVolumeModel* pPVModel, + unsigned int fullPathIndex, const QString& parentRoot, + unsigned int currentIndexInTreeSceneHandler, + int currentPVPOIndex); + + void EnableClipperWidget() override; + + void SetWidgetInteractor(vtkAbstractWidget* widget) override; + + private: + G4UIQt* fUiQt; + QWidget* fGLWidget; + +#ifdef G4MULTITHREADED + QThread* fQGLContextVisSubThread; + QThread* fQGLContextMainThread; +#endif + + // safe to use in serial mode + G4AutoLock* lWaitForVisSubThreadQtOpenGLContextInitialized; + G4AutoLock* lWaitForVisSubThreadQtOpenGLContextMoved; +}; + +#endif diff --git a/source/visualization/Vtk/include/private/G4VtkSceneHandler.hh b/source/visualization/Vtk/include/private/G4VtkSceneHandler.hh new file mode 100644 index 00000000000..759191b87b0 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkSceneHandler.hh @@ -0,0 +1,125 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// +// +// John Allison 5th April 2001 +// A template for a simplest possible graphics driver. +//?? Lines or sections marked like this require specialisation for your driver. + +#ifndef G4VTKSCENEHANDLER_HH +#define G4VTKSCENEHANDLER_HH + +#include "G4VSceneHandler.hh" +#include "G4VtkStore.hh" +#include "G4VtkViewer.hh" + +#include +#include + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wextra-semi" +#include "vtkActor.h" +#include "vtkBillboardTextActor3D.h" +#include "vtkCleanPolyData.h" +#include "vtkDoubleArray.h" +#include "vtkFeatureEdges.h" +#include "vtkFollower.h" +#include "vtkGlyph2D.h" +#include "vtkGlyph3D.h" +#include "vtkImageData.h" +#include "vtkLine.h" +#include "vtkMatrix4x4.h" +#include "vtkNamedColors.h" +#include "vtkOpenGLGPUVolumeRayCastMapper.h" +#include "vtkPointData.h" +#include "vtkPolyData.h" +#include "vtkPolyDataMapper.h" +#include "vtkPolyDataNormals.h" +#include "vtkProperty.h" +#include "vtkRegularPolygonSource.h" +#include "vtkScalarsToColors.h" +#include "vtkSmartPointer.h" +#include "vtkSphereSource.h" +#include "vtkTensorGlyph.h" +#include "vtkTensorGlyphColor.h" +#include "vtkTextActor.h" +#include "vtkTextProperty.h" +#include "vtkTriangleFilter.h" +#include "vtkVertexGlyphFilter.h" +#include "vtkVolume.h" +#pragma GCC diagnostic pop + +class G4VtkSceneHandler : public G4VSceneHandler +{ + public: + G4VtkSceneHandler(G4VGraphicsSystem& system, const G4String& name); + ~G4VtkSceneHandler() override = default; + + //////////////////////////////////////////////////////////////// + // Required implementation of pure virtual functions... + + void AddPrimitive(const G4Polyline&) override; + void AddPrimitive(const G4Text&) override; + void AddPrimitive(const G4Circle&) override; + void AddPrimitive(const G4Square&) override; + void AddPrimitive(const G4Polyhedron&) override; + + // Further optional AddPrimitive methods. Explicitly invoke base + // class methods if not otherwise defined to avoid warnings about + // hiding of base class methods. + void AddPrimitive(const G4Polymarker& polymarker) override + { + G4VSceneHandler::AddPrimitive(polymarker); + } + + void AddSolid(const G4Box& box) override; + void AddCompound(const G4Mesh& mesh) override; + + void Modified(); + void ClearStore() override; + void ClearTransientStore() override; + G4VtkVisContext MakeDefaultVisContext(); + G4VtkStore& GetStore() { return store; } + G4VtkStore& GetTransientStore() { return transientStore; } + + virtual void Print(); + + void SetPolyhedronPipeline(const G4String& str); + + protected: + static G4int fSceneIdCount; // Counter for Vtk scene handlers. + + G4VtkStore store = G4VtkStore("perm"); + G4VtkStore transientStore = G4VtkStore("trans"); + + G4String polyhedronPipelineType; + + private: + friend class G4VtkViewer; +}; + +#endif diff --git a/source/visualization/Vtk/include/private/G4VtkStore.hh b/source/visualization/Vtk/include/private/G4VtkStore.hh new file mode 100644 index 00000000000..9b89f736931 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkStore.hh @@ -0,0 +1,189 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Created by Stewart Boogert on 13/11/2021. +// + +#ifndef G4VTKSTORE_HH +#define G4VTKSTORE_HH + +#include "G4Transform3D.hh" +#include "G4ViewParameters.hh" + +#include "vtkActor.h" +#include "vtkActor2D.h" +#include "vtkCellArray.h" +#include "vtkCellData.h" +#include "vtkCleanPolyData.h" +#include "vtkClipClosedSurface.h" +#include "vtkClipPolyData.h" +#include "vtkDataSetMapper.h" +#include "vtkDoubleArray.h" +#include "vtkFeatureEdges.h" +#include "vtkNamedColors.h" +#include "vtkPlane.h" +#include "vtkPlaneCollection.h" +#include "vtkPointData.h" +#include "vtkPoints.h" +#include "vtkPolyData.h" +#include "vtkPolyDataAlgorithm.h" +#include "vtkPolyDataMapper.h" +#include "vtkPolyDataMapper2D.h" +#include "vtkPolyDataNormals.h" +#include "vtkProperty.h" +#include "vtkRenderer.h" +#include "vtkStripper.h" +#include "vtkStructuredGrid.h" +#include "vtkTensorGlyphColor.h" +#include "vtkTriangleFilter.h" +#include "vtkVertexGlyphFilter.h" +#include + +#include +#include + +class G4VViewer; +class G4VtkViewer; +class G4Polyline; +class G4Text; +class G4Circle; +class G4Square; +class G4Polyhedron; +class G4VisAttributes; +class G4VtkVisContext; +class G4Mesh; + +class G4VtkPolydataPipeline; +class G4VtkPolydataPolylinePipeline; +class G4VtkPolydataPolyline2DPipeline; +class G4VtkPolydataSpherePipeline; +class G4VtkPolydataPolygonPipeline; +class G4VtkPolydataInstanceTensorPipeline; +class G4VtkPolydataInstanceAppendPipeline; +class G4VtkPolydataInstanceBakePipeline; +class G4VtkClipCloseSurfacePipeline; +class G4VtkImagePipeline; +class G4VtkTextPipeline; +class G4VtkText2DPipeline; +class G4VtkUnstructuredGridPipeline; + +template +class vtkSmartPointer; + +class G4VtkTensorGlyphPolydataPipeline; + +class G4VtkStore +{ + public: + G4VtkStore(G4String name); + ~G4VtkStore(); + + void Modified(); + void Clear(); + void ClearNonG4(); + void Print(); + + void AddPrimitive(const G4Polyline& polyline, const G4VtkVisContext& vc); + void AddPrimitive(const G4Text& text, const G4VtkVisContext& vc); + void AddPrimitive(const G4Circle& circle, const G4VtkVisContext& vc); + void AddPrimitive(const G4Square& square, const G4VtkVisContext& vc); + void AddPrimitiveSeparate(const G4Polyhedron& polyhedron, const G4VtkVisContext& vc); + void AddPrimitiveTensorGlyph(const G4Polyhedron& polyhedron, const G4VtkVisContext& vc); + void AddPrimitiveAppend(const G4Polyhedron& polyhedron, const G4VtkVisContext& vc); + void AddPrimitiveTransformBake(const G4Polyhedron& polyhedron, const G4VtkVisContext& vc); + void AddCompound(const G4Mesh& mesh, const G4VtkVisContext& vc); + + void UpdatePlanePipelines(G4String name, G4String type, const G4Plane3D); + + void AddClipper(G4String name, const G4Plane3D& plane); + void UpdateClipper(G4String name, const G4Plane3D& plane); + void RemoveClipper(G4String name); + + void AddCutter(G4String name, const G4Plane3D& plane); + void UpdateCutter(G4String name, const G4Plane3D& plane); + void RemoveCutter(G4String name); + + void AddNonG4ObjectImage(const G4String& fileName, const G4VtkVisContext& vc); + void AddNonG4ObjectPolydata(const G4String fileName, const G4VtkVisContext& vc); + + void GetBounds(G4double maxBound[6]); + + void AddToRenderer(vtkRenderer* renderer); + + std::map>& GetPolylinePipeMap() + { + return polylinePipeMap; + } + std::map>& GetPolyline2DPipeMap() + { + return polyline2DPipeMap; + } + std::map>& GetPolydataSpherePipeMap() + { + return circlePipeMap; + } + std::map>& + GetPolydataPolygonPipeMap() + { + return squarePipeMap; + } + std::map>& GetSeparatePipeMap() + { + return separatePipeMap; + } + std::map>& GetTensorPipeMap() + { + return tensorGlyphPipeMap; + } + std::map>& GetAppendPipeMap() + { + return appendPipeMap; + } + std::map>& GetBakePipeMap() + { + return bakePipeMap; + } + + private: + G4String name; + std::map> polylinePipeMap; + std::map> polyline2DPipeMap; + std::map> circlePipeMap; + std::map> squarePipeMap; + std::map> textPipeMap; + std::map> text2DPipeMap; + + std::map> separatePipeMap; + std::map> tensorGlyphPipeMap; + std::map> appendPipeMap; + std::map> bakePipeMap; + + std::map> ugridPipeMap; + + std::map> imagePipeMap; + std::map> sideloadPipeMap; +}; + +#endif // G4VTKSTORE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkStructuredGridPipeline.hh b/source/visualization/Vtk/include/private/G4VtkStructuredGridPipeline.hh new file mode 100644 index 00000000000..f65866fbd9d --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkStructuredGridPipeline.hh @@ -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. * +// ******************************************************************** +// +// Created by Stewart Boogert on 28/02/2023. +// + +#ifndef G4VTKGRIDPIPELINE_HH +#define G4VTKGRIDPIPELINE_HH + +class G4VtkStructuredGridPipeline +{ + G4VtkStructuredGridPipeline(G4int nxIn, G4int nyIn, G4int nzIn) : nx(nxIn), ny(nyIn), nz(nzIn) + { + structuredGrid->SetDimensions(nx, ny, nz); + structuredGrid->SetPoints(points); + structuredGrid->GetCellData()->SetScalars(cellValues); + structuredGrid->GetPointData()->SetScalars(pointValues); + + mapper->SetInputData(structuredGrid); + actor->SetMapper(mapper); + } + + void Modified(){}; + void Clear(){}; + void Print(){}; + + G4int nx, ny, nz; + vtkSmartPointer points; + vtkSmartPointer pointValues; + vtkSmartPointer cellValues; + vtkSmartPointer structuredGrid; + vtkSmartPointer mapper; + vtkSmartPointer actor; +}; + +#endif // G4VTKGRIDPIPELINE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkText2DPipeline.hh b/source/visualization/Vtk/include/private/G4VtkText2DPipeline.hh new file mode 100644 index 00000000000..ec62d9c68db --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkText2DPipeline.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. * +// ******************************************************************** +// +// Created by Stewart Boogert on 05/03/2023. +// + +#ifndef G4VTKTEXT2DPIPELINE_HH +#define G4VTKTEXT2DPIPELINE_HH + +#include "G4VVtkPipeline.hh" + +class G4Text; +class G4VtkVisContext; +class vtkTextActor; + +class G4VtkText2DPipeline : public G4VVtkPipeline +{ + public: + G4VtkText2DPipeline(const G4Text& text, const G4VtkVisContext& vc, + const G4VisAttributes* pVisAttributes); + ~G4VtkText2DPipeline() override = default; + + void Enable() override; + void Disable() override; + + void Print() override; + void Modified() override; + void Clear() override; + + virtual vtkSmartPointer GetActor() { return actor; } + + virtual void SetText(const G4String& text); + + static std::size_t MakeHash(const G4Text& text, const G4VtkVisContext& vc, + const G4VisAttributes* pVA); + + protected: + vtkSmartPointer actor; +}; + +#endif // G4VTKTEXT2DPIPELINE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkTextPipeline.hh b/source/visualization/Vtk/include/private/G4VtkTextPipeline.hh new file mode 100644 index 00000000000..2158ce3a271 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkTextPipeline.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. * +// ******************************************************************** +// +// Created by Stewart Boogert on 05/03/2023. +// + +#ifndef G4VTKTEXTPIPELINE_HH +#define G4VTKTEXTPIPELINE_HH + +#include "G4VVtkPipeline.hh" + +class G4Text; +class G4VtkVisContext; +class vtkBillboardTextActor3D; + +class G4VtkTextPipeline : public G4VVtkPipeline +{ + public: + G4VtkTextPipeline(const G4Text& text, const G4VtkVisContext& vc, + const G4VisAttributes* pVisAttributes); + ~G4VtkTextPipeline() override = default; + + void Enable() override; + void Disable() override; + + void Print() override; + void Modified() override; + void Clear() override; + + virtual vtkSmartPointer GetActor() { return actor; } + + virtual void SetText(const G4String& text); + + static std::size_t MakeHash(const G4Text& text, const G4VtkVisContext& vc, + const G4VisAttributes* pVA); + + protected: + vtkSmartPointer actor; +}; + +#endif // G4VTKTEXTPIPELINE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkUnstructuredGridPipeline.hh b/source/visualization/Vtk/include/private/G4VtkUnstructuredGridPipeline.hh new file mode 100644 index 00000000000..ba4de06dd50 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkUnstructuredGridPipeline.hh @@ -0,0 +1,123 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#ifndef G4VTKUNSTRUCTUREDGRIDPIPELINE_HH +#define G4VTKUNSTRUCTUREDGRIDPIPELINE_HH + +#include "G4VVtkPipeline.hh" +#include "G4PseudoScene.hh" + +#include "vtkSmartPointer.h" +#include "vtkPoints.h" +#include "vtkUnstructuredGrid.h" +#include "vtkStaticCleanUnstructuredGrid.h" + +class vtkDoubleArray; +class vtkDataSetMapper; +class vtkActor; + +class G4Mesh; + +class G4VtkUnstructuredGridPipeline : public G4VVtkPipeline +{ + public: + G4VtkUnstructuredGridPipeline(G4String name, const G4VtkVisContext& vc); + + ~G4VtkUnstructuredGridPipeline() = default; + + void Modified() {}; + void Clear() {}; + void Print() {}; + + void Enable() {}; + void Disable() {}; + + void SetUnstructuredGridData(const G4Mesh &mesh); + + protected: + class PseudoSceneVtkBase: public G4PseudoScene { + public: + PseudoSceneVtkBase(G4PhysicalVolumeModel* pvModel, // input + G4int depth, + vtkPoints *points, + vtkDoubleArray *cellValues, + vtkUnstructuredGrid *unstructuredGrid) // input...the following are outputs by reference + : fpPVModel(pvModel), fDepth(depth), fpPoints(points), + fpGrid(unstructuredGrid), fpCellValues(cellValues) + {} + protected: + using G4PseudoScene::AddSolid; // except for... + void AddSolid(const G4VSolid& /*solid*/) override {}; + void AddSolid(const G4Box& /*box*/) override{}; + void ProcessVolume(const G4VSolid&) override { + // Do nothing if uninteresting solids found, e.g., the container if not marked invisible. + } + G4PhysicalVolumeModel* fpPVModel; + G4int fDepth; + vtkSmartPointer fpPoints; + vtkSmartPointer fpGrid; + vtkSmartPointer fpCellValues; + G4int iCell = 0; + }; + class PseudoSceneForTetCells: public PseudoSceneVtkBase { + public: + PseudoSceneForTetCells(G4PhysicalVolumeModel* pvModel, // input + G4int depth, + vtkPoints *points, + vtkDoubleArray *cellValues, + vtkUnstructuredGrid *unstructuredGrid) // input...the following are outputs by reference + : PseudoSceneVtkBase(pvModel,depth,points,cellValues,unstructuredGrid) + {} + private: + using G4PseudoScene::AddSolid; // except for... + void AddSolid(const G4VSolid& solid) override; + void ProcessVolume(const G4VSolid&) override {} + }; + class PseudoSceneForCubicalCells: public PseudoSceneVtkBase { + public: + PseudoSceneForCubicalCells(G4PhysicalVolumeModel* pvModel, // input + G4int depth, + vtkPoints *points, + vtkDoubleArray *cellValues, + vtkUnstructuredGrid *unstructuredGrid) // input...the following are outputs by reference + : PseudoSceneVtkBase(pvModel,depth,points,cellValues,unstructuredGrid) + {} + private: + using G4PseudoScene::AddSolid; // except for... + void AddSolid(const G4Box& box) override; + void ProcessVolume(const G4VSolid&) override {} + }; + + private: + vtkSmartPointer points; + vtkSmartPointer pointValues; + vtkSmartPointer cellValues; + vtkSmartPointer unstructuredGrid; + vtkSmartPointer cleanUnstructuredGrid; + vtkSmartPointer mapper; + vtkSmartPointer actor; +}; + +#endif // G4VTKUNSTRUCTUREDGRIDPIPELINE_HH diff --git a/source/visualization/Vtk/include/private/G4VtkUtility.hh b/source/visualization/Vtk/include/private/G4VtkUtility.hh new file mode 100644 index 00000000000..c90eca652cb --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkUtility.hh @@ -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. * +// ******************************************************************** +// +// Created by Stewart Boogert on 05/03/2023. +// + +#ifndef G4VTKUTILITY_HH +#define G4VTKUTILITY_HH + +#include "G4Normal3D.hh" +#include "G4Plane3D.hh" +#include "G4Point3D.hh" +#include "G4Transform3D.hh" +#include "G4Types.hh" + +#include "vtkSmartPointer.h" + +class vtkMatrix4x4; +class vtkPlane; + +vtkSmartPointer G4Transform3DToVtkMatrix4x4(const G4Transform3D& g4Transformation); + +vtkSmartPointer G4Plane3DToVtkPlane(const G4Plane3D& g4plane); +G4Plane3D VtkPlaneToG4Plane3D(vtkPlane* vtkPlane); +void MaxBounds(G4double* maxBound, G4double* boundToCheck); + +#endif // G4VTKUTILITY_HH diff --git a/source/visualization/Vtk/include/private/G4VtkViewer.hh b/source/visualization/Vtk/include/private/G4VtkViewer.hh new file mode 100644 index 00000000000..6e1e9099d11 --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkViewer.hh @@ -0,0 +1,287 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// +// +// +// John Allison 5th April 2001 +// A template for a simplest possible graphics driver. +//?? Lines or sections marked like this require specialisation for your driver. + +#ifndef G4VTKVIEWER_HH +#define G4VTKVIEWER_HH + +#include "G4VViewer.hh" +#include "G4VtkInteractorStyle.hh" +#include "G4VtkStore.hh" +#include "G4VtkUtility.hh" + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wextra-semi" +#include "vtkAutoInit.h" +#include "vtkCamera.h" +#include "vtkCameraOrientationWidget.h" +#include "vtkImplicitPlaneRepresentation.h" +#include "vtkImplicitPlaneWidget2.h" +#include "vtkInteractorStyleTerrain.h" +#include "vtkInteractorStyleTrackballCamera.h" +#include "vtkLight.h" +#include "vtkNew.h" +#include "vtkObject.h" +#include "vtkPlane.h" +#include "vtkRenderWindow.h" +#include "vtkRenderWindowInteractor.h" +#include "vtkRenderer.h" +#include "vtkTextActor.h" + +#pragma GCC diagnostic pop + +VTK_MODULE_INIT(vtkRenderingOpenGL2) +VTK_MODULE_INIT(vtkInteractionStyle); +VTK_MODULE_INIT(vtkRenderingFreeType) + +class vtkGeant4Callback : public vtkCommand +{ + public: + static vtkGeant4Callback* New() { return new vtkGeant4Callback; } + + vtkGeant4Callback() { fVP = nullptr; } + void SetGeant4ViewParameters(G4ViewParameters* VP) { fVP = VP; } + void SetVtkInitialValues(G4double parallelScaleIn, G4double cameraDistanceIn) + { + parallelScale = parallelScaleIn; + cameraDistance = cameraDistanceIn; + } + void Execute(vtkObject* caller, unsigned long, void*) override + { + auto ren = static_cast(caller); + vtkCamera* cam = ren->GetActiveCamera(); + + auto cp = cam->GetPosition(); + auto fp = cam->GetFocalPoint(); + auto ud = cam->GetViewUp(); + + fVP->SetCurrentTargetPoint(G4Point3D(fp[0], fp[1], fp[2])); + fVP->SetViewpointDirection( + (G4Point3D(cp[0], cp[1], cp[2]) - G4Point3D(fp[0], fp[1], fp[2])).unit()); + fVP->SetUpVector(G4Vector3D(ud[0], ud[1], ud[2])); + + if (cam->GetParallelProjection() != 0) { + fVP->SetZoomFactor(parallelScale / cam->GetParallelScale()); + } + else { + auto cd = std::sqrt(std::pow(cp[0] - fp[0], 2) + std::pow(cp[1] - cp[1], 2) + + std::pow(cp[2] - cp[2], 2)); + fVP->SetZoomFactor(cameraDistance / cd); + } + } + + protected: + G4ViewParameters* fVP; + G4double parallelScale; + G4double cameraDistance; +}; + +class vtkInfoCallback : public vtkCommand +{ + public: + static vtkInfoCallback* New() { return new vtkInfoCallback; } + + vtkInfoCallback() + { + t1 = std::chrono::steady_clock::now(); + t2 = std::chrono::steady_clock::now(); + } + void SetTextActor(vtkTextActor* txt) { this->TextActor = txt; } + + void Execute(vtkObject* caller, unsigned long, void*) override + { + auto ren = static_cast(caller); + int nActors = ren->GetActors()->GetNumberOfItems(); + vtkCamera* cam = ren->GetActiveCamera(); + if (cam == nullptr) return; + + double* pos = cam->GetPosition(); + double* foc = cam->GetFocalPoint(); + double viewAngle = cam->GetViewAngle(); + double distance = cam->GetDistance(); + double parallelScale = cam->GetParallelScale(); + + if (pos == nullptr) return; + + // Get current time + t2 = std::chrono::steady_clock::now(); + + // Frame rate calculation + std::chrono::duration tdiff = t2 - t1; + t1 = t2; + float fps = 1.0 / tdiff.count(); + + // String for display + snprintf(this->TextBuff, sizeof this->TextBuff, + "camera position : %.1f %.1f %.1f \n" + "camera focal point : %.1f %.1f %.1f \n" + "view angle : %.1f\n" + "distance : %.1f\n" + "parallel scale : %.1f\n" + "number actors : %i\n" + "fps : %.1f", + pos[0], pos[1], pos[2], foc[0], foc[1], foc[2], viewAngle, distance, parallelScale, + nActors, fps); + if (this->TextActor != nullptr) { + this->TextActor->SetInput(this->TextBuff); + } + } + + protected: + vtkTextActor* TextActor; + char TextBuff[256]; + std::chrono::time_point t1; + std::chrono::time_point t2; +}; + +class vtkIPWCallback : public vtkCommand +{ + public: + static vtkIPWCallback* New() { return new vtkIPWCallback; } + + vtkIPWCallback() = default; + + void SetStore(G4VtkStore* storeIn) { store = storeIn; } + + void SetUpdatePipelineName(G4String nameIn, G4String typeIn) + { + pipelineToUpdateName = nameIn; + pipelineToUpdateType = typeIn; + } + + void Execute(vtkObject* caller, unsigned long, void*) override + { + if (this->plane == nullptr) { + this->plane = vtkPlane::New(); + } + + if (pipelineToUpdateName.empty() || pipelineToUpdateType.empty()) { + return; + } + + auto planeWidget = reinterpret_cast(caller); + auto rep = + reinterpret_cast(planeWidget->GetRepresentation()); + rep->GetPlane(this->plane); + G4Plane3D g4p = VtkPlaneToG4Plane3D(this->plane); + store->UpdatePlanePipelines(pipelineToUpdateName, pipelineToUpdateType, g4p); + } + + vtkPlane* plane{nullptr}; + G4VtkStore* store{nullptr}; + G4String pipelineToUpdateName; + G4String pipelineToUpdateType; +}; + +class G4VtkViewer : public G4VViewer +{ + public: + G4VtkViewer(G4VSceneHandler&, const G4String& name); + void Initialise() override; + ~G4VtkViewer() override; + + void SetView() override; + void ClearView() override; + void DrawView() override; + void ShowView() override; + void FinishView() override; + + void ExportScreenShot(G4String, G4String); + void ExportOBJScene(G4String); + void ExportVRMLScene(G4String); + void ExportVTPScene(G4String); + void ExportGLTFScene(G4String); + void ExportVTPCutter(G4String fileName); + void ExportFormatStore(G4String fileName, G4String store); + + void DrawShadows(); + + void EnableShadows(); + void DisableShadows(); + + void AddViewHUD(); + void EnableHUD(); + void DisableHUD(); + + virtual void AddClipperPlaneWidget(const G4Plane3D& plane); + void EnableClipper(const G4Plane3D& plane, G4bool widget); + void DisableClipper(); + virtual void EnableClipperWidget(); + virtual void DisableClipperWidget(); + + virtual void AddCutterPlaneWidget(const G4Plane3D& plane); + void EnableCutter(const G4Plane3D& plane, G4bool bWidget); + void DisableCutter(G4String name); + virtual void EnableCutterWidget(); + virtual void DisableCutterWidget(); + + virtual void AddCameraOrientationWidget(); + virtual void EnableCameraOrientationWidget(); + virtual void DisableCameraOrientationWidget(); + + void AddImageOverlay(const G4String& fileName, const G4double alpha, + const G4double imageBottomLeft[2], const G4double worldBottomLeft[2], + const G4double imageTopRight[2], const G4double worldTopRight[2], + const G4double rot[3], const G4double trans[3]); + void Add3DOverlay(const G4String& fileName, const G4double colour[3], const G4double alpha, + const G4double scale[3], const G4double rotation[3], + const G4double translation[3]); + + void Print(); + + void SetPolyhedronPipeline(const G4String& t); + + virtual void SetWidgetInteractor(vtkAbstractWidget* widget); + + void ExportView(){}; + void SetGeant4View(){}; + + vtkNew infoTextActor; + vtkNew infoCallback; + vtkNew geant4Callback; + vtkSmartPointer light; + vtkNew camera; + vtkNew renderer; + vtkRenderWindow* _renderWindow; + vtkRenderWindowInteractor* renderWindowInteractor; + + protected: + G4bool firstSetView = true; + vtkNew cutterPlaneRepresentation; + vtkNew cutterPlaneWidget; + + vtkNew clipperPlaneRepresentation; + vtkNew clipperPlaneWidget; + + vtkNew camOrientWidget; +}; + +#endif diff --git a/source/visualization/Vtk/include/private/G4VtkVisContext.hh b/source/visualization/Vtk/include/private/G4VtkVisContext.hh new file mode 100644 index 00000000000..530c3d5228d --- /dev/null +++ b/source/visualization/Vtk/include/private/G4VtkVisContext.hh @@ -0,0 +1,81 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#ifndef G4VTKVISCONTEXT_HH +#define G4VTKVISCONTEXT_HH + +#include "G4ViewParameters.hh" + +class G4VtkViewer; +class G4VisAttributes; + +class G4VtkVisContext +{ + public: + const G4VtkViewer* fViewer; + const G4VisAttributes* fVisAtt; + G4bool fProcessing2D; + const G4Transform3D& fTransform; + G4int fDepth = -1; + G4String fDescription; + G4double red, green, blue, alpha; + + G4double fSize; + G4ViewParameters::DrawingStyle fDrawingStyle; + + G4VtkVisContext() + : fViewer(nullptr), + fVisAtt(nullptr), + fProcessing2D(false), + fTransform(G4Transform3D::Identity), + fDepth(0), + fDescription(""), + red(0), + green(0), + blue(0), + alpha(0) + {} + + G4VtkVisContext(const G4VtkViewer* viewer, const G4VisAttributes* visAtt, bool processing2D, + const G4Transform3D& transform) + : fViewer(viewer), fVisAtt(visAtt), fProcessing2D(processing2D), fTransform(transform) + {} + + G4VtkVisContext(const G4VtkVisContext& vc2) + : fViewer(vc2.fViewer), + fVisAtt(vc2.fVisAtt), + fProcessing2D(vc2.fProcessing2D), + fTransform(vc2.fTransform), + fDepth(vc2.fDepth), + fDescription(vc2.fDescription), + red(vc2.red), + green(vc2.green), + blue(vc2.blue), + alpha(vc2.alpha), + fDrawingStyle(vc2.fDrawingStyle) + {} +}; + +#endif diff --git a/source/visualization/Vtk/include/private/vtkTensorGlyphColor.h b/source/visualization/Vtk/include/private/vtkTensorGlyphColor.h new file mode 100644 index 00000000000..fca9fa2c9a3 --- /dev/null +++ b/source/visualization/Vtk/include/private/vtkTensorGlyphColor.h @@ -0,0 +1,260 @@ +/*========================================================================= + + Program: Visualization Toolkit + Module: vtkTensorGlyphColor.h + + Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen + All rights reserved. + See Copyright.txt or http://www.kitware.com/Copyright.htm for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notice for more information. + +=========================================================================*/ +/** + * @class vtkTensorGlyphColor + * @brief scale and orient glyph(s) according to eigenvalues and eigenvectors of symmetrical part + * of tensor + * + * vtkTensorGlyphColor is a filter that copies a geometric representation + * (specified as polygonal data) to every input point. The geometric + * representation, or glyph, can be scaled and/or rotated according to + * the tensor at the input point. Scaling and rotation is controlled + * by the eigenvalues/eigenvectors of the symmetrical part of the tensor + * as follows: + * For each tensor, the eigenvalues (and associated eigenvectors) are sorted + * to determine the major, medium, and minor eigenvalues/eigenvectors. + * The eigenvalue decomposition only makes sense for symmetric tensors, + * hence the need to only consider the symmetric part of the tensor, which is + * 1/2 (T + T.transposed()). + * + * If the boolean variable ThreeGlyphs is not set the major eigenvalue + * scales the glyph in the x-direction, the medium in the y-direction, + * and the minor in the z-direction. Then, the glyph is rotated so + * that the glyph's local x-axis lies along the major eigenvector, + * y-axis along the medium eigenvector, and z-axis along the minor. + * + * If the boolean variable ThreeGlyphs is set three glyphs are produced, + * each of them oriented along an eigenvector and scaled according to the + * corresponding eigenvector. + * + * If the boolean variable Symmetric is set each glyph is mirrored (2 or 6 + * glyphs will be produced) + * + * The x-axis of the source glyph will correspond to the eigenvector + * on output. Point (0,0,0) in the source will be placed in the data point. + * Variable Length will normally correspond to the distance from the + * origin to the tip of the source glyph along the x-axis, + * but can be changed to produce other results when Symmetric is on, + * e.g. glyphs that do not touch or that overlap. + * + * Please note that when Symmetric is false it will generally be better + * to place the source glyph from (-0.5,0,0) to (0.5,0,0), i.e. centred + * at the origin. When symmetric is true the placement from (0,0,0) to + * (1,0,0) will generally be more convenient. + * + * A scale factor is provided to control the amount of scaling. Also, you + * can turn off scaling completely if desired. The boolean variable + * ClampScaling controls the maximum scaling (in conjunction with + * MaxScaleFactor.) This is useful in certain applications where + * singularities or large order of magnitude differences exist in + * the eigenvalues. + * + * If the boolean variable ColorGlyphs is set to true the glyphs are + * colored. The glyphs can be colored using the input scalars + * (SetColorModeToScalars), which is the default, or colored using the + * eigenvalues (SetColorModeToEigenvalues). + * + * Another instance variable, ExtractEigenvalues, has been provided to + * control extraction of eigenvalues/eigenvectors. If this boolean is + * false, then eigenvalues/eigenvectors are not extracted, and the + * columns of the tensor are taken as the eigenvectors (the norm of + * column, always positive, is the eigenvalue). This allows + * additional capability over the vtkGlyph3D object. That is, the + * glyph can be oriented in three directions instead of one. + * + * @par Thanks: + * Thanks to Jose Paulo Moitinho de Almeida for enhancements. + * + * @sa + * vtkGlyph3D vtkPointLoad vtkHyperStreamline + */ + +#ifndef vtkTensorGlyphColor_h +#define vtkTensorGlyphColor_h + +#include "vtkFiltersCoreModule.h" // For export macro +#include "vtkPolyDataAlgorithm.h" + +class VTKFILTERSCORE_EXPORT vtkTensorGlyphColor : public vtkPolyDataAlgorithm +{ + public: + vtkTypeMacro(vtkTensorGlyphColor, + vtkPolyDataAlgorithm) void PrintSelf(ostream& os, vtkIndent indent) override; + + /** + * Construct object with scaling on and scale factor 1.0. Eigenvalues are + * extracted, glyphs are colored with input scalar data, and logarithmic + * scaling is turned off. + */ + static vtkTensorGlyphColor* New(); + + //@{ + /** + * Specify the geometry to copy to each point. + * Note that this method does not connect the pipeline. The algorithm will + * work on the input data as it is without updating the producer of the data. + * See SetSourceConnection for connecting the pipeline. + */ + void SetSourceData(vtkPolyData* source); + vtkPolyData* GetSource(); + //@} + + //@{ + /** + * Specify a source object at a specified table location. New style. + * Source connection is stored in port 1. This method is equivalent + * to SetInputConnection(1, id, outputPort). + */ + void SetSourceConnection(int id, vtkAlgorithmOutput* algOutput); + void SetSourceConnection(vtkAlgorithmOutput* algOutput) + { + this->SetSourceConnection(0, algOutput); + } + //@} + + //@{ + /** + * Turn on/off scaling of glyph with eigenvalues. + */ + vtkSetMacro(Scaling, vtkTypeBool); + vtkGetMacro(Scaling, vtkTypeBool); + vtkBooleanMacro(Scaling, vtkTypeBool); + //@} + + //@{ + /** + * Specify scale factor to scale object by. (Scale factor always affects + * output even if scaling is off.) + */ + vtkSetMacro(ScaleFactor, double); + vtkGetMacro(ScaleFactor, double); + //@} + + //@{ + /** + * Turn on/off drawing three glyphs + */ + vtkSetMacro(ThreeGlyphs, vtkTypeBool); + vtkGetMacro(ThreeGlyphs, vtkTypeBool); + vtkBooleanMacro(ThreeGlyphs, vtkTypeBool); + //@} + + //@{ + /** + * Turn on/off drawing a mirror of each glyph + */ + vtkSetMacro(Symmetric, vtkTypeBool); + vtkGetMacro(Symmetric, vtkTypeBool); + vtkBooleanMacro(Symmetric, vtkTypeBool); + //@} + + //@{ + /** + * Set/Get the distance, along x, from the origin to the end of the + * source glyph. It is used to draw the symmetric glyphs. + */ + vtkSetMacro(Length, double); + vtkGetMacro(Length, double); + //@} + + //@{ + /** + * Turn on/off extraction of eigenvalues from tensor. + */ + vtkSetMacro(ExtractEigenvalues, vtkTypeBool); + vtkBooleanMacro(ExtractEigenvalues, vtkTypeBool); + vtkGetMacro(ExtractEigenvalues, vtkTypeBool); + //@} + + //@{ + /** + * Turn on/off coloring of glyph with input scalar data or + * eigenvalues. If false, or input scalar data not present, then the + * scalars from the source object are passed through the filter. + */ + vtkSetMacro(ColorGlyphs, vtkTypeBool); + vtkGetMacro(ColorGlyphs, vtkTypeBool); + vtkBooleanMacro(ColorGlyphs, vtkTypeBool); + //@} + + enum + { + COLOR_BY_SCALARS, + COLOR_BY_EIGENVALUES + }; + + //@{ + /** + * Set the color mode to be used for the glyphs. This can be set to + * use the input scalars (default) or to use the eigenvalues at the + * point. If ThreeGlyphs is set and the eigenvalues are chosen for + * coloring then each glyph is colored by the corresponding + * eigenvalue and if not set the color corresponding to the largest + * eigenvalue is chosen. The recognized values are: + * COLOR_BY_SCALARS = 0 (default) + * COLOR_BY_EIGENVALUES = 1 + */ + vtkSetClampMacro(ColorMode, int, COLOR_BY_SCALARS, COLOR_BY_EIGENVALUES); + vtkGetMacro(ColorMode, int); + void SetColorModeToScalars() { this->SetColorMode(COLOR_BY_SCALARS); }; + void SetColorModeToEigenvalues() { this->SetColorMode(COLOR_BY_EIGENVALUES); }; + //@} + + //@{ + /** + * Turn on/off scalar clamping. If scalar clamping is on, the ivar + * MaxScaleFactor is used to control the maximum scale factor. (This is + * useful to prevent uncontrolled scaling near singularities.) + */ + vtkSetMacro(ClampScaling, vtkTypeBool); + vtkGetMacro(ClampScaling, vtkTypeBool); + vtkBooleanMacro(ClampScaling, vtkTypeBool); + //@} + + //@{ + /** + * Set/Get the maximum allowable scale factor. This value is compared to the + * combination of the scale factor times the eigenvalue. If less, the scale + * factor is reset to the MaxScaleFactor. The boolean ClampScaling has to + * be "on" for this to work. + */ + vtkSetMacro(MaxScaleFactor, double); + vtkGetMacro(MaxScaleFactor, double); + //@} + + protected: + vtkTensorGlyphColor(); + ~vtkTensorGlyphColor() override; + vtkTensorGlyphColor(const vtkTensorGlyphColor&) = delete; + void operator=(const vtkTensorGlyphColor&) = delete; + + int RequestUpdateExtent(vtkInformation*, vtkInformationVector**, + vtkInformationVector*) override; + int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override; + int FillInputPortInformation(int port, vtkInformation* info) override; + + vtkTypeBool Scaling; // Determine whether scaling of geometry is performed + double ScaleFactor; // Scale factor to use to scale geometry + vtkTypeBool ExtractEigenvalues; // Boolean controls eigenfunction extraction + vtkTypeBool ColorGlyphs; // Boolean controls coloring with input scalar data + int ColorMode; // The coloring mode to use for the glyphs. + vtkTypeBool ClampScaling; // Boolean controls whether scaling is clamped. + double MaxScaleFactor; // Maximum scale factor (ScaleFactor*eigenvalue) + vtkTypeBool ThreeGlyphs; // Boolean controls drawing 1 or 3 glyphs + vtkTypeBool Symmetric; // Boolean controls drawing a "mirror" of each glyph + double Length; // Distance, in x, from the origin to the end of the glyph +}; + +#endif diff --git a/source/visualization/Vtk/include/vtkTensorGlyphColor.h b/source/visualization/Vtk/include/vtkTensorGlyphColor.h deleted file mode 100644 index 9053156a4ab..00000000000 --- a/source/visualization/Vtk/include/vtkTensorGlyphColor.h +++ /dev/null @@ -1,261 +0,0 @@ -/*========================================================================= - - Program: Visualization Toolkit - Module: vtkTensorGlyphColor.h - - Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen - All rights reserved. - See Copyright.txt or http://www.kitware.com/Copyright.htm for details. - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notice for more information. - -=========================================================================*/ -/** - * @class vtkTensorGlyphColor - * @brief scale and orient glyph(s) according to eigenvalues and eigenvectors of symmetrical part of tensor - * - * vtkTensorGlyphColor is a filter that copies a geometric representation - * (specified as polygonal data) to every input point. The geometric - * representation, or glyph, can be scaled and/or rotated according to - * the tensor at the input point. Scaling and rotation is controlled - * by the eigenvalues/eigenvectors of the symmetrical part of the tensor - * as follows: - * For each tensor, the eigenvalues (and associated eigenvectors) are sorted - * to determine the major, medium, and minor eigenvalues/eigenvectors. - * The eigenvalue decomposition only makes sense for symmetric tensors, - * hence the need to only consider the symmetric part of the tensor, which is - * 1/2 (T + T.transposed()). - * - * If the boolean variable ThreeGlyphs is not set the major eigenvalue - * scales the glyph in the x-direction, the medium in the y-direction, - * and the minor in the z-direction. Then, the glyph is rotated so - * that the glyph's local x-axis lies along the major eigenvector, - * y-axis along the medium eigenvector, and z-axis along the minor. - * - * If the boolean variable ThreeGlyphs is set three glyphs are produced, - * each of them oriented along an eigenvector and scaled according to the - * corresponding eigenvector. - * - * If the boolean variable Symmetric is set each glyph is mirrored (2 or 6 - * glyphs will be produced) - * - * The x-axis of the source glyph will correspond to the eigenvector - * on output. Point (0,0,0) in the source will be placed in the data point. - * Variable Length will normally correspond to the distance from the - * origin to the tip of the source glyph along the x-axis, - * but can be changed to produce other results when Symmetric is on, - * e.g. glyphs that do not touch or that overlap. - * - * Please note that when Symmetric is false it will generally be better - * to place the source glyph from (-0.5,0,0) to (0.5,0,0), i.e. centred - * at the origin. When symmetric is true the placement from (0,0,0) to - * (1,0,0) will generally be more convenient. - * - * A scale factor is provided to control the amount of scaling. Also, you - * can turn off scaling completely if desired. The boolean variable - * ClampScaling controls the maximum scaling (in conjunction with - * MaxScaleFactor.) This is useful in certain applications where - * singularities or large order of magnitude differences exist in - * the eigenvalues. - * - * If the boolean variable ColorGlyphs is set to true the glyphs are - * colored. The glyphs can be colored using the input scalars - * (SetColorModeToScalars), which is the default, or colored using the - * eigenvalues (SetColorModeToEigenvalues). - * - * Another instance variable, ExtractEigenvalues, has been provided to - * control extraction of eigenvalues/eigenvectors. If this boolean is - * false, then eigenvalues/eigenvectors are not extracted, and the - * columns of the tensor are taken as the eigenvectors (the norm of - * column, always positive, is the eigenvalue). This allows - * additional capability over the vtkGlyph3D object. That is, the - * glyph can be oriented in three directions instead of one. - * - * @par Thanks: - * Thanks to Jose Paulo Moitinho de Almeida for enhancements. - * - * @sa - * vtkGlyph3D vtkPointLoad vtkHyperStreamline -*/ - -#ifndef vtkTensorGlyphColor_h -#define vtkTensorGlyphColor_h - -#include "vtkFiltersCoreModule.h" // For export macro -#include "vtkPolyDataAlgorithm.h" - -class VTKFILTERSCORE_EXPORT vtkTensorGlyphColor : public vtkPolyDataAlgorithm -{ -public: - vtkTypeMacro(vtkTensorGlyphColor,vtkPolyDataAlgorithm) - void PrintSelf(ostream& os, vtkIndent indent) override; - - /** - * Construct object with scaling on and scale factor 1.0. Eigenvalues are - * extracted, glyphs are colored with input scalar data, and logarithmic - * scaling is turned off. - */ - static vtkTensorGlyphColor *New(); - - //@{ - /** - * Specify the geometry to copy to each point. - * Note that this method does not connect the pipeline. The algorithm will - * work on the input data as it is without updating the producer of the data. - * See SetSourceConnection for connecting the pipeline. - */ - void SetSourceData(vtkPolyData *source); - vtkPolyData *GetSource(); - //@} - - //@{ - /** - * Specify a source object at a specified table location. New style. - * Source connection is stored in port 1. This method is equivalent - * to SetInputConnection(1, id, outputPort). - */ - void SetSourceConnection(int id, vtkAlgorithmOutput* algOutput); - void SetSourceConnection(vtkAlgorithmOutput* algOutput) - { - this->SetSourceConnection(0, algOutput); - } - //@} - - //@{ - /** - * Turn on/off scaling of glyph with eigenvalues. - */ - vtkSetMacro(Scaling,vtkTypeBool); - vtkGetMacro(Scaling,vtkTypeBool); - vtkBooleanMacro(Scaling,vtkTypeBool); - //@} - - //@{ - /** - * Specify scale factor to scale object by. (Scale factor always affects - * output even if scaling is off.) - */ - vtkSetMacro(ScaleFactor,double); - vtkGetMacro(ScaleFactor,double); - //@} - - //@{ - /** - * Turn on/off drawing three glyphs - */ - vtkSetMacro(ThreeGlyphs,vtkTypeBool); - vtkGetMacro(ThreeGlyphs,vtkTypeBool); - vtkBooleanMacro(ThreeGlyphs,vtkTypeBool); - //@} - - //@{ - /** - * Turn on/off drawing a mirror of each glyph - */ - vtkSetMacro(Symmetric,vtkTypeBool); - vtkGetMacro(Symmetric,vtkTypeBool); - vtkBooleanMacro(Symmetric,vtkTypeBool); - //@} - - //@{ - /** - * Set/Get the distance, along x, from the origin to the end of the - * source glyph. It is used to draw the symmetric glyphs. - */ - vtkSetMacro(Length,double); - vtkGetMacro(Length,double); - //@} - - //@{ - /** - * Turn on/off extraction of eigenvalues from tensor. - */ - vtkSetMacro(ExtractEigenvalues,vtkTypeBool); - vtkBooleanMacro(ExtractEigenvalues,vtkTypeBool); - vtkGetMacro(ExtractEigenvalues,vtkTypeBool); - //@} - - //@{ - /** - * Turn on/off coloring of glyph with input scalar data or - * eigenvalues. If false, or input scalar data not present, then the - * scalars from the source object are passed through the filter. - */ - vtkSetMacro(ColorGlyphs,vtkTypeBool); - vtkGetMacro(ColorGlyphs,vtkTypeBool); - vtkBooleanMacro(ColorGlyphs,vtkTypeBool); - //@} - - enum - { - COLOR_BY_SCALARS, - COLOR_BY_EIGENVALUES - }; - - //@{ - /** - * Set the color mode to be used for the glyphs. This can be set to - * use the input scalars (default) or to use the eigenvalues at the - * point. If ThreeGlyphs is set and the eigenvalues are chosen for - * coloring then each glyph is colored by the corresponding - * eigenvalue and if not set the color corresponding to the largest - * eigenvalue is chosen. The recognized values are: - * COLOR_BY_SCALARS = 0 (default) - * COLOR_BY_EIGENVALUES = 1 - */ - vtkSetClampMacro(ColorMode, int, COLOR_BY_SCALARS, COLOR_BY_EIGENVALUES); - vtkGetMacro(ColorMode, int); - void SetColorModeToScalars() - {this->SetColorMode(COLOR_BY_SCALARS);}; - void SetColorModeToEigenvalues() - {this->SetColorMode(COLOR_BY_EIGENVALUES);}; - //@} - - //@{ - /** - * Turn on/off scalar clamping. If scalar clamping is on, the ivar - * MaxScaleFactor is used to control the maximum scale factor. (This is - * useful to prevent uncontrolled scaling near singularities.) - */ - vtkSetMacro(ClampScaling,vtkTypeBool); - vtkGetMacro(ClampScaling,vtkTypeBool); - vtkBooleanMacro(ClampScaling,vtkTypeBool); - //@} - - //@{ - /** - * Set/Get the maximum allowable scale factor. This value is compared to the - * combination of the scale factor times the eigenvalue. If less, the scale - * factor is reset to the MaxScaleFactor. The boolean ClampScaling has to - * be "on" for this to work. - */ - vtkSetMacro(MaxScaleFactor,double); - vtkGetMacro(MaxScaleFactor,double); - //@} - -protected: - vtkTensorGlyphColor(); - ~vtkTensorGlyphColor() override; - - int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override; - int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override; - int FillInputPortInformation(int port, vtkInformation *info) override; - - vtkTypeBool Scaling; // Determine whether scaling of geometry is performed - double ScaleFactor; // Scale factor to use to scale geometry - vtkTypeBool ExtractEigenvalues; // Boolean controls eigenfunction extraction - vtkTypeBool ColorGlyphs; // Boolean controls coloring with input scalar data - int ColorMode; // The coloring mode to use for the glyphs. - vtkTypeBool ClampScaling; // Boolean controls whether scaling is clamped. - double MaxScaleFactor; // Maximum scale factor (ScaleFactor*eigenvalue) - vtkTypeBool ThreeGlyphs; // Boolean controls drawing 1 or 3 glyphs - vtkTypeBool Symmetric; // Boolean controls drawing a "mirror" of each glyph - double Length; // Distance, in x, from the origin to the end of the glyph -private: - vtkTensorGlyphColor(const vtkTensorGlyphColor&) = delete; - void operator=(const vtkTensorGlyphColor&) = delete; -}; - -#endif diff --git a/source/visualization/Vtk/sources.cmake b/source/visualization/Vtk/sources.cmake index 8bab9c9b27d..d0816452d23 100644 --- a/source/visualization/Vtk/sources.cmake +++ b/source/visualization/Vtk/sources.cmake @@ -3,35 +3,84 @@ geant4_add_module(G4visVtk PUBLIC_HEADERS G4Vtk.hh + PRIVATE_HEADERS + G4VtkUtility.hh G4VtkMessenger.hh G4VtkSceneHandler.hh G4VtkViewer.hh + G4VtkInteractorStyle.hh + G4VtkStore.hh + G4VtkVisContext.hh + G4VVtkPipeline.hh + G4VtkCutterPipeline.hh + G4VtkClipClosedSurfacePipeline.hh + G4VtkClipOpenPipeline.hh + #G4VtkClipperClosedPipeline.hh + G4VtkImagePipeline.hh + G4VtkPolydataPipeline.hh + G4VtkPolydataInstancePipeline.hh + G4VtkPolydataInstanceTensorPipeline.hh + G4VtkPolydataInstanceAppendPipeline.hh + G4VtkPolydataInstanceBakePipeline.hh + G4VtkPolydataPolylinePipeline.hh + G4VtkPolydataPolyline2DPipeline.hh + G4VtkPolydataSpherePipeline.hh + G4VtkPolydataCubePipeline.hh + G4VtkPolydataPolygonPipeline.hh + G4VtkTextPipeline.hh + G4VtkText2DPipeline.hh + G4VtkStructuredGridPipeline.hh + G4VtkUnstructuredGridPipeline.hh vtkTensorGlyphColor.h + SOURCES G4Vtk.cc + G4VtkUtility.cc G4VtkMessenger.cc G4VtkSceneHandler.cc G4VtkViewer.cc + G4VtkInteractorStyle.cc + G4VtkStore.cc + G4VtkCutterPipeline.cc + G4VtkClipClosedSurfacePipeline.cc + G4VtkClipOpenPipeline.cc + #G4VtkClipperClosedPipeline.cc + G4VtkImagePipeline.cc + G4VtkPolydataPipeline.cc + G4VtkPolydataInstancePipeline.cc + G4VtkPolydataInstanceTensorPipeline.cc + G4VtkPolydataInstanceAppendPipeline.cc + G4VtkPolydataInstanceBakePipeline.cc + G4VtkPolydataPolylinePipeline.cc + G4VtkPolydataPolyline2DPipeline.cc + G4VtkPolydataSpherePipeline.cc + G4VtkPolydataPolygonPipeline.cc + G4VtkTextPipeline.cc + G4VtkText2DPipeline.cc + G4VtkUnstructuredGridPipeline.cc vtkTensorGlyphColor.cxx) +geant4_module_compile_definitions(G4visVtk PUBLIC G4VIS_USE_VTK) + geant4_module_link_libraries(G4visVtk PUBLIC - G4intercoms G4vis_management - ${VTK_LIBRARIES} PRIVATE G4csg G4geometrymng G4globman G4graphics_reps + G4intercoms G4materials - G4modeling) + G4modeling + ${VTK_LIBRARIES}) # - VTK-Qt if Qt enabled if(GEANT4_USE_QT) geant4_module_sources(G4visVtk PUBLIC_HEADERS G4VtkQt.hh + PRIVATE_HEADERS G4VtkQtSceneHandler.hh G4VtkQtViewer.hh SOURCES @@ -39,6 +88,7 @@ if(GEANT4_USE_QT) G4VtkQtSceneHandler.cc G4VtkQtViewer.cc) - geant4_module_link_libraries(G4visVtk PRIVATE G4UIbasic G4UIcommon) + geant4_module_compile_definitions(G4visVtk PUBLIC G4VIS_USE_VTK_QT) + geant4_module_link_libraries(G4visVtk PRIVATE G4UIimplementation) endif() diff --git a/source/visualization/Vtk/src/G4Vtk.cc b/source/visualization/Vtk/src/G4Vtk.cc index d99f3550b17..da903bf16c8 100644 --- a/source/visualization/Vtk/src/G4Vtk.cc +++ b/source/visualization/Vtk/src/G4Vtk.cc @@ -25,44 +25,39 @@ // // // -// +// // John Allison 5th April 2001 // A template for a simplest possible graphics driver. //?? Lines or sections marked like this require specialisation for your driver. #include "G4Vtk.hh" + +#include "G4VtkMessenger.hh" #include "G4VtkSceneHandler.hh" #include "G4VtkViewer.hh" -#include "G4VtkMessenger.hh" -G4Vtk::G4Vtk(): G4VGraphicsSystem("VtkNative","VTKN","Vtk with native windowing", - G4VGraphicsSystem::noFunctionality) +G4Vtk::G4Vtk() + : G4VGraphicsSystem("VtkNative", "VTKN", "Vtk with native windowing", + G4VGraphicsSystem::noFunctionality) { G4VtkMessenger::GetInstance(); } -G4Vtk::~G4Vtk() {} - -G4VSceneHandler* G4Vtk::CreateSceneHandler(const G4String& name) { - G4VSceneHandler* pScene = new G4VtkSceneHandler(*this, name); - return pScene; +G4VSceneHandler* G4Vtk::CreateSceneHandler(const G4String& name) +{ + return new G4VtkSceneHandler(*this, name); } -G4VViewer* G4Vtk::CreateViewer(G4VSceneHandler& scene, - const G4String& name) { - G4VViewer* pView = new G4VtkViewer((G4VtkSceneHandler&) scene, name); - if (pView) { - if (pView->GetViewId() < 0) { - G4cerr << "G4Vtk::CreateViewer: ERROR flagged by negative" - " view id in G4VtkViewer creation." - "\n Destroying view and returning null pointer." - << G4endl; - delete pView; - pView = 0; - } - } - else { - G4cerr << "G4Vtk::CreateViewer: ERROR: null pointer on new G4VtkViewer." << G4endl; +G4VViewer* G4Vtk::CreateViewer(G4VSceneHandler& scene, const G4String& name) +{ + G4VViewer* pView = new G4VtkViewer((G4VtkSceneHandler&)scene, name); + if (pView->GetViewId() < 0) { + G4cerr << "G4Vtk::CreateViewer: ERROR flagged by negative" + " view id in G4VtkViewer creation." + "\n Destroying view and returning null pointer." + << G4endl; + delete pView; + pView = nullptr; } return pView; } diff --git a/source/visualization/Vtk/src/G4VtkClipClosedSurfacePipeline.cc b/source/visualization/Vtk/src/G4VtkClipClosedSurfacePipeline.cc new file mode 100644 index 00000000000..3968db01527 --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkClipClosedSurfacePipeline.cc @@ -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. * +// ******************************************************************** + +#include "G4VtkClipClosedSurfacePipeline.hh" + +#include "G4VtkViewer.hh" +#include "G4VtkVisContext.hh" + +#include "vtkActor.h" +#include "vtkClipPolyData.h" +#include "vtkPlane.h" +#include "vtkPlaneCollection.h" +#include "vtkPolyDataAlgorithm.h" +#include "vtkPolyDataMapper.h" +#include "vtkPolyDataNormals.h" +#include "vtkProperty.h" +#include "vtkSmartPointer.h" +#include + +G4VtkClipClosedSurfacePipeline::G4VtkClipClosedSurfacePipeline( + G4String nameIn, const G4VtkVisContext& vc, vtkSmartPointer filter, + G4bool useVcColour) + : G4VVtkPipeline(nameIn, G4String("G4VtkClipClosedSurfacePipeline"), vc, true, + vc.fViewer->renderer) +{ + // create implicit function for clipping + plane = vtkSmartPointer::New(); + plane->SetOrigin(0, 0, 0); + plane->SetNormal(0, 1, 0); + + vtkNew planes; + planes->AddItem(plane); + + // clipper + clipper = vtkSmartPointer::New(); + clipper->SetClippingPlanes(planes); + clipper->SetInputConnection(filter->GetOutputPort()); + // clipper->SetScalarModeToColors(); + clipper->PassPointDataOn(); + + // calculate normals with a feature angle of 45 degrees + auto filterNormals = vtkSmartPointer::New(); + filterNormals->SetFeatureAngle(45); + filterNormals->SetInputConnection(clipper->GetOutputPort()); + + // mapper + mapper = vtkSmartPointer::New(); + mapper->SetInputConnection(filterNormals->GetOutputPort()); + mapper->SetColorModeToDirectScalars(); + mapper->ScalarVisibilityOn(); + mapper->SetResolveCoincidentTopologyToPolygonOffset(); + mapper->SetRelativeCoincidentTopologyPolygonOffsetParameters(1, -vc.fDepth); + + // add to actor + actor = vtkSmartPointer::New(); + actor->SetMapper(mapper); + actor->SetVisibility(1); + + // colour parameters + if (useVcColour) { + actor->GetProperty()->SetOpacity(vc.alpha); + actor->GetProperty()->SetColor(vc.red, vc.green, vc.blue); + } + + // set actor properties from vis context + if (vc.fDrawingStyle == G4ViewParameters::hsr) { + actor->GetProperty()->SetRepresentationToSurface(); + } + else if (vc.fDrawingStyle == G4ViewParameters::hlr) { + actor->GetProperty()->SetRepresentationToSurface(); + } + else if (vc.fDrawingStyle == G4ViewParameters::wireframe) { + actor->GetProperty()->SetRepresentationToWireframe(); + } + + // shading parameters + actor->GetProperty()->SetAmbient(0.2); + actor->GetProperty()->SetDiffuse(0.7); + actor->GetProperty()->SetSpecular(0.1); + actor->GetProperty()->SetSpecularPower(1); + + // add to renderer + vc.fViewer->renderer->AddActor(actor); +} + +void G4VtkClipClosedSurfacePipeline::SetPlane(const G4Plane3D& planeIn) +{ + auto normal = planeIn.normal(); + auto point = planeIn.point(); + this->SetPlane(point.x(), point.y(), point.z(), normal.x(), normal.y(), normal.z()); +} + +void G4VtkClipClosedSurfacePipeline::SetPlane(G4double x, G4double y, G4double z, G4double nx, + G4double ny, G4double nz) +{ + plane->SetOrigin(x, y, z); + plane->SetNormal(nx, ny, nz); + this->Modified(); +} + +void G4VtkClipClosedSurfacePipeline::TransformPlane(G4double dx, G4double dy, G4double dz, + G4double r00, G4double r01, G4double r02, + G4double r10, G4double r11, G4double r12, + G4double r20, G4double r21, G4double r22) +{ + auto o = plane->GetOrigin(); + auto n = plane->GetNormal(); + + SetPlane(r00 * o[0] + r01 * o[1] + r02 * o[2] + dx, r10 * o[0] + r11 * o[1] + r12 * o[2] + dy, + r20 * o[0] + r21 * o[1] + r22 * o[2] + dz, r00 * n[0] + r01 * n[1] + r02 * n[2], + r10 * n[0] + r11 * n[1] + r12 * n[2], r20 * n[0] + r21 * n[1] + r22 * n[2]); +} + +void G4VtkClipClosedSurfacePipeline::Enable() +{ + actor->SetVisibility(1); +} +void G4VtkClipClosedSurfacePipeline::Disable() +{ + actor->SetVisibility(0); +} \ No newline at end of file diff --git a/source/visualization/Vtk/src/G4VtkClipOpenPipeline.cc b/source/visualization/Vtk/src/G4VtkClipOpenPipeline.cc new file mode 100644 index 00000000000..ba3c8883668 --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkClipOpenPipeline.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. * +// ******************************************************************** + +#include "G4VtkClipOpenPipeline.hh" + +#include "G4VtkViewer.hh" +#include "G4VtkVisContext.hh" + +#include "vtkActor.h" +#include "vtkClipPolyData.h" +#include "vtkPlane.h" +#include "vtkPolyDataAlgorithm.h" +#include "vtkPolyDataMapper.h" +#include "vtkPolyDataNormals.h" +#include "vtkProperty.h" +#include "vtkSmartPointer.h" +#include + +G4VtkClipOpenPipeline::G4VtkClipOpenPipeline(G4String nameIn, const G4VtkVisContext& vc, + vtkSmartPointer filter, + G4bool useVcColour) + : G4VVtkPipeline(nameIn, G4String("G4VtkClipOpenPipeline"), vc, true, vc.fViewer->renderer) +{ + // create implicit function for clipping + plane = vtkSmartPointer::New(); + plane->SetOrigin(0, 0, 0); + plane->SetNormal(-1, 0, 0); + + // clipper + clipper = vtkSmartPointer::New(); + clipper->SetClipFunction(plane); + clipper->SetInputConnection(filter->GetOutputPort()); + // clipper->SetScalarModeToColors(); + // clipper->PassPointDataOn(); + + // calculate normals with a feature angle of 45 degrees + auto filterNormals = vtkSmartPointer::New(); + filterNormals->SetFeatureAngle(45); + filterNormals->SetInputConnection(clipper->GetOutputPort()); + + // mapper + mapper = vtkSmartPointer::New(); + mapper->SetInputConnection(filterNormals->GetOutputPort()); + mapper->SetColorModeToDirectScalars(); + mapper->ScalarVisibilityOn(); + + // add to actor + actor = vtkSmartPointer::New(); + actor->SetMapper(mapper); + actor->SetVisibility(1); + + // colour parameters + if (useVcColour) { + actor->GetProperty()->SetOpacity(vc.alpha); + actor->GetProperty()->SetColor(vc.red, vc.green, vc.blue); + } + + // set actor properties from vis context + if (vc.fDrawingStyle == G4ViewParameters::hsr) { + } + else if (vc.fDrawingStyle == G4ViewParameters::hlr) { + } + else if (vc.fDrawingStyle == G4ViewParameters::wireframe) { + actor->GetProperty()->SetRepresentationToWireframe(); + } + + // shading parameters + actor->GetProperty()->SetAmbient(0.2); + actor->GetProperty()->SetDiffuse(0.7); + actor->GetProperty()->SetSpecular(0.1); + actor->GetProperty()->SetSpecularPower(1); + + // add to renderer + vc.fViewer->renderer->AddActor(actor); +} + +void G4VtkClipOpenPipeline::SetPlane(G4Plane3D& planeIn) +{ + auto normal = planeIn.normal(); + auto point = planeIn.point(); + this->SetPlane(point.x(), point.y(), point.z(), normal.x(), normal.y(), normal.z()); +} + +void G4VtkClipOpenPipeline::SetPlane(G4double x, G4double y, G4double z, G4double nx, G4double ny, + G4double nz) +{ + plane->SetOrigin(x, y, z); + plane->SetNormal(nx, ny, nz); + Modified(); +} + +void G4VtkClipOpenPipeline::TransformPlane(G4double dx, G4double dy, G4double dz, G4double r00, + G4double r01, G4double r02, G4double r10, G4double r11, + G4double r12, G4double r20, G4double r21, G4double r22) +{ + auto o = plane->GetOrigin(); + auto n = plane->GetNormal(); + + SetPlane(r00 * o[0] + r01 * o[1] + r02 * o[2] + dx, r10 * o[0] + r11 * o[1] + r12 * o[2] + dy, + r20 * o[0] + r21 * o[1] + r22 * o[2] + dz, r00 * n[0] + r01 * n[1] + r02 * n[2], + r10 * n[0] + r11 * n[1] + r12 * n[2], r20 * n[0] + r21 * n[1] + r22 * n[2]); +} + +void G4VtkClipOpenPipeline::Enable() +{ + actor->SetVisibility(1); +} +void G4VtkClipOpenPipeline::Disable() +{ + actor->SetVisibility(0); +} \ No newline at end of file diff --git a/source/visualization/Vtk/src/G4VtkClipperClosedPipeline.cc b/source/visualization/Vtk/src/G4VtkClipperClosedPipeline.cc new file mode 100644 index 00000000000..affa7337a72 --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkClipperClosedPipeline.cc @@ -0,0 +1,106 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#include "G4VtkClipperClosedPipeline.hh" + +#include "vtkActor.h" +#include "vtkAppendPolyData.h" +#include "vtkClipPolyData.h" +#include "vtkFeatureEdges.h" +#include "vtkPlane.h" +#include "vtkPolyDataAlgorithm.h" +#include "vtkPolyDataMapper.h" +#include "vtkPolyDataNormals.h" +#include "vtkSmartPointer.h" +#include "vtkStripper.h" +#include "vtkTriangleFilter.h" + +G4VtkClipperClosedPipeline::G4VtkClipperClosedPipeline( + vtkSmartPointer filterIn) +{ + finalFilter = filterIn; + + // create implicit function for clipping + plane = vtkSmartPointer::New(); + plane->SetOrigin(0, 0, 0); + plane->SetNormal(1, 0, 0); + + // clipper + clipper = vtkSmartPointer::New(); + clipper->SetClipFunction(plane); + clipper->SetInputConnection(finalFilter->GetOutputPort()); + + // calculate normals with a feature angle of 45 degrees + auto filterNormals = vtkSmartPointer::New(); + filterNormals->SetFeatureAngle(45); + filterNormals->SetInputConnection(clipper->GetOutputPort()); + + // boundary edges + auto boundaryEdges = vtkSmartPointer::New(); + boundaryEdges->SetInputConnection(clipper->GetOutputPort()); + boundaryEdges->BoundaryEdgesOn(); + boundaryEdges->FeatureEdgesOff(); + boundaryEdges->NonManifoldEdgesOff(); + boundaryEdges->ManifoldEdgesOff(); + + // boundary strips + auto boundaryStrips = vtkSmartPointer::New(); + boundaryStrips->SetInputConnection(boundaryEdges->GetOutputPort()); + + // boundary polygon + auto boundaryPoly = vtkSmartPointer::New(); + boundaryPoly->SetPoints(boundaryStrips->GetOutput()->GetPoints()); + boundaryPoly->SetPolys(boundaryStrips->GetOutput()->GetLines()); + + // boundary triangle filter + auto boundaryTriangle = vtkSmartPointer::New(); + boundaryTriangle->AddInputData(boundaryPoly); + + // calculate normals with a feature angle of 45 degrees + auto boundaryNormals = vtkSmartPointer::New(); + boundaryNormals->SetFeatureAngle(45); + boundaryNormals->SetInputConnection(boundaryTriangle->GetOutputPort()); + + // append filter + appendFilter = vtkSmartPointer::New(); + appendFilter->AddInputConnection(boundaryNormals->GetOutputPort()); + appendFilter->AddInputConnection(filterNormals->GetOutputPort()); + + // mapper + mapper = vtkSmartPointer::New(); + mapper->SetInputConnection(appendFilter->GetOutputPort()); + mapper->SetColorModeToDirectScalars(); + mapper->ScalarVisibilityOn(); + + // add to actor + actor = vtkSmartPointer::New(); + actor->SetMapper(mapper); + actor->SetVisibility(1); +} + +void G4VtkClipperClosedPipeline::Modified() +{ + appendFilter->Update(); +}; diff --git a/source/visualization/Vtk/src/G4VtkCutterPipeline.cc b/source/visualization/Vtk/src/G4VtkCutterPipeline.cc new file mode 100644 index 00000000000..10fd00ca00c --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkCutterPipeline.cc @@ -0,0 +1,118 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#include "G4VtkCutterPipeline.hh" + +#include "G4String.hh" +#include "G4VtkViewer.hh" +#include "G4VtkVisContext.hh" + +#include "vtkActor.h" +#include "vtkCutter.h" +#include "vtkPlane.h" +#include "vtkPolyDataAlgorithm.h" +#include "vtkPolyDataMapper.h" +#include "vtkProperty.h" +#include "vtkSmartPointer.h" + +G4VtkCutterPipeline::G4VtkCutterPipeline(G4String nameIn, const G4VtkVisContext& vc, + vtkSmartPointer filter, + G4bool useVcColour) + : G4VVtkPipeline(nameIn, G4String("G4VtkCutterPipeline"), vc, false, vc.fViewer->renderer) +{ + // cutter plane + plane = vtkSmartPointer::New(); + plane->SetOrigin(0, 0, 0); + plane->SetNormal(0, 1, 0); + + // cutter + cutter = vtkSmartPointer::New(); + cutter->SetCutFunction(plane); + cutter->SetInputConnection(filter->GetOutputPort()); + + // mapper + mapper = vtkSmartPointer::New(); + mapper->SetInputConnection(cutter->GetOutputPort()); + mapper->SetColorModeToDirectScalars(); + mapper->ScalarVisibilityOn(); + + // add to actor + actor = vtkSmartPointer::New(); + actor->SetMapper(mapper); + actor->SetVisibility(1); + + // want the actor not to have shading + actor->GetProperty()->SetAmbient(1); + actor->GetProperty()->SetDiffuse(1); + actor->GetProperty()->SetSpecular(0.0); + actor->GetProperty()->SetSpecularPower(0); + + actor->GetProperty()->SetLineWidth(10); + + // colour parameters + if (useVcColour) { + actor->GetProperty()->SetOpacity(vc.alpha); + actor->GetProperty()->SetColor(vc.red, vc.green, vc.blue); + } + + // add to renderer + vc.fViewer->renderer->AddActor(actor); +} + +void G4VtkCutterPipeline::SetPlane(const G4Plane3D& planeIn) +{ + auto normal = planeIn.normal(); + auto point = planeIn.point(); + this->SetPlane(point.x(), point.y(), point.z(), normal.x(), normal.y(), normal.z()); +} + +void G4VtkCutterPipeline::SetPlane(G4double x, G4double y, G4double z, G4double nx, G4double ny, + G4double nz) +{ + plane->SetOrigin(x, y, z); + plane->SetNormal(nx, ny, nz); + Modified(); +} + +void G4VtkCutterPipeline::TransformPlane(G4double dx, G4double dy, G4double dz, G4double r00, + G4double r01, G4double r02, G4double r10, G4double r11, + G4double r12, G4double r20, G4double r21, G4double r22) +{ + auto o = plane->GetOrigin(); + auto n = plane->GetNormal(); + + SetPlane(r00 * o[0] + r01 * o[1] + r02 * o[2] + dx, r10 * o[0] + r11 * o[1] + r12 * o[2] + dy, + r20 * o[0] + r21 * o[1] + r22 * o[2] + dz, r00 * n[0] + r01 * n[1] + r02 * n[2], + r10 * n[0] + r11 * n[1] + r12 * n[2], r20 * n[0] + r21 * n[1] + r22 * n[2]); +} + +void G4VtkCutterPipeline::Enable() +{ + actor->SetVisibility(1); +} +void G4VtkCutterPipeline::Disable() +{ + actor->SetVisibility(0); +} \ No newline at end of file diff --git a/source/visualization/Vtk/src/G4VtkImagePipeline.cc b/source/visualization/Vtk/src/G4VtkImagePipeline.cc new file mode 100644 index 00000000000..5969acd2c45 --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkImagePipeline.cc @@ -0,0 +1,140 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#include "G4VtkImagePipeline.hh" + +#include "G4String.hh" +#include "G4ViewParameters.hh" +#include "G4VisAttributes.hh" +#include "G4VtkViewer.hh" +#include "G4VtkVisContext.hh" + +#include "vtkImageActor.h" +#include "vtkImageAlgorithm.h" +#include "vtkImageMapper3D.h" +#include "vtkImageProperty.h" +#include "vtkImageReader2.h" +#include "vtkImageReader2Factory.h" +#include "vtkMatrix4x4.h" +#include "vtkSmartPointer.h" + +G4VtkImagePipeline::G4VtkImagePipeline(const G4String& nameIn, const G4VtkVisContext& vcIn) + : G4VVtkPipeline(nameIn, "G4VtkImagePipeline", vcIn, false, vcIn.fViewer->renderer) +{ + actor = vtkSmartPointer::New(); + + actor->GetProperty()->SetOpacity(vc.alpha); + + auto transform = vtkSmartPointer::New(); + double transformArray[16] = {vc.fTransform.xx(), + vc.fTransform.xy(), + vc.fTransform.xz(), + vc.fTransform.dx(), + vc.fTransform.yx(), + vc.fTransform.yy(), + vc.fTransform.yz(), + vc.fTransform.dy(), + vc.fTransform.zx(), + vc.fTransform.zy(), + vc.fTransform.zz(), + vc.fTransform.dz(), + 0., + 0., + 0., + 1.}; + transform->DeepCopy(transformArray); + actor->SetUserMatrix(transform); + + vc.fViewer->renderer->AddActor(GetActor()); +} + +void G4VtkImagePipeline::SetImage(const G4String& fileName) +{ + vtkNew readerFactory; + vtkSmartPointer imageReader; + imageReader.TakeReference(readerFactory->CreateImageReader2(fileName.c_str())); + imageReader->SetFileName(fileName.c_str()); + imageReader->Update(); + + actor->GetMapper()->SetInputConnection(imageReader->GetOutputPort()); + AddFilter(imageReader); +} + +void G4VtkImagePipeline::SetTransformation(const G4Transform3D& transformation) +{ + vtkSmartPointer t = vtkSmartPointer::New(); + t->SetElement(0, 0, transformation.xx()); + t->SetElement(0, 1, transformation.xy()); + t->SetElement(0, 2, transformation.xz()); + t->SetElement(0, 3, transformation.dx()); + + t->SetElement(1, 0, transformation.yx()); + t->SetElement(1, 1, transformation.yy()); + t->SetElement(1, 2, transformation.yz()); + t->SetElement(1, 3, transformation.dy()); + + t->SetElement(2, 0, transformation.zx()); + t->SetElement(2, 1, transformation.zy()); + t->SetElement(2, 2, transformation.zz()); + t->SetElement(2, 3, transformation.dz()); + + t->SetElement(3, 0, 0); + t->SetElement(3, 1, 0); + t->SetElement(3, 2, 0); + t->SetElement(3, 3, 1); + actor->SetUserMatrix(t); +} + +void G4VtkImagePipeline::Print() +{ + for (auto c : childPipelines) + c->Print(); +} + +void G4VtkImagePipeline::Modified() +{ + actor->Update(); + + for (auto c : childPipelines) + c->Modified(); +} + +void G4VtkImagePipeline::Clear() +{ + if (actor != nullptr) renderer->RemoveActor(actor); + + for (auto c : childPipelines) + c->Clear(); +} + +void G4VtkImagePipeline::Disable() +{ + GetActor()->SetVisibility(0); +} + +void G4VtkImagePipeline::Enable() +{ + GetActor()->SetVisibility(1); +} \ No newline at end of file diff --git a/source/visualization/Vtk/src/G4VtkInteractorStyle.cc b/source/visualization/Vtk/src/G4VtkInteractorStyle.cc new file mode 100644 index 00000000000..69a8517a382 --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkInteractorStyle.cc @@ -0,0 +1,28 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#include "G4VtkInteractorStyle.hh" + +vtkStandardNewMacro(G4VtkInteractorStyle); \ No newline at end of file diff --git a/source/visualization/Vtk/src/G4VtkMessenger.cc b/source/visualization/Vtk/src/G4VtkMessenger.cc index ffa2786e8f6..57c82547aa3 100644 --- a/source/visualization/Vtk/src/G4VtkMessenger.cc +++ b/source/visualization/Vtk/src/G4VtkMessenger.cc @@ -24,16 +24,16 @@ // ******************************************************************** #include "G4VtkMessenger.hh" -#include "G4VtkViewer.hh" -#include "G4UIdirectory.hh" +#include "G4Tokenizer.hh" #include "G4UIcmdWithABool.hh" #include "G4UIcmdWithAString.hh" #include "G4UIcmdWithoutParameter.hh" #include "G4UIcommand.hh" -#include "G4Tokenizer.hh" - +#include "G4UIdirectory.hh" #include "G4VisManager.hh" +#include "G4VtkSceneHandler.hh" +#include "G4VtkViewer.hh" #include "vtkObject.h" @@ -41,91 +41,296 @@ G4VtkMessenger* G4VtkMessenger::fpInstance = nullptr; G4VtkMessenger* G4VtkMessenger::GetInstance() { - if (!fpInstance) fpInstance = new G4VtkMessenger; + if (fpInstance == nullptr) fpInstance = new G4VtkMessenger; return fpInstance; } -G4VtkMessenger::G4VtkMessenger() { +G4VtkMessenger::G4VtkMessenger() +{ G4bool omitable; - fpDirectory = new G4UIdirectory("/vis/vtk/"); + /***************************** Vtk directory *****************************/ + fpDirectory = new G4UIdirectory("/vis/vtk/", true); fpDirectory->SetGuidance("G4VtkViewer commands."); + // Clear non-G4 + fpCommandClearNonG4 = new G4UIcommand("/vis/vtk/clearNonG4", this); + fpCommandClearNonG4->SetGuidance("Clear non G4 objects from visualisation (image/3d overlays"); + // Export command fpCommandExport = new G4UIcommand("/vis/vtk/export", this); - fpCommandExport->SetGuidance ("Export a screenshot or OBJ file of current Vtk viewer"); + fpCommandExport->SetGuidance("Export a screenshot or OBJ file of current Vtk viewer"); // File type for export - auto parameterExport = new G4UIparameter ("name", 's', omitable = true); - fpCommandExport->SetGuidance ("File type (jpg,tiff,eps,ps,obj,vrml)"); + auto parameterExport = new G4UIparameter("format", 's', omitable = true); + fpCommandExport->SetGuidance("File type (jpg,tiff,eps,ps,obj,vtp,gltf,vrml)"); fpCommandExport->SetParameter(parameterExport); // File name for export - parameterExport = new G4UIparameter ("name", 's', omitable = true); - fpCommandExport->SetGuidance ("File name"); + parameterExport = new G4UIparameter("file-name", 's', omitable = true); + fpCommandExport->SetGuidance("File name"); fpCommandExport->SetParameter(parameterExport); + // Export cutter command + fpCommandExportCutter = new G4UIcommand("/vis/vtk/exportCutter", this); + fpCommandExportCutter->SetGuidance("Export a VTP file of the cutters if they exist"); + + // File name for export + auto parameterExportCutter = new G4UIparameter("file-name", 's', omitable = true); + parameterExportCutter->SetGuidance("File name"); + parameterExportCutter->SetDefaultValue("cutter.vtp"); + fpCommandExportCutter->SetParameter(parameterExportCutter); + + // Vtk debug print + fpCommandDebugPrint = new G4UIcommand("/vis/vtk/printDebug", this); + fpCommandDebugPrint->SetGuidance("Debug print of pipelines"); + + /***************************** Set directory *****************************/ + fpDirectorySet = new G4UIdirectory("/vis/vtk/set/", true); + fpDirectorySet->SetGuidance("G4VtkViewer set commands"); + // Vtk warnings output - fpCommandWarnings = new G4UIcmdWithABool("/vis/vtk/warnings", this); - fpCommandExport->SetGuidance ("Enable (True) or disable (False) VTK warnings"); + fpCommandWarnings = new G4UIcmdWithABool("/vis/vtk/set/warnings", this); + fpCommandWarnings->SetParameterName("enable-warnings", false); + fpCommandWarnings->SetGuidance("Enable (True) or disable (False) VTK warnings"); + + // HUD command + fpCommandHUD = new G4UIcmdWithABool("/vis/vtk/set/hud", this); + fpCommandHUD->SetGuidance("Enable or disable HUD for VTK"); + + // Clipper command + fpCommandClipper = new G4UIcommand("/vis/vtk/set/clipper", this); + fpCommandClipper->SetGuidance("Enable a cutaway plane (clipper) in VTK"); + auto fpCommandClipperParam = new G4UIparameter("widget", 'b', omitable = true); + fpCommandClipperParam->SetDefaultValue(1); + fpCommandClipper->SetParameter(fpCommandClipperParam); + + // Clutter command + fpCommandCutter = new G4UIcommand("/vis/vtk/set/cutter", this); + fpCommandCutter->SetGuidance("Enable a section plane (cutter) in VTK"); + auto fpCommandCutterParam = new G4UIparameter("widget", 'b', omitable = true); + fpCommandCutterParam->SetDefaultValue(1); + fpCommandCutter->SetParameter(fpCommandCutterParam); + + // Vtk polyhedron pipeline selection + auto fpCommandPolyhedronPipelineParam = new G4UIparameter("format", 's', omitable = true); + fpCommandPolyhedronPipeline = new G4UIcommand("/vis/vtk/set/polyhedronPipeline", this); + fpCommandPolyhedronPipeline->SetGuidance("Select type of polyhedron pipeline"); + fpCommandPolyhedronPipeline->SetGuidance("Type (separate, tensor, append, bake)"); + fpCommandPolyhedronPipeline->SetParameter(fpCommandPolyhedronPipelineParam); + + // Shadows command + fpCommandShadow = new G4UIcommand("/vis/vtk/set/shadows", this); + fpCommandClipper->SetGuidance("Enable/disable shadows in VTK"); + auto fpCommandShadowParam = new G4UIparameter("enable", 'b', omitable = true); + fpCommandShadowParam->SetDefaultValue(1); + fpCommandShadow->SetParameter(fpCommandShadowParam); + + /***************************** Add directory *****************************/ + fpDirectoryAdd = new G4UIdirectory("/vis/vtk/add/", true); + fpDirectoryAdd->SetGuidance("G4VtkViewer add commands"); + + fpCommandImageOverlay = new G4UIcommand("/vis/vtk/add/imageOverlay", this); + auto parameterImageOverlay = new G4UIparameter("filename", 's', omitable = false); + parameterImageOverlay->SetGuidance("Image file name "); + fpCommandImageOverlay->SetParameter(parameterImageOverlay); + + parameterImageOverlay = new G4UIparameter("imageBottomLeftX", 'd', omitable = false); + parameterImageOverlay->SetGuidance("image bottom left x"); + fpCommandImageOverlay->SetParameter(parameterImageOverlay); + + parameterImageOverlay = new G4UIparameter("imageBottomLeftY", 'd', omitable = false); + parameterImageOverlay->SetGuidance("image bottom left y"); + fpCommandImageOverlay->SetParameter(parameterImageOverlay); + + parameterImageOverlay = new G4UIparameter("imageTopRightX", 'd', omitable = false); + parameterImageOverlay->SetGuidance("image top right x"); + fpCommandImageOverlay->SetParameter(parameterImageOverlay); + + parameterImageOverlay = new G4UIparameter("imageTopRightY", 'd', omitable = false); + parameterImageOverlay->SetGuidance("image top right y"); + fpCommandImageOverlay->SetParameter(parameterImageOverlay); + + parameterImageOverlay = new G4UIparameter("worldBottomLeftX", 'd', omitable = false); + parameterImageOverlay->SetGuidance("world bottom left x"); + fpCommandImageOverlay->SetParameter(parameterImageOverlay); + + parameterImageOverlay = new G4UIparameter("worldBottomLeftY", 'd', omitable = false); + parameterImageOverlay->SetGuidance("world bottom left y"); + fpCommandImageOverlay->SetParameter(parameterImageOverlay); + + parameterImageOverlay = new G4UIparameter("worldTopRightX", 'd', omitable = false); + parameterImageOverlay->SetGuidance("world top right x"); + fpCommandImageOverlay->SetParameter(parameterImageOverlay); + + parameterImageOverlay = new G4UIparameter("worldTopRightY", 'd', omitable = false); + parameterImageOverlay->SetGuidance("world top right y"); + fpCommandImageOverlay->SetParameter(parameterImageOverlay); + + parameterImageOverlay = new G4UIparameter("xRotation", 'd', omitable = true); + parameterImageOverlay->SetGuidance("rotation in x"); + parameterImageOverlay->SetDefaultValue(0.0); + fpCommandImageOverlay->SetParameter(parameterImageOverlay); + + parameterImageOverlay = new G4UIparameter("yRotation", 'd', omitable = true); + parameterImageOverlay->SetGuidance("rotation in y"); + parameterImageOverlay->SetDefaultValue(0.0); + fpCommandImageOverlay->SetParameter(parameterImageOverlay); + + parameterImageOverlay = new G4UIparameter("zRotation", 'd', omitable = true); + parameterImageOverlay->SetGuidance("rotation in z"); + parameterImageOverlay->SetDefaultValue(0.0); + fpCommandImageOverlay->SetParameter(parameterImageOverlay); + + parameterImageOverlay = new G4UIparameter("xTranslation", 'd', omitable = true); + parameterImageOverlay->SetGuidance("translation in x"); + parameterImageOverlay->SetDefaultValue(0.0); + fpCommandImageOverlay->SetParameter(parameterImageOverlay); + + parameterImageOverlay = new G4UIparameter("yTranslation", 'd', omitable = true); + parameterImageOverlay->SetGuidance("translation in y"); + parameterImageOverlay->SetDefaultValue(0.0); + fpCommandImageOverlay->SetParameter(parameterImageOverlay); + + parameterImageOverlay = new G4UIparameter("zTranslation", 'd', omitable = true); + parameterImageOverlay->SetGuidance("translation in z"); + parameterImageOverlay->SetDefaultValue(0.0); + fpCommandImageOverlay->SetParameter(parameterImageOverlay); + + parameterImageOverlay = new G4UIparameter("alpha", 'd', omitable = true); + parameterImageOverlay->SetGuidance("alpha"); + parameterImageOverlay->SetDefaultValue(0.5); + fpCommandImageOverlay->SetParameter(parameterImageOverlay); } G4VtkMessenger::~G4VtkMessenger() { delete fpDirectory; + delete fpDirectorySet; + delete fpDirectoryAdd; delete fpCommandExport; + delete fpCommandExportCutter; delete fpCommandWarnings; + delete fpCommandDebugPrint; + delete fpCommandPolyhedronPipeline; + delete fpCommandImageOverlay; } -G4String G4VtkMessenger::GetCurrentValue(G4UIcommand * /*command*/) { + +G4String G4VtkMessenger::GetCurrentValue(G4UIcommand* /*command*/) +{ return G4String(); } -void G4VtkMessenger::SetNewValue(G4UIcommand *command, G4String newValue) +void G4VtkMessenger::SetNewValue(G4UIcommand* command, G4String newValue) { - G4VisManager* pVisManager = G4VisManager::GetInstance(); G4VViewer* pViewer = pVisManager->GetCurrentViewer(); - if (!pViewer) { + if (pViewer == nullptr) { G4cout << "G4VtkMessenger::SetNewValue: No current viewer.\n" - << "\"/vis/open\", or similar, to get one." - << G4endl; + << "\"/vis/open\", or similar, to get one." << G4endl; return; } auto* pVtkViewer = dynamic_cast(pViewer); - if (!pVtkViewer) { + if (pVtkViewer == nullptr) { G4cout << "G4VtkMessenger::SetNewValue: Current viewer is not of type VTK. \n" - << "(It is \"" - << pViewer->GetName() - << "\".)\n" - << "Use \"/vis/viewer/select\" or \"/vis/open\"." - << G4endl; + << "(It is \"" << pViewer->GetName() << "\".)\n" + << "Use \"/vis/viewer/select\" or \"/vis/open\"." << G4endl; return; } - if (command == fpCommandExport) - { + if (command == fpCommandClearNonG4) { + auto sceneHandler = dynamic_cast(pViewer->GetSceneHandler()); + auto transientStore = sceneHandler->GetTransientStore(); + + transientStore.ClearNonG4(); + } + else if (command == fpCommandExport) { G4String format, name; std::istringstream iss(newValue); iss >> format >> name; - if(format == "jpg" || format == "tiff" || - format == "png" || format == "bmp" || - format == "pnm" || format == "ps") + if (format == "jpg" || format == "tiff" || format == "png" || format == "bmp" || format == "pnm" + || format == "ps") pVtkViewer->ExportScreenShot(name, format); - else if(format == "obj") + else if (format == "obj") pVtkViewer->ExportOBJScene(name); - else if(format == "vrml") + else if (format == "vrml") pVtkViewer->ExportVRMLScene(name); - else if(format == "vtp") + else if (format == "vtp") pVtkViewer->ExportVTPScene(name); + else if (format == "gltf") + pVtkViewer->ExportGLTFScene(name); else G4cout << "Unknown /vis/vtk/export file format" << G4endl; } - else if (command == fpCommandWarnings) - { - vtkObject::GlobalWarningDisplayOff(); + else if (command == fpCommandExportCutter) { + std::istringstream iss(newValue); + + G4String fileName; + iss >> fileName; + pVtkViewer->ExportVTPCutter(fileName); + } + else if (command == fpCommandWarnings) { + if (G4UIcommand::ConvertToBool(newValue)) { + vtkObject::GlobalWarningDisplayOn(); + } + else { + vtkObject::GlobalWarningDisplayOff(); + } + } + else if (command == fpCommandHUD) { + if (G4UIcommand::ConvertToBool(newValue)) { + pVtkViewer->EnableHUD(); + } + else { + pVtkViewer->DisableHUD(); + } + } + else if (command == fpCommandDebugPrint) { + pVtkViewer->Print(); + } + else if (command == fpCommandPolyhedronPipeline) { + G4String temp; + + std::istringstream iss(newValue); + + G4String pipelineType; + iss >> pipelineType; + + pVtkViewer->SetPolyhedronPipeline(pipelineType); + } + else if (command == fpCommandImageOverlay) { + G4String temp; + + G4String fileName; + G4double imageBottomLeft[2] = {0, 0}; + G4double imageTopRight[2] = {1, 1}; + G4double worldBottomLeft[2] = {0, 0}; + G4double worldTopRight[2] = {1, 1}; + G4double rotation[3] = {0, 0, 0}; + G4double translation[3] = {0, 0, 0}; + G4double alpha = 0; + + std::istringstream iss(newValue); + + iss >> fileName >> imageBottomLeft[0] >> imageBottomLeft[1] >> imageTopRight[0] + >> imageTopRight[1] >> worldBottomLeft[0] >> worldBottomLeft[1] >> worldTopRight[0] + >> worldTopRight[1] >> rotation[0] >> rotation[1] >> rotation[2] >> translation[0] + >> translation[1] >> translation[2] >> alpha; + + pVtkViewer->AddImageOverlay(fileName, alpha, imageBottomLeft, worldBottomLeft, imageTopRight, + worldTopRight, rotation, translation); + } + else if (command == fpCommandClipper) { + pVtkViewer->EnableClipper(G4Plane3D(), true); + } + else if (command == fpCommandCutter) { + pVtkViewer->EnableCutter(G4Plane3D(), true); + } + else if (command == fpCommandShadow) { + pVtkViewer->EnableShadows(); } } diff --git a/source/visualization/Vtk/src/G4VtkPolydataInstanceAppendPipeline.cc b/source/visualization/Vtk/src/G4VtkPolydataInstanceAppendPipeline.cc new file mode 100644 index 00000000000..c03fc8e29e2 --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkPolydataInstanceAppendPipeline.cc @@ -0,0 +1,146 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#include "G4VtkPolydataInstanceAppendPipeline.hh" + +#include "G4VtkViewer.hh" +#include "G4VtkVisContext.hh" + +#include "vtkActor.h" +#include "vtkAppendPolyData.h" +#include "vtkDataArray.h" +#include "vtkDoubleArray.h" +#include "vtkGeneralTransform.h" +#include "vtkPointData.h" +#include "vtkPolyData.h" +#include "vtkPolyDataMapper.h" +#include "vtkProperty.h" +#include "vtkTransformPolyDataFilter.h" + +std::size_t G4VtkPolydataInstanceAppendPipeline::MakeHash(const G4Polyhedron& polyhedron, + const G4VtkVisContext& vc) +{ + // Get view parameters that the user can force through the vis attributes, thereby over-riding the + // current view parameter. + const G4VisAttributes* pVA = + vc.fViewer->GetApplicableVisAttributes(polyhedron.GetVisAttributes()); + G4Color colour = pVA->GetColour(); + + // Hash the vis attributes + std::size_t hash = std::hash{}(colour.GetAlpha()); + std::size_t rhash = std::hash{}(colour.GetRed()); + std::size_t ghash = std::hash{}(colour.GetGreen()); + std::size_t bhash = std::hash{}(colour.GetBlue()); + std::size_t phash = std::hash{}(polyhedron); + std::size_t shash = std::hash{}(vc.fDrawingStyle); + + std::hash_combine(hash, phash); + std::hash_combine(hash, rhash); + std::hash_combine(hash, bhash); + std::hash_combine(hash, ghash); + std::hash_combine(hash, shash); + + return hash; +} + +G4VtkPolydataInstanceAppendPipeline::G4VtkPolydataInstanceAppendPipeline(G4String nameIn, + const G4VtkVisContext& vc) + : G4VtkPolydataInstancePipeline(nameIn, vc) +{ + // Set pipeline type + SetTypeName(G4String("G4VtkPolydataInstanceAppendPipeline")); + + // append filter + appendFilter = vtkSmartPointer::New(); + AddFilter(appendFilter); + + // set polydata mapper + mapper->SetInputConnection(GetFinalFilter()->GetOutputPort()); + + // set actor + actor->SetMapper(mapper); + actor->SetVisibility(1); + + // colour parameters + actor->GetProperty()->SetOpacity(vc.alpha); + actor->GetProperty()->SetColor(vc.red, vc.green, vc.blue); + + // shading parameters + actor->GetProperty()->SetAmbient(0.2); + actor->GetProperty()->SetDiffuse(0.7); + actor->GetProperty()->SetSpecular(0.1); + actor->GetProperty()->SetSpecularPower(1); + + // add to renderer + vc.fViewer->renderer->AddActor(GetActor()); +} + +void G4VtkPolydataInstanceAppendPipeline::Print() +{ + G4cout << "G4VtkPolydataInstanceBakePipeline " << GetName() << G4endl; + G4VtkPolydataPipeline::Print(); +} + +void G4VtkPolydataInstanceAppendPipeline::addInstance(G4double dx, G4double dy, G4double dz, + G4double r00, G4double r01, G4double r02, + G4double r10, G4double r11, G4double r12, + G4double r20, G4double r21, G4double r22, + G4double r, G4double g, G4double b, + G4double a, const G4String& name) +{ + // Add to base class + G4VtkPolydataInstancePipeline::addInstance(dx, dy, dz, r00, r01, r02, r10, r11, r12, r20, r21, + r22, r, g, b, a, name); + + // create transform + auto transform = vtkSmartPointer::New(); + double transformArray[16] = {r00, r01, r02, dx, r10, r11, r12, dy, + r20, r21, r22, dz, 0., 0., 0., 1.}; + transform->Concatenate(transformArray); + transform->Update(); + + // Create transform filter and add to local filter map + vtkSmartPointer tf = + vtkSmartPointer::New(); + tf->SetTransform(transform); + tf->SetInputConnection(GetFilter(GetNumberOfFilters() - 2)->GetOutputPort()); + tf->Update(); + transformFilterMap[name] = tf; + + // Add transform filter to append filter + GetFinalFilter()->AddInputConnection(tf->GetOutputPort()); +} + +void G4VtkPolydataInstanceAppendPipeline::removeInstance(const G4String& name) +{ + // Remove from base class + G4VtkPolydataInstancePipeline::removeInstance(name); + + // Remove transform filter from append filter + appendFilter->RemoveInputConnection(0, transformFilterMap[name]->GetOutputPort()); + + // Remove from local filter map + transformFilterMap.erase(name); +} diff --git a/source/visualization/Vtk/src/G4VtkPolydataInstanceBakePipeline.cc b/source/visualization/Vtk/src/G4VtkPolydataInstanceBakePipeline.cc new file mode 100644 index 00000000000..d7a3b96e08c --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkPolydataInstanceBakePipeline.cc @@ -0,0 +1,138 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#include "G4VtkPolydataInstanceBakePipeline.hh" + +#include "G4VtkViewer.hh" +#include "G4VtkVisContext.hh" + +#include "vtkActor.h" +#include "vtkDataArray.h" +#include "vtkDoubleArray.h" +#include "vtkPointData.h" +#include "vtkPolyData.h" +#include "vtkPolyDataMapper.h" +#include "vtkProperty.h" + +std::size_t G4VtkPolydataInstanceBakePipeline::MakeHash(const G4Polyhedron& polyhedron, + const G4VtkVisContext& vc) +{ + // Get view parameters that the user can force through the vis attributes, thereby over-riding the + // current view parameter. + const G4VisAttributes* pVA = + vc.fViewer->GetApplicableVisAttributes(polyhedron.GetVisAttributes()); + G4Colour colour = pVA->GetColour(); + + // Hash the vis attributes + std::size_t hash = std::hash{}(colour.GetAlpha()); + std::size_t shash = std::hash{}(vc.fDrawingStyle); + + std::hash_combine(hash, shash); + + return hash; +} + +G4VtkPolydataInstanceBakePipeline::G4VtkPolydataInstanceBakePipeline(G4String nameIn, + const G4VtkVisContext& vc) + : G4VtkPolydataInstancePipeline(nameIn, vc) +{ + iVert = 0; + iFace = 0; + polydataPointData = vtkSmartPointer::New(); + polydataPointData->SetNumberOfComponents(3); + polydataPointData->SetName("Colors"); + polydata->GetPointData()->SetScalars(polydataPointData); + + mapper->SetColorModeToDirectScalars(); + + actor->GetProperty()->SetOpacity(vc.alpha); +} + +void G4VtkPolydataInstanceBakePipeline::SetPolydata(const G4Polyhedron& polyhedron) +{ + polyhedronPrototype = &polyhedron; +} + +void G4VtkPolydataInstanceBakePipeline::Print() +{ + G4cout << "G4VtkPolydataInstanceBakePipeline " << GetName() << G4endl; + G4VtkPolydataPipeline::Print(); +} + +void G4VtkPolydataInstanceBakePipeline::addInstance(G4double dx, G4double dy, G4double dz, + G4double r00, G4double r01, G4double r02, + G4double r10, G4double r11, G4double r12, + G4double r20, G4double r21, G4double r22, + G4double r, G4double g, G4double b, G4double a, + const G4String& name) +{ + G4VtkPolydataInstancePipeline::addInstance(dx, dy, dz, r00, r01, r02, r10, r11, r12, r20, r21, + r22, r, g, b, a, name); + + vtkIdType vStart; + vtkIdType vEnd; + vtkIdType fStart; + vtkIdType fEnd; + + vStart = iVert; + fStart = iFace; + + G4bool notLastFace; + do { + G4Point3D vertex[4]; + G4int edgeFlag[4]; + G4Normal3D normals[4]; + G4int nEdges; + notLastFace = polyhedronPrototype->GetNextFacet(nEdges, vertex, edgeFlag, normals); + + vtkSmartPointer poly = vtkSmartPointer::New(); + // loop over vertices + for (int i = 0; i < nEdges; i++) { + // note : G4Transform3D does not have a matrix element constructor + G4Point3D bakedVertex = + G4Point3D(vertex[i].x() * r00 + vertex[i].y() * r01 + vertex[i].z() * r02 + dx, + vertex[i].x() * r10 + vertex[i].y() * r11 + vertex[i].z() * r12 + dy, + vertex[i].x() * r20 + vertex[i].y() * r21 + vertex[i].z() * r22 + dz); + polydataPoints->InsertNextPoint(bakedVertex.x(), bakedVertex.y(), bakedVertex.z()); + poly->InsertNextId(iVert); + iVert++; + double cols[] = {r, g, b, 0.5}; + polydataPointData->InsertNextTuple(cols); + } + + polydataCells->InsertNextCell(poly); + iFace++; + + } while (notLastFace); + + vEnd = iVert; + fEnd = iFace; + + // Add vertex and face to maps to allow for removal later + instanceVertexMap[name] = std::pair(vStart, vEnd); + instanceFaceMap[name] = std::pair(fStart, fEnd); +} + +void G4VtkPolydataInstanceBakePipeline::removeInstance(const G4String& /*name*/) {} diff --git a/source/visualization/Vtk/src/G4VtkPolydataInstancePipeline.cc b/source/visualization/Vtk/src/G4VtkPolydataInstancePipeline.cc new file mode 100644 index 00000000000..c9e2315b276 --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkPolydataInstancePipeline.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. * +// ******************************************************************** + +#include "G4VtkPolydataInstancePipeline.hh" + +#include "vtkDoubleArray.h" +#include "vtkPoints.h" + +G4VtkPolydataInstancePipeline::G4VtkPolydataInstancePipeline(G4String nameIn, + const G4VtkVisContext& vc) + : G4VtkPolydataPipeline(nameIn, vc) +{ + // Set pipeline type + SetTypeName(G4String("G4VtkPolydataInstancePipeline")); + + instanceColour = vtkSmartPointer::New(); + instanceColour->SetName("colours"); + instanceColour->SetNumberOfComponents(4); + + instancePosition = vtkSmartPointer::New(); + + instanceTransform = vtkSmartPointer::New(); + instanceTransform->SetName("transform"); + instanceTransform->SetNumberOfComponents(9); +} + +void G4VtkPolydataInstancePipeline::addInstance(G4double dx, G4double dy, G4double dz, G4double r00, + G4double r01, G4double r02, G4double r10, + G4double r11, G4double r12, G4double r20, + G4double r21, G4double r22, const G4String& name) +{ + // add the instance without colour or alpha + addInstance(dx, dy, dz, r00, r01, r02, r10, r11, r12, r20, r21, r22, 0, 0, 0, 0, name); +} + +void G4VtkPolydataInstancePipeline::addInstance(G4double dx, G4double dy, G4double dz, G4double r00, + G4double r01, G4double r02, G4double r10, + G4double r11, G4double r12, G4double r20, + G4double r21, G4double r22, G4double r, G4double g, + G4double b, G4double a, const G4String& name) +{ + instanceColour->InsertNextTuple4(r, g, b, a); + auto idp = instancePosition->InsertNextPoint(dx, dy, dz); + instanceTransform->InsertNextTuple9(r00, r01, r02, r10, r11, r12, r20, r21, r22); + instanceMap[name] = idp; +} + +void G4VtkPolydataInstancePipeline::removeInstance(const G4String& /*name*/) +{ + // remove from instanceColour, instancePosition and instanceTransform +} \ No newline at end of file diff --git a/source/visualization/Vtk/src/G4VtkPolydataInstanceTensorPipeline.cc b/source/visualization/Vtk/src/G4VtkPolydataInstanceTensorPipeline.cc new file mode 100644 index 00000000000..52f176309bf --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkPolydataInstanceTensorPipeline.cc @@ -0,0 +1,105 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#include "G4VtkPolydataInstanceTensorPipeline.hh" + +#include "G4VtkViewer.hh" +#include "G4VtkVisContext.hh" + +#include "vtkActor.h" +#include "vtkDataArray.h" +#include "vtkDoubleArray.h" +#include "vtkPointData.h" +#include "vtkPolyData.h" +#include "vtkPolyDataMapper.h" +#include "vtkProperty.h" +#include "vtkTensorGlyphColor.h" + +std::size_t G4VtkPolydataInstanceTensorPipeline::MakeHash(const G4Polyhedron& polyhedron, + const G4VtkVisContext& vc) +{ + // Get view parameters that the user can force through the vis attributes, thereby over-riding the + // current view parameter. + G4ViewParameters::DrawingStyle drawing_style = vc.fDrawingStyle; + + std::size_t vhash = 0; + std::hash_combine(vhash, static_cast(drawing_style)); + + std::size_t phash = std::hash{}(polyhedron); + + std::size_t hash = 0; + std::hash_combine(hash, phash); + std::hash_combine(hash, vhash); + + return hash; +} + +G4VtkPolydataInstanceTensorPipeline::G4VtkPolydataInstanceTensorPipeline(G4String nameIn, + const G4VtkVisContext& vc) + : G4VtkPolydataInstancePipeline(nameIn, vc) +{ + // Set pipeline type + SetTypeName(G4String("G4VtkPolydataInstanceTensorPipeline")); + + // make polydata from instance data + instancePolydata = vtkSmartPointer::New(); + instancePolydata->SetPoints(instancePosition); + instancePolydata->GetPointData()->SetTensors(instanceTransform); + instancePolydata->GetPointData()->SetVectors(instanceColour); + instancePolydata->GetPointData()->SetScalars(instanceColour); + + // tensor glyph + instanceTensorGlyph = vtkSmartPointer::New(); + instanceTensorGlyph->SetInputData(instancePolydata); + instanceTensorGlyph->SetSourceConnection(GetFinalFilter()->GetOutputPort()); + instanceTensorGlyph->ColorGlyphsOn(); + instanceTensorGlyph->ScalingOff(); + instanceTensorGlyph->ThreeGlyphsOff(); + instanceTensorGlyph->ExtractEigenvaluesOff(); + instanceTensorGlyph->SetColorModeToScalars(); + AddFilter(instanceTensorGlyph); + + // set polydata mapper + mapper->SetInputConnection(GetFinalFilter()->GetOutputPort()); + + // set actor + actor->SetMapper(mapper); + actor->SetVisibility(1); + + // shading parameters + actor->GetProperty()->SetAmbient(0.2); + actor->GetProperty()->SetDiffuse(0.7); + actor->GetProperty()->SetSpecular(0.1); + actor->GetProperty()->SetSpecularPower(1); + + // add to renderer + vc.fViewer->renderer->AddActor(GetActor()); +} + +void G4VtkPolydataInstanceTensorPipeline::Print() +{ + G4cout << "G4VtkPolydataInstanceTensorPipeline " << GetName() << G4endl; + G4VtkPolydataPipeline::Print(); +} \ No newline at end of file diff --git a/source/visualization/Vtk/src/G4VtkPolydataPipeline.cc b/source/visualization/Vtk/src/G4VtkPolydataPipeline.cc new file mode 100644 index 00000000000..95cf5f01d30 --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkPolydataPipeline.cc @@ -0,0 +1,225 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#include "G4VtkPolydataPipeline.hh" + +#include "G4Normal3D.hh" +#include "G4Point3D.hh" +#include "G4Polyhedron.hh" +#include "G4Polyline.hh" +#include "G4ViewParameters.hh" +#include "G4VtkViewer.hh" +#include "G4VtkVisContext.hh" + +#include "vtkActor.h" +#include "vtkCleanPolyData.h" +#include "vtkLine.h" +#include "vtkMatrix4x4.h" +#include "vtkPolyDataAlgorithm.h" +#include "vtkPolyDataMapper.h" +#include "vtkPolyDataNormals.h" +#include "vtkProperty.h" +#include "vtkTriangleFilter.h" + +std::size_t G4VtkPolydataPipeline::MakeHash(const G4Polyhedron& polyhedron, + const G4VtkVisContext& vc) +{ + std::size_t hash = std::hash{}(polyhedron); + + std::hash_combine(hash, std::hash{}(vc.fTransform.dx())); + std::hash_combine(hash, std::hash{}(vc.fTransform.dy())); + std::hash_combine(hash, std::hash{}(vc.fTransform.dz())); + + std::hash_combine(hash, std::hash{}(vc.fTransform.xx())); + std::hash_combine(hash, std::hash{}(vc.fTransform.xy())); + std::hash_combine(hash, std::hash{}(vc.fTransform.xz())); + + std::hash_combine(hash, std::hash{}(vc.fTransform.yx())); + std::hash_combine(hash, std::hash{}(vc.fTransform.yy())); + std::hash_combine(hash, std::hash{}(vc.fTransform.yz())); + + std::hash_combine(hash, std::hash{}(vc.fTransform.zx())); + std::hash_combine(hash, std::hash{}(vc.fTransform.zy())); + std::hash_combine(hash, std::hash{}(vc.fTransform.zz())); + + return hash; +} + +G4VtkPolydataPipeline::G4VtkPolydataPipeline(G4String nameIn, const G4VtkVisContext& vc) + : G4VVtkPipeline(nameIn, "G4VtkPolydataPipeline", vc, false, vc.fViewer->renderer) +{ + // Set pipeline type + SetTypeName(G4String("G4VtkPolydataPipeline")); + + polydataPoints = vtkSmartPointer::New(); + polydataCells = vtkSmartPointer::New(); + polydata = vtkSmartPointer::New(); + + polydata->SetPoints(polydataPoints); + polydata->SetPolys(polydataCells); + + // clean input polydata + auto filterClean = vtkSmartPointer::New(); + filterClean->PointMergingOn(); + filterClean->AddInputData(polydata); + AddFilter(filterClean); + + // ensure triangular mesh + auto filterTriangle = vtkSmartPointer::New(); + filterTriangle->SetInputConnection(filterClean->GetOutputPort()); + AddFilter(filterTriangle); + + // calculate normals with a feature angle of 45 degrees + auto filterNormals = vtkSmartPointer::New(); + filterNormals->SetFeatureAngle(45); + filterNormals->SetInputConnection(filterTriangle->GetOutputPort()); + AddFilter(filterNormals); + + // mapper + mapper = vtkSmartPointer::New(); + mapper->SetInputConnection(GetFinalFilter()->GetOutputPort()); + mapper->SetColorModeToDirectScalars(); + + // add to actor + actor = vtkSmartPointer::New(); + actor->SetMapper(mapper); + actor->SetVisibility(1); + + // set actor properties from vis context + if (vc.fDrawingStyle == G4ViewParameters::hsr) { + } + else if (vc.fDrawingStyle == G4ViewParameters::hlr) { + } + else if (vc.fDrawingStyle == G4ViewParameters::wireframe) { + actor->GetProperty()->SetRepresentationToWireframe(); + } + + // add to renderer + vc.fViewer->renderer->AddActor(GetActor()); +} + +void G4VtkPolydataPipeline::Enable() +{ + actor->SetVisibility(1); +} + +void G4VtkPolydataPipeline::Disable() +{ + actor->SetVisibility(0); +} + +void G4VtkPolydataPipeline::Print() +{ + G4cout << "G4VtkPolydataPipeline filters ("; + for (const auto& f : filters) + G4cout << f->GetInformation() << ","; + G4cout << ")" << G4endl; + + G4VVtkPipeline::Print(); +} + +void G4VtkPolydataPipeline::Modified() +{ + actor->Modified(); + polydata->Modified(); + mapper->Update(); + + G4VVtkPipeline::Modified(); +} + +void G4VtkPolydataPipeline::Clear() +{ + renderer->RemoveActor(actor); + G4VVtkPipeline::Clear(); +} + +void G4VtkPolydataPipeline::SetPolydata(const G4Polyhedron& polyhedron) +{ + G4bool notLastFace; + int iVert = 0; + do { + G4Point3D vertex[4]; + G4int edgeFlag[4]; + G4Normal3D normals[4]; + G4int nEdges; + notLastFace = polyhedron.GetNextFacet(nEdges, vertex, edgeFlag, normals); + + vtkSmartPointer poly = vtkSmartPointer::New(); + // loop over vertices + for (int i = 0; i < nEdges; i++) { + polydataPoints->InsertNextPoint(vertex[i].x(), vertex[i].y(), vertex[i].z()); + poly->InsertNextId(iVert); + iVert++; + } + polydataCells->InsertNextCell(poly); + + } while (notLastFace); +} + +void G4VtkPolydataPipeline::SetPolydata(const G4Polyline& polyline) +{ + // Data data + const size_t nLines = polyline.size(); + + for (size_t i = 0; i < nLines; ++i) { + auto id = polydataPoints->InsertNextPoint(polyline[i].x(), polyline[i].y(), polyline[i].z()); + + if (i < nLines - 1) { + vtkSmartPointer line = vtkSmartPointer::New(); + line->GetPointIds()->SetId(0, id); + line->GetPointIds()->SetId(1, id + 1); + polydataCells->InsertNextCell(line); + } + } +} + +void G4VtkPolydataPipeline::SetPolydataData(const G4Point3D& p) +{ + SetPolydataData(p.x(), p.y(), p.z()); +} + +void G4VtkPolydataPipeline::SetPolydataData(double x, double y, double z) +{ + polydataPoints->InsertNextPoint(x, y, z); +} + +void G4VtkPolydataPipeline::SetActorTransform(G4double dx, G4double dy, G4double dz, G4double r00, + G4double r01, G4double r02, G4double r10, + G4double r11, G4double r12, G4double r20, + G4double r21, G4double r22) +{ + // create transform + auto transform = vtkSmartPointer::New(); + double transformArray[16] = {r00, r01, r02, dx, r10, r11, r12, dy, + r20, r21, r22, dz, 0., 0., 0., 1.}; + transform->DeepCopy(transformArray); + actor->SetUserMatrix(transform); +} + +void G4VtkPolydataPipeline::SetActorColour(G4double r, G4double g, G4double b, G4double a) +{ + actor->GetProperty()->SetColor(r, g, b); + actor->GetProperty()->SetOpacity(a); +} diff --git a/source/visualization/Vtk/src/G4VtkPolydataPolygonPipeline.cc b/source/visualization/Vtk/src/G4VtkPolydataPolygonPipeline.cc new file mode 100644 index 00000000000..dfcbcd32782 --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkPolydataPolygonPipeline.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. * +// ******************************************************************** + +#include "G4VtkPolydataPolygonPipeline.hh" + +#include "G4VisAttributes.hh" +#include "G4VtkViewer.hh" +#include "G4VtkVisContext.hh" + +#include "vtkActor.h" +#include "vtkPolyDataMapper.h" +#include "vtkProperty.h" +#include "vtkRegularPolygonSource.h" +#include "vtkVertexGlyphFilter.h" + +std::size_t G4VtkPolydataPolygonPipeline::MakeHash(const G4VisAttributes* pVA) +{ + return std::hash{}(*pVA); +} + +G4VtkPolydataPolygonPipeline::G4VtkPolydataPolygonPipeline(G4String nameIn, + const G4VtkVisContext& vc, + const G4VisAttributes* pVisAttributes) + : G4VtkPolydataPipeline(nameIn, vc) +{ + // Set pipeline type + SetTypeName(G4String("G4VtkPolydataSpherePipeline")); + + // Get vis attributes + G4Color colour = pVisAttributes->GetColour(); + G4double opacity = colour.GetAlpha(); + G4double lineWidth = pVisAttributes->GetLineWidth(); + + // Draw in world coordinates. + vtkSmartPointer polygonSource = + vtkSmartPointer::New(); + polygonSource->SetNumberOfSides(4); + polygonSource->SetRadius(vc.fSize); + + // vertex glyph filter + auto glyphFilter = vtkSmartPointer::New(); + glyphFilter->SetInputData(polydata); + AddFilter(glyphFilter); + + // Setup actor and mapper + mapper->SetInputConnection(glyphFilter->GetOutputPort()); + + GetActor()->GetProperty()->SetLineWidth(lineWidth); + GetActor()->GetProperty()->SetColor(colour.GetRed(), colour.GetGreen(), colour.GetBlue()); + GetActor()->GetProperty()->SetOpacity(opacity); + GetActor()->SetVisibility(1); + + GetActor()->GetProperty()->SetRenderPointsAsSpheres(true); + GetActor()->GetProperty()->SetPointSize(vc.fSize * 5); + + vc.fViewer->renderer->AddActor(GetActor()); +} diff --git a/source/visualization/Vtk/src/G4VtkPolydataPolyline2DPipeline.cc b/source/visualization/Vtk/src/G4VtkPolydataPolyline2DPipeline.cc new file mode 100644 index 00000000000..be194816de9 --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkPolydataPolyline2DPipeline.cc @@ -0,0 +1,112 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#include "G4VtkPolydataPolyline2DPipeline.hh" + +#include "G4Polyline.hh" +#include "G4VisAttributes.hh" +#include "G4VtkViewer.hh" +#include "G4VtkVisContext.hh" + +#include "vtkActor.h" +#include "vtkActor2D.h" +#include "vtkCoordinate.h" +#include "vtkLine.h" +#include "vtkPolyDataAlgorithm.h" +#include "vtkPolyDataMapper.h" +#include "vtkPolyDataMapper2D.h" +#include "vtkProperty.h" +#include "vtkProperty2D.h" + +std::size_t G4VtkPolydataPolyline2DPipeline::MakeHash(const G4VisAttributes* pVA) +{ + return std::hash{}(*pVA); +} + +G4VtkPolydataPolyline2DPipeline::G4VtkPolydataPolyline2DPipeline( + G4String nameIn, const G4VtkVisContext& vc, const G4VisAttributes* pVisAttributes) + : G4VtkPolydataPipeline(nameIn, vc) +{ + // Set pipeline type + SetTypeName(G4String("G4VtkPolydataPolyline2DPipeline")); + + // Get vis attributes + G4Color colour = pVisAttributes->GetColour(); + G4double opacity = colour.GetAlpha(); + G4double lineWidth = pVisAttributes->GetLineWidth(); + + // make 3d actor invisible and remove from renderer + GetActor()->SetVisibility(0); + vc.fViewer->renderer->RemoveActor(GetActor()); + + // Setup 2D mapper + mapper2D = vtkSmartPointer::New(); + mapper2D->SetInputConnection(GetFinalFilter()->GetOutputPort()); + vtkSmartPointer coordinate = vtkSmartPointer::New(); + coordinate->SetCoordinateSystemToNormalizedViewport(); + mapper2D->SetTransformCoordinate(coordinate); + + // Setup 2D actor + actor2D = vtkSmartPointer::New(); + GetActor2D()->GetProperty()->SetLineWidth(lineWidth); + GetActor2D()->GetProperty()->SetColor(colour.GetRed(), colour.GetGreen(), colour.GetBlue()); + GetActor2D()->GetProperty()->SetOpacity(opacity); + GetActor2D()->SetMapper(mapper2D); + GetActor2D()->SetVisibility(1); + // GetActor2D()->GetPositionCoordinate()->SetCoordinateSystemToNormalizedDisplay(); + + // add to renderer + vc.fViewer->renderer->AddActor(GetActor2D()); +} + +void G4VtkPolydataPolyline2DPipeline::Clear() +{ + renderer->RemoveActor(GetActor2D()); + G4VtkPolydataPipeline::Clear(); +} + +void G4VtkPolydataPolyline2DPipeline::Modified() +{ + G4VtkPolydataPipeline::Modified(); + GetActor2D()->Modified(); +} + +void G4VtkPolydataPolyline2DPipeline::SetPolydata(const G4Polyline& polyline) +{ + // Data data + const size_t nLines = polyline.size(); + + for (size_t i = 0; i < nLines; ++i) { + auto id = + polydataPoints->InsertNextPoint((polyline[i].x() + 1) / 2.0, (polyline[i].y() + 1) / 2.0, 0); + + if (i < nLines - 1) { + vtkSmartPointer line = vtkSmartPointer::New(); + line->GetPointIds()->SetId(0, id); + line->GetPointIds()->SetId(1, id + 1); + polydataCells->InsertNextCell(line); + } + } +} diff --git a/source/visualization/Vtk/src/G4VtkPolydataPolylinePipeline.cc b/source/visualization/Vtk/src/G4VtkPolydataPolylinePipeline.cc new file mode 100644 index 00000000000..3b87def446d --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkPolydataPolylinePipeline.cc @@ -0,0 +1,62 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#include "G4VtkPolydataPolylinePipeline.hh" + +#include "G4VisAttributes.hh" + +#include "vtkActor.h" +#include "vtkProperty.h" + +std::size_t G4VtkPolydataPolylinePipeline::MakeHash(const G4VisAttributes* pVA) +{ + return std::hash{}(*pVA); +} + +G4VtkPolydataPolylinePipeline::G4VtkPolydataPolylinePipeline(G4String nameIn, + const G4VtkVisContext& vc, + const G4VisAttributes* pVisAttributes) + : G4VtkPolydataPipeline(nameIn, vc) +{ + // Set pipeline type + SetTypeName(G4String("G4VtkPolydataPolylinePipeline")); + + // Get vis attributes + G4Color colour = pVisAttributes->GetColour(); + G4double opacity = colour.GetAlpha(); + G4double lineWidth = pVisAttributes->GetLineWidth(); + + // Setup actor and mapper + GetActor()->GetProperty()->SetLineWidth(lineWidth); + GetActor()->GetProperty()->SetColor(colour.GetRed(), colour.GetGreen(), colour.GetBlue()); + GetActor()->GetProperty()->SetOpacity(opacity); + GetActor()->SetVisibility(1); +} + +void G4VtkPolydataPolylinePipeline::Print() +{ + G4cout << "G4VtkPolydataPolylinePipeline " << GetName() << G4endl; + G4VtkPolydataPipeline::Print(); +} diff --git a/source/visualization/Vtk/src/G4VtkPolydataSpherePipeline.cc b/source/visualization/Vtk/src/G4VtkPolydataSpherePipeline.cc new file mode 100644 index 00000000000..746077de007 --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkPolydataSpherePipeline.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. * +// ******************************************************************** + +#include "G4VtkPolydataSpherePipeline.hh" + +#include "G4VisAttributes.hh" +#include "G4VtkViewer.hh" +#include "G4VtkVisContext.hh" + +#include "vtkActor.h" +#include "vtkPolyDataMapper.h" +#include "vtkProperty.h" +#include "vtkVertexGlyphFilter.h" + +std::size_t G4VtkPolydataSpherePipeline::MakeHash(const G4VisAttributes* pVA) +{ + return std::hash{}(*pVA); +} + +G4VtkPolydataSpherePipeline::G4VtkPolydataSpherePipeline(G4String nameIn, const G4VtkVisContext& vc, + const G4VisAttributes* pVisAttributes) + : G4VtkPolydataPipeline(nameIn, vc) +{ + // Set pipeline type + SetTypeName(G4String("G4VtkPolydataSpherePipeline")); + + // Get vis attributes + G4Color colour = pVisAttributes->GetColour(); + G4double opacity = colour.GetAlpha(); + G4double lineWidth = pVisAttributes->GetLineWidth(); + + // vertex glyph filter + auto glyphFilter = vtkSmartPointer::New(); + glyphFilter->SetInputData(polydata); + AddFilter(glyphFilter); + + // Setup actor and mapper + mapper->SetInputConnection(glyphFilter->GetOutputPort()); + + GetActor()->GetProperty()->SetLineWidth(lineWidth); + GetActor()->GetProperty()->SetColor(colour.GetRed(), colour.GetGreen(), colour.GetBlue()); + GetActor()->GetProperty()->SetOpacity(opacity); + GetActor()->SetVisibility(1); + + GetActor()->GetProperty()->SetRenderPointsAsSpheres(true); + GetActor()->GetProperty()->SetPointSize(vc.fSize * 5); + + vc.fViewer->renderer->AddActor(GetActor()); +} + +void G4VtkPolydataSpherePipeline::Print() +{ + G4cout << "G4VtkPolydataSpherePipeline " << GetName() << G4endl; + G4VtkPolydataPipeline::Print(); +} diff --git a/source/visualization/Vtk/src/G4VtkQt.cc b/source/visualization/Vtk/src/G4VtkQt.cc index 205978e40e8..8c96f4438a1 100644 --- a/source/visualization/Vtk/src/G4VtkQt.cc +++ b/source/visualization/Vtk/src/G4VtkQt.cc @@ -24,46 +24,38 @@ // ******************************************************************** #include "G4VtkQt.hh" -#include "G4VtkQtSceneHandler.hh" -#include "G4VtkQtViewer.hh" #include "G4UIQt.hh" -#include "G4UImanager.hh" #include "G4UIbatch.hh" +#include "G4UImanager.hh" +#include "G4VtkQtSceneHandler.hh" +#include "G4VtkQtViewer.hh" -G4VtkQt::G4VtkQt(): G4VGraphicsSystem("VtkQt","VTKQt","VTK with Qt", - G4VGraphicsSystem::noFunctionality) +G4VtkQt::G4VtkQt() + : G4VGraphicsSystem("VtkQt", "VTKQt", "VTK with Qt", G4VGraphicsSystem::noFunctionality) {} -G4VtkQt::~G4VtkQt() {} - -G4VSceneHandler* G4VtkQt::CreateSceneHandler(const G4String& name) { - G4VSceneHandler* pScene = new G4VtkQtSceneHandler(*this, name); - return pScene; +G4VSceneHandler* G4VtkQt::CreateSceneHandler(const G4String& name) +{ + return new G4VtkQtSceneHandler(*this, name); } -G4VViewer* G4VtkQt::CreateViewer(G4VSceneHandler& scene, - const G4String& name) { - G4VViewer* pView = new G4VtkQtViewer((G4VtkQtSceneHandler&) scene, name); - if (pView) { - if (pView->GetViewId() < 0) { - G4cerr << "G4VtkQt::CreateViewer: ERROR flagged by negative" - " view id in G4VtkViewer creation." - "\n Destroying view and returning null pointer." - << G4endl; - delete pView; - pView = nullptr; - } - } - else { - G4cerr << "G4Vtk::CreateViewer: ERROR: null pointer on new G4VtkViewer." << G4endl; +G4VViewer* G4VtkQt::CreateViewer(G4VSceneHandler& scene, const G4String& name) +{ + G4VViewer* pView = new G4VtkQtViewer((G4VtkQtSceneHandler&)scene, name); + if (pView->GetViewId() < 0) { + G4cerr << "G4VtkQt::CreateViewer: ERROR flagged by negative" + " view id in G4VtkViewer creation." + "\n Destroying view and returning null pointer." + << G4endl; + delete pView; + pView = nullptr; } return pView; } -G4bool G4VtkQt::IsUISessionCompatible () const +G4bool G4VtkQt::IsUISessionCompatible() const { - G4bool isCompatible = false; G4UImanager* ui = G4UImanager::GetUIpointer(); G4UIsession* session = ui->GetSession(); @@ -73,18 +65,10 @@ G4bool G4VtkQt::IsUISessionCompatible () const // manager creates a temporary batch session and to find out if there is // a genuine UI session that the user has instantiated we must drill // down through previous sessions to a possible non-batch session. - while (G4UIbatch* batch = dynamic_cast(session)) { + while (auto batch = dynamic_cast(session)) { session = batch->GetPreviousSession(); } // Qt windows are only appropriate in a Qt session. - if (session) { - // If non-zero, this is the originating non-batch session - // The user has instantiated a UI session... - if (dynamic_cast(session)) { - // ...and it's a G4UIQt session, which is OK. - isCompatible = true; - } - } - return isCompatible; + return dynamic_cast(session) != nullptr; } diff --git a/source/visualization/Vtk/src/G4VtkQtSceneHandler.cc b/source/visualization/Vtk/src/G4VtkQtSceneHandler.cc index 403a82dc0d0..41866d38f36 100644 --- a/source/visualization/Vtk/src/G4VtkQtSceneHandler.cc +++ b/source/visualization/Vtk/src/G4VtkQtSceneHandler.cc @@ -25,29 +25,73 @@ #include "G4VtkQtSceneHandler.hh" -#include "G4PhysicalVolumeModel.hh" -#include "G4LogicalVolumeModel.hh" -#include "G4VPhysicalVolume.hh" +#include "G4Box.hh" +#include "G4Circle.hh" #include "G4LogicalVolume.hh" +#include "G4LogicalVolumeModel.hh" +#include "G4Material.hh" +#include "G4PhysicalVolumeModel.hh" +#include "G4Polyhedron.hh" #include "G4Polyline.hh" -#include "G4Text.hh" -#include "G4Circle.hh" #include "G4Square.hh" -#include "G4Polyhedron.hh" -#include "G4UnitsTable.hh" - #include "G4SystemOfUnits.hh" -#include "G4Material.hh" -#include "G4Box.hh" +#include "G4Text.hh" +#include "G4UnitsTable.hh" +#include "G4VPhysicalVolume.hh" G4int G4VtkQtSceneHandler::fSceneIdCount = 0; // Counter for XXX scene handlers. -G4VtkQtSceneHandler::G4VtkQtSceneHandler(G4VGraphicsSystem& system, - const G4String& name) : - G4VtkSceneHandler(system, name) +G4VtkQtSceneHandler::G4VtkQtSceneHandler(G4VGraphicsSystem& system, const G4String& name) + : G4VtkSceneHandler(system, name) {} -G4VtkQtSceneHandler::~G4VtkQtSceneHandler() {} +void G4VtkQtSceneHandler::AddPrimitive(const G4Polyline& polyline) +{ +#ifdef G4VTKDEBUG + G4cout << fpModel->GetGlobalDescription() << " " << fpModel->GetType() << G4endl; +#endif + + // Normal base class behaviour + G4VtkSceneHandler::AddPrimitive(polyline); +} + +void G4VtkQtSceneHandler::AddPrimitive(const G4Text& text) +{ +#ifdef G4VTKDEBUG + G4cout << fpModel->GetGlobalDescription() << " " << fpModel->GetType() << G4endl; +#endif + + // Normal base class behaviour + G4VtkSceneHandler::AddPrimitive(text); +} + +void G4VtkQtSceneHandler::AddPrimitive(const G4Circle& circle) +{ +#ifdef G4VTKDEBUG + G4cout << fpModel->GetGlobalDescription() << " " << fpModel->GetType() << G4endl; +#endif + + // Normal base class behaviour + G4VtkSceneHandler::AddPrimitive(circle); +} + +void G4VtkQtSceneHandler::AddPrimitive(const G4Square& square) +{ +#ifdef G4VTKDEBUG + G4cout << fpModel->GetGlobalDescription() << " " << fpModel->GetType() << G4endl; +#endif + + // Normal base class behaviour + G4VtkSceneHandler::AddPrimitive(square); +} +void G4VtkQtSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron) +{ +#ifdef G4VTKDEBUG + G4cout << fpModel->GetGlobalDescription() << " " << fpModel->GetType() << G4endl; +#endif + // Normal base class behaviour + G4VtkSceneHandler::AddPrimitive(polyhedron); +} diff --git a/source/visualization/Vtk/src/G4VtkQtViewer.cc b/source/visualization/Vtk/src/G4VtkQtViewer.cc index c8e4cd1d3eb..f90f4d8587a 100644 --- a/source/visualization/Vtk/src/G4VtkQtViewer.cc +++ b/source/visualization/Vtk/src/G4VtkQtViewer.cc @@ -23,66 +23,257 @@ // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** -#include "G4VSceneHandler.hh" - #include "G4VtkQtViewer.hh" -#include "G4VtkQtSceneHandler.hh" -#include "G4UImanager.hh" -#include "G4UIQt.hh" +#include "G4LogicalVolume.hh" #include "G4Qt.hh" +#include "G4UIQt.hh" +#include "G4UImanager.hh" +#include "G4VSceneHandler.hh" +#include "G4VtkInteractorStyle.hh" +#include "G4VtkQtSceneHandler.hh" +#include "G4VtkUtility.hh" -#include -#include "vtkVersion.h" -#include "vtkNew.h" -#include "vtkNamedColors.h" +#include "qcoreapplication.h" +#include "qlabel.h" +#include "qlayout.h" +#include "qlineedit.h" +#include "qopenglcontext.h" +#include "qpushbutton.h" +#include "qthread.h" +#include "qtreewidget.h" +#include "vtkActor.h" +#include "vtkCamera.h" #include "vtkCylinderSource.h" +#include "vtkGenericOpenGLRenderWindow.h" +#include "vtkNamedColors.h" +#include "vtkNew.h" #include "vtkPolyDataMapper.h" #include "vtkProperty.h" -#include "vtkCamera.h" -#include "vtkActor.h" #include "vtkRenderer.h" -#include "vtkGenericOpenGLRenderWindow.h" +#include "vtkVersion.h" -G4VtkQtViewer::G4VtkQtViewer (G4VSceneHandler& sceneHandler, const G4String& name) : - G4VtkViewer(sceneHandler, name) { +#include + +namespace +{ +G4Mutex mWaitForVisSubThreadQtOpenGLContextMoved = G4MUTEX_INITIALIZER; +G4Mutex mWaitForVisSubThreadQtOpenGLContextInitialized = G4MUTEX_INITIALIZER; +// avoid unused variable warning +#ifdef G4MULTITHREADED +G4Condition c1_VisSubThreadQtOpenGLContextInitialized = G4CONDITION_INITIALIZER; +G4Condition c2_VisSubThreadQtOpenGLContextMoved = G4CONDITION_INITIALIZER; +#endif +} // namespace + +G4VtkQtViewer::G4VtkQtViewer(G4VSceneHandler& sceneHandler, const G4String& name) + : G4VtkViewer(sceneHandler, name) +{ + lWaitForVisSubThreadQtOpenGLContextInitialized = + new G4AutoLock(mWaitForVisSubThreadQtOpenGLContextInitialized, std::defer_lock); + lWaitForVisSubThreadQtOpenGLContextMoved = + new G4AutoLock(mWaitForVisSubThreadQtOpenGLContextMoved, std::defer_lock); + + G4Qt::getInstance(); } -G4VtkQtViewer::~G4VtkQtViewer() {} +G4VtkQtViewer::~G4VtkQtViewer() +{ + delete lWaitForVisSubThreadQtOpenGLContextInitialized; + delete lWaitForVisSubThreadQtOpenGLContextMoved; +} void G4VtkQtViewer::Initialise() { CreateMainWindow(this, QString(GetName())); // Specific GL render window and interactor for Qt - _renderWindow = vtkGenericOpenGLRenderWindow::New(); + _renderWindow = vtkGenericOpenGLRenderWindow::New(); renderWindowInteractor = vtkRenderWindowInteractor::New(); _renderWindow->AddRenderer(renderer); -#if VTK_MAJOR_VERSION == 8 - this->SetRenderWindow(_renderWindow); -#else this->setRenderWindow(_renderWindow); -#endif // Set callback to match VTK parameters to Geant4 geant4Callback->SetGeant4ViewParameters(&fVP); renderer->AddObserver(vtkCommand::EndEvent, geant4Callback); + + // Hidden line removal + renderer->SetUseHiddenLineRemoval(0); + + // Shadows + renderer->SetUseShadows(0); + + vtkSmartPointer style = vtkSmartPointer::New(); + this->interactor()->SetInteractorStyle(style); } -void G4VtkQtViewer::CreateMainWindow(QVTKOpenGLNativeWidget *vtkWidget, - const QString& name) { - // G4Qt* interactorManager = G4Qt::getInstance (); +void G4VtkQtViewer::CreateMainWindow(QVTKOpenGLNativeWidget* vtkWidget, const QString& name) +{ G4UImanager* UI = G4UImanager::GetUIpointer(); - fUiQt = static_cast (UI->GetG4UIWindow()); - fUiQt->AddTabWidget((QWidget*)vtkWidget,name); + fUiQt = static_cast(UI->GetG4UIWindow()); + fUiQt->AddTabWidget((QWidget*)vtkWidget, name); + fGLWidget = vtkWidget; + createSceneTreeWidget(); +} + +#ifdef G4MULTITHREADED + +void G4VtkQtViewer::DoneWithMasterThread() +{ + // Called by Main Thread ! + + // Useful to avoid two vis thread at the same time + // G4MUTEXLOCK(&mWaitForVisSubThreadQtOpenGLContextInitialized); + if (!lWaitForVisSubThreadQtOpenGLContextInitialized->owns_lock()) + lWaitForVisSubThreadQtOpenGLContextInitialized->lock(); +} + +void G4VtkQtViewer::SwitchToVisSubThread() +{ + // Called by VisSub Thread ! + + auto qGLW = dynamic_cast(fGLWidget); + if (qGLW == nullptr) { + return; + } + + // Set the current QThread to its static variable + SetQGLContextVisSubThread(QThread::currentThread()); + + // - Wait for the vis thread to set its QThread + G4CONDITIONBROADCAST(&c1_VisSubThreadQtOpenGLContextInitialized); + // a condition without a locked mutex is an undefined behavior. + // we check if the mutex owns the lock, and if not, we lock it + if (!lWaitForVisSubThreadQtOpenGLContextMoved->owns_lock()) + lWaitForVisSubThreadQtOpenGLContextMoved->lock(); + + // Unlock the vis thread if it is Qt Viewer + G4CONDITIONWAIT(&c2_VisSubThreadQtOpenGLContextMoved, lWaitForVisSubThreadQtOpenGLContextMoved); + + // make context current + qGLW->makeCurrent(); +} + +void G4VtkQtViewer::DoneWithVisSubThread() +{ + // Called by vis sub thread + auto qGLW = dynamic_cast(fGLWidget); + if (qGLW == nullptr) { + return; + } + + // finish with this vis sub thread context + qGLW->doneCurrent(); + + // and move it back to the main thread + qGLW->context()->moveToThread(fQGLContextMainThread); } +void G4VtkQtViewer::SwitchToMasterThread() +{ + // Called by VisSub Thread ! + + auto qGLW = dynamic_cast(fGLWidget); + if (qGLW == nullptr) { + return; + } + + // Useful to avoid two vis thread at the same time + // G4MUTEXUNLOCK(&mWaitForVisSubThreadQtOpenGLContextInitialized); + if (lWaitForVisSubThreadQtOpenGLContextInitialized->owns_lock()) + lWaitForVisSubThreadQtOpenGLContextInitialized->unlock(); + + qGLW->makeCurrent(); +} + +void G4VtkQtViewer::MovingToVisSubThread() +{ + // Called by Main Thread ! + + auto qGLW = dynamic_cast(fGLWidget); + if (qGLW == nullptr) { + return; + } + + // a condition without a locked mutex is an undefined behavior. + // we check if the mutex owns the lock, and if not, we lock it + if (!lWaitForVisSubThreadQtOpenGLContextInitialized->owns_lock()) + lWaitForVisSubThreadQtOpenGLContextInitialized->lock(); + + // - Wait for the vis sub thread to set its QThread + G4CONDITIONWAIT(&c1_VisSubThreadQtOpenGLContextInitialized, + lWaitForVisSubThreadQtOpenGLContextInitialized); + + // Set current QThread for the way back + SetQGLContextMainThread(QThread::currentThread()); + + // finish with this main thread context + qGLW->doneCurrent(); + qGLW->context()->moveToThread(fQGLContextVisSubThread); + G4CONDITIONBROADCAST(&c2_VisSubThreadQtOpenGLContextMoved); +} +#endif + void G4VtkQtViewer::FinishView() { - G4VtkViewer::FinishView(); - // force a widget repaint as there should already - // be a rendered buffer when visualiser starts up - // paintGL(); - // repaint(); -} \ No newline at end of file + auto& fVtkSceneHandler = dynamic_cast(fSceneHandler); + fVtkSceneHandler.Modified(); + + _renderWindow->Render(); + auto qGLW = dynamic_cast(fGLWidget); + qGLW->interactor()->Initialize(); + qGLW->interactor()->Start(); +} + +void G4VtkQtViewer::createSceneTreeWidget() {} + +void G4VtkQtViewer::createSceneTreeComponent() {} + +QTreeWidgetItem* +G4VtkQtViewer::createTreeWidgetItem(const PVPath& /*fullPath*/, const QString& /*name*/, + int /*copyNb*/, int /*POIndex*/, const QString& /*logicalName*/, + Qt::CheckState /*state*/, QTreeWidgetItem* /*parentTreeNode*/, + const G4Colour& /*color*/) +{ + QTreeWidgetItem* newItem = nullptr; + return newItem; +} + +void G4VtkQtViewer::addNonPVSceneTreeElement(const G4String& /*model*/, G4Visible& /*visible*/, + int /*currentPOIndex*/) +{} + +void G4VtkQtViewer::addPVSceneTreeElement(const G4String& /*model*/, + G4PhysicalVolumeModel* /*pPVModel*/, + int /*currentPOIndex*/) +{} + +QString G4VtkQtViewer::getModelShortName(const G4String& /*model*/) +{ + QString modelShortName; + return modelShortName; +} + +bool G4VtkQtViewer::parseAndInsertInSceneTree(QTreeWidgetItem* /*parentItem*/, + G4PhysicalVolumeModel* /*pPVModel*/, + unsigned int /*fullPathIndex*/, + const QString& /*parentRoot*/, + unsigned int /*currentIndexInTreeSceneHandler*/, + int /*currentPVPOIndex*/) +{ + return false; +} + +void G4VtkQtViewer::EnableClipperWidget() +{ + G4VtkViewer::EnableClipperWidget(); + auto qGLW = dynamic_cast(fGLWidget); + qGLW->interactor()->Initialize(); +} + +void G4VtkQtViewer::SetWidgetInteractor(vtkAbstractWidget* widget) +{ + auto qGLW = dynamic_cast(fGLWidget); + widget->SetInteractor(qGLW->interactor()); +} diff --git a/source/visualization/Vtk/src/G4VtkSceneHandler.cc b/source/visualization/Vtk/src/G4VtkSceneHandler.cc index cc3c9ef12af..cd872d68dfb 100644 --- a/source/visualization/Vtk/src/G4VtkSceneHandler.cc +++ b/source/visualization/Vtk/src/G4VtkSceneHandler.cc @@ -25,852 +25,260 @@ // // // -// +// // John Allison 5th April 2001 // A template for a simplest possible graphics driver. //?? Lines or sections marked like this require specialisation for your driver. #include "G4VtkSceneHandler.hh" -#include "G4PhysicalVolumeModel.hh" -#include "G4LogicalVolumeModel.hh" -#include "G4VPhysicalVolume.hh" -#include "G4LogicalVolume.hh" -#include "G4Polyline.hh" -#include "G4Text.hh" +#include "G4Box.hh" #include "G4Circle.hh" -#include "G4Square.hh" -#include "G4Polyhedron.hh" +#include "G4LogicalVolume.hh" +#include "G4LogicalVolumeModel.hh" +#include "G4Material.hh" #include "G4Mesh.hh" +#include "G4PhysicalVolumeModel.hh" +#include "G4Polyhedron.hh" +#include "G4Polyline.hh" #include "G4PseudoScene.hh" -#include "G4UnitsTable.hh" - +#include "G4Square.hh" #include "G4SystemOfUnits.hh" -#include "G4Material.hh" -#include "G4Box.hh" - -#include - -namespace std -{ - inline void hash_combine(std::size_t) {} +#include "G4Text.hh" +#include "G4UnitsTable.hh" +#include "G4VNestedParameterisation.hh" +#include "G4VPhysicalVolume.hh" +#include "G4VtkStore.hh" +#include "G4VtkVisContext.hh" - template - inline void hash_combine(std::size_t &seed, const T &v, Rest... rest) { - std::hash hasher; - seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2); - std::hash_combine(seed, rest...); - } +#include "vtkColorTransferFunction.h" +#include "vtkContourValues.h" +#include "vtkPiecewiseFunction.h" +#include "vtkVolumeProperty.h" - template<> struct hash { - std::size_t operator()(const G4VisAttributes &va) const { - using std::size_t; - using std::hash; - - std::size_t h = 0; - - std::hash_combine(h,va.IsVisible()); - std::hash_combine(h,va.IsDaughtersInvisible()); - std::hash_combine(h,va.GetColour().GetRed()); - std::hash_combine(h,va.GetColour().GetGreen()); - std::hash_combine(h,va.GetColour().GetBlue()); - std::hash_combine(h,va.GetColour().GetAlpha()); - std::hash_combine(h,static_cast(va.GetLineStyle())); - - return h; - } - }; - - template<> struct hash { - std::size_t operator()(const G4Polyhedron &ph) const { - using std::size_t; - using std::hash; - - G4bool notLastFace; - G4Point3D vertex[4]; - G4int edgeFlag[4]; - G4Normal3D normals[4]; - G4int nEdges; - - std::size_t h = 0; - - do { - notLastFace = ph.GetNextFacet(nEdges, vertex, edgeFlag, normals); - - for (int i = 0; i < nEdges; i++) { - std::size_t hx = std::hash()(vertex[i].x()); - std::size_t hy = std::hash()(vertex[i].y()); - std::size_t hz = std::hash()(vertex[i].z()); - std::hash_combine(h,hx); - std::hash_combine(h,hy); - std::hash_combine(h,hz); - } - } while (notLastFace); - - return h; - } - }; -} +#include G4int G4VtkSceneHandler::fSceneIdCount = 0; // Counter for XXX scene handlers. -G4VtkSceneHandler::G4VtkSceneHandler(G4VGraphicsSystem& system, - const G4String& name) : - G4VSceneHandler(system, fSceneIdCount++, name) +G4VtkSceneHandler::G4VtkSceneHandler(G4VGraphicsSystem& system, const G4String& name) + : G4VSceneHandler(system, fSceneIdCount++, name), polyhedronPipelineType(G4String("tensor")) {} +void G4VtkSceneHandler::AddPrimitive(const G4Polyline& polyline) +{ #ifdef G4VTKDEBUG -void G4VtkSceneHandler::PrintThings() { - G4cout << " with transformation " << fObjectTransformation.xx() << G4endl; - if (fpModel) { - G4cout << " from " << fpModel->GetCurrentDescription() - << " (tag " << fpModel->GetCurrentTag() - << ')'; - } - else { - G4cout << "(not from a model)"; - } - G4PhysicalVolumeModel* pPVModel = dynamic_cast(fpModel); - if (pPVModel) { - G4cout << "\n current physical volume: " << pPVModel->GetCurrentPV()->GetName() - << "\n current logical volume : " << pPVModel->GetCurrentLV()->GetName() // There might be a problem with the LV pointer if this is a G4LogicalVolumeModel - << "\n current depth of geometry tree: " << pPVModel->GetCurrentDepth(); - } - G4cout << G4endl; -} + G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Polyline&)" << G4endl; #endif + auto vc = MakeDefaultVisContext(); -void G4VtkSceneHandler::AddPrimitive(const G4Polyline& polyline) { - - G4VSceneHandler::MarkerSizeType sizeType; - // GetMarkerSize(text,sizeType); - if(fProcessing2D) {sizeType = screen;} - else {sizeType = world;} - - // Get vis attributes - pick up defaults if none. - const G4VisAttributes* pVA = fpViewer -> GetApplicableVisAttributes(polyline.GetVisAttributes()); - G4Color colour = pVA->GetColour(); - G4double opacity = colour.GetAlpha(); - G4double lineWidth = pVA->GetLineWidth(); + if (fReadyForTransients) + transientStore.AddPrimitive(polyline, vc); + else + store.AddPrimitive(polyline, vc); +} +void G4VtkSceneHandler::AddPrimitive(const G4Text& text) +{ #ifdef G4VTKDEBUG - G4cout << "=================================" << G4endl; - G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Polyline& polyline) called> vis hash: " << sizeType << " " << std::hash{}(*pVA) << G4endl; - G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Polyline& polyline) called> sizeType: " << sizeType << G4endl; - G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Polyline& polyline) called> isVisible: " << pVA->IsVisible() << G4endl; - G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Polyline& polyline) called> isDaughtersInvisible: " << pVA->IsDaughtersInvisible() << G4endl; - G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Polyline& polyline) called> colour: " << colour.GetRed() << " " << colour.GetGreen() << " " << colour.GetBlue() << G4endl; - G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Polyline& polyline) called> alpha: " << colour.GetAlpha() << G4endl; - G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Polyline& polyline) called> lineWidth: " << lineWidth << G4endl; + G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Text& text)" << G4endl; #endif - if(sizeType == world) { - std::size_t hash = std::hash{}(*pVA); - if (polylineVisAttributesMap.find(hash) == polylineVisAttributesMap.end()) { - polylineVisAttributesMap.insert(std::pair(hash, pVA)); - - vtkSmartPointer data = vtkSmartPointer::New(); - vtkSmartPointer lines = vtkSmartPointer::New(); - vtkSmartPointer polyData = vtkSmartPointer::New(); - vtkSmartPointer mapper = vtkSmartPointer::New(); - vtkSmartPointer actor = vtkSmartPointer::New(); - - polyData->SetPoints(data); - polyData->SetLines(lines); - mapper->SetInputData(polyData); - actor->SetMapper(mapper); - - // Setup actor and mapper - actor->GetProperty()->SetLineWidth(lineWidth); - actor->GetProperty()->SetColor(colour.GetRed(), colour.GetGreen(), - colour.GetBlue()); - actor->GetProperty()->SetOpacity(opacity); - actor->SetVisibility(1); - // actor->GetProperty()->BackfaceCullingOn(); - // actor->GetProperty()->FrontfaceCullingOn(); - - auto pVtkViewer = dynamic_cast(fpViewer); - pVtkViewer->renderer->AddActor(actor); - - polylineDataMap.insert( - std::pair>(hash, data)); - polylineLineMap.insert( - std::pair>(hash, lines)); - polylinePolyDataMap.insert( - std::pair>(hash, polyData)); - polylinePolyDataMapperMap.insert( - std::pair>(hash, - mapper)); - polylinePolyDataActorMap.insert( - std::pair>(hash, actor)); - } - - // Data data - const size_t nLines = polyline.size(); - - for (size_t i = 0; i < nLines; ++i) { - auto id = polylineDataMap[hash]->InsertNextPoint(polyline[i].x(), - polyline[i].y(), - polyline[i].z()); - if (i < nLines - 1) { - vtkSmartPointer line = vtkSmartPointer::New(); - line->GetPointIds()->SetId(0, id); - line->GetPointIds()->SetId(1, id + 1); - polylineLineMap[hash]->InsertNextCell(line); - } - } - } - else if (sizeType == screen ) { + auto vc = MakeDefaultVisContext(); - } + if (fReadyForTransients) + transientStore.AddPrimitive(text, vc); + else + store.AddPrimitive(text, vc); } -void G4VtkSceneHandler::AddPrimitive(const G4Text& text) { - - G4VSceneHandler::MarkerSizeType sizeType; - if(fProcessing2D) {sizeType = screen;} - else {sizeType = world;} - - const G4VisAttributes* pVA = fpViewer -> GetApplicableVisAttributes(text.GetVisAttributes()); - G4Color colour = pVA->GetColour(); - G4double opacity = colour.GetAlpha(); - // G4Text::Layout layout = text.GetLayout(); - // G4double xOffset = text.GetXOffset(); - // G4double yOffset = text.GetYOffset(); - - double x = text.GetPosition().x(); - double y = text.GetPosition().y(); - double z = text.GetPosition().z(); - +void G4VtkSceneHandler::AddPrimitive(const G4Circle& circle) +{ #ifdef G4VTKDEBUG - G4cout << "=================================" << G4endl; - G4cout << "G4VtkSeneHandler::AddPrimitive(const G4Text& text) called> text: " << text.GetText() << " sizeType:" << sizeType << " " << fProcessing2D << G4endl; - G4cout << "G4VtkSeneHandler::AddPrimitive(const G4Text& text) called> colour: " << colour.GetRed() << " " << colour.GetBlue() << " " << colour.GetGreen() << G4endl; - G4cout << "G4VtkSeneHandler::AddPrimitive(const G4Text& text) called> alpha: " << colour.GetAlpha() << G4endl; - G4cout << "G4VtkSeneHandler::AddPrimitive(const G4Text& text) called> position: " << x << " " << y << " " << z << G4endl; + G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Circle& circle)" << G4endl; #endif - switch (sizeType) { - default: - case (screen): { - vtkSmartPointer actor = vtkSmartPointer::New(); - actor->SetInput(text.GetText().c_str()); - actor->GetPositionCoordinate()->SetCoordinateSystemToNormalizedViewport(); - // actor->SetTextScaleModeToViewport(); - actor->SetPosition((x+1.)/2.0, (y+1.)/2.); - actor->GetTextProperty()->SetFontSize(text.GetScreenSize()); - actor->GetTextProperty()->SetColor(colour.GetRed(), colour.GetBlue(), colour.GetGreen()); - actor->GetTextProperty()->SetOpacity(opacity); - - auto *pVtkViewer = dynamic_cast(fpViewer); - pVtkViewer->renderer->AddActor(actor); - break; - } - case world: { - vtkSmartPointer actor = vtkSmartPointer::New(); - actor->SetInput(text.GetText().c_str()); - actor->SetPosition(x, y, z); - actor->GetTextProperty()->SetFontSize(text.GetScreenSize()); - actor->GetTextProperty()->SetColor(colour.GetRed(), colour.GetBlue(), colour.GetGreen()); - actor->GetTextProperty()->SetOpacity(opacity); - - auto *pVtkViewer = dynamic_cast(fpViewer); - pVtkViewer->renderer->AddActor(actor); - break; - } - } -} - -void G4VtkSceneHandler::AddPrimitive(const G4Circle& circle) { - - MarkerSizeType sizeType; - G4double size= GetMarkerSize(circle, sizeType); - if(fProcessing2D) {sizeType = screen;} - else {sizeType = world;} + auto vc = MakeDefaultVisContext(); + G4VSceneHandler::MarkerSizeType sizeType; + vc.fSize = GetMarkerSize(circle, sizeType); - // Get vis attributes - pick up defaults if none. - const G4VisAttributes *pVA = fpViewer->GetApplicableVisAttributes(circle.GetVisAttributes()); - G4Color colour = pVA->GetColour(); - G4double opacity = colour.GetAlpha(); - // G4bool isVisible = pVA->IsVisible(); + if (fReadyForTransients) + transientStore.AddPrimitive(circle, vc); + else + store.AddPrimitive(circle, vc); +} +void G4VtkSceneHandler::AddPrimitive(const G4Square& square) +{ #ifdef G4VTKDEBUG - G4cout << "=================================" << G4endl; - G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Circle& circle) called> " << " radius:" << size << " sizeType:" << sizeType << G4endl; - G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Circle& circle) called> colour: " << colour.GetRed() << " " << colour.GetBlue() << " " << colour.GetGreen() << G4endl; - G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Circle& circle) called> alpha: " << colour.GetAlpha() << G4endl; + G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Square& square)" << G4endl; #endif - if (sizeType == world) { - std::size_t hash = std::hash{}(*pVA); - if (circleVisAttributesMap.find(hash) == circleVisAttributesMap.end()) { - circleVisAttributesMap.insert(std::pair(hash, pVA)); - - vtkSmartPointer data = vtkSmartPointer::New(); - vtkSmartPointer polyData = vtkSmartPointer::New(); - vtkSmartPointer filter = vtkSmartPointer::New(); - vtkSmartPointer mapper = vtkSmartPointer::New(); - vtkSmartPointer actor = vtkSmartPointer::New(); - - polyData->SetPoints(data); - filter->SetInputData(polyData); - mapper->SetInputConnection(filter->GetOutputPort()); - actor->SetMapper(mapper); - - // Setup actor and mapper - actor->GetProperty()->SetColor(colour.GetRed(), colour.GetGreen(), colour.GetBlue()); - actor->GetProperty()->SetOpacity(opacity); - actor->SetVisibility(1); - actor->GetProperty()->SetRenderPointsAsSpheres(true); - actor->GetProperty()->SetPointSize(size*5); - - auto *pVtkViewer = dynamic_cast(fpViewer); - pVtkViewer->renderer->AddActor(actor); - - circleDataMap.insert(std::pair>(hash, data)); - circlePolyDataMap.insert(std::pair>(hash, polyData)); - circleFilterMap.insert(std::pair>(hash, filter)); - circlePolyDataMapperMap.insert(std::pair>(hash, mapper)); - circlePolyDataActorMap.insert(std::pair>(hash, actor)); - } - - // Data data point - const CLHEP::HepRotation rot = fObjectTransformation.getRotation(); - G4Point3D posPrime = rot*circle.GetPosition(); - circleDataMap[hash]->InsertNextPoint(fObjectTransformation.dx() + posPrime.x(), - fObjectTransformation.dy() + posPrime.y(), - fObjectTransformation.dz() + posPrime.z()); - } - else if (sizeType == screen) { + auto vc = MakeDefaultVisContext(); + G4VSceneHandler::MarkerSizeType sizeType; + vc.fSize = GetMarkerSize(square, sizeType); - } + if (fReadyForTransients) + transientStore.AddPrimitive(square, vc); + else + store.AddPrimitive(square, vc); } -void G4VtkSceneHandler::AddPrimitive(const G4Square& square) { - - MarkerSizeType sizeType; - G4double size = GetMarkerSize (square, sizeType); - - // Get vis attributes - pick up defaults if none. - const G4VisAttributes* pVA = fpViewer -> GetApplicableVisAttributes(square.GetVisAttributes()); - G4Color colour = pVA->GetColour(); - G4double opacity = colour.GetAlpha(); - // G4bool isVisible = pVA->IsVisible(); - - // Draw in world coordinates. - vtkSmartPointer polygonSource = vtkSmartPointer::New(); - polygonSource->SetNumberOfSides(4); - polygonSource->SetRadius(size); - - +void G4VtkSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron) +{ #ifdef G4VTKDEBUG - G4cout << "=================================" << G4endl; - G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Square& square) called" << G4endl; - G4cout << square.GetPosition().x() << " " << square.GetPosition().y() << " " << square.GetPosition().z() << G4endl; - //PrintThings(); + G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron)" << G4endl; #endif - if (sizeType == world) { - std::size_t hash = std::hash{}(*pVA); - if (squareVisAttributesMap.find(hash) == squareVisAttributesMap.end()) { - squareVisAttributesMap.insert(std::pair(hash, pVA)); - - vtkSmartPointer data = vtkSmartPointer::New(); - vtkSmartPointer polyData = vtkSmartPointer::New(); - vtkSmartPointer filter = vtkSmartPointer::New(); - vtkSmartPointer mapper = vtkSmartPointer::New(); - vtkSmartPointer actor = vtkSmartPointer::New(); - - polyData->SetPoints(data); - filter->SetInputData(polyData); - mapper->SetInputConnection(filter->GetOutputPort()); - actor->SetMapper(mapper); - - // Setup actor and mapper - actor->GetProperty()->SetColor(colour.GetRed(), colour.GetGreen(), colour.GetBlue()); - actor->GetProperty()->SetOpacity(opacity); - actor->SetVisibility(1); - actor->GetProperty()->SetPointSize(size*5); - - auto *pVtkViewer = dynamic_cast(fpViewer); - pVtkViewer->renderer->AddActor(actor); - - squareDataMap.insert(std::pair>(hash, data)); - squarePolyDataMap.insert(std::pair>(hash, polyData)); - squareFilterMap.insert(std::pair>(hash, filter)); - squarePolyDataMapperMap.insert(std::pair>(hash, mapper)); - squarePolyDataActorMap.insert(std::pair>(hash, actor)); - } - - // Data data point - const CLHEP::HepRotation rot = fObjectTransformation.getRotation(); - G4Point3D posPrime = rot*square.GetPosition(); - squareDataMap[hash]->InsertNextPoint(fObjectTransformation.dx() + posPrime.x(), - fObjectTransformation.dy() + posPrime.y(), - fObjectTransformation.dz() + posPrime.z()); + auto vc = MakeDefaultVisContext(); + auto visAtt = vc.fViewer->GetApplicableVisAttributes(polyhedron.GetVisAttributes()); + auto colour = visAtt->GetColour(); + + vc.fDrawingStyle = GetDrawingStyle(visAtt); + vc.alpha = colour.GetAlpha(); + vc.red = colour.GetRed(); + vc.green = colour.GetGreen(); + vc.blue = colour.GetBlue(); + + auto pPVModel = dynamic_cast(fpModel); + if (pPVModel != nullptr) { + vc.fDepth = pPVModel->GetCurrentDepth(); + vc.fDescription = pPVModel->GetCurrentDescription(); } - else if (sizeType == screen) { + if (fReadyForTransients) { + if (polyhedronPipelineType == "tensor") + transientStore.AddPrimitiveTensorGlyph(polyhedron, vc); + else if (polyhedronPipelineType == "append") + transientStore.AddPrimitiveAppend(polyhedron, vc); + else if (polyhedronPipelineType == "bake") + transientStore.AddPrimitiveTransformBake(polyhedron, vc); + else if (polyhedronPipelineType == "separate") + transientStore.AddPrimitiveSeparate(polyhedron, vc); + } + else { + if (polyhedronPipelineType == "tensor") + store.AddPrimitiveTensorGlyph(polyhedron, vc); + else if (polyhedronPipelineType == "append") + store.AddPrimitiveAppend(polyhedron, vc); + else if (polyhedronPipelineType == "bake") + store.AddPrimitiveTransformBake(polyhedron, vc); + else if (polyhedronPipelineType == "separate") + store.AddPrimitiveSeparate(polyhedron, vc); } } -void G4VtkSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron) { - AddPrimitiveTensorGlyph(polyhedron); -} - -void G4VtkSceneHandler::AddPrimitiveTensorGlyph(const G4Polyhedron& polyhedron) { - // only have a single polydata object for each LV but bake in the PV - // transformation so clippers and cutters can be implemented - - //Get colour, etc.. - if (polyhedron.GetNoFacets() == 0) {return;} - - // Get vis attributes - pick up defaults if none. - const G4VisAttributes *pVA = fpViewer->GetApplicableVisAttributes(polyhedron.GetVisAttributes()); - G4Color colour = pVA->GetColour(); - // G4bool isVisible = pVA->IsVisible(); - // G4double lineWidth = pVA->GetLineWidth(); - // G4VisAttributes::LineStyle lineStyle = pVA->GetLineStyle(); - - // G4double lineWidthScale = drawing_style.GetGlobalLineWidthScale(); - - // Get view parameters that the user can force through the vis attributes, thereby over-riding the current view parameter. - G4ViewParameters::DrawingStyle drawing_style = GetDrawingStyle(pVA); - //G4bool isAuxEdgeVisible = GetAuxEdgeVisible (pVA); +void G4VtkSceneHandler::Modified() +{ #ifdef G4VTKDEBUG - G4cout << "=================================" << G4endl; - G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron) called> " << G4endl; - G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron) called> colour:" << colour.GetRed() << " " << colour.GetBlue() << " " << colour.GetGreen() << G4endl; - G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron) called> alpha:" << colour.GetAlpha() << G4endl; - G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron) called> lineWidth:" << lineWidth << G4endl; - G4cout << "G4VtkSceneHandler::AddPrimitive(const G4Polyhedron& polyhedron) called> lineStyle:" << lineStyle << G4endl; + G4cout << "G4VtkSceneHandler::Modified()" << G4endl; #endif - //std::size_t vhash = std::hash{}(*pVA); - - std::size_t vhash = 0; - std::hash_combine(vhash,static_cast(drawing_style)); - - std::size_t phash = std::hash{}(polyhedron); - - std::size_t hash = 0; - std::hash_combine(hash, phash); - std::hash_combine(hash, vhash); - - if (polyhedronPolyDataMap.find(hash) == polyhedronPolyDataMap.end()) { - - vtkSmartPointer points = vtkSmartPointer::New(); - vtkSmartPointer polys = vtkSmartPointer::New(); - vtkSmartPointer polydata = vtkSmartPointer::New(); - - G4bool notLastFace; - int iVert = 0; - do { - G4Point3D vertex[4]; - G4int edgeFlag[4]; - G4Normal3D normals[4]; - G4int nEdges; - notLastFace = polyhedron.GetNextFacet(nEdges, vertex, edgeFlag, normals); - - vtkSmartPointer poly = vtkSmartPointer::New(); - // loop over vertices - for (int i = 0; i < nEdges; i++) { - points->InsertNextPoint(vertex[i].x(), vertex[i].y(), vertex[i].z()); - poly->InsertNextId(iVert); - iVert++; - } - polys->InsertNextCell(poly); - - } while (notLastFace); - - polydata->SetPoints(points); - polydata->SetPolys(polys); - - polyhedronDataMap.insert(std::pair>(hash, points)); - polyhedronPolyMap.insert(std::pair>(hash, polys)); - polyhedronPolyDataMap.insert(std::pair>(hash, polydata)); - polyhedronPolyDataCountMap.insert(std::pair(hash, 0)); - - vtkSmartPointer instancePosition = vtkSmartPointer::New(); - vtkSmartPointer instanceRotation = vtkSmartPointer::New(); - vtkSmartPointer instanceColors = vtkSmartPointer::New(); - vtkSmartPointer instanceMapper = vtkSmartPointer::New(); - vtkSmartPointer instanceActor = vtkSmartPointer::New(); - instanceColors->SetName("colors"); - - instanceColors->SetNumberOfComponents(4); - instanceRotation->SetNumberOfComponents(9); - - vtkSmartPointer instancePolyData = vtkSmartPointer::New(); - instancePolyData->SetPoints(instancePosition); - instancePolyData->GetPointData()->SetTensors(instanceRotation); - instancePolyData->GetPointData()->SetVectors(instanceColors); - instancePolyData->GetPointData()->SetScalars(instanceColors); - - vtkSmartPointer filterClean = vtkSmartPointer::New(); - filterClean->PointMergingOn(); - filterClean->AddInputData(polydata); - - vtkSmartPointer filterTriangle = vtkSmartPointer::New(); - filterTriangle->SetInputConnection(filterClean->GetOutputPort()); - - vtkSmartPointer filterNormals = vtkSmartPointer::New(); - filterNormals->SetFeatureAngle(45); - filterNormals->SetInputConnection(filterTriangle->GetOutputPort()); - - vtkSmartPointer filterEdge = vtkSmartPointer::New(); - filterEdge->SetFeatureEdges(1); - filterEdge->SetManifoldEdges(0); - filterEdge->SetBoundaryEdges(0); - filterEdge->SetFeatureAngle(45); // TODO need to have a function and command to set this - filterEdge->SetInputConnection(filterTriangle->GetOutputPort()); - - vtkSmartPointer tensorGlyph = vtkSmartPointer::New(); - tensorGlyph->SetInputData(instancePolyData); - tensorGlyph->SetSourceConnection(filterNormals->GetOutputPort()); - tensorGlyph->ColorGlyphsOn(); - tensorGlyph->ScalingOff(); - tensorGlyph->ThreeGlyphsOff(); - tensorGlyph->ExtractEigenvaluesOff(); - tensorGlyph->SetColorModeToScalars(); - tensorGlyph->Update(); - - instanceMapper->SetInputData(tensorGlyph->GetOutput()); - instanceMapper->SetColorModeToDirectScalars(); - - instanceActor->SetMapper(instanceMapper); - // instanceActor->GetProperty()->SetLineWidth(10); - instanceActor->SetVisibility(1); - - if(drawing_style == G4ViewParameters::hsr) { - - } - - if(drawing_style == G4ViewParameters::hlr) { - } - - if(drawing_style == G4ViewParameters::wireframe) { - instanceActor->GetProperty()->SetRepresentationToWireframe(); - } - - auto *pVtkViewer = dynamic_cast(fpViewer); - pVtkViewer->renderer->AddActor(instanceActor); - - instancePositionMap.insert(std::pair>(hash, instancePosition)); - instanceRotationMap.insert(std::pair>(hash, instanceRotation)); - instanceColoursMap.insert(std::pair>(hash, instanceColors)); - instancePolyDataMap.insert(std::pair>(hash,instancePolyData)); - instanceActorMap.insert(std::pair>(hash, instanceActor)); - instanceTensorGlyphMap.insert(std::pair>(hash, tensorGlyph)); - } - - polyhedronPolyDataCountMap[hash]++; - - double red = colour.GetRed(); - double green = colour.GetGreen(); - double blue = colour.GetBlue(); - double alpha = colour.GetAlpha(); - - instanceColoursMap[hash]->InsertNextTuple4(red, green, blue, alpha); - - instancePositionMap[hash]->InsertNextPoint(fObjectTransformation.dx(), - fObjectTransformation.dy(), - fObjectTransformation.dz()); - - G4Transform3D fInvObjTrans = fObjectTransformation.inverse(); - - instanceRotationMap[hash]->InsertNextTuple9(fInvObjTrans.xx(), fInvObjTrans.xy(),fInvObjTrans.xz(), - fInvObjTrans.yx(), fInvObjTrans.yy(),fInvObjTrans.yz(), - fInvObjTrans.zx(), fInvObjTrans.zy(),fInvObjTrans.zz()); - + store.Modified(); + transientStore.Modified(); } -void G4VtkSceneHandler::AddPrimitiveBakedTransform(const G4Polyhedron& polyhedron) +void G4VtkSceneHandler::ClearStore() { - // only have a single polydata object for each LV but bake in the PV - // transformation so clippers and cutters can be implemented - AddPrimitiveTensorGlyph(polyhedron); +#ifdef G4VTKDEBUG + G4cout << "G4VtkSceneHandler::ClearStore()" << G4endl; +#endif + store.Clear(); } -void G4VtkSceneHandler::Modified() { - for (auto it = polylineDataMap.begin(); it != polylineDataMap.end(); it++) - { - it->second->Modified(); - } - - for (auto it = polylineLineMap.begin(); it != polylineLineMap.end(); it++) - { - it->second->Modified(); - } - for (auto it = circleDataMap.begin(); it != circleDataMap.end(); it++) - { - it->second->Modified(); - } - - for (auto it = squareDataMap.begin(); it != squareDataMap.end(); it++) - { - it->second->Modified(); - } - - for(auto it = instancePositionMap.begin(); it != instancePositionMap.end(); it++) - { - it->second->Modified(); - } - - for(auto it = instanceRotationMap.begin(); it != instanceRotationMap.end(); it++) - { - it->second->Modified(); - } - - for(auto it = instanceColoursMap.begin(); it != instanceColoursMap.end(); it++) - { - it->second->Modified(); - } - - for(auto it = instancePolyDataMap.begin(); it != instancePolyDataMap.end(); it++) - { - it->second->Modified(); - } - - for(auto it = instanceActorMap.begin(); it != instanceActorMap.end(); it++) - { - it->second->Modified(); - } - - for(auto it = instanceTensorGlyphMap.begin(); it != instanceTensorGlyphMap.end(); it++) - { - it->second->Update(); - } +void G4VtkSceneHandler::ClearTransientStore() +{ #ifdef G4VTKDEBUG - G4cout << "G4VtkSceneHandler::Modified() polyline styles: " << polylineVisAttributesMap.size() << G4endl; - for (auto it = polylineLineMap.begin(); it != polylineLineMap.end(); it++) - { - G4cout << "G4VtkSceneHandler::Modified() polyline segments: " - << it->second->GetNumberOfCells() << G4endl; - } - G4cout << "G4VtkSceneHandler::Modified() circle styles: " << circleVisAttributesMap.size() << G4endl; - for (auto it = circleDataMap.begin(); it != circleDataMap.end(); it++) - { - G4cout << "G4VtkSceneHandler::Modified() circles: " - << it->second->GetNumberOfPoints() << G4endl; - } - - G4cout << "G4VtkSceneHandler::Modified() square styles: " << squareVisAttributesMap.size() << G4endl; - for (auto it = squareDataMap.begin(); it != squareDataMap.end(); it++) - { - G4cout << "G4VtkSceneHanler::Modified() squares: " - << it->second->GetNumberOfPoints() << G4endl; - } - - G4cout << "G4VtkSceneHandler::Modified() unique polyhedra: " << polyhedronDataMap.size() << G4endl; - - int nPlacements = 0; - int nCells = 0; - for (auto it = polyhedronPolyDataMap.begin(); it != polyhedronPolyDataMap.end(); it++) { - G4cout << "G4VtkSceneHandler::Modified() polyhedronPolyData: " << it->second->GetPoints()->GetNumberOfPoints() << " " << it->second->GetPolys()->GetNumberOfCells() << " " << polyhedronPolyDataCountMap[it->first] <second->GetPolys()->GetNumberOfCells()*polyhedronPolyDataCountMap[it->first]; - nPlacements += polyhedronPolyDataCountMap[it->first]; - } - G4cout << "G4VtkSceneHandler::Modified() polyhedronPolyData: " << nPlacements << " " << nCells << G4endl; + G4cout << "G4VtkSceneHandler::ClearTransientStore()" << G4endl; #endif + transientStore.Clear(); } -void G4VtkSceneHandler::Clear() { - - polylineVisAttributesMap.clear(); - polylineDataMap.clear(); - polylineLineMap.clear(); - polylinePolyDataMap.clear(); - polylinePolyDataMapperMap.clear(); - polylinePolyDataActorMap.clear(); - - for (auto& v : polylineDataMap) - {v.second->Reset();} - for (auto& v : polylineLineMap) - {v.second->Reset();} - - circleVisAttributesMap.clear(); - circleDataMap.clear(); - circlePolyDataMap.clear(); - circleFilterMap.clear(); - circlePolyDataMapperMap.clear(); - circlePolyDataActorMap.clear(); - - squareVisAttributesMap.clear(); - squareDataMap.clear(); - squarePolyDataMap.clear(); - squareFilterMap.clear(); - squarePolyDataMapperMap.clear(); - squarePolyDataActorMap.clear(); - - for (auto& v : squareDataMap) - {v.second->Reset();} - - polyhedronVisAttributesMap.clear(); - polyhedronDataMap.clear(); - polyhedronPolyMap.clear(); - polyhedronPolyDataMap.clear(); - polyhedronPolyDataCountMap.clear(); - - instancePositionMap.clear(); - instanceRotationMap.clear(); - instanceColoursMap.clear(); - instancePolyDataMap.clear(); - instanceTensorGlyphMap.clear(); - instanceActorMap.clear(); -} +G4VtkVisContext G4VtkSceneHandler::MakeDefaultVisContext() +{ + auto vc = G4VtkVisContext(dynamic_cast(fpViewer), fpVisAttribs, fProcessing2D, + fObjectTransformation); + + if (fpVisAttribs != nullptr) { + G4Colour c = fpVisAttribs->GetColour(); + vc.red = c.GetRed(); + vc.green = c.GetGreen(); + vc.blue = c.GetBlue(); + vc.alpha = c.GetAlpha(); + vc.fDrawingStyle = fpViewer->GetViewParameters().GetDrawingStyle(); + } -void G4VtkSceneHandler::AddSolid (const G4Box& box) { + return vc; +} +void G4VtkSceneHandler::AddSolid(const G4Box& box) +{ G4VSceneHandler::AddSolid(box); -#if 0 return; const G4VModel* pv_model = GetModel(); - if (!pv_model) { return ; } - - G4PhysicalVolumeModel* pPVModel = dynamic_cast(fpModel); - if (!pPVModel) { return ; } - - //-- debug information - if(1) { - G4VPhysicalVolume *pv = pPVModel->GetCurrentPV(); - G4LogicalVolume *lv = pv->GetLogicalVolume(); - G4cout << "name=" << box.GetName() << " volumeType=" << pv->VolumeType() << " pvName=" << pv->GetName() << " lvName=" << lv->GetName() << " multiplicity=" << pv->GetMultiplicity() << " isparametrised=" << pv->IsParameterised() << " isreplicated=" << pv->IsReplicated() << " parametrisation=" << pv->GetParameterisation() << G4endl; + if (pv_model == nullptr) { + return; } - if(0) { - G4Material *mat = pPVModel->GetCurrentMaterial(); - G4String name = mat->GetName(); - G4double dens = mat->GetDensity()/(g/cm3); - G4int copyNo = pPVModel->GetCurrentPV()->GetCopyNo(); - G4int depth = pPVModel->GetCurrentDepth(); - G4cout << " name : " << box.GetName() << G4endl; - G4cout << " copy no.: " << copyNo << G4endl; - G4cout << " depth : " << depth << G4endl; - G4cout << " density : " << dens << " [g/cm3]" << G4endl; - G4cout << " location: " << pPVModel->GetCurrentPV()->GetObjectTranslation() << G4endl; - G4cout << " Multiplicity : " << pPVModel->GetCurrentPV()->GetMultiplicity() << G4endl; - G4cout << " Is replicated? : " << pPVModel->GetCurrentPV()->IsReplicated() << G4endl; - G4cout << " Is parameterised? : " << pPVModel->GetCurrentPV()->IsParameterised() << G4endl; - G4cout << " top phys. vol. name : " << pPVModel->GetTopPhysicalVolume()->GetName() << G4endl; + auto pPVModel = dynamic_cast(fpModel); + if (pPVModel == nullptr) { + return; } + + //-- debug information +#ifdef G4VTKDEBUG + G4VPhysicalVolume* pv = pPVModel->GetCurrentPV(); + G4LogicalVolume* lv = pv->GetLogicalVolume(); + G4cout << "name=" << box.GetName() << " volumeType=" << pv->VolumeType() + << " pvName=" << pv->GetName() << " lvName=" << lv->GetName() + << " multiplicity=" << pv->GetMultiplicity() << " isparametrised=" << pv->IsParameterised() + << " isreplicated=" << pv->IsReplicated() + << " parametrisation=" << pv->GetParameterisation() + << G4endl + + G4Material* mat = pPVModel->GetCurrentMaterial(); + G4String name = mat->GetName(); + G4double dens = mat->GetDensity() / (g / cm3); + G4int copyNo = pPVModel->GetCurrentPV()->GetCopyNo(); + G4int depth = pPVModel->GetCurrentDepth(); + G4cout << " name : " << box.GetName() << G4endl; + G4cout << " copy no.: " << copyNo << G4endl; + G4cout << " depth : " << depth << G4endl; + G4cout << " density : " << dens << " [g/cm3]" << G4endl; + G4cout << " location: " << pPVModel->GetCurrentPV()->GetObjectTranslation() << G4endl; + G4cout << " Multiplicity : " << pPVModel->GetCurrentPV()->GetMultiplicity() << G4endl; + G4cout << " Is replicated? : " << pPVModel->GetCurrentPV()->IsReplicated() << G4endl; + G4cout << " Is parameterised? : " << pPVModel->GetCurrentPV()->IsParameterised() << G4endl; + G4cout << " top phys. vol. name : " << pPVModel->GetTopPhysicalVolume()->GetName() << G4endl; #endif } void G4VtkSceneHandler::AddCompound(const G4Mesh& mesh) { #ifdef G4VTKDEBUG - G4cout << "G4VtkSceneHandler::AddCompound" << G4endl; -#endif + G4cout << "G4VtkSceneHandler::AddCompound> mesh type " << mesh.GetMeshType() << " " + << fpViewer->GetViewParameters().GetSpecialMeshRenderingOption() << G4endl; +#endif - if(mesh.GetMeshType() != G4Mesh::rectangle || mesh.GetMeshDepth() != 3) + if(fpViewer->GetViewParameters().GetSpecialMeshRenderingOption() == G4ViewParameters::meshAsDefault) { - G4VSceneHandler::AddCompound(mesh); - } + auto vc = MakeDefaultVisContext(); - auto container = mesh.GetContainerVolume(); - auto rep1 = container->GetLogicalVolume()->GetDaughter(0); - auto rep2 = rep1->GetLogicalVolume()->GetDaughter(0); - auto rep3 = rep2->GetLogicalVolume()->GetDaughter(0); - - EAxis rep1_axis, rep2_axis, rep3_axis; - G4int rep1_nReplicas, rep2_nReplicas, rep3_nReplicas; - G4double rep1_width, rep2_width, rep3_width; - G4double rep1_offset, rep2_offset, rep3_offset; - G4bool rep1_consuming, rep2_consuming, rep3_consuming; - - rep1->GetReplicationData(rep1_axis,rep1_nReplicas, rep1_width, rep1_offset, rep1_consuming); - rep2->GetReplicationData(rep2_axis,rep2_nReplicas, rep2_width, rep2_offset, rep2_consuming); - rep3->GetReplicationData(rep3_axis,rep3_nReplicas, rep3_width, rep3_offset, rep3_consuming); - - // Instantiate a temporary G4PhysicalVolumeModel - G4ModelingParameters tmpMP; - tmpMP.SetCulling(false); // This avoids drawing transparent... - tmpMP.SetCullingInvisible(false); // ... or invisble volumes. - const G4bool useFullExtent = false; // To avoid calculating the extent - - G4PhysicalVolumeModel tmpPVModel(container, G4PhysicalVolumeModel::UNLIMITED, - G4Transform3D(), &tmpMP, useFullExtent); - - // Instantiate a pseudo scene so that we can make a "private" descent and fill vtkImageData - vtkSmartPointer imagedata = vtkSmartPointer::New(); - imagedata->SetDimensions(rep1_nReplicas+1,rep2_nReplicas+1,rep3_nReplicas+1); - imagedata->SetSpacing(rep1_width,rep2_width,rep2_width); - imagedata->SetOrigin(0,0,0); - imagedata->AllocateScalars(VTK_DOUBLE, 1); - - G4double halfX = 0., halfY = 0., halfZ = 0.; - struct PseudoScene : public G4PseudoScene - { - PseudoScene( - G4PhysicalVolumeModel* pvModel, // input...the following are output - vtkImageData *vtkId, - G4int nx, G4int ny, G4int nz, - G4double& halfX, G4double& halfY, G4double& halfZ) : fpPVModel(pvModel) - , fVtkId(vtkId) - , fNx(nx) - , fNy(ny) - , fNz(nz) - , fHalfX(halfX) - , fHalfY(halfY) - , fHalfZ(halfZ) - {} - using G4PseudoScene::AddSolid; // except for... - void AddSolid(const G4Box& box) - { - const G4Colour& colour = fpPVModel->GetCurrentLV()->GetVisAttributes()->GetColour(); - // G4double density = fpPVModel->GetCurrentLV()->GetMaterial()->GetDensity(); - const G4ThreeVector& position = fpCurrentObjectTransformation->getTranslation(); - fHalfX = box.GetXHalfLength(); - fHalfY = box.GetYHalfLength(); - fHalfZ = box.GetZHalfLength(); - fVtkId->SetScalarComponentFromDouble(int(position.x()/(2*fHalfX))+fNx, - int(position.y()/(2*fHalfY))+fNy, - int(position.z()/(2*fHalfZ))+fNz, - 0, - (colour.GetRed() + colour.GetBlue() + colour.GetGreen())/3.0); - } - G4PhysicalVolumeModel* fpPVModel; - vtkImageData *fVtkId; - G4int fNx, fNy, fNz; - G4double &fHalfX, &fHalfY, &fHalfZ; + if (fReadyForTransients) + transientStore.AddCompound(mesh, vc); + else + store.AddCompound(mesh, vc); } - // construct the pseudoScene - pseudoScene(&tmpPVModel, imagedata, rep1_nReplicas, rep2_nReplicas, rep3_nReplicas, halfX, halfY, halfZ); - - // Make private descent into the nested parameterisation - tmpPVModel.DescribeYourselfTo(pseudoScene); - - vtkSmartPointer volumeMapper = vtkSmartPointer::New(); - volumeMapper->SetInputData(imagedata); - - vtkNew volume; - volume->SetMapper(volumeMapper); - - vtkSmartPointer vtkMatrix = vtkSmartPointer::New(); - - vtkMatrix->SetElement(0,0,fObjectTransformation.xx()); - vtkMatrix->SetElement(0,1,fObjectTransformation.xy()); - vtkMatrix->SetElement(0,2,fObjectTransformation.xz()); - - vtkMatrix->SetElement(1,0,fObjectTransformation.yx()); - vtkMatrix->SetElement(1,1,fObjectTransformation.yy()); - vtkMatrix->SetElement(1,2,fObjectTransformation.yz()); - - vtkMatrix->SetElement(2,0,fObjectTransformation.zx()); - vtkMatrix->SetElement(2,1,fObjectTransformation.zy()); - vtkMatrix->SetElement(2,2,fObjectTransformation.zz()); - - vtkMatrix->SetElement(3,0, fObjectTransformation.dx()); - vtkMatrix->SetElement(3,1, fObjectTransformation.dy()); - vtkMatrix->SetElement(3,2, fObjectTransformation.dz()); - vtkMatrix->SetElement(3,3, 1); + else { + StandardSpecialMeshRendering(mesh); + } +} - volume->SetUserMatrix(vtkMatrix); +void G4VtkSceneHandler::Print() {} - auto *pVtkViewer = dynamic_cast(fpViewer); - pVtkViewer->renderer->AddVolume(volume); +void G4VtkSceneHandler::SetPolyhedronPipeline(const G4String& type) +{ + polyhedronPipelineType = type; } diff --git a/source/visualization/Vtk/src/G4VtkStore.cc b/source/visualization/Vtk/src/G4VtkStore.cc new file mode 100644 index 00000000000..85bb3cdd882 --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkStore.cc @@ -0,0 +1,769 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Created by Stewart Boogert on 13/11/2021. +// + +#include "G4VtkStore.hh" + +#include "G4Circle.hh" +#include "G4Mesh.hh" +#include "G4Plane3D.hh" +#include "G4Polyhedron.hh" +#include "G4Polyline.hh" +#include "G4Square.hh" +#include "G4Text.hh" +#include "G4VSceneHandler.hh" +#include "G4VisAttributes.hh" +#include "G4VtkUtility.hh" +#include "G4VtkViewer.hh" +#include "G4VtkVisContext.hh" +// #include "G4VtkClipperClosedPipeline.hh" +#include "G4VtkClipClosedSurfacePipeline.hh" +#include "G4VtkClipOpenPipeline.hh" +#include "G4VtkCutterPipeline.hh" +#include "G4VtkImagePipeline.hh" +#include "G4VtkPolydataInstanceAppendPipeline.hh" +#include "G4VtkPolydataInstanceBakePipeline.hh" +#include "G4VtkPolydataInstanceTensorPipeline.hh" +#include "G4VtkPolydataPipeline.hh" +#include "G4VtkPolydataPolygonPipeline.hh" +#include "G4VtkPolydataPolyline2DPipeline.hh" +#include "G4VtkPolydataPolylinePipeline.hh" +#include "G4VtkPolydataSpherePipeline.hh" +#include "G4VtkText2DPipeline.hh" +#include "G4VtkTextPipeline.hh" +#include "G4VtkUnstructuredGridPipeline.hh" + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wextra-semi" +#include "vtkBillboardTextActor3D.h" +#include "vtkLine.h" +#include "vtkMatrix3x3.h" +#include "vtkOBJReader.h" +#include "vtkPLYReader.h" +#include "vtkPolyDataReader.h" +#include "vtkProperty.h" +#include "vtkProperty2D.h" +#include "vtkRegularPolygonSource.h" +#include "vtkSTLReader.h" +#include "vtkSmartPointer.h" +#include "vtkTextProperty.h" +#pragma GCC diagnostic pop + +G4VtkStore::G4VtkStore(G4String nameIn) : name(nameIn) {} + +G4VtkStore::~G4VtkStore() +{ + Clear(); +} + +void G4VtkStore::Modified() +{ +#ifdef G4VTKDEBUG + G4cout << "G4VtkStore::Modified() " << name << G4endl; +#endif + + for (const auto& it : polylinePipeMap) + it.second->Modified(); + + for (const auto& it : polyline2DPipeMap) + it.second->Modified(); + + for (const auto& it : circlePipeMap) + it.second->Modified(); + + for (const auto& it : squarePipeMap) + it.second->Modified(); + + for (const auto& it : textPipeMap) + it.second->Modified(); + + for (const auto& it : text2DPipeMap) + it.second->Modified(); + + for (const auto& it : separatePipeMap) + it.second->Modified(); + + for (const auto& it : tensorGlyphPipeMap) + it.second->Modified(); + + for (const auto& it : appendPipeMap) + it.second->Modified(); + + for (const auto& it : bakePipeMap) + it.second->Modified(); +} + +void G4VtkStore::Clear() +{ +#ifdef G4VTKDEBUG + G4cout << "G4VtkStore::Clear() " << name << G4endl; +#endif + + for (const auto& v : polylinePipeMap) { + v.second->Clear(); + } + polylinePipeMap.clear(); + + for (const auto& v : polyline2DPipeMap) { + v.second->Clear(); + } + polyline2DPipeMap.clear(); + + for (const auto& v : circlePipeMap) { + v.second->Clear(); + } + circlePipeMap.clear(); + + for (const auto& v : squarePipeMap) { + v.second->Clear(); + } + squarePipeMap.clear(); + + for (const auto& v : textPipeMap) { + v.second->Clear(); + } + textPipeMap.clear(); + + for (const auto& v : text2DPipeMap) { + v.second->Clear(); + } + text2DPipeMap.clear(); + + for (const auto& v : separatePipeMap) { + v.second->Clear(); + } + separatePipeMap.clear(); + + for (const auto& v : tensorGlyphPipeMap) { + v.second->Clear(); + } + tensorGlyphPipeMap.clear(); + + for (const auto& v : appendPipeMap) { + v.second->Clear(); + } + appendPipeMap.clear(); + + for (const auto& v : bakePipeMap) { + v.second->Clear(); + } + bakePipeMap.clear(); +} + +void G4VtkStore::ClearNonG4() +{ +#ifdef G4VTKDEBUG + G4cout << "G4VtkStore::Clear() " << name << G4endl; +#endif + + for (const auto& v : imagePipeMap) { + v.second->Clear(); + } + imagePipeMap.clear(); + + for (const auto& v : sideloadPipeMap) { + v.second->Clear(); + } + sideloadPipeMap.clear(); +} + +void G4VtkStore::Print() +{ + G4cout << "G4VtkStore::Print() " << name << std::endl; + G4cout << "G4VtkStore::Print() polylinePipeMap size > " << polylinePipeMap.size() + << G4endl; + G4cout << "G4VtkStore::Print() polyline2DPipeMap size > " << polyline2DPipeMap.size() + << G4endl; + G4cout << "G4VtkStore::Print() circlePipeMap size > " << circlePipeMap.size() << G4endl; + G4cout << "G4VtkStore::Print() squarePipeMap size > " << squarePipeMap.size() << G4endl; + G4cout << "G4VtkStore::Print() textPipeMap size > " << textPipeMap.size() << G4endl; + G4cout << "G4VtkStore::Print() text2DPipeMap size > " << text2DPipeMap.size() << G4endl; + G4cout << "G4VtkStore::Print() separatePipeMap size > " << separatePipeMap.size() + << G4endl; + G4cout << "G4VtkStore::Print() tensorGlyphPipeMap size > " << tensorGlyphPipeMap.size() + << G4endl; + G4cout << "G4VtkStore::Print() transformAppendPipeMap size > " << appendPipeMap.size() << G4endl; + G4cout << "G4VtkStore::Print() bakePipeMap size > " << bakePipeMap.size() << G4endl; + G4cout << "G4VtkStore::Print() ugridPipeMap size > " << ugridPipeMap.size() << G4endl; + G4cout << "G4VtkStore::Print() imagePipeMap size > " << imagePipeMap.size() << G4endl; + + for (const auto& it : polylinePipeMap) + it.second->Print(); + + for (const auto& it : polyline2DPipeMap) + it.second->Print(); + + for (const auto& it : circlePipeMap) + it.second->Print(); + + for (const auto& it : squarePipeMap) + it.second->Print(); + + for (const auto& it : separatePipeMap) + it.second->Print(); + + for (const auto& it : tensorGlyphPipeMap) + it.second->Print(); + + for (const auto& it : appendPipeMap) + it.second->Print(); + + for (const auto& it : bakePipeMap) + it.second->Print(); + + for (const auto& it : ugridPipeMap) { + G4cout << it.first << G4endl; + it.second->Print(); + } + + for (const auto& it : imagePipeMap) + it.second->Print(); +} + +void G4VtkStore::AddPrimitive(const G4Polyline& polyline, const G4VtkVisContext& vc) +{ + G4VSceneHandler::MarkerSizeType sizeType; + if (vc.fProcessing2D) { + sizeType = G4VSceneHandler::MarkerSizeType::screen; + } + else { + sizeType = G4VSceneHandler::MarkerSizeType::world; + } + + // Get vis attributes - pick up defaults if none. + const G4VisAttributes* pVA = vc.fViewer->GetApplicableVisAttributes(polyline.GetVisAttributes()); + + if (sizeType == G4VSceneHandler::MarkerSizeType::world) { + std::size_t hash = G4VtkPolydataPolylinePipeline::MakeHash(pVA); + std::shared_ptr pl; + + if (polylinePipeMap.find(hash) == polylinePipeMap.end()) { + // Create new pipeline + pl = std::make_shared(G4String("name"), vc, pVA); + + // Add to map + polylinePipeMap.insert(std::make_pair(hash, pl)); + } + else { + pl = polylinePipeMap[hash]; + } + pl->SetPolydata(polyline); + } + + else if (sizeType == G4VSceneHandler::MarkerSizeType::screen) { + std::size_t hash = G4VtkPolydataPolyline2DPipeline::MakeHash(pVA); + std::shared_ptr pl; + + if (polyline2DPipeMap.find(hash) == polyline2DPipeMap.end()) { + // Create new pipeline + pl = std::make_shared(G4String("name"), vc, pVA); + + // Add to map + polyline2DPipeMap.insert(std::make_pair(hash, pl)); + } + else { + pl = polyline2DPipeMap[hash]; + } + pl->SetPolydata(polyline); + } +} + +void G4VtkStore::AddPrimitive(const G4Text& text, const G4VtkVisContext& vc) +{ + G4VSceneHandler::MarkerSizeType sizeType; + if (vc.fProcessing2D) { + sizeType = G4VSceneHandler::MarkerSizeType::screen; + } + else { + sizeType = G4VSceneHandler::MarkerSizeType::world; + } + + auto pVA = vc.fViewer->GetApplicableVisAttributes(text.GetVisAttributes()); + + switch (sizeType) { + default: + case (G4VSceneHandler::MarkerSizeType::screen): { + std::size_t hash = G4VtkTextPipeline::MakeHash(text, vc, pVA); + auto pl = std::make_shared(text, vc, pVA); + text2DPipeMap.insert(std::make_pair(hash, pl)); + break; + } + case G4VSceneHandler::MarkerSizeType::world: { + std::size_t hash = G4VtkTextPipeline::MakeHash(text, vc, pVA); + auto pl = std::make_shared(text, vc, pVA); + textPipeMap.insert(std::make_pair(hash, pl)); + break; + } + } +} + +void G4VtkStore::AddPrimitive(const G4Circle& circle, const G4VtkVisContext& vc) +{ + G4VSceneHandler::MarkerSizeType sizeType; + + if (vc.fProcessing2D) { + sizeType = G4VSceneHandler::MarkerSizeType::screen; + } + else { + sizeType = G4VSceneHandler::MarkerSizeType::world; + } + + // Get vis attributes - pick up defaults if none. + const G4VisAttributes* pVA = vc.fViewer->GetApplicableVisAttributes(circle.GetVisAttributes()); + + if (sizeType == G4VSceneHandler::MarkerSizeType::world) { + std::size_t hash = G4VtkPolydataSpherePipeline::MakeHash(pVA); + std::shared_ptr pl; + + if (circlePipeMap.find(hash) == circlePipeMap.end()) { + // Create new pipeline + pl = std::make_shared(G4String("name"), vc, pVA); + + // add to map + circlePipeMap.insert(std::make_pair(hash, pl)); + } + else { + pl = circlePipeMap[hash]; + } + + // Data data point + const CLHEP::HepRotation rot = vc.fTransform.getRotation(); + G4Point3D posPrime = rot * circle.GetPosition(); + pl->SetPolydataData(vc.fTransform.dx() + posPrime.x(), vc.fTransform.dy() + posPrime.y(), + vc.fTransform.dz() + posPrime.z()); + } +} + +void G4VtkStore::AddPrimitive(const G4Square& square, const G4VtkVisContext& vc) +{ + G4VSceneHandler::MarkerSizeType sizeType; + + if (vc.fProcessing2D) { + sizeType = G4VSceneHandler::MarkerSizeType::screen; + } + else { + sizeType = G4VSceneHandler::MarkerSizeType::world; + } + + // Get vis attributes - pick up defaults if none. + const G4VisAttributes* pVA = vc.fViewer->GetApplicableVisAttributes(square.GetVisAttributes()); + + if (sizeType == G4VSceneHandler::MarkerSizeType::world) { + std::size_t hash = std::hash{}(*pVA); + + std::shared_ptr pl; + if (squarePipeMap.find(hash) == squarePipeMap.end()) { + // Create new pipeline + pl = std::make_shared(G4String("name"), vc, pVA); + + // add to map + squarePipeMap.insert(std::make_pair(hash, pl)); + } + else { + pl = squarePipeMap[hash]; + } + + // Data data point + const CLHEP::HepRotation rot = vc.fTransform.getRotation(); + G4Point3D posPrime = rot * square.GetPosition(); + pl->SetPolydataData(vc.fTransform.dx() + posPrime.x(), vc.fTransform.dy() + posPrime.y(), + vc.fTransform.dz() + posPrime.z()); + } +} + +void G4VtkStore::AddPrimitiveSeparate(const G4Polyhedron& polyhedron, const G4VtkVisContext& vc) +{ + // Return if empty polyhedron + if (polyhedron.GetNoFacets() == 0) { + return; + } + + auto hash = G4VtkPolydataPipeline::MakeHash(polyhedron, vc); + + auto pl = std::make_shared(G4String("name"), vc); + pl->SetPolydata(polyhedron); + + separatePipeMap.insert(std::make_pair(hash, pl)); + + const G4VisAttributes* pVA = + vc.fViewer->GetApplicableVisAttributes(polyhedron.GetVisAttributes()); + G4Color colour = pVA->GetColour(); + G4Transform3D fInvObjTrans = vc.fTransform.inverse(); + + pl->SetActorTransform(vc.fTransform.dx(), vc.fTransform.dy(), vc.fTransform.dz(), + fInvObjTrans.xx(), fInvObjTrans.xy(), fInvObjTrans.xz(), fInvObjTrans.yx(), + fInvObjTrans.yy(), fInvObjTrans.yz(), fInvObjTrans.zx(), fInvObjTrans.zy(), + fInvObjTrans.zz()); + pl->SetActorColour(colour.GetRed(), colour.GetGreen(), colour.GetBlue(), colour.GetAlpha()); +} + +void G4VtkStore::AddPrimitiveTensorGlyph(const G4Polyhedron& polyhedron, const G4VtkVisContext& vc) +{ + // Return if empty polyhedron + if (polyhedron.GetNoFacets() == 0) { + return; + } + + auto hash = G4VtkPolydataInstanceTensorPipeline::MakeHash(polyhedron, vc); + std::shared_ptr pl; + + if (tensorGlyphPipeMap.find(hash) == tensorGlyphPipeMap.end()) { + pl = std::make_shared(G4String("name"), vc); + pl->SetPolydata(polyhedron); + tensorGlyphPipeMap.insert(std::make_pair(hash, pl)); + } + else { + pl = tensorGlyphPipeMap[hash]; + } + + G4Transform3D fInvObjTrans = vc.fTransform.inverse(); + const G4VisAttributes* pVA = + vc.fViewer->GetApplicableVisAttributes(polyhedron.GetVisAttributes()); + G4Color colour = pVA->GetColour(); + + pl->addInstance(vc.fTransform.dx(), vc.fTransform.dy(), vc.fTransform.dz(), fInvObjTrans.xx(), + fInvObjTrans.xy(), fInvObjTrans.xz(), fInvObjTrans.yx(), fInvObjTrans.yy(), + fInvObjTrans.yz(), fInvObjTrans.zx(), fInvObjTrans.zy(), fInvObjTrans.zz(), + colour.GetRed(), colour.GetGreen(), colour.GetBlue(), colour.GetAlpha(), + G4String("null")); +} + +void G4VtkStore::AddPrimitiveAppend(const G4Polyhedron& polyhedron, const G4VtkVisContext& vc) +{ + // Empty polyhedron + if (polyhedron.GetNoFacets() == 0) { + return; + } + + auto hash = G4VtkPolydataInstanceAppendPipeline::MakeHash(polyhedron, vc); + std::shared_ptr pl; + + if (appendPipeMap.find(hash) == appendPipeMap.end()) { + pl = std::make_shared(G4String("name"), vc); + pl->SetPolydata(polyhedron); + + appendPipeMap.insert(std::make_pair(hash, pl)); + } + else { + pl = appendPipeMap[hash]; + } + + G4Transform3D fInvObjTrans = vc.fTransform.inverse(); + + pl->addInstance(vc.fTransform.dx(), vc.fTransform.dy(), vc.fTransform.dz(), fInvObjTrans.xx(), + fInvObjTrans.xy(), fInvObjTrans.xz(), fInvObjTrans.yx(), fInvObjTrans.yy(), + fInvObjTrans.yz(), fInvObjTrans.zx(), fInvObjTrans.zy(), fInvObjTrans.zz(), 0, 0, + 0, 0, G4String("null")); +}; + +void G4VtkStore::AddPrimitiveTransformBake(const G4Polyhedron& polyhedron, + const G4VtkVisContext& vc) +{ + // Empty polyhedron + if (polyhedron.GetNoFacets() == 0) { + return; + } + + // Get vis attributes - pick up defaults if none. + const G4VisAttributes* pVA = + vc.fViewer->GetApplicableVisAttributes(polyhedron.GetVisAttributes()); + + // Polyhedron colour + G4Colour colour = pVA->GetColour(); + + // Hash the vis (alpha) attributes and polyhedron + std::size_t hash = G4VtkPolydataInstanceBakePipeline::MakeHash(polyhedron, vc); + + std::shared_ptr pl; + if (bakePipeMap.find(hash) == bakePipeMap.end()) { + pl = std::make_shared(G4String("none"), vc); + + bakePipeMap.insert(std::make_pair(hash, pl)); + } + else { + pl = bakePipeMap[hash]; + } + + G4Transform3D fInvObjTrans = vc.fTransform.inverse(); + pl->SetPolydata(polyhedron); + + pl->addInstance(vc.fTransform.dx(), vc.fTransform.dy(), vc.fTransform.dz(), fInvObjTrans.xx(), + fInvObjTrans.xy(), fInvObjTrans.xz(), fInvObjTrans.yx(), fInvObjTrans.yy(), + fInvObjTrans.yz(), fInvObjTrans.zx(), fInvObjTrans.zy(), fInvObjTrans.zz(), + colour.GetRed(), colour.GetGreen(), colour.GetBlue(), colour.GetAlpha(), + G4String("null")); +}; + +void G4VtkStore::AddCompound(const G4Mesh& mesh, const G4VtkVisContext& vc) { + const auto& container = mesh.GetContainerVolume(); + auto& containerName = const_cast(container->GetName()); + + auto pl = std::make_shared(containerName,vc); + pl->SetUnstructuredGridData(mesh); + ugridPipeMap.insert(std::make_pair(G4String("test"), pl)); +} + +void G4VtkStore::UpdatePlanePipelines(G4String nameIn, G4String type, const G4Plane3D plane) +{ + if (type == "clipper") { + UpdateClipper(nameIn, plane); + } + else if (type == "cutter") { + UpdateCutter(nameIn, plane); + } +} + +void G4VtkStore::AddClipper(G4String nameIn, const G4Plane3D& plane) +{ + for (const auto& v : separatePipeMap) { + auto clip_pl = new G4VtkClipClosedSurfacePipeline(nameIn, v.second->GetVtkVisContext(), + v.second->GetFinalFilter(), true); + clip_pl->SetPlane(plane); + v.second->AddChildPipeline(clip_pl); + } + + for (const auto& v : tensorGlyphPipeMap) { + auto clip_pl = new G4VtkClipClosedSurfacePipeline(nameIn, v.second->GetVtkVisContext(), + v.second->GetFinalFilter()); + clip_pl->SetPlane(plane); + v.second->AddChildPipeline(clip_pl); + } + + for (const auto& v : appendPipeMap) { + auto clip_pl = new G4VtkClipClosedSurfacePipeline(nameIn, v.second->GetVtkVisContext(), + v.second->GetFinalFilter(), true); + clip_pl->SetPlane(plane); + v.second->AddChildPipeline(clip_pl); + } + + for (const auto& v : bakePipeMap) { + auto clip_pl = new G4VtkClipClosedSurfacePipeline(nameIn, v.second->GetVtkVisContext(), + v.second->GetFinalFilter(), true); + clip_pl->SetPlane(plane); + v.second->AddChildPipeline(clip_pl); + } +} + +void G4VtkStore::UpdateClipper(G4String nameIn, const G4Plane3D& plane) +{ + for (const auto& v : separatePipeMap) { + auto children = v.second->GetChildPipelines(); + for (auto c : children) { + if (c->GetName() == nameIn) { + auto cc = dynamic_cast(c); + cc->SetPlane(plane); + } + } + } + + for (const auto& v : tensorGlyphPipeMap) { + auto children = v.second->GetChildPipelines(); + for (auto c : children) { + if (c->GetName() == nameIn) { + auto cc = dynamic_cast(c); + cc->SetPlane(plane); + } + } + } + + for (const auto& v : appendPipeMap) { + auto children = v.second->GetChildPipelines(); + for (auto c : children) { + if (c->GetName() == nameIn) { + auto cc = dynamic_cast(c); + cc->SetPlane(plane); + } + } + } + + for (const auto& v : bakePipeMap) { + auto children = v.second->GetChildPipelines(); + for (auto c : children) { + if (c->GetName() == nameIn) { + auto cc = dynamic_cast(c); + cc->SetPlane(plane); + } + } + } +} + +void G4VtkStore::RemoveClipper(G4String /*nameIn*/) {} + +void G4VtkStore::AddCutter(G4String nameIn, const G4Plane3D& plane) +{ + for (const auto& v : separatePipeMap) { + auto cut_pl = new G4VtkCutterPipeline(nameIn, v.second->GetVtkVisContext(), + v.second->GetFinalFilter(), true); + cut_pl->SetPlane(plane); + v.second->AddChildPipeline(cut_pl); + } + + for (const auto& v : tensorGlyphPipeMap) { + auto cut_pl = + new G4VtkCutterPipeline(nameIn, v.second->GetVtkVisContext(), v.second->GetFinalFilter()); + cut_pl->SetPlane(plane); + v.second->AddChildPipeline(cut_pl); + } + + for (const auto& v : appendPipeMap) { + auto cut_pl = + new G4VtkCutterPipeline(nameIn, v.second->GetVtkVisContext(), v.second->GetFinalFilter()); + cut_pl->SetPlane(plane); + v.second->AddChildPipeline(cut_pl); + } + + for (const auto& v : bakePipeMap) { + auto cut_pl = + new G4VtkCutterPipeline(nameIn, v.second->GetVtkVisContext(), v.second->GetFinalFilter()); + cut_pl->SetPlane(plane); + v.second->AddChildPipeline(cut_pl); + } +} + +void G4VtkStore::UpdateCutter(G4String nameIn, const G4Plane3D& plane) +{ + for (const auto& v : separatePipeMap) { + auto children = v.second->GetChildPipelines(); + for (auto c : children) { + if (c->GetName() == nameIn) { + auto cc = dynamic_cast(c); + cc->SetPlane(plane); + } + } + } + + for (const auto& v : tensorGlyphPipeMap) { + auto children = v.second->GetChildPipelines(); + for (auto c : children) { + if (c->GetName() == nameIn) { + auto cc = dynamic_cast(c); + cc->SetPlane(plane); + } + } + } + + for (const auto& v : appendPipeMap) { + auto children = v.second->GetChildPipelines(); + for (auto c : children) { + if (c->GetName() == nameIn) { + auto cc = dynamic_cast(c); + cc->SetPlane(plane); + } + } + } + + for (const auto& v : bakePipeMap) { + auto children = v.second->GetChildPipelines(); + for (auto c : children) { + if (c->GetName() == nameIn) { + auto cc = dynamic_cast(c); + cc->SetPlane(plane); + } + } + } +} + +void G4VtkStore::RemoveCutter(G4String /*nameIn*/) {} + +void G4VtkStore::AddNonG4ObjectImage(const G4String& fileName, const G4VtkVisContext& vc) +{ + auto pl = std::make_shared(G4String("name"), vc); + pl->SetImage(fileName); + imagePipeMap.insert(std::make_pair(fileName, pl)); +} + +void G4VtkStore::AddNonG4ObjectPolydata(const G4String fileName, const G4VtkVisContext& /*vc*/) +{ + if (fileName.find("obj") != G4String::npos) { + vtkSmartPointer objReader; + } + else if (fileName.find("ply") != G4String::npos) { + vtkSmartPointer plyReader; + } + else if (fileName.find("stl") != G4String::npos) { + vtkSmartPointer stlReader; + } + else if (fileName.find("vtp") != G4String::npos && fileName.find("vtu") != G4String::npos) { + vtkSmartPointer pldReader; + } +} + +void G4VtkStore::GetBounds(G4double maxBoundIn[6]) +{ + G4double maxBound[6] = {1e99, -1e99, 1e99, -1e99, 1e99, -1e99}; + + for (const auto& v : separatePipeMap) { + auto b = v.second->GetBounds(); + MaxBounds(maxBound, b); + } + + for (const auto& v : tensorGlyphPipeMap) { + auto b = v.second->GetBounds(); + MaxBounds(maxBound, b); + } + + for (const auto& v : appendPipeMap) { + auto b = v.second->GetBounds(); + MaxBounds(maxBound, b); + } + + for (const auto& v : bakePipeMap) { + auto b = v.second->GetBounds(); + MaxBounds(maxBound, b); + } + + maxBoundIn[0] = maxBound[0]; + maxBoundIn[1] = maxBound[1]; + maxBoundIn[2] = maxBound[2]; + maxBoundIn[3] = maxBound[3]; + maxBoundIn[4] = maxBound[4]; + maxBoundIn[5] = maxBound[5]; +} + +void G4VtkStore::AddToRenderer(vtkRenderer* renderer) +{ + for (const auto& it : polylinePipeMap) + renderer->AddActor(it.second->GetActor()); + for (const auto& it : polyline2DPipeMap) + renderer->AddActor(it.second->GetActor()); + for (const auto& it : circlePipeMap) + renderer->AddActor(it.second->GetActor()); + for (const auto& it : squarePipeMap) + renderer->AddActor(it.second->GetActor()); + for (const auto& it : textPipeMap) + renderer->AddActor(it.second->GetActor()); + for (const auto& it : text2DPipeMap) + renderer->AddActor(it.second->GetActor()); + for (const auto& it : separatePipeMap) + renderer->AddActor(it.second->GetActor()); + for (const auto& it : tensorGlyphPipeMap) + renderer->AddActor(it.second->GetActor()); + for (const auto& it : appendPipeMap) + renderer->AddActor(it.second->GetActor()); + for (const auto& it : bakePipeMap) + renderer->AddActor(it.second->GetActor()); +} diff --git a/source/visualization/Vtk/src/G4VtkText2DPipeline.cc b/source/visualization/Vtk/src/G4VtkText2DPipeline.cc new file mode 100644 index 00000000000..1937bd7534b --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkText2DPipeline.cc @@ -0,0 +1,117 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Created by Stewart Boogert on 05/03/2023. +// + +#include "G4VtkText2DPipeline.hh" + +#include "G4Text.hh" +#include "G4VisAttributes.hh" +#include "G4VtkViewer.hh" + +#include "vtkTextActor.h" +#include "vtkTextProperty.h" + +std::size_t G4VtkText2DPipeline::MakeHash(const G4Text& text, const G4VtkVisContext& /*vc*/, + const G4VisAttributes* pVA) +{ + std::size_t hash = std::hash{}(*pVA); + + G4double x = text.GetPosition().x(); + G4double y = text.GetPosition().y(); + + std::hash_combine(hash, std::hash{}(text.GetText())); + std::hash_combine(hash, std::hash{}(x)); + std::hash_combine(hash, std::hash{}(y)); + + return hash; +} + +G4VtkText2DPipeline::G4VtkText2DPipeline(const G4Text& text, const G4VtkVisContext& vc, + const G4VisAttributes* pVA) + : G4VVtkPipeline(text.GetText().c_str(), "G4VtkText2DPipeline", vc, false, vc.fViewer->renderer) +{ + G4double x = text.GetPosition().x(); + G4double y = text.GetPosition().y(); + + G4Color colour = pVA->GetColour(); + G4double opacity = colour.GetAlpha(); + + actor = vtkSmartPointer::New(); + actor->SetInput(text.GetText().c_str()); + actor->GetPositionCoordinate()->SetCoordinateSystemToNormalizedViewport(); + // actor->SetTextScaleModeToViewport(); + actor->SetPosition((x + 1.) / 2.0, (y + 1.) / 2.); + actor->GetTextProperty()->SetFontSize(text.GetScreenSize()); + actor->GetTextProperty()->SetColor(colour.GetRed(), colour.GetGreen(), colour.GetBlue()); + actor->GetTextProperty()->SetOpacity(opacity); + + switch (text.GetLayout()) { + case G4Text::Layout::left: + actor->GetTextProperty()->SetJustificationToLeft(); + break; + case G4Text::Layout::centre: + actor->GetTextProperty()->SetJustificationToCentered(); + break; + case G4Text::Layout::right: + actor->GetTextProperty()->SetJustificationToRight(); + break; + } + + vc.fViewer->renderer->AddActor(actor); +} + +void G4VtkText2DPipeline::Enable() +{ + actor->SetVisibility(1); +} + +void G4VtkText2DPipeline::Disable() +{ + actor->SetVisibility(0); +} + +void G4VtkText2DPipeline::Print() +{ + G4VVtkPipeline::Print(); +} + +void G4VtkText2DPipeline::Modified() +{ + G4VVtkPipeline::Modified(); +} + +void G4VtkText2DPipeline::Clear() +{ + renderer->RemoveViewProp(actor); + + G4VVtkPipeline::Clear(); +} + +void G4VtkText2DPipeline::SetText(const G4String& text) +{ + actor->SetInput(text.c_str()); +} diff --git a/source/visualization/Vtk/src/G4VtkTextPipeline.cc b/source/visualization/Vtk/src/G4VtkTextPipeline.cc new file mode 100644 index 00000000000..939188ef6de --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkTextPipeline.cc @@ -0,0 +1,105 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Created by Stewart Boogert on 05/03/2023. +// + +#include "G4VtkTextPipeline.hh" + +#include "G4Text.hh" +#include "G4VisAttributes.hh" +#include "G4VtkViewer.hh" + +#include "vtkBillboardTextActor3D.h" +#include "vtkTextProperty.h" + +std::size_t G4VtkTextPipeline::MakeHash(const G4Text& text, const G4VtkVisContext& /*vc*/, + const G4VisAttributes* pVA) +{ + std::size_t hash = std::hash{}(*pVA); + + G4double x = text.GetPosition().x(); + G4double y = text.GetPosition().y(); + G4double z = text.GetPosition().z(); + + std::hash_combine(hash, std::hash{}(text.GetText())); + std::hash_combine(hash, std::hash{}(x)); + std::hash_combine(hash, std::hash{}(y)); + std::hash_combine(hash, std::hash{}(z)); + + return hash; +} + +G4VtkTextPipeline::G4VtkTextPipeline(const G4Text& text, const G4VtkVisContext& vc, + const G4VisAttributes* pVA) + : G4VVtkPipeline(text.GetText().c_str(), "G4VtkTextPipeline", vc, false, vc.fViewer->renderer) +{ + G4double x = text.GetPosition().x(); + G4double y = text.GetPosition().y(); + G4double z = text.GetPosition().z(); + + G4Color colour = pVA->GetColour(); + G4double opacity = colour.GetAlpha(); + + actor = vtkSmartPointer::New(); + actor->SetInput(text.GetText().c_str()); + actor->SetPosition(x, y, z); + actor->GetTextProperty()->SetFontSize(text.GetScreenSize()); + actor->GetTextProperty()->SetColor(colour.GetRed(), colour.GetGreen(), colour.GetBlue()); + actor->GetTextProperty()->SetOpacity(opacity); + + vc.fViewer->renderer->AddActor(actor); +} + +void G4VtkTextPipeline::Enable() +{ + actor->SetVisibility(1); +} + +void G4VtkTextPipeline::Disable() +{ + actor->SetVisibility(0); +} + +void G4VtkTextPipeline::Print() +{ + G4VVtkPipeline::Print(); +} + +void G4VtkTextPipeline::Modified() +{ + G4VVtkPipeline::Modified(); +} + +void G4VtkTextPipeline::Clear() +{ + renderer->RemoveActor(actor); + G4VVtkPipeline::Clear(); +} + +void G4VtkTextPipeline::SetText(const G4String& text) +{ + actor->SetInput(text.c_str()); +} diff --git a/source/visualization/Vtk/src/G4VtkUnstructuredGridPipeline.cc b/source/visualization/Vtk/src/G4VtkUnstructuredGridPipeline.cc new file mode 100644 index 00000000000..f3c809ccbde --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkUnstructuredGridPipeline.cc @@ -0,0 +1,200 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** + +#include "vtkPoints.h" +#include "vtkCellArray.h" +#include "vtkUnstructuredGrid.h" +#include "vtkDataSetMapper.h" +#include "vtkActor.h" +#include "vtkNew.h" +#include "vtkTetra.h" +#include "vtkVoxel.h" +#include "vtkStaticCleanUnstructuredGrid.h" + +#include "G4VtkUnstructuredGridPipeline.hh" +#include "G4VtkVisContext.hh" +#include "G4VtkViewer.hh" + +#include "G4Mesh.hh" +#include "G4LogicalVolume.hh" +#include "G4VNestedParameterisation.hh" +#include "G4ModelingParameters.hh" +#include "G4PhysicalVolumeModel.hh" +#include "G4PseudoScene.hh" +#include "G4Transform3D.hh" +#include "G4VSolid.hh" +#include "G4Tet.hh" +#include "G4Material.hh" + +G4VtkUnstructuredGridPipeline::G4VtkUnstructuredGridPipeline(G4String nameIn, const G4VtkVisContext& vc) : + G4VVtkPipeline(nameIn, "G4VtkUnstructuredPipeline", vc, false, vc.fViewer->renderer) { + + points = vtkSmartPointer::New(); + pointValues = vtkSmartPointer::New(); + cellValues = vtkSmartPointer::New(); + + cellValues->SetNumberOfComponents(4); + cellValues->SetName("Colors"); + + unstructuredGrid = vtkSmartPointer::New(); + unstructuredGrid->SetPoints(points); + unstructuredGrid->GetCellData()->SetScalars(cellValues); + + mapper = vtkSmartPointer::New(); + mapper->SetScalarModeToUseCellData(); + mapper->SetColorModeToDirectScalars(); + mapper->SetInputData(unstructuredGrid); + + // create actor + actor = vtkSmartPointer::New(); + actor->SetMapper(mapper); + actor->SetVisibility(1); + + // add to renderer + vc.fViewer->renderer->AddActor(actor); +} + +void G4VtkUnstructuredGridPipeline::PseudoSceneForTetCells::AddSolid(const G4VSolid& solid) { + if (fpPVModel->GetCurrentDepth() == fDepth) { // Leaf-level cells only + // Need to know it's a tet !!!! or implement G4VSceneHandler::AddSolid (const G4Tet&) !!!! + try { + const G4Tet& tet = dynamic_cast(solid); + const auto* pVisAtts = fpPVModel->GetCurrentLV()->GetVisAttributes(); + const auto& colour = pVisAtts->GetColour(); + + G4ThreeVector p0, p1, p2, p3; + tet.GetVertices(p0, p1,p2, p3); + + fpPoints->InsertNextPoint(p0.x(),p0.y(),p0.z()); + fpPoints->InsertNextPoint(p1.x(),p1.y(),p1.z()); + fpPoints->InsertNextPoint(p2.x(),p2.y(),p2.z()); + fpPoints->InsertNextPoint(p3.x(),p3.y(),p3.z()); + + vtkNew tetra; + tetra->GetPointIds()->SetId(0, 4*iCell); + tetra->GetPointIds()->SetId(1, 4*iCell+1); + tetra->GetPointIds()->SetId(2, 4*iCell+2); + tetra->GetPointIds()->SetId(3, 4*iCell+3); + + fpGrid->InsertNextCell(tetra->GetCellType(), tetra->GetPointIds()); + + double cols[] = {colour.GetRed(), + colour.GetGreen(), + colour.GetBlue(), + colour.GetAlpha()}; + fpCellValues->InsertNextTuple(cols); + + iCell++; + + } + catch (const std::bad_cast&) { + G4ExceptionDescription ed; + ed << "Called for a mesh that is not a tetrahedron mesh: " << solid.GetName(); + G4Exception("PseudoSceneForTetVertices","visman0108",JustWarning,ed); + } + } +} + +void G4VtkUnstructuredGridPipeline::PseudoSceneForCubicalCells::AddSolid(const G4Box& box) { + if (fpPVModel->GetCurrentDepth() == fDepth) { // Leaf-level cells only + try { + const auto* pVisAtts = fpPVModel->GetCurrentLV()->GetVisAttributes(); + const auto& colour = pVisAtts->GetColour(); + const G4ThreeVector& position = fpCurrentObjectTransformation->getTranslation(); + + fpPoints->InsertNextPoint(position.x()-box.GetXHalfLength(),position.y()-box.GetYHalfLength(),position.z()-box.GetZHalfLength()); + fpPoints->InsertNextPoint(position.x()-box.GetXHalfLength(),position.y()+box.GetYHalfLength(),position.z()-box.GetZHalfLength()); + fpPoints->InsertNextPoint(position.x()+box.GetXHalfLength(),position.y()+box.GetYHalfLength(),position.z()-box.GetZHalfLength()); + fpPoints->InsertNextPoint(position.x()+box.GetXHalfLength(),position.y()-box.GetYHalfLength(),position.z()-box.GetZHalfLength()); + + fpPoints->InsertNextPoint(position.x()-box.GetXHalfLength(),position.y()-box.GetYHalfLength(),position.z()+box.GetZHalfLength()); + fpPoints->InsertNextPoint(position.x()-box.GetXHalfLength(),position.y()+box.GetYHalfLength(),position.z()+box.GetZHalfLength()); + fpPoints->InsertNextPoint(position.x()+box.GetXHalfLength(),position.y()+box.GetYHalfLength(),position.z()+box.GetZHalfLength()); + fpPoints->InsertNextPoint(position.x()+box.GetXHalfLength(),position.y()-box.GetYHalfLength(),position.z()+box.GetZHalfLength()); + + vtkNew voxel; + voxel->GetPointIds()->SetId(0, 8*iCell); + voxel->GetPointIds()->SetId(1, 8*iCell+1); + voxel->GetPointIds()->SetId(2, 8*iCell+2); + voxel->GetPointIds()->SetId(3, 8*iCell+3); + voxel->GetPointIds()->SetId(4, 8*iCell+4); + voxel->GetPointIds()->SetId(5, 8*iCell+5); + voxel->GetPointIds()->SetId(6, 8*iCell+6); + voxel->GetPointIds()->SetId(7, 8*iCell+7); + + fpGrid->InsertNextCell(voxel->GetCellType(), voxel->GetPointIds()); + + double cols[] = {colour.GetRed(), + colour.GetGreen(), + colour.GetBlue(), + colour.GetAlpha()}; + fpCellValues->InsertNextTuple(cols); + + iCell++; + + } + catch (const std::bad_cast&) { + G4ExceptionDescription ed; + ed << "Called for a mesh that is not a cubical mesh: " << box.GetName(); + G4Exception("PseudoSceneForCubicalVertices", "visman0108", JustWarning, ed); + } + } +} + +void G4VtkUnstructuredGridPipeline::SetUnstructuredGridData(const G4Mesh &mesh) { + + // Modelling parameters + G4ModelingParameters tmpMP; + tmpMP.SetCulling(true); // This avoids drawing transparent... + tmpMP.SetCullingInvisible(true); // ... or invisble volumes. + + // Physical volume model + const auto& container = mesh.GetContainerVolume(); + const G4bool useFullExtent = true; // To avoid calculating the extent + G4PhysicalVolumeModel tmpPVModel(container, + G4PhysicalVolumeModel::UNLIMITED, + G4Transform3D(), // so that positions are in local coordinates + &tmpMP, + useFullExtent); + + // Graphics scene + if(mesh.GetMeshType() == G4Mesh::tetrahedron) { + PseudoSceneForTetCells pseudoScene(&tmpPVModel, mesh.GetMeshDepth(), points, cellValues, + unstructuredGrid); + tmpPVModel.DescribeYourselfTo(pseudoScene); + + } + else if(mesh.GetMeshType() == G4Mesh::nested3DRectangular) { + PseudoSceneForCubicalCells pseudoScene(&tmpPVModel, mesh.GetMeshDepth(), points, cellValues, + unstructuredGrid); + tmpPVModel.DescribeYourselfTo(pseudoScene); + } + else if(mesh.GetMeshType() == G4Mesh::rectangle) { + PseudoSceneForCubicalCells pseudoScene(&tmpPVModel, mesh.GetMeshDepth(), points, cellValues, + unstructuredGrid); + tmpPVModel.DescribeYourselfTo(pseudoScene); + } + +} \ No newline at end of file diff --git a/source/visualization/Vtk/src/G4VtkUtility.cc b/source/visualization/Vtk/src/G4VtkUtility.cc new file mode 100644 index 00000000000..11a0f706e04 --- /dev/null +++ b/source/visualization/Vtk/src/G4VtkUtility.cc @@ -0,0 +1,81 @@ +// +// ******************************************************************** +// * 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. * +// ******************************************************************** +// +// Created by Stewart Boogert on 05/03/2023. +// + +#include "G4VtkUtility.hh" + +#include "G4Transform3D.hh" + +#include "vtkMatrix4x4.h" +#include "vtkPlane.h" + +vtkSmartPointer G4Transform3DToVtkMatrix4x4(const G4Transform3D& g4Trans) +{ + auto transform = vtkSmartPointer(); + + double transformArray[16] = {g4Trans.xx(), g4Trans.xy(), g4Trans.xy(), g4Trans.dx(), + g4Trans.yx(), g4Trans.yy(), g4Trans.yy(), g4Trans.dy(), + g4Trans.zx(), g4Trans.zy(), g4Trans.zy(), g4Trans.dz(), + 0., 0., 0., 1.}; + transform->DeepCopy(transformArray); + return transform; +} + +vtkSmartPointer G4Plane3DToVtkPlane(const G4Plane3D& g4plane) +{ + auto plane = vtkSmartPointer::New(); + + auto g4normal = g4plane.normal(); + auto g4point = g4plane.point(); + + plane->SetNormal(g4normal.x(), g4normal.y(), g4normal.z()); + plane->SetOrigin(g4point.x(), g4point.y(), g4point.z()); + + return plane; +} + +G4Plane3D VtkPlaneToG4Plane3D(vtkPlane* vtkPlane) +{ + auto point = vtkPlane->GetOrigin(); + auto normal = vtkPlane->GetNormal(); + + G4Plane3D plane = + G4Plane3D(G4Normal3D(normal[0], normal[1], normal[2]), G4Point3D(point[0], point[1], point[2])); + return plane; +} + +void MaxBounds(G4double* maxBound, G4double* boundToCheck) +{ + if (boundToCheck[0] < maxBound[0]) maxBound[0] = boundToCheck[0]; + if (boundToCheck[1] > maxBound[1]) maxBound[1] = boundToCheck[1]; + + if (boundToCheck[2] < maxBound[2]) maxBound[2] = boundToCheck[2]; + if (boundToCheck[3] > maxBound[3]) maxBound[3] = boundToCheck[3]; + + if (boundToCheck[4] < maxBound[4]) maxBound[4] = boundToCheck[4]; + if (boundToCheck[5] > maxBound[5]) maxBound[5] = boundToCheck[5]; +} diff --git a/source/visualization/Vtk/src/G4VtkViewer.cc b/source/visualization/Vtk/src/G4VtkViewer.cc index f3fb7bbb4ca..c884bf5a808 100644 --- a/source/visualization/Vtk/src/G4VtkViewer.cc +++ b/source/visualization/Vtk/src/G4VtkViewer.cc @@ -25,32 +25,50 @@ #include "G4VtkViewer.hh" +#include "G4Transform3D.hh" #include "G4VSceneHandler.hh" +#include "G4VtkCutterPipeline.hh" +#include "G4VtkPolydataInstanceAppendPipeline.hh" +#include "G4VtkPolydataInstanceBakePipeline.hh" +#include "G4VtkPolydataInstancePipeline.hh" +#include "G4VtkPolydataInstanceTensorPipeline.hh" #include "G4VtkSceneHandler.hh" +#include "G4VtkUtility.hh" +#include "G4VtkVisContext.hh" -#include "vtkRendererCollection.h" -#include "vtkLightCollection.h" - -#include "vtkWindowToImageFilter.h" -#include "vtkImageWriter.h" +#include "vtk3DSImporter.h" #include "vtkBMPWriter.h" +#include "vtkIVExporter.h" // open inventor +#include "vtkImageWriter.h" +#include "vtkImplicitPlaneRepresentation.h" +#include "vtkImplicitPlaneWidget2.h" #include "vtkJPEGWriter.h" +#include "vtkLightCollection.h" +#include "vtkOBJExporter.h" +#include "vtkOBJImporter.h" +#include "vtkOOGLExporter.h" #include "vtkPNGWriter.h" #include "vtkPNMWriter.h" -#include "vtkTIFFWriter.h" +#include "vtkPOVExporter.h" #include "vtkPostScriptWriter.h" -#include "vtkOBJExporter.h" -#include "vtkVRMLExporter.h" +#include "vtkRIBExporter.h" // Renderman +#include "vtkRendererCollection.h" #include "vtkSingleVTPExporter.h" +#include "vtkTIFFWriter.h" +#include "vtkVRMLExporter.h" +#include "vtkVRMLImporter.h" +#include "vtkWindowToImageFilter.h" +#include "vtkX3DExporter.h" + +// Readers (vtkDataReader) -#include "vtkShadowMapPass.h" -#include "vtkShadowMapBakerPass.h" -#include "vtkSequencePass.h" #include "vtkCameraPass.h" +#include "vtkOpenGLRenderer.h" #include "vtkRenderPass.h" #include "vtkRenderPassCollection.h" - -#include "vtkOpenGLRenderer.h" +#include "vtkSequencePass.h" +#include "vtkShadowMapBakerPass.h" +#include "vtkShadowMapPass.h" G4VtkViewer::G4VtkViewer(G4VSceneHandler& sceneHandler, const G4String& name) : G4VViewer(sceneHandler, sceneHandler.IncrementViewCount(), name) @@ -64,15 +82,15 @@ G4VtkViewer::G4VtkViewer(G4VSceneHandler& sceneHandler, const G4String& name) void G4VtkViewer::Initialise() { - _renderWindow = vtkRenderWindow::New(); + _renderWindow = vtkRenderWindow::New(); renderWindowInteractor = vtkRenderWindowInteractor::New(); #ifdef G4VTKDEBUG G4cout << "G4VtkViewer::G4VtkViewer" << G4endl; G4cout << "G4VtkViewer::G4VtkViewer> " << fVP.GetWindowSizeHintX() << " " - << fVP.GetWindowSizeHintY() << G4endl; + << fVP.GetWindowSizeHintY() << G4endl; G4cout << "G4VtkViewer::G4VtkViewer> " << fVP.GetWindowLocationHintX() << " " - << fVP.GetWindowLocationHintY() << G4endl; + << fVP.GetWindowLocationHintY() << G4endl; #endif // Need windowSizeX/Y - obtain from _renderWindow? @@ -94,8 +112,8 @@ void G4VtkViewer::Initialise() #else const G4double pixelFactor = 1.; #endif - _renderWindow->SetSize - (pixelFactor*fVP.GetWindowSizeHintX(),pixelFactor*fVP.GetWindowSizeHintY()); + _renderWindow->SetSize(pixelFactor * fVP.GetWindowSizeHintX(), + pixelFactor * fVP.GetWindowSizeHintY()); _renderWindow->SetWindowName("Vtk viewer"); _renderWindow->AddRenderer(renderer); @@ -106,141 +124,126 @@ void G4VtkViewer::Initialise() camera->SetFocalPoint(0, 0, 0); renderer->SetActiveCamera(camera); - //renderer->SetUseHiddenLineRemoval(1); // TODO needs to be an option - //renderer->SetUseShadows(1); // TODO needs to be an option + // Hidden line removal + renderer->SetUseHiddenLineRemoval(0); + + // Shadows + renderer->SetUseShadows(0); // Set callback to match VTK parameters to Geant4 geant4Callback->SetGeant4ViewParameters(&fVP); renderer->AddObserver(vtkCommand::EndEvent, geant4Callback); - vtkSmartPointer style = - vtkSmartPointer::New(); + vtkSmartPointer style = vtkSmartPointer::New(); renderWindowInteractor->SetInteractorStyle(style); - - // DrawShadows(); } -G4VtkViewer::~G4VtkViewer() {} - -void G4VtkViewer::SetView() { +G4VtkViewer::~G4VtkViewer() +{ +#ifdef G4VTKDEBUG + G4cout << "G4VtkViewer::~G4VtkViewer()" << G4endl; +#endif +} +void G4VtkViewer::SetView() +{ +#ifdef G4VTKDEBUG + G4cout << "G4VtkViewer::SetView()" << G4endl; +#endif // background colour const G4Colour backgroundColour = fVP.GetBackgroundColour(); - renderer->SetBackground(backgroundColour.GetRed(), backgroundColour.GetGreen(), backgroundColour.GetBlue()); + renderer->SetBackground(backgroundColour.GetRed(), backgroundColour.GetGreen(), + backgroundColour.GetBlue()); // target and camera positions G4double radius = fSceneHandler.GetExtent().GetExtentRadius(); - if(radius <= 0.) - {radius = 1.;} - G4double cameraDistance = fVP.GetCameraDistance(radius); + if (radius <= 0.) { + radius = 1.; + } + G4double cameraDistance = fVP.GetCameraDistance(radius); G4Point3D viewpointDirection = fVP.GetViewpointDirection(); - G4Point3D targetPoint = fVP.GetCurrentTargetPoint(); - G4Point3D cameraPosition = - targetPoint + viewpointDirection.unit() * cameraDistance; - renderer->GetActiveCamera()->SetFocalPoint(targetPoint.x(), - targetPoint.y(), - targetPoint.z()); - renderer->GetActiveCamera()->SetPosition(cameraPosition.x(), - cameraPosition.y(), + G4Point3D targetPoint = fVP.GetCurrentTargetPoint(); + G4Point3D cameraPosition = targetPoint + viewpointDirection.unit() * cameraDistance; + renderer->GetActiveCamera()->SetFocalPoint(targetPoint.x(), targetPoint.y(), targetPoint.z()); + renderer->GetActiveCamera()->SetPosition(cameraPosition.x(), cameraPosition.y(), cameraPosition.z()); renderer->GetActiveCamera()->SetParallelScale(cameraDistance); // need to set camera distance and parallel scale on first set view - if(firstSetView) - { + if (firstSetView) { geant4Callback->SetVtkInitialValues(cameraDistance, cameraDistance); firstSetView = false; } // projection type and view angle and zoom factor - G4double fieldHalfAngle = fVP.GetFieldHalfAngle(); - G4double zoomFactor = fVP.GetZoomFactor(); + G4double fieldHalfAngle = fVP.GetFieldHalfAngle(); + G4double zoomFactor = fVP.GetZoomFactor(); vtkCamera* activeCamera = renderer->GetActiveCamera(); - if(fieldHalfAngle == 0) { + if (fieldHalfAngle == 0) { activeCamera->SetParallelProjection(1); - activeCamera->SetParallelScale(activeCamera->GetParallelScale()/zoomFactor); + activeCamera->SetParallelScale(activeCamera->GetParallelScale() / zoomFactor); } else { activeCamera->SetParallelProjection(0); - activeCamera->SetViewAngle(2*fieldHalfAngle/M_PI*180); - activeCamera->SetPosition(cameraPosition.x()/zoomFactor, - cameraPosition.y()/zoomFactor, - cameraPosition.z()/zoomFactor); + activeCamera->SetViewAngle(2 * fieldHalfAngle / M_PI * 180); + activeCamera->SetPosition(cameraPosition.x() / zoomFactor, cameraPosition.y() / zoomFactor, + cameraPosition.z() / zoomFactor); } - // camera roll - // renderer->GetActiveCamera()->SetRoll(0); - // camera up direction const G4Vector3D upVector = fVP.GetUpVector(); - renderer->GetActiveCamera()->SetViewUp(upVector.x(), - upVector.y(), - upVector.z()); + renderer->GetActiveCamera()->SetViewUp(upVector.x(), upVector.y(), upVector.z()); // Light const G4Vector3D lightDirection = fVP.GetLightpointDirection(); - G4bool lightsMoveWithCamera = fVP.GetLightsMoveWithCamera(); - G4Vector3D lightPosition = - targetPoint + lightDirection.unit() * cameraDistance; + G4bool lightsMoveWithCamera = fVP.GetLightsMoveWithCamera(); + G4Vector3D lightPosition = targetPoint + lightDirection.unit() * cameraDistance; vtkLightCollection* currentLights = renderer->GetLights(); - if (currentLights->GetNumberOfItems() != 0) - { + if (currentLights->GetNumberOfItems() != 0) { auto currentLight = dynamic_cast(currentLights->GetItemAsObject(0)); - if (currentLight) - { - currentLight->SetPosition(lightPosition.x(), - lightPosition.y(), - lightPosition.z()); - if (lightsMoveWithCamera) - {currentLight->SetLightTypeToCameraLight();} - else - {currentLight->SetLightTypeToSceneLight();} + if (currentLight != nullptr) { + currentLight->SetPosition(lightPosition.x(), lightPosition.y(), lightPosition.z()); + if (lightsMoveWithCamera) { + currentLight->SetLightTypeToCameraLight(); + } + else { + currentLight->SetLightTypeToSceneLight(); + } } } - // Rotation style -#if 0 - G4ViewParameters::RotationStyle rotationStyle = fVP.GetRotationStyle(); - if (rotationStyle == G4ViewParameters::RotationStyle::freeRotation) { - vtkSmartPointer style = - vtkSmartPointer::New(); - _renderWindow->GetInteractor()->SetInteractorStyle(style); + // cut away + if (fVP.IsCutaway()) { + G4cout << "Add cutaway planes" << G4endl; } - else if(rotationStyle == G4ViewParameters::RotationStyle::constrainUpDirection) { - // camera->SetViewUp(upVector.x(), upVector.y(), upVector.z()); - vtkSmartPointer style = - vtkSmartPointer::New(); - _renderWindow->GetInteractor()->SetInteractorStyle(style); + + // section + if (fVP.IsSection()) { + G4cout << "Add section" << G4endl; } -#endif } -void G4VtkViewer::ClearView() { - vtkActorCollection *actors = renderer->GetActors(); - vtkActor *actor = actors->GetLastActor(); - - while(actor) { +void G4VtkViewer::ClearView() +{ #ifdef G4VTKDEBUG - G4cout << "G4VtkViewer::ClearView() remove actor " << actor << G4endl; + G4cout << "G4VtkViewer::ClearView()" << G4endl; #endif - renderer->RemoveActor(actor); - actor = actors->GetLastActor(); - } - vtkPropCollection *props = renderer->GetViewProps(); - vtkProp *prop = props->GetLastProp(); + auto& fVtkSceneHandler = dynamic_cast(fSceneHandler); + G4VtkStore& ts = fVtkSceneHandler.GetTransientStore(); + ts.Clear(); + + G4VtkStore& s = fVtkSceneHandler.GetStore(); + s.Clear(); +} - while(prop) { +void G4VtkViewer::DrawView() +{ #ifdef G4VTKDEBUG - G4cout << "G4VtkViewer::ClearView() remove prop " << prop << G4endl; + G4cout << "G4VtkViewer::DrawView()" << G4endl; #endif - renderer->RemoveViewProp(prop); - prop = props->GetLastProp(); - } -} -void G4VtkViewer::DrawView() { // First, a view should decide when to re-visit the G4 kernel. // Sometimes it might not be necessary, e.g., if the scene is stored // in a graphical database (e.g., OpenGL's display lists) and only @@ -248,31 +251,27 @@ void G4VtkViewer::DrawView() { // graphical database will always need to visit the G4 kernel. NeedKernelVisit(); // Default is - always visit G4 kernel. + // Note: this routine sets the fNeedKernelVisit flag of *all* the // views of the scene. ProcessView(); // The basic logic is here. // Add HUD - DrawViewHUD(); + AddViewHUD(); + + // Add clipper and cutter widgets + auto g4p = G4Plane3D(); + AddCutterPlaneWidget(g4p); + AddClipperPlaneWidget(g4p); + + // Add camera orientation widget + AddCameraOrientationWidget(); // ...before finally... FinishView(); // Flush streams and/or swap buffers. } -void G4VtkViewer::DrawViewHUD() -{ - // make sure text is always visible - G4Colour colour = fVP.GetBackgroundColour(); - infoTextActor->GetTextProperty()->SetColor(std::fmod(colour.GetRed() + 0.5, 1.0), - std::fmod(colour.GetGreen() + 0.5, 1.0), - std::fmod(colour.GetBlue() + 0.5, 1.0)); - infoTextActor->GetTextProperty()->SetFontSize(20); - infoCallback->SetTextActor(infoTextActor); - renderer->AddObserver(vtkCommand::EndEvent, infoCallback); - renderer->AddActor(infoTextActor); -} - void G4VtkViewer::DrawShadows() { _renderWindow->SetMultiSamples(0); @@ -289,20 +288,16 @@ void G4VtkViewer::DrawShadows() cameraP->SetDelegatePass(seq); // tell the renderer to use our render pass pipeline - vtkOpenGLRenderer* glrenderer = dynamic_cast(renderer.GetPointer()); + auto glrenderer = dynamic_cast(renderer.GetPointer()); glrenderer->SetPass(cameraP); } void G4VtkViewer::ShowView() { #ifdef G4VTKDEBUG - G4cout << "G4VtkViewer::ShowView() called." << G4endl; - // static_cast(fSceneHandler).PrintStores(); + G4cout << "G4VtkViewer::ShowView()" << G4endl; #endif - G4VtkSceneHandler& fVtkSceneHandler = dynamic_cast(fSceneHandler); - fVtkSceneHandler.Modified(); - infoTextActor->GetTextProperty()->SetFontSize(28); G4Colour colour = fVP.GetBackgroundColour(); @@ -315,25 +310,27 @@ void G4VtkViewer::ShowView() renderer->AddObserver(vtkCommand::EndEvent, infoCallback); geant4Callback->SetGeant4ViewParameters(&fVP); renderer->AddObserver(vtkCommand::EndEvent, geant4Callback); - renderer->AddActor(infoTextActor); } void G4VtkViewer::FinishView() { - G4VtkSceneHandler& fVtkSceneHandler = dynamic_cast(fSceneHandler); +#ifdef G4VTKDEBUG + G4cout << "G4VtkViewer::FinishView()" << G4endl; +#endif + + auto& fVtkSceneHandler = dynamic_cast(fSceneHandler); fVtkSceneHandler.Modified(); - _renderWindow->Render(); _renderWindow->GetInteractor()->Initialize(); + _renderWindow->Render(); _renderWindow->GetInteractor()->Start(); } void G4VtkViewer::ExportScreenShot(G4String path, G4String format) { + vtkImageWriter* imWriter = nullptr; - vtkImageWriter *imWriter = nullptr; - - if(format == "bmp") { + if (format == "bmp") { imWriter = vtkBMPWriter::New(); } else if (format == "jpg") { @@ -357,19 +354,20 @@ void G4VtkViewer::ExportScreenShot(G4String path, G4String format) _renderWindow->Render(); - vtkSmartPointer winToImage = vtkSmartPointer::New(); + vtkSmartPointer winToImage = + vtkSmartPointer::New(); winToImage->SetInput(_renderWindow); winToImage->SetScale(1); - if(format == "ps") - { + if (format == "ps") { winToImage->SetInputBufferTypeToRGB(); winToImage->ReadFrontBufferOff(); winToImage->Update(); } - else - {winToImage->SetInputBufferTypeToRGBA();} + else { + winToImage->SetInputBufferTypeToRGBA(); + } - imWriter->SetFileName((path+"."+format).c_str()); + imWriter->SetFileName((path + "." + format).c_str()); imWriter->SetInputConnection(winToImage->GetOutputPort()); imWriter->Write(); } @@ -390,7 +388,7 @@ void G4VtkViewer::ExportVRMLScene(G4String path) _rw1->AddRenderer(_renderWindow->GetRenderers()->GetFirstRenderer()); vtkSmartPointer exporter = vtkSmartPointer::New(); exporter->SetRenderWindow(_rw1); - exporter->SetFileName((path+".vrml").c_str()); + exporter->SetFileName((path + ".vrml").c_str()); exporter->Write(); } @@ -400,6 +398,339 @@ void G4VtkViewer::ExportVTPScene(G4String path) _rw1->AddRenderer(_renderWindow->GetRenderers()->GetFirstRenderer()); vtkSmartPointer exporter = vtkSmartPointer::New(); exporter->SetRenderWindow(_rw1); - exporter->SetFileName((path+".vtp").c_str()); + exporter->SetFileName((path + ".vtp").c_str()); + exporter->Write(); +} + +void G4VtkViewer::ExportGLTFScene(G4String /*fileName*/) {} + +void G4VtkViewer::ExportVTPCutter(G4String fileName) +{ + auto& fVtkSceneHandler = dynamic_cast(fSceneHandler); + G4VtkStore& s = fVtkSceneHandler.GetStore(); + + // create new renderer + vtkNew tempRenderer; + + // loop over pipelines + auto separate = s.GetSeparatePipeMap(); + for (const auto& i : separate) { + i.second->GetActor(); + auto children = i.second->GetChildPipelines(); + for (auto child : children) { + if (child->GetTypeName() == "G4VtkCutterPipeline") { + auto childCutter = dynamic_cast(child); + tempRenderer->AddActor(childCutter->GetActor()); + } + } + } + + auto tensor = s.GetTensorPipeMap(); + for (const auto& i : tensor) { + i.second->GetActor(); + auto children = i.second->GetChildPipelines(); + for (auto child : children) { + if (child->GetTypeName() == "G4VtkCutterPipeline") { + auto childCutter = dynamic_cast(child); + tempRenderer->AddActor(childCutter->GetActor()); + } + } + } + + auto append = s.GetAppendPipeMap(); + for (const auto& i : append) { + i.second->GetActor(); + auto children = i.second->GetChildPipelines(); + for (auto child : children) { + if (child->GetTypeName() == "G4VtkCutterPipeline") { + auto childCutter = dynamic_cast(child); + tempRenderer->AddActor(childCutter->GetActor()); + } + } + } + + auto baked = s.GetBakePipeMap(); + for (const auto& i : baked) { + i.second->GetActor(); + auto children = i.second->GetChildPipelines(); + for (auto child : children) { + if (child->GetTypeName() == "G4VtkCutterPipeline") { + auto childCutter = dynamic_cast(child); + tempRenderer->AddActor(childCutter->GetActor()); + } + } + } + + vtkNew tempRenderWindow; + tempRenderWindow->AddRenderer(tempRenderer); + vtkNew exporter; + exporter->SetRenderWindow(tempRenderWindow); + exporter->SetFileName(fileName.c_str()); exporter->Write(); } + +void G4VtkViewer::ExportFormatStore(G4String fileName, G4String storeName) +{ + vtkSmartPointer tempRenderWindow; + vtkNew tempRenderer; + tempRenderWindow = vtkSmartPointer::New(); + tempRenderWindow->AddRenderer(tempRenderer); + + auto& fVtkSceneHandler = dynamic_cast(fSceneHandler); + + if (storeName == "transient") { + G4VtkStore& store = fVtkSceneHandler.GetTransientStore(); + store.AddToRenderer(tempRenderer); + } + else { + G4VtkStore& store = fVtkSceneHandler.GetStore(); + store.AddToRenderer(tempRenderer); + } + + if (fileName.find("obj") != std::string::npos) { + vtkNew exporter; + exporter->SetRenderWindow(tempRenderWindow); + exporter->SetFilePrefix(fileName.c_str()); + exporter->Write(); + } + else if (fileName.find("vrml") != std::string::npos) { + vtkNew exporter; + exporter->SetRenderWindow(tempRenderWindow); + exporter->SetFileName(fileName.c_str()); + exporter->Write(); + } + else if (fileName.find("vtp") != std::string::npos) { + vtkNew exporter; + exporter->SetRenderWindow(tempRenderWindow); + exporter->SetFileName(fileName.c_str()); + exporter->Write(); + } +} + +void G4VtkViewer::AddViewHUD() +{ + // make sure text is always visible + G4Colour colour = fVP.GetBackgroundColour(); + infoTextActor->GetTextProperty()->SetColor(std::fmod(colour.GetRed() + 0.5, 1.0), + std::fmod(colour.GetGreen() + 0.5, 1.0), + std::fmod(colour.GetBlue() + 0.5, 1.0)); + infoTextActor->GetTextProperty()->SetFontSize(20); + infoCallback->SetTextActor(infoTextActor); + renderer->AddObserver(vtkCommand::EndEvent, infoCallback); + renderer->AddActor(infoTextActor); + infoTextActor->SetVisibility(0); +} + +void G4VtkViewer::AddClipperPlaneWidget(const G4Plane3D& plane) +{ + vtkNew clipperCallback; + auto& fVtkSceneHandler = dynamic_cast(fSceneHandler); + G4VtkStore& store = fVtkSceneHandler.GetStore(); + clipperCallback->SetStore(&store); + clipperCallback->SetUpdatePipelineName("clipper", "clipper"); + + G4double bounds[6]; + store.GetBounds(bounds); + auto vplane = G4Plane3DToVtkPlane(plane); + clipperPlaneRepresentation->SetPlaceFactor( + 1.25); // This must be set prior to placing the widget. + clipperPlaneRepresentation->PlaceWidget(bounds); + clipperPlaneRepresentation->SetNormal(vplane->GetNormal()); + + SetWidgetInteractor(clipperPlaneWidget); + clipperPlaneWidget->SetRepresentation(clipperPlaneRepresentation); + clipperPlaneWidget->AddObserver(vtkCommand::InteractionEvent, clipperCallback); + + clipperPlaneWidget->SetEnabled(0); +} + +void G4VtkViewer::AddCutterPlaneWidget(const G4Plane3D& plane) +{ + vtkNew cutterCallback; + auto& fVtkSceneHandler = dynamic_cast(fSceneHandler); + G4VtkStore& store = fVtkSceneHandler.GetStore(); + cutterCallback->SetStore(&store); + cutterCallback->SetUpdatePipelineName("cutter", "cutter"); + + G4double bounds[6]; + store.GetBounds(bounds); + auto vplane = G4Plane3DToVtkPlane(plane); + cutterPlaneRepresentation->SetPlaceFactor(1.25); // This must be set prior to placing the widget. + cutterPlaneRepresentation->PlaceWidget(bounds); + cutterPlaneRepresentation->SetNormal(vplane->GetNormal()); + + SetWidgetInteractor(cutterPlaneWidget); + cutterPlaneWidget->SetRepresentation(cutterPlaneRepresentation); + cutterPlaneWidget->AddObserver(vtkCommand::InteractionEvent, cutterCallback); + + cutterPlaneWidget->SetEnabled(0); +} + +void G4VtkViewer::EnableShadows() +{ + renderer->SetUseShadows(1); +} + +void G4VtkViewer::DisableShadows() +{ + renderer->SetUseShadows(0); +} + +void G4VtkViewer::EnableHUD() +{ + infoTextActor->SetVisibility(1); +} + +void G4VtkViewer::DisableHUD() +{ + infoTextActor->SetVisibility(0); +} + +void G4VtkViewer::EnableClipper(const G4Plane3D& plane, G4bool bWidget) +{ + auto& fVtkSceneHandler = dynamic_cast(fSceneHandler); + G4VtkStore& s = fVtkSceneHandler.GetStore(); + G4String name = G4String("clipper"); + s.AddClipper(name, plane); + if (bWidget) { + EnableClipperWidget(); + } +} + +void G4VtkViewer::DisableClipper() +{ + auto& fVtkSceneHandler = dynamic_cast(fSceneHandler); + G4VtkStore& s = fVtkSceneHandler.GetStore(); + s.RemoveClipper("clipper"); +} + +void G4VtkViewer::EnableClipperWidget() +{ + clipperPlaneWidget->SetEnabled(1); +} + +void G4VtkViewer::DisableClipperWidget() +{ + clipperPlaneWidget->SetEnabled(0); +} + +void G4VtkViewer::EnableCutter(const G4Plane3D& plane, G4bool bWidget) +{ + auto& fVtkSceneHandler = dynamic_cast(fSceneHandler); + G4VtkStore& s = fVtkSceneHandler.GetStore(); + G4String name = G4String("cutter"); + s.AddCutter(name, plane); + if (bWidget) { + EnableCutterWidget(); + } +} + +void G4VtkViewer::DisableCutter(G4String /*name*/) +{ + auto& fVtkSceneHandler = dynamic_cast(fSceneHandler); + G4VtkStore& s = fVtkSceneHandler.GetStore(); + s.RemoveCutter("cutter"); +} + +void G4VtkViewer::EnableCutterWidget() +{ + cutterPlaneWidget->SetEnabled(1); +} + +void G4VtkViewer::DisableCutterWidget() +{ + cutterPlaneWidget->SetEnabled(0); +} + +void G4VtkViewer::AddCameraOrientationWidget() +{ + camOrientWidget->SetParentRenderer(renderer); + // Enable the widget. + camOrientWidget->On(); +} + +void G4VtkViewer::EnableCameraOrientationWidget() +{ + camOrientWidget->On(); +} + +void G4VtkViewer::DisableCameraOrientationWidget() +{ + camOrientWidget->Off(); +} + +void G4VtkViewer::AddImageOverlay(const G4String& fileName, const G4double alpha, + const G4double imageBottomLeft[2], + const G4double worldBottomLeft[2], + const G4double imageTopRight[2], const G4double worldTopRight[2], + const G4double rotation[3], const G4double translation[3]) +{ + auto xScale = (worldTopRight[0] - worldBottomLeft[0]) / (imageTopRight[0] - imageBottomLeft[0]); + auto yScale = (worldTopRight[1] - worldBottomLeft[1]) / (imageTopRight[1] - imageBottomLeft[1]); + + auto transformation = G4Transform3D::Identity; + auto scal = G4Scale3D(xScale, yScale, 1); + auto rotx = G4RotateX3D(rotation[0]); + auto roty = G4RotateY3D(rotation[1]); + auto rotz = G4RotateZ3D(rotation[2]); + auto tran = G4Translate3D(translation[0] - xScale * (imageBottomLeft[0] + imageTopRight[0]) / 2.0, + translation[1] - yScale * (imageBottomLeft[1] + imageTopRight[1]) / 2.0, + translation[2]); + transformation = tran * rotz * roty * rotx * scal * transformation; + + auto& fVtkSceneHandler = dynamic_cast(fSceneHandler); + G4VtkStore& st = fVtkSceneHandler.GetTransientStore(); + + G4VtkVisContext vc = G4VtkVisContext(this, nullptr, false, transformation); + vc.alpha = alpha; + st.AddNonG4ObjectImage(fileName, vc); +} + +void G4VtkViewer::Add3DOverlay(const G4String& fileName, const G4double colour[3], + const G4double alpha, const G4double scale[3], + const G4double rotation[3], const G4double translation[3]) +{ + auto transformation = G4Transform3D::Identity; + auto scal = G4Scale3D(scale[0], scale[1], scale[2]); + auto rotx = G4RotateX3D(rotation[0]); + auto roty = G4RotateY3D(rotation[1]); + auto rotz = G4RotateZ3D(rotation[2]); + auto tran = G4Translate3D(translation[0], translation[1], translation[2]); + + transformation = tran * rotz * roty * rotx * scal * transformation; + + auto& fVtkSceneHandler = dynamic_cast(fSceneHandler); + G4VtkStore& st = fVtkSceneHandler.GetTransientStore(); + + G4VtkVisContext vc = G4VtkVisContext(this, nullptr, false, transformation); + vc.alpha = alpha; + vc.red = colour[0]; + vc.green = colour[1]; + vc.blue = colour[2]; + st.AddNonG4ObjectPolydata(fileName, vc); +} + +void G4VtkViewer::Print() +{ + cutterPlaneRepresentation->VisibilityOff(); + + G4cout << "Number of VTK props> " << renderer->GetNumberOfPropsRendered() << G4endl; + G4cout << "Number of VTK actors> " << renderer->GetActors()->GetNumberOfItems() << G4endl; + auto& fVtkSceneHandler = dynamic_cast(fSceneHandler); + G4VtkStore& s = fVtkSceneHandler.GetStore(); + G4VtkStore& st = fVtkSceneHandler.GetTransientStore(); + s.Print(); + st.Print(); +} + +void G4VtkViewer::SetPolyhedronPipeline(const G4String& type) +{ + // Get the scene handler + auto& fVtkSceneHandler = dynamic_cast(fSceneHandler); + fVtkSceneHandler.SetPolyhedronPipeline(type); +} + +void G4VtkViewer::SetWidgetInteractor(vtkAbstractWidget* widget) +{ + widget->SetInteractor(_renderWindow->GetInteractor()); +} diff --git a/source/visualization/Vtk/src/vtkTensorGlyphColor.cxx b/source/visualization/Vtk/src/vtkTensorGlyphColor.cxx index b0a0a0f7dbf..ea76a2e9598 100644 --- a/source/visualization/Vtk/src/vtkTensorGlyphColor.cxx +++ b/source/visualization/Vtk/src/vtkTensorGlyphColor.cxx @@ -14,27 +14,27 @@ =========================================================================*/ #include "vtkTensorGlyphColor.h" -#include "vtkStreamingDemandDrivenPipeline.h" #include "vtkCell.h" #include "vtkCellArray.h" #include "vtkDataSet.h" +#include "vtkDoubleArray.h" #include "vtkExecutive.h" #include "vtkFloatArray.h" -#include "vtkDoubleArray.h" -#include "vtkMath.h" #include "vtkInformation.h" #include "vtkInformationVector.h" +#include "vtkMath.h" #include "vtkObjectFactory.h" #include "vtkPointData.h" #include "vtkPolyData.h" +#include "vtkStreamingDemandDrivenPipeline.h" #include "vtkTransform.h" vtkStandardNewMacro(vtkTensorGlyphColor) -// Construct object with scaling on and scale factor 1.0. Eigenvalues are -// extracted, glyphs are colored with input scalar data, and logarithmic -// scaling is turned off. -vtkTensorGlyphColor::vtkTensorGlyphColor() + // Construct object with scaling on and scale factor 1.0. Eigenvalues are + // extracted, glyphs are colored with input scalar data, and logarithmic + // scaling is turned off. + vtkTensorGlyphColor::vtkTensorGlyphColor() { this->Scaling = 1; this->ScaleFactor = 1.0; @@ -62,99 +62,93 @@ vtkTensorGlyphColor::vtkTensorGlyphColor() vtkTensorGlyphColor::~vtkTensorGlyphColor() = default; //---------------------------------------------------------------------------- -int vtkTensorGlyphColor::RequestUpdateExtent( - vtkInformation *vtkNotUsed(request), - vtkInformationVector **inputVector, - vtkInformationVector *outputVector) +int vtkTensorGlyphColor::RequestUpdateExtent(vtkInformation* vtkNotUsed(request), + vtkInformationVector** inputVector, + vtkInformationVector* outputVector) { // get the info objects - vtkInformation *inInfo = inputVector[0]->GetInformationObject(0); - vtkInformation *sourceInfo = inputVector[1]->GetInformationObject(0); - vtkInformation *outInfo = outputVector->GetInformationObject(0); - - if (sourceInfo) - { - sourceInfo->Set(vtkStreamingDemandDrivenPipeline::UPDATE_PIECE_NUMBER(), - 0); - sourceInfo->Set(vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_PIECES(), - 1); - sourceInfo->Set(vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_GHOST_LEVELS(), - 0); + vtkInformation* inInfo = inputVector[0]->GetInformationObject(0); + vtkInformation* sourceInfo = inputVector[1]->GetInformationObject(0); + vtkInformation* outInfo = outputVector->GetInformationObject(0); + + if (sourceInfo != nullptr) { + sourceInfo->Set(vtkStreamingDemandDrivenPipeline::UPDATE_PIECE_NUMBER(), 0); + sourceInfo->Set(vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_PIECES(), 1); + sourceInfo->Set(vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_GHOST_LEVELS(), 0); } inInfo->Set(vtkStreamingDemandDrivenPipeline::UPDATE_PIECE_NUMBER(), - outInfo->Get(vtkStreamingDemandDrivenPipeline::UPDATE_PIECE_NUMBER())); + outInfo->Get(vtkStreamingDemandDrivenPipeline::UPDATE_PIECE_NUMBER())); inInfo->Set(vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_PIECES(), - outInfo->Get(vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_PIECES())); + outInfo->Get(vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_PIECES())); inInfo->Set(vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_GHOST_LEVELS(), - outInfo->Get(vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_GHOST_LEVELS())); + outInfo->Get(vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_GHOST_LEVELS())); inInfo->Set(vtkStreamingDemandDrivenPipeline::EXACT_EXTENT(), 1); return 1; } //---------------------------------------------------------------------------- -int vtkTensorGlyphColor::RequestData( - vtkInformation *vtkNotUsed(request), - vtkInformationVector **inputVector, - vtkInformationVector *outputVector) +int vtkTensorGlyphColor::RequestData(vtkInformation* vtkNotUsed(request), + vtkInformationVector** inputVector, + vtkInformationVector* outputVector) { // get the info objects - vtkInformation *inInfo = inputVector[0]->GetInformationObject(0); - vtkInformation *sourceInfo = inputVector[1]->GetInformationObject(0); - vtkInformation *outInfo = outputVector->GetInformationObject(0); + vtkInformation* inInfo = inputVector[0]->GetInformationObject(0); + vtkInformation* sourceInfo = inputVector[1]->GetInformationObject(0); + vtkInformation* outInfo = outputVector->GetInformationObject(0); // get the input and output - vtkDataSet *input = vtkDataSet::SafeDownCast( - inInfo->Get(vtkDataObject::DATA_OBJECT())); - vtkPolyData *source = vtkPolyData::SafeDownCast( - sourceInfo->Get(vtkDataObject::DATA_OBJECT())); - vtkPolyData *output = vtkPolyData::SafeDownCast( - outInfo->Get(vtkDataObject::DATA_OBJECT())); - - vtkDataArray *inTensors; + vtkDataSet* input = vtkDataSet::SafeDownCast(inInfo->Get(vtkDataObject::DATA_OBJECT())); + vtkPolyData* source = vtkPolyData::SafeDownCast(sourceInfo->Get(vtkDataObject::DATA_OBJECT())); + vtkPolyData* output = vtkPolyData::SafeDownCast(outInfo->Get(vtkDataObject::DATA_OBJECT())); + + vtkDataArray* inTensors; double tensor[9]; - vtkDataArray *inScalars; + vtkDataArray* inScalars; vtkIdType numPts, numSourcePts, numSourceCells, inPtId, i; int j; - vtkPoints *sourcePts; - vtkDataArray *sourceNormals; + vtkPoints* sourcePts; + vtkDataArray* sourceNormals; vtkCellArray *sourceCells, *cells; - vtkPoints *newPts; - vtkFloatArray *newScalars=nullptr; - vtkFloatArray *newNormals=nullptr; + vtkPoints* newPts; + vtkFloatArray* newScalars = nullptr; + vtkFloatArray* newNormals = nullptr; double x[3], s; - vtkTransform *trans; - vtkCell *cell; - vtkIdList *cellPts; + vtkTransform* trans; + vtkCell* cell; + vtkIdList* cellPts; int npts; - vtkIdType *pts; + vtkIdType* pts; vtkIdType ptIncr, cellId; vtkIdType subIncr; int numDirs, dir, eigen_dir, symmetric_dir; - vtkMatrix4x4 *matrix; + vtkMatrix4x4* matrix; double *m[3], w[3], *v[3]; double m0[3], m1[3], m2[3]; double v0[3], v1[3], v2[3]; double xv[3], yv[3], zv[3]; double maxScale; - numDirs = (this->ThreeGlyphs?3:1)*(this->Symmetric+1); + numDirs = (this->ThreeGlyphs != 0 ? 3 : 1) * (this->Symmetric + 1); // set up working matrices - m[0] = m0; m[1] = m1; m[2] = m2; - v[0] = v0; v[1] = v1; v[2] = v2; + m[0] = m0; + m[1] = m1; + m[2] = m2; + v[0] = v0; + v[1] = v1; + v[2] = v2; - vtkDebugMacro(<<"Generating tensor glyphs"); + vtkDebugMacro(<< "Generating tensor glyphs"); - vtkPointData *outPD = output->GetPointData(); + vtkPointData* outPD = output->GetPointData(); inTensors = this->GetInputArrayToProcess(0, inputVector); inScalars = this->GetInputArrayToProcess(1, inputVector); numPts = input->GetNumberOfPoints(); - if ( !inTensors || numPts < 1 ) - { - vtkErrorMacro(<<"No data to glyph!"); + if ((inTensors == nullptr) || numPts < 1) { + vtkErrorMacro(<< "No data to glyph!"); return 1; } @@ -170,91 +164,79 @@ int vtkTensorGlyphColor::RequestData( numSourceCells = source->GetNumberOfCells(); newPts = vtkPoints::New(); - newPts->Allocate(numDirs*numPts*numSourcePts); + newPts->Allocate(numDirs * numPts * numSourcePts); // Setting up for calls to PolyData::InsertNextCell() - if ( (sourceCells=source->GetVerts())->GetNumberOfCells() > 0 ) - { + if ((sourceCells = source->GetVerts())->GetNumberOfCells() > 0) { cells = vtkCellArray::New(); - cells->Allocate(numDirs*numPts*sourceCells->GetSize()); + cells->Allocate(numDirs * numPts * sourceCells->GetSize()); output->SetVerts(cells); cells->Delete(); } - if ( (sourceCells=this->GetSource()->GetLines())->GetNumberOfCells() > 0 ) - { + if ((sourceCells = this->GetSource()->GetLines())->GetNumberOfCells() > 0) { cells = vtkCellArray::New(); - cells->Allocate(numDirs*numPts*sourceCells->GetSize()); + cells->Allocate(numDirs * numPts * sourceCells->GetSize()); output->SetLines(cells); cells->Delete(); } - if ( (sourceCells=this->GetSource()->GetPolys())->GetNumberOfCells() > 0 ) - { + if ((sourceCells = this->GetSource()->GetPolys())->GetNumberOfCells() > 0) { cells = vtkCellArray::New(); - cells->Allocate(numDirs*numPts*sourceCells->GetSize()); + cells->Allocate(numDirs * numPts * sourceCells->GetSize()); output->SetPolys(cells); cells->Delete(); } - if ( (sourceCells=this->GetSource()->GetStrips())->GetNumberOfCells() > 0 ) - { + if ((sourceCells = this->GetSource()->GetStrips())->GetNumberOfCells() > 0) { cells = vtkCellArray::New(); - cells->Allocate(numDirs*numPts*sourceCells->GetSize()); + cells->Allocate(numDirs * numPts * sourceCells->GetSize()); output->SetStrips(cells); cells->Delete(); } // only copy scalar data through - vtkPointData *pd = this->GetSource()->GetPointData(); + vtkPointData* pd = this->GetSource()->GetPointData(); // generate scalars if eigenvalues are chosen or if scalars exist. - if (this->ColorGlyphs && - ((this->ColorMode == COLOR_BY_EIGENVALUES) || - (inScalars && (this->ColorMode == COLOR_BY_SCALARS)) ) ) + if ((this->ColorGlyphs != 0) + && ((this->ColorMode == COLOR_BY_EIGENVALUES) + || ((inScalars != nullptr) && (this->ColorMode == COLOR_BY_SCALARS)))) { newScalars = vtkFloatArray::New(); newScalars->SetNumberOfComponents(4); - newScalars->Allocate(numDirs*numPts*numSourcePts); - if (this->ColorMode == COLOR_BY_EIGENVALUES) - { + newScalars->Allocate(numDirs * numPts * numSourcePts); + if (this->ColorMode == COLOR_BY_EIGENVALUES) { newScalars->SetName("MaxEigenvalue"); } - else - { + else { newScalars->SetName(inScalars->GetName()); } } - else - { + else { outPD->CopyAllOff(); outPD->CopyScalarsOn(); - outPD->CopyAllocate(pd,numDirs*numPts*numSourcePts); + outPD->CopyAllocate(pd, numDirs * numPts * numSourcePts); } - if ( (sourceNormals = pd->GetNormals()) ) - { + if ((sourceNormals = pd->GetNormals()) != nullptr) { newNormals = vtkFloatArray::New(); newNormals->SetNumberOfComponents(3); newNormals->SetName("Normals"); - newNormals->Allocate(numDirs*3*numPts*numSourcePts); + newNormals->Allocate(numDirs * 3 * numPts * numSourcePts); } // // First copy all topology (transformation independent) // - for (inPtId=0; inPtId < numPts; inPtId++) - { + for (inPtId = 0; inPtId < numPts; inPtId++) { ptIncr = numDirs * inPtId * numSourcePts; - for (cellId=0; cellId < numSourceCells; cellId++) - { + for (cellId = 0; cellId < numSourceCells; cellId++) { cell = this->GetSource()->GetCell(cellId); cellPts = cell->GetPointIds(); npts = (int)cellPts->GetNumberOfIds(); - for (dir=0; dir < numDirs; dir++) - { + for (dir = 0; dir < numDirs; dir++) { // This variable may be removed, but that // will not improve readability - subIncr = ptIncr + dir*numSourcePts; - for (i=0; i < npts; i++) - { + subIncr = ptIncr + dir * numSourcePts; + for (i = 0; i < npts; i++) { pts[i] = cellPts->GetId(i) + subIncr; } - output->InsertNextCell(cell->GetCellType(),npts,pts); + output->InsertNextCell(cell->GetCellType(), npts, pts); } } } @@ -263,44 +245,45 @@ int vtkTensorGlyphColor::RequestData( // trans->PreMultiply(); - for (inPtId=0; inPtId < numPts; inPtId++) - { + for (inPtId = 0; inPtId < numPts; inPtId++) { ptIncr = numDirs * inPtId * numSourcePts; // Translation is postponed // Symmetric tensor support inTensors->GetTuple(inPtId, tensor); - if (inTensors->GetNumberOfComponents() == 6) - { + if (inTensors->GetNumberOfComponents() == 6) { vtkMath::TensorFromSymmetricTensor(tensor); } // compute orientation vectors and scale factors from tensor - if ( this->ExtractEigenvalues ) // extract appropriate eigenfunctions + if (this->ExtractEigenvalues != 0) // extract appropriate eigenfunctions { // We are interested in the symmetrical part of the tensor only, since // eigenvalues are real if and only if the matrice of reals is symmetrical - for (j=0; j<3; j++) - { - for (i=0; i<3; i++) - { + for (j = 0; j < 3; j++) { + for (i = 0; i < 3; i++) { m[i][j] = 0.5 * (tensor[i + 3 * j] + tensor[j + 3 * i]); } } vtkMath::Jacobi(m, w, v); - //copy eigenvectors - xv[0] = v[0][0]; xv[1] = v[1][0]; xv[2] = v[2][0]; - yv[0] = v[0][1]; yv[1] = v[1][1]; yv[2] = v[2][1]; - zv[0] = v[0][2]; zv[1] = v[1][2]; zv[2] = v[2][2]; + // copy eigenvectors + xv[0] = v[0][0]; + xv[1] = v[1][0]; + xv[2] = v[2][0]; + yv[0] = v[0][1]; + yv[1] = v[1][1]; + yv[2] = v[2][1]; + zv[0] = v[0][2]; + zv[1] = v[1][2]; + zv[2] = v[2][2]; } - else //use tensor columns as eigenvectors + else // use tensor columns as eigenvectors { - for (i=0; i<3; i++) - { + for (i = 0; i < 3; i++) { xv[i] = tensor[i]; - yv[i] = tensor[i+3]; - zv[i] = tensor[i+6]; + yv[i] = tensor[i + 3]; + zv[i] = tensor[i + 6]; } w[0] = vtkMath::Normalize(xv); w[1] = vtkMath::Normalize(yv); @@ -312,21 +295,16 @@ int vtkTensorGlyphColor::RequestData( w[1] *= this->ScaleFactor; w[2] *= this->ScaleFactor; - if ( this->ClampScaling ) - { - for (maxScale=0.0, i=0; i<3; i++) - { - if ( maxScale < fabs(w[i]) ) - { + if (this->ClampScaling != 0) { + for (maxScale = 0.0, i = 0; i < 3; i++) { + if (maxScale < fabs(w[i])) { maxScale = fabs(w[i]); } } - if ( maxScale > this->MaxScaleFactor ) - { + if (maxScale > this->MaxScaleFactor) { maxScale = this->MaxScaleFactor / maxScale; - for (i=0; i<3; i++) - { - w[i] *= maxScale; //preserve overall shape of glyph + for (i = 0; i < 3; i++) { + w[i] *= maxScale; // preserve overall shape of glyph } } } @@ -334,31 +312,25 @@ int vtkTensorGlyphColor::RequestData( // normalization is postponed // make sure scale is okay (non-zero) and scale data - for (maxScale=0.0, i=0; i<3; i++) - { - if ( w[i] > maxScale ) - { + for (maxScale = 0.0, i = 0; i < 3; i++) { + if (w[i] > maxScale) { maxScale = w[i]; } } - if ( maxScale == 0.0 ) - { + if (maxScale == 0.0) { maxScale = 1.0; } - for (i=0; i<3; i++) - { - if ( w[i] == 0.0 ) - { + for (i = 0; i < 3; i++) { + if (w[i] == 0.0) { w[i] = maxScale * 1.0e-06; } } // Now do the real work for each "direction" - for (dir=0; dir < numDirs; dir++) - { - eigen_dir = dir%(this->ThreeGlyphs?3:1); - symmetric_dir = dir/(this->ThreeGlyphs?3:1); + for (dir = 0; dir < numDirs; dir++) { + eigen_dir = dir % (this->ThreeGlyphs != 0 ? 3 : 1); + symmetric_dir = dir / (this->ThreeGlyphs != 0 ? 3 : 1); // Remove previous scales ... trans->Identity(); @@ -379,108 +351,92 @@ int vtkTensorGlyphColor::RequestData( matrix->Element[2][2] = zv[2]; trans->Concatenate(matrix); - if (eigen_dir == 1) - { + if (eigen_dir == 1) { trans->RotateZ(90.0); } - if (eigen_dir == 2) - { + if (eigen_dir == 2) { trans->RotateY(-90.0); } - if (this->ThreeGlyphs) - { + if (this->ThreeGlyphs != 0) { trans->Scale(w[eigen_dir], this->ScaleFactor, this->ScaleFactor); } - else - { + else { trans->Scale(w[0], w[1], w[2]); } // Mirror second set to the symmetric position - if (symmetric_dir == 1) - { - trans->Scale(-1.,1.,1.); + if (symmetric_dir == 1) { + trans->Scale(-1., 1., 1.); } // if the eigenvalue is negative, shift to reverse direction. // The && is there to ensure that we do not change the // old behaviour of vtkTensorGlyphColors (which only used one dir), // in case there is an oriented glyph, e.g. an arrow. - if (w[eigen_dir] < 0 && numDirs > 1) - { + if (w[eigen_dir] < 0 && numDirs > 1) { trans->Translate(-this->Length, 0., 0.); } // multiply points (and normals if available) by resulting // matrix - trans->TransformPoints(sourcePts,newPts); + trans->TransformPoints(sourcePts, newPts); // Apply the transformation to a series of points, // and append the results to outPts. - if ( newNormals ) - { + if (newNormals != nullptr) { // a negative determinant means the transform turns the // glyph surface inside out, and its surface normals all // point inward. The following scale corrects the surface // normals to point outward. - if (trans->GetMatrix()->Determinant() < 0) - { - trans->Scale(-1.0,-1.0,-1.0); + if (trans->GetMatrix()->Determinant() < 0) { + trans->Scale(-1.0, -1.0, -1.0); } - trans->TransformNormals(sourceNormals,newNormals); + trans->TransformNormals(sourceNormals, newNormals); } - // Copy point data from source - if ( this->ColorGlyphs && inScalars && - (this->ColorMode == COLOR_BY_SCALARS) ) + // Copy point data from source + if ((this->ColorGlyphs != 0) && (inScalars != nullptr) + && (this->ColorMode == COLOR_BY_SCALARS)) { - for (i=0; i < numSourcePts; i++) - { + for (i = 0; i < numSourcePts; i++) { auto st = inScalars->GetTuple(inPtId); - newScalars->InsertTuple4(ptIncr+i,st[0],st[1],st[2],st[3]); + newScalars->InsertTuple4(ptIncr + i, st[0], st[1], st[2], st[3]); } } - else if (this->ColorGlyphs && - (this->ColorMode == COLOR_BY_EIGENVALUES) ) - { + else if ((this->ColorGlyphs != 0) && (this->ColorMode == COLOR_BY_EIGENVALUES)) { // If ThreeGlyphs is false we use the first (largest) // eigenvalue as scalar. s = w[eigen_dir]; - for (i=0; i < numSourcePts; i++) - { - newScalars->InsertTuple(ptIncr+i, &s); + for (i = 0; i < numSourcePts; i++) { + newScalars->InsertTuple(ptIncr + i, &s); } } - else - { - for (i=0; i < numSourcePts; i++) - { - outPD->CopyData(pd,i,ptIncr+i); + else { + for (i = 0; i < numSourcePts; i++) { + outPD->CopyData(pd, i, ptIncr + i); } } ptIncr += numSourcePts; } } - vtkDebugMacro(<<"Generated " << numPts <<" tensor glyphs"); + vtkDebugMacro(<< "Generated " << numPts << " tensor glyphs"); // // Update output and release memory // - delete [] pts; + delete[] pts; output->SetPoints(newPts); newPts->Delete(); - if ( newScalars ) - { + if (newScalars != nullptr) { int idx = outPD->AddArray(newScalars); outPD->SetActiveAttribute(idx, vtkDataSetAttributes::SCALARS); newScalars->Delete(); } - if ( newNormals ) - { + if (newNormals != nullptr) { outPD->SetNormals(newNormals); newNormals->Delete(); } @@ -495,50 +451,46 @@ int vtkTensorGlyphColor::RequestData( //---------------------------------------------------------------------------- void vtkTensorGlyphColor::SetSourceConnection(int id, vtkAlgorithmOutput* algOutput) { - if (id < 0) - { + if (id < 0) { vtkErrorMacro("Bad index " << id << " for source."); return; } int numConnections = this->GetNumberOfInputConnections(1); - if (id < numConnections) - { + if (id < numConnections) { this->SetNthInputConnection(1, id, algOutput); } - else if (id == numConnections && algOutput) - { + else if (id == numConnections && (algOutput != nullptr)) { this->AddInputConnection(1, algOutput); } - else if (algOutput) - { - vtkWarningMacro("The source id provided is larger than the maximum " - "source id, using " << numConnections << " instead."); + else if (algOutput != nullptr) { + vtkWarningMacro( + "The source id provided is larger than the maximum " + "source id, using " + << numConnections << " instead."); this->AddInputConnection(1, algOutput); } } //---------------------------------------------------------------------------- -void vtkTensorGlyphColor::SetSourceData(vtkPolyData *source) +void vtkTensorGlyphColor::SetSourceData(vtkPolyData* source) { this->SetInputData(1, source); } //---------------------------------------------------------------------------- -vtkPolyData *vtkTensorGlyphColor::GetSource() +vtkPolyData* vtkTensorGlyphColor::GetSource() { - if (this->GetNumberOfInputConnections(1) < 1) - { + if (this->GetNumberOfInputConnections(1) < 1) { return nullptr; } return vtkPolyData::SafeDownCast(this->GetExecutive()->GetInputData(1, 0)); } //---------------------------------------------------------------------------- -int vtkTensorGlyphColor::FillInputPortInformation(int port, vtkInformation *info) +int vtkTensorGlyphColor::FillInputPortInformation(int port, vtkInformation* info) { - if (port == 1) - { + if (port == 1) { info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(), "vtkPolyData"); return 1; } @@ -549,17 +501,17 @@ int vtkTensorGlyphColor::FillInputPortInformation(int port, vtkInformation *info //---------------------------------------------------------------------------- void vtkTensorGlyphColor::PrintSelf(ostream& os, vtkIndent indent) { - this->Superclass::PrintSelf(os,indent); + this->Superclass::PrintSelf(os, indent); os << indent << "Source: " << this->GetSource() << "\n"; - os << indent << "Scaling: " << (this->Scaling ? "On\n" : "Off\n"); + os << indent << "Scaling: " << (this->Scaling != 0 ? "On\n" : "Off\n"); os << indent << "Scale Factor: " << this->ScaleFactor << "\n"; - os << indent << "Extract Eigenvalues: " << (this->ExtractEigenvalues ? "On\n" : "Off\n"); - os << indent << "Color Glyphs: " << (this->ColorGlyphs ? "On\n" : "Off\n"); + os << indent << "Extract Eigenvalues: " << (this->ExtractEigenvalues != 0 ? "On\n" : "Off\n"); + os << indent << "Color Glyphs: " << (this->ColorGlyphs != 0 ? "On\n" : "Off\n"); os << indent << "Color Mode: " << this->ColorMode << endl; - os << indent << "Clamp Scaling: " << (this->ClampScaling ? "On\n" : "Off\n"); + os << indent << "Clamp Scaling: " << (this->ClampScaling != 0 ? "On\n" : "Off\n"); os << indent << "Max Scale Factor: " << this->MaxScaleFactor << "\n"; - os << indent << "Three Glyphs: " << (this->ThreeGlyphs ? "On\n" : "Off\n"); - os << indent << "Symmetric: " << (this->Symmetric ? "On\n" : "Off\n"); + os << indent << "Three Glyphs: " << (this->ThreeGlyphs != 0 ? "On\n" : "Off\n"); + os << indent << "Symmetric: " << (this->Symmetric != 0 ? "On\n" : "Off\n"); os << indent << "Length: " << this->Length << "\n"; } diff --git a/source/visualization/gMocren/GNUmakefile b/source/visualization/gMocren/GNUmakefile deleted file mode 100644 index d4bee1adc2c..00000000000 --- a/source/visualization/gMocren/GNUmakefile +++ /dev/null @@ -1,58 +0,0 @@ - -name := G4GMocren - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -GLOBLIBS = libG4vis_management.lib libG4modeling.lib -GLOBLIBS += libG4run.lib libG4event.lib -GLOBLIBS += libG4tracking.lib libG4processes.lib libG4digits_hits.lib -GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk -include $(G4INSTALL)/config/G4VIS_BUILD.gmk -include $(G4INSTALL)/config/interactivity.gmk - -# NO need OGL, then reset OGLGLAGS -OGLFLAGS = -OGLLIBS = -# NO need QT, then reset QTGLAGS -QTFLAGS = -QTLIBS = -GLQTLIBS = - -CPPFLAGS += -I$(G4BASE)/visualization/management/include -CPPFLAGS += -I$(G4BASE)/visualization/modeling/include -CPPFLAGS += -I$(G4BASE)/global/management/include -CPPFLAGS += -I$(G4BASE)/global/HEPGeometry/include -CPPFLAGS += -I$(G4BASE)/global/HEPNumerics/include -CPPFLAGS += -I$(G4BASE)/graphics_reps/include -CPPFLAGS += -I$(G4BASE)/intercoms/include -CPPFLAGS += -I$(G4BASE)/geometry/management/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/CSG/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/specific/include - -CPPFLAGS += -I$(G4BASE)/geometry/navigation/include/ - -CPPFLAGS += -I$(G4BASE)/particles/management/include -CPPFLAGS += -I$(G4BASE)/event/include -CPPFLAGS += -I$(G4BASE)/tracking/include -CPPFLAGS += -I$(G4BASE)/materials/include -CPPFLAGS += -I$(G4BASE)/digits_hits/hits/include -CPPFLAGS += -I$(G4BASE)/digits_hits/digits/include -CPPFLAGS += -I$(G4BASE)/digits_hits/utils/include - -#CPPFLAGS += -I$(G4BASE)/visualization/FukuiRenderer/include - - -#CPPFLAGS += -DG4GMocrenFileDEBUG -#PPFLAGS += -DGMOCRENIO_LITTLE_ENDIAN - -ifdef G4VIS_BUILD_XXXSG_DRIVER - CPPFLAGS += -DG4VIS_BUILD_XXXSG_DRIVER -endif - -include $(G4INSTALL)/config/common.gmk diff --git a/source/visualization/gMocren/History b/source/visualization/gMocren/History index 999322cbf94..05547cdd225 100644 --- a/source/visualization/gMocren/History +++ b/source/visualization/gMocren/History @@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-02-06 Ben Morgan (gMocren-V11-01-00) +- Isolate private headers and update dependencies + ## 2022-11-25 Gabriele Cosmo (gMocren-V11-00-03) - Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1. diff --git a/source/visualization/gMocren/include/G4GMocrenFileCTtoDensityMap.hh b/source/visualization/gMocren/include/private/G4GMocrenFileCTtoDensityMap.hh similarity index 100% rename from source/visualization/gMocren/include/G4GMocrenFileCTtoDensityMap.hh rename to source/visualization/gMocren/include/private/G4GMocrenFileCTtoDensityMap.hh diff --git a/source/visualization/gMocren/include/G4GMocrenFileSceneHandler.hh b/source/visualization/gMocren/include/private/G4GMocrenFileSceneHandler.hh similarity index 100% rename from source/visualization/gMocren/include/G4GMocrenFileSceneHandler.hh rename to source/visualization/gMocren/include/private/G4GMocrenFileSceneHandler.hh diff --git a/source/visualization/gMocren/include/G4GMocrenFileViewer.hh b/source/visualization/gMocren/include/private/G4GMocrenFileViewer.hh similarity index 100% rename from source/visualization/gMocren/include/G4GMocrenFileViewer.hh rename to source/visualization/gMocren/include/private/G4GMocrenFileViewer.hh diff --git a/source/visualization/gMocren/include/G4GMocrenIO.hh b/source/visualization/gMocren/include/private/G4GMocrenIO.hh similarity index 100% rename from source/visualization/gMocren/include/G4GMocrenIO.hh rename to source/visualization/gMocren/include/private/G4GMocrenIO.hh diff --git a/source/visualization/gMocren/include/G4GMocrenMessenger.hh b/source/visualization/gMocren/include/private/G4GMocrenMessenger.hh similarity index 100% rename from source/visualization/gMocren/include/G4GMocrenMessenger.hh rename to source/visualization/gMocren/include/private/G4GMocrenMessenger.hh diff --git a/source/visualization/gMocren/include/G4GMocrenTouchable.hh b/source/visualization/gMocren/include/private/G4GMocrenTouchable.hh similarity index 100% rename from source/visualization/gMocren/include/G4GMocrenTouchable.hh rename to source/visualization/gMocren/include/private/G4GMocrenTouchable.hh diff --git a/source/visualization/gMocren/sources.cmake b/source/visualization/gMocren/sources.cmake index 7cf672703a7..7ccb854bfda 100644 --- a/source/visualization/gMocren/sources.cmake +++ b/source/visualization/gMocren/sources.cmake @@ -4,6 +4,7 @@ geant4_add_module(G4GMocren PUBLIC_HEADERS G4GMocrenFile.hh + PRIVATE_HEADERS G4GMocrenFileCTtoDensityMap.hh G4GMocrenFileSceneHandler.hh G4GMocrenFileViewer.hh @@ -20,14 +21,14 @@ geant4_add_module(G4GMocren geant4_module_link_libraries(G4GMocren PUBLIC - G4hits - G4intercoms G4vis_management + PRIVATE + G4csg G4geometrymng G4globman - PRIVATE G4graphics_reps - G4csg + G4hits + G4intercoms G4modeling G4materials G4navigation diff --git a/source/visualization/management/GNUmakefile b/source/visualization/management/GNUmakefile deleted file mode 100644 index 9fc8320010c..00000000000 --- a/source/visualization/management/GNUmakefile +++ /dev/null @@ -1,51 +0,0 @@ -# ------------------------------------------------------------- -# GNUmakefile for visualization library. John Allison, 5/7/95. - -name := G4vis_management - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -# For debug mode -# CPPFLAGS += -DG4DEBUG_VIS_MANAGEMENT - -GLOBLIBS = libG4modeling.lib libG4tools.lib -GLOBLIBS += libG4run.lib libG4event.lib -GLOBLIBS += libG4tracking.lib libG4processes.lib libG4digits_hits.lib -GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk -include $(G4INSTALL)/config/G4VIS_BUILD.gmk - -CPPFLAGS += -I$(G4BASE)/visualization/management/include -CPPFLAGS += -I$(G4BASE)/visualization/modeling/include -CPPFLAGS += -I$(G4BASE)/externals/g4tools/include -CPPFLAGS += -I$(G4BASE)/graphics_reps/include -CPPFLAGS += -I$(G4BASE)/global/management/include -CPPFLAGS += -I$(G4BASE)/global/HEPGeometry/include -CPPFLAGS += -I$(G4BASE)/global/HEPRandom/include -CPPFLAGS += -I$(G4BASE)/global/HEPNumerics/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/CSG/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/specific/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/Boolean/include -CPPFLAGS += -I$(G4BASE)/geometry/management/include -CPPFLAGS += -I$(G4BASE)/geometry/volumes/include -CPPFLAGS += -I$(G4BASE)/geometry/navigation/include -CPPFLAGS += -I$(G4BASE)/geometry/magneticfield/include -CPPFLAGS += -I$(G4BASE)/intercoms/include -CPPFLAGS += -I$(G4BASE)/tracking/include -CPPFLAGS += -I$(G4BASE)/digits_hits/hits/include -CPPFLAGS += -I$(G4BASE)/particles/management/include -CPPFLAGS += -I$(G4BASE)/materials/include -CPPFLAGS += -I$(G4BASE)/run/include -CPPFLAGS += -I$(G4BASE)/tasking/include -CPPFLAGS += -I$(G4BASE)/event/include -CPPFLAGS += -I$(G4BASE)/track/include -CPPFLAGS += -I$(G4BASE)/processes/management/include -CPPFLAGS += -I$(G4BASE)/digits_hits/utils/include -CPPFLAGS += -I$(G4BASE)/digits_hits/digits/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/visualization/management/History b/source/visualization/management/History index 93d8cd48302..64a7f170101 100644 --- a/source/visualization/management/History +++ b/source/visualization/management/History @@ -6,6 +6,194 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- +## 2023-06-16 John Allison (visman-V11-01-15) +- G4VisExecutive.icc: + - Temporary fix to divert OGL to TSG for Qt6. + +## 2023-06-06 John Allison (visman-V11-01-14) +- G4VisCommandsTouchable; Introduce /vis/touchable/twinkle. + +## 2023-06-01 John Allison (visman-V11-01-13) +- Rework issue of implicit type conversion. +- Improve layout in G4VViewer::SceneTreeScene::FindOrInsertModel. + - (No code changes.) + +## 2023-05-29 Guy Barrand (visman-v11-01-12) +- G4VisExecutive.icc: declare TOOLSSG_[X11,XT,WINDOWS,QT]_ZB drivers. + +## 2023-05-23 Gabriele Cosmo (visman-V11-01-11) +- Fixed compilation warning for implicit type conversion on macOS/XCode>=14.1. + +## 2023-05-09 John Allison (visman-V11-01-10) +- Coworks: greps-V11-01-04 and interfaces-V11-01-15. +- New scene tree: Implement expand and collapse of touchables. + - Expand only to depth 2 - thereafter sub-trees are collapsed. + - When the scene tree is expanded or collapsed it is remembered in + the viewer-side scene tree and may be propagated to other viewers. +- G4VViewer.hh/cc: + - Augment SceneTreeScene::FindOrInsertTouchable to handle depth of descent. + +## 2023-05-02 John Allison (visman-V11-01-09) +- Coworks: modeling-V11-01-04. +- These two tags implement "generic cutaways"...finally...after 20 years!!! + - It relies on the Boolean Processor (graphics_reps/src/BooleanProcessor.src), + which handles the Boolean operations on polyhedral (G4Polyhedron) + representations of solids. It is well known that this has its + limitations, and the mistake, in the past, has been to ask too much of it. + The most demanding task is cutaways, which attempts to mimic the effect + of OpenGL clipping planes by using Boolean intersections and/or + subtraction of a "cutaway solid". This cutaway solid can itself be the + Boolean combination of up to 3 simple solids (boxes) to deal with up to + 3 "cutaway planes". It then goes forward in the G4PhysicalVolumeModel to a + further Boolean operation on the volumes (touchables) of the detector + geometry, which themselves might also be Boolean solids. + - The most demanding case is the union of the result of 3 cutaway planes. + The key breakthrough in this tag is to make a subtractor of the + intersection of the *inverted* cutaways instead of an intersector of the + union of normal cutaways. ("Inverted cutaway" means + cutting away a*x+b*y+c*z+d>0, "normal" means a*x+b*y+c*z+d<0.) Although + logically equivalent, the former is much less demanding because the + shape of an intersection is invariably much simpler that the shape of + a union - at least that's how it seems to be for the case of 3 boxes. + - This work was triggered by an initial attempt by a Geant4 user, + Pooria Heidary. Demanding tests showed that there needed to be careful + checking of the validity of the results of the Boolean operations - + Evgueni Tcherniaev has made a big contribution there. Pooria will + hardly recognise the code compared to that submitted in the GitHub pull + request after these tests and other checks have been added. Hopefully + this update is now well tested and robust. + - It means that clips, sections and cutaways will now be available to *all* + viewers. +- G4VSceneHandler.cc: + - RequestPrimitives: Improve test for invalid Boolean solid. + - Algorithm by Evgueni Tcherniaev. + - CreateSectionSolid and CreateCutawaySolid: Improve algorithms. + - Algorithms suggested by Evgueni Tcherniaev. + +## 2023-04-30 John Allison (visman-V11-01-08) +- G4VSceneHandler: + - Bug fix: Protect material pointer used to name G4Mesh item. + - If null, use name of container. + - In particular, avoids crash for a G4Mesh is a parallel world. + +## 2023-04-28 John Allison (visman-V11-01-07) +- G4VViewer::SceneTreeScene::FindOrInsertTouchable: + - Coverity fix - protect pPVModel pointer. + +## 2023-04-25 John Allison (visman-V11-01-06) +- G4VisCommandsTouchableSet.cc: + - /vis/touchable/set/visibility: + - Add one-time warning about circumstances in which the command may + appear not to work. + +## 2023-04-23 John Allison (visman-V11-01-05) +- Correct Special Mesh Rendering Option default. +- G4ViewParameters.cc: + - Initialise fSpecialMeshRenderingOption(meshAsDefault). +- G4VisCommandsViewerSet.cc: + - /vis/viewer/set/specialMeshRenderingOption: + - SetDefaultValue("default"); + +## 2023-04-14 John Allison (visman-V11-01-04) +- Co-working: greps-V11-01-03, interfaces-V11-01-11, opengl-V11-01-06, + openinventor-V11-01-04, vis_toolssg-V11-01-05. +- New Scene Tree Phase 2 - first implementation of a no-frills GUI-side + interactive scene tree. + - Works with touchables - a touchable is a physical volume as rolled out + by the geometry hierarchy. + - You can change the visibility of a touchable. + - Colour, transparency, etc., will be implemented in a future MR. + - Providing you are using a scene-tree-enabled interactive session (only + the Qt GUI at present), it works with any graphics driver...except OpenGL. + - OpenGL for the time being uses its existing interactive scene tree. + - You can prepare a view with a graphical driver, such as + TSG, OI or Vtk, and transfer it to Ray Tracer, TOOLSSG_OFFSCREEN, etc., + simply with `/vis/open RayTracer`, etc. +- G4VVisCommand: + - Add static G4SceneTreeItem fExistingSceneTree. + - Used for "remembering" scene tree of previous viewer. +- G4VisCommandsSceneHandler: + - If there is an existing viewer, store scene tree. +- G4VisCommandsViewer: + - If there is an existing viewer, store scene tree. + - Copy existing scene tree to the new viewer. + - /vis/viewer/select: Call UpdateGUISceneTree to ensure the scene tree + of the newly selected viewer is in sync. +- G4VViewer: + - Improve G4VViewer::SceneTreeScene::FindOrInsertTouchable. + - Simplify ghost-touchable transition. + - Protect vis attributes pointer. + - Add "utility" function UpdateGUISceneTree. + - Calls GUI->UpdateSceneTree if session is interactive: +``` +void G4VViewer::UpdateGUISceneTree() +{ + G4UImanager* UI = G4UImanager::GetUIpointer(); + auto uiWindow = dynamic_cast(UI->GetG4UIWindow()); + if (uiWindow) uiWindow->UpdateSceneTree(fSceneTree); +} +``` +- sources.cmake: + - Add G4interfaces to geant4_module_link_libraries. + +## 2023-04-07 Stewart Boogert (visman-v11-01-03) +- Default special mesh rendering for viewers which can render all objects + +## 2023-04-07 John Allison (visman-V11-01-02) +- Co-works with: greps-V11-01-02. +- Improve vis-side scene tree creation and maintenance. +- G4VViewer::SceneTreeScene: + - Simplify - remove unnecessary overrides. + - Fix bugs in scene tree building and add some features. + - Add "tags" that will become the identifier in the GUI tree. +- G4VSceneHandler::ProcessScene: + - Simplify scene tree processing. +- G4VVisCommand::RefreshIfRequired: + - Call viewer->UpdateGUISceneTree() after refreshing. + - This ensures the GUI-side scene tree and vis-side scene tree + are in sync. + +## 2023-03-28 John Allison (visman-V11-01-01) +- Co-works with: greps-V11-01-01, interfaces-V11-01-10, modeling-V11-01-02. +- Introduce scene tree in G4VViewer. + - The scene tree is a tree of G4SceneTreeItem objects (see graphics-reps). + - Its root is a data member fSceneTree of all viewers by virtue of + G4VViewer inheritance, + - G4SceneTreeItem is an aggregate of data members that represent + properties of objects in the scene (G4Scene). Its data members are + low-level types - G4String, G4VisAttributes and G4AttDef/Value - so + that it can be used across categories, avoiding coupling. + - The root item has children that represent the models (G4VModel + sub-classes) in the scene. + - For a G4PhysicalVolumeModel (detector components), its children and + children's children, etc., imitate the geometry hierarchy of that + model. These descendants are called "touchables". + - There may be more than one G4PhysicalVolumeModel, depending how + the user creates his/her scene. + - The scene tree is reviewed, and updated if necessary, at every pass + of G4VSceneHandler::ProcessScene. This is called a "kernel visit". + - A kernel visit is triggered by some vis commands (e.g., + /vis/viewer/rebuild) and by a viewer if it deems necessary. For + example, a kernel visit may not be required for a rotation, zoom, etc., + but required for a change from surface to wireframe. + - The idea is that the scene tree can be passed to a GUI, the GUI can + create a tree widget, and interactions with it raise UI commands such as + /vis/scene/activateModel, /vis/set/touchable and /vis/touchable/set/... + The viewer decides if this requires a kernel visit, otherwise it + must update fSceneTree itself (utilities are provided - + G4VViewer::TouchableSetVisibility/Colour). +- G4VViewer: + - Add scene tree and related functionality. +- G4VSceneHandler::ProcessScene: + - Add code to build scene tree. + +## 2022-12-31 John Allison (visman-V11-01-00) +- Clean up G4VUserVisAction: + - The central pure virtual Draw() method is not intended to be called + directly - see longer explanation in G4VUserVisAction.hh - so make + it protected (more hygienic). + - Improve comments in G4VUserVisAction.hh. + ## 2022-11-25 Gabriele Cosmo (visman-V11-00-31) - Fixed compilation warning for implicit type conversions on macOS/XCode 14.1. diff --git a/source/visualization/management/include/G4VSceneHandler.hh b/source/visualization/management/include/G4VSceneHandler.hh index 50947131360..e095b577b4c 100644 --- a/source/visualization/management/include/G4VSceneHandler.hh +++ b/source/visualization/management/include/G4VSceneHandler.hh @@ -354,11 +354,11 @@ protected: public: PseudoSceneFor3DRectMeshPositions (G4PhysicalVolumeModel* pvModel // input - , G4int depth // input...the following are outputs by reference + , const G4Mesh* pMesh // input...the following are outputs by reference , std::multimap& positionByMaterial , std::map& nameAndVisAttsByMaterial) : fpPVModel(pvModel) - , fDepth(depth) + , fpMesh(pMesh) , fPositionByMaterial(positionByMaterial) , fNameAndVisAttsByMaterial(nameAndVisAttsByMaterial) {} @@ -369,7 +369,7 @@ protected: // Do nothing if uninteresting solids found, e.g., the container if not marked invisible. } G4PhysicalVolumeModel* fpPVModel; - G4int fDepth; + const G4Mesh* fpMesh; std::multimap& fPositionByMaterial; std::map& fNameAndVisAttsByMaterial; }; @@ -378,11 +378,11 @@ protected: public: PseudoSceneForTetVertices (G4PhysicalVolumeModel* pvModel // input - , G4int depth // input...the following are outputs by reference + , const G4Mesh* pMesh // input...the following are outputs by reference , std::multimap>& verticesByMaterial , std::map& nameAndVisAttsByMaterial) : fpPVModel(pvModel) - , fDepth(depth) + , fpMesh(pMesh) , fVerticesByMaterial(verticesByMaterial) , fNameAndVisAttsByMaterial(nameAndVisAttsByMaterial) {} @@ -393,7 +393,7 @@ protected: // Do nothing if uninteresting solids found, e.g., the container if not marked invisible. } G4PhysicalVolumeModel* fpPVModel; - G4int fDepth; + const G4Mesh* fpMesh; std::multimap>& fVerticesByMaterial; std::map& fNameAndVisAttsByMaterial; }; diff --git a/source/visualization/management/include/G4VUserVisAction.hh b/source/visualization/management/include/G4VUserVisAction.hh index 4c7f2f23acd..fb42b05f0e5 100644 --- a/source/visualization/management/include/G4VUserVisAction.hh +++ b/source/visualization/management/include/G4VUserVisAction.hh @@ -24,45 +24,50 @@ // ******************************************************************** // // -// -// // Class Description: // -// G4VUserVisAction is added to the scene by the command -// /vis/scene/add/userAction, which instantiates a G4CallbackModel to -// add to the RunDurationModels. Thus the pure virtual Draw() method +// G4VUserVisAction is brought into effect by the command +// /vis/scene/add/userAction. The vis manager instantiates a +// G4CallbackModel when the vis action is registered, and adds +// it to the scene. The pure virtual Draw() method // is invoked whenever the viewer needs to "visit the kernel", e.g., // to remake its graphical database, if any, or simply to refresh the -// screen. operator() is defined to satisfy the template +// screen. It is not intended to be called directly. It is called +// via the operator() which is defined to satisfy the template // G4CallbackModel. // -// See the User Guide for Application Developers, Section 8.8.7 and 8.8.8. - +// A concrete Draw() method would normally make use of the Draw() methods +// of the vis manager, e.g: +// G4VVisManager* pVisManager = G4VVisManager::GetConcreteInstance(); +// if (pVisManager) { +// pVisManager->Draw(G4Box("box",2*cm,2*cm,2*cm), +// G4VisAttributes(G4Colour(1,1,0))); +// ... +// but it can also use pointers fpSceneHandler and pMP that give it +// direct access to the current scene handler and modeling parameters +// for more advanced use. +// +// See the User Guide for Application Developers. #ifndef G4VUSERVISACTION_HH #define G4VUSERVISACTION_HH -#include "G4Transform3D.hh" - class G4VGraphicsScene; class G4ModelingParameters; class G4VUserVisAction { public: // With description - G4VUserVisAction() - : fpSceneHandler(nullptr) - , fpMP(nullptr) - {} + G4VUserVisAction(): fpSceneHandler(nullptr), fpMP(nullptr) {} virtual ~G4VUserVisAction() {} - virtual void Draw() = 0; void operator()(G4VGraphicsScene& scene, const G4ModelingParameters* pMP) { fpSceneHandler = &scene; fpMP = pMP; Draw(); } protected: + virtual void Draw() = 0; G4VGraphicsScene* fpSceneHandler; const G4ModelingParameters* fpMP; }; diff --git a/source/visualization/management/include/G4VViewer.hh b/source/visualization/management/include/G4VViewer.hh index e6dc21ce831..a5d8be0d3df 100644 --- a/source/visualization/management/include/G4VViewer.hh +++ b/source/visualization/management/include/G4VViewer.hh @@ -37,8 +37,14 @@ #include "globals.hh" +#include "G4SceneTreeItem.hh" + #include "G4ViewParameters.hh" #include "G4PhysicalVolumeModel.hh" +#include "G4PseudoScene.hh" + +#include +#include class G4VSceneHandler; @@ -131,6 +137,57 @@ public: // With description virtual void SwitchToMasterThread (); #endif + ////////////////////////////////////////////////////////////// + // Stuff for scene tree. + /** + - The scene tree is a tree of G4SceneTreeItem objects (see graphics-reps). + - Its root is a data member fSceneTree of all viewers by virtue of + G4VViewer inheritance, + - G4SceneTreeItem is an aggregate of data members that represent + properties of objects in the scene (G4Scene). Its data members are + low-level types - G4String, G4VisAttributes and G4AttDef/Value - so + that it can be used across categories, avoiding coupling. + - The root item has children that represent the models (G4VModel + sub-classes) in the scene. + - For a G4PhysicalVolumeModel (detector components), its children and + children's children, etc., imitate the geometry hierarchy of that + model. These descendants are called "touchables". + - There may be more than one G4PhysicalVolumeModel, depending how + the user creates his/her scene. + - The scene tree is reviewed, and updated if necessary, at every pass + of G4VSceneHandler::ProcessScene. This is called a "kernel visit". + - A kernel visit is triggered by some vis commands (e.g., + /vis/viewer/rebuild) and by a viewer if it deems necessary. For + example, a kernel visit may not be required for a rotation, zoom, etc., + but required for a change from surface to wireframe. + - The idea is that the scene tree can be passed to a GUI, the GUI can + create a tree widget, and interactions with it raise UI commands such as + /vis/scene/activateModel, /vis/set/touchable and /vis/touchable/set/... + The viewer decides if this requires a kernel visit, otherwise it + must update fSceneTree itself (utilities are provided - + G4VViewer::TouchableSetVisibility/Colour). + */ + class SceneTreeScene: public G4PseudoScene { + // G4PhysicalVolumeModel sends touchables to this scene + public: + SceneTreeScene() = default; + ~SceneTreeScene() = default; + void SetViewer(G4VViewer* pViewer) {fpViewer = pViewer;} + void SetModel(G4VModel* pModel); + private: + void ProcessVolume(const G4VSolid& solid) override; + std::list::iterator FindOrInsertModel + (const G4String& modelType,const G4String& modelID); + std::list::iterator FindOrInsertTouchable + (const G4String& modelID, G4SceneTreeItem& mother, + G4int depth, const G4String& partialPathString, const G4String& fullPathString); + G4VViewer* fpViewer = nullptr; + G4VModel* fpModel = nullptr; + }; + SceneTreeScene& AccessSceneTreeScene() {return fSceneTreeScene;} + G4SceneTreeItem& AccessSceneTree() {return fSceneTree;} + void UpdateGUISceneTree(); // A utility + ////////////////////////////////////////////////////////////// // Access functions. const G4String& GetName () const; @@ -221,6 +278,8 @@ protected: G4ViewParameters fDefaultVP; // Default view parameters. G4double fKernelVisitElapsedTimeSeconds = 999.; // Default to a large number // Note: fKernelVisitElapsedTimeSeconds is measured in ProcessView(). + SceneTreeScene fSceneTreeScene; // G4PhysicalVolumeModel sends touchables to this scene + G4SceneTreeItem fSceneTree; ////////////////////////////////////////////////////////////// // Other parameters. diff --git a/source/visualization/management/include/G4VVisCommand.hh b/source/visualization/management/include/G4VVisCommand.hh index b85a7ef5251..b5bef8d7320 100644 --- a/source/visualization/management/include/G4VVisCommand.hh +++ b/source/visualization/management/include/G4VVisCommand.hh @@ -39,6 +39,8 @@ #include "G4VMarker.hh" #include "G4ModelingParameters.hh" #include "G4PhysicalVolumesSearchScene.hh" +#include "G4SceneTreeItem.hh" + #include class G4UIcommand; @@ -165,6 +167,7 @@ protected: // handler. static G4bool fThereWasAViewer; // True if there was a viewer static G4ViewParameters fExistingVP; // Its view parameters + static G4SceneTreeItem fExistingSceneTree; // Its scene tree }; #endif diff --git a/source/visualization/management/include/G4ViewParameters.hh b/source/visualization/management/include/G4ViewParameters.hh index bda125478ab..61edbf0bd5e 100644 --- a/source/visualization/management/include/G4ViewParameters.hh +++ b/source/visualization/management/include/G4ViewParameters.hh @@ -101,7 +101,7 @@ public: // With description enum CutawayMode { cutawayUnion, // Union (addition) of result of each cutaway plane. - cutawayIntersection // Intersection (multiplication) " . + cutawayIntersection // Intersection (multiplication). }; enum RotationStyle { @@ -110,6 +110,7 @@ public: // With description }; enum SMROption { // Special Mesh Rendering Option + meshAsDefault, meshAsDots, meshAsSurfaces }; diff --git a/source/visualization/management/include/G4VisCommandsTouchable.hh b/source/visualization/management/include/G4VisCommandsTouchable.hh index 67cff7c3403..c844bac4adb 100644 --- a/source/visualization/management/include/G4VisCommandsTouchable.hh +++ b/source/visualization/management/include/G4VisCommandsTouchable.hh @@ -53,6 +53,7 @@ private: G4UIcommand* fpCommandFindPath; G4UIcmdWithoutParameter* fpCommandLocalAxes; G4UIcmdWithABool* fpCommandShowExtent; + G4UIcmdWithoutParameter* fpCommandTwinkle; G4UIcmdWithABool* fpCommandVolumeForField; }; diff --git a/source/visualization/management/include/G4VisExecutive.icc b/source/visualization/management/include/G4VisExecutive.icc index 237d0718c53..b7570add798 100644 --- a/source/visualization/management/include/G4VisExecutive.icc +++ b/source/visualization/management/include/G4VisExecutive.icc @@ -93,18 +93,34 @@ #include "G4ToolsSGX11GLES.hh" // no_geant4_module_check #endif +#ifdef G4VIS_USE_TOOLSSG_X11_ZB +#include "G4ToolsSGX11ZB.hh" // no_geant4_module_check +#endif + #ifdef G4VIS_USE_TOOLSSG_WINDOWS_GLES #include "G4ToolsSGWindowsGLES.hh" // no_geant4_module_check #endif +#ifdef G4VIS_USE_TOOLSSG_WINDOWS_ZB +#include "G4ToolsSGWindowsZB.hh" // no_geant4_module_check +#endif + #ifdef G4VIS_USE_TOOLSSG_XT_GLES #include "G4ToolsSGXtGLES.hh" // no_geant4_module_check #endif +#ifdef G4VIS_USE_TOOLSSG_XT_ZB +#include "G4ToolsSGXtZB.hh" // no_geant4_module_check +#endif + #ifdef G4VIS_USE_TOOLSSG_QT_GLES #include "G4ToolsSGQtGLES.hh" // no_geant4_module_check #endif +#ifdef G4VIS_USE_TOOLSSG_QT_ZB +#include "G4ToolsSGQtZB.hh" // no_geant4_module_check +#endif + #ifdef G4VIS_USE_VTK #include "G4Vtk.hh" // no_geant4_module_check #endif @@ -113,6 +129,10 @@ #include "G4VtkQt.hh" // no_geant4_module_check #endif +#if defined (G4VIS_USE_OPENGLQT) || (G4VIS_USE_TOOLSSG_QT_GLES) +#include +#endif + // The inline keyword prevents the compiler making an external // reference even though they cannot actually be inlined since they // are virtual functions. This prevents a "multiple definition" error @@ -148,6 +168,7 @@ G4VisExecutive::RegisterGraphicsSystems () { // super-abbreviated names and fallback names where approproiate. #ifdef G4VIS_USE_OPENGLQT +#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) G4VGraphicsSystem* ogliqt = new G4OpenGLImmediateQt; G4VGraphicsSystem* oglsqt = new G4OpenGLStoredQt; RegisterGraphicsSystem(ogliqt); @@ -156,6 +177,7 @@ G4VisExecutive::RegisterGraphicsSystems () { oglsqt->AddNickname("OGL"); oglsqt->AddNickname("OGLS"); #endif +#endif #ifdef G4VIS_USE_OPENGLXM G4VGraphicsSystem* oglixm = new G4OpenGLImmediateXm; @@ -252,6 +274,12 @@ G4VisExecutive::RegisterGraphicsSystems () { #endif #endif +#ifdef G4VIS_USE_TOOLSSG_X11_ZB + G4VGraphicsSystem* tsg_x11_zb = new G4ToolsSGX11ZB; + RegisterGraphicsSystem(tsg_x11_zb); + tsg_x11_zb->AddNickname("TSGX11ZB"); +#endif + #ifdef G4VIS_USE_TOOLSSG_XT_GLES G4VGraphicsSystem* tsg_xt_gles = new G4ToolsSGXtGLES; RegisterGraphicsSystem(tsg_xt_gles); @@ -261,19 +289,40 @@ G4VisExecutive::RegisterGraphicsSystems () { #endif #endif +#ifdef G4VIS_USE_TOOLSSG_XT_ZB + G4VGraphicsSystem* tsg_xt_zb = new G4ToolsSGXtZB; + RegisterGraphicsSystem(tsg_xt_zb); + tsg_xt_zb->AddNickname("TSGXtZB"); +#endif + #ifdef G4VIS_USE_TOOLSSG_QT_GLES G4VGraphicsSystem* tsg_qt_gles = new G4ToolsSGQtGLES; RegisterGraphicsSystem(tsg_qt_gles); tsg_qt_gles->AddNickname("TSGQt"); #endif +#ifdef G4VIS_USE_TOOLSSG_QT_ZB + G4VGraphicsSystem* tsg_qt_zb = new G4ToolsSGQtZB; + RegisterGraphicsSystem(tsg_qt_zb); + tsg_qt_zb->AddNickname("TSGQtZB"); +#endif + #ifdef G4VIS_USE_TOOLSSG_WINDOWS_GLES G4VGraphicsSystem* tsg_windows_gles = new G4ToolsSGWindowsGLES; RegisterGraphicsSystem(tsg_windows_gles); #endif +#ifdef G4VIS_USE_TOOLSSG_WINDOWS_ZB + G4VGraphicsSystem* tsg_windows_zb = new G4ToolsSGWindowsZB; + RegisterGraphicsSystem(tsg_windows_zb); +#endif + #ifdef G4VIS_USE_TOOLSSG_QT_GLES tsg_qt_gles->AddNickname("TSG"); +# if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) + G4cout << " Qt6: Asking ToolsSG to stand in for OpenGL" << G4endl; + tsg_qt_gles->AddNickname("OGL"); +# endif #elif defined(G4VIS_USE_TOOLSSG_XT_GLES) tsg_xt_gles->AddNickname("TSG"); #elif defined(G4VIS_USE_TOOLSSG_X11_GLES) diff --git a/source/visualization/management/sources.cmake b/source/visualization/management/sources.cmake index 72d2ea18349..3cdfcd702eb 100644 --- a/source/visualization/management/sources.cmake +++ b/source/visualization/management/sources.cmake @@ -96,7 +96,8 @@ geant4_module_link_libraries(G4vis_management G4run G4navigation G4digits - G4heprandom) + G4heprandom + G4UIcore) if(GEANT4_BUILD_MULTITHREADED) geant4_module_link_libraries(G4vis_management PRIVATE G4volumes) diff --git a/source/visualization/management/src/G4VSceneHandler.cc b/source/visualization/management/src/G4VSceneHandler.cc index d133673a6ef..7dc0c19ffd9 100644 --- a/source/visualization/management/src/G4VSceneHandler.cc +++ b/source/visualization/management/src/G4VSceneHandler.cc @@ -68,6 +68,7 @@ #include "G4DisplacedSolid.hh" #include "G4UnionSolid.hh" #include "G4IntersectionSolid.hh" +#include "G4SubtractionSolid.hh" #include "G4LogicalVolume.hh" #include "G4PhysicalVolumeModel.hh" #include "G4ModelingParameters.hh" @@ -88,6 +89,7 @@ #include "G4Transform3D.hh" #include "G4AttHolder.hh" #include "G4AttDef.hh" +#include "G4SceneTreeItem.hh" #include "G4VVisCommand.hh" #include "G4PhysicalConstants.hh" #include "G4SystemOfUnits.hh" @@ -526,29 +528,58 @@ void G4VSceneHandler::RequestPrimitives (const G4VSolid& solid) { // Sometimes solids that have no substance get requested. They may // be part of the geometry tree but have been "spirited away", for - // example by a Boolean subtraction in wich the original volume - // is entirely inside the subtractor. + // example by a Boolean subtraction in which the original volume + // is entirely inside the subtractor or an intersection in which + // the original volume is entirely outside the intersector. // The problem is that the Boolean Processor still returns a // polyhedron in these cases (IMHO it should not), so the // workaround is to return before the damage is done. + // Algorithm by Evgueni Tcherniaev auto pSolid = &solid; auto pBooleanSolid = dynamic_cast(pSolid); if (pBooleanSolid) { G4ThreeVector bmin, bmax; pBooleanSolid->BoundingLimits(bmin, bmax); G4bool isGood = false; - for (G4int i=0; i<100000; ++i) { - G4double x = bmin.x() + (bmax.x() - bmin.x())*G4QuickRand(); - G4double y = bmin.y() + (bmax.y() - bmin.y())*G4QuickRand(); - G4double z = bmin.z() + (bmax.z() - bmin.z())*G4QuickRand(); - if (pBooleanSolid->Inside(G4ThreeVector(x,y,z)) == kInside) { - isGood = true; - break; + if (dynamic_cast(pBooleanSolid)) { + auto ptrB = pBooleanSolid->GetConstituentSolid(1); + for (G4int i=0; i<10; ++i) { + G4double x = bmin.x() + (bmax.x() - bmin.x())*G4QuickRand(); + G4double y = bmin.y() + (bmax.y() - bmin.y())*G4QuickRand(); + G4double z = bmin.z() + (bmax.z() - bmin.z())*G4QuickRand(); + if (ptrB->Inside(G4ThreeVector(x,y,bmin.z())) != kInside) { isGood = true; break; } + if (ptrB->Inside(G4ThreeVector(x,y,bmax.z())) != kInside) { isGood = true; break; } + if (ptrB->Inside(G4ThreeVector(x,bmin.y(),z)) != kInside) { isGood = true; break; } + if (ptrB->Inside(G4ThreeVector(x,bmax.y(),z)) != kInside) { isGood = true; break; } + if (ptrB->Inside(G4ThreeVector(bmin.x(),y,z)) != kInside) { isGood = true; break; } + if (ptrB->Inside(G4ThreeVector(bmax.x(),y,z)) != kInside) { isGood = true; break; } + } + } else if (dynamic_cast(pBooleanSolid)) { + auto ptrB = pBooleanSolid->GetConstituentSolid(1); + for (G4int i=0; i<10; ++i) { + G4double x = bmin.x() + (bmax.x() - bmin.x())*G4QuickRand(); + G4double y = bmin.y() + (bmax.y() - bmin.y())*G4QuickRand(); + G4double z = bmin.z() + (bmax.z() - bmin.z())*G4QuickRand(); + if (ptrB->Inside(G4ThreeVector(x,y,bmin.z())) == kInside) { isGood = true; break; } + if (ptrB->Inside(G4ThreeVector(x,y,bmax.z())) == kInside) { isGood = true; break; } + if (ptrB->Inside(G4ThreeVector(x,bmin.y(),z)) == kInside) { isGood = true; break; } + if (ptrB->Inside(G4ThreeVector(x,bmax.y(),z)) == kInside) { isGood = true; break; } + if (ptrB->Inside(G4ThreeVector(bmin.x(),y,z)) == kInside) { isGood = true; break; } + if (ptrB->Inside(G4ThreeVector(bmax.x(),y,z)) == kInside) { isGood = true; break; } + } + } + if (!isGood) + { + for (G4int i=0; i<10000; ++i) { + G4double x = bmin.x() + (bmax.x() - bmin.x())*G4QuickRand(); + G4double y = bmin.y() + (bmax.y() - bmin.y())*G4QuickRand(); + G4double z = bmin.z() + (bmax.z() - bmin.z())*G4QuickRand(); + if (pBooleanSolid->Inside(G4ThreeVector(x,y,z)) == kInside) { isGood = true; break; } } } if (!isGood) return; } - + const G4ViewParameters::DrawingStyle style = GetDrawingStyle(fpVisAttribs); const G4ViewParameters& vp = fpViewer->GetViewParameters(); @@ -684,6 +715,9 @@ void G4VSceneHandler::ProcessScene() G4cout << "Traversing scene data..." << G4endl; } + // Reset visibility of all objects to false - visible objects will then set to true + fpViewer->AccessSceneTree().ResetVisibility(); + BeginModeling(); // Create modeling parameters from view parameters... @@ -695,10 +729,24 @@ void G4VSceneHandler::ProcessScene() { fpModel = runDurationModelList[i].fpModel; fpModel->SetModelingParameters(pMP); - fpModel->DescribeYourselfTo(*this); - // To see the extents of each model represented as wireframe boxes, - // uncomment the next line and DrawExtent in namespace above - // DrawExtent(fpModel); + + // Describe to the current scene handler + fpModel->DescribeYourselfTo(*this); + + // To see the extents of each model represented as wireframe boxes, + // uncomment the next line and DrawExtent in namespace above. + // DrawExtent(fpModel); + + // Enter models in the scene tree, and for PV models, describe + // the model to the scene tree, i.e., enter all the touchables. + auto& sceneTreeScene = fpViewer->AccessSceneTreeScene(); + sceneTreeScene.SetViewer(fpViewer); + sceneTreeScene.SetModel(fpModel); + if (dynamic_cast(fpModel)) { + fpModel->DescribeYourselfTo(sceneTreeScene); + } + + // Reset modeling parameters pointer fpModel->SetModelingParameters(0); } } @@ -729,6 +777,8 @@ void G4VSceneHandler::ProcessScene() if(runManager) { const G4Run* run = runManager->GetCurrentRun(); + // Draw a null event in order to pick up models for the scene tree even before a run + if (run == nullptr) DrawEvent(0); const std::vector* events = run ? run->GetEventVector() : 0; std::size_t nKeptEvents = 0; @@ -797,9 +847,18 @@ void G4VSceneHandler::DrawEvent(const G4Event* event) pMP->SetEvent(event); for (std::size_t i = 0; i < nModels; ++i) { if (EOEModelList[i].fActive) { - fpModel = EOEModelList[i].fpModel; - fpModel -> SetModelingParameters(pMP); - fpModel -> DescribeYourselfTo (*this); + fpModel = EOEModelList[i].fpModel; + fpModel -> SetModelingParameters(pMP); + + // Describe to the current scene handler + fpModel -> DescribeYourselfTo (*this); + + // Enter models in the scene tree + auto& sceneTreeScene = fpViewer->AccessSceneTreeScene(); + sceneTreeScene.SetViewer(fpViewer); + sceneTreeScene.SetModel(fpModel); + + // Reset modeling parameters pointer fpModel -> SetModelingParameters(0); } } @@ -819,9 +878,18 @@ void G4VSceneHandler::DrawEndOfRunModels() for (std::size_t i = 0; i < nModels; ++i) { if (EORModelList[i].fActive) { fpModel = EORModelList[i].fpModel; - fpModel -> SetModelingParameters(pMP); + fpModel -> SetModelingParameters(pMP); + + // Describe to the current scene handler fpModel -> DescribeYourselfTo (*this); - fpModel -> SetModelingParameters(0); + + // Enter models in the scene tree + auto& sceneTreeScene = fpViewer->AccessSceneTreeScene(); + sceneTreeScene.SetViewer(fpViewer); + sceneTreeScene.SetModel(fpModel); + + // Reset modeling parameters pointer + fpModel -> SetModelingParameters(0); } } fpModel = 0; @@ -887,6 +955,13 @@ G4ModelingParameters* G4VSceneHandler::CreateModelingParameters () pModelingParams->SetExplodeCentre(vp.GetExplodeCentre()); pModelingParams->SetSectionSolid(CreateSectionSolid()); + + if (vp.GetCutawayMode() == G4ViewParameters::cutawayUnion) { + pModelingParams->SetCutawayMode(G4ModelingParameters::cutawayUnion); + } else if (vp.GetCutawayMode() == G4ViewParameters::cutawayIntersection) { + pModelingParams->SetCutawayMode(G4ModelingParameters::cutawayIntersection); + } + pModelingParams->SetCutawaySolid(CreateCutawaySolid()); // The polyhedron objects are deleted in the modeling parameters destructor. @@ -909,27 +984,14 @@ G4DisplacedSolid* G4VSceneHandler::CreateSectionSolid() G4double safe = radius + fpScene->GetExtent().GetExtentCentre().mag(); G4VSolid* sectionBox = new G4Box("_sectioner", safe, safe, 1.e-5 * radius); // Thin in z-plane... - const G4Normal3D originalNormal(0,0,1); // ...so this is original normal. const G4Plane3D& sp = vp.GetSectionPlane (); - const G4double& a = sp.a(); - const G4double& b = sp.b(); - const G4double& c = sp.c(); - const G4double& d = sp.d(); - const G4Normal3D newNormal(a,b,c); - - G4Transform3D requiredTransform; - // Rotate - if (newNormal != originalNormal) { - const G4double& angle = std::acos(newNormal.dot(originalNormal)); - const G4Vector3D& axis = originalNormal.cross(newNormal); - requiredTransform = G4Rotate3D(angle, axis); - } - // Translate - requiredTransform = requiredTransform * G4TranslateZ3D(-d); + G4ThreeVector normal = sp.normal(); + G4Transform3D requiredTransform = G4Translate3D(normal*(-sp.d())) * + G4Rotate3D(G4ThreeVector(0,0,1), G4ThreeVector(0,1,0), normal, normal.orthogonal()); sectioner = new G4DisplacedSolid - ("_displaced_sectioning_box", sectionBox, requiredTransform); + ("_displaced_sectioning_box", sectionBox, requiredTransform); } return sectioner; @@ -937,69 +999,82 @@ G4DisplacedSolid* G4VSceneHandler::CreateSectionSolid() G4DisplacedSolid* G4VSceneHandler::CreateCutawaySolid() { - const G4ViewParameters& vp = fpViewer->GetViewParameters(); - if (vp.IsCutaway()) { + const auto& vp = fpViewer->GetViewParameters(); + const auto& nPlanes = vp.GetCutawayPlanes().size(); - std::vector cutaway_solids; + if (nPlanes == 0) return nullptr; - G4double radius = fpScene->GetExtent().GetExtentRadius(); - G4double safe = radius + fpScene->GetExtent().GetExtentCentre().mag(); - G4VSolid* cutawayBox = - new G4Box("_cutaway_box", safe, safe, safe); // world box... - - for (int plane_no = 0; plane_no < int(vp.GetCutawayPlanes().size()); plane_no++){ - - const G4Normal3D originalNormal(0,0,1); // ...so this is original normal. - - const G4Plane3D& sp = vp.GetCutawayPlanes()[plane_no]; //]; - const G4double& a = sp.a(); - const G4double& b = sp.b(); - const G4double& c = sp.c(); - const G4double& d = sp.d(); - const G4Normal3D newNormal(-a,-b,-c); // Convention: keep a*x+b*y+c*z+d>=0 - // Not easy to see why the above gives the right convention, but it has been - // arrived at by trial and error to agree with the OpenGL implementation - // of clipping planes. - - G4Transform3D requiredTransform; // Null transform - // Calculate the rotation - // If newNormal is (0,0,1), no need to do anything - // Treat (0,0,-1) as a special case, since cannot define axis in this case - if (newNormal == G4Normal3D(0,0,-1)) { - requiredTransform = G4Rotate3D(pi,G4Vector3D(1,0,0)); - } else if (newNormal != originalNormal) { - const G4double& angle = std::acos(newNormal.dot(originalNormal)); - const G4Vector3D& axis = originalNormal.cross(newNormal); - requiredTransform = G4Rotate3D(angle, axis); - } - // Translation - requiredTransform = requiredTransform * G4TranslateZ3D(d + safe); - cutaway_solids.push_back - (new G4DisplacedSolid("_displaced_cutaway_box", cutawayBox, requiredTransform)); - } + std::vector cutaway_solids; + + G4double radius = fpScene->GetExtent().GetExtentRadius(); + G4double safe = radius + fpScene->GetExtent().GetExtentCentre().mag(); + auto cutawayBox = new G4Box("_cutaway_box", safe, safe, safe); + + // if (vp.GetCutawayMode() == G4ViewParameters::cutawayUnion) we need a subtractor that is + // the intersection of displaced cutaway boxes, displaced so that a subtraction keeps the + // positive values a*x+b*y+c*z+d>0, so we have to invert the normal. This may appear + // "back to front". The parameter "cutawayUnion" means "the union of volumes + // that remain *after* cutaway", because we base the concept on OpenGL cutaway planes and make + // a "union" of what remains by superimposing up to 3 passes - see G4OpenGLViewer::SetView + // and G4OpenGLImmediate/StoredViewer::ProcessView. So we have to create a subtractor + // that is the intersection of inverted cutaway planes. - if (cutaway_solids.size() == 1){ - return (G4DisplacedSolid*) cutaway_solids[0]; - } else if (vp.GetCutawayMode() == G4ViewParameters::cutawayUnion) { - G4UnionSolid* union2 = - new G4UnionSolid("_union_2", cutaway_solids[0], cutaway_solids[1]); - if (cutaway_solids.size() == 2) - return (G4DisplacedSolid*)union2; - else - return (G4DisplacedSolid*) - new G4UnionSolid("_union_3", union2, cutaway_solids[2]); - } else if (vp.GetCutawayMode() == G4ViewParameters::cutawayIntersection){ - G4IntersectionSolid* intersection2 = - new G4IntersectionSolid("_intersection_2", cutaway_solids[0], cutaway_solids[1]); - if (cutaway_solids.size() == 2) - return (G4DisplacedSolid*)intersection2; - else - return (G4DisplacedSolid*) - new G4IntersectionSolid("_intersection_3", intersection2, cutaway_solids[2]); + // Conversely, if (vp.GetCutawayMode() == G4ViewParameters::cutawayIntersection) we have to + // create an intersector that is the intersector of intersected non-inverted cutaway planes. + + for (size_t plane_no = 0; plane_no < nPlanes; plane_no++) + { + const G4Plane3D& sp = vp.GetCutawayPlanes()[plane_no]; + G4Transform3D requiredTransform; + G4ThreeVector normal; + switch (vp.GetCutawayMode()) { + case G4ViewParameters::cutawayUnion: + normal = -sp.normal(); // Invert normal - we want a subtractor + requiredTransform = G4Translate3D(normal*(safe + sp.d())) * + G4Rotate3D(G4ThreeVector(0,0,1), G4ThreeVector(0,1,0), normal, normal.orthogonal()); + break; + case G4ViewParameters::cutawayIntersection: + normal = sp.normal(); + requiredTransform = G4Translate3D(normal*(safe - sp.d())) * + G4Rotate3D(G4ThreeVector(0,0,1), G4ThreeVector(0,1,0), normal, normal.orthogonal()); + break; } + cutaway_solids.push_back + (new G4DisplacedSolid("_displaced_cutaway_box", cutawayBox, requiredTransform)); + } + + if (nPlanes == 1) return (G4DisplacedSolid*) cutaway_solids[0]; + + G4IntersectionSolid *union2 = nullptr, *union3 = nullptr; + G4IntersectionSolid *intersection2 = nullptr, *intersection3 = nullptr; + switch (vp.GetCutawayMode()) { + + case G4ViewParameters::cutawayUnion: + // Here we make a subtractor of intersections of inverted cutaway planes. + union2 = new G4IntersectionSolid("_union_2", cutaway_solids[0], cutaway_solids[1]); + if (nPlanes == 2) return (G4DisplacedSolid*)union2; + else if (nPlanes == 3) { + union3 = new G4IntersectionSolid("_union_3", union2, cutaway_solids[2]); + return (G4DisplacedSolid*)union3; + } + break; + + case G4ViewParameters::cutawayIntersection: + // And here we make an intersector of intersections of non-inverted cutaway planes. + intersection2 + = new G4IntersectionSolid("_intersection_2", cutaway_solids[0], cutaway_solids[1]); + if (nPlanes == 2) return (G4DisplacedSolid*)intersection2; + else if (nPlanes == 3) { + intersection3 + = new G4IntersectionSolid("_intersection_3", intersection2, cutaway_solids[2]); + return (G4DisplacedSolid*)intersection3; + } + break; } - return 0; + G4Exception("G4VSceneHandler::CreateCutawaySolid", "visman107", JustWarning, + "Not programmed for more than 3 cutaway planes"); + return nullptr; } void G4VSceneHandler::LoadAtts(const G4Visible& visible, G4AttHolder* holder) @@ -1220,10 +1295,10 @@ std::ostream& operator << (std::ostream& os, const G4VSceneHandler& sh) { } void G4VSceneHandler::PseudoSceneFor3DRectMeshPositions::AddSolid(const G4Box&) { - if (fpPVModel->GetCurrentDepth() == fDepth) { // Leaf-level cells only + if (fpPVModel->GetCurrentDepth() == fpMesh->GetMeshDepth()) { // Leaf-level cells only const auto& material = fpPVModel->GetCurrentLV()->GetMaterial(); - const auto& name = material->GetName(); - const auto* pVisAtts = fpPVModel->GetCurrentLV()->GetVisAttributes(); + const auto& name = material? material->GetName(): fpMesh->GetContainerVolume()->GetName(); + const auto& pVisAtts = fpPVModel->GetCurrentLV()->GetVisAttributes(); // Get position in world coordinates // As a parameterisation the box is transformed by the current transformation // and its centre, originally by definition at (0,0,0), is now translated. @@ -1236,13 +1311,13 @@ void G4VSceneHandler::PseudoSceneFor3DRectMeshPositions::AddSolid(const G4Box&) } void G4VSceneHandler::PseudoSceneForTetVertices::AddSolid(const G4VSolid& solid) { - if (fpPVModel->GetCurrentDepth() == fDepth) { // Leaf-level cells only + if (fpPVModel->GetCurrentDepth() == fpMesh->GetMeshDepth()) { // Leaf-level cells only // Need to know it's a tet !!!! or implement G4VSceneHandler::AddSolid (const G4Tet&) !!!! try { - const G4Tet& tet = dynamic_cast(solid); + const auto& tet = dynamic_cast(solid); const auto& material = fpPVModel->GetCurrentLV()->GetMaterial(); - const auto& name = material->GetName(); - const auto* pVisAtts = fpPVModel->GetCurrentLV()->GetVisAttributes(); + const auto& name = material? material->GetName(): fpMesh->GetContainerVolume()->GetName(); + const auto& pVisAtts = fpPVModel->GetCurrentLV()->GetVisAttributes(); // Transform into world coordinates if necessary if (fpCurrentObjectTransformation->xx() == 1. && fpCurrentObjectTransformation->yy() == 1. && @@ -1278,6 +1353,8 @@ void G4VSceneHandler::StandardSpecialMeshRendering(const G4Mesh& mesh) case G4Mesh::rectangle: [[fallthrough]]; case G4Mesh::nested3DRectangular: switch (fpViewer->GetViewParameters().GetSpecialMeshRenderingOption()) { + case G4ViewParameters::meshAsDefault: + [[fallthrough]]; case G4ViewParameters::meshAsDots: Draw3DRectMeshAsDots(mesh); // Rectangular 3-deep mesh as dots implemented = true; @@ -1290,6 +1367,8 @@ void G4VSceneHandler::StandardSpecialMeshRendering(const G4Mesh& mesh) break; case G4Mesh::tetrahedron: switch (fpViewer->GetViewParameters().GetSpecialMeshRenderingOption()) { + case G4ViewParameters::meshAsDefault: + [[fallthrough]]; case G4ViewParameters::meshAsDots: DrawTetMeshAsDots(mesh); // Tetrahedron mesh as dots implemented = true; @@ -1378,7 +1457,7 @@ void G4VSceneHandler::Draw3DRectMeshAsDots(const G4Mesh& mesh) std::map nameAndVisAttsByMaterial; // Instantiate the pseudo scene PseudoSceneFor3DRectMeshPositions pseudoScene - (&tmpPVModel,mesh.GetMeshDepth(),positionByMaterial,nameAndVisAttsByMaterial); + (&tmpPVModel,&mesh,positionByMaterial,nameAndVisAttsByMaterial); // Make private descent into the parameterisation tmpPVModel.DescribeYourselfTo(pseudoScene); // Now we have a map of positions by material. @@ -1522,7 +1601,7 @@ void G4VSceneHandler::Draw3DRectMeshAsSurfaces(const G4Mesh& mesh) std::map nameAndVisAttsByMaterial; // Instantiate the pseudo scene PseudoSceneFor3DRectMeshPositions pseudoScene - (&tmpPVModel,mesh.GetMeshDepth(),positionByMaterial,nameAndVisAttsByMaterial); + (&tmpPVModel,&mesh,positionByMaterial,nameAndVisAttsByMaterial); // Make private descent into the parameterisation tmpPVModel.DescribeYourselfTo(pseudoScene); // Now we have a map of positions by material. @@ -1666,7 +1745,7 @@ void G4VSceneHandler::DrawTetMeshAsDots(const G4Mesh& mesh) std::map nameAndVisAttsByMaterial; // Instantiate a pseudo scene PseudoSceneForTetVertices pseudoScene - (&tmpPVModel,mesh.GetMeshDepth(),verticesByMaterial,nameAndVisAttsByMaterial); + (&tmpPVModel,&mesh,verticesByMaterial,nameAndVisAttsByMaterial); // Make private descent into the parameterisation tmpPVModel.DescribeYourselfTo(pseudoScene); // Now we have a map of vertices by material. @@ -1804,7 +1883,7 @@ void G4VSceneHandler::DrawTetMeshAsSurfaces(const G4Mesh& mesh) std::map nameAndVisAttsByMaterial; // Instantiate a pseudo scene PseudoSceneForTetVertices pseudoScene - (&tmpPVModel,mesh.GetMeshDepth(),verticesByMaterial,nameAndVisAttsByMaterial); + (&tmpPVModel,&mesh,verticesByMaterial,nameAndVisAttsByMaterial); // Make private descent into the parameterisation tmpPVModel.DescribeYourselfTo(pseudoScene); // Now we have a map of vertices by material. diff --git a/source/visualization/management/src/G4VViewer.cc b/source/visualization/management/src/G4VViewer.cc index 8ab2fc2264b..203b5df82fa 100644 --- a/source/visualization/management/src/G4VViewer.cc +++ b/source/visualization/management/src/G4VViewer.cc @@ -44,6 +44,8 @@ #include "G4VPhysicalVolume.hh" #include "G4Transform3D.hh" #include "G4UImanager.hh" +#include "G4UIsession.hh" +#include "G4VInteractiveSession.hh" G4VViewer::G4VViewer (G4VSceneHandler& sceneHandler, G4int id, const G4String& name): @@ -65,6 +67,8 @@ fNeedKernelVisit (true) fVP = G4VisManager::GetInstance()->GetDefaultViewParameters(); fDefaultVP = fVP; + + fSceneTree.SetType(G4SceneTreeItem::root); } G4VViewer::~G4VViewer () { @@ -118,6 +122,7 @@ void G4VViewer::ProcessView () fNeedKernelVisit = false; fSceneHandler.ClearStore (); fSceneHandler.ProcessScene (); + UpdateGUISceneTree(); timer.Stop(); fKernelVisitElapsedTimeSeconds = timer.GetRealElapsed(); } @@ -139,7 +144,7 @@ void G4VViewer::SetTouchable if (iterator == pvStore->cend()) { G4ExceptionDescription ed; ed << "Volume no longer in physical volume store."; - G4Exception("G4VViewer::SetTouchable", "visman0501", JustWarning, ed); + G4Exception("G4VViewer::SetTouchable", "visman0401", JustWarning, ed); } else { oss << ' ' << pvNodeId.GetPhysicalVolume()->GetName() @@ -153,7 +158,7 @@ void G4VViewer::TouchableSetVisibility (const std::vector& fullPath, G4bool visibiity) { - // Changes the Vis Attribute Modifiers WITHOUT triggering a rebuild. + // Changes the Vis Attribute Modifiers and scene tree WITHOUT triggering a rebuild. // The following is equivalent to // G4UImanager::GetUIpointer()->ApplyCommand("/vis/touchable/set/visibility ..."); @@ -172,13 +177,26 @@ void G4VViewer::TouchableSetVisibility // G4ModelingParameters::VASVisibility (VAS = Vis Attribute Signifier) // signifies that it is the visibility that should be picked out // and merged with the touchable's normal vis attributes. + + // Find scene tree item and set visibility + // The scene tree works with strings + G4String fullPathString = G4PhysicalVolumeModel::GetPVNamePathString(fullPath); + std::list::iterator foundIter; + if (fSceneTree.FindTouchableFromRoot(fullPathString,foundIter)) { + foundIter->AccessVisAttributes().SetVisibility(visibiity); + UpdateGUISceneTree(); + } else { + G4ExceptionDescription ed; + ed << "Touchable \"" << fullPath << "\" not found"; + G4Exception("G4VViewer::TouchableSetVisibility", "visman0402", JustWarning, ed); + } } void G4VViewer::TouchableSetColour (const std::vector& fullPath, const G4Colour& colour) { - // Changes the Vis Attribute Modifiers WITHOUT triggering a rebuild. + // Changes the Vis Attribute Modifiers and scene tree WITHOUT triggering a rebuild. // The following is equivalent to // G4UImanager::GetUIpointer()->ApplyCommand("/vis/touchable/set/colour ..."); @@ -197,6 +215,201 @@ void G4VViewer::TouchableSetColour // G4ModelingParameters::VASColour (VAS = Vis Attribute Signifier) // signifies that it is the colour that should be picked out // and merged with the touchable's normal vis attributes. + + // Find scene tree item and set colour + // The scene tree works with strings + G4String fullPathString = G4PhysicalVolumeModel::GetPVNamePathString(fullPath); + std::list::iterator foundIter; + if (fSceneTree.FindTouchableFromRoot(fullPathString,foundIter)) { + foundIter->AccessVisAttributes().SetColour(colour); + UpdateGUISceneTree(); + } else { + G4ExceptionDescription ed; + ed << "Touchable \"" << fullPath << "\" not found"; + G4Exception("G4VViewer::TouchableSetColour", "visman0403", JustWarning, ed); + } +} + +void G4VViewer::UpdateGUISceneTree() +{ + G4UImanager* UI = G4UImanager::GetUIpointer(); + auto uiWindow = dynamic_cast(UI->GetG4UIWindow()); + if (uiWindow) uiWindow->UpdateSceneTree(fSceneTree); +} + +void G4VViewer::SceneTreeScene::SetModel(G4VModel* pModel) +{ + fpModel = pModel; + auto& modelType = fpModel->GetType(); + auto& modelID = fpModel->GetGlobalDescription(); + FindOrInsertModel(modelType,modelID); +} + +std::list::iterator G4VViewer::SceneTreeScene::FindOrInsertModel +(const G4String& modelType,const G4String& modelID) +{ + G4SceneTreeItem::Type type = G4SceneTreeItem::unidentified; + if (dynamic_cast(fpModel)) { + type = G4SceneTreeItem::pvmodel; + } else { + type = G4SceneTreeItem::model; + } + + auto& rootItem = fpViewer->fSceneTree; + rootItem.SetDescription(fpViewer->GetName()); + + // Find appropriate model + auto& modelItems = rootItem.AccessChildren(); + auto modelIter = modelItems.begin(); + auto pvModelIter = modelItems.end(); + for (; modelIter != modelItems.end(); ++modelIter) { + if (modelIter->GetType() == G4SceneTreeItem::pvmodel) { + pvModelIter = modelIter; // Last PV model + } + if (modelIter->GetModelDescription() == modelID) break; + } + + if (modelIter == modelItems.end()) { + + // Model not seen before + G4SceneTreeItem modelItem(type); + modelItem.SetDescription("model"); + modelItem.SetModelType(modelType); + modelItem.SetModelDescription(modelID); + if (pvModelIter != modelItems.end() && // There was pre-existing PV Model... + type == G4SceneTreeItem::pvmodel) { // ...and the new model is also PV... + modelIter = rootItem.InsertChild(++pvModelIter,modelItem); // ...insert after, else... + } else { + modelIter = rootItem.InsertChild(modelIter,modelItem); // ...insert at end + } + + } else { + + // Existing model - mark visible == active + modelIter->AccessVisAttributes().SetVisibility(true); + } + + return modelIter; +} + +std::list::iterator G4VViewer::SceneTreeScene::FindOrInsertTouchable + (const G4String& modelID, G4SceneTreeItem& mother, + G4int depth, const G4String& partialPathString, const G4String& fullPathString) +{ + auto pPVModel = dynamic_cast(fpModel); + if (pPVModel == nullptr) { + G4ExceptionDescription ed; + ed << fpModel->GetType() << ": not a Physical VolumeModel"; + G4Exception("G4VViewer::SceneTreeScene::FindOrInsertTouchable", "visman0404", FatalException, ed); + } + auto& children = mother.AccessChildren(); + auto childIter = children.begin(); + for (; childIter != children.end(); ++childIter) { + if (childIter->GetPVPath() == partialPathString) break; + } + if (childIter != children.end()) { + + // Item already exists + + if (childIter->GetType() == G4SceneTreeItem::ghost) { + + // Previously it was a ghost - but maybe this time it's real + + if (partialPathString == fullPathString) { + // Partial path string refers to the actual volume so it's a touchable + childIter->SetType(G4SceneTreeItem::touchable); + // Populate with information + childIter->SetDescription(fpModel->GetCurrentTag()); + childIter->SetModelType(fpModel->GetType()); + childIter->SetModelDescription(modelID); + childIter->SetPVPath(partialPathString); + if (fpVisAttributes) childIter->SetVisAttributes(*fpVisAttributes); + if (pPVModel) childIter->SetAttDefs(pPVModel->GetAttDefs()); + if (pPVModel) childIter->SetAttValues(pPVModel->CreateCurrentAttValues()); + } // Partial path string refers to an ancester - do nothing + + } else { + + // Already a pre-existing full touchable + + if (partialPathString == fullPathString) { + // Partial path string refers to the actual volume + // Replace vis attributes (if any) - they might have changed + if (fpVisAttributes) childIter->SetVisAttributes(*fpVisAttributes); + } // Partial path string refers to an ancester - do nothing + + } + + } else { + + // Item does not yet exist + + if (partialPathString == fullPathString) { + + // Partial path string refers to the actual volume + // Insert new touchable item + G4SceneTreeItem touchable(G4SceneTreeItem::touchable); + touchable.SetExpanded(depth > 2? false: true); + touchable.SetDescription(fpModel->GetCurrentTag()); + touchable.SetModelType(fpModel->GetType()); + touchable.SetModelDescription(modelID); + touchable.SetPVPath(partialPathString); + if (fpVisAttributes) touchable.SetVisAttributes(*fpVisAttributes); + if (pPVModel) touchable.SetAttDefs(pPVModel->GetAttDefs()); + if (pPVModel) touchable.SetAttValues(pPVModel->CreateCurrentAttValues()); + childIter = mother.InsertChild(childIter,touchable); + + } else { + + // Partial path string refers to an ancester - it's what we call a "ghost" + G4SceneTreeItem ghost(G4SceneTreeItem::ghost); + ghost.SetExpanded(depth > 2? false: true); + // Create a tag from the partial path + std::istringstream iss(partialPathString); + G4String name, copyNo; + while (iss >> name >> copyNo); + std::ostringstream oss; + oss << name << ':' << copyNo; + ghost.SetDescription(oss.str()); + ghost.SetModelType(fpModel->GetType()); + ghost.SetModelDescription(modelID); + ghost.SetPVPath(partialPathString); + ghost.AccessVisAttributes().SetVisibility(false); + childIter = mother.InsertChild(childIter,ghost); + } + } + + return childIter; +} + +void G4VViewer::SceneTreeScene::ProcessVolume(const G4VSolid&) +{ + auto& modelType = fpModel->GetType(); + auto& modelID = fpModel->GetGlobalDescription(); + auto modelIter = FindOrInsertModel(modelType,modelID); + + auto pPVModel = dynamic_cast(fpModel); + if (pPVModel) { // G4PhysicalVolumeModel + + std::ostringstream oss; oss << pPVModel->GetFullPVPath(); + G4String fullPathString(oss.str()); // Has a leading space - OK + + // Navigate scene tree and find or insert touchables one by one + const auto& nodeIDs = pPVModel->GetFullPVPath(); // std::vector + + // Work down the path - "name id", then "name id name id", etc. + G4String partialPathString; + auto currentIter = modelIter; + G4int depth = 0; + for (const auto& nodeID: nodeIDs) { + std::ostringstream oss1; oss1 << nodeID; + partialPathString += ' ' + oss1.str(); // Has a leading space - OK + currentIter = FindOrInsertTouchable + (modelID, *currentIter, ++depth, partialPathString, fullPathString); + } + } else { + // Orphan solid - what to do? Push an empty scene tree item???????????????????????? + } } std::vector G4VViewer::ComputeFlyThrough(G4Vector3D* /*aVect*/) diff --git a/source/visualization/management/src/G4VVisCommand.cc b/source/visualization/management/src/G4VVisCommand.cc index 7bc02c91ffb..e545f511fed 100644 --- a/source/visualization/management/src/G4VVisCommand.cc +++ b/source/visualization/management/src/G4VVisCommand.cc @@ -55,6 +55,7 @@ G4VisExtent G4VVisCommand::fCurrentExten std::vector G4VVisCommand::fCurrrentPVFindingsForField; G4bool G4VVisCommand::fThereWasAViewer = false; G4ViewParameters G4VVisCommand::fExistingVP; +G4SceneTreeItem G4VVisCommand::fExistingSceneTree; G4VVisCommand::G4VVisCommand () {} @@ -339,7 +340,6 @@ void G4VVisCommand::InterpolateToNewView void G4VVisCommand::Twinkle // Twinkles the touchables in paths -// /vis/viewer/centreOn to see its effect (G4VViewer* currentViewer, const G4ViewParameters& baseVP, const std::vector>& paths) @@ -379,16 +379,11 @@ void G4VVisCommand::Twinkle // Twinkle std::vector viewVector; - viewVector.push_back(loVP); - viewVector.push_back(hiVP); - viewVector.push_back(loVP); - viewVector.push_back(hiVP); - viewVector.push_back(loVP); - viewVector.push_back(hiVP); - viewVector.push_back(loVP); - viewVector.push_back(hiVP); - viewVector.push_back(loVP); - viewVector.push_back(hiVP); + // Just 5 twinkles is reasonable to get a human's attention + for (G4int i = 0; i < 5; i++) { + viewVector.push_back(loVP); + viewVector.push_back(hiVP); + } // Just 5 interpolation points for a reasonable twinkle rate InterpolateViews(currentViewer,viewVector,5); } diff --git a/source/visualization/management/src/G4ViewParameters.cc b/source/visualization/management/src/G4ViewParameters.cc index fc814243839..349c17b0363 100644 --- a/source/visualization/management/src/G4ViewParameters.cc +++ b/source/visualization/management/src/G4ViewParameters.cc @@ -104,7 +104,7 @@ G4ViewParameters::G4ViewParameters (): fDisplayLightFrontGreen(1.), fDisplayLightFrontBlue(0.), fSpecialMeshRendering(false), - fSpecialMeshRenderingOption(meshAsDots) + fSpecialMeshRenderingOption(meshAsDefault) { // Pick up default no of sides from G4Polyhedron. // Note that this parameter is variously called: @@ -896,6 +896,8 @@ std::ostream& operator << (std::ostream& os, G4ViewParameters::SMROption option) { switch (option) { + case G4ViewParameters::meshAsDefault: + os << "default"; break; case G4ViewParameters::meshAsDots: os << "dots"; break; case G4ViewParameters::meshAsSurfaces: diff --git a/source/visualization/management/src/G4VisCommandsSceneHandler.cc b/source/visualization/management/src/G4VisCommandsSceneHandler.cc index 77f96d87ba4..29886770e72 100644 --- a/source/visualization/management/src/G4VisCommandsSceneHandler.cc +++ b/source/visualization/management/src/G4VisCommandsSceneHandler.cc @@ -324,10 +324,12 @@ void G4VisCommandSceneHandlerCreate::SetNewValue (G4UIcommand* command, } } - // If there is an existing viewer, store its view parameters + // If there is an existing viewer, store its view parameters and scene tree if (fpVisManager->GetCurrentViewer()) { fThereWasAViewer = true; - fExistingVP = fpVisManager->GetCurrentViewer()->GetViewParameters(); + auto viewer = fpVisManager->GetCurrentViewer(); + fExistingVP = viewer->GetViewParameters(); + fExistingSceneTree = viewer->AccessSceneTree(); } // Set current graphics system in preparation for diff --git a/source/visualization/management/src/G4VisCommandsTouchable.cc b/source/visualization/management/src/G4VisCommandsTouchable.cc index 1436c4dc577..9711f1bd8b1 100644 --- a/source/visualization/management/src/G4VisCommandsTouchable.cc +++ b/source/visualization/management/src/G4VisCommandsTouchable.cc @@ -120,6 +120,11 @@ G4VisCommandsTouchable::G4VisCommandsTouchable() fpCommandShowExtent->SetParameterName("draw", omitable = true); fpCommandShowExtent->SetDefaultValue(false); + fpCommandTwinkle = new G4UIcmdWithoutParameter("/vis/touchable/twinkle",this); + fpCommandTwinkle->SetGuidance("Cause touchable to twinkle."); + // Pick up additional guidance from /vis/viewer/centreAndZoomInOn + CopyGuidanceFrom(fpCommandCentreAndZoomInOn,fpCommandTwinkle,1); + fpCommandVolumeForField = new G4UIcmdWithABool("/vis/touchable/volumeForField",this); fpCommandVolumeForField->SetGuidance("Set volume for field."); fpCommandVolumeForField->SetGuidance("If parameter == true, also draw."); @@ -131,6 +136,7 @@ G4VisCommandsTouchable::G4VisCommandsTouchable() G4VisCommandsTouchable::~G4VisCommandsTouchable() { delete fpCommandVolumeForField; + delete fpCommandTwinkle; delete fpCommandShowExtent; delete fpCommandLocalAxes; delete fpCommandFindPath; @@ -255,7 +261,6 @@ void G4VisCommandsTouchable::SetNewValue } else { G4warn << "Touchable not found." << G4endl; } - return; } else if (command == fpCommandDraw) { @@ -263,7 +268,7 @@ void G4VisCommandsTouchable::SetNewValue G4PhysicalVolumeModel::TouchableProperties properties = G4TouchableUtils::FindTouchableProperties(fCurrentTouchableProperties.fTouchablePath); if (properties.fpTouchablePV) { - // To handle paramaterisations we have to set the copy number + // To handle parameterisations we have to set the copy number properties.fpTouchablePV->SetCopyNo(properties.fCopyNo); G4PhysicalVolumeModel* pvModel = new G4PhysicalVolumeModel (properties.fpTouchablePV, @@ -310,7 +315,7 @@ void G4VisCommandsTouchable::SetNewValue G4PhysicalVolumeModel::TouchableProperties properties = G4TouchableUtils::FindTouchableProperties(fCurrentTouchableProperties.fTouchablePath); if (properties.fpTouchablePV) { - // To handle paramaterisations we have to set the copy number + // To handle parameterisations we have to set the copy number properties.fpTouchablePV->SetCopyNo(properties.fCopyNo); G4PhysicalVolumeModel tempPVModel (properties.fpTouchablePV, @@ -398,19 +403,27 @@ void G4VisCommandsTouchable::SetNewValue if (copyNo >= 0) G4warn << ':' << copyNo; G4warn << " not found" << G4endl; } + return; } else if (command == fpCommandLocalAxes) { - const auto& transform = fCurrentTouchableProperties.fTouchableGlobalTransform; - const auto& extent = fCurrentTouchableProperties.fpTouchablePV->GetLogicalVolume()->GetSolid()->GetExtent(); - const G4double lengthMax = extent.GetExtentRadius()/2.; - const G4double intLog10LengthMax = std::floor(std::log10(lengthMax)); - G4double length = std::pow(10,intLog10LengthMax); - if (5.*length < lengthMax) length *= 5.; - else if (2.*length < lengthMax) length *= 2.; - G4AxesModel axesModel(0.,0.,0.,length,transform); - axesModel.SetGlobalTag("LocalAxesModel"); - axesModel.DescribeYourselfTo(*fpVisManager->GetCurrentSceneHandler()); + G4PhysicalVolumeModel::TouchableProperties properties = + G4TouchableUtils::FindTouchableProperties(fCurrentTouchableProperties.fTouchablePath); + if (properties.fpTouchablePV) { + const auto& transform = fCurrentTouchableProperties.fTouchableGlobalTransform; + const auto& extent = fCurrentTouchableProperties.fpTouchablePV->GetLogicalVolume()->GetSolid()->GetExtent(); + const G4double lengthMax = extent.GetExtentRadius()/2.; + const G4double intLog10LengthMax = std::floor(std::log10(lengthMax)); + G4double length = std::pow(10,intLog10LengthMax); + if (5.*length < lengthMax) length *= 5.; + else if (2.*length < lengthMax) length *= 2.; + G4AxesModel axesModel(0.,0.,0.,length,transform); + axesModel.SetGlobalTag("LocalAxesModel"); + axesModel.DescribeYourselfTo(*fpVisManager->GetCurrentSceneHandler()); + } else { + G4warn << "Touchable not found." << G4endl; + } + return; } else if (command == fpCommandShowExtent) { @@ -427,6 +440,24 @@ void G4VisCommandsTouchable::SetNewValue } return; + } else if (command == fpCommandTwinkle) { + + G4PhysicalVolumeModel::TouchableProperties properties = + G4TouchableUtils::FindTouchableProperties(fCurrentTouchableProperties.fTouchablePath); + if (properties.fpTouchablePV) { + std::vector> touchables; + touchables.push_back(properties.fTouchableFullPVPath); + auto keepVisVerbose = fpVisManager->GetVerbosity(); + fpVisManager->SetVerboseLevel(G4VisManager::errors); + auto keepVP = currentViewer->GetViewParameters(); + Twinkle(currentViewer,currentViewer->GetViewParameters(),touchables); + SetViewParameters(currentViewer, keepVP); + fpVisManager->SetVerboseLevel(keepVisVerbose); + } else { + G4warn << "Touchable not found." << G4endl; + } + return; + } else if (command == fpCommandVolumeForField) { G4PhysicalVolumeModel::TouchableProperties properties = diff --git a/source/visualization/management/src/G4VisCommandsTouchableSet.cc b/source/visualization/management/src/G4VisCommandsTouchableSet.cc index 254c3f3a4e3..1ca166ea7f1 100644 --- a/source/visualization/management/src/G4VisCommandsTouchableSet.cc +++ b/source/visualization/management/src/G4VisCommandsTouchableSet.cc @@ -309,6 +309,20 @@ void G4VisCommandsTouchableSet::SetNewValue (workingVisAtts, G4ModelingParameters::VASVisibility, fCurrentTouchableProperties.fTouchablePath)); + if (verbosity >= G4VisManager::warnings) { + static G4bool first = true; + if (first) { + first = false; + G4warn << "WARNING: If \"/vis/touchable/set/visibility\" does not appear to" + "\n work, check that opacity (4th component of colour) is non-zero." << G4endl; + G4warn << "ALSO: The volume must be in a requested physical volume tree," + "\n not in the \"base path\". E.g., if" + "\n /vis/drawVolume volume-name" + "\n there is no way to make a parent of volume-name visible except by" + "\n explicitly adding the parent:" + "\n /vis/scene/add/volume parent-name" << G4endl; + } + } } else { diff --git a/source/visualization/management/src/G4VisCommandsViewer.cc b/source/visualization/management/src/G4VisCommandsViewer.cc index c81690ea8d4..9a3eef52143 100644 --- a/source/visualization/management/src/G4VisCommandsViewer.cc +++ b/source/visualization/management/src/G4VisCommandsViewer.cc @@ -1067,6 +1067,7 @@ void G4VisCommandViewerCreate::SetNewValue (G4UIcommand* command, G4String newVa if (existingViewer) { // ...bring view parameters up to date... fExistingVP = existingViewer->GetViewParameters(); + fExistingSceneTree = existingViewer->AccessSceneTree(); } } @@ -1090,13 +1091,16 @@ void G4VisCommandViewerCreate::SetNewValue (G4UIcommand* command, G4String newVa fExistingVP.SetXGeometryString(vp.GetXGeometryString()); vp = fExistingVP; newViewer->SetViewParameters(vp); + newViewer->AccessSceneTree() = fExistingSceneTree; } if (verbosity >= G4VisManager::confirmations) { G4cout << "New viewer \"" << newName << "\" created." << G4endl; } // Keep for next time... fThereWasAViewer = true; - fExistingVP = fpVisManager->GetCurrentViewer()->GetViewParameters(); + auto viewer = fpVisManager->GetCurrentViewer(); + fExistingVP = viewer->GetViewParameters(); + fExistingSceneTree = viewer->AccessSceneTree(); } else { G4ExceptionDescription ed; if (newViewer) { @@ -2168,6 +2172,9 @@ void G4VisCommandViewerSelect::SetNewValue (G4UIcommand*, G4String newValue) { fpVisManager -> SetCurrentViewer (viewer); RefreshIfRequired(viewer); + + // Update GUI scene tree (make sure it's in sync) + viewer->UpdateGUISceneTree(); } ////////////// /vis/viewer/update /////////////////////////////////////// diff --git a/source/visualization/management/src/G4VisCommandsViewerSet.cc b/source/visualization/management/src/G4VisCommandsViewerSet.cc index 0edfe333d9c..02cc00aae81 100644 --- a/source/visualization/management/src/G4VisCommandsViewerSet.cc +++ b/source/visualization/management/src/G4VisCommandsViewerSet.cc @@ -388,10 +388,10 @@ fViewpointVector (G4ThreeVector(0.,0.,1.)) fpCommandSpecialMeshRenderingOption = new G4UIcmdWithAString ("/vis/viewer/set/specialMeshRenderingOption",this); fpCommandSpecialMeshRenderingOption->SetGuidance - ("Set special mesh rendering option - \"dots\" or \"surfaces\"."); + ("Set special mesh rendering option - \"default\", \"dots\" or \"surfaces\"."); fpCommandSpecialMeshRenderingOption->SetParameterName ("option",omitable = true); - fpCommandSpecialMeshRenderingOption->SetCandidates("dots surfaces"); - fpCommandSpecialMeshRenderingOption->SetDefaultValue("dots"); + fpCommandSpecialMeshRenderingOption->SetCandidates("default dots surfaces"); + fpCommandSpecialMeshRenderingOption->SetDefaultValue("default"); fpCommandSpecialMeshVolumes = new G4UIcommand ("/vis/viewer/set/specialMeshVolumes",this); @@ -1274,8 +1274,11 @@ void G4VisCommandsViewerSet::SetNewValue } else if (command == fpCommandSpecialMeshRenderingOption) { - G4ViewParameters::SMROption option = G4ViewParameters::meshAsDots; - if (newValue == "surfaces") { + G4ViewParameters::SMROption option = G4ViewParameters::meshAsDefault; + if (newValue == "dots") { + option = G4ViewParameters::meshAsDots; + } + else if(newValue == "surfaces") { option = G4ViewParameters::meshAsSurfaces; } vp.SetSpecialMeshRenderingOption(option); diff --git a/source/visualization/modeling/GNUmakefile b/source/visualization/modeling/GNUmakefile deleted file mode 100644 index 4a3c966295a..00000000000 --- a/source/visualization/modeling/GNUmakefile +++ /dev/null @@ -1,45 +0,0 @@ -# -------------------------------------------------------------- -# GNUmakefile for modeling library. John Allison, 31/12/1997. -# -------------------------------------------------------------- - -name := G4modeling - -ifndef G4INSTALL - G4INSTALL = ../../.. -endif - -GLOBLIBS = libG4run.lib libG4event.lib -GLOBLIBS += libG4tracking.lib libG4processes.lib libG4digits_hits.lib -GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib -GLOBLIBS += libG4materials.lib libG4graphics_reps.lib -GLOBLIBS += libG4intercoms.lib libG4global.lib - -include $(G4INSTALL)/config/architecture.gmk - -CPPFLAGS += -I$(G4BASE)/global/management/include -CPPFLAGS += -I$(G4BASE)/graphics_reps/include -CPPFLAGS += -I$(G4BASE)/global/HEPGeometry/include -CPPFLAGS += -I$(G4BASE)/global/HEPNumerics/include -CPPFLAGS += -I$(G4BASE)/geometry/management/include -CPPFLAGS += -I$(G4BASE)/geometry/volumes/include -CPPFLAGS += -I$(G4BASE)/geometry/navigation/include -CPPFLAGS += -I$(G4BASE)/geometry/magneticfield/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/CSG/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/specific/include -CPPFLAGS += -I$(G4BASE)/geometry/solids/Boolean/include -CPPFLAGS += -I$(G4BASE)/materials/include -CPPFLAGS += -I$(G4BASE)/global/HEPRandom/include -CPPFLAGS += -I$(G4BASE)/processes/management/include -CPPFLAGS += -I$(G4BASE)/particles/management/include -CPPFLAGS += -I$(G4BASE)/run/include -CPPFLAGS += -I$(G4BASE)/tasking/include -CPPFLAGS += -I$(G4BASE)/event/include -CPPFLAGS += -I$(G4BASE)/digits_hits/utils/include -CPPFLAGS += -I$(G4BASE)/digits_hits/hits/include -CPPFLAGS += -I$(G4BASE)/digits_hits/digits/include -CPPFLAGS += -I$(G4BASE)/digits_hits/detector/include -CPPFLAGS += -I$(G4BASE)/tracking/include -CPPFLAGS += -I$(G4BASE)/track/include -CPPFLAGS += -I$(G4BASE)/intercoms/include - -include $(G4INSTALL)/config/common.gmk diff --git a/source/visualization/modeling/History b/source/visualization/modeling/History index 475afa5349c..9bf5ba1dfce 100644 --- a/source/visualization/modeling/History +++ b/source/visualization/modeling/History @@ -6,7 +6,36 @@ It must **not** be used as a substitute for writing good git commit messages! ------------------------------------------------------------------------------- -## 2022-12-13 John Allison (modeling-V11-00-15) +## 2023-05-30 John Allison (modeling-V11-01-05) +- G4PhysicalVolumeModel.cc: Fix Coverity warnings. + +## 2023-04-24 John Allison (modeling-V11-01-04) +- Coworks: visman-V11-01-09. +- These two tags implement "generic cutaways"...finally...after 20 years!!! + - See extensive description in visualization/management/History. +- G4PhysicalVolumeModel.cc: + - DescribeSolid: Improve tests for invalid Boolean solid in code for + section and cutaway. + - Algorithms based on G4SubtractionSolid::BoundingLimits and + G4IntersectionSolid::BoundingLimits by Evgueni Tcherniaev. + +## 2023-04-03 John Allison (modeling-V11-01-03) +- Bug fix: Initialise fFullPVPath. + +## 2023-03-28 John Allison (modeling-V11-01-02) +- Add static utility G4PhysicalVolumeModel::GetPVNamePathString. + +## 2023-02-12 John Allison (modeling-V11-01-01) +- G4VModel.hh + - Remove unnecessary reference to G4PhysicalVolumeModel. +- G4CallbackModel: + - Correct the description in the comments. +- G4PseudoScene: + - Add G4VisAttributes. + - This was always available, but never previously made onward + available to sub-classes. + +## 2022-12-13 John Allison (modeling-V11-01-00) - G4TextModel: Fix transform. - The rotation part of the transform was being ignored. This impacted the implementation of /vis/scene/add/localAxes. diff --git a/source/visualization/modeling/include/G4CallbackModel.hh b/source/visualization/modeling/include/G4CallbackModel.hh index e5ad2075986..0e26ee16ea8 100644 --- a/source/visualization/modeling/include/G4CallbackModel.hh +++ b/source/visualization/modeling/include/G4CallbackModel.hh @@ -38,14 +38,14 @@ // screen or remake a graphical database whenever required. The // function class must contain: // -// void operator()(G4VGraphicsScene&, const G4Transform3D&) +// void operator()(G4VGraphicsScene&,const G4ModelingParameters*) // // A base class G4VUserVisAction is provided in the visualisation // category. A G4CallbackModel is made by instantiating this template // with a pointer to the function object. The G4VisManager does this -// for the user if he/she registers it (SetUserAction) and issues the +// for the user if he/she registers it (Register*UserVisAction) and issues the // command /vis/scene/add/userAction. See the User Guide for -// Application Developers, Section 8.8.7 and 8.8.8. +// Application Developers. #ifndef G4CALLBACKMODEL_HH #define G4CALLBACKMODEL_HH diff --git a/source/visualization/modeling/include/G4ModelingParameters.hh b/source/visualization/modeling/include/G4ModelingParameters.hh index 5eaff512705..0da27d78b17 100644 --- a/source/visualization/modeling/include/G4ModelingParameters.hh +++ b/source/visualization/modeling/include/G4ModelingParameters.hh @@ -62,6 +62,11 @@ public: // With description cloud // Draw as a cloud of points }; + enum CutawayMode { + cutawayUnion, // Union (addition) of result of each cutaway plane. + cutawayIntersection // Intersection (multiplication). + }; + // enums and nested class for communicating a modification to the vis // attributes for a specfic touchable defined by PVNameCopyNoPath. enum VisAttributesSignifier { @@ -174,6 +179,7 @@ public: // With description const G4Point3D& GetExplodeCentre () const; G4int GetNoOfSides () const; G4DisplacedSolid* GetSectionSolid () const; + CutawayMode GetCutawayMode () const; G4DisplacedSolid* GetCutawaySolid () const; const G4Event* GetEvent () const; const std::vector& GetVisAttributesModifiers() const; @@ -196,6 +202,7 @@ public: // With description void SetExplodeCentre (const G4Point3D& explodeCentre); G4int SetNoOfSides (G4int); // Returns actual number set. void SetSectionSolid (G4DisplacedSolid* pSectionSolid); + void SetCutawayMode (CutawayMode); void SetCutawaySolid (G4DisplacedSolid* pCutawaySolid); void SetEvent (const G4Event* pEvent); void SetVisAttributesModifiers(const std::vector&); @@ -234,6 +241,7 @@ private: G4Point3D fExplodeCentre; // ...about this centre. G4int fNoOfSides; // ...if polygon approximates circle. G4DisplacedSolid* fpSectionSolid; // For generic section (DCUT). + CutawayMode fCutawayMode; // Cutaway mode. G4DisplacedSolid* fpCutawaySolid; // For generic cutaways. const G4Event* fpEvent; // Event being processed. std::vector fVisAttributesModifiers; diff --git a/source/visualization/modeling/include/G4ModelingParameters.icc b/source/visualization/modeling/include/G4ModelingParameters.icc index 58e5ed4eb02..be16de8a9b5 100644 --- a/source/visualization/modeling/include/G4ModelingParameters.icc +++ b/source/visualization/modeling/include/G4ModelingParameters.icc @@ -94,6 +94,9 @@ inline G4int G4ModelingParameters::GetNoOfSides () const { inline G4DisplacedSolid* G4ModelingParameters::GetSectionSolid () const {return fpSectionSolid;} +inline G4ModelingParameters::CutawayMode G4ModelingParameters::GetCutawayMode () const +{ return fCutawayMode;} + inline G4DisplacedSolid* G4ModelingParameters::GetCutawaySolid () const {return fpCutawaySolid;} @@ -164,6 +167,11 @@ inline void G4ModelingParameters::SetExplodeCentre fExplodeCentre = explodeCentre; } +inline void G4ModelingParameters::SetCutawayMode +(G4ModelingParameters::CutawayMode cutawayMode) { + fCutawayMode = cutawayMode; +} + inline void G4ModelingParameters::SetEvent(const G4Event* pEvent) { fpEvent = pEvent; } diff --git a/source/visualization/modeling/include/G4PhysicalVolumeModel.hh b/source/visualization/modeling/include/G4PhysicalVolumeModel.hh index 2e6fed7c568..7ec624db5a3 100644 --- a/source/visualization/modeling/include/G4PhysicalVolumeModel.hh +++ b/source/visualization/modeling/include/G4PhysicalVolumeModel.hh @@ -223,7 +223,11 @@ public: // With description static G4ModelingParameters::PVNameCopyNoPath GetPVNameCopyNoPath (const std::vector&); - // Converts + // Converts to PVNameCopyNoPath + + static G4String GetPVNamePathString(const std::vector&); + // Converts to path string, e.g., " World 0 Envelope 0 Shape1 0". + // Note leading space character. const std::map* GetAttDefs() const; // Attribute definitions for current solid. @@ -304,6 +308,7 @@ protected: mutable G4bool fCurtailDescent;// Can be set to curtail descent. G4VSolid* fpClippingSolid; ClippingMode fClippingMode; + G4int fNClippers; // No of clipping/cutting solids - only 0 or 1 allowed private: diff --git a/source/visualization/modeling/include/G4PseudoScene.hh b/source/visualization/modeling/include/G4PseudoScene.hh index ac24d22cbdd..a191bfd7be8 100644 --- a/source/visualization/modeling/include/G4PseudoScene.hh +++ b/source/visualization/modeling/include/G4PseudoScene.hh @@ -51,11 +51,13 @@ class G4PseudoScene: public G4VGraphicsScene { public: - G4PseudoScene(): fpCurrentObjectTransformation(0) {} - virtual ~G4PseudoScene () {} + G4PseudoScene() = default; + virtual ~G4PseudoScene() = default; void PreAddSolid (const G4Transform3D& objectTransformation, - const G4VisAttributes&) - {fpCurrentObjectTransformation = &objectTransformation;} + const G4VisAttributes& visAttributes) { + fpCurrentObjectTransformation = &objectTransformation; + fpVisAttributes = &visAttributes; + } void PostAddSolid () {} // From geometry/solids/CSG void AddSolid (const G4Box& solid) {ProcessVolume (solid);} @@ -98,7 +100,8 @@ public: protected: virtual void ProcessVolume (const G4VSolid&); - const G4Transform3D* fpCurrentObjectTransformation; + const G4Transform3D* fpCurrentObjectTransformation = nullptr; + const G4VisAttributes* fpVisAttributes = nullptr; }; #endif diff --git a/source/visualization/modeling/include/G4VModel.hh b/source/visualization/modeling/include/G4VModel.hh index 9ed2ab5b5db..101377ec22d 100644 --- a/source/visualization/modeling/include/G4VModel.hh +++ b/source/visualization/modeling/include/G4VModel.hh @@ -34,8 +34,6 @@ // graphics-system-indepedent description of a Geant4 component. // The key fuctionality of a model is to know how to describe itself // to a scene handler. A scene is a collection of models. -// A special case is made for G4PhysicalVolumeModel - a non-null pointer -// is to be returned by G4PhysicalVolumeModel::GetG4PhysicalVolumeModel(). #ifndef G4VMODEL_HH #define G4VMODEL_HH @@ -46,8 +44,6 @@ class G4VGraphicsScene; class G4ModelingParameters; -class G4PhysicalVolumeModel; // Special case - see above. - class G4VModel { public: // With description diff --git a/source/visualization/modeling/src/G4ModelingParameters.cc b/source/visualization/modeling/src/G4ModelingParameters.cc index 04c96197afa..d0b5436ae0e 100644 --- a/source/visualization/modeling/src/G4ModelingParameters.cc +++ b/source/visualization/modeling/src/G4ModelingParameters.cc @@ -57,6 +57,7 @@ G4ModelingParameters::G4ModelingParameters (): fExplodeFactor (1.), fNoOfSides (24), fpSectionSolid (0), + fCutawayMode (cutawayUnion), fpCutawaySolid (0), fpEvent (0), fSpecialMeshRendering (false) @@ -85,6 +86,7 @@ G4ModelingParameters::G4ModelingParameters fExplodeFactor (1.), fNoOfSides (noOfSides), fpSectionSolid (0), + fCutawayMode (cutawayUnion), fpCutawaySolid (0), fpEvent (0), fSpecialMeshRendering (false) @@ -226,6 +228,10 @@ std::ostream& operator << (std::ostream& os, const G4ModelingParameters& mp) if (!mp.fpSectionSolid) os << "non-"; os << "null"; + os << "\n Cutaway mode: "; + if (mp.GetCutawayMode() == G4ModelingParameters::cutawayUnion) os << "union"; + else if (mp.GetCutawayMode() == G4ModelingParameters::cutawayIntersection) os << "intersection"; + os << "\n Cutaway (DCUT) shape (G4DisplacedSolid) pointer: "; if (!mp.fpCutawaySolid) os << "non-"; os << "null"; @@ -274,6 +280,7 @@ G4bool G4ModelingParameters::operator != (fExplodeCentre != mp.fExplodeCentre) || (fNoOfSides != mp.fNoOfSides) || (fpSectionSolid != mp.fpSectionSolid) || + (fCutawayMode != mp.fCutawayMode) || (fpCutawaySolid != mp.fpCutawaySolid) || (fpEvent != mp.fpEvent) || (fSpecialMeshRendering != mp.fSpecialMeshRendering) diff --git a/source/visualization/modeling/src/G4PhysicalVolumeModel.cc b/source/visualization/modeling/src/G4PhysicalVolumeModel.cc index e6def4c1158..4a500ab83a5 100644 --- a/source/visualization/modeling/src/G4PhysicalVolumeModel.cc +++ b/source/visualization/modeling/src/G4PhysicalVolumeModel.cc @@ -81,10 +81,12 @@ G4PhysicalVolumeModel::G4PhysicalVolumeModel , fpCurrentMaterial (fpCurrentLV? fpCurrentLV->GetMaterial(): 0) , fCurrentTransform (modelTransform) , fBaseFullPVPath (baseFullPVPath) +, fFullPVPath (fBaseFullPVPath) , fAbort (false) , fCurtailDescent (false) , fpClippingSolid (0) , fClippingMode (subtraction) +, fNClippers (0) { fType = "G4PhysicalVolumeModel"; @@ -132,6 +134,16 @@ G4ModelingParameters::PVNameCopyNoPath G4PhysicalVolumeModel::GetPVNameCopyNoPat return PVNameCopyNoPath; } +G4String G4PhysicalVolumeModel::GetPVNamePathString +(const std::vector& path) +// Converts to path string, e.g., " World 0 Envelope 0 Shape1 0". +// Note leading space character. +{ + std::ostringstream oss; + oss << path; + return oss.str(); +} + void G4PhysicalVolumeModel::CalculateExtent () { // To handle paramaterisations, set copy number and compute dimensions @@ -181,13 +193,34 @@ void G4PhysicalVolumeModel::CalculateExtent () void G4PhysicalVolumeModel::DescribeYourselfTo (G4VGraphicsScene& sceneHandler) { - if (!fpTopPV) G4Exception + if (!fpTopPV) { + G4Exception ("G4PhysicalVolumeModel::DescribeYourselfTo", "modeling0012", FatalException, "No model."); + return; // Should never reach here, but keeps Coverity happy. + } - if (!fpMP) G4Exception + if (!fpMP) { + G4Exception ("G4PhysicalVolumeModel::DescribeYourselfTo", - "modeling0003", FatalException, "No modeling parameters."); + "modeling0013", FatalException, "No modeling parameters."); + return; // Should never reach here, but keeps Coverity happy. + } + + fNClippers = 0; + G4DisplacedSolid* pSectionSolid = fpMP->GetSectionSolid(); + G4DisplacedSolid* pCutawaySolid = fpMP->GetCutawaySolid(); + if (fpClippingSolid) fNClippers++; + if (pSectionSolid) fNClippers++; + if (pCutawaySolid) fNClippers++; + if (fNClippers > 1) { + G4ExceptionDescription ed; + ed << "More than one solid cutter/clipper:"; + if (fpClippingSolid) ed << "\nclipper in force"; + if (pSectionSolid) ed << "\nsectioner in force"; + if (pCutawaySolid) ed << "\ncutaway in force"; + G4Exception("G4PhysicalVolumeModel::DescribeSolid", "modeling0016", JustWarning, ed); + } G4Transform3D startingTransformation = fTransform; @@ -736,6 +769,49 @@ void G4PhysicalVolumeModel::DescribeAndDescend } } +namespace +{ + G4bool SubtractionBoundingLimits(const G4VSolid* target) + { + // Algorithm from G4SubtractionSolid::BoundingLimits + // Since it is unclear how the shape of the first solid will be changed + // after subtraction, just return its original bounding box. + G4ThreeVector pMin, pMax; + const auto& pSolA = target; + pSolA->BoundingLimits(pMin,pMax); + // Check correctness of the bounding box + if (pMin.x() >= pMax.x() || pMin.y() >= pMax.y() || pMin.z() >= pMax.z()) { + // Bad bounding box (min >= max) + // This signifies a subtraction of non-intersecting volumes + return false; + } + return true; + } + + G4bool IntersectionBoundingLimits(const G4VSolid* target, const G4DisplacedSolid* intersector) + { + // Algorithm from G4IntersectionSolid::BoundingLimits + G4ThreeVector pMin, pMax; + G4ThreeVector minA,maxA, minB,maxB; + const auto& pSolA = target; + const auto& pSolB = intersector; + pSolA->BoundingLimits(minA,maxA); + pSolB->BoundingLimits(minB,maxB); + pMin.set(std::max(minA.x(),minB.x()), + std::max(minA.y(),minB.y()), + std::max(minA.z(),minB.z())); + pMax.set(std::min(maxA.x(),maxB.x()), + std::min(maxA.y(),maxB.y()), + std::min(maxA.z(),maxB.z())); + if (pMin.x() >= pMax.x() || pMin.y() >= pMax.y() || pMin.z() >= pMax.z()) { + // Bad bounding box (min >= max) + // This signifies a subtraction of non-intersecting volumes + return false; + } + return true; + } +} + void G4PhysicalVolumeModel::DescribeSolid (const G4Transform3D& theAT, G4VSolid* pSol, @@ -745,45 +821,65 @@ void G4PhysicalVolumeModel::DescribeSolid G4DisplacedSolid* pSectionSolid = fpMP->GetSectionSolid(); G4DisplacedSolid* pCutawaySolid = fpMP->GetCutawaySolid(); - if (!fpClippingSolid && !pSectionSolid && !pCutawaySolid) { + if (fNClippers <= 0 || fNClippers > 1) { + // Normal case - no clipping, etc. - or, illegally, more than one of those sceneHandler.PreAddSolid (theAT, *pVisAttribs); pSol -> DescribeYourselfTo (sceneHandler); // Standard treatment. sceneHandler.PostAddSolid (); - } else { + } else { // fNClippers == 1 - G4VSolid* pResultantSolid = nullptr; + G4VSolid* pResultantSolid = nullptr; + G4DisplacedSolid* pDisplacedSolid = nullptr; if (fpClippingSolid) { + pDisplacedSolid = new G4DisplacedSolid("clipper", fpClippingSolid, theAT.inverse()); switch (fClippingMode) { - default: case subtraction: - pResultantSolid = new G4SubtractionSolid - ("subtracted_clipped_solid", pSol, fpClippingSolid, theAT.inverse()); + if (SubtractionBoundingLimits(pSol)) { + pResultantSolid = new G4SubtractionSolid + ("subtracted_clipped_solid", pSol, pDisplacedSolid); + } break; case intersection: - pResultantSolid = new G4IntersectionSolid - ("intersected_clipped_solid", pSol, fpClippingSolid, theAT.inverse()); + if (IntersectionBoundingLimits(pSol, pDisplacedSolid)) { + pResultantSolid = new G4IntersectionSolid + ("intersected_clipped_solid", pSol, pDisplacedSolid); + } break; } - } - if (pSectionSolid) { - pResultantSolid = new G4IntersectionSolid - ("sectioned_solid", pSol, pSectionSolid, theAT.inverse()); - } + } else if (pSectionSolid) { + pDisplacedSolid = new G4DisplacedSolid("intersector", pSectionSolid, theAT.inverse()); + if (IntersectionBoundingLimits(pSol, pDisplacedSolid)) { + pResultantSolid = new G4IntersectionSolid("sectioned_solid", pSol, pDisplacedSolid); + } - if (pCutawaySolid) { - pResultantSolid = new G4SubtractionSolid - ("cutaway_solid", pSol, pCutawaySolid, theAT.inverse()); + } else if (pCutawaySolid) { + pDisplacedSolid = new G4DisplacedSolid("cutaway", pCutawaySolid, theAT.inverse()); + switch (fpMP->GetCutawayMode()) { + case G4ModelingParameters::cutawayUnion: + if (SubtractionBoundingLimits(pSol)) { + pResultantSolid = new G4SubtractionSolid("cutaway_solid", pSol, pDisplacedSolid); + } + break; + case G4ModelingParameters::cutawayIntersection: + if (IntersectionBoundingLimits(pSol, pDisplacedSolid)) { + pResultantSolid = new G4IntersectionSolid("cutaway_solid", pSol, pDisplacedSolid); + } + break; + } } - sceneHandler.PreAddSolid (theAT, *pVisAttribs); - pResultantSolid -> DescribeYourselfTo (sceneHandler); - sceneHandler.PostAddSolid (); + if (pResultantSolid) { + sceneHandler.PreAddSolid (theAT, *pVisAttribs); + pResultantSolid -> DescribeYourselfTo (sceneHandler); + sceneHandler.PostAddSolid (); + } delete pResultantSolid; + delete pDisplacedSolid; } }